diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py index 6eb4de7..e54de43 100644 --- a/.config/qutebrowser/config.py +++ b/.config/qutebrowser/config.py @@ -196,7 +196,7 @@ c.tabs.show = 'switching' # Directory to save downloads to. If unset, a sensible OS-specific # default is used. # Type: Directory -c.downloads.location.directory = '~/Descargas' +c.downloads.location.directory = '/home/diegofcs/Descargas' c.downloads.location.prompt = False c.downloads.remove_finished = 500 diff --git a/.config/qutebrowser/qsettings/QtProject.conf b/.config/qutebrowser/qsettings/QtProject.conf index f132677..4c3a710 100644 --- a/.config/qutebrowser/qsettings/QtProject.conf +++ b/.config/qutebrowser/qsettings/QtProject.conf @@ -1,7 +1,7 @@ [FileDialog] -history=file:///home/diegofcs/Documentos/Trabajo_oficina/Proceso_Oscar, file:///home/diegofcs/Documentos/Trabajo_oficina/Trabajo_SINTRASECOL/Activos/Procesos_Fabiano/Proceso_adtivo, file:///home/diegofcs/Imagenes/Screenshots, file:///home/diegofcs/Descargas, file:///home/diegofcs/Imagenes/Wallpapers -lastVisited=file:///home/diegofcs/Imagenes/Wallpapers -qtVersion=5.15.5 +history=file:///home/diegofcs/Descargas, file:///home/diegofcs, file:///home/diegofcs/Documentos/Formatos_y_otros, file:///home/diegofcs/Imagenes/Screenshots, file:///home/diegofcs/Documentos/Trabajo_oficina/Trabajo_SINTRASECOL/Capacitaciones +lastVisited=file:///home/diegofcs/Imagenes/Screenshots +qtVersion=5.15.7 shortcuts=file:, file:///home/diegofcs sidebarWidth=83 treeViewHeader=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x3#\0\0\0\x4\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x4\0\0\x1\xec\0\0\0\x1\0\0\0\0\0\0\0K\0\0\0\x1\0\0\0\0\0\0\0\x31\0\0\0\x1\0\0\0\0\0\0\0\xbb\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\xff\xff\xff\xff) diff --git a/.config/sbase b/.config/sbase deleted file mode 160000 index 2c2a7f5..0000000 --- a/.config/sbase +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2c2a7f54ab55a022a617e510b6e00c3e2736fabd diff --git a/.config/startpages/minim/index.html b/.config/startpages/minim/index.html index 8d9b1cd..813af64 100644 --- a/.config/startpages/minim/index.html +++ b/.config/startpages/minim/index.html @@ -26,77 +26,41 @@ - - -
~other - - - - - -
- -
- ~tech - - - - - - - - + + +
~work + + - - - - - -
- ~linux - - - - - - - - - - - - -
-
- ~personal + ~mails - - + + - - + +
diff --git a/.config/startpages/minim/style/main.css b/.config/startpages/minim/style/main.css index 46bb74d..2fd16aa 100644 --- a/.config/startpages/minim/style/main.css +++ b/.config/startpages/minim/style/main.css @@ -11,7 +11,7 @@ body { font-family: "Hack Nerd Font"; - font-size: 11px; + font-size: 10px; background: var(--bgColor); color: var(--textColor); border: #f7f7f7; @@ -35,7 +35,7 @@ a > div:hover { justify-content: center; flex-direction: column; width: auto; - margin-top: 15rem; + margin-top: 25rem; outline-style: solid; outline-color: #f7f7f7; outline-width: 1px; diff --git a/.config/startpages/term/index.html b/.config/startpages/term/index.html index 77e2415..e7d23f6 100644 --- a/.config/startpages/term/index.html +++ b/.config/startpages/term/index.html @@ -16,40 +16,31 @@

/usr/

- -
  • -

    /wks/

    - -
  • -
  • -

    /etc/

    - +
  • phoronix
  • +
  • hackernews
  • +
  • itsfoss
  • + + +
  • +

    /anime/

    +
  • diff --git a/.config/startpages/term/style.css b/.config/startpages/term/style.css index c77d375..cb559e1 100644 --- a/.config/startpages/term/style.css +++ b/.config/startpages/term/style.css @@ -9,7 +9,7 @@ } html { - font-size: 11px; + font-size: 10px; } body { diff --git a/.vim/plugged/colorizer b/.vim/plugged/colorizer deleted file mode 160000 index 72790a0..0000000 --- a/.vim/plugged/colorizer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 72790a003d5a706c287486a1a81e3a6b32158b54 diff --git a/.fonts/.uuid b/home/.fonts/.uuid similarity index 100% rename from .fonts/.uuid rename to home/.fonts/.uuid diff --git a/.fonts/Hack Bold Italic Nerd Font Complete Mono Windows Compatible.ttf b/home/.fonts/Hack Bold Italic Nerd Font Complete Mono Windows Compatible.ttf similarity index 100% rename from .fonts/Hack Bold Italic Nerd Font Complete Mono Windows Compatible.ttf rename to home/.fonts/Hack Bold Italic Nerd Font Complete Mono Windows Compatible.ttf diff --git a/.fonts/Hack Bold Italic Nerd Font Complete Mono.ttf b/home/.fonts/Hack Bold Italic Nerd Font Complete Mono.ttf similarity index 100% rename from .fonts/Hack Bold Italic Nerd Font Complete Mono.ttf rename to home/.fonts/Hack Bold Italic Nerd Font Complete Mono.ttf diff --git a/.fonts/Hack Bold Italic Nerd Font Complete Windows Compatible.ttf b/home/.fonts/Hack Bold Italic Nerd Font Complete Windows Compatible.ttf similarity index 100% rename from .fonts/Hack Bold Italic Nerd Font Complete Windows Compatible.ttf rename to home/.fonts/Hack Bold Italic Nerd Font Complete Windows Compatible.ttf diff --git a/.fonts/Hack Bold Italic Nerd Font Complete.ttf b/home/.fonts/Hack Bold Italic Nerd Font Complete.ttf similarity index 100% rename from .fonts/Hack Bold Italic Nerd Font Complete.ttf rename to home/.fonts/Hack Bold Italic Nerd Font Complete.ttf diff --git a/.fonts/Hack Bold Nerd Font Complete Mono Windows Compatible.ttf b/home/.fonts/Hack Bold Nerd Font Complete Mono Windows Compatible.ttf similarity index 100% rename from .fonts/Hack Bold Nerd Font Complete Mono Windows Compatible.ttf rename to home/.fonts/Hack Bold Nerd Font Complete Mono Windows Compatible.ttf diff --git a/.fonts/Hack Bold Nerd Font Complete Mono.ttf b/home/.fonts/Hack Bold Nerd Font Complete Mono.ttf similarity index 100% rename from .fonts/Hack Bold Nerd Font Complete Mono.ttf rename to home/.fonts/Hack Bold Nerd Font Complete Mono.ttf diff --git a/.fonts/Hack Bold Nerd Font Complete Windows Compatible.ttf b/home/.fonts/Hack Bold Nerd Font Complete Windows Compatible.ttf similarity index 100% rename from .fonts/Hack Bold Nerd Font Complete Windows Compatible.ttf rename to home/.fonts/Hack Bold Nerd Font Complete Windows Compatible.ttf diff --git a/.fonts/Hack Bold Nerd Font Complete.ttf b/home/.fonts/Hack Bold Nerd Font Complete.ttf similarity index 100% rename from .fonts/Hack Bold Nerd Font Complete.ttf rename to home/.fonts/Hack Bold Nerd Font Complete.ttf diff --git a/.fonts/Hack Italic Nerd Font Complete Mono Windows Compatible.ttf b/home/.fonts/Hack Italic Nerd Font Complete Mono Windows Compatible.ttf similarity index 100% rename from .fonts/Hack Italic Nerd Font Complete Mono Windows Compatible.ttf rename to home/.fonts/Hack Italic Nerd Font Complete Mono Windows Compatible.ttf diff --git a/.fonts/Hack Italic Nerd Font Complete Mono.ttf b/home/.fonts/Hack Italic Nerd Font Complete Mono.ttf similarity index 100% rename from .fonts/Hack Italic Nerd Font Complete Mono.ttf rename to home/.fonts/Hack Italic Nerd Font Complete Mono.ttf diff --git a/.fonts/Hack Italic Nerd Font Complete Windows Compatible.ttf b/home/.fonts/Hack Italic Nerd Font Complete Windows Compatible.ttf similarity index 100% rename from .fonts/Hack Italic Nerd Font Complete Windows Compatible.ttf rename to home/.fonts/Hack Italic Nerd Font Complete Windows Compatible.ttf diff --git a/.fonts/Hack Italic Nerd Font Complete.ttf b/home/.fonts/Hack Italic Nerd Font Complete.ttf similarity index 100% rename from .fonts/Hack Italic Nerd Font Complete.ttf rename to home/.fonts/Hack Italic Nerd Font Complete.ttf diff --git a/.fonts/Hack Regular Nerd Font Complete Mono Windows Compatible.ttf b/home/.fonts/Hack Regular Nerd Font Complete Mono Windows Compatible.ttf similarity index 100% rename from .fonts/Hack Regular Nerd Font Complete Mono Windows Compatible.ttf rename to home/.fonts/Hack Regular Nerd Font Complete Mono Windows Compatible.ttf diff --git a/.fonts/Hack Regular Nerd Font Complete Mono.ttf b/home/.fonts/Hack Regular Nerd Font Complete Mono.ttf similarity index 100% rename from .fonts/Hack Regular Nerd Font Complete Mono.ttf rename to home/.fonts/Hack Regular Nerd Font Complete Mono.ttf diff --git a/.fonts/Hack Regular Nerd Font Complete Windows Compatible.ttf b/home/.fonts/Hack Regular Nerd Font Complete Windows Compatible.ttf similarity index 100% rename from .fonts/Hack Regular Nerd Font Complete Windows Compatible.ttf rename to home/.fonts/Hack Regular Nerd Font Complete Windows Compatible.ttf diff --git a/.fonts/Hack Regular Nerd Font Complete.ttf b/home/.fonts/Hack Regular Nerd Font Complete.ttf similarity index 100% rename from .fonts/Hack Regular Nerd Font Complete.ttf rename to home/.fonts/Hack Regular Nerd Font Complete.ttf diff --git a/.fonts/LinBiolinum_K.ttf b/home/.fonts/LinBiolinum_K.ttf similarity index 100% rename from .fonts/LinBiolinum_K.ttf rename to home/.fonts/LinBiolinum_K.ttf diff --git a/.fonts/LinBiolinum_R.ttf b/home/.fonts/LinBiolinum_R.ttf similarity index 100% rename from .fonts/LinBiolinum_R.ttf rename to home/.fonts/LinBiolinum_R.ttf diff --git a/.fonts/LinBiolinum_RB.ttf b/home/.fonts/LinBiolinum_RB.ttf similarity index 100% rename from .fonts/LinBiolinum_RB.ttf rename to home/.fonts/LinBiolinum_RB.ttf diff --git a/.fonts/LinBiolinum_RI.ttf b/home/.fonts/LinBiolinum_RI.ttf similarity index 100% rename from .fonts/LinBiolinum_RI.ttf rename to home/.fonts/LinBiolinum_RI.ttf diff --git a/.fonts/LinBiolinum_aBL.ttf b/home/.fonts/LinBiolinum_aBL.ttf similarity index 100% rename from .fonts/LinBiolinum_aBL.ttf rename to home/.fonts/LinBiolinum_aBL.ttf diff --git a/.fonts/LinBiolinum_aRL.ttf b/home/.fonts/LinBiolinum_aRL.ttf similarity index 100% rename from .fonts/LinBiolinum_aRL.ttf rename to home/.fonts/LinBiolinum_aRL.ttf diff --git a/.fonts/LinBiolinum_aS.ttf b/home/.fonts/LinBiolinum_aS.ttf similarity index 100% rename from .fonts/LinBiolinum_aS.ttf rename to home/.fonts/LinBiolinum_aS.ttf diff --git a/.fonts/LinBiolinum_aSB.ttf b/home/.fonts/LinBiolinum_aSB.ttf similarity index 100% rename from .fonts/LinBiolinum_aSB.ttf rename to home/.fonts/LinBiolinum_aSB.ttf diff --git a/.fonts/LinBiolinum_aSI.ttf b/home/.fonts/LinBiolinum_aSI.ttf similarity index 100% rename from .fonts/LinBiolinum_aSI.ttf rename to home/.fonts/LinBiolinum_aSI.ttf diff --git a/.fonts/LinBiolinum_aU.ttf b/home/.fonts/LinBiolinum_aU.ttf similarity index 100% rename from .fonts/LinBiolinum_aU.ttf rename to home/.fonts/LinBiolinum_aU.ttf diff --git a/.fonts/LinBiolinum_aUB.ttf b/home/.fonts/LinBiolinum_aUB.ttf similarity index 100% rename from .fonts/LinBiolinum_aUB.ttf rename to home/.fonts/LinBiolinum_aUB.ttf diff --git a/.fonts/LinBiolinum_aUI.ttf b/home/.fonts/LinBiolinum_aUI.ttf similarity index 100% rename from .fonts/LinBiolinum_aUI.ttf rename to home/.fonts/LinBiolinum_aUI.ttf diff --git a/.fonts/LinBiolinum_aW.ttf b/home/.fonts/LinBiolinum_aW.ttf similarity index 100% rename from .fonts/LinBiolinum_aW.ttf rename to home/.fonts/LinBiolinum_aW.ttf diff --git a/.fonts/LinBiolinum_aWB.ttf b/home/.fonts/LinBiolinum_aWB.ttf similarity index 100% rename from .fonts/LinBiolinum_aWB.ttf rename to home/.fonts/LinBiolinum_aWB.ttf diff --git a/.fonts/LinBiolinum_aWI.ttf b/home/.fonts/LinBiolinum_aWI.ttf similarity index 100% rename from .fonts/LinBiolinum_aWI.ttf rename to home/.fonts/LinBiolinum_aWI.ttf diff --git a/.fonts/NotoKufiArabic-Bold.ttf b/home/.fonts/NotoKufiArabic-Bold.ttf similarity index 100% rename from .fonts/NotoKufiArabic-Bold.ttf rename to home/.fonts/NotoKufiArabic-Bold.ttf diff --git a/.fonts/NotoKufiArabic-Regular.ttf b/home/.fonts/NotoKufiArabic-Regular.ttf similarity index 100% rename from .fonts/NotoKufiArabic-Regular.ttf rename to home/.fonts/NotoKufiArabic-Regular.ttf diff --git a/.fonts/NotoKufiArabic-Semibold.ttf b/home/.fonts/NotoKufiArabic-Semibold.ttf similarity index 100% rename from .fonts/NotoKufiArabic-Semibold.ttf rename to home/.fonts/NotoKufiArabic-Semibold.ttf diff --git a/.fonts/NotoMusic-Regular.ttf b/home/.fonts/NotoMusic-Regular.ttf similarity index 100% rename from .fonts/NotoMusic-Regular.ttf rename to home/.fonts/NotoMusic-Regular.ttf diff --git a/.fonts/NotoNaskhArabic-Bold.ttf b/home/.fonts/NotoNaskhArabic-Bold.ttf similarity index 100% rename from .fonts/NotoNaskhArabic-Bold.ttf rename to home/.fonts/NotoNaskhArabic-Bold.ttf diff --git a/.fonts/NotoNaskhArabic-Regular.ttf b/home/.fonts/NotoNaskhArabic-Regular.ttf similarity index 100% rename from .fonts/NotoNaskhArabic-Regular.ttf rename to home/.fonts/NotoNaskhArabic-Regular.ttf diff --git a/.fonts/NotoNaskhArabicUI-Bold.ttf b/home/.fonts/NotoNaskhArabicUI-Bold.ttf similarity index 100% rename from .fonts/NotoNaskhArabicUI-Bold.ttf rename to home/.fonts/NotoNaskhArabicUI-Bold.ttf diff --git a/.fonts/NotoNaskhArabicUI-Regular.ttf b/home/.fonts/NotoNaskhArabicUI-Regular.ttf similarity index 100% rename from .fonts/NotoNaskhArabicUI-Regular.ttf rename to home/.fonts/NotoNaskhArabicUI-Regular.ttf diff --git a/.fonts/NotoNastaliqUrdu-Bold.ttf b/home/.fonts/NotoNastaliqUrdu-Bold.ttf similarity index 100% rename from .fonts/NotoNastaliqUrdu-Bold.ttf rename to home/.fonts/NotoNastaliqUrdu-Bold.ttf diff --git a/.fonts/NotoNastaliqUrdu-Regular.ttf b/home/.fonts/NotoNastaliqUrdu-Regular.ttf similarity index 100% rename from .fonts/NotoNastaliqUrdu-Regular.ttf rename to home/.fonts/NotoNastaliqUrdu-Regular.ttf diff --git a/.fonts/NotoSans-Bold.ttf b/home/.fonts/NotoSans-Bold.ttf similarity index 100% rename from .fonts/NotoSans-Bold.ttf rename to home/.fonts/NotoSans-Bold.ttf diff --git a/.fonts/NotoSans-BoldItalic.ttf b/home/.fonts/NotoSans-BoldItalic.ttf similarity index 100% rename from .fonts/NotoSans-BoldItalic.ttf rename to home/.fonts/NotoSans-BoldItalic.ttf diff --git a/.fonts/NotoSans-Italic.ttf b/home/.fonts/NotoSans-Italic.ttf similarity index 100% rename from .fonts/NotoSans-Italic.ttf rename to home/.fonts/NotoSans-Italic.ttf diff --git a/.fonts/NotoSans-Regular.ttf b/home/.fonts/NotoSans-Regular.ttf similarity index 100% rename from .fonts/NotoSans-Regular.ttf rename to home/.fonts/NotoSans-Regular.ttf diff --git a/.fonts/NotoSansAdlam-Regular.ttf b/home/.fonts/NotoSansAdlam-Regular.ttf similarity index 100% rename from .fonts/NotoSansAdlam-Regular.ttf rename to home/.fonts/NotoSansAdlam-Regular.ttf diff --git a/.fonts/NotoSansAdlamUnjoined-Regular.ttf b/home/.fonts/NotoSansAdlamUnjoined-Regular.ttf similarity index 100% rename from .fonts/NotoSansAdlamUnjoined-Regular.ttf rename to home/.fonts/NotoSansAdlamUnjoined-Regular.ttf diff --git a/.fonts/NotoSansAnatolianHieroglyphs-Regular.ttf b/home/.fonts/NotoSansAnatolianHieroglyphs-Regular.ttf similarity index 100% rename from .fonts/NotoSansAnatolianHieroglyphs-Regular.ttf rename to home/.fonts/NotoSansAnatolianHieroglyphs-Regular.ttf diff --git a/.fonts/NotoSansArabic-Bold.ttf b/home/.fonts/NotoSansArabic-Bold.ttf similarity index 100% rename from .fonts/NotoSansArabic-Bold.ttf rename to home/.fonts/NotoSansArabic-Bold.ttf diff --git a/.fonts/NotoSansArabic-Regular.ttf b/home/.fonts/NotoSansArabic-Regular.ttf similarity index 100% rename from .fonts/NotoSansArabic-Regular.ttf rename to home/.fonts/NotoSansArabic-Regular.ttf diff --git a/.fonts/NotoSansArabicUI-Bold.ttf b/home/.fonts/NotoSansArabicUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansArabicUI-Bold.ttf rename to home/.fonts/NotoSansArabicUI-Bold.ttf diff --git a/.fonts/NotoSansArabicUI-Regular.ttf b/home/.fonts/NotoSansArabicUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansArabicUI-Regular.ttf rename to home/.fonts/NotoSansArabicUI-Regular.ttf diff --git a/.fonts/NotoSansArmenian-Bold.ttf b/home/.fonts/NotoSansArmenian-Bold.ttf similarity index 100% rename from .fonts/NotoSansArmenian-Bold.ttf rename to home/.fonts/NotoSansArmenian-Bold.ttf diff --git a/.fonts/NotoSansArmenian-Regular.ttf b/home/.fonts/NotoSansArmenian-Regular.ttf similarity index 100% rename from .fonts/NotoSansArmenian-Regular.ttf rename to home/.fonts/NotoSansArmenian-Regular.ttf diff --git a/.fonts/NotoSansAvestan-Regular.ttf b/home/.fonts/NotoSansAvestan-Regular.ttf similarity index 100% rename from .fonts/NotoSansAvestan-Regular.ttf rename to home/.fonts/NotoSansAvestan-Regular.ttf diff --git a/.fonts/NotoSansBamum-Regular.ttf b/home/.fonts/NotoSansBamum-Regular.ttf similarity index 100% rename from .fonts/NotoSansBamum-Regular.ttf rename to home/.fonts/NotoSansBamum-Regular.ttf diff --git a/.fonts/NotoSansBassaVah-Regular.ttf b/home/.fonts/NotoSansBassaVah-Regular.ttf similarity index 100% rename from .fonts/NotoSansBassaVah-Regular.ttf rename to home/.fonts/NotoSansBassaVah-Regular.ttf diff --git a/.fonts/NotoSansBatak-Regular.ttf b/home/.fonts/NotoSansBatak-Regular.ttf similarity index 100% rename from .fonts/NotoSansBatak-Regular.ttf rename to home/.fonts/NotoSansBatak-Regular.ttf diff --git a/.fonts/NotoSansBengali-Bold.ttf b/home/.fonts/NotoSansBengali-Bold.ttf similarity index 100% rename from .fonts/NotoSansBengali-Bold.ttf rename to home/.fonts/NotoSansBengali-Bold.ttf diff --git a/.fonts/NotoSansBengali-Regular.ttf b/home/.fonts/NotoSansBengali-Regular.ttf similarity index 100% rename from .fonts/NotoSansBengali-Regular.ttf rename to home/.fonts/NotoSansBengali-Regular.ttf diff --git a/.fonts/NotoSansBengaliUI-Bold.ttf b/home/.fonts/NotoSansBengaliUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansBengaliUI-Bold.ttf rename to home/.fonts/NotoSansBengaliUI-Bold.ttf diff --git a/.fonts/NotoSansBengaliUI-Regular.ttf b/home/.fonts/NotoSansBengaliUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansBengaliUI-Regular.ttf rename to home/.fonts/NotoSansBengaliUI-Regular.ttf diff --git a/.fonts/NotoSansBhaiksuki-Regular.ttf b/home/.fonts/NotoSansBhaiksuki-Regular.ttf similarity index 100% rename from .fonts/NotoSansBhaiksuki-Regular.ttf rename to home/.fonts/NotoSansBhaiksuki-Regular.ttf diff --git a/.fonts/NotoSansBrahmi-Regular.ttf b/home/.fonts/NotoSansBrahmi-Regular.ttf similarity index 100% rename from .fonts/NotoSansBrahmi-Regular.ttf rename to home/.fonts/NotoSansBrahmi-Regular.ttf diff --git a/.fonts/NotoSansBuginese-Regular.ttf b/home/.fonts/NotoSansBuginese-Regular.ttf similarity index 100% rename from .fonts/NotoSansBuginese-Regular.ttf rename to home/.fonts/NotoSansBuginese-Regular.ttf diff --git a/.fonts/NotoSansBuhid-Regular.ttf b/home/.fonts/NotoSansBuhid-Regular.ttf similarity index 100% rename from .fonts/NotoSansBuhid-Regular.ttf rename to home/.fonts/NotoSansBuhid-Regular.ttf diff --git a/.fonts/NotoSansCJK-Black.ttc b/home/.fonts/NotoSansCJK-Black.ttc similarity index 100% rename from .fonts/NotoSansCJK-Black.ttc rename to home/.fonts/NotoSansCJK-Black.ttc diff --git a/.fonts/NotoSansCJK-Bold.ttc b/home/.fonts/NotoSansCJK-Bold.ttc similarity index 100% rename from .fonts/NotoSansCJK-Bold.ttc rename to home/.fonts/NotoSansCJK-Bold.ttc diff --git a/.fonts/NotoSansCJK-DemiLight.ttc b/home/.fonts/NotoSansCJK-DemiLight.ttc similarity index 100% rename from .fonts/NotoSansCJK-DemiLight.ttc rename to home/.fonts/NotoSansCJK-DemiLight.ttc diff --git a/.fonts/NotoSansCJK-Light.ttc b/home/.fonts/NotoSansCJK-Light.ttc similarity index 100% rename from .fonts/NotoSansCJK-Light.ttc rename to home/.fonts/NotoSansCJK-Light.ttc diff --git a/.fonts/NotoSansCJK-Medium.ttc b/home/.fonts/NotoSansCJK-Medium.ttc similarity index 100% rename from .fonts/NotoSansCJK-Medium.ttc rename to home/.fonts/NotoSansCJK-Medium.ttc diff --git a/.fonts/NotoSansCJK-Regular.ttc b/home/.fonts/NotoSansCJK-Regular.ttc similarity index 100% rename from .fonts/NotoSansCJK-Regular.ttc rename to home/.fonts/NotoSansCJK-Regular.ttc diff --git a/.fonts/NotoSansCJK-Thin.ttc b/home/.fonts/NotoSansCJK-Thin.ttc similarity index 100% rename from .fonts/NotoSansCJK-Thin.ttc rename to home/.fonts/NotoSansCJK-Thin.ttc diff --git a/.fonts/NotoSansCanadianAboriginal-Bold.ttf b/home/.fonts/NotoSansCanadianAboriginal-Bold.ttf similarity index 100% rename from .fonts/NotoSansCanadianAboriginal-Bold.ttf rename to home/.fonts/NotoSansCanadianAboriginal-Bold.ttf diff --git a/.fonts/NotoSansCanadianAboriginal-Regular.ttf b/home/.fonts/NotoSansCanadianAboriginal-Regular.ttf similarity index 100% rename from .fonts/NotoSansCanadianAboriginal-Regular.ttf rename to home/.fonts/NotoSansCanadianAboriginal-Regular.ttf diff --git a/.fonts/NotoSansCarian-Regular.ttf b/home/.fonts/NotoSansCarian-Regular.ttf similarity index 100% rename from .fonts/NotoSansCarian-Regular.ttf rename to home/.fonts/NotoSansCarian-Regular.ttf diff --git a/.fonts/NotoSansCaucasianAlbanian-Regular.ttf b/home/.fonts/NotoSansCaucasianAlbanian-Regular.ttf similarity index 100% rename from .fonts/NotoSansCaucasianAlbanian-Regular.ttf rename to home/.fonts/NotoSansCaucasianAlbanian-Regular.ttf diff --git a/.fonts/NotoSansChakma-Regular.ttf b/home/.fonts/NotoSansChakma-Regular.ttf similarity index 100% rename from .fonts/NotoSansChakma-Regular.ttf rename to home/.fonts/NotoSansChakma-Regular.ttf diff --git a/.fonts/NotoSansCham-Bold.ttf b/home/.fonts/NotoSansCham-Bold.ttf similarity index 100% rename from .fonts/NotoSansCham-Bold.ttf rename to home/.fonts/NotoSansCham-Bold.ttf diff --git a/.fonts/NotoSansCham-Regular.ttf b/home/.fonts/NotoSansCham-Regular.ttf similarity index 100% rename from .fonts/NotoSansCham-Regular.ttf rename to home/.fonts/NotoSansCham-Regular.ttf diff --git a/.fonts/NotoSansCherokee-Bold.ttf b/home/.fonts/NotoSansCherokee-Bold.ttf similarity index 100% rename from .fonts/NotoSansCherokee-Bold.ttf rename to home/.fonts/NotoSansCherokee-Bold.ttf diff --git a/.fonts/NotoSansCherokee-Regular.ttf b/home/.fonts/NotoSansCherokee-Regular.ttf similarity index 100% rename from .fonts/NotoSansCherokee-Regular.ttf rename to home/.fonts/NotoSansCherokee-Regular.ttf diff --git a/.fonts/NotoSansCoptic-Regular.ttf b/home/.fonts/NotoSansCoptic-Regular.ttf similarity index 100% rename from .fonts/NotoSansCoptic-Regular.ttf rename to home/.fonts/NotoSansCoptic-Regular.ttf diff --git a/.fonts/NotoSansCuneiform-Regular.ttf b/home/.fonts/NotoSansCuneiform-Regular.ttf similarity index 100% rename from .fonts/NotoSansCuneiform-Regular.ttf rename to home/.fonts/NotoSansCuneiform-Regular.ttf diff --git a/.fonts/NotoSansCypriot-Regular.ttf b/home/.fonts/NotoSansCypriot-Regular.ttf similarity index 100% rename from .fonts/NotoSansCypriot-Regular.ttf rename to home/.fonts/NotoSansCypriot-Regular.ttf diff --git a/.fonts/NotoSansDeseret-Regular.ttf b/home/.fonts/NotoSansDeseret-Regular.ttf similarity index 100% rename from .fonts/NotoSansDeseret-Regular.ttf rename to home/.fonts/NotoSansDeseret-Regular.ttf diff --git a/.fonts/NotoSansDevanagari-Bold.ttf b/home/.fonts/NotoSansDevanagari-Bold.ttf similarity index 100% rename from .fonts/NotoSansDevanagari-Bold.ttf rename to home/.fonts/NotoSansDevanagari-Bold.ttf diff --git a/.fonts/NotoSansDevanagari-Regular.ttf b/home/.fonts/NotoSansDevanagari-Regular.ttf similarity index 100% rename from .fonts/NotoSansDevanagari-Regular.ttf rename to home/.fonts/NotoSansDevanagari-Regular.ttf diff --git a/.fonts/NotoSansDevanagariUI-Bold.ttf b/home/.fonts/NotoSansDevanagariUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansDevanagariUI-Bold.ttf rename to home/.fonts/NotoSansDevanagariUI-Bold.ttf diff --git a/.fonts/NotoSansDevanagariUI-Regular.ttf b/home/.fonts/NotoSansDevanagariUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansDevanagariUI-Regular.ttf rename to home/.fonts/NotoSansDevanagariUI-Regular.ttf diff --git a/.fonts/NotoSansDisplay-Bold.ttf b/home/.fonts/NotoSansDisplay-Bold.ttf similarity index 100% rename from .fonts/NotoSansDisplay-Bold.ttf rename to home/.fonts/NotoSansDisplay-Bold.ttf diff --git a/.fonts/NotoSansDisplay-BoldItalic.ttf b/home/.fonts/NotoSansDisplay-BoldItalic.ttf similarity index 100% rename from .fonts/NotoSansDisplay-BoldItalic.ttf rename to home/.fonts/NotoSansDisplay-BoldItalic.ttf diff --git a/.fonts/NotoSansDisplay-Italic.ttf b/home/.fonts/NotoSansDisplay-Italic.ttf similarity index 100% rename from .fonts/NotoSansDisplay-Italic.ttf rename to home/.fonts/NotoSansDisplay-Italic.ttf diff --git a/.fonts/NotoSansDisplay-Regular.ttf b/home/.fonts/NotoSansDisplay-Regular.ttf similarity index 100% rename from .fonts/NotoSansDisplay-Regular.ttf rename to home/.fonts/NotoSansDisplay-Regular.ttf diff --git a/.fonts/NotoSansDuployan-Regular.ttf b/home/.fonts/NotoSansDuployan-Regular.ttf similarity index 100% rename from .fonts/NotoSansDuployan-Regular.ttf rename to home/.fonts/NotoSansDuployan-Regular.ttf diff --git a/.fonts/NotoSansEgyptianHieroglyphs-Regular.ttf b/home/.fonts/NotoSansEgyptianHieroglyphs-Regular.ttf similarity index 100% rename from .fonts/NotoSansEgyptianHieroglyphs-Regular.ttf rename to home/.fonts/NotoSansEgyptianHieroglyphs-Regular.ttf diff --git a/.fonts/NotoSansElbasan-Regular.ttf b/home/.fonts/NotoSansElbasan-Regular.ttf similarity index 100% rename from .fonts/NotoSansElbasan-Regular.ttf rename to home/.fonts/NotoSansElbasan-Regular.ttf diff --git a/.fonts/NotoSansEthiopic-Bold.ttf b/home/.fonts/NotoSansEthiopic-Bold.ttf similarity index 100% rename from .fonts/NotoSansEthiopic-Bold.ttf rename to home/.fonts/NotoSansEthiopic-Bold.ttf diff --git a/.fonts/NotoSansEthiopic-Regular.ttf b/home/.fonts/NotoSansEthiopic-Regular.ttf similarity index 100% rename from .fonts/NotoSansEthiopic-Regular.ttf rename to home/.fonts/NotoSansEthiopic-Regular.ttf diff --git a/.fonts/NotoSansGeorgian-Bold.ttf b/home/.fonts/NotoSansGeorgian-Bold.ttf similarity index 100% rename from .fonts/NotoSansGeorgian-Bold.ttf rename to home/.fonts/NotoSansGeorgian-Bold.ttf diff --git a/.fonts/NotoSansGeorgian-Regular.ttf b/home/.fonts/NotoSansGeorgian-Regular.ttf similarity index 100% rename from .fonts/NotoSansGeorgian-Regular.ttf rename to home/.fonts/NotoSansGeorgian-Regular.ttf diff --git a/.fonts/NotoSansGlagolitic-Regular.ttf b/home/.fonts/NotoSansGlagolitic-Regular.ttf similarity index 100% rename from .fonts/NotoSansGlagolitic-Regular.ttf rename to home/.fonts/NotoSansGlagolitic-Regular.ttf diff --git a/.fonts/NotoSansGothic-Regular.ttf b/home/.fonts/NotoSansGothic-Regular.ttf similarity index 100% rename from .fonts/NotoSansGothic-Regular.ttf rename to home/.fonts/NotoSansGothic-Regular.ttf diff --git a/.fonts/NotoSansGrantha-Regular.ttf b/home/.fonts/NotoSansGrantha-Regular.ttf similarity index 100% rename from .fonts/NotoSansGrantha-Regular.ttf rename to home/.fonts/NotoSansGrantha-Regular.ttf diff --git a/.fonts/NotoSansGujarati-Bold.ttf b/home/.fonts/NotoSansGujarati-Bold.ttf similarity index 100% rename from .fonts/NotoSansGujarati-Bold.ttf rename to home/.fonts/NotoSansGujarati-Bold.ttf diff --git a/.fonts/NotoSansGujarati-Regular.ttf b/home/.fonts/NotoSansGujarati-Regular.ttf similarity index 100% rename from .fonts/NotoSansGujarati-Regular.ttf rename to home/.fonts/NotoSansGujarati-Regular.ttf diff --git a/.fonts/NotoSansGujaratiUI-Bold.ttf b/home/.fonts/NotoSansGujaratiUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansGujaratiUI-Bold.ttf rename to home/.fonts/NotoSansGujaratiUI-Bold.ttf diff --git a/.fonts/NotoSansGujaratiUI-Regular.ttf b/home/.fonts/NotoSansGujaratiUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansGujaratiUI-Regular.ttf rename to home/.fonts/NotoSansGujaratiUI-Regular.ttf diff --git a/.fonts/NotoSansGurmukhi-Bold.ttf b/home/.fonts/NotoSansGurmukhi-Bold.ttf similarity index 100% rename from .fonts/NotoSansGurmukhi-Bold.ttf rename to home/.fonts/NotoSansGurmukhi-Bold.ttf diff --git a/.fonts/NotoSansGurmukhi-Regular.ttf b/home/.fonts/NotoSansGurmukhi-Regular.ttf similarity index 100% rename from .fonts/NotoSansGurmukhi-Regular.ttf rename to home/.fonts/NotoSansGurmukhi-Regular.ttf diff --git a/.fonts/NotoSansGurmukhiUI-Bold.ttf b/home/.fonts/NotoSansGurmukhiUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansGurmukhiUI-Bold.ttf rename to home/.fonts/NotoSansGurmukhiUI-Bold.ttf diff --git a/.fonts/NotoSansGurmukhiUI-Regular.ttf b/home/.fonts/NotoSansGurmukhiUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansGurmukhiUI-Regular.ttf rename to home/.fonts/NotoSansGurmukhiUI-Regular.ttf diff --git a/.fonts/NotoSansHanifiRohingya-Regular.ttf b/home/.fonts/NotoSansHanifiRohingya-Regular.ttf similarity index 100% rename from .fonts/NotoSansHanifiRohingya-Regular.ttf rename to home/.fonts/NotoSansHanifiRohingya-Regular.ttf diff --git a/.fonts/NotoSansHanunoo-Regular.ttf b/home/.fonts/NotoSansHanunoo-Regular.ttf similarity index 100% rename from .fonts/NotoSansHanunoo-Regular.ttf rename to home/.fonts/NotoSansHanunoo-Regular.ttf diff --git a/.fonts/NotoSansHatran-Regular.ttf b/home/.fonts/NotoSansHatran-Regular.ttf similarity index 100% rename from .fonts/NotoSansHatran-Regular.ttf rename to home/.fonts/NotoSansHatran-Regular.ttf diff --git a/.fonts/NotoSansHebrew-Bold.ttf b/home/.fonts/NotoSansHebrew-Bold.ttf similarity index 100% rename from .fonts/NotoSansHebrew-Bold.ttf rename to home/.fonts/NotoSansHebrew-Bold.ttf diff --git a/.fonts/NotoSansHebrew-Regular.ttf b/home/.fonts/NotoSansHebrew-Regular.ttf similarity index 100% rename from .fonts/NotoSansHebrew-Regular.ttf rename to home/.fonts/NotoSansHebrew-Regular.ttf diff --git a/.fonts/NotoSansImperialAramaic-Regular.ttf b/home/.fonts/NotoSansImperialAramaic-Regular.ttf similarity index 100% rename from .fonts/NotoSansImperialAramaic-Regular.ttf rename to home/.fonts/NotoSansImperialAramaic-Regular.ttf diff --git a/.fonts/NotoSansIndicSiyaqNumbers-Regular.ttf b/home/.fonts/NotoSansIndicSiyaqNumbers-Regular.ttf similarity index 100% rename from .fonts/NotoSansIndicSiyaqNumbers-Regular.ttf rename to home/.fonts/NotoSansIndicSiyaqNumbers-Regular.ttf diff --git a/.fonts/NotoSansInscriptionalPahlavi-Regular.ttf b/home/.fonts/NotoSansInscriptionalPahlavi-Regular.ttf similarity index 100% rename from .fonts/NotoSansInscriptionalPahlavi-Regular.ttf rename to home/.fonts/NotoSansInscriptionalPahlavi-Regular.ttf diff --git a/.fonts/NotoSansInscriptionalParthian-Regular.ttf b/home/.fonts/NotoSansInscriptionalParthian-Regular.ttf similarity index 100% rename from .fonts/NotoSansInscriptionalParthian-Regular.ttf rename to home/.fonts/NotoSansInscriptionalParthian-Regular.ttf diff --git a/.fonts/NotoSansJavanese-Bold.ttf b/home/.fonts/NotoSansJavanese-Bold.ttf similarity index 100% rename from .fonts/NotoSansJavanese-Bold.ttf rename to home/.fonts/NotoSansJavanese-Bold.ttf diff --git a/.fonts/NotoSansJavanese-Regular.ttf b/home/.fonts/NotoSansJavanese-Regular.ttf similarity index 100% rename from .fonts/NotoSansJavanese-Regular.ttf rename to home/.fonts/NotoSansJavanese-Regular.ttf diff --git a/.fonts/NotoSansKaithi-Regular.ttf b/home/.fonts/NotoSansKaithi-Regular.ttf similarity index 100% rename from .fonts/NotoSansKaithi-Regular.ttf rename to home/.fonts/NotoSansKaithi-Regular.ttf diff --git a/.fonts/NotoSansKannada-Bold.ttf b/home/.fonts/NotoSansKannada-Bold.ttf similarity index 100% rename from .fonts/NotoSansKannada-Bold.ttf rename to home/.fonts/NotoSansKannada-Bold.ttf diff --git a/.fonts/NotoSansKannada-Regular.ttf b/home/.fonts/NotoSansKannada-Regular.ttf similarity index 100% rename from .fonts/NotoSansKannada-Regular.ttf rename to home/.fonts/NotoSansKannada-Regular.ttf diff --git a/.fonts/NotoSansKannadaUI-Bold.ttf b/home/.fonts/NotoSansKannadaUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansKannadaUI-Bold.ttf rename to home/.fonts/NotoSansKannadaUI-Bold.ttf diff --git a/.fonts/NotoSansKannadaUI-Regular.ttf b/home/.fonts/NotoSansKannadaUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansKannadaUI-Regular.ttf rename to home/.fonts/NotoSansKannadaUI-Regular.ttf diff --git a/.fonts/NotoSansKayahLi-Regular.ttf b/home/.fonts/NotoSansKayahLi-Regular.ttf similarity index 100% rename from .fonts/NotoSansKayahLi-Regular.ttf rename to home/.fonts/NotoSansKayahLi-Regular.ttf diff --git a/.fonts/NotoSansKharoshthi-Regular.ttf b/home/.fonts/NotoSansKharoshthi-Regular.ttf similarity index 100% rename from .fonts/NotoSansKharoshthi-Regular.ttf rename to home/.fonts/NotoSansKharoshthi-Regular.ttf diff --git a/.fonts/NotoSansKhmer-Bold.ttf b/home/.fonts/NotoSansKhmer-Bold.ttf similarity index 100% rename from .fonts/NotoSansKhmer-Bold.ttf rename to home/.fonts/NotoSansKhmer-Bold.ttf diff --git a/.fonts/NotoSansKhmer-Regular.ttf b/home/.fonts/NotoSansKhmer-Regular.ttf similarity index 100% rename from .fonts/NotoSansKhmer-Regular.ttf rename to home/.fonts/NotoSansKhmer-Regular.ttf diff --git a/.fonts/NotoSansKhmerUI-Bold.ttf b/home/.fonts/NotoSansKhmerUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansKhmerUI-Bold.ttf rename to home/.fonts/NotoSansKhmerUI-Bold.ttf diff --git a/.fonts/NotoSansKhmerUI-Regular.ttf b/home/.fonts/NotoSansKhmerUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansKhmerUI-Regular.ttf rename to home/.fonts/NotoSansKhmerUI-Regular.ttf diff --git a/.fonts/NotoSansKhojki-Regular.ttf b/home/.fonts/NotoSansKhojki-Regular.ttf similarity index 100% rename from .fonts/NotoSansKhojki-Regular.ttf rename to home/.fonts/NotoSansKhojki-Regular.ttf diff --git a/.fonts/NotoSansKhudawadi-Regular.ttf b/home/.fonts/NotoSansKhudawadi-Regular.ttf similarity index 100% rename from .fonts/NotoSansKhudawadi-Regular.ttf rename to home/.fonts/NotoSansKhudawadi-Regular.ttf diff --git a/.fonts/NotoSansLao-Bold.ttf b/home/.fonts/NotoSansLao-Bold.ttf similarity index 100% rename from .fonts/NotoSansLao-Bold.ttf rename to home/.fonts/NotoSansLao-Bold.ttf diff --git a/.fonts/NotoSansLao-Regular.ttf b/home/.fonts/NotoSansLao-Regular.ttf similarity index 100% rename from .fonts/NotoSansLao-Regular.ttf rename to home/.fonts/NotoSansLao-Regular.ttf diff --git a/.fonts/NotoSansLaoUI-Bold.ttf b/home/.fonts/NotoSansLaoUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansLaoUI-Bold.ttf rename to home/.fonts/NotoSansLaoUI-Bold.ttf diff --git a/.fonts/NotoSansLaoUI-Regular.ttf b/home/.fonts/NotoSansLaoUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansLaoUI-Regular.ttf rename to home/.fonts/NotoSansLaoUI-Regular.ttf diff --git a/.fonts/NotoSansLepcha-Regular.ttf b/home/.fonts/NotoSansLepcha-Regular.ttf similarity index 100% rename from .fonts/NotoSansLepcha-Regular.ttf rename to home/.fonts/NotoSansLepcha-Regular.ttf diff --git a/.fonts/NotoSansLimbu-Regular.ttf b/home/.fonts/NotoSansLimbu-Regular.ttf similarity index 100% rename from .fonts/NotoSansLimbu-Regular.ttf rename to home/.fonts/NotoSansLimbu-Regular.ttf diff --git a/.fonts/NotoSansLinearA-Regular.ttf b/home/.fonts/NotoSansLinearA-Regular.ttf similarity index 100% rename from .fonts/NotoSansLinearA-Regular.ttf rename to home/.fonts/NotoSansLinearA-Regular.ttf diff --git a/.fonts/NotoSansLinearB-Regular.ttf b/home/.fonts/NotoSansLinearB-Regular.ttf similarity index 100% rename from .fonts/NotoSansLinearB-Regular.ttf rename to home/.fonts/NotoSansLinearB-Regular.ttf diff --git a/.fonts/NotoSansLisu-Regular.ttf b/home/.fonts/NotoSansLisu-Regular.ttf similarity index 100% rename from .fonts/NotoSansLisu-Regular.ttf rename to home/.fonts/NotoSansLisu-Regular.ttf diff --git a/.fonts/NotoSansLycian-Regular.ttf b/home/.fonts/NotoSansLycian-Regular.ttf similarity index 100% rename from .fonts/NotoSansLycian-Regular.ttf rename to home/.fonts/NotoSansLycian-Regular.ttf diff --git a/.fonts/NotoSansLydian-Regular.ttf b/home/.fonts/NotoSansLydian-Regular.ttf similarity index 100% rename from .fonts/NotoSansLydian-Regular.ttf rename to home/.fonts/NotoSansLydian-Regular.ttf diff --git a/.fonts/NotoSansMahajani-Regular.ttf b/home/.fonts/NotoSansMahajani-Regular.ttf similarity index 100% rename from .fonts/NotoSansMahajani-Regular.ttf rename to home/.fonts/NotoSansMahajani-Regular.ttf diff --git a/.fonts/NotoSansMalayalam-Bold.ttf b/home/.fonts/NotoSansMalayalam-Bold.ttf similarity index 100% rename from .fonts/NotoSansMalayalam-Bold.ttf rename to home/.fonts/NotoSansMalayalam-Bold.ttf diff --git a/.fonts/NotoSansMalayalam-Regular.ttf b/home/.fonts/NotoSansMalayalam-Regular.ttf similarity index 100% rename from .fonts/NotoSansMalayalam-Regular.ttf rename to home/.fonts/NotoSansMalayalam-Regular.ttf diff --git a/.fonts/NotoSansMalayalamUI-Bold.ttf b/home/.fonts/NotoSansMalayalamUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansMalayalamUI-Bold.ttf rename to home/.fonts/NotoSansMalayalamUI-Bold.ttf diff --git a/.fonts/NotoSansMalayalamUI-Regular.ttf b/home/.fonts/NotoSansMalayalamUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansMalayalamUI-Regular.ttf rename to home/.fonts/NotoSansMalayalamUI-Regular.ttf diff --git a/.fonts/NotoSansMandaic-Regular.ttf b/home/.fonts/NotoSansMandaic-Regular.ttf similarity index 100% rename from .fonts/NotoSansMandaic-Regular.ttf rename to home/.fonts/NotoSansMandaic-Regular.ttf diff --git a/.fonts/NotoSansManichaean-Regular.ttf b/home/.fonts/NotoSansManichaean-Regular.ttf similarity index 100% rename from .fonts/NotoSansManichaean-Regular.ttf rename to home/.fonts/NotoSansManichaean-Regular.ttf diff --git a/.fonts/NotoSansMarchen-Regular.ttf b/home/.fonts/NotoSansMarchen-Regular.ttf similarity index 100% rename from .fonts/NotoSansMarchen-Regular.ttf rename to home/.fonts/NotoSansMarchen-Regular.ttf diff --git a/.fonts/NotoSansMath-Regular.ttf b/home/.fonts/NotoSansMath-Regular.ttf similarity index 100% rename from .fonts/NotoSansMath-Regular.ttf rename to home/.fonts/NotoSansMath-Regular.ttf diff --git a/.fonts/NotoSansMayanNumerals-Regular.ttf b/home/.fonts/NotoSansMayanNumerals-Regular.ttf similarity index 100% rename from .fonts/NotoSansMayanNumerals-Regular.ttf rename to home/.fonts/NotoSansMayanNumerals-Regular.ttf diff --git a/.fonts/NotoSansMeeteiMayek-Regular.ttf b/home/.fonts/NotoSansMeeteiMayek-Regular.ttf similarity index 100% rename from .fonts/NotoSansMeeteiMayek-Regular.ttf rename to home/.fonts/NotoSansMeeteiMayek-Regular.ttf diff --git a/.fonts/NotoSansMendeKikakui-Regular.ttf b/home/.fonts/NotoSansMendeKikakui-Regular.ttf similarity index 100% rename from .fonts/NotoSansMendeKikakui-Regular.ttf rename to home/.fonts/NotoSansMendeKikakui-Regular.ttf diff --git a/.fonts/NotoSansMeroitic-Regular.ttf b/home/.fonts/NotoSansMeroitic-Regular.ttf similarity index 100% rename from .fonts/NotoSansMeroitic-Regular.ttf rename to home/.fonts/NotoSansMeroitic-Regular.ttf diff --git a/.fonts/NotoSansMiao-Regular.ttf b/home/.fonts/NotoSansMiao-Regular.ttf similarity index 100% rename from .fonts/NotoSansMiao-Regular.ttf rename to home/.fonts/NotoSansMiao-Regular.ttf diff --git a/.fonts/NotoSansModi-Regular.ttf b/home/.fonts/NotoSansModi-Regular.ttf similarity index 100% rename from .fonts/NotoSansModi-Regular.ttf rename to home/.fonts/NotoSansModi-Regular.ttf diff --git a/.fonts/NotoSansMongolian-Regular.ttf b/home/.fonts/NotoSansMongolian-Regular.ttf similarity index 100% rename from .fonts/NotoSansMongolian-Regular.ttf rename to home/.fonts/NotoSansMongolian-Regular.ttf diff --git a/.fonts/NotoSansMono-Bold.ttf b/home/.fonts/NotoSansMono-Bold.ttf similarity index 100% rename from .fonts/NotoSansMono-Bold.ttf rename to home/.fonts/NotoSansMono-Bold.ttf diff --git a/.fonts/NotoSansMono-Regular.ttf b/home/.fonts/NotoSansMono-Regular.ttf similarity index 100% rename from .fonts/NotoSansMono-Regular.ttf rename to home/.fonts/NotoSansMono-Regular.ttf diff --git a/.fonts/NotoSansMro-Regular.ttf b/home/.fonts/NotoSansMro-Regular.ttf similarity index 100% rename from .fonts/NotoSansMro-Regular.ttf rename to home/.fonts/NotoSansMro-Regular.ttf diff --git a/.fonts/NotoSansMultani-Regular.ttf b/home/.fonts/NotoSansMultani-Regular.ttf similarity index 100% rename from .fonts/NotoSansMultani-Regular.ttf rename to home/.fonts/NotoSansMultani-Regular.ttf diff --git a/.fonts/NotoSansMyanmar-Bold.ttf b/home/.fonts/NotoSansMyanmar-Bold.ttf similarity index 100% rename from .fonts/NotoSansMyanmar-Bold.ttf rename to home/.fonts/NotoSansMyanmar-Bold.ttf diff --git a/.fonts/NotoSansMyanmar-Regular.ttf b/home/.fonts/NotoSansMyanmar-Regular.ttf similarity index 100% rename from .fonts/NotoSansMyanmar-Regular.ttf rename to home/.fonts/NotoSansMyanmar-Regular.ttf diff --git a/.fonts/NotoSansMyanmarUI-Bold.ttf b/home/.fonts/NotoSansMyanmarUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansMyanmarUI-Bold.ttf rename to home/.fonts/NotoSansMyanmarUI-Bold.ttf diff --git a/.fonts/NotoSansMyanmarUI-Regular.ttf b/home/.fonts/NotoSansMyanmarUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansMyanmarUI-Regular.ttf rename to home/.fonts/NotoSansMyanmarUI-Regular.ttf diff --git a/.fonts/NotoSansNKo-Regular.ttf b/home/.fonts/NotoSansNKo-Regular.ttf similarity index 100% rename from .fonts/NotoSansNKo-Regular.ttf rename to home/.fonts/NotoSansNKo-Regular.ttf diff --git a/.fonts/NotoSansNabataean-Regular.ttf b/home/.fonts/NotoSansNabataean-Regular.ttf similarity index 100% rename from .fonts/NotoSansNabataean-Regular.ttf rename to home/.fonts/NotoSansNabataean-Regular.ttf diff --git a/.fonts/NotoSansNewTaiLue-Regular.ttf b/home/.fonts/NotoSansNewTaiLue-Regular.ttf similarity index 100% rename from .fonts/NotoSansNewTaiLue-Regular.ttf rename to home/.fonts/NotoSansNewTaiLue-Regular.ttf diff --git a/.fonts/NotoSansNewa-Regular.ttf b/home/.fonts/NotoSansNewa-Regular.ttf similarity index 100% rename from .fonts/NotoSansNewa-Regular.ttf rename to home/.fonts/NotoSansNewa-Regular.ttf diff --git a/.fonts/NotoSansOgham-Regular.ttf b/home/.fonts/NotoSansOgham-Regular.ttf similarity index 100% rename from .fonts/NotoSansOgham-Regular.ttf rename to home/.fonts/NotoSansOgham-Regular.ttf diff --git a/.fonts/NotoSansOlChiki-Regular.ttf b/home/.fonts/NotoSansOlChiki-Regular.ttf similarity index 100% rename from .fonts/NotoSansOlChiki-Regular.ttf rename to home/.fonts/NotoSansOlChiki-Regular.ttf diff --git a/.fonts/NotoSansOldHungarian-Regular.ttf b/home/.fonts/NotoSansOldHungarian-Regular.ttf similarity index 100% rename from .fonts/NotoSansOldHungarian-Regular.ttf rename to home/.fonts/NotoSansOldHungarian-Regular.ttf diff --git a/.fonts/NotoSansOldItalic-Regular.ttf b/home/.fonts/NotoSansOldItalic-Regular.ttf similarity index 100% rename from .fonts/NotoSansOldItalic-Regular.ttf rename to home/.fonts/NotoSansOldItalic-Regular.ttf diff --git a/.fonts/NotoSansOldNorthArabian-Regular.ttf b/home/.fonts/NotoSansOldNorthArabian-Regular.ttf similarity index 100% rename from .fonts/NotoSansOldNorthArabian-Regular.ttf rename to home/.fonts/NotoSansOldNorthArabian-Regular.ttf diff --git a/.fonts/NotoSansOldPermic-Regular.ttf b/home/.fonts/NotoSansOldPermic-Regular.ttf similarity index 100% rename from .fonts/NotoSansOldPermic-Regular.ttf rename to home/.fonts/NotoSansOldPermic-Regular.ttf diff --git a/.fonts/NotoSansOldPersian-Regular.ttf b/home/.fonts/NotoSansOldPersian-Regular.ttf similarity index 100% rename from .fonts/NotoSansOldPersian-Regular.ttf rename to home/.fonts/NotoSansOldPersian-Regular.ttf diff --git a/.fonts/NotoSansOldSogdian-Regular.ttf b/home/.fonts/NotoSansOldSogdian-Regular.ttf similarity index 100% rename from .fonts/NotoSansOldSogdian-Regular.ttf rename to home/.fonts/NotoSansOldSogdian-Regular.ttf diff --git a/.fonts/NotoSansOldSouthArabian-Regular.ttf b/home/.fonts/NotoSansOldSouthArabian-Regular.ttf similarity index 100% rename from .fonts/NotoSansOldSouthArabian-Regular.ttf rename to home/.fonts/NotoSansOldSouthArabian-Regular.ttf diff --git a/.fonts/NotoSansOldTurkic-Regular.ttf b/home/.fonts/NotoSansOldTurkic-Regular.ttf similarity index 100% rename from .fonts/NotoSansOldTurkic-Regular.ttf rename to home/.fonts/NotoSansOldTurkic-Regular.ttf diff --git a/.fonts/NotoSansOriya-Bold.ttf b/home/.fonts/NotoSansOriya-Bold.ttf similarity index 100% rename from .fonts/NotoSansOriya-Bold.ttf rename to home/.fonts/NotoSansOriya-Bold.ttf diff --git a/.fonts/NotoSansOriya-Regular.ttf b/home/.fonts/NotoSansOriya-Regular.ttf similarity index 100% rename from .fonts/NotoSansOriya-Regular.ttf rename to home/.fonts/NotoSansOriya-Regular.ttf diff --git a/.fonts/NotoSansOriyaUI-Bold.ttf b/home/.fonts/NotoSansOriyaUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansOriyaUI-Bold.ttf rename to home/.fonts/NotoSansOriyaUI-Bold.ttf diff --git a/.fonts/NotoSansOriyaUI-Regular.ttf b/home/.fonts/NotoSansOriyaUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansOriyaUI-Regular.ttf rename to home/.fonts/NotoSansOriyaUI-Regular.ttf diff --git a/.fonts/NotoSansOsage-Regular.ttf b/home/.fonts/NotoSansOsage-Regular.ttf similarity index 100% rename from .fonts/NotoSansOsage-Regular.ttf rename to home/.fonts/NotoSansOsage-Regular.ttf diff --git a/.fonts/NotoSansOsmanya-Regular.ttf b/home/.fonts/NotoSansOsmanya-Regular.ttf similarity index 100% rename from .fonts/NotoSansOsmanya-Regular.ttf rename to home/.fonts/NotoSansOsmanya-Regular.ttf diff --git a/.fonts/NotoSansPahawhHmong-Regular.ttf b/home/.fonts/NotoSansPahawhHmong-Regular.ttf similarity index 100% rename from .fonts/NotoSansPahawhHmong-Regular.ttf rename to home/.fonts/NotoSansPahawhHmong-Regular.ttf diff --git a/.fonts/NotoSansPalmyrene-Regular.ttf b/home/.fonts/NotoSansPalmyrene-Regular.ttf similarity index 100% rename from .fonts/NotoSansPalmyrene-Regular.ttf rename to home/.fonts/NotoSansPalmyrene-Regular.ttf diff --git a/.fonts/NotoSansPauCinHau-Regular.ttf b/home/.fonts/NotoSansPauCinHau-Regular.ttf similarity index 100% rename from .fonts/NotoSansPauCinHau-Regular.ttf rename to home/.fonts/NotoSansPauCinHau-Regular.ttf diff --git a/.fonts/NotoSansPhagsPa-Regular.ttf b/home/.fonts/NotoSansPhagsPa-Regular.ttf similarity index 100% rename from .fonts/NotoSansPhagsPa-Regular.ttf rename to home/.fonts/NotoSansPhagsPa-Regular.ttf diff --git a/.fonts/NotoSansPhoenician-Regular.ttf b/home/.fonts/NotoSansPhoenician-Regular.ttf similarity index 100% rename from .fonts/NotoSansPhoenician-Regular.ttf rename to home/.fonts/NotoSansPhoenician-Regular.ttf diff --git a/.fonts/NotoSansPsalterPahlavi-Regular.ttf b/home/.fonts/NotoSansPsalterPahlavi-Regular.ttf similarity index 100% rename from .fonts/NotoSansPsalterPahlavi-Regular.ttf rename to home/.fonts/NotoSansPsalterPahlavi-Regular.ttf diff --git a/.fonts/NotoSansRejang-Regular.ttf b/home/.fonts/NotoSansRejang-Regular.ttf similarity index 100% rename from .fonts/NotoSansRejang-Regular.ttf rename to home/.fonts/NotoSansRejang-Regular.ttf diff --git a/.fonts/NotoSansRunic-Regular.ttf b/home/.fonts/NotoSansRunic-Regular.ttf similarity index 100% rename from .fonts/NotoSansRunic-Regular.ttf rename to home/.fonts/NotoSansRunic-Regular.ttf diff --git a/.fonts/NotoSansSamaritan-Regular.ttf b/home/.fonts/NotoSansSamaritan-Regular.ttf similarity index 100% rename from .fonts/NotoSansSamaritan-Regular.ttf rename to home/.fonts/NotoSansSamaritan-Regular.ttf diff --git a/.fonts/NotoSansSaurashtra-Regular.ttf b/home/.fonts/NotoSansSaurashtra-Regular.ttf similarity index 100% rename from .fonts/NotoSansSaurashtra-Regular.ttf rename to home/.fonts/NotoSansSaurashtra-Regular.ttf diff --git a/.fonts/NotoSansSharada-Regular.ttf b/home/.fonts/NotoSansSharada-Regular.ttf similarity index 100% rename from .fonts/NotoSansSharada-Regular.ttf rename to home/.fonts/NotoSansSharada-Regular.ttf diff --git a/.fonts/NotoSansShavian-Regular.ttf b/home/.fonts/NotoSansShavian-Regular.ttf similarity index 100% rename from .fonts/NotoSansShavian-Regular.ttf rename to home/.fonts/NotoSansShavian-Regular.ttf diff --git a/.fonts/NotoSansSiddham-Regular.ttf b/home/.fonts/NotoSansSiddham-Regular.ttf similarity index 100% rename from .fonts/NotoSansSiddham-Regular.ttf rename to home/.fonts/NotoSansSiddham-Regular.ttf diff --git a/.fonts/NotoSansSinhala-Bold.ttf b/home/.fonts/NotoSansSinhala-Bold.ttf similarity index 100% rename from .fonts/NotoSansSinhala-Bold.ttf rename to home/.fonts/NotoSansSinhala-Bold.ttf diff --git a/.fonts/NotoSansSinhala-Regular.ttf b/home/.fonts/NotoSansSinhala-Regular.ttf similarity index 100% rename from .fonts/NotoSansSinhala-Regular.ttf rename to home/.fonts/NotoSansSinhala-Regular.ttf diff --git a/.fonts/NotoSansSinhalaUI-Bold.ttf b/home/.fonts/NotoSansSinhalaUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansSinhalaUI-Bold.ttf rename to home/.fonts/NotoSansSinhalaUI-Bold.ttf diff --git a/.fonts/NotoSansSinhalaUI-Regular.ttf b/home/.fonts/NotoSansSinhalaUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansSinhalaUI-Regular.ttf rename to home/.fonts/NotoSansSinhalaUI-Regular.ttf diff --git a/.fonts/NotoSansSoraSompeng-Regular.ttf b/home/.fonts/NotoSansSoraSompeng-Regular.ttf similarity index 100% rename from .fonts/NotoSansSoraSompeng-Regular.ttf rename to home/.fonts/NotoSansSoraSompeng-Regular.ttf diff --git a/.fonts/NotoSansSundanese-Regular.ttf b/home/.fonts/NotoSansSundanese-Regular.ttf similarity index 100% rename from .fonts/NotoSansSundanese-Regular.ttf rename to home/.fonts/NotoSansSundanese-Regular.ttf diff --git a/.fonts/NotoSansSylotiNagri-Regular.ttf b/home/.fonts/NotoSansSylotiNagri-Regular.ttf similarity index 100% rename from .fonts/NotoSansSylotiNagri-Regular.ttf rename to home/.fonts/NotoSansSylotiNagri-Regular.ttf diff --git a/.fonts/NotoSansSymbols-Bold.ttf b/home/.fonts/NotoSansSymbols-Bold.ttf similarity index 100% rename from .fonts/NotoSansSymbols-Bold.ttf rename to home/.fonts/NotoSansSymbols-Bold.ttf diff --git a/.fonts/NotoSansSymbols-Regular.ttf b/home/.fonts/NotoSansSymbols-Regular.ttf similarity index 100% rename from .fonts/NotoSansSymbols-Regular.ttf rename to home/.fonts/NotoSansSymbols-Regular.ttf diff --git a/.fonts/NotoSansSymbols2-Regular.ttf b/home/.fonts/NotoSansSymbols2-Regular.ttf similarity index 100% rename from .fonts/NotoSansSymbols2-Regular.ttf rename to home/.fonts/NotoSansSymbols2-Regular.ttf diff --git a/.fonts/NotoSansSyriac-Regular.ttf b/home/.fonts/NotoSansSyriac-Regular.ttf similarity index 100% rename from .fonts/NotoSansSyriac-Regular.ttf rename to home/.fonts/NotoSansSyriac-Regular.ttf diff --git a/.fonts/NotoSansTagalog-Regular.ttf b/home/.fonts/NotoSansTagalog-Regular.ttf similarity index 100% rename from .fonts/NotoSansTagalog-Regular.ttf rename to home/.fonts/NotoSansTagalog-Regular.ttf diff --git a/.fonts/NotoSansTagbanwa-Regular.ttf b/home/.fonts/NotoSansTagbanwa-Regular.ttf similarity index 100% rename from .fonts/NotoSansTagbanwa-Regular.ttf rename to home/.fonts/NotoSansTagbanwa-Regular.ttf diff --git a/.fonts/NotoSansTaiLe-Regular.ttf b/home/.fonts/NotoSansTaiLe-Regular.ttf similarity index 100% rename from .fonts/NotoSansTaiLe-Regular.ttf rename to home/.fonts/NotoSansTaiLe-Regular.ttf diff --git a/.fonts/NotoSansTaiTham-Regular.ttf b/home/.fonts/NotoSansTaiTham-Regular.ttf similarity index 100% rename from .fonts/NotoSansTaiTham-Regular.ttf rename to home/.fonts/NotoSansTaiTham-Regular.ttf diff --git a/.fonts/NotoSansTaiViet-Regular.ttf b/home/.fonts/NotoSansTaiViet-Regular.ttf similarity index 100% rename from .fonts/NotoSansTaiViet-Regular.ttf rename to home/.fonts/NotoSansTaiViet-Regular.ttf diff --git a/.fonts/NotoSansTakri-Regular.ttf b/home/.fonts/NotoSansTakri-Regular.ttf similarity index 100% rename from .fonts/NotoSansTakri-Regular.ttf rename to home/.fonts/NotoSansTakri-Regular.ttf diff --git a/.fonts/NotoSansTamil-Bold.ttf b/home/.fonts/NotoSansTamil-Bold.ttf similarity index 100% rename from .fonts/NotoSansTamil-Bold.ttf rename to home/.fonts/NotoSansTamil-Bold.ttf diff --git a/.fonts/NotoSansTamil-Regular.ttf b/home/.fonts/NotoSansTamil-Regular.ttf similarity index 100% rename from .fonts/NotoSansTamil-Regular.ttf rename to home/.fonts/NotoSansTamil-Regular.ttf diff --git a/.fonts/NotoSansTamilSupplement-Regular.ttf b/home/.fonts/NotoSansTamilSupplement-Regular.ttf similarity index 100% rename from .fonts/NotoSansTamilSupplement-Regular.ttf rename to home/.fonts/NotoSansTamilSupplement-Regular.ttf diff --git a/.fonts/NotoSansTamilUI-Bold.ttf b/home/.fonts/NotoSansTamilUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansTamilUI-Bold.ttf rename to home/.fonts/NotoSansTamilUI-Bold.ttf diff --git a/.fonts/NotoSansTamilUI-Regular.ttf b/home/.fonts/NotoSansTamilUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansTamilUI-Regular.ttf rename to home/.fonts/NotoSansTamilUI-Regular.ttf diff --git a/.fonts/NotoSansTelugu-Bold.ttf b/home/.fonts/NotoSansTelugu-Bold.ttf similarity index 100% rename from .fonts/NotoSansTelugu-Bold.ttf rename to home/.fonts/NotoSansTelugu-Bold.ttf diff --git a/.fonts/NotoSansTelugu-Regular.ttf b/home/.fonts/NotoSansTelugu-Regular.ttf similarity index 100% rename from .fonts/NotoSansTelugu-Regular.ttf rename to home/.fonts/NotoSansTelugu-Regular.ttf diff --git a/.fonts/NotoSansTeluguUI-Bold.ttf b/home/.fonts/NotoSansTeluguUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansTeluguUI-Bold.ttf rename to home/.fonts/NotoSansTeluguUI-Bold.ttf diff --git a/.fonts/NotoSansTeluguUI-Regular.ttf b/home/.fonts/NotoSansTeluguUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansTeluguUI-Regular.ttf rename to home/.fonts/NotoSansTeluguUI-Regular.ttf diff --git a/.fonts/NotoSansThaana-Bold.ttf b/home/.fonts/NotoSansThaana-Bold.ttf similarity index 100% rename from .fonts/NotoSansThaana-Bold.ttf rename to home/.fonts/NotoSansThaana-Bold.ttf diff --git a/.fonts/NotoSansThaana-Regular.ttf b/home/.fonts/NotoSansThaana-Regular.ttf similarity index 100% rename from .fonts/NotoSansThaana-Regular.ttf rename to home/.fonts/NotoSansThaana-Regular.ttf diff --git a/.fonts/NotoSansThai-Bold.ttf b/home/.fonts/NotoSansThai-Bold.ttf similarity index 100% rename from .fonts/NotoSansThai-Bold.ttf rename to home/.fonts/NotoSansThai-Bold.ttf diff --git a/.fonts/NotoSansThai-Regular.ttf b/home/.fonts/NotoSansThai-Regular.ttf similarity index 100% rename from .fonts/NotoSansThai-Regular.ttf rename to home/.fonts/NotoSansThai-Regular.ttf diff --git a/.fonts/NotoSansThaiUI-Bold.ttf b/home/.fonts/NotoSansThaiUI-Bold.ttf similarity index 100% rename from .fonts/NotoSansThaiUI-Bold.ttf rename to home/.fonts/NotoSansThaiUI-Bold.ttf diff --git a/.fonts/NotoSansThaiUI-Regular.ttf b/home/.fonts/NotoSansThaiUI-Regular.ttf similarity index 100% rename from .fonts/NotoSansThaiUI-Regular.ttf rename to home/.fonts/NotoSansThaiUI-Regular.ttf diff --git a/.fonts/NotoSansTibetan-Bold.ttf b/home/.fonts/NotoSansTibetan-Bold.ttf similarity index 100% rename from .fonts/NotoSansTibetan-Bold.ttf rename to home/.fonts/NotoSansTibetan-Bold.ttf diff --git a/.fonts/NotoSansTibetan-Regular.ttf b/home/.fonts/NotoSansTibetan-Regular.ttf similarity index 100% rename from .fonts/NotoSansTibetan-Regular.ttf rename to home/.fonts/NotoSansTibetan-Regular.ttf diff --git a/.fonts/NotoSansTifinagh-Regular.ttf b/home/.fonts/NotoSansTifinagh-Regular.ttf similarity index 100% rename from .fonts/NotoSansTifinagh-Regular.ttf rename to home/.fonts/NotoSansTifinagh-Regular.ttf diff --git a/.fonts/NotoSansTirhuta-Regular.ttf b/home/.fonts/NotoSansTirhuta-Regular.ttf similarity index 100% rename from .fonts/NotoSansTirhuta-Regular.ttf rename to home/.fonts/NotoSansTirhuta-Regular.ttf diff --git a/.fonts/NotoSansUgaritic-Regular.ttf b/home/.fonts/NotoSansUgaritic-Regular.ttf similarity index 100% rename from .fonts/NotoSansUgaritic-Regular.ttf rename to home/.fonts/NotoSansUgaritic-Regular.ttf diff --git a/.fonts/NotoSansVai-Regular.ttf b/home/.fonts/NotoSansVai-Regular.ttf similarity index 100% rename from .fonts/NotoSansVai-Regular.ttf rename to home/.fonts/NotoSansVai-Regular.ttf diff --git a/.fonts/NotoSansWarangCiti-Regular.ttf b/home/.fonts/NotoSansWarangCiti-Regular.ttf similarity index 100% rename from .fonts/NotoSansWarangCiti-Regular.ttf rename to home/.fonts/NotoSansWarangCiti-Regular.ttf diff --git a/.fonts/NotoSansYi-Regular.ttf b/home/.fonts/NotoSansYi-Regular.ttf similarity index 100% rename from .fonts/NotoSansYi-Regular.ttf rename to home/.fonts/NotoSansYi-Regular.ttf diff --git a/.fonts/NotoSerif-Bold.ttf b/home/.fonts/NotoSerif-Bold.ttf similarity index 100% rename from .fonts/NotoSerif-Bold.ttf rename to home/.fonts/NotoSerif-Bold.ttf diff --git a/.fonts/NotoSerif-BoldItalic.ttf b/home/.fonts/NotoSerif-BoldItalic.ttf similarity index 100% rename from .fonts/NotoSerif-BoldItalic.ttf rename to home/.fonts/NotoSerif-BoldItalic.ttf diff --git a/.fonts/NotoSerif-Italic.ttf b/home/.fonts/NotoSerif-Italic.ttf similarity index 100% rename from .fonts/NotoSerif-Italic.ttf rename to home/.fonts/NotoSerif-Italic.ttf diff --git a/.fonts/NotoSerif-Regular.ttf b/home/.fonts/NotoSerif-Regular.ttf similarity index 100% rename from .fonts/NotoSerif-Regular.ttf rename to home/.fonts/NotoSerif-Regular.ttf diff --git a/.fonts/NotoSerifAhom-Regular.ttf b/home/.fonts/NotoSerifAhom-Regular.ttf similarity index 100% rename from .fonts/NotoSerifAhom-Regular.ttf rename to home/.fonts/NotoSerifAhom-Regular.ttf diff --git a/.fonts/NotoSerifArmenian-Bold.ttf b/home/.fonts/NotoSerifArmenian-Bold.ttf similarity index 100% rename from .fonts/NotoSerifArmenian-Bold.ttf rename to home/.fonts/NotoSerifArmenian-Bold.ttf diff --git a/.fonts/NotoSerifArmenian-Regular.ttf b/home/.fonts/NotoSerifArmenian-Regular.ttf similarity index 100% rename from .fonts/NotoSerifArmenian-Regular.ttf rename to home/.fonts/NotoSerifArmenian-Regular.ttf diff --git a/.fonts/NotoSerifBalinese-Regular.ttf b/home/.fonts/NotoSerifBalinese-Regular.ttf similarity index 100% rename from .fonts/NotoSerifBalinese-Regular.ttf rename to home/.fonts/NotoSerifBalinese-Regular.ttf diff --git a/.fonts/NotoSerifBengali-Bold.ttf b/home/.fonts/NotoSerifBengali-Bold.ttf similarity index 100% rename from .fonts/NotoSerifBengali-Bold.ttf rename to home/.fonts/NotoSerifBengali-Bold.ttf diff --git a/.fonts/NotoSerifBengali-Regular.ttf b/home/.fonts/NotoSerifBengali-Regular.ttf similarity index 100% rename from .fonts/NotoSerifBengali-Regular.ttf rename to home/.fonts/NotoSerifBengali-Regular.ttf diff --git a/.fonts/NotoSerifCJK-Black.ttc b/home/.fonts/NotoSerifCJK-Black.ttc similarity index 100% rename from .fonts/NotoSerifCJK-Black.ttc rename to home/.fonts/NotoSerifCJK-Black.ttc diff --git a/.fonts/NotoSerifCJK-Bold.ttc b/home/.fonts/NotoSerifCJK-Bold.ttc similarity index 100% rename from .fonts/NotoSerifCJK-Bold.ttc rename to home/.fonts/NotoSerifCJK-Bold.ttc diff --git a/.fonts/NotoSerifCJK-ExtraLight.ttc b/home/.fonts/NotoSerifCJK-ExtraLight.ttc similarity index 100% rename from .fonts/NotoSerifCJK-ExtraLight.ttc rename to home/.fonts/NotoSerifCJK-ExtraLight.ttc diff --git a/.fonts/NotoSerifCJK-Light.ttc b/home/.fonts/NotoSerifCJK-Light.ttc similarity index 100% rename from .fonts/NotoSerifCJK-Light.ttc rename to home/.fonts/NotoSerifCJK-Light.ttc diff --git a/.fonts/NotoSerifCJK-Medium.ttc b/home/.fonts/NotoSerifCJK-Medium.ttc similarity index 100% rename from .fonts/NotoSerifCJK-Medium.ttc rename to home/.fonts/NotoSerifCJK-Medium.ttc diff --git a/.fonts/NotoSerifCJK-Regular.ttc b/home/.fonts/NotoSerifCJK-Regular.ttc similarity index 100% rename from .fonts/NotoSerifCJK-Regular.ttc rename to home/.fonts/NotoSerifCJK-Regular.ttc diff --git a/.fonts/NotoSerifCJK-SemiBold.ttc b/home/.fonts/NotoSerifCJK-SemiBold.ttc similarity index 100% rename from .fonts/NotoSerifCJK-SemiBold.ttc rename to home/.fonts/NotoSerifCJK-SemiBold.ttc diff --git a/.fonts/NotoSerifDevanagari-Bold.ttf b/home/.fonts/NotoSerifDevanagari-Bold.ttf similarity index 100% rename from .fonts/NotoSerifDevanagari-Bold.ttf rename to home/.fonts/NotoSerifDevanagari-Bold.ttf diff --git a/.fonts/NotoSerifDevanagari-Regular.ttf b/home/.fonts/NotoSerifDevanagari-Regular.ttf similarity index 100% rename from .fonts/NotoSerifDevanagari-Regular.ttf rename to home/.fonts/NotoSerifDevanagari-Regular.ttf diff --git a/.fonts/NotoSerifDisplay-Bold.ttf b/home/.fonts/NotoSerifDisplay-Bold.ttf similarity index 100% rename from .fonts/NotoSerifDisplay-Bold.ttf rename to home/.fonts/NotoSerifDisplay-Bold.ttf diff --git a/.fonts/NotoSerifDisplay-BoldItalic.ttf b/home/.fonts/NotoSerifDisplay-BoldItalic.ttf similarity index 100% rename from .fonts/NotoSerifDisplay-BoldItalic.ttf rename to home/.fonts/NotoSerifDisplay-BoldItalic.ttf diff --git a/.fonts/NotoSerifDisplay-Italic.ttf b/home/.fonts/NotoSerifDisplay-Italic.ttf similarity index 100% rename from .fonts/NotoSerifDisplay-Italic.ttf rename to home/.fonts/NotoSerifDisplay-Italic.ttf diff --git a/.fonts/NotoSerifDisplay-Regular.ttf b/home/.fonts/NotoSerifDisplay-Regular.ttf similarity index 100% rename from .fonts/NotoSerifDisplay-Regular.ttf rename to home/.fonts/NotoSerifDisplay-Regular.ttf diff --git a/.fonts/NotoSerifDogra-Regular.ttf b/home/.fonts/NotoSerifDogra-Regular.ttf similarity index 100% rename from .fonts/NotoSerifDogra-Regular.ttf rename to home/.fonts/NotoSerifDogra-Regular.ttf diff --git a/.fonts/NotoSerifEthiopic-Bold.ttf b/home/.fonts/NotoSerifEthiopic-Bold.ttf similarity index 100% rename from .fonts/NotoSerifEthiopic-Bold.ttf rename to home/.fonts/NotoSerifEthiopic-Bold.ttf diff --git a/.fonts/NotoSerifEthiopic-Regular.ttf b/home/.fonts/NotoSerifEthiopic-Regular.ttf similarity index 100% rename from .fonts/NotoSerifEthiopic-Regular.ttf rename to home/.fonts/NotoSerifEthiopic-Regular.ttf diff --git a/.fonts/NotoSerifGeorgian-Bold.ttf b/home/.fonts/NotoSerifGeorgian-Bold.ttf similarity index 100% rename from .fonts/NotoSerifGeorgian-Bold.ttf rename to home/.fonts/NotoSerifGeorgian-Bold.ttf diff --git a/.fonts/NotoSerifGeorgian-Regular.ttf b/home/.fonts/NotoSerifGeorgian-Regular.ttf similarity index 100% rename from .fonts/NotoSerifGeorgian-Regular.ttf rename to home/.fonts/NotoSerifGeorgian-Regular.ttf diff --git a/.fonts/NotoSerifGujarati-Bold.ttf b/home/.fonts/NotoSerifGujarati-Bold.ttf similarity index 100% rename from .fonts/NotoSerifGujarati-Bold.ttf rename to home/.fonts/NotoSerifGujarati-Bold.ttf diff --git a/.fonts/NotoSerifGujarati-Regular.ttf b/home/.fonts/NotoSerifGujarati-Regular.ttf similarity index 100% rename from .fonts/NotoSerifGujarati-Regular.ttf rename to home/.fonts/NotoSerifGujarati-Regular.ttf diff --git a/.fonts/NotoSerifGurmukhi-Bold.ttf b/home/.fonts/NotoSerifGurmukhi-Bold.ttf similarity index 100% rename from .fonts/NotoSerifGurmukhi-Bold.ttf rename to home/.fonts/NotoSerifGurmukhi-Bold.ttf diff --git a/.fonts/NotoSerifGurmukhi-Regular.ttf b/home/.fonts/NotoSerifGurmukhi-Regular.ttf similarity index 100% rename from .fonts/NotoSerifGurmukhi-Regular.ttf rename to home/.fonts/NotoSerifGurmukhi-Regular.ttf diff --git a/.fonts/NotoSerifHebrew-Bold.ttf b/home/.fonts/NotoSerifHebrew-Bold.ttf similarity index 100% rename from .fonts/NotoSerifHebrew-Bold.ttf rename to home/.fonts/NotoSerifHebrew-Bold.ttf diff --git a/.fonts/NotoSerifHebrew-Regular.ttf b/home/.fonts/NotoSerifHebrew-Regular.ttf similarity index 100% rename from .fonts/NotoSerifHebrew-Regular.ttf rename to home/.fonts/NotoSerifHebrew-Regular.ttf diff --git a/.fonts/NotoSerifKannada-Bold.ttf b/home/.fonts/NotoSerifKannada-Bold.ttf similarity index 100% rename from .fonts/NotoSerifKannada-Bold.ttf rename to home/.fonts/NotoSerifKannada-Bold.ttf diff --git a/.fonts/NotoSerifKannada-Regular.ttf b/home/.fonts/NotoSerifKannada-Regular.ttf similarity index 100% rename from .fonts/NotoSerifKannada-Regular.ttf rename to home/.fonts/NotoSerifKannada-Regular.ttf diff --git a/.fonts/NotoSerifKhmer-Bold.ttf b/home/.fonts/NotoSerifKhmer-Bold.ttf similarity index 100% rename from .fonts/NotoSerifKhmer-Bold.ttf rename to home/.fonts/NotoSerifKhmer-Bold.ttf diff --git a/.fonts/NotoSerifKhmer-Regular.ttf b/home/.fonts/NotoSerifKhmer-Regular.ttf similarity index 100% rename from .fonts/NotoSerifKhmer-Regular.ttf rename to home/.fonts/NotoSerifKhmer-Regular.ttf diff --git a/.fonts/NotoSerifLao-Bold.ttf b/home/.fonts/NotoSerifLao-Bold.ttf similarity index 100% rename from .fonts/NotoSerifLao-Bold.ttf rename to home/.fonts/NotoSerifLao-Bold.ttf diff --git a/.fonts/NotoSerifLao-Regular.ttf b/home/.fonts/NotoSerifLao-Regular.ttf similarity index 100% rename from .fonts/NotoSerifLao-Regular.ttf rename to home/.fonts/NotoSerifLao-Regular.ttf diff --git a/.fonts/NotoSerifMalayalam-Bold.ttf b/home/.fonts/NotoSerifMalayalam-Bold.ttf similarity index 100% rename from .fonts/NotoSerifMalayalam-Bold.ttf rename to home/.fonts/NotoSerifMalayalam-Bold.ttf diff --git a/.fonts/NotoSerifMalayalam-Regular.ttf b/home/.fonts/NotoSerifMalayalam-Regular.ttf similarity index 100% rename from .fonts/NotoSerifMalayalam-Regular.ttf rename to home/.fonts/NotoSerifMalayalam-Regular.ttf diff --git a/.fonts/NotoSerifMyanmar-Bold.ttf b/home/.fonts/NotoSerifMyanmar-Bold.ttf similarity index 100% rename from .fonts/NotoSerifMyanmar-Bold.ttf rename to home/.fonts/NotoSerifMyanmar-Bold.ttf diff --git a/.fonts/NotoSerifMyanmar-Regular.ttf b/home/.fonts/NotoSerifMyanmar-Regular.ttf similarity index 100% rename from .fonts/NotoSerifMyanmar-Regular.ttf rename to home/.fonts/NotoSerifMyanmar-Regular.ttf diff --git a/.fonts/NotoSerifSinhala-Bold.ttf b/home/.fonts/NotoSerifSinhala-Bold.ttf similarity index 100% rename from .fonts/NotoSerifSinhala-Bold.ttf rename to home/.fonts/NotoSerifSinhala-Bold.ttf diff --git a/.fonts/NotoSerifSinhala-Regular.ttf b/home/.fonts/NotoSerifSinhala-Regular.ttf similarity index 100% rename from .fonts/NotoSerifSinhala-Regular.ttf rename to home/.fonts/NotoSerifSinhala-Regular.ttf diff --git a/.fonts/NotoSerifTamil-Bold.ttf b/home/.fonts/NotoSerifTamil-Bold.ttf similarity index 100% rename from .fonts/NotoSerifTamil-Bold.ttf rename to home/.fonts/NotoSerifTamil-Bold.ttf diff --git a/.fonts/NotoSerifTamil-Regular.ttf b/home/.fonts/NotoSerifTamil-Regular.ttf similarity index 100% rename from .fonts/NotoSerifTamil-Regular.ttf rename to home/.fonts/NotoSerifTamil-Regular.ttf diff --git a/.fonts/NotoSerifTamilSlanted-Bold.ttf b/home/.fonts/NotoSerifTamilSlanted-Bold.ttf similarity index 100% rename from .fonts/NotoSerifTamilSlanted-Bold.ttf rename to home/.fonts/NotoSerifTamilSlanted-Bold.ttf diff --git a/.fonts/NotoSerifTamilSlanted-Regular.ttf b/home/.fonts/NotoSerifTamilSlanted-Regular.ttf similarity index 100% rename from .fonts/NotoSerifTamilSlanted-Regular.ttf rename to home/.fonts/NotoSerifTamilSlanted-Regular.ttf diff --git a/.fonts/NotoSerifTangut-Regular.ttf b/home/.fonts/NotoSerifTangut-Regular.ttf similarity index 100% rename from .fonts/NotoSerifTangut-Regular.ttf rename to home/.fonts/NotoSerifTangut-Regular.ttf diff --git a/.fonts/NotoSerifTelugu-Bold.ttf b/home/.fonts/NotoSerifTelugu-Bold.ttf similarity index 100% rename from .fonts/NotoSerifTelugu-Bold.ttf rename to home/.fonts/NotoSerifTelugu-Bold.ttf diff --git a/.fonts/NotoSerifTelugu-Regular.ttf b/home/.fonts/NotoSerifTelugu-Regular.ttf similarity index 100% rename from .fonts/NotoSerifTelugu-Regular.ttf rename to home/.fonts/NotoSerifTelugu-Regular.ttf diff --git a/.fonts/NotoSerifThai-Bold.ttf b/home/.fonts/NotoSerifThai-Bold.ttf similarity index 100% rename from .fonts/NotoSerifThai-Bold.ttf rename to home/.fonts/NotoSerifThai-Bold.ttf diff --git a/.fonts/NotoSerifThai-Regular.ttf b/home/.fonts/NotoSerifThai-Regular.ttf similarity index 100% rename from .fonts/NotoSerifThai-Regular.ttf rename to home/.fonts/NotoSerifThai-Regular.ttf diff --git a/.fonts/NotoSerifTibetan-Bold.ttf b/home/.fonts/NotoSerifTibetan-Bold.ttf similarity index 100% rename from .fonts/NotoSerifTibetan-Bold.ttf rename to home/.fonts/NotoSerifTibetan-Bold.ttf diff --git a/.fonts/NotoSerifTibetan-Regular.ttf b/home/.fonts/NotoSerifTibetan-Regular.ttf similarity index 100% rename from .fonts/NotoSerifTibetan-Regular.ttf rename to home/.fonts/NotoSerifTibetan-Regular.ttf diff --git a/.fonts/Ubuntu-Bold.ttf b/home/.fonts/Ubuntu-Bold.ttf similarity index 100% rename from .fonts/Ubuntu-Bold.ttf rename to home/.fonts/Ubuntu-Bold.ttf diff --git a/.fonts/Ubuntu-BoldItalic.ttf b/home/.fonts/Ubuntu-BoldItalic.ttf similarity index 100% rename from .fonts/Ubuntu-BoldItalic.ttf rename to home/.fonts/Ubuntu-BoldItalic.ttf diff --git a/.fonts/Ubuntu-Italic.ttf b/home/.fonts/Ubuntu-Italic.ttf similarity index 100% rename from .fonts/Ubuntu-Italic.ttf rename to home/.fonts/Ubuntu-Italic.ttf diff --git a/.fonts/Ubuntu-Light.ttf b/home/.fonts/Ubuntu-Light.ttf similarity index 100% rename from .fonts/Ubuntu-Light.ttf rename to home/.fonts/Ubuntu-Light.ttf diff --git a/.fonts/Ubuntu-LightItalic.ttf b/home/.fonts/Ubuntu-LightItalic.ttf similarity index 100% rename from .fonts/Ubuntu-LightItalic.ttf rename to home/.fonts/Ubuntu-LightItalic.ttf diff --git a/.fonts/Ubuntu-Medium.ttf b/home/.fonts/Ubuntu-Medium.ttf similarity index 100% rename from .fonts/Ubuntu-Medium.ttf rename to home/.fonts/Ubuntu-Medium.ttf diff --git a/.fonts/Ubuntu-MediumItalic.ttf b/home/.fonts/Ubuntu-MediumItalic.ttf similarity index 100% rename from .fonts/Ubuntu-MediumItalic.ttf rename to home/.fonts/Ubuntu-MediumItalic.ttf diff --git a/.fonts/Ubuntu-Regular.ttf b/home/.fonts/Ubuntu-Regular.ttf similarity index 100% rename from .fonts/Ubuntu-Regular.ttf rename to home/.fonts/Ubuntu-Regular.ttf diff --git a/home/.mozilla/firefox/alce0sf5.default-default/.parentlock b/home/.mozilla/firefox/alce0sf5.default-default/.parentlock new file mode 100644 index 0000000..e69de29 diff --git a/home/.mozilla/firefox/alce0sf5.default-default/AlternateServices.txt b/home/.mozilla/firefox/alce0sf5.default-default/AlternateServices.txt new file mode 100644 index 0000000..ab7f1e9 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/AlternateServices.txt @@ -0,0 +1,97 @@ +https:cdn.tinypass.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:cdn.tinypass.com:443:cdn.tinypass.com:443::n:1673201101:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:id.elespanol.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:id.elespanol.com:443:id.elespanol.com:443::n:1673201106:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:apis.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:apis.google.com:443:apis.google.com:443::n:1675709699:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:contacts.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:contacts.google.com:443:contacts.google.com:443::n:1675709826:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:api.btloader.com:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:api.btloader.com:443:api.btloader.com:443::n:1675704048:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:jnn-pa.googleapis.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:jnn-pa.googleapis.com:443:jnn-pa.googleapis.com:443::n:1675706693:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:encrypted-tbn0.gstatic.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:encrypted-tbn0.gstatic.com:443:encrypted-tbn0.gstatic.com:443::n:1675705779:h3:y:1673111739:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:encrypted-tbn1.gstatic.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:encrypted-tbn1.gstatic.com:443:encrypted-tbn1.gstatic.com:443::n:1675705777:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:storage.googleapis.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:storage.googleapis.com:443:storage.googleapis.com:443::n:1675705783:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:www.googletagmanager.com:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:www.googletagmanager.com:443:www.googletagmanager.com:443::n:1675704044:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:www.google.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:www.google.com:443:www.google.com:443::n:1675706735:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:accounts.youtube.com:443:.:^partitionKey=%28https%2Cyoutube.com%29:3 0 19364 https:accounts.youtube.com:443:accounts.youtube.com:443::n:1675700917:h3:y:1673108811:n:^partitionKey=%28https%2Cyoutube.com%29:|n:y: +https:ssl.gstatic.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:ssl.gstatic.com:443:ssl.gstatic.com:443::n:1675709927:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:d.pub.network:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:d.pub.network:443:d.pub.network:443::n:1675704046:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:eu2.device-api.indigitall.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:eu2.device-api.indigitall.com:443:eu2.device-api.indigitall.com:443::n:1675706707:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:scone-pa.clients6.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:scone-pa.clients6.google.com:443:scone-pa.clients6.google.com:443::n:1675705883:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:pghub.io:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:pghub.io:443:pghub.io:443::n:1675706709:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:static.doubleclick.net:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:static.doubleclick.net:443:static.doubleclick.net:443::n:1675706692:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:peoplestackwebexperiments-pa.clients6.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:peoplestackwebexperiments-pa.clients6.google.com:443:peoplestackwebexperiments-pa.clients6.google.com:443::n:1675709857:h3:y:1673117810:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:www.google.com:443:.:^firstPartyDomain=google-b-d.search.suggestions.mozilla:3 0 19364 https:www.google.com:443:www.google.com:443::n:1675706687:h3:y:1673108811:n:^firstPartyDomain=google-b-d.search.suggestions.mozilla:|n:y: +https:itsfoss.com:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:itsfoss.com:443:itsfoss.com:443::n:1673198472:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:encrypted-tbn2.gstatic.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:encrypted-tbn2.gstatic.com:443:encrypted-tbn2.gstatic.com:443::n:1675705777:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:id.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:id.google.com:443:id.google.com:443::n:1675700928:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:s2s.t13.io:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:s2s.t13.io:443:s2s.t13.io:443::n:1675704049:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:analytics.google.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:analytics.google.com:443:analytics.google.com:443::n:1675706700:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:fonts.gstatic.com:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:fonts.gstatic.com:443:fonts.gstatic.com:443::n:1675704045:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:people-pa.clients6.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:people-pa.clients6.google.com:443:people-pa.clients6.google.com:443::n:1675709818:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:signaler-pa.clients6.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:signaler-pa.clients6.google.com:443:signaler-pa.clients6.google.com:443::n:1675709891:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:i.ytimg.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:i.ytimg.com:443:i.ytimg.com:443::n:1675706690:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:t.seedtag.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:t.seedtag.com:443:t.seedtag.com:443::n:1673201100:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:csp.withgoogle.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:csp.withgoogle.com:443:csp.withgoogle.com:443::n:1675705782:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:www.googletagmanager.com:443:.:^partitionKey=%28https%2Clinuxtoday.com%29:3 0 19364 https:www.googletagmanager.com:443:www.googletagmanager.com:443::n:1675702146:h3:y:1673108811:n:^partitionKey=%28https%2Clinuxtoday.com%29:|n:y: +https:ajax.googleapis.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:ajax.googleapis.com:443:ajax.googleapis.com:443::n:1675705781:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:cdn.confiant-integrations.net:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:cdn.confiant-integrations.net:443:cdn.confiant-integrations.net:443::n:1673198446:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:buy.tinypass.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:buy.tinypass.com:443:buy.tinypass.com:443::n:1673201105:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:experience.tinypass.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:experience.tinypass.com:443:experience.tinypass.com:443::n:1673201101:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:googleads.g.doubleclick.net:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:googleads.g.doubleclick.net:443:googleads.g.doubleclick.net:443::n:1675706692:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:appsitemsuggest-pa.clients6.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:appsitemsuggest-pa.clients6.google.com:443:appsitemsuggest-pa.clients6.google.com:443::n:1675709819:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:signaler-pa.googleapis.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:signaler-pa.googleapis.com:443:signaler-pa.googleapis.com:443::n:1675700917:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:storage.googleapis.com:443:.:^partitionKey=%28https%2Cstorage.googleapis.com%29:3 0 19364 https:storage.googleapis.com:443:storage.googleapis.com:443::n:1675706035:h3:y:1673112150:n:^partitionKey=%28https%2Cstorage.googleapis.com%29:|n:y: +https:www.npttech.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:www.npttech.com:443:www.npttech.com:443::n:1673201099:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:cdn.jsdelivr.net:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:cdn.jsdelivr.net:443:cdn.jsdelivr.net:443::n:1673198444:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:addons-pa.clients6.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:addons-pa.clients6.google.com:443:addons-pa.clients6.google.com:443::n:1675709821:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:c2.piano.io:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:c2.piano.io:443:c2.piano.io:443::n:1673201102:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:versioncheck-bg.addons.mozilla.org:443:.::3 0 19364 https:versioncheck-bg.addons.mozilla.org:443:versioncheck-bg.addons.mozilla.org:443::n:1675701077:h3:y:1673108811:n::|n:y: +https:blobcomments-pa.clients6.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:blobcomments-pa.clients6.google.com:443:blobcomments-pa.clients6.google.com:443::n:1675709856:h3:y:1673117810:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:www.google.com.co:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:www.google.com.co:443:www.google.com.co:443::n:1675706735:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:adservice.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:adservice.google.com:443:adservice.google.com:443::n:1675706691:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:accounts.google.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:accounts.google.com:443:accounts.google.com:443::n:1675706703:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:accounts.google.com.co:443:.:^partitionKey=%28https%2Cgoogle.com.co%29:3 0 19364 https:accounts.google.com.co:443:accounts.google.com.co:443::n:1675700918:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com.co%29:|n:y: +https:fonts.gstatic.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:fonts.gstatic.com:443:fonts.gstatic.com:443::n:1675706706:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:www.googletagmanager.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:www.googletagmanager.com:443:www.googletagmanager.com:443::n:1675705783:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:clients6.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:clients6.google.com:443:clients6.google.com:443::n:1675709915:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:www.gstatic.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:www.gstatic.com:443:www.gstatic.com:443::n:1675709819:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:drive-thirdparty.googleusercontent.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:drive-thirdparty.googleusercontent.com:443:drive-thirdparty.googleusercontent.com:443::n:1675709665:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:www.google-analytics.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:www.google-analytics.com:443:www.google-analytics.com:443::n:1675705794:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:fonts.gstatic.com:443:.:^partitionKey=%28https%2Cgmx.es%29:3 0 19364 https:fonts.gstatic.com:443:fonts.gstatic.com:443::n:1675705946:h3:y:1673112150:n:^partitionKey=%28https%2Cgmx.es%29:|n:y: +https:peoplestack-pa.clients6.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:peoplestack-pa.clients6.google.com:443:peoplestack-pa.clients6.google.com:443::n:1675709890:h3:y:1673117810:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:fonts.googleapis.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:fonts.googleapis.com:443:fonts.googleapis.com:443::n:1675705792:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:ssm.codes:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:ssm.codes:443:ssm.codes:443::n:1673201099:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:news.google.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:news.google.com:443:news.google.com:443::n:1675706707:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:www.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:www.google.com:443:www.google.com:443::n:1675709822:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:events.apester.com:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:events.apester.com:443:events.apester.com:443::n:1675704108:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:fonts.gstatic.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:fonts.gstatic.com:443:fonts.gstatic.com:443::n:1675705806:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:www.youtube.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:www.youtube.com:443:www.youtube.com:443::n:1675706697:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:play.google.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:play.google.com:443:play.google.com:443::n:1675706714:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:accounts.youtube.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:accounts.youtube.com:443:accounts.youtube.com:443::n:1675700907:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:www.gstatic.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:www.gstatic.com:443:www.gstatic.com:443::n:1675706707:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:adservice.google.com.co:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:adservice.google.com.co:443:googleads.g.doubleclick.net:443::n:1675706691:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:storage.googleapis.com:443:.:^partitionKey=%28https%2Cgmx.es%29:3 0 19364 https:storage.googleapis.com:443:storage.googleapis.com:443::n:1675705956:h3:y:1673112150:n:^partitionKey=%28https%2Cgmx.es%29:|n:y: +https:cs.seedtag.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:cs.seedtag.com:443:cs.seedtag.com:443::n:1673201103:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:boot.pbstck.com:443:.:^partitionKey=%28https%2Cgmx.es%29:3 0 19364 https:boot.pbstck.com:443:boot.pbstck.com:443::n:1673200351:h3:y:1673112150:n:^partitionKey=%28https%2Cgmx.es%29:|n:y: +https:imasdk.googleapis.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:imasdk.googleapis.com:443:imasdk.googleapis.com:443::n:1675706710:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:cdn.pbstck.com:443:.:^partitionKey=%28https%2Cgmx.es%29:3 0 19364 https:cdn.pbstck.com:443:cdn.pbstck.com:443::n:1673200352:h3:y:1673112150:n:^partitionKey=%28https%2Cgmx.es%29:|n:y: +https:s.seedtag.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:s.seedtag.com:443:s.seedtag.com:443::n:1675706733:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:intake.pbstck.com:443:.:^partitionKey=%28https%2Cgmx.es%29:3 0 19364 https:intake.pbstck.com:443:intake.pbstck.com:443::n:1673200437:h3:y:1673112150:n:^partitionKey=%28https%2Cgmx.es%29:|n:y: +https:fonts.googleapis.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:fonts.googleapis.com:443:fonts.googleapis.com:443::n:1675706704:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:static.apester.com:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:static.apester.com:443:static.apester.com:443::n:1675704044:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:c.pub.network:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:c.pub.network:443:c.pub.network:443::n:1675704076:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:cdnjs.cloudflare.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:cdnjs.cloudflare.com:443:cdnjs.cloudflare.com:443::n:1673201103:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:aa.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:aa.google.com:443:aa.google.com:443::n:1675709817:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:docs.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:docs.google.com:443:docs.google.com:443::n:1675709886:h3:y:1673117656:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:fonts.googleapis.com:443:.:^partitionKey=%28https%2Clinuxtoday.com%29:3 0 19364 https:fonts.googleapis.com:443:fonts.googleapis.com:443::n:1675702145:h3:y:1673108811:n:^partitionKey=%28https%2Clinuxtoday.com%29:|n:y: +https:fonts.googleapis.com:443:.:^partitionKey=%28https%2Citsfoss.com%29:3 0 19364 https:fonts.googleapis.com:443:fonts.googleapis.com:443::n:1675704046:h3:y:1673111739:n:^partitionKey=%28https%2Citsfoss.com%29:|n:y: +https:accounts.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:accounts.google.com:443:accounts.google.com:443::n:1675705791:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:www.googletagmanager.com:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:www.googletagmanager.com:443:www.googletagmanager.com:443::n:1675706699:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:lh3.googleusercontent.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:lh3.googleusercontent.com:443:lh3.googleusercontent.com:443::n:1675709856:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:doc-0s-64-docs.googleusercontent.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:doc-0s-64-docs.googleusercontent.com:443:doc-0s-64-docs.googleusercontent.com:443::n:1675709922:h3:y:1673117810:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:kstatic.googleusercontent.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:kstatic.googleusercontent.com:443:kstatic.googleusercontent.com:443::n:1675705782:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:ogs.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:ogs.google.com:443:ogs.google.com:443::n:1675709823:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:post-segments-6ybtyjo8.ew.gateway.dev:443:.:^partitionKey=%28https%2Celespanol.com%29:3 0 19364 https:post-segments-6ybtyjo8.ew.gateway.dev:443:post-segments-6ybtyjo8.ew.gateway.dev:443::n:1675706701:h3:y:1673114642:n:^partitionKey=%28https%2Celespanol.com%29:|n:y: +https:fonts.googleapis.com:443:.:^partitionKey=%28https%2Cgmx.es%29:3 0 19364 https:fonts.googleapis.com:443:fonts.googleapis.com:443::n:1675705945:h3:y:1673112150:n:^partitionKey=%28https%2Cgmx.es%29:|n:y: +https:drive.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:drive.google.com:443:drive.google.com:443::n:1675709921:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:play.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:play.google.com:443:play.google.com:443::n:1675709933:h3:y:1673108811:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:www.googletagmanager.com:443:.:^partitionKey=%28https%2Cgmx.es%29:3 0 19364 https:www.googletagmanager.com:443:www.googletagmanager.com:443::n:1675705952:h3:y:1673112150:n:^partitionKey=%28https%2Cgmx.es%29:|n:y: +https:lh3.google.com:443:.:^partitionKey=%28https%2Cgoogle.com%29:3 0 19364 https:lh3.google.com:443:lh3.google.com:443::n:1675709855:h3:y:1673112150:n:^partitionKey=%28https%2Cgoogle.com%29:|n:y: +https:fonts.gstatic.com:443:.:^partitionKey=%28https%2Clinuxtoday.com%29:3 0 19364 https:fonts.gstatic.com:443:fonts.gstatic.com:443::n:1675702146:h3:y:1673108811:n:^partitionKey=%28https%2Clinuxtoday.com%29:|n:y: diff --git a/home/.mozilla/firefox/alce0sf5.default-default/SiteSecurityServiceState.txt b/home/.mozilla/firefox/alce0sf5.default-default/SiteSecurityServiceState.txt new file mode 100644 index 0000000..08d616f --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/SiteSecurityServiceState.txt @@ -0,0 +1,32 @@ +blobcomments-pa.clients6.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1684004256081,1,1 +news.ycombinator.com^partitionKey=%28http%2Cycombinator.com%29:HSTS 0 19364 1704668876274,1,0 +telegram.org^partitionKey=%28http%2Ctelegram.org%29:HSTS 0 19364 1704644953069,1,1 +www.google.com^firstPartyDomain=google-b-d.search.suggestions.mozilla:HSTS 0 19364 1704644867746,1,0 +aus5.mozilla.org:HSTS 0 19364 1704644970117,1,0 +contacts.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1704649810213,1,0 +services.addons.mozilla.org:HSTS 0 19364 1704643660844,1,0 +appsitemsuggest-pa.clients6.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1684000277948,1,1 +itsfoss.com^partitionKey=%28http%2Citsfoss.com%29:HSTS 0 19364 1736184044085,1,1 +static.fsf.org^partitionKey=%28http%2Cfsf.org%29:HSTS 0 19364 1736183768747,1,1 +firefox.settings.services.mozilla.com:HSTS 0 19364 1704644813478,1,0 +contile.services.mozilla.com:HSTS 0 19364 1704644813505,1,0 +peoplestack-pa.clients6.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1684004257294,1,1 +addons.mozilla.org^partitionKey=%28http%2Cmozilla.org%29:HSTS 0 19364 1704653740455,1,1 +piwik.fsf.org^partitionKey=%28http%2Cfsf.org%29:HSTS 0 19364 1736183769752,1,1 +www.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1704644870424,1,0 +peoplestackwebexperiments-pa.clients6.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1684004256990,1,1 +gmx.es^partitionKey=%28http%2Cgmx.es%29:HSTS 0 19364 1704649941652,1,1 +fonts.codeberg.org^partitionKey=%28http%2Ccodeberg.org%29:HSTS 0 19364 1736181137614,1,1 +addons.mozilla.org:HSTS 0 19364 1704653747342,1,0 +drive.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1704653921019,1,0 +signaler-pa.clients6.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1684000218839,1,1 +scone-pa.clients6.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1684000283262,1,1 +id.elespanol.com^partitionKey=%28http%2Celespanol.com%29:HSTS 0 19364 1673201106344,1,1 +addons-pa.clients6.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1684000203087,1,1 +www.linuxtoday.com^partitionKey=%28http%2Clinuxtoday.com%29:HSTS 0 19364 1673110444613,1,0 +www.gmx.es^partitionKey=%28http%2Cgmx.es%29:HSTS 0 19364 1704649942150,1,1 +ogs.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1704644874506,1,0 +accounts.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1704644874379,1,1 +people-pa.clients6.google.com^partitionKey=%28http%2Cgoogle.com%29:HSTS 0 19364 1684000199047,1,1 +codeberg.org^partitionKey=%28http%2Ccodeberg.org%29:HSTS 0 19364 1736181136870,1,1 +design.codeberg.org^partitionKey=%28http%2Ccodeberg.org%29:HSTS 0 19364 1736181137453,1,1 diff --git a/home/.mozilla/firefox/alce0sf5.default-default/Telemetry.ShutdownTime.txt b/home/.mozilla/firefox/alce0sf5.default-default/Telemetry.ShutdownTime.txt new file mode 100644 index 0000000..eb804fd --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/Telemetry.ShutdownTime.txt @@ -0,0 +1 @@ +1864 diff --git a/home/.mozilla/firefox/alce0sf5.default-default/addonStartup.json.lz4 b/home/.mozilla/firefox/alce0sf5.default-default/addonStartup.json.lz4 new file mode 100644 index 0000000..7c70f4a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/addonStartup.json.lz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/addons.json b/home/.mozilla/firefox/alce0sf5.default-default/addons.json new file mode 100644 index 0000000..0b9ec88 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/addons.json @@ -0,0 +1 @@ +{"schema":6,"addons":[{"id":"langpack-es-MX@firefox.mozilla.org","icons":{"32":"https://addons.mozilla.org/user-media/addon_icons/8/8343-32.png?modified=1530706824","64":"https://addons.mozilla.org/user-media/addon_icons/8/8343-64.png?modified=1530706824","128":"https://addons.mozilla.org/user-media/addon_icons/8/8343-128.png?modified=1530706824"},"name":"Español (México) Language Pack","version":"109.0buildid20230105.190654","sourceURI":"https://addons.mozilla.org/firefox/downloads/file/4052604/spanish_mexico_language_pack-109.0buildid20230105.190654.xpi","homepageURL":"http://mozilla-mexico.org","supportURL":"http://www.mozilla-hispano.org/foro/viewforum.php?f=30&sid=8c3522dd95e3db5aafee31b8342b3689","description":"La comunidad Mozilla México publica el paquete de idiomas en español mexicano (es-MX) para Firefox.","fullDescription":"Paquete de idiomas para Mozilla Firefox en español de Mexico (es-MX).\n\nNOTA: Si después de instalar el paquete de idiomas, no ves ningún cambio en la interfaz; abre una pestaña nueva, introduce about:config en la barra de direcciones, pulsa el botón para entrar en la configuración avanzada, una vez ahí, busca la propiedad \"general.useragent.locale\" da doble clic sobre ella y cambia el valor actual por es-MX, reinicia Firefox y ya deberías ver los cambios.","weeklyDownloads":471,"type":"locale","creator":{"name":"Mozilla Firefox","url":"https://addons.mozilla.org/es/firefox/user/4757633/"},"developers":[],"screenshots":[{"url":"https://addons.mozilla.org/user-media/previews/full/24/24155.png?modified=1622132154","width":644,"height":512,"thumbnailURL":"https://addons.mozilla.org/user-media/previews/thumbs/24/24155.jpg?modified=1622132154","thumbnailWidth":503,"thumbnailHeight":400}],"contributionURL":"","averageRating":4.4375,"reviewCount":38,"reviewURL":"https://addons.mozilla.org/es/firefox/addon/spanish-mexico-language-pack/reviews/","updateDate":1672954308000},{"id":"{fca6ebc5-a96d-40ef-8a83-8791d5919e15}","icons":{"32":"https://addons.mozilla.org/static-server/img/addon-icons/default-32.2b26add4b394.png","64":"https://addons.mozilla.org/static-server/img/addon-icons/default-64.d144b50f2bb8.png","128":"https://addons.mozilla.org/static-server/img/addon-icons/default-128.452018499894.png"},"name":"Monochrome","version":"1.0","sourceURI":"https://addons.mozilla.org/firefox/downloads/file/3646012/monochrome-1.0.xpi","homepageURL":null,"supportURL":null,"description":"Monochrome firefox theme","fullDescription":null,"weeklyDownloads":2,"type":"theme","creator":{"name":"Lenny","url":"https://addons.mozilla.org/es/firefox/user/16309470/"},"developers":[],"screenshots":[{"url":"https://addons.mozilla.org/user-media/version-previews/full/3834/3834964.png?modified=1623033477","width":680,"height":92,"thumbnailURL":"https://addons.mozilla.org/user-media/version-previews/thumbs/3834/3834964.png?modified=1623033477","thumbnailWidth":473,"thumbnailHeight":64},{"url":"https://addons.mozilla.org/user-media/version-previews/full/3834/3834965.svg?modified=1623033477","width":720,"height":92,"thumbnailURL":"https://addons.mozilla.org/user-media/version-previews/thumbs/3834/3834965.jpg?modified=1623033477","thumbnailWidth":720,"thumbnailHeight":92}],"contributionURL":"","averageRating":0,"reviewCount":0,"reviewURL":"https://addons.mozilla.org/es/firefox/addon/monochrome/reviews/","updateDate":1600616532000}]} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/broadcast-listeners.json b/home/.mozilla/firefox/alce0sf5.default-default/broadcast-listeners.json new file mode 100644 index 0000000..aa98d0c --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/broadcast-listeners.json @@ -0,0 +1 @@ +{"version":1,"listeners":{"remote-settings/monitor_changes":{"version":"\"1673103432964\"","sourceInfo":{"moduleURI":"resource://services-settings/remote-settings.js","symbolName":"remoteSettingsBroadcastHandler"}}}} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/cert9.db b/home/.mozilla/firefox/alce0sf5.default-default/cert9.db new file mode 100644 index 0000000..2ddc388 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/cert9.db differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/compatibility.ini b/home/.mozilla/firefox/alce0sf5.default-default/compatibility.ini new file mode 100644 index 0000000..d1fdb1d --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/compatibility.ini @@ -0,0 +1,5 @@ +[Compatibility] +LastVersion=108.0.1_20221221124347/20221221124347 +LastOSABI=Linux_x86_64-gcc3 +LastPlatformDir=/usr/lib/firefox +LastAppDir=/usr/lib/firefox/browser diff --git a/home/.mozilla/firefox/alce0sf5.default-default/containers.json b/home/.mozilla/firefox/alce0sf5.default-default/containers.json new file mode 100644 index 0000000..5b0d7ae --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/containers.json @@ -0,0 +1 @@ +{"version":4,"lastUserContextId":5,"identities":[{"userContextId":1,"public":true,"icon":"fingerprint","color":"blue","l10nID":"userContextPersonal.label","accessKey":"userContextPersonal.accesskey","telemetryId":1},{"userContextId":2,"public":true,"icon":"briefcase","color":"orange","l10nID":"userContextWork.label","accessKey":"userContextWork.accesskey","telemetryId":2},{"userContextId":3,"public":true,"icon":"dollar","color":"green","l10nID":"userContextBanking.label","accessKey":"userContextBanking.accesskey","telemetryId":3},{"userContextId":4,"public":true,"icon":"cart","color":"pink","l10nID":"userContextShopping.label","accessKey":"userContextShopping.accesskey","telemetryId":4},{"userContextId":5,"public":false,"icon":"","color":"","name":"userContextIdInternal.thumbnail","accessKey":""},{"userContextId":4294967295,"public":false,"icon":"","color":"","name":"userContextIdInternal.webextStorageLocal","accessKey":""}]} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/content-prefs.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/content-prefs.sqlite new file mode 100644 index 0000000..da89480 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/content-prefs.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/cookies.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/cookies.sqlite new file mode 100644 index 0000000..3a21ea4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/cookies.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686035.9b0c2003-cd45-4b28-9d68-edd3c1f739fd.new-profile.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686035.9b0c2003-cd45-4b28-9d68-edd3c1f739fd.new-profile.jsonlz4 new file mode 100644 index 0000000..2787b87 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686035.9b0c2003-cd45-4b28-9d68-edd3c1f739fd.new-profile.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686068.830e107e-de01-4969-bb8b-5ef729644c86.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686068.830e107e-de01-4969-bb8b-5ef729644c86.event.jsonlz4 new file mode 100644 index 0000000..5fe43f0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686068.830e107e-de01-4969-bb8b-5ef729644c86.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686144.4e462d74-a431-4e4b-9060-e641b6c23478.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686144.4e462d74-a431-4e4b-9060-e641b6c23478.main.jsonlz4 new file mode 100644 index 0000000..aa4450c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686144.4e462d74-a431-4e4b-9060-e641b6c23478.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686161.efa6cb83-f76a-44b0-ac5e-27c67aea5338.first-shutdown.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686161.efa6cb83-f76a-44b0-ac5e-27c67aea5338.first-shutdown.jsonlz4 new file mode 100644 index 0000000..78f51e9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673107686161.efa6cb83-f76a-44b0-ac5e-27c67aea5338.first-shutdown.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673110482148.0336ce1e-4e32-4198-b1df-bdc3151abdd9.new-profile.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673110482148.0336ce1e-4e32-4198-b1df-bdc3151abdd9.new-profile.jsonlz4 new file mode 100644 index 0000000..e5e60e5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673110482148.0336ce1e-4e32-4198-b1df-bdc3151abdd9.new-profile.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673110482207.00053dcc-7542-4851-9fbf-4c9aade90289.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673110482207.00053dcc-7542-4851-9fbf-4c9aade90289.event.jsonlz4 new file mode 100644 index 0000000..6e7a4fb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673110482207.00053dcc-7542-4851-9fbf-4c9aade90289.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673110482294.867050ef-2b61-4a9f-8ba9-caa56305248e.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673110482294.867050ef-2b61-4a9f-8ba9-caa56305248e.main.jsonlz4 new file mode 100644 index 0000000..07e849f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673110482294.867050ef-2b61-4a9f-8ba9-caa56305248e.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111526299.740d4a48-a078-45f4-bd5f-5ef4bce49292.new-profile.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111526299.740d4a48-a078-45f4-bd5f-5ef4bce49292.new-profile.jsonlz4 new file mode 100644 index 0000000..3c518f1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111526299.740d4a48-a078-45f4-bd5f-5ef4bce49292.new-profile.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111526329.dcbbcbec-6c1f-4505-9b14-b4d02a08dbf0.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111526329.dcbbcbec-6c1f-4505-9b14-b4d02a08dbf0.event.jsonlz4 new file mode 100644 index 0000000..3280dff Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111526329.dcbbcbec-6c1f-4505-9b14-b4d02a08dbf0.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111526406.dafc9501-e279-40df-bb6b-2782d0383964.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111526406.dafc9501-e279-40df-bb6b-2782d0383964.main.jsonlz4 new file mode 100644 index 0000000..31514db Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111526406.dafc9501-e279-40df-bb6b-2782d0383964.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111735590.7aefe25d-d775-412d-9504-535b8b95a0a3.new-profile.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111735590.7aefe25d-d775-412d-9504-535b8b95a0a3.new-profile.jsonlz4 new file mode 100644 index 0000000..0e5df12 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111735590.7aefe25d-d775-412d-9504-535b8b95a0a3.new-profile.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111735615.68a1649b-06e8-4deb-86c9-c16e337c6059.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111735615.68a1649b-06e8-4deb-86c9-c16e337c6059.event.jsonlz4 new file mode 100644 index 0000000..f39917e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111735615.68a1649b-06e8-4deb-86c9-c16e337c6059.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111735670.a65e6332-c51b-44b1-9dff-446519628b77.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111735670.a65e6332-c51b-44b1-9dff-446519628b77.main.jsonlz4 new file mode 100644 index 0000000..743480b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673111735670.a65e6332-c51b-44b1-9dff-446519628b77.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112114615.8afba5ce-1108-41fe-b200-44eff3760d34.new-profile.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112114615.8afba5ce-1108-41fe-b200-44eff3760d34.new-profile.jsonlz4 new file mode 100644 index 0000000..ae2b60b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112114615.8afba5ce-1108-41fe-b200-44eff3760d34.new-profile.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112114643.af7b123d-8f8d-4e66-849d-0663761646af.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112114643.af7b123d-8f8d-4e66-849d-0663761646af.event.jsonlz4 new file mode 100644 index 0000000..a2d46b6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112114643.af7b123d-8f8d-4e66-849d-0663761646af.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112114715.85acce8e-5d86-4d2c-846a-bcffbee8c0ee.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112114715.85acce8e-5d86-4d2c-846a-bcffbee8c0ee.main.jsonlz4 new file mode 100644 index 0000000..37efc42 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112114715.85acce8e-5d86-4d2c-846a-bcffbee8c0ee.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112147087.1f6f7b48-5e61-4183-a27e-82d281684bf2.new-profile.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112147087.1f6f7b48-5e61-4183-a27e-82d281684bf2.new-profile.jsonlz4 new file mode 100644 index 0000000..4ac59fe Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112147087.1f6f7b48-5e61-4183-a27e-82d281684bf2.new-profile.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112147110.c1dde537-36ed-4bb9-9d5c-12ae774e20c8.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112147110.c1dde537-36ed-4bb9-9d5c-12ae774e20c8.event.jsonlz4 new file mode 100644 index 0000000..8a8d708 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112147110.c1dde537-36ed-4bb9-9d5c-12ae774e20c8.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112147137.a9e8e238-8504-47a5-86b1-3ee5cb0c86b2.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112147137.a9e8e238-8504-47a5-86b1-3ee5cb0c86b2.main.jsonlz4 new file mode 100644 index 0000000..fe5e654 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673112147137.a9e8e238-8504-47a5-86b1-3ee5cb0c86b2.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114009817.6472eaf7-a484-4192-a148-1fc5a3d70bed.new-profile.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114009817.6472eaf7-a484-4192-a148-1fc5a3d70bed.new-profile.jsonlz4 new file mode 100644 index 0000000..7781051 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114009817.6472eaf7-a484-4192-a148-1fc5a3d70bed.new-profile.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114313721.04695171-0f1f-4646-b3bd-32a7f980bdc1.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114313721.04695171-0f1f-4646-b3bd-32a7f980bdc1.event.jsonlz4 new file mode 100644 index 0000000..7515834 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114313721.04695171-0f1f-4646-b3bd-32a7f980bdc1.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114313813.1604453f-9cd4-4e3b-9d1d-b8933dda49b1.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114313813.1604453f-9cd4-4e3b-9d1d-b8933dda49b1.main.jsonlz4 new file mode 100644 index 0000000..2a92009 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114313813.1604453f-9cd4-4e3b-9d1d-b8933dda49b1.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114503602.52d2b5a7-2499-44e5-bf42-812d5637bf7f.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114503602.52d2b5a7-2499-44e5-bf42-812d5637bf7f.event.jsonlz4 new file mode 100644 index 0000000..d89d740 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114503602.52d2b5a7-2499-44e5-bf42-812d5637bf7f.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114503680.5da6450f-6691-4d5c-8a77-8296fe655ef5.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114503680.5da6450f-6691-4d5c-8a77-8296fe655ef5.main.jsonlz4 new file mode 100644 index 0000000..b32c0eb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114503680.5da6450f-6691-4d5c-8a77-8296fe655ef5.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114744472.7d4e3cef-409b-4886-8725-dae47809d2a4.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114744472.7d4e3cef-409b-4886-8725-dae47809d2a4.event.jsonlz4 new file mode 100644 index 0000000..09bd0c9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114744472.7d4e3cef-409b-4886-8725-dae47809d2a4.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114744555.0f4ab6d4-fc07-4a8c-864c-6fa9999459aa.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114744555.0f4ab6d4-fc07-4a8c-864c-6fa9999459aa.main.jsonlz4 new file mode 100644 index 0000000..4d52bff Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673114744555.0f4ab6d4-fc07-4a8c-864c-6fa9999459aa.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673115719066.acac098a-9ab2-4055-8108-7c44a801313e.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673115719066.acac098a-9ab2-4055-8108-7c44a801313e.event.jsonlz4 new file mode 100644 index 0000000..49ddf69 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673115719066.acac098a-9ab2-4055-8108-7c44a801313e.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673115719139.2b0c01bd-1d6b-416f-b1be-447774673698.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673115719139.2b0c01bd-1d6b-416f-b1be-447774673698.main.jsonlz4 new file mode 100644 index 0000000..f7cc28c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673115719139.2b0c01bd-1d6b-416f-b1be-447774673698.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673116940093.52be4f41-c95c-4a86-9c56-dbfc816350be.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673116940093.52be4f41-c95c-4a86-9c56-dbfc816350be.event.jsonlz4 new file mode 100644 index 0000000..f2aaa0f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673116940093.52be4f41-c95c-4a86-9c56-dbfc816350be.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673116940169.17ab5acd-2219-4110-a92f-724e754d72e3.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673116940169.17ab5acd-2219-4110-a92f-724e754d72e3.main.jsonlz4 new file mode 100644 index 0000000..3094505 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673116940169.17ab5acd-2219-4110-a92f-724e754d72e3.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117760486.7b1cb609-148f-49d6-822e-6947a8b62d5a.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117760486.7b1cb609-148f-49d6-822e-6947a8b62d5a.event.jsonlz4 new file mode 100644 index 0000000..e5260a2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117760486.7b1cb609-148f-49d6-822e-6947a8b62d5a.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117760558.2b468569-d2eb-445e-ad47-05be423cbdd0.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117760558.2b468569-d2eb-445e-ad47-05be423cbdd0.main.jsonlz4 new file mode 100644 index 0000000..4c8e6b1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117760558.2b468569-d2eb-445e-ad47-05be423cbdd0.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117778555.8b903496-4397-4312-bd1c-1ca973fd3f37.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117778555.8b903496-4397-4312-bd1c-1ca973fd3f37.event.jsonlz4 new file mode 100644 index 0000000..8655bea Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117778555.8b903496-4397-4312-bd1c-1ca973fd3f37.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117778577.58ff86f4-a050-40d9-a836-47e9b7027f09.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117778577.58ff86f4-a050-40d9-a836-47e9b7027f09.main.jsonlz4 new file mode 100644 index 0000000..ad1c911 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117778577.58ff86f4-a050-40d9-a836-47e9b7027f09.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117955524.21cfa3c4-00b3-4d4c-965a-09174cd8c79b.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117955524.21cfa3c4-00b3-4d4c-965a-09174cd8c79b.event.jsonlz4 new file mode 100644 index 0000000..8bacffe Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117955524.21cfa3c4-00b3-4d4c-965a-09174cd8c79b.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117955604.434a6fd5-22b9-4097-80cf-f994fed46a3e.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117955604.434a6fd5-22b9-4097-80cf-f994fed46a3e.main.jsonlz4 new file mode 100644 index 0000000..b860f55 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673117955604.434a6fd5-22b9-4097-80cf-f994fed46a3e.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673119457500.31d077cc-1153-4718-bf43-b6c2694e203b.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673119457500.31d077cc-1153-4718-bf43-b6c2694e203b.event.jsonlz4 new file mode 100644 index 0000000..8530dbe Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673119457500.31d077cc-1153-4718-bf43-b6c2694e203b.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673119457582.933dabd5-3110-4909-ac43-d8d091e40625.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673119457582.933dabd5-3110-4909-ac43-d8d091e40625.main.jsonlz4 new file mode 100644 index 0000000..d82300a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673119457582.933dabd5-3110-4909-ac43-d8d091e40625.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122497430.31c4ab6d-4e02-40ad-850c-31bc8176cad9.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122497430.31c4ab6d-4e02-40ad-850c-31bc8176cad9.event.jsonlz4 new file mode 100644 index 0000000..0e64255 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122497430.31c4ab6d-4e02-40ad-850c-31bc8176cad9.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122497480.6ea3ab57-9608-4537-9350-3db1092f5a85.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122497480.6ea3ab57-9608-4537-9350-3db1092f5a85.main.jsonlz4 new file mode 100644 index 0000000..a0620e0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122497480.6ea3ab57-9608-4537-9350-3db1092f5a85.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122929721.587ca271-471c-4a32-beb4-c3981b841091.event.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122929721.587ca271-471c-4a32-beb4-c3981b841091.event.jsonlz4 new file mode 100644 index 0000000..489b064 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122929721.587ca271-471c-4a32-beb4-c3981b841091.event.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122929770.ed7b5552-4254-4d77-be80-86dc7ce57223.main.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122929770.ed7b5552-4254-4d77-be80-86dc7ce57223.main.jsonlz4 new file mode 100644 index 0000000..6cc4be1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/archived/2023-01/1673122929770.ed7b5552-4254-4d77-be80-86dc7ce57223.main.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/glean/db/data.safe.bin b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/glean/db/data.safe.bin new file mode 100644 index 0000000..eea2251 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/glean/db/data.safe.bin differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/glean/events/events b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/glean/events/events new file mode 100644 index 0000000..95e5b61 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/glean/events/events @@ -0,0 +1 @@ +{"timestamp":236444,"category":"perf","name":"page_load","extra":{"response_time":"1250","fcp_time":"2985","load_type":"LINK","js_exec_time":"2286","load_time":"5919"}} diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/session-state.json b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/session-state.json new file mode 100644 index 0000000..59614dc --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/session-state.json @@ -0,0 +1 @@ +{"sessionId":"b14bf1a0-76a5-4a16-a802-9b3ed36728b1","subsessionId":"abbb70cc-ed17-4004-983c-ae6c3dda4bdc","profileSubsessionCounter":13,"newProfilePingSent":true} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/datareporting/state.json b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/state.json new file mode 100644 index 0000000..2a3bb56 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/datareporting/state.json @@ -0,0 +1 @@ +{"clientID":"5e6cd0db-08f4-43ff-a9af-e78c6ef2f1ba"} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/extension-preferences.json b/home/.mozilla/firefox/alce0sf5.default-default/extension-preferences.json new file mode 100644 index 0000000..7bc183a --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/extension-preferences.json @@ -0,0 +1 @@ +{"formautofill@mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed"],"origins":[]},"pictureinpicture@mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed","internal:privateBrowsingAllowed"],"origins":[]},"screenshots@mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed","internal:privateBrowsingAllowed"],"origins":[]},"webcompat-reporter@mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed","internal:privateBrowsingAllowed"],"origins":[]},"webcompat@mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed","internal:privateBrowsingAllowed"],"origins":[]},"default-theme@mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed","internal:privateBrowsingAllowed"],"origins":[]},"addons-search-detection@mozilla.com":{"permissions":["internal:svgContextPropertiesAllowed"],"origins":[]},"google@search.mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed"],"origins":[]},"wikipedia@search.mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed","internal:privateBrowsingAllowed"],"origins":[]},"bing@search.mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed","internal:privateBrowsingAllowed"],"origins":[]},"ddg@search.mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed","internal:privateBrowsingAllowed"],"origins":[]},"mercadolibre@search.mozilla.org":{"permissions":["internal:svgContextPropertiesAllowed"],"origins":[]},"expressionist-balanced-colorway@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"visionary-balanced-colorway@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]},"innovator-balanced-colorway@mozilla.org":{"permissions":["internal:privateBrowsingAllowed"],"origins":[]}} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/extensions.json b/home/.mozilla/firefox/alce0sf5.default-default/extensions.json new file mode 100644 index 0000000..e3eb4a7 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/extensions.json @@ -0,0 +1 @@ +{"schemaVersion":35,"addons":[{"id":"formautofill@mozilla.org","syncGUID":"{f161b422-f757-42cd-8a36-29a647b04af2}","version":"1.0.1","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Form Autofill","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1671626627000,"updateDate":1671626627000,"applyBackgroundUpdates":1,"path":"/usr/lib/firefox/browser/features/formautofill@mozilla.org.xpi","skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":[],"origins":[]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"jar:file:///usr/lib/firefox/browser/features/formautofill@mozilla.org.xpi!/","location":"app-system-defaults"},{"id":"pictureinpicture@mozilla.org","syncGUID":"{9cd29cab-dc3c-4e7c-98d5-8c7d51f2fa40}","version":"1.0.0","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Picture-In-Picture","description":"Fixes for web compatibility with Picture-in-Picture","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1671626627000,"updateDate":1671626627000,"applyBackgroundUpdates":1,"path":"/usr/lib/firefox/browser/features/pictureinpicture@mozilla.org.xpi","skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"88.0a1","maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":[],"origins":[]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"jar:file:///usr/lib/firefox/browser/features/pictureinpicture@mozilla.org.xpi!/","location":"app-system-defaults"},{"id":"screenshots@mozilla.org","syncGUID":"{61815844-5bc6-4239-9bd9-d8903c4aee1a}","version":"39.0.1","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Firefox Screenshots","description":"Take clips and screenshots from the Web and save them temporarily or permanently.","creator":"Mozilla ","homepageURL":"https://github.com/mozilla-services/screenshots","developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1671626627000,"updateDate":1671626627000,"applyBackgroundUpdates":1,"path":"/usr/lib/firefox/browser/features/screenshots@mozilla.org.xpi","skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"57.0a1","maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["activeTab","downloads","tabs","storage","notifications","clipboardWrite","contextMenus","mozillaAddons","telemetry"],"origins":["","https://screenshots.firefox.com/","resource://pdf.js/","about:reader*","https://screenshots.firefox.com/*"]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"jar:file:///usr/lib/firefox/browser/features/screenshots@mozilla.org.xpi!/","location":"app-system-defaults"},{"id":"webcompat-reporter@mozilla.org","syncGUID":"{33b14827-7806-4cdc-90f1-f8e082f1f523}","version":"1.5.1","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"WebCompat Reporter","description":"Report site compatibility issues on webcompat.com","creator":"Thomas Wisniewski ","homepageURL":"https://github.com/mozilla/webcompat-reporter","developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1671626627000,"updateDate":1671626627000,"applyBackgroundUpdates":1,"path":"/usr/lib/firefox/browser/features/webcompat-reporter@mozilla.org.xpi","skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["tabs"],"origins":[""]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{"16":"icons/lightbulb.svg","32":"icons/lightbulb.svg","48":"icons/lightbulb.svg","96":"icons/lightbulb.svg","128":"icons/lightbulb.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"jar:file:///usr/lib/firefox/browser/features/webcompat-reporter@mozilla.org.xpi!/","location":"app-system-defaults"},{"id":"webcompat@mozilla.org","syncGUID":"{e5f7cd6d-f190-4a27-9b55-bd470eb6dff8}","version":"108.1.0","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Web Compatibility Interventions","description":"Urgent post-release fixes for web compatibility.","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1671626627000,"updateDate":1671626627000,"applyBackgroundUpdates":1,"path":"/usr/lib/firefox/browser/features/webcompat@mozilla.org.xpi","skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"102.0","maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["mozillaAddons","tabs","webNavigation","webRequest","webRequestBlocking"],"origins":[""]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"jar:file:///usr/lib/firefox/browser/features/webcompat@mozilla.org.xpi!/","location":"app-system-defaults"},{"id":"default-theme@mozilla.org","syncGUID":"{b8810d6e-e093-4cba-9708-770a5799ec32}","version":"1.3","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"System theme — auto","description":"Follow the operating system setting for buttons, menus, and windows.","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107550682,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://default-theme/","location":"app-builtin"},{"id":"addons-search-detection@mozilla.com","syncGUID":"{430b68d9-a977-4043-9b30-639c922fcb46}","version":"2.0.0","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Add-ons Search Detection","description":"","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1673107552717,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["telemetry","webRequest","webRequestBlocking"],"origins":[""]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-addons/search-detection/","location":"app-builtin"},{"id":"firefox-compact-light@mozilla.org","syncGUID":"{d70e277f-5361-4eaf-94c4-8fc16ccabf46}","version":"1.2","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Light","description":"A theme with a light color scheme.","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555859,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/light/","location":"app-builtin"},{"id":"firefox-compact-dark@mozilla.org","syncGUID":"{c762ef39-330a-4152-b41b-b02111f3bf35}","version":"1.2","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Dark","description":"A theme with a dark color scheme.","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555862,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/dark/","location":"app-builtin"},{"id":"firefox-alpenglow@mozilla.org","syncGUID":"{05b334d8-6927-41f3-8495-da07aefccb2a}","version":"1.4","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Firefox Alpenglow","description":"Use a colorful appearance for buttons, menus, and windows.","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555863,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/alpenglow/","location":"app-builtin"},{"id":"playmaker-soft-colorway@mozilla.org","syncGUID":"{9ba48ad0-8a58-4cac-be7e-75e73c1e15a1}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Playmaker – Soft","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555868,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022playmaker/soft/","location":"app-builtin"},{"id":"playmaker-balanced-colorway@mozilla.org","syncGUID":"{48fb2a99-ee6d-46d6-b716-9ee603095cba}","version":"1.1.2","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Playmaker – Balanced","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555871,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022playmaker/balanced/","location":"app-builtin"},{"id":"playmaker-bold-colorway@mozilla.org","syncGUID":"{0a4ac7dc-884a-4793-940a-bedcab1d6733}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Playmaker – Bold","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555874,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022playmaker/bold/","location":"app-builtin"},{"id":"expressionist-soft-colorway@mozilla.org","syncGUID":"{e492f8ec-4e74-4161-86a6-9604f59e558c}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Expressionist – Soft","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555876,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022expressionist/soft/","location":"app-builtin"},{"id":"expressionist-balanced-colorway@mozilla.org","syncGUID":"{64c3d71c-c351-4b15-98cb-04b5ccbf2fa1}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Expressionist – Balanced","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555877,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022expressionist/balanced/","location":"app-builtin"},{"id":"expressionist-bold-colorway@mozilla.org","syncGUID":"{18e9ce05-77b8-4a91-974b-fba3472955e8}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Expressionist – Bold","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555879,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022expressionist/bold/","location":"app-builtin"},{"id":"visionary-soft-colorway@mozilla.org","syncGUID":"{58ce28d6-8fda-43b5-a5bf-8aa5270f3fed}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Visionary – Soft","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555886,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022visionary/soft/","location":"app-builtin"},{"id":"visionary-balanced-colorway@mozilla.org","syncGUID":"{795bdd3b-c63b-413b-aec5-5e24e1b49b77}","version":"1.1.2","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Visionary – Balanced","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555889,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022visionary/balanced/","location":"app-builtin"},{"id":"visionary-bold-colorway@mozilla.org","syncGUID":"{d82665b6-30a8-4574-84d9-01e956be10b4}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Visionary – Bold","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555891,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022visionary/bold/","location":"app-builtin"},{"id":"activist-soft-colorway@mozilla.org","syncGUID":"{a63175a8-6e5d-4488-8a8b-bec14586dd47}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Activist – Soft","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555893,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022activist/soft/","location":"app-builtin"},{"id":"activist-balanced-colorway@mozilla.org","syncGUID":"{8b317420-ef0c-4110-b673-ede04e2de77f}","version":"1.1.2","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Activist – Balanced","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555894,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022activist/balanced/","location":"app-builtin"},{"id":"activist-bold-colorway@mozilla.org","syncGUID":"{13689a43-811f-4574-9c7b-4326febf01be}","version":"1.1.2","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Activist – Bold","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555895,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022activist/bold/","location":"app-builtin"},{"id":"dreamer-soft-colorway@mozilla.org","syncGUID":"{107e0dc0-2e90-40ce-8ab3-3f32e3e8f5aa}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Dreamer – Soft","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555897,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022dreamer/soft/","location":"app-builtin"},{"id":"dreamer-balanced-colorway@mozilla.org","syncGUID":"{5ad5e14b-437e-4fce-9aca-b06c124ac61e}","version":"1.1.2","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Dreamer – Balanced","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555904,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022dreamer/balanced/","location":"app-builtin"},{"id":"dreamer-bold-colorway@mozilla.org","syncGUID":"{f9493f84-5ce2-450b-a921-538acea3efa3}","version":"1.1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Dreamer – Bold","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555909,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022dreamer/bold/","location":"app-builtin"},{"id":"innovator-soft-colorway@mozilla.org","syncGUID":"{f71ffcc5-110a-415a-a92b-e2de71f9fc71}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Innovator – Soft","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555910,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022innovator/soft/","location":"app-builtin"},{"id":"innovator-balanced-colorway@mozilla.org","syncGUID":"{79981743-54c7-479b-a7cf-efbbf06437ed}","version":"1.1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Innovator – Balanced","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555911,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022innovator/balanced/","location":"app-builtin"},{"id":"innovator-bold-colorway@mozilla.org","syncGUID":"{44938939-820d-4cf3-b45c-c4765e3ff83e}","version":"1.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Innovator – Bold","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1673107555913,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/colorways/2022innovator/bold/","location":"app-builtin"},{"id":"google@search.mozilla.org","syncGUID":"{6d33aef2-5e4b-4c26-98d4-9d2981b2eafd}","version":"1.3","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Google","description":"Google Search","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1673107558002,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[{"name":"Google","description":"Google Search","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["en"]},{"name":"Google","description":"Google Search","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["region-ru"]},{"name":"Google","description":"Google Search","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["region-by"]},{"name":"Google","description":"Google Search","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["region-tr"]},{"name":"Google","description":"Google Search","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["region-kz"]}],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":[],"origins":[]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{"16":"favicon.ico"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://search-extensions/google/","location":"app-builtin"},{"id":"wikipedia@search.mozilla.org","syncGUID":"{5f408f07-2fc8-48e1-b71d-534570ad94d8}","version":"1.2","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Wikipedia (en)","description":"Wikipedia, the Free Encyclopedia","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1673107558214,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[{"name":"Wikipedia (en)","description":"Wikipedia, the Free Encyclopedia","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["en"]},{"name":"Wikipedija (hr)","description":"Wikipedija, slobodna enciklopedija","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["hr"]},{"name":"Wikipedia (fi)","description":"Wikipedia (fi), vapaa tietosanakirja","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["fi"]},{"name":"Wikipedia (hy)","description":"Վիքիփեդիա՝ ազատ հանրագիտարան","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["hy"]},{"name":"Уикипедия (kk)","description":"Уикипедия (kk)","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["kk"]},{"name":"Вікіпедыя (be)","description":"Вікіпедыя, свабодная энцыклапедыя","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["be"]},{"name":"위키백과 (ko)","description":"Wikipedia, the free encyclopedia","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["kr"]},{"name":"Wikipedia (ro)","description":"Wikipedia, enciclopedia liberă","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ro"]},{"name":"Wikipedia (bs)","description":"Slobodna enciklopedija","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["bs"]},{"name":"Wikipedia (pt)","description":"Wikipédia, a enciclopédia livre","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["pt"]},{"name":"Vikipetã (gn)","description":"Vikipetã, opaite tembikuaa hekosãsóva renda","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["gn"]},{"name":"વિકિપીડિયા (gu)","description":"વીકીપીડિયા, મુક્ત એનસાયક્લોપીડિયા","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["gu"]},{"name":"Wikipedia (el)","description":"Βικιπαίδεια, η ελεύθερη εγκυκλοπαίδεια","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["el"]},{"name":"Wikipedia (es)","description":"Wikipedia, la enciclopedia libre","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["es"]},{"name":"ויקיפדיה","description":"ויקיפדיה","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["he"]},{"name":"Wikipedia (da)","description":"Wikipedia, den frie encyklopædi","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["da"]},{"name":"Wikipedia (tr)","description":"Vikipedi, özgür ansiklopedi","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["tr"]},{"name":"Wikipedija (hsb)","description":"Wikipedija, swobodna encyklopedija","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["hsb"]},{"name":"Wikipedy (fy)","description":"De fergese ensyklopedy","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["fy-NL"]},{"name":"विकिपीडिया (ne)","description":"विकिपिडिया एक स्वतन्त्र विश्वकोष","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ne"]},{"name":"Wikipedia (nl)","description":"De vrije encyclopedie","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["nl"]},{"name":"Vikipeedia (et)","description":"Vikipeedia, vaba entsüklopeedia","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["et"]},{"name":"వికీపీడియా (te)","description":"వికీపీడియా (te)","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["te"]},{"name":"Wikipédia (fr)","description":"Wikipédia, l'encyclopédie libre","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["fr"]},{"name":"Wikipedia (tl)","description":"Wikipedia, ang malayang ensiklopedya","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["tl"]},{"name":"维基百科","description":"维基百科,自由的百科全书","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["zh-CN"]},{"name":"Wikipedia (lij)","description":"Wikipedia, l'enciclopedia libera","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["lij"]},{"name":"វីគីភីឌា (km)","description":"វីគីភីឌា សព្វ​វចនា​ធិប្បាយ​សេរី","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["km"]},{"name":"Уикипедия (bg)","description":"Уикипедия, свободната енциклоподия","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["bg"]},{"name":"Wikipedia (id)","description":"Wikipedia, ensiklopedia bebas","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["id"]},{"name":"Wikipedia (pa)","description":"ਵਿਕਿਪੀਡਿਆ, ਮੁਫ਼ਤ/ਮੁਕਤ ਸ਼ਬਦਕੋਸ਼","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["pa"]},{"name":"উইকিপিডিয়া (bn)","description":"উইকিপিডিয়া, মুক্ত বিশ্বকোষ","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["bn"]},{"name":"Wikipedia (eu)","description":"Wikipedia, entziklopedia askea","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["eu"]},{"name":"Wicipedia (cy)","description":"Wicipedia, Y Gwyddioniadur Rhydd","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["cy"]},{"name":"Wikipèdia (oc)","description":"Wikipèdia, l'enciclopèdia liura","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["oc"]},{"name":"Wikipedia (ja)","description":"Wikipedia - フリー百科事典","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ja"]},{"name":"Wikipedie (cs)","description":"Wikipedia, svobodná encyclopedie","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["cz"]},{"name":"Wikipédia (hu)","description":"Wikipedia, a szabad enciklopédia","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["hu"]},{"name":"Wikipedia (kn)","description":"Wikipedia, the free encyclopedia","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["kn"]},{"name":"Wikipedia (is)","description":"Wikipedia, the free encyclopedia","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["is"]},{"name":"Вікіпедія (uk)","description":"Вікіпедія, вільна енциклопедія","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["uk"]},{"name":"Wikipedia (kab)","description":"Wikipedia, tasanayt tilellit","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["kab"]},{"name":"Wikipedia (zh)","description":"維基百科,自由的百科全書","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["zh-TW"]},{"name":"ویکیپیڈیا (ur)","description":"ویکیپیڈیا آزاد دائرۃ المعارف","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ur"]},{"name":"Vikipedio (eo)","description":"Vikipedio, la libera enciklopedio","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["eo"]},{"name":"Wikipedia (si)","description":"Wikipedia, the free encyclopedia","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["si"]},{"name":"ويكيبيديا (ar)","description":"ويكيبيديا (ar)","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ar"]},{"name":"Wikipedia (vi)","description":"Wikipedia, bách khoa toàn thư mở","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["vi"]},{"name":"ვიკიპედია (ka)","description":"ვიკიპედია, თავისუფალი ენციკლოპედია","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ka"]},{"name":"Uicipeid (gd)","description":"Wikipedia, An leabhar mòr-eòlais","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["gd"]},{"name":"Wikipedia (it)","description":"Wikipedia, l'enciclopedia libera","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["it"]},{"name":"Vikipediya (uz)","description":"Vikipediya, ochiq ensiklopediya","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["uz"]},{"name":"Wikipedia (lt)","description":"Vikipedija, laisvoji enciklopedija","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["lt"]},{"name":"Wikipedia (sq)","description":"Wikipedia, enciklopedia e lirë","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["sq"]},{"name":"Vicipéid (ga)","description":"Vicipéid, an Chiclipéid Shaor","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ga-IE"]},{"name":"विकिपीडिया (hi)","description":"विकिपीडिया (हिन्दी)","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["hi"]},{"name":"Vikipedeja (ltg)","description":"Vikipēdija, breivuo eņciklopedeja","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ltg"]},{"name":"விக்கிப்பீடியா (ta)","description":"விக்கிப்பீடியா (ta)","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ta"]},{"name":"Vikipediya (az)","description":"Vikipediya, açıq ensiklopediya","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["az"]},{"name":"Википедија (mk)","description":"Википедија, слободната енциклопедија","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["mk"]},{"name":"วิกิพีเดีย","description":"วิกิพีเดีย สารานุกรมเสรี","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["th"]},{"name":"Wikipedia (de)","description":"Wikipedia, die freie Enzyklopädie","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["de"]},{"name":"Wikipedija (dsb)","description":"Wikipedija, lichotna encyklopedija","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["dsb"]},{"name":"विकिपीडिया (mr)","description":"विकिपीडिया, मोफत माहितीकोष","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["mr"]},{"name":"Wikipedia (ast)","description":"La enciclopedia llibre","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ast"]},{"name":"Wikipedia (my)","description":"အခမဲ့လွတ်လပ်စွယ်စုံကျမ်း","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["my"]},{"name":"Wikipedia (rm)","description":"Vichipedia, l'enciclopedia libra","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["rm"]},{"name":"Wikipedia (nn)","description":"Wikipedia, det frie oppslagsverket","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["NN"]},{"name":"Wikipedia (wo)","description":"Wikipedia, Jimbulang bu Ubbeeku bi","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["wo"]},{"name":"Wikipedia (gl)","description":"Wikipedia, a enciclopedia libre","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["gl"]},{"name":"Viquipèdia (ca)","description":"L'enciclopèdia lliure","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ca"]},{"name":"Wikipédia (sk)","description":"Wikipédia, slobodná a otvorená encyklopédia","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["sk"]},{"name":"Википедија (sr)","description":"Претрага Википедије на српском језику","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["sr"]},{"name":"Wikipedia (af)","description":"Wikipedia, die vrye ensiklopedie","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["af"]},{"name":"ویکی‌پدیا (fa)","description":"ویکی‌پدیا، دانشنامهٔ آزاد","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["fa"]},{"name":"Wikipedia (ms)","description":"Wikipedia, ensiklopedia bebas","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ms"]},{"name":"Wikipedia (ia)","description":"Wikipedia, le encyclopedia libere","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ia"]},{"name":"Wikipedia (no)","description":"Wikipedia, den frie encyklopedi","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["NO"]},{"name":"Википедия (ru)","description":"Википедия, свободная энциклопедия","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ru"]},{"name":"Wikipedia (br)","description":"Wikipedia, an holloueziadur digor","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["br"]},{"name":"Wikipedia (pl)","description":"Wikipedia, wolna encyklopedia","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["pl"]},{"name":"Вікіпэдыя (be-tarask)","description":"Вікіпэдыя, вольная энцыкляпэдыя","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["be-tarask"]},{"name":"Wikipedia (sv)","description":"Wikipedia, den fria encyklopedin","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["sv-SE"]},{"name":"ວິກິພີເດຍ (lo)","description":"ວິກິພີເດຍ, ສາລານຸກົມເສລີ","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["lo"]},{"name":"Wikipedija (sl)","description":"Wikipedija, prosta enciklopedija","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["sl"]},{"name":"Vikipēdija","description":"Vikipēdija, brīvā enciklopēdija","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["lv"]},{"name":"Biquipedia (an)","description":"A enciclopedia Libre","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["an"]}],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":[],"origins":[]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{"16":"favicon.ico"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://search-extensions/wikipedia/","location":"app-builtin"},{"id":"langpack-es-MX@firefox.mozilla.org","syncGUID":"{e46d4cab-ecc4-45da-a680-675e6e5a95df}","version":"108.0.2buildid20230104.165113","type":"locale","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Español (México) Language Pack","description":"Language pack for Firefox for es-MX","creator":"mozilla.org (contributors: Roberto Alvarado, Mauricio Navarro)","developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1673107558282,"updateDate":1673107558282,"applyBackgroundUpdates":1,"path":"/home/diegofcs/.mozilla/firefox/alce0sf5.default-default/extensions/langpack-es-MX@firefox.mozilla.org.xpi","skinnable":false,"sourceURI":"https://addons.mozilla.org/firefox/downloads/file/4052013/spanish_mexico_language_pack-108.0.2buildid20230104.165113.xpi","releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"108.0","maxVersion":"108.*"}],"targetPlatforms":[],"signedState":2,"signedDate":1672864662000,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":{"chromeEntries":[["locale","app-marketplace-icons","es-MX","browser/chrome/browser/locale/es-MX/app-marketplace-icons/"],["locale","branding","es-MX","browser/chrome/es-MX/locale/branding/"],["locale","browser","es-MX","browser/chrome/es-MX/locale/browser/"],["locale","browser-region","es-MX","browser/chrome/es-MX/locale/browser-region/"],["locale","devtools","es-MX","browser/chrome/es-MX/locale/es-MX/devtools/client/"],["locale","devtools-shared","es-MX","browser/chrome/es-MX/locale/es-MX/devtools/shared/"],["locale","formautofill","es-MX","browser/features/formautofill@mozilla.org/es-MX/locale/es-MX/"],["locale","report-site-issue","es-MX","browser/features/webcompat-reporter@mozilla.org/es-MX/locale/es-MX/"],["locale","alerts","es-MX","chrome/es-MX/locale/es-MX/alerts/"],["locale","autoconfig","es-MX","chrome/es-MX/locale/es-MX/autoconfig/"],["locale","global","es-MX","chrome/es-MX/locale/es-MX/global/"],["locale","global-platform","es-MX","chrome/es-MX/locale/es-MX/global-platform/unix/"],["locale","mozapps","es-MX","chrome/es-MX/locale/es-MX/mozapps/"],["locale","necko","es-MX","chrome/es-MX/locale/es-MX/necko/"],["locale","passwordmgr","es-MX","chrome/es-MX/locale/es-MX/passwordmgr/"],["locale","pdf.js","es-MX","chrome/es-MX/locale/pdfviewer/"],["locale","pipnss","es-MX","chrome/es-MX/locale/es-MX/pipnss/"],["locale","pippki","es-MX","chrome/es-MX/locale/es-MX/pippki/"],["locale","places","es-MX","chrome/es-MX/locale/es-MX/places/"],["locale","weave","es-MX","chrome/es-MX/locale/es-MX/services/"]],"langpackId":"langpack-es-MX-browser","l10nRegistrySources":{"toolkit":"","browser":"browser/"},"languages":["es-MX"]},"hidden":false,"installTelemetryInfo":{"source":"about:welcome"},"recommendationState":null,"rootURI":"jar:file:///home/diegofcs/.mozilla/firefox/alce0sf5.default-default/extensions/langpack-es-MX@firefox.mozilla.org.xpi!/","location":"app-profile"},{"id":"bing@search.mozilla.org","syncGUID":"{82d61c40-dbe7-453f-ba3d-d611d3c8d2c8}","version":"1.4","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Bing","description":"Microsoft Bing","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1673107558427,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":[],"origins":[]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{"16":"favicon.ico"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://search-extensions/bing/","location":"app-builtin"},{"id":"ddg@search.mozilla.org","syncGUID":"{1549cc2d-3249-4cf9-b610-2fbcc2b8663d}","version":"1.2","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"DuckDuckGo","description":"Search DuckDuckGo","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1673107558518,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":[],"origins":[]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{"16":"favicon.ico"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://search-extensions/ddg/","location":"app-builtin"},{"id":"mercadolibre@search.mozilla.org","syncGUID":"{89bc46a8-252f-46b7-8dfc-a43582566bc8}","version":"1.1","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"MercadoLibre Argentina","description":"MercadoLibre Argentina","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1673107558832,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[{"name":"MercadoLibre Argentina","description":"MercadoLibre Argentina","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["ar"]},{"name":"MercadoLibre Chile","description":"MercadoLibre Chile","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["cl"]},{"name":"MercadoLibre Mexico","description":"MercadoLibre Mexico","creator":null,"developers":null,"translators":null,"contributors":null,"locales":["mx"]}],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":[],"origins":[]},"optionalPermissions":{"permissions":[],"origins":[]},"icons":{"16":"favicon.ico"},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://search-extensions/mercadolibre/","location":"app-builtin"},{"id":"{fca6ebc5-a96d-40ef-8a83-8791d5919e15}","syncGUID":"{60267256-9d09-4e9e-809a-c6482e4a42f5}","version":"1.0","type":"theme","loader":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Monochrome","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1673107678695,"updateDate":1673107678695,"applyBackgroundUpdates":1,"path":"/home/diegofcs/.mozilla/firefox/alce0sf5.default-default/extensions/{fca6ebc5-a96d-40ef-8a83-8791d5919e15}.xpi","skinnable":false,"sourceURI":"https://addons.mozilla.org/firefox/downloads/file/3646012/monochrome-1.0.xpi","releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"53.0","maxVersion":"*"}],"targetPlatforms":[],"signedState":2,"signedDate":1600616532000,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"icons":{},"iconURL":null,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":{"source":"amo","sourceURL":"https://addons.mozilla.org/es/firefox/addon/monochrome/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search","method":"amWebAPI"},"recommendationState":null,"rootURI":"jar:file:///home/diegofcs/.mozilla/firefox/alce0sf5.default-default/extensions/%7Bfca6ebc5-a96d-40ef-8a83-8791d5919e15%7D.xpi!/","location":"app-profile"}]} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/extensions/langpack-es-MX@firefox.mozilla.org.xpi b/home/.mozilla/firefox/alce0sf5.default-default/extensions/langpack-es-MX@firefox.mozilla.org.xpi new file mode 100644 index 0000000..f2895b6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/extensions/langpack-es-MX@firefox.mozilla.org.xpi differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/extensions/{fca6ebc5-a96d-40ef-8a83-8791d5919e15}.xpi b/home/.mozilla/firefox/alce0sf5.default-default/extensions/{fca6ebc5-a96d-40ef-8a83-8791d5919e15}.xpi new file mode 100644 index 0000000..ebdea58 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/extensions/{fca6ebc5-a96d-40ef-8a83-8791d5919e15}.xpi differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/favicons.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/favicons.sqlite new file mode 100644 index 0000000..b4ee391 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/favicons.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/formhistory.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/formhistory.sqlite new file mode 100644 index 0000000..576e5c7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/formhistory.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/gmp-gmpopenh264/1.8.1.2/gmpopenh264.info b/home/.mozilla/firefox/alce0sf5.default-default/gmp-gmpopenh264/1.8.1.2/gmpopenh264.info new file mode 100755 index 0000000..2f25a1d --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/gmp-gmpopenh264/1.8.1.2/gmpopenh264.info @@ -0,0 +1,4 @@ +Name: gmpopenh264 +Description: GMP Plugin for OpenH264. +Version: 1.8.1 +APIs: encode-video[h264], decode-video[h264] diff --git a/home/.mozilla/firefox/alce0sf5.default-default/gmp-gmpopenh264/1.8.1.2/libgmpopenh264.so b/home/.mozilla/firefox/alce0sf5.default-default/gmp-gmpopenh264/1.8.1.2/libgmpopenh264.so new file mode 100755 index 0000000..00222b5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/gmp-gmpopenh264/1.8.1.2/libgmpopenh264.so differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/handlers.json b/home/.mozilla/firefox/alce0sf5.default-default/handlers.json new file mode 100644 index 0000000..d27fcb2 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/handlers.json @@ -0,0 +1 @@ +{"defaultHandlersVersion":{},"mimeTypes":{"application/pdf":{"action":3,"extensions":["pdf"]},"image/webp":{"action":3,"extensions":["webp"]},"image/avif":{"action":3,"extensions":["avif"]}},"schemes":{"mailto":{"stubEntry":true,"handlers":[null,{"name":"Gmail","uriTemplate":"https://mail.google.com/mail/?extsrc=mailto&url=%s"}]}},"isDownloadsImprovementsAlreadyMigrated":true,"isSVGXMLAlreadyMigrated":true} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/key4.db b/home/.mozilla/firefox/alce0sf5.default-default/key4.db new file mode 100644 index 0000000..25a5450 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/key4.db differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/lock b/home/.mozilla/firefox/alce0sf5.default-default/lock new file mode 120000 index 0000000..a0723b1 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/lock @@ -0,0 +1 @@ +127.0.0.1:+1398 \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/logins.json b/home/.mozilla/firefox/alce0sf5.default-default/logins.json new file mode 100644 index 0000000..c9715b5 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/logins.json @@ -0,0 +1 @@ +{"nextId":2,"logins":[{"id":1,"hostname":"https://accounts.google.com","httpRealm":null,"formSubmitURL":"https://accounts.google.com","usernameField":"identifier","passwordField":"Passwd","encryptedUsername":"MEoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECGO1hyZdoKk+BCAvy9xL4On+FifX3GmEx08xoBrTCKr/ySodqv6LpK+ONw==","encryptedPassword":"MFIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECFSGBefvbyWtBCjfF6VAsr44vd4KCr+aQwu4ACiP+sgMo0Gl7aqEhMC2Gjlm6CMxsk10","guid":"{95cbf850-d1f7-4ac1-bdb0-4af28628daff}","encType":1,"timeCreated":1673108908615,"timeLastUsed":1673108908615,"timePasswordChanged":1673108908615,"timesUsed":1}],"potentiallyVulnerablePasswords":[],"dismissedBreachAlertsByLoginGUID":{},"version":3} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/notificationstore.json b/home/.mozilla/firefox/alce0sf5.default-default/notificationstore.json new file mode 100644 index 0000000..e69de29 diff --git a/home/.mozilla/firefox/alce0sf5.default-default/permissions.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/permissions.sqlite new file mode 100644 index 0000000..bf4fa1c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/permissions.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/pkcs11.txt b/home/.mozilla/firefox/alce0sf5.default-default/pkcs11.txt new file mode 100644 index 0000000..b234d90 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/pkcs11.txt @@ -0,0 +1,5 @@ +library= +name=NSS Internal PKCS #11 Module +parameters=configdir='sql:/home/diegofcs/.mozilla/firefox/alce0sf5.default-default' certPrefix='' keyPrefix='' secmod='secmod.db' flags=optimizeSpace updatedir='' updateCertPrefix='' updateKeyPrefix='' updateid='' updateTokenDescription='' +NSS=Flags=internal,critical trustOrder=75 cipherOrder=100 slotParams=(1={slotFlags=[ECC,RSA,DSA,DH,RC2,RC4,DES,RANDOM,SHA1,MD5,MD2,SSL,TLS,AES,Camellia,SEED,SHA256,SHA512] askpw=any timeout=30}) + diff --git a/home/.mozilla/firefox/alce0sf5.default-default/places.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/places.sqlite new file mode 100644 index 0000000..f7d665d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/places.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/prefs.js b/home/.mozilla/firefox/alce0sf5.default-default/prefs.js new file mode 100644 index 0000000..8238fe4 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/prefs.js @@ -0,0 +1,159 @@ +// Mozilla User Preferences + +// DO NOT EDIT THIS FILE. +// +// If you make changes to this file while the application is running, +// the changes will be overwritten when the application exits. +// +// To change a preference value, you can either: +// - modify it via the UI (e.g. via about:config in the browser); or +// - set it within a user.js file in your profile. + +user_pref("app.normandy.first_run", false); +user_pref("app.normandy.migrationsApplied", 12); +user_pref("app.normandy.user_id", "de2f9faf-707b-427a-809d-eb07d12d31b2"); +user_pref("app.shield.optoutstudies.enabled", false); +user_pref("app.update.lastUpdateTime.addon-background-update-timer", 1673109076); +user_pref("app.update.lastUpdateTime.browser-cleanup-thumbnails", 1673122916); +user_pref("app.update.lastUpdateTime.recipe-client-addon-run", 1673107563); +user_pref("app.update.lastUpdateTime.region-update-timer", 1673109316); +user_pref("app.update.lastUpdateTime.rs-experiment-loader-timer", 1673108813); +user_pref("app.update.lastUpdateTime.search-engine-update-timer", 1673108836); +user_pref("app.update.lastUpdateTime.services-settings-poll-changes", 1673108956); +user_pref("app.update.lastUpdateTime.telemetry_modules_ping", 1673107610); +user_pref("app.update.lastUpdateTime.xpi-signature-verification", 1673109196); +user_pref("browser.bookmarks.addedImportButton", true); +user_pref("browser.bookmarks.editDialog.confirmationHintShowCount", 1); +user_pref("browser.bookmarks.restore_default_bookmarks", false); +user_pref("browser.contentblocking.category", "strict"); +user_pref("browser.contextual-services.contextId", "{7c26c5f3-1716-4e86-a246-85e592d71ac6}"); +user_pref("browser.discovery.enabled", false); +user_pref("browser.download.dir", "/home/diegofcs/Descargas"); +user_pref("browser.download.panel.shown", true); +user_pref("browser.download.viewableInternally.typeWasRegistered.avif", true); +user_pref("browser.download.viewableInternally.typeWasRegistered.webp", true); +user_pref("browser.laterrun.bookkeeping.profileCreationTime", 1673107550); +user_pref("browser.laterrun.bookkeeping.sessionCount", 17); +user_pref("browser.laterrun.enabled", true); +user_pref("browser.migration.version", 133); +user_pref("browser.newtabpage.activity-stream.feeds.topsites", false); +user_pref("browser.newtabpage.activity-stream.impressionId", "{f63a6591-3887-42c9-bb19-c334a50a1c48}"); +user_pref("browser.newtabpage.activity-stream.showSearch", false); +user_pref("browser.newtabpage.enabled", false); +user_pref("browser.newtabpage.storageVersion", 1); +user_pref("browser.pageActions.persistedActions", "{\"ids\":[\"bookmark\"],\"idsInUrlbar\":[\"bookmark\"],\"idsInUrlbarPreProton\":[],\"version\":1}"); +user_pref("browser.pagethumbnails.storage_version", 3); +user_pref("browser.proton.toolbar.version", 3); +user_pref("browser.region.update.updated", 1673107555); +user_pref("browser.safebrowsing.provider.mozilla.lastupdatetime", "1673107563760"); +user_pref("browser.safebrowsing.provider.mozilla.nextupdatetime", "1673129163760"); +user_pref("browser.search.region", "CO"); +user_pref("browser.sessionstore.upgradeBackup.latestBuildID", "20221221124347"); +user_pref("browser.shell.checkDefaultBrowser", true); +user_pref("browser.shell.mostRecentDateSetAsDefault", "1673122894"); +user_pref("browser.startup.couldRestoreSession.count", 2); +user_pref("browser.startup.homepage", "file:///home/diegofcs/.config/startpages/minim/index.html"); +user_pref("browser.startup.homepage_override.buildID", "20221221124347"); +user_pref("browser.startup.homepage_override.mstone", "108.0.1"); +user_pref("browser.startup.lastColdStartupCheck", 1673122891); +user_pref("browser.theme.toolbar-theme", 0); +user_pref("browser.uiCustomization.state", "{\"placements\":{\"widget-overflow-fixed-list\":[],\"unified-extensions-area\":[],\"nav-bar\":[\"back-button\",\"forward-button\",\"stop-reload-button\",\"home-button\",\"customizableui-special-spring1\",\"urlbar-container\",\"customizableui-special-spring2\",\"save-to-pocket-button\",\"downloads-button\",\"fxa-toolbar-menu-button\",\"extension_one-tab_com-browser-action\"],\"toolbar-menubar\":[\"menubar-items\"],\"TabsToolbar\":[\"firefox-view-button\",\"tabbrowser-tabs\",\"new-tab-button\",\"alltabs-button\"],\"PersonalToolbar\":[\"import-button\",\"personal-bookmarks\"]},\"seen\":[\"save-to-pocket-button\",\"developer-button\",\"extension_one-tab_com-browser-action\"],\"dirtyAreaCache\":[\"nav-bar\",\"PersonalToolbar\",\"toolbar-menubar\",\"TabsToolbar\"],\"currentVersion\":18,\"newElementCount\":2}"); +user_pref("browser.urlbar.placeholderName", "Google"); +user_pref("browser.urlbar.quicksuggest.migrationVersion", 2); +user_pref("browser.urlbar.quicksuggest.scenario", "history"); +user_pref("datareporting.policy.dataSubmissionPolicyAcceptedVersion", 2); +user_pref("datareporting.policy.dataSubmissionPolicyNotifiedTime", "1673108821595"); +user_pref("distribution.iniFile.exists.appversion", "108.0.1"); +user_pref("distribution.iniFile.exists.value", false); +user_pref("doh-rollout.doneFirstRun", true); +user_pref("doh-rollout.home-region", "CO"); +user_pref("dom.push.userAgentID", "37bfa02c106544a2ba36bfd011e8fe28"); +user_pref("extensions.activeThemeID", "{fca6ebc5-a96d-40ef-8a83-8791d5919e15}"); +user_pref("extensions.blocklist.pingCountVersion", 0); +user_pref("extensions.databaseSchema", 35); +user_pref("extensions.getAddons.cache.lastUpdate", 1673122896); +user_pref("extensions.getAddons.databaseSchema", 6); +user_pref("extensions.lastAppBuildId", "20221221124347"); +user_pref("extensions.lastAppVersion", "108.0.1"); +user_pref("extensions.lastPlatformVersion", "108.0.1"); +user_pref("extensions.pendingOperations", false); +user_pref("extensions.pictureinpicture.enable_picture_in_picture_overrides", true); +user_pref("extensions.systemAddonSet", "{\"schema\":1,\"addons\":{}}"); +user_pref("extensions.ui.dictionary.hidden", true); +user_pref("extensions.ui.lastCategory", "addons://list/extension"); +user_pref("extensions.ui.locale.hidden", false); +user_pref("extensions.ui.sitepermission.hidden", true); +user_pref("extensions.ui.theme.hidden", false); +user_pref("extensions.webcompat.enable_shims", true); +user_pref("extensions.webcompat.perform_injections", true); +user_pref("extensions.webcompat.perform_ua_overrides", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.screenshots@mozilla.org", true); +user_pref("extensions.webextensions.uuids", "{\"formautofill@mozilla.org\":\"91e6b09c-6667-45f2-a39c-249f3083a497\",\"pictureinpicture@mozilla.org\":\"60f089b6-7fa7-4831-88f5-e2fe6eeb6b27\",\"screenshots@mozilla.org\":\"fc48d634-e128-4ff1-8f16-b5a90eaa2d98\",\"webcompat-reporter@mozilla.org\":\"e7833b82-2d95-43c5-9365-6a85a6b9ef3e\",\"webcompat@mozilla.org\":\"853a2da0-2fbe-4622-ade4-ea277234ba45\",\"default-theme@mozilla.org\":\"6766715b-8c38-48f7-aa95-e370c1b4507b\",\"addons-search-detection@mozilla.com\":\"5a213d99-ab82-46f4-854f-21c005046aa1\",\"google@search.mozilla.org\":\"83075699-9aa2-4b20-9bb8-7dae0303b185\",\"wikipedia@search.mozilla.org\":\"1380d658-0373-4005-83f5-f8d9a8a142cc\",\"bing@search.mozilla.org\":\"e8e0465d-bf72-457d-aa08-d691611500d9\",\"ddg@search.mozilla.org\":\"6ee641a2-62fc-49af-be34-19a4a84241a7\",\"mercadolibre@search.mozilla.org\":\"07e9aee6-2f6d-4a30-98a0-1e0cd7bd8b7c\",\"expressionist-balanced-colorway@mozilla.org\":\"33f81a9c-ad38-4b45-b417-848d1bd8eb63\",\"visionary-balanced-colorway@mozilla.org\":\"11eb404e-2db1-4e69-8141-8f460cdcfc06\",\"innovator-balanced-colorway@mozilla.org\":\"0e71c601-df99-44b0-8235-df58df127c1d\",\"{fca6ebc5-a96d-40ef-8a83-8791d5919e15}\":\"56808e7b-6b42-4803-b4d0-35f0050378d3\"}"); +user_pref("fission.experiment.max-origins.last-disqualified", 0); +user_pref("fission.experiment.max-origins.last-qualified", 1673107672); +user_pref("fission.experiment.max-origins.qualified", true); +user_pref("font.name.serif.x-western", "Hack NF"); +user_pref("font.size.variable.x-western", 10); +user_pref("gecko.handlerService.defaultHandlersVersion", 1); +user_pref("intl.locale.requested", "es-MX,en-US"); +user_pref("layout.css.prefers-color-scheme.content-override", 0); +user_pref("media.gmp-gmpopenh264.abi", "x86_64-gcc3"); +user_pref("media.gmp-gmpopenh264.lastDownload", 1673108971); +user_pref("media.gmp-gmpopenh264.lastInstallStart", 1673108970); +user_pref("media.gmp-gmpopenh264.lastUpdate", 1673108971); +user_pref("media.gmp-gmpopenh264.version", "1.8.1.2"); +user_pref("media.gmp-manager.buildID", "20221221124347"); +user_pref("media.gmp-manager.lastCheck", 1673108970); +user_pref("media.gmp.storage.version.observed", 1); +user_pref("network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation", true); +user_pref("pdfjs.enabledCache.state", true); +user_pref("pdfjs.migrationVersion", 2); +user_pref("pref.general.disable_button.default_browser", false); +user_pref("privacy.annotate_channels.strict_list.enabled", true); +user_pref("privacy.partition.network_state.ocsp_cache", true); +user_pref("privacy.query_stripping.enabled", true); +user_pref("privacy.query_stripping.enabled.pbmode", true); +user_pref("privacy.sanitize.pending", "[]"); +user_pref("privacy.trackingprotection.enabled", true); +user_pref("privacy.trackingprotection.socialtracking.enabled", true); +user_pref("security.sandbox.content.tempDirSuffix", "a1b5b3e0-3a69-44af-8757-93fe335121c1"); +user_pref("services.settings.blocklists.addons-bloomfilters.last_check", 1673108956); +user_pref("services.settings.blocklists.gfx.last_check", 1673108956); +user_pref("services.settings.clock_skew_seconds", 0); +user_pref("services.settings.last_etag", "\"1673103432964\""); +user_pref("services.settings.last_update_seconds", 1673108956); +user_pref("services.settings.main.addons-manager-settings.last_check", 1673108956); +user_pref("services.settings.main.anti-tracking-url-decoration.last_check", 1673108956); +user_pref("services.settings.main.cfr.last_check", 1673108956); +user_pref("services.settings.main.devtools-compatibility-browsers.last_check", 1673108956); +user_pref("services.settings.main.devtools-devices.last_check", 1673108956); +user_pref("services.settings.main.doh-config.last_check", 1673108956); +user_pref("services.settings.main.doh-providers.last_check", 1673108956); +user_pref("services.settings.main.hijack-blocklists.last_check", 1673108956); +user_pref("services.settings.main.language-dictionaries.last_check", 1673108956); +user_pref("services.settings.main.message-groups.last_check", 1673108956); +user_pref("services.settings.main.nimbus-desktop-experiments.last_check", 1673108956); +user_pref("services.settings.main.normandy-recipes-capabilities.last_check", 1673108956); +user_pref("services.settings.main.partitioning-exempt-urls.last_check", 1673108956); +user_pref("services.settings.main.password-recipes.last_check", 1673108956); +user_pref("services.settings.main.password-rules.last_check", 1673108956); +user_pref("services.settings.main.pioneer-study-addons-v1.last_check", 1673108956); +user_pref("services.settings.main.query-stripping.last_check", 1673108956); +user_pref("services.settings.main.search-config.last_check", 1673108956); +user_pref("services.settings.main.search-default-override-allowlist.last_check", 1673108956); +user_pref("services.settings.main.search-telemetry-v2.last_check", 1673108956); +user_pref("services.settings.main.sites-classification.last_check", 1673108956); +user_pref("services.settings.main.top-sites.last_check", 1673108956); +user_pref("services.settings.main.url-classifier-skip-urls.last_check", 1673108956); +user_pref("services.settings.main.websites-with-shared-credential-backends.last_check", 1673108956); +user_pref("services.settings.main.whats-new-panel.last_check", 1673108956); +user_pref("services.sync.clients.lastSync", "0"); +user_pref("services.sync.declinedEngines", ""); +user_pref("services.sync.globalScore", 0); +user_pref("services.sync.nextSync", 0); +user_pref("toolkit.startup.last_success", 1673122879); +user_pref("toolkit.telemetry.cachedClientID", "5e6cd0db-08f4-43ff-a9af-e78c6ef2f1ba"); +user_pref("toolkit.telemetry.pioneer-new-studies-available", true); +user_pref("toolkit.telemetry.previousBuildID", "20221221124347"); +user_pref("toolkit.telemetry.reportingpolicy.firstRun", false); +user_pref("trailhead.firstrun.didSeeAboutWelcome", true); diff --git a/home/.mozilla/firefox/alce0sf5.default-default/protections.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/protections.sqlite new file mode 100644 index 0000000..3eb3b25 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/protections.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/search.json.mozlz4 b/home/.mozilla/firefox/alce0sf5.default-default/search.json.mozlz4 new file mode 100644 index 0000000..f490f45 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/search.json.mozlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/serviceworker.txt b/home/.mozilla/firefox/alce0sf5.default-default/serviceworker.txt new file mode 100644 index 0000000..2025adb --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/serviceworker.txt @@ -0,0 +1,37 @@ +9 + +https://web.telegram.org/z/ +https://web.telegram.org/z/1367.633b2b8647e981b007e8.js +true +{2de701e8-e5c9-4875-8857-d3f0bc1e7389} +0 +1673119295323630 +1673119295346604 +1673119295181292 +0 +true +# + +https://www.gmx.es/ +https://www.gmx.es/sw.js +true +{b14ae35d-ef9d-4cd7-a77b-5ec952a31565} +0 +1673113957065569 +1673113957067093 +1673113952334673 +0 +true +# + +https://www.elespanol.com/indigitall/ +https://www.elespanol.com/indigitall/service-worker.js +false +{ea7425d3-dfd0-4224-8d1d-f0bc2a4b57c6} +0 +1673114706725887 +1673114706726641 +1673114705554934 +0 +true +# diff --git a/home/.mozilla/firefox/alce0sf5.default-default/sessionCheckpoints.json b/home/.mozilla/firefox/alce0sf5.default-default/sessionCheckpoints.json new file mode 100644 index 0000000..928de6a --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/sessionCheckpoints.json @@ -0,0 +1 @@ +{"profile-after-change":true,"final-ui-startup":true,"sessionstore-windows-restored":true,"quit-application-granted":true,"quit-application":true,"sessionstore-final-state-write-complete":true,"profile-change-net-teardown":true,"profile-change-teardown":true,"profile-before-change":true} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/sessionstore-backups/previous.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/sessionstore-backups/previous.jsonlz4 new file mode 100644 index 0000000..c82a898 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/sessionstore-backups/previous.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/sessionstore-backups/upgrade.jsonlz4-20221221124347 b/home/.mozilla/firefox/alce0sf5.default-default/sessionstore-backups/upgrade.jsonlz4-20221221124347 new file mode 100644 index 0000000..7a8abda Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/sessionstore-backups/upgrade.jsonlz4-20221221124347 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/sessionstore.jsonlz4 b/home/.mozilla/firefox/alce0sf5.default-default/sessionstore.jsonlz4 new file mode 100644 index 0000000..dda3a9c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/sessionstore.jsonlz4 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/settings/data.safe.bin b/home/.mozilla/firefox/alce0sf5.default-default/settings/data.safe.bin new file mode 100644 index 0000000..e7e054a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/settings/data.safe.bin differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/shield-preference-experiments.json b/home/.mozilla/firefox/alce0sf5.default-default/shield-preference-experiments.json new file mode 100644 index 0000000..3759a90 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/shield-preference-experiments.json @@ -0,0 +1 @@ +{"experiments":{}} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage.sqlite new file mode 100644 index 0000000..f8a7d34 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++accounts.google.com/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++accounts.google.com/.metadata-v2 new file mode 100644 index 0000000..e5b191b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++accounts.google.com/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++accounts.google.com/ls/data.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++accounts.google.com/ls/data.sqlite new file mode 100644 index 0000000..0439a0c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++accounts.google.com/ls/data.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++accounts.google.com/ls/usage b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++accounts.google.com/ls/usage new file mode 100644 index 0000000..1eb3be2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++accounts.google.com/ls/usage differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++addons.mozilla.org/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++addons.mozilla.org/.metadata-v2 new file mode 100644 index 0000000..310628e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++addons.mozilla.org/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++addons.mozilla.org/idb/1310459950addndeotnnso-rf.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++addons.mozilla.org/idb/1310459950addndeotnnso-rf.sqlite new file mode 100644 index 0000000..006bf2f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++addons.mozilla.org/idb/1310459950addndeotnnso-rf.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++codeberg.org/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++codeberg.org/.metadata-v2 new file mode 100644 index 0000000..0aa10bd Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++codeberg.org/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++codeberg.org/cache/.padding b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++codeberg.org/cache/.padding new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++codeberg.org/cache/.padding differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++codeberg.org/cache/caches.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++codeberg.org/cache/caches.sqlite new file mode 100644 index 0000000..374fc41 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++codeberg.org/cache/caches.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++dl.gmx.es/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++dl.gmx.es/.metadata-v2 new file mode 100644 index 0000000..b15ce17 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++dl.gmx.es/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++dl.gmx.es/ls/data.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++dl.gmx.es/ls/data.sqlite new file mode 100644 index 0000000..e9317b9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++dl.gmx.es/ls/data.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++dl.gmx.es/ls/usage b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++dl.gmx.es/ls/usage new file mode 100644 index 0000000..260cc4e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++dl.gmx.es/ls/usage differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/.metadata-v2 new file mode 100644 index 0000000..3d27725 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/4041069256GsoDoegvlierD.files/11 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/4041069256GsoDoegvlierD.files/11 new file mode 100644 index 0000000..02f2282 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/4041069256GsoDoegvlierD.files/11 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/4041069256GsoDoegvlierD.files/12 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/4041069256GsoDoegvlierD.files/12 new file mode 100644 index 0000000..bac1e46 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/4041069256GsoDoegvlierD.files/12 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/4041069256GsoDoegvlierD.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/4041069256GsoDoegvlierD.sqlite new file mode 100644 index 0000000..cac0876 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/4041069256GsoDoegvlierD.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/548905059db.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/548905059db.sqlite new file mode 100644 index 0000000..b36acab Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/idb/548905059db.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/ls/data.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/ls/data.sqlite new file mode 100644 index 0000000..b731905 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/ls/data.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/ls/usage b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/ls/usage new file mode 100644 index 0000000..7980b18 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++drive.google.com/ls/usage differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++itsfoss.com/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++itsfoss.com/.metadata-v2 new file mode 100644 index 0000000..10f690a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++itsfoss.com/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++itsfoss.com/ls/data.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++itsfoss.com/ls/data.sqlite new file mode 100644 index 0000000..c022c6f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++itsfoss.com/ls/data.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++itsfoss.com/ls/usage b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++itsfoss.com/ls/usage new file mode 100644 index 0000000..ad70266 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++itsfoss.com/ls/usage differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/.metadata-v2 new file mode 100644 index 0000000..b2bec0a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/.padding b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/.padding new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/.padding differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/caches.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/caches.sqlite new file mode 100644 index 0000000..f5f838c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/caches.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{293ecd48-f6b9-4baf-8eb1-64200fa90701}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{293ecd48-f6b9-4baf-8eb1-64200fa90701}.final new file mode 100644 index 0000000..154779c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{293ecd48-f6b9-4baf-8eb1-64200fa90701}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{478a1fb2-925e-46b0-8688-5d3d5d525c01}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{478a1fb2-925e-46b0-8688-5d3d5d525c01}.final new file mode 100644 index 0000000..648f391 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{478a1fb2-925e-46b0-8688-5d3d5d525c01}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{65c5c439-4900-4723-971f-c5b8efee5201}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{65c5c439-4900-4723-971f-c5b8efee5201}.final new file mode 100644 index 0000000..c3d2b6a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{65c5c439-4900-4723-971f-c5b8efee5201}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{add6d758-8748-4852-a7fb-91a70362d201}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{add6d758-8748-4852-a7fb-91a70362d201}.final new file mode 100644 index 0000000..281b6d4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/1/{add6d758-8748-4852-a7fb-91a70362d201}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{2a4ee669-98fa-446e-86e6-23759ad5250a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{2a4ee669-98fa-446e-86e6-23759ad5250a}.final new file mode 100644 index 0000000..517c247 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{2a4ee669-98fa-446e-86e6-23759ad5250a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{50ac3f83-b1ed-45c7-b643-41c2a138400a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{50ac3f83-b1ed-45c7-b643-41c2a138400a}.final new file mode 100644 index 0000000..4a30b6c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{50ac3f83-b1ed-45c7-b643-41c2a138400a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{b3a97ddf-39c0-418c-87c8-227937a2500a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{b3a97ddf-39c0-418c-87c8-227937a2500a}.final new file mode 100644 index 0000000..6665a93 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{b3a97ddf-39c0-418c-87c8-227937a2500a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{ca011ddc-d63f-4a89-8058-4c0c9ef81f0a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{ca011ddc-d63f-4a89-8058-4c0c9ef81f0a}.final new file mode 100644 index 0000000..7c1198f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/10/{ca011ddc-d63f-4a89-8058-4c0c9ef81f0a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/100/{9e3c6f10-0f1b-4b97-8a1c-1e43391c5064}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/100/{9e3c6f10-0f1b-4b97-8a1c-1e43391c5064}.final new file mode 100644 index 0000000..c5e1b97 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/100/{9e3c6f10-0f1b-4b97-8a1c-1e43391c5064}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/100/{d3127840-e48a-45b7-a6b8-79518dac4864}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/100/{d3127840-e48a-45b7-a6b8-79518dac4864}.final new file mode 100644 index 0000000..0c449c3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/100/{d3127840-e48a-45b7-a6b8-79518dac4864}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/101/{23589029-0002-468b-9154-178185539a65}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/101/{23589029-0002-468b-9154-178185539a65}.final new file mode 100644 index 0000000..b93ce69 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/101/{23589029-0002-468b-9154-178185539a65}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/101/{c06b21d3-2ac3-441e-9cdb-0c67a6b86065}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/101/{c06b21d3-2ac3-441e-9cdb-0c67a6b86065}.final new file mode 100644 index 0000000..def6f31 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/101/{c06b21d3-2ac3-441e-9cdb-0c67a6b86065}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/101/{fedc45a8-fbe1-4f6b-bb39-04f942b27265}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/101/{fedc45a8-fbe1-4f6b-bb39-04f942b27265}.final new file mode 100644 index 0000000..095e2e9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/101/{fedc45a8-fbe1-4f6b-bb39-04f942b27265}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{6cd90877-c7f7-40df-832b-9bdecba60466}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{6cd90877-c7f7-40df-832b-9bdecba60466}.final new file mode 100644 index 0000000..f72138f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{6cd90877-c7f7-40df-832b-9bdecba60466}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{94893d4b-3fd5-4a05-b6b9-c43c72550866}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{94893d4b-3fd5-4a05-b6b9-c43c72550866}.final new file mode 100644 index 0000000..5215428 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{94893d4b-3fd5-4a05-b6b9-c43c72550866}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{c78a7594-67f4-4122-ae3e-3caf5dc88b66}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{c78a7594-67f4-4122-ae3e-3caf5dc88b66}.final new file mode 100644 index 0000000..5ef3033 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{c78a7594-67f4-4122-ae3e-3caf5dc88b66}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{e27e71d6-2d1c-4fb1-8f8d-f9908f78b766}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{e27e71d6-2d1c-4fb1-8f8d-f9908f78b766}.final new file mode 100644 index 0000000..33f5995 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/102/{e27e71d6-2d1c-4fb1-8f8d-f9908f78b766}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/103/{20e7eb1f-10a5-4b42-a0fe-b05656344067}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/103/{20e7eb1f-10a5-4b42-a0fe-b05656344067}.final new file mode 100644 index 0000000..9b39899 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/103/{20e7eb1f-10a5-4b42-a0fe-b05656344067}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/103/{2911317a-d31c-481b-8019-b835d0d46c67}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/103/{2911317a-d31c-481b-8019-b835d0d46c67}.final new file mode 100644 index 0000000..9e73658 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/103/{2911317a-d31c-481b-8019-b835d0d46c67}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/103/{2ef98cb2-4c2e-49f9-9dcc-61e195c27a67}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/103/{2ef98cb2-4c2e-49f9-9dcc-61e195c27a67}.final new file mode 100644 index 0000000..df8ca1d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/103/{2ef98cb2-4c2e-49f9-9dcc-61e195c27a67}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/104/{81b7dd4d-c94a-4cc8-b79c-ec8b29597468}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/104/{81b7dd4d-c94a-4cc8-b79c-ec8b29597468}.final new file mode 100644 index 0000000..934a291 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/104/{81b7dd4d-c94a-4cc8-b79c-ec8b29597468}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/104/{e97b5b3b-abc4-4ef6-9299-7835cc9a7768}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/104/{e97b5b3b-abc4-4ef6-9299-7835cc9a7768}.final new file mode 100644 index 0000000..bcac8b6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/104/{e97b5b3b-abc4-4ef6-9299-7835cc9a7768}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/105/{3faa9338-53a0-4769-9c06-cbfb81dd6c69}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/105/{3faa9338-53a0-4769-9c06-cbfb81dd6c69}.final new file mode 100644 index 0000000..3ea5762 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/105/{3faa9338-53a0-4769-9c06-cbfb81dd6c69}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/105/{9f4e328f-625d-4698-8c4d-d9169bd3bc69}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/105/{9f4e328f-625d-4698-8c4d-d9169bd3bc69}.final new file mode 100644 index 0000000..7f32c58 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/105/{9f4e328f-625d-4698-8c4d-d9169bd3bc69}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/107/{5f497862-25c2-48d0-9375-4a4360e6ce6b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/107/{5f497862-25c2-48d0-9375-4a4360e6ce6b}.final new file mode 100644 index 0000000..991afa7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/107/{5f497862-25c2-48d0-9375-4a4360e6ce6b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/107/{929ed205-bb27-4d07-8e26-b1779be53b6b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/107/{929ed205-bb27-4d07-8e26-b1779be53b6b}.final new file mode 100644 index 0000000..f4c17fb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/107/{929ed205-bb27-4d07-8e26-b1779be53b6b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/107/{95b96afd-3177-47d5-a2c8-88d20ebc6a6b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/107/{95b96afd-3177-47d5-a2c8-88d20ebc6a6b}.final new file mode 100644 index 0000000..eac6bab Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/107/{95b96afd-3177-47d5-a2c8-88d20ebc6a6b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/108/{0ff1d73f-76b1-4b27-bcae-634d89dce26c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/108/{0ff1d73f-76b1-4b27-bcae-634d89dce26c}.final new file mode 100644 index 0000000..443e8bc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/108/{0ff1d73f-76b1-4b27-bcae-634d89dce26c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/108/{ead9f8bf-289e-41aa-9e97-cd89461a6e6c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/108/{ead9f8bf-289e-41aa-9e97-cd89461a6e6c}.final new file mode 100644 index 0000000..09f442e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/108/{ead9f8bf-289e-41aa-9e97-cd89461a6e6c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/109/{2754ed61-5c0b-498f-ac4d-e09f594de66d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/109/{2754ed61-5c0b-498f-ac4d-e09f594de66d}.final new file mode 100644 index 0000000..f3e5a73 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/109/{2754ed61-5c0b-498f-ac4d-e09f594de66d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/109/{a4a6f11b-74b5-4288-8d6c-7673991f6b6d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/109/{a4a6f11b-74b5-4288-8d6c-7673991f6b6d}.final new file mode 100644 index 0000000..eadb74a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/109/{a4a6f11b-74b5-4288-8d6c-7673991f6b6d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/109/{a7261f00-be5d-49ce-b4a7-8ac2f0a6b66d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/109/{a7261f00-be5d-49ce-b4a7-8ac2f0a6b66d}.final new file mode 100644 index 0000000..23773fd Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/109/{a7261f00-be5d-49ce-b4a7-8ac2f0a6b66d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/11/{276edf59-6d9d-4e0b-afc7-2801fe6e0c0b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/11/{276edf59-6d9d-4e0b-afc7-2801fe6e0c0b}.final new file mode 100644 index 0000000..3b804bc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/11/{276edf59-6d9d-4e0b-afc7-2801fe6e0c0b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/11/{c506d59d-769e-46bc-b24c-8a289315d20b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/11/{c506d59d-769e-46bc-b24c-8a289315d20b}.final new file mode 100644 index 0000000..606ccb7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/11/{c506d59d-769e-46bc-b24c-8a289315d20b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/11/{ec370bac-1054-4eeb-ac5a-ad9208ab330b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/11/{ec370bac-1054-4eeb-ac5a-ad9208ab330b}.final new file mode 100644 index 0000000..92e6703 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/11/{ec370bac-1054-4eeb-ac5a-ad9208ab330b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/110/{de8533bb-8a2c-4a8d-b369-c2fedc16f16e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/110/{de8533bb-8a2c-4a8d-b369-c2fedc16f16e}.final new file mode 100644 index 0000000..384726d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/110/{de8533bb-8a2c-4a8d-b369-c2fedc16f16e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/111/{8207898b-b816-4172-a615-352675b2876f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/111/{8207898b-b816-4172-a615-352675b2876f}.final new file mode 100644 index 0000000..6ac5a41 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/111/{8207898b-b816-4172-a615-352675b2876f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/111/{adfae97c-cf59-4e4d-8f52-865d2943086f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/111/{adfae97c-cf59-4e4d-8f52-865d2943086f}.final new file mode 100644 index 0000000..62386ef Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/111/{adfae97c-cf59-4e4d-8f52-865d2943086f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/112/{5748c452-ec7e-49b2-bacb-753a1554e270}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/112/{5748c452-ec7e-49b2-bacb-753a1554e270}.final new file mode 100644 index 0000000..48b2c8a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/112/{5748c452-ec7e-49b2-bacb-753a1554e270}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/112/{f8f49031-c7ca-407d-ab80-ee8a148e2d70}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/112/{f8f49031-c7ca-407d-ab80-ee8a148e2d70}.final new file mode 100644 index 0000000..ef7b46a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/112/{f8f49031-c7ca-407d-ab80-ee8a148e2d70}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{8cbab021-9217-4367-825e-eb4273ce8171}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{8cbab021-9217-4367-825e-eb4273ce8171}.final new file mode 100644 index 0000000..29b8558 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{8cbab021-9217-4367-825e-eb4273ce8171}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{8e795a16-d4be-48cf-ad67-7247a7141a71}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{8e795a16-d4be-48cf-ad67-7247a7141a71}.final new file mode 100644 index 0000000..0ffd1d6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{8e795a16-d4be-48cf-ad67-7247a7141a71}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{a9c5f590-801b-472f-aee3-2dc7f21f9c71}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{a9c5f590-801b-472f-aee3-2dc7f21f9c71}.final new file mode 100644 index 0000000..bdc9327 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{a9c5f590-801b-472f-aee3-2dc7f21f9c71}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{c6b3d239-d145-473d-879b-53e9c3aea171}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{c6b3d239-d145-473d-879b-53e9c3aea171}.final new file mode 100644 index 0000000..533c4a6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/113/{c6b3d239-d145-473d-879b-53e9c3aea171}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/116/{283d2e0f-58e1-46c7-8ead-1cd012a0bb74}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/116/{283d2e0f-58e1-46c7-8ead-1cd012a0bb74}.final new file mode 100644 index 0000000..0444a4e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/116/{283d2e0f-58e1-46c7-8ead-1cd012a0bb74}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/116/{81ece7ee-55f9-4230-91f6-f1a3be042474}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/116/{81ece7ee-55f9-4230-91f6-f1a3be042474}.final new file mode 100644 index 0000000..7b8c87c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/116/{81ece7ee-55f9-4230-91f6-f1a3be042474}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/117/{eb7f1770-4f85-456e-80d8-5e5d41649b75}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/117/{eb7f1770-4f85-456e-80d8-5e5d41649b75}.final new file mode 100644 index 0000000..b494ecc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/117/{eb7f1770-4f85-456e-80d8-5e5d41649b75}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/118/{2b099cea-e2b7-45b6-ab88-d27b152be576}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/118/{2b099cea-e2b7-45b6-ab88-d27b152be576}.final new file mode 100644 index 0000000..1d8dfe2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/118/{2b099cea-e2b7-45b6-ab88-d27b152be576}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/119/{45f9ece5-7a69-402b-bfcc-09a47fd32677}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/119/{45f9ece5-7a69-402b-bfcc-09a47fd32677}.final new file mode 100644 index 0000000..5eeee3e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/119/{45f9ece5-7a69-402b-bfcc-09a47fd32677}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/12/{0a12007d-800f-43c8-b7a9-0efeeef5940c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/12/{0a12007d-800f-43c8-b7a9-0efeeef5940c}.final new file mode 100644 index 0000000..295aaf9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/12/{0a12007d-800f-43c8-b7a9-0efeeef5940c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/120/{eafb8868-6e10-427f-b344-8507d440b178}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/120/{eafb8868-6e10-427f-b344-8507d440b178}.final new file mode 100644 index 0000000..ce380f3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/120/{eafb8868-6e10-427f-b344-8507d440b178}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/123/{236a746a-f4b4-491b-913a-7922f187367b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/123/{236a746a-f4b4-491b-913a-7922f187367b}.final new file mode 100644 index 0000000..e22a537 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/123/{236a746a-f4b4-491b-913a-7922f187367b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/124/{b9f66edd-b85c-4412-82c1-b0c694b3a57c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/124/{b9f66edd-b85c-4412-82c1-b0c694b3a57c}.final new file mode 100644 index 0000000..3ab3c61 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/124/{b9f66edd-b85c-4412-82c1-b0c694b3a57c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/125/{4a6f4a47-10e4-47b3-954c-a9b38e5c4c7d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/125/{4a6f4a47-10e4-47b3-954c-a9b38e5c4c7d}.final new file mode 100644 index 0000000..4ec9b3f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/125/{4a6f4a47-10e4-47b3-954c-a9b38e5c4c7d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/125/{b2ec2c6c-c858-4b53-9c47-60066419ce7d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/125/{b2ec2c6c-c858-4b53-9c47-60066419ce7d}.final new file mode 100644 index 0000000..f015c6c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/125/{b2ec2c6c-c858-4b53-9c47-60066419ce7d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/125/{f79a1e22-b246-4674-81f2-ca03cc46a07d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/125/{f79a1e22-b246-4674-81f2-ca03cc46a07d}.final new file mode 100644 index 0000000..008a2ed Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/125/{f79a1e22-b246-4674-81f2-ca03cc46a07d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/126/{f1b00096-352e-43cd-830d-378ea590447e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/126/{f1b00096-352e-43cd-830d-378ea590447e}.final new file mode 100644 index 0000000..bd319e6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/126/{f1b00096-352e-43cd-830d-378ea590447e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/127/{6df5c487-260f-4dfb-a851-60dff489c77f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/127/{6df5c487-260f-4dfb-a851-60dff489c77f}.final new file mode 100644 index 0000000..1d54dd8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/127/{6df5c487-260f-4dfb-a851-60dff489c77f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/127/{f0cd57fa-1b7d-4545-bf6f-a990289cad7f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/127/{f0cd57fa-1b7d-4545-bf6f-a990289cad7f}.final new file mode 100644 index 0000000..3993a2d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/127/{f0cd57fa-1b7d-4545-bf6f-a990289cad7f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/127/{ffc0ebb9-f330-4cd0-9584-b1933e440c7f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/127/{ffc0ebb9-f330-4cd0-9584-b1933e440c7f}.final new file mode 100644 index 0000000..15b4335 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/127/{ffc0ebb9-f330-4cd0-9584-b1933e440c7f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/129/{09d750bd-3518-4a1c-b7f1-4b9a067e4081}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/129/{09d750bd-3518-4a1c-b7f1-4b9a067e4081}.final new file mode 100644 index 0000000..7d65a30 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/129/{09d750bd-3518-4a1c-b7f1-4b9a067e4081}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/129/{1bbc8e45-8557-4c67-93d4-a5ffaee01781}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/129/{1bbc8e45-8557-4c67-93d4-a5ffaee01781}.final new file mode 100644 index 0000000..e203cde Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/129/{1bbc8e45-8557-4c67-93d4-a5ffaee01781}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/129/{d570b5da-e82c-489c-ad37-a009b1abbc81}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/129/{d570b5da-e82c-489c-ad37-a009b1abbc81}.final new file mode 100644 index 0000000..b012dd8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/129/{d570b5da-e82c-489c-ad37-a009b1abbc81}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/13/{6cb4b021-1d8d-425b-849c-738ceb18950d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/13/{6cb4b021-1d8d-425b-849c-738ceb18950d}.final new file mode 100644 index 0000000..13acdb8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/13/{6cb4b021-1d8d-425b-849c-738ceb18950d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/13/{f3b833bf-47b5-41e3-b6fc-fdc45f48960d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/13/{f3b833bf-47b5-41e3-b6fc-fdc45f48960d}.final new file mode 100644 index 0000000..f5fd7f0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/13/{f3b833bf-47b5-41e3-b6fc-fdc45f48960d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/130/{0bc46ff8-6b3a-4ad1-8d78-92a52144cb82}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/130/{0bc46ff8-6b3a-4ad1-8d78-92a52144cb82}.final new file mode 100644 index 0000000..154236d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/130/{0bc46ff8-6b3a-4ad1-8d78-92a52144cb82}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/130/{767e0ca5-698a-4243-8bea-11f3bf64e082}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/130/{767e0ca5-698a-4243-8bea-11f3bf64e082}.final new file mode 100644 index 0000000..1c0d5f3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/130/{767e0ca5-698a-4243-8bea-11f3bf64e082}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/130/{a18dd0c8-8cb0-4b82-9ece-ccc35ef80082}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/130/{a18dd0c8-8cb0-4b82-9ece-ccc35ef80082}.final new file mode 100644 index 0000000..98f1a8d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/130/{a18dd0c8-8cb0-4b82-9ece-ccc35ef80082}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/132/{91e40f44-b7c6-4eaf-aff1-8d98826d0884}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/132/{91e40f44-b7c6-4eaf-aff1-8d98826d0884}.final new file mode 100644 index 0000000..d8ae11e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/132/{91e40f44-b7c6-4eaf-aff1-8d98826d0884}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/133/{033a06c9-6211-4779-bc51-5ce4cbff7c85}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/133/{033a06c9-6211-4779-bc51-5ce4cbff7c85}.final new file mode 100644 index 0000000..0d93718 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/133/{033a06c9-6211-4779-bc51-5ce4cbff7c85}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/133/{b76879d0-c5b2-43b2-8b97-3d117e25d285}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/133/{b76879d0-c5b2-43b2-8b97-3d117e25d285}.final new file mode 100644 index 0000000..278fdad Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/133/{b76879d0-c5b2-43b2-8b97-3d117e25d285}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/133/{c7382975-28d5-4d50-b868-06fa369a7c85}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/133/{c7382975-28d5-4d50-b868-06fa369a7c85}.final new file mode 100644 index 0000000..4fc0f31 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/133/{c7382975-28d5-4d50-b868-06fa369a7c85}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{08aa6fa9-f4a5-4b4e-a544-619ad472fe86}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{08aa6fa9-f4a5-4b4e-a544-619ad472fe86}.final new file mode 100644 index 0000000..4e6dbc4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{08aa6fa9-f4a5-4b4e-a544-619ad472fe86}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{526de6ba-8cfb-4f2f-8d34-4cbbfad37786}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{526de6ba-8cfb-4f2f-8d34-4cbbfad37786}.final new file mode 100644 index 0000000..a4ecf89 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{526de6ba-8cfb-4f2f-8d34-4cbbfad37786}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{6e7dc09f-1d4b-40bd-b25f-be94d682ad86}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{6e7dc09f-1d4b-40bd-b25f-be94d682ad86}.final new file mode 100644 index 0000000..034a4f3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{6e7dc09f-1d4b-40bd-b25f-be94d682ad86}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{7c348f2c-d7e4-4870-95ae-069d66cae186}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{7c348f2c-d7e4-4870-95ae-069d66cae186}.final new file mode 100644 index 0000000..f3e5a73 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{7c348f2c-d7e4-4870-95ae-069d66cae186}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{f5747092-7d19-4330-b793-b33d9e5ef286}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{f5747092-7d19-4330-b793-b33d9e5ef286}.final new file mode 100644 index 0000000..68263ec Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/134/{f5747092-7d19-4330-b793-b33d9e5ef286}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/135/{3c264089-054d-42cc-9417-c93adbaee687}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/135/{3c264089-054d-42cc-9417-c93adbaee687}.final new file mode 100644 index 0000000..4837b93 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/135/{3c264089-054d-42cc-9417-c93adbaee687}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/135/{65c13a27-af6f-45e7-8c4a-09ee0e382187}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/135/{65c13a27-af6f-45e7-8c4a-09ee0e382187}.final new file mode 100644 index 0000000..37b82a4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/135/{65c13a27-af6f-45e7-8c4a-09ee0e382187}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/135/{862e88d7-e03e-4c2f-84e7-1e31cb70fa87}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/135/{862e88d7-e03e-4c2f-84e7-1e31cb70fa87}.final new file mode 100644 index 0000000..2951d2c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/135/{862e88d7-e03e-4c2f-84e7-1e31cb70fa87}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/136/{6eec5843-8819-4605-8965-e1edb2f32f88}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/136/{6eec5843-8819-4605-8965-e1edb2f32f88}.final new file mode 100644 index 0000000..fedd6b9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/136/{6eec5843-8819-4605-8965-e1edb2f32f88}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/137/{3b736a80-8df6-42c9-98a1-cbb97fbbb189}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/137/{3b736a80-8df6-42c9-98a1-cbb97fbbb189}.final new file mode 100644 index 0000000..fa2f294 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/137/{3b736a80-8df6-42c9-98a1-cbb97fbbb189}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/137/{b048c8eb-3daa-4906-82bb-85a518805d89}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/137/{b048c8eb-3daa-4906-82bb-85a518805d89}.final new file mode 100644 index 0000000..0ffd1d6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/137/{b048c8eb-3daa-4906-82bb-85a518805d89}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/137/{b4f9c4af-4ae9-426c-bfe0-de2b84617f89}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/137/{b4f9c4af-4ae9-426c-bfe0-de2b84617f89}.final new file mode 100644 index 0000000..60886e7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/137/{b4f9c4af-4ae9-426c-bfe0-de2b84617f89}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/138/{cd0ccfea-dc4b-4fd9-bdaf-1c09b50a478a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/138/{cd0ccfea-dc4b-4fd9-bdaf-1c09b50a478a}.final new file mode 100644 index 0000000..32cec66 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/138/{cd0ccfea-dc4b-4fd9-bdaf-1c09b50a478a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/139/{59e19b4d-0d4f-464c-8649-d502f898fd8b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/139/{59e19b4d-0d4f-464c-8649-d502f898fd8b}.final new file mode 100644 index 0000000..9689815 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/139/{59e19b4d-0d4f-464c-8649-d502f898fd8b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/139/{ebec04f4-da60-4361-90d6-a6d8eb09588b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/139/{ebec04f4-da60-4361-90d6-a6d8eb09588b}.final new file mode 100644 index 0000000..2a4058f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/139/{ebec04f4-da60-4361-90d6-a6d8eb09588b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/14/{fe950193-ac93-4578-99e2-930e2ab8950e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/14/{fe950193-ac93-4578-99e2-930e2ab8950e}.final new file mode 100644 index 0000000..34f443e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/14/{fe950193-ac93-4578-99e2-930e2ab8950e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/140/{89305692-b8c4-4180-a8a1-973dd059f18c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/140/{89305692-b8c4-4180-a8a1-973dd059f18c}.final new file mode 100644 index 0000000..01824a3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/140/{89305692-b8c4-4180-a8a1-973dd059f18c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/140/{b9fc45aa-6707-46ec-b767-44d153416d8c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/140/{b9fc45aa-6707-46ec-b767-44d153416d8c}.final new file mode 100644 index 0000000..8edcaeb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/140/{b9fc45aa-6707-46ec-b767-44d153416d8c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/140/{c353598e-1727-4dd8-831e-d09826b3798c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/140/{c353598e-1727-4dd8-831e-d09826b3798c}.final new file mode 100644 index 0000000..a4bf1a4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/140/{c353598e-1727-4dd8-831e-d09826b3798c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/141/{02f89733-799e-4144-b5fe-69d94cebb68d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/141/{02f89733-799e-4144-b5fe-69d94cebb68d}.final new file mode 100644 index 0000000..94fed01 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/141/{02f89733-799e-4144-b5fe-69d94cebb68d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/141/{d21dc077-d05e-401d-a2f7-2b0f6c0f0b8d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/141/{d21dc077-d05e-401d-a2f7-2b0f6c0f0b8d}.final new file mode 100644 index 0000000..75d998f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/141/{d21dc077-d05e-401d-a2f7-2b0f6c0f0b8d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/141/{fa9515d5-7208-4659-a3d0-f50a5ada718d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/141/{fa9515d5-7208-4659-a3d0-f50a5ada718d}.final new file mode 100644 index 0000000..82b88ce Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/141/{fa9515d5-7208-4659-a3d0-f50a5ada718d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/142/{3743bb9b-ed22-42c1-a1d5-5ade114e798e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/142/{3743bb9b-ed22-42c1-a1d5-5ade114e798e}.final new file mode 100644 index 0000000..edb3a2b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/142/{3743bb9b-ed22-42c1-a1d5-5ade114e798e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/143/{59a208b8-0764-4c98-986f-65343623698f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/143/{59a208b8-0764-4c98-986f-65343623698f}.final new file mode 100644 index 0000000..72d14fb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/143/{59a208b8-0764-4c98-986f-65343623698f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/143/{622b94e6-d3f4-4373-af29-a78a3580e28f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/143/{622b94e6-d3f4-4373-af29-a78a3580e28f}.final new file mode 100644 index 0000000..a004e60 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/143/{622b94e6-d3f4-4373-af29-a78a3580e28f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/143/{a341d480-a10c-4e73-bcab-64f404861e8f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/143/{a341d480-a10c-4e73-bcab-64f404861e8f}.final new file mode 100644 index 0000000..c916f7f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/143/{a341d480-a10c-4e73-bcab-64f404861e8f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/144/{e2774c38-7994-42e7-bbf9-ce54a42afb90}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/144/{e2774c38-7994-42e7-bbf9-ce54a42afb90}.final new file mode 100644 index 0000000..1cf2259 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/144/{e2774c38-7994-42e7-bbf9-ce54a42afb90}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/145/{65871458-ba4c-4b30-a595-2d5ba5516691}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/145/{65871458-ba4c-4b30-a595-2d5ba5516691}.final new file mode 100644 index 0000000..503ff13 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/145/{65871458-ba4c-4b30-a595-2d5ba5516691}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/145/{cc63d620-e741-47b4-84ae-c5a6730fe091}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/145/{cc63d620-e741-47b4-84ae-c5a6730fe091}.final new file mode 100644 index 0000000..b7591cc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/145/{cc63d620-e741-47b4-84ae-c5a6730fe091}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/146/{1aa9d59e-f80b-459f-8d95-e37012d06b92}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/146/{1aa9d59e-f80b-459f-8d95-e37012d06b92}.final new file mode 100644 index 0000000..f056215 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/146/{1aa9d59e-f80b-459f-8d95-e37012d06b92}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/146/{bab2323e-1eb9-4a35-a80f-a08ceb1edd92}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/146/{bab2323e-1eb9-4a35-a80f-a08ceb1edd92}.final new file mode 100644 index 0000000..be91a8d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/146/{bab2323e-1eb9-4a35-a80f-a08ceb1edd92}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/147/{3e86f754-822e-48ca-94f9-ae3b665f3e93}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/147/{3e86f754-822e-48ca-94f9-ae3b665f3e93}.final new file mode 100644 index 0000000..2cc5ba2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/147/{3e86f754-822e-48ca-94f9-ae3b665f3e93}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/148/{4ccddee8-cde3-4a48-84f4-2fad119d1394}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/148/{4ccddee8-cde3-4a48-84f4-2fad119d1394}.final new file mode 100644 index 0000000..c26bcda Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/148/{4ccddee8-cde3-4a48-84f4-2fad119d1394}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/148/{7b535dc6-ca2f-4aa1-ab2a-af21a940ab94}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/148/{7b535dc6-ca2f-4aa1-ab2a-af21a940ab94}.final new file mode 100644 index 0000000..dedd53b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/148/{7b535dc6-ca2f-4aa1-ab2a-af21a940ab94}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{34733965-7bae-49dc-8d7a-635c0e8ffb95}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{34733965-7bae-49dc-8d7a-635c0e8ffb95}.final new file mode 100644 index 0000000..1dce95b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{34733965-7bae-49dc-8d7a-635c0e8ffb95}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{3623ad34-2764-4279-ae7f-8eed7775f695}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{3623ad34-2764-4279-ae7f-8eed7775f695}.final new file mode 100644 index 0000000..63a1ee8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{3623ad34-2764-4279-ae7f-8eed7775f695}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{6e5072fc-5d9c-43fe-9929-62cdf1c07495}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{6e5072fc-5d9c-43fe-9929-62cdf1c07495}.final new file mode 100644 index 0000000..d25f420 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{6e5072fc-5d9c-43fe-9929-62cdf1c07495}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{bce21e53-2e59-4115-be84-63b2800a5695}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{bce21e53-2e59-4115-be84-63b2800a5695}.final new file mode 100644 index 0000000..6d5c021 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{bce21e53-2e59-4115-be84-63b2800a5695}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{d28ce31b-38a7-4830-8e98-2a81182ce795}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{d28ce31b-38a7-4830-8e98-2a81182ce795}.final new file mode 100644 index 0000000..5fd72f1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{d28ce31b-38a7-4830-8e98-2a81182ce795}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{d6a90568-a39a-4b8a-ad91-883a80cc6695}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{d6a90568-a39a-4b8a-ad91-883a80cc6695}.final new file mode 100644 index 0000000..80b99e1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/149/{d6a90568-a39a-4b8a-ad91-883a80cc6695}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/150/{5c2cd535-fc68-4a9f-b4c7-60f0a80e1a96}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/150/{5c2cd535-fc68-4a9f-b4c7-60f0a80e1a96}.final new file mode 100644 index 0000000..ae60650 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/150/{5c2cd535-fc68-4a9f-b4c7-60f0a80e1a96}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/150/{d1f7a7ab-5d2c-4b6c-9542-435d60201496}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/150/{d1f7a7ab-5d2c-4b6c-9542-435d60201496}.final new file mode 100644 index 0000000..7cbbeb8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/150/{d1f7a7ab-5d2c-4b6c-9542-435d60201496}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/151/{3f6490bc-4f1f-49bd-b125-c613618cee97}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/151/{3f6490bc-4f1f-49bd-b125-c613618cee97}.final new file mode 100644 index 0000000..d62eec0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/151/{3f6490bc-4f1f-49bd-b125-c613618cee97}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/151/{a720d29d-0df2-495e-8ac0-c49b4e0f5197}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/151/{a720d29d-0df2-495e-8ac0-c49b4e0f5197}.final new file mode 100644 index 0000000..8d54210 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/151/{a720d29d-0df2-495e-8ac0-c49b4e0f5197}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/151/{e81feab3-5e4a-4b95-9f3a-dc0a0d034a97}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/151/{e81feab3-5e4a-4b95-9f3a-dc0a0d034a97}.final new file mode 100644 index 0000000..8fccde2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/151/{e81feab3-5e4a-4b95-9f3a-dc0a0d034a97}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{1cf2937b-0c20-4758-a8b4-2f409c3ae598}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{1cf2937b-0c20-4758-a8b4-2f409c3ae598}.final new file mode 100644 index 0000000..815554b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{1cf2937b-0c20-4758-a8b4-2f409c3ae598}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{2cda166c-3d1d-4036-9bcc-7f932cb42998}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{2cda166c-3d1d-4036-9bcc-7f932cb42998}.final new file mode 100644 index 0000000..bbbc367 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{2cda166c-3d1d-4036-9bcc-7f932cb42998}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{59e2f746-0ab7-43ba-997a-501a311d3b98}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{59e2f746-0ab7-43ba-997a-501a311d3b98}.final new file mode 100644 index 0000000..dcff88f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{59e2f746-0ab7-43ba-997a-501a311d3b98}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{a634b9b4-c1d6-4bd9-a157-2b96093a0498}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{a634b9b4-c1d6-4bd9-a157-2b96093a0498}.final new file mode 100644 index 0000000..198a6fc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/152/{a634b9b4-c1d6-4bd9-a157-2b96093a0498}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/153/{982022af-be3e-43fb-af0c-e5282587d899}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/153/{982022af-be3e-43fb-af0c-e5282587d899}.final new file mode 100644 index 0000000..47948d1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/153/{982022af-be3e-43fb-af0c-e5282587d899}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/153/{fb016f14-3435-44b2-9db6-9c833476e199}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/153/{fb016f14-3435-44b2-9db6-9c833476e199}.final new file mode 100644 index 0000000..c9903b0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/153/{fb016f14-3435-44b2-9db6-9c833476e199}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/155/{5cab33fc-6d82-48d8-bf86-b9e3bf35709b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/155/{5cab33fc-6d82-48d8-bf86-b9e3bf35709b}.final new file mode 100644 index 0000000..bba5006 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/155/{5cab33fc-6d82-48d8-bf86-b9e3bf35709b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/155/{60b065a9-e03a-47ff-af27-71dfa26c6f9b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/155/{60b065a9-e03a-47ff-af27-71dfa26c6f9b}.final new file mode 100644 index 0000000..9b57ed7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/155/{60b065a9-e03a-47ff-af27-71dfa26c6f9b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/156/{4903b478-269b-4d5c-9f97-7b2727e4579c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/156/{4903b478-269b-4d5c-9f97-7b2727e4579c}.final new file mode 100644 index 0000000..959dfd2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/156/{4903b478-269b-4d5c-9f97-7b2727e4579c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/156/{87fa524e-bf28-4ac4-9f26-880994383c9c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/156/{87fa524e-bf28-4ac4-9f26-880994383c9c}.final new file mode 100644 index 0000000..8ca3781 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/156/{87fa524e-bf28-4ac4-9f26-880994383c9c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/157/{339727b8-442d-414f-8da6-9a47a0941e9d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/157/{339727b8-442d-414f-8da6-9a47a0941e9d}.final new file mode 100644 index 0000000..ffc1f12 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/157/{339727b8-442d-414f-8da6-9a47a0941e9d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/157/{b9bdd735-8755-4341-828b-5004bfd6a79d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/157/{b9bdd735-8755-4341-828b-5004bfd6a79d}.final new file mode 100644 index 0000000..131a3e8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/157/{b9bdd735-8755-4341-828b-5004bfd6a79d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/157/{eb347a68-988c-4172-bbfc-44c844955b9d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/157/{eb347a68-988c-4172-bbfc-44c844955b9d}.final new file mode 100644 index 0000000..8c6341e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/157/{eb347a68-988c-4172-bbfc-44c844955b9d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/158/{25b8b97a-3910-4fef-bd68-df5c0543ed9e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/158/{25b8b97a-3910-4fef-bd68-df5c0543ed9e}.final new file mode 100644 index 0000000..c92af3c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/158/{25b8b97a-3910-4fef-bd68-df5c0543ed9e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/158/{8e190947-08dc-4085-878f-cad86230d79e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/158/{8e190947-08dc-4085-878f-cad86230d79e}.final new file mode 100644 index 0000000..650325a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/158/{8e190947-08dc-4085-878f-cad86230d79e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/158/{e0b023bc-ff40-4198-a719-689743bdda9e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/158/{e0b023bc-ff40-4198-a719-689743bdda9e}.final new file mode 100644 index 0000000..b1b5831 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/158/{e0b023bc-ff40-4198-a719-689743bdda9e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/159/{05c5a2d7-346d-4873-ad20-b32d3d395a9f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/159/{05c5a2d7-346d-4873-ad20-b32d3d395a9f}.final new file mode 100644 index 0000000..70f61f5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/159/{05c5a2d7-346d-4873-ad20-b32d3d395a9f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/159/{cf217631-3ccf-454e-aabc-bad473e8b49f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/159/{cf217631-3ccf-454e-aabc-bad473e8b49f}.final new file mode 100644 index 0000000..b3bcd58 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/159/{cf217631-3ccf-454e-aabc-bad473e8b49f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/159/{e2fbae69-e6dd-4b04-8bcc-041dcb2afb9f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/159/{e2fbae69-e6dd-4b04-8bcc-041dcb2afb9f}.final new file mode 100644 index 0000000..1ad391b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/159/{e2fbae69-e6dd-4b04-8bcc-041dcb2afb9f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/16/{2afa7564-5e58-42c5-9ecc-62ba3d2f2410}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/16/{2afa7564-5e58-42c5-9ecc-62ba3d2f2410}.final new file mode 100644 index 0000000..0ce1f2a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/16/{2afa7564-5e58-42c5-9ecc-62ba3d2f2410}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/160/{28710221-a6b2-4064-aca1-75f7358b6ca0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/160/{28710221-a6b2-4064-aca1-75f7358b6ca0}.final new file mode 100644 index 0000000..e761b78 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/160/{28710221-a6b2-4064-aca1-75f7358b6ca0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/161/{7dd6596b-2c2f-41f3-b099-9c1b2ecdc7a1}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/161/{7dd6596b-2c2f-41f3-b099-9c1b2ecdc7a1}.final new file mode 100644 index 0000000..872c047 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/161/{7dd6596b-2c2f-41f3-b099-9c1b2ecdc7a1}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/161/{a8599a35-9ceb-43e6-8051-911ec21f2ca1}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/161/{a8599a35-9ceb-43e6-8051-911ec21f2ca1}.final new file mode 100644 index 0000000..42b8c65 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/161/{a8599a35-9ceb-43e6-8051-911ec21f2ca1}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/162/{46f5beb8-459e-40cd-85c7-804aa2e2f0a2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/162/{46f5beb8-459e-40cd-85c7-804aa2e2f0a2}.final new file mode 100644 index 0000000..b982f8a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/162/{46f5beb8-459e-40cd-85c7-804aa2e2f0a2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/162/{693bba07-f895-4ff3-b29d-379aa6ec0fa2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/162/{693bba07-f895-4ff3-b29d-379aa6ec0fa2}.final new file mode 100644 index 0000000..5ebf124 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/162/{693bba07-f895-4ff3-b29d-379aa6ec0fa2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/162/{80bb2aec-e180-4fbb-b2f6-12d8f104aea2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/162/{80bb2aec-e180-4fbb-b2f6-12d8f104aea2}.final new file mode 100644 index 0000000..b03374c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/162/{80bb2aec-e180-4fbb-b2f6-12d8f104aea2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/163/{c0009f04-76ce-4788-9617-ab717b3e92a3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/163/{c0009f04-76ce-4788-9617-ab717b3e92a3}.final new file mode 100644 index 0000000..4f2eee9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/163/{c0009f04-76ce-4788-9617-ab717b3e92a3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/163/{c7fd91e0-f15f-4230-8090-38cccb4066a3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/163/{c7fd91e0-f15f-4230-8090-38cccb4066a3}.final new file mode 100644 index 0000000..53233ba Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/163/{c7fd91e0-f15f-4230-8090-38cccb4066a3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/163/{f28db8ed-c10c-444c-955d-67b66348f7a3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/163/{f28db8ed-c10c-444c-955d-67b66348f7a3}.final new file mode 100644 index 0000000..1d35ce9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/163/{f28db8ed-c10c-444c-955d-67b66348f7a3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/164/{61608201-eb8f-4ca5-bb61-acc57ca9a4a4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/164/{61608201-eb8f-4ca5-bb61-acc57ca9a4a4}.final new file mode 100644 index 0000000..9eb4704 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/164/{61608201-eb8f-4ca5-bb61-acc57ca9a4a4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/164/{7940f676-888d-486a-ad29-fd99a621fea4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/164/{7940f676-888d-486a-ad29-fd99a621fea4}.final new file mode 100644 index 0000000..db1f924 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/164/{7940f676-888d-486a-ad29-fd99a621fea4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/165/{408cf884-3575-44a7-a930-8aa0aa3a89a5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/165/{408cf884-3575-44a7-a930-8aa0aa3a89a5}.final new file mode 100644 index 0000000..e45882a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/165/{408cf884-3575-44a7-a930-8aa0aa3a89a5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/165/{edd01988-5d2c-43ca-8b27-760e93eb5ba5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/165/{edd01988-5d2c-43ca-8b27-760e93eb5ba5}.final new file mode 100644 index 0000000..6eecd95 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/165/{edd01988-5d2c-43ca-8b27-760e93eb5ba5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{2b265751-66bb-48d9-aa08-9175b832e1a7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{2b265751-66bb-48d9-aa08-9175b832e1a7}.final new file mode 100644 index 0000000..5e59436 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{2b265751-66bb-48d9-aa08-9175b832e1a7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{385bc074-dcca-4b7c-826e-eeaed65984a7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{385bc074-dcca-4b7c-826e-eeaed65984a7}.final new file mode 100644 index 0000000..71fe55f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{385bc074-dcca-4b7c-826e-eeaed65984a7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{576b1cdd-a602-4576-a464-fbf112692da7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{576b1cdd-a602-4576-a464-fbf112692da7}.final new file mode 100644 index 0000000..4a4783c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{576b1cdd-a602-4576-a464-fbf112692da7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{9e745cfd-1d09-4344-b3af-2fb2980b26a7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{9e745cfd-1d09-4344-b3af-2fb2980b26a7}.final new file mode 100644 index 0000000..d238cd5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/167/{9e745cfd-1d09-4344-b3af-2fb2980b26a7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/168/{40f56e54-5474-4877-a4b7-88cb2cda47a8}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/168/{40f56e54-5474-4877-a4b7-88cb2cda47a8}.final new file mode 100644 index 0000000..9f58b9d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/168/{40f56e54-5474-4877-a4b7-88cb2cda47a8}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/168/{a4869e13-e1a1-4ca2-b102-9afb39f371a8}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/168/{a4869e13-e1a1-4ca2-b102-9afb39f371a8}.final new file mode 100644 index 0000000..91f6efa Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/168/{a4869e13-e1a1-4ca2-b102-9afb39f371a8}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/17/{61851df4-9245-475f-8228-671614a21311}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/17/{61851df4-9245-475f-8228-671614a21311}.final new file mode 100644 index 0000000..571759a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/17/{61851df4-9245-475f-8228-671614a21311}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/17/{c6580dfc-3c89-4cb4-9a79-5db713b48b11}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/17/{c6580dfc-3c89-4cb4-9a79-5db713b48b11}.final new file mode 100644 index 0000000..fc00cc1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/17/{c6580dfc-3c89-4cb4-9a79-5db713b48b11}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/171/{f71712e2-df41-4e1a-8108-d08115457fab}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/171/{f71712e2-df41-4e1a-8108-d08115457fab}.final new file mode 100644 index 0000000..9919dfe Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/171/{f71712e2-df41-4e1a-8108-d08115457fab}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/172/{01bd07f6-3133-43a1-972d-f3567e83aeac}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/172/{01bd07f6-3133-43a1-972d-f3567e83aeac}.final new file mode 100644 index 0000000..8ec3314 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/172/{01bd07f6-3133-43a1-972d-f3567e83aeac}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/172/{67dfa3b6-e8a5-4cdf-a811-06cce9a647ac}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/172/{67dfa3b6-e8a5-4cdf-a811-06cce9a647ac}.final new file mode 100644 index 0000000..3516651 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/172/{67dfa3b6-e8a5-4cdf-a811-06cce9a647ac}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/172/{d5b695ff-7a81-43a0-921b-198f4b591eac}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/172/{d5b695ff-7a81-43a0-921b-198f4b591eac}.final new file mode 100644 index 0000000..83bd249 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/172/{d5b695ff-7a81-43a0-921b-198f4b591eac}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/174/{cad1eae6-6a77-471b-83f9-b6bde383b3ae}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/174/{cad1eae6-6a77-471b-83f9-b6bde383b3ae}.final new file mode 100644 index 0000000..01ab6e1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/174/{cad1eae6-6a77-471b-83f9-b6bde383b3ae}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/175/{cb0167e4-2ab2-4f90-969e-4bef58fafeaf}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/175/{cb0167e4-2ab2-4f90-969e-4bef58fafeaf}.final new file mode 100644 index 0000000..959dfd2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/175/{cb0167e4-2ab2-4f90-969e-4bef58fafeaf}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/176/{1abca35b-a5b0-4b4e-9d2e-debb7be512b0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/176/{1abca35b-a5b0-4b4e-9d2e-debb7be512b0}.final new file mode 100644 index 0000000..c4076b5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/176/{1abca35b-a5b0-4b4e-9d2e-debb7be512b0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/176/{1fc26abc-e1ac-45ba-9f4a-d8f1443ed9b0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/176/{1fc26abc-e1ac-45ba-9f4a-d8f1443ed9b0}.final new file mode 100644 index 0000000..b81886c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/176/{1fc26abc-e1ac-45ba-9f4a-d8f1443ed9b0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/176/{b5895cc7-1b8c-4c2c-9632-be3298c848b0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/176/{b5895cc7-1b8c-4c2c-9632-be3298c848b0}.final new file mode 100644 index 0000000..e777808 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/176/{b5895cc7-1b8c-4c2c-9632-be3298c848b0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/178/{cddfa573-9aed-493d-927c-079abbc118b2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/178/{cddfa573-9aed-493d-927c-079abbc118b2}.final new file mode 100644 index 0000000..09510d5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/178/{cddfa573-9aed-493d-927c-079abbc118b2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/179/{846c8338-e49f-46a5-ad75-ec36d22307b3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/179/{846c8338-e49f-46a5-ad75-ec36d22307b3}.final new file mode 100644 index 0000000..48292d0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/179/{846c8338-e49f-46a5-ad75-ec36d22307b3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/18/{00b32755-9d02-46af-a93b-4cf69a616312}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/18/{00b32755-9d02-46af-a93b-4cf69a616312}.final new file mode 100644 index 0000000..02dd9f4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/18/{00b32755-9d02-46af-a93b-4cf69a616312}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/18/{9e100156-ae7e-485b-80e9-6713bd9c2c12}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/18/{9e100156-ae7e-485b-80e9-6713bd9c2c12}.final new file mode 100644 index 0000000..469fcf8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/18/{9e100156-ae7e-485b-80e9-6713bd9c2c12}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/18/{ef3cabcc-2f6b-4ee3-93cd-3bc67be47b12}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/18/{ef3cabcc-2f6b-4ee3-93cd-3bc67be47b12}.final new file mode 100644 index 0000000..4987858 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/18/{ef3cabcc-2f6b-4ee3-93cd-3bc67be47b12}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/180/{2bf9c6de-c8be-47e8-b084-bf164bd4e0b4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/180/{2bf9c6de-c8be-47e8-b084-bf164bd4e0b4}.final new file mode 100644 index 0000000..ad1266e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/180/{2bf9c6de-c8be-47e8-b084-bf164bd4e0b4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/180/{601c9f98-c5ec-4812-a56d-1337bf5cb6b4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/180/{601c9f98-c5ec-4812-a56d-1337bf5cb6b4}.final new file mode 100644 index 0000000..2e4ea5d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/180/{601c9f98-c5ec-4812-a56d-1337bf5cb6b4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/181/{7152df23-5499-441a-98b3-ddad3f3a9ab5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/181/{7152df23-5499-441a-98b3-ddad3f3a9ab5}.final new file mode 100644 index 0000000..bd57524 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/181/{7152df23-5499-441a-98b3-ddad3f3a9ab5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/181/{951bb3d8-fb16-411f-a7cd-e3ded89938b5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/181/{951bb3d8-fb16-411f-a7cd-e3ded89938b5}.final new file mode 100644 index 0000000..b560e10 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/181/{951bb3d8-fb16-411f-a7cd-e3ded89938b5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/182/{1f0b20e5-c789-4181-a104-7faca30308b6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/182/{1f0b20e5-c789-4181-a104-7faca30308b6}.final new file mode 100644 index 0000000..b2839f0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/182/{1f0b20e5-c789-4181-a104-7faca30308b6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/182/{f048effa-e3a9-4cbf-8c89-933c653bdeb6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/182/{f048effa-e3a9-4cbf-8c89-933c653bdeb6}.final new file mode 100644 index 0000000..444701d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/182/{f048effa-e3a9-4cbf-8c89-933c653bdeb6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/183/{78905a4f-1106-4aa5-bd2d-d498a7c3cab7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/183/{78905a4f-1106-4aa5-bd2d-d498a7c3cab7}.final new file mode 100644 index 0000000..d779faf Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/183/{78905a4f-1106-4aa5-bd2d-d498a7c3cab7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/183/{b7f21776-b07f-4781-936d-0a24e6dcdcb7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/183/{b7f21776-b07f-4781-936d-0a24e6dcdcb7}.final new file mode 100644 index 0000000..a2dc5a8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/183/{b7f21776-b07f-4781-936d-0a24e6dcdcb7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/184/{0ba5b8db-b1f3-4e57-9810-a091963f76b8}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/184/{0ba5b8db-b1f3-4e57-9810-a091963f76b8}.final new file mode 100644 index 0000000..778a088 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/184/{0ba5b8db-b1f3-4e57-9810-a091963f76b8}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/185/{47a49a66-eac4-41d1-83d1-6f1191f090b9}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/185/{47a49a66-eac4-41d1-83d1-6f1191f090b9}.final new file mode 100644 index 0000000..0416983 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/185/{47a49a66-eac4-41d1-83d1-6f1191f090b9}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/185/{b9a9442b-60a4-43a4-bdaa-4adefe2996b9}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/185/{b9a9442b-60a4-43a4-bdaa-4adefe2996b9}.final new file mode 100644 index 0000000..a355c9a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/185/{b9a9442b-60a4-43a4-bdaa-4adefe2996b9}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/185/{c77b941c-d78b-449c-aaf1-e38dbc5db7b9}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/185/{c77b941c-d78b-449c-aaf1-e38dbc5db7b9}.final new file mode 100644 index 0000000..a43d7f4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/185/{c77b941c-d78b-449c-aaf1-e38dbc5db7b9}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/186/{018bf246-da40-4d77-b308-9a6af1923fba}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/186/{018bf246-da40-4d77-b308-9a6af1923fba}.final new file mode 100644 index 0000000..42ea7b7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/186/{018bf246-da40-4d77-b308-9a6af1923fba}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/186/{ef454305-639d-4724-844b-d7ebe45cebba}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/186/{ef454305-639d-4724-844b-d7ebe45cebba}.final new file mode 100644 index 0000000..400449e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/186/{ef454305-639d-4724-844b-d7ebe45cebba}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/187/{766f9f51-48e3-4ad1-91bc-73e317b606bb}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/187/{766f9f51-48e3-4ad1-91bc-73e317b606bb}.final new file mode 100644 index 0000000..2fba069 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/187/{766f9f51-48e3-4ad1-91bc-73e317b606bb}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/188/{2608cf8e-468d-49e6-9d16-b79b5068cdbc}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/188/{2608cf8e-468d-49e6-9d16-b79b5068cdbc}.final new file mode 100644 index 0000000..4a2f122 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/188/{2608cf8e-468d-49e6-9d16-b79b5068cdbc}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/189/{556a5cb9-bc22-48d4-9778-98af5d525dbd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/189/{556a5cb9-bc22-48d4-9778-98af5d525dbd}.final new file mode 100644 index 0000000..3932177 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/189/{556a5cb9-bc22-48d4-9778-98af5d525dbd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/189/{5dcb99ca-0f13-4bfa-8840-d6cf7a3a3cbd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/189/{5dcb99ca-0f13-4bfa-8840-d6cf7a3a3cbd}.final new file mode 100644 index 0000000..e3e215e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/189/{5dcb99ca-0f13-4bfa-8840-d6cf7a3a3cbd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/189/{9c9f1149-1b43-48f2-9b80-26d5db762abd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/189/{9c9f1149-1b43-48f2-9b80-26d5db762abd}.final new file mode 100644 index 0000000..c9626ba Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/189/{9c9f1149-1b43-48f2-9b80-26d5db762abd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/190/{71ecf10f-0d1f-4872-b178-99cd3cec07be}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/190/{71ecf10f-0d1f-4872-b178-99cd3cec07be}.final new file mode 100644 index 0000000..b6e86ed Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/190/{71ecf10f-0d1f-4872-b178-99cd3cec07be}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/190/{96e31fad-2024-499e-8f56-754df4adcebe}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/190/{96e31fad-2024-499e-8f56-754df4adcebe}.final new file mode 100644 index 0000000..8de3ba6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/190/{96e31fad-2024-499e-8f56-754df4adcebe}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{00f492b0-127e-419f-9f2f-5a7a30f2f1bf}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{00f492b0-127e-419f-9f2f-5a7a30f2f1bf}.final new file mode 100644 index 0000000..7d3dd41 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{00f492b0-127e-419f-9f2f-5a7a30f2f1bf}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{1a01a3b1-6a53-4ec0-8596-7a7f283d3cbf}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{1a01a3b1-6a53-4ec0-8596-7a7f283d3cbf}.final new file mode 100644 index 0000000..f293f6d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{1a01a3b1-6a53-4ec0-8596-7a7f283d3cbf}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{ab6f66d3-d5cd-4bc0-99aa-7c91af2e83bf}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{ab6f66d3-d5cd-4bc0-99aa-7c91af2e83bf}.final new file mode 100644 index 0000000..3745eaa Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{ab6f66d3-d5cd-4bc0-99aa-7c91af2e83bf}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{d31cbe9a-3093-47ca-a1b3-f900e47007bf}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{d31cbe9a-3093-47ca-a1b3-f900e47007bf}.final new file mode 100644 index 0000000..d482c4e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/191/{d31cbe9a-3093-47ca-a1b3-f900e47007bf}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/192/{021d2e2a-93a6-42e2-991e-7bfc465dccc0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/192/{021d2e2a-93a6-42e2-991e-7bfc465dccc0}.final new file mode 100644 index 0000000..2234bb8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/192/{021d2e2a-93a6-42e2-991e-7bfc465dccc0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/193/{52b3e395-ecc6-4b4c-8ec0-6d3002f6d0c1}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/193/{52b3e395-ecc6-4b4c-8ec0-6d3002f6d0c1}.final new file mode 100644 index 0000000..f1c66d3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/193/{52b3e395-ecc6-4b4c-8ec0-6d3002f6d0c1}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/193/{ccb79856-34d8-44fd-b498-db4299f0d9c1}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/193/{ccb79856-34d8-44fd-b498-db4299f0d9c1}.final new file mode 100644 index 0000000..1953641 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/193/{ccb79856-34d8-44fd-b498-db4299f0d9c1}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/194/{8c756db9-b59e-4628-9cba-c65c6fd59dc2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/194/{8c756db9-b59e-4628-9cba-c65c6fd59dc2}.final new file mode 100644 index 0000000..a60a4a7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/194/{8c756db9-b59e-4628-9cba-c65c6fd59dc2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/194/{c84b8768-bc9a-4220-b503-5bffe161dcc2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/194/{c84b8768-bc9a-4220-b503-5bffe161dcc2}.final new file mode 100644 index 0000000..add89ac Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/194/{c84b8768-bc9a-4220-b503-5bffe161dcc2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/195/{6ba355d5-9270-47ad-a3cf-4dbd238ca3c3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/195/{6ba355d5-9270-47ad-a3cf-4dbd238ca3c3}.final new file mode 100644 index 0000000..3435512 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/195/{6ba355d5-9270-47ad-a3cf-4dbd238ca3c3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{4b876da1-54f8-439b-89b7-f57d83592ec4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{4b876da1-54f8-439b-89b7-f57d83592ec4}.final new file mode 100644 index 0000000..78594e4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{4b876da1-54f8-439b-89b7-f57d83592ec4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{5e13cddb-5903-466d-9f69-86d6a1b688c4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{5e13cddb-5903-466d-9f69-86d6a1b688c4}.final new file mode 100644 index 0000000..e343340 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{5e13cddb-5903-466d-9f69-86d6a1b688c4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{990f77c6-67f9-448f-bb1d-4c35d09f25c4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{990f77c6-67f9-448f-bb1d-4c35d09f25c4}.final new file mode 100644 index 0000000..765cbe2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{990f77c6-67f9-448f-bb1d-4c35d09f25c4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{d740302f-0d7a-4e6c-8205-1a1a8c3a84c4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{d740302f-0d7a-4e6c-8205-1a1a8c3a84c4}.final new file mode 100644 index 0000000..777e138 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/196/{d740302f-0d7a-4e6c-8205-1a1a8c3a84c4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{24f6eafd-946b-4d4e-96be-b3673d359ec5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{24f6eafd-946b-4d4e-96be-b3673d359ec5}.final new file mode 100644 index 0000000..f138a42 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{24f6eafd-946b-4d4e-96be-b3673d359ec5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{91ab04ed-f2b9-4749-a8d8-51da25f79cc5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{91ab04ed-f2b9-4749-a8d8-51da25f79cc5}.final new file mode 100644 index 0000000..62f29a6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{91ab04ed-f2b9-4749-a8d8-51da25f79cc5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{a6f8aa9e-d7ab-430e-a7ef-e9c571ea99c5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{a6f8aa9e-d7ab-430e-a7ef-e9c571ea99c5}.final new file mode 100644 index 0000000..4fbcc0a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{a6f8aa9e-d7ab-430e-a7ef-e9c571ea99c5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{bce14a06-e486-46bb-9ee1-ef625a31b5c5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{bce14a06-e486-46bb-9ee1-ef625a31b5c5}.final new file mode 100644 index 0000000..779bc58 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/197/{bce14a06-e486-46bb-9ee1-ef625a31b5c5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/198/{9eec4925-da2c-405d-a4b3-8876625498c6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/198/{9eec4925-da2c-405d-a4b3-8876625498c6}.final new file mode 100644 index 0000000..9065640 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/198/{9eec4925-da2c-405d-a4b3-8876625498c6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/199/{45b1c354-a080-4d16-970a-434a63ea3ec7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/199/{45b1c354-a080-4d16-970a-434a63ea3ec7}.final new file mode 100644 index 0000000..a12d24a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/199/{45b1c354-a080-4d16-970a-434a63ea3ec7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/2/{2972abe8-ead9-4cea-83a1-b3bf0416c202}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/2/{2972abe8-ead9-4cea-83a1-b3bf0416c202}.final new file mode 100644 index 0000000..19a23e6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/2/{2972abe8-ead9-4cea-83a1-b3bf0416c202}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/2/{6416d1b2-49cf-4293-ab84-04c05e953302}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/2/{6416d1b2-49cf-4293-ab84-04c05e953302}.final new file mode 100644 index 0000000..af007f0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/2/{6416d1b2-49cf-4293-ab84-04c05e953302}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/2/{6ab0cba0-7a00-48ae-815c-f49deac39e02}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/2/{6ab0cba0-7a00-48ae-815c-f49deac39e02}.final new file mode 100644 index 0000000..178ebce Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/2/{6ab0cba0-7a00-48ae-815c-f49deac39e02}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/20/{0df8217c-e38a-4613-9fee-d5ba2c5e5714}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/20/{0df8217c-e38a-4613-9fee-d5ba2c5e5714}.final new file mode 100644 index 0000000..a7f8466 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/20/{0df8217c-e38a-4613-9fee-d5ba2c5e5714}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/201/{36513380-e4ca-440a-a7fb-f2faba79f1c9}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/201/{36513380-e4ca-440a-a7fb-f2faba79f1c9}.final new file mode 100644 index 0000000..5e00144 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/201/{36513380-e4ca-440a-a7fb-f2faba79f1c9}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{0aee3713-12db-42cd-be70-a49a7198d4ca}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{0aee3713-12db-42cd-be70-a49a7198d4ca}.final new file mode 100644 index 0000000..7ac7e44 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{0aee3713-12db-42cd-be70-a49a7198d4ca}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{21486d05-a885-4370-bef4-f227d3f6ffca}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{21486d05-a885-4370-bef4-f227d3f6ffca}.final new file mode 100644 index 0000000..3382fad Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{21486d05-a885-4370-bef4-f227d3f6ffca}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{4ce5e610-2615-4e15-8a6a-e3fe9b479cca}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{4ce5e610-2615-4e15-8a6a-e3fe9b479cca}.final new file mode 100644 index 0000000..d5efdd5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{4ce5e610-2615-4e15-8a6a-e3fe9b479cca}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{7200deb4-adec-4185-b2e4-c133495fe5ca}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{7200deb4-adec-4185-b2e4-c133495fe5ca}.final new file mode 100644 index 0000000..e3cb822 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/202/{7200deb4-adec-4185-b2e4-c133495fe5ca}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/203/{4cd0aaef-d3cc-4c64-8658-5d7e12ec1ecb}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/203/{4cd0aaef-d3cc-4c64-8658-5d7e12ec1ecb}.final new file mode 100644 index 0000000..220af05 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/203/{4cd0aaef-d3cc-4c64-8658-5d7e12ec1ecb}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/203/{abc48901-298f-4a16-836d-d6c5b562ebcb}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/203/{abc48901-298f-4a16-836d-d6c5b562ebcb}.final new file mode 100644 index 0000000..0f56e0b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/203/{abc48901-298f-4a16-836d-d6c5b562ebcb}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/203/{b2b379fc-e194-49cd-aaea-d801665868cb}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/203/{b2b379fc-e194-49cd-aaea-d801665868cb}.final new file mode 100644 index 0000000..07c6c55 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/203/{b2b379fc-e194-49cd-aaea-d801665868cb}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/204/{1ffe6683-42c0-49b7-9dbb-600c067188cc}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/204/{1ffe6683-42c0-49b7-9dbb-600c067188cc}.final new file mode 100644 index 0000000..3388026 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/204/{1ffe6683-42c0-49b7-9dbb-600c067188cc}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/204/{3706cd82-1beb-475a-b549-4b60addea3cc}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/204/{3706cd82-1beb-475a-b549-4b60addea3cc}.final new file mode 100644 index 0000000..a6265b1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/204/{3706cd82-1beb-475a-b549-4b60addea3cc}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/205/{d98a865d-8f7e-4b8c-85f7-3743c525bbcd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/205/{d98a865d-8f7e-4b8c-85f7-3743c525bbcd}.final new file mode 100644 index 0000000..0d88081 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/205/{d98a865d-8f7e-4b8c-85f7-3743c525bbcd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/206/{13949012-82f1-45cc-afe7-f2175df666ce}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/206/{13949012-82f1-45cc-afe7-f2175df666ce}.final new file mode 100644 index 0000000..6cf28db Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/206/{13949012-82f1-45cc-afe7-f2175df666ce}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/206/{e8d5a54d-5a8f-43bc-8e4b-6cbd9e971ace}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/206/{e8d5a54d-5a8f-43bc-8e4b-6cbd9e971ace}.final new file mode 100644 index 0000000..ed7161e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/206/{e8d5a54d-5a8f-43bc-8e4b-6cbd9e971ace}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/206/{f86244ab-4ac6-4a41-b614-0b8a853398ce}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/206/{f86244ab-4ac6-4a41-b614-0b8a853398ce}.final new file mode 100644 index 0000000..adb11c4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/206/{f86244ab-4ac6-4a41-b614-0b8a853398ce}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{0014b76f-c62d-4099-86b2-939b0010e5d0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{0014b76f-c62d-4099-86b2-939b0010e5d0}.final new file mode 100644 index 0000000..261810b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{0014b76f-c62d-4099-86b2-939b0010e5d0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{143053d4-f1ba-4b5d-a5b4-1f6e74d847d0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{143053d4-f1ba-4b5d-a5b4-1f6e74d847d0}.final new file mode 100644 index 0000000..1430cd3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{143053d4-f1ba-4b5d-a5b4-1f6e74d847d0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{16b786bf-32d4-41f7-ab77-464c262d48d0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{16b786bf-32d4-41f7-ab77-464c262d48d0}.final new file mode 100644 index 0000000..b81bf08 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{16b786bf-32d4-41f7-ab77-464c262d48d0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{af8b119b-d136-4682-9459-4f38f950b0d0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{af8b119b-d136-4682-9459-4f38f950b0d0}.final new file mode 100644 index 0000000..16f0158 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{af8b119b-d136-4682-9459-4f38f950b0d0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{dd01c9a4-2c4e-40ad-9f3e-8b6f8c4169d0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{dd01c9a4-2c4e-40ad-9f3e-8b6f8c4169d0}.final new file mode 100644 index 0000000..22c472a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{dd01c9a4-2c4e-40ad-9f3e-8b6f8c4169d0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{ef7b58f3-f772-498e-b1d7-b296ed3b0ad0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{ef7b58f3-f772-498e-b1d7-b296ed3b0ad0}.final new file mode 100644 index 0000000..8222d44 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/208/{ef7b58f3-f772-498e-b1d7-b296ed3b0ad0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/209/{177d0c2f-050b-44b4-ba85-d952bacbb4d1}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/209/{177d0c2f-050b-44b4-ba85-d952bacbb4d1}.final new file mode 100644 index 0000000..8855c72 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/209/{177d0c2f-050b-44b4-ba85-d952bacbb4d1}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/209/{7a1a250a-7a41-4b24-9d7f-61bf26a641d1}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/209/{7a1a250a-7a41-4b24-9d7f-61bf26a641d1}.final new file mode 100644 index 0000000..a10848d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/209/{7a1a250a-7a41-4b24-9d7f-61bf26a641d1}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/21/{cfe032ad-acf2-4756-8621-289a6b232215}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/21/{cfe032ad-acf2-4756-8621-289a6b232215}.final new file mode 100644 index 0000000..394640b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/21/{cfe032ad-acf2-4756-8621-289a6b232215}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/210/{8762a74d-42fe-46fe-a252-db53fa7e2fd2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/210/{8762a74d-42fe-46fe-a252-db53fa7e2fd2}.final new file mode 100644 index 0000000..e78a304 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/210/{8762a74d-42fe-46fe-a252-db53fa7e2fd2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/211/{291d1e20-fdca-4e4a-8752-506ec3f85bd3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/211/{291d1e20-fdca-4e4a-8752-506ec3f85bd3}.final new file mode 100644 index 0000000..ba15a34 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/211/{291d1e20-fdca-4e4a-8752-506ec3f85bd3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/211/{323793aa-1f10-46bb-939e-e15c07a523d3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/211/{323793aa-1f10-46bb-939e-e15c07a523d3}.final new file mode 100644 index 0000000..d906d3e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/211/{323793aa-1f10-46bb-939e-e15c07a523d3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/211/{52203756-e7fe-46f3-ba36-0a1db81d3ad3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/211/{52203756-e7fe-46f3-ba36-0a1db81d3ad3}.final new file mode 100644 index 0000000..4198dde Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/211/{52203756-e7fe-46f3-ba36-0a1db81d3ad3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/212/{3a8d3125-d52e-4362-ad2f-ec42f4b157d4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/212/{3a8d3125-d52e-4362-ad2f-ec42f4b157d4}.final new file mode 100644 index 0000000..b143943 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/212/{3a8d3125-d52e-4362-ad2f-ec42f4b157d4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/212/{8ddba4af-737c-4054-81ff-84a8d9c7c4d4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/212/{8ddba4af-737c-4054-81ff-84a8d9c7c4d4}.final new file mode 100644 index 0000000..43baabc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/212/{8ddba4af-737c-4054-81ff-84a8d9c7c4d4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/212/{ed600601-1037-4564-8940-728807f170d4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/212/{ed600601-1037-4564-8940-728807f170d4}.final new file mode 100644 index 0000000..2385e3f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/212/{ed600601-1037-4564-8940-728807f170d4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/213/{2b38361f-9d88-4f8b-b2b7-861decda84d5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/213/{2b38361f-9d88-4f8b-b2b7-861decda84d5}.final new file mode 100644 index 0000000..4bb96af Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/213/{2b38361f-9d88-4f8b-b2b7-861decda84d5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{33f2440d-1817-4800-9571-f5ed377299d6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{33f2440d-1817-4800-9571-f5ed377299d6}.final new file mode 100644 index 0000000..70cdc17 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{33f2440d-1817-4800-9571-f5ed377299d6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{554d049b-650c-4d78-868a-8284704d6bd6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{554d049b-650c-4d78-868a-8284704d6bd6}.final new file mode 100644 index 0000000..498f513 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{554d049b-650c-4d78-868a-8284704d6bd6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{556c3039-ea82-4b76-984a-110fe146a6d6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{556c3039-ea82-4b76-984a-110fe146a6d6}.final new file mode 100644 index 0000000..3cad784 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{556c3039-ea82-4b76-984a-110fe146a6d6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{57255271-bae7-4ba4-b81c-ca773acaced6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{57255271-bae7-4ba4-b81c-ca773acaced6}.final new file mode 100644 index 0000000..0d821a9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{57255271-bae7-4ba4-b81c-ca773acaced6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{d75ab008-95b5-4c45-bdb3-5236ee4a65d6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{d75ab008-95b5-4c45-bdb3-5236ee4a65d6}.final new file mode 100644 index 0000000..a2bf8a0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/214/{d75ab008-95b5-4c45-bdb3-5236ee4a65d6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/215/{d313b37f-6478-4858-a907-6fbd2a4dccd7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/215/{d313b37f-6478-4858-a907-6fbd2a4dccd7}.final new file mode 100644 index 0000000..86cbebb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/215/{d313b37f-6478-4858-a907-6fbd2a4dccd7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/216/{95a91c9e-c088-44ff-b43e-f86156234ed8}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/216/{95a91c9e-c088-44ff-b43e-f86156234ed8}.final new file mode 100644 index 0000000..c87341d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/216/{95a91c9e-c088-44ff-b43e-f86156234ed8}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/216/{a671c157-675a-4de5-a3d2-9ddd341426d8}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/216/{a671c157-675a-4de5-a3d2-9ddd341426d8}.final new file mode 100644 index 0000000..4824b5a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/216/{a671c157-675a-4de5-a3d2-9ddd341426d8}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/217/{476a836a-6ed4-49b3-92d1-70b08cc9f0d9}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/217/{476a836a-6ed4-49b3-92d1-70b08cc9f0d9}.final new file mode 100644 index 0000000..adf4dfe Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/217/{476a836a-6ed4-49b3-92d1-70b08cc9f0d9}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/217/{d58ec00f-d30b-4952-b6a7-96b105bf13d9}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/217/{d58ec00f-d30b-4952-b6a7-96b105bf13d9}.final new file mode 100644 index 0000000..90bc9b4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/217/{d58ec00f-d30b-4952-b6a7-96b105bf13d9}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/217/{ece3e215-5960-47a6-989c-cb2457ea5ed9}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/217/{ece3e215-5960-47a6-989c-cb2457ea5ed9}.final new file mode 100644 index 0000000..5abe059 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/217/{ece3e215-5960-47a6-989c-cb2457ea5ed9}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/218/{9f1d0fa7-53ad-4781-bd6e-d3bd97db86da}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/218/{9f1d0fa7-53ad-4781-bd6e-d3bd97db86da}.final new file mode 100644 index 0000000..a24fbd3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/218/{9f1d0fa7-53ad-4781-bd6e-d3bd97db86da}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/218/{c6c7d2bc-47db-421e-af0d-d06dd5fe5eda}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/218/{c6c7d2bc-47db-421e-af0d-d06dd5fe5eda}.final new file mode 100644 index 0000000..4a0246c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/218/{c6c7d2bc-47db-421e-af0d-d06dd5fe5eda}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{6c9d1344-46dc-4b5f-8dee-28989790f6db}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{6c9d1344-46dc-4b5f-8dee-28989790f6db}.final new file mode 100644 index 0000000..4084983 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{6c9d1344-46dc-4b5f-8dee-28989790f6db}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{6f069e26-716c-4d5f-9da5-7ea3c10b68db}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{6f069e26-716c-4d5f-9da5-7ea3c10b68db}.final new file mode 100644 index 0000000..a946f1d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{6f069e26-716c-4d5f-9da5-7ea3c10b68db}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{a299dd8e-c6a6-4c32-a1b0-e306949cd8db}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{a299dd8e-c6a6-4c32-a1b0-e306949cd8db}.final new file mode 100644 index 0000000..d7bb5d2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{a299dd8e-c6a6-4c32-a1b0-e306949cd8db}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{ee48554c-4a24-48c4-9bed-adad8c8f4adb}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{ee48554c-4a24-48c4-9bed-adad8c8f4adb}.final new file mode 100644 index 0000000..d890f89 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/219/{ee48554c-4a24-48c4-9bed-adad8c8f4adb}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/22/{4a3016a8-d179-41b2-b28c-5e6fbdfc0c16}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/22/{4a3016a8-d179-41b2-b28c-5e6fbdfc0c16}.final new file mode 100644 index 0000000..48bbbe1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/22/{4a3016a8-d179-41b2-b28c-5e6fbdfc0c16}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/220/{3da5dece-0781-4ff6-9bb2-5c7a171ea1dc}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/220/{3da5dece-0781-4ff6-9bb2-5c7a171ea1dc}.final new file mode 100644 index 0000000..f0f1af3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/220/{3da5dece-0781-4ff6-9bb2-5c7a171ea1dc}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/220/{44fc395e-ae56-4a87-abaa-6e99e72e6fdc}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/220/{44fc395e-ae56-4a87-abaa-6e99e72e6fdc}.final new file mode 100644 index 0000000..955f0dd Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/220/{44fc395e-ae56-4a87-abaa-6e99e72e6fdc}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/220/{e2b879ee-130f-48a9-b41f-f40f195fbadc}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/220/{e2b879ee-130f-48a9-b41f-f40f195fbadc}.final new file mode 100644 index 0000000..e8f16b2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/220/{e2b879ee-130f-48a9-b41f-f40f195fbadc}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/221/{43b02501-4198-475d-9e86-8dd5459433dd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/221/{43b02501-4198-475d-9e86-8dd5459433dd}.final new file mode 100644 index 0000000..093d365 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/221/{43b02501-4198-475d-9e86-8dd5459433dd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/221/{c76981f9-48af-48c3-b24b-381e564582dd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/221/{c76981f9-48af-48c3-b24b-381e564582dd}.final new file mode 100644 index 0000000..f7a5a78 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/221/{c76981f9-48af-48c3-b24b-381e564582dd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/223/{b939a191-a9f9-4f59-9497-ba508a45d1df}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/223/{b939a191-a9f9-4f59-9497-ba508a45d1df}.final new file mode 100644 index 0000000..fdc9e55 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/223/{b939a191-a9f9-4f59-9497-ba508a45d1df}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/224/{082fd667-763f-4c2a-a1fa-a082650e6ae0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/224/{082fd667-763f-4c2a-a1fa-a082650e6ae0}.final new file mode 100644 index 0000000..c82e6ba Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/224/{082fd667-763f-4c2a-a1fa-a082650e6ae0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/224/{12b7d64a-9c9d-402e-81d4-b40c1ff18be0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/224/{12b7d64a-9c9d-402e-81d4-b40c1ff18be0}.final new file mode 100644 index 0000000..cf9a8ec Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/224/{12b7d64a-9c9d-402e-81d4-b40c1ff18be0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/226/{60f17676-d611-4ef8-b65d-51c73f51cae2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/226/{60f17676-d611-4ef8-b65d-51c73f51cae2}.final new file mode 100644 index 0000000..26bfcfb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/226/{60f17676-d611-4ef8-b65d-51c73f51cae2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/226/{a76699aa-fc2b-4c47-812f-598418d30ce2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/226/{a76699aa-fc2b-4c47-812f-598418d30ce2}.final new file mode 100644 index 0000000..63d78f4 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/226/{a76699aa-fc2b-4c47-812f-598418d30ce2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/226/{cb010d55-4563-4ff5-bbba-25a677cd75e2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/226/{cb010d55-4563-4ff5-bbba-25a677cd75e2}.final new file mode 100644 index 0000000..7f2abfa Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/226/{cb010d55-4563-4ff5-bbba-25a677cd75e2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/228/{69026189-6ad7-4830-a554-0f4efcf24be4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/228/{69026189-6ad7-4830-a554-0f4efcf24be4}.final new file mode 100644 index 0000000..ea268c7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/228/{69026189-6ad7-4830-a554-0f4efcf24be4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/228/{92bbbc58-2a0f-4942-94ed-c4bdb1c416e4}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/228/{92bbbc58-2a0f-4942-94ed-c4bdb1c416e4}.final new file mode 100644 index 0000000..a313e5b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/228/{92bbbc58-2a0f-4942-94ed-c4bdb1c416e4}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{65229b7c-a359-4af9-a8a8-0b1da5cbcce5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{65229b7c-a359-4af9-a8a8-0b1da5cbcce5}.final new file mode 100644 index 0000000..b7c601e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{65229b7c-a359-4af9-a8a8-0b1da5cbcce5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{b0aa6792-ee52-484f-a1a5-16620d4b57e5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{b0aa6792-ee52-484f-a1a5-16620d4b57e5}.final new file mode 100644 index 0000000..8d96fac Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{b0aa6792-ee52-484f-a1a5-16620d4b57e5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{c560183d-64a2-4b00-8b55-6cffe1fa9be5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{c560183d-64a2-4b00-8b55-6cffe1fa9be5}.final new file mode 100644 index 0000000..37888ec Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{c560183d-64a2-4b00-8b55-6cffe1fa9be5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{d977db4d-23cb-45f8-be88-11e3e433ede5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{d977db4d-23cb-45f8-be88-11e3e433ede5}.final new file mode 100644 index 0000000..cb6a441 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/229/{d977db4d-23cb-45f8-be88-11e3e433ede5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/23/{b63487c8-e675-4786-b150-d46fc0a6d317}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/23/{b63487c8-e675-4786-b150-d46fc0a6d317}.final new file mode 100644 index 0000000..020b262 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/23/{b63487c8-e675-4786-b150-d46fc0a6d317}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/23/{bb53085b-aed7-4a21-a1bc-81429fe7d417}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/23/{bb53085b-aed7-4a21-a1bc-81429fe7d417}.final new file mode 100644 index 0000000..5186c92 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/23/{bb53085b-aed7-4a21-a1bc-81429fe7d417}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/230/{1152012c-d2a6-4ad7-b9c5-5b31c631a0e6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/230/{1152012c-d2a6-4ad7-b9c5-5b31c631a0e6}.final new file mode 100644 index 0000000..2645b0b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/230/{1152012c-d2a6-4ad7-b9c5-5b31c631a0e6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/230/{4327857a-2b66-4086-b702-83fd09528ee6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/230/{4327857a-2b66-4086-b702-83fd09528ee6}.final new file mode 100644 index 0000000..ea56442 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/230/{4327857a-2b66-4086-b702-83fd09528ee6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/231/{4a13aef4-2634-430e-84ef-0456891fc6e7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/231/{4a13aef4-2634-430e-84ef-0456891fc6e7}.final new file mode 100644 index 0000000..d59286c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/231/{4a13aef4-2634-430e-84ef-0456891fc6e7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/233/{799471d5-2ebb-4533-a948-a958843a9fe9}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/233/{799471d5-2ebb-4533-a948-a958843a9fe9}.final new file mode 100644 index 0000000..77f92f1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/233/{799471d5-2ebb-4533-a948-a958843a9fe9}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/234/{1ffa296a-34e3-4158-83c1-fb5662f493ea}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/234/{1ffa296a-34e3-4158-83c1-fb5662f493ea}.final new file mode 100644 index 0000000..2e86dae Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/234/{1ffa296a-34e3-4158-83c1-fb5662f493ea}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/234/{57e09590-1b06-4fd1-9d68-20d8f6a78bea}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/234/{57e09590-1b06-4fd1-9d68-20d8f6a78bea}.final new file mode 100644 index 0000000..112515d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/234/{57e09590-1b06-4fd1-9d68-20d8f6a78bea}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/235/{57212deb-914c-4da9-ab27-b7837dbae9eb}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/235/{57212deb-914c-4da9-ab27-b7837dbae9eb}.final new file mode 100644 index 0000000..899f4b9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/235/{57212deb-914c-4da9-ab27-b7837dbae9eb}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/235/{7bcb77af-8dd2-4762-a37a-f5ac517f35eb}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/235/{7bcb77af-8dd2-4762-a37a-f5ac517f35eb}.final new file mode 100644 index 0000000..6652677 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/235/{7bcb77af-8dd2-4762-a37a-f5ac517f35eb}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/236/{381fb4c2-09ff-492e-95a6-77440338deec}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/236/{381fb4c2-09ff-492e-95a6-77440338deec}.final new file mode 100644 index 0000000..618ee94 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/236/{381fb4c2-09ff-492e-95a6-77440338deec}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/236/{444ddda1-de10-4958-b624-bf9a0c3f11ec}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/236/{444ddda1-de10-4958-b624-bf9a0c3f11ec}.final new file mode 100644 index 0000000..60954e7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/236/{444ddda1-de10-4958-b624-bf9a0c3f11ec}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{070f184d-44be-4a15-9556-685e236a69ed}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{070f184d-44be-4a15-9556-685e236a69ed}.final new file mode 100644 index 0000000..c115f8c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{070f184d-44be-4a15-9556-685e236a69ed}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{210d78f6-8bbc-46bf-aa9a-dc79631534ed}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{210d78f6-8bbc-46bf-aa9a-dc79631534ed}.final new file mode 100644 index 0000000..7fc5df3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{210d78f6-8bbc-46bf-aa9a-dc79631534ed}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{6043a542-527a-4acf-b7e5-56db0657dbed}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{6043a542-527a-4acf-b7e5-56db0657dbed}.final new file mode 100644 index 0000000..b6447f7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{6043a542-527a-4acf-b7e5-56db0657dbed}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{963c2e37-5585-41dc-a1d2-386b6fa860ed}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{963c2e37-5585-41dc-a1d2-386b6fa860ed}.final new file mode 100644 index 0000000..1087d49 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{963c2e37-5585-41dc-a1d2-386b6fa860ed}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{a7df15b2-8849-457c-814e-c87dd0420aed}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{a7df15b2-8849-457c-814e-c87dd0420aed}.final new file mode 100644 index 0000000..9aa2b34 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/237/{a7df15b2-8849-457c-814e-c87dd0420aed}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/239/{6198ebcb-016c-439e-9b91-8733480c0def}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/239/{6198ebcb-016c-439e-9b91-8733480c0def}.final new file mode 100644 index 0000000..619be5e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/239/{6198ebcb-016c-439e-9b91-8733480c0def}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/239/{892d3709-5301-4cfb-bca2-bc65e00a5fef}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/239/{892d3709-5301-4cfb-bca2-bc65e00a5fef}.final new file mode 100644 index 0000000..584414a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/239/{892d3709-5301-4cfb-bca2-bc65e00a5fef}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/239/{896ea110-ab11-454e-84c8-317f9e031bef}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/239/{896ea110-ab11-454e-84c8-317f9e031bef}.final new file mode 100644 index 0000000..1f737e2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/239/{896ea110-ab11-454e-84c8-317f9e031bef}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/24/{0c86a688-8aa8-4c10-9252-96a4388f3718}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/24/{0c86a688-8aa8-4c10-9252-96a4388f3718}.final new file mode 100644 index 0000000..b831e6c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/24/{0c86a688-8aa8-4c10-9252-96a4388f3718}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/24/{7a741769-6d05-4e31-91ba-65a308e7d918}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/24/{7a741769-6d05-4e31-91ba-65a308e7d918}.final new file mode 100644 index 0000000..9693fe8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/24/{7a741769-6d05-4e31-91ba-65a308e7d918}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/240/{e0433716-da35-4fa6-ba9d-ae2566b77af0}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/240/{e0433716-da35-4fa6-ba9d-ae2566b77af0}.final new file mode 100644 index 0000000..44500f6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/240/{e0433716-da35-4fa6-ba9d-ae2566b77af0}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/242/{16313e10-ef8b-479b-b279-f8df674ebff2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/242/{16313e10-ef8b-479b-b279-f8df674ebff2}.final new file mode 100644 index 0000000..6deccff Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/242/{16313e10-ef8b-479b-b279-f8df674ebff2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/242/{aca8ab8f-e6dc-4f8f-881d-3f1692ebf2f2}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/242/{aca8ab8f-e6dc-4f8f-881d-3f1692ebf2f2}.final new file mode 100644 index 0000000..91f9236 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/242/{aca8ab8f-e6dc-4f8f-881d-3f1692ebf2f2}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/243/{86704566-0fcf-4dfe-a334-19c8e30617f3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/243/{86704566-0fcf-4dfe-a334-19c8e30617f3}.final new file mode 100644 index 0000000..cd85064 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/243/{86704566-0fcf-4dfe-a334-19c8e30617f3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/243/{a66ca658-3fe7-47bc-ad2e-44c324ccf6f3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/243/{a66ca658-3fe7-47bc-ad2e-44c324ccf6f3}.final new file mode 100644 index 0000000..7c47344 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/243/{a66ca658-3fe7-47bc-ad2e-44c324ccf6f3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/243/{ef3a31d8-73b0-457e-927b-e6aebb596cf3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/243/{ef3a31d8-73b0-457e-927b-e6aebb596cf3}.final new file mode 100644 index 0000000..43f5d6c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/243/{ef3a31d8-73b0-457e-927b-e6aebb596cf3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/245/{82f1efe0-1390-4d41-b757-df4c140a4ff5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/245/{82f1efe0-1390-4d41-b757-df4c140a4ff5}.final new file mode 100644 index 0000000..3b9f39a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/245/{82f1efe0-1390-4d41-b757-df4c140a4ff5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/245/{e58bbe7d-654f-4adf-8edf-c77adda7d4f5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/245/{e58bbe7d-654f-4adf-8edf-c77adda7d4f5}.final new file mode 100644 index 0000000..b81b1af Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/245/{e58bbe7d-654f-4adf-8edf-c77adda7d4f5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/246/{0a717e95-cecb-4fff-b91f-91d33bbf1ff6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/246/{0a717e95-cecb-4fff-b91f-91d33bbf1ff6}.final new file mode 100644 index 0000000..1caf03e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/246/{0a717e95-cecb-4fff-b91f-91d33bbf1ff6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/246/{4c1ebb08-8556-468a-83fe-7173c87ed6f6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/246/{4c1ebb08-8556-468a-83fe-7173c87ed6f6}.final new file mode 100644 index 0000000..a162094 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/246/{4c1ebb08-8556-468a-83fe-7173c87ed6f6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/246/{8522a9b8-3c33-4454-b7db-7776fe3f8df6}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/246/{8522a9b8-3c33-4454-b7db-7776fe3f8df6}.final new file mode 100644 index 0000000..5325d59 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/246/{8522a9b8-3c33-4454-b7db-7776fe3f8df6}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{39a2576e-298c-4a87-96d8-b0ae2e5c3af7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{39a2576e-298c-4a87-96d8-b0ae2e5c3af7}.final new file mode 100644 index 0000000..7ded4c3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{39a2576e-298c-4a87-96d8-b0ae2e5c3af7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{939e079b-3ad6-4c72-a0a2-bb48af7cb8f7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{939e079b-3ad6-4c72-a0a2-bb48af7cb8f7}.final new file mode 100644 index 0000000..c290652 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{939e079b-3ad6-4c72-a0a2-bb48af7cb8f7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{95d6cef3-f9c9-4a1d-862c-f3a5923d00f7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{95d6cef3-f9c9-4a1d-862c-f3a5923d00f7}.final new file mode 100644 index 0000000..17874a5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{95d6cef3-f9c9-4a1d-862c-f3a5923d00f7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{d9f71413-0626-4d43-b2a4-e6ea57e915f7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{d9f71413-0626-4d43-b2a4-e6ea57e915f7}.final new file mode 100644 index 0000000..464cdae Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/247/{d9f71413-0626-4d43-b2a4-e6ea57e915f7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/25/{11fabb84-4c76-454f-9df0-4b33c6f0bd19}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/25/{11fabb84-4c76-454f-9df0-4b33c6f0bd19}.final new file mode 100644 index 0000000..33604b8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/25/{11fabb84-4c76-454f-9df0-4b33c6f0bd19}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/25/{bfc0950f-1714-4336-b830-d08c667a9219}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/25/{bfc0950f-1714-4336-b830-d08c667a9219}.final new file mode 100644 index 0000000..fc1d4f7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/25/{bfc0950f-1714-4336-b830-d08c667a9219}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/250/{667f65a2-f46b-4488-ae5c-6b64a9a4bcfa}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/250/{667f65a2-f46b-4488-ae5c-6b64a9a4bcfa}.final new file mode 100644 index 0000000..e37e779 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/250/{667f65a2-f46b-4488-ae5c-6b64a9a4bcfa}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/250/{6bd4fe1b-60e4-4ebf-8de2-fbdfc896f4fa}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/250/{6bd4fe1b-60e4-4ebf-8de2-fbdfc896f4fa}.final new file mode 100644 index 0000000..cf41ec1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/250/{6bd4fe1b-60e4-4ebf-8de2-fbdfc896f4fa}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/252/{16f048c1-d6cb-4d75-8fcc-f247360bdcfc}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/252/{16f048c1-d6cb-4d75-8fcc-f247360bdcfc}.final new file mode 100644 index 0000000..672b1e6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/252/{16f048c1-d6cb-4d75-8fcc-f247360bdcfc}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{0f3d526e-44fd-41c9-b99d-bf5231cb36fd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{0f3d526e-44fd-41c9-b99d-bf5231cb36fd}.final new file mode 100644 index 0000000..1276706 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{0f3d526e-44fd-41c9-b99d-bf5231cb36fd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{5fee64ae-2b56-48bd-87aa-a3592bfc52fd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{5fee64ae-2b56-48bd-87aa-a3592bfc52fd}.final new file mode 100644 index 0000000..67e95dd Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{5fee64ae-2b56-48bd-87aa-a3592bfc52fd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{960c1405-2fb6-42b3-973b-34545420e2fd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{960c1405-2fb6-42b3-973b-34545420e2fd}.final new file mode 100644 index 0000000..6c9ca9d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{960c1405-2fb6-42b3-973b-34545420e2fd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{e4d371f4-61d2-4d34-9852-74e533921cfd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{e4d371f4-61d2-4d34-9852-74e533921cfd}.final new file mode 100644 index 0000000..4ffa682 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/253/{e4d371f4-61d2-4d34-9852-74e533921cfd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/254/{0a9c1165-6571-4c70-9e25-e885ff9935fe}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/254/{0a9c1165-6571-4c70-9e25-e885ff9935fe}.final new file mode 100644 index 0000000..0e9798d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/254/{0a9c1165-6571-4c70-9e25-e885ff9935fe}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/254/{a83be59f-e40d-4631-a894-76382b2e64fe}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/254/{a83be59f-e40d-4631-a894-76382b2e64fe}.final new file mode 100644 index 0000000..eb16821 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/254/{a83be59f-e40d-4631-a894-76382b2e64fe}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/255/{18d613df-c18a-4801-a05d-934b39e88aff}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/255/{18d613df-c18a-4801-a05d-934b39e88aff}.final new file mode 100644 index 0000000..99d5d89 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/255/{18d613df-c18a-4801-a05d-934b39e88aff}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/26/{937b7178-3150-48c3-9358-9fed2a49901a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/26/{937b7178-3150-48c3-9358-9fed2a49901a}.final new file mode 100644 index 0000000..46b284b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/26/{937b7178-3150-48c3-9358-9fed2a49901a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/27/{c236589d-ab0e-4d38-af5e-a932b0bf071b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/27/{c236589d-ab0e-4d38-af5e-a932b0bf071b}.final new file mode 100644 index 0000000..8713445 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/27/{c236589d-ab0e-4d38-af5e-a932b0bf071b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/27/{e2bcfc08-5d4c-407d-873b-0e9c97cdc11b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/27/{e2bcfc08-5d4c-407d-873b-0e9c97cdc11b}.final new file mode 100644 index 0000000..8e2077a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/27/{e2bcfc08-5d4c-407d-873b-0e9c97cdc11b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/28/{7e03774f-0aed-4e19-9dc1-bd0e4a551a1c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/28/{7e03774f-0aed-4e19-9dc1-bd0e4a551a1c}.final new file mode 100644 index 0000000..60954e7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/28/{7e03774f-0aed-4e19-9dc1-bd0e4a551a1c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/29/{3693df71-546c-4e1a-8894-e28f3735d61d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/29/{3693df71-546c-4e1a-8894-e28f3735d61d}.final new file mode 100644 index 0000000..deac6d9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/29/{3693df71-546c-4e1a-8894-e28f3735d61d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/29/{6e000118-fdbb-4c32-8a03-86b20c82581d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/29/{6e000118-fdbb-4c32-8a03-86b20c82581d}.final new file mode 100644 index 0000000..f4ce62c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/29/{6e000118-fdbb-4c32-8a03-86b20c82581d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/3/{56a491bc-3fc0-45c1-876a-b27898a95603}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/3/{56a491bc-3fc0-45c1-876a-b27898a95603}.final new file mode 100644 index 0000000..fc28fbf Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/3/{56a491bc-3fc0-45c1-876a-b27898a95603}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/3/{f32db8f2-d6f8-4b17-8b70-302495827c03}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/3/{f32db8f2-d6f8-4b17-8b70-302495827c03}.final new file mode 100644 index 0000000..14e5867 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/3/{f32db8f2-d6f8-4b17-8b70-302495827c03}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/30/{1415e0c1-0da6-4fe4-9cf2-38db349e5e1e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/30/{1415e0c1-0da6-4fe4-9cf2-38db349e5e1e}.final new file mode 100644 index 0000000..c37fd56 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/30/{1415e0c1-0da6-4fe4-9cf2-38db349e5e1e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/30/{150ae16b-1dce-4d7f-b480-8598c2eb2b1e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/30/{150ae16b-1dce-4d7f-b480-8598c2eb2b1e}.final new file mode 100644 index 0000000..209ecea Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/30/{150ae16b-1dce-4d7f-b480-8598c2eb2b1e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/30/{f1ab868b-04f8-4b6d-b403-a0050d65da1e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/30/{f1ab868b-04f8-4b6d-b403-a0050d65da1e}.final new file mode 100644 index 0000000..53df0b2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/30/{f1ab868b-04f8-4b6d-b403-a0050d65da1e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/31/{35a6d6aa-395c-4340-a0ea-c146c09bcc1f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/31/{35a6d6aa-395c-4340-a0ea-c146c09bcc1f}.final new file mode 100644 index 0000000..81b760b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/31/{35a6d6aa-395c-4340-a0ea-c146c09bcc1f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/31/{a66b2cdb-3610-4650-aacb-cd3b4dd5b51f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/31/{a66b2cdb-3610-4650-aacb-cd3b4dd5b51f}.final new file mode 100644 index 0000000..6983faf Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/31/{a66b2cdb-3610-4650-aacb-cd3b4dd5b51f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/31/{c5c2b2d1-526b-4fba-bdfb-be2585d3c01f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/31/{c5c2b2d1-526b-4fba-bdfb-be2585d3c01f}.final new file mode 100644 index 0000000..cc60860 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/31/{c5c2b2d1-526b-4fba-bdfb-be2585d3c01f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/32/{66ec2e63-ad08-4dca-af57-982685ef8e20}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/32/{66ec2e63-ad08-4dca-af57-982685ef8e20}.final new file mode 100644 index 0000000..65d8633 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/32/{66ec2e63-ad08-4dca-af57-982685ef8e20}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/32/{6a98af09-ca68-44fa-9fed-03d66e51c420}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/32/{6a98af09-ca68-44fa-9fed-03d66e51c420}.final new file mode 100644 index 0000000..3786fed Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/32/{6a98af09-ca68-44fa-9fed-03d66e51c420}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{312ea35d-d0e8-458b-b72c-8b2cf8e08a21}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{312ea35d-d0e8-458b-b72c-8b2cf8e08a21}.final new file mode 100644 index 0000000..559ebfb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{312ea35d-d0e8-458b-b72c-8b2cf8e08a21}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{3ba4a56a-0a7c-4588-a353-c99917748021}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{3ba4a56a-0a7c-4588-a353-c99917748021}.final new file mode 100644 index 0000000..bd79539 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{3ba4a56a-0a7c-4588-a353-c99917748021}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{6c6ab775-282a-4041-be2f-8b85b17ed421}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{6c6ab775-282a-4041-be2f-8b85b17ed421}.final new file mode 100644 index 0000000..0cdc24b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{6c6ab775-282a-4041-be2f-8b85b17ed421}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{c251e4e9-0fae-4606-844c-836acc11dd21}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{c251e4e9-0fae-4606-844c-836acc11dd21}.final new file mode 100644 index 0000000..933d7bb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{c251e4e9-0fae-4606-844c-836acc11dd21}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{c94b6b60-d26f-4220-9aa5-1cb2e2cd1a21}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{c94b6b60-d26f-4220-9aa5-1cb2e2cd1a21}.final new file mode 100644 index 0000000..4393f26 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/33/{c94b6b60-d26f-4220-9aa5-1cb2e2cd1a21}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{36149a5a-7a21-4c70-bc33-397f92c5bc22}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{36149a5a-7a21-4c70-bc33-397f92c5bc22}.final new file mode 100644 index 0000000..271cd6f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{36149a5a-7a21-4c70-bc33-397f92c5bc22}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{8250e137-411e-43be-875c-a1e4972aea22}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{8250e137-411e-43be-875c-a1e4972aea22}.final new file mode 100644 index 0000000..ee59209 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{8250e137-411e-43be-875c-a1e4972aea22}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{a326340e-c766-414c-9444-c2bdd3607722}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{a326340e-c766-414c-9444-c2bdd3607722}.final new file mode 100644 index 0000000..516d9cf Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{a326340e-c766-414c-9444-c2bdd3607722}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{c9a1a99b-c9ed-493f-8f5d-071870748722}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{c9a1a99b-c9ed-493f-8f5d-071870748722}.final new file mode 100644 index 0000000..2a08d50 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/34/{c9a1a99b-c9ed-493f-8f5d-071870748722}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/35/{45e6c98e-7bb2-4ab4-ae7a-ecede050e323}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/35/{45e6c98e-7bb2-4ab4-ae7a-ecede050e323}.final new file mode 100644 index 0000000..fecefcb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/35/{45e6c98e-7bb2-4ab4-ae7a-ecede050e323}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/35/{525a735c-dfe2-4e11-999c-3fb123783a23}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/35/{525a735c-dfe2-4e11-999c-3fb123783a23}.final new file mode 100644 index 0000000..953d6e2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/35/{525a735c-dfe2-4e11-999c-3fb123783a23}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{0da44ec6-2625-4507-bea8-050f9bd7f724}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{0da44ec6-2625-4507-bea8-050f9bd7f724}.final new file mode 100644 index 0000000..bc5951e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{0da44ec6-2625-4507-bea8-050f9bd7f724}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{88ceffeb-a486-4b84-ba14-cbd07c288524}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{88ceffeb-a486-4b84-ba14-cbd07c288524}.final new file mode 100644 index 0000000..c4fc070 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{88ceffeb-a486-4b84-ba14-cbd07c288524}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{e5ad6bba-4f4b-43b4-9345-d42386309424}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{e5ad6bba-4f4b-43b4-9345-d42386309424}.final new file mode 100644 index 0000000..77bc919 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{e5ad6bba-4f4b-43b4-9345-d42386309424}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{ef63580e-2b16-476b-9dbe-1dd2506cef24}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{ef63580e-2b16-476b-9dbe-1dd2506cef24}.final new file mode 100644 index 0000000..9fc467b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/36/{ef63580e-2b16-476b-9dbe-1dd2506cef24}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/37/{5a26783f-b291-4049-8651-55ae36656425}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/37/{5a26783f-b291-4049-8651-55ae36656425}.final new file mode 100644 index 0000000..bfcb60c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/37/{5a26783f-b291-4049-8651-55ae36656425}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/37/{d53e592b-74d7-4ae9-8b98-603b5b761c25}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/37/{d53e592b-74d7-4ae9-8b98-603b5b761c25}.final new file mode 100644 index 0000000..48f227e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/37/{d53e592b-74d7-4ae9-8b98-603b5b761c25}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/38/{5b7829bf-5b58-4786-9bc9-dafe4fd45b26}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/38/{5b7829bf-5b58-4786-9bc9-dafe4fd45b26}.final new file mode 100644 index 0000000..5a65803 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/38/{5b7829bf-5b58-4786-9bc9-dafe4fd45b26}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/38/{e260b273-0c52-485a-9244-3833ae314e26}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/38/{e260b273-0c52-485a-9244-3833ae314e26}.final new file mode 100644 index 0000000..84d3678 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/38/{e260b273-0c52-485a-9244-3833ae314e26}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/38/{e8b40a1b-4735-4eb6-838a-8c9af839ab26}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/38/{e8b40a1b-4735-4eb6-838a-8c9af839ab26}.final new file mode 100644 index 0000000..13b13ed Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/38/{e8b40a1b-4735-4eb6-838a-8c9af839ab26}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/39/{abdde99b-bac3-45ff-b4da-4e4be8987e27}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/39/{abdde99b-bac3-45ff-b4da-4e4be8987e27}.final new file mode 100644 index 0000000..445ebc9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/39/{abdde99b-bac3-45ff-b4da-4e4be8987e27}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/39/{abf187b4-9758-4fdd-accc-8aa2cd53f827}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/39/{abf187b4-9758-4fdd-accc-8aa2cd53f827}.final new file mode 100644 index 0000000..ba1ae44 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/39/{abf187b4-9758-4fdd-accc-8aa2cd53f827}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/4/{046d06ed-a011-43ab-8181-98d083a72104}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/4/{046d06ed-a011-43ab-8181-98d083a72104}.final new file mode 100644 index 0000000..66249cf Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/4/{046d06ed-a011-43ab-8181-98d083a72104}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/4/{2ffb0615-8cda-4295-95a9-a86e96af0404}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/4/{2ffb0615-8cda-4295-95a9-a86e96af0404}.final new file mode 100644 index 0000000..1730252 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/4/{2ffb0615-8cda-4295-95a9-a86e96af0404}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/40/{5f413ecd-1de5-4f5f-9602-d24d39c07f28}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/40/{5f413ecd-1de5-4f5f-9602-d24d39c07f28}.final new file mode 100644 index 0000000..511263f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/40/{5f413ecd-1de5-4f5f-9602-d24d39c07f28}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/40/{a0affd41-126b-423a-9e35-63ef82ec5528}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/40/{a0affd41-126b-423a-9e35-63ef82ec5528}.final new file mode 100644 index 0000000..85d4aa5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/40/{a0affd41-126b-423a-9e35-63ef82ec5528}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/42/{1982e70f-bcaf-47fb-9b0e-ad44704a6f2a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/42/{1982e70f-bcaf-47fb-9b0e-ad44704a6f2a}.final new file mode 100644 index 0000000..0691a9d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/42/{1982e70f-bcaf-47fb-9b0e-ad44704a6f2a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/43/{89be762a-085f-4e86-8551-002bd0408a2b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/43/{89be762a-085f-4e86-8551-002bd0408a2b}.final new file mode 100644 index 0000000..7c55cba Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/43/{89be762a-085f-4e86-8551-002bd0408a2b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/44/{97ca90df-dfc0-45e5-8003-e175c6991f2c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/44/{97ca90df-dfc0-45e5-8003-e175c6991f2c}.final new file mode 100644 index 0000000..e336314 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/44/{97ca90df-dfc0-45e5-8003-e175c6991f2c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/44/{f3f50d0b-373f-4b74-93f4-9ff9f6e4562c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/44/{f3f50d0b-373f-4b74-93f4-9ff9f6e4562c}.final new file mode 100644 index 0000000..aa12ec1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/44/{f3f50d0b-373f-4b74-93f4-9ff9f6e4562c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/45/{0c050a5f-47ca-4acf-869a-ad6db3c72e2d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/45/{0c050a5f-47ca-4acf-869a-ad6db3c72e2d}.final new file mode 100644 index 0000000..04af460 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/45/{0c050a5f-47ca-4acf-869a-ad6db3c72e2d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/45/{27874daf-12c9-4d26-b6e2-d863ffc3f72d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/45/{27874daf-12c9-4d26-b6e2-d863ffc3f72d}.final new file mode 100644 index 0000000..2521bed Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/45/{27874daf-12c9-4d26-b6e2-d863ffc3f72d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/46/{475fa914-29ab-4d10-9134-146781f9be2e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/46/{475fa914-29ab-4d10-9134-146781f9be2e}.final new file mode 100644 index 0000000..f799771 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/46/{475fa914-29ab-4d10-9134-146781f9be2e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/48/{6a294dfe-2a83-49c0-a0e9-828409046030}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/48/{6a294dfe-2a83-49c0-a0e9-828409046030}.final new file mode 100644 index 0000000..2f2c032 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/48/{6a294dfe-2a83-49c0-a0e9-828409046030}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/48/{7e3b1f91-958d-4a19-abb8-97fb055d0330}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/48/{7e3b1f91-958d-4a19-abb8-97fb055d0330}.final new file mode 100644 index 0000000..562eb2a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/48/{7e3b1f91-958d-4a19-abb8-97fb055d0330}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/48/{98b5f7eb-7364-43ab-addc-2e2dfb037530}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/48/{98b5f7eb-7364-43ab-addc-2e2dfb037530}.final new file mode 100644 index 0000000..da8b73c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/48/{98b5f7eb-7364-43ab-addc-2e2dfb037530}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{31344a77-34b4-4583-9de1-ba24223d7a31}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{31344a77-34b4-4583-9de1-ba24223d7a31}.final new file mode 100644 index 0000000..c53c791 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{31344a77-34b4-4583-9de1-ba24223d7a31}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{7b256039-e33b-475a-a35e-44038b8e4431}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{7b256039-e33b-475a-a35e-44038b8e4431}.final new file mode 100644 index 0000000..5d1e058 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{7b256039-e33b-475a-a35e-44038b8e4431}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{a96c19f7-0fe4-4a12-85f6-460ae0993d31}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{a96c19f7-0fe4-4a12-85f6-460ae0993d31}.final new file mode 100644 index 0000000..0ecc371 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{a96c19f7-0fe4-4a12-85f6-460ae0993d31}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{e72d5d6f-5fa8-4dd7-b4b1-a064cd6ca031}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{e72d5d6f-5fa8-4dd7-b4b1-a064cd6ca031}.final new file mode 100644 index 0000000..e186d7b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{e72d5d6f-5fa8-4dd7-b4b1-a064cd6ca031}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{f3af4b5e-b390-4f2c-836d-9c4a6b13b831}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{f3af4b5e-b390-4f2c-836d-9c4a6b13b831}.final new file mode 100644 index 0000000..2e82c37 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/49/{f3af4b5e-b390-4f2c-836d-9c4a6b13b831}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/5/{9e1b59ea-e617-40a4-89fc-1916cf155705}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/5/{9e1b59ea-e617-40a4-89fc-1916cf155705}.final new file mode 100644 index 0000000..108f721 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/5/{9e1b59ea-e617-40a4-89fc-1916cf155705}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{63e8eccc-0b18-48b7-9007-05c3d0682632}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{63e8eccc-0b18-48b7-9007-05c3d0682632}.final new file mode 100644 index 0000000..77ea398 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{63e8eccc-0b18-48b7-9007-05c3d0682632}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{7bfb6866-ba29-4758-87c5-380a8ba8ed32}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{7bfb6866-ba29-4758-87c5-380a8ba8ed32}.final new file mode 100644 index 0000000..74661fb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{7bfb6866-ba29-4758-87c5-380a8ba8ed32}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{a22b3a8f-457c-4fd5-8fb7-709d9cf3d232}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{a22b3a8f-457c-4fd5-8fb7-709d9cf3d232}.final new file mode 100644 index 0000000..4265471 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{a22b3a8f-457c-4fd5-8fb7-709d9cf3d232}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{af8cf57b-8270-4602-a294-3b2ea1ce1c32}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{af8cf57b-8270-4602-a294-3b2ea1ce1c32}.final new file mode 100644 index 0000000..2989407 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/50/{af8cf57b-8270-4602-a294-3b2ea1ce1c32}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/51/{50f07849-3f7b-4a9d-a882-c9c660177633}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/51/{50f07849-3f7b-4a9d-a882-c9c660177633}.final new file mode 100644 index 0000000..d407359 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/51/{50f07849-3f7b-4a9d-a882-c9c660177633}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/52/{01f5c93d-8c0e-430d-9358-39888409e734}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/52/{01f5c93d-8c0e-430d-9358-39888409e734}.final new file mode 100644 index 0000000..336153e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/52/{01f5c93d-8c0e-430d-9358-39888409e734}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/52/{06b2f47c-e8ee-4959-b23a-c946d0475134}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/52/{06b2f47c-e8ee-4959-b23a-c946d0475134}.final new file mode 100644 index 0000000..df982cc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/52/{06b2f47c-e8ee-4959-b23a-c946d0475134}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/52/{9e1b6825-b91b-477e-a5d9-39d30d006134}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/52/{9e1b6825-b91b-477e-a5d9-39d30d006134}.final new file mode 100644 index 0000000..a9b432a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/52/{9e1b6825-b91b-477e-a5d9-39d30d006134}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/53/{000cbc11-8865-4256-bb12-416728018e35}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/53/{000cbc11-8865-4256-bb12-416728018e35}.final new file mode 100644 index 0000000..df4707a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/53/{000cbc11-8865-4256-bb12-416728018e35}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/53/{12a6e5d2-9a51-467e-90f3-6c0ca9b8c035}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/53/{12a6e5d2-9a51-467e-90f3-6c0ca9b8c035}.final new file mode 100644 index 0000000..60920f0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/53/{12a6e5d2-9a51-467e-90f3-6c0ca9b8c035}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/54/{534b9917-56dc-4b1c-921e-df6eaa697f36}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/54/{534b9917-56dc-4b1c-921e-df6eaa697f36}.final new file mode 100644 index 0000000..35bc851 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/54/{534b9917-56dc-4b1c-921e-df6eaa697f36}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/54/{690f4d36-db17-4efb-b9c8-bf8f2fa54636}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/54/{690f4d36-db17-4efb-b9c8-bf8f2fa54636}.final new file mode 100644 index 0000000..ce7c0cd Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/54/{690f4d36-db17-4efb-b9c8-bf8f2fa54636}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/54/{97e7fa66-7603-4881-956b-7b26cd0c2936}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/54/{97e7fa66-7603-4881-956b-7b26cd0c2936}.final new file mode 100644 index 0000000..c40cf59 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/54/{97e7fa66-7603-4881-956b-7b26cd0c2936}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/55/{2aea5757-d0fa-45b3-a14b-0085b151ff37}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/55/{2aea5757-d0fa-45b3-a14b-0085b151ff37}.final new file mode 100644 index 0000000..7734b23 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/55/{2aea5757-d0fa-45b3-a14b-0085b151ff37}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/55/{ed261182-4d2d-4642-b66a-b3c607b11437}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/55/{ed261182-4d2d-4642-b66a-b3c607b11437}.final new file mode 100644 index 0000000..49fad73 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/55/{ed261182-4d2d-4642-b66a-b3c607b11437}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/56/{39e477dc-3e40-4c94-b743-9d299e193138}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/56/{39e477dc-3e40-4c94-b743-9d299e193138}.final new file mode 100644 index 0000000..5e22dfb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/56/{39e477dc-3e40-4c94-b743-9d299e193138}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/59/{cbf2a8c6-a804-4ca2-b190-760653e1183b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/59/{cbf2a8c6-a804-4ca2-b190-760653e1183b}.final new file mode 100644 index 0000000..6556335 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/59/{cbf2a8c6-a804-4ca2-b190-760653e1183b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/6/{27917882-ef77-4901-a09b-96d6d07c5a06}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/6/{27917882-ef77-4901-a09b-96d6d07c5a06}.final new file mode 100644 index 0000000..b427ba5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/6/{27917882-ef77-4901-a09b-96d6d07c5a06}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/60/{11f425d7-c853-45db-99b1-a80b11898f3c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/60/{11f425d7-c853-45db-99b1-a80b11898f3c}.final new file mode 100644 index 0000000..fb7040f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/60/{11f425d7-c853-45db-99b1-a80b11898f3c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/61/{37b4668a-f4a3-44ef-aaf4-c20255058a3d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/61/{37b4668a-f4a3-44ef-aaf4-c20255058a3d}.final new file mode 100644 index 0000000..7b7777b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/61/{37b4668a-f4a3-44ef-aaf4-c20255058a3d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/61/{db448eda-5d3e-4070-8c73-6072536fa33d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/61/{db448eda-5d3e-4070-8c73-6072536fa33d}.final new file mode 100644 index 0000000..23d742f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/61/{db448eda-5d3e-4070-8c73-6072536fa33d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/62/{b9aef475-8f08-4b51-bad7-06e08f7ea43e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/62/{b9aef475-8f08-4b51-bad7-06e08f7ea43e}.final new file mode 100644 index 0000000..fef4ae0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/62/{b9aef475-8f08-4b51-bad7-06e08f7ea43e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/64/{1549c2ba-04ee-4c3b-8588-85b4afedae40}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/64/{1549c2ba-04ee-4c3b-8588-85b4afedae40}.final new file mode 100644 index 0000000..213dbfc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/64/{1549c2ba-04ee-4c3b-8588-85b4afedae40}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/64/{329cd5ee-ebc5-474a-b832-9480d827e840}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/64/{329cd5ee-ebc5-474a-b832-9480d827e840}.final new file mode 100644 index 0000000..76f016f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/64/{329cd5ee-ebc5-474a-b832-9480d827e840}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/64/{476e80f5-acd3-438d-96b0-b408bb87a040}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/64/{476e80f5-acd3-438d-96b0-b408bb87a040}.final new file mode 100644 index 0000000..b7a6889 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/64/{476e80f5-acd3-438d-96b0-b408bb87a040}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/65/{097f3fce-1a18-49ce-a4b7-0736828e7341}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/65/{097f3fce-1a18-49ce-a4b7-0736828e7341}.final new file mode 100644 index 0000000..fcc4b51 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/65/{097f3fce-1a18-49ce-a4b7-0736828e7341}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/65/{93ec5b88-d462-4119-b583-7481283ef241}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/65/{93ec5b88-d462-4119-b583-7481283ef241}.final new file mode 100644 index 0000000..089b7a3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/65/{93ec5b88-d462-4119-b583-7481283ef241}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/65/{ddf5673f-f18b-4feb-a3b0-16e1f3037441}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/65/{ddf5673f-f18b-4feb-a3b0-16e1f3037441}.final new file mode 100644 index 0000000..81bc375 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/65/{ddf5673f-f18b-4feb-a3b0-16e1f3037441}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/66/{6c324afb-da9e-45b4-8c73-835b9213c042}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/66/{6c324afb-da9e-45b4-8c73-835b9213c042}.final new file mode 100644 index 0000000..c10ed37 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/66/{6c324afb-da9e-45b4-8c73-835b9213c042}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/67/{d0edc9d1-9b1c-4303-ae64-eb044c293943}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/67/{d0edc9d1-9b1c-4303-ae64-eb044c293943}.final new file mode 100644 index 0000000..3d347ef Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/67/{d0edc9d1-9b1c-4303-ae64-eb044c293943}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{50f20191-1b0b-4d19-b3f5-4cd091174444}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{50f20191-1b0b-4d19-b3f5-4cd091174444}.final new file mode 100644 index 0000000..61183a8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{50f20191-1b0b-4d19-b3f5-4cd091174444}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{54370831-81d3-44bc-af4b-a554fdb69544}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{54370831-81d3-44bc-af4b-a554fdb69544}.final new file mode 100644 index 0000000..26bfcfb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{54370831-81d3-44bc-af4b-a554fdb69544}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{914177d3-86be-49c8-80eb-ff315f3cf844}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{914177d3-86be-49c8-80eb-ff315f3cf844}.final new file mode 100644 index 0000000..6ec3494 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{914177d3-86be-49c8-80eb-ff315f3cf844}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{f22d0afb-c5cb-480f-a36a-0aa85ffd4044}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{f22d0afb-c5cb-480f-a36a-0aa85ffd4044}.final new file mode 100644 index 0000000..0579958 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/68/{f22d0afb-c5cb-480f-a36a-0aa85ffd4044}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/7/{021dab80-e051-4ede-9315-161f8b630107}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/7/{021dab80-e051-4ede-9315-161f8b630107}.final new file mode 100644 index 0000000..4918351 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/7/{021dab80-e051-4ede-9315-161f8b630107}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/71/{3571304f-e89e-43be-9e52-b090e782ac47}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/71/{3571304f-e89e-43be-9e52-b090e782ac47}.final new file mode 100644 index 0000000..84268c8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/71/{3571304f-e89e-43be-9e52-b090e782ac47}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/72/{688f18c7-3f5a-41ad-a11f-6a591c835b48}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/72/{688f18c7-3f5a-41ad-a11f-6a591c835b48}.final new file mode 100644 index 0000000..9b0b870 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/72/{688f18c7-3f5a-41ad-a11f-6a591c835b48}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/74/{6c390029-58d3-4903-b23a-88ca4e72954a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/74/{6c390029-58d3-4903-b23a-88ca4e72954a}.final new file mode 100644 index 0000000..72f9d97 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/74/{6c390029-58d3-4903-b23a-88ca4e72954a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/74/{f460f1cd-0b57-485d-9d88-eede05f6144a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/74/{f460f1cd-0b57-485d-9d88-eede05f6144a}.final new file mode 100644 index 0000000..7a661e0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/74/{f460f1cd-0b57-485d-9d88-eede05f6144a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/75/{8886f431-e318-4ff2-ba2d-9d54f83e1f4b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/75/{8886f431-e318-4ff2-ba2d-9d54f83e1f4b}.final new file mode 100644 index 0000000..cd83f11 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/75/{8886f431-e318-4ff2-ba2d-9d54f83e1f4b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/76/{d3e2df49-4e4d-45e2-8bae-9a44a1fe054c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/76/{d3e2df49-4e4d-45e2-8bae-9a44a1fe054c}.final new file mode 100644 index 0000000..ebc0061 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/76/{d3e2df49-4e4d-45e2-8bae-9a44a1fe054c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/77/{edd8a12e-ff95-40e9-93ad-fb0c5552fe4d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/77/{edd8a12e-ff95-40e9-93ad-fb0c5552fe4d}.final new file mode 100644 index 0000000..e57d105 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/77/{edd8a12e-ff95-40e9-93ad-fb0c5552fe4d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/79/{44aff87a-aae7-4ac3-828d-e3c6e801744f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/79/{44aff87a-aae7-4ac3-828d-e3c6e801744f}.final new file mode 100644 index 0000000..6f3a37d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/79/{44aff87a-aae7-4ac3-828d-e3c6e801744f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/79/{5e93a87e-c0d6-4984-8a42-ccf1d190bd4f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/79/{5e93a87e-c0d6-4984-8a42-ccf1d190bd4f}.final new file mode 100644 index 0000000..266b4b7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/79/{5e93a87e-c0d6-4984-8a42-ccf1d190bd4f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/79/{638184b0-fd44-48b1-b474-2421fb15274f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/79/{638184b0-fd44-48b1-b474-2421fb15274f}.final new file mode 100644 index 0000000..7a92e57 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/79/{638184b0-fd44-48b1-b474-2421fb15274f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/8/{9a678210-53be-4659-8a26-bc31efc74908}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/8/{9a678210-53be-4659-8a26-bc31efc74908}.final new file mode 100644 index 0000000..3c064e1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/8/{9a678210-53be-4659-8a26-bc31efc74908}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{02e41725-b195-4145-8cab-3b71c8f27c50}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{02e41725-b195-4145-8cab-3b71c8f27c50}.final new file mode 100644 index 0000000..a71fe19 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{02e41725-b195-4145-8cab-3b71c8f27c50}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{22adcb25-1e7c-4e45-82eb-710276837350}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{22adcb25-1e7c-4e45-82eb-710276837350}.final new file mode 100644 index 0000000..0189231 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{22adcb25-1e7c-4e45-82eb-710276837350}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{e1012062-fe6e-4eeb-9b60-4d3f27f5ca50}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{e1012062-fe6e-4eeb-9b60-4d3f27f5ca50}.final new file mode 100644 index 0000000..359fa85 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{e1012062-fe6e-4eeb-9b60-4d3f27f5ca50}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{f6bb9595-56a0-4fd3-8427-35815aecaa50}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{f6bb9595-56a0-4fd3-8427-35815aecaa50}.final new file mode 100644 index 0000000..6ca9a6b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/80/{f6bb9595-56a0-4fd3-8427-35815aecaa50}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{1360ff1f-0fc3-4295-8816-1d7b49223451}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{1360ff1f-0fc3-4295-8816-1d7b49223451}.final new file mode 100644 index 0000000..347c0c5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{1360ff1f-0fc3-4295-8816-1d7b49223451}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{7a67ce61-2ea3-4a39-847e-2eecc05ad251}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{7a67ce61-2ea3-4a39-847e-2eecc05ad251}.final new file mode 100644 index 0000000..a7fdda8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{7a67ce61-2ea3-4a39-847e-2eecc05ad251}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{a60d6284-3252-47c6-bcdd-66c7ad8bbb51}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{a60d6284-3252-47c6-bcdd-66c7ad8bbb51}.final new file mode 100644 index 0000000..1fcab60 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{a60d6284-3252-47c6-bcdd-66c7ad8bbb51}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{d659741e-95bf-4baf-8d95-85734644df51}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{d659741e-95bf-4baf-8d95-85734644df51}.final new file mode 100644 index 0000000..c4cafc7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{d659741e-95bf-4baf-8d95-85734644df51}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{f0225684-6cec-48bf-b5da-34838222ad51}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{f0225684-6cec-48bf-b5da-34838222ad51}.final new file mode 100644 index 0000000..b28757c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/81/{f0225684-6cec-48bf-b5da-34838222ad51}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/82/{32faa3f6-fdc1-4fd4-bcc5-7705e29dc352}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/82/{32faa3f6-fdc1-4fd4-bcc5-7705e29dc352}.final new file mode 100644 index 0000000..3938d1d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/82/{32faa3f6-fdc1-4fd4-bcc5-7705e29dc352}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/82/{4a9fb773-c4f2-4500-ba0b-fc15cbe71752}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/82/{4a9fb773-c4f2-4500-ba0b-fc15cbe71752}.final new file mode 100644 index 0000000..d013831 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/82/{4a9fb773-c4f2-4500-ba0b-fc15cbe71752}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/82/{7c723301-a532-4a39-9cef-721fafcfc252}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/82/{7c723301-a532-4a39-9cef-721fafcfc252}.final new file mode 100644 index 0000000..96effc1 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/82/{7c723301-a532-4a39-9cef-721fafcfc252}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{14f9d880-18c1-4cd3-b42a-95b6b17f9f55}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{14f9d880-18c1-4cd3-b42a-95b6b17f9f55}.final new file mode 100644 index 0000000..addbf82 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{14f9d880-18c1-4cd3-b42a-95b6b17f9f55}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{486f86b5-52a8-40dc-87c0-c76674d63355}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{486f86b5-52a8-40dc-87c0-c76674d63355}.final new file mode 100644 index 0000000..8d8c6c9 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{486f86b5-52a8-40dc-87c0-c76674d63355}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{82cdcb89-d64a-400a-9b8b-97a30d1b6255}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{82cdcb89-d64a-400a-9b8b-97a30d1b6255}.final new file mode 100644 index 0000000..5d1e79f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{82cdcb89-d64a-400a-9b8b-97a30d1b6255}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{906c5f01-abf6-4016-85b0-145e76c68e55}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{906c5f01-abf6-4016-85b0-145e76c68e55}.final new file mode 100644 index 0000000..6874925 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{906c5f01-abf6-4016-85b0-145e76c68e55}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{e99376ec-2447-4301-bd6f-5e1ac0683155}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{e99376ec-2447-4301-bd6f-5e1ac0683155}.final new file mode 100644 index 0000000..c693981 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/85/{e99376ec-2447-4301-bd6f-5e1ac0683155}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/86/{ab170ead-ee46-4c77-a962-7f292251c956}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/86/{ab170ead-ee46-4c77-a962-7f292251c956}.final new file mode 100644 index 0000000..fcb4a0b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/86/{ab170ead-ee46-4c77-a962-7f292251c956}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/87/{35c0ec7f-f3b7-4a7a-9359-d38439ea8157}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/87/{35c0ec7f-f3b7-4a7a-9359-d38439ea8157}.final new file mode 100644 index 0000000..68a7fcb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/87/{35c0ec7f-f3b7-4a7a-9359-d38439ea8157}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/87/{66d3bdff-de4c-423e-ac3c-997b03b96a57}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/87/{66d3bdff-de4c-423e-ac3c-997b03b96a57}.final new file mode 100644 index 0000000..fdc97fe Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/87/{66d3bdff-de4c-423e-ac3c-997b03b96a57}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/88/{27484ce5-e8b7-4c79-9462-a6cb9bb43358}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/88/{27484ce5-e8b7-4c79-9462-a6cb9bb43358}.final new file mode 100644 index 0000000..39d119f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/88/{27484ce5-e8b7-4c79-9462-a6cb9bb43358}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/88/{6d45ee06-d4dc-414a-9a27-602d69187558}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/88/{6d45ee06-d4dc-414a-9a27-602d69187558}.final new file mode 100644 index 0000000..07422da Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/88/{6d45ee06-d4dc-414a-9a27-602d69187558}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/89/{22f7004d-0c10-4e50-b863-27a4ab3d6359}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/89/{22f7004d-0c10-4e50-b863-27a4ab3d6359}.final new file mode 100644 index 0000000..2a7930e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/89/{22f7004d-0c10-4e50-b863-27a4ab3d6359}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/89/{30ef7d23-637c-4262-998b-38053730ea59}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/89/{30ef7d23-637c-4262-998b-38053730ea59}.final new file mode 100644 index 0000000..6508ffa Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/89/{30ef7d23-637c-4262-998b-38053730ea59}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/9/{395097e3-1e18-46b7-9034-d98eda00f709}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/9/{395097e3-1e18-46b7-9034-d98eda00f709}.final new file mode 100644 index 0000000..eccc949 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/9/{395097e3-1e18-46b7-9034-d98eda00f709}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/9/{6ab7ef05-d51e-4f05-ab9c-9018c4093f09}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/9/{6ab7ef05-d51e-4f05-ab9c-9018c4093f09}.final new file mode 100644 index 0000000..b7493f2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/9/{6ab7ef05-d51e-4f05-ab9c-9018c4093f09}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/9/{f4e1aee6-53f1-4a8a-bf21-e701d10e0b09}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/9/{f4e1aee6-53f1-4a8a-bf21-e701d10e0b09}.final new file mode 100644 index 0000000..04cfdbb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/9/{f4e1aee6-53f1-4a8a-bf21-e701d10e0b09}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/90/{4f638e13-a585-472f-af56-9d2adac0f75a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/90/{4f638e13-a585-472f-af56-9d2adac0f75a}.final new file mode 100644 index 0000000..4f662d8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/90/{4f638e13-a585-472f-af56-9d2adac0f75a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/91/{29e0aad7-49e1-46ad-939d-1acb6a46ea5b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/91/{29e0aad7-49e1-46ad-939d-1acb6a46ea5b}.final new file mode 100644 index 0000000..9a1db68 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/91/{29e0aad7-49e1-46ad-939d-1acb6a46ea5b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/91/{9b8c25d3-04ae-4025-badc-9acb27cfdf5b}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/91/{9b8c25d3-04ae-4025-badc-9acb27cfdf5b}.final new file mode 100644 index 0000000..612ed6c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/91/{9b8c25d3-04ae-4025-badc-9acb27cfdf5b}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/92/{8f9d1549-9ce5-4a2a-a548-1110871e785c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/92/{8f9d1549-9ce5-4a2a-a548-1110871e785c}.final new file mode 100644 index 0000000..e11cd5b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/92/{8f9d1549-9ce5-4a2a-a548-1110871e785c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/92/{9a938067-19c2-430e-b305-54b5efaf735c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/92/{9a938067-19c2-430e-b305-54b5efaf735c}.final new file mode 100644 index 0000000..5159465 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/92/{9a938067-19c2-430e-b305-54b5efaf735c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/93/{250f34c3-2300-412c-827c-e43aad98255d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/93/{250f34c3-2300-412c-827c-e43aad98255d}.final new file mode 100644 index 0000000..0a0f2ea Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/93/{250f34c3-2300-412c-827c-e43aad98255d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/93/{5e1d1a64-54e1-4132-bd42-0b3f64a5d75d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/93/{5e1d1a64-54e1-4132-bd42-0b3f64a5d75d}.final new file mode 100644 index 0000000..b11a707 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/93/{5e1d1a64-54e1-4132-bd42-0b3f64a5d75d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/94/{f3f64661-e25f-4da1-9ca9-030424ab9f5e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/94/{f3f64661-e25f-4da1-9ca9-030424ab9f5e}.final new file mode 100644 index 0000000..9984363 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/94/{f3f64661-e25f-4da1-9ca9-030424ab9f5e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/95/{ddc65681-2f11-40cc-9d7d-1d94e156195f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/95/{ddc65681-2f11-40cc-9d7d-1d94e156195f}.final new file mode 100644 index 0000000..90acbeb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/95/{ddc65681-2f11-40cc-9d7d-1d94e156195f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/95/{eb99c74a-d63d-444d-873f-bcaefdf6105f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/95/{eb99c74a-d63d-444d-873f-bcaefdf6105f}.final new file mode 100644 index 0000000..fe156da Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/95/{eb99c74a-d63d-444d-873f-bcaefdf6105f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/96/{77db5cb5-709c-44b3-bab2-f92d8680a160}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/96/{77db5cb5-709c-44b3-bab2-f92d8680a160}.final new file mode 100644 index 0000000..bf0b747 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/96/{77db5cb5-709c-44b3-bab2-f92d8680a160}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/96/{b02ac173-4885-420d-90e5-11a35bb54f60}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/96/{b02ac173-4885-420d-90e5-11a35bb54f60}.final new file mode 100644 index 0000000..3a2443a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/96/{b02ac173-4885-420d-90e5-11a35bb54f60}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/96/{d75389df-72fe-4fbe-9479-792bf48ecd60}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/96/{d75389df-72fe-4fbe-9479-792bf48ecd60}.final new file mode 100644 index 0000000..8d9181d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/96/{d75389df-72fe-4fbe-9479-792bf48ecd60}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/97/{1b655c9f-537f-45e5-a270-85d515c41761}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/97/{1b655c9f-537f-45e5-a270-85d515c41761}.final new file mode 100644 index 0000000..4bd775a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/97/{1b655c9f-537f-45e5-a270-85d515c41761}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/98/{bf9fdc95-4bd6-4b37-a85d-ab81beebf362}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/98/{bf9fdc95-4bd6-4b37-a85d-ab81beebf362}.final new file mode 100644 index 0000000..97274c5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/cache/morgue/98/{bf9fdc95-4bd6-4b37-a85d-ab81beebf362}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/idb/2728594770keeryovtasl-.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/idb/2728594770keeryovtasl-.sqlite new file mode 100644 index 0000000..be94fca Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/idb/2728594770keeryovtasl-.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/ls/data.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/ls/data.sqlite new file mode 100644 index 0000000..9bc596c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/ls/data.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/ls/usage b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/ls/usage new file mode 100644 index 0000000..1864887 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++web.telegram.org/ls/usage differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/.metadata-v2 new file mode 100644 index 0000000..369dd8a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/cache/.padding b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/cache/.padding new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/cache/.padding differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/cache/caches.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/cache/caches.sqlite new file mode 100644 index 0000000..686a6ea Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/cache/caches.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/cache/morgue/205/{9edee94b-c097-41a0-a977-651be27d1fcd}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/cache/morgue/205/{9edee94b-c097-41a0-a977-651be27d1fcd}.final new file mode 100644 index 0000000..6faf078 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/cache/morgue/205/{9edee94b-c097-41a0-a977-651be27d1fcd}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/idb/3762387619iBnDddiegxietdanlil..sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/idb/3762387619iBnDddiegxietdanlil..sqlite new file mode 100644 index 0000000..c113179 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/idb/3762387619iBnDddiegxietdanlil..sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/ls/data.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/ls/data.sqlite new file mode 100644 index 0000000..839be86 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/ls/data.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/ls/usage b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/ls/usage new file mode 100644 index 0000000..791ad85 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.elespanol.com/ls/usage differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/.metadata-v2 new file mode 100644 index 0000000..60a6282 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/.padding b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/.padding new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/.padding differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/caches.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/caches.sqlite new file mode 100644 index 0000000..3b002fb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/caches.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/10/{28c4539c-874a-4967-88e9-8b79787de40a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/10/{28c4539c-874a-4967-88e9-8b79787de40a}.final new file mode 100644 index 0000000..d5f3f77 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/10/{28c4539c-874a-4967-88e9-8b79787de40a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/112/{eb64a7af-4ccc-4686-9b5f-61f0bfdbc970}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/112/{eb64a7af-4ccc-4686-9b5f-61f0bfdbc970}.final new file mode 100644 index 0000000..829565b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/112/{eb64a7af-4ccc-4686-9b5f-61f0bfdbc970}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/12/{cb8201f7-9780-4b6f-be20-a5b912aa590c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/12/{cb8201f7-9780-4b6f-be20-a5b912aa590c}.final new file mode 100644 index 0000000..c55423f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/12/{cb8201f7-9780-4b6f-be20-a5b912aa590c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/12/{ecb1f603-6526-414e-94e3-ac9f5d9b710c}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/12/{ecb1f603-6526-414e-94e3-ac9f5d9b710c}.final new file mode 100644 index 0000000..2d8110f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/12/{ecb1f603-6526-414e-94e3-ac9f5d9b710c}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/122/{33512351-c6bf-4140-965f-50612f2a587a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/122/{33512351-c6bf-4140-965f-50612f2a587a}.final new file mode 100644 index 0000000..82bd078 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/122/{33512351-c6bf-4140-965f-50612f2a587a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/128/{7a7a9046-8df0-4a01-81bd-1051e2933c80}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/128/{7a7a9046-8df0-4a01-81bd-1051e2933c80}.final new file mode 100644 index 0000000..1945828 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/128/{7a7a9046-8df0-4a01-81bd-1051e2933c80}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/131/{acb89b09-a36f-4179-b1fc-70da187a9f83}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/131/{acb89b09-a36f-4179-b1fc-70da187a9f83}.final new file mode 100644 index 0000000..9dc4f18 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/131/{acb89b09-a36f-4179-b1fc-70da187a9f83}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/144/{de41876f-87ea-4ca1-a204-01435d821290}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/144/{de41876f-87ea-4ca1-a204-01435d821290}.final new file mode 100644 index 0000000..dd641ee Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/144/{de41876f-87ea-4ca1-a204-01435d821290}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/159/{dbefd6ad-e537-4bb7-8a3e-ebe7e260769f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/159/{dbefd6ad-e537-4bb7-8a3e-ebe7e260769f}.final new file mode 100644 index 0000000..ca4fdc5 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/159/{dbefd6ad-e537-4bb7-8a3e-ebe7e260769f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/163/{b4611108-9962-455e-aa56-f3c708a92ea3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/163/{b4611108-9962-455e-aa56-f3c708a92ea3}.final new file mode 100644 index 0000000..7c0c071 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/163/{b4611108-9962-455e-aa56-f3c708a92ea3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/171/{767f7c38-56a9-46c9-939f-9d3d19afe8ab}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/171/{767f7c38-56a9-46c9-939f-9d3d19afe8ab}.final new file mode 100644 index 0000000..d583b7f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/171/{767f7c38-56a9-46c9-939f-9d3d19afe8ab}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/172/{cba851c1-d335-4132-81f3-c17b55603cac}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/172/{cba851c1-d335-4132-81f3-c17b55603cac}.final new file mode 100644 index 0000000..01c577f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/172/{cba851c1-d335-4132-81f3-c17b55603cac}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/18/{651b712a-928c-46ee-9651-0c65ba8fa612}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/18/{651b712a-928c-46ee-9651-0c65ba8fa612}.final new file mode 100644 index 0000000..a1f674a Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/18/{651b712a-928c-46ee-9651-0c65ba8fa612}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/181/{5ccd3c4a-7182-486e-94c8-ae47c7fe9cb5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/181/{5ccd3c4a-7182-486e-94c8-ae47c7fe9cb5}.final new file mode 100644 index 0000000..8e736de Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/181/{5ccd3c4a-7182-486e-94c8-ae47c7fe9cb5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/183/{dfe3fd97-e6ca-437f-9ba3-d46864a85ab7}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/183/{dfe3fd97-e6ca-437f-9ba3-d46864a85ab7}.final new file mode 100644 index 0000000..6fc8887 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/183/{dfe3fd97-e6ca-437f-9ba3-d46864a85ab7}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/197/{d78006ca-3b3c-442a-8d20-b64c6332fbc5}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/197/{d78006ca-3b3c-442a-8d20-b64c6332fbc5}.final new file mode 100644 index 0000000..31dcc13 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/197/{d78006ca-3b3c-442a-8d20-b64c6332fbc5}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/2/{2757ba72-0859-4231-87f3-b790ff9c9702}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/2/{2757ba72-0859-4231-87f3-b790ff9c9702}.final new file mode 100644 index 0000000..7b67294 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/2/{2757ba72-0859-4231-87f3-b790ff9c9702}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/200/{f116ecc5-1af1-457a-b11e-b89002feaec8}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/200/{f116ecc5-1af1-457a-b11e-b89002feaec8}.final new file mode 100644 index 0000000..df09ef0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/200/{f116ecc5-1af1-457a-b11e-b89002feaec8}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/238/{65638980-c9bf-402c-8a6f-91efb89a58ee}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/238/{65638980-c9bf-402c-8a6f-91efb89a58ee}.final new file mode 100644 index 0000000..24fa2d7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/238/{65638980-c9bf-402c-8a6f-91efb89a58ee}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/243/{a9579537-165d-4784-91a8-e45be411acf3}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/243/{a9579537-165d-4784-91a8-e45be411acf3}.final new file mode 100644 index 0000000..17c8966 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/243/{a9579537-165d-4784-91a8-e45be411acf3}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/252/{257395d3-cfe7-4e31-811f-c9a16e299bfc}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/252/{257395d3-cfe7-4e31-811f-c9a16e299bfc}.final new file mode 100644 index 0000000..6860c2b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/252/{257395d3-cfe7-4e31-811f-c9a16e299bfc}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/39/{ea0394e5-0f11-4b7a-a200-420e2cc03427}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/39/{ea0394e5-0f11-4b7a-a200-420e2cc03427}.final new file mode 100644 index 0000000..5bb605d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/39/{ea0394e5-0f11-4b7a-a200-420e2cc03427}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/46/{f301c125-3aef-454a-8375-4300cfbc712e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/46/{f301c125-3aef-454a-8375-4300cfbc712e}.final new file mode 100644 index 0000000..1100244 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/46/{f301c125-3aef-454a-8375-4300cfbc712e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/6/{dbc596fc-26f1-4337-a40a-86b02ad22006}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/6/{dbc596fc-26f1-4337-a40a-86b02ad22006}.final new file mode 100644 index 0000000..774d7fa Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/6/{dbc596fc-26f1-4337-a40a-86b02ad22006}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/63/{9ea5611c-f900-46b5-b0b4-0486a8e41a3f}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/63/{9ea5611c-f900-46b5-b0b4-0486a8e41a3f}.final new file mode 100644 index 0000000..5a7947d Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/63/{9ea5611c-f900-46b5-b0b4-0486a8e41a3f}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/74/{32d4d726-68fa-4df1-9eae-0e5a5016874a}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/74/{32d4d726-68fa-4df1-9eae-0e5a5016874a}.final new file mode 100644 index 0000000..3d5ddcc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/74/{32d4d726-68fa-4df1-9eae-0e5a5016874a}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/77/{42a37365-cf9d-4f16-9d85-2dd7997b364d}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/77/{42a37365-cf9d-4f16-9d85-2dd7997b364d}.final new file mode 100644 index 0000000..5fd3efc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/77/{42a37365-cf9d-4f16-9d85-2dd7997b364d}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/83/{d24a91a2-b58c-45c6-8fbc-598163146253}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/83/{d24a91a2-b58c-45c6-8fbc-598163146253}.final new file mode 100644 index 0000000..d818bcc Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/83/{d24a91a2-b58c-45c6-8fbc-598163146253}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/94/{5bf46fe2-67ba-440b-8203-b14dd001925e}.final b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/94/{5bf46fe2-67ba-440b-8203-b14dd001925e}.final new file mode 100644 index 0000000..d9fc219 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/cache/morgue/94/{5bf46fe2-67ba-440b-8203-b14dd001925e}.final differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/2396162628fsotn.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/2396162628fsotn.sqlite new file mode 100644 index 0000000..4f16a38 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/2396162628fsotn.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/301792106ttes.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/301792106ttes.sqlite new file mode 100644 index 0000000..2a2667e Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/301792106ttes.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/3063226187js.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/3063226187js.sqlite new file mode 100644 index 0000000..c321ac7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/3063226187js.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/463420933css.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/463420933css.sqlite new file mode 100644 index 0000000..c4fe363 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/idb/463420933css.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/ls/data.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/ls/data.sqlite new file mode 100644 index 0000000..5b53bdd Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/ls/data.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/ls/usage b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/ls/usage new file mode 100644 index 0000000..743ab03 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.gmx.es/ls/usage differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.google.com/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.google.com/.metadata-v2 new file mode 100644 index 0000000..92630e0 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.google.com/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.google.com/ls/data.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.google.com/ls/data.sqlite new file mode 100644 index 0000000..f91d1eb Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.google.com/ls/data.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.google.com/ls/usage b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.google.com/ls/usage new file mode 100644 index 0000000..d4fc911 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.google.com/ls/usage differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/.metadata-v2 new file mode 100644 index 0000000..8327839 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/idb/2171031483YattIedMb.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/idb/2171031483YattIedMb.sqlite new file mode 100644 index 0000000..fabd786 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/idb/2171031483YattIedMb.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/idb/2758499117LCo7g%sCD7a%t0acb3a6s.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/idb/2758499117LCo7g%sCD7a%t0acb3a6s.sqlite new file mode 100644 index 0000000..abfda5f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/idb/2758499117LCo7g%sCD7a%t0acb3a6s.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/ls/data.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/ls/data.sqlite new file mode 100644 index 0000000..30e90d2 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/ls/data.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/ls/usage b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/ls/usage new file mode 100644 index 0000000..d3f5915 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/default/https+++www.youtube.com^partitionKey=%28https%2Cgoogle.com%29/ls/usage differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/ls-archive.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/ls-archive.sqlite new file mode 100644 index 0000000..5b61ea7 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/ls-archive.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/.metadata-v2 b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/.metadata-v2 new file mode 100644 index 0000000..e018401 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/.metadata-v2 differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/1451318868ntouromlalnodry--epcr.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/1451318868ntouromlalnodry--epcr.sqlite new file mode 100644 index 0000000..18109b3 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/1451318868ntouromlalnodry--epcr.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/1657114595AmcateirvtiSty.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/1657114595AmcateirvtiSty.sqlite new file mode 100644 index 0000000..4a0a71c Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/1657114595AmcateirvtiSty.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/2823318777ntouromlalnodry--naod.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/2823318777ntouromlalnodry--naod.sqlite new file mode 100644 index 0000000..8da5970 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/2823318777ntouromlalnodry--naod.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/2918063365piupsah.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/2918063365piupsah.sqlite new file mode 100644 index 0000000..06f1de6 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/2918063365piupsah.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/3561288849sdhlie.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/3561288849sdhlie.sqlite new file mode 100644 index 0000000..ecf3c9b Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/3561288849sdhlie.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/3870112724rsegmnoittet-es.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/3870112724rsegmnoittet-es.sqlite new file mode 100644 index 0000000..9cb0c4f Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/storage/permanent/chrome/idb/3870112724rsegmnoittet-es.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/times.json b/home/.mozilla/firefox/alce0sf5.default-default/times.json new file mode 100755 index 0000000..fa13249 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/times.json @@ -0,0 +1 @@ +{"created":1673107548974,"firstUse":1673107550091} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/weave/failed/tabs.json b/home/.mozilla/firefox/alce0sf5.default-default/weave/failed/tabs.json new file mode 100644 index 0000000..3d2195f --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/weave/failed/tabs.json @@ -0,0 +1 @@ +{"ids":[]} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/weave/toFetch/tabs.json b/home/.mozilla/firefox/alce0sf5.default-default/weave/toFetch/tabs.json new file mode 100644 index 0000000..3d2195f --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/weave/toFetch/tabs.json @@ -0,0 +1 @@ +{"ids":[]} \ No newline at end of file diff --git a/home/.mozilla/firefox/alce0sf5.default-default/webappsstore.sqlite b/home/.mozilla/firefox/alce0sf5.default-default/webappsstore.sqlite new file mode 100644 index 0000000..4ec8ee8 Binary files /dev/null and b/home/.mozilla/firefox/alce0sf5.default-default/webappsstore.sqlite differ diff --git a/home/.mozilla/firefox/alce0sf5.default-default/xulstore.json b/home/.mozilla/firefox/alce0sf5.default-default/xulstore.json new file mode 100644 index 0000000..baaea03 --- /dev/null +++ b/home/.mozilla/firefox/alce0sf5.default-default/xulstore.json @@ -0,0 +1 @@ +{"chrome://browser/content/browser.xhtml":{"main-window":{"sizemode":"maximized"},"sidebar-box":{"style":"--sidebar-background-color: rgb(40, 40, 40); --sidebar-text-color: rgb(206, 206, 206);","sidebarcommand":""},"sidebar-title":{"value":""}}} \ No newline at end of file diff --git a/home/.mozilla/firefox/d4cnglr2.default/times.json b/home/.mozilla/firefox/d4cnglr2.default/times.json new file mode 100755 index 0000000..0c93719 --- /dev/null +++ b/home/.mozilla/firefox/d4cnglr2.default/times.json @@ -0,0 +1,4 @@ +{ +"created": 1673107548974, +"firstUse": null +} diff --git a/home/.mozilla/firefox/installs.ini b/home/.mozilla/firefox/installs.ini new file mode 100644 index 0000000..a2a395f --- /dev/null +++ b/home/.mozilla/firefox/installs.ini @@ -0,0 +1,4 @@ +[4F96D1932A9F858E] +Default=alce0sf5.default-default +Locked=1 + diff --git a/home/.mozilla/firefox/profiles.ini b/home/.mozilla/firefox/profiles.ini new file mode 100644 index 0000000..622d747 --- /dev/null +++ b/home/.mozilla/firefox/profiles.ini @@ -0,0 +1,19 @@ +[Install4F96D1932A9F858E] +Default=alce0sf5.default-default +Locked=1 + +[Profile1] +Name=default +IsRelative=1 +Path=d4cnglr2.default +Default=1 + +[Profile0] +Name=default-default +IsRelative=1 +Path=alce0sf5.default-default + +[General] +StartWithLastProfile=1 +Version=2 + diff --git a/home/.plantillas_latex/FIRMALUCHO.png b/home/.plantillas_latex/FIRMALUCHO.png new file mode 100644 index 0000000..d53d498 Binary files /dev/null and b/home/.plantillas_latex/FIRMALUCHO.png differ diff --git a/home/.plantillas_latex/FIRMAMAMA.png b/home/.plantillas_latex/FIRMAMAMA.png new file mode 100644 index 0000000..84ee29c Binary files /dev/null and b/home/.plantillas_latex/FIRMAMAMA.png differ diff --git a/home/.plantillas_latex/FIRMAMIA.png b/home/.plantillas_latex/FIRMAMIA.png new file mode 100644 index 0000000..53138f5 Binary files /dev/null and b/home/.plantillas_latex/FIRMAMIA.png differ diff --git a/home/.plantillas_latex/foot.png b/home/.plantillas_latex/foot.png new file mode 100644 index 0000000..2c22a16 Binary files /dev/null and b/home/.plantillas_latex/foot.png differ diff --git a/home/.plantillas_latex/logo.jpg b/home/.plantillas_latex/logo.jpg new file mode 100644 index 0000000..7dc0c10 Binary files /dev/null and b/home/.plantillas_latex/logo.jpg differ diff --git a/home/.plantillas_latex/membrete.tex b/home/.plantillas_latex/membrete.tex new file mode 100644 index 0000000..a97d32b --- /dev/null +++ b/home/.plantillas_latex/membrete.tex @@ -0,0 +1,45 @@ +\documentclass[letterpaper, 11pt]{article} +\usepackage[T1]{fontenc} +\usepackage[parfill]{parskip} +\usepackage{array,booktabs,fontspec} +\usepackage{vmargin} +\setmargins{2.5cm} % margen izquierdo +{1.5cm} % margen superior +{16.5cm} % anchura del texto +{23.42cm} % altura del texto +{25pt} % altura de los encabezados +{2cm} % espacio entre el texto y los encabezados +{4pt} % altura del pie de página +{1cm} % espacio entre el texto y el pie de página +\usepackage[spanish]{babel} +\usepackage{graphicx} +\usepackage{fancyhdr} +\pagestyle{fancy} +\setmainfont{Linux Biolinum} +\lhead{\includegraphics[width=.20\linewidth]{/home/diegofcs/.plantillas_latex/logo}} +\rhead{\small{\textbf{Accionante:} María Fuentes\\ \textbf{Accionados:} Inti Duarte y Fidel Duarte\\ \textbf{Referencia:} Proceso Declarativo.\\}}} +\renewcommand{\headrulewidth}{0pt} +\cfoot{\includegraphics[width=.99\linewidth]{/home/diegofcs/.plantillas_latex/foot}} +%----------------------------------------------- Inicio del documento + + \begin{document} + Señor(a)\\ + \textbf{JUEZ(A) DE FAMILIA DE BUCARAMANGA - REPARTO}\\ +\textit{ofjudsbuc@cendoj.ramajudicial.gov.co}\\ +E.\vspace{2cm}S.\vspace{2cm}D.\\ +Ciudad.\\ + +\textbf{Referencia:.} Proceso declarativo de existencia de unión marital de hecho, sociedad patrimonial y su respectiva liquidación.\\ +\textbf{Demandante:.} Maria Margarita Fuentes Lozano.\\ +\textbf{Demandados:.} Inti Camilo Duarte Gonzalez y Fidel Augusto Duarte Gonzalez.\\ + + %---------------------------------------------- Firma del documento + \hspace{2cm} + + Atentamente,\\ + + \includegraphics[width=0.2\linewidth]{/home/diegofcs/.plantillas_latex/FIRMAMIA}\\ + Diego Fernando Castillo Salazar \\ + C.c. No. 1.098.708.947 \\ + T.P. No. 384.221 del C.S.J \\ + \end{document} diff --git a/home/.plantillas_latex/normal.tex b/home/.plantillas_latex/normal.tex new file mode 100644 index 0000000..89f4195 --- /dev/null +++ b/home/.plantillas_latex/normal.tex @@ -0,0 +1,28 @@ +\documentclass[letterpaper, 10pt]{article} +\usepackage[T1]{fontenc} +\usepackage[parfill}{parskip} +\usepackage{array,booktabs,fontspec} +\usepackage{vmargin} +\setmargins{2.5cm} % margen izquierdo +{1.5cm} % margen superior +{16.5cm} % anchura del texto +{23.42cm} % altura del texto +{10pt} % altura de los encabezados +{1cm} % espacio entre el texto y los encabezados +{3pt} % altura del pie de página +{1cm} % espacio entre el texto y el pie de página +\usepackage[spanish]{babel} +\usepackage{graphicx} +\usepackage{fancyhdr} +\pagestyle{fancy} +\setmainfont{Linux Biolinum} +\lhead{\textbf{}} +\rhead{\small{\textbf{}}} +\renewcommand{\headrulewidth}{0.5pt} + + + \begin{document} + +Algo de texto para probar + + \end{document} diff --git a/home/.surf/cache/CacheStorage/EED61F0301E94E45A6A4230EBBD6D071ADCED20E/Version 16/salt b/home/.surf/cache/CacheStorage/EED61F0301E94E45A6A4230EBBD6D071ADCED20E/Version 16/salt new file mode 100644 index 0000000..69435fb --- /dev/null +++ b/home/.surf/cache/CacheStorage/EED61F0301E94E45A6A4230EBBD6D071ADCED20E/Version 16/salt @@ -0,0 +1 @@ +9M \ No newline at end of file diff --git a/home/.surf/cache/CacheStorage/EED61F0301E94E45A6A4230EBBD6D071ADCED20E/estimatedsize b/home/.surf/cache/CacheStorage/EED61F0301E94E45A6A4230EBBD6D071ADCED20E/estimatedsize new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/home/.surf/cache/CacheStorage/EED61F0301E94E45A6A4230EBBD6D071ADCED20E/estimatedsize @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/home/.surf/cache/CacheStorage/EED61F0301E94E45A6A4230EBBD6D071ADCED20E/origin b/home/.surf/cache/CacheStorage/EED61F0301E94E45A6A4230EBBD6D071ADCED20E/origin new file mode 100644 index 0000000..8220bd6 Binary files /dev/null and b/home/.surf/cache/CacheStorage/EED61F0301E94E45A6A4230EBBD6D071ADCED20E/origin differ diff --git a/home/.surf/cache/CacheStorage/salt b/home/.surf/cache/CacheStorage/salt new file mode 100644 index 0000000..8f45b33 --- /dev/null +++ b/home/.surf/cache/CacheStorage/salt @@ -0,0 +1 @@ +\6v>3 \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/0093029D272E037DC73880F486C5C410F6557CAB b/home/.surf/cache/WebKitCache/Version 16/Blobs/0093029D272E037DC73880F486C5C410F6557CAB new file mode 100644 index 0000000..9405e8f Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/0093029D272E037DC73880F486C5C410F6557CAB differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/02D6583CFD5F72C1A35C93ADCEFA03A881E3F53B b/home/.surf/cache/WebKitCache/Version 16/Blobs/02D6583CFD5F72C1A35C93ADCEFA03A881E3F53B new file mode 100644 index 0000000..18ab3e6 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/02D6583CFD5F72C1A35C93ADCEFA03A881E3F53B @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_primer_behaviors_dist_esm_dimensions_js-node_modules_github_hotkey_dist_-9fc4f4"],{98105(a,b,c){function d(a){let b=a.getBoundingClientRect();return{top:b.top+window.pageYOffset,left:b.left+window.pageXOffset}}function e(a){let b=a,c=b.ownerDocument;if(!c||!b.offsetParent)return;let d=c.defaultView.HTMLElement;if(b!==c.body){for(;b!==c.body;){if(!(b.parentElement instanceof d))return;b=b.parentElement;let{position:e,overflowY:f,overflowX:g}=getComputedStyle(b);if("fixed"===e||"auto"===f||"auto"===g||"scroll"===f||"scroll"===g)break}return b instanceof Document?null:b}}function f(a,b){let c=b,d=a.ownerDocument;if(!d)return;let e=d.documentElement;if(!e||a===e)return;let f=g(a,c);if(!f)return;c=f._container;let h=c===d.documentElement&&d.defaultView?{top:d.defaultView.pageYOffset,left:d.defaultView.pageXOffset}:{top:c.scrollTop,left:c.scrollLeft},i=f.top-h.top,j=f.left-h.left,k=c.clientHeight,l=c.clientWidth,m=k-(i+a.offsetHeight),n=l-(j+a.offsetWidth);return{top:i,left:j,bottom:m,right:n,height:k,width:l}}function g(a,b){let c=a,d=c.ownerDocument;if(!d)return;let e=d.documentElement;if(!e)return;let f=d.defaultView.HTMLElement,g=0,j=0,k=c.offsetHeight,l=c.offsetWidth;for(;!(c===d.body||c===b);){if(g+=c.offsetTop||0,j+=c.offsetLeft||0,!(c.offsetParent instanceof f))return;c=c.offsetParent}let m,n,o;if(b&&b!==d&&b!==d.defaultView&&b!==d.documentElement&&b!==d.body){if(!(b instanceof f))return;o=b,m=b.scrollHeight,n=b.scrollWidth}else o=e,m=h(d.body,e),n=i(d.body,e);let p=m-(g+k),q=n-(j+l);return{top:g,left:j,bottom:p,right:q,_container:o}}function h(a,b){return Math.max(a.scrollHeight,b.scrollHeight,a.offsetHeight,b.offsetHeight,b.clientHeight)}function i(a,b){return Math.max(a.scrollWidth,b.scrollWidth,a.offsetWidth,b.offsetWidth,b.clientWidth)}c.d(b,{VZ:()=>e,"_C":()=>f,cv:()=>d,oE:()=>g})},11793(a,b,c){c.d(b,{EL:()=>e,N9:()=>o,Tz:()=>p});class Leaf{constructor(a){this.children=[],this.parent=a}delete(a){let b=this.children.indexOf(a);return -1!==b&&(this.children=this.children.slice(0,b).concat(this.children.slice(b+1)),0===this.children.length&&this.parent.delete(this),!0)}add(a){return this.children.push(a),this}}class RadixTrie{constructor(a){this.parent=null,this.children={},this.parent=a||null}get(a){return this.children[a]}insert(a){let b=this;for(let c=0;c=0;n-=1){h=c.children[n];let o=h.getAttribute("data-hotkey-scope");if(!i&&!o||i&&f.id===o){g=!0;break}}h&&g&&(function(a,b){let c=new CustomEvent("hotkey-fire",{cancelable:!0,detail:{path:b}}),e=!a.dispatchEvent(c);e||(d(a)?a.focus():a.click())}(h,l),a.preventDefault()),m()}}function o(a,b){0===Object.keys(h.children).length&&document.addEventListener("keydown",n);let c=function(a){let b=[],c=[""],d=!1;for(let e=0;ea.filter(a=>""!==a)).filter(a=>a.length>0)}(b||a.getAttribute("data-hotkey")||""),d=c.map(b=>h.insert(b).add(a));i.set(a,d)}function p(a){let b=i.get(a);if(b&&b.length)for(let c of b)c&&c.delete(a);0===Object.keys(h.children).length&&document.removeEventListener("keydown",n)}},86058(a,b,c){c.d(b,{R:()=>AnalyticsClient});var d=c(82918);class AnalyticsClient{constructor(a){this.options=a}get collectorUrl(){return this.options.collectorUrl}get clientId(){return this.options.clientId?this.options.clientId:(0,d.b)()}createEvent(a){return{page:location.href,title:document.title,context:{...this.options.baseContext,...a}}}sendPageView(a){let b=this.createEvent(a);this.send({page_views:[b]})}sendEvent(a,b){let c={...this.createEvent(b),type:a};this.send({events:[c]})}send({page_views:a,events:b}){let c={client_id:this.clientId,page_views:a,events:b,request_context:{referrer:function(){let a;try{a=window.top.document.referrer}catch(b){if(window.parent)try{a=window.parent.document.referrer}catch(c){}}return""===a&&(a=document.referrer),a}(),user_agent:navigator.userAgent,screen_resolution:function(){try{return`${screen.width}x${screen.height}`}catch(a){return"unknown"}}(),browser_resolution:function(){let a=0,b=0;try{return"number"==typeof window.innerWidth?(b=window.innerWidth,a=window.innerHeight):null!=document.documentElement&&null!=document.documentElement.clientWidth?(b=document.documentElement.clientWidth,a=document.documentElement.clientHeight):null!=document.body&&null!=document.body.clientWidth&&(b=document.body.clientWidth,a=document.body.clientHeight),`${b}x${a}`}catch(c){return"unknown"}}(),browser_languages:navigator.languages?navigator.languages.join(","):navigator.language||"",pixel_ratio:window.devicePixelRatio,timestamp:Date.now(),tz_seconds:-60*new Date().getTimezoneOffset()}},d=JSON.stringify(c);try{if(navigator.sendBeacon){navigator.sendBeacon(this.collectorUrl,d);return}}catch{}fetch(this.collectorUrl,{method:"POST",cache:"no-cache",headers:{"Content-Type":"application/json"},body:d,keepalive:!1})}}},82918(a,b,c){c.d(b,{b:()=>f});let d;function e(){return`${Math.round(2147483647*Math.random())}.${Math.round(Date.now()/1e3)}`}function f(){try{let a=function(){let a,b=document.cookie,c=b.match(/_octo=([^;]+)/g);if(!c)return;let d=[0,0];for(let e of c){let[,f]=e.split("="),[,g,...h]=f.split("."),i=g.split("-").map(Number);i>d&&(d=i,a=h.join("."))}return a}();if(a)return a;let b=e();return!function(a){let b=`GH1.1.${a}`,c=Date.now(),d=new Date(c+31536e6).toUTCString(),{domain:e}=document;e.endsWith(".github.com")&&(e="github.com"),document.cookie=`_octo=${b}; expires=${d}; path=/; domain=${e}; secure; samesite=lax`}(b),b}catch(c){return d||(d=e()),d}}},88149(a,b,c){c.d(b,{n:()=>d});function d(a="ha"){let b,c={},d=document.head.querySelectorAll(`meta[name^="${a}-"]`);for(let e of Array.from(d)){let{name:f,content:g}=e,h=f.replace(`${a}-`,"").replace(/-/g,"_");"url"===h?b=g:c[h]=g}if(!b)throw Error(`AnalyticsClient ${a}-url meta tag not found`);return{collectorUrl:b,...Object.keys(c).length>0?{baseContext:c}:{}}}},20845(a,b,c){c.d(b,{js:()=>TemplateResult,dy:()=>x,sY:()=>r,Au:()=>z});let d=new Map;function e(a){if(d.has(a))return d.get(a);let b=a.length,c=0,e=0,f=0,g=[];for(let h=0;hc&&(g.push(Object.freeze({type:"string",start:c,end:e,value:a.slice(c,e)})),c=e),g.push(Object.freeze({type:"part",start:e,end:h+2,value:a.slice(c+2,h).trim()})),h+=1,c=h+1)}return c"string"==typeof a?a:a.value).join("");this.element.setAttributeNS(this.attr.namespaceURI,this.attr.name,b)}}}let h=new WeakMap;class NodeTemplatePart{constructor(a,b){this.expression=b,h.set(this,[a]),a.textContent=""}get value(){return h.get(this).map(a=>a.textContent).join("")}set value(a){this.replace(a)}get previousSibling(){return h.get(this)[0].previousSibling}get nextSibling(){return h.get(this)[h.get(this).length-1].nextSibling}replace(...a){let b=a.map(a=>"string"==typeof a?new Text(a):a);for(let c of(b.length||b.push(new Text("")),h.get(this)[0].before(...b),h.get(this)))c.remove();h.set(this,b)}}function i(a){return{processCallback(b,c,d){var e;if("object"==typeof d&&d){for(let f of c)if(f.expression in d){let g=null!==(e=d[f.expression])&& void 0!==e?e:"";a(f,g)}}}}}function j(a,b){a.value=String(b)}function k(a,b){return"boolean"==typeof b&&a instanceof AttributeTemplatePart&&"boolean"==typeof a.element[a.attributeName]&&(a.booleanValue=b,!0)}let l=i(j);i((a,b)=>{k(a,b)||j(a,b)});let m=new WeakMap,n=new WeakMap;class TemplateInstance extends DocumentFragment{constructor(a,b,c=l){var d,f;super(),Object.getPrototypeOf(this)!==TemplateInstance.prototype&&Object.setPrototypeOf(this,TemplateInstance.prototype),this.appendChild(a.content.cloneNode(!0)),n.set(this,Array.from(function*(a){let b=a.ownerDocument.createTreeWalker(a,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,null,!1),c;for(;c=b.nextNode();)if(c instanceof Element&&c.hasAttributes())for(let d=0;da+b+(c{let c=a(...b);return s.add(c),c}}let u=new WeakMap;class EventHandler{constructor(a,b){this.element=a,this.type=b,this.element.addEventListener(this.type,this),u.get(this.element).set(this.type,this)}set(a){"function"==typeof a?this.handleEvent=a.bind(this.element):"object"==typeof a&&"function"==typeof a.handleEvent?this.handleEvent=a.handleEvent.bind(a):(this.element.removeEventListener(this.type,this),u.get(this.element).delete(this.type))}static for(a){u.has(a.element)||u.set(a.element,new Map);let b=a.attributeName.slice(2),c=u.get(a.element);return c.has(b)?c.get(b):new EventHandler(a.element,b)}}function v(a,b){var c,d,e,f,g,h,i,l,m;c=a,e=d=b,s.has(e)&&(d(c),1)||k(a,b)||(f=a,g=b,f instanceof AttributeTemplatePart&&f.attributeName.startsWith("on")&&(EventHandler.for(f).set(g),f.element.removeAttributeNS(f.attributeNamespace,f.attributeName),1))||(h=a,(i=b)instanceof TemplateResult&&h instanceof NodeTemplatePart&&(i.renderInto(h),1))||(l=a,(m=b)instanceof DocumentFragment&&l instanceof NodeTemplatePart&&(m.childNodes.length&&l.replace(...m.childNodes),1))||function(a,b){var c;if("object"!=typeof(c=b)||!(Symbol.iterator in c))return!1;if(!(a instanceof NodeTemplatePart))return a.value=Array.from(b).join(" "),!0;{let d=[];for(let e of b)if(e instanceof TemplateResult){let f=document.createDocumentFragment();e.renderInto(f),d.push(...f.childNodes)}else e instanceof DocumentFragment?d.push(...e.childNodes):d.push(String(e));return d.length&&a.replace(...d),!0}}(a,b)||j(a,b)}let w=i(v);function x(a,...b){return new TemplateResult(a,b,w)}let y=new WeakMap;t((...a)=>b=>{y.has(b)||y.set(b,{i:a.length});let c=y.get(b);for(let d=0;d{db=>{var c,d;if(!(b instanceof NodeTemplatePart))return;let e=document.createElement("template"),f=null!==(d=null===(c=TemplateResult.cspTrustedTypesPolicy)|| void 0===c?void 0:c.createHTML(a))&& void 0!==d?d:a;e.innerHTML=f;let g=document.importNode(e.content,!0);b.replace(...g.childNodes)})},15205(a,b,c){function d(...a){return JSON.stringify(a,(a,b)=>"object"==typeof b?b:String(b))}function e(a,b={}){let{hash:c=d,cache:e=new Map}=b;return function(...b){let d=c.apply(this,b);if(e.has(d))return e.get(d);let f=a.apply(this,b);return f instanceof Promise&&(f=f.catch(a=>{throw e.delete(d),a})),e.set(d,f),f}}c.d(b,{Z:()=>e})}}]) +//# sourceMappingURL=vendors-node_modules_primer_behaviors_dist_esm_dimensions_js-node_modules_github_hotkey_dist_-9fc4f4-99717cd42db7.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/03B16A4765E130506F32D63F196FEDB518071EF5 b/home/.surf/cache/WebKitCache/Version 16/Blobs/03B16A4765E130506F32D63F196FEDB518071EF5 new file mode 100644 index 0000000..a59308e Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/03B16A4765E130506F32D63F196FEDB518071EF5 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/05C7BB7D8C444E5A922ED261CAC9A1F8F236B0D0 b/home/.surf/cache/WebKitCache/Version 16/Blobs/05C7BB7D8C444E5A922ED261CAC9A1F8F236B0D0 new file mode 100644 index 0000000..fb5856d --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/05C7BB7D8C444E5A922ED261CAC9A1F8F236B0D0 @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_selector-observer_dist_index_esm_js"],{64463(a,b,c){c.d(b,{N7:()=>K});var d=c(8439),e=null,f=null,g=[];function h(a,b){var c=[];function d(){var a=c;c=[],b(a)}return function(){for(var b=arguments.length,e=Array(b),f=0;fd});var e,f=window.document.documentElement,g=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector;d.prototype.matchesSelector=function(a,b){return g.call(a,b)},d.prototype.querySelectorAll=function(a,b){return b.querySelectorAll(a)},d.prototype.indexes=[];var h=/^#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"ID",selector:function(a){var b;if(b=a.match(h))return b[0].slice(1)},element:function(a){if(a.id)return[a.id]}});var i=/^\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"CLASS",selector:function(a){var b;if(b=a.match(i))return b[0].slice(1)},element:function(a){var b=a.className;if(b){if("string"==typeof b)return b.split(/\s/);if("object"==typeof b&&"baseVal"in b)return b.baseVal.split(/\s/)}}});var j=/^((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"TAG",selector:function(a){var b;if(b=a.match(j))return b[0].toUpperCase()},element:function(a){return[a.nodeName.toUpperCase()]}}),d.prototype.indexes.default={name:"UNIVERSAL",selector:function(){return!0},element:function(){return[!0]}},e="function"==typeof window.Map?window.Map:function(){function a(){this.map={}}return a.prototype.get=function(a){return this.map[a+" "]},a.prototype.set=function(a,b){this.map[a+" "]=b},a}();var k=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;function l(a,b){var c,d,e,f,g,h,i=(a=a.slice(0).concat(a.default)).length,j=b,l=[];do if(k.exec(""),(e=k.exec(j))&&(j=e[3],e[2]||!j)){for(c=0;c
    [$1155] [$23062.k]
    [$1156] [$23062.k]
    ","top":"
    [$19530]
    [$670]
    [$1436]

    [$8643]
    [$8644]
    [$1010]
    [$5929]

    [$5931]

    [$5847]
    [$8651]
    [$8652] yyyy-mm-dd [$8657] yyyy-mm-dd
    [$8653]
    [$8654]
    [$8850]
    [$8851]

    [$8852]

    [$15536]

    [$17549]

    [$862]
    [$1456]
    [$8589]
    [$5926]
    • [$5923]
      [$5924]
      [$5925]
      [$19786]
      [$5926]
      [$19787]
    [$23433]
    [$823]
    [$171]
    [$968]
    [$8859]
    [$23327]
    [$19639]
    [$19682]
    [$16603]
    MEGA CMD
    MEGAbird
    [$24478]
    [$23377]
    [$24401]
    [$ri_s4_tab]
    [$ft_backup_tab]
    [$7337]
    [$24367]
    [$24432]
    [$23328]
    [$16112]
    [$1361]
    [$22682]
    [$389]
    [$24093]
    [$16117]
    [$383]
    [$384]
    [$399]
    [$24616]
    [$1356]
    [$392]
    [$7411]
    [$962]
    [$963]
    [$16114]
    [$385]
    [$386]
    [$387]
    [$966]
    [$22681]
    [$24629]
    [$24644]
    English
    [$follow_social_header]
    v. dev
    97%
    48 GB/50 GB
    [$20666]
    [$18085]
    [$20808]
    [$20808]
    example image name loooo oooo.png
    1.3 MB/s

    ","top-mobile":"
    [$169]
    [$19826]
    [$20471]
    [$433]
    [$1888]
    [$171]
    [$968]
    [$8921]
    [$164]
    [$23327]
    [$19639]
    [$19682]
    [$16603]
    MEGA CMD
    MEGAbird
    [$24478]
    [$23377]
    [$24401]
    [$ri_s4_tab]
    [$ft_backup_tab]
    [$7337]
    [$24367]
    [$24432]
    [$23328]
    [$16112]
    [$1361]
    [$22682]
    [$389]
    [$24093]
    [$16117]
    [$383]
    [$384]
    [$399]
    [$24616]
    [$1356]
    [$392]
    [$7411]
    [$962]
    [$963]
    [$16114]
    [$385]
    [$386]
    [$387]
    [$966]
    [$22681]
    [$24629]
    [$24644]
    [$5907]
    [$follow_social_header]
    v. dev
    [$967]
    • [$8579]
    • [$8578]
    • [$8577]

    [$18307]
    [$18309]
    [$82]
    [$1947]
    ","top-login":"
    ","staticdialog":"

    [$1038]

    [$7657]
    BETA

    [$9104]

    [$9103]
    ","start":"
    ((TOP)) ((PAGESMENU))
    [$20552]
    [$20553]
    [$187] [$968]
    \"MEGA\" \"MEGA\" \"MEGA\"
    [$22712]
    [$22759]
    \"MEGA \"MEGA \"MEGA
    ((MEGAINFO))
    ","repay":"
    ((TOP))
    [$20471]
    [$20472]
    [$19790]
    [$deactivated_users_note]
    [$478]
    Visa
    Mastercard
    [$19509]
    [$208.a2]
    [$19530]
    [$19609]
    [$17023] [$16462] [$477]
    [$24976]
    ((BOTTOM))
    ","registerb":"
    ((TOP))
    [$19517]
    [$19789]
    [$additional_storage_title]
    [$19790]
    [$478]
    [$7111]
    [$23494]
    [$19509]
    [$208]
    Business
    [$storage_transfer]
    [$flexible_quotas]
    [$16464]
    $67.36*
    [$1109]
    [$20432]
    [$20433]
    [$1094]
    ((BOTTOM))
    ","proplan":"
    ((TOP)) ((PAGESMENU))
    [$1147]
    [$23777]
    [$23853]
    [$1148]
    [$bsn_pricing_header]
    [$bsn_pricing_subheader]
    [$23778]
    [$19530]
    [$20714]
    [$23950]
    *
    /[$931]
    [$23948]
    [$23949]
    *
    /[$931]
    [$23952]
    *
    /[$931]
    [$506]
    [$24066]
    *
    /[$931]
    [$23789.s]
    [$23790.s]
    [$23791]
    [$23793]
    [$23958]
    [$24550]
    [$23803]
    [$23959]
    [$23956]
    [$23789.s]
    [$23790.s]
    [$23791]
    [$23793]
    [$23958]
    [$24550]
    [$23803]
    [$23959]
    [$23956]
    [$23789.s]
    [$23790.s]
    [$23791]
    [$23793]
    [$23958]
    [$24550]
    [$23803]
    [$23959]
    [$23956]
    [$23789.s]
    [$23790.s]
    [$23791]
    [$23793]
    [$23958]
    [$24550]
    [$23803]
    [$23959]
    [$23956]
    * [$18770]
    [$23960]
    [$19530]
    [$24056]
    *
    [$19533]
    [$bsn_min_users]
    [$19516]
    [$bsn_starting_storage]
    [$bsn_additional_storage]
    [$bsn_starting_transfer]
    [$bsn_additional_transfer]
    [$bsn_calc_label]
    [$bsn_calc_monthly_price]
    [$bsn_calc_monthly_price]
    1 [$20160] = 1024 [$17696]

    [$bsn_calc_header]
    3
    [$bsn_calc_min_users]
    300
    3
    [$bsn_calc_min_storage]
    100 [$20160] 1 [$23061] 10 [$23061]
    3
    [$bsn_calc_min_transfer]
    100 [$20160] 1 [$23061] 10 [$23061]

    [$bsn_calc_total]
    * [$18770]
    [$19530]
    [$24056]
    [$19533]
    [$19516]
    [$23789]
    [$24552]
    [$24538]
    [$24521]
    [$23959]
    [$23803]
    [$23793]
    [$23791]
    [$23958]
    [$24537]
    [$23956]
    [$bsn_feedback_quote1]
    - Cloudwards
    [$bsn_feedback_quote2]
    - Pro Privacy
    [$bsn_feedback_quote3]
    - Tech advisor
    [$bsn_feedback_quote4]
    - Tech radar
    [$bsn_feedback_quote5]
    - Tom's guide
    [$23817]
    MEGA
    /[$931]
    [$1150]
    DROPBOX
    /[$931]
    [$1150]
    [$23819]
    GOOGLE DRIVE
    /[$931]
    [$1150]
    [$24077]
    [$24078]
    [$23822]
    [$23851]
    [$23824]
    [$23824]
    [$915]
    [$23828]
    [$23829]
    [$23825]
    [$23825]
    [$23830]
    [$23831]
    [$23832]
    [$23833]
    [$23826]
    [$23826]
    [$23834]
    [$23835]
    [$23836]
    [$23837]
    [$23827]
    [$23827]
    [$24550]
    [$23838]
    [$23839]
    [$24085]
    [$23852]
    [$24138]
    [$23842]
    [$23843]
    [$23845]
    [$23846]
    [$1254]
    [$23847]
    [$23848]
    [$24053]
    [$23849]
    [$23850]
    [$24054] [$24549]
    ((BOTTOM))
    [$5841].

    [$7679]
    [$6961]
    [$19512]
    [$6690]
    [$6949]
    [$6950]
    [$1472]
    [$7983]
    [$19513]
    [$6690]
    [$7983]
    [$19514]
    [$6690]
    ","propay":"
    ((TOP)) ((PAGESMENU))
    [$6976]
    [$16167]
    *
    /[$7195]
    [$23789.s]
    [$23790.s]
    [$10637]
    1 [$7992]
    [$5533]
     
    [$7993]
     
    2 [$7994]
    $15.55
    -
    0.00
    [$16649]
    [$25073]
    [$23132]
    3 [$10638]
    [$10640]
    [$78]
    [$79]
    3 [$7995]
    [$7996]
    *[$18770]
    ((BOTTOM))
    ","planpricing":"
    ((TOP)) ((PAGESMENU))
    [$pr_choose_pln]
    [$23778]
    [$pr_a_user]
    [$pr_team]
    [$pr_team_users]
    [$23779]
    [$23780]
    [$pr_save_tip]
    [$pr_popular]
    [$pr_only]
    *
    [$pr_popular]
    [$pr_only]
    *
    [$pr_popular]
    [$pr_only]
    *
    [$pr_popular]
    [$pr_only]
    *
    [$pr_more] [$pr_try_flexi]
    [$pr_get_started]
    [$pr_free_strg]
    [$pr_forever]
    [$23960]
    *[$18770]
    [$19530]
    [$starting_from]
    *
    [$bsn_min_users]
    [$buy_business]
    *[$18770]
    [$pr_estimated_pr]
    [$19087]
    --
    3
    75
    150
    300
    [$16127]
    [$20160]
    3 [$20160]
    100 [$20160]
    1 [$23061]
    10 [$23061]
    [$16122]
    [$20160]
    3 [$20160]
    100 [$20160]
    1 [$23061]
    10 [$23061]
    [$pr_total_estimate]
    *
    *[$18770]
    [$pr_show_plan]
    [$pr_account_type]
    [$1150]
    [$pr_pro_plans]
    [$pro_flexi_name]
    [$19530]
    [$pr_core_features]
    [$bsn_compare_users]
    [$pr_a_user]
    [$pr_a_user]
    [$pr_a_user]
    [$pr_3_users]
    [$495]
    [$pr_up_16]
    [$pr_flexible_3]
    [$pr_flexible_3]
    [$18057]
    [$pr_limited]
    [$pr_up_16]
    [$pr_flexible_3]
    [$pr_flexible_3]
    [$pr_sharing]
    [$pr_secure_file]
    [$pr_pw_links]
    [$pr_link_expire]
    [$pr_trns_share]
    [$pr_data_protect]
    [$pr_file_versioning]
    [$pr_100_version]
    [$pr_100_version]
    [$pr_100_version]
    [$pr_100_version]
    [$automatic_backups]
    [$pr_rewind]
    [$pr_30_days]
    [$pr_lite_90_days]
    [$pr_I_III_365_days]
    [$pr_365_days]
    [$pr_365_days]
    [$7997]
    [$pr_secure_calls]
    [$pr_private_msg]
    [$meetings]
    [$pr_screen_sharing]
    [$pr_admin]
    [$18677]
    [$pr_other]
    [$pr_analytics]
    [$pr_bin_clearing]
    [$pr_up_30_days]
    [$pr_up_10_years]
    [$pr_up_10_years]
    [$pr_up_10_years]
    [$pr_why_us]
    [$promotion_page_subheading_data_is_private]
    [$promotion_page_description_data_is_private]
    [$promotion_page_subheading_data_is_secure]
    [$promotion_page_description_data_is_secure]
    [$pr_easily_access]
    [$promotion_page_description_easily_access]
    [$pr_how_comp]
    MEGA
    *
    / [$pr_per_tb] / [$931]
    [$16560]
    [$pr_comp_mega_note]
    Dropbox
    *
    / [$pr_per_tb] / [$931]
    [$16560]
    [$pr_comp_dropbox_note]
    Google Drive
    *
    / [$pr_per_tb] / [$931]
    [$16560]
    [$pr_comp_google_note]
    [$pr_get_flexiable]
    [$starting_from]
    *
    *[$18770]
    [$pr_estimated_pr]
    [$16127]
    [$20160]
    3 [$20160]
    100 [$20160]
    1 [$23061]
    10 [$23061]
    [$16122]
    [$20160]
    3 [$20160]
    100 [$20160]
    1 [$23061]
    10 [$23061]
    [$pr_total_estimate]
    *
    *[$18770]
    [$pr_take_from_us]
    [$bsn_feedback_quote1]
    Cloudwards
    [$pr_get_started_now]
    [$pr_try_mega]
    ((BOTTOM))
    [$5841].

    [$7679]
    [$6961]!
    [$19512]
    [$6690]
    [$6949]
    [$6950]
    [$1472]
    [$7983]
    [$19513]
    [$6690]
    [$7983]
    [$19514]
    [$6690]
    ","pagesmenu":"","onboarding":"","nomegadrop":"
    [$17533]
    Message
    [$17534]
    [$670]
    [$0] [$381]
    ","mvoucherinfo":"
    [$22120]
    ","mobile":"
    [$433]
    [$23433]
    [$1888]
    [$171]
    [$968]
    [$8921]
    [$164]
    [$23327]
    [$19639]
    [$19682]
    [$16603]
    MEGA CMD
    MEGAbird
    [$24478]
    [$23377]
    [$24401]
    [$ri_s4_tab]
    [$ft_backup_tab]
    [$7337]
    [$24367]
    [$24432]
    [$23328]
    [$16112]
    [$1361]
    [$22682]
    [$389]
    [$24093]
    [$16117]
    [$383]
    [$384]
    [$399]
    [$24616]
    [$1356]
    [$392]
    [$7411]
    [$962]
    [$963]
    [$16114]
    [$385]
    [$386]
    [$387]
    [$966]
    [$22681]
    [$24629]
    [$24644]
    [$5907]
    [$follow_social_header]
    v. dev
    [$967]
    • [$8579]
    • [$8578]
    • [$8577]
    [$7677]
    [$18280]
    [$1456]...
    \"\"
    [$865]
    [$16342]
    [$move_to_rubbish_bin]
    \"\"
    ,
    [$58]
    [$16342]
    [$move_to_rubbish_bin]
    [$16394]
    [$7597]
    [$7740]
    \"\"
    [$17617]
    [$7729]
    [$148]
    [$1155], [$1607] [$19284]
    \"\"
    [$5533]
    [$6110]
    [$17618] [$1597]
    [$1346]
    5 files, 124 KB/s
    [$16448]
    [$17085]
    [$148]
    [$16895]
    [$16897]
    [$16898]
    [$870]
    [$1934][$737]
    [$706]
    [$16899]
    [$8859] [$1379]
    [$229]
    [$msort_nameasc]
    [$msort_namedesc]
    [$msort_largest]
    [$msort_smallest]
    [$msort_newest]
    [$msort_oldest]
    [$22821]
    [$22820]
    [$23277]
    [$22833]
    [$22819]
    [$82]
    [$17086]
    [$17450]
    [$17399]
    [$17400]
    [$58]
    [$6909]
    [$61]
    [$move_to_rubbish_bin]
    [$148]
    [$1899]
    [$58]
    [$6909]
    [$61]
    [$move_to_rubbish_bin]
    [$148]
    [$5726]
    [$delete_permanently]
    [$148]
    \"\" \"\"
    [$135]
    [$85]
    [$1898]
    \"\"
    0
    [$22879]
    [$187]
    \"\"
    [$17022]
    Promotion
    [$5799]
    [$20197] (0)
    0 GB
    [$16136]
    [$5814]
    [$payment_card]
    [$16117]
    [$17464]
    [$7165]
    [$8839]
    [$17688]
    [$19290]
    [$19289]
    [$17601] [$7070]
    [$20222]
    [$862]
    [$429]
    [$16159]
    [$706]
    [$9002]
    [$16115]
    [$22682]
    [$22683]
    [$22690]
    [$22692]
    [$22693]
    [$22694]
    [$458]
    [$22808]
    [$22699]
    [$22703]
    [$22709]
    [$22683]
    1
    [$22719]
    [$22771][$22723]
    [$22772][$22724]
    [$22725.m]
    [$22726.m]
    *[$22898]
    2
    [$22824]
    [$22727]
    [$22728]
    [$22757]
    [$22729]
    3
    [$23180]
    [$23181.m]
    [$22808]
    [$22820]
    [$22822]
    [$1724]
    [$23398]
    [$23308]
    [$23309] [$481] [$20952]
    [$23399] [$23400] 0€0 [$23401] 0€0 [$23402] 0€0
    [$23255]
    [$23403]
    [$23404]
    [$23296]
    0%
    [$23405]
    [$556]
    [$82]
    [$23297]
    EUR
    [$23298]
    [$23299]
    [$556]
    [$82]
    [$23303]
    [$481]
    [$20952]
    i [$23512]
    [$referral_bitcoin_autofill]
    [$referral_bitcoin_save]
    i [$23304]
    [$556]
    [$82]
    [$427]
    [$23305]
    [$23306]
    [$556]
    [$82]
    [$23406]
    [$23312]
    00

    [$23313]
    00

    [$23314]
    00
    [$23315]
    [$23308]
    [$23309] [$481] [$20952]
    [$23368]
    [$82]
    [$23316]
    [$23403]
    [$22833]
    [$25002]
    [$81]
    [$22709]
    [$22710]
    [$22711]
    [$22741]
    [$22742]
    [$22743]
    [$ref_link_start_page] [$19530] [$955] [$956] [$7337] [$16113] [$16111] [$384] [$16112] [$16541] [$22745]
    [$726]
    [$22823]
    [$82]
    [$22690]
    [$22881]
    [$22882] [$22875]
    [$22883]
    [$7179]

    [$16501]
    [$1596]
    [$7179]
    [$17548]
    Close
    [$17804]

    [$17805]

    [$16115]
    [$17089]
    [$6844]
    [$8839]
    [$1070]
    [$16129]
    [$17689]
    [$17386]
    [$17694]
    [$17690]
    [$payment_card]
    ● ● ● ●
    ● ● ● ●
    ● ● ● ●
    5644
    [$23622]
    01/23
    [$429]
    [$19303] [$89] [$482] [$481] • [$480]
    [$967]
    [$7665]
    [$25016]
    \"\"
    [$7667]
    [$882]
    [$18513]
    [$82]
    [$862]
    [$20900]
    [$20899]
    [$16145]
    [$16146]
    [$16147]
    [$22153]
    [$16148]
    [$16149]
    [$20957]
    [$20898]
    [$20982]
    [$20897]
    [$16148]
    [$20890]
    [$20892]
    [$21956]
    [$20896]
    [$23281]
    [$payment_card_noti_desc]
    [$706]
    [$741]
    [$707]
    [$9002]
    [$m_change_email_header]
    [$9002]
    [$7699] [$7700]
    [$16159]
    [$setting_section_plink]
    [$setting_plink_warn]
    [$17806]
    [$8970]

    [$8971]
    [$8973]
    [$577]
    [$578]
    [$17807]
    [$17808]
    [$1939]
    [$1940]
    [$check_email_inbox]

    [$6216]

    [$17807]
    [$17809]
    [$1956]
    [$1960]
    [$17810]
    [$17807]
    [$19850]
    [$1961]
    [$707]
    [$17807]
    [$17813]
    [$1942]
    [$1940]
    [$1943]
    [$1947]
    [$8993].
    [$1951]
    [$16117]
    [$17465]
    [$17466]
    [$16402]
    [$16127]
    5 GB
    [$16298]
    [$17543]
    5 GB
    [$16280]
    [$17543]
    5 GB
    [$16278]
    [$17543]
    5 GB
    [$20213]
    [$17543]
    [$16298]
    0
    GB
    [$16127]
    name@mail.com
    0d
    [$17465]
    [$17465]
    [$17544]
    [$1513]:
    [$7414]
    [$17545]:
    [$17546]:
    [$17546]:
    [$8726] \"\"
    [$1070]
    [$1070]
    [$1070]

    [$17476]

    [$achievement_not_working_note]

    [$17477]

    [$243]
    [$244]
    [$246]
    [$247]
    [$248]
    [$243]
    [$731]
    [$20198]
    [$20199]
    [$1191]
    [$253]
    [$mobile_app_advertisement]
    \"\"
    [$5533]
    \"\"
    0
    [$22879]
    00:00
    03:09
    [$5533]
    [$8951]
    [$8952]
    [$8950]
    [$16107]
    [$148]
    [$8949]
    [$mobile_app_advertisement]
    [$5599]
    [$15]
    [$148]
    [$16302]
    [$16358]
    [$148]
    [$1026]

    [$7945] [$7972]

    [$16471]

    [$16472]

    [$1027] [$148]
    [$9070]

    [$9071] [$9072]

    [$1027] \"\"
    [$171]
    [$968]
    [$20220] [$20392]
    [$192]
    [$16345] \"\"
    [$16653]
    [$8969]
    [$208]
    [$209]
    [$16653]
    [$171]
    [$968]
    Create business user account
    [$208]
    Create Account
    [$16653]
    [$7732]
    [$217]
    [$9029]
    [$8744]
    [$82]
    [$1796]
    [$511] [$1140] [$1141]
    [$16111]
    [$22150]
    [$1776]
    [$7992]
    [$5533]
     
    [$7993]
     
    [$7994]
    0.00
    [$16649]
    [$23132]
    [$10638]
    [$78]
    [$79]
    [$10640]
    [$7995]
    [$7996]
    [$7156]
    [$6963]
    [$7991]
    [$7986]
    [$7985]
    [$6190]
    [$25047]
    [$25048]
    [$25049]
    [$25050]
    [$922] ([$6965])
    [$6963]
    [$10630]
    [$10628] [$10630]
    [$10631]
    [$10632]
    [$20237]
    [$billing_redirection_notice]
    [$10633]
    [$6198]
    [$8667]
    [$939] Bank of New Zealand, Wellington, New Zealand
    [$6222] 262 Queen Street, Auckland 1010, New Zealand
    [$6197] Mega Limited
    [$20951] 120 Albert St, Auckland 1010, New Zealand
    [$6200]

    752971-0000 (USD)

    752971-0002 (EUR)

    [$6203] BKNZNZ22
    [$6205] [$6206]
    [$23399]
    [$939] TransferWise Europe SA
    [$6222] Avenue Louise 54, Room S52, Brussels 1050, Belgium.
    [$6197] Mega Limited
    [$20951] 120 Albert St, Auckland 1010, New Zealand
    *[$8668] BE53 9673 7979 2853
    [$6203] TRWIBEB1
    [$6205] [$6206]
    [$23399]
    • [$8670]
    • [$6207]
    • * [$8671]
    \"\"
    [$6960]
    [$7706]
    [$7707]
    /[$931]
    [$495]
    [$18057]
    [$7708]
    [$7711]
    [$7710]
    [$6941]
    [$7201]
    0.00 0.00
    Storage quota:
    0.00 0.00 + 0.00
    Transfer quota:
    0.00 0.00
    [$7202]
    [$7160]
    [$7160]
    [$6190]
    [$82]
    [$6961]
    [$19512]
    [$6690]
    [$16164]
    [$17]

    [$120]

    [$16356] [$16357]

    [$8696]
    [$8696]
    [$120] [$16356]
    [$6826] [$8945]
    [$16309] [$16352]
    [$8696]
    [$16386]
    [$174]
    [$16388]
    0 %
    100 %

    Scope of these terms

    1 Welcome to Mega. Mega Limited (“Mega”, “we”, “us”) provides cloud storage and communication services with user-controlled encryption. Using Mega, you and other users can encrypt your files and chats using user-controlled encryption (“UCE”), upload, access, store, manage, share, communicate, download and decrypt files, chats and any data (all of which we call “data” in these terms) and give access to that data to others (all together, “services” and each, a “service”). We provide our services ourselves and via our related or affiliated entities, payment processors and resellers who act on our behalf, at our websites at https://mega.nz and https://mega.io, subdomains and related sites (“websites”), using our mobile apps (“mobile apps”), our desktop apps (“desktop apps”), our command line tools (“cmd tools”), our browser extensions (“browser extensions”) and our application programming interface (“API”). If you have questions about how to use our services or the great things you can do with Mega, check our Help Centre or, if you can't find the answer there, check our contacts page for details of who to contact.

    2 Important: We store all data on servers in New Zealand, Canada and Europe. If you access your data or give someone else access to your data using our services and you or they are not in New Zealand, Canada or Europe, you or they may be accessing that data from a country that does not give adequate protection to personal information when compared to that given under, the New Zealand Privacy Act 2020, the Canadian Personal Information Protection and Electronic Documents Act 2000 or the General Data Protection Regulation (“GDPR”). By agreeing to these terms, you authorise us to grant that access.

    3 These terms are binding and apply to any use of the services by you and anyone who you allow to access your data or our services. By using our services, you and they irrevocably agree to these terms. If you do not like these terms or don't want to be bound by them, you can't use our services. In particular, OUR SERVICES ARE PROVIDED SUBJECT TO CERTAIN DISCLAIMERS BY US AND UNDERTAKINGS BY YOU, INCLUDING AN INDEMNITY FROM YOU IF YOU BREACH THESE TERMS - see clauses 40-51. NEW ZEALAND LAW AND ARBITRATION OF ANY DISPUTES APPLIES EXCLUSIVELY - see clauses 52 and 53.

    4 We can change these terms at any time by providing you at least 30 days' prior notice of the change, whether via email or via a message in any service we provide. Your continued use after that notice means that you agree to the changed terms. If you have paid for a subscription that is due to expire after that 30 day notice period and you do not wish to continue to use our services under the new terms, you may terminate your subscription before the new terms come into force. We will then (but not otherwise) refund the unexpired portion of your subscription payment within 30 days and close your account. For more information about refunds, recurring paid subscriptions and their termination, see clauses 58-60.

    5 If you comply with these terms, then we grant you a non-exclusive, non-transferable, worldwide licence to access and use our services, in accordance with these terms and any plan you have subscribed for.

    Your data

    6 If you allow others to access your data (e.g. by giving them a link to, and a key to decrypt, that data), in addition to them accepting these terms, you are responsible for their actions and omissions while they are using our services and you agree to fully indemnify us for any claim, loss, damage, fine, costs (including our legal fees) and other liability if they breach any of these terms. This is particularly the case where you are the administrator of a business account (see clauses 33-35 and 54-57 below).

    7 UCE is fundamental to our services. This means that you, not us, have encrypted control of who has access to your data. You should keep your password and Recovery Key safe and confidential. You must not share your password with anyone else and should not release encryption keys to anyone else unless you wish them to have access to your data. If you lose or misplace your password, you will lose access to your data. Encryption won’t help though if someone has full access to your system or device. We strongly urge you to use best practices for ensuring the safety and security of your system and devices (e.g. via unique passwords, security upgrades, firewall protection, anti-virus software, securing and encrypting your devices). Mega will never send you emails asking for your password so do not be fooled by any such email since it will not be from us.

    8 You must maintain copies of all data stored by you on our services. We do not make any guarantees that there will be no loss of data or the services will be bug free. You should download all data prior to termination of services.

    9 Our service may automatically (without us viewing the file content) delete a file you upload, store, access or share where it determines that the file is an exact duplicate of a file already on our service (a process usually referred to as deduplication). In that case, the original file will be accessed by you and any other user and that file will be retained as long as any user has a right to access it under these terms. Any right of deletion that you exercise will not apply to a deduplicated file that is associated with another user.

    10 We will store your data subject to these terms and any plan you subscribe to. If you choose to stop using our services, you must download your data first because after account closure we may, if we wish, delete all your data.

    If we suspend or terminate our services to you because you have breached these terms, or someone you have given access to has breached these terms, during the term of that suspension we may, if we wish, delete your data immediately or deny you access to your data but keep it for evidential purposes. See also clauses 33-35 and 54-57 below which set out details of what happens to users within a business account when the business account is suspended or terminated.

    In circumstances where we cease providing our services for other reasons, we will, if we consider it appropriate, it is reasonably practicable and we are not prevented by law or likely to incur any liability in doing so, give you 30 days' notice to retrieve your data.

    Your obligations

    11 Once you have subscribed to a plan for our services (with payment having been made via one of our websites, one of our mobile apps or one of our related or affiliated entities, payment processors and resellers), you need to continue to pay the fees (if any) for that plan (and any other taxes or duties). No matter which reseller or related or affiliated entity of Mega you make payment to, your contract for services is with Mega Limited and is governed exclusively by these terms and our policies referenced in these terms.

    12 We can at any time change the fees for our services (other than those you have already paid for) and/or the terms of any services we provide to you (including without limitation the terms of any ‘achievements’, ‘referral’ or similar programs we may offer), as long as we give you (subject at all times to clause 34), 30 days’ notice of any such changes. Where we change the fees for our services, in the absence of manifest error or other lawful error, you can't withhold payment or claim any set-off without getting our written agreement

    13 If at any time you do not make a payment to us when you are supposed to (including on termination), we can (and this doesn't affect any other rights we may have against you):

    13.1 suspend or terminate your use of the service and/or;

    13.2 require you to pay, on demand, default interest on any amount you owe us at 10% per annum calculated on a daily basis, from the date when payment was due until the date when payment is actually made by you. You will also need to pay all expenses and costs (including our full legal costs) in connection with us trying to recover any unpaid amount from you.

    14 You must:

    14.1 where you have subscribed for a service, always give us and keep up to date, your correct contact and any billing details and those of any users within a business account;

    14.2 comply fully with any account verification protocols we require you to follow, including account verification via SMS;

    14.3 comply with these terms and any other agreements you have with us and ensure that users within a business account, of which you are administrator, do likewise;

    14.4 comply with all applicable laws, regulations and rules when using our services and with respect to any data you upload, access or share using our services and ensure that users within a business account, of which you are administrator, do likewise.

    What you can't do

    15 You can't, and will ensure that no users within a business account, of which you are administrator:

    15.1 assign or transfer any rights you have under these terms to any other person (including by sharing your password with someone else) without our prior written consent;

    15.2 do anything that would damage, disrupt or place an unreasonable burden on our service or anyone else's use of our service, including but not limited to denial of service attacks or similar;

    15.3 infringe anyone else's intellectual property (including but not limited to copyright) or other rights in any data;

    15.4 resell or otherwise supply our services to anyone else without our prior written consent;

    15.5 open multiple free accounts;

    15.6 make use of any additional services which are not meant to be available to you on the plan you have subscribed for (including without limitation additional storage or additional functionality) and for the avoidance of doubt, this includes where, for whatever reason, we may have provided you access to such services;

    15.7 use our service:

    15.7.1 to store, use, download, upload, share, access, transmit, or otherwise make available, data in violation of any law in any country (including to breach copyright or other intellectual property rights held by us or anyone else);

    15.7.2 to send unwelcome communications of any kind (including but not limited to unlawful unsolicited commercial communications) to anyone (e.g. spam or chain letters);

    15.7.3 to abuse, defame, threaten, stalk or harass anyone, or to harm them as defined in the Harmful Digital Communications Act 2015 (NZ) or any similar law in any jurisdiction;

    15.7.4 to store, use, download, upload, share, access, transmit, or otherwise make available, unsuitable, offensive, obscene or discriminatory information of any kind;

    15.7.5 to run any network scanning software, spiders, spyware, robots, open relay software or similar software;

    15.7.6 to upload anything or otherwise introduce any spyware, viruses, worms, trojan horses, time bombs or bots or any other damaging items which could interfere with our, or anyone else's, network, device or computer system;

    15.7.7 to use any software or device which may hinder the services (like mail bombs, war dialing, automated multiple pinging etc.);

    15.7.8 to attempt to gain unauthorised access to any services other than those to which you have been given express permission to access; or

    15.7.9 to impersonate anyone or to try to trick or defraud anyone for any reason (e.g. by claiming to be someone you are not).

    16 If you register with us, you will need to use a password in conjunction with your specific account email address. You need to make sure your password is secure, not used by you on other sites and confidential. Make sure you tell us straight away if you think or know someone else has used your password or there has been any other security breach. We will hold you responsible for anything done using your account and password. MAKE YOUR PASSWORD A STRONG ONE AND KEEP IT SECURE. We are not responsible if someone else gains access to your computer or other device and/or your Mega password and/or encryption keys for any files.

    Intellectual Property

    Our IP

    17 You are not allowed to, and you can't let anyone else (including in particular any user within a business account of which you are administrator), use, copy, alter, distribute, display, licence, modify or reproduce, reverse assemble, reverse compile, communicate, share, transmit or otherwise make available, (whether digitally, electronically, by linking, or in hard copy or by any means whatsoever), any of our code, content, copyright materials, intellectual property or other rights without getting our permission in writing, other than in order to use our services as intended or as allowed under any open source licences under which we use intellectual property provided by others. The open source code that we use, where we obtained it, and licences for that code, are all referenced on our websites and via our mobile apps.

    18 Without limiting any other provision of these terms, you are only permitted to directly and specifically use the API if you register at the developer registration page and agree that you may only publish or make available your application after we have approved it pursuant to our application approval process and licence agreement available on request at api@mega.nz

    Your IP

    19 You own, or undertake that you are authorised to use, any intellectual property in any data you store on, use, download, upload, share, access, transmit or otherwise make available to or from, our systems or using our services. You grant us a worldwide, royalty-free licence to use, store, back-up, copy, transmit, distribute, communicate, modify and otherwise make available, your data, solely for the purposes of enabling you and those you give access to, to use our services and for any other purpose related to provision of the services to you and them.

    Copyright Infringement Notices

    20 We respect the copyright of others and require that users of our services comply with copyright laws. You are strictly prohibited from using our services to infringe copyright. You may not upload, download, store, share, access, display, stream, distribute, e-mail, link to, communicate, transmit, or otherwise make available any files, data, or content that infringes any copyright or other proprietary rights of any person or entity.

    21 We will respond to notices of alleged copyright infringement that comply with applicable law and are properly provided to us. If you believe that your content has been copied or used in a way that constitutes copyright infringement, please provide us with the following information:

    21.1 a physical or electronic signature of the copyright owner or a person authorised to act on their behalf;

    21.2 identification of the copyrighted work claimed to have been infringed;

    21.3 identification of the material that is claimed to be infringing or to be the subject of infringing activity and that is to be removed or access to which is to be disabled, and information reasonably sufficient to permit us to locate the material including the exact URL link (with decryption key) to that material on Mega;

    21.4 your contact information, including your address, telephone number, and an email address; a statement by you that you have a good faith belief that use of the material in the manner complained of is not authorised by the copyright owner, its agent, or the law; and

    21.5 a statement that the information in the notification is accurate, and, under penalty of perjury (unless applicable law says otherwise), that you are authorised to act on behalf of the copyright owner.

    22 We reserve the right to remove data alleged to be infringing without prior notice, at our sole discretion, and without liability to you. In appropriate circumstances, we will also terminate your account if we consider you to be a repeat infringer. Details of our designated copyright agent for notice of alleged copyright infringement are on our contacts page.

    Copyright Counter-Notices

    23 We process all takedown notices based on good faith acceptance of the representations from the party submitting the takedown notice. We do not review the material before processing the takedown notice.

    24 You may file a counter-notice if you believe that access to a file you have uploaded has been wrongly disabled because it was the subject of an incorrect takedown notice. You should only do so if you are confident that no other party owns copyright in the material, or you have rights to store the material and, if you are sharing it, that you have the right to do so.

    25 Please understand that:

    25.1 when we receive your counter-notice, we pass it, including your address and other contact information, to the party who issued the original takedown notice. By submitting your counter-notice you authorise us to do so;

    25.2 filing a counter-notification may lead to legal proceedings between you and the complaining party;

    25.3 there may be adverse legal consequences in New Zealand and/or your jurisdiction if you make a false or bad faith allegation by using this process;

    25.4 if, when using this counter-notice process, you make a false or bad faith allegation or otherwise breach these terms or any of our policies and that causes us any loss, costs (including legal costs), damages or other liability, we reserve the right to claim for and recover from you that loss, those costs (including full legal costs on a solicitor-client basis), damages and other liability, by deduction from any balance in your account and/or by proceedings in New Zealand and/or the jurisdiction of the address in your counter-notice; and

    25.5 we provide this counter-notice process voluntarily for the purposes of all applicable copyright takedown and counter-notice regimes in New Zealand and other jurisdictions, but, in doing so, we do not submit to any jurisdiction, law, tribunal or court other than those of New Zealand, as set out in these terms. We may amend, suspend or withdraw this counter-notice process at any time, provided that any counter-notices in train at that time shall continue to be processed.

    26 By filing a counter-notice, you are deemed to have accepted the above terms. If you do not accept the above terms, do not file a counter-notice.

    27 To file a counter-notice with us, you must provide a written communication at https://mega.nz/dispute or by email to copyright@mega.nz that includes substantially the following:

    27.1 Identification of the specific URL(s) of material that has been removed or to which access has been disabled;

    27.2 Your full name, address, telephone number, email address and the username of your Mega account;

    27.3 The statement: \"I have a good faith belief that the material was removed or disabled as a result of a mistake or misidentification of the material to be removed or disabled.\";

    27.4 The reasons for that good faith belief, sufficient to explain the mistake or misidentification to the person who filed the original takedown notice;

    27.5 The statement \"I will accept service of proceedings in New Zealand or in the jurisdiction where my address in this counter-notice is located, from the person who provided Mega Limited with the original copyright takedown notice or an agent of such person.\";

    27.6 A scanned physical signature or usual signoff in an email or using our webform will be accepted; and

    27.7 Any comments you wish to provide.

    28 We will only accept a counter-notification directly from the user from whose account a folder or file has been disabled. Counter-notifications must be submitted from the email address associated with that Mega account.

    29 If we do not receive any further communication from or on behalf of the person who originally submitted the takedown notice, or any communication we do receive does not in our sole opinion adequately justify the original takedown notice, we may, but shall not be obliged to, reinstate the material in approximately 10-14 days provided we have no reason to believe that the material infringes copyright.

    30 Nothing in this counter-notice section prejudices our right to remove or disable access to any material at any time, for any reason or no reason.

    Other Infringement Notices

    31 If you consider there has been some other infringement or breach of law, or of these terms, and wish to file a complaint, contact us at the relevant address on our contacts page. We will generally require the same amount of detail as set out above for copyright infringement notices. See also our Takedown Guidance Policy.

    Suspension and Termination

    32 You can terminate your access to our services at any time by following the 'Cancel your account' link in the Account section of our websites or the Settings section of our mobile apps. However, we will not provide any part-refund for any allowance not used on any subscription you may have, other than under clauses 4 and 58. If you are a business account administrator you may also terminate access to any user within the business account.

    33 We can immediately suspend or terminate your, and (as may be applicable) that of other users within a business account, access to our websites and our services without notice to you:

    33.1 if you or they breach any of these terms or any other agreement you or they have with us;

    33.2 at any time if you are not a registered user;

    33.3 if you are using a free account and that account has been inactive for over 3 months; or

    33.4 if we have been unable to contact you using the email address in your account details.

    34 Without in any way limiting the other rights available to us pursuant to these terms to take such further action as we deem necessary in any case, we may temporarily suspend your account, where a pattern of access to your account suggests to us that the account may have been compromised. You will subsequently be required to provide such verification of your right to access your account, as we deem appropriate, before we will unsuspend your account.

    35 We may also terminate, suspend or limit our services or any part of our services, for all users or for groups of users, without notice, at any time, and as applicable for any duration of time(s) that we specify, for any reason or no reason, provided that in any such cases, to the greatest extent permitted at law, we will have no liability to you in any regard as a result of any such actions.

    36 All charges outstanding on your account must be paid at termination.

    Export Control

    37 You may not use, export, re-export, import, or transfer any software or code supplied as part of your use of our services: (a) into any United States or New Zealand embargoed countries; or (b) to anyone listed as a specifically prohibited recipient by the United States Government or the New Zealand Government. By using our websites and our services, you represent and warrant that you are not located in any such country or on any such list. You also will not use our websites or our services for any purpose prohibited by United States, New Zealand or any other law, including, without limitation, the development, design, manufacture or production of missiles, nuclear, chemical or biological weapons.

    Severability and Waiver

    38 If any provision of these terms is held to be invalid or unenforceable, the remaining provisions will remain in full force and effect. If we do not enforce any right or provision of these terms or if we in any instance grant any concession or indulgence, that will not be deemed a waiver of such right or provision or obligate us to grant any concession or indulgence to anyone else or to you again.

    Force Majeure

    39 We will not be liable by reason of any failure or delay in the performance of our obligations because of events beyond our reasonable control, which may include, without limitation, denial-of-service attacks, strikes, shortages, riots, insurrection, epidemics, pandemics, fires, flood, storm, explosions, acts of God, war, terrorism, governmental action, labour conditions, earthquakes, material shortages, extraordinary internet congestion or extraordinary connectivity issues or failure of a third party host, (each a \"Force Majeure Event\"). Upon the occurrence of a Force Majeure Event, we will be excused from any further performance of the obligations which are affected by that Force Majeure Event for so long as the event continues.

    DISCLAIMERS

    40 WE DON'T GIVE YOU ANY WARRANTY OR UNDERTAKING ABOUT THE SERVICES WHICH ARE PROVIDED \"AS IS\". TO AVOID DOUBT, ALL IMPLIED CONDITIONS OR WARRANTIES ARE EXCLUDED AS MUCH AS IS PERMITTED BY LAW, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY, FITNESS FOR PURPOSE, SAFETY, RELIABILITY, DURABILITY, TITLE AND NON-INFRINGEMENT.

    41 We will try to give you access to our services all the time, but we do not make any promises or provide you with a warranty that the services will be without any faults, bugs or interruptions.

    42 Whilst we intend that the services should be available 24 hours a day, seven days a week, it is possible that on occasions our services may be unavailable to permit maintenance or other development activity to take place or be periodically interrupted for reasons outside our control.

    43 Information provided on our services will change regularly. We will try to keep the information up to date and correct, but again, we do not make any promises or guarantees about the accuracy of such information.

    44 We do not warrant that the services will meet your requirements or that they will be suitable for any particular purpose.

    45 You are the controller in respect of some data Mega holds about you and Mega is the processor, for GDPR purposes. Mega is the controller in respect of some other data. See our Privacy and Data Policy for more details. These terms, our Privacy and Data Policy, our Cookie Policy and our Takedown Guidance Policy are the contract between us that governs our processing of that data. It is your sole responsibility to determine that the services meet the needs of you, your business or otherwise and are suitable for the purposes for which they are used.

    46 We also aren't legally responsible for:

    46.1 any corruption or loss of data or other content which you or anyone else may experience after using our services or any problems you may have when you access our services;

    46.2 devices or equipment that we do not own or have not given you;

    46.3 any loss or damage if you do not follow our reasonable instructions, these terms, our Privacy and Data Policy, our Cookie Policy and our Takedown Guidance Policy; and

    46.4 any actions or non-actions of other people which disrupt access to our services, including the

    46.4.1 content and nature of any data that you upload, access or share;

    46.4.2 content of ads appearing on our services (including links to advertisers' own websites) as the advertisers are responsible for the ads and we don't endorse the advertisers' products; and

    46.4.3 content of other people's websites even if a link to their websites is included on our websites or our mobile apps.

    47 You warrant that if you are accessing and using the services for the purposes of a business then, to the maximum extent permitted by law, any statutory consumer guarantees or legislation intended to protect non-business consumers in any jurisdiction (such as the Consumer Guarantees Act 1993 in New Zealand) do not apply to the supply of the services or these terms.

    LIMITATION OF LIABILITY AND INDEMNITY BY YOU

    48 TO THE MAXIMUM EXTENT PERMITTED BY LAW, WE (THIS INCLUDES OUR EMPLOYEES, OFFICERS, AGENTS AND AUTHORISED RESELLERS) ARE NOT LIABLE WHETHER IN CONTRACT, TORT (INCLUDING NEGLIGENCE), EQUITY OR ON ANY OTHER GROUNDS TO YOU OR ANYONE ELSE FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGE, LOSS, COST OR EXPENSE, DAMAGE TO PROPERTY, INJURY TO PERSONS, LOSS OF PROFITS, LOSS OF DATA OR REVENUE, LOSS OF USE, LOST BUSINESS OR MISSED OPPORTUNITIES, WASTED EXPENDITURE OR SAVINGS WHICH YOU MIGHT HAVE HAD, OCCURRING DIRECTLY OR INDIRECTLY FROM THE USE OR ABILITY OR INABILITY TO USE, OR RELIANCE ON, OUR SERVICES, AND BASED ON ANY TYPE OF LIABILITY INCLUDING BREACH OF CONTRACT, BREACH OF WARRANTY, TORT (INCLUDING NEGLIGENCE), STATUTORY OR PRODUCT LIABILITY, OR OTHERWISE.

    49 YOU SHALL INDEMNIFY US AGAINST ALL CLAIMS, COSTS (INCLUDING ALL OUR LEGAL COSTS), EXPENSES, DEMANDS OR LIABILITY, DAMAGES AND LOSSES WHETHER DIRECT, INDIRECT, CONSEQUENTIAL, OR OTHERWISE, AND WHETHER ARISING IN CONTRACT, TORT (INCLUDING IN EACH CASE NEGLIGENCE), OR EQUITY OR OTHERWISE, ARISING DIRECTLY OR INDIRECTLY FROM BREACH BY YOU OR ANYONE YOU GIVE ACCESS TO YOUR DATA, OF ANY OF THESE TERMS OR ANY POLICY REFERENCED IN THESE TERMS.

    50 IF YOU ARE NOT SATISFIED WITH THE SERVICES, THEN YOUR SOLE AND EXCLUSIVE REMEDY IS TO TERMINATE YOUR USE OF OUR SERVICES AND THE CONTRACT YOU HAVE WITH US.

    51 DESPITE THE ABOVE, IF ANY COURT OR OTHER COMPETENT AUTHORITY HOLDS US (THIS INCLUDES OUR OFFICERS, STAFF AND AGENTS) LIABLE FOR ANY MATTER RELATED TO THESE TERMS OR OUR SERVICES, OUR TOTAL COMBINED LIABILITY WILL BE LIMITED TO THE MOST RECENT SUBSCRIPTION AMOUNT YOU HAVE PAID TO US.

    Disputes and Choice of Law

    52 Any and all disputes arising out of this agreement, its termination, or our relationship with you shall be determined by binding arbitration under the Arbitration Act 1996 in Auckland, New Zealand, by one arbitrator who shall be a lawyer knowledgeable in relevant technology matters appointed by the President for the time being of the Arbitrators’ and Mediators’ Institute of New Zealand Incorporated (AMINZ) on a request by either you or us. The following terms apply to the arbitration in addition to those implied by New Zealand law:

    52.1 Notice must be given to apply for any interim measure in the arbitration proceeding;

    52.2 The arbitration proceeding will commence when a request is made to AMINZ to appoint an arbitrator;

    52.3 The arbitration shall be in English. The Arbitrator shall permit the parties and witnesses to appear by videoconference that we will organise and pay for; and

    52.4 We will pay the arbitrator's fees and expenses unless the arbitrator determines that you should meet some or all of those fees and expenses because your dispute is frivolous or vexatious.

    53 The relationship we have with you under these terms and their interpretation and construction together with any dispute, suspension or termination arising out of or in connection with them, is governed exclusively by New Zealand law. Mega does not submit to any other jurisdiction other than New Zealand and New Zealand law. You and we submit to the exclusive jurisdiction of the New Zealand arbitral tribunals (and courts for the purposes of the enforcement of any arbitral award or appeal on question of law). The parties agree to enforcement of the arbitral award and orders and any judgement in New Zealand and in any other country.

    Business Accounts

    54 For business accounts, the administrator of that account can see and deal with the files and data associated with all users within that account (including any data and any personal information). In addition:

    54.1 If the business account is suspended or terminated, the action will affect the data and personal information of every user within that account;

    54.2 The administrator of the business account will be able to see and deal with, change or delete the files and data associated with every user within that account (including any of data and personal information); and

    54.3 The administrator of the business account will be able to terminate any user’s account within the business account, restrict or disable usage of the account, change any user’s password and otherwise deny access to the account and all data and personal information and such users will then lose access to all their data and all personal information associated with their account.

    55 In respect of payment for business accounts:

    55.1 We will charge the credit card associated with the business account with the applicable fees (including for any specified minimum) at the monthly billing date, on a recurring basis;

    55.2 Notwithstanding clause 55.1, acting at our sole discretion we will be entitled to offer such alternative payment methods and/or payment terms to you as we deem appropriate, provided that where such alternative payment methods and/or payment terms have been accepted by you, we may subsequently revoke such alternative payment methods and/or payment terms on 30 days’ notice to you; and

    55.3 In the event that there is any dispute as to the amount of any payment due (for example in respect of the number of active users on your business account in any month) then our decision on such matter shall be final and binding, and in the absence of manifest error or other lawful error, you can't withhold payment or claim any set-off without getting our written agreement.

    56 Where a business account recurring payment fails for any reason, after 7 days we may suspend the account and all users within that account until payment is made. If no payment is made within a reasonable period of time, we will be entitled to terminate the business account and all users within that account, in which case all data and personal information associated with those users and the account will be subject to deletion in accordance with these terms.

    57 Business accounts are subject to a fair use policy as follows:

    57.1 Business accounts are only to be used for business purposes;

    57.2 Business accounts are intended for multiple users and are not to be held or used by one person;

    57.3 Each user must comply with these terms. Any breach of these terms by one user will be treated as a breach of these terms in respect of the whole account;

    57.4 Mega will not be liable to any business account user should the actions of another user within the account, including the administrator of the business account, cause any loss or damage to another user within the business account (including by way of deletion, amendment, sharing or any other dealing with data or personal information); and

    57.5 Each user’s use of the business service must be fair, reasonable and not excessive, as reasonably determined by us by reference to average and/or estimated typical per business user usage of the business service. We will consider usage to be excessive and unreasonable where it materially exceeds the average and/or estimated use patterns over any day, week or month (or other period of time as determined by us) (“excessive usage”). If we identify excessive usage or consider that usage patterns on any business account indicate that any of the usage is not for business purposes we may suspend, and after 30 days’ notice, terminate any or all of the users or the whole business account, in which case data and personal information associated with those users and the account will be subject to deletion in accordance with these terms. Examples of such unreasonable usage patterns also include: making non-business data publicly available, adding users who do not appear to Mega to be associated with the business, and uploading or sharing files from non-business related third party sites.

    Refunds

    58 Unless otherwise provided by New Zealand law or by a particular service offer, all purchases are final and non-refundable. If you believe that Mega has charged you in error, you must contact us within 90 days of such charge. No refunds will be given for any charges more than 90 days old. We reserve the right to issue refunds or credits at our sole discretion. If we issue a refund or credit, we are under no obligation to issue the same or similar refund in the future. This refund policy does not affect any statutory rights that may apply. If you have made a payment by mistake and have not used the subscription plan services, you must contact support@mega.nz within 24 hours. This will be acknowledged promptly and answered within 7 days.

    Recurring Paid Subscriptions

    59 Recurring subscriptions will renew indefinitely, either monthly or annually, based upon your chosen subscription period, unless the subscription is cancelled prior to a renewal date. For recurring subscriptions established via mobile apps using in-app-purchase platforms, you should refer to your app store account for details of the dates and terms of the subscription. Any other recurring subscription will renew on the same day of month as it was established, except in cases where the day is not available due to a short month, in which case the renewal date will be moved to the first day of the following month.

    Cancellation of Recurring Paid Subscriptions

    60 Recurring subscriptions established through the mobile app using in-app-purchase platforms should be cancelled through the relevant app store account directly. Any other recurring subscription should be cancelled by navigating to https://mega.nz/account in your browser while you are logged into your account and selecting the option to cancel your subscription. Any payments processed after an effective subscription cancellation will be promptly refunded by us. If you cancel a paid subscription, but you maintain your Mega account as a free account, access to your account may be restricted or blocked if the level of use is above the limits applying to free accounts at that time.

    Information and Privacy

    61 We reserve the right to disclose data and other information as required by law or any competent authority. Our approach is referenced in our Privacy and Data Policy and Takedown Guidance Policy, both of which are subject to these terms.

    62 You and anyone else you give access to are also bound by our Privacy and Data Policy, our Cookie Policy and Takedown Guidance Policy. By accepting these terms, you also accept our Privacy and Data Policy, our Cookie Policy and Takedown Guidance Policy.

    Notices

    63 You can contact us by sending an email to support@mega.nz. If we need to contact you or provide you with notice we will email you at the email address you have recorded in your account details and such notices will be valid and deemed to be received by you whether or not you are using that address. We may also send notices via any chat facility or internal messaging system we may provide.

    Rights to Third Parties

    64 Mega Limited employees, officers, agents, related companies and affiliates together with authorised suppliers of services to and authorised resellers of, our services, are entitled to the benefit of all indemnities and other provisions of these terms which are for the benefit of Mega in these terms.

    Entire Agreement

    65 These terms, our Privacy and Data Policy, our Cookie Policy and Takedown Guidance Policy, the terms of any plan you purchase and any other terms and policies expressly referenced in these terms, together constitute the entire agreement between us relating to your use of our services. From the date they come into force, in respect of any use of any of our services after that, they supersede and replace any prior agreement, arrangement or understanding between you and us regarding the use of our services. No agreement, arrangement or understanding alleged to be made between us, or representation alleged to be made, by us or on our behalf, to you, if inconsistent with these terms, shall be valid unless agreed to in writing by an executive officer of Mega Limited.


    Last updated 18 December 2020, effective 18 January 2021.

    [$516]
    [$1276]
    [$1277]
    [$1694]
    [$19202]
    [$19203]
    [$556]
    [$82]
    [$19194]
    [$19204]
    [$19205] [$19565]
    [$556]
    [$19566]
    Authy
    Duo Mobile
    Google Authenticator
    Microsoft Authenticator
    [$148]
    [$19194]
    [$19204]
    [$19212]
    [$19210]
    [$1960] \"\"
    [$19206]
    [$19207]
    [$19194]
    [$19208]
    [$19209]
    [$19210]
    [$1960] \"\"
    +
    [$19211]
    [$171]
    [$19213]
    [$19214]
    [$19210]
    [$1960] \"\"
    [$19215]
    [$1960]
    [$19194]
    [$19214]
    [$19210]
    [$1960] \"\"
    [$19210]
    [$1940] \"\"
    [$20215]
    [$1597]
    [$20216]
    [$20217]
    [$20218] [$8744]
    [$19210]
    [$1960] \"\"
    [$387]

    [$624]

    [$638]

    [$1279] [$1281]

    [$626]
    [$1278]
    [$630]
    [$1278]
    [$641]
    [$648]
    [$1283]
    [$1282]

    [$624]

    [$638]

    [$1280] [$1282]

    [$1284]
    [$1286]
    [$19944]
    [$650]
    [$145]
    [$651]
    [$645]
    [$652]
    [$646]
    [$653]
    [$647]
    [$654]
    [$1278]
    [$822]
    [$699]
    [$8771]

    [$8789]

    [$8790]

    [$8791]

    [$8792]
    [$8793]
    [$8794]

    [$8795]

    [$8796]
    [$8797]
    [$8798]
    [$650]:
    [$647]
    [$8799]
    [$8800]
    [$646]
    [$653]
    [$654]
    [$1278]
    [$8801]

    [$8802]

    [$699]
    \"\"
    0
    [$22879]
    00:00
    03:09

    [$7730]
    [$7731]
    [$7732]
    [$m_email_changed] [$m_email_change_info]
    ","mobile-nomegadrop":"
    ((TOP)) ((PAGESMENU))
    [$17533]
    [$17534]
    [$372]
    © [$0] [$381]
    ","mobile-megadrop":"
    ((TOP)) ((PAGESMENU))
    [$17404]
    [$372]
    [$1155], [$1607]
    \"\"
    [$5533]
    [$17618]
    [$1597]
    [$1346]
    5 files, 124 KB/s
    ","mobile-add-contact-card":"
    \"\"
    \"Name of contact\" added
    To share files or chat with \"Insert Name\", please use the MEGA app or access MEGA on your desktop.
    [$148]
    ","megainfo":"
    [$20554]
    [$20555]
    [$20556]
    \"\"
    \"\" \"\" \"\" \"\"
    [$16560]
    [$20557]
    [$8742]
    \"\" \"\"
    [$20558]
    [$20559]
    [$20556]
    \"\"
    \"\"
    [$20560]
    [$20561]
    [$8742]
    \"\"
    [$19727]
    DROPBOX
    *
    [$23686]
    [$16560]
    [$23350]
    [$23351]
    MEGA
    *
    [$23686]
    [$16560]
    [$23352]
    GOOGLE DRIVE
    *
    [$23686]
    [$16560]
    [$23353]
    [$23354]
    [$23355]
    \"\"
    \"\"
    \"\"
    \"\"
    [$956]
    [$20572] [$8742]
    \"\"
    [$955]
    [$24507] [$8742]
    \"\"
    MEGA CMD
    [$20574] [$8742]
    \"\"
    [$16541]
    [$16604] [$8742]
    \"\"
    [$20584]
    [$19312]
    [$20585]
    [$8742]
    [$20586]
    [$20587]
    [$8742]
    [$1161]
    [$20588]
    [$8742]
    [$20589]
    [$20592]
    [$8742]
    [$20598]
    [$20599]
    [$8742]
    [$20600]
    [$20601]
    [$8742]
    [$20602]
    [$23357] [$23358]
    [$20606] [$23359]
    [$20608] [$20609]
    [$1344] [$20603]
    [$20613]
    [$20614]
    [$carousel_quotation_1]
    https://www.techradar.com/news/the-best-cloud-storage
    [$carousel_quotation_2]
    https://www.businessnewsdaily.com/5851-cloud-storage-solutions.html
    [$carousel_quotation_3]
    https://www.cloudwards.net/review/mega/
    [$carousel_quotation_4]
    https://hosting.review/file-storage/mega-nz-review/
    [$carousel_quotation_10]
    Santiago
    [$carousel_quotation_11]
    Mihail-Donatos
    [$carousel_quotation_12]
    Austin
    [$carousel_quotation_13]
    Rolf
    [$carousel_quotation_14]
    Vivek
    [$carousel_quotation_15]
    Rob
    [$16637]
    [$16638]
    [$16639]
    3
    2
    3
    8
    [$16640]
    5
    5
    3
    7
    9
    ((BOTTOM))
    ","megadrop":"
    [$7368]
    [$17404]
    [$894] 0 / 0
    [$17405] -
    [$17406]
    [$670]
    EN
    ","login":"
    ((TOP))
    [$171]
    [$20635.a]

    [$20973]

    [$20972]
    ((BOTTOM))
    ","key":"
    ((TOP)) ((PAGESMENU))
    [$1142]
    [$511] [$1140] [$1141]
    [$1143]
    [$1144]
    [$1145]
    ((BOTTOM))
    ","fm":"
    [$5928] [$864]
    [$22667]
    [$16316]
    [$16316]
    [$22101] [$22102]
    [$payment_card_exp]
    [$payment_card_almost_exp]
    [$onboard_v4_control_dismiss_question]
    [$onboard_v4_control_finished]
    [$24765]
    [$17791]:
    [$17791]:
    [$17791]:
    [$17791]:
    [$17791]:
    [$24538]
    Jay Pierce
    [$24538]
    [$403]
    Inv No. (placeholder!!!!)
    [$16668]
    [$19282]
    Inv No. (placeholder!!!!)
    [$gallery_favourites_empty]
    [$1343]
    [$8762]
    [$782]
    [$782]
    [$6869]
    [$24196]
    [$978]
    [$18233]
    [$7740]
    [$19987]
    [$6871]
    [$8762]
    [$20668]
    [$20669]
    [$86]
     
    [$17398]
     
    [$87]
     
    [$93]
     
    [$17445]
     
    [$94]
     
    [$17150]
     
    URL
    [$19137]
    [$19138]
    [$19084]
    [$19139]
    [$403]
    [$19521]
    [$19189]
    [$bsn_active_u_num]
    [$19221]
    [$19086]
    [$bsn_total_u]
    [$bsn_compare_users]
    [$86] [$89] [$18760] [$19091] [$19749]
    [$bsn_curr_stge_usage]
    [$20138]
    [$19604]:
    [$19610]
    • [$19151]:
    • [$19150]:
    • [$19152]:
    • [$17818]:
    [$18076]
    [$495]
    [$18057]
    [$16130]
    [$164]
    ,
    [$16770]
    ,
    [$19187]
    ,
    [$5543]
    ,
    [$19926]
    ,
    [$restricted_folder_button]
    ,
    [$167]
    ,
    [$17821]
    [$86]
     
    [$5905]
     
    [$87]
     
    [$5906]
     
    [$86]
     
    [$1036]
     
    [$87]
     
    [$20670]
     
    [$20808]
    [$20808]
    [$6089]
    [$86] [$93] [$87] [$19134] [$12441] [$89]

    [$no_backups_header]

    [$backup_mobiles_header]
    [$backup_mobiles_info]
    [$backup_pcs_header]
    [$backup_pcs_info]
    [$backup_banner_info]
    [$18076]
    [$495]
    [$base_quota]
    0 B
    [$bsn_curr_addl]
    0 B
    [$18057]
    [$base_quota]
    0 B
    [$bsn_curr_addl_trf]
    0 B
    [$bsn_nb]
    0.00 NZD
    *
    €0.00
    [$bsn_nb_msg]
    [$18770]
    [$bsn_stge_anal]
    [$bsn_lbstge]
    [$bsn_nbstge]*
    [$bsn_last_renew_diff_ratio]
    [$bsn_dly_stge]**
    [$996]
    [$20936]
    * [$bsn_stge_fcst_msg]
    ** [$bsn_stge_calc_msg]
    [$19224]
    [$bsn_lbtrf]
    [$bsn_nbtrf]*
    [$bsn_last_renew_diff_ratio]
    [$19226]**
    [$996]
    [$20936]
    * [$bsn_trf_fcst_msg]
    ** [$bsn_trf_calc_msg]
    [$19222]
    [$bsn_curr_stge_usage]:
    [$164]
    [$19187]
    11%
    [$16770]
    356 GB
    [$restricted_folder_button]
    [$167]
    [$16130]
    [$164]
    ,
    [$16770]
    ,
    [$5543]
    ,
    [$restricted_folder_button]
    ,
    [$167]
    ,
    [$16516]
    ,
    [$17821]
    [$referral_prog_title]
    [$22712]
    [$22692]
    *
    [$22694]
    *
    *[$24963]
    [$16121]
    0 MB
    [$164]
    0 MB
    [$restricted_folder_button]
    0 MB
    [$17150]
    0 MB
    [$168]
    0 MB
    [$1352]
    [$16402]
    [$16308]
    [$16127]
    0 B
    [$22682]
    [$22712]
    [$22692]
    *
    [$22694]
    *
    *[$24963]
    [$16130]
    [$16131] 0 files 0 MB
    [$16132] 0 folders 0 MB
    [$168] 0 files 0 MB
    [$5542] 0 folders 0 MB
    [$5543] 0 folders 0 MB
    [$restricted_folder_button] 0 folders 0 MB
    [$16516] 0 files -
    [$16474] 0 files -
    [$20141]
    [$20152]
    [$recent_activity_hidden]
    [$16668]
    [$22682]
    [$22684]
    [$22689]
    [$71]
    [$22685]
    [$22686]
    [$22687]
    [$22691]
    [$22688]
    [$20575]
    [$22690]
    [$22692]
    0
    0
    [$22693]1
    0
    0
    [$22694]2
    0
    0
    [$22695]
    [$22696]
    [$22875]
    [$22697]
    [$23214]
    [$22808]
    [$22820]
    [$22820]
    [$23277]
    [$22833]
    [$22819]
    [$19297] [$17023] [$22809] [$477] [$89]
    [$22822]
    [$19297] [$17023] [$22809] [$477] [$89]
    [$16797]
    [$23398]
    [$23308]
    [$23309] [$481] [$20952]
    [$23399] [$23400] [$23401] €0 [$23402]
    [$23255]
    [$22698]
    [$22699] [$22700]
    [$22701]
    [$7195]
    [$7196]
    [$22702]
    [$22703] [$22700]
    [$22704] 0
    [$22705] 0
    [$22706] 0
    [$22707] 0
    [$22708] 0
    [$22709]
    [$22710]
    [$22711]
      ","dialogs":"
      • [$8579]
      • [$8578]
      • [$8577]
      • [$8577]
      [$whitespaces_on_filename]
      [$23219]
      [$6851]
      \"\"
      [$6960]
      [$7403]
      [$12483]
      [$7417]
      [$7418]
      [$12484]
      C
      /[$931]
      [$495]
      [$18057]
      [$7706]
      [$7707]
      [$7708]
      [$7709]
      [$7711]

      \"\" \"\"
      [$135]
      [$85]
      [$1898]
      \"\"
      0
      [$22879]
      [$17742]

      [$16560]
      [$17791]
      [$17398]
      [$19856]
      [$19857]

      [$7699]

      [$7700]

      [$pwd_link_sent]

      [$no_email_try_again]
      [$contact_support_email]

      [$1585]

      [$6217] [$6218], [$6219]
      [$6220]
      [$6001]

      [$6841]

      [$17089]
      [$6844]

      [$735]

      [$17805]

      [$9104]

      [$9103]

      [$68]

      [$whitespaces_on_filename]
      [$23219]

      [$17505]

      [$whitespaces_on_filename]
      [$17578]

      [$1026]

      [$7945]
      [$7972]

      [$18772]

      [$737]

      [$22077]
      [$22078]

      [$22080] 
      -------

      [$9070]

      [$9071]
      [$9072]

      [$8688]

      [$20647]

      [$217]
      [$217]
      [$20648]
      [$1100]

      [$425]

      [$whitespaces_on_filename]
      [$17578]

      [$63]

      [$5916]
      [$19180]
      [$5533]
      [$17578]
      [$19181]
      [$19182]
      [$1687]
      [$5589]
      [$17764]
      [$167]
      [$20461]
      [$6871]
      [$8000]
      [$7740]

      [$7534]
      [$7534]
      [$56]
      [$57]
      1

      [$15]

      [$1007]

      [$17407]

      [$1028]
      [$23621]
      [$8742]
      [$23622] [$8695]
      [$23623] [$8695]
      [$8953]
      [$17454]

      [$6821]
      bunny.mp4
      26 MB  •  04:30
      [$6849]
      x

      [$17454]

      [$23669]

      [$993]

      [$dnd_mute_title]

      [$22015]

      [$892]

      [$6849]
      [$86]
      Filename.ext
      Path:
      [$87] 100kb
      [$17150] 10 versions
      [$86]
      Filename.ext

      [$1038]

      [$7657]
      BETA

      [$239]

      [$240] [$242]

      [$71]

      [$5918]
      [$19109]
      [$19123]
      [$19124]

      [$19127]

      [$1344]

      [$57]
      [$5610]
      [$55]
      [$23706]
      [$23708]

      [$6783]

      [$6779]

      [$6780]
      121E888DD500583D715E
      121E888DD500583D715E
      [$6781]
      [$6782]
      121E888DD500583D715E121E888DD500583D715E

      [$190]

      [$968]

        \"avatar\"
        [$6881] [$7688]
        [$6883]:
        [$6858]:
        [$7689]:
        [$7690]
        [$7691]:
        [$7692]:
        [$7693]
        \"avatar\"

        [$7585] [$8436]

        PRO I
        wwewrwerwer
        1 month ([$6965])
        9.99
        [$6964]:
        [$481]
        [$6963]:
        [$913]
        [$932]

        [$25047]

        [$25048]

        [$25049]

        [$25050]

        PRO I
        [$922] ([$6965])
        9.99
        [$10630]
        [$10628] [$10630]
        [$10631]
        [$10632]
        [$481]
        [$7192]
        [$7192]
        [$10633]

        [$6198]

        [$8667]

        [$939] Bank of New Zealand, Wellington, New Zealand
        [$6222] 262 Queen Street, Auckland 1010, New Zealand
        [$6197] Mega Limited
        [$20951] 120 Albert St, Auckland 1010, New Zealand
        [$6200]

        752971-0000 (USD)

        752971-0002 (EUR)

        [$6203] BKNZNZ22
        [$6205] [$6206]
        [$23399]
        [$939] TransferWise Europe SA
        [$6222] Avenue Louise 54, Room S52, Brussels 1050, Belgium.
        [$6197] Mega Limited
        [$20951] 120 Albert St, Auckland 1010, New Zealand
        [$8668] BE53 9673 7979 2853
        [$6203] TRWIBEB1
        [$6205] [$6206]
        [$23399]
        • [$8670]
        • [$6207]
        • * [$8671]

        [$6822]

        [$6996]
        [$7005]:
        [$6998]

        [$6999]

        [$7004]

        PRO I
        1 month [$6941]
        9.99
        [$7201]
        [$7202]

        [$7985]

        [$7991] [$7986]

        [$7696]

        [$7647]

        [$7648]

        [$6810]
        [$12482]
        [$6811]
        [$6813]
        [$7231]
        [$6814]

        [$6815]

        [$12482]

        [$16164]
        [$17]

        [$120]

        [$17090]

        [$7100]
        [$17084] [$16356]
        [$174]
        [$16388]
        0 %
        100 %
        [$23950]
        *
        /[$931]
        [$23948]
        [$23949]
        *
        /[$931]
        [$23952]
        *
        /[$931]
        [$506]
        [$24066]
        *
        /[$931]
        [$23789.s]
        [$23790.s]
        [$23791]
        [$23793]
        [$23958]
        [$24550]
        [$23803]
        [$23959]
        [$23956]
        [$23789.s]
        [$23790.s]
        [$23791]
        [$23793]
        [$23958]
        [$24550]
        [$23803]
        [$23959]
        [$23956]
        [$23789.s]
        [$23790.s]
        [$23791]
        [$23793]
        [$23958]
        [$24550]
        [$23803]
        [$23959]
        [$23956]
        [$23789.s]
        [$23790.s]
        [$23791]
        [$23793]
        [$23958]
        [$24550]
        [$23803]
        [$23959]
        [$23956]

        [$16365]

        [$achievem_storagetitle]

        XX GB
        0
        [$16278]
        [$20235]
        [$16280]
        [$20176]
        [$16282]
        [$20177]
        [$20409]
        [$achievem_smsveridesc]

        [$16282]

        [$20177]

        [$16317]

        [$16318]

        [$16331]

        [$16319]
        [$9093]
        [$16320]
        [$16332]
        1. [$16333]
        2. [$16334]

        [$16335]

        [$16322]
        [$16323]

        [$16101]

        [$7434]
        [$89]
        [$16100]

        [$16360]

        [$16312]

        [$16304]
        [$174]
        [$16306]
        [$16308]
        [$16310]
        [$16313]
        [$16313] [$16314]
        [$16306]

        [$16485]

        [$16487]

        [$7160]

        [$16895]

        [$1934] [$737]
        [$16897]
        [$16898]
        [$16899]

        [$16448]

        [$17085]

        [$17401]

        [$17412]
        [$17399]
        [$17413]

        [$17401]

        [$5622]
        [$17407]
        [$18218]
        [$20956]
        [$18217]
        [$18215]
        [$18216]
        [$18215]
        [$17410]

        [$18306]

        [$18307]

        [$7371]

        [$19191]:
        [$19192]

        [$19289]

        [$19205]
        [$19565]

        [$19196]
        [$19197]
        [$19198]

        [$8963]

        [$backup_setup_2fa_recovery_key]
        [$19199]
        [$19200]

        [$19191]:

        [$481]
        [$996]
        [$20217]
        [$20218] [$8744]
        [$20405]

        [$19826]

        [$19852]

        [$19853]

        [$19854]

        [$20189]
        [$8742].

        [$8963]

        [$19826]

        [$20192]

        [$20193]
        [$20194]
        [$20195]

        [$19104]

        [$19117]

        [$7434]:
        major@126.com
        [$18771]:
        major@126.com

        [$16735]

        [$19604]:

        Are you sure you want to disable the account of Jay Pierce?

        Note: You can re-enable the account at any later stage from the disabled accounts list.

        Are you sure you want to disable the account of Jay Pierce?

        [$19621]

        [$19622]

        [$19805]

        [$19084]
        [$19139]
        [$18677]
        [$19806]

        [$20627]

        [$165] [$20628]
        [$20629] [$20630]

        [$payment_card_exp_title]

        [$payment_card_exp_desc]

        [$20401] [$pro_flexi_account_suspended_title]

        [$20402]

        [$pro_flexi_account_suspended_description]

        - -

        -

        -

        [$20644]

        [$22114]

        [$22120]

        [$22682]

        [$22718]

        [$22712]
        [$22713]
        [$22714]
        [$22715]
        [$22716]
        1. [$22719]
        2. [$22720]
        3. [$22721]
        [$22771][$22723]
        [$22772][$22724]
        [$22725]
        [$22726]
        [$22727]
        [$22728]
        [$22757]
        [$22729]
        [$23181.d]
        [$22717]

        [$22741]

        [$22742]
        [$22743]
        [$ref_link_start_page] [$19530] [$955] [$956] [$7337] [$16113] [$16111] [$384] [$16112] [$24401] [$24367] [$24432] [$16541] [$22745] [$22746]
        [$22747]
        [$22805]

        [$22748]

        [$22749]

        [$23295]

        [$23296]
        [$23297]
        [$23299]
        [$23300]
        [$23302]
        [$23303]
        [$481]
        [$20952]
        [$23512]
        [$referral_bitcoin_update]
        [$78]
        [$79]
        [$23304]
        [$427]
        [$23307]
        [$78]
        [$79]
        [$23308]
        [$23309] [$481] [$20952]
        [$23310]
        [$23311]
        [$23312]
        ------------

        [$23313]
        ------------
        [$23314]
        ------------
        [$23315]

        [$23316]

        [$23317]
        [$22833]
        [$25002]

        [$19639]

        [$desktopapp_dialog_desc]

        [$ra_title]

        [$ra_lbl_selcttype]

        [$ra_type_a]
        [$ra_type_b]
        [$ra_type_c]
        [$ra_type_d]
        [$ra_type_e]
        [$ra_type_f]
        [$ra_type_g]
        [$ra_type_h]
        [$ra_msg_selectoption]

        [$stop_backup_button]

        [$stop_backup_info]

        [$move_folder_info]
        [$move_to_label]
        [$delete_folder_info]
        ","dialogs-common":"

        [$19906]

        [$22247]

        [$22249]

        [$22250]
        [$22251]
        [$22248]

        [$1768]

        [$22253]

        [$22254]

        [$22250]
        [$22251]
        [$24644]
        [$24645]
        [$24646]
        [$24647]
        [$24643]
        [$24648]
        [$24649]
        [$24650]
        [$24651]
        [$24652]
        [$24653]
        [$24654]
        [$24655]
        [$24656]
        [$24657]
        [$24658]
        [$24659]
        [$24660]

        [$24851]

        [$your_privacy]

        [$cookie_banner_txt]

        ","developersettings":"
        ((TOP))

        Developer Settings

        API path
        Static path
        CMS path
        Dark mode
        Mobile mode
        Evento
        Console debug logging
        Show StringIDs
        ((BOTTOM))
        ","chatlink":"
        ","bottom2":""} \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/0B914E7C3955BE24FBD1C3C78DDE9F2F8B41F1B7 b/home/.surf/cache/WebKitCache/Version 16/Blobs/0B914E7C3955BE24FBD1C3C78DDE9F2F8B41F1B7 new file mode 100644 index 0000000..00b7dc2 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/0B914E7C3955BE24FBD1C3C78DDE9F2F8B41F1B7 @@ -0,0 +1,231 @@ +/*1673114480,,JIT Construction: v1006796584,es_ES*/ + +/** + * Copyright (c) 2017-present, Facebook, Inc. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Facebook. + * + * As with any software that integrates with the Facebook platform, your use of + * this software is subject to the Facebook Platform Policy + * [http://developers.facebook.com/policy/]. This copyright 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. + */ +try {(window.FB && !window.FB.__buffer) || (function() { var apply = Function.prototype.apply; function bindContext(fn, thisArg) { return function _sdkBound() { return apply.call(fn, thisArg, arguments); }; } var global = { __type: 'JS_SDK_SANDBOX', window: window, document: window.document }; var sandboxSafelist = [ 'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval' ]; for (var i = 0; i < sandboxSafelist.length; i++) { global[sandboxSafelist[i]] = bindContext( window[sandboxSafelist[i]], window ); } (function() { var self = window; var __DEV__ = 0; function emptyFunction() {}; var __transform_includes = {}; var __annotator, __bodyWrapper; var __w, __t; var undefined; with (this) { (function(){var a={},b=function(a,b){if(!a&&!b)return null;var c={};typeof a!=="undefined"&&(c.type=a);typeof b!=="undefined"&&(c.signature=b);return c},c=function(a,c){return b(a&&/^[A-Z]/.test(a)?a:void 0,c&&(c.params&&c.params.length||c.returns)?"function("+(c.params?c.params.map(function(a){return/\?/.test(a)?"?"+a.replace("?",""):a}).join(","):"")+")"+(c.returns?":"+c.returns:""):void 0)},d=function(a,b,c){return a},e=function(a,b,d){"sourcemeta"in __transform_includes&&(a.__SMmeta=b);if("typechecks"in __transform_includes){b=c(b?b.name:void 0,d);b&&__w(a,b)}return a},f=function(a,b,c){return c.apply(a,b)},g=function(a,b,c,d){d&&d.params&&__t.apply(a,d.params);c=c.apply(a,b);d&&d.returns&&__t([c,d.returns]);return c};g=function(b,c,d,e,f){if(f){f.callId||(f.callId=f.module+":"+(f.line||0)+":"+(f.column||0));e=f.callId;a[e]=(a[e]||0)+1}return d.apply(b,c)};typeof __transform_includes==="undefined"?(__annotator=d,__bodyWrapper=f):(__annotator=e,"codeusage"in __transform_includes?(__annotator=d,__bodyWrapper=g,__bodyWrapper.getCodeUsage=function(){return a},__bodyWrapper.clearCodeUsage=function(){a={}}):"typechecks"in __transform_includes?__bodyWrapper=f:__bodyWrapper=f)})(); +__t=function(a){return a[0]},__w=function(a){return a}; +(function(a){var b={},c=["global","require","requireDynamic","requireLazy","module","exports"],d=["global","require","importDefault","importNamespace","requireLazy","module","exports"],e=1,f=32,g=64,h={},i=Object.prototype.hasOwnProperty;function j(e,h){if(!i.call(b,e)){if(h)return null;throw new Error("Module "+e+" has not been defined")}h=b[e];if(h.resolved)return h;e=h.special;var j=h.factory.length,n=e&f?d.concat(h.deps):c.concat(h.deps),o=[],p;for(var q=0;q1?Number(arguments[1]):0;isNaN(c)&&(c=0);var d=Math.min(Math.max(c,0),b.length);return b.indexOf(String(a),c)==d},endsWith:function(a){var b=String(this);if(this==null)throw new TypeError("String.prototype.endsWith called on null or undefined");var c=b.length,d=String(a),e=arguments.length>1?Number(arguments[1]):c;isNaN(e)&&(e=0);var f=Math.min(Math.max(e,0),c),g=f-d.length;return g<0?!1:b.lastIndexOf(d,g)==g},includes:function(a){if(this==null)throw new TypeError("String.prototype.contains called on null or undefined");var b=String(this),c=arguments.length>1?Number(arguments[1]):0;isNaN(c)&&(c=0);return b.indexOf(String(a),c)!=-1},repeat:function(a){if(this==null)throw new TypeError("String.prototype.repeat called on null or undefined");var b=String(this);a=a?Number(a):0;isNaN(a)&&(a=0);if(a<0||a===Infinity)throw RangeError();if(a===1)return b;if(a===0)return"";var c="";while(a)a&1&&(c+=b),(a>>=1)&&(b+=b);return c}};b=a;f["default"]=b}),66); +__d("ES6Array",[],(function(a,b,c,d,e,f){"use strict";a={from:function(a){if(a==null)throw new TypeError("Object is null or undefined");var b=arguments[1],c=arguments[2],d=this,e=Object(a),f=typeof Symbol==="function"&&navigator.userAgent.indexOf("Trident/7.0")===-1?typeof Symbol==="function"?Symbol.iterator:"@@iterator":"@@iterator",g=typeof b==="function",h=typeof e[f]==="function",i=0,j,k;if(h){j=typeof d==="function"?new d():[];var l=e[f](),m;while(!(m=l.next()).done)k=m.value,g&&(k=b.call(c,k,i)),j[i]=k,i+=1;j.length=i;return j}var n=e.length;(isNaN(n)||n<0)&&(n=0);j=typeof d==="function"?new d(n):new Array(n);while(i>>0;for(var e=0;e>>0,f=arguments[1],g=f>>0,h=g<0?Math.max(e+g,0):Math.min(g,e),i=arguments[2],j=i===void 0?e:i>>0,k=j<0?Math.max(e+j,0):Math.min(j,e);while(h=this.MIN_SAFE_INTEGER&&a<=this.MAX_SAFE_INTEGER&&Math.floor(a)===a},EPSILON:a,MAX_SAFE_INTEGER:b,MIN_SAFE_INTEGER:c};e=d;f["default"]=e}),66); +__d("ES6Object",[],(function(a,b,c,d,e,f){var g={}.hasOwnProperty;a={assign:function(a){if(a==null)throw new TypeError("Object.assign target cannot be null or undefined");a=Object(a);for(var b=0;b<(arguments.length<=1?0:arguments.length-1);b++){var c=b+1<1||arguments.length<=b+1?void 0:arguments[b+1];if(c==null)continue;c=Object(c);for(var d in c)g.call(c,d)&&(a[d]=c[d])}return a},is:function(a,b){if(a===b)return a!==0||1/a===1/b;else return a!==a&&b!==b}};b=a;f["default"]=b}),66); +__d("ES5Array",[],(function(a,b,c,d,e,f){a={isArray:function(a){return Object.prototype.toString.call(a)=="[object Array]"}};b=a;f["default"]=b}),66); +__d("ES5ArrayPrototype",[],(function(a,b,c,d,e,f){a={indexOf:function(a,b){b=b;var c=this.length;b|=0;b<0&&(b+=c);for(;b=0?1:-1}a={includes:function(a){"use strict";if(a!==void 0&&g(this)&&!(typeof a==="number"&&isNaN(a)))return h.apply(this,arguments)!==-1;var b=Object(this),c=b.length?i(b.length):0;if(c===0)return!1;var d=arguments.length>1?j(arguments[1]):0,e=d<0?Math.max(c+d,0):d,f=isNaN(a)&&typeof a==="number";while(e1)))/4)-A((a-1901+b)/100)+A((a-1601+b)/400)};(o=b.hasOwnProperty)||(o=function(a){var b={},c;(b.__proto__=null,b.__proto__={toString:1},b).toString!=n?o=function(a){var b=this.__proto__;a=a in(this.__proto__=null,this);this.__proto__=b;return a}:(c=b.constructor,o=function(a){var b=(this.constructor||c).prototype;return a in this&&!(a in b&&this[a]===b[a])});return o.call(this,a)});p=function(a,b){var d=0,e,f;(e=function(){this.valueOf=0}).prototype.valueOf=0;f=new e();for(e in f)o.call(f,e)&&d++;f=null;!d?(f=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],p=function(a,b){var d=n.call(a)==t,e,g=!d&&typeof a.constructor!="function"&&c[typeof a.hasOwnProperty]&&a.hasOwnProperty||o;for(e in a)!(d&&e=="prototype")&&g.call(a,e)&&b(e);for(d=f.length;e=f[--d];g.call(a,e)&&b(e));}):d==2?p=function(a,b){var c={},d=n.call(a)==t,e;for(e in a)!(d&&e=="prototype")&&!o.call(c,e)&&(c[e]=1)&&o.call(a,e)&&b(e)}:p=function(a,b){var c=n.call(a)==t,d,e;for(d in a)!(c&&d=="prototype")&&o.call(a,d)&&!(e=d==="constructor")&&b(d);(e||o.call(a,d="constructor"))&&b(d)};return p(a,b)};if(!s("json-stringify")){var D={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},E="000000",F=function(a,b){return(E+(b||0)).slice(-a)},G="\\u00",H=function(a){var b='"',c=0,d=a.length,e=!z||d>10,f=e&&(z?a.split(""):a);for(;c-1/0&&h<1/0){if(C){m=A(h/864e5);for(j=A(m/365.2425)+1970-1;C(j+1,0)<=m;j++);for(k=A((m-C(j,0))/30.42);C(j,k+1)<=m;k++);m=1+m-C(j,k);r=(h%864e5+864e5)%864e5;s=A(r/36e5)%24;t=A(r/6e4)%60;z=A(r/1e3)%60;r=r%1e3}else j=h.getUTCFullYear(),k=h.getUTCMonth(),m=h.getUTCDate(),s=h.getUTCHours(),t=h.getUTCMinutes(),z=h.getUTCSeconds(),r=h.getUTCMilliseconds();h=(j<=0||j>=1e4?(j<0?"-":"+")+F(6,j<0?-j:j):F(4,j))+"-"+F(2,k+1)+"-"+F(2,m)+"T"+F(2,s)+":"+F(2,t)+":"+F(2,z)+"."+F(3,r)+"Z"}else h=null;else typeof h.toJSON=="function"&&(i!=v&&i!=w&&i!=x||o.call(h,"toJSON"))&&(h=h.toJSON(a))}c&&(h=c.call(b,a,h));if(h===null)return"null";i=n.call(h);if(i==y)return""+h;else if(i==v)return h>-1/0&&h<1/0?""+h:"null";else if(i==w)return H(""+h);if(typeof h=="object"){for(j=g.length;j--;)if(g[j]===h)throw l();g.push(h);B=[];k=f;f+=e;if(i==x){for(m=0,j=h.length;m0)for(e="",d>10&&(d=10);e.length=48&&g<=57||g>=97&&g<=102||g>=65&&g<=70||N();c+=J("0x"+a.slice(d,L));break;default:N()}}else{if(g==34)break;g=a.charCodeAt(L);d=L;while(g>=32&&g!=92&&g!=34)g=a.charCodeAt(++L);c+=a.slice(d,L)}}if(a.charCodeAt(L)==34){L++;return c}N();default:d=L;g==45&&(f=!0,g=a.charCodeAt(++L));if(g>=48&&g<=57){g==48&&(g=a.charCodeAt(L+1),g>=48&&g<=57)&&N();f=!1;for(;L=48&&g<=57);L++);if(a.charCodeAt(L)==46){e=++L;for(;e=48&&g<=57);e++);e==L&&N();L=e}g=a.charCodeAt(L);if(g==101||g==69){g=a.charCodeAt(++L);(g==43||g==45)&&L++;for(e=L;e=48&&g<=57);e++);e==L&&N();L=e}return+a.slice(d,L)}f&&N();if(a.slice(L,L+4)=="true"){L+=4;return!0}else if(a.slice(L,L+5)=="false"){L+=5;return!1}else if(a.slice(L,L+4)=="null"){L+=4;return null}N()}}return"$"},P=function(a){var b,c;a=="$"&&N();if(typeof a=="string"){if((z?a.charAt(0):a[0])=="@")return a.slice(1);if(a=="["){b=[];for(;;c||(c=!0)){a=O();if(a=="]")break;c&&(a==","?(a=O(),a=="]"&&N()):N());a==","&&N();b.push(P(a))}return b}else if(a=="{"){b={};for(;;c||(c=!0)){a=O();if(a=="}")break;c&&(a==","?(a=O(),a=="}"&&N()):N());(a==","||typeof a!="string"||(z?a.charAt(0):a[0])!="@"||O()!=":")&&N();b[a.slice(1)]=P(O())}return b}N()}return a},Q=function(a,b,c){c=R(a,b,c);c===q?delete a[b]:a[b]=c},R=function(a,b,c){var d=a[b],e;if(typeof d=="object"&&d)if(n.call(d)==x)for(e=d.length;e--;)Q(d,e,c);else p(d,function(a){Q(d,a,c)});return c.call(a,b,d)};a.parse=function(a,b){var c;L=0;M=""+a;a=P(O());O()!="$"&&N();L=M=null;return b&&n.call(b)==t?R((c={},c[""]=a,c),"",b):a}}}a.runInContext=k;return a}if(d&&!b)k(e,d);else{var l=e.JSON,m=e.JSON3,n=!1,o=k(e,e.JSON3={noConflict:function(){n||(n=!0,e.JSON=l,e.JSON3=m,l=m=null);return o}});e.JSON={parse:o.parse,stringify:o.stringify}}b&&i(function(){return o})}).call(this)}var k=!1;function l(){k||(k=!0,j());return h.exports}function b(a){switch(a){case void 0:return l()}}e.exports=b}),null); +__d("json3",["json3-3.3.2"],(function(a,b,c,d,e,f){e.exports=b("json3-3.3.2")()}),null); +__d("ES",["ES5FunctionPrototype","ES5StringPrototype","ES6Array","ES6ArrayPrototype","ES6Number","ES6Object","ES7ArrayPrototype","ES7Object","ES7StringPrototype","json3"],(function(a,b,c,d,e,f,g){var h={}.toString,i={"JSON.stringify":c("json3").stringify,"JSON.parse":c("json3").parse};d={"Function.prototype":c("ES5FunctionPrototype"),"String.prototype":c("ES5StringPrototype")};e={Object:c("ES6Object"),"Array.prototype":c("ES6ArrayPrototype"),Number:c("ES6Number"),Array:c("ES6Array")};f={Object:c("ES7Object"),"String.prototype":c("ES7StringPrototype"),"Array.prototype":c("ES7ArrayPrototype")};function a(a){for(var b in a){if(!Object.prototype.hasOwnProperty.call(a,b))continue;var c=a[b],d=b.split(".");if(d.length===2){var e=d[0],f=d[1];if(!e||!f||!window[e]||!window[e][f]){var g=e?window[e]:"-",h=e&&window[e]&&f?window[e][f]:"-";throw new Error("Unexpected state (t11975770): "+(e+", "+f+", "+g+", "+h+", "+b))}}e=d.length===2?window[d[0]][d[1]]:window[b];for(f in c){if(!Object.prototype.hasOwnProperty.call(c,f))continue;if(typeof c[f]!=="function"){i[b+"."+f]=c[f];continue}g=e[f];i[b+"."+f]=g&&/\{\s+\[native code\]\s\}/.test(g)?g:c[f]}}}a(d);a(e);a(f);function b(a,b,c){var d=c?h.call(a).slice(8,-1)+".prototype":a,e;if(Array.isArray(a))if(typeof d==="string")e=i[d+"."+b];else throw new Error("Can't polyfill "+b+" directly on an Array.");else if(typeof d==="string")e=i[d+"."+b];else if(typeof a==="string")throw new Error("Can't polyfill "+b+" directly on a string.");else e=a[b];if(typeof e==="function"){for(var f=arguments.length,g=new Array(f>3?f-3:0),j=3;j=0)continue;c[d]=a[d]}return c};g.objectWithoutProperties=g.objectWithoutPropertiesLoose;g.taggedTemplateLiteralLoose=function(a,b){b||(b=a.slice(0));a.raw=b;return a};g.bind=b("ES5FunctionPrototype").bind;e.exports=g}),null);var ES=require('ES');var babelHelpers=require('sdk.babelHelpers');(function(a,b){var c="keys",d="values",e="entries",f=function(){var a=h(Array),b;a||(b=function(){"use strict";function a(a,b){this.$1=a,this.$2=b,this.$3=0}var b=a.prototype;b.next=function(){if(this.$1==null)return{value:void 0,done:!0};var a=this.$1,b=this.$1.length,f=this.$3,g=this.$2;if(f>=b){this.$1=void 0;return{value:void 0,done:!0}}this.$3=f+1;if(g===c)return{value:f,done:!1};else if(g===d)return{value:a[f],done:!1};else if(g===e)return{value:[f,a[f]],done:!1}};b[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]=function(){return this};return a}());return{keys:a?function(a){return a.keys()}:function(a){return new b(a,c)},values:a?function(a){return a.values()}:function(a){return new b(a,d)},entries:a?function(a){return a.entries()}:function(a){return new b(a,e)}}}(),g=function(){var a=h(String),b;a||(b=function(){"use strict";function a(a){this.$1=a,this.$2=0}var b=a.prototype;b.next=function(){if(this.$1==null)return{value:void 0,done:!0};var a=this.$2,b=this.$1,c=b.length;if(a>=c){this.$1=void 0;return{value:void 0,done:!0}}var d=b.charCodeAt(a);if(d<55296||d>56319||a+1===c)d=b[a];else{c=b.charCodeAt(a+1);c<56320||c>57343?d=b[a]:d=b[a]+b[a+1]}this.$2=a+d.length;return{value:d,done:!1}};b[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]=function(){return this};return a}());return{keys:function(){throw TypeError("Strings default iterator doesn't implement keys.")},values:a?function(a){return a[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]()}:function(a){return new b(a)},entries:function(){throw TypeError("Strings default iterator doesn't implement entries.")}}}();function h(a){return typeof a.prototype[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]==="function"&&typeof a.prototype.values==="function"&&typeof a.prototype.keys==="function"&&typeof a.prototype.entries==="function"}var i=function(){"use strict";function a(a,b){this.$1=a,this.$2=b,this.$3=Object.keys(a),this.$4=0}var b=a.prototype;b.next=function(){var a=this.$3.length,b=this.$4,f=this.$2,g=this.$3[b];if(b>=a){this.$1=void 0;return{value:void 0,done:!0}}this.$4=b+1;if(f===c)return{value:g,done:!1};else if(f===d)return{value:this.$1[g],done:!1};else if(f===e)return{value:[g,this.$1[g]],done:!1}};b[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]=function(){return this};return a}(),j={keys:function(a){return new i(a,c)},values:function(a){return new i(a,d)},entries:function(a){return new i(a,e)}};function k(a,b){if(typeof a==="string")return g[b||d](a);else if(Array.isArray(a))return f[b||d](a);else if(a[typeof Symbol==="function"?Symbol.iterator:"@@iterator"])return a[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]();else return j[b||e](a)}ES("Object","assign",!1,k,{KIND_KEYS:c,KIND_VALUES:d,KIND_ENTRIES:e,keys:function(a){return k(a,c)},values:function(a){return k(a,d)},entries:function(a){return k(a,e)},generic:j.entries});a.FB_enumerate=k})(typeof global==="undefined"?this:global); + __d("JSSDKCanvasPrefetcherConfig",[],{"enabled":true,"excludedAppIds":[144959615576466,768691303149786,320528941393723],"sampleRate":500});__d("JSSDKConfig",[],{"features":{"allow_non_canvas_app_events":false,"error_handling":{"rate":4},"e2e_ping_tracking":{"rate":0.1},"xd_timeout":{"rate":1,"value":60000},"use_bundle":false,"should_log_response_error":true,"popup_blocker_scribe_logging":{"rate":100},"https_only_enforce_starting":2538809200000,"https_only_learn_more":"https:\/\/developers.facebook.com\/blog\/post\/2018\/06\/08\/enforce-https-facebook-login\/","https_only_scribe_logging":{"rate":1},"log_perf":{"rate":0.001},"use_x_xd":{"rate":100},"cache_auth_response":{"rate":100},"oauth_funnel_logger_version":1,"force_popup_to_canvas_apps_with_id":[],"force_popup_to_all_canvas_app":false,"max_oauth_dialog_retries":{"rate":100,"value":10},"plugin_tags_blacklist":[],"idle_callback_wait_time_ms":3000,"chat_plugin_facade_timeout_ms":8000,"chat_plugin_facade_enabled_pageids":["102493178867330","107331571710078","1032787970130843","107771111665395","261907812360345","101305975654752","275483104252055","101664622285042","112682113428700","271628573687012","385757598521443","100545935690488"],"should_enable_ig_login_status_fetch":true,"log_cookies_usage":{"rate":0.1},"allow_shadow_dom_for_apps_with_id":[520916077950649,152351391599356,132081130190180,468663283258845,409976882430412,189845245141894,360467581347,274266067164],"allow_shadow_dom":true,"xfoa_login_enabled":false}});__d("JSSDKCssConfig",[],{"rules":".fb_hidden{position:absolute;top:-10000px;z-index:10001}.fb_reposition{overflow:hidden;position:relative}.fb_invisible{display:none}.fb_reset{background:none;border:0;border-spacing:0;color:#000;cursor:auto;direction:ltr;font-family:'lucida grande', tahoma, verdana, arial, sans-serif;font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:1;margin:0;overflow:visible;padding:0;text-align:left;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-spacing:normal}.fb_reset>div{overflow:hidden}\u0040keyframes fb_transform{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.fb_animate{animation:fb_transform .3s forwards}\n.fb_dialog{background:rgba(82, 82, 82, .7);position:absolute;top:-10000px;z-index:10001}.fb_dialog_advanced{border-radius:8px;padding:10px}.fb_dialog_content{background:#fff;color:#373737}.fb_dialog_close_icon{background:url(https:\/\/connect.facebook.net\/rsrc.php\/v3\/yq\/r\/IE9JII6Z1Ys.png) no-repeat scroll 0 0 transparent;cursor:pointer;display:block;height:15px;position:absolute;right:18px;top:17px;width:15px}.fb_dialog_mobile .fb_dialog_close_icon{left:5px;right:auto;top:5px}.fb_dialog_padding{background-color:transparent;position:absolute;width:1px;z-index:-1}.fb_dialog_close_icon:hover{background:url(https:\/\/connect.facebook.net\/rsrc.php\/v3\/yq\/r\/IE9JII6Z1Ys.png) no-repeat scroll 0 -15px transparent}.fb_dialog_close_icon:active{background:url(https:\/\/connect.facebook.net\/rsrc.php\/v3\/yq\/r\/IE9JII6Z1Ys.png) no-repeat scroll 0 -30px transparent}.fb_dialog_iframe{line-height:0}.fb_dialog_content .dialog_title{background:#6d84b4;border:1px solid #365899;color:#fff;font-size:14px;font-weight:bold;margin:0}.fb_dialog_content .dialog_title>span{background:url(https:\/\/connect.facebook.net\/rsrc.php\/v3\/yd\/r\/Cou7n-nqK52.gif) no-repeat 5px 50\u0025;float:left;padding:5px 0 7px 26px}body.fb_hidden{height:100\u0025;left:0;margin:0;overflow:visible;position:absolute;top:-10000px;transform:none;width:100\u0025}.fb_dialog.fb_dialog_mobile.loading{background:url(https:\/\/connect.facebook.net\/rsrc.php\/v3\/ya\/r\/3rhSv5V8j3o.gif) white no-repeat 50\u0025 50\u0025;min-height:100\u0025;min-width:100\u0025;overflow:hidden;position:absolute;top:0;z-index:10001}.fb_dialog.fb_dialog_mobile.loading.centered{background:none;height:auto;min-height:initial;min-width:initial;width:auto}.fb_dialog.fb_dialog_mobile.loading.centered #fb_dialog_loader_spinner{width:100\u0025}.fb_dialog.fb_dialog_mobile.loading.centered .fb_dialog_content{background:none}.loading.centered #fb_dialog_loader_close{clear:both;color:#fff;display:block;font-size:18px;padding-top:20px}#fb-root #fb_dialog_ipad_overlay{background:rgba(0, 0, 0, .4);bottom:0;left:0;min-height:100\u0025;position:absolute;right:0;top:0;width:100\u0025;z-index:10000}#fb-root #fb_dialog_ipad_overlay.hidden{display:none}.fb_dialog.fb_dialog_mobile.loading iframe{visibility:hidden}.fb_dialog_mobile .fb_dialog_iframe{position:sticky;top:0}.fb_dialog_content .dialog_header{background:linear-gradient(from(#738aba), to(#2c4987));border-bottom:1px solid;border-color:#043b87;box-shadow:white 0 1px 1px -1px inset;color:#fff;font:bold 14px Helvetica, sans-serif;text-overflow:ellipsis;text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0;vertical-align:middle;white-space:nowrap}.fb_dialog_content .dialog_header table{height:43px;width:100\u0025}.fb_dialog_content .dialog_header td.header_left{font-size:12px;padding-left:5px;vertical-align:middle;width:60px}.fb_dialog_content .dialog_header td.header_right{font-size:12px;padding-right:5px;vertical-align:middle;width:60px}.fb_dialog_content .touchable_button{background:linear-gradient(from(#4267B2), to(#2a4887));background-clip:padding-box;border:1px solid #29487d;border-radius:3px;display:inline-block;line-height:18px;margin-top:3px;max-width:85px;padding:4px 12px;position:relative}.fb_dialog_content .dialog_header .touchable_button input{background:none;border:none;color:#fff;font:bold 12px Helvetica, sans-serif;margin:2px -12px;padding:2px 6px 3px 6px;text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0}.fb_dialog_content .dialog_header .header_center{color:#fff;font-size:16px;font-weight:bold;line-height:18px;text-align:center;vertical-align:middle}.fb_dialog_content .dialog_content{background:url(https:\/\/connect.facebook.net\/rsrc.php\/v3\/y9\/r\/jKEcVPZFk-2.gif) no-repeat 50\u0025 50\u0025;border:1px solid #4a4a4a;border-bottom:0;border-top:0;height:150px}.fb_dialog_content .dialog_footer{background:#f5f6f7;border:1px solid #4a4a4a;border-top-color:#ccc;height:40px}#fb_dialog_loader_close{float:left}.fb_dialog.fb_dialog_mobile .fb_dialog_close_icon{visibility:hidden}#fb_dialog_loader_spinner{animation:rotateSpinner 1.2s linear infinite;background-color:transparent;background-image:url(https:\/\/connect.facebook.net\/rsrc.php\/v3\/yD\/r\/t-wz8gw1xG1.png);background-position:50\u0025 50\u0025;background-repeat:no-repeat;height:24px;width:24px}\u0040keyframes rotateSpinner{0\u0025{transform:rotate(0deg)}100\u0025{transform:rotate(360deg)}}\n.fb_iframe_widget{display:inline-block;position:relative}.fb_iframe_widget span{display:inline-block;position:relative;text-align:justify}.fb_iframe_widget iframe{position:absolute}.fb_iframe_widget_fluid_desktop,.fb_iframe_widget_fluid_desktop span,.fb_iframe_widget_fluid_desktop iframe{max-width:100\u0025}.fb_iframe_widget_fluid_desktop iframe{min-width:220px;position:relative}.fb_iframe_widget_lift{z-index:1}.fb_iframe_widget_fluid{display:inline}.fb_iframe_widget_fluid span{width:100\u0025}\n.fb_mpn_mobile_landing_page_slide_out{animation-duration:200ms;animation-name:fb_mpn_landing_page_slide_out;transition-timing-function:ease-in}.fb_mpn_mobile_landing_page_slide_out_from_left{animation-duration:200ms;animation-name:fb_mpn_landing_page_slide_out_from_left;transition-timing-function:ease-in}.fb_mpn_mobile_landing_page_slide_up{animation-duration:500ms;animation-name:fb_mpn_landing_page_slide_up;transition-timing-function:ease-in}.fb_mpn_mobile_bounce_in{animation-duration:300ms;animation-name:fb_mpn_bounce_in;transition-timing-function:ease-in}.fb_mpn_mobile_bounce_out{animation-duration:300ms;animation-name:fb_mpn_bounce_out;transition-timing-function:ease-in}.fb_mpn_mobile_bounce_out_v2{animation-duration:300ms;animation-name:fb_mpn_fade_out;transition-timing-function:ease-in}.fb_customer_chat_bounce_in_v2{animation-duration:300ms;animation-name:fb_bounce_in_v2;transition-timing-function:ease-in}.fb_customer_chat_bounce_in_from_left{animation-duration:300ms;animation-name:fb_bounce_in_from_left;transition-timing-function:ease-in}.fb_customer_chat_bounce_out_v2{animation-duration:300ms;animation-name:fb_bounce_out_v2;transition-timing-function:ease-in}.fb_customer_chat_bounce_out_from_left{animation-duration:300ms;animation-name:fb_bounce_out_from_left;transition-timing-function:ease-in}.fb_invisible_flow{display:inherit;height:0;overflow-x:hidden;width:0}\u0040keyframes fb_mpn_landing_page_slide_out{0\u0025{margin:0 12px;width:100\u0025 - 24px}60\u0025{border-radius:18px}100\u0025{border-radius:50\u0025;margin:0 24px;width:60px}}\u0040keyframes fb_mpn_landing_page_slide_out_from_left{0\u0025{left:12px;width:100\u0025 - 24px}60\u0025{border-radius:18px}100\u0025{border-radius:50\u0025;left:12px;width:60px}}\u0040keyframes fb_mpn_landing_page_slide_up{0\u0025{bottom:0;opacity:0}100\u0025{bottom:24px;opacity:1}}\u0040keyframes fb_mpn_bounce_in{0\u0025{opacity:.5;top:100\u0025}100\u0025{opacity:1;top:0}}\u0040keyframes fb_mpn_fade_out{0\u0025{bottom:30px;opacity:1}100\u0025{bottom:0;opacity:0}}\u0040keyframes fb_mpn_bounce_out{0\u0025{opacity:1;top:0}100\u0025{opacity:.5;top:100\u0025}}\u0040keyframes fb_bounce_in_v2{0\u0025{opacity:0;transform:scale(0, 0);transform-origin:bottom right}50\u0025{transform:scale(1.03, 1.03);transform-origin:bottom right}100\u0025{opacity:1;transform:scale(1, 1);transform-origin:bottom right}}\u0040keyframes fb_bounce_in_from_left{0\u0025{opacity:0;transform:scale(0, 0);transform-origin:bottom left}50\u0025{transform:scale(1.03, 1.03);transform-origin:bottom left}100\u0025{opacity:1;transform:scale(1, 1);transform-origin:bottom left}}\u0040keyframes fb_bounce_out_v2{0\u0025{opacity:1;transform:scale(1, 1);transform-origin:bottom right}100\u0025{opacity:0;transform:scale(0, 0);transform-origin:bottom right}}\u0040keyframes fb_bounce_out_from_left{0\u0025{opacity:1;transform:scale(1, 1);transform-origin:bottom left}100\u0025{opacity:0;transform:scale(0, 0);transform-origin:bottom left}}\u0040keyframes slideInFromBottom{0\u0025{opacity:.1;transform:translateY(100\u0025)}100\u0025{opacity:1;transform:translateY(0)}}\u0040keyframes slideInFromBottomDelay{0\u0025{opacity:0;transform:translateY(100\u0025)}97\u0025{opacity:0;transform:translateY(100\u0025)}100\u0025{opacity:1;transform:translateY(0)}}","components":["css:fb.css.base","css:fb.css.dialog","css:fb.css.iframewidget","css:fb.css.customer_chat_plugin_iframe"]});__d("JSSDKRuntimeConfig",[],{"locale":"es_ES","revision":"1006796584","rtl":false,"sdkab":null,"sdkns":"","sdkurl":"https:\/\/connect.facebook.net\/es_ES\/sdk.js","scribeurl":"https:\/\/www.facebook.com\/platform\/scribe_endpoint.php\/"});__d("JSSDKXDConfig",[],{"XXdUrl":"\/x\/connect\/xd_arbiter\/?version=46","useCdn":true});__d("UrlMapConfig",[],{"www":"www.facebook.com","m":"m.facebook.com","business":"business.facebook.com","api":"api.facebook.com","api_read":"api-read.facebook.com","graph":"graph.facebook.com","an":"an.facebook.com","fbcdn":"static.xx.fbcdn.net","cdn":"staticxx.facebook.com","graph_facebook":"graph.facebook.com","graph_gaming":"graph.fb.gg","graph_instagram":"graph.instagram.com","www_instagram":"www.instagram.com","social_plugin":"socialplugin.facebook.net"});__d("JSSDKShadowCssConfig",[],{"css:fb.shadow.css.fb_login_button":".fb_login_button_container{align-content:center;align-items:center;border:0;color:#fff;display:flex;font-family:'Roboto', 'Freight Sans LF Pro', Helvetica, Arial, 'Lucida Grande', sans-serif;font-weight:bold;margin:auto}.fb-button-main-element{display:flex;flex-wrap:nowrap;overflow:hidden}.fb-iframe-overlay{display:flex}.fb-button-main-element:hover{cursor:pointer}.fb-button-main-element:focus{filter:brightness(80\u0025)}.fb_button_label_element{align-items:center;display:flex;font-weight:bold;justify-content:center}.fb_button_label{margin:auto;pointer-events:none}.fb_button_svg_logo{height:1.33em;margin-left:.4em;margin-right:.4em;padding:.065em}.login_fb_logo .f_logo_f{fill:transparent}.single_button_svg_logo{margin-bottom:.08em}"}); __d("DOMWrapper",[],(function(a,b,c,d,e,f){"use strict";var g,h;function a(a){g=a}function b(){return g||document.body}function c(a){h=a}function d(){return h||self}f.setRoot=a;f.getRoot=b;f.setWindow=c;f.getWindow=d}),66); +__d("dotAccess",[],(function(a,b,c,d,e,f){function a(a,b,c){b=b.split(".");do{var d=b.shift();a=a[d]||c&&(a[d]={})}while(b.length&&a);return a}f["default"]=a}),66); +__d("guid",[],(function(a,b,c,d,e,f){function a(){return"f"+(Math.random()*(1<<30)).toString(16).replace(".","")}f["default"]=a}),66); +__d("wrapFunction",[],(function(a,b,c,d,e,f){var g={};function a(a,b,c){var d=b in g?g[b](a,c):a;return function(){for(var a=arguments.length,b=new Array(a),c=0;c3?d-3:0),f=3;f=b&&j[a in j?a:"log"](i)};function a(a){g=a}d=ES(c,"bind",!0,null,"debug",b.DEBUG);e=ES(c,"bind",!0,null,"info",b.INFO);var h=ES(c,"bind",!0,null,"warn",b.WARNING),i=ES(c,"bind",!0,null,"error",b.ERROR);f.Level=b;f.log=c;f.setLevel=a;f.debug=d;f.info=e;f.warn=h;f.error=i}),66); +__d("sdk.UA",[],(function(a,b,c,d,e,f){a=navigator.userAgent;var g={iphone:/\b(iPhone|iP[ao]d)/.test(a),ipad:/\b(iP[ao]d)/.test(a),android:/Android/i.test(a),nativeApp:/FBAN\/\w+;/i.test(a)&&!/FBAN\/mLite;/.test(a),nativeAndroidApp:/FB_IAB\/\w+;/i.test(a),nativeInstagramApp:/Instagram/i.test(a),nativeMessengeriOSApp:/MessengerForiOS/i.test(a),nativeMessengerAndroidApp:/Orca\-Android/i.test(a),ucBrowser:/UCBrowser/i.test(a)},h=/Mobile/i.test(a),i={ie:NaN,firefox:NaN,chrome:NaN,webkit:NaN,osx:NaN,edge:NaN,operaMini:NaN,ucWeb:NaN};b=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(a);if(b){i.ie=b[1]?parseFloat(b[1]):b[4]?parseFloat(b[4]):NaN;i.firefox=b[2]||"";i.webkit=b[3]||"";if(b[3]){c=/(?:Chrome\/(\d+\.\d+))/.exec(a);i.chrome=c?c[1]:"";d=/(?:Edge\/(\d+\.\d+))/.exec(a);i.edge=d?d[1]:""}}e=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(a);e&&(i.osx=e[1]);b=/(?:Opera Mini\/(\d+(?:\.\d+)?))/.exec(a);b&&(i.operaMini=b[1]);c=/(?:UCWEB\/(\d+(?:\.\d+))?)/.exec(a);c&&(i.ucWeb=c[1]||"2.0");function j(a){return String(a).split(".").map(function(a){return parseFloat(a)})}var k={};Object.keys(i).map(function(a){var b=function(){return parseFloat(i[a])};b.getVersionParts=function(){return j(i[a])};k[a]=b});Object.keys(g).map(function(a){k[a]=function(){return g[a]}});k.mobile=function(){return g.iphone||g.ipad||g.android||h};k.mTouch=function(){return g.android||g.iphone||g.ipad};k.facebookInAppBrowser=function(){return g.nativeApp||g.nativeAndroidApp};k.inAppBrowser=function(){return g.nativeApp||g.nativeAndroidApp||g.nativeInstagramApp};k.mBasic=function(){return!!(i.ucWeb||i.operaMini)};k.instagram=function(){return g.nativeInstagramApp};k.messenger=function(){return g.nativeMessengeriOSApp||g.nativeMessengerAndroidApp};k.isSupportedIABVersion=function(a){if(!k.facebookInAppBrowser())return!1;var b=/(?:FBAV\/(\d+(\.\d+)+))/.exec(navigator.userAgent);if(b){b=parseFloat(b[1]);if(b>=a)return!0}return!1};d=k;f["default"]=d}),66); +__d("sdk.domReady",[],(function(a,b,c,d,e,f){var g;c="readyState"in document?/loaded|complete/.test(document.readyState):!!document.body;function a(){if(!g)return;var a;while(a=g.shift())a();g=null}function b(a){if(g){g.push(a);return}else a()}c||(g=[],document.addEventListener?(document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1)):document.attachEvent&&(document.attachEvent("onreadystatechange",a),window.attachEvent("onload",a)));f["default"]=b}),67); +__d("sdk.Content",["Log","sdk.UA","sdk.domReady"],(function(a,b,c,d,e,f,g){"use strict";var h,i;function j(a,b){b||(!h?(h=b=document.getElementById("fb-root"),b||(d("Log").warn('The "fb-root" div has not been created, auto-creating'),h=b=document.createElement("div"),b.id="fb-root",c("sdk.UA").ie()||!document.body?c("sdk.domReady")(function(){b&&document.body&&document.body.appendChild(b)}):document.body.appendChild(b)),b.className+=" fb_reset"):b=h);b.appendChild(a);return a}function k(a){if(!i){i=document.createElement("div");var b=i.style;b.position="absolute";b.top="-10000px";b.width="0";b.height="0";i=j(i)}return j(a,i)}function a(a,b){var c=document.createElement("form");c.action=a.url;c.target=a.target;c.method=b?"GET":"POST";k(c);for(b in a.params)if(Object.prototype.hasOwnProperty.call(a.params,b)){var d=a.params[b];if(d!=null){var e=document.createElement("input");e.name=b;e.value=d;c.appendChild(e)}}c.submit();c.parentNode&&c.parentNode.removeChild(c)}g.append=j;g.appendHidden=k;g.submitToTarget=a}),98); +__d("sdk.DOM",["guid","sdk.domReady"],(function(a,b,c,d,e,f,g){var h={},i={};function j(a,b){a=a.getAttribute(b)||a.getAttribute(b.replace(/_/g,"-"))||a.getAttribute(b.replace(/-/g,"_"))||a.getAttribute(b.replace(/-/g,""))||a.getAttribute(b.replace(/_/g,""))||a.getAttribute("data-"+b)||a.getAttribute("data-"+b.replace(/_/g,"-"))||a.getAttribute("data-"+b.replace(/-/g,"_"))||a.getAttribute("data-"+b.replace(/-/g,""))||a.getAttribute("data-"+b.replace(/_/g,""));return a!=null?String(a):null}function a(a,b){a=j(a,b);return a!=null?/^(true|1|yes|on)$/.test(a):null}function b(a,b){try{a.innerHTML=b}catch(a){throw new Error("Could not set innerHTML : "+a.message)}}function k(a,b){a=" "+a.className+" ";return a.indexOf(" "+b+" ")>=0}function d(a,b){if(a==null)return;k(a,b)||(a.className=a.className+" "+b)}function e(a,b){if(a==null)return;b=new RegExp("\\s*"+b,"g");a.className=a.className.replace(b,"").trim()}function f(a,b,c){c===void 0&&(c="*");b=b||document.body;if(b==null)return[];c=c||"*";return ES("Array","from",!1,b.querySelectorAll(c+"."+a))}function l(a,b){b=u(b);var c=document.defaultView.getComputedStyle(a).getPropertyValue(b);c=a.style.getPropertyValue(b);/background-position?/.test(b)&&/top|left/.test(c)&&(c="0%");return c}function m(a,b,c){a.style.setProperty(u(b),c)}function n(a,b,c,d,e){a=a.styleSheets;for(var f=0;f1?b-1:0),d=1;d1?c-1:0),e=1;e2?e-2:0),g=2;g0&&(d+=" Params: "+b.map(function(a){return"%s"}).join(", "));a=c("Env").show_invariant_decoder===!0?"visit "+i(a,b)+" to see the full message.":"";return{message:d,decoderLink:a}}function i(a,b){a="https://www.internalfb.com/intern/invariant/"+a+"/";b.length>0&&(a+="?"+b.map(function(a,b){return"args["+b+"]="+encodeURIComponent(String(a))}).join("&"));return a}g["default"]=a}),98); +__d("UrlMap",["invariant","UrlMapConfig","sdk.Runtime"],(function(a,b,c,d,e,f,g,h){function a(a){var b="https";if(a==="graph_domain"){var e=c("sdk.Runtime").getGraphDomain();e?a="graph_".concat(e):a="graph"}if(a in d("UrlMapConfig"))return b+"://"+d("UrlMapConfig")[a];a in d("UrlMapConfig")||h(0,2511,a);return""}g.resolve=a}),98); +__d("sdk.Scribe",["QueryString","UrlMap","sdk.Runtime"],(function(a,b,c,d,e,f,g){var h={};function a(a,b,e){e===void 0&&(e=!1);if(a==="jssdk_error"){var f=ES("JSON","stringify",!1,b);if(Object.prototype.hasOwnProperty.call(h,f))return;else h[f]=!0}if(b.extra!=null&&typeof b.extra==="object"){f=b.extra;f.revision=c("sdk.Runtime").getRevision()}f=new Image();var g=d("UrlMap").resolve("www")+"/platform/scribe_endpoint.php/";e||(f.crossOrigin="anonymous");f.src=c("QueryString").appendToUrl(g,{c:a,m:ES("JSON","stringify",!1,babelHelpers["extends"]({},b,{isSPIN:c("sdk.Runtime").getIsSPIN()}))})}g.log=a}),98); +__d("sdk.FeatureFunctor",[],(function(a,b,c,d,e,f){function g(a,b,c){if(a.features&&b in a.features){a=a.features[b];if(typeof a==="object"&&typeof a.rate==="number")if(a.rate&&Math.random()*100<=a.rate)return a.value||!0;else return a.value?null:!1;else return a}return c}function a(a){return function(){for(var b=arguments.length,c=new Array(b),d=0;d1?c-1:0),e=1;ep+m){var c=a-n;for(var d=o,e=Array.isArray(d),f=0,d=e?d:d[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]();;){var g;if(e){if(f>=d.length)break;g=d[f++]}else{f=d.next();if(f.done)break;g=f.value}g=g;var h=g[0];g=g[1];g.lastAccessed":"",v;function ba(a){var b=a.error!=null?u(a.error):h(a.message||"");b.fileName==null&&a.filename!=null&&(b.fileName=a.filename);b.line==null&&a.lineno!=null&&(b.line=a.lineno);b.column==null&&a.colno!=null&&(b.column=a.colno);b.guardList=[aa];b.loggingSource="ONERROR";(a=v)===null||a===void 0?void 0:a.reportError(b)}var w={setup:function(b){if(typeof a.addEventListener!=="function")return;if(v!=null)return;v=b;a.addEventListener("error",ba)}},x=[],y={pushGuard:function(a){x.unshift(a)},popGuard:function(){x.shift()},inGuard:function(){return x.length!==0},cloneGuardList:function(){return x.map(function(a){return a.name})},findDeferredSource:function(){for(var a=0;a=0)return"warn";return a.stack!=null&&a.stack.indexOf("chrome-extension://")>=0?"warn":"error"}var z=[],A=function(){function a(){this.metadata=[].concat(z)}var b=a.prototype;b.addEntries=function(){var a;(a=this.metadata).push.apply(a,arguments);return this};b.addEntry=function(a,b,c){this.metadata.push([a,b,c]);return this};b.isEmpty=function(){return this.metadata.length===0};b.clearEntries=function(){this.metadata=[]};b.format=function(){var a=[];this.metadata.forEach(function(b){if(b&&b.length){b=b.map(function(a){return a!=null?String(a).replace(/:/g,"_"):""}).join(":");a.push(b)}});return a};b.getAll=function(){return this.metadata};a.addGlobalMetadata=function(a,b,c){z.push([a,b,c])};a.getGlobalMetadata=function(){return z};a.unsetGlobalMetadata=function(a,b){z=z.filter(function(c){return!(Array.isArray(c)&&c[0]===a&&c[1]===b)})};return a}(),B={debug:1,info:2,warn:3,error:4,fatal:5};function c(a,b){if(Object.isFrozen(a))return;b.type&&((!a.type||B[a.type]>B[b.type])&&(a.type=b.type));var c=b.metadata;if(c!=null){var d;d=(d=a.metadata)!==null&&d!==void 0?d:new A();c!=null&&d.addEntries.apply(d,c.getAll());a.metadata=d}b.project!=null&&(a.project=b.project);b.errorName!=null&&(a.errorName=b.errorName);b.componentStack!=null&&(a.componentStack=b.componentStack);b.deferredSource!=null&&(a.deferredSource=b.deferredSource);b.blameModule!=null&&(a.blameModule=b.blameModule);b.loggingSource!=null&&(a.loggingSource=b.loggingSource);d=(c=a.messageFormat)!==null&&c!==void 0?c:a.message;c=(c=a.messageParams)!==null&&c!==void 0?c:[];if(d!==b.messageFormat&&b.messageFormat!=null){var e;d+=" [Caught in: "+b.messageFormat+"]";c.push.apply(c,(e=b.messageParams)!==null&&e!==void 0?e:[])}a.messageFormat=d;a.messageParams=c;e=b.forcedKey;d=a.forcedKey;c=e!=null&&d!=null?e+"_"+d:e!==null&&e!==void 0?e:d;a.forcedKey=c}function d(a){var b;return da((b=a.messageFormat)!==null&&b!==void 0?b:a.message,a.messageParams||[])}function da(a,b){var c=0;a=a.replace(/%s/g,function(){return cea&&D.shift()}function F(a){var b=a.getAllResponseHeaders();if(b!=null&&b.indexOf("X-FB-Debug")>=0){b=a.getResponseHeader("X-FB-Debug");b&&E(b)}}function fa(){return D}var G={add:E,addFromXHR:F,getAll:fa},ga="abcdefghijklmnopqrstuvwxyz012345";function H(){var a=0;for(var b=arguments.length,c=new Array(b),d=0;d>=5;return i}var I=[/\(([^\s\)\()]+):(\d+):(\d+)\)$/,/@([^\s\)\()]+):(\d+):(\d+)$/,/^([^\s\)\()]+):(\d+):(\d+)$/,/^at ([^\s\)\()]+):(\d+):(\d+)$/],ha=/^\w+:\s.*?\n/g;Error.stackTraceLimit!=null&&Error.stackTraceLimit<80&&(Error.stackTraceLimit=80);function ia(a){var b=a.name,c=a.message;a=a.stack;if(a==null)return null;if(b!=null&&c!=null&&c!==""){var d=b+": "+c+"\n";if(ES(a,"startsWith",!0,d))return a.substr(d.length);if(a===b+": "+c)return null}if(b!=null){d=b+"\n";if(ES(a,"startsWith",!0,d))return a.substr(d.length)}if(c!=null&&c!==""){b=": "+c+"\n";d=a.indexOf(b);c=a.substring(0,d);if(/^\w+$/.test(c))return a.substring(d+b.length)}return a.replace(ha,"")}function J(a){a=a.trim();var b;a;var c,d,e;if(ES(a,"includes",!0,"charset=utf-8;base64,"))b="";else{var f;for(var g=0;g");c!=null&&d!=null&&a!=null&&(b+=" ("+c+":"+d+":"+a+")");return b}function L(c){var d,e,f,h,i,j,k=ka(c);d=(d=c.taalOpcodes)!==null&&d!==void 0?d:[];var l=c.framesToPop;if(l!=null){l=Math.min(l,k.length);while(l-->0)d.unshift(g.PREVIOUS_FRAME)}l=(l=c.messageFormat)!==null&&l!==void 0?l:c.message;e=((e=c.messageParams)!==null&&e!==void 0?e:[]).map(function(a){return String(a)});var m=la(c.componentStack),n=m==null?null:m.map(J),o=c.metadata?c.metadata.format():new A().format();o.length===0&&(o=void 0);var p=k.map(function(a){return a.text}).join("\n");f=(f=c.errorName)!==null&&f!==void 0?f:c.name;var q=ca(c),r=c.loggingSource,s=c.project;h=(h=c.lineNumber)!==null&&h!==void 0?h:c.line;i=(i=c.columnNumber)!==null&&i!==void 0?i:c.column;j=(j=c.fileName)!==null&&j!==void 0?j:c.sourceURL;var t=k.length>0;t&&h==null&&(h=k[0].line);t&&i==null&&(i=k[0].column);t&&j==null&&(j=k[0].script);n={blameModule:c.blameModule,column:i==null?null:String(i),clientTime:Math.floor(Date.now()/1e3),componentStackFrames:n,deferredSource:c.deferredSource!=null?L(c.deferredSource):null,extra:(t=c.extra)!==null&&t!==void 0?t:{},fbtrace_id:c.fbtrace_id,guardList:(i=c.guardList)!==null&&i!==void 0?i:[],hash:H(f,p,q,s,r),isNormalizedError:!0,line:h==null?null:String(h),loggingSource:r,message:C.toReadableMessage(c),messageFormat:l,messageParams:e,metadata:o,name:f,page_time:Math.floor(b("performanceNowSinceAppStart")()),project:s,reactComponentStack:m,script:j,serverHash:c.serverHash,stack:p,stackFrames:k,type:q,xFBDebug:G.getAll()};c.forcedKey!=null&&(n.forcedKey=c.forcedKey);d.length>0&&(n.taalOpcodes=d);t=a.location;t&&(n.windowLocationURL=t.href);for(i in n)n[i]==null&&delete n[i];return n}function ma(a){return a!=null&&typeof a==="object"&&a.isNormalizedError===!0?a:null}var M={formatStackFrame:K,normalizeError:L,ifNormalizedError:ma},na="",N=[],O=[],P=50,Q=!1,R={history:O,addListener:function(a,b){b===void 0&&(b=!1),N.push(a),b||O.forEach(function(b){return a(b,(b=b.loggingSource)!==null&&b!==void 0?b:"DEPRECATED")})},unshiftListener:function(a){N.unshift(a)},removeListener:function(a){b("removeFromArray")(N,a)},reportError:function(a){a=M.normalizeError(a);R.reportNormalizedError(a)},reportNormalizedError:function(b){if(Q)return!1;var a=y.cloneGuardList();b.componentStackFrames&&a.unshift(na);a.length>0&&(b.guardList=a);if(b.deferredSource==null){a=y.findDeferredSource();a!=null&&(b.deferredSource=M.normalizeError(a))}O.length>P&&O.splice(P/2,1);O.push(b);Q=!0;for(a=0;aU?a.substring(0,U-3)+"...":a}function ra(a,b){var c;c={appId:Y(b.appId),cavalry_lid:b.cavalry_lid,access_token:k.access_token,ancestor_hash:a.hash,bundle_variant:(c=b.bundle_variant)!==null&&c!==void 0?c:null,clientTime:X(a.clientTime),column:a.column,componentStackFrames:Z(a.componentStackFrames),events:a.events,extra:pa(a.extra,b.extra),forcedKey:a.forcedKey,frontend_env:(c=b.frontend_env)!==null&&c!==void 0?c:null,guardList:a.guardList,line:a.line,loggingFramework:b.loggingFramework,messageFormat:qa(a.messageFormat),messageParams:a.messageParams.map(qa),name:a.name,sample_weight:Y(b.sample_weight),script:a.script,site_category:b.site_category,stackFrames:Z(a.stackFrames),type:a.type,page_time:Y(a.page_time),project:a.project,push_phase:b.push_phase,report_source:b.report_source,report_source_ref:b.report_source_ref,rollout_hash:(c=b.rollout_hash)!==null&&c!==void 0?c:null,script_path:b.script_path,server_revision:Y(b.server_revision),spin:Y(b.spin),svn_rev:String(b.client_revision),additional_client_revisions:ES("Array","from",!1,(c=b.additional_client_revisions)!==null&&c!==void 0?c:[]).map(X),taalOpcodes:a.taalOpcodes==null?null:a.taalOpcodes.map(function(a){return a}),web_session_id:b.web_session_id,version:"3",xFBDebug:a.xFBDebug};b=a.blameModule;var d=a.deferredSource;b!=null&&(c.blameModule=String(b));d&&d.stackFrames&&(c.deferredSource={stackFrames:Z(d.stackFrames)});a.metadata&&(c.metadata=a.metadata);a.loadingUrls&&(c.loadingUrls=a.loadingUrls);a.serverHash!=null&&(c.serverHash=a.serverHash);a.windowLocationURL!=null&&(c.windowLocationURL=a.windowLocationURL);a.loggingSource!=null&&(c.loggingSource=a.loggingSource);return c}function sa(a,b,c){var d;W++;if(b.sample_weight===0)return!1;var e=s.shouldLog(a);if(e==null)return!1;if((d=b.projectBlocklist)!==null&&d!==void 0&&ES(d,"includes",!0,a.project))return!1;d=ra(a,b);ES("Object","assign",!1,d,{ancestors:V.slice(),clientWeight:X(e),page_position:X(W)});V.length<15&&V.push(a.hash);c(d);return!0}var ta={createErrorPayload:ra,postError:sa},$=null,ua=!1;function va(a){if(!$)return;var b=a.reason,c;if(b!=null&&typeof b==="object"&&(b.name==null||b.name===""||b.message==null||b.message===""))try{c=h("UnhandledRejection: %s",ES("JSON","stringify",!1,b)),c.loggingSource="ONUNHANDLEDREJECTION"}catch(a){c=h("UnhandledRejection: (circular) %s",Object.keys(b).join(",")),c.loggingSource="ONUNHANDLEDREJECTION"}else c=u(b),c.loggingSource||(c.loggingSource="ONUNHANDLEDREJECTION");try{b=a.promise;c.stack=String(c.stack||"")+(b!=null&&typeof b.settledStack==="string"?"\n()\n"+b.settledStack:"")+(b!=null&&typeof b.createdStack==="string"?"\n()\n"+b.createdStack:"")}catch(a){}$.reportError(c);a.preventDefault()}function wa(b){$=b,typeof a.addEventListener==="function"&&!ua&&(ua=!0,a.addEventListener("unhandledrejection",va))}var xa={onunhandledrejection:va,setup:wa};c={preSetup:function(a){(a==null||a.ignoreOnError!==!0)&&w.setup(R),(a==null||a.ignoreOnUnahndledRejection!==!0)&&xa.setup(R)},setup:function(a,b){R.addListener(function(c){ta.postError(c,a,b)})}};var ya=function(){function a(a){this.project=a,this.events=[],this.metadata=new A(),this.taalOpcodes=[]}var b=a.prototype;b.$1=function(b,c){var d=String(c),e=this.events,f=this.project,h=this.metadata,i=this.blameModule,j=this.forcedKey,k=this.error,l;for(var m=arguments.length,n=new Array(m>2?m-2:0),o=2;o0&&new a("fblogger").blameToPreviousFrame().blameToPreviousFrame().warn("Blame helpers do not work with catching"),C.aggregateError(k,{messageFormat:d,messageParams:C.toStringParams(n),errorName:k.name,forcedKey:j,project:f,type:b,loggingSource:"FBLOGGER"}),l=M.normalizeError(k);else{k=new Error(d);if(k.stack===void 0)try{throw k}catch(a){}k.messageFormat=d;k.messageParams=C.toStringParams(n);k.blameModule=i;k.forcedKey=j;k.project=f;k.type=b;k.loggingSource="FBLOGGER";k.taalOpcodes=[g.PREVIOUS_FRAME,g.PREVIOUS_FRAME].concat(this.taalOpcodes);l=M.normalizeError(k);l.name="FBLogger"}if(!h.isEmpty())if(l.metadata==null)l.metadata=h.format();else{var q=l.metadata.concat(h.format()),r=new Set(q);l.metadata=ES("Array","from",!1,r.values())}if(e.length>0)if(l.events!=null){var s;(s=l.events).push.apply(s,e)}else l.events=e;R.reportNormalizedError(l);return k};b.fatal=function(a){for(var b=arguments.length,c=new Array(b>1?b-1:0),d=1;d1?b-1:0),d=1;d1?b-1:0),d=1;d1?b-1:0),d=1;d1?b-1:0),d=1;d=0;d--)c[a[d]]=b[d];else for(d=a.length-1;d>=0;d--)c[a[d]]=b;return c}f["default"]=g}),66); +__d("URISchemes",["createObjectFrom"],(function(a,b,c,d,e,f,g){var h=c("createObjectFrom")(["accountscenter","aidemos","aistudio","blob","cmms","fb","fba","fbatwork","fb-ama","fb-internal","fb-workchat","fb-workchat-secure","fb-messenger","fb-messenger-public","fb-messenger-group-thread","fb-page-messages","fb-pma","fbcf","fbconnect","fbinternal","fbmobilehome","fbrpc","file","flipper","ftp","gtalk","http","https","mailto","wss","ms-app","intent","itms","itms-apps","itms-services","lasso","market","svn+ssh","fbstaging","tel","sms","pebblejs","sftp","whatsapp","moments","flash","fblite","chrome-extension","webcal","instagram","iglite","fb124024574287414","fb124024574287414rc","fb124024574287414master","fb1576585912599779","fb929757330408142","designpack","fbpixelcloud","fbapi20130214","fb1196383223757595","oculus","oculus.store","oculus.feed","oculusstore","odh","com.oculus.rd","aria","skype","ms-windows-store","callto","messenger","workchat","fb236786383180508","fb1775440806014337","data","fb-mk","munki","origami-file","fb-nimble-vrsrecorder","fb-nimble-monohandtrackingvis","together","togetherbl","horizonlauncher","venues","whatsapp-consumer","whatsapp-smb","fb-ide-opener","fb-vscode","fb-vscode-insiders","editor","spark-studio","manifold","origami-internal","origami-public","stella","mwa","mattermost","logaggregator","workrooms"]);function a(a){return a==null||a===""?!0:Object.prototype.hasOwnProperty.call(h,a.toLowerCase())}g.isAllowed=a}),98); +__d("isSameOrigin",[],(function(a,b,c,d,e,f){"use strict";function a(a,b){return!a.getProtocol()||!a.getDomain()||!b.getProtocol()||!b.getDomain()?!1:a.getOrigin()===b.getOrigin()}f["default"]=a}),66); +__d("setHostSubdomain",[],(function(a,b,c,d,e,f){function a(a,b){a=a.split(".");a.length<3?a.unshift(b):a[0]=b;return a.join(".")}f["default"]=a}),66); +__d("URIAbstractBase",["invariant","FBLogger","PHPStrictQuerySerializer","URIRFC3986","URISchemes","isSameOrigin","setHostSubdomain"],(function(a,b,c,d,e,f,g){var h,i,j=new RegExp("[\\x00-\\x2c\\x2f\\x3b-\\x40\\x5c\\x5e\\x60\\x7b-\\x7f\\uFDD0-\\uFDEF\\uFFF0-\\uFFFF\\u2047\\u2048\\uFE56\\uFE5F\\uFF03\\uFF0F\\uFF1F]"),k=new RegExp("^(?:[^/]*:|[\\x00-\\x1f]*/[\\x00-\\x1f]*/)"),l=[];a=function(){"use strict";a.parse=function(c,d,e,f){if(!d)return!0;if(d instanceof a){c.setProtocol(d.getProtocol());c.setDomain(d.getDomain());c.setPort(d.getPort());c.setPath(d.getPath());c.setQueryData(f.deserialize(f.serialize(d.getQueryData())));c.setFragment(d.getFragment());c.setIsGeneric(d.getIsGeneric());c.setForceFragmentSeparator(d.getForceFragmentSeparator());c.setOriginalRawQuery(d.getOriginalRawQuery());c.setQueryParamModified(!1);return!0}d=d.toString().trim();var g=(h||(h=b("URIRFC3986"))).parse(d)||{fragment:null,scheme:null,query:null};if(!e&&!(i||(i=b("URISchemes"))).isAllowed(g.scheme))return!1;c.setProtocol(g.scheme||"");if(!e&&j.test(g.host||""))return!1;c.setDomain(g.host||"");c.setPort(g.port||"");c.setPath(g.path||"");if(e)c.setQueryData(f.deserialize(g.query||"")||{});else try{c.setQueryData(f.deserialize(g.query||"")||{})}catch(a){return!1}c.setFragment(g.fragment||"");g.fragment===""&&c.setForceFragmentSeparator(!0);c.setIsGeneric(g.isGenericURI||!1);c.setOriginalRawQuery(g.query);c.setQueryParamModified(!1);if(g.userinfo!==null){if(e)throw new Error("URI.parse: invalid URI (userinfo is not allowed in a URI): "+d);return!1}if(!c.getDomain()&&c.getPath().indexOf("\\")!==-1){if(e)throw new Error("URI.parse: invalid URI (no domain but multiple back-slashes): "+d);return!1}if(!c.getProtocol()&&k.test(d)){if(e)throw new Error("URI.parse: invalid URI (unsafe protocol-relative URLs): "+d+"'");return!1}if(c.getDomain()&&c.getPath()&&!ES(c.getPath(),"startsWith",!0,"/")){if(e)throw new Error("URI.parse: invalid URI (domain and path where path lacks leading slash): "+d);return!1}c.getProtocol()&&!c.getIsGeneric()&&!c.getDomain()&&c.getPath()!==""&&b("FBLogger")("uri").warn('URI.parse: invalid URI (protocol "'+c.getProtocol()+'" with no domain)');return!0};a.tryParse=function(b,c){var d=new a(null,c);return a.parse(d,b,!1,c)?d:null};a.isValid=function(b,c){return!!a.tryParse(b,c)};function a(b,c){c||g(0,2966),this.$9=c,this.$7="",this.$1="",this.$6="",this.$5="",this.$3="",this.$4=!1,this.$8={},this.$2=!1,a.parse(this,b,!0,c),this.$11=!1}var c=a.prototype;c.setProtocol=function(a){(i||(i=b("URISchemes"))).isAllowed(a)||g(0,11793,a);this.$7=a;return this};c.getProtocol=function(){return(this.$7||"").toLowerCase()};c.setSecure=function(a){return this.setProtocol(a?"https":"http")};c.isSecure=function(){return this.getProtocol()==="https"};c.setDomain=function(a){if(j.test(a))throw new Error("URI.setDomain: unsafe domain specified: "+a+" for url "+this.toString());this.$1=a;return this};c.getDomain=function(){return this.$1};c.setPort=function(a){this.$6=a;return this};c.getPort=function(){return this.$6};c.setPath=function(a){this.$5=a;return this};c.getPath=function(){return this.$5};c.addQueryData=function(a,b){Object.prototype.toString.call(a)==="[object Object]"?ES("Object","assign",!1,this.$8,a):this.$8[a]=b;this.$11=!0;return this};c.setQueryData=function(a){this.$8=a;this.$11=!0;return this};c.getQueryData=function(){return this.$8};c.setQueryString=function(a){return this.setQueryData(this.$9.deserialize(a))};c.getQueryString=function(a,b,c){a===void 0&&(a=!1);b===void 0&&(b=function(){return!1});c===void 0&&(c=null);return this.$12(!1,a,b,c)};c.$12=function(a,b,c,d){a===void 0&&(a=!1);b===void 0&&(b=!1);c===void 0&&(c=function(){return!1});d===void 0&&(d=null);if(!this.$11&&(b||c(this.getDomain()))){return(b=this.$10)!=null?b:""}return(a&&d?d:this.$9).serialize(this.getQueryData())};c.removeQueryData=function(a){Array.isArray(a)||(a=[a]);for(var b=0,c=a.length;b0||this.getFragment())};c.toString=function(a,b){a===void 0&&(a=function(){return!1});b===void 0&&(b=null);return this.$13(!1,!1,a,b)};c.toStringRawQuery=function(a,b){a===void 0&&(a=function(){return!1});b===void 0&&(b=null);return this.$13(!0,!1,a,b)};c.toStringPreserveQuery=function(a,b){a===void 0&&(a=function(){return!1});b===void 0&&(b=null);return this.$13(!1,!0,a,b)};c.toStringStrictQueryEncoding=function(a){a===void 0&&(a=function(){return!1});return this.$13(!0,!1,a,b("PHPStrictQuerySerializer"))};c.$13=function(a,b,c,d){a===void 0&&(a=!1);b===void 0&&(b=!1);c===void 0&&(c=function(){return!1});d===void 0&&(d=null);var e=this;for(var f=0;f0||h(0,4698);this.$1.length===this.$2.length||h(0,4699);var a=this.$1,b=this.$2;this.$1=[];this.$2=[];this.$4=null;if(a.length===1){var d=a[0],e=b[0],f=d.body?c("QueryString").decode(d.body):null;this.executeRequest(d.relative_url,d.method,f,e);return}this.executeRequest("/","POST",{batch:a,include_headers:!1,batch_app_id:this.$3||j},function(a){Array.isArray(a)?a.forEach(function(a,d){b[d](c("sdk.safelyParseResponse")(a&&a.body))}):b.forEach(function(a){return a({error:{message:"Fatal: batch call failed."}})})})};return a}();g["default"]=a}),98); +__d("RequestConstants",["errorCode"],(function(a,b,c,d,e,f,g,h){a={code:1,error_subcode:1357045,message:"unknown error (empty response)",type:"http",status:0};g.PARSE_ERROR_TEMPLATE=a}),98); +__d("sdk.Cookie",["QueryString","sdk.Runtime","sdk.Scribe","sdk.feature"],(function(a,b,c,d,e,f,g){var h=null,i=["fblo_","fbsr_","fbm_"];function j(a,b,e,f){if(!ES(i,"includes",!0,a)){d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"unknown_cookie_prefix."+a});if(c("sdk.feature")("limit_unknown_cookie_setting",!1))return}a=a+c("sdk.Runtime").getClientID();f=f?"; SameSite=None;Secure":"";var g=h!==null&&h!==".";g&&(document.cookie=a+"=; expires=Wed, 04 Feb 2004 08:00:00 GMT"+f,document.cookie=a+"=; expires=Wed, 04 Feb 2004 08:00:00 GMT;domain="+location.hostname+f);var j=new Date(e).toUTCString();document.cookie=a+"="+b+(b&&e===0?"":"; expires="+j)+"; path=/"+(g?"; domain="+((a=h)!=null?a:""):"")+f}function k(a){a=a+c("sdk.Runtime").getClientID();a=new RegExp("\\b"+a+"=([^;]*)\\b");a=document.cookie.match(a);if(a==null)return null;else return a[1]}function a(a){h=a;a=c("QueryString").encode({base_domain:h!==null&&h!=="."?h:""});var b=new Date();b.setFullYear(b.getFullYear()+1);j("fbm_",a,b.getTime(),!0)}function b(){return h}function l(){var a=k("fbm_");if(a!=null&&h===null){a=c("QueryString").decode(a);h=a.base_domain;return{base_domain:h}}return null}function e(){return k("fbsr_")}function f(a,b){if(a==="")throw new Error("Value passed to Cookie.setSignedRequestCookie was empty.");j("fbsr_",a,b,!0)}function m(){l(),j("fbsr_","",0,!0)}g.setRaw=j;g.getRaw=k;g.setDomain=a;g.getDomain=b;g.loadMeta=l;g.loadSignedRequest=e;g.setSignedRequestCookie=f;g.clearSignedRequestCookie=m}),98); +__d("CORSRequest",["Log","QueryString","RequestConstants","sdk.Cookie","sdk.safelyParseResponse","wrapFunction"],(function(a,b,c,d,e,f,g){function h(a,b,d){d===void 0&&(d={withCredentials:!1});if(!self.XMLHttpRequest)return null;var e=new XMLHttpRequest(),f=function(){};((d=d)==null?void 0:d.withCredentials)&&(e.withCredentials=!0);if("withCredentials"in e)e.open(a,b,!0),e.setRequestHeader("Content-type","application/x-www-form-urlencoded");else if(self.XDomainRequest){e=new XDomainRequest();try{e.open(a,b),e.onprogress=e.ontimeout=f}catch(a){return null}}else return null;var g={send:function(a){e.send(a)}},h=c("wrapFunction")(function(){h=f,"onload"in g&&g.onload(e)},"entry","XMLHttpRequest:load"),i=c("wrapFunction")(function(){i=f,"onerror"in g&&g.onerror(e)},"entry","XMLHttpRequest:error");e.onload=function(){h()};e.onerror=function(){i()};e.onreadystatechange=function(){e.readyState==4&&(e.status==200?h():i())};return g}var i="for (;;);",j=i.length;function k(a){a.substring(0,j)==i&&(a=a.substring(j));return a}function a(a,b,e,f,g){g===void 0&&(g={withCredentials:!1});if(ES(a,"includes",!0,"/../")||ES(a,"includes",!0,"/..\\")||ES(a,"includes",!0,"\\../")||ES(a,"includes",!0,"\\..\\")){d("Log").error("CORSRequest.execute(): path traversal is not allowed.");return!1}try{if(self.document){var i=d("sdk.Cookie").getRaw("cppo");i&&(a=c("QueryString").appendToUrl(a,c("QueryString").encode({__cppo:i})))}}catch(a){}e.suppress_http_code=1;i=c("QueryString").encode(e);b!="post"&&(a=c("QueryString").appendToUrl(a,i),i="");e=h(b,a,g);if(!e)return!1;e.onload=function(b){f(c("sdk.safelyParseResponse")(k(b.responseText),a,b.status))};e.onerror=function(b){b.responseText?f(c("sdk.safelyParseResponse")(k(b.responseText),a,b.status)):f({error:babelHelpers["extends"]({},d("RequestConstants").PARSE_ERROR_TEMPLATE,{status:b.status})})};e.send(i);return!0}b={execute:a};e=b;g["default"]=e}),98); +__d("ApiClient",["ApiBatcher","ApiClientUtils","Assert","CORSRequest","Log","ObservableMixin","QueryString","UrlMap","flattenObject"],(function(a,b,c,d,e,f,g){var h,i,j,k=[],l=!1,m=2e3,n={fql_query:!0,fql_multiquery:!0,friends_get:!0,notifications_get:!0,stream_get:!0,users_getinfo:!0},o=["cors"],p=0,q=[],r=0,s=0,t,u=d("Log");function v(a,b,d,e){var f=r!==0&&p>=r;if(f){q.push(function(){return v(a,b,d,e)});y.inform("request.queued",a,b,d);return}p++;var g=babelHelpers["extends"]({},j,d);g.pretty=g.pretty||0;g=c("flattenObject")(g);f={cors:c("CORSRequest")};var i={},m=g.access_token||h;m&&(i.access_token=m);b!=="get"&&k.forEach(function(a){i[a]=g[a]});m=Object.keys(i);m.length>0&&(a=c("QueryString").appendToUrl(a,i),delete g.access_token);m=o;for(var n=0;n0&&pm&&b==="get"}f=y;g["default"]=f}),98); +__d("FBEventsParamList",[],(function(a,b,c,d,e,f){"use strict";var g="deep",h="shallow";a=function(){function a(){this.list=[]}var b=a.prototype;b.append=function(a,b){this.$1(encodeURIComponent(a),b,g)};b.each=function(a){var b=this.list;for(var c=0,d=b.length;c(i+"?"+b).length?n(i,b):o(i,a)}function n(a,b){var c=new Image();c.src=a+"?"+b}function o(a,b){var c="fb"+Math.random().toString().replace(".",""),e=document.createElement("form");e.method="post";e.action=a;e.target=c;e.acceptCharset="utf-8";e.style.display="none";a=!!(window.attachEvent&&!window.addEventListener);a=a?'';a.root.innerHTML='';f=!0;window.setTimeout(function(){a.root.innerHTML=j,a.root.firstChild.src=a.url,typeof a.onInsert==="function"&&a.onInsert(a.root.firstChild)},0)}else{i=document.createElement("iframe");i.id=b;i.name=e;i.onload=h;i.scrolling="no";i.style.border="none";i.style.overflow="hidden";a.title!=null&&(i.title=a.title);a.className!=null&&(i.className=a.className);a.height!==void 0&&(i.style.height=a.height+"px");a.width!==void 0&&(a.width==="100%"?i.style.width=a.width:i.style.width=a.width+"px");a.root.appendChild(i);f=!0;i.src=a.url;a.onInsert&&a.onInsert(i)}}g["default"]=a}),98); +__d("sdk.Impressions",["Miny","QueryString","UrlMap","getBlankIframeSrc","guid","insertIframe","sdk.Content","sdk.Runtime"],(function(a,b,c,d,e,f,g){function h(a,b){b===void 0&&(b=!1);var e=c("sdk.Runtime").getClientID(),f=c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS);e&&(typeof a.api_key!=="string"||a.api_key==="")&&(a.api_key=e);a.kid_directed_site=c("sdk.Runtime").getKidDirectedSite();e=d("UrlMap").resolve("www")+"/platform/impression.php/"+c("guid")()+"/";f&&(e=d("UrlMap").resolve("www")+"/platform/canvas_impression.php/"+c("guid")()+"/");var g=c("QueryString").appendToUrl(e,a);if(g.length>2e3&&(a.payload&&typeof a.payload==="string")){var h=a.payload,k=c("Miny").encode(h);k&&k.length0,"You need to call FB.init() with App ID first.");return a}function E(a){c("Assert").isTrue(Object.keys(a).length<=q,"The total number of user properties cannot exceed "+q+".");for(var b in a)c("Assert").isTrue(m.test(b)||ES(s,"includes",!0,b),"Invalid user properties key name: "+b+". It must be between 1 and "+n+" characters, and must contain only alphanumerics, _, - or spaces, starting with alphanumeric or _. Or, it must be a pre-defined user property"),c("Assert").isTrue(a[b].toString().length<=r,"Invalid user properties value: "+a[b]+". It must be no longer than "+r+" characters.")}function F(a){c("Assert").isTrue(k.test(a),"Invalid event name: "+a+". It must be between 1 and "+l+" characters, and must be contain only alphanumerics, _, - or spaces, starting with alphanumeric or _.")}function G(a){c("Assert").isTrue(a.length<=p,"Invalid app version: "+a+". It must be no longer than "+p+" characters.")}function H(a){c("Assert").isTrue(a.length!==0,"User ID must be set before updateUserProperties can be called."),c("Assert").isTrue(a.length<=o,"Invalid user ID: "+a+". It must be no longer than "+o+" characters.")}a=Object.freeze({logEvent:u,logPurchase:a,activateApp:b,logPageView:e,setUserID:f,getUserID:v,clearUserID:w,updateUserProperties:A,setAppVersion:x,getAppVersion:y,clearAppVersion:z,EventNames:h,ParameterNames:j});g.assertGetValidAppID=D;g.assertValidUserProperties=E;g.assertValidEventName=F;g.assertValidAppVersion=G;g.assertValidUserID=H;g.AppEvents=a}),98); +__d("sdk.Event",[],(function(a,b,c,d,e,f){"use strict";var g="event.subscribe",h="event.unsubscribe",i;function j(){i||(i={});return i}function k(a,b){var c=j();!c[a]?c[a]=[b]:c[a].indexOf(b)==-1&&c[a].push(b);a!=g&&a!=h&&m(g,a,c[a])}function l(a,b){var c=j()[a];c&&c.forEach(function(a,d){a===b&&c.splice(d,1)});a!=g&&a!=h&&m(h,a,c)}function a(a,b){var c=arguments;if(!b()){var d=function d(){b.apply(b,c)&&l(a,d)};k(a,d)}}function b(a){delete j()[a]}function m(a){for(var b=arguments.length,c=new Array(b>1?b-1:0),d=1;dDate.now())return a}catch(a){return null}}return null}g.setLocalStorageToken=a;g.removeLocalStorageToken=b;g.setSessionStorage=e;g.getLocalStorageTokens=f;g.getCachedResponse=i}),98); +__d("Base64",[],(function(a,b,c,d,e,f){var g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function h(a){a=a.charCodeAt(0)<<16|a.charCodeAt(1)<<8|a.charCodeAt(2);return String.fromCharCode(g.charCodeAt(a>>>18),g.charCodeAt(a>>>12&63),g.charCodeAt(a>>>6&63),g.charCodeAt(a&63))}var i=">___?456789:;<=_______\0\x01\x02\x03\x04\x05\x06\x07\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19______\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123";function j(a){a=i.charCodeAt(a.charCodeAt(0)-43)<<18|i.charCodeAt(a.charCodeAt(1)-43)<<12|i.charCodeAt(a.charCodeAt(2)-43)<<6|i.charCodeAt(a.charCodeAt(3)-43);return String.fromCharCode(a>>>16,a>>>8&255,a&255)}var k={encode:function(a){a=unescape(encodeURI(a));var b=(a.length+2)%3;a=(a+"\0\0".slice(b)).replace(/[\s\S]{3}/g,h);return a.slice(0,a.length+b-2)+"==".slice(b)},decode:function(a){a=a.replace(/[^A-Za-z0-9+\/]/g,"");var b=a.length+3&3;a=(a+"AAA".slice(b)).replace(/..../g,j);a=a.slice(0,a.length+b-3);try{return decodeURIComponent(escape(a))}catch(a){throw new Error("Not valid UTF-8")}},encodeObject:function(a){return k.encode(ES("JSON","stringify",!1,a))},decodeObject:function(a){return ES("JSON","parse",!1,k.decode(a))},encodeNums:function(a){return String.fromCharCode.apply(String,a.map(function(a){return g.charCodeAt((a|-(a>63?1:0))&-(a>0?1:0)&63)}))}};a=k;f["default"]=a}),66); +__d("sdk.SignedRequest",["Base64"],(function(a,b,c,d,e,f,g){function a(a){if(a==null||a==="")return null;a=a.split(".",2)[1].replace(/\-/g,"+").replace(/\_/g,"/");return c("Base64").decodeObject(a)}g.parse=a}),98); +__d("sdk.getContextType",["sdk.Runtime","sdk.UA"],(function(a,b,c,d,e,f,g){function a(){if(c("sdk.UA").nativeApp())return 3;if(c("sdk.UA").mobile())return 2;return c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)?5:1}g["default"]=a}),98); +__d("sdk.statusCORS",["Log","UrlMap","sdk.AuthState","sdk.AuthStorageUtils","sdk.AuthUtils","sdk.Impressions","sdk.Runtime","sdk.Scribe","sdk.URI","sdk.feature","sdk.getContextType"],(function(a,b,c,d,e,f,g){"use strict";var h=6e4,i=114;function a(a,b,e,f){f===void 0&&(f="facebook");var g=m(b),l=Date.now();function p(){var b=new XMLHttpRequest();b&&(b.open("GET",g.toString(),!0),b.withCredentials=!0,b.onreadystatechange=function(){if(b.readyState===4){if(c("sdk.feature")("e2e_ping_tracking",!0)){var g={init:l,close:Date.now(),method:"cors"};d("Log").debug("e2e: %s",ES("JSON","stringify",!1,g));d("sdk.Impressions").log(i,{payload:g})}if(b.status===200){j(a,(g=b.getResponseHeader("fb-s"))!=null?g:"unknown",(g=b.getResponseHeader("fb-ar"))!=null?g:"{}",f)}else k(a,b.status,e,f)}},b.send())}function q(){n(f)||window.setTimeout(function(){o(f==="facebook"?"instagram":"facebook"),c("sdk.AuthState").setState({shouldSecondLoginRequestTimeOut:!0})},h)}function r(){window.fetch(g.toString(),{referrer:"/",mode:"cors",credentials:"include"}).then(function(b){if(c("sdk.AuthState").getState().shouldSecondLoginRequestTimeOut){c("sdk.AuthState").setState({shouldSecondLoginRequestTimeOut:!1});return}q();if(b.status===200){var d;j(a,(d=b.headers.get("fb-s"))!=null?d:"unknown",(d=b.headers.get("fb-ar"))!=null?d:"{}",f)}else k(a,b.status,e,f)})["catch"](function(b){if(c("sdk.AuthState").getState().shouldSecondLoginRequestTimeOut){c("sdk.AuthState").setState({shouldSecondLoginRequestTimeOut:!1});return}q();k(a,0,e,f)})}typeof window.fetch==="function"?r():p()}function j(a,b,e,f){f===void 0&&(f="facebook");switch(b){case"connected":e=ES("JSON","parse",!1,e);var g={accessToken:e.access_token,userID:e.user_id,expiresIn:Number(e.expires_in),signedRequest:e.signed_request,graphDomain:e.graph_domain};e.enforce_https!=null&&c("sdk.Runtime").setEnforceHttps(!0);e.data_access_expiration_time!=null&&(g.data_access_expiration_time=Number(e.data_access_expiration_time));e.base_domain!=null&&d("sdk.AuthUtils").setBaseDomain(e.base_domain);d("sdk.AuthUtils").setGraphDomain(e.graph_domain);d("sdk.AuthStorageUtils").setLocalStorageToken(g,e.long_lived_token);d("sdk.AuthUtils").removeLogoutState();e={authResponse:g,status:b,loginSource:f,cb:a};d("sdk.AuthUtils").AuthInternalEvent.inform(d("sdk.AuthUtils").AuthConstants.CORS_FETCH_COMPLETED_EVENT,e);break;case"not_authorized":case"unknown":default:g={authResponse:null,status:b,loginSource:f,cb:a};d("sdk.AuthUtils").AuthInternalEvent.inform(d("sdk.AuthUtils").AuthConstants.CORS_FETCH_COMPLETED_EVENT,g)}}function k(a,b,e,f){f===void 0&&(f="facebook");b===0?(c("sdk.feature")("cors_status_fetch_cancel_tracking",!1)&&d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"CORS_STATUS_FETCH_CANCELLED",extra:{message:"Status 0 returned."}}),d("Log").error("Error retrieving login status, fetch cancelled.")):(d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"CORS_STATUS_FETCH",extra:{message:"HTTP Status Code "+b}}),d("Log").error("Error retrieving login status, HTTP status code: "+b));b=l();if(b&&b===f){b={authResponse:e,status:c("sdk.Runtime").getLoginStatus(),loginSource:f,cb:a,shouldSetAuthResponse:!1};d("sdk.AuthUtils").AuthInternalEvent.inform(d("sdk.AuthUtils").AuthConstants.CORS_FETCH_COMPLETED_EVENT,b)}else{e={authResponse:null,status:"unknown",loginSource:f,cb:a,shouldSetAuthResponse:!1};d("sdk.AuthUtils").AuthInternalEvent.inform(d("sdk.AuthUtils").AuthConstants.CORS_FETCH_COMPLETED_EVENT,e)}}function l(){var a=c("sdk.AuthState").getState().currentAuthResponse;return a?d("sdk.AuthUtils").isInstagramLogin(a)?"instagram":"facebook":null}function m(a){a=new(c("sdk.URI"))(d("UrlMap").resolve("www").replace("web.","www.")+"/x/oauth/status").addQueryData("client_id",c("sdk.Runtime").getClientID()).addQueryData("input_token",a).addQueryData("redirect_uri",window.location.href).addQueryData("origin",c("sdk.getContextType")()).addQueryData("sdk","joey").addQueryData("wants_cookie_data",c("sdk.Runtime").getUseCookie());if(window.location.ancestorOrigins){var b=window.location.ancestorOrigins;if(b.length>0){var e="";for(var f=0;f-1;if(!e&&!b){e=d("sdk.AuthStorageUtils").getCachedResponse();if(e!=null){var f;c("sdk.AuthState").setState({loadState:"loaded"});c("sdk.Auth").setAuthResponse(e.authResponse,(f=e.status)!=null?f:"unknown","facebook",!0);d("sdk.AuthUtils").setRevalidateTimer(e.status==="connected"?d("sdk.AuthUtils").AuthConstants.CONNECTED_REVALIDATE_PERIOD:d("sdk.AuthUtils").AuthConstants.DEFAULT_REVALIDATE_PERIOD)}}if(!b)if(c("sdk.AuthState").getState().loadState==="loaded"){if(a){f={authResponse:c("sdk.Auth").getAuthResponse(),status:c("sdk.Runtime").getLoginStatus()};a(f)}return}else if(c("sdk.AuthState").getState().loadState==="loading"){a&&d("sdk.AuthUtils").AuthInternalEvent.subscribe("FB.loginStatus",a);return}a&&d("sdk.AuthUtils").AuthInternalEvent.subscribe("FB.loginStatus",a);c("sdk.AuthState").setState({loadState:"loading"});e=function(a){c("sdk.AuthState").setState({loadState:"loaded"}),d("sdk.AuthUtils").AuthInternalEvent.inform("FB.loginStatus",a),d("sdk.AuthUtils").AuthInternalEvent.clearSubscribers("FB.loginStatus")};i(e)}function m(a){var b="unknown";c("sdk.Auth").setAuthResponse(null,b,null);b={authResponse:null,status:b,loginSource:null};a&&a(b)}var n={getLoginStatus:l,fetchLoginStatus:i,onSDKInit:a};b=n;g["default"]=b}),98); +__d("sdk.LoggingUtils",["sdk.Impressions","sdk.feature"],(function(a,b,c,d,e,f,g){"use strict";var h={buttonLoad:"client_login_button_load",buttonClick:"client_login_click",loginSuccess:"client_login_success",loginCancel:"client_login_cancel",popupHide:"client_login_popup_hide_xfoa",popupShow:"client_login_popup_show_xfoa",loginEnd:"client_login_end",loginStart:"client_login_start",loginCompleteHeartbeat:"client_login_complete_heartbeat",loginStatusPopupShowXfoa:"client_login_status_popup_show_xfoa",loginStatusPopupHideXfoa:"client_login_status_popup_hide_xfoa",loginStatusPopupClickXfoa:"client_login_status_popup_click_xfoa",loginStatusPopupErrorXfoa:"client_login_status_popup_error_xfoa"};function i(a,b,e){d("sdk.Impressions").log(117,{payload:babelHelpers["extends"]({},e||{},{logger_id:a,action:b,client_funnel_version:c("sdk.feature")("oauth_funnel_logger_version",1)})})}function a(a,b){var c=a&&a.cbt!==void 0?Number(a.cbt):0;i(a==null?void 0:a.logger_id,b,{cbt_delta:Date.now()-c})}function b(a,b){b!==void 0&&i(a,b)}function e(a,b){a!==void 0&&i(b,h.loginStatusPopupErrorXfoa,{message:a})}g.logEventName=h;g.logEvent=i;g.logLoginEvent=a;g.logPopupEvent=b;g.logDisambiguationTrayEvent=e}),98); +__d("sdk.Auth",["Log","UrlMap","sdk.AuthState","sdk.AuthStorageUtils","sdk.AuthUtils","sdk.Cookie","sdk.Frictionless","sdk.LoggingUtils","sdk.Runtime","sdk.Scribe","sdk.SignedRequest","sdk.URI","sdk.ui"],(function(a,b,c,d,e,f,g){b("sdk.Frictionless");var h=5*1e3;function a(a,b){b&&b.perms&&!b.scope&&(b.scope=b.perms,delete b.perms,d("Log").warn("OAuth2 specification states that 'perms' should now be called 'scope'. Please update."));var e=c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)||c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.PAGETAB);c("sdk.ui")(babelHelpers["extends"]({method:"permissions.oauth",display:e?"async":"popup",domain:location.hostname},b||{}),a)}function i(a){switch(a){case"connected":return"connected";case"not_authorized":return"not_authorized";default:return"unknown"}}function e(a){(a==null?void 0:a.shouldSetAuthResponse)!==!1&&((a==null?void 0:a.status)==="connected"&&d("sdk.AuthUtils").setRevalidateTimer(),j(a==null?void 0:a.authResponse,i(a==null?void 0:a.status),a==null?void 0:a.loginSource));var b=a==null?void 0:a.cb;if(b!=null){a={authResponse:a==null?void 0:a.authResponse,status:i(a==null?void 0:a.status),loginSource:a==null?void 0:a.loginSource};b(a)}d("sdk.AuthUtils").AuthInternalEvent.clearSubscribers(d("sdk.AuthUtils").AuthConstants.CORS_FETCH_COMPLETED_EVENT);d("sdk.AuthUtils").AuthInternalEvent.clearSubscribers(d("sdk.AuthUtils").AuthConstants.XFOA_FINAL_RESPONSE_EVENT)}function j(a,b,e,f){e===void 0&&(e="facebook");f===void 0&&(f=!1);var g=c("sdk.Runtime").getUserID(),h=c("sdk.Runtime").getLoginStatus(),i="";if(a!=null){c("sdk.AuthState").setState({loadState:"loaded"});if(a.userID!=null&&a.userID!=="")i=a.userID;else if(a.signedRequest!=null&&a.signedRequest!==""){var j=d("sdk.SignedRequest").parse(a.signedRequest);j!=null&&j!==""&&j.user_id!=null&&j.user_id!==""&&(i=j.user_id)}if(c("sdk.Runtime").getUseCookie()){j=a.expiresIn===0?0:Date.now()+a.expiresIn*1e3;d("sdk.Cookie").setSignedRequestCookie(a.signedRequest,j)}}else{c("sdk.Runtime").getUseCookie()&&d("sdk.Cookie").clearSignedRequestCookie();if(c("sdk.Runtime").getUseLocalStorage()){d("sdk.AuthStorageUtils").removeLocalStorageToken((j=e)!=null?j:"facebook")}}j=h==="unknown"&&a!=null||c("sdk.Runtime").getUseCookie()&&c("sdk.Runtime").getCookieUserID()!==i;var k=g!=null&&g!==""&&a==null;g=a!=null&&g!=null&&g!==""&&g!=i;var l=a!=c("sdk.AuthState").getState().currentAuthResponse;h=b!=h;c("sdk.Runtime").setLoginStatus(b);c("sdk.Runtime").setAccessToken(a&&a.accessToken||null);c("sdk.Runtime").setUserID(i);c("sdk.Runtime").setGraphDomain(a&&a.graphDomain||"");c("sdk.AuthState").setState({currentAuthResponse:a});i={authResponse:a,status:b,loginSource:e};(k||g)&&d("sdk.AuthUtils").AuthInternalEvent.inform("logout",i);(j||g)&&d("sdk.AuthUtils").AuthInternalEvent.inform("login",i);l&&d("sdk.AuthUtils").AuthInternalEvent.inform("authresponse.change",i);h&&d("sdk.AuthUtils").AuthInternalEvent.inform("status.change",i);f||d("sdk.AuthStorageUtils").setSessionStorage(a,b);return i}function k(){return c("sdk.AuthState").getState().currentAuthResponse}function f(a){var b=k(),e=d("sdk.AuthUtils").isInstagramLogin(b)?"instagram":"facebook";j(null,"unknown",e);d("sdk.AuthUtils").setLogoutState();if(b!=null&&b.accessToken!=null){e=new(c("sdk.URI"))(d("UrlMap").resolve("www").replace("web.","www.")+"/x/oauth/logout").addQueryData("access_token",b.accessToken);var f=new XMLHttpRequest(),g=!1;f&&(f.open("GET",e.toString(),!0),f.withCredentials=!0,a&&(f.onreadystatechange=function(){if(f.readyState>=2){if(g)return;a({authResponse:k(),status:c("sdk.Runtime").getLoginStatus()});g=!0}}),f.send())}d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"PLATFORM_AUTH_LOGOUT",extra:{args:{fblo:!0}}})}function l(a,b,e,f){return function(e){if(e&&e.access_token){var g=d("sdk.SignedRequest").parse(e.signed_request);g=g!=null?g.user_id!=null?g.user_id:null:null;b={accessToken:e.access_token,userID:g,expiresIn:Number(e.expires_in),signedRequest:e.signed_request,graphDomain:e.graph_domain};e.asset_scopes&&(b=babelHelpers["extends"]({},b,{asset_scopes:ES("JSON","parse",!1,e.asset_scopes)}));b=n(b,e);d("sdk.AuthUtils").removeLogoutState();g="connected";j(b,g);m(f)}else if(e&&e.asset_scopes)b={asset_scopes:ES("JSON","parse",!1,e.asset_scopes)},b=n(b,e),d("sdk.AuthUtils").removeLogoutState(),g="connected",j(b,g),m(f);else if(e&&(e.error||e.error_message||e.error_description||e.error_code||e.error_reason||e.result&&e.result.closeWindow)){d("sdk.AuthUtils").setLogoutState();g="unknown";j(null,g);var h=e.error_message||e.error_description;g={authResponse:k(),status:g,message:h};e.error==="access_denied"||e.result&&e.result.closeWindow?d("sdk.AuthUtils").AuthInternalEvent.inform("loginDenied",g):d("sdk.AuthUtils").AuthInternalEvent.inform("loginError",g)}else e&&e.result&&(d("sdk.AuthUtils").removeLogoutState(),b=e.result.authResponse);if(a){h={authResponse:b,status:c("sdk.Runtime").getLoginStatus()};a(h)}return b}}function m(a){if(a&&a.tp&&a.tp!=="unspecified")return;d("sdk.LoggingUtils").logLoginEvent(a,d("sdk.LoggingUtils").logEventName.loginEnd);window.setTimeout(function(){d("sdk.LoggingUtils").logLoginEvent(a,d("sdk.LoggingUtils").logEventName.loginCompleteHeartbeat)},h)}function n(a,b){b.granted_scopes&&(a=babelHelpers["extends"]({},a,{grantedScopes:b.granted_scopes}));b.data_access_expiration_time&&(a=babelHelpers["extends"]({},a,{data_access_expiration_time:Number(b.data_access_expiration_time)}));b.base_domain!=null&&d("sdk.AuthUtils").setBaseDomain(b.base_domain);d("sdk.AuthUtils").setGraphDomain(b.graph_domain);b.enforce_https&&c("sdk.Runtime").setEnforceHttps(!0);b.referred&&(a=babelHelpers["extends"]({},a,{referred:b.referred}));d("sdk.AuthStorageUtils").setLocalStorageToken(a,b.long_lived_token);return a}b={setFinalAuthResponse:e,login:a,logout:f,setAuthResponse:j,getAuthResponse:k,parseSignedRequest:d("sdk.SignedRequest").parse,xdResponseWrapper:l,subscribe:d("sdk.AuthUtils").AuthInternalEvent.subscribe,unsubscribe:d("sdk.AuthUtils").AuthInternalEvent.unsubscribe};e=b;g["default"]=e}),98); +__d("dedupString",[],(function(a,b,c,d,e,f){"use strict";function a(a){var b;return Object.keys((b={},b[a]=0,b))[0]}f["default"]=a}),66); +__d("emptyFunction",[],(function(a,b,c,d,e,f){function a(a){return function(){return a}}b=function(){};b.thatReturns=a;b.thatReturnsFalse=a(!1);b.thatReturnsTrue=a(!0);b.thatReturnsNull=a(null);b.thatReturnsThis=function(){return this};b.thatReturnsArgument=function(a){return a};c=b;f["default"]=c}),66); +__d("passiveEventListenerUtil",[],(function(a,b,c,d,e,f){"use strict";b=!1;try{c=Object.defineProperty({},"passive",{get:function(){b=!0}});window.addEventListener("test",null,c)}catch(a){}var g=b;function a(a){return g?a:typeof a==="boolean"?a:a.capture||!1}f.isPassiveEventListenerSupported=g;f.makeEventOptions=a}),66); +__d("DOMEventListener",["invariant","dedupString","emptyFunction","passiveEventListenerUtil","wrapFunction"],(function(a,b,c,d,e,f,g){var h=b("passiveEventListenerUtil").isPassiveEventListenerSupported,i,j;window.addEventListener?(i=function(a,c,d,e){e===void 0&&(e=!1),d.wrapper=b("wrapFunction")(d,"entry",b("dedupString")("DOMEventListener.add "+c)),a.addEventListener(c,d.wrapper,h?e:!1)},j=function(a,b,c,d){d===void 0&&(d=!1),a.removeEventListener(b,c.wrapper,h?d:!1)}):window.attachEvent?(i=function(a,c,d,e){e===void 0,d.wrapper=b("wrapFunction")(d,"entry","DOMEventListener.add "+c),a.attachEvent||g(0,2798),a.attachEvent("on"+c,d.wrapper)},j=function(a,b,c,d){d===void 0,a.detachEvent||g(0,2799),a.detachEvent("on"+b,c.wrapper)}):j=i=b("emptyFunction");a={add:function(a,b,c,d){d===void 0&&(d=!1);i(a,b,c,d);return{remove:function(){j(a,b,c,d)}}},remove:j};e.exports=a}),null); +__d("JSONRPC",["Log"],(function(a,b,c,d,e,f){a=function(){"use strict";function a(a){var b=this;this.$1=0;this.$2={};this.remote=function(a){b.$3=a;return b.remote};this.local={};this.$4=a}var c=a.prototype;c.stub=function(a){var b=this;this.remote[a]=function(){var c={jsonrpc:"2.0",method:a};for(var d=arguments.length,e=new Array(d),f=0;fg&&(k=g);k+=(e=m.scrollTop)!=null?e:0;if(c("sdk.UA").mobile()){n=100;if(b){n+=((g=m.height)!=null?g:h-l)/2;d("sdk.DOM").addCss(document.body,"fb_reposition")}else d("sdk.DOM").addCss(document.body,"fb_hidden"),document.body.style.width="auto",k=1e4;e=d("sdk.DOM").getByClass("fb_dialog_padding",a);e.length&&(e[0].style.height=n+"px")}a.style.left=(f>0?f:0)+"px";a.style.top=(k>0?k:0)+"px"}function m(a,b,c){l(a,b,c);b=d("sdk.DOM").getViewportInfo();b=(c=b.scrollTop)!=null?c:0+((c=b.height)!=null?c:h-a.offsetHeight)*.05;d("sdk.DOM").setStyle(a,"top",b+"px")}function n(){var a=document.createElement("div");a.setAttribute("id","fb_dialog_ipad_overlay");k(a);return a}function o(a){a=a||{};var b=document.createElement("div"),e=a;e=e.onClose;if(a.closeIcon&&e){var f=document.createElement("a");f.className="fb_dialog_close_icon";d("DOMEventListener").add(f,"click",e);b.appendChild(f)}e="fb_dialog";e+=" "+(a.classes||"");e+=c("sdk.UA").mobile()?" fb_dialog_mobile":" fb_dialog_advanced";b.className=e;if(a.width){f=parseInt(a.width,10);isNaN(f)||(b.style.width=f+"px")}e=document.createElement("div");a.content&&d("sdk.Content").append(a.content,e);e.className="fb_dialog_content";b.appendChild(e);if(c("sdk.UA").mobile()){f=document.createElement("div");f.className="fb_dialog_padding";b.appendChild(f)}return{dialogElement:b,contentRoot:e}}function p(a){var b=document.body;a?d("sdk.DOM").removeCss(b,"fb_reposition"):d("sdk.DOM").removeCss(b,"fb_hidden")}g.isOrientationPotrait=a;g.addDoubleClickAction=b;g.addIdleDesktopAction=e;g.addMobileOrientationChangeAction=f;g.applyScreenDimensions=k;g.setDialogPositionToCenter=l;g.setDialogPositionToTop=m;g.setupNewDarkOverlay=n;g.setupNewDialog=o;g.onDialogHideCleanup=p}),98); +__d("sdk.fbt",[],(function(a,b,c,d,e,f){a=function(){};a._=function(a){var b=typeof a==="string"?a:a[0];b==null&&(typeof a==="object"&&a!==null&&!Array.isArray(a)&&"*"in a&&(b=a["*"]));return b};b=a;f["default"]=b}),66); +__d("sdk.Dialog",["DOMEventListener","ObservableMixin","Type","sdk.Canvas.Environment","sdk.Content","sdk.DOM","sdk.DialogUtils","sdk.Runtime","sdk.UA","sdk.fbt"],(function(a,b,c,d,e,f,g){var h=30,i=590,j=500,k=240,l=575;function m(){var a=d("sdk.DOM").getViewportInfo(),b=a.height;a=a.width;return b!=null&&a!=null?{width:Math.min(a,j),height:Math.min(b,i)}:null}var n=c("Type").extend({constructor:function(a,b){this.parent(),this.id=a,this.display=b,this._e2e={},o._dialogs||(o._dialogs={},o._addOrientationHandler()),o._dialogs[a]=this,this.trackEvent("init")},trackEvent:function(a,b){if(this._e2e[a])return this;this._e2e[a]=b||Date.now();a=="close"&&this.inform("e2e:end",this._e2e);return this},trackEvents:function(a){typeof a==="string"&&(a=ES("JSON","parse",!1,a));for(var b in a)Object.prototype.hasOwnProperty.call(a,b)&&this.trackEvent(b,a[b]);return this}},c("ObservableMixin")),o={newInstance:function(a,b){return new n(a,b)},_dialogs:null,_lastYOffset:0,_availScreenWidth:null,_overlayListeners:[],_loaderEl:null,_overlayEl:null,_stack:[],_active:null,get:function(a){return o._dialogs[a]},_findRoot:function(a){a=a;while(a){if(d("sdk.DOM").containsCss(a,"fb_dialog"))return a;a.parentElement instanceof HTMLElement&&(a=a.parentElement)}},_createWWWLoader:function(a){a=a?a:"460";var b=document.createElement("div");b.innerHTML='
        Facebook
        ';return o.create({content:b,width:a})},_createMobileLoader:function(){var a=document.createElement("div");c("sdk.UA").nativeApp()?a.innerHTML='
        ':o.isTabletStyle()?a.innerHTML='":a.innerHTML='
        '+c("sdk.fbt")._("Cargando...")+'
        ';return o.create({classes:"loading"+(o.isTabletStyle()?" centered":""),content:a})},_setDialogOverlayStyle:function(){o._overlayEl!=null&&d("sdk.DialogUtils").applyScreenDimensions(o._overlayEl)},_showTabletOverlay:function(a){if(!o.isTabletStyle())return;if(o._overlayEl==null){a=d("sdk.DialogUtils").setupNewDarkOverlay();a.className="";o._overlayEl=a;d("sdk.Content").append(o._overlayEl,null)}else o._overlayEl.className=""},_hideTabletOverlay:function(){o.isTabletStyle()&&(o._overlayEl!=null&&(o._overlayEl.className="hidden"),o._overlayListeners.forEach(function(a){return a.remove()}),o._overlayListeners=[])},showLoader:function(a,b){a||(a=function(){});var e=function(){o._hideLoader(),d("sdk.DialogUtils").onDialogHideCleanup(o.isTabletStyle()),o._hideTabletOverlay(),a!=null&&a()};o._showTabletOverlay(e);o._loaderEl||(o._loaderEl=o._findRoot(c("sdk.UA").mobile()?o._createMobileLoader():o._createWWWLoader(b)));b=document.getElementById("fb_dialog_loader_close");if(b){d("sdk.DOM").removeCss(b,"fb_hidden");b=d("DOMEventListener").add(b,"click",e);o._overlayListeners.push(b)}o._loaderEl!=null&&o._makeActive(o._loaderEl)},_hideLoader:function(){o._loaderEl&&o._loaderEl==o._active&&(o._loaderEl.style.top="-10000px")},_makeActive:function(a){o._setDialogSizes(),o._lowerActive(),o._active=a,c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)&&c("sdk.Canvas.Environment").getPageInfo(function(a){o._centerActive(a)}),o._centerActive()},_lowerActive:function(){if(!o._active)return;o._active.style.top="-10000px";o._active=null},_removeStacked:function(a){o._stack=o._stack.filter(function(b){return b!=a})},_centerActive:function(a){var b=o._active;if(!b)return;d("sdk.DialogUtils").setDialogPositionToCenter(b,o.isTabletStyle(),a)},_setDialogSizes:function(a){a===void 0&&(a=!1);if(!c("sdk.UA").mobile())return;for(var b in o._dialogs)if(Object.prototype.hasOwnProperty.call(o._dialogs,b)){var d=document.getElementById(b);d&&(d.style.width=o.getDefaultSize().width+"px",a||(d.style.height=o.getDefaultSize().height+"px"))}},getDefaultSize:function(){if(c("sdk.UA").mobile()){var a=m();if(a){var b;if((b=(b=d("sdk.DOM").getViewportInfo())==null?void 0:b.width)!=null?b:j<=a.width){a.width=(b=(b=d("sdk.DOM").getViewportInfo())==null?void 0:b.width)!=null?b:j-h}if((b=(b=d("sdk.DOM").getViewportInfo())==null?void 0:b.height)!=null?b:i<=a.height){a.height=(b=(b=d("sdk.DOM").getViewportInfo())==null?void 0:b.height)!=null?b:i-h}return a}if(c("sdk.UA").ipad())return{width:j,height:i};if(c("sdk.UA").android())return{width:screen.availWidth,height:screen.availHeight};else{b=window.innerWidth;a=window.innerHeight;var e=b/a>1.2;return{width:b,height:Math.max(a,e?screen.width:screen.height)}}}return{width:l,height:k}},_handleOrientationChange:function(){var a;o._availScreenWidth=(a=(a=d("sdk.DOM").getViewportInfo())==null?void 0:a.width)!=null?a:j;if(o.isTabletStyle())o._setDialogSizes(!0),o._centerActive(),o._setDialogOverlayStyle();else{a=o.getDefaultSize().width;for(var b in o._dialogs)if(Object.prototype.hasOwnProperty.call(o._dialogs,b)){var c=document.getElementById(b);c&&(c.style.width=a+"px")}}},_addOrientationHandler:function(){var a;if(!c("sdk.UA").mobile())return;o._availScreenWidth=(a=(a=d("sdk.DOM").getViewportInfo())==null?void 0:a.width)!=null?a:j;d("sdk.DialogUtils").addMobileOrientationChangeAction(o._handleOrientationChange)},create:function(a){var b=d("sdk.DialogUtils").setupNewDialog(a);d("sdk.Content").append(b.dialogElement);a.visible&&o.show(b.dialogElement);typeof a.styles==="object"&&ES("Object","assign",!1,b.dialogElement.style,a.styles);return b.contentRoot},show:function(a){var b=o._findRoot(a);b!=null&&(o._removeStacked(b),o._hideLoader(),o._makeActive(b),o._stack.push(b),"fbCallID"in a&&o.get(a.fbCallID).inform("iframe_show").trackEvent("show"))},hide:function(a){var b=o._findRoot(a);o._hideLoader();b==o._active&&(o._lowerActive(),d("sdk.DialogUtils").onDialogHideCleanup(o.isTabletStyle()),o._hideTabletOverlay(),"fbCallID"in a&&o.get(a.fbCallID).inform("iframe_hide").trackEvent("hide"))},remove:function(a){var b=o._findRoot(a);if(b){a=o._active==b;o._removeStacked(b);a?(o._hideLoader(),o._stack.length>0?o.show(o._stack.pop()):(o._lowerActive(),d("sdk.DialogUtils").onDialogHideCleanup(o.isTabletStyle()),o._hideTabletOverlay())):o._active===null&&o._stack.length>0&&o.show(o._stack.pop());window.setTimeout(function(){var a;(a=b.parentNode)==null?void 0:a.removeChild(b)},3e3)}},isActive:function(a){a=o._findRoot(a);return a!=null&&a===o._active},isTabletStyle:function(){if(!c("sdk.UA").mobile())return!1;var a=m();return a!=null&&(a.height>=i||a.width>=j)}};a=o;g["default"]=a}),98); +__d("sdk.PlatformVersioning",["ManagedError","sdk.Runtime"],(function(a,b,c,d,e,f,g){var h=/^v\d+\.\d\d?$/;function a(){if(!c("sdk.Runtime").getVersion())throw new(c("ManagedError"))("init not called with valid version")}function b(a){if(!h.test(a))throw new(c("ManagedError"))("invalid version specified")}g.REGEX=h;g.assertVersionIsSet=a;g.assertValidVersion=b}),98); +__d("sdk.warnInsecure",["Log","sdk.Runtime","sdk.Scribe","sdk.feature"],(function(a,b,c,d,e,f,g){"use strict";var h=c("sdk.feature")("https_only_learn_more",""),i={};function a(a){window.location.protocol!=="https:"&&(d("Log").log("error",-1,"The method FB.%s can no longer be called from http pages. %s",a,h),c("sdk.feature")("https_only_scribe_logging",!0)&&!Object.prototype.hasOwnProperty.call(i,a)&&(d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"HttpsOnly",extra:{message:a}}),i[a]=!0));return!0}g["default"]=a}),98); +__d("sdk.api",["ApiClient","sdk.PlatformVersioning","sdk.Runtime","sdk.URI","sdk.warnInsecure"],(function(a,b,c,d,e,f,g){function a(a){for(var b=arguments.length,e=new Array(b>1?b-1:0),f=1;f0)g--,d("Log").debug("resending xdArbiterRegister"),i();else{window.clearInterval(f);if(g===0){d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"XD_FB_QUEUE_INITIALIZATION",extra:{message:"Failed to initialize in "+e+"ms"}});d("Log").error("xdAbiterRegisterAck not received");return}}},b)}var w={rpc:c("sdk.RPC"),_callbacks:{},_forever:{},_channel:m,_origin:n,onMessage:s,init:u,sendToFacebook:t,inform:function(a,b,c,d){t("facebook",{method:a,params:ES("JSON","stringify",!1,b||{}),behavior:d||"p",relation:c})},handler:function(a,b,d,e){a="#"+c("QueryString").encode({cb:w.registerCallback(a,d,e),origin:n+"/"+m,domain:location.hostname,relation:b||"opener",is_canvas:c("sdk.Runtime").isCanvasEnvironment()});return l+a},registerCallback:function(a,b,d){d=d||c("guid")();b&&(w._forever[d]=!0);w._callbacks[d]=a;return d}};d("sdk.Event").subscribe("init:post",function(a){j=a.xdProxyName,u(a.xdProxyName)});f.exports=w}),34); +__d("sdk.modFeatureCheck",["JSSDKConfig"],(function(a,b,c,d,e,f,g){function a(a,b,c){c===void 0&&(c=!1);if(d("JSSDKConfig").features&&a in d("JSSDKConfig").features){var e=d("JSSDKConfig").features[a];if(typeof e==="object"&&Array.isArray(e))return b.some(function(a){return e.some(function(b){return a%b===0})})}return c}g.forIDs=a}),98); +__d("sdk.openMessenger",["sdk.UA"],(function(a,b,c,d,e,f,g){"use strict";var h="https://itunes.apple.com/us/app/messenger/id454638411",i="https://play.google.com/store/apps/details?id=com.facebook.orca",j=3e3;function a(a){var b,d,e=a.link;a=a.app_id;c("sdk.UA").android()?(b="intent://share/#Intent;package=com.facebook.orca;scheme=fb-messenger;S.android.intent.extra.TEXT="+encodeURIComponent(e)+";S.trigger=send_plugin;",a&&(b+="S.platform_app_id="+encodeURIComponent(a)+";"),b+="end",d=i):(b="fb-messenger://share?link="+encodeURIComponent(e),a&&(b+="&app_id="+encodeURIComponent(a)),d=h);setTimeout(function(){window.location.href=d},j);window.location.href=b}g["default"]=a}),98); +__d("sdk.UIServer",["Log","QueryString","UrlMap","createObjectFrom","flattenObject","guid","insertIframe","resolveURI","sdk.Auth","sdk.Auth.LoginStatus","sdk.Content","sdk.DOM","sdk.Dialog","sdk.Event","sdk.Extensions","sdk.Frictionless","sdk.LoggingUtils","sdk.Native","sdk.Popup","sdk.RPC","sdk.Runtime","sdk.UA","sdk.XD","sdk.api","sdk.fbt","sdk.feature","sdk.getContextType","sdk.modFeatureCheck","sdk.openMessenger"],(function(a,b,c,d,e,f,g){var h={transform:function(a){if(a.params.display==="touch"&&p.canIframe(a.params)&&window.postMessage){a.params.channel=p._xdChannelHandler(a.id,"parent");c("sdk.UA").nativeApp()||(a.params.in_iframe=1);return a}else return p.genericTransform(a)},getXdRelation:function(a){var b=a.display;return b==="touch"&&window.postMessage&&a.in_iframe?"parent":p.getXdRelation(a)}};function i(a){return p.isOAuth(a)&&d("sdk.Extensions").supportsDialog("oauth")}function j(a){return p.isOAuth(a)&&(a.is_account_link===!0||a.is_account_link==="true")&&d("sdk.Extensions").supportsDialog("accountLink")}function k(a){if(!c("sdk.Runtime").getClientID()){d("Log").error("FB.login() called before FB.init().");return}if(c("sdk.Auth").getAuthResponse()&&!a.params.scope&&!a.params.asset_scope&&!a.params.auth_type){a.params.plugin_prepare||(d("Log").error("FB.login() called when user is already connected."),a.cb&&(a==null?void 0:a.cb({status:c("sdk.Runtime").getLoginStatus(),authResponse:c("sdk.Auth").getAuthResponse()})));return}var b=a.cb,e=a.id;delete a.cb;a&&a.params&&!a.params.logger_id&&(a.params.logger_id=c("guid")());a&&a.params&&!a.params.cbt&&(a.params.cbt=Date.now());(a.params.fx_app==="instagram"||a.params.fx_app==="ig_single")&&!a.params.scope&&(a.params.scope="public_profile");var f=a.params.auth_type;f=f&&ES(f,"includes",!0,"reauthenticate");var g={token:!0,signed_request:!0,graph_domain:!0};g=Object.keys(ES("Object","assign",!1,a.params.response_type?c("createObjectFrom")(a.params.response_type.split(",")):{},g)).join(",");a.params.display==="async"?(ES("Object","assign",!1,a.params,{client_id:c("sdk.Runtime").getClientID(),origin:c("sdk.getContextType")(),response_type:g,domain:location.hostname}),a.cb=c("sdk.Auth").xdResponseWrapper(b,c("sdk.Auth").getAuthResponse(),"permissions.oauth",a.params)):(f&&p._xdNextHandler(function(a){b({authResponse:null,status:"not_authorized"})},e,a.params.plugin_prepare?"opener.parent":"opener",!0),ES("Object","assign",!1,a.params,{client_id:c("sdk.Runtime").getClientID(),redirect_uri:c("resolveURI")(p.xdHandler(b,e,a.params.plugin_prepare?"opener.parent":"opener",c("sdk.Auth").getAuthResponse(),"permissions.oauth",!f,a.params)),origin:c("sdk.getContextType")(),response_type:g,domain:location.hostname}));e=a.params&&a.params.tp&&a.params.tp!=="unspecified";!a.params.plugin_prepare&&!e&&d("sdk.LoggingUtils").logEvent(a.params.logger_id,d("sdk.LoggingUtils").logEventName.loginStart,{cbt_delta:0});return a}a={"stream.share":{size:{width:670,height:340},url:"sharer.php",transform:function(a){a.params.u||(a.params.u=window.location.toString());a.params.display="popup";return a}},gaming_friendfinder:{url:"gaming/me/friendfinder/",transform:function(a){if(!c("sdk.Runtime").getClientID()){d("Log").error("FriendFinder called before FB.init().");return}a.url+=c("sdk.Runtime").getClientID();a.size={width:400,height:800};return a}},gaming_media_library:{url:"gaming/me/media_asset/",transform:function(a){a.url+=a.params.media_id;a.size={width:400,height:800};return a}},apprequests:{transform:function(a){a=h.transform(a);a.size={width:445,height:635};a.params.display="popup";a.params.in_iframe=!1;a.params.frictionless=c("sdk.Frictionless")&&c("sdk.Frictionless")._useFrictionless;a.params.frictionless&&(c("sdk.Frictionless").isAllowed(a.params.to)&&(a.hideLoader=!0),a.cb=c("sdk.Frictionless")._processRequestResponse(a.cb,a.hideLoader));a.closeIcon=!1;return a},getXdRelation:h.getXdRelation},"permissions.oauth":{url:"dialog/oauth",size:{width:c("sdk.UA").mobile()?null:600,height:c("sdk.UA").mobile()?null:679},transform:function(a){return k(a)}},"permissions.ig_oauth":{url:"oauth/authorize",size:{width:c("sdk.UA").mobile()?null:600,height:c("sdk.UA").mobile()?null:679},transform:function(a){return k(a)}},photo_picker:{url:"dialog/photo_picker",size:{width:c("sdk.UA").mobile()?null:600,height:c("sdk.UA").mobile()?null:679},transform:function(a){if(!c("sdk.Runtime").getClientID()){d("Log").error("Photo Picker was called before FB.init().");return}var b=a.cb,e=a.id;delete a.cb;ES("Object","assign",!1,a.params,{client_id:c("sdk.Runtime").getClientID(),redirect_uri:c("resolveURI")(p.xdHandlerPhotoPicker(b,e,a.params.plugin_prepare?"opener.parent":"opener","photo_picker",a.params)),origin:c("sdk.getContextType")(),domain:location.hostname});return a}},"auth.logout":{transform:function(a){!c("sdk.Runtime").getClientID()?d("Log").error("FB.logout() called before calling FB.init()."):!c("sdk.Auth").getAuthResponse()?d("Log").error("FB.logout() called without an access token."):c("sdk.Auth").logout(a.cb)}},"login.status":{transform:function(a){c("sdk.Auth.LoginStatus").getLoginStatus(a.cb)}},pay:{size:{width:555,height:120},connectDisplay:"popup"},live_broadcast:{transform:function(a){a.params.phase==="create"&&(a.size={width:480,height:280});a.params.phase==="publish"&&(a.size={width:772,height:540});return a},require_access_token:!0},boost:{transform:function(a){a.size={width:960,height:760};a.params.display="popup";return a}},share_referral:{size:{width:482,height:725}}};var l={},m=0;function n(a,b){l[b]=!0;return function(c){delete l[b],a(c)}}function o(a){var b=a.method.toLowerCase();return b==="pay"&&a.display==="async"?!0:!1}var p={Methods:a,_oauthMethodNameSet:new Set(["permissions.oauth","permissions.request","permissions.ig_oauth"]),_loadedNodes:{},_defaultCb:{},_resultToken:'"xxRESULTTOKENxx"',_popupInterval:null,genericTransform:function(a){(a.params.display=="dialog"||a.params.display=="iframe")&&ES("Object","assign",!1,a.params,{display:"iframe",channel:p._xdChannelHandler(a.id,"parent.parent")},!0);return a},isOAuth:function(a){return p._oauthMethodNameSet.has(a.method)||a.method=="oauth"},checkOauthDisplay:function(a){var b=a.scope||a.perms||c("sdk.Runtime").getScope();return!b?a.display:"popup"},prepareCall:function(a,b){var e=a.method.toLowerCase(),f=Object.prototype.hasOwnProperty.call(p.Methods,e)?babelHelpers["extends"]({},p.Methods[e]):{},g=a.id||c("guid")(),h=!0;ES("Object","assign",!1,a,{app_id:c("sdk.Runtime").getClientID(),locale:c("sdk.Runtime").getLocale(),sdk:"joey",access_token:h&&c("sdk.Runtime").getAccessToken()||void 0});a.display=p.getDisplayMode(f,a);f.url||(f.url="dialog/"+e);(f.url=="dialog/oauth"||f.url=="dialog/permissions.request")&&(a.display=="iframe"||a.display=="touch"&&a.in_iframe)&&(a.display=p.checkOauthDisplay(a));if(f.url=="dialog/oauth"){if(m>=((h=c("sdk.feature")("max_oauth_dialog_retries",100))!=null?h:100)){d("Log").error("Your request to oauth has exceeded the rate limit, please try again later");return}m++}a.display=="popup"&&!f.require_access_token&&delete a.access_token;if(c("sdk.Runtime").getIsVersioned()&&f.url.substring(0,7)==="dialog/"){h=a.version||c("sdk.Runtime").getVersion();h!=null&&h!==""&&h!=="null"&&(f.url=h+"/"+f.url)}if(o(a)){if(l[e]){h='Dialog "'+e+'" is trying to run more than once.';d("Log").warn(h);b({error_code:-100,error_message:h});return}b=n(b,e)}h={cb:b,id:g,size:f.size||p.getDefaultSize(),url:d("UrlMap").resolve(a.fx_app==="instagram"||a.fx_app==="ig_single"?"www_instagram":a.display=="touch"?"m":"www")+"/"+f.url,params:a,name:e,dialog:c("sdk.Dialog").newInstance(g,a.display)};b=f.transform?f.transform:p.genericTransform;if(b){h=b(h);if(!h)return}a.display==="touch"&&a.in_iframe&&(h.params.parent_height=window.innerHeight);e=f.getXdRelation||p.getXdRelation;b=e(h.params);!(h.id in p._defaultCb)&&!("next"in h.params)&&!("redirect_uri"in h.params)&&(h.params.next=p._xdResult(h.cb,h.id,b,!0));(b==="parent"||b==="opener")&&ES("Object","assign",!1,h.params,{channel_url:p._xdChannelHandler(g,b==="parent"?"parent.parent":"opener")},!0);h=p.prepareParams(h);return h},prepareParams:function(a){a.params.display!=="async"&&delete a.params.method;a.params.kid_directed_site=c("sdk.Runtime").getKidDirectedSite()||a.params.kid_directed_site;a.params=c("flattenObject")(a.params);var b=c("QueryString").encode(a.params);!c("sdk.UA").nativeApp()&&p.urlTooLongForIE(a.url+"?"+b)?a.post=!0:b&&(a.url+="?"+b);return a},urlTooLongForIE:function(a){return c("sdk.UA").ie()!=null&&c("sdk.UA").ie()<=8&&a.length>2048},getDisplayMode:function(a,b){if(b.display==="hidden"||b.display==="none"||b.display==="native")return b.display;var e=c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)||c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.PAGETAB);if(e&&(d("sdk.modFeatureCheck").forIDs("force_popup_to_canvas_apps_with_id",[c("sdk.Runtime").getClientID()])||c("sdk.feature")("force_popup_to_all_canvas_app",!1)))return"popup";if(e&&!b.display)return"async";if(i(b)||j(b))return"async";if(c("sdk.UA").mobile()||b.display==="touch")return"touch";if((b.display=="iframe"||b.display=="dialog")&&!p.canIframe(b)){d("Log").error('"dialog" mode can only be used when the user is connected.');return"popup"}return a.connectDisplay&&!e?a.connectDisplay:b.display||(p.canIframe(b)?"dialog":"popup")},canIframe:function(a){return c("sdk.Runtime").getAccessToken()},getXdRelation:function(a){a=a.display;if(a==="popup"||a==="touch")return"opener";if(a==="dialog"||a==="iframe"||a==="hidden"||a==="none")return"parent";return a==="async"?"parent.frames["+window.name+"]":""},popup:function(a){var b=d("sdk.Popup").popup(a,p.isOAuth({method:a.name}));b&&(p.setLoadedNode(a,b,"popup"),a.id in p._defaultCb&&p._popupMonitor())},setLoadedNode:function(a,b,c){c==="iframe"&&(b.fbCallID=a.id),b={node:b,type:c,fbCallID:a.id,method:a.name,params:a.params},p._loadedNodes[a.id]=b},getLoadedNode:function(a){a=typeof a==="object"?a.id:a;a=p._loadedNodes[a];return a?a.node:null},hidden:function(a){a.className="FB_UI_Hidden",a.root=d("sdk.Content").appendHidden(document.createElement("div")),p._insertIframe(a)},iframe:function(a){a.className="FB_UI_Dialog";var b=function(){var b=ES("JSON","stringify",!1,{error_code:4201,error_message:c("sdk.fbt")._("User canceled the Dialog flow")});p._triggerDefault(a.id,b)},e={onClose:b,closeIcon:a.closeIcon===void 0?!0:a.closeIcon,classes:c("sdk.Dialog").isTabletStyle()?"centered":""};a.root=c("sdk.Dialog").create(e);a.hideLoader||c("sdk.Dialog").showLoader(b,a.size.width);d("sdk.DOM").addCss(a.root,"fb_dialog_iframe");p._insertIframe(a)},touch:function(a){a.params&&a.params.in_iframe?a.ui_created?c("sdk.Dialog").showLoader(function(){p._triggerDefault(a.id,null)},0):p.iframe(a):c("sdk.UA").nativeApp()&&!a.ui_created?(a.frame=a.id,c("sdk.Native").onready(function(){p.setLoadedNode(a,c("sdk.Native").open(a.url+"#cb="+a.frameName),"native")}),p._popupMonitor()):a.ui_created||p.popup(a)},async:function(a){a.params.redirect_uri=location.protocol+"//"+location.host+location.pathname;delete a.params.access_token;a.params.is_canvas=c("sdk.Runtime").isCanvasEnvironment();var b=function(b){b=b.result;if(b&&b.e2e){var d=c("sdk.Dialog").get(a.id);d.trackEvents(b.e2e);d.trackEvent("close");delete b.e2e}a.cb(b)};i(a.params)||j(a.params)?(a.params.method="oauth",a.params.redirect_uri=a.params.next,d("sdk.Extensions").remote.showDialog(a.params,b)):c("sdk.RPC").remote.showDialog(a.params,b)},"native":function(a){c("sdk.openMessenger")(a.params)},getDefaultSize:function(){return c("sdk.Dialog").getDefaultSize()},_insertIframe:function(a){p._loadedNodes[a.id]=!1;var b=function(b){a.id in p._loadedNodes&&p.setLoadedNode(a,b,"iframe")};a.post?c("insertIframe")({url:"about:blank",root:a.root,className:a.className,width:a.size.width,height:a.size.height,id:a.id,onInsert:b,onload:function(b){d("sdk.Content").submitToTarget({url:a.url,target:b.name,params:a.params})}}):c("insertIframe")({url:a.url,root:a.root,className:a.className,width:a.size.width,height:a.size.height,id:a.id,name:a.frameName,onInsert:b})},_handleResizeMessage:function(a,b){a=p.getLoadedNode(a);if(!a)return;b.height&&(a.style.height=b.height+"px");b.width&&b.width!=0&&(a.style.width=b.width+"px");c("sdk.XD").inform("resize.ack",b||{},"parent.frames["+a.name+"]");!c("sdk.Dialog").isActive(a)?c("sdk.Dialog").show(a):c("sdk.Dialog")._centerActive()},_triggerDefault:function(a,b){var c={frame:a,result:""};b&&(c.result=b);p._xdRecv(c,p._defaultCb[a]||function(){})},_popupMonitor:function(){var a;for(var b in p._loadedNodes)if(Object.prototype.hasOwnProperty.call(p._loadedNodes,b)&&b in p._defaultCb){var d=function(){var d=p._loadedNodes[b];if(d.type!="popup"&&d.type!="native")return"continue";var e=d.node;try{e.closed?p.isOAuth(d)?c("sdk.Auth.LoginStatus").getLoginStatus(function(a){(a==null?void 0:a.status)==="connected"&&d.params!=null&&d.params.return_scopes?c("sdk.api")("/me/permissions",function(c){(!c||c.error)&&p._triggerDefault(b,a);var d="";c=c&&c.data?c.data:[];for(var e=0;e=-b)return!1}i=a;c("sdk.RPC").remote.setSize(a);return!0}function a(a,b){b===void 0&&typeof a==="number"&&(b=a,a=!0),a||a===void 0?(h===null&&(h=window.setInterval(function(){k()},b||100)),k()):h!==null&&(window.clearInterval(h),h=null)}c("sdk.RPC").stub("setSize");b={setSize:k,setAutoGrow:a};e=b;g["default"]=e}),98); +__d("sdk.Canvas.Navigation",["sdk.RPC"],(function(a,b,c,d,e,f){function a(a){b("sdk.RPC").local.navigate=function(b){a({path:b})},b("sdk.RPC").remote.setNavigationEnabled(!0)}b("sdk.RPC").stub("setNavigationEnabled");c={setUrlHandler:a};d=c;f["default"]=d}),66); +__d("sdk.Canvas.Plugin",["Log","sdk.Runtime","sdk.UA","sdk.api"],(function(a,b,c,d,e,f,g){var h="CLSID:D27CDB6E-AE6D-11CF-96B8-444553540000",i="CLSID:444785F1-DE89-4295-863A-D46C3A781394",j=null;f=c("sdk.UA").osx()&&c("sdk.UA").osx.getVersionParts();var k=!(f&&f[0]>10&&f[1]>10&&(c("sdk.UA").chrome()>=31||c("sdk.UA").webkit()>=537.71||c("sdk.UA").firefox()>=25));function l(a){a._hideunity_savedstyle={},a._hideunity_savedstyle.left=a.style.left,a._hideunity_savedstyle.position=a.style.position,a._hideunity_savedstyle.width=a.style.width,a._hideunity_savedstyle.height=a.style.height,a.style.left="-10000px",a.style.position="absolute",a.style.width="1px",a.style.height="1px"}function m(a){a._hideunity_savedstyle&&(a.style.left=a._hideunity_savedstyle.left,a.style.position=a._hideunity_savedstyle.position,a.style.width=a._hideunity_savedstyle.width,a.style.height=a._hideunity_savedstyle.height)}function n(a){a._old_visibility=a.style.visibility,a.style.visibility="hidden"}function o(a){a.style.visibility=a._old_visibility||"",delete a._old_visibility}function p(a){var b=a.type?a.type.toLowerCase():null;b=b==="application/x-shockwave-flash"||a.classid&&a.classid.toUpperCase()==h;if(!b)return!1;b=/opaque|transparent/i;if(b.test(a.getAttribute("wmode")))return!1;for(var c=0;c=1/d("JSSDKCanvasPrefetcherConfig").sampleRate||!d("JSSDKCanvasPrefetcherConfig").enabled||ES(i,"includes",!0,c("sdk.Runtime").getClientID()))return;setTimeout(l,3e4)}function b(a){j=a}function e(a){k.push(a)}f={COLLECT_AUTOMATIC:h.AUTOMATIC,COLLECT_MANUAL:h.MANUAL,addStaticResource:e,setCollectionMode:b,_maybeSample:a};e=f;g["default"]=e}),98); +__d("sdk.Canvas.Tti",["sdk.RPC","sdk.Runtime"],(function(a,b,c,d,e,f,g){function h(a,b){b={appId:c("sdk.Runtime").getClientID(),time:Date.now(),name:b};b=[b];a&&b.push(function(b){a(b.result)});c("sdk.RPC").remote.logTtiMessage.apply(null,b)}function a(){h(null,"StartIframeAppTtiTimer")}function b(a){h(a,"StopIframeAppTtiTimer")}function d(a){h(a,"RecordIframeAppTti")}c("sdk.RPC").stub("logTtiMessage");e={setDoneLoading:d,startTimer:a,stopTimer:b};f=e;g["default"]=f}),98); +__d("sdk.Canvas-public",["Assert","FB","Log","sdk.Canvas.Environment","sdk.Canvas.IframeHandling","sdk.Canvas.Navigation","sdk.Canvas.Plugin","sdk.Canvas.Prefetcher","sdk.Canvas.Tti","sdk.Event","sdk.RPC","sdk.Runtime"],(function(a,b,c,d,e,f,g){function a(){c("FB").provide("Canvas",{setSize:function(a){c("Assert").maybeObject(a,"Invalid argument");return c("sdk.Canvas.IframeHandling").setSize.apply(null,arguments)},setAutoGrow:function(){return c("sdk.Canvas.IframeHandling").setAutoGrow.apply(null,arguments)},getPageInfo:function(a){c("Assert").isFunction(a,"Invalid argument");return c("sdk.Canvas.Environment").getPageInfo.apply(null,arguments)},scrollTo:function(a,b){c("Assert").maybeNumber(a,"Invalid argument");c("Assert").maybeNumber(b,"Invalid argument");return c("sdk.Canvas.Environment").scrollTo.apply(null,arguments)},setDoneLoading:function(a){c("Assert").maybeFunction(a,"Invalid argument");return c("sdk.Canvas.Tti").setDoneLoading.apply(null,arguments)},startTimer:function(){return c("sdk.Canvas.Tti").startTimer.apply(null,arguments)},stopTimer:function(a){c("Assert").maybeFunction(a,"Invalid argument");return c("sdk.Canvas.Tti").stopTimer.apply(null,arguments)},setUrlHandler:function(a){c("Assert").isFunction(a,"Invalid argument");return c("sdk.Canvas.Navigation").setUrlHandler.apply(null,arguments)}}),c("sdk.RPC").local.fireEvent=ES(d("sdk.Event").fire,"bind",!0,d("sdk.Event")),d("sdk.Event").subscribe("init:post",function(a){c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)&&(c("Assert").isTrue(!a.hideFlashCallback||!a.hidePluginCallback,"cannot specify deprecated hideFlashCallback and new hidePluginCallback"),c("sdk.Canvas.Plugin")._setHidePluginCallback(a.hidePluginCallback||a.hideFlashCallback))})}function h(){c("sdk.RPC").local.hidePluginObjects=function(){d("Log").info("hidePluginObjects called"),c("sdk.Canvas.Plugin").hidePluginCallback({state:"opened"})},c("sdk.RPC").local.showPluginObjects=function(){d("Log").info("showPluginObjects called"),c("sdk.Canvas.Plugin").hidePluginCallback({state:"closed"})},c("sdk.RPC").local.showFlashObjects=c("sdk.RPC").local.showPluginObjects,c("sdk.RPC").local.hideFlashObjects=c("sdk.RPC").local.hidePluginObjects}function b(){h(),c("FB").provide("Canvas.Plugin",c("sdk.Canvas.Plugin"))}function e(){c("FB").provide("Canvas.Prefetcher",c("sdk.Canvas.Prefetcher")),d("sdk.Event").subscribe("init:post",function(a){c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)&&c("sdk.Canvas.Prefetcher")._maybeSample()})}function f(){d("sdk.Event").subscribe(d("sdk.Event").SUBSCRIBE,a);d("sdk.Event").subscribe(d("sdk.Event").UNSUBSCRIBE,b);c("sdk.RPC").stub("useFriendsOnline");function a(a,b){if(a!="canvas.friendsOnlineUpdated")return;b.length===1&&c("sdk.RPC").remote.useFriendsOnline(!0)}function b(a,b){if(a!="canvas.friendsOnlineUpdated")return;b.length===0&&c("sdk.RPC").remote.useFriendsOnline(!1)}}a={init:a,initCanvasPlugin:b,initCanvasPrefetcher:e,initCanvasPresence:f,initRPC:h};b=a;g["default"]=b}),98); +__d("sdk.Event-public",["FB","Log","sdk.Event"],(function(a,b,c,d,e,f,g){function a(){var a=function(a){return d("Log").error("FB.Event."+a+"() has been deprecated")};c("FB").provide("Event",{subscribe:function(a,b){return d("sdk.Event").subscribe(a,b)},unsubscribe:ES(d("sdk.Event").unsubscribe,"bind",!0,d("sdk.Event")),clear:ES(a,"bind",!0,null,"clear"),fire:ES(a,"bind",!0,null,"fire")})}b={init:a};e=b;g["default"]=e}),98); +__d("sdk.Frictionless-public",["FB","sdk.Event","sdk.Frictionless"],(function(a,b,c,d,e,f,g){"use strict";function a(){d("sdk.Event").subscribe("init:post",function(a){a.frictionlessRequests&&c("sdk.Frictionless").init()}),c("FB").provide("Frictionless",c("sdk.Frictionless"))}b={init:a};e=b;g["default"]=e}),98); +__d("sdk.GamingServices",["sdk.api","sdk.ui"],(function(a,b,c,d,e,f,g){function a(a){c("sdk.ui")({display:"touch",method:"gaming_friendfinder"},a)}function b(a,b,d,e){c("sdk.api")("me/photos","POST",{caption:b,url:a},function(a){if(d===!1||!a||a.error)e!==null&&e(a);else{var b=a.id;c("sdk.ui")({display:"touch",method:"gaming_media_library",media_id:b},function(b){e!==null&&e(a)})}})}d={friendFinder:a,uploadImageToMediaLibrary:b};e=d;g["default"]=e}),98); +__d("sdk.GamingServices-public",["FB","sdk.GamingServices"],(function(a,b,c,d,e,f,g){"use strict";function a(){c("FB").provide("",{gamingservices:c("sdk.GamingServices")})}b={init:a};d=b;g["default"]=d}),98); +__d("sdk.PluginUtils",["resolveURI","sdk.Event"],(function(a,b,c,d,e,f,g){var h={string:function(a){return a},bool:function(a){return a!=null?/^(?:true|1|yes|on)$/i.test(a):void 0},url:function(a){return c("resolveURI")(a)},url_maybe:function(a){return a!=null&&a!==""?c("resolveURI")(a):void 0},hostname:function(a){return a!=null&&a!==""?a:"window.location.hostname"},px:function(a){if(typeof a==="string"){var b=a.match(/^(\d+)(?:px)?$/);return b!=null?parseInt(b[0],10):void 0}else if(typeof a==="number")return a;else return void 0},text:function(a){return a}};function i(a,b){var c;return(c=(c=(c=(c=(c=(c=a[b])!=null?c:a[b.replace(/_/g,"-")])!=null?c:a[b.replace(/_/g,"")])!=null?c:a["data-"+b])!=null?c:a["data-"+b.replace(/_/g,"-")])!=null?c:a["data-"+b.replace(/_/g,"")])!=null?c:void 0}function a(a,b,c,d){Object.keys(a).forEach(function(e){if(a[e]==="text"&&!c[e]){var f;c[e]=(f=(f=b.textContent)!=null?f:b.innerText)!=null?f:void 0;b.setAttribute(e,c[e])}d[e]=h[a[e]](i(c,e))})}function j(a,b,c){b==="100%"?a.style.width="100%":b!=null&&b!==""&&(a.style.width=b+"px"),(c!=null&&c!==""||c===0)&&(a.style.height=c+"px")}function b(a){return function(b){b={width:b.width,height:b.height,pluginID:a};d("sdk.Event").fire("xfbml.resize",b)}}function e(a){return a==="100%"?"100%":a!=null?parseInt(a,10):void 0}function f(a){a!=null&&j(a,0,0)}var k={skin:"string",font:"string",width:"string",height:"px",ref:"string",lazy:"bool",color_scheme:"string"};g.getVal=i;g.validate=a;g.resize=j;g.resizeBubbler=b;g.parse=e;g.collapseIframe=f;g.baseParams=k}),98); +__d("isNumberLike",[],(function(a,b,c,d,e,f){function a(a){return!isNaN(parseFloat(a))&&isFinite(a)}f["default"]=a}),66); +__d("sdk.createIframe",["DOMEventListener","getBlankIframeSrc","guid","isNumberLike"],(function(a,b,c,d,e,f,g){function a(a){var b=ES("Object","assign",!1,{},a),e,f=b.name||c("guid")(),g=b.root,h=b.style||{border:"none"},i=b.url,j=b.onload,k=b.onerror;e=document.createElement("iframe");e.name=f;delete b.style;delete b.name;delete b.url;delete b.root;delete b.onload;delete b.onerror;delete b.height;delete b.width;b.frameBorder===void 0&&(b.frameBorder=0);b.allowTransparency===void 0&&(b.allowTransparency=!0);b.allowFullscreen===void 0&&(b.allowFullscreen=!0);b.scrolling===void 0&&(b.scrolling="no");b.allow===void 0&&(b.allow="encrypted-media");b.lazy&&(b.loading="lazy",h.visibility&&delete h.visibility);delete b.lazy;a.width!=null&&c("isNumberLike")(a.width)&&(e.width=a.width+"px");a.height!=null&&c("isNumberLike")(a.height)&&(e.height=a.height+"px");b.testid&&e.dataset!=null&&(e.dataset.testid=b.testid,delete b.testid);for(f in b)Object.prototype.hasOwnProperty.call(b,f)&&e.setAttribute(f,b[f]);ES("Object","assign",!1,e.style,h);e.src=c("getBlankIframeSrc")();g!=null&&g.appendChild(e);if(j)var l=d("DOMEventListener").add(e,"load",function(){l.remove(),j()});if(k)var m=d("DOMEventListener").add(e,"error",function(){m.remove(),k()});e.src=i;return e}g["default"]=a}),98); +__d("IframePlugin",["Log","ObservableMixin","QueryString","Type","UrlMap","guid","sdk.Auth.LoginStatus","sdk.AuthUtils","sdk.DOM","sdk.Event","sdk.PlatformVersioning","sdk.PluginUtils","sdk.Runtime","sdk.UA","sdk.URI","sdk.XD","sdk.createIframe"],(function(a,b,c,d,e,f,g){var h=c("Type").extend({constructor:function(a,b,e,f){var g=this;this.parent();e=e.replace(/-/g,"_");var h=d("sdk.PluginUtils").getVal(f,"plugin_id");this.subscribe("xd.resize",d("sdk.PluginUtils").resizeBubbler(h));this.subscribe("xd.resize.flow",d("sdk.PluginUtils").resizeBubbler(h));this.subscribe("xd.resize.flow",function(a){ES("Object","assign",!1,g._iframeOptions.root.style,{verticalAlign:"bottom",overflow:""}),d("sdk.PluginUtils").resize(g._iframeOptions.root,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),g.updateLift(),window.clearTimeout(g._timeoutID)});this.subscribe("xd.resize",function(a){ES("Object","assign",!1,g._iframeOptions.root.style,{verticalAlign:"bottom",overflow:""}),d("sdk.PluginUtils").resize(g._iframeOptions.root,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),d("sdk.PluginUtils").resize(g._iframe,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),g._isIframeResized=!0,g.updateLift(),window.clearTimeout(g._timeoutID)});this.subscribe("xd.resize.iframe",function(a){d("sdk.PluginUtils").resize(g._iframe,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),g._isIframeResized=!0,g.updateLift(),window.clearTimeout(g._timeoutID)});this.subscribe("xd.sdk_event",function(b){var c=ES("JSON","parse",!1,b.data);c.pluginID=h;d("sdk.Event").fire(b.event,c,a)});var i=d("UrlMap").resolve("www")+"/plugins/"+e+".php?",j={};d("sdk.PluginUtils").validate(this.getParams(),a,f,j);d("sdk.PluginUtils").validate(d("sdk.PluginUtils").baseParams,a,f,j);ES("Object","assign",!1,j,{app_id:c("sdk.Runtime").getClientID(),locale:c("sdk.Runtime").getLocale(),sdk:"joey",kid_directed_site:c("sdk.Runtime").getKidDirectedSite(),channel:d("sdk.XD").handler(function(a){a!=null&&g.inform("xd."+a.type,a)},"parent.parent",!0)});this.shouldIgnoreWidth()&&(j.width=void 0);j.container_width=a.offsetWidth;d("sdk.DOM").addCss(a,"fb_iframe_widget");var k=c("guid")();this.subscribe("xd.verify",function(a){d("sdk.XD").sendToFacebook(k,{method:"xd/verify",params:ES("JSON","stringify",!1,a.token)})});this.subscribe("xd.refreshLoginStatus",function(){d("sdk.AuthUtils").removeLogoutState(),c("sdk.Auth.LoginStatus").getLoginStatus(ES(g.inform,"bind",!0,g,"login.status"),!0)});f=document.createElement("span");ES("Object","assign",!1,f.style,{verticalAlign:"top",width:j.lazy?"1px":"0px",height:j.lazy?"1px":"0px",overflow:"hidden"});this._element=a;this._ns=b;this._tag=e;this._params=j;this._config=this.getConfig();this._iframeOptions={root:f,url:i+c("QueryString").encode(j),name:k,width:this._config.mobile_fullsize&&c("sdk.UA").mobile()?void 0:j.width||1e3,height:j.height||1e3,style:{border:"none",visibility:"hidden"},title:this._ns+":"+this._tag+" Facebook Social Plugin",testid:this._ns+":"+this._tag+" Facebook Social Plugin",onload:function(){return g.inform("render")},onerror:function(){return d("sdk.PluginUtils").collapseIframe(g._iframe)},lazy:j.lazy};this.isFluid()&&j.width!=="auto"&&(d("sdk.DOM").addCss(this._element,"fb_iframe_widget_fluid_desktop"),!j.width&&this._config.full_width&&(this._element.style.width="100%",this._iframeOptions.root.style.width="100%",this._iframeOptions.style.width="100%",this._params.container_width=this._element.offsetWidth,this._iframeOptions.url=i+c("QueryString").encode(this._params)))},shouldIgnoreWidth:function(){return c("sdk.UA").mobile()&&this.getConfig().mobile_fullsize},useInlineHeightForMobile:function(){return!0},process:function(){var a=this;if(c("sdk.Runtime").getIsVersioned()){d("sdk.PlatformVersioning").assertVersionIsSet();var b=new(c("sdk.URI"))(this._iframeOptions.url);this._iframeOptions.url=b.setPath("/"+c("sdk.Runtime").getVersion()+b.getPath()).toString()}b=babelHelpers["extends"]({},this._params);delete b.channel;var e=c("QueryString").encode(b);if(this._element.getAttribute("fb-iframe-plugin-query")==e){d("Log").info("Skipping render: %s:%s %s",this._ns,this._tag,e);this.inform("render");return}this._element.setAttribute("fb-iframe-plugin-query",e);this.subscribe("render",function(){d("sdk.Event").fire("iframeplugin:onload"),a._iframe.style.visibility="visible",a._isIframeResized||d("sdk.PluginUtils").collapseIframe(a._iframe)});while(this._element.firstChild)this._element.removeChild(this._element.firstChild);this._element.appendChild(this._iframeOptions.root);var f=c("sdk.UA").mobile()?120:45;this._timeoutID=window.setTimeout(function(){d("sdk.PluginUtils").collapseIframe(a._iframe),d("Log").warn("%s:%s failed to resize in %ss",a._ns,a._tag,f)},f*1e3);this._iframe=c("sdk.createIframe")(this._iframeOptions);d("sdk.Event").fire("iframeplugin:create");if(c("sdk.UA").mobile()||b.width==="auto"){this.useInlineHeightForMobile()&&d("sdk.DOM").addCss(this._element,"fb_iframe_widget_fluid");if(!this._iframeOptions.width){ES("Object","assign",!1,this._element.style,{display:"block",width:"100%",height:"auto"});ES("Object","assign",!1,this._iframeOptions.root.style,{width:"100%",height:"auto"});e={height:"auto",position:"static",width:"100%"};(c("sdk.UA").iphone()||c("sdk.UA").ipad())&&ES("Object","assign",!1,e,{width:"220px","min-width":"100%"});ES("Object","assign",!1,this._iframe.style,e)}}},getConfig:function(){return{}},isFluid:function(){var a=this.getConfig();return a.fluid},updateLift:function(){var a=this._iframe.style.width===this._iframeOptions.root.style.width&&this._iframe.style.height===this._iframeOptions.root.style.height;d("sdk.DOM")[a?"removeCss":"addCss"](this._iframe,"fb_iframe_widget_lift")}},c("ObservableMixin"));h.withParams=function(a,b){return h.extend({getParams:function(){return a},getConfig:function(){return b?b:{}}})};a=h;g["default"]=a}),98); +__d("PluginConfig",["sdk.feature"],(function(a,b,c,d,e,f,g){a={mobile_fullsize:!0};b={mobile_fullsize:!0};d={mobile_fullsize:!0};e={mobile_fullsize:!0};f={mobile_fullsize:!0};c={fluid:c("sdk.feature")("fluid_embed",!1),mobile_fullsize:!0};a={comment_embed:a,messengerpreconfirmation:b,messengeraccountconfirmation:d,messengerbusinesslink:e,messengertoggle:f,post:c};b=a;g["default"]=b}),98); +__d("PluginAttrTypes",[],(function(a,b,c,d,e,f){"use strict";a="string";b="bool";c="url";f.string=a;f.bool=b;f.url=c}),66); +__d("PluginTags",["PluginAttrTypes"],(function(a,b,c,d,e,f,g){var h={ad_library_spend_tracker:{country:d("PluginAttrTypes").string,time_preset:d("PluginAttrTypes").string,custom_start_date:d("PluginAttrTypes").string,custom_end_date:d("PluginAttrTypes").string,race_type:d("PluginAttrTypes").string,state:d("PluginAttrTypes").string,district:d("PluginAttrTypes").string,page_ids:d("PluginAttrTypes").string,include_vps:d("PluginAttrTypes").bool},comment_embed:{href:d("PluginAttrTypes").url,include_parent:d("PluginAttrTypes").bool},composer:{action_type:d("PluginAttrTypes").string,action_properties:d("PluginAttrTypes").string},create_event_button:{},group:{href:d("PluginAttrTypes").url,show_social_context:d("PluginAttrTypes").bool,show_group_info:d("PluginAttrTypes").bool,show_metadata:d("PluginAttrTypes").bool},like:{href:d("PluginAttrTypes").url,layout:d("PluginAttrTypes").string,show_faces:d("PluginAttrTypes").bool,share:d("PluginAttrTypes").bool,action:d("PluginAttrTypes").string,send:d("PluginAttrTypes").bool,size:d("PluginAttrTypes").string},like_box:{href:d("PluginAttrTypes").string,show_faces:d("PluginAttrTypes").bool,header:d("PluginAttrTypes").bool,stream:d("PluginAttrTypes").bool,force_wall:d("PluginAttrTypes").bool,show_border:d("PluginAttrTypes").bool,id:d("PluginAttrTypes").string,connections:d("PluginAttrTypes").string,profile_id:d("PluginAttrTypes").string,name:d("PluginAttrTypes").string},page:{href:d("PluginAttrTypes").string,hide_cta:d("PluginAttrTypes").bool,hide_cover:d("PluginAttrTypes").bool,small_header:d("PluginAttrTypes").bool,adapt_container_width:d("PluginAttrTypes").bool,show_facepile:d("PluginAttrTypes").bool,show_posts:d("PluginAttrTypes").bool,tabs:d("PluginAttrTypes").string},page_events:{href:d("PluginAttrTypes").url},post:{href:d("PluginAttrTypes").url,show_text:d("PluginAttrTypes").bool},profile_pic:{uid:d("PluginAttrTypes").string,linked:d("PluginAttrTypes").bool,href:d("PluginAttrTypes").string,size:d("PluginAttrTypes").string,facebook_logo:d("PluginAttrTypes").bool},send_to_mobile:{max_rows:d("PluginAttrTypes").string,show_faces:d("PluginAttrTypes").bool,size:d("PluginAttrTypes").string}},i={fan:"like_box",likebox:"like_box"};Object.keys(i).forEach(function(a){h[a]=h[i[a]]});a=h;g["default"]=a}),98); +__d("runOnce",[],(function(a,b,c,d,e,f){function a(a){var b=!1,c;return function(){b||(b=!0,c=a());return c}}f["default"]=a}),66); +__d("XFBML",["Assert","Log","runOnce","sdk.Observable"],(function(a,b,c,d,e,f,g){var h={},i={},j=0,k=new(d("sdk.Observable").Observable)();function l(a,b){return(a[b]+"").trim()}function m(a){return h[l(a,"nodeName").toLowerCase()]}function n(a){var b=l(a,"className").split(/\s+/).filter(function(a){return Object.prototype.hasOwnProperty.call(i,a)});if(b.length===0)return void 0;if(a.getAttribute("fb-xfbml-state")||!a.childNodes||a.childNodes.length===0||a.childNodes.length===1&&a.childNodes[0].nodeType===3||a.children.length===1&&l(a.children[0],"className")==="fb-xfbml-parse-ignore")return i[b[0]]}function o(a){var b={};ES("Array","from",!1,a.attributes).forEach(function(a){b[l(a,"name")]=l(a,"value")});return b}function p(a,b,e){c("Assert").isTrue(a&&a.nodeType&&a.nodeType===1&&!!a.getElementsByTagName,"Invalid DOM node passed to FB.XFBML.parse()");c("Assert").isFunction(b,"Invalid callback passed to FB.XFBML.parse()");if(a==null)return;var f=++j;d("Log").info("XFBML Parsing Start %s",f);var g=1,h=0,i=function(){g--,g===0&&(d("Log").info("XFBML Parsing Finish %s, %s tags found",f,h),b!=null&&b(),k.inform("render",[f,h])),c("Assert").isTrue(g>=0,"onrender() has been called too many times")};ES("Array","from",!1,a.getElementsByTagName("*")).forEach(function(a){if(e!==!0&&a.getAttribute("fb-xfbml-state"))return;if(a.nodeType!==1)return;var b=m(a)||n(a);if(b==null)return;g++;h++;var d=new b.ctor(a,b.xmlns,b.localName,o(a));d.subscribe("render",c("runOnce")(function(){a.setAttribute("fb-xfbml-state","rendered"),i()}));b=function b(){a.getAttribute("fb-xfbml-state")=="parsed"?k.subscribe("render.queue",b):(a.setAttribute("fb-xfbml-state","parsed"),d.process())};b()});k.inform("parse",[f,h]);var l=3e4;window.setTimeout(function(){g>0&&d("Log").warn("%s tags failed to render in %s ms",g,l)},l);i()}k.subscribe("render",function(){var a=k.getSubscribers("render.queue");k.clearSubscribers("render.queue");a.forEach(function(a){a([])})});a={registerTag:function(a){var b=a.xmlns+":"+a.localName;if(b==="fb:customerchat"&&h[b]!=null)return;c("Assert").isUndefined(h[b],b+" already registered");h[b]=a;i[a.xmlns+"-"+a.localName]=a},parse:function(a,b){p((a=a)!=null?a:document.body,(a=b)!=null?a:function(){},!0)},parseNew:function(){p(document.body,function(){},!1)},subscribe:k.subscribe,unsubscribe:k.unsubscribe};b=a;g["default"]=b}),98); +__d("sdk.XFBML.Comments",["IframePlugin","QueryString","UrlMap","sdk.DOM","sdk.Event","sdk.PluginUtils","sdk.Runtime","sdk.UA","sdk.URI"],(function(a,b,c,d,e,f,g){var h=320,i=babelHelpers["extends"]({numposts:"string",href:"url",permalink:"bool",order_by:"string",mobile:"bool",version:"string",hide_post_profile:"bool",limit:"string",offset:"string",view:"string",fb_comment_id:"string",from_mod_tool:"bool",migrated:"string",xid:"string",title:"string",url:"string",quiet:"string",reverse:"string",simple:"string",css:"string",notify:"string",count:"bool",skin:"string",font:"string",width:"string",height:"px",ref:"string",lazy:"bool",color_scheme:"string"},d("sdk.PluginUtils").baseParams);function j(a,b){Object.keys(i).forEach(function(c){var e=d("sdk.DOM").getAttr(a,c);e!==null&&(b[c]=e)});Object.keys(b).forEach(function(a){ES(a,"startsWith",!0,"data-")&&delete b[a]});c("sdk.UA").mobile()&&b.mobile!==!1&&(b.mobile=!0);b.skin||(b.skin=b.colorscheme);if(!b.href){b.title=b.title||document.title;b.url=b.url||document.URL;if(!b.xid){var e=document.URL.indexOf("#");e>0?b.xid=encodeURIComponent(document.URL.substring(0,e)):b.xid=encodeURIComponent(document.URL)}b.migrated&&(b.href=d("UrlMap").resolve("www")+"/plugins/comments_v1.php?app_id="+c("sdk.Runtime").getClientID()+"&xid="+encodeURIComponent(b.xid)+"&url="+encodeURIComponent(b.url))}else{e=b.fb_comment_id;e||(e=c("QueryString").decode(document.URL.substring(document.URL.indexOf("?")+1)).fb_comment_id,e&&e.indexOf("#")>0&&(e=e.substring(0,e.indexOf("#"))));e&&(b.fb_comment_id=e)}b.version||(b.version=c("sdk.Runtime").getVersion());b.permalink||(b.width=b.mobile||b.width==="auto"||b.width==="100%"?"":b.width?Math.max(b.width,h):550,b.height=100);if(b.href!=null){e=new(c("sdk.URI"))(b.href);e.getProtocol()||(b.href=e.setProtocol("http").toString())}return b}a=c("IframePlugin").extend({constructor:function(a,b,c,e){e=j(a,e),this.parent(a,b,c,e),this.subscribe("xd.sdk_event",function(a){d("sdk.Event").fire(a.event,ES("JSON","parse",!1,a.data))})},getConfig:function(){return{fluid:!0,full_width:!0}},getParams:function(){return i}});b=a;g["default"]=b}),98); +__d("sdk.XFBML.CommentsCount",["sdk.DOM","sdk.XFBML.Comments","sprintf"],(function(a,b,c,d,e,f,g){a=c("sdk.XFBML.Comments").extend({constructor:function(a,b,e,f){d("sdk.DOM").addCss(a,"fb_comments_count_zero"),f.count=1,this.parent(a,b,"comments",f),this.subscribe("xd.comment_count",function(b){b=ES("JSON","parse",!1,b.data);d("sdk.DOM").html(a,c("sprintf")('%s',b.count));b.count>0&&d("sdk.DOM").removeCss(a,"fb_comments_count_zero");d("sdk.DOM").removeCss(a,"fb_iframe_widget")})}});b=a;g["default"]=b}),98); +__d("$InternalEnum",[],(function(a,b,c,d,e,f){"use strict";var g=Object.prototype.hasOwnProperty,h=typeof WeakMap==="function"?new WeakMap():new Map();function i(a){var b=h.get(a);if(b!==void 0)return b;var c=new Map();Object.getOwnPropertyNames(a).forEach(function(b){c.set(a[b],b)});try{h.set(a,c)}catch(a){}return c}var j=Object.freeze(Object.defineProperties(Object.create(null),{isValid:{value:function(a){return i(this).has(a)}},cast:{value:function(a){return this.isValid(a)?a:void 0}},members:{value:function(){return i(this).keys()}},getName:{value:function(a){return i(this).get(a)}}}));function a(a){var b=Object.create(j);for(var c in a)g.call(a,c)&&Object.defineProperty(b,c,{value:a[c]});return Object.freeze(b)}var k=Object.freeze(Object.defineProperties(Object.create(null),{isValid:{value:function(a){return typeof a==="string"?g.call(this,a):!1}},cast:{value:j.cast},members:{value:function(){return Object.getOwnPropertyNames(this).values()}},getName:{value:function(a){return a}}}));a.Mirrored=function(a){var b=Object.create(k);for(var c=0,d=a.length;c0){var e=o(d);a.setTimeout(function(){return x(e)},c.timeout)}return o(d)}function q(a){a=p(a);h[a]=null}function r(){l||(l=!0,c("requestAnimationFramePolyfill")(function(a){l=!1,t(c("performanceNow")()-a)}))}function s(a){var b=m-n;if(ab||ak){a=s(a);if(a>0){b=b+a;w(b);k=b}}u()&&r()}function u(){return ia.$1){a.$3();return}var h=Date.now();if(h-b>a.$2){a.$3();return}h=g.timeRemaining();e+=h>=49&&f>=49?h:0;f=h;c(d)};return c(g)};b.isBrowserCompatible=function(){return typeof window==="undefined"?!1:typeof window.requestIdleCallback==="function"};return a}();g["default"]=a}),98); +__d("uuid",[],(function(a,b,c,d,e,f){"use strict";function a(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=Math.random()*16|0;a=a=="x"?b:b&3|8;return a.toString(16)})}f["default"]=a}),66); +__d("sdk.XFBML.ChatDOM",["$InternalEnum","CORSRequest","ChatPluginEntryPointIconEnum","ChatPluginEntryPointLabelEnum","ChatPluginEntryPointSizeEnum","ChatPluginSDKPreLoggingUtils","ChatPluginStyleUtils","DOMPlugin","Log","UrlMap","getJSEnumSafe","performanceAbsoluteNow","sdk.Content","sdk.DOM","sdk.IdleCallback","sdk.XFBML.CustomerChatNew","sdk.fbt","sdk.feature","uuid"],(function(a,b,c,d,e,f,g){"use strict";var h=b("$InternalEnum").Mirrored(["WAITING","LOADING","LOADED"]);a=function(a){babelHelpers.inheritsLoose(b,a);function b(b,e,f,g){var i;i=a.call(this,b,e,f,g,{allow_guests:"bool",attribution:"string",greeting_dialog_display:"string",greeting_dialog_delay:"string",logged_in_greeting:"string",logged_out_greeting:"string",minimized:"bool",page_id:"string",theme_color:"string",override:"string",attribution_version:"string",is_loaded_by_facade:"bool"})||this;e=c("performanceAbsoluteNow")();f=c("uuid")();var j=window.location.href;ES("Object","assign",!1,i.params,{current_url:j,log_id:f,request_time:e,is_loaded_by_facade:!0,should_use_new_domain:g.should_use_new_domain});d("ChatPluginSDKPreLoggingUtils").preLogging(Boolean(g.should_use_new_domain),"chat_plugin_sdk_facade_create",i.params,!1);d("sdk.DOM").remove(b);d("sdk.Content").append(b);i.$ChatDOMFacade3=document.createElement("div");i.$ChatDOMFacade1=h.WAITING;i.$ChatDOMFacade2=!1;i.$ChatDOMFacade6=!1;i.$ChatDOMFacade8="standard";i.$ChatDOMFacade9="none";i.$ChatDOMFacade10="none";i.$ChatDOMFacade11="left";i.$ChatDOMFacade12=0;i.$ChatDOMFacade13=0;i.$ChatDOMFacade14=!1;i.$ChatDOMFacade15=Boolean(g.should_use_new_domain);i.shadowCss=["css:fb.shadow.css.chatdom"];i.$ChatDOMFacade4=c("performanceAbsoluteNow")();d("Log").info("facadeperf: Started browser idle loader.");i.$ChatDOMFacade5=new(c("sdk.IdleCallback"))(c("sdk.feature")("chat_plugin_facade_timeout_ms",8e3),function(){var a=c("performanceAbsoluteNow")();d("Log").info("facadeperf: Idle callback starts full load in %sms.",a-i.$ChatDOMFacade4);i.$ChatDOMFacade16(!1,!1)}).start();return i}var e=b.prototype;e.render=function(a){var b=this;this.$ChatDOMFacade3.classList.add("container");a=this.$ChatDOMFacade15?d("UrlMap").resolve("social_plugin")+"/customer_chat/facade/":d("UrlMap").resolve("www")+"/plugins/customer_chat/facade/";c("CORSRequest").execute(a,"get",this.params,function(a){var e,f=c("performanceAbsoluteNow")();d("Log").info("facadeperf: CORS request completed in %sms.",f-b.$ChatDOMFacade4);if(a.error)return;b.$ChatDOMFacade11=a.alignment;b.$ChatDOMFacade12=a.bottom_spacing;b.$ChatDOMFacade13=a.side_spacing;f=a.theme_color;b.$ChatDOMFacade8=(e=c("getJSEnumSafe")(c("ChatPluginEntryPointSizeEnum"),(e=a.entry_point_size)==null?void 0:e.toUpperCase()))!=null?e:"standard";b.$ChatDOMFacade9=(e=c("ChatPluginEntryPointLabelEnum").cast(a.entry_point_label))!=null?e:"none";b.$ChatDOMFacade10=(e=c("ChatPluginEntryPointIconEnum").cast(a.entry_point_icon_enum))!=null?e:"none";b.$ChatDOMFacade14=a.away_hours_enabled&&!a.is_page_away;if(b.$ChatDOMFacade9==="none"){e=document.createElement("div");d("sdk.DOM").html(e,a.entry_point_icon_svg);e=e==null?void 0:e.outerHTML;d("sdk.DOM").html(b.$ChatDOMFacade3,e)}else{e=a.entry_point_icon_svg;d("sdk.DOM").html(b.$ChatDOMFacade3,b.$ChatDOMFacade17(e))}e=d("ChatPluginStyleUtils").getEntryPointStyle(a.alignment,a.bottom_spacing,a.side_spacing,!1,!0,a.entry_point_label,b.$ChatDOMFacade8);ES("Object","assign",!1,b.$ChatDOMFacade3.style,e);b.$ChatDOMFacade3.style.backgroundColor=f;if(b.$ChatDOMFacade14){e=d("ChatPluginStyleUtils").getAvailabilityStatusStyleText(a.alignment,a.bottom_spacing,a.side_spacing,a.entry_point_label,a.entry_point_icon_enum,b.$ChatDOMFacade8,!1,!0);f=document.createElement("div");ES("Object","assign",!1,f.style,e);b.$ChatDOMFacade3.append(f)}d("ChatPluginSDKPreLoggingUtils").preLogging(b.$ChatDOMFacade15,"chat_plugin_sdk_facade_load",b.params)});this.$ChatDOMFacade3.addEventListener("click",function(a){b.$ChatDOMFacade16(!0,!0)});return this.$ChatDOMFacade3};e.$ChatDOMFacade18=function(a){switch(a){case"chat":return c("sdk.fbt")._("Chat");case"help":return c("sdk.fbt")._("Ayuda");case"ask_us":return c("sdk.fbt")._("Preg\u00fantanos");case"none":return""}};e.$ChatDOMFacade19=function(){var a;(a=this.element.parentNode)==null?void 0:a.removeChild(this.element)};e.$ChatDOMFacade20=function(){if(this.$ChatDOMFacade2||this.$ChatDOMFacade1===h.LOADED)return;if(this.$ChatDOMFacade9==="none"){var a=this.$ChatDOMFacade8==="compact"?24:36;a=this.$ChatDOMFacade21(a);d("sdk.DOM").html(this.$ChatDOMFacade3,'\n
        \n '+a+"\n
        \n ")}else{a=this.$ChatDOMFacade8==="compact"?20:24;a=this.$ChatDOMFacade21(a);if(this.$ChatDOMFacade10==="none"){var b=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_ICON_MARGIN_RIGHT:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_ICON_MARGIN_RIGHT;d("sdk.DOM").html(this.$ChatDOMFacade3.children[0],this.$ChatDOMFacade22(b,a)+this.$ChatDOMFacade3.children[0].innerHTML);if(this.$ChatDOMFacade14){b=d("ChatPluginStyleUtils").getAvailabilityStatusStyleText(this.$ChatDOMFacade11,this.$ChatDOMFacade12,this.$ChatDOMFacade13,this.$ChatDOMFacade9,"chat_round_icon",this.$ChatDOMFacade8,!1,!1);var c=document.createElement("div");ES("Object","assign",!1,c.style,b);d("sdk.DOM").remove(this.$ChatDOMFacade3.children[1]);this.$ChatDOMFacade3.append(c)}}else d("sdk.DOM").html(this.$ChatDOMFacade3.children[0].children[0],a)}this.$ChatDOMFacade2=!0};e.$ChatDOMFacade17=function(a){var b=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_HEIGHT:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_HEIGHT,c=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_FONT_SIZE:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_FONT_SIZE,e=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_LINE_HEIGHT:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_LINE_HEIGHT,f=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_ICON_MARGIN_RIGHT:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_ICON_MARGIN_RIGHT,g=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_PADDING_HORIZONTAL:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_PADDING_HORIZONTAL;return'\n
        \n '+(a&&'\n
        \n '+a+"\n
        \n ")+'\n '+this.$ChatDOMFacade18(this.$ChatDOMFacade9).toString()+"
        \n \n "};e.$ChatDOMFacade22=function(a,b){return'\n
        \n '+b+"\n
        \n "};e.$ChatDOMFacade21=function(a){return'\n \n \n \n '};e.$ChatDOMFacade23=function(a){if(a&&this.$ChatDOMFacade7&&!this.$ChatDOMFacade6){this.$ChatDOMFacade6=!0;var b=this.$ChatDOMFacade7;b.subscribe("iframes_loaded",function(a){b.showDialog()})}};e.$ChatDOMFacade16=function(a,b){var e=this;b&&this.$ChatDOMFacade20();this.$ChatDOMFacade23(a);if(this.$ChatDOMFacade1!==h.WAITING)return;this.$ChatDOMFacade1=h.LOADING;b=document.createElement("div");d("sdk.Content").append(b,this.element);b=new(c("sdk.XFBML.CustomerChatNew"))(b,"fb","customerchat",this.params);this.$ChatDOMFacade7=b;b.subscribe("xd.mpn.setupIconIframe",function(a){e.$ChatDOMFacade1=h.LOADED,e.$ChatDOMFacade19()});this.$ChatDOMFacade23(a);b.process()};return b}(d("DOMPlugin").DOMPlugin);g["default"]=a}),98); +__d("IframePluginClass",["Log","QueryString","UrlMap","guid","sdk.Auth.LoginStatus","sdk.AuthUtils","sdk.DOM","sdk.Event","sdk.Observable","sdk.PlatformVersioning","sdk.PluginUtils","sdk.Runtime","sdk.UA","sdk.URI","sdk.XD","sdk.createIframe"],(function(a,b,c,d,e,f,g){a=function(a){babelHelpers.inheritsLoose(b,a);function b(b,e,f,g,h){var i;h===void 0&&(h=null);i=a.call(this)||this;f=f.replace(/-/g,"_");i.$IframePluginClass2=!1;i.config=h!=null?h:{fluid:!1,mobile_fullsize:!1,full_width:!1};var j=d("sdk.PluginUtils").getVal(g,"plugin_id");i.subscribe("xd.resize",d("sdk.PluginUtils").resizeBubbler(j));i.subscribe("xd.resize.flow",d("sdk.PluginUtils").resizeBubbler(j));i.subscribe("xd.resize.flow",function(a){ES("Object","assign",!1,i.iframeOptions.root.style,{verticalAlign:"bottom",overflow:""}),d("sdk.PluginUtils").resize(i.iframeOptions.root,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),i.updateLift(),window.clearTimeout(i.$IframePluginClass1)});i.subscribe("xd.resize",function(a){ES("Object","assign",!1,i.iframeOptions.root.style,{verticalAlign:"bottom",overflow:""}),d("sdk.PluginUtils").resize(i.iframeOptions.root,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),d("sdk.PluginUtils").resize(i.iframe,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),i.$IframePluginClass2=!0,i.updateLift(),window.clearTimeout(i.$IframePluginClass1)});i.subscribe("xd.resize.iframe",function(a){d("sdk.PluginUtils").resize(i.iframe,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),i.$IframePluginClass2=!0,i.updateLift(),window.clearTimeout(i.$IframePluginClass1)});i.subscribe("xd.sdk_event",function(a){var c=ES("JSON","parse",!1,a.data);c.pluginID=j;d("sdk.Event").fire(a.event,c,b)});h=g.should_use_new_domain?d("UrlMap").resolve("social_plugin")+"/"+f+".php?":d("UrlMap").resolve("www")+"/plugins/"+f+".php?";var k={};d("sdk.PluginUtils").validate(i.getParams(),b,g,k);d("sdk.PluginUtils").validate(d("sdk.PluginUtils").baseParams,b,g,k);ES("Object","assign",!1,k,{app_id:c("sdk.Runtime").getClientID(),locale:c("sdk.Runtime").getLocale(),sdk:"joey",kid_directed_site:c("sdk.Runtime").getKidDirectedSite(),channel:d("sdk.XD").handler(function(a){a!=null&&i.inform("xd."+a.type,a)},"parent.parent",!0)});i.shouldIgnoreWidth()&&(k.width=void 0);k.container_width=b.offsetWidth;d("sdk.DOM").addCss(b,"fb_iframe_widget");var l=c("guid")();i.subscribe("xd.verify",function(a){d("sdk.XD").sendToFacebook(l,{method:"xd/verify",params:ES("JSON","stringify",!1,a.token)})});i.subscribe("xd.refreshLoginStatus",function(){d("sdk.AuthUtils").removeLogoutState(),c("sdk.Auth.LoginStatus").getLoginStatus(ES(i.inform,"bind",!0,babelHelpers.assertThisInitialized(i),"login.status"),!0)});g=document.createElement("span");ES("Object","assign",!1,g.style,{verticalAlign:"top",width:k.lazy?"1px":"0px",height:k.lazy?"1px":"0px",overflow:"hidden"});i.element=b;i.ns=e;i.tag=f;i.params=k;i.iframeOptions={root:g,url:h+c("QueryString").encode(k),name:l,width:i.config.mobile_fullsize&&c("sdk.UA").mobile()?void 0:k.width||1e3,height:k.height||1e3,style:{border:"none",visibility:"hidden"},title:i.ns+":"+i.tag+" Facebook Social Plugin",testid:i.ns+":"+i.tag+" Facebook Social Plugin",onload:function(){return i.inform("render")},onerror:function(){return d("sdk.PluginUtils").collapseIframe(i.iframe)},lazy:k.lazy};i.config.fluid&&k.width!=="auto"&&(d("sdk.DOM").addCss(i.element,"fbiframe_widget_fluid_desktop"),!k.width&&i.config.full_width&&(i.element.style.width="100%",i.iframeOptions.root.style.width="100%",i.iframeOptions.style.width="100%",i.params.container_width=i.element.offsetWidth,i.iframeOptions.url=h+c("QueryString").encode(i.params)));return i}var e=b.prototype;e.shouldIgnoreWidth=function(){return c("sdk.UA").mobile()&&this.config.mobile_fullsize};e.useInlineHeightForMobile=function(){return!0};e.process=function(){var a=this;if(c("sdk.Runtime").getIsVersioned()){d("sdk.PlatformVersioning").assertVersionIsSet();var b=new(c("sdk.URI"))(this.iframeOptions.url);this.iframeOptions.url=b.setPath("/"+c("sdk.Runtime").getVersion()+b.getPath()).toString()}b=babelHelpers["extends"]({},this.params);delete b.channel;var e=c("QueryString").encode(b);if(this.element.getAttribute("fb-iframe-plugin-query")==e){d("Log").info("Skipping render: %s:%s %s",this.ns,this.tag,e);this.inform("render");return}this.element.setAttribute("fb-iframe-plugin-query",e);this.subscribe("render",function(){d("sdk.Event").fire("iframeplugin:onload"),a.iframe.style.visibility="visible",a.$IframePluginClass2||d("sdk.PluginUtils").collapseIframe(a.iframe)});while(this.element.firstChild)this.element.removeChild(this.element.firstChild);this.element.appendChild(this.iframeOptions.root);var f=c("sdk.UA").mobile()?120:45;this.$IframePluginClass1=window.setTimeout(function(){d("sdk.PluginUtils").collapseIframe(a.iframe),d("Log").warn("%s:%s failed to resize in %ss",a.ns,a.tag,f)},f*1e3);this.iframe=c("sdk.createIframe")(this.iframeOptions);d("sdk.Event").fire("iframeplugin:create");if(c("sdk.UA").mobile()||b.width==="auto"){this.useInlineHeightForMobile()&&d("sdk.DOM").addCss(this.element,"fbiframe_widget_fluid");if(!this.iframeOptions.width){ES("Object","assign",!1,this.element.style,{display:"block",width:"100%",height:"auto"});ES("Object","assign",!1,this.iframeOptions.root.style,{width:"100%",height:"auto"});e={height:"auto",position:"static",width:"100%"};(c("sdk.UA").iphone()||c("sdk.UA").ipad())&&ES("Object","assign",!1,e,{width:"220px",minWidth:"100%"});ES("Object","assign",!1,this.iframe.style,e)}}};e.getParams=function(){return this.params};e.updateLift=function(){var a=this.iframe.style.width===this.iframeOptions.root.style.width&&this.iframe.style.height===this.iframeOptions.root.style.height;(a?d("sdk.DOM").removeCss:d("sdk.DOM").addCss)(this.iframe,"fbiframe_widget_lift")};return b}(d("sdk.Observable").Observable);g["default"]=a}),98); +__d("MPNExplicitUserInteractions",[],(function(a,b,c,d,e,f){"use strict";var g=36e5;function a(a){return a==null?!1:Date.now()<=a+g}f.hasUserInteraction=a}),66); +__d("MPNLocalState",[],(function(a,b,c,d,e,f){"use strict";a={LANDING_BANNER:1,WELCOME_PAGE:2,ITP_CONTINUE:3,THREAD_VIEW:4,BUBBLE:5,REENGAGEMENT_COLLAPSED_VIEW:6,REENGAGEMENT_EXPANDED_VIEW:7};b={CHAT_NOT_STARTED:1,LOGGED_IN_CHAT_STARTED:2,GUEST_CHAT_STARTED:3};c="__fb_chat_plugin";f.MPNLocalStatePath=a;f.MPNChatState=b;f.LOCAL_STATE_KEY=c}),66); +__d("getFacebookOriginForTarget",["Log"],(function(a,b,c,d,e,f,g){function a(a,b){b===void 0&&(b=top);var c=0,e=!1,f=200;window.addEventListener("message",function(c){c.source===b&&c.data.xdArbiterAck&&(/\.facebook\.(com|net)$/.test(c.origin)&&/^https:/.test(c.origin)?e===!1&&(e=!0,d("Log").debug("initXdArbiter got xdArbiterAck from "+c.origin),a(c.origin)):d("Log").error("xdAbiterAck was not from Facebook: ",c.origin))},!1);b.postMessage({xdArbiterSyn:!0},"*");c=window.setInterval(function(){!e&&f>0?(f--,d("Log").debug("resending xdArbiterSyn"),b.postMessage({xdArbiterSyn:!0},"*")):window.clearInterval(c)},200)}g["default"]=a}),98); +__d("MPNSingletonProvider",[],(function(a,b,c,d,e,f){"use strict";a=function(){function a(a){this.$1=null,this.$2=a}var b=a.prototype;b.get=function(){this.$1==null&&(this.$1=this.$2());return this.$1};b.clear=function(){this.$1=null};return a}();f["default"]=a}),66); +__d("sdk.DocumentTitle",[],(function(a,b,c,d,e,f){var g=document.title,h=null,i=1500,j=null,k=!1;function l(){h!==null?!k?m(h):n():(clearInterval(j),j=null,n())}function m(a){document.title=a,k=!0}function n(){o(g),k=!1}function a(){return g}function o(a){document.title=a}function b(a){h=a;j===null&&(j=setInterval(l,i));return{stop:function(){h=null}}}f.get=a;f.set=o;f.blink=b}),66); +__d("sdk.cp.Constants",["MPNLocalState","UrlMap","sdk.Runtime"],(function(a,b,c,d,e,f,g){"use strict";a=c("sdk.Runtime").getIsVersioned()?d("UrlMap").resolve("www")+"/"+c("sdk.Runtime").getVersion()+"/plugins/customer_chat/bubble":d("UrlMap").resolve("www")+"/plugins/customer_chat/bubble";b=c("sdk.Runtime").getIsVersioned()?d("UrlMap").resolve("social_plugin")+"/"+c("sdk.Runtime").getVersion()+"/customer_chat/bubble":d("UrlMap").resolve("social_plugin")+"/customer_chat/bubble";e={attribute:{alignment:"alignment",mobilePath:"mobile_path",desktopBottomSpacing:"desktop_bottom_spacing"},path:{landingPage:"/",welcomePage:"/welcome",bubble:"/bubble",itp:"/itpcontinue"},localStateKey:d("MPNLocalState").LOCAL_STATE_KEY,animationEvents:["animationend","mozAnimationEnd","MSAnimationEnd","oAnimationEnd","webkitAnimationEnd"],blankFrameURL:a,blankFrameNewDomainURL:b};g["default"]=e}),98); +__d("sdk.cp.Actions",["DOMEventListener","MPNExplicitUserInteractions","MPNLocalState","MPNSingletonProvider","sdk.DOM","sdk.DocumentTitle","sdk.URI","sdk.WebStorage","sdk.cp.Constants"],(function(a,b,c,d,e,f,g){"use strict";var h=function(){function a(){}var b=a.prototype;b.reloadIframe=function(a,b){var e;if(a==null)return;var f=new(c("sdk.URI"))(a.src),g=f.getQueryData();g.local_state=(e=d("sdk.WebStorage").getLocalStorage())==null?void 0:e.getItem(c("sdk.cp.Constants").localStateKey);g.request_time=Date.now();(b==="true"||this.getExplicitUserInteractionFlag())&&(g.has_explicit_interaction="1");g.is_implicit_reload="1";f.setQueryData(g);a.src=f.valueOf()};b.getExplicitUserInteractionFlag=function(){var a=d("sdk.WebStorage").getLocalStorage(),b=null;if(a!=null)try{b=a.getItem(d("MPNLocalState").LOCAL_STATE_KEY)}catch(a){return!1}if(b!=null)try{a=ES("JSON","parse",!1,b);return d("MPNExplicitUserInteractions").hasUserInteraction(a==null?void 0:a.euit)}catch(a){return!1}return!1};b.setDialogAppearance=function(a,b){if(a==null)return;var c=b.height,e=b.boxShadow,f=b.margin,g=b.width;b=b.bottom;e!=null&&d("sdk.DOM").setStyle(a,"boxShadow",e);f!=null&&d("sdk.DOM").setStyle(a,"margin",f);c!=null&&d("sdk.DOM").setStyle(a,"height",c);g!=null&&d("sdk.DOM").setStyle(a,"width",g);b!=null&&d("sdk.DOM").setStyle(a,"bottom",b)};b.blinkPageTitle=function(a){var b=this;a!=null?(this.$2(),this.$1=d("sdk.DocumentTitle").blink(a),c("DOMEventListener").add(window,"focus",function(a){b.$2()})):this.$1&&a==null&&this.$2()};b.$2=function(){this.$1!=null&&(this.$1.stop(),this.$1=null)};return a}();a=new(c("MPNSingletonProvider"))(function(){return new h()});b=a.get();g["default"]=b}),98); +__d("sdk.cp.Animation",["sdk.DOM","sdk.UA","sdk.cp.Constants"],(function(a,b,c,d,e,f,g){"use strict";function a(a){if(!a)return;var b=d("sdk.DOM").getAttr(a,c("sdk.cp.Constants").attribute.alignment);a=d("sdk.DOM").getAttr(a,c("sdk.cp.Constants").attribute.mobilePath);var e=c("sdk.UA").mobile(),f;if(e)switch(a){case c("sdk.cp.Constants").path.landingPage:return"fb_mpn_mobile_landing_page_slide_up";case c("sdk.cp.Constants").path.welcomePage:case c("sdk.cp.Constants").path.bubble:case c("sdk.cp.Constants").path.itp:return null;default:return"fb_mpn_mobile_bounce_in"}else switch(b){case"left":f="fb_customer_chat_bounce_in_from_left";break;case"right":default:f="fb_customer_chat_bounce_in_v2"}return f}function b(a){if(!a)return;var b=d("sdk.DOM").getAttr(a,c("sdk.cp.Constants").attribute.alignment);a=d("sdk.DOM").getAttr(a,c("sdk.cp.Constants").attribute.mobilePath);var e=c("sdk.UA").mobile(),f;if(e)switch(a){case c("sdk.cp.Constants").path.landingPage:return b==="left"?"fb_mpn_mobile_landing_page_slide_out_from_left":"fb_mpn_mobile_landing_page_slide_out";case c("sdk.cp.Constants").path.bubble:return"fb_mpn_mobile_bounce_out_v2";default:return"fb_mpn_mobile_bounce_out"}else switch(b){case"left":f="fb_customer_chat_bounce_out_from_left";break;case"right":default:f="fb_customer_chat_bounce_out_v2"}return f}g.iframeBounceInAnimation=a;g.iframeBounceOutAnimation=b}),98); +__d("sdk.cp.Storage",["MPNSingletonProvider","sdk.WebStorage","sdk.cp.Constants"],(function(a,b,c,d,e,f,g){"use strict";var h=function(){function a(){}var b=a.prototype;b.setState=function(a){var b=d("sdk.WebStorage").getLocalStorageForRead();if(!b)return;try{if(a==null)b.removeItem(c("sdk.cp.Constants").localStateKey);else{var e=b.getItem(c("sdk.cp.Constants").localStateKey);if(e==null)b.setItem(c("sdk.cp.Constants").localStateKey,ES("JSON","stringify",!1,ES("JSON","parse",!1,a)));else{e=ES("JSON","parse",!1,e);a=ES("JSON","parse",!1,a);b.setItem(c("sdk.cp.Constants").localStateKey,ES("JSON","stringify",!1,babelHelpers["extends"]({},e,a)))}}}catch(a){return}};b.getStateJSON=function(){var a=d("sdk.WebStorage").getLocalStorageForRead();if(!a)return"{}";a=a.getItem(c("sdk.cp.Constants").localStateKey);return a==null?"{}":ES("JSON","stringify",!1,ES("JSON","parse",!1,a))};return a}();a=new(c("MPNSingletonProvider"))(function(){return new h()});b=a.get();g["default"]=b}),98); +__d("sdk.XFBML.CustomerChatNew",["ChatPluginSDKPreLoggingUtils","DOMEventListener","IframePluginClass","Log","MPNExplicitUserInteractions","MPNLocalState","QueryString","UrlMap","getFacebookOriginForTarget","performanceAbsoluteNow","sdk.Content","sdk.DOM","sdk.DialogUtils","sdk.Event","sdk.UA","sdk.WebStorage","sdk.XD","sdk.XFBML.CustomerChatWrapper","sdk.cp.Actions","sdk.cp.Animation","sdk.cp.Constants","sdk.cp.Storage","sdk.createIframe"],(function(a,b,c,d,e,f,g){"use strict";a=function(a){babelHelpers.inheritsLoose(b,a);function b(b,c,e,f){var g;g=a.call(this,b,c,e,f)||this;g.$CustomerChat1=null;g.$CustomerChat2=null;g.$CustomerChat3=null;g.$CustomerChat4=null;g.$CustomerChat5=null;g.$CustomerChat6=null;g.$CustomerChat7=null;g.$CustomerChat8=null;g.$CustomerChat9=null;g.$CustomerChat10=null;g.$CustomerChat11=null;g.$CustomerChat12=!1;g.$CustomerChat13=null;g.$CustomerChat14=!1;g.$CustomerChat15=!1;g.show=function(a){a===void 0&&(a=!0),g.$CustomerChat15=!1,g.$CustomerChat1!=null&&d("sdk.DOM").setStyle(g.$CustomerChat1,"display","inline"),a&&g.$CustomerChat30(g.$CustomerChat4),d("sdk.Event").fire("customerchat.show"),g.$CustomerChat34("show")};g.hide=function(){g.$CustomerChat15=!0,g.$CustomerChat1!=null&&d("sdk.DOM").setStyle(g.$CustomerChat1,"display","none"),g.$CustomerChat29(g.$CustomerChat4),d("sdk.Event").fire("customerchat.hide"),g.$CustomerChat34("hide")};g.showDialog=function(){g.$CustomerChat1!=null&&d("sdk.DOM").setStyle(g.$CustomerChat1,"display","inline"),g.$CustomerChat30(g.$CustomerChat4),g.$CustomerChat34("showDialog")};g.hideDialog=function(){g.$CustomerChat29(g.$CustomerChat4),g.$CustomerChat34("hideDialog")};g.update=function(a){var b;d("sdk.XD").sendToFacebook((b=g.$CustomerChat5)!=null?b:"",{method:"updateCustomerChat",params:ES("JSON","stringify",!1,a||{})});g.$CustomerChat34("update")};d("sdk.DOM").addCss(b,"fb_invisible_flow");d("sdk.DOM").remove(b);d("sdk.Content").append(b);g.$CustomerChat16=Boolean(f.should_use_new_domain);g.$CustomerChat17();d("sdk.Event").fire("customerchat.load");g.$CustomerChat18();d("ChatPluginSDKPreLoggingUtils").preLogging(g.$CustomerChat16,"chat_plugin_sdk_dialog_iframe_create",g.params,!1);return g}var e=b.prototype;e.$CustomerChat17=function(){var a=d("sdk.WebStorage").getLocalStorage(),b=null;if(a!=null)try{b=a.getItem(d("MPNLocalState").LOCAL_STATE_KEY)}catch(a){d("Log").warn("Failed to access localStorage")}b!=null&&ES("Object","assign",!1,this.params,{local_state:b});if(b!=null)try{a=ES("JSON","parse",!1,b);d("MPNExplicitUserInteractions").hasUserInteraction(a==null?void 0:a.euit)&&ES("Object","assign",!1,this.params,{has_explicit_interaction:1})}catch(a){d("Log").warn("Invalid local state")}b=c("performanceAbsoluteNow")();ES("Object","assign",!1,this.params,{request_time:b});a=this.$CustomerChat16?d("UrlMap").resolve("social_plugin")+"/"+this.tag+".php?":d("UrlMap").resolve("www")+"/plugins/"+this.tag+".php?";this.iframeOptions.url=a+c("QueryString").encode(this.params);this.iframeOptions.title=""};e.$CustomerChat18=function(){var a=this;this.subscribe("render",function(){d("ChatPluginSDKPreLoggingUtils").preLogging(a.$CustomerChat16,"chat_plugin_sdk_dialog_iframe_load",a.params)});this.subscribe("xd.mpn.storeState",function(a){c("sdk.cp.Storage").setState(a.state)});this.subscribe("xd.mpn.getState",function(b){b=c("sdk.cp.Storage").getStateJSON();b={name:"mpnDidFetchState",params:b};a.$CustomerChat19(b);a.$CustomerChat20(b)});this.subscribe("xd.mpn.setupIconIframe",function(b){a.$CustomerChat21(b)});this.subscribe("xd.mpn.setupDialogIframe",function(b){a.$CustomerChat22(b)});this.subscribe("xd.mpn.toggleDialogVisibility",function(b){a.$CustomerChat23(b)});this.subscribe("xd.mpn.toggleGreetingDialogVisibility",function(b){a.$CustomerChat24(b)});this.subscribe("xd.mpn.updateGreetingAppearance",function(b){c("sdk.cp.Actions").setDialogAppearance(a.$CustomerChat10,b)});this.subscribe("xd.mpn.updateDialogAppearance",function(b){c("sdk.cp.Actions").setDialogAppearance(a.iframe,b)});this.subscribe("xd.mpn.updateIconAppearance",function(b){c("sdk.cp.Actions").setDialogAppearance(a.$CustomerChat3,b)});this.subscribe("xd.mpn.reload",function(b){c("sdk.cp.Actions").reloadIframe(a.iframe,b.hasExplicitInteraction)});this.subscribe("xd.mpn.updatePageTitle",function(a){c("sdk.cp.Actions").blinkPageTitle(a.title)});this.subscribe("xd.mpn.navigateToWelcomePage",function(b){a.$CustomerChat25(b.isHidden)});d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEvent.subscribe(d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEventType.SHOW,this.show);d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEvent.subscribe(d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEventType.HIDE,this.hide);d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEvent.subscribe(d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEventType.SHOW_DIALOG,this.showDialog);d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEvent.subscribe(d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEventType.HIDE_DIALOG,this.hideDialog);d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEvent.subscribe(d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEventType.UPDATE,this.update)};e.$CustomerChat21=function(a){var b=this;this.$CustomerChat1&&d("sdk.DOM").remove(this.$CustomerChat1);var e=a.frameName,f=a.iconSVG,g=d("sdk.DialogUtils").setupNewDialog(),h=ES("JSON","parse",!1,a.cssText),i=document.createElement("div");f!=null&&(d("sdk.DOM").html(i,f),ES("Object","assign",!1,i.style,h),i.style.boxShadow="none",d("sdk.Content").append(i,g.contentRoot));var j="blank_"+e;this.$CustomerChat1=g.dialogElement;this.$CustomerChat3=c("sdk.createIframe")({url:this.$CustomerChat16?c("sdk.cp.Constants").blankFrameNewDomainURL:c("sdk.cp.Constants").blankFrameURL,name:j,root:g.contentRoot,tabindex:-1,width:60,style:h,"data-testid":"bubble_iframe",onload:function(){d("ChatPluginSDKPreLoggingUtils").preLogging(b.$CustomerChat16,"chat_plugin_sdk_icon_iframe_load",b.params),b.$CustomerChat2=j,b.$CustomerChat26(),b.$CustomerChat27(),window.setTimeout(function(){d("sdk.DOM").remove(i)},100)}});this.$CustomerChat1&&this.$CustomerChat1.setAttribute(c("sdk.cp.Constants").attribute.alignment,a.alignment);this.$CustomerChat1&&d("sdk.Content").append(this.$CustomerChat1);var k="availabilityStatus_"+e;this.$CustomerChat8=c("sdk.createIframe")({url:this.$CustomerChat16?c("sdk.cp.Constants").blankFrameNewDomainURL:c("sdk.cp.Constants").blankFrameURL,name:k,root:g.contentRoot,tabindex:-1,style:ES("JSON","parse",!1,a.availabilityStatusCssText),"data-testid":"availabilityStatus_iframe",onload:function(){b.$CustomerChat9=k,b.$CustomerChat26(),b.$CustomerChat27()}});d("sdk.Content").append(this.$CustomerChat8,g.contentRoot);var l="unread_"+e;this.$CustomerChat6=c("sdk.createIframe")({url:this.$CustomerChat16?c("sdk.cp.Constants").blankFrameNewDomainURL:c("sdk.cp.Constants").blankFrameURL,name:l,root:g.contentRoot,tabindex:-1,style:ES("JSON","parse",!1,a.unreadCountCssText),"data-testid":"unread_iframe",onload:function(){b.$CustomerChat7=l,b.$CustomerChat26(),b.$CustomerChat27()}});d("sdk.Content").append(this.$CustomerChat6,g.contentRoot);f=c("sdk.UA").mobile();if(!f){var m="greeting_"+e;this.$CustomerChat10=c("sdk.createIframe")({url:this.$CustomerChat16?c("sdk.cp.Constants").blankFrameNewDomainURL:c("sdk.cp.Constants").blankFrameURL,name:m,root:g.contentRoot,tabindex:-1,style:ES("JSON","parse",!1,a.greetingCssText),"data-testid":"greeting_iframe",onload:function(){b.$CustomerChat11=m,b.$CustomerChat26(),b.$CustomerChat27()}});d("sdk.Content").append(this.$CustomerChat10,g.contentRoot)}};e.$CustomerChat27=function(){this.$CustomerChat2!==null&&this.$CustomerChat7!==null&&this.$CustomerChat9!==null&&this.$CustomerChat5!==null&&this.$CustomerChat11!==null&&!this.$CustomerChat12&&(this.$CustomerChat12=!0,this.inform("iframes_loaded"))};e.$CustomerChat26=function(){var a;this.$CustomerChat19({name:"bubbleFrameLoaded",frameName:this.$CustomerChat2,unreadCountFrameName:this.$CustomerChat7,availabilityStatusIframeName:this.$CustomerChat9,greetingIframeName:this.$CustomerChat11,iconSrc:(a=this.$CustomerChat3)==null?void 0:a.src,unreadSrc:(a=this.$CustomerChat6)==null?void 0:a.src,request_time:this.params.request_time,log_id:this.params.log_id})};e.$CustomerChat25=function(a){this.$CustomerChat19({name:"navigateToWelcomePage",isHidden:a})};e.$CustomerChat22=function(a){var b=a.cssText,e=a.mobilePath,f=a.isDialogHidden;a=a.desktopBottomSpacing;this.$CustomerChat1&&(e&&this.$CustomerChat1.setAttribute(c("sdk.cp.Constants").attribute.mobilePath,e),a&&this.$CustomerChat1.setAttribute(c("sdk.cp.Constants").attribute.desktopBottomSpacing,a.toString()));this.$CustomerChat14=f==="true";this.iframe&&(this.iframe.setAttribute("data-testid","dialog_iframe"),this.iframe.style.cssText=b);this.$CustomerChat4=this.iframe;this.$CustomerChat5=this.iframe.name;this.$CustomerChat27();a=c("sdk.UA").mobile();if(a&&!this.$CustomerChat14){if(e==c("sdk.cp.Constants").path.landingPage){f=d("sdk.cp.Animation").iframeBounceInAnimation(this.$CustomerChat1);f!=null&&d("sdk.DOM").addCss(this.$CustomerChat4,f)}e!=c("sdk.cp.Constants").path.landingPage&&e!=c("sdk.cp.Constants").path.bubble&&this.$CustomerChat28()}this.$CustomerChat15&&this.hide()};e.$CustomerChat23=function(a){a=a.shouldHide;a==="true"?this.$CustomerChat29(this.iframe):this.$CustomerChat30(this.iframe)};e.$CustomerChat24=function(a){a=a.shouldHide;a==="true"?this.$CustomerChat31(this.$CustomerChat10):this.$CustomerChat32(this.$CustomerChat10)};e.getParams=function(){return{allow_guests:"bool",attribution:"string",greeting_dialog_display:"string",greeting_dialog_delay:"string",logged_in_greeting:"string",logged_out_greeting:"string",minimized:"bool",page_id:"string",theme_color:"string",override:"string",attribution_version:"string",is_loaded_by_facade:"bool",current_url:"string",log_id:"string",request_time:"px"}};e.$CustomerChat33=function(a,b){var d=this,e=window.frames[a],f=function(a){e==null?void 0:e.postMessage(babelHelpers["extends"]({},b),a)};this.$CustomerChat13===null?c("getFacebookOriginForTarget")(function(a){d.$CustomerChat13=a,f(d.$CustomerChat13)},e):f(this.$CustomerChat13)};e.$CustomerChat20=function(a){var b;this.$CustomerChat33((b=this.$CustomerChat2)!=null?b:"",a)};e.$CustomerChat19=function(a){var b;this.$CustomerChat33((b=this.$CustomerChat5)!=null?b:"",a)};e.$CustomerChat34=function(a){this.$CustomerChat19({name:"CustomerChat.SDK.Called",event:a})};e.$CustomerChat28=function(){var a="fb_new_ui_mobile_overlay_active";d("sdk.DOM").addCss(document.body,a)};e.$CustomerChat30=function(a){if(!a)return;if(this.$CustomerChat14){this.$CustomerChat14=!1;var b=d("sdk.cp.Animation").iframeBounceInAnimation(this.$CustomerChat1),e=d("sdk.cp.Animation").iframeBounceOutAnimation(this.$CustomerChat1);e!=null&&d("sdk.DOM").removeCss(a,e);b!=null&&d("sdk.DOM").addCss(a,b);if(c("sdk.UA").mobile())d("sdk.DOM").setStyle(a,"maxHeight","100%"),d("sdk.DOM").setStyle(a,"height","100%"),d("sdk.DOM").setStyle(a,"width","100%");else{e=this.$CustomerChat1&&d("sdk.DOM").getAttr(this.$CustomerChat1,c("sdk.cp.Constants").attribute.desktopBottomSpacing);b=e==null?"80":Number(e)+60;d("sdk.DOM").setStyle(a,"maxHeight","calc(100% - "+b+"px)");d("sdk.DOM").setStyle(a,"minHeight","300px")}this.$CustomerChat19({name:"CustomerChat.isDialogHidden",params:{is_dialog_hidden:!1}});this.$CustomerChat20({name:"CustomerChat.isDialogHidden",params:{is_dialog_hidden:!1}});d("sdk.Event").fire("customerchat.dialogShow")}};e.$CustomerChat29=function(a){var b=this;if(!a)return;if(!this.$CustomerChat14){this.$CustomerChat14=!0;var e=d("sdk.cp.Animation").iframeBounceInAnimation(this.$CustomerChat1),f=d("sdk.cp.Animation").iframeBounceOutAnimation(this.$CustomerChat1);e!=null&&d("sdk.DOM").removeCss(a,e);f!=null&&d("sdk.DOM").addCss(a,f);var g={};c("sdk.cp.Constants").animationEvents.forEach(function(e){var f=function(e){b.$CustomerChat14&&(d("sdk.DOM").setStyle(a,"maxHeight","0"),d("sdk.DOM").setStyle(a,"minHeight","0"),c("sdk.cp.Constants").animationEvents.forEach(function(b){g[b]&&(d("DOMEventListener").remove(a,b,g[b]),delete g[b])}))};g[e]=f;d("DOMEventListener").add(a,e,f)});this.$CustomerChat19({name:"CustomerChat.isDialogHidden",params:{is_dialog_hidden:!0}});this.$CustomerChat20({name:"CustomerChat.isDialogHidden",params:{is_dialog_hidden:!0}})}d("sdk.Event").fire("customerchat.dialogHide")};e.$CustomerChat31=function(a){if(!a)return;d("sdk.DOM").setStyle(a,"maxHeight","0");d("sdk.DOM").setStyle(a,"minHeight","0")};e.$CustomerChat32=function(a){if(!a)return;d("sdk.DOM").setStyle(a,"maxHeight","calc(100% - 80px)")};return b}(c("IframePluginClass"));g["default"]=a}),98); +__d("sdk.XFBML.CustomerChatWrapper",["$InternalEnum","CORSRequest","UrlMap","sdk.Observable","sdk.XFBML.ChatDOM"],(function(a,b,c,d,e,f,g){a=b("$InternalEnum")({SHOW:"SHOW",HIDE:"HIDE",SHOW_DIALOG:"SHOW_DIALOG",HIDE_DIALOG:"HIDE_DIALOG",UPDATE:"UDPATE"});e=new(d("sdk.Observable").Observable)();f=function(a,b,c,d){return new h(a,b,c,d)};var h=function(b){babelHelpers.inheritsLoose(a,b);function a(a,c,d,e){var f;f=b.call(this)||this;f.$CustomerChatWrapper2=a;f.$CustomerChatWrapper3=c;f.$CustomerChatWrapper4=d;f.$CustomerChatWrapper5=e;return f}var e=a.prototype;e.process=function(){var a=this,b=d("UrlMap").resolve("social_plugin")+"/new_domain_gating/";c("CORSRequest").execute(b,"get",{page_id:this.$CustomerChatWrapper5.page_id,endpoint:this.$CustomerChatWrapper4},function(b){a.$CustomerChatWrapper5.should_use_new_domain=b.should_use_new_domain,a.$CustomerChatWrapper1=new(c("sdk.XFBML.ChatDOM"))(a.$CustomerChatWrapper2,a.$CustomerChatWrapper3,a.$CustomerChatWrapper4,a.$CustomerChatWrapper5),a.$CustomerChatWrapper1.subscribe("render",function(){a.inform("render")}),a.$CustomerChatWrapper1.process()})};return a}(d("sdk.Observable").Observable);g.CustomerChatInternalEventType=a;g.CustomerChatInternalEvent=e;g.CustomerChatWrapperPlugin=f}),98); +__d("sdk.XFBML.LWIAdsCreation",["IframePlugin","sdk.createIframe"],(function(a,b,c,d,e,f,g){"use strict";a=c("IframePlugin").extend({constructor:function(a,b,c,d){this.parent(a,b,c,d),this._setUpSubscriptions()},getParams:function(){return{fbe_extras:"string",fbe_redirect_uri:"string",fbe_scopes:"string",fbe_state:"string",hide_manage_button:"bool",hide_explore_more_options:"bool",preferred_ad_options:"string"}},_setUpSubscriptions:function(){var a=this;this.subscribe("xd.lwiadscreation.load",function(b){a._createIframe(b)})},_createIframe:function(a){c("sdk.createIframe")({url:a.iframeURL,name:"LWIAdsCreationRootIframe",root:document.body,height:300,width:950})}});b=a;g["default"]=b}),98); +__d("sdk.XFBML.LWIAdsInsights",["IframePlugin","sdk.createIframe"],(function(a,b,c,d,e,f,g){"use strict";a=c("IframePlugin").extend({constructor:function(a,b,c,d){this.parent(a,b,c,d),this._setUpSubscriptions()},getParams:function(){return{fbe_extras:"string",fbe_redirect_uri:"string",fbe_scopes:"string",fbe_state:"string"}},_setUpSubscriptions:function(){var a=this;this.subscribe("xd.lwiadsinsights.load",function(b){a._createIframe(b)})},_createIframe:function(a){c("sdk.createIframe")({url:a.iframeURL,name:"LWIAdsInsightsRootIframe",root:document.body,height:800,width:1050})}});b=a;g["default"]=b}),98); +__d("safeEval",["sdk.Runtime","sdk.Scribe"],(function(a,b,c,d,e,f,g){function a(a,b){if(a===null||typeof a==="undefined")return;if(typeof a!=="string")return a;if(/^\w+$/.test(a)&&typeof window[a]==="function")return window[a].apply(null,b||[]);d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"USE_OF_EVAL_FUNCTION",extra:{message:"Developer used an eval function"}});return Function('return eval("'+a.replace(/\"/g,'\\"')+'");').apply(null,b||[])}f.exports=a}),34); +__d("sdk.SVGLogos",["guid"],(function(a,b,c,d,e,f,g){"use strict";var h="M90,212v-75h-27v-31h27v-25q0,-40 40,-40q15,0 24,2v26h-14q-16,0 -16,16v21h30l-5,31h-27v75",i="a106 106,0,1,0,-32 0",j="a106 106,1,0,1,-32 0";function k(a,b){Object.getOwnPropertyNames(b).forEach(function(c){return a.setAttribute(c,b[c])});return a}function l(a,b,c){b=k(document.createElementNS("http://www.w3.org/2000/svg",b),c);a==null?void 0:a.appendChild(b);return b}a=function(a){a=l(null,"svg",ES("Object","assign",!1,{viewBox:"0 0 100 100",preserveAspectRatio:"xMinYMin"},a));l(a,"line",{x1:"0",y1:"100",x2:"100",y2:"0","stroke-width":"12"});l(a,"line",{x1:"0",y1:"0",x2:"100",y2:"100","stroke-width":"12"});return a};b=function(a){a=l(null,"svg",ES("Object","assign",!1,{viewBox:"0 0 213 213",preserveAspectRatio:"xMinYMin"},a));l(a,"path",{d:h+i,"class":"f_logo_circle"});l(a,"path",{d:h+j,"class":"f_logo_f"});return a};d=function(a){a=l(null,"svg",ES("Object","assign",!1,{viewBox:"0 0 213 213",preserveAspectRatio:"xMinYMin"},a));l(a,"path",{d:h+i,"class":"f_logo_circle",fill:"white"});l(a,"path",{d:h+j,"class":"f_logo_f",fill:"white"});return a};e=function(a){a=l(null,"svg",ES("Object","assign",!1,{viewBox:"-2 -2 104 104",preserveAspectRatio:"xMinYMin"},a));l(a,"rect",{x:"5",y:"5",width:"91",height:"91","stroke-width":"9",rx:"23","class":"ig_logo_body"});l(a,"circle",{cx:"77",cy:"23",r:"6","class":"ig_logo_flash"});l(a,"circle",{cx:"50",cy:"50",r:"21","stroke-width":"9","class":"ig_logo_lens"});return a};f=function(a){var b=c("guid")();a=l(null,"svg",ES("Object","assign",!1,{viewBox:"-2 -2 104 104",preserveAspectRatio:"xMinYMin"},a));var d=l(a,"defs",{}),e=l(d,"mask",{id:b});l(e,"circle",{cx:"77",cy:"23",r:"6",fill:"white"});l(e,"circle",{cx:"50",cy:"50",r:"21","stroke-width":"9",stroke:"white"});l(e,"rect",{x:"5",y:"5",width:"91",height:"91","stroke-width":"9",rx:"23",stroke:"white",fill:"none"});e=l(d,"linearGradient",{id:"purplepink",x1:"0",x2:".15",y1:"0",y2:".6"});l(e,"stop",{offset:"12%","stop-color":"rgb(88,85,214)"});l(e,"stop",{offset:"85%","stop-color":"rgb(215,27,122)"});e=l(d,"radialGradient",{id:"yelloworange",cx:".35",cy:"1",r:"2"});l(e,"stop",{offset:"7%","stop-color":"rgb(252,215,114)"});l(e,"stop",{offset:"20%","stop-color":"rgb(244,102,37)"});l(e,"stop",{offset:"38%","stop-color":"rgb(225,37,122)","stop-opacity":"0"});l(a,"rect",{x:"1",y:"1",width:"99",height:"99","stroke-width":"0",rx:"23",fill:"url(#purplepink)",style:"mask: url(#"+b+")"});l(a,"rect",{x:"1",y:"1",width:"99",height:"99","stroke-width":"0",rx:"23",fill:"url(#yelloworange)",style:"mask: url(#"+b+")"});return a};g.close=a;g.facebook=b;g.facebookWhite=d;g.instagram=e;g.instagramColor=f}),98); +__d("sdk.SharedStringConstants",["sdk.fbt"],(function(a,b,c,d,e,f,g){"use strict";a={continueWith:c("sdk.fbt")._("Continuar con {facebook_app_name} o {instagram_app_name}"),continueWithShort:c("sdk.fbt")._("{facebook_app_name} o {instagram_app_name}"),loginButtonAriaLabel:c("sdk.fbt")._("Continuar con Facebook o Instagram"),logout:c("sdk.fbt")._("Cerrar sesi\u00f3n"),logoutButtonAriaLabel:c("sdk.fbt")._("Cerrar sesi\u00f3n en el sitio web actual"),titleText:c("sdk.fbt")._("Elige una cuenta"),promptText:c("sdk.fbt")._("\u00bfQu\u00e9 cuenta quieres usar para iniciar sesi\u00f3n?"),facebookText:c("sdk.fbt")._("Iniciar sesi\u00f3n con Facebook"),facebookTextShort:c("sdk.fbt")._("Log in"),instagramText:c("sdk.fbt")._("Iniciar sesi\u00f3n con Instagram"),disambiguationDialogAriaLabelText:c("sdk.fbt")._("Log in with Facebook or Instagram"),fbButtonText:c("sdk.fbt")._("Continuar con Facebook"),igButtonText:c("sdk.fbt")._("Continuar con Instagram")};g.buttonStringsFBT=a}),98); +__d("sdk.XFBML.ShadowDOMLoginButton",["DOMPlugin","UrlMap","sdk.Auth","sdk.Event","sdk.LoggingUtils","sdk.PluginUtils","sdk.Runtime","sdk.SVGLogos","sdk.SharedStringConstants","sdk.createIframe","sdk.ui"],(function(a,b,c,d,e,f,g){var h={small:"11px",medium:"13px",large:"16px"},i={small:"20px",medium:"30px",large:"40px"},j="{facebook_app_name}";a=function(a){babelHelpers.inheritsLoose(b,a);function b(b,e,f,g,h){b=a.call(this,b,e,f,g,h)||this;b.stateObservers=[];b.shadowCss=["css:fb.shadow.css.fb_login_button"];b.container=document.createElement("div");b.container.classList.add("fb_login_button_container");b.container.dir="auto";b.loginButtonText=b.updateLabel();b.fbLoginButton=document.createElement("button");b.borderRadius=b.updateRadius(b.params);b.fbLoginButton=b.createSingleButton(b.loginButtonText);b.createFBButton("fb-button-main-element",d("sdk.SharedStringConstants").buttonStringsFBT.logout,d("sdk.SharedStringConstants").buttonStringsFBT.logoutButtonAriaLabel,r,function(a){this.style.display=a.status==="connected"?"flex":"none"},ES(function(a){c("sdk.Auth").logout(),a&&a.detail===0&&this.fbLoginButton&&this.fbLoginButton.style.display!=="none"&&this.fbLoginButton.focus()},"bind",!0,babelHelpers.assertThisInitialized(b)));return b}var e=b.prototype;e.render=function(a){var b=this;this.updateDisplay({shouldHideDisambiguation:!0,status:c("sdk.Runtime").getLoginStatus()});d("sdk.Event").subscribe("auth.statusChange",function(a){a={shouldHideDisambiguation:!0,status:a.status,fxApp:a.loginSource};b.updateDisplay(a)});return this.container};e.createSingleButton=function(a){return this.createFBButton("fb-button-main-element",a,a,q,function(a){this.style.display=a.status==="connected"?"none":"flex"},ES(function(a){a.stopPropagation(),d("sdk.LoggingUtils").logLoginEvent(this.params,d("sdk.LoggingUtils").logEventName.buttonClick+"_single_fb"),this.loginTrigger()},"bind",!0,this))};e.loginTrigger=function(){var a="";c("sdk.ui")({method:"permissions.oauth",display:"popup",scope:a},this.loginCb())};e.createFBButton=function(a,b,c,d,e,f){var g=document.createElement("button");g.classList.add(a);g.setAttribute("aria-label",c);a=document.createElement("span");a.classList.add("fb_button_label_element");a.classList.add("fb_button_label");this.applyStyles(g,this.params);this.use_continue_as===!0?a.append(this.createIframeOverlay(this.container,this.params)):d(this.params,b,a);g.appendChild(a);g.addEventListener("click",function(a){f(a),g.blur()});g.updateDisplay=ES(e,"bind",!0,g);this.stateObservers.push(g);this.container.appendChild(g);return g};e.loginCb=function(){var a=this;return function(b){b.authResponse!=null&&b.status==="connected"?d("sdk.LoggingUtils").logLoginEvent(a.params,d("sdk.LoggingUtils").logEventName.loginSuccess+"_single_fb"):d("sdk.LoggingUtils").logLoginEvent(a.params,d("sdk.LoggingUtils").logEventName.loginCancel+"_single_fb")}};e.updateDisplay=function(a){this.stateObservers.forEach(function(b){return b.updateDisplay(a)})};e.updateLabel=function(){var a=this.params["button-type"]==="login_with"?d("sdk.SharedStringConstants").buttonStringsFBT.facebookText:d("sdk.SharedStringConstants").buttonStringsFBT.fbButtonText,b=o(this.params,a);this.params["button-type"]==="login_with"&&(a=b?a:d("sdk.SharedStringConstants").buttonStringsFBT.facebookTextShort);return a};e.updateRadius=function(a){var b;b=(b=d("sdk.PluginUtils").getVal(a,"layout"))!=null?b:"default";a=String(d("sdk.PluginUtils").getVal(a,"size"));a=a!==""?a:"small";a=a==="large"?"4px":"3px";return b==="rounded"?"20px":a};e.applyStyles=function(a,b){var c=String(d("sdk.PluginUtils").getVal(b,"size"));c=c!==""?c:"small";a.style.borderRadius=this.borderRadius;b=(b=d("sdk.PluginUtils").getVal(b,"width"))!=null?b:null;a.style.width=k(c,b).toString();a.style.fontSize=h[c];a.style.height=i[c];a.style.backgroundColor="rgb(26,119,242)";a.style.color="#fff";a.style.border="0";a.style.fontWeight="bold"};e.createIframeOverlay=function(a,b){var e,f=String(d("sdk.PluginUtils").getVal(b,"size"));f=f!==""?f:"small";var g=c("sdk.Runtime").getClientID(),h=String(d("sdk.PluginUtils").getVal(b,"layout"));h=h!==""?h:"default";e=(e=d("sdk.PluginUtils").getVal(b,"width"))!=null?e:null;e=k(f,e).toString();g=d("UrlMap").resolve("www")+("/plugins/login_button_overlay/"+g+"/"+e+"/"+f+"/"+h+"/");h={root:a,url:g,borderRadius:(f=d("sdk.PluginUtils").getVal(b,"layout"))!=null?f:"default",width:e};a=c("sdk.createIframe")(h);a.classList.add("fb-iframe-overlay");return a};return b}(d("DOMPlugin").DOMPlugin);function k(a,b){a=a!=null?a:"small";return b===""||b==null?m(a):l(a,b)}function l(a,b){b=isNaN(b)?0:Number(b);var c=m(a),d=n(a);if(bn(a)?d:b}function m(a){switch(a){case"large":return 240;case"medium":return 200;default:return 200}}function n(a){switch(a){case"large":return 400;case"medium":return 320;default:return 300}}function o(a,b){var c;b=b.replace(/\s?{facebook_app_name}\s?/,"");c=(c=d("sdk.PluginUtils").getVal(a,"width"))!=null?c:null;a=(a=d("sdk.PluginUtils").getVal(a,"size"))!=null?a:"large";a=k(a,c);c=p(b)?p(b):0;return c0||typeof a==="string"&&/^[0-9a-f]{21,}$|^[0-9]{1,21}$/.test(a);if(b)return a.toString();d("Log").warn("Invalid App Id: Must be a number or numeric string representing the application id.");return null}function a(a){c("sdk.Runtime").getInitialized()&&d("Log").warn("FB.init has already been called - this could indicate a problem");if(c("sdk.Runtime").getIsVersioned()){if(Object.prototype.toString.call(a)!=="[object Object]")throw new(c("ManagedError"))("Invalid argument");if(a.authResponse)throw new(c("ManagedError"))("Setting authResponse is not supported");a.version||(a.version=new(c("sdk.URI"))(location.href).getQueryData().sdk_version);d("sdk.PlatformVersioning").assertValidVersion(a.version);c("sdk.Runtime").setVersion(a.version)}else/number|string/.test(typeof a)&&(d("Log").warn("FB.init called with invalid parameters"),a={apiKey:a}),a.status==null&&(a.legacyStatusInit=!0),a=babelHelpers["extends"]({status:!0},a||{});var b=h(a.appId||a.apiKey);b!==null&&c("sdk.Runtime").setClientID(b);"scope"in a&&c("sdk.Runtime").setScope(a.scope);a.cookie&&(c("sdk.Runtime").setUseCookie(!0),typeof a.cookie==="string"&&d("sdk.Cookie").setDomain(a.cookie));(a.localStorage===!1||a.localStorage==="false")&&c("sdk.Runtime").setUseLocalStorage(!1);a.kidDirectedSite&&c("sdk.Runtime").setKidDirectedSite(!0);a.useFamilyLogin&&c("sdk.Runtime").setShouldLoadFamilyLogin(!0);(a.autoLogAppEvents==="1"||a.autoLogAppEvents==="true")&&(a.autoLogAppEvents=!0);a.ab&&c("sdk.Runtime").setSDKAB(a.ab);c("sdk.Runtime").setInitialized(!0);c("sdk.UA").mBasic()&&d("sdk.MBasicInitializer").init();d("sdk.Event").fire("init:post",a)}g["default"]=a}),98); +__d("sdk.init-public",["FB","QueryString","sdk.AppEvents","sdk.ErrorHandling","sdk.Event","sdk.Frictionless","sdk.XD","sdk.init"],(function(a,b,c,d,e,f,g){"use strict";function a(){b("sdk.XD"),b("sdk.AppEvents"),b("sdk.Frictionless"),window.setTimeout(function(){var a=/(connect\.facebook\.net|\.facebook\.com\/assets.php|\.facebook\.net\/assets.php).*?#(.*)/;ES("Array","from",!1,window.document.getElementsByTagName("script")).forEach(function(b){if(b.src){b=a.exec(b.src);if(b){var d={};b=c("QueryString").decode(b[2]);for(var e in b)if(Object.prototype.hasOwnProperty.call(b,e)){var f=b[e];f==="0"?d[e]=0:d[e]=f}c("sdk.init")(d)}}});window.fbAsyncInit&&!window.fbAsyncInit.hasRun&&(d("sdk.Event").fire("init:asyncstart"),window.fbAsyncInit.hasRun=!0,c("sdk.ErrorHandling").unguard(window.fbAsyncInit)())},0),c("FB").provide("",{init:c("sdk.init")}),d("sdk.Event").subscribe("init:post",function(){window.__buffer!==void 0&&window.__buffer.replay()}),window.setTimeout(function(){window.__buffer&&window.__buffer.opts&&c("sdk.init")(window.__buffer.opts)},0)}e={initialize:a};f=e;g["default"]=f}),98); +__d("sdk.Time",["Log","sdk.Impressions","sdk.Runtime","sdk.URI","sdk.feature"],(function(a,b,c,d,e,f,g){"use strict";var h=window.performance,i=h&&"now"in h&&"getEntriesByName"in h,j,k={};function a(){function a(a,b){var e=!1;try{a=new(c("sdk.URI"))(a.name);var f=a.getDomain();a=a.getPath();e=f===b.getDomain()&&ES(a,"includes",!0,"/rsrc.php/")}catch(a){d("Log").error("Malformed URL was passed to the URL constructor: Error %s occured",a.message)}return e}function b(b){var d=h.getEntriesByType("resource").filter(function(d){return a(d,new(c("sdk.URI"))(b))}),e=d.length>=1;e||(d=h.getEntriesByType("resource").filter(function(a){return ES(a.name,"startsWith",!0,b)}));return d}if(i){var e=c("sdk.Runtime").getSDKUrl(),f=null;b=b(e);if(b.length>1)if(b>2)b=null;else{var g=ES(b,"findIndex",!0,function(a){return ES(a.name,"startsWith",!0,e+"?hash=")});!g?b=null:(f=b.splice(g)[0],b=b[0])}else if(b.length===1){g=document.getElementById("facebook-jssdk-iframe");g&&g instanceof HTMLIFrameElement&&(f=g.contentWindow.performance.getEntriesByType("resource").find(function(a){return ES(a.name,"startsWith",!0,e)}));b=b[0]}else b=null;b&&(k.fetchTime=Math.round(b.duration),f&&(k.fetchTime+=Math.round(f.duration)),"transferSize"in b&&(k.transferSize=b.transferSize,f&&(k.transferSize+=f.transferSize)),d("Log").debug("sdkperf: it took %s ms and %s bytes to load %s",k.fetchTime,k.transferSize,e),j=b.startTime,k.ns=c("sdk.Runtime").getSDKNS(),j&&window.setTimeout(function(){var a=c("sdk.feature")("log_perf",!1),b=c("sdk.Runtime").getSDKAB();b&&(k.ab=b,a=!0);a&&d("sdk.Impressions").log(116,k)},1e4))}}function b(a){if(!i||!j)return;k[a]=Math.round(h.now()-j);d("Log").debug("sdkperf: %s logged after %s ms",a,k[a])}g.recordBootload=a;g.log=b}),98); +__d("sdk.time-public",["runOnce","sdk.Event","sdk.Time"],(function(a,b,c,d,e,f,g){"use strict";function a(){d("sdk.Time").recordBootload(),d("sdk.Event").subscribe("init:post",function(){d("sdk.Time").log("init")}),d("sdk.Event").subscribe("init:asyncstart",function(){d("sdk.Time").log("asyncstart")}),d("sdk.Event").subscribe("iframeplugin:create",c("runOnce")(function(){return d("sdk.Time").log("pluginframe")})),d("sdk.Event").subscribe("iframeplugin:onload",c("runOnce")(function(){return d("sdk.Time").log("ttfp")}))}b={init:a};e=b;g["default"]=e}),98); +__d("legacy:fb.sdk.index",["FB","sdk.AppEvents-public","sdk.Auth-public","sdk.Canvas-public","sdk.Event-public","sdk.Frictionless-public","sdk.GamingServices-public","sdk.Runtime","sdk.XFBML-public","sdk.api-public","sdk.init-public","sdk.time-public","sdk.ui"],(function(a,b,c,d,e,f,g){c("sdk.api-public").init(),c("sdk.AppEvents-public").init(),c("sdk.Auth-public").init(),c("sdk.Canvas-public").init(),c("sdk.Canvas-public").initCanvasPlugin(),c("sdk.Canvas-public").initCanvasPrefetcher(),c("sdk.Canvas-public").initCanvasPresence(),c("sdk.Event-public").init(),c("sdk.Frictionless-public").init(),c("sdk.GamingServices-public").init(),c("sdk.init-public").initialize(),c("sdk.time-public").init(),c("FB").provide("",{ui:c("sdk.ui")}),c("sdk.XFBML-public").init(),c("sdk.XFBML-public").initXFBMLBasedSocialPlugin(),c("sdk.Runtime").setIsVersioned(!0)}),35); +window.FB&&window.FB.__buffer&&(window.__buffer=babelHelpers["extends"]({},window.FB.__buffer)); } }).call(global);})();} catch (e) {var i = new Image();i.crossOrigin = 'anonymous';i.dataset.testid = 'fbSDKErrorReport';i.src='https://www.facebook.com/platform/scribe_endpoint.php/?c=jssdk_error&m='+encodeURIComponent('{"error":"LOAD", "extra": {"name":"'+e.name+'","line":"'+(e.lineNumber||e.line)+'","script":"'+(e.fileName||e.sourceURL||e.script||"sdk.js")+'","stack":"'+(e.stackTrace||e.stack)+'","revision":"1006796584","namespace":"FB","message":"'+e.message+'"}}');document.body.appendChild(i);} \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/0BC8A8B1A1A55FE7D52D0C92EB62026CBF29324D b/home/.surf/cache/WebKitCache/Version 16/Blobs/0BC8A8B1A1A55FE7D52D0C92EB62026CBF29324D new file mode 100644 index 0000000..8844239 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/0BC8A8B1A1A55FE7D52D0C92EB62026CBF29324D differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/0BE5AC9F5A41A1295F14319EF0ABF03D7DC25F8B b/home/.surf/cache/WebKitCache/Version 16/Blobs/0BE5AC9F5A41A1295F14319EF0ABF03D7DC25F8B new file mode 100644 index 0000000..bcd93c5 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/0BE5AC9F5A41A1295F14319EF0ABF03D7DC25F8B @@ -0,0 +1,7 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b4f804"],{13002(a,b,c){c.d(b,{Z:()=>i});class FilterInputElement extends HTMLElement{constructor(){super(),this.currentQuery=null,this.filter=null,this.debounceInputChange=function(a){let b;return function(){clearTimeout(b),b=setTimeout(()=>{clearTimeout(b),a()},300)}}(()=>d(this,!0)),this.boundFilterResults=()=>{d(this,!1)}}static get observedAttributes(){return["aria-owns"]}attributeChangedCallback(a,b){b&&"aria-owns"===a&&d(this,!1)}connectedCallback(){let a=this.input;a&&(a.setAttribute("autocomplete","off"),a.setAttribute("spellcheck","false"),a.addEventListener("focus",this.boundFilterResults),a.addEventListener("change",this.boundFilterResults),a.addEventListener("input",this.debounceInputChange))}disconnectedCallback(){let a=this.input;a&&(a.removeEventListener("focus",this.boundFilterResults),a.removeEventListener("change",this.boundFilterResults),a.removeEventListener("input",this.debounceInputChange))}get input(){let a=this.querySelector("input");return a instanceof HTMLInputElement?a:null}reset(){let a=this.input;a&&(a.value="",a.dispatchEvent(new Event("change",{bubbles:!0})))}}async function d(a,b=!1){let c=a.input;if(!c)return;let d=c.value.trim(),i=a.getAttribute("aria-owns");if(!i)return;let j=document.getElementById(i);if(!j)return;let k=j.hasAttribute("data-filter-list")?j:j.querySelector("[data-filter-list]");if(!k||(a.dispatchEvent(new CustomEvent("filter-input-start",{bubbles:!0})),b&&a.currentQuery===d))return;a.currentQuery=d;let l=a.filter||e,m=k.childElementCount,n=0,o=!1;for(let p of Array.from(k.children)){if(!(p instanceof HTMLElement))continue;let q=f(p),r=l(p,q,d);!0===r.hideNew&&(o=r.hideNew),p.hidden=!r.match,r.match&&n++}let s=j.querySelector("[data-filter-new-item]"),t=!!s&&d.length>0&&!o;s instanceof HTMLElement&&(s.hidden=!t,t&&g(s,d)),h(j,n>0||t),a.dispatchEvent(new CustomEvent("filter-input-updated",{bubbles:!0,detail:{count:n,total:m}}))}function e(a,b,c){let d=-1!==b.toLowerCase().indexOf(c.toLowerCase());return{match:d,hideNew:b===c}}function f(a){let b=a.querySelector("[data-filter-item-text]")||a;return(b.textContent||"").trim()}function g(a,b){let c=a.querySelector("[data-filter-new-item-text]");c&&(c.textContent=b);let d=a.querySelector("[data-filter-new-item-value]");(d instanceof HTMLInputElement||d instanceof HTMLButtonElement)&&(d.value=b)}function h(a,b){let c=a.querySelector("[data-filter-empty-state]");c instanceof HTMLElement&&(c.hidden=b)}let i=FilterInputElement;window.customElements.get("filter-input")||(window.FilterInputElement=FilterInputElement,window.customElements.define("filter-input",FilterInputElement))},88309(a,b,c){c.d(b,{Z:()=>g});let d=new WeakMap;class RemoteInputElement extends HTMLElement{constructor(){var a;super();let b,c=e.bind(null,this,!0),f={currentQuery:null,oninput:(a=c,function(){clearTimeout(b),b=setTimeout(()=>{clearTimeout(b),a()},300)}),fetch:c,controller:null};d.set(this,f)}static get observedAttributes(){return["src"]}attributeChangedCallback(a,b){b&&"src"===a&&e(this,!1)}connectedCallback(){let a=this.input;if(!a)return;a.setAttribute("autocomplete","off"),a.setAttribute("spellcheck","false");let b=d.get(this);b&&(a.addEventListener("focus",b.fetch),a.addEventListener("change",b.fetch),a.addEventListener("input",b.oninput))}disconnectedCallback(){let a=this.input;if(!a)return;let b=d.get(this);b&&(a.removeEventListener("focus",b.fetch),a.removeEventListener("change",b.fetch),a.removeEventListener("input",b.oninput))}get input(){let a=this.querySelector("input, textarea");return a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement?a:null}get src(){return this.getAttribute("src")||""}set src(a){this.setAttribute("src",a)}}async function e(a,b){let c=a.input;if(!c)return;let e=d.get(a);if(!e)return;let g=c.value;if(b&&e.currentQuery===g)return;e.currentQuery=g;let h=a.src;if(!h)return;let i=document.getElementById(a.getAttribute("aria-owns")||"");if(!i)return;let j=new URL(h,window.location.href),k=new URLSearchParams(j.search);k.append(a.getAttribute("param")||"q",g),j.search=k.toString(),e.controller?e.controller.abort():(a.dispatchEvent(new CustomEvent("loadstart")),a.setAttribute("loading","")),e.controller="AbortController"in window?new AbortController:{signal:null,abort(){}};let l,m="";try{m=await (l=await f(a,j.toString(),{signal:e.controller.signal,credentials:"same-origin",headers:{accept:"text/fragment+html"}})).text(),a.removeAttribute("loading"),e.controller=null}catch(n){"AbortError"!==n.name&&(a.removeAttribute("loading"),e.controller=null);return}l&&l.ok?(i.innerHTML=m,a.dispatchEvent(new CustomEvent("remote-input-success",{bubbles:!0}))):a.dispatchEvent(new CustomEvent("remote-input-error",{bubbles:!0}))}async function f(a,b,c){try{let d=await fetch(b,c);return a.dispatchEvent(new CustomEvent("load")),a.dispatchEvent(new CustomEvent("loadend")),d}catch(e){throw"AbortError"!==e.name&&(a.dispatchEvent(new CustomEvent("error")),a.dispatchEvent(new CustomEvent("loadend"))),e}}let g=RemoteInputElement;window.customElements.get("remote-input")||(window.RemoteInputElement=RemoteInputElement,window.customElements.define("remote-input",RemoteInputElement))},29501(a,b,c){function d(a){return Array.from(a.querySelectorAll('[role="tablist"] [role="tab"]')).filter(b=>b instanceof HTMLElement&&b.closest(a.tagName)===a)}c.d(b,{Z:()=>TabContainerElement});class TabContainerElement extends HTMLElement{constructor(){super(),this.addEventListener("keydown",a=>{let b=a.target;if(!(b instanceof HTMLElement)||b.closest(this.tagName)!==this||"tab"!==b.getAttribute("role")&&!b.closest('[role="tablist"]'))return;let c=d(this),f=c.indexOf(c.find(a=>a.matches('[aria-selected="true"]')));if("ArrowRight"===a.code){let g=f+1;g>=c.length&&(g=0),e(this,g)}else if("ArrowLeft"===a.code){let h=f-1;h<0&&(h=c.length-1),e(this,h)}else"Home"===a.code?(e(this,0),a.preventDefault()):"End"===a.code&&(e(this,c.length-1),a.preventDefault())}),this.addEventListener("click",a=>{let b=d(this);if(!(a.target instanceof Element)||a.target.closest(this.tagName)!==this)return;let c=a.target.closest('[role="tab"]');if(!(c instanceof HTMLElement)||!c.closest('[role="tablist"]'))return;let f=b.indexOf(c);e(this,f)})}connectedCallback(){for(let a of d(this))a.hasAttribute("aria-selected")||a.setAttribute("aria-selected","false"),a.hasAttribute("tabindex")||("true"===a.getAttribute("aria-selected")?a.setAttribute("tabindex","0"):a.setAttribute("tabindex","-1"))}}function e(a,b){let c=d(a),e=Array.from(a.querySelectorAll('[role="tabpanel"]')).filter(b=>b.closest(a.tagName)===a),f=c[b],g=e[b],h=!a.dispatchEvent(new CustomEvent("tab-container-change",{bubbles:!0,cancelable:!0,detail:{relatedTarget:g}}));if(!h){for(let i of c)i.setAttribute("aria-selected","false"),i.setAttribute("tabindex","-1");for(let j of e)j.hidden=!0,j.hasAttribute("tabindex")||j.hasAttribute("data-tab-container-no-tabstop")||j.setAttribute("tabindex","0");f.setAttribute("aria-selected","true"),f.setAttribute("tabindex","0"),f.focus(),g.hidden=!1,a.dispatchEvent(new CustomEvent("tab-container-changed",{bubbles:!0,detail:{relatedTarget:g}}))}}window.customElements.get("tab-container")||(window.TabContainerElement=TabContainerElement,window.customElements.define("tab-container",TabContainerElement))},47142(a,b,c){c.d(b,{CD:()=>k,Gs:()=>i,m7:()=>j});var d=-1/0,e=1/0;function f(a){return a.toLowerCase()===a}function g(a){return a.toUpperCase()===a}function h(a,b,c,e){for(var h=a.length,i=b.length,j=a.toLowerCase(),k=b.toLowerCase(),l=function(a){for(var b=a.length,c=Array(b),d="/",e=0;e1024)return d;var g=Array(c),i=Array(c);return h(a,b,g,i),i[c-1][f-1]}function j(a,b){var c=a.length,e=b.length,f=Array(c);if(!c||!e)return f;if(c===e){for(var g=0;g1024)return f;var i=Array(c),j=Array(c);h(a,b,i,j);for(var k=!1,g=c-1,l=e-1;g>=0;g--)for(;l>=0;l--)if(i[g][l]!==d&&(k||i[g][l]===j[g][l])){k=g&&l&&j[g][l]===i[g-1][l-1]+1,f[g]=l--;break}return f}function k(a,b){a=a.toLowerCase(),b=b.toLowerCase();for(var c=a.length,d=0,e=0;dIncludeFragmentElement});var d,e,f,g,h,i,j,k,l=function(a,b,c,d){if("a"===c&&!d)throw TypeError("Private accessor was defined without a getter");if("function"==typeof b?a!==b||!d:!b.has(a))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===c?d:"a"===c?d.call(a):d?d.value:b.get(a)},m=function(a,b,c,d,e){if("m"===d)throw TypeError("Private method is not writable");if("a"===d&&!e)throw TypeError("Private accessor was defined without a setter");if("function"==typeof b?a!==b||!e:!b.has(a))throw TypeError("Cannot write private member to an object whose class did not declare it");return"a"===d?e.call(a,c):e?e.value=c:b.set(a,c),c};let n=new WeakMap,o=null;class IncludeFragmentElement extends HTMLElement{static setCSPTrustedTypesPolicy(a){o=null===a?a:Promise.resolve(a)}static get observedAttributes(){return["src","loading"]}get src(){let a=this.getAttribute("src");if(!a)return"";{let b=this.ownerDocument.createElement("a");return b.href=a,b.href}}set src(a){this.setAttribute("src",a)}get loading(){return"lazy"===this.getAttribute("loading")?"lazy":"eager"}set loading(a){this.setAttribute("loading",a)}get accept(){return this.getAttribute("accept")||""}set accept(a){this.setAttribute("accept",a)}get data(){return l(this,d,"m",i).call(this)}attributeChangedCallback(a,b){"src"===a?this.isConnected&&"eager"===this.loading&&l(this,d,"m",g).call(this):"loading"===a&&this.isConnected&&"eager"!==b&&"eager"===this.loading&&l(this,d,"m",g).call(this)}constructor(){super(),d.add(this),e.set(this,!1),f.set(this,new IntersectionObserver(a=>{for(let b of a)if(b.isIntersecting){let{target:c}=b;if(l(this,f,"f").unobserve(c),!(c instanceof IncludeFragmentElement))return;"lazy"===c.loading&&l(this,d,"m",g).call(this)}},{rootMargin:"0px 0px 256px 0px",threshold:.01}));let a=this.attachShadow({mode:"open"}),b=document.createElement("style");b.textContent=":host {display: block;}",a.append(b,document.createElement("slot"))}connectedCallback(){this.src&&"eager"===this.loading&&l(this,d,"m",g).call(this),"lazy"===this.loading&&l(this,f,"f").observe(this)}request(){let a=this.src;if(!a)throw Error("missing src");return new Request(a,{method:"GET",credentials:"same-origin",headers:{Accept:this.accept||"text/html"}})}load(){return l(this,d,"m",i).call(this)}fetch(a){return fetch(a)}refetch(){n.delete(this),l(this,d,"m",g).call(this)}}e=new WeakMap,f=new WeakMap,d=new WeakSet,g=async function(){if(!l(this,e,"f")){m(this,e,!0,"f"),l(this,f,"f").unobserve(this);try{let a=await l(this,d,"m",h).call(this);if(a instanceof Error)throw a;let b=a,c=document.createElement("template");c.innerHTML=b;let g=document.importNode(c.content,!0),i=!this.dispatchEvent(new CustomEvent("include-fragment-replace",{cancelable:!0,detail:{fragment:g}}));if(i){m(this,e,!1,"f");return}this.replaceWith(g),this.dispatchEvent(new CustomEvent("include-fragment-replaced"))}catch(j){this.classList.add("is-error")}finally{m(this,e,!1,"f")}}},h=async function(){let a=this.src,b=n.get(this);if(b&&b.src===a)return b.data;{let c;return c=a?l(this,d,"m",k).call(this):Promise.reject(Error("missing src")),n.set(this,{src:a,data:c}),c}},i=async function(){let a=await l(this,d,"m",h).call(this);if(a instanceof Error)throw a;return a.toString()},j=async function(a){for(let b of(await new Promise(a=>setTimeout(a,0)),a))this.dispatchEvent(new Event(b))},k=async function(){try{var a;await l(this,d,"m",j).call(this,["loadstart"]);let b=await this.fetch(this.request());if(200!==b.status)throw Error(`Failed to load resource: the server responded with a status of ${b.status}`);let c=b.headers.get("Content-Type");if(!((a=this.accept)&&a.split(",").find(a=>a.match(/^\s*\*\/\*/)))&&(!c||!c.includes(this.accept?this.accept:"text/html")))throw Error(`Failed to load resource: expected ${this.accept||"text/html"} but was ${c}`);let e=await b.text(),f=e;if(o){let g=await o;f=g.createHTML(e,b)}return l(this,d,"m",j).call(this,["load","loadend"]),f}catch(h){throw l(this,d,"m",j).call(this,["error","loadend"]),h}},window.customElements.get("include-fragment")||(window.IncludeFragmentElement=IncludeFragmentElement,window.customElements.define("include-fragment",IncludeFragmentElement))},40987(a,b,c){c.d(b,{Z:()=>TaskListsElement});let d=new WeakMap,e=null;function f(a,b){return a.closest("task-lists")===b.closest("task-lists")}function g(a){if(a.currentTarget!==a.target)return;let b=a.currentTarget;if(!(b instanceof Element))return;let c=b.closest(".contains-task-list");if(!c||(b.classList.add("is-ghost"),a.dataTransfer&&a.dataTransfer.setData("text/plain",(b.textContent||"").trim()),!b.parentElement))return;let f=Array.from(b.parentElement.children),g=f.indexOf(b),h=d.get(b);h&&h.sortStarted(c),e={didDrop:!1,dragging:b,dropzone:b,sourceList:c,sourceSibling:f[g+1]||null,sourceIndex:g}}function h(a){if(!e)return;let b=a.currentTarget;if(b instanceof Element){if(!f(e.dragging,b)){a.stopPropagation();return}a.preventDefault(),a.dataTransfer&&(a.dataTransfer.dropEffect="move"),e.dropzone!==b&&(e.dragging.classList.add("is-dragging"),e.dropzone=b,function(a,b){if(a.parentNode===b.parentNode){let c=a;for(;c;){if(c===b)return!0;c=c.previousElementSibling}}return!1}(e.dragging,b)?b.before(e.dragging):b.after(e.dragging))}}function i(a){if(!e)return;a.preventDefault(),a.stopPropagation();let b=a.currentTarget;if(!(b instanceof Element)||(e.didDrop=!0,!e.dragging.parentElement))return;let c=Array.from(e.dragging.parentElement.children).indexOf(e.dragging),f=b.closest(".contains-task-list");if(!f||e.sourceIndex===c&&e.sourceList===f)return;e.sourceList===f&&e.sourceIndex{let b=a.target;b instanceof HTMLInputElement&&b.classList.contains("task-list-item-checkbox")&&this.dispatchEvent(new CustomEvent("task-lists-check",{bubbles:!0,detail:{position:r(b),checked:b.checked}}))});let a=new MutationObserver(v.bind(null,this));l.set(this,a),a.observe(this,{childList:!0,subtree:!0}),v(this)}disconnectedCallback(){let a=l.get(this);a&&a.disconnect()}get disabled(){return this.hasAttribute("disabled")}set disabled(a){a?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get sortable(){return this.hasAttribute("sortable")}set sortable(a){a?this.setAttribute("sortable",""):this.removeAttribute("sortable")}static get observedAttributes(){return["disabled"]}attributeChangedCallback(a,b,c){b!==c&&"disabled"===a&&w(this)}}let m=document.createElement("template");m.innerHTML=` + + + `;let n=new WeakMap;function o(a){var b,c,e;if(n.get(a))return;n.set(a,!0);let f=a.closest("task-lists");if(!(f instanceof TaskListsElement)||f.querySelectorAll(".task-list-item").length<=1)return;let l=m.content.cloneNode(!0),o=l.querySelector(".handle");if(a.prepend(l),!o)throw Error("handle not found");o.addEventListener("mouseenter",C),o.addEventListener("mouseleave",D),b=a,c=A,e=B,d.set(b,{sortStarted:c,sortFinished:e}),b.addEventListener("dragstart",g),b.addEventListener("dragenter",h),b.addEventListener("dragend",j),b.addEventListener("drop",i),b.addEventListener("dragover",k),a.addEventListener("mouseenter",p),a.addEventListener("mouseleave",q)}function p(a){let b=a.currentTarget;if(!(b instanceof Element))return;let c=b.closest("task-lists");c instanceof TaskListsElement&&c.sortable&&!c.disabled&&b.classList.add("hovered")}function q(a){let b=a.currentTarget;b instanceof Element&&b.classList.remove("hovered")}function r(a){let b=s(a);if(!b)throw Error(".contains-task-list not found");let c=a.closest(".task-list-item"),d=Array.from(b.children).filter(a=>"LI"===a.tagName),e=c?d.indexOf(c):-1;return[y(b),e]}function s(a){let b=a.parentElement;return b?b.closest(".contains-task-list"):null}function t(a){return s(a)===u(a)}function u(a){let b=s(a);return b?u(b)||b:null}function v(a){let b=a.querySelectorAll(".contains-task-list > .task-list-item");for(let c of b)t(c)&&o(c);w(a)}function w(a){for(let b of a.querySelectorAll(".task-list-item"))b.classList.toggle("enabled",!a.disabled);for(let c of a.querySelectorAll(".task-list-item-checkbox"))c instanceof HTMLInputElement&&(c.disabled=a.disabled)}function x(a){return Array.from(a.querySelectorAll("ol, ul")).filter(a=>!a.closest("tracking-block"))}function y(a){let b=a.closest("task-lists");if(!b)throw Error("parent not found");return x(b).indexOf(a)}let z=new WeakMap;function A(a){let b=a.closest("task-lists");if(!b)throw Error("parent not found");z.set(b,x(b))}function B({src:a,dst:b}){let c=a.list.closest("task-lists");if(!c)return;let d=z.get(c);d&&(z.delete(c),c.dispatchEvent(new CustomEvent("task-lists-move",{bubbles:!0,detail:{src:[d.indexOf(a.list),a.index],dst:[d.indexOf(b.list),b.index]}})))}function C(a){let b=a.currentTarget;if(!(b instanceof Element))return;let c=b.closest(".task-list-item");if(!c)return;let d=c.closest("task-lists");d instanceof TaskListsElement&&d.sortable&&!d.disabled&&c.setAttribute("draggable","true")}function D(a){if(e)return;let b=a.currentTarget;if(!(b instanceof Element))return;let c=b.closest(".task-list-item");c&&c.setAttribute("draggable","false")}window.customElements.get("task-lists")||(window.TaskListsElement=TaskListsElement,window.customElements.define("task-lists",TaskListsElement))}}]) +//# sourceMappingURL=vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b4f804-64b03ed9823d.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/0C2F6881019152D0E247C2B1BD4311458C450EE5 b/home/.surf/cache/WebKitCache/Version 16/Blobs/0C2F6881019152D0E247C2B1BD4311458C450EE5 new file mode 100644 index 0000000..3033308 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/0C2F6881019152D0E247C2B1BD4311458C450EE5 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/0CC5A1F707D948F3F5F8C5B28F8A82DAAF58C708 b/home/.surf/cache/WebKitCache/Version 16/Blobs/0CC5A1F707D948F3F5F8C5B28F8A82DAAF58C708 new file mode 100644 index 0000000..c63db75 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/0CC5A1F707D948F3F5F8C5B28F8A82DAAF58C708 @@ -0,0 +1 @@ +svg.vch__wrapper[data-v-a9cfea66]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;line-height:10px}svg.vch__wrapper .vch__months__labels__wrapper text.vch__month__label[data-v-a9cfea66]{font-size:10px}svg.vch__wrapper .vch__days__labels__wrapper text.vch__day__label[data-v-a9cfea66],svg.vch__wrapper .vch__legend__wrapper text[data-v-a9cfea66]{font-size:9px}svg.vch__wrapper .vch__months__labels__wrapper text.vch__month__label[data-v-a9cfea66],svg.vch__wrapper .vch__days__labels__wrapper text.vch__day__label[data-v-a9cfea66],svg.vch__wrapper .vch__legend__wrapper text[data-v-a9cfea66]{fill:#767676}svg.vch__wrapper rect.vch__day__square[data-v-a9cfea66]:hover{stroke:#555;stroke-width:1px}svg.vch__wrapper rect.vch__day__square[data-v-a9cfea66]:focus{outline:none}.vue-tooltip-theme.tooltip{display:block!important;z-index:10000}.vue-tooltip-theme.tooltip .tooltip-inner{background:rgba(0,0,0,.7);border-radius:3px;color:#ebedf0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:12px;line-height:16px;padding:14px 10px}.vue-tooltip-theme.tooltip .tooltip-inner b{color:#fff}.vue-tooltip-theme.tooltip .tooltip-arrow{width:0;height:0;border-style:solid;position:absolute;margin:5px;border-color:#000;z-index:1}.vue-tooltip-theme.tooltip[x-placement^=top]{margin-bottom:5px}.vue-tooltip-theme.tooltip[x-placement^=top] .tooltip-arrow{border-width:5px 5px 0 5px;border-left-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;bottom:-5px;left:calc(50% - 5px);margin-top:0;margin-bottom:0}.vue-tooltip-theme.tooltip[x-placement^=bottom]{margin-top:5px}.vue-tooltip-theme.tooltip[x-placement^=bottom] .tooltip-arrow{border-width:0 5px 5px 5px;border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;top:-5px;left:calc(50% - 5px);margin-top:0;margin-bottom:0}.vue-tooltip-theme.tooltip[x-placement^=right]{margin-left:5px}.vue-tooltip-theme.tooltip[x-placement^=right] .tooltip-arrow{border-width:5px 5px 5px 0;border-left-color:transparent!important;border-top-color:transparent!important;border-bottom-color:transparent!important;left:-5px;top:calc(50% - 5px);margin-left:0;margin-right:0}.vue-tooltip-theme.tooltip[x-placement^=left]{margin-right:5px}.vue-tooltip-theme.tooltip[x-placement^=left] .tooltip-arrow{border-width:5px 0 5px 5px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;right:-5px;top:calc(50% - 5px);margin-left:0;margin-right:0}.vue-tooltip-theme.tooltip[aria-hidden=true]{visibility:hidden;opacity:0;transition:opacity .15s,visibility .15s}.vue-tooltip-theme.tooltip[aria-hidden=false]{visibility:visible;opacity:1;transition:opacity .15s}.ui.dropdown .menu.show[data-v-72c95649]{display:block}.ui.checkbox label[data-v-72c95649]{cursor:pointer}.ui.merge-button[data-v-72c95649]{position:relative}.ui.merge-button .ui.dropdown[data-v-72c95649]{position:static}.ui.merge-button>.ui.dropdown:last-child>.menu[data-v-72c95649]:not(.left){left:0;right:auto}.ui.merge-button .ui.dropdown .menu>.item[data-v-72c95649]{display:flex;align-items:stretch;padding:0!important}.action-text[data-v-72c95649]{padding:.8rem;flex:1}.auto-merge-small[data-v-72c95649]{width:40px;display:flex;align-items:center;justify-content:center;position:relative}.auto-merge-small .auto-merge-tip[data-v-72c95649]{display:none;left:38px;top:-1px;bottom:-1px;position:absolute;align-items:center;color:var(--color-info-text);background-color:var(--color-info-bg);border:1px solid var(--color-info-border);border-left:none;padding-right:1rem}.auto-merge-small[data-v-72c95649]:hover{color:var(--color-info-text);background-color:var(--color-info-bg);border:1px solid var(--color-info-border)}.auto-merge-small:hover .auto-merge-tip[data-v-72c95649]{display:flex}.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;inset:-50px 0 0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error,.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:0}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;inset:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors,.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{display:flex;flex-direction:row;flex-wrap:wrap}.EasyMDEContainer .CodeMirror{box-sizing:border-box;height:auto;border:1px solid #ddd;border-bottom-left-radius:4px;border-bottom-right-radius:4px;padding:10px;font:inherit;z-index:0;word-wrap:break-word}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{background:#fff;position:fixed!important;inset:50px 0 0;height:auto;z-index:8;border-right:none!important;border-bottom-right-radius:0!important}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-right:none!important;border-bottom-right-radius:0;position:relative;flex:1 1 auto}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;padding:9px 10px;border-top:1px solid #bbb;border-left:1px solid #bbb;border-right:1px solid #bbb;border-top-left-radius:4px;border-top-right-radius:4px}.editor-toolbar.fullscreen{width:100%;height:50px;padding-top:10px;padding-bottom:10px;box-sizing:border-box;background:#fff;border:0;position:fixed;top:0;left:0;opacity:1;z-index:9}.editor-toolbar.fullscreen:before{width:20px;height:50px;background:-moz-linear-gradient(left,#fff 0,rgba(255,255,255,0) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,#fff),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,#fff 0,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,#fff 0,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,#fff 0,rgba(255,255,255,0) 100%);background:linear-gradient(to right,#fff 0,rgba(255,255,255,0) 100%);position:fixed;top:0;left:0;margin:0;padding:0}.editor-toolbar.fullscreen:after{width:20px;height:50px;background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(100%,#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);position:fixed;top:0;right:0;margin:0;padding:0}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{background:0 0;display:inline-block;text-align:center;text-decoration:none!important;height:30px;margin:0;padding:0;border:1px solid transparent;border-radius:3px;cursor:pointer}.editor-toolbar button{width:30px}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{display:inline-block;width:0;border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;text-indent:-10px;margin:0 6px}.editor-toolbar button:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;vertical-align:text-bottom;position:relative;top:2px}.editor-toolbar button.heading-1:after{content:"1"}.editor-toolbar button.heading-2:after{content:"2"}.editor-toolbar button.heading-3:after{content:"3"}.editor-toolbar button.heading-bigger:after{content:"\25b2"}.editor-toolbar button.heading-smaller:after{content:"\25bc"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{padding:8px 10px;font-size:12px;color:#959694;text-align:right}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{display:inline-block;min-width:4em;margin-left:1em}.editor-statusbar .lines:before{content:"lines: "}.editor-statusbar .words:before{content:"words: "}.editor-statusbar .characters:before{content:"characters: "}.editor-preview-full{position:absolute;width:100%;height:100%;top:0;left:0;z-index:7;overflow:auto;display:none;box-sizing:border-box}.editor-preview-side{position:fixed;bottom:0;width:50%;top:50px;right:0;z-index:9;overflow:auto;display:none;box-sizing:border-box;border:1px solid #ddd;word-wrap:break-word}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:1 1 auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{padding:10px;background:#fafafa}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:200%;line-height:200%}.cm-s-easymde .cm-header-2{font-size:160%;line-height:160%}.cm-s-easymde .cm-header-3{font-size:125%;line-height:125%}.cm-s-easymde .cm-header-4{font-size:110%;line-height:110%}.cm-s-easymde .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{position:relative;background:linear-gradient(to bottom right,#fff 0,#fff 84%,#333 50%,#333 100%);border-radius:0;border:1px solid #fff}.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff 0,#fff 84%,#333 50%,#333 100%)}.easymde-dropdown-content{display:block;visibility:hidden;position:absolute;background-color:#f9f9f9;box-shadow:0 8px 16px #0003;padding:8px;z-index:2;top:30px}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}span[data-img-src]:after{content:"";background-image:var(--bg-image);display:block;max-height:100%;max-width:100%;background-size:contain;height:0;padding-top:var(--height);width:var(--width);background-repeat:no-repeat}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)}.ui.breadcrumb{line-height:1.4285em;display:inline-block;margin:0;vertical-align:middle}.ui.breadcrumb:first-child{margin-top:0}.ui.breadcrumb:last-child{margin-bottom:0}.ui.breadcrumb .divider{display:inline-block;opacity:.7;margin:0 .21428571rem;font-size:.92857143em;color:#0006;vertical-align:baseline}.ui.breadcrumb a{color:#4183c4}.ui.breadcrumb a:hover{color:#1e70bf}.ui.breadcrumb .icon.divider{font-size:.85714286em;vertical-align:baseline}.ui.breadcrumb a.section{cursor:pointer}.ui.breadcrumb .section{display:inline-block;margin:0;padding:0}.ui.breadcrumb.segment{display:inline-block;padding:.78571429em 1em}.ui.inverted.breadcrumb{color:#dcddde}.ui.inverted.breadcrumb>.active.section{color:#fff}.ui.inverted.breadcrumb>.divider{color:#ffffffb3}.ui.breadcrumb .active.section{font-weight:500}.ui.breadcrumb{font-size:1rem}.ui.mini.breadcrumb{font-size:.78571429rem}.ui.tiny.breadcrumb{font-size:.85714286rem}.ui.small.breadcrumb{font-size:.92857143rem}.ui.large.breadcrumb{font-size:1.14285714rem}.ui.big.breadcrumb{font-size:1.28571429rem}.ui.huge.breadcrumb{font-size:1.42857143rem}.ui.massive.breadcrumb{font-size:1.71428571rem}.ui.button{cursor:pointer;display:inline-block;min-height:1em;outline:none;border:none;vertical-align:baseline;background:#E0E1E2 none;color:#0009;font-family:var(--fonts-regular);margin:0 .25em 0 0;padding:.78571429em 1.5em;text-transform:none;text-shadow:none;font-weight:500;line-height:1em;font-style:normal;text-align:center;text-decoration:none;border-radius:.28571429rem;box-shadow:0 0 0 1px transparent inset,0 0 #22242626 inset;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:opacity .1s ease,background-color .1s ease,color .1s ease,box-shadow .1s ease,background .1s ease;will-change:auto;-webkit-tap-highlight-color:transparent}.ui.button:hover{background-color:#cacbcd;background-image:none;box-shadow:0 0 0 1px transparent inset,0 0 #22242626 inset;color:#000c}.ui.button:hover .icon{opacity:.85}.ui.button:focus{background-color:#cacbcd;color:#000c;background-image:none;box-shadow:""}.ui.button:focus .icon{opacity:.85}.ui.button:active,.ui.active.button:active{background-color:#babbbc;background-image:"";color:#000000e6;box-shadow:0 0 0 1px transparent inset,none}.ui.active.button{background-color:#c0c1c2;background-image:none;box-shadow:0 0 0 1px transparent inset;color:#000000f2}.ui.active.button:hover{background-color:#c0c1c2;background-image:none;color:#000000f2}.ui.active.button:active{background-color:#c0c1c2;background-image:none}.ui.loading.loading.loading.loading.loading.loading.button{position:relative;cursor:default;text-shadow:none!important;color:transparent;opacity:1;pointer-events:auto;transition:all 0s linear,opacity .1s ease}.ui.loading.button:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.15)}.ui.loading.button:after{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;-webkit-animation:loader .6s infinite linear;animation:loader .6s infinite linear;border:.2em solid currentColor;color:#fff;box-shadow:0 0 0 1px transparent}.ui.labeled.icon.loading.button .icon{background-color:transparent;box-shadow:none}.ui.basic.loading.button:not(.inverted):before{border-color:#0000001a}.ui.basic.loading.button:not(.inverted):after{border-color:#767676}.ui.buttons .disabled.button:not(.basic),.ui.disabled.button,.ui.button:disabled,.ui.disabled.button:hover,.ui.disabled.active.button{cursor:default;opacity:var(--opacity-disabled)!important;background-image:none;box-shadow:none;pointer-events:none!important}.ui.basic.buttons .ui.disabled.button{border-color:#22242680}.ui.animated.button{position:relative;overflow:hidden;padding-right:0!important;vertical-align:middle;z-index:1}.ui.animated.button .content{will-change:transform,opacity}.ui.animated.button .visible.content{position:relative;margin-right:1.5em}.ui.animated.button .hidden.content{position:absolute;width:100%}.ui.animated.button .visible.content,.ui.animated.button .hidden.content{transition:right .3s ease 0s}.ui.animated.button .visible.content{left:auto;right:0}.ui.animated.button .hidden.content{top:50%;left:auto;right:-100%;margin-top:-.5em}.ui.animated.button:focus .visible.content,.ui.animated.button:hover .visible.content{left:auto;right:200%}.ui.animated.button:focus .hidden.content,.ui.animated.button:hover .hidden.content{left:auto;right:0}.ui.vertical.animated.button .visible.content,.ui.vertical.animated.button .hidden.content{transition:top .3s ease,transform .3s ease}.ui.vertical.animated.button .visible.content{transform:translateY(0);right:auto}.ui.vertical.animated.button .hidden.content{top:-50%;left:0;right:auto}.ui.vertical.animated.button:focus .visible.content,.ui.vertical.animated.button:hover .visible.content{transform:translateY(200%);right:auto}.ui.vertical.animated.button:focus .hidden.content,.ui.vertical.animated.button:hover .hidden.content{top:50%;right:auto}.ui.fade.animated.button .visible.content,.ui.fade.animated.button .hidden.content{transition:opacity .3s ease,transform .3s ease}.ui.fade.animated.button .visible.content{left:auto;right:auto;opacity:1;transform:scale(1)}.ui.fade.animated.button .hidden.content{opacity:0;left:0;right:auto;transform:scale(1.5)}.ui.fade.animated.button:focus .visible.content,.ui.fade.animated.button:hover .visible.content{left:auto;right:auto;opacity:0;transform:scale(.75)}.ui.fade.animated.button:focus .hidden.content,.ui.fade.animated.button:hover .hidden.content{left:0;right:auto;opacity:1;transform:scale(1)}.ui.inverted.button{box-shadow:0 0 0 2px #fff inset;background:transparent none;color:#fff;text-shadow:none!important}.ui.inverted.buttons .button{margin:0 0 0 -2px}.ui.inverted.buttons .button:first-child{margin-left:0}.ui.inverted.vertical.buttons .button{margin:0 0 -2px}.ui.inverted.vertical.buttons .button:first-child{margin-top:0}.ui.inverted.button:hover{background:#FFFFFF;box-shadow:0 0 0 2px #fff inset;color:#000c}.ui.inverted.button:focus,.ui.inverted.button.active{background:#FFFFFF;box-shadow:0 0 0 2px #fff inset;color:#000c}.ui.inverted.button.active:focus{background:#DCDDDE;box-shadow:0 0 0 2px #dcddde inset;color:#000c}.ui.labeled.button:not(.icon){display:inline-flex;flex-direction:row;background:none;padding:0!important;border:none;box-shadow:none}.ui.labeled.button>.button{margin:0}.ui.labeled.button>.label{display:flex;align-items:center;margin:0 0 0 -1px!important;font-size:1em;padding:"";border-color:#22242626}.ui.labeled.button>.tag.label:before{width:1.85em;height:1.85em}.ui.labeled.button:not([class*="left labeled"])>.button{border-top-right-radius:0;border-bottom-right-radius:0}.ui.labeled.button:not([class*="left labeled"])>.label{border-top-left-radius:0;border-bottom-left-radius:0}.ui[class*="left labeled"].button>.button{border-top-left-radius:0;border-bottom-left-radius:0}.ui[class*="left labeled"].button>.label{border-top-right-radius:0;border-bottom-right-radius:0}.ui.facebook.button{background-color:#3b5998;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 #22242626 inset}.ui.facebook.button:hover{background-color:#304d8a;color:#fff;text-shadow:none}.ui.facebook.button:active{background-color:#2d4373;color:#fff;text-shadow:none}.ui.twitter.button{background-color:#1da1f2;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 #22242626 inset}.ui.twitter.button:hover{background-color:#0298f3;color:#fff;text-shadow:none}.ui.twitter.button:active{background-color:#0c85d0;color:#fff;text-shadow:none}.ui.google.plus.button{background-color:#dd4b39;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 #22242626 inset}.ui.google.plus.button:hover{background-color:#e0321c;color:#fff;text-shadow:none}.ui.google.plus.button:active{background-color:#c23321;color:#fff;text-shadow:none}.ui.linkedin.button{background-color:#0077b5;color:#fff;text-shadow:none}.ui.linkedin.button:hover{background-color:#00669c;color:#fff;text-shadow:none}.ui.linkedin.button:active{background-color:#005582;color:#fff;text-shadow:none}.ui.youtube.button{background-color:red;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 #22242626 inset}.ui.youtube.button:hover{background-color:#e60000;color:#fff;text-shadow:none}.ui.youtube.button:active{background-color:#c00;color:#fff;text-shadow:none}.ui.instagram.button{background-color:#49769c;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 #22242626 inset}.ui.instagram.button:hover{background-color:#3d698e;color:#fff;text-shadow:none}.ui.instagram.button:active{background-color:#395c79;color:#fff;text-shadow:none}.ui.pinterest.button{background-color:#bd081c;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 #22242626 inset}.ui.pinterest.button:hover{background-color:#ac0013;color:#fff;text-shadow:none}.ui.pinterest.button:active{background-color:#8c0615;color:#fff;text-shadow:none}.ui.vk.button{background-color:#45668e;color:#fff;background-image:none;box-shadow:0 0 #22242626 inset}.ui.vk.button:hover{background-color:#395980;color:#fff}.ui.vk.button:active{background-color:#344d6c;color:#fff}.ui.whatsapp.button{background-color:#25d366;color:#fff;background-image:none;box-shadow:0 0 #22242626 inset}.ui.whatsapp.button:hover{background-color:#19c55a;color:#fff}.ui.whatsapp.button:active{background-color:#1da851;color:#fff}.ui.telegram.button{background-color:#08c;color:#fff;background-image:none;box-shadow:0 0 #22242626 inset}.ui.telegram.button:hover{background-color:#0077b3;color:#fff}.ui.telegram.button:active{background-color:#069;color:#fff}.ui.button>.icon:not(.button){height:auto;opacity:.8;transition:opacity .1s ease;color:""}.ui.button:not(.icon)>.icon:not(.button):not(.dropdown),.ui.button:not(.icon)>.icons:not(.button):not(.dropdown){margin:0 .42857143em 0 -.21428571em;vertical-align:baseline}.ui.button:not(.icon)>.icons:not(.button):not(.dropdown)>.icon{vertical-align:baseline}.ui.button:not(.icon)>.right.icon:not(.button):not(.dropdown){margin:0 -.21428571em 0 .42857143em}.ui[class*="left floated"].buttons,.ui[class*="left floated"].button{float:left;margin-left:0;margin-right:.25em}.ui[class*="right floated"].buttons,.ui[class*="right floated"].button{float:right;margin-right:0;margin-left:.25em}.ui.compact.buttons .button,.ui.compact.button{padding:.58928571em 1.125em}.ui.compact.icon.buttons .button,.ui.compact.icon.button{padding:.58928571em}.ui.compact.labeled.icon.buttons .button,.ui.compact.labeled.icon.button{padding:.58928571em 3.69642857em}.ui.compact.labeled.icon.buttons .button>.icon,.ui.compact.labeled.icon.button>.icon{padding:.58928571em 0}.ui.buttons .button,.ui.buttons .or,.ui.button{font-size:1rem}.ui.mini.buttons .dropdown,.ui.mini.buttons .dropdown .menu>.item,.ui.mini.buttons .button,.ui.mini.buttons .or,.ui.ui.ui.ui.mini.button{font-size:.78571429rem}.ui.tiny.buttons .dropdown,.ui.tiny.buttons .dropdown .menu>.item,.ui.tiny.buttons .button,.ui.tiny.buttons .or,.ui.ui.ui.ui.tiny.button{font-size:.85714286rem}.ui.small.buttons .dropdown,.ui.small.buttons .dropdown .menu>.item,.ui.small.buttons .button,.ui.small.buttons .or,.ui.ui.ui.ui.small.button{font-size:.92857143rem}.ui.large.buttons .dropdown,.ui.large.buttons .dropdown .menu>.item,.ui.large.buttons .button,.ui.large.buttons .or,.ui.ui.ui.ui.large.button{font-size:1.14285714rem}.ui.big.buttons .dropdown,.ui.big.buttons .dropdown .menu>.item,.ui.big.buttons .button,.ui.big.buttons .or,.ui.ui.ui.ui.big.button{font-size:1.28571429rem}.ui.huge.buttons .dropdown,.ui.huge.buttons .dropdown .menu>.item,.ui.huge.buttons .button,.ui.huge.buttons .or,.ui.ui.ui.ui.huge.button{font-size:1.42857143rem}.ui.massive.buttons .dropdown,.ui.massive.buttons .dropdown .menu>.item,.ui.massive.buttons .button,.ui.massive.buttons .or,.ui.ui.ui.ui.massive.button{font-size:1.71428571rem}.ui.icon.buttons .button,.ui.icon.button:not(.animated):not(.compact){padding:.78571429em}.ui.animated.icon.button>.content>.icon,.ui.icon.buttons .button>.icon,.ui.icon.button>.icon{opacity:.9;margin:0!important;vertical-align:top}.ui.animated.button>.content>.icon{vertical-align:top}.ui.basic.buttons .button,.ui.basic.button{background:transparent none;color:#0009;font-weight:400;border-radius:.28571429rem;text-transform:none;text-shadow:none!important;box-shadow:0 0 0 1px #22242626 inset}.ui.basic.buttons{box-shadow:none;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem}.ui.basic.buttons .button{border-radius:0}.ui.basic.buttons .button:hover,.ui.basic.button:hover{background:#FFFFFF;color:#000c;box-shadow:0 0 0 1px #22242659 inset,0 0 #22242626 inset}.ui.basic.buttons .button:focus,.ui.basic.button:focus{background:#FFFFFF;color:#000c;box-shadow:0 0 0 1px #22242659 inset,0 0 #22242626 inset}.ui.basic.buttons .button:active,.ui.basic.button:active{background:#F8F8F8;color:#000000e6;box-shadow:0 0 0 1px #00000026 inset,0 1px 4px #22242626 inset}.ui.basic.buttons .active.button,.ui.basic.active.button{background:rgba(0,0,0,.05);box-shadow:"";color:#000000f2}.ui.basic.buttons .active.button:hover,.ui.basic.active.button:hover{background-color:#0000000d}.ui.basic.buttons .button:hover{box-shadow:0 0 0 1px #22242659 inset,0 0 0 0 #22242626 inset inset}.ui.basic.buttons .button:active{box-shadow:0 0 0 1px #00000026 inset,0 1px 4px 0 #22242626 inset inset}.ui.basic.buttons .active.button{box-shadow:""}.ui.basic.inverted.buttons .button,.ui.basic.inverted.button{background-color:transparent;color:#f9fafb;box-shadow:0 0 0 2px #ffffff80 inset}.ui.basic.inverted.buttons .button:hover,.ui.basic.inverted.button:hover{color:#fff;box-shadow:0 0 0 2px #fff inset}.ui.basic.inverted.buttons .button:focus,.ui.basic.inverted.button:focus{color:#fff;box-shadow:0 0 0 2px #fff inset}.ui.basic.inverted.buttons .button:active,.ui.basic.inverted.button:active{background-color:#ffffff14;color:#fff;box-shadow:0 0 0 2px #ffffffe6 inset}.ui.basic.inverted.buttons .active.button,.ui.basic.inverted.active.button{background-color:#ffffff14;color:#fff;text-shadow:none;box-shadow:0 0 0 2px #ffffffb3 inset}.ui.basic.inverted.buttons .active.button:hover,.ui.basic.inverted.active.button:hover{background-color:#ffffff26;box-shadow:0 0 0 2px #fff inset}.ui.basic.buttons .button{border-left:1px solid rgba(34,36,38,.15);box-shadow:none}.ui.basic.vertical.buttons .button{border-left:none;border-left-width:0;border-top:1px solid rgba(34,36,38,.15)}.ui.basic.vertical.buttons .button:first-child{border-top-width:0}.ui.tertiary.button{transition:color .1s ease!important;border-radius:0;margin:.28571429em .25em .28571429em 0!important;padding:.5em!important;box-shadow:none;color:#0009;background:none}.ui.tertiary.button:hover{box-shadow:inset 0 -.2em #666;color:#333;background:none}.ui.tertiary.button:focus{box-shadow:inset 0 -.2em #666;color:#333;background:none}.ui.tertiary.button:active{box-shadow:inset 0 -.2em #999;border-radius:.28571429rem .28571429rem 0 0;color:#666;background:none}.ui.labeled.icon.buttons .button,.ui.labeled.icon.button{position:relative;padding-left:4.07142857em!important;padding-right:1.5em!important}.ui.labeled.icon.buttons>.button>.icon,.ui.labeled.icon.button>.icon{position:absolute;top:0;left:0;height:100%;line-height:1;border-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit;text-align:center;-webkit-animation:none;animation:none;padding:.78571429em 0;margin:0;width:2.57142857em;background-color:#0000000d;color:"";box-shadow:-1px 0 0 0 transparent inset}.ui[class*="right labeled"].icon.button{padding-right:4.07142857em!important;padding-left:1.5em!important}.ui[class*="right labeled"].icon.button>.icon{left:auto;right:0;border-radius:0;border-top-right-radius:inherit;border-bottom-right-radius:inherit;box-shadow:1px 0 0 0 transparent inset}.ui.labeled.icon.buttons>.button>.icon:before,.ui.labeled.icon.button>.icon:before,.ui.labeled.icon.buttons>.button>.icon:after,.ui.labeled.icon.button>.icon:after{display:block;position:relative;width:100%;top:0;text-align:center}.ui.labeled.icon.buttons .button>.icon{border-radius:0}.ui.labeled.icon.buttons .button:first-child>.icon{border-top-left-radius:.28571429rem;border-bottom-left-radius:.28571429rem}.ui.labeled.icon.buttons .button:last-child>.icon{border-top-right-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.labeled.icon.buttons .button:first-child>.icon{border-radius:0;border-top-left-radius:.28571429rem}.ui.vertical.labeled.icon.buttons .button:last-child>.icon{border-radius:0;border-bottom-left-radius:.28571429rem}.ui.labeled.icon.button>.loading.icon:before{-webkit-animation:loader 2s linear infinite;animation:loader 2s linear infinite}.ui.toggle.buttons .active.button,.ui.buttons .button.toggle.active,.ui.button.toggle.active{background-color:#21ba45;box-shadow:none;text-shadow:none;color:#fff}.ui.button.toggle.active:hover{background-color:#16ab39;text-shadow:none;color:#fff}.ui.circular.button{border-radius:10em}.ui.circular.button>.icon{width:1em;vertical-align:baseline}.ui.buttons .or{position:relative;width:.3em;height:2.57142857em;z-index:3}.ui.buttons .or:before{position:absolute;text-align:center;border-radius:500rem;content:"or";top:50%;left:50%;background-color:#fff;text-shadow:none;margin-top:-.89285714em;margin-left:-.89285714em;width:1.78571429em;height:1.78571429em;line-height:1.78571429em;color:#0006;font-style:normal;font-weight:500;box-shadow:0 0 0 1px transparent inset}.ui.buttons .or[data-text]:before{content:attr(data-text)}.ui.fluid.buttons .or{width:0!important}.ui.fluid.buttons .or:after{display:none}.ui.attached.button{position:relative;display:block;margin:0;border-radius:0;box-shadow:0 0 0 1px #22242626}.ui.attached.top.button{border-radius:.28571429rem .28571429rem 0 0}.ui.attached.bottom.button{border-radius:0 0 .28571429rem .28571429rem}.ui.left.attached.button{display:inline-block;border-left:none;text-align:right;padding-right:.75em;border-radius:.28571429rem 0 0 .28571429rem}.ui.right.attached.button{display:inline-block;text-align:left;padding-left:.75em;border-radius:0 .28571429rem .28571429rem 0}.ui.attached.buttons{position:relative;display:flex;border-radius:0;width:auto!important;z-index:auto;margin-left:-1px;margin-right:-1px}.ui.attached.buttons .button{margin:0}.ui.attached.buttons .button:first-child{border-radius:0}.ui.attached.buttons .button:last-child{border-radius:0}.ui[class*="top attached"].buttons{margin-bottom:-1px;border-radius:.28571429rem .28571429rem 0 0}.ui[class*="top attached"].buttons .button:first-child{border-radius:.28571429rem 0 0}.ui[class*="top attached"].buttons .button:last-child{border-radius:0 .28571429rem 0 0}.ui[class*="bottom attached"].buttons{margin-top:-1px;border-radius:0 0 .28571429rem .28571429rem}.ui[class*="bottom attached"].buttons .button:first-child{border-radius:0 0 0 .28571429rem}.ui[class*="bottom attached"].buttons .button:last-child{border-radius:0 0 .28571429rem}.ui[class*="left attached"].buttons{display:inline-flex;margin-right:0;margin-left:-1px;border-radius:0 .28571429rem .28571429rem 0}.ui[class*="left attached"].buttons .button:first-child{margin-left:-1px;border-radius:0 .28571429rem 0 0}.ui[class*="left attached"].buttons .button:last-child{margin-left:-1px;border-radius:0 0 .28571429rem}.ui[class*="right attached"].buttons{display:inline-flex;margin-left:0;margin-right:-1px;border-radius:.28571429rem 0 0 .28571429rem}.ui[class*="right attached"].buttons .button:first-child{margin-left:-1px;border-radius:.28571429rem 0 0}.ui[class*="right attached"].buttons .button:last-child{margin-left:-1px;border-radius:0 0 0 .28571429rem}.ui.fluid.buttons,.ui.fluid.button{width:100%}.ui.fluid.button{display:block}.ui.two.buttons{width:100%}.ui.two.buttons>.button{width:50%}.ui.three.buttons{width:100%}.ui.three.buttons>.button{width:33.333%}.ui.four.buttons{width:100%}.ui.four.buttons>.button{width:25%}.ui.five.buttons{width:100%}.ui.five.buttons>.button{width:20%}.ui.six.buttons{width:100%}.ui.six.buttons>.button{width:16.666%}.ui.seven.buttons{width:100%}.ui.seven.buttons>.button{width:14.285%}.ui.eight.buttons{width:100%}.ui.eight.buttons>.button{width:12.5%}.ui.nine.buttons{width:100%}.ui.nine.buttons>.button{width:11.11%}.ui.ten.buttons{width:100%}.ui.ten.buttons>.button{width:10%}.ui.eleven.buttons{width:100%}.ui.eleven.buttons>.button{width:9.09%}.ui.twelve.buttons{width:100%}.ui.twelve.buttons>.button{width:8.3333%}.ui.fluid.vertical.buttons,.ui.fluid.vertical.buttons>.button{display:flex;width:auto;justify-content:center}.ui.two.vertical.buttons>.button{height:50%}.ui.three.vertical.buttons>.button{height:33.333%}.ui.four.vertical.buttons>.button{height:25%}.ui.five.vertical.buttons>.button{height:20%}.ui.six.vertical.buttons>.button{height:16.666%}.ui.seven.vertical.buttons>.button{height:14.285%}.ui.eight.vertical.buttons>.button{height:12.5%}.ui.nine.vertical.buttons>.button{height:11.11%}.ui.ten.vertical.buttons>.button{height:10%}.ui.eleven.vertical.buttons>.button{height:9.09%}.ui.twelve.vertical.buttons>.button{height:8.3333%}.ui.primary.buttons .button,.ui.primary.button{background-color:#2185d0;color:#fff;text-shadow:none;background-image:none}.ui.primary.button{box-shadow:0 0 #22242626 inset}.ui.primary.buttons .button:hover,.ui.primary.button:hover{background-color:#1678c2;color:#fff;text-shadow:none}.ui.primary.buttons .button:focus,.ui.primary.button:focus{background-color:#0d71bb;color:#fff;text-shadow:none}.ui.primary.buttons .button:active,.ui.primary.button:active{background-color:#1a69a4;color:#fff;text-shadow:none}.ui.primary.buttons .active.button,.ui.primary.buttons .active.button:active,.ui.primary.active.button,.ui.primary.button .active.button:active{background-color:#1279c6;color:#fff;text-shadow:none}.ui.basic.primary.buttons .button,.ui.basic.primary.button{background:transparent;box-shadow:0 0 0 1px #2185d0 inset;color:#2185d0}.ui.basic.primary.buttons .button:hover,.ui.basic.primary.button:hover{background:transparent;box-shadow:0 0 0 1px #1678c2 inset;color:#1678c2}.ui.basic.primary.buttons .button:focus,.ui.basic.primary.button:focus{background:transparent;box-shadow:0 0 0 1px #0d71bb inset;color:#1678c2}.ui.basic.primary.buttons .active.button,.ui.basic.primary.active.button{background:transparent;box-shadow:0 0 0 1px #1279c6 inset;color:#1a69a4}.ui.basic.primary.buttons .button:active,.ui.basic.primary.button:active{box-shadow:0 0 0 1px #1a69a4 inset;color:#1a69a4}.ui.buttons:not(.vertical)>.basic.primary.button:not(:first-child){margin-left:-1px}.ui.inverted.primary.buttons .button,.ui.inverted.primary.button{background-color:transparent;box-shadow:0 0 0 2px #54c8ff inset;color:#54c8ff}.ui.inverted.primary.buttons .button:hover,.ui.inverted.primary.button:hover,.ui.inverted.primary.buttons .button:focus,.ui.inverted.primary.button:focus,.ui.inverted.primary.buttons .button.active,.ui.inverted.primary.button.active,.ui.inverted.primary.buttons .button:active,.ui.inverted.primary.button:active{box-shadow:none;color:#fff}.ui.inverted.primary.buttons .button:hover,.ui.inverted.primary.button:hover{background-color:#21b8ff}.ui.inverted.primary.buttons .button:focus,.ui.inverted.primary.button:focus{background-color:#2bbbff}.ui.inverted.primary.buttons .active.button,.ui.inverted.primary.active.button{background-color:#3ac0ff}.ui.inverted.primary.buttons .button:active,.ui.inverted.primary.button:active{background-color:#21b8ff}.ui.inverted.primary.basic.buttons .button,.ui.inverted.primary.buttons .basic.button,.ui.inverted.primary.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.primary.basic.buttons .button:hover,.ui.inverted.primary.buttons .basic.button:hover,.ui.inverted.primary.basic.button:hover{box-shadow:0 0 0 2px #21b8ff inset;color:#54c8ff}.ui.inverted.primary.basic.buttons .button:focus,.ui.inverted.primary.basic.buttons .button:focus,.ui.inverted.primary.basic.button:focus{box-shadow:0 0 0 2px #2bbbff inset;color:#54c8ff}.ui.inverted.primary.basic.buttons .active.button,.ui.inverted.primary.buttons .basic.active.button,.ui.inverted.primary.basic.active.button{box-shadow:0 0 0 2px #3ac0ff inset;color:#54c8ff}.ui.inverted.primary.basic.buttons .button:active,.ui.inverted.primary.buttons .basic.button:active,.ui.inverted.primary.basic.button:active{box-shadow:0 0 0 2px #21b8ff inset;color:#54c8ff}.ui.tertiary.primary.buttons .button,.ui.tertiary.primary.buttons .tertiary.button,.ui.tertiary.primary.button{background:transparent;box-shadow:none;color:#2185d0}.ui.tertiary.primary.buttons .button:hover,.ui.tertiary.primary.buttons button:hover,.ui.tertiary.primary.button:hover{box-shadow:inset 0 -.2em #2b75ac;color:#2b75ac}.ui.tertiary.primary.buttons .button:focus,.ui.tertiary.primary.buttons .tertiary.button:focus,.ui.tertiary.primary.button:focus{box-shadow:inset 0 -.2em #216ea7;color:#216ea7}.ui.tertiary.primary.buttons .active.button,.ui.tertiary.primary.buttons .tertiary.active.button,.ui.tertiary.primary.active.button,.ui.tertiary.primary.buttons .button:active,.ui.tertiary.primary.buttons .tertiary.button:active,.ui.tertiary.primary.button:active{box-shadow:inset 0 -.2em #007bd8;color:#1279c6}.ui.secondary.buttons .button,.ui.secondary.button{background-color:#1b1c1d;color:#fff;text-shadow:none;background-image:none}.ui.secondary.button{box-shadow:0 0 #22242626 inset}.ui.secondary.buttons .button:hover,.ui.secondary.button:hover{background-color:#27292a;color:#fff;text-shadow:none}.ui.secondary.buttons .button:focus,.ui.secondary.button:focus{background-color:#2e3032;color:#fff;text-shadow:none}.ui.secondary.buttons .button:active,.ui.secondary.button:active{background-color:#343637;color:#fff;text-shadow:none}.ui.secondary.buttons .active.button,.ui.secondary.buttons .active.button:active,.ui.secondary.active.button,.ui.secondary.button .active.button:active{background-color:#27292a;color:#fff;text-shadow:none}.ui.basic.secondary.buttons .button,.ui.basic.secondary.button{background:transparent;box-shadow:0 0 0 1px #1b1c1d inset;color:#1b1c1d}.ui.basic.secondary.buttons .button:hover,.ui.basic.secondary.button:hover{background:transparent;box-shadow:0 0 0 1px #27292a inset;color:#27292a}.ui.basic.secondary.buttons .button:focus,.ui.basic.secondary.button:focus{background:transparent;box-shadow:0 0 0 1px #2e3032 inset;color:#27292a}.ui.basic.secondary.buttons .active.button,.ui.basic.secondary.active.button{background:transparent;box-shadow:0 0 0 1px #27292a inset;color:#343637}.ui.basic.secondary.buttons .button:active,.ui.basic.secondary.button:active{box-shadow:0 0 0 1px #343637 inset;color:#343637}.ui.buttons:not(.vertical)>.basic.secondary.button:not(:first-child){margin-left:-1px}.ui.inverted.secondary.buttons .button,.ui.inverted.secondary.button{background-color:transparent;box-shadow:0 0 0 2px #545454 inset;color:#545454}.ui.inverted.secondary.buttons .button:hover,.ui.inverted.secondary.button:hover,.ui.inverted.secondary.buttons .button:focus,.ui.inverted.secondary.button:focus,.ui.inverted.secondary.buttons .button.active,.ui.inverted.secondary.button.active,.ui.inverted.secondary.buttons .button:active,.ui.inverted.secondary.button:active{box-shadow:none;color:#fff}.ui.inverted.secondary.buttons .button:hover,.ui.inverted.secondary.button:hover{background-color:#6e6e6e}.ui.inverted.secondary.buttons .button:focus,.ui.inverted.secondary.button:focus{background-color:#686868}.ui.inverted.secondary.buttons .active.button,.ui.inverted.secondary.active.button{background-color:#616161}.ui.inverted.secondary.buttons .button:active,.ui.inverted.secondary.button:active{background-color:#6e6e6e}.ui.inverted.secondary.basic.buttons .button,.ui.inverted.secondary.buttons .basic.button,.ui.inverted.secondary.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.secondary.basic.buttons .button:hover,.ui.inverted.secondary.buttons .basic.button:hover,.ui.inverted.secondary.basic.button:hover{box-shadow:0 0 0 2px #6e6e6e inset;color:#545454}.ui.inverted.secondary.basic.buttons .button:focus,.ui.inverted.secondary.basic.buttons .button:focus,.ui.inverted.secondary.basic.button:focus{box-shadow:0 0 0 2px #686868 inset;color:#545454}.ui.inverted.secondary.basic.buttons .active.button,.ui.inverted.secondary.buttons .basic.active.button,.ui.inverted.secondary.basic.active.button{box-shadow:0 0 0 2px #616161 inset;color:#545454}.ui.inverted.secondary.basic.buttons .button:active,.ui.inverted.secondary.buttons .basic.button:active,.ui.inverted.secondary.basic.button:active{box-shadow:0 0 0 2px #6e6e6e inset;color:#545454}.ui.tertiary.secondary.buttons .button,.ui.tertiary.secondary.buttons .tertiary.button,.ui.tertiary.secondary.button{background:transparent;box-shadow:none;color:#1b1c1d}.ui.tertiary.secondary.buttons .button:hover,.ui.tertiary.secondary.buttons button:hover,.ui.tertiary.secondary.button:hover{box-shadow:inset 0 -.2em #292929;color:#292929}.ui.tertiary.secondary.buttons .button:focus,.ui.tertiary.secondary.buttons .tertiary.button:focus,.ui.tertiary.secondary.button:focus{box-shadow:inset 0 -.2em #303030;color:#303030}.ui.tertiary.secondary.buttons .active.button,.ui.tertiary.secondary.buttons .tertiary.active.button,.ui.tertiary.secondary.active.button,.ui.tertiary.secondary.buttons .button:active,.ui.tertiary.secondary.buttons .tertiary.button:active,.ui.tertiary.secondary.button:active{box-shadow:inset 0 -.2em #1f2933;color:#27292a}.ui.red.buttons .button,.ui.red.button{background-color:#db2828;color:#fff;text-shadow:none;background-image:none}.ui.red.button{box-shadow:0 0 #22242626 inset}.ui.red.buttons .button:hover,.ui.red.button:hover{background-color:#d01919;color:#fff;text-shadow:none}.ui.red.buttons .button:focus,.ui.red.button:focus{background-color:#ca1010;color:#fff;text-shadow:none}.ui.red.buttons .button:active,.ui.red.button:active{background-color:#b21e1e;color:#fff;text-shadow:none}.ui.red.buttons .active.button,.ui.red.buttons .active.button:active,.ui.red.active.button,.ui.red.button .active.button:active{background-color:#d41515;color:#fff;text-shadow:none}.ui.basic.red.buttons .button,.ui.basic.red.button{background:transparent;box-shadow:0 0 0 1px #db2828 inset;color:#db2828}.ui.basic.red.buttons .button:hover,.ui.basic.red.button:hover{background:transparent;box-shadow:0 0 0 1px #d01919 inset;color:#d01919}.ui.basic.red.buttons .button:focus,.ui.basic.red.button:focus{background:transparent;box-shadow:0 0 0 1px #ca1010 inset;color:#d01919}.ui.basic.red.buttons .active.button,.ui.basic.red.active.button{background:transparent;box-shadow:0 0 0 1px #d41515 inset;color:#b21e1e}.ui.basic.red.buttons .button:active,.ui.basic.red.button:active{box-shadow:0 0 0 1px #b21e1e inset;color:#b21e1e}.ui.buttons:not(.vertical)>.basic.red.button:not(:first-child){margin-left:-1px}.ui.inverted.red.buttons .button,.ui.inverted.red.button{background-color:transparent;box-shadow:0 0 0 2px #ff695e inset;color:#ff695e}.ui.inverted.red.buttons .button:hover,.ui.inverted.red.button:hover,.ui.inverted.red.buttons .button:focus,.ui.inverted.red.button:focus,.ui.inverted.red.buttons .button.active,.ui.inverted.red.button.active,.ui.inverted.red.buttons .button:active,.ui.inverted.red.button:active{box-shadow:none;color:#fff}.ui.inverted.red.buttons .button:hover,.ui.inverted.red.button:hover{background-color:#ff392b}.ui.inverted.red.buttons .button:focus,.ui.inverted.red.button:focus{background-color:#ff4335}.ui.inverted.red.buttons .active.button,.ui.inverted.red.active.button{background-color:#ff5144}.ui.inverted.red.buttons .button:active,.ui.inverted.red.button:active{background-color:#ff392b}.ui.inverted.red.basic.buttons .button,.ui.inverted.red.buttons .basic.button,.ui.inverted.red.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.red.basic.buttons .button:hover,.ui.inverted.red.buttons .basic.button:hover,.ui.inverted.red.basic.button:hover{box-shadow:0 0 0 2px #ff392b inset;color:#ff695e}.ui.inverted.red.basic.buttons .button:focus,.ui.inverted.red.basic.buttons .button:focus,.ui.inverted.red.basic.button:focus{box-shadow:0 0 0 2px #ff4335 inset;color:#ff695e}.ui.inverted.red.basic.buttons .active.button,.ui.inverted.red.buttons .basic.active.button,.ui.inverted.red.basic.active.button{box-shadow:0 0 0 2px #ff5144 inset;color:#ff695e}.ui.inverted.red.basic.buttons .button:active,.ui.inverted.red.buttons .basic.button:active,.ui.inverted.red.basic.button:active{box-shadow:0 0 0 2px #ff392b inset;color:#ff695e}.ui.tertiary.red.buttons .button,.ui.tertiary.red.buttons .tertiary.button,.ui.tertiary.red.button{background:transparent;box-shadow:none;color:#db2828}.ui.tertiary.red.buttons .button:hover,.ui.tertiary.red.buttons button:hover,.ui.tertiary.red.button:hover{box-shadow:inset 0 -.2em #b93131;color:#b93131}.ui.tertiary.red.buttons .button:focus,.ui.tertiary.red.buttons .tertiary.button:focus,.ui.tertiary.red.button:focus{box-shadow:inset 0 -.2em #b52626;color:#b52626}.ui.tertiary.red.buttons .active.button,.ui.tertiary.red.buttons .tertiary.active.button,.ui.tertiary.red.active.button,.ui.tertiary.red.buttons .button:active,.ui.tertiary.red.buttons .tertiary.button:active,.ui.tertiary.red.button:active{box-shadow:inset 0 -.2em #ea0000;color:#d41515}.ui.orange.buttons .button,.ui.orange.button{background-color:#f2711c;color:#fff;text-shadow:none;background-image:none}.ui.orange.button{box-shadow:0 0 #22242626 inset}.ui.orange.buttons .button:hover,.ui.orange.button:hover{background-color:#f26202;color:#fff;text-shadow:none}.ui.orange.buttons .button:focus,.ui.orange.button:focus{background-color:#e55b00;color:#fff;text-shadow:none}.ui.orange.buttons .button:active,.ui.orange.button:active{background-color:#cf590c;color:#fff;text-shadow:none}.ui.orange.buttons .active.button,.ui.orange.buttons .active.button:active,.ui.orange.active.button,.ui.orange.button .active.button:active{background-color:#f56100;color:#fff;text-shadow:none}.ui.basic.orange.buttons .button,.ui.basic.orange.button{background:transparent;box-shadow:0 0 0 1px #f2711c inset;color:#f2711c}.ui.basic.orange.buttons .button:hover,.ui.basic.orange.button:hover{background:transparent;box-shadow:0 0 0 1px #f26202 inset;color:#f26202}.ui.basic.orange.buttons .button:focus,.ui.basic.orange.button:focus{background:transparent;box-shadow:0 0 0 1px #e55b00 inset;color:#f26202}.ui.basic.orange.buttons .active.button,.ui.basic.orange.active.button{background:transparent;box-shadow:0 0 0 1px #f56100 inset;color:#cf590c}.ui.basic.orange.buttons .button:active,.ui.basic.orange.button:active{box-shadow:0 0 0 1px #cf590c inset;color:#cf590c}.ui.buttons:not(.vertical)>.basic.orange.button:not(:first-child){margin-left:-1px}.ui.inverted.orange.buttons .button,.ui.inverted.orange.button{background-color:transparent;box-shadow:0 0 0 2px #ff851b inset;color:#ff851b}.ui.inverted.orange.buttons .button:hover,.ui.inverted.orange.button:hover,.ui.inverted.orange.buttons .button:focus,.ui.inverted.orange.button:focus,.ui.inverted.orange.buttons .button.active,.ui.inverted.orange.button.active,.ui.inverted.orange.buttons .button:active,.ui.inverted.orange.button:active{box-shadow:none;color:#fff}.ui.inverted.orange.buttons .button:hover,.ui.inverted.orange.button:hover{background-color:#e76b00}.ui.inverted.orange.buttons .button:focus,.ui.inverted.orange.button:focus{background-color:#f17000}.ui.inverted.orange.buttons .active.button,.ui.inverted.orange.active.button{background-color:#ff7701}.ui.inverted.orange.buttons .button:active,.ui.inverted.orange.button:active{background-color:#e76b00}.ui.inverted.orange.basic.buttons .button,.ui.inverted.orange.buttons .basic.button,.ui.inverted.orange.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.orange.basic.buttons .button:hover,.ui.inverted.orange.buttons .basic.button:hover,.ui.inverted.orange.basic.button:hover{box-shadow:0 0 0 2px #e76b00 inset;color:#ff851b}.ui.inverted.orange.basic.buttons .button:focus,.ui.inverted.orange.basic.buttons .button:focus,.ui.inverted.orange.basic.button:focus{box-shadow:0 0 0 2px #f17000 inset;color:#ff851b}.ui.inverted.orange.basic.buttons .active.button,.ui.inverted.orange.buttons .basic.active.button,.ui.inverted.orange.basic.active.button{box-shadow:0 0 0 2px #ff7701 inset;color:#ff851b}.ui.inverted.orange.basic.buttons .button:active,.ui.inverted.orange.buttons .basic.button:active,.ui.inverted.orange.basic.button:active{box-shadow:0 0 0 2px #e76b00 inset;color:#ff851b}.ui.tertiary.orange.buttons .button,.ui.tertiary.orange.buttons .tertiary.button,.ui.tertiary.orange.button{background:transparent;box-shadow:none;color:#f2711c}.ui.tertiary.orange.buttons .button:hover,.ui.tertiary.orange.buttons button:hover,.ui.tertiary.orange.button:hover{box-shadow:inset 0 -.2em #da671b;color:#da671b}.ui.tertiary.orange.buttons .button:focus,.ui.tertiary.orange.buttons .tertiary.button:focus,.ui.tertiary.orange.button:focus{box-shadow:inset 0 -.2em #ce6017;color:#ce6017}.ui.tertiary.orange.buttons .active.button,.ui.tertiary.orange.buttons .tertiary.active.button,.ui.tertiary.orange.active.button,.ui.tertiary.orange.buttons .button:active,.ui.tertiary.orange.buttons .tertiary.button:active,.ui.tertiary.orange.button:active{box-shadow:inset 0 -.2em #f56100;color:#f56100}.ui.yellow.buttons .button,.ui.yellow.button{background-color:#fbbd08;color:#fff;text-shadow:none;background-image:none}.ui.yellow.button{box-shadow:0 0 #22242626 inset}.ui.yellow.buttons .button:hover,.ui.yellow.button:hover{background-color:#eaae00;color:#fff;text-shadow:none}.ui.yellow.buttons .button:focus,.ui.yellow.button:focus{background-color:#daa300;color:#fff;text-shadow:none}.ui.yellow.buttons .button:active,.ui.yellow.button:active{background-color:#cd9903;color:#fff;text-shadow:none}.ui.yellow.buttons .active.button,.ui.yellow.buttons .active.button:active,.ui.yellow.active.button,.ui.yellow.button .active.button:active{background-color:#eaae00;color:#fff;text-shadow:none}.ui.basic.yellow.buttons .button,.ui.basic.yellow.button{background:transparent;box-shadow:0 0 0 1px #fbbd08 inset;color:#fbbd08}.ui.basic.yellow.buttons .button:hover,.ui.basic.yellow.button:hover{background:transparent;box-shadow:0 0 0 1px #eaae00 inset;color:#eaae00}.ui.basic.yellow.buttons .button:focus,.ui.basic.yellow.button:focus{background:transparent;box-shadow:0 0 0 1px #daa300 inset;color:#eaae00}.ui.basic.yellow.buttons .active.button,.ui.basic.yellow.active.button{background:transparent;box-shadow:0 0 0 1px #eaae00 inset;color:#cd9903}.ui.basic.yellow.buttons .button:active,.ui.basic.yellow.button:active{box-shadow:0 0 0 1px #cd9903 inset;color:#cd9903}.ui.buttons:not(.vertical)>.basic.yellow.button:not(:first-child){margin-left:-1px}.ui.inverted.yellow.buttons .button,.ui.inverted.yellow.button{background-color:transparent;box-shadow:0 0 0 2px #ffe21f inset;color:#ffe21f}.ui.inverted.yellow.buttons .button:hover,.ui.inverted.yellow.button:hover,.ui.inverted.yellow.buttons .button:focus,.ui.inverted.yellow.button:focus,.ui.inverted.yellow.buttons .button.active,.ui.inverted.yellow.button.active,.ui.inverted.yellow.buttons .button:active,.ui.inverted.yellow.button:active{box-shadow:none;color:#0009}.ui.inverted.yellow.buttons .button:hover,.ui.inverted.yellow.button:hover{background-color:#ebcd00}.ui.inverted.yellow.buttons .button:focus,.ui.inverted.yellow.button:focus{background-color:#f5d500}.ui.inverted.yellow.buttons .active.button,.ui.inverted.yellow.active.button{background-color:#ffdf05}.ui.inverted.yellow.buttons .button:active,.ui.inverted.yellow.button:active{background-color:#ebcd00}.ui.inverted.yellow.basic.buttons .button,.ui.inverted.yellow.buttons .basic.button,.ui.inverted.yellow.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.yellow.basic.buttons .button:hover,.ui.inverted.yellow.buttons .basic.button:hover,.ui.inverted.yellow.basic.button:hover{box-shadow:0 0 0 2px #ebcd00 inset;color:#ffe21f}.ui.inverted.yellow.basic.buttons .button:focus,.ui.inverted.yellow.basic.buttons .button:focus,.ui.inverted.yellow.basic.button:focus{box-shadow:0 0 0 2px #f5d500 inset;color:#ffe21f}.ui.inverted.yellow.basic.buttons .active.button,.ui.inverted.yellow.buttons .basic.active.button,.ui.inverted.yellow.basic.active.button{box-shadow:0 0 0 2px #ffdf05 inset;color:#ffe21f}.ui.inverted.yellow.basic.buttons .button:active,.ui.inverted.yellow.buttons .basic.button:active,.ui.inverted.yellow.basic.button:active{box-shadow:0 0 0 2px #ebcd00 inset;color:#ffe21f}.ui.tertiary.yellow.buttons .button,.ui.tertiary.yellow.buttons .tertiary.button,.ui.tertiary.yellow.button{background:transparent;box-shadow:none;color:#fbbd08}.ui.tertiary.yellow.buttons .button:hover,.ui.tertiary.yellow.buttons button:hover,.ui.tertiary.yellow.button:hover{box-shadow:inset 0 -.2em #d2a217;color:#d2a217}.ui.tertiary.yellow.buttons .button:focus,.ui.tertiary.yellow.buttons .tertiary.button:focus,.ui.tertiary.yellow.button:focus{box-shadow:inset 0 -.2em #c49816;color:#c49816}.ui.tertiary.yellow.buttons .active.button,.ui.tertiary.yellow.buttons .tertiary.active.button,.ui.tertiary.yellow.active.button,.ui.tertiary.yellow.buttons .button:active,.ui.tertiary.yellow.buttons .tertiary.button:active,.ui.tertiary.yellow.button:active{box-shadow:inset 0 -.2em #eaae00;color:#eaae00}.ui.olive.buttons .button,.ui.olive.button{background-color:#b5cc18;color:#fff;text-shadow:none;background-image:none}.ui.olive.button{box-shadow:0 0 #22242626 inset}.ui.olive.buttons .button:hover,.ui.olive.button:hover{background-color:#a7bd0d;color:#fff;text-shadow:none}.ui.olive.buttons .button:focus,.ui.olive.button:focus{background-color:#a0b605;color:#fff;text-shadow:none}.ui.olive.buttons .button:active,.ui.olive.button:active{background-color:#8d9e13;color:#fff;text-shadow:none}.ui.olive.buttons .active.button,.ui.olive.buttons .active.button:active,.ui.olive.active.button,.ui.olive.button .active.button:active{background-color:#aac109;color:#fff;text-shadow:none}.ui.basic.olive.buttons .button,.ui.basic.olive.button{background:transparent;box-shadow:0 0 0 1px #b5cc18 inset;color:#b5cc18}.ui.basic.olive.buttons .button:hover,.ui.basic.olive.button:hover{background:transparent;box-shadow:0 0 0 1px #a7bd0d inset;color:#a7bd0d}.ui.basic.olive.buttons .button:focus,.ui.basic.olive.button:focus{background:transparent;box-shadow:0 0 0 1px #a0b605 inset;color:#a7bd0d}.ui.basic.olive.buttons .active.button,.ui.basic.olive.active.button{background:transparent;box-shadow:0 0 0 1px #aac109 inset;color:#8d9e13}.ui.basic.olive.buttons .button:active,.ui.basic.olive.button:active{box-shadow:0 0 0 1px #8d9e13 inset;color:#8d9e13}.ui.buttons:not(.vertical)>.basic.olive.button:not(:first-child){margin-left:-1px}.ui.inverted.olive.buttons .button,.ui.inverted.olive.button{background-color:transparent;box-shadow:0 0 0 2px #d9e778 inset;color:#d9e778}.ui.inverted.olive.buttons .button:hover,.ui.inverted.olive.button:hover,.ui.inverted.olive.buttons .button:focus,.ui.inverted.olive.button:focus,.ui.inverted.olive.buttons .button.active,.ui.inverted.olive.button.active,.ui.inverted.olive.buttons .button:active,.ui.inverted.olive.button:active{box-shadow:none;color:#0009}.ui.inverted.olive.buttons .button:hover,.ui.inverted.olive.button:hover{background-color:#d2e745}.ui.inverted.olive.buttons .button:focus,.ui.inverted.olive.button:focus{background-color:#daef47}.ui.inverted.olive.buttons .active.button,.ui.inverted.olive.active.button{background-color:#daed59}.ui.inverted.olive.buttons .button:active,.ui.inverted.olive.button:active{background-color:#cddf4d}.ui.inverted.olive.basic.buttons .button,.ui.inverted.olive.buttons .basic.button,.ui.inverted.olive.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.olive.basic.buttons .button:hover,.ui.inverted.olive.buttons .basic.button:hover,.ui.inverted.olive.basic.button:hover{box-shadow:0 0 0 2px #d2e745 inset;color:#d9e778}.ui.inverted.olive.basic.buttons .button:focus,.ui.inverted.olive.basic.buttons .button:focus,.ui.inverted.olive.basic.button:focus{box-shadow:0 0 0 2px #daef47 inset;color:#d9e778}.ui.inverted.olive.basic.buttons .active.button,.ui.inverted.olive.buttons .basic.active.button,.ui.inverted.olive.basic.active.button{box-shadow:0 0 0 2px #daed59 inset;color:#d9e778}.ui.inverted.olive.basic.buttons .button:active,.ui.inverted.olive.buttons .basic.button:active,.ui.inverted.olive.basic.button:active{box-shadow:0 0 0 2px #cddf4d inset;color:#d9e778}.ui.tertiary.olive.buttons .button,.ui.tertiary.olive.buttons .tertiary.button,.ui.tertiary.olive.button{background:transparent;box-shadow:none;color:#b5cc18}.ui.tertiary.olive.buttons .button:hover,.ui.tertiary.olive.buttons button:hover,.ui.tertiary.olive.button:hover{box-shadow:inset 0 -.2em #98a922;color:#98a922}.ui.tertiary.olive.buttons .button:focus,.ui.tertiary.olive.buttons .tertiary.button:focus,.ui.tertiary.olive.button:focus{box-shadow:inset 0 -.2em #92a418;color:#92a418}.ui.tertiary.olive.buttons .active.button,.ui.tertiary.olive.buttons .tertiary.active.button,.ui.tertiary.olive.active.button,.ui.tertiary.olive.buttons .button:active,.ui.tertiary.olive.buttons .tertiary.button:active,.ui.tertiary.olive.button:active{box-shadow:inset 0 -.2em #b1cb00;color:#aac109}.ui.green.buttons .button,.ui.green.button{background-color:#21ba45;color:#fff;text-shadow:none;background-image:none}.ui.green.button{box-shadow:0 0 #22242626 inset}.ui.green.buttons .button:hover,.ui.green.button:hover{background-color:#16ab39;color:#fff;text-shadow:none}.ui.green.buttons .button:focus,.ui.green.button:focus{background-color:#0ea432;color:#fff;text-shadow:none}.ui.green.buttons .button:active,.ui.green.button:active{background-color:#198f35;color:#fff;text-shadow:none}.ui.green.buttons .active.button,.ui.green.buttons .active.button:active,.ui.green.active.button,.ui.green.button .active.button:active{background-color:#13ae38;color:#fff;text-shadow:none}.ui.basic.green.buttons .button,.ui.basic.green.button{background:transparent;box-shadow:0 0 0 1px #21ba45 inset;color:#21ba45}.ui.basic.green.buttons .button:hover,.ui.basic.green.button:hover{background:transparent;box-shadow:0 0 0 1px #16ab39 inset;color:#16ab39}.ui.basic.green.buttons .button:focus,.ui.basic.green.button:focus{background:transparent;box-shadow:0 0 0 1px #0ea432 inset;color:#16ab39}.ui.basic.green.buttons .active.button,.ui.basic.green.active.button{background:transparent;box-shadow:0 0 0 1px #13ae38 inset;color:#198f35}.ui.basic.green.buttons .button:active,.ui.basic.green.button:active{box-shadow:0 0 0 1px #198f35 inset;color:#198f35}.ui.buttons:not(.vertical)>.basic.green.button:not(:first-child){margin-left:-1px}.ui.inverted.green.buttons .button,.ui.inverted.green.button{background-color:transparent;box-shadow:0 0 0 2px #2ecc40 inset;color:#2ecc40}.ui.inverted.green.buttons .button:hover,.ui.inverted.green.button:hover,.ui.inverted.green.buttons .button:focus,.ui.inverted.green.button:focus,.ui.inverted.green.buttons .button.active,.ui.inverted.green.button.active,.ui.inverted.green.buttons .button:active,.ui.inverted.green.button:active{box-shadow:none;color:#fff}.ui.inverted.green.buttons .button:hover,.ui.inverted.green.button:hover{background-color:#1ea92e}.ui.inverted.green.buttons .button:focus,.ui.inverted.green.button:focus{background-color:#19b82b}.ui.inverted.green.buttons .active.button,.ui.inverted.green.active.button{background-color:#1fc231}.ui.inverted.green.buttons .button:active,.ui.inverted.green.button:active{background-color:#25a233}.ui.inverted.green.basic.buttons .button,.ui.inverted.green.buttons .basic.button,.ui.inverted.green.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.green.basic.buttons .button:hover,.ui.inverted.green.buttons .basic.button:hover,.ui.inverted.green.basic.button:hover{box-shadow:0 0 0 2px #1ea92e inset;color:#2ecc40}.ui.inverted.green.basic.buttons .button:focus,.ui.inverted.green.basic.buttons .button:focus,.ui.inverted.green.basic.button:focus{box-shadow:0 0 0 2px #19b82b inset;color:#2ecc40}.ui.inverted.green.basic.buttons .active.button,.ui.inverted.green.buttons .basic.active.button,.ui.inverted.green.basic.active.button{box-shadow:0 0 0 2px #1fc231 inset;color:#2ecc40}.ui.inverted.green.basic.buttons .button:active,.ui.inverted.green.buttons .basic.button:active,.ui.inverted.green.basic.button:active{box-shadow:0 0 0 2px #25a233 inset;color:#2ecc40}.ui.tertiary.green.buttons .button,.ui.tertiary.green.buttons .tertiary.button,.ui.tertiary.green.button{background:transparent;box-shadow:none;color:#21ba45}.ui.tertiary.green.buttons .button:hover,.ui.tertiary.green.buttons button:hover,.ui.tertiary.green.button:hover{box-shadow:inset 0 -.2em #2a9844;color:#2a9844}.ui.tertiary.green.buttons .button:focus,.ui.tertiary.green.buttons .tertiary.button:focus,.ui.tertiary.green.button:focus{box-shadow:inset 0 -.2em #20923b;color:#20923b}.ui.tertiary.green.buttons .active.button,.ui.tertiary.green.buttons .tertiary.active.button,.ui.tertiary.green.active.button,.ui.tertiary.green.buttons .button:active,.ui.tertiary.green.buttons .tertiary.button:active,.ui.tertiary.green.button:active{box-shadow:inset 0 -.2em #00c22e;color:#13ae38}.ui.teal.buttons .button,.ui.teal.button{background-color:#00b5ad;color:#fff;text-shadow:none;background-image:none}.ui.teal.button{box-shadow:0 0 #22242626 inset}.ui.teal.buttons .button:hover,.ui.teal.button:hover{background-color:#009c95;color:#fff;text-shadow:none}.ui.teal.buttons .button:focus,.ui.teal.button:focus{background-color:#008c86;color:#fff;text-shadow:none}.ui.teal.buttons .button:active,.ui.teal.button:active{background-color:#00827c;color:#fff;text-shadow:none}.ui.teal.buttons .active.button,.ui.teal.buttons .active.button:active,.ui.teal.active.button,.ui.teal.button .active.button:active{background-color:#009c95;color:#fff;text-shadow:none}.ui.basic.teal.buttons .button,.ui.basic.teal.button{background:transparent;box-shadow:0 0 0 1px #00b5ad inset;color:#00b5ad}.ui.basic.teal.buttons .button:hover,.ui.basic.teal.button:hover{background:transparent;box-shadow:0 0 0 1px #009c95 inset;color:#009c95}.ui.basic.teal.buttons .button:focus,.ui.basic.teal.button:focus{background:transparent;box-shadow:0 0 0 1px #008c86 inset;color:#009c95}.ui.basic.teal.buttons .active.button,.ui.basic.teal.active.button{background:transparent;box-shadow:0 0 0 1px #009c95 inset;color:#00827c}.ui.basic.teal.buttons .button:active,.ui.basic.teal.button:active{box-shadow:0 0 0 1px #00827c inset;color:#00827c}.ui.buttons:not(.vertical)>.basic.teal.button:not(:first-child){margin-left:-1px}.ui.inverted.teal.buttons .button,.ui.inverted.teal.button{background-color:transparent;box-shadow:0 0 0 2px #6dffff inset;color:#6dffff}.ui.inverted.teal.buttons .button:hover,.ui.inverted.teal.button:hover,.ui.inverted.teal.buttons .button:focus,.ui.inverted.teal.button:focus,.ui.inverted.teal.buttons .button.active,.ui.inverted.teal.button.active,.ui.inverted.teal.buttons .button:active,.ui.inverted.teal.button:active{box-shadow:none;color:#0009}.ui.inverted.teal.buttons .button:hover,.ui.inverted.teal.button:hover{background-color:#3affff}.ui.inverted.teal.buttons .button:focus,.ui.inverted.teal.button:focus{background-color:#4ff}.ui.inverted.teal.buttons .active.button,.ui.inverted.teal.active.button{background-color:#54ffff}.ui.inverted.teal.buttons .button:active,.ui.inverted.teal.button:active{background-color:#3affff}.ui.inverted.teal.basic.buttons .button,.ui.inverted.teal.buttons .basic.button,.ui.inverted.teal.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.teal.basic.buttons .button:hover,.ui.inverted.teal.buttons .basic.button:hover,.ui.inverted.teal.basic.button:hover{box-shadow:0 0 0 2px #3affff inset;color:#6dffff}.ui.inverted.teal.basic.buttons .button:focus,.ui.inverted.teal.basic.buttons .button:focus,.ui.inverted.teal.basic.button:focus{box-shadow:0 0 0 2px #4ff inset;color:#6dffff}.ui.inverted.teal.basic.buttons .active.button,.ui.inverted.teal.buttons .basic.active.button,.ui.inverted.teal.basic.active.button{box-shadow:0 0 0 2px #54ffff inset;color:#6dffff}.ui.inverted.teal.basic.buttons .button:active,.ui.inverted.teal.buttons .basic.button:active,.ui.inverted.teal.basic.button:active{box-shadow:0 0 0 2px #3affff inset;color:#6dffff}.ui.tertiary.teal.buttons .button,.ui.tertiary.teal.buttons .tertiary.button,.ui.tertiary.teal.button{background:transparent;box-shadow:none;color:#00b5ad}.ui.tertiary.teal.buttons .button:hover,.ui.tertiary.teal.buttons button:hover,.ui.tertiary.teal.button:hover{box-shadow:inset 0 -.2em #108c86;color:#108c86}.ui.tertiary.teal.buttons .button:focus,.ui.tertiary.teal.buttons .tertiary.button:focus,.ui.tertiary.teal.button:focus{box-shadow:inset 0 -.2em #0e7e79;color:#0e7e79}.ui.tertiary.teal.buttons .active.button,.ui.tertiary.teal.buttons .tertiary.active.button,.ui.tertiary.teal.active.button,.ui.tertiary.teal.buttons .button:active,.ui.tertiary.teal.buttons .tertiary.button:active,.ui.tertiary.teal.button:active{box-shadow:inset 0 -.2em #009c95;color:#009c95}.ui.blue.buttons .button,.ui.blue.button{background-color:#2185d0;color:#fff;text-shadow:none;background-image:none}.ui.blue.button{box-shadow:0 0 #22242626 inset}.ui.blue.buttons .button:hover,.ui.blue.button:hover{background-color:#1678c2;color:#fff;text-shadow:none}.ui.blue.buttons .button:focus,.ui.blue.button:focus{background-color:#0d71bb;color:#fff;text-shadow:none}.ui.blue.buttons .button:active,.ui.blue.button:active{background-color:#1a69a4;color:#fff;text-shadow:none}.ui.blue.buttons .active.button,.ui.blue.buttons .active.button:active,.ui.blue.active.button,.ui.blue.button .active.button:active{background-color:#1279c6;color:#fff;text-shadow:none}.ui.basic.blue.buttons .button,.ui.basic.blue.button{background:transparent;box-shadow:0 0 0 1px #2185d0 inset;color:#2185d0}.ui.basic.blue.buttons .button:hover,.ui.basic.blue.button:hover{background:transparent;box-shadow:0 0 0 1px #1678c2 inset;color:#1678c2}.ui.basic.blue.buttons .button:focus,.ui.basic.blue.button:focus{background:transparent;box-shadow:0 0 0 1px #0d71bb inset;color:#1678c2}.ui.basic.blue.buttons .active.button,.ui.basic.blue.active.button{background:transparent;box-shadow:0 0 0 1px #1279c6 inset;color:#1a69a4}.ui.basic.blue.buttons .button:active,.ui.basic.blue.button:active{box-shadow:0 0 0 1px #1a69a4 inset;color:#1a69a4}.ui.buttons:not(.vertical)>.basic.blue.button:not(:first-child){margin-left:-1px}.ui.inverted.blue.buttons .button,.ui.inverted.blue.button{background-color:transparent;box-shadow:0 0 0 2px #54c8ff inset;color:#54c8ff}.ui.inverted.blue.buttons .button:hover,.ui.inverted.blue.button:hover,.ui.inverted.blue.buttons .button:focus,.ui.inverted.blue.button:focus,.ui.inverted.blue.buttons .button.active,.ui.inverted.blue.button.active,.ui.inverted.blue.buttons .button:active,.ui.inverted.blue.button:active{box-shadow:none;color:#fff}.ui.inverted.blue.buttons .button:hover,.ui.inverted.blue.button:hover{background-color:#21b8ff}.ui.inverted.blue.buttons .button:focus,.ui.inverted.blue.button:focus{background-color:#2bbbff}.ui.inverted.blue.buttons .active.button,.ui.inverted.blue.active.button{background-color:#3ac0ff}.ui.inverted.blue.buttons .button:active,.ui.inverted.blue.button:active{background-color:#21b8ff}.ui.inverted.blue.basic.buttons .button,.ui.inverted.blue.buttons .basic.button,.ui.inverted.blue.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.blue.basic.buttons .button:hover,.ui.inverted.blue.buttons .basic.button:hover,.ui.inverted.blue.basic.button:hover{box-shadow:0 0 0 2px #21b8ff inset;color:#54c8ff}.ui.inverted.blue.basic.buttons .button:focus,.ui.inverted.blue.basic.buttons .button:focus,.ui.inverted.blue.basic.button:focus{box-shadow:0 0 0 2px #2bbbff inset;color:#54c8ff}.ui.inverted.blue.basic.buttons .active.button,.ui.inverted.blue.buttons .basic.active.button,.ui.inverted.blue.basic.active.button{box-shadow:0 0 0 2px #3ac0ff inset;color:#54c8ff}.ui.inverted.blue.basic.buttons .button:active,.ui.inverted.blue.buttons .basic.button:active,.ui.inverted.blue.basic.button:active{box-shadow:0 0 0 2px #21b8ff inset;color:#54c8ff}.ui.tertiary.blue.buttons .button,.ui.tertiary.blue.buttons .tertiary.button,.ui.tertiary.blue.button{background:transparent;box-shadow:none;color:#2185d0}.ui.tertiary.blue.buttons .button:hover,.ui.tertiary.blue.buttons button:hover,.ui.tertiary.blue.button:hover{box-shadow:inset 0 -.2em #2b75ac;color:#2b75ac}.ui.tertiary.blue.buttons .button:focus,.ui.tertiary.blue.buttons .tertiary.button:focus,.ui.tertiary.blue.button:focus{box-shadow:inset 0 -.2em #216ea7;color:#216ea7}.ui.tertiary.blue.buttons .active.button,.ui.tertiary.blue.buttons .tertiary.active.button,.ui.tertiary.blue.active.button,.ui.tertiary.blue.buttons .button:active,.ui.tertiary.blue.buttons .tertiary.button:active,.ui.tertiary.blue.button:active{box-shadow:inset 0 -.2em #007bd8;color:#1279c6}.ui.violet.buttons .button,.ui.violet.button{background-color:#6435c9;color:#fff;text-shadow:none;background-image:none}.ui.violet.button{box-shadow:0 0 #22242626 inset}.ui.violet.buttons .button:hover,.ui.violet.button:hover{background-color:#5829bb;color:#fff;text-shadow:none}.ui.violet.buttons .button:focus,.ui.violet.button:focus{background-color:#4f20b5;color:#fff;text-shadow:none}.ui.violet.buttons .button:active,.ui.violet.button:active{background-color:#502aa1;color:#fff;text-shadow:none}.ui.violet.buttons .active.button,.ui.violet.buttons .active.button:active,.ui.violet.active.button,.ui.violet.button .active.button:active{background-color:#5626bf;color:#fff;text-shadow:none}.ui.basic.violet.buttons .button,.ui.basic.violet.button{background:transparent;box-shadow:0 0 0 1px #6435c9 inset;color:#6435c9}.ui.basic.violet.buttons .button:hover,.ui.basic.violet.button:hover{background:transparent;box-shadow:0 0 0 1px #5829bb inset;color:#5829bb}.ui.basic.violet.buttons .button:focus,.ui.basic.violet.button:focus{background:transparent;box-shadow:0 0 0 1px #4f20b5 inset;color:#5829bb}.ui.basic.violet.buttons .active.button,.ui.basic.violet.active.button{background:transparent;box-shadow:0 0 0 1px #5626bf inset;color:#502aa1}.ui.basic.violet.buttons .button:active,.ui.basic.violet.button:active{box-shadow:0 0 0 1px #502aa1 inset;color:#502aa1}.ui.buttons:not(.vertical)>.basic.violet.button:not(:first-child){margin-left:-1px}.ui.inverted.violet.buttons .button,.ui.inverted.violet.button{background-color:transparent;box-shadow:0 0 0 2px #a291fb inset;color:#a291fb}.ui.inverted.violet.buttons .button:hover,.ui.inverted.violet.button:hover,.ui.inverted.violet.buttons .button:focus,.ui.inverted.violet.button:focus,.ui.inverted.violet.buttons .button.active,.ui.inverted.violet.button.active,.ui.inverted.violet.buttons .button:active,.ui.inverted.violet.button:active{box-shadow:none;color:#fff}.ui.inverted.violet.buttons .button:hover,.ui.inverted.violet.button:hover{background-color:#745aff}.ui.inverted.violet.buttons .button:focus,.ui.inverted.violet.button:focus{background-color:#7d64ff}.ui.inverted.violet.buttons .active.button,.ui.inverted.violet.active.button{background-color:#8a73ff}.ui.inverted.violet.buttons .button:active,.ui.inverted.violet.button:active{background-color:#7860f9}.ui.inverted.violet.basic.buttons .button,.ui.inverted.violet.buttons .basic.button,.ui.inverted.violet.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.violet.basic.buttons .button:hover,.ui.inverted.violet.buttons .basic.button:hover,.ui.inverted.violet.basic.button:hover{box-shadow:0 0 0 2px #745aff inset;color:#a291fb}.ui.inverted.violet.basic.buttons .button:focus,.ui.inverted.violet.basic.buttons .button:focus,.ui.inverted.violet.basic.button:focus{box-shadow:0 0 0 2px #7d64ff inset;color:#a291fb}.ui.inverted.violet.basic.buttons .active.button,.ui.inverted.violet.buttons .basic.active.button,.ui.inverted.violet.basic.active.button{box-shadow:0 0 0 2px #8a73ff inset;color:#a291fb}.ui.inverted.violet.basic.buttons .button:active,.ui.inverted.violet.buttons .basic.button:active,.ui.inverted.violet.basic.button:active{box-shadow:0 0 0 2px #7860f9 inset;color:#a291fb}.ui.tertiary.violet.buttons .button,.ui.tertiary.violet.buttons .tertiary.button,.ui.tertiary.violet.button{background:transparent;box-shadow:none;color:#6435c9}.ui.tertiary.violet.buttons .button:hover,.ui.tertiary.violet.buttons button:hover,.ui.tertiary.violet.button:hover{box-shadow:inset 0 -.2em #6040a5;color:#6040a5}.ui.tertiary.violet.buttons .button:focus,.ui.tertiary.violet.buttons .tertiary.button:focus,.ui.tertiary.violet.button:focus{box-shadow:inset 0 -.2em #5735a0;color:#5735a0}.ui.tertiary.violet.buttons .active.button,.ui.tertiary.violet.buttons .tertiary.active.button,.ui.tertiary.violet.active.button,.ui.tertiary.violet.buttons .button:active,.ui.tertiary.violet.buttons .tertiary.button:active,.ui.tertiary.violet.button:active{box-shadow:inset 0 -.2em #4e0fd6;color:#5626bf}.ui.purple.buttons .button,.ui.purple.button{background-color:#a333c8;color:#fff;text-shadow:none;background-image:none}.ui.purple.button{box-shadow:0 0 #22242626 inset}.ui.purple.buttons .button:hover,.ui.purple.button:hover{background-color:#9627ba;color:#fff;text-shadow:none}.ui.purple.buttons .button:focus,.ui.purple.button:focus{background-color:#8f1eb4;color:#fff;text-shadow:none}.ui.purple.buttons .button:active,.ui.purple.button:active{background-color:#82299f;color:#fff;text-shadow:none}.ui.purple.buttons .active.button,.ui.purple.buttons .active.button:active,.ui.purple.active.button,.ui.purple.button .active.button:active{background-color:#9724be;color:#fff;text-shadow:none}.ui.basic.purple.buttons .button,.ui.basic.purple.button{background:transparent;box-shadow:0 0 0 1px #a333c8 inset;color:#a333c8}.ui.basic.purple.buttons .button:hover,.ui.basic.purple.button:hover{background:transparent;box-shadow:0 0 0 1px #9627ba inset;color:#9627ba}.ui.basic.purple.buttons .button:focus,.ui.basic.purple.button:focus{background:transparent;box-shadow:0 0 0 1px #8f1eb4 inset;color:#9627ba}.ui.basic.purple.buttons .active.button,.ui.basic.purple.active.button{background:transparent;box-shadow:0 0 0 1px #9724be inset;color:#82299f}.ui.basic.purple.buttons .button:active,.ui.basic.purple.button:active{box-shadow:0 0 0 1px #82299f inset;color:#82299f}.ui.buttons:not(.vertical)>.basic.purple.button:not(:first-child){margin-left:-1px}.ui.inverted.purple.buttons .button,.ui.inverted.purple.button{background-color:transparent;box-shadow:0 0 0 2px #dc73ff inset;color:#dc73ff}.ui.inverted.purple.buttons .button:hover,.ui.inverted.purple.button:hover,.ui.inverted.purple.buttons .button:focus,.ui.inverted.purple.button:focus,.ui.inverted.purple.buttons .button.active,.ui.inverted.purple.button.active,.ui.inverted.purple.buttons .button:active,.ui.inverted.purple.button:active{box-shadow:none;color:#fff}.ui.inverted.purple.buttons .button:hover,.ui.inverted.purple.button:hover{background-color:#cf40ff}.ui.inverted.purple.buttons .button:focus,.ui.inverted.purple.button:focus{background-color:#d24aff}.ui.inverted.purple.buttons .active.button,.ui.inverted.purple.active.button{background-color:#d65aff}.ui.inverted.purple.buttons .button:active,.ui.inverted.purple.button:active{background-color:#cf40ff}.ui.inverted.purple.basic.buttons .button,.ui.inverted.purple.buttons .basic.button,.ui.inverted.purple.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.purple.basic.buttons .button:hover,.ui.inverted.purple.buttons .basic.button:hover,.ui.inverted.purple.basic.button:hover{box-shadow:0 0 0 2px #cf40ff inset;color:#dc73ff}.ui.inverted.purple.basic.buttons .button:focus,.ui.inverted.purple.basic.buttons .button:focus,.ui.inverted.purple.basic.button:focus{box-shadow:0 0 0 2px #d24aff inset;color:#dc73ff}.ui.inverted.purple.basic.buttons .active.button,.ui.inverted.purple.buttons .basic.active.button,.ui.inverted.purple.basic.active.button{box-shadow:0 0 0 2px #d65aff inset;color:#dc73ff}.ui.inverted.purple.basic.buttons .button:active,.ui.inverted.purple.buttons .basic.button:active,.ui.inverted.purple.basic.button:active{box-shadow:0 0 0 2px #cf40ff inset;color:#dc73ff}.ui.tertiary.purple.buttons .button,.ui.tertiary.purple.buttons .tertiary.button,.ui.tertiary.purple.button{background:transparent;box-shadow:none;color:#a333c8}.ui.tertiary.purple.buttons .button:hover,.ui.tertiary.purple.buttons button:hover,.ui.tertiary.purple.button:hover{box-shadow:inset 0 -.2em #8a3ea4;color:#8a3ea4}.ui.tertiary.purple.buttons .button:focus,.ui.tertiary.purple.buttons .tertiary.button:focus,.ui.tertiary.purple.button:focus{box-shadow:inset 0 -.2em #84339f;color:#84339f}.ui.tertiary.purple.buttons .active.button,.ui.tertiary.purple.buttons .tertiary.active.button,.ui.tertiary.purple.active.button,.ui.tertiary.purple.buttons .button:active,.ui.tertiary.purple.buttons .tertiary.button:active,.ui.tertiary.purple.button:active{box-shadow:inset 0 -.2em #a30dd4;color:#9724be}.ui.pink.buttons .button,.ui.pink.button{background-color:#e03997;color:#fff;text-shadow:none;background-image:none}.ui.pink.button{box-shadow:0 0 #22242626 inset}.ui.pink.buttons .button:hover,.ui.pink.button:hover{background-color:#e61a8d;color:#fff;text-shadow:none}.ui.pink.buttons .button:focus,.ui.pink.button:focus{background-color:#e10f85;color:#fff;text-shadow:none}.ui.pink.buttons .button:active,.ui.pink.button:active{background-color:#c71f7e;color:#fff;text-shadow:none}.ui.pink.buttons .active.button,.ui.pink.buttons .active.button:active,.ui.pink.active.button,.ui.pink.button .active.button:active{background-color:#ea158d;color:#fff;text-shadow:none}.ui.basic.pink.buttons .button,.ui.basic.pink.button{background:transparent;box-shadow:0 0 0 1px #e03997 inset;color:#e03997}.ui.basic.pink.buttons .button:hover,.ui.basic.pink.button:hover{background:transparent;box-shadow:0 0 0 1px #e61a8d inset;color:#e61a8d}.ui.basic.pink.buttons .button:focus,.ui.basic.pink.button:focus{background:transparent;box-shadow:0 0 0 1px #e10f85 inset;color:#e61a8d}.ui.basic.pink.buttons .active.button,.ui.basic.pink.active.button{background:transparent;box-shadow:0 0 0 1px #ea158d inset;color:#c71f7e}.ui.basic.pink.buttons .button:active,.ui.basic.pink.button:active{box-shadow:0 0 0 1px #c71f7e inset;color:#c71f7e}.ui.buttons:not(.vertical)>.basic.pink.button:not(:first-child){margin-left:-1px}.ui.inverted.pink.buttons .button,.ui.inverted.pink.button{background-color:transparent;box-shadow:0 0 0 2px #ff8edf inset;color:#ff8edf}.ui.inverted.pink.buttons .button:hover,.ui.inverted.pink.button:hover,.ui.inverted.pink.buttons .button:focus,.ui.inverted.pink.button:focus,.ui.inverted.pink.buttons .button.active,.ui.inverted.pink.button.active,.ui.inverted.pink.buttons .button:active,.ui.inverted.pink.button:active{box-shadow:none;color:#fff}.ui.inverted.pink.buttons .button:hover,.ui.inverted.pink.button:hover{background-color:#ff5bd1}.ui.inverted.pink.buttons .button:focus,.ui.inverted.pink.button:focus{background-color:#ff65d3}.ui.inverted.pink.buttons .active.button,.ui.inverted.pink.active.button{background-color:#ff74d8}.ui.inverted.pink.buttons .button:active,.ui.inverted.pink.button:active{background-color:#ff5bd1}.ui.inverted.pink.basic.buttons .button,.ui.inverted.pink.buttons .basic.button,.ui.inverted.pink.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.pink.basic.buttons .button:hover,.ui.inverted.pink.buttons .basic.button:hover,.ui.inverted.pink.basic.button:hover{box-shadow:0 0 0 2px #ff5bd1 inset;color:#ff8edf}.ui.inverted.pink.basic.buttons .button:focus,.ui.inverted.pink.basic.buttons .button:focus,.ui.inverted.pink.basic.button:focus{box-shadow:0 0 0 2px #ff65d3 inset;color:#ff8edf}.ui.inverted.pink.basic.buttons .active.button,.ui.inverted.pink.buttons .basic.active.button,.ui.inverted.pink.basic.active.button{box-shadow:0 0 0 2px #ff74d8 inset;color:#ff8edf}.ui.inverted.pink.basic.buttons .button:active,.ui.inverted.pink.buttons .basic.button:active,.ui.inverted.pink.basic.button:active{box-shadow:0 0 0 2px #ff5bd1 inset;color:#ff8edf}.ui.tertiary.pink.buttons .button,.ui.tertiary.pink.buttons .tertiary.button,.ui.tertiary.pink.button{background:transparent;box-shadow:none;color:#e03997}.ui.tertiary.pink.buttons .button:hover,.ui.tertiary.pink.buttons button:hover,.ui.tertiary.pink.button:hover{box-shadow:inset 0 -.2em #cc3389;color:#cc3389}.ui.tertiary.pink.buttons .button:focus,.ui.tertiary.pink.buttons .tertiary.button:focus,.ui.tertiary.pink.button:focus{box-shadow:inset 0 -.2em #c92782;color:#c92782}.ui.tertiary.pink.buttons .active.button,.ui.tertiary.pink.buttons .tertiary.active.button,.ui.tertiary.pink.active.button,.ui.tertiary.pink.buttons .button:active,.ui.tertiary.pink.buttons .tertiary.button:active,.ui.tertiary.pink.button:active{box-shadow:inset 0 -.2em #ff0090;color:#ea158d}.ui.brown.buttons .button,.ui.brown.button{background-color:#a5673f;color:#fff;text-shadow:none;background-image:none}.ui.brown.button{box-shadow:0 0 #22242626 inset}.ui.brown.buttons .button:hover,.ui.brown.button:hover{background-color:#975b33;color:#fff;text-shadow:none}.ui.brown.buttons .button:focus,.ui.brown.button:focus{background-color:#90532b;color:#fff;text-shadow:none}.ui.brown.buttons .button:active,.ui.brown.button:active{background-color:#805031;color:#fff;text-shadow:none}.ui.brown.buttons .active.button,.ui.brown.buttons .active.button:active,.ui.brown.active.button,.ui.brown.button .active.button:active{background-color:#995a31;color:#fff;text-shadow:none}.ui.basic.brown.buttons .button,.ui.basic.brown.button{background:transparent;box-shadow:0 0 0 1px #a5673f inset;color:#a5673f}.ui.basic.brown.buttons .button:hover,.ui.basic.brown.button:hover{background:transparent;box-shadow:0 0 0 1px #975b33 inset;color:#975b33}.ui.basic.brown.buttons .button:focus,.ui.basic.brown.button:focus{background:transparent;box-shadow:0 0 0 1px #90532b inset;color:#975b33}.ui.basic.brown.buttons .active.button,.ui.basic.brown.active.button{background:transparent;box-shadow:0 0 0 1px #995a31 inset;color:#805031}.ui.basic.brown.buttons .button:active,.ui.basic.brown.button:active{box-shadow:0 0 0 1px #805031 inset;color:#805031}.ui.buttons:not(.vertical)>.basic.brown.button:not(:first-child){margin-left:-1px}.ui.inverted.brown.buttons .button,.ui.inverted.brown.button{background-color:transparent;box-shadow:0 0 0 2px #d67c1c inset;color:#d67c1c}.ui.inverted.brown.buttons .button:hover,.ui.inverted.brown.button:hover,.ui.inverted.brown.buttons .button:focus,.ui.inverted.brown.button:focus,.ui.inverted.brown.buttons .button.active,.ui.inverted.brown.button.active,.ui.inverted.brown.buttons .button:active,.ui.inverted.brown.button:active{box-shadow:none;color:#fff}.ui.inverted.brown.buttons .button:hover,.ui.inverted.brown.button:hover{background-color:#b0620f}.ui.inverted.brown.buttons .button:focus,.ui.inverted.brown.button:focus{background-color:#c16808}.ui.inverted.brown.buttons .active.button,.ui.inverted.brown.active.button{background-color:#cc6f0d}.ui.inverted.brown.buttons .button:active,.ui.inverted.brown.button:active{background-color:#a96216}.ui.inverted.brown.basic.buttons .button,.ui.inverted.brown.buttons .basic.button,.ui.inverted.brown.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.brown.basic.buttons .button:hover,.ui.inverted.brown.buttons .basic.button:hover,.ui.inverted.brown.basic.button:hover{box-shadow:0 0 0 2px #b0620f inset;color:#d67c1c}.ui.inverted.brown.basic.buttons .button:focus,.ui.inverted.brown.basic.buttons .button:focus,.ui.inverted.brown.basic.button:focus{box-shadow:0 0 0 2px #c16808 inset;color:#d67c1c}.ui.inverted.brown.basic.buttons .active.button,.ui.inverted.brown.buttons .basic.active.button,.ui.inverted.brown.basic.active.button{box-shadow:0 0 0 2px #cc6f0d inset;color:#d67c1c}.ui.inverted.brown.basic.buttons .button:active,.ui.inverted.brown.buttons .basic.button:active,.ui.inverted.brown.basic.button:active{box-shadow:0 0 0 2px #a96216 inset;color:#d67c1c}.ui.tertiary.brown.buttons .button,.ui.tertiary.brown.buttons .tertiary.button,.ui.tertiary.brown.button{background:transparent;box-shadow:none;color:#a5673f}.ui.tertiary.brown.buttons .button:hover,.ui.tertiary.brown.buttons button:hover,.ui.tertiary.brown.button:hover{box-shadow:inset 0 -.2em #835f48;color:#835f48}.ui.tertiary.brown.buttons .button:focus,.ui.tertiary.brown.buttons .tertiary.button:focus,.ui.tertiary.brown.button:focus{box-shadow:inset 0 -.2em #7d573e;color:#7d573e}.ui.tertiary.brown.buttons .active.button,.ui.tertiary.brown.buttons .tertiary.active.button,.ui.tertiary.brown.active.button,.ui.tertiary.brown.buttons .button:active,.ui.tertiary.brown.buttons .tertiary.button:active,.ui.tertiary.brown.button:active{box-shadow:inset 0 -.2em #ae561d;color:#995a31}.ui.grey.buttons .button,.ui.grey.button{background-color:#767676;color:#fff;text-shadow:none;background-image:none}.ui.grey.button{box-shadow:0 0 #22242626 inset}.ui.grey.buttons .button:hover,.ui.grey.button:hover{background-color:#838383;color:#fff;text-shadow:none}.ui.grey.buttons .button:focus,.ui.grey.button:focus{background-color:#8a8a8a;color:#fff;text-shadow:none}.ui.grey.buttons .button:active,.ui.grey.button:active{background-color:#909090;color:#fff;text-shadow:none}.ui.grey.buttons .active.button,.ui.grey.buttons .active.button:active,.ui.grey.active.button,.ui.grey.button .active.button:active{background-color:#696969;color:#fff;text-shadow:none}.ui.basic.grey.buttons .button,.ui.basic.grey.button{background:transparent;box-shadow:0 0 0 1px #767676 inset;color:#767676}.ui.basic.grey.buttons .button:hover,.ui.basic.grey.button:hover{background:transparent;box-shadow:0 0 0 1px #838383 inset;color:#838383}.ui.basic.grey.buttons .button:focus,.ui.basic.grey.button:focus{background:transparent;box-shadow:0 0 0 1px #8a8a8a inset;color:#838383}.ui.basic.grey.buttons .active.button,.ui.basic.grey.active.button{background:transparent;box-shadow:0 0 0 1px #696969 inset;color:#909090}.ui.basic.grey.buttons .button:active,.ui.basic.grey.button:active{box-shadow:0 0 0 1px #909090 inset;color:#909090}.ui.buttons:not(.vertical)>.basic.grey.button:not(:first-child){margin-left:-1px}.ui.inverted.grey.buttons .button,.ui.inverted.grey.button{background-color:transparent;box-shadow:0 0 0 2px #d4d4d5 inset;color:#fff}.ui.inverted.grey.buttons .button:hover,.ui.inverted.grey.button:hover,.ui.inverted.grey.buttons .button:focus,.ui.inverted.grey.button:focus,.ui.inverted.grey.buttons .button.active,.ui.inverted.grey.button.active,.ui.inverted.grey.buttons .button:active,.ui.inverted.grey.button:active{box-shadow:none;color:#0009}.ui.inverted.grey.buttons .button:hover,.ui.inverted.grey.button:hover{background-color:#c2c4c5}.ui.inverted.grey.buttons .button:focus,.ui.inverted.grey.button:focus{background-color:#c7c9cb}.ui.inverted.grey.buttons .active.button,.ui.inverted.grey.active.button{background-color:#cfd0d2}.ui.inverted.grey.buttons .button:active,.ui.inverted.grey.button:active{background-color:#c2c4c5}.ui.inverted.grey.basic.buttons .button,.ui.inverted.grey.buttons .basic.button,.ui.inverted.grey.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.grey.basic.buttons .button:hover,.ui.inverted.grey.buttons .basic.button:hover,.ui.inverted.grey.basic.button:hover{box-shadow:0 0 0 2px #c2c4c5 inset;color:#fff}.ui.inverted.grey.basic.buttons .button:focus,.ui.inverted.grey.basic.buttons .button:focus,.ui.inverted.grey.basic.button:focus{box-shadow:0 0 0 2px #c7c9cb inset;color:#dcddde}.ui.inverted.grey.basic.buttons .active.button,.ui.inverted.grey.buttons .basic.active.button,.ui.inverted.grey.basic.active.button{box-shadow:0 0 0 2px #cfd0d2 inset;color:#fff}.ui.inverted.grey.basic.buttons .button:active,.ui.inverted.grey.buttons .basic.button:active,.ui.inverted.grey.basic.button:active{box-shadow:0 0 0 2px #c2c4c5 inset;color:#fff}.ui.tertiary.grey.buttons .button,.ui.tertiary.grey.buttons .tertiary.button,.ui.tertiary.grey.button{background:transparent;box-shadow:none;color:#767676}.ui.tertiary.grey.buttons .button:hover,.ui.tertiary.grey.buttons button:hover,.ui.tertiary.grey.button:hover{box-shadow:inset 0 -.2em #838383;color:#838383}.ui.tertiary.grey.buttons .button:focus,.ui.tertiary.grey.buttons .tertiary.button:focus,.ui.tertiary.grey.button:focus{box-shadow:inset 0 -.2em #8a8a8a;color:#8a8a8a}.ui.tertiary.grey.buttons .active.button,.ui.tertiary.grey.buttons .tertiary.active.button,.ui.tertiary.grey.active.button,.ui.tertiary.grey.buttons .button:active,.ui.tertiary.grey.buttons .tertiary.button:active,.ui.tertiary.grey.button:active{box-shadow:inset 0 -.2em #7e5454;color:#696969}.ui.black.buttons .button,.ui.black.button{background-color:#1b1c1d;color:#fff;text-shadow:none;background-image:none}.ui.black.button{box-shadow:0 0 #22242626 inset}.ui.black.buttons .button:hover,.ui.black.button:hover{background-color:#27292a;color:#fff;text-shadow:none}.ui.black.buttons .button:focus,.ui.black.button:focus{background-color:#2f3032;color:#fff;text-shadow:none}.ui.black.buttons .button:active,.ui.black.button:active{background-color:#343637;color:#fff;text-shadow:none}.ui.black.buttons .active.button,.ui.black.buttons .active.button:active,.ui.black.active.button,.ui.black.button .active.button:active{background-color:#0f0f10;color:#fff;text-shadow:none}.ui.basic.black.buttons .button,.ui.basic.black.button{background:transparent;box-shadow:0 0 0 1px #1b1c1d inset;color:#1b1c1d}.ui.basic.black.buttons .button:hover,.ui.basic.black.button:hover{background:transparent;box-shadow:0 0 0 1px #27292a inset;color:#27292a}.ui.basic.black.buttons .button:focus,.ui.basic.black.button:focus{background:transparent;box-shadow:0 0 0 1px #2f3032 inset;color:#27292a}.ui.basic.black.buttons .active.button,.ui.basic.black.active.button{background:transparent;box-shadow:0 0 0 1px #0f0f10 inset;color:#343637}.ui.basic.black.buttons .button:active,.ui.basic.black.button:active{box-shadow:0 0 0 1px #343637 inset;color:#343637}.ui.buttons:not(.vertical)>.basic.black.button:not(:first-child){margin-left:-1px}.ui.inverted.black.buttons .button,.ui.inverted.black.button{background-color:transparent;box-shadow:0 0 0 2px #d4d4d5 inset;color:#fff}.ui.inverted.black.buttons .button:hover,.ui.inverted.black.button:hover,.ui.inverted.black.buttons .button:focus,.ui.inverted.black.button:focus,.ui.inverted.black.buttons .button.active,.ui.inverted.black.button.active,.ui.inverted.black.buttons .button:active,.ui.inverted.black.button:active{box-shadow:none;color:#fff}.ui.inverted.black.buttons .button:hover,.ui.inverted.black.button:hover{background-color:#000}.ui.inverted.black.buttons .button:focus,.ui.inverted.black.button:focus{background-color:#000}.ui.inverted.black.buttons .active.button,.ui.inverted.black.active.button,.ui.inverted.black.buttons .button:active,.ui.inverted.black.button:active{background-color:#000}.ui.inverted.black.basic.buttons .button,.ui.inverted.black.buttons .basic.button,.ui.inverted.black.basic.button{background-color:transparent;box-shadow:0 0 0 2px #ffffff80 inset;color:#fff}.ui.inverted.black.basic.buttons .button:hover,.ui.inverted.black.buttons .basic.button:hover,.ui.inverted.black.basic.button:hover{box-shadow:0 0 0 2px #000 inset;color:#fff}.ui.inverted.black.basic.buttons .button:focus,.ui.inverted.black.basic.buttons .button:focus,.ui.inverted.black.basic.button:focus{box-shadow:0 0 0 2px #000 inset;color:#545454}.ui.inverted.black.basic.buttons .active.button,.ui.inverted.black.buttons .basic.active.button,.ui.inverted.black.basic.active.button,.ui.inverted.black.basic.buttons .button:active,.ui.inverted.black.buttons .basic.button:active,.ui.inverted.black.basic.button:active{box-shadow:0 0 0 2px #000 inset;color:#fff}.ui.tertiary.black.buttons .button,.ui.tertiary.black.buttons .tertiary.button,.ui.tertiary.black.button{background:transparent;box-shadow:none;color:#1b1c1d}.ui.tertiary.black.buttons .button:hover,.ui.tertiary.black.buttons button:hover,.ui.tertiary.black.button:hover{box-shadow:inset 0 -.2em #8b8f93;color:#8b8f93}.ui.tertiary.black.buttons .button:focus,.ui.tertiary.black.buttons .tertiary.button:focus,.ui.tertiary.black.button:focus{box-shadow:inset 0 -.2em #93969a;color:#93969a}.ui.tertiary.black.buttons .active.button,.ui.tertiary.black.buttons .tertiary.active.button,.ui.tertiary.black.active.button,.ui.tertiary.black.buttons .button:active,.ui.tertiary.black.buttons .tertiary.button:active,.ui.tertiary.black.button:active{box-shadow:inset 0 -.2em #404245;color:#0f0f10}.ui.positive.buttons .button,.ui.positive.button{background-color:#21ba45;color:#fff;text-shadow:none;background-image:none}.ui.positive.button{box-shadow:0 0 #22242626 inset}.ui.positive.buttons .button:hover,.ui.positive.button:hover{background-color:#16ab39;color:#fff;text-shadow:none}.ui.positive.buttons .button:focus,.ui.positive.button:focus{background-color:#0ea432;color:#fff;text-shadow:none}.ui.positive.buttons .button:active,.ui.positive.button:active{background-color:#198f35;color:#fff;text-shadow:none}.ui.positive.buttons .active.button,.ui.positive.buttons .active.button:active,.ui.positive.active.button,.ui.positive.button .active.button:active{background-color:#13ae38;color:#fff;text-shadow:none}.ui.basic.positive.buttons .button,.ui.basic.positive.button{background:transparent;box-shadow:0 0 0 1px #21ba45 inset;color:#21ba45}.ui.basic.positive.buttons .button:hover,.ui.basic.positive.button:hover{background:transparent;box-shadow:0 0 0 1px #16ab39 inset;color:#16ab39}.ui.basic.positive.buttons .button:focus,.ui.basic.positive.button:focus{background:transparent;box-shadow:0 0 0 1px #0ea432 inset;color:#16ab39}.ui.basic.positive.buttons .active.button,.ui.basic.positive.active.button{background:transparent;box-shadow:0 0 0 1px #13ae38 inset;color:#198f35}.ui.basic.positive.buttons .button:active,.ui.basic.positive.button:active{box-shadow:0 0 0 1px #198f35 inset;color:#198f35}.ui.buttons:not(.vertical)>.basic.positive.button:not(:first-child){margin-left:-1px}.ui.negative.buttons .button,.ui.negative.button{background-color:#db2828;color:#fff;text-shadow:none;background-image:none}.ui.negative.button{box-shadow:0 0 #22242626 inset}.ui.negative.buttons .button:hover,.ui.negative.button:hover{background-color:#d01919;color:#fff;text-shadow:none}.ui.negative.buttons .button:focus,.ui.negative.button:focus{background-color:#ca1010;color:#fff;text-shadow:none}.ui.negative.buttons .button:active,.ui.negative.button:active{background-color:#b21e1e;color:#fff;text-shadow:none}.ui.negative.buttons .active.button,.ui.negative.buttons .active.button:active,.ui.negative.active.button,.ui.negative.button .active.button:active{background-color:#d41515;color:#fff;text-shadow:none}.ui.basic.negative.buttons .button,.ui.basic.negative.button{background:transparent;box-shadow:0 0 0 1px #db2828 inset;color:#db2828}.ui.basic.negative.buttons .button:hover,.ui.basic.negative.button:hover{background:transparent;box-shadow:0 0 0 1px #d01919 inset;color:#d01919}.ui.basic.negative.buttons .button:focus,.ui.basic.negative.button:focus{background:transparent;box-shadow:0 0 0 1px #ca1010 inset;color:#d01919}.ui.basic.negative.buttons .active.button,.ui.basic.negative.active.button{background:transparent;box-shadow:0 0 0 1px #d41515 inset;color:#b21e1e}.ui.basic.negative.buttons .button:active,.ui.basic.negative.button:active{box-shadow:0 0 0 1px #b21e1e inset;color:#b21e1e}.ui.buttons:not(.vertical)>.basic.negative.button:not(:first-child){margin-left:-1px}.ui.buttons{display:inline-flex;flex-direction:row;font-size:0;vertical-align:baseline;margin:0 .25em 0 0}.ui.buttons:not(.basic):not(.inverted){box-shadow:none}.ui.buttons:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui.buttons .button{flex:1 0 auto;border-radius:0;margin:0}.ui.buttons:not(.basic):not(.inverted)>.button:not(.basic):not(.inverted){box-shadow:0 0 0 1px transparent inset,0 0 #22242626 inset}.ui.buttons .button:first-child{border-left:none;margin-left:0;border-top-left-radius:.28571429rem;border-bottom-left-radius:.28571429rem}.ui.buttons .button:last-child{border-top-right-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.buttons{display:inline-flex;flex-direction:column}.ui.vertical.buttons .button{display:block;float:none;width:100%;margin:0;box-shadow:none;border-radius:0}.ui.vertical.buttons .button:first-child{border-top-left-radius:.28571429rem;border-top-right-radius:.28571429rem}.ui.vertical.buttons .button:last-child{margin-bottom:0;border-bottom-left-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.buttons .button:only-child{border-radius:.28571429rem}.ui.cards>.card,.ui.card{max-width:100%;position:relative;display:flex;flex-direction:column;width:290px;min-height:0;background:#FFFFFF;padding:0;border:none;border-radius:.28571429rem;box-shadow:0 1px 3px #d4d4d5,0 0 0 1px #d4d4d5;transition:box-shadow .1s ease,transform .1s ease;z-index:"";word-wrap:break-word}.ui.card{margin:1em 0}.ui.cards>.card a,.ui.card a{cursor:pointer}.ui.card:first-child{margin-top:0}.ui.card:last-child{margin-bottom:0}.ui.cards{display:flex;margin:-.875em -.5em;flex-wrap:wrap}.ui.cards>.card{display:flex;margin:.875em .5em;float:none}.ui.cards:after,.ui.card:after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.cards~.ui.cards{margin-top:.875em}.ui.cards>.card>:first-child,.ui.card>:first-child{border-radius:.28571429rem .28571429rem 0 0!important;border-top:none!important}.ui.cards>.card>:last-child,.ui.card>:last-child{border-radius:0 0 .28571429rem .28571429rem!important}.ui.cards>.card>:only-child,.ui.card>:only-child{border-radius:.28571429rem!important}.ui.cards>.card>.image,.ui.card>.image{position:relative;display:block;flex:0 0 auto;padding:0;background:rgba(0,0,0,.05)}.ui.cards>.card>.image>img,.ui.card>.image>img{display:block;width:100%;height:auto;border-radius:inherit}.ui.cards>.card>.image:not(.ui)>img,.ui.card>.image:not(.ui)>img{border:none}.ui.cards>.card>.content,.ui.card>.content{flex-grow:1;border:none;border-top:1px solid rgba(34,36,38,.1);background:none;margin:0;padding:1em;box-shadow:none;font-size:1em;border-radius:0}.ui.cards>.card>.content:after,.ui.card>.content:after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.cards>.card>.content>.header,.ui.card>.content>.header{display:block;margin:"";font-family:var(--fonts-regular);color:#000000d9}.ui.cards>.card>.content>.header:not(.ui),.ui.card>.content>.header:not(.ui){font-weight:500;font-size:1.28571429em;margin-top:-.21425em;line-height:1.28571429em}.ui.cards>.card>.content>.meta+.description,.ui.cards>.card>.content>.header+.description,.ui.card>.content>.meta+.description,.ui.card>.content>.header+.description{margin-top:.5em}.ui.cards>.card [class*="left floated"],.ui.card [class*="left floated"]{float:left}.ui.cards>.card [class*="right floated"],.ui.card [class*="right floated"]{float:right}.ui.cards>.card [class*="left aligned"],.ui.card [class*="left aligned"]{text-align:left}.ui.cards>.card [class*="center aligned"],.ui.card [class*="center aligned"]{text-align:center}.ui.cards>.card [class*="right aligned"],.ui.card [class*="right aligned"]{text-align:right}.ui.cards>.card .content img,.ui.card .content img{display:inline-block;vertical-align:middle;width:""}.ui.cards>.card img.avatar,.ui.cards>.card .avatar img,.ui.card img.avatar,.ui.card .avatar img{width:2em;height:2em;border-radius:500rem}.ui.cards>.card>.content>.description,.ui.card>.content>.description{clear:both;color:#000000ad}.ui.cards>.card>.content p,.ui.card>.content p{margin:0 0 .5em}.ui.cards>.card>.content p:last-child,.ui.card>.content p:last-child{margin-bottom:0}.ui.cards>.card .meta,.ui.card .meta{font-size:1em;color:#0006}.ui.cards>.card .meta *,.ui.card .meta *{margin-right:.3em}.ui.cards>.card .meta :last-child,.ui.card .meta :last-child{margin-right:0}.ui.cards>.card .meta [class*="right floated"],.ui.card .meta [class*="right floated"]{margin-right:0;margin-left:.3em}.ui.cards>.card>.content a:not(.ui),.ui.card>.content a:not(.ui){color:"";transition:color .1s ease}.ui.cards>.card>.content a:not(.ui):hover,.ui.card>.content a:not(.ui):hover{color:""}.ui.cards>.card>.content>a.header,.ui.card>.content>a.header{color:#000000d9}.ui.cards>.card>.content>a.header:hover,.ui.card>.content>a.header:hover{color:#1e70bf}.ui.cards>.card .meta>a:not(.ui),.ui.card .meta>a:not(.ui){color:#0006}.ui.cards>.card .meta>a:not(.ui):hover,.ui.card .meta>a:not(.ui):hover{color:#000000de}.ui.cards>.card>.buttons,.ui.card>.buttons,.ui.cards>.card>.button,.ui.card>.button{margin:0 -1px;width:calc(100% + 2px)}.ui.cards>.card>.buttons:last-child,.ui.card>.buttons:last-child,.ui.cards>.card>.button:last-child,.ui.card>.button:last-child{margin-bottom:-1px}.ui.cards>.card .dimmer,.ui.card .dimmer{background:"";z-index:10}.ui.cards>.card>.content .star.icon,.ui.card>.content .star.icon{cursor:pointer;opacity:.75;transition:color .1s ease}.ui.cards>.card>.content .star.icon:hover,.ui.card>.content .star.icon:hover{opacity:1;color:#ffb70a}.ui.cards>.card>.content .active.star.icon,.ui.card>.content .active.star.icon{color:#ffe623}.ui.cards>.card>.content .like.icon,.ui.card>.content .like.icon{cursor:pointer;opacity:.75;transition:color .1s ease}.ui.cards>.card>.content .like.icon:hover,.ui.card>.content .like.icon:hover{opacity:1;color:#ff2733}.ui.cards>.card>.content .active.like.icon,.ui.card>.content .active.like.icon{color:#ff2733}.ui.cards>.card>.extra,.ui.card>.extra{max-width:100%;min-height:0!important;flex-grow:0;border-top:1px solid rgba(0,0,0,.05)!important;position:static;background:none;width:auto;margin:0;padding:.75em 1em;top:0;left:0;color:#0006;box-shadow:none;transition:color .1s ease}.ui.cards>.card>.extra a:not(.ui),.ui.card>.extra a:not(.ui){color:#0006}.ui.cards>.card>.extra a:not(.ui):hover,.ui.card>.extra a:not(.ui):hover{color:#1e70bf}.ui.horizontal.cards>.card,.ui.card.horizontal{flex-direction:row;flex-wrap:wrap;min-width:270px;width:400px;max-width:100%}.ui.horizontal.cards>.card>.image,.ui.card.horizontal>.image{border-radius:.28571429rem 0 0 .28571429rem;width:150px}.ui.horizontal.cards>.card>.image>img,.ui.card.horizontal>.image>img{background-size:cover;background-repeat:no-repeat;background-position:center;justify-content:center;align-items:center;display:flex;width:100%;height:100%;border-radius:.28571429rem 0 0 .28571429rem}.ui.horizontal.cards>.card>.image:last-child>img,.ui.card.horizontal>.image:last-child>img{border-radius:0 .28571429rem .28571429rem 0}.ui.horizontal.cards>.card>.content,.ui.horizontal.card>.content{flex-basis:1px}.ui.horizontal.cards>.card>.extra,.ui.horizontal.card>.extra{flex-basis:100%}.ui.raised.cards>.card,.ui.raised.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.raised.cards a.card:hover,.ui.link.cards .raised.card:hover,a.ui.raised.card:hover,.ui.link.raised.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 4px #22242626,0 2px 10px #22242640}.ui.centered.cards{justify-content:center}.ui.centered.card{margin-left:auto;margin-right:auto}.ui.fluid.card{width:100%;max-width:9999px}.ui.cards a.card,.ui.link.cards .card,a.ui.card,.ui.link.card{transform:none}.ui.cards a.card:hover,.ui.link.cards .card:not(.icon):hover,a.ui.card:hover,.ui.link.card:hover{cursor:pointer;z-index:5;background:#FFFFFF;border:none;box-shadow:0 1px 3px #bcbdbd,0 0 0 1px #d4d4d5;transform:translateY(-3px)}.ui.primary.cards>.card,.ui.cards>.primary.card,.ui.primary.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #2185d0,0 1px 3px #d4d4d5}.ui.primary.cards>.card:hover,.ui.cards>.primary.card:hover,.ui.primary.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #1678c2,0 1px 3px #bcbdbd}.ui.inverted.primary.cards>.card,.ui.inverted.cards>.primary.card,.ui.inverted.primary.card{box-shadow:0 1px 3px #555,0 2px #54c8ff,0 0 0 1px #555}.ui.inverted.primary.cards>.card:hover,.ui.inverted.cards>.primary.card:hover,.ui.inverted.primary.card:hover{box-shadow:0 1px 3px #555,0 2px #21b8ff,0 0 0 1px #555}.ui.secondary.cards>.card,.ui.cards>.secondary.card,.ui.secondary.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #1b1c1d,0 1px 3px #d4d4d5}.ui.secondary.cards>.card:hover,.ui.cards>.secondary.card:hover,.ui.secondary.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #27292a,0 1px 3px #bcbdbd}.ui.inverted.secondary.cards>.card,.ui.inverted.cards>.secondary.card,.ui.inverted.secondary.card{box-shadow:0 1px 3px #555,0 2px #545454,0 0 0 1px #555}.ui.inverted.secondary.cards>.card:hover,.ui.inverted.cards>.secondary.card:hover,.ui.inverted.secondary.card:hover{box-shadow:0 1px 3px #555,0 2px #6e6e6e,0 0 0 1px #555}.ui.red.cards>.card,.ui.cards>.red.card,.ui.red.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #db2828,0 1px 3px #d4d4d5}.ui.red.cards>.card:hover,.ui.cards>.red.card:hover,.ui.red.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #d01919,0 1px 3px #bcbdbd}.ui.inverted.red.cards>.card,.ui.inverted.cards>.red.card,.ui.inverted.red.card{box-shadow:0 1px 3px #555,0 2px #ff695e,0 0 0 1px #555}.ui.inverted.red.cards>.card:hover,.ui.inverted.cards>.red.card:hover,.ui.inverted.red.card:hover{box-shadow:0 1px 3px #555,0 2px #ff392b,0 0 0 1px #555}.ui.orange.cards>.card,.ui.cards>.orange.card,.ui.orange.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #f2711c,0 1px 3px #d4d4d5}.ui.orange.cards>.card:hover,.ui.cards>.orange.card:hover,.ui.orange.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #f26202,0 1px 3px #bcbdbd}.ui.inverted.orange.cards>.card,.ui.inverted.cards>.orange.card,.ui.inverted.orange.card{box-shadow:0 1px 3px #555,0 2px #ff851b,0 0 0 1px #555}.ui.inverted.orange.cards>.card:hover,.ui.inverted.cards>.orange.card:hover,.ui.inverted.orange.card:hover{box-shadow:0 1px 3px #555,0 2px #e76b00,0 0 0 1px #555}.ui.yellow.cards>.card,.ui.cards>.yellow.card,.ui.yellow.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #fbbd08,0 1px 3px #d4d4d5}.ui.yellow.cards>.card:hover,.ui.cards>.yellow.card:hover,.ui.yellow.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #eaae00,0 1px 3px #bcbdbd}.ui.inverted.yellow.cards>.card,.ui.inverted.cards>.yellow.card,.ui.inverted.yellow.card{box-shadow:0 1px 3px #555,0 2px #ffe21f,0 0 0 1px #555}.ui.inverted.yellow.cards>.card:hover,.ui.inverted.cards>.yellow.card:hover,.ui.inverted.yellow.card:hover{box-shadow:0 1px 3px #555,0 2px #ebcd00,0 0 0 1px #555}.ui.olive.cards>.card,.ui.cards>.olive.card,.ui.olive.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #b5cc18,0 1px 3px #d4d4d5}.ui.olive.cards>.card:hover,.ui.cards>.olive.card:hover,.ui.olive.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #a7bd0d,0 1px 3px #bcbdbd}.ui.inverted.olive.cards>.card,.ui.inverted.cards>.olive.card,.ui.inverted.olive.card{box-shadow:0 1px 3px #555,0 2px #d9e778,0 0 0 1px #555}.ui.inverted.olive.cards>.card:hover,.ui.inverted.cards>.olive.card:hover,.ui.inverted.olive.card:hover{box-shadow:0 1px 3px #555,0 2px #d2e745,0 0 0 1px #555}.ui.green.cards>.card,.ui.cards>.green.card,.ui.green.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #21ba45,0 1px 3px #d4d4d5}.ui.green.cards>.card:hover,.ui.cards>.green.card:hover,.ui.green.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #16ab39,0 1px 3px #bcbdbd}.ui.inverted.green.cards>.card,.ui.inverted.cards>.green.card,.ui.inverted.green.card{box-shadow:0 1px 3px #555,0 2px #2ecc40,0 0 0 1px #555}.ui.inverted.green.cards>.card:hover,.ui.inverted.cards>.green.card:hover,.ui.inverted.green.card:hover{box-shadow:0 1px 3px #555,0 2px #1ea92e,0 0 0 1px #555}.ui.teal.cards>.card,.ui.cards>.teal.card,.ui.teal.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #00b5ad,0 1px 3px #d4d4d5}.ui.teal.cards>.card:hover,.ui.cards>.teal.card:hover,.ui.teal.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #009c95,0 1px 3px #bcbdbd}.ui.inverted.teal.cards>.card,.ui.inverted.cards>.teal.card,.ui.inverted.teal.card{box-shadow:0 1px 3px #555,0 2px #6dffff,0 0 0 1px #555}.ui.inverted.teal.cards>.card:hover,.ui.inverted.cards>.teal.card:hover,.ui.inverted.teal.card:hover{box-shadow:0 1px 3px #555,0 2px #3affff,0 0 0 1px #555}.ui.blue.cards>.card,.ui.cards>.blue.card,.ui.blue.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #2185d0,0 1px 3px #d4d4d5}.ui.blue.cards>.card:hover,.ui.cards>.blue.card:hover,.ui.blue.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #1678c2,0 1px 3px #bcbdbd}.ui.inverted.blue.cards>.card,.ui.inverted.cards>.blue.card,.ui.inverted.blue.card{box-shadow:0 1px 3px #555,0 2px #54c8ff,0 0 0 1px #555}.ui.inverted.blue.cards>.card:hover,.ui.inverted.cards>.blue.card:hover,.ui.inverted.blue.card:hover{box-shadow:0 1px 3px #555,0 2px #21b8ff,0 0 0 1px #555}.ui.violet.cards>.card,.ui.cards>.violet.card,.ui.violet.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #6435c9,0 1px 3px #d4d4d5}.ui.violet.cards>.card:hover,.ui.cards>.violet.card:hover,.ui.violet.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #5829bb,0 1px 3px #bcbdbd}.ui.inverted.violet.cards>.card,.ui.inverted.cards>.violet.card,.ui.inverted.violet.card{box-shadow:0 1px 3px #555,0 2px #a291fb,0 0 0 1px #555}.ui.inverted.violet.cards>.card:hover,.ui.inverted.cards>.violet.card:hover,.ui.inverted.violet.card:hover{box-shadow:0 1px 3px #555,0 2px #745aff,0 0 0 1px #555}.ui.purple.cards>.card,.ui.cards>.purple.card,.ui.purple.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #a333c8,0 1px 3px #d4d4d5}.ui.purple.cards>.card:hover,.ui.cards>.purple.card:hover,.ui.purple.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #9627ba,0 1px 3px #bcbdbd}.ui.inverted.purple.cards>.card,.ui.inverted.cards>.purple.card,.ui.inverted.purple.card{box-shadow:0 1px 3px #555,0 2px #dc73ff,0 0 0 1px #555}.ui.inverted.purple.cards>.card:hover,.ui.inverted.cards>.purple.card:hover,.ui.inverted.purple.card:hover{box-shadow:0 1px 3px #555,0 2px #cf40ff,0 0 0 1px #555}.ui.pink.cards>.card,.ui.cards>.pink.card,.ui.pink.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #e03997,0 1px 3px #d4d4d5}.ui.pink.cards>.card:hover,.ui.cards>.pink.card:hover,.ui.pink.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #e61a8d,0 1px 3px #bcbdbd}.ui.inverted.pink.cards>.card,.ui.inverted.cards>.pink.card,.ui.inverted.pink.card{box-shadow:0 1px 3px #555,0 2px #ff8edf,0 0 0 1px #555}.ui.inverted.pink.cards>.card:hover,.ui.inverted.cards>.pink.card:hover,.ui.inverted.pink.card:hover{box-shadow:0 1px 3px #555,0 2px #ff5bd1,0 0 0 1px #555}.ui.brown.cards>.card,.ui.cards>.brown.card,.ui.brown.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #a5673f,0 1px 3px #d4d4d5}.ui.brown.cards>.card:hover,.ui.cards>.brown.card:hover,.ui.brown.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #975b33,0 1px 3px #bcbdbd}.ui.inverted.brown.cards>.card,.ui.inverted.cards>.brown.card,.ui.inverted.brown.card{box-shadow:0 1px 3px #555,0 2px #d67c1c,0 0 0 1px #555}.ui.inverted.brown.cards>.card:hover,.ui.inverted.cards>.brown.card:hover,.ui.inverted.brown.card:hover{box-shadow:0 1px 3px #555,0 2px #b0620f,0 0 0 1px #555}.ui.grey.cards>.card,.ui.cards>.grey.card,.ui.grey.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #767676,0 1px 3px #d4d4d5}.ui.grey.cards>.card:hover,.ui.cards>.grey.card:hover,.ui.grey.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #838383,0 1px 3px #bcbdbd}.ui.inverted.grey.cards>.card,.ui.inverted.cards>.grey.card,.ui.inverted.grey.card{box-shadow:0 1px 3px #555,0 2px #dcddde,0 0 0 1px #555}.ui.inverted.grey.cards>.card:hover,.ui.inverted.cards>.grey.card:hover,.ui.inverted.grey.card:hover{box-shadow:0 1px 3px #555,0 2px #c2c4c5,0 0 0 1px #555}.ui.black.cards>.card,.ui.cards>.black.card,.ui.black.card{box-shadow:0 0 0 1px #d4d4d5,0 2px #1b1c1d,0 1px 3px #d4d4d5}.ui.black.cards>.card:hover,.ui.cards>.black.card:hover,.ui.black.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px #27292a,0 1px 3px #bcbdbd}.ui.inverted.black.cards>.card,.ui.inverted.cards>.black.card,.ui.inverted.black.card{box-shadow:0 1px 3px #555,0 2px #545454,0 0 0 1px #555}.ui.inverted.black.cards>.card:hover,.ui.inverted.cards>.black.card:hover,.ui.inverted.black.card:hover{box-shadow:0 1px 3px #555,0 2px #000,0 0 0 1px #555}.ui.one.cards{margin-left:0;margin-right:0}.ui.one.cards>.card{width:100%}.ui.two.cards{margin-left:-1em;margin-right:-1em}.ui.two.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.three.cards{margin-left:-1em;margin-right:-1em}.ui.three.cards>.card{width:calc(33.33333333333333% - 2em);margin-left:1em;margin-right:1em}.ui.four.cards{margin-left:-.75em;margin-right:-.75em}.ui.four.cards>.card{width:calc(25% - 1.5em);margin-left:.75em;margin-right:.75em}.ui.five.cards{margin-left:-.75em;margin-right:-.75em}.ui.five.cards>.card{width:calc(20% - 1.5em);margin-left:.75em;margin-right:.75em}.ui.six.cards{margin-left:-.75em;margin-right:-.75em}.ui.six.cards>.card{width:calc(16.666666666666664% - 1.5em);margin-left:.75em;margin-right:.75em}.ui.seven.cards{margin-left:-.5em;margin-right:-.5em}.ui.seven.cards>.card{width:calc(14.285714285714285% - 1em);margin-left:.5em;margin-right:.5em}.ui.eight.cards{margin-left:-.5em;margin-right:-.5em}.ui.eight.cards>.card{width:calc(12.5% - 1em);margin-left:.5em;margin-right:.5em;font-size:11px}.ui.nine.cards{margin-left:-.5em;margin-right:-.5em}.ui.nine.cards>.card{width:calc(11.11111111111111% - 1em);margin-left:.5em;margin-right:.5em;font-size:10px}.ui.ten.cards{margin-left:-.5em;margin-right:-.5em}.ui.ten.cards>.card{width:calc(10% - 1em);margin-left:.5em;margin-right:.5em}@media only screen and (max-width: 767.98px){.ui.two.doubling.cards{margin-left:0;margin-right:0}.ui.two.doubling.cards>.card{width:100%;margin-left:0;margin-right:0}.ui.three.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.three.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.four.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.four.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.five.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.five.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.six.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.six.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.seven.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.seven.doubling.cards>.card{width:calc(33.33333333333333% - 2em);margin-left:1em;margin-right:1em}.ui.eight.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.eight.doubling.cards>.card{width:calc(33.33333333333333% - 2em);margin-left:1em;margin-right:1em}.ui.nine.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.nine.doubling.cards>.card{width:calc(33.33333333333333% - 2em);margin-left:1em;margin-right:1em}.ui.ten.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.ten.doubling.cards>.card{width:calc(33.33333333333333% - 2em);margin-left:1em;margin-right:1em}}@media only screen and (min-width: 768px) and (max-width: 991.98px){.ui.two.doubling.cards{margin-left:0;margin-right:0}.ui.two.doubling.cards>.card{width:100%;margin-left:0;margin-right:0}.ui.three.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.three.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.four.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.four.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.five.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.five.doubling.cards>.card{width:calc(33.33333333333333% - 2em);margin-left:1em;margin-right:1em}.ui.six.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.six.doubling.cards>.card{width:calc(33.33333333333333% - 2em);margin-left:1em;margin-right:1em}.ui.eight.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.eight.doubling.cards>.card{width:calc(33.33333333333333% - 2em);margin-left:1em;margin-right:1em}.ui.eight.doubling.cards{margin-left:-.75em;margin-right:-.75em}.ui.eight.doubling.cards>.card{width:calc(25% - 1.5em);margin-left:.75em;margin-right:.75em}.ui.nine.doubling.cards{margin-left:-.75em;margin-right:-.75em}.ui.nine.doubling.cards>.card{width:calc(25% - 1.5em);margin-left:.75em;margin-right:.75em}.ui.ten.doubling.cards{margin-left:-.75em;margin-right:-.75em}.ui.ten.doubling.cards>.card{width:calc(20% - 1.5em);margin-left:.75em;margin-right:.75em}}@media only screen and (max-width: 767.98px){.ui.stackable.cards{display:block!important}.ui.stackable.cards .card:first-child{margin-top:0!important}.ui.stackable.cards>.card{display:block!important;height:auto!important;margin:1em;padding:0!important;width:calc(100% - 2em)!important}}.ui.cards>.card{font-size:1em}.ui.mini.cards .card{font-size:.78571429rem}.ui.tiny.cards .card{font-size:.85714286rem}.ui.small.cards .card{font-size:.92857143rem}.ui.large.cards .card{font-size:1.14285714rem}.ui.big.cards .card{font-size:1.28571429rem}.ui.huge.cards .card{font-size:1.42857143rem}.ui.massive.cards .card{font-size:1.71428571rem}.ui.inverted.cards>.card,.ui.inverted.card{background:#1B1C1D;box-shadow:0 1px 3px #555,0 0 0 1px #555}.ui.inverted.cards>.card>.content,.ui.inverted.card>.content{border-top:1px solid rgba(255,255,255,.15)}.ui.inverted.cards>.card>.content>.header,.ui.inverted.card>.content>.header{color:#ffffffe6}.ui.inverted.cards>.card>.content>.description,.ui.inverted.card>.content>.description{color:#fffc}.ui.inverted.cards>.card .meta,.ui.inverted.card .meta{color:#ffffffb3}.ui.inverted.cards>.card .meta>a:not(.ui),.ui.inverted.card .meta>a:not(.ui){color:#ffffffb3}.ui.inverted.cards>.card .meta>a:not(.ui):hover,.ui.inverted.card .meta>a:not(.ui):hover{color:#fff}.ui.inverted.cards>.card>.extra,.ui.inverted.card>.extra{border-top:1px solid rgba(255,255,255,.15)!important;color:#ffffffb3}.ui.inverted.cards>.card>.extra a:not(.ui),.ui.inverted.card>.extra a:not(.ui){color:#ffffff80}.ui.inverted.cards>.card>.extra a:not(.ui):hover,.ui.inverted.card>.extra a:not(.ui):hover{color:#1e70bf}.ui.inverted.cards a.card:hover,.ui.inverted.link.cards .card:not(.icon):hover,a.inverted.ui.card:hover,.ui.inverted.link.card:hover{background:#1B1C1D}.ui.checkbox{position:relative;display:inline-block;-webkit-backface-visibility:hidden;backface-visibility:hidden;outline:none;vertical-align:baseline;font-style:normal;min-height:17px;font-size:1em;line-height:17px;min-width:17px}.ui.checkbox input[type=checkbox],.ui.checkbox input[type=radio]{cursor:pointer;position:absolute;top:0;left:0;opacity:0!important;outline:none;z-index:3;width:17px;height:17px}.ui.checkbox label{cursor:auto;position:relative;display:block;padding-left:1.85714em;outline:none;font-size:1em}.ui.checkbox label:before{position:absolute;top:0;left:0;width:17px;height:17px;content:"";background:#FFFFFF;border-radius:.21428571rem;transition:border .1s ease,opacity .1s ease,transform .1s ease,box-shadow .1s ease;border:1px solid #D4D4D5}.ui.checkbox label:after{position:absolute;font-size:14px;top:0;left:0;width:17px;height:17px;text-align:center;opacity:0;color:#000000de;transition:border .1s ease,opacity .1s ease,transform .1s ease,box-shadow .1s ease}.ui.checkbox label,.ui.checkbox+label{color:#000000de;transition:color .1s ease}.ui.checkbox+label{vertical-align:middle}.ui.checkbox label:hover:before{background:#FFFFFF;border-color:#22242659}.ui.checkbox label:hover,.ui.checkbox+label:hover{color:#000c}.ui.checkbox label:active:before{background:#F9FAFB;border-color:#22242659}.ui.checkbox label:active:after{color:#000000f2}.ui.checkbox input:active~label{color:#000000f2}.ui.checkbox input:focus~label:before{background:#FFFFFF;border-color:#96c8da}.ui.checkbox input:focus~label:after{color:#000000f2}.ui.checkbox input:focus~label{color:#000000f2}.ui.checkbox input:checked~label:before{background:#FFFFFF;border-color:#22242659}.ui.checkbox input:checked~label:after{opacity:1;color:#000000f2}.ui.checkbox input:not([type=radio]):indeterminate~label:before{background:#FFFFFF;border-color:#22242659}.ui.checkbox input:not([type=radio]):indeterminate~label:after{opacity:1;color:#000000f2}.ui.indeterminate.toggle.checkbox input:not([type=radio]):indeterminate~label:before{background:rgba(0,0,0,.15)}.ui.indeterminate.toggle.checkbox input:not([type=radio])~label:after{left:1.075rem}.ui.checkbox input:not([type=radio]):indeterminate:focus~label:before,.ui.checkbox input:checked:focus~label:before{background:#FFFFFF;border-color:#96c8da}.ui.checkbox input:not([type=radio]):indeterminate:focus~label:after,.ui.checkbox input:checked:focus~label:after{color:#000000f2}.ui.read-only.checkbox,.ui.read-only.checkbox label{cursor:default}.ui.disabled.checkbox label,.ui.checkbox input[disabled]~label{cursor:default!important;opacity:.5;color:#000;pointer-events:none}.ui.checkbox input.hidden{z-index:-1}.ui.checkbox input.hidden+label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ui.radio.checkbox{min-height:15px}.ui.radio.checkbox label{padding-left:1.85714em}.ui.radio.checkbox label:before{content:"";transform:none;width:15px;height:15px;border-radius:500rem;top:1px;left:0}.ui.radio.checkbox label:after{border:none;content:""!important;line-height:15px;top:1px;left:0;width:15px;height:15px;border-radius:500rem;transform:scale(.46666667);background-color:#000000de}.ui.radio.checkbox input:focus~label:before{background-color:#fff}.ui.radio.checkbox input:focus~label:after{background-color:#000000f2}.ui.radio.checkbox input:indeterminate~label:after{opacity:0}.ui.radio.checkbox input:checked~label:before{background-color:#fff}.ui.radio.checkbox input:checked~label:after{background-color:#000000f2}.ui.radio.checkbox input:focus:checked~label:before{background-color:#fff}.ui.radio.checkbox input:focus:checked~label:after{background-color:#000000f2}.ui.slider.checkbox{min-height:1.25rem}.ui.slider.checkbox input{width:3.5rem;height:1.25rem}.ui.slider.checkbox label{padding-left:4.5rem;line-height:1rem;color:#0006}.ui.slider.checkbox label:before{display:block;position:absolute;content:"";transform:none;border:none!important;left:0;z-index:1;top:.4rem;background-color:#0000000d;width:3.5rem;height:.21428571rem;border-radius:500rem;transition:background .3s ease}.ui.slider.checkbox label:after{background:#FFFFFF linear-gradient(transparent,rgba(0,0,0,.05));position:absolute;content:""!important;opacity:1;z-index:2;border:none;box-shadow:0 1px 2px #22242626,0 0 0 1px #22242626 inset;width:1.5rem;height:1.5rem;top:-.25rem;left:0;transform:none;border-radius:500rem;transition:left .3s ease}.ui.slider.checkbox input:focus~label:before{background-color:#00000026;border:none}.ui.slider.checkbox label:hover{color:#000c}.ui.slider.checkbox label:hover:before{background:rgba(0,0,0,.15)}.ui.slider.checkbox input:checked~label{color:#000000f2!important}.ui.slider.checkbox input:checked~label:before{background-color:#545454!important}.ui.slider.checkbox input:checked~label:after{left:2rem}.ui.slider.checkbox input:focus:checked~label{color:#000000f2!important}.ui.slider.checkbox input:focus:checked~label:before{background-color:#000!important}.ui.toggle.checkbox{min-height:1.5rem}.ui.toggle.checkbox input{width:3.5rem;height:1.5rem}.ui.toggle.checkbox label{min-height:1.5rem;padding-left:4.5rem;color:#000000de}.ui.toggle.checkbox label{padding-top:.15em}.ui.toggle.checkbox label:before{display:block;position:absolute;content:"";z-index:1;transform:none;border:none;top:0;background:rgba(0,0,0,.05);box-shadow:none;width:3.5rem;height:1.5rem;border-radius:500rem}.ui.toggle.checkbox label:after{background:#FFFFFF linear-gradient(transparent,rgba(0,0,0,.05));position:absolute;content:""!important;opacity:1;z-index:2;border:none;box-shadow:0 1px 2px #22242626,0 0 0 1px #22242626 inset;width:1.5rem;height:1.5rem;top:0;left:0;border-radius:500rem;transition:background .3s ease,left .3s ease}.ui.toggle.checkbox input~label:after{left:-.05rem;box-shadow:0 1px 2px #22242626,0 0 0 1px #22242626 inset}.ui.toggle.checkbox input:focus~label:before{background-color:#00000026;border:none}.ui.toggle.checkbox label:hover:before{background-color:#00000026;border:none}.ui.toggle.checkbox input:checked~label{color:#000000f2!important}.ui.toggle.checkbox input:checked~label:before{background-color:#2185d0!important}.ui.toggle.checkbox input:checked~label:after{left:2.15rem;box-shadow:0 1px 2px #22242626,0 0 0 1px #22242626 inset}.ui.toggle.checkbox input:focus:checked~label{color:#000000f2!important}.ui.toggle.checkbox input:focus:checked~label:before{background-color:#0d71bb!important}.ui.fitted.checkbox label{padding-left:0!important}.ui.fitted.toggle.checkbox,.ui.fitted.slider.checkbox{width:3.5rem}.ui.inverted.checkbox label,.ui.inverted.checkbox+label{color:#ffffffe6!important}.ui.inverted.checkbox label:hover{color:#fff!important}.ui.inverted.checkbox label:hover:before{border-color:#22242680}.ui.inverted.slider.checkbox label{color:#ffffff80}.ui.inverted.slider.checkbox label:before{background-color:#ffffff80!important}.ui.inverted.slider.checkbox label:hover:before{background:rgba(255,255,255,.7)!important}.ui.inverted.slider.checkbox input:checked~label{color:#fff!important}.ui.inverted.slider.checkbox input:checked~label:before{background-color:#fffc!important}.ui.inverted.slider.checkbox input:focus:checked~label{color:#fff!important}.ui.inverted.slider.checkbox input:focus:checked~label:before{background-color:#fffc!important}.ui.inverted.toggle.checkbox label:before{background-color:#ffffffe6!important}.ui.inverted.toggle.checkbox label:hover:before{background:#ffffff!important}.ui.inverted.toggle.checkbox input:checked~label{color:#fff!important}.ui.inverted.toggle.checkbox input:checked~label:before{background-color:#2185d0!important}.ui.inverted.toggle.checkbox input:focus:checked~label{color:#fff!important}.ui.inverted.toggle.checkbox input:focus:checked~label:before{background-color:#0d71bb!important}.ui.mini.checkbox{font-size:.78571429em}.ui.tiny.checkbox{font-size:.85714286em}.ui.small.checkbox{font-size:.92857143em}.ui.large.checkbox{font-size:1.14285714em}.ui.large.form .checkbox:not(.slider):not(.toggle):not(.radio) label:after,.ui.large.checkbox:not(.slider):not(.toggle):not(.radio) label:after,.ui.large.form .checkbox:not(.slider):not(.toggle):not(.radio) label:before,.ui.large.checkbox:not(.slider):not(.toggle):not(.radio) label:before{transform:scale(1.14285714);transform-origin:left}.ui.large.form .checkbox.radio label:before,.ui.large.checkbox.radio label:before{transform:scale(1.14285714);transform-origin:left}.ui.large.form .checkbox.radio label:after,.ui.large.checkbox.radio label:after{transform:scale(.57142857);transform-origin:left;left:.33571429em}.ui.big.checkbox{font-size:1.28571429em}.ui.big.form .checkbox:not(.slider):not(.toggle):not(.radio) label:after,.ui.big.checkbox:not(.slider):not(.toggle):not(.radio) label:after,.ui.big.form .checkbox:not(.slider):not(.toggle):not(.radio) label:before,.ui.big.checkbox:not(.slider):not(.toggle):not(.radio) label:before{transform:scale(1.28571429);transform-origin:left}.ui.big.form .checkbox.radio label:before,.ui.big.checkbox.radio label:before{transform:scale(1.28571429);transform-origin:left}.ui.big.form .checkbox.radio label:after,.ui.big.checkbox.radio label:after{transform:scale(.64285714);transform-origin:left;left:.37142857em}.ui.huge.checkbox{font-size:1.42857143em}.ui.huge.form .checkbox:not(.slider):not(.toggle):not(.radio) label:after,.ui.huge.checkbox:not(.slider):not(.toggle):not(.radio) label:after,.ui.huge.form .checkbox:not(.slider):not(.toggle):not(.radio) label:before,.ui.huge.checkbox:not(.slider):not(.toggle):not(.radio) label:before{transform:scale(1.42857143);transform-origin:left}.ui.huge.form .checkbox.radio label:before,.ui.huge.checkbox.radio label:before{transform:scale(1.42857143);transform-origin:left}.ui.huge.form .checkbox.radio label:after,.ui.huge.checkbox.radio label:after{transform:scale(.71428571);transform-origin:left;left:.40714286em}.ui.massive.checkbox{font-size:1.71428571em}.ui.massive.form .checkbox:not(.slider):not(.toggle):not(.radio) label:after,.ui.massive.checkbox:not(.slider):not(.toggle):not(.radio) label:after,.ui.massive.form .checkbox:not(.slider):not(.toggle):not(.radio) label:before,.ui.massive.checkbox:not(.slider):not(.toggle):not(.radio) label:before{transform:scale(1.71428571);transform-origin:left}.ui.massive.form .checkbox.radio label:before,.ui.massive.checkbox.radio label:before{transform:scale(1.71428571);transform-origin:left}.ui.massive.form .checkbox.radio label:after,.ui.massive.checkbox.radio label:after{transform:scale(.85714286);transform-origin:left;left:.47857143em}@font-face{font-family:Checkbox;src:url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format("truetype")}.ui.checkbox label:after,.ui.checkbox .box:after{font-family:Checkbox}.ui.checkbox input:checked~.box:after,.ui.checkbox input:checked~label:after{content:"\e800"}.ui.checkbox input:indeterminate~.box:after,.ui.checkbox input:indeterminate~label:after{font-size:12px;content:"\e801"}.ui.comments{margin:1.5em 0;max-width:650px}.ui.comments:first-child{margin-top:0}.ui.comments:last-child{margin-bottom:0}.ui.comments .comment{position:relative;background:none;margin:.5em 0 0;padding:.5em 0 0;border:none;border-top:none;line-height:1.2}.ui.comments .comment:first-child{margin-top:0;padding-top:0}.ui.comments .comment>.comments{margin:0 0 .5em .5em;padding:1em 0 1em 1em}.ui.comments .comment>.comments:before{position:absolute;top:0;left:0}.ui.comments .comment>.comments .comment{border:none;border-top:none;background:none}.ui.comments .comment .avatar{display:block;width:2.5em;height:auto;float:left;margin:.2em 0 0}.ui.comments .comment img.avatar,.ui.comments .comment .avatar img{display:block;margin:0 auto;width:100%;height:100%;border-radius:.25rem}.ui.comments .comment>.content{display:block}.ui.comments .comment>.avatar~.content{margin-left:3.5em}.ui.comments .comment .author{font-size:1em;color:#000000de;font-weight:500}.ui.comments .comment a.author{cursor:pointer}.ui.comments .comment a.author:hover{color:#1e70bf}.ui.comments .comment .metadata{display:inline-block;margin-left:.5em;color:#0006;font-size:.875em}.ui.comments .comment .metadata>*{display:inline-block;margin:0 .5em 0 0}.ui.comments .comment .metadata>:last-child{margin-right:0}.ui.comments .comment .text{margin:.25em 0 .5em;font-size:1em;word-wrap:break-word;color:#000000de;line-height:1.3}.ui.comments .comment .actions{font-size:.875em}.ui.comments .comment .actions a{cursor:pointer;display:inline-block;margin:0 .75em 0 0;color:#0006}.ui.comments .comment .actions a:last-child{margin-right:0}.ui.comments .comment .actions a.active,.ui.comments .comment .actions a:hover{color:#000c}.ui.comments>.reply.form{margin-top:1em}.ui.comments .comment .reply.form{width:100%;margin-top:1em}.ui.comments .reply.form textarea{font-size:1em;height:12em}.ui.collapsed.comments,.ui.comments .collapsed.comments,.ui.comments .collapsed.comment{display:none}.ui.threaded.comments .comment>.comments{margin:-1.5em 0 -1em 1.25em;padding:3em 0 2em 2.25em;box-shadow:-1px 0 #22242626}.ui.minimal.comments .comment .actions{opacity:0;position:absolute;top:0;right:0;left:auto;transition:opacity .2s ease;transition-delay:.1s}.ui.minimal.comments .comment>.content:hover>.actions{opacity:1}.ui.comments{font-size:1rem}.ui.mini.comments{font-size:.78571429rem}.ui.tiny.comments{font-size:.85714286rem}.ui.small.comments{font-size:.92857143rem}.ui.large.comments{font-size:1.14285714rem}.ui.big.comments{font-size:1.28571429rem}.ui.huge.comments{font-size:1.42857143rem}.ui.massive.comments{font-size:1.71428571rem}.ui.inverted.comments .comment{background-color:#1b1c1d}.ui.inverted.comments .comment .author,.ui.inverted.comments .comment .text{color:#ffffffe6}.ui.inverted.comments .comment .metadata,.ui.inverted.comments .comment .actions a{color:#ffffffb3}.ui.inverted.comments .comment a.author:hover,.ui.inverted.comments .comment .actions a.active,.ui.inverted.comments .comment .actions a:hover{color:#fff}.ui.inverted.threaded.comments .comment>.comments{box-shadow:-1px 0 #555}.ui.container{display:block;max-width:100%}@media only screen and (max-width: 767.98px){.ui.ui.ui.container:not(.fluid){width:auto;margin-left:1em;margin-right:1em}.ui.ui.ui.grid.container,.ui.ui.ui.relaxed.grid.container,.ui.ui.ui.very.relaxed.grid.container{width:auto}}@media only screen and (min-width: 768px) and (max-width: 991.98px){.ui.ui.ui.container:not(.fluid){width:723px;margin-left:auto;margin-right:auto}.ui.ui.ui.grid.container{width:calc(723px + 2rem)}.ui.ui.ui.relaxed.grid.container{width:calc(723px + 3rem)}.ui.ui.ui.very.relaxed.grid.container{width:calc(723px + 5rem)}}@media only screen and (min-width: 992px) and (max-width: 1199.98px){.ui.ui.ui.container:not(.fluid){width:933px;margin-left:auto;margin-right:auto}.ui.ui.ui.grid.container{width:calc(933px + 2rem)}.ui.ui.ui.relaxed.grid.container{width:calc(933px + 3rem)}.ui.ui.ui.very.relaxed.grid.container{width:calc(933px + 5rem)}}@media only screen and (min-width: 1200px){.ui.ui.ui.container:not(.fluid){width:1127px;margin-left:auto;margin-right:auto}.ui.ui.ui.grid.container{width:calc(1127px + 2rem)}.ui.ui.ui.relaxed.grid.container{width:calc(1127px + 3rem)}.ui.ui.ui.very.relaxed.grid.container{width:calc(1127px + 5rem)}}.ui.text.container{font-family:var(--fonts-regular);max-width:700px;line-height:1.5;font-size:1.14285714rem}.ui.fluid.container{width:100%}.ui[class*="left aligned"].container{text-align:left}.ui[class*="center aligned"].container{text-align:center}.ui[class*="right aligned"].container{text-align:right}.ui.justified.container{text-align:justify;-webkit-hyphens:auto;hyphens:auto}.dimmable:not(body){position:relative}.ui.dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;padding:1em;background:rgba(0,0,0,.85);opacity:0;line-height:1;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;animation-duration:.5s;transition:background-color .5s linear;flex-direction:column;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:opacity;z-index:1000}.ui.dimmer>.content{-webkit-user-select:text;-moz-user-select:text;user-select:text;color:#fff}.ui.segment>.ui.dimmer:not(.page){border-radius:inherit}.animating.dimmable:not(body),.dimmed.dimmable:not(body){overflow:hidden}.dimmed.dimmable>.ui.animating.dimmer,.dimmed.dimmable>.ui.visible.dimmer,.ui.active.dimmer{display:flex;opacity:1}.ui.disabled.dimmer{width:0!important;height:0!important}.dimmed.dimmable>.ui.animating.legacy.dimmer,.dimmed.dimmable>.ui.visible.legacy.dimmer,.ui.active.legacy.dimmer{display:block}.ui[class*="top aligned"].dimmer{justify-content:flex-start}.ui[class*="bottom aligned"].dimmer{justify-content:flex-end}.ui.page.dimmer{position:fixed;transform-style:"";perspective:2000px;transform-origin:center center}.ui.page.dimmer.modals{-moz-perspective:none}body.animating.in.dimmable,body.dimmed.dimmable{overflow:hidden}body.dimmable>.dimmer{position:fixed}.blurring.dimmable>:not(.dimmer){filter:initial;transition:.8s filter ease}.blurring.dimmed.dimmable>:not(.dimmer):not(.popup){filter:blur(5px) grayscale(.7)}.blurring.dimmable>.dimmer{background:rgba(0,0,0,.6)}.blurring.dimmable>.inverted.dimmer{background:rgba(255,255,255,.6)}.ui.dimmer>.top.aligned.content>*{vertical-align:top}.ui.dimmer>.bottom.aligned.content>*{vertical-align:bottom}.medium.medium.medium.medium.medium.dimmer{background:rgba(0,0,0,.65)}.light.light.light.light.light.dimmer{background:rgba(0,0,0,.45)}.very.light.light.light.light.dimmer{background:rgba(0,0,0,.25)}.ui.inverted.dimmer{background:rgba(255,255,255,.85)}.ui.inverted.dimmer>.content,.ui.inverted.dimmer>.content>*{color:#000}.medium.medium.medium.medium.medium.inverted.dimmer{background:rgba(255,255,255,.65)}.light.light.light.light.light.inverted.dimmer{background:rgba(255,255,255,.45)}.very.light.light.light.light.inverted.dimmer{background:rgba(255,255,255,.25)}.ui.simple.dimmer{display:block;overflow:hidden;opacity:0;width:0;height:0;z-index:-100;background:rgba(0,0,0,0)}.dimmed.dimmable>.ui.simple.dimmer{overflow:visible;opacity:1;width:100%;height:100%;background:rgba(0,0,0,.85);z-index:1}.ui.simple.inverted.dimmer{background:rgba(255,255,255,0)}.dimmed.dimmable>.ui.simple.inverted.dimmer{background:rgba(255,255,255,.85)}.ui[class*="top dimmer"],.ui[class*="center dimmer"],.ui[class*="bottom dimmer"]{height:auto}.ui[class*="bottom dimmer"]{top:auto!important;bottom:0}.ui[class*="center dimmer"]{top:50%!important;transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}.ui.segment>.ui.ui[class*="top dimmer"]{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui.segment>.ui.ui[class*="center dimmer"]{border-radius:0}.ui.segment>.ui.ui[class*="bottom dimmer"]{border-top-left-radius:0;border-top-right-radius:0}.ui[class*="center dimmer"].transition[class*="fade up"].in{-webkit-animation-name:fadeInUpCenter;animation-name:fadeInUpCenter}.ui[class*="center dimmer"].transition[class*="fade down"].in{-webkit-animation-name:fadeInDownCenter;animation-name:fadeInDownCenter}.ui[class*="center dimmer"].transition[class*="fade up"].out{-webkit-animation-name:fadeOutUpCenter;animation-name:fadeOutUpCenter}.ui[class*="center dimmer"].transition[class*="fade down"].out{-webkit-animation-name:fadeOutDownCenter;animation-name:fadeOutDownCenter}.ui[class*="center dimmer"].bounce.transition{-webkit-animation-name:bounceCenter;animation-name:bounceCenter}@-webkit-keyframes fadeInUpCenter{0%{opacity:0;transform:translateY(-40%);-webkit-transform:translateY(calc(-40% - .5px))}to{opacity:1;transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}}@keyframes fadeInUpCenter{0%{opacity:0;transform:translateY(-40%);-webkit-transform:translateY(calc(-40% - .5px))}to{opacity:1;transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}}@-webkit-keyframes fadeInDownCenter{0%{opacity:0;transform:translateY(-60%);-webkit-transform:translateY(calc(-60% - .5px))}to{opacity:1;transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}}@keyframes fadeInDownCenter{0%{opacity:0;transform:translateY(-60%);-webkit-transform:translateY(calc(-60% - .5px))}to{opacity:1;transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}}@-webkit-keyframes fadeOutUpCenter{0%{opacity:1;transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}to{opacity:0;transform:translateY(-45%);-webkit-transform:translateY(calc(-45% - .5px))}}@keyframes fadeOutUpCenter{0%{opacity:1;transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}to{opacity:0;transform:translateY(-45%);-webkit-transform:translateY(calc(-45% - .5px))}}@-webkit-keyframes fadeOutDownCenter{0%{opacity:1;transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}to{opacity:0;transform:translateY(-55%);-webkit-transform:translateY(calc(-55% - .5px))}}@keyframes fadeOutDownCenter{0%{opacity:1;transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}to{opacity:0;transform:translateY(-55%);-webkit-transform:translateY(calc(-55% - .5px))}}@-webkit-keyframes bounceCenter{0%,20%,50%,80%,to{transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}40%{transform:translateY(calc(-50% - 30px))}60%{transform:translateY(calc(-50% - 15px))}}@keyframes bounceCenter{0%,20%,50%,80%,to{transform:translateY(-50%);-webkit-transform:translateY(calc(-50% - .5px))}40%{transform:translateY(calc(-50% - 30px))}60%{transform:translateY(calc(-50% - 15px))}}.ui.divider{margin:1rem 0;line-height:1;height:0;font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:#000000d9;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ui.divider:not(.vertical):not(.horizontal){border-top:1px solid rgba(34,36,38,.15);border-bottom:1px solid rgba(255,255,255,.1)}.ui.grid>.column+.divider,.ui.grid>.row>.column+.divider{left:auto}.ui.horizontal.divider{display:table;white-space:nowrap;height:auto;margin:"";line-height:1;text-align:center}.ui.horizontal.divider:before,.ui.horizontal.divider:after{content:"";display:table-cell;position:relative;top:50%;width:50%;background-repeat:no-repeat}.ui.horizontal.divider:before{background-position:right 1em top 50%}.ui.horizontal.divider:after{background-position:left 1em top 50%}.ui.vertical.divider{position:absolute;z-index:2;top:50%;left:50%;margin:0;padding:0;width:auto;height:50%;line-height:0;text-align:center;transform:translate(-50%)}.ui.vertical.divider:before,.ui.vertical.divider:after{position:absolute;left:50%;content:"";z-index:3;border-left:1px solid rgba(34,36,38,.15);border-right:1px solid rgba(255,255,255,.1);width:0;height:calc(100% - 1rem)}.ui.vertical.divider:before{top:-100%}.ui.vertical.divider:after{top:auto;bottom:0}@media only screen and (max-width: 767.98px){.ui.stackable.grid .ui.vertical.divider,.ui.grid .stackable.row .ui.vertical.divider{display:table;white-space:nowrap;height:auto;margin:"";overflow:hidden;line-height:1;text-align:center;position:static;top:0;left:0;transform:none}.ui.stackable.grid .ui.vertical.divider:before,.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:after,.ui.grid .stackable.row .ui.vertical.divider:after{left:0;border-left:none;border-right:none;content:"";display:table-cell;position:relative;top:50%;width:50%;background-repeat:no-repeat}.ui.stackable.grid .ui.vertical.divider:before,.ui.grid .stackable.row .ui.vertical.divider:before{background-position:right 1em top 50%}.ui.stackable.grid .ui.vertical.divider:after,.ui.grid .stackable.row .ui.vertical.divider:after{background-position:left 1em top 50%}}.ui.divider>.icon{margin:0;font-size:1rem;height:1em;vertical-align:middle}.ui.horizontal.divider[class*="left aligned"]:before{display:none}.ui.horizontal.divider[class*="left aligned"]:after{width:100%}.ui.horizontal.divider[class*="right aligned"]:before{width:100%}.ui.horizontal.divider[class*="right aligned"]:after{display:none}.ui.hidden.divider{border-color:transparent!important}.ui.hidden.divider:before,.ui.hidden.divider:after{display:none}.ui.divider.inverted,.ui.vertical.inverted.divider,.ui.horizontal.inverted.divider{color:#fff}.ui.divider.inverted,.ui.divider.inverted:after,.ui.divider.inverted:before{border-top-color:#22242626!important;border-left-color:#22242626!important;border-bottom-color:#ffffff26!important;border-right-color:#ffffff26!important}.ui.fitted.divider{margin:0}.ui.clearing.divider{clear:both}.ui.section.divider{margin-top:2rem;margin-bottom:2rem}.ui.divider{font-size:1rem}.ui.mini.divider{font-size:.78571429rem}.ui.tiny.divider{font-size:.85714286rem}.ui.small.divider{font-size:.92857143rem}.ui.large.divider{font-size:1.14285714rem}.ui.big.divider{font-size:1.28571429rem}.ui.huge.divider{font-size:1.42857143rem}.ui.massive.divider{font-size:1.71428571rem}.ui.horizontal.divider:before,.ui.horizontal.divider:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC)}@media only screen and (max-width: 767px){.ui.stackable.grid .ui.vertical.divider:before,.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:after,.ui.grid .stackable.row .ui.vertical.divider:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC)}}.ui.dropdown{cursor:pointer;position:relative;display:inline-block;outline:none;text-align:left;transition:box-shadow .1s ease,width .1s ease;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ui.dropdown .menu{cursor:auto;position:absolute;display:none;outline:none;top:100%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;margin:0;padding:0;background:#FFFFFF;font-size:1em;text-shadow:none;text-align:left;box-shadow:0 2px 3px #22242626;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem;transition:opacity .1s ease;z-index:11;will-change:transform,opacity}.ui.dropdown .menu>*{white-space:nowrap}.ui.dropdown>input:not(.search):first-child,.ui.dropdown>select{display:none!important}.ui.dropdown:not(.labeled)>.dropdown.icon{position:relative;width:auto;font-size:.85714286em;margin:0 0 0 1em}.ui.dropdown .menu>.item .dropdown.icon{width:auto;float:right;margin:0 0 0 1em}.ui.dropdown .menu>.item .dropdown.icon+.text{margin-right:1em}.ui.dropdown>.text{display:inline-block;transition:none}.ui.dropdown .menu>.item{position:relative;cursor:pointer;display:block;border:none;height:auto;min-height:2.57142857rem;text-align:left;border-top:none;line-height:1em;font-size:1rem;color:#000000de;padding:.78571429rem 1.14285714rem!important;text-transform:none;font-weight:400;box-shadow:none;-webkit-touch-callout:none}.ui.dropdown .menu>.item:first-child{border-top-width:0}.ui.dropdown .menu>.item.vertical{display:flex;flex-direction:column-reverse}.ui.dropdown>.text>[class*="right floated"],.ui.dropdown .menu .item>[class*="right floated"]{float:right!important;margin-right:0!important;margin-left:1em!important}.ui.dropdown>.text>[class*="left floated"],.ui.dropdown .menu .item>[class*="left floated"]{float:left!important;margin-left:0!important;margin-right:1em!important}.ui.dropdown .menu .item>i.icon.floated,.ui.dropdown .menu .item>.flag.floated,.ui.dropdown .menu .item>.image.floated,.ui.dropdown .menu .item>img.floated{margin-top:0}.ui.dropdown .menu>.header{margin:1rem 0 .75rem;padding:0 1.14285714rem;font-weight:500;text-transform:uppercase}.ui.dropdown .menu>.header:not(.ui){color:#000000d9;font-size:.78571429em}.ui.dropdown .menu>.divider{border-top:1px solid rgba(34,36,38,.1);height:0;margin:.5em 0}.ui.dropdown .menu>.horizontal.divider{border-top:none}.ui.dropdown.dropdown .menu>.input{width:auto;display:flex;margin:1.14285714rem .78571429rem;min-width:10rem}.ui.dropdown .menu>.header+.input{margin-top:0}.ui.dropdown .menu>.input:not(.transparent) input{padding:.5em 1em}.ui.dropdown .menu>.input:not(.transparent) .button,.ui.dropdown .menu>.input:not(.transparent) i.icon,.ui.dropdown .menu>.input:not(.transparent) .label{padding-top:.5em;padding-bottom:.5em}.ui.dropdown>.text>.description,.ui.dropdown .menu>.item>.description{float:right;margin:0 0 0 1em;color:#0006}.ui.dropdown .menu>.item.vertical>.description{margin:0}.ui.dropdown .menu>.item.vertical>.text{margin-bottom:.25em}.ui.dropdown .menu>.message{padding:.78571429rem 1.14285714rem;font-weight:400}.ui.dropdown .menu>.message:not(.ui){color:#0006}.ui.dropdown .menu .menu{top:0;left:100%;right:auto;margin:0 -.5em!important;border-radius:.28571429rem!important;z-index:21!important}.ui.dropdown .menu .menu:after{display:none}.ui.dropdown>.text>i.icon,.ui.dropdown>.text>.label,.ui.dropdown>.text>.flag,.ui.dropdown>.text>img,.ui.dropdown>.text>.image{margin-top:0}.ui.dropdown .menu>.item>i.icon,.ui.dropdown .menu>.item>.label,.ui.dropdown .menu>.item>.flag,.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>img{margin-top:0}.ui.dropdown>.text>i.icon,.ui.dropdown>.text>.label,.ui.dropdown>.text>.flag,.ui.dropdown>.text>img,.ui.dropdown>.text>.image,.ui.dropdown .menu>.item>i.icon,.ui.dropdown .menu>.item>.label,.ui.dropdown .menu>.item>.flag,.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>img{margin-left:0;float:none;margin-right:.78571429rem}.ui.dropdown>.text>img,.ui.dropdown>.text>.image:not(.icon),.ui.dropdown .menu>.item>.image:not(.icon),.ui.dropdown .menu>.item>img{display:inline-block;vertical-align:top;width:auto;margin-top:-.5em;margin-bottom:-.5em;max-height:2em}.ui.dropdown .ui.menu>.item:before,.ui.menu .ui.dropdown .menu>.item:before{display:none}.ui.menu .ui.dropdown .menu .active.item{border-left:none}.ui.menu .right.menu .dropdown:last-child>.menu:not(.left),.ui.menu .right.dropdown.item>.menu:not(.left),.ui.buttons>.ui.dropdown:last-child>.menu:not(.left){left:auto;right:0}.ui.label.dropdown .menu{min-width:100%}.ui.dropdown.icon.button>.dropdown.icon{margin:0}.ui.button.dropdown .menu{min-width:100%}select.ui.dropdown{height:38px;padding:.5em;border:1px solid rgba(34,36,38,.15);visibility:visible}.ui.selection.dropdown{cursor:pointer;word-wrap:break-word;line-height:1em;white-space:normal;outline:0;transform:rotate(0);min-width:14em;min-height:2.71428571em;background:#FFFFFF;display:inline-block;padding:.78571429em 3.2em .78571429em 1em;color:#000000de;box-shadow:none;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem;transition:box-shadow .1s ease,width .1s ease}.ui.selection.dropdown.visible,.ui.selection.dropdown.active{z-index:10}.ui.selection.dropdown>.search.icon,.ui.selection.dropdown>.delete.icon,.ui.selection.dropdown>.dropdown.icon{cursor:pointer;position:absolute;width:auto;height:auto;line-height:1.21428571em;top:.78571429em;right:1em;z-index:3;margin:-.78571429em;padding:.91666667em;opacity:.8;transition:opacity .1s ease}.ui.compact.selection.dropdown{min-width:0}.ui.selection.dropdown .menu{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch;border-top-width:0!important;width:auto;outline:none;margin:0 -1px;min-width:calc(100% + 2px);width:calc(100% + 2px);border-radius:0 0 .28571429rem .28571429rem;box-shadow:0 2px 3px #22242626;transition:opacity .1s ease}.ui.selection.dropdown .menu:after,.ui.selection.dropdown .menu:before{display:none}.ui.selection.dropdown .menu>.message{padding:.78571429rem 1.14285714rem}@media only screen and (max-width: 767.98px){.ui.selection.dropdown.short .menu{max-height:6.01071429rem}.ui.selection.dropdown[class*="very short"] .menu{max-height:4.00714286rem}.ui.selection.dropdown .menu{max-height:8.01428571rem}.ui.selection.dropdown.long .menu{max-height:16.02857143rem}.ui.selection.dropdown[class*="very long"] .menu{max-height:24.04285714rem}}@media only screen and (min-width: 768px){.ui.selection.dropdown.short .menu{max-height:8.01428571rem}.ui.selection.dropdown[class*="very short"] .menu{max-height:5.34285714rem}.ui.selection.dropdown .menu{max-height:10.68571429rem}.ui.selection.dropdown.long .menu{max-height:21.37142857rem}.ui.selection.dropdown[class*="very long"] .menu{max-height:32.05714286rem}}@media only screen and (min-width: 992px){.ui.selection.dropdown.short .menu{max-height:12.02142857rem}.ui.selection.dropdown[class*="very short"] .menu{max-height:8.01428571rem}.ui.selection.dropdown .menu{max-height:16.02857143rem}.ui.selection.dropdown.long .menu{max-height:32.05714286rem}.ui.selection.dropdown[class*="very long"] .menu{max-height:48.08571429rem}}@media only screen and (min-width: 1920px){.ui.selection.dropdown.short .menu{max-height:16.02857143rem}.ui.selection.dropdown[class*="very short"] .menu{max-height:10.68571429rem}.ui.selection.dropdown .menu{max-height:21.37142857rem}.ui.selection.dropdown.long .menu{max-height:42.74285714rem}.ui.selection.dropdown[class*="very long"] .menu{max-height:64.11428571rem}}.ui.selection.dropdown .menu>.item{border-top:1px solid #FAFAFA;padding:.78571429rem 1.14285714rem!important;white-space:normal;word-wrap:normal}.ui.selection.dropdown .menu>.hidden.addition.item{display:none}.ui.selection.dropdown:hover{border-color:#22242659;box-shadow:none}.ui.selection.active.dropdown,.ui.selection.active.dropdown .menu{border-color:#96c8da;box-shadow:0 2px 3px #22242626}.ui.selection.dropdown:focus{border-color:#96c8da;box-shadow:none}.ui.selection.dropdown:focus .menu{border-color:#96c8da;box-shadow:0 2px 3px #22242626}.ui.selection.visible.dropdown>.text:not(.default){font-weight:400;color:#000c}.ui.selection.active.dropdown:hover,.ui.selection.active.dropdown:hover .menu{border-color:#96c8da;box-shadow:0 2px 3px #22242626}.ui.active.selection.dropdown>.dropdown.icon,.ui.visible.selection.dropdown>.dropdown.icon{opacity:"";z-index:3}.ui.active.selection.dropdown{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.active.empty.selection.dropdown{border-radius:.28571429rem!important;box-shadow:none!important}.ui.active.empty.selection.dropdown .menu{border:none!important;box-shadow:none!important}@supports (-webkit-touch-callout: none) or (-webkit-overflow-scrolling: touch) or (-moz-appearance:none){@media (-moz-touch-enabled),(pointer: coarse){.ui.dropdown .scrollhint.menu:not(.hidden):before{-webkit-animation:scrollhint 2s ease 2;animation:scrollhint 2s ease 2;content:"";z-index:15;display:block;position:absolute;opacity:0;right:.25em;top:0;height:100%;border-right:.25em solid;border-left:0;-o-border-image:linear-gradient(to bottom,rgba(0,0,0,.75),rgba(0,0,0,0)) 1 100%;border-image:linear-gradient(to bottom,rgba(0,0,0,.75),rgba(0,0,0,0)) 1 100%}.ui.inverted.dropdown .scrollhint.menu:not(.hidden):before{-o-border-image:linear-gradient(to bottom,rgba(255,255,255,.75),rgba(255,255,255,0)) 1 100%;border-image:linear-gradient(to bottom,rgba(255,255,255,.75),rgba(255,255,255,0)) 1 100%}@-webkit-keyframes scrollhint{0%{opacity:1;top:100%}to{opacity:0;top:0}}@keyframes scrollhint{0%{opacity:1;top:100%}to{opacity:0;top:0}}}}.ui.search.dropdown{min-width:""}.ui.search.dropdown>input.search{background:none transparent!important;border:none!important;box-shadow:none!important;cursor:text;top:0;left:1px;width:100%;outline:none;-webkit-tap-highlight-color:rgba(255,255,255,0);padding:inherit}.ui.search.dropdown>input.search{position:absolute;z-index:2}.ui.search.dropdown>.text{cursor:text;position:relative;left:1px;z-index:auto}.ui.search.selection.dropdown>input.search{line-height:1.21428571em;padding:.67857143em 3.2em .67857143em 1em}.ui.search.selection.dropdown>span.sizer{line-height:1.21428571em;padding:.67857143em 3.2em .67857143em 1em;display:none;white-space:pre}.ui.search.dropdown.active>input.search,.ui.search.dropdown.visible>input.search{cursor:auto}.ui.search.dropdown.active>.text,.ui.search.dropdown.visible>.text{pointer-events:none}.ui.active.search.dropdown input.search:focus+.text i.icon,.ui.active.search.dropdown input.search:focus+.text .flag{opacity:var(--opacity-disabled)}.ui.active.search.dropdown input.search:focus+.text{color:#737373de!important}.ui.search.dropdown.button>span.sizer{display:none}.ui.search.dropdown .menu{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}@media only screen and (max-width: 767.98px){.ui.search.dropdown .menu{max-height:8.01428571rem}}@media only screen and (min-width: 768px){.ui.search.dropdown .menu{max-height:10.68571429rem}}@media only screen and (min-width: 992px){.ui.search.dropdown .menu{max-height:16.02857143rem}}@media only screen and (min-width: 1920px){.ui.search.dropdown .menu{max-height:21.37142857rem}}.ui.dropdown>.remove.icon{cursor:pointer;font-size:.85714286em;margin:-.78571429em;padding:.91666667em;right:3em;top:.78571429em;position:absolute;opacity:.6;z-index:3}.ui.clearable.dropdown .text,.ui.clearable.dropdown a:last-of-type{margin-right:1.5em}.ui.dropdown select.noselection~.remove.icon,.ui.dropdown input[value=""]~.remove.icon,.ui.dropdown input:not([value])~.remove.icon,.ui.dropdown.loading>.remove.icon{display:none}.ui.ui.multiple.dropdown{padding:.22619048em 3.2em .22619048em .35714286em}.ui.multiple.dropdown .menu{cursor:auto}.ui.multiple.dropdown>.label{display:inline-block;white-space:normal;font-size:1em;padding:.35714286em .78571429em;margin:.14285714rem .28571429rem .14285714rem 0;box-shadow:0 0 0 1px #22242626 inset}.ui.multiple.dropdown .dropdown.icon{margin:"";padding:""}.ui.multiple.dropdown>.text{position:static;padding:0;max-width:100%;margin:.45238095em 0 .45238095em .64285714em;line-height:1.21428571em}.ui.multiple.dropdown>.text.default{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ui.multiple.dropdown>.label~input.search{margin-left:.14285714em!important}.ui.multiple.dropdown>.label~.text{display:none}.ui.multiple.dropdown>.label:not(.image)>img:not(.centered){margin-right:.78571429rem}.ui.multiple.dropdown>.label:not(.image)>img.ui:not(.avatar){margin-bottom:.39285714rem}.ui.multiple.dropdown>.image.label img{margin:-.35714286em .78571429em -.35714286em -.78571429em;height:1.71428571em}.ui.multiple.search.dropdown,.ui.multiple.search.dropdown>input.search{cursor:text}.ui.multiple.search.dropdown>.text{display:inline-block;position:absolute;top:0;left:0;padding:inherit;margin:.45238095em 0 .45238095em .64285714em;line-height:1.21428571em}.ui.multiple.search.dropdown>.label~.text{display:none}.ui.multiple.search.dropdown>input.search{position:static;padding:0;max-width:100%;margin:.45238095em 0 .45238095em .64285714em;width:2.2em;line-height:1.21428571em}.ui.multiple.search.dropdown.button{min-width:14em}.ui.inline.dropdown{cursor:pointer;display:inline-block;color:inherit}.ui.inline.dropdown .dropdown.icon{margin:0 .21428571em;vertical-align:baseline}.ui.inline.dropdown>.text{font-weight:500}.ui.inline.dropdown .menu{cursor:auto;margin-top:.21428571em;border-radius:.28571429rem}.ui.dropdown .menu .active.item{background:transparent;font-weight:500;color:#000000f2;box-shadow:none;z-index:12}.ui.dropdown .menu>.item:hover{background:rgba(0,0,0,.05);color:#000000f2;z-index:13}.ui.dropdown:not(.button)>.default.text,.ui.default.dropdown:not(.button)>.text{color:#bfbfbfde}.ui.dropdown:not(.button)>input:focus~.default.text,.ui.default.dropdown:not(.button)>input:focus~.text{color:#737373de}.ui.loading.dropdown>i.icon{height:1em!important}.ui.loading.selection.dropdown>i.icon{padding:1.5em 1.28571429em!important}.ui.loading.dropdown>i.icon:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.dropdown>i.icon:after{position:absolute;content:"";top:50%;left:50%;box-shadow:0 0 0 1px transparent;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;-webkit-animation:loader .6s infinite linear;animation:loader .6s infinite linear;border:.2em solid #767676;border-radius:500rem}.ui.loading.dropdown.button>i.icon:before,.ui.loading.dropdown.button>i.icon:after{display:none}.ui.loading.dropdown>.text{transition:none}.ui.dropdown .loading.menu{display:block;visibility:hidden;z-index:-1}.ui.dropdown>.loading.menu{left:0!important;right:auto!important}.ui.dropdown>.menu .loading.menu{left:100%!important;right:auto!important}.ui.dropdown.selected,.ui.dropdown .menu .selected.item{background:rgba(0,0,0,.03);color:#000000f2}.ui.dropdown>.filtered.text{visibility:hidden}.ui.dropdown .filtered.item{display:none!important}.ui.dropdown.error,.ui.dropdown.error>.text,.ui.dropdown.error>.default.text{color:#9f3a38}.ui.selection.dropdown.error{background:#FFF6F6;border-color:#e0b4b4}.ui.selection.dropdown.error:hover{border-color:#e0b4b4}.ui.multiple.selection.error.dropdown>.label{border-color:#e0b4b4}.ui.dropdown.error>.menu,.ui.dropdown.error>.menu .menu{border-color:#e0b4b4}.ui.dropdown.error>.menu>.item{color:#9f3a38}.ui.dropdown.error>.menu>.item:hover{background-color:#fbe7e7}.ui.dropdown.error>.menu .active.item{background-color:#fdcfcf}.ui.dropdown.info,.ui.dropdown.info>.text,.ui.dropdown.info>.default.text{color:#276f86}.ui.selection.dropdown.info{background:#F8FFFF;border-color:#a9d5de}.ui.selection.dropdown.info:hover{border-color:#a9d5de}.ui.multiple.selection.info.dropdown>.label{border-color:#a9d5de}.ui.dropdown.info>.menu,.ui.dropdown.info>.menu .menu{border-color:#a9d5de}.ui.dropdown.info>.menu>.item{color:#276f86}.ui.dropdown.info>.menu>.item:hover{background-color:#e9f2fb}.ui.dropdown.info>.menu .active.item{background-color:#cef1fd}.ui.dropdown.success,.ui.dropdown.success>.text,.ui.dropdown.success>.default.text{color:#2c662d}.ui.selection.dropdown.success{background:#FCFFF5;border-color:#a3c293}.ui.selection.dropdown.success:hover{border-color:#a3c293}.ui.multiple.selection.success.dropdown>.label{border-color:#a3c293}.ui.dropdown.success>.menu,.ui.dropdown.success>.menu .menu{border-color:#a3c293}.ui.dropdown.success>.menu>.item{color:#2c662d}.ui.dropdown.success>.menu>.item:hover{background-color:#e9fbe9}.ui.dropdown.success>.menu .active.item{background-color:#dafdce}.ui.dropdown.warning,.ui.dropdown.warning>.text,.ui.dropdown.warning>.default.text{color:#573a08}.ui.selection.dropdown.warning{background:#FFFAF3;border-color:#c9ba9b}.ui.selection.dropdown.warning:hover{border-color:#c9ba9b}.ui.multiple.selection.warning.dropdown>.label{border-color:#c9ba9b}.ui.dropdown.warning>.menu,.ui.dropdown.warning>.menu .menu{border-color:#c9ba9b}.ui.dropdown.warning>.menu>.item{color:#573a08}.ui.dropdown.warning>.menu>.item:hover{background-color:#fbfbe9}.ui.dropdown.warning>.menu .active.item{background-color:#fdfdce}.ui.dropdown>.clear.dropdown.icon{opacity:.8;transition:opacity .1s ease}.ui.dropdown>.clear.dropdown.icon:hover{opacity:1}.ui.disabled.dropdown,.ui.dropdown .menu>.disabled.item{cursor:default;pointer-events:none;opacity:var(--opacity-disabled)}.ui.dropdown .menu{left:0}.ui.dropdown .right.menu>.menu,.ui.dropdown .menu .right.menu{left:100%!important;right:auto!important;border-radius:.28571429rem!important}.ui.dropdown>.left.menu{left:auto!important;right:0!important}.ui.dropdown>.left.menu .menu,.ui.dropdown .menu .left.menu{left:auto;right:100%;margin:0 -.5em 0 0!important;border-radius:.28571429rem!important}.ui.dropdown .item .left.dropdown.icon,.ui.dropdown .left.menu .item .dropdown.icon{width:auto;float:left;margin:0}.ui.dropdown .item .left.dropdown.icon+.text,.ui.dropdown .left.menu .item .dropdown.icon+.text{margin-left:1em;margin-right:0}.ui.upward.dropdown>.menu{top:auto;bottom:100%;box-shadow:0 0 3px #00000014;border-radius:.28571429rem .28571429rem 0 0}.ui.dropdown .upward.menu{top:auto!important;bottom:0!important}.ui.simple.upward.active.dropdown,.ui.simple.upward.dropdown:hover{border-radius:.28571429rem .28571429rem 0 0!important}.ui.upward.dropdown.button:not(.pointing):not(.floating).active{border-radius:.28571429rem .28571429rem 0 0}.ui.upward.selection.dropdown .menu{border-top-width:1px!important;border-bottom-width:0!important;box-shadow:0 -2px 3px #00000014}.ui.upward.selection.dropdown:hover{box-shadow:0 0 2px #0000000d}.ui.active.upward.selection.dropdown{border-radius:0 0 .28571429rem .28571429rem!important}.ui.upward.selection.dropdown.visible{box-shadow:0 0 3px #00000014;border-radius:0 0 .28571429rem .28571429rem!important}.ui.upward.active.selection.dropdown:hover{box-shadow:0 0 3px #0000000d}.ui.upward.active.selection.dropdown:hover .menu{box-shadow:0 -2px 3px #00000014}.ui.scrolling.dropdown .menu,.ui.dropdown .scrolling.menu{overflow-x:hidden;overflow-y:auto}.ui.scrolling.dropdown .menu{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch;min-width:100%!important;width:auto!important}.ui.dropdown .scrolling.menu{position:static;overflow-y:auto;border:none;box-shadow:none!important;border-radius:0!important;margin:0!important;min-width:100%!important;width:auto!important;border-top:1px solid rgba(34,36,38,.15)}.ui.scrolling.dropdown .menu .item.item.item,.ui.dropdown .scrolling.menu>.item.item.item{border-top:none}.ui.scrolling.dropdown .menu .item:first-child,.ui.dropdown .scrolling.menu .item:first-child{border-top:none}.ui.dropdown>.animating.menu .scrolling.menu,.ui.dropdown>.visible.menu .scrolling.menu{display:block}@media all and (-ms-high-contrast: none){.ui.scrolling.dropdown .menu,.ui.dropdown .scrolling.menu{min-width:calc(100% - 17px)}}@media only screen and (max-width: 767.98px){.ui.scrolling.dropdown .menu,.ui.dropdown .scrolling.menu{max-height:10.28571429rem}}@media only screen and (min-width: 768px){.ui.scrolling.dropdown .menu,.ui.dropdown .scrolling.menu{max-height:15.42857143rem}}@media only screen and (min-width: 992px){.ui.scrolling.dropdown .menu,.ui.dropdown .scrolling.menu{max-height:20.57142857rem}}@media only screen and (min-width: 1920px){.ui.scrolling.dropdown .menu,.ui.dropdown .scrolling.menu{max-height:20.57142857rem}}.ui.column.dropdown>.menu{flex-wrap:wrap}.ui.dropdown[class*="two column"]>.menu>.item{width:50%}.ui.dropdown[class*="three column"]>.menu>.item{width:33%}.ui.dropdown[class*="four column"]>.menu>.item{width:25%}.ui.dropdown[class*="five column"]>.menu>.item{width:20%}.ui.simple.dropdown .menu:before,.ui.simple.dropdown .menu:after{display:none}.ui.simple.dropdown .menu{position:absolute;display:-ms-inline-flexbox!important;display:block;overflow:hidden;top:-9999px;opacity:0;width:0;height:0;transition:opacity .1s ease;margin-top:0!important}.ui.simple.active.dropdown,.ui.simple.dropdown:hover{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.simple.active.dropdown>.menu,.ui.simple.dropdown:hover>.menu{overflow:visible;width:auto;height:auto;top:100%;opacity:1}.ui.simple.dropdown>.menu>.item:active>.menu,.ui.simple.dropdown .menu .item:hover>.menu{overflow:visible;width:auto;height:auto;top:0!important;left:100%;opacity:1}.ui.simple.dropdown>.menu>.item:active>.left.menu,.ui.simple.dropdown .menu .item:hover>.left.menu,.right.menu .ui.simple.dropdown>.menu>.item:active>.menu:not(.right),.right.menu .ui.simple.dropdown>.menu .item:hover>.menu:not(.right){left:auto;right:100%}.ui.simple.disabled.dropdown:hover .menu{display:none;height:0;width:0;overflow:hidden}.ui.simple.visible.dropdown>.menu{display:block}.ui.simple.scrolling.active.dropdown>.menu,.ui.simple.scrolling.dropdown:hover>.menu{overflow-x:hidden;overflow-y:auto}.ui.fluid.dropdown{display:block;width:100%!important;min-width:0}.ui.fluid.dropdown>.dropdown.icon{float:right}.ui.floating.dropdown .menu{left:0;right:auto;box-shadow:0 2px 4px #2224261f,0 2px 10px #22242626!important;border-radius:.28571429rem!important}.ui.floating.dropdown>.menu{border-radius:.28571429rem!important}.ui:not(.upward).floating.dropdown>.menu{margin-top:.5em}.ui.upward.floating.dropdown>.menu{margin-bottom:.5em}.ui.pointing.dropdown>.menu{top:100%;margin-top:.78571429rem;border-radius:.28571429rem}.ui.pointing.dropdown>.menu:not(.hidden):after{display:block;position:absolute;pointer-events:none;content:"";visibility:visible;transform:rotate(45deg);width:.5em;height:.5em;box-shadow:-1px -1px #22242626;background:#FFFFFF;z-index:2}.ui.pointing.dropdown>.menu:not(.hidden):after{top:-.25em;left:50%;margin:0 0 0 -.25em}.ui.top.left.pointing.dropdown>.menu{inset:100% auto auto 0;margin:1em 0 0}.ui.top.left.pointing.dropdown>.menu:after{top:-.25em;left:1em;right:auto;margin:0;transform:rotate(45deg)}.ui.top.right.pointing.dropdown>.menu{inset:100% 0 auto auto;margin:1em 0 0}.ui.top.pointing.dropdown>.left.menu:after,.ui.top.right.pointing.dropdown>.menu:after{top:-.25em;left:auto!important;right:1em!important;margin:0;transform:rotate(45deg)}.ui.left.pointing.dropdown>.menu{top:0;left:100%;right:auto;margin:0 0 0 1em}.ui.left.pointing.dropdown>.menu:after{top:1em;left:-.25em;margin:0;transform:rotate(-45deg)}.ui.left:not(.top):not(.bottom).pointing.dropdown>.left.menu{left:auto!important;right:100%!important;margin:0 1em 0 0}.ui.left:not(.top):not(.bottom).pointing.dropdown>.left.menu:after{top:1em;left:auto;right:-.25em;margin:0;transform:rotate(135deg)}.ui.right.pointing.dropdown>.menu{top:0;left:auto;right:100%;margin:0 1em 0 0}.ui.right.pointing.dropdown>.menu:after{top:1em;left:auto;right:-.25em;margin:0;transform:rotate(135deg)}.ui.bottom.pointing.dropdown>.menu{inset:auto auto 100% 0;margin:0 0 1em}.ui.bottom.pointing.dropdown>.menu:after{top:auto;bottom:-.25em;right:auto;margin:0;transform:rotate(-135deg)}.ui.bottom.pointing.dropdown>.menu .menu{top:auto!important;bottom:0!important}.ui.bottom.left.pointing.dropdown>.menu{left:0;right:auto}.ui.bottom.left.pointing.dropdown>.menu:after{left:1em;right:auto}.ui.bottom.right.pointing.dropdown>.menu{right:0;left:auto}.ui.bottom.right.pointing.dropdown>.menu:after{left:auto;right:1em}.ui.pointing.upward.dropdown .menu,.ui.top.pointing.upward.dropdown .menu{top:auto!important;bottom:100%!important;margin:0 0 .78571429rem;border-radius:.28571429rem}.ui.pointing.upward.dropdown .menu:after,.ui.top.pointing.upward.dropdown .menu:after{top:100%!important;bottom:auto!important;box-shadow:1px 1px #22242626;margin:-.25em 0 0}.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu{top:auto!important;bottom:0!important;margin:0 1em 0 0}.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after{top:auto!important;bottom:0!important;margin:0 0 1em;box-shadow:-1px -1px #22242626}.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu{top:auto!important;bottom:0!important;margin:0 0 0 1em}.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after{top:auto!important;bottom:0!important;margin:0 0 1em;box-shadow:-1px -1px #22242626}.ui.dropdown,.ui.dropdown .menu>.item{font-size:1rem}.ui.mini.dropdown,.ui.mini.dropdown .menu>.item{font-size:.78571429rem}.ui.tiny.dropdown,.ui.tiny.dropdown .menu>.item{font-size:.85714286rem}.ui.small.dropdown,.ui.small.dropdown .menu>.item{font-size:.92857143rem}.ui.large.dropdown,.ui.large.dropdown .menu>.item{font-size:1.14285714rem}.ui.big.dropdown,.ui.big.dropdown .menu>.item{font-size:1.28571429rem}.ui.huge.dropdown,.ui.huge.dropdown .menu>.item{font-size:1.42857143rem}.ui.massive.dropdown,.ui.massive.dropdown .menu>.item{font-size:1.71428571rem}.ui.inverted.dropdown .menu{background:#1B1C1D;box-shadow:none;border:1px solid rgba(255,255,255,.15)}.ui.inverted.dropdown .menu>.item{color:#fffc}.ui.inverted.dropdown .menu .active.item{background:transparent;color:#fffc;box-shadow:none}.ui.inverted.dropdown .menu>.item:hover{background:rgba(255,255,255,.08);color:#fffc}.ui.inverted.dropdown.selected,.ui.inverted.dropdown .menu .selected.item{background:rgba(255,255,255,.15);color:#fffc}.ui.inverted.dropdown .menu>.header{color:#fff}.ui.inverted.dropdown>.text>.description,.ui.inverted.dropdown .menu>.item>.description{color:#ffffff80}.ui.inverted.dropdown .menu>.divider{border-top:1px solid rgba(255,255,255,.15)}.ui.inverted.dropdown .scrolling.menu{border:none;border-top:1px solid rgba(255,255,255,.15)}.ui.inverted.selection.dropdown{border:1px solid rgba(255,255,255,.15);background:#1B1C1D;color:#fffc}.ui.inverted.selection.dropdown:hover{border-color:#ffffff40;box-shadow:none}.ui.inverted.selection.dropdown input{color:#fff}.ui.inverted.selection.visible.dropdown>.text:not(.default){color:#ffffffe6}.ui.inverted.selection.active.dropdown .menu,.ui.inverted.selection.active.dropdown:hover{border-color:#ffffff26}.ui.inverted.selection.dropdown .menu>.item{border-top:1px solid #242526}.ui.inverted.dropdown:not(.button)>.default.text,.ui.inverted.default.dropdown:not(.button)>.text{color:#ffffff80}.ui.inverted.dropdown:not(.button)>input:focus~.default.text,.ui.inverted.default.dropdown:not(.button)>input:focus~.text{color:#ffffffb3}.ui.inverted.active.search.dropdown input.search:focus+.text i.icon,.ui.inverted.active.search.dropdown input.search:focus+.text .flag{opacity:.45}.ui.inverted.active.search.dropdown input.search:focus+.text{color:#ffffffb3!important}.ui.inverted.dropdown .menu>.message:not(.ui){color:#ffffff80}.ui.inverted.dropdown .menu>.item:first-child{border-top-width:0}.ui.inverted.multiple.dropdown>.label{background-color:#ffffffb3;background-image:none;color:#000;box-shadow:0 0 0 1px #fff0 inset}.ui.inverted.multiple.dropdown>.label:hover{background-color:#ffffffe6;border-color:#ffffffe6;background-image:none;color:#000}.ui.inverted.multiple.dropdown>.label>.close.icon,.ui.inverted.multiple.dropdown>.label>.delete.icon{opacity:.6}.ui.inverted.multiple.dropdown>.label>.close.icon:hover,.ui.inverted.multiple.dropdown>.label>.delete.icon:hover{opacity:.8}.ui.inverted.dropdown textarea::-webkit-selection,.ui.inverted.dropdown input::-webkit-selection{background-color:#ffffff40;color:#fffc}.ui.inverted.dropdown textarea::-moz-selection,.ui.inverted.dropdown input::-moz-selection{background-color:#ffffff40;color:#fffc}.ui.inverted.dropdown textarea::selection,.ui.inverted.dropdown input::selection{background-color:#ffffff40;color:#fffc}.ui.inverted.dropdown .menu::-webkit-scrollbar-track{background:rgba(255,255,255,.1)}.ui.inverted.dropdown .menu::-webkit-scrollbar-thumb{background:rgba(255,255,255,.25)}.ui.inverted.dropdown .menu::-webkit-scrollbar-thumb:window-inactive{background:rgba(255,255,255,.15)}.ui.inverted.dropdown .menu::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.35)}.ui.inverted.pointing.dropdown>.menu:after{background:#1B1C1D;box-shadow:-1px -1px #ffffff26}@font-face{font-family:Dropdown;src:url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format("truetype"),url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format("woff");font-weight:400;font-style:normal}.ui.dropdown>.dropdown.icon{font-family:Dropdown;line-height:1;height:1em;width:1.23em;-webkit-backface-visibility:hidden;backface-visibility:hidden;font-weight:400;font-style:normal;text-align:center}.ui.dropdown>.dropdown.icon{width:auto}.ui.dropdown>.dropdown.icon:before{content:"\f0d7"}.ui.dropdown .menu .item .dropdown.icon:before{content:"\f0da"}.ui.dropdown .item .left.dropdown.icon:before,.ui.dropdown .left.menu .item .dropdown.icon:before{content:"\f0d9"}.ui.vertical.menu .dropdown.item>.dropdown.icon:before{content:"\f0da"}.ui.form{position:relative;max-width:100%}.ui.form>p{margin:1em 0}.ui.form .field{clear:both;margin:0 0 1em}.ui.form .fields .fields,.ui.form .field:last-child,.ui.form .fields:last-child .field{margin-bottom:0}.ui.form .fields .field{clear:both;margin:0}.ui.form .field>label{display:block;margin:0 0 .28571429rem;color:#000000de;font-size:.92857143em;font-weight:500;text-transform:none}.ui.form textarea,.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=time],.ui.form input[type=text],.ui.form input[type=file],.ui.form input[type=url]{width:100%;vertical-align:top}.ui.form ::-webkit-datetime-edit,.ui.form ::-webkit-inner-spin-button{height:1.21428571em}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=time],.ui.form input[type=text],.ui.form input[type=file],.ui.form input[type=url]{font-family:var(--fonts-regular);margin:0;outline:none;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);line-height:1.21428571em;padding:.67857143em 1em;font-size:1em;background:#FFFFFF;border:1px solid rgba(34,36,38,.15);color:#000000de;border-radius:.28571429rem;box-shadow:0 0 0 0 transparent inset;transition:color .1s ease,border-color .1s ease}.ui.input textarea,.ui.form textarea{margin:0;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);padding:.78571429em 1em;background:#FFFFFF;border:1px solid rgba(34,36,38,.15);outline:none;color:#000000de;border-radius:.28571429rem;box-shadow:0 0 0 0 transparent inset;transition:color .1s ease,border-color .1s ease;font-size:1em;font-family:var(--fonts-regular);line-height:1.2857;resize:vertical}.ui.form textarea:not([rows]){height:12em;min-height:8em;max-height:24em}.ui.form textarea,.ui.form input[type=checkbox]{vertical-align:top}.ui.form .fields:not(.grouped):not(.inline) .field:not(:only-child) label+.ui.ui.checkbox{margin-top:.7em}.ui.form .fields:not(.grouped):not(.inline) .field:not(:only-child) .ui.checkbox{margin-top:2.41428571em}.ui.form .fields:not(.grouped):not(.inline) .field:not(:only-child) .ui.toggle.checkbox{margin-top:2.21428571em}.ui.form .fields:not(.grouped):not(.inline) .field:not(:only-child) .ui.slider.checkbox{margin-top:2.61428571em}.ui.ui.form .field .fields .field:not(:only-child) .ui.checkbox{margin-top:.6em}.ui.ui.form .field .fields .field:not(:only-child) .ui.toggle.checkbox{margin-top:.5em}.ui.ui.form .field .fields .field:not(:only-child) .ui.slider.checkbox{margin-top:.7em}.ui.form .field .transparent.input:not(.icon) input,.ui.form .field input.transparent,.ui.form .field textarea.transparent{padding:.67857143em 1em}.ui.form .field input.transparent,.ui.form .field textarea.transparent{border-color:transparent!important;background-color:transparent!important;box-shadow:none!important}.ui.form input.attached{width:auto}.ui.form select{display:block;height:auto;width:100%;background:#FFFFFF;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem;box-shadow:0 0 0 0 transparent inset;padding:.62em 1em;color:#000000de;transition:color .1s ease,border-color .1s ease}.ui.form .field>.selection.dropdown{min-width:auto;width:100%}.ui.form .field>.selection.dropdown>.dropdown.icon{float:right}.ui.form .inline.fields .field>.selection.dropdown,.ui.form .inline.field>.selection.dropdown{width:auto}.ui.form .inline.fields .field>.selection.dropdown>.dropdown.icon,.ui.form .inline.field>.selection.dropdown>.dropdown.icon{float:none}.ui.form .field .ui.input,.ui.form .fields .field .ui.input,.ui.form .wide.field .ui.input{width:100%}.ui.form .inline.fields .field:not(.wide) .ui.input,.ui.form .inline.field:not(.wide) .ui.input{width:auto;vertical-align:middle}.ui.form .fields .field .ui.input input,.ui.form .field .ui.input input{width:auto}.ui.form .ten.fields .ui.input input,.ui.form .nine.fields .ui.input input,.ui.form .eight.fields .ui.input input,.ui.form .seven.fields .ui.input input,.ui.form .six.fields .ui.input input,.ui.form .five.fields .ui.input input,.ui.form .four.fields .ui.input input,.ui.form .three.fields .ui.input input,.ui.form .two.fields .ui.input input,.ui.form .wide.field .ui.input input{flex:1 0 auto;width:0}.ui.form .error.message,.ui.form .error.message:empty{display:none}.ui.form .info.message,.ui.form .info.message:empty{display:none}.ui.form .success.message,.ui.form .success.message:empty{display:none}.ui.form .warning.message,.ui.form .warning.message:empty{display:none}.ui.form .message:first-child{margin-top:0}.ui.form .field .prompt.label{white-space:normal;background:#FFFFFF!important;border:1px solid #E0B4B4!important;color:#9f3a38!important}.ui.form .inline.fields .field .prompt,.ui.form .inline.field .prompt{vertical-align:top;margin:-.25em 0 -.5em .5em}.ui.form .inline.fields .field .prompt:before,.ui.form .inline.field .prompt:before{border-width:0 0 1px 1px;inset:50% auto auto 0}.ui.form .field.field input:-webkit-autofill{box-shadow:0 0 0 100px ivory inset!important;border-color:#e5dfa1!important}.ui.form .field.field input:-webkit-autofill:focus{box-shadow:0 0 0 100px ivory inset!important;border-color:#d5c315!important}.ui.form ::-webkit-input-placeholder{color:#bfbfbfde}.ui.form :-ms-input-placeholder{color:#bfbfbfde!important}.ui.form ::-moz-placeholder{color:#bfbfbfde}.ui.form :focus::-webkit-input-placeholder{color:#737373de}.ui.form :focus:-ms-input-placeholder{color:#737373de!important}.ui.form :focus::-moz-placeholder{color:#737373de}.ui.form input:not([type]):focus,.ui.form input[type=date]:focus,.ui.form input[type=datetime-local]:focus,.ui.form input[type=email]:focus,.ui.form input[type=number]:focus,.ui.form input[type=password]:focus,.ui.form input[type=search]:focus,.ui.form input[type=tel]:focus,.ui.form input[type=time]:focus,.ui.form input[type=text]:focus,.ui.form input[type=file]:focus,.ui.form input[type=url]:focus{color:#000000f2;border-color:#85b7d9;border-radius:.28571429rem;background:#FFFFFF;box-shadow:0 0 #22242659 inset}.ui.form .ui.action.input:not([class*="left action"]) input:not([type]):focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=date]:focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=datetime-local]:focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=email]:focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=number]:focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=password]:focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=search]:focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=tel]:focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=time]:focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=text]:focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=file]:focus,.ui.form .ui.action.input:not([class*="left action"]) input[type=url]:focus{border-top-right-radius:0;border-bottom-right-radius:0}.ui.form .ui[class*="left action"].input input:not([type]),.ui.form .ui[class*="left action"].input input[type=date],.ui.form .ui[class*="left action"].input input[type=datetime-local],.ui.form .ui[class*="left action"].input input[type=email],.ui.form .ui[class*="left action"].input input[type=number],.ui.form .ui[class*="left action"].input input[type=password],.ui.form .ui[class*="left action"].input input[type=search],.ui.form .ui[class*="left action"].input input[type=tel],.ui.form .ui[class*="left action"].input input[type=time],.ui.form .ui[class*="left action"].input input[type=text],.ui.form .ui[class*="left action"].input input[type=file],.ui.form .ui[class*="left action"].input input[type=url]{border-bottom-left-radius:0;border-top-left-radius:0}.ui.form textarea:focus{color:#000000f2;border-color:#85b7d9;border-radius:.28571429rem;background:#FFFFFF;box-shadow:0 0 #22242659 inset;-webkit-appearance:none}.ui.form.error .error.message:not(:empty){display:block}.ui.form.error .compact.error.message:not(:empty){display:inline-block}.ui.form.error .icon.error.message:not(:empty){display:flex}.ui.form .fields.error .error.message:not(:empty),.ui.form .field.error .error.message:not(:empty){display:block}.ui.form .fields.error .compact.error.message:not(:empty),.ui.form .field.error .compact.error.message:not(:empty){display:inline-block}.ui.form .fields.error .icon.error.message:not(:empty),.ui.form .field.error .icon.error.message:not(:empty){display:flex}.ui.ui.form .fields.error .field label,.ui.ui.form .field.error label,.ui.ui.form .fields.error .field .input,.ui.ui.form .field.error .input{color:#9f3a38}.ui.form .fields.error .field .corner.label,.ui.form .field.error .corner.label{border-color:#9f3a38;color:#fff}.ui.form .fields.error .field textarea,.ui.form .fields.error .field select,.ui.form .fields.error .field input:not([type]),.ui.form .fields.error .field input[type=date],.ui.form .fields.error .field input[type=datetime-local],.ui.form .fields.error .field input[type=email],.ui.form .fields.error .field input[type=number],.ui.form .fields.error .field input[type=password],.ui.form .fields.error .field input[type=search],.ui.form .fields.error .field input[type=tel],.ui.form .fields.error .field input[type=time],.ui.form .fields.error .field input[type=text],.ui.form .fields.error .field input[type=file],.ui.form .fields.error .field input[type=url],.ui.form .field.error textarea,.ui.form .field.error select,.ui.form .field.error input:not([type]),.ui.form .field.error input[type=date],.ui.form .field.error input[type=datetime-local],.ui.form .field.error input[type=email],.ui.form .field.error input[type=number],.ui.form .field.error input[type=password],.ui.form .field.error input[type=search],.ui.form .field.error input[type=tel],.ui.form .field.error input[type=time],.ui.form .field.error input[type=text],.ui.form .field.error input[type=file],.ui.form .field.error input[type=url]{color:#9f3a38;background:#FFF6F6;border-color:#e0b4b4;border-radius:"";box-shadow:none}.ui.form .field.error textarea:focus,.ui.form .field.error select:focus,.ui.form .field.error input:not([type]):focus,.ui.form .field.error input[type=date]:focus,.ui.form .field.error input[type=datetime-local]:focus,.ui.form .field.error input[type=email]:focus,.ui.form .field.error input[type=number]:focus,.ui.form .field.error input[type=password]:focus,.ui.form .field.error input[type=search]:focus,.ui.form .field.error input[type=tel]:focus,.ui.form .field.error input[type=time]:focus,.ui.form .field.error input[type=text]:focus,.ui.form .field.error input[type=file]:focus,.ui.form .field.error input[type=url]:focus{background:#FFF6F6;border-color:#e0b4b4;color:#9f3a38;box-shadow:none}.ui.form .field.error select{-webkit-appearance:menulist-button}.ui.form .field.error .transparent.input input,.ui.form .field.error .transparent.input textarea,.ui.form .field.error input.transparent,.ui.form .field.error textarea.transparent{background-color:#fff6f6!important;color:#9f3a38!important}.ui.form .error.error input:-webkit-autofill{box-shadow:0 0 0 100px #fffaf0 inset!important;border-color:#e0b4b4!important}.ui.form .error ::-webkit-input-placeholder{color:#e7bdbc}.ui.form .error :-ms-input-placeholder{color:#e7bdbc!important}.ui.form .error ::-moz-placeholder{color:#e7bdbc}.ui.form .error :focus::-webkit-input-placeholder{color:#da9796}.ui.form .error :focus:-ms-input-placeholder{color:#da9796!important}.ui.form .error :focus::-moz-placeholder{color:#da9796}.ui.form .fields.error .field .ui.dropdown,.ui.form .fields.error .field .ui.dropdown .item,.ui.form .field.error .ui.dropdown,.ui.form .field.error .ui.dropdown .text,.ui.form .field.error .ui.dropdown .item{background:#FFF6F6;color:#9f3a38}.ui.form .fields.error .field .ui.dropdown,.ui.form .field.error .ui.dropdown,.ui.form .fields.error .field .ui.dropdown:hover,.ui.form .field.error .ui.dropdown:hover{border-color:#e0b4b4!important}.ui.form .fields.error .field .ui.dropdown:hover .menu,.ui.form .field.error .ui.dropdown:hover .menu{border-color:#e0b4b4}.ui.form .fields.error .field .ui.multiple.selection.dropdown>.label,.ui.form .field.error .ui.multiple.selection.dropdown>.label{background-color:#eacbcb;color:#9f3a38}.ui.form .fields.error .field .ui.dropdown .menu .item:hover,.ui.form .field.error .ui.dropdown .menu .item:hover,.ui.form .fields.error .field .ui.dropdown .menu .selected.item,.ui.form .field.error .ui.dropdown .menu .selected.item{background-color:#fbe7e7}.ui.form .fields.error .field .ui.dropdown .menu .active.item,.ui.form .field.error .ui.dropdown .menu .active.item{background-color:#fdcfcf!important}.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box{color:#9f3a38}.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before{background:#FFF6F6;border-color:#e0b4b4}.ui.form .fields.error .field .checkbox label:after,.ui.form .field.error .checkbox label:after,.ui.form .fields.error .field .checkbox .box:after,.ui.form .field.error .checkbox .box:after{color:#9f3a38}.ui.form.info .info.message:not(:empty){display:block}.ui.form.info .compact.info.message:not(:empty){display:inline-block}.ui.form.info .icon.info.message:not(:empty){display:flex}.ui.form .fields.info .info.message:not(:empty),.ui.form .field.info .info.message:not(:empty){display:block}.ui.form .fields.info .compact.info.message:not(:empty),.ui.form .field.info .compact.info.message:not(:empty){display:inline-block}.ui.form .fields.info .icon.info.message:not(:empty),.ui.form .field.info .icon.info.message:not(:empty){display:flex}.ui.ui.form .fields.info .field label,.ui.ui.form .field.info label,.ui.ui.form .fields.info .field .input,.ui.ui.form .field.info .input{color:#276f86}.ui.form .fields.info .field .corner.label,.ui.form .field.info .corner.label{border-color:#276f86;color:#fff}.ui.form .fields.info .field textarea,.ui.form .fields.info .field select,.ui.form .fields.info .field input:not([type]),.ui.form .fields.info .field input[type=date],.ui.form .fields.info .field input[type=datetime-local],.ui.form .fields.info .field input[type=email],.ui.form .fields.info .field input[type=number],.ui.form .fields.info .field input[type=password],.ui.form .fields.info .field input[type=search],.ui.form .fields.info .field input[type=tel],.ui.form .fields.info .field input[type=time],.ui.form .fields.info .field input[type=text],.ui.form .fields.info .field input[type=file],.ui.form .fields.info .field input[type=url],.ui.form .field.info textarea,.ui.form .field.info select,.ui.form .field.info input:not([type]),.ui.form .field.info input[type=date],.ui.form .field.info input[type=datetime-local],.ui.form .field.info input[type=email],.ui.form .field.info input[type=number],.ui.form .field.info input[type=password],.ui.form .field.info input[type=search],.ui.form .field.info input[type=tel],.ui.form .field.info input[type=time],.ui.form .field.info input[type=text],.ui.form .field.info input[type=file],.ui.form .field.info input[type=url]{color:#276f86;background:#F8FFFF;border-color:#a9d5de;border-radius:"";box-shadow:none}.ui.form .field.info textarea:focus,.ui.form .field.info select:focus,.ui.form .field.info input:not([type]):focus,.ui.form .field.info input[type=date]:focus,.ui.form .field.info input[type=datetime-local]:focus,.ui.form .field.info input[type=email]:focus,.ui.form .field.info input[type=number]:focus,.ui.form .field.info input[type=password]:focus,.ui.form .field.info input[type=search]:focus,.ui.form .field.info input[type=tel]:focus,.ui.form .field.info input[type=time]:focus,.ui.form .field.info input[type=text]:focus,.ui.form .field.info input[type=file]:focus,.ui.form .field.info input[type=url]:focus{background:#F8FFFF;border-color:#a9d5de;color:#276f86;box-shadow:none}.ui.form .field.info select{-webkit-appearance:menulist-button}.ui.form .field.info .transparent.input input,.ui.form .field.info .transparent.input textarea,.ui.form .field.info input.transparent,.ui.form .field.info textarea.transparent{background-color:#f8ffff!important;color:#276f86!important}.ui.form .info.info input:-webkit-autofill{box-shadow:0 0 0 100px #f0faff inset!important;border-color:#b3e0e0!important}.ui.form .info ::-webkit-input-placeholder{color:#98cfe1}.ui.form .info :-ms-input-placeholder{color:#98cfe1!important}.ui.form .info ::-moz-placeholder{color:#98cfe1}.ui.form .info :focus::-webkit-input-placeholder{color:#70bdd6}.ui.form .info :focus:-ms-input-placeholder{color:#70bdd6!important}.ui.form .info :focus::-moz-placeholder{color:#70bdd6}.ui.form .fields.info .field .ui.dropdown,.ui.form .fields.info .field .ui.dropdown .item,.ui.form .field.info .ui.dropdown,.ui.form .field.info .ui.dropdown .text,.ui.form .field.info .ui.dropdown .item{background:#F8FFFF;color:#276f86}.ui.form .fields.info .field .ui.dropdown,.ui.form .field.info .ui.dropdown,.ui.form .fields.info .field .ui.dropdown:hover,.ui.form .field.info .ui.dropdown:hover{border-color:#a9d5de!important}.ui.form .fields.info .field .ui.dropdown:hover .menu,.ui.form .field.info .ui.dropdown:hover .menu{border-color:#a9d5de}.ui.form .fields.info .field .ui.multiple.selection.dropdown>.label,.ui.form .field.info .ui.multiple.selection.dropdown>.label{background-color:#cce3ea;color:#276f86}.ui.form .fields.info .field .ui.dropdown .menu .item:hover,.ui.form .field.info .ui.dropdown .menu .item:hover,.ui.form .fields.info .field .ui.dropdown .menu .selected.item,.ui.form .field.info .ui.dropdown .menu .selected.item{background-color:#e9f2fb}.ui.form .fields.info .field .ui.dropdown .menu .active.item,.ui.form .field.info .ui.dropdown .menu .active.item{background-color:#cef1fd!important}.ui.form .fields.info .field .checkbox:not(.toggle):not(.slider) label,.ui.form .field.info .checkbox:not(.toggle):not(.slider) label,.ui.form .fields.info .field .checkbox:not(.toggle):not(.slider) .box,.ui.form .field.info .checkbox:not(.toggle):not(.slider) .box{color:#276f86}.ui.form .fields.info .field .checkbox:not(.toggle):not(.slider) label:before,.ui.form .field.info .checkbox:not(.toggle):not(.slider) label:before,.ui.form .fields.info .field .checkbox:not(.toggle):not(.slider) .box:before,.ui.form .field.info .checkbox:not(.toggle):not(.slider) .box:before{background:#F8FFFF;border-color:#a9d5de}.ui.form .fields.info .field .checkbox label:after,.ui.form .field.info .checkbox label:after,.ui.form .fields.info .field .checkbox .box:after,.ui.form .field.info .checkbox .box:after{color:#276f86}.ui.form.success .success.message:not(:empty){display:block}.ui.form.success .compact.success.message:not(:empty){display:inline-block}.ui.form.success .icon.success.message:not(:empty){display:flex}.ui.form .fields.success .success.message:not(:empty),.ui.form .field.success .success.message:not(:empty){display:block}.ui.form .fields.success .compact.success.message:not(:empty),.ui.form .field.success .compact.success.message:not(:empty){display:inline-block}.ui.form .fields.success .icon.success.message:not(:empty),.ui.form .field.success .icon.success.message:not(:empty){display:flex}.ui.ui.form .fields.success .field label,.ui.ui.form .field.success label,.ui.ui.form .fields.success .field .input,.ui.ui.form .field.success .input{color:#2c662d}.ui.form .fields.success .field .corner.label,.ui.form .field.success .corner.label{border-color:#2c662d;color:#fff}.ui.form .fields.success .field textarea,.ui.form .fields.success .field select,.ui.form .fields.success .field input:not([type]),.ui.form .fields.success .field input[type=date],.ui.form .fields.success .field input[type=datetime-local],.ui.form .fields.success .field input[type=email],.ui.form .fields.success .field input[type=number],.ui.form .fields.success .field input[type=password],.ui.form .fields.success .field input[type=search],.ui.form .fields.success .field input[type=tel],.ui.form .fields.success .field input[type=time],.ui.form .fields.success .field input[type=text],.ui.form .fields.success .field input[type=file],.ui.form .fields.success .field input[type=url],.ui.form .field.success textarea,.ui.form .field.success select,.ui.form .field.success input:not([type]),.ui.form .field.success input[type=date],.ui.form .field.success input[type=datetime-local],.ui.form .field.success input[type=email],.ui.form .field.success input[type=number],.ui.form .field.success input[type=password],.ui.form .field.success input[type=search],.ui.form .field.success input[type=tel],.ui.form .field.success input[type=time],.ui.form .field.success input[type=text],.ui.form .field.success input[type=file],.ui.form .field.success input[type=url]{color:#2c662d;background:#FCFFF5;border-color:#a3c293;border-radius:"";box-shadow:none}.ui.form .field.success textarea:focus,.ui.form .field.success select:focus,.ui.form .field.success input:not([type]):focus,.ui.form .field.success input[type=date]:focus,.ui.form .field.success input[type=datetime-local]:focus,.ui.form .field.success input[type=email]:focus,.ui.form .field.success input[type=number]:focus,.ui.form .field.success input[type=password]:focus,.ui.form .field.success input[type=search]:focus,.ui.form .field.success input[type=tel]:focus,.ui.form .field.success input[type=time]:focus,.ui.form .field.success input[type=text]:focus,.ui.form .field.success input[type=file]:focus,.ui.form .field.success input[type=url]:focus{background:#FCFFF5;border-color:#a3c293;color:#2c662d;box-shadow:none}.ui.form .field.success select{-webkit-appearance:menulist-button}.ui.form .field.success .transparent.input input,.ui.form .field.success .transparent.input textarea,.ui.form .field.success input.transparent,.ui.form .field.success textarea.transparent{background-color:#fcfff5!important;color:#2c662d!important}.ui.form .success.success input:-webkit-autofill{box-shadow:0 0 0 100px #f0fff0 inset!important;border-color:#bee0b3!important}.ui.form .success ::-webkit-input-placeholder{color:#8fcf90}.ui.form .success :-ms-input-placeholder{color:#8fcf90!important}.ui.form .success ::-moz-placeholder{color:#8fcf90}.ui.form .success :focus::-webkit-input-placeholder{color:#6cbf6d}.ui.form .success :focus:-ms-input-placeholder{color:#6cbf6d!important}.ui.form .success :focus::-moz-placeholder{color:#6cbf6d}.ui.form .fields.success .field .ui.dropdown,.ui.form .fields.success .field .ui.dropdown .item,.ui.form .field.success .ui.dropdown,.ui.form .field.success .ui.dropdown .text,.ui.form .field.success .ui.dropdown .item{background:#FCFFF5;color:#2c662d}.ui.form .fields.success .field .ui.dropdown,.ui.form .field.success .ui.dropdown,.ui.form .fields.success .field .ui.dropdown:hover,.ui.form .field.success .ui.dropdown:hover{border-color:#a3c293!important}.ui.form .fields.success .field .ui.dropdown:hover .menu,.ui.form .field.success .ui.dropdown:hover .menu{border-color:#a3c293}.ui.form .fields.success .field .ui.multiple.selection.dropdown>.label,.ui.form .field.success .ui.multiple.selection.dropdown>.label{background-color:#cceacc;color:#2c662d}.ui.form .fields.success .field .ui.dropdown .menu .item:hover,.ui.form .field.success .ui.dropdown .menu .item:hover,.ui.form .fields.success .field .ui.dropdown .menu .selected.item,.ui.form .field.success .ui.dropdown .menu .selected.item{background-color:#e9fbe9}.ui.form .fields.success .field .ui.dropdown .menu .active.item,.ui.form .field.success .ui.dropdown .menu .active.item{background-color:#dafdce!important}.ui.form .fields.success .field .checkbox:not(.toggle):not(.slider) label,.ui.form .field.success .checkbox:not(.toggle):not(.slider) label,.ui.form .fields.success .field .checkbox:not(.toggle):not(.slider) .box,.ui.form .field.success .checkbox:not(.toggle):not(.slider) .box{color:#2c662d}.ui.form .fields.success .field .checkbox:not(.toggle):not(.slider) label:before,.ui.form .field.success .checkbox:not(.toggle):not(.slider) label:before,.ui.form .fields.success .field .checkbox:not(.toggle):not(.slider) .box:before,.ui.form .field.success .checkbox:not(.toggle):not(.slider) .box:before{background:#FCFFF5;border-color:#a3c293}.ui.form .fields.success .field .checkbox label:after,.ui.form .field.success .checkbox label:after,.ui.form .fields.success .field .checkbox .box:after,.ui.form .field.success .checkbox .box:after{color:#2c662d}.ui.form.warning .warning.message:not(:empty){display:block}.ui.form.warning .compact.warning.message:not(:empty){display:inline-block}.ui.form.warning .icon.warning.message:not(:empty){display:flex}.ui.form .fields.warning .warning.message:not(:empty),.ui.form .field.warning .warning.message:not(:empty){display:block}.ui.form .fields.warning .compact.warning.message:not(:empty),.ui.form .field.warning .compact.warning.message:not(:empty){display:inline-block}.ui.form .fields.warning .icon.warning.message:not(:empty),.ui.form .field.warning .icon.warning.message:not(:empty){display:flex}.ui.ui.form .fields.warning .field label,.ui.ui.form .field.warning label,.ui.ui.form .fields.warning .field .input,.ui.ui.form .field.warning .input{color:#573a08}.ui.form .fields.warning .field .corner.label,.ui.form .field.warning .corner.label{border-color:#573a08;color:#fff}.ui.form .fields.warning .field textarea,.ui.form .fields.warning .field select,.ui.form .fields.warning .field input:not([type]),.ui.form .fields.warning .field input[type=date],.ui.form .fields.warning .field input[type=datetime-local],.ui.form .fields.warning .field input[type=email],.ui.form .fields.warning .field input[type=number],.ui.form .fields.warning .field input[type=password],.ui.form .fields.warning .field input[type=search],.ui.form .fields.warning .field input[type=tel],.ui.form .fields.warning .field input[type=time],.ui.form .fields.warning .field input[type=text],.ui.form .fields.warning .field input[type=file],.ui.form .fields.warning .field input[type=url],.ui.form .field.warning textarea,.ui.form .field.warning select,.ui.form .field.warning input:not([type]),.ui.form .field.warning input[type=date],.ui.form .field.warning input[type=datetime-local],.ui.form .field.warning input[type=email],.ui.form .field.warning input[type=number],.ui.form .field.warning input[type=password],.ui.form .field.warning input[type=search],.ui.form .field.warning input[type=tel],.ui.form .field.warning input[type=time],.ui.form .field.warning input[type=text],.ui.form .field.warning input[type=file],.ui.form .field.warning input[type=url]{color:#573a08;background:#FFFAF3;border-color:#c9ba9b;border-radius:"";box-shadow:none}.ui.form .field.warning textarea:focus,.ui.form .field.warning select:focus,.ui.form .field.warning input:not([type]):focus,.ui.form .field.warning input[type=date]:focus,.ui.form .field.warning input[type=datetime-local]:focus,.ui.form .field.warning input[type=email]:focus,.ui.form .field.warning input[type=number]:focus,.ui.form .field.warning input[type=password]:focus,.ui.form .field.warning input[type=search]:focus,.ui.form .field.warning input[type=tel]:focus,.ui.form .field.warning input[type=time]:focus,.ui.form .field.warning input[type=text]:focus,.ui.form .field.warning input[type=file]:focus,.ui.form .field.warning input[type=url]:focus{background:#FFFAF3;border-color:#c9ba9b;color:#573a08;box-shadow:none}.ui.form .field.warning select{-webkit-appearance:menulist-button}.ui.form .field.warning .transparent.input input,.ui.form .field.warning .transparent.input textarea,.ui.form .field.warning input.transparent,.ui.form .field.warning textarea.transparent{background-color:#fffaf3!important;color:#573a08!important}.ui.form .warning.warning input:-webkit-autofill{box-shadow:0 0 0 100px #ffffe0 inset!important;border-color:#e0e0b3!important}.ui.form .warning ::-webkit-input-placeholder{color:#edad3e}.ui.form .warning :-ms-input-placeholder{color:#edad3e!important}.ui.form .warning ::-moz-placeholder{color:#edad3e}.ui.form .warning :focus::-webkit-input-placeholder{color:#e39715}.ui.form .warning :focus:-ms-input-placeholder{color:#e39715!important}.ui.form .warning :focus::-moz-placeholder{color:#e39715}.ui.form .fields.warning .field .ui.dropdown,.ui.form .fields.warning .field .ui.dropdown .item,.ui.form .field.warning .ui.dropdown,.ui.form .field.warning .ui.dropdown .text,.ui.form .field.warning .ui.dropdown .item{background:#FFFAF3;color:#573a08}.ui.form .fields.warning .field .ui.dropdown,.ui.form .field.warning .ui.dropdown,.ui.form .fields.warning .field .ui.dropdown:hover,.ui.form .field.warning .ui.dropdown:hover{border-color:#c9ba9b!important}.ui.form .fields.warning .field .ui.dropdown:hover .menu,.ui.form .field.warning .ui.dropdown:hover .menu{border-color:#c9ba9b}.ui.form .fields.warning .field .ui.multiple.selection.dropdown>.label,.ui.form .field.warning .ui.multiple.selection.dropdown>.label{background-color:#eaeacc;color:#573a08}.ui.form .fields.warning .field .ui.dropdown .menu .item:hover,.ui.form .field.warning .ui.dropdown .menu .item:hover,.ui.form .fields.warning .field .ui.dropdown .menu .selected.item,.ui.form .field.warning .ui.dropdown .menu .selected.item{background-color:#fbfbe9}.ui.form .fields.warning .field .ui.dropdown .menu .active.item,.ui.form .field.warning .ui.dropdown .menu .active.item{background-color:#fdfdce!important}.ui.form .fields.warning .field .checkbox:not(.toggle):not(.slider) label,.ui.form .field.warning .checkbox:not(.toggle):not(.slider) label,.ui.form .fields.warning .field .checkbox:not(.toggle):not(.slider) .box,.ui.form .field.warning .checkbox:not(.toggle):not(.slider) .box{color:#573a08}.ui.form .fields.warning .field .checkbox:not(.toggle):not(.slider) label:before,.ui.form .field.warning .checkbox:not(.toggle):not(.slider) label:before,.ui.form .fields.warning .field .checkbox:not(.toggle):not(.slider) .box:before,.ui.form .field.warning .checkbox:not(.toggle):not(.slider) .box:before{background:#FFFAF3;border-color:#c9ba9b}.ui.form .fields.warning .field .checkbox label:after,.ui.form .field.warning .checkbox label:after,.ui.form .fields.warning .field .checkbox .box:after,.ui.form .field.warning .checkbox .box:after{color:#573a08}.ui.form .disabled.fields .field,.ui.form .disabled.field,.ui.form .field :disabled{pointer-events:none;opacity:var(--opacity-disabled)}.ui.form .field.disabled>label,.ui.form .fields.disabled>label{opacity:var(--opacity-disabled)}.ui.form .field.disabled :disabled{opacity:1}.ui.loading.form{position:relative;cursor:default;pointer-events:none}.ui.loading.form:before{position:absolute;content:"";top:0;left:0;background:rgba(255,255,255,.8);width:100%;height:100%;z-index:100}.ui.loading.form.segments:before{border-radius:.28571429rem}.ui.loading.form:after{position:absolute;content:"";top:50%;left:50%;margin:-1.5em 0 0 -1.5em;width:3em;height:3em;-webkit-animation:loader .6s infinite linear;animation:loader .6s infinite linear;border:.2em solid #767676;border-radius:500rem;box-shadow:0 0 0 1px transparent;visibility:visible;z-index:101}.ui.form .required.fields:not(.grouped)>.field>label:after,.ui.form .required.fields.grouped>label:after,.ui.form .required.field>label:after,.ui.form .required.fields:not(.grouped)>.field>.checkbox:after,.ui.form .required.field>.checkbox:after,.ui.form label.required:after{margin:-.2em 0 0 .2em;content:"*";color:#db2828}.ui.form .required.fields:not(.grouped)>.field>label:after,.ui.form .required.fields.grouped>label:after,.ui.form .required.field>label:after,.ui.form label.required:after{display:inline-block;vertical-align:top}.ui.form .required.fields:not(.grouped)>.field>.checkbox:after,.ui.form .required.field>.checkbox:after{position:absolute;top:0;left:100%}.ui.inverted.form label,.ui.form .inverted.segment label,.ui.form .inverted.segment .ui.checkbox label,.ui.form .inverted.segment .ui.checkbox .box,.ui.inverted.form .ui.checkbox label,.ui.inverted.form .ui.checkbox .box,.ui.inverted.form .inline.fields>label,.ui.inverted.form .inline.fields .field>label,.ui.inverted.form .inline.fields .field>p,.ui.inverted.form .inline.field>label,.ui.inverted.form .inline.field>p{color:#ffffffe6}.ui.inverted.loading.form{color:#fff}.ui.inverted.loading.form:before{background:rgba(0,0,0,.85)}.ui.inverted.form input:not([type]),.ui.inverted.form input[type=date],.ui.inverted.form input[type=datetime-local],.ui.inverted.form input[type=email],.ui.inverted.form input[type=number],.ui.inverted.form input[type=password],.ui.inverted.form input[type=search],.ui.inverted.form input[type=tel],.ui.inverted.form input[type=time],.ui.inverted.form input[type=text],.ui.inverted.form input[type=file],.ui.inverted.form input[type=url]{background:#FFFFFF;border-color:#ffffff1a;color:#000000de;box-shadow:none}.ui.form .grouped.fields{display:block;margin:0 0 1em}.ui.form .grouped.fields:last-child{margin-bottom:0}.ui.form .grouped.fields>label{margin:0 0 .28571429rem;color:#000000de;font-size:.92857143em;font-weight:500;text-transform:none}.ui.form .grouped.fields .field,.ui.form .grouped.inline.fields .field{display:block;margin:.5em 0;padding:0}.ui.form .grouped.inline.fields .ui.checkbox{margin-bottom:.4em}.ui.form .fields{display:flex;flex-direction:row;margin:0 -.5em 1em}.ui.form .fields>.field{flex:0 1 auto;padding-left:.5em;padding-right:.5em}.ui.form .fields>.field:first-child{border-left:none;box-shadow:none}.ui.form .two.fields>.fields,.ui.form .two.fields>.field{width:50%}.ui.form .three.fields>.fields,.ui.form .three.fields>.field{width:33.33333333%}.ui.form .four.fields>.fields,.ui.form .four.fields>.field{width:25%}.ui.form .five.fields>.fields,.ui.form .five.fields>.field{width:20%}.ui.form .six.fields>.fields,.ui.form .six.fields>.field{width:16.66666667%}.ui.form .seven.fields>.fields,.ui.form .seven.fields>.field{width:14.28571429%}.ui.form .eight.fields>.fields,.ui.form .eight.fields>.field{width:12.5%}.ui.form .nine.fields>.fields,.ui.form .nine.fields>.field{width:11.11111111%}.ui.form .ten.fields>.fields,.ui.form .ten.fields>.field{width:10%}@media only screen and (max-width: 767.98px){.ui.form .fields{flex-wrap:wrap;margin-bottom:0}.ui.form:not(.unstackable) .fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .fields:not(.unstackable)>.field{width:100%;margin:0 0 1em}}.ui.form .fields .wide.field{width:6.25%;padding-left:.5em;padding-right:.5em}.ui.form .one.wide.field{width:6.25%}.ui.form .two.wide.field{width:12.5%}.ui.form .three.wide.field{width:18.75%}.ui.form .four.wide.field{width:25%}.ui.form .five.wide.field{width:31.25%}.ui.form .six.wide.field{width:37.5%}.ui.form .seven.wide.field{width:43.75%}.ui.form .eight.wide.field{width:50%}.ui.form .nine.wide.field{width:56.25%}.ui.form .ten.wide.field{width:62.5%}.ui.form .eleven.wide.field{width:68.75%}.ui.form .twelve.wide.field{width:75%}.ui.form .thirteen.wide.field{width:81.25%}.ui.form .fourteen.wide.field{width:87.5%}.ui.form .fifteen.wide.field{width:93.75%}.ui.form .sixteen.wide.field{width:100%}.ui[class*="equal width"].form .fields>.field,.ui.form [class*="equal width"].fields>.field{width:100%;flex:1 1 auto}.ui.form .inline.fields{margin:0 0 1em;align-items:center}.ui.form .inline.fields .field{margin:0;padding:0 1em 0 0}.ui.form .inline.fields>label,.ui.form .inline.fields .field>label,.ui.form .inline.fields .field>p,.ui.form .inline.field>label,.ui.form .inline.field>p{display:inline-block;width:auto;margin-top:0;margin-bottom:0;vertical-align:baseline;font-size:.92857143em;font-weight:500;color:#000000de;text-transform:none}.ui.form .inline.fields>label{margin:.035714em 1em 0 0}.ui.form .inline.fields .field>input,.ui.form .inline.fields .field>select,.ui.form .inline.field>input,.ui.form .inline.field>select{display:inline-block;width:auto;margin-top:0;margin-bottom:0;vertical-align:middle;font-size:1em}.ui.form .inline.fields .field .calendar:not(.popup),.ui.form .inline.field .calendar:not(.popup){display:inline-block}.ui.form .inline.fields .field .calendar:not(.popup)>.input>input,.ui.form .inline.field .calendar:not(.popup)>.input>input{width:13.11em}.ui.form .inline.fields .field>:first-child,.ui.form .inline.field>:first-child{margin:0 .85714286em 0 0}.ui.form .inline.fields .field>:only-child,.ui.form .inline.field>:only-child{margin:0}.ui.form .inline.fields .wide.field{display:flex;align-items:center}.ui.form .inline.fields .wide.field>input,.ui.form .inline.fields .wide.field>select{width:100%}.ui.form,.ui.form .field .dropdown,.ui.form .field .dropdown .menu>.item{font-size:1rem}.ui.mini.form,.ui.mini.form .field .dropdown,.ui.mini.form .field .dropdown .menu>.item{font-size:.78571429rem}.ui.tiny.form,.ui.tiny.form .field .dropdown,.ui.tiny.form .field .dropdown .menu>.item{font-size:.85714286rem}.ui.small.form,.ui.small.form .field .dropdown,.ui.small.form .field .dropdown .menu>.item{font-size:.92857143rem}.ui.large.form,.ui.large.form .field .dropdown,.ui.large.form .field .dropdown .menu>.item{font-size:1.14285714rem}.ui.big.form,.ui.big.form .field .dropdown,.ui.big.form .field .dropdown .menu>.item{font-size:1.28571429rem}.ui.huge.form,.ui.huge.form .field .dropdown,.ui.huge.form .field .dropdown .menu>.item{font-size:1.42857143rem}.ui.massive.form,.ui.massive.form .field .dropdown,.ui.massive.form .field .dropdown .menu>.item{font-size:1.71428571rem}.ui.grid{display:flex;flex-direction:row;flex-wrap:wrap;align-items:stretch;padding:0}.ui.grid{margin:-1rem}.ui.relaxed.grid{margin-left:-1.5rem;margin-right:-1.5rem}.ui[class*="very relaxed"].grid{margin-left:-2.5rem;margin-right:-2.5rem}.ui.grid+.grid{margin-top:1rem}.ui.grid>.column:not(.row),.ui.grid>.row>.column{position:relative;display:inline-block;width:6.25%;padding-left:1rem;padding-right:1rem;vertical-align:top}.ui.grid>*{padding-left:1rem;padding-right:1rem}.ui.grid>.row{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:inherit;align-items:stretch;width:100%!important;padding:0;padding-top:1rem;padding-bottom:1rem}.ui.grid>.column:not(.row){padding-top:1rem;padding-bottom:1rem}.ui.grid>.row>.column{margin-top:0;margin-bottom:0}.ui.grid>.row>img,.ui.grid>.row>.column>img{max-width:100%}.ui.grid>.ui.grid:first-child{margin-top:0}.ui.grid>.ui.grid:last-child{margin-bottom:0}.ui.grid .aligned.row>.column>.segment:not(.compact):not(.attached),.ui.aligned.grid .column>.segment:not(.compact):not(.attached){width:100%}.ui.grid .row+.ui.divider{flex-grow:1;margin:1rem}.ui.grid .column+.ui.vertical.divider{height:calc(50% - 1rem)}.ui.grid>.row>.column:last-child>.horizontal.segment,.ui.grid>.column:last-child>.horizontal.segment{box-shadow:none}@media only screen and (max-width: 767.98px){.ui.page.grid{width:auto;padding-left:0;padding-right:0;margin-left:0;margin-right:0}}@media only screen and (min-width: 768px) and (max-width: 991.98px){.ui.page.grid{width:auto;margin-left:0;margin-right:0;padding-left:2em;padding-right:2em}}@media only screen and (min-width: 992px) and (max-width: 1199.98px){.ui.page.grid{width:auto;margin-left:0;margin-right:0;padding-left:3%;padding-right:3%}}@media only screen and (min-width: 1200px) and (max-width: 1919.98px){.ui.page.grid{width:auto;margin-left:0;margin-right:0;padding-left:15%;padding-right:15%}}@media only screen and (min-width: 1920px){.ui.page.grid{width:auto;margin-left:0;margin-right:0;padding-left:23%;padding-right:23%}}.ui.grid>.column:only-child,.ui.grid>.row>.column:only-child{width:100%}.ui[class*="one column"].grid>.row>.column,.ui[class*="one column"].grid>.column:not(.row){width:100%}.ui[class*="two column"].grid>.row>.column,.ui[class*="two column"].grid>.column:not(.row){width:50%}.ui[class*="three column"].grid>.row>.column,.ui[class*="three column"].grid>.column:not(.row){width:33.33333333%}.ui[class*="four column"].grid>.row>.column,.ui[class*="four column"].grid>.column:not(.row){width:25%}.ui[class*="five column"].grid>.row>.column,.ui[class*="five column"].grid>.column:not(.row){width:20%}.ui[class*="six column"].grid>.row>.column,.ui[class*="six column"].grid>.column:not(.row){width:16.66666667%}.ui[class*="seven column"].grid>.row>.column,.ui[class*="seven column"].grid>.column:not(.row){width:14.28571429%}.ui[class*="eight column"].grid>.row>.column,.ui[class*="eight column"].grid>.column:not(.row){width:12.5%}.ui[class*="nine column"].grid>.row>.column,.ui[class*="nine column"].grid>.column:not(.row){width:11.11111111%}.ui[class*="ten column"].grid>.row>.column,.ui[class*="ten column"].grid>.column:not(.row){width:10%}.ui[class*="eleven column"].grid>.row>.column,.ui[class*="eleven column"].grid>.column:not(.row){width:9.09090909%}.ui[class*="twelve column"].grid>.row>.column,.ui[class*="twelve column"].grid>.column:not(.row){width:8.33333333%}.ui[class*="thirteen column"].grid>.row>.column,.ui[class*="thirteen column"].grid>.column:not(.row){width:7.69230769%}.ui[class*="fourteen column"].grid>.row>.column,.ui[class*="fourteen column"].grid>.column:not(.row){width:7.14285714%}.ui[class*="fifteen column"].grid>.row>.column,.ui[class*="fifteen column"].grid>.column:not(.row){width:6.66666667%}.ui[class*="sixteen column"].grid>.row>.column,.ui[class*="sixteen column"].grid>.column:not(.row){width:6.25%}.ui.grid>[class*="one column"].row>.column{width:100%!important}.ui.grid>[class*="two column"].row>.column{width:50%!important}.ui.grid>[class*="three column"].row>.column{width:33.33333333%!important}.ui.grid>[class*="four column"].row>.column{width:25%!important}.ui.grid>[class*="five column"].row>.column{width:20%!important}.ui.grid>[class*="six column"].row>.column{width:16.66666667%!important}.ui.grid>[class*="seven column"].row>.column{width:14.28571429%!important}.ui.grid>[class*="eight column"].row>.column{width:12.5%!important}.ui.grid>[class*="nine column"].row>.column{width:11.11111111%!important}.ui.grid>[class*="ten column"].row>.column{width:10%!important}.ui.grid>[class*="eleven column"].row>.column{width:9.09090909%!important}.ui.grid>[class*="twelve column"].row>.column{width:8.33333333%!important}.ui.grid>[class*="thirteen column"].row>.column{width:7.69230769%!important}.ui.grid>[class*="fourteen column"].row>.column{width:7.14285714%!important}.ui.grid>[class*="fifteen column"].row>.column{width:6.66666667%!important}.ui.grid>[class*="sixteen column"].row>.column{width:6.25%!important}.ui.celled.page.grid{box-shadow:none}.ui.grid>.row>[class*="one wide"].column,.ui.grid>.column.row>[class*="one wide"].column,.ui.grid>[class*="one wide"].column,.ui.column.grid>[class*="one wide"].column{width:6.25%!important}.ui.grid>.row>[class*="two wide"].column,.ui.grid>.column.row>[class*="two wide"].column,.ui.grid>[class*="two wide"].column,.ui.column.grid>[class*="two wide"].column{width:12.5%!important}.ui.grid>.row>[class*="three wide"].column,.ui.grid>.column.row>[class*="three wide"].column,.ui.grid>[class*="three wide"].column,.ui.column.grid>[class*="three wide"].column{width:18.75%!important}.ui.grid>.row>[class*="four wide"].column,.ui.grid>.column.row>[class*="four wide"].column,.ui.grid>[class*="four wide"].column,.ui.column.grid>[class*="four wide"].column{width:25%!important}.ui.grid>.row>[class*="five wide"].column,.ui.grid>.column.row>[class*="five wide"].column,.ui.grid>[class*="five wide"].column,.ui.column.grid>[class*="five wide"].column{width:31.25%!important}.ui.grid>.row>[class*="six wide"].column,.ui.grid>.column.row>[class*="six wide"].column,.ui.grid>[class*="six wide"].column,.ui.column.grid>[class*="six wide"].column{width:37.5%!important}.ui.grid>.row>[class*="seven wide"].column,.ui.grid>.column.row>[class*="seven wide"].column,.ui.grid>[class*="seven wide"].column,.ui.column.grid>[class*="seven wide"].column{width:43.75%!important}.ui.grid>.row>[class*="eight wide"].column,.ui.grid>.column.row>[class*="eight wide"].column,.ui.grid>[class*="eight wide"].column,.ui.column.grid>[class*="eight wide"].column{width:50%!important}.ui.grid>.row>[class*="nine wide"].column,.ui.grid>.column.row>[class*="nine wide"].column,.ui.grid>[class*="nine wide"].column,.ui.column.grid>[class*="nine wide"].column{width:56.25%!important}.ui.grid>.row>[class*="ten wide"].column,.ui.grid>.column.row>[class*="ten wide"].column,.ui.grid>[class*="ten wide"].column,.ui.column.grid>[class*="ten wide"].column{width:62.5%!important}.ui.grid>.row>[class*="eleven wide"].column,.ui.grid>.column.row>[class*="eleven wide"].column,.ui.grid>[class*="eleven wide"].column,.ui.column.grid>[class*="eleven wide"].column{width:68.75%!important}.ui.grid>.row>[class*="twelve wide"].column,.ui.grid>.column.row>[class*="twelve wide"].column,.ui.grid>[class*="twelve wide"].column,.ui.column.grid>[class*="twelve wide"].column{width:75%!important}.ui.grid>.row>[class*="thirteen wide"].column,.ui.grid>.column.row>[class*="thirteen wide"].column,.ui.grid>[class*="thirteen wide"].column,.ui.column.grid>[class*="thirteen wide"].column{width:81.25%!important}.ui.grid>.row>[class*="fourteen wide"].column,.ui.grid>.column.row>[class*="fourteen wide"].column,.ui.grid>[class*="fourteen wide"].column,.ui.column.grid>[class*="fourteen wide"].column{width:87.5%!important}.ui.grid>.row>[class*="fifteen wide"].column,.ui.grid>.column.row>[class*="fifteen wide"].column,.ui.grid>[class*="fifteen wide"].column,.ui.column.grid>[class*="fifteen wide"].column{width:93.75%!important}.ui.grid>.row>[class*="sixteen wide"].column,.ui.grid>.column.row>[class*="sixteen wide"].column,.ui.grid>[class*="sixteen wide"].column,.ui.column.grid>[class*="sixteen wide"].column{width:100%!important}@media only screen and (min-width: 320px) and (max-width: 767.98px){.ui.grid>.row>[class*="one wide mobile"].column,.ui.grid>.column.row>[class*="one wide mobile"].column,.ui.grid>[class*="one wide mobile"].column,.ui.column.grid>[class*="one wide mobile"].column{width:6.25%!important}.ui.grid>.row>[class*="two wide mobile"].column,.ui.grid>.column.row>[class*="two wide mobile"].column,.ui.grid>[class*="two wide mobile"].column,.ui.column.grid>[class*="two wide mobile"].column{width:12.5%!important}.ui.grid>.row>[class*="three wide mobile"].column,.ui.grid>.column.row>[class*="three wide mobile"].column,.ui.grid>[class*="three wide mobile"].column,.ui.column.grid>[class*="three wide mobile"].column{width:18.75%!important}.ui.grid>.row>[class*="four wide mobile"].column,.ui.grid>.column.row>[class*="four wide mobile"].column,.ui.grid>[class*="four wide mobile"].column,.ui.column.grid>[class*="four wide mobile"].column{width:25%!important}.ui.grid>.row>[class*="five wide mobile"].column,.ui.grid>.column.row>[class*="five wide mobile"].column,.ui.grid>[class*="five wide mobile"].column,.ui.column.grid>[class*="five wide mobile"].column{width:31.25%!important}.ui.grid>.row>[class*="six wide mobile"].column,.ui.grid>.column.row>[class*="six wide mobile"].column,.ui.grid>[class*="six wide mobile"].column,.ui.column.grid>[class*="six wide mobile"].column{width:37.5%!important}.ui.grid>.row>[class*="seven wide mobile"].column,.ui.grid>.column.row>[class*="seven wide mobile"].column,.ui.grid>[class*="seven wide mobile"].column,.ui.column.grid>[class*="seven wide mobile"].column{width:43.75%!important}.ui.grid>.row>[class*="eight wide mobile"].column,.ui.grid>.column.row>[class*="eight wide mobile"].column,.ui.grid>[class*="eight wide mobile"].column,.ui.column.grid>[class*="eight wide mobile"].column{width:50%!important}.ui.grid>.row>[class*="nine wide mobile"].column,.ui.grid>.column.row>[class*="nine wide mobile"].column,.ui.grid>[class*="nine wide mobile"].column,.ui.column.grid>[class*="nine wide mobile"].column{width:56.25%!important}.ui.grid>.row>[class*="ten wide mobile"].column,.ui.grid>.column.row>[class*="ten wide mobile"].column,.ui.grid>[class*="ten wide mobile"].column,.ui.column.grid>[class*="ten wide mobile"].column{width:62.5%!important}.ui.grid>.row>[class*="eleven wide mobile"].column,.ui.grid>.column.row>[class*="eleven wide mobile"].column,.ui.grid>[class*="eleven wide mobile"].column,.ui.column.grid>[class*="eleven wide mobile"].column{width:68.75%!important}.ui.grid>.row>[class*="twelve wide mobile"].column,.ui.grid>.column.row>[class*="twelve wide mobile"].column,.ui.grid>[class*="twelve wide mobile"].column,.ui.column.grid>[class*="twelve wide mobile"].column{width:75%!important}.ui.grid>.row>[class*="thirteen wide mobile"].column,.ui.grid>.column.row>[class*="thirteen wide mobile"].column,.ui.grid>[class*="thirteen wide mobile"].column,.ui.column.grid>[class*="thirteen wide mobile"].column{width:81.25%!important}.ui.grid>.row>[class*="fourteen wide mobile"].column,.ui.grid>.column.row>[class*="fourteen wide mobile"].column,.ui.grid>[class*="fourteen wide mobile"].column,.ui.column.grid>[class*="fourteen wide mobile"].column{width:87.5%!important}.ui.grid>.row>[class*="fifteen wide mobile"].column,.ui.grid>.column.row>[class*="fifteen wide mobile"].column,.ui.grid>[class*="fifteen wide mobile"].column,.ui.column.grid>[class*="fifteen wide mobile"].column{width:93.75%!important}.ui.grid>.row>[class*="sixteen wide mobile"].column,.ui.grid>.column.row>[class*="sixteen wide mobile"].column,.ui.grid>[class*="sixteen wide mobile"].column,.ui.column.grid>[class*="sixteen wide mobile"].column{width:100%!important}}@media only screen and (min-width: 768px) and (max-width: 991.98px){.ui.grid>.row>[class*="one wide tablet"].column,.ui.grid>.column.row>[class*="one wide tablet"].column,.ui.grid>[class*="one wide tablet"].column,.ui.column.grid>[class*="one wide tablet"].column{width:6.25%!important}.ui.grid>.row>[class*="two wide tablet"].column,.ui.grid>.column.row>[class*="two wide tablet"].column,.ui.grid>[class*="two wide tablet"].column,.ui.column.grid>[class*="two wide tablet"].column{width:12.5%!important}.ui.grid>.row>[class*="three wide tablet"].column,.ui.grid>.column.row>[class*="three wide tablet"].column,.ui.grid>[class*="three wide tablet"].column,.ui.column.grid>[class*="three wide tablet"].column{width:18.75%!important}.ui.grid>.row>[class*="four wide tablet"].column,.ui.grid>.column.row>[class*="four wide tablet"].column,.ui.grid>[class*="four wide tablet"].column,.ui.column.grid>[class*="four wide tablet"].column{width:25%!important}.ui.grid>.row>[class*="five wide tablet"].column,.ui.grid>.column.row>[class*="five wide tablet"].column,.ui.grid>[class*="five wide tablet"].column,.ui.column.grid>[class*="five wide tablet"].column{width:31.25%!important}.ui.grid>.row>[class*="six wide tablet"].column,.ui.grid>.column.row>[class*="six wide tablet"].column,.ui.grid>[class*="six wide tablet"].column,.ui.column.grid>[class*="six wide tablet"].column{width:37.5%!important}.ui.grid>.row>[class*="seven wide tablet"].column,.ui.grid>.column.row>[class*="seven wide tablet"].column,.ui.grid>[class*="seven wide tablet"].column,.ui.column.grid>[class*="seven wide tablet"].column{width:43.75%!important}.ui.grid>.row>[class*="eight wide tablet"].column,.ui.grid>.column.row>[class*="eight wide tablet"].column,.ui.grid>[class*="eight wide tablet"].column,.ui.column.grid>[class*="eight wide tablet"].column{width:50%!important}.ui.grid>.row>[class*="nine wide tablet"].column,.ui.grid>.column.row>[class*="nine wide tablet"].column,.ui.grid>[class*="nine wide tablet"].column,.ui.column.grid>[class*="nine wide tablet"].column{width:56.25%!important}.ui.grid>.row>[class*="ten wide tablet"].column,.ui.grid>.column.row>[class*="ten wide tablet"].column,.ui.grid>[class*="ten wide tablet"].column,.ui.column.grid>[class*="ten wide tablet"].column{width:62.5%!important}.ui.grid>.row>[class*="eleven wide tablet"].column,.ui.grid>.column.row>[class*="eleven wide tablet"].column,.ui.grid>[class*="eleven wide tablet"].column,.ui.column.grid>[class*="eleven wide tablet"].column{width:68.75%!important}.ui.grid>.row>[class*="twelve wide tablet"].column,.ui.grid>.column.row>[class*="twelve wide tablet"].column,.ui.grid>[class*="twelve wide tablet"].column,.ui.column.grid>[class*="twelve wide tablet"].column{width:75%!important}.ui.grid>.row>[class*="thirteen wide tablet"].column,.ui.grid>.column.row>[class*="thirteen wide tablet"].column,.ui.grid>[class*="thirteen wide tablet"].column,.ui.column.grid>[class*="thirteen wide tablet"].column{width:81.25%!important}.ui.grid>.row>[class*="fourteen wide tablet"].column,.ui.grid>.column.row>[class*="fourteen wide tablet"].column,.ui.grid>[class*="fourteen wide tablet"].column,.ui.column.grid>[class*="fourteen wide tablet"].column{width:87.5%!important}.ui.grid>.row>[class*="fifteen wide tablet"].column,.ui.grid>.column.row>[class*="fifteen wide tablet"].column,.ui.grid>[class*="fifteen wide tablet"].column,.ui.column.grid>[class*="fifteen wide tablet"].column{width:93.75%!important}.ui.grid>.row>[class*="sixteen wide tablet"].column,.ui.grid>.column.row>[class*="sixteen wide tablet"].column,.ui.grid>[class*="sixteen wide tablet"].column,.ui.column.grid>[class*="sixteen wide tablet"].column{width:100%!important}}@media only screen and (min-width: 992px){.ui.grid>.row>[class*="one wide computer"].column,.ui.grid>.column.row>[class*="one wide computer"].column,.ui.grid>[class*="one wide computer"].column,.ui.column.grid>[class*="one wide computer"].column{width:6.25%!important}.ui.grid>.row>[class*="two wide computer"].column,.ui.grid>.column.row>[class*="two wide computer"].column,.ui.grid>[class*="two wide computer"].column,.ui.column.grid>[class*="two wide computer"].column{width:12.5%!important}.ui.grid>.row>[class*="three wide computer"].column,.ui.grid>.column.row>[class*="three wide computer"].column,.ui.grid>[class*="three wide computer"].column,.ui.column.grid>[class*="three wide computer"].column{width:18.75%!important}.ui.grid>.row>[class*="four wide computer"].column,.ui.grid>.column.row>[class*="four wide computer"].column,.ui.grid>[class*="four wide computer"].column,.ui.column.grid>[class*="four wide computer"].column{width:25%!important}.ui.grid>.row>[class*="five wide computer"].column,.ui.grid>.column.row>[class*="five wide computer"].column,.ui.grid>[class*="five wide computer"].column,.ui.column.grid>[class*="five wide computer"].column{width:31.25%!important}.ui.grid>.row>[class*="six wide computer"].column,.ui.grid>.column.row>[class*="six wide computer"].column,.ui.grid>[class*="six wide computer"].column,.ui.column.grid>[class*="six wide computer"].column{width:37.5%!important}.ui.grid>.row>[class*="seven wide computer"].column,.ui.grid>.column.row>[class*="seven wide computer"].column,.ui.grid>[class*="seven wide computer"].column,.ui.column.grid>[class*="seven wide computer"].column{width:43.75%!important}.ui.grid>.row>[class*="eight wide computer"].column,.ui.grid>.column.row>[class*="eight wide computer"].column,.ui.grid>[class*="eight wide computer"].column,.ui.column.grid>[class*="eight wide computer"].column{width:50%!important}.ui.grid>.row>[class*="nine wide computer"].column,.ui.grid>.column.row>[class*="nine wide computer"].column,.ui.grid>[class*="nine wide computer"].column,.ui.column.grid>[class*="nine wide computer"].column{width:56.25%!important}.ui.grid>.row>[class*="ten wide computer"].column,.ui.grid>.column.row>[class*="ten wide computer"].column,.ui.grid>[class*="ten wide computer"].column,.ui.column.grid>[class*="ten wide computer"].column{width:62.5%!important}.ui.grid>.row>[class*="eleven wide computer"].column,.ui.grid>.column.row>[class*="eleven wide computer"].column,.ui.grid>[class*="eleven wide computer"].column,.ui.column.grid>[class*="eleven wide computer"].column{width:68.75%!important}.ui.grid>.row>[class*="twelve wide computer"].column,.ui.grid>.column.row>[class*="twelve wide computer"].column,.ui.grid>[class*="twelve wide computer"].column,.ui.column.grid>[class*="twelve wide computer"].column{width:75%!important}.ui.grid>.row>[class*="thirteen wide computer"].column,.ui.grid>.column.row>[class*="thirteen wide computer"].column,.ui.grid>[class*="thirteen wide computer"].column,.ui.column.grid>[class*="thirteen wide computer"].column{width:81.25%!important}.ui.grid>.row>[class*="fourteen wide computer"].column,.ui.grid>.column.row>[class*="fourteen wide computer"].column,.ui.grid>[class*="fourteen wide computer"].column,.ui.column.grid>[class*="fourteen wide computer"].column{width:87.5%!important}.ui.grid>.row>[class*="fifteen wide computer"].column,.ui.grid>.column.row>[class*="fifteen wide computer"].column,.ui.grid>[class*="fifteen wide computer"].column,.ui.column.grid>[class*="fifteen wide computer"].column{width:93.75%!important}.ui.grid>.row>[class*="sixteen wide computer"].column,.ui.grid>.column.row>[class*="sixteen wide computer"].column,.ui.grid>[class*="sixteen wide computer"].column,.ui.column.grid>[class*="sixteen wide computer"].column{width:100%!important}}@media only screen and (min-width: 1200px) and (max-width: 1919.98px){.ui.grid>.row>[class*="one wide large screen"].column,.ui.grid>.column.row>[class*="one wide large screen"].column,.ui.grid>[class*="one wide large screen"].column,.ui.column.grid>[class*="one wide large screen"].column{width:6.25%!important}.ui.grid>.row>[class*="two wide large screen"].column,.ui.grid>.column.row>[class*="two wide large screen"].column,.ui.grid>[class*="two wide large screen"].column,.ui.column.grid>[class*="two wide large screen"].column{width:12.5%!important}.ui.grid>.row>[class*="three wide large screen"].column,.ui.grid>.column.row>[class*="three wide large screen"].column,.ui.grid>[class*="three wide large screen"].column,.ui.column.grid>[class*="three wide large screen"].column{width:18.75%!important}.ui.grid>.row>[class*="four wide large screen"].column,.ui.grid>.column.row>[class*="four wide large screen"].column,.ui.grid>[class*="four wide large screen"].column,.ui.column.grid>[class*="four wide large screen"].column{width:25%!important}.ui.grid>.row>[class*="five wide large screen"].column,.ui.grid>.column.row>[class*="five wide large screen"].column,.ui.grid>[class*="five wide large screen"].column,.ui.column.grid>[class*="five wide large screen"].column{width:31.25%!important}.ui.grid>.row>[class*="six wide large screen"].column,.ui.grid>.column.row>[class*="six wide large screen"].column,.ui.grid>[class*="six wide large screen"].column,.ui.column.grid>[class*="six wide large screen"].column{width:37.5%!important}.ui.grid>.row>[class*="seven wide large screen"].column,.ui.grid>.column.row>[class*="seven wide large screen"].column,.ui.grid>[class*="seven wide large screen"].column,.ui.column.grid>[class*="seven wide large screen"].column{width:43.75%!important}.ui.grid>.row>[class*="eight wide large screen"].column,.ui.grid>.column.row>[class*="eight wide large screen"].column,.ui.grid>[class*="eight wide large screen"].column,.ui.column.grid>[class*="eight wide large screen"].column{width:50%!important}.ui.grid>.row>[class*="nine wide large screen"].column,.ui.grid>.column.row>[class*="nine wide large screen"].column,.ui.grid>[class*="nine wide large screen"].column,.ui.column.grid>[class*="nine wide large screen"].column{width:56.25%!important}.ui.grid>.row>[class*="ten wide large screen"].column,.ui.grid>.column.row>[class*="ten wide large screen"].column,.ui.grid>[class*="ten wide large screen"].column,.ui.column.grid>[class*="ten wide large screen"].column{width:62.5%!important}.ui.grid>.row>[class*="eleven wide large screen"].column,.ui.grid>.column.row>[class*="eleven wide large screen"].column,.ui.grid>[class*="eleven wide large screen"].column,.ui.column.grid>[class*="eleven wide large screen"].column{width:68.75%!important}.ui.grid>.row>[class*="twelve wide large screen"].column,.ui.grid>.column.row>[class*="twelve wide large screen"].column,.ui.grid>[class*="twelve wide large screen"].column,.ui.column.grid>[class*="twelve wide large screen"].column{width:75%!important}.ui.grid>.row>[class*="thirteen wide large screen"].column,.ui.grid>.column.row>[class*="thirteen wide large screen"].column,.ui.grid>[class*="thirteen wide large screen"].column,.ui.column.grid>[class*="thirteen wide large screen"].column{width:81.25%!important}.ui.grid>.row>[class*="fourteen wide large screen"].column,.ui.grid>.column.row>[class*="fourteen wide large screen"].column,.ui.grid>[class*="fourteen wide large screen"].column,.ui.column.grid>[class*="fourteen wide large screen"].column{width:87.5%!important}.ui.grid>.row>[class*="fifteen wide large screen"].column,.ui.grid>.column.row>[class*="fifteen wide large screen"].column,.ui.grid>[class*="fifteen wide large screen"].column,.ui.column.grid>[class*="fifteen wide large screen"].column{width:93.75%!important}.ui.grid>.row>[class*="sixteen wide large screen"].column,.ui.grid>.column.row>[class*="sixteen wide large screen"].column,.ui.grid>[class*="sixteen wide large screen"].column,.ui.column.grid>[class*="sixteen wide large screen"].column{width:100%!important}}@media only screen and (min-width: 1920px){.ui.grid>.row>[class*="one wide widescreen"].column,.ui.grid>.column.row>[class*="one wide widescreen"].column,.ui.grid>[class*="one wide widescreen"].column,.ui.column.grid>[class*="one wide widescreen"].column{width:6.25%!important}.ui.grid>.row>[class*="two wide widescreen"].column,.ui.grid>.column.row>[class*="two wide widescreen"].column,.ui.grid>[class*="two wide widescreen"].column,.ui.column.grid>[class*="two wide widescreen"].column{width:12.5%!important}.ui.grid>.row>[class*="three wide widescreen"].column,.ui.grid>.column.row>[class*="three wide widescreen"].column,.ui.grid>[class*="three wide widescreen"].column,.ui.column.grid>[class*="three wide widescreen"].column{width:18.75%!important}.ui.grid>.row>[class*="four wide widescreen"].column,.ui.grid>.column.row>[class*="four wide widescreen"].column,.ui.grid>[class*="four wide widescreen"].column,.ui.column.grid>[class*="four wide widescreen"].column{width:25%!important}.ui.grid>.row>[class*="five wide widescreen"].column,.ui.grid>.column.row>[class*="five wide widescreen"].column,.ui.grid>[class*="five wide widescreen"].column,.ui.column.grid>[class*="five wide widescreen"].column{width:31.25%!important}.ui.grid>.row>[class*="six wide widescreen"].column,.ui.grid>.column.row>[class*="six wide widescreen"].column,.ui.grid>[class*="six wide widescreen"].column,.ui.column.grid>[class*="six wide widescreen"].column{width:37.5%!important}.ui.grid>.row>[class*="seven wide widescreen"].column,.ui.grid>.column.row>[class*="seven wide widescreen"].column,.ui.grid>[class*="seven wide widescreen"].column,.ui.column.grid>[class*="seven wide widescreen"].column{width:43.75%!important}.ui.grid>.row>[class*="eight wide widescreen"].column,.ui.grid>.column.row>[class*="eight wide widescreen"].column,.ui.grid>[class*="eight wide widescreen"].column,.ui.column.grid>[class*="eight wide widescreen"].column{width:50%!important}.ui.grid>.row>[class*="nine wide widescreen"].column,.ui.grid>.column.row>[class*="nine wide widescreen"].column,.ui.grid>[class*="nine wide widescreen"].column,.ui.column.grid>[class*="nine wide widescreen"].column{width:56.25%!important}.ui.grid>.row>[class*="ten wide widescreen"].column,.ui.grid>.column.row>[class*="ten wide widescreen"].column,.ui.grid>[class*="ten wide widescreen"].column,.ui.column.grid>[class*="ten wide widescreen"].column{width:62.5%!important}.ui.grid>.row>[class*="eleven wide widescreen"].column,.ui.grid>.column.row>[class*="eleven wide widescreen"].column,.ui.grid>[class*="eleven wide widescreen"].column,.ui.column.grid>[class*="eleven wide widescreen"].column{width:68.75%!important}.ui.grid>.row>[class*="twelve wide widescreen"].column,.ui.grid>.column.row>[class*="twelve wide widescreen"].column,.ui.grid>[class*="twelve wide widescreen"].column,.ui.column.grid>[class*="twelve wide widescreen"].column{width:75%!important}.ui.grid>.row>[class*="thirteen wide widescreen"].column,.ui.grid>.column.row>[class*="thirteen wide widescreen"].column,.ui.grid>[class*="thirteen wide widescreen"].column,.ui.column.grid>[class*="thirteen wide widescreen"].column{width:81.25%!important}.ui.grid>.row>[class*="fourteen wide widescreen"].column,.ui.grid>.column.row>[class*="fourteen wide widescreen"].column,.ui.grid>[class*="fourteen wide widescreen"].column,.ui.column.grid>[class*="fourteen wide widescreen"].column{width:87.5%!important}.ui.grid>.row>[class*="fifteen wide widescreen"].column,.ui.grid>.column.row>[class*="fifteen wide widescreen"].column,.ui.grid>[class*="fifteen wide widescreen"].column,.ui.column.grid>[class*="fifteen wide widescreen"].column{width:93.75%!important}.ui.grid>.row>[class*="sixteen wide widescreen"].column,.ui.grid>.column.row>[class*="sixteen wide widescreen"].column,.ui.grid>[class*="sixteen wide widescreen"].column,.ui.column.grid>[class*="sixteen wide widescreen"].column{width:100%!important}}.ui.centered.grid,.ui.centered.grid>.row,.ui.grid>.centered.row{text-align:center;justify-content:center}.ui.centered.grid>.column:not(.aligned):not(.justified):not(.row),.ui.centered.grid>.row>.column:not(.aligned):not(.justified),.ui.grid .centered.row>.column:not(.aligned):not(.justified){text-align:left}.ui.grid>.centered.column,.ui.grid>.row>.centered.column{display:block;margin-left:auto;margin-right:auto}.ui.relaxed.grid>.column:not(.row),.ui.relaxed.grid>.row>.column,.ui.grid>.relaxed.row>.column{padding-left:1.5rem;padding-right:1.5rem}.ui[class*="very relaxed"].grid>.column:not(.row),.ui[class*="very relaxed"].grid>.row>.column,.ui.grid>[class*="very relaxed"].row>.column{padding-left:2.5rem;padding-right:2.5rem}.ui.relaxed.grid .row+.ui.divider,.ui.grid .relaxed.row+.ui.divider{margin-left:1.5rem;margin-right:1.5rem}.ui[class*="very relaxed"].grid .row+.ui.divider,.ui.grid [class*="very relaxed"].row+.ui.divider{margin-left:2.5rem;margin-right:2.5rem}.ui.padded.grid:not(.vertically):not(.horizontally){margin:0!important}[class*="horizontally padded"].ui.grid{margin-left:0!important;margin-right:0!important}[class*="vertically padded"].ui.grid{margin-top:0!important;margin-bottom:0!important}.ui.grid [class*="left floated"].column{margin-right:auto}.ui.grid [class*="right floated"].column{margin-left:auto}.ui.divided.grid:not([class*="vertically divided"])>.column:not(.row),.ui.divided.grid:not([class*="vertically divided"])>.row>.column{box-shadow:-1px 0 #22242626}.ui[class*="vertically divided"].grid>.column:not(.row),.ui[class*="vertically divided"].grid>.row>.column{margin-top:1rem;margin-bottom:1rem;padding-top:0;padding-bottom:0}.ui[class*="vertically divided"].grid>.row{margin-top:0;margin-bottom:0}.ui.divided.grid:not([class*="vertically divided"])>.column:first-child,.ui.divided.grid:not([class*="vertically divided"])>.row>.column:first-child{box-shadow:none}.ui[class*="vertically divided"].grid>.row:first-child>.column{margin-top:0}.ui.grid>.divided.row>.column{box-shadow:-1px 0 #22242626}.ui.grid>.divided.row>.column:first-child{box-shadow:none}.ui[class*="vertically divided"].grid>.row{position:relative}.ui[class*="vertically divided"].grid>.row:before{position:absolute;content:"";top:0;left:0;width:calc(100% - 2rem);height:1px;margin:0 1rem;box-shadow:0 -1px #22242626}[class*="horizontally padded"].ui.divided.grid,.ui.padded.divided.grid:not(.vertically):not(.horizontally){width:100%}.ui[class*="vertically divided"].grid>.row:first-child:before{box-shadow:none}.ui.inverted.divided.grid:not([class*="vertically divided"])>.column:not(.row),.ui.inverted.divided.grid:not([class*="vertically divided"])>.row>.column{box-shadow:-1px 0 #ffffff1a}.ui.inverted.divided.grid:not([class*="vertically divided"])>.column:not(.row):first-child,.ui.inverted.divided.grid:not([class*="vertically divided"])>.row>.column:first-child{box-shadow:none}.ui.inverted[class*="vertically divided"].grid>.row:before{box-shadow:0 -1px #ffffff1a}.ui.relaxed[class*="vertically divided"].grid>.row:before{margin-left:1.5rem;margin-right:1.5rem;width:calc(100% - 3rem)}.ui[class*="very relaxed"][class*="vertically divided"].grid>.row:before{margin-left:2.5rem;margin-right:2.5rem;width:calc(100% - 5rem)}.ui.celled.grid{width:100%;margin:1em 0;box-shadow:0 0 0 1px #d4d4d5}.ui.celled.grid>.row{width:100%!important;margin:0;padding:0;box-shadow:0 -1px #d4d4d5}.ui.celled.grid>.column:not(.row),.ui.celled.grid>.row>.column{box-shadow:-1px 0 #d4d4d5}.ui.celled.grid>.column:first-child,.ui.celled.grid>.row>.column:first-child{box-shadow:none}.ui.celled.grid>.column:not(.row),.ui.celled.grid>.row>.column{padding:1em}.ui.relaxed.celled.grid>.column:not(.row),.ui.relaxed.celled.grid>.row>.column{padding:1.5em}.ui[class*="very relaxed"].celled.grid>.column:not(.row),.ui[class*="very relaxed"].celled.grid>.row>.column{padding:2em}.ui[class*="internally celled"].grid{box-shadow:none;margin:0}.ui[class*="internally celled"].grid>.row:first-child{box-shadow:none}.ui[class*="internally celled"].grid>.row>.column:first-child{box-shadow:none}.ui[class*="top aligned"].grid>.column:not(.row),.ui[class*="top aligned"].grid>.row>.column,.ui.grid>[class*="top aligned"].row>.column,.ui.grid>[class*="top aligned"].column:not(.row),.ui.grid>.row>[class*="top aligned"].column{flex-direction:column;vertical-align:top;align-self:flex-start!important}.ui[class*="middle aligned"].grid>.column:not(.row),.ui[class*="middle aligned"].grid>.row>.column,.ui.grid>[class*="middle aligned"].row>.column,.ui.grid>[class*="middle aligned"].column:not(.row),.ui.grid>.row>[class*="middle aligned"].column{flex-direction:column;vertical-align:middle;align-self:center!important}.ui[class*="bottom aligned"].grid>.column:not(.row),.ui[class*="bottom aligned"].grid>.row>.column,.ui.grid>[class*="bottom aligned"].row>.column,.ui.grid>[class*="bottom aligned"].column:not(.row),.ui.grid>.row>[class*="bottom aligned"].column{flex-direction:column;vertical-align:bottom;align-self:flex-end!important}.ui.stretched.grid>.row>.column,.ui.stretched.grid>.column,.ui.grid>.stretched.row>.column,.ui.grid>.stretched.column:not(.row),.ui.grid>.row>.stretched.column{display:inline-flex!important;align-self:stretch;flex-direction:column}.ui.stretched.grid>.row>.column>*,.ui.stretched.grid>.column>*,.ui.grid>.stretched.row>.column>*,.ui.grid>.stretched.column:not(.row)>*,.ui.grid>.row>.stretched.column>*{flex-grow:1}.ui[class*="left aligned"].grid>.column,.ui[class*="left aligned"].grid>.row>.column,.ui.grid>[class*="left aligned"].row>.column,.ui.grid>[class*="left aligned"].column.column,.ui.grid>.row>[class*="left aligned"].column.column{text-align:left;align-self:inherit}.ui[class*="center aligned"].grid>.column,.ui[class*="center aligned"].grid>.row>.column,.ui.grid>[class*="center aligned"].row>.column,.ui.grid>[class*="center aligned"].column.column,.ui.grid>.row>[class*="center aligned"].column.column{text-align:center;align-self:inherit}.ui[class*="center aligned"].grid{justify-content:center}.ui[class*="right aligned"].grid>.column,.ui[class*="right aligned"].grid>.row>.column,.ui.grid>[class*="right aligned"].row>.column,.ui.grid>[class*="right aligned"].column.column,.ui.grid>.row>[class*="right aligned"].column.column{text-align:right;align-self:inherit}.ui.justified.grid>.column,.ui.justified.grid>.row>.column,.ui.grid>.justified.row>.column,.ui.grid>.justified.column.column,.ui.grid>.row>.justified.column.column{text-align:justify;-webkit-hyphens:auto;hyphens:auto}.ui.grid>.primary.row,.ui.grid>.primary.column,.ui.grid>.row>.primary.column{background-color:#2185d0;color:#fff}.ui.grid>.secondary.row,.ui.grid>.secondary.column,.ui.grid>.row>.secondary.column{background-color:#1b1c1d;color:#fff}.ui.grid>.red.row,.ui.grid>.red.column,.ui.grid>.row>.red.column{background-color:#db2828;color:#fff}.ui.grid>.orange.row,.ui.grid>.orange.column,.ui.grid>.row>.orange.column{background-color:#f2711c;color:#fff}.ui.grid>.yellow.row,.ui.grid>.yellow.column,.ui.grid>.row>.yellow.column{background-color:#fbbd08;color:#fff}.ui.grid>.olive.row,.ui.grid>.olive.column,.ui.grid>.row>.olive.column{background-color:#b5cc18;color:#fff}.ui.grid>.green.row,.ui.grid>.green.column,.ui.grid>.row>.green.column{background-color:#21ba45;color:#fff}.ui.grid>.teal.row,.ui.grid>.teal.column,.ui.grid>.row>.teal.column{background-color:#00b5ad;color:#fff}.ui.grid>.blue.row,.ui.grid>.blue.column,.ui.grid>.row>.blue.column{background-color:#2185d0;color:#fff}.ui.grid>.violet.row,.ui.grid>.violet.column,.ui.grid>.row>.violet.column{background-color:#6435c9;color:#fff}.ui.grid>.purple.row,.ui.grid>.purple.column,.ui.grid>.row>.purple.column{background-color:#a333c8;color:#fff}.ui.grid>.pink.row,.ui.grid>.pink.column,.ui.grid>.row>.pink.column{background-color:#e03997;color:#fff}.ui.grid>.brown.row,.ui.grid>.brown.column,.ui.grid>.row>.brown.column{background-color:#a5673f;color:#fff}.ui.grid>.grey.row,.ui.grid>.grey.column,.ui.grid>.row>.grey.column{background-color:#767676;color:#fff}.ui.grid>.black.row,.ui.grid>.black.column,.ui.grid>.row>.black.column{background-color:#1b1c1d;color:#fff}.ui[class*="equal width"].grid>.column:not(.row),.ui[class*="equal width"].grid>.row>.column,.ui.grid>[class*="equal width"].row>.column{display:inline-block;flex-grow:1}.ui[class*="equal width"].grid>.wide.column,.ui[class*="equal width"].grid>.row>.wide.column,.ui.grid>[class*="equal width"].row>.wide.column{flex-grow:0}@media only screen and (max-width: 767.98px){.ui[class*="mobile reversed"].grid,.ui[class*="mobile reversed"].grid>.row,.ui.grid>[class*="mobile reversed"].row{flex-direction:row-reverse}.ui[class*="mobile vertically reversed"].grid,.ui.stackable[class*="mobile reversed"]{flex-direction:column-reverse}.ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"])>.column:first-child,.ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:first-child{box-shadow:-1px 0 #22242626}.ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"])>.column:last-child,.ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:last-child{box-shadow:none}.ui.grid[class*="vertically divided"][class*="mobile vertically reversed"]>.row:first-child:before{box-shadow:0 -1px #22242626}.ui.grid[class*="vertically divided"][class*="mobile vertically reversed"]>.row:last-child:before{box-shadow:none}.ui[class*="mobile reversed"].celled.grid>.row>.column:first-child{box-shadow:-1px 0 #d4d4d5}.ui[class*="mobile reversed"].celled.grid>.row>.column:last-child{box-shadow:none}}@media only screen and (min-width: 768px) and (max-width: 991.98px){.ui[class*="tablet reversed"].grid,.ui[class*="tablet reversed"].grid>.row,.ui.grid>[class*="tablet reversed"].row{flex-direction:row-reverse}.ui[class*="tablet vertically reversed"].grid{flex-direction:column-reverse}.ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"])>.column:first-child,.ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:first-child{box-shadow:-1px 0 #22242626}.ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"])>.column:last-child,.ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:last-child{box-shadow:none}.ui.grid[class*="vertically divided"][class*="tablet vertically reversed"]>.row:first-child:before{box-shadow:0 -1px #22242626}.ui.grid[class*="vertically divided"][class*="tablet vertically reversed"]>.row:last-child:before{box-shadow:none}.ui[class*="tablet reversed"].celled.grid>.row>.column:first-child{box-shadow:-1px 0 #d4d4d5}.ui[class*="tablet reversed"].celled.grid>.row>.column:last-child{box-shadow:none}}@media only screen and (min-width: 992px){.ui[class*="computer reversed"].grid,.ui[class*="computer reversed"].grid>.row,.ui.grid>[class*="computer reversed"].row{flex-direction:row-reverse}.ui[class*="computer vertically reversed"].grid{flex-direction:column-reverse}.ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"])>.column:first-child,.ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:first-child{box-shadow:-1px 0 #22242626}.ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"])>.column:last-child,.ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:last-child{box-shadow:none}.ui.grid[class*="vertically divided"][class*="computer vertically reversed"]>.row:first-child:before{box-shadow:0 -1px #22242626}.ui.grid[class*="vertically divided"][class*="computer vertically reversed"]>.row:last-child:before{box-shadow:none}.ui[class*="computer reversed"].celled.grid>.row>.column:first-child{box-shadow:-1px 0 #d4d4d5}.ui[class*="computer reversed"].celled.grid>.row>.column:last-child{box-shadow:none}}@media only screen and (min-width: 768px) and (max-width: 991.98px){.ui.doubling.grid{width:auto}.ui.grid>.doubling.row,.ui.doubling.grid>.row{margin:0!important;padding:0!important}.ui.grid>.doubling.row>.column,.ui.doubling.grid>.row>.column{display:inline-block!important;padding-top:1rem!important;padding-bottom:1rem!important;box-shadow:none!important;margin:0}.ui[class*="two column"].doubling.grid>.row>.column,.ui[class*="two column"].doubling.grid>.column:not(.row),.ui.grid>[class*="two column"].doubling.row.row>.column{width:100%!important}.ui[class*="three column"].doubling.grid>.row>.column,.ui[class*="three column"].doubling.grid>.column:not(.row),.ui.grid>[class*="three column"].doubling.row.row>.column{width:50%!important}.ui[class*="four column"].doubling.grid>.row>.column,.ui[class*="four column"].doubling.grid>.column:not(.row),.ui.grid>[class*="four column"].doubling.row.row>.column{width:50%!important}.ui[class*="five column"].doubling.grid>.row>.column,.ui[class*="five column"].doubling.grid>.column:not(.row),.ui.grid>[class*="five column"].doubling.row.row>.column{width:33.33333333%!important}.ui[class*="six column"].doubling.grid>.row>.column,.ui[class*="six column"].doubling.grid>.column:not(.row),.ui.grid>[class*="six column"].doubling.row.row>.column{width:33.33333333%!important}.ui[class*="seven column"].doubling.grid>.row>.column,.ui[class*="seven column"].doubling.grid>.column:not(.row),.ui.grid>[class*="seven column"].doubling.row.row>.column{width:33.33333333%!important}.ui[class*="eight column"].doubling.grid>.row>.column,.ui[class*="eight column"].doubling.grid>.column:not(.row),.ui.grid>[class*="eight column"].doubling.row.row>.column{width:25%!important}.ui[class*="nine column"].doubling.grid>.row>.column,.ui[class*="nine column"].doubling.grid>.column:not(.row),.ui.grid>[class*="nine column"].doubling.row.row>.column{width:25%!important}.ui[class*="ten column"].doubling.grid>.row>.column,.ui[class*="ten column"].doubling.grid>.column:not(.row),.ui.grid>[class*="ten column"].doubling.row.row>.column{width:20%!important}.ui[class*="eleven column"].doubling.grid>.row>.column,.ui[class*="eleven column"].doubling.grid>.column:not(.row),.ui.grid>[class*="eleven column"].doubling.row.row>.column{width:20%!important}.ui[class*="twelve column"].doubling.grid>.row>.column,.ui[class*="twelve column"].doubling.grid>.column:not(.row),.ui.grid>[class*="twelve column"].doubling.row.row>.column{width:16.66666667%!important}.ui[class*="thirteen column"].doubling.grid>.row>.column,.ui[class*="thirteen column"].doubling.grid>.column:not(.row),.ui.grid>[class*="thirteen column"].doubling.row.row>.column{width:16.66666667%!important}.ui[class*="fourteen column"].doubling.grid>.row>.column,.ui[class*="fourteen column"].doubling.grid>.column:not(.row),.ui.grid>[class*="fourteen column"].doubling.row.row>.column{width:14.28571429%!important}.ui[class*="fifteen column"].doubling.grid>.row>.column,.ui[class*="fifteen column"].doubling.grid>.column:not(.row),.ui.grid>[class*="fifteen column"].doubling.row.row>.column{width:14.28571429%!important}.ui[class*="sixteen column"].doubling.grid>.row>.column,.ui[class*="sixteen column"].doubling.grid>.column:not(.row),.ui.grid>[class*="sixteen column"].doubling.row.row>.column{width:12.5%!important}}@media only screen and (max-width: 767.98px){.ui.grid>.doubling.row,.ui.doubling.grid>.row{margin:0!important;padding:0!important}.ui.grid>.doubling.row>.column,.ui.doubling.grid>.row>.column{padding-top:1rem!important;padding-bottom:1rem!important;margin:0!important;box-shadow:none!important}.ui[class*="two column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="two column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="two column"].doubling:not(.stackable).row.row>.column{width:100%!important}.ui[class*="three column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="three column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="three column"].doubling:not(.stackable).row.row>.column{width:50%!important}.ui[class*="four column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="four column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="four column"].doubling:not(.stackable).row.row>.column{width:50%!important}.ui[class*="five column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="five column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="five column"].doubling:not(.stackable).row.row>.column{width:50%!important}.ui[class*="six column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="six column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="six column"].doubling:not(.stackable).row.row>.column{width:50%!important}.ui[class*="seven column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="seven column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="seven column"].doubling:not(.stackable).row.row>.column{width:50%!important}.ui[class*="eight column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="eight column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="eight column"].doubling:not(.stackable).row.row>.column{width:50%!important}.ui[class*="nine column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="nine column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="nine column"].doubling:not(.stackable).row.row>.column{width:33.33333333%!important}.ui[class*="ten column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="ten column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="ten column"].doubling:not(.stackable).row.row>.column{width:33.33333333%!important}.ui[class*="eleven column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="eleven column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="eleven column"].doubling:not(.stackable).row.row>.column{width:33.33333333%!important}.ui[class*="twelve column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="twelve column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="twelve column"].doubling:not(.stackable).row.row>.column{width:33.33333333%!important}.ui[class*="thirteen column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="thirteen column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="thirteen column"].doubling:not(.stackable).row.row>.column{width:33.33333333%!important}.ui[class*="fourteen column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="fourteen column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="fourteen column"].doubling:not(.stackable).row.row>.column{width:25%!important}.ui[class*="fifteen column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="fifteen column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="fifteen column"].doubling:not(.stackable).row.row>.column{width:25%!important}.ui[class*="sixteen column"].doubling:not(.stackable).grid>.row>.column,.ui[class*="sixteen column"].doubling:not(.stackable).grid>.column:not(.row),.ui.grid>[class*="sixteen column"].doubling:not(.stackable).row.row>.column{width:25%!important}}@media only screen and (max-width: 767.98px){.ui.stackable.grid{width:auto;margin-left:0!important;margin-right:0!important}.ui.stackable.grid>.row>.wide.column,.ui.stackable.grid>.wide.column,.ui.stackable.grid>.column.grid>.column,.ui.stackable.grid>.column.row>.column,.ui.stackable.grid>.row>.column,.ui.stackable.grid>.column:not(.row),.ui.grid>.stackable.stackable.stackable.row>.column{width:100%!important;margin:0!important;box-shadow:none!important;padding:1rem}.ui.stackable.grid:not(.vertically)>.row{margin:0;padding:0}.ui.container>.ui.stackable.grid>.column,.ui.container>.ui.stackable.grid>.row>.column{padding-left:0!important;padding-right:0!important}.ui.grid .ui.stackable.grid,.ui.segment:not(.vertical) .ui.stackable.page.grid{margin-left:-1rem!important;margin-right:-1rem!important}.ui.stackable.divided.grid>.row:first-child>.column:first-child,.ui.stackable.celled.grid>.row:first-child>.column:first-child,.ui.stackable.divided.grid>.column:not(.row):first-child,.ui.stackable.celled.grid>.column:not(.row):first-child{border-top:none!important}.ui.inverted.stackable.celled.grid>.column:not(.row),.ui.inverted.stackable.divided.grid>.column:not(.row),.ui.inverted.stackable.celled.grid>.row>.column,.ui.inverted.stackable.divided.grid>.row>.column{border-top:1px solid rgba(255,255,255,.1)}.ui.stackable.celled.grid>.column:not(.row),.ui.stackable.divided:not(.vertically).grid>.column:not(.row),.ui.stackable.celled.grid>.row>.column,.ui.stackable.divided:not(.vertically).grid>.row>.column{border-top:1px solid rgba(34,36,38,.15);box-shadow:none!important;padding-top:2rem!important;padding-bottom:2rem!important}.ui.stackable.celled.grid>.row{box-shadow:none!important}.ui.stackable.divided:not(.vertically).grid>.column:not(.row),.ui.stackable.divided:not(.vertically).grid>.row>.column{padding-left:0!important;padding-right:0!important}}@media only screen and (max-width: 767.98px){.ui[class*="tablet only"].grid.grid.grid:not(.mobile),.ui.grid.grid.grid>[class*="tablet only"].row:not(.mobile),.ui.grid.grid.grid>[class*="tablet only"].column:not(.mobile),.ui.grid.grid.grid>.row>[class*="tablet only"].column:not(.mobile){display:none!important}.ui[class*="computer only"].grid.grid.grid:not(.mobile),.ui.grid.grid.grid>[class*="computer only"].row:not(.mobile),.ui.grid.grid.grid>[class*="computer only"].column:not(.mobile),.ui.grid.grid.grid>.row>[class*="computer only"].column:not(.mobile){display:none!important}.ui[class*="large screen only"].grid.grid.grid:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].row:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].column:not(.mobile),.ui.grid.grid.grid>.row>[class*="large screen only"].column:not(.mobile){display:none!important}.ui[class*="widescreen only"].grid.grid.grid:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].row:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>.row>[class*="widescreen only"].column:not(.mobile){display:none!important}}@media only screen and (min-width: 768px) and (max-width: 991.98px){.ui[class*="mobile only"].grid.grid.grid:not(.tablet),.ui.grid.grid.grid>[class*="mobile only"].row:not(.tablet),.ui.grid.grid.grid>[class*="mobile only"].column:not(.tablet),.ui.grid.grid.grid>.row>[class*="mobile only"].column:not(.tablet){display:none!important}.ui[class*="computer only"].grid.grid.grid:not(.tablet),.ui.grid.grid.grid>[class*="computer only"].row:not(.tablet),.ui.grid.grid.grid>[class*="computer only"].column:not(.tablet),.ui.grid.grid.grid>.row>[class*="computer only"].column:not(.tablet){display:none!important}.ui[class*="large screen only"].grid.grid.grid:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].row:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].column:not(.mobile),.ui.grid.grid.grid>.row>[class*="large screen only"].column:not(.mobile){display:none!important}.ui[class*="widescreen only"].grid.grid.grid:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].row:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>.row>[class*="widescreen only"].column:not(.mobile){display:none!important}}@media only screen and (min-width: 992px) and (max-width: 1199.98px){.ui[class*="mobile only"].grid.grid.grid:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].row:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].column:not(.computer),.ui.grid.grid.grid>.row>[class*="mobile only"].column:not(.computer){display:none!important}.ui[class*="tablet only"].grid.grid.grid:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].row:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].column:not(.computer),.ui.grid.grid.grid>.row>[class*="tablet only"].column:not(.computer){display:none!important}.ui[class*="large screen only"].grid.grid.grid:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].row:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].column:not(.mobile),.ui.grid.grid.grid>.row>[class*="large screen only"].column:not(.mobile){display:none!important}.ui[class*="widescreen only"].grid.grid.grid:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].row:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>.row>[class*="widescreen only"].column:not(.mobile){display:none!important}}@media only screen and (min-width: 1200px) and (max-width: 1919.98px){.ui[class*="mobile only"].grid.grid.grid:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].row:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].column:not(.computer),.ui.grid.grid.grid>.row>[class*="mobile only"].column:not(.computer){display:none!important}.ui[class*="tablet only"].grid.grid.grid:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].row:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].column:not(.computer),.ui.grid.grid.grid>.row>[class*="tablet only"].column:not(.computer){display:none!important}.ui[class*="widescreen only"].grid.grid.grid:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].row:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>.row>[class*="widescreen only"].column:not(.mobile){display:none!important}}@media only screen and (min-width: 1920px){.ui[class*="mobile only"].grid.grid.grid:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].row:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].column:not(.computer),.ui.grid.grid.grid>.row>[class*="mobile only"].column:not(.computer){display:none!important}.ui[class*="tablet only"].grid.grid.grid:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].row:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].column:not(.computer),.ui.grid.grid.grid>.row>[class*="tablet only"].column:not(.computer){display:none!important}}.ui.ui.ui.compact.grid>.column:not(.row),.ui.ui.ui.compact.grid>.row>.column{padding-left:.5rem;padding-right:.5rem}.ui.ui.ui.compact.grid>*{padding-left:.5rem;padding-right:.5rem}.ui.ui.ui.compact.grid>.row{padding-top:.5rem;padding-bottom:.5rem}.ui.ui.ui.compact.grid>.column:not(.row){padding-top:.5rem;padding-bottom:.5rem}.ui.compact.relaxed.celled.grid>.column:not(.row),.ui.compact.relaxed.celled.grid>.row>.column{padding:.75em}.ui.compact[class*="very relaxed"].celled.grid>.column:not(.row),.ui.compact[class*="very relaxed"].celled.grid>.row>.column{padding:1em}.ui.ui.ui[class*="very compact"].grid>.column:not(.row),.ui.ui.ui[class*="very compact"].grid>.row>.column{padding-left:.25rem;padding-right:.25rem}.ui.ui.ui[class*="very compact"].grid>*{padding-left:.25rem;padding-right:.25rem}.ui.ui.ui[class*="very compact"].grid>.row{padding:.25rem .75rem}.ui.ui.ui[class*="very compact"].grid>.column:not(.row){padding-top:.25rem;padding-bottom:.25rem}.ui[class*="very compact"].relaxed.celled.grid>.column:not(.row),.ui[class*="very compact"].relaxed.celled.grid>.row>.column{padding:.375em}.ui[class*="very compact"][class*="very relaxed"].celled.grid>.column:not(.row),.ui[class*="very compact"][class*="very relaxed"].celled.grid>.row>.column{padding:.5em}.ui.header{border:none;margin:calc(2rem - .1428571428571429em) 0 1rem;padding:0;font-family:var(--fonts-regular);font-weight:500;line-height:1.28571429em;text-transform:none;color:#000000de}.ui.header:first-child{margin-top:-.14285714em}.ui.header:last-child{margin-bottom:0}.ui.header .sub.header{display:block;font-weight:400;padding:0;margin:0;font-size:1rem;line-height:1.2em;color:#0009}.ui.header>i.icon{display:table-cell;opacity:1;font-size:1.5em;padding-top:0;vertical-align:middle}.ui.header>i.icon:only-child{display:inline-block;padding:0;margin-right:.75rem}.ui.header>.image:not(.icon),.ui.header>img{display:inline-block;margin-top:.14285714em;width:2.5em;height:auto;vertical-align:middle}.ui.header>.image:not(.icon):only-child,.ui.header>img:only-child{margin-right:.75rem}.ui.header .content{display:inline-block;vertical-align:top}.ui.header>img+.content,.ui.header>.image+.content{padding-left:.75rem;vertical-align:middle}.ui.header>i.icon+.content{padding-left:.75rem;display:table-cell;vertical-align:middle}.ui.header .ui.label{font-size:"";margin-left:.5rem;vertical-align:middle}.ui.header+p{margin-top:0}h1.ui.header{font-size:2rem}h1.ui.header .sub.header{font-size:1.14285714rem}h2.ui.header{font-size:1.71428571rem}h2.ui.header .sub.header{font-size:1.14285714rem}h3.ui.header{font-size:1.28571429rem}h3.ui.header .sub.header{font-size:1rem}h4.ui.header{font-size:1.07142857rem}h4.ui.header .sub.header,h5.ui.header{font-size:1rem}h5.ui.header .sub.header{font-size:.92857143rem}h6.ui.header{font-size:.85714286rem}h6.ui.header .sub.header{font-size:.92857143rem}.ui.mini.header{font-size:.85714286em}.ui.mini.header .sub.header{font-size:.92857143rem}.ui.mini.sub.header{font-size:.78571429em}.ui.tiny.header{font-size:1em}.ui.tiny.header .sub.header{font-size:.92857143rem}.ui.tiny.sub.header{font-size:.78571429em}.ui.small.header{font-size:1.07142857em}.ui.small.header .sub.header{font-size:1rem}.ui.small.sub.header{font-size:.78571429em}.ui.large.header{font-size:1.71428571em}.ui.large.header .sub.header{font-size:1.14285714rem}.ui.large.sub.header{font-size:.92857143em}.ui.big.header{font-size:1.85714286em}.ui.big.header .sub.header{font-size:1.14285714rem}.ui.big.sub.header{font-size:1em}.ui.huge.header{font-size:2em;min-height:1em}.ui.huge.header .sub.header{font-size:1.14285714rem}.ui.huge.sub.header{font-size:1em}.ui.massive.header{font-size:2.28571429em;min-height:1em}.ui.massive.header .sub.header{font-size:1.42857143rem}.ui.massive.sub.header{font-size:1.14285714em}.ui.sub.header{padding:0;margin-bottom:.14285714rem;font-weight:500;font-size:.85714286em;text-transform:uppercase;color:""}.ui.icon.header{display:inline-block;text-align:center;margin:2rem 0 1rem}.ui.icon.header:after{content:"";display:block;height:0;clear:both;visibility:hidden}.ui.icon.header:first-child{margin-top:0}.ui.icon.header>i.icon{float:none;display:block;width:auto;height:auto;line-height:1;padding:0;font-size:3em;margin:0 auto .5rem;opacity:1}.ui.icon.header .corner.icon{font-size:1.35em}.ui.icon.header .content{display:block;padding:0}.ui.icon.header>i.circular.icon{font-size:2em}.ui.icon.header>i.square.icon{font-size:2em}.ui.block.icon.header>i.icon{margin-bottom:0}.ui.icon.header.aligned{margin-left:auto;margin-right:auto;display:block}.ui.disabled.header{opacity:var(--opacity-disabled)}.ui.inverted.header{color:#fff}.ui.inverted.header .sub.header{color:#fffc}.ui.inverted.attached.header{background:#1B1C1D;box-shadow:none;border-color:transparent}.ui.inverted.block.header{background:#545454 linear-gradient(transparent,rgba(0,0,0,.05));box-shadow:none;border-bottom:none}.ui.primary.header{color:#2185d0}a.ui.primary.header:hover{color:#1678c2}.ui.primary.dividing.header{border-bottom:2px solid #2185D0}.ui.inverted.primary.header.header.header{color:#54c8ff}a.ui.inverted.primary.header.header.header:hover{color:#21b8ff}.ui.inverted.primary.dividing.header{border-bottom:2px solid #54C8FF}.ui.secondary.header{color:#1b1c1d}a.ui.secondary.header:hover{color:#27292a}.ui.secondary.dividing.header{border-bottom:2px solid #1B1C1D}.ui.inverted.secondary.header.header.header{color:#545454}a.ui.inverted.secondary.header.header.header:hover{color:#6e6e6e}.ui.inverted.secondary.dividing.header{border-bottom:2px solid #545454}.ui.red.header{color:#db2828}a.ui.red.header:hover{color:#d01919}.ui.red.dividing.header{border-bottom:2px solid #DB2828}.ui.inverted.red.header.header.header{color:#ff695e}a.ui.inverted.red.header.header.header:hover{color:#ff392b}.ui.inverted.red.dividing.header{border-bottom:2px solid #FF695E}.ui.orange.header{color:#f2711c}a.ui.orange.header:hover{color:#f26202}.ui.orange.dividing.header{border-bottom:2px solid #F2711C}.ui.inverted.orange.header.header.header{color:#ff851b}a.ui.inverted.orange.header.header.header:hover{color:#e76b00}.ui.inverted.orange.dividing.header{border-bottom:2px solid #FF851B}.ui.yellow.header{color:#fbbd08}a.ui.yellow.header:hover{color:#eaae00}.ui.yellow.dividing.header{border-bottom:2px solid #FBBD08}.ui.inverted.yellow.header.header.header{color:#ffe21f}a.ui.inverted.yellow.header.header.header:hover{color:#ebcd00}.ui.inverted.yellow.dividing.header{border-bottom:2px solid #FFE21F}.ui.olive.header{color:#b5cc18}a.ui.olive.header:hover{color:#a7bd0d}.ui.olive.dividing.header{border-bottom:2px solid #B5CC18}.ui.inverted.olive.header.header.header{color:#d9e778}a.ui.inverted.olive.header.header.header:hover{color:#d2e745}.ui.inverted.olive.dividing.header{border-bottom:2px solid #D9E778}.ui.green.header{color:#21ba45}a.ui.green.header:hover{color:#16ab39}.ui.green.dividing.header{border-bottom:2px solid #21BA45}.ui.inverted.green.header.header.header{color:#2ecc40}a.ui.inverted.green.header.header.header:hover{color:#1ea92e}.ui.inverted.green.dividing.header{border-bottom:2px solid #2ECC40}.ui.teal.header{color:#00b5ad}a.ui.teal.header:hover{color:#009c95}.ui.teal.dividing.header{border-bottom:2px solid #00B5AD}.ui.inverted.teal.header.header.header{color:#6dffff}a.ui.inverted.teal.header.header.header:hover{color:#3affff}.ui.inverted.teal.dividing.header{border-bottom:2px solid #6DFFFF}.ui.blue.header{color:#2185d0}a.ui.blue.header:hover{color:#1678c2}.ui.blue.dividing.header{border-bottom:2px solid #2185D0}.ui.inverted.blue.header.header.header{color:#54c8ff}a.ui.inverted.blue.header.header.header:hover{color:#21b8ff}.ui.inverted.blue.dividing.header{border-bottom:2px solid #54C8FF}.ui.violet.header{color:#6435c9}a.ui.violet.header:hover{color:#5829bb}.ui.violet.dividing.header{border-bottom:2px solid #6435C9}.ui.inverted.violet.header.header.header{color:#a291fb}a.ui.inverted.violet.header.header.header:hover{color:#745aff}.ui.inverted.violet.dividing.header{border-bottom:2px solid #A291FB}.ui.purple.header{color:#a333c8}a.ui.purple.header:hover{color:#9627ba}.ui.purple.dividing.header{border-bottom:2px solid #A333C8}.ui.inverted.purple.header.header.header{color:#dc73ff}a.ui.inverted.purple.header.header.header:hover{color:#cf40ff}.ui.inverted.purple.dividing.header{border-bottom:2px solid #DC73FF}.ui.pink.header{color:#e03997}a.ui.pink.header:hover{color:#e61a8d}.ui.pink.dividing.header{border-bottom:2px solid #E03997}.ui.inverted.pink.header.header.header{color:#ff8edf}a.ui.inverted.pink.header.header.header:hover{color:#ff5bd1}.ui.inverted.pink.dividing.header{border-bottom:2px solid #FF8EDF}.ui.brown.header{color:#a5673f}a.ui.brown.header:hover{color:#975b33}.ui.brown.dividing.header{border-bottom:2px solid #A5673F}.ui.inverted.brown.header.header.header{color:#d67c1c}a.ui.inverted.brown.header.header.header:hover{color:#b0620f}.ui.inverted.brown.dividing.header{border-bottom:2px solid #D67C1C}.ui.grey.header{color:#767676}a.ui.grey.header:hover{color:#838383}.ui.grey.dividing.header{border-bottom:2px solid #767676}.ui.inverted.grey.header.header.header{color:#dcddde}a.ui.inverted.grey.header.header.header:hover{color:#c2c4c5}.ui.inverted.grey.dividing.header{border-bottom:2px solid #DCDDDE}.ui.black.header{color:#1b1c1d}a.ui.black.header:hover{color:#27292a}.ui.black.dividing.header{border-bottom:2px solid #1B1C1D}.ui.inverted.black.header.header.header{color:#545454}a.ui.inverted.black.header.header.header:hover{color:#000}.ui.inverted.black.dividing.header{border-bottom:2px solid #545454}.ui.left.aligned.header{text-align:left}.ui.right.aligned.header{text-align:right}.ui.centered.header,.ui.center.aligned.header{text-align:center}.ui.justified.header{text-align:justify}.ui.justified.header:after{display:inline-block;content:"";width:100%}.ui.floated.header,.ui[class*="left floated"].header{float:left;margin-top:0;margin-right:.5em}.ui[class*="right floated"].header{float:right;margin-top:0;margin-left:.5em}.ui.fitted.header{padding:0}.ui.dividing.header{padding-bottom:.21428571rem;border-bottom:1px solid rgba(34,36,38,.15)}.ui.dividing.header .sub.header{padding-bottom:.21428571rem}.ui.dividing.header i.icon{margin-bottom:0}.ui.inverted.dividing.header{border-bottom-color:#ffffff1a}.ui.block.header{background:#F3F4F5;padding:.78571429rem 1rem;box-shadow:none;border:1px solid #D4D4D5;border-radius:.28571429rem}.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6){font-size:1rem}.ui.mini.block.header{font-size:.78571429rem}.ui.tiny.block.header{font-size:.85714286rem}.ui.small.block.header{font-size:.92857143rem}.ui.large.block.header{font-size:1.14285714rem}.ui.big.block.header{font-size:1.28571429rem}.ui.huge.block.header{font-size:1.42857143rem}.ui.massive.block.header{font-size:1.71428571rem}.ui.attached.header{background:#FFFFFF;padding:.78571429rem 1rem;margin:0 -1px;box-shadow:none;border:1px solid #D4D4D5;border-radius:0}.ui.attached.block.header{background:#F3F4F5}.ui.attached:not(.top).header{border-top:none}.ui.top.attached.header{border-radius:.28571429rem .28571429rem 0 0}.ui.bottom.attached.header{border-radius:0 0 .28571429rem .28571429rem}.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6){font-size:1em}.ui.mini.attached.header{font-size:.78571429em}.ui.tiny.attached.header{font-size:.85714286em}.ui.small.attached.header{font-size:.92857143em}.ui.large.attached.header{font-size:1.14285714em}.ui.big.attached.header{font-size:1.28571429em}.ui.huge.attached.header{font-size:1.42857143em}.ui.massive.attached.header{font-size:1.71428571em}.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6){font-size:1.28571429em}@font-face{font-family:Icons;src:url(./themes/default/assets/fonts/icons.eot);src:url(./themes/default/assets/fonts/icons.eot?#iefix) format("embedded-opentype"),url(../fonts/icons.9451d5fe.woff2) format("woff2"),url(./themes/default/assets/fonts/icons.woff) format("woff"),url(./themes/default/assets/fonts/icons.ttf) format("truetype"),url(./themes/default/assets/fonts/icons.svg#icons) format("svg");font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon{display:inline-block;opacity:1;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:400;text-decoration:inherit;text-align:center;speak:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-backface-visibility:hidden;backface-visibility:hidden}i.icon:before{background:none!important}i.icon.loading{height:1em;line-height:1;-webkit-animation:loader 2s linear infinite;animation:loader 2s linear infinite}i.icon:hover,i.icons:hover,i.icon:active,i.icons:active,i.emphasized.icon:not(.disabled),i.emphasized.icons:not(.disabled){opacity:1}i.disabled.icon,i.disabled.icons{opacity:var(--opacity-disabled);cursor:default;pointer-events:none}i.fitted.icon{width:auto;margin:0!important}i.link.icon:not(.disabled),i.link.icons:not(.disabled){cursor:pointer;opacity:.8;transition:opacity .1s ease}i.link.icon:hover,i.link.icons:hover{opacity:1}i.circular.icon{border-radius:500em!important;line-height:1!important;padding:.5em 0!important;box-shadow:0 0 0 .1em #0000001a inset;width:2em!important;height:2em!important}i.circular.inverted.icon{border:none;box-shadow:none}i.flipped.icon,i.horizontally.flipped.icon{transform:scaleX(-1)}i.vertically.flipped.icon{transform:scaleY(-1)}i.rotated.icon,i.right.rotated.icon,i.clockwise.rotated.icon{transform:rotate(90deg)}i.left.rotated.icon,i.counterclockwise.rotated.icon{transform:rotate(-90deg)}i.halfway.rotated.icon{transform:rotate(180deg)}i.rotated.flipped.icon,i.right.rotated.flipped.icon,i.clockwise.rotated.flipped.icon{transform:scaleX(-1) rotate(90deg)}i.left.rotated.flipped.icon,i.counterclockwise.rotated.flipped.icon{transform:scaleX(-1) rotate(-90deg)}i.halfway.rotated.flipped.icon{transform:scaleX(-1) rotate(180deg)}i.rotated.vertically.flipped.icon,i.right.rotated.vertically.flipped.icon,i.clockwise.rotated.vertically.flipped.icon{transform:scaleY(-1) rotate(90deg)}i.left.rotated.vertically.flipped.icon,i.counterclockwise.rotated.vertically.flipped.icon{transform:scaleY(-1) rotate(-90deg)}i.halfway.rotated.vertically.flipped.icon{transform:scaleY(-1) rotate(180deg)}i.bordered.icon{line-height:1;vertical-align:baseline;width:2em;height:2em;padding:.5em 0!important;box-shadow:0 0 0 .1em #0000001a inset}i.bordered.inverted.icon{border:none;box-shadow:none}i.inverted.bordered.icon,i.inverted.circular.icon{background-color:#1b1c1d;color:#fff}i.inverted.icon{color:#fff}i.primary.icon.icon.icon.icon{color:#2185d0}i.inverted.primary.icon.icon.icon.icon{color:#54c8ff}i.inverted.bordered.primary.icon.icon.icon.icon,i.inverted.circular.primary.icon.icon.icon.icon{background-color:#2185d0;color:#fff}i.secondary.icon.icon.icon.icon{color:#1b1c1d}i.inverted.secondary.icon.icon.icon.icon{color:#545454}i.inverted.bordered.secondary.icon.icon.icon.icon,i.inverted.circular.secondary.icon.icon.icon.icon{background-color:#1b1c1d;color:#fff}i.red.icon.icon.icon.icon{color:#db2828}i.inverted.red.icon.icon.icon.icon{color:#ff695e}i.inverted.bordered.red.icon.icon.icon.icon,i.inverted.circular.red.icon.icon.icon.icon{background-color:#db2828;color:#fff}i.orange.icon.icon.icon.icon{color:#f2711c}i.inverted.orange.icon.icon.icon.icon{color:#ff851b}i.inverted.bordered.orange.icon.icon.icon.icon,i.inverted.circular.orange.icon.icon.icon.icon{background-color:#f2711c;color:#fff}i.yellow.icon.icon.icon.icon{color:#fbbd08}i.inverted.yellow.icon.icon.icon.icon{color:#ffe21f}i.inverted.bordered.yellow.icon.icon.icon.icon,i.inverted.circular.yellow.icon.icon.icon.icon{background-color:#fbbd08;color:#fff}i.olive.icon.icon.icon.icon{color:#b5cc18}i.inverted.olive.icon.icon.icon.icon{color:#d9e778}i.inverted.bordered.olive.icon.icon.icon.icon,i.inverted.circular.olive.icon.icon.icon.icon{background-color:#b5cc18;color:#fff}i.green.icon.icon.icon.icon{color:#21ba45}i.inverted.green.icon.icon.icon.icon{color:#2ecc40}i.inverted.bordered.green.icon.icon.icon.icon,i.inverted.circular.green.icon.icon.icon.icon{background-color:#21ba45;color:#fff}i.teal.icon.icon.icon.icon{color:#00b5ad}i.inverted.teal.icon.icon.icon.icon{color:#6dffff}i.inverted.bordered.teal.icon.icon.icon.icon,i.inverted.circular.teal.icon.icon.icon.icon{background-color:#00b5ad;color:#fff}i.blue.icon.icon.icon.icon{color:#2185d0}i.inverted.blue.icon.icon.icon.icon{color:#54c8ff}i.inverted.bordered.blue.icon.icon.icon.icon,i.inverted.circular.blue.icon.icon.icon.icon{background-color:#2185d0;color:#fff}i.violet.icon.icon.icon.icon{color:#6435c9}i.inverted.violet.icon.icon.icon.icon{color:#a291fb}i.inverted.bordered.violet.icon.icon.icon.icon,i.inverted.circular.violet.icon.icon.icon.icon{background-color:#6435c9;color:#fff}i.purple.icon.icon.icon.icon{color:#a333c8}i.inverted.purple.icon.icon.icon.icon{color:#dc73ff}i.inverted.bordered.purple.icon.icon.icon.icon,i.inverted.circular.purple.icon.icon.icon.icon{background-color:#a333c8;color:#fff}i.pink.icon.icon.icon.icon{color:#e03997}i.inverted.pink.icon.icon.icon.icon{color:#ff8edf}i.inverted.bordered.pink.icon.icon.icon.icon,i.inverted.circular.pink.icon.icon.icon.icon{background-color:#e03997;color:#fff}i.brown.icon.icon.icon.icon{color:#a5673f}i.inverted.brown.icon.icon.icon.icon{color:#d67c1c}i.inverted.bordered.brown.icon.icon.icon.icon,i.inverted.circular.brown.icon.icon.icon.icon{background-color:#a5673f;color:#fff}i.grey.icon.icon.icon.icon{color:#767676}i.inverted.grey.icon.icon.icon.icon{color:#dcddde}i.inverted.bordered.grey.icon.icon.icon.icon,i.inverted.circular.grey.icon.icon.icon.icon{background-color:#767676;color:#fff}i.black.icon.icon.icon.icon{color:#1b1c1d}i.inverted.black.icon.icon.icon.icon{color:#545454}i.inverted.bordered.black.icon.icon.icon.icon,i.inverted.circular.black.icon.icon.icon.icon{background-color:#1b1c1d;color:#fff}i.icon,i.icons{font-size:1em;line-height:1}i.mini.mini.mini.icon,i.mini.mini.mini.icons{font-size:.4em;vertical-align:middle}i.tiny.tiny.tiny.icon,i.tiny.tiny.tiny.icons{font-size:.5em;vertical-align:middle}i.small.small.small.icon,i.small.small.small.icons{font-size:.75em;vertical-align:middle}i.large.large.large.icon,i.large.large.large.icons{font-size:1.5em;vertical-align:middle}i.big.big.big.icon,i.big.big.big.icons{font-size:2em;vertical-align:middle}i.huge.huge.huge.icon,i.huge.huge.huge.icons{font-size:4em;vertical-align:middle}i.massive.massive.massive.icon,i.massive.massive.massive.icons{font-size:8em;vertical-align:middle}i.icons{display:inline-block;position:relative;line-height:1}i.icons .icon{position:absolute;top:50%;left:50%;transform:translate(-50%) translateY(-50%);margin:0}i.icons .icon:first-child{position:static;width:auto;height:auto;vertical-align:top;transform:none}i.icons .corner.icon{inset:auto 0 0 auto;transform:none;font-size:.45em;text-shadow:-1px -1px 0 #FFFFFF,1px -1px 0 #FFFFFF,-1px 1px 0 #FFFFFF,1px 1px 0 #FFFFFF}i.icons .icon.corner[class*="top right"]{inset:0 0 auto auto}i.icons .icon.corner[class*="top left"]{inset:0 auto auto 0}i.icons .icon.corner[class*="bottom left"]{inset:auto auto 0 0}i.icons .icon.corner[class*="bottom right"]{inset:auto 0 0 auto}i.icons .inverted.corner.icon{text-shadow:-1px -1px 0 #1B1C1D,1px -1px 0 #1B1C1D,-1px 1px 0 #1B1C1D,1px 1px 0 #1B1C1D}i.icon.linkedin.in:before{content:"\f0e1"}i.icon.zoom.in:before{content:"\f00e"}i.icon.zoom.out:before{content:"\f010"}i.icon.sign.in:before{content:"\f2f6"}i.icon.in.cart:before{content:"\f218"}i.icon.log.out:before{content:"\f2f5"}i.icon.sign.out:before{content:"\f2f5"}i.icon.ad:before{content:"\f641"}i.icon.address.book:before{content:"\f2b9"}i.icon.address.card:before{content:"\f2bb"}i.icon.adjust:before{content:"\f042"}i.icon.air.freshener:before{content:"\f5d0"}i.icon.align.center:before{content:"\f037"}i.icon.align.justify:before{content:"\f039"}i.icon.align.left:before{content:"\f036"}i.icon.align.right:before{content:"\f038"}i.icon.allergies:before{content:"\f461"}i.icon.ambulance:before{content:"\f0f9"}i.icon.american.sign.language.interpreting:before{content:"\f2a3"}i.icon.anchor:before{content:"\f13d"}i.icon.angle.double.down:before{content:"\f103"}i.icon.angle.double.left:before{content:"\f100"}i.icon.angle.double.right:before{content:"\f101"}i.icon.angle.double.up:before{content:"\f102"}i.icon.angle.down:before{content:"\f107"}i.icon.angle.left:before{content:"\f104"}i.icon.angle.right:before{content:"\f105"}i.icon.angle.up:before{content:"\f106"}i.icon.angry:before{content:"\f556"}i.icon.ankh:before{content:"\f644"}i.icon.archive:before{content:"\f187"}i.icon.archway:before{content:"\f557"}i.icon.arrow.alternate.circle.down:before{content:"\f358"}i.icon.arrow.alternate.circle.left:before{content:"\f359"}i.icon.arrow.alternate.circle.right:before{content:"\f35a"}i.icon.arrow.alternate.circle.up:before{content:"\f35b"}i.icon.arrow.circle.down:before{content:"\f0ab"}i.icon.arrow.circle.left:before{content:"\f0a8"}i.icon.arrow.circle.right:before{content:"\f0a9"}i.icon.arrow.circle.up:before{content:"\f0aa"}i.icon.arrow.left:before{content:"\f060"}i.icon.arrow.right:before{content:"\f061"}i.icon.arrow.up:before{content:"\f062"}i.icon.arrow.down:before{content:"\f063"}i.icon.arrows.alternate:before{content:"\f0b2"}i.icon.arrows.alternate.horizontal:before{content:"\f337"}i.icon.arrows.alternate.vertical:before{content:"\f338"}i.icon.assistive.listening.systems:before{content:"\f2a2"}i.icon.asterisk:before{content:"\f069"}i.icon.at:before{content:"\f1fa"}i.icon.atlas:before{content:"\f558"}i.icon.atom:before{content:"\f5d2"}i.icon.audio.description:before{content:"\f29e"}i.icon.award:before{content:"\f559"}i.icon.baby:before{content:"\f77c"}i.icon.baby.carriage:before{content:"\f77d"}i.icon.backspace:before{content:"\f55a"}i.icon.backward:before{content:"\f04a"}i.icon.bacon:before{content:"\f7e5"}i.icon.bahai:before{content:"\f666"}i.icon.balance.scale:before{content:"\f24e"}i.icon.balance.scale.left:before{content:"\f515"}i.icon.balance.scale.right:before{content:"\f516"}i.icon.ban:before{content:"\f05e"}i.icon.band.aid:before{content:"\f462"}i.icon.barcode:before{content:"\f02a"}i.icon.bars:before{content:"\f0c9"}i.icon.baseball.ball:before{content:"\f433"}i.icon.basketball.ball:before{content:"\f434"}i.icon.bath:before{content:"\f2cd"}i.icon.battery.empty:before{content:"\f244"}i.icon.battery.full:before{content:"\f240"}i.icon.battery.half:before{content:"\f242"}i.icon.battery.quarter:before{content:"\f243"}i.icon.battery.three.quarters:before{content:"\f241"}i.icon.bed:before{content:"\f236"}i.icon.beer:before{content:"\f0fc"}i.icon.bell:before{content:"\f0f3"}i.icon.bell.slash:before{content:"\f1f6"}i.icon.bezier.curve:before{content:"\f55b"}i.icon.bible:before{content:"\f647"}i.icon.bicycle:before{content:"\f206"}i.icon.biking:before{content:"\f84a"}i.icon.binoculars:before{content:"\f1e5"}i.icon.biohazard:before{content:"\f780"}i.icon.birthday.cake:before{content:"\f1fd"}i.icon.blender:before{content:"\f517"}i.icon.blender.phone:before{content:"\f6b6"}i.icon.blind:before{content:"\f29d"}i.icon.blog:before{content:"\f781"}i.icon.bold:before{content:"\f032"}i.icon.bolt:before{content:"\f0e7"}i.icon.bomb:before{content:"\f1e2"}i.icon.bone:before{content:"\f5d7"}i.icon.bong:before{content:"\f55c"}i.icon.book:before{content:"\f02d"}i.icon.book.dead:before{content:"\f6b7"}i.icon.book.medical:before{content:"\f7e6"}i.icon.book.open:before{content:"\f518"}i.icon.book.reader:before{content:"\f5da"}i.icon.bookmark:before{content:"\f02e"}i.icon.border.all:before{content:"\f84c"}i.icon.border.none:before{content:"\f850"}i.icon.border.style:before{content:"\f853"}i.icon.bowling.ball:before{content:"\f436"}i.icon.box:before{content:"\f466"}i.icon.box.open:before{content:"\f49e"}i.icon.box.tissue:before{content:"\f95b"}i.icon.boxes:before{content:"\f468"}i.icon.braille:before{content:"\f2a1"}i.icon.brain:before{content:"\f5dc"}i.icon.bread.slice:before{content:"\f7ec"}i.icon.briefcase:before{content:"\f0b1"}i.icon.briefcase.medical:before{content:"\f469"}i.icon.broadcast.tower:before{content:"\f519"}i.icon.broom:before{content:"\f51a"}i.icon.brush:before{content:"\f55d"}i.icon.bug:before{content:"\f188"}i.icon.building:before{content:"\f1ad"}i.icon.bullhorn:before{content:"\f0a1"}i.icon.bullseye:before{content:"\f140"}i.icon.burn:before{content:"\f46a"}i.icon.bus:before{content:"\f207"}i.icon.bus.alternate:before{content:"\f55e"}i.icon.business.time:before{content:"\f64a"}i.icon.calculator:before{content:"\f1ec"}i.icon.calendar:before{content:"\f133"}i.icon.calendar.alternate:before{content:"\f073"}i.icon.calendar.check:before{content:"\f274"}i.icon.calendar.day:before{content:"\f783"}i.icon.calendar.minus:before{content:"\f272"}i.icon.calendar.plus:before{content:"\f271"}i.icon.calendar.times:before{content:"\f273"}i.icon.calendar.week:before{content:"\f784"}i.icon.camera:before{content:"\f030"}i.icon.camera.retro:before{content:"\f083"}i.icon.campground:before{content:"\f6bb"}i.icon.candy.cane:before{content:"\f786"}i.icon.cannabis:before{content:"\f55f"}i.icon.capsules:before{content:"\f46b"}i.icon.car:before{content:"\f1b9"}i.icon.car.alternate:before{content:"\f5de"}i.icon.car.battery:before{content:"\f5df"}i.icon.car.crash:before{content:"\f5e1"}i.icon.car.side:before{content:"\f5e4"}i.icon.caravan:before{content:"\f8ff"}i.icon.caret.down:before{content:"\f0d7"}i.icon.caret.left:before{content:"\f0d9"}i.icon.caret.right:before{content:"\f0da"}i.icon.caret.square.down:before{content:"\f150"}i.icon.caret.square.left:before{content:"\f191"}i.icon.caret.square.right:before{content:"\f152"}i.icon.caret.square.up:before{content:"\f151"}i.icon.caret.up:before{content:"\f0d8"}i.icon.carrot:before{content:"\f787"}i.icon.cart.arrow.down:before{content:"\f218"}i.icon.cart.plus:before{content:"\f217"}i.icon.cash.register:before{content:"\f788"}i.icon.cat:before{content:"\f6be"}i.icon.certificate:before{content:"\f0a3"}i.icon.chair:before{content:"\f6c0"}i.icon.chalkboard:before{content:"\f51b"}i.icon.chalkboard.teacher:before{content:"\f51c"}i.icon.charging.station:before{content:"\f5e7"}i.icon.chart.area:before{content:"\f1fe"}i.icon.chart.bar:before{content:"\f080"}i.icon.chart.line:before{content:"\f201"}i.icon.chartline:before{content:"\f201"}i.icon.chart.pie:before{content:"\f200"}i.icon.check:before{content:"\f00c"}i.icon.check.circle:before{content:"\f058"}i.icon.check.double:before{content:"\f560"}i.icon.check.square:before{content:"\f14a"}i.icon.cheese:before{content:"\f7ef"}i.icon.chess:before{content:"\f439"}i.icon.chess.bishop:before{content:"\f43a"}i.icon.chess.board:before{content:"\f43c"}i.icon.chess.king:before{content:"\f43f"}i.icon.chess.knight:before{content:"\f441"}i.icon.chess.pawn:before{content:"\f443"}i.icon.chess.queen:before{content:"\f445"}i.icon.chess.rook:before{content:"\f447"}i.icon.chevron.circle.down:before{content:"\f13a"}i.icon.chevron.circle.left:before{content:"\f137"}i.icon.chevron.circle.right:before{content:"\f138"}i.icon.chevron.circle.up:before{content:"\f139"}i.icon.chevron.down:before{content:"\f078"}i.icon.chevron.left:before{content:"\f053"}i.icon.chevron.right:before{content:"\f054"}i.icon.chevron.up:before{content:"\f077"}i.icon.child:before{content:"\f1ae"}i.icon.church:before{content:"\f51d"}i.icon.circle:before{content:"\f111"}i.icon.circle.notch:before{content:"\f1ce"}i.icon.city:before{content:"\f64f"}i.icon.clinic.medical:before{content:"\f7f2"}i.icon.clipboard:before{content:"\f328"}i.icon.clipboard.check:before{content:"\f46c"}i.icon.clipboard.list:before{content:"\f46d"}i.icon.clock:before{content:"\f017"}i.icon.clone:before{content:"\f24d"}i.icon.closed.captioning:before{content:"\f20a"}i.icon.cloud:before{content:"\f0c2"}i.icon.cloud.download.alternate:before{content:"\f381"}i.icon.cloud.meatball:before{content:"\f73b"}i.icon.cloud.moon:before{content:"\f6c3"}i.icon.cloud.moon.rain:before{content:"\f73c"}i.icon.cloud.rain:before{content:"\f73d"}i.icon.cloud.showers.heavy:before{content:"\f740"}i.icon.cloud.sun:before{content:"\f6c4"}i.icon.cloud.sun.rain:before{content:"\f743"}i.icon.cloud.upload.alternate:before{content:"\f382"}i.icon.cocktail:before{content:"\f561"}i.icon.code:before{content:"\f121"}i.icon.code.branch:before{content:"\f126"}i.icon.coffee:before{content:"\f0f4"}i.icon.cog:before{content:"\f013"}i.icon.cogs:before{content:"\f085"}i.icon.coins:before{content:"\f51e"}i.icon.columns:before{content:"\f0db"}i.icon.comment:before{content:"\f075"}i.icon.comment.alternate:before{content:"\f27a"}i.icon.comment.dollar:before{content:"\f651"}i.icon.comment.dots:before{content:"\f4ad"}i.icon.comment.medical:before{content:"\f7f5"}i.icon.comment.slash:before{content:"\f4b3"}i.icon.comments:before{content:"\f086"}i.icon.comments.dollar:before{content:"\f653"}i.icon.compact.disc:before{content:"\f51f"}i.icon.compass:before{content:"\f14e"}i.icon.compress:before{content:"\f066"}i.icon.compress.alternate:before{content:"\f422"}i.icon.compress.arrows.alternate:before{content:"\f78c"}i.icon.concierge.bell:before{content:"\f562"}i.icon.cookie:before{content:"\f563"}i.icon.cookie.bite:before{content:"\f564"}i.icon.copy:before{content:"\f0c5"}i.icon.copyright:before{content:"\f1f9"}i.icon.couch:before{content:"\f4b8"}i.icon.credit.card:before{content:"\f09d"}i.icon.crop:before{content:"\f125"}i.icon.crop.alternate:before{content:"\f565"}i.icon.cross:before{content:"\f654"}i.icon.crosshairs:before{content:"\f05b"}i.icon.crow:before{content:"\f520"}i.icon.crown:before{content:"\f521"}i.icon.crutch:before{content:"\f7f7"}i.icon.cube:before{content:"\f1b2"}i.icon.cubes:before{content:"\f1b3"}i.icon.cut:before{content:"\f0c4"}i.icon.database:before{content:"\f1c0"}i.icon.deaf:before{content:"\f2a4"}i.icon.democrat:before{content:"\f747"}i.icon.desktop:before{content:"\f108"}i.icon.dharmachakra:before{content:"\f655"}i.icon.diagnoses:before{content:"\f470"}i.icon.dice:before{content:"\f522"}i.icon.dice.d20:before{content:"\f6cf"}i.icon.dice.d6:before{content:"\f6d1"}i.icon.dice.five:before{content:"\f523"}i.icon.dice.four:before{content:"\f524"}i.icon.dice.one:before{content:"\f525"}i.icon.dice.six:before{content:"\f526"}i.icon.dice.three:before{content:"\f527"}i.icon.dice.two:before{content:"\f528"}i.icon.digital.tachograph:before{content:"\f566"}i.icon.directions:before{content:"\f5eb"}i.icon.disease:before{content:"\f7fa"}i.icon.divide:before{content:"\f529"}i.icon.dizzy:before{content:"\f567"}i.icon.dna:before{content:"\f471"}i.icon.dog:before{content:"\f6d3"}i.icon.dollar.sign:before{content:"\f155"}i.icon.dolly:before{content:"\f472"}i.icon.dolly.flatbed:before{content:"\f474"}i.icon.donate:before{content:"\f4b9"}i.icon.door.closed:before{content:"\f52a"}i.icon.door.open:before{content:"\f52b"}i.icon.dot.circle:before{content:"\f192"}i.icon.dove:before{content:"\f4ba"}i.icon.download:before{content:"\f019"}i.icon.drafting.compass:before{content:"\f568"}i.icon.dragon:before{content:"\f6d5"}i.icon.draw.polygon:before{content:"\f5ee"}i.icon.drum:before{content:"\f569"}i.icon.drum.steelpan:before{content:"\f56a"}i.icon.drumstick.bite:before{content:"\f6d7"}i.icon.dumbbell:before{content:"\f44b"}i.icon.dumpster:before{content:"\f793"}i.icon.dumpster.fire:before{content:"\f794"}i.icon.dungeon:before{content:"\f6d9"}i.icon.edit:before{content:"\f044"}i.icon.egg:before{content:"\f7fb"}i.icon.eject:before{content:"\f052"}i.icon.ellipsis.horizontal:before{content:"\f141"}i.icon.ellipsis.vertical:before{content:"\f142"}i.icon.envelope:before{content:"\f0e0"}i.icon.envelope.open:before{content:"\f2b6"}i.icon.envelope.open.text:before{content:"\f658"}i.icon.envelope.square:before{content:"\f199"}i.icon.equals:before{content:"\f52c"}i.icon.eraser:before{content:"\f12d"}i.icon.ethernet:before{content:"\f796"}i.icon.euro.sign:before{content:"\f153"}i.icon.exchange.alternate:before{content:"\f362"}i.icon.exclamation:before{content:"\f12a"}i.icon.exclamation.circle:before{content:"\f06a"}i.icon.exclamation.triangle:before{content:"\f071"}i.icon.expand:before{content:"\f065"}i.icon.expand.alternate:before{content:"\f424"}i.icon.expand.arrows.alternate:before{content:"\f31e"}i.icon.external.alternate:before{content:"\f35d"}i.icon.external.link.square.alternate:before{content:"\f360"}i.icon.eye:before{content:"\f06e"}i.icon.eye.dropper:before{content:"\f1fb"}i.icon.eye.slash:before{content:"\f070"}i.icon.fan:before{content:"\f863"}i.icon.fast.backward:before{content:"\f049"}i.icon.fast.forward:before{content:"\f050"}i.icon.faucet:before{content:"\f905"}i.icon.fax:before{content:"\f1ac"}i.icon.feather:before{content:"\f52d"}i.icon.feather.alternate:before{content:"\f56b"}i.icon.female:before{content:"\f182"}i.icon.fighter.jet:before{content:"\f0fb"}i.icon.file:before{content:"\f15b"}i.icon.file.alternate:before{content:"\f15c"}i.icon.file.archive:before{content:"\f1c6"}i.icon.file.audio:before{content:"\f1c7"}i.icon.file.code:before{content:"\f1c9"}i.icon.file.contract:before{content:"\f56c"}i.icon.file.csv:before{content:"\f6dd"}i.icon.file.download:before{content:"\f56d"}i.icon.file.excel:before{content:"\f1c3"}i.icon.file.export:before{content:"\f56e"}i.icon.file.image:before{content:"\f1c5"}i.icon.file.import:before{content:"\f56f"}i.icon.file.invoice:before{content:"\f570"}i.icon.file.invoice.dollar:before{content:"\f571"}i.icon.file.medical:before{content:"\f477"}i.icon.file.medical.alternate:before{content:"\f478"}i.icon.file.pdf:before{content:"\f1c1"}i.icon.file.powerpoint:before{content:"\f1c4"}i.icon.file.prescription:before{content:"\f572"}i.icon.file.signature:before{content:"\f573"}i.icon.file.upload:before{content:"\f574"}i.icon.file.video:before{content:"\f1c8"}i.icon.file.word:before{content:"\f1c2"}i.icon.fill:before{content:"\f575"}i.icon.fill.drip:before{content:"\f576"}i.icon.film:before{content:"\f008"}i.icon.filter:before{content:"\f0b0"}i.icon.fingerprint:before{content:"\f577"}i.icon.fire:before{content:"\f06d"}i.icon.fire.alternate:before{content:"\f7e4"}i.icon.fire.extinguisher:before{content:"\f134"}i.icon.first.aid:before{content:"\f479"}i.icon.fish:before{content:"\f578"}i.icon.fist.raised:before{content:"\f6de"}i.icon.flag:before{content:"\f024"}i.icon.flag.checkered:before{content:"\f11e"}i.icon.flag.usa:before{content:"\f74d"}i.icon.flask:before{content:"\f0c3"}i.icon.flushed:before{content:"\f579"}i.icon.folder:before{content:"\f07b"}i.icon.folder.minus:before{content:"\f65d"}i.icon.folder.open:before{content:"\f07c"}i.icon.folder.plus:before{content:"\f65e"}i.icon.font:before{content:"\f031"}i.icon.football.ball:before{content:"\f44e"}i.icon.forward:before{content:"\f04e"}i.icon.frog:before{content:"\f52e"}i.icon.frown:before{content:"\f119"}i.icon.frown.open:before{content:"\f57a"}i.icon.fruit-apple:before{content:"\f5d1"}i.icon.funnel.dollar:before{content:"\f662"}i.icon.futbol:before{content:"\f1e3"}i.icon.gamepad:before{content:"\f11b"}i.icon.gas.pump:before{content:"\f52f"}i.icon.gavel:before{content:"\f0e3"}i.icon.gem:before{content:"\f3a5"}i.icon.genderless:before{content:"\f22d"}i.icon.ghost:before{content:"\f6e2"}i.icon.gift:before{content:"\f06b"}i.icon.gifts:before{content:"\f79c"}i.icon.glass.cheers:before{content:"\f79f"}i.icon.glass.martini:before{content:"\f000"}i.icon.glass.martini.alternate:before{content:"\f57b"}i.icon.glass.whiskey:before{content:"\f7a0"}i.icon.glasses:before{content:"\f530"}i.icon.globe:before{content:"\f0ac"}i.icon.globe.africa:before{content:"\f57c"}i.icon.globe.americas:before{content:"\f57d"}i.icon.globe.asia:before{content:"\f57e"}i.icon.globe.europe:before{content:"\f7a2"}i.icon.golf.ball:before{content:"\f450"}i.icon.gopuram:before{content:"\f664"}i.icon.graduation.cap:before{content:"\f19d"}i.icon.greater.than:before{content:"\f531"}i.icon.greater.than.equal:before{content:"\f532"}i.icon.grimace:before{content:"\f57f"}i.icon.grin:before{content:"\f580"}i.icon.grin.alternate:before{content:"\f581"}i.icon.grin.beam:before{content:"\f582"}i.icon.grin.beam.sweat:before{content:"\f583"}i.icon.grin.hearts:before{content:"\f584"}i.icon.grin.squint:before{content:"\f585"}i.icon.grin.squint.tears:before{content:"\f586"}i.icon.grin.stars:before{content:"\f587"}i.icon.grin.tears:before{content:"\f588"}i.icon.grin.tongue:before{content:"\f589"}i.icon.grin.tongue.squint:before{content:"\f58a"}i.icon.grin.tongue.wink:before{content:"\f58b"}i.icon.grin.wink:before{content:"\f58c"}i.icon.grip.horizontal:before{content:"\f58d"}i.icon.grip.lines:before{content:"\f7a4"}i.icon.grip.lines.vertical:before{content:"\f7a5"}i.icon.grip.vertical:before{content:"\f58e"}i.icon.guitar:before{content:"\f7a6"}i.icon.h.square:before{content:"\f0fd"}i.icon.hamburger:before{content:"\f805"}i.icon.hammer:before{content:"\f6e3"}i.icon.hamsa:before{content:"\f665"}i.icon.hand.holding:before{content:"\f4bd"}i.icon.hand.holding.heart:before{content:"\f4be"}i.icon.hand.holding.medical:before{content:"\f95c"}i.icon.hand.holding.usd:before{content:"\f4c0"}i.icon.hand.holding.water:before{content:"\f4c1"}i.icon.hand.lizard:before{content:"\f258"}i.icon.hand.middle.finger:before{content:"\f806"}i.icon.hand.paper:before{content:"\f256"}i.icon.hand.peace:before{content:"\f25b"}i.icon.hand.point.down:before{content:"\f0a7"}i.icon.hand.point.left:before{content:"\f0a5"}i.icon.hand.point.right:before{content:"\f0a4"}i.icon.hand.point.up:before{content:"\f0a6"}i.icon.hand.pointer:before{content:"\f25a"}i.icon.hand.rock:before{content:"\f255"}i.icon.hand.scissors:before{content:"\f257"}i.icon.hand.sparkles:before{content:"\f95d"}i.icon.hand.spock:before{content:"\f259"}i.icon.hands:before{content:"\f4c2"}i.icon.hands.helping:before{content:"\f4c4"}i.icon.hands.wash:before{content:"\f95e"}i.icon.handshake:before{content:"\f2b5"}i.icon.handshake.alternate.slash:before{content:"\f95f"}i.icon.handshake.slash:before{content:"\f960"}i.icon.hanukiah:before{content:"\f6e6"}i.icon.hard.hat:before{content:"\f807"}i.icon.hashtag:before{content:"\f292"}i.icon.hat.cowboy:before{content:"\f8c0"}i.icon.hat.cowboy.side:before{content:"\f8c1"}i.icon.hat.wizard:before{content:"\f6e8"}i.icon.hdd:before{content:"\f0a0"}i.icon.head.side.cough:before{content:"\f961"}i.icon.head.side.cough.slash:before{content:"\f962"}i.icon.head.side.mask:before{content:"\f963"}i.icon.head.side.virus:before{content:"\f964"}i.icon.heading:before{content:"\f1dc"}i.icon.headphones:before{content:"\f025"}i.icon.headphones.alternate:before{content:"\f58f"}i.icon.headset:before{content:"\f590"}i.icon.heart:before{content:"\f004"}i.icon.heart.broken:before{content:"\f7a9"}i.icon.heartbeat:before{content:"\f21e"}i.icon.helicopter:before{content:"\f533"}i.icon.highlighter:before{content:"\f591"}i.icon.hiking:before{content:"\f6ec"}i.icon.hippo:before{content:"\f6ed"}i.icon.history:before{content:"\f1da"}i.icon.hockey.puck:before{content:"\f453"}i.icon.holly.berry:before{content:"\f7aa"}i.icon.home:before{content:"\f015"}i.icon.horse:before{content:"\f6f0"}i.icon.horse.head:before{content:"\f7ab"}i.icon.hospital:before{content:"\f0f8"}i.icon.hospital.alternate:before{content:"\f47d"}i.icon.hospital.symbol:before{content:"\f47e"}i.icon.hospital.user:before{content:"\f80d"}i.icon.hot.tub:before{content:"\f593"}i.icon.hotdog:before{content:"\f80f"}i.icon.hotel:before{content:"\f594"}i.icon.hourglass:before{content:"\f254"}i.icon.hourglass.end:before{content:"\f253"}i.icon.hourglass.half:before{content:"\f252"}i.icon.hourglass.start:before{content:"\f251"}i.icon.house.damage:before{content:"\f6f1"}i.icon.house.user:before{content:"\f965"}i.icon.hryvnia:before{content:"\f6f2"}i.icon.i.cursor:before{content:"\f246"}i.icon.ice.cream:before{content:"\f810"}i.icon.icicles:before{content:"\f7ad"}i.icon.icons:before{content:"\f86d"}i.icon.id.badge:before{content:"\f2c1"}i.icon.id.card:before{content:"\f2c2"}i.icon.id.card.alternate:before{content:"\f47f"}i.icon.igloo:before{content:"\f7ae"}i.icon.image:before{content:"\f03e"}i.icon.images:before{content:"\f302"}i.icon.inbox:before{content:"\f01c"}i.icon.indent:before{content:"\f03c"}i.icon.industry:before{content:"\f275"}i.icon.infinity:before{content:"\f534"}i.icon.info:before{content:"\f129"}i.icon.info.circle:before{content:"\f05a"}i.icon.italic:before{content:"\f033"}i.icon.jedi:before{content:"\f669"}i.icon.joint:before{content:"\f595"}i.icon.journal.whills:before{content:"\f66a"}i.icon.kaaba:before{content:"\f66b"}i.icon.key:before{content:"\f084"}i.icon.keyboard:before{content:"\f11c"}i.icon.khanda:before{content:"\f66d"}i.icon.kiss:before{content:"\f596"}i.icon.kiss.beam:before{content:"\f597"}i.icon.kiss.wink.heart:before{content:"\f598"}i.icon.kiwi.bird:before{content:"\f535"}i.icon.landmark:before{content:"\f66f"}i.icon.language:before{content:"\f1ab"}i.icon.laptop:before{content:"\f109"}i.icon.laptop.code:before{content:"\f5fc"}i.icon.laptop.house:before{content:"\f966"}i.icon.laptop.medical:before{content:"\f812"}i.icon.laugh:before{content:"\f599"}i.icon.laugh.beam:before{content:"\f59a"}i.icon.laugh.squint:before{content:"\f59b"}i.icon.laugh.wink:before{content:"\f59c"}i.icon.layer.group:before{content:"\f5fd"}i.icon.leaf:before{content:"\f06c"}i.icon.lemon:before{content:"\f094"}i.icon.less.than:before{content:"\f536"}i.icon.less.than.equal:before{content:"\f537"}i.icon.level.down.alternate:before{content:"\f3be"}i.icon.level.up.alternate:before{content:"\f3bf"}i.icon.life.ring:before{content:"\f1cd"}i.icon.lightbulb:before{content:"\f0eb"}i.icon.linkify:before{content:"\f0c1"}i.icon.lira.sign:before{content:"\f195"}i.icon.list:before{content:"\f03a"}i.icon.list.alternate:before{content:"\f022"}i.icon.list.ol:before{content:"\f0cb"}i.icon.list.ul:before{content:"\f0ca"}i.icon.location.arrow:before{content:"\f124"}i.icon.lock:before{content:"\f023"}i.icon.lock.open:before{content:"\f3c1"}i.icon.long.arrow.alternate.down:before{content:"\f309"}i.icon.long.arrow.alternate.left:before{content:"\f30a"}i.icon.long.arrow.alternate.right:before{content:"\f30b"}i.icon.long.arrow.alternate.up:before{content:"\f30c"}i.icon.low.vision:before{content:"\f2a8"}i.icon.luggage.cart:before{content:"\f59d"}i.icon.lungs:before{content:"\f604"}i.icon.lungs.virus:before{content:"\f967"}i.icon.magic:before{content:"\f0d0"}i.icon.magnet:before{content:"\f076"}i.icon.mail.bulk:before{content:"\f674"}i.icon.male:before{content:"\f183"}i.icon.map:before{content:"\f279"}i.icon.map.marked:before{content:"\f59f"}i.icon.map.marked.alternate:before{content:"\f5a0"}i.icon.map.marker:before{content:"\f041"}i.icon.map.marker.alternate:before{content:"\f3c5"}i.icon.map.pin:before{content:"\f276"}i.icon.map.signs:before{content:"\f277"}i.icon.marker:before{content:"\f5a1"}i.icon.mars:before{content:"\f222"}i.icon.mars.double:before{content:"\f227"}i.icon.mars.stroke:before{content:"\f229"}i.icon.mars.stroke.horizontal:before{content:"\f22b"}i.icon.mars.stroke.vertical:before{content:"\f22a"}i.icon.mask:before{content:"\f6fa"}i.icon.medal:before{content:"\f5a2"}i.icon.medkit:before{content:"\f0fa"}i.icon.meh:before{content:"\f11a"}i.icon.meh.blank:before{content:"\f5a4"}i.icon.meh.rolling.eyes:before{content:"\f5a5"}i.icon.memory:before{content:"\f538"}i.icon.menorah:before{content:"\f676"}i.icon.mercury:before{content:"\f223"}i.icon.meteor:before{content:"\f753"}i.icon.microchip:before{content:"\f2db"}i.icon.microphone:before{content:"\f130"}i.icon.microphone.alternate:before{content:"\f3c9"}i.icon.microphone.alternate.slash:before{content:"\f539"}i.icon.microphone.slash:before{content:"\f131"}i.icon.microscope:before{content:"\f610"}i.icon.minus:before{content:"\f068"}i.icon.minus.circle:before{content:"\f056"}i.icon.minus.square:before{content:"\f146"}i.icon.mitten:before{content:"\f7b5"}i.icon.mobile:before{content:"\f10b"}i.icon.mobile.alternate:before{content:"\f3cd"}i.icon.money.bill:before{content:"\f0d6"}i.icon.money.bill.alternate:before{content:"\f3d1"}i.icon.money.bill.wave:before{content:"\f53a"}i.icon.money.bill.wave.alternate:before{content:"\f53b"}i.icon.money.check:before{content:"\f53c"}i.icon.money.check.alternate:before{content:"\f53d"}i.icon.monument:before{content:"\f5a6"}i.icon.moon:before{content:"\f186"}i.icon.mortar.pestle:before{content:"\f5a7"}i.icon.mosque:before{content:"\f678"}i.icon.motorcycle:before{content:"\f21c"}i.icon.mountain:before{content:"\f6fc"}i.icon.mouse:before{content:"\f8cc"}i.icon.mouse.pointer:before{content:"\f245"}i.icon.mug.hot:before{content:"\f7b6"}i.icon.music:before{content:"\f001"}i.icon.network.wired:before{content:"\f6ff"}i.icon.neuter:before{content:"\f22c"}i.icon.newspaper:before{content:"\f1ea"}i.icon.not.equal:before{content:"\f53e"}i.icon.notes.medical:before{content:"\f481"}i.icon.object.group:before{content:"\f247"}i.icon.object.ungroup:before{content:"\f248"}i.icon.oil.can:before{content:"\f613"}i.icon.om:before{content:"\f679"}i.icon.otter:before{content:"\f700"}i.icon.outdent:before{content:"\f03b"}i.icon.pager:before{content:"\f815"}i.icon.paint.brush:before{content:"\f1fc"}i.icon.paint.roller:before{content:"\f5aa"}i.icon.palette:before{content:"\f53f"}i.icon.pallet:before{content:"\f482"}i.icon.paper.plane:before{content:"\f1d8"}i.icon.paperclip:before{content:"\f0c6"}i.icon.parachute.box:before{content:"\f4cd"}i.icon.paragraph:before{content:"\f1dd"}i.icon.parking:before{content:"\f540"}i.icon.passport:before{content:"\f5ab"}i.icon.pastafarianism:before{content:"\f67b"}i.icon.paste:before{content:"\f0ea"}i.icon.pause:before{content:"\f04c"}i.icon.pause.circle:before{content:"\f28b"}i.icon.paw:before{content:"\f1b0"}i.icon.peace:before{content:"\f67c"}i.icon.pen:before{content:"\f304"}i.icon.pen.alternate:before{content:"\f305"}i.icon.pen.fancy:before{content:"\f5ac"}i.icon.pen.nib:before{content:"\f5ad"}i.icon.pen.square:before{content:"\f14b"}i.icon.pencil.alternate:before{content:"\f303"}i.icon.pencil.ruler:before{content:"\f5ae"}i.icon.people.arrows:before{content:"\f968"}i.icon.people.carry:before{content:"\f4ce"}i.icon.pepper.hot:before{content:"\f816"}i.icon.percent:before{content:"\f295"}i.icon.percentage:before{content:"\f541"}i.icon.person.booth:before{content:"\f756"}i.icon.phone:before{content:"\f095"}i.icon.phone.alternate:before{content:"\f879"}i.icon.phone.slash:before{content:"\f3dd"}i.icon.phone.square:before{content:"\f098"}i.icon.phone.square.alternate:before{content:"\f87b"}i.icon.phone.volume:before{content:"\f2a0"}i.icon.photo.video:before{content:"\f87c"}i.icon.piggy.bank:before{content:"\f4d3"}i.icon.pills:before{content:"\f484"}i.icon.pizza.slice:before{content:"\f818"}i.icon.place.of.worship:before{content:"\f67f"}i.icon.plane:before{content:"\f072"}i.icon.plane.arrival:before{content:"\f5af"}i.icon.plane.departure:before{content:"\f5b0"}i.icon.plane.slash:before{content:"\f969"}i.icon.play:before{content:"\f04b"}i.icon.play.circle:before{content:"\f144"}i.icon.plug:before{content:"\f1e6"}i.icon.plus:before{content:"\f067"}i.icon.plus.circle:before{content:"\f055"}i.icon.plus.square:before{content:"\f0fe"}i.icon.podcast:before{content:"\f2ce"}i.icon.poll:before{content:"\f681"}i.icon.poll.horizontal:before{content:"\f682"}i.icon.poo:before{content:"\f2fe"}i.icon.poo.storm:before{content:"\f75a"}i.icon.poop:before{content:"\f619"}i.icon.portrait:before{content:"\f3e0"}i.icon.pound.sign:before{content:"\f154"}i.icon.power.off:before{content:"\f011"}i.icon.pray:before{content:"\f683"}i.icon.praying.hands:before{content:"\f684"}i.icon.prescription:before{content:"\f5b1"}i.icon.prescription.bottle:before{content:"\f485"}i.icon.prescription.bottle.alternate:before{content:"\f486"}i.icon.print:before{content:"\f02f"}i.icon.procedures:before{content:"\f487"}i.icon.project.diagram:before{content:"\f542"}i.icon.pump.medical:before{content:"\f96a"}i.icon.pump.soap:before{content:"\f96b"}i.icon.puzzle.piece:before{content:"\f12e"}i.icon.qrcode:before{content:"\f029"}i.icon.question:before{content:"\f128"}i.icon.question.circle:before{content:"\f059"}i.icon.quidditch:before{content:"\f458"}i.icon.quote.left:before{content:"\f10d"}i.icon.quote.right:before{content:"\f10e"}i.icon.quran:before{content:"\f687"}i.icon.radiation:before{content:"\f7b9"}i.icon.radiation.alternate:before{content:"\f7ba"}i.icon.rainbow:before{content:"\f75b"}i.icon.random:before{content:"\f074"}i.icon.receipt:before{content:"\f543"}i.icon.record.vinyl:before{content:"\f8d9"}i.icon.recycle:before{content:"\f1b8"}i.icon.redo:before{content:"\f01e"}i.icon.redo.alternate:before{content:"\f2f9"}i.icon.registered:before{content:"\f25d"}i.icon.remove.format:before{content:"\f87d"}i.icon.reply:before{content:"\f3e5"}i.icon.reply.all:before{content:"\f122"}i.icon.republican:before{content:"\f75e"}i.icon.restroom:before{content:"\f7bd"}i.icon.retweet:before{content:"\f079"}i.icon.ribbon:before{content:"\f4d6"}i.icon.ring:before{content:"\f70b"}i.icon.road:before{content:"\f018"}i.icon.robot:before{content:"\f544"}i.icon.rocket:before{content:"\f135"}i.icon.route:before{content:"\f4d7"}i.icon.rss:before{content:"\f09e"}i.icon.rss.square:before{content:"\f143"}i.icon.ruble.sign:before{content:"\f158"}i.icon.ruler:before{content:"\f545"}i.icon.ruler.combined:before{content:"\f546"}i.icon.ruler.horizontal:before{content:"\f547"}i.icon.ruler.vertical:before{content:"\f548"}i.icon.running:before{content:"\f70c"}i.icon.rupee.sign:before{content:"\f156"}i.icon.sad.cry:before{content:"\f5b3"}i.icon.sad.tear:before{content:"\f5b4"}i.icon.satellite:before{content:"\f7bf"}i.icon.satellite.dish:before{content:"\f7c0"}i.icon.save:before{content:"\f0c7"}i.icon.school:before{content:"\f549"}i.icon.screwdriver:before{content:"\f54a"}i.icon.scroll:before{content:"\f70e"}i.icon.sd.card:before{content:"\f7c2"}i.icon.search:before{content:"\f002"}i.icon.search.dollar:before{content:"\f688"}i.icon.search.location:before{content:"\f689"}i.icon.search.minus:before{content:"\f010"}i.icon.search.plus:before{content:"\f00e"}i.icon.seedling:before{content:"\f4d8"}i.icon.server:before{content:"\f233"}i.icon.shapes:before{content:"\f61f"}i.icon.share:before{content:"\f064"}i.icon.share.alternate:before{content:"\f1e0"}i.icon.share.alternate.square:before{content:"\f1e1"}i.icon.share.square:before{content:"\f14d"}i.icon.shekel.sign:before{content:"\f20b"}i.icon.shield.alternate:before{content:"\f3ed"}i.icon.shield.virus:before{content:"\f96c"}i.icon.ship:before{content:"\f21a"}i.icon.shipping.fast:before{content:"\f48b"}i.icon.shoe.prints:before{content:"\f54b"}i.icon.shopping.bag:before{content:"\f290"}i.icon.shopping.basket:before{content:"\f291"}i.icon.shopping.cart:before{content:"\f07a"}i.icon.shower:before{content:"\f2cc"}i.icon.shuttle.van:before{content:"\f5b6"}i.icon.sign:before{content:"\f4d9"}i.icon.sign.in.alternate:before{content:"\f2f6"}i.icon.sign.language:before{content:"\f2a7"}i.icon.sign.out.alternate:before{content:"\f2f5"}i.icon.signal:before{content:"\f012"}i.icon.signature:before{content:"\f5b7"}i.icon.sim.card:before{content:"\f7c4"}i.icon.sitemap:before{content:"\f0e8"}i.icon.skating:before{content:"\f7c5"}i.icon.skiing:before{content:"\f7c9"}i.icon.skiing.nordic:before{content:"\f7ca"}i.icon.skull:before{content:"\f54c"}i.icon.skull.crossbones:before{content:"\f714"}i.icon.slash:before{content:"\f715"}i.icon.sleigh:before{content:"\f7cc"}i.icon.sliders.horizontal:before{content:"\f1de"}i.icon.smile:before{content:"\f118"}i.icon.smile.beam:before{content:"\f5b8"}i.icon.smile.wink:before{content:"\f4da"}i.icon.smog:before{content:"\f75f"}i.icon.smoking:before{content:"\f48d"}i.icon.smoking.ban:before{content:"\f54d"}i.icon.sms:before{content:"\f7cd"}i.icon.snowboarding:before{content:"\f7ce"}i.icon.snowflake:before{content:"\f2dc"}i.icon.snowman:before{content:"\f7d0"}i.icon.snowplow:before{content:"\f7d2"}i.icon.soap:before{content:"\f96e"}i.icon.socks:before{content:"\f696"}i.icon.solar.panel:before{content:"\f5ba"}i.icon.sort:before{content:"\f0dc"}i.icon.sort.alphabet.down:before{content:"\f15d"}i.icon.sort.alphabet.down.alternate:before{content:"\f881"}i.icon.sort.alphabet.up:before{content:"\f15e"}i.icon.sort.alphabet.up.alternate:before{content:"\f882"}i.icon.sort.amount.down:before{content:"\f160"}i.icon.sort.amount.down.alternate:before{content:"\f884"}i.icon.sort.amount.up:before{content:"\f161"}i.icon.sort.amount.up.alternate:before{content:"\f885"}i.icon.sort.down:before{content:"\f0dd"}i.icon.sort.numeric.down:before{content:"\f162"}i.icon.sort.numeric.down.alternate:before{content:"\f886"}i.icon.sort.numeric.up:before{content:"\f163"}i.icon.sort.numeric.up.alternate:before{content:"\f887"}i.icon.sort.up:before{content:"\f0de"}i.icon.spa:before{content:"\f5bb"}i.icon.space.shuttle:before{content:"\f197"}i.icon.spell.check:before{content:"\f891"}i.icon.spider:before{content:"\f717"}i.icon.spinner:before{content:"\f110"}i.icon.splotch:before{content:"\f5bc"}i.icon.spray.can:before{content:"\f5bd"}i.icon.square:before{content:"\f0c8"}i.icon.square.full:before{content:"\f45c"}i.icon.square.root.alternate:before{content:"\f698"}i.icon.stamp:before{content:"\f5bf"}i.icon.star:before{content:"\f005"}i.icon.star.and.crescent:before{content:"\f699"}i.icon.star.half:before{content:"\f089"}i.icon.star.half.alternate:before{content:"\f5c0"}i.icon.star.of.david:before{content:"\f69a"}i.icon.star.of.life:before{content:"\f621"}i.icon.step.backward:before{content:"\f048"}i.icon.step.forward:before{content:"\f051"}i.icon.stethoscope:before{content:"\f0f1"}i.icon.sticky.note:before{content:"\f249"}i.icon.stop:before{content:"\f04d"}i.icon.stop.circle:before{content:"\f28d"}i.icon.stopwatch:before{content:"\f2f2"}i.icon.stopwatch.twenty:before{content:"\f96f"}i.icon.store:before{content:"\f54e"}i.icon.store.alternate:before{content:"\f54f"}i.icon.store.alternate.slash:before{content:"\f970"}i.icon.store.slash:before{content:"\f971"}i.icon.stream:before{content:"\f550"}i.icon.street.view:before{content:"\f21d"}i.icon.strikethrough:before{content:"\f0cc"}i.icon.stroopwafel:before{content:"\f551"}i.icon.subscript:before{content:"\f12c"}i.icon.subway:before{content:"\f239"}i.icon.suitcase:before{content:"\f0f2"}i.icon.suitcase.rolling:before{content:"\f5c1"}i.icon.sun:before{content:"\f185"}i.icon.superscript:before{content:"\f12b"}i.icon.surprise:before{content:"\f5c2"}i.icon.swatchbook:before{content:"\f5c3"}i.icon.swimmer:before{content:"\f5c4"}i.icon.swimming.pool:before{content:"\f5c5"}i.icon.synagogue:before{content:"\f69b"}i.icon.sync:before{content:"\f021"}i.icon.sync.alternate:before{content:"\f2f1"}i.icon.syringe:before{content:"\f48e"}i.icon.table:before{content:"\f0ce"}i.icon.table.tennis:before{content:"\f45d"}i.icon.tablet:before{content:"\f10a"}i.icon.tablet.alternate:before{content:"\f3fa"}i.icon.tablets:before{content:"\f490"}i.icon.tachometer.alternate:before{content:"\f3fd"}i.icon.tag:before{content:"\f02b"}i.icon.tags:before{content:"\f02c"}i.icon.tape:before{content:"\f4db"}i.icon.tasks:before{content:"\f0ae"}i.icon.taxi:before{content:"\f1ba"}i.icon.teeth:before{content:"\f62e"}i.icon.teeth.open:before{content:"\f62f"}i.icon.temperature.high:before{content:"\f769"}i.icon.temperature.low:before{content:"\f76b"}i.icon.tenge:before{content:"\f7d7"}i.icon.terminal:before{content:"\f120"}i.icon.text.height:before{content:"\f034"}i.icon.text.width:before{content:"\f035"}i.icon.th:before{content:"\f00a"}i.icon.th.large:before{content:"\f009"}i.icon.th.list:before{content:"\f00b"}i.icon.theater.masks:before{content:"\f630"}i.icon.thermometer:before{content:"\f491"}i.icon.thermometer.empty:before{content:"\f2cb"}i.icon.thermometer.full:before{content:"\f2c7"}i.icon.thermometer.half:before{content:"\f2c9"}i.icon.thermometer.quarter:before{content:"\f2ca"}i.icon.thermometer.three.quarters:before{content:"\f2c8"}i.icon.thumbs.down:before{content:"\f165"}i.icon.thumbs.up:before{content:"\f164"}i.icon.thumbtack:before{content:"\f08d"}i.icon.ticket.alternate:before{content:"\f3ff"}i.icon.times:before{content:"\f00d"}i.icon.times.circle:before{content:"\f057"}i.icon.tint:before{content:"\f043"}i.icon.tint.slash:before{content:"\f5c7"}i.icon.tired:before{content:"\f5c8"}i.icon.toggle.off:before{content:"\f204"}i.icon.toggle.on:before{content:"\f205"}i.icon.toilet:before{content:"\f7d8"}i.icon.toilet.paper:before{content:"\f71e"}i.icon.toilet.paper.slash:before{content:"\f972"}i.icon.toolbox:before{content:"\f552"}i.icon.tools:before{content:"\f7d9"}i.icon.tooth:before{content:"\f5c9"}i.icon.torah:before{content:"\f6a0"}i.icon.torii.gate:before{content:"\f6a1"}i.icon.tractor:before{content:"\f722"}i.icon.trademark:before{content:"\f25c"}i.icon.traffic.light:before{content:"\f637"}i.icon.trailer:before{content:"\f941"}i.icon.train:before{content:"\f238"}i.icon.tram:before{content:"\f7da"}i.icon.transgender:before{content:"\f224"}i.icon.transgender.alternate:before{content:"\f225"}i.icon.trash:before{content:"\f1f8"}i.icon.trash.alternate:before{content:"\f2ed"}i.icon.trash.restore:before{content:"\f829"}i.icon.trash.restore.alternate:before{content:"\f82a"}i.icon.tree:before{content:"\f1bb"}i.icon.trophy:before{content:"\f091"}i.icon.truck:before{content:"\f0d1"}i.icon.truck.monster:before{content:"\f63b"}i.icon.truck.moving:before{content:"\f4df"}i.icon.truck.packing:before{content:"\f4de"}i.icon.truck.pickup:before{content:"\f63c"}i.icon.tshirt:before{content:"\f553"}i.icon.tty:before{content:"\f1e4"}i.icon.tv:before{content:"\f26c"}i.icon.umbrella:before{content:"\f0e9"}i.icon.umbrella.beach:before{content:"\f5ca"}i.icon.underline:before{content:"\f0cd"}i.icon.undo:before{content:"\f0e2"}i.icon.undo.alternate:before{content:"\f2ea"}i.icon.universal.access:before{content:"\f29a"}i.icon.university:before{content:"\f19c"}i.icon.unlink:before{content:"\f127"}i.icon.unlock:before{content:"\f09c"}i.icon.unlock.alternate:before{content:"\f13e"}i.icon.upload:before{content:"\f093"}i.icon.user:before{content:"\f007"}i.icon.user.alternate:before{content:"\f406"}i.icon.user.alternate.slash:before{content:"\f4fa"}i.icon.user.astronaut:before{content:"\f4fb"}i.icon.user.check:before{content:"\f4fc"}i.icon.user.circle:before{content:"\f2bd"}i.icon.user.clock:before{content:"\f4fd"}i.icon.user.cog:before{content:"\f4fe"}i.icon.user.edit:before{content:"\f4ff"}i.icon.user.friends:before{content:"\f500"}i.icon.user.graduate:before{content:"\f501"}i.icon.user.injured:before{content:"\f728"}i.icon.user.lock:before{content:"\f502"}i.icon.user.md:before{content:"\f0f0"}i.icon.user.minus:before{content:"\f503"}i.icon.user.ninja:before{content:"\f504"}i.icon.user.nurse:before{content:"\f82f"}i.icon.user.plus:before{content:"\f234"}i.icon.user.secret:before{content:"\f21b"}i.icon.user.shield:before{content:"\f505"}i.icon.user.slash:before{content:"\f506"}i.icon.user.tag:before{content:"\f507"}i.icon.user.tie:before{content:"\f508"}i.icon.user.times:before{content:"\f235"}i.icon.users:before{content:"\f0c0"}i.icon.users.cog:before{content:"\f509"}i.icon.utensil.spoon:before{content:"\f2e5"}i.icon.utensils:before{content:"\f2e7"}i.icon.vector.square:before{content:"\f5cb"}i.icon.venus:before{content:"\f221"}i.icon.venus.double:before{content:"\f226"}i.icon.venus.mars:before{content:"\f228"}i.icon.vial:before{content:"\f492"}i.icon.vials:before{content:"\f493"}i.icon.video:before{content:"\f03d"}i.icon.video.slash:before{content:"\f4e2"}i.icon.vihara:before{content:"\f6a7"}i.icon.virus:before{content:"\f974"}i.icon.virus.slash:before{content:"\f975"}i.icon.viruses:before{content:"\f976"}i.icon.voicemail:before{content:"\f897"}i.icon.volleyball.ball:before{content:"\f45f"}i.icon.volume.down:before{content:"\f027"}i.icon.volume.mute:before{content:"\f6a9"}i.icon.volume.off:before{content:"\f026"}i.icon.volume.up:before{content:"\f028"}i.icon.vote.yea:before{content:"\f772"}i.icon.vr.cardboard:before{content:"\f729"}i.icon.walking:before{content:"\f554"}i.icon.wallet:before{content:"\f555"}i.icon.warehouse:before{content:"\f494"}i.icon.water:before{content:"\f773"}i.icon.wave.square:before{content:"\f83e"}i.icon.weight:before{content:"\f496"}i.icon.weight.hanging:before{content:"\f5cd"}i.icon.wheelchair:before{content:"\f193"}i.icon.wifi:before{content:"\f1eb"}i.icon.wind:before{content:"\f72e"}i.icon.window.close:before{content:"\f410"}i.icon.window.maximize:before{content:"\f2d0"}i.icon.window.minimize:before{content:"\f2d1"}i.icon.window.restore:before{content:"\f2d2"}i.icon.wine.bottle:before{content:"\f72f"}i.icon.wine.glass:before{content:"\f4e3"}i.icon.wine.glass.alternate:before{content:"\f5ce"}i.icon.won.sign:before{content:"\f159"}i.icon.wrench:before{content:"\f0ad"}i.icon.x.ray:before{content:"\f497"}i.icon.yen.sign:before{content:"\f157"}i.icon.yin.yang:before{content:"\f6ad"}i.icon.add:before{content:"\f067"}i.icon.add.circle:before{content:"\f055"}i.icon.add.square:before{content:"\f0fe"}i.icon.add.to.calendar:before{content:"\f271"}i.icon.add.to.cart:before{content:"\f217"}i.icon.add.user:before{content:"\f234"}i.icon.alarm:before{content:"\f0f3"}i.icon.alarm.mute:before{content:"\f1f6"}i.icon.ald:before{content:"\f2a2"}i.icon.als:before{content:"\f2a2"}i.icon.announcement:before{content:"\f0a1"}i.icon.area.chart:before{content:"\f1fe"}i.icon.area.graph:before{content:"\f1fe"}i.icon.arrow.down.cart:before{content:"\f218"}i.icon.asexual:before{content:"\f22d"}i.icon.asl:before{content:"\f2a3"}i.icon.asl.interpreting:before{content:"\f2a3"}i.icon.assistive.listening.devices:before{content:"\f2a2"}i.icon.attach:before{content:"\f0c6"}i.icon.attention:before{content:"\f06a"}i.icon.balance:before{content:"\f24e"}i.icon.bar:before{content:"\f0fc"}i.icon.bathtub:before{content:"\f2cd"}i.icon.battery.four:before{content:"\f240"}i.icon.battery.high:before{content:"\f241"}i.icon.battery.low:before{content:"\f243"}i.icon.battery.medium:before{content:"\f242"}i.icon.battery.one:before{content:"\f243"}i.icon.battery.three:before{content:"\f241"}i.icon.battery.two:before{content:"\f242"}i.icon.battery.zero:before{content:"\f244"}i.icon.birthday:before{content:"\f1fd"}i.icon.block.layout:before{content:"\f009"}i.icon.broken.chain:before{content:"\f127"}i.icon.browser:before{content:"\f022"}i.icon.call:before{content:"\f095"}i.icon.call.square:before{content:"\f098"}i.icon.cancel:before{content:"\f00d"}i.icon.cart:before{content:"\f07a"}i.icon.cc:before{content:"\f20a"}i.icon.chain:before{content:"\f0c1"}i.icon.chat:before{content:"\f075"}i.icon.checked.calendar:before{content:"\f274"}i.icon.checkmark:before{content:"\f00c"}i.icon.checkmark.box:before{content:"\f14a"}i.icon.chess.rock:before{content:"\f447"}i.icon.circle.notched:before{content:"\f1ce"}i.icon.circle.thin:before{content:"\f111"}i.icon.close:before{content:"\f00d"}i.icon.cloud.download:before{content:"\f381"}i.icon.cloud.upload:before{content:"\f382"}i.icon.cny:before{content:"\f157"}i.icon.cocktail:before{content:"\f000"}i.icon.commenting:before{content:"\f27a"}i.icon.compose:before{content:"\f303"}i.icon.computer:before{content:"\f108"}i.icon.configure:before{content:"\f0ad"}i.icon.content:before{content:"\f0c9"}i.icon.conversation:before{content:"\f086"}i.icon.credit.card.alternative:before{content:"\f09d"}i.icon.currency:before{content:"\f3d1"}i.icon.dashboard:before{content:"\f3fd"}i.icon.deafness:before{content:"\f2a4"}i.icon.delete:before{content:"\f00d"}i.icon.delete.calendar:before{content:"\f273"}i.icon.detective:before{content:"\f21b"}i.icon.diamond:before{content:"\f3a5"}i.icon.discussions:before{content:"\f086"}i.icon.disk:before{content:"\f0a0"}i.icon.doctor:before{content:"\f0f0"}i.icon.dollar:before{content:"\f155"}i.icon.dont:before{content:"\f05e"}i.icon.drivers.license:before{content:"\f2c2"}i.icon.dropdown:before{content:"\f0d7"}i.icon.emergency:before{content:"\f0f9"}i.icon.erase:before{content:"\f12d"}i.icon.eur:before{content:"\f153"}i.icon.euro:before{content:"\f153"}i.icon.exchange:before{content:"\f362"}i.icon.external:before{content:"\f35d"}i.icon.external.share:before{content:"\f14d"}i.icon.external.square:before{content:"\f360"}i.icon.eyedropper:before{content:"\f1fb"}i.icon.factory:before{content:"\f275"}i.icon.favorite:before{content:"\f005"}i.icon.feed:before{content:"\f09e"}i.icon.female.homosexual:before{content:"\f226"}i.icon.file.text:before{content:"\f15c"}i.icon.find:before{content:"\f1e5"}i.icon.first.aid:before{content:"\f0fa"}i.icon.food:before{content:"\f2e7"}i.icon.fork:before{content:"\f126"}i.icon.game:before{content:"\f11b"}i.icon.gay:before{content:"\f227"}i.icon.gbp:before{content:"\f154"}i.icon.grab:before{content:"\f255"}i.icon.graduation:before{content:"\f19d"}i.icon.grid.layout:before{content:"\f00a"}i.icon.group:before{content:"\f0c0"}i.icon.h:before{content:"\f0fd"}i.icon.hamburger:before{content:"\f0c9"}i.icon.hand.victory:before{content:"\f25b"}i.icon.handicap:before{content:"\f193"}i.icon.hard.of.hearing:before{content:"\f2a4"}i.icon.header:before{content:"\f1dc"}i.icon.heart.empty:before{content:"\f004"}i.icon.help:before{content:"\f128"}i.icon.help.circle:before{content:"\f059"}i.icon.heterosexual:before{content:"\f228"}i.icon.hide:before{content:"\f070"}i.icon.hotel:before{content:"\f236"}i.icon.hourglass.four:before{content:"\f254"}i.icon.hourglass.full:before{content:"\f254"}i.icon.hourglass.one:before{content:"\f251"}i.icon.hourglass.three:before{content:"\f253"}i.icon.hourglass.two:before{content:"\f252"}i.icon.hourglass.zero:before{content:"\f253"}i.icon.idea:before{content:"\f0eb"}i.icon.ils:before{content:"\f20b"}i.icon.in.cart:before{content:"\f218"}i.icon.inr:before{content:"\f156"}i.icon.intergender:before{content:"\f224"}i.icon.intersex:before{content:"\f224"}i.icon.jpy:before{content:"\f157"}i.icon.krw:before{content:"\f159"}i.icon.lab:before{content:"\f0c3"}i.icon.law:before{content:"\f24e"}i.icon.legal:before{content:"\f0e3"}i.icon.lesbian:before{content:"\f226"}i.icon.level.down:before{content:"\f3be"}i.icon.level.up:before{content:"\f3bf"}i.icon.lightning:before{content:"\f0e7"}i.icon.like:before{content:"\f004"}i.icon.line.graph:before{content:"\f201"}i.icon.linegraph:before{content:"\f201"}i.icon.linkify:before{content:"\f0c1"}i.icon.lira:before{content:"\f195"}i.icon.list.layout:before{content:"\f00b"}i.icon.log.out:before{content:"\f2f5"}i.icon.magnify:before{content:"\f00e"}i.icon.mail:before{content:"\f0e0"}i.icon.mail.forward:before{content:"\f064"}i.icon.mail.square:before{content:"\f199"}i.icon.male.homosexual:before{content:"\f227"}i.icon.man:before{content:"\f222"}i.icon.marker:before{content:"\f041"}i.icon.mars.alternate:before{content:"\f229"}i.icon.mars.horizontal:before{content:"\f22b"}i.icon.mars.vertical:before{content:"\f22a"}i.icon.meanpath:before{content:"\f0c8"}i.icon.military:before{content:"\f0fb"}i.icon.money:before{content:"\f3d1"}i.icon.move:before{content:"\f0b2"}i.icon.mute:before{content:"\f131"}i.icon.non.binary.transgender:before{content:"\f223"}i.icon.numbered.list:before{content:"\f0cb"}i.icon.options:before{content:"\f1de"}i.icon.ordered.list:before{content:"\f0cb"}i.icon.other.gender:before{content:"\f229"}i.icon.other.gender.horizontal:before{content:"\f22b"}i.icon.other.gender.vertical:before{content:"\f22a"}i.icon.payment:before{content:"\f09d"}i.icon.pencil:before{content:"\f303"}i.icon.pencil.square:before{content:"\f14b"}i.icon.photo:before{content:"\f030"}i.icon.picture:before{content:"\f03e"}i.icon.pie.chart:before{content:"\f200"}i.icon.pie.graph:before{content:"\f200"}i.icon.pin:before{content:"\f08d"}i.icon.plus.cart:before{content:"\f217"}i.icon.point:before{content:"\f041"}i.icon.pointing.down:before{content:"\f0a7"}i.icon.pointing.left:before{content:"\f0a5"}i.icon.pointing.right:before{content:"\f0a4"}i.icon.pointing.up:before{content:"\f0a6"}i.icon.pound:before{content:"\f154"}i.icon.power:before{content:"\f011"}i.icon.power.cord:before{content:"\f1e6"}i.icon.privacy:before{content:"\f084"}i.icon.protect:before{content:"\f023"}i.icon.puzzle:before{content:"\f12e"}i.icon.r.circle:before{content:"\f25d"}i.icon.radio:before{content:"\f192"}i.icon.rain:before{content:"\f0e9"}i.icon.record:before{content:"\f03d"}i.icon.refresh:before{content:"\f021"}i.icon.remove:before{content:"\f00d"}i.icon.remove.bookmark:before{content:"\f02e"}i.icon.remove.circle:before{content:"\f057"}i.icon.remove.from.calendar:before{content:"\f272"}i.icon.remove.user:before{content:"\f235"}i.icon.repeat:before{content:"\f01e"}i.icon.resize.horizontal:before{content:"\f337"}i.icon.resize.vertical:before{content:"\f338"}i.icon.rmb:before{content:"\f157"}i.icon.rouble:before{content:"\f158"}i.icon.rub:before{content:"\f158"}i.icon.ruble:before{content:"\f158"}i.icon.rupee:before{content:"\f156"}i.icon.s15:before{content:"\f2cd"}i.icon.selected.radio:before{content:"\f192"}i.icon.send:before{content:"\f1d8"}i.icon.setting:before{content:"\f013"}i.icon.settings:before{content:"\f085"}i.icon.shekel:before{content:"\f20b"}i.icon.sheqel:before{content:"\f20b"}i.icon.shield:before{content:"\f3ed"}i.icon.shipping:before{content:"\f0d1"}i.icon.shop:before{content:"\f07a"}i.icon.shuffle:before{content:"\f074"}i.icon.shutdown:before{content:"\f011"}i.icon.sidebar:before{content:"\f0c9"}i.icon.sign.in:before{content:"\f2f6"}i.icon.sign.out:before{content:"\f2f5"}i.icon.signing:before{content:"\f2a7"}i.icon.signup:before{content:"\f044"}i.icon.sliders:before{content:"\f1de"}i.icon.soccer:before{content:"\f1e3"}i.icon.sort.alphabet.ascending:before{content:"\f15d"}i.icon.sort.alphabet.descending:before{content:"\f15e"}i.icon.sort.ascending:before{content:"\f0de"}i.icon.sort.content.ascending:before{content:"\f160"}i.icon.sort.content.descending:before{content:"\f161"}i.icon.sort.descending:before{content:"\f0dd"}i.icon.sort.numeric.ascending:before{content:"\f162"}i.icon.sort.numeric.descending:before{content:"\f163"}i.icon.sound:before{content:"\f025"}i.icon.spoon:before{content:"\f2e5"}i.icon.spy:before{content:"\f21b"}i.icon.star.empty:before{content:"\f005"}i.icon.star.half.empty:before{content:"\f089"}i.icon.star.half.full:before{content:"\f089"}i.icon.student:before{content:"\f19d"}i.icon.talk:before{content:"\f27a"}i.icon.target:before{content:"\f140"}i.icon.teletype:before{content:"\f1e4"}i.icon.television:before{content:"\f26c"}i.icon.text.cursor:before{content:"\f246"}i.icon.text.telephone:before{content:"\f1e4"}i.icon.theme:before{content:"\f043"}i.icon.thermometer:before{content:"\f2c7"}i.icon.thumb.tack:before{content:"\f08d"}i.icon.ticket:before{content:"\f3ff"}i.icon.time:before{content:"\f017"}i.icon.times.rectangle:before{content:"\f410"}i.icon.tm:before{content:"\f25c"}i.icon.toggle.down:before{content:"\f150"}i.icon.toggle.left:before{content:"\f191"}i.icon.toggle.right:before{content:"\f152"}i.icon.toggle.up:before{content:"\f151"}i.icon.translate:before{content:"\f1ab"}i.icon.travel:before{content:"\f0b1"}i.icon.treatment:before{content:"\f0f1"}i.icon.triangle.down:before{content:"\f0d7"}i.icon.triangle.left:before{content:"\f0d9"}i.icon.triangle.right:before{content:"\f0da"}i.icon.triangle.up:before{content:"\f0d8"}i.icon.try:before{content:"\f195"}i.icon.unhide:before{content:"\f06e"}i.icon.unlinkify:before{content:"\f127"}i.icon.unmute:before{content:"\f130"}i.icon.unordered.list:before{content:"\f0ca"}i.icon.usd:before{content:"\f155"}i.icon.user.cancel:before{content:"\f235"}i.icon.user.close:before{content:"\f235"}i.icon.user.delete:before{content:"\f235"}i.icon.user.doctor:before{content:"\f0f0"}i.icon.user.x:before{content:"\f235"}i.icon.vcard:before{content:"\f2bb"}i.icon.video.camera:before{content:"\f03d"}i.icon.video.play:before{content:"\f144"}i.icon.volume.control.phone:before{content:"\f2a0"}i.icon.wait:before{content:"\f017"}i.icon.warning:before{content:"\f12a"}i.icon.warning.circle:before{content:"\f06a"}i.icon.warning.sign:before{content:"\f071"}i.icon.wi.fi:before{content:"\f1eb"}i.icon.winner:before{content:"\f091"}i.icon.wizard:before{content:"\f0d0"}i.icon.woman:before{content:"\f221"}i.icon.won:before{content:"\f159"}i.icon.world:before{content:"\f0ac"}i.icon.write:before{content:"\f303"}i.icon.write.square:before{content:"\f14b"}i.icon.x:before{content:"\f00d"}i.icon.yen:before{content:"\f157"}i.icon.zip:before{content:"\f187"}i.icon.zoom:before{content:"\f00e"}i.icon.zoom.in:before{content:"\f00e"}i.icon.zoom.out:before{content:"\f010"}@font-face{font-family:outline-icons;src:url(./themes/default/assets/fonts/outline-icons.eot);src:url(./themes/default/assets/fonts/outline-icons.eot?#iefix) format("embedded-opentype"),url(../fonts/outline-icons.c5240512.woff2) format("woff2"),url(./themes/default/assets/fonts/outline-icons.woff) format("woff"),url(./themes/default/assets/fonts/outline-icons.ttf) format("truetype"),url(./themes/default/assets/fonts/outline-icons.svg#icons) format("svg");font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon.outline{font-family:outline-icons}i.icon.address.book.outline:before{content:"\f2b9"}i.icon.address.card.outline:before{content:"\f2bb"}i.icon.angry.outline:before{content:"\f556"}i.icon.arrow.alternate.circle.down.outline:before{content:"\f358"}i.icon.arrow.alternate.circle.left.outline:before{content:"\f359"}i.icon.arrow.alternate.circle.right.outline:before{content:"\f35a"}i.icon.arrow.alternate.circle.up.outline:before{content:"\f35b"}i.icon.bell.outline:before{content:"\f0f3"}i.icon.bell.slash.outline:before{content:"\f1f6"}i.icon.bookmark.outline:before{content:"\f02e"}i.icon.building.outline:before{content:"\f1ad"}i.icon.calendar.alternate.outline:before{content:"\f073"}i.icon.calendar.check.outline:before{content:"\f274"}i.icon.calendar.minus.outline:before{content:"\f272"}i.icon.calendar.outline:before{content:"\f133"}i.icon.calendar.plus.outline:before{content:"\f271"}i.icon.calendar.times.outline:before{content:"\f273"}i.icon.caret.square.down.outline:before{content:"\f150"}i.icon.caret.square.left.outline:before{content:"\f191"}i.icon.caret.square.right.outline:before{content:"\f152"}i.icon.caret.square.up.outline:before{content:"\f151"}i.icon.chart.bar.outline:before{content:"\f080"}i.icon.check.circle.outline:before{content:"\f058"}i.icon.check.square.outline:before{content:"\f14a"}i.icon.circle.outline:before{content:"\f111"}i.icon.clipboard.outline:before{content:"\f328"}i.icon.clock.outline:before{content:"\f017"}i.icon.clone.outline:before{content:"\f24d"}i.icon.closed.captioning.outline:before{content:"\f20a"}i.icon.comment.alternate.outline:before{content:"\f27a"}i.icon.comment.dots.outline:before{content:"\f4ad"}i.icon.comment.outline:before{content:"\f075"}i.icon.comments.outline:before{content:"\f086"}i.icon.compass.outline:before{content:"\f14e"}i.icon.copy.outline:before{content:"\f0c5"}i.icon.copyright.outline:before{content:"\f1f9"}i.icon.credit.card.outline:before{content:"\f09d"}i.icon.dizzy.outline:before{content:"\f567"}i.icon.dot.circle.outline:before{content:"\f192"}i.icon.edit.outline:before{content:"\f044"}i.icon.envelope.open.outline:before{content:"\f2b6"}i.icon.envelope.outline:before{content:"\f0e0"}i.icon.eye.outline:before{content:"\f06e"}i.icon.eye.slash.outline:before{content:"\f070"}i.icon.file.alternate.outline:before{content:"\f15c"}i.icon.file.archive.outline:before{content:"\f1c6"}i.icon.file.audio.outline:before{content:"\f1c7"}i.icon.file.code.outline:before{content:"\f1c9"}i.icon.file.excel.outline:before{content:"\f1c3"}i.icon.file.image.outline:before{content:"\f1c5"}i.icon.file.outline:before{content:"\f15b"}i.icon.file.pdf.outline:before{content:"\f1c1"}i.icon.file.powerpoint.outline:before{content:"\f1c4"}i.icon.file.video.outline:before{content:"\f1c8"}i.icon.file.word.outline:before{content:"\f1c2"}i.icon.flag.outline:before{content:"\f024"}i.icon.flushed.outline:before{content:"\f579"}i.icon.folder.open.outline:before{content:"\f07c"}i.icon.folder.outline:before{content:"\f07b"}i.icon.frown.open.outline:before{content:"\f57a"}i.icon.frown.outline:before{content:"\f119"}i.icon.futbol.outline:before{content:"\f1e3"}i.icon.gem.outline:before{content:"\f3a5"}i.icon.grimace.outline:before{content:"\f57f"}i.icon.grin.alternate.outline:before{content:"\f581"}i.icon.grin.beam.outline:before{content:"\f582"}i.icon.grin.beam.sweat.outline:before{content:"\f583"}i.icon.grin.hearts.outline:before{content:"\f584"}i.icon.grin.outline:before{content:"\f580"}i.icon.grin.squint.outline:before{content:"\f585"}i.icon.grin.squint.tears.outline:before{content:"\f586"}i.icon.grin.stars.outline:before{content:"\f587"}i.icon.grin.tears.outline:before{content:"\f588"}i.icon.grin.tongue.outline:before{content:"\f589"}i.icon.grin.tongue.squint.outline:before{content:"\f58a"}i.icon.grin.tongue.wink.outline:before{content:"\f58b"}i.icon.grin.wink.outline:before{content:"\f58c"}i.icon.hand.lizard.outline:before{content:"\f258"}i.icon.hand.paper.outline:before{content:"\f256"}i.icon.hand.peace.outline:before{content:"\f25b"}i.icon.hand.point.down.outline:before{content:"\f0a7"}i.icon.hand.point.left.outline:before{content:"\f0a5"}i.icon.hand.point.right.outline:before{content:"\f0a4"}i.icon.hand.point.up.outline:before{content:"\f0a6"}i.icon.hand.pointer.outline:before{content:"\f25a"}i.icon.hand.rock.outline:before{content:"\f255"}i.icon.hand.scissors.outline:before{content:"\f257"}i.icon.hand.spock.outline:before{content:"\f259"}i.icon.handshake.outline:before{content:"\f2b5"}i.icon.hdd.outline:before{content:"\f0a0"}i.icon.heart.outline:before{content:"\f004"}i.icon.hospital.outline:before{content:"\f0f8"}i.icon.hourglass.outline:before{content:"\f254"}i.icon.id.badge.outline:before{content:"\f2c1"}i.icon.id.card.outline:before{content:"\f2c2"}i.icon.image.outline:before{content:"\f03e"}i.icon.images.outline:before{content:"\f302"}i.icon.keyboard.outline:before{content:"\f11c"}i.icon.kiss.beam.outline:before{content:"\f597"}i.icon.kiss.outline:before{content:"\f596"}i.icon.kiss.wink.heart.outline:before{content:"\f598"}i.icon.laugh.beam.outline:before{content:"\f59a"}i.icon.laugh.outline:before{content:"\f599"}i.icon.laugh.squint.outline:before{content:"\f59b"}i.icon.laugh.wink.outline:before{content:"\f59c"}i.icon.lemon.outline:before{content:"\f094"}i.icon.life.ring.outline:before{content:"\f1cd"}i.icon.lightbulb.outline:before{content:"\f0eb"}i.icon.list.alternate.outline:before{content:"\f022"}i.icon.map.outline:before{content:"\f279"}i.icon.meh.blank.outline:before{content:"\f5a4"}i.icon.meh.outline:before{content:"\f11a"}i.icon.meh.rolling.eyes.outline:before{content:"\f5a5"}i.icon.minus.square.outline:before{content:"\f146"}i.icon.money.bill.alternate.outline:before{content:"\f3d1"}i.icon.moon.outline:before{content:"\f186"}i.icon.newspaper.outline:before{content:"\f1ea"}i.icon.object.group.outline:before{content:"\f247"}i.icon.object.ungroup.outline:before{content:"\f248"}i.icon.paper.plane.outline:before{content:"\f1d8"}i.icon.pause.circle.outline:before{content:"\f28b"}i.icon.play.circle.outline:before{content:"\f144"}i.icon.plus.square.outline:before{content:"\f0fe"}i.icon.question.circle.outline:before{content:"\f059"}i.icon.registered.outline:before{content:"\f25d"}i.icon.sad.cry.outline:before{content:"\f5b3"}i.icon.sad.tear.outline:before{content:"\f5b4"}i.icon.save.outline:before{content:"\f0c7"}i.icon.share.square.outline:before{content:"\f14d"}i.icon.smile.beam.outline:before{content:"\f5b8"}i.icon.smile.outline:before{content:"\f118"}i.icon.smile.wink.outline:before{content:"\f4da"}i.icon.snowflake.outline:before{content:"\f2dc"}i.icon.square.outline:before{content:"\f0c8"}i.icon.star.half.outline:before{content:"\f089"}i.icon.star.outline:before{content:"\f005"}i.icon.sticky.note.outline:before{content:"\f249"}i.icon.stop.circle.outline:before{content:"\f28d"}i.icon.sun.outline:before{content:"\f185"}i.icon.surprise.outline:before{content:"\f5c2"}i.icon.thumbs.down.outline:before{content:"\f165"}i.icon.thumbs.up.outline:before{content:"\f164"}i.icon.times.circle.outline:before{content:"\f057"}i.icon.tired.outline:before{content:"\f5c8"}i.icon.trash.alternate.outline:before{content:"\f2ed"}i.icon.user.circle.outline:before{content:"\f2bd"}i.icon.user.outline:before{content:"\f007"}i.icon.window.close.outline:before{content:"\f410"}i.icon.window.maximize.outline:before{content:"\f2d0"}i.icon.window.minimize.outline:before{content:"\f2d1"}i.icon.window.restore.outline:before{content:"\f2d2"}@font-face{font-family:brand-icons;src:url(./themes/default/assets/fonts/brand-icons.eot);src:url(./themes/default/assets/fonts/brand-icons.eot?#iefix) format("embedded-opentype"),url(./themes/default/assets/fonts/brand-icons.woff2) format("woff2"),url(./themes/default/assets/fonts/brand-icons.woff) format("woff"),url(./themes/default/assets/fonts/brand-icons.ttf) format("truetype"),url(./themes/default/assets/fonts/brand-icons.svg#icons) format("svg");font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon.\35 00px:before{content:"\f26e";font-family:brand-icons}i.icon.accessible:before{content:"\f368";font-family:brand-icons}i.icon.accusoft:before{content:"\f369";font-family:brand-icons}i.icon.acquisitions.incorporated:before{content:"\f6af";font-family:brand-icons}i.icon.adn:before{content:"\f170";font-family:brand-icons}i.icon.adobe:before{content:"\f778";font-family:brand-icons}i.icon.adversal:before{content:"\f36a";font-family:brand-icons}i.icon.affiliatetheme:before{content:"\f36b";font-family:brand-icons}i.icon.airbnb:before{content:"\f834";font-family:brand-icons}i.icon.algolia:before{content:"\f36c";font-family:brand-icons}i.icon.alipay:before{content:"\f642";font-family:brand-icons}i.icon.amazon:before{content:"\f270";font-family:brand-icons}i.icon.amazon.pay:before{content:"\f42c";font-family:brand-icons}i.icon.amilia:before{content:"\f36d";font-family:brand-icons}i.icon.android:before{content:"\f17b";font-family:brand-icons}i.icon.angellist:before{content:"\f209";font-family:brand-icons}i.icon.angrycreative:before{content:"\f36e";font-family:brand-icons}i.icon.angular:before{content:"\f420";font-family:brand-icons}i.icon.app.store:before{content:"\f36f";font-family:brand-icons}i.icon.app.store.ios:before{content:"\f370";font-family:brand-icons}i.icon.apper:before{content:"\f371";font-family:brand-icons}i.icon.apple:before{content:"\f179";font-family:brand-icons}i.icon.apple.pay:before{content:"\f415";font-family:brand-icons}i.icon.artstation:before{content:"\f77a";font-family:brand-icons}i.icon.asymmetrik:before{content:"\f372";font-family:brand-icons}i.icon.atlassian:before{content:"\f77b";font-family:brand-icons}i.icon.audible:before{content:"\f373";font-family:brand-icons}i.icon.autoprefixer:before{content:"\f41c";font-family:brand-icons}i.icon.avianex:before{content:"\f374";font-family:brand-icons}i.icon.aviato:before{content:"\f421";font-family:brand-icons}i.icon.aws:before{content:"\f375";font-family:brand-icons}i.icon.bandcamp:before{content:"\f2d5";font-family:brand-icons}i.icon.battle.net:before{content:"\f835";font-family:brand-icons}i.icon.behance:before{content:"\f1b4";font-family:brand-icons}i.icon.behance.square:before{content:"\f1b5";font-family:brand-icons}i.icon.bimobject:before{content:"\f378";font-family:brand-icons}i.icon.bitbucket:before{content:"\f171";font-family:brand-icons}i.icon.bitcoin:before{content:"\f379";font-family:brand-icons}i.icon.bity:before{content:"\f37a";font-family:brand-icons}i.icon.black.tie:before{content:"\f27e";font-family:brand-icons}i.icon.blackberry:before{content:"\f37b";font-family:brand-icons}i.icon.blogger:before{content:"\f37c";font-family:brand-icons}i.icon.blogger.b:before{content:"\f37d";font-family:brand-icons}i.icon.bluetooth:before{content:"\f293";font-family:brand-icons}i.icon.bluetooth.b:before{content:"\f294";font-family:brand-icons}i.icon.bootstrap:before{content:"\f836";font-family:brand-icons}i.icon.btc:before{content:"\f15a";font-family:brand-icons}i.icon.buffer:before{content:"\f837";font-family:brand-icons}i.icon.buromobelexperte:before{content:"\f37f";font-family:brand-icons}i.icon.buy.n.large:before{content:"\f8a6";font-family:brand-icons}i.icon.buysellads:before{content:"\f20d";font-family:brand-icons}i.icon.canadian.maple.leaf:before{content:"\f785";font-family:brand-icons}i.icon.cc.amazon.pay:before{content:"\f42d";font-family:brand-icons}i.icon.cc.amex:before{content:"\f1f3";font-family:brand-icons}i.icon.cc.apple.pay:before{content:"\f416";font-family:brand-icons}i.icon.cc.diners.club:before{content:"\f24c";font-family:brand-icons}i.icon.cc.discover:before{content:"\f1f2";font-family:brand-icons}i.icon.cc.jcb:before{content:"\f24b";font-family:brand-icons}i.icon.cc.mastercard:before{content:"\f1f1";font-family:brand-icons}i.icon.cc.paypal:before{content:"\f1f4";font-family:brand-icons}i.icon.cc.stripe:before{content:"\f1f5";font-family:brand-icons}i.icon.cc.visa:before{content:"\f1f0";font-family:brand-icons}i.icon.centercode:before{content:"\f380";font-family:brand-icons}i.icon.centos:before{content:"\f789";font-family:brand-icons}i.icon.chrome:before{content:"\f268";font-family:brand-icons}i.icon.chromecast:before{content:"\f838";font-family:brand-icons}i.icon.cloudscale:before{content:"\f383";font-family:brand-icons}i.icon.cloudsmith:before{content:"\f384";font-family:brand-icons}i.icon.cloudversify:before{content:"\f385";font-family:brand-icons}i.icon.codepen:before{content:"\f1cb";font-family:brand-icons}i.icon.codiepie:before{content:"\f284";font-family:brand-icons}i.icon.confluence:before{content:"\f78d";font-family:brand-icons}i.icon.connectdevelop:before{content:"\f20e";font-family:brand-icons}i.icon.contao:before{content:"\f26d";font-family:brand-icons}i.icon.cotton.bureau:before{content:"\f89e";font-family:brand-icons}i.icon.cpanel:before{content:"\f388";font-family:brand-icons}i.icon.creative.commons:before{content:"\f25e";font-family:brand-icons}i.icon.creative.commons.by:before{content:"\f4e7";font-family:brand-icons}i.icon.creative.commons.nc:before{content:"\f4e8";font-family:brand-icons}i.icon.creative.commons.nc.eu:before{content:"\f4e9";font-family:brand-icons}i.icon.creative.commons.nc.jp:before{content:"\f4ea";font-family:brand-icons}i.icon.creative.commons.nd:before{content:"\f4eb";font-family:brand-icons}i.icon.creative.commons.pd:before{content:"\f4ec";font-family:brand-icons}i.icon.creative.commons.pd.alternate:before{content:"\f4ed";font-family:brand-icons}i.icon.creative.commons.remix:before{content:"\f4ee";font-family:brand-icons}i.icon.creative.commons.sa:before{content:"\f4ef";font-family:brand-icons}i.icon.creative.commons.sampling:before{content:"\f4f0";font-family:brand-icons}i.icon.creative.commons.sampling.plus:before{content:"\f4f1";font-family:brand-icons}i.icon.creative.commons.share:before{content:"\f4f2";font-family:brand-icons}i.icon.creative.commons.zero:before{content:"\f4f3";font-family:brand-icons}i.icon.critical.role:before{content:"\f6c9";font-family:brand-icons}i.icon.css3:before{content:"\f13c";font-family:brand-icons}i.icon.css3.alternate:before{content:"\f38b";font-family:brand-icons}i.icon.cuttlefish:before{content:"\f38c";font-family:brand-icons}i.icon.d.and.d:before{content:"\f38d";font-family:brand-icons}i.icon.d.and.d.beyond:before{content:"\f6ca";font-family:brand-icons}i.icon.dailymotion:before{content:"\f952";font-family:brand-icons}i.icon.dashcube:before{content:"\f210";font-family:brand-icons}i.icon.delicious:before{content:"\f1a5";font-family:brand-icons}i.icon.deploydog:before{content:"\f38e";font-family:brand-icons}i.icon.deskpro:before{content:"\f38f";font-family:brand-icons}i.icon.dev:before{content:"\f6cc";font-family:brand-icons}i.icon.deviantart:before{content:"\f1bd";font-family:brand-icons}i.icon.dhl:before{content:"\f790";font-family:brand-icons}i.icon.diaspora:before{content:"\f791";font-family:brand-icons}i.icon.digg:before{content:"\f1a6";font-family:brand-icons}i.icon.digital.ocean:before{content:"\f391";font-family:brand-icons}i.icon.discord:before{content:"\f392";font-family:brand-icons}i.icon.discourse:before{content:"\f393";font-family:brand-icons}i.icon.dochub:before{content:"\f394";font-family:brand-icons}i.icon.docker:before{content:"\f395";font-family:brand-icons}i.icon.draft2digital:before{content:"\f396";font-family:brand-icons}i.icon.dribbble:before{content:"\f17d";font-family:brand-icons}i.icon.dribbble.square:before{content:"\f397";font-family:brand-icons}i.icon.dropbox:before{content:"\f16b";font-family:brand-icons}i.icon.drupal:before{content:"\f1a9";font-family:brand-icons}i.icon.dyalog:before{content:"\f399";font-family:brand-icons}i.icon.earlybirds:before{content:"\f39a";font-family:brand-icons}i.icon.ebay:before{content:"\f4f4";font-family:brand-icons}i.icon.edge:before{content:"\f282";font-family:brand-icons}i.icon.elementor:before{content:"\f430";font-family:brand-icons}i.icon.ello:before{content:"\f5f1";font-family:brand-icons}i.icon.ember:before{content:"\f423";font-family:brand-icons}i.icon.empire:before{content:"\f1d1";font-family:brand-icons}i.icon.envira:before{content:"\f299";font-family:brand-icons}i.icon.erlang:before{content:"\f39d";font-family:brand-icons}i.icon.ethereum:before{content:"\f42e";font-family:brand-icons}i.icon.etsy:before{content:"\f2d7";font-family:brand-icons}i.icon.evernote:before{content:"\f839";font-family:brand-icons}i.icon.expeditedssl:before{content:"\f23e";font-family:brand-icons}i.icon.facebook:before{content:"\f09a";font-family:brand-icons}i.icon.facebook.f:before{content:"\f39e";font-family:brand-icons}i.icon.facebook.messenger:before{content:"\f39f";font-family:brand-icons}i.icon.facebook.square:before{content:"\f082";font-family:brand-icons}i.icon.fantasy.flight.games:before{content:"\f6dc";font-family:brand-icons}i.icon.fedex:before{content:"\f797";font-family:brand-icons}i.icon.fedora:before{content:"\f798";font-family:brand-icons}i.icon.figma:before{content:"\f799";font-family:brand-icons}i.icon.firefox:before{content:"\f269";font-family:brand-icons}i.icon.firefox.browser:before{content:"\f907";font-family:brand-icons}i.icon.first.order:before{content:"\f2b0";font-family:brand-icons}i.icon.first.order.alternate:before{content:"\f50a";font-family:brand-icons}i.icon.firstdraft:before{content:"\f3a1";font-family:brand-icons}i.icon.flickr:before{content:"\f16e";font-family:brand-icons}i.icon.flipboard:before{content:"\f44d";font-family:brand-icons}i.icon.fly:before{content:"\f417";font-family:brand-icons}i.icon.font.awesome:before{content:"\f2b4";font-family:brand-icons}i.icon.font.awesome.alternate:before{content:"\f35c";font-family:brand-icons}i.icon.font.awesome.flag:before{content:"\f425";font-family:brand-icons}i.icon.fonticons:before{content:"\f280";font-family:brand-icons}i.icon.fonticons.fi:before{content:"\f3a2";font-family:brand-icons}i.icon.fort.awesome:before{content:"\f286";font-family:brand-icons}i.icon.fort.awesome.alternate:before{content:"\f3a3";font-family:brand-icons}i.icon.forumbee:before{content:"\f211";font-family:brand-icons}i.icon.foursquare:before{content:"\f180";font-family:brand-icons}i.icon.free.code.camp:before{content:"\f2c5";font-family:brand-icons}i.icon.freebsd:before{content:"\f3a4";font-family:brand-icons}i.icon.fulcrum:before{content:"\f50b";font-family:brand-icons}i.icon.galactic.republic:before{content:"\f50c";font-family:brand-icons}i.icon.galactic.senate:before{content:"\f50d";font-family:brand-icons}i.icon.get.pocket:before{content:"\f265";font-family:brand-icons}i.icon.gg:before{content:"\f260";font-family:brand-icons}i.icon.gg.circle:before{content:"\f261";font-family:brand-icons}i.icon.git:before{content:"\f1d3";font-family:brand-icons}i.icon.git.alternate:before{content:"\f841";font-family:brand-icons}i.icon.git.square:before{content:"\f1d2";font-family:brand-icons}i.icon.github:before{content:"\f09b";font-family:brand-icons}i.icon.github.alternate:before{content:"\f113";font-family:brand-icons}i.icon.github.square:before{content:"\f092";font-family:brand-icons}i.icon.gitkraken:before{content:"\f3a6";font-family:brand-icons}i.icon.gitlab:before{content:"\f296";font-family:brand-icons}i.icon.gitter:before{content:"\f426";font-family:brand-icons}i.icon.glide:before{content:"\f2a5";font-family:brand-icons}i.icon.glide.g:before{content:"\f2a6";font-family:brand-icons}i.icon.gofore:before{content:"\f3a7";font-family:brand-icons}i.icon.goodreads:before{content:"\f3a8";font-family:brand-icons}i.icon.goodreads.g:before{content:"\f3a9";font-family:brand-icons}i.icon.google:before{content:"\f1a0";font-family:brand-icons}i.icon.google.drive:before{content:"\f3aa";font-family:brand-icons}i.icon.google.play:before{content:"\f3ab";font-family:brand-icons}i.icon.google.plus:before{content:"\f2b3";font-family:brand-icons}i.icon.google.plus.g:before{content:"\f0d5";font-family:brand-icons}i.icon.google.plus.square:before{content:"\f0d4";font-family:brand-icons}i.icon.google.wallet:before{content:"\f1ee";font-family:brand-icons}i.icon.gratipay:before{content:"\f184";font-family:brand-icons}i.icon.grav:before{content:"\f2d6";font-family:brand-icons}i.icon.gripfire:before{content:"\f3ac";font-family:brand-icons}i.icon.grunt:before{content:"\f3ad";font-family:brand-icons}i.icon.gulp:before{content:"\f3ae";font-family:brand-icons}i.icon.hacker.news:before{content:"\f1d4";font-family:brand-icons}i.icon.hacker.news.square:before{content:"\f3af";font-family:brand-icons}i.icon.hackerrank:before{content:"\f5f7";font-family:brand-icons}i.icon.hips:before{content:"\f452";font-family:brand-icons}i.icon.hire.a.helper:before{content:"\f3b0";font-family:brand-icons}i.icon.hooli:before{content:"\f427";font-family:brand-icons}i.icon.hornbill:before{content:"\f592";font-family:brand-icons}i.icon.hotjar:before{content:"\f3b1";font-family:brand-icons}i.icon.houzz:before{content:"\f27c";font-family:brand-icons}i.icon.html5:before{content:"\f13b";font-family:brand-icons}i.icon.hubspot:before{content:"\f3b2";font-family:brand-icons}i.icon.ideal:before{content:"\f913";font-family:brand-icons}i.icon.imdb:before{content:"\f2d8";font-family:brand-icons}i.icon.instagram:before{content:"\f16d";font-family:brand-icons}i.icon.instagram.square:before{content:"\f955";font-family:brand-icons}i.icon.intercom:before{content:"\f7af";font-family:brand-icons}i.icon.internet.explorer:before{content:"\f26b";font-family:brand-icons}i.icon.invision:before{content:"\f7b0";font-family:brand-icons}i.icon.ioxhost:before{content:"\f208";font-family:brand-icons}i.icon.itch.io:before{content:"\f83a";font-family:brand-icons}i.icon.itunes:before{content:"\f3b4";font-family:brand-icons}i.icon.itunes.note:before{content:"\f3b5";font-family:brand-icons}i.icon.java:before{content:"\f4e4";font-family:brand-icons}i.icon.jedi.order:before{content:"\f50e";font-family:brand-icons}i.icon.jenkins:before{content:"\f3b6";font-family:brand-icons}i.icon.jira:before{content:"\f7b1";font-family:brand-icons}i.icon.joget:before{content:"\f3b7";font-family:brand-icons}i.icon.joomla:before{content:"\f1aa";font-family:brand-icons}i.icon.js:before{content:"\f3b8";font-family:brand-icons}i.icon.js.square:before{content:"\f3b9";font-family:brand-icons}i.icon.jsfiddle:before{content:"\f1cc";font-family:brand-icons}i.icon.kaggle:before{content:"\f5fa";font-family:brand-icons}i.icon.keybase:before{content:"\f4f5";font-family:brand-icons}i.icon.keycdn:before{content:"\f3ba";font-family:brand-icons}i.icon.kickstarter:before{content:"\f3bb";font-family:brand-icons}i.icon.kickstarter.k:before{content:"\f3bc";font-family:brand-icons}i.icon.korvue:before{content:"\f42f";font-family:brand-icons}i.icon.laravel:before{content:"\f3bd";font-family:brand-icons}i.icon.lastfm:before{content:"\f202";font-family:brand-icons}i.icon.lastfm.square:before{content:"\f203";font-family:brand-icons}i.icon.leanpub:before{content:"\f212";font-family:brand-icons}i.icon.lesscss:before{content:"\f41d";font-family:brand-icons}i.icon.linechat:before{content:"\f3c0";font-family:brand-icons}i.icon.linkedin:before{content:"\f08c";font-family:brand-icons}i.icon.linkedin.in:before{content:"\f0e1";font-family:brand-icons}i.icon.linode:before{content:"\f2b8";font-family:brand-icons}i.icon.linux:before{content:"\f17c";font-family:brand-icons}i.icon.lyft:before{content:"\f3c3";font-family:brand-icons}i.icon.magento:before{content:"\f3c4";font-family:brand-icons}i.icon.mailchimp:before{content:"\f59e";font-family:brand-icons}i.icon.mandalorian:before{content:"\f50f";font-family:brand-icons}i.icon.markdown:before{content:"\f60f";font-family:brand-icons}i.icon.mastodon:before{content:"\f4f6";font-family:brand-icons}i.icon.maxcdn:before{content:"\f136";font-family:brand-icons}i.icon.mdb:before{content:"\f8ca";font-family:brand-icons}i.icon.medapps:before{content:"\f3c6";font-family:brand-icons}i.icon.medium:before{content:"\f23a";font-family:brand-icons}i.icon.medium.m:before{content:"\f3c7";font-family:brand-icons}i.icon.medrt:before{content:"\f3c8";font-family:brand-icons}i.icon.meetup:before{content:"\f2e0";font-family:brand-icons}i.icon.megaport:before{content:"\f5a3";font-family:brand-icons}i.icon.mendeley:before{content:"\f7b3";font-family:brand-icons}i.icon.microblog:before{content:"\f91a";font-family:brand-icons}i.icon.microsoft:before{content:"\f3ca";font-family:brand-icons}i.icon.mix:before{content:"\f3cb";font-family:brand-icons}i.icon.mixcloud:before{content:"\f289";font-family:brand-icons}i.icon.mixer:before{content:"\f956";font-family:brand-icons}i.icon.mizuni:before{content:"\f3cc";font-family:brand-icons}i.icon.modx:before{content:"\f285";font-family:brand-icons}i.icon.monero:before{content:"\f3d0";font-family:brand-icons}i.icon.napster:before{content:"\f3d2";font-family:brand-icons}i.icon.neos:before{content:"\f612";font-family:brand-icons}i.icon.nimblr:before{content:"\f5a8";font-family:brand-icons}i.icon.node:before{content:"\f419";font-family:brand-icons}i.icon.node.js:before{content:"\f3d3";font-family:brand-icons}i.icon.npm:before{content:"\f3d4";font-family:brand-icons}i.icon.ns8:before{content:"\f3d5";font-family:brand-icons}i.icon.nutritionix:before{content:"\f3d6";font-family:brand-icons}i.icon.odnoklassniki:before{content:"\f263";font-family:brand-icons}i.icon.odnoklassniki.square:before{content:"\f264";font-family:brand-icons}i.icon.old.republic:before{content:"\f510";font-family:brand-icons}i.icon.opencart:before{content:"\f23d";font-family:brand-icons}i.icon.openid:before{content:"\f19b";font-family:brand-icons}i.icon.opera:before{content:"\f26a";font-family:brand-icons}i.icon.optin.monster:before{content:"\f23c";font-family:brand-icons}i.icon.orcid:before{content:"\f8d2";font-family:brand-icons}i.icon.osi:before{content:"\f41a";font-family:brand-icons}i.icon.page4:before{content:"\f3d7";font-family:brand-icons}i.icon.pagelines:before{content:"\f18c";font-family:brand-icons}i.icon.palfed:before{content:"\f3d8";font-family:brand-icons}i.icon.patreon:before{content:"\f3d9";font-family:brand-icons}i.icon.paypal:before{content:"\f1ed";font-family:brand-icons}i.icon.penny.arcade:before{content:"\f704";font-family:brand-icons}i.icon.periscope:before{content:"\f3da";font-family:brand-icons}i.icon.phabricator:before{content:"\f3db";font-family:brand-icons}i.icon.phoenix.framework:before{content:"\f3dc";font-family:brand-icons}i.icon.phoenix.squadron:before{content:"\f511";font-family:brand-icons}i.icon.php:before{content:"\f457";font-family:brand-icons}i.icon.pied.piper:before{content:"\f2ae";font-family:brand-icons}i.icon.pied.piper.alternate:before{content:"\f1a8";font-family:brand-icons}i.icon.pied.piper.hat:before{content:"\f4e5";font-family:brand-icons}i.icon.pied.piper.pp:before{content:"\f1a7";font-family:brand-icons}i.icon.pied.piper.square:before{content:"\f91e";font-family:brand-icons}i.icon.pinterest:before{content:"\f0d2";font-family:brand-icons}i.icon.pinterest.p:before{content:"\f231";font-family:brand-icons}i.icon.pinterest.square:before{content:"\f0d3";font-family:brand-icons}i.icon.playstation:before{content:"\f3df";font-family:brand-icons}i.icon.product.hunt:before{content:"\f288";font-family:brand-icons}i.icon.pushed:before{content:"\f3e1";font-family:brand-icons}i.icon.python:before{content:"\f3e2";font-family:brand-icons}i.icon.qq:before{content:"\f1d6";font-family:brand-icons}i.icon.quinscape:before{content:"\f459";font-family:brand-icons}i.icon.quora:before{content:"\f2c4";font-family:brand-icons}i.icon.r.project:before{content:"\f4f7";font-family:brand-icons}i.icon.raspberry.pi:before{content:"\f7bb";font-family:brand-icons}i.icon.ravelry:before{content:"\f2d9";font-family:brand-icons}i.icon.react:before{content:"\f41b";font-family:brand-icons}i.icon.reacteurope:before{content:"\f75d";font-family:brand-icons}i.icon.readme:before{content:"\f4d5";font-family:brand-icons}i.icon.rebel:before{content:"\f1d0";font-family:brand-icons}i.icon.reddit:before{content:"\f1a1";font-family:brand-icons}i.icon.reddit.alien:before{content:"\f281";font-family:brand-icons}i.icon.reddit.square:before{content:"\f1a2";font-family:brand-icons}i.icon.redhat:before{content:"\f7bc";font-family:brand-icons}i.icon.redriver:before{content:"\f3e3";font-family:brand-icons}i.icon.redyeti:before{content:"\f69d";font-family:brand-icons}i.icon.renren:before{content:"\f18b";font-family:brand-icons}i.icon.replyd:before{content:"\f3e6";font-family:brand-icons}i.icon.researchgate:before{content:"\f4f8";font-family:brand-icons}i.icon.resolving:before{content:"\f3e7";font-family:brand-icons}i.icon.rev:before{content:"\f5b2";font-family:brand-icons}i.icon.rocketchat:before{content:"\f3e8";font-family:brand-icons}i.icon.rockrms:before{content:"\f3e9";font-family:brand-icons}i.icon.safari:before{content:"\f267";font-family:brand-icons}i.icon.salesforce:before{content:"\f83b";font-family:brand-icons}i.icon.sass:before{content:"\f41e";font-family:brand-icons}i.icon.schlix:before{content:"\f3ea";font-family:brand-icons}i.icon.scribd:before{content:"\f28a";font-family:brand-icons}i.icon.searchengin:before{content:"\f3eb";font-family:brand-icons}i.icon.sellcast:before{content:"\f2da";font-family:brand-icons}i.icon.sellsy:before{content:"\f213";font-family:brand-icons}i.icon.servicestack:before{content:"\f3ec";font-family:brand-icons}i.icon.shirtsinbulk:before{content:"\f214";font-family:brand-icons}i.icon.shopify:before{content:"\f957";font-family:brand-icons}i.icon.shopware:before{content:"\f5b5";font-family:brand-icons}i.icon.simplybuilt:before{content:"\f215";font-family:brand-icons}i.icon.sistrix:before{content:"\f3ee";font-family:brand-icons}i.icon.sith:before{content:"\f512";font-family:brand-icons}i.icon.sketch:before{content:"\f7c6";font-family:brand-icons}i.icon.skyatlas:before{content:"\f216";font-family:brand-icons}i.icon.skype:before{content:"\f17e";font-family:brand-icons}i.icon.slack:before{content:"\f198";font-family:brand-icons}i.icon.slack.hash:before{content:"\f3ef";font-family:brand-icons}i.icon.slideshare:before{content:"\f1e7";font-family:brand-icons}i.icon.snapchat:before{content:"\f2ab";font-family:brand-icons}i.icon.snapchat.ghost:before{content:"\f2ac";font-family:brand-icons}i.icon.snapchat.square:before{content:"\f2ad";font-family:brand-icons}i.icon.soundcloud:before{content:"\f1be";font-family:brand-icons}i.icon.sourcetree:before{content:"\f7d3";font-family:brand-icons}i.icon.speakap:before{content:"\f3f3";font-family:brand-icons}i.icon.speaker.deck:before{content:"\f83c";font-family:brand-icons}i.icon.spotify:before{content:"\f1bc";font-family:brand-icons}i.icon.squarespace:before{content:"\f5be";font-family:brand-icons}i.icon.stack.exchange:before{content:"\f18d";font-family:brand-icons}i.icon.stack.overflow:before{content:"\f16c";font-family:brand-icons}i.icon.stackpath:before{content:"\f842";font-family:brand-icons}i.icon.staylinked:before{content:"\f3f5";font-family:brand-icons}i.icon.steam:before{content:"\f1b6";font-family:brand-icons}i.icon.steam.square:before{content:"\f1b7";font-family:brand-icons}i.icon.steam.symbol:before{content:"\f3f6";font-family:brand-icons}i.icon.sticker.mule:before{content:"\f3f7";font-family:brand-icons}i.icon.strava:before{content:"\f428";font-family:brand-icons}i.icon.stripe:before{content:"\f429";font-family:brand-icons}i.icon.stripe.s:before{content:"\f42a";font-family:brand-icons}i.icon.studiovinari:before{content:"\f3f8";font-family:brand-icons}i.icon.stumbleupon:before{content:"\f1a4";font-family:brand-icons}i.icon.stumbleupon.circle:before{content:"\f1a3";font-family:brand-icons}i.icon.superpowers:before{content:"\f2dd";font-family:brand-icons}i.icon.supple:before{content:"\f3f9";font-family:brand-icons}i.icon.suse:before{content:"\f7d6";font-family:brand-icons}i.icon.swift:before{content:"\f8e1";font-family:brand-icons}i.icon.symfony:before{content:"\f83d";font-family:brand-icons}i.icon.teamspeak:before{content:"\f4f9";font-family:brand-icons}i.icon.telegram:before{content:"\f2c6";font-family:brand-icons}i.icon.telegram.plane:before{content:"\f3fe";font-family:brand-icons}i.icon.tencent.weibo:before{content:"\f1d5";font-family:brand-icons}i.icon.themeco:before{content:"\f5c6";font-family:brand-icons}i.icon.themeisle:before{content:"\f2b2";font-family:brand-icons}i.icon.think.peaks:before{content:"\f731";font-family:brand-icons}i.icon.trade.federation:before{content:"\f513";font-family:brand-icons}i.icon.trello:before{content:"\f181";font-family:brand-icons}i.icon.tripadvisor:before{content:"\f262";font-family:brand-icons}i.icon.tumblr:before{content:"\f173";font-family:brand-icons}i.icon.tumblr.square:before{content:"\f174";font-family:brand-icons}i.icon.twitch:before{content:"\f1e8";font-family:brand-icons}i.icon.twitter:before{content:"\f099";font-family:brand-icons}i.icon.twitter.square:before{content:"\f081";font-family:brand-icons}i.icon.typo3:before{content:"\f42b";font-family:brand-icons}i.icon.uber:before{content:"\f402";font-family:brand-icons}i.icon.ubuntu:before{content:"\f7df";font-family:brand-icons}i.icon.uikit:before{content:"\f403";font-family:brand-icons}i.icon.umbraco:before{content:"\f8e8";font-family:brand-icons}i.icon.uniregistry:before{content:"\f404";font-family:brand-icons}i.icon.unity:before{content:"\f949";font-family:brand-icons}i.icon.untappd:before{content:"\f405";font-family:brand-icons}i.icon.ups:before{content:"\f7e0";font-family:brand-icons}i.icon.usb:before{content:"\f287";font-family:brand-icons}i.icon.usps:before{content:"\f7e1";font-family:brand-icons}i.icon.ussunnah:before{content:"\f407";font-family:brand-icons}i.icon.vaadin:before{content:"\f408";font-family:brand-icons}i.icon.viacoin:before{content:"\f237";font-family:brand-icons}i.icon.viadeo:before{content:"\f2a9";font-family:brand-icons}i.icon.viadeo.square:before{content:"\f2aa";font-family:brand-icons}i.icon.viber:before{content:"\f409";font-family:brand-icons}i.icon.vimeo:before{content:"\f40a";font-family:brand-icons}i.icon.vimeo.square:before{content:"\f194";font-family:brand-icons}i.icon.vimeo.v:before{content:"\f27d";font-family:brand-icons}i.icon.vine:before{content:"\f1ca";font-family:brand-icons}i.icon.vk:before{content:"\f189";font-family:brand-icons}i.icon.vnv:before{content:"\f40b";font-family:brand-icons}i.icon.vuejs:before{content:"\f41f";font-family:brand-icons}i.icon.waze:before{content:"\f83f";font-family:brand-icons}i.icon.weebly:before{content:"\f5cc";font-family:brand-icons}i.icon.weibo:before{content:"\f18a";font-family:brand-icons}i.icon.weixin:before{content:"\f1d7";font-family:brand-icons}i.icon.whatsapp:before{content:"\f232";font-family:brand-icons}i.icon.whatsapp.square:before{content:"\f40c";font-family:brand-icons}i.icon.whmcs:before{content:"\f40d";font-family:brand-icons}i.icon.wikipedia.w:before{content:"\f266";font-family:brand-icons}i.icon.windows:before{content:"\f17a";font-family:brand-icons}i.icon.wix:before{content:"\f5cf";font-family:brand-icons}i.icon.wizards.of.the.coast:before{content:"\f730";font-family:brand-icons}i.icon.wolf.pack.battalion:before{content:"\f514";font-family:brand-icons}i.icon.wordpress:before{content:"\f19a";font-family:brand-icons}i.icon.wordpress.simple:before{content:"\f411";font-family:brand-icons}i.icon.wpbeginner:before{content:"\f297";font-family:brand-icons}i.icon.wpexplorer:before{content:"\f2de";font-family:brand-icons}i.icon.wpforms:before{content:"\f298";font-family:brand-icons}i.icon.wpressr:before{content:"\f3e4";font-family:brand-icons}i.icon.xbox:before{content:"\f412";font-family:brand-icons}i.icon.xing:before{content:"\f168";font-family:brand-icons}i.icon.xing.square:before{content:"\f169";font-family:brand-icons}i.icon.y.combinator:before{content:"\f23b";font-family:brand-icons}i.icon.yahoo:before{content:"\f19e";font-family:brand-icons}i.icon.yammer:before{content:"\f840";font-family:brand-icons}i.icon.yandex:before{content:"\f413";font-family:brand-icons}i.icon.yandex.international:before{content:"\f414";font-family:brand-icons}i.icon.yarn:before{content:"\f7e3";font-family:brand-icons}i.icon.yelp:before{content:"\f1e9";font-family:brand-icons}i.icon.yoast:before{content:"\f2b1";font-family:brand-icons}i.icon.youtube:before{content:"\f167";font-family:brand-icons}i.icon.youtube.square:before{content:"\f431";font-family:brand-icons}i.icon.zhihu:before{content:"\f63f";font-family:brand-icons}i.icon.american.express:before{content:"\f1f3";font-family:brand-icons}i.icon.american.express.card:before{content:"\f1f3";font-family:brand-icons}i.icon.amex:before{content:"\f1f3";font-family:brand-icons}i.icon.bitbucket.square:before{content:"\f171";font-family:brand-icons}i.icon.bluetooth.alternative:before{content:"\f294";font-family:brand-icons}i.icon.credit.card.amazon.pay:before{content:"\f42d";font-family:brand-icons}i.icon.credit.card.american.express:before{content:"\f1f3";font-family:brand-icons}i.icon.credit.card.diners.club:before{content:"\f24c";font-family:brand-icons}i.icon.credit.card.discover:before{content:"\f1f2";font-family:brand-icons}i.icon.credit.card.jcb:before{content:"\f24b";font-family:brand-icons}i.icon.credit.card.mastercard:before{content:"\f1f1";font-family:brand-icons}i.icon.credit.card.paypal:before{content:"\f1f4";font-family:brand-icons}i.icon.credit.card.stripe:before{content:"\f1f5";font-family:brand-icons}i.icon.credit.card.visa:before{content:"\f1f0";font-family:brand-icons}i.icon.diners.club:before{content:"\f24c";font-family:brand-icons}i.icon.diners.club.card:before{content:"\f24c";font-family:brand-icons}i.icon.discover:before{content:"\f1f2";font-family:brand-icons}i.icon.discover.card:before{content:"\f1f2";font-family:brand-icons}i.icon.disk.outline:before{content:"\f369";font-family:brand-icons}i.icon.dribble:before{content:"\f17d";font-family:brand-icons}i.icon.eercast:before{content:"\f2da";font-family:brand-icons}i.icon.envira.gallery:before{content:"\f299";font-family:brand-icons}i.icon.fa:before{content:"\f2b4";font-family:brand-icons}i.icon.facebook.official:before{content:"\f082";font-family:brand-icons}i.icon.five.hundred.pixels:before{content:"\f26e";font-family:brand-icons}i.icon.gittip:before{content:"\f184";font-family:brand-icons}i.icon.google.plus.circle:before{content:"\f2b3";font-family:brand-icons}i.icon.google.plus.official:before{content:"\f2b3";font-family:brand-icons}i.icon.japan.credit.bureau:before{content:"\f24b";font-family:brand-icons}i.icon.japan.credit.bureau.card:before{content:"\f24b";font-family:brand-icons}i.icon.jcb:before{content:"\f24b";font-family:brand-icons}i.icon.linkedin.square:before{content:"\f08c";font-family:brand-icons}i.icon.mastercard:before{content:"\f1f1";font-family:brand-icons}i.icon.mastercard.card:before{content:"\f1f1";font-family:brand-icons}i.icon.microsoft.edge:before{content:"\f282";font-family:brand-icons}i.icon.ms.edge:before{content:"\f282";font-family:brand-icons}i.icon.new.pied.piper:before{content:"\f2ae";font-family:brand-icons}i.icon.optinmonster:before{content:"\f23c";font-family:brand-icons}i.icon.paypal.card:before{content:"\f1f4";font-family:brand-icons}i.icon.pied.piper.hat:before{content:"\f2ae";font-family:brand-icons}i.icon.pocket:before{content:"\f265";font-family:brand-icons}i.icon.stripe.card:before{content:"\f1f5";font-family:brand-icons}i.icon.theme.isle:before{content:"\f2b2";font-family:brand-icons}i.icon.visa:before{content:"\f1f0";font-family:brand-icons}i.icon.visa.card:before{content:"\f1f0";font-family:brand-icons}i.icon.wechat:before{content:"\f1d7";font-family:brand-icons}i.icon.wikipedia:before{content:"\f266";font-family:brand-icons}i.icon.wordpress.beginner:before{content:"\f297";font-family:brand-icons}i.icon.wordpress.forms:before{content:"\f298";font-family:brand-icons}i.icon.yc:before{content:"\f23b";font-family:brand-icons}i.icon.ycombinator:before{content:"\f23b";font-family:brand-icons}i.icon.youtube.play:before{content:"\f167";font-family:brand-icons}.ui.image{position:relative;display:inline-block;vertical-align:middle;max-width:100%;background-color:transparent}img.ui.image{display:block}.ui.image svg,.ui.image img{display:block;max-width:100%;height:auto}.ui.hidden.images,.ui.ui.hidden.image{display:none}.ui.hidden.transition.images,.ui.hidden.transition.image{display:block;visibility:hidden}.ui.images>.hidden.transition{display:inline-block;visibility:hidden}.ui.disabled.images,.ui.disabled.image{cursor:default;opacity:var(--opacity-disabled)}.ui.inline.image,.ui.inline.image svg,.ui.inline.image img{display:inline-block}.ui.top.aligned.image,.ui.top.aligned.image svg,.ui.top.aligned.image img{display:inline-block;vertical-align:top}.ui.middle.aligned.image,.ui.middle.aligned.image svg,.ui.middle.aligned.image img{display:inline-block;vertical-align:middle}.ui.bottom.aligned.image,.ui.bottom.aligned.image svg,.ui.bottom.aligned.image img{display:inline-block;vertical-align:bottom}.ui.top.aligned.images .image,.ui.images .ui.top.aligned.image{align-self:flex-start}.ui.middle.aligned.images .image,.ui.images .ui.middle.aligned.image{align-self:center}.ui.bottom.aligned.images .image,.ui.images .ui.bottom.aligned.image{align-self:flex-end}.ui.rounded.images .image,.ui.rounded.image,.ui.rounded.images .image>*,.ui.rounded.image>*{border-radius:.3125em}.ui.bordered.images .image,.ui.bordered.images img,.ui.bordered.images svg,.ui.bordered.image img,.ui.bordered.image svg,img.ui.bordered.image{border:1px solid rgba(0,0,0,.1)}.ui.circular.images,.ui.circular.image{overflow:hidden}.ui.circular.images .image,.ui.circular.image,.ui.circular.images .image>*,.ui.circular.image>*{border-radius:500rem}.ui.fluid.images,.ui.fluid.image,.ui.fluid.images img,.ui.fluid.images svg,.ui.fluid.image svg,.ui.fluid.image img{display:block;width:100%;height:auto}.ui.avatar.images .image,.ui.avatar.images img,.ui.avatar.images svg,.ui.avatar.image img,.ui.avatar.image svg,.ui.avatar.image{margin-right:.25em;display:inline-block;width:2em;height:2em;border-radius:500rem}.ui.spaced.image{display:inline-block!important;margin-left:.5em;margin-right:.5em}.ui[class*="left spaced"].image{margin-left:.5em;margin-right:0}.ui[class*="right spaced"].image{margin-left:0;margin-right:.5em}.ui.floated.image,.ui.floated.images{float:left;margin-right:1em;margin-bottom:1em}.ui.right.floated.images,.ui.right.floated.image{float:right;margin-right:0;margin-bottom:1em;margin-left:1em}.ui.floated.images:last-child,.ui.floated.image:last-child{margin-bottom:0}.ui.centered.image{display:block;margin-left:auto;margin-right:auto}.ui.centered.images{display:flex;flex-direction:row;flex-wrap:wrap;align-items:stretch;justify-content:center}.ui.medium.images .image,.ui.medium.images img,.ui.medium.images svg,.ui.medium.image{width:300px;height:auto;font-size:1rem}.ui.mini.images .image,.ui.mini.images img,.ui.mini.images svg,.ui.mini.image{width:35px;height:auto;font-size:.78571429rem}.ui.tiny.images .image,.ui.tiny.images img,.ui.tiny.images svg,.ui.tiny.image{width:80px;height:auto;font-size:.85714286rem}.ui.small.images .image,.ui.small.images img,.ui.small.images svg,.ui.small.image{width:150px;height:auto;font-size:.92857143rem}.ui.large.images .image,.ui.large.images img,.ui.large.images svg,.ui.large.image{width:450px;height:auto;font-size:1.14285714rem}.ui.big.images .image,.ui.big.images img,.ui.big.images svg,.ui.big.image{width:600px;height:auto;font-size:1.28571429rem}.ui.huge.images .image,.ui.huge.images img,.ui.huge.images svg,.ui.huge.image{width:800px;height:auto;font-size:1.42857143rem}.ui.massive.images .image,.ui.massive.images img,.ui.massive.images svg,.ui.massive.image{width:960px;height:auto;font-size:1.71428571rem}.ui.images{font-size:0;margin:0 -.25rem}.ui.images .image,.ui.images>img,.ui.images>svg{display:inline-block;margin:0 .25rem .5rem}.ui.input{position:relative;font-weight:400;font-style:normal;display:inline-flex;color:#000000de}.ui.input>input{margin:0;max-width:100%;flex:1 0 auto;outline:none;-webkit-tap-highlight-color:rgba(255,255,255,0);text-align:left;line-height:1.21428571em;font-family:var(--fonts-regular);padding:.67857143em 1em;background:#FFFFFF;border:1px solid rgba(34,36,38,.15);color:#000000de;border-radius:.28571429rem;transition:box-shadow .1s ease,border-color .1s ease;box-shadow:none}.ui.input>input::-webkit-input-placeholder{color:#bfbfbfde}.ui.input>input::-moz-placeholder{color:#bfbfbfde}.ui.input>input:-ms-input-placeholder{color:#bfbfbfde}.ui.disabled.input,.ui.input:not(.disabled) input[disabled]{opacity:var(--opacity-disabled)}.ui.disabled.input>input,.ui.input:not(.disabled) input[disabled]{pointer-events:none}.ui.input>input:active,.ui.input.down input{border-color:#0000004d;background:#FAFAFA;color:#000000de;box-shadow:none}.ui.loading.loading.input>i.icon:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.loading.input>i.icon:after{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;-webkit-animation:loader .6s infinite linear;animation:loader .6s infinite linear;border:.2em solid #767676;border-radius:500rem;box-shadow:0 0 0 1px transparent}.ui.input.focus>input,.ui.input>input:focus{border-color:#85b7d9;background:#FFFFFF;color:#000c;box-shadow:none}.ui.input.focus>input::-webkit-input-placeholder,.ui.input>input:focus::-webkit-input-placeholder{color:#737373de}.ui.input.focus>input::-moz-placeholder,.ui.input>input:focus::-moz-placeholder{color:#737373de}.ui.input.focus>input:-ms-input-placeholder,.ui.input>input:focus:-ms-input-placeholder{color:#737373de}.ui.input.error>input{background-color:#fff6f6;border-color:#e0b4b4;color:#9f3a38;box-shadow:none}.ui.input.error>input::-webkit-input-placeholder{color:#e7bdbc}.ui.input.error>input::-moz-placeholder{color:#e7bdbc}.ui.input.error>input:-ms-input-placeholder{color:#e7bdbc!important}.ui.input.error>input:focus::-webkit-input-placeholder{color:#da9796}.ui.input.error>input:focus::-moz-placeholder{color:#da9796}.ui.input.error>input:focus:-ms-input-placeholder{color:#da9796!important}.ui.input.info>input{background-color:#f8ffff;border-color:#a9d5de;color:#276f86;box-shadow:none}.ui.input.info>input::-webkit-input-placeholder{color:#98cfe1}.ui.input.info>input::-moz-placeholder{color:#98cfe1}.ui.input.info>input:-ms-input-placeholder{color:#98cfe1!important}.ui.input.info>input:focus::-webkit-input-placeholder{color:#70bdd6}.ui.input.info>input:focus::-moz-placeholder{color:#70bdd6}.ui.input.info>input:focus:-ms-input-placeholder{color:#70bdd6!important}.ui.input.success>input{background-color:#fcfff5;border-color:#a3c293;color:#2c662d;box-shadow:none}.ui.input.success>input::-webkit-input-placeholder{color:#8fcf90}.ui.input.success>input::-moz-placeholder{color:#8fcf90}.ui.input.success>input:-ms-input-placeholder{color:#8fcf90!important}.ui.input.success>input:focus::-webkit-input-placeholder{color:#6cbf6d}.ui.input.success>input:focus::-moz-placeholder{color:#6cbf6d}.ui.input.success>input:focus:-ms-input-placeholder{color:#6cbf6d!important}.ui.input.warning>input{background-color:#fffaf3;border-color:#c9ba9b;color:#573a08;box-shadow:none}.ui.input.warning>input::-webkit-input-placeholder{color:#edad3e}.ui.input.warning>input::-moz-placeholder{color:#edad3e}.ui.input.warning>input:-ms-input-placeholder{color:#edad3e!important}.ui.input.warning>input:focus::-webkit-input-placeholder{color:#e39715}.ui.input.warning>input:focus::-moz-placeholder{color:#e39715}.ui.input.warning>input:focus:-ms-input-placeholder{color:#e39715!important}.ui.transparent.input>textarea,.ui.transparent.input>input{border-color:transparent!important;background-color:transparent!important;padding:0;box-shadow:none!important;border-radius:0!important}.field .ui.transparent.input>textarea{padding:.67857143em 1em}:not(.field)>.ui.transparent.icon.input>i.icon{width:1.1em}:not(.field)>.ui.ui.ui.transparent.icon.input>input{padding-left:0;padding-right:2em}:not(.field)>.ui.ui.ui.transparent[class*="left icon"].input>input{padding-left:2em;padding-right:0}.ui.transparent.inverted.input{color:#fff}.ui.ui.transparent.inverted.input>textarea,.ui.ui.transparent.inverted.input>input{color:inherit}.ui.transparent.inverted.input>input::-webkit-input-placeholder{color:#ffffff80}.ui.transparent.inverted.input>input::-moz-placeholder{color:#ffffff80}.ui.transparent.inverted.input>input:-ms-input-placeholder{color:#ffffff80}.ui.icon.input>i.icon{cursor:default;position:absolute;line-height:1;text-align:center;top:0;right:0;margin:0;height:100%;width:2.67142857em;opacity:.5;border-radius:0 .28571429rem .28571429rem 0;transition:opacity .3s ease}.ui.icon.input>i.icon:not(.link){pointer-events:none}.ui.ui.ui.ui.icon.input>textarea,.ui.ui.ui.ui.icon.input>input{padding-right:2.67142857em}.ui.icon.input>i.icon:before,.ui.icon.input>i.icon:after{left:0;position:absolute;text-align:center;top:50%;width:100%;margin-top:-.5em}.ui.icon.input>i.link.icon{cursor:pointer}.ui.icon.input>i.circular.icon{top:.35em;right:.5em}.ui[class*="left icon"].input>i.icon{right:auto;left:1px;border-radius:.28571429rem 0 0 .28571429rem}.ui[class*="left icon"].input>i.circular.icon{right:auto;left:.5em}.ui.ui.ui.ui[class*="left icon"].input>textarea,.ui.ui.ui.ui[class*="left icon"].input>input{padding-left:2.67142857em;padding-right:1em}.ui.icon.input>textarea:focus~i.icon,.ui.icon.input>input:focus~i.icon{opacity:1}.ui.labeled.input>.label{flex:0 0 auto;margin:0;font-size:1em}.ui.labeled.input>.label:not(.corner){padding-top:.78571429em;padding-bottom:.78571429em}.ui.labeled.input:not([class*="corner labeled"]) .label:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ui.labeled.input:not([class*="corner labeled"]) .label:first-child+input{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:transparent}.ui.labeled.input:not([class*="corner labeled"]) .label:first-child+input:focus{border-left-color:#85b7d9}.ui[class*="right labeled"].input>input{border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-right-color:transparent!important}.ui[class*="right labeled"].input>input+.label{border-top-left-radius:0;border-bottom-left-radius:0}.ui[class*="right labeled"].input>input:focus{border-right-color:#85b7d9!important}.ui.labeled.input .corner.label{top:1px;right:1px;font-size:.64285714em;border-radius:0 .28571429rem 0 0}.ui[class*="corner labeled"]:not([class*="left corner labeled"]).labeled.input>textarea,.ui[class*="corner labeled"]:not([class*="left corner labeled"]).labeled.input>input{padding-right:2.5em!important}.ui[class*="corner labeled"].icon.input:not([class*="left corner labeled"])>textarea,.ui[class*="corner labeled"].icon.input:not([class*="left corner labeled"])>input{padding-right:3.25em!important}.ui[class*="corner labeled"].icon.input:not([class*="left corner labeled"])>i.icon{margin-right:1.25em}.ui[class*="left corner labeled"].labeled.input>textarea,.ui[class*="left corner labeled"].labeled.input>input{padding-left:2.5em!important}.ui[class*="left corner labeled"].icon.input>textarea,.ui[class*="left corner labeled"].icon.input>input{padding-left:3.25em!important}.ui[class*="left corner labeled"].icon.input>i.icon{margin-left:1.25em}.ui.icon.input>textarea~i.icon{height:3em}:not(.field)>.ui.transparent.icon.input>textarea~i.icon{height:1.3em}.ui.input>.ui.corner.label{top:1px;right:1px}.ui.input>.ui.left.corner.label{right:auto;left:1px}.ui.form .field.error>.ui.action.input>.ui.button,.ui.form .field.error>.ui.labeled.input:not([class*="corner labeled"])>.ui.label,.ui.action.input.error>.ui.button,.ui.labeled.input.error:not([class*="corner labeled"])>.ui.label{border-top:1px solid #E0B4B4;border-bottom:1px solid #E0B4B4}.ui.form .field.error>.ui[class*="left action"].input>.ui.button,.ui.form .field.error>.ui.labeled.input:not(.right):not([class*="corner labeled"])>.ui.label,.ui[class*="left action"].input.error>.ui.button,.ui.labeled.input.error:not(.right):not([class*="corner labeled"])>.ui.label{border-left:1px solid #E0B4B4}.ui.form .field.error>.ui.action.input:not([class*="left action"])>input+.ui.button,.ui.form .field.error>.ui.right.labeled.input:not([class*="corner labeled"])>input+.ui.label,.ui.action.input.error:not([class*="left action"])>input+.ui.button,.ui.right.labeled.input.error:not([class*="corner labeled"])>input+.ui.label{border-right:1px solid #E0B4B4}.ui.form .field.error>.ui.right.labeled.input:not([class*="corner labeled"])>.ui.label:first-child,.ui.right.labeled.input.error:not([class*="corner labeled"])>.ui.label:first-child{border-left:1px solid #E0B4B4}.ui.form .field.info>.ui.action.input>.ui.button,.ui.form .field.info>.ui.labeled.input:not([class*="corner labeled"])>.ui.label,.ui.action.input.info>.ui.button,.ui.labeled.input.info:not([class*="corner labeled"])>.ui.label{border-top:1px solid #A9D5DE;border-bottom:1px solid #A9D5DE}.ui.form .field.info>.ui[class*="left action"].input>.ui.button,.ui.form .field.info>.ui.labeled.input:not(.right):not([class*="corner labeled"])>.ui.label,.ui[class*="left action"].input.info>.ui.button,.ui.labeled.input.info:not(.right):not([class*="corner labeled"])>.ui.label{border-left:1px solid #A9D5DE}.ui.form .field.info>.ui.action.input:not([class*="left action"])>input+.ui.button,.ui.form .field.info>.ui.right.labeled.input:not([class*="corner labeled"])>input+.ui.label,.ui.action.input.info:not([class*="left action"])>input+.ui.button,.ui.right.labeled.input.info:not([class*="corner labeled"])>input+.ui.label{border-right:1px solid #A9D5DE}.ui.form .field.info>.ui.right.labeled.input:not([class*="corner labeled"])>.ui.label:first-child,.ui.right.labeled.input.info:not([class*="corner labeled"])>.ui.label:first-child{border-left:1px solid #A9D5DE}.ui.form .field.success>.ui.action.input>.ui.button,.ui.form .field.success>.ui.labeled.input:not([class*="corner labeled"])>.ui.label,.ui.action.input.success>.ui.button,.ui.labeled.input.success:not([class*="corner labeled"])>.ui.label{border-top:1px solid #A3C293;border-bottom:1px solid #A3C293}.ui.form .field.success>.ui[class*="left action"].input>.ui.button,.ui.form .field.success>.ui.labeled.input:not(.right):not([class*="corner labeled"])>.ui.label,.ui[class*="left action"].input.success>.ui.button,.ui.labeled.input.success:not(.right):not([class*="corner labeled"])>.ui.label{border-left:1px solid #A3C293}.ui.form .field.success>.ui.action.input:not([class*="left action"])>input+.ui.button,.ui.form .field.success>.ui.right.labeled.input:not([class*="corner labeled"])>input+.ui.label,.ui.action.input.success:not([class*="left action"])>input+.ui.button,.ui.right.labeled.input.success:not([class*="corner labeled"])>input+.ui.label{border-right:1px solid #A3C293}.ui.form .field.success>.ui.right.labeled.input:not([class*="corner labeled"])>.ui.label:first-child,.ui.right.labeled.input.success:not([class*="corner labeled"])>.ui.label:first-child{border-left:1px solid #A3C293}.ui.form .field.warning>.ui.action.input>.ui.button,.ui.form .field.warning>.ui.labeled.input:not([class*="corner labeled"])>.ui.label,.ui.action.input.warning>.ui.button,.ui.labeled.input.warning:not([class*="corner labeled"])>.ui.label{border-top:1px solid #C9BA9B;border-bottom:1px solid #C9BA9B}.ui.form .field.warning>.ui[class*="left action"].input>.ui.button,.ui.form .field.warning>.ui.labeled.input:not(.right):not([class*="corner labeled"])>.ui.label,.ui[class*="left action"].input.warning>.ui.button,.ui.labeled.input.warning:not(.right):not([class*="corner labeled"])>.ui.label{border-left:1px solid #C9BA9B}.ui.form .field.warning>.ui.action.input:not([class*="left action"])>input+.ui.button,.ui.form .field.warning>.ui.right.labeled.input:not([class*="corner labeled"])>input+.ui.label,.ui.action.input.warning:not([class*="left action"])>input+.ui.button,.ui.right.labeled.input.warning:not([class*="corner labeled"])>input+.ui.label{border-right:1px solid #C9BA9B}.ui.form .field.warning>.ui.right.labeled.input:not([class*="corner labeled"])>.ui.label:first-child,.ui.right.labeled.input.warning:not([class*="corner labeled"])>.ui.label:first-child{border-left:1px solid #C9BA9B}.ui.action.input>.button,.ui.action.input>.buttons{display:flex;align-items:center;flex:0 0 auto}.ui.action.input>.button,.ui.action.input>.buttons>.button{padding-top:.78571429em;padding-bottom:.78571429em;margin:0}.ui[class*="left action"].input>input{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:transparent}.ui.action.input:not([class*="left action"])>input{border-top-right-radius:0;border-bottom-right-radius:0;border-right-color:transparent}.ui.action.input>.dropdown:first-child,.ui.action.input>.button:first-child,.ui.action.input>.buttons:first-child>.button{border-radius:.28571429rem 0 0 .28571429rem}.ui.action.input>.dropdown:not(:first-child),.ui.action.input>.button:not(:first-child),.ui.action.input>.buttons:not(:first-child)>.button{border-radius:0}.ui.action.input>.dropdown:last-child,.ui.action.input>.button:last-child,.ui.action.input>.buttons:last-child>.button{border-radius:0 .28571429rem .28571429rem 0}.ui.action.input:not([class*="left action"])>input:focus{border-right-color:#85b7d9}.ui.ui[class*="left action"].input>input:focus{border-left-color:#85b7d9}.ui.inverted.input>input{border:none}.ui.fluid.input{display:flex}.ui.fluid.input>input{width:0!important}.ui.input{font-size:1em}.ui.mini.input{font-size:.78571429em}.ui.tiny.input{font-size:.85714286em}.ui.small.input{font-size:.92857143em}.ui.large.input{font-size:1.14285714em}.ui.big.input{font-size:1.28571429em}.ui.huge.input{font-size:1.42857143em}.ui.massive.input{font-size:1.71428571em}.ui.items>.item{display:flex;margin:1em 0;width:100%;min-height:0;background:transparent;padding:0;border:none;border-radius:0;box-shadow:none;transition:box-shadow .1s ease;z-index:""}.ui.items>.item a{cursor:pointer}.ui.items{margin:1.5em 0}.ui.items:first-child{margin-top:0!important}.ui.items:last-child{margin-bottom:0!important}.ui.items>.item:after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item:first-child{margin-top:0}.ui.items>.item:last-child{margin-bottom:0}.ui.items>.item>.image{position:relative;flex:0 0 auto;display:block;float:none;margin:0;padding:0;max-height:"";align-self:start}.ui.items>.item>.image>img{display:block;width:100%;height:auto;border-radius:.125rem;border:none}.ui.items>.item>.image:only-child>img{border-radius:0}.ui.items>.item>.content{display:block;flex:1 1 auto;background:none;color:#000000de;margin:0;padding:0;box-shadow:none;font-size:1em;border:none;border-radius:0}.ui.items>.item>.content:after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image+.content{min-width:0;width:auto;display:block;margin-left:0;align-self:start;padding-left:1.5em}.ui.items>.item>.content>.header{display:inline-block;margin:-.21425em 0 0;font-family:var(--fonts-regular);font-weight:500;color:#000000d9}.ui.items>.item>.content>.header:not(.ui){font-size:1.28571429em}.ui.items>.item [class*="left floated"]{float:left}.ui.items>.item [class*="right floated"]{float:right}.ui.items>.item .content img{align-self:center;width:""}.ui.items>.item img.avatar,.ui.items>.item .avatar img{width:"";height:"";border-radius:500rem}.ui.items>.item>.content>.description{margin-top:.6em;max-width:auto;font-size:1em;line-height:1.4285em;color:#000000de}.ui.items>.item>.content p{margin:0 0 .5em}.ui.items>.item>.content p:last-child{margin-bottom:0}.ui.items>.item .meta{margin:.5em 0;font-size:1em;line-height:1em;color:#0009}.ui.items>.item .meta *{margin-right:.3em}.ui.items>.item .meta :last-child{margin-right:0}.ui.items>.item .meta [class*="right floated"]{margin-right:0;margin-left:.3em}.ui.items>.item>.content a:not(.ui){color:"";transition:color .1s ease}.ui.items>.item>.content a:not(.ui):hover{color:""}.ui.items>.item>.content>a.header{color:#000000d9}.ui.items>.item>.content>a.header:hover{color:#1e70bf}.ui.items>.item .meta>a:not(.ui){color:#0006}.ui.items>.item .meta>a:not(.ui):hover{color:#000000de}.ui.items>.item>.content .favorite.icon{cursor:pointer;opacity:.75;transition:color .1s ease}.ui.items>.item>.content .favorite.icon:hover{opacity:1;color:#ffb70a}.ui.items>.item>.content .active.favorite.icon{color:#ffe623}.ui.items>.item>.content .like.icon{cursor:pointer;opacity:.75;transition:color .1s ease}.ui.items>.item>.content .like.icon:hover{opacity:1;color:#ff2733}.ui.items>.item>.content .active.like.icon{color:#ff2733}.ui.items>.item .extra{display:block;position:relative;background:none;margin:.5rem 0 0;width:100%;padding:0;top:0;left:0;color:#0006;box-shadow:none;transition:color .1s ease;border-top:none}.ui.items>.item .extra>*{margin:.25rem .5rem .25rem 0}.ui.items>.item .extra>[class*="right floated"]{margin:.25rem 0 .25rem .5rem}.ui.items>.item .extra:after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image:not(.ui){width:175px}@media only screen and (min-width: 768px) and (max-width: 991.98px){.ui.items>.item{margin:1em 0}.ui.items>.item>.image:not(.ui){width:150px}.ui.items>.item>.image+.content{display:block;padding:0 0 0 1em}}@media only screen and (max-width: 767.98px){.ui.items:not(.unstackable)>.item{flex-direction:column;margin:2em 0}.ui.items:not(.unstackable)>.item>.image{display:block;margin-left:auto;margin-right:auto}.ui.items:not(.unstackable)>.item>.image,.ui.items:not(.unstackable)>.item>.image>img{max-width:100%!important;width:auto!important;max-height:250px!important}.ui.items:not(.unstackable)>.item>.image+.content{display:block;padding:1.5em 0 0}}.ui.items>.item>.image+[class*="top aligned"].content{align-self:flex-start}.ui.items>.item>.image+[class*="middle aligned"].content{align-self:center}.ui.items>.item>.image+[class*="bottom aligned"].content{align-self:flex-end}.ui.relaxed.items>.item{margin:1.5em 0}.ui[class*="very relaxed"].items>.item{margin:2em 0}.ui.divided.items>.item{border-top:1px solid rgba(34,36,38,.15);margin:0;padding:1em 0}.ui.divided.items>.item:first-child{border-top:none;margin-top:0!important;padding-top:0!important}.ui.divided.items>.item:last-child{margin-bottom:0!important;padding-bottom:0!important}.ui.relaxed.divided.items>.item{margin:0;padding:1.5em 0}.ui[class*="very relaxed"].divided.items>.item{margin:0;padding:2em 0}.ui.items a.item:hover,.ui.link.items>.item:hover{cursor:pointer}.ui.items a.item:hover .content .header,.ui.link.items>.item:hover .content .header{color:#1e70bf}.ui.items>.item{font-size:1em}.ui.mini.items>.item{font-size:.78571429em}.ui.tiny.items>.item{font-size:.85714286em}.ui.small.items>.item{font-size:.92857143em}.ui.large.items>.item{font-size:1.14285714em}.ui.big.items>.item{font-size:1.28571429em}.ui.huge.items>.item{font-size:1.42857143em}.ui.massive.items>.item{font-size:1.71428571em}@media only screen and (max-width: 767.98px){.ui.unstackable.items>.item>.image,.ui.unstackable.items>.item>.image>img{width:125px!important}}.ui.inverted.items>.item{background:transparent}.ui.inverted.items>.item>.content{background:none;color:#ffffffe6}.ui.inverted.items>.item .extra{background:none}.ui.inverted.items>.item>.content>.header{color:#ffffffe6}.ui.inverted.items>.item>.content>.description{color:#ffffffe6}.ui.inverted.items>.item .meta{color:#fffc}.ui.inverted.items>.item>.content a:not(.ui){color:#57a4ef}.ui.inverted.items>.item>.content a:not(.ui):hover{color:#4183c4}.ui.inverted.items>.item>.content>a.header{color:#ffffffe6}.ui.inverted.items>.item>.content>a.header:hover{color:#fff}.ui.inverted.items>.item .meta>a:not(.ui){color:#ffffffb3}.ui.inverted.items>.item .meta>a:not(.ui):hover{color:#ffffffe6}.ui.inverted.items>.item>.content .favorite.icon:hover{color:#ffc63d}.ui.inverted.items>.item>.content .active.favorite.icon{color:#ffec56}.ui.inverted.items>.item>.content .like.icon:hover{color:#ff5a63}.ui.inverted.items>.item>.content .active.like.icon{color:#ff5a63}.ui.inverted.items>.item .extra{color:#ffffffb3}.ui.inverted.items a.item:hover .content .header,.ui.inverted.link.items>.item:hover .content .header{color:#fff}.ui.inverted.divided.items>.item{border-top:1px solid rgba(255,255,255,.1)}.ui.inverted.divided.items>.item:first-child{border-top:none}.ui.label{display:inline-block;line-height:1;vertical-align:baseline;margin:0 .14285714em;background-color:#e8e8e8;background-image:none;padding:.5833em .833em;color:#0009;text-transform:none;font-weight:500;border:0 solid transparent;border-radius:.28571429rem;transition:background .1s ease}.ui.label:first-child{margin-left:0}.ui.label:last-child{margin-right:0}a.ui.label{cursor:pointer}.ui.label>a{cursor:pointer;color:inherit;opacity:.5;transition:.1s opacity ease}.ui.label>a:hover{opacity:1}.ui.label>img{width:auto!important;vertical-align:middle;height:2.1666em}.ui.left.icon.label>.icon,.ui.label>.icon{width:auto;margin:0 .75em 0 0}.ui.label>.detail{display:inline-block;vertical-align:top;font-weight:500;margin-left:1em;opacity:.8}.ui.label>.detail .icon{margin:0 .25em 0 0}.ui.label>.close.icon,.ui.label>.delete.icon{cursor:pointer;font-size:.92857143em;opacity:.5;transition:background .1s ease}.ui.label>.close.icon:hover,.ui.label>.delete.icon:hover{opacity:1}.ui.label.left.icon>.close.icon,.ui.label.left.icon>.delete.icon{margin:0 .5em 0 0}.ui.label:not(.icon)>.close.icon,.ui.label:not(.icon)>.delete.icon{margin:0 0 0 .5em}.ui.icon.label>.icon{margin:0 auto}.ui.right.icon.label>.icon{margin:0 0 0 .75em}.ui.labels>.label{margin:0 .5em .5em 0}.ui.header>.ui.label{margin-top:-.29165em}.ui.attached.segment>.ui.top.left.attached.label,.ui.bottom.attached.segment>.ui.top.left.attached.label{border-top-left-radius:0}.ui.attached.segment>.ui.top.right.attached.label,.ui.bottom.attached.segment>.ui.top.right.attached.label{border-top-right-radius:0}.ui.top.attached.segment>.ui.bottom.left.attached.label{border-bottom-left-radius:0}.ui.top.attached.segment>.ui.bottom.right.attached.label{border-bottom-right-radius:0}.ui.top.attached.label~.ui.bottom.attached.label+:not(.attached),.ui.top.attached.label+:not(.attached){margin-top:2rem!important}.ui.bottom.attached.label~:last-child:not(.attached){margin-top:0;margin-bottom:2rem!important}.ui.segment:not(.basic)>.ui.top.attached.label{margin-top:-1px}.ui.segment:not(.basic)>.ui.bottom.attached.label{margin-bottom:-1px}.ui.segment:not(.basic)>.ui.attached.label:not(.right){margin-left:-1px}.ui.segment:not(.basic)>.ui.right.attached.label{margin-right:-1px}.ui.segment:not(.basic)>.ui.attached.label:not(.left):not(.right){width:calc(100% + 2px)}.ui.image.label{width:auto;margin-top:0;margin-bottom:0;max-width:9999px;vertical-align:baseline;text-transform:none;background:#E8E8E8;padding:.5833em .833em .5833em .5em;border-radius:.28571429rem;box-shadow:none}.ui.image.label.attached:not(.basic){padding:.5833em .833em .5833em .5em}.ui.image.label img{display:inline-block;vertical-align:top;height:2.1666em;margin:-.5833em .5em -.5833em -.5em;border-radius:.28571429rem 0 0 .28571429rem}.ui.image.label .detail{background:rgba(0,0,0,.1);margin:-.5833em -.833em -.5833em .5em;padding:.5833em .833em;border-radius:0 .28571429rem .28571429rem 0}.ui.bottom.attached.image.label:not(.right)>img,.ui.top.right.attached.image.label>img{border-top-left-radius:0}.ui.top.attached.image.label:not(.right)>img,.ui.bottom.right.attached.image.label>img{border-bottom-left-radius:0}.ui.tag.labels .label,.ui.tag.label{margin-left:1em;position:relative;padding-left:1.5em;padding-right:1.5em;border-radius:0 .28571429rem .28571429rem 0;transition:none}.ui.tag.labels .label:before,.ui.tag.label:before{position:absolute;transform:translateY(-50%) translate(50%) rotate(-45deg);top:50%;right:100%;content:"";background-color:inherit;background-image:none;width:1.56em;height:1.56em;transition:none}.ui.tag.labels .label:after,.ui.tag.label:after{position:absolute;content:"";top:50%;left:-.25em;margin-top:-.25em;background-color:#fff;width:.5em;height:.5em;box-shadow:0 -1px 1px #0000004d;border-radius:500rem}.ui.basic.tag.labels .label:before,.ui.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;right:calc(100% + 1px)}.ui.basic.tag.labels .label:after,.ui.basic.tag.label:after{box-shadow:0 -1px 3px #000c}.ui.corner.label{position:absolute;top:0;right:0;margin:0;padding:0;text-align:center;border-color:#e8e8e8;width:4em;height:4em;z-index:1;transition:border-color .1s ease}.ui.corner.label{background-color:transparent!important}.ui.corner.label:after{position:absolute;content:"";right:0;top:0;z-index:-1;width:0;height:0;background-color:transparent;border-top:0 solid transparent;border-right:4em solid transparent;border-bottom:4em solid transparent;border-left:0 solid transparent;border-right-color:inherit;transition:border-color .1s ease}.ui.corner.label .icon{cursor:inherit;position:absolute;top:.64285714em;left:auto;right:.57142857em;font-size:1.14285714em;margin:0}.ui.left.corner.label,.ui.left.corner.label:after{right:auto;left:0}.ui.left.corner.label:after{border-top:4em solid transparent;border-right:4em solid transparent;border-bottom:0 solid transparent;border-left:0 solid transparent;border-top-color:inherit}.ui.left.corner.label .icon{left:.57142857em;right:auto}.ui.segment>.ui.corner.label{top:-1px;right:-1px}.ui.segment>.ui.left.corner.label{right:auto;left:-1px}.ui.ribbon.label{position:relative;margin:0;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;border-radius:0 .28571429rem .28571429rem 0;border-color:#00000026}.ui.ribbon.label:after{position:absolute;content:"";top:100%;left:0;background-color:transparent;border-style:solid;border-width:0 1.2em 1.2em 0;border-color:transparent;border-right-color:inherit;width:0;height:0}.ui.ribbon.label{left:calc(-1rem - 1.2em);margin-right:-1.2em;padding-left:calc(1rem + 1.2em);padding-right:1.2em}.ui[class*="right ribbon"].label{left:calc(100% + 1rem + 1.2em);padding-left:1.2em;padding-right:calc(1rem + 1.2em)}.ui.basic.ribbon.label{padding-top:calc(.5833em - 1px);padding-bottom:calc(.5833em - 1px)}.ui.basic.ribbon.label:not([class*="right ribbon"]){padding-left:calc(1rem + 1.2em - 1px);padding-right:calc(1.2em - 1px)}.ui.basic[class*="right ribbon"].label{padding-left:calc(1.2em - 1px);padding-right:calc(1rem + 1.2em - 1px)}.ui.basic.ribbon.label:after{top:calc(100% + 1px)}.ui.basic.ribbon.label:not([class*="right ribbon"]):after{left:-1px}.ui.basic[class*="right ribbon"].label:after{right:-1px}.ui[class*="right ribbon"].label{text-align:left;transform:translate(-100%);border-radius:.28571429rem 0 0 .28571429rem}.ui[class*="right ribbon"].label:after{left:auto;right:0;border-style:solid;border-width:1.2em 1.2em 0 0;border-color:transparent;border-top-color:inherit}.ui.image>.ribbon.label,.ui.card .image>.ribbon.label{position:absolute;top:1rem}.ui.card .image>.ui.ribbon.label,.ui.image>.ui.ribbon.label{left:calc(.05rem - 1.2em)}.ui.card .image>.ui[class*="right ribbon"].label,.ui.image>.ui[class*="right ribbon"].label{left:calc(100% - .05rem + 1.2em);padding-left:.833em}.ui.table td>.ui.ribbon.label{left:-2.2em}.ui.table td>.ui[class*="right ribbon"].label{left:calc(100% + 2.2em);padding-left:.833em}.ui[class*="top attached"].label,.ui.attached.label{width:100%;position:absolute;margin:0;top:0;left:0;padding:.75em 1em;border-radius:.21428571rem .21428571rem 0 0}.ui[class*="bottom attached"].label{top:auto;bottom:0;border-radius:0 0 .21428571rem .21428571rem}.ui[class*="top left attached"].label{width:auto;margin-top:0;border-radius:.21428571rem 0 .28571429rem}.ui[class*="top right attached"].label{width:auto;left:auto;right:0;border-radius:0 .21428571rem 0 .28571429rem}.ui[class*="bottom left attached"].label{width:auto;top:auto;bottom:0;border-radius:0 .28571429rem 0 .21428571rem}.ui[class*="bottom right attached"].label{inset:auto 0 0 auto;width:auto;border-radius:.28571429rem 0 .21428571rem}.ui.label.disabled{opacity:.5}.ui.labels a.label:hover,a.ui.label:hover{background-color:#e0e0e0;border-color:#e0e0e0;background-image:none;color:#000c}.ui.labels a.label:hover:before,a.ui.label:hover:before{color:#000c}.ui.active.label{background-color:#d0d0d0;border-color:#d0d0d0;background-image:none;color:#000000f2}.ui.active.label:before{background-color:#d0d0d0;background-image:none;color:#000000f2}.ui.labels a.active.label:hover,a.ui.active.label:hover{background-color:#c8c8c8;border-color:#c8c8c8;background-image:none;color:#000000f2}.ui.labels a.active.label:hover:before,a.ui.active.label:hover:before{background-color:#c8c8c8;background-image:none;color:#000000f2}.ui.labels.visible .label,.ui.label.visible:not(.dropdown){display:inline-block!important}.ui.labels.hidden .label,.ui.label.hidden{display:none!important}.ui.basic.labels .label,.ui.basic.label{background:none #FFFFFF;border:1px solid rgba(34,36,38,.15);color:#000000de;box-shadow:none;padding-top:calc(.5833em - 1px);padding-bottom:calc(.5833em - 1px);padding-right:calc(.833em - 1px)}.ui.basic.labels:not(.tag):not(.image):not(.ribbon) .label,.ui.basic.label:not(.tag):not(.image):not(.ribbon){padding-left:calc(.833em - 1px)}.ui.basic.image.label{padding-left:calc(.5em - 1px)}.ui.basic.labels a.label:hover,a.ui.basic.label:hover{text-decoration:none;background:none #FFFFFF;color:#1e70bf;box-shadow:none}.ui.basic.pointing.label:before{border-color:inherit}.ui.label.fluid,.ui.fluid.labels>.label{width:100%;box-sizing:border-box}.ui.inverted.labels .label,.ui.inverted.label{color:#ffffffe6;background-color:#b5b5b5}.ui.inverted.corner.label{border-color:#b5b5b5}.ui.inverted.corner.label:hover{border-color:#e8e8e8;transition:none}.ui.inverted.basic.labels .label,.ui.inverted.basic.label,.ui.inverted.basic.label:hover{border-color:#ffffff80;background:#1B1C1D}.ui.inverted.basic.label:hover{color:#4183c4}.ui.primary.labels .label,.ui.ui.ui.primary.label{background-color:#2185d0;border-color:#2185d0;color:#ffffffe6}.ui.primary.labels a.label:hover,a.ui.ui.ui.primary.label:hover{background-color:#1678c2;border-color:#1678c2;color:#fff}.ui.ui.ui.primary.ribbon.label{border-color:#1a69a4}.ui.basic.labels .primary.label,.ui.ui.ui.basic.primary.label{background:none #FFFFFF;border-color:#2185d0;color:#2185d0}.ui.basic.labels a.primary.label:hover,a.ui.ui.ui.basic.primary.label:hover{background:none #FFFFFF;border-color:#1678c2;color:#1678c2}.ui.inverted.labels .primary.label,.ui.ui.ui.inverted.primary.label{background-color:#54c8ff;border-color:#54c8ff;color:#1b1c1d}.ui.inverted.labels a.primary.label:hover,a.ui.ui.ui.inverted.primary.label:hover{background-color:#21b8ff;border-color:#21b8ff;color:#1b1c1d}.ui.ui.ui.inverted.primary.ribbon.label{border-color:#21b8ff}.ui.inverted.basic.labels .primary.label,.ui.ui.ui.inverted.basic.primary.label{background-color:#1b1c1d;border-color:#54c8ff;color:#54c8ff}.ui.inverted.basic.labels a.primary.label:hover,a.ui.ui.ui.inverted.basic.primary.label:hover{border-color:#21b8ff;background-color:#1b1c1d;color:#21b8ff}.ui.inverted.basic.tag.labels .primary.label,.ui.ui.ui.inverted.primary.basic.tag.label{border:1px solid #54C8FF}.ui.inverted.basic.tag.labels .primary.label:before,.ui.ui.ui.inverted.primary.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.secondary.labels .label,.ui.ui.ui.secondary.label{background-color:#1b1c1d;border-color:#1b1c1d;color:#ffffffe6}.ui.secondary.labels a.label:hover,a.ui.ui.ui.secondary.label:hover{background-color:#27292a;border-color:#27292a;color:#fff}.ui.ui.ui.secondary.ribbon.label{border-color:#020203}.ui.basic.labels .secondary.label,.ui.ui.ui.basic.secondary.label{background:none #FFFFFF;border-color:#1b1c1d;color:#1b1c1d}.ui.basic.labels a.secondary.label:hover,a.ui.ui.ui.basic.secondary.label:hover{background:none #FFFFFF;border-color:#27292a;color:#27292a}.ui.inverted.labels .secondary.label,.ui.ui.ui.inverted.secondary.label{background-color:#545454;border-color:#545454;color:#1b1c1d}.ui.inverted.labels a.secondary.label:hover,a.ui.ui.ui.inverted.secondary.label:hover{background-color:#6e6e6e;border-color:#6e6e6e;color:#1b1c1d}.ui.ui.ui.inverted.secondary.ribbon.label{border-color:#3b3b3b}.ui.inverted.basic.labels .secondary.label,.ui.ui.ui.inverted.basic.secondary.label{background-color:#1b1c1d;border-color:#545454;color:#545454}.ui.inverted.basic.labels a.secondary.label:hover,a.ui.ui.ui.inverted.basic.secondary.label:hover{border-color:#6e6e6e;background-color:#1b1c1d;color:#6e6e6e}.ui.inverted.basic.tag.labels .secondary.label,.ui.ui.ui.inverted.secondary.basic.tag.label{border:1px solid #545454}.ui.inverted.basic.tag.labels .secondary.label:before,.ui.ui.ui.inverted.secondary.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.red.labels .label,.ui.ui.ui.red.label{background-color:#db2828;border-color:#db2828;color:#fff}.ui.red.labels a.label:hover,a.ui.ui.ui.red.label:hover{background-color:#d01919;border-color:#d01919;color:#fff}.ui.ui.ui.red.ribbon.label{border-color:#b21e1e}.ui.basic.labels .red.label,.ui.ui.ui.basic.red.label{background:none #FFFFFF;border-color:#db2828;color:#db2828}.ui.basic.labels a.red.label:hover,a.ui.ui.ui.basic.red.label:hover{background:none #FFFFFF;border-color:#d01919;color:#d01919}.ui.inverted.labels .red.label,.ui.ui.ui.inverted.red.label{background-color:#ff695e;border-color:#ff695e;color:#1b1c1d}.ui.inverted.labels a.red.label:hover,a.ui.ui.ui.inverted.red.label:hover{background-color:#ff392b;border-color:#ff392b;color:#1b1c1d}.ui.ui.ui.inverted.red.ribbon.label{border-color:#ff392b}.ui.inverted.basic.labels .red.label,.ui.ui.ui.inverted.basic.red.label{background-color:#1b1c1d;border-color:#ff695e;color:#ff695e}.ui.inverted.basic.labels a.red.label:hover,a.ui.ui.ui.inverted.basic.red.label:hover{border-color:#ff392b;background-color:#1b1c1d;color:#ff392b}.ui.inverted.basic.tag.labels .red.label,.ui.ui.ui.inverted.red.basic.tag.label{border:1px solid #FF695E}.ui.inverted.basic.tag.labels .red.label:before,.ui.ui.ui.inverted.red.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.orange.labels .label,.ui.ui.ui.orange.label{background-color:#f2711c;border-color:#f2711c;color:#fff}.ui.orange.labels a.label:hover,a.ui.ui.ui.orange.label:hover{background-color:#f26202;border-color:#f26202;color:#fff}.ui.ui.ui.orange.ribbon.label{border-color:#cf590c}.ui.basic.labels .orange.label,.ui.ui.ui.basic.orange.label{background:none #FFFFFF;border-color:#f2711c;color:#f2711c}.ui.basic.labels a.orange.label:hover,a.ui.ui.ui.basic.orange.label:hover{background:none #FFFFFF;border-color:#f26202;color:#f26202}.ui.inverted.labels .orange.label,.ui.ui.ui.inverted.orange.label{background-color:#ff851b;border-color:#ff851b;color:#1b1c1d}.ui.inverted.labels a.orange.label:hover,a.ui.ui.ui.inverted.orange.label:hover{background-color:#e76b00;border-color:#e76b00;color:#1b1c1d}.ui.ui.ui.inverted.orange.ribbon.label{border-color:#e76b00}.ui.inverted.basic.labels .orange.label,.ui.ui.ui.inverted.basic.orange.label{background-color:#1b1c1d;border-color:#ff851b;color:#ff851b}.ui.inverted.basic.labels a.orange.label:hover,a.ui.ui.ui.inverted.basic.orange.label:hover{border-color:#e76b00;background-color:#1b1c1d;color:#e76b00}.ui.inverted.basic.tag.labels .orange.label,.ui.ui.ui.inverted.orange.basic.tag.label{border:1px solid #FF851B}.ui.inverted.basic.tag.labels .orange.label:before,.ui.ui.ui.inverted.orange.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.yellow.labels .label,.ui.ui.ui.yellow.label{background-color:#fbbd08;border-color:#fbbd08;color:#fff}.ui.yellow.labels a.label:hover,a.ui.ui.ui.yellow.label:hover{background-color:#eaae00;border-color:#eaae00;color:#fff}.ui.ui.ui.yellow.ribbon.label{border-color:#cd9903}.ui.basic.labels .yellow.label,.ui.ui.ui.basic.yellow.label{background:none #FFFFFF;border-color:#fbbd08;color:#fbbd08}.ui.basic.labels a.yellow.label:hover,a.ui.ui.ui.basic.yellow.label:hover{background:none #FFFFFF;border-color:#eaae00;color:#eaae00}.ui.inverted.labels .yellow.label,.ui.ui.ui.inverted.yellow.label{background-color:#ffe21f;border-color:#ffe21f;color:#1b1c1d}.ui.inverted.labels a.yellow.label:hover,a.ui.ui.ui.inverted.yellow.label:hover{background-color:#ebcd00;border-color:#ebcd00;color:#1b1c1d}.ui.ui.ui.inverted.yellow.ribbon.label{border-color:#ebcd00}.ui.inverted.basic.labels .yellow.label,.ui.ui.ui.inverted.basic.yellow.label{background-color:#1b1c1d;border-color:#ffe21f;color:#ffe21f}.ui.inverted.basic.labels a.yellow.label:hover,a.ui.ui.ui.inverted.basic.yellow.label:hover{border-color:#ebcd00;background-color:#1b1c1d;color:#ebcd00}.ui.inverted.basic.tag.labels .yellow.label,.ui.ui.ui.inverted.yellow.basic.tag.label{border:1px solid #FFE21F}.ui.inverted.basic.tag.labels .yellow.label:before,.ui.ui.ui.inverted.yellow.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.olive.labels .label,.ui.ui.ui.olive.label{background-color:#b5cc18;border-color:#b5cc18;color:#fff}.ui.olive.labels a.label:hover,a.ui.ui.ui.olive.label:hover{background-color:#a7bd0d;border-color:#a7bd0d;color:#fff}.ui.ui.ui.olive.ribbon.label{border-color:#8d9e13}.ui.basic.labels .olive.label,.ui.ui.ui.basic.olive.label{background:none #FFFFFF;border-color:#b5cc18;color:#b5cc18}.ui.basic.labels a.olive.label:hover,a.ui.ui.ui.basic.olive.label:hover{background:none #FFFFFF;border-color:#a7bd0d;color:#a7bd0d}.ui.inverted.labels .olive.label,.ui.ui.ui.inverted.olive.label{background-color:#d9e778;border-color:#d9e778;color:#1b1c1d}.ui.inverted.labels a.olive.label:hover,a.ui.ui.ui.inverted.olive.label:hover{background-color:#d2e745;border-color:#d2e745;color:#1b1c1d}.ui.ui.ui.inverted.olive.ribbon.label{border-color:#cddf4d}.ui.inverted.basic.labels .olive.label,.ui.ui.ui.inverted.basic.olive.label{background-color:#1b1c1d;border-color:#d9e778;color:#d9e778}.ui.inverted.basic.labels a.olive.label:hover,a.ui.ui.ui.inverted.basic.olive.label:hover{border-color:#d2e745;background-color:#1b1c1d;color:#d2e745}.ui.inverted.basic.tag.labels .olive.label,.ui.ui.ui.inverted.olive.basic.tag.label{border:1px solid #D9E778}.ui.inverted.basic.tag.labels .olive.label:before,.ui.ui.ui.inverted.olive.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.green.labels .label,.ui.ui.ui.green.label{background-color:#21ba45;border-color:#21ba45;color:#fff}.ui.green.labels a.label:hover,a.ui.ui.ui.green.label:hover{background-color:#16ab39;border-color:#16ab39;color:#fff}.ui.ui.ui.green.ribbon.label{border-color:#198f35}.ui.basic.labels .green.label,.ui.ui.ui.basic.green.label{background:none #FFFFFF;border-color:#21ba45;color:#21ba45}.ui.basic.labels a.green.label:hover,a.ui.ui.ui.basic.green.label:hover{background:none #FFFFFF;border-color:#16ab39;color:#16ab39}.ui.inverted.labels .green.label,.ui.ui.ui.inverted.green.label{background-color:#2ecc40;border-color:#2ecc40;color:#1b1c1d}.ui.inverted.labels a.green.label:hover,a.ui.ui.ui.inverted.green.label:hover{background-color:#1ea92e;border-color:#1ea92e;color:#1b1c1d}.ui.ui.ui.inverted.green.ribbon.label{border-color:#25a233}.ui.inverted.basic.labels .green.label,.ui.ui.ui.inverted.basic.green.label{background-color:#1b1c1d;border-color:#2ecc40;color:#2ecc40}.ui.inverted.basic.labels a.green.label:hover,a.ui.ui.ui.inverted.basic.green.label:hover{border-color:#1ea92e;background-color:#1b1c1d;color:#1ea92e}.ui.inverted.basic.tag.labels .green.label,.ui.ui.ui.inverted.green.basic.tag.label{border:1px solid #2ECC40}.ui.inverted.basic.tag.labels .green.label:before,.ui.ui.ui.inverted.green.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.teal.labels .label,.ui.ui.ui.teal.label{background-color:#00b5ad;border-color:#00b5ad;color:#fff}.ui.teal.labels a.label:hover,a.ui.ui.ui.teal.label:hover{background-color:#009c95;border-color:#009c95;color:#fff}.ui.ui.ui.teal.ribbon.label{border-color:#00827c}.ui.basic.labels .teal.label,.ui.ui.ui.basic.teal.label{background:none #FFFFFF;border-color:#00b5ad;color:#00b5ad}.ui.basic.labels a.teal.label:hover,a.ui.ui.ui.basic.teal.label:hover{background:none #FFFFFF;border-color:#009c95;color:#009c95}.ui.inverted.labels .teal.label,.ui.ui.ui.inverted.teal.label{background-color:#6dffff;border-color:#6dffff;color:#1b1c1d}.ui.inverted.labels a.teal.label:hover,a.ui.ui.ui.inverted.teal.label:hover{background-color:#3affff;border-color:#3affff;color:#1b1c1d}.ui.ui.ui.inverted.teal.ribbon.label{border-color:#3affff}.ui.inverted.basic.labels .teal.label,.ui.ui.ui.inverted.basic.teal.label{background-color:#1b1c1d;border-color:#6dffff;color:#6dffff}.ui.inverted.basic.labels a.teal.label:hover,a.ui.ui.ui.inverted.basic.teal.label:hover{border-color:#3affff;background-color:#1b1c1d;color:#3affff}.ui.inverted.basic.tag.labels .teal.label,.ui.ui.ui.inverted.teal.basic.tag.label{border:1px solid #6DFFFF}.ui.inverted.basic.tag.labels .teal.label:before,.ui.ui.ui.inverted.teal.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.blue.labels .label,.ui.ui.ui.blue.label{background-color:#2185d0;border-color:#2185d0;color:#fff}.ui.blue.labels a.label:hover,a.ui.ui.ui.blue.label:hover{background-color:#1678c2;border-color:#1678c2;color:#fff}.ui.ui.ui.blue.ribbon.label{border-color:#1a69a4}.ui.basic.labels .blue.label,.ui.ui.ui.basic.blue.label{background:none #FFFFFF;border-color:#2185d0;color:#2185d0}.ui.basic.labels a.blue.label:hover,a.ui.ui.ui.basic.blue.label:hover{background:none #FFFFFF;border-color:#1678c2;color:#1678c2}.ui.inverted.labels .blue.label,.ui.ui.ui.inverted.blue.label{background-color:#54c8ff;border-color:#54c8ff;color:#1b1c1d}.ui.inverted.labels a.blue.label:hover,a.ui.ui.ui.inverted.blue.label:hover{background-color:#21b8ff;border-color:#21b8ff;color:#1b1c1d}.ui.ui.ui.inverted.blue.ribbon.label{border-color:#21b8ff}.ui.inverted.basic.labels .blue.label,.ui.ui.ui.inverted.basic.blue.label{background-color:#1b1c1d;border-color:#54c8ff;color:#54c8ff}.ui.inverted.basic.labels a.blue.label:hover,a.ui.ui.ui.inverted.basic.blue.label:hover{border-color:#21b8ff;background-color:#1b1c1d;color:#21b8ff}.ui.inverted.basic.tag.labels .blue.label,.ui.ui.ui.inverted.blue.basic.tag.label{border:1px solid #54C8FF}.ui.inverted.basic.tag.labels .blue.label:before,.ui.ui.ui.inverted.blue.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.violet.labels .label,.ui.ui.ui.violet.label{background-color:#6435c9;border-color:#6435c9;color:#fff}.ui.violet.labels a.label:hover,a.ui.ui.ui.violet.label:hover{background-color:#5829bb;border-color:#5829bb;color:#fff}.ui.ui.ui.violet.ribbon.label{border-color:#502aa1}.ui.basic.labels .violet.label,.ui.ui.ui.basic.violet.label{background:none #FFFFFF;border-color:#6435c9;color:#6435c9}.ui.basic.labels a.violet.label:hover,a.ui.ui.ui.basic.violet.label:hover{background:none #FFFFFF;border-color:#5829bb;color:#5829bb}.ui.inverted.labels .violet.label,.ui.ui.ui.inverted.violet.label{background-color:#a291fb;border-color:#a291fb;color:#1b1c1d}.ui.inverted.labels a.violet.label:hover,a.ui.ui.ui.inverted.violet.label:hover{background-color:#745aff;border-color:#745aff;color:#1b1c1d}.ui.ui.ui.inverted.violet.ribbon.label{border-color:#7860f9}.ui.inverted.basic.labels .violet.label,.ui.ui.ui.inverted.basic.violet.label{background-color:#1b1c1d;border-color:#a291fb;color:#a291fb}.ui.inverted.basic.labels a.violet.label:hover,a.ui.ui.ui.inverted.basic.violet.label:hover{border-color:#745aff;background-color:#1b1c1d;color:#745aff}.ui.inverted.basic.tag.labels .violet.label,.ui.ui.ui.inverted.violet.basic.tag.label{border:1px solid #A291FB}.ui.inverted.basic.tag.labels .violet.label:before,.ui.ui.ui.inverted.violet.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.purple.labels .label,.ui.ui.ui.purple.label{background-color:#a333c8;border-color:#a333c8;color:#fff}.ui.purple.labels a.label:hover,a.ui.ui.ui.purple.label:hover{background-color:#9627ba;border-color:#9627ba;color:#fff}.ui.ui.ui.purple.ribbon.label{border-color:#82299f}.ui.basic.labels .purple.label,.ui.ui.ui.basic.purple.label{background:none #FFFFFF;border-color:#a333c8;color:#a333c8}.ui.basic.labels a.purple.label:hover,a.ui.ui.ui.basic.purple.label:hover{background:none #FFFFFF;border-color:#9627ba;color:#9627ba}.ui.inverted.labels .purple.label,.ui.ui.ui.inverted.purple.label{background-color:#dc73ff;border-color:#dc73ff;color:#1b1c1d}.ui.inverted.labels a.purple.label:hover,a.ui.ui.ui.inverted.purple.label:hover{background-color:#cf40ff;border-color:#cf40ff;color:#1b1c1d}.ui.ui.ui.inverted.purple.ribbon.label{border-color:#cf40ff}.ui.inverted.basic.labels .purple.label,.ui.ui.ui.inverted.basic.purple.label{background-color:#1b1c1d;border-color:#dc73ff;color:#dc73ff}.ui.inverted.basic.labels a.purple.label:hover,a.ui.ui.ui.inverted.basic.purple.label:hover{border-color:#cf40ff;background-color:#1b1c1d;color:#cf40ff}.ui.inverted.basic.tag.labels .purple.label,.ui.ui.ui.inverted.purple.basic.tag.label{border:1px solid #DC73FF}.ui.inverted.basic.tag.labels .purple.label:before,.ui.ui.ui.inverted.purple.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.pink.labels .label,.ui.ui.ui.pink.label{background-color:#e03997;border-color:#e03997;color:#fff}.ui.pink.labels a.label:hover,a.ui.ui.ui.pink.label:hover{background-color:#e61a8d;border-color:#e61a8d;color:#fff}.ui.ui.ui.pink.ribbon.label{border-color:#c71f7e}.ui.basic.labels .pink.label,.ui.ui.ui.basic.pink.label{background:none #FFFFFF;border-color:#e03997;color:#e03997}.ui.basic.labels a.pink.label:hover,a.ui.ui.ui.basic.pink.label:hover{background:none #FFFFFF;border-color:#e61a8d;color:#e61a8d}.ui.inverted.labels .pink.label,.ui.ui.ui.inverted.pink.label{background-color:#ff8edf;border-color:#ff8edf;color:#1b1c1d}.ui.inverted.labels a.pink.label:hover,a.ui.ui.ui.inverted.pink.label:hover{background-color:#ff5bd1;border-color:#ff5bd1;color:#1b1c1d}.ui.ui.ui.inverted.pink.ribbon.label{border-color:#ff5bd1}.ui.inverted.basic.labels .pink.label,.ui.ui.ui.inverted.basic.pink.label{background-color:#1b1c1d;border-color:#ff8edf;color:#ff8edf}.ui.inverted.basic.labels a.pink.label:hover,a.ui.ui.ui.inverted.basic.pink.label:hover{border-color:#ff5bd1;background-color:#1b1c1d;color:#ff5bd1}.ui.inverted.basic.tag.labels .pink.label,.ui.ui.ui.inverted.pink.basic.tag.label{border:1px solid #FF8EDF}.ui.inverted.basic.tag.labels .pink.label:before,.ui.ui.ui.inverted.pink.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.brown.labels .label,.ui.ui.ui.brown.label{background-color:#a5673f;border-color:#a5673f;color:#fff}.ui.brown.labels a.label:hover,a.ui.ui.ui.brown.label:hover{background-color:#975b33;border-color:#975b33;color:#fff}.ui.ui.ui.brown.ribbon.label{border-color:#805031}.ui.basic.labels .brown.label,.ui.ui.ui.basic.brown.label{background:none #FFFFFF;border-color:#a5673f;color:#a5673f}.ui.basic.labels a.brown.label:hover,a.ui.ui.ui.basic.brown.label:hover{background:none #FFFFFF;border-color:#975b33;color:#975b33}.ui.inverted.labels .brown.label,.ui.ui.ui.inverted.brown.label{background-color:#d67c1c;border-color:#d67c1c;color:#1b1c1d}.ui.inverted.labels a.brown.label:hover,a.ui.ui.ui.inverted.brown.label:hover{background-color:#b0620f;border-color:#b0620f;color:#1b1c1d}.ui.ui.ui.inverted.brown.ribbon.label{border-color:#a96216}.ui.inverted.basic.labels .brown.label,.ui.ui.ui.inverted.basic.brown.label{background-color:#1b1c1d;border-color:#d67c1c;color:#d67c1c}.ui.inverted.basic.labels a.brown.label:hover,a.ui.ui.ui.inverted.basic.brown.label:hover{border-color:#b0620f;background-color:#1b1c1d;color:#b0620f}.ui.inverted.basic.tag.labels .brown.label,.ui.ui.ui.inverted.brown.basic.tag.label{border:1px solid #D67C1C}.ui.inverted.basic.tag.labels .brown.label:before,.ui.ui.ui.inverted.brown.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.grey.labels .label,.ui.ui.ui.grey.label{background-color:#767676;border-color:#767676;color:#fff}.ui.grey.labels a.label:hover,a.ui.ui.ui.grey.label:hover{background-color:#838383;border-color:#838383;color:#fff}.ui.ui.ui.grey.ribbon.label{border-color:#5d5d5d}.ui.basic.labels .grey.label,.ui.ui.ui.basic.grey.label{background:none #FFFFFF;border-color:#767676;color:#767676}.ui.basic.labels a.grey.label:hover,a.ui.ui.ui.basic.grey.label:hover{background:none #FFFFFF;border-color:#838383;color:#838383}.ui.inverted.labels .grey.label,.ui.ui.ui.inverted.grey.label{background-color:#dcddde;border-color:#dcddde;color:#1b1c1d}.ui.inverted.labels a.grey.label:hover,a.ui.ui.ui.inverted.grey.label:hover{background-color:#c2c4c5;border-color:#c2c4c5;color:#fff}.ui.ui.ui.inverted.grey.ribbon.label{border-color:#e9eaea}.ui.inverted.basic.labels .grey.label,.ui.ui.ui.inverted.basic.grey.label{background-color:#1b1c1d;border-color:#dcddde;color:#ffffffe6}.ui.inverted.basic.labels a.grey.label:hover,a.ui.ui.ui.inverted.basic.grey.label:hover{border-color:#c2c4c5;background-color:#1b1c1d}.ui.inverted.basic.tag.labels .grey.label,.ui.ui.ui.inverted.grey.basic.tag.label{border:1px solid #DCDDDE}.ui.inverted.basic.tag.labels .grey.label:before,.ui.ui.ui.inverted.grey.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.black.labels .label,.ui.ui.ui.black.label{background-color:#1b1c1d;border-color:#1b1c1d;color:#fff}.ui.black.labels a.label:hover,a.ui.ui.ui.black.label:hover{background-color:#27292a;border-color:#27292a;color:#fff}.ui.ui.ui.black.ribbon.label{border-color:#020203}.ui.basic.labels .black.label,.ui.ui.ui.basic.black.label{background:none #FFFFFF;border-color:#1b1c1d;color:#1b1c1d}.ui.basic.labels a.black.label:hover,a.ui.ui.ui.basic.black.label:hover{background:none #FFFFFF;border-color:#27292a;color:#27292a}.ui.inverted.labels .black.label,.ui.ui.ui.inverted.black.label{background-color:#545454;border-color:#545454;color:#1b1c1d}.ui.inverted.labels a.black.label:hover,a.ui.ui.ui.inverted.black.label:hover{background-color:#000;border-color:#000;color:#fff}.ui.ui.ui.inverted.black.ribbon.label{border-color:#616161}.ui.inverted.basic.labels .black.label,.ui.ui.ui.inverted.basic.black.label{background-color:#1b1c1d;border-color:#545454;color:#ffffffe6}.ui.inverted.basic.labels a.black.label:hover,a.ui.ui.ui.inverted.basic.black.label:hover{border-color:#000;background-color:#1b1c1d}.ui.inverted.basic.tag.labels .black.label,.ui.ui.ui.inverted.black.basic.tag.label{border:1px solid #545454}.ui.inverted.basic.tag.labels .black.label:before,.ui.ui.ui.inverted.black.basic.tag.label:before{border-color:inherit;border-width:1px 0 0 1px;border-style:inherit;background-color:#1b1c1d;right:calc(100% + 1px)}.ui.horizontal.labels .label,.ui.horizontal.label{margin:0 .5em 0 0;padding:.4em .833em;min-width:3em;text-align:center}.ui.circular.labels .label,.ui.circular.label{min-width:2em;min-height:2em;padding:.5em!important;line-height:1em;text-align:center;border-radius:500rem}.ui.empty.circular.labels .label,.ui.empty.circular.label{min-width:0;min-height:0;overflow:hidden;width:.5em;height:.5em;vertical-align:baseline}.ui.pointing.label{position:relative}.ui.attached.pointing.label{position:absolute}.ui.pointing.label:before{background-color:inherit;background-image:inherit;border-width:0;border-style:solid;border-color:inherit}.ui.pointing.label:before{position:absolute;content:"";transform:rotate(45deg);background-image:none;z-index:2;width:.6666em;height:.6666em;transition:none}.ui.pointing.label,.ui[class*="pointing above"].label{margin-top:1em}.ui.pointing.label:before,.ui[class*="pointing above"].label:before{border-width:1px 0 0 1px;transform:translate(-50%) translateY(-50%) rotate(45deg);top:0;left:50%}.ui[class*="bottom pointing"].label,.ui[class*="pointing below"].label{margin-top:0;margin-bottom:1em}.ui[class*="bottom pointing"].label:before,.ui[class*="pointing below"].label:before{border-width:0 1px 1px 0;right:auto;transform:translate(-50%) translateY(-50%) rotate(45deg);top:100%;left:50%}.ui[class*="left pointing"].label{margin-top:0;margin-left:.6666em}.ui[class*="left pointing"].label:before{border-width:0 0 1px 1px;transform:translate(-50%) translateY(-50%) rotate(45deg);inset:50% auto auto 0}.ui[class*="right pointing"].label{margin-top:0;margin-right:.6666em}.ui[class*="right pointing"].label:before{border-width:1px 1px 0 0;transform:translate(50%) translateY(-50%) rotate(45deg);inset:50% 0 auto auto}.ui.basic.pointing.label:before,.ui.basic[class*="pointing above"].label:before{margin-top:-1px}.ui.basic[class*="bottom pointing"].label:before,.ui.basic[class*="pointing below"].label:before{bottom:auto;top:100%;margin-top:1px}.ui.basic[class*="left pointing"].label:before{top:50%;left:-1px}.ui.basic[class*="right pointing"].label:before{top:50%;right:-1px}.ui.floating.label{position:absolute;z-index:100;top:-1em;right:0;white-space:nowrap;transform:translate(50%)}.ui.right.aligned.floating.label{transform:translate(1.2em)}.ui.left.floating.label{left:0;right:auto;transform:translate(-50%)}.ui.left.aligned.floating.label{transform:translate(-1.2em)}.ui.bottom.floating.label{top:auto;bottom:-1em}.ui.labels .label,.ui.label{font-size:.85714286rem}.ui.mini.labels .label,.ui.mini.label{font-size:.64285714rem}.ui.tiny.labels .label,.ui.tiny.label{font-size:.71428571rem}.ui.small.labels .label,.ui.small.label{font-size:.78571429rem}.ui.large.labels .label,.ui.large.label{font-size:1rem}.ui.big.labels .label,.ui.big.label{font-size:1.28571429rem}.ui.huge.labels .label,.ui.huge.label{font-size:1.42857143rem}.ui.massive.labels .label,.ui.massive.label{font-size:1.71428571rem}ul.ui.list,ol.ui.list,.ui.list{list-style-type:none;margin:1em 0;padding:0}ul.ui.list:first-child,ol.ui.list:first-child,.ui.list:first-child{margin-top:0;padding-top:0}ul.ui.list:last-child,ol.ui.list:last-child,.ui.list:last-child{margin-bottom:0;padding-bottom:0}ul.ui.list li,ol.ui.list li,.ui.list>.item,.ui.list .list>.item{display:list-item;table-layout:fixed;list-style-type:none;list-style-position:outside;padding:.21428571em 0;line-height:1.14285714em}ul.ui.list>li:first-child:after,ol.ui.list>li:first-child:after,.ui.list>.list>.item:after,.ui.list>.item:after{content:"";display:block;height:0;clear:both;visibility:hidden}ul.ui.list li:first-child,ol.ui.list li:first-child,.ui.list .list>.item:first-child,.ui.list>.item:first-child{padding-top:0}ul.ui.list li:last-child,ol.ui.list li:last-child,.ui.list .list>.item:last-child,.ui.list>.item:last-child{padding-bottom:0}ul.ui.list ul,ol.ui.list ol,.ui.list .list:not(.icon){clear:both;margin:0;padding:.75em 0 .25em .5em}ul.ui.list ul li,ol.ui.list ol li,.ui.list .list>.item{padding:.14285714em 0;line-height:inherit}.ui.list .list>.item>i.icon,.ui.list>.item>i.icon{display:table-cell;min-width:1.55em;margin:0;padding-top:0;transition:color .1s ease}.ui.list .list>.item>i.icon:not(.loading),.ui.list>.item>i.icon:not(.loading){padding-right:.28571429em;vertical-align:top}.ui.list .list>.item>i.icon:only-child,.ui.list>.item>i.icon:only-child{display:inline-block;min-width:auto;vertical-align:top}.ui.list .list>.item>.image,.ui.list>.item>.image{display:table-cell;background-color:transparent;margin:0;vertical-align:top}.ui.list .list>.item>.image:not(:only-child):not(img),.ui.list>.item>.image:not(:only-child):not(img){padding-right:.5em}.ui.list .list>.item>.image img,.ui.list>.item>.image img{vertical-align:top}.ui.list .list>.item>img.image,.ui.list .list>.item>.image:only-child,.ui.list>.item>img.image,.ui.list>.item>.image:only-child{display:inline-block}.ui.list .list>.item>.content,.ui.list>.item>.content{line-height:1.14285714em;color:#000000de}.ui.list .list>.item>.image+.content,.ui.list .list>.item>i.icon+.content,.ui.list>.item>.image+.content,.ui.list>.item>i.icon+.content{display:table-cell;width:100%;padding:0 0 0 .5em;vertical-align:top}.ui.list .list>.item>i.loading.icon+.content,.ui.list>.item>i.loading.icon+.content{padding-left:calc(.2857142857142857em + .5em)}.ui.list .list>.item>img.image+.content,.ui.list>.item>img.image+.content{display:inline-block;width:auto}.ui.list .list>.item>.content>.list,.ui.list>.item>.content>.list{margin-left:0;padding-left:0}.ui.list .list>.item .header,.ui.list>.item .header{display:block;margin:0;font-family:var(--fonts-regular);font-weight:500;color:#000000de}.ui.list .list>.item .description,.ui.list>.item .description{display:block;color:#000000b3}.ui.list>.item a,.ui.list .list>.item a{cursor:pointer}.ui.list .list>a.item,.ui.list>a.item{cursor:pointer;color:#4183c4}.ui.list .list>a.item:hover,.ui.list>a.item:hover{color:#1e70bf}.ui.list .list>a.item>i.icons,.ui.list>a.item>i.icons,.ui.list .list>a.item>i.icon,.ui.list>a.item>i.icon{color:#0006}.ui.list .list>.item a.header,.ui.list>.item a.header{cursor:pointer;color:#4183c4!important}.ui.list .list>.item>a.header:hover,.ui.list>.item>a.header:hover{color:#1e70bf!important}.ui[class*="left floated"].list{float:left}.ui[class*="right floated"].list{float:right}.ui.list .list>.item [class*="left floated"],.ui.list>.item [class*="left floated"]{float:left;margin:0 1em 0 0}.ui.list .list>.item [class*="right floated"],.ui.list>.item [class*="right floated"]{float:right;margin:0 0 0 1em}.ui.menu .ui.list>.item,.ui.menu .ui.list .list>.item{display:list-item;table-layout:fixed;background-color:transparent;list-style-type:none;list-style-position:outside;padding:.21428571em 0;line-height:1.14285714em}.ui.menu .ui.list .list>.item:before,.ui.menu .ui.list>.item:before{border:none;background:none}.ui.menu .ui.list .list>.item:first-child,.ui.menu .ui.list>.item:first-child{padding-top:0}.ui.menu .ui.list .list>.item:last-child,.ui.menu .ui.list>.item:last-child{padding-bottom:0}.ui.horizontal.list{display:inline-block;font-size:0}.ui.horizontal.list>.item{display:inline-block;margin-right:1em;font-size:1rem}.ui.horizontal.list:not(.celled)>.item:last-child{margin-right:0;padding-right:0}.ui.horizontal.list .list:not(.icon){padding-left:0;padding-bottom:0}.ui.horizontal.list>.item>.image,.ui.horizontal.list .list>.item>.image,.ui.horizontal.list>.item>i.icon,.ui.horizontal.list .list>.item>i.icon,.ui.horizontal.list>.item>.content,.ui.horizontal.list .list>.item>.content{vertical-align:middle}.ui.horizontal.list>.item:first-child,.ui.horizontal.list>.item:last-child{padding-top:.21428571em;padding-bottom:.21428571em}.ui.horizontal.list>.item>i.icon,.ui.horizontal.list .item>i.icons>i.icon{margin:0;padding:0 .25em 0 0}.ui.horizontal.list>.item>.image+.content,.ui.horizontal.list>.item>i.icon,.ui.horizontal.list>.item>i.icon+.content{float:none;display:inline-block;width:auto}.ui.horizontal.list>.item>.image{display:inline-block}.ui.list .list>.disabled.item,.ui.list>.disabled.item{pointer-events:none;color:#2828284d!important}.ui.inverted.list .list>.disabled.item,.ui.inverted.list>.disabled.item{color:#e1e1e14d!important}.ui.list .list>a.item:hover>.icons,.ui.list>a.item:hover>.icons,.ui.list .list>a.item:hover>i.icon,.ui.list>a.item:hover>i.icon{color:#000000de}.ui.inverted.list .list>a.item>i.icon,.ui.inverted.list>a.item>i.icon{color:#ffffffb3}.ui.inverted.list .list>.item .header,.ui.inverted.list>.item .header{color:#ffffffe6}.ui.inverted.list .list>.item .description,.ui.inverted.list>.item .description{color:#ffffffb3}.ui.inverted.list .list>.item>.content,.ui.inverted.list>.item>.content{color:#ffffffb3}.ui.inverted.list .list>a.item,.ui.inverted.list>a.item{cursor:pointer;color:#ffffffe6}.ui.inverted.list .list>a.item:hover,.ui.inverted.list>a.item:hover{color:#1e70bf}.ui.inverted.list .item a:not(.ui){color:#ffffffe6!important}.ui.inverted.list .item a:not(.ui):hover{color:#1e70bf!important}.ui.list[class*="top aligned"] .image,.ui.list[class*="top aligned"] .content,.ui.list [class*="top aligned"]{vertical-align:top!important}.ui.list[class*="middle aligned"] .image,.ui.list[class*="middle aligned"] .content,.ui.list [class*="middle aligned"]{vertical-align:middle!important}.ui.list[class*="bottom aligned"] .image,.ui.list[class*="bottom aligned"] .content,.ui.list [class*="bottom aligned"]{vertical-align:bottom!important}.ui.link.list .item,.ui.link.list a.item,.ui.link.list .item a:not(.ui){color:#0006;transition:.1s color ease}.ui.link.list.list a.item:hover,.ui.link.list.list .item a:not(.ui):hover{color:#000c}.ui.link.list.list a.item:active,.ui.link.list.list .item a:not(.ui):active{color:#000000e6}.ui.link.list.list .active.item,.ui.link.list.list .active.item a:not(.ui){color:#000000f2}.ui.inverted.link.list .item,.ui.inverted.link.list a.item,.ui.inverted.link.list .item a:not(.ui){color:#ffffff80}.ui.inverted.link.list.list a.item:hover,.ui.inverted.link.list.list .item a:not(.ui):hover{color:#fff}.ui.inverted.link.list.list a.item:active,.ui.inverted.link.list.list .item a:not(.ui):active{color:#fff}.ui.inverted.link.list.list a.active.item,.ui.inverted.link.list.list .active.item a:not(.ui){color:#fff}.ui.selection.list .list>.item,.ui.selection.list>.item{cursor:pointer;background:transparent;padding:.5em;margin:0;color:#0006;border-radius:.5em;transition:.1s color ease,.1s padding-left ease,.1s background-color ease}.ui.selection.list .list>.item:last-child,.ui.selection.list>.item:last-child{margin-bottom:0}.ui.selection.list .list>.item:hover,.ui.selection.list>.item:hover{background:rgba(0,0,0,.03);color:#000c}.ui.selection.list .list>.item:active,.ui.selection.list>.item:active{background:rgba(0,0,0,.05);color:#000000e6}.ui.selection.list .list>.item.active,.ui.selection.list>.item.active{background:rgba(0,0,0,.05);color:#000000f2}.ui.inverted.selection.list>.item{background:transparent;color:#ffffff80}.ui.inverted.selection.list>.item:hover{background:rgba(255,255,255,.02);color:#fff}.ui.inverted.selection.list>.item:active{background:rgba(255,255,255,.08);color:#fff}.ui.inverted.selection.list>.item.active{background:rgba(255,255,255,.08);color:#fff}.ui.celled.selection.list .list>.item,.ui.divided.selection.list .list>.item,.ui.celled.selection.list>.item,.ui.divided.selection.list>.item{border-radius:0}.ui.animated.list>.item{transition:.25s color ease .1s,.25s padding-left ease .1s,.25s background-color ease .1s}.ui.animated.list:not(.horizontal)>.item:hover{padding-left:1em}.ui.fitted.list:not(.selection) .list>.item,.ui.fitted.list:not(.selection)>.item{padding-left:0;padding-right:0}.ui.fitted.selection.list .list>.item,.ui.fitted.selection.list>.item{margin-left:-.5em;margin-right:-.5em}ul.ui.list,.ui.bulleted.list{margin-left:1.25rem}ul.ui.list li,.ui.bulleted.list .list>.item,.ui.bulleted.list>.item{position:relative}ul.ui.list li:before,.ui.bulleted.list .list>.item:before,.ui.bulleted.list>.item:before{-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none;position:absolute;top:auto;left:auto;font-weight:400;margin-left:-1.25rem;content:"\2022";opacity:1;color:inherit;vertical-align:top}ul.ui.list li:before,.ui.bulleted.list .list>a.item:before,.ui.bulleted.list>a.item:before{color:#000000de}ul.ui.list ul,.ui.bulleted.list .list:not(.icon){padding-left:1.25rem}ul.ui.horizontal.bulleted.list,.ui.horizontal.bulleted.list{margin-left:0}ul.ui.horizontal.bulleted.list li,.ui.horizontal.bulleted.list>.item{margin-left:1.75rem}ul.ui.horizontal.bulleted.list li:first-child,.ui.horizontal.bulleted.list>.item:first-child{margin-left:0}ul.ui.horizontal.bulleted.list li:before,.ui.horizontal.bulleted.list>.item:before{color:#000000de}ul.ui.horizontal.bulleted.list li:first-child:before,.ui.horizontal.bulleted.list>.item:first-child:before{display:none}ol.ui.list,.ui.ordered.list,.ui.ordered.list .list:not(.icon),ol.ui.list ol{counter-reset:ordered;margin-left:1.25rem;list-style-type:none}ol.ui.list li,.ui.ordered.list .list>.item,.ui.ordered.list>.item{list-style-type:none;position:relative}ol.ui.list li:before,.ui.ordered.list .list>.item:before,.ui.ordered.list>.item:before{position:absolute;top:auto;left:auto;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none;margin-left:-1.25rem;counter-increment:ordered;content:counters(ordered,".") " ";text-align:right;color:#000000de;vertical-align:middle;opacity:.8}ol.ui.inverted.list li:before,.ui.ordered.inverted.list .list>.item:before,.ui.ordered.inverted.list>.item:before{color:#ffffffb3}.ui.ordered.list .list>.item[data-value]:before,.ui.ordered.list>.item[data-value]:before{content:attr(data-value)}ol.ui.list li[value]:before{content:attr(value)}ol.ui.list ol,.ui.ordered.list .list:not(.icon){margin-left:1em}ol.ui.list ol li:before,.ui.ordered.list .list>.item:before{margin-left:-2em}ol.ui.horizontal.list,.ui.ordered.horizontal.list{margin-left:0}ol.ui.horizontal.list li:before,.ui.ordered.horizontal.list .list>.item:before,.ui.ordered.horizontal.list>.item:before{position:static;margin:0 .5em 0 0}ol.ui.suffixed.list li:before,.ui.suffixed.ordered.list .list>.item:before,.ui.suffixed.ordered.list>.item:before{content:counters(ordered,".") "."}.ui.divided.list>.item{border-top:1px solid rgba(34,36,38,.15)}.ui.divided.list .list>.item{border-top:none}.ui.divided.list .item .list>.item{border-top:none}.ui.divided.list .list>.item:first-child,.ui.divided.list>.item:first-child{border-top:none}.ui.divided.list:not(.horizontal) .list>.item:first-child{border-top-width:1px}.ui.divided.bulleted.list:not(.horizontal),.ui.divided.bulleted.list .list:not(.icon){margin-left:0;padding-left:0}.ui.divided.bulleted.list>.item:not(.horizontal){padding-left:1.25rem}.ui.divided.ordered.list{margin-left:0}.ui.divided.ordered.list .list>.item,.ui.divided.ordered.list>.item{padding-left:1.25rem}.ui.divided.ordered.list .item .list:not(.icon){margin-left:0;margin-right:0;padding-bottom:.21428571em}.ui.divided.ordered.list .item .list>.item{padding-left:1em}.ui.divided.selection.list .list>.item,.ui.divided.selection.list>.item{margin:0;border-radius:0}.ui.divided.horizontal.list{margin-left:0}.ui.divided.horizontal.list>.item{padding-left:.5em}.ui.divided.horizontal.list>.item:not(:last-child){padding-right:.5em}.ui.divided.horizontal.list>.item{border-top:none;border-right:1px solid rgba(34,36,38,.15);margin:0;line-height:.6}.ui.horizontal.divided.list>.item:last-child{border-right:none}.ui.divided.inverted.list>.item,.ui.divided.inverted.list>.list,.ui.divided.inverted.horizontal.list>.item{border-color:#ffffff1a}.ui.celled.list>.item,.ui.celled.list>.list{border-top:1px solid rgba(34,36,38,.15);padding-left:.5em;padding-right:.5em}.ui.celled.list>.item:last-child{border-bottom:1px solid rgba(34,36,38,.15)}.ui.celled.list>.item:first-child,.ui.celled.list>.item:last-child{padding-top:.21428571em;padding-bottom:.21428571em}.ui.celled.list .item .list>.item{border-width:0}.ui.celled.list .list>.item:first-child{border-top-width:0}.ui.celled.bulleted.list{margin-left:0}.ui.celled.bulleted.list .list>.item,.ui.celled.bulleted.list>.item{padding-left:1.25rem}.ui.celled.bulleted.list .item .list:not(.icon){margin-left:-1.25rem;margin-right:-1.25rem;padding-bottom:.21428571em}.ui.celled.ordered.list{margin-left:0}.ui.celled.ordered.list .list>.item,.ui.celled.ordered.list>.item{padding-left:1.25rem}.ui.celled.ordered.list .item .list:not(.icon){margin-left:0;margin-right:0;padding-bottom:.21428571em}.ui.celled.ordered.list .list>.item{padding-left:1em}.ui.horizontal.celled.list{margin-left:0}.ui.horizontal.celled.list .list>.item,.ui.horizontal.celled.list>.item{border-top:none;border-left:1px solid rgba(34,36,38,.15);margin:0;padding-left:.5em;padding-right:.5em;line-height:.6}.ui.horizontal.celled.list .list>.item:last-child,.ui.horizontal.celled.list>.item:last-child{border-bottom:none;border-right:1px solid rgba(34,36,38,.15)}.ui.celled.inverted.list>.item,.ui.celled.inverted.list>.list{border-color:#ffffff1a}.ui.celled.inverted.horizontal.list .list>.item,.ui.celled.inverted.horizontal.list>.item{border-color:#ffffff1a}.ui.relaxed.list:not(.horizontal)>.item:not(:first-child){padding-top:.42857143em}.ui.relaxed.list:not(.horizontal)>.item:not(:last-child){padding-bottom:.42857143em}.ui.horizontal.relaxed.list .list>.item:not(:first-child),.ui.horizontal.relaxed.list>.item:not(:first-child){padding-left:1rem}.ui.horizontal.relaxed.list .list>.item:not(:last-child),.ui.horizontal.relaxed.list>.item:not(:last-child){padding-right:1rem}.ui[class*="very relaxed"].list:not(.horizontal)>.item:not(:first-child){padding-top:.85714286em}.ui[class*="very relaxed"].list:not(.horizontal)>.item:not(:last-child){padding-bottom:.85714286em}.ui.horizontal[class*="very relaxed"].list .list>.item:not(:first-child),.ui.horizontal[class*="very relaxed"].list>.item:not(:first-child){padding-left:1.5rem}.ui.horizontal[class*="very relaxed"].list .list>.item:not(:last-child),.ui.horizontal[class*="very relaxed"].list>.item:not(:last-child){padding-right:1.5rem}.ui.list{font-size:1em}.ui.mini.list{font-size:.78571429em}.ui.mini.horizontal.list .list>.item,.ui.mini.horizontal.list>.item{font-size:.78571429rem}.ui.tiny.list{font-size:.85714286em}.ui.tiny.horizontal.list .list>.item,.ui.tiny.horizontal.list>.item{font-size:.85714286rem}.ui.small.list{font-size:.92857143em}.ui.small.horizontal.list .list>.item,.ui.small.horizontal.list>.item{font-size:.92857143rem}.ui.large.list{font-size:1.14285714em}.ui.large.horizontal.list .list>.item,.ui.large.horizontal.list>.item{font-size:1.14285714rem}.ui.big.list{font-size:1.28571429em}.ui.big.horizontal.list .list>.item,.ui.big.horizontal.list>.item{font-size:1.28571429rem}.ui.huge.list{font-size:1.42857143em}.ui.huge.horizontal.list .list>.item,.ui.huge.horizontal.list>.item{font-size:1.42857143rem}.ui.massive.list{font-size:1.71428571em}.ui.massive.horizontal.list .list>.item,.ui.massive.horizontal.list>.item{font-size:1.71428571rem}.ui.loader{display:none;position:absolute;top:50%;left:50%;margin:0;text-align:center;z-index:1000;transform:translate(-50%) translateY(-50%)}.ui.loader:before{position:absolute;content:"";top:0;left:50%;width:100%;height:100%;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loader:after{position:absolute;content:"";top:0;left:50%;width:100%;height:100%;-webkit-animation:loader .6s infinite linear;animation:loader .6s infinite linear;border:.2em solid #767676;border-radius:500rem;box-shadow:0 0 0 1px transparent}.ui.fast.loading.loading:after,.ui.fast.loading.loading .input>i.icon:after,.ui.fast.loading.loading>i.icon:after,.ui.fast.loader:after{-webkit-animation-duration:.3s;animation-duration:.3s}.ui.slow.loading.loading:after,.ui.slow.loading.loading .input>i.icon:after,.ui.slow.loading.loading>i.icon:after,.ui.slow.loader:after{-webkit-animation-duration:.9s;animation-duration:.9s}@-webkit-keyframes loader{to{transform:rotate(360deg)}}@keyframes loader{to{transform:rotate(360deg)}}.ui.dimmer>.loader{display:block}.ui.dimmer>.ui.loader{color:#ffffffe6}.ui.dimmer>.ui.loader:not(.elastic):before{border-color:#ffffff26}.ui.inverted.dimmer>.ui.loader{color:#000000de}.ui.inverted.dimmer>.ui.loader:not(.elastic):before{border-color:#0000001a}.ui.ui.ui.ui.text.loader{width:auto;height:auto;text-align:center;font-style:normal}.ui.indeterminate.loader:after{animation-direction:reverse;-webkit-animation-duration:1.2s;animation-duration:1.2s}.ui.loader.active,.ui.loader.visible{display:block}.ui.loader.disabled,.ui.loader.hidden{display:none}.ui.loader{width:2.28571429rem;height:2.28571429rem;font-size:1em}.ui.loader:before,.ui.loader:after{width:2.28571429rem;height:2.28571429rem;margin:0 0 0 -1.14285714rem}.ui.text.loader{min-width:2.28571429rem;padding-top:3.07142857rem}.ui.mini.loader{width:1rem;height:1rem;font-size:.78571429em}.ui.mini.loader:before,.ui.mini.loader:after{width:1rem;height:1rem;margin:0 0 0 -.5rem}.ui.mini.text.loader{min-width:1rem;padding-top:1.78571429rem}.ui.tiny.loader{width:1.14285714rem;height:1.14285714rem;font-size:.85714286em}.ui.tiny.loader:before,.ui.tiny.loader:after{width:1.14285714rem;height:1.14285714rem;margin:0 0 0 -.57142857rem}.ui.tiny.text.loader{min-width:1.14285714rem;padding-top:1.92857143rem}.ui.small.loader{width:1.71428571rem;height:1.71428571rem;font-size:.92857143em}.ui.small.loader:before,.ui.small.loader:after{width:1.71428571rem;height:1.71428571rem;margin:0 0 0 -.85714286rem}.ui.small.text.loader{min-width:1.71428571rem;padding-top:2.5rem}.ui.large.loader{width:3.42857143rem;height:3.42857143rem;font-size:1.14285714em}.ui.large.loader:before,.ui.large.loader:after{width:3.42857143rem;height:3.42857143rem;margin:0 0 0 -1.71428571rem}.ui.large.text.loader{min-width:3.42857143rem;padding-top:4.21428571rem}.ui.big.loader{width:3.71428571rem;height:3.71428571rem;font-size:1.28571429em}.ui.big.loader:before,.ui.big.loader:after{width:3.71428571rem;height:3.71428571rem;margin:0 0 0 -1.85714286rem}.ui.big.text.loader{min-width:3.71428571rem;padding-top:4.5rem}.ui.huge.loader{width:4.14285714rem;height:4.14285714rem;font-size:1.42857143em}.ui.huge.loader:before,.ui.huge.loader:after{width:4.14285714rem;height:4.14285714rem;margin:0 0 0 -2.07142857rem}.ui.huge.text.loader{min-width:4.14285714rem;padding-top:4.92857143rem}.ui.massive.loader{width:4.57142857rem;height:4.57142857rem;font-size:1.71428571em}.ui.massive.loader:before,.ui.massive.loader:after{width:4.57142857rem;height:4.57142857rem;margin:0 0 0 -2.28571429rem}.ui.massive.text.loader{min-width:4.57142857rem;padding-top:5.35714286rem}.ui.primary.elastic.loader.loader:before,.ui.primary.basic.elastic.loading.button:before,.ui.primary.basic.elastic.loading.button:after,.ui.primary.elastic.loading.loading.loading:not(.segment):before,.ui.primary.elastic.loading.loading.loading .input>i.icon:before,.ui.primary.elastic.loading.loading.loading.loading>i.icon:before,.ui.primary.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.primary.loading.loading.loading.loading .input>i.icon:after,.ui.primary.loading.loading.loading.loading>i.icon:after,.ui.primary.loader.loader.loader:after{color:#2185d0}.ui.inverted.primary.elastic.loader:before,.ui.inverted.primary.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.primary.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.primary.elastic.loading.loading.loading>i.icon:before,.ui.inverted.primary.loading.loading.loading.loading:not(.usual):after,.ui.inverted.primary.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.primary.loading.loading.loading.loading>i.icon:after,.ui.inverted.primary.loader.loader.loader:after{color:#54c8ff}.ui.secondary.elastic.loader.loader:before,.ui.secondary.basic.elastic.loading.button:before,.ui.secondary.basic.elastic.loading.button:after,.ui.secondary.elastic.loading.loading.loading:not(.segment):before,.ui.secondary.elastic.loading.loading.loading .input>i.icon:before,.ui.secondary.elastic.loading.loading.loading.loading>i.icon:before,.ui.secondary.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.secondary.loading.loading.loading.loading .input>i.icon:after,.ui.secondary.loading.loading.loading.loading>i.icon:after,.ui.secondary.loader.loader.loader:after{color:#1b1c1d}.ui.inverted.secondary.elastic.loader:before,.ui.inverted.secondary.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.secondary.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.secondary.elastic.loading.loading.loading>i.icon:before,.ui.inverted.secondary.loading.loading.loading.loading:not(.usual):after,.ui.inverted.secondary.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.secondary.loading.loading.loading.loading>i.icon:after,.ui.inverted.secondary.loader.loader.loader:after{color:#545454}.ui.red.elastic.loader.loader:before,.ui.red.basic.elastic.loading.button:before,.ui.red.basic.elastic.loading.button:after,.ui.red.elastic.loading.loading.loading:not(.segment):before,.ui.red.elastic.loading.loading.loading .input>i.icon:before,.ui.red.elastic.loading.loading.loading.loading>i.icon:before,.ui.red.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.red.loading.loading.loading.loading .input>i.icon:after,.ui.red.loading.loading.loading.loading>i.icon:after,.ui.red.loader.loader.loader:after{color:#db2828}.ui.inverted.red.elastic.loader:before,.ui.inverted.red.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.red.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.red.elastic.loading.loading.loading>i.icon:before,.ui.inverted.red.loading.loading.loading.loading:not(.usual):after,.ui.inverted.red.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.red.loading.loading.loading.loading>i.icon:after,.ui.inverted.red.loader.loader.loader:after{color:#ff695e}.ui.orange.elastic.loader.loader:before,.ui.orange.basic.elastic.loading.button:before,.ui.orange.basic.elastic.loading.button:after,.ui.orange.elastic.loading.loading.loading:not(.segment):before,.ui.orange.elastic.loading.loading.loading .input>i.icon:before,.ui.orange.elastic.loading.loading.loading.loading>i.icon:before,.ui.orange.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.orange.loading.loading.loading.loading .input>i.icon:after,.ui.orange.loading.loading.loading.loading>i.icon:after,.ui.orange.loader.loader.loader:after{color:#f2711c}.ui.inverted.orange.elastic.loader:before,.ui.inverted.orange.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.orange.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.orange.elastic.loading.loading.loading>i.icon:before,.ui.inverted.orange.loading.loading.loading.loading:not(.usual):after,.ui.inverted.orange.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.orange.loading.loading.loading.loading>i.icon:after,.ui.inverted.orange.loader.loader.loader:after{color:#ff851b}.ui.yellow.elastic.loader.loader:before,.ui.yellow.basic.elastic.loading.button:before,.ui.yellow.basic.elastic.loading.button:after,.ui.yellow.elastic.loading.loading.loading:not(.segment):before,.ui.yellow.elastic.loading.loading.loading .input>i.icon:before,.ui.yellow.elastic.loading.loading.loading.loading>i.icon:before,.ui.yellow.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.yellow.loading.loading.loading.loading .input>i.icon:after,.ui.yellow.loading.loading.loading.loading>i.icon:after,.ui.yellow.loader.loader.loader:after{color:#fbbd08}.ui.inverted.yellow.elastic.loader:before,.ui.inverted.yellow.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.yellow.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.yellow.elastic.loading.loading.loading>i.icon:before,.ui.inverted.yellow.loading.loading.loading.loading:not(.usual):after,.ui.inverted.yellow.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.yellow.loading.loading.loading.loading>i.icon:after,.ui.inverted.yellow.loader.loader.loader:after{color:#ffe21f}.ui.olive.elastic.loader.loader:before,.ui.olive.basic.elastic.loading.button:before,.ui.olive.basic.elastic.loading.button:after,.ui.olive.elastic.loading.loading.loading:not(.segment):before,.ui.olive.elastic.loading.loading.loading .input>i.icon:before,.ui.olive.elastic.loading.loading.loading.loading>i.icon:before,.ui.olive.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.olive.loading.loading.loading.loading .input>i.icon:after,.ui.olive.loading.loading.loading.loading>i.icon:after,.ui.olive.loader.loader.loader:after{color:#b5cc18}.ui.inverted.olive.elastic.loader:before,.ui.inverted.olive.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.olive.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.olive.elastic.loading.loading.loading>i.icon:before,.ui.inverted.olive.loading.loading.loading.loading:not(.usual):after,.ui.inverted.olive.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.olive.loading.loading.loading.loading>i.icon:after,.ui.inverted.olive.loader.loader.loader:after{color:#d9e778}.ui.green.elastic.loader.loader:before,.ui.green.basic.elastic.loading.button:before,.ui.green.basic.elastic.loading.button:after,.ui.green.elastic.loading.loading.loading:not(.segment):before,.ui.green.elastic.loading.loading.loading .input>i.icon:before,.ui.green.elastic.loading.loading.loading.loading>i.icon:before,.ui.green.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.green.loading.loading.loading.loading .input>i.icon:after,.ui.green.loading.loading.loading.loading>i.icon:after,.ui.green.loader.loader.loader:after{color:#21ba45}.ui.inverted.green.elastic.loader:before,.ui.inverted.green.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.green.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.green.elastic.loading.loading.loading>i.icon:before,.ui.inverted.green.loading.loading.loading.loading:not(.usual):after,.ui.inverted.green.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.green.loading.loading.loading.loading>i.icon:after,.ui.inverted.green.loader.loader.loader:after{color:#2ecc40}.ui.teal.elastic.loader.loader:before,.ui.teal.basic.elastic.loading.button:before,.ui.teal.basic.elastic.loading.button:after,.ui.teal.elastic.loading.loading.loading:not(.segment):before,.ui.teal.elastic.loading.loading.loading .input>i.icon:before,.ui.teal.elastic.loading.loading.loading.loading>i.icon:before,.ui.teal.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.teal.loading.loading.loading.loading .input>i.icon:after,.ui.teal.loading.loading.loading.loading>i.icon:after,.ui.teal.loader.loader.loader:after{color:#00b5ad}.ui.inverted.teal.elastic.loader:before,.ui.inverted.teal.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.teal.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.teal.elastic.loading.loading.loading>i.icon:before,.ui.inverted.teal.loading.loading.loading.loading:not(.usual):after,.ui.inverted.teal.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.teal.loading.loading.loading.loading>i.icon:after,.ui.inverted.teal.loader.loader.loader:after{color:#6dffff}.ui.blue.elastic.loader.loader:before,.ui.blue.basic.elastic.loading.button:before,.ui.blue.basic.elastic.loading.button:after,.ui.blue.elastic.loading.loading.loading:not(.segment):before,.ui.blue.elastic.loading.loading.loading .input>i.icon:before,.ui.blue.elastic.loading.loading.loading.loading>i.icon:before,.ui.blue.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.blue.loading.loading.loading.loading .input>i.icon:after,.ui.blue.loading.loading.loading.loading>i.icon:after,.ui.blue.loader.loader.loader:after{color:#2185d0}.ui.inverted.blue.elastic.loader:before,.ui.inverted.blue.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.blue.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.blue.elastic.loading.loading.loading>i.icon:before,.ui.inverted.blue.loading.loading.loading.loading:not(.usual):after,.ui.inverted.blue.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.blue.loading.loading.loading.loading>i.icon:after,.ui.inverted.blue.loader.loader.loader:after{color:#54c8ff}.ui.violet.elastic.loader.loader:before,.ui.violet.basic.elastic.loading.button:before,.ui.violet.basic.elastic.loading.button:after,.ui.violet.elastic.loading.loading.loading:not(.segment):before,.ui.violet.elastic.loading.loading.loading .input>i.icon:before,.ui.violet.elastic.loading.loading.loading.loading>i.icon:before,.ui.violet.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.violet.loading.loading.loading.loading .input>i.icon:after,.ui.violet.loading.loading.loading.loading>i.icon:after,.ui.violet.loader.loader.loader:after{color:#6435c9}.ui.inverted.violet.elastic.loader:before,.ui.inverted.violet.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.violet.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.violet.elastic.loading.loading.loading>i.icon:before,.ui.inverted.violet.loading.loading.loading.loading:not(.usual):after,.ui.inverted.violet.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.violet.loading.loading.loading.loading>i.icon:after,.ui.inverted.violet.loader.loader.loader:after{color:#a291fb}.ui.purple.elastic.loader.loader:before,.ui.purple.basic.elastic.loading.button:before,.ui.purple.basic.elastic.loading.button:after,.ui.purple.elastic.loading.loading.loading:not(.segment):before,.ui.purple.elastic.loading.loading.loading .input>i.icon:before,.ui.purple.elastic.loading.loading.loading.loading>i.icon:before,.ui.purple.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.purple.loading.loading.loading.loading .input>i.icon:after,.ui.purple.loading.loading.loading.loading>i.icon:after,.ui.purple.loader.loader.loader:after{color:#a333c8}.ui.inverted.purple.elastic.loader:before,.ui.inverted.purple.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.purple.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.purple.elastic.loading.loading.loading>i.icon:before,.ui.inverted.purple.loading.loading.loading.loading:not(.usual):after,.ui.inverted.purple.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.purple.loading.loading.loading.loading>i.icon:after,.ui.inverted.purple.loader.loader.loader:after{color:#dc73ff}.ui.pink.elastic.loader.loader:before,.ui.pink.basic.elastic.loading.button:before,.ui.pink.basic.elastic.loading.button:after,.ui.pink.elastic.loading.loading.loading:not(.segment):before,.ui.pink.elastic.loading.loading.loading .input>i.icon:before,.ui.pink.elastic.loading.loading.loading.loading>i.icon:before,.ui.pink.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.pink.loading.loading.loading.loading .input>i.icon:after,.ui.pink.loading.loading.loading.loading>i.icon:after,.ui.pink.loader.loader.loader:after{color:#e03997}.ui.inverted.pink.elastic.loader:before,.ui.inverted.pink.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.pink.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.pink.elastic.loading.loading.loading>i.icon:before,.ui.inverted.pink.loading.loading.loading.loading:not(.usual):after,.ui.inverted.pink.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.pink.loading.loading.loading.loading>i.icon:after,.ui.inverted.pink.loader.loader.loader:after{color:#ff8edf}.ui.brown.elastic.loader.loader:before,.ui.brown.basic.elastic.loading.button:before,.ui.brown.basic.elastic.loading.button:after,.ui.brown.elastic.loading.loading.loading:not(.segment):before,.ui.brown.elastic.loading.loading.loading .input>i.icon:before,.ui.brown.elastic.loading.loading.loading.loading>i.icon:before,.ui.brown.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.brown.loading.loading.loading.loading .input>i.icon:after,.ui.brown.loading.loading.loading.loading>i.icon:after,.ui.brown.loader.loader.loader:after{color:#a5673f}.ui.inverted.brown.elastic.loader:before,.ui.inverted.brown.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.brown.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.brown.elastic.loading.loading.loading>i.icon:before,.ui.inverted.brown.loading.loading.loading.loading:not(.usual):after,.ui.inverted.brown.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.brown.loading.loading.loading.loading>i.icon:after,.ui.inverted.brown.loader.loader.loader:after{color:#d67c1c}.ui.grey.elastic.loader.loader:before,.ui.grey.basic.elastic.loading.button:before,.ui.grey.basic.elastic.loading.button:after,.ui.grey.elastic.loading.loading.loading:not(.segment):before,.ui.grey.elastic.loading.loading.loading .input>i.icon:before,.ui.grey.elastic.loading.loading.loading.loading>i.icon:before,.ui.grey.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.grey.loading.loading.loading.loading .input>i.icon:after,.ui.grey.loading.loading.loading.loading>i.icon:after,.ui.grey.loader.loader.loader:after{color:#767676}.ui.inverted.grey.elastic.loader:before,.ui.inverted.grey.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.grey.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.grey.elastic.loading.loading.loading>i.icon:before,.ui.inverted.grey.loading.loading.loading.loading:not(.usual):after,.ui.inverted.grey.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.grey.loading.loading.loading.loading>i.icon:after,.ui.inverted.grey.loader.loader.loader:after{color:#dcddde}.ui.black.elastic.loader.loader:before,.ui.black.basic.elastic.loading.button:before,.ui.black.basic.elastic.loading.button:after,.ui.black.elastic.loading.loading.loading:not(.segment):before,.ui.black.elastic.loading.loading.loading .input>i.icon:before,.ui.black.elastic.loading.loading.loading.loading>i.icon:before,.ui.black.loading.loading.loading.loading:not(.usual):not(.button):after,.ui.black.loading.loading.loading.loading .input>i.icon:after,.ui.black.loading.loading.loading.loading>i.icon:after,.ui.black.loader.loader.loader:after{color:#1b1c1d}.ui.inverted.black.elastic.loader:before,.ui.inverted.black.elastic.loading.loading.loading:not(.segment):before,.ui.inverted.black.elastic.loading.loading.loading .input>i.icon:before,.ui.inverted.black.elastic.loading.loading.loading>i.icon:before,.ui.inverted.black.loading.loading.loading.loading:not(.usual):after,.ui.inverted.black.loading.loading.loading.loading .input>i.icon:after,.ui.inverted.black.loading.loading.loading.loading>i.icon:after,.ui.inverted.black.loader.loader.loader:after{color:#545454}.ui.elastic.loader.loader:before,.ui.elastic.loading.loading.loading:before,.ui.elastic.loading.loading.loading .input>i.icon:before,.ui.elastic.loading.loading.loading>i.icon:before,.ui.loading.loading.loading.loading:not(.usual):after,.ui.loading.loading.loading.loading .input>i.icon:after,.ui.loading.loading.loading.loading>i.icon:after,.ui.loader.loader.loader:after{border-color:currentColor}.ui.elastic.loading.loading.loading.loading.button:not(.inverted):not(.basic):before{color:#fff}.ui.elastic.basic.loading.button:before,.ui.elastic.basic.loading.button:after{color:#767676}.ui.double.loading.loading.loading.loading.button:after{border-bottom-color:currentColor}.ui.inline.loader{position:relative;vertical-align:middle;margin:0;left:0;top:0;transform:none}.ui.inline.loader.active,.ui.inline.loader.visible{display:inline-block}.ui.centered.inline.loader.active,.ui.centered.inline.loader.visible{display:block;margin-left:auto;margin-right:auto}.ui.loading.loading.loading.loading.loading.loading:after,.ui.loading.loading.loading.loading.loading.loading .input>i.icon:after,.ui.loading.loading.loading.loading.loading.loading>i.icon:after,.ui.loader.loader.loader.loader.loader:after{border-left-color:transparent;border-right-color:transparent}.ui.loading.loading.loading.loading.loading.loading.loading:not(.double):after,.ui.loading.loading.loading.loading.loading.loading.loading:not(.double) .input>i.icon:after,.ui.loading.loading.loading.loading.loading.loading.loading:not(.double)>i.icon:after,.ui.loader.loader.loader.loader.loader.loader:not(.double):after{border-bottom-color:transparent}.ui.loading.loading.loading.loading.loading.loading.segment:after,.ui.loading.loading.loading.loading.loading.loading.form:after{border-left-color:#0000001a;border-right-color:#0000001a}.ui.loading.loading.loading.loading.loading.loading.segment:not(.double):after,.ui.loading.loading.loading.loading.loading.loading.form:not(.double):after{border-bottom-color:#0000001a}.ui.dimmer>.ui.elastic.loader{color:#fff}.ui.inverted.dimmer>.ui.elastic.loader{color:#767676}.ui.elastic.loading.loading:not(.form):not(.segment):after,.ui.elastic.loading.loading .input>i.icon:after,.ui.elastic.loading.loading>i.icon:after,.ui.elastic.loader.loader:after{-webkit-animation:loader 1s infinite cubic-bezier(.27,1.05,.92,.61);animation:loader 1s infinite cubic-bezier(.27,1.05,.92,.61);-webkit-animation-delay:.3s;animation-delay:.3s}.ui.elastic.loading.loading.loading:not(.form):not(.segment):before,.ui.elastic.loading.loading.loading .input>i.icon:before,.ui.elastic.loading.loading.loading>i.icon:before,.ui.elastic.loader.loader:before{-webkit-animation:elastic-loader 1s infinite cubic-bezier(.27,1.05,.92,.61);animation:elastic-loader 1s infinite cubic-bezier(.27,1.05,.92,.61);-moz-animation:currentcolor-elastic-loader 1s infinite cubic-bezier(.27,1.05,.92,.61);border-right-color:transparent}.ui.elastic.inline.loader:empty{-webkit-animation:loader 8s infinite linear;animation:loader 8s infinite linear}.ui.slow.elastic.loading.loading:not(.form):not(.segment):after,.ui.slow.elastic.loading.loading .input>i.icon:after,.ui.slow.elastic.loading.loading>i.icon:after,.ui.slow.elastic.loader.loader:after{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-delay:.45s;animation-delay:.45s}.ui.slow.elastic.loading.loading.loading:not(.form):not(.segment):before,.ui.slow.elastic.loading.loading.loading .input>i.icon:before,.ui.slow.elastic.loading.loading.loading>i.icon:before,.ui.slow.elastic.loader.loader:before{-webkit-animation-duration:1.5s;animation-duration:1.5s}.ui.fast.elastic.loading.loading:not(.form):not(.segment):after,.ui.fast.elastic.loading.loading .input>i.icon:after,.ui.fast.elastic.loading.loading>i.icon:after,.ui.fast.elastic.loader.loader:after{-webkit-animation-duration:.66s;animation-duration:.66s;-webkit-animation-delay:.2s;animation-delay:.2s}.ui.fast.elastic.loading.loading.loading:not(.form):not(.segment):before,.ui.fast.elastic.loading.loading.loading .input>i.icon:before,.ui.fast.elastic.loading.loading.loading>i.icon:before,.ui.fast.elastic.loader.loader:before{-webkit-animation-duration:.66s;animation-duration:.66s}@-webkit-keyframes elastic-loader{0%,1%{border-left-color:transparent;border-bottom-color:transparent}1.1%,50%{border-left-color:inherit}10%,35.1%{border-bottom-color:transparent}10.1%,35%{border-bottom-color:inherit}50.1%{border-left-color:transparent}to{border-left-color:transparent;border-bottom-color:transparent;transform:rotate(360deg)}}@keyframes elastic-loader{0%,1%{border-left-color:transparent;border-bottom-color:transparent}1.1%,50%{border-left-color:inherit}10%,35.1%{border-bottom-color:transparent}10.1%,35%{border-bottom-color:inherit}50.1%{border-left-color:transparent}to{border-left-color:transparent;border-bottom-color:transparent;transform:rotate(360deg)}}@-webkit-keyframes currentcolor-elastic-loader{0%,1%{border-left-color:transparent;border-bottom-color:transparent}1.1%,50%{border-left-color:currentColor}10%,35.1%{border-bottom-color:transparent}10.1%,35%{border-bottom-color:currentColor}50.1%{border-left-color:transparent}to{border-left-color:transparent;border-bottom-color:transparent;transform:rotate(360deg)}}@keyframes currentcolor-elastic-loader{0%,1%{border-left-color:transparent;border-bottom-color:transparent}1.1%,50%{border-left-color:currentColor}10%,35.1%{border-bottom-color:transparent}10.1%,35%{border-bottom-color:currentColor}50.1%{border-left-color:transparent}to{border-left-color:transparent;border-bottom-color:transparent;transform:rotate(360deg)}}.ui.menu{display:flex;margin:1rem 0;font-family:var(--fonts-regular);background:#FFFFFF;font-weight:400;border:1px solid rgba(34,36,38,.15);box-shadow:0 1px 2px #22242626;border-radius:.28571429rem;min-height:2.85714286em}.ui.menu:after{content:"";display:block;height:0;clear:both;visibility:hidden}.ui.menu:first-child{margin-top:0}.ui.menu:last-child{margin-bottom:0}.ui.menu .menu{margin:0}.ui.menu:not(.vertical)>.menu{display:flex}.ui.menu:not(.vertical) .item{display:flex;align-items:center}.ui.menu .item{position:relative;vertical-align:middle;line-height:1;text-decoration:none;-webkit-tap-highlight-color:transparent;flex:0 0 auto;-webkit-user-select:none;-moz-user-select:none;user-select:none;background:none;padding:.92857143em 1.14285714em;text-transform:none;color:#000000de;font-weight:400;transition:background .1s ease,box-shadow .1s ease,color .1s ease}.ui.menu>.item:first-child{border-radius:.28571429rem 0 0 .28571429rem}.ui.menu .item:before{position:absolute;content:"";top:0;right:0;height:100%;width:1px;background:rgba(34,36,38,.1)}.ui.menu .text.item>*,.ui.menu .item>a:not(.ui),.ui.menu .item>p:only-child{-webkit-user-select:text;-moz-user-select:text;user-select:text;line-height:1.3}.ui.menu .item>p:first-child{margin-top:0}.ui.menu .item>p:last-child{margin-bottom:0}.ui.menu .item>i.icon{opacity:.9;float:none;margin:0 .35714286em 0 0}.ui.menu:not(.vertical) .item>.button{position:relative;top:0;margin:-.5em 0;padding-bottom:.78571429em;padding-top:.78571429em;font-size:1em}.ui.menu>.grid,.ui.menu>.container{display:flex;align-items:inherit;flex-direction:inherit}.ui.menu .item>.input{width:100%}.ui.menu:not(.vertical) .item>.input{position:relative;top:0;margin:-.5em 0}.ui.menu .item>.input input{font-size:1em;padding-top:.57142857em;padding-bottom:.57142857em}.ui.menu .header.item,.ui.vertical.menu .header.item{margin:0;background:"";text-transform:normal;font-weight:500}.ui.vertical.menu .item>.header:not(.ui){margin:0 0 .5em;font-size:1em;font-weight:500}.ui.menu .item>i.dropdown.icon{padding:0;float:right;margin:0 0 0 1em}.ui.menu .dropdown.item .menu{min-width:calc(100% - 1px);border-radius:0 0 .28571429rem .28571429rem;background:#FFFFFF;margin:0;box-shadow:0 1px 3px #00000014;flex-direction:column!important}.ui.menu .ui.dropdown .menu>.item{margin:0;text-align:left;font-size:1em!important;padding:.78571429em 1.14285714em!important;background:transparent!important;color:#000000de!important;text-transform:none!important;font-weight:400!important;box-shadow:none!important;transition:none!important}.ui.menu .ui.dropdown .menu>.item:hover{background:rgba(0,0,0,.05)!important;color:#000000f2!important}.ui.menu .ui.dropdown .menu>.selected.item{background:rgba(0,0,0,.05)!important;color:#000000f2!important}.ui.menu .ui.dropdown .menu>.active.item{background:rgba(0,0,0,.03)!important;font-weight:500!important;color:#000000f2!important}.ui.menu .ui.dropdown.item .menu .item:not(.filtered){display:block}.ui.menu .ui.dropdown .menu>.item>.icons,.ui.menu .ui.dropdown .menu>.item>i.icon:not(.dropdown){display:inline-block;font-size:1em!important;float:none;margin:0 .75em 0 0!important}.ui.secondary.menu .dropdown.item>.menu,.ui.text.menu .dropdown.item>.menu{border-radius:.28571429rem;margin-top:.35714286em}.ui.menu .pointing.dropdown.item .menu{margin-top:.75em}.ui.inverted.menu .search.dropdown.item>.search,.ui.inverted.menu .search.dropdown.item>.text{color:#ffffffe6}.ui.vertical.menu .dropdown.item>i.icon{float:right;content:"\f0da";margin-left:1em}.ui.vertical.menu .dropdown.item .menu{left:100%;min-width:0;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;margin:0;box-shadow:0 1px 3px #00000014;border-radius:0 .28571429rem .28571429rem}.ui.vertical.menu .dropdown.item.upward .menu{bottom:0}.ui.vertical.menu .dropdown.item:not(.upward) .menu{top:0}.ui.vertical.menu .active.dropdown.item{border-top-right-radius:0;border-bottom-right-radius:0}.ui.vertical.menu .dropdown.active.item{box-shadow:none}.ui.item.menu .dropdown .menu .item{width:100%}.ui.menu .item>.label:not(.floating){margin-left:1em;padding:.3em .78571429em}.ui.vertical.menu .item>.label{margin-top:-.15em;margin-bottom:-.15em;padding:.3em .78571429em}.ui.menu .item>.floating.label{padding:.3em .78571429em}.ui.menu .item>.label{background:#999999;color:#fff}.ui.menu .item>.image.label img{margin:-.2833em .8em -.2833em -.8em;height:1.5666em}.ui.menu .item>img:not(.ui){display:inline-block;vertical-align:middle;margin:-.3em 0;width:2.5em}.ui.vertical.menu .item>img:not(.ui):only-child{display:block;max-width:100%;width:auto}.ui.menu .list .item:before{background:none!important}.ui.vertical.sidebar.menu>.item:first-child:before{display:block!important}.ui.vertical.sidebar.menu>.item:before{top:auto;bottom:0}@media only screen and (max-width: 767.98px){.ui.menu>.ui.container{width:100%!important;margin-left:0!important;margin-right:0!important}}@media only screen and (min-width: 768px){.ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless)>.container>.item:not(.right):not(.borderless):first-child{border-left:1px solid rgba(34,36,38,.1)}.ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless)>.container>.right.item:not(.borderless):last-child,.ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless)>.container>.right.menu>.item:not(.borderless):last-child{border-right:1px solid rgba(34,36,38,.1)}}.ui.link.menu .item:hover,.ui.menu .dropdown.item:hover,.ui.menu .link.item:hover,.ui.menu a.item:hover{cursor:pointer;background:rgba(0,0,0,.03);color:#000000f2}.ui.link.menu .item:active,.ui.menu .link.item:active,.ui.menu a.item:active{background:rgba(0,0,0,.03);color:#000000f2}.ui.menu .active.item{background:rgba(0,0,0,.05);color:#000000f2;font-weight:400;box-shadow:none}.ui.menu .active.item>i.icon{opacity:1}.ui.menu .active.item:hover,.ui.vertical.menu .active.item:hover{background-color:#0000000d;color:#000000f2}.ui.ui.menu .item.disabled{cursor:default;background-color:transparent;color:#2828284d;pointer-events:none}.ui.menu:not(.vertical) .left.item,.ui.menu:not(.vertical) .left.menu{display:flex;margin-right:auto!important}.ui.menu:not(.vertical) .right.item,.ui.menu:not(.vertical) .right.menu{display:flex;margin-left:auto!important}.ui.menu:not(.vertical) :not(.dropdown)>.left.menu,.ui.menu:not(.vertical) :not(.dropdown)>.right.menu{display:inherit}.ui.menu:not(.vertical) .center.item,.ui.menu:not(.vertical) .center.menu{display:flex;margin-left:auto!important;margin-right:auto!important}.ui.menu .right.item:before,.ui.menu .right.menu>.item:before{right:auto;left:0}.ui.menu .center.item:last-child:before,.ui.menu .center.menu>.item:last-child:before{display:none}.ui.vertical.menu{display:block;flex-direction:column;background:#FFFFFF;box-shadow:0 1px 2px #22242626}.ui.vertical.menu .item{display:block;background:none;border-top:none;border-right:none}.ui.vertical.menu>.item:first-child{border-radius:.28571429rem .28571429rem 0 0}.ui.vertical.menu>.item:last-child{border-radius:0 0 .28571429rem .28571429rem}.ui.vertical.menu .item>.label{float:right;text-align:center}.ui.vertical.menu .item>i.icon,.ui.vertical.menu .item>i.icons{width:1.18em;float:right;margin:0 0 0 .5em}.ui.vertical.menu .item>.label+i.icon{float:none;margin:0 .5em 0 0}.ui.vertical.menu .item:before{position:absolute;content:"";top:0;left:0;width:100%;height:1px;background:rgba(34,36,38,.1)}.ui.vertical.menu .item:first-child:before{display:none!important}.ui.vertical.menu .item>.menu{margin:.5em -1.14285714em 0}.ui.vertical.menu .menu .item{background:none;padding:.5em 1.33333333em;font-size:.85714286em;color:#00000080}.ui.vertical.menu .item .menu a.item:hover,.ui.vertical.menu .item .menu .link.item:hover{color:#000000d9}.ui.vertical.menu .menu .item:before{display:none}.ui.vertical.menu .active.item{background:rgba(0,0,0,.05);border-radius:0;box-shadow:none}.ui.vertical.menu>.active.item:first-child{border-radius:.28571429rem .28571429rem 0 0}.ui.vertical.menu>.active.item:last-child{border-radius:0 0 .28571429rem .28571429rem}.ui.vertical.menu>.active.item:only-child{border-radius:.28571429rem}.ui.vertical.menu .active.item .menu .active.item{border-left:none}.ui.vertical.menu .item .menu .active.item{background-color:transparent;font-weight:500;color:#000000f2}.ui.tabular.menu{border-radius:0;box-shadow:none!important;border:none;background:none transparent;border-bottom:1px solid #D4D4D5}.ui.tabular.fluid.menu{width:calc(100% + 2px)!important}.ui.tabular.menu .item{background:transparent;border-bottom:none;border-left:1px solid transparent;border-right:1px solid transparent;border-top:2px solid transparent;padding:.92857143em 1.42857143em;color:#000000de}.ui.tabular.menu .item:before{display:none}.ui.tabular.menu .item:hover{background-color:transparent;color:#000c}.ui.tabular.menu .active.item{background:none #FFFFFF;color:#000000f2;border-top-width:1px;border-color:#d4d4d5;font-weight:500;margin-bottom:-1px;box-shadow:none;border-radius:.28571429rem .28571429rem 0 0!important}.ui.tabular.menu+.attached:not(.top).segment,.ui.tabular.menu+.attached:not(.top).segment+.attached:not(.top).segment{border-top:none;margin-left:0;margin-top:0;margin-right:0;width:100%}.top.attached.segment+.ui.bottom.tabular.menu{position:relative;width:calc(100% + 2px);left:-1px}.ui.bottom.tabular.menu{background:none transparent;border-radius:0;box-shadow:none!important;border-bottom:none;border-top:1px solid #D4D4D5}.ui.bottom.tabular.menu .item{background:none;border-left:1px solid transparent;border-right:1px solid transparent;border-bottom:1px solid transparent;border-top:none}.ui.bottom.tabular.menu .active.item{background:none #FFFFFF;color:#000000f2;border-color:#d4d4d5;margin:-1px 0 0;border-radius:0 0 .28571429rem .28571429rem!important}.ui.vertical.tabular.menu{background:none transparent;border-radius:0;box-shadow:none!important;border-bottom:none;border-right:1px solid #D4D4D5}.ui.vertical.tabular.menu .item{background:none;border-left:1px solid transparent;border-bottom:1px solid transparent;border-top:1px solid transparent;border-right:none}.ui.vertical.tabular.menu .active.item{background:none #FFFFFF;color:#000000f2;border-color:#d4d4d5;margin:0 -1px 0 0;border-radius:.28571429rem 0 0 .28571429rem!important}.ui.vertical.right.tabular.menu{background:none transparent;border-radius:0;box-shadow:none!important;border-bottom:none;border-right:none;border-left:1px solid #D4D4D5}.ui.vertical.right.tabular.menu .item{background:none;border-right:1px solid transparent;border-bottom:1px solid transparent;border-top:1px solid transparent;border-left:none}.ui.vertical.right.tabular.menu .active.item{background:none #FFFFFF;color:#000000f2;border-color:#d4d4d5;margin:0 0 0 -1px;border-radius:0 .28571429rem .28571429rem 0!important}.ui.tabular.menu .active.dropdown.item{margin-bottom:0;border-left:1px solid transparent;border-right:1px solid transparent;border-top:2px solid transparent;border-bottom:none}.ui.pagination.menu{margin:0;display:inline-flex;vertical-align:middle}.ui.pagination.menu .item:last-child{border-radius:0 .28571429rem .28571429rem 0}.ui.compact.menu .item:last-child{border-radius:0 .28571429rem .28571429rem 0}.ui.pagination.menu .item:last-child:before{display:none}.ui.pagination.menu .item{min-width:3em;text-align:center}.ui.pagination.menu .icon.item i.icon{vertical-align:top}.ui.pagination.menu .active.item{border-top:none;padding-top:.92857143em;background-color:#0000000d;color:#000000f2;box-shadow:none}.ui.secondary.menu{background:none;margin-left:-.35714286em;margin-right:-.35714286em;border-radius:0;border:none;box-shadow:none}.ui.secondary.menu .item{align-self:center;box-shadow:none;border:none;padding:.78571429em .92857143em;margin:0 .35714286em;background:none;transition:color .1s ease;border-radius:.28571429rem}.ui.secondary.menu .item:before{display:none!important}.ui.secondary.menu .header.item{border-radius:0;border-right:none;background:none transparent}.ui.secondary.menu .item>img:not(.ui){margin:0}.ui.secondary.menu .dropdown.item:hover,.ui.secondary.menu .link.item:hover,.ui.secondary.menu a.item:hover{background:rgba(0,0,0,.05);color:#000000f2}.ui.secondary.menu .active.item{box-shadow:none;background:rgba(0,0,0,.05);color:#000000f2;border-radius:.28571429rem}.ui.secondary.menu .active.item:hover{box-shadow:none;background:rgba(0,0,0,.05);color:#000000f2}.ui.secondary.inverted.menu .link.item:not(.disabled),.ui.secondary.inverted.menu a.item:not(.disabled){color:#ffffffb3}.ui.secondary.inverted.menu .dropdown.item:hover,.ui.secondary.inverted.menu .link.item:hover,.ui.secondary.inverted.menu a.item:hover{background:rgba(255,255,255,.08);color:#fff}.ui.secondary.inverted.menu .active.item{background:rgba(255,255,255,.15);color:#fff}.ui.secondary.item.menu{margin-left:0;margin-right:0}.ui.secondary.item.menu .item:last-child{margin-right:0}.ui.secondary.attached.menu{box-shadow:none}.ui.vertical.secondary.menu .item:not(.dropdown)>.menu{margin:0 -.92857143em}.ui.vertical.secondary.menu .item:not(.dropdown)>.menu>.item{margin:0;padding:.5em 1.33333333em}.ui.secondary.vertical.menu>.item{border:none;margin:0 0 .35714286em;border-radius:.28571429rem!important}.ui.secondary.vertical.menu>.header.item{border-radius:0}.ui.vertical.secondary.menu .item>.menu .item{background-color:transparent}.ui.secondary.inverted.menu{background-color:transparent}.ui.secondary.pointing.menu{margin-left:0;margin-right:0;border-bottom:2px solid rgba(34,36,38,.15)}.ui.secondary.pointing.menu .item{border-bottom-color:transparent;border-bottom-style:solid;border-radius:0;align-self:flex-end;margin:0 0 -2px;padding:.85714286em 1.14285714em;border-bottom-width:2px;transition:color .1s ease}.ui.secondary.pointing.menu .ui.dropdown .menu .item{border-bottom-width:0}.ui.secondary.pointing.menu .item>.label:not(.floating){margin-top:-.3em;margin-bottom:-.3em}.ui.secondary.pointing.menu .item>.circular.label{margin-top:-.5em;margin-bottom:-.5em}.ui.secondary.pointing.menu .header.item{color:#000000d9!important}.ui.secondary.pointing.menu .text.item{box-shadow:none!important}.ui.secondary.pointing.menu .item:after{display:none}.ui.secondary.pointing.menu .dropdown.item:hover,.ui.secondary.pointing.menu .link.item:hover,.ui.secondary.pointing.menu a.item:hover{background-color:transparent;color:#000000de}.ui.secondary.pointing.menu .dropdown.item:active,.ui.secondary.pointing.menu .link.item:active,.ui.secondary.pointing.menu a.item:active{background-color:transparent;border-color:#22242626}.ui.secondary.pointing.menu .active.item{background-color:transparent;box-shadow:none;border-color:currentColor;font-weight:500;color:#000000f2}.ui.secondary.pointing.menu .active.item:hover{border-color:currentColor;color:#000000f2}.ui.secondary.pointing.menu .active.dropdown.item{border-color:transparent}.ui.secondary.vertical.pointing.menu{border-bottom-width:0;border-right-width:2px;border-right-style:solid;border-right-color:#22242626}.ui.secondary.vertical.pointing.menu .item{border-bottom:none;border-right-style:solid;border-right-color:transparent;border-radius:0!important;margin:0 -2px 0 0;border-right-width:2px}.ui.secondary.vertical.pointing.menu .active.item{border-color:currentColor}.ui.secondary.inverted.pointing.menu{border-color:#ffffff1a}.ui.secondary.inverted.pointing.menu .item:not(.disabled){color:#ffffffe6}.ui.secondary.inverted.pointing.menu .header.item{color:#fff!important}.ui.secondary.inverted.pointing.menu .link.item:hover,.ui.secondary.inverted.pointing.menu a.item:hover{color:#fff}.ui.ui.secondary.inverted.pointing.menu .active.item{border-color:#fff;color:#fff;background-color:transparent}.ui.text.menu{background:none transparent;border-radius:0;box-shadow:none;border:none;margin:1em -.5em}.ui.text.menu .item{border-radius:0;box-shadow:none;align-self:center;margin:0;padding:.35714286em .5em;font-weight:400;color:#0009;transition:opacity .1s ease}.ui.text.menu .item:before,.ui.text.menu .menu .item:before{display:none!important}.ui.text.menu .header.item{background-color:transparent;opacity:1;color:#000000d9;font-size:.92857143em;text-transform:uppercase;font-weight:500}.ui.text.menu .item>img:not(.ui){margin:0}.ui.text.item.menu .item{margin:0}.ui.vertical.text.menu{margin:1em 0}.ui.vertical.text.menu:first-child{margin-top:0}.ui.vertical.text.menu:last-child{margin-bottom:0}.ui.vertical.text.menu .item{margin:.57142857em 0;padding-left:0;padding-right:0}.ui.vertical.text.menu .item>i.icon{float:none;margin:0 .35714286em 0 0}.ui.vertical.text.menu .header.item{margin:.57142857em 0 .71428571em}.ui.vertical.text.menu .item:not(.dropdown)>.menu{margin:0}.ui.vertical.text.menu .item:not(.dropdown)>.menu>.item{margin:0;padding:.5em 0}.ui.text.menu .item:hover{opacity:1;background-color:transparent}.ui.text.menu .active.item{background-color:transparent;border:none;box-shadow:none;font-weight:400;color:#000000f2}.ui.text.menu .active.item:hover{background-color:transparent}.ui.text.pointing.menu .active.item:after{box-shadow:none}.ui.text.attached.menu{box-shadow:none}.ui.inverted.text.menu,.ui.inverted.text.menu .item,.ui.inverted.text.menu .item:hover,.ui.inverted.text.menu .active.item{background-color:transparent}.ui.fluid.text.menu{margin-left:0;margin-right:0}.ui.vertical.icon.menu{display:inline-block;width:auto}.ui.icon.menu .item{height:auto;text-align:center;color:#1b1c1d}.ui.icon.menu .item>i.icon:not(.dropdown){margin:0;opacity:1}.ui.icon.menu i.icon:before{opacity:1}.ui.menu .icon.item>i.icon{width:auto;margin:0 auto}.ui.vertical.icon.menu .item>i.icon:not(.dropdown){display:block;opacity:1;margin:0 auto;float:none}.ui.inverted.icon.menu .item{color:#fff}.ui.labeled.icon.menu{text-align:center}.ui.labeled.icon.menu .item{min-width:6em;flex-direction:column}.ui.labeled.icon.menu>.item>i.icon:not(.dropdown){height:1em;display:block;font-size:1.71428571em!important;margin:0 auto .5rem!important}.ui.fluid.labeled.icon.menu>.item{min-width:0}@media only screen and (max-width: 767.98px){.ui.stackable.menu{flex-direction:column}.ui.stackable.menu .item{width:100%!important}.ui.stackable.menu .item:before{position:absolute;content:"";top:auto;bottom:0;left:0;width:100%;height:1px;background:rgba(34,36,38,.1)}.ui.stackable.menu .left.menu,.ui.stackable.menu .left.item{margin-right:0!important}.ui.stackable.menu .right.menu,.ui.stackable.menu .right.item{margin-left:0!important}.ui.stackable.menu .center.menu,.ui.stackable.menu .center.item{margin-left:0!important;margin-right:0!important}.ui.stackable.menu .right.menu,.ui.stackable.menu .center.menu,.ui.stackable.menu .left.menu{flex-direction:column}}.ui.ui.ui.menu .primary.active.item,.ui.ui.primary.menu .active.item:hover,.ui.ui.primary.menu .active.item{color:#2185d0}.ui.ui.ui.menu .red.active.item,.ui.ui.red.menu .active.item:hover,.ui.ui.red.menu .active.item{color:#db2828}.ui.ui.ui.menu .orange.active.item,.ui.ui.orange.menu .active.item:hover,.ui.ui.orange.menu .active.item{color:#f2711c}.ui.ui.ui.menu .yellow.active.item,.ui.ui.yellow.menu .active.item:hover,.ui.ui.yellow.menu .active.item{color:#fbbd08}.ui.ui.ui.menu .olive.active.item,.ui.ui.olive.menu .active.item:hover,.ui.ui.olive.menu .active.item{color:#b5cc18}.ui.ui.ui.menu .green.active.item,.ui.ui.green.menu .active.item:hover,.ui.ui.green.menu .active.item{color:#21ba45}.ui.ui.ui.menu .teal.active.item,.ui.ui.teal.menu .active.item:hover,.ui.ui.teal.menu .active.item{color:#00b5ad}.ui.ui.ui.menu .blue.active.item,.ui.ui.blue.menu .active.item:hover,.ui.ui.blue.menu .active.item{color:#2185d0}.ui.ui.ui.menu .violet.active.item,.ui.ui.violet.menu .active.item:hover,.ui.ui.violet.menu .active.item{color:#6435c9}.ui.ui.ui.menu .purple.active.item,.ui.ui.purple.menu .active.item:hover,.ui.ui.purple.menu .active.item{color:#a333c8}.ui.ui.ui.menu .pink.active.item,.ui.ui.pink.menu .active.item:hover,.ui.ui.pink.menu .active.item{color:#e03997}.ui.ui.ui.menu .brown.active.item,.ui.ui.brown.menu .active.item:hover,.ui.ui.brown.menu .active.item{color:#a5673f}.ui.ui.ui.menu .grey.active.item,.ui.ui.grey.menu .active.item:hover,.ui.ui.grey.menu .active.item{color:#767676}.ui.ui.ui.menu .black.active.item,.ui.ui.black.menu .active.item:hover,.ui.ui.black.menu .active.item{color:#1b1c1d}.ui.inverted.menu{border:0 solid transparent;background:#1B1C1D;box-shadow:none}.ui.inverted.menu .item,.ui.inverted.menu .item>a:not(.ui){background:transparent;color:#ffffffe6}.ui.inverted.menu .item.menu{background:transparent}.ui.inverted.menu .item:before{background:rgba(255,255,255,.08)}.ui.vertical.inverted.menu .item:before{background:rgba(255,255,255,.08)}.ui.vertical.inverted.menu .menu .item,.ui.vertical.inverted.menu .menu .item a:not(.ui){color:#ffffff80}.ui.inverted.menu .header.item{margin:0;background:transparent;box-shadow:none}.ui.ui.inverted.menu .item.disabled{color:#e1e1e14d}.ui.link.inverted.menu .item:hover,.ui.inverted.menu .dropdown.item:hover,.ui.inverted.menu .link.item:hover,.ui.inverted.menu a.item:hover{background:rgba(255,255,255,.08);color:#fff}.ui.vertical.inverted.menu .item .menu a.item:hover,.ui.vertical.inverted.menu .item .menu .link.item:hover{background:transparent;color:#fff}.ui.inverted.menu a.item:active,.ui.inverted.menu .link.item:active{background:rgba(255,255,255,.08);color:#fff}.ui.inverted.menu .active.item{background:#3D3E3F;color:#fff!important}.ui.inverted.vertical.menu .item .menu .active.item{background:transparent;color:#fff}.ui.inverted.pointing.menu .active.item:after{background:#3D3E3F;margin:0!important;box-shadow:none!important;border:none!important}.ui.inverted.menu .active.item:hover{background:#3D3E3F;color:#fff!important}.ui.inverted.pointing.menu .active.item:hover:after{background:#3D3E3F}.ui.floated.menu{float:left;margin:0 .5rem 0 0}.ui.floated.menu .item:last-child:before{display:none}.ui.right.floated.menu{float:right;margin:0 0 0 .5rem}.ui.ui.ui.inverted.menu .primary.active.item,.ui.ui.inverted.primary.menu{background-color:#2185d0}.ui.inverted.primary.menu .item:before{background-color:#2224261a}.ui.ui.inverted.primary.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.primary.menu .active.item{background-color:#1678c2}.ui.ui.ui.inverted.menu .red.active.item,.ui.ui.inverted.red.menu{background-color:#db2828}.ui.inverted.red.menu .item:before{background-color:#2224261a}.ui.ui.inverted.red.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.red.menu .active.item{background-color:#d01919}.ui.ui.ui.inverted.menu .orange.active.item,.ui.ui.inverted.orange.menu{background-color:#f2711c}.ui.inverted.orange.menu .item:before{background-color:#2224261a}.ui.ui.inverted.orange.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.orange.menu .active.item{background-color:#f26202}.ui.ui.ui.inverted.menu .yellow.active.item,.ui.ui.inverted.yellow.menu{background-color:#fbbd08}.ui.inverted.yellow.menu .item:before{background-color:#2224261a}.ui.ui.inverted.yellow.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.yellow.menu .active.item{background-color:#eaae00}.ui.ui.ui.inverted.menu .olive.active.item,.ui.ui.inverted.olive.menu{background-color:#b5cc18}.ui.inverted.olive.menu .item:before{background-color:#2224261a}.ui.ui.inverted.olive.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.olive.menu .active.item{background-color:#a7bd0d}.ui.ui.ui.inverted.menu .green.active.item,.ui.ui.inverted.green.menu{background-color:#21ba45}.ui.inverted.green.menu .item:before{background-color:#2224261a}.ui.ui.inverted.green.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.green.menu .active.item{background-color:#16ab39}.ui.ui.ui.inverted.menu .teal.active.item,.ui.ui.inverted.teal.menu{background-color:#00b5ad}.ui.inverted.teal.menu .item:before{background-color:#2224261a}.ui.ui.inverted.teal.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.teal.menu .active.item{background-color:#009c95}.ui.ui.ui.inverted.menu .blue.active.item,.ui.ui.inverted.blue.menu{background-color:#2185d0}.ui.inverted.blue.menu .item:before{background-color:#2224261a}.ui.ui.inverted.blue.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.blue.menu .active.item{background-color:#1678c2}.ui.ui.ui.inverted.menu .violet.active.item,.ui.ui.inverted.violet.menu{background-color:#6435c9}.ui.inverted.violet.menu .item:before{background-color:#2224261a}.ui.ui.inverted.violet.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.violet.menu .active.item{background-color:#5829bb}.ui.ui.ui.inverted.menu .purple.active.item,.ui.ui.inverted.purple.menu{background-color:#a333c8}.ui.inverted.purple.menu .item:before{background-color:#2224261a}.ui.ui.inverted.purple.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.purple.menu .active.item{background-color:#9627ba}.ui.ui.ui.inverted.menu .pink.active.item,.ui.ui.inverted.pink.menu{background-color:#e03997}.ui.inverted.pink.menu .item:before{background-color:#2224261a}.ui.ui.inverted.pink.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.pink.menu .active.item{background-color:#e61a8d}.ui.ui.ui.inverted.menu .brown.active.item,.ui.ui.inverted.brown.menu{background-color:#a5673f}.ui.inverted.brown.menu .item:before{background-color:#2224261a}.ui.ui.inverted.brown.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.brown.menu .active.item{background-color:#975b33}.ui.ui.ui.inverted.menu .grey.active.item,.ui.ui.inverted.grey.menu{background-color:#767676}.ui.inverted.grey.menu .item:before{background-color:#2224261a}.ui.ui.inverted.grey.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.grey.menu .active.item{background-color:#838383}.ui.ui.ui.inverted.menu .black.active.item,.ui.ui.inverted.black.menu{background-color:#1b1c1d}.ui.inverted.black.menu .item:before{background-color:#2224261a}.ui.ui.inverted.black.menu .active.item{background-color:#0000001a}.ui.inverted.pointing.black.menu .active.item{background-color:#27292a}.ui.ui.ui.inverted.pointing.menu .active.item:after{background-color:inherit}.ui.fitted.menu .item,.ui.fitted.menu .item .menu .item,.ui.menu .fitted.item{padding:0}.ui.horizontally.fitted.menu .item,.ui.horizontally.fitted.menu .item .menu .item,.ui.menu .horizontally.fitted.item{padding-top:.92857143em;padding-bottom:.92857143em}.ui.vertically.fitted.menu .item,.ui.vertically.fitted.menu .item .menu .item,.ui.menu .vertically.fitted.item{padding-left:1.14285714em;padding-right:1.14285714em}.ui.borderless.menu .item:before,.ui.borderless.menu .item .menu .item:before,.ui.menu .borderless.item:before{background:none!important}.ui.compact.menu{display:inline-flex;margin:0;vertical-align:middle}.ui.compact.vertical.menu{display:-ms-inline-flexbox!important;display:inline-block}.ui.compact.menu:not(.secondary) .item:last-child{border-radius:0 .28571429rem .28571429rem 0}.ui.compact.menu .item:last-child:before{display:none}.ui.compact.vertical.menu{width:auto!important}.ui.compact.vertical.menu .item:last-child:before{display:block}.ui.menu.fluid,.ui.vertical.menu.fluid{width:100%!important}.ui.item.menu,.ui.item.menu .item{width:100%;padding-left:0!important;padding-right:0!important;margin-left:0!important;margin-right:0!important;text-align:center;justify-content:center}.ui.attached.item.menu:not(.tabular){margin:0 -1px!important}.ui.item.menu .item:last-child:before{display:none}.ui.menu.two.item .item{width:50%}.ui.menu.three.item .item{width:33.333%}.ui.menu.four.item .item{width:25%}.ui.menu.five.item .item{width:20%}.ui.menu.six.item .item{width:16.666%}.ui.menu.seven.item .item{width:14.285%}.ui.menu.eight.item .item{width:12.5%}.ui.menu.nine.item .item{width:11.11%}.ui.menu.ten.item .item{width:10%}.ui.menu.eleven.item .item{width:9.09%}.ui.menu.twelve.item .item{width:8.333%}.ui.menu.fixed{position:fixed;z-index:101;margin:0;width:100%}.ui.menu.fixed,.ui.menu.fixed .item:first-child,.ui.menu.fixed .item:last-child{border-radius:0!important}.ui.fixed.menu,.ui[class*="top fixed"].menu{inset:0 auto auto 0}.ui[class*="top fixed"].menu{border-top:none;border-left:none;border-right:none}.ui[class*="right fixed"].menu{border-top:none;border-bottom:none;border-right:none;inset:0 0 auto auto;width:auto;height:100%}.ui[class*="bottom fixed"].menu{border-bottom:none;border-left:none;border-right:none;inset:auto auto 0 0}.ui[class*="left fixed"].menu{border-top:none;border-bottom:none;border-left:none;inset:0 auto auto 0;width:auto;height:100%}.ui.fixed.menu+.ui.grid{padding-top:2.75rem}.ui.pointing.menu .item:after{visibility:hidden;position:absolute;content:"";top:100%;left:50%;transform:translate(-50%) translateY(-50%) rotate(45deg);background:none;margin:.5px 0 0;width:.57142857em;height:.57142857em;border:none;border-bottom:1px solid #D4D4D5;border-right:1px solid #D4D4D5;z-index:2;transition:background .1s ease}.ui.vertical.pointing.menu .item:after{position:absolute;inset:50% 0 auto auto;transform:translate(50%) translateY(-50%) rotate(45deg);margin:0 -.5px 0 0;border:none;border-top:1px solid #D4D4D5;border-right:1px solid #D4D4D5}.ui.pointing.menu .ui.dropdown .menu .item:after,.ui.vertical.pointing.menu .ui.dropdown .menu .item:after{display:none}.ui.pointing.menu .active.item:after{visibility:visible}.ui.pointing.menu .active.dropdown.item:after{visibility:hidden}.ui.pointing.menu .dropdown.active.item:after,.ui.pointing.menu .active.item .menu .active.item:after{display:none}.ui.pointing.menu .active.item:after{background-color:#f2f2f2}.ui.pointing.menu .active.item:hover:after{background-color:#f2f2f2}.ui.vertical.pointing.menu .active.item:hover:after{background-color:#f2f2f2}.ui.vertical.pointing.menu .active.item:after{background-color:#f2f2f2}.ui.vertical.pointing.menu .menu .active.item:after{background-color:#fff}.ui.inverted.pointing.menu .primary.active.item:after{background-color:#2185d0}.ui.inverted.pointing.menu .secondary.active.item:after{background-color:#1b1c1d}.ui.inverted.pointing.menu .red.active.item:after{background-color:#db2828}.ui.inverted.pointing.menu .orange.active.item:after{background-color:#f2711c}.ui.inverted.pointing.menu .yellow.active.item:after{background-color:#fbbd08}.ui.inverted.pointing.menu .olive.active.item:after{background-color:#b5cc18}.ui.inverted.pointing.menu .green.active.item:after{background-color:#21ba45}.ui.inverted.pointing.menu .teal.active.item:after{background-color:#00b5ad}.ui.inverted.pointing.menu .blue.active.item:after{background-color:#2185d0}.ui.inverted.pointing.menu .violet.active.item:after{background-color:#6435c9}.ui.inverted.pointing.menu .purple.active.item:after{background-color:#a333c8}.ui.inverted.pointing.menu .pink.active.item:after{background-color:#e03997}.ui.inverted.pointing.menu .brown.active.item:after{background-color:#a5673f}.ui.inverted.pointing.menu .grey.active.item:after{background-color:#767676}.ui.inverted.pointing.menu .black.active.item:after{background-color:#1b1c1d}.ui.attached.menu{top:0;bottom:0;border-radius:0;margin:0 -1px;width:calc(100% + 2px);max-width:calc(100% + 2px);box-shadow:none}.ui.attached+.ui.attached.menu:not(.top){border-top:none}.ui[class*="top attached"].menu{bottom:0;margin-bottom:0;top:0;margin-top:1rem;border-radius:.28571429rem .28571429rem 0 0}.ui.menu[class*="top attached"]:first-child{margin-top:0}.ui[class*="bottom attached"].menu{bottom:0;margin-top:0;top:0;margin-bottom:1rem;box-shadow:0 1px 2px #22242626,none;border-radius:0 0 .28571429rem .28571429rem}.ui[class*="bottom attached"].menu:last-child{margin-bottom:0}.ui.top.attached.menu>.item:first-child{border-radius:.28571429rem 0 0}.ui.bottom.attached.menu>.item:first-child{border-radius:0 0 0 .28571429rem}.ui.attached.menu:not(.tabular){border:1px solid #D4D4D5}.ui.attached.inverted.menu{border:none}.ui.attached.tabular.menu{margin-left:0;margin-right:0;width:100%}.ui.menu{font-size:1rem}.ui.vertical.menu{width:15rem}.ui.mini.menu,.ui.mini.menu .dropdown,.ui.mini.menu .dropdown .menu>.item{font-size:.78571429rem}.ui.mini.vertical.menu:not(.icon){width:9rem}.ui.tiny.menu,.ui.tiny.menu .dropdown,.ui.tiny.menu .dropdown .menu>.item{font-size:.85714286rem}.ui.tiny.vertical.menu:not(.icon){width:11rem}.ui.small.menu,.ui.small.menu .dropdown,.ui.small.menu .dropdown .menu>.item{font-size:.92857143rem}.ui.small.vertical.menu:not(.icon){width:13rem}.ui.large.menu,.ui.large.menu .dropdown,.ui.large.menu .dropdown .menu>.item{font-size:1.07142857rem}.ui.large.vertical.menu:not(.icon){width:18rem}.ui.big.menu,.ui.big.menu .dropdown,.ui.big.menu .dropdown .menu>.item{font-size:1.14285714rem}.ui.big.vertical.menu:not(.icon){width:20rem}.ui.huge.menu,.ui.huge.menu .dropdown,.ui.huge.menu .dropdown .menu>.item{font-size:1.21428571rem}.ui.huge.vertical.menu:not(.icon){width:22rem}.ui.massive.menu,.ui.massive.menu .dropdown,.ui.massive.menu .dropdown .menu>.item{font-size:1.28571429rem}.ui.massive.vertical.menu:not(.icon){width:25rem}.ui.menu .ui.inverted.inverted.dropdown.item .menu{background:#1B1C1D;box-shadow:none}.ui.menu .ui.inverted.dropdown .menu>.item{color:#fffc!important}.ui.menu .ui.inverted.dropdown .menu>.active.item{background:transparent!important;color:#fffc!important}.ui.menu .ui.inverted.dropdown .menu>.item:hover{background:rgba(255,255,255,.08)!important;color:#fffc!important}.ui.menu .ui.inverted.dropdown .menu>.selected.item{background:rgba(255,255,255,.15)!important;color:#fffc!important}.ui.vertical.menu .inverted.dropdown.item .menu{box-shadow:none}.ui.message{position:relative;min-height:1em;margin:1em 0;background:#F8F8F9;padding:1em 1.5em;line-height:1.4285em;color:#000000de;transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;border-radius:.28571429rem;box-shadow:0 0 0 1px #22242638 inset,0 0 #0000}.ui.message:first-child{margin-top:0}.ui.message:last-child{margin-bottom:0}.ui.message .header{display:block;font-family:var(--fonts-regular);font-weight:500;margin:-.14285714em 0 0}.ui.message .header:not(.ui){font-size:1.14285714em}.ui.message p{opacity:.85;margin:.75em 0}.ui.message p:first-child{margin-top:0}.ui.message p:last-child{margin-bottom:0}.ui.message .header+p{margin-top:.25em}.ui.message .list:not(.ui){text-align:left;padding:0;opacity:.85;list-style-position:inside;margin:.5em 0 0}.ui.message .list:not(.ui):first-child{margin-top:0}.ui.message .list:not(.ui):last-child{margin-bottom:0}.ui.message .list:not(.ui) li{position:relative;list-style-type:none;margin:0 0 .3em 1em;padding:0}.ui.message .list:not(.ui) li:before{position:absolute;content:"\2022";left:-1em;height:100%;vertical-align:baseline}.ui.message .list:not(.ui) li:last-child{margin-bottom:0}.ui.message>i.icon{margin-right:.6em}.ui.message>.close.icon{cursor:pointer;position:absolute;margin:0;top:.78575em;right:.5em;opacity:.7;transition:opacity .1s ease}.ui.message>.close.icon:hover{opacity:1}.ui.message>:first-child{margin-top:0}.ui.message>:last-child{margin-bottom:0}.ui.dropdown .menu>.message{margin:0 -1px}.ui.visible.visible.visible.visible.message{display:block}.ui.icon.visible.visible.visible.visible.message{display:flex}.ui.hidden.hidden.hidden.hidden.message{display:none}.ui.compact.message{display:inline-block}.ui.compact.icon.message{display:inline-flex;width:auto}.ui.attached.message{margin-bottom:-1px;border-radius:.28571429rem .28571429rem 0 0;box-shadow:0 0 0 1px #22242626 inset;margin-left:-1px;margin-right:-1px}.ui.attached+.ui.attached.message:not(.top):not(.bottom){margin-top:-1px;border-radius:0}.ui.bottom.attached.message{margin-top:-1px;border-radius:0 0 .28571429rem .28571429rem;box-shadow:0 0 0 1px #22242626 inset,0 1px 2px #22242626}.ui.bottom.attached.message:not(:last-child){margin-bottom:1em}.ui.attached.icon.message{width:auto}.ui.icon.message{display:flex;width:100%;align-items:center}.ui.icon.message>i.icon:not(.close){display:block;flex:0 0 auto;width:auto;line-height:1;vertical-align:middle;font-size:3em;opacity:.8}.ui.icon.message>.content{display:block;flex:1 1 auto;vertical-align:middle}.ui.icon.message>i.icon:not(.close)+.content{padding-left:0}.ui.icon.message>i.circular.icon{width:1em}.ui.floating.message{box-shadow:0 0 0 1px #22242638 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.positive.message{background-color:#fcfff5;color:#2c662d}.ui.positive.message,.ui.attached.positive.message{box-shadow:0 0 0 1px #a3c293 inset,0 0 #0000}.ui.floating.positive.message{box-shadow:0 0 0 1px #a3c293 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.positive.message .header{color:#1a531b}.ui.negative.message{background-color:#fff6f6;color:#9f3a38}.ui.negative.message,.ui.attached.negative.message{box-shadow:0 0 0 1px #e0b4b4 inset,0 0 #0000}.ui.floating.negative.message{box-shadow:0 0 0 1px #e0b4b4 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.negative.message .header{color:#912d2b}.ui.info.message{background-color:#f8ffff;color:#276f86}.ui.info.message,.ui.attached.info.message{box-shadow:0 0 0 1px #a9d5de inset,0 0 #0000}.ui.floating.info.message{box-shadow:0 0 0 1px #a9d5de inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.info.message .header{color:#0e566c}.ui.warning.message{background-color:#fffaf3;color:#573a08}.ui.warning.message,.ui.attached.warning.message{box-shadow:0 0 0 1px #c9ba9b inset,0 0 #0000}.ui.floating.warning.message{box-shadow:0 0 0 1px #c9ba9b inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.warning.message .header{color:#794b02}.ui.error.message{background-color:#fff6f6;color:#9f3a38}.ui.error.message,.ui.attached.error.message{box-shadow:0 0 0 1px #e0b4b4 inset,0 0 #0000}.ui.floating.error.message{box-shadow:0 0 0 1px #e0b4b4 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.error.message .header{color:#912d2b}.ui.success.message{background-color:#fcfff5;color:#2c662d}.ui.success.message,.ui.attached.success.message{box-shadow:0 0 0 1px #a3c293 inset,0 0 #0000}.ui.floating.success.message{box-shadow:0 0 0 1px #a3c293 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.success.message .header{color:#1a531b}.ui.primary.message{background-color:#dff0ff;color:#ffffffe6}.ui.primary.message,.ui.attached.primary.message{box-shadow:0 0 0 1px #2185d0 inset,0 0 #0000}.ui.floating.primary.message{box-shadow:0 0 0 1px #2185d0 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.primary.message .header{color:#f2f2f2e6}.ui.secondary.message{background-color:#f4f4f4;color:#ffffffe6}.ui.secondary.message,.ui.attached.secondary.message{box-shadow:0 0 0 1px #1b1c1d inset,0 0 #0000}.ui.floating.secondary.message{box-shadow:0 0 0 1px #1b1c1d inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.secondary.message .header{color:#f2f2f2e6}.ui.red.message{background-color:#ffe8e6;color:#db2828}.ui.red.message,.ui.attached.red.message{box-shadow:0 0 0 1px #db2828 inset,0 0 #0000}.ui.floating.red.message{box-shadow:0 0 0 1px #db2828 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.red.message .header{color:#c82121}.ui.orange.message{background-color:#ffedde;color:#f2711c}.ui.orange.message,.ui.attached.orange.message{box-shadow:0 0 0 1px #f2711c inset,0 0 #0000}.ui.floating.orange.message{box-shadow:0 0 0 1px #f2711c inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.orange.message .header{color:#e7640d}.ui.yellow.message{background-color:#fff8db;color:#b58105}.ui.yellow.message,.ui.attached.yellow.message{box-shadow:0 0 0 1px #b58105 inset,0 0 #0000}.ui.floating.yellow.message{box-shadow:0 0 0 1px #b58105 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.yellow.message .header{color:#9c6f04}.ui.olive.message{background-color:#fbfdef;color:#8abc1e}.ui.olive.message,.ui.attached.olive.message{box-shadow:0 0 0 1px #8abc1e inset,0 0 #0000}.ui.floating.olive.message{box-shadow:0 0 0 1px #8abc1e inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.olive.message .header{color:#7aa61a}.ui.green.message{background-color:#e5f9e7;color:#1ebc30}.ui.green.message,.ui.attached.green.message{box-shadow:0 0 0 1px #1ebc30 inset,0 0 #0000}.ui.floating.green.message{box-shadow:0 0 0 1px #1ebc30 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.green.message .header{color:#1aa62a}.ui.teal.message{background-color:#e1f7f7;color:#10a3a3}.ui.teal.message,.ui.attached.teal.message{box-shadow:0 0 0 1px #10a3a3 inset,0 0 #0000}.ui.floating.teal.message{box-shadow:0 0 0 1px #10a3a3 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.teal.message .header{color:#0e8c8c}.ui.blue.message{background-color:#dff0ff;color:#2185d0}.ui.blue.message,.ui.attached.blue.message{box-shadow:0 0 0 1px #2185d0 inset,0 0 #0000}.ui.floating.blue.message{box-shadow:0 0 0 1px #2185d0 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.blue.message .header{color:#1e77ba}.ui.violet.message{background-color:#eae7ff;color:#6435c9}.ui.violet.message,.ui.attached.violet.message{box-shadow:0 0 0 1px #6435c9 inset,0 0 #0000}.ui.floating.violet.message{box-shadow:0 0 0 1px #6435c9 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.violet.message .header{color:#5a30b5}.ui.purple.message{background-color:#f6e7ff;color:#a333c8}.ui.purple.message,.ui.attached.purple.message{box-shadow:0 0 0 1px #a333c8 inset,0 0 #0000}.ui.floating.purple.message{box-shadow:0 0 0 1px #a333c8 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.purple.message .header{color:#922eb4}.ui.pink.message{background-color:#ffe3fb;color:#e03997}.ui.pink.message,.ui.attached.pink.message{box-shadow:0 0 0 1px #e03997 inset,0 0 #0000}.ui.floating.pink.message{box-shadow:0 0 0 1px #e03997 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.pink.message .header{color:#dd238b}.ui.brown.message{background-color:#f1e2d3;color:#a5673f}.ui.brown.message,.ui.attached.brown.message{box-shadow:0 0 0 1px #a5673f inset,0 0 #0000}.ui.floating.brown.message{box-shadow:0 0 0 1px #a5673f inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.brown.message .header{color:#935b38}.ui.grey.message{background-color:#f4f4f4;color:#767676}.ui.grey.message,.ui.attached.grey.message{box-shadow:0 0 0 1px #767676 inset,0 0 #0000}.ui.floating.grey.message{box-shadow:0 0 0 1px #767676 inset,0 2px 4px #2224261f,0 2px 10px #22242626}.ui.grey.message .header{color:#696969}.ui.black.message{background-color:#1b1c1d;color:#ffffffe6}.ui.black.message .header{color:#ffffffe6}.ui.inverted.message{background-color:#1b1c1d;color:#ffffffe6}.ui.message{font-size:1em}.ui.mini.message{font-size:.78571429em}.ui.tiny.message{font-size:.85714286em}.ui.small.message{font-size:.92857143em}.ui.large.message{font-size:1.14285714em}.ui.big.message{font-size:1.28571429em}.ui.huge.message{font-size:1.42857143em}.ui.massive.message{font-size:1.71428571em}.ui.modal{position:absolute;display:none;z-index:1001;text-align:left;background:#FFFFFF;border:none;box-shadow:1px 3px 3px #0003,1px 3px 15px 2px #0003;transform-origin:50% 25%;flex:0 0 auto;border-radius:.28571429rem;-webkit-user-select:text;-moz-user-select:text;user-select:text;will-change:top,left,margin,transform,opacity}.ui.modal>:first-child:not(.icon):not(.dimmer),.ui.modal>i.icon:first-child+*,.ui.modal>.dimmer:first-child+*:not(.icon),.ui.modal>.dimmer:first-child+i.icon+*{border-top-left-radius:.28571429rem;border-top-right-radius:.28571429rem}.ui.modal>:last-child{border-bottom-left-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.modal>.ui.dimmer{border-radius:inherit}.ui.modal>.close{cursor:pointer;position:absolute;top:-2.5rem;right:-2.5rem;z-index:1;opacity:.8;font-size:1.25em;color:#fff;width:2.25rem;height:2.25rem;padding:.625rem 0 0}.ui.modal>.close:hover{opacity:1}.ui.modal>.header{display:block;font-family:var(--fonts-regular);background:#FFFFFF;margin:0;padding:1.25rem 1.5rem;box-shadow:none;color:#000000d9;border-bottom:1px solid rgba(34,36,38,.15)}.ui.modal>.header:not(.ui){font-size:1.42857143rem;line-height:1.28571429em;font-weight:500}.ui.modal>.content{display:block;width:100%;font-size:1em;line-height:1.4;padding:1.5rem;background:#FFFFFF}.ui.modal>.image.content{display:flex;flex-direction:row}.ui.modal>.content>.image{display:block;flex:0 1 auto;width:"";align-self:start;max-width:100%}.ui.modal>[class*="top aligned"]{align-self:start}.ui.modal>[class*="middle aligned"]{align-self:center}.ui.modal>[class*=stretched]{align-self:stretch}.ui.modal>.content>.description{display:block;flex:1 0 auto;min-width:0;align-self:start}.ui.modal>.content>i.icon+.description,.ui.modal>.content>.image+.description{flex:0 1 auto;min-width:"";width:auto;padding-left:2em}.ui.modal>.content>.image>i.icon{margin:0;opacity:1;width:auto;line-height:1;font-size:8rem}.ui.modal>.actions{background:#F9FAFB;padding:1rem;border-top:1px solid rgba(34,36,38,.15);text-align:right}.ui.modal .actions>.button:not(.fluid){margin-left:.75em}.ui.basic.modal>.actions{border-top:none}@media only screen and (max-width: 767.98px){.ui.modal:not(.fullscreen){width:95%;margin:0}}@media only screen and (min-width: 768px){.ui.modal:not(.fullscreen){width:88%;margin:0}}@media only screen and (min-width: 992px){.ui.modal:not(.fullscreen){width:850px;margin:0}}@media only screen and (min-width: 1200px){.ui.modal:not(.fullscreen){width:900px;margin:0}}@media only screen and (min-width: 1920px){.ui.modal:not(.fullscreen){width:950px;margin:0}}@media only screen and (max-width: 991.98px){.ui.modal>.header{padding-right:2.25rem}.ui.modal>.close{top:1.0535rem;right:1rem;color:#000000de}}@media only screen and (max-width: 767.98px){.ui.modal>.header{padding:.75rem 2.25rem .75rem 1rem!important}.ui.overlay.fullscreen.modal>.content.content.content{min-height:calc(100vh - 8.1rem)}.ui.overlay.fullscreen.modal>.scrolling.content.content.content{max-height:calc(100vh - 8.1rem)}.ui.modal>.content{display:block;padding:1rem!important}.ui.modal>.close{top:.5rem!important;right:.5rem!important}.ui.modal .image.content{flex-direction:column}.ui.modal>.content>.image{display:block;max-width:100%;margin:0 auto!important;text-align:center;padding:0 0 1rem!important}.ui.modal>.content>.image>i.icon{font-size:5rem;text-align:center}.ui.modal>.content>.description{display:block;width:100%!important;margin:0!important;padding:1rem 0!important;box-shadow:none}.ui.modal>.actions{padding:1rem 1rem 0rem!important}.ui.modal .actions>.buttons,.ui.modal .actions>.button{margin-bottom:1rem}}.ui.inverted.dimmer>.ui.modal{box-shadow:1px 3px 10px 2px #0003}.ui.basic.modal{background-color:transparent;border:none;border-radius:0;box-shadow:none!important;color:#fff}.ui.basic.modal>.header,.ui.basic.modal>.content,.ui.basic.modal>.actions{background-color:transparent}.ui.basic.modal>.header{color:#fff;border-bottom:none}.ui.basic.modal>.close{top:1rem;right:1.5rem;color:#fff}.ui.inverted.dimmer>.basic.modal{color:#000000de}.ui.inverted.dimmer>.ui.basic.modal>.header{color:#000000d9}.ui.legacy.legacy.modal,.ui.legacy.legacy.page.dimmer>.ui.modal{left:50%!important}.ui.legacy.legacy.modal:not(.aligned),.ui.legacy.legacy.page.dimmer>.ui.modal:not(.aligned){top:50%}.ui.legacy.legacy.page.dimmer>.ui.scrolling.modal:not(.aligned),.ui.page.dimmer>.ui.scrolling.legacy.legacy.modal:not(.aligned),.ui.top.aligned.legacy.legacy.page.dimmer>.ui.modal:not(.aligned),.ui.top.aligned.dimmer>.ui.legacy.legacy.modal:not(.aligned){top:auto}.ui.legacy.overlay.fullscreen.modal{margin-top:-2rem!important}.ui.loading.modal{display:block;visibility:hidden;z-index:-1}.ui.active.modal{display:block}.modals.dimmer .ui.top.aligned.modal{top:5vh}.modals.dimmer .ui.bottom.aligned.modal{bottom:5vh}@media only screen and (max-width: 767.98px){.modals.dimmer .ui.top.aligned.modal{top:1rem}.modals.dimmer .ui.bottom.aligned.modal{bottom:1rem}}.scrolling.dimmable.dimmed{overflow:hidden}.scrolling.dimmable>.dimmer{justify-content:flex-start;position:fixed}.scrolling.dimmable.dimmed>.dimmer{overflow:auto;-webkit-overflow-scrolling:touch}.modals.dimmer .ui.scrolling.modal:not(.fullscreen){margin:2rem auto}.modals.dimmer .ui.scrolling.modal:not([class*="overlay fullscreen"]):after{content:"\a0";position:absolute;height:2rem}.scrolling.undetached.dimmable.dimmed{overflow:auto;-webkit-overflow-scrolling:touch}.scrolling.undetached.dimmable.dimmed>.dimmer{overflow:hidden}.scrolling.undetached.dimmable .ui.scrolling.modal:not(.fullscreen){position:absolute;left:50%}.ui.modal>.scrolling.content{max-height:calc(80vh - 10rem);overflow:auto}.ui.overlay.fullscreen.modal>.content{min-height:calc(100vh - 9.1rem)}.ui.overlay.fullscreen.modal>.scrolling.content{max-height:calc(100vh - 9.1rem)}.ui.fullscreen.modal{width:95%;left:2.5%;margin:1em auto}.ui.overlay.fullscreen.modal{width:100%;left:0;margin:0 auto;top:0;border-radius:0}.ui.modal>.close.inside+.header,.ui.fullscreen.modal>.header{padding-right:2.25rem}.ui.modal>.close.inside,.ui.fullscreen.modal>.close{top:1.0535rem;right:1rem;color:#000000de}.ui.basic.fullscreen.modal>.close{color:#fff}.ui.modal{font-size:1rem}.ui.mini.modal>.header:not(.ui){font-size:1.3em}@media only screen and (max-width: 767.98px){.ui.mini.modal{width:95%;margin:0}}@media only screen and (min-width: 768px){.ui.mini.modal{width:35.2%;margin:0}}@media only screen and (min-width: 992px){.ui.mini.modal{width:340px;margin:0}}@media only screen and (min-width: 1200px){.ui.mini.modal{width:360px;margin:0}}@media only screen and (min-width: 1920px){.ui.mini.modal{width:380px;margin:0}}.ui.tiny.modal>.header:not(.ui){font-size:1.3em}@media only screen and (max-width: 767.98px){.ui.tiny.modal{width:95%;margin:0}}@media only screen and (min-width: 768px){.ui.tiny.modal{width:52.8%;margin:0}}@media only screen and (min-width: 992px){.ui.tiny.modal{width:510px;margin:0}}@media only screen and (min-width: 1200px){.ui.tiny.modal{width:540px;margin:0}}@media only screen and (min-width: 1920px){.ui.tiny.modal{width:570px;margin:0}}.ui.small.modal>.header:not(.ui){font-size:1.3em}@media only screen and (max-width: 767.98px){.ui.small.modal{width:95%;margin:0}}@media only screen and (min-width: 768px){.ui.small.modal{width:70.4%;margin:0}}@media only screen and (min-width: 992px){.ui.small.modal{width:680px;margin:0}}@media only screen and (min-width: 1200px){.ui.small.modal{width:720px;margin:0}}@media only screen and (min-width: 1920px){.ui.small.modal{width:760px;margin:0}}.ui.large.modal>.header:not(.ui){font-size:1.6em}@media only screen and (max-width: 767.98px){.ui.large.modal{width:95%;margin:0}}@media only screen and (min-width: 768px){.ui.large.modal{width:88%;margin:0}}@media only screen and (min-width: 992px){.ui.large.modal{width:1020px;margin:0}}@media only screen and (min-width: 1200px){.ui.large.modal{width:1080px;margin:0}}@media only screen and (min-width: 1920px){.ui.large.modal{width:1140px;margin:0}}.ui.big.modal>.header:not(.ui){font-size:1.6em}@media only screen and (max-width: 767.98px){.ui.big.modal{width:95%;margin:0}}@media only screen and (min-width: 768px){.ui.big.modal{width:88%;margin:0}}@media only screen and (min-width: 992px){.ui.big.modal{width:1190px;margin:0}}@media only screen and (min-width: 1200px){.ui.big.modal{width:1260px;margin:0}}@media only screen and (min-width: 1920px){.ui.big.modal{width:1330px;margin:0}}.ui.huge.modal>.header:not(.ui){font-size:1.6em}@media only screen and (max-width: 767.98px){.ui.huge.modal{width:95%;margin:0}}@media only screen and (min-width: 768px){.ui.huge.modal{width:88%;margin:0}}@media only screen and (min-width: 992px){.ui.huge.modal{width:1360px;margin:0}}@media only screen and (min-width: 1200px){.ui.huge.modal{width:1440px;margin:0}}@media only screen and (min-width: 1920px){.ui.huge.modal{width:1520px;margin:0}}.ui.massive.modal>.header:not(.ui){font-size:1.8em}@media only screen and (max-width: 767.98px){.ui.massive.modal{width:95%;margin:0}}@media only screen and (min-width: 768px){.ui.massive.modal{width:88%;margin:0}}@media only screen and (min-width: 992px){.ui.massive.modal{width:1530px;margin:0}}@media only screen and (min-width: 1200px){.ui.massive.modal{width:1620px;margin:0}}@media only screen and (min-width: 1920px){.ui.massive.modal{width:1710px;margin:0}}.ui.inverted.modal{background:rgba(0,0,0,.9)}.ui.inverted.modal>.header,.ui.inverted.modal>.content{background:rgba(0,0,0,.9);color:#fff}.ui.inverted.modal>.actions{background:#191A1B;border-top:1px solid rgba(34,36,38,.85);color:#fff}.ui.inverted.dimmer>.modal>.close{color:#000000d9}@media only screen and (max-width: 991.98px){.ui.dimmer .inverted.modal>.close{color:#fff}}.ui.inverted.modal>.close.inside,.ui.inverted.fullscreen.modal>.close{color:#fff}.ui.popup{display:none;position:absolute;top:0;right:0;min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content;z-index:1900;border:1px solid #D4D4D5;line-height:1.4285em;max-width:250px;background:#FFFFFF;padding:.833em 1em;font-weight:400;font-style:normal;color:#000000de;border-radius:.28571429rem;box-shadow:0 2px 4px #2224261f,0 2px 10px #22242626}.ui.popup>.header{padding:0;font-family:var(--fonts-regular);font-size:1.14285714em;line-height:1.2;font-weight:500}.ui.popup>.header+.content{padding-top:.5em}.ui.popup:before{position:absolute;content:"";width:.71428571em;height:.71428571em;background:#FFFFFF;transform:rotate(45deg);z-index:1901;box-shadow:1px 1px #bababc}.ui.popup{margin:0}.ui.top.popup{margin:0 0 .71428571em}.ui.top.left.popup{transform-origin:left bottom}.ui.top.center.popup{transform-origin:center bottom}.ui.top.right.popup{transform-origin:right bottom}.ui.left.center.popup{margin:0 .71428571em 0 0;transform-origin:right 50%}.ui.right.center.popup{margin:0 0 0 .71428571em;transform-origin:left 50%}.ui.bottom.popup{margin:.71428571em 0 0}.ui.bottom.left.popup{transform-origin:left top}.ui.bottom.center.popup{transform-origin:center top}.ui.bottom.right.popup{transform-origin:right top}.ui.bottom.center.popup:before{margin-left:-.30714286em;inset:-.30714286em auto auto 50%;box-shadow:-1px -1px #bababc}.ui.bottom.left.popup{margin-left:0}.ui.bottom.left.popup:before{inset:-.30714286em auto auto 1em;margin-left:0;box-shadow:-1px -1px #bababc}.ui.bottom.right.popup{margin-right:0}.ui.bottom.right.popup:before{inset:-.30714286em 1em auto auto;margin-left:0;box-shadow:-1px -1px #bababc}.ui.top.center.popup:before{inset:auto auto -.30714286em 50%;margin-left:-.30714286em}.ui.top.left.popup{margin-left:0}.ui.top.left.popup:before{inset:auto auto -.30714286em 1em;margin-left:0}.ui.top.right.popup{margin-right:0}.ui.top.right.popup:before{inset:auto 1em -.30714286em auto;margin-left:0}.ui.left.center.popup:before{inset:50% -.30714286em auto auto;margin-top:-.30714286em;box-shadow:1px -1px #bababc}.ui.right.center.popup:before{inset:50% auto auto -.30714286em;margin-top:-.30714286em;box-shadow:-1px 1px #bababc}.ui.right.center.popup:before,.ui.left.center.popup:before{background:#FFFFFF}.ui.bottom.popup:before{background:#FFFFFF}.ui.top.popup:before{background:#FFFFFF}.ui.inverted.bottom.popup:before{background:#1B1C1D}.ui.inverted.right.center.popup:before,.ui.inverted.left.center.popup:before{background:#1B1C1D}.ui.inverted.top.popup:before{background:#1B1C1D}.ui.popup>.ui.grid:not(.padded){width:calc(100% + 1.75rem);margin:-.7rem -.875rem}.ui.loading.popup{display:block;visibility:hidden;z-index:-1}.ui.animating.popup,.ui.visible.popup{display:block}.ui.visible.popup{transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.ui.basic.popup:before{display:none}.ui.fixed.popup{width:250px}.ui.wide.popup{max-width:350px}.ui.wide.popup.fixed{width:350px}.ui[class*="very wide"].popup{max-width:550px}.ui[class*="very wide"].popup.fixed{width:550px}@media only screen and (max-width: 767.98px){.ui.wide.popup,.ui[class*="very wide"].popup{max-width:250px}.ui.wide.popup.fixed,.ui[class*="very wide"].popup.fixed{width:250px}}.ui.fluid.popup{width:100%;max-width:none}.ui.inverted.popup{background:#1B1C1D;color:#fff;border:none;box-shadow:none}.ui.inverted.popup .header{background-color:none;color:#fff}.ui.inverted.popup:before{background-color:#1b1c1d;box-shadow:none!important}.ui.flowing.popup{max-width:none}.ui.popup{font-size:1rem}.ui.mini.popup{font-size:.78571429rem}.ui.tiny.popup{font-size:.85714286rem}.ui.small.popup{font-size:.92857143rem}.ui.large.popup{font-size:1.14285714rem}.ui.big.popup{font-size:1.28571429rem}.ui.huge.popup{font-size:1.42857143rem}.ui.massive.popup{font-size:1.71428571rem}*,*:before,*:after{box-sizing:inherit}html{box-sizing:border-box}input[type=text],input[type=email],input[type=search],input[type=password]{-webkit-appearance:none;-moz-appearance:none}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.ui.search{position:relative}.ui.search>.prompt{margin:0;outline:none;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);text-shadow:none;font-style:normal;font-weight:400;line-height:1.21428571em;padding:.67857143em 1em;font-size:1em;background:#FFFFFF;border:1px solid rgba(34,36,38,.15);color:#000000de;box-shadow:0 0 0 0 transparent inset;transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease}.ui.search .prompt{border-radius:500rem}.ui.search .prompt~.search.icon{cursor:pointer}.ui.search>.results{display:none;position:absolute;top:100%;left:0;transform-origin:center top;white-space:normal;text-align:left;text-transform:none;background:#FFFFFF;margin-top:.5em;width:18em;border-radius:.28571429rem;box-shadow:0 2px 4px #2224261f,0 2px 10px #22242626;border:1px solid #D4D4D5;z-index:998}.ui.search>.results>:first-child{border-radius:.28571429rem .28571429rem 0 0}.ui.search>.results>:last-child{border-radius:0 0 .28571429rem .28571429rem}.ui.search>.results .result{cursor:pointer;display:block;overflow:hidden;font-size:1em;padding:.85714286em 1.14285714em;color:#000000de;line-height:1.33;border-bottom:1px solid rgba(34,36,38,.1)}.ui.search>.results .result:last-child{border-bottom:none!important}.ui.search>.results .result .image{float:right;overflow:hidden;background:none;width:5em;height:3em;border-radius:.25em}.ui.search>.results .result .image img{display:block;width:auto;height:100%}.ui.search>.results .result .image+.content{margin:0 6em 0 0}.ui.search>.results .result .title{margin:-.14285714em 0 0;font-family:var(--fonts-regular);font-weight:500;font-size:1em;color:#000000d9}.ui.search>.results .result .description{margin-top:0;font-size:.92857143em;color:#0006}.ui.search>.results .result .price{float:right;color:#21ba45}.ui.search>.results>.message{padding:1em}.ui.search>.results>.message .header{font-family:var(--fonts-regular);font-size:1rem;font-weight:500;color:#000000de}.ui.search>.results>.message .description{margin-top:.25rem;font-size:1em;color:#000000de}.ui.search>.results>.action{display:block;border-top:none;background:#F3F4F5;padding:.92857143em 1em;color:#000000de;font-weight:500;text-align:center}.ui.search>.prompt:focus{border-color:#22242659;background:#FFFFFF;color:#000000f2}.ui.loading.search .input>i.icon:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.search .input>i.icon:after{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;-webkit-animation:loader .6s infinite linear;animation:loader .6s infinite linear;border:.2em solid #767676;border-radius:500rem;box-shadow:0 0 0 1px transparent}.ui.search>.results .result:hover,.ui.category.search>.results .category .result:hover{background:#F9FAFB}.ui.search .action:hover:not(div){background:#E0E0E0}.ui.category.search>.results .category.active{background:#F3F4F5}.ui.category.search>.results .category.active>.name{color:#000000de}.ui.search>.results .result.active,.ui.category.search>.results .category .result.active{position:relative;border-left-color:#2224261a;background:#F3F4F5;box-shadow:none}.ui.search>.results .result.active .title{color:#000000d9}.ui.search>.results .result.active .description{color:#000000d9}.ui.disabled.search{cursor:default;pointer-events:none;opacity:var(--opacity-disabled)}.ui.search.selection .prompt{border-radius:.28571429rem}.ui.search.selection>.icon.input>.remove.icon{pointer-events:none;position:absolute;left:auto;opacity:0;color:"";top:0;right:0;transition:color .1s ease,opacity .1s ease}.ui.search.selection>.icon.input>.active.remove.icon{cursor:pointer;opacity:.8;pointer-events:auto}.ui.search.selection>.icon.input:not([class*="left icon"])>.icon~.remove.icon{right:1.85714em}.ui.search.selection>.icon.input>.remove.icon:hover{opacity:1;color:#db2828}.ui.category.search .results{width:28em}.ui.category.search .results.animating,.ui.category.search .results.visible{display:table}.ui.category.search>.results .category{display:table-row;background:#F3F4F5;box-shadow:none;transition:background .1s ease,border-color .1s ease}.ui.category.search>.results .category:last-child{border-bottom:none}.ui.category.search>.results .category:first-child .name+.result{border-radius:0 .28571429rem 0 0}.ui.category.search>.results .category:last-child .result:last-child{border-radius:0 0 .28571429rem}.ui.category.search>.results .category>.name{display:table-cell;text-overflow:ellipsis;width:100px;white-space:nowrap;background:transparent;font-family:var(--fonts-regular);font-size:1em;padding:.4em 1em;font-weight:500;color:#0006;border-bottom:1px solid rgba(34,36,38,.1)}.ui.category.search>.results .category .results{display:table-cell;background:#FFFFFF;border-left:1px solid rgba(34,36,38,.15);border-bottom:1px solid rgba(34,36,38,.1)}.ui.category.search>.results .category .result{border-bottom:1px solid rgba(34,36,38,.1);transition:background .1s ease,border-color .1s ease;padding:.85714286em 1.14285714em}.ui.scrolling.search>.results,.ui.search.long>.results,.ui.search.short>.results{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}@media only screen and (max-width: 767.98px){.ui.scrolling.search>.results{max-height:12.17714286em}}@media only screen and (min-width: 768px){.ui.scrolling.search>.results{max-height:18.26571429em}}@media only screen and (min-width: 992px){.ui.scrolling.search>.results{max-height:24.35428571em}}@media only screen and (min-width: 1920px){.ui.scrolling.search>.results{max-height:36.53142857em}}@media only screen and (max-width: 767.98px){.ui.search.short>.results{max-height:12.17714286em}.ui.search[class*="very short"]>.results{max-height:9.13285714em}.ui.search.long>.results{max-height:24.35428571em}.ui.search[class*="very long"]>.results{max-height:36.53142857em}}@media only screen and (min-width: 768px){.ui.search.short>.results{max-height:18.26571429em}.ui.search[class*="very short"]>.results{max-height:13.69928571em}.ui.search.long>.results{max-height:36.53142857em}.ui.search[class*="very long"]>.results{max-height:54.79714286em}}@media only screen and (min-width: 992px){.ui.search.short>.results{max-height:24.35428571em}.ui.search[class*="very short"]>.results{max-height:18.26571429em}.ui.search.long>.results{max-height:48.70857143em}.ui.search[class*="very long"]>.results{max-height:73.06285714em}}@media only screen and (min-width: 1920px){.ui.search.short>.results{max-height:36.53142857em}.ui.search[class*="very short"]>.results{max-height:27.39857143em}.ui.search.long>.results{max-height:73.06285714em}.ui.search[class*="very long"]>.results{max-height:109.59428571em}}.ui[class*="left aligned"].search>.results{right:auto;left:0}.ui[class*="right aligned"].search>.results{right:0;left:auto}.ui.fluid.search .results{width:100%}.ui.search{font-size:1em}.ui.mini.search{font-size:.78571429em}.ui.tiny.search{font-size:.85714286em}.ui.small.search{font-size:.92857143em}.ui.large.search{font-size:1.14285714em}.ui.big.search{font-size:1.28571429em}.ui.huge.search{font-size:1.42857143em}.ui.massive.search{font-size:1.71428571em}@media only screen and (max-width: 767.98px){.ui.search .results{max-width:calc(100vw - 2rem)}}.ui.segment{position:relative;background:#FFFFFF;box-shadow:0 1px 2px #22242626;margin:1rem 0;padding:1em;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.segment:first-child{margin-top:0}.ui.segment:last-child{margin-bottom:0}.ui.vertical.segment{margin:0;padding-left:0;padding-right:0;background:none transparent;border-radius:0;box-shadow:none;border:none;border-bottom:1px solid rgba(34,36,38,.15)}.ui.vertical.segment:last-child{border-bottom:none}.ui.inverted.segment>.ui.header .sub.header,.ui.inverted.segment>.ui.header{color:#fff}.ui[class*="bottom attached"].segment>[class*="top attached"].label{border-top-left-radius:0;border-top-right-radius:0}.ui[class*="top attached"].segment>[class*="bottom attached"].label{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui.attached.segment:not(.top):not(.bottom)>[class*="top attached"].label{border-top-left-radius:0;border-top-right-radius:0}.ui.attached.segment:not(.top):not(.bottom)>[class*="bottom attached"].label{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui.page.grid.segment,.ui.grid>.row>.ui.segment.column,.ui.grid>.ui.segment.column{padding-top:2em;padding-bottom:2em}.ui.grid.segment{margin:1rem 0;border-radius:.28571429rem}.ui.basic.table.segment{background:#FFFFFF;border:1px solid rgba(34,36,38,.15);box-shadow:0 1px 2px #22242626}.ui[class*="very basic"].table.segment{padding:1em}.ui.segment.tab:last-child{margin-bottom:1rem}.ui.placeholder.segment{display:flex;flex-direction:column;justify-content:center;align-items:stretch;max-width:initial;-webkit-animation:none;animation:none;overflow:visible;padding:1em;min-height:18rem;background:#F9FAFB;border-color:#22242626;box-shadow:0 2px 25px #2224260d inset}.ui.placeholder.segment .button,.ui.placeholder.segment textarea{display:block}.ui.placeholder.segment .field,.ui.placeholder.segment textarea,.ui.placeholder.segment>.ui.input,.ui.placeholder.segment .button{max-width:15rem;margin-left:auto;margin-right:auto}.ui.placeholder.segment .column .button,.ui.placeholder.segment .column .field,.ui.placeholder.segment .column textarea,.ui.placeholder.segment .column>.ui.input{max-width:15rem;margin-left:auto;margin-right:auto}.ui.placeholder.segment>.inline{align-self:center}.ui.placeholder.segment>.inline>.button{display:inline-block;width:auto;margin:0 .35714286rem 0 0}.ui.placeholder.segment>.inline>.button:last-child{margin-right:0}.ui.piled.segments,.ui.piled.segment{margin:3em 0;box-shadow:"";z-index:auto}.ui.piled.segment:first-child{margin-top:0}.ui.piled.segment:last-child{margin-bottom:0}.ui.piled.segments:after,.ui.piled.segments:before,.ui.piled.segment:after,.ui.piled.segment:before{background-color:#fff;visibility:visible;content:"";display:block;height:100%;left:0;position:absolute;width:100%;border:1px solid rgba(34,36,38,.15);box-shadow:""}.ui.piled.segments:before,.ui.piled.segment:before{transform:rotate(-1.2deg);top:0;z-index:-2}.ui.piled.segments:after,.ui.piled.segment:after{transform:rotate(1.2deg);top:0;z-index:-1}.ui[class*="top attached"].piled.segment{margin-top:3em;margin-bottom:0}.ui.piled.segment[class*="top attached"]:first-child{margin-top:0}.ui.piled.segment[class*="bottom attached"]{margin-top:0;margin-bottom:3em}.ui.piled.segment[class*="bottom attached"]:last-child{margin-bottom:0}.ui.stacked.segment{padding-bottom:1.4em}.ui.stacked.segments:before,.ui.stacked.segments:after,.ui.stacked.segment:before,.ui.stacked.segment:after{content:"";position:absolute;bottom:-3px;left:0;border-top:1px solid rgba(34,36,38,.15);background:rgba(0,0,0,.03);width:100%;height:6px;visibility:visible}.ui.stacked.segments:before,.ui.stacked.segment:before{display:none}.ui.tall.stacked.segments:before,.ui.tall.stacked.segment:before{display:block;bottom:0}.ui.stacked.inverted.segments:before,.ui.stacked.inverted.segments:after,.ui.stacked.inverted.segment:before,.ui.stacked.inverted.segment:after{background-color:#00000008;border-top:1px solid rgba(34,36,38,.35)}.ui.padded.segment{padding:1.5em}.ui[class*="very padded"].segment{padding:3em}.ui.padded.segment.vertical.segment,.ui[class*="very padded"].vertical.segment{padding-left:0;padding-right:0}.ui.compact.segment{display:table}.ui.compact.segments{display:inline-flex}.ui.compact.segments .segment,.ui.segments .compact.segment{display:block;flex:0 1 auto}.ui.circular.segment{display:table-cell;padding:2em;text-align:center;vertical-align:middle;border-radius:500em}.ui.raised.raised.segments,.ui.raised.raised.segment{box-shadow:0 2px 4px #2224261f,0 2px 10px #22242626}.ui.segments{flex-direction:column;position:relative;margin:1rem 0;border:1px solid rgba(34,36,38,.15);box-shadow:0 1px 2px #22242626;border-radius:.28571429rem}.ui.segments:first-child{margin-top:0}.ui.segments:last-child{margin-bottom:0}.ui.segments>.segment{top:0;bottom:0;border-radius:0;margin:0;width:auto;box-shadow:none;border:none;border-top:1px solid rgba(34,36,38,.15)}.ui.segments:not(.horizontal)>.segment:first-child{top:0;bottom:0;border-top:none;margin-top:0;margin-bottom:0;border-radius:.28571429rem .28571429rem 0 0}.ui.segments:not(.horizontal)>.segment:last-child{top:0;bottom:0;margin-top:0;margin-bottom:0;box-shadow:0 1px 2px #22242626,none;border-radius:0 0 .28571429rem .28571429rem}.ui.segments:not(.horizontal)>.segment:only-child{border-radius:.28571429rem}.ui.segments>.ui.segments{border-top:1px solid rgba(34,36,38,.15);margin:1rem}.ui.segments>.segments:first-child{border-top:none}.ui.segments>.segment+.segments:not(.horizontal){margin-top:0}.ui.horizontal.segments{display:flex;flex-direction:row;background-color:transparent;padding:0;box-shadow:0 1px 2px #22242626;margin:1rem 0;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.stackable.horizontal.segments{flex-wrap:wrap}.ui.segments>.horizontal.segments{margin:0;background-color:transparent;border-radius:0;border:none;box-shadow:none;border-top:1px solid rgba(34,36,38,.15)}.ui.horizontal.segments:not(.compact)>.segment:not(.compact){flex:1 1 auto;-ms-flex:1 1 0}.ui.horizontal.segments>.segment{margin:0;min-width:0;border-radius:0;border:none;box-shadow:none;border-left:1px solid rgba(34,36,38,.15)}.ui.segments>.horizontal.segments:first-child{border-top:none}.ui.horizontal.segments:not(.stackable)>.segment:first-child{border-left:none}.ui.horizontal.segments>.segment:first-child{border-radius:.28571429rem 0 0 .28571429rem}.ui.horizontal.segments>.segment:last-child{border-radius:0 .28571429rem .28571429rem 0}.ui.disabled.segment{opacity:var(--opacity-disabled);color:#2828284d}.ui.loading.segment{position:relative;cursor:default;pointer-events:none;text-shadow:none!important;transition:all 0s linear}.ui.loading.segment:before{position:absolute;content:"";top:0;left:0;background:rgba(255,255,255,.8);width:100%;height:100%;border-radius:.28571429rem;z-index:100}.ui.loading.segment:after{position:absolute;content:"";top:50%;left:50%;margin:-1.5em 0 0 -1.5em;width:3em;height:3em;-webkit-animation:loader .6s infinite linear;animation:loader .6s infinite linear;border:.2em solid #767676;border-radius:500rem;box-shadow:0 0 0 1px transparent;visibility:visible;z-index:101}.ui.basic.segment,.ui.segments .ui.basic.segment,.ui.basic.segments{background:none transparent;box-shadow:none;border:none;border-radius:0}.ui.clearing.segment:after{content:"";display:block;clear:both}.ui.red.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #DB2828}.ui.inverted.red.segment.segment.segment.segment.segment{background-color:#db2828;color:#fff}.ui.orange.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #F2711C}.ui.inverted.orange.segment.segment.segment.segment.segment{background-color:#f2711c;color:#fff}.ui.yellow.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #FBBD08}.ui.inverted.yellow.segment.segment.segment.segment.segment{background-color:#fbbd08;color:#fff}.ui.olive.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #B5CC18}.ui.inverted.olive.segment.segment.segment.segment.segment{background-color:#b5cc18;color:#fff}.ui.green.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #21BA45}.ui.inverted.green.segment.segment.segment.segment.segment{background-color:#21ba45;color:#fff}.ui.teal.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #00B5AD}.ui.inverted.teal.segment.segment.segment.segment.segment{background-color:#00b5ad;color:#fff}.ui.blue.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #2185D0}.ui.inverted.blue.segment.segment.segment.segment.segment{background-color:#2185d0;color:#fff}.ui.violet.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #6435C9}.ui.inverted.violet.segment.segment.segment.segment.segment{background-color:#6435c9;color:#fff}.ui.purple.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #A333C8}.ui.inverted.purple.segment.segment.segment.segment.segment{background-color:#a333c8;color:#fff}.ui.pink.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #E03997}.ui.inverted.pink.segment.segment.segment.segment.segment{background-color:#e03997;color:#fff}.ui.brown.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #A5673F}.ui.inverted.brown.segment.segment.segment.segment.segment{background-color:#a5673f;color:#fff}.ui.grey.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #767676}.ui.inverted.grey.segment.segment.segment.segment.segment{background-color:#767676;color:#fff}.ui.black.segment.segment.segment.segment.segment:not(.inverted){border-top:2px solid #1B1C1D}.ui.inverted.black.segment.segment.segment.segment.segment{background-color:#1b1c1d;color:#fff}.ui[class*="left aligned"].segment{text-align:left}.ui[class*="right aligned"].segment{text-align:right}.ui[class*="center aligned"].segment{text-align:center}.ui.floated.segment,.ui[class*="left floated"].segment{float:left;margin-right:1em}.ui[class*="right floated"].segment{float:right;margin-left:1em}.ui.inverted.segment{border:none;box-shadow:none}.ui.inverted.segment,.ui.primary.inverted.segment{background:#1B1C1D;color:#ffffffe6}.ui.inverted.segment .segment{color:#000000de}.ui.inverted.segment .inverted.segment{color:#ffffffe6}.ui.inverted.attached.segment{border-color:#555}.ui.inverted.loading.segment{color:#fff}.ui.inverted.loading.segment:before{background:rgba(0,0,0,.85)}.ui.secondary.segment{background:#F3F4F5;color:#0009}.ui.secondary.inverted.segment{background:#4c4f52 linear-gradient(rgba(255,255,255,.2) 0,rgba(255,255,255,.2) 100%);color:#fffc}.ui.tertiary.segment{background:#DCDDDE;color:#0009}.ui.tertiary.inverted.segment{background:#717579 linear-gradient(rgba(255,255,255,.35) 0,rgba(255,255,255,.35) 100%);color:#fffc}.ui.attached.segment{top:0;bottom:0;border-radius:0;margin:0 -1px;width:calc(100% + 2px);max-width:calc(100% + 2px);box-shadow:none;border:1px solid #D4D4D5}.ui.attached:not(.message)+.ui.attached.segment:not(.top){border-top:none}.ui[class*="top attached"].segment{bottom:0;margin-bottom:0;top:0;margin-top:1rem;border-radius:.28571429rem .28571429rem 0 0}.ui.segment[class*="top attached"]:first-child{margin-top:0}.ui.segment[class*="bottom attached"]{bottom:0;margin-top:0;top:0;margin-bottom:1rem;box-shadow:0 1px 2px #22242626,none;border-radius:0 0 .28571429rem .28571429rem}.ui.segment[class*="bottom attached"]:last-child{margin-bottom:1rem}.ui.fitted.segment:not(.horizontally){padding-top:0;padding-bottom:0}.ui.fitted.segment:not(.vertically){padding-left:0;padding-right:0}.ui.segments .segment,.ui.segment{font-size:1rem}.ui.mini.segments .segment,.ui.mini.segment{font-size:.78571429rem}.ui.tiny.segments .segment,.ui.tiny.segment{font-size:.85714286rem}.ui.small.segments .segment,.ui.small.segment{font-size:.92857143rem}.ui.large.segments .segment,.ui.large.segment{font-size:1.14285714rem}.ui.big.segments .segment,.ui.big.segment{font-size:1.28571429rem}.ui.huge.segments .segment,.ui.huge.segment{font-size:1.42857143rem}.ui.massive.segments .segment,.ui.massive.segment{font-size:1.71428571rem}html,body{height:100%}html{font-size:14px}body{margin:0;padding:0;overflow-x:hidden;min-width:320px;background:#FFFFFF;font-family:var(--fonts-regular);font-size:14px;line-height:1.4285em;color:#000000de}h1,h2,h3,h4,h5{font-family:var(--fonts-regular);line-height:1.28571429em;margin:calc(2rem - .1428571428571429em) 0 1rem;font-weight:500;padding:0}h1{min-height:1rem;font-size:2rem}h2{font-size:1.71428571rem}h3{font-size:1.28571429rem}h4{font-size:1.07142857rem}h5{font-size:1rem}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child{margin-bottom:0}p{margin:0 0 1em;line-height:1.4285em}p:first-child{margin-top:0}p:last-child{margin-bottom:0}a{color:#4183c4;text-decoration:none}a:hover{color:#1e70bf;text-decoration:underline}::-webkit-selection{background-color:#cce2ff;color:#000000de}::-moz-selection{background-color:#cce2ff;color:#000000de}::selection{background-color:#cce2ff;color:#000000de}textarea::-webkit-selection,input::-webkit-selection{background-color:#64646466;color:#000000de}textarea::-moz-selection,input::-moz-selection{background-color:#64646466;color:#000000de}textarea::selection,input::selection{background-color:#64646466;color:#000000de}.ui.tab{display:none}.ui.tab.active,.ui.tab.open{display:block}.ui.tab.loading{position:relative;overflow:hidden;display:block;min-height:250px}.ui.tab.loading *{position:relative!important;left:-10000px!important}.ui.tab.loading:before,.ui.tab.loading.segment:before{position:absolute;content:"";top:50%;left:50%;margin:-1.25em 0 0 -1.25em;width:2.5em;height:2.5em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.tab.loading:after,.ui.tab.loading.segment:after{position:absolute;content:"";top:50%;left:50%;margin:-1.25em 0 0 -1.25em;width:2.5em;height:2.5em;-webkit-animation:loader .6s infinite linear;animation:loader .6s infinite linear;border:.2em solid #767676;border-radius:500rem;box-shadow:0 0 0 1px transparent}.ui.table{width:100%;background:#FFFFFF;margin:1em 0;border:1px solid rgba(34,36,38,.15);box-shadow:none;border-radius:.28571429rem;text-align:left;vertical-align:middle;color:#000000de;border-collapse:separate;border-spacing:0}.ui.table:first-child{margin-top:0}.ui.table:last-child{margin-bottom:0}.ui.table>thead,.ui.table>tbody{text-align:inherit;vertical-align:inherit}.ui.table th,.ui.table td{transition:background .1s ease,color .1s ease}.ui.table th.rowspanned,.ui.table td.rowspanned{display:none}.ui.table>thead{box-shadow:none}.ui.table>thead>tr>th{cursor:auto;background:#F9FAFB;text-align:inherit;color:#000000de;padding:.92857143em .78571429em;vertical-align:inherit;font-style:none;font-weight:500;text-transform:none;border-bottom:1px solid rgba(34,36,38,.1);border-left:none}.ui.table>thead>tr>th:first-child{border-left:none}.ui.table>thead>tr:first-child>th:first-child{border-radius:.28571429rem 0 0}.ui.table>thead>tr:first-child>th:last-child{border-radius:0 .28571429rem 0 0}.ui.table>thead>tr:first-child>th:only-child{border-radius:.28571429rem .28571429rem 0 0}.ui.table>tfoot{box-shadow:none}.ui.table>tfoot>tr>th,.ui.table>tfoot>tr>td{cursor:auto;border-top:1px solid rgba(34,36,38,.15);background:#F9FAFB;text-align:inherit;color:#000000de;padding:.78571429em;vertical-align:inherit;font-style:normal;font-weight:400;text-transform:none}.ui.table>tfoot>tr>th:first-child,.ui.table>tfoot>tr>td:first-child{border-left:none}.ui.table>tfoot>tr:first-child>th:first-child,.ui.table>tfoot>tr:first-child>td:first-child{border-radius:0 0 0 .28571429rem}.ui.table>tfoot>tr:first-child>th:last-child,.ui.table>tfoot>tr:first-child>td:last-child{border-radius:0 0 .28571429rem}.ui.table>tfoot>tr:first-child>th:only-child,.ui.table>tfoot>tr:first-child>td:only-child{border-radius:0 0 .28571429rem .28571429rem}.ui.table>tr>td,.ui.table>tbody>tr>td{border-top:1px solid rgba(34,36,38,.1)}.ui.table>tr:first-child>td,.ui.table>tbody>tr:first-child>td{border-top:none}.ui.table>tbody+tbody tr:first-child>td{border-top:1px solid rgba(34,36,38,.1)}.ui.table>tbody>tr>td,.ui.table>tr>td{padding:.78571429em;text-align:inherit}.ui.table>i.icon{vertical-align:baseline}.ui.table>i.icon:only-child{margin:0}.ui.table.segment{padding:0}.ui.table.segment:after{display:none}.ui.table.segment.stacked:after{display:block}@media only screen and (max-width: 767.98px){.ui.table:not(.unstackable){width:100%;padding:0}.ui.table:not(.unstackable)>thead,.ui.table:not(.unstackable)>thead>tr,.ui.table:not(.unstackable)>tfoot,.ui.table:not(.unstackable)>tfoot>tr,.ui.table:not(.unstackable)>tbody,.ui.table:not(.unstackable)>tr,.ui.table:not(.unstackable)>tbody>tr,.ui.table:not(.unstackable)>tr>th:not(.rowspanned),.ui.table:not(.unstackable)>thead>tr>th:not(.rowspanned),.ui.table:not(.unstackable)>tbody>tr>th:not(.rowspanned),.ui.table:not(.unstackable)>tfoot>tr>th:not(.rowspanned),.ui.table:not(.unstackable)>tr>td:not(.rowspanned),.ui.table:not(.unstackable)>tbody>tr>td:not(.rowspanned),.ui.table:not(.unstackable)>tfoot>tr>td:not(.rowspanned){display:block!important;width:auto!important}.ui.table:not(.unstackable)>thead{display:block}.ui.table:not(.unstackable)>tfoot{display:block}.ui.ui.ui.ui.table:not(.unstackable)>tr,.ui.ui.ui.ui.table:not(.unstackable)>thead>tr,.ui.ui.ui.ui.table:not(.unstackable)>tbody>tr,.ui.ui.ui.ui.table:not(.unstackable)>tfoot>tr{padding-top:1em;padding-bottom:1em;box-shadow:0 -1px #0000001a inset}.ui.ui.ui.ui.table:not(.unstackable)>tr>th,.ui.ui.ui.ui.table:not(.unstackable)>thead>tr>th,.ui.ui.ui.ui.table:not(.unstackable)>tbody>tr>th,.ui.ui.ui.ui.table:not(.unstackable)>tfoot>tr>th,.ui.ui.ui.ui.table:not(.unstackable)>tr>td,.ui.ui.ui.ui.table:not(.unstackable)>tbody>tr>td,.ui.ui.ui.ui.table:not(.unstackable)>tfoot>tr>td{background:none;border:none;padding:.25em .75em;box-shadow:none}.ui.table:not(.unstackable)>tr>th:first-child,.ui.table:not(.unstackable)>thead>tr>th:first-child,.ui.table:not(.unstackable)>tbody>tr>th:first-child,.ui.table:not(.unstackable)>tfoot>tr>th:first-child,.ui.table:not(.unstackable)>tr>td:first-child,.ui.table:not(.unstackable)>tbody>tr>td:first-child,.ui.table:not(.unstackable)>tfoot>tr>td:first-child{font-weight:500}.ui.definition.table:not(.unstackable)>thead>tr>th:first-child{box-shadow:none!important}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.primary.left{box-shadow:0 -1px #0000001a inset,.2em 0 #2185d0 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.primary.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #2185d0 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.primary.left{box-shadow:0 -1px #0000001a inset,.2em 0 #54c8ff inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.primary.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #54c8ff inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.secondary.left{box-shadow:0 -1px #0000001a inset,.2em 0 #1b1c1d inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.secondary.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #1b1c1d inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.secondary.left{box-shadow:0 -1px #0000001a inset,.2em 0 #545454 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.secondary.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #545454 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.red.left{box-shadow:0 -1px #0000001a inset,.2em 0 #db2828 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.red.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #db2828 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.red.left{box-shadow:0 -1px #0000001a inset,.2em 0 #ff695e inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.red.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #ff695e inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.orange.left{box-shadow:0 -1px #0000001a inset,.2em 0 #f2711c inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.orange.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #f2711c inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.orange.left{box-shadow:0 -1px #0000001a inset,.2em 0 #ff851b inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.orange.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #ff851b inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.yellow.left{box-shadow:0 -1px #0000001a inset,.2em 0 #fbbd08 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.yellow.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #fbbd08 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.yellow.left{box-shadow:0 -1px #0000001a inset,.2em 0 #ffe21f inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.yellow.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #ffe21f inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.olive.left{box-shadow:0 -1px #0000001a inset,.2em 0 #b5cc18 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.olive.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #b5cc18 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.olive.left{box-shadow:0 -1px #0000001a inset,.2em 0 #d9e778 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.olive.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #d9e778 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.green.left{box-shadow:0 -1px #0000001a inset,.2em 0 #21ba45 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.green.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #21ba45 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.green.left{box-shadow:0 -1px #0000001a inset,.2em 0 #2ecc40 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.green.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #2ecc40 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.teal.left{box-shadow:0 -1px #0000001a inset,.2em 0 #00b5ad inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.teal.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #00b5ad inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.teal.left{box-shadow:0 -1px #0000001a inset,.2em 0 #6dffff inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.teal.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #6dffff inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.blue.left{box-shadow:0 -1px #0000001a inset,.2em 0 #2185d0 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.blue.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #2185d0 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.blue.left{box-shadow:0 -1px #0000001a inset,.2em 0 #54c8ff inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.blue.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #54c8ff inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.violet.left{box-shadow:0 -1px #0000001a inset,.2em 0 #6435c9 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.violet.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #6435c9 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.violet.left{box-shadow:0 -1px #0000001a inset,.2em 0 #a291fb inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.violet.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #a291fb inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.purple.left{box-shadow:0 -1px #0000001a inset,.2em 0 #a333c8 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.purple.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #a333c8 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.purple.left{box-shadow:0 -1px #0000001a inset,.2em 0 #dc73ff inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.purple.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #dc73ff inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.pink.left{box-shadow:0 -1px #0000001a inset,.2em 0 #e03997 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.pink.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #e03997 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.pink.left{box-shadow:0 -1px #0000001a inset,.2em 0 #ff8edf inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.pink.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #ff8edf inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.brown.left{box-shadow:0 -1px #0000001a inset,.2em 0 #a5673f inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.brown.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #a5673f inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.brown.left{box-shadow:0 -1px #0000001a inset,.2em 0 #d67c1c inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.brown.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #d67c1c inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.grey.left{box-shadow:0 -1px #0000001a inset,.2em 0 #767676 inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.grey.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #767676 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.grey.left{box-shadow:0 -1px #0000001a inset,.2em 0 #dcddde inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.grey.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #dcddde inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.black.left{box-shadow:0 -1px #0000001a inset,.2em 0 #1b1c1d inset}.ui.ui.ui.ui.table:not(.unstackable) tr.marked.black.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #1b1c1d inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.black.left{box-shadow:0 -1px #0000001a inset,.2em 0 #545454 inset}.ui.ui.ui.ui.inverted.table:not(.unstackable) tr.marked.black.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #545454 inset}}.ui.table .collapsing .image,.ui.table .collapsing .image img{max-width:none}.ui.structured.table{border-collapse:collapse}.ui.structured.table>thead>tr>th{border-left:none;border-right:none}.ui.structured.sortable.table>thead>tr>th{border-left:1px solid rgba(34,36,38,.15);border-right:1px solid rgba(34,36,38,.15)}.ui.structured.basic.table>tr>th,.ui.structured.basic.table>thead>tr>th,.ui.structured.basic.table>tbody>tr>th,.ui.structured.basic.table>tfoot>tr>th{border-left:none;border-right:none}.ui.structured.celled.table>tr>th,.ui.structured.celled.table>thead>tr>th,.ui.structured.celled.table>tbody>tr>th,.ui.structured.celled.table>tfoot>tr>th,.ui.structured.celled.table>tr>td,.ui.structured.celled.table>tbody>tr>td,.ui.structured.celled.table>tfoot>tr>td{border-left:1px solid rgba(34,36,38,.1);border-right:1px solid rgba(34,36,38,.1)}.ui.definition.table>thead:not(.full-width)>tr>th:first-child{pointer-events:none;background:#FFFFFF;font-weight:400;color:#0006;box-shadow:-.1em -.2em 0 .1em #fff;-moz-transform:scale(1)}.ui.definition.table>tfoot:not(.full-width)>tr>th:first-child{pointer-events:none;background:#FFFFFF;font-weight:400;color:#0006;box-shadow:-.1em .2em 0 .1em #fff;-moz-transform:scale(1)}.ui.definition.table>tr>td:first-child:not(.ignored),.ui.definition.table>tbody>tr>td:first-child:not(.ignored),.ui.definition.table>tfoot>tr>td:first-child:not(.ignored),.ui.definition.table tr td.definition{background:rgba(0,0,0,.03);font-weight:500;color:#000000f2;text-transform:"";box-shadow:"";text-align:"";font-size:1em;padding-left:"";padding-right:""}.ui.definition.table>thead:not(.full-width)>tr>th:nth-child(2){border-left:1px solid rgba(34,36,38,.15)}.ui.definition.table>tfoot:not(.full-width)>tr>th:nth-child(2),.ui.definition.table>tfoot:not(.full-width)>tr>td:nth-child(2){border-left:1px solid rgba(34,36,38,.15)}.ui.definition.table>tr>td:nth-child(2),.ui.definition.table>tbody>tr>td:nth-child(2){border-left:1px solid rgba(34,36,38,.15)}.ui.ui.ui.ui.table tr.positive,.ui.ui.table td.positive{box-shadow:0 0 #a3c293 inset;background:#FCFFF5;color:#2c662d}.ui.ui.ui.ui.table tr.negative,.ui.ui.table td.negative,.ui.ui.ui.ui.table tr.error,.ui.ui.table td.error{box-shadow:0 0 #e0b4b4 inset;background:#FFF6F6;color:#9f3a38}.ui.ui.ui.ui.table tr.warning,.ui.ui.table td.warning{box-shadow:0 0 #c9ba9b inset;background:#FFFAF3;color:#573a08}.ui.ui.ui.ui.table tr.active,.ui.ui.table td.active{box-shadow:0 0 #000000de inset;background:#E0E0E0;color:#000000de}.ui.table tr.disabled td,.ui.table tr td.disabled,.ui.table tr.disabled:hover,.ui.table tr:hover td.disabled{pointer-events:none;color:#2828284d}@media only screen and (max-width: 991.98px){.ui[class*="tablet stackable"].table,.ui[class*="tablet stackable"].table>thead,.ui[class*="tablet stackable"].table>thead>tr,.ui[class*="tablet stackable"].table>tfoot,.ui[class*="tablet stackable"].table>tfoot>tr,.ui[class*="tablet stackable"].table>tbody,.ui[class*="tablet stackable"].table>tbody>tr,.ui[class*="tablet stackable"].table>tr,.ui[class*="tablet stackable"].table>thead>tr>th:not(.rowspanned),.ui[class*="tablet stackable"].table>tbody>tr>th:not(.rowspanned),.ui[class*="tablet stackable"].table>tfoot>tr>th:not(.rowspanned),.ui[class*="tablet stackable"].table>tr>th:not(.rowspanned),.ui[class*="tablet stackable"].table>tbody>tr>td:not(.rowspanned),.ui[class*="tablet stackable"].table>tfoot>tr>td:not(.rowspanned),.ui[class*="tablet stackable"].table>tr>td:not(.rowspanned){display:block!important;width:100%!important}.ui[class*="tablet stackable"].table{padding:0}.ui[class*="tablet stackable"].table>thead{display:block}.ui[class*="tablet stackable"].table>tfoot{display:block}.ui.ui.ui.ui[class*="tablet stackable"].table>thead>tr,.ui.ui.ui.ui[class*="tablet stackable"].table>tbody>tr,.ui.ui.ui.ui[class*="tablet stackable"].table>tfoot>tr,.ui.ui.ui.ui[class*="tablet stackable"].table>tr{padding-top:1em;padding-bottom:1em;box-shadow:0 -1px #0000001a inset}.ui[class*="tablet stackable"].table>thead>tr>th,.ui[class*="tablet stackable"].table>tbody>tr>th,.ui[class*="tablet stackable"].table>tfoot>tr>th,.ui[class*="tablet stackable"].table>tr>th,.ui[class*="tablet stackable"].table>tbody>tr>td,.ui[class*="tablet stackable"].table>tfoot>tr>td,.ui[class*="tablet stackable"].table>tr>td{background:none;border:none!important;padding:.25em .75em;box-shadow:none}.ui.definition[class*="tablet stackable"].table>thead>tr>th:first-child{box-shadow:none!important}}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.primary.left{box-shadow:0 -1px #0000001a inset,.2em 0 #2185d0 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.primary.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #2185d0 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.primary.left{box-shadow:0 -1px #0000001a inset,.2em 0 #54c8ff inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.primary.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #54c8ff inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.secondary.left{box-shadow:0 -1px #0000001a inset,.2em 0 #1b1c1d inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.secondary.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #1b1c1d inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.secondary.left{box-shadow:0 -1px #0000001a inset,.2em 0 #545454 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.secondary.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #545454 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.red.left{box-shadow:0 -1px #0000001a inset,.2em 0 #db2828 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.red.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #db2828 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.red.left{box-shadow:0 -1px #0000001a inset,.2em 0 #ff695e inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.red.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #ff695e inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.orange.left{box-shadow:0 -1px #0000001a inset,.2em 0 #f2711c inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.orange.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #f2711c inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.orange.left{box-shadow:0 -1px #0000001a inset,.2em 0 #ff851b inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.orange.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #ff851b inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.yellow.left{box-shadow:0 -1px #0000001a inset,.2em 0 #fbbd08 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.yellow.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #fbbd08 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.yellow.left{box-shadow:0 -1px #0000001a inset,.2em 0 #ffe21f inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.yellow.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #ffe21f inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.olive.left{box-shadow:0 -1px #0000001a inset,.2em 0 #b5cc18 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.olive.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #b5cc18 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.olive.left{box-shadow:0 -1px #0000001a inset,.2em 0 #d9e778 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.olive.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #d9e778 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.green.left{box-shadow:0 -1px #0000001a inset,.2em 0 #21ba45 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.green.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #21ba45 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.green.left{box-shadow:0 -1px #0000001a inset,.2em 0 #2ecc40 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.green.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #2ecc40 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.teal.left{box-shadow:0 -1px #0000001a inset,.2em 0 #00b5ad inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.teal.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #00b5ad inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.teal.left{box-shadow:0 -1px #0000001a inset,.2em 0 #6dffff inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.teal.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #6dffff inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.blue.left{box-shadow:0 -1px #0000001a inset,.2em 0 #2185d0 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.blue.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #2185d0 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.blue.left{box-shadow:0 -1px #0000001a inset,.2em 0 #54c8ff inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.blue.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #54c8ff inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.violet.left{box-shadow:0 -1px #0000001a inset,.2em 0 #6435c9 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.violet.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #6435c9 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.violet.left{box-shadow:0 -1px #0000001a inset,.2em 0 #a291fb inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.violet.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #a291fb inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.purple.left{box-shadow:0 -1px #0000001a inset,.2em 0 #a333c8 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.purple.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #a333c8 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.purple.left{box-shadow:0 -1px #0000001a inset,.2em 0 #dc73ff inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.purple.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #dc73ff inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.pink.left{box-shadow:0 -1px #0000001a inset,.2em 0 #e03997 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.pink.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #e03997 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.pink.left{box-shadow:0 -1px #0000001a inset,.2em 0 #ff8edf inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.pink.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #ff8edf inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.brown.left{box-shadow:0 -1px #0000001a inset,.2em 0 #a5673f inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.brown.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #a5673f inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.brown.left{box-shadow:0 -1px #0000001a inset,.2em 0 #d67c1c inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.brown.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #d67c1c inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.grey.left{box-shadow:0 -1px #0000001a inset,.2em 0 #767676 inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.grey.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #767676 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.grey.left{box-shadow:0 -1px #0000001a inset,.2em 0 #dcddde inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.grey.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #dcddde inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.black.left{box-shadow:0 -1px #0000001a inset,.2em 0 #1b1c1d inset}.ui.ui.ui.ui[class*="tablet stackable"].table tr.marked.black.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #1b1c1d inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.black.left{box-shadow:0 -1px #0000001a inset,.2em 0 #545454 inset}.ui.ui.ui.ui[class*="tablet stackable"].inverted.table tr.marked.black.right{box-shadow:0 -1px #0000001a inset,-.2em 0 #545454 inset}.ui.table[class*="left aligned"],.ui.table [class*="left aligned"]{text-align:left}.ui.table[class*="center aligned"],.ui.table [class*="center aligned"]{text-align:center}.ui.table[class*="right aligned"],.ui.table [class*="right aligned"]{text-align:right}.ui.table[class*="top aligned"],.ui.table [class*="top aligned"]{vertical-align:top}.ui.table[class*="middle aligned"],.ui.table [class*="middle aligned"]{vertical-align:middle}.ui.table[class*="bottom aligned"],.ui.table [class*="bottom aligned"]{vertical-align:bottom}.ui.table th.collapsing,.ui.table td.collapsing{width:1px;white-space:nowrap}.ui.fixed.table{table-layout:fixed}.ui.fixed.table th,.ui.fixed.table td{overflow:hidden;text-overflow:ellipsis}.ui.ui.selectable.table>tbody>tr:hover,.ui.table tbody tr td.selectable:hover{background:rgba(0,0,0,.05);color:#000000f2}.ui.ui.selectable.inverted.table>tbody>tr:hover,.ui.inverted.table tbody tr td.selectable:hover{background:rgba(255,255,255,.08);color:#fff}.ui.table tbody tr td.selectable{padding:0}.ui.table tbody tr td.selectable>a:not(.ui){display:block;color:inherit;padding:.78571429em}.ui.table>tr>td.selectable,.ui.table>tbody>tr>td.selectable,.ui.selectable.table>tbody>tr,.ui.selectable.table>tr{cursor:pointer}.ui.ui.selectable.table tr.error:hover,.ui.table tr td.selectable.error:hover,.ui.selectable.table tr:hover td.error{background:#ffe7e7;color:#943634}.ui.ui.selectable.table tr.warning:hover,.ui.table tr td.selectable.warning:hover,.ui.selectable.table tr:hover td.warning{background:#fff4e4;color:#493107}.ui.ui.selectable.table tr.active:hover,.ui.table tr td.selectable.active:hover,.ui.selectable.table tr:hover td.active{background:#E0E0E0;color:#000000de}.ui.ui.selectable.table tr.positive:hover,.ui.table tr td.selectable.positive:hover,.ui.selectable.table tr:hover td.positive{background:#f7ffe6;color:#275b28}.ui.ui.selectable.table tr.negative:hover,.ui.table tr td.selectable.negative:hover,.ui.selectable.table tr:hover td.negative{background:#ffe7e7;color:#943634}.ui.attached.table{top:0;bottom:0;border-radius:0;margin:0 -1px;width:calc(100% + 2px);max-width:calc(100% + 2px);box-shadow:none;border:1px solid #D4D4D5}.ui.attached+.ui.attached.table:not(.top){border-top:none}.ui[class*="top attached"].table{bottom:0;margin-bottom:0;top:0;margin-top:1em;border-radius:.28571429rem .28571429rem 0 0}.ui.table[class*="top attached"]:first-child{margin-top:0}.ui[class*="bottom attached"].table{bottom:0;margin-top:0;top:0;margin-bottom:1em;box-shadow:none,none;border-radius:0 0 .28571429rem .28571429rem}.ui[class*="bottom attached"].table:last-child{margin-bottom:0}.ui.striped.table>tr:nth-child(2n),.ui.striped.table>tbody>tr:nth-child(2n){background-color:#00003205}.ui.inverted.striped.table>tr:nth-child(2n),.ui.inverted.striped.table>tbody>tr:nth-child(2n){background-color:#ffffff0d}.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover{background:#EFEFEF;color:#000000f2}.ui.table[class*="single line"],.ui.table [class*="single line"]{white-space:nowrap}.ui.primary.table{border-top:.2em solid #2185D0}.ui.inverted.primary.table{background-color:#2185d0;color:#fff}.ui.ui.ui.ui.table tr.primary:not(.marked),.ui.ui.table td.primary:not(.marked){background:#ddf4ff;color:#ffffffe6}.ui.ui.selectable.table tr.primary:not(.marked):hover,.ui.table tr td.selectable.primary:not(.marked):hover,.ui.selectable.table tr:hover td.primary:not(.marked){background:#d3f1ff;color:#ffffffe6}.ui.table td.marked.primary.left,.ui.table tr.marked.primary.left{box-shadow:.2em 0 #2185d0 inset}.ui.table td.marked.primary.right,.ui.table tr.marked.primary.right{box-shadow:-.2em 0 #2185d0 inset}.ui.inverted.table td.marked.primary.left,.ui.inverted.table tr.marked.primary.left{box-shadow:.2em 0 #54c8ff inset}.ui.inverted.table td.marked.primary.right,.ui.inverted.table tr.marked.primary.right{box-shadow:-.2em 0 #54c8ff inset}.ui.secondary.table{border-top:.2em solid #1B1C1D}.ui.inverted.secondary.table{background-color:#1b1c1d;color:#fff}.ui.ui.ui.ui.table tr.secondary:not(.marked),.ui.ui.table td.secondary:not(.marked){background:#dddddd;color:#ffffffe6}.ui.ui.selectable.table tr.secondary:not(.marked):hover,.ui.table tr td.selectable.secondary:not(.marked):hover,.ui.selectable.table tr:hover td.secondary:not(.marked){background:#e2e2e2;color:#ffffffe6}.ui.table td.marked.secondary.left,.ui.table tr.marked.secondary.left{box-shadow:.2em 0 #1b1c1d inset}.ui.table td.marked.secondary.right,.ui.table tr.marked.secondary.right{box-shadow:-.2em 0 #1b1c1d inset}.ui.inverted.table td.marked.secondary.left,.ui.inverted.table tr.marked.secondary.left{box-shadow:.2em 0 #545454 inset}.ui.inverted.table td.marked.secondary.right,.ui.inverted.table tr.marked.secondary.right{box-shadow:-.2em 0 #545454 inset}.ui.red.table{border-top:.2em solid #DB2828}.ui.inverted.red.table{background-color:#db2828;color:#fff}.ui.ui.ui.ui.table tr.red:not(.marked),.ui.ui.table td.red:not(.marked){background:#ffe1df;color:#db2828}.ui.ui.selectable.table tr.red:not(.marked):hover,.ui.table tr td.selectable.red:not(.marked):hover,.ui.selectable.table tr:hover td.red:not(.marked){background:#ffd7d5;color:#db2828}.ui.table td.marked.red.left,.ui.table tr.marked.red.left{box-shadow:.2em 0 #db2828 inset}.ui.table td.marked.red.right,.ui.table tr.marked.red.right{box-shadow:-.2em 0 #db2828 inset}.ui.inverted.table td.marked.red.left,.ui.inverted.table tr.marked.red.left{box-shadow:.2em 0 #ff695e inset}.ui.inverted.table td.marked.red.right,.ui.inverted.table tr.marked.red.right{box-shadow:-.2em 0 #ff695e inset}.ui.orange.table{border-top:.2em solid #F2711C}.ui.inverted.orange.table{background-color:#f2711c;color:#fff}.ui.ui.ui.ui.table tr.orange:not(.marked),.ui.ui.table td.orange:not(.marked){background:#ffe7d1;color:#f2711c}.ui.ui.selectable.table tr.orange:not(.marked):hover,.ui.table tr td.selectable.orange:not(.marked):hover,.ui.selectable.table tr:hover td.orange:not(.marked){background:#fae1cc;color:#f2711c}.ui.table td.marked.orange.left,.ui.table tr.marked.orange.left{box-shadow:.2em 0 #f2711c inset}.ui.table td.marked.orange.right,.ui.table tr.marked.orange.right{box-shadow:-.2em 0 #f2711c inset}.ui.inverted.table td.marked.orange.left,.ui.inverted.table tr.marked.orange.left{box-shadow:.2em 0 #ff851b inset}.ui.inverted.table td.marked.orange.right,.ui.inverted.table tr.marked.orange.right{box-shadow:-.2em 0 #ff851b inset}.ui.yellow.table{border-top:.2em solid #FBBD08}.ui.inverted.yellow.table{background-color:#fbbd08;color:#fff}.ui.ui.ui.ui.table tr.yellow:not(.marked),.ui.ui.table td.yellow:not(.marked){background:#fff9d2;color:#b58105}.ui.ui.selectable.table tr.yellow:not(.marked):hover,.ui.table tr td.selectable.yellow:not(.marked):hover,.ui.selectable.table tr:hover td.yellow:not(.marked){background:#fbf5cc;color:#b58105}.ui.table td.marked.yellow.left,.ui.table tr.marked.yellow.left{box-shadow:.2em 0 #fbbd08 inset}.ui.table td.marked.yellow.right,.ui.table tr.marked.yellow.right{box-shadow:-.2em 0 #fbbd08 inset}.ui.inverted.table td.marked.yellow.left,.ui.inverted.table tr.marked.yellow.left{box-shadow:.2em 0 #ffe21f inset}.ui.inverted.table td.marked.yellow.right,.ui.inverted.table tr.marked.yellow.right{box-shadow:-.2em 0 #ffe21f inset}.ui.olive.table{border-top:.2em solid #B5CC18}.ui.inverted.olive.table{background-color:#b5cc18;color:#fff}.ui.ui.ui.ui.table tr.olive:not(.marked),.ui.ui.table td.olive:not(.marked){background:#f7fae4;color:#8abc1e}.ui.ui.selectable.table tr.olive:not(.marked):hover,.ui.table tr td.selectable.olive:not(.marked):hover,.ui.selectable.table tr:hover td.olive:not(.marked){background:#f6fada;color:#8abc1e}.ui.table td.marked.olive.left,.ui.table tr.marked.olive.left{box-shadow:.2em 0 #b5cc18 inset}.ui.table td.marked.olive.right,.ui.table tr.marked.olive.right{box-shadow:-.2em 0 #b5cc18 inset}.ui.inverted.table td.marked.olive.left,.ui.inverted.table tr.marked.olive.left{box-shadow:.2em 0 #d9e778 inset}.ui.inverted.table td.marked.olive.right,.ui.inverted.table tr.marked.olive.right{box-shadow:-.2em 0 #d9e778 inset}.ui.green.table{border-top:.2em solid #21BA45}.ui.inverted.green.table{background-color:#21ba45;color:#fff}.ui.ui.ui.ui.table tr.green:not(.marked),.ui.ui.table td.green:not(.marked){background:#d5f5d9;color:#1ebc30}.ui.ui.selectable.table tr.green:not(.marked):hover,.ui.table tr td.selectable.green:not(.marked):hover,.ui.selectable.table tr:hover td.green:not(.marked){background:#d2eed5;color:#1ebc30}.ui.table td.marked.green.left,.ui.table tr.marked.green.left{box-shadow:.2em 0 #21ba45 inset}.ui.table td.marked.green.right,.ui.table tr.marked.green.right{box-shadow:-.2em 0 #21ba45 inset}.ui.inverted.table td.marked.green.left,.ui.inverted.table tr.marked.green.left{box-shadow:.2em 0 #2ecc40 inset}.ui.inverted.table td.marked.green.right,.ui.inverted.table tr.marked.green.right{box-shadow:-.2em 0 #2ecc40 inset}.ui.teal.table{border-top:.2em solid #00B5AD}.ui.inverted.teal.table{background-color:#00b5ad;color:#fff}.ui.ui.ui.ui.table tr.teal:not(.marked),.ui.ui.table td.teal:not(.marked){background:#e2ffff;color:#10a3a3}.ui.ui.selectable.table tr.teal:not(.marked):hover,.ui.table tr td.selectable.teal:not(.marked):hover,.ui.selectable.table tr:hover td.teal:not(.marked){background:#d8ffff;color:#10a3a3}.ui.table td.marked.teal.left,.ui.table tr.marked.teal.left{box-shadow:.2em 0 #00b5ad inset}.ui.table td.marked.teal.right,.ui.table tr.marked.teal.right{box-shadow:-.2em 0 #00b5ad inset}.ui.inverted.table td.marked.teal.left,.ui.inverted.table tr.marked.teal.left{box-shadow:.2em 0 #6dffff inset}.ui.inverted.table td.marked.teal.right,.ui.inverted.table tr.marked.teal.right{box-shadow:-.2em 0 #6dffff inset}.ui.blue.table{border-top:.2em solid #2185D0}.ui.inverted.blue.table{background-color:#2185d0;color:#fff}.ui.ui.ui.ui.table tr.blue:not(.marked),.ui.ui.table td.blue:not(.marked){background:#ddf4ff;color:#2185d0}.ui.ui.selectable.table tr.blue:not(.marked):hover,.ui.table tr td.selectable.blue:not(.marked):hover,.ui.selectable.table tr:hover td.blue:not(.marked){background:#d3f1ff;color:#2185d0}.ui.table td.marked.blue.left,.ui.table tr.marked.blue.left{box-shadow:.2em 0 #2185d0 inset}.ui.table td.marked.blue.right,.ui.table tr.marked.blue.right{box-shadow:-.2em 0 #2185d0 inset}.ui.inverted.table td.marked.blue.left,.ui.inverted.table tr.marked.blue.left{box-shadow:.2em 0 #54c8ff inset}.ui.inverted.table td.marked.blue.right,.ui.inverted.table tr.marked.blue.right{box-shadow:-.2em 0 #54c8ff inset}.ui.violet.table{border-top:.2em solid #6435C9}.ui.inverted.violet.table{background-color:#6435c9;color:#fff}.ui.ui.ui.ui.table tr.violet:not(.marked),.ui.ui.table td.violet:not(.marked){background:#ece9fe;color:#6435c9}.ui.ui.selectable.table tr.violet:not(.marked):hover,.ui.table tr td.selectable.violet:not(.marked):hover,.ui.selectable.table tr:hover td.violet:not(.marked){background:#e3deff;color:#6435c9}.ui.table td.marked.violet.left,.ui.table tr.marked.violet.left{box-shadow:.2em 0 #6435c9 inset}.ui.table td.marked.violet.right,.ui.table tr.marked.violet.right{box-shadow:-.2em 0 #6435c9 inset}.ui.inverted.table td.marked.violet.left,.ui.inverted.table tr.marked.violet.left{box-shadow:.2em 0 #a291fb inset}.ui.inverted.table td.marked.violet.right,.ui.inverted.table tr.marked.violet.right{box-shadow:-.2em 0 #a291fb inset}.ui.purple.table{border-top:.2em solid #A333C8}.ui.inverted.purple.table{background-color:#a333c8;color:#fff}.ui.ui.ui.ui.table tr.purple:not(.marked),.ui.ui.table td.purple:not(.marked){background:#f8e3ff;color:#a333c8}.ui.ui.selectable.table tr.purple:not(.marked):hover,.ui.table tr td.selectable.purple:not(.marked):hover,.ui.selectable.table tr:hover td.purple:not(.marked){background:#f5d9ff;color:#a333c8}.ui.table td.marked.purple.left,.ui.table tr.marked.purple.left{box-shadow:.2em 0 #a333c8 inset}.ui.table td.marked.purple.right,.ui.table tr.marked.purple.right{box-shadow:-.2em 0 #a333c8 inset}.ui.inverted.table td.marked.purple.left,.ui.inverted.table tr.marked.purple.left{box-shadow:.2em 0 #dc73ff inset}.ui.inverted.table td.marked.purple.right,.ui.inverted.table tr.marked.purple.right{box-shadow:-.2em 0 #dc73ff inset}.ui.pink.table{border-top:.2em solid #E03997}.ui.inverted.pink.table{background-color:#e03997;color:#fff}.ui.ui.ui.ui.table tr.pink:not(.marked),.ui.ui.table td.pink:not(.marked){background:#ffe8f9;color:#e03997}.ui.ui.selectable.table tr.pink:not(.marked):hover,.ui.table tr td.selectable.pink:not(.marked):hover,.ui.selectable.table tr:hover td.pink:not(.marked){background:#ffdef6;color:#e03997}.ui.table td.marked.pink.left,.ui.table tr.marked.pink.left{box-shadow:.2em 0 #e03997 inset}.ui.table td.marked.pink.right,.ui.table tr.marked.pink.right{box-shadow:-.2em 0 #e03997 inset}.ui.inverted.table td.marked.pink.left,.ui.inverted.table tr.marked.pink.left{box-shadow:.2em 0 #ff8edf inset}.ui.inverted.table td.marked.pink.right,.ui.inverted.table tr.marked.pink.right{box-shadow:-.2em 0 #ff8edf inset}.ui.brown.table{border-top:.2em solid #A5673F}.ui.inverted.brown.table{background-color:#a5673f;color:#fff}.ui.ui.ui.ui.table tr.brown:not(.marked),.ui.ui.table td.brown:not(.marked){background:#f7e5d2;color:#a5673f}.ui.ui.selectable.table tr.brown:not(.marked):hover,.ui.table tr td.selectable.brown:not(.marked):hover,.ui.selectable.table tr:hover td.brown:not(.marked){background:#efe0cf;color:#a5673f}.ui.table td.marked.brown.left,.ui.table tr.marked.brown.left{box-shadow:.2em 0 #a5673f inset}.ui.table td.marked.brown.right,.ui.table tr.marked.brown.right{box-shadow:-.2em 0 #a5673f inset}.ui.inverted.table td.marked.brown.left,.ui.inverted.table tr.marked.brown.left{box-shadow:.2em 0 #d67c1c inset}.ui.inverted.table td.marked.brown.right,.ui.inverted.table tr.marked.brown.right{box-shadow:-.2em 0 #d67c1c inset}.ui.grey.table{border-top:.2em solid #767676}.ui.inverted.grey.table{background-color:#767676;color:#fff}.ui.ui.ui.ui.table tr.grey:not(.marked),.ui.ui.table td.grey:not(.marked){background:#DCDDDE;color:#767676}.ui.ui.selectable.table tr.grey:not(.marked):hover,.ui.table tr td.selectable.grey:not(.marked):hover,.ui.selectable.table tr:hover td.grey:not(.marked){background:#c2c4c5;color:#767676}.ui.table td.marked.grey.left,.ui.table tr.marked.grey.left{box-shadow:.2em 0 #767676 inset}.ui.table td.marked.grey.right,.ui.table tr.marked.grey.right{box-shadow:-.2em 0 #767676 inset}.ui.inverted.table td.marked.grey.left,.ui.inverted.table tr.marked.grey.left{box-shadow:.2em 0 #dcddde inset}.ui.inverted.table td.marked.grey.right,.ui.inverted.table tr.marked.grey.right{box-shadow:-.2em 0 #dcddde inset}.ui.black.table{border-top:.2em solid #1B1C1D}.ui.inverted.black.table{background-color:#1b1c1d;color:#fff}.ui.ui.ui.ui.table tr.black:not(.marked),.ui.ui.table td.black:not(.marked){background:#545454;color:#fff}.ui.ui.selectable.table tr.black:not(.marked):hover,.ui.table tr td.selectable.black:not(.marked):hover,.ui.selectable.table tr:hover td.black:not(.marked){background:#000000;color:#fff}.ui.table td.marked.black.left,.ui.table tr.marked.black.left{box-shadow:.2em 0 #1b1c1d inset}.ui.table td.marked.black.right,.ui.table tr.marked.black.right{box-shadow:-.2em 0 #1b1c1d inset}.ui.inverted.table td.marked.black.left,.ui.inverted.table tr.marked.black.left{box-shadow:.2em 0 #545454 inset}.ui.inverted.table td.marked.black.right,.ui.inverted.table tr.marked.black.right{box-shadow:-.2em 0 #545454 inset}.ui.one.column.table td{width:100%}.ui.two.column.table td{width:50%}.ui.three.column.table td{width:33.33333333%}.ui.four.column.table td{width:25%}.ui.five.column.table td{width:20%}.ui.six.column.table td{width:16.66666667%}.ui.seven.column.table td{width:14.28571429%}.ui.eight.column.table td{width:12.5%}.ui.nine.column.table td{width:11.11111111%}.ui.ten.column.table td{width:10%}.ui.eleven.column.table td{width:9.09090909%}.ui.twelve.column.table td{width:8.33333333%}.ui.thirteen.column.table td{width:7.69230769%}.ui.fourteen.column.table td{width:7.14285714%}.ui.fifteen.column.table td{width:6.66666667%}.ui.sixteen.column.table td,.ui.table th.one.wide,.ui.table td.one.wide{width:6.25%}.ui.table th.two.wide,.ui.table td.two.wide{width:12.5%}.ui.table th.three.wide,.ui.table td.three.wide{width:18.75%}.ui.table th.four.wide,.ui.table td.four.wide{width:25%}.ui.table th.five.wide,.ui.table td.five.wide{width:31.25%}.ui.table th.six.wide,.ui.table td.six.wide{width:37.5%}.ui.table th.seven.wide,.ui.table td.seven.wide{width:43.75%}.ui.table th.eight.wide,.ui.table td.eight.wide{width:50%}.ui.table th.nine.wide,.ui.table td.nine.wide{width:56.25%}.ui.table th.ten.wide,.ui.table td.ten.wide{width:62.5%}.ui.table th.eleven.wide,.ui.table td.eleven.wide{width:68.75%}.ui.table th.twelve.wide,.ui.table td.twelve.wide{width:75%}.ui.table th.thirteen.wide,.ui.table td.thirteen.wide{width:81.25%}.ui.table th.fourteen.wide,.ui.table td.fourteen.wide{width:87.5%}.ui.table th.fifteen.wide,.ui.table td.fifteen.wide{width:93.75%}.ui.table th.sixteen.wide,.ui.table td.sixteen.wide{width:100%}.ui.sortable.table>thead>tr>th{cursor:pointer;white-space:nowrap;border-left:1px solid rgba(34,36,38,.15);color:#000000de}.ui.sortable.table>thead>tr>th:first-child{border-left:none}.ui.sortable.table thead th.sorted,.ui.sortable.table thead th.sorted:hover{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ui.sortable.table>thead>tr>th:after{display:none;font-style:normal;font-weight:400;text-decoration:inherit;content:"";height:1em;width:auto;opacity:.8;margin:0 0 0 .5em;font-family:Icons}.ui.sortable.table thead th.ascending:after{content:"\f0d8"}.ui.sortable.table thead th.descending:after{content:"\f0d7"}.ui.sortable.table th.disabled:hover{cursor:auto;color:#2828284d}.ui.sortable.table>thead>tr>th:hover{color:#000c}.ui.sortable.table:not(.basic)>thead>tr>th:hover{background:rgba(0,0,0,.05)}.ui.sortable.table thead th.sorted{color:#000000f2}.ui.sortable.table:not(.basic) thead th.sorted{background:rgba(0,0,0,.05)}.ui.sortable.table thead th.sorted:after{display:inline-block}.ui.sortable.table thead th.sorted:hover{color:#000000f2}.ui.sortable.table:not(.basic) thead th.sorted:hover{background:rgba(0,0,0,.05)}.ui.inverted.sortable.table thead th.sorted{color:#fff}.ui.inverted.sortable.table:not(.basic) thead th.sorted{background:rgba(255,255,255,.15) linear-gradient(transparent,rgba(0,0,0,.05))}.ui.inverted.sortable.table>thead>tr>th:hover{color:#fff}.ui.inverted.sortable.table:not(.basic)>thead>tr>th:hover{background:rgba(255,255,255,.08) linear-gradient(transparent,rgba(0,0,0,.05))}.ui.inverted.sortable.table:not(.basic)>thead>tr>th{border-left-color:transparent;border-right-color:transparent}.ui.inverted.table{background:#333333;color:#ffffffe6;border:none}.ui.ui.inverted.table>thead>tr>th,.ui.ui.inverted.table>tbody>tr>th,.ui.ui.inverted.table>tfoot>tr>th,.ui.ui.inverted.table>tfoot>tr>td,.ui.ui.inverted.table>tr>th{background-color:#00000026;border-color:#ffffff1a;color:#ffffffe6}.ui.inverted.table>tbody>tr>td,.ui.inverted.table>tfoot>tr>td,.ui.inverted.table>tr>td{border-color:#ffffff1a}.ui.inverted.table tr.disabled td,.ui.inverted.table tr td.disabled,.ui.inverted.table tr.disabled:hover td,.ui.inverted.table tr:hover td.disabled{pointer-events:none;color:#e1e1e14d}.ui.inverted.table tr td.disabled:not([class="disabled"]),.ui.inverted.table tr.disabled:not([class="disabled"]) td,.ui.inverted.table tr.disabled td[class]:not(.disabled),.ui.inverted.table tr:hover td.disabled:not([class="disabled"]){color:#2828284d}.ui.inverted.definition.table>tfoot:not(.full-width)>tr>th:first-child,.ui.inverted.definition.table>thead:not(.full-width)>tr>th:first-child{background:#FFFFFF}.ui.inverted.definition.table>tbody>tr>td:first-child .ui.inverted.definition.table>tfoot>tr>td:first-child,.ui.inverted.definition.table>tr>td:first-child{background:rgba(255,255,255,.02);color:#fff}.ui.collapsing.table{width:auto}.ui.basic.table{background:transparent;border:1px solid rgba(34,36,38,.15);box-shadow:none}.ui.basic.table>thead,.ui.basic.table>tfoot{box-shadow:none}.ui.basic.table>thead>tr>th,.ui.basic.table>tbody>tr>th,.ui.basic.table>tfoot>tr>th,.ui.basic.table>tr>th{background:transparent;border-left:none}.ui.basic.table>tbody>tr{border-bottom:1px solid rgba(0,0,0,.1)}.ui.basic.table>tbody>tr>td,.ui.basic.table>tfoot>tr>td,.ui.basic.table>tr>td{background:transparent}.ui.basic.striped.table>tbody>tr:nth-child(2n){background-color:#0000000d}.ui[class*="very basic"].table{border:none}.ui[class*="very basic"].table:not(.sortable):not(.striped)>tr>th,.ui[class*="very basic"].table:not(.sortable):not(.striped)>thead>tr>th,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tbody>tr>th,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tfoot>tr>th,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tr>td,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tbody>tr>td{padding:""}.ui[class*="very basic"].table:not(.sortable):not(.striped)>tr>th:first-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>thead>tr>th:first-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tbody>tr>th:first-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tfoot>tr>th:first-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tr>td:first-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tbody>tr>td:first-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tfoot>tr>td:first-child{padding-left:0}.ui[class*="very basic"].table:not(.sortable):not(.striped)>tr>th:last-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>thead>tr>th:last-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tbody>tr>th:last-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tfoot>tr>th:last-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tr>td:last-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tbody>tr>td:last-child,.ui[class*="very basic"].table:not(.sortable):not(.striped)>tfoot>tr>td:last-child{padding-right:0}.ui[class*="very basic"].table:not(.sortable):not(.striped)>thead>tr:first-child>th{padding-top:0}.ui.celled.table>tr>th,.ui.celled.table>thead>tr>th,.ui.celled.table>tbody>tr>th,.ui.celled.table>tfoot>tr>th,.ui.celled.table>tr>td,.ui.celled.table>tbody>tr>td,.ui.celled.table>tfoot>tr>td{border-left:1px solid rgba(34,36,38,.1)}.ui.inverted.celled.table>tbody>tr>td,.ui.inverted.celled.table>tr>td{border-left:1px solid rgba(255,255,255,.1)}.ui.celled.table>tr>th:first-child,.ui.celled.table>thead>tr>th:first-child,.ui.celled.table>tbody>tr>th:first-child,.ui.celled.table>tfoot>tr>th:first-child,.ui.celled.table>tr>td:first-child,.ui.celled.table>tbody>tr>td:first-child,.ui.celled.table>tfoot>tr>td:first-child{border-left:none}.ui.padded.table>tr>th,.ui.padded.table>thead>tr>th,.ui.padded.table>tbody>tr>th,.ui.padded.table>tfoot>tr>th{padding-left:1em;padding-right:1em}.ui.padded.table>tr>th,.ui.padded.table>thead>tr>th,.ui.padded.table>tbody>tr>th,.ui.padded.table>tfoot>tr>th,.ui.padded.table>tr>td,.ui.padded.table>tbody>tr>td,.ui.padded.table>tfoot>tr>td{padding:1em}.ui[class*="very padded"].table>tr>th,.ui[class*="very padded"].table>thead>tr>th,.ui[class*="very padded"].table>tbody>tr>th,.ui[class*="very padded"].table>tfoot>tr>th{padding-left:1.5em;padding-right:1.5em}.ui[class*="very padded"].table>tr>td,.ui[class*="very padded"].table>tbody>tr>td,.ui[class*="very padded"].table>tfoot>tr>td{padding:1.5em}.ui.compact.table>tr>th,.ui.compact.table>thead>tr>th,.ui.compact.table>tbody>tr>th,.ui.compact.table>tfoot>tr>th{padding-left:.7em;padding-right:.7em}.ui.compact.table>tr>td,.ui.compact.table>tbody>tr>td,.ui.compact.table>tfoot>tr>td{padding:.5em .7em}.ui[class*="very compact"].table>tr>th,.ui[class*="very compact"].table>thead>tr>th,.ui[class*="very compact"].table>tbody>tr>th,.ui[class*="very compact"].table>tfoot>tr>th{padding-left:.6em;padding-right:.6em}.ui[class*="very compact"].table>tr>td,.ui[class*="very compact"].table>tbody>tr>td,.ui[class*="very compact"].table>tfoot>tr>td{padding:.4em .6em}.ui.table{font-size:1em}.ui.mini.table{font-size:.78571429rem}.ui.tiny.table{font-size:.85714286rem}.ui.small.table{font-size:.9em}.ui.large.table{font-size:1.1em}.ui.big.table{font-size:1.28571429rem}.ui.huge.table{font-size:1.42857143rem}.ui.massive.table{font-size:1.71428571rem}span.ui.text{line-height:1}span.ui.primary.text{color:#2185d0}span.ui.inverted.primary.text{color:#54c8ff}span.ui.secondary.text{color:#1b1c1d}span.ui.inverted.secondary.text{color:#545454}span.ui.red.text{color:#db2828}span.ui.inverted.red.text{color:#ff695e}span.ui.orange.text{color:#f2711c}span.ui.inverted.orange.text{color:#ff851b}span.ui.yellow.text{color:#fbbd08}span.ui.inverted.yellow.text{color:#ffe21f}span.ui.olive.text{color:#b5cc18}span.ui.inverted.olive.text{color:#d9e778}span.ui.green.text{color:#21ba45}span.ui.inverted.green.text{color:#2ecc40}span.ui.teal.text{color:#00b5ad}span.ui.inverted.teal.text{color:#6dffff}span.ui.blue.text{color:#2185d0}span.ui.inverted.blue.text{color:#54c8ff}span.ui.violet.text{color:#6435c9}span.ui.inverted.violet.text{color:#a291fb}span.ui.purple.text{color:#a333c8}span.ui.inverted.purple.text{color:#dc73ff}span.ui.pink.text{color:#e03997}span.ui.inverted.pink.text{color:#ff8edf}span.ui.brown.text{color:#a5673f}span.ui.inverted.brown.text{color:#d67c1c}span.ui.grey.text{color:#767676}span.ui.inverted.grey.text{color:#dcddde}span.ui.black.text{color:#1b1c1d}span.ui.inverted.black.text{color:#545454}span.ui.error.text{color:#db2828}span.ui.info.text{color:#31ccec}span.ui.success.text{color:#21ba45}span.ui.warning.text{color:#f2c037}span.ui.disabled.text{opacity:var(--opacity-disabled)}span.ui.medium.text{font-size:1em}span.ui.mini.text{font-size:.4em}span.ui.tiny.text{font-size:.5em}span.ui.small.text{font-size:.75em}span.ui.large.text{font-size:1.5em}span.ui.big.text{font-size:2em}span.ui.huge.text{font-size:4em}span.ui.massive.text{font-size:8em}.transition{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animating.transition{-webkit-backface-visibility:hidden;backface-visibility:hidden;visibility:visible!important}.loading.transition{position:absolute;top:-99999px;left:-99999px}.hidden.transition{display:none;visibility:hidden}.visible.transition{display:block!important;visibility:visible!important}.disabled.transition{-webkit-animation-play-state:paused;animation-play-state:paused}.looping.transition{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.transition.browse{-webkit-animation-duration:.5s;animation-duration:.5s}.transition.browse.in{-webkit-animation-name:browseIn;animation-name:browseIn}.transition.browse.out,.transition.browse.left.out{-webkit-animation-name:browseOutLeft;animation-name:browseOutLeft}.transition.browse.right.out{-webkit-animation-name:browseOutRight;animation-name:browseOutRight}@-webkit-keyframes browseIn{0%{transform:scale(.8) translateZ(0);z-index:-1}10%{transform:scale(.8) translateZ(0);z-index:-1;opacity:.7}80%{transform:scale(1.05) translateZ(0);opacity:1;z-index:999}to{transform:scale(1) translateZ(0);z-index:999}}@keyframes browseIn{0%{transform:scale(.8) translateZ(0);z-index:-1}10%{transform:scale(.8) translateZ(0);z-index:-1;opacity:.7}80%{transform:scale(1.05) translateZ(0);opacity:1;z-index:999}to{transform:scale(1) translateZ(0);z-index:999}}@-webkit-keyframes browseOutLeft{0%{z-index:999;transform:translate(0) rotateY(0) rotateX(0)}50%{z-index:-1;transform:translate(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px)}80%{opacity:1}to{z-index:-1;transform:translate(0) rotateY(0) rotateX(0) translateZ(-10px);opacity:0}}@keyframes browseOutLeft{0%{z-index:999;transform:translate(0) rotateY(0) rotateX(0)}50%{z-index:-1;transform:translate(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px)}80%{opacity:1}to{z-index:-1;transform:translate(0) rotateY(0) rotateX(0) translateZ(-10px);opacity:0}}@-webkit-keyframes browseOutRight{0%{z-index:999;transform:translate(0) rotateY(0) rotateX(0)}50%{z-index:1;transform:translate(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px)}80%{opacity:1}to{z-index:1;transform:translate(0) rotateY(0) rotateX(0) translateZ(-10px);opacity:0}}@keyframes browseOutRight{0%{z-index:999;transform:translate(0) rotateY(0) rotateX(0)}50%{z-index:1;transform:translate(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px)}80%{opacity:1}to{z-index:1;transform:translate(0) rotateY(0) rotateX(0) translateZ(-10px);opacity:0}}.drop.transition{transform-origin:top center;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:cubic-bezier(.34,1.61,.7,1);animation-timing-function:cubic-bezier(.34,1.61,.7,1)}.drop.transition.in{-webkit-animation-name:dropIn;animation-name:dropIn}.drop.transition.out{-webkit-animation-name:dropOut;animation-name:dropOut}@-webkit-keyframes dropIn{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}@keyframes dropIn{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}@-webkit-keyframes dropOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0)}}@keyframes dropOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0)}}.transition.fade.in{-webkit-animation-name:fadeIn;animation-name:fadeIn}.transition[class*="fade up"].in{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}.transition[class*="fade down"].in{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}.transition[class*="fade left"].in{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}.transition[class*="fade right"].in{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}.transition.fade.out{-webkit-animation-name:fadeOut;animation-name:fadeOut}.transition[class*="fade up"].out{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}.transition[class*="fade down"].out{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}.transition[class*="fade left"].out{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}.transition[class*="fade right"].out{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes fadeInUp{0%{opacity:0;transform:translateY(10%)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10%)}to{opacity:1;transform:translateY(0)}}@-webkit-keyframes fadeInDown{0%{opacity:0;transform:translateY(-10%)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;transform:translateY(-10%)}to{opacity:1;transform:translateY(0)}}@-webkit-keyframes fadeInLeft{0%{opacity:0;transform:translate(10%)}to{opacity:1;transform:translate(0)}}@keyframes fadeInLeft{0%{opacity:0;transform:translate(10%)}to{opacity:1;transform:translate(0)}}@-webkit-keyframes fadeInRight{0%{opacity:0;transform:translate(-10%)}to{opacity:1;transform:translate(0)}}@keyframes fadeInRight{0%{opacity:0;transform:translate(-10%)}to{opacity:1;transform:translate(0)}}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@-webkit-keyframes fadeOutUp{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(5%)}}@keyframes fadeOutUp{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(5%)}}@-webkit-keyframes fadeOutDown{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-5%)}}@keyframes fadeOutDown{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-5%)}}@-webkit-keyframes fadeOutLeft{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(5%)}}@keyframes fadeOutLeft{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(5%)}}@-webkit-keyframes fadeOutRight{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-5%)}}@keyframes fadeOutRight{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-5%)}}.flip.transition.in,.flip.transition.out{-webkit-animation-duration:.6s;animation-duration:.6s}.horizontal.flip.transition.in{-webkit-animation-name:horizontalFlipIn;animation-name:horizontalFlipIn}.horizontal.flip.transition.out{-webkit-animation-name:horizontalFlipOut;animation-name:horizontalFlipOut}.vertical.flip.transition.in{-webkit-animation-name:verticalFlipIn;animation-name:verticalFlipIn}.vertical.flip.transition.out{-webkit-animation-name:verticalFlipOut;animation-name:verticalFlipOut}@-webkit-keyframes horizontalFlipIn{0%{transform:perspective(2000px) rotateY(-90deg);opacity:0}to{transform:perspective(2000px) rotateY(0);opacity:1}}@keyframes horizontalFlipIn{0%{transform:perspective(2000px) rotateY(-90deg);opacity:0}to{transform:perspective(2000px) rotateY(0);opacity:1}}@-webkit-keyframes verticalFlipIn{0%{transform:perspective(2000px) rotateX(-90deg);opacity:0}to{transform:perspective(2000px) rotateX(0);opacity:1}}@keyframes verticalFlipIn{0%{transform:perspective(2000px) rotateX(-90deg);opacity:0}to{transform:perspective(2000px) rotateX(0);opacity:1}}@-webkit-keyframes horizontalFlipOut{0%{transform:perspective(2000px) rotateY(0);opacity:1}to{transform:perspective(2000px) rotateY(90deg);opacity:0}}@keyframes horizontalFlipOut{0%{transform:perspective(2000px) rotateY(0);opacity:1}to{transform:perspective(2000px) rotateY(90deg);opacity:0}}@-webkit-keyframes verticalFlipOut{0%{transform:perspective(2000px) rotateX(0);opacity:1}to{transform:perspective(2000px) rotateX(-90deg);opacity:0}}@keyframes verticalFlipOut{0%{transform:perspective(2000px) rotateX(0);opacity:1}to{transform:perspective(2000px) rotateX(-90deg);opacity:0}}.scale.transition.in{-webkit-animation-name:scaleIn;animation-name:scaleIn}.scale.transition.out{-webkit-animation-name:scaleOut;animation-name:scaleOut}@-webkit-keyframes scaleIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@-webkit-keyframes scaleOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}@keyframes scaleOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}.transition.fly{-webkit-animation-duration:.6s;animation-duration:.6s;transition-timing-function:cubic-bezier(.215,.61,.355,1)}.transition.fly.in{-webkit-animation-name:flyIn;animation-name:flyIn}.transition[class*="fly up"].in{-webkit-animation-name:flyInUp;animation-name:flyInUp}.transition[class*="fly down"].in{-webkit-animation-name:flyInDown;animation-name:flyInDown}.transition[class*="fly left"].in{-webkit-animation-name:flyInLeft;animation-name:flyInLeft}.transition[class*="fly right"].in{-webkit-animation-name:flyInRight;animation-name:flyInRight}.transition.fly.out{-webkit-animation-name:flyOut;animation-name:flyOut}.transition[class*="fly up"].out{-webkit-animation-name:flyOutUp;animation-name:flyOutUp}.transition[class*="fly down"].out{-webkit-animation-name:flyOutDown;animation-name:flyOutDown}.transition[class*="fly left"].out{-webkit-animation-name:flyOutLeft;animation-name:flyOutLeft}.transition[class*="fly right"].out{-webkit-animation-name:flyOutRight;animation-name:flyOutRight}@-webkit-keyframes flyIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scaleZ(1)}}@keyframes flyIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scaleZ(1)}}@-webkit-keyframes flyInUp{0%{opacity:0;transform:translate3d(0,1500px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes flyInUp{0%{opacity:0;transform:translate3d(0,1500px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@-webkit-keyframes flyInDown{0%{opacity:0;transform:translate3d(0,-1500px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes flyInDown{0%{opacity:0;transform:translate3d(0,-1500px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@-webkit-keyframes flyInLeft{0%{opacity:0;transform:translate3d(1500px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes flyInLeft{0%{opacity:0;transform:translate3d(1500px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@-webkit-keyframes flyInRight{0%{opacity:0;transform:translate3d(-1500px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes flyInRight{0%{opacity:0;transform:translate3d(-1500px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@-webkit-keyframes flyOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}@keyframes flyOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}@-webkit-keyframes flyOutUp{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}@keyframes flyOutUp{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}@-webkit-keyframes flyOutDown{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes flyOutDown{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@-webkit-keyframes flyOutRight{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes flyOutRight{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@-webkit-keyframes flyOutLeft{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}@keyframes flyOutLeft{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}.transition.slide.in,.transition[class*="slide down"].in{-webkit-animation-name:slideInY;animation-name:slideInY;transform-origin:top center}.transition[class*="slide up"].in{-webkit-animation-name:slideInY;animation-name:slideInY;transform-origin:bottom center}.transition[class*="slide left"].in{-webkit-animation-name:slideInX;animation-name:slideInX;transform-origin:right center}.transition[class*="slide right"].in{-webkit-animation-name:slideInX;animation-name:slideInX;transform-origin:left center}.transition.slide.out,.transition[class*="slide down"].out{-webkit-animation-name:slideOutY;animation-name:slideOutY;transform-origin:top center}.transition[class*="slide up"].out{-webkit-animation-name:slideOutY;animation-name:slideOutY;transform-origin:bottom center}.transition[class*="slide left"].out{-webkit-animation-name:slideOutX;animation-name:slideOutX;transform-origin:right center}.transition[class*="slide right"].out{-webkit-animation-name:slideOutX;animation-name:slideOutX;transform-origin:left center}@-webkit-keyframes slideInY{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes slideInY{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@-webkit-keyframes slideInX{0%{opacity:0;transform:scaleX(0)}to{opacity:1;transform:scaleX(1)}}@keyframes slideInX{0%{opacity:0;transform:scaleX(0)}to{opacity:1;transform:scaleX(1)}}@-webkit-keyframes slideOutY{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}@keyframes slideOutY{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}@-webkit-keyframes slideOutX{0%{opacity:1;transform:scaleX(1)}to{opacity:0;transform:scaleX(0)}}@keyframes slideOutX{0%{opacity:1;transform:scaleX(1)}to{opacity:0;transform:scaleX(0)}}.transition.swing{-webkit-animation-duration:.8s;animation-duration:.8s}.transition[class*="swing down"].in{-webkit-animation-name:swingInX;animation-name:swingInX;transform-origin:top center}.transition[class*="swing up"].in{-webkit-animation-name:swingInX;animation-name:swingInX;transform-origin:bottom center}.transition[class*="swing left"].in{-webkit-animation-name:swingInY;animation-name:swingInY;transform-origin:right center}.transition[class*="swing right"].in{-webkit-animation-name:swingInY;animation-name:swingInY;transform-origin:left center}.transition.swing.out,.transition[class*="swing down"].out{-webkit-animation-name:swingOutX;animation-name:swingOutX;transform-origin:top center}.transition[class*="swing up"].out{-webkit-animation-name:swingOutX;animation-name:swingOutX;transform-origin:bottom center}.transition[class*="swing left"].out{-webkit-animation-name:swingOutY;animation-name:swingOutY;transform-origin:right center}.transition[class*="swing right"].out{-webkit-animation-name:swingOutY;animation-name:swingOutY;transform-origin:left center}@-webkit-keyframes swingInX{0%{transform:perspective(1000px) rotateX(90deg);opacity:0}40%{transform:perspective(1000px) rotateX(-30deg);opacity:1}60%{transform:perspective(1000px) rotateX(15deg)}80%{transform:perspective(1000px) rotateX(-7.5deg)}to{transform:perspective(1000px) rotateX(0)}}@keyframes swingInX{0%{transform:perspective(1000px) rotateX(90deg);opacity:0}40%{transform:perspective(1000px) rotateX(-30deg);opacity:1}60%{transform:perspective(1000px) rotateX(15deg)}80%{transform:perspective(1000px) rotateX(-7.5deg)}to{transform:perspective(1000px) rotateX(0)}}@-webkit-keyframes swingInY{0%{transform:perspective(1000px) rotateY(-90deg);opacity:0}40%{transform:perspective(1000px) rotateY(30deg);opacity:1}60%{transform:perspective(1000px) rotateY(-17.5deg)}80%{transform:perspective(1000px) rotateY(7.5deg)}to{transform:perspective(1000px) rotateY(0)}}@keyframes swingInY{0%{transform:perspective(1000px) rotateY(-90deg);opacity:0}40%{transform:perspective(1000px) rotateY(30deg);opacity:1}60%{transform:perspective(1000px) rotateY(-17.5deg)}80%{transform:perspective(1000px) rotateY(7.5deg)}to{transform:perspective(1000px) rotateY(0)}}@-webkit-keyframes swingOutX{0%{transform:perspective(1000px) rotateX(0)}40%{transform:perspective(1000px) rotateX(-7.5deg)}60%{transform:perspective(1000px) rotateX(17.5deg)}80%{transform:perspective(1000px) rotateX(-30deg);opacity:1}to{transform:perspective(1000px) rotateX(90deg);opacity:0}}@keyframes swingOutX{0%{transform:perspective(1000px) rotateX(0)}40%{transform:perspective(1000px) rotateX(-7.5deg)}60%{transform:perspective(1000px) rotateX(17.5deg)}80%{transform:perspective(1000px) rotateX(-30deg);opacity:1}to{transform:perspective(1000px) rotateX(90deg);opacity:0}}@-webkit-keyframes swingOutY{0%{transform:perspective(1000px) rotateY(0)}40%{transform:perspective(1000px) rotateY(7.5deg)}60%{transform:perspective(1000px) rotateY(-10deg)}80%{transform:perspective(1000px) rotateY(30deg);opacity:1}to{transform:perspective(1000px) rotateY(-90deg);opacity:0}}@keyframes swingOutY{0%{transform:perspective(1000px) rotateY(0)}40%{transform:perspective(1000px) rotateY(7.5deg)}60%{transform:perspective(1000px) rotateY(-10deg)}80%{transform:perspective(1000px) rotateY(30deg);opacity:1}to{transform:perspective(1000px) rotateY(-90deg);opacity:0}}.transition.zoom.in{-webkit-animation-name:zoomIn;animation-name:zoomIn}.transition.zoom.out{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomIn{0%{opacity:1;transform:scale(0)}to{opacity:1;transform:scale(1)}}@keyframes zoomIn{0%{opacity:1;transform:scale(0)}to{opacity:1;transform:scale(1)}}@-webkit-keyframes zoomOut{0%{opacity:1;transform:scale(1)}to{opacity:1;transform:scale(0)}}@keyframes zoomOut{0%{opacity:1;transform:scale(1)}to{opacity:1;transform:scale(0)}}.flash.transition{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:flash;animation-name:flash}.shake.transition{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:shake;animation-name:shake}.bounce.transition{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounce;animation-name:bounce}.tada.transition{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:tada;animation-name:tada}.pulse.transition{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-name:pulse;animation-name:pulse}.jiggle.transition{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:jiggle;animation-name:jiggle}.transition.glow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:cubic-bezier(.19,1,.22,1);animation-timing-function:cubic-bezier(.19,1,.22,1)}.transition.glow{-webkit-animation-name:glow;animation-name:glow}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@-webkit-keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-10px)}20%,40%,60%,80%{transform:translate(10px)}}@keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-10px)}20%,40%,60%,80%{transform:translate(10px)}}@-webkit-keyframes bounce{0%,20%,50%,80%,to{transform:translateY(0)}40%{transform:translateY(-30px)}60%{transform:translateY(-15px)}}@keyframes bounce{0%,20%,50%,80%,to{transform:translateY(0)}40%{transform:translateY(-30px)}60%{transform:translateY(-15px)}}@-webkit-keyframes tada{0%{transform:scale(1)}10%,20%{transform:scale(.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale(1.1) rotate(3deg)}40%,60%,80%{transform:scale(1.1) rotate(-3deg)}to{transform:scale(1) rotate(0)}}@keyframes tada{0%{transform:scale(1)}10%,20%{transform:scale(.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale(1.1) rotate(3deg)}40%,60%,80%{transform:scale(1.1) rotate(-3deg)}to{transform:scale(1) rotate(0)}}@-webkit-keyframes pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(.9);opacity:.7}to{transform:scale(1);opacity:1}}@keyframes pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(.9);opacity:.7}to{transform:scale(1);opacity:1}}@-webkit-keyframes jiggle{0%{transform:scaleZ(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleZ(1)}}@keyframes jiggle{0%{transform:scaleZ(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleZ(1)}}@-webkit-keyframes glow{0%{background-color:#fcfcfd}30%{background-color:#fff6cd}to{background-color:#fcfcfd}}@keyframes glow{0%{background-color:#fcfcfd}30%{background-color:#fff6cd}to{background-color:#fcfcfd}}.view-raw img[src$=".svg" i]{max-height:600px!important;max-width:600px!important}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.7.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.20fd1704.woff2) format("woff2"),url(../fonts/fontawesome-webfont.woff?v=4.7.0) format("woff"),url(../fonts/fontawesome-webfont.ttf?v=4.7.0) format("truetype"),url(../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font: 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eeeeee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scaleY(-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.tribute-container{position:absolute;top:0;left:0;height:auto;max-height:300px;max-width:500px;overflow:auto;display:block;z-index:999999}.tribute-container ul{margin:2px 0 0;padding:0;list-style:none;background:#efefef}.tribute-container li{padding:5px;cursor:pointer}.tribute-container li.highlight{background:#ddd}.tribute-container li span{font-weight:700}.tribute-container li.no-match{cursor:default}.tribute-container .menu-highlighted{font-weight:700}@keyframes isloadingspin{0%{transform:translate(-50%,-50%) rotate(0)}to{transform:translate(-50%,-50%) rotate(360deg)}}.is-loading{background:transparent!important;color:transparent!important;border:transparent!important;pointer-events:none!important;position:relative!important;overflow:hidden!important}.is-loading:after{content:"";position:absolute;display:block;width:4rem;height:4rem;left:50%;top:50%;transform:translate(-50%,-50%);animation:isloadingspin .5s infinite linear;border-width:4px;border-style:solid;border-color:#ececec #ececec #666 #666;border-radius:100%}.markup pre.is-loading,.editor-loading.is-loading{height:var(--height-loading)}@keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadeout{0%{opacity:1}to{opacity:0}}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.8)}to{transform:scale(1)}}.pulse{animation:pulse 2s linear}.issue.list{list-style:none;margin-top:1rem}.issue.list a:not(.label):hover{color:var(--color-primary)!important}.issue.list>.item .issue-checkbox{margin-top:1px}.issue.list>.item .issue-item-icon svg{margin-right:.75rem;margin-top:1px}.issue.list>.item .issue-item-icons-right>*+*{margin-left:.5rem}.issue.list>.item .issue-item-main{width:100%}.issue.list>.item .issue-item-top-row{max-width:100%;color:var(--color-text);font-size:16px;min-width:0;font-weight:600}.issue.list>.item .labels-list{position:relative;top:-1.5px}.issue.list>.item .issue-item-bottom-row{font-size:13px}.issue.list>.item .title{color:var(--color-text);word-break:break-word}.issue.list>.item .issue-item-icon-right{min-width:2rem}.issue.list>.item .assignee{position:relative;top:-2px}.issue.list>.item .assignee img{width:20px;height:20px;margin-right:2px}.issue.list>.item .desc{color:var(--color-text-light-2)}.issue.list>.item .desc a{color:inherit}.issue.list>.item .desc .time-since,.issue.list>.item .desc a{margin-left:.25rem;margin-right:.25rem}.issue.list>.item .desc .waiting,.issue.list>.item .desc .approvals,.issue.list>.item .desc .rejects{padding-left:5px}.issue.list>.item .desc .checklist{padding-left:5px}.issue.list>.item .desc .checklist progress{margin-left:2px;width:80px;height:6px;display:inline-block;border-radius:3px;vertical-align:2px!important}.issue.list>.item .desc .conflicting{padding-left:5px}.issue.list>.item .desc .due-date{padding-left:5px}.issue.list>.item .desc a.milestone,.issue.list>.item .desc a.project{margin-left:5px}.issue.list>.item .desc a.ref{margin-left:8px}.issue.list>.item .desc a.ref span{margin-right:-4px}.issue.list>.item .desc .overdue{color:var(--color-red)}.issue.list .branches{display:inline-flex;padding:0 4px}.issue.list .branches .branch{background-color:var(--color-secondary);border-radius:3px}.issue.list .branches .truncated-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:10em}.issue.list>.item+.item{border-top:1px solid var(--color-secondary)}.ui .field .dropzone{border:2px dashed var(--color-secondary);background:none;box-shadow:none;padding:0;border-radius:4px;min-height:0;margin-top:-1em}.ui .field .dropzone .dz-message{margin:10px 0}.dropzone .dz-button{color:var(--color-text-light)!important}.dropzone:hover .dz-button{color:var(--color-text)!important}.dropzone .dz-error-message{top:145px!important}.dropzone .dz-image{display:flex!important;align-items:center!important;justify-content:center!important;border-radius:0!important}.dropzone .dz-image img{max-width:100%!important;max-height:100%!important;object-fit:contain!important}.dropzone .dz-preview.dz-image-preview,.dropzone-attachments .thumbnails img{background:transparent!important}.dropzone-attachments .thumbnails img{height:120px!important;width:120px!important;object-fit:contain!important;margin-bottom:0!important}.dropzone .dz-preview:hover .dz-image img{filter:opacity(.5)!important}#git-graph-container{overflow-x:auto;width:100%;min-height:350px}#git-graph-container>.ui.segment.loading{border:0;z-index:1;min-height:246px}#git-graph-container h2{display:flex;justify-content:space-between;align-items:center}#git-graph-container .color-buttons{margin-right:0}#git-graph-container .ui.header.dividing{padding-bottom:10px}#git-graph-container #flow-select-refs-dropdown{border-top-right-radius:0;border-bottom-right-radius:0;min-width:250px;border-right:none}#git-graph-container #flow-select-refs-dropdown .ui.label{max-width:180px;display:inline-flex!important;align-items:center}#git-graph-container #flow-select-refs-dropdown .ui.label .truncate{display:inline-block;max-width:140px;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap}#git-graph-container #flow-select-refs-dropdown .dropdown.icon{display:none}#git-graph-container #flow-select-refs-dropdown .default.text{padding-top:4px;padding-bottom:4px}#git-graph-container #flow-select-refs-dropdown input.search{position:relative;top:1px}#git-graph-container li{list-style-type:none;height:24px;line-height:24px;white-space:nowrap;display:flex;align-items:center}#git-graph-container li .node-relation{font-family:var(--fonts-monospace)}#git-graph-container li .author{color:var(--color-text-light)}#git-graph-container li .time{color:var(--color-text-light-3);font-size:80%}#git-graph-container li a:not(.ui):hover{text-decoration:underline}#git-graph-container li a em{color:var(--color-red);border-bottom:1px dotted var(--color-secondary);text-decoration:none;font-style:normal}#git-graph-container #rel-container{max-width:30%;overflow-x:auto;float:left}#git-graph-container #rev-container{width:100%}#git-graph-container #rev-list{margin:0;padding:0;width:100%}#git-graph-container #rev-list li.highlight.hover{background-color:var(--color-secondary-alpha-30)}#git-graph-container #rev-list .tags a.button{padding:2px 4px}#git-graph-container #rev-list .sha.label{padding-top:5px;padding-bottom:3px}#git-graph-container #rev-list .sha.label .shortsha{padding-top:0}#git-graph-container #rev-list .sha.label .shortsha-pad{padding-right:10px}#git-graph-container #rev-list .sha.label .ui.detail.icon.button{padding-top:3px;margin-top:-5px;padding-bottom:1px}#git-graph-container #rev-list .author .ui.avatar.image{width:auto;height:18px;max-width:none}#git-graph-container #graph-raw-list{margin:0}#git-graph-container.monochrome #rel-container .flow-group{stroke:var(--color-secondary-dark-5);fill:var(--color-secondary-dark-5)}#git-graph-container.monochrome #rel-container .flow-group.highlight{stroke:var(--color-secondary-dark-12);fill:var(--color-secondary-dark-12)}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-1{stroke:#499a37;fill:#499a37}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-2{stroke:#ce4751;fill:#ce4751}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-3{stroke:#8f9121;fill:#8f9121}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-4{stroke:#ac32a6;fill:#ac32a6}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-5{stroke:#7445e9;fill:#7445e9}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-6{stroke:#c67d28;fill:#c67d28}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-7{stroke:#4db392;fill:#4db392}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-8{stroke:#aa4d30;fill:#aa4d30}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-9{stroke:#2a6f84;fill:#2a6f84}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-10{stroke:#c45327;fill:#c45327}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-11{stroke:#3d965c;fill:#3d965c}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-12{stroke:#792a93;fill:#792a93}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-13{stroke:#439d73;fill:#439d73}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-14{stroke:#103aad;fill:#103aad}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-15{stroke:#982e85;fill:#982e85}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-0{stroke:#7db233;fill:#7db233}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-1{stroke:#5ac144;fill:#5ac144}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-2{stroke:#ed5a8b;fill:#ed5a8b}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-3{stroke:#ced049;fill:#ced048}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-4{stroke:#db61d7;fill:#db62d6}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-5{stroke:#8455f9;fill:#8455f9}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-6{stroke:#e6a151;fill:#e6a151}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-7{stroke:#44daaa;fill:#44daaa}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-8{stroke:#dd7a5c;fill:#dd7a5c}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-9{stroke:#38859c;fill:#38859c}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-10{stroke:#d95520;fill:#d95520}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-11{stroke:#42ae68;fill:#42ae68}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-12{stroke:#9126b5;fill:#9126b5}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-13{stroke:#4ab080;fill:#4ab080}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-14{stroke:#284fb8;fill:#284fb8}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-15{stroke:#971c80;fill:#971c80}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-0{stroke:#87ca28;fill:#87ca28}#user-heatmap{width:100%;text-align:center;position:relative;min-height:125px;display:flex;align-items:center;justify-content:center}#user-heatmap>svg{width:100%}#user-heatmap svg:not(:root){overflow:inherit;padding:0!important}#user-heatmap text{fill:currentcolor!important}#user-heatmap .total-contributions{font-size:11px;position:absolute;bottom:0;left:25px}@media (max-width: 1200px){#user-heatmap{min-height:105px}#user-heatmap .total-contributions{left:21px}}@media (max-width: 1000px){#user-heatmap{min-height:80px}#user-heatmap .total-contributions{font-size:10px;left:17px;bottom:-4px}}.user.profile #user-heatmap{min-height:135px}@media (max-width: 1200px){.user.profile #user-heatmap{min-height:115px}}@media (max-width: 1000px){.user.profile #user-heatmap{min-height:90px}}.image-diff-container{text-align:center;padding:30px 0}.image-diff-container img{border:1px solid var(--color-primary-light-7);background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAG0lEQVQYlWN4+vTpf3SMDTAMBYXYBLFpHgoKAeiOf0SGE9kbAAAAAElFTkSuQmCC) right bottom var(--color-primary-light-7)}.image-diff-container .before-container{border:1px solid var(--color-red);display:block}.image-diff-container .after-container{border:1px solid var(--color-green);display:block}.image-diff-container .diff-side-by-side .side{display:inline-block;line-height:0;vertical-align:top}.image-diff-container .diff-side-by-side .side .side-header{font-weight:700}.image-diff-container .diff-swipe{margin:auto}.image-diff-container .diff-swipe .swipe-frame,.image-diff-container .diff-swipe .swipe-frame .before-container{position:absolute}.image-diff-container .diff-swipe .swipe-frame .swipe-container{position:absolute;right:0;display:block;border-left:2px solid var(--color-secondary-dark-8);height:100%;overflow:hidden}.image-diff-container .diff-swipe .swipe-frame .swipe-container .after-container{position:absolute;right:0}.image-diff-container .diff-swipe .swipe-frame .swipe-bar{position:absolute;height:100%;top:0;left:0}.image-diff-container .diff-swipe .swipe-frame .swipe-bar .handle{background:var(--color-secondary-dark-8);left:-5px;height:12px;width:12px;position:absolute;transform:rotate(45deg);box-sizing:border-box;display:flex;justify-content:center;align-items:center;cursor:pointer}.image-diff-container .diff-swipe .swipe-frame .swipe-bar .top-handle{top:-12px}.image-diff-container .diff-swipe .swipe-frame .swipe-bar .bottom-handle{bottom:-14px}.image-diff-container .diff-overlay{margin:0 auto}.image-diff-container .diff-overlay .overlay-frame{margin:0 auto;position:relative}.image-diff-container .diff-overlay .before-container,.image-diff-container .diff-overlay .after-container{position:absolute}.image-diff-container .diff-overlay input{width:300px}.monaco-editor-container{width:100%;min-height:200px;height:90vh}.edit.githook .monaco-editor-container{border:1px solid var(--color-secondary);height:70vh}.monaco-editor-container .inputarea{min-height:0!important;margin:0!important;padding:0!important;resize:none!important;border:none!important;color:transparent!important;background-color:transparent!important}.monaco-scrollable-element>.scrollbar>.slider{background:var(--color-primary)!important}.monaco-scrollable-element>.scrollbar>.slider:hover{background:var(--color-primary-dark-1)!important}.monaco-scrollable-element>.scrollbar>.slider:active{background:var(--color-primary-dark-2)!important}.board{display:flex;flex-direction:row;flex-wrap:nowrap;overflow-x:auto;margin:0 .5em}.board-column{background-color:var(--color-project-board-bg)!important;border:1px solid var(--color-secondary)!important;margin:0 .5rem!important;padding:.5rem!important;width:320px;height:60vh;overflow-y:scroll;flex:0 0 auto;overflow:visible;display:flex;flex-direction:column}.board-column-header{display:flex;justify-content:space-between}.board-column-header.dark-label,.board-column-header.dark-label .board-label{color:var(--color-project-board-dark-label)!important}.board-column-header.light-label,.board-column-header.light-label .board-label{color:var(--color-project-board-light-label)!important}.board-label{background:none!important;line-height:1.25!important}.board-column>.cards{flex:1;display:flex;align-content:baseline;margin:0!important;padding:0!important;flex-wrap:nowrap!important;flex-direction:column}.project-board-title{word-break:break-word}.board-column>.divider{margin:5px 0}.board-column:first-child{margin-left:auto!important}.board-column:last-child{margin-right:auto!important}.board-card{margin:4px 2px!important;border-radius:5px!important;cursor:move;width:calc(100% - 4px)!important;padding:.5rem!important;min-height:auto!important}.board-card .meta *{margin-right:0!important}.board-card .header{margin-top:0!important;font-size:16px!important}.card-ghost{border-style:dashed!important;background:none!important}.card-ghost *{opacity:0}.color-field .minicolors.minicolors-theme-default{display:block}.color-field .minicolors.minicolors-theme-default .minicolors-input{height:38px;padding-left:2rem}.color-field .minicolors.minicolors-theme-default .minicolors-swatch{top:10px}.edit-project-board .color.picker.column,.new-board-modal .color.picker.column{display:flex}.edit-project-board .color.picker.column .minicolors,.new-board-modal .color.picker.column .minicolors{flex:1}.markup{overflow:hidden;font-size:16px;line-height:1.5!important;word-wrap:break-word}.markup.ui.segment{padding:3em}.markup.file-view{padding:2em!important}.markup>*:first-child{margin-top:0!important}.markup>*:last-child{margin-bottom:0!important}.markup a:not([href]){color:inherit;text-decoration:none}.markup .absent{color:var(--color-red)}.markup .anchor{padding-right:4px;margin-left:-20px;line-height:1;color:inherit}.markup .anchor .svg{vertical-align:middle}.markup .anchor:focus{outline:none}.markup h1 .anchor .svg,.markup h2 .anchor .svg,.markup h3 .anchor .svg,.markup h4 .anchor .svg,.markup h5 .anchor .svg,.markup h6 .anchor .svg{visibility:hidden}.markup h1:hover .anchor .svg,.markup h2:hover .anchor .svg,.markup h3:hover .anchor .svg,.markup h4:hover .anchor .svg,.markup h5:hover .anchor .svg,.markup h6:hover .anchor .svg{visibility:visible}.markup h2 .anchor .svg,.markup h3 .anchor .svg,.markup h4 .anchor .svg{position:relative;top:-2px}.markup h1,.markup h2,.markup h3,.markup h4,.markup h5,.markup h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markup h1 tt,.markup h1 code,.markup h2 tt,.markup h2 code,.markup h3 tt,.markup h3 code,.markup h4 tt,.markup h4 code,.markup h5 tt,.markup h5 code,.markup h6 tt,.markup h6 code{font-size:inherit}.markup h1{padding-bottom:.3em;font-size:2em;border-bottom:1px solid var(--color-secondary)}.markup h2{padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid var(--color-secondary)}.markup h3{font-size:1.25em}.markup h4{font-size:1em}.markup h5{font-size:.875em}.markup h6{font-size:.85em;color:var(--color-text-light-2)}.markup p,.markup blockquote,.markup details,.markup ul,.markup ol,.markup dl,.markup table,.markup pre{margin-top:0;margin-bottom:16px}.markup hr{height:4px;padding:0;margin:16px 0;background-color:var(--color-secondary);border:0}.markup ul,.markup ol{padding-left:2em}.markup ul.no-list,.markup ol.no-list{padding:0;list-style-type:none}.markup .task-list-item{list-style-type:none;position:relative;line-height:1.5rem;min-height:1.5rem}.markup .task-list-item input[type=checkbox]{position:absolute;top:.25em;left:-1.6em}.markup .task-list-item p{line-height:1.5rem}.markup .task-list-item+.task-list-item{margin-top:3px}.markup input[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:relative;border:1px solid var(--color-secondary);border-radius:2px;background:var(--color-input-background);height:14px;width:14px;opacity:1!important;pointer-events:auto!important;vertical-align:middle!important;-webkit-print-color-adjust:exact;color-adjust:exact}.markup input[type=checkbox]:not([disabled]):hover,.markup input[type=checkbox]:not([disabled]):active{border-color:var(--color-primary)}.markup input[type=checkbox]:after{position:absolute;inset:0;pointer-events:none;background:var(--color-text);mask-size:cover;-webkit-mask-size:cover}.markup input[type=checkbox]:checked:after{content:"";mask-image:var(--checkbox-mask-checked);-webkit-mask-image:var(--checkbox-mask-checked);-webkit-print-color-adjust:exact;color-adjust:exact}.markup input[type=checkbox]:indeterminate:after{content:"";mask-image:var(--checkbox-mask-indeterminate);-webkit-mask-image:var(--checkbox-mask-indeterminate)}.markup ul ul,.markup ul ol,.markup ol ol,.markup ol ul{margin-top:0;margin-bottom:0}.markup ol ol,.markup ul ol{list-style-type:lower-roman}.markup li>p{margin-top:16px}.markup li+li{margin-top:.25em}.markup dl{padding:0}.markup dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markup dl dd{padding:0 16px;margin-bottom:16px}.markup blockquote{margin-left:0;padding:0 15px;color:var(--color-text-light-2);border-left:4px solid var(--color-secondary)}.markup blockquote>:first-child{margin-top:0}.markup blockquote>:last-child{margin-bottom:0}.markup table{display:block;width:100%;width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;overflow:auto}.markup table th{font-weight:600}.markup table th,.markup table td{padding:6px 13px!important;border:1px solid var(--color-secondary)!important}.markup table tr{border-top:1px solid var(--color-secondary)}.markup table tr:nth-child(2n){background-color:var(--color-markup-table-row)}.markup img{max-width:100%;box-sizing:initial}.markup img[align=right]{padding-left:20px}.markup img[align=left]{padding-right:20px}.markup .emoji{max-width:none;vertical-align:text-top}.markup span.frame{display:block;overflow:hidden}.markup span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid var(--color-secondary)}.markup span.frame span img{display:block;float:left}.markup span.frame span span{display:block;padding:5px 0 0;clear:both;color:var(--color-text)}.markup span.align-center{display:block;overflow:hidden;clear:both}.markup span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markup span.align-center span img{margin:0 auto;text-align:center}.markup span.align-right{display:block;overflow:hidden;clear:both}.markup span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markup span.align-right span img{margin:0;text-align:right}.markup span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markup span.float-left span{margin:13px 0 0}.markup span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markup span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markup code,.markup tt{padding:.2em .4em;margin:0;font-size:85%;background-color:var(--color-markup-code-block);border-radius:4px}.markup code br,.markup tt br{display:none}.markup del code{text-decoration:inherit}.markup pre>code{padding:0;margin:0;font-size:100%;white-space:pre-wrap;word-break:break-all;overflow-wrap:break-word;background:transparent;border:0}.markup .highlight{margin-bottom:16px}.markup .highlight pre,.markup pre{padding:16px;font-size:85%;line-height:1.45;background-color:var(--color-markup-code-block);border-radius:4px}.markup .highlight pre{margin-bottom:0;word-break:normal}.markup pre{word-wrap:normal}.markup pre code,.markup pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markup pre code:before,.markup pre code:after,.markup pre tt:before,.markup pre tt:after{content:normal}.markup kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:var(--color-text-light);vertical-align:middle;background-color:var(--color-markup-code-block);border:1px solid var(--color-secondary);border-radius:3px;box-shadow:inset 0 -1px 0 var(--color-secondary)}.markup .ui.list .list,.markup ol.ui.list ol,.markup ul.ui.list ul{padding-left:2em}.repository.wiki.revisions .ui.container>.ui.stackable.grid{-ms-flex-direction:row-reverse;flex-direction:row-reverse}.repository.wiki.revisions .ui.container>.ui.stackable.grid>.header{margin-top:0}.repository.wiki.revisions .ui.container>.ui.stackable.grid>.header .sub.header{padding-left:52px;word-break:break-word}.file-revisions-btn{display:block;float:left;margin-bottom:2px!important;padding:11px!important;margin-right:10px!important}.markup-render{display:block;border:none;width:100%;height:var(--height-loading);overflow:hidden}.markup-block-error{margin-bottom:0!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important;box-shadow:none!important;font-size:85%!important;white-space:pre-wrap!important;padding:.5rem 1rem!important;text-align:left!important}.markup-block-error+pre{border-top:none!important;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.markup .code-block{position:relative}.markup .code-copy{position:absolute;top:8px;right:6px;padding:9px;visibility:hidden;animation:fadeout .2s both}.repository.view.issue .comment-list .comment .markup .code-copy{right:5px;padding:8px}.markup .code-copy:hover{background:var(--color-secondary)!important}.markup .code-copy:active{background:var(--color-secondary-dark-1)!important}.markup .code-block:hover .code-copy{visibility:visible;animation:fadein .2s both}.code-view .lines-num:hover{color:var(--color-text-dark)!important}.code-line-menu{width:auto!important}.code-line-button{background-color:var(--color-menu);color:var(--color-text-light);border:1px solid var(--color-secondary);border-radius:var(--border-radius);padding:1px 10px;position:absolute;font-family:var(--fonts-regular);left:0;transform:translate(-70%);cursor:pointer}.code-line-button:hover{color:var(--color-primary)}.chroma{background-color:var(--color-code-bg)}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%}.chroma .lnt,.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .gs{font-weight:600}.chroma .gl{text-decoration:underline}.chroma .bp{color:#999}.chroma .c,.chroma .c1,.chroma .ch{color:#6a737d}.chroma .cm{color:#998}.chroma .cp{color:#109295}.chroma .cpf{color:#4c4dbc}.chroma .cs{color:#999}.chroma .dl{color:#106303}.chroma .gd{color:#000;background-color:#fdd}.chroma .ge{color:#000}.chroma .gh{color:#999}.chroma .gi{color:#000;background-color:#dfd}.chroma .go{color:#888}.chroma .gp{color:#555}.chroma .gr,.chroma .gt{color:#a00}.chroma .gu{color:#aaa}.chroma .hl{background-color:#e5e5e5}.chroma .il{color:#099}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#d73a49}.chroma .kt{color:#458}.chroma .ln,.chroma .lnt{color:#7f7f7f}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo{color:#099}.chroma .na{color:#d73a49}.chroma .nb{color:#005cc5}.chroma .nc{color:#458}.chroma .nd{color:#3c5d5d}.chroma .ne{color:#900}.chroma .nf{color:#005cc5}.chroma .ni{color:#6f42c1}.chroma .nl{color:#900}.chroma .nn{color:#555}.chroma .no{color:teal}.chroma .nt{color:#22863a}.chroma .nv{color:teal}.chroma .nx{color:#24292e}.chroma .o,.chroma .ow{color:#d73a49}.chroma .s{color:#106303}.chroma .s1{color:#cc7a00}.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .se,.chroma .sh,.chroma .si{color:#106303}.chroma .sr{color:#22863a}.chroma .ss,.chroma .sx{color:#106303}.chroma .vc,.chroma .vg,.chroma .vi{color:teal}.chroma .w{color:#bbb}.EasyMDEContainer .CodeMirror{color:var(--color-input-text);background-color:var(--color-input-background);border-color:var(--color-secondary);font:14px var(--fonts-monospace)}.EasyMDEContainer .CodeMirror.cm-s-default{border-radius:var(--border-radius);padding:0!important}.EasyMDEContainer .CodeMirror.CodeMirror-fullscreen.CodeMirror-focused{border-right:1px solid var(--color-primary)!important}.CodeMirror-cursor{border-color:var(--color-caret)!important}.CodeMirror .cm-comment{background:inherit!important}.CodeMirror .CodeMirror-code{font:14px var(--fonts-monospace)}.CodeMirror-selected{background:var(--color-primary-light-1)!important;color:var(--color-white)!important}.CodeMirror-placeholder{color:var(--color-placeholder-text)!important;opacity:1!important}.CodeMirror-focused{border-color:var(--color-primary)!important}.console{background:var(--color-console-bg);color:var(--color-console-fg);font-family:var(--fonts-monospace);border-radius:5px;word-break:break-word;overflow-wrap:break-word}.console img{max-width:100%}.console a{color:inherit;text-decoration:underline;text-decoration-style:dashed}.console a:hover{color:var(--color-primary)}@keyframes blink-animation{to{visibility:hidden}}.term-fg2{color:#838887}.term-fg3{font-style:italic}.term-fg4{text-decoration:underline}.term-fg5{animation:blink-animation 1s steps(3,start) infinite}.term-fg9{text-decoration:line-through}.term-fg30{color:#666}.term-fg31{color:#ff7070}.term-fg32{color:#b0f986}.term-fg33{color:#c6c502}.term-fg34{color:#8db7e0}.term-fg35{color:#f271fb}.term-fg36{color:#6bf7ff}.term-fgi1{color:#5ef765}.term-fgi90{color:#838887}.term-fgi91{color:#f33}.term-fgi92{color:#0f0}.term-fgi93{color:#fffc67}.term-fgi94{color:#6871ff}.term-fgi95{color:#ff76ff}.term-fgi96{color:#60fcff}.term-bg40{background:#676767}.term-bg41{background:#ff4343}.term-bg42{background:#99ff5f}.term-fg31.term-bg40{color:#f8a39f}.term-fgx16{color:#000}.term-fgx17{color:#00005f}.term-fgx18{color:#000087}.term-fgx19{color:#0000af}.term-fgx20{color:#0000d7}.term-fgx21{color:#00f}.term-fgx22{color:#005f00}.term-fgx23{color:#005f5f}.term-fgx24{color:#005f87}.term-fgx25{color:#005faf}.term-fgx26{color:#005fd7}.term-fgx27{color:#005fff}.term-fgx28{color:#008700}.term-fgx29{color:#00875f}.term-fgx30{color:#008787}.term-fgx31{color:#0087af}.term-fgx32{color:#0087d7}.term-fgx33{color:#0087ff}.term-fgx34{color:#00af00}.term-fgx35{color:#00af5f}.term-fgx36{color:#00af87}.term-fgx37{color:#00afaf}.term-fgx38{color:#00afd7}.term-fgx39{color:#00afff}.term-fgx40{color:#00d700}.term-fgx41{color:#00d75f}.term-fgx42{color:#00d787}.term-fgx43{color:#00d7af}.term-fgx44{color:#00d7d7}.term-fgx45{color:#00d7ff}.term-fgx46{color:#0f0}.term-fgx47{color:#00ff5f}.term-fgx48{color:#00ff87}.term-fgx49{color:#00ffaf}.term-fgx50{color:#00ffd7}.term-fgx51{color:#0ff}.term-fgx52{color:#5f0000}.term-fgx53{color:#5f005f}.term-fgx54{color:#5f0087}.term-fgx55{color:#5f00af}.term-fgx56{color:#5f00d7}.term-fgx57{color:#5f00ff}.term-fgx58{color:#5f5f00}.term-fgx59{color:#5f5f5f}.term-fgx60{color:#5f5f87}.term-fgx61{color:#5f5faf}.term-fgx62{color:#5f5fd7}.term-fgx63{color:#5f5fff}.term-fgx64{color:#5f8700}.term-fgx65{color:#5f875f}.term-fgx66{color:#5f8787}.term-fgx67{color:#5f87af}.term-fgx68{color:#5f87d7}.term-fgx69{color:#5f87ff}.term-fgx70{color:#5faf00}.term-fgx71{color:#5faf5f}.term-fgx72{color:#5faf87}.term-fgx73{color:#5fafaf}.term-fgx74{color:#5fafd7}.term-fgx75{color:#5fafff}.term-fgx76{color:#5fd700}.term-fgx77{color:#5fd75f}.term-fgx78{color:#5fd787}.term-fgx79{color:#5fd7af}.term-fgx80{color:#5fd7d7}.term-fgx81{color:#5fd7ff}.term-fgx82{color:#5fff00}.term-fgx83{color:#5fff5f}.term-fgx84{color:#5fff87}.term-fgx85{color:#5fffaf}.term-fgx86{color:#5fffd7}.term-fgx87{color:#5fffff}.term-fgx88{color:#870000}.term-fgx89{color:#87005f}.term-fgx90{color:#870087}.term-fgx91{color:#8700af}.term-fgx92{color:#8700d7}.term-fgx93{color:#8700ff}.term-fgx94{color:#875f00}.term-fgx95{color:#875f5f}.term-fgx96{color:#875f87}.term-fgx97{color:#875faf}.term-fgx98{color:#875fd7}.term-fgx99{color:#875fff}.term-fgx100{color:#878700}.term-fgx101{color:#87875f}.term-fgx102{color:#878787}.term-fgx103{color:#8787af}.term-fgx104{color:#8787d7}.term-fgx105{color:#8787ff}.term-fgx106{color:#87af00}.term-fgx107{color:#87af5f}.term-fgx108{color:#87af87}.term-fgx109{color:#87afaf}.term-fgx110{color:#87afd7}.term-fgx111{color:#87afff}.term-fgx112{color:#87d700}.term-fgx113{color:#87d75f}.term-fgx114{color:#87d787}.term-fgx115{color:#87d7af}.term-fgx116{color:#87d7d7}.term-fgx117{color:#87d7ff}.term-fgx118{color:#87ff00}.term-fgx119{color:#87ff5f}.term-fgx120{color:#87ff87}.term-fgx121{color:#87ffaf}.term-fgx122{color:#87ffd7}.term-fgx123{color:#87ffff}.term-fgx124{color:#af0000}.term-fgx125{color:#af005f}.term-fgx126{color:#af0087}.term-fgx127{color:#af00af}.term-fgx128{color:#af00d7}.term-fgx129{color:#af00ff}.term-fgx130{color:#af5f00}.term-fgx131{color:#af5f5f}.term-fgx132{color:#af5f87}.term-fgx133{color:#af5faf}.term-fgx134{color:#af5fd7}.term-fgx135{color:#af5fff}.term-fgx136{color:#af8700}.term-fgx137{color:#af875f}.term-fgx138{color:#af8787}.term-fgx139{color:#af87af}.term-fgx140{color:#af87d7}.term-fgx141{color:#af87ff}.term-fgx142{color:#afaf00}.term-fgx143{color:#afaf5f}.term-fgx144{color:#afaf87}.term-fgx145{color:#afafaf}.term-fgx146{color:#afafd7}.term-fgx147{color:#afafff}.term-fgx148{color:#afd700}.term-fgx149{color:#afd75f}.term-fgx150{color:#afd787}.term-fgx151{color:#afd7af}.term-fgx152{color:#afd7d7}.term-fgx153{color:#afd7ff}.term-fgx154{color:#afff00}.term-fgx155{color:#afff5f}.term-fgx156{color:#afff87}.term-fgx157{color:#afffaf}.term-fgx158{color:#afffd7}.term-fgx159{color:#afffff}.term-fgx160{color:#d70000}.term-fgx161{color:#d7005f}.term-fgx162{color:#d70087}.term-fgx163{color:#d700af}.term-fgx164{color:#d700d7}.term-fgx165{color:#d700ff}.term-fgx166{color:#d75f00}.term-fgx167{color:#d75f5f}.term-fgx168{color:#d75f87}.term-fgx169{color:#d75faf}.term-fgx170{color:#d75fd7}.term-fgx171{color:#d75fff}.term-fgx172{color:#d78700}.term-fgx173{color:#d7875f}.term-fgx174{color:#d78787}.term-fgx175{color:#d787af}.term-fgx176{color:#d787d7}.term-fgx177{color:#d787ff}.term-fgx178{color:#d7af00}.term-fgx179{color:#d7af5f}.term-fgx180{color:#d7af87}.term-fgx181{color:#d7afaf}.term-fgx182{color:#d7afd7}.term-fgx183{color:#d7afff}.term-fgx184{color:#d7d700}.term-fgx185{color:#d7d75f}.term-fgx186{color:#d7d787}.term-fgx187{color:#d7d7af}.term-fgx188{color:#d7d7d7}.term-fgx189{color:#d7d7ff}.term-fgx190{color:#d7ff00}.term-fgx191{color:#d7ff5f}.term-fgx192{color:#d7ff87}.term-fgx193{color:#d7ffaf}.term-fgx194{color:#d7ffd7}.term-fgx195{color:#d7ffff}.term-fgx196{color:red}.term-fgx197{color:#ff005f}.term-fgx198{color:#ff0087}.term-fgx199{color:#ff00af}.term-fgx200{color:#ff00d7}.term-fgx201{color:#f0f}.term-fgx202{color:#ff5f00}.term-fgx203{color:#ff5f5f}.term-fgx204{color:#ff5f87}.term-fgx205{color:#ff5faf}.term-fgx206{color:#ff5fd7}.term-fgx207{color:#ff5fff}.term-fgx208{color:#ff8700}.term-fgx209{color:#ff875f}.term-fgx210{color:#ff8787}.term-fgx211{color:#ff87af}.term-fgx212{color:#ff87d7}.term-fgx213{color:#ff87ff}.term-fgx214{color:#ffaf00}.term-fgx215{color:#ffaf5f}.term-fgx216{color:#ffaf87}.term-fgx217{color:#ffafaf}.term-fgx218{color:#ffafd7}.term-fgx219{color:#ffafff}.term-fgx220{color:gold}.term-fgx221{color:#ffd75f}.term-fgx222{color:#ffd787}.term-fgx223{color:#ffd7af}.term-fgx224{color:#ffd7d7}.term-fgx225{color:#ffd7ff}.term-fgx226{color:#ff0}.term-fgx227{color:#ffff5f}.term-fgx228{color:#ffff87}.term-fgx229{color:#ffffaf}.term-fgx230{color:#ffffd7}.term-fgx231{color:#fff}.term-fgx232{color:#080808}.term-fgx233{color:#121212}.term-fgx234{color:#1c1c1c}.term-fgx235{color:#262626}.term-fgx236{color:#303030}.term-fgx237{color:#3a3a3a}.term-fgx238{color:#444}.term-fgx239{color:#4e4e4e}.term-fgx240{color:#585858}.term-fgx241{color:#626262}.term-fgx242{color:#6c6c6c}.term-fgx243{color:#767676}.term-fgx244{color:gray}.term-fgx245{color:#8a8a8a}.term-fgx246{color:#949494}.term-fgx247{color:#9e9e9e}.term-fgx248{color:#a8a8a8}.term-fgx249{color:#b2b2b2}.term-fgx250{color:#bcbcbc}.term-fgx251{color:#c6c6c6}.term-fgx252{color:#d0d0d0}.term-fgx253{color:#dadada}.term-fgx254{color:#e4e4e4}.term-fgx255{color:#eee}.svg{display:inline-block;vertical-align:text-top;fill:currentcolor}.middle .svg{vertical-align:middle}.tribute-container{box-shadow:0 .25rem .5rem #00000040;border-radius:.25rem}.tribute-container ul{margin-top:0!important;background:var(--color-body)!important}.tribute-container li{padding:3px .5rem!important}.tribute-container li span.fullname{font-weight:400;font-size:.8rem;margin-left:3px}.tribute-container li.highlight,.tribute-container li:hover{background:var(--color-primary)!important;color:#fff!important}.tribute-item{display:flex;align-items:center}.tribute-item .emoji,.tribute-item img[src*="/avatar/"]{margin-right:.5rem}.tribute-container img{width:1.5rem!important;height:1.5rem!important}:root :lang(ja){--fonts-override: var(--fonts-default-override-ja)}:root :lang(zh-CN){--fonts-override: var(--fonts-default-override-zh-cn)}:root :lang(zh-TW){--fonts-override: var(--fonts-default-override-zh-tw)}:root :lang(zh-HK){--fonts-override: var(--fonts-default-override-zh-hk)}:root :lang(ko){--fonts-override: var(--fonts-default-override-ko)}[lang]{font-family:var(--fonts-regular)}@font-face{font-family:system-ui-ja;src:local("HiraKakuProN-W3"),local("Hiragino Kaku Gothic ProN W3"),local("HiraginoSans-W2"),local("Source Han Sans JP Light"),local("SourceHanSansJP-Light"),local("Source Han Sans J Light"),local("SourceHanSansJ-Light"),local("Noto Sans CJK JP Light"),local("NotoSansCJKJP-Light"),local("Source Han Sans Light"),local("SourceHanSans-Light"),local("Yu Gothic Regular"),local("YuGothic Regular"),local("Droid Sans Japanese"),local("Meiryo"),local("MS PGothic");font-weight:300;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-ja;src:local("HiraKakuProN-W3"),local("Hiragino Kaku Gothic ProN W3"),local("HiraginoSans-W4"),local("Source Han Sans JP Regular"),local("SourceHanSansJP-Regular"),local("Source Han Sans J Regular"),local("SourceHanSansJ-Regular"),local("Noto Sans CJK JP Regular"),local("NotoSansCJKJP-Regular"),local("Source Han Sans Regular"),local("SourceHanSans-Regular"),local("Yu Gothic Medium"),local("YuGothic Medium"),local("Droid Sans Japanese"),local("Meiryo"),local("MS PGothic");font-weight:400;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-ja;src:local("HiraKakuProN-W3"),local("Hiragino Kaku Gothic ProN W3"),local("HiraginoSans-W5"),local("Source Han Sans JP Medium"),local("SourceHanSansJP-Medium"),local("Source Han Sans J Medium"),local("SourceHanSansJ-Medium"),local("Noto Sans CJK JP Medium"),local("NotoSansCJKJP-Medium"),local("Source Han Sans Medium"),local("SourceHanSans-Medium"),local("Yu Gothic Medium"),local("YuGothic Medium"),local("Droid Sans Japanese"),local("Meiryo"),local("MS PGothic");font-weight:500;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-ja;src:local("HiraKakuProN-W6"),local("Hiragino Kaku Gothic ProN W6"),local("HiraginoSans-W6"),local("Source Han Sans JP Bold"),local("SourceHanSansJP-Bold"),local("Source Han Sans J Bold"),local("SourceHanSansJ-Bold"),local("Noto Sans CJK JP Bold"),local("NotoSansCJKJP-Bold"),local("Source Han Sans Bold"),local("SourceHanSans-Bold"),local("Yu Gothic Bold"),local("YuGothic Bold"),local("Droid Sans Japanese"),local("Meiryo Bold"),local("MS PGothic");font-weight:700;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-ja;src:local("HelveticaNeue");unicode-range:U+A0}@supports not (-webkit-hyphens:none){@font-face{font-family:system-ui-ja;src:local("HelveticaNeue");unicode-range:U+20}}:root{--fonts-default-override-ja: system-ui-ja, var(--fonts-proportional)}@supports (-moz-appearance:none){:root{--fonts-default-override-ja: var(--fonts-proportional), system-ui-ja}}@font-face{font-family:system-ui-zh-cn;src:local("PingFangSC-Light"),local("Source Han Sans CN Light"),local("SourceHanSansCN-Light"),local("Source Han Sans SC Light"),local("SourceHanSansSC-Light"),local("Noto Sans CJK SC Light"),local("NotoSansCJKSC-Light"),local("HiraginoSansGB-W3"),local("Hiragino Sans GB W3"),local("Microsoft YaHei Light"),local("Heiti SC Light"),local("SimHei");font-weight:300;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-cn;src:local("PingFangSC-Regular"),local("Source Han Sans CN Regular"),local("SourceHanSansCN-Regular"),local("Source Han Sans SC Regular"),local("SourceHanSansSC-Regular"),local("Noto Sans CJK SC Regular"),local("NotoSansCJKSC-Regular"),local("HiraginoSansGB-W3"),local("Hiragino Sans GB W3"),local("Microsoft YaHei"),local("Heiti SC Light"),local("SimHei");font-weight:400;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-cn;src:local("PingFangSC-Medium"),local("Source Han Sans CN Medium"),local("SourceHanSansCN-Medium"),local("Source Han Sans SC Medium"),local("SourceHanSansSC-Medium"),local("Noto Sans CJK SC Medium"),local("NotoSansCJKSC-Medium"),local("HiraginoSansGB-W3"),local("Hiragino Sans GB W3"),local("Microsoft YaHei"),local("Heiti SC Light"),local("SimHei");font-weight:500;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-cn;src:local("PingFangSC-Semibold"),local("Source Han Sans CN Bold"),local("SourceHanSansCN-Bold"),local("Source Han Sans SC Bold"),local("SourceHanSansSC-Bold"),local("Noto Sans CJK SC Bold"),local("NotoSansCJKSC-Bold"),local("HiraginoSansGB-W6"),local("Hiragino Sans GB W6"),local("Microsoft YaHei Bold"),local("Heiti SC Medium"),local("SimHei");font-weight:700;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-cn;src:local("HelveticaNeue");unicode-range:U+A0}@supports not (-webkit-hyphens:none){@font-face{font-family:system-ui-zh-cn;src:local("HelveticaNeue");unicode-range:U+20}}:root{--fonts-default-override-zh-cn: system-ui-zh-cn, var(--fonts-proportional)}@supports (-moz-appearance:none){:root{--fonts-default-override-zh-cn: var(--fonts-proportional), system-ui-zh-cn}}@font-face{font-family:system-ui-zh-tw;src:local("PingFangTC-Light"),local("Source Han Sans TW Light"),local("SourceHanSansTW-Light"),local("Source Han Sans TC Light"),local("SourceHanSansTC-Light"),local("Noto Sans CJK TC Light"),local("NotoSansCJKTC-Light"),local("HiraginoSansTC-W3"),local("Hiragino Sans TC W3"),local("Microsoft JhengHei Light"),local("Heiti TC Light"),local("PMingLiU");font-weight:300;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-tw;src:local("PingFangTC-Regular"),local("Source Han Sans TW Regular"),local("SourceHanSansTW-Regular"),local("Source Han Sans TC Regular"),local("SourceHanSansTC-Regular"),local("Noto Sans CJK TC Regular"),local("NotoSansCJKTC-Regular"),local("HiraginoSansTC-W3"),local("Hiragino Sans TC W3"),local("Microsoft JhengHei"),local("Heiti TC Light"),local("PMingLiU");font-weight:400;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-tw;src:local("PingFangTC-Medium"),local("Source Han Sans TW Medium"),local("SourceHanSansTW-Medium"),local("Source Han Sans TC Medium"),local("SourceHanSansTC-Medium"),local("Noto Sans CJK TC Medium"),local("NotoSansCJKTC-Medium"),local("HiraginoSansTC-W3"),local("Hiragino Sans TC W3"),local("Microsoft JhengHei"),local("Heiti TC Light"),local("PMingLiU");font-weight:500;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-tw;src:local("PingFangTC-Semibold"),local("Source Han Sans TW Bold"),local("SourceHanSansTW-Bold"),local("Source Han Sans TC Bold"),local("SourceHanSansTC-Bold"),local("Noto Sans CJK TC Bold"),local("NotoSansCJKTC-Bold"),local("HiraginoSansTC-W6"),local("Hiragino Sans TC W6"),local("Microsoft JhengHei Bold"),local("Heiti TC Medium"),local("PMingLiU");font-weight:700;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-tw;src:local("HelveticaNeue");unicode-range:U+A0}@supports not (-webkit-hyphens:none){@font-face{font-family:system-ui-zh-tw;src:local("HelveticaNeue");unicode-range:U+20}}:root{--fonts-default-override-zh-tw: system-ui-zh-tw, var(--fonts-proportional)}@supports (-moz-appearance:none){:root{--fonts-default-override-zh-tw: var(--fonts-proportional), system-ui-zh-tw}}@font-face{font-family:system-ui-zh-hk;src:local("PingFangHK-Light"),local("Source Han Sans HK Light"),local("SourceHanSansHK-Light"),local("Source Han Sans HC Light"),local("SourceHanSansHC-Light"),local("Noto Sans CJK HK Light"),local("NotoSansCJKHK-Light"),local("Source Han Sans TC Light"),local("SourceHanSansTC-Light"),local("Noto Sans CJK TC Light"),local("NotoSansCJKTC-Light"),local("HiraginoSansTC-W3"),local("Hiragino Sans TC W3"),local("Microsoft JhengHei Light"),local("Heiti TC Light"),local("PMingLiU_HKSCS"),local("PMingLiU");font-weight:300;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-hk;src:local("PingFangHK-Regular"),local("Source Han Sans HK Regular"),local("SourceHanSansHK-Regular"),local("Source Han Sans HC Regular"),local("SourceHanSansHC-Regular"),local("Noto Sans CJK HK Regular"),local("NotoSansCJKHK-Regular"),local("Source Han Sans TC Regular"),local("SourceHanSansTC-Regular"),local("Noto Sans CJK TC Regular"),local("NotoSansCJKTC-Regular"),local("HiraginoSansTC-W3"),local("Hiragino Sans TC W3"),local("Microsoft JhengHei"),local("Heiti TC Light"),local("PMingLiU_HKSCS"),local("PMingLiU");font-weight:400;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-hk;src:local("PingFangHK-Medium"),local("Source Han Sans HK Medium"),local("SourceHanSansHK-Medium"),local("Source Han Sans HC Medium"),local("SourceHanSansHC-Medium"),local("Noto Sans CJK HK Medium"),local("NotoSansCJKHK-Medium"),local("Source Han Sans TC Medium"),local("SourceHanSansTC-Medium"),local("Noto Sans CJK TC Medium"),local("NotoSansCJKTC-Medium"),local("HiraginoSansTC-W3"),local("Hiragino Sans TC W3"),local("Microsoft JhengHei"),local("Heiti TC Light"),local("PMingLiU_HKSCS"),local("PMingLiU");font-weight:500;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-hk;src:local("PingFangHK-Semibold"),local("Source Han Sans HK Bold"),local("SourceHanSansHK-Bold"),local("Source Han Sans HC Bold"),local("SourceHanSansHC-Bold"),local("Noto Sans CJK HK Bold"),local("NotoSansCJKHK-Bold"),local("Source Han Sans TC Bold"),local("SourceHanSansTC-Bold"),local("Noto Sans CJK TC Bold"),local("NotoSansCJKTC-Bold"),local("HiraginoSansTC-W6"),local("Hiragino Sans TC W6"),local("Microsoft JhengHei Bold"),local("Heiti TC Medium"),local("PMingLiU_HKSCS"),local("PMingLiU");font-weight:700;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-zh-hk;src:local("HelveticaNeue");unicode-range:U+A0}@supports not (-webkit-hyphens:none){@font-face{font-family:system-ui-zh-hk;src:local("HelveticaNeue");unicode-range:U+20}}:root{--fonts-default-override-zh-hk: system-ui-zh-hk, var(--fonts-proportional)}@supports (-moz-appearance:none){:root{--fonts-default-override-zh-hk: var(--fonts-proportional), system-ui-zh-hk}}@font-face{font-family:system-ui-ko;src:local("AppleSDGothicNeo-Light"),local("Source Han Sans KR Light"),local("SourceHanSansKR-Light"),local("Source Han Sans K Light"),local("SourceHanSansK-Light"),local("Noto Sans CJK KR Light"),local("NotoSansCJKKR-Light"),local("NanumBarunGothic Light"),local("Malgun Gothic Semilight"),local("Nanum Gothic"),local("Dotum");font-weight:300;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-ko;src:local("AppleSDGothicNeo-Regular"),local("Source Han Sans KR Regular"),local("SourceHanSansKR-Regular"),local("Source Han Sans K Regular"),local("SourceHanSansK-Regular"),local("Noto Sans CJK KR Regular"),local("NotoSansCJKKR-Regular"),local("NanumBarunGothic"),local("Malgun Gothic"),local("Nanum Gothic"),local("Dotum");font-weight:400;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-ko;src:local("AppleSDGothicNeo-Medium"),local("Source Han Sans KR Medium"),local("SourceHanSansKR-Medium"),local("Source Han Sans K Medium"),local("SourceHanSansK-Medium"),local("Noto Sans CJK KR Medium"),local("NotoSansCJKKR-Medium"),local("NanumBarunGothic"),local("Malgun Gothic"),local("Nanum Gothic"),local("Dotum");font-weight:500;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-ko;src:local("AppleSDGothicNeo-SemiBold"),local("Source Han Sans KR Bold"),local("SourceHanSansKR-Bold"),local("Source Han Sans K Bold"),local("SourceHanSansK-Bold"),local("Noto Sans CJK KR Bold"),local("NotoSansCJKKR-Bold"),local("NanumBarunGothic Bold"),local("Malgun Gothic Bold"),local("Nanum Gothic Bold"),local("Dotum");font-weight:700;unicode-range:U+11??,U+2E80-4DBF,U+4E00-9FFF,U+A960-A97F,U+AC00-D7FF,U+F900-FAFF,U+FE00-FE6F,U+FF00-FFEF,U+1F2??,U+2????}@font-face{font-family:system-ui-ko;src:local("HelveticaNeue");unicode-range:U+A0}@supports not (-webkit-hyphens:none){@font-face{font-family:system-ui-ko;src:local("HelveticaNeue");unicode-range:U+20}}:root{--fonts-default-override-ko: system-ui-ko, var(--fonts-proportional)}@supports (-moz-appearance:none){:root{--fonts-default-override-ko: var(--fonts-proportional), system-ui-ko}}:root{--fonts-proportional: -apple-system, "Segoe UI", system-ui, "Roboto", "Helvetica Neue", "Arial";--fonts-monospace: "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace, var(--fonts-emoji);--fonts-emoji: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Twemoji Mozilla";--border-radius: .28571429rem;--opacity-disabled: .55;--height-loading: 12rem;--color-primary: #4183c4;--color-primary-dark-1: #3876b3;--color-primary-dark-2: #31699f;--color-primary-dark-3: #2b5c8b;--color-primary-dark-4: #254f77;--color-primary-dark-5: #193450;--color-primary-dark-6: #0c1a28;--color-primary-dark-7: #04080c;--color-primary-light-1: #548fca;--color-primary-light-2: #679cd0;--color-primary-light-3: #7aa8d6;--color-primary-light-4: #8db5dc;--color-primary-light-5: #b3cde7;--color-primary-light-6: #d9e6f3;--color-primary-light-7: #f4f8fb;--color-primary-alpha-10: #4183c419;--color-primary-alpha-20: #4183c433;--color-primary-alpha-30: #4183c44b;--color-primary-alpha-40: #4183c466;--color-primary-alpha-50: #4183c480;--color-primary-alpha-60: #4183c499;--color-primary-alpha-70: #4183c4b3;--color-primary-alpha-80: #4183c4cc;--color-primary-alpha-90: #4183c4e1;--color-secondary: #dedede;--color-secondary-dark-1: #cecece;--color-secondary-dark-2: #bfbfbf;--color-secondary-dark-3: #a0a0a0;--color-secondary-dark-4: #909090;--color-secondary-dark-5: #818181;--color-secondary-dark-6: #717171;--color-secondary-dark-7: #626262;--color-secondary-dark-8: #525252;--color-secondary-dark-9: #434343;--color-secondary-dark-10: #333333;--color-secondary-dark-11: #242424;--color-secondary-dark-12: #141414;--color-secondary-dark-13: #040404;--color-secondary-light-1: #e5e5e5;--color-secondary-light-2: #ebebeb;--color-secondary-light-3: #f2f2f2;--color-secondary-light-4: #f8f8f8;--color-secondary-alpha-10: #dedede19;--color-secondary-alpha-20: #dedede33;--color-secondary-alpha-30: #dedede4b;--color-secondary-alpha-40: #dedede66;--color-secondary-alpha-50: #dedede80;--color-secondary-alpha-60: #dedede99;--color-secondary-alpha-70: #dededeb3;--color-secondary-alpha-80: #dededecc;--color-secondary-alpha-90: #dededee1;--color-console-fg: #ffffff;--color-console-bg: #171717;--color-red: #db2828;--color-orange: #f2711c;--color-yellow: #fbbd08;--color-olive: #b5cc18;--color-green: #21ba45;--color-teal: #00b5ad;--color-blue: #2185d0;--color-violet: #6435c9;--color-purple: #a333c8;--color-pink: #e03997;--color-brown: #a5673f;--color-grey: #888888;--color-gold: #a1882b;--color-red-light: #e45e5e;--color-orange-light: #f59555;--color-yellow-light: #fcce46;--color-olive-light: #d3e942;--color-green-light: #46de6a;--color-teal-light: #08fff4;--color-blue-light: #51a5e3;--color-violet-light: #8b67d7;--color-purple-light: #bb64d8;--color-pink-light: #e86bb1;--color-brown-light: #c58b66;--color-grey-light: #a6a6a6;--color-gold-light: #cfb34a;--color-black: #1b1c1d;--color-white: #ffffff;--color-diff-removed-word-bg: #fdb8c0;--color-diff-added-word-bg: #acf2bd;--color-diff-removed-row-bg: #ffeef0;--color-diff-moved-row-bg: #f1f8d1;--color-diff-added-row-bg: #e6ffed;--color-diff-removed-row-border: #f1c0c0;--color-diff-moved-row-border: #d0e27f;--color-diff-added-row-border: #e6ffed;--color-diff-inactive: #f2f2f2;--color-error-border: #e0b4b4;--color-error-bg: #fff6f6;--color-error-text: #9f3a38;--color-success-border: #a3c293;--color-success-bg: #fcfff5;--color-success-text: #2c662d;--color-warning-border: #c9ba9b;--color-warning-bg: #fffaf3;--color-warning-text: #573a08;--color-info-border: #a9d5de;--color-info-bg: #f8ffff;--color-info-text: #276f86;--color-body: #ffffff;--color-text-dark: #080808;--color-text: #212121;--color-text-light: #555555;--color-text-light-2: #808080;--color-text-light-3: #a0a0a0;--color-box-header: #f7f7f7;--color-box-body: #ffffff;--color-footer: #ffffff;--color-timeline: #ececec;--color-input-text: #212121;--color-input-background: #ffffff;--color-input-border: #dedede;--color-input-border-hover: #cecece;--color-navbar: #f8f8f8;--color-navbar-transparent: #f8f8f800;--color-light: #00000006;--color-light-mimic-enabled: rgba(0, 0, 0, calc(6 / 255 * 222 / 255 / var(--opacity-disabled)));--color-light-border: #0000001d;--color-hover: #0000000f;--color-active: #00000014;--color-menu: #ffffff;--color-card: #ffffff;--color-markup-table-row: #00000008;--color-markup-code-block: #00000010;--color-button: #ffffff;--color-code-bg: #ffffff;--color-code-sidebar-bg: #f5f5f5;--color-shadow: #00000030;--color-secondary-bg: #f4f4f4;--color-expand-button: #d8efff;--color-placeholder-text: #aaa;--color-editor-line-highlight: var(--color-primary-light-6);--color-project-board-bg: var(--color-secondary-light-4);--color-project-board-dark-label: #555555;--color-project-board-light-label: #a6aab5;--color-caret: var(--color-text-dark);--color-reaction-bg: #0000000a;--color-reaction-active-bg: var(--color-primary-alpha-20);--checkbox-mask-checked: url('data:image/svg+xml;utf8,');--checkbox-mask-indeterminate: url('data:image/svg+xml;utf8,')}:root *{--fonts-regular: var(--fonts-override, var(--fonts-proportional)), "Noto Sans", "Liberation Sans", sans-serif, var(--fonts-emoji)}textarea{font-family:var(--fonts-regular)}pre,code,kbd,samp{font-size:.9em;font-family:var(--fonts-monospace)}b,strong,h1,h2,h3,h4,h5,h6{font-weight:600}body{color:var(--color-text);background-color:var(--color-body);overflow-y:auto;display:flex;flex-direction:column;overflow-wrap:break-word}img{border-radius:3px}table{border-collapse:collapse}details summary{cursor:pointer}details summary>*{display:inline}progress{background:var(--color-secondary-dark-1);border-radius:6px;border:none;overflow:hidden}progress::-webkit-progress-bar{background:var(--color-secondary-dark-1)}progress::-webkit-progress-value{background-color:var(--color-secondary-dark-4)}progress::-moz-progress-bar{background:var(--color-secondary-dark-4)}*{scrollbar-color:var(--color-primary) transparent;caret-color:var(--color-caret)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 6px var(--color-primary);border:2px solid transparent;border-radius:5px!important}::-webkit-scrollbar-thumb:window-inactive{box-shadow:inset 0 0 0 6px var(--color-primary)}::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 6px var(--color-primary-dark-2)}::-webkit-scrollbar-corner{background:transparent}::selection{background:var(--color-primary-light-1)!important;color:var(--color-white)!important}::placeholder,.ui.dropdown:not(.button)>.default.text,.ui.default.dropdown:not(.button)>.text{color:var(--color-placeholder-text)!important;opacity:1!important}a,.ui.breadcrumb a{color:var(--color-primary);cursor:pointer;text-decoration-skip-ink:all}a.muted{color:inherit}a:hover,a.muted:hover,.ui.breadcrumb a:hover{color:var(--color-primary)}a.label,.repository-menu a,.ui.search .results a,.ui .menu a,.ui.cards a.card,.issue-keyword a,a.commit-statuses-trigger{text-decoration:none!important}.unselectable,.file-revisions-btn i,.button,.lines-num,.lines-commit,.lines-commit .blame-info,.ellipsis-button,.repository .data-table .line-num,.repository .diff-file-box .file-body.file-code .lines-num,.repository .diff-file-box .code-diff tbody tr .lines-type-marker,.repository .repository-summary .segment.language-stats,.show-outdated,.hide-outdated{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.icon-button{padding-top:7.42px!important;padding-bottom:7.42px!important}.ui.breadcrumb a:hover{text-decoration:underline!important}.ui.breadcrumb .divider{color:var(--color-text-light-2)}.page-content{margin-top:15px}.page-content .header-wrapper,.page-content .new-menu{margin-top:-15px!important;padding-top:15px!important}.ui.input.focus>input,.ui.input>input:focus{border-color:var(--color-primary)}.ui.action.input:not([class*="left action"])>.ui.dropdown.selection{min-width:10em}.ui.action.input:not([class*="left action"])>.ui.dropdown.selection:not(:focus):not(:hover){border-right-color:transparent}.ui.action.input:not([class*="left action"])>input:focus{border-right-color:var(--color-primary)}.ui.menu,.ui.vertical.menu{background:var(--color-menu);border-color:var(--color-secondary)}.ui.menu .item{color:var(--color-text)}.ui.menu .item>.svg{margin-right:.35em}.ui.menu .item>.label{background:var(--color-grey)}.ui.link.menu .item:hover,.ui.menu .dropdown.item:hover,.ui.menu .link.item:hover,.ui.menu a.item:hover{color:var(--color-text);background:var(--color-hover)}.ui.menu .active.item,.ui.menu .active.item:hover,.ui.vertical.menu .active.item,.ui.vertical.menu .active.item:hover{color:var(--color-text);background:var(--color-active)}.ui.link.menu .item:active,.ui.menu .link.item:active,.ui.menu a.item:active{color:var(--color-text);background:none}.ui.ui.menu .item.disabled{color:var(--color-text-light-3)}.ui.ui.menu .dropdown.item.disabled{color:var(--color-text-light-2)}.ui.dropdown .menu{background:var(--color-menu);border-color:var(--color-secondary)}.ui.dropdown .menu>.header:not(.ui){color:var(--color-text)}.ui.dropdown .menu>.item{color:var(--color-text)}.ui.dropdown .menu>.item:hover{color:var(--color-text);background:var(--color-hover)}.ui.dropdown .menu .active.item{color:var(--color-text);background:var(--color-active);font-weight:400}.ui.dropdown .menu>.item>img{margin-top:-.25rem;margin-bottom:-.25rem}.ui.selection.dropdown .menu>.item{border-color:var(--color-secondary)}.ui.selection.visible.dropdown>.text:not(.default){color:var(--color-text)}.ui.dropdown.selected,.ui.dropdown .menu .selected.item{color:var(--color-text);background:var(--color-hover)}.ui.menu .ui.dropdown .menu>.selected.item{color:var(--color-text)!important;background:var(--color-hover)!important}.ui.dropdown .menu>.message:not(.ui){color:var(--color-text-light-2)}.ui.secondary.menu .dropdown.item:hover,.ui.secondary.menu .link.item:hover,.ui.secondary.menu a.item:hover{color:var(--color-text);background:var(--color-hover)}.ui.secondary.menu .active.item,.ui.secondary.menu .active.item:hover{color:var(--color-text);background:var(--color-active)}.ui.secondary.menu.tight .item{padding-left:.85714286em;padding-right:.85714286em}.ui.menu .dropdown.item .menu{background:var(--color-menu)}.ui.menu .ui.dropdown .menu>.item{color:var(--color-text)!important}.ui.menu .ui.dropdown .menu>.item:hover{color:var(--color-text)!important;background:var(--color-hover)!important}.ui.menu .ui.dropdown .menu>.active.item{color:var(--color-text)!important;background:var(--color-active)!important}.ui.message{background:var(--color-box-body);color:var(--color-text);box-shadow:none!important;border:1px solid var(--color-secondary)}.ui.info.message,.ui.attached.info.message,.ui.blue.message,.ui.attached.blue.message{background:var(--color-info-bg);color:var(--color-info-text);border-color:var(--color-info-border)}.ui.success.message,.ui.attached.success.message,.ui.positive.message,.ui.attached.positive.message{background:var(--color-success-bg);color:var(--color-success-text);border-color:var(--color-success-border)}.ui.error.message,.ui.attached.error.message,.ui.red.message,.ui.attached.red.message,.ui.negative.message,.ui.attached.negative.message{background:var(--color-error-bg);color:var(--color-error-text);border-color:var(--color-error-border)}.ui.warning.message,.ui.attached.warning.message,.ui.yellow.message,.ui.attached.yellow.message{background:var(--color-warning-bg);color:var(--color-warning-text);border-color:var(--color-warning-border)}.ui.error.header{background:var(--color-error-bg)!important;color:var(--color-error-text)!important;border-color:var(--color-error-border)!important}.ui.error.segment{border-color:var(--color-error-border)!important}.ui.warning.header{background:var(--color-warning-bg)!important;color:var(--color-warning-text)!important;border-color:var(--color-warning-border)!important}.ui.warning.segment{border-color:var(--color-warning-border)!important}.ui.selection.active.dropdown,.ui.selection.active.dropdown:hover,.ui.selection.active.dropdown .menu,.ui.selection.active.dropdown:hover .menu{border-color:var(--color-primary-light-2)}.ui.selection.dropdown .menu{margin:0 -1.25px}.ui.pointing.dropdown>.menu:not(.hidden):after{background:var(--color-box-body);box-shadow:-1px -1px 0 0 var(--color-secondary)}.ui.cards>.card,.ui.card{background:var(--color-card);border:1px solid var(--color-secondary);box-shadow:none}.ui.cards>.card>.content,.ui.card>.content{border-color:var(--color-secondary)}.ui.cards>.card>.extra,.ui.card>.extra,.ui.cards>.card>.extra a:not(.ui),.ui.card>.extra a:not(.ui){color:var(--color-text)}.ui.cards>.card>.extra a:not(.ui):hover,.ui.card>.extra a:not(.ui):hover{color:var(--color-primary)}.ui.cards>.card>.content>.header,.ui.card>.content>.header{color:var(--color-text)}.ui.cards>.card>.content>.description,.ui.card>.content>.description{color:var(--color-text)}.ui.cards>.card .meta>a:not(.ui),.ui.card .meta>a:not(.ui){color:var(--color-text-light-2)}.ui.cards>.card .meta>a:not(.ui):hover,.ui.card .meta>a:not(.ui):hover{color:var(--color-text)}.ui.cards a.card:hover,.ui.link.cards .card:not(.icon):hover,a.ui.card:hover,.ui.link.card:hover{border:1px solid var(--color-secondary);background:var(--color-card)}.ui.cards>.card>.extra,.ui.card>.extra{color:var(--color-text);border-top-color:var(--color-secondary-light-1)!important}.ui.comments .comment .text{margin:0}.ui.comments .comment .text,.ui.comments .comment .author{color:var(--color-text)}.ui.comments .comment a.author:hover{color:var(--color-primary)}.ui.comments .comment .metadata{color:var(--color-text-light-2)}.ui.comments .comment .actions a{color:var(--color-text-light)}.ui.comments .comment .actions a.active,.ui.comments .comment .actions a:hover{color:var(--color-primary)}.ui.attached.table{border-color:var(--color-secondary)}.ui.table{color:var(--color-text);background:var(--color-body);border-color:var(--color-secondary)}.ui.ui.selectable.table>tbody>tr:hover,.ui.table tbody tr td.selectable:hover{color:var(--color-text);background-color:var(--color-secondary-alpha-40)}.ui.ui.ui.ui.table tr.grey:not(.marked),.ui.ui.table td.grey:not(.marked){background:var(--color-body);color:var(--color-text)}.ui.modal{background:var(--color-body)}.ui.modal>.header{border-color:var(--color-secondary);border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius)}.ui.modal>.close.inside,.ui.fullscreen.modal>.close{top:11px;color:var(--body-color)}.ui.basic.table>tbody>tr{border-color:var(--color-secondary)}.ui.avatar.images .image,.ui.avatar.images img,.ui.avatar.images svg,.ui.avatar.image img,.ui.avatar.image svg,.ui.avatar.image,.ui.cards>.card img.avatar,.ui.cards>.card .avatar img,.ui.card img.avatar,.ui.card .avatar img{border-radius:var(--border-radius)}.ui.divided.list>.item{border-color:var(--color-secondary)}.ui.link.list .item,.ui.link.list a.item,.ui.link.list .item a:not(.ui){color:var(--color-text)}.ui.link.list.list a.item:hover,.ui.link.list.list .item a:not(.ui):hover,.ui.link.list.list a.item:active,.ui.link.list.list .item a:not(.ui):active{color:var(--color-text-dark)}.ui.error.message .header,.ui.warning.message .header{color:inherit;filter:saturate(2)}.dont-break-out{overflow-wrap:break-word;word-wrap:break-word;word-break:break-all;hyphens:auto}.full.height{flex-grow:1;padding-bottom:80px}.following.bar{z-index:900;left:0;margin:0!important}.following.bar.light{background:var(--color-body);border-bottom:1px solid var(--color-secondary)}.following.bar .column .menu{margin-top:0}.following.bar .top.menu a.item.brand{padding-left:0}.following.bar .brand .ui.mini.image{width:30px}.following.bar .top.menu a.item:hover,.following.bar .top.menu .dropdown.item:hover,.following.bar .top.menu .dropdown.item.active{background-color:transparent}.following.bar .top.menu a.item:hover{color:#00000073}.following.bar .top.menu .menu{z-index:900}.following.bar .fitted .svg{margin-right:0;vertical-align:middle}.following.bar .searchbox{background-color:#f4f4f4!important}.following.bar .searchbox:focus{background-color:#e9e9e9!important}.following.bar .text .svg{width:16px;text-align:center}.following.bar #navbar{width:100vw;min-height:52px;padding:0 .5rem}.following.bar #navbar .brand{margin:0}.following.bar #navbar .dropdown .avatar{margin-right:0!important}@media (max-width: 767px){.following.bar #navbar:not(.shown)>*:not(:first-child){display:none}}.right.stackable.menu{margin-left:auto;display:flex;align-items:inherit;flex-direction:inherit}.ui.dropdown .menu{border-color:var(--color-secondary)}.ui.pagination.menu .active.item{color:var(--color-text);background:var(--color-active)}.ui.form .field>.selection.dropdown>.dropdown.icon{height:auto}.ui.loading.segment:before,.ui.loading.form:before{background:none}.ui.loading.form>*,.ui.loading.segment>*{opacity:.35}.ui.loading.loading.input>i.icon svg{visibility:hidden}.ui.left:not(.action){float:left}.ui.right:not(.action){float:right}.ui.menu .item{user-select:auto}.ui.container.fluid.padded{padding:0 10px}.ui.form .ui.button{font-weight:400}.ui.floating.label{z-index:10}.ui.transparent.label{background-color:transparent}.ui.menu,.ui.vertical.menu,.ui.segment{box-shadow:none}.ui .menu:not(.vertical) .item>.button.compact{padding:.58928571em 1.125em}.ui .menu:not(.vertical) .item>.button.small{font-size:.92857143rem}.ui.menu .ui.dropdown.item .menu .item{width:100%}.ui.dropdown .menu>.item>.floating.label{z-index:11}.ui.dropdown .menu .menu>.item>.floating.label{z-index:21}.ui.dropdown .menu>.header{font-size:.8em}.ui .text.red{color:var(--color-red)!important}.ui .text.red a{color:inherit!important}.ui .text.red a:hover{color:var(--color-red-light)!important}.ui .text.blue{color:var(--color-blue)!important}.ui .text.blue a{color:inherit!important}.ui .text.blue a:hover{color:var(--color-blue-light)!important}.ui .text.black{color:var(--color-text)}.ui .text.black:hover{color:var(--color-text-dark)}.ui .text.grey{color:var(--color-text-light)!important}.ui .text.grey a{color:var(--color-text)!important}.ui .text.grey a:hover{color:var(--color-primary)!important}.ui .text.light.grey{color:var(--color-text-light-2)!important}.ui .text.green{color:var(--color-green)!important}.ui .text.purple{color:var(--color-purple)!important}.ui .text.yellow{color:var(--color-yellow)!important}.ui .text.orange{color:var(--color-orange)!important}.ui .text.gold{color:var(--color-gold)!important}.ui .text.left{text-align:left!important}.ui .text.right{text-align:right!important}.ui .text.small{font-size:.75em}.ui .text.normal{font-weight:400}.ui .text.italic{font-style:italic}.ui .text.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}.ui .text.thin{font-weight:400}.ui .text.middle{vertical-align:middle}.ui .message{text-align:center}.ui .message>ul{margin-left:auto;margin-right:auto;display:table;text-align:left}.ui .header>i+.content{padding-left:.75rem;vertical-align:middle}.ui .info.segment.top h3,.ui .info.segment.top h4{margin-top:0}.ui .info.segment.top h3:last-child{margin-top:4px}.ui .info.segment.top>:last-child{margin-bottom:0}.ui .normal.header{font-weight:400}.ui .form .autofill-dummy{position:absolute;width:1px;height:1px;overflow:hidden;z-index:-10000}.ui .form .sub.field{margin-left:25px}.ui .sha.label{font-family:var(--fonts-monospace);font-size:13px;padding:6px 10px 4px;font-weight:400;margin:0 6px}.ui .button.copy-commit-sha{border:1px solid var(--color-light-border);margin-right:3px;padding:6px 6px 4px;background:var(--color-light)}.ui .button.truncate{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;margin-right:6px}.ui.status.buttons .svg{margin-right:4px}.ui.inline.delete-button{padding:8px 15px;font-weight:400}.ui .background.red{background-color:var(--color-red)!important}.ui .background.blue{background-color:var(--color-blue)!important}.ui .background.black{background-color:var(--color-black)!important}.ui .background.grey,.ui .background.light.grey{background-color:var(--color-grey)!important}.ui .background.green{background-color:var(--color-green)!important}.ui .background.purple{background-color:var(--color-purple)!important}.ui .background.yellow{background-color:var(--color-yellow)!important}.ui .background.orange{background-color:var(--color-orange)!important}.ui .background.gold{background-color:var(--color-gold)!important}.ui .migrate{color:var(--color-text-light-2)!important}.ui .migrate a{color:var(--color-text-light)!important}.ui .migrate a:hover{color:var(--color-text)!important}.ui .border{border:1px solid}.ui .border.red{border-color:var(--color-red)!important}.ui .border.blue{border-color:var(--color-blue)!important}.ui .border.black{border-color:var(--color-black)!important}.ui .border.grey,.ui .border.light.grey{border-color:var(--color-grey)!important}.ui .border.green{border-color:var(--color-green)!important}.ui .border.purple{border-color:var(--color-purple)!important}.ui .border.yellow{border-color:var(--color-yellow)!important}.ui .border.orange{border-color:var(--color-orange)!important}.ui .border.gold{border-color:var(--color-gold)!important}.ui .branch-tag-choice{line-height:20px}@media (max-width: 767px){.ui.pagination.menu .item:not(.active):not(.navigation),.ui.pagination.menu .item.navigation span.navigation_label{display:none}}.ui.pagination.menu.narrow .item{padding-left:8px;padding-right:8px;min-width:1em;text-align:center}.ui.pagination.menu.narrow .item .icon{margin-right:0}.ui.icon.header svg{width:3em;height:3em;float:none;display:block;line-height:1;padding:0;margin:0 auto .5rem;opacity:1}.ui.modal>.content{text-align:center}.ui.floating.dropdown .overflow.menu .scrolling.menu.items{border-radius:0!important;box-shadow:none!important;border-bottom:1px solid var(--color-secondary)}.user-menu>.item{width:100%;border-radius:0!important}.scrolling.menu .item.selected{font-weight:600!important}.ui.dropdown .scrolling.menu{border-color:var(--color-secondary)}footer{background-color:var(--color-footer);border-top:1px solid var(--color-secondary);width:100%;flex-basis:40px;color:var(--color-text-light)}footer .container{width:100vw!important;padding:0 .5rem;max-width:calc(100vw - 1rem)!important}footer .container .links>*{border-left:1px solid var(--color-secondary);padding-left:8px;margin-left:5px}footer .container .links>*:first-child{border-left:0}footer .ui.language .menu{max-height:500px;overflow-y:auto;margin-bottom:7px}footer .ui.language .svg{margin-right:.15em;vertical-align:top;margin-top:calc(2em - 16px)}footer .ui.left,footer .ui.right{line-height:40px}.hide{display:none}.hide.show-outdated,.hide.hide-outdated{display:none!important}.center:not(.popup){text-align:center}@media (min-width: 768px){.mobile-only,.ui.button.mobile-only{display:none!important}.sr-mobile-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}}@media (max-width: 767px){.not-mobile{display:none!important}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}@media (min-width: 768px) and (max-width: 991px){.ui.container{width:95%}}.ui.menu.new-menu{margin-bottom:15px;background:var(--color-navbar);border-bottom:1px solid var(--color-secondary)!important;overflow:auto}.ui.menu.new-menu .new-menu-inner{display:flex;margin-left:auto;margin-right:auto;overflow-x:auto}.ui.menu.new-menu:after{position:absolute;display:block;background:linear-gradient(to right,var(--color-navbar-transparent),var(--color-navbar) 100%);content:"";right:0;height:39px;width:60px;visibility:visible;pointer-events:none}.ui.menu.new-menu.shadow-body:after{background:linear-gradient(to right,transparent,var(--color-body) 100%)}.ui.menu.new-menu .item{margin:0!important}@media (max-width: 767px){.ui.menu.new-menu .item{width:auto!important}}.ui.menu.new-menu .item:last-child{padding-right:30px!important}.ui.menu.new-menu::-webkit-scrollbar{height:6px;display:none}.ui.menu.new-menu::-webkit-scrollbar-track{background:none!important}.ui.menu.new-menu::-webkit-scrollbar-thumb{box-shadow:none!important}.ui.menu.new-menu:hover::-webkit-scrollbar{display:block}[v-cloak]{display:none!important}.repos-search{padding-bottom:0!important}.repos-filter{margin-top:0!important;border-bottom-width:0!important;margin-bottom:2px!important;justify-content:space-evenly}.ui.secondary.pointing.menu.repos-filter .item{padding-left:4.5px;padding-right:4.5px}.repo-title{font-size:1.5rem;display:flex;align-items:center;flex:1;word-break:break-all;color:var(--color-text-light)}.repo-title .avatar{width:32px!important;height:32px!important}.repo-title .labels{margin-left:.5rem}.repo-title .labels>*+*{margin-left:.5rem}.repo-icon{display:inline-block}.activity-bar-graph{background-color:var(--color-primary);color:#fff}.activity-bar-graph-alt{color:#fff}.archived-icon{color:#b3b3b3!important}.oauth2-authorize-application-box{margin-top:3em!important}.inline-grouped-list{display:inline-block;vertical-align:top}.inline-grouped-list>.ui{display:block;margin-top:5px;margin-bottom:10px}.inline-grouped-list>.ui:first-child{margin-top:1px}i.icons .icon:first-child{margin-right:0}i.icon.centerlock{top:1em}.ui.label{padding:.3em .5em;background:var(--color-light);color:var(--color-text-light)}.ui.labels a.label:hover,a.ui.label:hover{background:var(--color-hover);color:var(--color-text)}.ui.label>.detail .icons{margin-right:.25em}.ui.label>.detail .icons .icon{margin-right:0}.lines-blame-btn{padding-left:10px;padding-right:10px;text-align:right!important;background-color:var(--color-code-sidebar-bg);width:2%}.lines-num{padding-left:10px;padding-right:10px;text-align:right!important;color:#1b1f234d;width:1%;font-family:var(--fonts-monospace)}.lines-num span.bottom-line:after{border-bottom:1px solid var(--color-secondary)}.lines-num span:after{content:attr(data-line-number);line-height:20px!important;padding:0 10px;cursor:pointer;display:block}.lines-type-marker{vertical-align:top}.lines-num,.lines-code{font-size:12px;font-family:var(--fonts-monospace);line-height:20px;padding-top:0;padding-bottom:0;vertical-align:top}.lines-num pre,.lines-code pre,.lines-num ol,.lines-code ol{background-color:inherit;margin:0;padding:0!important}.lines-num pre li,.lines-code pre li,.lines-num ol li,.lines-code ol li{display:block;width:calc(100% - 1ch);padding-left:1ch}.lines-escape{width:0}.lines-code{background-color:var(--color-code-bg);padding-left:5px}.lines-code.active,.lines-code .active{background:#fffbdd!important}.blame .lines-num{padding:0!important;background-color:var(--color-code-sidebar-bg)}.blame .lines-code{padding:0!important}.code-inner{font:12px var(--fonts-monospace);white-space:pre-wrap;word-break:break-all;overflow-wrap:break-word;word-wrap:break-word}.blame .code-inner{white-space:pre;word-break:normal;word-wrap:normal}.lines-commit{vertical-align:top;color:#999;padding:0!important;background:var(--color-code-sidebar-bg);width:1%}.lines-commit .blame-info{width:350px;max-width:350px;display:block;padding:0 0 0 10px;line-height:20px;box-sizing:content-box}.lines-commit .blame-info .blame-data{display:flex;font-family:var(--fonts-regular)}.lines-commit .blame-info .blame-data .blame-message{flex-grow:2;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lines-commit .blame-info .blame-data .blame-time,.lines-commit .blame-info .blame-data .blame-avatar{flex-shrink:0}.lines-commit .ui.avatar.image{height:18px;width:18px;display:block;margin-top:1px}.top-line-blame{border-top:1px solid var(--color-secondary)}.lines-code .bottom-line,.lines-commit .bottom-line{border-bottom:1px solid var(--color-secondary)}.code-view table{width:100%}.octicon-tiny{font-size:.85714286rem}.ui.button{background:var(--color-button);border:1px solid var(--color-light-border);color:var(--color-text)}.page-content .ui.button{box-shadow:none!important}.ui.button:focus,.ui.button:hover{background:var(--color-hover);color:var(--color-text)}.ui.button:active,.ui.active.button:active,.ui.active.button:hover{background:var(--color-active);color:var(--color-text)}.ui.button.no-text .icon{margin:0!important}.ui.buttons .button:first-child{border-left:1px solid var(--color-light-border)}.ui.buttons .button+.button{border-left:none}.two-toggle-buttons .button:not(.active):first-of-type{border-right:none}.two-toggle-buttons .button.active:last-of-type{border-left:1px solid var(--color-light-border)}.ui.labeled.button.disabled>.button,.ui.basic.buttons .button,.ui.basic.button{color:var(--color-text-light);background:var(--color-light)}.ui.basic.buttons .button:hover,.ui.basic.button:hover{color:var(--color-text);background:var(--color-hover)}.ui.basic.buttons .button:focus,.ui.basic.button:focus,.ui.basic.buttons .button:active,.ui.basic.button:active,.ui.basic.buttons .active.button,.ui.basic.active.button,.ui.basic.buttons .active.button:hover,.ui.basic.active.button:hover{color:var(--color-text);background:var(--color-active)}.ui.labeled.button>.label{border-color:var(--color-light-border)}.ui.labeled.icon.buttons>.button>.icon,.ui.labeled.icon.button>.icon{background:var(--color-hover)}.ui.primary.button,.ui.primary.buttons .button{background-color:var(--color-primary)!important}.ui.primary.button:hover,.ui.primary.buttons .button:hover{background-color:var(--color-primary-dark-2)!important}.ui.primary.button:focus,.ui.primary.buttons .button:focus{background-color:var(--color-primary-dark-3)!important}.ui.basic.primary.button,.ui.basic.primary.buttons .button{box-shadow:inset 0 0 0 1px var(--color-primary)!important;color:#fff!important}.ui.basic.primary.button:hover,.ui.basic.primary.buttons .button:hover{box-shadow:inset 0 0 0 1px var(--color-primary-dark-2)!important}.ui.basic.primary.button:focus,.ui.basic.primary.buttons .button:focus{box-shadow:inset 0 0 0 1px var(--color-primary-dark-3)!important}.ui.basic.secondary.buttons .button,.ui.basic.secondary.button{color:var(--color-secondary-dark-6)!important}.ui.basic.secondary.buttons .button:hover,.ui.basic.secondary.button:hover,.ui.basic.secondary.buttons .button:active,.ui.basic.secondary.button:active{color:var(--color-secondary-dark-8)!important}.ui.primary.label,.ui.primary.labels .label{background-color:var(--color-primary)!important;border-color:var(--color-primary-dark-2)!important}.ui.basic.labels .primary.label,.ui.ui.ui.basic.primary.label{background:transparent!important;border-color:var(--color-primary)!important;color:var(--color-primary)!important}.ui.basic.labels .label,.ui.basic.label{background:var(--color-light);border-color:var(--color-light-border);color:var(--color-text-light)}.ui.basic.labels a.label:hover,a.ui.basic.label:hover{color:var(--color-text);border-color:var(--color-light-border);background:var(--color-hover)}.ui.label>img{width:auto!important;vertical-align:middle;height:2.1666em!important}span.green .svg{color:var(--color-green)}span.red .svg{color:var(--color-red)}span.purple .svg{color:var(--color-purple)}.migrate .svg.gitea-git{color:#f05133}.ui.popup{background-color:var(--color-body);color:var(--color-secondary-dark-6);border-color:var(--color-secondary)}.ui.popup:before{box-shadow:1px 1px 0 0 var(--color-secondary)}.ui.bottom.popup:before,.ui.top.popup:before,.ui.right.center.popup:before,.ui.left.center.popup:before{background-color:var(--color-body)}.ui.bottom.left.popup:before,.ui.bottom.right.popup:before,.ui.bottom.center.popup:before{box-shadow:-1px -1px 0 0 var(--color-secondary)}.ui.left.center.popup:before{box-shadow:1px -1px 0 0 var(--color-secondary)}.ui.right.center.popup:before{box-shadow:-1px 1px 0 0 var(--color-secondary)}.ui.popup .ui.label{margin-bottom:.4em}.color-icon{display:inline-block;border-radius:100%;height:14px;width:14px}.ui.label>.color-icon{margin-left:0}.invisible{visibility:hidden}.ui.segment,.ui.segments,.ui.attached.segment{background:var(--color-box-body);color:var(--color-text);border-color:var(--color-secondary)}.ui.segments>.segment{border-color:var(--color-secondary)}.ui.secondary.segment{background:var(--color-secondary-bg);color:var(--color-text-light)}.ui.attached.header{position:relative;background:var(--color-box-header);border-color:var(--color-secondary)}.ui.attached.header .right .button{padding:8px 10px;font-weight:400}.ui.attached.header .right:not(.dropdown){position:absolute;right:.78571429rem;top:0;bottom:0;height:30px;margin-top:auto;margin-bottom:auto}.ui.attached.segment~.ui.top.attached.header{margin-top:1rem}table th[data-sortt-asc]:hover,table th[data-sortt-desc]:hover{background:rgba(0,0,0,.1)!important;cursor:pointer!important}table th[data-sortt-asc] .svg,table th[data-sortt-desc] .svg{margin-left:.25rem}.ui.dropdown>.dropdown.icon,.btn-review>.dropdown.icon{height:auto!important;margin-left:.5rem!important;margin-top:-1px!important;margin-bottom:-1px!important;margin-right:-.5rem!important}.ui.button.dropdown>.dropdown.icon,.btn-review>.dropdown.icon{float:right!important}@media (max-width: 480px){.ui.button.dropdown>.dropdown.icon,.btn-review>.dropdown.icon{display:none}}.ui.selection.dropdown>.search.icon,.ui.selection.dropdown>.delete.icon,.ui.selection.dropdown>.dropdown.icon{top:0!important}.ui.dropdown.no-text>.dropdown.icon{margin-left:0!important;margin-right:0!important}.ui.dropdown .menu .item{border-radius:0}.ui.dropdown .menu .item:first-of-type{border-radius:var(--border-radius) var(--border-radius) 0 0}.ui.dropdown .menu .item:last-of-type{border-radius:0 0 var(--border-radius) var(--border-radius)}.text-label{display:inline-flex!important;align-items:center!important}.emoji,.reaction{font-size:1.25em;line-height:1;font-style:normal!important;font-weight:400!important;vertical-align:-.075em}@supports (-webkit-hyphens:none){body:not(.safari-above125) .emoji,body:not(.safari-above125) .reaction{font-size:inherit;vertical-align:inherit}body:not(.safari-above125) .emoji img,body:not(.safari-above125) .reaction img{font-size:1.25em;vertical-align:-.225em!important}}.emoji img,.reaction img{border-width:0!important;margin:0!important;width:1em!important;height:1em!important;vertical-align:-.15em}.labelspage{list-style:none;padding-top:0}.labelspage .item{margin-top:0;margin-right:-14px;margin-left:-14px;padding:10px;border-bottom:1px solid var(--color-secondary);border-top:none}.labelspage .item a{font-size:15px;padding-top:5px;padding-right:10px;color:var(--color-text-light)}.labelspage .item a:hover{color:var(--color-primary-light-2)}.labelspage .item a.open-issues{margin-right:30px}.labelspage .item .ui.label{font-size:1em}.labelspage .item:last-child{border-bottom:none;padding-bottom:0}.labelspage .orglabel{opacity:.7}.ui.sub.header{text-transform:none}.ui.tabular.menu{border-color:var(--color-secondary)}.ui.tabular.menu .item{padding:11px 12px;color:var(--color-text-light-2)}.ui.tabular.menu .item:hover{color:var(--color-text)}.ui.tabular.menu .active.item,.ui.tabular.menu .active.item:hover{background:var(--color-body);border-color:var(--color-secondary);color:var(--color-text);margin-top:1px}.ui.segment .ui.tabular.menu .active.item,.ui.segment .ui.tabular.menu .active.item:hover{background:var(--color-box-body)}.ui.secondary.pointing.menu{border-color:var(--color-secondary)}.ui.secondary.pointing.menu .item{color:var(--color-text-light-2)}.ui.secondary.pointing.menu .active.item,.ui.secondary.pointing.menu .active.item:hover,.ui.secondary.pointing.menu .dropdown.item:hover,.ui.secondary.pointing.menu .link.item:hover,.ui.secondary.pointing.menu a.item:hover{color:var(--color-text-dark)}.ui.header{color:var(--color-text)}.ui.header .ui.label{margin-left:.25rem}.ui.header>.ui.label.compact{margin-top:inherit}.flash-error details code{display:block;text-align:left}.truncated-item-container{display:flex!important}.ellipsis-button{padding:0 5px 8px!important;display:inline-block!important;font-weight:600!important;line-height:6px!important;vertical-align:middle!important}.truncated-item-name{line-height:2em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:-.5em;margin-bottom:-.5em}.precolors{padding-left:0!important;padding-right:0!important;margin:3px 10px auto!important;width:120px!important}.precolors .color{float:left;width:15px;height:15px}@media (max-width: 767px){.ui.stackable.menu:not(.no-vertical-tabs){overflow-y:hidden;overflow-x:auto;flex-direction:row;flex-wrap:nowrap!important}.ui.stackable.menu:not(.no-vertical-tabs) .item{width:initial!important}.ui.stackable.menu:not(.no-vertical-tabs)>.dropdown.item{position:initial}.ui.stackable.menu:not(.no-vertical-tabs) .menu{flex-direction:row}}.home .logo{max-width:220px}@media (max-width: 767px){.home .hero h1{font-size:3.5em}.home .hero h2{font-size:2em}}@media (min-width: 768px){.home .hero h1{font-size:5.5em}.home .hero h2{font-size:3em}}.home .hero .svg{color:var(--color-green);height:40px;width:50px;vertical-align:bottom}.home .hero.header{font-size:20px}.home p.large{font-size:16px}.home .stackable{padding-top:30px}.home a{color:var(--color-green)}@media (max-width: 880px){footer .ui.container .left,footer .ui.container .right{display:block;text-align:center;float:none}}.page-content.install{padding-top:45px}.page-content.install form .inline.field label{text-align:right;width:320px!important}.page-content.install form input{width:35%!important}.page-content.install form .field{text-align:left}.page-content.install form .field .help{margin-left:335px!important}.page-content.install form .field.optional .title{margin-left:38%}.page-content.install form .field.optional .checkbox{margin-left:40%!important}.page-content.install form .field.optional .checkbox label{width:auto!important}.page-content.install .ui .reinstall-message{width:70%;margin:20px auto;color:red;text-align:left;font-weight:700}.page-content.install .ui .reinstall-confirm{width:70%;text-align:left;margin:10px auto}input,textarea,.ui.input>input,.ui.form input:not([type]),.ui.form select,.ui.form textarea,.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=file],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url],.ui.selection.dropdown,.ui.checkbox label:before,.ui.checkbox input:checked~label:before,.ui.checkbox input:not([type="radio"]):indeterminate~label:before{background:var(--color-input-background);border-color:var(--color-input-border);color:var(--color-input-text)}input:hover,textarea:hover,.ui.input input:hover,.ui.form input:not([type]):hover,.ui.form select:hover,.ui.form textarea:hover,.ui.form input[type=date]:hover,.ui.form input[type=datetime-local]:hover,.ui.form input[type=email]:hover,.ui.form input[type=file]:hover,.ui.form input[type=number]:hover,.ui.form input[type=password]:hover,.ui.form input[type=search]:hover,.ui.form input[type=tel]:hover,.ui.form input[type=text]:hover,.ui.form input[type=time]:hover,.ui.form input[type=url]:hover,.ui.selection.dropdown:hover,.ui.checkbox label:hover:before,.ui.checkbox label:active:before,.ui.radio.checkbox label:after,.ui.radio.checkbox input:focus~label:before,.ui.radio.checkbox input:checked~label:before{background:var(--color-input-background);border-color:var(--color-input-border-hover);color:var(--color-input-text)}input:focus,textarea:focus,.ui.input input:focus,.ui.form input:not([type]):focus,.ui.form select:focus,.ui.form textarea:focus,.ui.form input[type=date]:focus,.ui.form input[type=datetime-local]:focus,.ui.form input[type=email]:focus,.ui.form input[type=file]:focus,.ui.form input[type=number]:focus,.ui.form input[type=password]:focus,.ui.form input[type=search]:focus,.ui.form input[type=tel]:focus,.ui.form input[type=text]:focus,.ui.form input[type=time]:focus,.ui.form input[type=url]:focus,.ui.selection.dropdown:focus,.ui.checkbox input:focus~label:before,.ui.checkbox input:not([type="radio"]):indeterminate:focus~label:before,.ui.checkbox input:checked:focus~label:before,.ui.radio.checkbox input:focus:checked~label:before{background:var(--color-input-background);border-color:var(--color-primary);color:var(--color-input-text)}.ui.form .field>label,.ui.form .inline.fields>label,.ui.form .inline.fields .field>label,.ui.form .inline.fields .field>p,.ui.form .inline.field>label,.ui.form .inline.field>p,.ui.checkbox label,.ui.checkbox+label,.ui.checkbox label:hover,.ui.checkbox+label:hover,.ui.checkbox input:focus~label,.ui.checkbox input:active~label{color:var(--color-text)}.ui.input,.ui.checkbox input:focus~label:after,.ui.checkbox input:checked~label:after,.ui.checkbox label:active:after,.ui.checkbox input:not([type="radio"]):indeterminate~label:after,.ui.checkbox input:not([type="radio"]):indeterminate:focus~label:after,.ui.checkbox input:checked:focus~label:after,.ui.disabled.checkbox label,.ui.checkbox input[disabled]~label{color:var(--color-input-text)}.ui.radio.checkbox input:focus~label:after,.ui.radio.checkbox input:checked~label:after,.ui.radio.checkbox input:focus:checked~label:after{background:var(--color-input-text)}.ui.toggle.checkbox label:before{background:var(--color-input-background)}.ui.toggle.checkbox label,.ui.toggle.checkbox input:checked~label,.ui.toggle.checkbox input:focus:checked~label{color:var(--color-text)!important}.ui.toggle.checkbox input:checked~label:before,.ui.toggle.checkbox input:focus:checked~label:before{background:var(--color-primary)!important}.ui.form select{padding:.67857143em 1em}.form .help{color:#999;padding-bottom:.6em;display:inline-block}#create-page-form form{margin:auto}#create-page-form form .ui.message{text-align:center}@media (min-width: 768px){#create-page-form form{width:800px!important}#create-page-form form .header{padding-left:280px!important}#create-page-form form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}#create-page-form form .help{margin-left:265px!important}#create-page-form form .optional .title{margin-left:250px!important}#create-page-form form .inline.field>input,#create-page-form form .inline.field>textarea{width:50%}}@media (max-width: 767px){#create-page-form form .optional .title{margin-left:15px}#create-page-form form .inline.field>label{display:block}}.signin .oauth2 div{display:inline-block}.signin .oauth2 div p{margin:10px 5px 0 0;float:left}.signin .oauth2 a{margin-right:3px}.signin .oauth2 a:last-child{margin-right:0}.signin .oauth2 img{width:32px;height:32px}.signin .oauth2 img.openidConnect{width:auto}@media (min-width: 768px){.g-recaptcha,.h-captcha{margin:0 auto!important;width:304px;padding-left:30px}}@media (max-height: 575px){#rc-imageselect,.g-recaptcha,.h-captcha{transform:scale(.77);transform-origin:0 0}}.user.activate form,.user.forgot.password form,.user.reset.password form,.user.link-account form,.user.signin form,.user.signup form{margin:auto}.user.activate form .ui.message,.user.forgot.password form .ui.message,.user.reset.password form .ui.message,.user.link-account form .ui.message,.user.signin form .ui.message,.user.signup form .ui.message{text-align:center}@media (min-width: 768px){.user.activate form,.user.forgot.password form,.user.reset.password form,.user.link-account form,.user.signin form,.user.signup form{width:800px!important}.user.activate form .header,.user.forgot.password form .header,.user.reset.password form .header,.user.link-account form .header,.user.signin form .header,.user.signup form .header{padding-left:280px!important}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.link-account form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.user.activate form .help,.user.forgot.password form .help,.user.reset.password form .help,.user.link-account form .help,.user.signin form .help,.user.signup form .help{margin-left:265px!important}.user.activate form .optional .title,.user.forgot.password form .optional .title,.user.reset.password form .optional .title,.user.link-account form .optional .title,.user.signin form .optional .title,.user.signup form .optional .title{margin-left:250px!important}.user.activate form .inline.field>input,.user.forgot.password form .inline.field>input,.user.reset.password form .inline.field>input,.user.link-account form .inline.field>input,.user.signin form .inline.field>input,.user.signup form .inline.field>input,.user.activate form .inline.field>textarea,.user.forgot.password form .inline.field>textarea,.user.reset.password form .inline.field>textarea,.user.link-account form .inline.field>textarea,.user.signin form .inline.field>textarea,.user.signup form .inline.field>textarea{width:50%}}@media (max-width: 767px){.user.activate form .optional .title,.user.forgot.password form .optional .title,.user.reset.password form .optional .title,.user.link-account form .optional .title,.user.signin form .optional .title,.user.signup form .optional .title{margin-left:15px}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.link-account form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{display:block}}.user.activate form,.user.forgot.password form,.user.reset.password form,.user.link-account form,.user.signin form,.user.signup form{width:700px!important}.user.activate form .header,.user.forgot.password form .header,.user.reset.password form .header,.user.link-account form .header,.user.signin form .header,.user.signup form .header{padding-left:0!important;text-align:center}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.link-account form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{width:200px}@media (max-width: 767px){.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.link-account form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label,.user.activate form input,.user.forgot.password form input,.user.reset.password form input,.user.link-account form input,.user.signin form input,.user.signup form input{width:100%!important}}.user.activate form input[type=number],.user.forgot.password form input[type=number],.user.reset.password form input[type=number],.user.link-account form input[type=number],.user.signin form input[type=number],.user.signup form input[type=number]{-moz-appearance:textfield}.user.activate form input::-webkit-outer-spin-button,.user.forgot.password form input::-webkit-outer-spin-button,.user.reset.password form input::-webkit-outer-spin-button,.user.link-account form input::-webkit-outer-spin-button,.user.signin form input::-webkit-outer-spin-button,.user.signup form input::-webkit-outer-spin-button,.user.activate form input::-webkit-inner-spin-button,.user.forgot.password form input::-webkit-inner-spin-button,.user.reset.password form input::-webkit-inner-spin-button,.user.link-account form input::-webkit-inner-spin-button,.user.signin form input::-webkit-inner-spin-button,.user.signup form input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.user.signin.webauthn-prompt{margin-top:15px}.repository.new.repo form,.repository.new.migrate form,.repository.new.fork form{margin:auto}.repository.new.repo form .ui.message,.repository.new.migrate form .ui.message,.repository.new.fork form .ui.message{text-align:center}@media (min-width: 768px){.repository.new.repo form,.repository.new.migrate form,.repository.new.fork form{width:800px!important}.repository.new.repo form .header,.repository.new.migrate form .header,.repository.new.fork form .header{padding-left:280px!important}.repository.new.repo form .inline.field>label,.repository.new.migrate form .inline.field>label,.repository.new.fork form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.repository.new.repo form .help,.repository.new.migrate form .help,.repository.new.fork form .help{margin-left:265px!important}.repository.new.repo form .optional .title,.repository.new.migrate form .optional .title,.repository.new.fork form .optional .title{margin-left:250px!important}.repository.new.repo form .inline.field>input,.repository.new.migrate form .inline.field>input,.repository.new.fork form .inline.field>input,.repository.new.repo form .inline.field>textarea,.repository.new.migrate form .inline.field>textarea,.repository.new.fork form .inline.field>textarea{width:50%}}@media (max-width: 767px){.repository.new.repo form .optional .title,.repository.new.migrate form .optional .title,.repository.new.fork form .optional .title{margin-left:15px}.repository.new.repo form .inline.field>label,.repository.new.migrate form .inline.field>label,.repository.new.fork form .inline.field>label{display:block}}.repository.new.repo form .dropdown .text,.repository.new.migrate form .dropdown .text,.repository.new.fork form .dropdown .text{margin-right:0!important}.repository.new.repo form .header,.repository.new.migrate form .header,.repository.new.fork form .header{padding-left:0!important;text-align:center}.repository.new.repo form .selection.dropdown,.repository.new.migrate form .selection.dropdown,.repository.new.fork form .selection.dropdown{vertical-align:middle;width:50%!important}@media (max-width: 767px){.repository.new.repo form label,.repository.new.migrate form label,.repository.new.fork form label,.repository.new.repo form input,.repository.new.migrate form input,.repository.new.fork form input,.repository.new.repo form .selection.dropdown,.repository.new.migrate form .selection.dropdown,.repository.new.fork form .selection.dropdown{width:100%!important}.repository.new.repo form .field button,.repository.new.migrate form .field button,.repository.new.fork form .field button,.repository.new.repo form .field a,.repository.new.migrate form .field a,.repository.new.fork form .field a{margin-bottom:1em;width:100%}}@media (min-width: 768px){.repository.new.repo .ui.form #auto-init{margin-left:265px!important}}.repository.new.repo .ui.form .selection.dropdown:not(.owner){width:50%!important}@media (max-width: 767px){.repository.new.repo .ui.form .selection.dropdown:not(.owner){width:100%!important}}.new.webhook form .help{margin-left:25px}.new.webhook .events.fields .column{padding-left:40px}.githook textarea{font-family:var(--fonts-monospace)}@media (max-width: 767px){.new.org .ui.form .field button,.new.org .ui.form .field a{margin-bottom:1em;width:100%}.new.org .ui.form .field input{width:100%!important}}.repository .popup.commit-statuses{max-height:45vh;max-width:60vw;overflow:auto;padding:0}.repository .popup.commit-statuses.ui.right{height:auto}.repository .popup.commit-statuses .list{padding:.8em}.repository .popup.commit-statuses .list>.item{line-height:2}.repository .repo-header .ui.compact.menu{margin-left:1rem}.repository .repo-header .ui.header{margin-top:0}.repository .repo-header .fork-flag{font-size:12px;margin-top:2px}.repository .repo-header .repo-buttons .svg{margin:0 .42857143em 0 -.21428571em}.repository .repo-header .button{margin-top:2px;margin-bottom:2px}.repository .tabs .navbar{justify-content:initial}.repository .navbar{display:flex;justify-content:space-between}.repository .navbar .ui.label{margin-left:7px;padding:3px 5px}.repository .owner.dropdown{min-width:40%!important}.repository .unicode-escaped .escaped-code-point[data-escaped]:before{visibility:visible;content:attr(data-escaped);font-family:var(--fonts-monospace);color:var(--color-red)}.repository .unicode-escaped .escaped-code-point .char{display:none}.repository .broken-code-point{font-family:var(--fonts-monospace);color:#00f}.repository .metas .menu{overflow-x:auto;max-height:300px}.repository .metas .ui.list.assignees .icon{line-height:2em}.repository .metas .ui.list.assignees .teamavatar{margin-top:.125rem;margin-left:6.75px;margin-right:8.75px}.repository .metas .ui.list .hide{display:none!important}.repository .metas .ui.list .dependency{padding:0;white-space:nowrap}.repository .metas .ui.list .title{max-width:200px;overflow:hidden;text-overflow:ellipsis}@media (max-width: 1200px){.repository .metas .ui.list .title{max-width:150px}}@media (max-width: 1000px){.repository .metas .ui.list .title{max-width:100px}}.repository .metas #deadlineForm input{width:12.8rem;border-radius:4px 0 0 4px;border-right:0;white-space:nowrap}.repository .header-wrapper{background-color:var(--color-navbar)}.repository .header-wrapper .ui.tabs.divider{border-bottom:0}.repository .header-wrapper .ui.tabular .svg{margin-right:5px}.repository .filter.menu .label.color{border-radius:3px;margin-left:15px;padding:0 8px}.repository .filter.menu.labels .label-filter .menu .info{display:inline-block;padding:.5rem .25rem;border-bottom:1px solid var(--color-secondary);font-size:12px;width:100%;white-space:nowrap;text-align:center}.repository .filter.menu.labels .label-filter .menu .info code{border:1px solid var(--color-secondary);border-radius:3px;padding:1px 2px;font-size:11px}.repository .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}.repository .select-label .desc{padding-left:16px}.repository .ui.tabs.container{margin-top:14px;margin-bottom:0}.repository .ui.tabs.container .ui.menu{border-bottom:0}.repository .ui.tabs.divider{margin-top:0;margin-bottom:20px}.repository #clone-panel #repo-clone-url{width:320px}@media (min-width: 768px) and (max-width: 991px){.repository #clone-panel #repo-clone-url{width:200px}}@media (max-width: 767px){.repository #clone-panel #repo-clone-url{width:200px}}.repository #clone-panel #repo-clone-https,.repository #clone-panel #repo-clone-ssh{border-right:none}.repository #clone-panel #download-btn{border-left:none}.repository #clone-panel button:first-of-type{border-radius:var(--border-radius) 0 0 var(--border-radius)!important}.repository #clone-panel button:last-of-type{border-radius:0 var(--border-radius) var(--border-radius) 0!important}.repository #clone-panel .dropdown .menu{right:0!important;left:auto!important}.repository.file.list .repo-description{display:flex;justify-content:space-between;align-items:center}.repository.file.list #repo-desc{font-size:1.2em}.repository.file.list .choose.reference .header .icon{font-size:1.4em}.repository.file.list .repo-path .section,.repository.file.list .repo-path .divider{display:inline}.repository.file.list #repo-files-table thead th{padding-top:8px;padding-bottom:5px;font-weight:400}.repository.file.list #repo-files-table thead .ui.avatar{margin-bottom:5px}.repository.file.list #repo-files-table tbody .svg{margin-left:3px;margin-right:5px}.repository.file.list #repo-files-table tbody .svg.octicon-reply{margin-right:10px}.repository.file.list #repo-files-table tbody .svg.octicon-file-directory-fill,.repository.file.list #repo-files-table tbody .svg.octicon-file-submodule{color:var(--color-primary)}.repository.file.list #repo-files-table tbody .svg.octicon-file,.repository.file.list #repo-files-table tbody .svg.octicon-file-symlink-file{color:var(--color-secondary-dark-7)}.repository.file.list #repo-files-table td{padding-top:0;padding-bottom:0;overflow:initial}.repository.file.list #repo-files-table td.name{width:33%;max-width:calc(100vw - 140px)}@media (min-width: 1201px){.repository.file.list #repo-files-table td.name{max-width:150px}}@media (min-width: 992px) and (max-width: 1200px){.repository.file.list #repo-files-table td.name{max-width:200px}}@media (min-width: 768px) and (max-width: 991px){.repository.file.list #repo-files-table td.name{max-width:300px}}.repository.file.list #repo-files-table td.message{width:66%}@media (min-width: 1201px){.repository.file.list #repo-files-table td.message{max-width:400px}}@media (min-width: 992px) and (max-width: 1200px){.repository.file.list #repo-files-table td.message{max-width:350px}}@media (min-width: 768px) and (max-width: 991px){.repository.file.list #repo-files-table td.message{max-width:250px}}.repository.file.list #repo-files-table td.age{width:120px}.repository.file.list #repo-files-table td .truncate{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;padding-top:8px;padding-bottom:8px}.repository.file.list #repo-files-table td a{padding-top:8px;padding-bottom:8px}.repository.file.list #repo-files-table td .at{margin-left:3px;margin-right:3px}.repository.file.list #repo-files-table td>*{vertical-align:middle}.repository.file.list #repo-files-table td.message .isSigned{cursor:default}.repository.file.list #repo-files-table tr:last-of-type td:first-child{border-bottom-left-radius:var(--border-radius)}.repository.file.list #repo-files-table tr:last-of-type td:last-child{border-bottom-right-radius:var(--border-radius)}.repository.file.list #repo-files-table tr:hover{background-color:#ffe}.repository.file.list #repo-files-table tr.has-parent a{display:inline-block;padding-top:8px;padding-bottom:8px;width:calc(100% - 1.25rem)}.repository.file.list #repo-files-table .jumpable-path{color:var(--color-text-light-2)}.repository.file.list .non-diff-file-content .header .icon{font-size:1em}.repository.file.list .non-diff-file-content .header .small.icon{font-size:.75em}.repository.file.list .non-diff-file-content .header .tiny.icon{font-size:.5em}.repository.file.list .non-diff-file-content .header .file-info{font-size:13px}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon{line-height:1;padding:10px 8px;vertical-align:middle;color:var(--color-text)}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon:hover{color:var(--color-primary)}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon-danger:hover{color:var(--color-red)}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon.disabled{color:inherit;opacity:var(--opacity-disabled);cursor:default}.repository.file.list .non-diff-file-content .view-raw{padding:5px}.repository.file.list .non-diff-file-content .view-raw>*{max-width:100%;border:1px solid var(--color-secondary)}.repository.file.list .non-diff-file-content .view-raw img{margin:1rem 0;border-radius:0;object-fit:contain}.repository.file.list .non-diff-file-content .plain-text{padding:1em 2em}.repository.file.list .non-diff-file-content .plain-text pre{word-break:break-word;white-space:pre-wrap}.repository.file.list .non-diff-file-content .csv{overflow-x:auto;padding:0!important}.repository.file.list .non-diff-file-content pre{overflow:auto}.repository.file.list .sidebar{padding-left:0}.repository.file.list .sidebar .svg{width:16px}.repository.file.editor .treepath{width:100%}.repository.file.editor .treepath input{vertical-align:middle;box-shadow:#00000013 0 1px 2px inset;width:inherit;padding:7px 8px;margin-right:5px}.repository.file.editor .tabular.menu .svg{margin-right:5px}.repository.file.editor .commit-form-wrapper{padding-left:64px}.repository.file.editor .commit-form-wrapper .commit-avatar{float:left;margin-left:-64px;width:3em;height:auto}.repository.file.editor .commit-form-wrapper .commit-form{position:relative;padding:15px;margin-bottom:10px;border:1px solid var(--color-secondary);background:var(--color-box-body);border-radius:3px}.repository.file.editor .commit-form-wrapper .commit-form:before,.repository.file.editor .commit-form-wrapper .commit-form:after{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.file.editor .commit-form-wrapper .commit-form:before{border-right-color:var(--color-secondary);border-width:9px;margin-top:-9px}.repository.file.editor .commit-form-wrapper .commit-form:after{border-right-color:var(--color-box-header);border-width:8px;margin-top:-8px}.repository.file.editor .commit-form-wrapper .commit-form:after{border-right-color:var(--color-box-body)}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .branch-name{display:inline-block;padding:2px 4px;font:12px var(--fonts-monospace);color:var(--color-text);background:var(--color-secondary);border-radius:3px;margin:0 2px}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input{position:relative;margin-left:25px}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input input{width:240px!important;padding-left:26px!important}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .octicon-git-branch{position:absolute;top:9px;left:10px;color:#b0c4ce}.repository.options #interval{width:100px!important;min-width:100px}.repository.options .danger .item{padding:20px 15px}.repository.options .danger .ui.divider{margin:0}.repository .comment textarea{max-height:none!important}.repository.new.issue .comment.form .comment .avatar{width:3em}.repository.new.issue .comment.form .content{margin-left:4em}.repository.new.issue .comment.form .content:before,.repository.new.issue .comment.form .content:after{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.new.issue .comment.form .content:before{border-right-color:var(--color-secondary);border-width:9px;margin-top:-9px}.repository.new.issue .comment.form .content:after{border-right-color:var(--color-box-header);border-width:8px;margin-top:-8px}.repository.new.issue .comment.form .content:after{border-right-color:var(--color-box-body)}.repository.new.issue .comment.form .content .markup{font-size:14px}.repository.new.issue .comment.form .metas{min-width:220px}.repository.new.issue .comment.form .metas .filter.menu{max-height:300px;overflow-x:auto}.repository.view.issue .instruct-toggle{display:inline-block}.repository.view.issue .title{padding-bottom:0!important}.repository.view.issue .title .issue-title{margin-bottom:.5rem}.repository.view.issue .title .issue-title.edit-active{display:flex;align-items:center}.repository.view.issue .title .issue-title.edit-active h1{display:flex;width:100%}@media (max-width: 767px){.repository.view.issue .title .issue-title.edit-active{flex-direction:column}.repository.view.issue .title .issue-title.edit-active h1{margin-right:0;margin-bottom:1rem;padding-right:0}.repository.view.issue .title .issue-title.edit-active h1 .ui.input input{width:calc(100% - 2rem)}.repository.view.issue .title .issue-title.edit-active .edit-buttons{padding-bottom:1rem;width:100%}.repository.view.issue .title .issue-title.edit-active .edit-buttons .button{width:100%;margin-right:.5rem}.repository.view.issue .title .issue-title.edit-active .edit-buttons .button:last-child{margin-right:0}}.repository.view.issue .title .issue-title h1{font-weight:300;font-size:2.3rem;margin:0;padding-right:.5rem}.repository.view.issue .title .issue-title h1 .ui.input{font-size:.5em;width:100%}.repository.view.issue .title .issue-title h1 .ui.input input{font-size:1.5em;padding:6px 1rem}.repository.view.issue .title .issue-title .edit-button{float:right;padding-left:1rem}.repository.view.issue .title .issue-title .edit-buttons{display:flex}.repository.view.issue .title .issue-title .index{color:var(--color-text-light-2)}.repository.view.issue .title .issue-title .label{margin-right:10px}.repository.view.issue .title .issue-title .edit-zone{margin-top:10px}.repository.view.issue .pull-desc code{color:var(--color-primary)}.repository.view.issue .pull-desc a[data-clipboard-text]{cursor:pointer}.repository.view.issue .pull-desc a[data-clipboard-text] svg{vertical-align:middle;position:relative;top:-2px;right:1px}.repository.view.issue .pull.tabular.menu{margin-bottom:1rem}.repository.view.issue .pull.tabular.menu .svg{margin-right:5px}.repository.view.issue .pull .merge.box .avatar{margin-left:10px;margin-top:10px}.repository.view.issue .pull .merge.box .branch-update.grid .row{padding-bottom:1rem}.repository.view.issue .pull .merge.box .branch-update.grid .row .icon{margin-top:1.1rem}.repository.view.issue .pull .review-item{display:flex;justify-content:space-between;align-items:center}.repository.view.issue .pull .review-item .review-item-left,.repository.view.issue .pull .review-item .review-item-right{display:flex;align-items:center}.repository.view.issue .pull .review-item .text{margin:.3em 0 .5em .5em}.repository.view.issue .pull .review-item .type-icon{align-self:flex-start;margin-right:1em}.repository.view.issue .pull .review-item .type-icon i{line-height:1.8em}.repository.view.issue .pull .review-item .divider{margin:.5rem 0}.repository.view.issue .pull .review-item .review-content{padding:1em 0 1em 3.8em}.repository.view.issue .comment-list:not(.prevent-before-timeline):before{display:block;content:"";position:absolute;margin-top:12px;margin-bottom:14px;top:0;bottom:0;left:96px;width:2px;background-color:var(--color-timeline);z-index:-1}.repository.view.issue .comment-list .timeline{position:relative;display:block;margin-left:40px;padding-left:16px}.repository.view.issue .comment-list .timeline:before{display:block;content:"";position:absolute;margin-top:12px;margin-bottom:14px;top:0;bottom:0;left:30px;width:2px;background-color:var(--color-timeline);z-index:-1}.repository.view.issue .comment-list .timeline-item,.repository.view.issue .comment-list .timeline-item-group{padding:12px 0}.repository.view.issue .comment-list .timeline-item-group .timeline-item{padding-top:8px;padding-bottom:8px}.repository.view.issue .comment-list .timeline-item{margin-left:16px;position:relative}.repository.view.issue .comment-list .timeline-item .timeline-avatar{position:absolute;left:-72px}.repository.view.issue .comment-list .timeline-item .timeline-avatar img{width:40px!important;height:40px!important}.repository.view.issue .comment-list .timeline-item .inline-timeline-avatar{display:none}.repository.view.issue .comment-list .timeline-item .avatar.image,.repository.view.issue .comment-list .timeline-item .avatar.image img{width:20px;height:20px;margin:0 .25rem;vertical-align:middle}.repository.view.issue .comment-list .timeline-item:first-child:not(.commit){padding-top:0!important}.repository.view.issue .comment-list .timeline-item:last-child:not(.commit){padding-bottom:0!important}.repository.view.issue .comment-list .timeline-item .badge.badge-commit{border-color:transparent;background:radial-gradient(var(--color-body) 40%,transparent 40%) no-repeat}.repository.view.issue .comment-list .timeline-item .badge{width:34px;height:34px;background-color:var(--color-timeline);border-radius:50%;display:flex;float:left;margin-left:-33px;margin-right:8px;color:var(--color-text);align-items:center;justify-content:center}.repository.view.issue .comment-list .timeline-item .badge .svg{width:22px;height:22px;padding:3px}.repository.view.issue .comment-list .timeline-item .badge .svg.octicon-comment{margin-top:2px}.repository.view.issue .comment-list .timeline-item.comment>.content{margin-left:-16px}.repository.view.issue .comment-list .timeline-item.event>.text{line-height:32px;vertical-align:middle}.repository.view.issue .comment-list .timeline-item.commits-list{padding-left:15px;padding-top:0}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit{line-height:34px;clear:both}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit>.avatar.image,.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit>.avatar.image img{position:relative;top:-2px}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label{margin:0;border:1px solid var(--color-light-border)}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isWarning{border:1px solid #db2828;background:rgba(219,40,40,.1)}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isWarning .shortsha{display:inline-block;padding-top:1px}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isWarning:hover{background:rgba(219,40,40,.3)!important}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isVerified{border:1px solid #21ba45;background:rgba(33,186,69,.1)}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isVerified .shortsha{display:inline-block;padding-top:1px}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isVerified:hover{background:rgba(33,186,69,.3)!important}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isVerifiedUntrusted{border:1px solid #fbbd08;background:rgba(251,189,8,.1)}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isVerifiedUntrusted .shortsha{display:inline-block;padding-top:1px}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isVerifiedUntrusted:hover{background:rgba(251,189,8,.3)!important}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isVerifiedUnmatched{border:1px solid #f2711c;background:rgba(242,113,28,.1)}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isVerifiedUnmatched .shortsha{display:inline-block;padding-top:1px}.repository.view.issue .comment-list .timeline-item.commits-list .singular-commit .shabox .sha.label.isSigned.isVerifiedUnmatched:hover{background:rgba(242,113,28,.3)!important}.repository.view.issue .comment-list .timeline-item.event>.commit-status-link{float:right;margin-right:8px;margin-top:4px}.repository.view.issue .comment-list .timeline-item .author{font-weight:600}.repository.view.issue .comment-list .timeline-item .comment-form-reply .footer{padding-bottom:1em}.repository.view.issue .comment-list .ui.comments{max-width:100%}.repository.view.issue .comment-list .ui.comments .avatar{margin-right:.5rem}.repository.view.issue .comment-list .comment>.content>div:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.repository.view.issue .comment-list .comment>.content>div:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.repository.view.issue .comment-list .comment .comment-container{border:1px solid var(--color-secondary);border-radius:var(--border-radius)}@media (max-width: 767px){.repository.view.issue .comment-list .comment .content .form .button{width:100%;margin:0}.repository.view.issue .comment-list .comment .content .form .button:not(:last-child){margin-bottom:1rem}}.repository.view.issue .comment-list .comment .merge-section{background-color:var(--color-box-body)}.repository.view.issue .comment-list .comment .merge-section .item-section{display:flex;align-items:center;justify-content:space-between;padding:0;margin-top:-.25rem;margin-bottom:-.25rem}@media (max-width: 767px){.repository.view.issue .comment-list .comment .merge-section .item-section{align-items:flex-start;flex-direction:column}}.repository.view.issue .comment-list .comment .merge-section .divider{margin-left:-1rem;margin-right:-1rem}.repository.view.issue .comment-list .comment .merge-section.no-header:before,.repository.view.issue .comment-list .comment .merge-section.no-header:after{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.view.issue .comment-list .comment .merge-section.no-header:before{border-right-color:var(--color-secondary);border-width:9px;margin-top:-9px}.repository.view.issue .comment-list .comment .merge-section.no-header:after{border-right-color:var(--color-box-header);border-width:8px;margin-top:-8px}.repository.view.issue .comment-list .comment .merge-section.no-header:after{border-right-color:var(--color-box-body)}.repository.view.issue .comment-list .comment .markup{font-size:14px}.repository.view.issue .comment-list .comment .no-content{color:var(--color-text-light-2);font-style:italic}.repository.view.issue .comment-list .comment .ui.form .field:first-child{clear:none}.repository.view.issue .comment-list .comment .ui.form .field.footer{overflow:hidden}.repository.view.issue .comment-list .comment .ui.form .field .tab.markup{min-height:5rem}.repository.view.issue .comment-list .comment .ui.form textarea{height:200px;font-family:var(--fonts-monospace)}.repository.view.issue .comment-list .comment .edit.buttons{margin-top:10px}.repository.view.issue .comment-list .code-comment{border:1px solid transparent;padding:.25rem .5rem;margin:0}.repository.view.issue .comment-list .code-comment .content{border:none!important}.repository.view.issue .comment-list .code-comment .comment-header{background:transparent;border-bottom:0!important;padding:0!important}.repository.view.issue .comment-list .code-comment .comment-header:after,.repository.view.issue .comment-list .code-comment .comment-header:before{display:none}.repository.view.issue .comment-list .code-comment .comment-content{margin-left:36px}.repository.view.issue .comment-list .code-comment .avatar.image{width:28px;height:28px}.repository.view.issue .comment-list .comment-code-cloud .segment.reactions{margin-top:16px!important;margin-bottom:-8px!important;border-top:none!important}.repository.view.issue .comment-list .comment-code-cloud .segment.reactions .ui.label{border:1px solid;padding:6px 10px!important;margin:0 2px;border-radius:var(--border-radius);border-color:var(--color-secondary-dark-1)!important}.repository.view.issue .comment-list .comment-code-cloud .segment.reactions .ui.label.basic.primary{background-color:var(--color-reaction-active-bg)!important;border-color:var(--color-primary-alpha-80)!important}.repository.view.issue .comment-list .comment-code-cloud button.comment-form-reply{margin:0}.repository.view.issue .comment-list .event{padding-left:15px}.repository.view.issue .comment-list .event .detail{font-size:.9rem;margin-top:5px;margin-left:8px}.repository.view.issue .comment-list .event .segments{box-shadow:none}.repository.view.issue .ui.depending .item.is-closed .title{text-decoration:line-through}.repository .comment.form .ui.comments{margin-top:-12px;max-width:100%}.repository .comment.form .content .field:first-child{clear:none}.repository .comment.form .content .form:before,.repository .comment.form .content .form:after{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository .comment.form .content .form:before{border-right-color:var(--color-secondary);border-width:9px;margin-top:-9px}.repository .comment.form .content .form:after{border-right-color:var(--color-box-header);border-width:8px;margin-top:-8px}.repository .comment.form .content .form:after{border-right-color:var(--color-box-body)}.repository .comment.form .content textarea{height:200px;font-family:var(--fonts-monospace)}.repository .comment.form .content .CodeMirror-scroll{max-height:85vh}.repository .milestone.list{list-style:none;padding-top:15px}.repository .milestone.list>.item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed var(--color-secondary)}.repository .milestone.list>.item progress{width:200px;height:16px}.repository .milestone.list>.item .meta{color:var(--color-text-light-2);padding-top:5px}.repository .milestone.list>.item .meta .issue-stats .svg{padding-left:5px}.repository .milestone.list>.item .meta .overdue{color:var(--color-red)}.repository .milestone.list>.item .operate{margin-top:-15px}.repository .milestone.list>.item .operate>a{font-size:15px;padding-top:5px;padding-right:10px;color:var(--color-text-light-2)}.repository .milestone.list>.item .operate>a:hover{color:var(--color-text)}.repository .milestone.list>.item .content{padding-top:10px}.repository.new.milestone textarea{height:200px}.repository.compare.pull .show-form-container{text-align:left}.repository.compare.pull .choose.branch .svg{margin-right:10px}.repository.compare.pull .comment.form .content:before,.repository.compare.pull .comment.form .content:after{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.compare.pull .comment.form .content:before{border-right-color:var(--color-secondary);border-width:9px;margin-top:-9px}.repository.compare.pull .comment.form .content:after{border-right-color:var(--color-box-header);border-width:8px;margin-top:-8px}.repository.compare.pull .comment.form .content:after{border-right-color:var(--color-box-body)}.repository.compare.pull .pullrequest-form{margin-bottom:1.5rem}.repository.compare.pull .markup{font-size:14px}.repository.compare.pull .title .issue-title{margin-bottom:.5rem}.repository.compare.pull .title .issue-title .index{color:var(--color-text-light-2)}.repository .filter.dropdown .menu{margin-top:1px!important}.repository.branches .commit-divergence .bar-group{position:relative;float:left;padding-bottom:6px;width:50%;max-width:90px}.repository.branches .commit-divergence .bar-group:last-child{border-left:1px solid var(--color-secondary-dark-2)}.repository.branches .commit-divergence .count{margin:0 3px}.repository.branches .commit-divergence .count.count-ahead{text-align:left}.repository.branches .commit-divergence .count.count-behind{text-align:right}.repository.branches .commit-divergence .bar{height:4px;position:absolute;background-color:var(--color-secondary-dark-2)}.repository.branches .commit-divergence .bar.bar-behind{right:0}.repository.branches .commit-divergence .bar.bar-ahead{left:0}.repository.commits .header .search input{font-weight:400;padding:5px 10px}.repository #commits-table thead th:first-of-type{padding-left:15px}.repository #commits-table thead .sha{width:200px}.repository #commits-table thead .shatd{text-align:center}.repository #commits-table td.sha .sha.label{margin:0}.repository #commits-table td.message{text-overflow:unset}.repository #commits-table.ui.basic.striped.table tbody tr:nth-child(2n){background-color:#00000005!important}.repository #commits-table td.sha .sha.label,.repository #repo-files-table .sha.label,.repository #rev-list .sha.label,.repository .timeline-item.commits-list .singular-commit .sha.label{border:1px solid var(--color-light-border)}.repository #commits-table td.sha .sha.label .ui.signature.avatar,.repository #repo-files-table .sha.label .ui.signature.avatar,.repository #rev-list .sha.label .ui.signature.avatar,.repository .timeline-item.commits-list .singular-commit .sha.label .ui.signature.avatar{height:16px;margin-bottom:0;width:16px}.repository #commits-table td.sha .sha.label .detail.icon,.repository #repo-files-table .sha.label .detail.icon,.repository #rev-list .sha.label .detail.icon,.repository .timeline-item.commits-list .singular-commit .sha.label .detail.icon{background:var(--color-light);margin:-6px -10px -4px 0;padding:5px 4px 5px 6px;border-left:1px solid var(--color-light-border);border-top:0;border-right:0;border-bottom:0;border-top-left-radius:0;border-bottom-left-radius:0}.repository #commits-table td.sha .sha.label .detail.icon img,.repository #repo-files-table .sha.label .detail.icon img,.repository #rev-list .sha.label .detail.icon img,.repository .timeline-item.commits-list .singular-commit .sha.label .detail.icon img{margin-right:0}.repository #commits-table td.sha .sha.label .detail.icon .svg,.repository #repo-files-table .sha.label .detail.icon .svg,.repository #rev-list .sha.label .detail.icon .svg,.repository .timeline-item.commits-list .singular-commit .sha.label .detail.icon .svg{margin:0 .25em 0 0}.repository #commits-table td.sha .sha.label .detail.icon>div,.repository #repo-files-table .sha.label .detail.icon>div,.repository #rev-list .sha.label .detail.icon>div,.repository .timeline-item.commits-list .singular-commit .sha.label .detail.icon>div{display:flex;align-items:center}.repository #commits-table td.sha .sha.label.isSigned.isWarning,.repository #repo-files-table .sha.label.isSigned.isWarning,.repository #rev-list .sha.label.isSigned.isWarning,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isWarning{border:1px solid #db2828;background:rgba(219,40,40,.1)}.repository #commits-table td.sha .sha.label.isSigned.isWarning .shortsha,.repository #repo-files-table .sha.label.isSigned.isWarning .shortsha,.repository #rev-list .sha.label.isSigned.isWarning .shortsha,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isWarning .shortsha{display:inline-block;padding-top:1px}.repository #commits-table td.sha .sha.label.isSigned.isWarning .detail.icon,.repository #repo-files-table .sha.label.isSigned.isWarning .detail.icon,.repository #rev-list .sha.label.isSigned.isWarning .detail.icon,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isWarning .detail.icon{border-left:1px solid #db2828;color:#db2828}.repository #commits-table td.sha .sha.label.isSigned.isWarning:hover,.repository #repo-files-table .sha.label.isSigned.isWarning:hover,.repository #rev-list .sha.label.isSigned.isWarning:hover,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isWarning:hover{background:rgba(219,40,40,.3)!important}.repository #commits-table td.sha .sha.label.isSigned.isVerified,.repository #repo-files-table .sha.label.isSigned.isVerified,.repository #rev-list .sha.label.isSigned.isVerified,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerified{border:1px solid #21ba45;background:rgba(33,186,69,.1)}.repository #commits-table td.sha .sha.label.isSigned.isVerified .shortsha,.repository #repo-files-table .sha.label.isSigned.isVerified .shortsha,.repository #rev-list .sha.label.isSigned.isVerified .shortsha,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerified .shortsha{display:inline-block;padding-top:1px}.repository #commits-table td.sha .sha.label.isSigned.isVerified .detail.icon,.repository #repo-files-table .sha.label.isSigned.isVerified .detail.icon,.repository #rev-list .sha.label.isSigned.isVerified .detail.icon,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerified .detail.icon{border-left:1px solid #21ba45;color:#21ba45}.repository #commits-table td.sha .sha.label.isSigned.isVerified:hover,.repository #repo-files-table .sha.label.isSigned.isVerified:hover,.repository #rev-list .sha.label.isSigned.isVerified:hover,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerified:hover{background:rgba(33,186,69,.3)!important}.repository #commits-table td.sha .sha.label.isSigned.isVerifiedUntrusted,.repository #repo-files-table .sha.label.isSigned.isVerifiedUntrusted,.repository #rev-list .sha.label.isSigned.isVerifiedUntrusted,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerifiedUntrusted{border:1px solid #fbbd08;background:rgba(251,189,8,.1)}.repository #commits-table td.sha .sha.label.isSigned.isVerifiedUntrusted .shortsha,.repository #repo-files-table .sha.label.isSigned.isVerifiedUntrusted .shortsha,.repository #rev-list .sha.label.isSigned.isVerifiedUntrusted .shortsha,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerifiedUntrusted .shortsha{display:inline-block;padding-top:1px}.repository #commits-table td.sha .sha.label.isSigned.isVerifiedUntrusted .detail.icon,.repository #repo-files-table .sha.label.isSigned.isVerifiedUntrusted .detail.icon,.repository #rev-list .sha.label.isSigned.isVerifiedUntrusted .detail.icon,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerifiedUntrusted .detail.icon{border-left:1px solid #fbbd08;color:#fbbd08}.repository #commits-table td.sha .sha.label.isSigned.isVerifiedUntrusted:hover,.repository #repo-files-table .sha.label.isSigned.isVerifiedUntrusted:hover,.repository #rev-list .sha.label.isSigned.isVerifiedUntrusted:hover,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerifiedUntrusted:hover{background:rgba(251,189,8,.3)!important}.repository #commits-table td.sha .sha.label.isSigned.isVerifiedUnmatched,.repository #repo-files-table .sha.label.isSigned.isVerifiedUnmatched,.repository #rev-list .sha.label.isSigned.isVerifiedUnmatched,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerifiedUnmatched{border:1px solid #f2711c;background:rgba(242,113,28,.1)}.repository #commits-table td.sha .sha.label.isSigned.isVerifiedUnmatched .shortsha,.repository #repo-files-table .sha.label.isSigned.isVerifiedUnmatched .shortsha,.repository #rev-list .sha.label.isSigned.isVerifiedUnmatched .shortsha,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerifiedUnmatched .shortsha{display:inline-block;padding-top:1px}.repository #commits-table td.sha .sha.label.isSigned.isVerifiedUnmatched .detail.icon,.repository #repo-files-table .sha.label.isSigned.isVerifiedUnmatched .detail.icon,.repository #rev-list .sha.label.isSigned.isVerifiedUnmatched .detail.icon,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerifiedUnmatched .detail.icon{border-left:1px solid #f2711c;color:#f2711c}.repository #commits-table td.sha .sha.label.isSigned.isVerifiedUnmatched:hover,.repository #repo-files-table .sha.label.isSigned.isVerifiedUnmatched:hover,.repository #rev-list .sha.label.isSigned.isVerifiedUnmatched:hover,.repository .timeline-item.commits-list .singular-commit .sha.label.isSigned.isVerifiedUnmatched:hover{background:rgba(242,113,28,.3)!important}.repository .data-table{width:100%}.repository .data-table tr{border-top:0}.repository .data-table td,.repository .data-table th{padding:5px!important;overflow:hidden;font-size:12px;text-align:left;white-space:nowrap;border:1px solid var(--color-secondary)}.repository .data-table td{white-space:pre-line}.repository .data-table th{font-weight:600;background:var(--color-box-header);border-top:0}.repository .data-table td.added,.repository .data-table th.added,.repository .data-table tr.added{background-color:var(--color-diff-added-row-bg)!important}.repository .data-table td.removed,.repository .data-table th.removed,.repository .data-table tr.removed{background-color:var(--color-diff-removed-row-bg)!important}.repository .data-table td.moved,.repository .data-table th.moved,.repository .data-table tr.moved{background-color:var(--color-diff-moved-row-bg)!important}.repository .data-table tbody.section{border-top:2px solid var(--color-secondary)}.repository .data-table .line-num{width:1%;min-width:50px;font-family:monospace;line-height:20px;color:var(--color-secondary-dark-2);white-space:nowrap;vertical-align:top;cursor:pointer;text-align:right;background:var(--color-body);border:0}.repository .diff-detail-box{padding:7px 0;background:var(--color-body);line-height:30px}@media (max-width: 991px){.repository .diff-detail-box{flex-direction:column;align-items:flex-start}}@media (max-width: 480px){.repository .diff-detail-box{flex-wrap:wrap}}.repository .diff-detail-box.sticky{position:sticky;top:0;z-index:8;border-bottom:1px solid var(--color-secondary);padding-left:2px;padding-right:2px}.repository .diff-detail-box>div:after{clear:both;content:"";display:block}.repository .diff-detail-box .diff-detail-stats strong{margin-left:.25rem;margin-right:.25rem}@media (max-width: 480px){.repository .diff-detail-box .diff-detail-stats{font-size:0;line-height:1.6rem}.repository .diff-detail-box .diff-detail-stats strong{font-size:1rem}}.repository .diff-detail-box .diff-detail-actions>*{margin-right:0}.repository .diff-detail-box .diff-detail-actions>*+*{margin-left:.25rem}@media (max-width: 480px){.repository .diff-detail-box .diff-detail-actions{padding-top:.25rem}.repository .diff-detail-box .diff-detail-actions .ui.button:not(.btn-submit){padding-left:.5rem;padding-right:.5rem;display:flex;flex-wrap:wrap;justify-content:center;text-align:center}}.repository .diff-detail-box span.status{display:inline-block;width:12px;height:12px;margin-right:8px;vertical-align:middle}.repository .diff-detail-box span.status.modify{background-color:var(--color-yellow)}.repository .diff-detail-box span.status.add{background-color:var(--color-green)}.repository .diff-detail-box span.status.del{background-color:var(--color-red)}.repository .diff-detail-box span.status.rename{background-color:var(--color-teal)}.repository .diff-box .header:not(.resolved-placeholder){display:flex;align-items:center}.repository .diff-box .header:not(.resolved-placeholder) .file{flex:1;word-break:break-all}.repository .diff-box .header:not(.resolved-placeholder) .button{padding:8px 12px;flex:0 0 auto;margin-top:-8px;margin-bottom:-8px;margin-right:0}.repository .diff-box .resolved-placeholder{display:flex;align-items:center}.repository .diff-box .resolved-placeholder .button{padding:8px 12px}.repository .diff-file-box .header{background-color:var(--color-box-header)}.repository .diff-file-box .file-body.file-code{background:var(--color-code-bg)}.repository .diff-file-box .file-body.file-code .lines-num{text-align:right;color:var(--color-text-light);width:1%;min-width:50px}.repository .diff-file-box .file-body.file-code .lines-num span.fold{display:block;text-align:center}.repository .diff-file-box .code-diff{font-size:12px}.repository .diff-file-box .code-diff td{padding:0 0 0 10px!important;border-top:0}.repository .diff-file-box .code-diff .lines-num{padding:0 5px!important}.repository .diff-file-box .code-diff .tag-code .lines-num,.repository .diff-file-box .code-diff .tag-code td{padding:0!important}.repository .diff-file-box .code-diff tbody tr td.halfwidth{width:49%}.repository .diff-file-box .code-diff tbody tr td.center{text-align:center}.repository .diff-file-box .code-diff tbody tr [data-line-num]:before{content:attr(data-line-num);text-align:right}.repository .diff-file-box .code-diff tbody tr .lines-type-marker{width:10px;min-width:10px}.repository .diff-file-box .code-diff tbody tr [data-type-marker]:before{content:attr(data-type-marker);text-align:right;display:inline-block}.repository .diff-file-box .code-diff-split .tag-code .lines-code code.code-inner{padding-left:10px!important}.repository .diff-file-box .code-diff-split table,.repository .diff-file-box .code-diff-split tbody{width:100%}.repository .diff-file-box.file-content{clear:right}.repository .diff-file-box.file-content img{max-width:100%;padding:0;border-radius:0}.repository .diff-file-box.file-content img.emoji{padding:0}.repository .diff-file-box .ui.bottom.attached.table.segment{padding-top:5px;padding-bottom:5px}.repository .diff-stats{clear:both;margin-bottom:5px;max-height:400px;overflow:auto;padding-left:0}.repository .diff-stats li{list-style:none;padding-bottom:4px;margin-bottom:4px;padding-left:6px}.repository .diff-stats li+li{border-top:1px solid var(--color-secondary)}.repository .repo-search-result{padding-top:10px;padding-bottom:10px}.repository .repo-search-result .lines-num a{color:inherit}.repository.quickstart .guide .item{padding:1em}.repository.quickstart .guide .item small{font-weight:400}.repository.quickstart .guide .clone.button:first-child{border-radius:var(--border-radius) 0 0 var(--border-radius)}.repository.quickstart .guide .ui.action.small.input{width:100%}.repository.quickstart .guide #repo-clone-url{border-radius:0;padding:5px 10px;font-size:1.2em;line-height:1.4}.repository.release #release-list{border-top:1px solid var(--color-secondary);margin-top:20px;padding-top:15px}.repository.release #release-list .release-list-title{font-size:2rem;font-weight:400;margin-top:-6px}.repository.release #release-list>li{list-style:none}.repository.release #release-list>li .meta,.repository.release #release-list>li .detail{padding-top:30px;padding-bottom:40px}.repository.release #release-list>li .meta{text-align:right;position:relative}.repository.release #release-list>li .meta .label{margin-right:0}.repository.release #release-list>li .meta .tag:not(.icon){display:block;margin-top:15px}.repository.release #release-list>li .meta .commit{display:block;margin-top:10px}.repository.release #release-list>li .meta .choose{margin-top:15px}.repository.release #release-list>li .meta .choose .button{margin-right:0}.repository.release #release-list>li .detail{border-left:2px solid var(--color-secondary)}.repository.release #release-list>li .detail .author img{margin-bottom:-3px}.repository.release #release-list>li .detail .download>a .svg{margin-left:5px;margin-right:5px}.repository.release #release-list>li .detail .download .list{padding-left:0}.repository.release #release-list>li .detail .download .list li{list-style:none;display:block;padding:8px;border:1px solid var(--color-secondary);background:var(--color-light)}.repository.release #release-list>li .detail .download .list li a>.text.right{margin-right:5px}.repository.release #release-list>li .detail .download .list li+li{border-top:0}.repository.release #release-list>li .detail .download .list li:first-of-type{border-radius:var(--border-radius) 0 0 var(--border-radius)}.repository.release #release-list>li .detail .download .list li:last-of-type{border-radius:0 var(--border-radius) var(--border-radius) 0}.repository.release #release-list>li .detail .dot{width:9px;height:9px;background-color:#ddd;z-index:9;position:absolute;display:block;left:-5px;top:40px;border-radius:6px;border:1px solid #ffffff}.repository.release #tags-table .tag{padding:8px 12px}.repository.release #tags-table .release-tag-name{font-size:20px;font-weight:400}.repository.new.release .target{min-width:500px}.repository.new.release .target #tag-name{margin-top:-4px}.repository.new.release .target .at{margin-left:-5px;margin-right:5px}.repository.new.release .target .selection.dropdown{padding-top:10px;padding-bottom:10px}.repository.new.release .prerelease.field{margin-bottom:0}@media (max-width: 438px){.repository.new.release .field button,.repository.new.release .field input{width:100%}}@media (max-width: 767px){.repository.new.release .field button{margin-bottom:1em}}.repository.new.release .field .wrap_remove{height:38px}.repository.new.release .field .attachment_edit{width:450px!important}.repository.forks .list{margin-top:0}.repository.forks .list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px solid var(--color-secondary)}.repository.forks .list .item .ui.avatar{float:left;margin-right:5px}.repository.forks .list .item .link{padding-top:5px}.repository.packages .empty{padding-top:70px;padding-bottom:100px}.repository.packages .empty .svg{height:48px}.repository.packages .file-size{white-space:nowrap}.repository.wiki.start .ui.segment{padding-top:70px;padding-bottom:100px}.repository.wiki.start .ui.segment .svg{height:48px}.repository.wiki.new .ui.attached.tabular.menu.previewtabs{margin-bottom:15px}.repository.wiki.view>.markup{padding:15px 30px}.repository.wiki.view>.markup h1:first-of-type,.repository.wiki.view>.markup h2:first-of-type,.repository.wiki.view>.markup h3:first-of-type,.repository.wiki.view>.markup h4:first-of-type,.repository.wiki.view>.markup h5:first-of-type,.repository.wiki.view>.markup h6:first-of-type{margin-top:0}.repository.wiki .form .CodeMirror-scroll{max-height:85vh}@media (max-width: 767px){.repository.wiki .dividing.header .stackable.grid .button{margin-top:2px;margin-bottom:2px}}@media (max-width: 767px){.repository.wiki #clone-panel #repo-clone-url{width:160px}}.repository.settings.collaboration .collaborator.list{padding:0}.repository.settings.collaboration .collaborator.list>.item{margin:0;line-height:2em}.repository.settings.collaboration .collaborator.list>.item:not(:last-child){border-bottom:1px solid var(--color-secondary)}.repository.settings.collaboration #repo-collab-form #search-user-box .results{left:7px}.repository.settings.collaboration #repo-collab-form .ui.button{margin-left:5px;margin-top:-3px}.repository.settings.collaboration #repo-collab-team-form #search-team-box .results{left:7px}.repository.settings.collaboration #repo-collab-team-form .ui.button{margin-left:5px;margin-top:-3px}.repository.settings.branches .protected-branches .selection.dropdown{width:300px}.repository.settings.branches .protected-branches .item{border:1px solid var(--color-secondary);padding:10px 15px}.repository.settings.branches .protected-branches .item:not(:last-child){border-bottom:0}.repository.settings.branches .branch-protection .help{margin-left:26px;padding-top:0}.repository.settings.branches .branch-protection .fields{margin-left:20px;display:block}.repository.settings.branches .branch-protection .whitelist{margin-left:26px}.repository.settings.branches .branch-protection .whitelist .dropdown img{display:inline-block}.repository.settings.webhook .events .column{padding-bottom:0}.repository.settings.webhook .events .help{font-size:13px;margin-left:26px;padding-top:0}.repository .ui.attached.isSigned.isWarning{border-left:1px solid var(--color-error-border);border-right:1px solid var(--color-error-border)}.repository .ui.attached.isSigned.isWarning.top,.repository .ui.attached.isSigned.isWarning.message{border-top:1px solid var(--color-error-border)}.repository .ui.attached.isSigned.isWarning.message{box-shadow:none;background-color:var(--color-error-bg);color:var(--color-error-text)}.repository .ui.attached.isSigned.isWarning.message .ui.text{color:var(--color-error-text)}.repository .ui.attached.isSigned.isWarning:last-child,.repository .ui.attached.isSigned.isWarning.bottom{border-bottom:1px solid var(--color-error-border)}.repository .ui.attached.isSigned.isVerified{border-left:1px solid var(--color-success-border);border-right:1px solid var(--color-success-border)}.repository .ui.attached.isSigned.isVerified.top,.repository .ui.attached.isSigned.isVerified.message{border-top:1px solid var(--color-success-border)}.repository .ui.attached.isSigned.isVerified.message{box-shadow:none;background-color:var(--color-success-bg);color:var(--color-success-text)}.repository .ui.attached.isSigned.isVerified.message .pull-right{color:var(--color-text)}.repository .ui.attached.isSigned.isVerified.message .ui.text{color:var(--color-success-text)}.repository .ui.attached.isSigned.isVerified:last-child,.repository .ui.attached.isSigned.isVerified.bottom{border-bottom:1px solid var(--color-success-border)}.repository .ui.attached.isSigned.isVerifiedUntrusted,.repository .ui.attached.isSigned.isVerifiedUnmatched{border-left:1px solid var(--color-warning-border);border-right:1px solid var(--color-warning-border)}.repository .ui.attached.isSigned.isVerifiedUntrusted.top,.repository .ui.attached.isSigned.isVerifiedUnmatched.top,.repository .ui.attached.isSigned.isVerifiedUntrusted.message,.repository .ui.attached.isSigned.isVerifiedUnmatched.message{border-top:1px solid var(--color-warning-border)}.repository .ui.attached.isSigned.isVerifiedUntrusted.message,.repository .ui.attached.isSigned.isVerifiedUnmatched.message{box-shadow:none;background-color:var(--color-warning-bg);color:var(--color-warning-text)}.repository .ui.attached.isSigned.isVerifiedUntrusted.message .ui.text,.repository .ui.attached.isSigned.isVerifiedUnmatched.message .ui.text{color:var(--color-warning-text)}.repository .ui.attached.isSigned.isVerifiedUntrusted:last-child,.repository .ui.attached.isSigned.isVerifiedUnmatched:last-child,.repository .ui.attached.isSigned.isVerifiedUntrusted.bottom,.repository .ui.attached.isSigned.isVerifiedUnmatched.bottom{border-bottom:1px solid var(--color-warning-border)}.repository .ui.segment.sub-menu{padding:7px;line-height:0}.repository .ui.segment.sub-menu .list{width:100%;display:flex;align-items:center}.repository .ui.segment.sub-menu .list .item{width:100%;color:var(--color-text)}.repository .ui.segment.sub-menu .list .item:first-of-type{border-radius:var(--border-radius) 0 0 var(--border-radius);padding-left:.25rem}.repository .ui.segment.sub-menu .list .item:last-of-type{border-radius:0 var(--border-radius) var(--border-radius) 0;padding-right:.25rem}.repository .ui.segment.sub-menu .list .item a{color:var(--color-text)}.repository .ui.segment.sub-menu .list .item a:hover{color:var(--color-primary-light-2)}.repository .ui.segment.sub-menu .list .item.active{background:var(--color-secondary)}.repository .segment.reactions.dropdown .menu,.repository .select-reaction.dropdown .menu{right:0!important;left:auto!important;min-width:15em}.repository .segment.reactions.dropdown .menu>.header,.repository .select-reaction.dropdown .menu>.header{margin:.75rem 0 .5rem}.repository .segment.reactions.dropdown .menu>.item,.repository .select-reaction.dropdown .menu>.item{float:left;padding:.25rem!important;margin:.25rem;font-size:1.5em;width:39px;left:13px;border-radius:6px;display:flex;justify-content:center;align-items:center}.repository .segment.reactions.dropdown .menu>.item img.emoji,.repository .select-reaction.dropdown .menu>.item img.emoji{margin-right:0}.repository .segment.reactions.dropdown .menu>.item:hover,.repository .select-reaction.dropdown .menu>.item:hover{background:var(--color-primary)}.repository .segment.reactions{padding:0;display:flex;border:none!important;border-top:1px solid var(--color-secondary)!important;width:100%!important;max-width:100%!important;margin:0!important}.repository .segment.reactions .ui.label{max-height:40px;padding:10px 18px!important;display:flex!important;align-items:center;border:0;border-right:1px solid;border-radius:0;margin:0;font-size:14px;font-weight:400;border-color:var(--color-secondary)!important;background:var(--color-reaction-bg)}.repository .segment.reactions .ui.label.disabled{cursor:default;opacity:1}.repository .segment.reactions .ui.label.basic{color:var(--color-primary)!important}.repository .segment.reactions .ui.label.basic.primary{background-color:var(--color-reaction-active-bg)!important;border-color:var(--color-secondary)!important}.repository .segment.reactions .reaction-count{margin-left:.5rem}.repository .segment.reactions .select-reaction{display:flex;align-items:center;padding:0 14px}.repository .segment.reactions .select-reaction:not(.active) a{display:none}.repository .segment.reactions:hover .select-reaction a{display:block}.repository .ui.fluid.action.input .ui.search.action.input{flex:auto}.repository .repository-summary{box-shadow:none!important}.repository .repository-summary .segment.language-stats-details,.repository .repository-summary .segment.repository-summary{border-top:none;background:none}.repository .repository-summary .segment.language-stats-details .item{white-space:nowrap}.repository .repository-summary .segment.language-stats{padding:0;height:11px;display:flex;white-space:nowrap;width:100%;border-radius:0}@media (max-width: 767px){.repository .repository-summary .segment.language-stats{display:none}}.repository .repository-summary .segment.language-stats .bar{white-space:nowrap;border:0;padding:0;margin:0;height:100%}.repository .repository-menu{padding:0!important}.repository .repository-menu .item{padding-top:9px!important;padding-bottom:9px!important}.user-cards .list{padding:0;display:flex;flex-wrap:wrap}.user-cards .list .item{list-style:none;width:32%;margin:10px 10px 10px 0;padding-bottom:14px;float:left}.user-cards .list .item .avatar{width:48px;height:48px;float:left;display:block;margin-right:10px}.user-cards .list .item .name{margin-top:0;margin-bottom:0;font-weight:400}.user-cards .list .item .meta{margin-top:5px}#search-repo-box .results .result .image,#search-user-box .results .result .image{float:left;margin-right:8px;width:2em;height:2em}#search-repo-box .results .result .content,#search-user-box .results .result .content,#search-team-box .results .result .content{margin:6px 0}#issue-filters.hide{display:none}#issue-actions{margin-top:-1rem!important}#issue-actions.hide{display:none}.ui.menu .item>img:not(.ui){width:auto}.page.buttons{padding-top:15px}.commit-header-row{min-height:50px!important;padding-top:0!important;padding-bottom:0!important}.settings .content>.header,.settings .content .segment{box-shadow:0 1px 2px 0 var(--color-box-header)}.settings .list>.item:not(:first-child){border-top:1px solid var(--color-secondary);padding:1rem;margin:15px -1rem -1rem}.settings .list>.item>.svg{display:table-cell}.settings .list>.item>.svg+.content{display:table-cell;padding:0 0 0 .5em;vertical-align:top}.settings .list>.item .info{margin-top:10px}.settings .list>.item .info .tab.segment{border:0;padding:10px 0 0}.settings .list.key .meta{padding-top:5px;color:var(--color-text-light-2)}.settings .list.email>.item:not(:first-child){min-height:60px}.settings .list.collaborator>.item{padding:0}.ui.vertical.menu .header.item{font-size:1.1em;background:var(--color-box-header)}.comment:target .comment-container{border-color:var(--color-primary)!important;box-shadow:0 0 0 3px var(--color-primary-alpha-30)!important}.comment:target .header:before{border-right-color:var(--color-primary)!important;filter:drop-shadow(-3px 0 0 var(--color-primary-alpha-30))!important}.code-comment:target{border-color:var(--color-primary)!important;border-radius:var(--border-radius)!important;box-shadow:0 0 0 3px var(--color-primary-alpha-30)!important}.code-comment:target .content{box-shadow:none!important}.comment-header{border:none!important;background:var(--color-box-header);border-bottom:1px solid var(--color-secondary)!important;font-weight:400!important;padding:.5rem 1rem;margin:0!important;position:relative;color:var(--color-text-light-2);min-height:41px;background-color:var(--color-box-header);display:flex;justify-content:space-between;align-items:center}.comment-header:before,.comment-header:after{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.comment-header:before{border-right-color:var(--color-secondary);border-width:9px;margin-top:-9px}.comment-header:after{border-right-color:var(--color-box-header);border-width:8px;margin-top:-8px}.comment-header.arrow-top:before,.comment-header.arrow-top:after{transform:rotate(90deg)}.comment-header.arrow-top:before{top:-9px;left:6px}.comment-header.arrow-top:after{top:-8px;left:7px}.comment-header a{color:var(--color-text);text-decoration:none}.comment-header a:hover{color:var(--color-primary);text-decoration:none}.comment-header .actions a{margin-right:0!important;padding:.5rem!important}.comment-header-left>*+*,.comment-header-right>*+*{margin-left:.25rem}.comment-body{background:var(--color-box-body);border:none!important;width:100%!important;max-width:100%!important;margin:0!important}.edit-label.modal .form .column,.new-label.segment .form .column{padding-right:0}.edit-label.modal .form .buttons,.new-label.segment .form .buttons{margin-left:auto;padding-top:15px}.edit-label.modal .form .color.picker.column,.new-label.segment .form .color.picker.column{width:auto}.edit-label.modal .form .color.picker.column .color-picker,.new-label.segment .form .color.picker.column .color-picker{height:35px;width:auto;padding-left:30px}.edit-label.modal .form .minicolors-swatch.minicolors-sprite,.new-label.segment .form .minicolors-swatch.minicolors-sprite{top:10px;left:10px;width:15px;height:15px}#avatar-arrow:before,#avatar-arrow:after{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}#avatar-arrow:before{border-right-color:var(--color-secondary);border-width:9px;margin-top:-9px}#avatar-arrow:after{border-right-color:var(--color-box-header);border-width:8px;margin-top:-8px}#transfer-repo-modal .ui.message,#delete-repo-modal .ui.message,#delete-wiki-modal .ui.message,#convert-fork-repo-modal .ui.message,#convert-mirror-repo-modal .ui.message,#fork-repo-modal .ui.message{width:100%!important}.tab-size-1{tab-size:1!important;-moz-tab-size:1!important}.tab-size-2{tab-size:2!important;-moz-tab-size:2!important}.tab-size-3{tab-size:3!important;-moz-tab-size:3!important}.tab-size-4{tab-size:4!important;-moz-tab-size:4!important}.tab-size-5{tab-size:5!important;-moz-tab-size:5!important}.tab-size-6{tab-size:6!important;-moz-tab-size:6!important}.tab-size-7{tab-size:7!important;-moz-tab-size:7!important}.tab-size-8{tab-size:8!important;-moz-tab-size:8!important}.tab-size-9{tab-size:9!important;-moz-tab-size:9!important}.tab-size-10{tab-size:10!important;-moz-tab-size:10!important}.tab-size-11{tab-size:11!important;-moz-tab-size:11!important}.tab-size-12{tab-size:12!important;-moz-tab-size:12!important}.tab-size-13{tab-size:13!important;-moz-tab-size:13!important}.tab-size-14{tab-size:14!important;-moz-tab-size:14!important}.tab-size-15{tab-size:15!important;-moz-tab-size:15!important}.tab-size-16{tab-size:16!important;-moz-tab-size:16!important}.stats-table{display:table;width:100%}.stats-table .table-cell{display:table-cell}.stats-table .table-cell.tiny{height:.5em}.labels-list .label{margin:2px 0;display:inline-block!important;line-height:1.3em}.repo-button-row{margin-bottom:10px}.repo-button-row>*{margin-top:10px}.wiki .repo-button-row{margin-bottom:0}.wiki .repo-button-row>*{margin-top:0}.repo-button-row .button{padding:6px 10px!important;height:30px}.repo-button-row input{height:30px}tbody.commit-list{vertical-align:baseline}.message-wrapper{overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 50px);display:inline-block;vertical-align:middle}@media (max-width: 767px){tr.commit-list{width:100%}th .message-wrapper{display:block;max-width:calc(100vw - 70px)}}@media (min-width: 768px) and (max-width: 991px){tr.commit-list{width:723px}th .message-wrapper{max-width:280px}}@media (min-width: 992px) and (max-width: 1200px){tr.commit-list{width:933px}th .message-wrapper{max-width:490px}}@media (min-width: 1201px){tr.commit-list{width:1127px}th .message-wrapper{max-width:680px}}.commit-list .commit-status-link{display:inline-block;vertical-align:middle}.commit-body{white-space:pre-wrap;line-height:initial}.repository:not(.diff) .commit-body{margin:0}.repository:not(.diff) .timeline-item .commit-body{margin-left:40px}.git-notes.top{text-align:left}#topic_edit{margin-top:5px}#repo-topics{margin-top:5px;display:flex;align-items:center;flex-wrap:wrap}.repo-topic{font-weight:400!important;cursor:pointer;margin:2px!important}#new-dependency-drop-list.ui.selection.dropdown{min-width:0;width:100%;border-radius:4px 0 0 4px;border-right:0;white-space:nowrap}#new-dependency-drop-list .text{width:100%;overflow:hidden}#manage_topic{font-size:12px}.label+#manage_topic{margin-left:5px}.ui.small.label.topic{margin-bottom:4px}.repo-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;word-break:break-word}@media (max-width: 767px){.repo-header+.container{margin-top:7px}}.repo-buttons{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;word-break:keep-all}@media (max-width: 767px){.repo-buttons{margin-top:1em}}.repo-buttons .ui.labeled.button>.label:hover{color:var(--color-primary-light-2);background:var(--color-light)}.repo-buttons button[disabled]~.label{opacity:var(--opacity-disabled);color:var(--color-text-dark);background:var(--color-light-mimic-enabled)!important}.repo-buttons button[disabled]~.label:hover{color:var(--color-primary-dark-1)}.repo-buttons .ui.labeled.button{cursor:initial}.repo-buttons .ui.labeled.button>.label{border-left:0!important;margin:0!important}.repo-buttons .ui.labeled.button.disabled{pointer-events:inherit!important}.repo-buttons .ui.labeled.button.disabled>.label{color:var(--color-text-dark);background:var(--color-light-mimic-enabled)!important}.repo-buttons .ui.labeled.button.disabled>.label:hover{color:var(--color-primary-dark-1)}.repo-buttons .ui.labeled.button.disabled>.button{pointer-events:none!important}@media (max-width: 767px){.repo-buttons .ui.labeled.button .svg{display:none}}.tag-code{height:28px}.tag-code,.tag-code td{background-color:#f0f9ff;border-color:#f1f8ff!important;vertical-align:middle}.resolved-placeholder{font-weight:400!important;border:1px solid var(--color-secondary)!important;border-radius:var(--border-radius)!important;margin:4px!important}.resolved-placeholder+.comment-code-cloud{padding-top:0!important}td.blob-excerpt{background-color:#fafafa}.issue-keyword{border-bottom:1px dotted var(--color-text-light-3)!important}.issue-keyword:hover{border-bottom:none!important}.file-header{align-items:center;display:flex;justify-content:space-between;overflow-x:auto;padding:8px 12px!important}.file-info{display:flex;align-items:center}.file-info-entry{display:flex;align-items:center;width:max-content}.file-info-entry+.file-info-entry{border-left:1px solid currentcolor;margin-left:8px;padding-left:8px}.ui.message.unicode-escape-prompt{margin-bottom:0;border-radius:0;display:flex;flex-direction:column}.wiki-content-sidebar .ui.message.unicode-escape-prompt p,.wiki-content-footer .ui.message.unicode-escape-prompt p{display:none}.wiki-content-toc>ul>li{margin-bottom:4px}.wiki-content-toc ul{margin:0;list-style:none;padding-left:1em}.ui.buttons .unescape-button{border-top-right-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.webhook-info{padding:7px 12px;margin:10px 0;background-color:var(--color-markup-code-block);border:1px solid var(--color-secondary);border-radius:3px;font-size:13px;line-height:1.5;overflow:auto}.title_wip_desc{margin-top:1em}.sidebar-item-link{display:inline-flex;align-items:center}.diff-file-box[data-folded=true] .diff-file-body{display:none}.diff-file-box[data-folded=true] .diff-file-header{border-radius:var(--border-radius)!important}.diff-file-header-actions>*+*{margin-left:.5rem!important}.ui.attached.header.diff-file-header.sticky-2nd-row{position:sticky;top:46px;z-index:7}@media (min-width: 768px) and (max-width: 991px){.ui.attached.header.diff-file-header.sticky-2nd-row{top:77px}}@media (max-width: 767px){.ui.attached.header.diff-file-header.sticky-2nd-row{top:77px}}@media (max-width: 480px){.ui.attached.header.diff-file-header.sticky-2nd-row{position:static}}.diff-stats-bar{display:inline-block;background-color:var(--color-red);height:12px;width:40px}.diff-stats-bar .diff-stats-add-bar{background-color:var(--color-green);height:100%}.repository-summary-language-stats{height:48px;overflow:hidden}@media (max-width: 767px){.repository-summary-language-stats{height:auto}}.ui.form .right .ui.button{margin-left:.25em;margin-right:0}.removed-code{background:var(--color-diff-removed-word-bg)}.added-code{background:var(--color-diff-added-word-bg)}.code-diff-unified .del-code,.code-diff-unified .del-code td,.code-diff-split .del-code .lines-num-old,.code-diff-split .del-code .lines-escape-old,.code-diff-split .del-code .lines-type-marker-old,.code-diff-split .del-code .lines-code-old{background:var(--color-diff-removed-row-bg);border-color:var(--color-diff-removed-row-border)}.code-diff-unified .add-code,.code-diff-unified .add-code td,.code-diff-split .add-code .lines-num-new,.code-diff-split .add-code .lines-type-marker-new,.code-diff-split .add-code .lines-escape-new,.code-diff-split .add-code .lines-code-new,.code-diff-split .del-code .add-code.lines-num-new,.code-diff-split .del-code .add-code.lines-type-marker-new,.code-diff-split .del-code .add-code.lines-escape-new,.code-diff-split .del-code .add-code.lines-code-new{background:var(--color-diff-added-row-bg);border-color:var(--color-diff-added-row-border)}.code-diff-split .del-code .lines-num-new,.code-diff-split .del-code .lines-type-marker-new,.code-diff-split .del-code .lines-code-new,.code-diff-split .del-code .lines-escape-new,.code-diff-split .add-code .lines-num-old,.code-diff-split .add-code .lines-escape-old,.code-diff-split .add-code .lines-type-marker-old,.code-diff-split .add-code .lines-code-old{background:var(--color-diff-inactive)}.code-diff-split tbody tr td:nth-child(5){border-left:1px solid var(--color-secondary)}.repository .ui.menu.new-menu{background:none!important}@media (max-width: 1200px){.repository .ui.menu.new-menu:after{background:none!important}}.repository.migrate .card{transition:all .1s ease-in-out;box-shadow:none!important;border:1px solid var(--color-secondary);color:var(--color-text)}.repository.migrate .card:hover{transform:scale(105%);box-shadow:0 .5rem 1rem var(--color-shadow)!important}@media (max-width: 767px){.repository.file.list #repo-files-table .entry,.repository.file.list #repo-files-table .commit-list{align-items:center;display:flex!important;padding-top:4px;padding-bottom:4px}.repository.file.list #repo-files-table .entry td.age,.repository.file.list #repo-files-table .commit-list td.age,.repository.file.list #repo-files-table .entry th.age,.repository.file.list #repo-files-table .commit-list th.age{margin-left:auto}.repository.file.list #repo-files-table .entry td.message,.repository.file.list #repo-files-table .commit-list td.message,.repository.file.list #repo-files-table .entry span.commit-summary,.repository.file.list #repo-files-table .commit-list span.commit-summary{display:none!important}.issue-list-headers.ui[class].grid>div:nth-child(1){order:1;width:50%}.issue-list-headers.ui[class].grid>div:nth-child(2){order:3;width:100%}.issue-list-headers.ui[class].grid>div.column:not(.row):nth-child(3){order:2;width:50%}.repository.view.issue .comment-list .timeline,.repository.view.issue .comment-list .timeline-item{margin-left:0}.repository.view.issue .comment-list .timeline:before{left:14px}.repository.view.issue .comment-list .timeline .inline-timeline-avatar{display:flex;margin-bottom:auto}.repository.view.issue .comment-list .timeline .inline-timeline-avatar img.avatar.image{height:24px;width:24px}.repository.view.issue .comment-list .timeline .comment-header{padding-left:4px}.repository.view.issue .comment-list .timeline .comment-header:before,.repository.view.issue .comment-list .timeline .comment-header:after{content:unset}.repository.view.issue .comment-list .timeline .timeline-avatar,.repository.view.issue .comment-list .timeline .comment-header-right .role-label{display:none}.commit-header-row .ui.horizontal.list{width:100%;overflow-x:auto;margin-top:2px}.commit-header-row .ui.horizontal.list .item{align-items:center;display:flex}.commit-header-row .author{padding:3px 0}.commit-header h3{flex-basis:auto!important;margin-bottom:.5rem!important}.commits-table{flex-direction:column}.commits-table .commits-table-left{align-items:initial!important;margin-bottom:6px}.commits-table .commits-table-right form{display:flex;flex-wrap:wrap}.commits-table .commits-table-right form>div:nth-child(1){order:1}.commits-table .commits-table-right form>div:nth-child(2){order:3;margin-left:.5rem;margin-top:.5rem}.commits-table .commits-table-right form>button:nth-child(3){order:2;margin-left:.25rem}.commit-table{overflow-x:auto}.commit-table td.sha,.commit-table th.sha{display:none!important}.commit-table .commit-list span.message-wrapper{max-width:none}.commit-table .commit-list tr td:last-child{display:block;width:max-content}.commit-table .commit-list td.author{display:block;width:calc(100% + .5rem)}.commit-table .commit-list .copy-commit-sha{display:none!important}.comment-header,.comment-header .comment-header-left{flex-wrap:wrap}.comment-header .comment-header-right{margin-left:auto}}.branch-dropdown-button{max-width:340px;vertical-align:bottom!important}@media (min-width: 768px) and (max-width: 991px){.branch-dropdown-button{max-width:185px}}@media (max-width: 767px){.branch-dropdown-button{max-width:165px}}.repository.file.editor .tab[data-tab=write]{padding:0!important}.repository.file.editor .tab[data-tab=write] .editor-toolbar{border:0!important}.repository.file.editor .tab[data-tab=write] .CodeMirror{border-left:0;border-right:0;border-bottom:0}.editor-toolbar{opacity:1!important;border-color:var(--color-secondary)}.editor-toolbar.fullscreen{background:var(--color-body)}.editor-toolbar button{border:none!important;color:var(--color-text-light)}.editor-toolbar button:not(:hover){background-color:transparent!important}.editor-toolbar i.separator{border-left:none;border-right-color:var(--color-secondary)}.editor-toolbar button:hover{background:var(--color-hover)}.editor-toolbar button.active{background:var(--color-active)}.editor-toolbar:not(.fullscreen) .preview{display:none}.editor-toolbar.fullscreen .revert-to-textarea{display:none}.editor-preview{background-color:var(--color-body)}.editor-preview-side{border-color:var(--color-secondary)}.editor-statusbar{color:var(--color-text-light)}.editor-loading{padding:1rem;text-align:center}.edit-diff{padding:0!important}.edit-diff>div>.ui.table{border-top:none!important;border-bottom:none!important;border-left:1px solid var(--color-secondary)!important;border-right:1px solid var(--color-secondary)!important}.organization .head .ui.header .text{vertical-align:middle;font-size:1.6rem;margin-left:15px}.organization .head .ui.header .org-visibility .label{margin-left:5px;margin-top:5px}.organization .head .ui.header .ui.right{margin-top:5px}.organization .ui.secondary.stackable.pointing.menu{flex-wrap:wrap;margin-top:5px;margin-bottom:10px}.organization.new.org form{margin:auto}.organization.new.org form .ui.message{text-align:center}@media (min-width: 768px){.organization.new.org form{width:800px!important}.organization.new.org form .header{padding-left:280px!important}.organization.new.org form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.organization.new.org form .help{margin-left:265px!important}.organization.new.org form .optional .title{margin-left:250px!important}.organization.new.org form .inline.field>input,.organization.new.org form .inline.field>textarea{width:50%}}@media (max-width: 767px){.organization.new.org form .optional .title{margin-left:15px}.organization.new.org form .inline.field>label{display:block}}.organization.new.org form .header{padding-left:0!important;text-align:center}.organization.options input{min-width:300px}.organization.profile .org-avatar{width:100px;height:100px;margin-right:15px}.organization.profile #org-info{overflow-wrap:anywhere}.organization.profile #org-info .ui.header{display:flex;align-items:center;font-size:36px;margin-bottom:0}.organization.profile #org-info .ui.header .org-visibility .label{margin-left:5px;margin-top:2px}.organization.profile #org-info .desc{font-size:16px;margin-bottom:10px}.organization.profile #org-info .meta .item{display:inline-block;margin-right:10px}.organization.profile #org-info .meta .item .icon{margin-right:5px}.organization.profile .ui.top.header .ui.right{margin-top:0}.organization.profile .teams .item{padding:10px 15px}.organization.teams .members .ui.avatar,.organization.profile .members .ui.avatar{width:48px;height:48px;margin-right:5px;margin-bottom:5px}.organization.invite #invite-box{margin:50px auto auto;width:500px!important}.organization.invite #invite-box #search-user-box input{margin-left:0;width:300px}.organization.invite #invite-box .ui.button{margin-left:5px;margin-top:-3px}.organization.members .list .item{margin-left:0;margin-right:0;border-bottom:1px solid var(--color-secondary)}.organization.members .list .item .ui.avatar{width:48px;height:auto;margin-right:1rem;align-self:flex-start}.organization.members .list .item .meta{line-height:24px;word-break:break-word;min-width:2em}.organization.teams .detail .item{padding:10px 15px}.organization.teams .detail .item:not(:last-child){border-bottom:1px solid var(--color-secondary)}.organization.teams .repositories .item,.organization.teams .members .item{padding:10px 20px;line-height:32px}.organization.teams .repositories .item:not(:last-child),.organization.teams .members .item:not(:last-child){border-bottom:1px solid var(--color-secondary)}.organization.teams .repositories .item .button,.organization.teams .members .item .button{padding:9px 10px}.organization.teams #add-repo-form input,.organization.teams #repo-multiple-form input,.organization.teams #add-member-form input{margin-left:0}.organization.teams #add-repo-form .ui.button,.organization.teams #repo-multiple-form .ui.button,.organization.teams #add-member-form .ui.button{margin-left:5px;margin-top:-3px}.organization.teams #repo-top-segment{height:60px}.user.profile .ui.card .header{display:block;font-weight:600;font-size:1.3rem;margin-top:-.2rem;line-height:1.3rem}.user.profile .ui.card .profile-avatar-name{border-top:none;text-align:center}.user.profile .ui.card .extra.content{padding:0}.user.profile .ui.card .extra.content ul{margin:0;padding:0}.user.profile .ui.card .extra.content ul li{padding:10px;list-style:none}.user.profile .ui.card .extra.content ul li:not(:last-child){border-bottom:1px solid var(--color-secondary)}.user.profile .ui.card .extra.content ul li .svg{margin-left:1px;margin-right:5px}.user.profile .ui.card .extra.content ul li.follow .ui.button{width:100%}.user.profile .ui.card #profile-avatar{background:none;padding:1rem 1rem .25rem;justify-content:center}.user.profile .ui.card #profile-avatar img{width:100%;height:auto;object-fit:contain;margin:0}@media (max-width: 767px){.user.profile .ui.card #profile-avatar img{width:30vw}}@media (max-width: 767px){.user.profile .ui.card{width:100%}}.user.profile .ui.repository.list{margin-top:25px}.user.profile #loading-heatmap{margin-bottom:1em}.user.profile .ui.secondary.stackable.pointing.menu{flex-wrap:wrap}.user.followers .header.name{font-size:20px;line-height:24px;vertical-align:middle}.user.followers .follow .ui.button{padding:8px 15px}.user.notification .svg{float:left;font-size:2em}.user.notification .svg.green{color:var(--color-green)}.user.notification .svg.red{color:var(--color-red)}.user.notification .svg.purple{color:var(--color-purple)}.user.notification .svg.blue{color:var(--color-blue)}.user.notification .content{float:left;margin-left:7px}.user.notification table form{display:inline-block}.user.notification table button{padding:3px 3px 3px 5px}.user.notification table tr{cursor:pointer}.user .button.adopt,.user .button.delete{margin-top:-15px;margin-bottom:-15px}.user .button.adopt .label,.user .button.delete .label{vertical-align:middle}.user.link-account:not(.icon){padding-top:15px;padding-bottom:5px}.user.settings .iconFloat{float:left}.user-orgs{display:flex;flex-flow:row wrap;padding:0;margin:-3px!important}.user-orgs li{display:flex;border-bottom:0!important;padding:3px!important;width:20%;max-width:60px}#notification_div .tab.segment{overflow-x:auto}.dashboard.feeds .context.user.menu,.dashboard.issues .context.user.menu{z-index:101;min-width:200px}.dashboard.feeds .context.user.menu .ui.header,.dashboard.issues .context.user.menu .ui.header{font-size:1rem;text-transform:none}.dashboard.feeds .filter.menu,.dashboard.issues .filter.menu{width:initial}.dashboard.feeds .filter.menu .item,.dashboard.issues .filter.menu .item{text-align:left;display:flex;align-items:center;justify-content:space-between}.dashboard.feeds .filter.menu .item .text,.dashboard.issues .filter.menu .item .text{height:16px;vertical-align:middle}.dashboard.feeds .filter.menu .item .text.truncate,.dashboard.issues .filter.menu .item .text.truncate{width:75%}.dashboard.feeds .filter.menu .item .floating.label,.dashboard.issues .filter.menu .item .floating.label{top:7px;left:90%;width:15%}@media (max-width: 767px){.dashboard.feeds .filter.menu .item .floating.label,.dashboard.issues .filter.menu .item .floating.label{top:10px;left:auto;width:auto;right:13px}}.dashboard.feeds .filter.menu .jump.item,.dashboard.issues .filter.menu .jump.item{margin:1px;padding-right:0}.dashboard.feeds .filter.menu .menu,.dashboard.issues .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}@media (max-width: 767px){.dashboard.feeds .filter.menu,.dashboard.issues .filter.menu{width:100%}}.dashboard.feeds .right.stackable.menu>.item.active,.dashboard.issues .right.stackable.menu>.item.active{color:var(--color-red)}.dashboard .dashboard-repos,.dashboard .dashboard-orgs{margin:0 1px}.dashboard .dashboard-navbar{width:100vw;padding-left:.5rem;padding-right:.5rem}.dashboard .dashboard-navbar .org-visibility .label{margin-left:5px}.dashboard .dashboard-navbar .ui.dropdown{max-width:100%}@media (max-width: 767px){.dashboard .dashboard-navbar .ui.dropdown>.menu{position:static}}.feeds .news li{display:flex;align-items:baseline;margin-top:.5rem;margin-bottom:.5rem}.feeds .news li img{align-self:flex-start}.feeds .news li>*+*{margin-left:.35rem}.feeds .news>.ui.grid{margin-left:auto;margin-right:auto}.feeds .news .left .ui.avatar{margin-top:13px}.feeds .news .time-since{font-size:13px}.feeds .news .issue.title{width:80%;margin:0 0 1em}.feeds .news .push.news .content ul{line-height:18px;font-size:13px;list-style:none;padding-left:10px}.feeds .news .push.news .content ul .text.truncate{width:80%}.feeds .news .commit-id{font-family:var(--fonts-monospace)}.feeds .news code{padding:1px;font-size:85%;background-color:#0000000a;border-radius:3px;word-break:break-all}.feeds .news:last-of-type .divider{display:none!important}.feeds .list ul{list-style:none;margin:0;padding-left:0}.feeds .list ul li:not(:last-child){border-bottom:1px solid var(--color-secondary)}.feeds .list ul li.private{background-color:#fcf8e9}.feeds .list ul li .repo-list-link{padding:6px 1em;display:block}.feeds .list ul li .repo-list-link .svg{color:var(--color-text-light-2)}.feeds .list ul li .repo-list-link .star-num{font-size:12px}.feeds .list #privateFilterCheckbox .svg{color:#888;margin-right:.25rem}.feeds .list .repo-owner-name-list .item-name{max-width:70%}.admin.hooks .list>.item:not(:first-child){border-top:1px solid var(--color-secondary);padding:1rem;margin:15px -1rem -1rem}.admin .table.segment{padding:0;font-size:13px;overflow-x:auto}.admin .table.segment:not(.striped) thead th:last-child{padding-right:5px!important}.admin .table.segment th{padding-top:5px;padding-bottom:5px}.admin .table.segment:not(.select) th:first-of-type,.admin .table.segment:not(.select) td:first-of-type{padding-left:15px!important}.admin .table.segment form tbody button[type=submit]{padding:5px 8px}.admin .settings .button.adopt,.admin .settings .button.delete{margin-top:-15px;margin-bottom:-15px}.admin .settings .button.adopt .label,.admin .settings .button.delete .label{vertical-align:middle}.admin.user .email{max-width:200px}.admin dl.admin-dl-horizontal{padding:20px;margin:0}.admin dl.admin-dl-horizontal dd{margin-left:275px}@media (max-width: 767px){.admin dl.admin-dl-horizontal dd{margin-left:5%}}.admin dl.admin-dl-horizontal dt{font-weight:600;float:left;width:285px;clear:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 767px){.admin dl.admin-dl-horizontal dt{width:auto;margin-right:.5em}}.admin.config #test-mail-btn{margin-left:5px}.admin code,.admin pre{white-space:pre-wrap;word-wrap:break-word}@media (max-width: 767px){.admin #notice-table .notice-description{max-width:80vw}}@media (min-width: 768px) and (max-width: 991px){.admin #notice-table .notice-description{max-width:360px}}@media (min-width: 992px) and (max-width: 1200px){.admin #notice-table .notice-description{max-width:510px}}@media (min-width: 1201px){.admin #notice-table .notice-description{max-width:640px}}.explore .navbar{justify-content:center;margin-bottom:15px!important;background-color:var(--color-navbar)!important;border-width:1px!important}.explore .navbar .svg{width:16px;text-align:center;margin-right:5px}.ui.repository.list .item{padding-bottom:1.5rem}.ui.repository.list .item:not(:first-child){border-top:1px solid var(--color-secondary);padding-top:1.5rem}.ui.repository.list .item .ui.header{font-size:1.5rem;margin-bottom:.5rem}.ui.repository.list .item .ui.header .name{word-break:break-all}.ui.repository.list .item .ui.header .metas{font-size:14px}.ui.repository.list .item .time{font-size:12px}.ui.repository.list .item .ui.tags{margin-bottom:.5rem}.ui.repository.branches .info{font-size:12px;color:var(--color-text-light);display:flex;white-space:pre}.ui.repository.branches .info .commit-message{max-width:72em;overflow:hidden;text-overflow:ellipsis}.ui.repository.branches .overflow-visible{overflow:visible}.ui.repository.branches table .ui.popup{text-align:left}.ui.user.list .item{padding-bottom:25px}.ui.user.list .item:not(:first-child){border-top:1px solid var(--color-secondary);padding-top:25px}.ui.user.list .item .ui.avatar.image{width:40px;height:40px}.ui.user.list .item .description{margin-top:5px}.ui.user.list .item .description .svg:not(:first-child){margin-left:5px}.ui.button.add-code-comment{padding:2px;position:absolute;margin-left:-22px;z-index:5;opacity:0;transition:transform .1s ease-in-out;transform:scale(1);box-shadow:none!important;border:none!important}.ui.button.add-code-comment:hover{transform:scale(1.1)}.lines-escape a.toggle-escape-button:before{visibility:visible;content:"\26a0\fe0f";font-family:var(--fonts-emoji);color:var(--color-red)}.repository .diff-file-box .code-diff td.lines-escape{padding-left:0!important}.diff-file-box .lines-code:hover .ui.button.add-code-comment{opacity:1}.repository .diff-file-box .code-diff .add-comment-left,.repository .diff-file-box .code-diff .add-comment-right,.repository .diff-file-box .code-diff .add-code-comment .add-comment-left,.repository .diff-file-box .code-diff .add-code-comment .add-comment-right,.repository .diff-file-box .code-diff .add-code-comment .lines-type-marker{padding-left:0!important;padding-right:0!important}.add-comment-left.add-comment-right .ui.attached.header{border:1px solid var(--color-secondary)}.add-comment-left.add-comment-right .ui.attached.header:not(.top){margin-bottom:.5em}.show-outdated,.hide-outdated{display:block!important}.show-outdated:hover,.hide-outdated:hover{text-decoration:underline}.comment-code-cloud{padding:.5rem!important;position:relative;margin:0 auto}@media (max-width: 767px){.comment-code-cloud{padding:.75rem!important}.comment-code-cloud .code-comment-buttons{margin:.5rem 0 .25rem!important}.comment-code-cloud .code-comment-buttons .code-comment-buttons-buttons{width:100%}}.comment-code-cloud .comments .comment{margin:0}@media (max-width: 767px){.comment-code-cloud .comments .comment{padding:0}.comment-code-cloud .comments .comment .comment-header-right.actions .ui.basic.label{display:none}.comment-code-cloud .comments .comment .avatar{width:auto;float:none;margin:0 .5rem 0 0;flex-shrink:0}.comment-code-cloud .comments .comment .avatar.image{margin:0!important}.comment-code-cloud .comments .comment .comment-content{margin-left:0!important}.comment-code-cloud .comments .comment.code-comment{padding:0 0 .5rem!important}}.comment-code-cloud .attached.tab{border:0;padding:0;margin:0}.comment-code-cloud .attached.header{padding:.1rem 1rem}.comment-code-cloud .attached.header .text{margin:0}.comment-code-cloud .right.menu.options .item{padding:.85714286em .442857em;cursor:pointer}.comment-code-cloud .ui.active.tab{padding:.5em}.comment-code-cloud .ui.active.tab.markup{padding:1em;min-height:168px}.comment-code-cloud .ui.tabular.menu{margin:.5em}.comment-code-cloud .footer{border-top:1px solid var(--color-secondary);padding:10px 0}.comment-code-cloud .footer .markup-info{display:inline-block;margin:5px 0;font-size:12px;color:var(--color-text-light)}.comment-code-cloud .footer .ui.right.floated{padding-top:6px}.comment-code-cloud .footer:after{clear:both;content:"";display:block}@media (max-width: 767px){.comment-code-cloud .button{width:100%;margin:0!important}.comment-code-cloud .button:not(:last-child){margin-bottom:.75rem!important}}.diff-file-body .comment-form{margin:0 0 0 3em}.file-comment{color:var(--color-text)}a.blob-excerpt{color:var(--color-text-light);height:28px;display:flex;justify-content:center;align-items:center;width:100%;background:var(--color-expand-button)}a.blob-excerpt:hover{background:var(--color-primary);color:#fff}#review-box .CodeMirror-scroll{min-height:80px;max-height:calc(100vh - 360px)}@media (max-width: 767px){#review-box>.menu>.ui.segment{width:94vw}#review-box>.menu .editor-toolbar{overflow-x:auto}#review-box .CodeMirror-scroll{max-width:calc(100vw - 70px)}}@media (min-width: 768px) and (max-width: 991px){#review-box .CodeMirror-scroll{max-width:700px}}@media (min-width: 992px) and (max-width: 1200px){#review-box .CodeMirror-scroll{max-width:800px}}@media (min-width: 1201px){#review-box .CodeMirror-scroll{max-width:900px}}.review-box>.segment{border:none!important}#review-box .review-comments-counter{background-color:var(--color-primary-light-4);color:#fff}#review-box:hover .review-comments-counter{background-color:var(--color-primary-light-5)}#review-box .review-comments-counter[data-pending-comment-number="0"]{display:none}.pull.files.diff [id]{scroll-margin-top:99px}@media (max-width: 991px){.pull.files.diff [id]{scroll-margin-top:130px}}.changed-since-last-review{margin:0 5px;padding:0 3px;border:2px var(--color-primary-light-3) solid;background-color:var(--color-primary-alpha-30);border-radius:7px}.viewed-file-form{display:flex;align-items:center;border:1px none;padding:4px 8px;margin:-8px 0;border-radius:.285rem;font-size:.857rem}.viewed-file-form input{margin-right:4px}.viewed-file-checked-form{background-color:var(--color-primary-light-6);border:1px solid var(--color-primary-light-4)}#viewed-files-summary{width:72px;height:10px}.container-labels td:nth-child(1){vertical-align:top}.container-labels td:nth-child(2){overflow-wrap:anywhere}.df{display:flex!important}.di{display:inline!important}.dif{display:inline-flex!important}.dib{display:inline-block!important}.pr{position:relative!important}.ac{align-items:center!important}.tc{text-align:center!important}.tl{text-align:left!important}.tdn{text-decoration:none!important}.jc{justify-content:center!important}.js{justify-content:flex-start!important}.je{justify-content:flex-end!important}.sb{justify-content:space-between!important}.fc{flex-direction:column!important}.f1{flex:1!important}.fw{flex-wrap:wrap!important}.vm{vertical-align:middle!important}.w-100{width:100%!important}.h-100{height:100%!important}.br-0{border-radius:0!important}.mono{font-family:var(--fonts-monospace)!important;font-size:.9em!important}.bold{font-weight:600!important}.word-break{word-wrap:break-word!important;word-break:break-word;overflow-wrap:anywhere}.ellipsis{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important}.full-screen-width{width:100vw!important}.full-screen-height{height:100vh!important}.rounded{border-radius:var(--border-radius)!important}.rounded-top{border-radius:var(--border-radius) var(--border-radius) 0 0!important}.rounded-bottom{border-radius:0 0 var(--border-radius) var(--border-radius)!important}.rounded-left{border-radius:var(--border-radius) 0 0 var(--border-radius)!important}.rounded-right{border-radius:0 var(--border-radius) var(--border-radius) 0!important}.border-secondary{border:1px solid var(--color-secondary)!important}.border-secondary-top{border-top:1px solid var(--color-secondary)!important}.border-secondary-bottom{border-bottom:1px solid var(--color-secondary)!important}.border-secondary-left{border-left:1px solid var(--color-secondary)!important}.border-secondary-right{border-right:1px solid var(--color-secondary)!important}.no-transition{transition:none!important}.bg-red{background:var(--color-red)!important}.bg-orange{background:var(--color-orange)!important}.bg-yellow{background:var(--color-yellow)!important}.bg-olive{background:var(--color-olive)!important}.bg-green{background:var(--color-green)!important}.bg-teal{background:var(--color-teal)!important}.bg-blue{background:var(--color-blue)!important}.bg-violet{background:var(--color-violet)!important}.bg-purple{background:var(--color-purple)!important}.bg-pink{background:var(--color-pink)!important}.bg-brown{background:var(--color-brown)!important}.bg-grey{background:var(--color-grey)!important}.bg-gold{background:var(--color-gold)!important}.text-white{color:var(--color-white)!important}.m-0{margin:0!important}.m-1{margin:.125rem!important}.m-2{margin:.25rem!important}.m-3{margin:.5rem!important}.m-4{margin:1rem!important}.m-5{margin:2rem!important}.ml-0{margin-left:0!important}.ml-1{margin-left:.125rem!important}.ml-2{margin-left:.25rem!important}.ml-3{margin-left:.5rem!important}.ml-4{margin-left:1rem!important}.ml-5{margin-left:2rem!important}.mr-0{margin-right:0!important}.mr-1{margin-right:.125rem!important}.mr-2{margin-right:.25rem!important}.mr-3{margin-right:.5rem!important}.mr-4{margin-right:1rem!important}.mr-5{margin-right:2rem!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.125rem!important}.mt-2{margin-top:.25rem!important}.mt-3{margin-top:.5rem!important}.mt-4{margin-top:1rem!important}.mt-5{margin-top:2rem!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.125rem!important}.mb-2{margin-bottom:.25rem!important}.mb-3{margin-bottom:.5rem!important}.mb-4{margin-bottom:1rem!important}.mb-5{margin-bottom:2rem!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.125rem!important;margin-right:.125rem!important}.mx-2{margin-left:.25rem!important;margin-right:.25rem!important}.mx-3{margin-left:.5rem!important;margin-right:.5rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-5{margin-left:2rem!important;margin-right:2rem!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.125rem!important;margin-bottom:.125rem!important}.my-2{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-3{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.my-5{margin-top:2rem!important;margin-bottom:2rem!important}.p-0{padding:0!important}.p-1{padding:.125rem!important}.p-2{padding:.25rem!important}.p-3{padding:.5rem!important}.p-4{padding:1rem!important}.p-5{padding:2rem!important}.pl-0{padding-left:0!important}.pl-1{padding-left:.125rem!important}.pl-2{padding-left:.25rem!important}.pl-3{padding-left:.5rem!important}.pl-4{padding-left:1rem!important}.pl-5{padding-left:2rem!important}.pr-0{padding-right:0!important}.pr-1{padding-right:.125rem!important}.pr-2{padding-right:.25rem!important}.pr-3{padding-right:.5rem!important}.pr-4{padding-right:1rem!important}.pr-5{padding-right:2rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.125rem!important}.pt-2{padding-top:.25rem!important}.pt-3{padding-top:.5rem!important}.pt-4{padding-top:1rem!important}.pt-5{padding-top:2rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.125rem!important}.pb-2{padding-bottom:.25rem!important}.pb-3{padding-bottom:.5rem!important}.pb-4{padding-bottom:1rem!important}.pb-5{padding-bottom:2rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.125rem!important;padding-right:.125rem!important}.px-2{padding-left:.25rem!important;padding-right:.25rem!important}.px-3{padding-left:.5rem!important;padding-right:.5rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.px-5{padding-left:2rem!important;padding-right:2rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.125rem!important;padding-bottom:.125rem!important}.py-2{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-3{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.py-5{padding-top:2rem!important;padding-bottom:2rem!important} diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/0D8B95F6A052BDE29A67ED31C13C1EE0044B7DBB b/home/.surf/cache/WebKitCache/Version 16/Blobs/0D8B95F6A052BDE29A67ED31C13C1EE0044B7DBB new file mode 100644 index 0000000..7291891 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/0D8B95F6A052BDE29A67ED31C13C1EE0044B7DBB @@ -0,0 +1,1110 @@ +/* Bundle Includes: + * css/toast.css + * css/general.css + * css/megainput.css + * css/vars/text-input.css + * css/retina-images.css + */ + +.toast-rack{ + box-sizing:border-box; + display:flex; + flex-direction:column; + position:relative +} +.rtl .toast-rack{ + direction:rtl +} +.toast-rack *{ + box-sizing:border-box +} +.toast-rack.top{ + flex-direction:column-reverse; + justify-content:end +} +.toast-rack.start{ + flex-direction:row-reverse; + justify-content:end +} +.toast-rack.end{ + flex-direction:row +} +.toast-rack .toast{ + align-items:center; + display:flex; + justify-content:space-between; + margin:auto; + opacity:0; + transition:opacity .1s ease-in +} +.toast-rack .toast .icon,.toast-rack .toast button{ + flex-grow:0; + flex-shrink:0 +} +.toast-rack .toast button{ + border:none; + cursor:pointer; + outline:none +} +.toast-rack .toast button.close{ + align-items:center; + background:none; + display:flex; + flex-shrink:0; + justify-content:center +} +.toast-rack .toast .message{ + width:100% +} +.toast-rack .toast-slot{ + flex-grow:0; + flex-shrink:0 +} +.toast-rack.bottom .toast-slot,.toast-rack.top .toast-slot{ + flex-grow:0; + flex-shrink:0; + height:0; + transition:height .1s ease-in +} +.toast-rack.end .toast-slot,.toast-rack.start .toast-slot{ + transition:width .1s ease-in; + width:0 +} +.toast-rack .visible{ + opacity:1; + transition-delay:.1s +} +.toast-rack i{ + --icon-size:24px; + display:block; + flex-grow:0; + flex-shrink:0 +} +.toast-rack i.icon-settings{ + animation:rotate 2s linear infinite +} +.toast-rack .toast-icon:not(:first-child){ + -webkit-margin-start:12px; + margin-inline-start:12px +} +.toast-rack .toast-icon.red{ + --mask-color:var(--label-red) +} +.toast-rack .toast-icon.orange{ + --mask-color:var(--label-orange) +} +.toast-rack .toast-icon.yellow{ + --mask-color:var(--label-yellow) +} +.toast-rack .toast-icon.green{ + --mask-color:var(--label-green) +} +.toast-rack .toast-icon.blue{ + --mask-color:var(--label-blue) +} +.toast-rack .toast-icon.purple{ + --mask-color:var(--label-purple) +} +.toast-rack .toast-icon.grey{ + --mask-color:var(--label-grey) +} +.toast-rack .icon.upload{ + background-position:-86px -902px +} +.global-toast-container{ + bottom:0; + display:flex; + justify-content:center; + padding:4px; + pointer-events:none; + position:fixed; + width:100%; + z-index:2000 +} +.global-toast-container .toast-rack{ + pointer-events:auto +} +.global-toast-container .toast-rack .toast{ + --min-toast-height:64; + --mask-color:var(--text-color-high); + background:var(--surface-main); + border-radius:8px; + box-shadow:var(--toast-shadow); + color:var(--text-color-high); + font-size:14px; + height:var(--toast-height); + line-height:20px; + padding:14px; + width:640px +} +.global-toast-container .toast-slot{ + padding:4px 0 +} +.global-toast-container .toast-rack.bottom .toast-slot.open,.global-toast-container .toast-rack.top .toast-slot.open{ + height:calc(var(--toast-height) + 8px) +} +.global-toast-container .toast-rack .toast .message{ + margin:0 12px +} +.global-toast-container .toast-rack .toast button{ + background:var(--surface-grey-2); + border-radius:4px; + color:var(--text-color-high); + height:36px +} +.global-toast-container .toast-rack .toast button:not(:last-child){ + -webkit-margin-end:8px; + margin-inline-end:8px +} +.global-toast-container .toast-rack .toast button.action{ + padding:8px 12px +} +.global-toast-container .toast button.close{ + height:36px; + padding:0; + width:36px +} +.global-toast-container .toast span.link-text{ + color:var(--text-color-medium); + font:var(--text-body2); + margin-left:12px +} +.alert-toast-container{ + margin-bottom:8px; + position:relative +} +.alert-toast-container .toast-rack .toast{ + --min-toast-height:48; + --mask-color:var(--text-color-high); + background:var(--surface-main); + border-radius:8px; + box-shadow:var(--toast-shadow); + color:var(--text-color-high); + font:var(--text-body1); + height:48px; + max-width:512px; + min-width:200px; + padding:8px +} +.alert-toast-container .toast-rack.bottom .toast,.alert-toast-container .toast-rack.top .toast{ + height:var(--toast-height) +} +.alert-toast-container .toast-rack.end .toast,.alert-toast-container .toast-rack.start .toast{ + height:48px; + margin:0 16px; + width:48px +} +.alert-toast-container .toast-rack .toast button{ + background:var(--surface-grey-2); + border-radius:4px; + color:var(--text-color-high) +} +.alert-toast-container .toast-rack .toast button.action{ + font:var(--text-body1); + height:24px; + padding:0 12px +} +.alert-toast-container .toast-rack .toast button.close{ + -webkit-margin-start:8px; + margin-inline-start:8px; + padding:0 +} +.alert-toast-container .toast-rack .toast .message{ + margin:0 12px +} +.alert-toast-container .toast-rack.top .toast-slot{ + width:intrinsic; + width:-moz-max-content; + width:max-content +} +.alert-toast-container .toast-rack.bottom .toast-slot,.alert-toast-container .toast-rack.top .toast-slot{ + padding:8px 0 +} +.alert-toast-container .toast-rack.bottom .toast-slot.open,.alert-toast-container .toast-rack.top .toast-slot.open{ + height:calc(var(--toast-height) + 8px) +} +.alert-toast-container .toast-rack.end .toast-slot,.alert-toast-container .toast-rack.start .toast-slot{ + padding:0 8px +} +.alert-toast-container .toast-rack.end .toast-slot.open,.alert-toast-container .toast-rack.start .toast-slot.open{ + width:58px +} +.alert-toast-container .toast-rack .toast-slot.high .toast{ + background-color:var(--label-red) +} +.alert-toast-container .toast-rack .toast-slot.medium .toast{ + background-color:var(--label-orange) +} +.alert-toast-container .toast-rack .toast-slot.low .toast{ + background-color:var(--label-green) +} +.alert-toast-container .toast-rack .toast-slot.high .toast,.alert-toast-container .toast-rack .toast-slot.low .toast,.alert-toast-container .toast-rack .toast-slot.medium .toast{ + --mask-color:#fff; + border:none; + color:#fff +} +.alert-toast-container .toast-rack .toast-slot.high .close,.alert-toast-container .toast-rack .toast-slot.low .close,.alert-toast-container .toast-rack .toast-slot.medium .close{ + background-color:initial +} + +.hidden{ + display:none !important +} +.o-hidden{ + opacity:0 !important +} +.v-hidden,.vo-hidden{ + visibility:hidden !important +} +.vo-hidden{ + opacity:0 !important +} +.disabled{ + cursor:default !important; + opacity:.5 +} +.visible{ + opacity:1 !important +} +.mega-dialog p,.selectable-txt,.selectable-txt *,input,textarea{ + user-select:text !important; + -webkit-user-select:text !important +} +.txt-bold{ + font-family:LatoWebBold,source_sans_proregular,Arial; + font-weight:700 +} +.txt-light{ + font-family:LatoWebLight,source_sans_proregular,Arial; + font-weight:300 +} +.txt-green{ + color:var(--text-color-success) +} +.txt-dark{ + color:var(--text-color-high) +} +.underline-txt{ + outline-color:none; + text-decoration:underline +} +.red,a.red,a.red:active,a.red:hover,a.red:link,a.red:visited{ + color:var(--text-color-error) +} +.required-red{ + color:var(--text-color-error) !important +} +a.green,a.green:active,a.green:hover,a.green:link,a.green:visited{ + color:var(--text-color-success) +} +.page-title-txt,h1{ + color:var(--text-color-high); + font:var(--text-h1) +} +.hero-txt,h2{ + color:var(--text-color-high); + font:var(--text-h2) +} +.hero-txt.txt-light{ + font-family:LatoWebLight,source_sans_proregular,Arial +} +.headline-txt,h3{ + color:var(--text-color-medium); + font:var(--text-h3) +} +h4{ + font-size:20px +} +h4,h5{ + color:var(--text-color-medium); + display:inline-block; + line-height:24px +} +h5{ + font-size:16px +} +.content-txt{ + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body2); + padding:0; + position:relative +} +.title-txt{ + font:var(--text-h2) +} +.subtitle-txt,.title-txt{ + color:var(--text-color-high); + display:inline-block +} +.subtitle-txt{ + font:var(--text-h3) +} +.fmholder .content-txt{ + color:var(--text-color-low); + font:var(--text-body2) +} +.default-txt,h6{ + font-size:14px; + padding:0 +} +.default-txt,.default-txt-small,h6{ + color:#333; + display:inline-block; + line-height:20px; + position:relative +} +.caption-txt,.default-txt-small{ + font-size:13px +} +.caption-txt{ + color:#999; + display:inline-block; + line-height:20px; + position:relative +} +.half-sized-block{ + box-sizing:border-box; + float:left; + padding:0 0 0 12px; + position:relative; + width:50% +} +.half-sized-block.l,.half-sized-block:first-child{ + padding:0 12px 0 0 +} +.register-loading-icon{ + background:transparent url(../imagery/mega-ajax-loader-gray.771e6a3fab881b3d.gif) no-repeat scroll 0 0 / 16px 16px; + display:none; + height:16px; + position:absolute; + right:10px; + top:10px; + width:16px; + z-index:10 +} +.loading .register-loading-icon{ + display:block +} +.register-loading-icon img{ + width:16px +} + +.mega-input{ + align-items:center; + box-sizing:border-box; + display:inline-flex; + height:36px; + max-width:100%; + padding:2px 0; + position:relative; + text-align:start; + vertical-align:top; + white-space:nowrap; + width:100% +} +.mega-input input:-webkit-autofill{ + -webkit-text-fill-color:var(--text-color-high); + box-shadow:0 0 0 50px var(--stroke-main) inset +} +.mega-input input::placeholder,.mega-input textarea::placeholder{ + font:var(--text-body1) +} +.mega-input.halfSize-l{ + float:left; + width:48% +} +.mega-input.halfSize-r{ + float:right; + width:48% +} +.mega-input.inline{ + width:auto +} +.mega-input.dropdown-input>span,.mega-input input,.mega-input textarea{ + background-color:initial; + border:none; + box-sizing:border-box; + color:var(--text-color-high); + cursor:text; + flex:1; + font:var(--text-body1); + overflow:hidden; + padding:2px 8px; + position:relative; + text-overflow:ellipsis; + white-space:nowrap; + width:100%; + z-index:11 +} +.mega-input textarea{ + padding:8px; + resize:none +} +.mega-input>i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + -webkit-margin-start:3px; + border-radius:0; + display:block; + flex-shrink:0; + float:none; + margin-inline-start:3px; + padding:0; + position:relative; + transition:var(--transition-color) +} +.mega-input.active>i,.mega-input:hover>i{ + --mask-color:var(--icon-active) +} +.mega-input>input+i,.mega-input>span+i{ + --mask-color:var(--icon-inactive); + -webkit-margin-end:3px; + margin:0; + margin-inline-end:3px +} +.mega-input.active>input+i,.mega-input.active>span+i,.mega-input:hover>input+i,.mega-input:hover>span+i{ + --mask-color:var(--icon-rest) +} +.mega-input:before{ + border:solid var(--stroke-mid-grey); + border-width:0 0 1px; + box-sizing:border-box; + content:""; + height:100%; + left:0; + position:absolute; + top:0; + transition:var(--transition-border); + width:100% +} +.mega-input.box-style{ + height:38px; + min-width:150px +} +.mega-input.box-style input::placeholder{ + opacity:.9 +} +.mega-input.box-style:before{ + background:var(--surface-grey-1); + border-color:var(--stroke-grey-2); + border-radius:4px; + border-width:1px +} +.mega-input.box-style.solid:before{ + background:var(--surface-grey-2) +} +.mega-input.box-style>i{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.mega-input.box-style .mega-input-dropdown{ + top:-6px +} +.mega-input.box-style.title-ontop .mega-input-title{ + top:9px +} +.mega-input.box-style.title-ontop.with-icon .mega-input-title{ + -webkit-padding-start:40px; + color:var(--text-color-high); + padding-inline-start:40px +} +.mega-input.box-style.textarea{ + height:auto; + line-height:0 +} +.mega-input.box-style.textarea textarea{ + box-sizing:border-box; + min-height:100px; + padding:0 8px; + position:relative; + z-index:1 +} +.mega-input.box-style.textarea .textarea-scroll{ + box-sizing:border-box; + height:100px; + margin:8px 0; + overflow:hidden; + position:relative; + width:100% +} +.mega-input.dropdown-input.text-style{ + border-radius:4px; + min-width:auto; + transition:var(--transition-bg-color); + width:auto +} +.mega-input.text-style:before{ + display:none +} +.mega-input.text-style>input+i,.mega-input.text-style>span+i{ + --mask-color:var(--icon-active); + -webkit-margin-end:0; + margin-inline-end:0 +} +.mega-input.dropdown-input.text-style:hover{ + background:var(--button-hover) +} +.mega-input:hover:before{ + border-color:var(--input-text-underline-hover) +} +.mega-input.active:before{ + border-color:var(--input-text-underline-active) +} +.mega-input.error:before{ + border-color:var(--input-text-underline-error) +} +.mega-input.error .title{ + opacity:1; + visibility:visible +} +.mega-input.disabled{ + cursor:default; + opacity:1 +} +.mega-input.disabled:before{ + display:none +} +.mega-input.box-style.disabled,.mega-input.text-style.disabled{ + opacity:.5 +} +.mega-input.box-style.disabled:before{ + border-color:var(--stroke-mid-grey); + display:block +} +.mega-input.dropdown-input.disabled>span{ + cursor:default +} +.mega-input.title-ontop{ + margin:20px 0 +} +.mega-input.title-ontop input::placeholder{ + opacity:0 +} +.mega-input.title-ontop .mega-input-title{ + -webkit-padding-start:8px; + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body1); + left:0; + padding-inline-start:8px; + position:absolute; + top:8px; + transition:font-size .2s ease-in,color .2s ease-in,top .2s cubic-bezier(.4, 0, 1, 1); + z-index:10 +} +.mega-input.title-ontop.with-icon .mega-input-title{ + -webkit-padding-start:35px; + padding-inline-start:35px +} +.mega-input.title-ontop.active .mega-input-title,.mega-input.title-ontop.birth .mega-input-title,.mega-input.title-ontop.box-style .mega-input-title,.mega-input.title-ontop.dropdown-input .mega-input-title,.mega-input.title-ontop.valued .mega-input-title{ + color:var(--text-color-low); + font:var(--text-body2); + top:-20px +} +.mega-input.small-txt input{ + font:var(--text-body1) +} +.mega-input.small-txt input::placeholder,.mega-input.title-ontop.active.small-txt .mega-input-title,.mega-input.title-ontop.small-txt .mega-input-title,.mega-input.title-ontop.valued.small-txt .mega-input-title{ + font:var(--text-body2) +} +.mega-input.dropdown-input{ + cursor:pointer; + min-width:150px +} +.mega-input.dropdown-input input{ + height:0; + margin:0; + min-width:auto; + padding:0; + position:absolute; + width:0 +} +.mega-input.dropdown-input>span{ + cursor:pointer; + z-index:auto +} +.mega-input-dropdown{ + background:var(--surface-main); + border:var(--context-menu-border); + border-radius:12px; + box-shadow:0 5px 10px 0 rgba(0, 0, 0, .3); + box-sizing:border-box; + font-size:0; + min-width:200px; + padding:8px 0; + position:absolute; + transition:var(--transition-opacity); + z-index:150 +} +.mega-input .mega-input-dropdown{ + left:-9px; + min-width:calc(100% + 16px); + top:-7px +} +.ps .mega-input .mega-input-dropdown{ + min-width:auto; + position:fixed +} +.mega-input-dropdown .dropdown-scroll{ + max-height:288px; + max-width:100%; + position:relative; + z-index:1 +} +.mega-input-dropdown .option{ + --mask-color:var(--icon-rest); + align-items:center; + background:var(--surface-main); + border-radius:4px; + color:var(--text-color-medium); + cursor:pointer; + display:flex; + font:var(--text-body1); + margin:0 8px; + min-height:32px; + outline:none; + padding:0 8px; + text-align:start; + transition:var(--transition-bg-color), var(--transition-color) +} +.mega-input-dropdown .ps--active-y .option{ + margin-right:14px +} +.mega-input-dropdown .option.template{ + display:none +} +.mega-input-dropdown .option span{ + flex:1; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.mega-input-dropdown .option.active,.mega-input-dropdown .option:hover{ + --mask-color:var(--icon-active); + background:var(--button-hover); + color:var(--text-color-high) +} +.mega-input-dropdown .option i{ + --icon-size:24px; + -webkit-margin-end:8px; + margin:0; + margin-inline-end:8px; + transition:var(--transition-color) +} +.mega-input-dropdown .option span+i{ + -webkit-margin-start:8px; + margin:0; + margin-inline-start:8px +} +.mega-input-dropdown .option i.icon-check{ + --icon-size:16px; + display:none +} +.mega-input-dropdown .option.active i.icon-check{ + display:block +} +.mega-input .message-container{ + background:var(--banner-background-info); + border:1px solid var(--banner-border-info); + border-radius:4px; + box-sizing:border-box; + color:var(--banner-text-info); + display:none; + font:var(--text-body1); + left:0; + padding:2px; + position:absolute; + text-align:center; + text-overflow:ellipsis; + top:40px; + white-space:normal; + width:100% +} +.mega-input.halfSize-l .message-container{ + width:208% +} +.mega-input.error .message-container{ + background:var(--banner-background-error); + border-color:var(--banner-border-error); + color:var(--banner-text-error) +} +.mega-input.success .message-container{ + background:var(--banner-background-success); + border-color:var(--banner-border-success); + color:var(--banner-text-success) +} +.mega-input.warning .message-container{ + background:var(--banner-background-warning); + border-color:var(--banner-border-warning); + color:var(--banner-text-warning) +} +.mega-input.fix-msg .message-container,.mega-input.msg .message-container{ + display:inline-block +} +.mega-input.fix-msg .message-container{ + background:none; + border:none; + color:var(--text-color-medium); + padding:0; + text-align:left +} +.mega-input.fix-msg.error .message-container{ + color:var(--banner-text-error) +} +.mega-input .pass-visible{ + cursor:pointer; + opacity:.7; + right:4px; + transition:opacity .2s; + z-index:12 +} +.mega-input .pass-visible:hover{ + opacity:1 +} +.mega-input .account-pass-lines{ + -webkit-margin-end:4px; + background:var(--surface-mid-grey); + border-radius:2px; + margin-inline-end:4px +} +.mega-input .register-pass-status-line{ + border-radius:2px; + height:20px +} +.mega-input .good1 .register-pass-status-line{ + background-color:var(--password-status-veryweak); + height:4px; + margin-top:16px; + width:4px +} +.mega-input .good2 .register-pass-status-line{ + background-color:var(--password-status-weak); + height:8px; + margin-top:12px; + width:4px +} +.mega-input .good3 .register-pass-status-line{ + background-color:var(--password-status-medium); + height:12px; + margin-top:8px; + width:4px +} +.mega-input .good4 .register-pass-status-line{ + background-color:var(--password-status-good); + height:16px; + margin-top:4px; + width:4px +} +.mega-input .good5 .register-pass-status-line{ + background-color:var(--password-status-strong); + height:20px; + margin-top:0; + width:4px +} +.mega-input .account.password-status{ + color:var(--password-status-veryweak); + display:none; + font-family:var(--text-font-family-black); + font-size:14px; + line-height:24px; + margin:0 4px +} +.mega-input .account.password-status.good2{ + color:var(--password-status-weak) +} +.mega-input .account.password-status.good3{ + color:var(--password-status-medium) +} +.mega-input .account.password-status.good4{ + color:var(--password-status-good) +} +.mega-input .account.password-status.good5{ + color:var(--password-status-strong) +} +.mega-input .account.password-status.checked{ + display:block +} +.mega-input .register-loading-icon{ + background:transparent url(../imagery/mega-ajax-loader-gray.771e6a3fab881b3d.gif) no-repeat scroll 0 0 / 16px 16px; + display:none; + height:16px; + width:16px +} +.mega-input .loading .register-loading-icon{ + display:block +} +.mega-input .register-loading-icon img{ + width:16px +} +.mega-textarea{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:2px; + box-sizing:border-box; + margin-top:16px; + padding:0 +} +.mega-textarea .textarea-clone,.mega-textarea textarea{ + background:var(--surface-grey-1); + border:0; + box-sizing:border-box; + color:var(--text-color-medium); + display:block; + font:var(--text-body1); + height:80px; + margin:0; + min-height:80px; + overflow:hidden; + padding:0 12px; + position:relative; + resize:none; + width:100%; + word-break:break-word; + z-index:1 +} +.mega-textarea .textarea-clone{ + height:auto; + opacity:0; + position:absolute; + top:0; + visibility:hidden +} +.mega-textarea .textarea-scroll{ + line-height:0; + margin:8px 0; + max-height:80px +} + +.mega-input{ + + --password-status-strong:#4bb8f3; + --password-status-good:#6dcc50; + --password-status-medium:#f9a646; + --password-status-weak:#f4ce4a; + --password-status-veryweak:#ff333a +} + +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:1.5dppx){ +body.pro:after{ + content:url(../imagery/mega-payment-animation-2x.5403cf867cab0799.gif) +} +.bitcoin-invoice-dialog .qr-code-mega-icon,.mega-dialog.bitcoin-invoice-dialog .clock-icon,.payment-result-icon{ + background-image:url(../imagery/mega-bitcoin-2x.497e9fe48822a5f0.png); + background-size:200px auto +} +.provider-icon{ + background-image:url(../imagery/mega-payment-provider-icons-2x.d4b9207d7048764d.png); + background-size:20px auto +} +.mega-dialog.cancel-subscription-st2 .blue-success-icon{ + background-image:url(../imagery/mega-bitcoin-2x.497e9fe48822a5f0.png); + background-size:200px auto +} +.icoming-call-button{ + background-image:url(../imagery/mega-chat-sprite-2x.af225a0c23f9250b.png?v=2); + background-size:72px auto +} +.top-context-close{ + background-image:url(../imagery/mega-context-top-2x.8e9d4d41176193d1.png); + background-size:27px auto +} +.camera-bottom-icon,.camera-top-icon,.default-dropdown-item.icon,.download-dialog-icon,.download-icon,.download-sprite,.download-user-icon,.download.error-big-icon,.download.error-text.cross-icon,.download.error-text.error-icon,.download.error-text.na-icon,.mega-list-arrow,.megasync-dark-logo,.megasync-icon,.megasync-info-arrow,.megasync-logo,.megasync-table table td span,.megasync-table table th span,.new-download-red-button,.new-download-sync-app,button.download-button.down-arrow,button.download-button.to-clouddrive{ + background-image:url(../imagery/mega-download-sprite-2x.aa9482fe6c76c2a8.png); + background-size:257px auto +} +.account-history-drop-items.active,.account-warning-icon,.checkboxOff:after,.checkboxOn:after,.contains-value .top-clear-button,.dropdown-item.tick-item.active:after,.dropdown.close-button,.login-forgot-password,.login-register-input,.mega-dialog:not(.exceeded) .pro-plan-descr:after,.password-status-icon,.password-tooltip-arrow,.register-st2-button,.register-st2-button-arrow,.small-icon.membership,.top-clear-button,.top-login-input-block,.top-login-tooltip-arrow{ + background-image:url(../imagery/mega-top-login-sprite-2x.b7f3e5d749787609.png); + background-size:48px auto +} +.big-icons-sprite,.small-icon.membership.pro100,.tiny-icon.membership-status.pro100,i.big-icons-sprite{ + background-image:url(../imagery/mega-big-icons-2x.c51d146428b70fe3.png); + background-size:192px auto +} +.fm-dialog-close.small,.pro-bottom-info-header:before,.pro-icon,.reg-st3-save-icon,.reg-st5-info-icon,.resend-email-button,.small-icon.blue-arrow,.small-icon.green-arrow,.toast-close-button{ + background-image:url(../imagery/mega-register-big-sprite-2x.a28214807b2a93cd.png); + background-size:200px auto +} +.terms-agent-info{ + background-image:url(../imagery/mega-terms-icons-2x.bb8d0cddacf924b4.png); + background-size:14px auto +} +.team-social-icon{ + background-image:url(../imagery/mega-about-sprite-2x.e7380808f7e68101.png); + background-size:72px auto +} +.privacy-company-bott .st-quote-left,.privacy-company-bott .st-quote-right,.privacy-company-icon{ + background-image:url(../images/mega/privacy-sprite@2x.png); + background-size:130px auto +} +.widget-arrow,.widget-arrows,.widget-circle,.widget-icon{ + background-image:url(../imagery/mega-widget-progress-2x.ead142ee4c03e65e.png); + background-size:40px auto +} +.affiliate-input-block.select,.new-affiliate-star,ul.bot-ul li span,ul.can-ul li span,ul.cannt-ul li span,ul.mid-ul li span,ul.top-ul li span{ + background-image:url(../imagery/mega-new-affiliate-sprite-2x.86b2905360e3997d.png); + background-size:1500px auto +} +.contact-us-revamp h1,.contact-us .contact-new-title:before{ + background-image:url(../imagery/mega-contact-us-sprite-2x.f4afbb36e8eb141.png); + background-size:80px auto +} +.dev-new-app-big-icon,.dev-new-app-settings,.dev-new-button,.dev-new-table-icon,.dev-no-apps-txt,.dev-short-bl-icon,.new-bottom-pages .new-right-content-block li,.new-left-menu-icon,.new-left-submenu-item{ + background-image:url(../imagery/mega-sdk-sprite-2x.e315f9045d34f5e0.png); + background-size:904px auto +} +.blog-minus-sign,.blog-new-arrow,.blog-new-back,.blog-new-forward,.blog-new-negative,.blog-new-not-recomend,.blog-new-positive,.blog-new-recomend,.blog-new-search,.blog-new-strong-recomend,.blog-pagination-button.next,.blog-pagination-button.previous,.blog-pagination-button.to-the-beggining,.blog-pagination-button.to-the-end,.blog-plus-sign,.fm-breadcrumbs.calendar,.rss-view-all,.social-arrow,.social-icon{ + background-image:url(../imagery/mega-blog-new-sprite-2x.18ab7aae0423e84e.png); + background-size:217px auto +} +.help-listing,.help-nw .dev-new-button,.help-short-icon,.new-left-menu-icon.help-icon{ + background-image:url(../imagery/mega-help-new-sprite-2x.aa329ef118dc02a7.png); + background-size:886px auto +} +.opensource-icon,.opensource-top-icon{ + background-image:url(../imagery/mega-opensource-2x.47d7e3bfbe0ca589.png); + background-size:100px auto +} +.loading-info li:after{ + background-image:url(../imagery/mega-loading-sprite-2x.dc2b6fc8a2612d78.png); + background-size:222px auto +} +.new-bottom-pages .blog-new-full p.strong-paragraph.new-blog-icon{ + background-image:url(../imagery/mega-blogs-blog-post-sprite1-2x.aa7e0564c83f68cb.png); + background-size:36px auto +} +.dialog-empty-icon,.empty-icon,.fm-empty-cloud-bg,.fm-empty-contacts-bg,.fm-empty-conversations-bg,.fm-empty-filter-bg,.fm-empty-folder-bg,.fm-empty-folder-link-bg,.fm-empty-incoming-bg,.fm-empty-search-bg,.fm-empty-transfers-bg,.fm-empty-trashbin-bg,.fm-invalid-folder-bg{ + background-image:url(../imagery/mega-empty-sprite-2x.55c88969c1985528.png); + background-size:294px auto +} +.blog-new-full ul ul li{ + background-image:url(../imagery/mega-dev-point-gray-new.7c77b167927d489c.png); + background-size:39px auto +} +.fm-bandwidth-dashed,.fm-bandwidth-icon{ + background-image:url(../imagery/mega-quota-sprite-2x.b1fa0c9357cb27b5.png); + background-size:240px auto +} +.backup-download-block,.backup-notification-icon,.login-register-input.fail,.login-register-input.green-tick,.recover-upload-block,.reset-account-lock-image,.restore-uploading-status-icon{ + background-image:url(../imagery/mega-encr-sprite-2x.c517867885897e01.png); + background-size:216px +} +.huge-white-icon,.shared-link.small-icon{ + background-image:url(../imagery/mega-chat-static-sprite-2x.da2647a4df373fe7.png); + background-size:68px auto +} +#mega-text-editor .txt-editor-download-btn .txt-editor-download-btn-icon,.download.thumb-hover-icon,.file-settings-icon:after,.files-grid-view.fm .column-settings:before,.fm-account-button.megadrop:before,.grid-url-arrow:after,.icons-sprite,.improved-recovery-steps .nav-back-icon,.medium-icon.icons-img,.mega-dialog.resume-transfer .resume-transfers-button .icon,.megasync-transfer .toast-col:first-child span:before,.semi-big-icon.icons-img,.settings-menu-arrow,.small-icon.clock,.small-icon.context,.small-icon.red-lens,.small-icon.red-play,.small-icon.small-play-icon,.top-search-button,.transfer-panel-title span:before,.viewer-mid-button,i.icons-sprite,i.small-icon.icons-sprite{ + background-image:url(../imagery/mega-icons-sprite-2x.7ba2a039a7366753.png); + background-size:262px auto +} +#help2-main .ios-desktop-icon,#help2-main .linux-desktop-icon,#help2-main .ui-autocomplete .client,#help2-main .webclient-icon,#help2-main .windows-desktop-icon{ + background-image:url(../imagery/mega-help2-welcome_icons-2x.51f67ea97febce92.png); + background-size:250px auto +} +.achievement-complete:after,.big-104px-icon.speedometer,.big-icon.almost-full-storage,.dropdown.transfer-icon,.huge-icon.storage-icon,.huge-white-icon.achievement,.mid-white-icon,.semi-big-icon.blue-cloud,.semi-big-icon.green-speedometer,.semi-huge-icon.green-tick,.semi-huge-icon.speedometer,.semi-huge-icon.storage,.semi-small-icon.rocket{ + background-image:url(../imagery/mega-account-sprite-2x.2969ba0da7f80c1b.png); + background-size:172px auto +} +.huge-icon.achievement{ + background-image:url(../imagery/mega-big-achievements-2x.1626493fa5a255d7.png); + background-size:436px auto +} +.feedback-button,.fm-files-search i.search,.improved-recovery-steps .list-point b.megasync-logo,.languages-dialog .show-more-languages .round-arrow span,.logo,.medium-icon.rocket,.megasync-close,.new-notification-icon,.notification-txt,.nw-bottom-copyrights,.nw-bottom-social,.semi-small-icon.grey-mega,.semi-small-icon.white-mega,.semi-small-icon.yellow-triangle,.tiny-icon.green-tick,.tiny-icon.membership-status,.tiny-icon.red-cross,.top-sprite,i.account-icon,i.top-sprite{ + background-image:url(../imagery/mega-top-sprite-2x.7bd10334447ce203.png); + background-size:38px auto +} +.block-view-file-type,.contact-share-notification:before,.dragger-icon,.export-icon,.medium-file-icon,.new-download-file-icon,.share-folder-icon div,.shared-details-icon,.shared-folder-icon,.transfer-filetype-icon,table.shared-with-me .shared-folder-icon{ + background-image:url(../imagery/mega-files-icons-2x.d7b16a0f90d1b9f1.png); + background-size:399px 7652px +} +.download.big-icon,.fm-dialog-close.big,.megasync-img:before,button.megasync-slider:after{ + background-image:url(../imagery/mega-download-dialog-2x.d8f30a684764e8f9.png); + background-size:853px auto +} +.mega-dialog.properties-dialog .properties-file-icon i,.properties-file-icon i{ + background-image:url(../imagery/mega-properties-sprite-2x.50ff2ba1130edd7.png); + background-size:589px 8470px +} +.drag-n-drop.header,.drag-n-drop.info-block i,.drag-n-drop hr{ + background-image:url(../imagery/mega-overlay-sprite-2x.be6cdc26e9223cde.png); + background-size:400px auto +} +.dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-2x.215dc3955d7b0c2b.png); + background-size:660px auto +} +.es .dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-es-2x.429128d89a97fa54.png) +} +.br .dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-pt-2x.3c2d2c1c0a800dbb.png) +} +.cn .dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-cn-2x.beb2afdd09f6271.png) +} +.add-user-icon,.bandwidth-back-button,.bandwidth-text-bl .star,.bottom-info.fm-dialog-close:not(.mobile),.btn-close-dialog,.delete-contact.multiple .fm-del-contact-avatar,.dialog-sprite,.dlkey-dialog .decryption-key .icon,.duplicated-input-warning .arrow,.email .avatar-wrapper:after,.email .search-avatar:after,.embed-content .tab-icon.embed,.embed-content .tab-icon.url,.export-links-warning-close,.file-link-block .icon,.fm-dialog-close,.fm-dialogs-dropdown span,.fm-dialogs-select span,.fm-notification-info p.red:before,.full-access .context-menu-icon,.gmail .avatar-wrapper:after,.gmail .search-avatar:after,.import-contacts-info,.import-contacts-info-txt .import-arrow,.import-contacts-link span,.import-contacts-service.imported,.import-contacts-service span,.imported-notification-close,.information-icon,.information-icon div span,.mega-dialog.share-add-dialog .chat-contactspicker-no-contacts.searching .fm-empty-contacts-bg,.multiple-input-warning .arrow,.pending-indicator:after,.pending .search-avatar:after,.properties-context-arrow,.properties-share-icon,.read-and-write .context-menu-icon,.read-only .context-menu-icon,.share-dialog-icon.permissions-icon span,.share-dialog-remove-button,.share-pending-arrow,.share-search-result.selected,.shared-with-me.full-access .properties-elements-counter span,.shared-with-me.read-and-write .properties-elements-counter span,.shared-with-me.read-only .properties-elements-counter span,.widget-card .widget-maximise,.widget-card .widget-minimise,i.dialog-sprite{ + background-image:url(../imagery/mega-dialog-sprite-2x.38853398a488b093.png); + background-size:160px auto +} +.big-icon,.call-icon,.chat-topic-block.privateChat .privateChatDiv,.huge-grey-warning,.huge-icon,.medium-icon,.privateChat+.privateChatDiv,.round-icon,.semi-big-icon,.semi-small-icon,.small-icon,.tiny-icon,.verified .verified_icon,button.chat-share-nav:before,button.icon-dropdown.active,button.icon-dropdown:not(.disabled):hover,div.chat-topic-icon:before,div.message.richpreview.confirmation-icon{ + background-image:url(../imagery/mega-new-chat-sprite-2x.425fffbf279f8d9a.png); + background-size:237px auto +} +.achievements-cell .medium-icon.remind-icon,.add-user-size-icon,.arrow.asc.grid-header-star,.arrow.desc.grid-header-star,.big-icon.cloud,.big-icon.fm-s,.big-icon.speedometer,.clear-transfer-icon:after,.content-panel.dashboard .small-icon.info-icon,.context-bottom-arrow,.context-top-arrow,.create-folder-size-icon,.file-status-icon.star,.fm-account-button:before,.fm-add-user-scrolling .nw-contact-item,.fm-breadcrumbs.has-next-button,.fm-dialog-search,.fm-mega-dialog-size-icon,.fm-picker-dialog .icon,.fm-right-account-block .dialog-input-title-ontop .birth-arrow-container .down-control,.fm-right-account-block .dialog-input-title-ontop .birth-arrow-container .up-control,.fm-right-account-block .icon,.fm-right-account-block .tooltip-icon .medium-icon.info-icon,.fm-s,.fm-share-dropdown,.free .fm-right-account-block:not(.active-achievements) .bandwidth .chart.data .perc-txt,.free .fm-right-block:not(.active-achievements) .bandwidth .chart.data .perc-txt,.grid-status-icon.star,.invitation-dialog .table-cell span.asc,.invitation-dialog .table-cell span.desc,.medium-icon.cloud,.medium-icon.speedometer,.no-percs .chart.data .perc-txt,.notification-accepted,.nw-fm-left-icon.affiliate:after,.nw-fm-tree-item.contains-folders .nw-fm-arrow-icon,.nw-verified-icon,.redeem-voucher .notification-arrow,.semi-big-icon.cloud,.semi-big-icon.cloud-down,.semi-big-icon.cloud-up,.semi-big-icon.grnt-quota,.semi-big-icon.speedometer,.semi-big-icon.xscheduler,.semi-small-icon.circle,.semi-small-icon.cloud,.semi-small-icon.dots,.semi-small-icon.down-arrow,.semi-small-icon.exclamation-point,.semi-small-icon.file,.semi-small-icon.folder,.semi-small-icon.left-arrow,.semi-small-icon.left-arrow-with-dot,.semi-small-icon.linked,.semi-small-icon.right-arrow,.semi-small-icon.rounded-arrow,.semi-small-icon.rubbish,.semi-small-icon.rubbish-arrows,.semi-small-icon.star,.semi-small-icon.tick,.share-dialog-icon.permissions-icon,.share-dialog-panel-arrows,.small-icon.download-as-zip:not(.context),.small-icon.fm-s,.small-icon.folder-upload:not(.context),.small-icon.grey-plus:not(.icons-sprite),.small-icon.import-to-cloud,.small-icon.pause-icon,.small-icon.play-icon,.small-icon.refresh-icon,.sorting-menu-item.active,.sorting-menu-item.selected,.star .incoming-contact-info span.incoming-call-name,.taken-down .file-status-icon,.tiny-icon.cog,.transfer-bar-overlay div,.undecryptable .file-status-icon,.verified .nw-contact-verified-icon{ + background-image:url(../imagery/mega-fm-main-sprite-2x.a89c0122eaa552cd.png); + background-size:48px auto +} +.mega-dialog.verify-phone .achievements-icon,.verify-ph-bonus-valid-days .valid-days-title:before{ + background-image:url(../imagery/mega-mid-achievements-2x.174a4ec894926625.png); + background-repeat:no-repeat; + background-size:380px auto +} +.fm-files-view-icon-user-management,.subaccount-view-used-data .used-storage-info .folder-small-icon,.user-management-overview-bar-data .info-block .icon{ + background-image:url(../imagery/mega-fm-main-sprite-2x.a89c0122eaa552cd.png); + background-size:48px auto +} +.bus-reg-icon,.business-dashboard .folder-small-icon.ex-out-share,.fm-right-header-user-management .folder-small-icon.ex-out-share,.subaccount-view-used-data .used-storage-info .folder-small-icon.ex-in-share,.subaccount-view-used-data .used-storage-info .folder-small-icon.ex-out-share,.user-management-dialog .folder-small-icon.ex-out-share,.user-management-view .subaccount-view-used-data .used-storage-info .folder-small-icon.ex-out-share{ + background-image:url(../imagery/mega-top-sprite-2x.7bd10334447ce203.png); + background-size:38px auto +} +.fm-right-header-user-management .icon,.share-dialog-top-body .copy-link-icon,.user-management-dialog .icon,.user-management-overview-bar .icon{ + background-image:url(../imagery/mega-fm-main-sprite-2x.a89c0122eaa552cd.png); + background-size:48px auto +} +.bus-confirm-body .bus-confirmImg,.bus-reg-featureImg100{ + background-image:url(../imagery/mega-big-icons-2x.c51d146428b70fe3.png); + background-size:192px auto +} +.user-management-account-settings .icon12,.user-management-account-settings .invoice-detail .mega-logo{ + background-image:url(../imagery/mega-invoice-image-2x.57ef6d3f61505263.png); + background-size:120px auto +} +.bottom-page-icon.white-info,.bottom-page.icon.new-pages-sprite,.bottom-page.large-icon,.bottom-page.top-title:before,.cropped-page .bottom-page.big-icon,.cropped-page .bottom-page.top-title:before,.dark-notification-arrow,.megaapp-linux-arrow,.mobile-apps-button.uwp,.uwp .advertise-chat .mobile-apps-button.red span:before{ + background-image:url(../imagery/mega-new-pages-sprite-2x.4c92e0c6c9034e3d.png) !important; + background-size:376px auto +} +.auth-app-select-tooltip .app-link-arrow,.auth-app-select-tooltip .app-link-icon{ + background-image:url(../imagery/mega-2fa-auth-apps-2x.9e40bdac7372b9e1.png); + background-size:72px auto +} +.improved-recovery-steps .recover-image,.improved-recovery-steps .session-image-block,.tooltip-block .minimum-password-block .password-icon{ + background-image:url(../imagery/mega-recover-account-sprite-2x.16625400384070f9.png); + background-size:344px auto +} +.big-illustration,.register-sprite{ + background-image:url(../imagery/mega-register-sprite-2x.d352867b1b2fde7c.png); + background-size:612px auto +} +.register-page .slider-ctrl-button{ + background-image:url(../imagery/mega-business-2x.eab14dbbd8fa2387.png) !important; + background-size:367px auto +} +.context-sprite,i.context-sprite{ + background-image:url(../imagery/mega-context-sprite-2x.5ceccb25400d603a.png); + background-size:217px auto +} +.bottom-page.about-sprite,i.bottom-page.about-sprite{ + background-image:url(../imagery/mega-about-sprite-2x.e7380808f7e68101.png) !important; + background-size:525px auto +} +} diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/0F44A06C3846614B8A706F90BF351D5F9CD621BB b/home/.surf/cache/WebKitCache/Version 16/Blobs/0F44A06C3846614B8A706F90BF351D5F9CD621BB new file mode 100644 index 0000000..80424a6 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/0F44A06C3846614B8A706F90BF351D5F9CD621BB @@ -0,0 +1,324 @@ +gapi.loaded_0(function(_){var window=this; +var ca,fa,ha,ia,ka,la,ya;_.ba=function(a){return function(){return _.aa[a].apply(this,arguments)}};_.aa=[];ca=function(a){var b=0;return function(){return b>>0)+"_",d=0,e=function(f){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new b(c+(f||"")+"_"+d++,f)};return e}); +ka("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c=f}}); +var La=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)}; +ka("WeakMap",function(a){function b(){}function c(l){var m=typeof l;return"object"===m&&null!==l||"function"===m}function d(l){if(!La(l,f)){var m=new b;fa(l,f,{value:m})}}function e(l){var m=Object[l];m&&(Object[l]=function(n){if(n instanceof b)return n;Object.isExtensible(n)&&d(n);return m(n)})}if(function(){if(!a||!Object.seal)return!1;try{var l=Object.seal({}),m=Object.seal({}),n=new a([[l,2],[m,3]]);if(2!=n.get(l)||3!=n.get(m))return!1;n.delete(l);n.set(m,4);return!n.has(l)&&4==n.get(m)}catch(q){return!1}}())return a; +var f="$jscomp_hidden_"+Math.random();e("freeze");e("preventExtensions");e("seal");var h=0,k=function(l){this.Ca=(h+=Math.random()+1).toString();if(l){l=_.pa(l);for(var m;!(m=l.next()).done;)m=m.value,this.set(m[0],m[1])}};k.prototype.set=function(l,m){if(!c(l))throw Error("d");d(l);if(!La(l,f))throw Error("e`"+l);l[f][this.Ca]=m;return this};k.prototype.get=function(l){return c(l)&&La(l,f)?l[f][this.Ca]:void 0};k.prototype.has=function(l){return c(l)&&La(l,f)&&La(l[f],this.Ca)};k.prototype.delete= +function(l){return c(l)&&La(l,f)&&La(l[f],this.Ca)?delete l[f][this.Ca]:!1};return k}); +ka("Map",function(a){if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var k=Object.seal({x:4}),l=new a(_.pa([[k,"s"]]));if("s"!=l.get(k)||1!=l.size||l.get({x:4})||l.set({x:4},"t")!=l||2!=l.size)return!1;var m=l.entries(),n=m.next();if(n.done||n.value[0]!=k||"s"!=n.value[1])return!1;n=m.next();return n.done||4!=n.value[0].x||"t"!=n.value[1]||!m.next().done?!1:!0}catch(q){return!1}}())return a;var b=new WeakMap,c=function(k){this.Pf={};this.tf= +f();this.size=0;if(k){k=_.pa(k);for(var l;!(l=k.next()).done;)l=l.value,this.set(l[0],l[1])}};c.prototype.set=function(k,l){k=0===k?0:k;var m=d(this,k);m.list||(m.list=this.Pf[m.id]=[]);m.Ee?m.Ee.value=l:(m.Ee={next:this.tf,Mj:this.tf.Mj,head:this.tf,key:k,value:l},m.list.push(m.Ee),this.tf.Mj.next=m.Ee,this.tf.Mj=m.Ee,this.size++);return this};c.prototype.delete=function(k){k=d(this,k);return k.Ee&&k.list?(k.list.splice(k.index,1),k.list.length||delete this.Pf[k.id],k.Ee.Mj.next=k.Ee.next,k.Ee.next.Mj= +k.Ee.Mj,k.Ee.head=null,this.size--,!0):!1};c.prototype.clear=function(){this.Pf={};this.tf=this.tf.Mj=f();this.size=0};c.prototype.has=function(k){return!!d(this,k).Ee};c.prototype.get=function(k){return(k=d(this,k).Ee)&&k.value};c.prototype.entries=function(){return e(this,function(k){return[k.key,k.value]})};c.prototype.keys=function(){return e(this,function(k){return k.key})};c.prototype.values=function(){return e(this,function(k){return k.value})};c.prototype.forEach=function(k,l){for(var m=this.entries(), +n;!(n=m.next()).done;)n=n.value,k.call(l,n[1],n[0],this)};c.prototype[Symbol.iterator]=c.prototype.entries;var d=function(k,l){var m=l&&typeof l;"object"==m||"function"==m?b.has(l)?m=b.get(l):(m=""+ ++h,b.set(l,m)):m="p_"+l;var n=k.Pf[m];if(n&&La(k.Pf,m))for(k=0;kc&&(c=Math.max(c+e,0));cc&&(c=Math.max(0,e+c));if(null==d||d>e)d=e;d=Number(d);0>d&&(d=Math.max(0,e+d));for(c=Number(c||0);c>>16&65535)*e+d*(c>>>16&65535)<<16>>>0)|0}}); +ka("String.fromCodePoint",function(a){return a?a:function(b){for(var c="",d=0;de||1114111=e?c+=String.fromCharCode(e):(e-=65536,c+=String.fromCharCode(e>>>10&1023|55296),c+=String.fromCharCode(e&1023|56320))}return c}});_.Wa={}; +/* + + Copyright The Closure Library Authors. + SPDX-License-Identifier: Apache-2.0 +*/ +_.Xa=_.Xa||{};_.Ya=this||self;_.$a="closure_uid_"+(1E9*Math.random()>>>0);_.u=function(a,b){a=a.split(".");var c=_.Ya;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}:c[d]=b}; +_.ab=function(a,b){function c(){}c.prototype=b.prototype;a.H=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.Xq=function(d,e,f){for(var h=Array(arguments.length-2),k=2;kc&&(c=Math.max(0,a.length+c));if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.lastIndexOf(b,c);for(;0<=c;c--)if(c in a&&a[c]===b)return c;return-1};_.Pb=Array.prototype.forEach?function(a,b,c){Array.prototype.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e="string"===typeof a?a.split(""):a,f=0;f")&&(a=a.replace(pc,">"));-1!=a.indexOf('"')&&(a=a.replace(qc,"""));-1!=a.indexOf("'")&&(a=a.replace(rc,"'"));-1!=a.indexOf("\x00")&&(a=a.replace(sc,"�"));return a};nc=/&/g;oc=//g;qc=/"/g;rc=/'/g;sc=/\x00/g;mc=/[\x00&<>"']/;_.pb=function(a,b){return-1!=a.indexOf(b)}; +_.vc=function(a,b){var c=0;a=(0,_.lc)(String(a)).split(".");b=(0,_.lc)(String(b)).split(".");for(var d=Math.max(a.length,b.length),e=0;0==c&&eb?1:0}; +var zc,Bc,wc;_.xc=function(a,b){this.gG=b===wc?a:""};_.xc.prototype.toString=function(){return this.gG.toString()};_.xc.prototype.yi=!0;_.xc.prototype.Cg=function(){return this.gG.toString()};_.yc=function(a){if(a instanceof _.xc&&a.constructor===_.xc)return a.gG;_.Fb(a);return"type_error:SafeUrl"};zc=/^data:(.*);base64,[a-z0-9+\/]+=*$/i;Bc=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i; +_.Dc=function(a){if(a instanceof _.xc)return a;a="object"==typeof a&&a.yi?a.Cg():String(a);Bc.test(a)?a=_.Cc(a):(a=String(a).replace(/(%0A|%0D)/g,""),a=a.match(zc)?_.Cc(a):null);return a};_.Ec=function(a){if(a instanceof _.xc)return a;a="object"==typeof a&&a.yi?a.Cg():String(a);Bc.test(a)||(a="about:invalid#zClosurez");return _.Cc(a)};wc={};_.Cc=function(a){return new _.xc(a,wc)};_.Fc=_.Cc("about:invalid#zClosurez"); +_.Gc={};_.Hc=function(a,b){this.fG=b===_.Gc?a:"";this.yi=!0};_.Hc.prototype.Cg=function(){return this.fG};_.Hc.prototype.toString=function(){return this.fG.toString()};_.Ic=new _.Hc("",_.Gc);_.Jc=RegExp("^[-,.\"'%_!#/ a-zA-Z0-9\\[\\]]+$");_.Kc=RegExp("\\b(url\\([ \t\n]*)('[ -&(-\\[\\]-~]*'|\"[ !#-\\[\\]-~]*\"|[!#-&*-\\[\\]-~]*)([ \t\n]*\\))","g"); +_.Lc=RegExp("\\b(calc|cubic-bezier|fit-content|hsl|hsla|linear-gradient|matrix|minmax|radial-gradient|repeat|rgb|rgba|(rotate|scale|translate)(X|Y|Z|3d)?|steps|var)\\([-+*/0-9a-zA-Z.%#\\[\\], ]+\\)","g"); +_.Nc={};_.Oc=function(a,b){this.eG=b===_.Nc?a:"";this.yi=!0};_.Oc.prototype.toString=function(){return this.eG.toString()};_.Qc=function(a){a=_.Zb(a);return 0===a.length?Pc:new _.Oc(a,_.Nc)};_.Oc.prototype.Cg=function(){return this.eG};var Pc=new _.Oc("",_.Nc); +var Rc;Rc={};_.Sc=function(a,b){this.dG=b===Rc?a:"";this.yi=!0};_.Sc.prototype.Cg=function(){return this.dG.toString()};_.Sc.prototype.toString=function(){return this.dG.toString()};_.yb=function(a){if(a instanceof _.Sc&&a.constructor===_.Sc)return a.dG;_.Fb(a);return"type_error:SafeHtml"};_.Uc=function(a){return a instanceof _.Sc?a:_.Tc(_.tc("object"==typeof a&&a.yi?a.Cg():String(a)))};_.Tc=function(a){var b=Ub();a=b?b.createHTML(a):a;return new _.Sc(a,Rc)}; +_.Vc=new _.Sc(_.Ya.trustedTypes&&_.Ya.trustedTypes.emptyHTML||"",Rc);_.Wc=_.Tc("
        "); +var Xc;try{new URL("s://g"),Xc=!0}catch(a){Xc=!1}_.Yc=Xc; +_.Ab=function(a){this.Gi=a};_.Zc=[Bb("data"),Bb("http"),Bb("https"),Bb("mailto"),Bb("ftp"),new _.Ab(function(a){return/^[^:]*([/?#]|$)/.test(a)})]; +var $c=function(a){$c[" "](a);return a};$c[" "]=function(){};_.ad=function(a,b){try{return $c(a[b]),!0}catch(c){}return!1}; +var qd,rd,wd;_.bd=_.rb();_.cd=_.sb();_.dd=_.qb("Edge");_.ed=_.dd||_.cd;_.fd=_.qb("Gecko")&&!(_.pb(_.ob().toLowerCase(),"webkit")&&!_.qb("Edge"))&&!(_.qb("Trident")||_.qb("MSIE"))&&!_.qb("Edge");_.gd=_.pb(_.ob().toLowerCase(),"webkit")&&!_.qb("Edge");_.hd=_.gd&&_.qb("Mobile");_.id=_.qb("Macintosh");_.jd=_.qb("Windows");_.kd=_.qb("Linux")||_.qb("CrOS");_.ld=_.qb("Android");_.md=_.Cb();_.nd=_.qb("iPad");_.od=_.qb("iPod");_.pd=_.Db();qd=function(){var a=_.Ya.document;return a?a.documentMode:void 0}; +a:{var sd="",td=function(){var a=_.ob();if(_.fd)return/rv:([^\);]+)(\)|;)/.exec(a);if(_.dd)return/Edge\/([\d\.]+)/.exec(a);if(_.cd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(_.gd)return/WebKit\/(\S+)/.exec(a);if(_.bd)return/(?:Version)[ \/]?(\S+)/.exec(a)}();td&&(sd=td?td[1]:"");if(_.cd){var ud=qd();if(null!=ud&&ud>parseFloat(sd)){rd=String(ud);break a}}rd=sd}_.vd=rd;if(_.Ya.document&&_.cd){var xd=qd();wd=xd?xd:parseInt(_.vd,10)||void 0}else wd=void 0;_.yd=wd; +try{(new self.OffscreenCanvas(0,0)).getContext("2d")}catch(a){}_.zd=_.cd||_.gd; +_.Ad=function(a){var b=!1,c;return function(){b||(c=a(),b=!0);return c}}; +var Bd,Fd;Bd=_.Ad(function(){var a=document.createElement("div"),b=document.createElement("div");b.appendChild(document.createElement("div"));a.appendChild(b);b=a.firstChild.firstChild;a.innerHTML=_.yb(_.Vc);return!b.parentElement});_.Cd=function(a,b){if(Bd())for(;a.lastChild;)a.removeChild(a.lastChild);a.innerHTML=_.yb(b)};_.Dd=function(a,b){b=b instanceof _.xc?b:_.Ec(b);a.href=_.yc(b)}; +_.Ed=function(a,b,c,d){a=a instanceof _.xc?a:_.Ec(a);b=b||_.Ya;c=c instanceof _.Yb?_.Zb(c):c||"";return void 0!==d?b.open(_.yc(a),c,d):b.open(_.yc(a),c)};Fd=/^[\w+/_-]+[=]{0,2}$/;_.Gd=function(a,b){b=(b||_.Ya).document;return b.querySelector?(a=b.querySelector(a))&&(a=a.nonce||a.getAttribute("nonce"))&&Fd.test(a)?a:"":""}; +_.Hd=String.prototype.repeat?function(a,b){return a.repeat(b)}:function(a,b){return Array(b+1).join(a)};_.Id=2147483648*Math.random()|0; +var Nd,Rd;_.Ld=function(a){return a?new _.Jd(_.Kd(a)):Nb||(Nb=new _.Jd)}; +_.Md=function(a,b,c,d){a=d||a;b=b&&"*"!=b?String(b).toUpperCase():"";if(a.querySelectorAll&&a.querySelector&&(b||c))return a.querySelectorAll(b+(c?"."+c:""));if(c&&a.getElementsByClassName){a=a.getElementsByClassName(c);if(b){d={};for(var e=0,f=0,h;h=a[f];f++)b==h.nodeName&&(d[e++]=h);d.length=e;return d}return a}a=a.getElementsByTagName(b||"*");if(c){d={};for(f=e=0;h=a[f];f++)b=h.className,"function"==typeof b.split&&_.ib(b.split(/\s+/),c)&&(d[e++]=h);d.length=e;return d}return a}; +_.Od=function(a,b){_.mb(b,function(c,d){c&&"object"==typeof c&&c.yi&&(c=c.Cg());"style"==d?a.style.cssText=c:"class"==d?a.className=c:"for"==d?a.htmlFor=c:Nd.hasOwnProperty(d)?a.setAttribute(Nd[d],c):_.ic(d,"aria-")||_.ic(d,"data-")?a.setAttribute(d,c):a[d]=c})};Nd={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",nonce:"nonce",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"}; +_.Pd=function(a){return a?a.parentWindow||a.defaultView:window};_.Sd=function(a,b){var c=b[1],d=_.Qd(a,String(b[0]));c&&("string"===typeof c?d.className=c:Array.isArray(c)?d.className=c.join(" "):_.Od(d,c));21/a&&(a="-0"),b[b.length]=String(a);else if(e===Re)b[b.length]=String(!!Number(a));else{if(e===Qe)return Ve(a.toISOString.call(a),c);if(e===Ue&&Oe(a.length)===Pe){b[b.length]="[";var f=0;for(d=Number(a.length)>>0;f>0;f=e?"\\u"+(e+65536).toString(16).substr(1):32<=e&&65535>=e?d:"\ufffd";b[b.length]='"'}else if("object"===d){b[b.length]="{";d=0;for(f in a)Object.prototype.hasOwnProperty.call(a,f)&&(e=Ve(a[f],c),void 0!==e&&(d++&&(b[b.length]=","),b[b.length]=Ve(f),b[b.length]=":",b[b.length]=e));b[b.length]="}"}else return}return b.join("")}};We=/[\0-\x07\x0b\x0e-\x1f]/; +Xe=/^([^"]*"([^\\"]|\\.)*")*[^"]*"([^"\\]|\\.)*[\0-\x1f]/;Ye=/^([^"]*"([^\\"]|\\.)*")*[^"]*"([^"\\]|\\.)*\\[^\\\/"bfnrtu]/;Ze=/^([^"]*"([^\\"]|\\.)*")*[^"]*"([^"\\]|\\.)*\\u([0-9a-fA-F]{0,3}[^0-9a-fA-F])/;$e=/"([^\0-\x1f\\"]|\\[\\\/"bfnrt]|\\u[0-9a-fA-F]{4})*"/g;af=/-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][-+]?[0-9]+)?/g;bf=/[ \t\n\r]+/g;cf=/[^"]:/;df=/""/g;ef=/true|false|null/g;ff=/00/;gf=/[\{]([^0\}]|0[^:])/;hf=/(^|\[)[,:]|[,:](\]|\}|[,:]|$)/;jf=/[^\[,:][\[\{]/;kf=/^(\{|\}|\[|\]|,|:|0)+/;lf=/\u2028/g; +mf=/\u2029/g; +nf=function(a){a=String(a);if(We.test(a)||Xe.test(a)||Ye.test(a)||Ze.test(a))return!1;var b=a.replace($e,'""');b=b.replace(af,"0");b=b.replace(bf,"");if(cf.test(b))return!1;b=b.replace(df,"0");b=b.replace(ef,"0");if(ff.test(b)||gf.test(b)||hf.test(b)||jf.test(b)||!b||(b=b.replace(kf,"")))return!1;a=a.replace(lf,"\\u2028").replace(mf,"\\u2029");b=void 0;try{b=Me?[Ne(a)]:eval("(function (var_args) {\n return Array.prototype.slice.call(arguments, 0);\n})(\n"+a+"\n)")}catch(c){return!1}return b&&1=== +b.length?b[0]:!1};of=function(){var a=((_.Ya.document||{}).scripts||[]).length;if((void 0===Ke||void 0===Me||Le!==a)&&-1!==Le){Ke=Me=!1;Le=-1;try{try{Me=!!_.Ya.JSON&&'{"a":[3,true,"1970-01-01T00:00:00.000Z"]}'===_.Ya.JSON.stringify.call(_.Ya.JSON,{a:[3,!0,new Date(0)],c:function(){}})&&!0===Ne("true")&&3===Ne('[{"a":3}]')[0].a}catch(b){}Ke=Me&&!Ne("[00]")&&!Ne('"\u0007"')&&!Ne('"\\0"')&&!Ne('"\\v"')}finally{Le=a}}};_.pf=function(a){if(-1===Le)return!1;of();return(Ke?Ne:nf)(a)}; +_.qf=function(a){if(-1!==Le)return of(),Me?_.Ya.JSON.stringify.call(_.Ya.JSON,a):Ve(a)};rf=!Date.prototype.toISOString||"function"!==typeof Date.prototype.toISOString||"1970-01-01T00:00:00.000Z"!==(new Date(0)).toISOString(); +sf=function(){var a=Date.prototype.getUTCFullYear.call(this);return[0>a?"-"+String(1E6-a).substr(1):9999>=a?String(1E4+a).substr(1):"+"+String(1E6+a).substr(1),"-",String(101+Date.prototype.getUTCMonth.call(this)).substr(1),"-",String(100+Date.prototype.getUTCDate.call(this)).substr(1),"T",String(100+Date.prototype.getUTCHours.call(this)).substr(1),":",String(100+Date.prototype.getUTCMinutes.call(this)).substr(1),":",String(100+Date.prototype.getUTCSeconds.call(this)).substr(1),".",String(1E3+Date.prototype.getUTCMilliseconds.call(this)).substr(1), +"Z"].join("")};Date.prototype.toISOString=rf?sf:Date.prototype.toISOString; + +var tf=function(){this.ig=window.console};tf.prototype.log=function(a){this.ig&&this.ig.log&&this.ig.log(a)};tf.prototype.error=function(a){this.ig&&(this.ig.error?this.ig.error(a):this.ig.log&&this.ig.log(a))};tf.prototype.warn=function(a){this.ig&&(this.ig.warn?this.ig.warn(a):this.ig.log&&this.ig.log(a))};tf.prototype.debug=function(){};_.uf=new tf; + +_.Rg=_.tb();_.Sg=_.Cb()||_.qb("iPod");_.Tg=_.qb("iPad");_.Ug=_.wb();_.Vg=_.ub();_.Wg=_.vb()&&!_.Db(); + +_.Xg=function(a,b){for(var c=1;c>=8);b[c++]=e}return b}; +var ah,bh,dh;ah={};bh=null;_.ch=_.fd||_.gd||!_.Wg&&!_.cd&&"function"==typeof _.Ya.atob;_.eh=function(a,b){void 0===b&&(b=0);dh();b=ah[b];for(var c=Array(Math.floor(a.length/3)),d=b[64]||"",e=0,f=0;e>2];h=b[(h&3)<<4|k>>4];k=b[(k&15)<<2|l>>6];l=b[l&63];c[f++]=m+h+k+l}m=0;l=d;switch(a.length-e){case 2:m=a[e+1],l=b[(m&15)<<2]||d;case 1:a=a[e],c[f]=b[a>>2]+b[(a&3)<<4|m>>4]+l+d}return c.join("")}; +_.fh=function(a,b){function c(l){for(;d>4);64!=h&&(b(f<<4&240|h>>2),64!=k&&b(h<<6&192|k))}}; +dh=function(){if(!bh){bh={};for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),b=["+/=","+/","-_=","-_.","-_"],c=0;5>c;c++){var d=a.concat(b[c].split(""));ah[c]=d;for(var e=0;ek?"":0==k?";expires="+(new Date(1970,1,1)).toUTCString():";expires="+(new Date(Date.now()+1E3*k)).toUTCString())+(d?";secure":"")+(null!=e?";samesite="+e:"")}; +_.g.get=function(a,b){for(var c=a+"=",d=(this.ub.cookie||"").split(";"),e=0,f;e>>0);_.Ui=function(a){if("function"===typeof a)return a;a[bj]||(a[bj]=function(b){return a.handleEvent(b)});return a[bj]};_.pi(function(a){Zi=a(Zi)}); +_.cj=function(){_.Ai.call(this);this.xj=new Mi(this);this.nW=this;this.TF=null};_.ab(_.cj,_.Ai);_.cj.prototype[_.Hi]=!0;_.g=_.cj.prototype;_.g.Cm=function(){return this.TF};_.g.fA=_.ba(3);_.g.addEventListener=function(a,b,c,d){_.Ti(this,a,b,c,d)};_.g.removeEventListener=function(a,b,c,d){_.$i(this,a,b,c,d)}; +_.g.dispatchEvent=function(a){var b,c=this.Cm();if(c)for(b=[];c;c=c.Cm())b.push(c);c=this.nW;var d=a.type||a;if("string"===typeof a)a=new _.Di(a,c);else if(a instanceof _.Di)a.target=a.target||c;else{var e=a;a=new _.Di(d,c);_.ui(a,e)}e=!0;if(b)for(var f=b.length-1;!a.xt&&0<=f;f--){var h=a.currentTarget=b[f];e=h.Ir(d,!0,a)&&e}a.xt||(h=a.currentTarget=c,e=h.Ir(d,!0,a)&&e,a.xt||(e=h.Ir(d,!1,a)&&e));if(b)for(f=0;!a.xt&&fthis.Iy&&(this.Iy++,a.next=this.tf,this.tf=a)}; +var sj,tj,rj;_.uj=function(a){a=rj(a);"function"!==typeof _.Ya.setImmediate||_.Ya.Window&&_.Ya.Window.prototype&&!_.qb("Edge")&&_.Ya.Window.prototype.setImmediate==_.Ya.setImmediate?(sj||(sj=tj()),sj(a)):_.Ya.setImmediate(a)}; +tj=function(){var a=_.Ya.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!_.qb("Presto")&&(a=function(){var e=_.Ud("IFRAME");e.style.display="none";document.documentElement.appendChild(e);var f=e.contentWindow;e=f.document;e.open();e.close();var h="callImmediate"+Math.random(),k="file:"==f.location.protocol?"*":f.location.protocol+"//"+f.location.host;e=(0,_.J)(function(l){if(("*"==k||l.origin==k)&&l.data==h)this.port1.onmessage()}, +this);f.addEventListener("message",e,!1);this.port1={};this.port2={postMessage:function(){f.postMessage(h,k)}}});if("undefined"!==typeof a&&!_.sb()){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var e=c.cb;c.cb=null;e()}};return function(e){d.next={cb:e};d=d.next;b.port2.postMessage(0)}}return function(e){_.Ya.setTimeout(e,0)}};rj=_.nj;_.pi(function(a){rj=a}); +var vj=function(){this.UA=this.Iq=null};vj.prototype.add=function(a,b){var c=wj.get();c.set(a,b);this.UA?this.UA.next=c:this.Iq=c;this.UA=c};vj.prototype.remove=function(){var a=null;this.Iq&&(a=this.Iq,this.Iq=this.Iq.next,this.Iq||(this.UA=null),a.next=null);return a};var wj=new qj(function(){return new xj},function(a){return a.reset()}),xj=function(){this.next=this.scope=this.lh=null};xj.prototype.set=function(a,b){this.lh=a;this.scope=b;this.next=null}; +xj.prototype.reset=function(){this.next=this.scope=this.lh=null}; +var yj,zj,Aj,Bj,Dj;zj=!1;Aj=new vj;_.Cj=function(a,b){yj||Bj();zj||(yj(),zj=!0);Aj.add(a,b)};Bj=function(){if(_.Ya.Promise&&_.Ya.Promise.resolve){var a=_.Ya.Promise.resolve(void 0);yj=function(){a.then(Dj)}}else yj=function(){_.uj(Dj)}};Dj=function(){for(var a;a=Aj.remove();){try{a.lh.call(a.scope)}catch(b){_.mj(b)}wj.put(a)}zj=!1}; +var Gj,Hj,Ij;_.Fj=function(a,b){this.Da=0;this.Re=void 0;this.qo=this.rk=this.Db=null;this.sx=this.LC=!1;if(a!=_.li)try{var c=this;a.call(b,function(d){Ej(c,2,d)},function(d){Ej(c,3,d)})}catch(d){Ej(this,3,d)}};Gj=function(){this.next=this.context=this.Jp=this.ht=this.Wl=null;this.Uq=!1};Gj.prototype.reset=function(){this.context=this.Jp=this.ht=this.Wl=null;this.Uq=!1};Hj=new qj(function(){return new Gj},function(a){a.reset()});Ij=function(a,b,c){var d=Hj.get();d.ht=a;d.Jp=b;d.context=c;return d}; +_.Jj=function(a){if(a instanceof _.Fj)return a;var b=new _.Fj(_.li);Ej(b,2,a);return b};_.Kj=function(a){return new _.Fj(function(b,c){c(a)})};_.Mj=function(a,b,c){Lj(a,b,c,null)||_.Cj(_.ki(b,a))};_.Nj=function(a){return new _.Fj(function(b,c){var d=a.length,e=[];if(d)for(var f=function(m,n){d--;e[m]=n;0==d&&b(e)},h=function(m){c(m)},k=0,l;k=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};_.hs=function(a,b,c,d){return Array.prototype.splice.apply(a,gs(arguments,1))};_.is=function(a,b,c){if(null!==a&&b in a)throw Error("j`"+b);a[b]=c};_.Jd.prototype.N=_.fb(1,function(a){return _.ji(this.ub,a)}); +_.js=function(a,b){var c=b||document;if(c.getElementsByClassName)a=c.getElementsByClassName(a)[0];else{c=document;var d=b||c;a=d.querySelectorAll&&d.querySelector&&a?d.querySelector(a?"."+a:""):_.Md(c,"*",a,b)[0]||null}return a||null};_.ks=function(a){var b;if(_.zd&&(b=a.parentElement))return b;b=a.parentNode;return _.ae(b)?b:null};_.ls=function(a){_.Ai.call(this);this.ie=a;this.Rb={}};_.ab(_.ls,_.Ai);var ms=[];_.ls.prototype.V=function(a,b,c,d){return this.Rs(a,b,c,d)}; +_.ls.prototype.Rs=function(a,b,c,d,e){Array.isArray(b)||(b&&(ms[0]=b.toString()),b=ms);for(var f=0;feu(this.Wb[a],b)&&this.Wb[a].push(b)};nu.prototype.removeEventListener=function(a,b){if(!(0<=eu(this.yJ,a)))throw Error("Y`"+a);gu(b)&&this.Wb[a]&&this.Wb[a].length&&(b=eu(this.Wb[a],b),0<=b&&this.Wb[a].splice(b,1))}; +nu.prototype.dispatchEvent=function(a){var b=a.type;if(!(b&&0<=eu(this.yJ,b)))throw Error("$`"+b);if(this.Wb[b]&&this.Wb[b].length)for(var c=this.Wb[b].length,d=0;dt;t+=4)p[t/4]=q[t]<<24|q[t+1]<<16|q[t+2]<<8|q[t+3];for(t=16;80>t;t++)q=p[t-3]^p[t-8]^p[t-14]^p[t-16],p[t]=(q<<1|q>>>31)&4294967295;q=e[0];var v=e[1],r=e[2],w=e[3],A=e[4];for(t=0;80>t;t++){if(40>t)if(20>t){var B=w^v&(r^w);var F=1518500249}else B= +v^r^w,F=1859775393;else 60>t?(B=v&r|w&(v|r),F=2400959708):(B=v^r^w,F=3395469782);B=((q<<5|q>>>27)&4294967295)+B+A+F+p[t]&4294967295;A=w;w=r;r=(v<<30|v>>>2)&4294967295;v=q;q=B}e[0]=e[0]+q&4294967295;e[1]=e[1]+v&4294967295;e[2]=e[2]+r&4294967295;e[3]=e[3]+w&4294967295;e[4]=e[4]+A&4294967295}function c(q,p){if("string"===typeof q){q=unescape(encodeURIComponent(q));for(var t=[],v=0,r=q.length;vm?c(k,56-m):c(k,64-(m-56));for(var t=63;56<=t;t--)f[t]=p&255,p>>>=8;b(f);for(t=p=0;5>t;t++)for(var v=24;0<=v;v-=8)q[p++]=e[t]>>v&255;return q}for(var e=[],f=[],h=[],k=[128],l=1;64>l;++l)k[l]=0;var m,n;a();return{reset:a,update:c,digest:d,Xh:function(){for(var q=d(),p="",t=0;teu(c.Xk[a],b)&&c.Xk[a].push(b))},Xu=function(a){var b=Vu;a&&(b.Xk[a]||(b.Xk[a]=[]))},Yu=function(a,b,c){return b&&a.Xk[b]&&0<=eu(a.Xk[b],c)};_.g=Uu.prototype; +_.g.q3=function(a){var b,c=!!a.source&&(a.source===_.tu||a.source.opener===window);if(b=c?ou.vZ(a.origin):ou.QY(a)){try{var d=_.mu.parse(a.data)}catch(e){cu("Bad event, an error happened when parsing data.");return}if(!c){if(!d||!d.rpcToken||d.rpcToken!=b.Dl){cu("Bad event, no RPC token.");return}if(d.id&&!d.method){c=d;if(a=b.jj[c.id])delete b.jj[c.id],a(c.result,c.error);return}}"fireIdpEvent"!=d.method?cu("Bad IDP event, method unknown."):(a=d.params)&&a.type&&this.NO[a.type]?(d=this.NO[a.type], +c&&!d.qW?cu("Bad IDP event. Source window cannot be a popup."):d.Gq&&!d.Gq.call(this,b,a)?cu("Bad IDP event."):d.sf.call(this,b,a)):cu("Bad IDP event.")}else cu("Bad event, no corresponding Idp Stub.")};_.g.M4=function(a,b){return Yu(this,a.Ab,b.clientId)};_.g.L4=function(a,b){b=b.clientId;return!b||Yu(this,a.Ab,b)};_.g.BW=function(a,b){return Yu(this,a.Ab,b.clientId)};_.g.z2=function(a,b){a.Qm=!0;a.mu=!!b.cookieDisabled;Mu(a);for(b=0;bb;b++)a[b]=Math.floor(256*Math.random())}return _.eh(a,3).substring(0,64)},qv=function(){var a=navigator.userAgent.toLowerCase();return 0>a.indexOf("edge/")&&(-1 +a.indexOf("chrome/")&&0>a.indexOf("crios/")&&0>a.indexOf("safari/")},sv=function(a,b,c){if(!a.xe)throw Error("ta");b?_.Ru(a.xd,a.ue,!0,void 0,c):_.Ru(a.xd,a.ue,!0,a.le,c)},tv=function(a){if(!a.xe)throw Error("ta");return a.ly},uv,vv,wv,xv,yv,zv,Av,Bv,Cv,Ev;_.mv.prototype.QP=_.fb(17,function(a,b){var c=this.xd,d=this.Tb,e=this.ue,f=_.hu(this.Ni);delete f.response_type;_.Ou(c,"getOnlineCode",{clientId:d,loginHint:a,request:f,sessionSelector:e},b)}); +_.kv.prototype.ER=_.fb(16,function(a){tv(this)&&tv(this).access_token&&(this.xd.revoke(this.Tb,tv(this).access_token,a),sv(this,!0))}); +_.kv.prototype.Tr=_.fb(15,function(){var a=this;return function(b){if(b&&b.authResult&&b.authResult.login_hint)if(a.by()&&a.Bq&&(qv()||rv())){b=b.authResult;var c=Date.now(),d=b.expires_in;b={access_token:b.access_token,token_type:b.token_type,login_hint:b.login_hint,expires_in:d,id_token:b.id_token,scope:b.scope,first_issued_at:c,expires_at:c+1E3*d,idpId:a.Ab};a.ly=b;a.dispatchEvent({type:_.jv.CK,idpId:a.Ab,response:b})}else a.wA(b.authResult.login_hint,a.ih||b.authResult.login_hint!=a.le,!0,!0)}}); +_.mv.prototype.Tr=_.fb(14,function(a){var b=this;return function(c){c&&c.authResult&&c.authResult.login_hint?b.Nr(function(d){_.Ru(b.xd,b.ue,d&&d.disabled,c.authResult.login_hint,function(){_.nv(b,c.authResult.login_hint,a)})}):a(c&&c.authResult&&c.authResult.error?c.authResult:c&&c.authResult&&!c.authResult.login_hint?{error:"wrong_response_type"}:{error:"unknown_error"})}});_.ev.prototype.nQ=_.fb(13,function(){this.Tb&&_.Ou(this.xd,"startPolling",{clientId:this.Tb,origin:this.Ad,id:this.Jj})}); +_.Lu.prototype.revoke=_.fb(9,function(a,b,c){_.Ou(this,"revoke",{clientId:a,token:b},c)});_.kv.prototype.revoke=_.fb(8,function(a){_.cv(this,this.ER,[a])});uv=function(){var a=navigator.userAgent,b;if(b=!!a&&-1!=a.indexOf("CriOS"))b=-1,(a=a.match(/CriOS\/(\d+)/))&&a[1]&&(b=parseInt(a[1],10)||-1),b=48>b;return b}; +vv=function(){var a=navigator.userAgent.toLowerCase();if(!(-1a.indexOf("chrome/")&&0>a.indexOf("crios/")&&0>a.indexOf("android")))return!1;var b=RegExp("version/(\\d+)\\.(\\d+)[\\.0-9]*").exec(navigator.userAgent.toLowerCase());if(!b||3>b.length)return!1;a=parseInt(b[1],10);b=parseInt(b[2],10);return 12b.length?!1:14<=parseInt(b[1],10)):b=!1);b&&!a.prompt&&(a.prompt= +"select_account");k+=0>k.indexOf("?")?"?":"&";b=[];for(var m in a)if(a.hasOwnProperty(m)){c=a[m];if(null===c||void 0===c)c="";b.push(encodeURIComponent(m)+"="+encodeURIComponent(c))}return k+b.join("&")}; +xv=function(a,b,c,d){if(!a.Tb)throw Error("ua");a.Jj=c||a.DW||"auth"+Math.floor(1E6*Math.random()+1);b=b||{};b.extraQueryParams=b.extraQueryParams||{};if(!b.extraQueryParams.redirect_uri){var e=a.Ad.split("//");c=b.extraQueryParams;var f=e[0],h=f.indexOf(":");0e)b[d++]=String.fromCharCode(e);else if(191e){var f=a[c++];b[d++]=String.fromCharCode((e&31)<<6|f&63)}else if(239e){f=a[c++];var h=a[c++],k=a[c++];e=((e&7)<<18|(f&63)<<12|(h&63)<<6|k&63)-65536;b[d++]=String.fromCharCode(55296+(e>>10));b[d++]=String.fromCharCode(56320+(e&1023))}else f=a[c++],h=a[c++],b[d++]=String.fromCharCode((e&15)<<12|(f&63)<<6|h&63)}return b.join("")}; +Ev=function(a){var b=[];_.fh(a,function(c){b.push(c)});return b};_.Fv=function(a,b){_.Qh[b||"token"]=a};_.Gv=function(a){delete _.Qh[a||"token"]}; +_.mu={parse:function(a){a=_.pf("["+String(a)+"]");if(!1===a||1!==a.length)throw new SyntaxError("JSON parsing failed.");return a[0]},stringify:function(a){return _.qf(a)}}; +_.mv.prototype.VC=function(a,b){_.cv(this,this.dY,[a,b])};_.mv.prototype.dY=function(a,b){this.xd.VC(this.Tb,a,this.Ni,this.ue,b)}; +_.Lu.prototype.VC=function(a,b,c,d,e){c=_.hu(c);_.Ou(this,"gsi:fetchLoginHint",{clientId:a,loginHint:b,request:c,sessionSelector:d},e)}; +var Hv,Iv=["client_id","cookie_policy","scope"],Jv="client_id cookie_policy fetch_basic_profile hosted_domain scope openid_realm disable_token_refresh login_hint ux_mode redirect_uri state prompt oidc_spec_compliant nonce enable_serial_consent include_granted_scopes response_type session_selection plugin_name ack_extension_date gsiwebsdk".split(" "),Kv=["authuser","after_redirect","access_type","hl"],Lv=["login_hint","prompt"],Mv={clientid:"client_id",cookiepolicy:"cookie_policy"},Nv=["approval_prompt", +"authuser","login_hint","prompt","hd"],Ov=["login_hint","g-oauth-window","status"],Pv=Math.min(_.Be("oauth-flow/authWindowWidth",599),screen.width-20),Qv=Math.min(_.Be("oauth-flow/authWindowHeight",600),screen.height-30); +var Rv=function(a){_.gb.call(this,a)};_.D(Rv,_.gb);Rv.prototype.name="gapi.auth2.ExternallyVisibleError"; +var Sv=function(){};Sv.prototype.select=function(a,b){if(a.sessions&&1==a.sessions.length&&(a=a.sessions[0],a.login_hint)){b(a);return}b()};var Tv=function(){};Tv.prototype.select=function(a,b){if(a.sessions&&a.sessions.length)for(var c=0;cb.indexOf(c)&&delete a[c];return a},Bw=function(a,b){if(!a)throw new Rv("Empty initial options.");for(var c=0;c nickname) that are in progress of saving (e.g. not yet confirmed by the server) + */ + _dirty: {}, + + /** + * Gets the user's nickname if it's available + * @param {String} userId The Base64 string of the user handle + * @returns {string} Returns the user's name if set, otherwise returns FirstName LastName, + * or FirstName if the last name is not set + */ + getNickname: function(userId) { + 'use strict'; + const user = userId in M.u && M.u[userId] || userId === window.u_handle && window.u_attr; + if (user) { + // Set format to FirstName LastName (or just FirstName if the last name is not set) + return String(user.nickname || user.fullname || user.name || user.m).trim(); + } + + return ''; + }, + + /** + * Gets the user's nickname and name if the nickname is available + * @param {String} userId The Base64 string of the user handle + * @returns {String} Returns the display name in format Nickname (FirstName LastName), or FirstName LastName, + * or FirstName if the last name is not set + */ + getNicknameAndName: function(userId) { + + 'use strict'; + + if (M.u && typeof M.u[userId] !== 'undefined') { + // M.u[userId].c === 1 is because we only want those to appear for contacts. + + // Set format to FirstName LastName (or just FirstName if the last name is not set) + var userName = (M.u[userId].name || M.u[userId].m).trim(); + + // Check if a nickname for this contact exists + if (M.u[userId].nickname !== '') { + + // If name is available use format: Nickname (FirstName LastName) + userName = M.u[userId].nickname + ' (' + userName + ')'; + } + + return userName; + } + + return ''; + }, + + /** + * Decrypt contact nicknames stored on the API if they exist + * @param {String} privateAttribute The encrypted u_attr['*!>alias'] attribute data + */ + decryptAndCacheNicknames: function(privateAttribute) { + + 'use strict'; + + try { + // Try decode, decrypt, convert from TLV into a JS object + this.cache = tlvstore.decrypt(privateAttribute); + } + catch (ex) { + this.cache = Object.create(null); + console.error('Failed to decrypt contact nicknames', ex); + } + }, + + /** + * Update nicknames in the UI when an action packet has been received saying they were updated + */ + updateNicknamesFromActionPacket: function() { + + 'use strict'; + + // Get nicknames (*!>alias attribute) + mega.attr.get( + u_handle, // User handle + 'alias', // Attribute name without prefixes + false, // Non public + true, // Non historic + false, // Callback not needed + false, // Context not needed + false, // Chat handle not needed + true // Decode values + ) + .always(function(contactNicknames) { + + // Make sure it existed and decrypted to an object + if (typeof contactNicknames !== 'object') { + return false; + } + + // Loop through all the properties in M.u + M.u.keys().forEach(function(key) { + + // If an active contact + if (typeof M.u[key] !== 'undefined' && M.u[key].h) { + + // Use if set or use empty string so it will get updated in the UI if they had it set before + var newNickname = (typeof contactNicknames[key] !== 'undefined') ? contactNicknames[key] : ''; + // Set the nickname in the UI (will automagically update) + var oldNickname = M.u[key].nickname; + if (oldNickname !== newNickname) { + M.u[key].nickname = newNickname; + M.avatars([key]); + } + + } + }); + }); + }, + + /** + * A dialog to set the contact's nickname + */ + setNicknameDialog: { + + /** Cache of the jQuery selector for the dialog */ + $dialog: null, + + /** The contact's user handle (base64 encoded string) */ + contactUserHandle: null, + + /** + * Initialise the dialog + * @param {String} contactUserHandle The contact's user handle (base64 encoded string) + */ + init: function(contactUserHandle) { + + 'use strict'; + + // Init global selectors + this.$dialog = $('.contact-nickname-dialog'); + this.$megaInput = new mega.ui.MegaInputs($('#nickname-input',this.$dialog)).$input; + + // Set user handle for use later + this.contactUserHandle = contactUserHandle; + + // Init functionality + this.setNicknameDialogTitle(); + this.prefillUserNickname(); + this.initTextSave(); + this.initCancelAndCloseButtons(); + this.initSaveButton(); + this.showDialog(); + this.initInputFocus(); + }, + + /** + * Setup the nickname dialog title + */ + setNicknameDialogTitle: function() { + + 'use strict'; + + var $nicknameDialogTitle = $('#contact-nickname-dialog-title', this.$dialog); + + if (typeof M.u[this.contactUserHandle] === 'undefined' || M.u[this.contactUserHandle].nickname === '') { + $nicknameDialogTitle.text(l.set_nickname_label); + } + else { + $nicknameDialogTitle.text(l.edit_nickname_label); + } + }, + + /** + * Automatically fill in the user's current nickname if it is set + */ + prefillUserNickname: function() { + + 'use strict'; + + var $input = this.$megaInput; + var inputValue = ''; + + // If the contact exists + if (typeof M.u[this.contactUserHandle] !== 'undefined') { + + // If the nickname is set, use that + if (M.u[this.contactUserHandle].nickname !== '') { + inputValue = M.u[this.contactUserHandle].nickname; + } + else { + // Otherwise if the contact details are available, pre-populate with their first and last name + var firstName = M.u[this.contactUserHandle].firstName; + var lastName = M.u[this.contactUserHandle].lastName; + + inputValue = (firstName + ' ' + lastName).trim(); + } + } + + // Show the nickname, name or empty string in the text field + $input.val(inputValue); + }, + + /** + * Initialise the code to bind the save button to enter key + */ + initTextSave: function() { + + 'use strict'; + + var $input = this.$megaInput; + var $saveButton = this.$dialog.find('.save-button'); + + // Set the keyup handler + $input.rebind('keyup.inputchange', function(event) { + + // If Enter key is pressed, trigger Save action + if (event.which === 13) { + $saveButton.trigger('click'); + } + }); + }, + + /** + * Initialise the Cancel and Close buttons + */ + initCancelAndCloseButtons: function() { + + 'use strict'; + + var $cancelButton = this.$dialog.find('.cancel-button'); + var $closeIconButton = this.$dialog.find('button.js-close'); + var $input = this.$megaInput; + var self = this; + + // On click of the Cancel or Close icon + $cancelButton.add($closeIconButton).rebind('click.closeDialog', function() { + + // Clear the entered value + $input.val(''); + + // Close the dialog + self.closeDialog(); + }); + }, + + /** + * Initialise the Save button + */ + initSaveButton: function() { + + 'use strict'; + + var $saveButton = this.$dialog.find('.save-button'); + var $nicknameInput = this.$megaInput; + var contactUserHandle = this.contactUserHandle; + var self = this; + + // On Save button click + $saveButton.rebind('click.saveNickname', function() { + + // A flag for whether to update the API or not. If they entered a blank nickname and that nickname did + // not exist before, then the API won't be updated, but if if did exist before then it will be deleted. + var updateApi = false; + + // Get the nickname and trim it + var nickname = $nicknameInput.val().trim(); + + // If the nickname is empty + if (nickname.length < 1) { + + // If the nickname previously existed, delete it + if (M.u[contactUserHandle].nickname !== '') { + M.u[contactUserHandle].nickname = ''; + M.avatars([contactUserHandle]); + updateApi = true; + } + } + else { + // Set the nickname + M.u[contactUserHandle].nickname = nickname; + M.avatars([contactUserHandle]); + updateApi = true; + } + + // If the API should be updated with the new attribute or have it removed + if (updateApi) { + nicknames._dirty[contactUserHandle] = M.u[contactUserHandle].nickname; + + // Get all the contacts with nicknames + var contactNicknames = self.getNicknamesForAllContacts(); + + // If there are nicknames, save them to a private encrypted attribute + var promise; + if (Object.keys(contactNicknames).length > 0) { + promise = self.saveNicknamesToApi(contactNicknames); + } + else { + promise = self.removeNicknamesFromApi(); + } + promise.always(function() { + // versioned attributes would proxy their second .get and merge requests and the original + // promise would wait before getting resolve/rejected (so that merge/set had finished + // successfully) + delete nicknames._dirty[contactUserHandle]; + }); + } + + // Hide the dialog + self.closeDialog(); + }); + }, + + /** + * Get a list of contact nicknames to be saved + * @returns {Object} Returns an object containing mappings of contact handles to nicknames + */ + getNicknamesForAllContacts: function() { + + 'use strict'; + + var contactNicknames = {}; + + // Loop through the keys in M.u + M.u.keys().forEach(function(key) { + + // If an active contact and they have a nickname, add it + if (typeof M.u[key] !== 'undefined' && M.u[key].nickname !== '') { + contactNicknames[key] = M.u[key].nickname; + } + }); + + return contactNicknames; + }, + + /** + * Save the nicknames object to the API which will be TLV encoded and encrypted + * @param {Object} contactNicknames An object containing mappings of contact handles to nicknames + * @returns {MegaPromise} + */ + saveNicknamesToApi: function(contactNicknames) { + + 'use strict'; + + loadingDialog.show(); + + // Set the attribute API side to *!>alias + return mega.attr.set( + 'alias', // Attribute name + contactNicknames, // Data to save + false, // Set to private and encrypted + true, // Set to non-historic, this won't retain previous values on API server + false, // No callback required + false, // No context required + undefined, // Use default AES_GCM_12_16 encryption mode + true, // Do not use versioning + true // Set to encode values as UTF-8 + ) + .always(function() { + loadingDialog.hide(); + }); + }, + + /** + * Remove the nicknames object from the API + * + * @returns {MegaPromise} + */ + removeNicknamesFromApi: function() { + + 'use strict'; + + loadingDialog.show(); + + // Set the attribute API side to *!>alias + return mega.attr.set( + 'alias', // Attribute name + {}, // Data to save + false, // Set to private and encrypted + true, // Set to non-historic, this won't retain previous values on API server + false, // No callback required + false, // No context required + undefined, // Use default AES_GCM_12_16 encryption mode + true, // Do not use versioning + true // Set to encode values as UTF-8 + ) + .always(function() { + loadingDialog.hide(); + }); + }, + + /** + * When the dialog has opened, put the cursor into the text field + */ + initInputFocus: function() { + + 'use strict'; + + this.$megaInput.trigger('focus'); + }, + + /** + * Show the dialog + */ + showDialog: function() { + + 'use strict'; + + this.$dialog.removeClass('hidden'); + fm_showoverlay(); + }, + + /** + * Close the dialog + */ + closeDialog: function() { + + 'use strict'; + + this.$dialog.addClass('hidden'); + fm_hideoverlay(); + } + } +}; + +(function($) { + + // Default settings + var DEFAULT_SETTINGS = { + // Search settings + method: "GET", + queryParam: "q", + searchDelay: 200, + minChars: 1, + propertyToSearch: "id", + jsonContainer: null, + contentType: "json", + excludeCurrent: false, + excludeCurrentParameter: "x", + // Prepopulation settings + prePopulate: null, + processPrePopulate: false, + // Display settings + hintText: "Type in a search term", + noResultsText: "No results", + searchingText: "Searching...", + deleteText: "×", + animateDropdown: true, + placeholder: null, + theme: null, + zindex: 1200, + resultsLimit: null, + searchDropdown: true, + enableHTML: false, + addAvatar: true, + emailCheck: false, + accountHolder: '', + url: '', + visibleComma: false, + scrollLocation: 'add', + initFocused: true, + /** + * resultsFormatter + * + * Creates contact row for share dialog drop down list. + * Row is consisted of user avatar and two fields one below other + * ------------------------- + * | | upper string | + * | avatar |--------------| + * | | lower string | + * ------------------------- + * We can have 2 different situations depending on contact name + * 1. Contact does NOT have a name. Top field is contact email address + * bottom field is 'Email' string + * 2. Contact does have a name. Top field is a contact name, bottom + * field is a contact email address. + * + * @@param {Object} item + * @returns {String} Html + */ + resultsFormatter: function (item) { + + var id; + var avatar; + var email = item[this.tokenValue]; + var contactName = item[this.propertyToSearch]; + var upperValue = ''; + var lowerValue = ''; + + M.u.forEach(function (contact, contactHandle) { + if (contact.m === email) { + id = contactHandle; + + return false; + } + }); + + if (id) { + contactName = M.getNameByHandle(id); + } + + // Check existance of contact name and arrange upper/lower strings + if ((contactName === email) || (contactName === '')) {// no contact name + upperValue = email; + lowerValue = l[7434];// Email + } + else {// with contact name + upperValue = contactName; + lowerValue = email; + } + + avatar = useravatar.contact(id || email, '', 'span'); + + return ''; + }, + tokenFormatter: function (item) { + + var id; + var avatar; + var email = item[this.tokenValue]; + var comma; + + M.u.forEach(function (contact, contactHandle) { + if (contact.m === email) { + id = contactHandle; + + return false; + } + }); + + avatar = useravatar.contact(id || email, 'search-avatar', 'span'); + comma = ','; + return ''; + }, + // Tokenization settings + tokenLimit: null, + tokenDelimiter: /[ ,;]+/, + preventDoublet: true, + tokenValue: "id", + // Behavioral settings + allowFreeTagging: true, + allowTabOut: false, + autoSelectFirstResult: false, + // Callbacks + onResult: null, + onCachedResult: null, + onAdd: null, + onFreeTaggingAdd: true, + onDelete: null, + onReady: null, + onEmailCheck: null, + onDoublet: null, + onHolder: null, + // Other settings + idPrefix: "token-input-", + // Keep track if the input is currently in disabled mode + disabled: false + }; + + // Default classes to use when theming + var DEFAULT_CLASSES = { + tokenList: "token-input-list", + token: "token-input-token", + tokenDelete: "token-input-delete-token", + selectedToken: "token-input-selected-token", + highlightedToken: "token-input-highlighted-token", + dropdown: "token-input-dropdown", + dropdownItem: "token-input-dropdown-item", + dropdownItem2: "token-input-dropdown-item2", + selectedDropdownItem: "token-input-selected-dropdown-item", + inputToken: "token-input-input-token" + }; + + // Input box position "enum" + var POSITION = { + BEFORE: 0, + AFTER: 1, + END: 2 + }; + + // Keys "enum" + var KEY = { + BACKSPACE: 8, + TAB: 9, + ENTER: 13, + ESCAPE: 27, + SPACE: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + NUMPAD_ENTER: 108, + COMMA: 188, + SEMICOLON: 186 + }; + + var HTML_ESCAPES = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '/': '/' + }; + + var HTML_ESCAPE_CHARS = /[&<>"'\/]/g; + + function coerceToString(val) { + return String((val === null || val === undefined) ? '' : val); + } + + function _escapeHTML(text) { + return coerceToString(text).replace(HTML_ESCAPE_CHARS, function(match) { + return HTML_ESCAPES[match]; + }); + } + + // Additional public (exposed) methods + var methods = { + init: function(url_or_data_or_function, options) { + var settings = $.extend({}, DEFAULT_SETTINGS, options || {}); + + return this.each(function() { + $(this).data("settings", settings); + $(this).data("tokenInputObject", new $.TokenList(this, url_or_data_or_function, settings)); + }); + }, + clear: function() { + if (this.data("tokenInputObject")) { + this.data("tokenInputObject").clear(); + return this; + } + return false; + }, + + // Clears items from multi-input box, UI elements + clearOnCancel: function() { + if (this.data("tokenInputObject")) { + this.data("tokenInputObject").clearOnCancel(); + return this; + } + return false; + }, + add: function(item) { + if (this.data("tokenInputObject")) { + this.data("tokenInputObject").add(item); + return this; + } + return false; + }, + remove: function(item) { + if (this.data("tokenInputObject")) { + this.data("tokenInputObject").remove(item); + return this; + } + return false; + }, + get: function() { + return this.data("tokenInputObject").getTokens(); + }, + getSettings: function() { + return this.data("settings"); + }, + toggleDisabled: function(disable) { + this.data("tokenInputObject").toggleDisabled(disable); + return this; + }, + setOptions: function(options) { + $(this).data("settings", $.extend({}, $(this).data("settings"), options || {})); + return this; + }, + destroy: function() { + if (this.data("tokenInputObject")) { + this.data("tokenInputObject").clear(); + var tmpInput = this; + var closest = this.parent(); + closest.empty(); + tmpInput.show(); + closest.append(tmpInput); + return tmpInput; + } + }, + + // Removes contact from dropdownlist, don't interfere with UI elements + removeFromDDL: function(item) { + + var $settings = {}, + ld, tokenValue; + + if ($(this).data("settings")) { + + $settings = $(this).data("settings"); + ld = $settings.local_data; + tokenValue = $settings.tokenValue; + + // Loop through local data + for (var n in ld) { + if (ld[n][tokenValue] === item[tokenValue]) { + $(this).data("settings").local_data.splice(n, 1); + break; + } + } + } + + return false; + }, + + // Add contacts to drop down list, doesn't interfere with UI elements + addToDDL: function(items) { + + var localData = []; + var tokenValue; + var propertyToSearch; + var found = false; + + if ($(this).data("settings")) { + + localData = $(this).data("settings").local_data; + tokenValue = $(this).data("settings").tokenValue; + propertyToSearch = $(this).data("settings").propertyToSearch; + + // Loop through list of available items + for (var i in items) { + if (items.hasOwnProperty(i)) { + found = false; + + // Loop through list of item currently available in drop down box + for (var n in localData) { + if (localData.hasOwnProperty(n)) { + + // In case that we have item in drop down list, skip and continue search for missing one + if (localData[n][tokenValue] === items[i][tokenValue]) { + found = true; + break; + } + } + } + + // Add missing item to drop down list + if (!found) { + $(this).data("settings").local_data.push({ + id: items[i][tokenValue], + name: items[i][propertyToSearch] + }); + } + } + } + } + + return false; + } + }; + + // Expose the .tokenInput function to jQuery as a plugin + $.fn.tokenInput = function(method) { + // Method calling and initialization logic + if (methods[method]) { + return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); + } + else { + return methods.init.apply(this, arguments); + } + }; + + // TokenList class for each input + $.TokenList = function(input, url_or_data, settings) { + // + // Initialization + // + + // Configure the data source + if (typeof (url_or_data) === "string" || typeof (url_or_data) === "function") { + // Set the url to query against + $(input).data("settings").url = url_or_data; + + // If the URL is a function, evaluate it here to do our initalization work + var url = computeURL(); + + // Make a smart guess about cross-domain if it wasn't explicitly specified + if ($(input).data("settings").crossDomain === undefined && typeof url === "string") { + if (url.indexOf("://") === -1) { + $(input).data("settings").crossDomain = false; + } + else { + $(input).data("settings").crossDomain = (location.href.split(/\/+/g)[1] !== url.split(/\/+/g)[1]); + } + } + } + else if (typeof (url_or_data) === "object") { + + // Set the local data to search through + $(input).data("settings").local_data = url_or_data; + } + + // Build class names + if ($(input).data("settings").classes) { + + // Use custom class names + $(input).data("settings").classes = $.extend({}, DEFAULT_CLASSES, $(input).data("settings").classes); + } + else if ($(input).data("settings").theme) { + + // Use theme-suffixed default class names + $(input).data("settings").classes = {}; + $.each(DEFAULT_CLASSES, function(key, value) { + $(input).data("settings").classes[key] = value + "-" + $(input).data("settings").theme; + }); + } + else { + $(input).data("settings").classes = DEFAULT_CLASSES; + } + + // Save the tokens + var saved_tokens = []; + + // Keep track of the number of tokens in the list + var token_count = 0; + + // Basic cache to save on db hits + var cache = new $.TokenList.Cache(); + + // Keep track of the timeout, old vals + var timeout; + var input_val; + var input_box = $('') + .css({ + outline: "none" + }) + .attr("id", $(input).data("settings").idPrefix + input.id) + const initScroll = SoonFc(() => { + var $wrapper = $(input).closest('.multiple-input'); + + initPerfectScrollbar($wrapper); + + if ($(input).data("settings").initFocused) { + focus_with_timeout(input_box); + } + }); + + // Magic element to help us resize the text input + var input_resizer = $(""); + + var token_list = $("
          ").addClass($(input).data("settings").classes.tokenList); + + function resize_input() { + if (input_val === (input_val = input_box.val())) { + return; + } + // Get width left on the current line + var width_left = token_list.outerWidth() - input_box.offset().left - token_list.offset().left; + // Enter new content into resizer and resize input accordingly + input_resizer.html(_escapeHTML(input_val)); + // Get maximum width, minimum the size of input and maximum the widget's width + input_box.width(Math.min( + token_list.outerWidth() || 30, + Math.max(width_left, input_resizer.outerWidth() + 30) + )); + + initScroll(); + } + + // Create a new text input an attach keyup events + input_box.on('focus', () => { + if ($(input).data("settings").disabled) { + return false; + } + if ($(input).data("settings").visibleComma) { + var $prevItem = input_token.prev(); + if ($prevItem.length && ($prevItem.text().indexOf(',') === -1)) { + $prevItem.text($prevItem.text() + ','); + } + } + token_list.addClass($(input).data("settings").classes.focused); + $('.multiple-input').parent().addClass('active'); + $('.permissions-menu').fadeOut(200); + $('.permissions-icon.active').removeClass('active'); + $('.share-dialog-permissions.active').removeClass('active'); + $('.permissions-menu').removeClass('search-permissions'); + }) + .on('blur', function() { + hide_dropdown(); + if ($(input).data("settings").allowFreeTagging) { + add_freetagging_tokens(); + } + if ($(input).data("settings").visibleComma) { + var $prevItem = input_token.prev(); + if ($prevItem.length) { + $prevItem.text($prevItem.text().replace(',', '')); + } + } + $(this).val(''); + $('.multiple-input').parent().removeClass('active'); + $('.multiple-input *').removeClass('red'); + }) + .on("keyup keydown blur update paste", resize_input) + // Fix of paste issue. These is bug in tokenInut lib. + .rebind("input.testerresize", function() { + $(this).trigger("keydown"); + }) + // keydown instead of keyup to preventDefault. + .on('keydown', function(event) { + /* jshint -W074 */ + + var next_token; + var previous_token; + + switch (event.keyCode) { + case KEY.LEFT: + case KEY.RIGHT: + case KEY.UP: + case KEY.DOWN: + if (this.value.length === 0) { + previous_token = input_token.prev(); + next_token = input_token.next(); + + if ((previous_token.length && previous_token.get(0) === selected_token) || + (next_token.length && next_token.get(0) === selected_token)) { + + // Check if there is a previous/next token and it is selected + if (event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) { + deselect_token($(selected_token), POSITION.BEFORE); + } + else { + deselect_token($(selected_token), POSITION.AFTER); + } + } + else if ((event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) && previous_token.length) { + + // We are moving left, select the previous token if it exists + select_token($(previous_token.get(0))); + } + else if ((event.keyCode === KEY.RIGHT || event.keyCode === KEY.DOWN) && next_token.length) { + + // We are moving right, select the next token if it exists + select_token($(next_token.get(0))); + } + } + else { + + var dropdown_item = null; + + if (event.keyCode === KEY.DOWN || event.keyCode === KEY.RIGHT) { + dropdown_item = $(dropdown).find('li').first(); + + if (selected_dropdown_item) { + dropdown_item = $(selected_dropdown_item).next(); + } + } + else { + dropdown_item = $(dropdown).find('li').last(); + + if (selected_dropdown_item) { + dropdown_item = $(selected_dropdown_item).prev(); + } + } + + var $scrollBlock = dropdown_item.closest('.ps'); + if ($scrollBlock.length) { + $scrollBlock.scrollTop(dropdown_item.position().top); + } + select_dropdown_item(dropdown_item); + } + + break; + + case KEY.BACKSPACE: + + previous_token = input_token.prev(); + + if (this.value.length === 0) { + if (selected_token) { + delete_token($(selected_token)); + hidden_input.change(); + } + else if (previous_token.length) { + delete_token($(previous_token.get(0))); + focus_with_timeout(input_box); + } + // waiting previous search to be finished and prevent show animation. + setTimeout(function() { + hide_dropdown(); + }, $(input).data("settings").searchDelay); + return false; + } + else { + // set a timeout just long enough to let this function finish. + setTimeout(function() { + do_search(); + }, 5); + } + break; + + case KEY.TAB: + case KEY.SPACE: + case KEY.ENTER: + case KEY.NUMPAD_ENTER: + case KEY.COMMA: + case KEY.SEMICOLON: + + // preventDefault to remove default behaviour from the keydown. + event.preventDefault(); + if (this.value.length) { + if (selected_dropdown_item) { + add_token($(selected_dropdown_item).data("tokeninput")); + hidden_input.change(); + } + else { + if ($(input).data("settings").allowFreeTagging) { + if ($(input).data("settings").allowTabOut && $(this).val() === "") { + return true; + } + else { + add_freetagging_tokens(); + } + } + else { + $(this).val(""); + if ($(input).data("settings").allowTabOut) { + return true; + } + } + } + } + + // If users press enter/return on empty input field behave like done/share button is clicked + else if (event.keyCode === KEY.ENTER || event.keyCode === KEY.NUMPAD_ENTER) { + var $addContactBtn; + var cd; + if ($.dialog === "share") { // if it is share dialog + $addContactBtn = $('.share-dialog .dialog-share-button'); + cd = false; + } + else if ($.dialog === "add-user-popup") { // if it is add user dialog. + $addContactBtn = $('.add-user-popup-button'); + cd = true; + } + else { + // FIXME: what is this? + console.warn('Cannot add contact from here...', $.dialog); + return false; + } + + addNewContact($addContactBtn, cd).done(function() { + if ($.dialog === "share") { + var share = new mega.Share(); + share.updateNodeShares(); + } + $('.token-input-token-mega').remove(); + }); + } + + return false; + + case KEY.ESCAPE: + hide_dropdown(); + return true; + + default: + if (String.fromCharCode(event.which)) { + // set a timeout just long enough to let this function finish. + setTimeout(function() { + do_search(); + }, 5); + } + break; + } + }); + + // Keep reference for placeholder + if (settings.placeholder) { + input_box.attr("placeholder", settings.placeholder); + } + + // Keep a reference to the original input box + var hidden_input = $(input) + .hide() + .val("") + .on('focus', function() { + focus_with_timeout(input_box); + }) + .on('blur', function() { + input_box.trigger('blur'); + + //return the object to this can be referenced in the callback functions. + return hidden_input; + }); + + // Keep a reference to the selected token and dropdown item + var selected_token = null; + var selected_token_index = 0; + var selected_dropdown_item = null; + + // The list to store the token items in + token_list.on('click', event => { + var li = $(event.target).closest("li"); + if (li && li.get(0) && $.data(li.get(0), "tokeninput")) { + toggle_select_token(li); + } else { + // Deselect selected token + if (selected_token) { + deselect_token($(selected_token), POSITION.END); + } + + // Focus input box + focus_with_timeout(input_box); + } + }) + .on('mouseover', function(event) { + var li = $(event.target).closest("li"); + if (li && selected_token !== this) { + li.addClass($(input).data("settings").classes.highlightedToken); + } + }) + .on('mouseout', function(event) { + var li = $(event.target).closest("li"); + if (li && selected_token !== this) { + li.removeClass($(input).data("settings").classes.highlightedToken); + } + }) + .insertBefore(hidden_input); + + // The token holding the input box + var input_token = $("
        • ") + .addClass($(input).data("settings").classes.inputToken) + .appendTo(token_list) + .append(input_box); + + // The list to store the dropdown items in + var dropdown = $("
          ") + .addClass($(input).data("settings").classes.dropdown) + .appendTo("body") + .hide(); + + input_resizer + .insertAfter(input_box) + .css({ + position: "absolute", + top: -9999, + left: -9999, + width: "auto", + whiteSpace: "nowrap" + }); + + + // Pre-populate list if items exist + hidden_input.val(""); + var li_data = $(input).data("settings").prePopulate || hidden_input.data("pre"); + + if ($(input).data("settings").processPrePopulate && $.isFunction($(input).data("settings").onResult)) { + li_data = $(input).data("settings").onResult.call(hidden_input, li_data); + } + + if (li_data && li_data.length) { + $.each(li_data, function(index, value) { + insert_token(value); + checkTokenLimit(); + input_box.attr("placeholder", null) + }); + } + + // Check if widget should initialize as disabled + if ($(input).data("settings").disabled) { + toggleDisabled(true); + } + + // Initialization is done + if (typeof ($(input).data("settings").onReady) === "function") { + $(input).data("settings").onReady.call(); + } + + // + // Public functions + // + + this.clear = function() { + token_list.children("li").each(function() { + if ($(this).children("input").length === 0) { + delete_token($(this)); + } + }); + }; + + this.clearOnCancel = function() { + token_list.children("li").each(function() { + if ($(this).children("input").length === 0) { + delete_all_tokens($(this)); + } + }); + }; + + this.add = function(item) { + add_token(item); + }; + + this.remove = function(item) { + token_list.children("li").each(function() { + if ($(this).children("input").length === 0) { + var currToken = $(this).data("tokeninput"); + var match = true; + for (var prop in item) { + if (item[prop] !== currToken[prop]) { + match = false; + break; + } + } + if (match) { + delete_token($(this)); + } + } + }); + }; + + this.getTokens = function() { + return saved_tokens; + }; + + this.toggleDisabled = function(disable) { + toggleDisabled(disable); + }; + + // Resize input to maximum width so the placeholder can be seen + resize_input(); + + // + // Private functions + // + + function escapeHTML(text) { + return $(input).data("settings").enableHTML ? text : _escapeHTML(text); + } + + // Toggles the widget between enabled and disabled state, or according + // to the [disable] parameter. + function toggleDisabled(disable) { + if (typeof disable === 'boolean') { + $(input).data("settings").disabled = disable + } else { + $(input).data("settings").disabled = !$(input).data("settings").disabled; + } + input_box.attr('disabled', $(input).data("settings").disabled); + token_list.toggleClass($(input).data("settings").classes.disabled, $(input).data("settings").disabled); + // if there is any token selected we deselect it + if (selected_token) { + deselect_token($(selected_token), POSITION.END); + } + hidden_input.attr('disabled', $(input).data("settings").disabled); + } + + function checkTokenLimit() { + if ($(input).data("settings").tokenLimit !== null && token_count >= $(input).data("settings").tokenLimit) { + input_box.hide(); + hide_dropdown(); + return; + } + } + + function add_freetagging_tokens() { + + var value = $.trim(input_box.val()).replace(/\s|\n/gi, ''); + var tokens = value.split($(input).data("settings").tokenDelimiter); + + if (tokens.length > 10) { + loadingDialog.pshow(); + } + onIdle(() => { + for (let i = 0; i < tokens.length; i++) { + let token = tokens[i]; + if (token) { + const { onFreeTaggingAdd, tokenValue, propertyToSearch } = $(input).data("settings"); + + if (typeof onFreeTaggingAdd === 'function') { + token = onFreeTaggingAdd.call(hidden_input, token); + } + const object = {}; + object[tokenValue] = object[propertyToSearch] = token; + add_token(object); + } + } + if (tokens.length > 10) { + loadingDialog.phide(); + } + }); + } + + // Inner function to a token to the list + function insert_token(item) { + var $this_token = $($(input).data("settings").tokenFormatter(item)); + var readonly = item.readonly === true ? true : false; + + if (readonly) + $this_token.addClass($(input).data("settings").classes.tokenReadOnly); + + $this_token.addClass($(input).data("settings").classes.token).insertBefore(input_token); + + // The 'delete token' button + if (!readonly) { + $('') + .addClass($(input).data("settings").classes.tokenDelete) + .appendTo($this_token) + .on('click', function() { + if (!$(input).data("settings").disabled && $(input).data("settings").something !== '') { + delete_token($(this).parent()); + hidden_input.change(); + initScroll(); + return false; + } + }); + } + + // Store data on the token + var token_data = item; + $.data($this_token.get(0), "tokeninput", item); + + // Save this token for duplicate checking + saved_tokens = saved_tokens.slice(0, selected_token_index).concat([token_data]).concat(saved_tokens.slice(selected_token_index)); + selected_token_index++; + + // Update the hidden input + update_hidden_input(saved_tokens, hidden_input); + + token_count += 1; + + // Check the token limit + if ($(input).data("settings").tokenLimit !== null && token_count >= $(input).data("settings").tokenLimit) { + input_box.hide(); + hide_dropdown(); + } + + return $this_token; + } + + // Add a token to the token list based on user input + function add_token(item) { + item[$(input).data("settings").tokenValue] = item[$(input).data("settings").tokenValue].toLowerCase(); + var callback = $(input).data("settings").onAdd; + + if ($(input).data("settings").emailCheck) { + + var isEmail = isValidEmail(item[$(input).data("settings").tokenValue]); + + // Prevent further execution if email format is wrong + if (!isEmail) { + var cb = $(input).data("settings").onEmailCheck; + if ($.isFunction(cb)) { + cb.call(hidden_input, item); + } + + return; + } + } + + if ($(input).data("settings").accountHolder) { + if ($(input).data("settings").accountHolder.toLowerCase() === item[$(input).data("settings").tokenValue].toLowerCase()) { + if (settings.scrollLocation === 'add') { + select_token(item); + } + var cb = $(input).data("settings").onHolder; + if ($.isFunction(cb)) { + cb.call(hidden_input, item); + } + + return false; + } + } + + if ($(input).data("settings").preventDoublet) { + + var property = $(input).data("settings").propertyToSearch; + var tokenValue = $(input).data("settings").tokenValue; + var itemFoundType; + var currData = $(input).data("settings").local_data; + for (var k = 0; k < currData.length; k++) { + if (currData[k][property].toLowerCase() === item[tokenValue].toLowerCase()) { + itemFoundType = currData[k].contactType; + break; + } + } + if ((Object.keys(M.opc).length > 0) && (typeof itemFoundType === "undefined")) { + Object.keys(M.opc).forEach(function (g) { + if (M.opc[g].m.toLowerCase() === item[tokenValue].toLowerCase() + && !M.opc[g].hasOwnProperty('dts')) { + itemFoundType = "opc"; + return false; + } + }); + } + + // Prevent further execution if email is duplicated + if (itemFoundType) { + select_token(item); + var cb = $(input).data("settings").onDoublet; + if ($.isFunction(cb)) { + cb.call(hidden_input, item, itemFoundType); + } + + return false; + } + } + + // compare against already added contacts, for shared folder exlusivelly + if ($.inArray(item[$(input).data("settings").tokenValue], $.sharedTokens) !== -1) { + var cb = $(input).data("settings").onDoublet; + if ($.isFunction(cb)) { + cb.call(hidden_input, item); + } + return false; + } + + // check current multi-input list +// if (token_count > 0 && $(input).data("settings").preventDoublet) { + if (token_count > 0) { + var found_existing_token = null; + token_list.children().each(function() { + var existing_token = $(this); + var existing_data = $.data(existing_token.get(0), "tokeninput"); + if (existing_data && existing_data[$(input).data("settings").tokenValue] === item[$(input).data("settings").tokenValue]) { + found_existing_token = existing_token; + return false; + } + }); + + if (found_existing_token) { + if (settings.scrollLocation === 'add') { + select_token(found_existing_token); + } + var cb = $(input).data("settings").onDoublet; + if ($.isFunction(cb)) { + cb.call(hidden_input, item); + } + return; + } + } + + // Insert the new tokens + if ($(input).data("settings").tokenLimit == null || token_count < $(input).data("settings").tokenLimit && isEmail) { + insert_token(item); + + // Remove the placeholder so it's not seen after you've added a token + input_box.attr("placeholder", null); + checkTokenLimit(); + } + + // Clear input box + input_box.val(""); + + // Don't show the help dropdown, they've got the idea + hide_dropdown(); + + // Execute the onAdd callback if defined + if ($.isFunction(callback)) { + callback.call(hidden_input, item); + } + + $(input).data("settings").local_data.push({ + id: item[$(input).data("settings").tokenValue], + name: item[$(input).data("settings").propertyToSearch] + }); + + initScroll(); + }// END of function add_token + + // Select a token in the token list + function select_token(token) { + if (!$(input).data("settings").disabled) { + // Hide input box + input_box.val(""); + + // Hide dropdown if it is visible (eg if we clicked to select token) + hide_dropdown(); + } + } + + // Deselect a token in the token list + function deselect_token(token, position) { + token.removeClass($(input).data("settings").classes.selectedToken); + selected_token = null; + + if (position === POSITION.BEFORE) { + input_token.insertBefore(token); + selected_token_index--; + } else if (position === POSITION.AFTER) { + input_token.insertAfter(token); + selected_token_index++; + } else { + input_token.appendTo(token_list); + selected_token_index = token_count; + } + + // Show the input box and give it focus again + focus_with_timeout(input_box); + } + + // Toggle selection of a token in the token list + function toggle_select_token(token) { + var previous_selected_token = selected_token; + + if (selected_token) { + deselect_token($(selected_token), POSITION.END); + } + + if (previous_selected_token === token.get(0)) { + deselect_token(token, POSITION.END); + } else { + select_token(token); + } + } + + // Delete a token from the token list + function delete_token(token) { + + // Remove the id from the saved list + var token_data = $.data(token.get(0), "tokeninput"), + callback = $(input).data("settings").onDelete, + index = token.prevAll().length; + + if (index > selected_token_index) { + index--; + } + + // Delete the token + token.remove(); + selected_token = null; + + // Show the input box and give it focus again + focus_with_timeout(input_box); + + // Remove this token from the saved list + saved_tokens = saved_tokens.slice(0, index).concat(saved_tokens.slice(index + 1)); + + if (saved_tokens.length === 0) { + input_box.attr("placeholder", settings.placeholder); + } + if (index < selected_token_index) { + selected_token_index--; + } + + // Update the hidden input + update_hidden_input(saved_tokens, hidden_input); + + token_count -= 1; + + if ($(input).data("settings").tokenLimit !== null) { + input_box + .show() + .val(""); + focus_with_timeout(input_box); + } + + // Execute the onDelete callback if defined + if ($.isFunction(callback)) { + callback.call(hidden_input, token_data); + var ld = $(input).data("settings").local_data; + for (var n in ld) { + if (ld[n].id === token_data.id) { + $(input).data("settings").local_data.splice(n, 1); + break; + } + } + } + + initScroll(); + } + + // Delete a token from the token list + function delete_all_tokens(token) { + + // Remove the id from the saved list + var token_data = $.data(token.get(0), "tokeninput"); + + var index = token.prevAll().length; + if (index > selected_token_index) { + index--; + } + + token.remove(); + selected_token = null; + + // Show the input box and give it focus again + focus_with_timeout(input_box); + + // Remove this token from the saved list + saved_tokens = saved_tokens.slice(0, index).concat(saved_tokens.slice(index + 1)); + + if (saved_tokens.length === 0) { + input_box.attr("placeholder", settings.placeholder); + } + if (index < selected_token_index) { + selected_token_index--; + } + + // Update the hidden input + update_hidden_input(saved_tokens, hidden_input); + + token_count -= 1; + + if ($(input).data("settings").tokenLimit !== null) { + input_box + .show() + .val(""); + focus_with_timeout(input_box); + } + + var ld = $(input).data("settings").local_data; + for (var n in ld) { + if (ld[n].id === token_data.id) { + $(input).data("settings").local_data.splice(n, 1); + break; + } + } + } + + // Update the hidden input box value + function update_hidden_input(saved_tokens, hidden_input) { + var token_values = $.map(saved_tokens, function(el) { + if (typeof $(input).data("settings").tokenValue == 'function') + return $(input).data("settings").tokenValue.call(this, el); + + return el[$(input).data("settings").tokenValue]; + }); + hidden_input.val(token_values.join($(input).data("settings").tokenDelimiter)); + + } + + // Hide and clear the results dropdown + function hide_dropdown() { + if ($(input).data("settings").searchDropdown) { + dropdown.hide().empty(); + selected_dropdown_item = null; + } + } + + function show_dropdown() { + if ($(input).data("settings").searchDropdown) { + dropdown + .css({ + position: "absolute", + top: token_list.offset().top + token_list.outerHeight(true), + left: token_list.offset().left, + width: $(input).closest('.multiple-input').width() + 4, + 'z-index': $(input).data("settings").zindex + }) + .show(); + } + } + + function show_dropdown_searching() { + if ($(input).data("settings").searchingText && $(input).data("settings").searchDropdown) { + dropdown.html("

          " + escapeHTML($(input).data("settings").searchingText) + "

          "); + show_dropdown(); + } + else { + hide_dropdown(); + } + } + + function show_dropdown_hint() { + if ($(input).data("settings").hintText && $(input).data("settings").searchDropdown) { + dropdown.html("

          " + escapeHTML($(input).data("settings").hintText) + "

          "); + show_dropdown(); + } + } + + var regexp_special_chars = new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]', 'g'); + function regexp_escape(term) { + return term.replace(regexp_special_chars, '\\$&'); + } + + // Highlight the query part of the search term + function highlight_term(value, term) { + return value.replace( + new RegExp( + "(?![^&;]+;)(?!<[^<>]*)(" + regexp_escape(term) + ")(?![^<>]*>)(?![^&;]+;)", + "gi" + ), function(match, p1) { + return "" + escapeHTML(p1) + ""; + } + ); + } + + function find_value_and_highlight_term(template, value, term) { + return template.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + regexp_escape(value) + ")(?![^<>]*>)(?![^&;]+;)", "g"), highlight_term(value, term)); + } + + // exclude existing tokens from dropdown + function excludeCurrent(results) { + if ($(input).data("settings").excludeCurrent) { + var currentTokens = $(input).data("tokenInputObject").getTokens(), + trimmedList = []; + if (currentTokens.length) { + $.each(results, function(index, value) { + var notFound = true; + $.each(currentTokens, function(cIndex, cValue) { + if (value[$(input).data("settings").tokenValue] + === cValue[$(input).data("settings").tokenValue]) { + notFound = false; + return false; + } + }); + + if (notFound) { + trimmedList.push(value); + } + }); + results = trimmedList; + } + } + + return results; + } + + // Populate the results dropdown with some results + function populate_dropdown(query, results) { + // exclude current tokens if configured + results = excludeCurrent(results); + + if (results && results.length) { + dropdown.empty(); + var dropdown_ul = $("
          '})),this.DDG.templates.feedback_prompt=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="function",l=this.escapeExpression,r=this;function d(e,t){return"btn"}return o=i.if.call(t,t&&t.showYesNo,{hash:{},inverse:r.program(3,(function(e,t){var s,a="";return a+='"}),a),fn:r.program(1,(function(e,t){var s,a="";return a+='"}),a),data:a}),o||0===o?o:""})),this.DDG.templates.footer_mobile=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;return n+=''})),this.DDG.templates.footer=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;return n+='"})),this.DDG.templates.forecast_detail=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="function",l=this.escapeExpression,r=this;function d(e,t){var s,a="";return a+='"}function c(e,t){return"module__weather-warning--red"}function h(e,t){return"has-alert"}function p(e,t){return"module__temperature-units--ie11"}function u(e,t){return"module__temperature-unit--on text--primary"}function m(e,t){var s,a="";return a+='
          '+l(typeof(s=e&&e.hour)===n?s.apply(e):s)+'
          '+l(typeof(s=e&&e.temperature)===n?s.apply(e):s)+'
          ',((s=i.if.call(e,e&&e.precipProbability,{hash:{},inverse:r.noop,fn:r.program(14,f,t),data:t}))||0===s)&&(a+=s),a+="
          "}function g(e,t){return"module__forecast-icon--ie11"}function f(e,t){var i,s="";return s+=''+l(typeof(i=e&&e.precipProbability)===n?i.apply(e):i)+"%"}return o=i.with.call(t,t&&t.items,{hash:{},inverse:r.noop,fn:r.program(1,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.weatherAlert,{hash:{},inverse:r.noop,fn:r.program(2,d,t),data:t}))||0===s)&&(a+=s),a+='
          '+l(typeof(s=e&&e.summary)===n?s.apply(e):s)+'
          '+l(typeof(s=e&&e.location)===n?s.apply(e):s)+'
          ',((s=i.each.call(e,null==(s=e&&e.hours)||!1===s?s:s.labels,{hash:{},inverse:r.noop,fn:r.program(11,m,t),data:t}))||0===s)&&(a+=s),a+='
          ',((s=i.each.call(e,null==(s=e&&e.hours)||!1===s?s:s.mobileLabels,{hash:{},inverse:r.noop,fn:r.program(11,m,t),data:t}))||0===s)&&(a+=s),a+='
          ',((s=i.lp.call(e,"forecast","Humidity",{hash:{},data:t}))||0===s)&&(a+=s),a+=": "+l(typeof(s=e&&e.humidity)===n?s.apply(e):s)+'%',((s=i.lp.call(e,"forecast","Wind",{hash:{},data:t}))||0===s)&&(a+=s),a+=': '+l(typeof(s=e&&e.wind)===n?s.apply(e):s)+'',((s=i.lp.call(e,"expand_text","Show More",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),o||0===o?o:""})),this.DDG.templates.forecast_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="function",l=this.escapeExpression,r=this;function d(e,t){var s,a="";return a+='
          '+l(typeof(s=e&&e.day)===n?s.apply(e):s)+'
          '+l(typeof(s=e&&e.summary)===n?s.apply(e):s)+'
          '+l(typeof(s=e&&e.high)===n?s.apply(e):s)+'°
          '+l(typeof(s=e&&e.low)===n?s.apply(e):s)+"°
          "}function c(e,t){return"module__items-item--selected"}function h(e,t){return"module__more-at--not-en"}return o=i.with.call(t,t&&t.items,{hash:{},inverse:r.noop,fn:r.program(1,(function(e,t){var s,a="";return a+='
          ',((s=i.each.call(e,e&&e.days,{hash:{},inverse:r.noop,fn:r.program(2,d,t),data:t}))||0===s)&&(a+=s),a+='

          ',((s=i.moreAt.call(e,e&&e.moreAtUrl,"Dark Sky",{hash:{hideMoreAtText:1,className:"zci__more-at tx-clr--slate-light js-forecast-module-detail-moreat"},data:t}))||0===s)&&(a+=s),a+='

          '}),a),data:a}),o||0===o?o:""})),this.DDG.templates.free_listings_badge=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},''})),this.DDG.templates.free_listings_divider=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
          '})),this.DDG.templates.free_listings_tooltip=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+="",((o=(i=this.merge(i,e.helpers)).l.call(t,"Items are ranked based on relevance to your search terms and are delivered through Microsoft's Ad Network. Clicks lead directly to merchant landing pages and unlike ads, DuckDuckGo is not compensated for these results.",{hash:{},data:a}))||0===o)&&(n+=o),n+=""})),this.DDG.templates.images_module_thumbnails=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n=this,l="function",r=this.escapeExpression;function d(e,t){return"is-last"}return o=i.each.call(t,t,{hash:{},inverse:n.noop,fn:n.program(1,(function(e,t){var s,a="";return a+=''}),a),data:a}),o||0===o?o:""})),this.DDG.templates.images_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;return n+='
          ',o=i.if.call(t,t&&t.icon_template,{hash:{},inverse:d.program(5,(function(e,t){var s,a="";return a+="",((s=i.l.call(e,"More Images",{hash:{},data:t}))||0===s)&&(a+=s),a+=" ",((s=i.l.call(e,"for",{hash:{},data:t}))||0===s)&&(a+=s),a+=" "+r(typeof(s=e&&e.query)===l?s.apply(e):s)+""}),a),fn:d.program(3,(function(e,t){var s,a="";return a+="",((s=i.l.call(e,"More Images",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+='
          ',((o=i.l.call(t,"More Images",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.keep_extension_alert=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="",l=this;return n+='
          "})),this.DDG.templates.keep_extension_modal=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+="'})),this.DDG.templates.lyrics_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;return n+='
          '+r(typeof(o=t&&t.songTitle)===l?o.apply(t):o)+'
          '+r(typeof(o=t&&t.artist)===l?o.apply(t):o)+"
          ",o=i.if.call(t,t&&t.isExplicit,{hash:{},inverse:d.noop,fn:d.program(1,(function(e,t){var s,a="";return a+='',((s=i.lp.call(e,"lyrics_module","Explicit",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+='
          ',((o=typeof(o=t&&t.lyrics)===l?o.apply(t):o)||0===o)&&(n+=o),n+='
          "})),this.DDG.templates.map_sidebar_footer=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="";return n+=''})),this.DDG.templates.map_sidebar_mobile=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
          \x3c!-- Searchbar gets appended here --\x3e
          Show Map
          '})),this.DDG.templates.map_sidebar=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
          '})),this.DDG.templates.map_type_select=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="",l=this;return n+='"})),this.DDG.templates.mapkit_map=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="",l=this;return n+='
          ',o=i.if.call(t,t&&t.isFrozen,{hash:{},inverse:l.noop,fn:l.program(5,(function(e,t){var s,a="";return a+='
          ',((s=i.l.call(e,"Open Map",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.mapkit_marker=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression;return n+='
          ',o=i.if.call(t,t&&t.number,{hash:{},inverse:this.noop,fn:this.program(1,(function(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.number)===l?i.apply(e):i)+""}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.mapkit_position_picker=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
          '})),this.DDG.templates.mapkit_static_map=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r=this.escapeExpression,d="function";return n+='
          ',o=i.if.call(t,t&&t.showCTA,{hash:{},inverse:l.noop,fn:l.program(3,(function(e,t){var s,a="";return a+='',((s=i.l.call(e,"Open Map",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.mapkit_user_location_control=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='
          "})),this.DDG.templates.mapkit_user_location=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
          '})),this.DDG.templates.maps_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="";return n+='
          '})),this.DDG.templates.module_container=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression;return n+='
          '})),this.DDG.templates.module_image_header=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var s,a="";return a+=''}function h(e,t){var i;return r(typeof(i=e&&e.imageIAURL)===l?i.apply(e):i)}function p(e,t){var i;return r(typeof(i=e&&e.imageURL)===l?i.apply(e):i)}function u(e,t){var i,s="";return s+='title="'+r(typeof(i=e&&e.morePhotosText)===l?i.apply(e):i)+'"'}function m(e,t){var i,s="";return s+=''}function g(e,t){var s;return(s=i.unless.call(e,e&&e.isMapExpanded,{hash:{},inverse:d.noop,fn:d.program(14,f,t),data:t}))||0===s?s:""}function f(e,t){var s,a="";return a+='
          ',((s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[0]),className:"module__header__image--big module__header__image--blur"},data:t}))||0===s)&&(a+=s),a+='',((s=i.l.call(e,"No More Photos",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}function _(e,t){var s;return(s=i.if.call(e,null==(s=e&&e.layout)||!1===s?s:s.layout_4,{hash:{},inverse:d.program(24,k,t),fn:d.program(17,v,t),data:t}))||0===s?s:""}function v(e,t){var s,a="";return a+='
          ',((s=i.if.call(e,null==(s=null==(s=e&&e.images)||!1===s?s:s[1])||!1===s?s:s.url,{hash:{},inverse:d.noop,fn:d.program(18,y,t),data:t}))||0===s)&&(a+=s),a+='
          ',((s=i.if.call(e,null==(s=null==(s=e&&e.images)||!1===s?s:s[2])||!1===s?s:s.url,{hash:{},inverse:d.noop,fn:d.program(20,b,t),data:t}))||0===s)&&(a+=s),a+='
          ',((s=i.if.call(e,null==(s=null==(s=e&&e.images)||!1===s?s:s[3])||!1===s?s:s.url,{hash:{},inverse:d.noop,fn:d.program(22,w,t),data:t}))||0===s)&&(a+=s),a+="
          "}function y(e,t){var s;return(s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[1]),className:"module__header__image--small"},data:t}))||0===s?s:""}function b(e,t){var s;return(s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[2]),className:"module__header__image--small"},data:t}))||0===s?s:""}function w(e,t){var s;return(s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[3]),className:"module__header__image--big"},data:t}))||0===s?s:""}function k(e,t){var s,a="";return((s=i.if.call(e,null==(s=null==(s=e&&e.images)||!1===s?s:s[1])||!1===s?s:s.url,{hash:{},inverse:d.noop,fn:d.program(25,x,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,null==(s=null==(s=e&&e.images)||!1===s?s:s[2])||!1===s?s:s.url,{hash:{},inverse:d.noop,fn:d.program(27,S,t),data:t}))||0===s)&&(a+=s),a}function x(e,t){var s,a="";return a+='
          ',((s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[1]),className:"module__header__image--big"},data:t}))||0===s)&&(a+=s),a+="
          "}function S(e,t){var s,a="";return a+='
          ',((s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[2]),className:"module__header__image--big"},data:t}))||0===s)&&(a+=s),a+="
          "}function D(e,t){var s;return(s=i.unless.call(e,e&&e.hideTitle,{hash:{},inverse:d.noop,fn:d.program(30,M,t),data:t}))||0===s?s:""}function M(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.morePhotosText)===l?i.apply(e):i)+""}return n+='
          ',o=i.if.call(t,t&&t.layout,{hash:{},inverse:d.noop,fn:d.program(3,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.isMapExpanded,{hash:{},inverse:d.program(11,m,t),fn:d.program(4,c,t),data:t}))||0===s)&&(a+=s),a+='
          '}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.module_placeholder=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='
          '})),this.DDG.templates.no_directions_results=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression;return n+='
          "})),this.DDG.templates.no_map_results=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression;return n+='

          ',((o=i.lp.call(t,"noresults","No %s found for %s%s%s.",t&&t.resultType,"",t&&t.query,"",{hash:{},data:a}))||0===o)&&(n+=o),n+='

          ',((o=i.lp.call(t,"noresults","Suggestions:",{hash:{},data:a}))||0===o)&&(n+=o),n+='

          • ',((o=i.lp.call(t,"noresults","Make sure all words are spelled correctly.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",((o=i.lp.call(t,"noresults","Try different keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",((o=i.lp.call(t,"noresults","Try more general keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",((o=i.lp.call(t,"noresults","Try fewer keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+='

          ',((o=i.lp.call(t,"noresults","Show Web Results",{hash:{},data:a}))||0===o)&&(n+=o),n+="

          "})),this.DDG.templates.no_more_results=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='

          ',((o=(i=this.merge(i,e.helpers)).lp.call(t,"noresults","No more results found for %s%s%s.","",t&&t.query,"",{hash:{},data:a}))||0===o)&&(n+=o),n+='

          ',((o=i.lp.call(t,"noresults","Suggestions:",{hash:{},data:a}))||0===o)&&(n+=o),n+='

          • ',((o=i.lp.call(t,"noresults","Make sure all words are spelled correctly.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",((o=i.lp.call(t,"noresults","Try different keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",((o=i.lp.call(t,"noresults","Try more general keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",((o=i.lp.call(t,"noresults","Try fewer keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.no_results=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression,r=this;function d(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"noresults","Show Web Results",{hash:{},data:t}))||0===s)&&(a+=s),a+="

          "}function c(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"noresults","Suggestions:",{hash:{},data:t}))||0===s)&&(a+=s),a+='

          • ',((s=i.lp.call(e,"noresults","Make sure all words are spelled correctly.",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          • ",((s=i.lp.call(e,"noresults","Try different keywords.",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          • ",((s=i.lp.call(e,"noresults","Try more general keywords.",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          • ",((s=i.lp.call(e,"noresults","Try fewer keywords.",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.if.call(e,e&&e.showRetryMessage,{hash:{},inverse:r.noop,fn:r.program(9,h,t),data:t}))||0===s)&&(a+=s),a}function h(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"noresults","%sClick here%s to try again, if you think there should be results for this search.",'',"",{hash:{},data:t}))||0===s)&&(a+=s),a+="

          "}return n+='

          ',((o=i.lp.call(t,"noresults","No %s found for %s%s%s.",t&&t.resultType,"",t&&t.query,"",{hash:{},data:a}))||0===o)&&(n+=o),n+="

          ",o=i.if.call(t,t&&t.resetFilters,{hash:{},inverse:r.program(5,(function(e,t){var s;return(s=i.if.call(e,e&&e.showWebLink,{hash:{},inverse:r.program(8,c,t),fn:r.program(6,d,t),data:t}))||0===s?s:""}),a),fn:r.program(3,(function(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"noresults","%sReset filters %s",'',"",{hash:{},data:t}))||0===s)&&(a+=s),a+="

          "}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.open_in_app=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='"})),this.DDG.templates.place_detail=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var s;return(s=i.renderStars.call(e,e&&e.ratingClass,{hash:{},data:t}))||0===s?s:""}function h(e,t){return'target="_blank" rel="noopener"'}function p(e,t){return" · "}function u(e,t){var s,a="";return((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textStatus,{hash:{},inverse:d.noop,fn:d.program(26,m,t),data:t}))||0===s)&&(a+=s),a+=r(typeof(s=e&&e.categories)===l?s.apply(e):s)}function m(e,t){return' · '}function g(e,t){var i,s="";return s+='

          '+r(typeof(i=e&&e.description)===l?i.apply(e):i)+"

          "}function f(e,t){return' target="_blank" rel="noopener"'}function _(e,t){var s,a="";return a+='
        • ',((s=i.lp.call(e,"maps_places","Call",{hash:{},data:t}))||0===s)&&(a+=s),a+="
        • "}function v(e,t){var s;return(s=i.unless.call(e,e&&e.showAttribution,{hash:{},inverse:d.noop,fn:d.program(44,y,t),data:t}))||0===s?s:""}function y(e,t){var s,a="";return a+='

          "}function b(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"maps_places","Hours",{hash:{},data:t}))||0===s)&&(a+=s),a+=': '+r(typeof(s=null==(s=e&&e.hoursStatus)||!1===s?s:s.textStatus)===l?s.apply(e):s)+"",((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textHour,{hash:{},inverse:d.noop,fn:d.program(18,p,t),data:t}))||0===s)&&(a+=s),a+='',((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textHour,{hash:{},inverse:d.noop,fn:d.program(47,w,t),data:t}))||0===s)&&(a+=s),a+=' 

          '}function w(e,t){var i,s="";return s+=r(typeof(i=null==(i=e&&e.hoursStatus)||!1===i?i:i.textHour)===l?i.apply(e):i)+" "}function k(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"maps_places","Address",{hash:{},data:t}))||0===s)&&(a+=s),a+=": "+r(typeof(s=e&&e.address)===l?s.apply(e):s)+"

          "}function x(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"maps_places","Phone",{hash:{},data:t}))||0===s)&&(a+=s),a+=': '+r(typeof(s=e&&e.displayPhone)===l?s.apply(e):s)+"

          "}function S(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"maps_places","Menu",{hash:{},data:t}))||0===s)&&(a+=s),a+=': "+r(typeof(s=e&&e.viewOnExternalServiceText)===l?s.apply(e):s)+"

          "}function D(e,t){var s,a="";return((s=i.if.call(e,e&&e.showAttribution,{hash:{},inverse:d.noop,fn:d.program(56,M,t),data:t}))||0===s)&&(a+=s),a+=" "}function M(e,t){var s,a="";return a+='

          ',((s=i.favicon.call(e,e&&e.url,{hash:{},data:t}))||0===s)&&(a+=s),a+=" "+r(typeof(s=e&&e.moreAtExternalServiceText)===l?s.apply(e):s)+"

          "}function C(e,t){var s;return(s=i.unless.call(e,e&&e.expanded,{hash:{},inverse:d.noop,fn:d.program(58,T,t),data:t}))||0===s?s:""}function T(e,t){return" is-hidden"}function L(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"maps_places","Hours",{hash:{},data:t}))||0===s)&&(a+=s),a+=': '+r(typeof(s=null==(s=e&&e.hoursStatus)||!1===s?s:s.textStatus)===l?s.apply(e):s)+"",((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textHour,{hash:{},inverse:d.noop,fn:d.program(18,p,t),data:t}))||0===s)&&(a+=s),a+='',((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textHour,{hash:{},inverse:d.noop,fn:d.program(64,I,t),data:t}))||0===s)&&(a+=s),a+=' 

          '}function I(e,t){var i;return r(typeof(i=null==(i=e&&e.hoursStatus)||!1===i?i:i.textHour)===l?i.apply(e):i)}function $(e,t,s){var a,o="";return o+='

          ',((a=i.if.call(e,e&&e.ratingImage,{hash:{},inverse:d.program(80,j,t),fn:d.program(78,O,t),data:t}))||0===a)&&(o+=a),o+=''+r(typeof(a=e&&e.formattedDate)===l?a.apply(e):a)+'

          '+r(typeof(a=e&&e.excerpt)===l?a.apply(e):a)+' "+r(typeof(a=s&&s.moreOnExternalServiceText)===l?a.apply(e):a)+"

          "}function E(e,t){return'class="review__user__url--fallback"'}function A(e,t){var i;return r(typeof(i=null==(i=e&&e.user)||!1===i?i:i.url)===l?i.apply(e):i)}function P(e,t){var i;return r(typeof(i=e&&e.url)===l?i.apply(e):i)}function R(e,t){return' target="_blank" rel="noopener" '}function V(e,t){var s,a="";return a+=''}function O(e,t){var s="";return s+=''}function j(e,t){var s,a="";return a+=" ",((s=i.if.call(e,e&&e.ratingClass,{hash:{},inverse:d.noop,fn:d.program(12,c,t),data:t}))||0===s)&&(a+=s),a}function H(e,t){var i,s="";return s+='"}return n+='

          ',o=i.if.call(t,t&&t.isMapExpanded,{hash:{},inverse:d.program(7,(function(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.name)===l?i.apply(e):i)+""}),a),fn:d.program(5,(function(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.name)===l?i.apply(e):i)+""}),a),data:a}),(o||0===o)&&(n+=o),n+='

          ',o=i.if.call(t,t&&t.ratingImage,{hash:{},inverse:d.program(11,(function(e,t){var s;return(s=i.if.call(e,e&&e.ratingClass,{hash:{},inverse:d.noop,fn:d.program(12,c,t),data:t}))||0===s?s:""}),a),fn:d.program(9,(function(e,t){var s="";return s+=''}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.numberOfReviews,{hash:{},inverse:d.noop,fn:d.program(14,(function(e,t){var s,a="";return a+='"+r(typeof(s=e&&e.source)===l?s.apply(e):s)+" ("+r(typeof(s=e&&e.numberOfReviews)===l?s.apply(e):s)+")"}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.priceSymbol,{hash:{},inverse:d.noop,fn:d.program(17,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.numberOfReviews,{hash:{},inverse:d.noop,fn:d.program(18,p,t),data:t}))||0===s)&&(a+=s),a+=''+r(typeof(s=e&&e.priceSymbol)===l?s.apply(e):s)+""}),a),data:a}),(o||0===o)&&(n+=o),n+='

          ',o=i.if.call(t,null==(o=t&&t.hoursStatus)||!1===o?o:o.textStatus,{hash:{},inverse:d.noop,fn:d.program(20,(function(e,t){var i,s="";return s+=''+r(typeof(i=null==(i=e&&e.hoursStatus)||!1===i?i:i.textStatus)===l?i.apply(e):i)+""}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.showSubtitlePlaceholder,{hash:{},inverse:d.program(24,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.categories,{hash:{},inverse:d.noop,fn:d.program(25,u,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.description,{hash:{},inverse:d.noop,fn:d.program(28,g,t),data:t}))||0===s)&&(a+=s),a}),a),fn:d.program(22,(function(e,t){return'

          '}),a),data:a}),(o||0===o)&&(n+=o),n+="

          ",o=i.if.call(t,t&&t.showTabs,{hash:{},inverse:d.noop,fn:d.program(30,(function(e,t){var s,a="";return a+='
          ',((s=i.lp.call(e,"maps_places","Overview",{hash:{},data:t}))||0===s)&&(a+=s),a+='
          ',((s=i.lp.call(e,"maps_places","Reviews",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),n+='
            ',o=i.if.call(t,t&&t.website,{hash:{},inverse:d.noop,fn:d.program(34,(function(e,t){var s,a="";return a+='
          • ',((s=i.lp.call(e,"maps_places","Website",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          • "}),a),data:a}),(o||0===o)&&(n+=o),n+='
          • ',((o=i.lp.call(t,"maps_places","Directions",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",o=i.if.call(t,t&&t.showMapCta,{hash:{},inverse:d.program(39,(function(e,t){var s;return(s=i.if.call(e,e&&e.phone,{hash:{},inverse:d.noop,fn:d.program(40,_,t),data:t}))||0===s?s:""}),a),fn:d.program(37,(function(e,t){var s,a="";return a+='
          • ',((s=i.l.call(e,"Map",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          • "}),a),data:a}),(o||0===o)&&(n+=o),n+="
          ",o=i.if.call(t,t&&t.isMobile,{hash:{},inverse:d.noop,fn:d.program(42,(function(e,t){var s,a="";return a+='
          ',((s=i.if.call(e,e&&e.url,{hash:{},inverse:d.noop,fn:d.program(43,v,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.hoursToday,{hash:{},inverse:d.noop,fn:d.program(46,b,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.address,{hash:{},inverse:d.noop,fn:d.program(49,k,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.phone,{hash:{},inverse:d.noop,fn:d.program(51,x,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.menuURL,{hash:{},inverse:d.noop,fn:d.program(53,S,t),data:t}))||0===s)&&(a+=s),((s=i.unless.call(e,e&&e.reviews,{hash:{},inverse:d.noop,fn:d.program(55,D,t),data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),n+='
          ',((o=i.if.call(t,t&&t.url,{hash:{},inverse:d.noop,fn:d.program(43,v,a),data:a}))||0===o)&&(n+=o),o=i.unless.call(t,t&&t.isMobile,{hash:{},inverse:d.noop,fn:d.program(62,(function(e,t){var s,a="";return a+='
          ',((s=i.if.call(e,e&&e.address,{hash:{},inverse:d.noop,fn:d.program(49,k,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.phone,{hash:{},inverse:d.noop,fn:d.program(51,x,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.hoursToday,{hash:{},inverse:d.noop,fn:d.program(63,L,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.menuURL,{hash:{},inverse:d.noop,fn:d.program(53,S,t),data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.reviews,{hash:{},inverse:d.noop,fn:d.program(66,(function(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"maps_places","What people say:",{hash:{},data:t}))||0===s)&&(a+=s),a+='

          ',((s=i.each.call(e,e&&e.reviews,{hash:{},inverse:d.noop,fn:d.programWithDepth(67,$,t,e),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.if.call(e,e&&e.reviewsURL,{hash:{},inverse:d.noop,fn:d.program(82,H,t),data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.showAttribution,{hash:{},inverse:d.noop,fn:d.program(84,(function(e,t){var s,a="";return a+='

          ",((s=i.favicon.call(e,e&&e.url,{hash:{},data:t}))||0===s)&&(a+=s),a+=" "+r(typeof(s=e&&e.moreAtExternalServiceText)===l?s.apply(e):s)+"

          "}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.place_header=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.morePhotosText)===l?i.apply(e):i)+""}return n+='
          ',o=i.if.call(t,t&&t.image,{hash:{},inverse:d.noop,fn:d.program(3,(function(e,t){var s,a="";return a+='',((s=i.unless.call(e,e&&e.isScrapedImage,{hash:{},inverse:d.noop,fn:d.program(4,c,t),data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+='
          '})),this.DDG.templates.place_hours=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){return"place-hours__item--current"}function h(e,t){var i;return r(typeof(i=e&&e.hours)===l?i.apply(e):i)}function p(e,t){var s;return(s=i.l.call(e,"Closed",{hash:{},data:t}))||0===s?s:""}return n+='"})),this.DDG.templates.place_list_item=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression,r="function",d=this;function c(e,t){var s="";return s+=''}function h(e,t){var s;return(s=i.if.call(e,e&&e.ratingClass,{hash:{},inverse:d.noop,fn:d.program(9,p,t),data:t}))||0===s?s:""}function p(e,t){var s;return(s=i.renderStars.call(e,e&&e.ratingClass,{hash:{},data:t}))||0===s?s:""}function u(e,t){var i,s="";return s+=l(typeof(i=e&&e.source)===r?i.apply(e):i)+" ("+l(typeof(i=e&&e.numberOfReviews)===r?i.apply(e):i)+")"}function m(e,t){var s,a="";return((s=i.if.call(e,e&&e.priceSymbol,{hash:{},inverse:d.noop,fn:d.program(14,g,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.categories,{hash:{},inverse:d.noop,fn:d.program(17,_,t),data:t}))||0===s)&&(a+=s),a}function g(e,t){var s,a="";return((s=i.if.call(e,e&&e.numberOfReviews,{hash:{},inverse:d.noop,fn:d.program(15,f,t),data:t}))||0===s)&&(a+=s),a+=l(typeof(s=e&&e.priceSymbol)===r?s.apply(e):s)}function f(e,t){return" · "}function _(e,t){var i,s="";return s+=" · "+l(typeof(i=e&&e.categories)===r?i.apply(e):i)}function v(e,t){var s,a="";return a+='
        • ',((s=i.if.call(e,e&&e.priceSymbol,{hash:{},inverse:d.noop,fn:d.program(21,y,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.categories,{hash:{},inverse:d.noop,fn:d.program(23,b,t),data:t}))||0===s)&&(a+=s),a+="
        • "}function y(e,t){var i;return l(typeof(i=e&&e.priceSymbol)===r?i.apply(e):i)}function b(e,t){var s,a="";return((s=i.if.call(e,e&&e.priceSymbol,{hash:{},inverse:d.noop,fn:d.program(15,f,t),data:t}))||0===s)&&(a+=s),a+=l(typeof(s=e&&e.categories)===r?s.apply(e):s)}function w(e,t){var i,s="";return s+=" · "+l(typeof(i=e&&e.distanceStr)===r?i.apply(e):i)}function k(e,t){var i,s="";return s+=" · "+l(typeof(i=null==(i=e&&e.hoursStatus)||!1===i?i:i.textHour)===r?i.apply(e):i)}return n+='
          ',o=i.if.call(t,t&&t.image,{hash:{},inverse:d.noop,fn:d.program(1,(function(e,t){var s="";return s+='
          '}),a),data:a}),(o||0===o)&&(n+=o),n+='

          ',o=i.if.call(t,t&&t.number,{hash:{},inverse:d.noop,fn:d.program(3,(function(e,t){var i,s="";return s+=l(typeof(i=e&&e.number)===r?i.apply(e):i)+". "}),a),data:a}),(o||0===o)&&(n+=o),n+=l(typeof(o=t&&t.name)===r?o.apply(t):o)+"

          ",o=i.if.call(t,t&&t.rating,{hash:{},inverse:d.noop,fn:d.program(5,(function(e,t){var s,a="";return a+='

          ',((s=i.if.call(e,e&&e.ratingImage,{hash:{},inverse:d.program(8,h,t),fn:d.program(6,c,t),data:t}))||0===s)&&(a+=s),a+='',((s=i.if.call(e,e&&e.numberOfReviews,{hash:{},inverse:d.noop,fn:d.program(11,u,t),data:t}))||0===s)&&(a+=s),((s=i.unless.call(e,e&&e.showPriceCategoryNewLine,{hash:{},inverse:d.noop,fn:d.program(13,m,t),data:t}))||0===s)&&(a+=s),a+="

          "}),a),data:a}),(o||0===o)&&(n+=o),n+='
            ',o=i.if.call(t,t&&t.showPriceCategoryNewLine,{hash:{},inverse:d.noop,fn:d.program(19,(function(e,t){var s;return(s=i.if.call(e,e&&e.hasPriceOrCategory,{hash:{},inverse:d.noop,fn:d.program(20,v,t),data:t}))||0===s?s:""}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.shortAddress,{hash:{},inverse:d.noop,fn:d.program(25,(function(e,t){var s,a="";return a+='
          • '+l(typeof(s=e&&e.shortAddress)===r?s.apply(e):s),((s=i.if.call(e,e&&e.distanceStr,{hash:{},inverse:d.noop,fn:d.program(26,w,t),data:t}))||0===s)&&(a+=s),a+="
          • "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.addressLine2,{hash:{},inverse:d.noop,fn:d.program(28,(function(e,t){var i,s="";return s+='
          • '+l(typeof(i=e&&e.addressLine2)===r?i.apply(e):i)+"
          • "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.hoursToday,{hash:{},inverse:d.noop,fn:d.program(30,(function(e,t){var s,a="";return a+='
          • '+l(typeof(s=null==(s=e&&e.hoursStatus)||!1===s?s:s.textStatus)===r?s.apply(e):s)+"",((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textHour,{hash:{},inverse:d.noop,fn:d.program(31,k,t),data:t}))||0===s)&&(a+=s),a+="
          • "}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.place_snippet=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.title)===l?i.apply(e):i)+""}function h(e,t){var i;return r(typeof(i=e&&e.title)===l?i.apply(e):i)}return n+='

          '+r(typeof(o=t&&t.name)===l?o.apply(t):o)+""+r(typeof(o=t&&t.infoType)===l?o.apply(t):o)+"

          "})),this.DDG.templates.places_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r=this.escapeExpression;return n+='
          ',((o=i.if.call(t,t&&t.isSingle,{hash:{},inverse:l.noop,fn:l.program(5,(function(e,t){return'
          >
          Show More
          '}),a),data:a}))||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.places_multiple=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='
          ',o=(i=this.merge(i,e.helpers)).if.call(t,t&&t.isMobile,{hash:{},inverse:this.program(3,(function(e,t){var s,a="";return a+='
          ',((s=i.l.call(e,"More Places",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}),a),fn:this.program(1,(function(e,t){var s,a="";return a+='
          >
          ',((s=i.l.call(e,"More Places",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.places_single_map=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='
          ',((o=(i=this.merge(i,e.helpers)).if.call(t,t&&t.showPlaceholder,{hash:{},inverse:this.noop,fn:this.program(1,(function(e,t){return'
          '}),a),data:a}))||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.places_single=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
          '})),this.DDG.templates.react_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="";return n+='
          '})),this.DDG.templates.region_filter_modal_items=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r="function",d=this.escapeExpression;function c(e,t){return''}function h(e,t){return"is-selected"}return o=i.if.call(t,t&&t.showListHeader,{hash:{},inverse:l.noop,fn:l.program(1,(function(e,t){var s,a="";return a+='"}),a),data:a}),(o||0===o)&&(n+=o),o=i.each.call(t,t&&t.regions,{hash:{},inverse:l.noop,fn:l.program(3,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.showDivider,{hash:{},inverse:l.noop,fn:l.program(4,c,t),data:t}))||0===s)&&(a+=s),a+='"}),a),data:a}),(o||0===o)&&(n+=o),n})),this.DDG.templates.region_filter_modal=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this;function r(e,t){var s,a="";return a+='',((s=i.l.call(e,"Clear All",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}return n+=''})),this.DDG.templates.region_filter=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r=this.escapeExpression;function d(e,t){return"has-inactive-region"}function c(e,t){return"is-on"}return n+='"})),this.DDG.templates.related_searches_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var i,s="";return s+='"}return((o=i.if.call(t,t&&t.isAtBottom,{hash:{},inverse:d.program(3,(function(e,t){return'"}function D(e,t){var s,a="";return a+="
          ",((s=i.lp.call(e,"Sports module","OT",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}function M(e,t){var s;return(s=i.each.call(e,null==(s=e&&e.game)||!1===s?s:s.overtimePeriods,{hash:{},inverse:r.noop,fn:r.program(31,C,t),data:t}))||0===s?s:""}function C(e,t){var s,a="";return a+="
          ",((s=i.lp.call(e,"Sports module","OT%s",e,{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}function T(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.scoring)||!1===i?i:i[0])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function L(e,t){return" — "}function I(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.scoring)||!1===i?i:i[1])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function $(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.scoring)||!1===i?i:i[2])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function E(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.scoring)||!1===i?i:i[3])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function A(e,t){var s,a="";return a+="
          ",((s=i.if.call(e,e&&e.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(44,P,t),data:t}))||0===s)&&(a+=s),a+="
          "}function P(e,t){var i,s="";return s+=" "+l(typeof(i=e&&e.points)===n?i.apply(e):i)+" "}function R(e,t){var i,s="";return s+="
          "+l(typeof(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.points)===n?i.apply(e):i)+"
          "}function V(e,t){var i,s="";return s+="
          "+l(typeof(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.points)===n?i.apply(e):i)+"
          "}function O(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.scoring)||!1===i?i:i[0])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function j(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.scoring)||!1===i?i:i[1])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function H(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.scoring)||!1===i?i:i[2])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function G(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.scoring)||!1===i?i:i[3])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function F(e,t){var i,s="";return s+="
          "+l(typeof(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.points)===n?i.apply(e):i)+"
          "}function U(e,t){var i,s="";return s+="
          "+l(typeof(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.points)===n?i.apply(e):i)+""}function B(e,t){return"game-card--multiple-overtimes"}function N(e,t){var s,a="";return a+="
          ",((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.hasSuspendedStatus,{hash:{},inverse:r.program(7,p,t),fn:r.program(5,h,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.belongsToTournament,{hash:{},inverse:r.noop,fn:r.program(9,u,t),data:t}))||0===s)&&(a+=s),a+=l(typeof(s=null==(s=e&&e.game)||!1===s?s:s.timeAndStatus)===n?s.apply(e):s)+'
          '}function q(e,t){var s,a="";return a+="
          ",((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.belongsToTournament,{hash:{},inverse:r.noop,fn:r.program(68,z,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.hasSuspendedStatus,{hash:{},inverse:r.program(72,Y,t),fn:r.program(70,W,t),data:t}))||0===s)&&(a+=s),a+='
          1
          2
          3
          4
          ",((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.hasSingleOvertime,{hash:{},inverse:r.noop,fn:r.program(28,D,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.hasMultipleOvertimes,{hash:{},inverse:r.noop,fn:r.program(30,M,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.lp.call(e,"Sports module","Total",{hash:{},data:t}))||0===s)&&(a+=s),a+='
          ',((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.scoring)||!1===s?s:s[0])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(33,T,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.scoring)||!1===s?s:s[1])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(37,I,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.scoring)||!1===s?s:s[2])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(39,$,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.scoring)||!1===s?s:s[3])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(41,E,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.each.call(e,null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.overtimeScoring,{hash:{},inverse:r.noop,fn:r.program(43,A,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.winner,{hash:{},inverse:r.program(48,V,t),fn:r.program(46,R,t),data:t}))||0===s)&&(a+=s),a+='
          ',((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.scoring)||!1===s?s:s[0])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(50,O,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.scoring)||!1===s?s:s[1])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(52,j,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.scoring)||!1===s?s:s[2])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(54,H,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.scoring)||!1===s?s:s[3])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(56,G,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.each.call(e,null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.overtimeScoring,{hash:{},inverse:r.noop,fn:r.program(43,A,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.winner,{hash:{},inverse:r.program(75,K,t),fn:r.program(58,F,t),data:t}))||0===s)&&(a+=s),a+="
          "}function z(e,t){var s,a="";return a+="",((s=i.lp.call(e,"Sports module","Game %s",null==(s=e&&e.game)||!1===s?s:s.numberWithinSeries,{hash:{},data:t}))||0===s)&&(a+=s),a+=" • "}function W(e,t){var i,s="";return s+=''+l(typeof(i=null==(i=e&&e.game)||!1===i?i:i.statusFormatted)===n?i.apply(e):i)+""}function Y(e,t){var s,a="";return a+='',((s=i.ifEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.status,"halftime",{hash:{},inverse:r.program(23,k,t),fn:r.program(21,w,t),data:t}))||0===s)&&(a+=s),a+=""}function X(e,t){return"game-card__time--active"}function K(e,t){var i,s="";return s+="
          "+l(typeof(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.points)===n?i.apply(e):i)+"
          "}return o=i.if.call(t,t&&t.isMobile,{hash:{},inverse:r.program(62,(function(e,t){var s,a="";return a+="
          ",((s=i.ifEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.simpleStatus,"upcoming",{hash:{},inverse:r.program(67,q,t),fn:r.program(65,N,t),data:t}))||0===s)&&(a+=s),a+="
          "}),a),fn:r.program(1,(function(e,t){var s,a="";return a+="
          ",((s=i.ifEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.simpleStatus,"upcoming",{hash:{},inverse:r.noop,fn:r.program(2,d,t),data:t}))||0===s)&&(a+=s),((s=i.ifEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.simpleStatus,"active",{hash:{},inverse:r.noop,fn:r.program(12,g,t),data:t}))||0===s)&&(a+=s),((s=i.ifEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.simpleStatus,"passed",{hash:{},inverse:r.noop,fn:r.program(25,x,t),data:t}))||0===s)&&(a+=s),a+='
          ',((s=i.ifNotEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.simpleStatus,"upcoming",{hash:{},inverse:r.noop,fn:r.program(27,S,t),data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),o||0===o?o:""})),this.DDG.templates.sports_game=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},"
          "})),this.DDG.templates.sports_league=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="",l=this;return n+="
          ",o=i.if.call(t,t&&t.hasLeagueScheduleTab,{hash:{},inverse:l.noop,fn:l.program(1,(function(e,t){var s,a="";return a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+="
          ",((o=i.if.call(t,t&&t.hasWeekSelector,{hash:{},inverse:l.noop,fn:l.program(3,(function(e,t){return"
          "}),a),data:a}))||0===o)&&(n+=o),n+="
          ",((o=i.if.call(t,t&&t.hasLeagueScheduleTab,{hash:{},inverse:l.noop,fn:l.program(5,(function(e,t){return""}),a),data:a}))||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.sports_matchup_table=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r="function",d=this.escapeExpression;function c(e,t){var s,a="";return a+="
          "+d(typeof(s=e&&e.title)===r?s.apply(e):s)+"
          "}function h(e,t){return"data-hide-row-on-collapse"}function p(e,t){var s,a="";return a+="
          '+d(typeof(s=null==(s=e&&e.away_team)||!1===s?s:s.name)===r?s.apply(e):s)+' logo'+d(typeof(s=null==(s=e&&e.away_team)||!1===s?s:s.name)===r?s.apply(e):s)+'
          ',((s=i.ifNotEquals.call(e,e&&e.simpleStatus,"upcoming",{hash:{},inverse:l.program(10,g,t),fn:l.program(8,m,t),data:t}))||0===s)&&(a+=s),a+='
          ',((s=i.ifEquals.call(e,e&&e.simpleStatus,"active",{hash:{},inverse:l.noop,fn:l.program(17,y,t),data:t}))||0===s)&&(a+=s),a+='",((s=i.ifEquals.call(e,e&&e.status,"halftime",{hash:{},inverse:l.program(21,w,t),fn:l.program(19,b,t),data:t}))||0===s)&&(a+=s),a+="
          '+d(typeof(s=null==(s=e&&e.home_team)||!1===s?s:s.name)===r?s.apply(e):s)+''+d(typeof(s=null==(s=e&&e.home_team)||!1===s?s:s.name)===r?s.apply(e):s)+' logo
          ',((s=i.ifEquals.call(e,e&&e.simpleStatus,"active",{hash:{},inverse:l.noop,fn:l.program(17,y,t),data:t}))||0===s)&&(a+=s),a+="',((s=i.ifEquals.call(e,e&&e.status,"halftime",{hash:{},inverse:l.program(21,w,t),fn:l.program(19,b,t),data:t}))||0===s)&&(a+=s),a+="
          "}function u(e,t){return"tx--bold"}function m(e,t){var s,a="";return a+='
          "+d(typeof(s=null==(s=null==(s=e&&e.score)||!1===s?s:s.away)||!1===s?s:s.points)===r?s.apply(e):s)+" — "+d(typeof(s=null==(s=null==(s=e&&e.score)||!1===s?s:s.home)||!1===s?s:s.points)===r?s.apply(e):s)+"
          "}function g(e,t){var s,a="";return a+="
          ",((s=i.if.call(e,e&&e.hasSuspendedStatus,{hash:{},inverse:l.program(15,v,t),fn:l.program(13,_,t),data:t}))||0===s)&&(a+=s),a+="
          "}function f(e,t){return"tx-clr--red"}function _(e,t){var i;return d(typeof(i=e&&e.statusFormatted)===r?i.apply(e):i)}function v(e,t){return"@"}function y(e,t){return""}function b(e,t){var s,a="";return a+="",((s=i.lp.call(e,"Sports module","Halftime",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}function w(e,t){var i;return d(typeof(i=e&&e.timeAndStatus)===r?i.apply(e):i)}return n+="
          ",o=i.each.call(t,t&&t.matchUpList,{hash:{},inverse:l.noop,fn:l.program(1,(function(e,t){var s,a="";return a+="
          ",((s=i.if.call(e,e&&e.title,{hash:{},inverse:l.noop,fn:l.program(2,c,t),data:t}))||0===s)&&(a+=s),((s=i.each.call(e,e&&e.games,{hash:{},inverse:l.noop,fn:l.program(5,p,t),data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.sports_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var s,a="";return a+=" • "+r(typeof(s=e&&e.subtitle)===l?s.apply(e):s)+""}return n+="

          "+r(typeof(o=t&&t.title)===l?o.apply(t):o)+"

          ",o=i.ifEquals.call(t,t&&t.moduleType,"league",{hash:{},inverse:d.program(3,(function(e,t){var s,a="";return a+=""+r(typeof(s=e&&e.leagueName)===l?s.apply(e):s)+"",((s=i.if.call(e,e&&e.subtitle,{hash:{},inverse:d.noop,fn:d.program(4,c,t),data:t}))||0===s)&&(a+=s),a}),a),fn:d.program(1,(function(e,t){var i;return r(typeof(i=e&&e.subtitle)===l?i.apply(e):i)}),a),data:a}),(o||0===o)&&(n+=o),n+="
          ",o=i.if.call(t,t&&t.timeZone,{hash:{},inverse:d.program(8,(function(e,t){var s;return(s=i.lp.call(e,"Sports module","Times are in your local time zone",{hash:{},data:t}))||0===s?s:""}),a),fn:d.program(6,(function(e,t){var s;return(s=i.lp.call(e,"Sports module","Times are in your %slocal time zone%s",'',"",{hash:{},data:t}))||0===s?s:""}),a),data:a}),(o||0===o)&&(n+=o),n+=" • ",((o=i.lp.call(t,"Sports module","Data from Sportradar",{hash:{},data:a}))||0===o)&&(n+=o),n+='
          >
          ',((o=i.lp.call(t,"expand_text","Show More",{hash:{},data:a}))||0===o)&&(n+=o),n+='
          '})),this.DDG.templates.sports_standings_table_nba=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){return"selected"}function h(e,t){return"is-hidden"}function p(e,t){var s,a="";return a+='',((s=i.lp.call(e,"Sports module","Conf",{hash:{},data:t}))||0===s)&&(a+=s),a+='',((s=i.lp.call(e,"Sports module","Div",{hash:{},data:t}))||0===s)&&(a+=s),a+='',((s=i.lp.call(e,"Sports module","Strk",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}function u(e,t){return"dotted-border-bottom"}function m(e,t){return"bold-border-bottom"}function g(e,t){var i,s="";return s+=""+r(typeof(i=e&&e.conferenceWinLoss)===l?i.apply(e):i)+""+r(typeof(i=e&&e.divisionWinLoss)===l?i.apply(e):i)+""+r(typeof(i=e&&e.streak)===l?i.apply(e):i)+""}return n+="
          "})),this.DDG.templates.sports_team=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+="
          ",o=(i=this.merge(i,e.helpers)).if.call(t,t&&t.showControlsSection,{hash:{},inverse:this.noop,fn:this.program(1,(function(e,t){var s,a="";return a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.spread_cta=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='

          Help Spread DuckDuckGo!

          Help your friends take back their privacy.

          '})),this.DDG.templates.stocks=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var s,a="";return a+=''+r(typeof(s=e&&e.label)===l?s.apply(e):s)+'',((s=i.if.call(e,e&&e.mobileLabel,{hash:{},inverse:d.program(5,p,t),fn:d.program(3,h,t),data:t}))||0===s)&&(a+=s),a+=""}function h(e,t){var i;return r(typeof(i=e&&e.mobileLabel)===l?i.apply(e):i)}function p(e,t){var i;return r(typeof(i=e&&e.label)===l?i.apply(e):i)}function u(e,t){var s;return(s=i.lp.call(e,"Stocks module","Data provided by Refinitiv",{hash:{},data:t}))||0===s?s:""}function m(e,t){var s;return(s=i.lp.call(e,"Stocks module","Data provided by IEX Cloud",{hash:{},data:t}))||0===s?s:""}return n+='
          ',o=i.with.call(t,t&&t.data,{hash:{},inverse:d.noop,fn:d.program(1,(function(e,t){var s,a="";return a+='
          '+r(typeof(s=null==(s=null==(s=e&&e.results)||!1===s?s:s.quote)||!1===s?s:s.companyName)===l?s.apply(e):s)+'
          ',((s=i.lp.call(e,"Stocks module","As of",{hash:{},data:t}))||0===s)&&(a+=s),a+=" "+r(typeof(s=e&&e.latestUpdateString)===l?s.apply(e):s)+'
          '+r(typeof(s=e&&e.stockExchange)===l?s.apply(e):s)+": "+r(typeof(s=e&&e.symbol)===l?s.apply(e):s)+'
          '+r(typeof(s=e&&e.latestPrice)===l?s.apply(e):s)+''+r(typeof(s=null==(s=null==(s=e&&e.results)||!1===s?s:s.quote)||!1===s?s:s.currency)===l?s.apply(e):s)+'
          '+r(typeof(s=e&&e.change)===l?s.apply(e):s)+'('+r(typeof(s=e&&e.percentChangeString)===l?s.apply(e):s)+'%)
          ',((s=i.each.call(e,e&&e.timePeriods,{hash:{},inverse:d.noop,fn:d.program(2,c,t),data:t}))||0===s)&&(a+=s),a+='
          ',((s=i.lp.call(e,"Stocks module","Historical prices not available",{hash:{},data:t}))||0===s)&&(a+=s),a+='

          '+r(typeof(s=e&&e.open)===l?s.apply(e):s)+'

          '+r(typeof(s=e&&e.high)===l?s.apply(e):s)+'

          '+r(typeof(s=e&&e.low)===l?s.apply(e):s)+'

          "+r(typeof(s=e&&e.peRatio)===l?s.apply(e):s)+'

          "+r(typeof(s=e&&e.peRatio)===l?s.apply(e):s)+'

          "+r(typeof(s=e&&e.volumeString)===l?s.apply(e):s)+'

          "+r(typeof(s=e&&e.week52High)===l?s.apply(e):s)+'

          "+r(typeof(s=e&&e.week52Low)===l?s.apply(e):s)+'

          "+r(typeof(s=e&&e.marketCapString)===l?s.apply(e):s)+'

          "+r(typeof(s=e&&e.volumeString)===l?s.apply(e):s)+'

          "+r(typeof(s=e&&e.marketCapString)===l?s.apply(e):s)+'

          "+r(typeof(s=e&&e.prevClose)===l?s.apply(e):s)+'

          "}),a),data:a}),(o||0===o)&&(n+=o),n+='
          '})),this.DDG.templates.tooltip=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="",l=this;return n+=''})),this.DDG.templates.translation_select_modal=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var i,s="";return s+="modal--popout--"+r(typeof(i=e&&e.position)===l?i.apply(e):i)}function h(e,t){return"modal--popout--bottom"}function p(e,t){return'X'}function u(e,t){var s;return(s=i.if.call(e,e&&e.selected,{hash:{},inverse:d.noop,fn:d.program(15,m,t),data:t}))||0===s?s:""}function m(e,t){var s;return(s=i.if.call(e,e&&e.visible,{hash:{},inverse:d.noop,fn:d.program(16,g,t),data:t}))||0===s?s:""}function g(e,t){var i,s="";return s+='
        • '+r(typeof(i=e&&e.name)===l?i.apply(e):i)+"
        • "}function f(e,t){var s;return(s=i.if.call(e,e&&e.pinned,{hash:{},inverse:d.noop,fn:d.program(19,_,t),data:t}))||0===s?s:""}function _(e,t){var s;return(s=i.if.call(e,e&&e.visible,{hash:{},inverse:d.noop,fn:d.program(20,v,t),data:t}))||0===s?s:""}function v(e,t){var i,s="";return s+='
        • '+r(typeof(i=e&&e.name)===l?i.apply(e):i)+"
        • "}function y(e,t){var s;return(s=i.unless.call(e,e&&e.pinned,{hash:{},inverse:d.noop,fn:d.program(24,b,t),data:t}))||0===s?s:""}function b(e,t){var s;return(s=i.if.call(e,e&&e.visible,{hash:{},inverse:d.noop,fn:d.program(25,w,t),data:t}))||0===s?s:""}function w(e,t){var s,a="";return a+='
        • '+r(typeof(s=e&&e.name)===l?s.apply(e):s)+"
        • "}function k(e,t){return"is-selected"}return n+='"})),this.DDG.templates.translation_select=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression;return n+='"})),this.DDG.templates.translations_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var s,a="";return a+='
          '+r(typeof(s=e&&e.translated_text)===l?s.apply(e):s)+'
          '}function h(e,t){var s,a="";return a+='
          ',((s=i.lp.call(e,"translations_module","Translation",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}return n+='
          ",((o=i.if.call(t,t&&t.error,{hash:{},inverse:d.noop,fn:d.program(3,(function(e,t){return''}),a),data:a}))||0===o)&&(n+=o),n+='
          ',o=i.if.call(t,t&&t.error,{hash:{},inverse:d.program(7,(function(e,t){var s;return(s=i.if.call(e,e&&e.translated_text,{hash:{},inverse:d.program(10,h,t),fn:d.program(8,c,t),data:t}))||0===s?s:""}),a),fn:d.program(5,(function(e,t){var i,s="";return s+='
          '+r(typeof(i=e&&e.error)===l?i.apply(e):i)+"
          "}),a),data:a}),(o||0===o)&&(n+=o),n+='
          "})),this.DDG.templates.twitter_easter_egg=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o="",n=this.escapeExpression;return o+=''})),this.DDG.templates.user_location_badge=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},"
          "})),this.DDG.templates.user_location_button=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this;function r(e,t){return"btn--primary"}function d(e,t){return"update"}function c(e,t){return"enable"}function h(e,t){var s;return(s=i.if.call(e,e&&e.problemUpdatingLocation,{hash:{},inverse:l.program(13,u,t),fn:l.program(11,p,t),data:t}))||0===s?s:""}function p(e,t){var s;return(s=i.lp.call(e,"precise_user_location","Set Manually",{hash:{},data:t}))||0===s?s:""}function u(e,t){var s;return(s=i.lp.call(e,"precise_user_location","Update Location",{hash:{},data:t}))||0===s?s:""}function m(e,t){var s;return(s=i.lp.call(e,"precise_user_location","Enable Location",{hash:{},data:t}))||0===s?s:""}function g(e,t){var s,a="";return a+='',((s=i.lp.call(e,"precise_user_location","Clear Location",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}function f(e,t){var s,a="";return a+='',((s=i.lp.call(e,"precise_user_location","Set Manually",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}return n+='
          ',o=i.if.call(t,t&&t.waiting,{hash:{},inverse:l.program(3,(function(e,t){var s,a="";return a+='',((s=i.if.call(e,e&&e.update,{hash:{},inverse:l.program(15,m,t),fn:l.program(10,h,t),data:t}))||0===s)&&(a+=s),a+="",((s=i.if.call(e,e&&e.update,{hash:{},inverse:l.noop,fn:l.program(17,g,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.showManualLocationButton,{hash:{},inverse:l.noop,fn:l.program(19,f,t),data:t}))||0===s)&&(a+=s),a}),a),fn:l.program(1,(function(e,t){var s,a="";return a+='',((s=i.include.call(e,"spinner",{hash:{className:"user-loc-btn__spinner spinner--dark"},data:t}))||0===s)&&(a+=s),a+="",((s=i.lp.call(e,"precise_user_location","Waiting for Location...",{hash:{},data:t}))||0===s)&&(a+=s),a+='',((s=i.lp.call(e,"precise_user_location","Cancel",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.user_location_content=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r="function",d=this.escapeExpression;function c(e,t){return"is-disabled"}function h(e,t){var s,a="";return a+=""}function p(e,t){var s,a="";return a+=""}function u(e,t){var s,a="";return a+=""}function m(e,t){var s,a="";return a+="
          ",((s=i.lp.call(e,"precise_user_location","Use Anonymous Location",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.lp.call(e,"precise_user_location","Private to us and secured on your device",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}function g(e,t){var s,a="";return a+="
          ",((s=i.lp.call(e,"precise_user_location","Pick Custom Location",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}function f(e,t){var i,s="";return s+="
        • ",((i=typeof e===r?e.apply(e):e)||0===i)&&(s+=i),s+="
        • "}function _(e,t){var s,a="";return a+="

          ",((s=typeof(s=e&&e.additional)===r?s.apply(e):s)||0===s)&&(a+=s),a+=' ',((s=i.lp.call(e,"precise_user_location","Help",{hash:{},data:t}))||0===s)&&(a+=s),a+="

          "}return n+="
          ",o=i.ifEquals.call(t,t&&t.state,"locUnset",{hash:{},inverse:l.noop,fn:l.program(1,(function(e,t){var s,a="";return a+="
          ",((s=i.lp.call(e,"precise_user_location","We can use your anonymous%s location%s to show you nearby results.","","",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.unless.call(e,e&&e.waiting,{hash:{},inverse:l.program(6,p,t),fn:l.program(4,h,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.lp.call(e,"precise_user_location","Pick Custom Location",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.l.call(e,"Learn %sMore%s","","",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),o=i.ifEquals.call(t,t&&t.state,"locSet",{hash:{},inverse:l.noop,fn:l.program(8,(function(e,t){var s,a="";return a+="
          "+d(typeof(s=e&&e.desc)===r?s.apply(e):s)+"
          ",((s=i.unless.call(e,e&&e.waiting,{hash:{},inverse:l.program(6,p,t),fn:l.program(9,u,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.ifEquals.call(e,e&&e.locType,"manual",{hash:{},inverse:l.noop,fn:l.program(11,m,t),data:t}))||0===s)&&(a+=s),((s=i.ifEquals.call(e,e&&e.locType,"precise",{hash:{},inverse:l.noop,fn:l.program(13,g,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.l.call(e,"Learn %sMore%s","","",{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),o=i.ifEquals.call(t,t&&t.state,"locError",{hash:{},inverse:l.noop,fn:l.program(15,(function(e,t){var s,a="";return a+="
          ",((s=i.lp.call(e,"precise_user_location","Enable location settings on your device to use anonymous location",{hash:{},data:t}))||0===s)&&(a+=s),a+="
            ",((s=i.each.call(e,e&&e.list,{hash:{},inverse:l.noop,fn:l.program(16,f,t),data:t}))||0===s)&&(a+=s),a+="
          ",((s=i.if.call(e,e&&e.additional,{hash:{},inverse:l.noop,fn:l.program(18,_,t),data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.user_location_dropdown=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},""})),this.DDG.templates.user_location_info=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='

          ',((o=(i=this.merge(i,e.helpers)).lp.call(t,"precise_user_location","DuckDuckGo is private by design. When you enable location, it is stored on your local device only. When you search, your device then sends it to us, we use it to improve results for that search, and then we promptly throw it away, such that you remain anonymous. %sLearn more about how we designed this technology to protect your privacy%s.",'',"",{hash:{},data:a}))||0===o)&&(n+=o),n+="

          "})),this.DDG.templates.user_location_notification=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+=""})),this.DDG.templates.user_location_tile=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="";return n+="
          "})),this.DDG.templates.user_location_tooltip_content=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var i,s="";return s+="
          "+r(typeof(i=e&&e.desc)===l?i.apply(e):i)+"
          "}function h(e,t){var i,s="";return s+="
        • ",((i=typeof e===l?e.apply(e):e)||0===i)&&(s+=i),s+="
        • "}return n+="
          ",o=i.if.call(t,t&&t.locUnset,{hash:{},inverse:d.noop,fn:d.program(1,(function(e,t){var s,a="";return a+='

          ',((s=i.lp.call(e,"precise_user_location","Find results closer to you.",{hash:{},data:t}))||0===s)&&(a+=s),a+='

          ',((s=i.lp.call(e,"precise_user_location","Try enabling anonymous location for more accurate results.",{hash:{},data:t}))||0===s)&&(a+=s),a+=" ",((s=i.lp.call(e,"precise_user_location","%sLearn how we keep your location private%s.",'',"",{hash:{},data:t}))||0===s)&&(a+=s),a+="

          "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.locSet,{hash:{},inverse:d.noop,fn:d.program(3,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.desc,{hash:{},inverse:d.noop,fn:d.program(4,c,t),data:t}))||0===s)&&(a+=s),a+='

          ',((s=i.lp.call(e,"precise_user_location","Anonymous Location Enabled",{hash:{},data:t}))||0===s)&&(a+=s),a+='

          ',((s=i.lp.call(e,"precise_user_location","Location information is stored only on your device.",{hash:{},data:t}))||0===s)&&(a+=s),a+=" ",((s=i.lp.call(e,"precise_user_location","%sLearn how we keep your location private%s.",'',"",{hash:{},data:t}))||0===s)&&(a+=s),a+="

          "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.locError,{hash:{},inverse:d.noop,fn:d.program(6,(function(e,t){var s,a="";return a+="

          ",((s=i.lp.call(e,"precise_user_location","Browser Location Unavailable",{hash:{},data:t}))||0===s)&&(a+=s),a+='

          ',((s=i.lp.call(e,"precise_user_location","Set your location manually, or ensure Location Services is enabled.",{hash:{},data:t}))||0===s)&&(a+=s),a+=' ',((s=i.lp.call(e,"precise_user_location","Help",{hash:{},data:t}))||0===s)&&(a+=s),a+='

            ',((s=i.each.call(e,e&&e.instructions,{hash:{},inverse:d.noop,fn:d.program(7,h,t),data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.locUpdProblem,{hash:{},inverse:d.noop,fn:d.program(9,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.desc,{hash:{},inverse:d.noop,fn:d.program(4,c,t),data:t}))||0===s)&&(a+=s),a+='

          ',((s=i.lp.call(e,"precise_user_location","Not getting nearby results?",{hash:{},data:t}))||0===s)&&(a+=s),a+='

          ',((s=i.lp.call(e,"precise_user_location","Try setting your location manually.",{hash:{},data:t}))||0===s)&&(a+=s),a+=" ",((s=i.lp.call(e,"precise_user_location","%sLearn how we keep your location private%s.",'',"",{hash:{},data:t}))||0===s)&&(a+=s),a+="

          "}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.user_location_tooltip=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},"
          ×
          "})),this.DDG.templates.vertical_link_item=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression,r=this,d="function";function c(e,t){var s;return(s=i.if.call(e,e&&e.isIE,{hash:{},inverse:r.program(13,p,t),fn:r.program(11,h,t),data:t}))||0===s?s:""}function h(e,t){var s,a="";return a+='
          "}function p(e,t){var s,a="";return((s=i.if.call(e,e&&e.isNews,{hash:{},inverse:r.noop,fn:r.program(14,u,t),data:t}))||0===s)&&(a+=s),a+=''}function u(e,t){return'
          '}function m(e,t){var s;return(s=i.if.call(e,null==(s=e&&e.model)||!1===s?s:s.fetch_image,{hash:{},inverse:r.noop,fn:r.program(14,u,t),data:t}))||0===s?s:""}function g(e,t){return' target="_blank"'}function f(e,t){var s,a="";return a+='
          ',((s=i.ellipsis.call(e,null==(s=e&&e.model)||!1===s?s:s.excerpt,600,{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}return n+='
          ',o=i.if.call(t,null==(o=t&&t.model)||!1===o?o:o.showImage,{hash:{},inverse:r.noop,fn:r.program(9,(function(e,t){var s,a="";return a+='
          ',((s=i.if.call(e,null==(s=e&&e.model)||!1===s?s:s.image,{hash:{},inverse:r.program(16,m,t),fn:r.program(10,c,t),data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),n+='

          ",((o=typeof(o=null==(o=t&&t.model)||!1===o?o:o.title)===d?o.apply(t):o)||0===o)&&(n+=o),n+='',((o=i.l.call(t,"Your browser indicates if you've visited this link",{hash:{},data:a}))||0===o)&&(n+=o),n+="

          ",((o=i.if.call(t,t&&t.urlAboveSnippet,{hash:{},inverse:r.program(20,f,a),fn:r.noop,data:a}))||0===o)&&(n+=o),n+='
          ',((o=i.favicon.call(t,null==(o=t&&t.model)||!1===o?o:o.favicon_url,{hash:{},data:a}))||0===o)&&(n+=o),n+='",((o=typeof(o=null==(o=t&&t.model)||!1===o?o:o.source)===d?o.apply(t):o)||0===o)&&(n+=o),n+="",o=i.if.call(t,null==(o=t&&t.model)||!1===o?o:o.relative_time,{hash:{},inverse:r.noop,fn:r.program(24,(function(e,t){var i,s="";return s+='|'+l(typeof(i=null==(i=e&&e.model)||!1===i?i:i.relative_time)===d?i.apply(e):i)+""}),a),data:a}),(o||0===o)&&(n+=o),n+="
          ",((o=i.if.call(t,t&&t.urlAboveSnippet,{hash:{},inverse:r.noop,fn:r.program(20,f,a),data:a}))||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.vertical_links=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="";return n+='
          '})),this.DDG.templates.vertical_load_more=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='"})),this.DDG.templates.vertical_map=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){return"is-hidden"}function h(e,t){var i,s="";return s+="vertical--map--sidebar-"+r(typeof(i=null==(i=e&&e.model)||!1===i?i:i.sidebarLayout)===l?i.apply(e):i)}function p(e,t){return"has-directions"}function u(e,t){var s;return(s=i.unless.call(e,null==(s=e&&e.model)||!1===s?s:s.sourceUrl,{hash:{},inverse:d.noop,fn:d.program(1,c,t),data:t}))||0===s?s:""}return n+='
          ',o=i.if.call(t,null==(o=t&&t.model)||!1===o?o:o.isMapSidebarVisible,{hash:{},inverse:d.noop,fn:d.program(6,(function(e,t){var s,a="";return a+=''}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.vertical_separator=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression,r=this;function d(e,t){var i,s="";return s+='
          '+l("function"==typeof(i=e&&e.pageNumber)?i.apply(e):i)+"
          "}function c(e,t){var s,a="";return a+='
          ',((s=i.l.call(e,"Page %s",e&&e.pageNumber,{hash:{},data:t}))||0===s)&&(a+=s),a+="
          "}return n+='
          ',o=i.if.call(t,t&&t.pageNumber,{hash:{},inverse:r.noop,fn:r.program(5,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.line,{hash:{},inverse:r.program(8,c,t),fn:r.program(6,d,t),data:t}))||0===s)&&(a+=s),a+="
          "}),a),data:a}),(o||0===o)&&(n+=o),n+="
          "})),this.DDG.templates.web_attribution=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression;return n+=''})),this.DDG.templates.welcome_message_eu=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression;return n+='

          ',((o=i.lp.call(t,"welcome message eu search preference android","Privacy, simplified",{hash:{},data:a}))||0===o)&&(n+=o),n+='

          ',((o=i.lp.call(t,"welcome message eu search preference android","You're now searching privately in Chrome. Use our app instead of Chrome to browse privately too. It’s already installed and can:",{hash:{},data:a}))||0===o)&&(n+=o),n+="

          • ",((o=i.lp.call(t,"welcome message eu search preference android","Block unsafe trackers",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",((o=i.lp.call(t,"welcome message eu search preference android","Force encryption on websites",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",((o=i.lp.call(t,"welcome message eu search preference android","Clear data in one tap",{hash:{},data:a}))||0===o)&&(n+=o),n+='
          ',((o=i.lp.call(t,"welcome message eu search preference android","Open app",{hash:{},data:a}))||0===o)&&(n+=o),n+='
          '})),this.DDG.templates.welcome_message=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='

          ',((o=(i=this.merge(i,e.helpers)).lp.call(t,"welcome message","You now have the DuckDuckGo extension!",{hash:{},data:a}))||0===o)&&(n+=o),n+='

          ',((o=i.lp.call(t,"welcome message","Here's what it does:",{hash:{},data:a}))||0===o)&&(n+=o),n+="

          • ",((o=i.lp.call(t,"welcome message","Lets you search anonymously with DuckDuckGo",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",((o=i.lp.call(t,"welcome message","Blocks trackers on websites you visit",{hash:{},data:a}))||0===o)&&(n+=o),n+="
          • ",((o=i.lp.call(t,"welcome message","Encrypts connections when possible",{hash:{},data:a}))||0===o)&&(n+=o),n+='
          '})); \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/3C1C7BE8EF932F84CBA0E3FB4CC709E8ABAF9C05 b/home/.surf/cache/WebKitCache/Version 16/Blobs/3C1C7BE8EF932F84CBA0E3FB4CC709E8ABAF9C05 new file mode 100644 index 0000000..1a6733f Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/3C1C7BE8EF932F84CBA0E3FB4CC709E8ABAF9C05 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/3F51447B06EA187A5177AE8826990DBE115590A2 b/home/.surf/cache/WebKitCache/Version 16/Blobs/3F51447B06EA187A5177AE8826990DBE115590A2 new file mode 100644 index 0000000..b3bb130 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/3F51447B06EA187A5177AE8826990DBE115590A2 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/3F5F8C6A670720B66DBF08826240099448666982 b/home/.surf/cache/WebKitCache/Version 16/Blobs/3F5F8C6A670720B66DBF08826240099448666982 new file mode 100644 index 0000000..dbeafbf Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/3F5F8C6A670720B66DBF08826240099448666982 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/40AD03FD6E84E4CA2D428356924320032B16830E b/home/.surf/cache/WebKitCache/Version 16/Blobs/40AD03FD6E84E4CA2D428356924320032B16830E new file mode 100644 index 0000000..f953e59 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/40AD03FD6E84E4CA2D428356924320032B16830E @@ -0,0 +1 @@ +.LQVY1Jpkk8nyJ6HBWKAk{display:inline-block;max-width:100%;overflow:hidden;text-decoration:inherit;text-overflow:ellipsis;white-space:nowrap}.LQVY1Jpkk8nyJ6HBWKAk.EKtkFWMYpwzMKOYr0GYm{vertical-align:top}.kY2IgmnCmOGjharHErah{-webkit-box-orient:vertical!important;display:-webkit-box!important;overflow:hidden!important;text-overflow:clip!important;white-space:normal!important}.Dq3ek6eKCoYQACCi2cxv :empty{display:none}.LnpumSThxEWMIsDdAT17{font-size:1.31rem;font-size:var(--font-size-result-title-mobile);letter-spacing:normal;letter-spacing:var(--letter-spacing-result-title-mobile);line-height:1.15;line-height:var(--line-height-result-title-mobile);margin:0;padding:0;position:relative}.LnpumSThxEWMIsDdAT17.CXMyPcQ6nDv47DKFeywM{font-size:1.46rem;font-size:var(--font-size-result-title-main);letter-spacing:-.01px;letter-spacing:var(--letter-spacing-result-title-main);line-height:1.22;line-height:var(--line-height-result-title-main)}.LnpumSThxEWMIsDdAT17.G7VU9XpIXHhRTqfSJJMq{font-size:.9825rem;font-size:var(--font-size-result-title-side);letter-spacing:normal;letter-spacing:var(--letter-spacing-result-title-side);line-height:1.22;line-height:var(--line-height-result-title-side)}.is-mobile .LnpumSThxEWMIsDdAT17{font-size:1.31rem;font-size:var(--font-size-result-title-mobile);letter-spacing:normal;letter-spacing:var(--letter-spacing-result-title-mobile);line-height:1.15;line-height:var(--line-height-result-title-mobile)}.is-mobile.serp-mobile-ux-2023 .LnpumSThxEWMIsDdAT17{font-size:1.45833rem;font-size:-webkit-calc(var(--px-in-rem)*21);font-size:calc(var(--px-in-rem)*21)}.LnpumSThxEWMIsDdAT17:not(.jw9ZDDnyA63XnVEHDY9Q) .eVNpHGjtxRBq_gLOfGDr:focus-visible{outline:none}.eVNpHGjtxRBq_gLOfGDr{margin:0}.eVNpHGjtxRBq_gLOfGDr,.eVNpHGjtxRBq_gLOfGDr:active,.eVNpHGjtxRBq_gLOfGDr:focus,.eVNpHGjtxRBq_gLOfGDr:hover{color:#1a0dab;color:var(--theme-col-txt-title)}.BrPN5UiFwJN5HlfRhga9.CXMyPcQ6nDv47DKFeywM .eVNpHGjtxRBq_gLOfGDr,.TmOth9WjJObMTxpxrznp .eVNpHGjtxRBq_gLOfGDr{text-decoration:underline}.eVNpHGjtxRBq_gLOfGDr:hover{text-decoration:underline}.eVNpHGjtxRBq_gLOfGDr:visited{color:#6c00a2;color:var(--theme-col-txt-title-visited)}.LQNqh2U1kzYxREs65IJu{display:block}@media (max-width:590px){.unYeG0luM2YbeXDDPqLg{display:none}}.unYeG0luM2YbeXDDPqLg{speak:none;cursor:default;margin-right:1em;position:absolute;right:100%;top:0;white-space:nowrap;width:1em}.unYeG0luM2YbeXDDPqLg:hover{text-decoration:none}.unYeG0luM2YbeXDDPqLg{color:#fff;color:var(--theme-col-bg-page)}.unYeG0luM2YbeXDDPqLg:visited{color:#c3c3c3;color:var(--theme-col-bg-page-alt-1)}.unYeG0luM2YbeXDDPqLg,.unYeG0luM2YbeXDDPqLg:before{-webkit-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s}.unYeG0luM2YbeXDDPqLg:before{-webkit-font-feature-settings:normal;-moz-font-feature-settings:normal;font-feature-settings:normal;content:"\2611";display:inline-block;font-family:ddg-serp-icons!important;font-size:.8em;font-style:normal;font-variant:normal;font-weight:400;line-height:1}.unYeG0luM2YbeXDDPqLg .UKnPKWc02ns5ejeWuNIQ{background-color:hsla(0,0%,54%,.9);background-color:var(--col-tooltip-bg);border-radius:1em;bottom:2.5em;color:#fff;color:var(--col-white);display:inline-block;font-style:normal;font-weight:400;height:1.6em;left:-.95em;line-height:1.6;margin:auto;opacity:0;padding:0 1em;position:absolute;text-indent:0;-webkit-transition:opacity .3s ease-in-out 0s;transition:opacity .3s ease-in-out 0s;vertical-align:middle;visibility:hidden;white-space:nowrap;z-index:200}.unYeG0luM2YbeXDDPqLg .UKnPKWc02ns5ejeWuNIQ:before{border-bottom:0 solid transparent;border-left:.5em solid transparent;border-right:.5em solid transparent;border-top:.5em solid hsla(0,0%,54%,.9);border-top-color:var(--col-tooltip-bg);bottom:-.5em;content:"";display:block;left:1.5em;margin-left:-.5em;position:absolute}.unYeG0luM2YbeXDDPqLg .UKnPKWc02ns5ejeWuNIQ{font-size:.76em;height:2em;line-height:2}.unYeG0luM2YbeXDDPqLg:hover .UKnPKWc02ns5ejeWuNIQ{opacity:1;-webkit-transition-delay:.75s;transition-delay:.75s;visibility:visible}.kCxGRTZhkydLL3PhswC5{display:-webkit-flex;display:-moz-box;display:flex}.C7CRDY5uYGF7fy47sEms{speak:none;cursor:default;display:inline-block;margin-left:.3em;position:relative;top:1px;white-space:nowrap}.C7CRDY5uYGF7fy47sEms:hover{text-decoration:none}.C7CRDY5uYGF7fy47sEms,.C7CRDY5uYGF7fy47sEms:before{-webkit-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s}.C7CRDY5uYGF7fy47sEms .UKnPKWc02ns5ejeWuNIQ{background-color:hsla(0,0%,54%,.9);background-color:var(--col-tooltip-bg);border-radius:1em;color:#fff;color:var(--col-white);display:inline-block;font-style:normal;font-weight:400;height:1.6em;left:-16px;line-height:1.6;margin:auto;opacity:0;padding:0 1em;position:absolute;text-indent:0;top:-40px;-webkit-transition:opacity .3s ease-in-out 0s;transition:opacity .3s ease-in-out 0s;vertical-align:middle;visibility:hidden;white-space:nowrap;z-index:200}.C7CRDY5uYGF7fy47sEms .UKnPKWc02ns5ejeWuNIQ:before{border-bottom:0 solid transparent;border-left:.5em solid transparent;border-right:.5em solid transparent;border-top:.5em solid hsla(0,0%,54%,.9);border-top-color:var(--col-tooltip-bg);bottom:-.4em;content:"";display:block;left:1.5em;margin-left:-.5em;position:absolute}.C7CRDY5uYGF7fy47sEms .UKnPKWc02ns5ejeWuNIQ{font-size:.76em;height:2em;line-height:2}.C7CRDY5uYGF7fy47sEms:hover .UKnPKWc02ns5ejeWuNIQ{opacity:1;-webkit-transition-delay:.1s;transition-delay:.1s;visibility:visible}.xEAqQ6v4dB2PB6EIK3Ke{height:.75em;width:.75em}.eVNpHGjtxRBq_gLOfGDr:visited .XK9h0YOQllQWb55a4UtX{fill:#6c00a2;fill:var(--theme-col-txt-title-visited)}.XK9h0YOQllQWb55a4UtX{fill:#1a0dab;fill:var(--theme-col-txt-title)}.OgdwYG6KE2qthn9XQWFC{color:#494949;color:var(--theme-col-txt-snippet);font-size:1rem;font-size:var(--font-size-result-snippet-main);line-height:1.45;line-height:var(--line-height-result-snippet-main);margin:0}.OgdwYG6KE2qthn9XQWFC.IgMlvsQ3qXQ05WavI9pA{font-size:.9rem;font-size:var(--font-size-result-snippet-side);line-height:1.45;line-height:var(--line-height-result-snippet-side)}.OgdwYG6KE2qthn9XQWFC a{color:inherit}.OgdwYG6KE2qthn9XQWFC .MILR5XIVy9h75WrLvKiq{color:#888;color:var(--col-grey-dark)}.OgdwYG6KE2qthn9XQWFC .MILR5XIVy9h75WrLvKiq:after{content:"\00B7";padding:0 5px}.mwuQiMOjmFJ5vmN6Vcqw{margin:0}.mwuQiMOjmFJ5vmN6Vcqw.B433VpEfaxl6n8VNRUDy a{text-decoration:none}.mwuQiMOjmFJ5vmN6Vcqw a:hover{text-decoration:underline}.mwuQiMOjmFJ5vmN6Vcqw.SgSTKoqQXa0tEszD2zWF:not(.R6zLceV36ChQWTn2Fv71) a:hover{text-decoration:none}.mwuQiMOjmFJ5vmN6Vcqw{font-size:1rem;font-size:var(--font-size-result-url-main);letter-spacing:.2px;letter-spacing:var(--letter-spacing-result-url-main);line-height:1.6;line-height:var(--line-height-result-url-main)}.mwuQiMOjmFJ5vmN6Vcqw.zh2STDg8BE1Pr9DBxabn{font-size:.9rem;font-size:var(--font-size-result-url-side);letter-spacing:.2px;letter-spacing:var(--letter-spacing-result-url-side);line-height:1.6;line-height:var(--line-height-result-url-side)}.mwuQiMOjmFJ5vmN6Vcqw{color:#3f6e35;color:var(--theme-col-txt-url)}.mwuQiMOjmFJ5vmN6Vcqw.NvMwcsUp56q4W2Z_b8E7{color:#222;color:var(--theme-col-txt-url-domain)}.mwuQiMOjmFJ5vmN6Vcqw.hAeZQDlu0XXeGwL7U722{color:#666;color:var(--theme-col-txt-url-path)}.DpVR46dTZaePK29PDkz8{display:inline-block;margin:-4px .5em 0 0;max-width:16px;overflow:hidden;vertical-align:middle}.DpVR46dTZaePK29PDkz8 img{margin:0;max-width:16px;vertical-align:middle}.Rn_JXVtoPVAFyGkcaXyK{margin:0}.Rn_JXVtoPVAFyGkcaXyK,.Rn_JXVtoPVAFyGkcaXyK:active,.Rn_JXVtoPVAFyGkcaXyK:focus,.Rn_JXVtoPVAFyGkcaXyK:hover,.Rn_JXVtoPVAFyGkcaXyK:visited{color:#3f6e35;color:var(--theme-col-txt-url)}.Rn_JXVtoPVAFyGkcaXyK .Wo6ZAEmESLNUuWBkbMxx,.Rn_JXVtoPVAFyGkcaXyK .Wo6ZAEmESLNUuWBkbMxx:active,.Rn_JXVtoPVAFyGkcaXyK .Wo6ZAEmESLNUuWBkbMxx:focus,.Rn_JXVtoPVAFyGkcaXyK .Wo6ZAEmESLNUuWBkbMxx:hover,.Rn_JXVtoPVAFyGkcaXyK .Wo6ZAEmESLNUuWBkbMxx:visited{color:#222;color:var(--theme-col-txt-url-domain)}.Rn_JXVtoPVAFyGkcaXyK .oaxCunrdbQs3WQDCq3Ls,.Rn_JXVtoPVAFyGkcaXyK .oaxCunrdbQs3WQDCq3Ls:active,.Rn_JXVtoPVAFyGkcaXyK .oaxCunrdbQs3WQDCq3Ls:focus,.Rn_JXVtoPVAFyGkcaXyK .oaxCunrdbQs3WQDCq3Ls:hover,.Rn_JXVtoPVAFyGkcaXyK .oaxCunrdbQs3WQDCq3Ls:visited{color:#666;color:var(--theme-col-txt-url-path)}.nYs5EPJFwdhisN0E7MCB{line-height:0;margin:0}.nYs5EPJFwdhisN0E7MCB a,.nYs5EPJFwdhisN0E7MCB a:hover{color:#1a0dab;color:var(--theme-col-txt-title)}.nYs5EPJFwdhisN0E7MCB a:visited{color:#6c00a2;color:var(--theme-col-txt-title-visited)}.nYs5EPJFwdhisN0E7MCB{position:relative}.nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv{color:#222;color:var(--theme-col-bg-txt-2);display:inline-block;margin:0;overflow-x:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap;width:100%}.is-mobile .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv{-ms-overflow-style:none;line-height:0;overflow-x:auto;scrollbar-width:none;text-overflow:clip}.is-mobile .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv::-webkit-scrollbar{display:none}.nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv:after{background:-webkit-gradient(linear,left top,right top,from(hsla(0,0%,100%,0)),to(#fff));background:-webkit-linear-gradient(left,hsla(0,0%,100%,0),#fff);background:linear-gradient(90deg,hsla(0,0%,100%,0),#fff);background:-webkit-gradient(linear,left top,right top,from(var(--theme-col-bg-page-transparent)),to(var(--theme-col-bg-page)));background:-webkit-linear-gradient(left,var(--theme-col-bg-page-transparent),var(--theme-col-bg-page));background:linear-gradient(90deg,var(--theme-col-bg-page-transparent),var(--theme-col-bg-page));content:"";height:100%;position:absolute;right:0;top:0;width:10px}.is-mobile .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv:after{background:-webkit-gradient(linear,left top,right top,from(hsla(0,0%,100%,0)),to(#fff));background:-webkit-linear-gradient(left,hsla(0,0%,100%,0),#fff);background:linear-gradient(90deg,hsla(0,0%,100%,0),#fff);background:-webkit-gradient(linear,left top,right top,from(var(--theme-col-bg-ui-transparent)),to(var(--theme-col-bg-ui)));background:-webkit-linear-gradient(left,var(--theme-col-bg-ui-transparent),var(--theme-col-bg-ui));background:linear-gradient(90deg,var(--theme-col-bg-ui-transparent),var(--theme-col-bg-ui))}.mKWLtu516DBW3eJToPiv.nYs5EPJFwdhisN0E7MCB:not(.AbEGLIJuTmsLLjCjXvCN) .wAo0g6uUc98EWmmASZLv:after{background:-webkit-gradient(linear,left top,right top,from(hsla(0,0%,100%,0)),to(#fff));background:-webkit-linear-gradient(left,hsla(0,0%,100%,0),#fff);background:linear-gradient(90deg,hsla(0,0%,100%,0),#fff);background:-webkit-gradient(linear,left top,right top,from(var(--theme-col-bg-ui-transparent)),to(var(--theme-col-bg-ui)));background:-webkit-linear-gradient(left,var(--theme-col-bg-ui-transparent),var(--theme-col-bg-ui));background:linear-gradient(90deg,var(--theme-col-bg-ui-transparent),var(--theme-col-bg-ui))}.mKWLtu516DBW3eJToPiv.AbEGLIJuTmsLLjCjXvCN.MAQX1RLnURIODXMNkZWm.nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv:after{background:-webkit-gradient(linear,left top,right top,from(hsla(0,0%,100%,0)),to(#fff));background:-webkit-linear-gradient(left,hsla(0,0%,100%,0),#fff);background:linear-gradient(90deg,hsla(0,0%,100%,0),#fff);background:-webkit-gradient(linear,left top,right top,from(var(--theme-col-bg-ui-transparent)),to(var(--theme-col-bg-ui)));background:-webkit-linear-gradient(left,var(--theme-col-bg-ui-transparent),var(--theme-col-bg-ui));background:linear-gradient(90deg,var(--theme-col-bg-ui-transparent),var(--theme-col-bg-ui))}.is-mobile.serp-mobile-ux-2023 .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv{margin-left:-15px;margin-right:-15px;width:-webkit-calc(100% + 30px);width:calc(100% + 30px)}.is-mobile.serp-mobile-ux-2023 .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv li:first-of-type{margin-left:15px}.is-mobile.serp-mobile-ux-2023 .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv li:last-of-type{margin-right:15px}.is-mobile.serp-mobile-ux-2023 .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv:after{display:none}.nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv>.gyDT4qronqJu4BgQBq2F{display:inline;margin:0;padding:0}.nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv>.gyDT4qronqJu4BgQBq2F:last-of-type{margin-right:10px}.nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv>.gyDT4qronqJu4BgQBq2F:not(:first-of-type):before{color:#222;color:var(--theme-col-bg-txt-2);content:"\002027";margin:0 .5em}.is-mobile .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv>.gyDT4qronqJu4BgQBq2F:not(:first-of-type){margin-left:.69444rem;margin-left:calc(var(--px-in-rem)*10)}.is-mobile .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv>.gyDT4qronqJu4BgQBq2F:not(:first-of-type):before{content:none}.nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv>.gyDT4qronqJu4BgQBq2F .f3uDrYrWF3Exrfp1m3Og{font-size:1rem;font-size:var(--font-size-result-small-site-link);line-height:1.45;line-height:var(--line-height-result-small-site-link)}.is-mobile .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv>.gyDT4qronqJu4BgQBq2F .f3uDrYrWF3Exrfp1m3Og{border:1px solid #e5e5e5;border:1px solid var(--theme-col-separator);border-radius:4px;border-radius:var(--rounded);display:inline-block;line-height:1.25;line-height:var(--line-height-result-small-site-link-mobile);padding:.34722rem .69444rem .20833rem;padding:calc(var(--px-in-rem)*5) calc(var(--px-in-rem)*10) calc(var(--px-in-rem)*3)}.is-mobile .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv>.gyDT4qronqJu4BgQBq2F .f3uDrYrWF3Exrfp1m3Og:active,.is-mobile .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv>.gyDT4qronqJu4BgQBq2F .f3uDrYrWF3Exrfp1m3Og:hover{background-color:#f7f7f7;background-color:var(--theme-col-bg-ui-active);border-color:#c3c3c3;border-color:var(--theme-col-separator-active);text-decoration:none}.is-mobile .nYs5EPJFwdhisN0E7MCB .wAo0g6uUc98EWmmASZLv>.gyDT4qronqJu4BgQBq2F .f3uDrYrWF3Exrfp1m3Og:visited{text-decoration:none}.nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy{display:-webkit-flex;display:-moz-box;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:-.76389rem 0 0 1.04167rem;margin:calc(var(--px-in-rem)*-11) 0 0 calc(var(--px-in-rem)*15);padding:0}.is-mobile .nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy{display:block;margin-left:0;max-width:none}.nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F{-moz-box-sizing:border-box;box-sizing:border-box;margin:.76389rem 0 0;margin:calc(var(--px-in-rem)*11) 0 0 0;padding:0 3.125rem 0 0;padding:0 calc(var(--px-in-rem)*45) 0 0;width:270px}.AbEGLIJuTmsLLjCjXvCN.nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F{width:300px}.is-mobile .nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F{padding:.625rem 0;padding:calc(var(--px-in-rem)*9) 0}.is-mobile .nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F:last-of-type{padding-bottom:0}.is-mobile .nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F{width:100%}.is-mobile .nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F:not(:first-of-type){margin-top:0}.is-mobile .nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F:not(:last-of-type){border-bottom:1px solid #e5e5e5;border-bottom:1px solid var(--theme-col-separator)}.nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F .f3uDrYrWF3Exrfp1m3Og,.nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F h3{font-size:1.18056rem;font-size:var(--font-size-result-large-site-link-title);line-height:1.45rem;line-height:var(--line-height-result-large-site-link-title);margin:0;padding:0}.is-mobile .nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F .f3uDrYrWF3Exrfp1m3Og,.is-mobile .nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F h3{line-height:1}.nYs5EPJFwdhisN0E7MCB .b269SZlC2oyR13Fcc4Iy>.gyDT4qronqJu4BgQBq2F .KoEJ3YBbjXKVOE1bc2RA{color:#494949;color:var(--theme-col-txt-snippet);font-size:1rem;font-size:var(--font-size-result-large-site-link-snippet);line-height:1.45;line-height:var(--line-height-result-large-site-link-snippet);margin:0;padding:0}.yQDlj3B5DI5YO8c8Ulio:not(.RVYGO5611IX7wODnZlrT){cursor:pointer}.yQDlj3B5DI5YO8c8Ulio{border:1px solid transparent;border-radius:4px;border-radius:var(--rounded)}.is-mobile .yQDlj3B5DI5YO8c8Ulio.SKlplDuh9FjtDprgoMxk,.yQDlj3B5DI5YO8c8Ulio.SKlplDuh9FjtDprgoMxk{border-radius:8px;border-radius:var(--rounded-md)}.is-mobile .yQDlj3B5DI5YO8c8Ulio{box-shadow:0 2px 3px rgba(0,0,0,.06)}.is-mobile .yQDlj3B5DI5YO8c8Ulio.jHKRD_8UMD51jfnKQ1LL{box-shadow:0 2px 3px rgba(0,0,0,.1)}.is-mobile .yQDlj3B5DI5YO8c8Ulio{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent;border-color:#e5e5e5;border-color:var(--theme-col-border-ui)}.is-mobile .yQDlj3B5DI5YO8c8Ulio,.yQDlj3B5DI5YO8c8Ulio.jHKRD_8UMD51jfnKQ1LL{background-color:#fff;background-color:var(--theme-col-bg-ui)}.yQDlj3B5DI5YO8c8Ulio.jHKRD_8UMD51jfnKQ1LL:not(.SKlplDuh9FjtDprgoMxk){border-color:#e5e5e5;border-color:var(--theme-col-border-ui)}.yQDlj3B5DI5YO8c8Ulio{box-shadow:none;box-shadow:var(--theme-shadow-ui);padding:.5rem 10px;padding:calc(var(--px-in-rem)*7.2) 10px}.is-mobile .yQDlj3B5DI5YO8c8Ulio{padding:14px 16px}.is-mobile.serp-mobile-ux-2023 .yQDlj3B5DI5YO8c8Ulio{border:none;border-radius:0;box-shadow:none;padding-left:.55556rem;padding-left:var(--sp-2);padding-right:.55556rem;padding-right:var(--sp-2)}div.ywnnf11wNlqtJcQzRrL9{display:inline;max-width:100%}.is-mobile div.ywnnf11wNlqtJcQzRrL9{display:block}.OQ_6vPwNhCeusNiEDcGp{display:-webkit-flex;display:-moz-box;display:flex}.OQ_6vPwNhCeusNiEDcGp:first-child{-moz-box-flex:0;-webkit-flex-grow:0;flex-grow:0}.CpkrTDP54mqzpuCSn1Fa>.ikg2IXiCD14iVX7AdZo1{margin-bottom:.28451rem;margin-bottom:calc(var(--px-in-rem)*4.09696);margin-top:.146rem;margin-top:calc(var(--px-in-rem)*2.1024)}.is-mobile .CpkrTDP54mqzpuCSn1Fa>.ikg2IXiCD14iVX7AdZo1{margin-top:.21544rem;margin-top:calc(var(--px-in-rem)*3.1024)}.CpkrTDP54mqzpuCSn1Fa>.FTrf7TqAcfxxEQ_3nfUg{margin-top:.76389rem;margin-top:calc(var(--px-in-rem)*11)}.is-mobile .CpkrTDP54mqzpuCSn1Fa>.FTrf7TqAcfxxEQ_3nfUg{margin-top:.34722rem;margin-top:calc(var(--px-in-rem)*5)}.L3nvATidW0xLPfPD8y_R>.FTrf7TqAcfxxEQ_3nfUg{margin-top:.76389rem;margin-top:calc(var(--px-in-rem)*11)}.is-mobile .L3nvATidW0xLPfPD8y_R>.FTrf7TqAcfxxEQ_3nfUg{margin-top:.34722rem;margin-top:calc(var(--px-in-rem)*5)}.pZ8Io9GFnKgZAbuMxZU9>.E2eLOJr8HctVnDOTM8fs{margin-top:.219rem;margin-top:calc(var(--px-in-rem)*3.1536)}.pZ8Io9GFnKgZAbuMxZU9>.OQ_6vPwNhCeusNiEDcGp{margin-top:.2rem;margin-top:calc(var(--px-in-rem)*2.88)}.pZ8Io9GFnKgZAbuMxZU9>.FTrf7TqAcfxxEQ_3nfUg{margin-top:.76389rem;margin-top:calc(var(--px-in-rem)*11)}.is-mobile .pZ8Io9GFnKgZAbuMxZU9>.FTrf7TqAcfxxEQ_3nfUg{margin-top:.34722rem;margin-top:calc(var(--px-in-rem)*5)}.FB4pzPCH4Soi7Sdsh9jk>.E2eLOJr8HctVnDOTM8fs{margin-bottom:.34722rem;margin-bottom:calc(var(--px-in-rem)*5);margin-top:.219rem;margin-top:calc(var(--px-in-rem)*3.1536)}.FB4pzPCH4Soi7Sdsh9jk>.OQ_6vPwNhCeusNiEDcGp{margin-top:cacl(2.88 * (1rem/(.9 * 16)));margin-top:cacl(2.88 * var(--px-in-rem))}.nrn-divider-div{border-top:1px solid #e5e5e5;border-top:1px solid var(--theme-col-separator);margin:0 11px;padding-bottom:16px}.is-mobile .nrn-divider-div{margin:16px 1px;padding:0}.ffON2NH02oMAcqyoh2UU{-moz-box-align:center;-moz-box-pack:center;-webkit-align-items:center;align-items:center;border-radius:8px;border-radius:var(--rounded-md);-moz-box-sizing:border-box;box-sizing:border-box;display:-webkit-inline-flex;display:-moz-inline-box;display:inline-flex;-webkit-justify-content:center;justify-content:center}.ffON2NH02oMAcqyoh2UU,.ffON2NH02oMAcqyoh2UU:hover,.ffON2NH02oMAcqyoh2UU:visited{text-decoration:none}.ffON2NH02oMAcqyoh2UU{background:none;border:none;color:inherit;cursor:pointer;font-weight:700;letter-spacing:-.00875px;line-height:0;font:inherit;line-height:1;margin:0;outline:inherit;padding:0;text-align:center}.ffON2NH02oMAcqyoh2UU:focus-visible{box-shadow:#00278e;box-shadow:var(--col-result-focus-outline)}.ffON2NH02oMAcqyoh2UU svg{fill:currentColor}.ffON2NH02oMAcqyoh2UU:disabled,.ffON2NH02oMAcqyoh2UU[disabled]{cursor:not-allowed}.ffON2NH02oMAcqyoh2UU.VVwKmb7llplcxyVXzHz9{width:100%}.ffON2NH02oMAcqyoh2UU.dkPsZgoVlwHrgASCd797{background-color:#3969ef;background-color:var(--theme-col-bg-button-primary);color:#fff;color:var(--theme-col-txt-button-primary)}.ffON2NH02oMAcqyoh2UU.dkPsZgoVlwHrgASCd797:hover{background-color:#2b55ca;background-color:var(--theme-col-bg-button-primary-hover)}.ffON2NH02oMAcqyoh2UU.dkPsZgoVlwHrgASCd797:active{background-color:#1e42a4;background-color:var(--theme-col-bg-button-primary-active)}.ffON2NH02oMAcqyoh2UU.dkPsZgoVlwHrgASCd797:disabled,.ffON2NH02oMAcqyoh2UU.dkPsZgoVlwHrgASCd797[disabled]{background-color:rgba(0,0,0,.06);background-color:var(--theme-col-bg-button-primary-disabled);color:rgba(0,0,0,.36);color:var(--theme-col-txt-button-primary-disabled)}.ffON2NH02oMAcqyoh2UU.q7VhSk71XgyB1xYfeChb{background-color:rgba(0,0,0,.06);background-color:var(--theme-col-bg-button-secondary);color:#222;color:var(--theme-col-txt-button-secondary)}.ffON2NH02oMAcqyoh2UU.q7VhSk71XgyB1xYfeChb:hover{background-color:rgba(0,0,0,.12);background-color:var(--theme-col-bg-button-secondary-hover)}.ffON2NH02oMAcqyoh2UU.q7VhSk71XgyB1xYfeChb:active{background-color:rgba(0,0,0,.18);background-color:var(--theme-col-bg-button-secondary-active)}.ffON2NH02oMAcqyoh2UU.q7VhSk71XgyB1xYfeChb:disabled,.ffON2NH02oMAcqyoh2UU.q7VhSk71XgyB1xYfeChb[disabled]{background-color:rgba(0,0,0,.06);background-color:var(--theme-col-bg-button-secondary-disabled);color:rgba(0,0,0,.36);color:var(--theme-col-txt-button-secondary-disabled)}.ffON2NH02oMAcqyoh2UU.sz280YLkLemh3mLtestR{background-color:transparent;background-color:var(--theme-col-bg-button-tertiary);border:1px solid rgba(0,0,0,.12);border:1px solid var(--theme-col-border-button-tertiary);color:#222;color:var(--theme-col-txt-button-tertiary)}.ffON2NH02oMAcqyoh2UU.sz280YLkLemh3mLtestR:hover{background-color:rgba(0,0,0,.06);background-color:var(--theme-col-bg-button-tertiary-hover);border-color:rgba(0,0,0,.18);border-color:var(--theme-col-border-button-tertiary-hover)}.ffON2NH02oMAcqyoh2UU.sz280YLkLemh3mLtestR:active{background-color:rgba(0,0,0,.12);background-color:var(--theme-col-bg-button-tertiary-active);border-color:rgba(0,0,0,.36);border-color:var(--theme-col-border-button-tertiary-active)}.ffON2NH02oMAcqyoh2UU.sz280YLkLemh3mLtestR:disabled,.ffON2NH02oMAcqyoh2UU.sz280YLkLemh3mLtestR[disabled]{background-color:transparent;background-color:var(--theme-col-bg-button-tertiary-disabled);border-color:rgba(0,0,0,.12);border-color:var(--theme-col-border-button-tertiary-disabled);color:rgba(0,0,0,.36);color:var(--theme-col-txt-button-tertiary-disabled)}.ffON2NH02oMAcqyoh2UU.CPXAhl7VTkj2dHDyAYAf{background-color:transparent;background-color:var(--theme-col-bg-button-ghost);color:#3969ef;color:var(--theme-col-txt-button-ghost)}.ffON2NH02oMAcqyoh2UU.CPXAhl7VTkj2dHDyAYAf:hover{background-color:rgba(0,0,0,.06);background-color:var(--theme-col-bg-button-ghost-hover);color:#2b55ca;color:var(--theme-col-txt-button-ghost-hover)}.ffON2NH02oMAcqyoh2UU.CPXAhl7VTkj2dHDyAYAf:active{background-color:rgba(0,0,0,.12);background-color:var(--theme-col-bg-button-ghost-active);color:#1e42a4;color:var(--theme-col-txt-button-ghost-active)}.ffON2NH02oMAcqyoh2UU.CPXAhl7VTkj2dHDyAYAf:disabled,.ffON2NH02oMAcqyoh2UU.CPXAhl7VTkj2dHDyAYAf[disabled]{background-color:transparent;background-color:var(--theme-col-bg-button-ghost-disabled);color:rgba(0,0,0,.36);color:var(--theme-col-txt-button-ghost-disabled)}.ffON2NH02oMAcqyoh2UU.YONrIxL5q5BzYkbeRFhq{background-color:#fff0c2;background-color:var(--theme-col-bg-cta-promomodule-yellow);border:1px solid #fc3;border:1px solid var(--theme-col-border-promomodule-yellow);color:#111;color:var(--theme-col-txt-promomodule-yellow)}.ffON2NH02oMAcqyoh2UU.YONrIxL5q5BzYkbeRFhq:hover{background-color:#ffde7a;background-color:var(--theme-col-bg-cta-hover-promomodule-yellow)}.ffON2NH02oMAcqyoh2UU.YONrIxL5q5BzYkbeRFhq:active{background-color:#ffd65c;background-color:var(--theme-col-bg-cta-active-promomodule-yellow)}.ffON2NH02oMAcqyoh2UU.MQCbz04ET5EljRmK3YpQ{font-size:.97222rem;font-size:-webkit-calc(var(--px-in-rem)*14);font-size:calc(var(--px-in-rem)*14);height:2.22222rem;height:-webkit-calc(var(--px-in-rem)*32);height:calc(var(--px-in-rem)*32);min-width:5.55556rem;min-width:-webkit-calc(var(--px-in-rem)*80);min-width:calc(var(--px-in-rem)*80);padding:0 .83333rem;padding:0 calc(var(--px-in-rem)*12)}.ffON2NH02oMAcqyoh2UU.MQCbz04ET5EljRmK3YpQ svg{height:1.11111rem;height:-webkit-calc(var(--px-in-rem)*16);height:calc(var(--px-in-rem)*16);margin-right:.55556rem;margin-right:calc(var(--px-in-rem)*8);width:1.11111rem;width:-webkit-calc(var(--px-in-rem)*16);width:calc(var(--px-in-rem)*16)}.ffON2NH02oMAcqyoh2UU.vcOFkrrvuSYp7xsAur2Y{font-size:.97222rem;font-size:-webkit-calc(var(--px-in-rem)*14);font-size:calc(var(--px-in-rem)*14);height:2.5rem;height:-webkit-calc(var(--px-in-rem)*36);height:calc(var(--px-in-rem)*36);min-width:5.55556rem;min-width:-webkit-calc(var(--px-in-rem)*80);min-width:calc(var(--px-in-rem)*80);padding:0 1.38889rem;padding:0 calc(var(--px-in-rem)*20)}.ffON2NH02oMAcqyoh2UU.vcOFkrrvuSYp7xsAur2Y svg{height:1.11111rem;height:-webkit-calc(var(--px-in-rem)*16);height:calc(var(--px-in-rem)*16);margin-right:.55556rem;margin-right:calc(var(--px-in-rem)*8);width:1.11111rem;width:-webkit-calc(var(--px-in-rem)*16);width:calc(var(--px-in-rem)*16)}.ffON2NH02oMAcqyoh2UU.hUUdRtuaOUx7mcSwc56s{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);height:3.05556rem;height:-webkit-calc(var(--px-in-rem)*44);height:calc(var(--px-in-rem)*44);min-width:5.55556rem;min-width:-webkit-calc(var(--px-in-rem)*80);min-width:calc(var(--px-in-rem)*80);padding:0 1.38889rem;padding:0 calc(var(--px-in-rem)*20)}.ffON2NH02oMAcqyoh2UU.hUUdRtuaOUx7mcSwc56s svg{height:1.38889rem;height:-webkit-calc(var(--px-in-rem)*20);height:calc(var(--px-in-rem)*20);margin-right:.55556rem;margin-right:calc(var(--px-in-rem)*8);width:1.38889rem;width:-webkit-calc(var(--px-in-rem)*20);width:calc(var(--px-in-rem)*20)}.ffON2NH02oMAcqyoh2UU.eEHLqtMiqMsCAZCkwFaE{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);height:3.33333rem;height:-webkit-calc(var(--px-in-rem)*48);height:calc(var(--px-in-rem)*48);min-width:6.94444rem;min-width:-webkit-calc(var(--px-in-rem)*100);min-width:calc(var(--px-in-rem)*100);padding:0 1.66667rem;padding:0 calc(var(--px-in-rem)*24)}.ffON2NH02oMAcqyoh2UU.eEHLqtMiqMsCAZCkwFaE svg{height:1.38889rem;height:-webkit-calc(var(--px-in-rem)*20);height:calc(var(--px-in-rem)*20);margin-right:.55556rem;margin-right:calc(var(--px-in-rem)*8);width:1.38889rem;width:-webkit-calc(var(--px-in-rem)*20);width:calc(var(--px-in-rem)*20)}.GwF9rPxptsXZvsT6Yz3v{-moz-box-align:stretch;-moz-box-pack:stretch;-webkit-align-items:stretch;align-items:stretch;color:#999;color:var(--theme-col-txt-dismiss-promomodule);display:-webkit-flex;display:-moz-box;display:flex;-webkit-justify-content:stretch;justify-content:stretch}.GwF9rPxptsXZvsT6Yz3v:hover{color:#666;color:var(--theme-col-txt-dismiss-hover-promomodule)}.GwF9rPxptsXZvsT6Yz3v>*{width:100%}.GwF9rPxptsXZvsT6Yz3v i{margin:0 .83333rem;margin:0 var(--sp-3)}.lrrrsQ36hfaX8eZTB3TA{-moz-box-align:center;-webkit-align-items:center;align-items:center;-webkit-align-self:stretch;align-self:stretch;display:-webkit-inline-flex;display:-moz-inline-box;display:inline-flex}.lrrrsQ36hfaX8eZTB3TA svg{fill:currentColor;margin-right:.27778rem;margin-right:var(--sp-1)}.LNdSz2nn2h0igO71d8hb{-moz-box-align:stretch;-webkit-align-items:stretch;align-items:stretch;background:#fafafa;background:var(--theme-col-bg-promomodule);border:1px solid #ddd;border:1px solid var(--theme-col-border-promomodule);border-radius:8px;border-radius:var(--rounded-md);color:#111;color:var(--theme-col-txt-promomodule);display:-webkit-flex;display:-moz-box;display:flex;font-size:.97222rem;font-size:-webkit-calc(var(--px-in-rem)*14);font-size:calc(var(--px-in-rem)*14);font-weight:700;margin:0 -.83333rem 1.11111rem;margin:0 calc(var(--sp-3)*-1) var(--sp-4);min-height:3.33333rem;min-height:var(--sp-12)}.LNdSz2nn2h0igO71d8hb>svg{-webkit-align-self:center;align-self:center;height:1.73611rem;height:-webkit-calc(var(--px-in-rem)*25);height:calc(var(--px-in-rem)*25);margin:0 .83333rem;margin:0 var(--sp-3);width:4.72222rem;width:-webkit-calc(var(--px-in-rem)*68);width:calc(var(--px-in-rem)*68)}.Z7c0o12pSBs3YFYl2u3o{-moz-box-flex:1;-webkit-align-self:center;align-self:center;-webkit-flex-grow:1;flex-grow:1;max-width:100%}.vdQmPnPqSImProkbXZSO{color:#3969ef;color:var(--theme-col-txt-button-ghost)}.vdQmPnPqSImProkbXZSO:hover{color:#2b55ca;color:var(--theme-col-txt-button-ghost-hover)}.vdQmPnPqSImProkbXZSO:active,.vdQmPnPqSImProkbXZSO:focus{color:#1e42a4;color:var(--theme-col-txt-button-ghost-active)}.vdQmPnPqSImProkbXZSO svg{margin-right:.27778rem;margin-right:var(--sp-1)}.pl0PiY82fWUzIzj986u6{color:#999;color:var(--theme-col-txt-dismiss-promomodule);display:-webkit-flex;display:-moz-box;display:flex;min-width:2.22222rem;min-width:var(--sp-8)}.pl0PiY82fWUzIzj986u6:hover{color:#666;color:var(--theme-col-txt-dismiss-hover-promomodule)}.pl0PiY82fWUzIzj986u6:active,.pl0PiY82fWUzIzj986u6:focus{color:var(--theme-col-txt-dismiss-active-promomodule)}.MUR9up2Bmla3F9MMBrVk{background:#fafafa;background:var(--theme-col-bg-promomodule);border:1px solid #ddd;border:1px solid var(--theme-col-border-promomodule);border-radius:8px;border-radius:var(--rounded-md);color:#111;color:var(--theme-col-txt-promomodule);font-size:.97222rem;font-size:-webkit-calc(var(--px-in-rem)*14);font-size:calc(var(--px-in-rem)*14);font-weight:700;margin:0 -.83333rem 2.22222rem;margin:0 calc(var(--sp-3)*-1) var(--sp-8)}.qN_m5HmoReWM51_STLVN{-moz-box-align:stretch;-webkit-align-items:stretch;align-items:stretch;display:-webkit-flex;display:-moz-box;display:flex;min-height:3.33333rem;min-height:var(--sp-12)}.qN_m5HmoReWM51_STLVN>svg{-webkit-align-self:center;align-self:center;height:1.73611rem;height:-webkit-calc(var(--px-in-rem)*25);height:calc(var(--px-in-rem)*25);margin:0 .83333rem;margin:0 var(--sp-3);width:4.72222rem;width:-webkit-calc(var(--px-in-rem)*68);width:calc(var(--px-in-rem)*68)}.NjI3ckoK6kq8XtP3WO6i{-moz-box-flex:1;-webkit-align-self:center;align-self:center;-webkit-flex-grow:1;flex-grow:1;max-width:100%}.c0k_ZKNWb7kLKb5A0HQ0{color:#3969ef;color:var(--theme-col-txt-button-ghost);padding:0 1.11111rem;padding:0 var(--sp-4)}.c0k_ZKNWb7kLKb5A0HQ0:hover{color:#2b55ca;color:var(--theme-col-txt-button-ghost-hover)}.c0k_ZKNWb7kLKb5A0HQ0:active,.c0k_ZKNWb7kLKb5A0HQ0:focus{color:#1e42a4;color:var(--theme-col-txt-button-ghost-active)}.c0k_ZKNWb7kLKb5A0HQ0 svg{margin-right:.27778rem;margin-right:var(--sp-1)}.MRg1EltZJTDIAc7OWI4F{margin-left:.55556rem;margin-left:var(--sp-2)}.YCdtdddFO6Bd_EXyJtFW{display:-webkit-flex;display:-moz-box;display:flex}.YCdtdddFO6Bd_EXyJtFW>*{-moz-box-align:center;-moz-box-orient:vertical;-moz-box-direction:normal;-webkit-align-items:center;align-items:center;border-right:1px solid #ddd;border-right:1px solid var(--theme-col-border-promomodule);display:-webkit-inline-flex;display:-moz-inline-box;display:inline-flex;-webkit-flex-direction:column;flex-direction:column;margin-bottom:.83333rem;margin-bottom:var(--sp-3);padding:0 3.05556rem;padding:0 var(--sp-11);text-align:center;width:50%}.YCdtdddFO6Bd_EXyJtFW>:last-child{border-right-width:0}.YCdtdddFO6Bd_EXyJtFW>* p{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);font-weight:700;margin-bottom:.83333rem;margin-bottom:var(--sp-3)}.YCdtdddFO6Bd_EXyJtFW>* p+p{font-size:.97222rem;font-size:-webkit-calc(var(--px-in-rem)*14);font-size:calc(var(--px-in-rem)*14);font-weight:400}.YCdtdddFO6Bd_EXyJtFW button i{margin-right:.55556rem;margin-right:var(--sp-2)}.JEmcYszVtdieuVbYPS3n{color:#3969ef;color:var(--theme-col-txt-button-ghost);font-weight:400}.JEmcYszVtdieuVbYPS3n:hover{color:#2b55ca;color:var(--theme-col-txt-button-ghost-hover)}.JEmcYszVtdieuVbYPS3n:active,.JEmcYszVtdieuVbYPS3n:focus{color:#1e42a4;color:var(--theme-col-txt-button-ghost-active)}.IVDNgNm9fnyFKIOf5Tbs{-moz-box-align:stretch;-webkit-align-items:stretch;align-items:stretch;background:#fafafa;background:var(--theme-col-bg-promomodule);border:1px solid #ddd;border:1px solid var(--theme-col-border-promomodule);border-radius:8px;border-radius:var(--rounded-md);color:#111;color:var(--theme-col-txt-promomodule);display:-webkit-flex;display:-moz-box;display:flex;font-size:.97222rem;font-size:-webkit-calc(var(--px-in-rem)*14);font-size:calc(var(--px-in-rem)*14);font-weight:700;margin:0 -.83333rem 2.22222rem;margin:0 calc(var(--sp-3)*-1) var(--sp-8);min-height:3.33333rem;min-height:var(--sp-12);position:relative}.IVDNgNm9fnyFKIOf5Tbs>svg{-webkit-align-self:center;align-self:center;height:1.38889rem;height:-webkit-calc(var(--px-in-rem)*20);height:calc(var(--px-in-rem)*20);margin:0 .83333rem;margin:0 var(--sp-3);width:1.38889rem;width:-webkit-calc(var(--px-in-rem)*20);width:calc(var(--px-in-rem)*20)}.bEOg1Fvu1qOa1asJaGzQ{-moz-box-flex:1;-webkit-align-self:center;align-self:center;-webkit-flex-grow:1;flex-grow:1;max-width:100%}.ertU0qalSrDTdIAlUE8i{color:#3969ef;color:var(--theme-col-txt-button-ghost)}.ertU0qalSrDTdIAlUE8i:hover{color:#2b55ca;color:var(--theme-col-txt-button-ghost-hover)}.ertU0qalSrDTdIAlUE8i:active,.ertU0qalSrDTdIAlUE8i:focus{color:#1e42a4;color:var(--theme-col-txt-button-ghost-active)}.ertU0qalSrDTdIAlUE8i svg{margin-right:.27778rem;margin-right:var(--sp-1)}.XBrBnMlkEyUAFClY7ptN{color:#999;color:var(--theme-col-txt-dismiss-promomodule);display:-webkit-flex;display:-moz-box;display:flex;min-width:2.22222rem;min-width:var(--sp-8)}.XBrBnMlkEyUAFClY7ptN:hover{color:#666;color:var(--theme-col-txt-dismiss-hover-promomodule)}.XBrBnMlkEyUAFClY7ptN:active,.XBrBnMlkEyUAFClY7ptN:focus{color:var(--theme-col-txt-dismiss-active-promomodule)}.K4kjiecet0sBK_EVN931{-moz-box-orient:vertical;-moz-box-direction:normal;background:#fafafa;background:var(--theme-col-bg-promomodule);border:1px solid #ddd;border:1px solid var(--theme-col-border-promomodule);border-radius:8px;border-radius:var(--rounded-md);color:#111;color:var(--theme-col-txt-promomodule);display:-webkit-flex;display:-moz-box;display:flex;-webkit-flex-direction:column;flex-direction:column;margin-top:.55556rem;margin-top:var(--sp-2);padding:.83333rem 1.11111rem;padding:var(--sp-3) var(--sp-4);position:absolute;right:0;top:3.33333rem;top:var(--sp-12);width:13.33333rem;width:var(--sp-48);z-index:10}.K4kjiecet0sBK_EVN931 p{font-size:.90278rem;font-size:-webkit-calc(var(--px-in-rem)*13);font-size:calc(var(--px-in-rem)*13);font-weight:400;line-height:1.25rem;line-height:-webkit-calc(var(--px-in-rem)*18);line-height:calc(var(--px-in-rem)*18);margin-bottom:.55556rem;margin-bottom:var(--sp-2);text-align:center}.K4kjiecet0sBK_EVN931 a{-webkit-align-self:center;align-self:center}.K4kjiecet0sBK_EVN931 svg{margin-right:.55556rem;margin-right:var(--sp-2)}.K4kjiecet0sBK_EVN931:before{border-bottom:.55556rem solid #ddd;border-bottom:var(--sp-2) solid var(--theme-col-border-promomodule);border-left:.55556rem solid transparent;border-left:var(--sp-2) solid transparent;border-right:.55556rem solid transparent;border-right:var(--sp-2) solid transparent;content:"";height:0;left:50%;margin-left:-4px;position:absolute;top:-.55556rem;top:-webkit-calc(var(--sp-2)*-1);top:calc(var(--sp-2)*-1);width:0}.K4kjiecet0sBK_EVN931:after{border-bottom:.55556rem solid #fafafa;border-bottom:var(--sp-2) solid var(--theme-col-bg-promomodule);border-left:.55556rem solid transparent;border-left:var(--sp-2) solid transparent;border-right:.55556rem solid transparent;border-right:var(--sp-2) solid transparent;content:"";height:0;left:50%;margin-left:-4px;margin-top:2px;position:absolute;top:-.55556rem;top:-webkit-calc(var(--sp-2)*-1);top:calc(var(--sp-2)*-1);width:0}.Na5guj4qci7GjgOh7Oq2{-moz-box-align:stretch;-webkit-align-items:stretch;align-items:stretch;background:#fff0c2;background:var(--theme-col-bg-promomodule-yellow);border:1px solid #fc3;border:1px solid var(--theme-col-border-promomodule-yellow);border-radius:8px;border-radius:var(--rounded-md);color:#111;color:var(--theme-col-txt-promomodule-yellow);display:-webkit-flex;display:-moz-box;display:flex;font-size:.97222rem;font-size:-webkit-calc(var(--px-in-rem)*14);font-size:calc(var(--px-in-rem)*14);font-weight:700;margin:0 -.83333rem 2.22222rem;margin:0 calc(var(--sp-3)*-1) var(--sp-8);min-height:3.33333rem;min-height:var(--sp-12);position:relative}.Na5guj4qci7GjgOh7Oq2>svg{-webkit-align-self:center;align-self:center;height:1.73611rem;height:-webkit-calc(var(--px-in-rem)*25);height:calc(var(--px-in-rem)*25);margin:0 .83333rem;margin:0 var(--sp-3);width:4.72222rem;width:-webkit-calc(var(--px-in-rem)*68);width:calc(var(--px-in-rem)*68)}._48YnRw3mqu9G0n_sL8tx{-moz-box-flex:1;-webkit-flex-grow:1;flex-grow:1;max-width:100%}.RVjjOGZSqxYaxrOyMLGN,._48YnRw3mqu9G0n_sL8tx{-webkit-align-self:center;align-self:center}._RZFxttUCocd94Av4zeF{color:#999;color:var(--theme-col-txt-dismiss-promomodule-yellow);display:-webkit-flex;display:-moz-box;display:flex;min-width:2.22222rem;min-width:var(--sp-8)}._RZFxttUCocd94Av4zeF:hover{color:#666;color:var(--theme-col-txt-dismiss-hover-promomodule-yellow)}._RZFxttUCocd94Av4zeF:active,._RZFxttUCocd94Av4zeF:focus{color:#666;color:var(--theme-col-txt-dismiss-hover-promomodule-yellow)}._NVV0lgEdvcag3lPWEyW{-moz-box-align:stretch;-webkit-align-items:stretch;align-items:stretch;background:#fafafa;background:var(--theme-col-bg-promomodule);border:1px solid #ddd;border:1px solid var(--theme-col-border-promomodule);border-radius:8px;border-radius:var(--rounded-md);color:#111;color:var(--theme-col-txt-promomodule);display:-webkit-flex;display:-moz-box;display:flex;font-size:.97222rem;font-size:-webkit-calc(var(--px-in-rem)*14);font-size:calc(var(--px-in-rem)*14);font-weight:700;margin:0 -.83333rem 2.22222rem;margin:0 calc(var(--sp-3)*-1) var(--sp-8);min-height:3.33333rem;min-height:var(--sp-12)}._NVV0lgEdvcag3lPWEyW>svg{-webkit-align-self:center;align-self:center;height:1.73611rem;height:-webkit-calc(var(--px-in-rem)*25);height:calc(var(--px-in-rem)*25);margin:0 .83333rem;margin:0 var(--sp-3);width:4.72222rem;width:-webkit-calc(var(--px-in-rem)*68);width:calc(var(--px-in-rem)*68)}.zKeeVa6dbCu4RSaEuSyw{-moz-box-flex:1;-webkit-align-self:center;align-self:center;-webkit-flex-grow:1;flex-grow:1;max-width:100%}.pou4AI0L7bvPcGsokG71{color:#3969ef;color:var(--theme-col-txt-button-ghost)}.pou4AI0L7bvPcGsokG71:hover{color:#2b55ca;color:var(--theme-col-txt-button-ghost-hover)}.pou4AI0L7bvPcGsokG71:active,.pou4AI0L7bvPcGsokG71:focus{color:#1e42a4;color:var(--theme-col-txt-button-ghost-active)}.pou4AI0L7bvPcGsokG71 svg{margin-right:.27778rem;margin-right:var(--sp-1)}.LMtvwxvUjf8Oy9teyVVe{color:#999;color:var(--theme-col-txt-dismiss-promomodule);display:-webkit-flex;display:-moz-box;display:flex;min-width:2.22222rem;min-width:var(--sp-8)}.LMtvwxvUjf8Oy9teyVVe:hover{color:#666;color:var(--theme-col-txt-dismiss-hover-promomodule)}.LMtvwxvUjf8Oy9teyVVe:active,.LMtvwxvUjf8Oy9teyVVe:focus{color:var(--theme-col-txt-dismiss-active-promomodule)}.lfRwTNN1Hf8R2G1aX9HT{-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;text-align:center}.lfRwTNN1Hf8R2G1aX9HT,.lfRwTNN1Hf8R2G1aX9HT:hover,.lfRwTNN1Hf8R2G1aX9HT:visited{text-decoration:none}.lfRwTNN1Hf8R2G1aX9HT{background:none;border:none;color:inherit;cursor:pointer;line-height:0;font:inherit;margin:0;outline:inherit;padding:0}.lfRwTNN1Hf8R2G1aX9HT:focus-visible{box-shadow:#00278e;box-shadow:var(--col-result-focus-outline)}.O9Ipab51rBntYb0pwOQn{background-color:#fff;background-color:var(--theme-col-bg-card);border:1px solid #e5e5e5;border:1px solid var(--theme-col-border-ui);border-radius:8px;border-radius:var(--rounded-md);box-shadow:0 2px 3px rgb(0 0 0/6%);box-shadow:var(--theme-shadow-card);padding:1.11111rem;padding:var(--sp-4)}.XstXTivL2FzVzau53UZr{background-color:#fafafa;background-color:var(--theme-col-bg-card-header);border-bottom:1px solid #e5e5e5;border-bottom:1px solid var(--theme-col-border-ui);border-top-left-radius:8px;border-top-left-radius:var(--rounded-md);border-top-right-radius:8px;border-top-right-radius:var(--rounded-md);margin:calc(var(--sp-4)*-1) calc(var(--sp-4)*-1) var(--sp-4);padding:.55556rem 1.11111rem;padding:var(--sp-2) var(--sp-4)}.LvQyYDtEWRDVojZY8klT{left:0;right:0}.LvQyYDtEWRDVojZY8klT,.tV0DEo5a5LUrl8Piw6Ao{border-bottom-left-radius:8px;border-bottom-left-radius:var(--rounded-md);border-bottom-right-radius:8px;border-bottom-right-radius:var(--rounded-md)}.tV0DEo5a5LUrl8Piw6Ao{background:#fafafa;background:var(--theme-col-bg-expandcollapse);border-top:1px solid #e5e5e5;border-top:1px solid var(--theme-col-border-expandcollapse);color:#222;color:var(--theme-col-txt-expandcollapse);cursor:pointer;display:block;font-size:.97222rem;font-size:-webkit-calc(var(--px-in-rem)*14);font-size:calc(var(--px-in-rem)*14);font-weight:700;height:40px;padding-top:12px;position:relative;text-align:center;width:100%}.tV0DEo5a5LUrl8Piw6Ao,.tV0DEo5a5LUrl8Piw6Ao i{-moz-box-sizing:border-box;box-sizing:border-box}.tV0DEo5a5LUrl8Piw6Ao i{background:#fff;background:var(--theme-col-bg-button-expandcollapse);border:1px solid #ddd;border:1px solid var(--theme-col-border-button-expandcollapse);border-radius:50%;color:#333;color:var(--theme-col-icon-button-expandcollapse);font-size:14px;height:28px;left:-webkit-calc(50% - 14px);left:calc(50% - 14px);padding-top:2px;position:absolute;top:-14px;width:28px}.tV0DEo5a5LUrl8Piw6Ao i:hover{background:#fff;background:var(--theme-col-bg-button-expandcollapse-hover)}.tV0DEo5a5LUrl8Piw6Ao i:active{background:#fafafa;background:var(--theme-col-bg-button-expandcollapse-active)}.eAxUVg_e1KU9Eso2Si0O{display:-webkit-flex;display:-moz-box;display:flex;gap:.55556rem;gap:var(--sp-2)}.c3CWu7FwdwdYY6CvaEuA{background:#eee;background:var(--theme-col-bg-button-tab);border:none;border-radius:20px;color:#111;color:var(--theme-col-txt-button-tab);cursor:pointer;display:inline-block;font:inherit;font-size:1rem;font-size:-webkit-calc(var(--px-in-rem)*14.4);font-size:calc(var(--px-in-rem)*14.4);font-weight:600;line-height:1.25;padding:.27778rem .83333rem;padding:var(--sp-1) var(--sp-3)}.c3CWu7FwdwdYY6CvaEuA:hover{background:#e5e5e5;background:var(--theme-col-bg-button-tab-hover)}.c3CWu7FwdwdYY6CvaEuA[data-selected]{background:#111;background:var(--theme-col-bg-button-tab-active);color:#f5f5f5;color:var(--theme-col-txt-button-tab-active);cursor:default}:root{--module-qna:1;--qna-padding:var(--sp-5);--qna-thumbnail-single-size:92px;--qna-thumbnail-list-size-xs:25px;--qna-thumbnail-list-size-sm:44px;--qna-thumbnail-list-size-md:44px;--qna-thumbnail-gallery-size-sm:86px;--qna-thumbnail-gallery-size-md:106px;--qna-mobile-padding:var(--sp-4);--qna-mobile-thumbnail-single-size:64px;--qna-mobile-gallery-size:90px}.nr_ewG6AQFJyBVJ9CQON{-moz-box-sizing:border-box;box-sizing:border-box;color:#111;color:var(--theme-col-txt-card);margin:0 -1px 26px;margin:var(--module-margin);padding:1.38889rem;padding:var(--qna-padding);position:relative}.nr_ewG6AQFJyBVJ9CQON h1,.nr_ewG6AQFJyBVJ9CQON h2,.nr_ewG6AQFJyBVJ9CQON h3,.nr_ewG6AQFJyBVJ9CQON h4,.nr_ewG6AQFJyBVJ9CQON h5,.nr_ewG6AQFJyBVJ9CQON ul{margin:0;padding:0}.nr_ewG6AQFJyBVJ9CQON a{color:inherit}.nr_ewG6AQFJyBVJ9CQON.me1itxoHbX8rHrjqV4R3{min-height:-webkit-calc(2.77778rem + 92px);min-height:calc(2.77778rem + 92px);min-height:-webkit-calc(var(--qna-padding)*2 + var(--qna-thumbnail-single-size));min-height:calc(var(--qna-padding)*2 + var(--qna-thumbnail-single-size))}.is-mobile .nr_ewG6AQFJyBVJ9CQON{margin:0 0 7px;margin:var(--module-margin-mobile);overflow:hidden;padding:1.11111rem;padding:var(--qna-mobile-padding)}.is-mobile .nr_ewG6AQFJyBVJ9CQON.me1itxoHbX8rHrjqV4R3{min-height:-webkit-calc(2.22222rem + 64px);min-height:calc(2.22222rem + 64px);min-height:-webkit-calc(var(--qna-mobile-padding)*2 + var(--qna-mobile-thumbnail-single-size));min-height:calc(var(--qna-mobile-padding)*2 + var(--qna-mobile-thumbnail-single-size))}.GAHftbxcHcRcLfM_niVP{margin:-1.38889rem;margin:calc(var(--qna-padding)*-1);margin-top:1.11111rem;margin-top:var(--sp-4)}.is-mobile .GAHftbxcHcRcLfM_niVP{margin:-1.11111rem;margin:calc(var(--qna-mobile-padding)*-1);margin-top:1.11111rem;margin-top:var(--sp-4)}.ajnGMJDP8ZIeHsynCNCm{overflow:hidden;position:relative}.ajnGMJDP8ZIeHsynCNCm,.ajnGMJDP8ZIeHsynCNCm img{background:#ccc;background:var(--theme-col-image-preload)}.ajnGMJDP8ZIeHsynCNCm img{display:block;font-size:0}.ajnGMJDP8ZIeHsynCNCm:not(.R01Gv5Vx6sOfFCneNiqT) img{height:auto;left:50%;position:absolute;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}@supports (object-fit:cover){.ajnGMJDP8ZIeHsynCNCm:not(.R01Gv5Vx6sOfFCneNiqT) img{height:100%;left:unset;object-fit:cover;top:unset;-webkit-transform:unset;transform:unset;width:100%}}.W4hYIVnprYiT66M1QuNe h3{color:#222;color:var(--theme-col-txt-card-subtitle);font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);font-weight:400;line-height:1}.W4hYIVnprYiT66M1QuNe.tz6B3mJ9tXppy0uw9ZA1 h3{margin-bottom:.55556rem;margin-bottom:var(--sp-2)}.W4hYIVnprYiT66M1QuNe.Vd58IQQ9_NQm6uPizN3b h2{font-size:1.66667rem;font-size:-webkit-calc(var(--px-in-rem)*24);font-size:calc(var(--px-in-rem)*24);font-weight:700;line-height:1;margin-bottom:.27778rem;margin-bottom:var(--sp-1)}.me1itxoHbX8rHrjqV4R3 .W4hYIVnprYiT66M1QuNe{padding-right:calc(1.38889rem + 92px);padding-right:calc(var(--qna-padding) + var(--qna-thumbnail-single-size))}.is-mobile .W4hYIVnprYiT66M1QuNe.tz6B3mJ9tXppy0uw9ZA1 h3{margin-bottom:.27778rem;margin-bottom:var(--sp-1)}.is-mobile .me1itxoHbX8rHrjqV4R3 .W4hYIVnprYiT66M1QuNe{padding-right:calc(1.11111rem + 64px);padding-right:calc(var(--qna-mobile-padding) + var(--qna-mobile-thumbnail-single-size))}.i_ahtgeTU2OYiMZz7Dnm{line-height:0}.i_ahtgeTU2OYiMZz7Dnm.oSC8nKE_7OYA4IEcmOBQ .d3sXpYMmDKnqC90dk5P7{font-size:1.38889rem;font-size:-webkit-calc(var(--px-in-rem)*20);font-size:calc(var(--px-in-rem)*20);font-weight:400;line-height:1.25}.i_ahtgeTU2OYiMZz7Dnm.oSC8nKE_7OYA4IEcmOBQ .Og3KYY41jRqNR95FGbz_{display:none}.i_ahtgeTU2OYiMZz7Dnm.oSC8nKE_7OYA4IEcmOBQ .SLSZwWb6YFmKJ3tGJh30{font-size:.76389rem;font-size:-webkit-calc(var(--px-in-rem)*11);font-size:calc(var(--px-in-rem)*11);font-weight:400}.i_ahtgeTU2OYiMZz7Dnm.s8PvI0HCX5LxL36mTyix .d3sXpYMmDKnqC90dk5P7{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);font-weight:700;line-height:1.375}.i_ahtgeTU2OYiMZz7Dnm.s8PvI0HCX5LxL36mTyix .Og3KYY41jRqNR95FGbz_{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);font-weight:400;line-height:1.375}.i_ahtgeTU2OYiMZz7Dnm.s8PvI0HCX5LxL36mTyix .SLSZwWb6YFmKJ3tGJh30{font-size:.625rem;font-size:-webkit-calc(var(--px-in-rem)*9);font-size:calc(var(--px-in-rem)*9);font-weight:700}.i_ahtgeTU2OYiMZz7Dnm.g0DNYJzO_3yAQ28Vs4yo .d3sXpYMmDKnqC90dk5P7{font-size:1.66667rem;font-size:-webkit-calc(var(--px-in-rem)*24);font-size:calc(var(--px-in-rem)*24);font-weight:600;line-height:1.375}.i_ahtgeTU2OYiMZz7Dnm.g0DNYJzO_3yAQ28Vs4yo .Og3KYY41jRqNR95FGbz_{font-size:1.38889rem;font-size:-webkit-calc(var(--px-in-rem)*20);font-size:calc(var(--px-in-rem)*20);font-weight:400;line-height:1.25}.i_ahtgeTU2OYiMZz7Dnm.g0DNYJzO_3yAQ28Vs4yo .SLSZwWb6YFmKJ3tGJh30{font-size:.90278rem;font-size:-webkit-calc(var(--px-in-rem)*13);font-size:calc(var(--px-in-rem)*13);font-weight:600}.i_ahtgeTU2OYiMZz7Dnm.rTp3gjHLM_HhV51PNxOO .d3sXpYMmDKnqC90dk5P7{font-size:2.5rem;font-size:-webkit-calc(var(--px-in-rem)*36);font-size:calc(var(--px-in-rem)*36);font-weight:600;line-height:1.25}.i_ahtgeTU2OYiMZz7Dnm.rTp3gjHLM_HhV51PNxOO .Og3KYY41jRqNR95FGbz_{font-size:1.38889rem;font-size:-webkit-calc(var(--px-in-rem)*20);font-size:calc(var(--px-in-rem)*20);font-weight:400;line-height:1.25}.i_ahtgeTU2OYiMZz7Dnm.rTp3gjHLM_HhV51PNxOO .SLSZwWb6YFmKJ3tGJh30{font-size:1.31944rem;font-size:-webkit-calc(var(--px-in-rem)*19);font-size:calc(var(--px-in-rem)*19);font-weight:600}.i_ahtgeTU2OYiMZz7Dnm .d3sXpYMmDKnqC90dk5P7{color:#222;color:var(--theme-col-txt-qna-answer)}.i_ahtgeTU2OYiMZz7Dnm .Og3KYY41jRqNR95FGbz_,.i_ahtgeTU2OYiMZz7Dnm .SLSZwWb6YFmKJ3tGJh30{color:#666;color:var(--theme-col-txt-qna-details)}.i_ahtgeTU2OYiMZz7Dnm .Og3KYY41jRqNR95FGbz_.sqjThoTmCutDuLnxzwhO{color:#111;color:var(--theme-col-txt-card);font-weight:600}.i_ahtgeTU2OYiMZz7Dnm .Og3KYY41jRqNR95FGbz_.sqjThoTmCutDuLnxzwhO,.is-mobile .i_ahtgeTU2OYiMZz7Dnm.oSC8nKE_7OYA4IEcmOBQ .d3sXpYMmDKnqC90dk5P7,.is-mobile .i_ahtgeTU2OYiMZz7Dnm.s8PvI0HCX5LxL36mTyix .d3sXpYMmDKnqC90dk5P7{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);line-height:1.375}.is-mobile .i_ahtgeTU2OYiMZz7Dnm.s8PvI0HCX5LxL36mTyix .Og3KYY41jRqNR95FGbz_{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);line-height:1.5}.is-mobile .i_ahtgeTU2OYiMZz7Dnm.g0DNYJzO_3yAQ28Vs4yo .d3sXpYMmDKnqC90dk5P7{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);line-height:1.375}.is-mobile .i_ahtgeTU2OYiMZz7Dnm.g0DNYJzO_3yAQ28Vs4yo .Og3KYY41jRqNR95FGbz_{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);line-height:1.5}.is-mobile .i_ahtgeTU2OYiMZz7Dnm.rTp3gjHLM_HhV51PNxOO .d3sXpYMmDKnqC90dk5P7{font-size:1.80556rem;font-size:-webkit-calc(var(--px-in-rem)*26);font-size:calc(var(--px-in-rem)*26);line-height:1.25}.is-mobile .i_ahtgeTU2OYiMZz7Dnm.rTp3gjHLM_HhV51PNxOO .Og3KYY41jRqNR95FGbz_{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16);line-height:1.5}.IFTxThqNjIcOOufWAzfQ .BIDGtqNcbQoVx7LI4SOj{border-radius:8px;border-radius:var(--rounded-md);height:92px;height:var(--qna-thumbnail-single-size);position:absolute;right:1.38889rem;right:var(--qna-padding);top:1.38889rem;top:var(--qna-padding);width:92px;width:var(--qna-thumbnail-single-size)}.IFTxThqNjIcOOufWAzfQ .BIDGtqNcbQoVx7LI4SOj+.m4940aCQFury8AzWC46o{padding-right:calc(1.38889rem + 92px);padding-right:calc(var(--qna-padding) + var(--qna-thumbnail-single-size))}.is-mobile .IFTxThqNjIcOOufWAzfQ .BIDGtqNcbQoVx7LI4SOj{bottom:1.11111rem;bottom:var(--qna-mobile-padding);height:64px;height:var(--qna-mobile-thumbnail-single-size);right:1.11111rem;right:var(--qna-mobile-padding);top:unset;width:64px;width:var(--qna-mobile-thumbnail-single-size)}.is-mobile .IFTxThqNjIcOOufWAzfQ .BIDGtqNcbQoVx7LI4SOj+.m4940aCQFury8AzWC46o{padding-right:calc(1.11111rem + 64px);padding-right:calc(var(--qna-mobile-padding) + var(--qna-mobile-thumbnail-single-size))}.biiqk1fQkbgmvzVx3wFU{padding:0}.biiqk1fQkbgmvzVx3wFU .i_ahtgeTU2OYiMZz7Dnm{-moz-box-align:center;-webkit-align-items:center;align-items:center;display:-webkit-flex;display:-moz-box;display:flex;padding:.55556rem 0;padding:var(--sp-2) 0}.biiqk1fQkbgmvzVx3wFU .m4940aCQFury8AzWC46o{-moz-box-flex:1;-webkit-flex:1;flex:1}.biiqk1fQkbgmvzVx3wFU .BIDGtqNcbQoVx7LI4SOj{border-radius:100%;float:left;margin-right:.83333rem;margin-right:var(--sp-3)}.biiqk1fQkbgmvzVx3wFU li:not(:last-child) .i_ahtgeTU2OYiMZz7Dnm{border-bottom:1px solid #e5e5e5;border-bottom:1px solid var(--theme-col-border-qna-list-sep)}.biiqk1fQkbgmvzVx3wFU .i_ahtgeTU2OYiMZz7Dnm.oSC8nKE_7OYA4IEcmOBQ .BIDGtqNcbQoVx7LI4SOj{height:25px;height:var(--qna-thumbnail-list-size-xs);width:25px;width:var(--qna-thumbnail-list-size-xs)}.biiqk1fQkbgmvzVx3wFU .i_ahtgeTU2OYiMZz7Dnm.s8PvI0HCX5LxL36mTyix .BIDGtqNcbQoVx7LI4SOj{height:44px;height:var(--qna-thumbnail-list-size-sm);width:44px;width:var(--qna-thumbnail-list-size-sm)}.biiqk1fQkbgmvzVx3wFU .i_ahtgeTU2OYiMZz7Dnm.g0DNYJzO_3yAQ28Vs4yo .BIDGtqNcbQoVx7LI4SOj{height:44px;height:var(--qna-thumbnail-list-size-md);width:44px;width:var(--qna-thumbnail-list-size-md)}.biiqk1fQkbgmvzVx3wFU li:first-child{margin-top:-.55556rem;margin-top:calc(var(--sp-2)*-1)}.biiqk1fQkbgmvzVx3wFU li:first-child .i_ahtgeTU2OYiMZz7Dnm.oSC8nKE_7OYA4IEcmOBQ,.biiqk1fQkbgmvzVx3wFU li:first-child .i_ahtgeTU2OYiMZz7Dnm.s8PvI0HCX5LxL36mTyix{margin-top:1.66667rem;margin-top:var(--sp-6)}.biiqk1fQkbgmvzVx3wFU li:last-child .i_ahtgeTU2OYiMZz7Dnm{padding-bottom:0}.is-mobile .biiqk1fQkbgmvzVx3wFU li:first-child .i_ahtgeTU2OYiMZz7Dnm:not(.rTp3gjHLM_HhV51PNxOO){margin-top:1.11111rem;margin-top:var(--sp-4)}.biiqk1fQkbgmvzVx3wFU+.GAHftbxcHcRcLfM_niVP{margin-top:.55556rem;margin-top:var(--sp-2)}.GewSvxqO8T2PSpF7LgnB .d3sXpYMmDKnqC90dk5P7{font-weight:600;line-height:1}.GewSvxqO8T2PSpF7LgnB .Og3KYY41jRqNR95FGbz_{color:#111;color:var(--theme-col-txt-card);font-weight:600;line-height:1}.GewSvxqO8T2PSpF7LgnB .BIDGtqNcbQoVx7LI4SOj{border-radius:8px;border-radius:var(--rounded-md);margin-bottom:6px}.GewSvxqO8T2PSpF7LgnB ul{display:-webkit-flex;display:-moz-box;display:flex}.GewSvxqO8T2PSpF7LgnB ul li{margin-left:1.11111rem;margin-left:var(--sp-4)}.GewSvxqO8T2PSpF7LgnB ul li:last-child{margin-right:1.11111rem;margin-right:var(--sp-4)}@supports (gap:unset){.GewSvxqO8T2PSpF7LgnB ul{gap:1.11111rem;gap:var(--sp-4)}.GewSvxqO8T2PSpF7LgnB ul li{margin-left:unset}.GewSvxqO8T2PSpF7LgnB ul li:last-child{margin-right:unset}}.GewSvxqO8T2PSpF7LgnB ul{padding:0}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB{margin:0 -1.38889rem;margin:0 calc(var(--qna-padding)*-1);overflow-x:scroll;scrollbar-width:none}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB::-webkit-scrollbar{display:none}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB.s8PvI0HCX5LxL36mTyix li{-webkit-flex-basis:86px;flex-basis:86px;-webkit-flex-basis:var(--qna-thumbnail-gallery-size-sm);flex-basis:var(--qna-thumbnail-gallery-size-sm)}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB.s8PvI0HCX5LxL36mTyix .Og3KYY41jRqNR95FGbz_,html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB.s8PvI0HCX5LxL36mTyix .d3sXpYMmDKnqC90dk5P7{font-size:1rem;font-size:-webkit-calc(var(--px-in-rem)*14.4);font-size:calc(var(--px-in-rem)*14.4)}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB.s8PvI0HCX5LxL36mTyix .BIDGtqNcbQoVx7LI4SOj{height:86px;height:var(--qna-thumbnail-gallery-size-sm);width:86px;width:var(--qna-thumbnail-gallery-size-sm)}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB.g0DNYJzO_3yAQ28Vs4yo li{-webkit-flex-basis:106px;flex-basis:106px;-webkit-flex-basis:var(--qna-thumbnail-gallery-size-md);flex-basis:var(--qna-thumbnail-gallery-size-md)}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB.g0DNYJzO_3yAQ28Vs4yo .Og3KYY41jRqNR95FGbz_,html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB.g0DNYJzO_3yAQ28Vs4yo .d3sXpYMmDKnqC90dk5P7{font-size:1.11111rem;font-size:-webkit-calc(var(--px-in-rem)*16);font-size:calc(var(--px-in-rem)*16)}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB.g0DNYJzO_3yAQ28Vs4yo .BIDGtqNcbQoVx7LI4SOj{height:106px;height:var(--qna-thumbnail-gallery-size-md);width:106px;width:var(--qna-thumbnail-gallery-size-md)}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB ul{margin-top:.83333rem;margin-top:var(--sp-3)}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB ul:after,html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB ul:before{content:"";min-width:.27778rem;min-width:-webkit-calc(var(--qna-padding) - var(--sp-4));min-width:calc(var(--qna-padding) - var(--sp-4))}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB li{-moz-box-flex:1;-webkit-flex:1 0;flex:1 0;overflow:hidden}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB .ic5quRkqRJ_nDZFbkFHJ{background:#fafafa;background:var(--theme-col-bg-button-qna);border:1px solid #ddd;border:1px solid var(--theme-col-border-button-qna);border-radius:50%;box-shadow:0 2px 3px rgba(0,0,0,.06);-moz-box-sizing:border-box;box-sizing:border-box;color:#111;color:var(--theme-col-icon-qna);height:36px;position:absolute;top:50%;width:36px;z-index:1}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB .ic5quRkqRJ_nDZFbkFHJ:hover{background:#fafafa;background:var(--theme-col-bg-button-qna-hover);border:1px solid #ababab;border:1px solid var(--theme-col-border-button-qna-hover);box-shadow:0 2px 3px rgba(0,0,0,.1)}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB .ic5quRkqRJ_nDZFbkFHJ.DVhx2XECJLmhIs1XeHPs{left:-18px}html:not(.is-mobile) .GewSvxqO8T2PSpF7LgnB .ic5quRkqRJ_nDZFbkFHJ.KI8t_iu6rzBDqOkWTedg{right:-18px}.is-mobile .GewSvxqO8T2PSpF7LgnB .Og3KYY41jRqNR95FGbz_,.is-mobile .GewSvxqO8T2PSpF7LgnB .d3sXpYMmDKnqC90dk5P7{font-size:1rem;font-size:-webkit-calc(var(--px-in-rem)*14.4);font-size:calc(var(--px-in-rem)*14.4)}.is-mobile .GewSvxqO8T2PSpF7LgnB .BIDGtqNcbQoVx7LI4SOj{height:90px;height:var(--qna-mobile-gallery-size);width:90px;width:var(--qna-mobile-gallery-size)}.is-mobile .GewSvxqO8T2PSpF7LgnB ul{-moz-box-pack:space-evenly;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-justify-content:space-evenly;justify-content:space-evenly;margin-top:1.38889rem;margin-top:var(--sp-5)}.is-mobile .GewSvxqO8T2PSpF7LgnB li{width:90px;width:var(--qna-mobile-gallery-size)}@media (min-width:366px){.is-mobile .GewSvxqO8T2PSpF7LgnB ul{-moz-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-top:.83333rem;margin-top:var(--sp-3)}}.F9nU0gzE0Yyy31CzM3I0{border-radius:8px;border-radius:var(--rounded-md);margin-top:.55556rem;margin-top:var(--sp-2);max-height:400px;width:100%}.dwgLBdyYl8cr6uYvdTvM{margin-top:1.38889rem;margin-top:var(--sp-5)}.NgGEHOvFsqeL8_hAeQAd{-moz-box-orient:horizontal;-moz-box-direction:normal;-moz-box-pack:end;display:-webkit-flex;display:-moz-box;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-end;justify-content:flex-end;margin-top:-1.66667rem;margin-top:calc(var(--sp-6)*-1)}.NgGEHOvFsqeL8_hAeQAd .feedback-prompt{padding:0}.is-mobile .NgGEHOvFsqeL8_hAeQAd{margin-bottom:1.38889rem;margin-bottom:var(--sp-5);margin-top:-.83333rem;margin-top:calc(var(--sp-3)*-1)}:root{--module-time:1 }.SqPGOHgOX62xRaImwwDi{font-weight:400;line-height:37px}.SqPGOHgOX62xRaImwwDi svg{fill:currentColor;margin-right:.41667rem;margin-right:calc(var(--px-in-rem)*6);-webkit-transform:translateY(-1px);transform:translateY(-1px)}.SqPGOHgOX62xRaImwwDi,.SqPGOHgOX62xRaImwwDi:active,.SqPGOHgOX62xRaImwwDi:visited{color:#aaa;color:var(--theme-col-txt-header-link)}.SqPGOHgOX62xRaImwwDi:hover{color:#666;color:var(--theme-col-txt-header-link-hover)}:root{--default-font:"DDG_ProximaNova","DDG_ProximaNova_UI_0","DDG_ProximaNova_UI_1","DDG_ProximaNova_UI_2","DDG_ProximaNova_UI_3","DDG_ProximaNova_UI_4","DDG_ProximaNova_UI_5","DDG_ProximaNova_UI_6","Proxima Nova","Helvetica Neue","Helvetica","Segoe UI","Nimbus Sans L","Liberation Sans","Open Sans",FreeSans,Arial,sans-serif;--col-black:#111;--col-dark:#222;--col-white:#fff;--col-silver-light:#f7f7f7;--col-silver:#f2f2f2;--col-silver-transparent:hsla(0,0%,95%,0);--col-silver-dark:#ededed;--col-platinum-light:#e5e5e5;--col-platinum:#e0e0e0;--col-platinum-dark:#d0d0d0;--col-platinum-darker:#c3c3c3;--col-grey-light:#aaa;--col-grey:#999;--col-grey-dark:#888;--col-gray-blue:#707978;--col-slate-light:#666;--col-slate-light-blue:#434a50;--col-slate:#333;--col-slate-dark:var(--col-black);--col-slate-blue:#34383b;--col-blue:#4495d4;--col-blue-dark:#00278e;--col-new-blue-dark:#1a0dab;--col-blue-light:#66abff;--col-new-blue-light:#769dff;--col-result-focus-outline:var(--col-blue-dark);--col-blue-100:#051133;--col-blue-90:#0b2059;--col-blue-80:#14307e;--col-blue-70:#1e42a4;--col-blue-60:#2b55ca;--col-blue-50:#3969ef;--col-blue-40:#557ff3;--col-blue-30:#7295f6;--col-blue-20:#8fabf9;--col-blue-10:#adc2fc;--col-blue-0:#ccdaff;--col-gray-100:#111;--col-gray-90:#222;--col-gray-85:#333;--col-gray-80:#444;--col-gray-70:#666;--col-gray-60:#888;--col-gray-55:#999;--col-gray-50:#ababab;--col-gray-40:#ccc;--col-gray-30:#ddd;--col-gray-25:#e5e5e5;--col-gray-20:#eee;--col-gray-10:#f5f5f5;--col-gray-0:#fafafa;--col-green-40:#63c853;--col-green-70:#288419;--col-red-40:#e46f4f;--col-red-60:#bc4726;--col-yellow-100:#5a2807;--col-yellow-90:#92540c;--col-yellow-80:#c18010;--col-yellow-70:#e2a412;--col-yellow-60:#f9be1a;--col-yellow-50:#fc3;--col-yellow-40:#ffd65c;--col-yellow-30:#ffde7a;--col-yellow-20:#ffe8a3;--col-yellow-10:#fff0c2;--col-yellow-0:#fff7e0;--col-tooltip-bg:hsla(0,0%,54%,.9);--theme-col-bg-page:var(--col-white);--theme-col-bg-page-transparent:hsla(0,0%,100%,0);--theme-col-bg-ui:var(--col-white);--theme-col-bg-ui-transparent:hsla(0,0%,100%,0);--theme-col-bg-header:var(--col-white);--theme-col-txt-header-link:var(--col-grey-light);--theme-col-txt-header-link-hover:var(--col-gray-70);--theme-col-txt-title:var(--col-new-blue-dark);--theme-col-txt-title-visited:#6c00a2;--theme-col-txt-snippet:#494949;--theme-col-txt-url:#3f6e35;--theme-shadow-ui:none;--theme-col-bg-page-alt-1:var(--col-platinum-darker);--theme-col-bg-page-alt-2:var(--theme-col-bg-page);--theme-col-bg-page-alt-3:var(--theme-col-bg-page);--theme-col-bg-txt-1:var(--col-dark);--theme-col-bg-txt-2:var(--col-dark);--theme-col-bg-txt-3:var(--col-dark);--theme-col-border-ui:var(--col-platinum-light);--theme-col-separator:var(--col-platinum-light);--theme-col-txt-url-domain:var(--col-dark);--theme-col-txt-url-path:var(--col-slate-light);--theme-col-bg-ui-active:var(--col-silver-light);--theme-col-separator-active:var(--col-platinum-darker);--theme-col-bg-card:var(--col-white);--theme-col-bg-card-header:var(--col-gray-0);--theme-shadow-card:0 2px 3px rgb(0 0 0/6%);--theme-col-card-inner-border:var(--col-gray-30);--theme-col-border-card-nested:var(--col-gray-30);--theme-col-txt-card:var(--col-gray-100);--theme-col-txt-card-title:var(--col-gray-90);--theme-col-txt-card-subtitle:var(--col-gray-90);--theme-col-txt-card-body:var(--col-gray-90);--theme-col-txt-card-body-light:var(--col-slate-light);--theme-col-txt-card-aside:var(--col-gray-60);--theme-col-icon:rgba(0,0,0,.8);--theme-col-bg-button-primary:var(--col-blue-50);--theme-col-bg-button-primary-hover:var(--col-blue-60);--theme-col-bg-button-primary-active:var(--col-blue-70);--theme-col-bg-button-primary-disabled:rgba(0,0,0,.06);--theme-col-txt-button-primary:var(--col-white);--theme-col-txt-button-primary-disabled:rgba(0,0,0,.36);--theme-col-bg-button-secondary:rgba(0,0,0,.06);--theme-col-bg-button-secondary-hover:rgba(0,0,0,.12);--theme-col-bg-button-secondary-active:rgba(0,0,0,.18);--theme-col-bg-button-secondary-disabled:rgba(0,0,0,.06);--theme-col-txt-button-secondary:var(--col-gray-90);--theme-col-txt-button-secondary-disabled:rgba(0,0,0,.36);--theme-col-bg-button-tertiary:transparent;--theme-col-bg-button-tertiary-hover:rgba(0,0,0,.06);--theme-col-bg-button-tertiary-active:rgba(0,0,0,.12);--theme-col-bg-button-tertiary-disabled:transparent;--theme-col-border-button-tertiary:rgba(0,0,0,.12);--theme-col-border-button-tertiary-hover:rgba(0,0,0,.18);--theme-col-border-button-tertiary-active:rgba(0,0,0,.36);--theme-col-border-button-tertiary-disabled:rgba(0,0,0,.12);--theme-col-txt-button-tertiary:var(--col-gray-90);--theme-col-txt-button-tertiary-disabled:rgba(0,0,0,.36);--theme-col-bg-button-ghost:transparent;--theme-col-bg-button-ghost-hover:rgba(0,0,0,.06);--theme-col-bg-button-ghost-active:rgba(0,0,0,.12);--theme-col-bg-button-ghost-disabled:transparent;--theme-col-txt-button-ghost:var(--col-blue-50);--theme-col-txt-button-ghost-hover:var(--col-blue-60);--theme-col-txt-button-ghost-active:var(--col-blue-70);--theme-col-txt-button-ghost-disabled:rgba(0,0,0,.36);--theme-col-border-input-alternate:rgba(0,0,0,.12);--theme-col-bg-pill:var(--col-gray-10);--theme-col-txt-pill:var(--col-gray-90);--theme-col-bg-pill-hover:rgba(0,0,0,.12);--theme-col-bg-pill-selected:var(--col-slate);--theme-col-txt-pill-selected:var(--col-white);--theme-col-txt-large-tab:var(--col-dark);--theme-col-border-large-tab-selected:var(--col-dark);--theme-bg-missing-asset:var(--col-gray-50);--theme-col-missing-asset:var(--col-gray-90);--theme-col-success:var(--col-green-70);--theme-col-error:var(--col-red-60);--theme-col-bg-button-tab:var(--col-gray-20);--theme-col-txt-button-tab:var(--col-gray-100);--theme-col-bg-button-tab-hover:var(--col-gray-25);--theme-col-bg-button-tab-active:var(--col-gray-100);--theme-col-txt-button-tab-active:var(--col-gray-10);--theme-col-bg-expandcollapse:var(--col-gray-0);--theme-col-txt-expandcollapse:var(--col-gray-90);--theme-col-border-expandcollapse:var(--col-gray-25);--theme-col-bg-button-expandcollapse:var(--col-white);--theme-col-bg-button-expandcollapse-active:var(--col-gray-0);--theme-col-bg-button-expandcollapse-hover:var(--col-white);--theme-col-border-button-expandcollapse:var(--col-gray-30);--theme-col-icon-button-expandcollapse:var(--col-gray-85);--theme-col-lightbox:#d2d2d299;--theme-col-bg-header-modal:var(--col-silver-light);--theme-border-dropdown:1px solid var(--col-gray-30);--theme-bg-dropdown:var(--theme-col-bg-card);--theme-col-txt-qna-answer:var(--col-gray-90);--theme-col-txt-qna-details:var(--col-gray-70);--theme-col-border-qna-list-sep:var(--col-gray-25);--theme-col-bg-button-qna:var(--col-gray-0);--theme-col-bg-button-qna-hover:var(--col-gray-0);--theme-col-border-button-qna:var(--col-gray-30);--theme-col-border-button-qna-hover:var(--col-gray-50);--theme-col-icon-qna:var(--col-gray-100);--theme-col-image-preload:var(--col-gray-40);--theme-col-bg-promomodule:var(--col-gray-0);--theme-col-bg-cta-promomodule:var(--col-blue-50);--theme-col-bg-cta-hover-promomodule:var(--col-blue-60);--theme-col-border-promomodule:var(--col-gray-30);--theme-col-txt-promomodule:var(--col-gray-100);--theme-col-txt-dismiss-promomodule:var(--col-gray-55);--theme-col-txt-dismiss-hover-promomodule:var(--col-gray-70);--theme-col-bg-promomodule-yellow:var(--col-yellow-10);--theme-col-bg-cta-promomodule-yellow:var(--col-yellow-10);--theme-col-bg-cta-hover-promomodule-yellow:var(--col-yellow-30);--theme-col-bg-cta-active-promomodule-yellow:var(--col-yellow-40);--theme-col-border-promomodule-yellow:var(--col-yellow-50);--theme-col-txt-promomodule-yellow:var(--col-gray-100);--theme-col-txt-dismiss-promomodule-yellow:var(--col-gray-55);--theme-col-txt-dismiss-hover-promomodule-yellow:var(--col-gray-70);--theme-col-sports-team-link:var(--col-new-blue-dark);--rounded:4px;--rounded-md:8px;--font-size-unit:(0.9 * 16);--px-in-rem:(1rem/var(--font-size-unit));--sp-96:-webkit-calc(var(--px-in-rem)*384);--sp-96:calc(var(--px-in-rem)*384);--sp-80:-webkit-calc(var(--px-in-rem)*320);--sp-80:calc(var(--px-in-rem)*320);--sp-72:-webkit-calc(var(--px-in-rem)*288);--sp-72:calc(var(--px-in-rem)*288);--sp-64:-webkit-calc(var(--px-in-rem)*256);--sp-64:calc(var(--px-in-rem)*256);--sp-56:-webkit-calc(var(--px-in-rem)*224);--sp-56:calc(var(--px-in-rem)*224);--sp-48:-webkit-calc(var(--px-in-rem)*192);--sp-48:calc(var(--px-in-rem)*192);--sp-40:-webkit-calc(var(--px-in-rem)*160);--sp-40:calc(var(--px-in-rem)*160);--sp-32:-webkit-calc(var(--px-in-rem)*128);--sp-32:calc(var(--px-in-rem)*128);--sp-24:-webkit-calc(var(--px-in-rem)*96);--sp-24:calc(var(--px-in-rem)*96);--sp-20:-webkit-calc(var(--px-in-rem)*80);--sp-20:calc(var(--px-in-rem)*80);--sp-16:-webkit-calc(var(--px-in-rem)*64);--sp-16:calc(var(--px-in-rem)*64);--sp-14:-webkit-calc(var(--px-in-rem)*56);--sp-14:calc(var(--px-in-rem)*56);--sp-12:-webkit-calc(var(--px-in-rem)*48);--sp-12:calc(var(--px-in-rem)*48);--sp-11:-webkit-calc(var(--px-in-rem)*44);--sp-11:calc(var(--px-in-rem)*44);--sp-10:-webkit-calc(var(--px-in-rem)*40);--sp-10:calc(var(--px-in-rem)*40);--sp-9:-webkit-calc(var(--px-in-rem)*36);--sp-9:calc(var(--px-in-rem)*36);--sp-8:-webkit-calc(var(--px-in-rem)*32);--sp-8:calc(var(--px-in-rem)*32);--sp-7:-webkit-calc(var(--px-in-rem)*28);--sp-7:calc(var(--px-in-rem)*28);--sp-6:-webkit-calc(var(--px-in-rem)*24);--sp-6:calc(var(--px-in-rem)*24);--sp-5:-webkit-calc(var(--px-in-rem)*20);--sp-5:calc(var(--px-in-rem)*20);--sp-4:-webkit-calc(var(--px-in-rem)*16);--sp-4:calc(var(--px-in-rem)*16);--sp-3:-webkit-calc(var(--px-in-rem)*12);--sp-3:calc(var(--px-in-rem)*12);--sp-2:-webkit-calc(var(--px-in-rem)*8);--sp-2:calc(var(--px-in-rem)*8);--sp-1:-webkit-calc(var(--px-in-rem)*4);--sp-1:calc(var(--px-in-rem)*4);--font-size-result-title-main:-webkit-calc(var(--px-in-rem)*21.024);--font-size-result-title-main:calc(var(--px-in-rem)*21.024);--line-height-result-title-main:1.22;--letter-spacing-result-title-main:-0.01px;--font-size-result-title-mobile:-webkit-calc(var(--px-in-rem)*18.864);--font-size-result-title-mobile:calc(var(--px-in-rem)*18.864);--line-height-result-title-mobile:1.15;--letter-spacing-result-title-mobile:normal;--font-size-result-title-side:-webkit-calc(var(--px-in-rem)*14.148);--font-size-result-title-side:calc(var(--px-in-rem)*14.148);--line-height-result-title-side:1.22;--letter-spacing-result-title-side:normal;--font-size-result-snippet-main:1rem;--line-height-result-snippet-main:1.45;--font-size-result-snippet-side:-webkit-calc(var(--px-in-rem)*12.96);--font-size-result-snippet-side:calc(var(--px-in-rem)*12.96);--line-height-result-snippet-side:1.45;--font-size-result-url-main:1rem;--line-height-result-url-main:1.6;--letter-spacing-result-url-main:0.2px;--font-size-result-url-side:-webkit-calc(var(--px-in-rem)*12.96);--font-size-result-url-side:calc(var(--px-in-rem)*12.96);--line-height-result-url-side:1.6;--letter-spacing-result-url-side:0.2px;--font-size-filter-link-side:var(--font-size-result-snippet-side);--line-height-filter-link-side:var(--line-height-result-snippet-side);--font-size-result-large-site-link-title:-webkit-calc(var(--px-in-rem)*17);--font-size-result-large-site-link-title:calc(var(--px-in-rem)*17);--line-height-result-large-site-link-title:-webkit-calc(var(--line-height-result-snippet-main)*var(--font-size-result-snippet-main));--line-height-result-large-site-link-title:calc(var(--line-height-result-snippet-main)*var(--font-size-result-snippet-main));--font-size-result-large-site-link-snippet:var(--font-size-result-snippet-main);--line-height-result-large-site-link-snippet:var(--line-height-result-snippet-main);--font-size-result-small-site-link:1rem;--font-size-result-small-site-link-mobile-exp:1.11rem;--line-height-result-small-site-link:1.45;--line-height-result-small-site-link-mobile:-webkit-calc(18/var(--font-size-unit));--line-height-result-small-site-link-mobile:calc(18/var(--font-size-unit));--module-margin:0 -1px 26px;--module-margin-mobile:0 0 7px 0;--module-margin-with-feedback:0 -1px 8px;--theme-col-module-link-new-ux:var(--col-new-blue-dark)}.react [tabindex="0"]:focus-visible,.react a:focus-visible,.react button:focus-visible{outline:1px solid #00278e;outline:1px solid var(--col-result-focus-outline);outline-offset:-1px}.hide-while-css-vars-ponyfill{visibility:hidden} \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/4181796C682420D5607FADB318DB4785BC760B95 b/home/.surf/cache/WebKitCache/Version 16/Blobs/4181796C682420D5607FADB318DB4785BC760B95 new file mode 100644 index 0000000..359561c --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/4181796C682420D5607FADB318DB4785BC760B95 @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_alive-client_dist-bf5aa2"],{46263(a,b,c){function d(a,b=0,{start:c=!0,middle:d=!0,once:e=!1}={}){let f=0,g,h=!1;function i(...j){if(h)return;let k=Date.now()-f;f=Date.now(),c?(c=!1,a.apply(this,j),e&&i.cancel()):(d&&k{f=Date.now(),a.apply(this,j),e&&i.cancel()},d?b-k:b))}return i.cancel=()=>{clearTimeout(g),h=!0},i}function e(a,b=0,{start:c=!1,middle:e=!1,once:f=!1}={}){return d(a,b,{start:c,middle:e,once:f})}c.d(b,{D:()=>e,P:()=>d})},27907(a,b,c){c.d(b,{a:()=>AliveSession});var d,e,f=c(81855),g=c(60835),h=c(16544),i=c(75658),j=c(80955),k=c(29871);(e=d||(d={})).Deploy="Alive Redeploy",e.Reconnect="Alive Reconnect";class AliveSession{constructor(a,b,c,d){this.url=a,this.getUrl=b,this.inSharedWorker=c,this.notify=d,this.subscriptions=new i.v,this.state="online",this.retrying=null,this.connectionCount=0,this.presence=new f.k2,this.presenceMetadata=new g.a,this.intentionallyDisconnected=!1,this.lastCameOnline=0,this.userId=function(a){let b=a.match(/\/u\/(\d+)\/ws/);return b?+b[1]:0}(a),this.presenceId=`${Math.round(2147483647*Math.random())}_${Math.round(Date.now()/1e3)}`,this.presenceKey=(0,f.Hw)(this.userId,this.presenceId),this.socket=this.connect()}subscribe(a){let b=this.subscriptions.add(...a);for(let c of(this.sendSubscribe(b),a)){let d=c.topic.name;(0,f.A)(d)&&this.notifyCachedPresence(c.subscriber,d)}}unsubscribe(a){let b=this.subscriptions.delete(...a);this.sendUnsubscribe(b)}unsubscribeAll(...a){let b=this.subscriptions.drain(...a);this.sendUnsubscribe(b);let c=this.presenceMetadata.removeSubscribers(a);this.sendPresenceMetadataUpdate(c)}requestPresence(a,b){for(let c of b)this.notifyCachedPresence(a,c)}notifyCachedPresence(a,b){let c=this.presence.getChannelItems(b);0!==c.length&&this.notifyPresenceChannel(b,c)}updatePresenceMetadata(a){let b=new Set;for(let c of a)this.presenceMetadata.setMetadata(c),b.add(c.channelName);this.sendPresenceMetadataUpdate(b)}sendPresenceMetadataUpdate(a){if(!a.size)return;let b=[];for(let c of a){let d=this.subscriptions.topic(c);d&&b.push(d)}this.sendSubscribe(b)}online(){var a;this.lastCameOnline=Date.now(),this.state="online",null===(a=this.retrying)|| void 0===a||a.abort(),this.socket.open()}offline(){var a;this.state="offline",null===(a=this.retrying)|| void 0===a||a.abort(),this.socket.close()}shutdown(){this.inSharedWorker&&self.close()}get reconnectWindow(){let a=Date.now()-this.lastCameOnline<6e4;return 0===this.connectionCount||this.intentionallyDisconnected||a?0:1e4}socketDidOpen(){this.intentionallyDisconnected=!1,this.connectionCount++,this.socket.url=this.getUrlWithPresenceId(),this.sendSubscribe(this.subscriptions.topics())}socketDidClose(a,b,c){if(void 0!==this.redeployEarlyReconnectTimeout&&clearTimeout(this.redeployEarlyReconnectTimeout),"Alive Reconnect"===c)this.intentionallyDisconnected=!0;else if("Alive Redeploy"===c){this.intentionallyDisconnected=!0;let d=3+22*Math.random(),e=6e4*d;this.redeployEarlyReconnectTimeout=setTimeout(()=>{this.intentionallyDisconnected=!0,this.socket.close(1e3,"Alive Redeploy Early Client Reconnect")},e)}}socketDidFinish(){"offline"!==this.state&&this.reconnect()}socketDidReceiveMessage(a,b){let c=JSON.parse(b);switch(c.e){case"ack":this.handleAck(c);break;case"msg":this.handleMessage(c)}}handleAck(a){for(let b of this.subscriptions.topics())b.offset=a.off}handleMessage(a){let b=a.ch,c=this.subscriptions.topic(b);if(c){if(c.offset=a.off,"e"in a.data){let d=this.presence.handleMessage(b,a.data);this.notifyPresenceChannel(b,d);return}a.data.wait||(a.data.wait=0),this.notify(this.subscriptions.subscribers(b),{channel:b,type:"message",data:a.data})}}notifyPresenceChannel(a,b){var c,d;let e=new Map;for(let f of b){let{userId:h,metadata:i,presenceKey:j}=f,k=e.get(h)||{userId:h,isOwnUser:h===this.userId,metadata:[]};if(j!==this.presenceKey){for(let l of i){if(g.Z in l){!1!==k.isIdle&&(k.isIdle=Boolean(l[g.Z]));continue}k.metadata.push(l)}e.set(h,k)}}for(let m of this.subscriptions.subscribers(a)){let n=this.userId,o=Array.from(e.values()).filter(a=>a.userId!==n),p=null!==(d=null===(c=e.get(this.userId))|| void 0===c?void 0:c.metadata)&& void 0!==d?d:[],q=this.presenceMetadata.getChannelMetadata(a,{subscriber:m,markAllAsLocal:!this.inSharedWorker});this.notify([m],{channel:a,type:"presence",data:[{userId:n,isOwnUser:!0,metadata:[...p,...q]},...o]})}}async reconnect(){if(!this.retrying)try{this.retrying=new AbortController;let a=await (0,k.X)(this.getUrl,1/0,6e4,this.retrying.signal);a?(this.url=a,this.socket=this.connect()):this.shutdown()}catch(b){if("AbortError"!==b.name)throw b}finally{this.retrying=null}}getUrlWithPresenceId(){let a=new URL(this.url,self.location.origin);return a.searchParams.set("shared",this.inSharedWorker.toString()),a.searchParams.set("p",`${this.presenceId}.${this.connectionCount}`),a.toString()}connect(){let a=new h.Oo(this.getUrlWithPresenceId(),this,{timeout:4e3,attempts:7});return a.open(),a}sendSubscribe(a){let b=Array.from(a);for(let c of(0,j.o)(b,25)){let d={};for(let e of c)(0,f.A)(e.name)?d[e.signed]=JSON.stringify(this.presenceMetadata.getChannelMetadata(e.name)):d[e.signed]=e.offset;this.socket.send(JSON.stringify({subscribe:d}))}}sendUnsubscribe(a){let b=Array.from(a,a=>a.signed);for(let c of(0,j.o)(b,25))this.socket.send(JSON.stringify({unsubscribe:c}));for(let d of a)(0,f.A)(d.name)&&this.presence.clearChannel(d.name)}}},29871(a,b,c){function d(a){return new Promise((b,c)=>{let d=Error("aborted");d.name="AbortError",a.aborted?c(d):a.addEventListener("abort",()=>c(d))})}async function e(a,b){let c,e=new Promise(b=>{c=self.setTimeout(b,a)});if(!b)return e;try{await Promise.race([e,d(b)])}catch(f){throw self.clearTimeout(c),f}}function f(a){return Math.floor(Math.random()*Math.floor(a))}async function g(a,b,c=1/0,g){let h=g?d(g):null;for(let i=0;ig})},21461(a,b,c){c.d(b,{A:()=>f.A,ZE:()=>e.Z,Zf:()=>h.Z,a2:()=>d.a,ah:()=>e.a,vk:()=>g.v});var d=c(27907),e=c(60835),f=c(81855),g=c(75658),h=c(72993)},80955(a,b,c){c.d(b,{o:()=>d});function*d(a,b){for(let c=0;cd,a:()=>PresenceMetadataSet});let d="_i";function e(a){return Object.assign(Object.assign({},a),{isLocal:!0})}class PresenceMetadataForChannel{constructor(){this.subscriberMetadata=new Map}setMetadata(a,b){this.subscriberMetadata.set(a,b)}removeSubscribers(a){let b=!1;for(let c of a)b=this.subscriberMetadata.delete(c)||b;return b}getMetadata(a){if(!a){let b=[],c;for(let f of this.subscriberMetadata.values())for(let g of f)if(d in g){let h=Boolean(g[d]);c=void 0===c?h:h&&c}else b.push(g);return void 0!==c&&b.push({[d]:c?1:0}),b}let i=[],{subscriber:j,markAllAsLocal:k}=a;for(let[l,m]of this.subscriberMetadata){let n=k||l===j,o=n?m.map(e):m;i.push(...o)}return i}hasSubscribers(){return this.subscriberMetadata.size>0}}class PresenceMetadataSet{constructor(){this.metadataByChannel=new Map}setMetadata({subscriber:a,channelName:b,metadata:c}){let d=this.metadataByChannel.get(b);d||(d=new PresenceMetadataForChannel,this.metadataByChannel.set(b,d)),d.setMetadata(a,c)}removeSubscribers(a){let b=new Set;for(let[c,d]of this.metadataByChannel){let e=d.removeSubscribers(a);e&&b.add(c),d.hasSubscribers()||this.metadataByChannel.delete(c)}return b}getChannelMetadata(a,b){let c=this.metadataByChannel.get(a);return(null==c?void 0:c.getMetadata(b))||[]}}},81855(a,b,c){function d(a,b){return`${a}:${b}`}function e(a){let[b,c]=a.p.split(".");return{userId:a.u,presenceKey:d(a.u,b),connectionCount:Number(c),metadata:a.m||[]}}function f(a){return a.startsWith("presence-")}c.d(b,{A:()=>f,Hw:()=>d,k2:()=>AlivePresence});class PresenceChannel{constructor(){this.presenceItems=new Map}shouldUsePresenceItem(a){let b=this.presenceItems.get(a.presenceKey);return!b||b.connectionCount<=a.connectionCount}addPresenceItem(a){this.shouldUsePresenceItem(a)&&this.presenceItems.set(a.presenceKey,a)}removePresenceItem(a){this.shouldUsePresenceItem(a)&&this.presenceItems.delete(a.presenceKey)}replacePresenceItems(a){for(let b of(this.presenceItems.clear(),a))this.addPresenceItem(b)}getPresenceItems(){return Array.from(this.presenceItems.values())}}class AlivePresence{constructor(){this.presenceChannels=new Map}getPresenceChannel(a){let b=this.presenceChannels.get(a)||new PresenceChannel;return this.presenceChannels.set(a,b),b}handleMessage(a,b){let c=this.getPresenceChannel(a);switch(b.e){case"pf":c.replacePresenceItems(b.d.map(e));break;case"pa":c.addPresenceItem(e(b.d));break;case"pr":c.removePresenceItem(e(b.d))}return this.getChannelItems(a)}getChannelItems(a){let b=this.getPresenceChannel(a);return b.getPresenceItems()}clearChannel(a){this.presenceChannels.delete(a)}}},75658(a,b,c){c.d(b,{v:()=>SubscriptionSet});var d=c(61268);class SubscriptionSet{constructor(){this.subscriptions=new d.Z,this.signatures=new Map}add(...a){let b=[];for(let{subscriber:c,topic:d}of a)this.subscriptions.has(d.name)||(b.push(d),this.signatures.set(d.name,d)),this.subscriptions.set(d.name,c);return b}delete(...a){let b=[];for(let{subscriber:c,topic:d}of a){let e=this.subscriptions.delete(d.name,c);e&&!this.subscriptions.has(d.name)&&(b.push(d),this.signatures.delete(d.name))}return b}drain(...a){let b=[];for(let c of a)for(let d of this.subscriptions.drain(c)){let e=this.signatures.get(d);this.signatures.delete(d),b.push(e)}return b}topics(){return this.signatures.values()}topic(a){return this.signatures.get(a)||null}subscribers(a){return this.subscriptions.get(a).values()}}},72993(a,b,c){c.d(b,{Z:()=>Topic});class Topic{constructor(a,b){this.name=a,this.signed=b,this.offset=""}static parse(a){let[b,c]=a.split("--");if(!b||!c)return null;let d=JSON.parse(atob(b));return d.c&&d.t?new Topic(d.c,a):null}}},61268(a,b,c){c.d(b,{Z:()=>MultiMap});class MultiMap{constructor(a){if(this.map=new Map,a)for(let[b,c]of a)this.set(b,c)}get(a){let b=this.map.get(a);return b||new Set}set(a,b){let c=this.map.get(a);return c||(c=new Set,this.map.set(a,c)),c.add(b),this}has(a){return this.map.has(a)}delete(a,b){let c=this.map.get(a);if(!c)return!1;if(!b)return this.map.delete(a);let d=c.delete(b);return c.size||this.map.delete(a),d}drain(a){let b=[];for(let c of this.keys())this.delete(c,a)&&!this.has(c)&&b.push(c);return b}keys(){return this.map.keys()}values(){return this.map.values()}entries(){return this.map.entries()}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}get size(){return this.map.size}}},16544(a,b,c){async function d(a,b){let c,d=new Promise((b,d)=>{c=self.setTimeout(()=>d(Error("timeout")),a)});if(!b)return d;try{await Promise.race([d,g(b)])}catch(e){throw self.clearTimeout(c),e}}async function e(a,b){let c,d=new Promise(b=>{c=self.setTimeout(b,a)});if(!b)return d;try{await Promise.race([d,g(b)])}catch(e){throw self.clearTimeout(c),e}}async function f(a,b,c=1/0,d){let f=d?g(d):null;for(let i=0;i{let d=Error("aborted");d.name="AbortError",a.aborted?c(d):a.addEventListener("abort",()=>c(d))})}function h(a){return Math.floor(Math.random()*Math.floor(a))}async function i(a,b,c){let e=new WebSocket(a),f=k(e);try{return await Promise.race([f,d(b,c)]),e}catch(g){throw j(f),g}}async function j(a){try{let b=await a;b.close()}catch(c){}}function k(a){return new Promise((b,c)=>{a.readyState===WebSocket.OPEN?b(a):(a.onerror=()=>{a.onerror=null,a.onopen=null,c(Error("connect failed"))},a.onopen=()=>{a.onerror=null,a.onopen=null,b(a)})})}c.d(b,{Oo:()=>StableSocket});class StableSocket{constructor(a,b,c){this.socket=null,this.opening=null,this.url=a,this.delegate=b,this.policy=c}async open(){if(this.opening||this.socket)return;this.opening=new AbortController;let a=Object.assign(Object.assign({},this.policy),{signal:this.opening.signal});try{var b,c;this.socket=await (b=this.url,c=a,f(()=>i(b,c.timeout,c.signal),c.attempts,c.maxDelay,c.signal))}catch(d){this.delegate.socketDidFinish(this);return}finally{this.opening=null}this.socket.onclose=a=>{this.socket=null,this.delegate.socketDidClose(this,a.code,a.reason);let b=this.delegate.socketShouldRetry?!this.delegate.socketShouldRetry(this,a.code):m(a.code);b?this.delegate.socketDidFinish(this):setTimeout(()=>this.open(),l(100,100+(this.delegate.reconnectWindow||50)))},this.socket.onmessage=a=>{this.delegate.socketDidReceiveMessage(this,a.data)},this.delegate.socketDidOpen(this)}close(a,b){this.opening?(this.opening.abort(),this.opening=null):this.socket&&(this.socket.onclose=null,this.socket.close(a,b),this.socket=null,this.delegate.socketDidClose(this,a,b),this.delegate.socketDidFinish(this))}send(a){this.socket&&this.socket.send(a)}isOpen(){return!!this.socket}}function l(a,b){return Math.random()*(b-a)+a}function m(a){return a===n||a===o}let n=1008,o=1011}}]) +//# sourceMappingURL=vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_alive-client_dist-bf5aa2-52c4f314f4eb.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/42731532329632B616D1A4663FDE685D2157307A b/home/.surf/cache/WebKitCache/Version 16/Blobs/42731532329632B616D1A4663FDE685D2157307A new file mode 100644 index 0000000..4ad40c4 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/42731532329632B616D1A4663FDE685D2157307A differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/42EA23346DD3933767C6F5851E212AFC5D933A7B b/home/.surf/cache/WebKitCache/Version 16/Blobs/42EA23346DD3933767C6F5851E212AFC5D933A7B new file mode 100644 index 0000000..512af82 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/42EA23346DD3933767C6F5851E212AFC5D933A7B differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/4308AB6BCAC2B311C75F4DDB3DA59E82C8845156 b/home/.surf/cache/WebKitCache/Version 16/Blobs/4308AB6BCAC2B311C75F4DDB3DA59E82C8845156 new file mode 100644 index 0000000..cef9504 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/4308AB6BCAC2B311C75F4DDB3DA59E82C8845156 @@ -0,0 +1,15638 @@ +/* Bundle Includes: + * js/vendor/nacl-fast.js + * js/authring.js + * html/js/login.js + * js/ui/export.js + * html/js/key.js + * js/ui/simpletip.js + * js/useravatar.js + * js/cms.js + * html/js/start.js + * html/js/bottompage.js + * js/filedrag.js + * js/thumbnail.js + * js/vendor/exif.js + * js/vendor/smartcrop.js + * js/vendor/jquery.qrcode.js + * js/vendor/qrcode.js + * js/ui/password-revert.js + * js/ui/publicServiceAnnouncement.js + * js/ui/megaInputs.js + * js/ui/megaInputs-underlinedText.js + * js/ui/megaInputs-currencyField.js + * html/js/developersettings.js + * html/js/repay.js + */ + +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +/* jshint newcap: false */ + +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; + + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; + + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; + + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; + + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; + + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; + + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; + + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; + + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; + + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; + + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; + + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; + + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; + + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; +} + +function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; + + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; + + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; + + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; + + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; + + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; + + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; +} + +function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); +} + +/* +* Port of Andrew Moon's Poly1305-donna-16. Public domain. +* https://github.com/floodyberry/poly1305-donna +*/ + +var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; + + var t0, t1, t2, t3, t4, t5, t6, t7; + + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; + + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; +}; + +poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; + + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; + + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; + + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; + + c = 0; + + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; + + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; + + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; + + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; + + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; + + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; + + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; + + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; + + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; + + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; + + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; + + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; + + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; +}; + +poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; + + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } + + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; + + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); + + mask = (g[9] >>> ((2 * 8) - 1)) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } + + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; +}; + +poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; + + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(buffer, 0, 16); + this.leftover = 0; + } + + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } + + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } +}; + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; +} + +function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; +} + +function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; + + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is + + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254;i>=0;--i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; + + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], + + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; + + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; + + // add + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // K + h = K[i*2]; + l = K[i*2+1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // w + h = wh[i%16]; + l = wl[i%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; + + // add + h = th; + l = tl; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); + + // add + h = bh3; + l = bl3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = th; + l = tl; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); + + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; + + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; + + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); + } + } + } + + // add + h = ah0; + l = al0; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[0]; + l = hl[0]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); + + h = ah1; + l = al1; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[1]; + l = hl[1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); + + h = ah2; + l = al2; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[2]; + l = hl[2]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); + + h = ah3; + l = al3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[3]; + l = hl[3]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); + + h = ah4; + l = al4; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[4]; + l = hl[4]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); + + h = ah5; + l = al5; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[5]; + l = hl[5]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); + + h = ah6; + l = al6; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[6]; + l = hl[6]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); + + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[7]; + l = hl[7]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); + + pos += 128; + n -= 128; + } + + return n; +} + +function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; + + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; + + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; + + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; + + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); + + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = (x[j] + 128) >> 8; + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i, mlen; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + mlen = -1; + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + mlen = n; + return mlen; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor : crypto_stream_xor, + crypto_stream : crypto_stream, + crypto_stream_salsa20_xor : crypto_stream_salsa20_xor, + crypto_stream_salsa20 : crypto_stream_salsa20, + crypto_onetimeauth : crypto_onetimeauth, + crypto_onetimeauth_verify : crypto_onetimeauth_verify, + crypto_verify_16 : crypto_verify_16, + crypto_verify_32 : crypto_verify_32, + crypto_secretbox : crypto_secretbox, + crypto_secretbox_open : crypto_secretbox_open, + crypto_scalarmult : crypto_scalarmult, + crypto_scalarmult_base : crypto_scalarmult_base, + crypto_box_beforenm : crypto_box_beforenm, + crypto_box_afternm : crypto_box_afternm, + crypto_box : crypto_box, + crypto_box_open : crypto_box_open, + crypto_box_keypair : crypto_box_keypair, + crypto_hash : crypto_hash, + crypto_sign : crypto_sign, + crypto_sign_keypair : crypto_sign_keypair, + crypto_sign_open : crypto_sign_open, + + crypto_secretbox_KEYBYTES : crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES : crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES : crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES : crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES : crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES : crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES : crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES : crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES : crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES : crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES : crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES : crypto_box_BOXZEROBYTES, + crypto_sign_BYTES : crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES : crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES : crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES : crypto_hash_BYTES +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + var t, i; + for (i = 0; i < arguments.length; i++) { + if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') + throw new TypeError('unexpected type ' + t + ', use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +nacl.util = {}; + +nacl.util.decodeUTF8 = function(s) { + var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; +}; + +nacl.util.encodeUTF8 = function(arr) { + var i, s = []; + for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i])); + return decodeURIComponent(escape(s.join(''))); +}; + +nacl.util.encodeBase64 = function(arr) { + if (typeof btoa === 'undefined') { + return (new Buffer(arr)).toString('base64'); + } else { + var i, s = [], len = arr.length; + for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i])); + return btoa(s.join('')); + } +}; + +nacl.util.decodeBase64 = function(s) { + if (typeof atob === 'undefined') { + return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0)); + } else { + var i, d = atob(s), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; + } +}; + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return false; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + if (arguments.length !== 2) + throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto; + if (typeof window !== 'undefined') { + // Browser. + if (window.crypto && window.crypto.getRandomValues) { + crypto = window.crypto; // Standard + } else if (window.msCrypto && window.msCrypto.getRandomValues) { + crypto = window.msCrypto; // Internet Explorer 11+ + } + if (crypto) { + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + crypto.getRandomValues(v); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (window.nacl = window.nacl || {})); + +/** + * @fileOverview + * Storage of authenticated contacts. + */ + +var u_authring = { 'Ed25519': undefined, + 'Cu25519': undefined, + 'RSA': undefined }; + +var authring = (function () { + "use strict"; + + /** + * @description + *

          Storage of authenticated contacts.

          + * + *

          + * A container (key ring) that keeps information of the authentication state + * for all authenticated contacts. Each record is indicated by the contact's + * userhandle as an attribute. The associated value is an object containing + * the authenticated `fingerprint` of the public key, the authentication + * `method` (e. g. `authring.AUTHENTICATION_METHOD.FINGERPRINT_COMPARISON`) + * and the key `confidence` (e. g. `authring.KEY_CONFIDENCE.UNSURE`).

          + * + *

          + * The records are stored in a concatenated fashion, with each user handle + * represented in its compact 8 byte form followed by a the fingerprint as a + * byte string and a "trust indicator" byte containing the authentication and + * confidence information. Therefore each authenticated user "consumes" + * 29 bytes of storage.

          + * + *

          + * Load contacts' authentication info with `authring.getContacts()` and save + * with `authring.setContacts()`.

          + */ + var ns = {}; + var logger = MegaLogger.getLogger('authring'); + ns._logger = logger; + + ns._initialisingPromise = false; + + /** + * "Enumeration" of authentication methods. The values in here must fit + * into 4 bits of a byte. + * + * @property SEEN {integer} + * To record a "seen" fingerprint, to be able to check for future changes. + * @property FINGERPRINT_COMPARISON {integer} + * Direct/full fingerprint comparison. + * @property SIGNATURE_VERIFIED {integer} + * Verified key's signature. + */ + ns.AUTHENTICATION_METHOD = { + SEEN: 0x00, + FINGERPRINT_COMPARISON: 0x01, + SIGNATURE_VERIFIED: 0x02 + }; + var _ALLOWED_AUTHENTICATION_METHODS = [0x00, 0x01, 0x02]; + + const isUserHandle = tryCatch((userHandle) => { + return typeof userHandle === 'string' && base64urldecode(userHandle).length === 8; + }); + + const safeStateAssert = (promise, cond) => { + if (cond === '$keyring') { + cond = u_keyring && window.u_attr && window.u_attr.keyring === u_keyring; + } + if (cond === undefined || cond) { + cond = window.u_attr && isUserHandle(window.u_handle) + && typeof u_attr === 'object' && u_attr.u === u_handle; + } + + if (!cond) { + const msg = 'The system went into an invalid state for ongoing auth-ring operations :skull:'; + + onIdle(() => { + throw new Error(msg); + }); + console.error(msg, window.u_attr); + + if (promise) { + promise.reject(EINTERNAL); + } + } + + return !!cond; + }; + + /** + * "Enumeration" of confidence in contact's key. The values in here must fit + * into 4 bits of a byte. + * + * @property UNSURE {integer} + * Direct fingerprint comparison. + */ + ns.KEY_CONFIDENCE = { + UNSURE: 0x00 + }; + var _ALLOWED_KEY_CONFIDENCES = [0x00]; + + // User property names used for different key types. + ns._PROPERTIES = { 'Ed25519': 'authring', + 'Cu25519': 'authCu255', + 'RSA': 'authRSA' }; + + /** + * Serialises a single authentication record. + * + * @param userhandle {string} + * Mega user handle. + * @param fingerprint {string} + * Fingerprint to authenticate as a byte or hex string. + * @param method {byte} + * Indicator used for authentication method. One of + * authring.AUTHENTICATION_METHOD (e. g. FINGERPRINT_COMPARISON). + * @param confidence {byte} + * Indicator used for confidence. One of authring.KEY_CONFIDENCE + * (e. g. UNSURE). + * @returns {string} + * Single binary encoded authentication record. + * @private + */ + ns._serialiseRecord = function(userhandle, fingerprint, method, confidence) { + var fingerprintString = fingerprint; + if (fingerprint.length !== 20) { + // Assuming a hex fingerprint has been passed. + fingerprintString = asmCrypto.bytes_to_string(asmCrypto.hex_to_bytes(fingerprint)); + } + return base64urldecode(userhandle) + + fingerprintString + + String.fromCharCode((confidence << 4) | method); + }; + + + /** + * Generates a binary encoded serialisation of an authentication ring + * object. + * + * @param authring {Object} + * Object containing (non-nested) authentication records for Mega user + * handles (as keys) and `fingerprint`, `method` and `confidence` as + * attributes of the `value` object. + * @returns {String} + * Single binary encoded serialisation of authentication ring. + */ + ns.serialise = function(authring) { + + var result = ''; + var record; + for (var userhandle in authring) { + if (!authring.hasOwnProperty(userhandle)) { + continue; + } + record = authring[userhandle]; + + // Skip obviously faulty records. + if ((record.fingerprint.length % 20 !== 0) + || _ALLOWED_AUTHENTICATION_METHODS.indexOf(record.method) === -1 + || _ALLOWED_KEY_CONFIDENCES.indexOf(record.confidence) === -1) { + continue; + } + + // Skip non-contact's fingerprints + if (!(userhandle in M.u && M.u[userhandle].c >= 0 && M.u[userhandle].c < 2)) { + continue; + } + + result += this._serialiseRecord(userhandle, record.fingerprint, + record.method, record.confidence); + } + + return result; + }; + + + /** + * Splits and decodes an authentication record off of a binary keyring + * serialisation and returns the record and the rest. + * + * @param serialisedRing {String} + * Single binary encoded container of authentication records. + * @returns {Object} + * Object containing three elements: `userhandle` contains the Mega + * user handle, `value` contains an object (with the `fingerprint` in a + * byte string, authentication `method` and key `confidence`) and `rest` + * containing the remainder of the serialisedRing still to decode. + * @private + */ + ns._deserialiseRecord = function(serialisedRing) { + + var userhandle = base64urlencode(serialisedRing.substring(0, 8)); + var fingerprint = serialisedRing.substring(8, 28); + var authAttributes = serialisedRing.charCodeAt(28); + var rest = serialisedRing.substring(29); + var confidence = (authAttributes >>> 4) & 0x0f; + var method = authAttributes & 0x0f; + + return { userhandle: userhandle, + value: { fingerprint: fingerprint, + method: method, + confidence: confidence }, + rest: rest }; + }; + + + /** + * Decodes a binary encoded serialisation to an authentication ring object. + * + * @param serialisedRing {String} + * Single binary encoded serialisation of authentication records. + * @returns {Object} + * Object containing (non-nested) authentication records for Mega user + * handles (as keys) and `fingerprint`, `method` and `confidence` as + * attributes of the `value` object. + */ + ns.deserialise = function(serialisedRing) { + + var rest = serialisedRing; + var container = {}; + + while (rest.length > 0) { + var result = ns._deserialiseRecord(rest); + rest = result.rest; + + // Skip obviously faulty records. + if ((result.value.fingerprint.length % 20 !== 0) + || _ALLOWED_AUTHENTICATION_METHODS.indexOf(result.value.method) === -1 + || _ALLOWED_KEY_CONFIDENCES.indexOf(result.value.confidence) === -1) { + continue; + } + + container[result.userhandle] = result.value; + } + + return container; + }; + + + /** + * Loads the ring for all authenticated contacts into `u_authring`. + * + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns.getContacts = function(keyType) { + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported authentication key type: ' + keyType); + + return MegaPromise.reject(EARGS); + } + + // This promise will be the one which is going to be returned. + var masterPromise = new MegaPromise(); + let attributePromise, fromKeys; + + if (!mega.keyMgr.generation || keyType === 'RSA') { + attributePromise = mega.attr.get(u_handle, ns._PROPERTIES[keyType], false, true); + } + else { + attributePromise = new MegaPromise((resolve) => { + fromKeys = true; + resolve(mega.keyMgr.authrings[keyType] || ENOENT); + }); + } + + attributePromise.done(function _attributePromiseResolve(result) { + if (typeof result !== 'number') { + // Authring is in the empty-name record. + u_authring[keyType] = fromKeys === true ? result : ns.deserialise(result['']); + logger.debug(`Got authentication ring for key type ${keyType}.`); + masterPromise.resolve(u_authring[keyType]); + } + else if (result === ENOENT) { + // This authring is missing. Let's make it. + logger.debug(`No authentication ring for key type ${keyType}, making one.`); + u_authring[keyType] = {}; + ns.setContacts(keyType); + masterPromise.resolve(u_authring[keyType]); + } + else { + logger.error('Error retrieving authentication ring for key type ' + + keyType + ': ' + result); + masterPromise.reject(result); + } + }); + + attributePromise.fail(function _attributePromiseReject(result) { + if (result === ENOENT) { + // This authring is missing. Let's make it. + logger.debug('No authentication ring for key type ' + + keyType + ', making one.'); + u_authring[keyType] = {}; + ns.setContacts(keyType); + masterPromise.resolve(u_authring[keyType]); + } + else { + logger.error('Error retrieving authentication ring for key type ' + + keyType + ': ' + result); + masterPromise.reject(result); + } + }); + + return masterPromise; + }; + + + /** + * Saves the ring for all authenticated contacts from `u_authring`. + * + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns.setContacts = function(keyType) { + + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported authentication key type: ' + keyType); + return MegaPromise.reject(EARGS); + } + + return this.onAuthringReady('setContacts').then(() => { + const promises = []; + + if (!mega.keyMgr.secure) { + + promises.push( + Promise.resolve( + mega.attr.set(ns._PROPERTIES[keyType], {'': ns.serialise(u_authring[keyType])}, false, true) + ) + ); + } + promises.push(mega.keyMgr.commit()); + return Promise.all(promises); + }); + }; + + + /** + * Gets the authentication state of a certain contact for a particular key type. + * + * @param userhandle {string} + * Mega user handle. + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * @return {object} + * An object describing the authenticated `fingerprint`, the + * authentication `method` and the key `confidence`. `false` in case + * of an unauthorised contact. + */ + ns.getContactAuthenticated = function(userhandle, keyType) { + assertUserHandle(userhandle); + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported key type: ' + keyType); + + return false; + } + + if (u_authring[keyType] === undefined) { + logger.error('First initialise u_authring by calling authring.getContacts()'); + + return false; + } + + if (u_authring[keyType].hasOwnProperty(userhandle)) { + return u_authring[keyType][userhandle]; + } + + return false; + }; + + + /** + * Stores a contact authentication for a particular key type. + * + * @param userhandle {string} + * Mega user handle. + * @param fingerprint {string} + * Fingerprint to authenticate as a byte or hex string. + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519' or 'RSA'. + * @param method {byte} + * Indicator used for authentication method. One of + * authring.AUTHENTICATION_METHOD (e. g. FINGERPRINT_COMPARISON). + * @param confidence {byte} + * Indicator used for confidence. One of authring.KEY_CONFIDENCE + * (e. g. UNSURE). + */ + ns.setContactAuthenticated = function(userhandle, fingerprint, keyType, + method, confidence) { + + assertUserHandle(userhandle); + + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported key type: ' + keyType); + + return; + } + if (typeof u_authring[keyType] === 'undefined') { + logger.error('First initialise u_authring by calling authring.getContacts()'); + + return; + } + if (userhandle === u_handle) { + // We don't want to track ourself. Let's get out of here. + return; + } + + var oldRecord = u_authring[keyType][userhandle]; + if (!oldRecord + || !ns.equalFingerprints(oldRecord.fingerprint, fingerprint) + || (oldRecord.method !== method) + || (oldRecord.confidence !== confidence)) { + + // Need to update the record. + u_authring[keyType][userhandle] = { + fingerprint: fingerprint, + method: method, + confidence: confidence + }; + + return ns.setContacts(keyType) + .then(() => { + // try to complete pending out/in-shares based on the new situation. + return mega.keyMgr.completePendingOutShares(); + }) + .then(() => mega.keyMgr.acceptPendingInShares()); + } + }; + + + /** + * Computes the given public key's cryptographic fingerprint. On RSA keys, + * the modulo (index 0 of key array) and exponent (index 1) are first + * concatenated. + * + * @param key {(String|Array)} + * Public key in the form of a byte string or array (RSA keys). + * @param keyType {String} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * @param format {String} + * Format in which to return the fingerprint. Valid values: "string" + * and "hex" (default: "hex"). + * @return {String} + * Fingerprint value in the requested format. + */ + ns.computeFingerprint = function(key, keyType, format) { + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported key type: ' + keyType); + + return ''; + } + if (!key) { + logger.error('Invalid key for: ' + keyType); + + return ''; + } + format = format || 'hex'; + keyType = keyType || 'Ed25519'; + + var value = key; + if (keyType === 'Ed25519' || keyType === 'Cu25519') { + if (key.length !== 32) { + logger.error('Unexpected key length for type ' + keyType + + ': ' + key.length); + + return ''; + } + } + else if (keyType === 'RSA') { + value = key[0] + key[1]; + } + else { + logger.error('Unexpected key type for fingerprinting: ' + keyType); + + return ''; + } + + if (format === "string") { + return asmCrypto.bytes_to_string(asmCrypto.SHA256.bytes(value)).substring(0, 20); + } + else if (format === "hex") { + return asmCrypto.SHA256.hex(value).substring(0, 40); + } + }; + + + /** + * Signs the given public key using our own Ed25519 key. On RSA pub keys, + * the modulo (index 0 of key array) and exponent (index 1) are first + * concatenated before signing. + * + * @param pubKey {array} + * The public key to sign. + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * @return {string} + * EdDSA signature of the key as a byte string. + */ + ns.signKey = function(pubKey, keyType) { + if (!pubKey) { + logger.error('No key to sign.'); + + return; + } + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported key type: ' + keyType); + + return; + } + var timeStamp = ns._longToByteString(Math.round(Date.now() / 1000)); + var value = pubKey; + if (keyType === 'RSA') { + value = pubKey[0] + pubKey[1]; + } + var keyString = 'keyauth' + timeStamp + value; + var detachedSignature = nacl.sign.detached(asmCrypto.string_to_bytes(keyString), + asmCrypto.string_to_bytes(u_privEd25519 + u_pubEd25519)); + return timeStamp + asmCrypto.bytes_to_string(detachedSignature); + }; + + + /** + * Verifies the signature of the given public key's against the + * contact's Ed25519 key. + * + * @param signature {string} + * EdDSA signature in byte string format. + * @param pubKey {array} + * The public key to verify. + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * @param signPubKey {string} + * Contact's Ed25519 public key to verify the signature. + * @return {MegaPromise} + * True on a good signature verification, false otherwise. + */ + ns.verifyKey = function(signature, pubKey, keyType, signPubKey) { + // Bail out if nothing to do. + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported key type: ' + keyType); + + return MegaPromise.resolve(null); + } + if (!signature) { + logger.warn('Cannot verify an empty signature.'); + + return MegaPromise.resolve(null); + } + + var signatureValue = signature.substring(8); + var timestamp = signature.substring(0, 8); + var timestampValue = ns._byteStringToLong(timestamp); + if (timestampValue > Math.round(Date.now() / 1000)) { + logger.error('Bad timestamp: In the future!'); + + return MegaPromise.resolve(null); + } + var value = pubKey; + if (keyType === 'RSA') { + value = pubKey[0] + pubKey[1]; + } + var keyString = 'keyauth' + timestamp + value; + return backgroundNacl.sign.detached.verify(asmCrypto.string_to_bytes(keyString), + asmCrypto.string_to_bytes(signatureValue), + asmCrypto.string_to_bytes(signPubKey)); + }; + + + /** + * Compare two fingerprints. + * + * @param fp1 {string} + * First fingerprint in byte or hex string format. + * @param fp2 {string} + * Second fingerprint. in byte or hex string format + * @return {bool} + * True on equality, `undefined` if one fingerprint is undefined, + * false otherwise. + */ + ns.equalFingerprints = function(fp1, fp2) { + if (fp1 === undefined || fp2 === undefined) { + return undefined; + } + if (fp1.length !== 20) { + fp1 = asmCrypto.bytes_to_string(asmCrypto.hex_to_bytes(fp1)); + } + if (fp2.length !== 20) { + fp2 = asmCrypto.bytes_to_string(asmCrypto.hex_to_bytes(fp2)); + } + return fp1 === fp2; + }; + + + /** + * Convert a long integer (> 32-bit) to an 8-byte bit-endian string. + * + * @param value {integer} + * Integer input. + * @return {string} + * Big-endian byte string representation. + */ + ns._longToByteString = function(value) { + if (value > 9007199254740991) { + // Check for value > Number.MAX_SAFE_INTEGER (not available in all JS). + logger.error('Integer not suitable for lossless conversion in JavaScript.'); + + return ''; + } + var result = ''; + + for (var i = 0; i < 8; i++ ) { + result = String.fromCharCode(value & 0xff) + result; + value = Math.floor(value / 0x100); + } + + return result; + }; + + + /** + * Convert an 8-byte bit-endian string to a long integer (> 32-bit). + * + * @param sequence {string} + * Big-endian byte string representation. + * @return {intenger} + * Integer representation. + */ + ns._byteStringToLong = function(sequence) { + var value = 0; + for (var i = 0; i < 8; i++) { + value = (value * 256) + sequence.charCodeAt(i); + } + // Check for value > Number.MAX_SAFE_INTEGER (not available in all JS). + if (value > 9007199254740991) { + logger.error('Integer not suitable for lossless conversion in JavaScript.'); + + return; + } + + return value; + }; + + + /** + * Purges all fingerprints from the authentication rings. + * + * @return + * void + */ + ns.scrubAuthRing = function() { + u_authring.Ed25519 = {}; + ns.setContacts('Ed25519'); + u_authring.Cu25519 = {}; + ns.setContacts('Cu25519'); + u_authring.RSA = {}; + ns.setContacts('RSA'); + }; + + + /** + * Resets the seen or verified fingerprints for a particular user. + * @param {string} userHandle The user handle e.g. EWh7LzU3Zf0 + */ + ns.resetFingerprintsForUser = function(userHandle) { + assertUserHandle(userHandle); + delete u_authring.Ed25519[userHandle]; + delete u_authring.Cu25519[userHandle]; + delete u_authring.RSA[userHandle]; + + ns.setContacts('Ed25519'); + ns.setContacts('Cu25519'); + ns.setContacts('RSA'); + }; + + + /** + * Checks if the authring was initialised (initialised = true, not initialised OR initialising = false) + * + * @returns {boolean} + */ + ns.hadInitialised = function() { + return ns._initialisingPromise === true; + }; + + /** + * Invoke authring-operation once initialization has succeed. + * + * @returns {MegaPromise} + */ + ns.onAuthringReady = async function(debugTag) { + + if (d > 1) { + logger.log('authring.onAuthringReady', debugTag); + } + + if (this.hadInitialised() === false) { + if (d) { + logger.debug('Will wait for Authring to initialize...', debugTag); + } + + await Promise.resolve(this.initAuthenticationSystem()); + } + + assert(u_authring.Ed25519, `Unexpected auth-ring failure... (${debugTag})`); + }; + + /** + * Initialises the authentication system. + * + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns.initAuthenticationSystem = function() { + + if (pfid) { + console.error('Do not initialize the authentication system on folder-links.'); + return MegaPromise.reject(EACCESS); + } + + // Make sure we're initialising only once. + if (ns._initialisingPromise !== false) { + if (ns._initialisingPromise === true) { + // Already initialised. + return MegaPromise.resolve(); + } + else if (ns._initialisingPromise instanceof MegaPromise) { + // Initialisation is in progress. + // (Don't initialise more than once, return the master promise.) + return ns._initialisingPromise; + } + else { + logger.error( + "Failed to initAuthSystem because of invalid _initialisingPromise state of: ", + ns._initialisingPromise + ); + + return MegaPromise.reject(); + } + } + + if (d) { + console.time('authring.initAuthenticationSystem'); + } + + // The promise to return. + var masterPromise = ns._initialisingPromise = new MegaPromise(); + + // Initialise basic authentication system with Ed25519 keys first. + var keyringPromise = ns._initKeyringAndEd25519(); + + keyringPromise.done(function __baseAuthSystemDone() { + var rsaPromise = window.u_privk ? ns._initKeyPair('RSA') : MegaPromise.resolve(); + var cu25519Promise = ns._initKeyPair('Cu25519'); + var comboPromise = MegaPromise.all([rsaPromise, cu25519Promise]); + + masterPromise.linkDoneAndFailTo(comboPromise); + }); + keyringPromise.fail(function __baseAuthSystemFail() { + masterPromise.reject(); + }); + + masterPromise + .done(function() { + ns._initialisingPromise = true; + }) + .fail(function() { + ns._initialisingPromise = false; + }) + .always(function() { + if (d) { + console.timeEnd('authring.initAuthenticationSystem'); + } + }); + + return masterPromise; + }; + + /** + * Initialises the key ring for private keys and the authentication key + * (Ed25519). + * + * @private + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns._initKeyringAndEd25519 = function() { + // The promise to return. + var masterPromise = new MegaPromise(); + + // XXX: u_attr.u is read-only, BUT this is a weak protection unless we make the whole object + // read-only as well..tricky, however we may want to still allow this for testing purposes.. + if (!is_karma && (typeof u_attr !== 'object' || u_attr.u !== window.u_handle || u_attr.keyring)) { + logger.error('Doh! Tampering attempt...', u_handle, [u_attr]); + + if (location.host === 'mega.nz' || is_extension) { + return masterPromise.reject(EACCESS); + } + + // eslint-disable-next-line no-alert + if (!confirm('You are about to overwrite your own account keys - is this intended?')) { + location.reload(true); + return masterPromise; + } + + logger.warn('Good luck!..'); + } + let attributePromise; + + // Load private keys (or use the ones deserialised from ^!keys). + if (mega.keyMgr.generation) { + attributePromise = new MegaPromise((resolve) => resolve(mega.keyMgr.keyring)); + } + else { + attributePromise = mega.attr.get(u_handle, 'keyring', false, false); + } + + attributePromise.done(function __attributePromiseResolve(result) { + // Ensure we're in a safe-state. + if (!safeStateAssert(masterPromise, result && typeof result === 'object')) { + return; + } + // Set local values. + u_keyring = result; + u_attr.keyring = u_keyring; + + // Ed25519 signing/authentication key. + u_privEd25519 = u_keyring.prEd255; + u_attr.prEd255 = u_privEd25519; + u_pubEd25519 = asmCrypto.bytes_to_string(nacl.sign.keyPair.fromSeed( + asmCrypto.string_to_bytes(u_privEd25519)).publicKey); + u_attr.puEd255 = u_pubEd25519; + pubEd25519[u_handle] = u_pubEd25519; + + // Run on the side a sanity check on the stored pub key. + ns._checkPubKey(u_pubEd25519, 'Ed25519'); + crypt.setPubKey(u_pubEd25519, 'Ed25519'); + + // Load authring and we're done. + + // @todo migrate getContacts() to native Promise. + Promise.all([ + Promise.resolve(authring.getContacts('Ed25519')), + Promise.resolve(authring.getContacts('Cu25519')) + ]).then((res) => { + masterPromise.resolve(res); + }).catch((ex) => { + logger.error(ex); + masterPromise.reject(ex); + }); + }); + attributePromise.fail(function __attributePromiseReject(result) { + if (result === ENOENT) { + // We don't have it set up, yet. Let's do so now. + logger.warn('Authentication system seems non-existent. Setting up ...'); + + // Ensure we're in a safe-state. + if (!safeStateAssert(masterPromise)) { + return; + } + + // Make a new key pair. + var keyPair = nacl.sign.keyPair(); + u_privEd25519 = asmCrypto.bytes_to_string(keyPair.secretKey.subarray(0, 32)); + u_attr.prEd255 = u_privEd25519; + u_pubEd25519 = asmCrypto.bytes_to_string(keyPair.publicKey); + u_attr.puEd255 = u_pubEd25519; + u_keyring = { + prEd255: u_privEd25519 + }; + u_attr.keyring = u_keyring; + pubEd25519[u_handle] = u_pubEd25519; + + // Store private keyring and public key. + var keyringPromise = mega.attr.set('keyring', u_keyring, + false, false); + var pubkeyPromise = mega.attr.set('puEd255', + base64urlencode(u_pubEd25519), + true, false); + var authringPromise = authring.getContacts('Ed25519'); + + var comboPromise = MegaPromise.all([keyringPromise, + pubkeyPromise, + authringPromise]); + masterPromise.linkDoneAndFailTo(comboPromise); + } + else { + var message = 'Error retrieving key ring: ' + result; + logger.error(message); + // Let's pass a rejection upstream. + masterPromise.reject(result); + } + }); + + return masterPromise; + }; + + + /** + * Generates a key pair and sets up all required data structures for + * insuring its authenticity. + * + * @private + * @param keyType {string} + * Key type. Allowed values: 'Cu25519'. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns._setupKeyPair = function(keyType) { + var keyPair; + var privKey; + var pubKey; + + if (keyType === 'Cu25519') { + keyPair = nacl.box.keyPair(); + privKey = asmCrypto.bytes_to_string(keyPair.secretKey); + pubKey = asmCrypto.bytes_to_string(keyPair.publicKey); + } + else { + logger.error('Unsupported key type for key generation: ' + keyType); + return MegaPromise.reject(EARGS); + } + + // Ensure we're in a safe-state. + if (!safeStateAssert(null, '$keyring')) { + return MegaPromise.reject(EACCESS); + } + + window[crypt.PRIVKEY_VARIABLE_MAPPING[keyType]] = privKey; + window[crypt.PUBKEY_VARIABLE_MAPPING[keyType]] = pubKey; + u_keyring[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + u_attr.keyring[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + u_attr[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + u_attr[crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType]] = pubKey; + crypt.getPubKeyCacheMapping(keyType)[u_handle] = pubKey; + var pubKeySignature = ns.signKey(pubKey, keyType); + var keyringPromise = mega.attr.set('keyring', u_keyring, false, false); + var pubkeyPromise = mega.attr.set(crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType], + base64urlencode(pubKey), + true, false); + var signaturePromise = mega.attr.set(crypt.PUBKEY_SIGNATURE_MAPPING[keyType], + base64urlencode(pubKeySignature), + true, false); + var authringPromise = authring.getContacts(keyType); + + return MegaPromise.all([keyringPromise, pubkeyPromise, + authringPromise, signaturePromise]); + }; + + + /** + * Initialises a key pair for use in the client. + * + * Note: It is expected that the Ed25519 private and public keys are loaded + * already. + * + * @private + * @param keyType {string} + * Key type to set. Allowed values: 'Cu25519', 'RSA'. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns._initKeyPair = function(keyType) { + // The promise to return. + var masterPromise = new MegaPromise(); + + if (keyType !== 'RSA' && keyType !== 'Cu25519') { + logger.error('Unsupported key type for initialisation: ' + keyType); + + return MegaPromise.reject(EARGS); + } + + if (keyType === 'RSA' && !window.u_privk) { + logger.error('Unable to initialize RSA keypair...'); + return MegaPromise.reject(EARGS); + } + + // Ensure we're in a safe-state. + if (!safeStateAssert()) { + return MegaPromise.reject(EACCESS); + } + + var privKey = (keyType === 'RSA') + ? u_privk + : u_keyring[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]]; + + if (privKey) { + // Fire off various API calls we need downstream. + var authringPromise = ns.getContacts(keyType); + var signaturePromise = mega.attr.get(u_handle, + crypt.PUBKEY_SIGNATURE_MAPPING[keyType], + true, false); + + // Get the public key to the private key. + var pubKey; + var pubkeyPromise; + if (keyType === 'RSA') { + pubkeyPromise = crypt.getPubKeyAttribute(u_handle, 'RSA'); + } + else { + pubKey = crypt.getPubKeyFromPrivKey(privKey, keyType); + pubkeyPromise = new MegaPromise(); + pubkeyPromise.resolve(pubKey); + } + + pubkeyPromise.done(function __pubkeyResolve(result) { + if (keyType === 'RSA') { + // Still need to fetch the RSA pub key. + pubKey = result; + } + }); + masterPromise.linkFailTo(pubkeyPromise); + + // Make sure we've got a signature. + var gotSignaturePromise = new MegaPromise(); + signaturePromise.done(function __signatureResolve(result) { + gotSignaturePromise.resolve(base64urldecode(result)); + }); + signaturePromise.fail(function __signatureReject(result) { + if (result === ENOENT) { + // Signature undefined, let's pass to make one in the next step. + gotSignaturePromise.resolve(null); + } + else { + gotSignaturePromise.reject(result); + } + }); + + // Check the signature, make one if we don't ahve one or it's inconsistent. + var sigKeyComboPromise = MegaPromise.all([gotSignaturePromise, + pubkeyPromise]); + sigKeyComboPromise.done(function __signatureComboResolve(result) { + // Ensure we're in a safe-state. + if (!safeStateAssert(masterPromise, !!result)) { + return; + } + var signature = result[0]; + if (signature) { + // Now check the key's signature. + ns.verifyKey(signature, pubKey, keyType, u_pubEd25519) + .done(function(isVerified) { + if (isVerified) { + masterPromise.resolve(); + } + else { + // Signature fails, make a good one and save it. + var pubKeySignature = authring.signKey(pubKey, keyType); + var setSignaturePromise = mega.attr.set(crypt.PUBKEY_SIGNATURE_MAPPING[keyType], + base64urlencode(pubKeySignature), + true, false); + var comboPromise = MegaPromise.all([authringPromise, + setSignaturePromise]); + masterPromise.linkDoneAndFailTo(comboPromise); + } + }); + } + else { + // Signature undefined. + signature = authring.signKey(pubKey, keyType); + mega.attr.set(crypt.PUBKEY_SIGNATURE_MAPPING[keyType], + base64urlencode(signature), + true, false); + masterPromise.resolve(); + } + + if (keyType === 'RSA') { + // We don't need the rest for RSA keys. + return; + } + + // Ensure we're in a safe-state. + if (!safeStateAssert(masterPromise, '$keyring')) { + return; + } + + // We're handling RSA keys in a legacy way, but all others like this. + window[crypt.PRIVKEY_VARIABLE_MAPPING[keyType]] = privKey; + window[crypt.PUBKEY_VARIABLE_MAPPING[keyType]] = pubKey; + u_keyring[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + u_attr[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + u_attr[crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType]] = pubKey; + u_attr.keyring[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + crypt.getPubKeyCacheMapping(keyType)[u_handle] = pubKey; + + // Run on the side a sanity check on the stored pub key. + ns._checkPubKey(pubKey, keyType); + crypt.setPubKey(pubKey, keyType); + }); + masterPromise.linkFailTo(sigKeyComboPromise); + } + else { + // Set up what's needed for the key type. + // This should never be hit for an RSA key pair! + masterPromise.linkDoneAndFailTo(ns._setupKeyPair(keyType)); + } + + return masterPromise; + }; + + + /** + * This is a check to run on one's *own* pub key against the private key. + * + * @private + * @param pubKey {string} + * Public key to check. + * @param keyType {string} + * Key type to check. Allowed values: 'Ed25519', Cu25519'. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns._checkPubKey = function(pubKey, keyType) { + // The promise to return. + var masterPromise = new MegaPromise(); + + if (keyType !== 'Ed25519' && keyType !== 'Cu25519') { + logger.error('Unsupported key type for pub key check: ' + keyType); + + return MegaPromise.reject(EARGS); + } + + var attributePromise = mega.attr.get(u_handle, + crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType], + true, false); + + attributePromise.done(function(result) { + var storedPubKey = base64urldecode(result); + if (storedPubKey === pubKey) { + masterPromise.resolve(true); + } + else { + logger.info('Need to update ' + keyType + ' pub key.'); + masterPromise.linkDoneAndFailTo( + mega.attr.set(crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType], + base64urlencode(pubKey), + true, false)); + } + }); + attributePromise.fail(function(result) { + logger.warn('Could not get my ' + keyType + ' pub key, setting it now.'); + masterPromise.linkDoneAndFailTo( + mega.attr.set(crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType], + base64urlencode(pubKey), + true, false)); + }); + + return masterPromise; + }; + + /** + * Helper method to check whether a contact fingerprint is verified. + * @param {String} aUserHandle The user's 11-chars long handle. + * @returns {Promise} fulfilled with a Boolean indicating whether it's verified. + */ + ns.isUserVerified = promisify(function(resolve, reject, aUserHandle) { + ns.onAuthringReady('usr-v').then(function() { + var ed25519 = u_authring.Ed25519; + var verifyState = ed25519 && ed25519[aUserHandle] || false; + + resolve(verifyState.method >= ns.AUTHENTICATION_METHOD.FINGERPRINT_COMPARISON); + }).catch(reject); + }); + + /** + * Helper method to invoke whenever we do want to show crypto-specific warnings about mismatching keys etc + * @param {String} aDialogType The dialog type we do want to show. + * @param {String} aUserHandle The user's 11-chars long handle. + * @param {String} aKeyType Type of the public key the signature failed for. e.g 'Cu25519' or 'RSA' + * @param {*} optional arguments for the dialog constructor + * @type {Promise} fulfilled on completion with whatever happened... + */ + ns.showCryptoWarningDialog = promisify(function(resolve, reject, aDialogType, aUserHandle /* , ... */) { + var args = toArray.apply(null, arguments).slice(3); + + if (localStorage.hideCryptoWarningDialogs) { + logger.warn('Showing crypto warning dialogs is blocked...', aDialogType, args); + return resolve(EBLOCKED); + } + + var seenCryptoWarningDialog = JSON.parse(sessionStorage.scwd || '{}'); + var seenStoreKey = MurmurHash3(aDialogType + ':' + args, 0x7ff).toString(16); + + if (seenCryptoWarningDialog[seenStoreKey]) { + logger.info('Crypto warning dialog already seen...', aDialogType, args); + return resolve(EEXIST); + } + + // Store a seen flag straight away, to prevent concurrent invocations.. + seenCryptoWarningDialog[seenStoreKey] = 1; + sessionStorage.scwd = JSON.stringify(seenCryptoWarningDialog); + + var dialogConstructor; + + if (aDialogType === 'credentials') { + eventlog(99606, JSON.stringify([1, aDialogType[0]].concat(args.slice(0,2)))); + dialogConstructor = mega.ui.CredentialsWarningDialog; + } + else if (aDialogType === 'signature') { + eventlog(99607, JSON.stringify([1, aDialogType[0]].concat(args.slice(0,2)))); + dialogConstructor = mega.ui.KeySignatureWarningDialog; + } + else { + logger.error('Invalid crypto warning dialog type...', aDialogType, args); + return reject(EARGS); + } + + // Only show this type of warning dialog if the user's fingerprint is verified. + ns.isUserVerified(aUserHandle) + .then(function(isVerified) { + if (isVerified !== true) { + logger.debug('Not showing crypto dialog for unverified user...', aDialogType, args); + return resolve(EAGAIN); + } + + M.onFileManagerReady(tryCatch(function() { + dialogConstructor.singleton.apply(dialogConstructor, args); + resolve(true); + }, reject)); + }) + .catch(reject); + }); + + return ns; +}()); + +/** + * Desktop signin/login functions + */ +var signin = { + + /** + * Old method functions + */ + old: { + + /** + * Starts the login proceedure + * @param {String} email The user's email address + * @param {String} password The user's password + * @param {String|null} pinCode The two-factor authentication PIN code (6 digit number), or null if N/A + * @param {Boolean} rememberMe Whether the user clicked the Remember me checkbox or not + */ + startLogin: function(email, password, pinCode, rememberMe) { + + 'use strict'; + + + postLogin(email, password, pinCode, rememberMe, (result) => { + + loadingDialog.hide(); + + // Otherwise proceed with regular login + signin.proceedWithLogin(result); + }); + } + }, + + /** + * New secure method functions + */ + new: { + + /** + * Start the login process + * @param {String} email The user's email addresss + * @param {String} password The user's password as entered + * @param {String|null} pinCode The two-factor authentication PIN code (6 digit number), or null if N/A + * @param {Boolean} rememberMe A boolean for if they checked the Remember Me checkbox on the login screen + * @param {String} salt The user's salt as a Base64 URL encoded string + */ + startLogin: function(email, password, pinCode, rememberMe, salt) { + + 'use strict'; + + // Start the login using the new process + security.login.startLogin(email, password, pinCode, rememberMe, salt, function(result) { + + loadingDialog.hide(); + + // Otherwise proceed with regular login + signin.proceedWithLogin(result); + }); + } + }, + + /** + * Proceed to key generation step + * @param {Number} result The result from the API, e.g. a negative error num or the user type + */ + proceedWithKeyGeneration: function(result) { + + 'use strict'; + + u_type = result; + loadSubPage('key'); + }, + + /** + * Proceed to the login step + * @param {Number} result The result from the API, e.g. a negative error num or the user type + */ + proceedWithLogin: function(result) { + + 'use strict'; + + // Remove loading spinner from 2FA dialog + $('.mega-dialog.verify-two-factor-login.submit-button').removeClass('loading'); + + // Check and handle the common login errors + if (security.login.checkForCommonErrors(result, signin.old.startLogin, signin.new.startLogin)) { + return false; + } + + // close two-factor dialog if it was opened + if (twofactor && twofactor.loginDialog) { + twofactor.loginDialog.closeDialog(); + } + + // If successful result + if (result !== false && result >= 0) { + + // Otherwise if email confirm code is ok, proceed with RSA key generation + if (confirmok) { + signin.proceedWithKeyGeneration(result); + } + else { + // Otherwise proceed with regular login + u_type = result; + passwordManager('#login_form'); + + if (login_next) { + loadSubPage(login_next); + } + else if (page !== 'login') { + init_page(); + } + else { + loadSubPage('fm'); + } + login_next = false; + } + } + else { + // Show a failed login + $('#login-name2').megaInputsShowError().blur(); + $('#login-password2').megaInputsShowError(l[7431]).val('').blur(); + + // Close the 2FA dialog for a generic error + twofactor.loginDialog.closeDialog(); + + msgDialog('warninga', l[135], l[7431] + '.', false, function() { + $('#login-name2').select(); + }); + } + } +}; + +var login_txt = false; +var login_email = false; + + +function postLogin(email, password, pinCode, remember, loginCompletionCallback) { + 'use strict'; + + // A little helper to pass only the final result of the User Get (ug) API request + // i.e. the (user type or error code) back to the loginCompletionCallback function + var ctx = { + callback2: loginCompletionCallback, + checkloginresult: function(ctx, result) { + if (ctx.callback2) { + ctx.callback2(result); + } + } + }; + var passwordaes = new sjcl.cipher.aes(prepare_key_pw(password)); + var uh = stringhash(email.toLowerCase(), passwordaes); + + u_login(ctx, email, password, uh, pinCode, remember); +} + +function pagelogin() { + 'use strict'; + + var $formWrapper = $('.main-mid-pad.login form'); + var $email = $formWrapper.find('#login-name2'); + var $password = $formWrapper.find('#login-password2'); + + var e = $email.val().trim(); + if (e === '' || !isValidEmail(e)) { + $email.megaInputsShowError(l[141]); + $email.focus(); + } + else if ($('#login-password2').val() === '') { + $('#login-password2').megaInputsShowError(l[1791]); + $password.focus(); + } + else { + loadingDialog.show(); + $formWrapper.find('.top-dialog-login-button').addClass('loading'); + if ($formWrapper.find('.loginwarning-checkbox').hasClass('checkboxOn')) { + localStorage.hideloginwarning = 1; + } + + var email = e; + var password = $password.val(); + var rememberMe = false; + var twoFactorPin = null; + + // XXX: Set remember on by default if confirming a freshly created account + if (confirmok || $formWrapper.find('.login-check').hasClass('checkboxOn')) { + rememberMe = true; + } + + // Checks if they have an old or new registration type, after this the flow will continue to login + security.login.checkLoginMethod(email, password, twoFactorPin, rememberMe, + signin.old.startLogin, + signin.new.startLogin); + } +} + +function init_login() { + 'use strict'; + + var $formWrapper = $('.main-mid-pad.login'); + var $inputs = $('input', $formWrapper); + var $button = $('button.login-button', $formWrapper); + var $forgotPassLink = $('.top-login-forgot-pass', $formWrapper); + + if (is_extension) { + $('.extension-advise').addClass('hidden'); + } + else { + $('.extension-advise').removeClass('hidden'); + } + + if (login_email) { + $('#login-name2', $formWrapper).val(login_email); + } + + if (confirmok) { + $('.main-left-block').addClass('confirm'); + $('.main-right-block').addClass('hidden'); + $('.register-st2-txt-block').addClass('hidden'); + $('.account.small-header-txt').addClass('hidden'); + $forgotPassLink.addClass('hidden'); + $('.main-top-info-block').removeClass('hidden'); + $('span', $button).text(l[1131]); + $('.account.top-header.login').text(l[1131]); + $('.main-top-info-text').text(l[378]); + $('.login-check').addClass('hidden').next().addClass('hidden'); + } + else { + if (login_txt) { + $('.main-top-info-block').removeClass('hidden'); + $('.main-top-info-text').text(login_txt); + login_txt = false; + } + } + + $forgotPassLink.rebind('click.forgotpasslink', function() { + + var email = document.getElementById('login-name2').value; + + if (isValidEmail(email)) { + $.prefillEmail = email; + } + + loadSubPage('recovery'); + }); + + $inputs.rebind('keydown.initlogin', function(e) { + + $inputs.removeClass('errored').parent().removeClass('error'); + + if (e.keyCode === 13) { + pagelogin(); + } + }); + + $button.rebind('click.initlogin', function() { + pagelogin(); + }); + + $button.rebind('keydown.initlogin', function (e) { + if (e.keyCode === 13) { + pagelogin(); + } + }); + + // Init inputs events + accountinputs.init($formWrapper); + + if (is_chrome_firefox) { + Soon(mozLoginManager.fillForm.bind(mozLoginManager, 'login_form')); + } +} + +/** + * Functionality for the Export Link password protection feature + * + * The first implementation will use PBKDF2-HMAC-SHA512 with 100,000 rounds and a 256 bit random salt to derive a 512 + * bit key. For folder links the key is 128 bits in length and for file links the actual key is 256 bits in length. The + * first 128 or 256 bits of the derived key will be used to encrypt the actual folder/file key using a simple XOR for + * encryption. The last 256 bits of the derived key will be used as the MAC Key. Using the Encrypt then MAC principle, + * the MAC will be calculated using HMAC-SHA256. + * + * In constructing the protected link, the format is as follows: + * algorithm || file/folder || public handle || salt || encrypted key || MAC tag + * + * algorithm = 1 byte - A byte to identify which algorithm was used (for future upgradability), initially is set to 0 + * file/folder = 1 byte - A byte to identify if the link is a file or folder link (0 = folder, 1 = file) + * public handle = 6 bytes - The public folder/file handle + * salt = 32 bytes - A 256 bit randomly generated salt + * encrypted key = 16 or 32 bytes - The encrypted actual folder or file key + * MAC tag = 32 bytes - The MAC of all the previous data to ensure integrity of the link i.e. calculated as: + * HMAC-SHA256(MAC key, (algorithm || file/folder || public handle || salt || encrypted key)) + * + * The link data is then Base64 encoded and then URL encoded to remove incompatible characters e.g.: + * https://mega.nz/#P!AAA5TWTcNMs7aYZgtalahVxCffAF0JeZTKxOZQ_s2d... + * + * In receiving a protected link, the program will decode the URL, get the first byte to check which algorithm was used + * to encrypt the data (useful if algorithm changes are made in future). Then it will use the password to derive the + * same key using the same algorithm, provided salt and password. Then a MAC of the data can be calculated, if it's a + * match then the link has not been tampered with or corrupted and the real folder/file key can be decrypted and the + * original link reconstructed. If it doesn't match then an error will be shown which could mean tampering or that the + * user entered an incorrect password. + */ +var exportPassword = { + + // List of algorithms + algorithms: [ + { + // Algorithm (0) for unit testing with low rounds + name: 'PBKDF2', // Name for the Web Crypto primary PBKDF algorithm + hash: 'SHA-512', // Hash algorithm for the Web Crypto primary PBKDF algorithm + failsafeName: 'PBKDF2_HMAC_SHA512', // Name for the asmCrypto failsafe PBKDF algorithm + macName: 'HMAC_SHA256', // Name for the asmCrypto MAC algorithm + saltLength: 256, // Salt length in bits + macKeyLength: 256, // MAC key length in bits + macLength: 256, // MAC computed digest length in bits + derivedKeyLength: 512, // Desired derived key length in bits + iterations: 1000 // Number of iterations to run + }, + { + // Old algorithm (1) which used incorrect parameter order: HMAC(password, data) + name: 'PBKDF2', + hash: 'SHA-512', + failsafeName: 'PBKDF2_HMAC_SHA512', + macName: 'HMAC_SHA256', + saltLength: 256, + macKeyLength: 256, + macLength: 256, + derivedKeyLength: 512, + iterations: 100000 + }, + { + // Current algorithm (2) + name: 'PBKDF2', + hash: 'SHA-512', + failsafeName: 'PBKDF2_HMAC_SHA512', + macName: 'HMAC_SHA256', + saltLength: 256, + macKeyLength: 256, + macLength: 256, + derivedKeyLength: 512, + iterations: 100000 + } + // Future tweaks or changes in algorithms e.g. Argon2 + ], + + // The current algorithm in use for production + currentAlgorithm: 2, // 1 byte (0x02) + + /** + * Constants for folder or file type + */ + LINK_TYPE_FOLDER: 0, // 1 byte (0x00) + LINK_TYPE_FILE: 1, // 1 byte (0x01) + + + /** + * Functions for the encryption + */ + encrypt: { + + // The jQuery selector for the Export dialog + $dialog: null, + + /** + * Initialise function + */ + init: function() { + + "use strict"; + + // Cache dialog selector + this.$dialog = $('.mega-dialog.export-links-dialog', 'body'); + this.$passwordDialog = $('.mega-dialog.set-password-dialog', 'body'); + + this.updatePasswordComponentsUI(); + this.updateLinkInputValues(); + + // If they are a pro user, enable set password + if (u_attr.p) { + this.initPasswordFeatureButton(); + this.initPasswordFeatureIcon(); + this.hideSetPasswordDialog(); + } + }, + + /** + * Update protected/not protected components UI + */ + updatePasswordComponentsUI: function() { + + "use strict"; + + var $items = $('.item', this.$dialog); + var $protectedItems = $items.filter('.password-protect-link'); + var $setPasswordBtn = $('button.password', this.$dialog); + var $setPasswordBtnSpan = $('span', $setPasswordBtn); + var $removePasswordBtn = $('button.remove', this.$dialog); + var $checkboxWrap = $('.options .checkdiv', this.$dialog); + var $checkbox = $('input', $checkboxWrap); + + // Enable separate key option + $checkbox.prop('disabled', false); + $checkboxWrap.removeClass('disabled'); + + // If password protected links + if ($protectedItems.length) { + + // Show Lock icons for password protected links + $('.lock', $protectedItems).removeClass('hidden'); + + // Change Set password button state + $setPasswordBtn.addClass('encrypted'); + $setPasswordBtnSpan.text(l[737]); + + // Hide Remove password button + $removePasswordBtn.removeClass('hidden'); + + // If all links are password protected + if ($protectedItems.length === $items.length) { + + // Disable separate key option + $checkbox.prop('checked', true).trigger('click').prop('disabled', true); + $checkboxWrap.addClass('disabled'); + } + } + else { + + // Set paassword button initial state + $setPasswordBtn.removeClass('encrypted'); + $setPasswordBtnSpan.text(l[17454]); + + // Hide Remove password button + $removePasswordBtn.addClass('hidden'); + + // Hide Lock icons + $('.lock', $items).removeData('pw type').addClass('hidden'); + } + }, + + /** + * Update links/keys values + */ + updateLinkInputValues: function() { + + "use strict"; + + var isSeparateKeys = $('.options .checkdiv input', this.$dialog).prop('checked'); + var $items = $('.item:not(.password-protect-link)', this.$dialog); + + // Update not password protected Link input values + $items.get().forEach(function(e) { + + var $this = $(e); + var $linkInput = $('.item-link.link input', $this); + var $keyInput = $('.item-link.key input', $this); + var linkWithoutKey = $linkInput.data('link'); + var key = $linkInput.data('key'); + + // Set key without # or ! + $keyInput.val($keyInput.data('key')); + + // Set link + if (isSeparateKeys) { + $linkInput.val(linkWithoutKey); + } + else { + $linkInput.val(linkWithoutKey + key); + } + }); + }, + + /** + * Setup Set password button + */ + initPasswordFeatureButton: function() { + + "use strict"; + + var $setPasswordBtn = $('button.password', this.$dialog); + + // On Set paassword click + $setPasswordBtn.rebind('click.setPass', function() { + + // Unselect link items + $('.item.selected', this.$dialog).removeClass('selected'); + + // Show dialog + exportPassword.encrypt.showSetPasswordDialog(); + }); + }, + + /** + * Setup Set remove password button + */ + initRemovePasswordButton: function() { + + "use strict"; + + var $removePasswordBtn = $('button.remove', this.$dialog); + + // On Remove password click + $removePasswordBtn.rebind('click.removePass', function() { + + var $items = $('.item', this.$dialog); + + // Set links and keys into text boxes + $items.removeClass('password-protect-link'); + + // Update Password buttons and links UI + exportPassword.encrypt.updatePasswordComponentsUI(); + + // Update Link input values + exportPassword.encrypt.updateLinkInputValues(); + }); + }, + + /** + * Setup Set password Lock icon + */ + initPasswordFeatureIcon: function() { + + "use strict"; + + var $passwordIcon = $('.links-scroll .lock', this.$dialog); + var $tip = $('.dark-direct-tooltip.custom-html', this.$dialog); + var $scrollBlock = $('.links-scroll', this.$dialog); + + // Hide a tip with Password + var hidePasswordTip = function() { + + $tip.removeClass('visible'); + $('.content', $tip).text(''); + $scrollBlock.unbind('scroll.hidePassTip'); + }; + + // Init Show password icon in the tip + var initShowPasswordIcon = function($lockIcon) { + + $('.content i', $tip).rebind('click.showPass', function() { + var $this = $(this); + + if ($this.hasClass('icon-eye-reveal')) { + $this.removeClass('icon-eye-reveal').addClass('icon-eye-hidden'); + $this.prev('input').attr('type', 'text'); + $lockIcon.data('type', 'text'); + } + else { + $this.removeClass('icon-eye-hidden').addClass('icon-eye-reveal'); + $this.prev('input').attr('type', 'password'); + $lockIcon.removeData('type'); + } + }); + }; + + // Show Set password dialog on Lock icon click + $passwordIcon.rebind('click.setPass', function() { + + // Select link item + $('.item', this.$dialog).removeClass('selected'); + $(this).closest('.item').addClass('selected'); + + // Show dialog + exportPassword.encrypt.showSetPasswordDialog(); + }); + + // Show tooltip on Lock icon mouseover + $passwordIcon.rebind('mouseover.showPassTip', function() { + + var $this = $(this); + var password = $this.data('pw'); + var passwordLength = password.length + 1; + var $tipContentBlock = $('.content', $tip); + var $input; + var passwordHtml = '' + + ''; + + // Fill tip content + $tipContentBlock.safeHTML(passwordHtml); + + // Set password data + $input = $('input', $tipContentBlock); + $input.val(password).attr('size', passwordLength); + + // Show password if it has been showed before + if ($this.data('type') === 'text') { + $input.attr('type', 'text'); + $('i', $tipContentBlock).removeClass('icon-eye-reveal').addClass('icon-eye-hidden'); + } + + // Init Show password icon + initShowPasswordIcon($this); + + // Show tip related to clicked element + $tip.addClass('visible').position({ + of: $this, + my: 'center bottom', + at: 'center bottom-30', + collision: "flipfit" + }); + + // Hide tooltip if content is scrolled + $scrollBlock.rebind('scroll.hidePassTip', function() { + + if ($(this).is('.ps--active-y')) { + hidePasswordTip(); + } + }); + }); + + // Hide tooltip on mouseout from lock icon + $passwordIcon.rebind('mouseout.hidePassTip', function(e) { + if (!$(e.relatedTarget).hasClass('icon-tooltip-arrow')) { + hidePasswordTip(); + } + }); + + // Hide tooltip on mouseout from itseft + $tip.rebind('mouseleave.hidePassTip', function(e) { + if (!$(e.relatedTarget).hasClass('icon-tooltip-arrow')) { + hidePasswordTip(); + } + }); + }, + + /** + * Show Set password dialog + */ + showSetPasswordDialog: function() { + + "use strict"; + + var $dialog = this.$dialog; + var $setPasswordDialog = this.$passwordDialog; + var $setPasswordBtn = $('button.password', $dialog); + var $inputs = $('.pass-wrapper input', $setPasswordDialog); + var $existingPassword = $('.existing-pass', $setPasswordDialog); + var $existingPasswordInput = $('.existing-pass input', $setPasswordDialog); + var $selectedLink = $('.item.selected', $dialog); + var $scroll = $('.links-scroll', $dialog); + var $itemTarget; + var megaInput; + + // Get clicked element + $itemTarget = $selectedLink.length ? $('.lock', $selectedLink) : $setPasswordBtn; + + // Show dialog + $setPasswordDialog.removeClass('hidden'); + + // Change dialog position related to clicked element + var dialogReposition = function() { + + exportPassword.encrypt.$passwordDialog.position({ + of: $itemTarget.is('.hidden') ? $('.cog', $selectedLink) : $itemTarget, + my: 'center top', + at: 'center top-30', + collision: "flipfit" + }); + }; + + // Change dialog position + dialogReposition(); + + $(window).rebind('resize.setPasswordPosition', function() { + dialogReposition(); + }); + + // Disable scrolling + delay('disableExportScroll', function() { + Ps.disable($scroll[0]); + }, 100); + + // Set init state + $existingPassword.addClass('hidden'); + $existingPasswordInput.val(''); + $inputs.val('').parent().removeClass('good1 good2 good3 good4 good5'); + $('.strength',$setPasswordDialog).text(''); + megaInput = new mega.ui.MegaInputs($inputs); + megaInput[1].$input.focus(); + + // Show old password it it has beed set before + if ($itemTarget.data('pw')) { + $existingPassword.removeClass('hidden'); + $existingPasswordInput.val($itemTarget.data('pw')); + } + + // Copy old (existing) password button + $('button.copy', $existingPassword).rebind('click.copyToClipboard', function() { + var existingPassword = $existingPasswordInput.val(); + + if (existingPassword) { + copyToClipboard(existingPassword, l[371], 'password'); + } + }); + + // Add click handler to show old (existing) password icon + $('i', $existingPassword).rebind('click.showPass', function() { + var $this = $(this); + + if ($this.hasClass('icon-eye-reveal')) { + $this.removeClass('icon-eye-reveal').addClass('icon-eye-hidden'); + $existingPasswordInput[0].type = 'text'; + } + else { + $this.removeClass('icon-eye-hidden').addClass('icon-eye-reveal'); + $existingPasswordInput[0].type = 'password'; + } + }); + + // Add click handler to the confirm button + $('button.confirm', $setPasswordDialog).rebind('click.setPass', function() { + exportPassword.encrypt.startEncryption(); + }); + + // Add click handler to the cancel button + $('button.cancel',$setPasswordDialog).rebind('click.closePassDialog', function() { + exportPassword.encrypt.hideSetPasswordDialog(); + }); + + // Click anywhere on export link dialog will hide password dialog + $dialog.rebind('click.closePassDialog', function(e) { + + var $target = $(e.target); + + if (!$target.is('button.password') + && !$target.is('i.lock') + && !$target.parent().is('button.password') + && !$target.parent().is('.dropdown.export') + && !$target.parent().parent().is('.dropdown.export')) { + + exportPassword.encrypt.hideSetPasswordDialog(); + } + }); + + exportPassword.encrypt.loadPasswordEstimatorLibrary(); + exportPassword.encrypt.initPasswordStrengthCheck(); + }, + + /** + * Hide Set password dialog + */ + hideSetPasswordDialog: function() { + + "use strict"; + + // Hide dialog + this.$passwordDialog.removeAttr('style').addClass('hidden'); + + // Enable scrolling + Ps.enable($('.links-scroll', this.$dialog)[0]); + + // Unbind dialog positioning + $(window).rebind('resize.setPasswordPosition'); + }, + + /** + * Load the ZXCVBN password strength estimator library + */ + loadPasswordEstimatorLibrary: function() { + + "use strict"; + + if (typeof zxcvbn === 'undefined') { + + // Show loading spinner + var $loader = $('.estimator-loading-icon', this.$passwordDialog).addClass('loading'); + + // On completion of loading, hide the loading spinner + M.require('zxcvbn_js') + .done(function() { + $loader.removeClass('loading'); + }); + } + }, + + /** + * Show what strength the currently entered password is on key up + */ + initPasswordStrengthCheck: function() { + + "use strict"; + + var $passwordStrengthField = $('.strength', this.$passwordDialog); + var $passwordInput = $('input.enter-pass', this.$passwordDialog); + var $confirmPasswordInput = $('input.confirm-pass', this.$passwordDialog); + var $encryptButton = $('button.confirm', this.$passwordDialog); + var $inputWrapper = $passwordInput.parent(); + + // Add keyup event to the password text field + $passwordInput.rebind('keyup', function(event) { + + // Make sure the ZXCVBN password strength estimator library is loaded first + if (typeof zxcvbn !== 'undefined') { + + // Estimate the password strength + var password = $.trim($passwordInput.val()); + var passwordScore = zxcvbn(password).score; + var passwordLength = password.length; + + // Remove previous strength classes that were added + $inputWrapper.removeClass('good1 good2 good3 good4 good5'); + + // Add colour coding and text + if (password.length === 0) { + $passwordStrengthField.text(''); // No password entered, hide text + } + else if (passwordLength < 8) { + $inputWrapper.addClass('good1'); + $passwordStrengthField.text(l[18700]); // Too short + } + else if (passwordScore === 4) { + $inputWrapper.addClass('good5'); + $passwordStrengthField.text(l[1128]); // Strong + } + else if (passwordScore === 3) { + $inputWrapper.addClass('good4'); + $passwordStrengthField.text(l[1127]); // Good + } + else if (passwordScore === 2) { + $inputWrapper.addClass('good3'); + $passwordStrengthField.text(l[1126]); // Medium + } + else if (passwordScore === 1) { + $inputWrapper.addClass('good2'); + $passwordStrengthField.text(l[1125]); // Weak + } + else { + $inputWrapper.addClass('good1'); + $passwordStrengthField.text(l[1124]); // Very Weak + } + } + + // If Enter key is pressed, trigger encryption button clicking + if (event.keyCode === 13) { + $encryptButton.trigger('click'); + } + }); + + // Add keyup event to the confirm password text field + $confirmPasswordInput.rebind('keyup.setPass', function(event) { + + // If Enter key is pressed, trigger encryption button clicking + if (event.keyCode === 13) { + $encryptButton.trigger('click'); + } + }); + }, + + /** + * Start key derivation of each link in the dialog + */ + startEncryption: function() { + + "use strict"; + + var $passwordInput = $('input.enter-pass', this.$passwordDialog); + var $confirmPasswordInput = $('input.confirm-pass', this.$passwordDialog); + + // Hide previous errors + $passwordInput.data('MegaInputs').hideError(); + + // Get the password + var password = $passwordInput.val(); + var confirmPassword = $confirmPasswordInput.val(); + + // Check if TextEncoder function is available for the stringToByteArray function + if (!window.TextEncoder) { + + // This feature is not supported in your browser... + $passwordInput.data('MegaInputs').showError(l[9065]); + return false; + } + + // Check the passwords are the same with no typos + if (password !== confirmPassword) { + + // The passwords are not the same... + $passwordInput.data('MegaInputs').showError(l[9066]); + return false; + } + + // Check zxcvbn library is loaded first or we can't check the strength of the password + if (typeof zxcvbn === 'undefined') { + + // The password strength verifier is still initializing + $passwordInput.data('MegaInputs').showError(l[1115]); + return false; + } + + // Check that the password length is sufficient and exclude very weak passwords + if (password.length < 8 || $passwordInput.parent().hasClass('good1')) { + + // Please use a stronger password + $passwordInput.data('MegaInputs').showError(l[9067]); + return false; + } + + // Get information for each selected link showing in the dialog and convert the password to bytes + var links = exportPassword.encrypt.getLinkInfo(); + + // An anonymous function to derive the key and on completion create the password protected link + var processLinkInfo = function(linkInfo, algorithm, saltBytes, password) { + exportPassword.deriveKey(algorithm, saltBytes, password, function(derivedKeyBytes) { + exportPassword.encrypt.encryptAndMakeLink(linkInfo, derivedKeyBytes); + }); + }; + + // For each selected link + for (var i = 0; i < links.length; i++) { + + // Get the link information and random salt + var link = links[i]; + var saltBytes = link.saltBytes; + var algorithm = exportPassword.currentAlgorithm; + + // Derive the key and create the password protected link + processLinkInfo(link, algorithm, saltBytes, password); + } + }, + + /** + * Encrypt the link's key and format the password protected link + * @param {Object} linkInfo The information about the link + * @param {Uint8Array} derivedKeyBytes The derived key in bytes + */ + encryptAndMakeLink: function(linkInfo, derivedKeyBytes) { + + "use strict"; + + var encKeyBytes = null; + var algorithm = exportPassword.currentAlgorithm; + var saltBytes = linkInfo.saltBytes; + + // If folder link, use the first 16 bytes (128 bits) of the derived key as the encryption key + if (linkInfo.type === exportPassword.LINK_TYPE_FOLDER) { + encKeyBytes = new Uint8Array(derivedKeyBytes.buffer, 0, 16); + } + else { + // Otherwise if it's a file link use the first 32 bytes (256 bits) as the encryption key + encKeyBytes = new Uint8Array(derivedKeyBytes.buffer, 0, 32); + } + + // Use the last 32 bytes (256 bits) of the derived key as the MAC key + var macKeyLengthBytes = exportPassword.algorithms[algorithm].macKeyLength / 8; + var macKeyBytes = new Uint8Array(derivedKeyBytes.buffer, macKeyLengthBytes, macKeyLengthBytes); + + // Encrypt the file/folder link key + var encryptedKey = exportPassword.xorByteArrays(encKeyBytes, linkInfo.keyBytes); + + // Convert the public handle to bytes + var publicHandleBytes = asmCrypto.base64_to_bytes(linkInfo.publicHandle); + + // 1 byte for alg + 1 byte if folder/file + 6 bytes for handle + 32 bytes salt + 16 or 32 bytes for key + var dataToAuthenticateLength = 2 + publicHandleBytes.length + saltBytes.length + encryptedKey.length; + var dataToAuthenticateBytes = new Uint8Array(dataToAuthenticateLength); + + // Set the algorithm and set the flag for type of link + dataToAuthenticateBytes[0] = algorithm; + dataToAuthenticateBytes[1] = linkInfo.type; + + // Set the handle, salt and encrypted key into the array to be authenticated using different array offsets + dataToAuthenticateBytes.set(publicHandleBytes, 2); + dataToAuthenticateBytes.set(saltBytes, 8); + dataToAuthenticateBytes.set(encryptedKey, 40); + + // Create the MAC of the data + var macAlgorithm = exportPassword.algorithms[algorithm].macName; + + // If using the old algorithm (1), use parameter order: HMAC(password, data) + if (algorithm === 1) { + var macBytes = asmCrypto[macAlgorithm].bytes(macKeyBytes, dataToAuthenticateBytes); + } + else { + // Otherwise for newer links (algorithm >= 2) use the correct parameter order: HMAC(data, password) + var macBytes = asmCrypto[macAlgorithm].bytes(dataToAuthenticateBytes, macKeyBytes); + } + + // Create buffer for the data to be converted to Base64 + var numOfBytes = dataToAuthenticateBytes.length + macBytes.length; + var dataToConvert = new Uint8Array(numOfBytes); + + // Fill the array using the different offsets + dataToConvert.set(dataToAuthenticateBytes, 0); + dataToConvert.set(macBytes, dataToAuthenticateBytes.length); + + // Convert the data to Base64, then make it URL safe + var dataBase64UrlEncoded = exportPassword.base64UrlEncode(dataToConvert); + + // Construct URL: #P! for password link + encoded(alg + folder/file + handle + salt + encrypted key + mac) + var protectedUrl = getBaseUrl() + '/#P!' + dataBase64UrlEncoded; + + // Get the HTML block for this link by using the node handle + var $item = $('.item[data-node-handle="' + linkInfo.handle + '"]', this.$dialog); + var password = $('.enter-pass', this.$passwordDialog).val(); + + // Set the password into the text box and add a class for styling this block + $('.item-link.link input', $item).val(protectedUrl); + $('.item-link.key input', $item).val(''); + $('i.lock', $item).data('pw', password); + $item.addClass('password-protect-link'); + + // Update Password buttons and links UI + exportPassword.encrypt.updatePasswordComponentsUI(); + + exportPassword.encrypt.hideSetPasswordDialog(); + exportPassword.encrypt.initRemovePasswordButton(); + + // Log to see if feature is used much + api_req({ a: 'log', e: 99618, m: 'User created password protected link' }); + }, + + /** + * Get the information for each selected link + * @returns {Array} Returns an array of objects containing properties 'handle', 'type', 'key', 'keyBytes' + */ + getLinkInfo: function() { + + "use strict"; + + var links = []; + var $links = $('.item', this.$dialog); + var $selectedLink = $links.filter('.selected'); + var handles = []; + + // Create array of available links handles + if ($selectedLink.length) { + handles.push($selectedLink.data('node-handle')); + } + else { + $links.get().forEach(function(e) { + handles.push($(e).data('node-handle')); + }); + } + + // Iterate through the selected handles + for (var i in handles) { + if (handles.hasOwnProperty(i)) { + + // Get the node information + var node = M.d[handles[i]]; + var linkInfo = {}; + + // Only nodes with public handle + if (node && node.ph) { + + // Folder + if (node.t) { + linkInfo.type = exportPassword.LINK_TYPE_FOLDER; // 0 byte for folder link + linkInfo.key = u_sharekeys[node.h][0]; // 128 bit key as array of 32 bit int + } + else { + // File + linkInfo.type = exportPassword.LINK_TYPE_FILE; // 1 byte for file link + linkInfo.key = node.k; // 256 bit key as array of 32 bit int + } + + // Convert the key to a byte array (big endian), also add the link's handle and public handle + linkInfo.keyBytes = a32_to_ab(linkInfo.key); + linkInfo.handle = node.h; + linkInfo.publicHandle = node.ph; + + // Generate a random salt for encrypting this link + var algorithm = exportPassword.currentAlgorithm; + var saltLengthBytes = exportPassword.algorithms[algorithm].saltLength / 8; + linkInfo.saltBytes = crypto.getRandomValues(new Uint8Array(saltLengthBytes)); + + // Add object to array + links.push(linkInfo); + } + } + } + + return links; + } + }, // Encrypt functions + + + /** + * Functions for the decryption + */ + decrypt: { + + // The jQuery selector for the Export dialog + $dialog: null, + + /** + * Initialise function + * @param {String} page The current page's URL hash e.g. #P!AAA5TWTcNMtFlJ5A... + */ + init: function(page) { + + "use strict"; + + // Cache dialog selector + this.$dialog = $('.mega-dialog.password-dialog', 'body'); + + this.$megaInput = new mega.ui.MegaInputs($('#password-decrypt-input',this.$dialog)); + + // Show the dialog + this.showDialog(page); + }, + + /** + * Shows the dialog to let the user decrypt the link using a password + * @param {String} page The current page's URL hash e.g. #P!AAA5TWTcNMtFlJ5A... + */ + showDialog: function(page) { + + "use strict"; + var $megaInput = this.$megaInput; + var $closeButton = $('button.js-close', this.$dialog); + var $decryptButton = $('.decrypt-link-button', this.$dialog); + var $decryptButtonText = $('.decrypt-text', $decryptButton); + + // Show a background overlay + fm_showoverlay(); + + // Show the dialog + $.dialog = 'passwordlink-dialog'; + this.$dialog.removeClass('hidden'); + + // Reset state of dialog for future password link decryptions + $decryptButtonText.text(l[1027]); // Decrypt + + // Add a click handler for the close button to return to the home page (or cloud drive if logged in) + $closeButton.rebind('click', function() { + loadSubPage(''); + return false; + }); + + // Add click handler for Decrypt button + $decryptButton.rebind('click', function() { + exportPassword.decrypt.decryptLink(page); + }); + + // Listen for Enter key to fire decryption + $megaInput.$input.rebind('keyup', (ev) => { + if (ev.keyCode === 13) { + exportPassword.decrypt.decryptLink(page); + } + }); + }, + + /** + * Decrypts the password protected link and redirects to the real folder/file link + * @param {String} page The current page's URL hash e.g. #P!AAA5TWTcNMtFlJ5A... + */ + decryptLink: function(page) { + + "use strict"; + var $megaInput = this.$megaInput; + var $decryptButton = $('.decrypt-link-button', this.$dialog); + var $decryptButtonText = $('.decrypt-text', $decryptButton); + var $decryptButtonProgress = $('.decryption-in-progress', $decryptButton); + var $password = $megaInput.$input; + + + // Get the password and the encoded information in the URL + var password = $password.val(); + var urlEncodedInfo = page.replace('P!', ''); + var decodedBytes = null; + + // If no password given... + if (!password) { + $megaInput.showError(l[970]); // Please enter a valid password... + return false; + } + + // Decode the request + try { + decodedBytes = exportPassword.base64UrlDecode(urlEncodedInfo); + } + catch (exception) { + + // Show error and abort + $megaInput.showError(l[9068]); // The link could not be decoded... + return false; + } + + // Get the algorithm used + var algorithm = decodedBytes[0]; + + // Check if valid array index or will throw an exception + if (typeof exportPassword.algorithms[algorithm] === 'undefined') { + + // Show error and abort + $megaInput.showError(l[9069]); // The algorithm this link was encrypted with is not supported + return false; + } + + // Get the salt bytes, start offset at 8 (1 byte for alg + 1 byte for file/folder + 6 for handle) + var saltLength = exportPassword.algorithms[algorithm].saltLength / 8; + var saltStartOffset = 8; + var saltEndOffset = saltStartOffset + saltLength; + var saltBytes = decodedBytes.subarray(saltStartOffset, saltEndOffset); + + // Show encryption loading animation and change text to 'Decrypting' + $decryptButtonProgress.removeClass('hidden'); + $decryptButtonText.text(l[8579]); + + // Compute the PBKDF + exportPassword.deriveKey(algorithm, saltBytes, password, function(derivedKeyBytes) { + + // Get the MAC from the decoded bytes + var macLength = exportPassword.algorithms[algorithm].macLength / 8; + var macStartOffset = decodedBytes.length - macLength; + var macEndOffset = decodedBytes.length; + var macToVerifyBytes = decodedBytes.subarray(macStartOffset, macEndOffset); + + // Get the data to verify + var dataToVerify = decodedBytes.subarray(0, macStartOffset); + + // Get the MAC key + var macKeyLength = exportPassword.algorithms[algorithm].macKeyLength / 8; + var macKeyStartOffset = derivedKeyBytes.length - macKeyLength; + var macKeyEndOffset = derivedKeyBytes.length; + var macKeyBytes = derivedKeyBytes.subarray(macKeyStartOffset, macKeyEndOffset); + + // Compute the MAC over the data to verify + var dataToVerifyBytes = decodedBytes.subarray(0, macStartOffset); + var macAlgorithm = exportPassword.algorithms[algorithm].macName; + + // If the link was created with an old algorithm (1) which used parameter order: HMAC(password, data) + if (algorithm === 1) { + var macBytes = asmCrypto[macAlgorithm].bytes(macKeyBytes, dataToVerifyBytes); + } + else { + // Otherwise for newer links (algorithm >= 2) use the correct parameter order: HMAC(data, password) + var macBytes = asmCrypto[macAlgorithm].bytes(dataToVerifyBytes, macKeyBytes); + } + + // Convert the string to hex for simple string comparison + var macString = asmCrypto.bytes_to_hex(macBytes); + var macToVerifyString = asmCrypto.bytes_to_hex(macToVerifyBytes); + + // Compare the MAC in the URL to the computed MAC + if (macString !== macToVerifyString) { + + // Show error and abort + $megaInput.showError(l[9076]); // The link could not be decrypted... + $decryptButtonProgress.addClass('hidden'); + $decryptButtonText.text(l[1027]); + return false; + } + + // Get the link type char code and set the default key length to 32 bytes + var linkTypeByte = decodedBytes[1]; + var linkType = linkTypeByte; + var keyLength = 32; + + // If folder link, set the key length to 16 bytes + if (linkType === exportPassword.LINK_TYPE_FOLDER) { + keyLength = 16; + } + + // Get the encryption key from the derived key + var encKeyBytes = derivedKeyBytes.subarray(0, keyLength); + + // Get the encrypted key, start is (2 bytes for alg and type + 6 bytes for handle + salt) + var saltLength = exportPassword.algorithms[algorithm].saltLength / 8; + var startOffset = 2 + 6 + saltLength; + var endOffset = startOffset + keyLength; + var encryptedKeyBytes = dataToVerify.subarray(startOffset, endOffset); + + // Decrypt the file/folder link key + var decryptedKey = exportPassword.xorByteArrays(encKeyBytes, encryptedKeyBytes); + + // Recreate the original file/folder link + var handleBytes = dataToVerify.subarray(2, 8); + var handleUrlEncoded = exportPassword.base64UrlEncode(handleBytes); + var decryptedKeyUrlEncoded = exportPassword.base64UrlEncode(decryptedKey); + var folderIdentifier = (linkType === exportPassword.LINK_TYPE_FOLDER) ? 'F' : ''; + var url = folderIdentifier + '!' + handleUrlEncoded + '!' + decryptedKeyUrlEncoded; + + + if (mega.flags.nlfe) { + url = (folderIdentifier ? '/folder/' : '/file/') + handleUrlEncoded + + '#' + decryptedKeyUrlEncoded; + } + + + // Show completed briefly before redirecting + $decryptButtonProgress.addClass('hidden'); + $decryptButtonText.text(l[9077]); // Decrypted + + // Clear password field + $password.val(''); + + // Add a log to see if the feature is used often + api_req({ a: 'log', e: 99633, m: 'Successfully decrypted password protected link on regular web' }); + + // On success, redirect to actual file/folder link + folderlink = false; + loadSubPage(url); + }); + } + }, // Decrypt functions + + + /** + * Common functions for encryption and decryption + */ + + /** + * A wrapper function used for deriving a key from a password. + * @param {Number} algorithm The index of the algorithms array describing which algorithm to use + * @param {Uint8Array} saltBytes The salt as a byte array + * @param {String} password The raw password as entered by the user e.g. in ASCII or UTF-8 + * @param {Function} callback A function to call when the operation is complete + */ + deriveKey: function(algorithm, saltBytes, password, callback) { + + "use strict"; + + // Trim the password and convert it from ASCII/UTF-8 to a byte array + var passwordTrimmed = $.trim(password); + var passwordBytes = this.stringToByteArray(passwordTrimmed); + + // If Web Crypto method supported, use that + if (window.crypto && window.crypto.subtle) { + this.deriveKeyWithWebCrypto(algorithm, saltBytes, passwordBytes, callback); + } + else { + // Otherwise use asmCrypto which is the next fastest + this.deriveKeyWithAsmCrypto(algorithm, saltBytes, passwordBytes, callback); + } + }, + + /** + * Derive the key using the Web Crypto API + * @param {Number} algorithm The index of the algorithms array describing which algorithm to use + * @param {Uint8Array} saltBytes The salt as a byte array + * @param {Uint8Array} passwordBytes The password as a byte array + * @param {Function} callback A function to call when the operation is complete + */ + deriveKeyWithWebCrypto: function(algorithm, saltBytes, passwordBytes, callback) { + + "use strict"; + + // Get algorithm details + var name = this.algorithms[algorithm]['name']; + var hash = this.algorithms[algorithm]['hash']; + var iterations = this.algorithms[algorithm]['iterations']; + var derivedKeyLength = this.algorithms[algorithm]['derivedKeyLength']; + + // Import the password as the key + crypto.subtle.importKey( + 'raw', passwordBytes, name, false, ['deriveBits'] + ) + .then(function(key) { + + // Required PBKDF2 parameters + var params = { + name: name, + hash: hash, + salt: saltBytes, + iterations: iterations + }; + + // Derive bits using the algorithm + return crypto.subtle.deriveBits(params, key, derivedKeyLength); + }) + .then(function(derivedKeyArrayBuffer) { + + // Convert to a byte array + var derivedKeyBytes = new Uint8Array(derivedKeyArrayBuffer); + + // Pass the derived key to the callback + callback(derivedKeyBytes); + }); + }, + + /** + * Derive the key using asmCrypto + * @param {Number} algorithm The index of the algorithms array describing which algorithm to use + * @param {Uint8Array} saltBytes The salt as a byte array + * @param {Uint8Array} passwordBytes The password as a byte array + * @param {Function} callback A function to call when the operation is complete + */ + deriveKeyWithAsmCrypto: function(algorithm, saltBytes, passwordBytes, callback) { + + "use strict"; + + // Get algorithm details + var name = this.algorithms[algorithm]['failsafeName']; + var iterations = this.algorithms[algorithm]['iterations']; + var keyLengthBits = this.algorithms[algorithm]['derivedKeyLength']; + var keyLengthBytes = keyLengthBits / 8; + + // Give the UI some time to update on slower devices like iOS + setTimeout(function() { + + // Derive the key + var derivedKeyBytes = asmCrypto[name].bytes(passwordBytes, saltBytes, iterations, keyLengthBytes); + + // Pass the derived key to the callback + callback(derivedKeyBytes); + + }, 500); + }, + + /** + * This function encodes the data to Base64 then removes or replaces characters that will break + * in the URL. It is similar to the base64urlencode function in crypto.js but works on a byte array. + * + * @param {Uint8Array} dataBytes The data as a byte array to be converted to Base64 + * @return {String} Returns a URL safe Base64 encoded string e.g. v9jVaZfyT_cuKEV-JviPAhvv + */ + base64UrlEncode: function(dataBytes) { + + "use strict"; + + // Convert the data to regular Base64 + var dataBase64 = asmCrypto.bytes_to_base64(dataBytes); + + // Remove plus signs, forward slashes and equals signs (padding) + var dataBase64UrlEncoded = dataBase64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); + + return dataBase64UrlEncoded; + }, + + /** + * This function decodes the data from a URL safe Base64 string back to regular Base64 then back to bytes. + * It is similar to the base64urldecode function in crypto.js but converts the string back to a byte array. + * + * @param {String} dataText A URL safe Base64 encoded string e.g. v9jVaZfyT_cuKEV-JviPAhvv + * @returns {Uint8Array} Returns the decoded data as a byte array + */ + base64UrlDecode: function(dataText) { + + "use strict"; + + // Restore the padding then replace the plus signs and forward slashes + dataText += '=='.substr((2 - dataText.length * 3) & 3); + dataText = dataText.replace(/\-/g, '+').replace(/_/g, '/'); + + // Convert the data from regular Base 64 to bytes + var dataBytes = asmCrypto.base64_to_bytes(dataText); + + return dataBytes; + }, + + /** + * XOR two arrays of type Uint8Array together e.g. useful for encryption or decryption + * @param {Uint8Array} array1 The first array e.g. the encryption key + * @param {Uint8Array} array2 The second array e.g. the data to encrypt + * @returns {Uint8Array} + */ + xorByteArrays: function(array1, array2) { + + "use strict"; + + var numOfBytes = array1.length; + var result = new Uint8Array(numOfBytes); + + // XOR each byte in the array with the corresponding byte from the other + for (var i = 0; i < numOfBytes; i++) { + result[i] = array1[i] ^ array2[i]; + } + + return result; + }, + + /** + * Converts a UTF-8 string to a byte array + * @param {String} string A string of any character including UTF-8 chars e.g. password123 + * @returns {Uint8Array} Returns a byte array + */ + stringToByteArray: function(string) { + + "use strict"; + + var encoder = new TextEncoder('utf-8'); + + return encoder.encode(string); + } +}; + +/** + * Functionality for the Export Link expiry feature + */ +var exportExpiry = { + + /** + * Initialise function + */ + init: function() { + + "use strict"; + + this.$dialog = $('.mega-dialog.export-links-dialog'); + this.$datepickerBtn = $('button.expiry', this.$dialog); + + // If they are a pro user, enable expiry date + if (u_attr.p) { + + M.require('datepicker_js').done(function() { + exportExpiry.initExpiryDatePicker(); + exportExpiry.prepopulateExpiryDates(); + }); + } + + this.$datepickerBtn.rebind('click', () => { + $('input.set-date', this.$dialog).trigger('focus'); + }); + + }, + + /** + * Setup the datepicker + */ + initExpiryDatePicker: function() { + + "use strict"; + + var self = this; + var $setDateInput = $('.set-date', self.$dialog); + var $removeDateBtn = $('.remove-date', self.$dialog); + var $scroll = $('.links-scroll', this.$dialog); + var minDate = new Date(); + var maxDate = new Date(2060, 11, 31); + var datepicker; + + // Set Minimum date at least 1 day in the future + minDate.setDate(minDate.getDate() + 1); + + // Initialise expiry date picker + datepicker = $setDateInput.datepicker({ + + // Date format, @ - Unix timestamp + dateFormat: '@', + // Minimum date that can be selected + minDate: minDate, + // Maximum date that can be selected + maxDate: maxDate, + // Start date that should be displayed when datepiccker is shown + startDate: minDate, + // Content of Previous button + prevHtml: '', + // Content of Next button + nextHtml: '', + // First day in the week. 0 - Sun + firstDay: 0, + // Auto close daticker is date is selected + autoClose: true, + // If true, then clicking on selected cell will remove selection + toggleSelected: false, + // Cursom localization + language: { + // Sun - Sat + daysMin: [l[8763], l[8764], l[8765], l[8766], l[8767], l[8768], l[8769]], + months: [ + l[408], l[409], l[410], l[411], l[412], l[413], // January - June + l[414], l[415], l[416], l[417], l[418], l[419] // July - December + ], + monthsShort: [ + l[24035], l[24037], l[24036], l[24038], l[24047], l[24039], // January - June + l[24040], l[24041], l[24042], l[24043], l[24044], l[24045] // July - December + ] + }, + + // Change Month select box width on Show + onShow: function(inst) { + + var $inputClicked = inst.$el; + var $datepicker = inst.$datepicker; + + // Show previously selected date or min date as default + if (inst.selectedDates[0]) { + inst.date = inst.selectedDates[0]; + } + else { + inst.date = minDate; + } + + // Update datepicker data + inst.update(); + + // Change datepicker position related to clicked element + inst.setPosition = function() { + + $datepicker.position({ + of: $inputClicked, + my: 'center top', + at: 'center top-30', + collision: "flipfit" + }); + }; + + // Change datepicker position + Soon(inst.setPosition); + + // Change position on resize + $(window).rebind('resize.setDatepickerPosition', function() { + inst.setPosition(); + }); + + // Disable scrolling + delay('disableExportScroll', function() { + Ps.disable($scroll[0]); + }, 100); + + // Close export dropdown + $('.dropdown.export', self.$dialog).addClass('hidden'); + + // Close set password dialog + exportPassword.encrypt.hideSetPasswordDialog(); + }, + + onSelect: function(dateText, date, inst) { + + var $inputClicked = inst.$el; + + // Select link item + $('.item.selected', self.$dialog).removeClass('selected'); + $inputClicked.closest('.item').addClass('selected'); + + // Update the link with the new expiry timestamp + exportExpiry.updateLinks(dateText / 1000); + }, + + onHide: function() { + + // Enable scroll + Ps.enable($scroll[0]); + + // Unbind dialog positioning + $(window).unbind('resize.setDatepickerPosition'); + } + + }).data('datepicker'); + + // Clear active dates + datepicker.selectedDates = []; + + // Press Enter key if datepicker dropdown is opened + $setDateInput.rebind('keydown.date', function(event) { + + // If Enter key is pressed + if (event.keyCode === 13) { + $(this).blur(); + + // Trigger click If date is selected in datepicker + if ($('.ui-datepicker .ui-state-active', 'body').length) { + $('.ui-datepicker .ui-state-active', 'body').trigger('click'); + } + } + }); + + // Remove date button + $removeDateBtn.rebind('click.clearExpiry', function() { + + // Unselect link items + $('.item.selected', this.$dialog).removeClass('selected'); + + // Remove selected date from all items + datepicker.clear(); + + // Update common Set Expiry Date button + exportExpiry.updateExpiryButtons(); + + // Update the selected links and remove the expiry timestamps + exportExpiry.updateLinks(); + }); + }, + + /** + * Update Set Expiry Date buttons states + */ + updateExpiryButtons: function() { + + "use strict"; + + var $expiryLinks = $('.links-scroll .item.dateSet', this.$dialog); + var $setDateBtn = this.$datepickerBtn; + var $setDateInput = $('input.set-date', this.$dialog); + var datepicker = $setDateInput.datepicker().data('datepicker'); + var $btnLabel = $('.label', $setDateBtn); + var $removeDateBtn = $('.remove-date', this.$dialog); + var buttonLabel; + + // Clear active dates + datepicker.selectedDates = []; + + // If there is at least one expiry date set + if ($expiryLinks.length) { + + // Show Remove Expiry Date button + $removeDateBtn.removeClass('hidden'); + $setDateBtn.addClass('remove-button-visible'); + + // Get button label + $expiryLinks.get().forEach(function(e) { + + var $this = $(e); + var date = $('.calendar input', $this).data('expiry'); + + // If timestamps are different, use "Multiple dates set" as label + if (buttonLabel && buttonLabel !== date) { + + // Use "Multiple dates set" as button label + buttonLabel = l[23674]; + + return false; + } + + buttonLabel = date; + }); + + // If label is Unixtimestamp, convert it to necessary formats and set active date to common datepicker + if (Number(buttonLabel)) { + + // Set active date in datepicker component + datepicker.selectedDates = [new Date(buttonLabel * 1000)]; + + // Change "Set expiry date" button label + buttonLabel = time2date(buttonLabel, 2); + } + + // Set expiry date button label + $btnLabel.text(buttonLabel); + } + else { + + // Clear the date of any old entries and set "Set expiry date" button label + $btnLabel.text(l[8953]); + $removeDateBtn.addClass('hidden'); + $setDateBtn.removeClass('remove-button-visible'); + } + }, + + /** + * Update selected links with details about the expiry of the link + * @param {Number} expiryTimestamp The expiry timestamp of the link. Set to null to remove the expiry time + */ + updateLinks: function(expiryTimestamp) { + + "use strict"; + + var $links = $('.item', this.$dialog); + var $selectedLink = $('.item.selected', this.$dialog); + var handles = []; + + // Create array of available links handles + if ($selectedLink.length) { + handles.push($selectedLink.data('node-handle')); + } + else { + $links.get().forEach(function(e) { + handles.push($(e).data('node-handle')); + }); + } + + // Iterate through the selected handles + for (var i in handles) { + if (handles.hasOwnProperty(i)) { + + // Get the node handle + var node = M.d[handles[i]]; + var handle = node.h; + + // The data to send in the API request + var request = { + a: 'l', // Link + n: handle, + i: requesti + }; + + // If the expiry timestamp is set + if (expiryTimestamp) { + + // Add it to be sent in the request + request.ets = expiryTimestamp; + } + + // Show the expiry time if applicable or remove it + exportExpiry.setExpiryIconTime(expiryTimestamp, handle); + + // Update the link with the new expiry timestamp + api_req(request); + } + } + + // Update common Set Expiry Date button + exportExpiry.updateExpiryButtons(); + }, + + /** + * If reloading the dialog, check the local state and show the expiry time for each key block if applicable + */ + prepopulateExpiryDates: function() { + + "use strict"; + + // Get the selected files/folders + var handles = $.selected; + + // Keep a counter for how many nodes have expiry times + var numOfNodesWithExpiryTime = 0; + var lastExpireTime = null; + + // For each selected file/folder + for (var i in handles) { + if (handles.hasOwnProperty(i)) { + + // Get the node handle + var node = M.d[handles[i]]; + var nodeHandle = node.h; + var expiryTimestamp = M.getNodeShare(node).ets; + + // If it has an expiry time, increment the count + if (expiryTimestamp) { + + // Set expiry timestamp if exists + exportExpiry.setExpiryIconTime(expiryTimestamp, nodeHandle); + } + } + } + + // Init expiry tips + exportExpiry.initExpiryTip(); + + // Update common Set Expiry Date button + exportExpiry.updateExpiryButtons(); + }, + + /** + * Sets the expiry time on the selected export key + * @param {Number} expiryTimestamp The UNIX timestamp when the link will expire, set to null to hide + * @param {String} nodeHandle The node handle which references the key block to update + */ + setExpiryIconTime: function(expiryTimestamp, nodeHandle) { + + "use strict"; + + // Find the right row + var $linkItem = $('.item[data-node-handle="' + nodeHandle + '"]', this.$dialog); + var $expiryIcon = $('i.calendar', $linkItem); + var $setDateInput = $('input', $expiryIcon); + var datepicker = $setDateInput.datepicker().data('datepicker'); + + // Clear active dates + datepicker.selectedDates = []; + + // If the expiry timestamp is set + if (expiryTimestamp) { + + // If the link has expired + if (unixtime() >= expiryTimestamp) { + + // Use 'Expired' string + expiryTimestamp = l.expired_date_link; + } + else { + + // Set active date in datepicker component + datepicker.selectedDates = [new Date(expiryTimestamp * 1000)]; + } + + // Set special Expiry classname + $linkItem.addClass('dateSet'); + + // Show it + $expiryIcon.removeClass('vo-hidden'); + } + else { + + // Set special Expiry classname + $linkItem.removeClass('dateSet'); + + // Hide it + $expiryIcon.addClass('vo-hidden'); + } + + // Set or clear the text + $('input', $expiryIcon).data('expiry', expiryTimestamp); + }, + + /** + * Init Expire date tooltip + */ + initExpiryTip: function() { + + "use strict"; + + var $linkItem = $('.item', this.$dialog); + var $expiryIcon = $('i.calendar', $linkItem); + var $tip = $('.dark-direct-tooltip.custom-html', this.$dialog); + var $scrollBlock = $('.links-scroll', this.$dialog); + + // Hide a tip with Expiry date + var hideExpiryTip = function() { + + $tip.removeClass('visible'); + $('.content', $tip).text(''); + $scrollBlock.unbind('scroll.hideExpiryTip'); + }; + + // Show tooltip + $expiryIcon.rebind('mouseover.showExpiryTip', function() { + var $this = $(this); + var date = $('input', $this).data('expiry'); + var tipContent; + + if (Number(date)) { + + // Change date format and use "Expires %1" string + date = time2date(date, 2); + tipContent = l[8698].replace('%1', '' + date + ' 0 && height > 0 ? width : 640) + .replace('%h', width > 0 && height > 0 ? height : 360) + .replace('%s', link + (optionAdded ? '!' : '') + (time > 0 ? time + 's' : '') + + (autoplay ? '1a' : '') + (muted ? '1m' : '')) + .replace('%a', autoplay ? 'allow="autoplay;"' : ''); + + $('.code-field .code', $embedTab).text(code); + }; + + uiCheckboxes($('.settings-container', $linksDialog), function(enabled) { + + var $row = $(this).closest('.settings-row'); + var $setting = $('.embed-setting', $row); + + if (enabled) { + $setting.removeClass('disabled').find('input').prop('readonly', false).rebind('input', setCode); + } + else { + $setting.addClass('disabled').find('input').prop('readonly', true).off('input'); + } + setCode(); + }); + + // Reset all numeric inputs under Share Options + $('.settings-container .embed-setting', $embedTab).addClass('disabled'); + $('.settings-container input[type=number]', $embedTab).get().forEach(function(e) { + + var $this = $(e); + + $this.val($this.attr('value')); + $this.prop('readonly', true); + }); + $embedHeader.removeClass('hidden'); + + (function _() { + + $('header .embed-header, header .get-link', $linksDialog) + .removeClass('active').rebind('click.switchTab', _); + + if (this === window || $(this).is('.embed-header')) { + $embedHeader.addClass('active'); + $embedTab.removeClass('hidden'); + $embedFooter.removeClass('hidden'); + $linksTab.addClass('hidden'); + $bottomBar.addClass('hidden'); + $footer.removeClass('empty'); + } + else { + $linksHeader.addClass('active'); + $embedTab.addClass('hidden'); + $embedFooter.addClass('hidden'); + $linksTab.removeClass('hidden'); + $bottomBar.removeClass('hidden'); + + if ($('.item', $linksTab).length >= 1) { + $footer.addClass('empty'); + } + else { + $footer.removeClass('empty'); + } + } + + }).call($.itemExportEmbed ? window : {}); + + $.itemExportEmbed = null; + + $('.video-filename span', $embedTab).text(n.name); + $('.video-attributes .size', $embedTab).text(bytesToSize(n.s)); + $('.video-attributes .duration', $embedTab) + .text(secondsToTimeShort(MediaAttribute(n).data.playtime)); + + var $thumb = $('.video-thumbnail img', $embedTab).attr('src', noThumbURI); + + getImage(n, 1).then((uri) => $thumb.attr('src', uri)).catch(dump); + + $('.code-field .code', $embedTab).rebind('click.selectTxt', function() { + selectText('embed-code-field'); + return false; + }); + + $('.preview-embed', $embedTab).rebind('click.embed', function() { + + if ($(this).text() !== l[1899]) { + $(this).text(l[148]); + $('.video-thumbnail-container', $embedTab).addClass('hidden'); + $('.video-player-container', $embedTab).removeClass('hidden') + .safeHTML(iframe.replace('%s', link)); + } + else { + $(this).text(l[1899]); + $('.video-thumbnail-container', $embedTab).removeClass('hidden'); + $('.video-player-container', $embedTab).addClass('hidden').text(''); + } + }); + + // Let's hide it for now... + $('.preview-embed', $embedTab).addClass('hidden'); + + setCode(); + } + else { + // Remove special Embed class + $linksDialog.removeClass('embed'); + + if ($('.item', $linksDialog).length > 1) { + + // Show bottom bar with Copy buttons if more than one link + $bottomBar.removeClass('hidden'); + $footer.removeClass('empty'); + } + else { + + // Hide bottom bar with Copy buttons if only one link + $bottomBar.addClass('hidden'); + $footer.addClass('empty'); + } + } + + $('.rounded-tip-button .tip-text', $linksTab) + .text(mega.icu.format(l.export_link_decrypt_tip, Object($.itemExport).length || 0)); + + // Show export dialog + M.safeShowDialog('links', function() { + + // Show dialog + fm_showoverlay(); + $linksDialog.removeClass('hidden'); + + // Reset the checkbox of export link decryption key separately when open the get link dialog + if (typeof $keysCheckbox !== 'undefined' && $keysCheckbox.prop('checked')) { + $keysCheckbox.trigger('click'); + } + + // Init Scrolling + Ps.initialize($scroll[0]); + $scroll.scrollTop(0); + + return $linksDialog; + }); + + // Close dialog button + $('button.js-close', $linksDialog).rebind('click.closeDialog', function() { + self.linksDialog(1); + }); + + // Change links view: w/o keys + $keysCheckbox.rebind('change.changeView', function() { + + var isChecked = this.checked; + var $checkboxWrap = $(this).parent(); + var $bottomBar = $('.links-footer', $linksDialog); + + // Change chekcbox state and adapt CopyToClipboard buttons + if (isChecked) { + $checkboxWrap.removeClass('checkboxOff').addClass('checkboxOn'); + $linkContent.addClass('separately'); + $('button.copy.links span', $bottomBar).text(l[23625]); + $('button.copy.keys', $bottomBar).removeClass('hidden'); + } + else { + $checkboxWrap.removeClass('checkboxOn').addClass('checkboxOff'); + $linkContent.removeClass('separately'); + $('button.copy.links span', $bottomBar).text(l[20840]); + $('button.copy.keys', $bottomBar).addClass('hidden'); + } + + // Update Link input values + exportPassword.encrypt.updateLinkInputValues(); + }); + + // Set separate links view default state + Soon(function() { + $keysCheckbox.prop('checked', !$keysCheckbox.prop('checked')).trigger('click'); + }); + + // Decryption key tip repositioning + $('.rounded-tip-button', $linksTab).rebind('mouseover.tipPosition', function() { + + var $this = $(this); + var $tip = $('.dropdown', $this); + var $exportDropdown = $('.dropdown.export', $linksTab); + + $tip.removeClass('left-arrow').addClass('down-arrow'); + $exportDropdown.addClass('hidden'); + + if ($tip.offset().top < 0) { + $tip.removeClass('down-arrow').addClass('left-arrow'); + } + }); + + // Copy all links/keys to clipboard + $('button.copy', $linksDialog).rebind('click.copyToClipboard', function() { + + var $this = $(this); + var $links = $('.item', $linksDialog); + var $item = $this.hasClass('current') ? $this.closest('.item') : undefined; + var pwProtectedNum = $links.filter('.password-protect-link').length; + var mode = $this.hasClass('keys') ? 'keys' : undefined; + var data; + + if ($this.is('.disabled')) { + return false; + } + + // If Copy button locates in Embed tab + if ($('.embed-header', $linksDialog).hasClass('active')) { + toastTxt = l[371]; + data = $('.code-field .code', $linksDialog).text(); + } + else { + // If the button copies Keys only + if (mode) { + linksNum = $item ? 1 : $links.length - pwProtectedNum; + toastTxt = mega.icu.format(l.toast_copy_key, linksNum); + } + else { + linksNum = $item ? 1 : $links.length; + toastTxt = mega.icu.format(l.toast_copy_link, linksNum); + } + + // Set toast notification and data to copy + data = $.trim(getClipboardLinks($item, mode)); + } + + // Copy to clipboard + copyToClipboard(data, toastTxt, null, 2000); + + return false; + }); + + // Init FREE export links events + var initFreeEvents = function() { + + // Add click event to Settings icon, show dropdown + $cogIcons.rebind('click.showDropdown', function() { + + var $this = $(this); + var $dropdown = $('.dropdown.export', $linksTab); + var itemsLength = $('.item', $linksTab).length; + var $currentItem = $this.closest('.item'); + var expiryLabel = $('.calendar.vo-hidden', $currentItem).length ? l[8953] : l[23665]; + var passwordLabel = $('.lock.hidden', $currentItem).length ? l[17454] : l[23666]; + var removeLabel = itemsLength === 1 ? l[23668] : l[6821]; + + // Set button labels + $('.set-exp-date span', $dropdown).text(expiryLabel); + $('.set-password span', $dropdown).text(passwordLabel); + $('.remove-item span', $dropdown).text(removeLabel); + + // Disable scrolling + delay('disableExportScroll', function() { + Ps.disable($scroll[0]); + }, 100); + + // Select link item + $('.item', $linksTab).removeClass('selected'); + $this.closest('.item').addClass('selected'); + + // Dropdown positioning + $dropdown.removeClass('hidden').position({ + of: $this, + my: 'left top', + at: 'left top', + collision: 'flipfit' + }); + }); + + // Add click event to Remove link dropdown item + $removeItem.rebind('click.removeLink', function() { + + const $bottomBar = $('footer', this.$dialog); + const $selectedLink = $('.item.selected', $linksTab); + const handle = $selectedLink.data('node-handle'); + let $items; + let itemsLength; + + // Create Remove link function + var removeLink = function() { + + // New export link + var exportLink = new mega.Share.ExportLink({'updateUI': true, 'nodesToProcess': [handle]}); + + // Remove link in "quite" mode without overlay + exportLink.removeExportLink(true); + + // Remove Link item from DOM + $selectedLink.remove(); + + // Update Export links scrolling + if ($scroll.is('.ps')) { + Ps.update($scroll[0]); + } + + // Get link items length + $items = $('.item', $linksTab); + itemsLength = $items.length; + + if (itemsLength > 1) { + + // Show bottom bar with Copy buttons if more than one link + $bottomBar.removeClass('empty'); + } + else if (itemsLength === 1) { + + // Hide bottom bar with Copy buttons if more than one link + $bottomBar.addClass('empty'); + } + else { + + // Close the dialog If there is no link items + self.linksDialog(1); + + return false; + } + + // Update Password buttons and links UI + exportPassword.encrypt.updatePasswordComponentsUI(); + + // Update common Set Expiry Date button + exportExpiry.updateExpiryButtons(); + }; + + // Show confirmartion dialog if handle is media + if (is_video(M.d[handle]) === 1) { + msgDialog('confirmation', l[882], l[17824], 0, function(e) { + if (e) { + removeLink(); + } + }); + } + else { + removeLink(); + } + }); + + // Click anywhere in Export link dialog to hide dropdown + $linksDialog.rebind('click.closeDropdown', function(e) { + + var $target = $(e.target); + var $dropdown = $('.dropdown.export', $linksTab); + + if (!$target.is('.dropdown.export') && !$target.is('.cog') + && !$dropdown.is('.hidden')) { + + // Enable scrolling + Ps.enable($scroll[0]); + + // Close dropdown + $dropdown.addClass('hidden'); + } + }); + + // Set buttons default states, init events if available + exportExpiry.init(); + exportPassword.encrypt.init(); + }; + + // Init PRO events links events + var initProEvents = function() { + + // Add click event to Set date dropdown item + $setExpiryItem.rebind('click.setDate', function() { + + var $selectedLink = $('.item.selected', $linksTab); + var datepicker = $('.set-date', $selectedLink).datepicker().data('datepicker'); + + // Show datepicker + datepicker.show(); + }); + + // Add click event to Set password dropdown item + $setPasswordtem.rebind('click.setPass', function() { + + // Show Set password dialog + exportPassword.encrypt.showSetPasswordDialog(); + }); + }; + + // Show and init options + if (page === 'download') { + + return false; + } + else if (folderlink) { + + // Show options/features + $options.removeClass('hidden'); + + // Show bottom bar if there is more than one link + if (Object($.itemExport).length > 1) { + + $bottomBar.removeClass('hidden'); + $footer.removeClass('empty'); + } + } + // Init FREE options + else if (!u_attr.p) { + + // Show options/features + $options.removeClass('hidden'); + $proOptions.removeClass('hidden'); + $cogIcons.removeClass('hidden'); + $removeItem.removeClass('hidden'); + + // On PRO options click, go to the Pro page + $proOptions.rebind('click.openpro', function() { + open(getAppBaseUrl() + '#pro'); + }); + + // Init FREE events + initFreeEvents(); + } + // Init PRO options + else if (u_attr.p) { + + // Enable PRO options + $options.removeClass('hidden'); + $proOptions.removeClass('hidden disabled'); + + // Show PRO menu items + $cogIcons.removeClass('hidden'); + $removeItem.removeClass('hidden'); + $setPasswordtem.removeClass('hidden'); + $setExpiryItem.removeClass('hidden'); + + // Init FREE and PRO events + initFreeEvents(); + initProEvents(); + } + }; + + + // ------------------------------------ + // ----- PRIVATE FUNCTIONS FOLLOW ----- + // ------------------------------------ + + + /** + * getClipboardLinks + * + * Gether all available public links for selected items (files/folders). + * @returns {String} links URLs or decryption keys for selected items separated with newline '\n'. + * @param {Object} $items Links selector + * @param {String} mode Contains View mode name: Show links w/o keys + */ + function getClipboardLinks($items, mode) { + + "use strict"; + + var links = []; + var $dialog = $('.mega-dialog.export-links-dialog', 'body'); + + if (!$items) { + $items = $('.item', $dialog); + } + + // Otherwise add all regular links + $items.get().forEach(function(e) { + + var nodeUrlWithPublicHandle = $('.link input', e).val(); + var nodeDecryptionKey = $('.key input', e).val(); + + // Check export/public link dialog drop down list selected option + if (mode === 'keys' && !$(this).hasClass('password')) { + if (nodeDecryptionKey) { + links.push(nodeDecryptionKey); + } + } + else { + links.push(nodeUrlWithPublicHandle); + } + }); + + return links.join("\n"); + } + + /** + * itemExportLinkHtml + * + * @param {Object} item + * @returns {String} + * @private + */ + function itemExportLinkHtml(item) { + + "use strict"; + + var key; + var type; + var fileSize; + var folderClass = ''; + var html = ''; + var nodeHandle = item.h; + var fileUrlKey; + var fileUrlWithoutKey; + var fileUrlNodeHandle = ''; + + // Add a hover text for the icon + var expiresTitleText = l[8698].replace('%1', ''); // Expires %1 + + if (folderlink) { + if (mega.flags.nlfe) { + fileUrlWithoutKey = getBaseUrl() + '/folder/' + pfid; + fileUrlKey = '#' + pfkey; + fileUrlNodeHandle = (item.t ? '/folder/' : '/file/') + item.h; + } + else { + fileUrlWithoutKey = getBaseUrl() + '/#F!' + pfid; + fileUrlKey = '!' + pfkey; + fileUrlNodeHandle = (item.t ? '!' : '?') + item.h; + } + fileSize = item.s && htmlentities(bytesToSize(item.s)) || ''; + } + else if (item.t) { + // Shared item type is folder + key = u_sharekeys[item.h] && u_sharekeys[item.h][0]; + + // folder key must exit, otherwise skip + if (!key) { + return ''; + } + + type = 'F'; + fileSize = ''; + folderClass = ' folder-item'; + } + else { + // Shared item type is file + type = ''; + key = item.k; + fileSize = htmlentities(bytesToSize(item.s)); + } + + if (!fileUrlWithoutKey) { + if (mega.flags.nlfe) { + fileUrlWithoutKey = (getBaseUrl() + (type ? '/folder/' : '/file/') + htmlentities(item.ph)); + } + else { + fileUrlWithoutKey = (getBaseUrl() + '/#' + type + '!' + htmlentities(item.ph)); + } + } + + if (!fileUrlKey) { + if (mega.flags.nlfe) { + fileUrlKey = (key ? '#' + a32_to_base64(key) : ''); + } + else { + fileUrlKey = (key ? '!' + a32_to_base64(key) : ''); + } + } + + html = '
          ' + + '
          ' + + '' + + '' + + '' + + '' + + '' + + '
          ' + + '
          ' + + '
          ' + htmlentities(item.name) + '
          ' + + '
          ' + fileSize + '
          ' + + '
          ' + + '' + + '' + + '
          ' + + '
          '; + + return html; + } + + /** + * generates file url for shared item + * + * @returns {String} html + * @private + */ + function itemExportLink() { + + "use strict"; + + var html = ''; + + $.itemExportHasFolder = false; + $.itemExportHasFile = false; + + $.each($.itemExport, function(index, value) { + + var node = M.d[value]; + + if (node && (folderlink || node.ph)) { + html += itemExportLinkHtml(node); + } + + if (node.t) { + $.itemExportHasFolder = true; + } + else { + $.itemExportHasFile = true; + } + }); + + return html; + } + + // export + scope.mega = scope.mega || {}; + scope.mega.Dialog = scope.mega.Dialog || {}; + scope.mega.Dialog.ExportLink = ExportLinkDialog; + +})(jQuery, window); + + +(function($, scope) { + /** + * ExportLink related operations. + * + * @param opts {Object} + * + * @constructor + */ + + 'use strict'; + var ExportLink = function(opts) { + + var self = this; + + var defaultOptions = { + 'updateUI': false, + 'nodesToProcess': [], + 'showExportLinkDialog': false + }; + + self.options = $.extend(true, {}, defaultOptions, opts); + + // Number of nodes left to process + self.nodesLeft = self.options.nodesToProcess.length; + self.logger = MegaLogger.getLogger('ExportLink'); + }; + + /** + * Get public link for file or folder. + */ + ExportLink.prototype.getExportLink = function() { + + var nodes = this.options.nodesToProcess || false; + + if (!nodes.length) { + return this.logger.warn('No nodes provided to export...', this); + } + + // Add some logging for usage comparisons + if (page === 'download') { + eventlog(99683); // Share public link on downloads page. + } + else if (folderlink) { + eventlog(99715); // Share public link from folder-link. + if (!is_mobile) { + var exportLinkDialog = new mega.Dialog.ExportLink(); + return exportLinkDialog.linksDialog(); + } + } + else if (is_mobile) { + eventlog(99634); // Created public link on mobile webclient + } + else { + eventlog(99635); // Created public link on regular webclient + } + + loadingDialog.show(); + this.logger.debug('getExportLink'); + $.getExportLinkInProgress = nodes; + + for (var i = 0; i < nodes.length; i++) { + var h = nodes[i]; + var n = M.d[h]; + + if (n) { + if (n.t) { + this._getFolderExportLinkRequest(h); + } + else { + this._getExportLinkRequest(h); + } + } + else { + loadingDialog.hide(); + this.logger.warn('Invalid node to export...', h); + } + } + }; + + /** + * Removes public link for file or folder. + * @param {Boolean} [quiet] No loading overlay + * @param {String} handle The node handle which to remove + * @returns {MegaPromise} + */ + ExportLink.prototype.removeExportLink = function(quiet, handle) { + + if (M.isInvalidUserStatus()) { + return MegaPromise.reject(EINTERNAL); + } + + var self = this; + var promises = []; + var handles = self.options.nodesToProcess || handle || []; + + if (handles.length) { + if (!quiet) { + loadingDialog.pshow(); + } + self.logger.debug('removeExportLink'); + + $.each(handles, function(index, h) { + var n = M.d[h]; + + if (n) { + if (n.t) { + promises.push(self._removeFolderExportLinkRequest(h, quiet)); + } + else { + promises.push(self._removeFileExportLinkRequest(h, quiet)); + } + } + else if (d) { + console.warn('removeExportLink: node not found.', h); + } + }); + } + + if (!promises.length) { + return MegaPromise.reject(EARGS); + } + + return MegaPromise.allDone(promises); + }; + + /** + * A 'Private' function, send folder public link delete request. + * @param {String} nodeId The node ID. + */ + ExportLink.prototype._getFolderExportLinkRequest = function(nodeId) { + + var self = this; + var share = M.getNodeShare(nodeId); + + // No need to perform an API call if this folder was already exported (Ie, we're updating) + if (share.h === nodeId) { + if (!M.d[nodeId].t || u_sharekeys[nodeId]) { + return self._getExportLinkRequest(nodeId); + } + + if (d) { + console.warn('Missing sharekey for "%s" - relying on s2 to obtain it...', nodeId); + } + } + // FIXME: check this + + // Get all child nodes of root folder with nodeId + mega.keyMgr.setShareSnapshot(nodeId) + .then(() => { + const childNodes = mega.keyMgr.getShareSnapshot(nodeId); + + var sharePromise = api_setshare(nodeId, [{u: 'EXP', r: 0}], childNodes); + sharePromise.done(function _sharePromiseDone(result) { + if (result.r && result.r[0] === 0) { + + self._getExportLinkRequest(nodeId); + + if (!self.nodesLeft) { + loadingDialog.hide(); + } + } + else { + self.logger.warn('_getFolderExportLinkRequest', nodeId, 'Error code: ', result); + loadingDialog.hide(); + } + }); + sharePromise.fail(function _sharePromiseFailed(result) { + self.logger.warn('Get folder link failed: ' + result); + // FIXME: this seem to lack some handling code for this condition + }); + }) + .catch(dump); + }; + + /** + * A 'Private' function, send public get-link request. + * @param {String} nodeId The node ID. + */ + ExportLink.prototype._getExportLinkRequest = function(nodeId) { + + var self = this; + var done = function(handle) { + + if (handle && self.options.updateUI) { + var UiExportLink = new mega.UI.Share.ExportLink(); + UiExportLink.addExportLinkIcon(handle); + } + + if (!--self.nodesLeft) { + loadingDialog.hide(); + if (self.options.showExportLinkDialog) { + var exportLinkDialog = new mega.Dialog.ExportLink(); + exportLinkDialog.linksDialog(); + } + + console.assert($.getExportLinkInProgress); + if ($.getExportLinkInProgress) { + mBroadcaster.sendMessage('export-link:completed', handle); + $.getExportLinkInProgress = false; + } + } + + // A hook for the mobile web to show the public link and the remove button + if (is_mobile) { + mobile.linkOverlay.showPublicLinkAndEnableButtons(nodeId); + } + }; + var share = M.getNodeShare(nodeId); + var request = { a: 'l', n: nodeId, i: requesti }; + + if (d) { + console.debug('_getExportLinkRequest', share.ph, Object(M.d[nodeId]).ph, share); + } + + // No need to perform an API call if this file was already exported (Ie, we're updating) + if (share.h === nodeId && Object(M.d[nodeId]).ph) { + return done(nodeId); + } + + // If the Expiry Timestamp (ets) is already set locally, resend in the request or it gets removed + if (share.ets) { + request.ets = share.ets; + } + + api_req(request, { + nodeId: nodeId, + callback: function(result) { + if (typeof result !== 'number') { + M.nodeShare(this.nodeId, { h: this.nodeId, r: 0, u: 'EXP', ts: unixtime(), ph: result }); + var n = M.d[this.nodeId]; + if (n) { + n.ph = result; + M.nodeUpdated(n); + } + } + else { // Error + self.logger.warn('_getExportLinkRequest:', this.nodeId, 'Error code: ', result); + } + + done(typeof result !== 'number' && this.nodeId); + } + }); + }; + + /** + * A 'Private' function, send folder delete public link request. + * @param {String} nodeId The node ID. + * @param {Boolean} [quiet] No loading overlay + * @returns {MegaPromise} + */ + ExportLink.prototype._removeFolderExportLinkRequest = function(nodeId, quiet) { + + var self = this; + var masterPromise = new MegaPromise(); + + api_req({ a: 's2', n: nodeId, s: [{ u: 'EXP', r: ''}], ha: '', i: requesti }, { + nodeId: nodeId, + callback: function(result) { + if (result.r && (result.r[0] === 0)) { + M.delNodeShare(this.nodeId, 'EXP'); + + if (self.options.updateUI) { + var UiExportLink = new mega.UI.Share.ExportLink(); + UiExportLink.removeExportLinkIcon(this.nodeId); + } + + // Hook for mobile web to show that removal completed successfully and then close the dialog + if (is_mobile) { + mobile.linkOverlay.completeLinkRemovalProcess(this.nodeId); + } + + masterPromise.resolve(); + } + else { + // Error + self.logger.warn('_removeFolerExportLinkRequest failed for node:', this.nodeId, 'Error: ', result); + masterPromise.reject(result); + } + + if (!--self.nodesLeft && !quiet) { + loadingDialog.phide(); + } + } + }); + + return masterPromise; + }; + + /** + * A 'Private' function, send file delete public link request. + * @param {String} nodeId The node IDs. + * @param {Boolean} [quiet] No loading overlay + * @returns {MegaPromise} + */ + ExportLink.prototype._removeFileExportLinkRequest = function(nodeId, quiet) { + + var self = this; + var promise = new MegaPromise(); + + api_req({ a: 'l', n: nodeId, d: 1, i:requesti }, { + nodeId: nodeId, + callback: function(result) { + + if (result === 0) { + M.delNodeShare(this.nodeId, 'EXP'); + + if (self.options.updateUI) { + var UiExportLink = new mega.UI.Share.ExportLink(); + UiExportLink.removeExportLinkIcon(this.nodeId); + } + + // Hook for mobile web to show that removal completed successfully and then close the dialog + if (is_mobile) { + mobile.linkOverlay.completeLinkRemovalProcess(this.nodeId); + } + + promise.resolve(); + } + else { + // Error + self.logger.warn('_removeFileExportLinkRequest failed for node:', this.nodeId, 'Error: ', result); + promise.reject(result); + } + + if (!--self.nodesLeft && !quiet) { + loadingDialog.phide(); + } + } + }); + + return promise; + }; + + /** + * Returns true in case that any of checked items is taken down, otherwise false + * @param {Array|String} [nodes] Array of nodes (handles/objects) + * @returns {Boolean} + */ + ExportLink.prototype.isTakenDown = function(nodes) { + + if (nodes) { + if (!Array.isArray(nodes)) { + nodes = [nodes]; + } + } + else { + nodes = self.options.nodesToProcess; + } + + for (var i = nodes.length; i--;) { + var node = nodes[i]; + + if (typeof node !== 'object') { + node = M.getNodeByHandle(node); + } + + if (node.t & M.IS_TAKENDOWN || M.getNodeShare(node).down === 1) { + return true; + } + } + + return false; + }; + + /** + * Shows the copyright warning dialog. + * + * @param {Array} nodesToProcess Array of strings, node ids + * @param {*} [isEmbed] Whether we're opening the dialog with the embed-code tab focused. + */ + var initCopyrightsDialog = function(nodesToProcess, isEmbed) { + + if (M.isInvalidUserStatus()) { + return; + } + + $.itemExportEmbed = isEmbed; + $.itemExport = nodesToProcess; + + var openGetLinkDialog = function() { + + var exportLink = new mega.Share.ExportLink({ + 'showExportLinkDialog': true, + 'updateUI': true, + 'nodesToProcess': nodesToProcess + }); + + exportLink.getExportLink(); + }; + + // If they've already agreed to the copyright warning (cws = copyright warning shown) + if (fmconfig.cws || folderlink) { + // Go straight to Get Link dialog + openGetLinkDialog(); + return false; + } + + // Cache selector + var $copyrightDialog = $('.copyrights-dialog'); + + // Otherwise show the copyright warning dialog + M.safeShowDialog('copyrights', function() { + + $.copyrightsDialog = 'copyrights'; + + return $copyrightDialog; + }); + + // Init click handler for 'I disagree' button: User disagrees with copyright warning + $('button.cancel', $copyrightDialog).rebind('click.disagreeAction', closeDialog); + + // Init click handler for 'I agree' + $('button.accept', $copyrightDialog).rebind('click.agreeAction', function() { + closeDialog(); + + // User agrees, store flag so they don't see it again + mega.config.set('cws', 1); + + // Go straight to Get Link dialog + openGetLinkDialog(); + }); + + // Init click handler for 'Close' button + $('button.js-close', $copyrightDialog).rebind('click.closeDialog', closeDialog); + }; + + // export + scope.mega = scope.mega || {}; + scope.mega.Share = scope.mega.Share || {}; + scope.mega.Share.ExportLink = ExportLink; + scope.mega.Share.initCopyrightsDialog = initCopyrightsDialog; +})(jQuery, window); + + +(function($, scope) { + /** + * UI Public Link Icon related operations. + * + * @param opts {Object} + * + * @constructor + */ + var UiExportLink = function(opts) { + + "use strict"; + + this.logger = MegaLogger.getLogger('UiExportLink'); + }; + + /** + * addExportLinkIcon + * + * Add public link icon to file or folder + * @param {String} nodeId + */ + UiExportLink.prototype.addExportLinkIcon = function(nodeId) { + + "use strict"; + + var self = this; + var $nodeId = $('#' + nodeId); + var $tree = $('#treea_' + nodeId).add('#treea_os_' + nodeId).add('#treea_pl_' + nodeId); + + // eslint-disable-next-line sonarjs/no-collapsible-if + if ($nodeId.length === 0 && !String(M.currentdirid).includes('chat')) { + + // not inserted in the DOM, retrieve the nodeMap cache and update that DOM node instead. + if (M.megaRender && M.megaRender.hasDOMNode(nodeId)) { + $nodeId = $(M.megaRender.getDOMNode(nodeId)); + } + } + + if (!$nodeId.length && !$tree.length) { + self.logger.warn('No DOM Node matching "%s"', nodeId); + + return false; + } + + self.logger.debug('addExportLinkIcon', nodeId); + + $nodeId.addClass('linked'); + + if ($tree.length) { + + // Add link-icon to left panel + $tree.addClass('linked'); + } + }; + + /** + * Remove public link icon to file or folder + * @param {String} nodeId + */ + UiExportLink.prototype.removeExportLinkIcon = function(nodeId) { + + "use strict"; + + var $node = $('#' + nodeId); + + if ($node.length === 0) { + // not inserted in the DOM, retrieve the nodeMap cache and update that DOM node instead. + if (M.megaRender && M.megaRender.hasDOMNode(nodeId)) { + $node = $(M.megaRender.getDOMNode(nodeId)); + } + } + + // Remove link icon from list view + $node.removeClass('linked').find('.own-data').removeClass('linked'); + + // Remove link icon from grid view + $node.filter('.data-block-view').removeClass('linked'); + + // Remove link icon from left panel + $('#treeli_' + nodeId + ' > span').removeClass('linked'); + }; + + /** + * Updates grid and block (file) view, removes favorite icon if exists and adds .taken-down class. + * @param {String} nodeId + * @param {Boolean} isTakenDown + */ + UiExportLink.prototype.updateTakenDownItem = function(nodeId, isTakenDown) { + + "use strict"; + + var self = this; + + if (isTakenDown) { + if (M.d[nodeId].fav === 1) { + + // Remove favourite (star) + M.favourite(nodeId, 0); + } + self.addTakenDownIcon(nodeId); + } + else { + self.removeTakenDownIcon(nodeId); + } + }; + + /** + * Add taken-down icon to file or folder + * @param {String} nodeId + */ + UiExportLink.prototype.addTakenDownIcon = function(nodeId) { + + "use strict"; + + var titleTooltip = ''; + var $element; + + // Add taken-down to list view + $element = $('.grid-table.fm #' + nodeId).addClass('taken-down'); + $('.grid-status-icon', $element).removeClass('icon-dot icon-favourite-filled').addClass('icon-takedown'); + + // Add taken-down to block view + $element = $('#' + nodeId + '.data-block-view').addClass('taken-down'); + $('.file-status-icon', $element).removeClass('icon-favourite-filled').addClass('icon-takedown'); + + if (M.megaRender && M.megaRender.nodeMap && M.megaRender.nodeMap[nodeId]) { + $(M.megaRender.nodeMap[nodeId]).addClass('take-down'); + } + // Add taken-down to left panel + $element = $('#treea_' + nodeId).addClass('taken-down'); + $('.file-status-ico', $element).removeClass('icon-link-small').addClass('icon-takedown'); + + // Add title, mouse popup + if (M.d[nodeId].t === 1) {// Item is folder + + titleTooltip = l[7705]; + + // Undecryptable node indicators + if (missingkeys[nodeId]) { + titleTooltip += '\n' + l[8595]; + } + + $('.grid-table.fm #' + nodeId).attr('title', titleTooltip); + $('#' + nodeId + '.data-block-view').attr('title', titleTooltip); + } + else {// Item is file + + titleTooltip = l[7704]; + + // Undecryptable node indicators + if (missingkeys[nodeId]) { + titleTooltip += '\n' + l[8602]; + } + + $('.grid-table.fm #' + nodeId).attr('title', titleTooltip); + $('#' + nodeId + '.data-block-view').attr('title', titleTooltip); + } + }; + + /** + * Remove taken-down icon from file or folder + * @param {String} nodeId + */ + UiExportLink.prototype.removeTakenDownIcon = function(nodeId) { + + "use strict"; + + if (M.megaRender && M.megaRender.hasDOMNode(nodeId)) { + $(M.megaRender.getDOMNode(nodeId)).removeClass('take-down'); + } + + var $element; + + // Add taken-down to list view + $element = $('.grid-table.fm #' + nodeId).removeClass('taken-down'); + $('.grid-status-icon', $element).removeClass('icon-takedown'); + + // Add taken-down to block view + $element = $('#' + nodeId + '.data-block-view').removeClass('taken-down'); + $('.file-status-icon', $element).removeClass('icon-takedown'); + + // Add taken-down to left panel + $element = $('#treea_' + nodeId).removeClass('taken-down'); + $('.file-status-ico', $element).removeClass('icon-takedown'); + + // Remove title, mouse popup + $('.grid-table.fm #' + nodeId).attr('title', ''); + $('#' + nodeId + '.data-block-view').attr('title', ''); + }; + + // export + scope.mega = scope.mega || {}; + scope.mega.UI = scope.mega.UI || {}; + scope.mega.UI.Share = scope.mega.UI.Share || {}; + scope.mega.UI.Share.ExportLink = UiExportLink; +})(jQuery, window); + +/** Export Link as string **/ +(function($, scope) { + 'use strict'; + + scope.getPublicNodeExportLink = function(node) { + + var fileUrlWithoutKey; + var type; + + if (folderlink) { + fileUrlWithoutKey = getBaseUrl() + '/#F!' + pfid + (node.t ? '!' : '?') + node.h; + } + else if (node.t) { + type = 'F'; + } + else { + // Shared item type is file + type = ''; + } + + return fileUrlWithoutKey || (getBaseUrl() + '/#' + type + '!' + htmlentities(node.ph)); + }; + +})(jQuery, mega); + +/** Initialise they keys required for operation. */ +function init_key() { + if (typeof u_k_aes === 'undefined') { + return loadSubPage('start'); + } + $('.key1').addClass('hidden'); + $('.key2').removeClass('hidden'); + + if (typeof u_privk === 'undefined') { + crypto_rsagenkey(); + } + else { + ui_keycomplete(); + } +} + +/** Callback called on completion. */ +function ui_keycomplete() { + $('.key1').addClass('hidden'); + $('.key2').addClass('hidden'); + $('.key3').removeClass('hidden'); + + if ((typeof (u_attr.p) !== 'undefined') && (u_attr.p >= 1 && u_attr.p <= 4)) { + loadSubPage('fm'); + } + else { + localStorage.keycomplete = true; + sessionStorage.signinorup = 2; + + // If mobile, log to see how many registrations are completed on mobile and load the cloud drive + if (is_mobile) { + + // Check if they actually started the registration process on mobile web + if (localStorage.signUpStartedInMobileWeb) { + + // Remove the flag as it's no longer needed and send a stats log + localStorage.removeItem('signUpStartedInMobileWeb'); + api_req({ a: 'log', e: 99639, m: 'Started and completed registration on mobile webclient' }); + } + else { + // Otherwise they just completed sign up on the mobile web and may have started it on a mobile app + api_req({ a: 'log', e: 99627, m: 'Completed registration on mobile webclient' }); + } + } + else { + // Otherwise log to see how many registrations are completed on regular webclient + api_req({ a: 'log', e: 99628, m: 'Completed registration on regular webclient' }); + } + + // if this is a sub-user in a business account. + // either This is the master --> wont get the confirmation link until we receive successful payment + // or, this is a sub-user --> no need to ask them anything after this point + if (u_attr && u_attr.b) { + if (page === 'fm') { + loadSubPage('start'); + } + else { + loadSubPage('fm'); + } + } + else { + onIdle(function() { + authring.initAuthenticationSystem(); + }); + // Load the Pro page to choose plan, or the redeem page if a pending voucher is found. + loadSubPage(localStorage.voucher ? 'redeem' : 'pro'); + } + } +} + +(function($) { + 'use strict'; + + /** + * Super simple, performance-wise and minimal tooltip utility. + * This "tooltip tool" saves on DOM nodes and event handlers, since it: + * 1) Uses delegates, so 1 event handler for unlimited amount of dynamically added tooltips in the UI. #performance + * 2) Does not require extra DOM elements (e.g. total # of DOM elements < low = performance improvement) + * 3) Its clever enough to reposition tooltips properly, w/o adding extra dependencies (except for jQuery UI, which + * we already have), e.g. better then CSS :hover + .tooltip { display: block; } + * 4) It supports dynamic content updates, based on the current state of the control -- for example, when + * interacting with given control, the tooltip content may automatically re-render, e.g. `Mute` -> `Unmute`. + * 5) Its minimal. < 200 lines of code. + * + * Note: Uses jQuery UI's position() to position the tooltip on top or bottom, if out of viewport. By default - + * would, try to position below the target element. + */ + + /** + * How to use: + * 1) Add "simpletip" class name to any element in the DOM + * 2) To set the content of the tooltip, pass an attribute w/ the text named `data-simpletip` + * Example: + * ```Mouse over me``` + * or setting optional classname `simpletip-tc` on the element without data attribute to simply using text contents + * ```Mouse over me``` + * + * Optionally, you can control: + * A) The wrapper in which the tooltip should try to fit in (and position on top/bottom, depending on whether there + * is enough space) by passing a selector that matches a parent of the element in attribute named + * `data-simpletipwrapper` + * Example: + * ```Mouse over me``` + * + * B) Change the default position to be "above" (top) of the element, instead of bottom/below by passing attribute + * `data-simpletipposition="top"` + * Example: + * ```Mouse over me``` + * The tooltip can also be placed to the "left", "right", or can detect the direction using "start" and "end". + * + * C) Manually add extra top/bottom offset by passing `data-simpletipoffset="10"` + * Example: + * ```Mouse over me``` + * + * D) Add any custom styling to tooltip by adding style class e.g. .medium-width for max-width: 220px;, + * .center-align for text-align: center; + * Example: + * ``` + * + * Mouse over me + * + * ``` + * + * E) Add any custom class to tooltip by `data-simpletip-class='custom-class'` + * Example: + * ```Mouse over me``` + * + * How to trigger content update: + * 1) Create new instance of the simpletip that contains conditional `data-simpletip` attribute. + * `````` + * 2) On state update, invoke `simpletipUpdated` event trigger on the `.simpletip` element. + * ```$('.simpletip').trigger('simpletipUpdated');``` + * + * How to trigger manual unmount: + * On state update, invoke `simpletipClose` event trigger on the `.simpletip` element. + * ```$('.simpletip').trigger('simpletipClose');``` + */ + + var $template = $( + '
          ' + + '' + + '' + + '
          ' + ); + + var $currentNode; + var $currentTriggerer; + var SIMPLETIP_UPDATED_EVENT = 'simpletipUpdated.internal'; + var SIMPLETIP_CLOSE_EVENT = 'simpletipClose.internal'; + + var sanitize = function(contents) { + return escapeHTML(contents).replace(/\[BR\]/g, '
          ') + .replace(/\[I class="([\w- ]*)"]/g, ``) + .replace(/\[I]/g, '').replace(/\[\/I]/g, '') + .replace(/\[B\]/g, '').replace(/\[\/B\]/g, '') + .replace(/\[U]/g, '').replace(/\[\/U]/g, '') + .replace(/\[G]/g, '') + .replace(/\[\/G]/g, '') + .replace(/\[A]/g, '') + .replace(/\[\/A]/g, ''); + }; + + var unmount = function() { + if ($currentNode) { + $currentNode.remove(); + $currentNode = null; + $currentTriggerer.unbind(SIMPLETIP_UPDATED_EVENT); + $currentTriggerer.unbind(SIMPLETIP_CLOSE_EVENT); + $currentTriggerer = null; + } + }; + + const calculateOffset = (info, $this) => { + let topOffset = 0; + let leftOffset = 0; + let offset = 7; // 7px === height of arrow glyph + if ($this.attr('data-simpletipoffset')) { + offset = parseInt($this.attr('data-simpletipoffset'), 10) + 7; + } + + if (info.vertical === 'top') { + topOffset = offset; + } + else if (info.vertical === 'bottom') { + topOffset = -offset; + } + else if (info.horizontal === 'left') { + leftOffset = offset; + } + else if (info.horizontal === 'right') { + leftOffset = -offset; + } + + return { leftOffset, topOffset }; + }; + + + /** + * Converts relative start/end positioning to absolute left/right positioning + * + * @param {string} tipPosition the specified position of the tooltip + * @returns {string} the absolute direction of the tooltip + */ + const getTipLRPosition = tipPosition => { + if ($('body').hasClass('rtl')) { + if (tipPosition === 'start') { + tipPosition = 'right'; + } + else if (tipPosition === 'end') { + tipPosition = 'left'; + } + } + else if (tipPosition === 'start') { + tipPosition = 'left'; + } + else if (tipPosition === 'end') { + tipPosition = 'right'; + } + + return tipPosition; + }; + + $(document.body).rebind('mouseenter.simpletip', '.simpletip', function() { + var $this = $(this); + if ($currentNode) { + unmount(); + } + + if ($this.is('.deactivated') || $this.parent().is('.deactivated')) { + return false; + } + + var contents = $this.hasClass('simpletip-tc') ? $this.text() : $this.attr('data-simpletip'); + if (contents) { + const $node = $template.clone(); + const $textContainer = $('span', $node); + $textContainer.safeHTML(sanitize(contents)); + // Handle the tooltip's text content updates based on the current control state, + // e.g. "Mute" -> "Unmute" + $this.rebind(SIMPLETIP_UPDATED_EVENT, () => { + $textContainer.safeHTML( + sanitize($this.attr('data-simpletip')) + ); + }); + $this.rebind(SIMPLETIP_CLOSE_EVENT, () => { + unmount(); + }); + $('body').append($node); + + $currentNode = $node; + $currentTriggerer = $this; + let wrapper = $this.attr('data-simpletipwrapper') || ''; + if (wrapper) { + wrapper += ","; + } + + const customClass = $this.attr('data-simpletip-class'); + if (customClass) { + $currentNode.addClass(customClass); + } + + /* + * There are four main positions of the tooltip: + * A) The default position is below the hovered el and horizontally centered. + * The tooltip may be flipped vertically or moved along the horizontal axis + * if there is not enough space in container + * B) "top" data-simpletipposition value places the tooltip above the hovered el. + * The tooltip may be flipped vertically back or moved along the horizontal axis + * if there is not enough space in container + * C) "left" data-simpletipposition value places the tooltip to the left of the target. + * The tooltip is centered vertically and may be flipped horizontally + * if there is not enough space in container + * D) "right" data-simpletipposition value places the tooltip to the right of the target. + * The tooltip is centered vertically and may be flipped horizontally + * if there is not enough space in container + */ + + /* Default bottom position (case A) */ + let my = 'center top'; + let at = 'center bottom'; + let arrowRotation = 180; + const tipPosition = getTipLRPosition($this.attr('data-simpletipposition')); + + switch (tipPosition) { + /* Top position (case B) */ + case 'top': + my = 'center bottom'; + at = 'center top'; + break; + /* Top position (case C) */ + case 'left': + my = 'right center'; + at = 'left center'; + break; + /* Top position (case D) */ + case 'right': + my = 'left center'; + at = 'right center'; + break; + } + + $node.position({ + of: $this, + my: my, + at: at, + collision: 'flipfit', + within: $this.parents(wrapper ? `${wrapper} body` : '.ps, body').first(), + using: function(obj, info) { + + /* + * Defines the positions on the tooltip Arrow and target. + * Delault position on the tooltip Arrow is left top. + * Delault position on the target is right bottom. + * We don't use centering to avoid special conditions after flipping. + */ + let myH = 'left'; + let myV = 'top'; + let atH = 'right'; + let atV = 'bottom'; + + /* + * The condition when tooltip is placed to the left of the target (case C), + * For condition C to be met, the tooltip must be vertically centered. + * Otherwise, it will mean that we have case A or B, and the tooltip + * just moves along the horizontal ("arrowRotation" val will be changed then). + * The position on the arrow is right and the position on target is left. + */ + if (info.horizontal === 'right') { + myH = 'right'; + atH = 'left'; + arrowRotation = 270; + } + // Case D, or case A or B, and the tooltip just moves along the horizontal. + else if (info.horizontal === 'left') { + myH = 'left'; + atH = 'right'; + arrowRotation = 90; + } + + // Case A, tooltip is placed below the target. "arrowRotation" value is replaced. + if (info.vertical === 'top') { + myV = 'top'; + atV = 'bottom'; + arrowRotation = 180; + } + // Case B, tooltip is placed above the target. "arrowRotation" value is replaced. + else if (info.vertical === 'bottom') { + myV = 'bottom'; + atV = 'top'; + arrowRotation = 0; + } + // Case C or D, tooltip is placed to the left/right and vertically centered. + else { + myV = 'center'; + atV = 'center'; + } + + // Set new positions on the tooltip Arrow and target. + my = myH + ' ' + myV; + at = atH + ' ' + atV; + + this.classList.add('visible'); + + const { leftOffset, topOffset} = calculateOffset(info, $this); + + $(this).css({ + left: `${obj.left + leftOffset}px`, + top: `${obj.top + topOffset}px` + }); + } + }); + + // Calculate Arrow position + var $tooltipArrow = $('.tooltip-arrow', $node); + + $tooltipArrow.position({ + of: $this, + my: my, + at: at, + collision: 'none', + using: function(obj, info) { + let { top, left } = obj; + + /* + * If Case A or B (ie tooltip is placed to the top/bottom), then + * we need to take into account the horizontal centering of the arrow + * in relation to the target, depending on the width of the arrow + */ + const horizontalOffset = info.vertical === 'middle' ? 0 : $this[0].offsetWidth / 2; + + // Horizontal positioning of the arrow in relation to the target + if (info.horizontal === 'left') { + left -= $tooltipArrow[0].offsetWidth / 2 + horizontalOffset; + } + else if (info.horizontal === 'right') { + left += $tooltipArrow[0].offsetWidth / 2 + horizontalOffset; + } + + // Vertical positioning of the arrow in relation to the target + if (info.vertical === 'bottom') { + top += $tooltipArrow[0].offsetHeight / 2; + } + else if (info.vertical === 'top') { + top -= $tooltipArrow[0].offsetHeight / 2; + } + + // Add special offset if set in options + const { leftOffset, topOffset} = calculateOffset(info, $this); + + $(this).css({ + left: `${left + leftOffset}px`, + top: `${top + topOffset}px`, + transform: `rotate(${arrowRotation}deg)` + }); + } + }); + } + }); + + $(document.body).rebind('mouseover.simpletip touchmove.simpletip', function(e) { + if ($currentNode && !e.target.classList.contains('simpletip') + && !$(e.target).closest('.simpletip, .simpletip-tooltip').length > 0 + && !e.target.classList.contains('tooltip-arrow') + && !e.target.classList.contains('simpletip-tooltip') + && !$currentTriggerer.hasClass('manual-tip')) { + unmount(); + } + }); +})(jQuery); + +/** + * Handle all logic for rendering for users' avatar + */ +var useravatar = (function() { + + 'use strict'; + + var _colors = [ + "#55D2F0", + "#BC2086", + "#FFD200", + "#5FDB00", + "#00BDB2", + "#FFA700", + "#E4269B", + "#FF626C", + "#FF8989", + "#9AEAFF", + "#00D5E2", + "#FFEB00" + ]; + + var logger = MegaLogger.getLogger('useravatar'); + + /** + * List of TWO-letters avatars that we ever generated. It's useful to replace + * the moment we discover the real avatar associate with that avatar + */ + var _watching = {}; + + /** + * Public methods + */ + var ns = {}; + + /** + * Return a SVG image representing the Letter avatar + * @param {Object} user The user object or email + * @returns {String} + * @private + */ + function _getAvatarSVGDataURI(user) { + + var s = _getAvatarProperties(user); + var $template = $('#avatar-svg').clone().removeClass('hidden') + .find('svg').addClass('color' + s.colorIndex).end() + .find('text').text(s.letters).end(); + + $template = window.btoa(to8($template.html())); + + return 'data:image/svg+xml;base64,' + $template; + } + + /** + * Return two letters and the color for a given string. + * @param {Object|String} user The user object or email + * @returns {Object} + * @private + */ + function _getAvatarProperties(user) { + user = String(user.u || user); + var name = M.getNameByHandle(user) || user; + if (name === user && M.suba[user] && M.suba[user].firstname) { + // Acquire the avatar matches the first letter for pending accounts in business account + name = from8(base64urldecode(M.suba[user].firstname)).trim(); + } + var color = UH64(user).mod(_colors.length); + + if (color === false) { + color = user.charCodeAt(0) % _colors.length; + } + + let ch = name.codePointAt(0); + ch = ch && String.fromCodePoint(ch) || ''; + + return {letters: ch.toUpperCase(), color: _colors[color], colorIndex: color + 1}; + } + + /** + * Return the HTML to represent a two letter avatar. + * + * @param {Object} user The user object or email + * @param {String} className Any extra CSS classes that we want to append to the HTML + * @param {String} element The HTML tag + * @returns {String} Returns the HTML + * @returns {Boolean} Adds addition blured background block + * @private + */ + function _getAvatarContent(user, className, element, bg) { + var id = user.u || user; + var bgBlock = ''; + + if (element === 'ximg') { + return _getAvatarSVGDataURI(user); + } + + var s = _getAvatarProperties(user); + + if (!_watching[id]) { + _watching[id] = {}; + } + + if (bg) { + bgBlock = '
          ' + + '
          '; + } + + _watching[id][className] = true; + + id = escapeHTML(id); + element = escapeHTML(element); + + if (className && className !== '') { + className = 'avatar-wrapper ' + escapeHTML(className); + } + else { + className = 'avatar-wrapper small-rounded-avatar'; + } + + return bgBlock + + '<' + element + ' data-color="color' + s.colorIndex + '" class="' + + id + ' color' + s.colorIndex + ' ' + className + '">' + + '
          ' + + s.letters + ''; + } + + /** + * Return an image HTML from an URL. + * + * @param {String} url The image URL + * @param {String} id The ID associated with the avatar (uid) + * @param {String} className Any extra CSS classes that we want to append to the HTML + * @param {String} type The HTML tag type + * @returns {String} The image HTML + * @returns {Boolean} Adds addition blured background block + * @private + */ + function _getAvatarImageContent(url, id, className, type, bg) { + var bgBlock = ''; + id = escapeHTML(id); + url = escapeHTML(url); + type = escapeHTML(type); + + if (className && className !== '') { + className = 'avatar-wrapper ' + escapeHTML(className); + } + else { + className = 'avatar-wrapper small-rounded-avatar'; + } + + if (bg) { + bgBlock = '
          ' + + '' + + '
          '; + } + + return bgBlock + + '<' + type + ' data-color="" class="' + id + ' ' + className + '">' + + '
          ' + + '' + + ''; + } + + /** + * Check if the current user is verified by the current user. It + * is asynchronous and waits for `u_authring.Ed25519` is ready. + * @param {String} userHandle The user handle + * @private + */ + var pendingVerifyQuery = {}; + function isUserVerified(userHandle) { + if (u_type !== 3 || userHandle === u_handle || pendingVerifyQuery[userHandle]) { + return; + } + pendingVerifyQuery[userHandle] = Date.now(); + + if (d > 1) { + logger.log('isUserVerified', userHandle); + } + + authring.onAuthringReady('avatar-v').then(function isUserVerified_Callback() { + var ed25519 = u_authring.Ed25519; + var verifyState = ed25519 && ed25519[userHandle] || {}; + var isVerified = (verifyState.method >= authring.AUTHENTICATION_METHOD.FINGERPRINT_COMPARISON); + + if (isVerified) { + $('.avatar-wrapper.' + userHandle.replace(/[^\w-]/g, '')).addClass('verified'); + } + }).finally(() => { + delete pendingVerifyQuery[userHandle]; + }); + } + + /** + * Like the `contact` method but instead of returning a + * div with the avatar inside it returns an image URL. + * @param {String} contact The contact's user handle + * @returns {String} The HTML to be rendered + */ + ns.imgUrl = function(contact) { + + if (avatars[contact]) { + return avatars[contact].url; + } + + return ns.contact(contact, '', 'ximg'); + }; + + /** + * Return the current user's avatar in image URL. + */ + ns.mine = function() { + + if (!u_handle) { + /* No user */ + return ''; + } + + try { + return ns.imgUrl(u_handle); + } + catch (ex) { + logger.error(ex); + return ''; + } + }; + + /** + * A new contact has been loaded, let's see if they have any two-letters avatars, if + * that is the case we replace that old avatar *everywhere* with their proper avatar. + * @param {String} user The user handle + */ + ns.loaded = function(user) { + + if (typeof user !== "string") { + logger.warn('Invalid user-handle provided!', user); + return false; + } + if (d > 1) { + logger.debug('Processing loaded user-avatar', user); + } + + if (user === u_handle) { + var myavatar = ns.mine(); + + $('.fm-avatar img,.fm-account-avatar img, .top-menu-popup .avatar-block img', 'body') + .attr('src', myavatar); + $('.fm-account-avatar .avatar-bg span').css('background-image', 'url(' + myavatar + ')'); + $('.fm-avatar').show(); + + // we recreate the top-menu on each navigation, so... + ns.my = myavatar; + } + + if (M.u[user]) { + // .trackDataChange() will trigger some parts in the Chat UI to re-render. + M.u[user].trackDataChange(M.u[user], "avatar"); + } + + var $avatar = null; + var updateAvatar = function() { + if ($avatar === null) { + // only do a $(....) call IF .updateAvatar is called. + $avatar = $(ns.contact(user)); + } + + var $this = $(this); + if (this.classList.contains("chat-avatar")) { + // don't touch chat avatars. they update on their own. + return; + } + + $this.removeClass($this.data('color')) + .addClass($avatar.data('color')) + .data('color', $avatar.data('color')) + .safeHTML($avatar.html()); + }; + + $('.avatar-wrapper.' + user.replace(/[^\w-]/g, '') + ':not(.in-chat)').each(updateAvatar); + + if ((M.u[user] || {}).m) { + var eem = String(M.u[user].m).replace(/[^\w@.,+-]/g, '').replace(/\W/g, '\\$&'); + $('.avatar-wrapper.' + eem).each(updateAvatar); + } + }; + + ns.generateContactAvatarMeta = function(user) { + user = M.getUser(user) || String(user); + + if (user.avatar) { + return user.avatar; + } + + if (user.u) { + isUserVerified(user.u); + + if (avatars[user.u]) { + user.avatar = { + 'type': 'image', + 'avatar': avatars[user.u].url + }; + } + else { + user.avatar = { + 'type': 'text', + 'avatar': _getAvatarProperties(user) + }; + } + + return user.avatar; + } + + return { + 'type': 'text', + 'avatar': _getAvatarProperties(user) + }; + }; + /** + * Returns a contact avatar + * @param {String|Object} user + * @param {String} className + * @param {String} element + * @returns {String} + * @returns {Boolean} Adds addition blured background block + */ + ns.contact = function(user, className, element, bg) { + user = M.getUser(user) || String(user); + + element = element || 'div'; + className = className || 'small-rounded-avatar'; + + if (user.u) { + isUserVerified(user.u); + } + + if (avatars[user.u]) { + return _getAvatarImageContent(avatars[user.u].url, user.u, className, element, bg); + } + + return _getAvatarContent(user, className, element, bg); + }; + + // Generic logic to retrieve and process user-avatars + // from either server-side or local-cache + (function loadAvatarStub(ns) { + // hold pending promises waiting for avatar data + var pendingGetters = {}; + // hold user-avatar handle who failed to retrieve + var missingAvatars = {}; + + /** + * Load the avatar associated with an user handle + * @param {String} handle The user handle + * @param {String} chathandle The chat handle + * @return {MegaPromise} + */ + ns.loadAvatar = function(handle, chathandle) { + // Ensure this is a sane call... + if (typeof handle !== 'string' || handle.length !== 11) { + logger.error('Unable to retrieve user-avatar, invalid handle!', handle); + return MegaPromise.reject(EARGS); + } + if (missingAvatars[handle]) { + // If the retrieval already failed for the current session + if (d > 1) { + logger.warn('User-avatar retrieval for "%s" had failed...', handle, missingAvatars[handle]); + } + return MegaPromise.reject(missingAvatars[handle]); + } + if (pendingGetters[handle]) { + // It's already pending, return associated promise + if (d > 1) { + logger.warn('User-avatar retrieval for "%s" already pending...', handle); + } + return pendingGetters[handle]; + } + if (avatars[handle]) { + if (d > 1) { + logger.warn('User-avatar for "%s" is already loaded...', handle, avatars[handle]); + } + return MegaPromise.resolve(EEXIST); + } + + var promise = new MegaPromise(); + pendingGetters[handle] = promise; + + var reject = function(error) { + if (d > 1) { + logger.warn('User-avatar retrieval for "%s" failed...', handle, error); + } + + missingAvatars[handle] = error; + promise.reject.apply(promise, arguments); + }; + + if (d > 1) { + logger.debug('Initiating user-avatar retrieval for "%s"...', handle); + } + + mega.attr.get(handle, 'a', true, false, undefined, undefined, chathandle) + .fail(reject) + .done(function(res) { + var error = res; + + if (typeof res !== 'number' && res.length > 5) { + try { + var ab = base64_to_ab(res); + ns.setUserAvatar(handle, ab); + + if (d > 1) { + logger.info('User-avatar retrieval for "%s" successful.', handle, ab, avatars[handle]); + } + + return promise.resolve(); + } + catch (ex) { + error = ex; + } + } + + reject(error); + }) + .always(function() { + delete pendingGetters[handle]; + ns.loaded(handle); + }); + + return promise; + }; + + /** + * Set user-avatar based on its handle + * @param {String} handle The user handle + * @param {String} ab ArrayBuffer with the avatar data + * @param {String} mime mime-type (optional) + */ + ns.setUserAvatar = function(handle, ab, mime) { + // deal with typedarrays + ab = ab.buffer || ab; + + if (ab instanceof ArrayBuffer) { + // check if overwritting and cleanup + if (avatars[handle]) { + try { + myURL.revokeObjectURL(avatars[handle].url); + } + catch (ex) { + logger.warn(ex); + } + } + + var blob = new Blob([ab], {type: mime || 'image/jpeg'}); + + avatars[handle] = { + data: blob, + url: myURL.createObjectURL(blob) + }; + if (M.u[handle]) { + M.u[handle].avatar = false; + } + } + else { + logger.warn('setUserAvatar: Provided data is not an ArrayBuffer.', ab); + } + }; + + /** + * Invalidate user-avatar cache, if any + * @param {String} handle The user handle + */ + ns.invalidateAvatar = function(handle) { + if (d > 1) { + logger.debug('Invalidating user-avatar for "%s"...', handle); + } + + if (pendingGetters[handle]) { + // this could indicate an out-of-sync flow, or calling M.avatars() twice... + logger.error('Invalidating user-avatar which is being retrieved!', handle); + } + + avatars[handle] = missingAvatars[handle] = undefined; + + if (M.u[handle]) { + M.u[handle].avatar = false; + } + }; + + if (d) { + ns._pendingGetters = pendingGetters; + ns._missingAvatars = missingAvatars; + } + + })(ns); + + return ns; +})(); + +(function(window) { + 'use strict'; + + /** Our trusted public keys {{{ */ + var signPubKey = { + "__global": [ + "rRHOm8BpMsYsSnSlk1AD2xxm9vKIFd\/tMoKxc35FTXQ=", // Elroy v2 + "WJbsItfJfXhGZlq6D1tz\/Wy\/AVjmvQoK7ZgBSOrrCQE=", // Guy v2 + "nJ0DVETXN6Fgd+nK70bsngaPlbM9zedn14Exh\/fAoyU=", // Shaun v2 + "WpDw5Q4L/7AfEMsGeW79BAheALabCdK3uYNNZB+Bq5o=", // Elroy v3 + "TJi9yWiE3tj15ER3W2kLcV4uVuE2GftUm54XQQLPTGg=", // Guy v3 + "nX9lIbNNyZPnnMr7aFMENHlescfDbp+ZmUIpGTcDp0w=", // Shaun v3 + "c/1i2Cq85V8n1I3tixV4bjLTRn9ZqYqtOVhxavHKoYM=", // Mark v3 + "PuXh6QXVRVVKPPdeLfYgG0VNxG6mUn2XioNCnxHzq1A=" // Harry v3 + ] + }; + /** }}} */ + + var CMS = {scope: ''}; + var IMAGE_PLACEHOLDER = staticpath + "/images/img_loader@2x.png"; + var isReady = true; + + if (!is_litesite) { + isReady = false; + mBroadcaster.once('startMega', function() { + for (var sub in signPubKey) { + if (!signPubKey.hasOwnProperty(sub)) { + continue; + } + for (var l = 0; l < signPubKey[sub].length; ++l) { + signPubKey[sub][l] = asmCrypto.base64_to_bytes(signPubKey[sub][l]); + } + } + isReady = true; + }); + } + + var cmsRetries = 1; // how many times to we keep retyring to ping the CMS before using the snapshot? + var fetching = {}; + var cmsBackoff = 0; + var cmsFailures = 0; + // Internal cache, to avoid asking to the CMS + // server the same object _unless_ they have + // changed. + var cmsCache = {}; + + /** + * Wrap any callback, caching it's result + * to improve response time in the CMS. + * It also listen for changes in the object, + * thus invalidating the cache entry. + * + * @param {String} id Object ID + * @param {Function} next Callback to wrap + * @returns {Function} New callback function + */ + function cacheCallback(id, next) { + return function(err, content) { + CMS.watch(id, function() { + // invalidate teh cache + delete cmsCache[id]; + }); + cmsCache[id] = [err, content]; + next(err, content); + }; + } + + function readLength(bytes, i) { + var viewer = new DataView(bytes.slice(i, i + 4)); + return viewer.getUint32(0); + } + + function parse_pack(bytes) { + var type; + var nameLen; + var name; + var content; + var binary = new Uint8Array(bytes); + var hash = {}; + + for (var i = 0; i < bytes.byteLength;) { + var size = readLength(bytes, i); + i += 4; /* 4 bytes */ + + type = binary[i++]; + nameLen = binary[i++]; + name = CMS.escape(ab_to_str(bytes.slice(i, nameLen + i))); + + i += nameLen; + + content = bytes.slice(i, i + size); + + switch (type) { + case 3: + hash[name] = {html: CMS.parse(content, false), mime: type}; + break; + + case 2: + try { + hash[name] = { object: JSON.parse(ab_to_str(content)), mime: type }; + } catch (err) { + /* invalid json, weird case */ + hash[name] = { object: {}, mime: type }; + } + break; + } + + i += size; + } + + return hash; + } + + function verify_cms_content(content, signature, objectId) { + if (is_litesite) { + return true; + } + var hash = asmCrypto.SHA256.bytes(content); + signature = asmCrypto.string_to_bytes(ab_to_str(signature)); + var i; + + try { + for (i = 0; i < signPubKey.__global.length; ++i) { + if (nacl.sign.detached.verify(hash, signature, signPubKey.__global[i])) { + /* It's a valid signature */ + return true; + } + } + + if (signPubKey[objectId]) { + for (i = 0; i < signPubKey[objectId].length; ++i) { + if (nacl.sign.detached.verify(hash, signature, signPubKey[objectId][i])) { + /* It's a valid signature */ + return true; + } + } + } + + + } catch (e) { + /* rubbish data, invalid anyways */ + return false; + } + + /* Invalid signature */ + return false; + } + + + function parse_cms_content(content, imgLoad) { + if (content && typeof content !== 'string') { + content = ab_to_str(content); + } + + return String(content) + .replace(/\s+/g, ' ') + .replace( + /((?:{|%7B)cmspath(?:%7D|}))\/(unsigned\/)?([\dA-Za-z]+)/g, + function(matches, cmspath, unsigned, filename) { + return imgLoad === false ? filename : CMS.img(filename); + }) + .replace(/]+>/g, function(m) { + if (m.indexOf('href="') > 0) { + m = m.replace(/"/g, '"'); + } + if (/href=["']\w+:/.test(m)) { + m = m.replace('>', ' target="_blank" rel="noopener noreferrer">'); + } + if (/href=["'][#/]/.test(m)) { + m = m.replace('>', ' class="clickurl">'); + } + return m; + }); + } + + function process_cms_response(bytes, next, as, id) { + var viewer = new Uint8Array(bytes); + + if (!isReady) { + return setTimeout(function() { + process_cms_response(bytes, next, as, id); + }, 100); + } + + var signature = bytes.slice(3, 67); // 64 bytes, signature + var mime = viewer[1]; + var label = ab_to_str(bytes.slice(67, viewer[2] + 67)); + var content = bytes.slice(viewer[2] + 67); + + if (as === "download") { + mime = 0; + } + + if (verify_cms_content(content, signature, id)) { + switch (mime) { + case 3: // html + next(false, {html: CMS.parse(content), mime: mime}); + return loaded(id); + + case 1: + var blob = new Blob([content]); + content = window.URL.createObjectURL(blob); + next(false, { url: content, mime: mime}); + return loaded(id); + + case 2: + try { + content = JSON.parse(ab_to_str(content)); + } catch (e) { + /* invalid json, weird case */ + return next(true, {signature: false}); + } + next(false, { object: content, mime: mime}); + return loaded(id); + + case 5: + next(false, parse_pack(content)); + break; + + default: + var io = new MemoryIO("temp", {}); + io.begin = function() {}; + io.setCredentials("", content.byteLength, "", [], []); + io.write(content, 0, function() { + io.download(label, ""); + next(false, {}); + return loaded(id); + }); + break; + } + } else { + next(true, { error: 'Invalid signature', signature: true }); + } + } + + var assets = {}; + var booting = false; + + var is_img; + + /** + * Steps + * + * Call many things in parallel, buffer the results + * and give it back once everything is ready + * + * @param {Number} times + * @param {Function} next * + * @return {Function} + */ + function steps(times, next) { + var responses = new Array(times + 1); + var done = 0; + function step_done(i, err, arg) { + responses[0] = responses[0] || err; + responses[i + 1] = arg; + if (++done === times) { + next.apply(null, responses); + } + } + + return function(id) { + return step_done.bind(null, parseInt(id)); + }; + } + + /** + * Rewrite links. Basically this links + * shouldn't trigger the `CMS.get` and force + * a download + */ + function dl_placeholder(str, sep, rid, id) { + return "'javascript:void(0)' data-cms-dl='" + id + "'"; + } + + /** + * Images placeholder. Replace *all* the images + * with a placeholder until the image is fully loaded from + * the BLOB server + */ + function img_placeholder(str, sep, rid, id) { + is_img = true; + return "'" + IMAGE_PLACEHOLDER + "' data-img='loading_" + id + "'"; + } + + /** + * Internal function to communicate with the BLOB server. + * + * It makes sure to optimize requests (makes sure we never + * ask things twice). This is the right place to + * cache (perhaps towards localStorage). + */ + function doRequest(id) { + if (!id) { + throw new Error("Calling CMS.doRequest without an ID"); + } + id = CMS.escape(id); + + if (typeof CMS_Cache === "object" && CMS_Cache[id]) { + for (var i in fetching[id]) { + if (fetching[id].hasOwnProperty(i)) { + fetching[id][i][0](null, CMS_Cache[id]); // callback + } + } + delete fetching[id]; + return; + } + + var q = getxhr(); + q.onerror = function() { + cmsBackoff = Math.min(cmsBackoff + 2000, 60000); + if (++cmsFailures === cmsRetries) { + return loadSnapshot(); + } + setTimeout(function() { + doRequest(id); + }, cmsBackoff); + }; + q.onload = function() { + for (var i in fetching[id]) { + if (fetching[id].hasOwnProperty(i)) { + process_cms_response(q.response, fetching[id][i][0], fetching[id][i][1], id); + } + } + delete fetching[id]; + cmsBackoff = 0; /* reset backoff */ + }; + var url = cmsStaticPath + CMS.scope + '/' + id; + q.open("GET", `${url}?v=${Math.floor(Date.now() / 36e5)}`); + q.responseType = 'arraybuffer'; + q.send(); + } + + var _listeners = {}; + + function snapshot_ready() { + for (var id in fetching) { + if (fetching.hasOwnProperty(id)) { + doRequest(id); + } + } + } + + function loadSnapshot() { + if (!jsl_loaded['cms_snapshot_js']) { + M.require('cms_snapshot_js').done(snapshot_ready); + } + } + + function loaded(id) { + if (_listeners[id]) { + for (var i in _listeners[id]) { + if (_listeners[id].hasOwnProperty(i)) { + _listeners[id][i](); + } + } + } + CMS.attachEvents(); + } + + var curType; + var curCallback; + var reRendered = {}; + + Object.assign(CMS, { + watch: function(type, callback) { + curType = type; + curCallback = callback; + }, + + getAndWatch: function(type, callback) { + this.get(type, callback); + this.watch(type, function() { + this.get(type, callback); + }); + }, + + reRender: function(type, nodeId) + { + if (type === curType && !reRendered[nodeId]) { + reRendered[nodeId] = true; + curCallback(nodeId); + } + }, + + escape: function(content, mode) { + mode = mode || 'strict'; + content = String(content || ''); + + if (mode === 'html') { + content = escapeHTML(content); + } + else if (mode === 'strict') { + content = content.replace(/[^\w.-]/g, ''); + } + else if (mode === 'regex') { + content = content.replace(/\W/g, "\\$&"); + } + else { + content = parseFloat(content) || ''; + } + return String(content || "\u26A0"); + }, + + parse: function(content, imgLoad) { + // @todo unify both functions once this file is properly refactored + return parse_cms_content(content, imgLoad); + }, + + isLoading: function() { + return Object.keys(fetching).length > 0; + }, + + attachEvents: function() { + $('*[data-cms-dl],.cms-asset-download').rebind('click', function(e) { + var $this = $(this); + var target = $this.data('id') || $this.data('cms-dl'); + if (!target) { + return; + } + + e.preventDefault(); + + loadingDialog.show(); + CMS.get(target, function() { + loadingDialog.hide(); + }, false, 'download'); + + return false; + }); + }, + + loaded: loaded, + + img: function(id) { + id = CMS.escape(id); + var imgPlaceHolder = IMAGE_PLACEHOLDER + "#" + id; + if (!assets[id]) { + this.get(id, function(err, obj) { + var url = CMS.escape(obj.url, 'html'); + if (url && !err) { + $('*[data-img=loading_' + id + '], *[src="' + imgPlaceHolder + '"]') + .attr({'id': '', 'src': url}); + } + assets[id] = url; + }); + } + return CMS.escape(assets[id] || imgPlaceHolder, 'html'); + }, + + index: function(index, callback) { + CMS.get(index, function(err, data) { + if (err) { + return callback(err); + } + + CMS.get(data.object, function(err) { + if (err) { + return callback(err); + } + + var hash = {}; + var args = Array.prototype.slice.call(arguments); + + args.shift(); + + args.map(function(index) { + for (var name in index) { + if (index.hasOwnProperty(name)) { + hash[name] = index[name]; + } + } + }); + + callback(err, hash); + }); + }); + }, + + get: function(id, next, cache, as) { + if (d > 1) { + console.debug('CMS.get(%s)', id, [id]); + } + if (Array.isArray(id)) { + var step = steps(id.length, next); + for (var i = 0; i < id.length; ++i) { + this.get(id[i], step(i), cache, as); + } + return; + } + var isNew = false; + next = next || function() {}; + id = CMS.escape(id); + + if (cache) { + next = cacheCallback(id, next); + if (cmsCache[id]) { + return next(cmsCache[id][0], cmsCache[id][1]); + } + } + + if (typeof fetching[id] === "undefined") { + isNew = true; + fetching[id] = []; + } + + fetching[id].push([next, as]); + if (isNew) { + doRequest(id); + } + }, + + on: function(id, callback) + { + if (!_listeners[id]) { + _listeners[id] = []; + } + _listeners[id].push(callback); + }, + + imgLoader: function(html, id) { + if (!assets[id]) { + is_img = false; + // replace images + html = html.replace(new RegExp('([\'"])(i:(' + id + '))([\'"])', 'g'), img_placeholder); + // replace download links + html = html.replace(new RegExp('([\'"])(d:(' + id + '))([\'"])', 'g'), dl_placeholder); + + if (is_img) { + this.get(id); + } + } else { + html = html.replace(IMAGE_PLACEHOLDER + "' data-img='loading_" + id, assets[id], 'g'); + } + return html; + }, + + fillStats: function($page, muser, dactive, bfiles, mcountries) { + // Locale of million and biliion will comes -> should be localised now + $('.register-count .num span', $page).text(muser); + $('.daily-active .num span', $page).text(dactive); + $('.files-count .num span', $page).text(bfiles); + $('.mega-countries .num span', $page).text(mcountries); + }, + + dynamicStatsCount: function($page) { + if (this.statsCache && new Date() - this.statsCache.statsTime < 36e5) { + this.fillStats( + $page, + this.statsCache.muser, + this.statsCache.dactive, + this.statsCache.bfiles, + this.statsCache.mcountries + ); + } + else { + loadingDialog.show(); + + api_req({a: "dailystats"}, { + callback: function(res) { + + loadingDialog.hide(); + + var muser = 175; + var dactive = 10; + var bfiles = 75; + var mcountries = 200; + + if (typeof res === 'object') { + muser = res.confirmedusers.total / 1000000 | 0; + bfiles = res.files.total / 1000000000 | 0; + } + + CMS.fillStats($page, muser, dactive, bfiles, mcountries); + CMS.statsCache = { + muser: muser, + dactive: dactive, + bfiles: bfiles, + mcountries: mcountries, + statsTime: new Date() + }; + } + }); + } + } + }); + + /* Make it public */ + Object.defineProperty(window, 'CMS', {value: CMS}); +})(this); + +var achieve_data = false; + +function init_start() { + "use strict"; + + var carouselInterval; + var sliderInterval; + var swipeInterval = 5000; + var intl = mega.intl.number; + var dropboxPrice = 4.9; + var megaPrice = 1.56; + var gdrivePrice = 4.9; + var $page = $('.bottom-page.scroll-block.startpage', '.fmholder'); + + if (u_type > 0) { + $('.startpage.register:not(.business-reg)', $page).text(l[164]); + $('.mid-green-link.register-lnk.fm, .startpage.register', $page).attr('href', '/fm'); + $('.mid-green-link.register-lnk.chat', $page).attr('href', '/fm/chat'); + + if (is_mobile) { + $('.startpage.account', $page).attr('href', '/fm/account'); + } + else { + $('.startpage.account', $page).attr('href', '/fm/dashboard'); + } + if (u_type === 3) { + $('.business-reg', $page).addClass('hidden').attr('href', ''); + } + } + else { + $('.mid-green-link.register-lnk, .startpage.register', $page).attr('href', '/register'); + $('.business-reg', $page).removeClass('hidden').attr('href', '/registerb'); + } + + $('.bottom-menu.body .logo', '.fmholder').rebind('click.clickurl', function(e) { + var $scrollableBlock; + + e.preventDefault(); + + if (page === 'start') { + $scrollableBlock = is_mobile ? $(window) : $('.fmholder', 'body'); + $scrollableBlock.animate({ scrollTop: 0 }, 1600); + } + else { + loadSubPage('start'); + } + }); + + // if (mega.flags.refpr) { + // var slidingTimer; + + // var doSlide = function() { + // // eslint-disable-next-line no-unused-expressions + // slidingTimer && clearTimeout(slidingTimer); + // var $banners = $('.bottom-page.top-banner', $page); + + // if ($banners.filter('.active').hasClass('banner1')) { + // $banners.removeClass('active'); + // $banners.filter('.banner2').addClass('active'); + // $page.addClass('white-pages-menu'); + // } + // else { + // $banners.removeClass('active'); + // $banners.filter('.banner1').addClass('active'); + // $page.removeClass('white-pages-menu'); + // } + // slidingTimer = setTimeout(doSlide, 10000); + // }; + // slidingTimer = setTimeout(doSlide, 10000); + // // Top banner controls init + // $('.bottom-page.banner-control', $page).removeClass('hidden').rebind('click.top-banner', doSlide); + // $('.mid-green-link.refer', $page).removeClass('hidden'); + // } + + $('.dropbox span', $page).text(formatCurrency(dropboxPrice)); + + $('.mega span', $page).text(formatCurrency(megaPrice)); + + $('.gdrive span', $page).text(formatCurrency(gdrivePrice)); + + /** + * detectSwipe + * + * @param {Object} $el DOM swipable area. + * @param {Object} $slides DOM slides selector. + * @param {Function} func Function which will be called after swipe is detected + */ + function detectSwipe($el, $slides, func) { + var swipeStartX = 0; + var swipeEndX = 0; + var swipeStartY = 0; + var swipeEndY = 0; + var minX = 50; + var direc = ''; + + $el.on('touchstart', function(e) { + var t = e.touches[0]; + + swipeStartX = t.screenX; + swipeStartY = t.screenY; + }); + + $el.on('touchmove', function(e) { + + var t = e.touches[0]; + swipeEndX = t.screenX; + swipeEndY = t.screenY; + }); + + $el.on('touchend', function(e) { + if ((swipeEndX + minX < swipeStartX && swipeEndX !== 0)) { + direc = 'next'; + } + else if (swipeEndX - minX > swipeStartX) { + direc = 'prev'; + } + + if (direc !== '' && typeof func === 'function') { + func($slides, direc); + } + + direc = ''; + swipeStartX = 0; + swipeEndX = 0; + }); + } + + /** + * carouselSwitch + * + * @param {Object} $slides DOM slides selector. + * @param {String} direction Sets what Reviews Carousel slide should be shown. Expected values: 'next' or 'prev'. + */ + function carouselSwitch($slides, direction) { + var $currentSlide = $slides.filter('.current'); + var currentSlide; + var slideNum; + var nextSlide; + var prevSlide; + + $currentSlide = $currentSlide.length ? $currentSlide : $currentSlide.last(); + currentSlide = parseInt($currentSlide.attr('data-sl')); + slideNum = $slides.length; + + if (direction === 'next') { + currentSlide = currentSlide + 1 <= slideNum ? currentSlide + 1 : 1; + } + else { + currentSlide = currentSlide - 1 >= 1 ? currentSlide - 1 : slideNum; + } + + nextSlide = currentSlide + 1 <= slideNum ? currentSlide + 1 : 1; + prevSlide = currentSlide - 1 >= 1 ? currentSlide - 1 : slideNum; + + $slides.removeClass('current next prev'); + $slides.filter('.slide' + currentSlide).addClass('current'); + $slides.filter('.slide' + prevSlide).addClass('prev'); + $slides.filter('.slide' + nextSlide).addClass('next'); + } + + // Reviews carousel. Controls init + $('.startpage.carousel-control').rebind('click', function () { + if ($(this).hasClass('next')) { + carouselSwitch($('.startpage.carousel-slide', $page), 'next'); + } + else { + carouselSwitch($('.startpage.carousel-slide', $page), 'prev'); + } + }); + + /** + * showSlide + * + * @param {Object} $slides DOM slides selector. + * @param {String} slide Number of next slider slide which should be shown. Can also be "next" or "prev". + * @param {Boolean} autoSlide Inits auto sliding. Optional. + */ + function showSlide($slides, slide, autoSlide) { + var $slidesNavDots = $slides.filter('.nav'); + var slidesNum = $slidesNavDots.length; + var currentSlide = parseInt($slidesNavDots.filter('.active').data('slide')); + + // Init auto slide + clearInterval(sliderInterval); + + // Init auto slide + if (autoSlide) { + sliderInterval = setInterval(function() { + showSlide($slides, 'next', true); + }, swipeInterval); + } + + if (slide === 'next') { + slide = currentSlide + 1 <= slidesNum ? currentSlide + 1 : 1; + } + else if (slide === 'prev') { + slide = currentSlide - 1 >= 1 ? currentSlide - 1 : slidesNum; + } + + $slides.removeClass('active').parent('.software-content').removeClass('expanded'); + $slides.filter('[data-slide="' + slide + '"]') + .addClass('active').parent('.software-content').addClass('expanded'); + } + + /** + * initSlider + * + * Wrapper should have "slidername-wrap" class (e.g ".slider-wrap"). + * Navigation bar should have "slidername-nav" class (e.g ".slider-nav"). + * + * @param {String} sliderClass Slider Classname with dot (e.g ".slider"). All slides should have this class. + * @param {Boolean} autoSlide Enables/disables auto sliding. Optional. + * @param {String} buttonsClass Addition navigtion buttons Classname with dot (e.g ".slider-buttons"). Optional. + */ + function initSlider(sliderClass, autoSlide, buttonsClass) { + var $slider = $(sliderClass + '-wrap', $page); + var $slides = $(sliderClass, $slider); + var $slidesNav = $(sliderClass + '-nav'); + var $slidesNavDots = $('.nav', $slidesNav); + var $buttons = $(buttonsClass); + + // Show first slide + showSlide($slides, 1, autoSlide); + + // Slider controls click even + $slidesNavDots.add($buttons).rebind('click.slider', function() { + var $this = $(this); + var slideNum = $this.data('slide'); + + if (!$this.hasClass('active')) { + showSlide($slides, slideNum, autoSlide); + } + + // Init subslider for desktop (with autosliding) + if ($this.data('subslide') && !is_mobile) { + initSlider('.' + $this.data('subslide'), true); + } + }); + + // Slider Prev/Next buttons + $('.nav-button', $slidesNav).rebind('click.slider', function() { + var $this = $(this); + + if ($this.hasClass('next')) { + showSlide($slides, 'next', autoSlide); + } + else { + showSlide($slides, 'prev', autoSlide); + } + }); + } + + carouselSwitch($('.startpage.carousel-slide', $page), 'next'); + + // Init Software block Slider + initSlider('.soft-slide', false, '.software-header'); + + // Init Mobile events + if (is_mobile) { + detectSwipe($('.startpage.carousel', $page), $('.startpage.carousel-slide', $page), carouselSwitch); + detectSwipe($('.soft-slide-wrap', $page), $('.soft-slide', $page), showSlide); + } + + if (!is_mobile && page === 'start') { + InitFileDrag(); + } + else if (is_mobile && page === 'start') { + if (!mega.ui.contactLinkCardDialog) { + var contactLinkCardHtml = pages['mobile-add-contact-card']; + if (contactLinkCardHtml) { + mega.ui.contactLinkCardDialog = contactLinkCardHtml; + } + } + mobile.initMobileAppButton(); + } + else if (page === 'download') { + $('.widget-block').hide(); + } + startCountRenderData = { + 'users': '', + 'files': '' + }; + + if (is_mobile) { + $(window).add('#startholder').rebind('scroll.counter', function () { + if (page === 'start') { + $.lastScrollTime = Date.now(); + start_counts(); + } + }); + } + else { + $(window).rebind('resize.counter', function () { + $.lastScrollTime = Date.now(); + }); + $('#startholder').rebind('scroll.counter', function () { + if (page === 'start' || page === 'download') { + $.lastScrollTime = Date.now(); + start_counts(); + } + }); + } + + if (getCleanSitePath() === 'mobile') { + setTimeout(function () { + var offset = $(".bottom-page.bott-pad.mobile").offset(); + + if (offset) { + $('#startholder').animate({ + scrollTop: offset.top + }, 800); + } + }, 1000); + } + mBroadcaster.sendMessage('HomeStartPageRendered:mobile'); +} + +var start_countLimit = 0; + +var start_countdata = false; + +function start_counts() { + "use strict"; + + if (start_countdata) { + return; + } + else { + $('.bottom-page.white-block.counter').addClass('hidden'); + } + start_countdata = true; + start_APIcount(); +} + +start_APIcount_inflight = false; +var start_APIcountdata; +var start_countInterval; + +function start_APIcount() { + "use strict"; + + if (start_APIcount_inflight) { + return; + } + start_APIcount_inflight = true; + api_req({ + "a": "dailystats" + }, { + callback: function (res) { + $('.bottom-page.white-block.counter').removeClass('hidden'); + start_APIcountdata = res; + start_APIcountdata.timestamp = Date.now(); + start_APIcount_inflight = false; + if (!start_countUpdate_inflight && (page === 'start' || page === 'download')) { + start_countInterval = setInterval(start_countUpdate, 30); + } + } + }); +} + +start_countUpdate_inflight = false; +startCountRenderData = {}; + +var RandomFactorTimestamp = 0; +var start_Lcd = {}; +var countUpdateInterval = 30; + +function start_countUpdate() { + "use strict"; + + if (!start_countUpdate_inflight) { + startCountRenderData = { + 'users': '', + 'files': '', + 'users_blocks': {}, + 'files_blocks': {}, + }; + } + start_countUpdate_inflight = true; + if (page !== 'start' && page !== 'download') { + start_countdata = false; + start_countUpdate_inflight = false; + clearInterval(start_countInterval); + return false; + } + const now = Date.now(); + const {timestamp, confirmedusers = false, files = false} = Object(start_APIcountdata); + + if (!start_Lcd.users) { + start_Lcd.users = confirmedusers.total; + } + if (!start_Lcd.files) { + start_Lcd.files = files.total; + } + if (!start_Lcd.ts) { + start_Lcd.ts = timestamp; + } + if (!start_Lcd.timestamp) { + start_Lcd.timestamp = timestamp; + } + var filesFactor = 1; + var usersFactor = 1; + + if (start_Lcd.timestamp + 10 < now) { + const rate = (now - start_Lcd.timestamp) / 86400000; + + if (timestamp > start_Lcd.ts + 30000 && timestamp + 30000 > now) { + if (start_Lcd.users > confirmedusers.total) { + usersFactor = 0.3; + } + else if (start_Lcd.users < confirmedusers.total) { + usersFactor = 2; + } + if (start_Lcd.files > files.total) { + filesFactor = 0.3; + } + else if (start_Lcd.files < files.total) { + filesFactor = 2; + } + } + else { + filesFactor = 1; + usersFactor = 1; + } + + if (RandomFactorTimestamp + 500 < now) { + filesFactor *= Math.random() * 0.1 - 0.05; + RandomFactorTimestamp = now; + } + + if (confirmedusers.dailydelta) { + start_Lcd.users += rate * usersFactor * confirmedusers.dailydelta; + } + if (files.dailydelta) { + start_Lcd.files += rate * filesFactor * files.dailydelta; + } + start_Lcd.timestamp = now; + } + + function renderCounts(total, type) { + if (total.length === startCountRenderData[type].length) { + for (var i = 0, len = total.length; i < len; i++) { + if (startCountRenderData[type][i] !== total[i]) { + var elm = startCountRenderData[type + '_blocks'][i]; + if (elm) { + elm.textContent = total[i]; + } + } + } + } + else { + var html = ''; + var $wrapper = $('.startpage.flip-wrapper.' + type); + for (var k = 0, ln = total.length; k < ln; k++) { + html += '
          ' + total[k] + '
          '; + } + $wrapper.safeHTML(html); + startCountRenderData[type + '_blocks'] = $('.flip-bg', $wrapper); + } + startCountRenderData[type] = total; + } + + // do not render the counter while scrolling or resizing, as some browsers have real difficulty with it + // only render the counter every 2000ms if invisible + // only perform the visibility check shortly ater scrolling or resizing, as it's CPU intensive + + if ($.lastScrollTime + 100 < Date.now()) { + if ($.lastScrollTime < Date.now() + 200) { + $.counterVisible = $('.startpage.flip-wrapper.users').visible() + || $('.startpage.flip-wrapper.files').visible() + || $('.bottom-page.big-icon.registered-users').visible(); + } + if ($.counterVisible || !$.lastCounterRender || $.lastCounterRender + 2000 < Date.now()) { + renderCounts(String(Math.round(start_Lcd.users)), 'users'); + renderCounts(String(Math.round(start_Lcd.files)), 'files'); + $.lastCounterRender = Date.now(); + } + } + + if (start_APIcountdata.timestamp + 30000 < Date.now()) { + start_APIcount(); + } +} + +/** + * Bottom pages functionality + */ +var bottompage = { + + /** + * Initialise the page + */ + init: function() { + + "use strict"; + + var $content = $('.bottom-page.scroll-block', '.fmholder'); + + // Unbind sliders events + $(window).unbind('resize.sliderResize'); + + if (page.substr(0, 9) === 'corporate') { + $('body').addClass('old'); + scrollMenu(); + } + else { + $('body').removeClass('old'); + } + + // Init animations + if ($content.hasClass('animated-page')) { + bottompage.initAnimations($content); + } + + // Init Slider for business page + if (page === 'business') { + bottompage.initSlider(); + } + if (u_attr && u_attr.b && u_attr.b.s !== -1) { + $('.bottom-menu.body .resellerlink', $content).addClass('hidden'); + $('.bottom-menu.body .pro-link', $content).addClass('hidden'); + } + else { + $('.bottom-menu.body .resellerlink', $content).removeClass('hidden'); + $('.bottom-menu.body .pro-link', $content).removeClass('hidden'); + } + + // Insert variables with replaced browser names + if (page === 'bird') { + $('.top-bl .bottom-page.top-dark-button.rounded span.label', $content) + .safeHTML(l[20923].replace('%1', 'Thunderbird')); + } + + // Init Video resizing on security page + if (page === 'security' && !is_mobile) { + bottompage.videoResizing(); + + $(window).rebind('resize.security', function (e) { + bottompage.videoResizing(); + }); + } + + if (!is_mobile) { + + // Init floating top menu + bottompage.initFloatingTop(); + + bottompage.initNavButtons($content); + } + else { + bottompage.initMobileNavButtons($content); + } + + const $cs = $('.cookies-settings', $content).off('click.csp').addClass('hidden'); + if ('csp' in window) { + $cs.removeClass('hidden').rebind('click.csp', function() { + if (!this.classList.contains('top-menu-item')) { + csp.trigger().dump('csp.trigger'); + return false; + } + }); + } + else { + // cookie-dialog not available, replace links with text nodes. + document.querySelectorAll('a.cookies-settings').forEach(e => e.replaceWith(e.textContent)); + } + + // Init scroll button + bottompage.initBackToScroll(); + bottompage.initScrollToContent(); + + // Show/hide Referral Program and Pricing menu items for different account types + bottompage.changeMenuItemsList($content); + localeImages($content); + }, + + /** + * Show/hide necessary menu items for different acctount types + */ + changeMenuItemsList: function($content) { + "use strict"; + + var $bottomMenu = $('.bottom-menu.body', $content); + var $pagesMenu = $('.pages-menu.body', $content); + + // Show/Hide Affiliate program link in bottom menu + if (mega.flags.refpr) { + $('a.link.affiliate', $bottomMenu).removeClass('hidden'); + } + else { + $('a.link.affiliate', $bottomMenu).addClass('hidden'); + } + + // Hide Pricing link for current Business or Pro Flexi accounts + if ((u_attr && u_attr.b && u_attr.b.s !== pro.ACCOUNT_STATUS_EXPIRED) || + (u_attr && u_attr.pf && u_attr.pf.s !== pro.ACCOUNT_STATUS_EXPIRED)) { + $('a.link.pro', $bottomMenu).addClass('hidden'); + $('.pages-menu.link.pro', $pagesMenu).addClass('hidden'); + } + else { + $('a.link.pro', $bottomMenu).removeClass('hidden'); + $('.pages-menu.link.pro', $pagesMenu).removeClass('hidden'); + } + + if (u_type && (!mega.flags.ach || Object(window.u_attr).b)) { + // Hide Achievements link for an non-achievement account and business account + $('a.link.achievements', $bottomMenu).addClass('hidden'); + } + else { + $('a.link.achievements', $bottomMenu).removeClass('hidden'); + } + }, + + /** + * Init Animated blocks + * @param {Object} $content The jQuery selector for the current page + * @returns {void} + */ + initAnimations: function($content) { + "use strict"; + + var $scrollableBlock = is_mobile ? $('body.mobile .fmholder') : $('.fmholder', 'body'); + + // Init top-block animations + setTimeout(function() { + $content.addClass('start-animation'); + }, 700); + + var isVisibleBlock = function($row) { + if ($row.length === 0) { + return false; + } + + var $window = $(window); + var elementTop = $row.offset().top; + var elementBottom = elementTop + $row.outerHeight(); + var viewportTop = $window.scrollTop(); + var viewportBottom = viewportTop + $window.outerHeight(); + + return elementBottom - 80 > viewportTop && elementTop < viewportBottom; + }; + + var showAnimated = function($content) { + // add circular-spread here later + var $blocks = $('.animated, .fadein, .circular-spread, .text-focus-contract', $content); + + for (var i = $blocks.length - 1; i >= 0; i--) { + + var $block = $($blocks[i]); + + if (isVisibleBlock($block)) { + if (!$block.hasClass('start-animation')) { + $block.addClass('start-animation'); + } + } + else if ($block.hasClass('start-animation')) { + // dont reset circular spread animation + if ($block.hasClass('circular-spread') || $block.hasClass('text-focus-contract')) { + return; + } + $block.removeClass('start-animation'); + } + } + }; + + showAnimated($content); + + $scrollableBlock.add(window).rebind('scroll.startpage', function() { + var $scrollTop = $('.scroll-to-top', $content); + showAnimated(); + + if (isVisibleBlock($('.bottom-page.light-blue.top, .bottom-page.top-bl', $content))) { + $scrollTop.removeClass('up'); + } + else { + $scrollTop.addClass('up'); + } + }); + + // Init Scroll to Top button event + $('.scroll-to-top:visible', $content).rebind('click.scroll', function() { + + if ($(this).hasClass('up')) { + $scrollableBlock.animate({ + scrollTop: 0 + }, 1600); + } + else { + $scrollableBlock.animate({ + scrollTop: $('.bottom-page.content', $content).outerHeight() + }, 1600); + } + }); + }, + + initBackToScroll: function() { + "use strict"; + + var $body = $('body'); + + $('#startholder').rebind('scroll.bottompage', function() { + sessionStorage.setItem('scrpos' + MurmurHash3(page).toString(16), $(this).scrollTop() | 0); + if (page === 'download') { + $(window).unbind('resize.download-bar'); + } + }); + + window.onpopstate = function() { + + var sessionData = sessionStorage['scrpos' + MurmurHash3(page).toString(16)]; + + if ($body.hasClass('bottom-pages') && sessionData) { + + // Scroll to saved position and reset previous focus + $('#startholder', $body).scrollTop(sessionData).trigger('mouseover'); + + } + }; + }, + + initScrollToContent: function() { + "use strict"; + + // Init Scroll to Content event + $('.bottom-page.scroll-button', '.top-bl').rebind('click.scrolltocontent', function() { + + $('.fmholder, html, body').animate({ + scrollTop: $('.full-block', 'body').position().top + }, 1600); + }); + }, + + initNavButtons: function($content) { + "use strict"; + + var $topMenu = $('.pages-menu.body', $content); + + // No pages menu in DOM + if ($topMenu.length === 0) { + return false; + } + + // Close submenu function + function closePagesSubMenu() { + $('.submenu.active, .submenu-item.active', $topMenu).removeClass('active'); + $(window).unbind('resize.pagesmenu'); + $content.unbind('mousedown.closepmenu'); + } + + // Close previously opened sub menu + closePagesSubMenu(); + + // Open submenu + $('.submenu-item', $topMenu).rebind('click.openpmenu', function() { + var $this = $(this); + var $submenu = $this.next('.submenu'); + + if ($this.is('.active')) { + closePagesSubMenu(); + + return false; + } + + function subMenuPos() { + var $this = $('.submenu-item.active', $topMenu); + var $submenu = $this.next('.submenu'); + + $submenu.position({ + of: $this, + my: "center top", + at: "center bottom", + collision: "fit" + }); + } + + closePagesSubMenu(); + $this.addClass('active'); + $submenu.addClass('active'); + subMenuPos(); + + $(window).rebind('resize.pagesmenu', function() { + subMenuPos(); + }); + + // Close pages submenu by click outside of submenu + $content.rebind('mousedown.closepmenu', function(e) { + var $target = $(e.target); + + if (!$target.is('.submenu.active') && !$target.closest('.submenu-item.active').length + && !$target.closest('.submenu.active').length) { + closePagesSubMenu(); + } + }); + }); + }, + + initMobileNavButtons: function($content) { + "use strict"; + + var $overlay = $('.nav-overlay', 'body'); + var $header = $('.fm-header', $content); + var $topMenu = $('.pages-menu.body', $content); + var $menuDropdown; + + $overlay.addClass('hidden'); + + // No pages menu in DOM + if ($topMenu.length === 0) { + $header.unbind('click.closepmenu'); + + return false; + } + + $menuDropdown = $('.mobile.pages-menu-dropdown', $content); + + // Close pages menu function + function closePagesMenu() { + $overlay.addClass('hidden'); + $('html').removeClass('overlayed'); + $topMenu.removeClass('active'); + $menuDropdown.removeClass('active'); + $overlay.unbind('click.closepmenu'); + $header.unbind('click.closepmenu'); + } + + // Close previously opened menu + closePagesMenu(); + + // Open menu + $menuDropdown.rebind('click.openpmenu', function() { + var $this = $(this); + + if ($this.is('.active')) { + closePagesMenu(); + + return false; + } + + $overlay.removeClass('hidden'); + $('html').addClass('overlayed'); + $this.addClass('active'); + $topMenu.addClass('active'); + + // Close previously opened menu by click on overlay or menu icon + $overlay.add($header).rebind('click.closepmenu', function(e) { + if ($(e.target).closest('.pages-menu-dropdown').length === 0) { + closePagesMenu(); + } + }); + }); + + // Expand submenu + $('.submenu-item', $topMenu).rebind('click.opensubmenu', function() { + var $this = $(this); + var $submenu = $this.next('.submenu'); + + if ($this.is('.active')) { + $this.removeClass('active'); + $submenu.removeClass('active'); + } + else { + $this.addClass('active'); + $submenu.addClass('active'); + } + }); + }, + + /** + * Init Common scrollable sliders for mobile devices. + * @param {Object} $sliderSection The jQuery selector for the current page or subsection + * @param {Object} $scrollBlock The jQuery selector for the scrollable block + * @param {Object} $slides The jQuery selector for the slides + * @param {Boolean} passing TRUE if we need to show slides withhout scrolling animation + * @returns {void} + */ + initSliderEvents: function($sliderSection, $scrollBlock, $slides, passing) { + + 'use strict'; + + // The box which gets scroll and contains all the child content. + const $scrollContent = $scrollBlock.children(); + const $controls = $('.default-controls', $sliderSection); + const $specialControls = $('.sp-control', $sliderSection); + const $dots = $('.nav', $controls).add($specialControls); + let isRunningAnimation = false; + + // Scroll to first block + $scrollBlock.scrollLeft(0); + $dots.removeClass('active'); + $dots.filter('[data-slide="0"]').addClass('active'); + + $slides.removeClass('active'); + $($slides[0]).addClass('active'); + + // Scroll to necessary plan block + const scrollToPlan = (slideNum) => { + let $previousPlan = 0; + let planPosition = 0; + + // Prevent scroll event + isRunningAnimation = true; + + // Get plan position related to previous plan to include border-spacing + $previousPlan = $($slides[slideNum - 1]); + planPosition = $previousPlan.length ? $previousPlan.position().left + + $scrollBlock.scrollLeft() + $previousPlan.outerWidth() : 0; + + // Set controls dot active state + $dots.removeClass('active'); + $dots.filter(`[data-slide="${slideNum}"]`).addClass('active'); + + $slides.removeClass('active'); + $($slides[slideNum]).addClass('active'); + + // Scroll to plan block + $scrollBlock.stop().animate({ + scrollLeft: planPosition + }, passing ? 0 : 600, 'swing', () => { + + // Enable on scroll event after auto scrolling + isRunningAnimation = false; + }); + }; + + // Init scroll event + $scrollBlock.rebind('scroll.scrollToPlan', function() { + const scrollVal = $(this).scrollLeft(); + const contentWidth = $scrollContent.outerWidth(); + const scrollAreaWidth = $scrollBlock.outerWidth(); + let closestIndex = 0; + + // Prevent on scroll event during auto scrolling or slider + if (isRunningAnimation || contentWidth === scrollAreaWidth) { + return false; + } + + // If block is scrolled + if (scrollVal > 0) { + closestIndex = Math.round(scrollVal / + (contentWidth - scrollAreaWidth) * $slides.length); + } + + // Get closest plan index + closestIndex = closestIndex - 1 >= 0 ? closestIndex - 1 : 0; + + // Set controls dot active state + $dots.removeClass('active'); + $dots.filter(`[data-slide="${closestIndex}"]`).addClass('active'); + + $slides.removeClass('active'); + $($slides[closestIndex]).addClass('active'); + }); + + // Init controls dot click + $dots.rebind('click.scrollToPlan', function() { + + // Scroll to selected plan + scrollToPlan($(this).data('slide')); + }); + + // Init Previous/Next controls click + $('.nav-button', $controls).rebind('click.scrollToPlan', function() { + const $this = $(this); + let slideNum; + + // Get current plan index + slideNum = $('.nav.active', $controls).data('slide'); + + // Get prev/next plan index + if ($this.is('.prev')) { + slideNum = slideNum - 1 > 0 ? slideNum - 1 : 0; + } + else if (slideNum !== $slides.length - 1) { + slideNum += 1; + } + + // Scroll to selected plan + scrollToPlan(slideNum); + }); + + $(window).rebind('resize.sliderResize', () => { + this.initSliderEvents($sliderSection, $scrollBlock, $slides, passing); + }); + }, + + initSlider: function() { + + "use strict"; + + var $slider = $('.bottom-page.slider-body'); + + $('.slider-button, .slider-dot-button', $slider).rebind('click', function() { + var $this = $(this); + var $buttons; + var activeSlide; + var newSlide; + + if (!$this.hasClass('active')) { + $buttons = $('.slider-button, .slider-dot-button', $slider); + activeSlide = $('.slider-button.active', $slider).attr('data-num'); + newSlide = $this.attr('data-num'); + + $buttons.removeClass('active'); + $buttons.filter('.slide' + newSlide).addClass('active'); + $slider.removeClass('slide' + activeSlide).addClass('slide' + newSlide); + } + }); + + $('.slider-ctrl-button', $slider).rebind('click', function() { + var $this = $(this); + var $buttons = $('.slider-button, .slider-dot-button', $slider); + var activeSlide = parseInt($('.slider-button.active', $slider).attr('data-num')); + var slidesNum = $('.slider-button', $slider).length; + var newSlide; + + if ($this.hasClass('prev') && activeSlide > 1) { + newSlide = activeSlide - 1; + } + else if ($this.hasClass('next') && activeSlide < slidesNum) { + newSlide = activeSlide + 1; + } + else { + return false; + } + + $buttons.removeClass('active'); + $buttons.filter('.slide' + newSlide).addClass('active'); + $slider.removeClass('slide' + activeSlide).addClass('slide' + newSlide); + }); + }, + + initTabs: function() { + $('.bottom-page.tab').rebind('click', function() { + var $this = $(this); + var tabTitle = $this.attr('data-tab'); + + if (!$this.hasClass('active')) { + $('.bottom-page.tab').removeClass('active'); + $('.bottom-page.tab-content:visible').addClass('hidden'); + $('.bottom-page.tab-content.' + tabTitle).removeClass('hidden'); + $this.addClass('active'); + } + }); + }, + + // Init floating top bar, product pages menu or help center navigation bar + initFloatingTop: function() { + + const $fmHolder = $('.fmholder', 'body.bottom-pages'); + const $topHeader = $('.bottom-page .top-head, .pages-menu-wrap .pages-menu.body', $fmHolder); + const $productPagesMenu = $('.pages-menu.body', $fmHolder); + + // Resize top menu / produc pages menu or help center navigation bar + // Required to avoid "jumpng" effect when we change "position" property + const topResize = function() { + + if ($topHeader.hasClass('floating')) { + if ($topHeader.parent().outerWidth() === 0 && $topHeader.parent().length > 1) { + $topHeader.outerWidth($($topHeader.parent()[1]).outerWidth()); + } + else { + $topHeader.outerWidth($topHeader.parent().outerWidth()); + } + } + else { + $topHeader.css('width', ''); + } + } + + if (!$topHeader.length) { + + return $(window).unbind('resize.topheader'); + } + + // Init menus resizing + topResize(); + + $(window).rebind('resize.topheader', function() { + topResize(); + }); + + // Select bottom pages scrolling block or window for mobile + $fmHolder.rebind('scroll.topmenu', () => { + + const topPos = $fmHolder.scrollTop(); + + if (topPos > 400) { + + // Make menus floating but not visible + $topHeader.addClass('floating'); + $('.submenu.active, .submenu-item.active', $productPagesMenu).removeClass('active'); + + // Show floating menus + if (topPos > 600) { + $topHeader.addClass('activated'); + } + else { + + // Hide floating menus + $topHeader.removeClass('activated'); + + // Hide all popup as top bar not visisble for this part + notify.closePopup(); + alarm.hideAllWarningPopups(true); + } + } + else if (topPos <= 200) { + + // Return menus static positions + $topHeader.removeClass('floating activated').css('width', ''); + } + }); + }, + + videoResizing: function() { + "use strict"; + + var $videoWrapper = $('.security-page-video-block'); + var videoWidth = $videoWrapper.outerWidth(); + + if ($videoWrapper.length > 0 && videoWidth < 640) { + $videoWrapper.height(Math.round(videoWidth * 0.54)); + } + else { + $videoWrapper.removeAttr('style'); + } + } +}; + +(function(scope) { + 'use strict'; + + var dir_inflight = 0; + var filedrag_u = []; + var filedrag_paths = Object.create(null); + var touchedElement = 0; + + function addUpload(files, emptyFolders) { + var straight = $.doStraightUpload || Object(window.fmconfig).ulddd || M.currentrootid === M.RubbishID; + + console.assert(page === 'start' || window.fminitialized, 'check this...'); + + if (M.InboxID && M.currentrootid && (M.currentrootid === M.InboxID + || M.getNodeRoot(M.currentdirid.split('/').pop()) === M.InboxID)) { + + msgDialog('error', l[882], l.upload_to_restricted_folder, l.upload_to_backup_info); + return false; + } + + if (page === 'start' || straight) { + M.addUpload(files, false, emptyFolders); + } + else { + openCopyUploadDialog(files, emptyFolders); + } + } + + function pushUpload() { + if (!--dir_inflight && $.dostart) { + var emptyFolders = Object.keys(filedrag_paths) + .filter(function(p) { + return filedrag_paths[p] < 1; + }); + + addUpload(filedrag_u, emptyFolders); + filedrag_u = []; + filedrag_paths = Object.create(null); + + if (page === 'start') { + start_upload(); + } + } + } + + function pushFile(file, path) { + if (d > 1) { + console.warn('Adding file %s', file.name, file); + } + if (file) { + file.path = path; + filedrag_u.push(file); + } + pushUpload(); + } + + function getFile(entry) { + return new Promise(function(resolve, reject) { + entry.file(resolve, reject); + }); + } + + function traverseFileTree(item, path, symlink) { + path = path || ""; + + if (item.isFile) { + dir_inflight++; + getFile(item).then(function(file) { + pushFile(file, path); + }).catch(function(error) { + if (d) { + var fn = symlink ? 'debug' : 'warn'; + + console[fn]('Failed to get File from FileEntry for "%s", %s', + item.name, Object(error).name, error, item); + } + pushFile(symlink, path); + }); + } + else if (item.isDirectory) { + var newPath = path + item.name + "/"; + filedrag_paths[newPath] = 0; + dir_inflight++; + var dirReader = item.createReader(); + var dirReaderIterator = function() { + dirReader.readEntries(function(entries) { + if (entries.length) { + var i = entries.length; + while (i--) { + traverseFileTree(entries[i], newPath); + } + filedrag_paths[newPath] += entries.length; + + dirReaderIterator(); + } + else { + pushUpload(); + } + }, function(error) { + console.warn('Unable to traverse folder "%s", %s', + item.name, Object(error).name, error, item); + + pushUpload(); + }); + }; + dirReaderIterator(); + } + if (d && dir_inflight == 0) { + console.log('end'); + } + } + + function start_upload() { + if (u_type && u_attr) { // logged in user landing on start-page + loadSubPage('fm'); + return; + } + if (u_wasloggedin()) { + msgDialog('confirmation', l[1193], l[2001], l[2002], function(e) { + if (e) { + start_anoupload(); + } + else { + tooltiplogin.init(); + $.awaitingLoginToUpload = true; + + mBroadcaster.once('fm:initialized', function() { + ulQueue.resume(); + uldl_hold = false; + + if (ul_queue.length > 0) { + M.showTransferToast('u', ul_queue.length); + } + }); + } + }); + } + else { + start_anoupload(); + } + } + + function start_anoupload() { + u_storage = init_storage(localStorage); + loadingDialog.show(); + u_checklogin({ + checkloginresult: function(u_ctx, r) { + u_type = r; + u_checked = true; + loadingDialog.hide(); + loadSubPage('fm'); + } + }, true); + } + + function FileDragEnter(e) { + if (d) { + console.log('DragEnter'); + } + e.preventDefault(); + if ($.dialog === 'avatar') { + return; + } + e.stopPropagation(); + if (!isFileDragAllowed()) { + return; + } + if (d > 1) { + console.info('----- ENTER event :' + e.target.className); + } + touchedElement++; + if (touchedElement === 1) { + $('.drag-n-drop.overlay').removeClass('hidden'); + $('body').addClass('overlayed'); + } + + } + + function FileDragHover(e) { + if (d) { + console.log('DragOver'); + } + e.preventDefault(); + e.stopPropagation(); + } + var useMegaSync = -1; + var usageMegaSync = 0; + + + function FileSelectHandlerMegaSyncClick(e) { + + if (M.isInvalidUserStatus()) { + e.preventDefault(); + return false; + } + + if (page === "chat" || page.indexOf('/chat/') > -1) { + return true; + } + if (window.useMegaSync === 2) { + e.preventDefault(); + e.stopPropagation(); + + if (M.InboxID && M.currentrootid && (M.currentrootid === M.InboxID + || M.getNodeRoot(M.currentdirid.split('/').pop()) === M.InboxID)) { + + msgDialog('error', l[882], l.upload_to_restricted_folder, l.upload_to_backup_info); + return false; + } + + var target; + if ($.onDroppedTreeFolder) { + target = $.onDroppedTreeFolder; + delete $.onDroppedTreeFolder; + } + else if (M.currentCustomView) { + target = M.currentCustomView.nodeID; + } + else if (String(M.currentdirid).length !== 8) { + target = M.lastSeenCloudFolder || M.RootID; + } + else { + target = M.currentdirid; + } + + var uploadCmdIsFine = function _uploadCmdIsFine(error, response) { + if (error) { + window.useMegaSync = 3; + } + }; + + //var elem = $('#' + e.toElement.id)[0]; + var elem = e.target; + if (elem.hasAttribute('webkitdirectory') || elem.hasAttribute('mozdirectory') + || elem.hasAttribute('msdirectory') || elem.hasAttribute('odirectory') + || elem.hasAttribute('directory')) { + megasync.uploadFolder(target, uploadCmdIsFine); + } + else { + megasync.uploadFile(target, uploadCmdIsFine); + } + return false; + } + else { + return true; + } + } + + function FileDragLeave(e) { + if (d) { + console.log('DragLeave'); + } + e.preventDefault(); + if ($.dialog === 'avatar') { + return; + } + e.stopPropagation(); + + if (d > 1) { + console.warn('----- LEAVE event :' + e.target.className + ' ' + e.type); + } + touchedElement--; + // below condition is due to firefox bug. https://developer.mozilla.org/en-US/docs/Web/Events/dragenter + if ((touchedElement <= 0) || (touchedElement === 1 && ua.details.browser === 'Firefox')) { + $('.drag-n-drop.overlay').addClass('hidden'); + $('body').removeClass('overlayed'); + touchedElement = 0; + } + } + + // on Drop event or Click to file select event + function FileSelectHandler(e) { + + if (e.preventDefault) { + e.preventDefault(); + } + + // Clear drag element + touchedElement = 0; + + $('.drag-n-drop.overlay').addClass('hidden'); + $('body').removeClass('overlayed'); + + if (M.isInvalidUserStatus()) { + return false; + } + + if ($.dialog === 'avatar') { + return; + } + if (e.stopPropagation) { + e.stopPropagation(); + } + + if (e.type === 'drop' && !isFileDragAllowed()) { + return; + } + + useMegaSync = -1; + + var currentDir = M.currentCustomView ? M.currentCustomView.nodeID : M.currentdirid; + + if ($.awaitingLoginToUpload) { + return tooltiplogin.init(); + } + + if ( + ( + folderlink || currentDir && + ( + currentDir !== 'dashboard' && + currentDir !== 'transfers' && + (M.getNodeRights(currentDir) | 0) < 1 + ) + ) && + String(currentDir).indexOf("chat/") === -1 + ) { + msgDialog('warningb', l[1676], l[1023]); + return true; + } + + if (M.InboxID && M.currentrootid && (M.currentrootid === M.InboxID + || M.getNodeRoot(M.currentdirid.split('/').pop()) === M.InboxID)) { + + msgDialog('error', l[882], l.upload_to_restricted_folder, l.upload_to_backup_info); + return false; + } + + if (page === 'start' && !is_mobile) { + console.assert(typeof fm_addhtml === 'function'); + if (typeof fm_addhtml === 'function') { + fm_addhtml(); + } + } + + var dataTransfer = Object(e.dataTransfer); + var files = e.target.files || dataTransfer.files; + if (!files || files.length == 0) { + if (!is_chrome_firefox || !dataTransfer.mozItemCount) { + return false; + } + } + + if (localStorage.testWebGL) { + return WebGLMEGAContext.test(...files); + } + + if (localStorage.testDCRaw) { + (function _rawNext(files) { + var file = files.pop(); + if (!file) { + return console.info('No more files.'); + } + var id = Math.random() * 9999 | 0; + var img = is_image(file.name); + var raw = typeof img === 'string' && img; + + if (!img || !raw) { + console.warn('This is not a RAW image...', file.name, [file], img); + return _rawNext(files); + } + + createthumbnail(file, false, id, null, null, {raw: raw}) + .then((res) => { + console.info('testDCRaw result', res); + onIdle(_rawNext.bind(null, files)); + M.saveAs(res.preview, `${file.name}.png`); + }) + .dump(id); + + })(toArray.apply(null, files)); + return; + } + if (localStorage.testMediaInfo) { + return MediaInfoLib.test(files); + } + if (localStorage.testGetID3CoverArt) { + return getID3CoverArt(files[0]).then(function(ab) { + console.info('getID3CovertArt result', mObjectURL([ab], 'image/jpeg')); + }).catch(console.debug.bind(console)); + } + if (localStorage.testStreamerThumbnail) { + return M.require('videostream').tryCatch(function() { + Streamer.getThumbnail(files[0]) + .then(function(ab) { + console.info('Streamer.getThumbnail result', mObjectURL([ab], 'image/jpeg')); + }) + .catch(console.debug.bind(console)); + }); + } + + if (window.d && (e.ctrlKey || e.metaKey) && /^mega-dbexport/.test(files[0].name)) { + return MegaDexie.import(files[0]).dump(); + } + + if (window.d && (e.ctrlKey || e.metaKey) && MediaInfoLib.isFileSupported(files[0])) { + window.d = 2; + document.body.textContent = 'Local videostream.js Test...'; + const video = mCreateElement('video', {width: 1280, height: 720, controls: true}, 'body'); + return M.require('videostream').then(() => Streamer(files[0], video)).catch(dump); + } + + if (e.dataTransfer + && e.dataTransfer.items + && e.dataTransfer.items.length > 0 && e.dataTransfer.items[0].webkitGetAsEntry) { + var items = e.dataTransfer.items; + for (var i = 0; i < items.length; i++) { + if (items[i].webkitGetAsEntry) { + var item = items[i].webkitGetAsEntry(); + if (item) { + filedrag_u = []; + if (i == items.length - 1) { + $.dostart = true; + } + traverseFileTree(item, '', item.isFile && items[i].getAsFile()); + } + } + } + } + else if (is_chrome_firefox && e.dataTransfer) { + try { + for (var i = 0, m = e.dataTransfer.mozItemCount; i < m; ++i) { + var file = e.dataTransfer.mozGetDataAt("application/x-moz-file", i); + if (file instanceof Ci.nsIFile) { + filedrag_u = []; + if (i == m - 1) { + $.dostart = true; + } + traverseFileTree(new mozDirtyGetAsEntry(file /*,e.dataTransfer*/ )); + } + else { + if (d) { + console.log('FileSelectHandler: Not a nsIFile', file); + } + } + // e.dataTransfer.mozClearDataAt("application/x-moz-file", i); + } + } + catch (e) { + alert(e); + Cu.reportError(e); + } + } + else { + var u = []; + var gecko = dataTransfer && ("mozItemCount" in dataTransfer) || Object(ua.details).browser === 'Firefox'; + if (gecko && parseFloat(Object(ua.details).version) > 51) { + // No need to check for folder upload attempts through zero-bytes on latest Firefox versions + gecko = false; + } + for (var i = 0, f; f = files[i]; i++) { + if (f.webkitRelativePath) { + f.path = String(f.webkitRelativePath).replace(RegExp("[\\/]" + + String(f.name).replace(/([^\w])/g,'\\$1') + "$"), ''); + } + if (gecko) { + f.gecko = true; + } + if (f.name != '.') { + u.push(f); + if (Math.floor(f.lastModified / 1000) === Math.floor(Date.now() / 1000)) { + api_req({a: 'log', e: 99659, m: 'file modification time uses current time for uploading.'}); + } + } + } + M.addUpload(u); + if (page == 'start') { + start_upload(); + } + if (!window.InitFileDrag) { + return; + } + + var $fileAndFolderUploadWrap = $('.fm-file-upload').parent(); + + $('input', $fileAndFolderUploadWrap).remove(); + $fileAndFolderUploadWrap.safeAppend('' + // File input + ''); // Folder input + $('input#fileselect3').remove(); + $('.files-menu .fileupload-item') + .after(''); + $('input#fileselect4').remove(); + $('.files-menu .folderupload-item').after(''); + InitFileDrag(); + } + return true; + } + + function onDragStartHandler(e) { + if ((e.target && e.target.toString && e.target.toString() === '[object Text]') + || page.indexOf('/fm/') === -1) { + e.stopPropagation(); + e.preventDefault(); + return false; + } + } + + /** + * Check current page is allowed on drag and drop to upload file + * + * @return {Boolean} Is allowed or not + */ + function isFileDragAllowed() { + if (page === 'start') { + return true; + } + return !(is_fm() && // if page is fm, + (window.slideshowid || !$('.feedback-dialog').hasClass('hidden') || // preview and feedback dialog show + M.currentdirid === 'shares' || // Share root page + M.currentdirid === 'out-shares' || // Out-share root page + M.currentdirid === 'public-links' || // Public-link root page + String(M.currentdirid).startsWith('chat/contacts') || // Contacts pages + M.currentrootid === M.RubbishID || // Rubbish bin + (M.currentrootid === undefined && M.currentdirid !== 'transfers') // Dashboard and Settings pages + )); + } + + // initialize + scope.InitFileDrag = function() { + var i = 5; + while (i--) { + var o = document.getElementById(i ? 'fileselect' + i : 'start-upload'); + if (o) { + o.addEventListener("change", FileSelectHandler, false); + if (!is_mobile && i) { + o.addEventListener("click", FileSelectHandlerMegaSyncClick, true); + } + } + } + + // dran&drop overlay click handler, to allow closing if stuck + $('.drag-n-drop.overlay').off('click.dnd').on('click.dnd', + function dragDropLayoutClickHndler() { + $('.drag-n-drop.overlay').addClass('hidden'); + $('body').removeClass('overlayed'); + } + ); + + var fnHandler = FileSelectHandler; + var fnEnter = FileDragEnter; + var fnHover = FileDragHover; + var fnLeave = FileDragLeave; + + touchedElement = 0; + + // MEGAdrop upload + var elem = document.getElementById("wu_items"); + if (elem) { + fnHandler = mega.megadrop.upload; + document.getElementById("fileselect5").addEventListener("change", fnHandler, false); + } + + document.getElementsByTagName("body")[0].addEventListener("dragenter", fnEnter, false); + document.getElementsByTagName("body")[0].addEventListener("dragover", fnHover, false); + document.getElementsByTagName("body")[0].addEventListener("dragleave", fnLeave, false); + document.getElementsByTagName("body")[0].addEventListener("drop", fnHandler, false); + document.getElementsByTagName("body")[0].addEventListener("dragstart", onDragStartHandler, false); + + if (is_mobile && (ua.details.engine === 'Gecko' || is_ios && is_ios < 13)) { + // https://bugzilla.mozilla.org/show_bug.cgi?id=1456557 + $('input[multiple]').removeAttr('multiple'); + } + + + if (is_chrome_firefox) { + $('input[webkitdirectory], .fm-folder-upload input').click(function(e) { + var file = mozFilePicker(0, 2, { /*gfp:1,*/ + title: l[98] + }); + + if (file) { + e.target = { + files: [-1] + }; + e.dataTransfer = { + mozItemCount: 1, + mozGetDataAt: function() { + return file; + } + }; + FileSelectHandler(e); + file = undefined; + } + else { + if (e.stopPropagation) { + e.stopPropagation(); + } + if (e.preventDefault) { + e.preventDefault(); + } + } + }); + } + } + +})(this); + +// Selenium helper to fake a drop event +function fakeDropEvent(target) { + // hash: "MTIzNAAAAAAAAAAAAAAAAAOLqRY" + var file = new File(['1234'], 'test\u202Efdp.exe', { + type: "application/octet-stream", + lastModified: 1485195382 + }); + + var ev = document.createEvent("HTMLEvents"); + ev.initEvent("drop", true, true); + ev.dataTransfer = { + files: [file] + }; + + target = target || document.getElementById("startholder"); + target.dispatchEvent(ev); +} + +function ulDummyFiles(count, len) { + 'use strict'; + + var ul = []; + var ts = 1e8; + for (var n = M.v.length; n--;) { + ts = Math.max(ts, M.v[n].mtime | 0); + } + + for (var i = count || 6e3; i--;) { + var now = Date.now(); + var rnd = Math.random(); + var nam = (rnd * now).toString(36); + var buf = asmCrypto.getRandomValues(new Uint8Array(rnd * (len || 512))); + + ul.push(new File([buf], nam, {type: 'application/octet-stream', lastModified: ++ts * 1e3})); + } + + M.addUpload(ul, true); +} + +/* jshint -W003 */// 'noThumbURI' was used before it was defined. + +function createnodethumbnail(node, aes, id, imagedata, opt, ph, file) { + 'use strict'; + storedattr[id] = Object.assign(Object.create(null), {'$ph': ph, target: node}); + createthumbnail(file || false, aes, id, imagedata, node, opt).catch(nop); + + var uled = ulmanager.getEventDataByHandle(node); + if (uled && !uled.thumb) { + // XXX: prevent this from being reached twice, e.g. an mp4 renamed as avi and containing covert art ... + uled.thumb = 1; + + if (d) { + console.log('Increasing the number of expected file attributes for the chat to be aware.', uled); + } + uled.efa += 2; + } +} + +function createthumbnail(file, aes, id, imagedata, node, opt) { + 'use strict'; + + var isVideo; + var isRawImage; + var thumbHandler; + var onPreviewRetry; + + if (window.omitthumb) { + console.warn('Omitting thumb creation on purpose...', arguments); + mBroadcaster.sendMessage('fa:error', id, 'omitthumb', false, 2); + return Promise.resolve(); + } + + if (typeof opt === 'object') { + isRawImage = opt.raw; + isVideo = opt.isVideo; + onPreviewRetry = opt.onPreviewRetry; + + if (typeof isRawImage === 'function') { + thumbHandler = isRawImage; + isRawImage = false; + } + else if (typeof isRawImage !== 'string') { + if (d) { + console.debug('Not really a raw..', isRawImage); + } + isRawImage = false; + } + + if (d && isRawImage) { + console.log('Processing RAW Image: ' + isRawImage); + } + if (d && thumbHandler) { + console.log('ThumbHandler: ' + thumbHandler.name); + } + } + else { + onPreviewRetry = !!opt; + } + + const tag = `createthumbnail(${file && file.name || Math.random().toString(26).slice(-6)}).${id}`; + const debug = (m, ...a) => console.warn(`[${tag}] ${m}`, ...a); + + const n = M.getNodeByHandle(node); + const fa = String(n && n.fa); + const ph = Object(storedattr[id]).$ph; + const createThumbnail = !fa.includes(':0*') || $.funkyThumbRegen; + const createPreview = !fa.includes(':1*') || onPreviewRetry || $.funkyThumbRegen; + const canStoreAttr = !n || !n.u || n.u === u_handle && n.f !== u_handle; + + if (!createThumbnail && !createPreview) { + debug('Neither thumbnail nor preview needs to be created.', n); + return Promise.resolve(EEXIST); + } + + if (d) { + console.time(tag); + } + + var sendToPreview = function(h, ab) { + var n = h && M.getNodeByHandle(h); + + if (n && fileext(n.name, 0, 1) !== 'pdf' && !is_video(n)) { + previewimg(h, ab || dataURLToAB(noThumbURI)); + } + }; + + const getSourceImage = async(source) => { + const buffer = await webgl.readAsArrayBuffer(source); + + if (thumbHandler) { + const res = await thumbHandler(buffer); + source = res.buffer || res; + } + else if (isRawImage) { + if (typeof dcraw === 'undefined') { + await Promise.resolve(M.require('dcrawjs')).catch(dump); + } + const {data, orientation} = webgl.decodeRAWImage(isRawImage, buffer); + if (data) { + source = data; + source.orientation = orientation; + } + } + return source; + }; + + const store = ({thumbnail, preview}) => { + if (canStoreAttr) { + // FIXME hack into cipher and extract key + const key = aes._key[0].slice(0, 4); + + if (thumbnail) { + api_storefileattr(id, 0, key, thumbnail, n.h, ph); + } + + // only store preview when the user is the file owner, and when it's not a + // retry (because then there is already a preview image, it's just unavailable) + if (preview && !onPreviewRetry) { + api_storefileattr(id, 1, key, preview, n.h, ph); + } + + // @todo make async and hold until api_storefileattr() completes (SC-ack) + } + + if (node) { + thumbnails.decouple(node); + } + sendToPreview(node, preview); + + return {thumbnail, preview}; + }; + + let typeGuess; + const ext = fileext(file && file.name || n.name); + return (async() => { + const exifFromImage = !!exifImageRotation.fromImage; + + // @todo move all this to a reusable helper across upload/download + isVideo = isVideo || MediaInfoLib.isFileSupported(n); + + if (isVideo && (file || imagedata && n.s >= imagedata.byteLength)) { + file = file || new File([imagedata], n.name, {type: filemime(n)}); + + // @todo FIXME mp3 may be wrongly detected as MLP (?!) + if (is_audio(n) || ext === 'mp3') { + const buffer = imagedata && imagedata.buffer; + imagedata = await getID3CoverArt(buffer || imagedata || file).catch(nop) || imagedata; + } + else { + await Promise.resolve(M.require('videostream')); + imagedata = await Streamer.getThumbnail(file).catch(nop) || imagedata; + } + } + else if (isRawImage && exifFromImage && webgl.doesSupport('worker')) { + // We don't need to rotate images ourselves, so we will decode it into a worker. + if (d) { + debug('Leaving %s image decoding to worker...', isRawImage); + } + isRawImage = false; + } + + let source = imagedata || file; + + if (thumbHandler || isRawImage) { + source = await getSourceImage(source); + } + + if (!(source instanceof ImageData) && !exifFromImage) { + source = await webgl.getRotatedImageData(source); + } + + typeGuess = source.type || (await webgl.identify(source)).type || 'unknown'; + if (d) { + debug(`Source guessed to be ${typeGuess}...`, [source]); + } + + const res = store(await webgl.worker('scissor', {source, createPreview, createThumbnail})); + + if (d) { + console.timeEnd(tag); + } + return res; + })().catch(ex => { + if (d) { + console.timeEnd(tag); + debug('Failed to create thumbnail', ex); + } + + sendToPreview(node); + mBroadcaster.sendMessage('fa:error', id, ex, false, 2); + + if (!window.pfid && canStoreAttr && String(typeGuess).startsWith('image/')) { + eventlog(99665, JSON.stringify([ + 2, + ext, + typeGuess, + String(ex && ex.message || ex).split('\n')[0].substr(0, 64), + fa.includes(':8*') && String(MediaAttribute.getCodecStrings(n)) || 'na' + ])); + } + throw new MEGAException(ex, imagedata || file); + }); +} + +mBroadcaster.once('startMega', function() { + 'use strict'; + exifImageRotation.fromImage = getComputedStyle(document.documentElement).imageOrientation === 'from-image'; + + if (exifImageRotation.fromImage) { + if (d) { + console.info('This browser automatically rotates images based on the EXIF metadata.', [ua]); + } + + if (window.safari || ua.details.engine === 'Gecko') { + exifImageRotation.fromImage = -1; + } + } +}); + +/** + * Rotate images as per the extracted EXIF orientation + * @param {ArrayBuffer} source The image file data + * @param {Number} orientation The EXIF rotation value + */ +async function exifImageRotation(source, orientation) { + 'use strict'; + + orientation |= 0; + if (orientation < 2 || exifImageRotation.fromImage < 0) { + // No rotation needed. + return source; + } + + return new Promise((resolve, reject) => { + var img = new Image(); + var canvas = document.createElement('canvas'); + const cleanup = () => { + if (exifImageRotation.fromImage) { + document.body.removeChild(img); + document.body.removeChild(canvas); + } + URL.revokeObjectURL(img.src); + }; + var signalError = function() { + reject(); + cleanup(); + }; + + if (exifImageRotation.fromImage) { + img.style.imageOrientation = 'none'; + canvas.style.imageOrientation = 'none'; + document.body.appendChild(img); + document.body.appendChild(canvas); + } + + img.onload = tryCatch(function() { + var width = this.naturalWidth; + var height = this.naturalHeight; + + if (!width || !height) { + if (d) { + console.error('exifImageRotation found invalid width/height values...', width, height); + } + + return signalError(); + } + + if (d) { + console.debug('exifImageRotation: %d x %d', width, height); + } + var ctx = canvas.getContext('2d'); + + ctx.save(); + switch (orientation) { + case 5: + case 6: + case 7: + case 8: + canvas.width = height; + canvas.height = width; + break; + default: + canvas.width = width; + canvas.height = height; + } + + switch (orientation) { + case 2: + // horizontal flip + ctx.translate(width, 0); + ctx.scale(-1, 1); + break; + case 3: + // 180 rotate left + ctx.translate(width, height); + ctx.rotate(Math.PI); + break; + case 4: + // vertical flip + ctx.translate(0, height); + ctx.scale(1, -1); + break; + case 5: + // vertical flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.scale(1, -1); + break; + case 6: + // 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(0, -height); + break; + case 7: + // horizontal flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(width, -height); + ctx.scale(-1, 1); + break; + case 8: + // 90 rotate left + ctx.rotate(-0.5 * Math.PI); + ctx.translate(-width, 0); + break; + default: + break; + } + + ctx.drawImage(img, 0, 0); + ctx.restore(); + + queueMicrotask(cleanup); + resolve(ctx.getImageData(0, 0, canvas.width, canvas.height)); + + }, img.onerror = function(ev) { + if (d) { + console.error('exifImageRotation failed...', ev); + } + signalError(); + }); + + img.src = source instanceof Blob + ? URL.createObjectURL(source) + : mObjectURL([source], source.type || 'image/jpeg'); + }); +} + +// ---------------------------------------------------------------------------------- + +/** + * Creates a new thumbnails' manager. + * @param {Number} capacity for LRU + * @param {String} [dbname] optional database name + * @returns {LRUMap} + */ +class ThumbManager extends LRUMap { + constructor(capacity, dbname) { + super(capacity || 200, (value, key, store, rep) => store.remove(key, value, rep)); + + Object.defineProperty(this, 'evict', {value: []}); + Object.defineProperty(this, 'debug', {value: self.d > 4}); + + Object.defineProperty(this, 'loaded', {value: 0, writable: true}); + Object.defineProperty(this, 'pending', {value: Object.create(null)}); + + Object.defineProperty(this, 'requested', {value: new Map()}); + Object.defineProperty(this, 'duplicates', {value: new MapSet(this.capacity << 2, d && nop)}); + + Object.defineProperty(this, '__ident_0', {value: `thumb-manager.${makeUUID()}`}); + + if (dbname) { + this.loading = LRUMegaDexie.create(dbname, this.capacity << 4) + .then(db => { + if (db instanceof LRUMegaDexie) { + Object.defineProperty(this, 'db', {value: db, writable: true}); + + this.db.add = (h, data) => { + webgl.readAsArrayBuffer(data) + .then(buf => this.db.set(h, buf)) + .catch((ex) => { + if (d) { + console.assert(this.db.error, `Unexpected error... ${ex}`, ex); + } + this.db = false; + }); + }; + } + }) + .catch(dump) + .finally(() => { + delete this.loading; + }); + } + } + + get [Symbol.toStringTag]() { + return 'ThumbManager'; + } + + revoke(h, url, stay) { + + if (this.debug) { + console.warn(`Revoking thumbnail ${h}, ${url}`); + } + this.delete(h); + + if (!stay) { + this.decouple(h); + } + URL.revokeObjectURL(url); + } + + dispose(single) { + let threshold = single ? 0 : this.capacity / 10 | 1; + + if (this.debug) { + console.group('thumbnails:lru'); + } + + for (let i = this.evict.length; i--;) { + this.revoke(...this.evict[i]); + } + this.evict.length = 0; + + while (--threshold > 0) { + const [[k, v]] = this; + this.revoke(k, v); + } + + if (this.debug) { + console.groupEnd(); + } + + delay.cancel(this.__ident_0); + } + + remove(...args) { + this.evict.push(args); + return args[2] ? this.dispose(true) : delay(this.__ident_0, () => this.dispose(), 400); + } + + cleanup() { + this.loaded = 0; + this.duplicates.clear(); + } + + decouple(key) { + const fa = (M.getNodeByHandle(key) || key).fa || key; + + this.each(fa, (n) => { + n.seen = null; + + if (M.megaRender) { + M.megaRender.revokeDOMNode(n.h); + } + }); + + this.duplicates.delete(fa); + this.requested.delete(fa); + } + + each(fa, cb) { + if (this.duplicates.size(fa)) { + const hs = [...this.duplicates.get(fa)]; + + for (let i = hs.length; i--;) { + const n = M.getNodeByHandle(hs[i]); + + if (n && cb(n)) { + return true; + } + } + } + } + + queued(n, type) { + let res = false; + + const rv = this.requested.get(n.fa) | 0; + if (!super.has(n.fa) && !rv || rv !== type + 1 && rv < 2) { + + if (!this.pending[n.fa]) { + this.pending[n.fa] = []; + } + + res = true; + this.requested.set(n.fa, 1 + type); + } + + this.duplicates.set(n.fa, n.h); + return res; + } + + add(key, value, each) { + if (d) { + console.assert(super.get(key) !== value); + } + super.set(key, value); + + if (this.pending[key]) { + for (let i = this.pending[key].length; i--;) { + queueMicrotask(this.pending[key][i]); + } + delete this.pending[key]; + } + + if (each) { + this.each(key, each); + } + } + + replace(h, value) { + const n = M.getNodeByHandle(h); + + this.add(n.fa, value || self.noThumbURI); + + if (M.megaRender) { + const domNode = M.megaRender.revokeDOMNode(n.h); + if (domNode) { + const img = domNode.querySelector('img'); + if (img) { + img.src = super.get(n.fa); + } + } + } + } + + async query(handles, each, loadend) { + if (this.loading) { + await this.loading; + } + + if (this.db && handles.length) { + const send = async(h, ab) => loadend(h, ab); + const found = await this.db.bulkGet(handles).catch(dump) || false; + + for (const h in found) { + + if (each(h)) { + send(h, found[h]).catch(dump); + } + } + } + } +} + +Object.defineProperties(ThumbManager, { + rebuildThumbnails: { + value: async(nodes) => { + 'use strict'; + let max = 1e9; + const gen = (h) => { + const n = M.getNodeByHandle(h); + + if (n.t || n.u !== u_handle || (max -= n.s) < 0) { + return Promise.reject('Access denied.'); + } + + return M.gfsfetch(h, 0, -1).then(res => setImage(n, res)); + }; + const fmt = (res) => { + const output = {}; + for (let i = res.length; i--;) { + output[nodes[i]] = {name: M.getNameByHandle(nodes[i]), ...res[i]}; + } + return output; + }; + + nodes = [...nodes]; + $.funkyThumbRegen = 1; + + const res = await Promise.allSettled(nodes.map(gen)).then(fmt).catch(dump); + console.table(res); + + delete $.funkyThumbRegen; + } + } +}); + +// ---------------------------------------------------------------------------------- + +function dataURLToAB(dataURL) { + if (dataURL.indexOf(';base64,') == -1) { + var parts = dataURL.split(','); + var contentType = parts[0].split(':')[1]; + var raw = parts[1]; + } + else { + var parts = dataURL.split(';base64,'); + var contentType = parts[0].split(':')[1]; + var raw = window.atob(parts[1]); + } + var rawLength = raw.length; + var uInt8Array = new Uint8Array(((rawLength + 15) & -16)); + for (var i = 0; i < rawLength; ++i) { + uInt8Array[i] = raw.charCodeAt(i); + } + + return uInt8Array; +} + +var ba_images = [], + ba_time = 0, + ba_id = 0, + ba_result = []; + +function benchmarki() { + var a = 0; + ba_images = []; + for (var i in M.d) { + if (M.d[i].name && is_image(M.d[i].name) && M.d[i].fa) { + ba_images.push(M.d[i]); + } + else { + a++; + } + } + console.log('found ' + ba_images.length + ' images with file attr (' + a + ' don\'t have file attributes)'); + + ba_images = shuffle(ba_images); + + ba_result['success'] = 0; + ba_result['error'] = 0; + + benchmarkireq(); +} + +function shuffle(array) { + var currentIndex = array.length, + temporaryValue, randomIndex; + + // While there remain elements to shuffle... + while (0 !== currentIndex) { + + // Pick a remaining element... + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex -= 1; + + // And swap it with the current element. + temporaryValue = array[currentIndex]; + array[currentIndex] = array[randomIndex]; + array[randomIndex] = temporaryValue; + } + + return array; +} + +function benchmarkireq() { + ba_time = new Date().getTime(); + + function eot(id, err) { + for (var i in ba_images) { + if (ba_images[i].h == id) { + ba_result['error']++; + console.log('error', new Date().getTime() - ba_time, err); + console.log(ba_images[i].fa); + ba_id++; + benchmarkireq(); + } + } + } + + eot.timeout = 5100; + + var n = ba_images[ba_id]; + if (n) { + var treq = {}; + treq[n.h] = { + fa: n.fa, + k: n.k + }; + preqs[slideshowid = n.h] = 1; + api_getfileattr(treq, 1, function(ctx, id, uint8arr) { + for (var i in ba_images) { + if (ba_images[i].h == id) { + ba_result['success']++; + console.log('success', uint8arr.length, new Date().getTime() - ba_time); + ba_id++; + benchmarkireq(); + + previewsrc(myURL.createObjectURL(new Blob([uint8arr], { + type: 'image/jpeg' + }))); + } + } + }, eot); + } + else { + console.log('ready'); + slideshowid = undefined; + preqs = {}; + } + +} + +// Do not change this to a remote URL since it'll cause a CORS issue (tainted canvas) +// Neither change it to base64, just a URL-encoded Data URI +var noThumbURI = + 'data:image/svg+xml;charset-utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22240' + + 'pt%22%20height%3D%22240pt%22%20viewBox%3D%220%200%20240%20240%22%3E%3Cpath%20fill%3D%22rgb(80%25,79.607843%25' + + ',79.607843%25)%22%20fill-rule%3D%22evenodd%22%20d%3D%22M120%20132c6.63%200%2012-5.37%2012-12%200-2.3-.65-4.42' + + '-1.76-6.24l-16.48%2016.48c1.82%201.1%203.95%201.76%206.24%201.76zm-21.7%205.7c-3.93-4.83-6.3-11-6.3-17.7%200-' + + '15.47%2012.54-28%2028-28%206.7%200%2012.87%202.37%2017.7%206.3l10.48-10.48C140%2083.18%20130.65%2080%20120%20' + + '80c-32%200-52.37%2028.57-64%2040%206.96%206.84%2017.05%2019.8%2030.88%2029.13zm54.83-46.82L141.7%20102.3c3.93' + + '%204.83%206.3%2011%206.3%2017.7%200%2015.47-12.54%2028-28%2028-6.7%200-12.87-2.37-17.7-6.3l-10.48%2010.48C100' + + '%20156.82%20109.35%20160%20120%20160c32%200%2052.37-28.57%2064-40-6.96-6.84-17.05-19.8-30.88-29.13zM120%20108' + + 'c-6.63%200-12%205.37-12%2012%200%202.3.65%204.42%201.76%206.24l16.48-16.48c-1.82-1.1-3.95-1.76-6.24-1.76zm0%2' + + '00%22%2F%3E%3C%2Fsvg%3E'; + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MIT/X11 License + * + * JavaScript library for reading EXIF image metadata. + * Copyright (c) 2008 Jacob Seidelin + * + * 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. + * + * ** THIS IS A FORK ** @origin: https://github.com/diegocr/exif-js + * + * ***** END LICENSE BLOCK ***** */ + +(function(root, factory){ + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = factory(); + } else { + exports.EXIF = factory(); + } + } else if (typeof define === 'function' && define.amd) { + define(factory); + } else { + root.EXIF = factory(); + } +}(this, function() { + + var debug = Boolean(this.d) || 0; + + var EXIF = function(obj) { + if (obj instanceof EXIF) return obj; + if (!(this instanceof EXIF)) return new EXIF(obj); + this.EXIFwrapped = obj; + }; + + var ExifTags = EXIF.Tags = { + + // version tags + 0x9000 : "ExifVersion", // EXIF version + 0xA000 : "FlashpixVersion", // Flashpix format version + + // colorspace tags + 0xA001 : "ColorSpace", // Color space information tag + + // image configuration + 0xA002 : "PixelXDimension", // Valid width of meaningful image + 0xA003 : "PixelYDimension", // Valid height of meaningful image + 0x9101 : "ComponentsConfiguration", // Information about channels + 0x9102 : "CompressedBitsPerPixel", // Compressed bits per pixel + + // user information + 0x927C : "MakerNote", // Any desired information written by the manufacturer + 0x9286 : "UserComment", // Comments by user + + // related file + 0xA004 : "RelatedSoundFile", // Name of related sound file + + // date and time + 0x9003 : "DateTimeOriginal", // Date and time when the original image was generated + 0x9004 : "DateTimeDigitized", // Date and time when the image was stored digitally + 0x9290 : "SubsecTime", // Fractions of seconds for DateTime + 0x9291 : "SubsecTimeOriginal", // Fractions of seconds for DateTimeOriginal + 0x9292 : "SubsecTimeDigitized", // Fractions of seconds for DateTimeDigitized + + // picture-taking conditions + 0x829A : "ExposureTime", // Exposure time (in seconds) + 0x829D : "FNumber", // F number + 0x8822 : "ExposureProgram", // Exposure program + 0x8824 : "SpectralSensitivity", // Spectral sensitivity + 0x8827 : "ISOSpeedRatings", // ISO speed rating + 0x8828 : "OECF", // Optoelectric conversion factor + 0x9201 : "ShutterSpeedValue", // Shutter speed + 0x9202 : "ApertureValue", // Lens aperture + 0x9203 : "BrightnessValue", // Value of brightness + 0x9204 : "ExposureBias", // Exposure bias + 0x9205 : "MaxApertureValue", // Smallest F number of lens + 0x9206 : "SubjectDistance", // Distance to subject in meters + 0x9207 : "MeteringMode", // Metering mode + 0x9208 : "LightSource", // Kind of light source + 0x9209 : "Flash", // Flash status + 0x9214 : "SubjectArea", // Location and area of main subject + 0x920A : "FocalLength", // Focal length of the lens in mm + 0xA20B : "FlashEnergy", // Strobe energy in BCPS + 0xA20C : "SpatialFrequencyResponse", // + 0xA20E : "FocalPlaneXResolution", // Number of pixels in width direction per FocalPlaneResolutionUnit + 0xA20F : "FocalPlaneYResolution", // Number of pixels in height direction per FocalPlaneResolutionUnit + 0xA210 : "FocalPlaneResolutionUnit", // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution + 0xA214 : "SubjectLocation", // Location of subject in image + 0xA215 : "ExposureIndex", // Exposure index selected on camera + 0xA217 : "SensingMethod", // Image sensor type + 0xA300 : "FileSource", // Image source (3 == DSC) + 0xA301 : "SceneType", // Scene type (1 == directly photographed) + 0xA302 : "CFAPattern", // Color filter array geometric pattern + 0xA401 : "CustomRendered", // Special processing + 0xA402 : "ExposureMode", // Exposure mode + 0xA403 : "WhiteBalance", // 1 = auto white balance, 2 = manual + 0xA404 : "DigitalZoomRation", // Digital zoom ratio + 0xA405 : "FocalLengthIn35mmFilm", // Equivalent foacl length assuming 35mm film camera (in mm) + 0xA406 : "SceneCaptureType", // Type of scene + 0xA407 : "GainControl", // Degree of overall image gain adjustment + 0xA408 : "Contrast", // Direction of contrast processing applied by camera + 0xA409 : "Saturation", // Direction of saturation processing applied by camera + 0xA40A : "Sharpness", // Direction of sharpness processing applied by camera + 0xA40B : "DeviceSettingDescription", // + 0xA40C : "SubjectDistanceRange", // Distance to subject + + // other tags + 0xA005 : "InteroperabilityIFDPointer", + 0xA420 : "ImageUniqueID" // Identifier assigned uniquely to each image + }; + + var TiffTags = EXIF.TiffTags = { + 0x0100 : "ImageWidth", + 0x0101 : "ImageHeight", + 0x8769 : "ExifIFDPointer", + 0x8825 : "GPSInfoIFDPointer", + 0xA005 : "InteroperabilityIFDPointer", + 0x0102 : "BitsPerSample", + 0x0103 : "Compression", + 0x0106 : "PhotometricInterpretation", + 0x0112 : "Orientation", + 0x0115 : "SamplesPerPixel", + 0x011C : "PlanarConfiguration", + 0x0212 : "YCbCrSubSampling", + 0x0213 : "YCbCrPositioning", + 0x011A : "XResolution", + 0x011B : "YResolution", + 0x0128 : "ResolutionUnit", + 0x0111 : "StripOffsets", + 0x0116 : "RowsPerStrip", + 0x0117 : "StripByteCounts", + 0x0201 : "JPEGInterchangeFormat", + 0x0202 : "JPEGInterchangeFormatLength", + 0x012D : "TransferFunction", + 0x013E : "WhitePoint", + 0x013F : "PrimaryChromaticities", + 0x0211 : "YCbCrCoefficients", + 0x0214 : "ReferenceBlackWhite", + 0x0132 : "DateTime", + 0x010E : "ImageDescription", + 0x010F : "Make", + 0x0110 : "Model", + 0x0131 : "Software", + 0x013B : "Artist", + 0x8298 : "Copyright", + 0x9c9b : "XPTitle", + 0x9c9c : "XPComment", + 0x9c9d : "XPAuthor", + 0x9c9e : "XPKeywords", + 0x9c9f : "XPSubject" + }; + + var GPSTags = EXIF.GPSTags = { + 0x0000 : "GPSVersionID", + 0x0001 : "GPSLatitudeRef", + 0x0002 : "GPSLatitude", + 0x0003 : "GPSLongitudeRef", + 0x0004 : "GPSLongitude", + 0x0005 : "GPSAltitudeRef", + 0x0006 : "GPSAltitude", + 0x0007 : "GPSTimeStamp", + 0x0008 : "GPSSatellites", + 0x0009 : "GPSStatus", + 0x000A : "GPSMeasureMode", + 0x000B : "GPSDOP", + 0x000C : "GPSSpeedRef", + 0x000D : "GPSSpeed", + 0x000E : "GPSTrackRef", + 0x000F : "GPSTrack", + 0x0010 : "GPSImgDirectionRef", + 0x0011 : "GPSImgDirection", + 0x0012 : "GPSMapDatum", + 0x0013 : "GPSDestLatitudeRef", + 0x0014 : "GPSDestLatitude", + 0x0015 : "GPSDestLongitudeRef", + 0x0016 : "GPSDestLongitude", + 0x0017 : "GPSDestBearingRef", + 0x0018 : "GPSDestBearing", + 0x0019 : "GPSDestDistanceRef", + 0x001A : "GPSDestDistance", + 0x001B : "GPSProcessingMethod", + 0x001C : "GPSAreaInformation", + 0x001D : "GPSDateStamp", + 0x001E : "GPSDifferential" + }; + + var StringValues = EXIF.StringValues = { + ExposureProgram : { + 0 : "Not defined", + 1 : "Manual", + 2 : "Normal program", + 3 : "Aperture priority", + 4 : "Shutter priority", + 5 : "Creative program", + 6 : "Action program", + 7 : "Portrait mode", + 8 : "Landscape mode" + }, + MeteringMode : { + 0 : "Unknown", + 1 : "Average", + 2 : "CenterWeightedAverage", + 3 : "Spot", + 4 : "MultiSpot", + 5 : "Pattern", + 6 : "Partial", + 255 : "Other" + }, + LightSource : { + 0 : "Unknown", + 1 : "Daylight", + 2 : "Fluorescent", + 3 : "Tungsten (incandescent light)", + 4 : "Flash", + 9 : "Fine weather", + 10 : "Cloudy weather", + 11 : "Shade", + 12 : "Daylight fluorescent (D 5700 - 7100K)", + 13 : "Day white fluorescent (N 4600 - 5400K)", + 14 : "Cool white fluorescent (W 3900 - 4500K)", + 15 : "White fluorescent (WW 3200 - 3700K)", + 17 : "Standard light A", + 18 : "Standard light B", + 19 : "Standard light C", + 20 : "D55", + 21 : "D65", + 22 : "D75", + 23 : "D50", + 24 : "ISO studio tungsten", + 255 : "Other" + }, + Flash : { + 0x0000 : "Flash did not fire", + 0x0001 : "Flash fired", + 0x0005 : "Strobe return light not detected", + 0x0007 : "Strobe return light detected", + 0x0009 : "Flash fired, compulsory flash mode", + 0x000D : "Flash fired, compulsory flash mode, return light not detected", + 0x000F : "Flash fired, compulsory flash mode, return light detected", + 0x0010 : "Flash did not fire, compulsory flash mode", + 0x0018 : "Flash did not fire, auto mode", + 0x0019 : "Flash fired, auto mode", + 0x001D : "Flash fired, auto mode, return light not detected", + 0x001F : "Flash fired, auto mode, return light detected", + 0x0020 : "No flash function", + 0x0041 : "Flash fired, red-eye reduction mode", + 0x0045 : "Flash fired, red-eye reduction mode, return light not detected", + 0x0047 : "Flash fired, red-eye reduction mode, return light detected", + 0x0049 : "Flash fired, compulsory flash mode, red-eye reduction mode", + 0x004D : "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", + 0x004F : "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", + 0x0059 : "Flash fired, auto mode, red-eye reduction mode", + 0x005D : "Flash fired, auto mode, return light not detected, red-eye reduction mode", + 0x005F : "Flash fired, auto mode, return light detected, red-eye reduction mode" + }, + SensingMethod : { + 1 : "Not defined", + 2 : "One-chip color area sensor", + 3 : "Two-chip color area sensor", + 4 : "Three-chip color area sensor", + 5 : "Color sequential area sensor", + 7 : "Trilinear sensor", + 8 : "Color sequential linear sensor" + }, + SceneCaptureType : { + 0 : "Standard", + 1 : "Landscape", + 2 : "Portrait", + 3 : "Night scene" + }, + SceneType : { + 1 : "Directly photographed" + }, + CustomRendered : { + 0 : "Normal process", + 1 : "Custom process" + }, + WhiteBalance : { + 0 : "Auto white balance", + 1 : "Manual white balance" + }, + GainControl : { + 0 : "None", + 1 : "Low gain up", + 2 : "High gain up", + 3 : "Low gain down", + 4 : "High gain down" + }, + Contrast : { + 0 : "Normal", + 1 : "Soft", + 2 : "Hard" + }, + Saturation : { + 0 : "Normal", + 1 : "Low saturation", + 2 : "High saturation" + }, + Sharpness : { + 0 : "Normal", + 1 : "Soft", + 2 : "Hard" + }, + SubjectDistanceRange : { + 0 : "Unknown", + 1 : "Macro", + 2 : "Close view", + 3 : "Distant view" + }, + FileSource : { + 3 : "DSC" + }, + + Components : { + 0 : "", + 1 : "Y", + 2 : "Cb", + 3 : "Cr", + 4 : "R", + 5 : "G", + 6 : "B" + } + }; + + function imageHasData(img) { + return !!(img.exifdata); + } + + function getImageData(img, callback) { + function handleBinaryFile(binFile) { + var data = findEXIFinJPEG(binFile); + var iptcdata = findIPTCinJPEG(binFile); + img.exifdata = data || {}; + img.iptcdata = iptcdata || {}; + if (callback) { + callback.call(img); + } + } + + if (img.src) { + var http = new XMLHttpRequest(); + http.onloadend = function() { + if (this.status === 200 || this.status === 0) { + handleBinaryFile(http.response); + } else { + callback(new Error("Could not load image")); + } + http = null; + }; + http.open("GET", img.src, true); + http.responseType = "arraybuffer"; + http.send(null); + } else if (window.FileReader && (img instanceof window.Blob || img instanceof window.File)) { + var fileReader = new FileReader(); + fileReader.onload = function(e) { + if (debug) console.log("Got file of length " + e.target.result.byteLength); + handleBinaryFile(e.target.result); + }; + + fileReader.readAsArrayBuffer(img); + } + } + + function findEXIFinJPEG(file, deepSearch) { + var dataView = new DataView(file); + + var offset = 2, + length = file.byteLength, + marker; + + if (debug) console.log("Got file of length " + file.byteLength); + if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { + switch(dataView.getUint16(0)) { + case 0x4949: + case 0x4D4D: + if ((marker = readEXIFData(dataView, 0, -1))) + return marker; + } + if (!deepSearch) { + if (debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + var pos = 0; + var data = new Uint8Array(file); + while (pos < length) { + if (data[pos] === 0xff && data[pos+1] === 0xd8) break; + ++pos; + } + if (pos == length) return false; // no embed image + offset += pos; + } + + while (offset < length) { + if (dataView.getUint8(offset) != 0xFF) { + if (debug) console.log("Not a valid marker at offset " + offset + ", found: " + dataView.getUint8(offset)); + return false; // not a valid marker, something is wrong + } + + marker = dataView.getUint8(offset + 1); + if (debug) console.log(marker); + + // we could implement handling for other markers here, + // but we're only looking for 0xFFE1 for EXIF data + + if (marker == 225) { + if (debug) console.log("Found 0xFFE1 marker"); + + return readEXIFData(dataView, offset + 4); + + // offset += 2 + file.getShortAt(offset+2, true); + + } else { + offset += 2 + dataView.getUint16(offset+2); + } + + } + + } + + function findIPTCinJPEG(file) { + var dataView = new DataView(file); + + if (debug) console.log("Got file of length " + file.byteLength); + if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { + if (debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + + var offset = 2, + length = file.byteLength; + + + var isFieldSegmentStart = function(dataView, offset){ + return ( + dataView.getUint8(offset) === 0x38 && + dataView.getUint8(offset+1) === 0x42 && + dataView.getUint8(offset+2) === 0x49 && + dataView.getUint8(offset+3) === 0x4D && + dataView.getUint8(offset+4) === 0x04 && + dataView.getUint8(offset+5) === 0x04 + ); + }; + + while (offset < length) { + + if ( isFieldSegmentStart(dataView, offset )){ + + // Get the length of the name header (which is padded to an even number of bytes) + var nameHeaderLength = dataView.getUint8(offset+7); + if(nameHeaderLength % 2 !== 0) nameHeaderLength += 1; + // Check for pre photoshop 6 format + if(nameHeaderLength === 0) { + // Always 4 + nameHeaderLength = 4; + } + + var startOffset = offset + 8 + nameHeaderLength; + var sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength); + + return readIPTCData(file, startOffset, sectionLength); + + break; + + } + + + // Not the marker, continue searching + offset++; + + } + + } + var IptcFieldMap = { + 0x78 : 'caption', + 0x6E : 'credit', + 0x19 : 'keywords', + 0x37 : 'dateCreated', + 0x50 : 'byline', + 0x55 : 'bylineTitle', + 0x7A : 'captionWriter', + 0x69 : 'headline', + 0x74 : 'copyright', + 0x0F : 'category', + 0x10 : 'imageRank', + 0x65 : 'country', + 0x73 : 'source', + 0x5C : 'venue', + 0x5a : 'city', + 0x05 : 'objectName', + 0x07 : 'editStatus', + 0x14 : 'supplementalCategories', + 0x64 : 'countryCode', + 0x5f : 'state', + 0x28 : 'specialInstructions', + 0x65 : 'composition', + 0x4b : 'objectCycle' + }; + function readIPTCData(file, startOffset, sectionLength){ + var dataView = new DataView(file); + var data = {}; + var fieldValue, fieldName, dataSize, segmentType, segmentSize; + var segmentStartPos = startOffset; + while(segmentStartPos < startOffset+sectionLength) { + if(dataView.getUint8(segmentStartPos) === 0x1C && dataView.getUint8(segmentStartPos+1) === 0x02){ + segmentType = dataView.getUint8(segmentStartPos+2); + if(segmentType in IptcFieldMap) { + dataSize = dataView.getInt16(segmentStartPos+3); + segmentSize = dataSize + 5; + fieldName = IptcFieldMap[segmentType]; + fieldValue = getStringFromDB(dataView, segmentStartPos+5, dataSize); + // Check if we already stored a value with this name + if(data.hasOwnProperty(fieldName)) { + // Value already stored with this name, create multivalue field + if(data[fieldName] instanceof Array) { + data[fieldName].push(fieldValue); + } + else { + data[fieldName] = [data[fieldName], fieldValue]; + } + } + else { + data[fieldName] = fieldValue; + } + } + + } + segmentStartPos++; + } + return data; + } + + + + function readTags(file, tiffStart, dirStart, strings, bigEnd) { + var entries = file.getUint16(dirStart, !bigEnd), + tags = {}, + entryOffset, tag, + i; + + for (i=0;i 4 ? valueOffset : (entryOffset + 8); + vals = []; + for (n=0;n 4 ? valueOffset : (entryOffset + 8); + return getStringFromDB(file, offset, numValues-1); + + case 3: // short, 16 bit int + if (numValues == 1) { + return file.getUint16(entryOffset + 8, !bigEnd); + } else { + offset = numValues > 2 ? valueOffset : (entryOffset + 8); + vals = []; + for (n=0;n min + // don't set minscale smaller than 1/scale + // -> don't pick crops that need upscaling + options.minScale = min(options.maxScale || SmartCrop.DEFAULTS.maxScale, max(1/scale, (options.minScale||SmartCrop.DEFAULTS.minScale))); + } + var smartCrop = new SmartCrop(options); + if(options.width && options.height) { + if(options.prescale !== false){ + prescale = 1/scale/options.minScale; + if(prescale < 1) { + image = await smartCrop.resample(image, image.width*prescale, image.height*prescale); + smartCrop.options.cropWidth = ~~(options.cropWidth*prescale); + smartCrop.options.cropHeight = ~~(options.cropHeight*prescale); + } + else { + prescale = 1; + } + } + } + const result = await smartCrop.analyse(image); + for(var i = 0, i_len = result.crops.length; i < i_len; i++) { + var crop = result.crops[i]; + crop.x = ~~(crop.x/prescale); + crop.y = ~~(crop.y/prescale); + crop.width = ~~(crop.width/prescale); + crop.height = ~~(crop.height/prescale); + } + if(callback) callback(result); + return result; +}; +// check if all the dependencies are there +SmartCrop.isAvailable = function(options){ + try { + var s = new this(options), + c = s.canvas(16, 16); + return typeof c.getContext === 'function'; + } + catch(e){ + return false; + } +}; +SmartCrop.prototype = { + canvas: function(w, h){ + if(this.options.canvasFactory !== null){ + return this.options.canvasFactory(w, h); + } + var c = document.createElement('canvas'); + c.width = w; + c.height = h; + return c; + }, + edgeDetect: function(i, o){ + var id = i.data, + od = o.data, + w = i.width, + h = i.height; + for(var y = 0; y < h; y++) { + for(var x = 0; x < w; x++) { + var p = (y*w+x)*4, + lightness; + if(x === 0 || x >= w-1 || y === 0 || y >= h-1){ + lightness = sample(id, p); + } + else { + lightness = sample(id, p)*4 - sample(id, p-w*4) - sample(id, p-4) - sample(id, p+4) - sample(id, p+w*4); + } + od[p+1] = lightness; + } + } + }, + skinDetect: function(i, o){ + var id = i.data, + od = o.data, + w = i.width, + h = i.height, + options = this.options; + for(var y = 0; y < h; y++) { + for(var x = 0; x < w; x++) { + var p = (y*w+x)*4, + lightness = cie(id[p], id[p+1], id[p+2])/255, + skin = this.skinColor(id[p], id[p+1], id[p+2]); + if(skin > options.skinThreshold && lightness >= options.skinBrightnessMin && lightness <= options.skinBrightnessMax){ + od[p] = (skin-options.skinThreshold)*(255/(1-options.skinThreshold)); + } + else { + od[p] = 0; + } + } + } + }, + saturationDetect: function(i, o){ + var id = i.data, + od = o.data, + w = i.width, + h = i.height, + options = this.options; + for(var y = 0; y < h; y++) { + for(var x = 0; x < w; x++) { + var p = (y*w+x)*4, + lightness = cie(id[p], id[p+1], id[p+2])/255, + sat = saturation(id[p], id[p+1], id[p+2]); + if(sat > options.saturationThreshold && lightness >= options.saturationBrightnessMin && lightness <= options.saturationBrightnessMax){ + od[p+2] = (sat-options.saturationThreshold)*(255/(1-options.saturationThreshold)); + } + else { + od[p+2] = 0; + } + } + } + }, + crops: function(image){ + var crops = [], + width = image.width, + height = image.height, + options = this.options, + minDimension = min(width, height), + cropWidth = options.cropWidth || minDimension, + cropHeight = options.cropHeight || minDimension; + for(var scale = options.maxScale; scale >= options.minScale; scale -= options.scaleStep){ + for(var y = 0; y+cropHeight*scale <= height; y+=options.step) { + for(var x = 0; x+cropWidth*scale <= width; x+=options.step) { + crops.push({ + x: x, + y: y, + width: cropWidth*scale, + height: cropHeight*scale + }); + } + } + } + return crops; + }, + score: function(output, crop){ + var score = { + detail: 0, + saturation: 0, + skin: 0, + total: 0 + }, + options = this.options, + od = output.data, + downSample = options.scoreDownSample, + invDownSample = 1/downSample, + outputHeightDownSample = output.height*downSample, + outputWidthDownSample = output.width*downSample, + outputWidth = output.width; + for(var y = 0; y < outputHeightDownSample; y+=downSample) { + for(var x = 0; x < outputWidthDownSample; x+=downSample) { + var p = (~~(y*invDownSample)*outputWidth+~~(x*invDownSample))*4, + importance = this.importance(crop, x, y), + detail = od[p+1]/255; + score.skin += od[p]/255*(detail+options.skinBias)*importance; + score.detail += detail*importance; + score.saturation += od[p+2]/255*(detail+options.saturationBias)*importance; + } + + } + score.total = (score.detail*options.detailWeight + score.skin*options.skinWeight + score.saturation*options.saturationWeight)/crop.width/crop.height; + return score; + }, + importance: function(crop, x, y){ + var options = this.options; + + if (crop.x > x || x >= crop.x+crop.width || crop.y > y || y >= crop.y+crop.height) return options.outsideImportance; + x = (x-crop.x)/crop.width; + y = (y-crop.y)/crop.height; + var px = abs(0.5-x)*2, + py = abs(0.5-y)*2, + // distance from edge + dx = Math.max(px-1.0+options.edgeRadius, 0), + dy = Math.max(py-1.0+options.edgeRadius, 0), + d = (dx*dx+dy*dy)*options.edgeWeight; + var s = 1.41-sqrt(px*px+py*py); + if(options.ruleOfThirds){ + s += (Math.max(0, s+d+0.5)*1.2)*(thirds(px)+thirds(py)); + } + return s+d; + }, + skinColor: function(r, g, b){ + var mag = sqrt(r*r+g*g+b*b), + options = this.options, + rd = (r/mag-options.skinColor[0]), + gd = (g/mag-options.skinColor[1]), + bd = (b/mag-options.skinColor[2]), + d = sqrt(rd*rd+gd*gd+bd*bd); + return 1-d; + }, + async resample(image, width, height){ + const canvas = this.canvas(width, height); + const ctx = canvas.getContext('2d'); + if(this.options.resampleWithImageBitmap) { + const options = { + resizeWidth: width, + resizeHeight: height, + resizeQuality: 'high' + }; + const bitmap = await createImageBitmap(image, options) + .catch((ex) => { + SmartCrop.dump('createImageBitmap failed!', ex); + }); + if (bitmap) { + ctx.drawImage(bitmap, 0, 0); + return canvas; + } + } + if(image instanceof ImageData) { + SmartCrop.dump('Got an ImageData, do use ImageBitmap which should be faster!'); + const canvas2 = this.canvas(image.width, image.height); + canvas2.getContext('2d').putImageData(image, 0, 0); + image = canvas2; + } + if(this.options.antialias && ctx.filter === 'none') { + const cv = this.canvas(image.width, image.height); + const cx = cv.getContext('2d'); + cx.filter = `blur(${(cv.width / canvas.width) >> 1}px)`; + cx.drawImage(image, 0, 0); + image = cv; + } + ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height); + return canvas; + }, + async analyse(image){ + var result = {}, + options = this.options, + canvas, ctx; + if(self.OffscreenCanvas && image instanceof OffscreenCanvas || self.HTMLCanvasElement && image instanceof HTMLCanvasElement) { + canvas = image; + ctx = canvas.getContext('2d'); + } + else { + canvas = this.canvas(image.width, image.height); + ctx = canvas.getContext('2d'); + ctx.drawImage(image, 0, 0); + } + var input = ctx.getImageData(0, 0, canvas.width, canvas.height), + output = ctx.getImageData(0, 0, canvas.width, canvas.height); + this.edgeDetect(input, output); + this.skinDetect(input, output); + this.saturationDetect(input, output); + + ctx.putImageData(output, 0, 0); + const scoreCanvas = await this.resample(canvas, ceil(image.width / options.scoreDownSample), ceil(image.height / options.scoreDownSample)), + scoreCtx = scoreCanvas.getContext('2d'); + + var scoreOutput = scoreCtx.getImageData(0, 0, scoreCanvas.width, scoreCanvas.height); + + var topScore = -Infinity, + topCrop = null, + crops = this.crops(image); + + for(var i = 0, i_len = crops.length; i < i_len; i++) { + var crop = crops[i]; + crop.score = this.score(scoreOutput, crop); + if(crop.score.total > topScore){ + topCrop = crop; + topScore = crop.score.total; + } + + } + + result.crops = crops; + result.topCrop = topCrop; + + if(options.debug && topCrop){ + ctx.fillStyle = 'rgba(255, 0, 0, 0.1)'; + ctx.fillRect(topCrop.x, topCrop.y, topCrop.width, topCrop.height); + for (var y = 0; y < output.height; y++) { + for (var x = 0; x < output.width; x++) { + var p = (y * output.width + x) * 4; + var importance = this.importance(topCrop, x, y); + if (importance > 0) { + output.data[p + 1] += importance * 32; + } + + if (importance < 0) { + output.data[p] += importance * -64; + } + output.data[p + 3] = 255; + } + } + ctx.putImageData(output, 0, 0); + ctx.strokeStyle = 'rgba(255, 0, 0, 0.8)'; + ctx.strokeRect(topCrop.x, topCrop.y, topCrop.width, topCrop.height); + result.debugCanvas = canvas; + } + return result; + } +}; + +// aliases and helpers +var min = Math.min, + max = Math.max, + abs = Math.abs, + ceil = Math.ceil, + sqrt = Math.sqrt; + +// gets value in the range of [0, 1] where 0 is the center of the pictures +// returns weight of rule of thirds [0, 1] +function thirds(x){ + x = ((x-(1/3)+1.0)%2.0*0.5-0.5)*16; + return Math.max(1.0-x*x, 0.0); +} + +function cie(r, g, b){ + return 0.5126*b + 0.7152*g + 0.0722*r; +} +function sample(id, p) { + return cie(id[p], id[p+1], id[p+2]); +} +function saturation(r, g, b){ + var maximum = max(r/255, g/255, b/255), minumum = min(r/255, g/255, b/255); + if(maximum === minumum){ + return 0; + } + var l = (maximum + minumum) / 2, + d = maximum-minumum; + return l > 0.5 ? d/(2-maximum-minumum) : d/(maximum+minumum); +} + +const warn = console.warn.bind(console, '[SmartCrop]'); + +if (typeof lazy === 'function') { + lazy(SmartCrop, 'dump', () => self.dump || warn); +} +else { + SmartCrop.dump = self.dump || warn; +} + +// amd +if (typeof define !== 'undefined' && define.amd) define(function(){return SmartCrop;}); +//common js +if (typeof exports !== 'undefined') exports.SmartCrop = SmartCrop; +// browser +else if (typeof navigator !== 'undefined') window.SmartCrop = SmartCrop; +// nodejs +if (typeof module !== 'undefined') { + module.exports = SmartCrop; +} +})(); + +(function( $ ){ + $.fn.qrcode = function(options) { + // if options is string, + if( typeof options === 'string' ){ + options = { text: options }; + } + + // set default values + // typeNumber < 1 for automatic calculation + options = $.extend( {}, { + render : "canvas", + width : 256, + height : 256, + typeNumber : -1, + correctLevel : QRErrorCorrectLevel.H, + background : "#ffffff", + foreground : "#000000" + }, options); + + var createCanvas = function(){ + // create the qrcode itself + var qrcode = new QRCode(options.typeNumber, options.correctLevel); + qrcode.addData(options.text); + qrcode.make(); + + // create canvas element + var canvas = document.createElement('canvas'); + canvas.width = options.width; + canvas.height = options.height; + var ctx = canvas.getContext('2d'); + + // compute tileW/tileH based on options.width/options.height + var tileW = options.width / qrcode.getModuleCount(); + var tileH = options.height / qrcode.getModuleCount(); + + // draw in the canvas + for( var row = 0; row < qrcode.getModuleCount(); row++ ){ + for( var col = 0; col < qrcode.getModuleCount(); col++ ){ + ctx.fillStyle = qrcode.isDark(row, col) ? options.foreground : options.background; + var w = (Math.ceil((col+1)*tileW) - Math.floor(col*tileW)); + var h = (Math.ceil((row+1)*tileH) - Math.floor(row*tileH)); + ctx.fillRect(Math.round(col*tileW),Math.round(row*tileH), w, h); + } + } + // return just built canvas + return canvas; + } + + // from Jon-Carlos Rivera (https://github.com/imbcmdth) + var createTable = function(){ + // create the qrcode itself + var qrcode = new QRCode(options.typeNumber, options.correctLevel); + qrcode.addData(options.text); + qrcode.make(); + + // create table element + var $table = $('
          ') + .css("width", options.width+"px") + .css("height", options.height+"px") + .css("border", "0px") + .css("border-collapse", "collapse") + .css('background-color', options.background); + + // compute tileS percentage + var tileW = options.width / qrcode.getModuleCount(); + var tileH = options.height / qrcode.getModuleCount(); + + // draw in the table + for(var row = 0; row < qrcode.getModuleCount(); row++ ){ + var $row = $('').css('height', tileH+"px").appendTo($table); + + for(var col = 0; col < qrcode.getModuleCount(); col++ ){ + $('') + .css('width', tileW+"px") + .css('background-color', qrcode.isDark(row, col) ? options.foreground : options.background) + .appendTo($row); + } + } + // return just built canvas + return $table; + } + + + return this.each(function(){ + var element = options.render == "canvas" ? createCanvas() : createTable(); + $(element).appendTo(this); + }); + }; +})( jQuery ); + +//--------------------------------------------------------------------- +// QRCode for JavaScript +// +// Copyright (c) 2009 Kazuhiko Arase +// +// URL: http://www.d-project.com/ +// +// Licensed under the MIT license: +// http://www.opensource.org/licenses/mit-license.php +// +// The word "QR Code" is registered trademark of +// DENSO WAVE INCORPORATED +// http://www.denso-wave.com/qrcode/faqpatent-e.html +// +//--------------------------------------------------------------------- + +//--------------------------------------------------------------------- +// QR8bitByte +//--------------------------------------------------------------------- + +function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; +} + +QR8bitByte.prototype = { + + getLength : function(buffer) { + return this.data.length; + }, + + write : function(buffer) { + for (var i = 0; i < this.data.length; i++) { + // not JIS ... + buffer.put(this.data.charCodeAt(i), 8); + } + } +}; + +//--------------------------------------------------------------------- +// QRCode +//--------------------------------------------------------------------- + +function QRCode(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = new Array(); +} + +QRCode.prototype = { + + addData : function(data) { + var newData = new QR8bitByte(data); + this.dataList.push(newData); + this.dataCache = null; + }, + + isDark : function(row, col) { + if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) { + throw new Error(row + "," + col); + } + return this.modules[row][col]; + }, + + getModuleCount : function() { + return this.moduleCount; + }, + + make : function() { + // Calculate automatically typeNumber if provided is < 1 + if (this.typeNumber < 1 ){ + var typeNumber = 1; + for (typeNumber = 1; typeNumber < 40; typeNumber++) { + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel); + + var buffer = new QRBitBuffer(); + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + for (var i = 0; i < this.dataList.length; i++) { + var data = this.dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) ); + data.write(buffer); + } + if (buffer.getLengthInBits() <= totalDataCount * 8) + break; + } + this.typeNumber = typeNumber; + } + this.makeImpl(false, this.getBestMaskPattern() ); + }, + + makeImpl : function(test, maskPattern) { + + this.moduleCount = this.typeNumber * 4 + 17; + this.modules = new Array(this.moduleCount); + + for (var row = 0; row < this.moduleCount; row++) { + + this.modules[row] = new Array(this.moduleCount); + + for (var col = 0; col < this.moduleCount; col++) { + this.modules[row][col] = null;//(col + row) % 3; + } + } + + this.setupPositionProbePattern(0, 0); + this.setupPositionProbePattern(this.moduleCount - 7, 0); + this.setupPositionProbePattern(0, this.moduleCount - 7); + this.setupPositionAdjustPattern(); + this.setupTimingPattern(); + this.setupTypeInfo(test, maskPattern); + + if (this.typeNumber >= 7) { + this.setupTypeNumber(test); + } + + if (this.dataCache == null) { + this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList); + } + + this.mapData(this.dataCache, maskPattern); + }, + + setupPositionProbePattern : function(row, col) { + + for (var r = -1; r <= 7; r++) { + + if (row + r <= -1 || this.moduleCount <= row + r) continue; + + for (var c = -1; c <= 7; c++) { + + if (col + c <= -1 || this.moduleCount <= col + c) continue; + + if ( (0 <= r && r <= 6 && (c == 0 || c == 6) ) + || (0 <= c && c <= 6 && (r == 0 || r == 6) ) + || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + }, + + getBestMaskPattern : function() { + + var minLostPoint = 0; + var pattern = 0; + + for (var i = 0; i < 8; i++) { + + this.makeImpl(true, i); + + var lostPoint = QRUtil.getLostPoint(this); + + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + } + } + + return pattern; + }, + + createMovieClip : function(target_mc, instance_name, depth) { + + var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth); + var cs = 1; + + this.make(); + + for (var row = 0; row < this.modules.length; row++) { + + var y = row * cs; + + for (var col = 0; col < this.modules[row].length; col++) { + + var x = col * cs; + var dark = this.modules[row][col]; + + if (dark) { + qr_mc.beginFill(0, 100); + qr_mc.moveTo(x, y); + qr_mc.lineTo(x + cs, y); + qr_mc.lineTo(x + cs, y + cs); + qr_mc.lineTo(x, y + cs); + qr_mc.endFill(); + } + } + } + + return qr_mc; + }, + + setupTimingPattern : function() { + + for (var r = 8; r < this.moduleCount - 8; r++) { + if (this.modules[r][6] != null) { + continue; + } + this.modules[r][6] = (r % 2 == 0); + } + + for (var c = 8; c < this.moduleCount - 8; c++) { + if (this.modules[6][c] != null) { + continue; + } + this.modules[6][c] = (c % 2 == 0); + } + }, + + setupPositionAdjustPattern : function() { + + var pos = QRUtil.getPatternPosition(this.typeNumber); + + for (var i = 0; i < pos.length; i++) { + + for (var j = 0; j < pos.length; j++) { + + var row = pos[i]; + var col = pos[j]; + + if (this.modules[row][col] != null) { + continue; + } + + for (var r = -2; r <= 2; r++) { + + for (var c = -2; c <= 2; c++) { + + if (r == -2 || r == 2 || c == -2 || c == 2 + || (r == 0 && c == 0) ) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + } + } + }, + + setupTypeNumber : function(test) { + + var bits = QRUtil.getBCHTypeNumber(this.typeNumber); + + for (var i = 0; i < 18; i++) { + var mod = (!test && ( (bits >> i) & 1) == 1); + this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod; + } + + for (var i = 0; i < 18; i++) { + var mod = (!test && ( (bits >> i) & 1) == 1); + this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + } + }, + + setupTypeInfo : function(test, maskPattern) { + + var data = (this.errorCorrectLevel << 3) | maskPattern; + var bits = QRUtil.getBCHTypeInfo(data); + + // vertical + for (var i = 0; i < 15; i++) { + + var mod = (!test && ( (bits >> i) & 1) == 1); + + if (i < 6) { + this.modules[i][8] = mod; + } else if (i < 8) { + this.modules[i + 1][8] = mod; + } else { + this.modules[this.moduleCount - 15 + i][8] = mod; + } + } + + // horizontal + for (var i = 0; i < 15; i++) { + + var mod = (!test && ( (bits >> i) & 1) == 1); + + if (i < 8) { + this.modules[8][this.moduleCount - i - 1] = mod; + } else if (i < 9) { + this.modules[8][15 - i - 1 + 1] = mod; + } else { + this.modules[8][15 - i - 1] = mod; + } + } + + // fixed module + this.modules[this.moduleCount - 8][8] = (!test); + + }, + + mapData : function(data, maskPattern) { + + var inc = -1; + var row = this.moduleCount - 1; + var bitIndex = 7; + var byteIndex = 0; + + for (var col = this.moduleCount - 1; col > 0; col -= 2) { + + if (col == 6) col--; + + while (true) { + + for (var c = 0; c < 2; c++) { + + if (this.modules[row][col - c] == null) { + + var dark = false; + + if (byteIndex < data.length) { + dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1); + } + + var mask = QRUtil.getMask(maskPattern, row, col - c); + + if (mask) { + dark = !dark; + } + + this.modules[row][col - c] = dark; + bitIndex--; + + if (bitIndex == -1) { + byteIndex++; + bitIndex = 7; + } + } + } + + row += inc; + + if (row < 0 || this.moduleCount <= row) { + row -= inc; + inc = -inc; + break; + } + } + } + + } + +}; + +QRCode.PAD0 = 0xEC; +QRCode.PAD1 = 0x11; + +QRCode.createData = function(typeNumber, errorCorrectLevel, dataList) { + + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); + + var buffer = new QRBitBuffer(); + + for (var i = 0; i < dataList.length; i++) { + var data = dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) ); + data.write(buffer); + } + + // calc num max data. + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + if (buffer.getLengthInBits() > totalDataCount * 8) { + throw new Error("code length overflow. (" + + buffer.getLengthInBits() + + ">" + + totalDataCount * 8 + + ")"); + } + + // end code + if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { + buffer.put(0, 4); + } + + // padding + while (buffer.getLengthInBits() % 8 != 0) { + buffer.putBit(false); + } + + // padding + while (true) { + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD0, 8); + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD1, 8); + } + + return QRCode.createBytes(buffer, rsBlocks); +} + +QRCode.createBytes = function(buffer, rsBlocks) { + + var offset = 0; + + var maxDcCount = 0; + var maxEcCount = 0; + + var dcdata = new Array(rsBlocks.length); + var ecdata = new Array(rsBlocks.length); + + for (var r = 0; r < rsBlocks.length; r++) { + + var dcCount = rsBlocks[r].dataCount; + var ecCount = rsBlocks[r].totalCount - dcCount; + + maxDcCount = Math.max(maxDcCount, dcCount); + maxEcCount = Math.max(maxEcCount, ecCount); + + dcdata[r] = new Array(dcCount); + + for (var i = 0; i < dcdata[r].length; i++) { + dcdata[r][i] = 0xff & buffer.buffer[i + offset]; + } + offset += dcCount; + + var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); + var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1); + + var modPoly = rawPoly.mod(rsPoly); + ecdata[r] = new Array(rsPoly.getLength() - 1); + for (var i = 0; i < ecdata[r].length; i++) { + var modIndex = i + modPoly.getLength() - ecdata[r].length; + ecdata[r][i] = (modIndex >= 0)? modPoly.get(modIndex) : 0; + } + + } + + var totalCodeCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalCodeCount += rsBlocks[i].totalCount; + } + + var data = new Array(totalCodeCount); + var index = 0; + + for (var i = 0; i < maxDcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < dcdata[r].length) { + data[index++] = dcdata[r][i]; + } + } + } + + for (var i = 0; i < maxEcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < ecdata[r].length) { + data[index++] = ecdata[r][i]; + } + } + } + + return data; + +} + +//--------------------------------------------------------------------- +// QRMode +//--------------------------------------------------------------------- + +var QRMode = { + MODE_NUMBER : 1 << 0, + MODE_ALPHA_NUM : 1 << 1, + MODE_8BIT_BYTE : 1 << 2, + MODE_KANJI : 1 << 3 +}; + +//--------------------------------------------------------------------- +// QRErrorCorrectLevel +//--------------------------------------------------------------------- + +var QRErrorCorrectLevel = { + L : 1, + M : 0, + Q : 3, + H : 2 +}; + +//--------------------------------------------------------------------- +// QRMaskPattern +//--------------------------------------------------------------------- + +var QRMaskPattern = { + PATTERN000 : 0, + PATTERN001 : 1, + PATTERN010 : 2, + PATTERN011 : 3, + PATTERN100 : 4, + PATTERN101 : 5, + PATTERN110 : 6, + PATTERN111 : 7 +}; + +//--------------------------------------------------------------------- +// QRUtil +//--------------------------------------------------------------------- + +var QRUtil = { + + PATTERN_POSITION_TABLE : [ + [], + [6, 18], + [6, 22], + [6, 26], + [6, 30], + [6, 34], + [6, 22, 38], + [6, 24, 42], + [6, 26, 46], + [6, 28, 50], + [6, 30, 54], + [6, 32, 58], + [6, 34, 62], + [6, 26, 46, 66], + [6, 26, 48, 70], + [6, 26, 50, 74], + [6, 30, 54, 78], + [6, 30, 56, 82], + [6, 30, 58, 86], + [6, 34, 62, 90], + [6, 28, 50, 72, 94], + [6, 26, 50, 74, 98], + [6, 30, 54, 78, 102], + [6, 28, 54, 80, 106], + [6, 32, 58, 84, 110], + [6, 30, 58, 86, 114], + [6, 34, 62, 90, 118], + [6, 26, 50, 74, 98, 122], + [6, 30, 54, 78, 102, 126], + [6, 26, 52, 78, 104, 130], + [6, 30, 56, 82, 108, 134], + [6, 34, 60, 86, 112, 138], + [6, 30, 58, 86, 114, 142], + [6, 34, 62, 90, 118, 146], + [6, 30, 54, 78, 102, 126, 150], + [6, 24, 50, 76, 102, 128, 154], + [6, 28, 54, 80, 106, 132, 158], + [6, 32, 58, 84, 110, 136, 162], + [6, 26, 54, 82, 110, 138, 166], + [6, 30, 58, 86, 114, 142, 170] + ], + + G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0), + G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0), + G15_MASK : (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1), + + getBCHTypeInfo : function(data) { + var d = data << 10; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) { + d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); + } + return ( (data << 10) | d) ^ QRUtil.G15_MASK; + }, + + getBCHTypeNumber : function(data) { + var d = data << 12; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) { + d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); + } + return (data << 12) | d; + }, + + getBCHDigit : function(data) { + + var digit = 0; + + while (data != 0) { + digit++; + data >>>= 1; + } + + return digit; + }, + + getPatternPosition : function(typeNumber) { + return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]; + }, + + getMask : function(maskPattern, i, j) { + + switch (maskPattern) { + + case QRMaskPattern.PATTERN000 : return (i + j) % 2 == 0; + case QRMaskPattern.PATTERN001 : return i % 2 == 0; + case QRMaskPattern.PATTERN010 : return j % 3 == 0; + case QRMaskPattern.PATTERN011 : return (i + j) % 3 == 0; + case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; + case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 == 0; + case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; + case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; + + default : + throw new Error("bad maskPattern:" + maskPattern); + } + }, + + getErrorCorrectPolynomial : function(errorCorrectLength) { + + var a = new QRPolynomial([1], 0); + + for (var i = 0; i < errorCorrectLength; i++) { + a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0) ); + } + + return a; + }, + + getLengthInBits : function(mode, type) { + + if (1 <= type && type < 10) { + + // 1 - 9 + + switch(mode) { + case QRMode.MODE_NUMBER : return 10; + case QRMode.MODE_ALPHA_NUM : return 9; + case QRMode.MODE_8BIT_BYTE : return 8; + case QRMode.MODE_KANJI : return 8; + default : + throw new Error("mode:" + mode); + } + + } else if (type < 27) { + + // 10 - 26 + + switch(mode) { + case QRMode.MODE_NUMBER : return 12; + case QRMode.MODE_ALPHA_NUM : return 11; + case QRMode.MODE_8BIT_BYTE : return 16; + case QRMode.MODE_KANJI : return 10; + default : + throw new Error("mode:" + mode); + } + + } else if (type < 41) { + + // 27 - 40 + + switch(mode) { + case QRMode.MODE_NUMBER : return 14; + case QRMode.MODE_ALPHA_NUM : return 13; + case QRMode.MODE_8BIT_BYTE : return 16; + case QRMode.MODE_KANJI : return 12; + default : + throw new Error("mode:" + mode); + } + + } else { + throw new Error("type:" + type); + } + }, + + getLostPoint : function(qrCode) { + + var moduleCount = qrCode.getModuleCount(); + + var lostPoint = 0; + + // LEVEL1 + + for (var row = 0; row < moduleCount; row++) { + + for (var col = 0; col < moduleCount; col++) { + + var sameCount = 0; + var dark = qrCode.isDark(row, col); + + for (var r = -1; r <= 1; r++) { + + if (row + r < 0 || moduleCount <= row + r) { + continue; + } + + for (var c = -1; c <= 1; c++) { + + if (col + c < 0 || moduleCount <= col + c) { + continue; + } + + if (r == 0 && c == 0) { + continue; + } + + if (dark == qrCode.isDark(row + r, col + c) ) { + sameCount++; + } + } + } + + if (sameCount > 5) { + lostPoint += (3 + sameCount - 5); + } + } + } + + // LEVEL2 + + for (var row = 0; row < moduleCount - 1; row++) { + for (var col = 0; col < moduleCount - 1; col++) { + var count = 0; + if (qrCode.isDark(row, col ) ) count++; + if (qrCode.isDark(row + 1, col ) ) count++; + if (qrCode.isDark(row, col + 1) ) count++; + if (qrCode.isDark(row + 1, col + 1) ) count++; + if (count == 0 || count == 4) { + lostPoint += 3; + } + } + } + + // LEVEL3 + + for (var row = 0; row < moduleCount; row++) { + for (var col = 0; col < moduleCount - 6; col++) { + if (qrCode.isDark(row, col) + && !qrCode.isDark(row, col + 1) + && qrCode.isDark(row, col + 2) + && qrCode.isDark(row, col + 3) + && qrCode.isDark(row, col + 4) + && !qrCode.isDark(row, col + 5) + && qrCode.isDark(row, col + 6) ) { + lostPoint += 40; + } + } + } + + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount - 6; row++) { + if (qrCode.isDark(row, col) + && !qrCode.isDark(row + 1, col) + && qrCode.isDark(row + 2, col) + && qrCode.isDark(row + 3, col) + && qrCode.isDark(row + 4, col) + && !qrCode.isDark(row + 5, col) + && qrCode.isDark(row + 6, col) ) { + lostPoint += 40; + } + } + } + + // LEVEL4 + + var darkCount = 0; + + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount; row++) { + if (qrCode.isDark(row, col) ) { + darkCount++; + } + } + } + + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; + + return lostPoint; + } + +}; + + +//--------------------------------------------------------------------- +// QRMath +//--------------------------------------------------------------------- + +var QRMath = { + + glog : function(n) { + + if (n < 1) { + throw new Error("glog(" + n + ")"); + } + + return QRMath.LOG_TABLE[n]; + }, + + gexp : function(n) { + + while (n < 0) { + n += 255; + } + + while (n >= 256) { + n -= 255; + } + + return QRMath.EXP_TABLE[n]; + }, + + EXP_TABLE : new Array(256), + + LOG_TABLE : new Array(256) + +}; + +for (var i = 0; i < 8; i++) { + QRMath.EXP_TABLE[i] = 1 << i; +} +for (var i = 8; i < 256; i++) { + QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] + ^ QRMath.EXP_TABLE[i - 5] + ^ QRMath.EXP_TABLE[i - 6] + ^ QRMath.EXP_TABLE[i - 8]; +} +for (var i = 0; i < 255; i++) { + QRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i; +} + +//--------------------------------------------------------------------- +// QRPolynomial +//--------------------------------------------------------------------- + +function QRPolynomial(num, shift) { + + if (num.length == undefined) { + throw new Error(num.length + "/" + shift); + } + + var offset = 0; + + while (offset < num.length && num[offset] == 0) { + offset++; + } + + this.num = new Array(num.length - offset + shift); + for (var i = 0; i < num.length - offset; i++) { + this.num[i] = num[i + offset]; + } +} + +QRPolynomial.prototype = { + + get : function(index) { + return this.num[index]; + }, + + getLength : function() { + return this.num.length; + }, + + multiply : function(e) { + + var num = new Array(this.getLength() + e.getLength() - 1); + + for (var i = 0; i < this.getLength(); i++) { + for (var j = 0; j < e.getLength(); j++) { + num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i) ) + QRMath.glog(e.get(j) ) ); + } + } + + return new QRPolynomial(num, 0); + }, + + mod : function(e) { + + if (this.getLength() - e.getLength() < 0) { + return this; + } + + var ratio = QRMath.glog(this.get(0) ) - QRMath.glog(e.get(0) ); + + var num = new Array(this.getLength() ); + + for (var i = 0; i < this.getLength(); i++) { + num[i] = this.get(i); + } + + for (var i = 0; i < e.getLength(); i++) { + num[i] ^= QRMath.gexp(QRMath.glog(e.get(i) ) + ratio); + } + + // recursive call + return new QRPolynomial(num, 0).mod(e); + } +}; + +//--------------------------------------------------------------------- +// QRRSBlock +//--------------------------------------------------------------------- + +function QRRSBlock(totalCount, dataCount) { + this.totalCount = totalCount; + this.dataCount = dataCount; +} + +QRRSBlock.RS_BLOCK_TABLE = [ + + // L + // M + // Q + // H + + // 1 + [1, 26, 19], + [1, 26, 16], + [1, 26, 13], + [1, 26, 9], + + // 2 + [1, 44, 34], + [1, 44, 28], + [1, 44, 22], + [1, 44, 16], + + // 3 + [1, 70, 55], + [1, 70, 44], + [2, 35, 17], + [2, 35, 13], + + // 4 + [1, 100, 80], + [2, 50, 32], + [2, 50, 24], + [4, 25, 9], + + // 5 + [1, 134, 108], + [2, 67, 43], + [2, 33, 15, 2, 34, 16], + [2, 33, 11, 2, 34, 12], + + // 6 + [2, 86, 68], + [4, 43, 27], + [4, 43, 19], + [4, 43, 15], + + // 7 + [2, 98, 78], + [4, 49, 31], + [2, 32, 14, 4, 33, 15], + [4, 39, 13, 1, 40, 14], + + // 8 + [2, 121, 97], + [2, 60, 38, 2, 61, 39], + [4, 40, 18, 2, 41, 19], + [4, 40, 14, 2, 41, 15], + + // 9 + [2, 146, 116], + [3, 58, 36, 2, 59, 37], + [4, 36, 16, 4, 37, 17], + [4, 36, 12, 4, 37, 13], + + // 10 + [2, 86, 68, 2, 87, 69], + [4, 69, 43, 1, 70, 44], + [6, 43, 19, 2, 44, 20], + [6, 43, 15, 2, 44, 16], + + // 11 + [4, 101, 81], + [1, 80, 50, 4, 81, 51], + [4, 50, 22, 4, 51, 23], + [3, 36, 12, 8, 37, 13], + + // 12 + [2, 116, 92, 2, 117, 93], + [6, 58, 36, 2, 59, 37], + [4, 46, 20, 6, 47, 21], + [7, 42, 14, 4, 43, 15], + + // 13 + [4, 133, 107], + [8, 59, 37, 1, 60, 38], + [8, 44, 20, 4, 45, 21], + [12, 33, 11, 4, 34, 12], + + // 14 + [3, 145, 115, 1, 146, 116], + [4, 64, 40, 5, 65, 41], + [11, 36, 16, 5, 37, 17], + [11, 36, 12, 5, 37, 13], + + // 15 + [5, 109, 87, 1, 110, 88], + [5, 65, 41, 5, 66, 42], + [5, 54, 24, 7, 55, 25], + [11, 36, 12], + + // 16 + [5, 122, 98, 1, 123, 99], + [7, 73, 45, 3, 74, 46], + [15, 43, 19, 2, 44, 20], + [3, 45, 15, 13, 46, 16], + + // 17 + [1, 135, 107, 5, 136, 108], + [10, 74, 46, 1, 75, 47], + [1, 50, 22, 15, 51, 23], + [2, 42, 14, 17, 43, 15], + + // 18 + [5, 150, 120, 1, 151, 121], + [9, 69, 43, 4, 70, 44], + [17, 50, 22, 1, 51, 23], + [2, 42, 14, 19, 43, 15], + + // 19 + [3, 141, 113, 4, 142, 114], + [3, 70, 44, 11, 71, 45], + [17, 47, 21, 4, 48, 22], + [9, 39, 13, 16, 40, 14], + + // 20 + [3, 135, 107, 5, 136, 108], + [3, 67, 41, 13, 68, 42], + [15, 54, 24, 5, 55, 25], + [15, 43, 15, 10, 44, 16], + + // 21 + [4, 144, 116, 4, 145, 117], + [17, 68, 42], + [17, 50, 22, 6, 51, 23], + [19, 46, 16, 6, 47, 17], + + // 22 + [2, 139, 111, 7, 140, 112], + [17, 74, 46], + [7, 54, 24, 16, 55, 25], + [34, 37, 13], + + // 23 + [4, 151, 121, 5, 152, 122], + [4, 75, 47, 14, 76, 48], + [11, 54, 24, 14, 55, 25], + [16, 45, 15, 14, 46, 16], + + // 24 + [6, 147, 117, 4, 148, 118], + [6, 73, 45, 14, 74, 46], + [11, 54, 24, 16, 55, 25], + [30, 46, 16, 2, 47, 17], + + // 25 + [8, 132, 106, 4, 133, 107], + [8, 75, 47, 13, 76, 48], + [7, 54, 24, 22, 55, 25], + [22, 45, 15, 13, 46, 16], + + // 26 + [10, 142, 114, 2, 143, 115], + [19, 74, 46, 4, 75, 47], + [28, 50, 22, 6, 51, 23], + [33, 46, 16, 4, 47, 17], + + // 27 + [8, 152, 122, 4, 153, 123], + [22, 73, 45, 3, 74, 46], + [8, 53, 23, 26, 54, 24], + [12, 45, 15, 28, 46, 16], + + // 28 + [3, 147, 117, 10, 148, 118], + [3, 73, 45, 23, 74, 46], + [4, 54, 24, 31, 55, 25], + [11, 45, 15, 31, 46, 16], + + // 29 + [7, 146, 116, 7, 147, 117], + [21, 73, 45, 7, 74, 46], + [1, 53, 23, 37, 54, 24], + [19, 45, 15, 26, 46, 16], + + // 30 + [5, 145, 115, 10, 146, 116], + [19, 75, 47, 10, 76, 48], + [15, 54, 24, 25, 55, 25], + [23, 45, 15, 25, 46, 16], + + // 31 + [13, 145, 115, 3, 146, 116], + [2, 74, 46, 29, 75, 47], + [42, 54, 24, 1, 55, 25], + [23, 45, 15, 28, 46, 16], + + // 32 + [17, 145, 115], + [10, 74, 46, 23, 75, 47], + [10, 54, 24, 35, 55, 25], + [19, 45, 15, 35, 46, 16], + + // 33 + [17, 145, 115, 1, 146, 116], + [14, 74, 46, 21, 75, 47], + [29, 54, 24, 19, 55, 25], + [11, 45, 15, 46, 46, 16], + + // 34 + [13, 145, 115, 6, 146, 116], + [14, 74, 46, 23, 75, 47], + [44, 54, 24, 7, 55, 25], + [59, 46, 16, 1, 47, 17], + + // 35 + [12, 151, 121, 7, 152, 122], + [12, 75, 47, 26, 76, 48], + [39, 54, 24, 14, 55, 25], + [22, 45, 15, 41, 46, 16], + + // 36 + [6, 151, 121, 14, 152, 122], + [6, 75, 47, 34, 76, 48], + [46, 54, 24, 10, 55, 25], + [2, 45, 15, 64, 46, 16], + + // 37 + [17, 152, 122, 4, 153, 123], + [29, 74, 46, 14, 75, 47], + [49, 54, 24, 10, 55, 25], + [24, 45, 15, 46, 46, 16], + + // 38 + [4, 152, 122, 18, 153, 123], + [13, 74, 46, 32, 75, 47], + [48, 54, 24, 14, 55, 25], + [42, 45, 15, 32, 46, 16], + + // 39 + [20, 147, 117, 4, 148, 118], + [40, 75, 47, 7, 76, 48], + [43, 54, 24, 22, 55, 25], + [10, 45, 15, 67, 46, 16], + + // 40 + [19, 148, 118, 6, 149, 119], + [18, 75, 47, 31, 76, 48], + [34, 54, 24, 34, 55, 25], + [20, 45, 15, 61, 46, 16] +]; + +QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) { + + var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel); + + if (rsBlock == undefined) { + throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel); + } + + var length = rsBlock.length / 3; + + var list = new Array(); + + for (var i = 0; i < length; i++) { + + var count = rsBlock[i * 3 + 0]; + var totalCount = rsBlock[i * 3 + 1]; + var dataCount = rsBlock[i * 3 + 2]; + + for (var j = 0; j < count; j++) { + list.push(new QRRSBlock(totalCount, dataCount) ); + } + } + + return list; +} + +QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) { + + switch(errorCorrectLevel) { + case QRErrorCorrectLevel.L : + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; + case QRErrorCorrectLevel.M : + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; + case QRErrorCorrectLevel.Q : + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; + case QRErrorCorrectLevel.H : + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; + default : + return undefined; + } +} + +//--------------------------------------------------------------------- +// QRBitBuffer +//--------------------------------------------------------------------- + +function QRBitBuffer() { + this.buffer = new Array(); + this.length = 0; +} + +QRBitBuffer.prototype = { + + get : function(index) { + var bufIndex = Math.floor(index / 8); + return ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1; + }, + + put : function(num, length) { + for (var i = 0; i < length; i++) { + this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1); + } + }, + + getLengthInBits : function() { + return this.length; + }, + + putBit : function(bit) { + + var bufIndex = Math.floor(this.length / 8); + if (this.buffer.length <= bufIndex) { + this.buffer.push(0); + } + + if (bit) { + this.buffer[bufIndex] |= (0x80 >>> (this.length % 8) ); + } + + this.length++; + } +}; + +/** + * Functionality for the password revert page. This is reached when a user changes their password + * and clicks a link in their email to revert the password back to their previous one. + */ +var passwordRevert = { + + /** The code that will be sent to the API to prove that they clicked the email link */ + revertPasswordCode: null, + + /** + * Initialise the password revert page's functionality + * @param {String} currentPage The current page e.g. #pwrevertmup1iayJmjRAHCxaKnBAmRaL + */ + init: function(currentPage) { + + 'use strict'; + + // Cache the code + this.revertPasswordCode = currentPage.replace('pwrevert', ''); + + // Init functionality + this.checkPasswordRevertCode(); + }, + + /** + * Validate the email code + */ + checkPasswordRevertCode: function() { + + 'use strict'; + + loadingDialog.show(); + + var self = this; + + // Make Revert Validation request + api_req({ a: 'erv', c: this.revertPasswordCode }, { + callback: function(result) { + + loadingDialog.hide(); + + // The API can't inform us if the code is expired as it deletes used codes after use. So this does a + // check to see if the code length is right, if it is then the code is expired, otherwise it's invalid + if (result === ENOENT || result === EEXPIRED) { + var failureMessage = l[20857] + ' ' + l[20858]; // Your link is invalid. Please contact support + + if (self.revertPasswordCode.length === 24) { + failureMessage = l[20856] + ' ' + l[20858]; // Your link has expired. Please contact support + } + + msgDialog('warningb', l[135], failureMessage, '', self.cancelRevertPassword); + } + else if (result < 0) { + + // Oops, something went wrong. Please contact support@mega.nz for assistance. + msgDialog('warningb', l[200], l[200] + ' ' + l[20858], '', self.cancelRevertPassword); + } + else { + // If the code is valid, get the email for the account to be reset + var email = result[1]; + var successMessage = l[20859].replace('%1', email); + + // Ask if they really want to revert the password + msgDialog('confirmation', l[870], successMessage, '', function(userConfirmed) { + + // If the user clicks to confirm + if (userConfirmed) { + self.proceedRevertingPassword(); + } + else { + self.cancelRevertPassword(); + } + }); + } + } + }); + }, + + /** + * A callback function to return to the start/cloud drive page if there was an error or the user cancelled + */ + cancelRevertPassword: function() { + + 'use strict'; + + loadSubPage(u_attr ? 'fm' : 'start'); + }, + + /** + * Proceed to revert the password to the previous one by sending the final API request + */ + proceedRevertingPassword: function() { + + 'use strict'; + + loadingDialog.show(); + + // Make Revert Password request + api_req({ a: 'erx', c: this.revertPasswordCode }, { + callback: function(result) { + + loadingDialog.hide(); + + // Show generic error + if (result < 0) { + msgDialog('warningb', l[200], l[200] + ' ' + l[20858], '', passwordRevert.cancelRevertPassword); + } + else { + // If it successfully reverted, show a success message and go back to the login page + msgDialog('info', l[18280], l[20860], '', function() { + + // If already logged in, log out + if (u_attr) { + u_logout(true); + } + + loadSubPage('login'); + }); + } + } + }); + } +}; + +/** + * This file handles the Public Service Announcements. One announcement will + * appear at the bottom of the page in an overlay at a time. The announcements + * come from a hard coded list initially. Once a user has seen an announcement + * they will mark it as read on the API server. If a user is not logged in + * then it will mark that announcement as seen in localStorage. + */ +var psa = { + + /** The id number of the last announcement that the user has seen */ + lastSeenPsaId: 0, + + /** + * The current announcement object from the API e.g. + * { + * id: integer psa id + * t: string psa title, already translated into user's known language if available + * d: string psa body/description, already translated if available + * img: string url to image on one of our static servers + * l: string link url for the positive flow button (this can be empty if not provided) + * b: string button label for positive flow button, can be empty if not provided + * } + */ + currentPsa: null, + + /** Whether the PSA has already been fetched this session */ + fetchedPsa: false, + + /** If the PSA is currently being shown */ + visible: false, + + /** + * Show the dialog if they have not seen the announcement yet + */ + async init() { + 'use strict'; + + // Already tried fetching the announcement this session + if (psa.fetchedPsa) { + return false; + } + psa.fetchedPsa = true; + + // Get the last announcement number they have seen from localStorage + const seen = await Promise.allSettled([ + M.getPersistentData('lastSeenPsaId'), + u_handle && u_handle !== 'AAAAAAAAAAA' && mega.attr.get(u_handle, 'lastPsa', -2, true) + ]); + psa.lastSeenPsaId = parseInt(seen[1].value || seen[0].value) | 0; + + // Make Get PSA (gpsa) API request + const result = await Promise.resolve(M.req({a: 'gpsa', n: psa.lastSeenPsaId})).catch(echo); + + // If there is an announcement to be shown + if (typeof result === 'object' && 'id' in result) { + + // Cache the current announcement + psa.currentPsa = result; + + // Show the announcement + psa.configureAndShowAnnouncement(); + } + else if (parseInt(result) !== ENOENT) { + throw new Error(`Unexpected GPSA result, ${result}`); + } + }, + + /** + * Wrapper function to configure the announcement details and show it + */ + configureAndShowAnnouncement: function() { + + 'use strict'; + + // Only show the announcement if they have not seen the current announcement. + // The localStorage.alwaysShowPsa is a test variable to force show the PSA + if ((psa.lastSeenPsaId < psa.currentPsa.id) || (localStorage.alwaysShowPsa === '1')) { + + psa.prefillAnnouncementDetails(); + psa.addCloseButtonHandler(); + psa.addMoreInfoButtonHandler(); + psa.showAnnouncement(); + } + else { + // If they viewed the site while not logged in, then logged in with + // an account that had already seen this PSA then this hides it + psa.hideAnnouncement(); + } + }, + + /** + * Update the details of the announcement depending on the current one + */ + prefillAnnouncementDetails: function() { + + 'use strict'; + + // Determine image path + var retina = (window.devicePixelRatio > 1) ? '@2x' : ''; + var imagePath = staticpath + 'images/mega/psa/' + psa.currentPsa.img + retina + '.png'; + + // Decode the text from Base64 (there were some issues with some languages) + var title = from8(base64urldecode(psa.currentPsa.t)); + var description = from8(base64urldecode(psa.currentPsa.d)); + var buttonLabel = from8(base64urldecode(psa.currentPsa.b)); + + // Populate the details + var $psa = $('.public-service-anouncement'); + $psa.find('.title').text(title); + $psa.find('.messageA').text(description); + if (psa.currentPsa.l) { + $('.view-more-info', $psa).attr('data-continue-link', psa.currentPsa.l); + } + $psa.find('.view-more-info .text').text(buttonLabel); + $psa.find('.display-icon').attr('src', imagePath).on('error', function() { + + // If the icon doesn't exist for new PSAs which is likely while in local development, use the one + // on the default static path as they are added directly to the static servers now for each new PSA + $(this).attr('src', psa.currentPsa.dsp + psa.currentPsa.img + retina + '.png'); + }); + }, + + /** + * Adds the close button functionality + */ + addCloseButtonHandler: function() { + + 'use strict'; + + // Use delegated event in case the HTML elements are not loaded yet + $('body').off('click', '.public-service-anouncement .fm-dialog-close'); + $('body').on('click', '.public-service-anouncement .fm-dialog-close', function() { + + // Hide the banner and store that they have seen this PSA + psa.hideAnnouncement(); + psa.saveLastPsaSeen(); + }); + }, + + /** + * Adds the functionality for the view more info button + */ + addMoreInfoButtonHandler: function() { + + 'use strict'; + + // Use delegated event in case the HTML elements are not loaded yet + $('body').rebind('click', '.public-service-anouncement button.view-more-info', function() { + + // Get the page link for this announcement + var pageLink = $(this).attr('data-continue-link'); + + // Hide the banner and save the PSA as seen + psa.hideAnnouncement(); + psa.saveLastPsaSeen(); + + if (!pageLink) { + return; + } + + // Open a new tab (and hopefully don't trigger popup blocker) + window.open(pageLink, '_blank', 'noopener,noreferrer'); + }); + }, + + /** + * Shows the announcement + */ + showAnnouncement: function() { + + 'use strict'; + + // Show the PSA + $('body').addClass('notification'); + + // Move the file manager up + psa.resizeFileManagerHeight(); + + // Add a handler to fix the layout if the window is resized + $(window).rebind('resize.bottomNotification', function() { + psa.resizeFileManagerHeight(); + psa.repositionAccountLoadingBar(); + }); + + // Currently being shown + psa.visible = true; + }, + + /** + * Hides the announcement + */ + hideAnnouncement: function() { + + 'use strict'; + + // If already hidden, don't do anything (specially a window.trigger('resize')). + if (!this.visible) { + return false; + } + + // Move the progress bar back to the 0 position + $('.loader-progressbar').css('bottom', 0); + + // Hide the announcement + $('body').removeClass('notification'); + + // Reset file manager height + $('.fmholder').css('height', ''); + $(window).off('resize.bottomNotification'); + + // Trigger resize so that full content in the file manager is visible after closing + $(window).trigger('resize'); + + // Save last seen announcement number for page changes + psa.lastSeenPsaId = psa.currentPsa.id; + + // Set to no longer visible + psa.visible = false; + }, + + /** + * Saves the current announcement number they have seen to a user attribute if logged in, otherwise to localStorage + */ + saveLastPsaSeen: function() { + + 'use strict'; + + // Always store that they have seen it in localStorage. This is useful if they + // then log out, then the PSA should still stay hidden and not re-show itself + M.setPersistentData('lastSeenPsaId', String(psa.currentPsa.id)).dump('psa'); + + // If logged in and completed registration + if (u_type === 3) { + + // Store that they have seen it on the API side + // (should be stored as ^!lastPsa for a private non encrypted, non historic attribute) + mega.attr.set('lastPsa', String(psa.currentPsa.id), -2, true); + } + }, + + /** + * When the user logs in, this updates the API with the last PSA they saw when they were logged out + * @param {String|undefined} apiLastPsaSeen The last PSA that the user has seen that the API knows about + */ + updateApiWithLastPsaSeen: function(apiLastPsaSeen) { + 'use strict'; + + // Make sure they have seen a PSA and that the API seen PSA is older than the one in localStorage + M.getPersistentData('lastSeenPsaId') + .then(res => { + if (apiLastPsaSeen < res) { + + // Store that they have seen it on the API side + // (should be stored as ^!lastPsa for a private non encrypted, non historic attribute) + mega.attr.set('lastPsa', res, -2, true); + } + }) + .catch(nop); + }, + + /** + * Resize the fmholder and startholder container heights + * because they depend on the bottom notification height + */ + resizeFileManagerHeight: function() { + + 'use strict'; + + // If the PSA announcement is currently shown + if (!is_mobile && $('body').hasClass('notification')) { + + var notificationSize = $('.bottom-info.body').outerHeight(); + var bodyHeight = $('body').outerHeight(); + + if (notificationSize > 120) { + $('.fmholder').height(bodyHeight - notificationSize); + } + } + }, + + /** + * Repositions the account loading bar so it is above the PSA if it is being shown + */ + repositionAccountLoadingBar: function() { + + 'use strict'; + + // If the PSA is visible + if (psa.visible) { + + // Move the progress bar up above the PSA otherwise it's not visible + var psaHeight = $('.public-service-anouncement').outerHeight(); + $('.loader-progressbar').css('bottom', psaHeight); + } + else { + // Reset to the bottom + $('.loader-progressbar').css('bottom', 0); + } + } +}; + +/** + * MegaInput Core + * + * MegaInput is designed to unify inputs across the website give developer to an input with flexiblilty, + * maintainability and easily control when they trying to create a new input. + * + * By doing this we can achieve, + * - Design unification across the website + * - Less hassle on maintenance for inputs + * - Standise coding practice. + * - Reduce amount of duplicate or similar code. + * + * MegaInput is planed to expand to cover all sorts of inputs on the Mega Webclient, such as text, textarea, radio, + * checkbox, dropdown, buttons, numbers, etc. + * + * Class and prototype is located under `mega.ui`. + * + * Every original event binding on the input will not be revoke by MegaInput initialization, + * it keeps original input element and just modify wrapper. + * Devs please aware above when you start new extension. + * So user do not need to worried about binding order, BUT need to be careful with parent selection in binded function, + * due to it can be modified structually by MegaInputs. + * + * How to use: + * + * - How to create a new input + * + * 1. Create an input on html, adding classname for the custom styles as you required + * + * e.g. `` + * + * 1.1 You can use extension for custom style by adding classname of the extension + * + * e.g. `` + * + * For Devs, when code extension, please leave a comment about what is class name for it, + * and an example html to help other people to get info for your extension. + * To see an example for the comment please refer megaInputs-underlinedText.js. + * + * 2. Select eletment with jquery and call as following: + * + * `var megaInput = new mega.ui.MegaInputs($input);` + * + * $input can be array of inputs as well. This will return array of megaInput objects. + * megaInput object is the actually object controller for the megaInput. + * + * 3. If you can see `megaInputs` class added on the input, it is ready. + * + * - How to control MegaInputs already setup. + * + * - First initialization returns the MegaInputs object. You can use it to control the item. + * + * OR + * + * - You can select dom element with jQuery selector and can call data attribute for it to get + * the MegaInput object for the element. + * + * `var megaInput = $(elem).data('MegaInputs')` + * + * With it you can modify/call function that is binded on it. + * But please do not forget about sanity check this to avoid exception. + * And vice versa is possible as well, with MegaInputs object you can find it's input and directly using it like: + * + * `megaInputs.$input.rebind('focus', function(){ -do you thing here- })` + * + * - By setup showMessage, hideMessage, showError, hideError, you can call it with MegaInputs object like: + * + * `$input.data('MegaInputs').showError('-YOUR-MASSAGE-'')` + * `$input.data('MegaInputs').hideError()` + * + * There is two way to setup these functions. + * + * 1. Pass it on options once MegaInput is inited by using options variable + * + * `var megaInput = new mega.ui.MegaInputs($input, { + * onShowError: function(msg) { + * ---do your thing--- + * } + * });` + * + * 2. Setup on extension code and override original (Please refer underlinedText as example) + * + * - Similar way as above, you can setup event binding on the input. + * + * 1. Pass it on options once MegaInput is inited by using options variable + * + * `var megaInput = new mega.ui.MegaInputs($input, { + * onFocus: function(e) { + * ---do your thing--- + * } + * });` + * + * 2. Setup on extension code and override original (Please refer underlinedText as example) + * + * - Mark input as required + * You can add `requried` class on input to mark it as required. Extension will handle required on it's own way. + * + * MegaInputs extensions: + * - TEXT: text input - megaInputs-underlinedText.js + * - CURRENCY: text/number input for localised currencies - megaInputs-currencyField.js + */ + +(function($, scope) { + + 'use strict'; + + /** + * MegaInputs + * @constructor + * @param {Object} $input - jQuery object of target input element. + * @param {Object} [options] addon options upon initialization. + * + * @return {Object} megaInput - Created MegaInput object + */ + var MegaInputs = function($input, options) { + if (!(this instanceof MegaInputs)) { + return new MegaInputs($input, options); + } + + if (!$input || !$input.length) { + if (d) { + console.debug('MegaInputs: nothing to apply here...', $input); + } + return; + } + + // Support if $input is multiple elements + if ($input.length > 1) { + var inputArray = []; + for (var i = $input.length - 1; i >= 0; i--) { + inputArray.push(new mega.ui.MegaInputs($($input[i]), options)); + } + + return inputArray; + } + + this.$input = $input; + this.type = $input.attr('type') || 'text'; + this.classes = this.$input.attr("class") ? this.$input.attr("class").split(/\s+/) : []; + this.options = options || {}; + this.required = $input.hasClass('required'); + + var self = this; + + // Bind class as a jQuery element's data attribute, so it can be called with the $ object + this.$input.data('MegaInputs', this); + + this._bindEvent(); + + // Class specified event bind + self.classes.forEach(function(c) { + if (typeof self[c] === 'function') { + self[c](); + } + }); + + // Add MegaInput class to show it is megaInput + this.$input.addClass('megaInputs'); + }; + + /* + * General MegaInput Features + */ + MegaInputs.prototype._bindEvent = function() { + + var self = this; + + // Bind option events + if (typeof self.options.onFocus === 'function') { + self.$input.rebind('focus.megaInputs', self.options.onFocus); + } + + if (typeof self.options.onBlur === 'function') { + self.$input.rebind('blur.megaInputs', self.options.onBlur); + } + + if (typeof self.options.onClick === 'function') { + self.$input.rebind('click.megaInputs', self.options.onClick); + } + }; + + // Red colored Message + MegaInputs.prototype.showError = function(msg) { + + if (typeof this.options.onShowError === 'function') { + this.options.onShowError(msg); + } + else { + if (d) { + console.warn('MegaInputs: There is no onShowError options given.'); + } + } + }; + + // Non-colored Message + MegaInputs.prototype.showMessage = function(msg) { + + if (typeof this.options.onShowMessage === 'function') { + this.options.onShowMessage(msg); + } + else { + if (d) { + console.warn('MegaInputs: There is no showMessage options given.'); + } + } + }; + + // Non-colored Message + MegaInputs.prototype.hideError = MegaInputs.prototype.hideMessage = function() { + + if (typeof this.options.onHideError === 'function') { + this.options.onHideError(); + } + else { + if (d) { + console.warn('MegaInputs: There is no onHideError options given.'); + } + } + }; + + /** + * Update value on all input elements and trigger change event + * + * @param {*} value New value to set on all affected input elements + * + * @returns {void} + */ + MegaInputs.prototype.setValue = function(value) { + if (!this.$input || !this.$input.length) { + return; + } + + this.$input.val(value).trigger('change'); + }; + + // Export + scope.mega = scope.mega || {}; + scope.mega.ui = scope.mega.ui || {}; + scope.mega.ui.MegaInputs = MegaInputs; + +})(jQuery, window); + +/* + * MegaInputs related functions with sanity check with original functions to prevent exception + */ + +/** + * MegaInputs show error with sanity check. + * + * @param {String} msg - Massage to show. + */ +$.fn.megaInputsShowError = function(msg) { + + 'use strict'; + + var megaInput = $(this).data('MegaInputs'); + + if (megaInput) { + megaInput.showError(msg); + } + else { + if (d) { + console.warn('MegaInputs: Sorry this is not MegaInput or the MegaInput is not initialized.', this); + } + } + + return this; +}; + +/** + * MegaInputs hide error with sanity check. + * + * @param {String} msg - Massage to show. + */ +$.fn.megaInputsShowMessage = function(msg) { + + 'use strict'; + + var megaInput = $(this).data('MegaInputs'); + + if (megaInput) { + megaInput.showMessage(msg); + } + else { + if (d) { + console.warn('MegaInputs: Sorry this is not MegaInput or the MegaInput is not initialized.', this); + } + } +}; + +/** + * MegaInputs Hide message and error with sanity check. + */ +$.fn.megaInputsHideError = $.fn.megaInputsHideMessage = function() { + + 'use strict'; + + var megaInput = $(this).data('MegaInputs'); + + if (megaInput) { + megaInput.hideError(); + } + else { + if (d) { + console.warn('MegaInputs: Sorry this is not MegaInput or the MegaInput is not initialized.', this); + } + } +}; + +/* + * Text input + * + * Optionally, animate title/placeholder to top of input when it is focused/has value + * + * Please refer Megainput Core instruction to learn basic usage. + * + * Class: `underlinedText` + * Example: `` + * + * Extension: + * - Password Strength Checker - Show bottom bar that show strength of entered password + * Class: `strengthChecker` + * Example: `` + * + * - Half size - Make title top half width and float positioning, may require manually place `clear
          `. + * Class: `halfSize-l` for float left, `halfSize-r` for float right + * Example: ` + * ` + */ +mega.ui.MegaInputs.prototype.underlinedText = function() { + + 'use strict'; + + if (!(this.type === 'text' || this.type === 'password' || + this.type === 'tel' || this.type === 'number' || this.type === 'email')) { + console.error('Class binding and input type mismatch! ' + + 'classname: mega-input, input type: ' + this.type + ', Required type: text.'); + return; + } + + var $input = this.$input; + + this.underlinedText._bindEvent.call(this); + this.underlinedText._init.call(this); + + // Dedicate functions + this.underlinedText._extendedFunctions.call(this); + + // Make sure title is always on top upon init when there is value. + $input.trigger('blur'); + + // And make sure password strength is cleared. + if ($input.hasClass('strengthChecker')) { + $input.trigger('input'); + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._init = function() { + + 'use strict'; + + var $input = this.$input; + + // Overwrite hide/show for Message/Error + this.underlinedText._updateShowHideErrorAndMessage.call(this); + + // If it is already a megaInput, html preparation does not required anymore. + if (!$input.hasClass('megaInputs')) { + + const hasTitle = $input.attr('title') || $input.attr('placeholder'); + const wrapperClass = hasTitle ? 'title-ontop' : ''; + + // Wrap it with another div for styling and animation + $input.wrap(`
          `); + + const $wrapper = this.$wrapper = $input.closest(`.mega-input`); + + // Hide wrapper if input has hidden class + if ($input.hasClass('hidden')) { + $wrapper.addClass('hidden'); + $input.removeClass('hidden'); + } + + if (hasTitle) { + // Insert animatied title + let title = escapeHTML($input.attr('title') || $input.attr('placeholder')); + + // Adding required sign + title += this.required ? ' *' : ''; + + const titleBlock = '
          ' + title + '
          '; + + // Insert title block + $wrapper.safePrepend(titleBlock); + + // Bind event for animation on title + const $titleBlock = $('.title', $input.parent()); + $titleBlock.rebind('click.underlinedText', function() { + + const $this = $(this); + + if (!$this.parent().hasClass('active')) { + $this.next('input').trigger('focus'); + } + }); + } + + // Insert error message block + $wrapper.safeAppend('
          '); + + // Half size + this.underlinedText._halfSize.call(this); + + // Insert password strength checker + this.underlinedText._strengthChecker.call(this); + + // With icon or prefix (e.g. currency) + this.underlinedText._withIconOrPrefix.call(this); + + // Add some class to wrapper + if ($input.data('wrapper-class')) { + $wrapper.addClass($input.data('wrapper-class')); + } + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._bindEvent = function() { + + 'use strict'; + + var $input = this.$input; + + $input.rebind('focus.underlinedText', function() { + $(this).parent().addClass('active'); + }); + + $input.rebind('blur.underlinedText change.underlinedText', function() { + + var $this = $(this); + + if ($this.val()) { + $this.parent().addClass('valued'); + } + else { + $this.parent().removeClass('valued'); + } + $this.parent().removeClass('active'); + }); + + // Hide error upon input changes + var self = this; + + if (!$input.hasClass('strengthChecker')) { + $input.rebind('input.underlinedText', function() { + self.hideError(); + }); + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._updateShowHideErrorAndMessage = function() { + + 'use strict'; + + /** + * Text input - show red colored error on bottom of the underline. + * + * @param {String} msg - Massage to show. + */ + this.showError = function(msg) { + + if (typeof this.options.onShowError === 'function') { + this.options.onShowError(msg); + } + else { + var $wrapper = this.$input.parent(); + + this.$input.addClass('errored'); + $wrapper.addClass('error'); + + this.showMessage(msg); + } + }; + + /** + * Text input - show gray colored message on bottom of the underline. + * + * @param {String} msg - Massage to show. + * @param {Boolean} fix - Fix message, the message will not disappear. + * @returns {Void} + */ + this.showMessage = function(msg, fix) { + + if (typeof this.options.onShowMessage === 'function') { + this.options.onShowMessage(msg); + } + else if (msg) { + var $wrapper = this.$input.parent(); + var $msgContainer = $wrapper.find('.message-container'); + var extraSpace = 9; + + if (fix) { + $wrapper.addClass('fix-msg'); + this.fixMessage = msg; + extraSpace = 4; + } + + $wrapper.addClass('msg'); + $msgContainer.safeHTML(msg); + if (this.origBotSpace === undefined) { + this.origBotSpace = this.origBotSpace || parseInt($wrapper.css('margin-bottom')); + } + + $wrapper.css('margin-bottom', this.origBotSpace + $msgContainer.outerHeight() + extraSpace); + } + }; + + /** + * Text input - hide error or message. + */ + this.hideError = this.hideMessage = function(force) { + + if (typeof this.options.onHideError === 'function') { + this.options.onHideError(); + } + else { + var $wrapper = this.$input.parent(); + + this.$input.removeClass('errored'); + $wrapper.removeClass('error'); + + if ($wrapper.hasClass('fix-msg') && !force) { + this.showMessage(this.fixMessage); + } + else { + $wrapper.removeClass('msg').removeClass('fix-msg'); + $wrapper.css('margin-bottom', ''); + } + } + }; + + // Hide all error upon reinitialize + this.hideError(); +}; + +mega.ui.MegaInputs.prototype.underlinedText._halfSize = function() { + + 'use strict'; + + var $input = this.$input; + var $wrapper = this.$wrapper; + + if ($input.hasClass('halfSize-l')) { + $wrapper.addClass('halfSize-l'); + } + + if ($input.hasClass('halfSize-r')) { + $wrapper.addClass('halfSize-r'); + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._withIconOrPrefix = function() { + + 'use strict'; + + var $input = this.$input; + var $wrapper = this.$wrapper; + + if (this.type === 'password') { + + $wrapper.safeAppend(''); + + $('.pass-visible', $wrapper).rebind('click.togglePassV', function() { + + if (this.classList.contains('icon-eye-reveal')) { + + $input.attr('type', 'text'); + this.classList.remove('icon-eye-reveal'); + this.classList.add('icon-eye-hidden'); + } + else { + $input.attr('type', 'password'); + this.classList.add('icon-eye-reveal'); + this.classList.remove('icon-eye-hidden'); + } + }); + } + + if ($input.data('icon')) { + $wrapper.addClass('with-icon'); + $wrapper.safePrepend(``); + } + else if ($input.data('prefix')) { + $wrapper.addClass('with-icon'); + $wrapper.safePrepend(`${$input.data('prefix')}`); + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._strengthChecker = function() { + + 'use strict'; + + var $input = this.$input; + var $wrapper = this.$wrapper; + var self = this; + + if (this.type === 'password' && $input.hasClass('strengthChecker')) { + + // Strength wording + $wrapper.safeAppend(''); + + // Strength Bar + $wrapper.safeAppend(''); + + // Loading icon for zxcvbn. + $wrapper.safeAppend('
          ' + + '' + + '
          '); + + var _bindStrengthChecker = function() { + + // Hide loading icon + $wrapper.removeClass('loading'); + + $input.rebind('keyup.strengthChecker input.strengthChecker change.strengthChecker', function(e) { + + if (e.keyCode === 13) { + return false; + } + + self.hideError(); + + var $passStatus = $wrapper.find('.password-status'); + var $passStatusBar = $wrapper.find('.account-pass-lines'); + + $passStatus.add($passStatusBar).removeClass('good1 good2 good3 good4 good5 checked'); + + var strength = classifyPassword($(this).val()); + + if (typeof strength === 'object') { + + $passStatus.addClass(strength.className + ' checked').text(strength.string1); + $input.data('MegaInputs').showMessage(strength.string2); + + $passStatusBar.addClass(strength.className); + } + else { + $input.data('MegaInputs').hideMessage(); + } + }); + + // Show strength upon zxcvbn loading is finished or Reset strength after re-rendering. + $input.trigger('input.strengthChecker'); + }; + + if (typeof zxcvbn === 'undefined') { + + // Show loading icon + $wrapper.addClass('loading'); + M.require('zxcvbn_js').done(_bindStrengthChecker); + } + else { + _bindStrengthChecker(); + } + + $wrapper.addClass('strengthChecker'); + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._extendedFunctions = function() { + + 'use strict'; + + /** + * Update title after MegaInput is already inited, if a title exists. + * The title can be passed as parameter + * or simply update title or placeholder on the input and call this will update title. + * + * @param {String} [title] - New title. + */ + this.updateTitle = function(title) { + const $titleElem = $('.mega-input-title', this.$input.parent()); + + if ($titleElem) { + title = title || this.$input.attr('title') || this.$input.attr('placeholder'); + + // Note: This should remain as text() as some place use third party pulling text as title. + $titleElem.text(title); + } + }; + + /** + * Update value of the input, with or without titletop animation. + * + * @param {String} [value] - New value. + * @param {Boolean} [noAnimation] - Show animation or not. + */ + this.setValue = function(value, noAnimation) { + + var self = this; + + if (noAnimation) { + this.$input.prev().addClass('no-trans'); + } + + this.hideError(); + mega.ui.MegaInputs.prototype.setValue.call(this, value); + + onIdle(function() { + self.$input.prev().removeClass('no-trans'); + }); + }; +}; + +/* + * Currency input + * + * Please refer to Megainput Core instruction to learn basic usage. + * + * Class: `currencyField` + * Example: `` + */ +mega.ui.MegaInputs.prototype.currencyField = function() { + 'use strict'; + + if (!this.$input.hasClass('megaInputs')) { + + this.currencyField._init.call(this); + this.currencyField._bindEvent.call(this); + + // Dedicate functions + this.currencyField._extendedFunctions.call(this); + } +}; + +mega.ui.MegaInputs.prototype.currencyField._init = function() { + + 'use strict'; + + // Wrap it with another div for styling and animation + this.$input.wrap(`
          `); + + const $wrapper = this.$wrapper = this.$input.closest(`.mega-input`); + + // Hide wrapper if input has hidden class + if (this.$input.hasClass('hidden')) { + $wrapper.addClass('hidden'); + this.$input.removeClass('hidden'); + } + + // Insert error message block + $wrapper.safeAppend('
          '); + + // Add some class to wrapper + if (this.$input.data('wrapper-class')) { + $wrapper.addClass(this.$input.data('wrapper-class')); + } + + // With icon or prefix (e.g. currency) + this.currencyField._withIconOrPrefix.call(this); + + // Prepare the currency input + if (formatCurrency(1111.11, 'EUR', 'number').indexOf(',') >= 4) { + + this.type = 'text'; + this.$input.removeAttr('step'); + } + else { + this.type = 'number'; + this.$input.attr('step', 'any'); + } + + this.$input.attr('type', this.type); +}; + +mega.ui.MegaInputs.prototype.currencyField._bindEvent = function() { + + 'use strict'; + + this.$input.rebind('focus.currencyField', function() { + $(this).parent().addClass('active'); + }); + + this.$input.rebind('blur.currencyField change.currencyField', function() { + const $this = $(this); + + if ($this.val()) { + $this.parent().addClass('valued'); + } + else { + $this.parent().removeClass('valued'); + } + $this.parent().removeClass('active'); + }); + + this.$input.off('keydown.currencyField'); + + if (this.type === 'text') { + + this.$input.rebind('keydown.currencyField', e => { + + // Valid keys 0-9/keypad 0-9/,/./decimal point/space/left arrow/right arrow/delete/backspace/tab/shift + if (![8, 9, 16, 32, 37, 39, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110, 188, 190].includes(e.keyCode)) { + return false; + } + }); + } +}; + +mega.ui.MegaInputs.prototype.currencyField._withIconOrPrefix = function() { + + 'use strict'; + + var {$input, $wrapper} = this; + + if ($input.data('icon')) { + $wrapper.addClass('with-icon'); + $wrapper.safePrepend(``); + } + else if ($input.data('prefix')) { + $wrapper.addClass('with-icon'); + $wrapper.safePrepend(`${$input.data('prefix')}`); + } +}; + +mega.ui.MegaInputs.prototype.currencyField._extendedFunctions = function() { + + 'use strict'; + + this.getValue = function() { + + let val = this.$input.val(); + + if (this.type === 'text') { + + const matches = val.match(/([,.])\d*$/); + let cents = 0; + + if (matches) { + + cents = parseInt(matches[0].slice(1)); + + if (isNaN(cents)) { + cents = 0; + } + else { + let centLength = matches[0].slice(1).length; + + if (centLength === 1) { + + ++centLength; + cents *= 10; + } + + let decimal = centLength - 2; + + while (decimal > 0) { + cents *= 0.1; + decimal--; + } + + cents = Math.round(cents); + } + + val = val.slice(0, val.length - matches[0].length); + } + + val = parseInt(val.replace(/\D/g, '')); + + if (isNaN(val)) { + return 0; + } + + return val + cents * 0.01; + } + + return val; + }; +}; + +/** + * Developer Settings Page Logic. + */ +(function(scope) { + 'use strict'; + + scope.developerSettings = { + $page: null, + + /** Init Developer Settings Page. */ + init: function() { + this.$page = $('.bottom-page.developer-settings'); + this.initSettings(); + this.initApplyButton(); + }, + + /** Show Developer Setting Page. */ + show: function() { + parsepage(pages['developersettings']); + topmenuUI(); + this.init(); + }, + + /** Reload to apply changes. **/ + apply: function() { + window.location.reload(); + }, + + /** Init HTML defined setting controls **/ + initSettings: function() { + var $localStorageSettings = this.$page.find('.developer-setting.localstorage'); + + // Load in current settings. + $localStorageSettings.each(function() { + var $this = $(this); + $this.val(localStorage.getItem($this.attr('name')) || null); + }); + + // Change event save setting to local storage. + $localStorageSettings.rebind('change', function() { + var $this = $(this); + var itemKey = $this.attr('name'); + var val = $this.val(); + if (val) { + localStorage.setItem(itemKey, val); + } else { + localStorage.removeItem(itemKey); + } + }); + }, + + /** Init the page reload button **/ + initApplyButton: function() { + var self = this; + this.$page.find('.apply').rebind('click', function() { + self.apply(); + }); + } + }; + +})(mega); + +function RepayPage() { + "use strict"; + this.noOverduePaymentErrorCode = -1; + this.unknownErrorCode = -99; +} + +RepayPage.prototype.initPage = function() { + "use strict"; + + // if mobile we view the related header for top-mobile.html and hide navigation div of desktop + if (is_mobile) { + $('.mobile.bus-repay').removeClass('hidden'); + $('.mobile.fm-header').addClass('hidden'); + $('.mobile.fm-header.fm-hr').removeClass('hidden'); + } + + // If u_attr not set, or + // If Business account and (not the master Business account, or not expired or in grace period), or + // If Pro Flexi account and (not expired or in grace period) + if (!u_attr || + (u_attr.b && (!u_attr.b.m || !pro.isExpiredOrInGracePeriod(u_attr.b.s))) || + (u_attr.pf && !pro.isExpiredOrInGracePeriod(u_attr.pf.s))) { + + loadSubPage('start'); + return; + } + + if (!u_attr.email || isEphemeral()) { + return loadSubPage('registerb'); + } + + + var mySelf = this; + + loadingDialog.show(); + + // If necessary attributes are not loaded, load them then comeback. + if (!u_attr.pf && (!u_attr['%name'] || !u_attr['%email'])) { + + Promise.allSettled([ + u_attr['%name'] ? Promise.resolve({ v: u_attr['%name'] }) : mega.attr.get(u_attr.b.bu, '%name', -1), + u_attr['%email'] ? Promise.resolve({ v: u_attr['%email'] }) : mega.attr.get(u_attr.b.bu, '%email', -1) + ]).then((result) => { + // To reduce complexity of encapsulating all of below code inside the "then" handler. + if (result[0].status === 'fulfilled') { + u_attr['%name'] = result[0].value.v || from8(base64urldecode(result[0].value)); + } + if (result[1].status === 'fulfilled') { + u_attr['%email'] = result[1].value.v || from8(base64urldecode(result[1].value)); + } + mySelf.initPage(); + }); + return false; + } + + const $repaySection = $('.main-mid-pad.bus-repay'); + const $leftSection = $('.main-left-block', $repaySection); + const $rightSection = $('.main-right-block', $repaySection); + const $paymentBlock = $('.bus-reg-radio-block', $leftSection); + + const $repayBtn = $('.repay-btn', $repaySection).addClass('disabled'); + const $revertToFreeBtn = $('.revert-to-free-btn', $repaySection); + + $('.bus-reg-agreement.mega-terms .bus-reg-txt', $leftSection).safeHTML(l['208s']); + + // If Pro Flexi, show the icon and text + if (u_attr.pf) { + $('.plan-icon', $rightSection) + .removeClass('icon-crests-business-details') + .addClass('icon-crests-pro-flexi-details'); + $('.business-plan-title', $rightSection).text(l.pro_flexi_name); + $('.bus-reg-agreement.ok-to-auto .radio-txt', $leftSection).text(l.setup_monthly_payment_pro_flexi); + $('.dialog-subtitle', $repaySection).text(l.reactivate_pro_flexi_subscription); + + // Show the 'Revert to free account' button and add click handler for it + $revertToFreeBtn.removeClass('hidden'); + $revertToFreeBtn.rebind('click.revert', () => { + + const title = l.revert_to_free_confirmation_question; + const message = l.revert_to_free_confirmation_info; + + if (is_mobile) { + parsepage(pages.mobile); + } + + msgDialog('confirmation', '', title, message, (e) => { + if (e) { + loadingDialog.show(); + + // Downgrade the user to Free + M.req({ a: 'urpf', r: 1 }) + .catch(dump) + .finally(() => { + + // Reset account cache so all account data will be refetched + if (M.account) { + M.account.lastupdate = 0; + } + + loadSubPage('fm/account/plan'); + }); + } + else if (is_mobile) { + + // Close button for mobile we need to reload as loadSubPage on the same page doesn't work + location.reload(); + } + }); + }); + } + + // event handler for repay button + $repayBtn.rebind('click', function repayButtonHandler() { + if ($(this).hasClass('disabled')) { + return false; + } + + if (is_mobile) { + parsepage(pages.mobile); + } + + const $selectedProvider = $('.bus-reg-radio-option .bus-reg-radio.radioOn', $repaySection); + + mySelf.planInfo.usedGatewayId = $selectedProvider.attr('prov-id'); + mySelf.planInfo.usedGateName = $selectedProvider.attr('gate-n'); + + addressDialog.init(mySelf.planInfo, mySelf.userInfo, new BusinessRegister()); + return false; + }); + + // event handler for radio buttons + $('.bus-reg-radio-option', $paymentBlock) + .rebind('click.suba', function businessRepayCheckboxClick() { + var $me = $(this); + $me = $('.bus-reg-radio', $me); + if ($me.hasClass('radioOn')) { + return; + } + $('.bus-reg-radio', $paymentBlock).removeClass('radioOn').addClass('radioOff'); + $me.removeClass('radioOff').addClass('radioOn'); + }); + + + // event handler for clicking on terms anchor + $('.bus-reg-agreement.mega-terms .radio-txt a', $leftSection) + .rebind('click', function termsClickHandler() { + if (!is_mobile) { + bottomPageDialog(false, 'terms', false, true); + } + else { + var wentOut = false; + if (window.open) { + var cutPlace = location.href.indexOf('/registerb'); + var myHost = location.href.substr(0, cutPlace); + myHost += '/terms'; + wentOut = window.open(myHost, 'MEGA LIMITED TERMS OF SERVICE'); + } + if (!wentOut) { + loadSubPage('terms'); + } + } + return false; + }); + + $('.bus-reg-agreement.mega-terms .checkdiv', $leftSection) + .removeClass('checkboxOn').addClass('checkboxOff'); + + // event handler for check box + $('.bus-reg-agreement', $leftSection).rebind( + 'click.suba', + function businessRepayCheckboxClick() { + var $me = $('.checkdiv', $(this)); + if ($me.hasClass('checkboxOn')) { + $me.removeClass('checkboxOn').addClass('checkboxOff'); + $repayBtn.addClass('disabled'); + } + else { + $me.removeClass('checkboxOff').addClass('checkboxOn'); + if ($('.bus-reg-agreement .checkdiv.checkboxOn', $leftSection).length === 2) { + $repayBtn.removeClass('disabled'); + } + else { + $repayBtn.addClass('disabled'); + } + } + }); + + const fillPaymentGateways = function(status, list) { + + const failureExit = msg => { + loadingDialog.hide(); + msgDialog('warninga', '', msg || l[19342], '', loadSubPage.bind(null, 'start')); + }; + + if (!status) { // failed result from API + return failureExit(); + } + + // clear the payment block + const $paymentBlock = $('.bus-reg-radio-block', $repaySection).empty(); + + const icons = { + ecpVI: 'sprite-fm-uni icon-visa-border', + ecpMC: 'sprite-fm-uni icon-mastercard-border', + Stripe2: 'sprite-fm-theme icon-stripe', + stripeVI: 'sprite-fm-uni icon-visa-border', + stripeMC: 'sprite-fm-uni icon-mastercard-border', + stripeAE: 'sprite-fm-uni icon-amex', + stripeJC: 'sprite-fm-uni icon-jcb', + stripeUP: 'sprite-fm-uni icon-union-pay', + stripeDD: 'provider-icon stripeDD' + }; + + const radioHtml = '
          ' + + '
          '; + const textHtml = '
          [x]
          '; + const iconHtml = `
          + +
          `; + + if (!list.length) { + return failureExit(l[20431]); + } + + let paymentGatewayToAdd = ''; + for (let k = 0; k < list.length; k++) { + const payRadio = radioHtml.replace('[x]', list[k].gatewayName).replace('[Y]', list[k].gatewayId). + replace('[Z]', list[k].gatewayName); + const payText = textHtml.replace('[x]', list[k].displayName); + const payIcon = iconHtml.replace('[x]', icons[list[k].gatewayName]); + paymentGatewayToAdd += payRadio + payText + payIcon; + } + if (paymentGatewayToAdd) { + $paymentBlock.safeAppend(paymentGatewayToAdd); + } + + // setting the first payment provider as chosen + $('.bus-reg-radio-block .bus-reg-radio', $repaySection).first().removeClass('radioOff') + .addClass('radioOn'); + + // event handler for radio buttons + $('.bus-reg-radio-option', $paymentBlock) + .rebind('click.suba', function businessRegCheckboxClick() { + const $me = $('.bus-reg-radio', $(this)); + if ($me.hasClass('radioOn')) { + return; + } + $('.bus-reg-radio', $paymentBlock).removeClass('radioOn').addClass('radioOff'); + $me.removeClass('radioOff').addClass('radioOn'); + }); + + // view the page + loadingDialog.hide(); + $repaySection.removeClass('hidden'); + }; + + M.require('businessAcc_js').done(function() { + var business = new BusinessAccount(); + var overduePromise = business.getOverduePayments(); + + var failHandler = function(st, res) { + var msg = l[20671]; + var title = l[6859]; + if (res !== mySelf.noOverduePaymentErrorCode) { + msg = l[20672]; + title = l[1578]; + } + msgDialog('warninga', title, msg, '', function() { + loadingDialog.hide(); + loadSubPage(''); + }); + }; + + overduePromise.fail(failHandler); + + overduePromise.done(function(st, res) { + // validations of API response + if (st !== 1 || !res || !res.t || !res.inv || !res.inv.length) { + return failHandler(0, mySelf.unknownErrorCode); + } + + const mIntl = mega.intl; + const intl = mIntl.number; + const sep = mIntl.decimalSeparator; + + const applyFormat = (val) => { + if (sep !== res.l.sp[0]) { + const reg1 = new RegExp(`\\${sep}`, 'g'); + const reg2 = new RegExp(`\\${res.l.sp[1]}`, 'g'); + val = val.replace(reg1, '-') + .replace(reg2, res.l.sp[0]) + .replace(/-/g, res.l.sp[1]); + } + + val = res.l.pl ? `${res.l.cs}${val}` + : `${val}${res.l.cs}`; + + return val; + }; + + // Debug... + if (d && localStorage.debugNewPrice) { + res.nb = 7; // nb of users + res.nbdu = 3; // deactivated billed users + res.nbt = 2; // extra transfer blocks + res.nbs = 1; // extra storage blocks + res.lt = 104; // local price for total + res.let = 71.5; // local price of expired amount + res.t = 80; // total in euros + res.et = 55; + res.list = { 'u': [3, 15, 19.5], 's': [1, 2.5, 3.23], 't': [1, 2.5, 3.23] }; + res.inv[0].nb = 4; + res.inv[0].nbt = 1; // extra transfer blocks + res.inv[0].nbs = 1; // extra storage blocks + res.inv[0].nbdu = 1; // deactivated billed users + res.inv[0].v = 1; // version + res.inv[0].list = { 'u': [4, 20, 26.1], 's': [1, 2.5, 3.23], 't': [1, 2.5, 3.23] }; + res.inv[0].lp = 32.56; + res.inv[0].tot = 25; + res.inv[0].d = 'ABC Limited'; // company + + res.l = { // (NEW FIELD) + "cs": "$", // currency symbol + "n": "NZD", // currency name + "sp": [".", ","], // decimal and thousands separator + "pl": 1 // 1=currency symbol before number, 0=after + }; + } + // end of Debug + + let futureAmount = res.et && `${intl.format(res.et)} \u20ac`; + let totalAmount = res.t && `${intl.format(res.t)} \u20ac`; + let dueAmount = res.inv[0].tot && `${intl.format(res.inv[0].tot)} \u20ac`; + + const $rightBlock = $('.main-right-block', $repaySection); + + // check if we have V1 (new version) of bills + if (typeof res.nbdu !== 'undefined' && res.inv[0].v) { + let localPrice = false; + if (res.let) { + futureAmount = applyFormat(intl.format(res.let)); + localPrice = true; + } + if (res.lt) { + totalAmount = applyFormat(intl.format(res.lt)); + localPrice = true; + } + if (res.inv && res.inv[0] && res.inv[0].lp) { + dueAmount = applyFormat(intl.format(res.inv[0].lp)); + localPrice = true; + } + if (localPrice) { + $('.repay-breakdown-footer', $rightBlock).removeClass('hidden'); + } + } + + + if (!totalAmount || !dueAmount) { + console.error(`Fatal error in invoice, we dont have essential attributes ${JSON.stringify(res)}`); + return failHandler(0, mySelf.unknownErrorCode); + } + + const showDetails = function() { + const $me = $(this); + if ($me.hasClass('expand')) { + $me.removeClass('expand'); + $me.nextUntil('.repay-breakdown-tb-content, .repay-breakdown-tb-total', '.repay-extra-details') + .removeClass('expand'); + $('.content-desc-container', $me).removeClass('icon-arrow-up-after') + .addClass('icon-arrow-down-after'); + } + else { + $me.addClass('expand'); + $me.nextUntil('.repay-breakdown-tb-content, .repay-breakdown-tb-total', '.repay-extra-details') + .addClass('expand'); + $('.content-desc-container', $me).removeClass('icon-arrow-down-after') + .addClass('icon-arrow-up-after'); + } + }; + + var nbOfUsers = 3; // fallback to static value + + var $overduePaymentRow = $('.repay-breakdown-tb-content', $rightBlock); + var $overduePaymentHeader = $('.repay-breakdown-tb-header', $rightBlock); + + if ($overduePaymentRow.length > 1) { + var $rowBk = $($overduePaymentRow[0]).clone(); + $overduePaymentRow.remove(); + $rowBk.insertAfter($overduePaymentHeader); + $overduePaymentRow = $rowBk; + } + + var rowTemplate = $overduePaymentRow.clone(); + + var $overdueExtraRow = $('tr.repay-extra-details', $rightBlock); + const $extraRowTemplate = $overdueExtraRow.length > 1 ? $($overdueExtraRow[0]).clone() + : $overdueExtraRow.clone(); + $overdueExtraRow.remove(); + + // adding due invoice row + nbOfUsers = res.inv[0].nb; + + $('.content-desc', $overduePaymentRow).text(u_attr['%name'] || ' '); + $('.content-date', $overduePaymentRow).text(time2date(res.inv[0].ts, 1)); + $('.content-amou', $overduePaymentRow).text(dueAmount); + + const addDetailsRow = ($template, text, item, $parent) => { + if (item && item[0] && item[1] && text && $template && $parent) { + const $row = $template.clone(); + $('.repay-extra-desc', $row).text(mega.icu.isICUPlural(text) + ? mega.icu.format(text, item[0]) : text.replace('%1', item[0])); + $('.repay-extra-val', $row).text(item[2] ? applyFormat(intl.format(item[2])) + : `${intl.format(item[1])} \u20ac`); + $row.insertAfter($parent); + } + }; + + if (res.inv[0].list) { + addDetailsRow($extraRowTemplate, l.additional_transfer, res.inv[0].list.t, $overduePaymentRow); + addDetailsRow($extraRowTemplate, l.additional_storage, res.inv[0].list.s, $overduePaymentRow); + + // If Pro Flexi, expand any rows by default, hide arrows and don't make clickable + if (u_attr.pf) { + $overduePaymentRow.addClass('expand'); + $overduePaymentRow + .nextUntil('.repay-breakdown-tb-content, .repay-breakdown-tb-total', '.repay-extra-details') + .addClass('expand'); + $('.content-desc-container', $overduePaymentRow) + .removeClass('icon-arrow-down-after icon-arrow-up-after'); + } + else { + // For Business, add a users row and make the row clickable + addDetailsRow($extraRowTemplate, l.users_unit, res.inv[0].list.u, $overduePaymentRow); + $overduePaymentRow.rebind('click.repay', showDetails); + } + } + + if (res.nb && futureAmount) { + const $futurePaymentRow = rowTemplate.clone(); + nbOfUsers = res.nb; + + $('.content-desc', $futurePaymentRow).text(u_attr['%name'] || ' '); + $('.content-date', $futurePaymentRow).text(time2date(Date.now() / 1000, 1)); + $('.content-amou', $futurePaymentRow).text(futureAmount); + + $futurePaymentRow.insertAfter($overduePaymentHeader); + + addDetailsRow($extraRowTemplate, l.additional_transfer, res.list.t, $futurePaymentRow); + addDetailsRow($extraRowTemplate, l.additional_storage, res.list.s, $futurePaymentRow); + + // If Pro Flexi, expand any rows by default, hide arrows and don't make clickable + if (u_attr.pf) { + $futurePaymentRow.addClass('expand'); + $futurePaymentRow + .nextUntil('.repay-breakdown-tb-content, .repay-breakdown-tb-total', '.repay-extra-details') + .addClass('expand'); + $('.content-desc-container', $futurePaymentRow) + .removeClass('icon-arrow-down-after icon-arrow-up-after'); + } + else { + // For Business, add a users row and make the row clickable + addDetailsRow($extraRowTemplate, l.users_unit, res.list.u, $futurePaymentRow); + $futurePaymentRow.rebind('click.repay', showDetails); + } + } + + $('.repay-td-total', $rightBlock).text(totalAmount); + + // If Pro Flexi, don't show the Account information section, also hide billing description row header + if (u_attr.pf) { + $('.js-account-info-section', $leftSection).addClass('hidden'); + $('.js-repay-header-description', $overduePaymentHeader).text(''); + } + + $('#repay-business-cname', $leftSection).text(u_attr['%name']); + $('#repay-business-email', $leftSection).text(u_attr['%email']); + + let nbUsersText = mega.icu.format(l.users_unit, nbOfUsers); + if (res.nbdu) { + const activeUsers = nbOfUsers - res.nbdu; + const inactiveUsersString = mega.icu.format(l.inactive_users_detail, res.nbdu); + nbUsersText += ` ${mega.icu.format(l.users_detail, activeUsers).replace('[X]', inactiveUsersString)}`; + $('.repay-nb-users-info', $leftSection).removeClass('hidden'); + } + $('#repay-business-nb-users', $leftSection).text(nbUsersText); + + business.getListOfPaymentGateways(false).always(fillPaymentGateways); + + // Change to the getProFlexiPlanInfo function if we are Pro Flexi + if (u_attr && u_attr.pf) { + business.getProFlexiPlanInfo().then(function planInfoReceived(st, info) { + mySelf.planInfo = info; + mySelf.planInfo.pastInvoice = res.inv[0]; + mySelf.planInfo.currInvoice = { et: res.et || 0, t: res.t }; + mySelf.userInfo = { + fname: '', + lname: '', + nbOfUsers: res.nb || 0 + }; + }); + } + else { + business.getBusinessPlanInfo(false).done(function planInfoReceived(st, info) { + mySelf.planInfo = info; + mySelf.planInfo.pastInvoice = res.inv[0]; + mySelf.planInfo.currInvoice = { et: res.et || 0, t: res.t }; + mySelf.userInfo = { + fname: '', + lname: '', + nbOfUsers: res.nb || 0 + }; + }); + } + }); + }); +}; diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/447B0E23B5872FAED34946FF9953FBF5BA81C5C7 b/home/.surf/cache/WebKitCache/Version 16/Blobs/447B0E23B5872FAED34946FF9953FBF5BA81C5C7 new file mode 100644 index 0000000..d605ac4 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/447B0E23B5872FAED34946FF9953FBF5BA81C5C7 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/44B6F3043A9473BC287B6C50F245B78EBA4B6A16 b/home/.surf/cache/WebKitCache/Version 16/Blobs/44B6F3043A9473BC287B6C50F245B78EBA4B6A16 new file mode 100644 index 0000000..93c8c0d Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/44B6F3043A9473BC287B6C50F245B78EBA4B6A16 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/4541CF0D106B46C7186A8AE1076B6FE08C57ECAC b/home/.surf/cache/WebKitCache/Version 16/Blobs/4541CF0D106B46C7186A8AE1076B6FE08C57ECAC new file mode 100644 index 0000000..e8c8aea --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/4541CF0D106B46C7186A8AE1076B6FE08C57ECAC @@ -0,0 +1 @@ + diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/45DD4A5C767CAEB9C74EF6050021CF84670857E7 b/home/.surf/cache/WebKitCache/Version 16/Blobs/45DD4A5C767CAEB9C74EF6050021CF84670857E7 new file mode 100644 index 0000000..0ea70b8 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/45DD4A5C767CAEB9C74EF6050021CF84670857E7 @@ -0,0 +1,9083 @@ +/* Bundle Includes: + * js/fm/gallery/gallery.js + * js/fm/albums/Albums.js + * js/ui/onboarding.js + * js/ui/sms.js + */ + +class GalleryNodeBlock { + constructor(node) { + this.node = node; + this.el = document.createElement('a'); + this.el.className = 'data-block-view'; + this.el.id = node.h; + + this.spanEl = document.createElement('span'); + this.spanEl.className = 'data-block-bg content-visibility-auto'; + this.el.append(this.spanEl); + + this.el.nodeBlock = this; + this.isRendered = false; + + this.isVideo = mega.gallery.isGalleryVideo(this.node); + } + + setThumb(dataUrl) { + this.spanEl.classList.add('thumb'); + this.thumb.src = dataUrl; + + if (this.el.nextSibling && this.el.nextSibling.classList.contains('gallery-block-bg-wrap')) { + this.el.nextSibling.querySelector('img').src = dataUrl; + } + } + + fill(mode) { + this.el.setAttribute('title', this.node.name); + + const spanMedia = document.createElement('span'); + this.spanEl.append(spanMedia); + spanMedia.className = 'block-view-file-type file sprite-fm-mono'; + this.thumb = document.createElement('img'); + spanMedia.append(this.thumb); + + if (this.isVideo) { + spanMedia.classList.add('icon-videos', 'video'); + this.spanEl.classList.add('video'); + + const div = document.createElement('div'); + div.className = 'video-thumb-details'; + this.spanEl.append(div); + + const spanTime = document.createElement('span'); + spanTime.textContent = secondsToTimeShort(MediaAttribute(this.node).data.playtime); + div.append(spanTime); + } + else { + spanMedia.classList.add('icon-images', 'image'); + } + + const spanFav = document.createElement('span'); + spanFav.className = 'data-block-fav-icon sprite-fm-mono icon-favourite-filled'; + this.spanEl.append(spanFav); + + if (mode === 'm' || mode === 'y') { + this.el.dataset.ts = this.node.mtime || this.node.ts; + this.el.dataset.date = GalleryNodeBlock.getTimeString( + this.node.mtime || this.node.ts, + mode === 'y' ? 14 : 15 + ); + } + + this.isRendered = true; + } +} + +GalleryNodeBlock.dateKeyCache = Object.create(null); +GalleryNodeBlock.maxGroupChunkSize = 60; +GalleryNodeBlock.thumbCacheSize = 500; + +GalleryNodeBlock.getTimeString = (key, format) => { + 'use strict'; + + const cacheKey = key + '-' + format; + + if (!GalleryNodeBlock.dateKeyCache[cacheKey]) { + GalleryNodeBlock.dateKeyCache[cacheKey] = time2date(key, format); + } + + return GalleryNodeBlock.dateKeyCache[cacheKey]; +}; + +class MegaGallery { + constructor(id) { + this.id = id || M.currentdirid; + this.isDiscovery = !!id; + this.groups = {y: {}, m: {}, d: {}, a: {}}; + this.scrollPosCache = {y: 0, m: 0, d: 0, a: 0}; + this.lastAddedKeys = {}; + this.galleryBlock = document.getElementById('gallery-view'); + this.contentRowTemplateNode = document.getElementById('gallery-cr-template'); + this.updNode = {}; + this.type = mega.gallery.sections[id] ? 'basic' : 'discovery'; + this.shouldProcessScroll = true; + this.inPreview = false; + + this.clearRenderCache(); + this.setObserver(); + } + + get onpage() { + return this.id === M.currentCustomView.nodeID; + } + + setObserver() { + this.nodeBlockObserver = typeof IntersectionObserver === 'undefined' + ? null + : new IntersectionObserver( + (entries) => MegaGallery.handleIntersect(entries, this), + { + root: this.galleryBlock, + rootMargin: '1000px', + threshold: 0.1 + } + ); + } + + dropDynamicList() { + if (this.dynamicList) { + this.dynamicList.destroy(); + this.dynamicList = false; + } + } + + clearRenderCache(key) { + if (key) { + if (this.renderCache[key]) { + delete this.renderCache[key]; + } + } + else { + this.renderCache = Object.create(null); + MegaGallery.revokeThumbs(); + } + } + + static sortViewNodes() { + const sortFn = M.sortByModTimeFn2(); + M.v.sort((a, b) => sortFn(a, b, -1)); + } + + static getCameraHandles() { + if (!M.CameraId) { + return []; + } + + const cameraTree = M.getTreeHandles(M.CameraId); + + if (M.SecondCameraId) { + cameraTree.push(...M.getTreeHandles(M.SecondCameraId)); + } + + return cameraTree; + } + + setMode(type, pushHistory, changeRootMode) { + + if (type !== 'a' && type !== 'y' && type !== 'm' && type !== 'd') { + + console.error('MegaGallery: Entered mode is not valid, fallback to type `a`'); + + return; + } + + if (this.dynamicList) { + this.throttledOnScroll(); + } + + this.mode = type; + this.galleryBlock.classList.remove('gallery-type-a', 'gallery-type-y', 'gallery-type-m', 'gallery-type-d'); + this.galleryBlock.classList.add(`gallery-type-${type}`); + + if (changeRootMode === true + && mega.gallery.sections[M.currentdirid] + && mega.gallery.rootMode[mega.gallery.sections[M.currentdirid].root] + ) { + mega.gallery.rootMode[mega.gallery.sections[M.currentdirid].root] = this.mode; + } + + if (type === 'a') { + this.setZoom(this.zoom || 2); + } + else { + delete this.zoom; + } + + $('.gallery-tab-lnk').removeClass('active'); + $(`.gallery-tab-lnk-${this.mode}`).addClass('active'); + + this.dropDynamicList(); + + if (pushHistory === 2) { + pushHistoryState(true, {subpage: page, galleryMode: this.mode}); + } + else if (pushHistory === 1) { + pushHistoryState(page, {galleryMode: this.mode}); + } + } + + findMiddleImage() { + const $blockViews = $(".MegaDynamicList .data-block-view", this.galleryBlock); + const contentOffset = this.dynamicList.$content.offset(); + const listContainerHeight = this.dynamicList.$listContainer.height(); + + let $middleBlock = null; + let minDistance = 1e6; + + const scrollTop = this.dynamicList.getScrollTop(); + + for (const v of $blockViews) { + const $v = $(v); + + if ($v.offset().left < contentOffset.left + 5) { + const {blockSize, blockTop} = this.getBlockTop($v.attr('id')); + const middle = blockTop + blockSize / 2 - scrollTop; + const distance = Math.abs(listContainerHeight / 2 - middle); + + if (distance < minDistance) { + minDistance = distance; + $middleBlock = $v; + } + } + + } + + return $middleBlock; + } + + setZoom(type) { + + const min = 1; + const max = 4; + + if (typeof type !== 'number' || type < min || type > max) { + + console.error('MegaGallery: None supporting zoom level provided.'); + + return; + } + + if (this.mode !== 'a') { + + console.error('MegaGallery: Zoom is only support on all view.'); + + return; + } + + this.zoom = type; + + for (let i = min; i < max + 1; i++) { + this.galleryBlock.classList.remove(`zoom-${i}`); + } + + this.galleryBlock.classList.add(`zoom-${type}`); + + const zoomInBtn = this.galleryBlock.querySelector('.zoom-in'); + const zoomOutBtn = this.galleryBlock.querySelector('.zoom-out'); + + zoomInBtn.classList.remove('disabled'); + zoomOutBtn.classList.remove('disabled'); + + if (this.zoom === min) { + zoomInBtn.classList.add('disabled'); + } + else if (this.zoom === max) { + zoomOutBtn.classList.add('disabled'); + } + } + + setGroup(n) { + const res = this.getGroup(n); + + this.setYearGroup(res[1], n.h); + this.setMonthGroup(res[2], res[3]); + this.setDayGroup(res[3], n.h); + this.setAllGroup(res[2], n.h); + + return res; + } + + getGroup(n) { + const timestamp = n.mtime || n.ts || Date.now() / 1000; + const time = new Date(timestamp * 1000); + + const year = time.getFullYear(); + const month = time.getMonth(); + const day = time.getDate(); + + return [ + timestamp, + parseInt(new Date(year, 0, 1) / 1000), + parseInt(new Date(year, month, 1) / 1000), + parseInt(new Date(year, month, day) / 1000), + ]; + } + + setYearGroup(key, h) { + + this.groups.y[key] = this.groups.y[key] || {c: 0, n: []}; + this.groups.y[key].c++; + + if (this.groups.y[key].n.length < 1) { + this.groups.y[key].n.push(h); + } + } + + // For mega dynamic list, every 2 years should be merged as 1 group. + mergeYearGroup() { + const yearKeys = Object.keys(this.groups.y); + const newStructure = {}; + + for (let i = yearKeys.length - 1; i > -1; i -= 2) { + newStructure[yearKeys[i]] = {c: [this.groups.y[yearKeys[i]].c], n: [this.groups.y[yearKeys[i]].n[0]]}; + + if (this.groups.y[yearKeys[i - 1]]) { + + newStructure[yearKeys[i]].sy = yearKeys[i - 1]; + newStructure[yearKeys[i]].c.push(this.groups.y[yearKeys[i - 1]].c); + newStructure[yearKeys[i]].n.push(this.groups.y[yearKeys[i - 1]].n[0]); + } + } + + this.groups.y = newStructure; + } + + splitYearGroup() { + + const yearGroups = Object.keys(this.groups.y); + const splitedYearGroup = {}; + + for (var i = yearGroups.length; i--;) { + + splitedYearGroup[yearGroups[i]] = { + c: this.groups.y[yearGroups[i]].c[0], + n: [this.groups.y[yearGroups[i]].n[0]] + }; + + if (this.groups.y[yearGroups[i]].sy) { + + splitedYearGroup[this.groups.y[yearGroups[i]].sy] = { + c: this.groups.y[yearGroups[i]].c[1], + n: [this.groups.y[yearGroups[i]].n[1]] + }; + } + } + + this.groups.y = splitedYearGroup; + } + + addToYearGroup(n, ts) { + const sts = `${ts}`; + + // This is existing year in view, nice. + if (this.groups.y[ts]) { + + this.groups.y[ts].c[0]++; + + if (this.nodes[n.h] > this.nodes[this.groups.y[ts].n[0]]) { + + this.groups.y[ts].n[0] = n.h; + + if (this.dynamicList) { + this.clearRenderCache(`y${ts}`); + + if (this.mode === 'y') { + this.throttledListChange(sts); + } + } + } + } + else { + + // This is secondary year of existing year in the view, good. + const yearGroups = Object.keys(this.groups.y); + + for (var i = yearGroups.length; i--;) { + + if (this.groups.y[yearGroups[i]].sy === sts) { + + this.groups.y[yearGroups[i]].c[1]++; + + if (this.nodes[n.h] > this.nodes[this.groups.y[yearGroups[i]].n[1]]) { + + this.groups.y[yearGroups[i]].n[1] = n.h; + + if (this.dynamicList && this.mode === 'y') { + + this.clearRenderCache(`y${ts}`); + this.throttledListChange(sts); + } + } + + return; + } + } + + // Damn this is new year we need to build whole year view again as it requires to push year after this + this.splitYearGroup(); + this.setYearGroup(ts, n.h); + this.mergeYearGroup(); + + if (this.onpage && this.mode === 'y') { + this.resetAndRender(); + } + } + } + + removeFromYearGroup(h, ts) { + const sts = `${ts}`; + let removeGroup = false; + + // This is existing year in view, nice. + if (this.groups.y[ts]) { + + if (--this.groups.y[ts].c[0] === 0) { + removeGroup = true; + } + else if (h === this.groups.y[ts].n[0]) { + this.groups.y[ts].n[0] = this.findYearCover(ts); + + this.clearRenderCache(`y${ts}`); + this.throttledListChange(sts); + } + } + else { + + // This is probably secondary year of existing year in the view, let's check. + const yearGroups = Object.keys(this.groups.y); + + for (var i = yearGroups.length; i--;) { + + if (parseInt(this.groups.y[yearGroups[i]].sy) === ts && --this.groups.y[yearGroups[i]].c[1] === 0) { + removeGroup = true; + break; + } + else if (h === this.groups.y[yearGroups[i]].n[1]) { + this.groups.y[yearGroups[i]].n[1] = this.findYearCover(ts); + this.clearRenderCache(`y${yearGroups[i]}`); + this.throttledListChange(yearGroups[i]); + } + } + } + + // Damn this is delete an year from view we need to build year view again. + if (removeGroup) { + this.splitYearGroup(); + delete this.groups.y[ts]; + this.mergeYearGroup(); + + if (this.onpage) { + this.resetAndRender(); + } + } + } + + findYearCover(ts) { + const keys = Object.keys(this.groups.a); + const {start, end} = calculateCalendar('y', ts); + let m = 0; + let s = ""; + for (const k of keys) { + const f = parseFloat(k); + const n = Math.round(f); + if (start <= n && n <= end && f > m) { + m = f; + s = k; + } + } + + if (this.groups.a[s] && this.groups.a[s].n.length > 0) { + return this.groups.a[s].n[0]; + } + + return null; + + } + + rebuildDayGroup(ts) { + delete this.groups.d[ts]; + delete this.groups.d[ts - 0.5]; + this.clearRenderCache(`d${ts}`); + this.clearRenderCache(`d${ts - 0.5}`); + + const {start, end} = calculateCalendar('d', ts); + const keys = Object.keys(this.nodes); + for (const h of keys) { + const n = M.d[h]; + + if (!n) { + continue; + } + + const timestamp = n.mtime || n.ts; + if (start <= timestamp && timestamp <= end) { + const res = this.getGroup(n); + this.setDayGroup(res[3], n.h); + } + } + } + + rebuildMonthGroup(ts) { + delete this.groups.m[ts]; + const {start, end} = calculateCalendar('m', ts); + const keys = Object.keys(this.nodes); + for (const h of keys) { + const n = M.d[h]; + + if (!n) { + continue; + } + + const timestamp = n.mtime || n.ts; + if (start <= timestamp && timestamp <= end) { + const res = this.getGroup(n); + this.setMonthGroup(ts, res[3]); + } + } + this.filterOneMonthGroup(ts); + } + + setMonthGroup(key, dayTs) { + + this.groups.m[key] = this.groups.m[key] || + { + l: GalleryNodeBlock.getTimeString(key, 3), + ml: GalleryNodeBlock.getTimeString(key, 13), + c: 0, + n: [], + dts: {}, + ldts: 0 + }; + this.groups.m[key].c++; + this.groups.m[key].dts[dayTs] = 1; + this.groups.m[key].ldts = Math.max(this.groups.m[key].ldts, dayTs); + } + + filterOneMonthGroup(ts) { + const dayKeys = Object.keys(this.groups.m[ts].dts); + + dayKeys.sort((a, b) => b - a); + + this.groups.m[ts].n = dayKeys.slice(0, 4).map(k => this.groups.d[k].n[0]); + this.groups.m[ts].dts = {}; + } + + filterMonthGroup() { + const monthKeys = Object.keys(this.groups.m).sort((a, b) => b - a); + let triEvenCount = 0; + + for (let i = 0; i < monthKeys.length; i++) { + const dayKeys = Object.keys(this.groups.m[monthKeys[i]].dts); + + dayKeys.sort((a, b) => b - a); + + const max = i % 3 === 2 ? 4 : 3; + + this.groups.m[monthKeys[i]].n = dayKeys.slice(0, 4).map(k => this.groups.d[k].n[0]); + this.groups.m[monthKeys[i]].max = max; + + const count = Math.min(max, this.groups.m[monthKeys[i]].n.length); + + if (count === 3) { + this.groups.m[monthKeys[i]].r = triEvenCount++ % 2 === 1; + } + else if (count === 1 && this.groups.d[dayKeys[0]].n.length > 1) { + this.groups.m[monthKeys[i]].extn = this.groups.d[dayKeys[0]].n[1]; + } + + this.groups.m[monthKeys[i]].dts = {}; + } + } + + updateMonthMaxAndOrder() { + + const monthKeys = Object.keys(this.groups.m).sort((a, b) => b - a); + let triEvenCount = 0; + + for (let i = 0; i < monthKeys.length; i++) { + + const max = i % 3 === 2 ? 4 : 3; + + this.groups.m[monthKeys[i]].max = max; + + delete this.groups.m[monthKeys[i]].r; + + const count = Math.min(max, this.groups.m[monthKeys[i]].n.length); + + if (count === 3) { + this.groups.m[monthKeys[i]].r = triEvenCount++ % 2 === 1; + } + } + } + + // This function is rely on result from day group processing. + // Therefore, day group has to be processed before execute this function. + addToMonthGroup(n, ts, dts) { + const group = this.groups.m[ts]; + const sts = `${ts}`; + + // This is a node for existing group + if (group) { + const compareGroup = clone(group); + + group.c++; + + let sameDayNode = false; + let sameDayNodeIndex; + + for (var i = 0; i < group.n.length; i++) { + + if (calculateCalendar('d', this.nodes[group.n[i]]).start === dts) { + sameDayNode = group.n[i]; + sameDayNodeIndex = i; + break; + } + } + + if (sameDayNode) { + + if (this.nodes[n.h] > this.nodes[sameDayNode]) { + group.n.splice(sameDayNodeIndex, 1, n.h); + } + + // This is only one day month + if (group.n.length === 1 && this.groups.d[dts].n.length > 1) { + group.extn = this.groups.d[dts].n[1]; + } + } + else { + delete group.extn; + + group.n.push(n.h); + group.n.sort((a, b) => this.nodes[b] - this.nodes[a]); + group.n = group.n.slice(0, 4); + } + + if (this.dynamicList && this.mode === 'm' && (group.extn !== compareGroup.extn || + !group.n.every(h => compareGroup.n.includes(h)))) { + + this.clearRenderCache(`m${ts}`); + this.throttledListChange(sts); + } + } + // This is a node for new group + else { + this.groups.m[ts] = { + c: 1, + dts: {}, + l: GalleryNodeBlock.getTimeString(ts, 3), + ldts: dts, + ml: GalleryNodeBlock.getTimeString(ts, 13), + n: [n.h] + }; + + this.updateMonthMaxAndOrder(); + + if (this.dynamicList && this.mode === 'm') { + + const mts = Object.keys(this.groups.m); + + mts.sort((a, b) => b - a); + + this.dynamicList.insert(mts[mts.indexOf(sts) - 1], sts, this.onpage); + } + } + } + + // This function is rely on result from day group processing. + // Therefore, day group has to be processed before execute this function. + removeFromMonthGroup(h, ts, dts) { + + let group = this.groups.m[ts]; + + if (!group) { + return; + } + + const compareGroup = clone(group); + const sts = `${ts}`; + + const _setExtraNode = dts => { + + if (this.groups.d[dts] && this.groups.d[dts].n.length > 1) { + + group.extn = this.groups.d[dts].n[1]; + return group.extn; + } + }; + + group.c--; + + // The node was last node for the group lets delete whole group + if (group.c === 0) { + + delete this.groups.m[ts]; + + this.updateMonthMaxAndOrder(); + this.clearRenderCache(`m${ts}`); + + if (this.mode === 'm' && this.dynamicList) { + this.dynamicList.remove(sts, this.onpage); + } + + } + // The node is extra node for single day month block, lets remove extra node or update it. + else if (group.extn === h) { + + if (!_setExtraNode(dts)) { + delete group.extn; + } + this.clearRenderCache(`m${ts}`); + this.throttledListChange(sts); + } + else { + + this.rebuildMonthGroup(ts); + this.updateMonthMaxAndOrder(); + + group = this.groups.m[ts]; + + if (group.n.length === 1) { + _setExtraNode(calculateCalendar('d', this.nodes[group.n[0]]).start); + } + + if (group.extn !== compareGroup.extn || + !compareGroup.n.every(h => group.n.includes(h))) { + this.clearRenderCache(`m${ts}`); + this.throttledListChange(sts); + } + } + } + + setDayGroup(key, h) { + + this.groups.d[key] = this.groups.d[key] || {l: GalleryNodeBlock.getTimeString(key, 2), c: 0, n: []}; + this.groups.d[key].c++; + + if (this.groups.d[key].c <= 5) { + + if (this.groups.d[key].n.length === 4) { + + const itemsToMove = this.groups.d[key].n.splice(2, 2); + + this.groups.d[key - 0.5] = {l: '', c: 0, mc: 0, n: [...itemsToMove]}; + this.groups.d[key - 0.5].n.push(h); + } + else { + this.groups.d[key].n.push(h); + } + } + else { + this.groups.d[key - 0.5].mc++; + } + } + + addToDayGroup(n, ts) { + + // If the day block has more than 4 items, we do not need to update layout but possibly just change nodes list + if (this.groups.d[ts] && this.groups.d[ts].c > 4) { + + const dayGroup1 = this.groups.d[ts]; + const dayGroup2 = this.groups.d[ts - 0.5]; + + dayGroup1.c++; + dayGroup2.mc++; + + const nodeGroup = [...dayGroup1.n, ...dayGroup2.n]; + const compareGroup = new Set([...dayGroup1.n, ...dayGroup2.n]); + + nodeGroup.push(n.h); + nodeGroup.sort(this.sortByMtime.bind(this)); + nodeGroup.pop(); + + // Ends up same group we do not need to update anything + if (nodeGroup.every(node => compareGroup.has(node))) { + return; + } + + dayGroup1.n = nodeGroup.splice(0, 2); + dayGroup2.n = nodeGroup; + } + // If the day block has less than 5 just run normal setDayGroup to update existing layout. + else { + this.setDayGroup(ts, n.h); + } + + if (this.dynamicList && this.mode === 'd') { + + const sts1 = `${ts}`; + const sts2 = `${ts - 0.5}`; + + if (this.groups.d[ts].c === 1) { + + const keys = Object.keys(this.groups.d).sort((a, b) => b - a); + + this.dynamicList.insert(keys[keys.indexOf(sts1) - 1], sts1, this.onpage); + } + else if (this.groups.d[ts].c === 5) { + + this.clearRenderCache(`d${ts - 0.5}`); + this.clearRenderCache(`d${ts}`); + + this.throttledListChange(sts1); + this.dynamicList.insert(sts1, sts2, this.onpage); + } + else if (this.groups.d[ts].c > 5) { + + this.clearRenderCache(`d${ts - 0.5}`); + this.clearRenderCache(`d${ts}`); + + this.throttledListChange(sts1); + this.throttledListChange(sts2); + } + else { + this.clearRenderCache(`d${ts}`); + this.throttledListChange(sts1); + } + } + } + + removeFromDayGroup(h, ts) { + const stsArr = [`${ts}`, `${ts - 0.5}`]; // sts keys of groups to remove + + this.rebuildDayGroup(ts); + + for (let i = 0; i < stsArr.length; i++) { + const sts = stsArr[i]; + + if (this.groups.d[sts]) { + this.throttledListChange(sts); + } + else if (this.mode === 'd' && this.dynamicList && this.dynamicList.items.includes(sts)) { + this.dynamicList.remove(sts, this.onpage); + } + } + } + + // lets Chunk block by 60 to optimise performance of dom rendering + setGroupChunk(ts) { + let key = ''; + let timeLabel = ''; + + if (!this.lastAddedKeys[ts]) { + key = ts.toFixed(5); + this.lastAddedKeys[ts] = key; + timeLabel = GalleryNodeBlock.getTimeString(ts, 3); + } + else if (this.groups.a[this.lastAddedKeys[ts]] + && this.groups.a[this.lastAddedKeys[ts]].n.length >= GalleryNodeBlock.maxGroupChunkSize) { + key = (parseFloat(this.lastAddedKeys[ts]) - 0.00001).toFixed(5); + this.lastAddedKeys[ts] = key; + } + else { + key = this.lastAddedKeys[ts]; + } + + if (!this.groups.a[key]) { + this.groups.a[key] = {l: timeLabel, c: 0, n: []}; + } + + return key; + } + + setAllGroup(ts, h) { + // Keep this one first, as setGroupChunk creates an initial chunk as well + const key = this.setGroupChunk(ts); + + this.groups.a[ts.toFixed(5)].c++; + + this.groups.a[key].n.push(h); + return key; + } + + + flatTargetAllGroup(ts) { + + ts = ts.toFixed(5); + + // if there is no beginning group, no point to do heavy lifting + if (!this.groups.a[ts]) { + return []; + } + + const nodes = []; + const groupKeys = Object.keys(this.groups.a); + + groupKeys.sort().reverse(); + + for (let i = 0; i < groupKeys.length; i++) { + + const ceiledKey = Math.ceil(groupKeys[i]).toFixed(5); + + if (ceiledKey === ts) { + nodes.push(...this.groups.a[groupKeys[i]].n); + + delete this.groups.a[groupKeys[i]]; + this.clearRenderCache(`a${groupKeys[i]}`); + } + else if (ceiledKey < ts) { + break; + } + } + + this.lastAddedKeys = {}; + + return nodes; + } + + addToAllGroup(n, ts) { + const flatNodes = this.flatTargetAllGroup(ts); + + flatNodes.push(n.h); + flatNodes.sort(this.sortByMtime.bind(this)); + + // Even only single node added, it can cause multiple group updated + const reGrouped = {}; + + flatNodes.forEach(h => { + reGrouped[this.setAllGroup(ts, h)] = 1; + }); + + let reGroupedCount = Object.keys(reGrouped).length; + + if (this.dynamicList && this.mode === 'a') { + + const items = this.dynamicList.items; + + for (let i = 0; i < items.length; i++) { + + if (reGrouped[items[i]]) { + + delete reGrouped[items[i]]; + reGroupedCount--; + + if (this.onpage) { + this.clearRenderCache('y' + items[i]); + this.throttledListChange(items[i]); + } + + if (!reGroupedCount) { + break; + } + } + } + + // Adding new group + if (reGroupedCount) { + + // New group can only one at a time + const leftover = Object.keys(reGrouped)[0]; + let after; + + // If there is no nodes or there is node but it is earlier ts than first node place node at beginning + if (!items[0] || items[0] - leftover < 0) { + after = 0; + } + // Else find suitable place to place new group. + else { + after = items.find((item, i) => (items[i + 1] || 0) - leftover < 0); + } + + this.dynamicList.insert(after, leftover, this.onpage); + } + } + } + + removeFromAllGroup(h, ts) { + if (M.d[h] && M.d[h].fa) { + GalleryNodeBlock.revokeThumb(M.d[h].fa); + } + + const flatNodes = this.flatTargetAllGroup(ts).filter(nh => nh !== h); + + const reGrouped = {}; + + flatNodes.forEach(nh => { + reGrouped[this.setAllGroup(ts, nh)] = 1; + }); + + if (this.dynamicList && this.mode === 'a') { + + if (flatNodes.length === 0) { + this.dynamicList.remove(ts.toFixed(5), this.onpage); + + return; + } + + let last; + + this.dynamicList.items.forEach(group => { + + if (reGrouped[group]) { + + last = group; + + if (this.onpage) { + this.throttledListChange(group); + } + } + }); + + // Clear empty group if exist. + const leftover = (last - 0.00001).toFixed(5); + + if (this.dynamicList.items.includes(leftover)) { + this.dynamicList.remove(leftover, this.onpage); + } + } + } + + async addNodeToGroups(n) { + if (n.fv) { + return; + } + + this.updNode[n.h] = n; + + const updatedGroup = this.getGroup(n); + + this.nodes[n.h] = updatedGroup[0]; + + if (!M.d[n.h]) { + await dbfetch.get(n.h); + } + + if (!this.dynamicList && this.onpage) { + this.initDynamicList(); + this.dynamicList.initialRender(); + } + + // Do not change order, some function here is rely on result from another + // This order should be keep this way in order to process data in order. + this.addToAllGroup(n, updatedGroup[2]); + this.addToDayGroup(n, updatedGroup[3]); + this.addToMonthGroup(n, updatedGroup[2], updatedGroup[3]); + this.addToYearGroup(n, updatedGroup[1]); + + if (this.dynamicList && this.onpage) { + M.v = Object.keys(this.nodes).map(h => M.d[h] || this.updNode[h]); + } + + MegaGallery.sortViewNodes(); + + delete this.updNode[n.h]; + + this.throttledResize(); + } + + removeNodeFromGroups(n) { + if (!this.nodes[n.h]) { + return; // The node has been removed already + } + + const updatedGroup = this.getGroup(n); + + delete this.nodes[n.h]; + + // Do not change order, some function here is rely on result from another + // This order should be keep this way in order to process data in order. + this.removeFromAllGroup(n.h, updatedGroup[2]); + this.removeFromDayGroup(n.h, updatedGroup[3]); + this.removeFromMonthGroup(n.h, updatedGroup[2], updatedGroup[3]); + this.removeFromYearGroup(n.h, updatedGroup[1]); + + if (this.dynamicList && M.currentCustomView.original === this.id) { + M.v = Object.keys(this.nodes).map(h => M.d[h] || this.updNode[h]); + } + + MegaGallery.sortViewNodes(); + + if (this.dynamicList && M.v.length === 0) { + this.dropDynamicList(); + this.galleryBlock.classList.add('hidden'); + + mega.gallery.showEmpty(M.currentdirid); + } + } + + // Special operation for d action packet which may lost node data already when reaching here + removeNodeByHandle(h) { + if (!this.nodes[h]) { + return; + } + + if (M.d[h]) { + this.removeNodeFromGroups(M.d[h]); + } + else { + this.removeNodeFromGroups({h: h, mtime: this.nodes[h]}); + } + } + + // Update dom node names if changed + updateNodeName(n) { + + const group = this.getGroup(n); + const rcKeys = Object.keys(this.renderCache); + + for (let i = rcKeys.length; i--;) { + + if (rcKeys[i].startsWith(`y${group[1]}`) || rcKeys[i].startsWith(`m${group[2]}`) || + rcKeys[i].startsWith(`d${group[3]}`) || rcKeys[i].startsWith(`a${group[2]}`)) { + + const domNode = this.renderCache[rcKeys[i]].querySelector(`[id="${n.h}"]`); + + if (domNode && domNode.title !== n.name) { + domNode.title = n.name; + } + } + } + } + + initDynamicList() { + + this.slideShowCloseLister = mBroadcaster.addListener('slideshow:close', () => { + delay('galleryCloseSlideShow', () => { + this.inPreview = false; + }); + }); + + $('.fm-right-files-block').removeClass('emptied'); + $(`.fm-empty-${this.isDiscovery ? 'discovery' : this.id}`).addClass('hidden'); + this.galleryBlock.classList.remove('hidden'); + + if (this.mode === 'a') { + this.galleryBlock.classList.add(`zoom-${this.zoom}`); + } + + this.dynamicList = new MegaDynamicList(document.querySelector('.gallery-view-scrolling'), { + 'contentContainerClasses': 'content', + 'itemRenderFunction': this.renderGroup.bind(this), + 'itemHeightCallback': this.getGroupHeight.bind(this), + 'onResize': this.throttledResize.bind(this), + 'onScroll': this.throttledOnScroll.bind(this), + 'perfectScrollOptions': { + 'handlers': ['click-rail', 'drag-scrollbar', 'wheel', 'touch'], + 'minScrollbarLength': 20 + } + }); + } + + render(rewriteModeByRoot, reset) { + if (rewriteModeByRoot !== false && mega.gallery.sections[M.currentdirid]) { + const modeResetIsNeeded = reset === true + && M.currentdirid === mega.gallery.sections[M.currentdirid].root + && ( + M.currentdirid === M.previousdirid + || ( + mega.gallery.sections[M.previousdirid] + && mega.gallery.sections[M.previousdirid].root === mega.gallery.sections[M.currentdirid].root + ) + ); + + if (modeResetIsNeeded) { + this.setMode('a', 2, true); + } + else if (mega.gallery.rootMode[mega.gallery.sections[M.currentdirid].root] + && this.mode !== mega.gallery.rootMode[mega.gallery.sections[M.currentdirid].root]) { + this.setMode(mega.gallery.rootMode[mega.gallery.sections[M.currentdirid].root], 2); + } + } + + if (M.v.length > 0) { + if (mega.gallery.emptyBlock) { + mega.gallery.emptyBlock.hide(); + } + + this.initDynamicList(); + + const keys = Object.keys(this.activeModeList).sort((a, b) => b - a); + + this.dynamicList.batchAdd(keys); + this.dynamicList.initialRender(); + this.dynamicList.scrollToYPosition(this.scrollPosCache[this.mode].a); + } + else { + mega.gallery.showEmpty(M.currentdirid); + this.galleryBlock.classList.add('hidden'); + } + } + + resetAndRender() { + if (this.dynamicList && M.currentCustomView.original === this.id) { + M.v = Object.keys(this.nodes).map(h => M.d[h] || this.updNode[h]); + } + + MegaGallery.sortViewNodes(); + + this.clearRenderCache(); + this.dropDynamicList(); + + this.render(); + } + + bindEvents() { + + const $galleryBlock = $(this.galleryBlock); + + $galleryBlock.rebind('click.galleryView', '.data-block-view', e => { + + const $eTarget = $(e.currentTarget); + const h = $eTarget.attr('id'); + + selectionManager.clear_selection(); + selectionManager.add_to_selection(h); + + $.hideContextMenu(e); + + return false; + }); + + $galleryBlock.rebind('contextmenu.galleryView', '.data-block-view', e => { + + if (this.mode !== 'a') { + return false; + } + + $.hideContextMenu(e); + selectionManager.resetTo(e.currentTarget.id); + M.contextMenuUI(e, 1); + }); + + $galleryBlock.rebind('click.galleryView', '.gallery-date-block', e => { + + const $eTarget = $(e.currentTarget); + let targetTs = $eTarget.parent().attr('id').replace('gallery-', ''); + + targetTs = this.groups.m[targetTs].ldts; + + this.setMode('d', 1, true); + this.render(); + + onIdle(() => { + this.dynamicList.scrollToItem(targetTs); + this.throttledOnScroll(); + }); + + return false; + }); + + $galleryBlock.rebind('click.galleryViewClear', () => { + selectionManager.clear_selection(); + }); + + $galleryBlock.rebind('dblclick.galleryView', '.data-block-view', e => { + + const $eTarget = $(e.currentTarget); + + if (this.mode === 'a') { + const h = $eTarget.attr('id'); + const n = M.d[h] || {}; + + if (e.currentTarget.nodeBlock.isVideo) { + if (!e.currentTarget.nodeBlock.isVideo.isPreviewable || !MediaAttribute.getMediaType(n)) { + M.addDownload([h]); + return; + } + + $.autoplay = h; + } + + this.inPreview = true; + slideshow(h, false); + } + else { + let clickedDate = this.mode === 'd' ? + $eTarget.closest('.content-row').attr('id').replace('gallery-', '') : $eTarget.attr('data-ts'); + + clickedDate = calculateCalendar(this.mode === 'm' ? 'd' : 'm', Math.ceil(clickedDate)).start; + + this.setMode(this.mode === 'd' ? 'a' : this.mode === 'm' ? 'd' : 'm', 1, true); + this.render(); + + onIdle(() => { + + if (this.mode === 'a') { + + const handle = e.currentTarget.id; + + clickedDate = clickedDate.toFixed(5); + + while (this.groups.a[clickedDate]) { + + if (this.groups.a[clickedDate].n.includes(handle)) { + break; + } + + clickedDate = (clickedDate - 0.00001).toFixed(5); + } + + this.dynamicList.scrollToItem(clickedDate); + + const scrollTarget = document.getElementById(e.currentTarget.id); + + if (scrollTarget) { + const nodeOffset = this.dynamicList.listContainer.scrollTop + scrollTarget.offsetTop - 8; + this.dynamicList.scrollToYPosition(nodeOffset); + } + } + else { + this.dynamicList.scrollToItem(clickedDate); + } + + this.throttledOnScroll(); + }); + } + }); + + $('.gallery-tab-lnk').rebind('click', e => { + + if (this.mode === e.currentTarget.attributes['data-folder'].value) { + + this.dynamicList.scrollToYPosition(0); + this.throttledOnScroll(); + + return false; + } + + this.setMode(e.currentTarget.attributes['data-folder'].value, 1, true); + this.render(false); + }); + + $('.gallery-view-zoom-control > button', this.galleryBlock).rebind('click.galleryZoom', e => { + e.stopPropagation(); + + $.hideContextMenu(e); + + if (!this.$middleBlock) { + this.$middleBlock = this.findMiddleImage(); + } + + if (e.currentTarget.classList.contains('disabled')) { + return false; + } + else if (e.currentTarget.classList.contains('zoom-in')) { + this.setZoom(this.zoom - 1); + } + else if (e.currentTarget.classList.contains('zoom-out')) { + this.setZoom(this.zoom + 1); + } + + this.dynamicList.itemRenderChanged(false, true); + + if (this.$middleBlock) { + const listContainerHeight = this.dynamicList.$listContainer.height(); + const {blockSize, blockTop} = this.getBlockTop(this.$middleBlock.attr('id')); + this.shouldProcessScroll = false; + this.dynamicList.scrollToYPosition(blockTop - (listContainerHeight - blockSize) / 2); + } + + return false; + + }); + + if (!this.beforePageChangeListener) { + this.beforePageChangeListener = mBroadcaster.addListener('beforepagechange', tpage => { + + this.dropDynamicList(); + + // Clear render cache for free memory + this.clearRenderCache(); + + // Clear thumbnails to free memory if target page is not gallery anymore + if (M.isCustomView(tpage).type !== 'gallery') { + mBroadcaster.removeListener(this.beforePageChangeListener); + delete this.beforePageChangeListener; + + // Clear discovery + if (this.isDiscovery) { + delete mega.gallery.discovery; + + if (mega.gallery.mdReporter.runId) { + mega.gallery.mdReporter.stop(); + } + } + } + + if (this.workerBranch) { + webgl.worker.detach(this.workerBranch); + delete this.workerBranch; + } + + $(window).unbind('keyup.exitDiscovery'); + if (this.slideShowCloseLister) { + mBroadcaster.removeListener(this.slideShowCloseLister); + } + }); + } + + $(window).rebind('popstate.galleryview', e => { + if (mega.gallery.titleControl) { + mega.gallery.titleControl.hide(); + } + + if (e.originalEvent.state.galleryMode && this.id === M.currentdirid) { + this.setMode(e.originalEvent.state.galleryMode, undefined, true); + this.render(false); + } + }); + + if (this.isDiscovery) { + $('.gallery-close-discovery').rebind('click.exitDiscovery', () => { + M.openFolder(this.id); + }); + + $(window).rebind('keyup.exitDiscovery', e => { + if (e.keyCode === 27 && !this.inPreview) { // ESC key pressed + M.openFolder(this.id); + } + }); + } + } + + sortByMtime(ah, bh) { + + const a = M.d[ah] || this.updNode[ah]; + const b = M.d[bh] || this.updNode[bh]; + + return M.sortByModTimeFn2()(a, b, -1); + } + + renderGroup(id) { + const cacheKey = this.mode + id; + + if (!this.renderCache[cacheKey]) { + const group = this.getGroupById(id); + + const groupWrap = this.contentRowTemplateNode.cloneNode(true); + const contentBlock = groupWrap.querySelector('.content-block'); + + groupWrap.classList.remove('template'); + groupWrap.id = `gallery-${id}`; + + this.renderCache[cacheKey] = groupWrap; + + if (!group) { + return this.renderCache[cacheKey]; + } + + if (this.mode !== 'm') { + group.n.sort(this.sortByMtime.bind(this)); + + if (group.l) { + groupWrap.classList.add('showDate'); + contentBlock.dataset.date = group.l; + } + } + + let l = group.n.length; + + if (group.max) { + l = Math.min(group.max, group.n.length); + } + + for (let i = 0; i < l; i++) { + + const nodeElm = this.renderNode(group.n[i]); + + if (nodeElm) { + contentBlock.appendChild(nodeElm); + } + } + + if (group.extn) { + + const extraNode = this.renderNode(group.extn); + + if (extraNode) { + + extraNode.removeAttribute('data-date'); + contentBlock.appendChild(extraNode); + } + } + + if (this.mode === 'd') { + this.renderNodeExtraDay(group, groupWrap, contentBlock, l); + } + else if (this.mode === 'm') { + this.renderNodeExtraMonth(group, groupWrap, contentBlock, l); + } + } + + this.clearSelection(id); + + return this.renderCache[cacheKey]; + } + + renderNodeExtraMonth(group, groupWrap, contentBlock, l) { + + const dateblock = document.createElement('a'); + + dateblock.classList.add('gallery-date-block'); + + // Special month corrective for Vietnamese. + if (locale === 'vi') { + group.ml = group.ml.toLowerCase(); + } + + $(dateblock).safeHTML(group.l.replace(group.ml, `${group.ml}`)); + + const iconBlock = document.createElement('i'); + + iconBlock.classList.add('sprite-fm-mono', 'icon-arrow-right'); + dateblock.append(iconBlock); + groupWrap.prepend(dateblock); + + if (group.r) { + groupWrap.classList.add('layout-3-2'); + } + else { + groupWrap.classList.add(`layout-${l}`); + } + } + + renderNodeExtraDay(group, groupWrap, contentBlock, l) { + + // c is only numeric 0 when it is sub block + if (group.c === 0) { + groupWrap.classList.add('layout-3-2'); + } + else { + groupWrap.classList.add(`layout-${l}`); + } + + if (group.mc) { + + groupWrap.classList.add('showMore'); + contentBlock.dataset.more = `+${group.mc}`; + } + + if (group.n.length === 1) { + + const bgimg = document.createElement('img'); + const wrap = document.createElement('div'); + + bgimg.classList.add('gallery-block-bg'); + wrap.classList.add('gallery-block-bg-wrap'); + + wrap.append(bgimg); + contentBlock.append(wrap); + } + } + + // Selection Removal for cache + clearSelection(id) { + + if ($.selected.length) { + + const selectedInCache = this.renderCache[this.mode + id].getElementsByClassName('ui-selected'); + + for (var i = selectedInCache.length; i--;) { + + if (selectedInCache[i].id !== $.selected[0]) { + selectedInCache[i].classList.remove('ui-selected'); + } + } + } + } + + renderNode(h) { + const node = M.d[h] || new MegaNode(this.updNode[h]); + + if (!node) { + return; + } + + const elm = new GalleryNodeBlock(node); + + if (this.nodeBlockObserver) { + this.nodeBlockObserver.observe(elm.el, this); + } + else { + elm.fill(this.mode); + MegaGallery.addThumbnails([elm]); + } + + return elm.el; + } + + getBlockTop(id) { + const keys = Object.keys(this.activeModeList).sort((a, b) => b - a); + let height = 0; + let blockSize = 0; + for (const key of keys) { + const group = this.getGroupById(key); + const index = group.n.indexOf(id); + if (index === -1) { + height += this.getGroupHeight(key); + } + else { + const maxItems = {1: 3, 2: 5, 3: 10, 4: 15}; + const maxItemsInRow = maxItems[this.zoom]; + blockSize = this.dynamicList.$content.width() / maxItemsInRow; + height += Math.floor(index / maxItemsInRow) * blockSize; + return { + blockSize: blockSize, + blockTop: height + }; + } + } + return { + blockSize: blockSize, + blockTop: height + }; + } + + getGroupHeight(id) { + + const wrapWidth = Math.max(Math.min(this.dynamicList.$content.width(), 820), 620); + const group = this.getGroupById(id); + + if (this.mode === 'a') { + + const maxItems = {1: 3, 2: 5, 3: 10, 4: 15}; + const maxItemsInRow = maxItems[this.zoom]; + const blockSize = this.dynamicList.$content.width() / maxItemsInRow; + + return Math.ceil(group.n.length / maxItemsInRow) * blockSize; + } + else if (this.mode === 'd' || this.mode === 'y') { + return wrapWidth / 2 + (this.mode === 'y' ? 16 : 0); + } + else if (this.mode === 'm') { + + let height; + + if (group.n.length <= 2) { + height = (wrapWidth - 20) / 2; + } + else if (group.n.length === 3) { + height = 380 / 620 * wrapWidth; + } + else { + height = 420 / 620 * wrapWidth; + } + + return height + 64; + } + } + + throttledResize() { + delay('gallery.resizeListener', () => { + if (this.dynamicList) { + this.dynamicList.itemRenderChanged(false, true); + } + }, 100); + } + + throttledOnScroll() { + + delay('gallery.onScroll', () => { + if (!this.shouldProcessScroll) { + this.shouldProcessScroll = true; + return; + } + + this.$middleBlock = null; + + if (this.dynamicList) { + + const actualScrollPos = this.dynamicList.getScrollTop(); + + this.scrollPosCache[this.mode] = { + a: actualScrollPos, + s: actualScrollPos / this.dynamicList.$content.height() + }; + } + }, 100); + } + + throttledListChange(gid) { + delay(`gallery.listUpdate-${gid}`, () => { + if (this.dynamicList) { + this.dynamicList.itemChanged(gid); + } + }, 100); + } + + setView() { + + if (this.nodes) { + + M.v = Object.keys(this.nodes).map(h => M.d[h] || this.updNode[h]); + MegaGallery.sortViewNodes(); + + return false; + } + + if (d) { + console.time(`MegaGallery: ${this.id}`); + } + + M.v = []; + this.nodes = {}; + } + + setViewAfter() { + MegaGallery.sortViewNodes(); + mBroadcaster.sendMessage('mega:gallery:view:after'); + + if (d) { + console.timeEnd(`MegaGallery: ${this.id}`); + } + } + + get activeModeList() { + return this.groups[this.mode]; + } + + getGroupById(id) { + return this.activeModeList[id]; + } +} + +GalleryNodeBlock.revokeThumb = (fa) => { + 'use strict'; + + if (MegaGallery.thumbCache && MegaGallery.thumbCache[fa]) { + URL.revokeObjectURL(MegaGallery.thumbCache[fa]); + delete MegaGallery.thumbCache[fa]; + } +}; + +class MegaTargetGallery extends MegaGallery { + + async setView() { + + if (super.setView() === false) { + return false; + } + + const handles = this.id === 'photos' ? MegaGallery.getCameraHandles() : M.getTreeHandles(this.id); + let subs = []; + + await dbfetch.geta(handles).catch(nop); + + for (let i = handles.length; i--;) { + if (!M.c[handles[i]]) { + console.error('Gallery cannot find handle ' + handles[i]); + continue; + } + + subs = subs.concat(Object.keys(M.c[handles[i]])); + } + + const rubTree = MegaGallery.handlesArrToObj(M.getTreeHandles(M.RubbishID)); + + subs = subs.filter(h => { + const n = M.d[h]; + return !n.t + && !this.nodes[n.h] + && !rubTree[h] + && !rubTree[n.p] + && !n.fv + && mega.gallery.isGalleryNode(n); + }).sort(this.sortByMtime.bind(this)); + + for (const h of subs) { + const n = M.d[h]; + this.nodes[n.h] = this.setGroup(n)[0]; + M.v.push(M.d[n.h]); + } + + this.mergeYearGroup(); + this.filterMonthGroup(); + + super.setViewAfter(); + } + + checkGalleryUpdate(n) { + if (!n.t && mega.gallery.isGalleryNode(n)) { + const cameraTree = M.getTreeHandles(this.isDiscovery ? this.id : M.CameraId); + const rubTree = M.getTreeHandles(M.RubbishID); + + if (!this.isDiscovery && M.SecondCameraId) { + cameraTree.push(...M.getTreeHandles(M.SecondCameraId)); + } + + const isInCameraTree = cameraTree.includes(n.p); + + // Checking if this item in rubbish bin + if (M.getTreeHandles(M.RubbishID).includes(n.p)) { + this.removeNodeFromGroups(n); + } + // If it is target Camera folder and it is not in gallery view now add the node to gallery. + else if (isInCameraTree && !this.nodes[n.h]) { + this.addNodeToGroups(n); + } + // Checking if this item in rubbish bin + else if (cameraTree && rubTree.includes(n.p)) { + this.removeNodeFromGroups(n); + } + // If it is not target Camera folder but it is in gallery view now remove the node from gallery view. + else if (!isInCameraTree && this.nodes[n.h]) { + this.removeNodeFromGroups(n); + } + // Lets check this is name update + else if (this.onpage && this.renderCache && this.nodes[n.h]) { + this.updateNodeName(n); + } + } + } +} + +class MegaMediaTypeGallery extends MegaGallery { + + typeFilter(n, cameraTree) { + if (!mega.gallery.sections[this.id]) { + return false; + } + + return mega.gallery.sections[this.id].filterFn(n, cameraTree); + } + + async setView() { + + if (super.setView() === false) { + return false; + } + + let nodes = []; + const cameraTree = MegaGallery.getCameraHandles(); + const rubTree = MegaGallery.handlesArrToObj(M.getTreeHandles(M.RubbishID)); + + if (MegaGallery.dbActionPassed) { + nodes = Object.values(M.d).filter((n) => + n.fa + && !rubTree[n.p] + && n.s > 0 + && this.typeFilter(n, cameraTree) + ); + } + else { + const handles = []; + const dbNodes = await MegaGallery.dbAction() + .catch(() => { // Fetching all available nodes in case of DB failure + console.warn('Local DB failed. Fetching existing FM nodes.'); + return Object.values(M.d); + }); + + for (let i = 0; i < dbNodes.length; i++) { + const n = dbNodes[i]; + + if (!n.fa || !n.s || rubTree[n.p]) { + continue; + } + + handles.push(n.p); + + if (this.typeFilter(n, cameraTree)) { + nodes.push(n); + this.updNode[n.h] = n; + } + } + + dbfetch.geta(handles) + .then(() => { + MegaGallery.dbActionPassed = true; + + this.updNode = {}; + + // Initializing albums here for the performace's sake + if (mega.gallery.albums.awaitingDbAction) { + mega.gallery.albums.init(); + } + }) + .catch(nop); + } + + // This sort is needed for building groups, do not remove + const sortFn = M.sortByModTimeFn2(); + nodes.sort((a, b) => sortFn(a, b, -1)); + + if (!Array.isArray(nodes)) { + if (d) { + console.timeEnd(`MegaGallery: ${this.id}`); + } + + return; + } + + const sharesTree = M.getTreeHandles('shares'); + + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + + if (this.nodes[n.h] || n.t || sharesTree.includes(n.p) || (this.id === 'favourites' && !n.fav)) { + continue; + } + + if (!n.fv) { + this.nodes[n.h] = this.setGroup(n)[0]; + } + } + + M.v = Object.keys(this.nodes).map(h => M.d[h] || this.updNode[h]); + + this.mergeYearGroup(); + this.filterMonthGroup(); + + super.setViewAfter(); + } + + checkGalleryUpdate(n) { + const cameraTree = MegaGallery.getCameraHandles(); + + if (!n.t && this.typeFilter(n, cameraTree)) { + const ignoreHandles = MegaGallery.handlesArrToObj([ + ...M.getTreeHandles('shares'), + ...M.getTreeHandles(M.RubbishID) + ]); + let toGallery = !ignoreHandles[n.p]; + + if (this.id === 'favourites') { + toGallery = toGallery && n.fav; + } + + // If it is target is rubbish bin or shared folder and it is in gallery view delete the node from it. + if (!toGallery && this.nodes[n.h]) { + + // If changed node is what currently viewing on slideshow and it's fav flag is removed, moving backwards + if (this.dynamicList && this.onpage && sessionStorage.previewNode === n.h) { + + const backItem = slideshow_steps().backward[0]; + + onIdle(() => { + slideshow(backItem, !backItem); + }); + } + + this.removeNodeFromGroups(n); + } + // If it is not target other folders and it is not in gallery view add the node to it. + else if (toGallery && !this.nodes[n.h]) { + this.addNodeToGroups(n); + } + // Lets check this is name update + else if (this.onpage && this.renderCache && this.nodes[n.h]) { + this.updateNodeName(n); + + if (mega.gallery.pendingFaBlocks[n.h] && n.fa.includes(':1*')) { + MegaGallery.addThumbnails([mega.gallery.pendingFaBlocks[n.h]]); + delete mega.gallery.pendingFaBlocks[n.h]; + } + } + } + } +} + +mega.gallery = Object.create(null); +mega.gallery.nodeUpdated = false; +mega.gallery.albumsRendered = false; +mega.gallery.titleControl = null; +mega.gallery.emptyBlock = null; +mega.gallery.rootMode = {photos: 'a', images: 'a', videos: 'a'}; +mega.gallery.pendingFaBlocks = {}; + +/** + * Same as is_image3(), additionally checking whether the node meet requirements for photo/media gallery. + * @param {String|MegaNode|Object} n An ufs-node, or filename + * @param {String} [ext] Optional filename extension + * @returns {Number|String|Function|Boolean} + */ +mega.gallery.isGalleryNode = (n, ext) => { + 'use strict'; + + ext = ext || fileext(n && n.name || n, true, true); + + return (ext !== 'PSD' && is_image3(n, ext)) || mega.gallery.isGalleryVideo(n); +}; + +/** + * Checks whether the node is a video, plus checks if thumbnail is available + * @param {Object} n ufs node + * @returns {Object.|Boolean} + */ +mega.gallery.isGalleryVideo = (n) => { + 'use strict'; + + if (!n || !n.fa || !n.fa.includes(':8*')) { + return false; + } + + const p = M.getMediaProperties(n); + + if (!p.showThumbnail || p.icon !== 'video') { + return false; + } + + const props = MediaAttribute.prototype.fromAttributeString(n.fa, n.k); + + return (props && props.width && props.height) ? p : false; +}; + +mega.gallery.checkEveryGalleryUpdate = n => { + + 'use strict'; + + // If there is discovery under gallery it means user is on discovery page. + // And if user move/delete the folder, let's just reset gallery. + if (mega.gallery.discovery && mega.gallery.discovery.id === n.h) { + + mega.gallery.nodeUpdated = true; + + return galleryUI(n.h); + } + + if (n.t && M.c[n.h]) { + + const childHandles = Object.keys(M.c[n.h]); + + for (let i = childHandles.length; i--;) { + mega.gallery.checkEveryGalleryUpdate(M.d[childHandles[i]]); + } + + return; + } + + if (mega.gallery.discovery) { + mega.gallery.discovery.checkGalleryUpdate(n); + } + + const sectionKeys = Object.keys(mega.gallery.sections); + + for (let i = 0; i < sectionKeys.length; i++) { + const key = sectionKeys[i]; + + if (mega.gallery[key]) { + mega.gallery[key].checkGalleryUpdate(n); + } + } +}; + +mega.gallery.checkEveryGalleryDelete = h => { + + 'use strict'; + + if (mega.gallery.discovery) { + mega.gallery.discovery.removeNodeByHandle(h); + } + + const sectionKeys = Object.keys(mega.gallery.sections); + + for (let i = 0; i < sectionKeys.length; i++) { + const key = sectionKeys[i]; + + if (mega.gallery[key]) { + mega.gallery[key].removeNodeByHandle(h); + } + } +}; + +mega.gallery.resetAll = () => { + 'use strict'; + + mega.gallery.modeBeforeReset = {}; + + delete mega.gallery.discovery; + + const sectionKeys = Object.keys(mega.gallery.sections); + + for (let i = 0; i < sectionKeys.length; i++) { + const key = sectionKeys[i]; + + mega.gallery.modeBeforeReset[key] = mega.gallery[key] && mega.gallery[key].mode; + + if (mega.gallery[key]) { + delete mega.gallery[key]; + } + } + + mega.gallery.nodeUpdated = false; +}; + +mega.gallery.secKeys = { + cuphotos: 'camera-uploads-photos', + cdphotos: 'cloud-drive-photos', + cuimages: 'camera-uploads-images', + cdimages: 'cloud-drive-images', + cuvideos: 'camera-uploads-videos', + cdvideos: 'cloud-drive-videos' +}; + +mega.gallery.showEmpty = (type) => { + 'use strict'; + + if (!mega.gallery.emptyBlock) { + mega.gallery.emptyBlock = new GalleryEmptyBlock('.fm-main.default > .fm-right-files-block'); + } + + mega.gallery.emptyBlock.type = type; + mega.gallery.emptyBlock.show(); +}; + +mega.gallery.hideEmpty = () => { + 'use strict'; + + if (mega.gallery.emptyBlock) { + mega.gallery.emptyBlock.hide(); + } +}; + +async function galleryUI(id) { + + 'use strict'; + + loadingDialog.show('MegaGallery'); + + if (mega.gallery.nodeUpdated) { + mega.gallery.resetAll(); + } + + let gallery = mega.gallery[M.currentdirid]; + + const $closeDiscovery = $('.gallery-close-discovery').addClass('hidden'); + + if (!mega.gallery.titleControl) { + mega.gallery.titleControl = new GalleryTitleControl('.gallery-tabs-bl .gallery-section-title'); + } + + // This is media discovery + if (id) { + mega.gallery.mdReporter.report(); + + if (!M.getNodeByHandle(id) || M.getNodeRoot(id) === M.RubbishID) { + + M.openFolder(M.RootID); + + return loadingDialog.hide('MegaGallery'); + } + + mega.gallery.titleControl.title = M.d[id].name; + mega.gallery.titleControl.icon = 'images'; + mega.gallery.titleControl.isClickable = false; + mega.gallery.titleControl.addTooltipToTitle(); + + gallery = mega.gallery.discovery; + + $closeDiscovery.removeClass('hidden'); + } + else { + mega.gallery.titleControl.filterSection = M.currentdirid; + mega.gallery.titleControl.title = mega.gallery.sections[M.currentdirid].title; + mega.gallery.titleControl.icon = mega.gallery.sections[M.currentdirid].icon; + mega.gallery.titleControl.removeTooltipFromTitle(); + } + + if (!gallery) { + await M.getCameraUploads().catch(nop); + + if (id !== undefined) { + gallery = mega.gallery.discovery = new MegaTargetGallery(id); + } + else if (mega.gallery.sections[M.currentdirid]) { + gallery = mega.gallery[M.currentdirid] = new MegaMediaTypeGallery(); + } + } + + if (gallery.id === 'favourites') { + gallery.galleryBlock.classList.add('gallery-type-fav'); + } + else { + gallery.galleryBlock.classList.remove('gallery-type-fav'); + } + + onIdle(async() => { + + await gallery.setView().catch((ex) => { + console.error(ex); + }); + + if (mega.gallery.modeBeforeReset && mega.gallery.modeBeforeReset[M.currentdirid]) { + + gallery.mode = mega.gallery.modeBeforeReset[M.currentdirid]; + mega.gallery.modeBeforeReset[M.currentdirid] = null; + } + + gallery.setMode(gallery.mode || 'a', 2); + gallery.render(true, true); + gallery.bindEvents(); + + M.viewmode = 1; + + $.selectddUIgrid = '.gallery-view'; + $.selectddUIitem = 'a'; + + loadingDialog.hide('MegaGallery'); + }); +} + +MegaGallery.addThumbnails = (nodeBlocks) => { + 'use strict'; + + if (!MegaGallery.thumbCache) { + MegaGallery.thumbCache = Object.create(null); + } + + const faKeys = [{}, {}]; + const blocks = {}; + + for (let i = 0; i < nodeBlocks.length; i++) { + const {h, fa} = nodeBlocks[i].node; + let type = 1; // Default type for fetch is 1 + + // In case fa is not arrived yet, placing the node to the buffer + if (!fa) { + mega.gallery.pendingFaBlocks[h] = nodeBlocks[i]; + continue; + } + + if (!String(fa).includes(':1*')) { + type = 0; // Thumbnail is applying as a fallback when there is no preview available + } + + if (MegaGallery.thumbCache[fa]) { + nodeBlocks[i].setThumb(MegaGallery.thumbCache[fa], fa); + } + else { + faKeys[type][fa] = nodeBlocks[i].node; + + if (blocks[fa]) { + blocks[fa].push(nodeBlocks[i]); + } + else { + blocks[fa] = [nodeBlocks[i]]; + } + } + } + + const cacheProcessed = (nodeFa) => { + if (MegaGallery.thumbCache[nodeFa]) { + + for (let i = 0; i < blocks[nodeFa].length; i++) { + blocks[nodeFa][i].setThumb(MegaGallery.thumbCache[nodeFa], nodeFa); + } + + delete blocks[nodeFa]; + return true; + } + + return false; + }; + + const thumbnailIsValid = (nodeFa, uint8) => { + // uint8.length === 0 should remain as is as per Firefox's limitations + if (uint8 === 0xDEAD || uint8.length === 0) { + if (d) { + console.warn(`Aborted preview retrieval for ${nodeFa}`); + } + + return false; + } + + return true; + }; + + const handleReceivedUint8 = async(ctx, nodeFa, uint8, type) => { + if (!blocks[nodeFa] // The image has been applied already + || cacheProcessed(nodeFa) // Applying the cached image to the existing group + || !thumbnailIsValid(nodeFa, uint8)) { + return; + } + + if (!MegaGallery.workerBranch) { + MegaGallery.workerBranch = await webgl.worker.attach(); + } + + const blob = (type === 1) + ? await webgl.getDynamicThumbnail(uint8, 515, MegaGallery.workerBranch).catch(nop) + : new Blob([uint8]); + + const fetchStillApplicable = M.currentCustomView.type === 'gallery' + || M.currentCustomView.type === 'albums'; + + if (fetchStillApplicable) { + if (blob) { + const url = URL.createObjectURL(blob); + + if (blocks[nodeFa]) { + for (let i = 0; i < blocks[nodeFa].length; i++) { + blocks[nodeFa][i].setThumb(url, nodeFa); + } + + delete blocks[nodeFa]; + } + + if (!MegaGallery.thumbCache[nodeFa]) { + MegaGallery.thumbCache[nodeFa] = url; + + const cachedKeys = Object.keys(MegaGallery.thumbCache); + + if (cachedKeys.length > GalleryNodeBlock.thumbCacheSize) { + GalleryNodeBlock.revokeThumb(cachedKeys[0]); + } + } + } + else if (type === 1) { + // Force-loading type 0 in case the thumbnail of type 1 cannot be retrieved + api_getfileattr( + { [nodeFa]: null }, + 0, + handleReceivedUint8 + ); + } + } + else { + delete blocks[nodeFa]; + } + }; + + faKeys.forEach((fk, type) => { + api_getfileattr( + fk, + type, + (ctx, nodeFa, uint8) => handleReceivedUint8(ctx, nodeFa, uint8, type) + ); + }); +}; + +MegaGallery.revokeThumbs = () => { + 'use strict'; + + if (!MegaGallery.thumbCache) { + return; + } + + const keys = Object.keys(MegaGallery.thumbCache); + + for (let i = 0; i < keys.length; i++) { + URL.revokeObjectURL(MegaGallery.thumbCache[keys[i]]); + } + + MegaGallery.thumbCache = Object.create(null); +}; + +MegaGallery.handleIntersect = (entries, gallery) => { + 'use strict'; + + const toFetchAttributes = []; + + for (let i = 0; i < entries.length; i++) { + const { isIntersecting, target: { nodeBlock } } = entries[i]; + + if (isIntersecting) { + if (!nodeBlock.isRendered) { + nodeBlock.fill(gallery.mode); + toFetchAttributes.push(nodeBlock); + } + + if (Array.isArray($.selected) && $.selected.includes(nodeBlock.node.h)) { + nodeBlock.el.classList.add('ui-selected'); + } + } + } + + if (toFetchAttributes.length) { + MegaGallery.addThumbnails(toFetchAttributes); + } +}; + +MegaGallery.dbAction = () => { + 'use strict'; + + if (fmdb && fmdb.db !== null && fmdb.crashed !== 666) { + const ignoreHandles = MegaGallery.handlesArrToObj([ + ...M.getTreeHandles('shares'), + ...M.getTreeHandles(M.RubbishID) + ]); + + return fmdb.getbykey( + 'f', + { + query: db => db.where('fa').notEqual(fmdb.toStore('')), + include: ({p}) => !ignoreHandles[p] + } + ); + } + + return Promise.reject(); +}; + +MegaGallery.handlesArrToObj = (array) => { + 'use strict'; + + const obj = Object.create(null); + + for (let i = 0; i < array.length; i++) { + obj[array[i]] = true; + } + + return obj; +}; + +lazy(mega.gallery, 'sections', () => { + 'use strict'; + + return { + photos: { + path: 'photos', + icon: 'photos', + root: 'photos', + filterFn: n => mega.gallery.isGalleryNode(n), + title: l.gallery_all_locations + }, + [mega.gallery.secKeys.cuphotos]: { + path: mega.gallery.secKeys.cuphotos, + icon: 'photos', + root: 'photos', + filterFn: (n, cameraTree) => cameraTree && cameraTree.includes(n.p) + && (is_image3(n) || mega.gallery.isGalleryVideo(n)), + title: l.gallery_camera_uploads + }, + [mega.gallery.secKeys.cdphotos]: { + path: mega.gallery.secKeys.cdphotos, + icon: 'photos', + root: 'photos', + filterFn: (n, cameraTree) => (!cameraTree || !cameraTree.includes(n.p)) + && (is_image3(n) || mega.gallery.isGalleryVideo(n)), + title: l.gallery_from_cloud_drive + }, + images: { + path: 'images', + icon: 'images', + root: 'images', + filterFn: n => is_image3(n), + title: l.gallery_all_locations + }, + [mega.gallery.secKeys.cuimages]: { + path: mega.gallery.secKeys.cuimages, + icon: 'images', + root: 'images', + filterFn: (n, cameraTree) => cameraTree && cameraTree.includes(n.p) && is_image3(n), + title: l.gallery_camera_uploads + }, + [mega.gallery.secKeys.cdimages]: { + path: mega.gallery.secKeys.cdimages, + icon: 'images', + root: 'images', + filterFn: (n, cameraTree) => (!cameraTree || !cameraTree.includes(n.p)) && is_image3(n), + title: l.gallery_from_cloud_drive + }, + videos: { + path: 'videos', + icon: 'videos', + root: 'videos', + filterFn: n => mega.gallery.isGalleryVideo(n), + title: l.gallery_all_locations + }, + [mega.gallery.secKeys.cuvideos]: { + path: mega.gallery.secKeys.cuvideos, + icon: 'videos', + root: 'videos', + filterFn: (n, cameraTree) => cameraTree && cameraTree.includes(n.p) && mega.gallery.isGalleryVideo(n), + title: l.gallery_camera_uploads + }, + [mega.gallery.secKeys.cdvideos]: { + path: mega.gallery.secKeys.cdvideos, + icon: 'videos', + root: 'videos', + filterFn: (n, cameraTree) => (!cameraTree || !cameraTree.includes(n.p)) && mega.gallery.isGalleryVideo(n), + title: l.gallery_from_cloud_drive + }, + favourites: { + path: 'favourites', + icon: 'favourite-filled', + root: 'favourites', + filterFn: n => is_image3(n) || mega.gallery.isGalleryVideo(n), + title: l.gallery_favourites + } + }; +}); + +lazy(mega.gallery, 'mdReporter', () => { + 'use strict'; + + /** + * @type {Array} + * @property {Number} 0 Timeout + * @property {Number} 1 EventId + */ + const marks = [ + [10, 99753], + [30, 99754], + [60, 99755], + [180, 99756] + ]; + + /** + * The number to qualify as a favourite + * @type {Number} + */ + const timesOver = 3; + + const statsStorageKey = 'regularPageStats'; + const mdPageKey = 'MD'; + + /** + * This one prevents events from sending same requests multiple times when leaving and coming back to the tab + * or accidentally doubling events + * @type {Number[]} + */ + let passedSessionMarks = []; + + let fmStats = null; + let disposeVisibilityChange = null; + + const fillStats = () => new Promise((resolve) => { + if (fmStats !== null) { + resolve(true); + return; + } + + M.getPersistentData(statsStorageKey).then((stats) => { + if (stats) { + fmStats = stats; + } + + resolve(true); + }).catch(() => { + resolve(false); + }); + }); + + return { + runId: 0, + notApplicable(currentPage, runId) { + return this.runId !== runId + || document.visibilityState === 'hidden' + || window.M.currentdirid !== currentPage; + }, + report(skipReset) { + if (!skipReset && this.runId) { + this.stop(); // Stopping the previously initialised reporter's run + } + + this.runId = Date.now(); + const runId = this.runId; + + disposeVisibilityChange = MComponent.listen( + document, + 'visibilitychange', + () => { + if (document.visibilityState === 'visible' && this.runId === runId) { + this.report(true); + } + } + ); + + this.reportSessionMarks(marks[0][0], M.currentdirid, 0, runId); + this.processSectionFavourite(M.currentdirid, runId); + }, + /** + * Sending time marks if the session time is surpassing a specific value + * @param {Number} timeout + * @param {String} currentPage + * @param {Number} diff Timeout to the next mark + * @param {Number} runId Current report run id to check + */ + reportSessionMarks(timeout, currentPage, diff, runId) { + const eventIndex = marks.findIndex(([to]) => to === timeout); + + tSleep(timeout - diff).then( + () => { + if (this.notApplicable(currentPage, runId)) { + return; + } + + if (!passedSessionMarks.includes(timeout)) { + passedSessionMarks.push(timeout); + + window.eventlog( + marks[eventIndex][1], + 'Session mark: ' + mdPageKey + ' | ' + timeout + 's' + ); + } + + const nextIndex = eventIndex + 1; + if (marks[nextIndex]) { + this.reportSessionMarks(marks[nextIndex][0], currentPage, timeout, runId); + } + } + ); + }, + /** + * Report if user visited a specific section/page more than timesOver times + * @param {String} currentPage + * @param {Number} runId Current report run id to check + */ + processSectionFavourite(currentPage, runId) { + tSleep(marks[0][0]).then(() => { + if (this.notApplicable(currentPage, runId)) { + return; + } + + fillStats().then((status) => { + if (!status) { + fmStats = []; + } + + let section = fmStats.find(({ name }) => name === mdPageKey); + + if (section) { + section.count++; + } + else { + section = {name: mdPageKey, count: 1, reported: false}; + fmStats.push(section); + } + + if (!section.reported) { + if (section.count >= timesOver) { + section.reported = true; + eventlog(99757, mdPageKey + ' has been visited ' + section.count + ' times'); + } + + M.setPersistentData(statsStorageKey, fmStats).catch(() => { + console.error('Cannot save stats - the storage is most likely full...'); + }); + } + }); + }); + }, + stop() { + if (typeof disposeVisibilityChange === 'function') { + disposeVisibilityChange(); + } + + this.runId = 0; + passedSessionMarks = []; + } + }; +}); + +lazy(mega.gallery, 'albums', () => { + 'use strict'; + + const scope = mega.gallery; + + const userAlbumsEnabled = false; + + /** + * Globally storing disposing callback for convenience + */ + let disposeKeyboardEvents = null; + + /** + * Indicates which files should not be considered as raw as of now to match other platforms + * @type {Object.} + */ + const ignoreRaws = { + "ARI": true, + "ARQ": true, + "BAY": true, + "BMQ": true, + "CAP": true, + "CINE": true, + "CR3": true, + "DC2": true, + "DRF": true, + "DSC": true, + "EIP": true, + "FFF": true, + "IA": true, + "KC2": true, + "MDC": true, + "OBM": true, + "ORI": true, + "PTX": true, + "PXN": true, + "QTK": true, + "RDC": true, + "RWZ": true, + "STI": true + }; + + /** + * This length is being used for identification of the predefined album in the list + * @type {Number} + */ + const predefinedKeyLength = 3; + + /** + * This is a margin for the cell to render within the row + * @type {Number} + */ + const cellMargin = 4; + + /** + * This is the default name to be used when + * @type {String} + */ + const defaultAlbumName = l.album_def_name; + + /** + * How many times to propose default label name before giving up + * @type {Number} + */ + const maxLabelPropositions = 10000; + + const zoomSteps = [15, 10, 5, 3]; + + const defZoomStep = 2; + + /** + * The limit for number of albums on when to make the grid finer + * @type {Number} + */ + const bigAlbumCellsLimit = 4; + + /** + * @type {Number} + */ + const nameLenLimit = 40; + + let globalZoomStep = defZoomStep; + + const toRestore = { + albums: {}, + items: {} + }; + + /** + * Storing the name value for just created album + * @type {String} + */ + let pendingName = ''; + + /** + * Checking whether an event is being dispatched with Ctrl key in hold + * @param {Event} evt Event object to check + * @returns {Boolean} + */ + const getCtrlKeyStatus = ({ ctrlKey, metaKey }) => metaKey || ctrlKey; + + const isInGallery = () => M.currentCustomView.type === 'gallery'; + + const isInAlbums = () => M.currentCustomView.type === 'albums'; + + const isMainAlbums = () => M.currentdirid === 'albums'; + + const isMSync = () => window.useMegaSync === 2 || window.useMegaSync === 3; + + const unwantedHandles = () => MegaGallery.handlesArrToObj([ + ...M.getTreeHandles(M.RubbishID), + ...M.getTreeHandles('shares') + ]); + + /** + * Trimming name if it is too long + * @param {String} name Name to trim + * @returns {String} + */ + const limitNameLength = name => (name.length > nameLenLimit) ? name.substring(0, nameLenLimit) + '...' : name; + + const getAlbumIdFromPath = () => M.currentdirid.replace('albums/', ''); + + /** + * @param {HTMLElement} el DOM element to apply PerfectScroll to + * @returns {void} + */ + const applyPs = (el) => { + if (el.classList.contains('ps')) { + Ps.update(el); + } + else { + Ps.initialize(el); + } + }; + + /** + * Sorting nodes in a specific album + * @param {MegaNode[]} nodes Nodes array to sort + * @returns {void} + */ + const sortInAlbumNodes = (nodes) => { + nodes.sort((a, b) => M.sortByModTimeFn2()(a, b, -1)); + }; + + const debouncedLoadingUnset = () => { + delay('album:hide_loading_dialog', () => { + loadingDialog.hide('MegaAlbums'); + }); + }; + + /** + * Updating the album cell if available + * @param {String} albumId Album id + * @param {Boolean} sortNodes Whether to re-sort existing nodes or not + * @returns {void} + */ + const debouncedAlbumCellUpdate = (albumId, sortNodes = false) => { + const album = scope.albums.store[albumId]; + + if (!album) { + return; + } + + delay('album:' + albumId + ':update_placeholder', () => { + if (sortNodes) { + sortInAlbumNodes(album.nodes); + } + + album.node = album.nodes[0]; + + if (album.cellEl) { + album.cellEl.updatePlaceholders(); + album.cellEl.updateCover(); + } + }); + }; + + /** + * Fetching all MegaNode handles from specified albums + * @param {String[]} albumIds ID of albums to fetch handles from + * @returns {String[]} + */ + const getAlbumsHandles = (albumIds) => { + const handles = []; + + if ( + albumIds.length === 1 + && M.currentdirid === 'albums/' + albumIds[0] + && Object.keys(scope.albums.grid.timeline.selections).length > 0 + ) { + handles.push(...Object.keys(scope.albums.grid.timeline.selections)); + } + else { + for (let i = 0; i < albumIds.length; i++) { + const album = scope.albums.store[albumIds[i]]; + + if (album && album.nodes && album.nodes.length) { + handles.push(...album.nodes.map(({ h }) => h)); + } + } + } + + return handles; + }; + + /** + * @param {String} text Text to use inside the toast + * @returns {Object.} + */ + const generateToastContent = (text) => { + const textEl = document.createElement('div'); + textEl.className = 'flex flex-1'; + textEl.textContent = text; + + const undoBtn = document.createElement('button'); + undoBtn.className = 'mega-button action'; + undoBtn.textContent = l.action_undo; + + const content = document.createElement('div'); + content.className = 'flex flex-row items-center px-3 w-full'; + content.append(textEl); + content.append(undoBtn); + + return { content, undoBtn }; + }; + + /** + * Generating the download options menu + * @param {String[]} albumIds IDs of albums to fetch handles from + * @returns {Object.} + */ + const generateDownloadOptions = (albumIds) => { + return [ + { + label: l[5928], + icon: 'download-standard', + click: () => { + const handles = getAlbumsHandles(albumIds); + + if (handles.length) { + M.addDownload(handles); + } + } + }, + { + label: l[864], + icon: 'download-zip', + click: () => { + const handles = getAlbumsHandles(albumIds); + + if (handles.length) { + M.addDownload( + handles, + true, + false, + albumIds.length > 1 ? 'Album-archive-1' : scope.albums.store[albumIds[0]].label + ); + } + } + } + ]; + }; + + /** + * Generating the download item for context menu + * @param {String[]} albumIds IDs of target albums + * @returns {Object.} + */ + const generateDownloadMenuItem = (albumIds) => { + return { + label: l.download_option, + icon: 'download-small', + click: () => { + const handles = getAlbumsHandles(albumIds); + + if (handles.length) { + M.addDownload(handles); + } + }, + children: (isMSync()) ? undefined : generateDownloadOptions(albumIds) + }; + }; + + /** + * Re-initiating the events which are being paused due to dialogs + * @returns {void} + */ + const reinitiateEvents = () => { + delay('render:album_events_reinitiate', () => { + if (scope.albums.grid) { + if (isMainAlbums()) { + scope.albums.grid.attachKeyboardEvents(); + } + else { + const timelineEl = scope.albums.grid.el.querySelector('.album-timeline-main'); + + if (timelineEl) { + timelineEl.mComponent.attachKeyboardListener(); + + if (timelineEl.mComponent.dragSelect) { + timelineEl.mComponent.dragSelect.disabled = false; + } + } + } + } + }); + }; + + /** + * Options for Intersection Observer API + * @param {HTMLElement} root DOM Element to use observer on + * @returns {Object} + */ + const observerOptions = (root) => { + return { + root, + rootMargin: '500px', + threshold: 0.1 + }; + }; + + const handleIntersect = (entries, refKey, fill) => { + const toFetchAttributes = []; + + for (let i = 0; i < entries.length; i++) { + const { isIntersecting, target } = entries[i]; + + if (isIntersecting && !target.isIntersectedBefore) { + fill(target); + + if (target[refKey].node) { + toFetchAttributes.push(target[refKey]); + } + + target.isIntersectedBefore = true; + } + } + + if (toFetchAttributes.length) { + MegaGallery.addThumbnails(toFetchAttributes); + } + }; + + const fillAlbumTimelineCell = (el) => { + if (el.ref.isVideo) { + el.dataset.videoDuration = secondsToTimeShort(MediaAttribute(el.ref.node).data.playtime); + el.classList.add('show-video-duration'); + } + }; + + const fillAlbumCell = (el) => { + if (el.album.cellEl.isFilled) { + return; + } + + const div = document.createElement('div'); + const titleEl = document.createElement('div'); + el.album.cellEl.countEl = document.createElement('div'); + + titleEl.textContent = el.album.label; + titleEl.className = 'album-label text-ellipsis'; + titleEl.setAttribute('title', el.album.label); + + div.append(titleEl); + div.append(el.album.cellEl.countEl); + + el.isInViewport = true; + el.album.cellEl.updatePlaceholders(); + + el.append(div); + el.album.cellEl.isFilled = true; + }; + + /** + * Sorting albums by given names in attributes + * @param {String} labelA Album label A + * @param {String} labelB Album label B + * @param {String} direction Default is ascending order (1) + * @returns {Number} + */ + const sortLabels = (labelA, labelB, direction = 1) => { + if (labelA < labelB) { + return -direction; + } + + if (labelA > labelB) { + return direction; + } + + return 0; + }; + + /** + * Storing the data into buffer for the future restoration + * @param {String} albumId Album ID + * @returns {void} + */ + const backupAlbumData = (albumId) => { + if (scope.albums.store[albumId]) { + toRestore.albums[albumId] = scope.albums.store[albumId]; + } + }; + + /** + * @param {String} restoreKey Object key to restore + * @param {String} albumId Album id + * @param {String[]} handles Handles of nodes to restore + * @returns {void} + */ + const backupAlbumItemsData = (restoreKey, albumId, handles) => { + toRestore.items[restoreKey] = { + albumId, + handles + }; + }; + + /** + * Restoring the backed up albums data + * @param {String[]} albumIds Album IDs to restore + * @returns {void} + */ + const restoreRemovedAlbums = (albumIds) => { + let isHidden = false; + const { sets } = mega; + + for (let i = 0; i < albumIds.length; i++) { + const album = toRestore.albums[albumIds[i]]; + + if (album) { + sets.add(album.label, album.t).then(({ id }) => { + if (id && album.nodes.length) { + for (let i = 0; i < album.nodes.length; i++) { + sets.elements.add(album.nodes[i].h, id); + } + } + + delete toRestore.albums[albumIds[i]]; + }); + + if (!isHidden) { + isHidden = true; + toaster.main.hide(album.toastId); + } + } + } + }; + + /** + * Restoring a specific set of previously removed items + * @param {String|Number} restorationKey TS of when the items were removed + * @returns {void} + */ + const restoreAlbumItemsData = (restorationKey) => { + const data = toRestore.items[restorationKey]; + + if (data) { + for (let i = 0; i < data.handles.length; i++) { + mega.sets.elements.add(data.handles[i], data.albumId); + } + + toaster.main.hide(data.toastId); + } + }; + + const sortAlbumsArray = (a, b) => { + if ((a.filterFn && b.filterFn) || a.t === b.t) { + return sortLabels(a.label, b.label); + } + + if (a.filterFn) { + return -1; + } + else if (b.filterFn) { + return 1; + } + + return b.t - a.t; + }; + + const sortStore = () => { + const albumKeys = Object.keys(scope.albums.store); + + albumKeys.sort((keyA, keyB) => sortAlbumsArray( + scope.albums.store[keyA], + scope.albums.store[keyB] + )); + + const obj = Object.create(null); + + for (let i = 0; i < albumKeys.length; i++) { + obj[albumKeys[i]] = scope.albums.store[albumKeys[i]]; + } + + scope.albums.store = obj; + }; + + /** + * @param {String} name Album name to check against others + * @param {String} ignoreId Current Album ID + * @returns {void} + */ + const albumNameExists = (name, ignoreId) => Object + .values(scope.albums.store) + .some(({ label, id }) => label === name && id !== ignoreId); + + const getFirstUserAlbum = (ignoreId) => { + const keys = Object.keys(scope.albums.store); + + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + + if (key.length !== predefinedKeyLength && key !== ignoreId) { + return scope.albums.store[key]; + } + } + + return null; + }; + + /** + * Checking whether an album needs to be rendered in the tree and on main page or not + * @param {Object} album Album data to check + * @returns {Boolean} + */ + const albumIsRenderable = ({ filterFn, nodes }) => !filterFn || (Array.isArray(nodes) && nodes.length); + + /** + * Getting the position of a User album within active albums + * @param {String} albumId Album ID + * @param {HTMLElement} domElement DOM element to insert + * @param {HTMLElement} domContainer DOM element to insert into + * @param {String} siblingComponentKey key to use in album upon sibling element fetch + * @returns {void} + */ + const insertAlbumElement = (albumId, domElement, domContainer, siblingComponentKey) => { + /** + * Active album keys + * @type {String[]} + */ + const aKeys = []; + + /** + * All albums keys + * @type {String[]} + */ + const keys = Object.keys(scope.albums.store); + + for (let i = 0; i < keys.length; i++) { + if (albumIsRenderable(scope.albums.store[keys[i]])) { + aKeys.push(keys[i]); + } + } + + const aIndex = aKeys.indexOf(albumId); + + if (aIndex === aKeys.length - 1) { + domContainer.append(domElement); + } + else { + domContainer.insertBefore( + domElement, + scope.albums.store[aKeys[aIndex + 1]][siblingComponentKey].el + ); + } + }; + + /** + * Removing the node from album in store + * @param {String} albumId Album ID + * @param {String} handle Node handle + * @returns {void} + */ + const removeNodeFromAlbum = (albumId, handle) => { + const album = scope.albums.store[albumId]; + + if (!album || (!album.filterFn && !album.eHandles[handle])) { + return; + } + + for (let j = 0; j < album.nodes.length; j++) { + const { h } = album.nodes[j]; + + if (h === handle) { + album.nodes.splice(j, 1); + break; + } + } + + if (album.filterFn && !album.nodes.length) { + scope.albums.removeAlbumFromGridAndTree(albumId); + } + + debouncedAlbumCellUpdate(albumId); + + const { grid } = scope.albums; + + if (grid) { + if (isMainAlbums()) { + delay('album:refresh_main_grid', () => { + grid.refresh(); + }); + } + else if (M.currentdirid === 'albums/' + albumId) { + if (grid.timeline && grid.timeline.selections[handle]) { + grid.timeline.deselectNode(M.d[handle]); + } + + if (album.nodes.length) { + delay('album:' + albumId + ':remove_items', () => { + if (grid.timeline) { + grid.timeline.nodes = album.nodes; + } + }); + } + else if (album.filterFn) { + M.openFolder('albums'); + grid.showAllAlbums(); + } + else { + grid.showEmptyAlbumPage(albumId); + } + } + } + }; + + /** + * Checking if there is at least one active album available for the list + * @returns {Boolean} + */ + const checkIfExpandable = () => Object + .values(scope.albums.store) + .some(album => albumIsRenderable(album)); + + /** + * Checking if the provided name is preserved by auto-generated albums + * @param {String} name The name to check against system values + * @returns {Boolean} + */ + const isSystemAlbumName = (name) => { + name = name.toLowerCase(); + + return Object.keys(scope.albums.store) + .filter(k => k.length === predefinedKeyLength) + .some(k => scope.albums.store[k].label.toLowerCase() === name); + }; + + /** + * Proposing the name for a new album based on the default value plus counter + * @returns {String} + */ + const proposeAlbumName = () => { + const currentNames = {}; + const albums = Object.values(scope.albums.store); + + for (let i = 0; i < albums.length; i++) { + const { label } = albums[i]; + + if (label.startsWith(defaultAlbumName)) { + currentNames[label] = true; + } + } + + const namesCount = Object.values(currentNames).length; + + if (!namesCount || !currentNames[defaultAlbumName]) { + return defaultAlbumName; + } + + if (currentNames[defaultAlbumName] && namesCount === 1) { + return defaultAlbumName + ' (1)'; + } + + for (let i = 2; i <= maxLabelPropositions; i++) { + const newName = defaultAlbumName + ' (' + i + ')'; + + if (!currentNames[newName]) { + return newName; + } + } + + return ''; + }; + + /** + * Checking whether the video is available to be previewed + * @param {MegaNode} n Node to check + * @returns {Boolean} + */ + const isAllowedVideo = (n) => { + const data = mega.gallery.isGalleryVideo(n); + return !!data; + }; + + /** + * Launching the slideshow right away (in fullscreen mode) + * @param {String} albumId Album ID + * @param {Boolean} useFullscreen Skipping videos and playing in the fullscreen + * @returns {void} + */ + const playSlideshow = (albumId, useFullscreen) => { + const album = scope.albums.store[albumId]; + + if (album && album.nodes.length > 0) { + let firstNode = album.nodes[0]; + let selHandles = {}; + + if (scope.albums.grid && scope.albums.grid.timeline) { + selHandles = scope.albums.grid.timeline.selections; + + if (Object.keys(selHandles).length) { + for (let i = 0; i < album.nodes.length; i++) { + if (selHandles[album.nodes[i].h] + && (!useFullscreen || !isAllowedVideo(album.nodes[i]))) { + firstNode = album.nodes[i]; + break; + } + } + } + } + + const tmp = M.v; + M.v = [...album.nodes]; + + slideshow(firstNode, false); + + scope.albums.removeKeyboardListener(); + + delay('toggle:album_slideshow_on', () => { + if (useFullscreen) { + const slideshowBtn = $('.v-btn.slideshow', 'footer'); + + if (slideshowBtn) { + slideshowBtn.click(); + } + + const fullscreenHandler = () => { + if (!document.fullscreenElement) { + $('.v-btn.close', 'section.media-viewer-container').click(); + window.removeEventListener('fullscreenchange', fullscreenHandler); + } + }; + + window.addEventListener('fullscreenchange', fullscreenHandler); + } + + const eventsToDisposeOnClose = []; + const selectModifiers = [ + '.media-viewer header nav.viewer-bars button.options', + '.media-viewer header nav.viewer-bars button.send-to-chat' + ]; + const modifySelection = () => { + $.selected = [slideshow_handle()]; + }; + + for (let i = 0; i < selectModifiers.length; i++) { + eventsToDisposeOnClose.push( + MComponent.listen(selectModifiers[i], 'click', modifySelection) + ); + } + + mBroadcaster.once('slideshow:close', () => { + M.v = tmp; + const selCount = Object.keys(selHandles).length; + + reinitiateEvents(); + + if (window.selectionManager && window.selectionManager.clearSlideshowSelections) { + window.selectionManager.clearSlideshowSelections(); + } + + for (let i = 0; i < eventsToDisposeOnClose.length; i++) { + eventsToDisposeOnClose[i](); + } + + if (isMainAlbums() || !selCount) { + window.selectionManager.hideSelectionBar(); + } + else { + window.selectionManager.showSelectionBar( + mega.icu.format(l.album_selected_items_count, album.nodes.length) + .replace('%1', selCount) + ); + } + }); + }); + } + }; + + /** + * Getting the month label for the node + * @param {MegaNode} node Node to fetch the label from + * @returns {String} + */ + const getMonthLabel = ({ mtime, ts }) => GalleryNodeBlock.getTimeString(mtime || ts, 3); + + /** + * Checking whether an element is in select area, checking if at least two edges are within the area + * @param {HTMLElement} domEl Dom element + * @param {Number[]} area Coordinates of the selection + * @param {Number} containerPadding The left padding of the container + * @returns {Boolean} + */ + const isInSelectArea = (domEl, [left, right, top, bottom], containerPadding = 0) => { + const offsetLeft = domEl.offsetLeft + containerPadding; + const offsetTop = domEl.offsetTop; + const rightEdge = offsetLeft + domEl.offsetWidth; + const bottomEdge = offsetTop + domEl.offsetHeight; + + const fitVert = (offsetTop >= top && offsetTop <= bottom) || (bottomEdge >= top && bottomEdge <= bottom); + const fitHoriz = (offsetLeft <= right && offsetLeft >= left) || (rightEdge >= left && rightEdge <= right); + + return (fitVert && (fitHoriz || offsetLeft < left && rightEdge > right)) + || fitHoriz && offsetTop < top && bottomEdge > bottom && fitHoriz; + }; + + /** + * Checking which predefined active album is preceding the current one + * @param {String} albumId Album ID + * @param {String} elKey Which subelement to use as an active checker + * @returns {Object.?} + */ + const getPrevActivePredefinedAlbum = (albumId, elKey) => { + const keys = Object.keys(scope.albums.store).filter(k => k.length === predefinedKeyLength); + const index = keys.indexOf(albumId); + let prev = null; + + if (index < 0) { + return; + } + + for (let i = 0; i < index; i++) { + const album = scope.albums.store[keys[i]]; + + if (album.nodes.length && album[elKey]) { + prev = album; + } + } + + return prev; + }; + + class AlbumsSelectionManager extends SelectionManager2_DOM { + constructor(albumId, container, eventHandlers) { + super(container, eventHandlers); + this.currentdirid = M.currentdirid; + this._boundEvents = []; + this.init(); + this.albumId = albumId; + this.timeline = container; + } + + get items() { + return scope.albums.store[this.albumId] ? scope.albums.store[this.albumId].nodes : []; + } + + get items_per_row() { + return zoomSteps[this.timeline.zoomStep]; + } + + clearSlideshowSelections() { + const cells = this.timeline.querySelectorAll('.album-timeline-cell.ui-selected'); + + for (let i = 0; i < cells.length; i++) { + const { mComponent } = cells[i]; + + if (!mComponent.isSelected) { + mComponent.el.classList.remove('ui-selected'); + } + } + } + } + + class DownloadContextMenu extends MMenuSelect { + constructor(albumId) { + super(); + this.options = generateDownloadOptions([albumId]); + } + } + + class AlbumItemContextMenu extends MMenuSelect { + constructor() { + super(); + + const albumId = getAlbumIdFromPath(); + const album = scope.albums.store[albumId]; + // const isSingleSelection = Object.keys(scope.albums.grid.timeline.selections).length === 1; + + const options = []; + + if (album.nodes.some(n => !isAllowedVideo(n))) { + options.push({ + label: l.album_play_slideshow, + icon: 'play-square', + click: () => { + playSlideshow(albumId, true); + } + }); + } + + options.push( + { + label: l.album_item_preview_label, + icon: 'preview-reveal', + click: () => { + playSlideshow(albumId); + } + }, + {}, + // { + // label: l.album_share_link, + // icon: 'link', + // click: nop + // }, + // {}, + { + label: l.album_download, + icon: 'download-small', + click: () => { + if (M.currentdirid !== 'albums/' + albumId) { + return; + } + + const handles = getAlbumsHandles([albumId]); + + if (!handles.length) { + return; + } + + M.addDownload(handles); + } + } + ); + + // if (isSingleSelection) { + // options.push({ + // label: l.set_as_album_cover, + // icon: 'images', + // click: nop + // }); + // } + + if (!album.filterFn) { + options.push( + {}, + { + label: l.album_item_remove_label, + icon: 'disabled-filled', + click: () => { + scope.albums.removeSelectedElements(); + }, + classes: ['red'] + } + ); + } + + this.options = options; + } + } + + class AlbumTimelineCell extends MComponent { + /** + * @param {Object.} data Data for the cell + * @param {MegaNode} data.node Node to base on + * @param {Function} data.clickFn Single click handler + * @param {Function} data.dbclickFn Double click handler + * @param {Boolean} data.useMenu Whether to use context menu or skip it + */ + constructor({ node, clickFn, dbclickFn, useMenu }) { + super(); + + this.el.ref = { + node, + isVideo: isAllowedVideo(node), + setThumb: (dataUrl) => { + this.setThumb(dataUrl); + } + }; + + this.el.setAttribute('title', node.name); + this.el.setAttribute('id', node.h); + + this._selected = false; + + this.attachEvents(clickFn, dbclickFn, useMenu); + } + + get isSelected() { + return this._selected; + } + + /** + * @param {Boolean} status Selected status + * @returns {void} + */ + set isSelected(status) { + if (status === this._selected) { + return; + } + + if (status) { + this.el.classList.add('ui-selected'); + + const check = document.createElement('i'); + check.className = 'sprite-fm-mono icon-check-circle icon-size-6'; + this.el.append(check); + this._selected = true; + } + else { + this.el.classList.remove('ui-selected'); + this.el.removeChild(this.el.querySelector('i.icon-check-circle')); + this._selected = false; + } + } + + buildElement() { + this.el = document.createElement('div'); + this.el.className = 'album-timeline-cell cursor-pointer skeleton'; + } + + attachEvents(clickFn, dbclickFn, useMenu) { + if (clickFn) { + this.attachEvent('mouseup', (evt) => { + if (evt.which === 3) { + return false; + } + + if (!evt.detail || evt.detail === 1) { + clickFn(this, evt); + } + else if (evt.detail === 2) { + dbclickFn(this, evt); + } + }); + } + + if (useMenu) { + this.attachEvent( + 'contextmenu', + (evt) => { + const { pageX, pageY, target } = evt; + + if (!this.isSelected) { + clickFn(this, evt); + } + + const contextMenu = new AlbumItemContextMenu(target); + contextMenu.show(pageX, pageY); + } + ); + } + } + + applyMonthLabel(label) { + this.el.classList.add('show-date'); + this.el.dataset.date = label; + } + + removeMonthLabel() { + this.el.classList.remove('show-date'); + } + + setThumb(dataUrl) { + if (this.el.classList.contains('skeleton')) { + this.el.style.backgroundImage = 'url(\'' + dataUrl + '\')'; + this.el.classList.remove('skeleton'); + } + } + } + + class AlbumTimeline extends MComponent { + /** + * The sorted list of nodes (newest at top) with the specific handler + * @param {Object.} options Options object + * @param {Function} options.onSelectToggle Method is called when the cell status is changed + * @param {Function} options.onDoubleClick Method is called when the cell is double clicked + * @param {String} [options.containerClass] Additional classes for container + * @param {Number} [options.sidePadding] Use this correction, if container classes include x-axis padding + * @param {Boolean} [options.showMonthLabel] Whether to show month timestamps or not + * @param {Boolean} [options.interactiveCells] Whether cells should react to context menu and selections + * @param {Boolean} [options.skipGlobalZoom] Whether to use global zoom or the locally created one + */ + constructor({ + onSelectToggle, + onDoubleClick, + containerClass, + sidePadding, + showMonthLabel, + interactiveCells, + skipGlobalZoom + }) { + super(null, false); + + this.sidePadding = sidePadding || 0; + + if ('IntersectionObserver' in window) { + this.observer = new IntersectionObserver( + (entries) => { + handleIntersect(entries, 'ref', fillAlbumTimelineCell); + }, + observerOptions(this.el.grid) + ); + } + + if (typeof containerClass === 'string') { + this.el.className = containerClass; + } + + this.dynamicList = false; + + this.rowIndexCache = {}; + this.cellCache = {}; + this.initialRender = true; + this.selections = {}; + this.selectArea = null; + + this.onSelectToggle = onSelectToggle; + this.onDoubleClick = onDoubleClick; + this.showMonthLabel = showMonthLabel; + this.interactiveCells = interactiveCells; + this.skipGlobalZoom = skipGlobalZoom; + + this._zoomStep = skipGlobalZoom ? defZoomStep : globalZoomStep; + + this.attachEvents(); + } + + get rowHeight() { + return this.cellSize + cellMargin * 2; + } + + get zoomStep() { + return this._zoomStep; + } + + /** + * @param {Number} step The zoom step index + * @returns {void} + */ + set zoomStep(step) { + step = parseInt(step); + + if (isNaN(step)) { + step = 0; + } + + if (step >= zoomSteps.length || step < 0) { + return; + } + + this._zoomStep = step; + + if (!this.skipGlobalZoom) { + globalZoomStep = step; + } + + if (this.dynamicList && this._nodes.length) { + this.nodes = this._nodes.map(({ list }) => list).flat(); + } + } + + /** + * @param {MegaNode[]} nodes The new list of nodes to use + * @returns {void} + */ + set nodes(nodes) { + this.unobserveRowCells(); + + if (this.dynamicList) { + this.dynamicList.destroy(); + this.dynamicList = null; + } + + MComponent.resetSubElements(this, '_nodes', false); + + if (!nodes.length) { + return; + } + + this.setCellSize(); + + this.dynamicList = new MegaDynamicList(this.el, { + itemRenderFunction: this.renderRow.bind(this), + itemHeightCallback: () => this.rowHeight, + onResize: this.onResize.bind(this), + perfectScrollOptions: { + handlers: ['click-rail', 'drag-scrollbar', 'wheel', 'touch'], + minScrollbarLength: 50 + } + }); + + const ids = []; + let lastIndex = 0; + let monthLabel = getMonthLabel(nodes[0]); + this.rowIndexCache[nodes[0].h] = 0; + this._nodes.push({ + list: [nodes[0]], + monthLabel + }); + + for (let i = 1; i < nodes.length; i++) { + const node = nodes[i]; + const lastEl = this._nodes[lastIndex]; + const curLabel = getMonthLabel(node); + + if (this.showMonthLabel && curLabel !== monthLabel) { + ids.push(lastIndex.toString()); + monthLabel = curLabel; + lastIndex++; + + this._nodes.push({ + list: [node], + monthLabel + }); + } + else if (lastEl.list.length % zoomSteps[this.zoomStep] === 0) { + ids.push(lastIndex.toString()); + lastIndex++; + + this._nodes.push({ + list: [node] + }); + } + else { + lastEl.list.push(node); + } + + this.rowIndexCache[node.h] = lastIndex; + } + + if (!this.dynamicList.items[lastIndex]) { + ids.push(lastIndex.toString()); + } + + this.dynamicList.batchAdd(ids); + this.dynamicList.initialRender(); + + if (this.zoomControls) { + this.el.parentNode.prepend(this.zoomControls); + } + } + + clearSiblingSelections(ignoreHandle) { + const handles = Object.keys(this.selections); + + for (let i = 0; i < handles.length; i++) { + if (handles[i] !== ignoreHandle) { + this.deselectNode(M.d[handles[i]]); + } + } + } + + attachEvents() { + this.onNodeClick = (cell, evt) => { + const { shiftKey } = evt; + const { el, isSelected } = cell; + + if (shiftKey) { + this.selectNode(el.ref.node); + + if (this.selectStartNode && this.selectStartNode.h !== el.ref.node.h) { + this.selectElementsRange(this.selectStartNode, el.ref.node); + } + else { + this.clearSiblingSelections(el.ref.node.h); + } + + this.lastNavNode = el.ref.node; + } + else if (isSelected) { + this.deselectNode(el.ref.node); + this.selectStartNode = null; + } + else { + this.selectNode(el.ref.node); + this.selectStartNode = el.ref.node; + this.lastNavNode = el.ref.node; + } + }; + + this.onNodeDbClick = (cell, evt) => { + this.selectStartNode = cell.el.ref.node; + this.lastNavNode = null; + + if (this.onDoubleClick) { + this.onDoubleClick(cell, evt); + } + }; + + this.attachKeyboardListener(); + this.attachDragListener(); + } + + selectNonRenderedCells(posArr) { + for (let i = 0; i < this._nodes.length; i++) { + for (let j = 0; j < this._nodes[i].list.length; j++) { + const isInArea = isInSelectArea( + { + offsetLeft: Math.floor( + this.cellSize * j + cellMargin * (j * 2 + 1) + ), + offsetTop: Math.floor( + this.dynamicList._offsets[i.toString()] + cellMargin + ), + offsetWidth: this.cellSize, + offsetHeight: this.cellSize + }, + posArr, + this.sidePadding + ); + + if (isInArea) { + this.selectNode(this._nodes[i].list[j]); + } + else { + this.deselectNode(this._nodes[i].list[j]); + } + } + } + } + + selectRenderedCells(posArr) { + const keys = Object.keys(this.dynamicList._currentlyRendered); + + if (keys.length) { + for (let i = 0; i < keys.length; i++) { + const row = this.dynamicList._currentlyRendered[keys[i]]; + + if (row.children && row.children.length) { + for (let j = 0; j < row.children.length; j++) { + if (isInSelectArea(row.children[j], posArr, this.sidePadding)) { + this.selectNode(row.children[j].ref.node); + } + else { + this.deselectNode(row.children[j].ref.node); + } + } + } + } + } + } + + attachDragListener() { + let initX = 0; + let initY = 0; + + this.dragSelect = new mega.ui.dragSelect( + this.el, + { + allowedClasses: ['MegaDynamicListItem'], + onDragStart: (xPos, yPos) => { + initX = xPos; + initY = this.dynamicList.getScrollTop() + yPos; + }, + onDragMove: (xPos, yPos) => { + const posArr = []; + + yPos += this.dynamicList.getScrollTop(); + + if (xPos > initX) { + posArr.push(initX, xPos); + } + else { + posArr.push(xPos, initX); + } + + if (yPos > initY) { + posArr.push(initY, yPos); + } + else { + posArr.push(yPos, initY); + } + + this.selectArea = posArr; + + if (this.dynamicList) { + this.selectRenderedCells(posArr); + + delay('album_timeline:drag_select', () => { + this.selectNonRenderedCells(posArr); + }, 50); + } + }, + onDragEnd: (wasDragging, yCorrection, rect, { target }) => { + if (!wasDragging + && Object.keys(this.selections).length + && (target === this.el || target.classList.contains('MegaDynamicListItem'))) { + this.clearSiblingSelections(); + this.selectArea = null; + } + }, + onScrollUp: () => { + this.dynamicList.scrollToYPosition(this.dynamicList.getScrollTop() - 20); + }, + onScrollDown: () => { + this.dynamicList.scrollToYPosition(this.dynamicList.getScrollTop() + 20); + }, + getOffsetTop: () => this.dynamicList.getScrollTop() + } + ); + } + + resetLastNavNode() { + if (!this.lastNavNode && this.selectStartNode) { + this.lastNavNode = this.selectStartNode; + } + } + + attachKeyboardListener() { + if (disposeKeyboardEvents) { + disposeKeyboardEvents(); + } + + disposeKeyboardEvents = MComponent.listen(document, 'keydown', (evt) => { + if (evt.target !== document.body) { + return; + } + + const { key, shiftKey, metaKey, ctrlKey } = evt; + let rowIndex = -1; + let inRowIndex = -1; + let skipSelfSelect = false; + const isCtrl = getCtrlKeyStatus(evt); + + this.resetLastNavNode(); + + if (this.lastNavNode) { + rowIndex = this.rowIndexCache[this.lastNavNode.h]; + inRowIndex = this._nodes[this.rowIndexCache[this.lastNavNode.h]].list + .findIndex(({ h }) => h === this.lastNavNode.h); + } + else { + rowIndex++; + } + + const events = { + ArrowLeft: () => { + inRowIndex--; + + if (inRowIndex < 0) { + rowIndex--; + inRowIndex = zoomSteps[this.zoomStep] - 1; + } + + if (rowIndex < 0 && !shiftKey && !isCtrl) { + rowIndex = this._nodes.length - 1; + } + + if (this._nodes[rowIndex] && inRowIndex >= this._nodes[rowIndex].list.length) { + inRowIndex = this._nodes[rowIndex].list.length - 1; + } + }, + ArrowRight: () => { + inRowIndex++; + + if (inRowIndex >= this._nodes[rowIndex].list.length) { + rowIndex++; + inRowIndex = 0; + } + + if (rowIndex >= this._nodes.length && !shiftKey && !isCtrl) { + rowIndex = 0; + } + }, + ArrowUp: () => { + if (this.lastNavNode) { + rowIndex--; + } + else { + rowIndex = 0; + inRowIndex = 0; + } + + if (rowIndex < 0 && !shiftKey && !isCtrl) { + rowIndex = this._nodes.length - 1; + } + + if (this._nodes[rowIndex] && inRowIndex >= this._nodes[rowIndex].list.length) { + inRowIndex = this._nodes[rowIndex].list.length - 1; + } + }, + ArrowDown: () => { + if (this.lastNavNode) { + rowIndex++; + } + else { + rowIndex = 0; + inRowIndex = 0; + } + + if (rowIndex >= this._nodes.length && !shiftKey && !isCtrl) { + rowIndex = 0; + } + + if (this._nodes[rowIndex] && inRowIndex >= this._nodes[rowIndex].list.length) { + inRowIndex = this._nodes[rowIndex].list.length - 1; + } + }, + a: () => { + for (let i = 0; i < this._nodes.length; i++) { + for (let j = 0; j < this._nodes[i].list.length; j++) { + this.selectNode(this._nodes[i].list[j]); + } + } + + skipSelfSelect = true; + }, + Escape: () => { + if ($.dialog) { + disposeKeyboardEvents(); + evt.preventDefault(); + evt.stopPropagation(); + closeDialog(); + } + + return true; + }, + Enter: () => { + evt.preventDefault(); + evt.stopPropagation(); + + if ($.dialog) { + disposeKeyboardEvents(); + return true; + } + + const selectedHandles = Object.keys(this.selections); + + if (!Array.isArray(selectedHandles) || !selectedHandles.length) { + return true; + } + else if (selectedHandles.length === 1) { + playSlideshow(getAlbumIdFromPath()); + } + else if (selectedHandles.length > 1) { + M.addDownload(selectedHandles); + } + + return true; + } + }; + + if (isCtrl && events[key]) { + evt.preventDefault(); + evt.stopPropagation(); + } + + if (!events[key] + || events[key]() === true + || rowIndex < 0 + || rowIndex >= this._nodes.length) { + return true; + } + + this.lastNavNode = this._nodes[rowIndex].list[inRowIndex]; + + if (skipSelfSelect) { + return; + } + + this.scrollToSelectedRow(rowIndex); + + const { el } = this.cellCache[this.lastNavNode.h]; + + if (!isCtrl || !el.mComponent.isSelected) { + el.dispatchEvent( + new MouseEvent( + 'mouseup', + { + shiftKey, + metaKey, + ctrlKey + } + ) + ); + } + + if (!shiftKey && !isCtrl) { + this.clearSiblingSelections(this.lastNavNode.h); + } + }); + } + + scrollToSelectedRow(rowIndex) { + const newOffsetTop = this.dynamicList._offsets[rowIndex]; + const scrollTop = this.dynamicList.getScrollTop(); + + if (newOffsetTop < scrollTop) { + this.dynamicList.scrollToYPosition(newOffsetTop); + } + else { + const bottomOverflow = newOffsetTop + + this.rowHeight + + cellMargin + - (scrollTop + this.el.clientHeight); + + if (bottomOverflow > 0) { + this.dynamicList.scrollToYPosition(scrollTop + bottomOverflow); + } + } + } + + selectNode(node) { + if (!this.selections[node.h]) { + this.selections[node.h] = true; + + if (this.onSelectToggle) { + this.onSelectToggle(node); + } + + const cell = this.cellCache[node.h]; + + if (cell) { + cell.isSelected = true; + } + } + } + + deselectNode(node) { + if (this.selections[node.h]) { + delete this.selections[node.h]; + + if (this.onSelectToggle) { + this.onSelectToggle(node); + } + + const cell = this.cellCache[node.h]; + + if (cell) { + cell.isSelected = false; + } + + this.adjustToBottomBar(); + } + } + + onResize() { + if (this.dynamicList) { + this.setCellSize(); + + const keys = Object.keys(this.dynamicList._currentlyRendered); + + for (let i = 0; i < keys.length; i++) { + this.dynamicList.itemChanged(keys[i]); + } + } + } + + setCellSize() { + const gap = 8; + + this.cellSize = (this.el.offsetWidth + - gap * zoomSteps[this.zoomStep] // Cell margins + - this.sidePadding * 2) // Horizontal padding + / zoomSteps[this.zoomStep]; // Columns + } + + /** + * Preparing and caching the cell result for the future use + * @param {MegaNode} node Node to use for building the cell + * @returns {AlbumTimelineCell} + */ + getCachedCell(node) { + if (!this.cellCache[node.h]) { + this.cellCache[node.h] = new AlbumTimelineCell({ + node, + clickFn: this.onNodeClick, + dbclickFn: this.onNodeDbClick, + useMenu: this.interactiveCells + }); + } + + return this.cellCache[node.h]; + } + + renderRow(rowKey) { + const div = document.createElement('div'); + div.className = 'flex flex-row'; + + if (this._nodes[rowKey]) { + const sizePx = this.cellSize + 'px'; + const { list, monthLabel } = this._nodes[rowKey]; + + for (let i = 0; i < list.length; i++) { + const tCell = this.getCachedCell(list[i]); + + tCell.el.style.width = sizePx; + tCell.el.style.height = sizePx; + + if (this.showMonthLabel && !i && monthLabel) { + tCell.applyMonthLabel(monthLabel); + } + else { + tCell.removeMonthLabel(); + } + + if (this.selections[list[i].h]) { + tCell.isSelected = true; + } + + div.append(tCell.el); + this.observe(tCell); + } + } + + return div; + } + + unobserveRowCells() { + if (this.observer && this.dynamicList && this.dynamicList._currentlyRendered) { + const keys = Object.keys(this.dynamicList._currentlyRendered); + + for (let i = 0; i < keys.length; i++) { + const div = this.dynamicList._currentlyRendered[keys[i]]; + const cell = div.querySelector(':scope > div'); + + this.observer.unobserve(cell); + } + } + } + + observe(cell) { + if (this.observer) { + this.observer.observe(cell.el); + } + else { + fillAlbumTimelineCell(cell.el); + } + } + + unobserve(cell) { + if (this.observer) { + this.observer.unobserve(cell.el); + } + } + + /** + * Selecting all nodes in between + * @param {MegaNode} nodeA First node in the range + * @param {MegaNode} nodeB Last node in the range + * @returns {void} + */ + selectElementsRange(nodeA, nodeB) { + const nodes = this._nodes.map(({ list }) => list).flat(); + let indexA = false; + let indexB = false; + + for (let i = 0; i < nodes.length; i++) { + const { h } = nodes[i]; + + if (h === nodeA.h) { + indexA = i; + } + else if (h === nodeB.h) { + indexB = i; + } + + if (indexA !== false && indexB !== false) { + break; + } + } + + if (indexA > indexB) { + indexA += indexB; + indexB = indexA - indexB; + indexA -= indexB; + } + + for (let i = 0; i < nodes.length; i++) { + if (i >= indexA && i <= indexB) { + this.selectNode(nodes[i]); + } + else { + this.deselectNode(nodes[i]); + } + } + } + + adjustToBottomBar() { + delay( + 'album_timeline:adjusting_to_bottom_bar', + () => { + if (this.interactiveCells) { + this.el.style.height = (Object.keys(this.selections).length) ? 'calc(100% - 65px)' : null; + this.resizeDynamicList(); + Ps.update(this.el); + } + }, + 50 + ); + } + + resizeDynamicList() { + if (this.dynamicList) { + const prevScrollTop = this.dynamicList.getScrollTop(); + + this.dynamicList.resized(); + this.dynamicList.scrollToYPosition(prevScrollTop); + } + } + + debouncedResize() { + delay( + 'album_timeline:resize', + () => { + this.resizeDynamicList(); + }, + 100 + ); + } + + setZoomControls() { + if (this.zoomControls) { + return; + } + + this.zoomControls = document.createElement('div'); + this.zoomControls.className = 'gallery-view-zoom-control'; + + const buttons = [ + { + tooltip: l[24927], + classes: 'zoom-out', + icon: 'icon-minimise', + clickFn: () => { + this.zoomStep--; + }, + checkIfDisabled: () => this.zoomStep <= 0 + }, + { + tooltip: l[24928], + classes: 'zoom-in', + icon: 'icon-add', + clickFn: () => { + this.zoomStep++; + }, + checkIfDisabled: () => this.zoomStep >= zoomSteps.length - 1 + } + ]; + + for (let i = 0; i < buttons.length; i++) { + const { icon, clickFn, tooltip, classes, checkIfDisabled } = buttons[i]; + + const btn = document.createElement('button'); + btn.className = 'btn-icon simpletip ' + classes; + btn.dataset.simpletip = tooltip; + const iconEl = document.createElement('i'); + iconEl.className = 'sprite-fm-mono ' + icon; + btn.append(iconEl); + btn.onclick = () => { + clickFn(); + + if (checkIfDisabled()) { + btn.disabled = true; + btn.classList.add('disabled'); + } + + const sibling = btn.nextElementSibling || btn.previousElementSibling; + + if (sibling && sibling.disabled) { + sibling.disabled = false; + sibling.classList.remove('disabled'); + } + }; + + this.zoomControls.append(btn); + + if ((!i && !this.zoomStep) + || (i === buttons.length - 1 && this.zoomStep === zoomSteps.length - 1)) { + btn.disabled = true; + btn.classList.add('disabled'); + } + } + + this.el.parentNode.prepend(this.zoomControls); + } + + buildElement() { + this.el = document.createElement('div'); + } + + clear() { + this.selections = {}; + + if (this.observer) { + this.observer.disconnect(); + } + + if (this.zoomControls) { + if (this.el.parentNode) { + this.el.parentNode.removeChild(this.zoomControls); + } + + this.zoomControls = null; + } + + if (this.dragSelect) { + this.dragSelect.dispose(); + } + + if (disposeKeyboardEvents) { + disposeKeyboardEvents(); + } + + if (this.el && this.el.parentNode) { + this.el.parentNode.removeChild(this.el); + } + } + } + + class AlbumItemsDialog extends MDialog { + constructor(albumId, keepEnabled) { + super({ + ok: { + label: l.album_done, + callback: () => { + if (this.timeline && scope.albums.store[albumId]) { + const handles = Object.keys(this.timeline.selections); + + if (handles.length > 0) { + const existingHandles = {}; + const { nodes, label } = scope.albums.store[albumId]; + let addedCount = 0; + + for (let i = 0; i < nodes.length; i++) { + existingHandles[nodes[i].h] = true; + } + + for (let i = 0; i < handles.length; i++) { + const h = handles[i]; + + if (!existingHandles[h]) { + addedCount++; + mega.sets.elements.add(h, albumId); + } + } + + if (addedCount > 0) { + toaster.main.show({ + icons: ['sprite-fm-mono icon-check-circle text-color-medium'], + content: mega.icu + .format(l.album_added_items_status, addedCount) + .replace('%s', limitNameLength(label)) + }); + + if (isMainAlbums()) { + M.openFolder('albums/' + albumId); + } + } + } + } + + this.hide(); + } + }, + cancel: true, + dialogClasses: 'album-items-dialog', + contentClasses: 'px-1' + }); + + this.setContent(scope.albums.store[albumId].label); + this.keepEnabled = keepEnabled; + this._title.classList.add('text-center'); + this.albumId = albumId; + } + + setContent(albumName) { + this.slot = document.createElement('div'); + this.title = l.add_items_to_album.replace('%s', albumName); + } + + updateSelectedCount(count) { + if (count) { + this.actionTitle = mega.icu.format(l.selected_items_count, count); + this.enable(); + } + else { + this.actionTitle = l.no_selected_items; + + if (!this.keepEnabled) { + this.disable(); + } + } + } + + show() { + super.show(); + document.activeElement.blur(); + this.updateSelectedCount(0); + + if (scope.albums.grid && scope.albums.grid.timeline && scope.albums.grid.timeline.dragSelect) { + scope.albums.grid.timeline.dragSelect.disabled = true; + } + + this.timeline = new AlbumTimeline({ + onSelectToggle: () => { + delay( + 'timeline:update_selected_count', + () => { + this.updateSelectedCount(Object.values(this.timeline.selections).length); + }, + 50 + ); + }, + containerClass: 'album-timeline-dialog px-2 py-1', + sidePadding: 8, + showMonthLabel: true, + skipGlobalZoom: true + }); + + const cameraTree = MegaGallery.getCameraHandles(); + const galleryNodes = { + all: [], + cd: [], + cu: [] + }; + + for (let i = 0; i < M.v.length; i++) { + const n = M.v[i]; + let isGalleryNode = false; + + // Checking if it is a gallery node and if is located specifically in CU or in CD + if (mega.gallery.sections[mega.gallery.secKeys.cdphotos].filterFn(n, cameraTree)) { + galleryNodes.cd.push(n); + isGalleryNode = true; + } + + else if (mega.gallery.sections[mega.gallery.secKeys.cuphotos].filterFn(n, cameraTree)) { + galleryNodes.cu.push(n); + isGalleryNode = true; + } + + if (isGalleryNode) { + galleryNodes.all.push(n); + } + } + + if (galleryNodes.cu.length > 0 && galleryNodes.cd.length > 0) { + const nav = new MTabs(); + nav.el.classList.add('locations-dialog-nav'); + + nav.tabs = [ + { + label: l.gallery_all_locations, + click: () => { + nav.activeTab = 0; + this.timeline.nodes = galleryNodes.all; + } + }, + { + label: l.gallery_from_cloud_drive, + click: () => { + nav.activeTab = 1; + this.timeline.nodes = galleryNodes.cd; + } + }, + { + label: l.gallery_camera_uploads, + click: () => { + nav.activeTab = 2; + this.timeline.nodes = galleryNodes.cu; + } + } + ]; + + nav.activeTab = 0; + this.slot.append(nav.el); + } + else { + const div = document.createElement('div'); + div.className = 'text-center timeline-location'; + div.textContent = (galleryNodes.cu.length > 0) + ? l.on_camera_uploads + : l.on_cloud_drive; + + this.slot.append(div); + } + + this.slot.append(this.timeline.el); + + delay('render:album_timeline', () => { + if (this.timeline) { + this.timeline.nodes = galleryNodes.all; + } + }); + + mBroadcaster.once('closedialog', reinitiateEvents); + } + + hide() { + if (this.timeline) { + this.timeline.clear(); + delete this.timeline; + } + + super.hide(); + } + } + + class RemoveAlbumDialog extends MDialog { + /** + * @param {String[]} albumIds The IDs array for albums to be removed + */ + constructor(albumIds) { + const isMultiple = albumIds.length > 1; + + super({ + ok: { + label: (isMultiple) ? l.delete_albums_confirmation : l.delete_album_confirmation, + callback: () => { + let albumLabel = ''; + let someContainItems = false; + + const keys = Object.keys(toRestore.items); + + for (let i = 0; i < albumIds.length; i++) { + const albumId = albumIds[i]; + const album = scope.albums.store[albumId]; + + if (!album || album.filterFn) { + return; + } + + if (!albumLabel) { + albumLabel = album.label; + } + + if (pendingName && album.label === pendingName) { + pendingName = 0; + } + + if (!someContainItems && album.nodes.length) { + someContainItems = true; + } + + backupAlbumData(album.id); + mega.sets.remove(album.id); + + if (keys.length) { + for (let i = 0; i < keys.length; i++) { + const { albumId: inactiveAlbumId, toastId } = toRestore.items[keys[i]]; + + if (inactiveAlbumId === albumId) { + toaster.main.hide(toastId); + } + } + } + } + + const toastText = albumIds.length === 1 + ? mega.icu.format(l.albums_removed_status, 1).replace('%s', limitNameLength(albumLabel)) + : mega.icu.format(l.albums_removed_status, albumIds.length); + + const { content, undoBtn } = generateToastContent(toastText); + + toaster.main.show({ + icons: ['sprite-fm-mono icon-minus-circle text-color-medium'], + content, + timeout: 86400000 + }).then((toastId) => { + for (let i = 0; i < albumIds.length; i++) { + toRestore.albums[albumIds[i]].toastId = toastId; + } + + undoBtn.onclick = () => { + if (someContainItems) { + // Showing loading only if there is aep coming will come on restore + loadingDialog.show('MegaAlbums'); + } + + restoreRemovedAlbums(albumIds); + }; + }); + }, + classes: ['mega-button', 'branded-red'] + }, + cancel: true, + dialogClasses: null, + leftIcon: 'warning sprite-fm-uni icon-warning icon-size-16' + }); + + this.setContent(isMultiple); + } + + setContent(isMultiple) { + const p = document.createElement('p'); + p.className = 'px-6'; + + p.textContent = (isMultiple) ? l.delete_albums_dialog_body : l.delete_album_dialog_body; + + this.slot = p; + this.title = (isMultiple) ? l.delete_albums_dialog_title : l.delete_album_dialog_title; + } + } + + class AlbumNameDialog extends MDialog { + constructor(albumId) { + super({ + ok: { + label: albumId ? l.album_rename_btn_label : l.album_create_btn_label, + callback: () => { + const { value } = this.input; + const { err, isDisabled } = this.validateInput(albumId); + + if (mega.sets && !err && !isDisabled) { + this.okBtn.loading = true; + + if (albumId) { + mega.sets.updateAttrValue( + { + at: scope.albums.store[albumId].at, + k: scope.albums.store[albumId].k, + id: albumId + }, + 'n', + value + ).then(() => { + const album = scope.albums.store[albumId]; + + if (album) { + album.label = value; + + if (album.cellEl) { + album.cellEl.updateName(); + } + + if (album.button) { + album.button.label = value; + } + } + + this.hide(); + }).catch(() => { + this.okBtn.loading = false; + // Show an error? + }); + } + else { + scope.albums.tree.setPendingButton(value); + scope.albums.grid.setPendingCell(value); + pendingName = value; + + mega.sets.add(value) + .then(() => { + this.hide(); + }) + .catch(() => { + // Show an error? + this.okBtn.loading = false; + }); + } + } + + return false; + } + }, + cancel: true, + dialogClasses: 'create-folder-dialog', + contentClasses: 'px-2' + }); + + this.albumId = albumId; + this.setContent(albumId); + + this.disposeInputListener = MComponent.listen(this.input, 'input', () => { + this.triggerInputSaveguard(); + }); + this._title.classList.add('text-center'); + + scope.albums.removeKeyboardListener(); + + mBroadcaster.once('closedialog', reinitiateEvents); + } + + triggerInputSaveguard() { + const { err, warn, isDisabled } = this.validateInput(this.albumId); + + if (err) { + this.disable(); + this.showError(err); + } + else if (isDisabled) { + this.disable(); + } + else { + this.enable(); + } + + if (!err && warn) { + this.showWarning(warn); + } + + if (!err && !warn) { + this.clearHint(); + } + } + + setContent(albumId) { + this.slot = document.createElement('div'); + this.slot.className = 'px-6'; + + const div = document.createElement('div'); + div.className = 'create-album-input-bl'; + + const inputIcon = document.createElement('i'); + inputIcon.className = 'sprite-fm-mono icon-album icon-size-6'; + + this.input = document.createElement('input'); + this.input.setAttribute('placeholder', 'Album name'); + this.input.setAttribute('autofocus', ''); + this.input.setAttribute('type', 'text'); + + if (albumId && scope.albums.store[albumId]) { + this.input.value = scope.albums.store[albumId].label; + this.title = l.edit_album_name; + } + else { + const name = proposeAlbumName(); + + this.title = l.enter_album_name; + this.input.value = name; + + if (!name) { + this.disable(); + } + } + + div.append(inputIcon); + div.append(this.input); + this.slot.append(div); + } + + validateInput(albumId) { + const { value } = this.input; + + const validation = { + isDisabled: false, + err: null, + warn: null + }; + + + if (!value + || typeof value !== 'string' + || value.trim() === '' + || typeof albumId === 'string' && value === scope.albums.store[albumId].label) { + validation.isDisabled = true; + } + + // Cases for errors + switch (true) { + case value.length > 250: + validation.err = l.album_name_too_long; + break; + case value.trim().length && !M.isSafeName(value): + validation.err = l[24708]; + break; + case isSystemAlbumName(value): + validation.err = l.album_name_not_allowed; + break; + case albumNameExists(value, albumId): + validation.err = l.album_name_exists; + break; + default: break; + } + + if (value.length !== value.trim().length) { + validation.warn = l.album_name_contains_extra_spaces; + } + + return validation; + } + + showHint(text, className) { + if (!this.hint) { + this.hint = document.createElement('div'); + this.slot.append(this.hint); + } + + this.hint.className = className; + this.hint.textContent = text; + } + + showError(err) { + this.input.classList.add('error'); + this.showHint(err, 'duplicated-input-warning'); + } + + showWarning(warn) { + this.showHint(warn, 'whitespaces-input-warning'); + } + + clearHint() { + this.input.classList.remove('error'); + + if (this.hint) { + this.slot.removeChild(this.hint); + delete this.hint; + } + } + + show() { + super.show(); + this.triggerInputSaveguard(); + + delay('focus:new_album_input', () => { + this.input.focus(); + }, 200); + } + + hide() { + super.hide(); + this.disposeInputListener(); + } + } + + class NoMediaForAlbums extends MEmptyPad { + constructor() { + super(); + this.setContents(); + } + + setContents() { + this.el.append(MEmptyPad.createIcon('section-icon sprite-fm-theme icon-gallery-photos')); + this.el.append(MEmptyPad.createTxt(l.album_no_media, 'fm-empty-cloud-txt empty-albums-title')); + this.el.append(MEmptyPad.createTxt(l.empty_album_subtitle, 'fm-empty-description')); + + this.appendOptions([ + [l.empty_album_instruction_1, 'sprite-fm-mono icon-camera-uploads'], + [l.empty_album_instruction_2, 'sprite-fm-mono icon-mobile'], + [l.empty_album_instruction_3, 'sprite-fm-mono icon-pc'] + ]); + } + } + + class AlbumsEmpty { + constructor(title, btnLabel, buttonFn) { + this.el = document.createElement('div'); + this.el.className = 'text-center flex flex-column justify-center empty-albums-section'; + + this.setContents(title, btnLabel, buttonFn); + } + + setContents(title, btnLabel, buttonFn) { + const icon = document.createElement('i'); + icon.className = 'sprite-fm-theme icon-gallery-photos'; + + const titleEl = document.createElement('div'); + titleEl.className = 'fm-empty-cloud-txt empty-albums-title'; + titleEl.textContent = title; + + if (userAlbumsEnabled) { + const button = new MButton( + btnLabel, + null, + buttonFn, + 'mega-button large positive' + ); + this.el.append(button.el); + } + + this.el.append(icon); + this.el.append(titleEl); + } + } + + class MultipleAlbumContextMenu extends MMenuSelect { + constructor(domCells) { + super(); + + const options = []; + const albums = []; + let somePredefined = false; + let someContainNodes = false; + + for (let i = 0; i < domCells.length; i++) { + const { album } = domCells[i]; + + if (!somePredefined && album.filterFn) { + somePredefined = true; + } + + if (!someContainNodes && album.nodes.length > 0) { + someContainNodes = true; + } + + albums.push(album); + } + + if (someContainNodes) { + options.push(generateDownloadMenuItem(albums.map(({ id }) => id))); + } + + if (!somePredefined) { + options.push({ + label: l.delete_album, + click: () => { + const dialog = new RemoveAlbumDialog(albums.map(({ id }) => id)); + dialog.show(); + this.hide(); + }, + icon: 'disabled-filled', + classes: ['red'] + }); + } + + this.options = options; + } + } + + class AlbumContextMenu extends MMenuSelect { + constructor(albumId) { + super(); + + const options = []; + const album = scope.albums.store[albumId]; + const isUserAlbum = !album.filterFn; + + if (album.nodes.length && album.nodes.some(n => !isAllowedVideo(n))) { + options.push({ + label: l.album_play_slideshow, + icon: 'play-square', + click: () => { + $.selected = []; + playSlideshow(albumId, true); + } + }); + } + + options.push({ + label: l.album_open, + icon: 'preview-reveal', + click: () => { + M.openFolder('albums/' + albumId); + } + }); + + if (isUserAlbum) { + options.push( + { + label: l.add_album_items, + icon: 'add', + click: () => { + const dialog = new AlbumItemsDialog(albumId); + dialog.show(); + } + }, + {} + ); + + if (album.nodes.length) { + options.push( + generateDownloadMenuItem([albumId]), + { + label: l.set_album_cover, + icon: 'images', + click: nop + } + ); + } + + options.push( + { + label: l.rename_album, + click: () => { + const dialog = new AlbumNameDialog(albumId); + dialog.show(); + }, + icon: 'rename' + }, + {}, + { + label: l.delete_album, + click: () => { + const dialog = new RemoveAlbumDialog([albumId]); + dialog.show(); + this.hide(); + }, + icon: 'disabled-filled', + classes: ['red'] + } + ); + } + else { + options.push( + {}, + generateDownloadMenuItem([albumId]) + ); + } + + this.options = options; + } + } + + class AlbumCell extends MComponent { + constructor(albumId) { + super(); + + this.el.album = scope.albums.store[albumId]; + this.el.album.setThumb = (dataUrl, fa) => { + this.setThumb(dataUrl, fa); + }; + + this.attachEvent('click', (evt) => { + const resetSelections = !getCtrlKeyStatus(evt) && !evt.shiftKey; + scope.albums.grid.lastSelected = this.el; + + this.selectCell(resetSelections); + + if (evt.shiftKey) { + const albums = Object.values(scope.albums.store).filter(album => albumIsRenderable(album)); + + const index = albums.findIndex(({ cellEl }) => cellEl.el === this.el); + let shiftSelIndex = albums.findIndex(({ cellEl }) => cellEl.el === scope.albums.grid.shiftSelected); + + if (shiftSelIndex < 0) { + shiftSelIndex = index; + } + + const arr = [index, shiftSelIndex]; + arr.sort((a, b) => a - b); + + const [min, max] = arr; + + for (let i = 0; i < albums.length; i++) { + if (i >= min && i <= max) { + albums[i].cellEl.selectCell(); + } + else { + albums[i].cellEl.deselectCell(); + } + } + } + + evt.stopPropagation(); + evt.preventDefault(); + }); + + this.attachEvent( + 'dblclick', + () => { + M.openFolder('albums/' + albumId); + } + ); + + this.attachEvent( + 'contextmenu', + ({ pageX, pageY }) => { + if (!$.dialog) { + this.selectCell(!this.el.classList.contains('ui-selected')); + + const selectedCells = this.el.parentNode.querySelectorAll('.ui-selected'); + + const contextMenu = (selectedCells.length > 1) + ? new MultipleAlbumContextMenu(selectedCells) + : new AlbumContextMenu(albumId); + + if (contextMenu.options) { + contextMenu.show(pageX, pageY); + } + } + } + ); + } + + buildElement() { + this.el = document.createElement('div'); + this.el.className = 'albums-grid-cell skeleton flex flex-column justify-end cursor-pointer'; + } + + selectCell(clearSiblingSelections) { + if (!this.el.classList.contains('ui-selected')) { + this.el.classList.add('ui-selected'); + } + + if (clearSiblingSelections) { + AlbumCell.clearSiblingSelections(this.el); + } + } + + deselectCell() { + if (this.el.classList.contains('ui-selected')) { + this.el.classList.remove('ui-selected'); + } + } + + setThumb(dataUrl, fa) { + /** The album cover might change, when editing multiple nodes at once, + * so need to check if the thumb is still applicable + */ + if (this.el.album.node && this.el.album.node.fa === fa) { + this.el.style.backgroundImage = 'url(\'' + dataUrl + '\')'; + this.el.classList.remove('skeleton'); + } + } + + updateCover() { + if (this.el.album.node) { + MegaGallery.addThumbnails([this.el.album]); + } + else { + this.el.style.backgroundImage = null; + } + } + + updateName() { + const titleEl = this.el.querySelector('.album-label'); + + if (titleEl) { + titleEl.textContent = this.el.album.label; + } + } + + updatePlaceholders() { + const count = this.el.album.nodes.length; + + if (!this.el.isInViewport) { + return; + } + + const isPlaceholder = this.el.classList.contains('album-placeholder'); + this.el.classList.remove('skeleton'); + this.countEl.textContent = count ? mega.icu.format(l.album_items_count, count) : l.album_empty; + + if (isPlaceholder) { + if (count) { + this.el.classList.remove('album-placeholder'); + this.el.removeChild(this.el.firstChild); + } + } + else if (!count) { + this.el.classList.add('album-placeholder'); + + const placeholder = document.createElement('div'); + placeholder.className = 'flex flex-1 flex-row flex-center'; + + const icon = document.createElement('i'); + icon.className = 'sprite-fm-mono icon-album'; + + placeholder.append(icon); + this.el.prepend(placeholder); + } + } + + static clearSiblingSelections(ignoreEl) { + const albums = Object.values(scope.albums.store); + + for (let i = 0; i < albums.length; i++) { + if (albums[i].cellEl && (!ignoreEl || albums[i].cellEl.el !== ignoreEl)) { + albums[i].cellEl.el.classList.remove('ui-selected'); + } + } + } + } + + /** + * Creates a header for the Album(s) grid + * @class + */ + class AlbumsGridHeader { + constructor(parent) { + /** + * @type {HTMLElement?} + */ + this.breadcrumbs = null; + + /** + * @type {HTMLElement?} + */ + this.rightButtons = null; + + if (!parent) { + return; + } + + this.el = document.createElement('div'); + this.el.className = 'albums-header flex flex-row items-center justify-between'; + + parent.append(this.el); + parent.classList.remove('hidden'); + + this.setBreadcrumbs(); + } + + setBreadcrumbs(albumId) { + if (this.breadcrumbs) { + this.el.removeChild(this.breadcrumbs); + } + + this.breadcrumbs = document.createElement('div'); + + const span = document.createElement('span'); + + if (albumId && scope.albums.store[albumId]) { + const div = document.createElement('div'); + const btn = new MButton( + '', + 'icon-next-arrow rot-180', + () => { + M.openFolder('albums'); + }, + 'mega-button breadcrumb-btn action' + ); + + btn.el.title = l[822]; + + span.title = scope.albums.store[albumId].label; + span.textContent = span.title; + span.className = 'text-ellipsis ml-3 text-color-high'; + + div.append(btn.el); + this.breadcrumbs.append(div); + this.breadcrumbs.append(span); + this.breadcrumbs.className = 'flex flex-row items-center text-ellipsis'; + } + else { + span.textContent = l.albums; + span.className = 'ml-3 text-color-high font-body-1'; + this.breadcrumbs.prepend(span); + + const i = document.createElement('i'); + i.className = 'sprite-fm-mono icon-album icon-blue icon-size-6'; + this.breadcrumbs.prepend(i); + this.breadcrumbs.className = 'flex flex-row justify-center items-center'; + } + + this.el.prepend(this.breadcrumbs); + } + + setBreadcrumbsTitle(albumId) { + if (!this.breadcrumbs) { + this.setBreadcrumbs(albumId); + return; + } + + const span = this.breadcrumbs.querySelector('span'); + + span.title = scope.albums.store[albumId].label; + span.textContent = span.title; + } + + setSpecificAlbumButtons(albumId) { + const album = scope.albums.store[albumId]; + const nodesAvailable = album + && album.nodes.length > 0 + && album.nodes.some(n => !isAllowedVideo(n)); + + if (nodesAvailable) { + AlbumsGridHeader.attachButton( + l.album_play_slideshow, + 'icon-play-square icon-blue', + () => { + playSlideshow(albumId, true); + }, + this.rightButtons + ); + } + + if (album && !album.filterFn) { + AlbumsGridHeader.attachButton( + l.add_album_items, + 'icon-add icon-green', + () => { + const dialog = new AlbumItemsDialog(albumId); + dialog.show(); + }, + this.rightButtons, + !M.v.length + ); + } + + if (nodesAvailable) { + AlbumsGridHeader.attachButton( + l.album_download, + 'icon-download-small icon-blue', + ({ el }) => { + if (isMSync()) { + const handles = getAlbumsHandles([albumId]); + + if (handles.length) { + M.addDownload(handles); + } + } + else { + const { x, bottom } = el.getBoundingClientRect(); + const menu = new DownloadContextMenu(albumId); + + menu.show(x, bottom + 4); + } + }, + this.rightButtons + ); + } + } + + setGlobalButtons() { + if (userAlbumsEnabled) { + AlbumsGridHeader.attachButton( + l.new_album, + 'icon-add icon-green', + () => { + const dialog = new AlbumNameDialog(); + dialog.show(); + }, + this.rightButtons + ); + } + } + + update(albumId) { + this.setRightControls(albumId); + this.setBreadcrumbs(albumId); + } + + setRightControls(albumId) { + if (this.rightButtons) { + while (this.rightButtons.firstChild) { + this.rightButtons.removeChild(this.rightButtons.firstChild); + } + } + else { + this.rightButtons = document.createElement('div'); + this.rightButtons.className = 'flex flex-row'; + this.el.append(this.rightButtons); + } + + if (albumId) { + this.setSpecificAlbumButtons(albumId); + } + else { + this.setGlobalButtons(); + } + } + } + + AlbumsGridHeader.attachButton = (label, icon, clickFn, parent, isDisabled) => { + const button = new MButton( + label, + icon, + clickFn, + 'mega-button action ml-5' + ); + + if (parent) { + parent.append(button.el); + } + + if (isDisabled) { + button.el.disabled = true; + button.el.classList.add('disabled'); + } + + return button; + }; + + /** + * Creates a grid of available albums + * @class + */ + class AlbumsGrid { + constructor() { + /** + * @type {AlbumsGridHeader?} + */ + this.header = null; + this.emptyBlock = null; + } + + initLayout() { + loadingDialog.hide('MegaGallery'); + + // Checking if layout has already been initialised + if (this.header) { + return; + } + + const parent = document.getElementById('albums-view'); + + this.header = new AlbumsGridHeader(parent); + this.el = document.createElement('div'); + this.el.className = 'albums-grid justify-center ps-ignore-keys'; + + MComponent.listen(this.el, 'click', ({ shiftKey }) => { + AlbumCell.clearSiblingSelections(); + + if (!shiftKey) { + this.lastSelected = null; + } + }); + + parent.append(this.el); + } + + observe(cell) { + if (this.observer) { + this.observer.observe(cell.el); + } + else { + fillAlbumCell(cell.el); + } + } + + setPendingCell(label) { + this.pendingCell = document.createElement('div'); + this.pendingCell.className = 'albums-grid-cell flex flex-column' + + ' justify-end album-placeholder pending-cell'; + const subdiv = document.createElement('div'); + const labelEl = document.createElement('div'); + labelEl.className = 'album-label'; + labelEl.textContent = label; + const captionEl = document.createElement('div'); + captionEl.textContent = l.album_name_creating; + + subdiv.append(labelEl); + subdiv.append(captionEl); + this.pendingCell.append(subdiv); + + const firstUserAlbum = getFirstUserAlbum(); + + if (firstUserAlbum) { + this.el.insertBefore(this.pendingCell, firstUserAlbum.cellEl.el); + } + else { + this.el.append(this.pendingCell); + } + + this.updateGridState( + Object.values(scope.albums.store).filter(album => albumIsRenderable(album)).length + 1 + ); + this.el.scrollTop = 0; + } + + clearPendingCell() { + if (this.pendingCell) { + this.el.removeChild(this.pendingCell); + delete this.pendingCell; + } + } + + showEmptyAlbumPage(albumId) { + if (this.timeline) { + this.timeline.clear(); + delete this.timeline; + } + + if (M.v.length) { + this.updateGridState(0, false); + + this.addEmptyBlock(new AlbumsEmpty( + l.album_no_media, + l.add_album_items, + () => { + const dialog = new AlbumItemsDialog(albumId); + dialog.show(); + } + )); + } + else { + this.updateGridState(0, false); + this.addEmptyBlock(new NoMediaForAlbums()); + } + } + + showAlbumContents(albumId) { + const album = scope.albums.store[albumId]; + + if (!album || !album.nodes || !album.nodes.length) { + this.showEmptyAlbumPage(albumId); + return; + } + + this.removeEmptyBlock(); + + let prevCount = 0; + + this.timeline = new AlbumTimeline({ + onSelectToggle: () => { + delay( + 'timeline:update_selected_count', + () => { + if (!this.timeline) { + window.selectionManager.hideSelectionBar(); + return; + } + + const selCount = Object.keys(this.timeline.selections).length; + + if (selCount) { + window.selectionManager.showSelectionBar( + mega.icu.format(l.album_selected_items_count, album.nodes.length) + .replace('%1', selCount) + ); + + if (!prevCount) { + this.timeline.adjustToBottomBar(); + } + } + else { + window.selectionManager.hideSelectionBar(); + + if (prevCount) { + this.timeline.adjustToBottomBar(); + } + } + + prevCount = selCount; + }, + 50 + ); + }, + onDoubleClick: (cell) => { + const { h } = cell.el.ref.node; + this.timeline.clearSiblingSelections(h); + + this.timeline.selections[h] = true; + cell.isSelected = true; + + delay('render:in_album_node_preview', () => { + const isVideo = mega.gallery.isGalleryVideo(cell.el.ref.node); + + if (isVideo && (!isVideo.isPreviewable || !MediaAttribute.getMediaType(cell.el.ref.node))) { + M.addDownload([h]); + } + else { + playSlideshow(albumId); + } + }); + }, + containerClass: 'album-timeline-main px-1 py-1', + sidePadding: 4, + interactiveCells: true + }); + + this.el.classList.add('album-content-grid'); + this.el.style.gridTemplateColumns = null; + this.el.style.gridAutoRows = null; + this.el.append(this.timeline.el); + + delay('render:album_content_timeline', () => { + if (this.timeline && this.timeline.el && albumId === getAlbumIdFromPath()) { + window.selectionManager = new AlbumsSelectionManager( + albumId, + this.timeline.el + ).reinitialize(); + } + }); + + sortInAlbumNodes(album.nodes); + this.timeline.nodes = album.nodes; + this.timeline.setZoomControls(); + } + + addEmptyBlock(emptyPad) { + if (!this.emptyBlock) { + this.emptyBlock = emptyPad; + } + + this.el.append(this.emptyBlock.el); + } + + removeEmptyBlock() { + if (this.emptyBlock) { + if (this.el.contains(this.emptyBlock.el)) { + this.el.removeChild(this.emptyBlock.el); + } + + delete this.emptyBlock; + } + } + + /** + * Making the grid react to the elements change + * @param {Number} count Number of elements to render + * @param {Boolean} [useDefaultEmptyPad] Indicates when the empty state is being handled from outside + * @returns {void} + */ + updateGridState(count, useDefaultEmptyPad = true) { + let isEmpty = false; + + this.el.classList.remove('album-content-grid'); + + if (count > bigAlbumCellsLimit) { + this.el.classList.add('albums-grid-3-col'); + this.el.style.gridTemplateColumns = '200px 200px 200px'; + this.el.style.gridAutoRows = '200px'; + } + else if (count > 0) { + this.el.classList.remove('albums-grid-3-col'); + this.el.style.gridTemplateColumns = '300px 300px'; + this.el.style.gridAutoRows = '300px'; + } + else { + isEmpty = true; + this.el.style.gridTemplateColumns = null; + this.el.style.gridAutoRows = null; + } + + if (useDefaultEmptyPad) { + if (isEmpty) { + this.addEmptyBlock(new AlbumsEmpty( + l.no_albums, + l.create_new_album, + () => { + const dialog = new AlbumNameDialog(); + dialog.show(); + } + )); + } + else { + this.removeEmptyBlock(); + } + } + } + + refresh() { + this.updateGridState( + Object.values(scope.albums.store).filter(album => albumIsRenderable(album)).length + ); + } + + prepareAlbumCell(id) { + const album = scope.albums.store[id]; + + if (!album || !albumIsRenderable(album)) { + return null; + } + + let albumCell = album.cellEl; + + if (!albumCell) { + albumCell = new AlbumCell(id); + album.cellEl = albumCell; + } + + this.observe(albumCell); + + return albumCell; + } + + insertPredefinedAlbum(albumId) { + const prevActiveSiblingAlbum = getPrevActivePredefinedAlbum(albumId, 'cellEl'); + const albumCell = this.prepareAlbumCell(albumId); + + if (prevActiveSiblingAlbum) { + this.el.insertBefore(albumCell.el, prevActiveSiblingAlbum.cellEl.el.nextSibling); + } + else { + this.el.prepend(albumCell.el); + } + } + + insertUserAlbum(id) { + const albumCell = this.prepareAlbumCell(id); + + if (albumCell) { + insertAlbumElement(id, albumCell.el, this.el, 'cellEl'); + } + } + + showAllAlbums() { + const albumKeys = Object.keys(scope.albums.store); + let albumsCount = 0; + + this.setObserver(); + + for (let i = 0; i < albumKeys.length; i++) { + const albumCell = this.prepareAlbumCell(albumKeys[i]); + + if (albumCell) { + this.el.append(albumCell.el); + albumsCount++; + } + } + + this.updateGridState(albumsCount); + + delay('render:albums_grid', () => { + applyPs(this.el); + + this.attachDragSelect(); + this.attachKeyboardEvents(); + + this.lastSelected = null; + }); + } + + attachDragSelect() { + if (this.dragSelect) { + this.dragSelect.dispose(); + } + + let initX = 0; + let initY = 0; + let albums = []; + let area = []; + + const selectMatchingCells = () => { + for (let i = 0; i < albums.length; i++) { + if (isInSelectArea(albums[i].cellEl.el, area)) { + albums[i].cellEl.selectCell(false); + } + else { + albums[i].cellEl.deselectCell(); + } + } + }; + + this.dragSelect = new mega.ui.dragSelect( + this.el, + { + onDragStart: (xPos, yPos) => { + initX = xPos; + initY = this.el.scrollTop + yPos; + albums = Object.values(scope.albums.store).filter(a => albumIsRenderable(a) && a.cellEl); + }, + onDragMove: (xPos, yPos) => { + area = []; + + yPos += this.el.scrollTop; + + if (xPos > initX) { + area.push(initX, xPos); + } + else { + area.push(xPos, initX); + } + + if (yPos > initY) { + area.push(initY, yPos); + } + else { + area.push(yPos, initY); + } + + selectMatchingCells(); + }, + onDragEnd: (wasDragging) => { + if (!wasDragging) { + AlbumCell.clearSiblingSelections(); + } + }, + onScrollUp: () => { + this.el.scrollTop -= 20; + selectMatchingCells(); + }, + onScrollDown: () => { + this.el.scrollTop += 20; + selectMatchingCells(); + } + } + ); + } + + attachKeyboardEvents() { + if (disposeKeyboardEvents) { + disposeKeyboardEvents(); + } + + disposeKeyboardEvents = (() => { + const disposeKeydown = MComponent.listen(document, 'keydown', (evt) => { + if (evt.target !== document.body) { + return; + } + + const albums = Object.values(scope.albums.store).filter(album => albumIsRenderable(album)); + + if (!albums.length) { + return true; + } + + const { key, shiftKey } = evt; + const isCtrl = getCtrlKeyStatus(evt); + const lastSelIndex = (this.lastSelected) + ? albums.findIndex(({ cellEl }) => cellEl.el === this.lastSelected) + : -1; + const albumsPerRow = (albums.length > bigAlbumCellsLimit) ? 3 : 2; + let curIndex = lastSelIndex; + + const setFirstSelection = () => { + this.lastSelected = albums[0].cellEl.el; + albums[0].cellEl.selectCell(); + + return true; + }; + + const events = { + ArrowLeft: () => { + if (!this.lastSelected) { + setFirstSelection(); + } + + curIndex--; + }, + ArrowUp: () => { + if (!this.lastSelected) { + setFirstSelection(); + } + + curIndex -= albumsPerRow; + }, + ArrowRight: () => { + if (!this.lastSelected) { + setFirstSelection(); + } + + curIndex++; + }, + ArrowDown: () => { + if (!this.lastSelected) { + setFirstSelection(); + } + + curIndex += albumsPerRow; + }, + a: () => { + if (!isCtrl) { + return; + } + + for (let i = 0; i < albums.length; i++) { + albums[i].cellEl.selectCell(); + } + + evt.preventDefault(); + evt.stopPropagation(); + + return true; + }, + Shift: () => { + this.shiftSelected = this.lastSelected; + return true; + } + }; + + if (!events[key] || events[key]() === true) { + return true; + } + + evt.preventDefault(); + evt.stopPropagation(); + + if (curIndex < 0) { + curIndex = (isCtrl || shiftKey) ? 0 : albums.length - 1; + } + else if (curIndex >= albums.length) { + curIndex = (isCtrl + || shiftKey + || (curIndex - lastSelIndex > 1 && curIndex - (albums.length - 1) < albumsPerRow)) + ? albums.length - 1 + : 0; + } + + const albumCell = albums[curIndex].cellEl; + albumCell.selectCell(); + this.lastSelected = albumCell.el; + + const adjustScrollTop = () => { + if (albumCell.el.offsetTop < scope.albums.grid.el.scrollTop) { + scope.albums.grid.el.scrollTop = albumCell.el.offsetTop - cellMargin * 3; + } + else { + const bottomOverlap = albumCell.el.offsetTop + albumCell.el.offsetHeight + - (scope.albums.grid.el.scrollTop + scope.albums.grid.el.clientHeight); + + if (bottomOverlap > 0) { + scope.albums.grid.el.scrollTop += bottomOverlap + cellMargin * 3; + } + } + }; + + const adjustSiblings = () => { + if (!isCtrl && !shiftKey) { + AlbumCell.clearSiblingSelections(albumCell.el); + } + else if (shiftKey) { + const shiftSelIndex = albums.findIndex(({ cellEl }) => cellEl.el === this.shiftSelected); + + const arr = [curIndex, shiftSelIndex]; + arr.sort((a, b) => a - b); + + const [min, max] = arr; + + for (let i = 0; i < albums.length; i++) { + if (i >= min && i <= max) { + albums[i].cellEl.selectCell(); + } + else { + albums[i].cellEl.deselectCell(); + } + } + } + }; + + adjustScrollTop(); + adjustSiblings(); + }); + + const disposeKeyup = MComponent.listen(document, 'keyup', ({ key }) => { + if (key === 'Shift') { + this.shiftSelected = null; + } + }); + + return () => { + disposeKeydown(); + disposeKeyup(); + }; + })(); + } + + showAlbum(id) { + this.initLayout(); + + if (isMainAlbums()) { + this.showAllAlbums(); + this.header.update(); + return; + } + + const album = id ? scope.albums.store[id] : null; + + if (!album || !albumIsRenderable(album)) { + M.openFolder('albums'); + } + else { + this.showAlbumContents(id); + this.header.update(id); + } + } + + clear(removeGridContainer) { + const { el, timeline, observer } = this; + + const observerIsSet = !!observer; + + while (el.firstChild) { + if (observerIsSet) { + observer.unobserve(el.firstChild); + } + + el.removeChild(el.firstChild); + } + + if (observerIsSet) { + observer.disconnect(); + delete this.observer; + } + + if (removeGridContainer && el.parentNode) { + el.parentNode.removeChild(el); + } + + if (timeline) { + timeline.clear(); + delete this.timeline; + } + + const keys = Object.keys(scope.albums.store); + + for (let i = 0; i < keys.length; i++) { + scope.albums.store[keys[i]].cellEl = null; + } + } + + removeHeader() { + if (this.header) { + this.header.el.parentNode.removeChild(this.header.el); + this.header = null; + } + } + + async updateInAlbumNode({ s, h: handle, id }) { + const album = scope.albums.store[s]; + + // Checking if the album is still available or if it has already got a requested node + if (!album || album.nodes.some(({ h }) => h === handle)) { + return; + } + + if (!M.d[handle]) { + await dbfetch.get(handle); + } + + album.nodes.push(M.d[handle]); + album.eHandles[handle] = id; + album.eIds[id] = handle; + + debouncedAlbumCellUpdate(s, true); + + if (M.currentdirid === 'albums/' + s) { + const { timeline, header } = this; + + // Checking if that is the first node and clearing up the empty state + if (album.nodes.length === 1) { + this.removeEmptyBlock(); + this.showAlbumContents(s); + header.update(s); + } + else { + delay('album:' + s + ':add_items', () => { + if (timeline) { + timeline.nodes = album.nodes; + } + }); + } + } + } + + removeAlbum(album) { + this.el.removeChild(album.cellEl.el); + } + + setObserver() { + if (this.observer === undefined && 'IntersectionObserver' in window) { + this.observer = new IntersectionObserver( + (entries) => { + handleIntersect(entries, 'album', fillAlbumCell); + }, + observerOptions(this.el) + ); + } + } + } + + /** + * Creates a tree for the sidebar with expandable first item and other ones treated as subitems + * @class + */ + class AlbumsTree { + constructor(parent) { + /** + * @type {MSidebarButton?} + */ + this.headButton = null; + + /** + * @type {Object.>} + */ + this.buttons = { + predefined: {}, + userDefined: {} + }; + + this.el = document.createElement('div'); + this.el.className = 'lp-content-wrap'; + + this.treeList = document.createElement('div'); + this.treeList.className = 'albums-tree-list'; + + this.el.append(this.treeList); + + parent.append(this.el); + this.setHeader(); + } + + setPendingButton(label) { + this.pendingBtn = new MSidebarButton( + label + ' ' + l.album_name_creating, + 'icon-album', + nop, + 'pending-btn subalbum-btn' + ); + + const firstUserAlbum = getFirstUserAlbum(); + + if (firstUserAlbum) { + this.treeList.insertBefore(this.pendingBtn.el, firstUserAlbum.button.el); + } + else { + this.treeList.append(this.pendingBtn.el); + } + } + + clearPendingButton() { + if (this.pendingBtn) { + this.treeList.removeChild(this.pendingBtn.el); + delete this.pendingBtn; + } + } + + setHeader() { + this.headButton = new MSidebarButton( + l.albums, + 'icon-album', + () => { + if (!isMainAlbums()) { + M.openFolder('albums'); + } + + if (this.listExpanded) { + this.collapseList(); + } + else { + this.expandList(); + } + } + ); + + this.headButton.isExpandable = checkIfExpandable(); + this.el.prepend(this.headButton.el); + + // @TODO: Remove this bit once User albums are in place + if (!userAlbumsEnabled && !this.headButton.isExpandable) { + this.headButton.el.classList.add('hidden'); + } + } + + clear(removeAll) { + if (this.treeList) { + while (this.treeList.firstChild) { + this.treeList.removeChild(this.treeList.firstChild); + } + } + + if (removeAll) { + if (this.headButton) { + this.el.removeChild(this.headButton.el); + delete this.headButton; + } + + if (this.treeList) { + this.el.removeChild(this.treeList); + delete this.treeList; + } + } + } + + renderAlbumButtons() { + const keys = Object.keys(scope.albums.store); + + for (let i = 0; i < keys.length; i++) { + if (albumIsRenderable(scope.albums.store[keys[i]])) { + this.appendButton(keys[i]); + } + } + } + + focusAlbum(id) { + const album = id ? scope.albums.store[id] : null; + + if (!album || !albumIsRenderable(album)) { + this.headButton.setActive(); + } + else { + scope.albums.store[id].button.setActive(); + } + + this.expandList(); + } + + unfocusAlbums() { + this.headButton.unsetActive(); + } + + /** + * Appending the list with the new button + * @param {String} albumId The key of the album in the store + * @returns {void} + */ + appendButton(albumId) { + const album = scope.albums.store[albumId]; + + if (album) { + if (!album.button) { + album.button = AlbumsTree.createButton(albumId, album.label); + } + + if (!album.filterFn || album.nodes) { + this.treeList.append(album.button.el); + this.headButton.isExpandable = true; + } + } + } + + /** + * Inserting the button into the existing list as per the order + * @param {String} albumId Album id + * @returns {void} + */ + insertPredefinedButton(albumId) { + const album = scope.albums.store[albumId]; + + if (album) { + if (!album.button) { + album.button = AlbumsTree.createButton(albumId, album.label); + } + + const prevActiveSiblingAlbum = getPrevActivePredefinedAlbum(albumId, 'button'); + + if (prevActiveSiblingAlbum) { + this.treeList.insertBefore(album.button.el, prevActiveSiblingAlbum.button.el.nextSibling); + } + else { + this.treeList.prepend(album.button.el); + } + + this.headButton.isExpandable = true; + } + } + + removeAlbum(album) { + if (album.button) { + this.treeList.removeChild(album.button.el); + } + } + + expandList() { + if (this.headButton) { + this.listExpanded = true; + this.headButton.el.classList.add('expansion-btn-open'); + } + } + + collapseList() { + if (this.headButton) { + this.listExpanded = false; + this.headButton.el.classList.remove('expansion-btn-open'); + } + } + } + + /** + * @param {String} albumId Album ID + * @param {String} label Button label + * @returns {MSidebarButton} + */ + AlbumsTree.createButton = (albumId, label) => { + const btn = new MSidebarButton( + label, + 'icon-album', + () => { + const nextFolder = 'albums/' + albumId; + + if (M.currentdirid !== nextFolder) { + M.openFolder(nextFolder); + } + }, + 'subalbum-btn' + ); + + btn.attachEvent( + 'contextmenu', + ({ pageX, pageY }) => { + const contextMenu = new AlbumContextMenu(albumId); + contextMenu.show(pageX, pageY); + } + ); + + return btn; + }; + + /** + * Creates a controlling class for AlbumsTree, AlbumsGrid and AlbumScroll + */ + class Albums { + constructor() { + this.awaitingDbAction = false; + this.grid = null; + this.store = { // The length of the key should be always as per predefinedKeyLength + fav: { id: 'fav', label: l.gallery_favourites, filterFn: () => false }, + mya: { id: 'mya', label: l.my_albums, filterFn: () => false }, + sha: { id: 'sha', label: l.shared_albums, filterFn: () => false }, + gif: { + id: 'gif', + label: l.album_key_gif, + filterFn: n => n.fa && fileext(n.name || '', true, true) === 'GIF' + }, + raw: { + id: 'raw', + label: l.album_key_raw, + filterFn: n => n.fa + && is_rawimage(n.name) !== undefined + && !ignoreRaws[fileext(n.name || '', true, true)] + } + }; + + this.tree = null; + + /** + * This array holds all the subscribers for mega.sets + * The stored functions represent `unsubscribe` methods for each of the subscriber + * @type {Function[]} + */ + this.setsSubscribers = []; + } + + subscribeToSetsChanges() { + if (Array.isArray(this.setsSubscribers) && this.setsSubscribers.length) { + return; + } + + this.setsSubscribers = [ + mega.sets.subscribe('asp', 'albums', (data) => { + const { id, at, k } = data; + const isPending = pendingName !== '' && mega.sets.decryptAttr(at, k).n === pendingName; + let prevName = ''; + const isExisting = !!scope.albums.store[id]; + + if (isPending) { + this.grid.clearPendingCell(); + this.tree.clearPendingButton(); + this.pendingName = ''; + } + else if (this.store[id]) { + prevName = this.store[id].label; + } + + this.createAlbumData(data, unwantedHandles()); + + if (!isExisting) { + sortStore(); + this.addUserAlbumToTree(id, true); + } + + if (isMainAlbums()) { + if (isExisting) { + if (scope.albums.store[id].cellEl) { + scope.albums.store[id].cellEl.updateName(); + } + } + else if (this.grid) { + this.grid.insertUserAlbum(id); + this.grid.refresh(); + + delay('album:trigger_items_dialog', () => { + if (isPending && M.v.length) { + const dialog = new AlbumItemsDialog(id, true); + dialog.show(); + } + }, 100); + } + } + else if ( + M.currentdirid === 'albums/' + id + && prevName !== this.store[id].label + && this.grid + ) { + this.grid.header.setBreadcrumbsTitle(id); + } + }), + mega.sets.subscribe('asr', 'albums', ({ id }) => { + this.removeAlbumFromGridAndTree(id); + + if (M.currentdirid === 'albums/' + id) { + if (this.grid.emptyBlock) { + this.grid.removeEmptyBlock(); + } + + M.openFolder('albums'); + } + }), + mega.sets.subscribe('aep', 'albums', (element) => { + if (this.grid) { + this.grid.updateInAlbumNode(element); + } + + debouncedLoadingUnset(); + }), + mega.sets.subscribe('aer', 'albums', (element) => { + this.removeUserAlbumItem(element); + }) + ]; + } + + getAvailableNodes(handles) { + const nodes = []; + + if (Array.isArray(handles)) { + for (let i = 0; i < handles.length; i++) { + nodes.push(M.d[handles[i]]); + } + } + else { + const fmNodes = Object.values(M.d); + const ignoreHandles = unwantedHandles(); + + for (let i = 0; i < fmNodes.length; i++) { + if (!mega.gallery.isGalleryNode(fmNodes[i])) { + continue; + } + + const { fa, s, p, fv } = fmNodes[i]; + + if (fa && s && !ignoreHandles[p] && !fv) { + nodes.push(fmNodes[i]); + } + } + } + + return nodes; + } + + init(handles) { + const gallerySidebar = document.querySelector('.js-lp-gallery.lp-gallery .js-gallery-panel'); + const isAlbums = isInAlbums(); + const isGallery = isInGallery(); + + if ((!isAlbums && !isGallery) || !gallerySidebar) { + // It is either not a Gallery page or dom is broken + return; + } + + this.initTree(gallerySidebar); + delay('render:albums_sidebar', () => { + applyPs(gallerySidebar); + }); + + if (!MegaGallery.dbActionPassed) { + if (this.awaitingDbAction) { + return; // Some other part has already requested this + } + + this.awaitingDbAction = true; + + if (isGallery) { + return;// Handles will be retrieved by Gallery + } + + Albums.fetchDBDataFromGallery(); + return; // Fetch will re-trigger Albums.init() the second time after the db data is retrieved. + } + + const availableNodes = this.getAvailableNodes(handles); + + if (availableNodes.length) { + sortInAlbumNodes(availableNodes); + } + + this.buildAlbumsList(availableNodes).then(() => { + if (isAlbums) { + M.v = availableNodes; + const id = M.currentdirid.replace(/albums\/?/i, ''); + + this.tree.focusAlbum(id); + this.showAlbum(id); + } + else { + loadingDialog.hide('MegaGallery'); + } + + this.awaitingDbAction = false; + }); + + this.subscribeToSetsChanges(); + } + + initTree(sidebar) { + if (!this.tree) { + if (isInAlbums()) { + loadingDialog.show('MegaGallery'); + } + + this.tree = new AlbumsTree(sidebar); + } + } + + initGrid() { + if (!this.grid) { + this.grid = new AlbumsGrid(); + } + } + + /** + * Generating buttons for predefined albums + * @param {MegaNode[]} nodesArr array of nodes to process + * @returns {void} + */ + setPredefinedAlbums(nodesArr) { + const nodesObj = Object.create(null); + const covers = Object.create(null); + const predefinedKeys = Object.keys(this.store).filter(k => k.length === predefinedKeyLength); + const albums = []; + + for (let i = 0; i < nodesArr.length; i++) { + const node = nodesArr[i]; + + for (let j = 0; j < predefinedKeys.length; j++) { + const key = predefinedKeys[j]; + const { filterFn } = this.store[key]; + + if (filterFn(node)) { + if (!covers[key]) { + covers[key] = node; + } + + if (nodesObj[key]) { + nodesObj[key].push(node); + } + else { + nodesObj[key] = [node]; + } + + break; + } + } + } + + for (let i = 0; i < predefinedKeys.length; i++) { + const key = predefinedKeys[i]; + + if (nodesObj[key]) { + const album = this.store[key]; + album.node = covers[key]; + album.nodes = nodesObj[key]; + + this.tree.appendButton(key); + albums.push(album); + } + else { + this.store[key].nodes = []; + } + } + + return albums; + } + + /** + * Generating buttons for User-created albums + * @returns {Object[]} + */ + async setUserAlbums() { + const sets = await mega.sets.getAll(); + const albums = []; + + if (!Array.isArray(sets) || !sets.length) { + return []; + } + + const ignoreHandles = unwantedHandles(); + + for (let i = 0; i < sets.length; i++) { + albums.push(this.createAlbumData(sets[i], ignoreHandles)); + } + + sortStore(); + + const userAlbums = Object.values(this.store); + + for (let i = 0; i < userAlbums.length; i++) { + if (!userAlbums[i].filterFn) { + this.addUserAlbumToTree(userAlbums[i].id); + } + } + + return albums; + } + + async buildAlbumsList(nodesArr) { + if (scope.albumsRendered) { + this.tree.renderAlbumButtons(); + return; + } + + const albums = Object.values(this.store); + + for (let index = 0; index < albums.length; index++) { + const { id, filterFn } = albums[index]; + + if (!filterFn) { + delete this.store[id]; + } + } + + this.setPredefinedAlbums(nodesArr); + await this.setUserAlbums(); + + scope.albumsRendered = true; + + if (this.tree) { + this.tree.headButton.isExpandable = checkIfExpandable(); + + // @TODO: Remove this bit once User albums are in place + if (!userAlbumsEnabled && !this.tree.headButton.isExpandable) { + this.tree.headButton.el.classList.add('hidden'); + } + else { + this.tree.headButton.el.classList.remove('hidden'); + } + } + } + + /** + * @param {Object.} data Set data to process + * @param {Object.} ignoreHandles Handles to ignore when add to the album + * @returns {void} + */ + createAlbumData({ e, at, k, id, ts }, ignoreHandles) { + const attr = mega.sets.decryptAttr(at, k); + const label = attr.n || l.unknown_album_name; + const coverHandle = attr.n || l.unknown_album_name; + const t = parseInt(attr.t || 0); + let album = this.store[id]; + const nodes = []; + const eHandles = {}; + const eIds = {}; + let node = null; + + if (Array.isArray(e) && e.length) { + for (let i = 0; i < e.length; i++) { + const { h, id } = e[i]; + + if (M.d[h] && !ignoreHandles[M.d[h].p]) { + nodes.push(M.d[h]); + + if (h === coverHandle) { + node = e[i]; + } + } + + eHandles[h] = id; + eIds[id] = h; + } + } + + sortInAlbumNodes(nodes); + + if (!node) { + node = nodes[0]; + } + + if (album) { + album.at = attr; + album.k = k; + album.label = label; + album.t = t; + album.button.label = label; + album.nodes = nodes; + album.node = node; + album.eHandles = eHandles; + album.eIds = eIds; + } + else { + album = { + at: attr, + k, + id, + label, + nodes, + node, + button: AlbumsTree.createButton(id, label), + ts, + t, + eHandles, + eIds + }; + + this.store[id] = album; + } + + return album; + } + + /** + * @param {String} albumId Album ID + * @param {Boolean} toInsert Whether to insert an album among the others or just append the list + * @returns {void} + */ + addUserAlbumToTree(albumId, toInsert) { + const album = this.store[albumId]; + + if (!album) { + return; + } + + if (toInsert) { + insertAlbumElement(albumId, album.button.el, this.tree.treeList, 'button'); + } + else { + this.tree.treeList.append(album.button.el); + } + + this.tree.headButton.isExpandable = true; + } + + showAlbum(id) { + this.initGrid(); + this.grid.showAlbum(id); + } + + clearSubscribers() { + if (this.setsSubscribers) { + for (let i = 0; i < this.setsSubscribers.length; i++) { + this.setsSubscribers[i](); + } + } + + this.setsSubscribers = []; + } + + removeKeyboardListener() { + if (disposeKeyboardEvents) { + disposeKeyboardEvents(); + } + + disposeKeyboardEvents = null; + } + + clearUndoToasts() { + const keys = Object.keys(toRestore); + + for (let i = 0; i < keys.length; i++) { + const ids = Object.keys(toRestore[keys[i]]); + + if (ids.length) { + for (let j = 0; j < ids.length; j++) { + toaster.main.hide(toRestore[keys[i]][ids[j]].toastId); + delete toRestore[keys[i]][ids[j]]; + } + } + } + } + + disposeInteractions() { + if (this.grid && this.grid.timeline) { + this.grid.timeline.clear(); + } + else { + this.removeKeyboardListener(); + } + + if (this.tree) { + this.tree.unfocusAlbums(); + } + + this.removeGrid(); + this.clearUndoToasts(); + } + + disposeAll() { + this.disposeInteractions(); + + this.removeTree(); + this.clearSubscribers(); + + scope.albumsRendered = false; + } + + removeTree() { + if (this.tree) { + this.tree.clear(true); + delete this.tree; + } + } + + removeGrid() { + if (this.grid) { + this.grid.clear(true); + this.grid.removeHeader(); + + const albumsView = document.getElementById('albums-view'); + + if (albumsView && !albumsView.classList.contains('hidden')) { + albumsView.classList.add('hidden'); + } + + this.grid = null; + } + } + + /** + * This method removes album from tree and grid by id + * @param {String} albumId Album ID + * @returns {void} + */ + removeAlbumFromGridAndTree(albumId) { + const album = this.store[albumId]; + + if (!album) { + return; + } + + const onMainAlbumsGrid = this.grid && isMainAlbums() && album.cellEl; + + if (this.tree) { + this.tree.removeAlbum(album); + } + + if (onMainAlbumsGrid) { + this.grid.removeAlbum(album); + } + + if (!album.filterFn) { + delete this.store[albumId]; + } + + if (onMainAlbumsGrid) { + this.grid.refresh(); + } + + delay('album:clean_grid_and_tree', () => { + if (this.tree) { + this.tree.headButton.isExpandable = checkIfExpandable(); + } + }); + } + + /** + * Reacting to the global removal of the node + * @param {MegaNode} node Removed MegaNode + * @returns {void} + */ + onCDNodeRemove(node) { + if (node.t) { + if (M.c[node.h]) { + const childKeys = Object.keys(M.c[node.h]); + + for (let i = 0; i < childKeys.length; i++) { + const n = M.d[childKeys[i]]; + + if (n) { + this.onCDNodeRemove(n); + } + } + } + + return; + } + + if (!mega.gallery.isGalleryNode(node)) { + return; + } + + const albumKeys = Object.keys(this.store) + .filter(k => Array.isArray(this.store[k].nodes) && this.store[k].nodes.length > 0); + + if (!albumKeys.length) { + return; + } + + const { h: handle } = node; + + for (let i = 0; i < albumKeys.length; i++) { + removeNodeFromAlbum(albumKeys[i], handle); + } + } + + /** + * Reacting to the global change of the node + * @param {MegaNode} node Updated MegaNode + * @returns {void} + */ + onCDNodeUpdate(node) { + if (node.t) { + if (M.c[node.h]) { + const childKeys = Object.keys(M.c[node.h]); + + for (let i = 0; i < childKeys.length; i++) { + const n = M.d[childKeys[i]]; + + if (n) { + this.onCDNodeUpdate(n); + } + } + } + + return; + } + + if (M.getNodeRoot(node.p) === M.RubbishID) { + this.onCDNodeRemove(node); + return; + } + + if (!mega.gallery.isGalleryNode(node)) { + return; + } + + const keys = Object.keys(this.store); + + for (let i = 0; i < keys.length; i++) { + this.updateAlbumDataByUpdatedNode(keys[i], node); + } + } + + removeUserAlbumItem({ id, s }) { + const album = scope.albums.store[s]; + + if (!album || !album.eIds[id]) { + return; + } + + const delHandle = album.eIds[id]; + const isCover = album.nodes.length && album.nodes[0].h === delHandle; + + album.nodes = album.nodes.filter(({ h }) => h !== delHandle); + + delete album.eHandles[delHandle]; + delete album.eIds[id]; + + delay('album:' + s + ':update_placeholder', () => { + if (album.nodes.length) { + album.node = album.nodes[0]; + } + else { + delete album.node; + } + + if (album.cellEl) { + album.cellEl.updatePlaceholders(); + + if (!album.node || isCover) { + album.cellEl.updateCover(); + } + } + }); + + if (M.currentdirid === 'albums/' + s) { + if (this.grid.timeline && this.grid.timeline.selections[delHandle]) { + this.grid.timeline.deselectNode(M.d[delHandle]); + } + + if (album.nodes.length) { + delay('album:' + s + ':remove_items', () => { + if (this.grid.timeline) { + this.grid.timeline.nodes = album.nodes; + } + }); + } + else { + this.grid.header.update(s); + this.grid.showEmptyAlbumPage(s); + } + } + } + + /** + * Updating grid and tree after adding a node to an album + * @param {String} albumId Album id + * @returns {void} + */ + updateGridAfterAddingNode(albumId) { + const album = scope.albums.store[albumId]; + + if (!album) { + return; + } + + // Creating the predefined album buttons if it has received it's first node (was hidden before) + if (album.filterFn && album.nodes.length === 1) { + if (isInAlbums() || isInGallery()) { + this.tree.insertPredefinedButton(albumId); + } + + if (isMainAlbums() && this.grid) { + this.grid.insertPredefinedAlbum(albumId); + this.grid.refresh(); + this.grid.header.update(); + } + } + + debouncedAlbumCellUpdate(albumId, true); + + if (M.currentdirid === 'albums/' + albumId && this.grid) { + if (album.nodes.length === 1) { + this.grid.removeEmptyBlock(); + this.grid.showAlbumContents(albumId); + this.grid.header.update(albumId); + } + else { + delay('album:' + albumId + ':add_items', () => { + if (this.grid && this.grid.timeline) { + this.grid.timeline.nodes = album.nodes; + } + }); + } + } + } + + /** + * Updating the data of the specific album based on the new node details + * @param {String} albumId Album id + * @param {MegaNode} node Updated node + * @returns {void} + */ + updateAlbumDataByUpdatedNode(albumId, node) { + const { h: handle } = node; + const album = this.store[albumId]; + const additionIsNeeded = album + && ((album.filterFn && album.filterFn(node)) || (!album.filterFn && album.eHandles[handle])) + ? !album.nodes || !album.nodes.length || !album.nodes.some(({ h }) => h === handle) + : false; + + if (additionIsNeeded) { + album.nodes = (Array.isArray(album.nodes)) ? [...album.nodes, node] : [node]; + + this.updateGridAfterAddingNode(albumId); + debouncedLoadingUnset(); + } + } + + static fetchDBDataFromGallery() { + const passDbAction = (handles) => { + MegaGallery.dbActionPassed = true; + + if (scope.albums.awaitingDbAction) { + scope.albums.init(handles); + } + }; + + /** + * @param {Object[]} nodes Nodes fetched from local DB to parse + * @param {Boolean} skipDbFetch Skipping individual node fetch, when it is being loaded already + * @returns {void} + */ + const parseNodes = (nodes, skipDbFetch) => { + const ignoreHandles = unwantedHandles(); + const handles = []; + + if (Array.isArray(nodes)) { + for (let i = 0; i < nodes.length; i++) { + if (!mega.gallery.isGalleryNode(nodes[i])) { + continue; + } + + const { fa, s, p, h, fv } = nodes[i]; + + if (fa && s && !ignoreHandles[p] && !fv) { + handles.push(h); + } + } + } + + if (skipDbFetch) { + passDbAction(handles); + } + else { + dbfetch.geta(handles) + .then(() => { + passDbAction(handles); + }) + .catch(nop); + } + }; + + MegaGallery.dbAction() + .then(parseNodes) + .catch(() => { + console.warn('Local DB failed. Fetching nodes from memory...'); + parseNodes(Object.values(M.d), true); + }); + } + + removeSelectedElements() { + if (!this.grid || !this.grid.timeline) { + return; + } + + const album = scope.albums.store[getAlbumIdFromPath()]; + const handles = Object.keys(this.grid.timeline.selections); + + if (!handles.length) { + return; + } + + const restorationKey = Date.now().toString(); + + backupAlbumItemsData(restorationKey, album.id, handles); + + for (let i = 0; i < handles.length; i++) { + if (album.eHandles[handles[i]]) { + mega.sets.elements.remove(album.eHandles[handles[i]], album.id); + } + } + + const { content, undoBtn } = generateToastContent( + mega.icu + .format(l.album_items_removed_status, handles.length) + .replace('%s', limitNameLength(album.label)) + ); + + toaster.main.show({ + icons: ['sprite-fm-mono icon-bin text-color-medium'], + content, + timeout: 86400000 + }).then((toastId) => { + toRestore.items[restorationKey].toastId = toastId; + + undoBtn.onclick = () => { + restoreAlbumItemsData(restorationKey); + }; + }); + } + + previewSelectedElements() { + playSlideshow(getAlbumIdFromPath()); + } + + downloadSelectedElements() { + if (this.grid && this.grid.timeline) { + M.addDownload(Object.keys(mega.gallery.albums.grid.timeline.selections)); + } + } + } + + return new Albums(); +}); + +// initialising onboarding v4 +mBroadcaster.addListener('fm:initialized', () => { + + 'use strict'; + + // If user is visiting folderlink, or not complete registration do not show Onboarding V4. + if (folderlink || u_type < 3) { + return; + } + + const OBV4_FLAGS = { + OBV4: 'obv4f', + CLOUD_DRIVE: 'obcd', + CLOUD_DRIVE_UPLOAD: 'obcduf', + CLOUD_DRIVE_MANAGE_FILES: 'obcdmyf', + CLOUD_DRIVE_MEGASYNC: 'obcdda', + CHAT: 'obmc', + CHAT_OPEN: 'obmcnw', + CHAT_NAV: 'obmclp', + CHAT_CHATS_PANE: 'obmccp', + CHAT_MEETINGS_PANE: 'obmcmp', + CHAT_CONTACT_PANE: 'obmcco', + // New onboarding flags to be added at the end of this object. Don't change the order!!!! + }; + + const flagMap = new MegaDataBitMap('obv4', false, Object.values(OBV4_FLAGS)); + flagMap.isReady().then((res) => { + if (res) { + // ENOENT so migrate any old flags to this attribute + for (const flag of Object.values(OBV4_FLAGS)) { + let val = typeof fmconfig[flag] === 'undefined' || fmconfig[flag] === 0 ? 0 : 1; + if (fmconfig.obrev) { + val ^= 1; + } + flagMap.setSync(flag, val, true); + } + flagMap.commit().then(() => { + // Migration succeeded so clear out of fmconfig + const flags = Object.values(OBV4_FLAGS); + flags.push('obrev'); + for (const flag of flags) { + mega.config.remove(flag); + } + // TODO eventually clear flags from config.js to reclaim space + }).catch(dump); + } + + // If new user then we can ignore the first chat step + if (u_attr.since >= 1659398400) { + flagMap.setSync(OBV4_FLAGS.CHAT_NAV, 1); + flagMap.safeCommit(); + mBroadcaster.once('chat_initialized', () => { + // Show the new user onboarding dot when chat is ready. + const $mcNavDot = $('.nw-fm-left-icon.conversations .onboarding-highlight-dot', fmholder); + if (!flagMap.getSync(OBV4_FLAGS.CHAT_OPEN) && !M.chat) { + $('.dark-tooltip', $mcNavDot.parent().addClass('w-onboard')).addClass('hidden'); + $mcNavDot.removeClass('hidden'); + } + + mBroadcaster.addListener('pagechange', () => { + if (M.chat) { + flagMap.setSync(OBV4_FLAGS.CHAT_OPEN, 1); + flagMap.safeCommit(); + $mcNavDot.addClass('hidden'); + $('.dark-tooltip', $mcNavDot.parent().removeClass('w-onboard')).removeClass('hidden'); + + return 0xDEAD; + } + }); + }); + } + + if (mega.ui.onboarding) { + mBroadcaster.addListener('pagechange', mega.ui.onboarding.start.bind(mega.ui.onboarding)); + mega.ui.onboarding.start(); + } + }).catch(dump); + + // Onboarding Flow map. This need to be set carefully for design flow on each section. + // Instruction requires to be place on later stage. + const obMap = { + 'cloud-drive': { + title: l[20556], + flag: OBV4_FLAGS.CLOUD_DRIVE, + steps: [ + { + name: l[372], + flag: OBV4_FLAGS.CLOUD_DRIVE_UPLOAD, + actions: [ + { + type: 'showDialog', + dialogTitle: l.onboard_v4_upload_dialog_title, + dialogDesc: l.onboard_v4_upload_dialog_desc, + targetElmClass: '.button.fm-uploads', + targetElmPosition: 'left bottom', + targetHotSpot: true, + markComplete: true + } + ] + }, + { + name: l.onboard_v4_manage_file_control_button, + flag: OBV4_FLAGS.CLOUD_DRIVE_MANAGE_FILES, + get prerequisiteCondition() { + return M.v.length !== 0; + }, + prerequisiteWarning: l.onboard_v4_manage_file_prerequisite_warning, + actions: [ + { + type: 'showDialog', + dialogTitle: l.onboard_v4_manage_file_dialog_title, + dialogDesc: l.onboard_v4_manage_file_dialog_desc, + targetElmClass: '.megaListItem:first', + get targetElmPosition() { + return M.viewmode ? 'right' : 'bottom'; + }, + markComplete: true, + nextActionTrigger: 'contextmenu' + }, + { + type: 'markContextMenu', + targetElmClass: [ + '.dropdown.context.files-menu a.sh4r1ng-item', + '.dropdown.context.files-menu a.getlink-item' + ], + targetDescription: [ + l.onboard_v4_manage_file_context_desc_1, + l.onboard_v4_manage_file_context_desc_2 + ], + contextElmClass: '.megaListItem:first', + } + ] + }, + { + name: l[956], + flag: OBV4_FLAGS.CLOUD_DRIVE_MEGASYNC, + actions: [ + { + type: 'showExtDialog', + targetElmClass: '.mega-dialog.mega-desktopapp-download', + dialogInitFunc: initDownloadDesktopAppDialog, + markComplete: true + } + ] + } + ] + }, + chat: { + title: 'MEGA Chat', + flag: OBV4_FLAGS.CHAT, + dismissNoConfirm: true, + steps: [ + { + name: 'MEGA Chat Left Pane', + flag: OBV4_FLAGS.CHAT_NAV, + actions: [ + { + type: 'showDialog', + dialogClass: 'mcob', + dialogTitle: l.onboard_megachat_dlg1_title, + dialogDesc: l.onboard_megachat_dlg1_text, + dialogNext: l.onboard_megachat_dlg1_btn, + targetElmClass: '.conversationsApp .lhp-nav', + targetElmPosition: 'right bottom', + markComplete: true, + ignoreBgClick: true, + } + ] + }, + { + name: 'Chats', + flag: OBV4_FLAGS.CHAT_CHATS_PANE, + actions: [ + { + type: 'showDialog', + dialogClass: 'mcob', + dialogTitle: l.onboard_megachat_dlg2_title, + dialogDesc: l.onboard_megachat_dlg2_text, + targetElmClass: '.conversationsApp .toggle-panel-heading', + targetElmPosition: 'right', + markComplete: true, + ignoreBgClick: true, + } + ] + }, + { + name: 'Meetings', + flag: OBV4_FLAGS.CHAT_MEETINGS_PANE, + actions: [ + { + type: 'showDialog', + dialogClass: 'mcob', + dialogTitle: l.onboard_megachat_dlg3_title, + dialogDesc: l.onboard_megachat_dlg3_text, + targetElmClass: '.conversationsApp .lhp-nav .lhp-meetings-tab', + targetElmPosition: 'bottom right', + markComplete: true, + ignoreBgClick: true, + } + ] + }, + { + name: 'Contacts', + flag: OBV4_FLAGS.CHAT_CONTACT_PANE, + actions: [ + { + type: 'showDialog', + dialogClass: 'mcob', + dialogTitle: l.onboard_megachat_dlg4_title, + dialogDesc: l.onboard_megachat_dlg4_text, + dialogNext: l[726], + targetElmClass: '.conversationsApp .lhp-nav .lhp-contacts-tab', + targetElmPosition: 'bottom right', + markComplete: true, + skipHidden: true, + ignoreBgClick: true, + } + ] + } + ] + } + }; + + + // If this is an old user don't show them the cloud-drive onboarding v4 + if (!(u_attr.since > 1631664000 || localStorage.obv4test)) { + delete obMap['cloud-drive']; + } + + // Main controller level of whole OBv4 include section start, reset, initialising. + class OnboardV4 { + + /** + * OnboardV4 + * @constructor + * + * @param {object} map Map used to create Sections and corresponding Steps + * @param {MegaDataBitMap} flagStorage The onboarding flag storage + */ + constructor(map, flagStorage) { + + this.map = map; + this.sections = Object.create(null); + this.flagStorage = flagStorage; + } + + start() { + + const {currentSection} = this; + const {currentSectionName} = this; + + // User revisit this section + if (currentSection) { + currentSection.init(); + } + // User visit this section first time lets start + else { + // eslint-disable-next-line no-use-before-define + this.sections[currentSectionName] = new OnboardV4Section(this.map[currentSectionName], this); + } + } + + // Delete flag for testing purpose. + reset(prefix) { + + // this is only for debugging + if (!d) { + return; + } + + let obflags = Object.values(OBV4_FLAGS); + + if (prefix) { + obflags = obflags.filter(flag => flag.startsWith(prefix)); + } + + for (var i = obflags.length; i--;) { + this.flagStorage.set(obflags[i], 0); + } + this.flagStorage.safeCommit(); + } + + get currentSectionName() { + + switch (M.currentrootid) { + case M.RootID: return 'cloud-drive'; + case M.InboxID: return 'inbox'; + case M.RubbishID: return 'rubbish-bin'; + case 'chat': return 'chat'; + default: return M.currentrootid === undefined ? M.currentdirid : M.currentrootid; + } + } + + get currentSection() { + + return this.sections[this.currentSectionName]; + } + } + + // Section(Page) level like Clouddrive, Chat, Backup, Settings, etc. + class OnboardV4Section { + + constructor(map, parent) { + + this.map = map; + this.steps = []; + this.parent = parent; + this.init(); + } + + init() { + + // This section is completed let move on. + if (!this.map || this.isComplete) { + + $('.onboarding-control-panel').addClass('hidden'); + + return; + } + + this.prepareControlPanel(); + this.bindControlPanelEvents(); + this.hotspotNextStep(); + } + + get currentStep() { + return this.steps[this.currentStepIndex]; + } + + get isComplete() { + return !!this.parent.flagStorage.getSync(this.map.flag); + } + + prepareControlPanel() { + + const currentSteps = this.map.steps; + + if (!currentSteps) { + return; + } + + let html = ''; + + this.$obControlPanel = $('.onboarding-control-panel').removeClass('hidden'); + + $('.onboarding-control-panel-title', this.$obControlPanel).text(this.map.title); + + for (let i = 0; i < currentSteps.length; i++) { + + html += ``; + + this.steps[i] = new OnboardV4Step(this, i ,currentSteps[i], this.$obControlPanel); + } + + $('.onboarding-control-panel-step', this.$obControlPanel).safeHTML(html); + } + + bindControlPanelEvents() { + + $('.onboarding-step-link', this.$obControlPanel).rebind('click.onboarding', e => { + + const clickedStep = $('.onboarding-step-count', e.currentTarget).text() - 1; + + if (clickedStep === this.currentStepIndex) { + return false; + } + + onIdle(() => { + this.startNextOpenSteps(clickedStep); + }); + + return false; + }); + + $('.onboarding-control-panel-content .js-close', this.$obControlPanel) + .rebind('click.onboarding', this.showConfirmDismiss.bind(this)); + $('.onboarding-control-panel-complete .js-close', this.$obControlPanel) + .rebind('click.onboarding', this.markSectionComplete.bind(this)); + $('.js-dismiss', this.$obControlPanel).rebind('click.onboarding', this.markSectionComplete.bind(this)); + $('.js-dismiss-cancel', this.$obControlPanel) + .rebind('click.onboarding', this.hideConfirmDismiss.bind(this)); + $('.onboarding-step-link', this.$obControlPanel).rebind('mouseenter.onboarding', e => { + + const stepIndex = e.currentTarget.querySelector('.onboarding-step-count').textContent; + this.steps[stepIndex - 1].checkPrerequisite(); + }); + } + + showConfirmDismiss() { + + this.hotspotNextStep(); + this.currentStepIndex = undefined; + if (this.map.dismissNoConfirm) { + return this.markSectionComplete(); + } + + $('.onboarding-control-panel-dismiss', this.$obControlPanel).removeClass('hidden'); + $('.onboarding-control-panel-content', this.$obControlPanel).addClass('hidden'); + } + + hideConfirmDismiss() { + + $('.onboarding-control-panel-dismiss', this.$obControlPanel).addClass('hidden'); + $('.onboarding-control-panel-content', this.$obControlPanel).removeClass('hidden'); + } + + showCompleteMessage() { + + clickURLs(); + + $('.onboarding-control-panel-complete', this.$obControlPanel).removeClass('hidden'); + $('.onboarding-control-panel-content', this.$obControlPanel).addClass('hidden'); + + this.setSectionComplete(); + } + + searchNextOpenStep() { + + let nextStep = false; + + for (let i = 0; i < this.steps.length; i++) { + + if (this.steps[i].isComplete) { + this.steps[i].markDone(); + } + else if (nextStep === false){ + nextStep = i; + } + } + + return nextStep; + } + + hotspotNextStep() { + + const nextStepIndex = this.searchNextOpenStep(); + + if (nextStepIndex === false) { + + // This section is completed lets show user there is no more. + this.showCompleteMessage(); + return false; + } + + this.steps[nextStepIndex].markHotspot(); + } + + startNextOpenSteps(step) { + + if (this.steps.length === 0 || this.steps[step] && this.steps[step].isComplete) { + return false; + } + + // Just searching next step available + if (step === undefined) { + this.currentStepIndex = this.searchNextOpenStep(); + + if (this.currentStepIndex === false) { + + // This section is completed lets show user there is no more. + this.showCompleteMessage(); + return false; + } + } + // Manually triggered by event such as click + else { + this.currentStepIndex = step; + } + + if (!this.currentStep.checkPrerequisite()) { + + if (!step) { + this.currentStep.showPrerequisiteMessage(); + } + + delete this.currentStepIndex; + + this.hotspotNextStep(); + + return false; + } + + this.currentStep.markActive(); + this.currentStep.currentActionIndex = 0; + this.currentStep.executeAction(); + } + + // Mark section completed and hide onboarding control panel + markSectionComplete() { + + this.$obControlPanel.addClass('hidden'); + this.setSectionComplete(); + } + + // set section completed on fmconfig + setSectionComplete() { + this.parent.flagStorage.setSync(this.map.flag, 1); + this.parent.flagStorage.safeCommit(); + } + } + + // Step level like Upload, File Management, Desktop app, etc. + class OnboardV4Step { + + constructor(parent, index, map, $cp) { + + this.index = index; + this.map = map; + this.currentActionIndex = 0; + this.$controlPanel = $cp; + this.parentSection = parent; + + this.initActions(); + } + + checkPrerequisite() { + + if (this.map.prerequisiteCondition === false) { + + this.addPrerequisiteMessage(); + return false; + } + + this.removePrerequisiteMessage(); + + return true; + } + + addPrerequisiteMessage() { + + this.$stepButton.addClass('simpletip').attr({ + 'data-simpletip': this.map.prerequisiteWarning, + 'data-simpletipposition': 'bottom', + 'data-simpletip-class': 'bluetip medium-width theme-light-forced center-align', + }); + } + + showPrerequisiteMessage() { + + this.$stepButton.addClass('manual-tip').trigger('mouseenter.simpletip'); + + setTimeout(() => { + this.$stepButton.removeClass('manual-tip').trigger('simpletipClose.internal'); + }, 4000); + } + + removePrerequisiteMessage() { + this.$stepButton.removeClass('simpletip').removeAttr( + 'data-simpletip data-simpletipposition data-simpletip-class data-simpletip-display-duration'); + } + + get $stepButton() { + return $('.onboarding-step-link', this.$controlPanel).eq(this.index); + } + + initActions() { + + this.actions = []; + + for (let i = 0; i < this.map.actions.length; i++) { + this.actions[i] = new OnboardV4Action(this, this.map.actions[i]); + } + } + + executeAction() { + + this.actions[this.currentActionIndex].execute(); + } + + toNextAction() { + + this.currentActionIndex++; + + if (this.actions[this.currentActionIndex]) { + this.executeAction(); + } + else { + this.parentSection.hotspotNextStep(); + } + } + + get currentAction() { + return this.actions[this.currentActionIndex]; + } + + get nextAction() { + return this.actions[this.currentActionIndex + 1]; + } + + get isComplete() { + return !!this.parentSection.parent.flagStorage.getSync(this.map.flag); + } + + markHotspot() { + + delay('markingDelay', () => { + + if (this.parentSection.currentStepIndex !== this.index) { + $('.onboarding-step-link', this.$controlPanel).eq(this.index) + .removeClass('active').addClass('hotspot'); + } + }, 1000); + } + + markActive() { + $('.onboarding-step-link', this.$controlPanel).removeClass('hotspot').eq(this.index).addClass('active'); + } + + markDeactive() { + $('.onboarding-step-link', this.$controlPanel).eq(this.index).removeClass('active'); + } + + markDone() { + + $('.onboarding-step-link', this.$controlPanel).eq(this.index).removeClass('active').addClass('complete'); + + this.parentSection.parent.flagStorage.setSync(this.map.flag, 1); + this.parentSection.parent.flagStorage.safeCommit(); + } + } + + // Action level of each step, like open dialog on upload section, context menu marking on File management, etc. + class OnboardV4Action { + + constructor(parent, actionMap) { + + this.map = actionMap; + this.type = actionMap.type; + this.parentStep = parent; + } + + execute() { + + const actionType = this.map.type; + + if (typeof this[actionType] === 'function') { + this[actionType](); + } + } + + showDialog() { + + if (!$(this.map.targetElmClass).length) { + return; + } + this.$dialog = $('#ob-dialog'); + + M.safeShowDialog('onboardingDialog', () => { + this.$dialog.removeClass('mcob').addClass(this.map.dialogClass || ''); + // Fill contents for the dialog + $('#ob-dialog-title').text(this.map.dialogTitle); + $('#ob-dialog-text').text(this.map.dialogDesc); + $('.js-next span', this.$dialog).text(this.map.dialogNext || l[556]); + $('.js-skip', this.$dialog).removeClass('hidden').addClass(this.map.skipHidden ? 'hidden' : ''); + + this.positionDialog(); + this.bindDialogEvents(); + + return this.$dialog; + }); + } + + positionDialog() { + + if (!$(this.map.targetElmClass).length) { + // Just in case something odd happened with the DOM node. + return; + } + // Position of the onboarding dialog + let my = 'center top'; + let at = 'center bottom+6'; + let arrowAt = 'top'; + let hadHidden = false; + + switch (this.map.targetElmPosition) { + case 'top': + my = 'center bottom'; + at = 'center top-6'; + arrowAt = 'bottom'; + break; + case 'left': + my = 'right center'; + at = 'left-6 center'; + arrowAt = 'right'; + break; + case 'right': + my = 'left center'; + at = 'right+6 center'; + arrowAt = 'left'; + break; + case 'left bottom': + my = 'right top'; + at = 'left-6 bottom-2'; + arrowAt = false; + break; + case 'right bottom': + my = 'left center'; + at = 'right+6 bottom'; + arrowAt = 'left'; + break; + case 'bottom right': + my = 'left-42 bottom-8'; + at = 'right-42 top'; + arrowAt = 'top-left'; + break; + } + + if (this.map.targetHotSpot) { + $(this.map.targetElmClass).addClass('onboarding-hotspot-animation-rect'); + } + + // $.position bug escaping + this.$dialog.removeAttr('style'); + + // As hidden eleemnt cannot calculate collision with viewport edge, remove hidden temporarily + if (this.$dialog.hasClass('hidden')) { + this.$dialog.removeClass('hidden'); + hadHidden = true; + } + + this.$dialog.position({ + my: my, + at: at, + of: this.map.targetElmClass, + collision: 'flipfit', + using: (obj, info) => { + + if (arrowAt && arrowAt !== 'top-left') { + // Dialog position is moved due to collision on viewport swap arrow position + if (info.horizontal === 'right' && obj.left < info.target.left) { + arrowAt = 'right'; + } + else if (info.horizontal === 'left' && obj.left > info.target.left) { + arrowAt = 'left'; + } + else if (info.vertical === 'top' && obj.top > info.target.top) { + arrowAt = 'top'; + } + else if (info.vertical === 'bottom' && obj.top < info.target.top) { + arrowAt = 'bottom'; + } + } + + this.$dialog.css(obj); + } + }); + + if (arrowAt) { + $('#ob-dialog-arrow', this.$dialog) + .removeClass('hidden top bottom left right top-left').addClass(arrowAt); + } + else { + $('#ob-dialog-arrow', this.$dialog).addClass('hidden').removeClass('top bottom left right top-left'); + } + + // If it was temporary bug fixing hidden removal, add hidden back + if (hadHidden) { + this.$dialog.addClass('hidden'); + } + } + + bindDialogEvents() { + + let __updFMUIListener; + const __closeDialogAction = (noComplete) => { + + closeDialog(); + $('.onboarding-hotspot-animation-rect').removeClass('onboarding-hotspot-animation-rect'); + + $('#fmholder').off('mouseup.onboarding'); + $('.fm-right-files-block .ui-selectable:visible:not(.hidden)').off('mousedown.onboarding'); + $('body').off('drop.onboarding'); + $(this.map.targetElmClass).off(`${this.map.nextActionTrigger}.onboarding`); + $(window).off('resize.onboarding'); + $('.js-close', this.parentStep.$obControlPanel).off('click.obdialogdismiss'); + + if (__updFMUIListener) { + mBroadcaster.removeListener(__updFMUIListener); + } + + if (!noComplete && this.map.markComplete) { + this.parentStep.markDone(); + } + else if (noComplete) { + this.parentStep.markDeactive(); + } + }; + + // There is next action trigger, if it happen on target, close dialog and move to next action. + if (this.map.nextActionTrigger) { + + let $binded = $(this.map.targetElmClass).rebind(`${this.map.nextActionTrigger}.onboarding`, () => { + + __closeDialogAction(); + this.parentStep.toNextAction(); + }); + + // when node update on File Manager, rebind target action trigger event to new target if required + __updFMUIListener = mBroadcaster.addListener('updFileManagerUI', () => { + + if (!$binded.is(this.map.targetElmClass)) { + + $binded.off(`${this.map.nextActionTrigger}.onboarding`); + + $binded = $(this.map.targetElmClass).rebind(`${this.map.nextActionTrigger}.onboarding`, () => { + + __closeDialogAction(); + this.parentStep.toNextAction(); + }); + } + }); + } + + // User trigger mouse event on other than target, just close dialog and place hotspot on next step + $('#fmholder').rebind('mouseup.onboarding', e => { + + // If there is nextActionTrigger, let that handle close dialog. + if ( + !this.map.ignoreBgClick + && ( + !this.map.nextActionTrigger + || !($(e.target).is(this.map.targetElmClass) + || $(e.target).parents(this.map.targetElmClass).length) + ) + ) { + + __closeDialogAction(); + this.parentStep.parentSection.hotspotNextStep(); + } + }); + + // Event for block view empty space, to not conflict with selection manger multi-selection event. + $('.fm-right-files-block .ui-selectable:visible:not(.hidden)').rebind('mousedown.onboarding', e => { + + if (e.which === 1 && !this.map.ignoreBgClick) { + + __closeDialogAction(); + this.parentStep.parentSection.hotspotNextStep(); + } + }); + + // Drag drop file will close the dialog and continue upload process + $('body').rebind('drop.onboarding', () => { + + __closeDialogAction(); + this.parentStep.parentSection.hotspotNextStep(); + }); + + // Next button clicked, close dialog and move to next available step + $('.js-next', this.$dialog).rebind('click.onboarding', () => { + + __closeDialogAction(); + this.parentStep.parentSection.startNextOpenSteps(); + }); + + // Skip button clicked, close dialog and mark step as completed + $('.js-skip', this.$dialog).rebind('click.onboarding', () => { + + __closeDialogAction(true); + this.parentStep.parentSection.showConfirmDismiss(); + }); + + $('.js-close', this.parentStep.$obControlPanel).rebind('click.obdialogdismiss', () => { + + __closeDialogAction(true); + }); + + $(window).rebind('resize.onboarding', this.positionDialog.bind(this)); + } + + markContextMenu() { + + mBroadcaster.once('showcontextmenu', () => { + + const targetSelector = this.map.targetElmClass.join(); + const html = '
          '; + + $(targetSelector).safeAppend(html); + + if (this.map.targetDescription) { + + for (var i = this.map.targetDescription.length; i--;) { + + $('.onboarding-highlight-dot', this.map.targetElmClass[i]).parent().addClass('simpletip').attr({ + 'data-simpletip': this.map.targetDescription[i], + 'data-simpletipposition': 'right', + 'data-simpletip-class': 'bluetip medium-width theme-light-forced' + }); + } + } + + mBroadcaster.once('contextmenuclose', () => { + + $('.onboarding-highlight-dot', targetSelector).parent().removeClass('simpletip') + .removeAttr('data-simpletip data-simpletipposition data-simpletip-class'); + + $('.onboarding-highlight-dot', targetSelector).remove(); + + if (this.map.markComplete) { + this.parentStep.markDone(); + } + + this.parentStep.toNextAction(); + }); + }); + } + + showExtDialog() { + + this.$dialog = $(this.map.targetElmClass); + this.parentStep.markDone(); + + if (typeof this.map.dialogInitFunc === 'function') { + this.map.dialogInitFunc(); + } + else { + safeShowDialog('onboardingDialog', this.$dialog); + } + + mBroadcaster.once('closedialog', this.parentStep.toNextAction.bind(this.parentStep)); + } + } + + mega.ui.onboarding = new OnboardV4(obMap, flagMap); + mega.ui.onboardingFlags = OBV4_FLAGS; + + return 0xDEAD; +}); + +/** + * Generic functions for SMS verification on mobile + */ +var sms = { + + /**A flag which if set updates the UI if they arrived from the login, suspended account flow */ + isSuspended: false, + + /** + * Initialise the Close icon/button to close the dialog + */ + initDialogCloseButton: function($dialog, $background) { + + 'use strict'; + + var $closeButton = $('button.js-close, .js-not-now-button', $dialog); + + // If they are suspended, don't show the close icon/button so they can't do anything else + if (this.isSuspended) { + $closeButton.addClass('hidden'); + } + else { + // On Close button tap + $closeButton.rebind('click', () => { + $dialog.addClass('hidden'); + $background.addClass('hidden'); + }); + } + }, + + /** + * Update the language advertisement string 'Get 20 GB storage and 40 GB transfer quota for free when you...' with + * the details from the API. If a non-achievement account, a different text will be rendered. + * @param {Object} $textField The text field to be updated + */ + renderAddPhoneText: function($textField) { + + 'use strict'; + + // Fetch all account data from the API + M.accountData(function() { + + // Hide the loading dialog after request completes + loadingDialog.hide(); + + // Set string for non achievement account + var langString = l[20411]; // Verifying your mobile will make it easier for your contacts to find you... + + // M.maf is cached in its getter, however, repeated gets will cause unnecessary checks. + var ach = M.maf; + sms.achievementUsed = ach && ach[9] && ach[9].rwd; + + // Make sure they are on an achievement account and not used, maf will be calculated once. + if (typeof M.account.maf !== 'undefined' && !sms.achievementUsed) { + // Convert storage and bandwidth to 'x GB' + var bonuses = M.account.maf.u; + var storage = bonuses[9][0]; + var transfer = bonuses[9][1]; + var storageQuotaFormatted = bytesToSize(storage, 0, 3); + var transferQuotaFormatted = bytesToSize(transfer, 0, 3); + + // Update string to 'Get 20 GB storage and 40 GB transfer quota for free when you add your phone...' + langString = l[20210].replace('%1', storageQuotaFormatted).replace('%2', transferQuotaFormatted); + } + + // Update the page text + $textField.text(langString); + + }, true); + }, + + /** + * Reset the phone input form in the dialog if needs + * @param {Object} $dialog The dialog of phone verification + * @returns {void} + */ + resetPhoneInputForm: function($dialog) { + + 'use strict'; + + const $phoneInputPage = $('form.js-phone-input-page', $dialog); + if ($phoneInputPage.length > 0) { + // Reset the phone input page form + $('.verify-ph-country .js-country-list .option', $phoneInputPage).removeClass('active') + .attr('data-state', ''); + $('.verify-ph-country span', $phoneInputPage).text(l[996]); + $('.js-phone-input', $phoneInputPage).val(''); + } + } +}; + +/** + * Functions for the SMS phone number input page + */ +sms.phoneInput = { + + /** The container dialog with the HTML for all the pages/screens */ + $dialog: null, + + /** The background overlay for the dialog */ + $background: null, + + /** The current page/screen in the flow */ + $page: null, + + /** The country name of the phone number */ + countryName: null, + + /** The two letter country code e.g. AU, CA, NZ, UK, US */ + countryIsoCode: null, + + /** The country international calling code from the previous page */ + countryCallCode: null, + + /** The phone number from the previous page */ + phoneNumber: null, + + /** + * Initialise the page + * @param {Boolean|undefined} isSuspended Sets a flag if the user was suspended and is coming from login flow + */ + init: function(isSuspended) { + + 'use strict'; + + // Cache the page + this.$dialog = $('.mega-dialog.verify-phone'); + this.$background = $('.fm-dialog-overlay'); + this.$page = $('.js-phone-input-page'); + + // Set suspended flag + if (isSuspended) { + sms.isSuspended = true; + } + + // Clear the phone input form if open the SMS dialog initially, + // exceptional case is back from clicking back button on the verify code page. + if (this.$dialog.hasClass('hidden')) { + sms.resetPhoneInputForm(this.$dialog); + } + + // Init functionality + this.initDisplay(); + this.buildListOfCountries(); + this.initCountryPicker(); + this.initChangeAndKeyupHandler(); + this.initSendSmsButton(); + + // Initialise the close button if applicable + sms.initDialogCloseButton(this.$dialog, this.$background); + + // Show the page + this.$dialog.removeClass('hidden'); + this.$background.removeClass('hidden').off('click'); + this.$page.removeClass('hidden'); + }, + + /** + * Initalise the text of the page depending on the way they arrived at the page + */ + initDisplay: function() { + + 'use strict'; + + var $dialog = this.$dialog; + var $headerText = $('.js-header-text', $dialog); + var $allPages = $('form', $dialog); + var $allFooters = $('.footer-container', $dialog); + var $verifyIcon = $('.verify-ph-icon', $dialog); + var $verifySuccessIcon = $('.verify-ph-success-icon', $dialog); + var $bodyText = $('.js-body-text', this.$page); + var $warningMessage = $('.js-warning-message', this.$page); + var megaInput = new mega.ui.MegaInputs($('.js-phone-input', $dialog)); + + // If coming from the login process where their account was suspended + if (sms.isSuspended) { + + // Hide buttons using the class and change the text + $dialog.addClass('suspended'); + $headerText.text(l[20212]); + $bodyText.text(l[20209]); + } + else { + // Otherwise must be coming from the achievement add phone process + $headerText.text(l[20211]); + + // Set the xGB storage and xGB transfer quota text + sms.renderAddPhoneText($bodyText); + } + + // Hide any previous pages and warnings if returning + $allPages.addClass('hidden'); + $allFooters.addClass('hidden'); + $warningMessage.removeClass('visible'); + $verifyIcon.removeClass('hidden'); + $verifySuccessIcon.addClass('hidden'); + $('aside.js-verify-success-page', $dialog).addClass('hidden'); + loadingInitDialog.hide('force'); + }, + + /** + * Fill the country picker dialog with a list of countries + */ + buildListOfCountries: function() { + + 'use strict'; + + var $countryList = $('.js-country-list'); + var $countryItemTemplate = $('.option.template', $countryList); + + if ($('.dropdown-scroll .option', $countryList).length > 1) { + return; + } + + var countryOptions = ''; + + // Build list of countries + $.each(M.getCountries(), function(isoCode, countryName) { + + // Clone the template + var $countryItem = $countryItemTemplate.clone().removeClass('template'); + + // Get the country calling code e.g. 64 for NZ + var countryCallCode = M.getCountryCallCode(isoCode); + + // Default option text is format: New Zealand (+64) + var optionText = countryName + ' (+' + countryCallCode + ')'; + + // If in Arabic it will be: 0064 New Zealand + if (lang === 'ar') { + optionText = countryName + ' 00' + countryCallCode; + } + + // Create the option and set the ISO code and country name + $countryItem.attr('data-country-iso-code', isoCode); + $countryItem.attr('data-country-name', countryName); + $countryItem.attr('data-country-call-code', countryCallCode); + $countryItem.val(isoCode); + $countryItem.text(optionText); + + // Append the HTML to the list of options + countryOptions += $countryItem.prop('outerHTML'); + }); + + // Render the countries + $('.dropdown-scroll', $countryList).safeAppend(countryOptions); + }, + + /** + * Initialise the country picker dialog to open on clicking the text input + */ + initCountryPicker: function() { + + 'use strict'; + + var $countrySelect = $('.verify-ph-country', this.$page); + var $countryDropdown = $('.js-country-list', $countrySelect); + + // Initialise with jQueryUI selectmenu + bindDropdownEvents($countrySelect); + + // On select of the country in the picker + $('.option', $countryDropdown).rebind('click.countryselect', function() { + + // Get the country call code and name + var $this = $(this); + var countryIsoCode = $this.attr('data-country-iso-code'); + var countryCallCode = M.getCountryCallCode(countryIsoCode); + var countryName = M.getCountryName(countryIsoCode); + var $selectMenuText = $('> span', $countrySelect); + + // Check that they didn't pick the blank option at the top + if (typeof countryCallCode !== 'undefined') { + + // Put the call code first because of long country names + $selectMenuText.text('(+' + countryCallCode + ') ' + countryName); + } + else { + // Reset back to default state if blank option clicked + $selectMenuText.text(l[481]); + } + }); + }, + + /** + * Initialise keyup handler to the select menu and input so the button gets enabled if everything is completed + */ + initChangeAndKeyupHandler: function() { + + 'use strict'; + + var $countrySelector = $('.js-country-list', this.$page); + var $phoneInput = $('.js-phone-input', this.$page); + var $sendButton = $('.js-send-sms-button', this.$page); + var $warningMessage = $('.js-warning-message', this.$page); + + var toggleButtonState = function() { + let hideErrorMsg = true; + const $countrySelect = $('.option[data-state="active"]', $countrySelector); + const phoneInputEntered = $phoneInput.val(); + const countryCallCode = $countrySelect.attr('data-country-call-code'); + const stripedPhNum = M.stripPhoneNumber(countryCallCode, phoneInputEntered); + const formattedPhoneNumber = `+${countryCallCode}${stripedPhNum}`; + const validateResult = M.validatePhoneNumber(phoneInputEntered, countryCallCode); + + // If the fields are completed enable the button + if ($countrySelect.length && $countrySelect.attr('data-country-iso-code').length > 1 + && validateResult + && formattedPhoneNumber !== u_attr.smsv) { + $sendButton.removeClass('disabled'); + } + else { + // Otherwise disable the button + $sendButton.addClass('disabled'); + + if (phoneInputEntered.length && !validateResult) { + $warningMessage.addClass('visible').text(l.err_invalid_ph); // Phone format invalid + hideErrorMsg = false; + } + } + + if (hideErrorMsg) { + // Hide old error message + $warningMessage.removeClass('visible'); + } + }; + + // Add handlers to enable/disable button + $('.option', $countrySelector).rebind('click.toggleVerifyButton', function() { + toggleButtonState(); + }); + + $phoneInput.rebind('keyup.toggleVerifyButton', function() { + toggleButtonState(); + }); + + // Prevent input of invalid chars + $phoneInput.rebind('keypress.filterkeys', function(event) { + + var inputChar = String.fromCharCode(event.which); + + toggleButtonState(); + + // If not an integer, prevent input from being entered + if (!/[0-9]/.test(inputChar)) { + event.preventDefault(); + } + }); + }, + + /** + * Initialise the Send button to send a verification SMS to the user's phone + */ + initSendSmsButton: function() { + + 'use strict'; + + var $countrySelector = $('.js-country-list', this.$page); + var $phoneInput = $('.js-phone-input', this.$page); + var $sendButton = $('.js-send-sms-button', this.$page); + var $warningMessage = $('.js-warning-message', this.$page); + + var sendSMSToPhone = function() { + var phoneNum = $phoneInput.val(); + var $selectedOption = $('.option[data-state="active"]', $countrySelector); + var countryCallingCode = $selectedOption.attr('data-country-call-code'); + + // Strip hyphens and whitespace, remove trunk code. + // e.g. NZ 021-1234567 => 2112345567 + phoneNum = M.stripPhoneNumber(countryCallingCode, phoneNum); + + const formattedPhoneNumber = `+${countryCallingCode}${phoneNum}`; + const validatedFormattedPhoneNumber = M.validatePhoneNumber(formattedPhoneNumber); + + if (!validatedFormattedPhoneNumber) { + $sendButton.addClass('disabled'); + $warningMessage.addClass('visible').text(l.err_invalid_ph); // Phone format invalid + return false; + } + + // Get the phone number details + var countryName = $selectedOption.attr('data-country-name'); + var countryCode = $selectedOption.attr('data-country-iso-code'); + + // Prepare request + var apiRequest = { a: 'smss', n: validatedFormattedPhoneNumber }; + + // Add debug mode to test reset of the phone number so can be re-used (staging API only) + if (localStorage.smsDebugMode) { + apiRequest['to'] = 1; + } + + // Send SMS to the phone + api_req(apiRequest, { + callback: function(apiResult) { + + // Check for errors + if (apiResult === EACCESS) { + $warningMessage.addClass('visible').text(l[20393]); // Your phone number is already verified + $sendButton.addClass('disabled'); + } + else if (apiResult === EEXIST) { + $warningMessage.addClass('visible').text(l[20394]); // Phone already in use by other account + $sendButton.addClass('disabled'); + } + else if (apiResult === ETEMPUNAVAIL) { + $warningMessage.addClass('visible').text(l[20223]); // Too many attempts. Please try in x hours + $sendButton.addClass('disabled'); + } + else if (apiResult < 0) { + $warningMessage.addClass('visible').text(l[47]); // Oops, something went wrong... + $sendButton.addClass('disabled'); + } + else { + // Save the call code and phone number details to re-use on the next page if necessary + sms.phoneInput.countryName = countryName; + sms.phoneInput.countryIsoCode = countryCode; + sms.phoneInput.countryCallCode = countryCallingCode; + sms.phoneInput.phoneNumber = phoneNum; + + // Hide the page + sms.phoneInput.$page.addClass('hidden'); + + // Load verify code page + sms.verifyCode.init(); + } + } + }); + }; + + // On Send button click + $sendButton.rebind('click', () => { + + // Do not proceed the country code/phone is not selected/entered and the button is not active + if ($sendButton.hasClass('disabled')) { + return false; + } + + if (u_attr.smsv === undefined) { + sendSMSToPhone(); + } + else { + // If it's to modify the phone number, have to remove the existing one firstly + accountUI.account.profiles.removePhoneNumber(false).then(() => { + sendSMSToPhone(); + }).catch(dump); + } + }); + } +}; + +/** + * Functions for the SMS code verification page + */ +sms.verifyCode = { + + /** The container dialog with the HTML for all the pages/screens */ + $dialog: null, + + /** The background overlay for the dialog */ + $background: null, + + /** The current page/screen in the flow of the dialog */ + $page: null, + + /** + * Initialise the page + */ + init: function() { + + 'use strict'; + + // Cache the page + this.$dialog = $('.mega-dialog.verify-phone'); + this.$background = $('.fm-dialog-overlay'); + this.$page = $('.js-verify-code-page'); + + // Init functionality + this.initDisplay(); + this.initResendAndBackButton(); + this.initCodeInputHandlers(); + this.initVerifyButton(); + + // Initialise the close button if applicable + sms.initDialogCloseButton(this.$dialog, this.$background); + + // Show the page + this.$dialog.removeClass('hidden'); + this.$background.removeClass('hidden'); + this.$page.removeClass('hidden'); + + // Put the focus in the code input field after its visible + this.$page.find('.js-verification-number-input').trigger('focus'); + }, + + /** + * Set/reset the initial display of the dialog if returning to this screen + */ + initDisplay: function() { + + 'use strict'; + + var $headerText = this.$dialog.find('.js-header-text'); + var $phoneInput = this.$page.find('.js-user-phone-number'); + var $warningMessage = this.$page.find('.js-warning-message'); + var $codeInput = this.$page.find('.js-verification-number-input'); + + // Display full phone number from previous page, hide any previous warnings and clear code entered + $headerText.text(l[20213]); + $phoneInput.text('(+' + sms.phoneInput.countryCallCode + ') ' + sms.phoneInput.phoneNumber); + $warningMessage.removeClass('visible'); + $codeInput.val(''); + }, + + /** + * Initialise the Resend and Back buttons to go back to the previous screen and the phone is pre-filled from state + */ + initResendAndBackButton: function() { + + 'use strict'; + + var $resendButton = this.$page.find('.js-resend-button'); + var $backButton = this.$page.find('.js-back-button'); + + // On Resend/Close button tap + $resendButton.add($backButton).rebind('click', function() { + + // Hide the current page + sms.verifyCode.$page.addClass('hidden'); + + // Load the previous page + sms.phoneInput.init(); + }); + }, + + /** + * Initialise keyup handler to the code input so the button gets enabled if everything is completed + */ + initCodeInputHandlers: function() { + + 'use strict'; + + var $codeInput = this.$page.find('.js-verification-number-input'); + var $verifyButton = this.$page.find('.js-verify-button'); + var $warningMessage = this.$page.find('.js-warning-message'); + + // Add change and keyup handler for changes to code field + $codeInput.rebind('change.validate keyup.validate', function() { + + // If the field has 6 numbers, move cursor out of the input and enable the button + if ($codeInput.val().length === 6) { + $codeInput.blur(); + $verifyButton.removeClass('disabled'); + } + else { + // Otherwise disable the button + $verifyButton.addClass('disabled'); + } + + // Hide old error message + $warningMessage.removeClass('visible'); + }); + + // Add keypress handler to filter out invalid letters etc to only allow numbers + $codeInput.rebind('keypress.filterinvalid', function(event) { + + // Get the entered key + var inputChar = String.fromCharCode(event.which); + + // If not an integer, prevent input from being entered + if (!/[0-9]/.test(inputChar)) { + event.preventDefault(); + } + }); + + // Add click handler to clear the input field and disable the button if it is clicked into again + $codeInput.rebind('click.clearinput', function() { + + $codeInput.val(''); + $verifyButton.addClass('disabled'); + }); + }, + + /** + * Initialise the Verify button to verify the SMS code received and entered by the user + */ + initVerifyButton: function() { + + 'use strict'; + + var $verificationCode = this.$page.find('.js-verification-number-input'); + var $warningMessage = this.$page.find('.js-warning-message'); + var $verifyButton = this.$page.find('.js-verify-button'); + + // On Verify button tap + $verifyButton.rebind('click', function() { + + // Do not process the click if the code is not entered and the button is not active + if ($verifyButton.hasClass('disabled')) { + return false; + } + + // Get the code, format the phone number for sending and set the success message + var verificationCode = $verificationCode.val(); + var phoneNumber = '(+' + sms.phoneInput.countryCallCode + ') ' + sms.phoneInput.phoneNumber; + var successMessage = l[20220].replace('%1', phoneNumber); + + // Send code to the API for verification + api_req({ a: 'smsv', c: verificationCode }, { + callback: function(result) { + + // Check for errors + if (result === EACCESS) { + $warningMessage.addClass('visible').text(l[20223]); + $verifyButton.addClass('disabled'); + } + else if (result === EEXPIRED) { + $warningMessage.addClass('visible').text(l[20224]); + $verifyButton.addClass('disabled'); + } + else if (result === EFAILED) { + $warningMessage.addClass('visible').text(l[20225]); + $verifyButton.addClass('disabled'); + } + else if (result === EEXIST || result === ENOENT) { + $warningMessage.addClass('visible').text(l[20226]); + $verifyButton.addClass('disabled'); + } + else if (result < 0) { + $warningMessage.addClass('visible').text(l[47]); // Oops, something went wrong... + $verifyButton.addClass('disabled'); + } + else { + // Hide the current page + sms.verifyCode.$dialog.addClass('hidden'); + sms.verifyCode.$background.addClass('hidden'); + sms.verifyCode.$page.addClass('hidden'); + + // If they were suspended when they started the process + if (sms.isSuspended) { + + // Show a success dialog then load their account after + msgDialog('info', l[18280], successMessage, false, function() { + + // Reset flag + sms.isSuspended = false; + + // Set the message and phone number to show on the login page + login_txt = successMessage + ' ' + l[20392]; + + // Log out the partially logged in account and + u_logout(true); + loadSubPage('login'); + }); + } + else { + // Show achievement success dialog + sms.verifySuccess.init(); + } + } + } + }); + }); + } +}; + +/** + * Functions for the SMS verification success page (only shown for achievement method) + */ +sms.verifySuccess = { + + /** The container dialog with the HTML for all the pages/screens */ + $dialog: null, + + /** The background overlay for the dialog */ + $background: null, + + /** The current page/screen in the flow */ + $page: null, + + /** + * Initialise the page + */ + init: function() { + + 'use strict'; + + // Cache the page + this.$dialog = $('.mega-dialog.verify-phone'); + this.$background = $('.fm-dialog-overlay'); + this.$page = $('.js-verify-success-page'); + + // Init functionality + this.initDisplay(); + this.renderAchievementDetails(); + this.initCloseButton(); + + // Show the page + this.$dialog.removeClass('hidden'); + this.$background.removeClass('hidden'); + }, + + /** + * Initialise the display of the dialog + */ + initDisplay: function() { + + 'use strict'; + + // Change the dialog's icon to a success icon + this.$dialog.find('.verify-ph-icon').addClass('hidden'); + this.$dialog.find('.verify-ph-success-icon').removeClass('hidden'); + }, + + /** + * Show the storage, transfer quota and number of days + */ + renderAchievementDetails: function() { + + 'use strict'; + + var $page = this.$page; + var $successMessage = $page.find('.js-body-text'); + var $storageAmount = $page.find('.js-storage-quota'); + var $transferAmount = $page.find('.js-transfer-quota'); + var $validDaysText = $('.valid-days-title span', $page); + + // Fetch all account data from the API + M.accountData(function() { + + // Hide the loading dialog after request completes + loadingDialog.hide(); + + $page.removeClass('non-achievement-account'); + + // If this is a non-achievements account + if (typeof M.account.maf === 'undefined' || sms.achievementUsed) { + + // Set the text to 'Your number (+64) 229876543 has been successfully verified...' + var phone = '(+' + sms.phoneInput.countryCallCode + ') ' + sms.phoneInput.phoneNumber; + var successText = l[20220].replace('%1', phone); + + // Show a different success dialog state and text + $successMessage.text(successText); + $page.addClass('non-achievement-account'); + } + else { + // Otherwise if an achievements account, convert storage and bandwidth to 'x GB' + var bonuses = M.account.maf.u; + var storage = bonuses[9][0]; + var transfer = bonuses[9][1]; + var days = bonuses[9][2].replace('d', ''); + var storageQuotaFormatted = bytesToSize(storage, 0); + var transferQuotaFormatted = bytesToSize(transfer, 0); + + // Update the page text + $successMessage.text(l[20404]); // Congratulations! You've just unlocked: + $storageAmount.text(storageQuotaFormatted); + $transferAmount.text(transferQuotaFormatted); + $validDaysText.text(mega.icu.format(l[20407], days)); + } + $page.removeClass('hidden'); + }, true); // Show loading spinner + }, + + /** + * Initialise the OK button to take them back to their account page + */ + initCloseButton: function() { + + 'use strict'; + + var $dialogCloseButton = this.$dialog.find('button.js-close'); + var $pageCloseButton = this.$dialog.find('.js-close-button'); + + // On Close button tap + $dialogCloseButton.add($pageCloseButton).rebind('click', function() { + + loadingDialog.show(); + + // Perform User Get request to get the new added phone number + api_req({ a: 'ug' }, { + callback: function(res) { + + loadingDialog.hide(); + + if (typeof res === 'object' && res.smsv) { + + // Update the SMS Verification (smsv) locally with the user's phone + u_attr.smsv = res.smsv; + + // If not on the account profile page, load it to show the phone number + if (page !== 'fm/account') { + loadSubPage('fm/account'); + } + else { + // Hide the current page + sms.verifySuccess.$dialog.addClass('hidden'); + sms.verifySuccess.$background.addClass('hidden'); + + // Update the UI + accountUI.renderAccountPage(M.account); + loadingDialog.hide(); + } + } + } + }); + }); + } +}; diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/47AA0172BFF00442399283F4FEEBC0B19E44C5B3 b/home/.surf/cache/WebKitCache/Version 16/Blobs/47AA0172BFF00442399283F4FEEBC0B19E44C5B3 new file mode 100644 index 0000000..c7e55fb --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/47AA0172BFF00442399283F4FEEBC0B19E44C5B3 @@ -0,0 +1 @@ +!function(){var e=function(e,t){this.highOrder=e,this.lowOrder=t},t=function(e){var t,s=[],a=8*e.length;for(t=0;t>5]|=(255&e.charCodeAt(t/8))<<24-t%32;return s},s=function(e){var t,s,a=[],i=e.length;for(t=0;t>3]|=s<<24-t%8*4}return a},a=function(e){var t,s,a="0123456789abcdef",i="",n=4*e.length;for(t=0;t>2]>>8*(3-t%4),i+=a.charAt(s>>4&15)+a.charAt(15&s);return i},i=function(e){var t,s,a,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n="",l=4*e.length;for(t=0;t>2]>>8*(3-t%4)&255)<<16|(e[t+1>>2]>>8*(3-(t+1)%4)&255)<<8|e[t+2>>2]>>8*(3-(t+2)%4)&255,s=0;s<4;s+=1)8*t+6*s<=32*e.length?n+=i.charAt(a>>6*(3-s)&63):n+="";return n},n=function(t,s){return s<=32?new e(t.highOrder>>>s|t.lowOrder<<32-s,t.lowOrder>>>s|t.highOrder<<32-s):new e(t.lowOrder>>>s|t.highOrder<<32-s,t.highOrder>>>s|t.lowOrder<<32-s)},l=function(t,s){return s<=32?new e(t.highOrder>>>s,t.lowOrder>>>s|t.highOrder<<32-s):new e(0,t.highOrder<<32-s)},r=function(t,s,a){return new e(t.highOrder&s.highOrder^t.highOrder&a.highOrder^s.highOrder&a.highOrder,t.lowOrder&s.lowOrder^t.lowOrder&a.lowOrder^s.lowOrder&a.lowOrder)},o=function(t){var s=n(t,28),a=n(t,34),i=n(t,39);return new e(s.highOrder^a.highOrder^i.highOrder,s.lowOrder^a.lowOrder^i.lowOrder)},h=function(t){var s=n(t,14),a=n(t,18),i=n(t,41);return new e(s.highOrder^a.highOrder^i.highOrder,s.lowOrder^a.lowOrder^i.lowOrder)},d=function(t){var s=n(t,1),a=n(t,8),i=l(t,7);return new e(s.highOrder^a.highOrder^i.highOrder,s.lowOrder^a.lowOrder^i.lowOrder)},c=function(t){var s=n(t,19),a=n(t,61),i=l(t,6);return new e(s.highOrder^a.highOrder^i.highOrder,s.lowOrder^a.lowOrder^i.lowOrder)},p=function(t,s){var a,i,n;return a=(65535&t.lowOrder)+(65535&s.lowOrder),n=(65535&(i=(t.lowOrder>>>16)+(s.lowOrder>>>16)+(a>>>16)))<<16|65535&a,a=(65535&t.highOrder)+(65535&s.highOrder)+(i>>>16),i=(t.highOrder>>>16)+(s.highOrder>>>16)+(a>>>16),new e((65535&i)<<16|65535&a,n)},u=function(t,s,a,i){var n,l,r;return n=(65535&t.lowOrder)+(65535&s.lowOrder)+(65535&a.lowOrder)+(65535&i.lowOrder),r=(65535&(l=(t.lowOrder>>>16)+(s.lowOrder>>>16)+(a.lowOrder>>>16)+(i.lowOrder>>>16)+(n>>>16)))<<16|65535&n,n=(65535&t.highOrder)+(65535&s.highOrder)+(65535&a.highOrder)+(65535&i.highOrder)+(l>>>16),l=(t.highOrder>>>16)+(s.highOrder>>>16)+(a.highOrder>>>16)+(i.highOrder>>>16)+(n>>>16),new e((65535&l)<<16|65535&n,r)},v=function(t,s,a,i,n){var l,r,o;return l=(65535&t.lowOrder)+(65535&s.lowOrder)+(65535&a.lowOrder)+(65535&i.lowOrder)+(65535&n.lowOrder),o=(65535&(r=(t.lowOrder>>>16)+(s.lowOrder>>>16)+(a.lowOrder>>>16)+(i.lowOrder>>>16)+(n.lowOrder>>>16)+(l>>>16)))<<16|65535&l,l=(65535&t.highOrder)+(65535&s.highOrder)+(65535&a.highOrder)+(65535&i.highOrder)+(65535&n.highOrder)+(r>>>16),r=(t.highOrder>>>16)+(s.highOrder>>>16)+(a.highOrder>>>16)+(i.highOrder>>>16)+(n.highOrder>>>16)+(l>>>16),new e((65535&r)<<16|65535&l,o)},f=function(t,s,a){var i,n,l,f,g,m,_,w,k,b,y,O,$,S,C,D,j,x,F,I=[];for("SHA-384"!==a&&"SHA-512"!==a||(O=31+(s+128>>10<<5),C=[new e(1116352408,3609767458),new e(1899447441,602891725),new e(3049323471,3964484399),new e(3921009573,2173295548),new e(961987163,4081628472),new e(1508970993,3053834265),new e(2453635748,2937671579),new e(2870763221,3664609560),new e(3624381080,2734883394),new e(310598401,1164996542),new e(607225278,1323610764),new e(1426881987,3590304994),new e(1925078388,4068182383),new e(2162078206,991336113),new e(2614888103,633803317),new e(3248222580,3479774868),new e(3835390401,2666613458),new e(4022224774,944711139),new e(264347078,2341262773),new e(604807628,2007800933),new e(770255983,1495990901),new e(1249150122,1856431235),new e(1555081692,3175218132),new e(1996064986,2198950837),new e(2554220882,3999719339),new e(2821834349,766784016),new e(2952996808,2566594879),new e(3210313671,3203337956),new e(3336571891,1034457026),new e(3584528711,2466948901),new e(113926993,3758326383),new e(338241895,168717936),new e(666307205,1188179964),new e(773529912,1546045734),new e(1294757372,1522805485),new e(1396182291,2643833823),new e(1695183700,2343527390),new e(1986661051,1014477480),new e(2177026350,1206759142),new e(2456956037,344077627),new e(2730485921,1290863460),new e(2820302411,3158454273),new e(3259730800,3505952657),new e(3345764771,106217008),new e(3516065817,3606008344),new e(3600352804,1432725776),new e(4094571909,1467031594),new e(275423344,851169720),new e(430227734,3100823752),new e(506948616,1363258195),new e(659060556,3750685593),new e(883997877,3785050280),new e(958139571,3318307427),new e(1322822218,3812723403),new e(1537002063,2003034995),new e(1747873779,3602036899),new e(1955562222,1575990012),new e(2024104815,1125592928),new e(2227730452,2716904306),new e(2361852424,442776044),new e(2428436474,593698344),new e(2756734187,3733110249),new e(3204031479,2999351573),new e(3329325298,3815920427),new e(3391569614,3928383900),new e(3515267271,566280711),new e(3940187606,3454069534),new e(4118630271,4000239992),new e(116418474,1914138554),new e(174292421,2731055270),new e(289380356,3203993006),new e(460393269,320620315),new e(685471733,587496836),new e(852142971,1086792851),new e(1017036298,365543100),new e(1126000580,2618297676),new e(1288033470,3409855158),new e(1501505948,4234509866),new e(1607167915,987167468),new e(1816402316,1246189591)],y="SHA-384"===a?[new e(3418070365,3238371032),new e(1654270250,914150663),new e(2438529370,812702999),new e(355462360,4144912697),new e(1731405415,4290775857),new e(41048885895,1750603025),new e(3675008525,1694076839),new e(1203062813,3204075428)]:[new e(1779033703,4089235720),new e(3144134277,2227873595),new e(1013904242,4271175723),new e(2773480762,1595750129),new e(1359893119,2917565137),new e(2600822924,725511199),new e(528734635,4215389547),new e(1541459225,327033209)]),t[s>>5]|=128<<24-s%32,t[O]=s,D=t.length,$=0;$p/8&&(h[31]&=4294967040),d=0;d<=31;d+=1)v[d]=909522486^h[d],g[d]=1549556828^h[d];return c=f(v.concat(this.strToHash),1024+this.strBinLen,l),o(c=f(g.concat(c),1024+u,l))}},window.jsSHA=g}(),function(e){function t(){var e,t,s=document,a=",maximum-scale=",i=/,*maximum\-scale\=\d*\.*\d*/;function n(s){e.content=t+("blur"==s.type?t.match(i,"")?"":a+10:a+1)}this.addEventListener&&s.querySelector&&(e=s.querySelector('meta[name="viewport"]'),t=e.content,this.addEventListener("focus",n,!0),this.addEventListener("blur",n,!1))}jQuery.fn.cancelZoom=function(){return this.each(t)}}(),function(e){var t,s,a,i=e.Views.Base,n=e.Data.Settings.tabs;t=function(e){this.settings=e.settings,i.call(this,e),this.settings.on("change",u.bind(this)),this.settings.on("change:cloudsave",this._updateCloudSaveBookmarklet.bind(this)),this._renderTab(window.location.hash.replace("#","")),w.addEventListener("hashchange",function(){this._renderTab(window.location.hash.replace("#",""))}.bind(this))},e.Views.Settings.Main=t,t.prototype=$.extend({},i.prototype,{template:"settings_main",_render:function(){i.prototype._render.call(this,{tabs:n}),this.$detail=this.$(".js-set-detail"),this.views.cloudsave=new e.Views.Settings.CloudSave({settings:this.settings,before:this.$(".js-set-bookmarklet")}),this._cacheElems(".js-set",["head-tab","exit","bookmarklet-expand","bookmarklet-close","bookmarklet-detail","bookmarklet-json","bookmarklet-url","bookmarklet-cookie","bookmarklet-cs-label","bookmarklet-cs-url","reset-msg","reset-expand","reset-confirm","reset-cancel","reset-detail"]),this.$headtab.click(r.bind(this)),this.$bookmarkletexpand.click(c.bind(this)),this.$bookmarkletclose.click(p.bind(this)),this.$resetexpand.click(o.bind(this)),this.$resetconfirm.click(h.bind(this)),this.$resetcancel.click(d.bind(this)),this.$exit.click(v.bind(this)),this._updateBookmarkletData(),this._updateCloudSaveBookmarklet()},_renderTab:function(t){t&&n.some((function(e){return e.id===t}))||(t="general"),this.views.tab&&(this.$(".js-set-head-tab.is-active").removeClass("is-active"),this.views.tab.destroy(),this.$detail.empty(),delete this.views.tab),this.$(".js-set-"+t).addClass("is-active"),s=new e.Views.Settings.BooleanFormField({id:"kaz",settings:e.settings,data:e.settings.getData("kaz"),appendTo:this.$detail}),this.$detail.append('
          '),a=$("#kaz-hr"),this.views.tab=new e.Views.Settings.Tab({tabId:t,settings:this.settings,appendTo:this.$detail}),f()},_updateBookmarkletData:function(){this.$bookmarkletjson.text(JSON.stringify(this.settings.toJSON())),this.$bookmarkleturl.val(this.settings.toBookmarkletURL()),this.$bookmarkletcookie.text(document.cookie)},_updateCloudSaveBookmarklet:function(){var e=this.settings.getCloudSaveKey()?"removeClass":"addClass";this.$bookmarkletcslabel[e]("is-hidden"),this.$bookmarkletcsurl[e]("is-hidden"),this.$bookmarkletcsurl.val(this.settings.toCloudSaveBookmarkletURL())}});var l=function(){this.$resetexpand.removeClass("is-hidden"),this.$resetdetail.addClass("is-hidden")},r=function(t){t.preventDefault();var s=$(t.target).attr("data-tabid"),a="settings#";e.device.isMobileDevice&&(e.device.isAndroid||e.device.isIDevice)&&e.device.isDDGApp&&[-1,-2].includes(parseInt(e.settings.get("ko"),10))&&(a="settings?ko=-1#"),w.history.replaceState(w.history.state,"",a+s),this._renderTab(s),f()},o=function(){this.$resetmsg.text(this.settings.getCloudSaveKey()?lp("settings","This will reset your saved settings to default values. Continue?"):lp("settings","This will erase all settings. Continue?")),this.$resetexpand.addClass("is-hidden"),this.$resetdetail.removeClass("is-hidden")},h=function(){var e=!this.settings.isDefault(this.settings.LANGUAGE_KEY);this.settings.clearAll({fromUser:!0}),this.settings.saveToCloud((function(){e&&window.location.reload()})),f(),l.call(this)},d=function(){l.call(this)},c=function(){this.$bookmarkletexpand.addClass("is-hidden"),this.$bookmarkletdetail.removeClass("is-hidden")},p=function(e){e.preventDefault(),this.$bookmarkletexpand.removeClass("is-hidden"),this.$bookmarkletdetail.addClass("is-hidden")},u=function(t){this._updateBookmarkletData(),"kp"===t&&e.pixel.fire("sss","s",{v:this.settings.get("kp")}),f()},v=function(e){e.preventDefault(),w.history.back()},f=function(){var t=$("#setting_kaf"),i=$("#setting_kai"),n=$('#setting_kaf option[value="b"]'),l=$('#setting_kai option[value="a"]');e.page.canShowSerpUxExp()?(s.$el.show(),a.show(),n.length||(t.prepend($('')),t.val("b")),l.length||(i.prepend($('')),i.val("a"))):(n.remove(),l.remove(),s.$el.hide(),a.hide(),t.val()&&"b"!==t.val()||t.val("s"),i.val()&&"a"!==i.val()||i.val("b"))}}(DDG),function(e){var t,s=e.Views.Base,a="frm__hr";e.Views.Settings.Tab=t=function(t){this.tabId=t.tabId,this.settings=t.settings,this.tab=e.findInArray(e.Data.Settings.tabs,"id",this.tabId),s.call(this,t)},t.prototype=$.extend({},s.prototype,{template:"settings_tab",_render:function(){s.prototype._render.call(this,{id:this.tabId}),this.fields=[];for(var t=0;t
          ");else{var r=this.$el.children()?this.$el.children().last():null;!!r&&r.hasClass(a)||this.$el.append('
          ')}}}})}(DDG),function(e){var t,s=e.Views.Base;e.Views.Settings.FormField=t=function(e){this.settings=e.settings,this.id=e.id,this.data=e.data,this.data.fieldId="setting_"+this.id,this.data.breakOnSmallScreens=this.data.type.match(/^dropdown|dropdowncustom$/),this.data[this.data.type]=!0,this.source=e.source,s.call(this,e),this.settings&&this._updateState()},t.prototype=$.extend({},s.prototype,{template:"settings_field",destroy:function(){this.settings&&this.settings.off("change:"+this.id,this._onSettingChangeFn),s.prototype.destroy.call(this)},getFromDOM:function(){return this.$fld.val()},setToDOM:function(e){this.$fld.val(e)},_render:function(){s.prototype._render.call(this,this.data),this.$fld=this.$(".js-set-input"),this.$fld.change(this._onFormFieldChange.bind(this)),is_mobile_device&&this.$fld.cancelZoom(),this.settings&&(this._onSettingChangeFn=this._updateState.bind(this),this.settings.on("change:"+this.id,this._onSettingChangeFn))},_updateState:function(){this.setToDOM(this.settings.get(this.id))},_updateSetting:function(t,s){this.settings&&this.settings.set(this.id,t,{saveToCloud:!0,forceTheme:!0},s),this.source&&e.pixel.fire("set",this.source,this.id),this.emit("change",t)},_onFormFieldChange:function(){var t=this;if(this._updateSetting(this.getFromDOM(),(function(){t.id===t.settings.LANGUAGE_KEY?window.location.reload():t.id===e.addToBrowser.BADGE_DISMISS_KEY&&"-1"==t.getFromDOM()?t.settings.set(e.addToBrowser.BADGE_RECURRING_KEY,"-1"):t.id===e.addToBrowser.NEWSLETTER_DISMISS_KEY&&"-1"==t.getFromDOM()&&t.settings.set(e.addToBrowser.NEWSLETTER_RECURRING_KEY,"-1")})),"kaz"===t.id){var s=this.settings.get("kaz"),a=this.settings.themes.getSettingsForTheme(this.settings.get("kae")).kx;"-1"===s?(this.settings.set("kaf","s"),this.settings.set("kai","b"),this.settings.set("kx",a||"3f6e35")):"1"===s&&(this.settings.clear("kaf"),this.settings.clear("kai"),this.settings.clear("kx"),this.settings.set("kx",a,{saveToCookie:!1}))}}})}(DDG),function(e){var t,s=e.Views.Settings.FormField;e.Views.Settings.BooleanFormField=t=function(e){s.call(this,e)},t.prototype=$.extend({},s.prototype,{getFromDOM:function(){var e=this.$fld.prop("checked")?"1":"-1";return this.data.values&&(e=this.data.values[e]),e},setToDOM:function(e){if(this.data.values)for(var t in this.data.values){if(e===this.data.values[t]){e=t;break}}isNaN(parseInt(e,10))&&(e=1),this.$fld.prop("checked","1"==e);var s="1"==e?"addClass":"removeClass";this.$el[s]("is-checked")}})}(DDG),function(e){var t,s=e.Views.Settings.FormField;e.Views.Settings.ColorFormField=t=function(e){this._onResizeFn=r.bind(this),s.call(this,e)},t.prototype=$.extend({},s.prototype,{destroy:function(){this._hideColorPicker(),s.prototype.destroy.call(this)},setToDOM:function(e){var t=tinycolor(e),s=t.isValid()&&t.toHexString()||"#fff";this.$swatch||(this.$swatch=this.$(".js-set-color-swatch")),this.$swatch.css({backgroundColor:s}),this.cp&&this.cp.setColor(s),this.$fld.val(s)},_render:function(){s.prototype._render.call(this),this.$el.on("click",i.bind(this))},_showColorPicker:function(){this.cp=new e.Views.Settings.ColorPicker({appendTo:$("body")}),this.cp.on("change",n.bind(this)),this.cp.on("hide",l.bind(this)),this.cp.show($.extend({color:this.settings.get(this.id)},a.call(this))),e.device.on("resize",this._onResizeFn)},_hideColorPicker:function(){this.settings.saveToCloud(),this.cp&&this.cp.destroy(),delete this.cp,e.device.off("resize",this._onResizeFn)}});var a=function(){var e=this.$fld.offset();return{top:e.top+this.$fld.outerHeight()/2-this.cp.height/2,left:e.left-this.cp.width-15}},i=function(){this.cp?this._hideColorPicker():this._showColorPicker()},n=function(e){this.$fld.val(e),this._onFormFieldChange()},l=function(){this._hideColorPicker()},r=function(){this.cp&&this.cp.position(a.call(this))}}(DDG),function(e){var t,s=e.Views.Settings.FormField;e.Views.Settings.ThumbnailFormField=t=function(e){s.call(this,e)},t.prototype=$.extend({},s.prototype,{getFromDOM:function(){return this.$("input:checked").val()},setToDOM:function(e){this.$("input:checked").prop("checked"),this.$(".is-checked").removeClass("is-checked");var t=this.$("#"+this.data.fieldId+"_"+e);t.prop("checked",!0),t.parent().addClass("is-checked")},_render:function(){s.prototype._render.call(this);var e=this;this.$("label").click((function(t){t.preventDefault();var s=$(this).attr("data-theme-id");e._updateSetting(s)}))}})}(DDG),function(e){var t,s=e.Views.Settings.FormField;e.Views.Settings.CompositeFormField=t=function(e){s.call(this,e)},t.prototype=$.extend({},s.prototype,{template:"settings_composite_field",destroy:function(){for(var e=0;e= 1.0.0"],i=i||{};var n,l="";return l+='c

          ',((n=(s=this.merge(s,e.helpers)).l.call(t,"Cloud Save",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"settings","Save your settings anonymously to the cloud",{hash:{},data:i}))||0===n)&&(l+=n),l+='

          ',((n=s.l.call(t,"What is this?",{hash:{},data:i}))||0===n)&&(l+=n),l+='
          ',((n=s.l.call(t,"Save Settings",{hash:{},data:i}))||0===n)&&(l+=n),l+='',((n=s.l.call(t,"Load Settings",{hash:{},data:i}))||0===n)&&(l+=n),l+="
          "})),this.DDG.templates.settings_cloudsave_enabled=Handlebars.template((function(e,t,s,a,i){this.compilerInfo=[4,">= 1.0.0"],i=i||{};var n,l="";return l+='c

          ',((n=(s=this.merge(s,e.helpers)).lp.call(t,"cloudsave","Cloud Save Enabled",{hash:{},data:i}))||0===n)&&(l+=n),l+='

          ',((n=s.l.call(t,"Disable",{hash:{},data:i}))||0===n)&&(l+=n),l+='',((n=s.l.call(t,"Delete My Data",{hash:{},data:i}))||0===n)&&(l+=n),l+="
          "})),this.DDG.templates.settings_cloudsave_faq=Handlebars.template((function(e,t,s,a,i){this.compilerInfo=[4,">= 1.0.0"],i=i||{};var n,l="";return l+='
          X
          c

          ',((n=(s=this.merge(s,e.helpers)).lp.call(t,"cloudsave","Cloud Save FAQ",{hash:{},data:i}))||0===n)&&(l+=n),l+='

          ',((n=s.lp.call(t,"cloudsave","Cloud Save lets you save your settings more permanently by entering a passphrase. It is entirely optional.",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","This has a few benefits:",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          • ",((n=s.lp.call(t,"cloudsave","You can share your settings among computers and browsers.",{hash:{},data:i}))||0===n)&&(l+=n),l+="
          • ",((n=s.lp.call(t,"cloudsave","You can restore your settings after deleting cookies.",{hash:{},data:i}))||0===n)&&(l+=n),l+="
          • ",((n=s.lp.call(t,"cloudsave","You can store several sets of settings for different purposes.",{hash:{},data:i}))||0===n)&&(l+=n),l+="
          ",((n=s.lp.call(t,"cloudsave","What information gets saved?",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","Only the settings that you have changed. They are detailed on the %sURL Parameters%s page.",'',"",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","How does it work?",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","Your passphrase generates a 512-bit key by using the Secure Hash Algorithm known as %sSHA-2%s. Only the key and associated settings file leave your browser. We save the settings file using the key as the name. DuckDuckGo never knows your passphrase.",'',"",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","In the interest of transparency, this data is not encrypted: You can see exactly what information we store.",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","What is the Cloud Save bookmarklet and how does it differ from the URL parameter bookmarklet?",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","The Cloud Save bookmarklet allows any changes you make to your settings to automatically save in the cloud.",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","How is it anonymous?",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","We don't store usernames or any personally identifiable information.",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","How does passphrase generation work?",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","Each time you ask for a passphrase suggestion, we receive a long list of random words from the DuckDuckGo servers. In the browser, we then select 4-5 random words from that list, ensuring that the passphrase is at least 18-20 characters long.",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","It’s easier to remember 4-5 words than 10 random letters and numbers, and far more secure.",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","How do I change my passphrase?",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","You can do this by saving your settings under a different passphrase, optionally deleting the first set.",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          1. ",((n=s.lp.call(t,"cloudsave","Enable Cloud Save by entering your existing passphrase.",{hash:{},data:i}))||0===n)&&(l+=n),l+="
          2. ",((n=s.lp.call(t,"cloudsave","Click or tap %sDelete My Data%s. This removes the data from the cloud, but it remains in your browser until you click/tap %sReset All Settings%s.","","","","",{hash:{},data:i}))||0===n)&&(l+=n),l+="
          3. ",((n=s.lp.call(t,"cloudsave","Enter a new passphrase and click/tap %sSave Settings%s. This will save your data under your new passphrase.","","",{hash:{},data:i}))||0===n)&&(l+=n),l+="
          ",((n=s.lp.call(t,"cloudsave","I forgot my passphrase. Can you recover it?",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","Passphrases cannot be recovered as we don't associate your IP address, browser fingerprint, or any other information with the file.",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","Is deleted data really deleted?",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","Yes, we throw away data when you’re done with it, and it cannot be recovered.",{hash:{},data:i}))||0===n)&&(l+=n),l+="

          ",((n=s.lp.call(t,"cloudsave","See also",{hash:{},data:i}))||0===n)&&(l+=n),l+='
          "})),this.DDG.templates.settings_cloudsave_load=Handlebars.template((function(e,t,s,a,i){this.compilerInfo=[4,">= 1.0.0"],i=i||{};var n,l="";return l+='
          X
          c

          ',((n=(s=this.merge(s,e.helpers)).lp.call(t,"cloudsave","Load Cloud Settings",{hash:{},data:i}))||0===n)&&(l+=n),l+='

          ',((n=s.lp.call(t,"settings","Show Passphrase",{hash:{},data:i}))||0===n)&&(l+=n),l+='',((n=s.lp.call(t,"settings","Hide Passphrase",{hash:{},data:i}))||0===n)&&(l+=n),l+='

          '})),this.DDG.templates.settings_cloudsave_save=Handlebars.template((function(e,t,s,a,i){this.compilerInfo=[4,">= 1.0.0"],i=i||{};var n,l="";return l+='
          X
          c

          ',((n=(s=this.merge(s,e.helpers)).lp.call(t,"settings","Save Cloud Settings",{hash:{},data:i}))||0===n)&&(l+=n),l+='

          ',((n=s.lp.call(t,"settings","Suggest a Passphrase",{hash:{},data:i}))||0===n)&&(l+=n),l+='

          '})),this.DDG.templates.settings_cloudsave=Handlebars.template((function(e,t,s,a,i){return this.compilerInfo=[4,">= 1.0.0"],s=this.merge(s,e.helpers),i=i||{},'
          '})),this.DDG.templates.settings_colorpicker=Handlebars.template((function(e,t,s,a,i){return this.compilerInfo=[4,">= 1.0.0"],s=this.merge(s,e.helpers),i=i||{},'
          '})),this.DDG.templates.settings_field=Handlebars.template((function(e,t,s,a,i){this.compilerInfo=[4,">= 1.0.0"],s=this.merge(s,e.helpers),i=i||{};var n,l="",r="function",o=this.escapeExpression,h=this;function d(e,t){var a;return(a=s.if.call(e,null==(a=e&&e.value)||!1===a?a:a.name,{hash:{},inverse:h.program(5,p,t),fn:h.program(3,c,t),data:t}))||0===a?a:""}function c(e,t){var a,i="";return i+='"}function p(e,t){var a,i="";return i+='"}function u(e,t){return"frm__desc--break-xs"}function v(e,t){var a;return(a=s.unless.call(e,null==(a=e&&e.value)||!1===a?a:a.suppress,{hash:{},inverse:h.noop,fn:h.program(22,f,t),data:t}))||0===a?a:""}function f(e,t){var a,i="";return i+='"}return l+='
          ',n=s.if.call(t,t&&t.dropdown,{hash:{},inverse:h.noop,fn:h.program(1,(function(e,t){var a,i="";return i+='
          "}),i),data:i}),(n||0===n)&&(l+=n),n=s.if.call(t,t&&t.dropdowncustom,{hash:{},inverse:h.noop,fn:h.program(7,(function(e,t){var a,i="";return i+='
          '}),i),data:i}),(n||0===n)&&(l+=n),n=s.if.call(t,t&&t.boolean,{hash:{},inverse:h.noop,fn:h.program(9,(function(e,t){var a;return(a=s.include.call(e,"onoffswitch",{hash:{id:e&&e.fieldId,className:"js-set-input"},data:t}))||0===a?a:""}),i),data:i}),(n||0===n)&&(l+=n),n=s.if.call(t,t&&t.clear,{hash:{},inverse:h.noop,fn:h.program(11,(function(e,t){var a,i="";return i+='
          "}),i),data:i}),(n||0===n)&&(l+=n),n=s.if.call(t,t&&t.color,{hash:{},inverse:h.noop,fn:h.program(13,(function(e,t){var s,a="";return a+='
          '}),i),data:i}),(n||0===n)&&(l+=n),n=s.unless.call(t,t&&t.hideTitle,{hash:{},inverse:h.noop,fn:h.program(15,(function(e,t){var a,i="";return i+='

          ',((a=s.lp.call(e,"settings",e&&e.name,{hash:{},data:t}))||0===a)&&(i+=a),i+="

          "}),i),data:i}),(n||0===n)&&(l+=n),n=s.if.call(t,t&&t.desc,{hash:{},inverse:h.noop,fn:h.program(17,(function(e,t){var a,i="";return i+='

          ',((a=s.lp.call(e,"settings",e&&e.desc,e&&e.desc2,e&&e.desc3,{hash:{},data:t}))||0===a)&&(i+=a),i+="

          "}),i),data:i}),(n||0===n)&&(l+=n),n=s.if.call(t,t&&t.thumbnail,{hash:{},inverse:h.noop,fn:h.program(20,(function(e,t){var a,i="";return i+='
          ',((a=s.keys.call(e,e&&e.values,{hash:{},inverse:h.noop,fn:h.program(21,v,t),data:t}))||0===a)&&(i+=a),i+="
          "}),i),data:i}),(n||0===n)&&(l+=n),l+="
          "})),this.DDG.templates.settings_main=Handlebars.template((function(e,t,s,a,i){this.compilerInfo=[4,">= 1.0.0"],s=this.merge(s,e.helpers),i=i||{};var n,l="",r="function",o=this.escapeExpression;return l+='

          ',((n=s.lp.call(t,"settings pages","All Settings",{hash:{},data:i}))||0===n)&&(l+=n),l+='

          ',n=s.each.call(t,t&&t.tabs,{hash:{},inverse:this.noop,fn:this.program(1,(function(e,t){var a,i="";return i+='',((a=s.l.call(e,e&&e.name,{hash:{},data:t}))||0===a)&&(i+=a),i+=""}),i),data:i}),(n||0===n)&&(l+=n),l+='
          ',((n=s.lp.call(t,"setting","Show Bookmarklet and Settings Data",{hash:{},data:i}))||0===n)&&(l+=n),l+='
          ',((n=s.lp.call(t,"cloudsave","Reset All Settings",{hash:{},data:i}))||0===n)&&(l+=n),l+='
          '})),this.DDG.templates.settings_tab=Handlebars.template((function(e,t,s,a,i){this.compilerInfo=[4,">= 1.0.0"],s=this.merge(s,e.helpers),i=i||{};var n,l="";return l+='
          '})),this.DDG.templates.settings_theme=Handlebars.template((function(e,t,s,a,i){this.compilerInfo=[4,">= 1.0.0"],s=this.merge(s,e.helpers),i=i||{};var n,l="",r="function",o=this.escapeExpression,h=this;function d(e,t){var a,i="";return i+='
          "}return l+='
          ',n=s.keys.call(t,t&&t.values,{hash:{},inverse:h.noop,fn:h.program(1,(function(e,t){var a;return(a=s.unless.call(e,null==(a=e&&e.value)||!1===a?a:a.suppress,{hash:{},inverse:h.noop,fn:h.program(2,d,t),data:t}))||0===a?a:""}),i),data:i}),(n||0===n)&&(l+=n),l+="
          "})); \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/48B4415DB9BD592BFDE1B3118A49D7FD382279BC b/home/.surf/cache/WebKitCache/Version 16/Blobs/48B4415DB9BD592BFDE1B3118A49D7FD382279BC new file mode 100644 index 0000000..4e87542 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/48B4415DB9BD592BFDE1B3118A49D7FD382279BC differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/49EE0F1631F099F969E3935C56A2F636444BBB92 b/home/.surf/cache/WebKitCache/Version 16/Blobs/49EE0F1631F099F969E3935C56A2F636444BBB92 new file mode 100644 index 0000000..cf9032f Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/49EE0F1631F099F969E3935C56A2F636444BBB92 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/4A83DFE5E781E191DA48A1B0DED74DE98F992B84 b/home/.surf/cache/WebKitCache/Version 16/Blobs/4A83DFE5E781E191DA48A1B0DED74DE98F992B84 new file mode 100644 index 0000000..bd44efc --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/4A83DFE5E781E191DA48A1B0DED74DE98F992B84 @@ -0,0 +1,17 @@ +function _toConsumableArray(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}define("core/utils/getEmbeddedData",[],function(){"use strict";return function(a){var b=window.document.getElementById("disqus-"+a);try{return b&&JSON.parse(b.textContent||b.innerHTML)}catch(c){return null}}}),define("core/utils/cookies",[],function(){"use strict";var a={_doc:window.document,create:function(b,c,d){d||(d={});var e=b+"="+c+"; path="+(d.path||"/"),f=d.domain,g=d.expiresIn;if(f&&(e+="; domain=."+f),"[object Number]"===Object.prototype.toString.call(g)){var h=new Date((new Date).getTime()+g);e+="; expires="+h.toGMTString()}"https:"===a._doc.location.protocol&&(e+="; secure"),e+="; SameSite=None",a._doc.cookie=e},read:function(b){for(var c,d=b+"=",e=a._doc.cookie.split(";"),f=0;f2048&&this.has("page_referrer")){var f=window.document.createElement("a");f.href=this.get("page_referrer");var g=f.hostname;g&&(c.page_referrer_domain=g),delete c.page_referrer}return c},emit:function(c){return a.ajax({url:b.result(this,"url"),data:this.decoratePayload(c),dataType:"script",cache:!0})}}),g=function(b){var c=new window.Image;return c.src=e.jester+"/stat.gif?"+a.param({event:b}),c},h=function(c,d){if(!b.any(d,function(a){return a<0})){b.each(d,function(a,b){d[b]=Math.round(a)});var f=new window.Image;return f.src=e.jester+"/telemetry/"+c+".gif?"+a.param(d),f}},i=new f;return i.setHostReferrer(window.document.referrer),{ActivityClient:f,client:i,logStat:g,telemetry:h}}),define("core/utils/urls",[],function(){"use strict";var a={},b=window.document.createElement("a");return a.getOrigin=function(a){b.href=a;var c=b.href.split("/");return c[0]+"//"+c[2]},a.getHostName=function(a){return b.href=a,b.hostname},a.getDomainPart=function(b,c){"undefined"==typeof c&&(c=0);var d=a.getHostName(b),e=d.split(".").reverse();return e[c]},a.getQuery=function(a){return b.href=a,b.search},a.getPathname=function(a){return b.href=a,b.pathname},a}),define("core/frameBus",["jquery","underscore","backbone","core/utils/urls"],function(a,b,c,d){"use strict";var e=window.opener||window.parent,f=window.name,g=window.document.referrer,h={};h.client=d.getOrigin(window.document.location.href),h.secureClient=h.client.replace(/^\w+:\/\//,"https://"),h.host=g?d.getOrigin(g):h.client;var i={origins:h,messageHandler:function(a){a=a.originalEvent;var b;try{b=JSON.parse(a.data)}catch(c){return}b.name&&"!"===b.name[0]&&a.origin!==h.client&&a.origin!==h.secureClient||"client"===b.scope&&i.trigger(b.name,b.data)},postMessage:function(a){a=JSON.stringify(a),e.postMessage(a,"*")},sendHostMessage:function(a,b){b=b||[],i.postMessage({scope:"host",sender:f,name:a,data:b})}};return b.extend(i,c.Events),a(window).on("message",i.messageHandler),a(window).on("unload",function(){i.sendHostMessage("die")}),window.DISQUS=window.DISQUS||{},window.DISQUS.Bus=i,i}),define("core/bus",["backbone","underscore","core/frameBus"],function(a,b,c){"use strict";var d=b.extend({},a.Events);return d.frame=c,d}),define("core/utils/storage",[],function(){"use strict";var a=function(a){var b="_dsqstorage_";try{return a.localStorage.setItem(b,b),a.localStorage.getItem(b),a.localStorage.removeItem(b),!0}catch(c){return!1}}(window),b=function(){var a={};return{getItem:function(b){return a.hasOwnProperty(b)?a[b]:null},setItem:function(b,c){a[b]=String(c)},removeItem:function(b){delete a[b]},clear:function(){a={}}}}();return{get:function(a){var b=null;try{return b=this.backend.getItem(a),JSON.parse(b)}catch(c){return b}},set:function(a,b){try{this.backend.setItem(a,JSON.stringify(b))}catch(c){}},remove:function(a){try{this.backend.removeItem(a)}catch(b){}},clear:function(){try{this.backend.clear()}catch(a){}},backend:a?window.localStorage:b,isPersistent:a}}),define("core/utils/auth",["core/utils/cookies"],function(a){"use strict";var b={},c="disqusauth";return b.getFromCookie=function(){var b=(a.read(c)||"").replace(/"/g,"").split("|");!b||b[1]&&b[6]||(b=[],a.erase(c,{}));var d=parseInt(b[6]||"0",10);return{avatarUrl:b[7]?decodeURIComponent(b[7]):void 0,datetimeFormatting:parseInt(b[4],10)?"absolute":"relative",id:d,isModerator:parseInt(b[8],10)>0,staff:Boolean(parseInt(b[2],10)),tzOffset:b[5],username:b[1],isAuthenticated:Boolean(d&&"0"!==d)}},b}),define("core/switches",["underscore","remote/config","core/analytics/identity","core/utils/storage","core/utils/auth"],function(a,b,c,d,e){"use strict";var f="switch:",g={},h={};return h._getKey=function(a){return f+a},h.disableFeature=function(a){g[a]=!1},h.resetFeature=function(a){g[a]=null},h.forceFeature=function(a){g[a]=!0},h.getSwitchContext=function(a){var c=d.get(this._getKey(a));if(null!==c)return c;var e=g[a];return null!=e?e:(b.lounge&&b.lounge.switches||{})[a]},h.isFeatureActive=function(b,d){var f=h.getSwitchContext(b);if(a.isBoolean(f))return f;if(!f)return!1;var g=e.getFromCookie(),i={percent:c.clientPercent(),user_id:g.id,username:g.username,is_staff:g.staff,is_moderator:g.isModerator},j=a.defaults(d||{},i);return a.any(f,function(b,d){var e=j[d];if(/percent$/.test(d)&&a.isNumber(b)){if(a.isNumber(e))return b>e;if(a.isString(e)){var f=0;return b!==Math.round(b)&&(f=b.toString().split(".").pop().length),b>c.getPercentBucketForString(e,f)}return!1}return a.isArray(b)?a.contains(b,e):b===e})},h}),define("core/utils/url/serializeArgs",["require","exports","module","core/utils/collection/each"],function(a,b,c){"use strict";var d=a("core/utils/collection/each");c.exports=function(a){var b=[];return d(a,function(a,c){void 0!==a&&b.push(encodeURIComponent(c)+(null===a?"":"="+encodeURIComponent(a)))}),b.join("&")}}),define("core/utils/url/serialize",["require","exports","module","core/utils/url/serializeArgs"],function(a,b,c){"use strict";var d=a("core/utils/url/serializeArgs");c.exports=function e(a,b,c){if(b&&(a.indexOf("?")===-1?a+="?":"&"!==a.charAt(a.length-1)&&(a+="&"),a+=d(b)),c){var f={};return f[(new Date).getTime()]=null,e(a,f)}var g=a.length;return"&"===a.charAt(g-1)?a.slice(0,g-1):a}}),define("core/utils/isAdBlockEnabled",[],function(){"use strict";function a(){var a=d.createElement("div");return a.setAttribute("class","pub_300x250 pub_300x250m pub_728x90 text-ad textAd text_ad text_ads text-ads text-ad-links ad-text adSense adBlock adContent adBanner"),a.setAttribute("style","width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important;"),a}function b(a){if(null===a.offsetParent||0===a.offsetHeight||0===a.offsetLeft||0===a.offsetTop||0===a.offsetWidth||0===a.clientHeight||0===a.clientWidth)return!0;if(void 0!==window.getComputedStyle){var b=window.getComputedStyle(a,null);if(b&&("none"===b.getPropertyValue("display")||"hidden"===b.getPropertyValue("visibility")))return!0}return!1}var c=100,d=window.document;return function(e){var f=a();d.body.appendChild(f),setTimeout(function(){var a=b(f);d.body.removeChild(f),e(a)},c)}}),define("core/utils/html/toRGBColorString",[],function(){"use strict";var a="Color components should be numbers.";return function(b){var c=Number(b.red),d=Number(b.green),e=Number(b.blue);if(isNaN(c)||isNaN(d)||isNaN(e))throw new Error(a);var f="rgb",g=[c,d,e],h=b.alpha;if(h){if(h=Number(h),isNaN(h))throw new Error(a);f+="a",g.push(h)}return f+"("+g+")"}}),define("core/utils/lang/isString",[],function(){"use strict";return function(a){return"[object String]"===Object.prototype.toString.call(a)}}),define("core/utils/html/setInlineStyle",["require","core/utils/collection/each","core/utils/lang/isString","core/utils/object/extend"],function(a){"use strict";function b(a){return a.replace(/\s+/g,"").toLowerCase()}var c=a("core/utils/collection/each"),d=a("core/utils/lang/isString"),e=a("core/utils/object/extend");return function(a,f,g){var h={};d(f)?h[f]=g:h=f;var i=e({},h);c(i,function(a,c){var d=b(c);d!==c&&(delete i[c],i[d]=a),null===a&&(i[d]=""),void 0===a&&delete i[d]});var j=a.style;c(i,function(a,b){j.setProperty(b,String(a),"important")})}}),define("core/utils/html/parseColor",["require","core/utils/html/setInlineStyle"],function(a){"use strict";function b(a){return a.replace(/\s+/g,"").toLowerCase()}function c(a){return a=a.replace(/^#([a-f0-9])([a-f0-9])([a-f0-9])$/,"#$1$1$2$2$3$3"),a=a.slice(1),{red:parseInt(a.slice(0,2),16),green:parseInt(a.slice(2,4),16),blue:parseInt(a.slice(4,6),16)}}function d(a){var b=a.match(/^rgb\((\d+),(\d+),(\d+)\)$/);return{red:parseInt(b[1],10),green:parseInt(b[2],10),blue:parseInt(b[3],10)}}function e(a){var b=a.match(/^rgba\((\d+),(\d+),(\d+),([\d.]+)\)$/);return{red:parseInt(b[1],10),green:parseInt(b[2],10),blue:parseInt(b[3],10),alpha:parseFloat(b[4])}}function f(a,b,c,d){return b=window.document.createElement(b),h(b,{visibility:"hidden",color:c}),a.appendChild(b),c=d(b),a.removeChild(b),c}function g(a,c){c=c||{};var e=c.container||window.document.body;return window.getComputedStyle?(a=f(e,"span",a,function(a){return window.getComputedStyle(a,null).getPropertyValue("color")}),d(b(a))):(a=f(e,"textarea",a,function(a){return a.createTextRange().queryCommandValue("ForeColor")}),{red:255&a,blue:a>>>16,green:(65280&a)>>>8})}var h=a("core/utils/html/setInlineStyle");return function(a,f){a=b(a);var h;if("transparent"===a)return{red:0,green:0,blue:0,alpha:0};if("#"===a.charAt(0))h=c;else if("rgba("===a.slice(0,5))h=e;else if("rgb("===a.slice(0,4))h=d;else{if(!/^[a-z]+$/.test(a))throw new Error("parseColor received unparseable color: "+a);h=g}return h(a,f)}}),define("core/host/globalFromSandbox",["require"],function(a){"use strict";var b=window.document,c=b.createElement("iframe");return c.style.display="none",function(a,d){var e=d&&d[a]||null;try{return c.parentNode!==b.body&&b.body.appendChild(c),c.contentWindow[a]||e}catch(f){return e}}}),define("core/host/utils",["require","core/utils/browser","core/utils/lang/isString","core/utils/html/getCurrentStyle","core/utils/html/parseColor","core/host/globalFromSandbox"],function(a){"use strict";function b(a){for(var b=[/(https?:)?\/\/(www\.)?disqus\.com\/forums\/([\w_-]+)/i,/(https?:)?\/\/(www\.)?([\w_-]+)\.disqus\.com/i,/(https?:)?\/\/(www\.)?dev\.disqus\.org\/forums\/([\w_-]+)/i,/(https?:)?\/\/(www\.)?([\w_-]+)\.dev\.disqus\.org/i],c=0;ce&&(e=f[c+1][d+1]));return e}function e(){for(var a=t.getElementsByTagName("h1"),b=t.title,c=b.length,e=b,f=.6,g=function(a){var g,h=a.textContent||a.innerText;null!==h&&void 0!==h&&(g=d(b,h)/c,g>f&&(f=g,e=h))},h=0;hz},B=function(){if(t.querySelector){var a=t.querySelector("link[rel=canonical]");if(a)return a.href}};return{MAX_Z_INDEX:2147483647,getShortnameFromUrl:b,getForum:c,guessThreadTitle:e,getContrastYIQ:l,getColorScheme:m,getElementStyle:i,getAnchorColor:k,getAnchorColorScheme:n,normalizeFontValue:f,isSerif:j,getBrowserSupport:g,pageVisibility:u,getScrollbarWidth:v,browser:o,storage:w,appearsToHideContent:y,hasOverflow:A,getCanonicalUrl:B}}),define("common/utils",["jquery","underscore","loglevel","common/main","common/urls","core/host/utils","core/utils/cookies","core/utils/html/parseColor"],function(a,b,c,d,e,f,g,h){"use strict";var i=window.document,j={};j.globalUniqueId=function(a){return b.uniqueId(a)+"_"+Number(new Date)},j.setPublisherColor=function(a){i.documentElement.style.setProperty("--publisher-color",a);var b=f.getContrastYIQ(h(a));b>5&&b<250&&i.documentElement.style.setProperty("--publisher-color-safe",a)},j.addStylesheetRules=function(a){function c(){var e=b.find(i.styleSheets,function(a){var b=a.ownerNode||a.owningElement;return b.id===d});if(!e)return void setTimeout(c,50);for(var f=0,g=a.length;f=200&&c<300?a():b&&(c<200||c>=300)&&b()},XHR2:function(a,b,c,d){var e=k.handler,f=new window.XMLHttpRequest;return f.open(a,b,!0),f.onreadystatechange=function(){f.readyState===window.XMLHttpRequest.DONE&&e(c,d,f.status)},f}};k.request=function(){return"withCredentials"in new window.XMLHttpRequest?k.XHR2:function(){return null}}(),j.isWindowClosed=function(a){if(!a)return!0;try{return a.closed||void 0===a.closed}catch(b){return!0}},j.truncate=function(a,b,c){return c=c||"...",a.length>b?a.slice(0,b)+c:a},j.extractDomainForCookies=function(a){return a.split("/")[2].replace(/:[0-9]+/,"")},j.cookies={domain:j.extractDomainForCookies(e.root),create:function(a,b){var c=31536e6;g.create(a,b,{domain:j.cookies.domain,expiresIn:c})},read:g.read,erase:function(a){g.erase(a,{domain:j.cookies.domain})}},j.updateURL=function(a,c){var d,e=i.createElement("a");return c=c||{},e.href=a,c.hostname&&c.hostname.match(/\.$/)&&(c.hostname+=e.hostname),d=b.extend({protocol:e.protocol,hostname:e.hostname,pathname:e.pathname,search:e.search},c),d.pathname.match(/^\//)||(d.pathname="/"+d.pathname),d.protocol+"//"+d.hostname+d.pathname+d.search},j.injectBaseElement=function(a,b){b=b||i;var c=b.getElementsByTagName("base")[0]||b.createElement("base");c.target="_parent",a?c.href=a:c.removeAttribute("href"),c.parentNode||(b.head||b.getElementsByTagName("head")[0]).appendChild(c)},j.syntaxHighlighter=function(){var c=1,e=2,f=null,g=null,h=[],i={highlight:function(a){null===g&&i._load(),h.push(a),g===e&&i.scheduleHighlight()},_highlight:function(b){var c=a(b).html();a(b).html(c.replace(/^
          /,"")),f.highlightBlock(b),i.scheduleHighlight()},scheduleHighlight:function(){var a=h.shift();a&&window.requestAnimationFrame(b.bind(i._highlight,i,a))},_load:function(){g=c,d.loadCss("https://c.disquscdn.com/next/embed/styles/highlight.3128dd90ecaebd8542ac3442033f3f00.css"),require(["common/vendor_extensions/highlight"],function(a){g=e,f=a,i.scheduleHighlight()})}};return i}();var l=a("html");j.getPageHeight=function(){var b=a("#tos__message"),c=b.outerHeight();return c&&(c+=b.offset().top),Math.max(c,l.height())},j.calculatePositionFullscreen=function(){return{pageOffset:a(window).scrollTop(),height:i.documentElement.clientHeight,frameOffset:{left:0,top:0}}},j.triggerClick=function(a,b){var c,d,e=a[0],f={altKey:!1,button:0,ctrlKey:!1,metaKey:!1,shiftKey:!1};if(i.createEvent){if(c=i.createEvent("MouseEvents"),b)for(d in f)f.hasOwnProperty(d)&&b.hasOwnProperty(d)&&(f[d]=b[d]);c.initMouseEvent("click",!0,!0,window,0,0,0,0,0,f.ctrlKey,f.altKey,f.shiftKey,f.metaKey,0,null),e.dispatchEvent&&e.dispatchEvent(c)}else if(i.createEventObject){if(c=i.createEventObject(),c.eventType="click",b)for(d in f)f.hasOwnProperty(d)&&b.hasOwnProperty(d)&&(c[d]=b[d]);e.fireEvent("onclick",c)}},j.delayLinkClick=function(a,c){a.preventDefault(),b.delay(b.bind(j.triggerClick,this,c,a.originalEvent),100)},j.mixin=function(a,c,d){var e=a.prototype,f=b.extend({},c,d);if(b.defaults(e,f),b.defaults(e.events,f.events),void 0!==e.initialize&&void 0!==f.initialize){var g=e.initialize;e.initialize=function(){var a=g.apply(this,arguments);return f.initialize.apply(this,arguments),a}}return a},j.extractService=function(b,c){var d="[data-action^="+c+"]",e=a(b);e=e.is(d)&&e||e.closest(d);var f=e.attr("data-action")||":",g=f.split(":")[1];return g},j.getConfigFromHash=function(a){var d,e=a.location.hash;try{d=JSON.parse(decodeURIComponent(String(e).substr(1)))}catch(f){c.debug("Failed to parse config from URL hash",f)}return b.isObject(d)?d:{}};var m=/[<>]|:\/\//;return j.isPlainText=function(a){return!a.match(m)},j.isDNTEnabled=function(a){return a||(a=window),"1"===a.navigator.doNotTrack||"yes"===a.navigator.doNotTrack||"1"===a.navigator.msDoNotTrack},j.shouldSample=function(a){var b=parseInt(a,10);return!!b&&(!(b>100)&&Math.random()").hide().attr("src",g.zyncPixelImage+"&cid=c"+d.unique.value)),v=!0)}l(function(a){r(b,c,a)}),f.frame.sendHostMessage("tracking:init",{shouldTrack:c,isMobile:i.isMobileUserAgent(n),hostIdentityActive:h.isFeatureActive("hostIdentityActive",{forum:y.id,forumPercent:y.id})})}),e.client.set({product:"embed",thread:C,thread_id:C,forum:z,forum_id:A,zone:"thread",version:p.version}),q.once("bootstrap:complete",function(){e.client.set({page_url:q.config.referrer});var a=q.config.experiment;a&&e.client.set({experiment:a.experiment,variant:a.variant,service:a.service}),e.client.setHostReferrer(q.config.hostReferrer)});var D={inViewport:function(){var c=q.config,d={color_scheme:c.colorScheme,anchor_color:m(c.anchorColor),typeface:c.typeface,width:a(n.document).width()};d=b.pick(d,function(a,c){switch(c){case"width":return b.isNumber(a);default:return b.isString(a)&&""!==a}}),e.client.emit({verb:"view",object_type:"product",object_id:"embed",extra_data:JSON.stringify(d)}),q.off("inViewport")},"uiCallback:postCreated":function(a,c){c=c||{},b.extend(c,{object_type:"post",object_id:a.id,verb:"post"}),a.has("parent")&&(c.target_type="post",c.target_id=a.get("parent")),e.client.emit(c)},"uiCallback:postUpdated":function(a,c){c=c||{},b.extend(c,{object_type:"post",object_id:a.id,verb:"update"}),e.client.emit(c)},"uiAction:postStartUpdate":function(a,c){c=c||{},b.extend(c,{verb:"click",adjective:"edit",object_type:"link",object_id:a.id}),e.client.emit(c)},"uiAction:seeMore":function(a){e.client.emit({verb:"open",object_type:"section",object_id:"thread/page-"+a})},"uiAction:seeMoreChildren":function(a){e.client.emit({verb:"click",object_type:"link",object_id:"show_more_comments",area:s.getEventTrackingArea(a)})},"uiAction:postUpvote":function(a,b){e.client.emit({verb:"like",object_type:"post",object_id:a.id,area:s.getEventTrackingArea(b)})},"uiAction:postUnvote":function(a,b){e.client.emit({verb:"unlike",object_type:"post",object_id:a.id,area:s.getEventTrackingArea(b)})},"uiAction:postDownvote":function(a,b){e.client.emit({verb:"dislike",object_type:"post",object_id:a.id,area:s.getEventTrackingArea(b)})},"uiAction:threadUnlike":function(){e.client.emit({verb:"unlike",object_type:"thread",zone:"thread"})},"uiAction:threadLike":function(){e.client.emit({verb:"like",object_type:"thread"})},"uiAction:postShare":function(a,b){e.client.emit({verb:"share",object_type:"post",object_id:a.id,target_type:"service",target_id:b})},"uiAction:threadShare":function(a){e.client.emit({verb:"share",object_type:"thread",target_type:"service",target_id:a})},"uiAction:clickLink":function(a,b){e.client.emit({verb:"click",object_type:"link",object_id:a[0].href,area:s.getEventTrackingArea(b)})},"uiAction:followUser":function(a){e.client.emit({verb:"follow",object_type:"user",object_id:a.id})},"uiAction:unfollowUser":function(a){e.client.emit({verb:"stop-following",object_type:"user",object_id:a.id})},"uiAction:openLogin":function(a){e.client.emit({verb:"open",object_type:"login",object_id:a})},"uiAction:onboardAlertShow":function(){e.client.emit({verb:"view",object_type:"area",object_id:"onboard_alert"})},"uiAction:onboardAlertDismiss":function(){e.client.emit({verb:"close",object_type:"area",object_id:"onboard_alert"})},"uiAction:openHome":function(a,b){e.client.emit({verb:"open",object_type:"product",object_id:b?"bridge":"home",section:a})},"uiAction:viewBanUser":function(){e.client.emit({verb:"view",object_type:"area",object_id:"ban_user"})},"uiAction:clickBanUser":function(a){e.client.emit({verb:"click",object_type:"button",object_id:"ban_user",extra_data:a})},"uiAction:viewFlagPost":function(){e.client.emit({verb:"view",object_type:"area",object_id:"flag_post"})},"uiAction:clickFlagPost":function(){e.client.emit({verb:"click",object_type:"button",object_id:"flag_post"})},"uiAction:viewBlockUser":function(){e.client.emit({verb:"view",object_type:"area",object_id:"block_user"})},"uiAction:clickBlockUser":function(){e.client.emit({verb:"click",object_type:"button",object_id:"block_user"})},"uiAction:viewUpgradeCard":function(){e.client.emit({verb:"hover",object_type:"icon",object_id:"disqus_pro",organization_id:y.get("organizationId")})},"uiAction:clickUpgrade":function(){e.client.emit({verb:"click",object_type:"button",object_id:"subscriptions",organization_id:y.get("organizationId")})},"uiAction:clickCommentPolicy":function(a){e.client.emit({verb:"click",object_type:"link",section:"comment_policy",object_id:a})},"uiAction:clickThreadPremoderate":function(){e.client.emit({verb:"click",object_type:"button",object_id:"premoderate_thread"})},viewActivity:function(a,b){var c={verb:"view",object_type:a,object_id:b};e.client.emit(c)},"uiAction:loadEmailSubscriptionPrompt":function(a){e.client.emit({verb:"load",object_type:"section",object_id:"email_subscriptions",section:"email_subscriptions",extra_data:JSON.stringify({user_verified:Boolean(q.session.user&&q.session.user.get("isVerified")),email_subscription_prompt:a})})},"uiAction:viewEmailSubscriptionPrompt":function(a){e.client.emit({verb:"view",object_type:"section",object_id:"email_subscriptions",section:"email_subscriptions",extra_data:JSON.stringify({user_verified:Boolean(q.session.user&&q.session.user.get("isVerified")),email_subscription_prompt:a})})},"uiAction:clickEmailSubscriptionPromptSubscribe":function(a){e.client.emit({verb:"click",object_type:"button",object_id:"subscribe",section:"email_subscriptions",extra_data:JSON.stringify({user_verified:Boolean(q.session.user&&q.session.user.get("isVerified")),email_subscription_prompt:a})})},"uiAction:clickEmailSubscriptionPromptDismiss":function(a){e.client.emit({verb:"click",object_type:"button",object_id:"hide_this_message",section:"email_subscriptions",extra_data:JSON.stringify({user_verified:Boolean(q.session.user&&q.session.user.get("isVerified")),email_subscription_prompt:a})})},"uiAction:viewReactionsPromotion":function(){e.client.emit({verb:"view",object_type:"section",object_id:"reactions_onboarding",zone:"thread",section:"reactions_onboarding"})},"uiAction:reactionsEnable":function(){e.client.emit({verb:"click",object_type:"button",object_id:"enable_reactions",zone:"thread",section:"reactions_onboarding"})},"uiAction:reactionsDefer":function(){e.client.emit({verb:"click",object_type:"button", +object_id:"maybe_later",zone:"thread",section:"reactions_onboarding"})},"uiAction:reactionsVote":function(a){e.client.emit({verb:"vote",object_type:"thread",adjective:a.get("text"),zone:"thread",section:"reactions",extra_data:JSON.stringify({reaction_id:a.id})})},"uiAction:gifsClickButton":function(){e.client.emit({verb:"click",object_type:"button",adjective:"gif_picker",object_id:"thread",zone:"thread"})},"uiAction:gifsScrollToBottom":function(){e.client.emit({verb:"view",adverb:"results",object_type:"zone",adjective:"end",object_id:"thread",zone:"thread"})},"uiAction:loadLiveComments":function(){e.client.emit({verb:"click",adverb:"comments",object_type:"notification",adjective:"realtime",object_id:"thread",zone:"thread"})},"uiAction:loadLiveReplies":function(){e.client.emit({verb:"click",adverb:"replies",object_type:"notification",adjective:"realtime",object_id:"thread",zone:"thread"})},"uiAction:clickBadge":function(a,b){e.client.emit({verb:"click",object_type:"badge",object_id:b,section:"profile/badges",zone:"thread",area:s.getEventTrackingArea(a)})},"uiAction:viewBadgeModal":function(){e.client.emit({verb:"view",object_type:"modal",object_id:"badge",section:"manage_badges",zone:"thread"})},"uiAction:awardBadge":function(a){e.client.emit({verb:"award",object_type:"badge",object_id:a,section:"manage_badges",zone:"thread"})},"uiAction:removeBadge":function(a){e.client.emit({verb:"remove",object_type:"badge",object_id:a,section:"manage_badges",zone:"thread"})},"uiAction:behindClickButton":function(){e.client.emit({verb:"click",object_type:"button",adjective:"behind_click",object_id:"thread",zone:"thread"})},"uiAction:toggleClassicDisqus":function(a){e.client.emit({verb:"click",object_type:"button",adjective:a,object_id:"toggle_classic_disqus",zone:"thread"})}};q.on(D),f.on(D),f.frame.once("cmp.consent",t),f.frame.once("tracking.hostIdentity",function(b){if(!u){var e=[j.calculate(b.domain),b.id,d.unique.value],f=a("body"),h=g.logger+"/1/"+n.btoa(JSON.stringify(e));try{f.append(a("").hide().attr("src",h))}catch(i){c.captureException(i)}u=!0}})}var s={},t=!1,u=!1,v=!1,w=!1,x={};return s.init=function(a){r(window,a)},s.getEventTrackingArea=function(b){return a(b.currentTarget).closest("[data-tracking-area]").attr("data-tracking-area")},s.load3rdParties=function(d,e){if(g.glitter&&!t){var f=n.lounge.tracking||{},h=f.iframe_limit||0,i={postCount:d.get("posts")||0,likeCount:d.get("likes")||0,postVoteCount:b.reduce(d.posts.pluck("likes"),function(a,b){return a+b},0),referrer:encodeURIComponent(e.config.referrer),tcString:x.tcString||""};a.ajax({dataType:"jsonp",cache:!0,url:g.glitter,data:{forum_shortname:d.forum.id,thread_id:d.id,referer:e.config.hostReferrer},jsonpCallback:"dsqGlitterResponseHandler",success:function(d){var e=a("body");b.each(d,function(d){if(!("img"!==d.type&&"iframe"!==d.type||"iframe"===d.type&&(h-=1,h<0))){var f;try{f=d.url.replace(/\{\{(.+?)\}\}/g,function(a,c){var d=c.trim();if(!i.hasOwnProperty(d))throw new Error("Unknown template variable in tracker URL: "+d);return b.escape(i[d])}),e.append(a("<"+d.type+">").hide().attr("src",f))}catch(g){c.captureException(g)}}})}}),t=!0}},s.shouldTrack=function(a,b){var c=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return!(Boolean(a&&a.get("settings").disable3rdPartyTrackers^c)||b&&b.get("disable3rdPartyTrackers")||"1"===o.cookies.read("disqus_tracking_optout")||o.isDNTEnabled()||s.isPrivate(b))},s.isPrivate=function(a){return q.getLounge().config.isPrivate&&(!a||!a.get("hasAcceptedGdprTerms"))&&!w},s.reset=function(){t=!1,u=!1,v=!1,w=!1,x={}},s}),define("common/jsxUtils",["underscore"],function(a){"use strict";return{append:function(b,c){var d=function e(c){if(null!==c)return a.isArray(c)?void c.forEach(e):a.isElement(c)||c&&c.nodeType===window.Node.DOCUMENT_FRAGMENT_NODE?void b.appendChild(c):void b.appendChild(window.document.createTextNode(c))};d(c)}}});var _extends=Object.assign||function(a){for(var b=1;b2?g-2:0),i=2;i0&&(f=_extends({children:1===h.length?h[0]:h},f));var j=e(f);if(b.isArray(j)){var k=d.createDocumentFragment();return c.append(k,j),k}return j}if("string"!=typeof e)throw new Error("Unknown type");var l=d.createElement(e),m=!1;return f&&Object.keys(f).forEach(function(b){var c=f[b];if(/^(?:data-|aria-|role$)/.test(b))null!==c&&l.setAttribute(b,c);else if("dangerouslySetInnerHTML"===b)m=!0,l.innerHTML=c&&c.__html||"";else if("style"===b)Object.keys(c).forEach(function(a){l.style[a]=c[a]});else if(/^on[A-Z]/.test(b))c&&a(l).on(b.slice(2).toLowerCase(),c);else if("key"===b);else try{l[b]=c}catch(d){}}),m||c.append(l,h),l}}}),define("react-dom",["common/jsxUtils"],function(a){"use strict";return{render:function(b,c,d){return c&&(c.innerHTML="",a.append(c,b)),d&&d(),null}}}),define("core/shared/urls",["require","core/utils/object/extend","core/utils/url/serialize","core/utils/url/serializeArgs"],function(a){"use strict";var b=a("core/utils/object/extend"),c=a("core/utils/url/serialize"),d=a("core/utils/url/serializeArgs"),e="default",f={lounge:"http://disqus.com/embed/comments/",home:"https://disqus.com/home/".replace("home/",""),recommendations:"http://disqus.com/recommendations/"},g=function(a){return"https://"+a.replace(/^\s*(\w+:)?\/\//,"")},h=function(a,h,i){var j=f[a];if(!j)throw new Error("Unknown app: "+a);var k=g(j),l=b({base:e},h||{}),m=i?"#"+d(i):"";return c(k,l)+m};return{BASE:e,apps:f,get:h,ensureHTTPSProtocol:g}}),define("core/apps/BaseApp",["require","core/Events","core/utils/object/extend","core/utils/object/has","core/utils/uniqueId"],function(a){"use strict";var b=a("core/Events"),c=a("core/utils/object/extend"),d=a("core/utils/object/has"),e=a("core/utils/uniqueId"),f=function(a){this.uid=e("dsq-app"),this.settings=a||{};var b=[],c=this.constructor.prototype;do b.unshift(c),c=c.constructor.__super__;while(c);for(var f=0,g=b.length;f255)throw new Error("Color components should be numbers less than 256");return a=a.toString(16),1===a.length?"0"+a:String(a)}return function(b){return"#"+a(b.red)+a(b.green)+a(b.blue)}}),define("core/utils/sandbox",[],function(){"use strict";var a=["allow-forms","allow-pointer-lock","allow-popups","allow-same-origin","allow-scripts","allow-top-navigation"],b=function(b){return b?a.reduce(function(a,c){return b[c]&&(a+=c+" "),a},"").trim():""};return{getAttribute:b}}),define("core/utils/url/parseQueryString",["core/utils/collection/each"],function(a){"use strict";return function(b){"undefined"==typeof b&&(b=window.location.search);var c={};return a(b.substr(1).split("&"),function(a){var b=a.split("=").map(function(a){return decodeURIComponent(a.replace(/\+/g,"%20"))});b[0]&&(c[b[0]]=b[1])}),c}}),define("core/analytics/reporting",["require","core/utils/collection/each","core/utils/url/serialize","core/config/urls"],function(a){"use strict";function b(a){var b=a.split("."),c=b.length>2?b[b.length-2]:"";return c.match(/^[0-9a-f]{32}$/i)&&c}function c(a){(new window.Image).src=g(i+"/stat.gif",{event:a})}function d(a){(new window.Image).src=g(i+"/event.gif",a)}function e(a){var b=new window.URLSearchParams;f(a,function(a,c){void 0!==a&&b.append(c,a)});var c=new window.XMLHttpRequest;c.open("POST",i+"/event.json",!0),c.withCredentials=!0,c.send(b)}var f=a("core/utils/collection/each"),g=a("core/utils/url/serialize"),h=a("core/config/urls"),i=h.jester;return{getLoaderVersionFromUrl:b,logStat:c,reportJester:d,reportJesterPOST:e}}),define("core/ads/safeFrameUtils",[],function(){"use strict";var a=function(a){return null!==a&&!isNaN(Number(a))&&isFinite(a)},b=function(a){return Math.min.apply(Math,_toConsumableArray(a))||0},c=function(a){return Math.max.apply(Math,_toConsumableArray(a))||0};return{min:b,max:c,isNumeric:a}});var _createClass=function(){function a(a,b){for(var c=0;c=6?(this.top=a[0],this.right=a[1],this.bottom=a[2],this.left=a[3],this.width=a[4],this.height=a[5]):a.length>=4?(this.top=a[0],this.right=a[1],this.bottom=a[2],this.left=a[3]):3===a.length?(this.top=a[0],this.right=a[1],this.bottom=a[2],this.left=0):2===a.length?(this.top=a[0],this.right=a[1],this.bottom=a[0],this.left=a[1]):(this.top=a[0],this.right=a[0],this.bottom=a[0],this.left=a[0]),this.update()}},{key:"fromObject",value:function(a){return this.fromArray([a.top,a.right,a.bottom,a.left,a.width,a.height])}},{key:"update",value:function(){this.width||(this.width=this.right-this.left),this.height||(this.height=this.bottom-this.top)}},{key:"reset",value:function(a){a=a||0,this.top=a,this.right=a,this.bottom=a,this.left=a,this.width=a,this.height=a}},{key:"getArea",value:function(){return(this.right-this.left)*(this.bottom-this.top)}}]),b}();return b.getOverlapRect=function(c,d){var e=a.max([c.left,d.left]),f=a.min([c.left+c.width,d.left+d.width]),g=a.max([c.top,d.top]),h=a.min([c.top+c.height,d.top+d.height]);return f>=e&&h>=g&&new b(g,f,h,e,f-e,h-g)},b.getOverlapArea=function(b,c){var d=a.max([0,a.min([b.right,c.right])-a.max([b.left,c.left])]),e=a.max([0,a.min([b.bottom,c.bottom])-a.max([b.top,c.top])]);return d*e},b}),define("core/ads/domUtils",["core/ads/NodeRect"],function(a){"use strict";var b=9,c=function(a){return a&&a.parentNode},d=function(a,b){if(!a)return null;var c=window.document.defaultView.getComputedStyle(a);return b&&c.hasOwnProperty(b)?c[b]:c},e=function(){return{x:window.pageXOffset,y:window.pageYOffset}},f=function(b){var c=void 0;if(b&&b.style){var d=b.style.display;b.style.display="block",c=b.getBoundingClientRect(),b.style.display=d,c=new a(c);var f=e();c.left+=f.x,c.right+=f.x,c.top+=f.y,c.bottom+=f.y}else c=new a(0);return c},g=function(a,b){var c=f(a);if(b){var d=f(b);c.top=d.top-d.top+b.scrollTop,c.bottom=c.top+c.height+b.scrollTop,c.left=c.left-d.left+b.scrollLeft,c.right=c.left+c.width+b.scrollLeft}return c},h=function(){var b=e(),c=b.y,d=b.x+window.innerWidth,f=b.y+window.innerHeight,g=b.x,h=window.innerWidth,i=window.innerHeight;return new a(c,d,f,g,h,i)},i=function(a){try{return a.nodeType===b?a:a.ownerDocument}catch(c){return null}},j=function(a){var b=i(a),c=void 0;try{b&&(c=b.parentWindow||b.defaultView||window)}catch(d){c=window}return c},k=function(b){var c=j(b),d=new a(0,c.innerWidth,c.innerHeight,0,c.innerWidth,c.innerHeight),f=e();return d.left+=f.x,d.right+=f.x,d.top+=f.y,d.bottom+=f.y,d},l=function(a){var b=i(a);if(b)return b.documentElement||b.body},m=function(b){var c=l(b)||{},d=new a;return d.right=d.width=c.scrollWidth||0,d.bottom=d.height=c.scrollHeight||0,d},n=function(a,b){for(;b;){if(b===a)return!0;b=b.parentNode}return!1},o=function(a){var b=d(a);return"inline-block"===b.display||"none"!==b["float"]||"absolute"===b.position||"fixed"===b.position||"auto"!==b.width||"auto"!==b.height},p=function(a){var b=d(a),c={};return"scroll"===b.overflowX||"auto"===b.overflowX?c.xscroll=a.offsetWidth-a.clientWidth:c.xscroll=0,"scroll"===b.overflowY||"auto"===b.overflowY?c.yscroll=a.offsetHeight-a.clientHeight:c.yscroll=0,c.xhidden="hidden"===b.overflowX,c.yhidden="hidden"===b.overflowY,c},q=function(a){var b=d(a);return!!(b.clip&&"auto"!==b.clip||b.clipPath&&"none"!==b.clipPath)};return{getParentNode:c,getWindow:j,getScroll:e,getRect:f,getRectRelativeTo:g,getViewportRect:h,getDocument:i,getWindowRect:k,getRootNode:l,getRootRect:m,getNodeStyle:d,isParentOf:n,hasLayout:o,getNodeOverflow:p,isNodeClipped:q}});var _createClass=function(){function a(a,b){for(var c=0;c=e&&(m=j.right,n=j.bottom))}return f}},{key:"getWindowGeom",value:function(){var a=this.window.innerHeight||0,b=this.window.innerWidth||0,c=this.window.screenY||this.window.screenTop||0,d=c+a,e=this.window.screenX||this.window.screenLeft||0,f=e+b;return{t:c,r:f,b:d,l:e,w:b,h:a}}},{key:"getSelfGeom",value:function(){var c=a.getRect(this.node),d=a.getRect(this.ref),e=a.getNodeStyle(this.node),f=a.getWindowRect(this.node),g=c.width,h=c.height;this.ref!==this.root&&(g=b.max([0,b.min([c.right,d.right])-b.max([c.left,d.left])]),h=b.max([0,b.min([c.bottom,d.bottom])-b.max([c.top,d.top])]));var i=b.max([0,b.min(c.right,f.right)-b.max([c.left,f.left])]),j=b.max([0,b.min([c.bottom,f.bottom])-b.max([c.top,f.top])]),k=b.min([g,i]),l=b.min([h,j]),m=c.width?k/c.width:0,n=c.height?l/c.height:0,o=k*l/(c.width*c.height),p=1,q=this.getNodesOver(this.node,p);if(q.length){var r=a.getRect(q[0]),s=b.max([0,b.min([r.right,c.right])-b.max([r.left,c.left])]),t=b.max([0,b.min([r.bottom,c.bottom])-b.max([r.top,c.top])]);o=b.max([0,(k*l-s*t)/(c.width*c.height)])}var u=a.getScroll();return{t:c.top-u.y,r:c.right-u.x,b:c.bottom-u.y,l:c.left-u.x,z:e.zIndex,w:c.width,h:c.height,xiv:1===m?"1":Number(m).toFixed(2),yiv:1===n?"1":Number(n).toFixed(2),iv:1===o?"1":Number(o).toFixed(2)}}},{key:"getExpandGeom",value:function(){var c=a.getRect(this.ref),d=a.getRect(this.node),e=a.getWindowRect(this.node),f={top:b.max([c.top,e.top]),right:b.min([c.right,e.right]),bottom:b.min([c.bottom,e.bottom]),left:b.max([c.left,e.left])},g=a.getNodeOverflow(this.ref);return{t:b.max([0,d.top-f.top]),r:b.max([0,f.right-d.right]),b:b.max([0,f.bottom-d.bottom]),l:b.max([0,d.left-f.left]),xs:Boolean(g.yscroll),yx:Boolean(g.xscroll)}}},{key:"getGeom",value:function(){return{win:this.getWindowGeom(),self:this.getSelfGeom(),exp:this.getExpandGeom()}}}]),d}(),e={get:function(a){var b=new d(a);return b.getGeom()}};return e}),define("core/ads/ads",["require","core/shared/urls","core/apps/WindowedApp","core/host/json","stance/main","stance/utils","core/common/kernel/WindowBase","core/utils/OnceTimer","core/utils/html/toHexColorString","core/utils/object/extend","core/utils/sandbox","core/utils/url/parseQueryString","core/utils/url/serialize","core/utils/urls","core/utils/urls","core/analytics/reporting","core/ads/Geom"],function(a){"use strict";var b=a("core/shared/urls"),c=a("core/apps/WindowedApp"),d=a("core/host/json"),e=a("stance/main"),f=a("stance/utils"),g=a("core/common/kernel/WindowBase"),h=a("core/utils/OnceTimer"),i=a("core/utils/html/toHexColorString"),j=a("core/utils/object/extend"),k=a("core/utils/sandbox"),l=a("core/utils/url/parseQueryString"),m=a("core/utils/url/serialize"),n=a("core/utils/urls").getOrigin,o=a("core/utils/urls").getQuery,p=a("core/analytics/reporting"),q=a("core/ads/Geom"),r=c.extend({name:"ads",origin:void 0,onceEvents:{"view:enter":function(){this._reportLegacy({verb:"view",adverb:"0ms-no50perc"})},"view:iab":function(){this._reportLegacy({verb:"view",adverb:"iab-scroll"})}},events:{"frame:ready":function(a){this.forumId=a.forumId,this._reportLegacy({verb:"load",extra_data:a.extraData,advertisement_id:a.advertisement_id,provider:a.provider}),this.bindViewEvents(),this.triggerGeomUpdate()},"frame:resize":function(a){this.frame.setInlineStyle("height",a.height+"px"),0===a.height?this.trigger("ad-placement-empty"):(a.adWidth&&this.frame.setInlineStyle("width",a.adWidth+"px"),this.trigger("ad-placement-filled")),this.triggerGeomUpdate()},"frame:click":function(){this._reportOnce({verb:"click"},"click")},"frame:hover":function(){this._reportOnce({verb:"hover"},"hover")},"frame:error-provider-not-ready":function(a){this._reportLegacy({verb:"fail",object_type:"provider",object_id:a.provider||this.getProvider(),adverb:"provider_not_ready"})},"frame:error-no-height":function(a){this._reportLegacy({verb:"fail",object_type:"provider",object_id:a.provider||this.getProvider(),adverb:"no_height"})},"frame:clearSandbox":function(){this.frame.elem.hasAttribute("sandbox")&&this.frame.elem.removeAttribute("sandbox")},"frame:$sf-init":function(){this.settings.isOnHostPage&&(this.isSafeframe=!0)},"frame:error":function(a){this.settings.isOnHostPage&&this.postMessageDirect({event:"error",data:{error:a}})}},constructor:function(){c.apply(this,arguments),this.origin=n(this.settings.adUrl),this._reportOnceHistory={},this.settings.isOnHostPage&&(this.detectLazyload=this.detectLazyload.bind(this),window.addEventListener("scroll",this.detectLazyload)),this.settings.useSourcelessFrame=this.settings.sourcelessIframe&&this.settings.isOnHostPage&&(!this.settings.defaultPlacementUrl||!this.settings.adBlockEnabled)},init:function(){if(this.settings.forum=l(o(this.settings.adUrl)).shortname,this.settings.forum){var a=this.settings.disableAds,d=this.settings.isInHome||this.settings.isOnHostPage&&0===window.location.href.indexOf(b.apps.home);if(!d&&a&&this.settings.canDisableAds)return void this.trigger("prevented-ad-load");this._reportOnce({verb:"call",object_type:"provider",object_id:this.getProvider(),adjective:1},"call"),this.settings.sandboxAds&&(this.sandbox=k.getAttribute({"allow-scripts":!0,"allow-same-origin":!0,"allow-forms":!0,"allow-popups":!0})),c.prototype.init.call(this)}},detectLazyload:function(){if(this.frame&&this.settings.isOnHostPage){var a=this.frame.elem.getBoundingClientRect().top,b=a-window.innerHeight,c=window.innerHeight*this.settings.lazyloadViewports;b=i&&!g?(g=!0,b("view:50in"),d.start()):h1&&void 0!==arguments[1]?arguments[1]:{},c=this.settings,d=b.provider||this.getProvider();a.forum_id=c.forumId||this.forumId;var e;e=c.placement&&c.placement.indexOf("timeline")>-1?"home":"recommendations"===c.placement?"recommendations":"embed";var f=b.usePOST?"reportJesterPOST":"reportJester";p[f](j({imp:c.impressionId,experiment:c.experiment.experiment,variant:c.experiment.variant,service:c.experiment.service,area:c.placement,product:e,forum:c.forum,zone:"thread",version:c.loaderVersion,page_url:c.referrer||window.document.location.href,page_referrer:c.hostReferrer||window.document.referrer,object_type:"advertisement",provider:d,event:"activity"},a))},_reportLegacy:function(a){var b=this.settings;this._report(j({ad_product_name:"iab_display",ad_product_layout:"iab_display",bin:"embed:promoted_discovery:"+b.experiment.service+":"+b.experiment.experiment+":"+b.experiment.variant,object_id:a.advertisement_id?"["+a.advertisement_id+"]":"",section:"default"},a))},_reportOnce:function(a,b){this._reportOnceHistory[b]||(this._reportLegacy(a),this._reportOnceHistory[b]=!0)},getFrameSettings:function(){var a=c.prototype.getFrameSettings.call(this);return a.insertBeforeEl=this.settings.insertBeforeEl,a.insertAfterEl=this.settings.insertAfterEl,a}}),s=function(a){return a=a||{},a.experiment||(a.experiment={experiment:a.experimentName,variant:a.experimentVariant,service:a.experimentService}),new r(a)};return{Ads:s}}),define("core/api",["jquery","underscore","backbone","core/config","core/utils"],function(a,b,c,d,e){"use strict";function f(a){return l.href=a,l.origin||l.protocol+"//"+l.hostname+(l.port?":"+l.port:"")}function g(a){return a.replace(/^(http:)?\/\//,"https://")}function h(c){c=b.defaults(c,m),c.traditional=!0,f(window.location.href)!==f(c.url)&&(c.xhrFields={withCredentials:!0}),c.omitDisqusApiKey||(c.data=c.data||{},window.FormData&&c.data instanceof window.FormData?c.url=e.serialize(c.url,{api_key:d.keys.api}):c.data.api_key=d.keys.api);var g=c.error;return c.error=function(a){n.trigger("error",a), +b.isFunction(g)&&g(a)},a.ajax(c)}function i(a){return/(https?:)?\/\//.test(a)?g(a):d.urls.api+a}function j(a,c){return c=c||{},c.url=i(a),c.omitDisqusApiKey||(c.data=b.extend(c.data||{},{api_key:d.keys.api})),n.trigger("call",c),h(c).always(b.bind(this.trigger,this,"complete",c))}var k=window.document,l=k.createElement("a"),m={},n={ERROR_CODES:{OBJ_NOT_FOUND:8,MAX_ITEMS_REACHED:24},ajax:h,call:j,getURL:i,defaults:function(a){Object.keys(a).forEach(function(c){var d=a[c],e=m[c];b.isObject(d)&&b.isObject(e)?b.extend(e,d):m[c]=d})},headers:function(a){var c=b.extend({},m.headers,a);return m.headers=b.pick(c,Boolean),m.headers},makeHttps:g};return b.extend(n,c.Events),n}),define("core/mediaConfig",["underscore","backbone"],function(a,b){"use strict";function c(){var b=window.document.body.offsetWidth,c=d,e=c.length;return a.find(c,function(a,d){return d+1===e||Math.abs(c[d+1]-b)>Math.abs(c[d]-b)})}var d=[320,480,600,800],e=new b.Model({collapsed:!1,defaultIframeHeight:300,mediaPersistedWidths:d,loadedThumbnailWidth:c()});return e.findClosestThumbnailSize=c,e}),define("core/mixins/appliesPublisherClasses",["jquery","underscore","core/switches","remote/config"],function(a,b,c,d){"use strict";function e(){this._getStyleProperty=function(a){var b=this.forum.get(a);return this.config.forceAutoStyles||"auto"===b?this.config[a]:b},this.getTypeface=function(){return this._getStyleProperty("typeface")},this.getColorScheme=function(){return this._getStyleProperty("colorScheme")},this.getAnchorColorScheme=function(){return this.config.anchorColorScheme},this.getFont=function(){return this.forum.get("customFont")},this.convertFontToClass=function(a){return a?a.toLowerCase().replace(/\+/g,"-"):""},this.convertFontToStyle=function(a){return a?a.replace(/\+/g," "):""},this.isFontAllowed=function(a){return!(!a||!d.lounge.font_options)&&d.lounge.font_options.some(function(b){return a===b.name})},this.downloadFont=function(a){var b=window.document,c=b.createElement("style");c.type="text/css";var d=this.convertFontToClass(a.name),e=this.convertFontToStyle(a.name),f=a.category,g='@import url("https://fonts.googleapis.com/css2?family='+a.name+':ital,wght@0,400;0,500;0,600;0,700;1,400;1,700&display=swap"); ',h=["","input","select","textarea"].map(function(a){return"body."+d+" "+a}).join(", ");g+=h+" { font-family: "+e+", "+f+"; }",c.styleSheet?c.styleSheet.cssText=g:c.appendChild(b.createTextNode(g));var i=b.head||b.getElementsByTagName("head")[0]||b.body;i.appendChild(c)},this.applyPublisherClasses=function(){var e=a("body"),f=this.getFont();!f&&c.isFeatureActive("embed_refresh",{forum:this.forum.id})&&"sans-serif"===this.getTypeface()&&(f="Roboto");var g=f&&b.find(d.lounge.font_options,function(a){return a.name===f});g?(this.downloadFont(g),e.addClass(this.convertFontToClass(g.name))):"serif"===this.getTypeface()?e.addClass("serif"):e.addClass("sans-serif"),"dark"===this.getColorScheme()&&e.addClass("dark"),c.isFeatureActive("embed_refresh",{forum:this.forum.id})&&"dark"===this.getAnchorColorScheme()&&e.addClass("dark-anchor")}}return e}),define("core/templates/handlebars.partials",["handlebars"],function(a){a.registerPartial("cardGuestUser",a.template({1:function(a,b,c,d,e){var f,g=null!=b?b:a.nullContext||{},h=a.lambda,i=a.escapeExpression,j=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'
        • \n\n'+(null!=(f=j(c,"if").call(g,null!=b?j(b,"isRefreshEnabled"):b,{name:"if",hash:{},fn:a.program(6,e,0),inverse:a.program(8,e,0),data:e,loc:{start:{line:4,column:0},end:{line:8,column:7}}}))?f:"")+'\n\n'+i(h(null!=b?j(b,"guestText"):b,b))+"\n\n
        • \n"},2:function(a,b,c,d,e){return"highlight"},4:function(a,b,c,d,e){return"avatar--refresh"},6:function(a,b,c,d,e){return'
          G
          \n'},8:function(a,b,c,d,e){var f=a.escapeExpression,g=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return''+f(g(c,\n'},10:function(a,b,c,d,e){return"username--refresh"},compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){var f,g=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return null!=(f=g(c,"if").call(null!=b?b:a.nullContext||{},null!=b?g(b,"guestCount"):b,{name:"if",hash:{},fn:a.program(1,e,0),inverse:a.noop,data:e,loc:{start:{line:1,column:0},end:{line:14,column:7}}}))?f:""},useData:!0})),a.registerPartial("cardGuestVoterText",a.template({1:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return" "+a.escapeExpression(f(c,"gettext").call(null!=b?b:a.nullContext||{},"%(guestCount)s Guest Votes",{name:"gettext",hash:{guestCount:null!=b?f(b,"guestCount"):b},data:e,loc:{start:{line:1,column:26},end:{line:1,column:90}}}))+" "},3:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return" "+a.escapeExpression(f(c,"gettext").call(null!=b?b:a.nullContext||{},"1 Guest Vote",{name:"gettext",hash:{},data:e,loc:{start:{line:1,column:100},end:{line:1,column:126}}}))+" "},compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){var f,g=null!=b?b:a.nullContext||{},h=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return(null!=(f=h(c,"if").call(g,h(c,"gt").call(g,null!=b?h(b,"guestCount"):b,1,{name:"gt",hash:{},data:e,loc:{start:{line:1,column:6},end:{line:1,column:23}}}),{name:"if",hash:{},fn:a.program(1,e,0),inverse:a.program(3,e,0),data:e,loc:{start:{line:1,column:0},end:{line:1,column:134}}}))?f:"")+"\n"},useData:!0})),a.registerPartial("cardOtherUserText",a.template({1:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return" "+a.escapeExpression(f(c,"gettext").call(null!=b?b:a.nullContext||{},"%(guestCount)s Others",{name:"gettext",hash:{guestCount:null!=b?f(b,"guestCount"):b},data:e,loc:{start:{line:1,column:26},end:{line:1,column:85}}}))+" "},3:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return" "+a.escapeExpression(f(c,"gettext").call(null!=b?b:a.nullContext||{},"1 Other",{name:"gettext",hash:{},data:e,loc:{start:{line:1,column:95},end:{line:1,column:116}}}))+" "},compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){var f,g=null!=b?b:a.nullContext||{},h=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return(null!=(f=h(c,"if").call(g,h(c,"gt").call(g,null!=b?h(b,"guestCount"):b,1,{name:"gt",hash:{},data:e,loc:{start:{line:1,column:6},end:{line:1,column:23}}}),{name:"if",hash:{},fn:a.program(1,e,0),inverse:a.program(3,e,0),data:e,loc:{start:{line:1,column:0},end:{line:1,column:124}}}))?f:"")+"\n"},useData:!0})),a.registerPartial("cardUser",a.template({1:function(a,b,c,d,e){return"highlight"},3:function(a,b,c,d,e){return'data-action="profile"'},5:function(a,b,c,d,e){var f,g=null!=b?b:a.nullContext||{},h=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'\n'+(null!=(f=h(c,"if").call(g,null!=b?h(b,"isRefreshEnabled"):b,{name:"if",hash:{},fn:a.program(8,e,0),inverse:a.program(9,e,0),data:e,loc:{start:{line:5,column:0},end:{line:13,column:7}}}))?f:"")+'\n\n'+a.escapeExpression(a.lambda(null!=b?h(b,"name"):b,b))+"\n\n"},6:function(a,b,c,d,e){return"avatar--refresh"},8:function(a,b,c,d,e){var f,g=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return null!=(f=g(c,"if").call(null!=b?b:a.nullContext||{},null!=(f=null!=b?g(b,"avatar"):b)?g(f,"isCustom"):f,{name:"if",hash:{},fn:a.program(9,e,0),inverse:a.program(11,e,0),data:e,loc:{start:{line:6,column:0},end:{line:10,column:7}}}))?f:""},9:function(a,b,c,d,e){var f,g=a.escapeExpression,h=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return''+g(h(c,\n'},11:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'
          '+a.escapeExpression(a.lambda(null!=b?f(b,"initials"):b,b))+"
          \n"},13:function(a,b,c,d,e){return"username--refresh"},15:function(a,b,c,d,e){var f,g=null!=b?b:a.nullContext||{},h=a.lambda,i=a.escapeExpression,j=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'\n'+(null!=(f=j(c,"if").call(g,null!=b?j(b,"isRefreshEnabled"):b,{name:"if",hash:{},fn:a.program(8,e,0),inverse:a.program(9,e,0),data:e,loc:{start:{line:20,column:0},end:{line:28,column:7}}}))?f:"")+'\n\n'+i(h(null!=b?j(b,"name"):b,b))+"\n\n"},compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){var f,g=null!=b?b:a.nullContext||{},h=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'
        • \n'+(null!=(f=h(c,"if_all").call(g,h(c,"switch").call(g,"sso_less_branding",{name:"switch",hash:{forum:null!=b?h(b,"forumId"):b},data:e,loc:{start:{line:3,column:10},end:{line:3,column:52}}}),h(c,"ne").call(g,null!=b?h(b,"isSSOProfileUrl"):b,!0,{name:"ne",hash:{},data:e,loc:{start:{line:3,column:53},end:{line:3,column:78}}}),{name:"if_all",hash:{},fn:a.program(5,e,0),inverse:a.program(15,e,0),data:e,loc:{start:{line:3,column:0},end:{line:33,column:11}}}))?f:"")+"
        • \n"},useData:!0})),a.registerPartial("carouselArrowLeft",a.template({compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){return'\n'},useData:!0})),a.registerPartial("carouselArrowRight",a.template({compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){return'\n'},useData:!0})),a.registerPartial("channelsHeader",a.template({compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){var f=null!=b?b:a.nullContext||{},g=a.escapeExpression,h=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'
          \n
          \n\n
          \n
          \n

          '+g(h(c,"gettext").call(f,"Channels",{name:"gettext",hash:{},data:e,loc:{start:{line:6,column:36},end:{line:6,column:58}}}))+'

          \n
          \n
          \n

          '+g(h(c,"gettext").call(f,"Places to start your own discussions.",{name:"gettext",hash:{},data:e,loc:{start:{line:9,column:55},end:{line:9,column:106}}}))+"

          \n"},useData:!0})),a.registerPartial("genericFollowButton",a.template({1:function(a,b,c,d,e){return" active"},compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){var f,g=null!=b?b:a.nullContext||{},h=a.escapeExpression,i=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'\n"},useData:!0}))}),define("core/extensions/helpers/eq",[],function(){"use strict";return function(a,b){return a===b}}),define("core/extensions/helpers/ne",[],function(){"use strict";return function(a,b){return a!==b}}),define("core/extensions/helpers/gt",[],function(){"use strict";return function(a,b){return a>b}}),define("core/extensions/helpers/lt",[],function(){"use strict";return function(a,b){return a=b}}),define("core/extensions/helpers/le",[],function(){"use strict";return function(a,b){return a<=b}}),define("core/extensions/helpers/typeof",[],function(){"use strict";return function(a,b){return typeof a===b}}),define("core/extensions/helpers/notNull",[],function(){"use strict";return function(a){return null!==a}}),define("core/extensions/helpers/any",[],function(){"use strict";return function(){for(var a=arguments.length,b=0;b"+a.escapeExpression(e)+""),new a.SafeString(d.join(""))}}),define("core/extensions/helpers/now",["moment"],function(a){"use strict";return function(b){return a().format(b)}}),define("core/extensions/helpers/ternary",[],function(){"use strict";return function(a,b,c){return a?b:c}}),define("core/extensions/handlebars.helpers",["require","handlebars","./helpers/eq","./helpers/ne","./helpers/gt","./helpers/lt","./helpers/ge","./helpers/le","./helpers/typeof","./helpers/notNull","./helpers/any","./helpers/if_any","./helpers/if_all","./helpers/switch","./helpers/partial","./helpers/getPartial","./helpers/gettext","./helpers/urlfor","./helpers/html","./helpers/with","./helpers/each","./helpers/log","./helpers/debug","./helpers/geturl","./helpers/tag","./helpers/now","./helpers/ternary"],function(a){"use strict";var b=a("handlebars");return b.registerHelper("eq",a("./helpers/eq")),b.registerHelper("ne",a("./helpers/ne")),b.registerHelper("gt",a("./helpers/gt")),b.registerHelper("lt",a("./helpers/lt")),b.registerHelper("ge",a("./helpers/ge")),b.registerHelper("le",a("./helpers/le")),b.registerHelper("typeof",a("./helpers/typeof")),b.registerHelper("notNull",a("./helpers/notNull")),b.registerHelper("any",a("./helpers/any")),b.registerHelper("if_any",a("./helpers/if_any")),b.registerHelper("if_all",a("./helpers/if_all")),b.registerHelper("switch",a("./helpers/switch")),b.registerHelper("partial",a("./helpers/partial")),b.registerHelper("getPartial",a("./helpers/getPartial")),b.registerHelper("gettext",a("./helpers/gettext")),b.registerHelper("urlfor",a("./helpers/urlfor")),b.registerHelper("html",a("./helpers/html")),b.registerHelper("with",a("./helpers/with")),b.registerHelper("each",a("./helpers/each")),b.registerHelper("log",a("./helpers/log")),b.registerHelper("debug",a("./helpers/debug")),b.registerHelper("geturl",a("./helpers/geturl")),b.registerHelper("tag",a("./helpers/tag")),b.registerHelper("now",a("./helpers/now")),b.registerHelper("ternary",a("./helpers/ternary")),b}),define("core/templates/alert",["handlebars","core/templates/handlebars.partials","core/extensions/handlebars.helpers"],function(a){return a.template({1:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'\n'},3:function(a,b,c,d,e){var f,g=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return(null!=(f=a.lambda(null!=b?g(b,"message"):b,b))?f:"")+"\n"},5:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return a.escapeExpression(a.lambda(null!=b?f(b,"message"):b,b))+"\n"},compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){var f,g=null!=b?b:a.nullContext||{},h=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'×\n\n'+(null!=(f=h(c,"if").call(g,null!=b?h(b,"icon"):b,{name:"if",hash:{},fn:a.program(1,e,0),inverse:a.noop,data:e,loc:{start:{line:3,column:0},end:{line:5,column:7}}}))?f:"")+(null!=(f=h(c,"if").call(g,null!=b?h(b,"safe"):b,{name:"if",hash:{},fn:a.program(3,e,0),inverse:a.program(5,e,0),data:e,loc:{start:{line:6,column:0},end:{line:10,column:7}}}))?f:"")+"\n"},useData:!0})}),define("core/views/AlertView",["backbone","core/templates/alert"],function(a,b){"use strict";var c=a.View.extend({defaultClassName:"alert",events:{"click [data-action=dismiss]":"dismiss"},initialize:function(a){this.options=a,this.message=a.message,this.safe=a.safe,this.type=a.type,this.className=a.className||this.defaultClassName},render:function(){var a=this.$el;return a.html(b({message:this.message,safe:this.safe,icon:Boolean(this.type),iconType:"error"===this.type||"warn"===this.type?"warning":this.type})),a.attr("class",this.className),this.type&&a.addClass(this.type),this},dismiss:function(a){a&&a.preventDefault&&a.preventDefault(),this.remove(),this.trigger("dismiss")}});return c}),define("core/mixins/withAlert",["underscore","core/views/AlertView"],function(a,b){"use strict";var c={alert:function(c,d){a.isObject(d)||(d={});var e=d.target||this._alertSelector;this.dismissAlert();var f=this._alert=new b(a.extend({message:c},d));if(this.listenToOnce(this._alert,"dismiss",function(){this._alert=null}),f.render(),e){var g=this.$el.find(e);g.length?g.prepend(f.el):this.listenToOnce(this,"threadView:render",function(){return this.alert(c,d)})}else this.el.parentNode&&this.el.parentNode.insertBefore(f.el,this.el);return f},dismissAlert:function(a){this._alert&&(a&&!a(this._alert)||(this.stopListening(this._alert),this._alert.dismiss(),this._alert=null))},getAlert:function(){return this._alert||null},setAlertSelector:function(a){this._alertSelector=a}},d=function(){return a.extend(this,c)};return d}),define("core/models/ThreadVote",["backbone"],function(a){"use strict";var b=a.Model.extend({defaults:{score:0}});return b}),define("core/models/Vote",["backbone"],function(a){"use strict";var b=a.Model.extend({defaults:{score:0}});return b}),define("core/constants/voteConstants",["exports"],function(a){"use strict";a.VOTING_TYPES={DETAILED:0,DOWNVOTE_LIMITED:1,DOWNVOTE_DISABLED:2,DISABLED:3},a.DEFAULT_VOTING_TYPE=a.VOTING_TYPES.DETAILED}),define("core/time",[],function(){"use strict";function a(a){return a.indexOf("+")>=0?a:a+"+00:00"}var b="YYYY-MM-DDTHH:mm:ssZ";return{ISO_8601:b,assureTzOffset:a}}),define("core/models/BaseUser",["backbone","core/config"],function(a,b){"use strict";var c=a.Model.extend({defaults:{about:null,avatar:{cache:b.urls.avatar.generic,permalink:b.urls.avatar.generic},connections:{},badges:[],email:null,isAnonymous:!0,isFollowedBy:null,isFollowing:null,joinedAt:null,name:null,profileUrl:null,url:null,username:null,numPosts:null,numFollowing:null,numForumsFollowing:null,numFollowers:null,numLikesReceived:null,isFlagged:null},hasValidAvatar:function(a){var b=a?a.avatar:this.get("avatar");return b&&b.cache},isAnonymous:function(){return!this.get("id")},isRegistered:function(){return!this.isAnonymous()},validate:function(a){if(!this.hasValidAvatar(a))return"None of the avatar related properties can be null, undefined or empty on User models."},toJSON:function(){var b=a.Model.prototype.toJSON.apply(this,arguments);return b.thread={},this.hasValidAvatar()||(b.avatar=this.defaults.avatar),b.isRegistered=this.isRegistered(),b}});return c}),define("core/models/User",["jquery","underscore","moment","core/config","core/time","core/utils","core/strings","core/api","core/models/BaseUser"],function(a,b,c,d,e,f,g,h,i){"use strict";function j(a,b,c){a[b]=a[b]||[],a[b].push(c)}var k=g.get,l=i.extend({url:h.getURL("users/details"),validate:function(c){var d={};if(c.display_name&&(c.display_name=a.trim(c.display_name)),c.display_name||j(d,"display_name",k("Please enter your name.")),c.email||j(d,"email",k("Please enter your email address.")),f.validateEmail(c.email)||j(d,"email",k("Invalid email address.")),this.isNew()&&(c.password?c.password.lengthl.MAX_NAME_LEN&&j(d,"name",g.interpolate(k("Name must have less than %(maxLength)s characters."),{maxLength:l.MAX_NAME_LEN}))),c.location&&c.location.length>l.MAX_LOCATION_LEN&&j(d,"location",g.interpolate(k("Location must have less than %(maxLength)s characters."),{maxLength:l.MAX_LOCATION_LEN})),c.url&&(c.url.length>l.MAX_URL_LEN&&j(d,"url",g.interpolate(k("Site must have less than %(maxLength)s characters."),{maxLength:l.MAX_URL_LEN})),f.isUrl(c.url)||j(d,"url",k("Please enter a valid site."))),!b.isEmpty(d))return d},prepareFetchOptions:function(a){a=a?b.clone(a):{};var c={};return this.get("id")?c.user=this.get("id"):this.get("username")&&(c.user="username:"+this.get("username")),b.extend(c,a.data),a.data=c,a},fetch:function(a){return a=this.prepareFetchOptions(a),i.prototype.fetch.call(this,a)},parse:function(a){var b=a.response||a;return b=this.handleBadgesUpdate(b)},register:function(a){var c=this;return a=a||{},h.call("internal/users/register.json",{data:b.extend(this.toRegisterJSON(),{gRecaptchaResponse:a.gRecaptchaResponse}),method:"POST",success:function(d){h.call("users/acceptTerms",{method:"POST"}),c.set(b.extend({},d.response,{hasAcceptedGdprTerms:!0})),a.success&&a.success(d)},error:a.error})},saveAvatar:function(a){var b=new window.FormData;return b.append("avatar_file",a),b.append("api_key",d.keys.api),h.call("internal/users/updateAvatar.json",{method:"post",data:b,cache:!1,contentType:!1,processData:!1})},saveProfile:function(){return h.call("users/updateProfile.json",{method:"POST",data:{name:this.get("name"),about:this.get("about"),location:this.get("location"),url:this.get("url")}})},toRegisterJSON:function(){return b.pick(this.toJSON(),"display_name","email","password")},isSession:function(a){return a.user.id&&a.user.id===this.id},isEditable:function(a){return this.isSession(a)&&!this.get("remote")},toJSON:function(a){a=a||{};var b=i.prototype.toJSON.call(this),c=this.collection&&this.collection.thread;return b.thread.canModerate=Boolean(c&&c.isModerator(this)),a.session&&(b.isSession=this.isSession(a.session),b.isEditable=this.isEditable(a.session)),b},_changeFollowState:function(a){this.set({isFollowing:a,numFollowers:Math.max(0,this.get("numFollowers")+(a?1:-1))});var b="users/"+(a?"follow":"unfollow"),c=this;return h.call(b+".json",{data:{target:this.get("id")},method:"POST",success:function(a){c.trigger("sync",c,a,{})}})},follow:function(){return this._changeFollowState(!0)},unfollow:function(){return this._changeFollowState(!1)},_changeBlockState:function(a){var b="users/block/"+(a?"create":"delete"),c=this;return h.call(b+".json",{data:{user:this.get("id")},method:"POST",success:function(a){c.set(a.response)}})},block:function(){return this._changeBlockState(!0)},unblock:function(){return this._changeBlockState(!1)},report:function(a){var b=this;return h.call("users/report.json",{data:{reason:a,user:this.get("id")},method:"POST",success:function(){b.set("isFlagged",!0)}})},toggleFollowState:function(){return this._changeFollowState(!this.get("isFollowing"))},registeredLessThan:function(a,b){var d=e.assureTzOffset(this.get("joinedAt")),f=c().subtract(a,b);return c(d).isAfter(f)},registeredToday:function(){return this.registeredLessThan(1,"day")},registeredThisWeek:function(){return this.registeredLessThan(1,"week")},shouldHomeOnboard:function(){return!this.get("homeOnboardingComplete")},setHomeOnboardComplete:function(a){this.updateFlags({homeOnboardingComplete:a}),a&&this.listenTo(this,"change:homeOnboardingComplete",b.bind(this.set,this,"homeOnboardingComplete",a,{silent:!0}))},handleBadgesUpdate:function(a){if(this.collection&&this.collection.thread&&this.collection.thread.forum&&this.collection.thread.forum.get("badges")){var b=this.collection.thread.forum.get("badges");a.badges=a.badges?a.badges.filter(function(a){return b[a.id]}):[]}return a},updateFlags:function(a){return this.set(a),h.call("internal/users/updateFlags.json",{data:b.mapObject(a,function(a){return a?1:0}),method:"POST"})}},{MIN_PASSWORD_LEN:6,MIN_NAME_LEN:2,MAX_NAME_LEN:30,MAX_LOCATION_LEN:255,MAX_URL_LEN:200});return l}),define("core/utils/html",[],function(){"use strict";var a="...",b=a.length,c=function(a){var b;try{b=(new window.DOMParser).parseFromString(" ","text/html")}catch(c){}return b||(b=window.document.implementation.createHTMLDocument("")),b.body&&(b.body.innerHTML=a),b};return{stripTags:function(a){var b=c(a).body;return(b.textContent||b.innerText).replace(/\r?\n/g," ")},replaceAnchors:function(a,d){var e=c(a);return[].forEach.call(e.querySelectorAll("a"),function(a){var c=a.getAttribute("href")||"",e=a.innerHTML,f=d(a);0===c.indexOf(e.slice(0,-b))?e=f:c.length&&e.indexOf(c)!==-1?e=e.replace(c,f):e+=" "+f,a.insertAdjacentHTML("afterend",e),a.parentNode.removeChild(a)}),e.body.innerHTML.trim()}}}),define("core/advice",["underscore"],function(a){"use strict";function b(){a.each(["before","after","around"],function(a){this[a]=function(b,d){return"function"==typeof this[b]?this[b]=c[a](this[b],d):this[b]=d,this[b]}},this)}var c={around:function(b,c){ +return function(){var d=a.toArray(arguments);return c.apply(this,[a.bind(b,this)].concat(d))}},before:function(b,d){return c.around(b,function(){var b=a.toArray(arguments),c=b.shift();return d.apply(this,b),c.apply(this,b)})},after:function(b,d){return c.around(b,function(){var b=a.toArray(arguments),c=b.shift(),e=c.apply(this,b);return d.apply(this,b),e})}};return{withAdvice:b}}),define("core/models/mixins",["underscore","moment","core/time"],function(a,b,c){"use strict";function d(){b.locale("en",{relativeTime:{future:"%s from now",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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}}),this._getCreatedMoment=a.memoize(function(a){var d=this.get(a||"createdAt");if(d)return b(c.assureTzOffset(d),c.ISO_8601)},function(a){return this.get(a||"createdAt")}),this.getRelativeCreatedAt=function(a){var b=this._getCreatedMoment(a);return b&&b.from(Number(new Date))},this.getFormattedCreatedAt=a.memoize(function(a){var b=this._getCreatedMoment(a);return b&&b.format("LLLL")},function(a){return this.get(a||"createdAt")})}return{withCreatedAt:d}}),define("core/collections/UserCollection",["jquery","backbone","core/models/User"],function(a,b,c){"use strict";var d=b.Collection.extend({model:c,initialize:function(a,c){b.Collection.prototype.initialize.apply(this,arguments),this.thread=c&&c.thread},fetch:function(){return a.when(!0)}});return d}),define("core/collections/VotersUserCollection",["underscore","backbone","core/api","core/collections/UserCollection"],function(a,b,c,d){"use strict";var e=d.extend({LIMIT:50,url:function(){return c.getURL("posts/listUsersVotedPost")},initialize:function(a,b){this.postId=b.postId,this.threadId=b.threadId},fetch:function(c){return b.Collection.prototype.fetch.call(this,a.extend({data:{post:this.postId,thread:this.threadId,vote:c.vote,limit:this.LIMIT}},c))}});return e}),define("core/collections/VoteCollection",["backbone","core/models/Vote"],function(a,b){"use strict";var c=a.Collection.extend({model:b});return c}),define("core/models/Post",["jquery","underscore","backbone","moment","core/config/urls","core/api","core/strings","core/time","core/utils","core/utils/html","core/advice","remote/config","core/models/mixins","core/collections/VotersUserCollection","core/collections/VoteCollection"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){"use strict";var p=1e3,q=0,r=function(){var b=a.now();return!(b-q0?(e.likes+=a,e.dislikes+=b):a<0?(e.dislikes-=a,e.likes-=b):b>0?e.likes-=b:e.dislikes+=b,e.points+=d,c&&(1===a?(this.getUpvotersUserCollection().add(c),this.getDownvotersUserCollection().remove(c)):(this.getDownvotersUserCollection().add(c),this.getUpvotersUserCollection().remove(c))),this.set(e),d)},vote:function(a){if(!r())return 0;var b=this,c=b._vote(a,b.get("userScore"));if(0!==c){var d=b.author?b.author.get("numLikesReceived"):0;1===b.get("userScore")?d-=1:1===a&&(d+=1),b.set("userScore",a),f.call("posts/vote.json",{data:{post:b.id,vote:a},method:"POST",success:function(c){b.votes.add({id:c.response.id,score:a},{merge:!0}),b.author&&b.author.set("numLikesReceived",d)}})}},_delete:function(){return this.set({isApproved:!1,isDeleted:!0}),f.call("posts/remove.json",{data:{post:this.id},method:"POST"})},spam:function(){this.set({isApproved:!1,isDeleted:!0,isSpam:!0}),this.trigger("spam"),f.call("posts/spam.json",{data:{post:this.id},method:"POST"})},_create:function(a,b){var c=this,d=a.attributes,e={thread:d.thread,message:d.raw_message,rating:d.rating};return d.parent&&(e.parent=d.parent),d.author_name&&(e.author_name=d.author_name,e.author_email=d.author_email),f.call("posts/create.json",{data:e,method:"POST",success:function(a){c.set(a.response),b.success&&b.success()},error:b.error})},_update:function(a,b){var c=this,d=a.attributes,e={post:d.id,message:d.raw_message,rating:d.rating};return f.call("posts/update.json",{data:e,method:"POST",success:function(a){c.set(a.response),b.success&&b.success()},error:b.error})},_read:function(a,b){var c=this;return b=b||{},f.call("posts/details.json",{data:{post:c.id},method:"GET",success:function(a){c.set(a.response),b.success&&b.success()},error:b.error})},sync:function(a,b,c){c=c||{};var d=c.error;switch(d&&(c.error=function(a){var b={};try{b=JSON.parse(a.responseText)}catch(c){}d(b)}),a){case"create":return this._create(b,c);case"update":return this._update(b,c);case"delete":return this._delete();case"read":return this._read(b,c);default:return null}},storageKey:function(){if(this.isNew()&&this.getThreadId())return["drafts","thread",this.getThreadId(),"parent",this.get("parent")||0].join(":")}},{formatMessage:function(){var a=/(?:\r\n|\r|\n){2,}/,c=/\r\n|\r|\n/;return function(d){var e=b.chain(d.split(a)).compact().value(),f=b.map(e,function(a){return b.chain(a.split(c)).compact().map(b.escape).join("
          ").value()}).join("

          ");return"

          "+f+"

          "}}()});return m.withCreatedAt.call(t.prototype),k.withAdvice.call(t.prototype),t.withAuthor=function(a){this.around("set",function(c,d,e,f){var g;if(null==d)return this;"object"==typeof d?(g=d,f=e):(g={},g[d]=e);var h=g.author;if(h){if(b.isString(h)||b.isNumber(h)){var i=h;h={},h[a.prototype.idAttribute||"id"]=i}var j=this.collection||this.author&&this.author.collection,k=j&&j.thread&&j.thread.forum;if(this.author&&this.author.get("badges").length&&this.author.get("badges")[0].id)h.badges=this.author.get("badges");else if(k&&k.get("badges")&&h.badges){var l=[],m=h.badges||[],n=k.get("badges");m.forEach(function(a){n[a]&&l.push(n[a])}),h.badges=l}this.author=new a(h),this.trigger("changeRelated:author"),delete g.author}return c.call(this,g,f)}),this.around("toJSON",function(a){var c=a.apply(this,b.rest(arguments));return this.author&&(c.author=this.author.toJSON()),c})},t.withMediaCollection=function(a){this.after("set",function(c){c&&"string"!=typeof c&&(b.isUndefined(c.media)||(this.media?this.media.reset(c.media):this.media=new a(c.media),delete c.media))}),this.around("toJSON",function(a){var c=a.apply(this,b.rest(arguments));return this.media&&(c.media=this.media.toJSON()),c})},t}),define("core/utils/threadRatingsHelpers",["core/utils/object/get"],function(a){"use strict";var b={};return b.isThreadRatingsEnabled=function(b,c){return!!(b&&b.forum&&c&&c.id===b.forum)&&Boolean(a(b,["ratingsEnabled"])&&a(c,["settings","threadRatingsEnabled"])&&a(c,["features","threadRatings"]))},b.isThreadModelRatingsEnabled=function(a){if(!a||!a.forum)return!1;var b=a.forum.get("settings"),c=a.forum.get("features");return Boolean(a.get("ratingsEnabled")&&b&&b.threadRatingsEnabled&&c&&c.threadRatings)},b.isForumRatingsEnabled=function(b){return!!b&&Boolean(a(b,["settings","threadRatingsEnabled"])&&a(b,["features","threadRatings"]))},b.isForumModelRatingsEnabled=function(a){if(!a)return!1;var b=a.get("settings"),c=a.get("features");return Boolean(b&&b.threadRatingsEnabled&&c&&c.threadRatings)},b}),define("core/models/Thread",["underscore","backbone","loglevel","core/config/urls","core/utils","core/api","core/config","core/advice","core/UniqueModel","core/utils/threadRatingsHelpers","core/models/User"],function(a,b,c,d,e,f,g,h,i,j,k){"use strict";var l=b.Model,m=l.prototype,n=l.extend({defaults:{author:null,category:null,createdAt:null,forum:null,identifiers:[],ipAddress:null,isClosed:!1,isDeleted:!1,hasStreaming:!1,link:null,message:null,slug:null,title:null,userSubscription:!1,posts:0,likes:0,dislikes:0,userScore:0},initialize:function(a,b){b=b||{},this.moderators=b.moderators,this.forum=b.forum,this.on("change:userScore",function(){var a=this.get("userScore");a>0&&0===this.get("likes")&&this.set("likes",a)},this)},_vote:function(a,b){var c=a-b;return 0===c?c:(this.set("likes",this.get("likes")+c),c)},vote:function(a){var b=this,c=b._vote(a,b.get("userScore"));0!==c&&(this.set("userScore",a),f.call("threads/vote.json",{data:{thread:this.id,vote:a},method:"POST",success:function(a){a.response.id&&b.trigger("vote:success",a)}}))},fetch:function(a){var b,d=this,e=d.attributes;a=a||{},b=e.identifier?"ident:"+e.identifier:"link:"+e.url,f.call("threads/details.json",{data:{thread:b,forum:e.forum},success:function(b){d.set(b.response),a.success&&a.success()},error:function(){g.debug?d.save({},{success:a.success}):c.info("Couldn't find thread; not creating in production.")}})},_toggleState:function(a,b){b||(b={});var c=a?"open.json":"close.json";return this.set("isClosed",!a),f.call("threads/"+c,{method:"POST",data:{thread:this.id},success:b.success,error:b.error})},open:function(a){return this._toggleState(!0,a)},close:function(a){return this._toggleState(!1,a)},premoderate:function(b,c){return this.set("validateAllPosts",b),f.call("threads/update",a.extend({},c,{method:"POST",data:a.extend({thread:this.id,validateAllPosts:b?1:0},c&&c.data)}))},sync:function(){var a=this,b=a.attributes;f.call("threads/create.json",{data:{title:b.title,forum:b.forum,identifier:b.identifier,url:b.url},method:"POST",success:function(b){a.set(b.response)}})},fetchRatings:function(){var a=this,b={thread:a.id};return f.call("threads/ratingsSummary.json",{data:b,method:"GET",success:function(b){a.set("ratings",b.response)}})},toggleRatingsEnabled:function(){var a=this;if(j.isForumModelRatingsEnabled(a.forum)){var b=a.get("ratingsEnabled"),c={thread:a.id,ratingsEnabled:b?0:1};return a.set("ratingsEnabled",!b),f.call("threads/update.json",{data:c,method:"POST"})}},incrementPostCount:function(a){var b=this.get("posts")+a;this.set("posts",b>0?b:0)},isModerator:function(b){var c;if(this.moderators)return c=b instanceof k||a.isObject(b)?b.id:b,c=parseInt(c,10),a(this.moderators).contains(c)},subscribe:function(a){a=a!==!1;var b=this.get("userSubscription");if(b!==a){this.set("userSubscription",a);var c=a?"subscribe.json":"unsubscribe.json",d={thread:this.id};return f.call("threads/"+c,{data:d,method:"POST"})}},twitterText:function(a){var b=140-(a.length+1),c=this.get("clean_title");return c=e.niceTruncate(c,b)},permalink:function(){return this.get("url")||this.get("link")||this.currentUrl},shortLink:function(){return d.shortener+"/t/"+Number(this.id).toString(36)},toJSON:function(){var a=m.toJSON.call(this);return a.permalink=this.permalink(),a.shortLink=this.shortLink(),a},getDiscussionRoute:function(a){var b=["","home","discussion",this.forum.id,this.get("slug"),""];return a=a||this.forum.channel,a&&(a=a.attributes||a,b.splice(2,0,"channel",a.slug)),b.join("/")}});return h.withAdvice.call(n.prototype),n.withThreadVoteCollection=function(a){this.after("initialize",function(){this.votes=new a,this.on("vote:success",function(a){this.votes.get(a.response.id)||this.votes.add({id:a.response.id,score:a.response.vote,currentUser:!0})},this)})},n.withPostCollection=function(b){this.after("initialize",function(c){c=c||{},this.posts=new b(c.posts,{thread:this,cursor:c.postCursor,order:c.order,perPage:this.postsPerPage}),this.listenTo(this.posts,"add reset",function(b){b=b.models?b.models:[b],this.users&&a.each(b,function(a){this.users.get(a.author.id)||this.users.add(a.author)}),this.recalculatePostCount()}),this.listenTo(this.posts,"change:isDeleted change:isFlagged",function(a,b){b&&this.incrementPostCount(-1)})}),this.recalculatePostCount=function(){var a=this.get("posts");a>50||(a=this.posts.reduce(function(a,b){return b.isPublic()?a+1:a},0),this.set("posts",a))}},i.addType("Thread",n),n}),define("core/models/Forum",["backbone","core/UniqueModel","core/api"],function(a,b,c){"use strict";var d=a.Model.extend({defaults:{settings:{},badges:[],followUrl:"forums/follow",unfollowUrl:"forums/unfollow",isFollowing:!1},initialize:function(a,b){b&&b.channel&&(this.channel=b.channel),this.getFeatures(),this.on("change:id",this.getFeatures),this.on("change:id",this.getBadges)},_changeFollowingState:function(a){return c.call(a,{method:"POST",data:{target:this.get("id")}})},follow:function(){return this.set("isFollowing",!0),this._changeFollowingState(this.get("followUrl"))},unfollow:function(){return this.set("isFollowing",!1),this._changeFollowingState(this.get("unfollowUrl"))},toggleFollowed:function(){if(this.channel&&this.channel.get("options").isCurationOnlyChannel)return this.channel.toggleFollowed();var a=this.get("isFollowing")?this.unfollow():this.follow();return this.trigger("toggled:isFollowing"),a},getFeatures:function(){var a=this;a.id&&c.call("forums/details",{data:{forum:this.id,attach:"forumFeatures"},success:function(b){b&&b.response&&a.set("features",b.response.features)}})},getBadges:function(){if(this.id&&this.get("badges")){var a={},b={};b.id=this.get("pk"),b.url=this.get("id"),this.get("badges").forEach(function(c){c.forum=b,a[c.id]=c}),this.set("badges",a)}}});return b.addType("Forum",d),d}),define("core/models/Media",["underscore","backbone","core/api","core/UniqueModel"],function(a,b,c,d){"use strict";var e=b.Model.extend({idAttribute:"url",defaults:{mediaType:null,html:"",htmlWidth:null,htmlHeight:null,thumbnailUrl:"",thumbnailWidth:null,thumbnailHeight:null,url:"",urlRedirect:"",resolvedUrl:"",resolvedUrlRedirect:"",title:"",description:"",providerName:""},parse:function(a){return a.response},sync:function(b,d,e){if("read"!==b)throw new Error('Media models do not support methods other than "read".');return c.call("media/details.json",a.extend({method:"POST",data:{url:this.get("url"),forum:e.forum}},e))}},{MEDIA_TYPES:{IMAGE:"1",IMAGE_UPLOAD:"2",YOUTUBE_VIDEO:"3",WEBPAGE:"4",TWITTER_STATUS:"5",FACEBOOK_PAGE:"6",FACEBOOK_POST:"7",FACEBOOK_PHOTO:"8",FACEBOOK_VIDEO:"9",SOUNDCLOUD_SOUND:"10",GOOGLE_MAP:"11",VIMEO_VIDEO:"12",VINE_VIDEO:"14",GIF_VIDEO:"15"},WEBPAGE_TYPES:["4","6","7"]});return d.addType("Media",e),e}),define("core/collections/MediaCollection",["backbone","core/models/Media"],function(a,b){"use strict";var c=a.Collection.extend({model:b});return c}),define("common/models",["require","jquery","underscore","backbone","modernizr","core/api","core/UniqueModel","core/models/User","core/models/Post","core/models/Thread","core/models/Forum","core/collections/MediaCollection","core/utils/object/get","core/utils/url/serialize","core/utils/guid","common/utils","core/utils","common/urls","core/shared/urls","backbone.uniquemodel"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){"use strict";var t=k.extend({defaults:{settings:{}},toJSON:function(){return c.extend(d.Model.prototype.toJSON.apply(this,arguments),{homeUrl:s.apps.home+"home/forums/"+this.id+"/"})}}),u=j.extend({initialize:function(b,d){j.prototype.initialize.apply(this,arguments),d=d||{};var e=this,f=a("common/collections");e.users=new f.UserCollection(d.users,{thread:e}),e.forum&&(e.moderatorList=new f.ModeratorCollection(null,{forum:e.forum.get("id")})),e.posts=new f.SubpaginatedPostCollection(d.posts,{thread:e,cursor:d.postCursor,order:d.order,perPage:q.isMobileUserAgent()?20:50}),e.votes=new f.ThreadVoteCollection,e.posts.on("add reset",function(a){a=a.models?a.models:[a],c.each(a,function(a){e.users.get(a.author.id)||e.users.add(a.author)}),e.recalculatePostCount()}),e.listenTo(e.posts,"change:isDeleted change:isFlagged",function(a,b){b&&e.incrementPostCount(-1)}),e.queue=new f.QueuedPostCollection(null,{thread:e})},recalculatePostCount:function(){var a=this.get("posts");a>50||(a=this.posts.buffer.reduce(function(a,b){var c=b.isPublic()&&(!b.get("sb")||b.isAuthorSessionUser());return c?a+1:a},0),this.set("posts",a))},toJSON:function(){var a=this.get("forum"),b=c.isObject(a)?a.id:a;return c.extend(j.prototype.toJSON.apply(this,arguments),{homeUrl:s.apps.home+"home/discussions/"+b+"/"+this.get("slug")+"/"})}});j.withThreadVoteCollection.call(u.prototype,d.Collection);var v=i.extend({initialize:function(){i.prototype.initialize.apply(this,arguments);var b=a("common/collections");this.usersTyping=new b.TypingUserCollection},isAuthorSessionUser:function(b){var c=a("common/Session"),d=m(b,["user","id"])||c.fromCookie().id;return!!(d&&this.author&&this.author.id)&&this.author.id.toString()===d.toString()},canBeEdited:function(a,b){var c=this.get("editableUntil"),d=(new Date).toISOString();return!b.get("isClosed")&&!this.get("isDeleted")&&a.isLoggedIn()&&this.isAuthorSessionUser(a)&&this.get("raw_message")&&!this.get("isHighlighted")&&!this.get("isSponsored")&&d=2&&("disqus.com"===b[1]||"dev.disqus.org:8000"===b[1])},toJSON:function(){var b=y.apply(this,arguments),c=a("common/Session"),d=c.get(),e=d&&d.get("sso")&&d.get("sso").profile_url;e&&(e=String(e),0===e.indexOf("//")&&(e="https:"+e),/https?:\/\//.test(e)||(e=null),/\{username\}/.test(e)&&b.name||(e=null));var f=this.hasDisqusProfileUrl();return b.isSSOProfileUrl=!f||Boolean(e),f&&e&&(b.profileUrl=e.replace(/\{username\}/gi,encodeURIComponent(b.name))),b}}),g.addType("User",h);var z=h.extend({defaults:c.extend({numPosts:0},h.prototype.defaults)}),A=e.sessionstorage?"sessionStorage":null,B=d.UniqueModel(h,"User",A),C=d.UniqueModel(z,"User",A),D=d.Model.extend({}),E=d.Model.extend({defaults:{id:"",title:"",rating:"g","default":{url:"",height:"",width:""},fixedWidth200:{url:"",height:"",width:""},fixedWidth100:{url:"",height:"",width:""}}});return{Forum:t,Thread:u,Post:v,QueuedPost:w,TypingUser:x,User:h,TopUser:z,Switch:D,SyncedUser:B,SyncedTopUser:C,GifObject:E}}),define("core/models/Channel",["underscore","backbone","core/UniqueModel","core/api","core/models/Forum","core/strings"],function(a,b,c,d,e,f){"use strict";var g=f.get,h=b.Model.extend({defaults:{primaryForum:{},slug:null,name:null,options:{},followUrl:"channels/follow",unfollowUrl:"channels/unfollow"},idAttribute:"slug",initialize:function(a,b){this.buildPrimaryForum(b),this.listenTo(this,"change:primaryForum",this.updatePrimaryForum),this.listenTo(this,"change:primaryCategory",this.updatePrimaryCategory)},buildPrimaryForum:function(){if(!this.primaryForum){var a=this.get("primaryForum");a&&(this.primaryForum=new c(e,a,{channel:this}),this.unset("primaryForum"))}},updatePrimaryForum:function(){var a=this.get("primaryForum");a&&(this.primaryForum||this.buildPrimaryForum(),this.primaryForum.set(a),this.unset("primaryForum"))},updatePrimaryCategory:function(){var a=this.get("primaryCategory"),b=this.primaryCategory;null===a?this.primaryCategory=void 0:b?b.set(a):this.primaryCategory=new c(h,a),this.unset("primaryCategory"),this.trigger("changeRelated:primaryCategory")},fetch:function(c){return c=c?a.clone(c):{},c.data=this.buildFetchData(c.data),b.Model.prototype.fetch.call(this,c)},buildFetchData:function(b){var c=b?a.clone(b):{};return this.id&&(c.channel=this.id),c},url:function(a){return d.getURL(this.constructor.URLS[a]||this.constructor.URLS.read)},sync:function(c,d,e){var f=d.attributes;e=a.extend({url:this.url(c),emulateHTTP:!0},e);var g={bannerColor:f.bannerColor,description:f.description,primaryCategory:d.primaryCategory&&d.primaryCategory.get("slug")||""};switch("default"===e.avatarType?g.avatar="":f.avatar&&!a.isString(f.avatar)&&(g.avatar=f.avatar),"file"!==e.bannerType?g.banner="":f.banner&&!a.isString(f.banner)&&(g.banner=f.banner),c){case"create":e.processData=!1,e.contentType=!1,g.name=f.name,e.data=this.toFormData(a.extend({},g,e.data));break;case"update":e.processData=!1,e.contentType=!1,g.channel=f.slug,e.data=this.toFormData(a.extend({},g,e.data))}return b.sync(c,d,e)},toFormData:function(b){return a.reduce(b,function(b,c,d){return b.append(d,a.isString(c)?c.trim():c),b},new window.FormData)},parse:function(a){return a.response||a},shouldFetch:function(){return!this.get("name")||!this.get("dateAdded")},ensureFetched:function(){this.shouldFetch()&&this.fetch()},validate:function(b){var c=[],d=b.name.trim();d.lengththis.constructor.MAX_NAME_LENGTH&&c.push({attrName:"name",message:f.interpolate(g("Name must have less than %(maxLength)s characters."),{maxLength:this.constructor.MAX_NAME_LENGTH})});var e=b.description.trim();if(e.lengththis.constructor.MAX_DESCRIPTION_LENGTH&&c.push({attrName:"description",message:f.interpolate(g("Description must have less than %(maxLength)s characters."),{maxLength:this.constructor.MAX_DESCRIPTION_LENGTH})}),this.constructor.BANNER_COLORS[b.bannerColor]||c.push({attrName:"bannerColor",message:f.interpolate(g("Banner color must be one of "+a.invoke(a.values(this.constructor.BANNER_COLORS),"toLowerCase").join(", "))+".")}),!a.isEmpty(c))return c},_changeFollowingState:function(b,c){return c=c||{},c.type="POST",c.data=a.extend({target:this.get("slug")},c.data),d.call(b,c)},follow:function(a){return this.primaryForum.set("isFollowing",!0),this._changeFollowingState(this.get("followUrl"),a)},unfollow:function(a){return this.primaryForum.set("isFollowing",!1),this._changeFollowingState(this.get("unfollowUrl"),a)},toggleFollowed:function(){if(this.get("options").isCurationOnlyChannel&&this.primaryForum){var a=this.primaryForum.get("isFollowing")?this.unfollow():this.follow();return this.primaryForum.trigger("toggled:isFollowing"),a}},toJSON:function(){var c=b.Model.prototype.toJSON.call(this);return a.defaults({primaryCategory:this.primaryCategory?this.primaryCategory.toJSON():{}},c)}},{URLS:{read:"channels/details",create:"channels/create",update:"channels/update"},BANNER_COLORS:{gray:g("Gray"),blue:g("Blue"),green:g("Green"),yellow:g("Yellow"),orange:g("Orange"),red:g("Red"),purple:g("Purple")},MIN_NAME_LENGTH:3,MAX_NAME_LENGTH:100,MIN_DESCRIPTION_LENGTH:5,MAX_DESCRIPTION_LENGTH:200});return c.addType("Channel",h),h}),define("core/utils/objectExpander",["underscore","core/UniqueModel","core/models/Channel","core/models/Thread"],function(a,b,c,d){"use strict";return{Channel:c,Thread:d,parseObject:function(b,c){return a.isString(c)?b[c]:c},buildThread:function(c,d){if(d instanceof this.Thread)return d;if(d=this.parseObject(c,d),a.isString(d.author)){var e=d.author.replace("auth.User?id=","");d.author=c["auth.User?id="+e]||e}return new b(this.Thread,d,{forum:this.parseObject(c,d.forum),author:d.author})},buildChannel:function(a,c){return c instanceof this.Channel?c:(c=this.parseObject(a,c),new b(this.Channel,c))}}}),define("core/collections/PaginatedCollection",["underscore","backbone"],function(a,b){"use strict";var c=b.Collection.extend({PER_PAGE:30,initialize:function(b,c){this.cid=a.uniqueId("collection"),c=c||{},this.cursor=c.cursor||{}},ensureFetched:a.memoize(function(){return this.fetch()},function(){return this.cid}),fetch:function(c){return c=c||{},c.data=a.defaults(c.data||{},{cursor:c.cursor||"",limit:c.limit||this.PER_PAGE}),b.Collection.prototype.fetch.call(this,c)},hasPrev:function(){return this.cursor.hasPrev},hasNext:function(){return this.cursor.hasNext},next:function(b){return this.cursor.hasNext?this.fetch(a.extend({},b,{add:!0,remove:!0,cursor:this.cursor.next})):void this.trigger("nodata")},prev:function(b){return this.cursor.hasPrev?this.fetch(a.extend({},b,{add:!0,remove:!0,cursor:this.cursor.prev})):void this.trigger("nodata")},more:function(b){function c(a){f.push(a)}var d=this;if(b=b||{},b.post?!b.post.attributes.hasMore:!this.cursor.hasNext)return void d.trigger("nodata");var e,f=[];if(b.post){var g=this.postCursors[b.post.id];e=g&&g.cursor?g.cursor.next:""}else e=this.cursor.next;return this.on("add",c),this.fetch(a.extend({},b,{add:!0,remove:!1,cursor:e,limit:this.PER_PAGE||this.perPage,success:function(){d.trigger("add:many",f,d,b),d.off("add",c),b.success&&b.success.apply(this,arguments)}}))},parse:function(c){return Array.isArray(c)&&a.every(c,function(a){return a instanceof b.Model})?c:(this.cursor=c.cursor||{hasNext:!1},c.response)},getLength:function(){return this.length}});return c}),define("core/collections/ChannelCollection",["underscore","core/collections/PaginatedCollection","core/UniqueModel","core/api","core/models/Channel","core/utils/objectExpander"],function(a,b,c,d,e,f){"use strict";var g=b.extend({url:d.getURL("channels/list"),model:c.boundModel(e),initialize:function(a,c){b.prototype.initialize.call(this,a,c),c=c||{},this.listName=c.listName},fetch:function(c){return c=c||{},this.listName&&(c.data=a.extend({listName:this.listName},c.data)),b.prototype.fetch.call(this,c)},parse:function(c){return Boolean(c)&&Boolean(c.response)&&a.isArray(c.response)&&(c=a.defaults({response:a.filter(c.response,function(a){return!a||!a.primaryForum||!a.primaryForum.id||"channel-discussdisqus"===a.primaryForum.id})},c)),c=b.prototype.parse.call(this,c),c.items?a.map(c.items,function(a){return f.buildChannel(c.objects,a.reference)}):c}});return g}),define("core/common/cached-storage",["underscore","core/utils/storage"],function(a,b){"use strict";var c=function(a,b){this.namespace=a,this.ttl=b||300,this.cache=this.getFromStorage()};return a.extend(c.prototype,{getItem:function(a){var b=this.cache[a];if(b){if(!this.isExpired(b))return b.value;delete this.cache[a]}},getCurrentTime:function(){return Math.floor((new Date).getTime()/1e3)},persist:function(){b.set(this.namespace,this.cache)},getFromStorage:function(){var c=b.get(this.namespace);return a.isObject(c)?c:{}},isExpired:function(a){return this.getCurrentTime()>a.expiry},setItem:function(a,b){this.cache[a]={value:b,expiry:this.getCurrentTime()+this.ttl},this.persist()},removeItem:function(a){delete this.cache[a],this.persist()},getAll:function(){var b=a.chain(this.cache).map(function(a,b){return this.getItem(b)},this).compact().value();return this.persist(),b}}),c}),define("common/collections",["underscore","backbone","moment","core/api","core/utils/objectExpander","core/utils/storage","core/collections/UserCollection","core/collections/PaginatedCollection","core/collections/ChannelCollection","core/models/ThreadVote","core/UniqueModel","common/models","core/common/cached-storage","core/constants/voteConstants","lounge/common"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){"use strict";var p=b.Collection.extend({model:j}),q=h.extend({PER_PAGE:50,model:k.wrap(l.Post),url:d.getURL("threads/listPostsThreaded"),initialize:function(a,b){ +h.prototype.initialize.apply(this,arguments),b=b||{},this.thread=b.thread,this.setOrder(b.order)},fetch:function(b){return b=b||{},a.extend(b,{data:{limit:this.PER_PAGE,thread:this.thread.id,forum:this.thread.get("forum"),order:this.getOrder()}}),h.prototype.fetch.call(this,b)},getOrder:function(){return this.order},setOrder:function(a){"popular"===a&&this.thread.forum.get("votingType")===n.VOTING_TYPES.DISABLED?this.order="desc":this.order=a}}),r=b.Collection.extend({collection:b.Collection,initialize:function(a,b){this.lounge=o.getLounge(),this.thread=b.thread,this.perPage=b.perPage||20,this.buffer=new this.collection(a,b),this.resetPage(),this.listenTo(this.buffer,"reset",this.resetPage)},resetPage:function(c,d){d=d||{};var e=a.isUndefined(d.customThreadLength)?this.perPage:Math.min(d.customThreadLength,this.perPage),f=this.buffer.slice(0,e);return this.postCursors={},this.fetchedReplies=0,this.trigger("set:done",f),b.Collection.prototype.reset.call(this,f,d)},currentPage:function(){var a=Math.floor((this.length-this.fetchedReplies)/this.perPage);return(this.length-this.fetchedReplies)%this.perPage&&(a+=1),a},setPageFor:function(a,b){var c=this.buffer.get(a),d=this.perPage;c&&(d=this.perPage*Math.floor(this.buffer.indexOf(c)/this.perPage+1)),this.add(this.buffer.slice(0,d),b)},hasNext:function(){return this.buffer.length>this.length||this.buffer.hasNext()},more:function(a){a=a||{};var b=this,c=b.length+b.perPage,d=a.success;a.success=function(){a.post||b.add(b.buffer.slice(0,c)),b.trigger("set:done",b.models),d&&d()};var e=a.post?b.get(a.post.id):null;e&&e.attributes.hasMore?b.collection.prototype.more.call(b,a):!e&&b.buffer.length-1))return this.buffer.parse(a,b);this.postCursors[b.data.post]||(this.postCursors[b.data.post]={}),this.postCursors[b.data.post].cursor=a.cursor,b.post.set("hasMore",a.cursor.hasNext),this.fetchedReplies+=a.response.length;var c=this.buffer.indexOf(b.post),d=this.getDescendantsFromBuffer(b.post);return d&&this.add(d,{at:c}),this.buffer.add(a.response,{at:c+d.length}),a.response},getDescendantsFromBuffer:function(b){var c={};c[b.id]=b;var d=this.buffer.slice(this.buffer.indexOf(b)+1);return a.some(d,function(a){var b=a.get("parent");return!b||!c[b]||(c[a.id]=a,!1)}),a.values(c)}}),t=b.Collection.extend({model:l.QueuedPost,initialize:function(a,b){var c=this;c.thread=b.thread,c.counters={comments:0,replies:{}},c.on("add",function(a){var b=a.getVisibleParent(c.thread),d=c.counters.replies;b?(d[b.id]=(d[b.id]||0)+1,b.id===a.get("parentId")&&a.set("immedReply",!0)):c.counters.comments+=1})},comparator:function(a){return parseInt(a.id,10)},isDescendant:function(b,c){var d=b.get("parentId"),e=d?this.get(d):null,f={};for(a.each(c,function(a){f[a]=!0});e;){if(f[e.get("id")]===!0)return!0;d=e.get("parentId"),e=d?this.get(d):null}return!1},drain:function D(b){function c(a){var b=[];e.each(function(a){null===a.get("parentId")&&b.push(a.get("id"))}),e.reset(e.filter(function(c){return null===c.get("parentId")||e.isDescendant(c,b)?void a(c):c})),e.counters.comments=0}function d(c){var d,f=[];d=e.filter(function(a){var c=a.getVisibleParent(e.thread);return c&&c.get("id")===b?void f.push(a):a}),f=a.sortBy(f,function(a){return parseInt(a.get("id"),10)}),a.each(f,function(a){c(a)}),e.reset(d),e.counters.replies[b]=0}var e=this,D=b?d:c;return D(function(a){e.thread.posts.add(a.toPost(e.thread))})}}),u=b.Collection.extend({models:l.TypingUser,initialize:function(){var b=this;b.gc=null,b.on("add remove reset",function(){var c=b.count();return c>0&&null===b.gc?void(b.gc=setInterval(a.bind(b.cleanup,b),6e4)):void(c<=0&&null!==b.gc&&(clearInterval(b.gc),b.gc=null))},b)},count:function(a){var b=this.filter(function(b){return!(a&&b.id===a)&&b.get("typing")});return b.length},cleanup:function(){var a=c();this.reset(this.filter(function(b){return a.diff(b.lastModified,"minutes")<5}))}}),v=h.extend({model:k.wrap(l.Post),url:d.getURL("users/listPostActivity")}),w=h.extend({model:l.Thread,url:d.getURL("timelines/ranked"),initialize:function(a,b){b=b||{},this.type=b.type,this.target=b.target},fetch:function(b){return b=b||{},b.data=a.extend({type:this.type,target:this.target},b.data),h.prototype.fetch.call(this,b)},parse:function(b){return b=h.prototype.parse.call(this,b),a.map(b.activities,function(a){return e.buildThread(b.objects,a.items[0].object)})}}),x=b.Collection.extend({model:l.SyncedTopUser,url:d.getURL("forums/listMostActiveUsers"),initialize:function(a,b){this.forum=b.forum,this.limit=b.limit},fetch:function(c){return b.Collection.prototype.fetch.call(this,a.extend({data:{forum:this.forum,limit:this.limit}},c))},parse:function(b){return a.filter(b.response,function(a){if(parseFloat(a.rep)>.7)return a})}});g.prototype.model=k.wrap(l.User);var y=b.Collection.extend({model:l.SyncedUser,url:d.getURL("forums/listModerators"),initialize:function(a,b){this.forum=b.forum},fetch:function(c){return b.Collection.prototype.fetch.call(this,a.extend({data:{forum:this.forum}},c))},parse:function(b){return a.map(b.response,function(a){return a.user})}}),z="reaction-vote",A=b.Collection.extend({url:d.getURL("threadReactions/loadReactions"),initialize:function(a,b){this.thread=b.thread,this.enabled=Boolean(a.length),this.eligible=Boolean(b.eligible),this.userIsAnonymous=b.userIsAnonymous},fetch:function(c){return b.Collection.prototype.fetch.call(this,a.extend({data:{thread:this.thread.id}},c))},parse:function(a){var b=a.response,c=b.reactions,d=b.selected&&b.selected.id;if(!d&&this.userIsAnonymous){var e=f.get(z);d=e&&e[this.thread.get("id")]}if(d){var g=c.filter(function(a){return a.id===d});g.length&&(g[0].isSelected=!0,g[0].votes||(g[0].votes=1))}return this.enabled=Boolean(c.length),this.eligible=b.eligible,this.prompt=b.prompt,c},toggleEnabled:function(){var a=this;d.call("threadReactions/disableForThread",{method:"POST",data:{thread:this.thread.get("id"),enable:this.enabled?0:1},success:function(){a.enabled=!a.enabled,a.trigger("change:enabled"),a.enabled&&!a.length&&a.fetch()}})},vote:function(b,c){var e=this.at(b);if(e&&!e.get("isSelected")){c=c||{},this.trigger("vote:start");var g=this;d.call("threadReactions/vote",a.extend({},c,{method:"POST",data:{thread:this.thread.get("id"),reaction:e.get("id")},success:function(){if(g.forEach(function(a,c){var d=c===b,e=a.get("votes");d&&(e+=1),a.get("isSelected")&&(e=Math.max(0,e-1)),a.set({isSelected:d,votes:e})},g),g.trigger("vote:end"),g.userIsAnonymous){var a=f.get(z)||{};a[g.thread.get("id")]=e.get("id"),f.set(z,a)}c.success&&c.success()},error:function(){g.trigger("vote:end"),c.error&&c.error()}}))}}}),B=b.Collection.extend({url:d.getURL("gifs/search"),model:l.GifObject,query:null,page:null,fetch:function(c){return c.query===this.query?this.page+=1:this.page=1,b.Collection.prototype.fetch.call(this,a.extend({data:{forum:c.forum,query:c.query,page:this.page}},c))},parse:function(a,b){var c=a.response,d=this.toJSON();return b.query===this.query?d.concat(c):(this.query=b.query,c)},reset:function(){return this.query=null,this.page=null,b.Collection.prototype.reset.call(this)}}),C=b.Collection.extend({url:d.getURL("mentions/listUsers"),model:l.SyncedUser,LIMIT:5,query:null,cursor:null,initialize:function(a,b){this.threadId=b&&b.threadId},fetch:function(c){var d=this.cursor&&this.cursor.hasNext;if(this.query!==c.query||d)return b.Collection.prototype.fetch.call(this,a.extend({data:{thread:this.threadId,cursor:c.next&&d&&this.cursor.next?this.cursor.next.slice(2):null,query:c.query,limit:c.limit||this.LIMIT}},c))},parse:function(a,c){var d=a.response,e=a.cursor,f=this.toJSON();return f=c.query===this.query?f.concat(d):d,this.query=c.query,this.cursor=e,this.set(f),b.Collection.prototype.parse.call(this,f),f},reset:function(){return this.query=null,this.cursor=null,b.Collection.prototype.reset.call(this)}});return{PaginatedCollection:h,UserCollection:g,ChannelCollection:i,PostCollection:q,SubpaginatedPostCollection:s,TypingUserCollection:u,TopUserCollection:x,RankedThreadCollection:w,ThreadVoteCollection:p,PostActivityCollection:v,QueuedPostCollection:t,ModeratorCollection:y,ReactionsCollection:A,GifObjectsCollection:B,UserSuggestionsCollection:C}}),define("core/models/Session",["jquery","underscore","backbone","moment","core/api","core/bus","core/config","core/time","core/utils","core/utils/cookies","core/utils/guid","core/utils/auth","core/models/BaseUser","core/models/User"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){"use strict";var o=function(){return l.getFromCookie()},p=c.Model.extend({initialize:function(){this.constructor.fromCookie=b.once(o),this.user=this.getAnonUserInstance()},setUser:function(a){this.user&&this.stopListening(this.user),this.user=a,this.setIfNewUser(),this.listenTo(a,"all",this.trigger),this.trigger("change:id",a)},isLoggedOut:function(){return!this.isLoggedIn()},isLoggedIn:function(){return Boolean(this.user.get("id"))},fetch:function(a){var c=a||{};return e.call("users/details.json",{data:c.data,success:b.bind(function(a){a=a.response,a.id&&this.setUser(this.getUserInstance(a)),c.success&&c.success(a),c.complete&&c.complete(a)},this),error:function(a){c.error&&c.error(a),c.complete&&c.complete(a)}})},getAnonUserInstance:function(a){return new m(a)},getUserInstance:function(a){return new n(a)},getCsrfToken:function(){var a=j.read("csrftoken");return a||(a=k.generate().replace(/\W/g,""),j.create("csrftoken",a,{domain:window.location.hostname,expiresIn:31536e6})),a},authenticate:function(c){var d=this.authServices[c];if(d){if(b.isFunction(d))return d.call(this);f.trigger("uiAction:openLogin",c);var e=this.getAuthWindowArgs(d),g=d.url;g+=(g.indexOf("?")>-1?"&":"?")+a.param(e),this.openAuthWindow(g,d.width,d.height)}},authServices:{disqus:{url:g.urls.login,width:460,height:355,attachExperiment:!0},twitter:{url:g.urls.oauth.twitter,width:650,height:680,csrf:!0,attachExperiment:!0},facebook:{url:g.urls.oauth.facebook,width:550,height:300,csrf:!0,attachExperiment:!0},google:{url:g.urls.oauth.google,width:445,height:635,csrf:!0,attachExperiment:!0}},getAuthWindowArgs:function(a){var c={};return a.csrf&&(c.ctkn=this.getCsrfToken()),b.extend(c,a.params),c},openAuthWindow:function(a,b,c){return i.openWindow(a,"_blank",{width:b,height:c})},setIfNewUser:function(){var a=this.user.get("joinedAt");if(this.user.get("isAnonymous")||!a)return void this.user.set("joinedRecently",!1);var b=h.assureTzOffset(a);this.user.set("joinedRecently",d().subtract(10,"seconds").isBefore(b))}});return p.fromCookie=o,p.isKnownToBeLoggedOut=function(){return!p.fromCookie().id},p}),define("core/WindowBus",["jquery","underscore","backbone","modernizr"],function(a,b,c,d){"use strict";var e=c.Model.extend({initialize:function(){d.localstorage&&a(window).on("storage",b.bind(this.onStorageEvent,this))},broadcast:function(a,b){if(d.localstorage){var c=JSON.stringify({name:a,data:b,time:(new Date).getTime()});try{window.localStorage.setItem(this.constructor.STORAGE_KEY,c)}catch(e){}}},onStorageEvent:function(a){var b=a.originalEvent.key,c=a.originalEvent.newValue;if(c&&b===this.constructor.STORAGE_KEY)try{c=JSON.parse(c),this.trigger(c.name,c.data)}catch(d){}}},{STORAGE_KEY:"disqus.bus"});return e}),define("templates/lounge/threadVotes",["react","core/config/urls","core/strings","core/switches","core/utils/object/get"],function(a,b,c,d,e){"use strict";var f=c.gettext,g=function(c){var g=c.thread&&c.thread.forum,h=d.isFeatureActive("embed_refresh",{forum:g}),i=h?"favorite-button-toggle":"dropdown-toggle",j=h?"label-count-refresh":"label-count";return a.createElement("div",null,a.createElement("a",{href:"#","data-action":"favorite",title:f("Favorite this discussion"),className:i+" "+(e(c.thread,["userScore"])?"upvoted":""),"aria-label":f("Favorite this discussion")},h?null:a.createElement("span",{className:"label label-default"},a.createElement("span",{className:"favorite-icon icon-heart-empty"})),h?null:a.createElement("span",{className:"label label-favorited"},a.createElement("span",{className:"favorite-icon icon-heart"})),h?a.createElement("div",{className:"favorite-icon-wrapper"},a.createElement("i",{className:"favorite-icon-refresh"})):null," ",e(c.thread,["likes"])?a.createElement("span",{className:"label "+j},e(c.thread,["likes"],null)):null),a.createElement("ul",{className:"dropdown-menu dropdown-menu--coachmark pull-right"},a.createElement("li",null,c.loggedIn?a.createElement("div",null,a.createElement("h2",{className:"coachmark__heading"},f("Your 1st favorited discussion!")),a.createElement("p",{className:"coachmark__description"},f("Favoriting means this is a discussion worth sharing. It gets shared to your followers' %(Disqus)s feeds if you log in, and gives the creator kudos!",{Disqus:"Disqus"}))):a.createElement("div",null,a.createElement("h2",{className:"coachmark__heading"},f("Discussion Favorited!")),a.createElement("p",{className:"coachmark__description"},f("Favoriting means this is a discussion worth sharing. It gets shared to your followers' %(Disqus)s feeds, and gives the creator kudos!",{Disqus:"Disqus"})))," ",a.createElement("a",{href:(b.root||"")+"/home/?utm_source=disqus_embed&utm_content=recommend_btn",className:"btn btn-primary coachmark__button",target:"_blank",rel:"noopener noreferrer"},f(c.loggedIn?"See Your Feed":"Find More Discussions")))))};return g}),define("lounge/views/favorite-button",["backbone","core/utils/storage","templates/lounge/threadVotes"],function(a,b,c){"use strict";var d=a.View.extend({className:"thread-likes",events:{"click [data-action=favorite]":"favoriteHandler"},initialize:function(a){this.session=a.session,this.thread=a.thread,this.loggedOutFavoriteFlag=this.session.getLoggedOutUserFlags().get(d.ONBOARDING_KEY),this.listenTo(this.thread,"change:userScore",this.render),this.listenTo(this.thread,"change:likes",this.render),this.listenTo(this.session,"change:id",this.startFavoriteOnboarding),this.setTooltipEnabled()},setTooltipEnabled:function(){this.tooltipEnabled=this.session.isLoggedIn()?b.get(d.ONBOARDING_KEY):!this.loggedOutFavoriteFlag.isRead()},render:function(){return this.$el.html(c({thread:this.thread.toJSON(),user:this.session.toJSON(),loggedIn:this.session.isLoggedIn()})),this},startFavoriteOnboarding:function(){this.session.user.get("joinedRecently")&&b.set(d.ONBOARDING_KEY,"true"),this.setTooltipEnabled()},favoriteHandler:function(a){a.stopPropagation(),a.preventDefault();var b=0===this.thread.get("userScore");this.trigger(b?"vote:like":"vote:unlike"),this.thread.vote(b?1:0),this.toggleTooltip(b),this.tooltipEnabled&&b&&this.markAsSeen()},markAsSeen:function(){this.session.isLoggedIn()?b.remove(d.ONBOARDING_KEY):this.loggedOutFavoriteFlag.markRead()},toggleTooltip:function(a){this.tooltipEnabled&&(a?this.$el.parent().addClass("open"):this.$el.parent().removeClass("open"))}},{ONBOARDING_KEY:"showRecommendOnboarding"});return d}),define("common/collections/LoggedOutCache",["backbone","core/common/cached-storage","lounge/views/favorite-button"],function(a,b,c){"use strict";var d=[{id:"welcome",title:"",body:""}],e=[{id:c.ONBOARDING_KEY}],f=new b("notes",7776e3),g=a.Model.extend({markRead:function(){f.setItem(this.id,!0)},isRead:function(){return Boolean(f.getItem(this.id))}}),h=a.Collection.extend({initialize:function(a,b){this.session=b.session},model:g,markAllRead:function(){return this.each(function(a){a.markRead()}),this.session.set("notificationCount",0),this},getUnread:function(){return this.filter(function(a){return!a.isRead()})}});return{storage:f,Collection:h,Model:g,LOGGED_OUT_NOTES:d,LOGGED_OUT_FLAGS:e}}),define("common/Session",["jquery","underscore","core/analytics/jester","core/api","core/bus","core/config","common/models","common/urls","core/models/Session","core/switches","core/UniqueModel","core/utils/cookies","core/utils/url/serialize","core/WindowBus","core/utils/storage","common/collections/LoggedOutCache","common/keys","common/utils","lounge/common","lounge/tracking"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){"use strict";var u,v=3500,w={},x=new n,y=i.extend({_defaults:{canReply:!0,canModerate:!1,audienceSyncVerified:!1,sso:null},socialLoginProviders:{facebook:function(){var b=a.Deferred();return require(["fb"],b.resolve.bind(b),b.reject.bind(b)),b.promise().then(function(){window.FB.init({appId:q.facebook,xfbml:!1,status:!0,version:"v2.8"});var b=a.Deferred();return window.FB.getLoginStatus(function(a){"connected"===a.status?b.resolve(a):b.reject()}),b.promise()}).then(function(a){c.logStat("lounge.auto_login.fb");var b=a.authResponse;return{grant_type:"urn:disqus:params:oauth:grant-type:facebook-login",client_id:q.embedAPI,expires:b.expiresIn,fb_access_token:b.accessToken}})},google:function(){var b=a.Deferred();return require(["gapi"],function(a){setTimeout(b.reject.bind(b),v),a.load("auth2",b.resolve.bind(b,a))},b.reject.bind(b)),b.promise().then(function(b){var c=b.auth2.init({client_id:q.google,fetch_basic_profile:!1,scope:"profile email"}),d=a.Deferred();return c.then(function(){c.isSignedIn.get()?d.resolve(c.currentUser.get()):d.reject()}),d.promise()}).then(function(a){c.logStat("lounge.auto_login.google");var b=a.getAuthResponse();return{grant_type:"urn:disqus:params:oauth:grant-type:google-login",client_id:q.embedAPI,expires:b.expires_in,google_access_token:JSON.stringify(b)}})}},sessionKeyAtLocalStorage:"sessionId",initialize:function(){y.__super__.initialize.apply(this,arguments),!w.fromCookie().isAuthenticated&&this.getSessionId()&&d.headers({"X-Sessionid":this.getSessionId()})},setSessionId:function(a){o.set(this.sessionKeyAtLocalStorage,a)},removeSessionId:function(){o.remove(this.sessionKeyAtLocalStorage)},getSessionId:function(){return o.get(this.sessionKeyAtLocalStorage)},defaults:function(){var a=new p.Collection(p.LOGGED_OUT_NOTES,{session:this});return b.extend(this._defaults,{notificationCount:a.getUnread().length})},start:function(b){var c=b||{};if(this.set(c),this.listenTo(x,"auth:success",this.fetch),this.listenTo(e.frame,{"!auth:success":function(a){a&&(a.sessionId&&(d.headers({"X-Sessionid":a.sessionId}),w.fromCookie().isAuthenticated||this.setSessionId(a.sessionId)),a.message&&this.trigger("alert",a.message,{type:"info"}),a.logEvent&&e.trigger("uiAction:"+a.logEvent)),x.broadcast("auth:success"),this.fetch()}}),this.bindAudienceSyncHandlers(),this.shouldFetchSession())this.fetch();else if(l.read("no_auto_login")||t.isPrivate())this.loginAsAnon();else{var f=this.socialLoginProviders,g=!1,h=0,i=a.Deferred(),j=Object.keys(f).map(function(a){return f[a].call(this)},this),k=function(a){g||(g=!0,i.resolve(a))},m=function(a){h+=1,h===j.length&&i.reject(a)};j.forEach(function(a){a.then(k).fail(m)}),i.promise().then(function(b){return a.post("https://disqus.com/api/oauth/2.0/access_token/",b)}).then(function(a){this.fetch({data:{access_token:a.access_token}})}.bind(this)).fail(this.loginAsAnon.bind(this))}},stop:function(){this.stopListening(),this.off()},loginAsAnon:function(){this.setUser(this.getAnonUserInstance())},shouldFetchSession:function(){return Boolean(this.get("remoteAuthS3")||w.fromCookie().id||this.getSessionId())},getUserInstance:function(a){return new k(g.User,a)},toJSON:function(){var a=this.user.toJSON.apply(this.user,arguments);return a.thread.canReply=this.get("canReply"),a.thread.canModerate||(a.thread.canModerate=this.get("canModerate")),a},fetch:function(a){var b=this,c=a||{};b.has("thread")&&(c.thread=b.get("thread"));var d=c.thread?b.fetchThreadDetails(c):i.prototype.fetch.call(b,c);return d.done(function(){b.set("notificationCount",0)}),d},fetchNotificationCount:function(){var b=this;return b.isLoggedIn()?d.call("timelines/getUnreadCount.json",{data:{type:"notifications",routingVersion:f.feedApiVersion}}).done(function(a){b.set("notificationCount",a.response)}):a.Deferred().resolve()},fetchThreadDetails:function(a){var c=this,e=a.thread;c._request&&(c._request.abort(),c._request=null);var f={thread:e.id,post:e.posts.pluck("id")};return c._request=d.call("embed/threadDetails.json",{data:f,success:function(a){var d=a.response,f={};if(d.user&&(b.extend(f,d.user,{votes:d.votes}),f=b.omit(f,"badges")),d.blockedUsers||d.blockingUsers){var h=d.session.canModerate?new Set(d.blockedUsers):new Set([].concat(_toConsumableArray(d.blockedUsers),_toConsumableArray(d.blockingUsers)));b.extend(f,d.user,{blockedUserIdSet:h}),f.blockedUserIdSet.forEach(function(a){new k(g.User,{id:a}).set({isBlocked:!0})})}var i=c.get("thread")&&c.get("thread").forum&&c.get("thread").forum.id;j.isFeatureActive("embed_refresh",{forum:i})&&d.followingUsers&&(b.extend(f,d.user,{followingUserIdSet:new Set(d.followingUsers)}),f.followingUserIdSet.forEach(function(a){return new k(g.User,{id:a,isFollowing:!0})})),c.set(d.session),f.id?(c.setUser(new k(g.User,f)),e.users.add(c.user),d.thread&&(e.set("userScore",d.thread.userScore),e.set("userSubscription",d.thread.userSubscription),e.set("userRating",d.thread.userRating))):c.loginAsAnon(),c.trigger("fetchThreadDetails:success")},complete:function(){c._request=null}}),c._request},logout:function(){this.removeSessionId();var a=this.get("sso");this.isSSO()&&a&&a.logout?e.frame.sendHostMessage("navigate",a.logout):this.locationReplace(m(h.logout,{redirect:window.location.href}))},locationReplace:function(a){window.location.replace(a)},isSSO:function(){return this.user&&"sso"===this.user.get("user_type")},getAuthWindowArgs:function(a){var c=i.prototype.getAuthWindowArgs.call(this,a),d=s.getLounge().config;if(a.attachExperiment&&d&&d.experiment){var e=d.experiment;c.evs=window.btoa([e.experiment,e.variant,e.service].join(":"))}return b.defaults({forum:this.get("thread")&&this.get("thread").forum.id},c)},openAuthWindow:function(a,b,c){try{var d=this.get("thread"),e=d&&d.currentUrl;window.sessionStorage&&e&&window.sessionStorage.setItem("discussionUrl",e)}catch(f){}return i.prototype.openAuthWindow.call(this,a,b,c)},authServices:b.defaults({disqusDotcom:{url:h.dotcomLogin,width:478,height:590,params:{next:h.login},attachExperiment:!0},sso:function z(){var z=this.get("sso"),a=parseInt(z.width||"800",10),c=parseInt(z.height||"500",10),d=this.openAuthWindow(z.url,a,c);!function f(){r.isWindowClosed(d)?e.frame.sendHostMessage("reload"):b.delay(f,500)}()}},i.prototype.authServices),bindAudienceSyncHandlers:function(){this.listenTo(this,"change:id change:audienceSyncVerified",function(){this.get("audienceSyncVerified")&&e.frame.sendHostMessage("session.identify",this.user.id)}),this.listenTo(e.frame,{"!audiencesync:grant":function(){this.set("audienceSyncVerified",!0)}})},getAudienceSyncUrl:function(){var a={client_id:this.get("apiKey"),response_type:"audiencesync",forum_id:this.get("thread").forum.id};return"https:"===window.location.protocol&&(a.ssl=1),m(h.authorize,a)},getRecaptchaKey:function(){return this.get("recaptchaPublicKey")},audienceSync:function(){this.openAuthWindow(this.getAudienceSyncUrl(),460,355)},needsAudienceSyncAuth:function(a){return a.get("settings").audienceSyncEnabled&&this.isLoggedIn()&&!this.get("audienceSyncVerified")},getLoggedOutUserFlags:function(){return this._loggedOutUserFlags?this._loggedOutUserFlags:(this._loggedOutUserFlags=new p.Collection(p.LOGGED_OUT_FLAGS,{session:this}),this._loggedOutUserFlags)}});return b.extend(w,b.chain(y).keys().map(function(a){return[a,y[a]]}).object().value(),{get:function(){return u=u||new y},setDefaults:function(a){if(u)throw new Error("Session defaults cannot be changed after a session instance is created!");return y._defaults=b.extend(y.prototype._defaults,a),y._defaults},forget:function(){u&&(u.stop(),u=null)}}),w}),define("common/views/mixins",["jquery","underscore","core/bus","core/UniqueModel","common/models","common/Session"],function(a,b,c,d,e,f){"use strict";var g={proxyViewEvents:function(a){this.listenTo(a,"all",function(a){0===a.indexOf("uiAction:")&&this.trigger.apply(this,arguments)},this)}},h={updateUserAvatarHelper:function(b,c){a("img[data-user="+b+'][data-role="user-avatar"]').attr("src",c)},updateUserNameHelper:function(c,d){var e='[data-username="'+c+'"][data-role=username]';a("a"+e+", span"+e).html(b.escape(d))},bindProfileUIListeners:function(a){this.listenTo(a,{"change:avatar":function(){this.updateUserAvatarHelper(a.user.id,a.user.get("avatar").cache)},"change:name":function(){this.updateUserNameHelper(a.user.get("username"),a.user.get("name"))}})}},i={toggleFollow:function(b){b.preventDefault(),b.stopPropagation();var c,g=b&&a(b.target).closest("a[data-user]").attr("data-user");c=this.collection&&g?this.collection.get(g):this.user?this.user:d.get(e.User,g);var h=f.get();return h.isLoggedOut()?(this.trigger("authenticating"),this.listenToOnce(h,"change:id",function(){h.isLoggedIn()&&this.follow(c)}),h.get("sso")&&h.get("sso").url?void h.authenticate("sso"):void h.authenticate("disqusDotcom")):void(c.get("isFollowing")?this.unfollow(c):this.follow(c))},unfollow:function(a){a.unfollow(),c.trigger("uiAction:unfollowUser",a)},follow:function(a){a.follow(),c.trigger("uiAction:followUser",a)}};return{FollowButtonMixin:i,UiActionEventProxy:g,ProfileHtmlHelpers:h}}),define("core/utils/isIframed",[],function(){"use strict";return function(a){try{return a.self!==a.top}catch(b){return!0}}}),define("core/utils/isMediaTradecraftAdEnabled",["core/utils/url/parseQueryString","core/switches"],function(a,b){"use strict";return function(c){return"true"===a().mtctest||!c&&b.isFeatureActive("mtc_ads")}}),define("core/utils/addElement",[],function(){"use strict";var a=window.document;return function(b,c,d){var e=a.createElement(c);return d&&Object.keys(d).forEach(function(a){e.setAttribute(a,d[a])}),b.appendChild(e),e}}),define("core/utils/attachMediaTradecraft",["core/utils/isMediaTradecraftAdEnabled","core/utils/url/parseQueryString","core/utils/addElement"],function(a,b,c){"use strict";return function(){var d=b();if(!window.isMtcAdded&&a()){window.isMtcAdded=!0;var e=window.document.head;c(e,"link",{rel:"preconnect",href:"https://01.cdn.mediatradecraft.com/",crossorigin:""}),c(e,"link",{rel:"dns-prefetch",href:"https://01.cdn.mediatradecraft.com/"}),c(e,"link",{rel:"preconnect",href:"https://securepubads.g.doubleclick.net/",crossorigin:""}),c(e,"link",{rel:"dns-prefetch",href:"https://securepubads.g.doubleclick.net/"}),c(e,"link",{rel:"preconnect",href:"https://c.amazon-adsystem.com/",crossorigin:""}),c(e,"link",{rel:"dns-prefetch",href:"https://c.amazon-adsystem.com/"}),c(e,"link",{rel:"preconnect",href:"https://micro.rubiconproject.com/",crossorigin:""}),c(e,"link",{rel:"dns-prefetch",href:"https://micro.rubiconproject.com/"}),c(e,"script",{src:"https://c.amazon-adsystem.com/aax2/apstag.js",async:"true"}),c(e,"script",{src:"https://securepubads.g.doubleclick.net/tag/js/gpt.js",async:"true"}),"true"===d.mtctest&&"true"!==d.mtcprod?(c(e,"script",{src:"https://01.cdn.mediatradecraft.com/disqus/stg/main.js",async:"true"}),c(e,"link",{href:"https://01.cdn.mediatradecraft.com/disqus/stg/main.css",media:"print",onload:"this.media='all'",rel:"stylesheet"})):(c(e,"script",{src:"https://01.cdn.mediatradecraft.com/disqus/main.js",async:"true"}),c(e,"link",{href:"https://01.cdn.mediatradecraft.com/disqus/main.css",media:"print",onload:"this.media='all'",rel:"stylesheet"}))}}}),define("core/viglink",["remote/config"],function(a){"use strict";var b={},c=null;return b.resetVersion=function(){c=null},b.forceVersion=function(a){c=a},b.getVersion=function(){return c?c:a.lounge&&a.lounge.viglink&&a.lounge.viglink.version||"none"},b.getExperimentVersion=function(){return a.lounge&&a.lounge.viglink&&a.lounge.viglink.experiment_version||"none"},b}),define("common/outboundlinkhandler",["jquery","underscore","core/utils","common/utils"],function(a,b,c,d){"use strict";function e(){this.handlers=[],this.locked={},this.timeout=1e3}return b.extend(e.prototype,{handleClick:function(d){var e=a(d.currentTarget),f=this.getLinkTrackingId(e);if(this.shouldHandleClick(d,e,f)){var g=b.chain(this.handlers).map(function(a){return a[0].call(a[1],d,e)}).compact().value();c.willOpenNewWindow(d,e)||(d.preventDefault(),this.setLatestClick(f),this.delayNavigation(d,e,g))}},delayNavigation:function(c,e,f){this.lockLink(this.getLinkTrackingId(e));var g=b.bind(function(){this.isLatestClick(this.getLinkTrackingId(e))&&d.triggerClick(e,c.originalEvent)},this);b.delay(g,this.timeout),a.when.apply(a,f).always(g)},registerBeforeNavigationHandler:function(a,b){this.handlers.push([a,b])},getLinkTrackingId:function(a){var c=a.attr("data-tid");return c||(c=b.uniqueId(),a.attr("data-tid",c)),c},shouldHandleClick:function(a,b){if(!this.isLinkLocked(this.getLinkTrackingId(b))){if(a.isDefaultPrevented())return!1;if(!b.is("a"))return!1;var c=/#.*/,d=(b.attr("href")||"").replace(c,"");return!!d}},setLatestClick:function(a){this.latestLinkId=a},isLatestClick:function(a){return this.latestLinkId===a},lockLink:function(a){this.locked[a]=!0},isLinkLocked:function(a){return this.locked[a]}}),e}),define("core/mixins/withEmailVerifyLink",["jquery","underscore","core/config","core/utils"],function(a,b,c,d){"use strict";var e=d.preventDefaultHandler,f={events:{"click [data-action=verify-email]":"showVerifyEmailPopup"},showVerifyEmailPopup:e(function(b){var e=a(b.target).attr("data-forum"),f=c.urls.verifyEmail;return e&&(f=f+"?f="+e),d.openWindow(f,"_blank",{width:460,height:355})})};return function(){this.events=b.defaults({},this.events,f.events),b.extend(this,b.pick(f,"showVerifyEmailPopup"))}}),define("core/constants/behindClickConstants",["exports","core/strings"],function(a,b){"use strict";var c=b.get;a.DEFAULT_BUTTON_TEXT=b.interpolate(c("Show Comments (%(count)s)"),{count:"{postCount}"})}),define("core/templates/react/BehindClickTemplate",["react","core/constants/behindClickConstants"],function(a,b){"use strict";function c(a){if(!a||a.indexOf(":")===-1)return{};var b={},c=a.split(";");return c.forEach(function(a){var c=a.split(":").map(function(a){return a.trim()});if(c[0].indexOf("-")>0){var d=c[0].split("-");c[0]=d[0]+d[1].charAt(0).toUpperCase()+d[1].slice(1)}b[c.splice(0,1)[0]]=c.join(":")}),b}function d(a,b){return a?a.replace("{postCount}",b.toLocaleString()):a}var e=function(e){var f=e.postCount,g=e.buttonText,h=e.buttonCSS,i=e.titleEnabled,j=e.titleText,k=e.titleCSS;return a.createElement("div",{id:"behind-click__container"},i?a.createElement("h3",{id:"behind-click__title",style:c(k)},d(j,f)):null,a.createElement("button",{ +id:"thread-visibility__button",className:"btn alert","data-action":"toggle-thread-visibility",style:c(h)},g?d(g,f):d(b.DEFAULT_BUTTON_TEXT,f)))};return e}),define("templates/lounge/partials/badgesMessage",["react","core/strings","core/switches","core/bus"],function(a,b,c,d){"use strict";var e=b.gettext,f=function(b){var c=b.url;return a.createElement("a",{href:c,target:"_blank",rel:"noopener noreferrer",className:"policy-link publisher-anchor-color",onClick:function(a){a.stopPropagation(),d.trigger("uiAction:clickBadgesMessage",c)}},e("See the available badges"))},g=function(b){var d=b.forum,g=b.forumBadgesLink,h=c.isFeatureActive("embed_refresh",{forum:d.id}),i=h?"comment-policy-refresh":"comment-policy",j=h?"comment-policy-refresh__text":"comment-policy-text",k=h?"comment-policy-refresh__heading":"comment-policy-text text-bold",l=h?"comment-policy-refresh__link":"comment-policy-link";return a.createElement("div",{id:"badges-message",className:"badges-message "+i+" publisher-anchor-color"},a.createElement("span",{"data-action":"close-badges-message",className:"badges-message-close",tabIndex:"0"}),a.createElement("div",{className:"content"},a.createElement("p",{className:k},e("Earn badges on %(forumName)s!",{forumName:d.name})),a.createElement("p",{className:j},e("Badges are awarded for commenting, receiving upvotes, and other conditions established by the publisher. Awarded badges will be displayed next to your name in comments on this site as well as on your profile."),a.createElement("p",{className:l},a.createElement(f,{url:g,isRefreshEnabled:h})))),a.createElement("span",{"aria-hidden":"true",className:"badges-message-icon"}))};return g}),define("templates/lounge/partials/commentPolicy",["react","core/strings","core/bus","core/switches"],function(a,b,c,d){"use strict";var e=b.gettext,f=function(b){var d=b.url,e=b.className,f=void 0===e?"":e,g=b.children,h=b.isRefreshEnabled,i=h?"comment-policy-refresh__link":"comment-policy-link";return a.createElement("a",{href:d,target:"_blank",rel:"noopener noreferrer",className:f+" "+i,onClick:function(a){a.stopPropagation(),c.trigger("uiAction:clickCommentPolicy",d)}},g)},g=function(b){var c=b.forum,d=b.isRefreshEnabled;if(!c.commentPolicyLink)return null;var g=e("Please read our %(commentPolicyLink)s before commenting.",{commentPolicyLink:a.createElement(f,{url:c.commentPolicyLink,isRefreshEnabled:d},e("Comment Policy"))});return g},h=function(b){var c=b.forum,f=b.isPolicyAccepted,h=d.isFeatureActive("embed_refresh",{forum:c.id}),i=h?"comment-policy-refresh":"comment-policy",j=h?"comment-policy-refresh__text":"comment-policy-text",k=h?"comment-policy-refresh__heading":"comment-policy-text text-bold";return a.createElement("div",{id:"comment-policy",className:i+" publisher-anchor-color "+(f?"hidden":"")},a.createElement("div",{className:"content"},a.createElement("p",{className:k},e("%(forumName)s Comment Policy",{forumName:c.name})),a.createElement("p",{className:j},c.commentPolicyText||null,a.createElement("p",{className:"comment-policy-refresh__prompt"},a.createElement(g,{forum:c,isRefreshEnabled:h})))),h?a.createElement("button",{className:"btn comment-policy-refresh__button publisher-background-color","data-action":"accept-comment-policy"},e("Got it")):a.createElement("span",{"aria-hidden":"true",className:"icon icon-chat-bubble"}))};return h}),define("core/templates/react/ThreadTemplate",["react","core/constants/voteConstants","core/strings","core/switches","core/utils/object/get","templates/lounge/partials/badgesMessage","templates/lounge/partials/commentPolicy"],function(a,b,c,d,e,f,g){"use strict";var h=c.gettext,i=function(b){var c=d.isFeatureActive("embed_refresh",{forum:b.forum.id}),e=c?"disqus-footer__wrapper disqus-footer__wrapper--refresh":"disqus-footer__wrapper",f=c?"load-more-refresh":"load-more",i=c?"btn load-more-refresh__button publisher-background-color-refresh":"btn load-more__button",j=c?"alert alert--realtime alert--realtime--refresh":"alert alert--realtime",k=(b.forum.commentPolicyText||b.forum.commentPolicyLink)&&!b.isPolicyAccepted,l=a.createElement("button",{className:j,style:{display:"none"},"data-role":"realtime-notification"}),m=a.createElement("div",{id:"highlighted-post","data-tracking-area":"highlighted",className:"highlighted-post"});return a.createElement("div",{id:"thread__wrapper"},a.createElement("div",{id:"placement-top","data-tracking-area":"discovery-north"}),a.createElement("div",{id:"onboard","data-tracking-area":"onboard"}),k&&c?a.createElement(g,{forum:b.forum,isPolicyAccepted:b.isPolicyAccepted}):null,a.createElement("div",{id:"reactions__container"}),a.createElement("div",{id:"ratings__container"}),k&&!c?a.createElement(g,{forum:b.forum,isPolicyAccepted:b.isPolicyAccepted}):null,a.createElement("div",{id:"badges-message__container"}),c?null:m,a.createElement("div",{id:"global-alert"}),a.createElement("div",{id:"tos__container"}),b.inHome?null:a.createElement("header",{id:"main-nav","data-tracking-area":"main-nav"}),a.createElement("section",{id:"conversation","data-role":"main","data-tracking-area":"main"},a.createElement("div",{id:"posts"},a.createElement("div",{id:"form",className:"textarea-outer-wrapper--top-level"}),c?null:l,a.createElement("div",{id:"email-signup"}),a.createElement("div",{id:"secondary-navigation"}),a.createElement("div",{id:"no-posts",style:{display:"none"}}),c?m:null,c?l:null,a.createElement("ul",{id:"post-list",className:"post-list loading"}),a.createElement("div",{className:f,"data-role":"more",style:{display:"none"}},a.createElement("a",{href:"#","data-action":"more-posts",className:i},h("Load more comments"))))),a.createElement("div",{id:"placement-bottom","data-tracking-area":"discovery-south"}),b.hideFooter?null:a.createElement("footer",{id:"footer","data-tracking-area":"footer",className:e}))};return i}),define("lounge/menu-handler",["jquery","core/bus"],function(a,b){"use strict";return{init:function(c){function d(){a(".dropdown").removeClass("open")}a("html").on("click",d),a("body").delegate("[data-toggle]","click",function(b){b.stopPropagation(),b.preventDefault();var e=a(b.currentTarget),f=e.closest("."+e.attr("data-toggle")),g="disabled"!==f.attr("data-dropdown")&&!f.hasClass("open");if(f.attr("data-dropdown","enabled"),d(),g){f.addClass("open");var h=f.data("view-id");h&&c.trigger("opened:"+h,f)}}),b.frame.on("window.click",d)}}}),define("lounge/mixins",["core/utils/url/serialize"],function(a){"use strict";var b={_sharePopup:function(a,b){return window.open(a,"_blank",b||"width=550,height=520")},share:function(a){this.sharers[a].call(this)},sharers:{twitter:function(){var b="https://twitter.com/intent/tweet",c=this.model.shortLink();this._sharePopup(a(b,{url:c,text:this.model.twitterText(c)}))},facebook:function(){this._sharePopup(a("https://www.facebook.com/sharer.php",{u:this.model.shortLink()}),"width=655,height=352")}}},c=function(){function a(){return this.collapseTarget&&this.collapseTarget.length||(this.collapseTarget=this.collapseTargetSelector?this[this.collapseScope].find(this.collapseTargetSelector):this[this.collapseScope]),this.collapseTarget}function b(){var b=this;if(b.isCollapseAllowed){var c=a.call(b);c&&c.length&&(c.height(b.collapsedHeight),e.call(b))}}function c(a){var b=this;if(b.collapseTarget&&b.collapseTarget.length){var c=b.collapseTarget;c.css("height","auto"),c.css("maxHeight","none"),f.call(b),a||(b.isCollapseAllowed=!1)}}function d(){return this.seeMoreButton&&this.seeMoreButton.length||(this.seeMoreButton=a.call(this).siblings("[data-action=see-more]")),this.seeMoreButton}function e(){var a=this;d.call(this).removeClass("hidden").on("click",function(){a.expand()})}function f(){d.call(this).addClass("hidden").off("click")}return function(a){var d=this;d.isCollapseAllowed=!0,d.collapsedHeight=a.collapsedHeight,d.collapseTargetSelector=a.collapseTargetSelector,d.collapseScope=a.collapseScope||"$el",d.collapse=b,d.expand=c}}();return{ShareMixin:b,asCollapsible:c}}),define("lounge/realtime",["underscore","backbone","loglevel","remote/config","common/urls","core/utils/url/serialize","common/utils"],function(a,b,c,d,e,f,g){"use strict";function h(){s.apply(this,arguments),this.marker=0,this.interval=m,this._boundOnError=a.bind(this.onError,this),this._boundOnLoad=a.bind(this.onLoad,this),this._boundOnProgress=a.bind(this.onProgress,this)}function i(){s.apply(this,arguments),this.handshakeSuccess=null,this.interval=m,this.handshakeFails=0,this._boundOnOpen=a.bind(this.onOpen,this),this._boundError=a.bind(this.onError,this),this._boundClose=a.bind(this.onClose,this),this._boundMessage=a.compose(a.bind(this.onMessage,this),function(a){return JSON.parse(a.data)})}var j=d.lounge.REALTIME||{},k=j.EXP_BASE||2,l=j.BACKOFF_LIMIT||300,m=j.BACKOFF_INTERVAL||1,n=j.MAX_HANDSHAKE_FAILS||1,o=j.WEBSOCKETS_ENABLED!==!1&&window.WebSocket&&2===window.WebSocket.CLOSING,p=j.XHR_ENABLED!==!1,q=function(){},r=function(){throw new Error("Pipe class cannot be used directly.")},s=function(b){this.channel=b,this.connection=null,this.paused=!1,this._msgBuffer=[],this._boundOpen=a.bind(this.open,this)};a.extend(s.prototype,b.Events,{getUrl:function(b){var c={};return a.extend(c,b),f(this.baseUrl+this.channel,c)},onMessage:function(a){var b=a.message_type,d=a.firehose_id;this.lastEventId=d,c.debug("RT: new message:",b,d);var e={type:b,data:a.message_body,lastEventId:d};this.trigger(b,e)},_msgToBuffer:function(){this._msgBuffer.push(a.toArray(arguments))},pause:function(a){this.paused||(this.paused=!0,this._trigger=this.trigger,this.trigger=a===!1?q:this._msgToBuffer,c.debug("RT: paused, buffered: %s",a!==!1))},resume:function(){if(this.paused){this.paused=!1,this.trigger=this._trigger,c.debug("RT: resumed, buffered messages: %s",this._msgBuffer.length);for(var a;a=this._msgBuffer.shift();)this.trigger.apply(this,a)}},open:r,close:function(){var a=this.connection;return!!a&&(this.connection=null,a)}}),a.extend(h.prototype,s.prototype,{baseUrl:e.realertime+"/api/2/",onError:function(){this.connection&&(this.connection=null,this.trigger("error",this),this.interval<=l&&(this.interval*=k),c.info("RT: Connection error, backing off %s secs",this.interval),a.delay(this._boundOpen,1e3*this.interval))},onLoad:function(){this.connection&&(this.connection=null,this.trigger("success",this),a.defer(this._boundOpen))},onProgress:function(){if(this.connection){var a,b,d,e,f=this.connection.responseText,g=0;if(f&&!(this.marker>=f.length)){a=f.slice(this.marker).split("\n");for(var h=a.length,i=0;i0&&(this.marker+=g-1)}}},open:function(){this.close();var a=this.connection=g.CORS.request("GET",this.getUrl(),this._boundOnLoad,this._boundOnError);if(!a)return void c.debug("RT: Cannot use any cross-domain request tool with StreamPipe. Bailing out.");a.onprogress=this._boundOnProgress,this.connection=a,this.marker=0;try{a.send()}catch(b){this.connection=null,c.debug("RT: Attempt to send a CORS request failed.")}},close:function(){var a=s.prototype.close.apply(this);return a&&a.abort()}}),a.extend(i.prototype,s.prototype,{baseUrl:"wss:"+e.realertime+"/ws/2/",onOpen:function(){c.debug("RT: [Socket] Connection established."),this.handshakeSuccess=!0},onError:function(){if(!this.handshakeSuccess){if(this.handshakeFails>=n)return c.debug("RT: [Socket] Error before open, bailing out."),void this.trigger("fail");this.handshakeFails+=1}this.connection&&(this.connection=null,this.trigger("error"),this.interval<=l&&(this.interval*=k),c.error("RT: Connection error, backing off %s secs",this.interval),a.delay(this._boundOpen,1e3*this.interval))},onClose:function(a){if(this.connection){if(!a.wasClean)return this.onError();this.connection=null,c.debug("RT: [Socket] Connection closed. Restarting..."),this.trigger("close"),this.open()}},open:function(){this.close();try{this.connection=new window.WebSocket(this.getUrl())}catch(a){return this.onError()}var b=this.connection;b.onopen=this._boundOnOpen,b.onerror=this._boundError,b.onmessage=this._boundMessage,b.onclose=this._boundClose},close:function(){var a=s.prototype.close.apply(this);return a&&a.close()}});var t={_wsSupported:o,initialize:function(b,c,d){this.close(),this._initArgs=[b,c,d];var e=this._wsSupported,f=e&&i||p&&h;if(f){var g=this.pipe=new f(b);a.chain(c).pairs().each(function(a){g.on(a[0],a[1],d)}),e&&g.on("fail",function(){this._wsSupported=!1,g.off(),this.initialize.apply(this,this._initArgs)},this),g.open()}},pause:function(a){this.pipe&&this.pipe.pause(a)},resume:function(){this.pipe&&this.pipe.resume()},close:function(){this.pipe&&(this.pipe.close(),this.pipe=null)}};return window.addEventListener("unload",a.bind(t.close,t)),{Pipe:s,StreamPipe:h,SocketPipe:i,Manager:t,MAX_HANDSHAKE_FAILS:n}}),define("lounge/views/badges-message",["jquery","underscore","backbone","react","react-dom","core/switches","core/common/cached-storage","templates/lounge/partials/badgesMessage"],function(a,b,c,d,e,f,g,h){"use strict";var i=new g("badges-message",7776e3);i.getAll();var j=c.View.extend({events:{"click [data-action=close-badges-message]":"handleDismiss","keyup [data-action=close-badges-message]":"handleDismiss"},initialize:function(a){b.extend(this,b.pick(a,["forum","session"])),this.model=new c.Model({dismissed:Boolean(i.getItem(this.forum.id))}),this.handleDismiss=this.handleDismiss.bind(this),this.listenTo(this.model,"change",this.render)},handleDismiss:function(a){var b=13;if(!a.keyCode||a.keyCode===b)return this.model.set("dismissed",!0),i.setItem(this.forum.id,!0),Promise.resolve()},render:function(){var a=this.forum.get("badges");if(!a||!Object.keys(a).length||this.model.get("dismissed"))return this.$el.empty(),this;var b="//disqus.com/home/forum/"+this.forum.get("id")+"/badges";return e.render(d.createElement(h,{forum:this.forum.toJSON(),forumBadgesLink:b}),this.el),this}});return j}),define("core/templates/react/aet/EmailSignupComplete",["react","core/switches"],function(a,b){"use strict";var c=function(c){var d=c.forum,e=c.isVerified,f=c.onDismiss;return a.createElement("div",{className:"newsletter-box spacing-bottom-large text-center"},a.createElement("div",{className:b.isFeatureActive("embed_refresh",{forum:d.name})?"text-large spacing-bottom-small":"text-medium spacing-bottom-small"},a.createElement("strong",null,"Thanks for subscribing!")),e?a.createElement("div",{className:"spacing-bottom-small"},(d.aetBannerConfirmation||"").split("\n").map(function(b,c){return a.createElement("div",{key:c},b)})):a.createElement("div",{className:"spacing-bottom-small"},"To begin receiving email updates from ",d.name,", please click the link in the confirmation email we've sent to your inbox."),a.createElement("a",{className:"newsletter-box__hide",href:"#",onClick:function(a){a.preventDefault(),f()}},"Dismiss this message"))};return c}),define("core/templates/react/aet/EmailSignupForm",["react","core/strings","core/switches"],function(a,b,c){"use strict";var d=b.gettext,e=function(b){var e=b.forum,f=b.isLoading,g=b.isLoggedIn,h=b.onDismiss,i=b.onSubscribe,j=b.allowEmpty;return a.createElement("div",{className:"newsletter-box spacing-bottom-large"},a.createElement("div",{className:c.isFeatureActive("embed_refresh",{forum:e.name})?"text-large spacing-bottom-small":"text-medium spacing-bottom-small"},a.createElement("strong",null,e.aetBannerTitle)),g?a.createElement("button",{className:"button button-fill--brand button-padding-wider pull-right",disabled:f,onClick:function(){i&&i()}},"Subscribe"):null,a.createElement("div",{className:"spacing-bottom"},(e.aetBannerDescription||"").split("\n").map(function(b,c){return a.createElement("div",{key:c},b)})),a.createElement("div",{className:"align align--wrap"},g?null:a.createElement("form",{className:"align__item--grow",onSubmit:function(a){a.preventDefault();var b=a.target.elements.email.value.trim();(b||j)&&i&&i(b)}},a.createElement("div",{className:"newsletter-box__input-group"},a.createElement("span",{className:"icon icon-mail text-large newsletter-box__input-group__icon"}),a.createElement("input",{type:"email",name:"email",placeholder:d("Enter email address"),"aria-label":"Enter your email address here to opt into receiving a weekly digest of the latest articles from this publisher"})),a.createElement("input",{type:"submit",className:"button button-fill--brand button-padding-wider newsletter-box__submit",disabled:f,value:d("Subscribe"),"aria-label":"Submit your email address"})),a.createElement("a",{href:"#",className:"newsletter-box__hide publisher-anchor-color",onClick:function(a){a.preventDefault(),h&&h()}},d("Hide this message"))))};return e}),define("lounge/views/email-signup",["backbone","react","react-dom","stance","core/api","core/bus","core/templates/react/aet/EmailSignupComplete","core/templates/react/aet/EmailSignupForm","core/common/cached-storage"],function(a,b,c,d,e,f,g,h,i){"use strict";var j=0,k=2,l=new i("aet-dismiss");l.getAll();var m=a.View.extend({initialize:function(b){var c=b.forum,d=b.session;this.forum=c,this.session=d,this.model=new a.Model({dismissed:Boolean(l.getItem(this.forum.id)),loading:!1,signupComplete:!1}),this._isFirstRender=!0,this.handleCompleteDismiss=this.handleCompleteDismiss.bind(this),this.handleDismiss=this.handleDismiss.bind(this),this.handleSubscribe=this.handleSubscribe.bind(this),this.listenTo(this.model,"change",this.render),this.listenTo(this.session,"change",this.render)},getTrackingCopy:function(){return{title:this.forum.get("aetBannerTitle"),description_copy:this.forum.get("aetBannerDescription"),confirmation_copy:this.forum.get("aetBannerConfirmation")}},isLoggedIn:function(){return Boolean(this.session.user&&this.session.user.id)},handleDismiss:function(){return this.model.set("dismissed",!0),f.trigger("uiAction:clickEmailSubscriptionPromptDismiss",this.getTrackingCopy()),this.isLoggedIn()?Promise.resolve(e.call("aet/dismiss",{data:{forum:this.forum.id},method:"POST"})):(l.setItem(this.forum.id,!0),Promise.resolve())},handleCompleteDismiss:function(){this.model.set("dismissed",!0)},handleSubscribe:function(){var a=this,b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.model.get("loading"))return f.trigger("uiAction:clickEmailSubscriptionPromptSubscribe",this.getTrackingCopy()),this.model.set("loading",!0),Promise.resolve(b?e.call("aet/anonymousSubscribe",{data:{email:b,forum:this.forum.id},method:"POST"}):e.call("aet/subscribe",{data:{forum:this.forum.id},method:"POST"})).then(function(b){return a.model.set({loading:!1,signupComplete:!0}),b})["catch"](function(){a.model.set("loading",!1)})},reportView:function(){f.trigger("uiAction:viewEmailSubscriptionPrompt",this.getTrackingCopy())},render:function(){if(!this.forum.get("aetEnabled")||this.model.get("dismissed"))return this.$el.empty(),this;var a=this.session.shouldFetchSession()?this.session.get("aetBannerStatus"):j;switch(a){case j:case k:if(this.model.get("signupComplete")||a===k?c.render(b.createElement(g,{forum:this.forum.toJSON(),isVerified:Boolean(this.session.user&&this.session.user.get("isVerified")),onDismiss:this.handleCompleteDismiss}),this.el):c.render(b.createElement(h,{forum:this.forum.toJSON(),isLoading:this.model.get("loading"),isLoggedIn:this.isLoggedIn(),onDismiss:this.handleDismiss,onSubscribe:this.handleSubscribe}),this.el),this._isFirstRender){this._isFirstRender=!1,f.trigger("uiAction:loadEmailSubscriptionPrompt",this.getTrackingCopy());var e=d(this);e.isVisible()?this.reportView():this.listenToOnce(e,"enter",this.reportView)}break;default:this.$el.empty()}return this}});return m}),define("react-dom/server",["underscore"],function(a){"use strict";var b=function c(b){if(null===b)return"";if(a.isArray(b))return b.map(c).join("");if(a.isElement(b))return b.outerHTML;if(b&&b.nodeType===window.Node.DOCUMENT_FRAGMENT_NODE){var d=window.document.createElement("div");return d.appendChild(b),d.innerHTML}return a.escape(String(b))};return{renderToString:b,renderToStaticMarkup:b}}),define("core/utils/media/upload",["underscore","exports","core/api","core/models/Media","core/UniqueModel"],function(a,b,c,d,e){"use strict";b.uploadSupported=Boolean(window.FormData),b._extractFirstImageFile=function(b){return a.find(b,function(a){return a.type.match(/^image\//)})},b._uploadViaApi=function(a,b,d){return Promise.resolve(c.call(a,{data:b,contentType:!1,processData:!1,method:"POST",xhr:function(){var a=new window.XMLHttpRequest,b=d&&d.onProgress;return b&&a.upload.addEventListener("progress",function(a){a.total&&b(100*a.loaded/a.total)}),a}}))},b.UPLOAD_URL="https://uploads.services.disqus.com/api/3.0/media/create.json",b.uploadMediaUrl=function(c,f){var g,h=new window.FormData,i=b._extractFirstImageFile(c);return i?(h.append("upload",i),h.append("permanent",1),b._uploadViaApi(b.UPLOAD_URL,h,f).then(function(b){var c=b.response,f=a.first(a.values(c));if(!f||!f.ok)throw g=new Error("Upload failed"),g.code=f&&f["error-code"],g;return new e(d,{mediaType:d.MEDIA_TYPES.IMAGE_UPLOAD,url:f.url,thumbnailUrl:f.url})},function(a){if(a.responseJSON&&4===a.responseJSON.code)throw g=new Error("Upload failed"),g.code="not-authenticated",g;throw a})):(g=new Error("No image file to upload"),g.code="invalid-content-type",Promise.reject(g))}}),define("core/views/media/DragDropUploadView",["underscore","backbone","core/utils"],function(a,b,c){"use strict";var d=c.stopEventHandler,e=b.View.extend({events:{dragover:"_dragOn",dragenter:"_dragOn",dragleave:"_dragOff",dragexit:"_dragOff",drop:"_drop"},_dragOn:d(function(){this.trigger("uploader:dragEnter"),this._toggleDragPlaceholder(!0)}),_dragOff:d(function(){this._toggleDragPlaceholder(!1)}),_drop:d(function(a){this._toggleDragPlaceholder(!1);var b=a.originalEvent.dataTransfer.files;return b.length?void this.trigger("uploader:attachMedia",b):void this.trigger("uploader:dropError","No files")}),_toggleDragPlaceholder:a.throttle(function(a){a?this.trigger("uploader:showPlaceholder"):this.trigger("uploader:hidePlaceholder")},50)});return e}),define("core/templates/postMediaUploadButton",["handlebars","core/templates/handlebars.partials","core/extensions/handlebars.helpers"],function(a){return a.template({compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'\n
          \n\n\n'},useData:!0})}),define("core/views/media/UploadButtonView",["jquery","underscore","backbone","core/templates/postMediaUploadButton","core/utils"],function(a,b,c,d,e){"use strict";var f=e.stopEventHandler,g="input[type=file][data-role=media-upload]",h=c.View.extend({events:function(){var a={"click [data-action=attach]":"_attachMedia","keydown [data-action=attach]":"keydownHandler"};return a["change "+g]="_selectorChange",a}(),initialize:function(a){this.template=a&&a.template||this.generateImageUploadButton},keydownHandler:function(a){var b=13,c=32;a.keyCode!==b&&a.keyCode!==c||(a.preventDefault(),this._attachMedia())},generateImageUploadButton:function(){return d({imageUrl:"https://c.disquscdn.com/next/embed/assets/img/attach.03c320b14aa9c071da30c904d0a0827f.svg"})},render:function(){return this.$el.html(this.template()),this},_attachMedia:f(b.throttle(function(){this.$(g).click()},1e3,{trailing:!1})),_selectorChange:function(b){var c=b.target,d=c.files;d.length&&(this.trigger("uploader:attachMedia",d),a(c).replaceWith(c.cloneNode()))}});return h}),define("core/templates/postMediaUploadProgress",["handlebars","core/templates/handlebars.partials","core/extensions/handlebars.helpers"],function(a){return a.template({1:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'
        • \n
          \n
          \n
          \n
          \n
          \n
        • \n'},compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){var f,g=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return null!=(f=g(c,"each").call(null!=b?b:a.nullContext||{},null!=b?g(b,"collection"):b,{name:"each",hash:{},fn:a.program(1,e,0),inverse:a.noop,data:e,loc:{start:{line:1,column:0},end:{line:9,column:9}}}))?f:""},useData:!0})}),define("core/views/media/UploadsProgressSubView",["backbone","core/templates/postMediaUploadProgress"],function(a,b){"use strict";var c=a.View.extend({initialize:function(){this.collection=new a.Collection,this.listenTo(this.collection,"add remove change",this.render)},hasVisible:function(){return Boolean(this.collection.length)},render:function(){return this.$el.html(b({collection:this.collection.toJSON()})),this}});return c}),define("core/templates/postMediaUploadRich",["handlebars","core/templates/handlebars.partials","core/extensions/handlebars.helpers"],function(a){return a.template({1:function(a,b,c,d,e){var f,g=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return a.escapeExpression(a.lambda(null!=(f=null!=b?g(b,"media"):b)?g(f,"title"):f,b))},3:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return a.escapeExpression(f(c,"gettext").call(null!=b?b:a.nullContext||{},"Media attachment",{name:"gettext",hash:{},data:e,loc:{start:{line:6,column:81},end:{line:6,column:111}}}))},compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e){var f,g=a.lambda,h=a.escapeExpression,i=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'
        • \n
          \n
          \n
          \n\n'+(null!=(f=i(c,\n\n
          \n
          \n
          \n
        • \n'},useData:!0})}),define("core/views/media/UploadsRichSubView",["underscore","backbone","core/models/Media","core/UniqueModel","core/utils","core/templates/postMediaUploadRich"],function(a,b,c,d,e,f){"use strict";var g=b.View.extend({initialize:function(){this._hasVisible=!1,this.collection=new b.Collection([],{model:c,comparator:"index"}),this.listenTo(this.collection,"add remove reset sort change:thumbnailUrl change:mediaType change:editsFinished",this.render),this.listenTo(this.collection,"change:index",a.bind(this.collection.sort,this.collection))},render:function(){return this.$el.empty(),this._hasVisible=!1,this.collection.each(function(b){b.get("thumbnailUrl")&&(a.contains(c.WEBPAGE_TYPES,b.get("mediaType"))||b.get("editsFinished")&&(this.$el.append(f({media:b.toJSON()})),this._hasVisible=!0))},this),this},hasVisible:function(){return this._hasVisible},addMedia:function(a,b){var e=d.get(c,a.url);if(e)e.set(a);else{if(!a.editsFinished)return;e=new d(c,a),e.fetch(b)}return this.collection.add(e),e},updateFromText:function(b,c,d){if(!b)return void this.collection.reset();var f=e.bleachFindUrls(b);f=a.uniq(f,!1,function(a){return a.url});var g={};a.each(f,function(e){g[e.url]=!0;var f=a.pick(e,"index","url"),h=e.index= 4.3.0"],main:function(a,b,c,d,e){var f=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'
            \n
              \n
              \n'+a.escapeExpression(f(c,\n
              \n'},useData:!0})}),define("core/views/media/UploadsView",["backbone","core/views/media/UploadsProgressSubView","core/views/media/UploadsRichSubView","core/templates/postMediaUploads"],function(a,b,c,d){"use strict";var e=a.View.extend({initialize:function(){this.richView=new c,this.rich=this.richView.collection,this.uploadProgressView=new b,this.uploadProgress=this.uploadProgressView.collection,this.listenTo(this.rich,"all",this._updateEmpty),this.listenTo(this.uploadProgress,"all",this._updateEmpty)},render:function(){return this.richView.$el.detach(),this.uploadProgressView.$el.detach(),this.$el.html(d()),this._updateEmpty(),this.richView.setElement(this.$("[data-role=media-rich-list]")[0]),this.uploadProgressView.setElement(this.$("[data-role=media-progress-list]")[0]),this},clear:function(){this.rich.reset(),this.uploadProgress.reset()},_updateEmpty:function(){this.richView.hasVisible()||this.uploadProgressView.hasVisible()?this.$el.removeClass("empty"):this.$el.addClass("empty")}});return e}),define("core/mixins/withUploadForm",["underscore","backbone","core/strings","core/utils","core/utils/media/upload","core/utils/storage","core/views/media/DragDropUploadView","core/views/media/UploadButtonView","core/views/media/UploadsView"],function(a,b,c,d,e,f,g,h,i){"use strict";var j=c.get,k=function(){a.defaults(this,k.bothProto,k.uploadsProto,k.previewsProto)},l={"invalid-image-file":j("Unfortunately your image upload failed. Please verify that the file is valid and in a supported format (JPEG, PNG, or GIF)."),"invalid-content-type":j("Unfortunately your image upload failed. Please verify that the file is in a supported format (JPEG, PNG, or GIF)."),"file-too-large":j("Unfortunately your image upload failed. Please verify that your image is under 5MB."),"not-authenticated":j("You must be logged in to upload an image.")},m=j("Unfortunately your image upload failed. Please verify that your image is in a supported format (JPEG, PNG, or GIF) and under 5MB. If you continue seeing this error, please try again later.");return k.previewsProto={initMediaPreviews:function(b,c){this.mediaUploadsView=new i({el:b[0]}),this.mediaUploadsView.render(),this.updateLiveMediaDebounced=a.partial(a.debounce(this.updateLiveMedia,500),c,!1),this.stopListening(c,"keychange"),this.stopListening(c,"paste"),this.listenTo(c,{keychange:this.updateLiveMediaDebounced,paste:function(b,d){d&&d.fake||a.defer(a.bind(this.updateLiveMedia,this,c,!0))}}),this.updateLiveMedia(c,!0)},clearMediaPreviews:function(){this.mediaUploadsView&&this.mediaUploadsView.clear()},updateLiveMedia:function(a,b){if(this.mediaUploadsView){var c=a.get(),d=a.offset();this.mediaUploadsView.richView.updateFromText(c,d,{isPasteEvent:b,forum:this.thread.forum.id})}}},k.uploadsProto={initMediaUploads:function(a,b,c){this.mediaDragDropView&&this.stopListening(this.mediaDragDropView),this.mediaDragDropView=new g({el:b[0]}),this.listenTo(this.mediaDragDropView,{"uploader:attachMedia":function(){f.set("usedDragDrop",1), +this.handleAttachMedia.apply(this,arguments)},"uploader:dragEnter":function(){this.$el.addClass("expanded")},"uploader:showPlaceholder":function(){a.show()},"uploader:hidePlaceholder":function(){a.hide()},"uploader:dropError":function(){var a=j("Sorry we didn't catch that. Try again?");this.alert(a,{type:"error",isUploadError:!0})}}),this.mediaUploadButtonView&&this.stopListening(this.mediaUploadButtonView),this.mediaUploadButtonView=new h({el:c[0]}),this.listenTo(this.mediaUploadButtonView,{"uploader:attachMedia":this.handleUploadViaButton}),this.mediaUploadButtonView.render()},handleUploadViaButton:function(a){if(a&&f.isPersistent&&!f.get("usedDragDrop")&&!d.isMobileUserAgent()){var b=this.alert(j("Did you know you can drag and drop images too? Try it now!"));this.listenToOnce(b,"dismiss",function(){f.set("usedDragDrop",1)})}this.handleAttachMedia.apply(this,arguments)},handleAttachMedia:function(c,d){var f=this,g=new b.Model({remainingPerc:100});f.mediaUploadsView.uploadProgress.add(g),d=a.extend(d||{},{onProgress:function(a){g.set("remainingPerc",100-a)}});var h=function(){f.mediaUploadsView.uploadProgress.remove(g)};e.uploadMediaUrl(c,d).then(function(a){a.fetch({forum:f.thread.forum.id}),f.textarea.insertAtCursor(a.get("url")),f.updateLiveMedia(f.textarea,!0),f.dismissUploadError()})["catch"](function(a){var b;a&&a.code&&(b=l[a.code]),b||(b=m),f.alert(b,{type:"error",isUploadError:!0})}).then(h,h)},dismissUploadError:function(){this.dismissAlert(function(a){return a.options&&a.options.isUploadError})},uploadSupported:e.uploadSupported,isUploadInProgress:function(){return this.mediaUploadsView&&this.mediaUploadsView.uploadProgress.length}},k.bothProto={initMediaViews:function(a){(a.mediaembedEnabled||a.gifPickerEnabled)&&this.initMediaPreviews(this.$("[data-role=media-preview]"),a.textarea),a.allowUploads&&this.initMediaUploads(this.$("[data-role=drag-drop-placeholder]"),this.$("[data-role=textarea]"),this.$("[data-role=media-uploader]"))}},k}),define("core/editable",[],function(){"use strict";function a(a){return a.replace(e," ")}function b(c,d,e){var f,h,i,j,k="",l=[];for("string"!=typeof e&&(e="\n\n"),j=0;j-1)i=g,n=n.replace(j,"");else if(j.indexOf(n)>-1)return g;return i}},selectedTextNodeOffset:function(b){var e,f,g;if(window.getSelection){var h=window.getSelection();h&&h.anchorOffset&&(g=h.anchorOffset)}else if(b&&c.selection.createRange){var i=a(b.nodeValue);e=c.selection.createRange();var j=e.duplicate(),k=j.parentElement();for(f=0;0!==e.moveStart(d,-1)&&(0!==i.indexOf(a(e.text))&&k===e.parentElement());f++)j=e.duplicate(),k=j.parentElement();g=f}return isNaN(g)?0:g},offset:function(){function b(d,e){function f(a){i+=a[0];for(var b=1;b0&&h.moveStart(d,l+2),h.collapse()}for(;h.moveStart(d,-1)===-1&&0!==j.indexOf(a(h.text));)continue;for(;1===h.moveEnd(d,1)&&j!==a(h.text);)continue;return h.moveStart(d,e),h.moveEnd(d,-1*(f-e-h.text.length)),h.select(),h}}},i.normalizeSpace=a,i}),define("core/utils/html/nodeTypes",[],function(){"use strict";var a=function(a){return"p"===a.nodeName.toLowerCase()},b=function(a){return"div"===a.nodeName.toLowerCase()},c=function(a){return"#text"===a.nodeName.toLowerCase()},d=function(a){return"br"===a.nodeName.toLowerCase()},e=function(a){return"button"===a.nodeName.toLowerCase()},f=function(a){return"br"===a.nodeName.toLowerCase()||"#text"===a.nodeName.toLowerCase()&&"\n"===a.nodeValue},g=function(a){return"p"===a.nodeName.toLowerCase()||"div"===a.nodeName.toLowerCase()};return{isP:a,isDiv:b,isText:c,isBr:d,isButton:e,isNewline:f,isPorDiv:g}}),define("core/CappedStorage",["core/utils/storage"],function(a){"use strict";var b=function(a,b){this.max=a||10,this.queueKey=b||"__queue",this.getQueue()||this.setQueue([])};return b.prototype.set=function(b,c){var d=this.getQueue()||this.setQueue([]);d.length===this.max&&a.remove(d.shift()),a.set(b,c),d.push(b),this.setQueue(d)},b.prototype.get=function(b){return a.get(b)},b.prototype.remove=function(b){a.remove(b);for(var c=this.getQueue()||[],d=0;d":"\n",g=c.height(),h=function(){var d={};b.each(d,function(a,b){d[b]=c.css(b)});var e=a(c[0].cloneNode(!0));return e.removeAttr("id").removeAttr("name").css({visibility:"hidden",position:"absolute",top:"-9999px",left:"-9999px",contentEditable:!1}).css(d).attr("tabIndex","-1"),e.insertAfter(c[0]),e}(),i=null,j=function(){h[0].style.height=0,h[e](c[e]()+f),h.scrollTop(h[0].scrollHeight);var a=Math.max(h[0].scrollHeight,g)+parseInt(d.extraSpace,10);d.maxHeight&&(a>=d.maxHeight?(c.css("overflow",""),a=d.maxHeight):c.css("overflow","hidden")),i!==a&&(i=a,c.height(a),c.trigger&&c.trigger("resize"))},k=b.throttle(j,500),l=function(a){13===a.keyCode?j():k()};c.bind("keyup",l).bind("paste",j).css("overflow","hidden"),j()})},a}),define("core/views/TextareaView",["underscore","jquery","backbone","core/utils","core/utils/html/nodeTypes","core/CappedStorage","core/extensions/jquery.autoresize"],function(a,b,c,d,e,f){"use strict";var g=c.View.extend({events:{"keydown [data-role=editable]":"handleKeyDown","keyup [data-role=editable]":"handleKeyUp","paste [data-role=editable]":"handlePaste","focusin [data-role=editable]":"handleFocusIn","blur [data-role=editable]":"handleBlur"},initialize:function(b){b=b||{},this.storageKey=b.storageKey,this.value=b.value||this.getDraft()[0],this.history=[this.value],this.historyPosition=0,this.placeholder=b.placeholder,this.selectionIndices={start:0,end:0,endElemInd:0,endElemSelectionInd:0,startElemInd:0,startElemSelectionInd:0},this.inputFixed=!1,this.listenTo(this,"keychange",a.debounce(this.saveDraft,this.constructor.SAVE_DRAFT_INTERVAL))},render:function(){return this.$input=this.createInput(),this.set(this.value),this.$el.append(this.$input),this.$input.autoresize({maxHeight:this.constructor.MAX_TEXTAREA_HEIGHT}),this},createInput:function(){return b("",da.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var Ma=/^key/,Na=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Oa=/^([^.]*)(?:\.(.+)|)/;fa.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=za.get(a);if(q)for(c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=fa.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof fa&&fa.event.triggered!==b.type?fa.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(va)||[""],j=b.length;j--;)h=Oa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=fa.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=fa.event.special[n]||{},k=fa.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&fa.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),fa.event.global[n]=!0)},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=za.hasData(a)&&za.get(a);if(q&&(i=q.events)){for(b=(b||"").match(va)||[""],j=b.length;j--;)if(h=Oa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=fa.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||fa.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)fa.event.remove(a,n+b[j],c,d,!0);fa.isEmptyObject(i)&&za.remove(a,"handle events")}},dispatch:function(a){a=fa.event.fix(a);var b,c,d,e,f,g=[],h=Y.call(arguments),i=(za.get(this,"events")||{})[a.type]||[],j=fa.event.special[a.type]||{};if(h[0]=a,a.delegateTarget=this,!j.preDispatch||j.preDispatch.call(this,a)!==!1){for(g=fa.event.handlers.call(this,a,i),b=0;(e=g[b++])&&!a.isPropagationStopped();)for(a.currentTarget=e.elem,c=0;(f=e.handlers[c++])&&!a.isImmediatePropagationStopped();)a.rnamespace&&!a.rnamespace.test(f.namespace)||(a.handleObj=f,a.data=f.data,d=((fa.event.special[f.origType]||{}).handle||f.handler).apply(e.elem,h),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return j.postDispatch&&j.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;c-1:fa.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,Qa=/\s*$/g;fa.extend({htmlPrefilter:function(a){return a.replace(Pa,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=fa.contains(a.ownerDocument,a);if(!(da.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||fa.isXMLDoc(a)))for(g=k(h),f=k(a),d=0,e=f.length;d0&&l(g,!i&&k(a,"script")),h},cleanData:function(a){for(var b,c,d,e=fa.event.special,f=0;void 0!==(c=a[f]);f++)if(ya(c)){if(b=c[za.expando]){if(b.events)for(d in b.events)e[d]?fa.event.remove(c,d):fa.removeEvent(c,d,b.handle);c[za.expando]=void 0}c[Aa.expando]&&(c[Aa.expando]=void 0)}}}),fa.fn.extend({domManip:w,detach:function(a){return x(this,a,!0)},remove:function(a){return x(this,a)},text:function(a){return xa(this,function(a){return void 0===a?fa.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return w(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=r(this,a);b.appendChild(a)}})},prepend:function(){return w(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=r(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return w(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return w(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(fa.cleanData(k(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return fa.clone(this,a,b)})},html:function(a){return xa(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Qa.test(a)&&!Ka[(Ia.exec(a)||["",""])[1].toLowerCase()]){a=fa.htmlPrefilter(a);try{for(;c1)},show:function(){return G(this,!0)},hide:function(){return G(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){Ga(this)?fa(this).show():fa(this).hide()})}}),fa.Tween=H,H.prototype={constructor:H,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||fa.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(fa.cssNumber[c]?"":"px")},cur:function(){var a=H.propHooks[this.prop];return a&&a.get?a.get(this):H.propHooks._default.get(this)},run:function(a){var b,c=H.propHooks[this.prop];return this.options.duration?this.pos=b=fa.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):H.propHooks._default.set(this),this}},H.prototype.init.prototype=H.prototype,H.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=fa.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){fa.fx.step[a.prop]?fa.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[fa.cssProps[a.prop]]&&!fa.cssHooks[a.prop]?a.elem[a.prop]=a.now:fa.style(a.elem,a.prop,a.now+a.unit)}}},H.propHooks.scrollTop=H.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},fa.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},fa.fx=H.prototype.init,fa.fx.step={};var eb,fb,gb=/^(?:toggle|show|hide)$/,hb=/queueHooks$/;fa.Animation=fa.extend(N,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return j(c.elem,a,Ea.exec(b),c),c}]},tweener:function(a,b){fa.isFunction(a)?(b=a,a=["*"]):a=a.match(va);for(var c,d=0,e=a.length;d1)},removeAttr:function(a){return this.each(function(){fa.removeAttr(this,a)})}}),fa.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?fa.prop(a,b,c):(1===f&&fa.isXMLDoc(a)||(b=b.toLowerCase(),e=fa.attrHooks[b]||(fa.expr.match.bool.test(b)?ib:void 0)),void 0!==c?null===c?void fa.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=fa.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!da.radioValue&&"radio"===b&&fa.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(va);if(f&&1===a.nodeType)for(;c=f[e++];)d=fa.propFix[c]||c,fa.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)}}),ib={set:function(a,b,c){return b===!1?fa.removeAttr(a,c):a.setAttribute(c,c),c}},fa.each(fa.expr.match.bool.source.match(/\w+/g),function(a,b){var c=jb[b]||fa.find.attr;jb[b]=function(a,b,d){var e,f;return d||(f=jb[b],jb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,jb[b]=f),e}});var kb=/^(?:input|select|textarea|button)$/i,lb=/^(?:a|area)$/i;fa.fn.extend({prop:function(a,b){return xa(this,fa.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[fa.propFix[a]||a]})}}),fa.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&fa.isXMLDoc(a)||(b=fa.propFix[b]||b,e=fa.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=fa.find.attr(a,"tabindex");return b?parseInt(b,10):kb.test(a.nodeName)||lb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),da.optSelected||(fa.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),fa.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){fa.propFix[this.toLowerCase()]=this});var mb=/[\t\r\n\f]/g;fa.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(fa.isFunction(a))return this.each(function(b){fa(this).addClass(a.call(this,b,O(this)))});if("string"==typeof a&&a)for(b=a.match(va)||[];c=this[i++];)if(e=O(c),d=1===c.nodeType&&(" "+e+" ").replace(mb," ")){for(g=0;f=b[g++];)d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=fa.trim(d),e!==h&&c.setAttribute("class",h)}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(fa.isFunction(a))return this.each(function(b){fa(this).removeClass(a.call(this,b,O(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a)for(b=a.match(va)||[];c=this[i++];)if(e=O(c),d=1===c.nodeType&&(" "+e+" ").replace(mb," ")){for(g=0;f=b[g++];)for(;d.indexOf(" "+f+" ")>-1;)d=d.replace(" "+f+" "," ");h=fa.trim(d),e!==h&&c.setAttribute("class",h)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):fa.isFunction(a)?this.each(function(c){fa(this).toggleClass(a.call(this,c,O(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c)for(d=0,e=fa(this),f=a.match(va)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else void 0!==a&&"boolean"!==c||(b=O(this),b&&za.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":za.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;for(b=" "+a+" ";c=this[d++];)if(1===c.nodeType&&(" "+O(c)+" ").replace(mb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;fa.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=fa.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,fa(this).val()):a,null==e?e="":"number"==typeof e?e+="":fa.isArray(e)&&(e=fa.map(e,function(a){return null==a?"":a+""})),b=fa.valHooks[this.type]||fa.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=fa.valHooks[e.type]||fa.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),fa.extend({valHooks:{option:{get:function(a){var b=fa.find.attr(a,"value");return null!=b?b:fa.trim(fa.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||e<0,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),fa.each(["radio","checkbox"],function(){fa.valHooks[this]={set:function(a,b){if(fa.isArray(b))return a.checked=fa.inArray(fa(a).val(),b)>-1}},da.checkOn||(fa.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;fa.extend(fa.event,{trigger:function(b,c,d,e){var f,g,h,i,j,k,l,m=[d||X],n=ca.call(b,"type")?b.type:b,o=ca.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||X,3!==d.nodeType&&8!==d.nodeType&&!pb.test(n+fa.event.triggered)&&(n.indexOf(".")>-1&&(o=n.split("."),n=o.shift(),o.sort()),j=n.indexOf(":")<0&&"on"+n,b=b[fa.expando]?b:new fa.Event(n,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=o.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:fa.makeArray(c,[b]),l=fa.event.special[n]||{},e||!l.trigger||l.trigger.apply(d,c)!==!1)){if(!e&&!l.noBubble&&!fa.isWindow(d)){for(i=l.delegateType||n,pb.test(i+n)||(g=g.parentNode);g;g=g.parentNode)m.push(g),h=g;h===(d.ownerDocument||X)&&m.push(h.defaultView||h.parentWindow||a)}for(f=0;(g=m[f++])&&!b.isPropagationStopped();)b.type=f>1?i:l.bindType||n,k=(za.get(g,"events")||{})[b.type]&&za.get(g,"handle"),k&&k.apply(g,c),k=j&&g[j],k&&k.apply&&ya(g)&&(b.result=k.apply(g,c),b.result===!1&&b.preventDefault());return b.type=n,e||b.isDefaultPrevented()||l._default&&l._default.apply(m.pop(),c)!==!1||!ya(d)||j&&fa.isFunction(d[n])&&!fa.isWindow(d)&&(h=d[j],h&&(d[j]=null),fa.event.triggered=n,d[n](),fa.event.triggered=void 0,h&&(d[j]=h)),b.result}},simulate:function(a,b,c){var d=fa.extend(new fa.Event,c,{type:a,isSimulated:!0});fa.event.trigger(d,null,b)}}),fa.fn.extend({trigger:function(a,b){return this.each(function(){fa.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return fa.event.trigger(a,b,c,!0)}}),fa.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){fa.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),fa.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),da.focusin="onfocusin"in a,da.focusin||fa.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){fa.event.simulate(b,a.target,fa.event.fix(a))};fa.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=za.access(d,b);e||d.addEventListener(a,c,!0),za.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=za.access(d,b)-1;e?za.access(d,b,e):(d.removeEventListener(a,c,!0),za.remove(d,b))}}});var qb=a.location,rb=fa.now(),sb=/\?/;fa.parseJSON=function(a){return JSON.parse(a+"")},fa.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||fa.error("Invalid XML: "+b),c};var tb=/#.*$/,ub=/([?&])_=[^&]*/,vb=/^(.*?):[ \t]*([^\r\n]*)$/gm,wb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,xb=/^(?:GET|HEAD)$/,yb=/^\/\//,zb={},Ab={},Bb="*/".concat("*"),Cb=X.createElement("a");Cb.href=qb.href,fa.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:wb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Bb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":fa.parseJSON,"text xml":fa.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?R(R(a,fa.ajaxSettings),b):R(fa.ajaxSettings,a)},ajaxPrefilter:P(zb),ajaxTransport:P(Ab),ajax:function(b,c){function d(b,c,d,h){var j,l,s,t,v,x=c;2!==u&&(u=2,i&&a.clearTimeout(i),e=void 0,g=h||"",w.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(t=S(m,w,d)),t=T(m,t,w,j),j?(m.ifModified&&(v=w.getResponseHeader("Last-Modified"),v&&(fa.lastModified[f]=v),v=w.getResponseHeader("etag"),v&&(fa.etag[f]=v)),204===b||"HEAD"===m.type?x="nocontent":304===b?x="notmodified":(x=t.state,l=t.data,s=t.error,j=!s)):(s=x,!b&&x||(x="error",b<0&&(b=0))),w.status=b,w.statusText=(c||x)+"",j?p.resolveWith(n,[l,x,w]):p.rejectWith(n,[w,x,s]),w.statusCode(r),r=void 0,k&&o.trigger(j?"ajaxSuccess":"ajaxError",[w,m,j?l:s]),q.fireWith(n,[w,x]),k&&(o.trigger("ajaxComplete",[w,m]),--fa.active||fa.event.trigger("ajaxStop")))}"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m=fa.ajaxSetup({},c),n=m.context||m,o=m.context&&(n.nodeType||n.jquery)?fa(n):fa.event,p=fa.Deferred(),q=fa.Callbacks("once memory"),r=m.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0, +getResponseHeader:function(a){var b;if(2===u){if(!h)for(h={};b=vb.exec(g);)h[b[1].toLowerCase()]=b[2];b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(m.mimeType=a),this},statusCode:function(a){var b;if(a)if(u<2)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return e&&e.abort(b),d(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,m.url=((b||m.url||qb.href)+"").replace(tb,"").replace(yb,qb.protocol+"//"),m.type=c.method||c.type||m.method||m.type,m.dataTypes=fa.trim(m.dataType||"*").toLowerCase().match(va)||[""],null==m.crossDomain){j=X.createElement("a");try{j.href=m.url,j.href=j.href,m.crossDomain=Cb.protocol+"//"+Cb.host!=j.protocol+"//"+j.host}catch(x){m.crossDomain=!0}}if(m.data&&m.processData&&"string"!=typeof m.data&&(m.data=fa.param(m.data,m.traditional)),Q(zb,m,c,w),2===u)return w;k=fa.event&&m.global,k&&0===fa.active++&&fa.event.trigger("ajaxStart"),m.type=m.type.toUpperCase(),m.hasContent=!xb.test(m.type),f=m.url,m.hasContent||(m.data&&(f=m.url+=(sb.test(f)?"&":"?")+m.data,delete m.data),m.cache===!1&&(m.url=ub.test(f)?f.replace(ub,"$1_="+rb++):f+(sb.test(f)?"&":"?")+"_="+rb++)),m.ifModified&&(fa.lastModified[f]&&w.setRequestHeader("If-Modified-Since",fa.lastModified[f]),fa.etag[f]&&w.setRequestHeader("If-None-Match",fa.etag[f])),(m.data&&m.hasContent&&m.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",m.contentType),w.setRequestHeader("Accept",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+("*"!==m.dataTypes[0]?", "+Bb+"; q=0.01":""):m.accepts["*"]);for(l in m.headers)w.setRequestHeader(l,m.headers[l]);if(m.beforeSend&&(m.beforeSend.call(n,w,m)===!1||2===u))return w.abort();v="abort";for(l in{success:1,error:1,complete:1})w[l](m[l]);if(e=Q(Ab,m,c,w)){if(w.readyState=1,k&&o.trigger("ajaxSend",[w,m]),2===u)return w;m.async&&m.timeout>0&&(i=a.setTimeout(function(){w.abort("timeout")},m.timeout));try{u=1,e.send(s,d)}catch(x){if(!(u<2))throw x;d(-1,x)}}else d(-1,"No Transport");return w},getJSON:function(a,b,c){return fa.get(a,b,c,"json")},getScript:function(a,b){return fa.get(a,void 0,b,"script")}}),fa.each(["get","post"],function(a,b){fa[b]=function(a,c,d,e){return fa.isFunction(c)&&(e=e||d,d=c,c=void 0),fa.ajax(fa.extend({url:a,type:b,dataType:e,data:c,success:d},fa.isPlainObject(a)&&a))}}),fa._evalUrl=function(a){return fa.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},fa.fn.extend({wrapAll:function(a){var b;return fa.isFunction(a)?this.each(function(b){fa(this).wrapAll(a.call(this,b))}):(this[0]&&(b=fa(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return fa.isFunction(a)?this.each(function(b){fa(this).wrapInner(a.call(this,b))}):this.each(function(){var b=fa(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=fa.isFunction(a);return this.each(function(c){fa(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){fa.nodeName(this,"body")||fa(this).replaceWith(this.childNodes)}).end()}}),fa.expr.filters.hidden=function(a){return!fa.expr.filters.visible(a)},fa.expr.filters.visible=function(a){return a.offsetWidth>0||a.offsetHeight>0||a.getClientRects().length>0};var Db=/%20/g,Eb=/\[\]$/,Fb=/\r?\n/g,Gb=/^(?:submit|button|image|reset|file)$/i,Hb=/^(?:input|select|textarea|keygen)/i;fa.param=function(a,b){var c,d=[],e=function(a,b){b=fa.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=fa.ajaxSettings&&fa.ajaxSettings.traditional),fa.isArray(a)||a.jquery&&!fa.isPlainObject(a))fa.each(a,function(){e(this.name,this.value)});else for(c in a)U(c,a[c],b,e);return d.join("&").replace(Db,"+")},fa.fn.extend({serialize:function(){return fa.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=fa.prop(this,"elements");return a?fa.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!fa(this).is(":disabled")&&Hb.test(this.nodeName)&&!Gb.test(a)&&(this.checked||!Ha.test(a))}).map(function(a,b){var c=fa(this).val();return null==c?null:fa.isArray(c)?fa.map(c,function(a){return{name:b.name,value:a.replace(Fb,"\r\n")}}):{name:b.name,value:c.replace(Fb,"\r\n")}}).get()}}),fa.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ib={0:200,1223:204},Jb=fa.ajaxSettings.xhr();da.cors=!!Jb&&"withCredentials"in Jb,da.ajax=Jb=!!Jb,fa.ajaxTransport(function(b){var c,d;if(da.cors||Jb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ib[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),fa.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return fa.globalEval(a),a}}}),fa.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),fa.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=fa(" + + +
              +
              +
              +
              +
              loading
              +
              +
              + + + + + + \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/6367FDA14D37B4E1CFB85A6E0F876E4E8CD5AF4E b/home/.surf/cache/WebKitCache/Version 16/Blobs/6367FDA14D37B4E1CFB85A6E0F876E4E8CD5AF4E new file mode 100644 index 0000000..31e62db --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/6367FDA14D37B4E1CFB85A6E0F876E4E8CD5AF4E @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-6afc16"],{46481(a,b,c){c.d(b,{Z:()=>AutocompleteElement});var d=c(10160);let e=window.testScreenReaderDelay||100;class Autocomplete{constructor(a,b,c,e=!1){var f;if(this.container=a,this.input=b,this.results=c,this.combobox=new d.Z(b,c),this.feedback=document.getElementById(`${this.results.id}-feedback`),this.autoselectEnabled=e,this.clearButton=document.getElementById(`${this.input.id||this.input.name}-clear`),this.clientOptions=c.querySelectorAll("[role=option]"),this.feedback&&(this.feedback.setAttribute("aria-live","polite"),this.feedback.setAttribute("aria-atomic","true")),this.clearButton&&!this.clearButton.getAttribute("aria-label")){let g=document.querySelector(`label[for="${this.input.name}"]`);this.clearButton.setAttribute("aria-label","clear:"),this.clearButton.setAttribute("aria-labelledby",`${this.clearButton.id} ${(null==g?void 0:g.id)||""}`)}this.input.getAttribute("aria-expanded")||this.input.setAttribute("aria-expanded","false"),this.results.hidden=!0,this.results.setAttribute("aria-label","results"),this.input.setAttribute("autocomplete","off"),this.input.setAttribute("spellcheck","false"),this.interactingWithList=!1,this.onInputChange=function(a,b=0){let c;return function(...d){clearTimeout(c),c=window.setTimeout(()=>{clearTimeout(c),a(...d)},b)}}(this.onInputChange.bind(this),300),this.onResultsMouseDown=this.onResultsMouseDown.bind(this),this.onInputBlur=this.onInputBlur.bind(this),this.onInputFocus=this.onInputFocus.bind(this),this.onKeydown=this.onKeydown.bind(this),this.onCommit=this.onCommit.bind(this),this.handleClear=this.handleClear.bind(this),this.input.addEventListener("keydown",this.onKeydown),this.input.addEventListener("focus",this.onInputFocus),this.input.addEventListener("blur",this.onInputBlur),this.input.addEventListener("input",this.onInputChange),this.results.addEventListener("mousedown",this.onResultsMouseDown),this.results.addEventListener("combobox-commit",this.onCommit),null===(f=this.clearButton)|| void 0===f||f.addEventListener("click",this.handleClear)}destroy(){this.input.removeEventListener("keydown",this.onKeydown),this.input.removeEventListener("focus",this.onInputFocus),this.input.removeEventListener("blur",this.onInputBlur),this.input.removeEventListener("input",this.onInputChange),this.results.removeEventListener("mousedown",this.onResultsMouseDown),this.results.removeEventListener("combobox-commit",this.onCommit)}handleClear(a){a.preventDefault(),"true"===this.input.getAttribute("aria-expanded")&&(this.input.setAttribute("aria-expanded","false"),this.updateFeedbackForScreenReaders("Results hidden.")),this.input.value="",this.container.value="",this.input.focus(),this.input.dispatchEvent(new Event("change")),this.container.open=!1}onKeydown(a){if("Enter"===a.key&&this.container.open&&this.autoselectEnabled){let b=this.results.children[0];b&&(a.stopPropagation(),a.preventDefault(),this.onCommit({target:b}))}if("Escape"===a.key&&this.container.open)this.container.open=!1,a.stopPropagation(),a.preventDefault();else if(a.altKey&&"ArrowUp"===a.key&&this.container.open)this.container.open=!1,a.stopPropagation(),a.preventDefault();else if(a.altKey&&"ArrowDown"===a.key&&!this.container.open){if(!this.input.value.trim())return;this.container.open=!0,a.stopPropagation(),a.preventDefault()}}onInputFocus(){this.fetchResults()}onInputBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.container.open=!1}onCommit({target:a}){let b=a;if(!(b instanceof HTMLElement)||(this.container.open=!1,b instanceof HTMLAnchorElement))return;let c=b.getAttribute("data-autocomplete-value")||b.textContent;this.updateFeedbackForScreenReaders(`${b.textContent||""} selected.`),this.container.value=c,c||this.updateFeedbackForScreenReaders("Results hidden.")}onResultsMouseDown(){this.interactingWithList=!0}onInputChange(){this.feedback&&this.feedback.textContent&&(this.feedback.textContent=""),this.container.removeAttribute("value"),this.fetchResults()}identifyOptions(){let a=0;for(let b of this.results.querySelectorAll('[role="option"]:not([id])'))b.id=`${this.results.id}-option-${a++}`}updateFeedbackForScreenReaders(a){setTimeout(()=>{this.feedback&&(this.feedback.textContent=a)},e)}fetchResults(){let a=this.input.value.trim();if(!a){this.container.open=!1;return}let b=this.container.src;if(!b)return;let c=new URL(b,window.location.href),d=new URLSearchParams(c.search.slice(1));d.append("q",a),c.search=d.toString(),this.container.dispatchEvent(new CustomEvent("loadstart")),this.container.fetchResult(this.input,c.toString()).then(a=>{this.results.innerHTML=a,this.identifyOptions();let b=this.results.querySelectorAll('[role="option"]'),c=!!b.length,d=b.length,[e]=b,f=null==e?void 0:e.textContent;this.autoselectEnabled&&f?this.updateFeedbackForScreenReaders(`${d} results. ${f} is the top result: Press Enter to activate.`):this.updateFeedbackForScreenReaders(`${d||"No"} results.`),this.container.open=c,this.container.dispatchEvent(new CustomEvent("load")),this.container.dispatchEvent(new CustomEvent("loadend"))}).catch(()=>{this.container.dispatchEvent(new CustomEvent("error")),this.container.dispatchEvent(new CustomEvent("loadend"))})}open(){this.results.hidden&&(this.combobox.start(),this.results.hidden=!1)}close(){this.results.hidden||(this.combobox.stop(),this.results.hidden=!0)}}class AutocompleteEvent extends CustomEvent{constructor(a,b){super(a,b),this.relatedTarget=b.relatedTarget}}let f=new WeakMap;function g(a){return new Promise((b,c)=>{a.onload=function(){a.status>=200&&a.status<300?b(a.responseText):c(Error(a.responseText))},a.onerror=c,a.send()})}let h=new WeakMap;class AutocompleteElement extends HTMLElement{constructor(){super(...arguments),this.fetchResult=function(a,b){let c=new XMLHttpRequest;return c.open("GET",b,!0),c.setRequestHeader("Accept","text/fragment+html"),function a(b,c){let d=f.get(b);d&&d.abort(),f.set(b,c);let e=()=>f.delete(b),h=g(c);return h.then(e,e),h}(a,c)}}connectedCallback(){let a=this.getAttribute("for");if(!a)return;let b=this.querySelector("input"),c=document.getElementById(a);if(!(b instanceof HTMLInputElement)||!c)return;let d="true"===this.getAttribute("data-autoselect");h.set(this,new Autocomplete(this,b,c,d)),c.setAttribute("role","listbox")}disconnectedCallback(){let a=h.get(this);a&&(a.destroy(),h.delete(this))}get src(){return this.getAttribute("src")||""}set src(a){this.setAttribute("src",a)}get value(){return this.getAttribute("value")||""}set value(a){this.setAttribute("value",a)}get open(){return this.hasAttribute("open")}set open(a){a?this.setAttribute("open",""):this.removeAttribute("open")}static get observedAttributes(){return["open","value"]}attributeChangedCallback(a,b,c){if(b===c)return;let d=h.get(this);if(d)switch(a){case"open":null===c?d.close():d.open();break;case"value":null!==c&&(d.input.value=c),this.dispatchEvent(new AutocompleteEvent("auto-complete-change",{bubbles:!0,relatedTarget:d.input}))}}}window.customElements.get("auto-complete")||(window.AutocompleteElement=AutocompleteElement,window.customElements.define("auto-complete",AutocompleteElement))},76006(a,b,c){c.d(b,{Lj:()=>p,Ih:()=>w,P4:()=>l,nW:()=>E,fA:()=>u,GO:()=>v});let d=new WeakSet;function e(a){h(a),g(a)}let f=new WeakMap;function g(a=document){if(f.has(a))return f.get(a);let b=!1,c=new MutationObserver(a=>{for(let b of a)if("attributes"===b.type&&b.target instanceof Element)k(b.target);else if("childList"===b.type&&b.addedNodes.length)for(let c of b.addedNodes)c instanceof Element&&h(c)});c.observe(a,{childList:!0,subtree:!0,attributeFilter:["data-action"]});let d={get closed(){return b},unsubscribe(){b=!0,f.delete(a),c.disconnect()}};return f.set(a,d),d}function h(a){for(let b of a.querySelectorAll("[data-action]"))k(b);a instanceof Element&&a.hasAttribute("data-action")&&k(a)}function i(a){let b=a.currentTarget;for(let c of j(b))if(a.type===c.type){let e=b.closest(c.tag);d.has(e)&&"function"==typeof e[c.method]&&e[c.method](a);let f=b.getRootNode();if(f instanceof ShadowRoot&&d.has(f.host)&&f.host.matches(c.tag)){let g=f.host;"function"==typeof g[c.method]&&g[c.method](a)}}}function*j(a){for(let b of(a.getAttribute("data-action")||"").trim().split(/\s+/)){let c=b.lastIndexOf(":"),d=Math.max(0,b.lastIndexOf("#"))||b.length;yield{type:b.slice(0,c),tag:b.slice(c+1,d),method:b.slice(d+1)||"handleEvent"}}}function k(a){for(let b of j(a))a.addEventListener(b.type,i)}function l(a,b){let c=a.tagName.toLowerCase();if(a.shadowRoot){for(let d of a.shadowRoot.querySelectorAll(`[data-target~="${c}.${b}"]`))if(!d.closest(c))return d}for(let e of a.querySelectorAll(`[data-target~="${c}.${b}"]`))if(e.closest(c)===a)return e}let m=a=>String("symbol"==typeof a?a.description:a).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),n=(a,b="property")=>{let c=m(a);if(!c.includes("-"))throw new DOMException(`${b}: ${String(a)} is not a valid ${b} name`,"SyntaxError");return c},o="attr";function p(a,b){t(a,o).add(b)}let q=new WeakSet;function r(a,b){if(q.has(a))return;q.add(a);let c=Object.getPrototypeOf(a),d=c?.constructor?.attrPrefix??"data-";for(let e of(b||(b=t(c,o)),b)){let f=a[e],g=n(`${d}${e}`),h={configurable:!0,get(){return this.getAttribute(g)||""},set(a){this.setAttribute(g,a||"")}};"number"==typeof f?h={configurable:!0,get(){return Number(this.getAttribute(g)||0)},set(a){this.setAttribute(g,a)}}:"boolean"==typeof f&&(h={configurable:!0,get(){return this.hasAttribute(g)},set(a){this.toggleAttribute(g,a)}}),Object.defineProperty(a,e,h),e in a&&!a.hasAttribute(g)&&h.set.call(a,f)}}let s=Symbol.for("catalyst");class CatalystDelegate{constructor(a){let b=this,c=a.prototype.connectedCallback;a.prototype.connectedCallback=function(){b.connectedCallback(this,c)};let d=a.prototype.disconnectedCallback;a.prototype.disconnectedCallback=function(){b.disconnectedCallback(this,d)};let e=a.prototype.attributeChangedCallback;a.prototype.attributeChangedCallback=function(a,c,d){b.attributeChangedCallback(this,a,c,d,e)};let f=a.observedAttributes||[];Object.defineProperty(a,"observedAttributes",{configurable:!0,get(){return b.observedAttributes(this,f)},set(a){f=a}}),function(a){let b=a.observedAttributes||[],c=a.attrPrefix??"data-",d=a=>n(`${c}${a}`);Object.defineProperty(a,"observedAttributes",{configurable:!0,get:()=>[...t(a.prototype,o)].map(d).concat(b),set(a){b=a}})}(a),function(a){let b=m(a.name).replace(/-element$/,"");try{window.customElements.define(b,a),window[a.name]=customElements.get(b)}catch(c){if(!(c instanceof DOMException&&"NotSupportedError"===c.name))throw c}}(a)}observedAttributes(a,b){return b}connectedCallback(a,b){var c;a.toggleAttribute("data-catalyst",!0),customElements.upgrade(a),function(a){for(let b of a.querySelectorAll("template[data-shadowroot]"))b.parentElement===a&&a.attachShadow({mode:"closed"===b.getAttribute("data-shadowroot")?"closed":"open"}).append(b.content.cloneNode(!0))}(a),r(a),c=a,d.add(c),c.shadowRoot&&e(c.shadowRoot),h(c),g(c.ownerDocument),b?.call(a),a.shadowRoot&&e(a.shadowRoot)}disconnectedCallback(a,b){b?.call(a)}attributeChangedCallback(a,b,c,d,e){r(a),"data-catalyst"!==b&&e&&e.call(a,b,c,d)}}function t(a,b){if(!Object.prototype.hasOwnProperty.call(a,s)){let c=a[s],d=a[s]=new Map;if(c)for(let[e,f]of c)d.set(e,new Set(f))}let g=a[s];return g.has(b)||g.set(b,new Set),g.get(b)}function u(a,b){t(a,"target").add(b),Object.defineProperty(a,b,{configurable:!0,get(){return l(this,b)}})}function v(a,b){t(a,"targets").add(b),Object.defineProperty(a,b,{configurable:!0,get(){return function(a,b){let c=a.tagName.toLowerCase(),d=[];if(a.shadowRoot)for(let e of a.shadowRoot.querySelectorAll(`[data-targets~="${c}.${b}"]`))e.closest(c)||d.push(e);for(let f of a.querySelectorAll(`[data-targets~="${c}.${b}"]`))f.closest(c)===a&&d.push(f);return d}(this,b)}})}function w(a){new CatalystDelegate(a)}let x=new Map,y=new Promise(a=>{"loading"!==document.readyState?a():document.addEventListener("readystatechange",()=>a(),{once:!0})}),z=new Promise(a=>{let b=new AbortController;b.signal.addEventListener("abort",()=>a());let c={once:!0,passive:!0,signal:b.signal},d=()=>b.abort();document.addEventListener("mousedown",d,c),document.addEventListener("touchstart",d,c),document.addEventListener("keydown",d,c),document.addEventListener("pointerdown",d,c)}),A={ready:()=>y,firstInteraction:()=>z,visible:a=>new Promise(b=>{let c=new IntersectionObserver(a=>{for(let d of a)if(d.isIntersecting){b(),c.disconnect();return}},{rootMargin:"0px 0px 256px 0px",threshold:.01});for(let d of document.querySelectorAll(a))c.observe(d)})},B=new WeakMap;function C(a){cancelAnimationFrame(B.get(a)||0),B.set(a,requestAnimationFrame(()=>{for(let b of x.keys()){let c=a.matches(b)?a:a.querySelector(b);if(customElements.get(b)||c){let d=c?.getAttribute("data-load-on")||"ready",e=d in A?A[d]:A.ready;for(let f of x.get(b)||[])e(b).then(f);x.delete(b),B.delete(a)}}}))}let D;function E(a,b){x.has(a)||x.set(a,new Set),x.get(a).add(b),C(document.body),D||(D=new MutationObserver(a=>{if(x.size)for(let b of a)for(let c of b.addedNodes)c instanceof Element&&C(c)})).observe(document,{subtree:!0,childList:!0})}},10160(a,b,c){c.d(b,{Z:()=>Combobox});class Combobox{constructor(a,b,{tabInsertsSuggestions:c,defaultFirstOption:e}={}){this.input=a,this.list=b,this.tabInsertsSuggestions=null==c||c,this.defaultFirstOption=null!=e&&e,this.isComposing=!1,b.id||(b.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=a=>d(a,this),this.compositionEventHandler=a=>i(a,this),this.inputHandler=this.clearSelection.bind(this),a.setAttribute("role","combobox"),a.setAttribute("aria-controls",b.id),a.setAttribute("aria-expanded","false"),a.setAttribute("aria-autocomplete","list"),a.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",e),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",e)}indicateDefaultOption(){var a;this.defaultFirstOption&&(null===(a=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(h)[0])|| void 0===a||a.setAttribute("data-combobox-option-default","true"))}navigate(a=1){let b=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(h)[0],c=Array.from(this.list.querySelectorAll('[role="option"]')).filter(h),d=c.indexOf(b);if(d===c.length-1&&1===a||0===d&& -1===a){this.clearSelection(),this.input.focus();return}let e=1===a?0:c.length-1;if(b&&d>=0){let f=d+a;f>=0&&f0||a.offsetHeight>0)}function i(a,b){b.isComposing="compositionstart"===a.type;let c=document.getElementById(b.input.getAttribute("aria-controls")||"");c&&b.clearSelection()}function j(a,b){k(a,b)||(a.scrollTop=b.offsetTop)}function k(a,b){let c=a.scrollTop,d=c+a.clientHeight,e=b.offsetTop,f=e+b.clientHeight;return e>=c&&f<=d}}}]) +//# sourceMappingURL=vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-6afc16-485a8df6e4fa.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/6441E0BF141264E458737EFDC8007DA491BCC3D9 b/home/.surf/cache/WebKitCache/Version 16/Blobs/6441E0BF141264E458737EFDC8007DA491BCC3D9 new file mode 100644 index 0000000..92c6112 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/6441E0BF141264E458737EFDC8007DA491BCC3D9 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/687DB5A3A4F3FA14937FD94E2A09B1947C2452F3 b/home/.surf/cache/WebKitCache/Version 16/Blobs/687DB5A3A4F3FA14937FD94E2A09B1947C2452F3 new file mode 100644 index 0000000..1b04d2f --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/687DB5A3A4F3FA14937FD94E2A09B1947C2452F3 @@ -0,0 +1,8 @@ +/*! + * Bootstrap v4.2.1 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue: #263DFF;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #00CA58;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #263DFF;--secondary: #6c757d;--success: #00CA58;--info: #17a2b8;--warning: #ffc107;--danger: #dc3545;--light: #ECEFF1;--dark: #343a40;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#607D8B;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0 !important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#263DFF;text-decoration:none;background-color:transparent}a:hover{color:#0017d9;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#607D8B;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#607D8B}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container{max-width:540px}}@media (min-width: 768px){.container{max-width:720px}}@media (min-width: 992px){.container{max-width:960px}}@media (min-width: 1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width: 576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width: 768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width: 992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width: 1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#c2c9ff}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#8e9aff}.table-hover .table-primary:hover{background-color:#a9b2ff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a9b2ff}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#d6d8db}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>th,.table-success>td{background-color:#b8f0d0}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#7ae3a8}.table-hover .table-success:hover{background-color:#a3ecc2}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a3ecc2}.table-info,.table-info>th,.table-info>td{background-color:#bee5eb}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>th,.table-warning>td{background-color:#ffeeba}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5c6cb}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table .thead-dark th{color:#fff;background-color:#607D8B;border-color:#32383e}.table .thead-light th{color:#607D8B;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#607D8B}.table-dark th,.table-dark td,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#607D8B;background-color:#fff;background-clip:padding-box;border:1px solid #F5F5F5;border-radius:.25rem;-webkit-transition:border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out}@media screen and (prefers-reduced-motion: reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#607D8B;background-color:#fff;border-color:#a6afff;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(38,61,255,0.25);box-shadow:0 0 0 .2rem rgba(38,61,255,0.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#607D8B;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#607D8B;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#00CA58}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(0,202,88,0.9);border-radius:.25rem}.was-validated .form-control:valid,.form-control.is-valid{border-color:#00CA58;padding-right:2.25rem;background-repeat:no-repeat;background-position:center right calc(2.25rem / 4);background-size:calc(2.25rem / 2) calc(2.25rem / 2);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300CA58' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e")}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#00CA58;-webkit-box-shadow:0 0 0 .2rem rgba(0,202,88,0.25);box-shadow:0 0 0 .2rem rgba(0,202,88,0.25)}.was-validated .form-control:valid ~ .valid-feedback,.was-validated .form-control:valid ~ .valid-tooltip,.form-control.is-valid ~ .valid-feedback,.form-control.is-valid ~ .valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:2.25rem;background-position:top calc(2.25rem / 4) right calc(2.25rem / 4)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#00CA58;padding-right:3.4375rem;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300CA58' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") no-repeat center right 1.75rem/1.125rem 1.125rem}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#00CA58;-webkit-box-shadow:0 0 0 .2rem rgba(0,202,88,0.25);box-shadow:0 0 0 .2rem rgba(0,202,88,0.25)}.was-validated .custom-select:valid ~ .valid-feedback,.was-validated .custom-select:valid ~ .valid-tooltip,.custom-select.is-valid ~ .valid-feedback,.custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .form-control-file:valid ~ .valid-feedback,.was-validated .form-control-file:valid ~ .valid-tooltip,.form-control-file.is-valid ~ .valid-feedback,.form-control-file.is-valid ~ .valid-tooltip{display:block}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#00CA58}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#00CA58}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{border-color:#00CA58}.was-validated .custom-control-input:valid ~ .valid-feedback,.was-validated .custom-control-input:valid ~ .valid-tooltip,.custom-control-input.is-valid ~ .valid-feedback,.custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{border-color:#00fd6e;background-color:#00fd6e}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 .2rem rgba(0,202,88,0.25);box-shadow:0 0 0 .2rem rgba(0,202,88,0.25)}.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before{border-color:#00CA58}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#00CA58}.was-validated .custom-file-input:valid ~ .valid-feedback,.was-validated .custom-file-input:valid ~ .valid-tooltip,.custom-file-input.is-valid ~ .valid-feedback,.custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{border-color:#00CA58;-webkit-box-shadow:0 0 0 .2rem rgba(0,202,88,0.25);box-shadow:0 0 0 .2rem rgba(0,202,88,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,0.9);border-radius:.25rem}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:2.25rem;background-repeat:no-repeat;background-position:center right calc(2.25rem / 4);background-size:calc(2.25rem / 2) calc(2.25rem / 2);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E")}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;-webkit-box-shadow:0 0 0 .2rem rgba(220,53,69,0.25);box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}.was-validated .form-control:invalid ~ .invalid-feedback,.was-validated .form-control:invalid ~ .invalid-tooltip,.form-control.is-invalid ~ .invalid-feedback,.form-control.is-invalid ~ .invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:2.25rem;background-position:top calc(2.25rem / 4) right calc(2.25rem / 4)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dc3545;padding-right:3.4375rem;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") no-repeat center right 1.75rem/1.125rem 1.125rem}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dc3545;-webkit-box-shadow:0 0 0 .2rem rgba(220,53,69,0.25);box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}.was-validated .custom-select:invalid ~ .invalid-feedback,.was-validated .custom-select:invalid ~ .invalid-tooltip,.custom-select.is-invalid ~ .invalid-feedback,.custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-control-file:invalid ~ .invalid-feedback,.was-validated .form-control-file:invalid ~ .invalid-tooltip,.form-control-file.is-invalid ~ .invalid-feedback,.form-control-file.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#dc3545}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#dc3545}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{border-color:#dc3545}.was-validated .custom-control-input:invalid ~ .invalid-feedback,.was-validated .custom-control-input:invalid ~ .invalid-tooltip,.custom-control-input.is-invalid ~ .invalid-feedback,.custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 .2rem rgba(220,53,69,0.25);box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before{border-color:#dc3545}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#dc3545}.was-validated .custom-file-input:invalid ~ .invalid-feedback,.was-validated .custom-file-input:invalid ~ .invalid-tooltip,.custom-file-input.is-invalid ~ .invalid-feedback,.custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{border-color:#dc3545;-webkit-box-shadow:0 0 0 .2rem rgba(220,53,69,0.25);box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#607D8B;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;-webkit-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out}@media screen and (prefers-reduced-motion: reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#607D8B;text-decoration:none}.btn:focus,.btn.focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(38,61,255,0.25);box-shadow:0 0 0 .2rem rgba(38,61,255,0.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#263DFF;border-color:#263DFF}.btn-primary:hover{color:#fff;background-color:#001bff;border-color:#001af2}.btn-primary:focus,.btn-primary.focus{-webkit-box-shadow:0 0 0 .2rem rgba(71,90,255,0.5);box-shadow:0 0 0 .2rem rgba(71,90,255,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#263DFF;border-color:#263DFF}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#001af2;border-color:#0018e5}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(71,90,255,0.5);box-shadow:0 0 0 .2rem rgba(71,90,255,0.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary:focus,.btn-secondary.focus{-webkit-box-shadow:0 0 0 .2rem rgba(130,138,145,0.5);box-shadow:0 0 0 .2rem rgba(130,138,145,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(130,138,145,0.5);box-shadow:0 0 0 .2rem rgba(130,138,145,0.5)}.btn-success{color:#fff;background-color:#00CA58;border-color:#00CA58}.btn-success:hover{color:#fff;background-color:#00a447;border-color:#009742}.btn-success:focus,.btn-success.focus{-webkit-box-shadow:0 0 0 .2rem rgba(38,210,113,0.5);box-shadow:0 0 0 .2rem rgba(38,210,113,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#00CA58;border-color:#00CA58}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#009742;border-color:#008a3c}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(38,210,113,0.5);box-shadow:0 0 0 .2rem rgba(38,210,113,0.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info:focus,.btn-info.focus{-webkit-box-shadow:0 0 0 .2rem rgba(58,176,195,0.5);box-shadow:0 0 0 .2rem rgba(58,176,195,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(58,176,195,0.5);box-shadow:0 0 0 .2rem rgba(58,176,195,0.5)}.btn-warning{color:#607D8B;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#607D8B;background-color:#e0a800;border-color:#d39e00}.btn-warning:focus,.btn-warning.focus{-webkit-box-shadow:0 0 0 .2rem rgba(222,170,12,0.5);box-shadow:0 0 0 .2rem rgba(222,170,12,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#607D8B;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#607D8B;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(222,170,12,0.5);box-shadow:0 0 0 .2rem rgba(222,170,12,0.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger:focus,.btn-danger.focus{-webkit-box-shadow:0 0 0 .2rem rgba(225,83,97,0.5);box-shadow:0 0 0 .2rem rgba(225,83,97,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(225,83,97,0.5);box-shadow:0 0 0 .2rem rgba(225,83,97,0.5)}.btn-light{color:#607D8B;background-color:#ECEFF1;border-color:#ECEFF1}.btn-light:hover{color:#607D8B;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{-webkit-box-shadow:0 0 0 .2rem rgba(216,217,219,0.5);box-shadow:0 0 0 .2rem rgba(216,217,219,0.5)}.btn-light.disabled,.btn-light:disabled{color:#607D8B;background-color:#ECEFF1;border-color:#ECEFF1}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#607D8B;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(216,217,219,0.5);box-shadow:0 0 0 .2rem rgba(216,217,219,0.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{-webkit-box-shadow:0 0 0 .2rem rgba(82,88,93,0.5);box-shadow:0 0 0 .2rem rgba(82,88,93,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(82,88,93,0.5);box-shadow:0 0 0 .2rem rgba(82,88,93,0.5)}.btn-outline-primary{color:#263DFF;border-color:#263DFF}.btn-outline-primary:hover{color:#fff;background-color:#263DFF;border-color:#263DFF}.btn-outline-primary:focus,.btn-outline-primary.focus{-webkit-box-shadow:0 0 0 .2rem rgba(38,61,255,0.5);box-shadow:0 0 0 .2rem rgba(38,61,255,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#263DFF;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#263DFF;border-color:#263DFF}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(38,61,255,0.5);box-shadow:0 0 0 .2rem rgba(38,61,255,0.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:focus,.btn-outline-secondary.focus{-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,0.5);box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(108,117,125,0.5);box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-outline-success{color:#00CA58;border-color:#00CA58}.btn-outline-success:hover{color:#fff;background-color:#00CA58;border-color:#00CA58}.btn-outline-success:focus,.btn-outline-success.focus{-webkit-box-shadow:0 0 0 .2rem rgba(0,202,88,0.5);box-shadow:0 0 0 .2rem rgba(0,202,88,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00CA58;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#00CA58;border-color:#00CA58}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(0,202,88,0.5);box-shadow:0 0 0 .2rem rgba(0,202,88,0.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:focus,.btn-outline-info.focus{-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,0.5);box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(23,162,184,0.5);box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#607D8B;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:focus,.btn-outline-warning.focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,0.5);box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#607D8B;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,193,7,0.5);box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:focus,.btn-outline-danger.focus{-webkit-box-shadow:0 0 0 .2rem rgba(220,53,69,0.5);box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(220,53,69,0.5);box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-outline-light{color:#ECEFF1;border-color:#ECEFF1}.btn-outline-light:hover{color:#607D8B;background-color:#ECEFF1;border-color:#ECEFF1}.btn-outline-light:focus,.btn-outline-light.focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,0.5);box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#ECEFF1;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#607D8B;background-color:#ECEFF1;border-color:#ECEFF1}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(248,249,250,0.5);box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,0.5);box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 .2rem rgba(52,58,64,0.5);box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-link{font-weight:400;color:#263DFF}.btn-link:hover{color:#0017d9;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#6c757d;pointer-events:none}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{-webkit-transition:opacity 0.15s linear;transition:opacity 0.15s linear}@media screen and (prefers-reduced-motion: reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;transition:height 0.35s ease}@media screen and (prefers-reduced-motion: reduce){.collapsing{-webkit-transition:none;transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#607D8B;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-right{right:0;left:auto}}.dropdown-menu-left{right:auto;left:0}@media (min-width: 576px){.dropdown-menu-sm-left{right:auto;left:0}}@media (min-width: 768px){.dropdown-menu-md-left{right:auto;left:0}}@media (min-width: 992px){.dropdown-menu-lg-left{right:auto;left:0}}@media (min-width: 1200px){.dropdown-menu-xl-left{right:auto;left:0}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#607D8B;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:first-child{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.dropdown-item:last-child{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:#ECEFF1}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#263DFF}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#607D8B}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus ~ .custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-append .btn:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#607D8B;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #F5F5F5;border-radius:.25rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(2.875rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.8125rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;border-color:#263DFF;background-color:#263DFF}.custom-control-input:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 .2rem rgba(38,61,255,0.25);box-shadow:0 0 0 .2rem rgba(38,61,255,0.25)}.custom-control-input:focus:not(:checked) ~ .custom-control-label::before{border-color:#a6afff}.custom-control-input:not(:disabled):active ~ .custom-control-label::before{color:#fff;background-color:#d9ddff;border-color:#d9ddff}.custom-control-input:disabled ~ .custom-control-label{color:#6c757d}.custom-control-input:disabled ~ .custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{border-color:#263DFF;background-color:#263DFF}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(38,61,255,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(38,61,255,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(38,61,255,0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;-webkit-transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-transform 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-transform 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:transform 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:transform 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,-webkit-transform 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out}@media screen and (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{-webkit-transition:none;transition:none}}.custom-switch .custom-control-input:checked ~ .custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(38,61,255,0.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-weight:400;line-height:1.5;color:#607D8B;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #F5F5F5;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#a6afff;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(166,175,255,0.5);box-shadow:0 0 0 .2rem rgba(166,175,255,0.5)}.custom-select:focus::-ms-value{color:#607D8B;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#a6afff;-webkit-box-shadow:0 0 0 .2rem rgba(38,61,255,0.25);box-shadow:0 0 0 .2rem rgba(38,61,255,0.25)}.custom-file-input:disabled ~ .custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#607D8B;background-color:#fff;border:1px solid #F5F5F5;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#607D8B;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(38,61,255,0.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(38,61,255,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(38,61,255,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(38,61,255,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#263DFF;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#d9ddff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#263DFF;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{-webkit-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#d9ddff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#263DFF;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{-webkit-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#d9ddff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{-webkit-transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,-webkit-box-shadow 0.15s ease-in-out}@media screen and (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{-webkit-transition:none;transition:none}}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#607D8B;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#263DFF}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.5);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255,255,255,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;color:inherit;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-0.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width: 576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width: 576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-img-top,.card-group>.card:first-child .card-header{border-top-right-radius:0}.card-group>.card:first-child .card-img-bottom,.card-group>.card:first-child .card-footer{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-img-top,.card-group>.card:last-child .card-header{border-top-left-radius:0}.card-group>.card:last-child .card-img-bottom,.card-group>.card:last-child .card-footer{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-img-top,.card-group>.card:only-child .card-header{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-img-bottom,.card-group>.card:only-child .card-footer{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width: 576px){.card-columns{-webkit-column-count:3;column-count:3;-webkit-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card{overflow:hidden}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion .card .card-header{margin-bottom:-1px}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#263DFF;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0017d9;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(38,61,255,0.25);box-shadow:0 0 0 .2rem rgba(38,61,255,0.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#263DFF;border-color:#263DFF}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#263DFF}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#001af2}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:hover,a.badge-secondary:focus{color:#fff;background-color:#545b62}.badge-success{color:#fff;background-color:#00CA58}a.badge-success:hover,a.badge-success:focus{color:#fff;background-color:#009742}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#117a8b}.badge-warning{color:#607D8B;background-color:#ffc107}a.badge-warning:hover,a.badge-warning:focus{color:#607D8B;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#bd2130}.badge-light{color:#607D8B;background-color:#ECEFF1}a.badge-light:hover,a.badge-light:focus{color:#607D8B;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#142085;background-color:#d4d8ff;border-color:#c2c9ff}.alert-primary hr{border-top-color:#a9b2ff}.alert-primary .alert-link{color:#0d1559}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#00692e;background-color:#ccf4de;border-color:#b8f0d0}.alert-success hr{border-top-color:#a3ecc2}.alert-success .alert-link{color:#003618}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#263DFF;-webkit-transition:width 0.6s ease;transition:width 0.6s ease}@media screen and (prefers-reduced-motion: reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#607D8B;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{color:#607D8B;text-decoration:none;background-color:#ECEFF1}.list-group-item-action:active{color:#607D8B;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:hover,.list-group-item:focus{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#263DFF;border-color:#263DFF}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#142085;background-color:#c2c9ff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#142085;background-color:#a9b2ff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#142085;border-color:#142085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#00692e;background-color:#b8f0d0}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#00692e;background-color:#a3ecc2}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#00692e;border-color:#00692e}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border:1px solid rgba(0,0,0,0.1);border-radius:.25rem;-webkit-box-shadow:0 0.25rem 0.75rem rgba(0,0,0,0.1);box-shadow:0 0.25rem 0.75rem rgba(0,0,0,0.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,0.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform 0.3s ease-out;transition:-webkit-transform 0.3s ease-out;transition:transform 0.3s ease-out;transition:transform 0.3s ease-out, -webkit-transform 0.3s ease-out;-webkit-transform:translate(0, -50px);transform:translate(0, -50px)}@media screen and (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:.5rem}.bs-popover-top .arrow,.bs-popover-auto[x-placement^="top"] .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^="top"] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^="top"] .arrow::after{border-width:.5rem .5rem 0}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^="top"] .arrow::before{bottom:0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^="top"] .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:.5rem}.bs-popover-right .arrow,.bs-popover-auto[x-placement^="right"] .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^="right"] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^="right"] .arrow::after{border-width:.5rem .5rem .5rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^="right"] .arrow::before{left:0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^="right"] .arrow::after{left:1px;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:.5rem}.bs-popover-bottom .arrow,.bs-popover-auto[x-placement^="bottom"] .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^="bottom"] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^="bottom"] .arrow::after{border-width:0 .5rem .5rem .5rem}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^="bottom"] .arrow::before{top:0;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^="bottom"] .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:.5rem}.bs-popover-left .arrow,.bs-popover-auto[x-placement^="left"] .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^="left"] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^="left"] .arrow::after{border-width:.5rem 0 .5rem .5rem}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^="left"] .arrow::before{right:0;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^="left"] .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#607D8B}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out, -webkit-transform .6s ease-in-out}@media screen and (prefers-reduced-motion: reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{-webkit-transform:translateX(100%);transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:0s .6s opacity;transition:0s .6s opacity}@media screen and (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;-webkit-transition:opacity 0.15s ease;transition:opacity 0.15s ease}@media screen and (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{-webkit-transition:none;transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity 0.6s ease;transition:opacity 0.6s ease}@media screen and (prefers-reduced-motion: reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#263DFF !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#001af2 !important}.bg-secondary{background-color:#6c757d !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#545b62 !important}.bg-success{background-color:#00CA58 !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#009742 !important}.bg-info{background-color:#17a2b8 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#117a8b !important}.bg-warning{background-color:#ffc107 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#d39e00 !important}.bg-danger{background-color:#dc3545 !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#bd2130 !important}.bg-light{background-color:#ECEFF1 !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#263DFF !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#00CA58 !important}.border-info{border-color:#17a2b8 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#ECEFF1 !important}.border-dark{border-color:#343a40 !important}.border-white{border-color:#fff !important}.rounded{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-sm-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-md-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-lg-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-xl-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-print-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-3by4::before{padding-top:133.3333333333%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-sm-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-sm-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-sm-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-sm-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-sm-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-sm-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-sm-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-sm-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-sm-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-sm-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-sm-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-sm-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-sm-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-sm-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-sm-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-sm-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-sm-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-sm-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-sm-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-sm-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-sm-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-sm-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-sm-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-sm-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-sm-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-sm-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-sm-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-sm-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-sm-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-sm-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-sm-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-sm-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-md-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-md-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-md-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-md-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-md-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-md-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-md-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-md-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-md-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-md-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-md-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-md-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-md-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-md-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-md-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-md-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-md-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-md-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-md-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-md-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-md-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-md-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-md-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-md-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-md-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-md-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-md-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-md-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-md-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-md-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-md-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-md-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-lg-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-lg-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-lg-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-lg-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-lg-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-lg-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-lg-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-lg-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-lg-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-lg-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-lg-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-lg-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-lg-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-lg-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-lg-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-lg-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-lg-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-lg-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-lg-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-lg-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-lg-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-lg-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-lg-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-lg-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-lg-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-lg-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-lg-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-lg-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-lg-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-lg-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-lg-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-lg-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-xl-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-xl-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-xl-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-xl-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-xl-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-xl-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-xl-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-xl-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-xl-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-xl-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-xl-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-xl-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-xl-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-xl-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-xl-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-xl-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-xl-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-xl-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-xl-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-xl-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-xl-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-xl-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-xl-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-xl-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-xl-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-xl-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-xl-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-xl-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-xl-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-xl-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-xl-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-xl-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position: -webkit-sticky) or (position: sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important;box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow{-webkit-box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important;box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important;box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{-webkit-box-shadow:none !important;box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-.25rem !important}.mt-n1,.my-n1{margin-top:-.25rem !important}.mr-n1,.mx-n1{margin-right:-.25rem !important}.mb-n1,.my-n1{margin-bottom:-.25rem !important}.ml-n1,.mx-n1{margin-left:-.25rem !important}.m-n2{margin:-.5rem !important}.mt-n2,.my-n2{margin-top:-.5rem !important}.mr-n2,.mx-n2{margin-right:-.5rem !important}.mb-n2,.my-n2{margin-bottom:-.5rem !important}.ml-n2,.mx-n2{margin-left:-.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem !important}.m-sm-n2{margin:-.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem !important}.m-md-n2{margin:-.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem !important}.m-lg-n2{margin:-.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem !important}.m-xl-n2{margin:-.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#263DFF !important}a.text-primary:hover,a.text-primary:focus{color:#0017d9 !important}.text-secondary{color:#6c757d !important}a.text-secondary:hover,a.text-secondary:focus{color:#494f54 !important}.text-success{color:#00CA58 !important}a.text-success:hover,a.text-success:focus{color:#007e37 !important}.text-info{color:#17a2b8 !important}a.text-info:hover,a.text-info:focus{color:#0f6674 !important}.text-warning{color:#ffc107 !important}a.text-warning:hover,a.text-warning:focus{color:#ba8b00 !important}.text-danger{color:#dc3545 !important}a.text-danger:hover,a.text-danger:focus{color:#a71d2a !important}.text-light{color:#ECEFF1 !important}a.text-light:hover,a.text-light:focus{color:#cbd3da !important}.text-dark{color:#343a40 !important}a.text-dark:hover,a.text-dark:focus{color:#121416 !important}.text-body{color:#607D8B !important}.text-muted{color:#6c757d !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;-webkit-box-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} + +/*# sourceMappingURL=bcss.css.map */ \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/68AC2166A94F01F3B83AFB72D0100B5E9DF4394E b/home/.surf/cache/WebKitCache/Version 16/Blobs/68AC2166A94F01F3B83AFB72D0100B5E9DF4394E new file mode 100644 index 0000000..0dcb1a2 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/68AC2166A94F01F3B83AFB72D0100B5E9DF4394E differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/69CE6A475E1C57F24228C81E841E577B587AF356 b/home/.surf/cache/WebKitCache/Version 16/Blobs/69CE6A475E1C57F24228C81E841E577B587AF356 new file mode 100644 index 0000000..725c6e2 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/69CE6A475E1C57F24228C81E841E577B587AF356 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/6C0E20DE2C792BCD45906CB09D30FAB6CFB096E5 b/home/.surf/cache/WebKitCache/Version 16/Blobs/6C0E20DE2C792BCD45906CB09D30FAB6CFB096E5 new file mode 100644 index 0000000..90d49ca --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/6C0E20DE2C792BCD45906CB09D30FAB6CFB096E5 @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_text-ex-3415a8"],{57260(a,b,c){c.d(b,{P:()=>Attachment});class Attachment{constructor(a,b){this.file=a,this.directory=b,this.state="pending",this.id=null,this.href=null,this.name=null,this.percent=0}static traverse(a,b){return d(a,b)}static from(a){let b=[];for(let c of a)if(c instanceof File)b.push(new Attachment(c));else if(c instanceof Attachment)b.push(c);else throw Error("Unexpected type");return b}get fullPath(){return this.directory?`${this.directory}/${this.file.name}`:this.file.name}isImage(){return["image/gif","image/png","image/jpg","image/jpeg","image/svg+xml"].indexOf(this.file.type)> -1}isVideo(){return["video/mp4","video/quicktime"].indexOf(this.file.type)> -1}saving(a){if("pending"!==this.state&&"saving"!==this.state)throw Error(`Unexpected transition from ${this.state} to saving`);this.state="saving",this.percent=a}saved(a){var b,c,d;if("pending"!==this.state&&"saving"!==this.state)throw Error(`Unexpected transition from ${this.state} to saved`);this.state="saved",this.id=null!==(b=null==a?void 0:a.id)&& void 0!==b?b:null,this.href=null!==(c=null==a?void 0:a.href)&& void 0!==c?c:null,this.name=null!==(d=null==a?void 0:a.name)&& void 0!==d?d:null}isPending(){return"pending"===this.state}isSaving(){return"saving"===this.state}isSaved(){return"saved"===this.state}}function d(a,b){return b&&i(a)?h("",j(a)):Promise.resolve(e(Array.from(a.files||[])).map(a=>new Attachment(a)))}function e(a){return Array.from(a).filter(a=>{var b;return!(b=a).name.startsWith(".")})}function f(a){return new Promise(function(b,c){a.file(b,c)})}function g(a){return new Promise(function(b,c){let d=[],e=a.createReader(),f=()=>{e.readEntries(a=>{a.length>0?(d.push(...a),f()):b(d)},c)};f()})}async function h(a,b){let c=[];for(let d of e(b))if(d.isDirectory)c.push(...await h(d.fullPath,await g(d)));else{let i=await f(d);c.push(new Attachment(i,a))}return c}function i(a){return a.items&&Array.from(a.items).some(a=>{let b=a.webkitGetAsEntry&&a.webkitGetAsEntry();return b&&b.isDirectory})}function j(a){return Array.from(a.items).map(a=>a.webkitGetAsEntry()).filter(a=>null!=a)}class FileAttachmentElement extends HTMLElement{connectedCallback(){this.addEventListener("dragenter",m),this.addEventListener("dragover",m),this.addEventListener("dragleave",n),this.addEventListener("drop",o),this.addEventListener("paste",q),this.addEventListener("change",r)}disconnectedCallback(){this.removeEventListener("dragenter",m),this.removeEventListener("dragover",m),this.removeEventListener("dragleave",n),this.removeEventListener("drop",o),this.removeEventListener("paste",q),this.removeEventListener("change",r)}get directory(){return this.hasAttribute("directory")}set directory(a){a?this.setAttribute("directory",""):this.removeAttribute("directory")}async attach(a){let b=a instanceof DataTransfer?await Attachment.traverse(a,this.directory):Attachment.from(a),c=this.dispatchEvent(new CustomEvent("file-attachment-accept",{bubbles:!0,cancelable:!0,detail:{attachments:b}}));c&&b.length&&this.dispatchEvent(new CustomEvent("file-attachment-accepted",{bubbles:!0,detail:{attachments:b}}))}}function k(a){return Array.from(a.types).indexOf("Files")>=0}let l=null;function m(a){let b=a.currentTarget;l&&clearTimeout(l),l=window.setTimeout(()=>b.removeAttribute("hover"),200);let c=a.dataTransfer;c&&k(c)&&(c.dropEffect="copy",b.setAttribute("hover",""),a.preventDefault())}function n(a){a.dataTransfer&&(a.dataTransfer.dropEffect="none");let b=a.currentTarget;b.removeAttribute("hover"),a.stopPropagation(),a.preventDefault()}function o(a){let b=a.currentTarget;if(!(b instanceof FileAttachmentElement))return;b.removeAttribute("hover");let c=a.dataTransfer;c&&k(c)&&(b.attach(c),a.stopPropagation(),a.preventDefault())}let p=/^image\/(gif|png|jpeg)$/;function q(a){if(!a.clipboardData||!a.clipboardData.items)return;let b=a.currentTarget;if(!(b instanceof FileAttachmentElement))return;let c=function(a){for(let b of a)if("file"===b.kind&&p.test(b.type))return b.getAsFile();return null}(a.clipboardData.items);if(!c)return;let d=[c];b.attach(d),a.preventDefault()}function r(a){let b=a.currentTarget;if(!(b instanceof FileAttachmentElement))return;let c=a.target;if(!(c instanceof HTMLInputElement))return;let d=b.getAttribute("input");if(d&&c.id!==d)return;let e=c.files;e&&0!==e.length&&(b.attach(e),c.value="")}window.customElements.get("file-attachment")||(window.FileAttachmentElement=FileAttachmentElement,window.customElements.define("file-attachment",FileAttachmentElement))},57852(a,b,c){var d=c(10160);let e=/\s|\(|\[/;function f(a,b,c,{multiWord:d,lookBackIndex:f,lastMatchPosition:g}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let h=a.lastIndexOf(b,c-1);if(-1===h||h=h+b.length+1)return;let j=a.lastIndexOf("\n",c-1);if(j>h)return;let k=a.lastIndexOf(".",c-1);if(k>h)return}else{let l=a.lastIndexOf(" ",c-1);if(l>h)return}let m=a[h-1];if(m&&!e.test(m))return;let n=a.substring(h+b.length,c);return{text:n,position:h+b.length}}let g=["position:absolute;","overflow:auto;","word-wrap:break-word;","top:0px;","left:-9999px;"],h=["box-sizing","font-family","font-size","font-style","font-variant","font-weight","height","letter-spacing","line-height","max-height","min-height","padding-bottom","padding-left","padding-right","padding-top","border-bottom","border-left","border-right","border-top","text-decoration","text-indent","text-transform","width","word-spacing"],i=new WeakMap,j=new WeakMap;class TextExpander{constructor(a,b){this.expander=a,this.input=b,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,b.addEventListener("paste",this.onpaste),b.addEventListener("input",this.oninput),b.addEventListener("keydown",this.onkeydown),b.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(a,b){var c,e;if(this.input!==document.activeElement&&this.input!==(null===(e=null===(c=document.activeElement)|| void 0===c?void 0:c.shadowRoot)|| void 0===e?void 0:e.activeElement))return;this.deactivate(),this.menu=b,b.id||(b.id=`text-expander-${Math.floor(1e5*Math.random()).toString()}`),this.expander.append(b),this.combobox=new d.Z(this.input,b);let{top:f,left:j}=function(a,b=a.selectionEnd){let{mirror:c,marker:d}=function(a,b){let c=a.nodeName.toLowerCase();if("textarea"!==c&&"input"!==c)throw Error("expected textField to a textarea or input");let d=i.get(a);if(d&&d.parentElement===a.parentElement)d.innerHTML="";else{d=document.createElement("div"),i.set(a,d);let e=window.getComputedStyle(a),f=g.slice(0);"textarea"===c?f.push("white-space:pre-wrap;"):f.push("white-space:nowrap;");for(let j=0,k=h.length;j{c.remove()},5e3),{top:f.top-e.top,left:f.left-e.left}}(this.input,a.position);b.style.top=`${f}px`,b.style.left=`${j}px`,this.combobox.start(),b.addEventListener("combobox-commit",this.oncommit),b.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1)}deactivate(){let a=this.menu;return!!a&&!!this.combobox&&(this.menu=null,a.removeEventListener("combobox-commit",this.oncommit),a.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,a.remove(),!0)}onCommit({target:a}){let b=a;if(!(b instanceof HTMLElement)||!this.combobox)return;let c=this.match;if(!c)return;let d=this.input.value.substring(0,c.position-c.key.length),e=this.input.value.substring(c.position+c.text.length),f={item:b,key:c.key,value:null},g=!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:f}));if(g||!f.value)return;let h=`${f.value} `;this.input.value=d+h+e;let i=d.length+h.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=i,this.input.selectionEnd=i,this.lookBackIndex=i,this.match=null}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}let a=this.findMatch();if(a){this.match=a;let b=await this.notifyProviders(a);if(!this.match)return;b?this.activate(a,b):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){let a=this.input.selectionEnd||0,b=this.input.value;for(let{key:c,multiWord:d}of(a<=this.lookBackIndex&&(this.lookBackIndex=a-1),this.expander.keys)){let e=f(b,c,a,{multiWord:d,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(e)return{text:e.text,key:c,position:e.position}}}async notifyProviders(a){let b=[],c=!this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:a=>b.push(a),text:a.text,key:a.key}}));if(c)return;let d=await Promise.all(b),e=d.filter(a=>a.matched).map(a=>a.fragment);return e[0]}onMousedown(){this.interactingWithList=!0}onKeydown(a){"Escape"===a.key&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,a.stopImmediatePropagation(),a.preventDefault()))}}class TextExpanderElement extends HTMLElement{get keys(){let a=this.getAttribute("keys"),b=a?a.split(" "):[],c=this.getAttribute("multiword"),d=c?c.split(" "):[],e=0===d.length&&this.hasAttribute("multiword");return b.map(a=>({key:a,multiWord:e||d.includes(a)}))}connectedCallback(){let a=this.querySelector('input[type="text"], textarea');if(!(a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement))return;let b=new TextExpander(this,a);j.set(this,b)}disconnectedCallback(){let a=j.get(this);a&&(a.destroy(),j.delete(this))}dismiss(){let a=j.get(this);a&&a.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=TextExpanderElement,window.customElements.define("text-expander",TextExpanderElement))}}]) +//# sourceMappingURL=vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_text-ex-3415a8-7459079baae2.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/6C45ADE34B892A255FCBD4D57BC6FF1D4053691B b/home/.surf/cache/WebKitCache/Version 16/Blobs/6C45ADE34B892A255FCBD4D57BC6FF1D4053691B new file mode 100644 index 0000000..94b8add --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/6C45ADE34B892A255FCBD4D57BC6FF1D4053691B @@ -0,0 +1,20 @@ +(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_github_paste-markdown_dist_index_esm_js-node_modules_github_quote-select-84b903"],{52769(a,b,c){"use strict";function d(a,b){var c,d,e;let f=a.value.slice(0,null!==(c=a.selectionStart)&& void 0!==c?c:void 0),g=a.value.slice(null!==(d=a.selectionEnd)&& void 0!==d?d:void 0),h=!0;a.contentEditable="true";try{h=document.execCommand("insertText",!1,b)}catch(i){h=!1}if(a.contentEditable="false",h&&!a.value.slice(0,null!==(e=a.selectionStart)&& void 0!==e?e:void 0).endsWith(b)&&(h=!1),!h){try{document.execCommand("ms-beginUndoUnit")}catch(j){}a.value=f+b+g;try{document.execCommand("ms-endUndoUnit")}catch(k){}a.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!0}))}}c.d(b,{Ld:()=>V});let e=new WeakMap;function f(a){let{currentTarget:b}=a,c="KeyV"===a.code&&(a.ctrlKey||a.metaKey)&&a.shiftKey;(c||c&&a.altKey)&&e.set(b,!0)}function g(a){let{currentTarget:b}=a;e.delete(b)}function h(a){var b;let c=null!==(b=e.get(a))&& void 0!==b&&b;return c}function i(a){a.addEventListener("paste",j)}function j(a){let b=a.clipboardData,{currentTarget:c}=a;if(h(c)||!b||!o(b))return;let e=a.currentTarget;if(!(e instanceof HTMLTextAreaElement)||l(e))return;let f=b.getData("text/plain"),g=b.getData("text/html"),i=g.replace(/\u00A0/g," ").replace(/\uC2A0/g," ");if(!g||!(f=f.trim()))return;let j=new DOMParser,m=j.parseFromString(i,"text/html"),p=m.createTreeWalker(m.body,NodeFilter.SHOW_ELEMENT,a=>a.parentNode&&n(a.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT),q=k(f,p);q!==f&&(a.stopPropagation(),a.preventDefault(),d(e,q))}function k(a,b){var c;let d=b.firstChild(),e=a,f=0,g=0;for(;d&&g<1e4;){g++;let h=n(d)?(d.textContent||"").replace(/[\t\n\r ]+/g," "):(null===(c=d.firstChild)|| void 0===c?void 0:c.wholeText)||"";if(m(h)){d=b.nextNode();continue}let i=e.indexOf(h,f);if(i>=0){if(n(d)){let j=p(d,h);e=e.slice(0,i)+j+e.slice(i+h.length),f=i+j.length}else f=i+h.length}d=b.nextNode()}return 1e4===g?a:e}function l(a){let b=a.selectionStart||0;if(0===b)return!1;let c=a.value.substring(b-1,b);return"@"===c}function m(a){return!a||(null==a?void 0:a.trim().length)===0}function n(a){var b;return(null===(b=a.tagName)|| void 0===b?void 0:b.toLowerCase())==="a"&&a.hasAttribute("href")}function o(a){return a.types.includes("text/html")}function p(a,b){let c=a.href||"",d="";return s(a)?b:q(a)||r(c,b)?c:`[${b}](${c})`}function q(a){return a.className.indexOf("commit-link")>=0|| !!a.getAttribute("data-hovercard-type")&&"user"!==a.getAttribute("data-hovercard-type")}function r(a,b){return a="/"===a.slice(-1)?a.slice(0,-1):a,b="/"===b.slice(-1)?b.slice(0,-1):b,a.toLowerCase()===b.toLowerCase()}function s(a){var b;return(null===(b=a.textContent)|| void 0===b?void 0:b.slice(0,1))==="@"&&"user"===a.getAttribute("data-hovercard-type")}function t(a){a.addEventListener("dragover",v),a.addEventListener("drop",u),a.addEventListener("paste",w)}function u(a){let b=a.dataTransfer;if(!b||y(b)||!z(b))return;let c=A(b);if(!c.some(C))return;a.stopPropagation(),a.preventDefault();let e=a.currentTarget;e instanceof HTMLTextAreaElement&&d(e,c.map(x).join(""))}function v(a){let b=a.dataTransfer;b&&(b.dropEffect="link")}function w(a){let{currentTarget:b}=a;if(h(b))return;let c=a.clipboardData;if(!c||!z(c))return;let e=A(c);if(!e.some(C))return;a.stopPropagation(),a.preventDefault();let f=a.currentTarget;f instanceof HTMLTextAreaElement&&d(f,e.map(x).join(""))}function x(a){return C(a)?` +![](${a}) +`:a}function y(a){return Array.from(a.types).indexOf("Files")>=0}function z(a){return Array.from(a.types).indexOf("text/uri-list")>=0}function A(a){return(a.getData("text/uri-list")||"").split("\r\n")}let B=/\.(gif|png|jpe?g)$/i;function C(a){return B.test(a)}let D=new WeakMap;function E(a,b){var c;D.set(a,(null===(c=null==b?void 0:b.defaultPlainTextPaste)|| void 0===c?void 0:c.urlLinks)=== !0),a.addEventListener("paste",F)}function F(a){var b;let{currentTarget:c}=a,e=c,f=null!==(b=D.get(e))&& void 0!==b&&b,g=h(e);if(!f&&g||f&&!g)return;let i=a.clipboardData;if(!i||!G(i))return;let j=a.currentTarget;if(!(j instanceof HTMLTextAreaElement))return;let k=i.getData("text/plain");if(!k||!J(k)||H(j))return;let l=j.value.substring(j.selectionStart,j.selectionEnd);l.length&&(J(l.trim())||(a.stopPropagation(),a.preventDefault(),d(j,I(l,k.trim()))))}function G(a){return Array.from(a.types).includes("text/plain")}function H(a){let b=a.selectionStart||0;if(!(b>1))return!1;{let c=a.value.substring(b-2,b);return"]("===c}}function I(a,b){return`[${a}](${b})`}function J(a){try{let b=new URL(a);return K(b.href).trim()===K(a).trim()}catch(c){return!1}}function K(a){return a.endsWith("/")?a.slice(0,a.length-1):a}function L(a){a.addEventListener("dragover",N),a.addEventListener("drop",M),a.addEventListener("paste",O)}function M(a){let b=a.dataTransfer;if(!b||P(b))return;let c=R(b);if(!c)return;a.stopPropagation(),a.preventDefault();let e=a.currentTarget;e instanceof HTMLTextAreaElement&&d(e,c)}function N(a){let b=a.dataTransfer;b&&(b.dropEffect="copy")}function O(a){let{currentTarget:b}=a;if(h(b)||!a.clipboardData)return;let c=R(a.clipboardData);if(!c)return;a.stopPropagation(),a.preventDefault();let e=a.currentTarget;e instanceof HTMLTextAreaElement&&d(e,c)}function P(a){return Array.from(a.types).indexOf("Files")>=0}function Q(a){let b=(a.textContent||"").trim().replace(/\|/g,"\\|").replace(/\n/g," ");return b||"\xa0"}function R(a){if(-1===Array.from(a.types).indexOf("text/html"))return;let b=a.getData("text/html");if(!/"--"),g=`${e.join(" | ")} +${f.join(" | ")} +`,h=c.map(a=>Array.from(a.querySelectorAll("td")).map(Q).join(" | ")).join("\n");return` +${g}${h} + +`}(e);return b.replace(//,"").replace(//,` +${f}`)}function S(a){a.addEventListener("paste",T)}function T(a){let{currentTarget:b}=a;if(h(b))return;let c=a.clipboardData;if(!c||!U(c))return;let e=a.currentTarget;if(!(e instanceof HTMLTextAreaElement))return;let f=c.getData("text/x-gfm");f&&(a.stopPropagation(),a.preventDefault(),d(e,f))}function U(a){return Array.from(a.types).indexOf("text/x-gfm")>=0}function V(a,b){return!function(a,b,c){for(let d of(a.addEventListener("keydown",f),b))d(a,c);a.addEventListener("paste",g)}(a,[L,t,E,S,i],b),{unsubscribe(){var b,c,d;(b=a).removeEventListener("keydown",f),b.removeEventListener("paste",g),(c=a).removeEventListener("dragover",N),c.removeEventListener("drop",M),c.removeEventListener("paste",O),function(a){a.removeEventListener("paste",j)}(a),(d=a).removeEventListener("dragover",v),d.removeEventListener("drop",u),d.removeEventListener("paste",w),function(a){a.removeEventListener("paste",F)}(a),function(a){a.removeEventListener("paste",T)}(a)}}}},55498(a,b,c){"use strict";function d(a){let b=a.parentNode;if(null===b||!(b instanceof HTMLElement))throw Error();let c=0;b instanceof HTMLOListElement&&1!==b.start&&(c=b.start-1);let d=b.children;for(let e=0;eMarkdownQuote,p:()=>Quote});let e=0;function f(a){return a.replace(/&/g,"&").replace(/'/g,"'").replace(/"/g,""").replace(//g,">")}let g={INPUT:a=>a instanceof HTMLInputElement&&a.checked?"[x] ":"[ ] ",CODE(a){let b=a.textContent||"";return a.parentNode&&"PRE"===a.parentNode.nodeName?(a.textContent=`\`\`\` +${b.replace(/\n+$/,"")} +\`\`\` + +`,a):b.indexOf("`")>=0?`\`\` ${b} \`\``:`\`${b}\``},P(a){let b=document.createElement("p"),c=a.textContent||"";return b.textContent=c.replace(/<(\/?)(pre|strong|weak|em)>/g,"\\<$1$2\\>"),b},STRONG:a=>`**${a.textContent||""}**`,EM:a=>`_${a.textContent||""}_`,DEL:a=>`~${a.textContent||""}~`,BLOCKQUOTE(a){let b=(a.textContent||"").trim().replace(/^/gm,"> "),c=document.createElement("pre");return c.textContent=`${b} + +`,c},A(a){let b=a.textContent||"",c=a.getAttribute("href");return/^https?:/.test(b)&&b===c?b:c?`[${b}](${c})`:b},IMG(a){let b=a.getAttribute("alt")||"",c=a.getAttribute("src");if(!c)throw Error();let d=a.hasAttribute("width")?` width="${f(a.getAttribute("width")||"")}"`:"",e=a.hasAttribute("height")?` height="${f(a.getAttribute("height")||"")}"`:"";return d||e?`${f(b)}`:`![${b}](${c})`},LI(a){let b=a.parentNode;if(!b)throw Error();let c="";if(!function(a){let b=a.childNodes[0],c=a.childNodes[1];return!!b&&a.childNodes.length<3&&("OL"===b.nodeName||"UL"===b.nodeName)&&(!c||c.nodeType===Node.TEXT_NODE&&!(c.textContent||"").trim())}(a)){if("OL"===b.nodeName){if(e>0&&!b.previousSibling){let f=d(a)+e+1;c=`${f}\\. `}else c=`${d(a)+1}. `}else c="* "}let g=c.replace(/\S/g," "),h=(a.textContent||"").trim().replace(/^/gm,g),i=document.createElement("pre");return i.textContent=h.replace(g,c),i},OL(a){let b=document.createElement("li");return b.appendChild(document.createElement("br")),a.append(b),a},H1(a){let b=parseInt(a.nodeName.slice(1));return a.prepend(`${Array(b+1).join("#")} `),a},UL:a=>a};g.UL=g.OL;for(let h=2;h<=6;++h)g[`H${h}`]=g.H1;class Quote{constructor(){this.selection=window.getSelection()}closest(a){let b=this.range.startContainer,c=b instanceof Element?b:b.parentElement;return c?c.closest(a):null}get active(){var a;return((null===(a=this.selection)|| void 0===a?void 0:a.rangeCount)||0)>0}get range(){var a;return(null===(a=this.selection)|| void 0===a?void 0:a.rangeCount)?this.selection.getRangeAt(0):new Range}set range(a){var b,c;null===(b=this.selection)|| void 0===b||b.removeAllRanges(),null===(c=this.selection)|| void 0===c||c.addRange(a)}get selectionText(){var a;return(null===(a=this.selection)|| void 0===a?void 0:a.toString().trim())||""}get quotedText(){return`> ${this.selectionText.replace(/\n/g,"\n> ")} + +`}select(a){this.selection&&(this.selection.removeAllRanges(),this.selection.selectAllChildren(a))}insert(a){a.value?a.value=`${a.value} + +${this.quotedText}`:a.value=this.quotedText,a.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!1})),a.focus(),a.selectionStart=a.value.length,a.scrollTop=a.scrollHeight}}class MarkdownQuote extends Quote{constructor(a="",b){super(),this.scopeSelector=a,this.callback=b}get selectionText(){var a,b;if(!this.selection)return"";let c=function(a,b){let c=a.startContainer;if(!c||!c.parentNode||!(c.parentNode instanceof HTMLElement))throw Error("the range must start within an HTMLElement");let f=c.parentNode,g=a.cloneContents();if(b){let h=g.querySelector(b);h&&(g=document.createDocumentFragment()).appendChild(h)}e=0;let i=f.closest("li"),j=f.closest("pre");if(j){let k=document.createElement("pre");k.appendChild(g),(g=document.createDocumentFragment()).appendChild(k)}else if(i&&i.parentNode&&("OL"===i.parentNode.nodeName&&(e=d(i)),!g.querySelector("li"))){let l=document.createElement("li");if(!i.parentNode)throw Error();let m=document.createElement(i.parentNode.nodeName);l.appendChild(g),m.appendChild(l),(g=document.createDocumentFragment()).appendChild(m)}return g}(this.range,null!==(a=this.scopeSelector)&& void 0!==a?a:"");null===(b=this.callback)|| void 0===b||b.call(this,c),function(a){let b=document.createNodeIterator(a,NodeFilter.SHOW_ELEMENT,{acceptNode(a){var b,c;return a.nodeName in g&&!function(a){if(a instanceof HTMLAnchorElement&&1===a.childNodes.length){let b=a.childNodes[0];if(b instanceof HTMLImageElement)return b.src===a.href}return!1}(a)&&("IMG"===(b=a).nodeName||null!=b.firstChild||"INPUT"===(c=a).nodeName&&c instanceof HTMLInputElement&&"checkbox"===c.type)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}}),c=[],d=b.nextNode();for(;d;)d instanceof HTMLElement&&c.push(d),d=b.nextNode();for(let e of(c.reverse(),c))e.replaceWith(g[e.nodeName](e))}(c);let f=document.body;if(!f)return"";let h=document.createElement("div");h.appendChild(c),h.style.cssText="position:absolute;left:-9999px;",f.appendChild(h);let i="";try{let j=document.createRange();j.selectNodeContents(h),this.selection.removeAllRanges(),this.selection.addRange(j),i=this.selection.toString(),this.selection.removeAllRanges(),j.detach()}finally{f.removeChild(h)}return i.trim()}}},407(a,b,c){"use strict";c.d(b,{Xm:()=>e,e6:()=>f,iO:()=>g});let d=null;function e(a,b){var c,e,f;let g=null!==(c=null==b?void 0:b.selector)&& void 0!==c?c:".js-session-resumable",h=null!==(e=null==b?void 0:b.keyPrefix)&& void 0!==e?e:"session-resume:",i;try{i=null!==(f=null==b?void 0:b.storage)&& void 0!==f?f:sessionStorage}catch(j){return}let k=`${h}${a}`,l=[];for(let m of document.querySelectorAll(g))(m instanceof HTMLInputElement||m instanceof HTMLTextAreaElement)&&l.push(m);let n=l.filter(a=>{var b;return!!(b=a).id&&b.value!==b.defaultValue&&b.form!==d}).map(a=>[a.id,a.value]);if(n.length)try{let o=i.getItem(k);if(null!==o){let p=JSON.parse(o),q=p.filter(function(a){return!n.some(b=>b[0]===a[0])});n=n.concat(q)}i.setItem(k,JSON.stringify(n))}catch(r){}}function f(a,b){var c,d;let e=null!==(c=null==b?void 0:b.keyPrefix)&& void 0!==c?c:"session-resume:",f;try{f=null!==(d=null==b?void 0:b.storage)&& void 0!==d?d:sessionStorage}catch(g){return}let h=`${e}${a}`,i;try{i=f.getItem(h)}catch(j){}if(!i)return;let k=[],l=[];for(let[m,n]of JSON.parse(i)){let o=new CustomEvent("session:resume",{bubbles:!0,cancelable:!0,detail:{targetId:m,targetValue:n}});if(document.dispatchEvent(o)){let p=document.getElementById(m);p&&(p instanceof HTMLInputElement||p instanceof HTMLTextAreaElement)?p.value===p.defaultValue&&(p.value=n,k.push(p)):l.push([m,n])}}if(0===l.length)try{f.removeItem(h)}catch(q){}else f.setItem(h,JSON.stringify(l));setTimeout(function(){for(let a of k)a.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!0}))},0)}function g(a){d=a.target,setTimeout(function(){a.defaultPrevented&&(d=null)},0)}},54430(a,b,c){"use strict";c.d(b,{Z:()=>d});let d=function(a){var b=null,c=!1,d=void 0,e=void 0,f=void 0;function g(b){if(d!==b.clientX||e!==b.clientY){var h=a.style.height;f&&f!==h&&(c=!0,a.style.maxHeight="",a.removeEventListener("mousemove",g)),f=h}d=b.clientX,e=b.clientY}var h=a.ownerDocument,i=h.documentElement;function j(){if(!c&&a.value!==b&&(!(a.offsetWidth<=0)||!(a.offsetHeight<=0))){var d=function(){for(var b=0,c=a;c!==h.body&&null!==c;)b+=c.offsetTop||0,c=c.offsetParent;var d=b-h.defaultView.pageYOffset,e=i.clientHeight-(d+a.offsetHeight);return{top:d,bottom:e}}(),e=d.top,g=d.bottom;if(!(e<0)&&!(g<0)){var j=Number(getComputedStyle(a).height.replace(/px/,""))+g;a.style.maxHeight=j-100+"px";var k=a.parentElement;if(k instanceof HTMLElement){var l=k.style.height;k.style.height=getComputedStyle(k).height,a.style.height="auto",a.style.height=a.scrollHeight+"px",k.style.height=l,f=a.style.height}b=a.value}}}function k(){c=!1,a.style.height="",a.style.maxHeight=""}a.addEventListener("mousemove",g),a.addEventListener("input",j),a.addEventListener("change",j);var l=a.form;return l&&l.addEventListener("reset",k),a.value&&j(),{unsubscribe:function(){a.removeEventListener("mousemove",g),a.removeEventListener("input",j),a.removeEventListener("change",j),l&&l.removeEventListener("reset",k)}}}},48168(a,b,c){let d=c(39092),e={};for(let f of Object.keys(d))e[d[f]]=f;let g={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(let h of(a.exports=g,Object.keys(g))){if(!("channels"in g[h]))throw Error("missing channels property: "+h);if(!("labels"in g[h]))throw Error("missing channel labels property: "+h);if(g[h].labels.length!==g[h].channels)throw Error("channel and label counts mismatch: "+h);let{channels:i,labels:j}=g[h];delete g[h].channels,delete g[h].labels,Object.defineProperty(g[h],"channels",{value:i}),Object.defineProperty(g[h],"labels",{value:j})}function k(a,b){return(a[0]-b[0])**2+(a[1]-b[1])**2+(a[2]-b[2])**2}g.rgb.hsl=function(a){let b=a[0]/255,c=a[1]/255,d=a[2]/255,e=Math.min(b,c,d),f=Math.max(b,c,d),g=f-e,h,i;f===e?h=0:b===f?h=(c-d)/g:c===f?h=2+(d-b)/g:d===f&&(h=4+(b-c)/g),(h=Math.min(60*h,360))<0&&(h+=360);let j=(e+f)/2;return[h,100*(f===e?0:j<=.5?g/(f+e):g/(2-f-e)),100*j]},g.rgb.hsv=function(a){let b,c,d,e,f,g=a[0]/255,h=a[1]/255,i=a[2]/255,j=Math.max(g,h,i),k=j-Math.min(g,h,i),l=function(a){return(j-a)/6/k+.5};return 0===k?(e=0,f=0):(f=k/j,b=l(g),c=l(h),d=l(i),g===j?e=d-c:h===j?e=1/3+b-d:i===j&&(e=2/3+c-b),e<0?e+=1:e>1&&(e-=1)),[360*e,100*f,100*j]},g.rgb.hwb=function(a){let b=a[0],c=a[1],d=a[2],e=g.rgb.hsl(a)[0],f=1/255*Math.min(b,Math.min(c,d));return d=1-1/255*Math.max(b,Math.max(c,d)),[e,100*f,100*d]},g.rgb.cmyk=function(a){let b=a[0]/255,c=a[1]/255,d=a[2]/255,e=Math.min(1-b,1-c,1-d);return[100*((1-b-e)/(1-e)||0),100*((1-c-e)/(1-e)||0),100*((1-d-e)/(1-e)||0),100*e]},g.rgb.keyword=function(a){let b=e[a];if(b)return b;let c=1/0,f;for(let g of Object.keys(d)){let h=d[g],i=k(a,h);i.04045?((b+.055)/1.055)**2.4:b/12.92,c=c>.04045?((c+.055)/1.055)**2.4:c/12.92,d=d>.04045?((d+.055)/1.055)**2.4:d/12.92;let e=.4124*b+.3576*c+.1805*d,f=.2126*b+.7152*c+.0722*d,g=.0193*b+.1192*c+.9505*d;return[100*e,100*f,100*g]},g.rgb.lab=function(a){let b=g.rgb.xyz(a),c=b[0],d=b[1],e=b[2];c/=95.047,d/=100,e/=108.883,c=c>.008856?c**(1/3):7.787*c+16/116,d=d>.008856?d**(1/3):7.787*d+16/116,e=e>.008856?e**(1/3):7.787*e+16/116;let f=116*d-16,h=500*(c-d),i=200*(d-e);return[f,h,i]},g.hsl.rgb=function(a){let b=a[0]/360,c=a[1]/100,d=a[2]/100,e,f,g;if(0===c)return[g=255*d,g,g];e=d<.5?d*(1+c):d+c-d*c;let h=2*d-e,i=[0,0,0];for(let j=0;j<3;j++)(f=b+ -(1/3*(j-1)))<0&&f++,f>1&&f--,g=6*f<1?h+(e-h)*6*f:2*f<1?e:3*f<2?h+(e-h)*(2/3-f)*6:h,i[j]=255*g;return i},g.hsl.hsv=function(a){let b=a[0],c=a[1]/100,d=a[2]/100,e=c,f=Math.max(d,.01);d*=2,c*=d<=1?d:2-d,e*=f<=1?f:2-f;let g=(d+c)/2,h=0===d?2*e/(f+e):2*c/(d+c);return[b,100*h,100*g]},g.hsv.rgb=function(a){let b=a[0]/60,c=a[1]/100,d=a[2]/100,e=Math.floor(b)%6,f=b-Math.floor(b),g=255*d*(1-c),h=255*d*(1-c*f),i=255*d*(1-c*(1-f));switch(d*=255,e){case 0:return[d,i,g];case 1:return[h,d,g];case 2:return[g,d,i];case 3:return[g,h,d];case 4:return[i,g,d];case 5:return[d,g,h]}},g.hsv.hsl=function(a){let b=a[0],c=a[1]/100,d=a[2]/100,e=Math.max(d,.01),f,g;g=(2-c)*d;let h=(2-c)*e;return f=c*e,f/=h<=1?h:2-h,[b,100*(f=f||0),100*(g/=2)]},g.hwb.rgb=function(a){let b=a[0]/360,c=a[1]/100,d=a[2]/100,e=c+d,f;e>1&&(c/=e,d/=e);let g=Math.floor(6*b),h=1-d;f=6*b-g,(1&g)!=0&&(f=1-f);let i=c+f*(h-c),j,k,l;switch(g){default:case 6:case 0:j=h,k=i,l=c;break;case 1:j=i,k=h,l=c;break;case 2:j=c,k=h,l=i;break;case 3:j=c,k=i,l=h;break;case 4:j=i,k=c,l=h;break;case 5:j=h,k=c,l=i}return[255*j,255*k,255*l]},g.cmyk.rgb=function(a){let b=a[0]/100,c=a[1]/100,d=a[2]/100,e=a[3]/100;return[255*(1-Math.min(1,b*(1-e)+e)),255*(1-Math.min(1,c*(1-e)+e)),255*(1-Math.min(1,d*(1-e)+e))]},g.xyz.rgb=function(a){let b=a[0]/100,c=a[1]/100,d=a[2]/100,e,f,g;return e=3.2406*b+ -1.5372*c+ -0.4986*d,f=-0.9689*b+1.8758*c+.0415*d,g=.0557*b+ -0.204*c+1.057*d,e=e>.0031308?1.055*e**(1/2.4)-.055:12.92*e,f=f>.0031308?1.055*f**(1/2.4)-.055:12.92*f,g=g>.0031308?1.055*g**(1/2.4)-.055:12.92*g,e=Math.min(Math.max(0,e),1),f=Math.min(Math.max(0,f),1),g=Math.min(Math.max(0,g),1),[255*e,255*f,255*g]},g.xyz.lab=function(a){let b=a[0],c=a[1],d=a[2];b/=95.047,c/=100,d/=108.883,b=b>.008856?b**(1/3):7.787*b+16/116,c=c>.008856?c**(1/3):7.787*c+16/116,d=d>.008856?d**(1/3):7.787*d+16/116;let e=116*c-16,f=500*(b-c),g=200*(c-d);return[e,f,g]},g.lab.xyz=function(a){let b=a[0],c=a[1],d=a[2],e,f,g;e=c/500+(f=(b+16)/116),g=f-d/200;let h=f**3,i=e**3,j=g**3;return f=h>.008856?h:(f-16/116)/7.787,e=i>.008856?i:(e-16/116)/7.787,g=j>.008856?j:(g-16/116)/7.787,[e*=95.047,f*=100,g*=108.883]},g.lab.lch=function(a){let b=a[0],c=a[1],d=a[2],e;return(e=360*Math.atan2(d,c)/2/Math.PI)<0&&(e+=360),[b,Math.sqrt(c*c+d*d),e]},g.lch.lab=function(a){let b=a[0],c=a[1],d=a[2],e=d/360*2*Math.PI;return[b,c*Math.cos(e),c*Math.sin(e)]},g.rgb.ansi16=function(a,b=null){let[c,d,e]=a,f=null===b?g.rgb.hsv(a)[2]:b;if(0===(f=Math.round(f/50)))return 30;let h=30+(Math.round(e/255)<<2|Math.round(d/255)<<1|Math.round(c/255));return 2===f&&(h+=60),h},g.hsv.ansi16=function(a){return g.rgb.ansi16(g.hsv.rgb(a),a[2])},g.rgb.ansi256=function(a){let b=a[0],c=a[1],d=a[2];return b===c&&c===d?b<8?16:b>248?231:Math.round((b-8)/247*24)+232:16+36*Math.round(b/255*5)+6*Math.round(c/255*5)+Math.round(d/255*5)},g.ansi16.rgb=function(a){let b=a%10;if(0===b||7===b)return a>50&&(b+=3.5),[b=b/10.5*255,b,b];let c=(~~(a>50)+1)*.5,d=(1&b)*c*255,e=(b>>1&1)*c*255,f=(b>>2&1)*c*255;return[d,e,f]},g.ansi256.rgb=function(a){if(a>=232){let b=(a-232)*10+8;return[b,b,b]}a-=16;let c,d=Math.floor(a/36)/5*255,e=Math.floor((c=a%36)/6)/5*255,f=c%6/5*255;return[d,e,f]},g.rgb.hex=function(a){let b=((255&Math.round(a[0]))<<16)+((255&Math.round(a[1]))<<8)+(255&Math.round(a[2])),c=b.toString(16).toUpperCase();return"000000".substring(c.length)+c},g.hex.rgb=function(a){let b=a.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!b)return[0,0,0];let c=b[0];3===b[0].length&&(c=c.split("").map(a=>a+a).join(""));let d=parseInt(c,16);return[d>>16&255,d>>8&255,255&d]},g.rgb.hcg=function(a){let b=a[0]/255,c=a[1]/255,d=a[2]/255,e=Math.max(Math.max(b,c),d),f=Math.min(Math.min(b,c),d),g=e-f,h,i;return h=g<1?f/(1-g):0,i=g<=0?0:e===b?(c-d)/g%6:e===c?2+(d-b)/g:4+(b-c)/g,i/=6,i%=1,[360*i,100*g,100*h]},g.hsl.hcg=function(a){let b=a[1]/100,c=a[2]/100,d=c<.5?2*b*c:2*b*(1-c),e=0;return d<1&&(e=(c-.5*d)/(1-d)),[a[0],100*d,100*e]},g.hsv.hcg=function(a){let b=a[1]/100,c=a[2]/100,d=b*c,e=0;return d<1&&(e=(c-d)/(1-d)),[a[0],100*d,100*e]},g.hcg.rgb=function(a){let b=a[0]/360,c=a[1]/100,d=a[2]/100;if(0===c)return[255*d,255*d,255*d];let e=[0,0,0],f=b%1*6,g=f%1,h=1-g,i=0;switch(Math.floor(f)){case 0:e[0]=1,e[1]=g,e[2]=0;break;case 1:e[0]=h,e[1]=1,e[2]=0;break;case 2:e[0]=0,e[1]=1,e[2]=g;break;case 3:e[0]=0,e[1]=h,e[2]=1;break;case 4:e[0]=g,e[1]=0,e[2]=1;break;default:e[0]=1,e[1]=0,e[2]=h}return i=(1-c)*d,[(c*e[0]+i)*255,(c*e[1]+i)*255,(c*e[2]+i)*255]},g.hcg.hsv=function(a){let b=a[1]/100,c=a[2]/100,d=b+c*(1-b),e=0;return d>0&&(e=b/d),[a[0],100*e,100*d]},g.hcg.hsl=function(a){let b=a[1]/100,c=a[2]/100,d=c*(1-b)+.5*b,e=0;return d>0&&d<.5?e=b/(2*d):d>=.5&&d<1&&(e=b/(2*(1-d))),[a[0],100*e,100*d]},g.hcg.hwb=function(a){let b=a[1]/100,c=a[2]/100,d=b+c*(1-b);return[a[0],(d-b)*100,(1-d)*100]},g.hwb.hcg=function(a){let b=a[1]/100,c=a[2]/100,d=1-c,e=d-b,f=0;return e<1&&(f=(d-e)/(1-e)),[a[0],100*e,100*f]},g.apple.rgb=function(a){return[a[0]/65535*255,a[1]/65535*255,a[2]/65535*255]},g.rgb.apple=function(a){return[a[0]/255*65535,a[1]/255*65535,a[2]/255*65535]},g.gray.rgb=function(a){return[a[0]/100*255,a[0]/100*255,a[0]/100*255]},g.gray.hsl=function(a){return[0,0,a[0]]},g.gray.hsv=g.gray.hsl,g.gray.hwb=function(a){return[0,100,a[0]]},g.gray.cmyk=function(a){return[0,0,0,a[0]]},g.gray.lab=function(a){return[a[0],0,0]},g.gray.hex=function(a){let b=255&Math.round(a[0]/100*255),c=((b<<16)+(b<<8)+b).toString(16).toUpperCase();return"000000".substring(c.length)+c},g.rgb.gray=function(a){let b=(a[0]+a[1]+a[2])/3;return[b/255*100]}},12085(a,b,c){let d=c(48168),e=c(4111),f={},g=Object.keys(d);g.forEach(a=>{f[a]={},Object.defineProperty(f[a],"channels",{value:d[a].channels}),Object.defineProperty(f[a],"labels",{value:d[a].labels});let b=e(a),c=Object.keys(b);c.forEach(c=>{let d=b[c];f[a][c]=function(a){let b=function(...b){let c=b[0];if(null==c)return c;c.length>1&&(b=c);let d=a(b);if("object"==typeof d)for(let e=d.length,f=0;f1&&(b=c),a(b))};return"conversion"in a&&(b.conversion=a.conversion),b}(d)})}),a.exports=f},39092(a){"use strict";a.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},4111(a,b,c){let d=c(48168);function e(a,b){return function(c){return b(a(c))}}function f(a,b){let c=[b[a].parent,a],f=d[b[a].parent][a],g=b[a].parent;for(;b[g].parent;)c.unshift(b[g].parent),f=e(d[b[g].parent][g],f),g=b[g].parent;return f.conversion=c,f}a.exports=function(a){let b=function(a){let b=function(){let a={},b=Object.keys(d);for(let c=b.length,e=0;ed,uQ:()=>e})},28382(a,b,c){"use strict";c.d(b,{Q:()=>e});var d="";function e(a){return a.split("\n").reduce(function(a,b){var c=h(b)||j(b)||m(b)||q(b)||o(b);return c&&a.push(c),a},[])}var f=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,g=/\((\S*)(?::(\d+))(?::(\d+))\)/;function h(a){var b=f.exec(a);if(!b)return null;var c=b[2]&&0===b[2].indexOf("native"),e=b[2]&&0===b[2].indexOf("eval"),h=g.exec(b[2]);return e&&null!=h&&(b[2]=h[1],b[3]=h[2],b[4]=h[3]),{file:c?null:b[2],methodName:b[1]||d,arguments:c?[b[2]]:[],lineNumber:b[3]?+b[3]:null,column:b[4]?+b[4]:null}}var i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;function j(a){var b=i.exec(a);return b?{file:b[2],methodName:b[1]||d,arguments:[],lineNumber:+b[3],column:b[4]?+b[4]:null}:null}var k=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,l=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function m(a){var b=k.exec(a);if(!b)return null;var c=b[3]&&b[3].indexOf(" > eval")> -1,e=l.exec(b[3]);return c&&null!=e&&(b[3]=e[1],b[4]=e[2],b[5]=null),{file:b[3],methodName:b[1]||d,arguments:b[2]?b[2].split(","):[],lineNumber:b[4]?+b[4]:null,column:b[5]?+b[5]:null}}var n=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;function o(a){var b=n.exec(a);return b?{file:b[3],methodName:b[1]||d,arguments:[],lineNumber:+b[4],column:b[5]?+b[5]:null}:null}var p=/^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;function q(a){var b=p.exec(a);return b?{file:b[2],methodName:b[1]||d,arguments:[],lineNumber:+b[3],column:b[4]?+b[4]:null}:null}},45341(a,b,c){"use strict";c.d(b,{nn:()=>au,Gb:()=>at});var d={};c.r(d),c.d(d,{abortSignalAbort:()=>q,apply:()=>t,isPolyfilled:()=>s,isSupported:()=>r});var e={};c.r(e),c.d(e,{abortSignalTimeout:()=>u,apply:()=>x,isPolyfilled:()=>w,isSupported:()=>v});var f={};c.r(f),c.d(f,{AggregateError:()=>AggregateError,apply:()=>A,isPolyfilled:()=>z,isSupported:()=>y});var g={};c.r(g),c.d(g,{apply:()=>F,arrayLikeAt:()=>C,isPolyfilled:()=>E,isSupported:()=>D});var h={};c.r(h),c.d(h,{apply:()=>J,isPolyfilled:()=>I,isSupported:()=>H,randomUUID:()=>G});var i={};c.r(i),c.d(i,{apply:()=>N,isPolyfilled:()=>M,isSupported:()=>L,replaceChildren:()=>K});var j={};c.r(j),c.d(j,{addEventListenerWithAbortSignal:()=>P,apply:()=>S,isPolyfilled:()=>R,isSupported:()=>Q});var k={};c.r(k),c.d(k,{apply:()=>W,isPolyfilled:()=>V,isSupported:()=>U,requestSubmit:()=>T});var l={};c.r(l),c.d(l,{apply:()=>_,isPolyfilled:()=>$,isSupported:()=>Z,objectHasOwn:()=>Y});var m={};c.r(m),c.d(m,{apply:()=>ad,isPolyfilled:()=>ac,isSupported:()=>ab,promiseAllSettled:()=>aa});var n={};c.r(n),c.d(n,{apply:()=>ah,isPolyfilled:()=>ag,isSupported:()=>af,promiseAny:()=>ae});var o={};c.r(o),c.d(o,{apply:()=>am,cancelIdleCallback:()=>aj,isPolyfilled:()=>al,isSupported:()=>ak,requestIdleCallback:()=>ai});var p={};function q(a){let b=new AbortController;return b.abort(a),b.signal}function r(){return"abort"in AbortSignal&&"function"==typeof AbortSignal.abort}function s(){return AbortSignal.abort===q}function t(){r()||(AbortSignal.abort=q)}function u(a){let b=new AbortController;return setTimeout(()=>b.abort(new DOMException("TimeoutError")),a),b.signal}function v(){return"abort"in AbortSignal&&"function"==typeof AbortSignal.timeout}function w(){return AbortSignal.timeout===u}function x(){v()||(AbortSignal.timeout=u)}c.r(p),c.d(p,{apply:()=>aq,isPolyfilled:()=>ap,isSupported:()=>ao,stringReplaceAll:()=>an});class AggregateError extends Error{constructor(a,b,c={}){super(b),Object.defineProperty(this,"errors",{value:Array.from(a),configurable:!0,writable:!0}),c.cause&&Object.defineProperty(this,"cause",{value:c.cause,configurable:!0,writable:!0})}}function y(){return"function"==typeof globalThis.AggregateError}function z(){return globalThis.AggregateError===AggregateError}function A(){y()||(globalThis.AggregateError=AggregateError)}let B=Reflect.getPrototypeOf(Int8Array);function C(a){let b=this.length;return(a=Math.trunc(a)||0)<0&&(a+=b),a<0||a>=b?void 0:this[a]}function D(){return"at"in Array.prototype&&"function"==typeof Array.prototype.at&&"at"in String.prototype&&"function"==typeof String.prototype.at&&"function"==typeof B&&"at"in B.prototype&&"function"==typeof B.prototype.at}function E(){return Array.prototype.at===C&&String.prototype.at===C&&"function"==typeof B&&B.prototype.at===C}function F(){if(!D()){let a={value:C,writable:!0,configurable:!0};Object.defineProperty(Array.prototype,"at",a),Object.defineProperty(String.prototype,"at",a),Object.defineProperty(B,"at",a)}}function G(){let a=new Uint32Array(4);crypto.getRandomValues(a);let b=-1;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){b++;let d=a[b>>3]>>b%8*4&15;return("x"===c?d:3&d|8).toString(16)})}function H(){return"object"==typeof crypto&&"randomUUID"in crypto&&"function"==typeof crypto.randomUUID}function I(){return H()&&crypto.randomUUID===G}function J(){H()||(crypto.randomUUID=G)}function K(...a){for(;this.firstChild;)this.removeChild(this.firstChild);this.append(...a)}function L(){return"replaceChildren"in Element.prototype&&"function"==typeof Element.prototype.replaceChildren&&"replaceChildren"in Document.prototype&&"function"==typeof Document.prototype.replaceChildren&&"replaceChildren"in DocumentFragment.prototype&&"function"==typeof DocumentFragment.prototype.replaceChildren}function M(){return Element.prototype.replaceChildren===K&&Document.prototype.replaceChildren===K&&DocumentFragment.prototype.replaceChildren===K}function N(){L()||(Element.prototype.replaceChildren=Document.prototype.replaceChildren=DocumentFragment.prototype.replaceChildren=K)}let O=EventTarget.prototype.addEventListener;function P(a,b,c){if("object"==typeof c&&"signal"in c&&c.signal instanceof AbortSignal){if(c.signal.aborted)return;O.call(c.signal,"abort",()=>{this.removeEventListener(a,b,c)})}return O.call(this,a,b,c)}function Q(){let a=!1;function b(){}let c=Object.create({},{signal:{get:()=>a=!0}});try{let d=new EventTarget;return d.addEventListener("test",b,c),d.removeEventListener("test",b,c),a}catch{return a}}function R(){return EventTarget.prototype.addEventListener===P}function S(){"function"!=typeof AbortSignal||Q()||(EventTarget.prototype.addEventListener=P)}function T(a=null){let b=new SubmitEvent("submit",{bubbles:!0,cancelable:!0,submitter:a}),c;a&&a.name&&(c=Object.assign(document.createElement("input"),{type:"hidden",hidden:!0,name:a.name,value:a.value}),this.append(c)),this.checkValidity()&&!this.dispatchEvent(b)&&this.submit(),c?.remove()}function U(){return"requestSubmit"in HTMLFormElement.prototype&&"function"==typeof HTMLFormElement.prototype.requestSubmit}function V(){return HTMLFormElement.prototype.requestSubmit===T}function W(){U()||(HTMLFormElement.prototype.requestSubmit=T)}let X=Object.prototype.hasOwnProperty;function Y(a,b){if(null==a)throw TypeError("Cannot convert undefined or null to object");return X.call(Object(a),b)}function Z(){return"hasOwn"in Object&&"function"==typeof Object.hasOwn}function $(){return Object.hasOwn===Y}function _(){Z()||Object.defineProperty(Object,"hasOwn",{value:Y,configurable:!0,writable:!0})}function aa(a){return Promise.all(a.map(a=>Promise.resolve(a).then(a=>({status:"fulfilled",value:a}),a=>({status:"rejected",reason:a}))))}function ab(){return"allSettled"in Promise&&"function"==typeof Promise.allSettled}function ac(){return Promise.all===aa}function ad(){ab()||(Promise.allSettled=aa)}function ae(a){return new Promise((b,c)=>{let d=!1,e=Array.from(a),f=[];function g(a){d||(d=!0,b(a))}function h(a){f.push(a),f.length===e.length&&c(new globalThis.AggregateError(f,"All Promises rejected"))}for(let i of e)Promise.resolve(i).then(g,h)})}function af(){return"any"in Promise&&"function"==typeof Promise.any}function ag(){return Promise.all===ae}function ah(){af()||(Promise.any=ae)}function ai(a,b={}){let c=Date.now(),d=b.timeout||0,e=Object.defineProperty({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-c))},"didTimeout",{get:()=>Date.now()-c>d});return window.setTimeout(()=>{a(e)})}function aj(a){clearTimeout(a)}function ak(){return"function"==typeof globalThis.requestIdleCallback}function al(){return globalThis.requestIdleCallback===ai&&globalThis.cancelIdleCallback===aj}function am(){ak()||(globalThis.requestIdleCallback=ai,globalThis.cancelIdleCallback=aj)}function an(a,b){if(a instanceof RegExp)return this.replace(a,b);let c=-1,d=0,e="";if("function"==typeof b){let f=b;b=()=>f(a,c,this)}for(c=this.indexOf(a,c+1);-1!==c;)e+=this.substring(d,c),e+=a.replace(a,b),d=c+a.length,c=this.indexOf(a,c+1);return e+this.substring(d)}function ao(){return"replaceAll"in String.prototype&&"function"==typeof String.prototype.replaceAll}function ap(){return String.prototype.replaceAll===an}function aq(){ao()||(String.prototype.replaceAll=an)}let ar="function"==typeof Blob&&"function"==typeof PerformanceObserver&&"object"==typeof Intl&&"function"==typeof MutationObserver&&"function"==typeof URLSearchParams&&"function"==typeof WebSocket&&"function"==typeof IntersectionObserver&&"function"==typeof queueMicrotask&&"function"==typeof TextEncoder&&"function"==typeof TextDecoder&&"object"==typeof customElements&&"function"==typeof HTMLDetailsElement&&"function"==typeof AbortController&&"function"==typeof AbortSignal&&"object"==typeof globalThis&&"entries"in FormData.prototype&&"toggleAttribute"in Element.prototype&&"fromEntries"in Object&&"flatMap"in Array.prototype&&"trimEnd"in String.prototype&&"matchAll"in String.prototype,as={abortSignalAbort:d,abortSignalTimeout:e,aggregateError:f,arrayAt:g,cryptoRandomUUID:h,elementReplaceChildren:i,eventAbortSignal:j,formRequestSubmit:k,objectHasOwn:l,promiseAllSettled:m,promiseAny:n,requestIdleCallback:o,stringReplaceAll:p};function at(){return ar&&Object.values(as).every(a=>a.isSupported())}function au(){for(let a of Object.values(as))a.apply()}},58797(a,b,c){"use strict";function d(a){let b=!1,c=null;function d(a,b,c,d=!1){b instanceof HTMLInputElement&&(b.indeterminate=d,b.checked!==c&&(b.checked=c,setTimeout(()=>{let c=new CustomEvent("change",{bubbles:!0,cancelable:!1,detail:{relatedTarget:a}});b.dispatchEvent(c)})))}function e(a){let b=a.target;b instanceof Element&&(b.hasAttribute("data-check-all")?f(a):b.hasAttribute("data-check-all-item")&&h(a))}function f(b){if(b instanceof CustomEvent&&b.detail){let{relatedTarget:e}=b.detail;if(e&&e.hasAttribute("data-check-all-item"))return}let f=b.target;if(f instanceof HTMLInputElement){for(let g of(c=null,a.querySelectorAll("[data-check-all-item]")))d(f,g,f.checked);f.indeterminate=!1,i()}}function g(a){if(!(a.target instanceof Element))return;let c=a.target instanceof HTMLLabelElement&&a.target.control||a.target;c.hasAttribute("data-check-all-item")&&(b=a.shiftKey)}function h(e){if(e instanceof CustomEvent&&e.detail){let{relatedTarget:f}=e.detail;if(f&&(f.hasAttribute("data-check-all")||f.hasAttribute("data-check-all-item")))return}let g=e.target;if(!(g instanceof HTMLInputElement))return;let h=Array.from(a.querySelectorAll("[data-check-all-item]"));if(b&&c){let[j,k]=[h.indexOf(c),h.indexOf(g)].sort();for(let l of h.slice(j,+k+1||9e9))d(g,l,g.checked)}b=!1,c=g;let m=a.querySelector("[data-check-all]");if(m){let n=h.length,o=h.filter(a=>a instanceof HTMLInputElement&&a.checked).length,p=o===n,q=n>o&&o>0;d(g,m,p,q)}i()}function i(){let b=a.querySelector("[data-check-all-count]");if(b){let c=a.querySelectorAll("[data-check-all-item]:checked").length;b.textContent=c.toString()}}return a.addEventListener("mousedown",g),a.addEventListener("change",e),{unsubscribe(){a.removeEventListener("mousedown",g),a.removeEventListener("change",e)}}}c.d(b,{Z:()=>d})},89900(a,b,c){"use strict";c.d(b,{Z:()=>g});let d=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],e="undefined"!=typeof window,f=e&&null!=window.mozInnerScreenX;function g(a,b,c){let e=c&&c.debug||!1;if(e){let g=document.querySelector("#input-textarea-caret-position-mirror-div");g&&g.parentNode.removeChild(g)}let h=document.createElement("div");h.id="input-textarea-caret-position-mirror-div",document.body.appendChild(h);let i=h.style,j=window.getComputedStyle?window.getComputedStyle(a):a.currentStyle,k="INPUT"===a.nodeName;for(let l of(i.whiteSpace="pre-wrap",k||(i.wordWrap="break-word"),i.position="absolute",e||(i.visibility="hidden"),d))if(k&&"lineHeight"===l){if("border-box"===j.boxSizing){let m=parseInt(j.height),n=parseInt(j.paddingTop)+parseInt(j.paddingBottom)+parseInt(j.borderTopWidth)+parseInt(j.borderBottomWidth),o=n+parseInt(j.lineHeight);m>o?i.lineHeight=`${m-n}px`:m===o?i.lineHeight=j.lineHeight:i.lineHeight=0}else i.lineHeight=j.height}else if(k||"width"!==l||"border-box"!==j.boxSizing)i[l]=j[l];else{let p=parseFloat(j.borderLeftWidth)+parseFloat(j.borderRightWidth),q=f?parseFloat(j[l])-p:a.clientWidth+p;i[l]=`${q}px`}f?a.scrollHeight>parseInt(j.height)&&(i.overflowY="scroll"):i.overflow="hidden",h.textContent=a.value.substring(0,b),k&&(h.textContent=h.textContent.replace(/\s/g,"\xa0"));let r=document.createElement("span");r.textContent=a.value.substring(b)||".",h.appendChild(r);let s={top:r.offsetTop+parseInt(j.borderTopWidth),left:r.offsetLeft+parseInt(j.borderLeftWidth),height:parseInt(j.lineHeight)};return e?r.style.backgroundColor="#aaa":document.body.removeChild(h),s}},38085(a,b,c){"use strict";c.d(b,{Fu:()=>E,NO:()=>S,Yn:()=>Q,a4:()=>u,mr:()=>U,mw:()=>x});var d,e,f,g,h,i=-1,j=function(a){addEventListener("pageshow",function(b){b.persisted&&(i=b.timeStamp,a(b))},!0)},k=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},l=function(){var a=k();return a&&a.activationStart||0},m=function(a,b){var c=k(),d="navigate";return i>=0?d="back-forward-cache":c&&(d=document.prerendering||l()>0?"prerender":c.type.replace(/_/g,"-")),{name:a,value:void 0===b?-1:b,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:d}},n=function(a,b,c){try{if(PerformanceObserver.supportedEntryTypes.includes(a)){var d=new PerformanceObserver(function(a){b(a.getEntries())});return d.observe(Object.assign({type:a,buffered:!0},c||{})),d}}catch(e){}},o=function(a,b){var c=function c(d){"pagehide"!==d.type&&"hidden"!==document.visibilityState||(a(d),b&&(removeEventListener("visibilitychange",c,!0),removeEventListener("pagehide",c,!0)))};addEventListener("visibilitychange",c,!0),addEventListener("pagehide",c,!0)},p=function(a,b,c,d){var e,f;return function(g){var h,i;b.value>=0&&(g||d)&&((f=b.value-(e||0))|| void 0===e)&&(e=b.value,b.delta=f,b.rating=(h=b.value,h>(i=c)[1]?"poor":h>i[0]?"needs-improvement":"good"),a(b))}},q=-1,r=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},s=function(){o(function(a){q=a.timeStamp},!0)},t=function(){return q<0&&(q=r(),s(),j(function(){setTimeout(function(){q=r(),s()},0)})),{get firstHiddenTime(){return q}}},u=function(a,b){b=b||{};var c,d=[1800,3e3],e=t(),f=m("FCP"),g=function(a){a.forEach(function(a){"first-contentful-paint"===a.name&&(i&&i.disconnect(),a.startTime -1&&a(b)},f=m("CLS",0),g=0,h=[],i=function(a){a.forEach(function(a){if(!a.hadRecentInput){var b=h[0],c=h[h.length-1];g&&a.startTime-c.startTime<1e3&&a.startTime-b.startTime<5e3?(g+=a.value,h.push(a)):(g=a.value,h=[a]),g>f.value&&(f.value=g,f.entries=h,d())}})},k=n("layout-shift",i);k&&(d=p(e,f,c,b.reportAllChanges),o(function(){i(k.takeRecords()),d(!0)}),j(function(){g=0,w=-1,f=m("CLS",0),d=p(e,f,c,b.reportAllChanges)}))},y={passive:!0,capture:!0},z=new Date,A=function(a,b){d||(d=b,e=a,f=new Date,D(removeEventListener),B())},B=function(){if(e>=0&&e1e12?new Date:performance.now())-a.timeStamp;"pointerdown"==a.type?(b=g,c=a,d=function(){A(b,c),f()},e=function(){f()},f=function(){removeEventListener("pointerup",d,y),removeEventListener("pointercancel",e,y)},addEventListener("pointerup",d,y),addEventListener("pointercancel",e,y)):A(g,a)}},D=function(a){["mousedown","keydown","touchstart","pointerdown"].forEach(function(b){return a(b,C,y)})},E=function(a,b){b=b||{};var c,f=[100,300],h=t(),i=m("FID"),k=function(a){a.startTimeb.latency){if(c)c.entries.push(a),c.latency=Math.max(c.latency,a.duration);else{var d={id:a.interactionId,latency:a.duration,entries:[a]};O[d.id]=d,N.push(d)}N.sort(function(a,b){return b.latency-a.latency}),N.splice(10).forEach(function(a){delete O[a.id]})}},Q=function(a,b){b=b||{};var c=[200,500];K();var d,e=m("INP"),f=function(a){a.forEach(function(a){a.interactionId&&P(a),"first-input"!==a.entryType||N.some(function(b){return b.entries.some(function(b){return a.duration===b.duration&&a.startTime===b.startTime})})||P(a)});var b,c=(b=Math.min(N.length-1,Math.floor(M()/50)),N[b]);c&&c.latency!==e.value&&(e.value=c.latency,e.entries=c.entries,d())},g=n("event",f,{durationThreshold:b.durationThreshold||40});d=p(a,e,c,b.reportAllChanges),g&&(g.observe({type:"first-input",buffered:!0}),o(function(){f(g.takeRecords()),e.value<0&&M()>0&&(e.value=0,e.entries=[]),d(!0)}),j(function(){N=[],L=J(),e=m("INP"),d=p(a,e,c,b.reportAllChanges)}))},R={},S=function(a,b){b=b||{};var c,d=[2500,4e3],e=t(),f=m("LCP"),g=function(a){var b=a[a.length-1];if(b){var d=Math.max(b.startTime-l(),0);dperformance.now())return;d.entries=[f],e(!0),j(function(){d=m("TTFB",0),(e=p(a,d,c,b.reportAllChanges))(!0)})}})}}}]) +//# sourceMappingURL=vendors-node_modules_github_paste-markdown_dist_index_esm_js-node_modules_github_quote-select-84b903-9085d4a7ad4c.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/6CDCAD9EA128C6BE7E1E69F84A61169E24467DEB b/home/.surf/cache/WebKitCache/Version 16/Blobs/6CDCAD9EA128C6BE7E1E69F84A61169E24467DEB new file mode 100644 index 0000000..182db43 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/6CDCAD9EA128C6BE7E1E69F84A61169E24467DEB differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/6DBBF59F6D1A9161C6CB23E0774DFE0B040A5D49 b/home/.surf/cache/WebKitCache/Version 16/Blobs/6DBBF59F6D1A9161C6CB23E0774DFE0B040A5D49 new file mode 100644 index 0000000..9f476c9 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/6DBBF59F6D1A9161C6CB23E0774DFE0B040A5D49 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/6E541CAB6C5345EEE7CAB4C4E9CA4E7C4E483456 b/home/.surf/cache/WebKitCache/Version 16/Blobs/6E541CAB6C5345EEE7CAB4C4E9CA4E7C4E483456 new file mode 100644 index 0000000..e952cf9 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/6E541CAB6C5345EEE7CAB4C4E9CA4E7C4E483456 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/6F19C9AE187724EDEE4A7EB80FE31119570D3133 b/home/.surf/cache/WebKitCache/Version 16/Blobs/6F19C9AE187724EDEE4A7EB80FE31119570D3133 new file mode 100644 index 0000000..c1ee329 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/6F19C9AE187724EDEE4A7EB80FE31119570D3133 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/70CCB9393EE139B6E807B6C6E98AD48C9E98C518 b/home/.surf/cache/WebKitCache/Version 16/Blobs/70CCB9393EE139B6E807B6C6E98AD48C9E98C518 new file mode 100644 index 0000000..6a3a756 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/70CCB9393EE139B6E807B6C6E98AD48C9E98C518 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/7294B556BC842C9A55CD3671BB04F90845D14C7C b/home/.surf/cache/WebKitCache/Version 16/Blobs/7294B556BC842C9A55CD3671BB04F90845D14C7C new file mode 100644 index 0000000..956be0d Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/7294B556BC842C9A55CD3671BB04F90845D14C7C differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/740BA38657811AE2CBA0BDDAED2D69178E2D0FBC b/home/.surf/cache/WebKitCache/Version 16/Blobs/740BA38657811AE2CBA0BDDAED2D69178E2D0FBC new file mode 100644 index 0000000..453407a --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/740BA38657811AE2CBA0BDDAED2D69178E2D0FBC @@ -0,0 +1,3 @@ +[data-color-mode=light][data-light-theme=dark],[data-color-mode=dark][data-dark-theme=dark]{--color-canvas-default-transparent: rgba(13,17,23,0);--color-page-header-bg: #0d1117;--color-marketing-icon-primary: #79c0ff;--color-marketing-icon-secondary: #1f6feb;--color-diff-blob-addition-num-text: #c9d1d9;--color-diff-blob-addition-fg: #c9d1d9;--color-diff-blob-addition-num-bg: rgba(63,185,80,0.3);--color-diff-blob-addition-line-bg: rgba(46,160,67,0.15);--color-diff-blob-addition-word-bg: rgba(46,160,67,0.4);--color-diff-blob-deletion-num-text: #c9d1d9;--color-diff-blob-deletion-fg: #c9d1d9;--color-diff-blob-deletion-num-bg: rgba(248,81,73,0.3);--color-diff-blob-deletion-line-bg: rgba(248,81,73,0.15);--color-diff-blob-deletion-word-bg: rgba(248,81,73,0.4);--color-diff-blob-hunk-num-bg: rgba(56,139,253,0.4);--color-diff-blob-expander-icon: #8b949e;--color-diff-blob-selected-line-highlight-mix-blend-mode: screen;--color-diffstat-deletion-border: rgba(240,246,252,0.1);--color-diffstat-addition-border: rgba(240,246,252,0.1);--color-diffstat-addition-bg: #3fb950;--color-search-keyword-hl: rgba(210,153,34,0.4);--color-prettylights-syntax-comment: #8b949e;--color-prettylights-syntax-constant: #79c0ff;--color-prettylights-syntax-entity: #d2a8ff;--color-prettylights-syntax-storage-modifier-import: #c9d1d9;--color-prettylights-syntax-entity-tag: #7ee787;--color-prettylights-syntax-keyword: #ff7b72;--color-prettylights-syntax-string: #a5d6ff;--color-prettylights-syntax-variable: #ffa657;--color-prettylights-syntax-brackethighlighter-unmatched: #f85149;--color-prettylights-syntax-invalid-illegal-text: #f0f6fc;--color-prettylights-syntax-invalid-illegal-bg: #8e1519;--color-prettylights-syntax-carriage-return-text: #f0f6fc;--color-prettylights-syntax-carriage-return-bg: #b62324;--color-prettylights-syntax-string-regexp: #7ee787;--color-prettylights-syntax-markup-list: #f2cc60;--color-prettylights-syntax-markup-heading: #1f6feb;--color-prettylights-syntax-markup-italic: #c9d1d9;--color-prettylights-syntax-markup-bold: #c9d1d9;--color-prettylights-syntax-markup-deleted-text: #ffdcd7;--color-prettylights-syntax-markup-deleted-bg: #67060c;--color-prettylights-syntax-markup-inserted-text: #aff5b4;--color-prettylights-syntax-markup-inserted-bg: #033a16;--color-prettylights-syntax-markup-changed-text: #ffdfb6;--color-prettylights-syntax-markup-changed-bg: #5a1e02;--color-prettylights-syntax-markup-ignored-text: #c9d1d9;--color-prettylights-syntax-markup-ignored-bg: #1158c7;--color-prettylights-syntax-meta-diff-range: #d2a8ff;--color-prettylights-syntax-brackethighlighter-angle: #8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;--color-prettylights-syntax-constant-other-reference-link: #a5d6ff;--color-codemirror-text: #c9d1d9;--color-codemirror-bg: #0d1117;--color-codemirror-gutters-bg: #0d1117;--color-codemirror-guttermarker-text: #0d1117;--color-codemirror-guttermarker-subtle-text: #6e7681;--color-codemirror-linenumber-text: #8b949e;--color-codemirror-cursor: #c9d1d9;--color-codemirror-selection-bg: rgba(56,139,253,0.4);--color-codemirror-activeline-bg: rgba(110,118,129,0.1);--color-codemirror-matchingbracket-text: #c9d1d9;--color-codemirror-lines-bg: #0d1117;--color-codemirror-syntax-comment: #8b949e;--color-codemirror-syntax-constant: #79c0ff;--color-codemirror-syntax-entity: #d2a8ff;--color-codemirror-syntax-keyword: #ff7b72;--color-codemirror-syntax-storage: #ff7b72;--color-codemirror-syntax-string: #a5d6ff;--color-codemirror-syntax-support: #79c0ff;--color-codemirror-syntax-variable: #ffa657;--color-checks-bg: #010409;--color-checks-run-border-width: 1px;--color-checks-container-border-width: 1px;--color-checks-text-primary: #c9d1d9;--color-checks-text-secondary: #8b949e;--color-checks-text-link: #58a6ff;--color-checks-btn-icon: #8b949e;--color-checks-btn-hover-icon: #c9d1d9;--color-checks-btn-hover-bg: rgba(110,118,129,0.1);--color-checks-input-text: #8b949e;--color-checks-input-placeholder-text: #6e7681;--color-checks-input-focus-text: #c9d1d9;--color-checks-input-bg: #161b22;--color-checks-input-shadow: 0 0 0 1px (obj) => (0, get_1.default)(obj, path);--color-checks-donut-error: #f85149;--color-checks-donut-pending: #d29922;--color-checks-donut-success: #2ea043;--color-checks-donut-neutral: #8b949e;--color-checks-dropdown-text: #c9d1d9;--color-checks-dropdown-bg: #161b22;--color-checks-dropdown-border: #30363d;--color-checks-dropdown-shadow: rgba(1,4,9,0.3);--color-checks-dropdown-hover-text: #c9d1d9;--color-checks-dropdown-hover-bg: rgba(110,118,129,0.1);--color-checks-dropdown-btn-hover-text: #c9d1d9;--color-checks-dropdown-btn-hover-bg: rgba(110,118,129,0.1);--color-checks-scrollbar-thumb-bg: rgba(110,118,129,0.4);--color-checks-header-label-text: #8b949e;--color-checks-header-label-open-text: #c9d1d9;--color-checks-header-border: #21262d;--color-checks-header-icon: #8b949e;--color-checks-line-text: #8b949e;--color-checks-line-num-text: #6e7681;--color-checks-line-timestamp-text: #6e7681;--color-checks-line-hover-bg: rgba(110,118,129,0.1);--color-checks-line-selected-bg: rgba(56,139,253,0.15);--color-checks-line-selected-num-text: #58a6ff;--color-checks-line-dt-fm-text: #ffffff;--color-checks-line-dt-fm-bg: #9e6a03;--color-checks-gate-bg: rgba(187,128,9,0.15);--color-checks-gate-text: #8b949e;--color-checks-gate-waiting-text: #d29922;--color-checks-step-header-open-bg: #161b22;--color-checks-step-error-text: #f85149;--color-checks-step-warning-text: #d29922;--color-checks-logline-text: #8b949e;--color-checks-logline-num-text: #6e7681;--color-checks-logline-debug-text: #a371f7;--color-checks-logline-error-text: #8b949e;--color-checks-logline-error-num-text: #6e7681;--color-checks-logline-error-bg: rgba(248,81,73,0.15);--color-checks-logline-warning-text: #8b949e;--color-checks-logline-warning-num-text: #d29922;--color-checks-logline-warning-bg: rgba(187,128,9,0.15);--color-checks-logline-command-text: #58a6ff;--color-checks-logline-section-text: #3fb950;--color-checks-ansi-black: #0d1117;--color-checks-ansi-black-bright: #161b22;--color-checks-ansi-white: #b1bac4;--color-checks-ansi-white-bright: #b1bac4;--color-checks-ansi-gray: #6e7681;--color-checks-ansi-red: #ff7b72;--color-checks-ansi-red-bright: #ffa198;--color-checks-ansi-green: #3fb950;--color-checks-ansi-green-bright: #56d364;--color-checks-ansi-yellow: #d29922;--color-checks-ansi-yellow-bright: #e3b341;--color-checks-ansi-blue: #58a6ff;--color-checks-ansi-blue-bright: #79c0ff;--color-checks-ansi-magenta: #bc8cff;--color-checks-ansi-magenta-bright: #d2a8ff;--color-checks-ansi-cyan: #76e3ea;--color-checks-ansi-cyan-bright: #b3f0ff;--color-project-header-bg: #0d1117;--color-project-sidebar-bg: #161b22;--color-project-gradient-in: #161b22;--color-project-gradient-out: rgba(22,27,34,0);--color-mktg-btn-bg: #f6f8fa;--color-mktg-btn-shadow-outline: rgb(255 255 255 / 25%) 0 0 0 1px inset;--color-mktg-btn-shadow-focus: rgb(255 255 255 / 25%) 0 0 0 4px;--color-mktg-btn-shadow-hover: 0 4px 7px rgba(0, 0, 0, 0.15), 0 100px 80px rgba(255, 255, 255, 0.02), 0 42px 33px rgba(255, 255, 255, 0.024), 0 22px 18px rgba(255, 255, 255, 0.028), 0 12px 10px rgba(255, 255, 255, 0.034), 0 7px 5px rgba(255, 255, 255, 0.04), 0 3px 2px rgba(255, 255, 255, 0.07);--color-mktg-btn-shadow-hover-muted: rgb(255 255 255) 0 0 0 2px inset;--color-avatar-bg: rgba(255,255,255,0.1);--color-avatar-border: rgba(240,246,252,0.1);--color-avatar-stack-fade: #30363d;--color-avatar-stack-fade-more: #21262d;--color-avatar-child-shadow: -2px -2px 0 #0d1117;--color-topic-tag-border: rgba(0,0,0,0);--color-counter-border: rgba(0,0,0,0);--color-select-menu-backdrop-border: #484f58;--color-select-menu-tap-highlight: rgba(48,54,61,0.5);--color-select-menu-tap-focus-bg: #0c2d6b;--color-overlay-shadow: 0 0 0 1px #30363d, 0 16px 32px rgba(1,4,9,0.85);--color-header-text: rgba(255,255,255,0.7);--color-header-bg: #161b22;--color-header-divider: #8b949e;--color-header-logo: #f0f6fc;--color-header-search-bg: #0d1117;--color-header-search-border: #30363d;--color-sidenav-selected-bg: #21262d;--color-menu-bg-active: #161b22;--color-input-disabled-bg: rgba(110,118,129,0);--color-timeline-badge-bg: #21262d;--color-ansi-black: #484f58;--color-ansi-black-bright: #6e7681;--color-ansi-white: #b1bac4;--color-ansi-white-bright: #ffffff;--color-ansi-gray: #6e7681;--color-ansi-red: #ff7b72;--color-ansi-red-bright: #ffa198;--color-ansi-green: #3fb950;--color-ansi-green-bright: #56d364;--color-ansi-yellow: #d29922;--color-ansi-yellow-bright: #e3b341;--color-ansi-blue: #58a6ff;--color-ansi-blue-bright: #79c0ff;--color-ansi-magenta: #bc8cff;--color-ansi-magenta-bright: #d2a8ff;--color-ansi-cyan: #39c5cf;--color-ansi-cyan-bright: #56d4dd;--color-btn-text: #c9d1d9;--color-btn-bg: #21262d;--color-btn-border: rgba(240,246,252,0.1);--color-btn-shadow: 0 0 transparent;--color-btn-inset-shadow: 0 0 transparent;--color-btn-hover-bg: #30363d;--color-btn-hover-border: #8b949e;--color-btn-active-bg: hsla(212,12%,18%,1);--color-btn-active-border: #6e7681;--color-btn-selected-bg: #161b22;--color-btn-focus-bg: #21262d;--color-btn-focus-border: #8b949e;--color-btn-focus-shadow: 0 0 0 3px rgba(139,148,158,0.3);--color-btn-shadow-active: inset 0 0.15em 0.3em rgba(1,4,9,0.15);--color-btn-shadow-input-focus: 0 0 0 0.2em rgba(31,111,235,0.3);--color-btn-counter-bg: #30363d;--color-btn-primary-text: #ffffff;--color-btn-primary-bg: #238636;--color-btn-primary-border: rgba(240,246,252,0.1);--color-btn-primary-shadow: 0 0 transparent;--color-btn-primary-inset-shadow: 0 0 transparent;--color-btn-primary-hover-bg: #2ea043;--color-btn-primary-hover-border: rgba(240,246,252,0.1);--color-btn-primary-selected-bg: #238636;--color-btn-primary-selected-shadow: 0 0 transparent;--color-btn-primary-disabled-text: rgba(255,255,255,0.5);--color-btn-primary-disabled-bg: rgba(35,134,54,0.6);--color-btn-primary-disabled-border: rgba(240,246,252,0.1);--color-btn-primary-focus-bg: #238636;--color-btn-primary-focus-border: rgba(240,246,252,0.1);--color-btn-primary-focus-shadow: 0 0 0 3px rgba(46,164,79,0.4);--color-btn-primary-icon: #ffffff;--color-btn-primary-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-text: #58a6ff;--color-btn-outline-hover-text: #58a6ff;--color-btn-outline-hover-bg: #30363d;--color-btn-outline-hover-border: rgba(240,246,252,0.1);--color-btn-outline-hover-shadow: 0 1px 0 rgba(1,4,9,0.1);--color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-outline-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-selected-text: #ffffff;--color-btn-outline-selected-bg: #0d419d;--color-btn-outline-selected-border: rgba(240,246,252,0.1);--color-btn-outline-selected-shadow: 0 0 transparent;--color-btn-outline-disabled-text: rgba(88,166,255,0.5);--color-btn-outline-disabled-bg: #0d1117;--color-btn-outline-disabled-counter-bg: rgba(31,111,235,0.05);--color-btn-outline-focus-border: rgba(240,246,252,0.1);--color-btn-outline-focus-shadow: 0 0 0 3px rgba(17,88,199,0.4);--color-btn-outline-counter-bg: rgba(31,111,235,0.1);--color-btn-danger-text: #f85149;--color-btn-danger-hover-text: #ffffff;--color-btn-danger-hover-bg: #da3633;--color-btn-danger-hover-border: #f85149;--color-btn-danger-hover-shadow: 0 0 transparent;--color-btn-danger-hover-inset-shadow: 0 0 transparent;--color-btn-danger-hover-icon: #ffffff;--color-btn-danger-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-danger-selected-text: #ffffff;--color-btn-danger-selected-bg: #b62324;--color-btn-danger-selected-border: #ff7b72;--color-btn-danger-selected-shadow: 0 0 transparent;--color-btn-danger-disabled-text: rgba(248,81,73,0.5);--color-btn-danger-disabled-bg: #0d1117;--color-btn-danger-disabled-counter-bg: rgba(218,54,51,0.05);--color-btn-danger-focus-border: #f85149;--color-btn-danger-focus-shadow: 0 0 0 3px rgba(248,81,73,0.4);--color-btn-danger-counter-bg: rgba(218,54,51,0.1);--color-btn-danger-icon: #f85149;--color-underlinenav-icon: #6e7681;--color-underlinenav-border-hover: rgba(110,118,129,0.4);--color-action-list-item-inline-divider: rgba(48,54,61,0.48);--color-action-list-item-default-hover-bg: rgba(177,186,196,0.12);--color-action-list-item-default-hover-border: rgba(0,0,0,0);--color-action-list-item-default-active-bg: rgba(177,186,196,0.2);--color-action-list-item-default-active-border: rgba(0,0,0,0);--color-action-list-item-default-selected-bg: rgba(177,186,196,0.08);--color-action-list-item-danger-hover-bg: rgba(248,81,73,0.16);--color-action-list-item-danger-active-bg: rgba(248,81,73,0.24);--color-action-list-item-danger-hover-text: #ff7b72;--color-switch-track-bg: #010409;--color-switch-track-border: #6e7681;--color-switch-track-checked-bg: rgba(31,111,235,0.35);--color-switch-track-checked-hover-bg: rgba(31,111,235,0.5);--color-switch-track-checked-active-bg: rgba(31,111,235,0.65);--color-switch-track-checked-border: #58a6ff;--color-switch-knob-checked-bg: #1f6feb;--color-switch-knob-checked-disabled-bg: #484f58;--color-segmented-control-bg: #161b22;--color-segmented-control-button-hover-bg: #30363d;--color-segmented-control-button-active-bg: #21262d;--color-segmented-control-button-selected-border: #6e7681;--color-tree-view-item-chevron-hover-bg: rgba(177,186,196,0.12);--color-tree-view-item-directory-fill: #8b949e;--color-fg-default: #c9d1d9;--color-fg-muted: #8b949e;--color-fg-subtle: #6e7681;--color-fg-on-emphasis: #ffffff;--color-canvas-default: #0d1117;--color-canvas-overlay: #161b22;--color-canvas-inset: #010409;--color-canvas-subtle: #161b22;--color-border-default: #30363d;--color-border-muted: #21262d;--color-border-subtle: rgba(240,246,252,0.1);--color-shadow-small: 0 0 transparent;--color-shadow-medium: 0 3px 6px #010409;--color-shadow-large: 0 8px 24px #010409;--color-shadow-extra-large: 0 12px 48px #010409;--color-neutral-emphasis-plus: #6e7681;--color-neutral-emphasis: #6e7681;--color-neutral-muted: rgba(110,118,129,0.4);--color-neutral-subtle: rgba(110,118,129,0.1);--color-accent-fg: #58a6ff;--color-accent-emphasis: #1f6feb;--color-accent-muted: rgba(56,139,253,0.4);--color-accent-subtle: rgba(56,139,253,0.15);--color-success-fg: #3fb950;--color-success-emphasis: #238636;--color-success-muted: rgba(46,160,67,0.4);--color-success-subtle: rgba(46,160,67,0.15);--color-attention-fg: #d29922;--color-attention-emphasis: #9e6a03;--color-attention-muted: rgba(187,128,9,0.4);--color-attention-subtle: rgba(187,128,9,0.15);--color-severe-fg: #db6d28;--color-severe-emphasis: #bd561d;--color-severe-muted: rgba(219,109,40,0.4);--color-severe-subtle: rgba(219,109,40,0.15);--color-danger-fg: #f85149;--color-danger-emphasis: #da3633;--color-danger-muted: rgba(248,81,73,0.4);--color-danger-subtle: rgba(248,81,73,0.15);--color-open-fg: #3fb950;--color-open-emphasis: #238636;--color-open-muted: rgba(46,160,67,0.4);--color-open-subtle: rgba(46,160,67,0.15);--color-closed-fg: #f85149;--color-closed-emphasis: #da3633;--color-closed-muted: rgba(248,81,73,0.4);--color-closed-subtle: rgba(248,81,73,0.15);--color-done-fg: #a371f7;--color-done-emphasis: #8957e5;--color-done-muted: rgba(163,113,247,0.4);--color-done-subtle: rgba(163,113,247,0.15);--color-sponsors-fg: #db61a2;--color-sponsors-emphasis: #bf4b8a;--color-sponsors-muted: rgba(219,97,162,0.4);--color-sponsors-subtle: rgba(219,97,162,0.15);--color-primer-fg-disabled: #484f58;--color-primer-canvas-backdrop: rgba(1,4,9,0.8);--color-primer-canvas-sticky: rgba(13,17,23,0.95);--color-primer-border-active: #f78166;--color-primer-border-contrast: rgba(255,255,255,0.2);--color-primer-shadow-highlight: 0 0 transparent;--color-primer-shadow-inset: 0 0 transparent;--color-primer-shadow-focus: 0 0 0 3px #0c2d6b;--color-scale-black: #010409;--color-scale-white: #ffffff;--color-scale-gray-0: #f0f6fc;--color-scale-gray-1: #c9d1d9;--color-scale-gray-2: #b1bac4;--color-scale-gray-3: #8b949e;--color-scale-gray-4: #6e7681;--color-scale-gray-5: #484f58;--color-scale-gray-6: #30363d;--color-scale-gray-7: #21262d;--color-scale-gray-8: #161b22;--color-scale-gray-9: #0d1117;--color-scale-blue-0: #cae8ff;--color-scale-blue-1: #a5d6ff;--color-scale-blue-2: #79c0ff;--color-scale-blue-3: #58a6ff;--color-scale-blue-4: #388bfd;--color-scale-blue-5: #1f6feb;--color-scale-blue-6: #1158c7;--color-scale-blue-7: #0d419d;--color-scale-blue-8: #0c2d6b;--color-scale-blue-9: #051d4d;--color-scale-green-0: #aff5b4;--color-scale-green-1: #7ee787;--color-scale-green-2: #56d364;--color-scale-green-3: #3fb950;--color-scale-green-4: #2ea043;--color-scale-green-5: #238636;--color-scale-green-6: #196c2e;--color-scale-green-7: #0f5323;--color-scale-green-8: #033a16;--color-scale-green-9: #04260f;--color-scale-yellow-0: #f8e3a1;--color-scale-yellow-1: #f2cc60;--color-scale-yellow-2: #e3b341;--color-scale-yellow-3: #d29922;--color-scale-yellow-4: #bb8009;--color-scale-yellow-5: #9e6a03;--color-scale-yellow-6: #845306;--color-scale-yellow-7: #693e00;--color-scale-yellow-8: #4b2900;--color-scale-yellow-9: #341a00;--color-scale-orange-0: #ffdfb6;--color-scale-orange-1: #ffc680;--color-scale-orange-2: #ffa657;--color-scale-orange-3: #f0883e;--color-scale-orange-4: #db6d28;--color-scale-orange-5: #bd561d;--color-scale-orange-6: #9b4215;--color-scale-orange-7: #762d0a;--color-scale-orange-8: #5a1e02;--color-scale-orange-9: #3d1300;--color-scale-red-0: #ffdcd7;--color-scale-red-1: #ffc1ba;--color-scale-red-2: #ffa198;--color-scale-red-3: #ff7b72;--color-scale-red-4: #f85149;--color-scale-red-5: #da3633;--color-scale-red-6: #b62324;--color-scale-red-7: #8e1519;--color-scale-red-8: #67060c;--color-scale-red-9: #490202;--color-scale-purple-0: #eddeff;--color-scale-purple-1: #e2c5ff;--color-scale-purple-2: #d2a8ff;--color-scale-purple-3: #bc8cff;--color-scale-purple-4: #a371f7;--color-scale-purple-5: #8957e5;--color-scale-purple-6: #6e40c9;--color-scale-purple-7: #553098;--color-scale-purple-8: #3c1e70;--color-scale-purple-9: #271052;--color-scale-pink-0: #ffdaec;--color-scale-pink-1: #ffbedd;--color-scale-pink-2: #ff9bce;--color-scale-pink-3: #f778ba;--color-scale-pink-4: #db61a2;--color-scale-pink-5: #bf4b8a;--color-scale-pink-6: #9e3670;--color-scale-pink-7: #7d2457;--color-scale-pink-8: #5e103e;--color-scale-pink-9: #42062a;--color-scale-coral-0: #ffddd2;--color-scale-coral-1: #ffc2b2;--color-scale-coral-2: #ffa28b;--color-scale-coral-3: #f78166;--color-scale-coral-4: #ea6045;--color-scale-coral-5: #cf462d;--color-scale-coral-6: #ac3220;--color-scale-coral-7: #872012;--color-scale-coral-8: #640d04;--color-scale-coral-9: #460701}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme=dark]{--color-canvas-default-transparent: rgba(13,17,23,0);--color-page-header-bg: #0d1117;--color-marketing-icon-primary: #79c0ff;--color-marketing-icon-secondary: #1f6feb;--color-diff-blob-addition-num-text: #c9d1d9;--color-diff-blob-addition-fg: #c9d1d9;--color-diff-blob-addition-num-bg: rgba(63,185,80,0.3);--color-diff-blob-addition-line-bg: rgba(46,160,67,0.15);--color-diff-blob-addition-word-bg: rgba(46,160,67,0.4);--color-diff-blob-deletion-num-text: #c9d1d9;--color-diff-blob-deletion-fg: #c9d1d9;--color-diff-blob-deletion-num-bg: rgba(248,81,73,0.3);--color-diff-blob-deletion-line-bg: rgba(248,81,73,0.15);--color-diff-blob-deletion-word-bg: rgba(248,81,73,0.4);--color-diff-blob-hunk-num-bg: rgba(56,139,253,0.4);--color-diff-blob-expander-icon: #8b949e;--color-diff-blob-selected-line-highlight-mix-blend-mode: screen;--color-diffstat-deletion-border: rgba(240,246,252,0.1);--color-diffstat-addition-border: rgba(240,246,252,0.1);--color-diffstat-addition-bg: #3fb950;--color-search-keyword-hl: rgba(210,153,34,0.4);--color-prettylights-syntax-comment: #8b949e;--color-prettylights-syntax-constant: #79c0ff;--color-prettylights-syntax-entity: #d2a8ff;--color-prettylights-syntax-storage-modifier-import: #c9d1d9;--color-prettylights-syntax-entity-tag: #7ee787;--color-prettylights-syntax-keyword: #ff7b72;--color-prettylights-syntax-string: #a5d6ff;--color-prettylights-syntax-variable: #ffa657;--color-prettylights-syntax-brackethighlighter-unmatched: #f85149;--color-prettylights-syntax-invalid-illegal-text: #f0f6fc;--color-prettylights-syntax-invalid-illegal-bg: #8e1519;--color-prettylights-syntax-carriage-return-text: #f0f6fc;--color-prettylights-syntax-carriage-return-bg: #b62324;--color-prettylights-syntax-string-regexp: #7ee787;--color-prettylights-syntax-markup-list: #f2cc60;--color-prettylights-syntax-markup-heading: #1f6feb;--color-prettylights-syntax-markup-italic: #c9d1d9;--color-prettylights-syntax-markup-bold: #c9d1d9;--color-prettylights-syntax-markup-deleted-text: #ffdcd7;--color-prettylights-syntax-markup-deleted-bg: #67060c;--color-prettylights-syntax-markup-inserted-text: #aff5b4;--color-prettylights-syntax-markup-inserted-bg: #033a16;--color-prettylights-syntax-markup-changed-text: #ffdfb6;--color-prettylights-syntax-markup-changed-bg: #5a1e02;--color-prettylights-syntax-markup-ignored-text: #c9d1d9;--color-prettylights-syntax-markup-ignored-bg: #1158c7;--color-prettylights-syntax-meta-diff-range: #d2a8ff;--color-prettylights-syntax-brackethighlighter-angle: #8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;--color-prettylights-syntax-constant-other-reference-link: #a5d6ff;--color-codemirror-text: #c9d1d9;--color-codemirror-bg: #0d1117;--color-codemirror-gutters-bg: #0d1117;--color-codemirror-guttermarker-text: #0d1117;--color-codemirror-guttermarker-subtle-text: #6e7681;--color-codemirror-linenumber-text: #8b949e;--color-codemirror-cursor: #c9d1d9;--color-codemirror-selection-bg: rgba(56,139,253,0.4);--color-codemirror-activeline-bg: rgba(110,118,129,0.1);--color-codemirror-matchingbracket-text: #c9d1d9;--color-codemirror-lines-bg: #0d1117;--color-codemirror-syntax-comment: #8b949e;--color-codemirror-syntax-constant: #79c0ff;--color-codemirror-syntax-entity: #d2a8ff;--color-codemirror-syntax-keyword: #ff7b72;--color-codemirror-syntax-storage: #ff7b72;--color-codemirror-syntax-string: #a5d6ff;--color-codemirror-syntax-support: #79c0ff;--color-codemirror-syntax-variable: #ffa657;--color-checks-bg: #010409;--color-checks-run-border-width: 1px;--color-checks-container-border-width: 1px;--color-checks-text-primary: #c9d1d9;--color-checks-text-secondary: #8b949e;--color-checks-text-link: #58a6ff;--color-checks-btn-icon: #8b949e;--color-checks-btn-hover-icon: #c9d1d9;--color-checks-btn-hover-bg: rgba(110,118,129,0.1);--color-checks-input-text: #8b949e;--color-checks-input-placeholder-text: #6e7681;--color-checks-input-focus-text: #c9d1d9;--color-checks-input-bg: #161b22;--color-checks-input-shadow: 0 0 0 1px (obj) => (0, get_1.default)(obj, path);--color-checks-donut-error: #f85149;--color-checks-donut-pending: #d29922;--color-checks-donut-success: #2ea043;--color-checks-donut-neutral: #8b949e;--color-checks-dropdown-text: #c9d1d9;--color-checks-dropdown-bg: #161b22;--color-checks-dropdown-border: #30363d;--color-checks-dropdown-shadow: rgba(1,4,9,0.3);--color-checks-dropdown-hover-text: #c9d1d9;--color-checks-dropdown-hover-bg: rgba(110,118,129,0.1);--color-checks-dropdown-btn-hover-text: #c9d1d9;--color-checks-dropdown-btn-hover-bg: rgba(110,118,129,0.1);--color-checks-scrollbar-thumb-bg: rgba(110,118,129,0.4);--color-checks-header-label-text: #8b949e;--color-checks-header-label-open-text: #c9d1d9;--color-checks-header-border: #21262d;--color-checks-header-icon: #8b949e;--color-checks-line-text: #8b949e;--color-checks-line-num-text: #6e7681;--color-checks-line-timestamp-text: #6e7681;--color-checks-line-hover-bg: rgba(110,118,129,0.1);--color-checks-line-selected-bg: rgba(56,139,253,0.15);--color-checks-line-selected-num-text: #58a6ff;--color-checks-line-dt-fm-text: #ffffff;--color-checks-line-dt-fm-bg: #9e6a03;--color-checks-gate-bg: rgba(187,128,9,0.15);--color-checks-gate-text: #8b949e;--color-checks-gate-waiting-text: #d29922;--color-checks-step-header-open-bg: #161b22;--color-checks-step-error-text: #f85149;--color-checks-step-warning-text: #d29922;--color-checks-logline-text: #8b949e;--color-checks-logline-num-text: #6e7681;--color-checks-logline-debug-text: #a371f7;--color-checks-logline-error-text: #8b949e;--color-checks-logline-error-num-text: #6e7681;--color-checks-logline-error-bg: rgba(248,81,73,0.15);--color-checks-logline-warning-text: #8b949e;--color-checks-logline-warning-num-text: #d29922;--color-checks-logline-warning-bg: rgba(187,128,9,0.15);--color-checks-logline-command-text: #58a6ff;--color-checks-logline-section-text: #3fb950;--color-checks-ansi-black: #0d1117;--color-checks-ansi-black-bright: #161b22;--color-checks-ansi-white: #b1bac4;--color-checks-ansi-white-bright: #b1bac4;--color-checks-ansi-gray: #6e7681;--color-checks-ansi-red: #ff7b72;--color-checks-ansi-red-bright: #ffa198;--color-checks-ansi-green: #3fb950;--color-checks-ansi-green-bright: #56d364;--color-checks-ansi-yellow: #d29922;--color-checks-ansi-yellow-bright: #e3b341;--color-checks-ansi-blue: #58a6ff;--color-checks-ansi-blue-bright: #79c0ff;--color-checks-ansi-magenta: #bc8cff;--color-checks-ansi-magenta-bright: #d2a8ff;--color-checks-ansi-cyan: #76e3ea;--color-checks-ansi-cyan-bright: #b3f0ff;--color-project-header-bg: #0d1117;--color-project-sidebar-bg: #161b22;--color-project-gradient-in: #161b22;--color-project-gradient-out: rgba(22,27,34,0);--color-mktg-btn-bg: #f6f8fa;--color-mktg-btn-shadow-outline: rgb(255 255 255 / 25%) 0 0 0 1px inset;--color-mktg-btn-shadow-focus: rgb(255 255 255 / 25%) 0 0 0 4px;--color-mktg-btn-shadow-hover: 0 4px 7px rgba(0, 0, 0, 0.15), 0 100px 80px rgba(255, 255, 255, 0.02), 0 42px 33px rgba(255, 255, 255, 0.024), 0 22px 18px rgba(255, 255, 255, 0.028), 0 12px 10px rgba(255, 255, 255, 0.034), 0 7px 5px rgba(255, 255, 255, 0.04), 0 3px 2px rgba(255, 255, 255, 0.07);--color-mktg-btn-shadow-hover-muted: rgb(255 255 255) 0 0 0 2px inset;--color-avatar-bg: rgba(255,255,255,0.1);--color-avatar-border: rgba(240,246,252,0.1);--color-avatar-stack-fade: #30363d;--color-avatar-stack-fade-more: #21262d;--color-avatar-child-shadow: -2px -2px 0 #0d1117;--color-topic-tag-border: rgba(0,0,0,0);--color-counter-border: rgba(0,0,0,0);--color-select-menu-backdrop-border: #484f58;--color-select-menu-tap-highlight: rgba(48,54,61,0.5);--color-select-menu-tap-focus-bg: #0c2d6b;--color-overlay-shadow: 0 0 0 1px #30363d, 0 16px 32px rgba(1,4,9,0.85);--color-header-text: rgba(255,255,255,0.7);--color-header-bg: #161b22;--color-header-divider: #8b949e;--color-header-logo: #f0f6fc;--color-header-search-bg: #0d1117;--color-header-search-border: #30363d;--color-sidenav-selected-bg: #21262d;--color-menu-bg-active: #161b22;--color-input-disabled-bg: rgba(110,118,129,0);--color-timeline-badge-bg: #21262d;--color-ansi-black: #484f58;--color-ansi-black-bright: #6e7681;--color-ansi-white: #b1bac4;--color-ansi-white-bright: #ffffff;--color-ansi-gray: #6e7681;--color-ansi-red: #ff7b72;--color-ansi-red-bright: #ffa198;--color-ansi-green: #3fb950;--color-ansi-green-bright: #56d364;--color-ansi-yellow: #d29922;--color-ansi-yellow-bright: #e3b341;--color-ansi-blue: #58a6ff;--color-ansi-blue-bright: #79c0ff;--color-ansi-magenta: #bc8cff;--color-ansi-magenta-bright: #d2a8ff;--color-ansi-cyan: #39c5cf;--color-ansi-cyan-bright: #56d4dd;--color-btn-text: #c9d1d9;--color-btn-bg: #21262d;--color-btn-border: rgba(240,246,252,0.1);--color-btn-shadow: 0 0 transparent;--color-btn-inset-shadow: 0 0 transparent;--color-btn-hover-bg: #30363d;--color-btn-hover-border: #8b949e;--color-btn-active-bg: hsla(212,12%,18%,1);--color-btn-active-border: #6e7681;--color-btn-selected-bg: #161b22;--color-btn-focus-bg: #21262d;--color-btn-focus-border: #8b949e;--color-btn-focus-shadow: 0 0 0 3px rgba(139,148,158,0.3);--color-btn-shadow-active: inset 0 0.15em 0.3em rgba(1,4,9,0.15);--color-btn-shadow-input-focus: 0 0 0 0.2em rgba(31,111,235,0.3);--color-btn-counter-bg: #30363d;--color-btn-primary-text: #ffffff;--color-btn-primary-bg: #238636;--color-btn-primary-border: rgba(240,246,252,0.1);--color-btn-primary-shadow: 0 0 transparent;--color-btn-primary-inset-shadow: 0 0 transparent;--color-btn-primary-hover-bg: #2ea043;--color-btn-primary-hover-border: rgba(240,246,252,0.1);--color-btn-primary-selected-bg: #238636;--color-btn-primary-selected-shadow: 0 0 transparent;--color-btn-primary-disabled-text: rgba(255,255,255,0.5);--color-btn-primary-disabled-bg: rgba(35,134,54,0.6);--color-btn-primary-disabled-border: rgba(240,246,252,0.1);--color-btn-primary-focus-bg: #238636;--color-btn-primary-focus-border: rgba(240,246,252,0.1);--color-btn-primary-focus-shadow: 0 0 0 3px rgba(46,164,79,0.4);--color-btn-primary-icon: #ffffff;--color-btn-primary-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-text: #58a6ff;--color-btn-outline-hover-text: #58a6ff;--color-btn-outline-hover-bg: #30363d;--color-btn-outline-hover-border: rgba(240,246,252,0.1);--color-btn-outline-hover-shadow: 0 1px 0 rgba(1,4,9,0.1);--color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-outline-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-selected-text: #ffffff;--color-btn-outline-selected-bg: #0d419d;--color-btn-outline-selected-border: rgba(240,246,252,0.1);--color-btn-outline-selected-shadow: 0 0 transparent;--color-btn-outline-disabled-text: rgba(88,166,255,0.5);--color-btn-outline-disabled-bg: #0d1117;--color-btn-outline-disabled-counter-bg: rgba(31,111,235,0.05);--color-btn-outline-focus-border: rgba(240,246,252,0.1);--color-btn-outline-focus-shadow: 0 0 0 3px rgba(17,88,199,0.4);--color-btn-outline-counter-bg: rgba(31,111,235,0.1);--color-btn-danger-text: #f85149;--color-btn-danger-hover-text: #ffffff;--color-btn-danger-hover-bg: #da3633;--color-btn-danger-hover-border: #f85149;--color-btn-danger-hover-shadow: 0 0 transparent;--color-btn-danger-hover-inset-shadow: 0 0 transparent;--color-btn-danger-hover-icon: #ffffff;--color-btn-danger-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-danger-selected-text: #ffffff;--color-btn-danger-selected-bg: #b62324;--color-btn-danger-selected-border: #ff7b72;--color-btn-danger-selected-shadow: 0 0 transparent;--color-btn-danger-disabled-text: rgba(248,81,73,0.5);--color-btn-danger-disabled-bg: #0d1117;--color-btn-danger-disabled-counter-bg: rgba(218,54,51,0.05);--color-btn-danger-focus-border: #f85149;--color-btn-danger-focus-shadow: 0 0 0 3px rgba(248,81,73,0.4);--color-btn-danger-counter-bg: rgba(218,54,51,0.1);--color-btn-danger-icon: #f85149;--color-underlinenav-icon: #6e7681;--color-underlinenav-border-hover: rgba(110,118,129,0.4);--color-action-list-item-inline-divider: rgba(48,54,61,0.48);--color-action-list-item-default-hover-bg: rgba(177,186,196,0.12);--color-action-list-item-default-hover-border: rgba(0,0,0,0);--color-action-list-item-default-active-bg: rgba(177,186,196,0.2);--color-action-list-item-default-active-border: rgba(0,0,0,0);--color-action-list-item-default-selected-bg: rgba(177,186,196,0.08);--color-action-list-item-danger-hover-bg: rgba(248,81,73,0.16);--color-action-list-item-danger-active-bg: rgba(248,81,73,0.24);--color-action-list-item-danger-hover-text: #ff7b72;--color-switch-track-bg: #010409;--color-switch-track-border: #6e7681;--color-switch-track-checked-bg: rgba(31,111,235,0.35);--color-switch-track-checked-hover-bg: rgba(31,111,235,0.5);--color-switch-track-checked-active-bg: rgba(31,111,235,0.65);--color-switch-track-checked-border: #58a6ff;--color-switch-knob-checked-bg: #1f6feb;--color-switch-knob-checked-disabled-bg: #484f58;--color-segmented-control-bg: #161b22;--color-segmented-control-button-hover-bg: #30363d;--color-segmented-control-button-active-bg: #21262d;--color-segmented-control-button-selected-border: #6e7681;--color-tree-view-item-chevron-hover-bg: rgba(177,186,196,0.12);--color-tree-view-item-directory-fill: #8b949e;--color-fg-default: #c9d1d9;--color-fg-muted: #8b949e;--color-fg-subtle: #6e7681;--color-fg-on-emphasis: #ffffff;--color-canvas-default: #0d1117;--color-canvas-overlay: #161b22;--color-canvas-inset: #010409;--color-canvas-subtle: #161b22;--color-border-default: #30363d;--color-border-muted: #21262d;--color-border-subtle: rgba(240,246,252,0.1);--color-shadow-small: 0 0 transparent;--color-shadow-medium: 0 3px 6px #010409;--color-shadow-large: 0 8px 24px #010409;--color-shadow-extra-large: 0 12px 48px #010409;--color-neutral-emphasis-plus: #6e7681;--color-neutral-emphasis: #6e7681;--color-neutral-muted: rgba(110,118,129,0.4);--color-neutral-subtle: rgba(110,118,129,0.1);--color-accent-fg: #58a6ff;--color-accent-emphasis: #1f6feb;--color-accent-muted: rgba(56,139,253,0.4);--color-accent-subtle: rgba(56,139,253,0.15);--color-success-fg: #3fb950;--color-success-emphasis: #238636;--color-success-muted: rgba(46,160,67,0.4);--color-success-subtle: rgba(46,160,67,0.15);--color-attention-fg: #d29922;--color-attention-emphasis: #9e6a03;--color-attention-muted: rgba(187,128,9,0.4);--color-attention-subtle: rgba(187,128,9,0.15);--color-severe-fg: #db6d28;--color-severe-emphasis: #bd561d;--color-severe-muted: rgba(219,109,40,0.4);--color-severe-subtle: rgba(219,109,40,0.15);--color-danger-fg: #f85149;--color-danger-emphasis: #da3633;--color-danger-muted: rgba(248,81,73,0.4);--color-danger-subtle: rgba(248,81,73,0.15);--color-open-fg: #3fb950;--color-open-emphasis: #238636;--color-open-muted: rgba(46,160,67,0.4);--color-open-subtle: rgba(46,160,67,0.15);--color-closed-fg: #f85149;--color-closed-emphasis: #da3633;--color-closed-muted: rgba(248,81,73,0.4);--color-closed-subtle: rgba(248,81,73,0.15);--color-done-fg: #a371f7;--color-done-emphasis: #8957e5;--color-done-muted: rgba(163,113,247,0.4);--color-done-subtle: rgba(163,113,247,0.15);--color-sponsors-fg: #db61a2;--color-sponsors-emphasis: #bf4b8a;--color-sponsors-muted: rgba(219,97,162,0.4);--color-sponsors-subtle: rgba(219,97,162,0.15);--color-primer-fg-disabled: #484f58;--color-primer-canvas-backdrop: rgba(1,4,9,0.8);--color-primer-canvas-sticky: rgba(13,17,23,0.95);--color-primer-border-active: #f78166;--color-primer-border-contrast: rgba(255,255,255,0.2);--color-primer-shadow-highlight: 0 0 transparent;--color-primer-shadow-inset: 0 0 transparent;--color-primer-shadow-focus: 0 0 0 3px #0c2d6b;--color-scale-black: #010409;--color-scale-white: #ffffff;--color-scale-gray-0: #f0f6fc;--color-scale-gray-1: #c9d1d9;--color-scale-gray-2: #b1bac4;--color-scale-gray-3: #8b949e;--color-scale-gray-4: #6e7681;--color-scale-gray-5: #484f58;--color-scale-gray-6: #30363d;--color-scale-gray-7: #21262d;--color-scale-gray-8: #161b22;--color-scale-gray-9: #0d1117;--color-scale-blue-0: #cae8ff;--color-scale-blue-1: #a5d6ff;--color-scale-blue-2: #79c0ff;--color-scale-blue-3: #58a6ff;--color-scale-blue-4: #388bfd;--color-scale-blue-5: #1f6feb;--color-scale-blue-6: #1158c7;--color-scale-blue-7: #0d419d;--color-scale-blue-8: #0c2d6b;--color-scale-blue-9: #051d4d;--color-scale-green-0: #aff5b4;--color-scale-green-1: #7ee787;--color-scale-green-2: #56d364;--color-scale-green-3: #3fb950;--color-scale-green-4: #2ea043;--color-scale-green-5: #238636;--color-scale-green-6: #196c2e;--color-scale-green-7: #0f5323;--color-scale-green-8: #033a16;--color-scale-green-9: #04260f;--color-scale-yellow-0: #f8e3a1;--color-scale-yellow-1: #f2cc60;--color-scale-yellow-2: #e3b341;--color-scale-yellow-3: #d29922;--color-scale-yellow-4: #bb8009;--color-scale-yellow-5: #9e6a03;--color-scale-yellow-6: #845306;--color-scale-yellow-7: #693e00;--color-scale-yellow-8: #4b2900;--color-scale-yellow-9: #341a00;--color-scale-orange-0: #ffdfb6;--color-scale-orange-1: #ffc680;--color-scale-orange-2: #ffa657;--color-scale-orange-3: #f0883e;--color-scale-orange-4: #db6d28;--color-scale-orange-5: #bd561d;--color-scale-orange-6: #9b4215;--color-scale-orange-7: #762d0a;--color-scale-orange-8: #5a1e02;--color-scale-orange-9: #3d1300;--color-scale-red-0: #ffdcd7;--color-scale-red-1: #ffc1ba;--color-scale-red-2: #ffa198;--color-scale-red-3: #ff7b72;--color-scale-red-4: #f85149;--color-scale-red-5: #da3633;--color-scale-red-6: #b62324;--color-scale-red-7: #8e1519;--color-scale-red-8: #67060c;--color-scale-red-9: #490202;--color-scale-purple-0: #eddeff;--color-scale-purple-1: #e2c5ff;--color-scale-purple-2: #d2a8ff;--color-scale-purple-3: #bc8cff;--color-scale-purple-4: #a371f7;--color-scale-purple-5: #8957e5;--color-scale-purple-6: #6e40c9;--color-scale-purple-7: #553098;--color-scale-purple-8: #3c1e70;--color-scale-purple-9: #271052;--color-scale-pink-0: #ffdaec;--color-scale-pink-1: #ffbedd;--color-scale-pink-2: #ff9bce;--color-scale-pink-3: #f778ba;--color-scale-pink-4: #db61a2;--color-scale-pink-5: #bf4b8a;--color-scale-pink-6: #9e3670;--color-scale-pink-7: #7d2457;--color-scale-pink-8: #5e103e;--color-scale-pink-9: #42062a;--color-scale-coral-0: #ffddd2;--color-scale-coral-1: #ffc2b2;--color-scale-coral-2: #ffa28b;--color-scale-coral-3: #f78166;--color-scale-coral-4: #ea6045;--color-scale-coral-5: #cf462d;--color-scale-coral-6: #ac3220;--color-scale-coral-7: #872012;--color-scale-coral-8: #640d04;--color-scale-coral-9: #460701}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme=dark]{--color-canvas-default-transparent: rgba(13,17,23,0);--color-page-header-bg: #0d1117;--color-marketing-icon-primary: #79c0ff;--color-marketing-icon-secondary: #1f6feb;--color-diff-blob-addition-num-text: #c9d1d9;--color-diff-blob-addition-fg: #c9d1d9;--color-diff-blob-addition-num-bg: rgba(63,185,80,0.3);--color-diff-blob-addition-line-bg: rgba(46,160,67,0.15);--color-diff-blob-addition-word-bg: rgba(46,160,67,0.4);--color-diff-blob-deletion-num-text: #c9d1d9;--color-diff-blob-deletion-fg: #c9d1d9;--color-diff-blob-deletion-num-bg: rgba(248,81,73,0.3);--color-diff-blob-deletion-line-bg: rgba(248,81,73,0.15);--color-diff-blob-deletion-word-bg: rgba(248,81,73,0.4);--color-diff-blob-hunk-num-bg: rgba(56,139,253,0.4);--color-diff-blob-expander-icon: #8b949e;--color-diff-blob-selected-line-highlight-mix-blend-mode: screen;--color-diffstat-deletion-border: rgba(240,246,252,0.1);--color-diffstat-addition-border: rgba(240,246,252,0.1);--color-diffstat-addition-bg: #3fb950;--color-search-keyword-hl: rgba(210,153,34,0.4);--color-prettylights-syntax-comment: #8b949e;--color-prettylights-syntax-constant: #79c0ff;--color-prettylights-syntax-entity: #d2a8ff;--color-prettylights-syntax-storage-modifier-import: #c9d1d9;--color-prettylights-syntax-entity-tag: #7ee787;--color-prettylights-syntax-keyword: #ff7b72;--color-prettylights-syntax-string: #a5d6ff;--color-prettylights-syntax-variable: #ffa657;--color-prettylights-syntax-brackethighlighter-unmatched: #f85149;--color-prettylights-syntax-invalid-illegal-text: #f0f6fc;--color-prettylights-syntax-invalid-illegal-bg: #8e1519;--color-prettylights-syntax-carriage-return-text: #f0f6fc;--color-prettylights-syntax-carriage-return-bg: #b62324;--color-prettylights-syntax-string-regexp: #7ee787;--color-prettylights-syntax-markup-list: #f2cc60;--color-prettylights-syntax-markup-heading: #1f6feb;--color-prettylights-syntax-markup-italic: #c9d1d9;--color-prettylights-syntax-markup-bold: #c9d1d9;--color-prettylights-syntax-markup-deleted-text: #ffdcd7;--color-prettylights-syntax-markup-deleted-bg: #67060c;--color-prettylights-syntax-markup-inserted-text: #aff5b4;--color-prettylights-syntax-markup-inserted-bg: #033a16;--color-prettylights-syntax-markup-changed-text: #ffdfb6;--color-prettylights-syntax-markup-changed-bg: #5a1e02;--color-prettylights-syntax-markup-ignored-text: #c9d1d9;--color-prettylights-syntax-markup-ignored-bg: #1158c7;--color-prettylights-syntax-meta-diff-range: #d2a8ff;--color-prettylights-syntax-brackethighlighter-angle: #8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;--color-prettylights-syntax-constant-other-reference-link: #a5d6ff;--color-codemirror-text: #c9d1d9;--color-codemirror-bg: #0d1117;--color-codemirror-gutters-bg: #0d1117;--color-codemirror-guttermarker-text: #0d1117;--color-codemirror-guttermarker-subtle-text: #6e7681;--color-codemirror-linenumber-text: #8b949e;--color-codemirror-cursor: #c9d1d9;--color-codemirror-selection-bg: rgba(56,139,253,0.4);--color-codemirror-activeline-bg: rgba(110,118,129,0.1);--color-codemirror-matchingbracket-text: #c9d1d9;--color-codemirror-lines-bg: #0d1117;--color-codemirror-syntax-comment: #8b949e;--color-codemirror-syntax-constant: #79c0ff;--color-codemirror-syntax-entity: #d2a8ff;--color-codemirror-syntax-keyword: #ff7b72;--color-codemirror-syntax-storage: #ff7b72;--color-codemirror-syntax-string: #a5d6ff;--color-codemirror-syntax-support: #79c0ff;--color-codemirror-syntax-variable: #ffa657;--color-checks-bg: #010409;--color-checks-run-border-width: 1px;--color-checks-container-border-width: 1px;--color-checks-text-primary: #c9d1d9;--color-checks-text-secondary: #8b949e;--color-checks-text-link: #58a6ff;--color-checks-btn-icon: #8b949e;--color-checks-btn-hover-icon: #c9d1d9;--color-checks-btn-hover-bg: rgba(110,118,129,0.1);--color-checks-input-text: #8b949e;--color-checks-input-placeholder-text: #6e7681;--color-checks-input-focus-text: #c9d1d9;--color-checks-input-bg: #161b22;--color-checks-input-shadow: 0 0 0 1px (obj) => (0, get_1.default)(obj, path);--color-checks-donut-error: #f85149;--color-checks-donut-pending: #d29922;--color-checks-donut-success: #2ea043;--color-checks-donut-neutral: #8b949e;--color-checks-dropdown-text: #c9d1d9;--color-checks-dropdown-bg: #161b22;--color-checks-dropdown-border: #30363d;--color-checks-dropdown-shadow: rgba(1,4,9,0.3);--color-checks-dropdown-hover-text: #c9d1d9;--color-checks-dropdown-hover-bg: rgba(110,118,129,0.1);--color-checks-dropdown-btn-hover-text: #c9d1d9;--color-checks-dropdown-btn-hover-bg: rgba(110,118,129,0.1);--color-checks-scrollbar-thumb-bg: rgba(110,118,129,0.4);--color-checks-header-label-text: #8b949e;--color-checks-header-label-open-text: #c9d1d9;--color-checks-header-border: #21262d;--color-checks-header-icon: #8b949e;--color-checks-line-text: #8b949e;--color-checks-line-num-text: #6e7681;--color-checks-line-timestamp-text: #6e7681;--color-checks-line-hover-bg: rgba(110,118,129,0.1);--color-checks-line-selected-bg: rgba(56,139,253,0.15);--color-checks-line-selected-num-text: #58a6ff;--color-checks-line-dt-fm-text: #ffffff;--color-checks-line-dt-fm-bg: #9e6a03;--color-checks-gate-bg: rgba(187,128,9,0.15);--color-checks-gate-text: #8b949e;--color-checks-gate-waiting-text: #d29922;--color-checks-step-header-open-bg: #161b22;--color-checks-step-error-text: #f85149;--color-checks-step-warning-text: #d29922;--color-checks-logline-text: #8b949e;--color-checks-logline-num-text: #6e7681;--color-checks-logline-debug-text: #a371f7;--color-checks-logline-error-text: #8b949e;--color-checks-logline-error-num-text: #6e7681;--color-checks-logline-error-bg: rgba(248,81,73,0.15);--color-checks-logline-warning-text: #8b949e;--color-checks-logline-warning-num-text: #d29922;--color-checks-logline-warning-bg: rgba(187,128,9,0.15);--color-checks-logline-command-text: #58a6ff;--color-checks-logline-section-text: #3fb950;--color-checks-ansi-black: #0d1117;--color-checks-ansi-black-bright: #161b22;--color-checks-ansi-white: #b1bac4;--color-checks-ansi-white-bright: #b1bac4;--color-checks-ansi-gray: #6e7681;--color-checks-ansi-red: #ff7b72;--color-checks-ansi-red-bright: #ffa198;--color-checks-ansi-green: #3fb950;--color-checks-ansi-green-bright: #56d364;--color-checks-ansi-yellow: #d29922;--color-checks-ansi-yellow-bright: #e3b341;--color-checks-ansi-blue: #58a6ff;--color-checks-ansi-blue-bright: #79c0ff;--color-checks-ansi-magenta: #bc8cff;--color-checks-ansi-magenta-bright: #d2a8ff;--color-checks-ansi-cyan: #76e3ea;--color-checks-ansi-cyan-bright: #b3f0ff;--color-project-header-bg: #0d1117;--color-project-sidebar-bg: #161b22;--color-project-gradient-in: #161b22;--color-project-gradient-out: rgba(22,27,34,0);--color-mktg-btn-bg: #f6f8fa;--color-mktg-btn-shadow-outline: rgb(255 255 255 / 25%) 0 0 0 1px inset;--color-mktg-btn-shadow-focus: rgb(255 255 255 / 25%) 0 0 0 4px;--color-mktg-btn-shadow-hover: 0 4px 7px rgba(0, 0, 0, 0.15), 0 100px 80px rgba(255, 255, 255, 0.02), 0 42px 33px rgba(255, 255, 255, 0.024), 0 22px 18px rgba(255, 255, 255, 0.028), 0 12px 10px rgba(255, 255, 255, 0.034), 0 7px 5px rgba(255, 255, 255, 0.04), 0 3px 2px rgba(255, 255, 255, 0.07);--color-mktg-btn-shadow-hover-muted: rgb(255 255 255) 0 0 0 2px inset;--color-avatar-bg: rgba(255,255,255,0.1);--color-avatar-border: rgba(240,246,252,0.1);--color-avatar-stack-fade: #30363d;--color-avatar-stack-fade-more: #21262d;--color-avatar-child-shadow: -2px -2px 0 #0d1117;--color-topic-tag-border: rgba(0,0,0,0);--color-counter-border: rgba(0,0,0,0);--color-select-menu-backdrop-border: #484f58;--color-select-menu-tap-highlight: rgba(48,54,61,0.5);--color-select-menu-tap-focus-bg: #0c2d6b;--color-overlay-shadow: 0 0 0 1px #30363d, 0 16px 32px rgba(1,4,9,0.85);--color-header-text: rgba(255,255,255,0.7);--color-header-bg: #161b22;--color-header-divider: #8b949e;--color-header-logo: #f0f6fc;--color-header-search-bg: #0d1117;--color-header-search-border: #30363d;--color-sidenav-selected-bg: #21262d;--color-menu-bg-active: #161b22;--color-input-disabled-bg: rgba(110,118,129,0);--color-timeline-badge-bg: #21262d;--color-ansi-black: #484f58;--color-ansi-black-bright: #6e7681;--color-ansi-white: #b1bac4;--color-ansi-white-bright: #ffffff;--color-ansi-gray: #6e7681;--color-ansi-red: #ff7b72;--color-ansi-red-bright: #ffa198;--color-ansi-green: #3fb950;--color-ansi-green-bright: #56d364;--color-ansi-yellow: #d29922;--color-ansi-yellow-bright: #e3b341;--color-ansi-blue: #58a6ff;--color-ansi-blue-bright: #79c0ff;--color-ansi-magenta: #bc8cff;--color-ansi-magenta-bright: #d2a8ff;--color-ansi-cyan: #39c5cf;--color-ansi-cyan-bright: #56d4dd;--color-btn-text: #c9d1d9;--color-btn-bg: #21262d;--color-btn-border: rgba(240,246,252,0.1);--color-btn-shadow: 0 0 transparent;--color-btn-inset-shadow: 0 0 transparent;--color-btn-hover-bg: #30363d;--color-btn-hover-border: #8b949e;--color-btn-active-bg: hsla(212,12%,18%,1);--color-btn-active-border: #6e7681;--color-btn-selected-bg: #161b22;--color-btn-focus-bg: #21262d;--color-btn-focus-border: #8b949e;--color-btn-focus-shadow: 0 0 0 3px rgba(139,148,158,0.3);--color-btn-shadow-active: inset 0 0.15em 0.3em rgba(1,4,9,0.15);--color-btn-shadow-input-focus: 0 0 0 0.2em rgba(31,111,235,0.3);--color-btn-counter-bg: #30363d;--color-btn-primary-text: #ffffff;--color-btn-primary-bg: #238636;--color-btn-primary-border: rgba(240,246,252,0.1);--color-btn-primary-shadow: 0 0 transparent;--color-btn-primary-inset-shadow: 0 0 transparent;--color-btn-primary-hover-bg: #2ea043;--color-btn-primary-hover-border: rgba(240,246,252,0.1);--color-btn-primary-selected-bg: #238636;--color-btn-primary-selected-shadow: 0 0 transparent;--color-btn-primary-disabled-text: rgba(255,255,255,0.5);--color-btn-primary-disabled-bg: rgba(35,134,54,0.6);--color-btn-primary-disabled-border: rgba(240,246,252,0.1);--color-btn-primary-focus-bg: #238636;--color-btn-primary-focus-border: rgba(240,246,252,0.1);--color-btn-primary-focus-shadow: 0 0 0 3px rgba(46,164,79,0.4);--color-btn-primary-icon: #ffffff;--color-btn-primary-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-text: #58a6ff;--color-btn-outline-hover-text: #58a6ff;--color-btn-outline-hover-bg: #30363d;--color-btn-outline-hover-border: rgba(240,246,252,0.1);--color-btn-outline-hover-shadow: 0 1px 0 rgba(1,4,9,0.1);--color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-outline-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-selected-text: #ffffff;--color-btn-outline-selected-bg: #0d419d;--color-btn-outline-selected-border: rgba(240,246,252,0.1);--color-btn-outline-selected-shadow: 0 0 transparent;--color-btn-outline-disabled-text: rgba(88,166,255,0.5);--color-btn-outline-disabled-bg: #0d1117;--color-btn-outline-disabled-counter-bg: rgba(31,111,235,0.05);--color-btn-outline-focus-border: rgba(240,246,252,0.1);--color-btn-outline-focus-shadow: 0 0 0 3px rgba(17,88,199,0.4);--color-btn-outline-counter-bg: rgba(31,111,235,0.1);--color-btn-danger-text: #f85149;--color-btn-danger-hover-text: #ffffff;--color-btn-danger-hover-bg: #da3633;--color-btn-danger-hover-border: #f85149;--color-btn-danger-hover-shadow: 0 0 transparent;--color-btn-danger-hover-inset-shadow: 0 0 transparent;--color-btn-danger-hover-icon: #ffffff;--color-btn-danger-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-danger-selected-text: #ffffff;--color-btn-danger-selected-bg: #b62324;--color-btn-danger-selected-border: #ff7b72;--color-btn-danger-selected-shadow: 0 0 transparent;--color-btn-danger-disabled-text: rgba(248,81,73,0.5);--color-btn-danger-disabled-bg: #0d1117;--color-btn-danger-disabled-counter-bg: rgba(218,54,51,0.05);--color-btn-danger-focus-border: #f85149;--color-btn-danger-focus-shadow: 0 0 0 3px rgba(248,81,73,0.4);--color-btn-danger-counter-bg: rgba(218,54,51,0.1);--color-btn-danger-icon: #f85149;--color-underlinenav-icon: #6e7681;--color-underlinenav-border-hover: rgba(110,118,129,0.4);--color-action-list-item-inline-divider: rgba(48,54,61,0.48);--color-action-list-item-default-hover-bg: rgba(177,186,196,0.12);--color-action-list-item-default-hover-border: rgba(0,0,0,0);--color-action-list-item-default-active-bg: rgba(177,186,196,0.2);--color-action-list-item-default-active-border: rgba(0,0,0,0);--color-action-list-item-default-selected-bg: rgba(177,186,196,0.08);--color-action-list-item-danger-hover-bg: rgba(248,81,73,0.16);--color-action-list-item-danger-active-bg: rgba(248,81,73,0.24);--color-action-list-item-danger-hover-text: #ff7b72;--color-switch-track-bg: #010409;--color-switch-track-border: #6e7681;--color-switch-track-checked-bg: rgba(31,111,235,0.35);--color-switch-track-checked-hover-bg: rgba(31,111,235,0.5);--color-switch-track-checked-active-bg: rgba(31,111,235,0.65);--color-switch-track-checked-border: #58a6ff;--color-switch-knob-checked-bg: #1f6feb;--color-switch-knob-checked-disabled-bg: #484f58;--color-segmented-control-bg: #161b22;--color-segmented-control-button-hover-bg: #30363d;--color-segmented-control-button-active-bg: #21262d;--color-segmented-control-button-selected-border: #6e7681;--color-tree-view-item-chevron-hover-bg: rgba(177,186,196,0.12);--color-tree-view-item-directory-fill: #8b949e;--color-fg-default: #c9d1d9;--color-fg-muted: #8b949e;--color-fg-subtle: #6e7681;--color-fg-on-emphasis: #ffffff;--color-canvas-default: #0d1117;--color-canvas-overlay: #161b22;--color-canvas-inset: #010409;--color-canvas-subtle: #161b22;--color-border-default: #30363d;--color-border-muted: #21262d;--color-border-subtle: rgba(240,246,252,0.1);--color-shadow-small: 0 0 transparent;--color-shadow-medium: 0 3px 6px #010409;--color-shadow-large: 0 8px 24px #010409;--color-shadow-extra-large: 0 12px 48px #010409;--color-neutral-emphasis-plus: #6e7681;--color-neutral-emphasis: #6e7681;--color-neutral-muted: rgba(110,118,129,0.4);--color-neutral-subtle: rgba(110,118,129,0.1);--color-accent-fg: #58a6ff;--color-accent-emphasis: #1f6feb;--color-accent-muted: rgba(56,139,253,0.4);--color-accent-subtle: rgba(56,139,253,0.15);--color-success-fg: #3fb950;--color-success-emphasis: #238636;--color-success-muted: rgba(46,160,67,0.4);--color-success-subtle: rgba(46,160,67,0.15);--color-attention-fg: #d29922;--color-attention-emphasis: #9e6a03;--color-attention-muted: rgba(187,128,9,0.4);--color-attention-subtle: rgba(187,128,9,0.15);--color-severe-fg: #db6d28;--color-severe-emphasis: #bd561d;--color-severe-muted: rgba(219,109,40,0.4);--color-severe-subtle: rgba(219,109,40,0.15);--color-danger-fg: #f85149;--color-danger-emphasis: #da3633;--color-danger-muted: rgba(248,81,73,0.4);--color-danger-subtle: rgba(248,81,73,0.15);--color-open-fg: #3fb950;--color-open-emphasis: #238636;--color-open-muted: rgba(46,160,67,0.4);--color-open-subtle: rgba(46,160,67,0.15);--color-closed-fg: #f85149;--color-closed-emphasis: #da3633;--color-closed-muted: rgba(248,81,73,0.4);--color-closed-subtle: rgba(248,81,73,0.15);--color-done-fg: #a371f7;--color-done-emphasis: #8957e5;--color-done-muted: rgba(163,113,247,0.4);--color-done-subtle: rgba(163,113,247,0.15);--color-sponsors-fg: #db61a2;--color-sponsors-emphasis: #bf4b8a;--color-sponsors-muted: rgba(219,97,162,0.4);--color-sponsors-subtle: rgba(219,97,162,0.15);--color-primer-fg-disabled: #484f58;--color-primer-canvas-backdrop: rgba(1,4,9,0.8);--color-primer-canvas-sticky: rgba(13,17,23,0.95);--color-primer-border-active: #f78166;--color-primer-border-contrast: rgba(255,255,255,0.2);--color-primer-shadow-highlight: 0 0 transparent;--color-primer-shadow-inset: 0 0 transparent;--color-primer-shadow-focus: 0 0 0 3px #0c2d6b;--color-scale-black: #010409;--color-scale-white: #ffffff;--color-scale-gray-0: #f0f6fc;--color-scale-gray-1: #c9d1d9;--color-scale-gray-2: #b1bac4;--color-scale-gray-3: #8b949e;--color-scale-gray-4: #6e7681;--color-scale-gray-5: #484f58;--color-scale-gray-6: #30363d;--color-scale-gray-7: #21262d;--color-scale-gray-8: #161b22;--color-scale-gray-9: #0d1117;--color-scale-blue-0: #cae8ff;--color-scale-blue-1: #a5d6ff;--color-scale-blue-2: #79c0ff;--color-scale-blue-3: #58a6ff;--color-scale-blue-4: #388bfd;--color-scale-blue-5: #1f6feb;--color-scale-blue-6: #1158c7;--color-scale-blue-7: #0d419d;--color-scale-blue-8: #0c2d6b;--color-scale-blue-9: #051d4d;--color-scale-green-0: #aff5b4;--color-scale-green-1: #7ee787;--color-scale-green-2: #56d364;--color-scale-green-3: #3fb950;--color-scale-green-4: #2ea043;--color-scale-green-5: #238636;--color-scale-green-6: #196c2e;--color-scale-green-7: #0f5323;--color-scale-green-8: #033a16;--color-scale-green-9: #04260f;--color-scale-yellow-0: #f8e3a1;--color-scale-yellow-1: #f2cc60;--color-scale-yellow-2: #e3b341;--color-scale-yellow-3: #d29922;--color-scale-yellow-4: #bb8009;--color-scale-yellow-5: #9e6a03;--color-scale-yellow-6: #845306;--color-scale-yellow-7: #693e00;--color-scale-yellow-8: #4b2900;--color-scale-yellow-9: #341a00;--color-scale-orange-0: #ffdfb6;--color-scale-orange-1: #ffc680;--color-scale-orange-2: #ffa657;--color-scale-orange-3: #f0883e;--color-scale-orange-4: #db6d28;--color-scale-orange-5: #bd561d;--color-scale-orange-6: #9b4215;--color-scale-orange-7: #762d0a;--color-scale-orange-8: #5a1e02;--color-scale-orange-9: #3d1300;--color-scale-red-0: #ffdcd7;--color-scale-red-1: #ffc1ba;--color-scale-red-2: #ffa198;--color-scale-red-3: #ff7b72;--color-scale-red-4: #f85149;--color-scale-red-5: #da3633;--color-scale-red-6: #b62324;--color-scale-red-7: #8e1519;--color-scale-red-8: #67060c;--color-scale-red-9: #490202;--color-scale-purple-0: #eddeff;--color-scale-purple-1: #e2c5ff;--color-scale-purple-2: #d2a8ff;--color-scale-purple-3: #bc8cff;--color-scale-purple-4: #a371f7;--color-scale-purple-5: #8957e5;--color-scale-purple-6: #6e40c9;--color-scale-purple-7: #553098;--color-scale-purple-8: #3c1e70;--color-scale-purple-9: #271052;--color-scale-pink-0: #ffdaec;--color-scale-pink-1: #ffbedd;--color-scale-pink-2: #ff9bce;--color-scale-pink-3: #f778ba;--color-scale-pink-4: #db61a2;--color-scale-pink-5: #bf4b8a;--color-scale-pink-6: #9e3670;--color-scale-pink-7: #7d2457;--color-scale-pink-8: #5e103e;--color-scale-pink-9: #42062a;--color-scale-coral-0: #ffddd2;--color-scale-coral-1: #ffc2b2;--color-scale-coral-2: #ffa28b;--color-scale-coral-3: #f78166;--color-scale-coral-4: #ea6045;--color-scale-coral-5: #cf462d;--color-scale-coral-6: #ac3220;--color-scale-coral-7: #872012;--color-scale-coral-8: #640d04;--color-scale-coral-9: #460701}} + +/*# sourceMappingURL=dark-d952dd74d22b.css.map*/ \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/759003FBB36676F600DBD71783B7F3C81A7EE014 b/home/.surf/cache/WebKitCache/Version 16/Blobs/759003FBB36676F600DBD71783B7F3C81A7EE014 new file mode 100644 index 0000000..fda1665 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/759003FBB36676F600DBD71783B7F3C81A7EE014 @@ -0,0 +1 @@ + diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/76FAD82A5945503F51D2C0F6A2A96C8E8E59E119 b/home/.surf/cache/WebKitCache/Version 16/Blobs/76FAD82A5945503F51D2C0F6A2A96C8E8E59E119 new file mode 100644 index 0000000..51d6672 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/76FAD82A5945503F51D2C0F6A2A96C8E8E59E119 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/7898EB39851C06422520DD92FE63A4A5D54887BA b/home/.surf/cache/WebKitCache/Version 16/Blobs/7898EB39851C06422520DD92FE63A4A5D54887BA new file mode 100644 index 0000000..84cf8bd Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/7898EB39851C06422520DD92FE63A4A5D54887BA differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/78ADD43D2C613223CC83305AF4B9868B6DEA7770 b/home/.surf/cache/WebKitCache/Version 16/Blobs/78ADD43D2C613223CC83305AF4B9868B6DEA7770 new file mode 100644 index 0000000..5dc2ae5 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/78ADD43D2C613223CC83305AF4B9868B6DEA7770 @@ -0,0 +1,415 @@ +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"
              ","
              "],col:[2,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("
              \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/88CD2FCE6A82A735DF7AAEE52DF815116D47E3F6 b/home/.surf/cache/WebKitCache/Version 16/Blobs/88CD2FCE6A82A735DF7AAEE52DF815116D47E3F6 new file mode 100644 index 0000000..db251f6 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/88CD2FCE6A82A735DF7AAEE52DF815116D47E3F6 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/890967056220034286A13D0B442434A7ADB1106F b/home/.surf/cache/WebKitCache/Version 16/Blobs/890967056220034286A13D0B442434A7ADB1106F new file mode 100644 index 0000000..2d77814 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/890967056220034286A13D0B442434A7ADB1106F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/8BCBB087AD9ED8C7DFE134151171B6F35B36C6F9 b/home/.surf/cache/WebKitCache/Version 16/Blobs/8BCBB087AD9ED8C7DFE134151171B6F35B36C6F9 new file mode 100644 index 0000000..1299671 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/8BCBB087AD9ED8C7DFE134151171B6F35B36C6F9 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/8C11C55B2649DC94DEE33AFC158702E8949B1DFA b/home/.surf/cache/WebKitCache/Version 16/Blobs/8C11C55B2649DC94DEE33AFC158702E8949B1DFA new file mode 100644 index 0000000..47bb4ba --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/8C11C55B2649DC94DEE33AFC158702E8949B1DFA @@ -0,0 +1,17730 @@ +/* Bundle Includes: + * js/vendor/jquery-ui.js + * js/vendor/jquery-ui-touch.js + * js/vendor/jquery.mousewheel.js + * js/scrolling.utils.js + * js/jquery.misc.js + * js/vendor/megaLogger.js + * js/vendor/jquery.fullscreen.js + * js/jquery-ui.extra.js + * js/utils/polyfills.js + * js/utils/browser.js + * js/utils/clipboard.js + * js/utils/conv.js + * js/utils/crypt.js + * js/utils/csp.js + */ + +/*! jQuery UI - v1.12.1 - 2016-10-28 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, form-reset-mixin.js, keycode.js, labels.js, scroll-parent.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/autocomplete.js, widgets/datepicker.js, widgets/menu.js, widgets/mouse.js, widgets/selectmenu.js, widgets/slider.js, effect.js, effects/effect-fade.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define([ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}(function( $ ) { + +$.ui = $.ui || {}; + +var version = $.ui.version = "1.12.1"; + + +/*! + * jQuery UI Widget 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Widget +//>>group: Core +//>>description: Provides a factory for creating stateful widgets with a common API. +//>>docs: http://api.jqueryui.com/jQuery.widget/ +//>>demos: http://jqueryui.com/widget/ + + + +var widgetUuid = 0; +var widgetSlice = Array.prototype.slice; + +$.cleanData = ( function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // Http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} + } + orig( elems ); + }; +} )( $.cleanData ); + +$.widget = function( name, base, prototype ) { + var existingConstructor, constructor, basePrototype; + + // ProxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + var proxiedPrototype = {}; + + var namespace = name.split( "." )[ 0 ]; + name = name.split( "." )[ 1 ]; + var fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + if ( $.isArray( prototype ) ) { + prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); + } + + // Create selector for plugin + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + + // Allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // Allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + // Extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + + // Copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + + // Track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + } ); + + basePrototype = new base(); + + // We need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( !$.isFunction( value ) ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = ( function() { + function _super() { + return base.prototype[ prop ].apply( this, arguments ); + } + + function _superApply( args ) { + return base.prototype[ prop ].apply( this, args ); + } + + return function() { + var __super = this._super; + var __superApply = this._superApply; + var returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + } )(); + } ); + constructor.prototype = $.widget.extend( basePrototype, { + + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + } ); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // Redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, + child._proto ); + } ); + + // Remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); + + return constructor; +}; + +$.widget.extend = function( target ) { + var input = widgetSlice.call( arguments, 1 ); + var inputIndex = 0; + var inputLength = input.length; + var key; + var value; + + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + + // Copy everything else by reference + } else { + target[ key ] = value; + } + } + } + } + return target; +}; + +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string"; + var args = widgetSlice.call( arguments, 1 ); + var returnValue = this; + + if ( isMethodCall ) { + + // If this is an empty collection, we need to have the instance method + // return undefined instead of the jQuery instance + if ( !this.length && options === "instance" ) { + returnValue = undefined; + } else { + this.each( function() { + var methodValue; + var instance = $.data( this, fullName ); + + if ( options === "instance" ) { + returnValue = instance; + return false; + } + + if ( !instance ) { + return $.error( "cannot call methods on " + name + + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + + if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + + " widget instance" ); + } + + methodValue = instance[ options ].apply( instance, args ); + + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + } ); + } + } else { + + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat( args ) ); + } + + this.each( function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } + } else { + $.data( this, fullName, new object( options, this ) ); + } + } ); + } + + return returnValue; + }; +}; + +$.Widget = function( /* options, element */ ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
              ", + + options: { + classes: {}, + disabled: false, + + // Callbacks + create: null + }, + + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = widgetUuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + this.classesElementLookup = {}; + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + } ); + this.document = $( element.style ? + + // Element within the document + element.ownerDocument : + + // Element is window or document + element.document || element ); + this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow ); + } + + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this._create(); + + if ( this.options.disabled ) { + this._setOptionDisabled( this.options.disabled ); + } + + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + + _getCreateOptions: function() { + return {}; + }, + + _getCreateEventData: $.noop, + + _create: $.noop, + + _init: $.noop, + + destroy: function() { + var that = this; + + this._destroy(); + $.each( this.classesElementLookup, function( key, value ) { + that._removeClass( value, key ); + } ); + + // We can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .off( this.eventNamespace ) + .removeData( this.widgetFullName ); + this.widget() + .off( this.eventNamespace ) + .removeAttr( "aria-disabled" ); + + // Clean up events and states + this.bindings.off( this.eventNamespace ); + }, + + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + var parts; + var curOption; + var i; + + if ( arguments.length === 0 ) { + + // Don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + + // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + + _setOption: function( key, value ) { + if ( key === "classes" ) { + this._setOptionClasses( value ); + } + + this.options[ key ] = value; + + if ( key === "disabled" ) { + this._setOptionDisabled( value ); + } + + return this; + }, + + _setOptionClasses: function( value ) { + var classKey, elements, currentElements; + + for ( classKey in value ) { + currentElements = this.classesElementLookup[ classKey ]; + if ( value[ classKey ] === this.options.classes[ classKey ] || + !currentElements || + !currentElements.length ) { + continue; + } + + // We are doing this to create a new jQuery object because the _removeClass() call + // on the next line is going to destroy the reference to the current elements being + // tracked. We need to save a copy of this collection so that we can add the new classes + // below. + elements = $( currentElements.get() ); + this._removeClass( currentElements, classKey ); + + // We don't use _addClass() here, because that uses this.options.classes + // for generating the string of classes. We want to use the value passed in from + // _setOption(), this is the new value of the classes option which was passed to + // _setOption(). We pass this value directly to _classes(). + elements.addClass( this._classes( { + element: elements, + keys: classKey, + classes: value, + add: true + } ) ); + } + }, + + _setOptionDisabled: function( value ) { + this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this._removeClass( this.hoverable, null, "ui-state-hover" ); + this._removeClass( this.focusable, null, "ui-state-focus" ); + } + }, + + enable: function() { + return this._setOptions( { disabled: false } ); + }, + + disable: function() { + return this._setOptions( { disabled: true } ); + }, + + _classes: function( options ) { + var full = []; + var that = this; + + options = $.extend( { + element: this.element, + classes: this.options.classes || {} + }, options ); + + function processClassString( classes, checkOption ) { + var current, i; + for ( i = 0; i < classes.length; i++ ) { + current = that.classesElementLookup[ classes[ i ] ] || $(); + if ( options.add ) { + current = $( $.unique( current.get().concat( options.element.get() ) ) ); + } else { + current = $( current.not( options.element ).get() ); + } + that.classesElementLookup[ classes[ i ] ] = current; + full.push( classes[ i ] ); + if ( checkOption && options.classes[ classes[ i ] ] ) { + full.push( options.classes[ classes[ i ] ] ); + } + } + } + + this._on( options.element, { + "remove": "_untrackClassesElement" + } ); + + if ( options.keys ) { + processClassString( options.keys.match( /\S+/g ) || [], true ); + } + if ( options.extra ) { + processClassString( options.extra.match( /\S+/g ) || [] ); + } + + return full.join( " " ); + }, + + _untrackClassesElement: function( event ) { + var that = this; + $.each( that.classesElementLookup, function( key, value ) { + if ( $.inArray( event.target, value ) !== -1 ) { + that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); + } + } ); + }, + + _removeClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, false ); + }, + + _addClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, true ); + }, + + _toggleClass: function( element, keys, extra, add ) { + add = ( typeof add === "boolean" ) ? add : extra; + var shift = ( typeof element === "string" || element === null ), + options = { + extra: shift ? keys : extra, + keys: shift ? element : keys, + element: shift ? this.element : element, + add: add + }; + options.element.toggleClass( this._classes( options ), add ); + return this; + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement; + var instance = this; + + // No suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // No element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); + } + + $.each( handlers, function( event, handler ) { + function handlerProxy() { + + // Allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // Copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^([\w:-]*)\s*(.*)$/ ); + var eventName = match[ 1 ] + instance.eventNamespace; + var selector = match[ 2 ]; + + if ( selector ) { + delegateElement.on( eventName, selector, handlerProxy ); + } else { + element.on( eventName, handlerProxy ); + } + } ); + }, + + _off: function( element, eventName ) { + eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.off( eventName ).off( eventName ); + + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); + }, + mouseleave: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); + } + } ); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); + }, + focusout: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); + } + } ); + }, + + _trigger: function( type, event, data ) { + var prop, orig; + var callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + + // The original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // Copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( $.isFunction( callback ) && + callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; + +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + + var hasOptions; + var effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } + + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + + if ( options.delay ) { + element.delay( options.delay ); + } + + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue( function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + } ); + } + }; +} ); + +var widget = $.widget; + + +/*! + * jQuery UI Position 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/position/ + */ + +//>>label: Position +//>>group: Core +//>>description: Positions elements relative to other elements. +//>>docs: http://api.jqueryui.com/position/ +//>>demos: http://jqueryui.com/position/ + + +( function() { +var cachedScrollbarWidth, + max = Math.max, + abs = Math.abs, + rhorizontal = /left|center|right/, + rvertical = /top|center|bottom/, + roffset = /[\+\-]\d+(\.[\d]+)?%?/, + rposition = /^\w+/, + rpercent = /%$/, + _position = $.fn.position; + +function getOffsets( offsets, width, height ) { + return [ + parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), + parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) + ]; +} + +function parseCss( element, property ) { + return parseInt( $.css( element, property ), 10 ) || 0; +} + +function getDimensions( elem ) { + var raw = elem[ 0 ]; + if ( raw.nodeType === 9 ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: 0, left: 0 } + }; + } + if ( $.isWindow( raw ) ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: elem.scrollTop(), left: elem.scrollLeft() } + }; + } + if ( raw.preventDefault ) { + return { + width: 0, + height: 0, + offset: { top: raw.pageY, left: raw.pageX } + }; + } + return { + width: elem.outerWidth(), + height: elem.outerHeight(), + offset: elem.offset() + }; +} + +$.position = { + scrollbarWidth: function() { + if ( cachedScrollbarWidth !== undefined ) { + return cachedScrollbarWidth; + } + var w1, w2, + div = $( "
              " + + "
              " ), + innerDiv = div.children()[ 0 ]; + + $( "body" ).append( div ); + w1 = innerDiv.offsetWidth; + div.css( "overflow", "scroll" ); + + w2 = innerDiv.offsetWidth; + + if ( w1 === w2 ) { + w2 = div[ 0 ].clientWidth; + } + + div.remove(); + + return ( cachedScrollbarWidth = w1 - w2 ); + }, + getScrollInfo: function( within ) { + var overflowX = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-x" ), + overflowY = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-y" ), + hasOverflowX = overflowX === "scroll" || + ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ), + hasOverflowY = overflowY === "scroll" || + ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight ); + return { + width: hasOverflowY ? $.position.scrollbarWidth() : 0, + height: hasOverflowX ? $.position.scrollbarWidth() : 0 + }; + }, + getWithinInfo: function( element ) { + var withinElement = $( element || window ), + isWindow = $.isWindow( withinElement[ 0 ] ), + isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, + hasOffset = !isWindow && !isDocument; + return { + element: withinElement, + isWindow: isWindow, + isDocument: isDocument, + offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, + scrollLeft: withinElement.scrollLeft(), + scrollTop: withinElement.scrollTop(), + width: withinElement.outerWidth(), + height: withinElement.outerHeight() + }; + } +}; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // Make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, + target = $( options.of ), + within = $.position.getWithinInfo( options.within ), + scrollInfo = $.position.getScrollInfo( within ), + collision = ( options.collision || "flip" ).split( " " ), + offsets = {}; + + dimensions = getDimensions( target ); + if ( target[ 0 ].preventDefault ) { + + // Force left top to allow flipping + options.at = "left top"; + } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + + // Clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); + + // Force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[ this ] || "" ).split( " " ), + horizontalOffset, + verticalOffset; + + if ( pos.length === 1 ) { + pos = rhorizontal.test( pos[ 0 ] ) ? + pos.concat( [ "center" ] ) : + rvertical.test( pos[ 0 ] ) ? + [ "center" ].concat( pos ) : + [ "center", "center" ]; + } + pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; + pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; + + // Calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // Reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + } ); + + // Normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + if ( options.at[ 0 ] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[ 0 ] === "center" ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[ 1 ] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[ 1 ] === "center" ) { + basePosition.top += targetHeight / 2; + } + + atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); + basePosition.left += atOffset[ 0 ]; + basePosition.top += atOffset[ 1 ]; + + return this.each( function() { + var collisionPosition, using, + elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseCss( this, "marginLeft" ), + marginTop = parseCss( this, "marginTop" ), + collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + + scrollInfo.width, + collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + + scrollInfo.height, + position = $.extend( {}, basePosition ), + myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); + + if ( options.my[ 0 ] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[ 0 ] === "center" ) { + position.left -= elemWidth / 2; + } + + if ( options.my[ 1 ] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[ 1 ] === "center" ) { + position.top -= elemHeight / 2; + } + + position.left += myOffset[ 0 ]; + position.top += myOffset[ 1 ]; + + collisionPosition = { + marginLeft: marginLeft, + marginTop: marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[ i ] ] ) { + $.ui.position[ collision[ i ] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], + my: options.my, + at: options.at, + within: within, + elem: elem + } ); + } + } ); + + if ( options.using ) { + + // Adds feedback as second argument to using callback, if present + using = function( props ) { + var left = targetOffset.left - position.left, + right = left + targetWidth - elemWidth, + top = targetOffset.top - position.top, + bottom = top + targetHeight - elemHeight, + feedback = { + target: { + element: target, + left: targetOffset.left, + top: targetOffset.top, + width: targetWidth, + height: targetHeight + }, + element: { + element: elem, + left: position.left, + top: position.top, + width: elemWidth, + height: elemHeight + }, + horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", + vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" + }; + if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { + feedback.horizontal = "center"; + } + if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { + feedback.vertical = "middle"; + } + if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { + feedback.important = "horizontal"; + } else { + feedback.important = "vertical"; + } + options.using.call( this, props, feedback ); + }; + } + + elem.offset( $.extend( position, { using: using } ) ); + } ); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, + outerWidth = within.width, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = withinOffset - collisionPosLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, + newOverRight; + + // Element is wider than within + if ( data.collisionWidth > outerWidth ) { + + // Element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - + withinOffset; + position.left += overLeft - newOverRight; + + // Element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + + // Element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + + // Too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + + // Too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + + // Adjust based on position and margin + } else { + position.left = max( position.left - collisionPosLeft, position.left ); + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollTop : within.offset.top, + outerHeight = data.within.height, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = withinOffset - collisionPosTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, + newOverBottom; + + // Element is taller than within + if ( data.collisionHeight > outerHeight ) { + + // Element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - + withinOffset; + position.top += overTop - newOverBottom; + + // Element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + + // Element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + + // Too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + + // Too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + + // Adjust based on position and margin + } else { + position.top = max( position.top - collisionPosTop, position.top ); + } + } + }, + flip: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.offset.left + within.scrollLeft, + outerWidth = within.width, + offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = collisionPosLeft - offsetLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + data.at[ 0 ] === "right" ? + -data.targetWidth : + 0, + offset = -2 * data.offset[ 0 ], + newOverRight, + newOverLeft; + + if ( overLeft < 0 ) { + newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - + outerWidth - withinOffset; + if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { + position.left += myOffset + atOffset + offset; + } + } else if ( overRight > 0 ) { + newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + + atOffset + offset - offsetLeft; + if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { + position.left += myOffset + atOffset + offset; + } + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.offset.top + within.scrollTop, + outerHeight = within.height, + offsetTop = within.isWindow ? within.scrollTop : within.offset.top, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = collisionPosTop - offsetTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, + top = data.my[ 1 ] === "top", + myOffset = top ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + data.at[ 1 ] === "bottom" ? + -data.targetHeight : + 0, + offset = -2 * data.offset[ 1 ], + newOverTop, + newOverBottom; + if ( overTop < 0 ) { + newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - + outerHeight - withinOffset; + if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { + position.top += myOffset + atOffset + offset; + } + } else if ( overBottom > 0 ) { + newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + + offset - offsetTop; + if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { + position.top += myOffset + atOffset + offset; + } + } + } + }, + flipfit: { + left: function() { + $.ui.position.flip.left.apply( this, arguments ); + $.ui.position.fit.left.apply( this, arguments ); + }, + top: function() { + $.ui.position.flip.top.apply( this, arguments ); + $.ui.position.fit.top.apply( this, arguments ); + } + } +}; + +} )(); + +var position = $.ui.position; + + +/*! + * jQuery UI :data 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: :data Selector +//>>group: Core +//>>description: Selects elements which have data stored under the specified key. +//>>docs: http://api.jqueryui.com/data-selector/ + + +var data = $.extend( $.expr[ ":" ], { + data: $.expr.createPseudo ? + $.expr.createPseudo( function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + } ) : + + // Support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + } +} ); + +/*! + * jQuery UI Disable Selection 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: disableSelection +//>>group: Core +//>>description: Disable selection of text content within the set of matched elements. +//>>docs: http://api.jqueryui.com/disableSelection/ + +// This file is deprecated + + +var disableSelection = $.fn.extend( { + disableSelection: ( function() { + var eventType = "onselectstart" in document.createElement( "div" ) ? + "selectstart" : + "mousedown"; + + return function() { + return this.on( eventType + ".ui-disableSelection", function( event ) { + event.preventDefault(); + } ); + }; + } )(), + + enableSelection: function() { + return this.off( ".ui-disableSelection" ); + } +} ); + + + + +// Support: IE8 Only +// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop +// with a string, so we need to find the proper form. +var form = $.fn.form = function() { + return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form ); +}; + + +/*! + * jQuery UI Form Reset Mixin 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Form Reset Mixin +//>>group: Core +//>>description: Refresh input widgets when their form is reset +//>>docs: http://api.jqueryui.com/form-reset-mixin/ + + + +var formResetMixin = $.ui.formResetMixin = { + _formResetHandler: function() { + var form = $( this ); + + // Wait for the form reset to actually happen before refreshing + setTimeout( function() { + var instances = form.data( "ui-form-reset-instances" ); + $.each( instances, function() { + this.refresh(); + } ); + } ); + }, + + _bindFormResetHandler: function() { + this.form = this.element.form(); + if ( !this.form.length ) { + return; + } + + var instances = this.form.data( "ui-form-reset-instances" ) || []; + if ( !instances.length ) { + + // We don't use _on() here because we use a single event handler per form + this.form.on( "reset.ui-form-reset", this._formResetHandler ); + } + instances.push( this ); + this.form.data( "ui-form-reset-instances", instances ); + }, + + _unbindFormResetHandler: function() { + if ( !this.form.length ) { + return; + } + + var instances = this.form.data( "ui-form-reset-instances" ); + instances.splice( $.inArray( this, instances ), 1 ); + if ( instances.length ) { + this.form.data( "ui-form-reset-instances", instances ); + } else { + this.form + .removeData( "ui-form-reset-instances" ) + .off( "reset.ui-form-reset" ); + } + } +}; + + +/*! + * jQuery UI Keycode 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Keycode +//>>group: Core +//>>description: Provide keycodes as keynames +//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ + + +var keycode = $.ui.keyCode = { + BACKSPACE: 8, + COMMA: 188, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + LEFT: 37, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SPACE: 32, + TAB: 9, + UP: 38 +}; + + + + +// Internal use only +var escapeSelector = $.ui.escapeSelector = ( function() { + var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g; + return function( selector ) { + return selector.replace( selectorEscape, "\\$1" ); + }; +} )(); + + +/*! + * jQuery UI Labels 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: labels +//>>group: Core +//>>description: Find all the labels associated with a given input +//>>docs: http://api.jqueryui.com/labels/ + + + +var labels = $.fn.labels = function() { + var ancestor, selector, id, labels, ancestors; + + // Check control.labels first + if ( this[ 0 ].labels && this[ 0 ].labels.length ) { + return this.pushStack( this[ 0 ].labels ); + } + + // Support: IE <= 11, FF <= 37, Android <= 2.3 only + // Above browsers do not support control.labels. Everything below is to support them + // as well as document fragments. control.labels does not work on document fragments + labels = this.eq( 0 ).parents( "label" ); + + // Look for the label based on the id + id = this.attr( "id" ); + if ( id ) { + + // We don't search against the document in case the element + // is disconnected from the DOM + ancestor = this.eq( 0 ).parents().last(); + + // Get a full set of top level ancestors + ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() ); + + // Create a selector for the label based on the id + selector = "label[for='" + $.ui.escapeSelector( id ) + "']"; + + labels = labels.add( ancestors.find( selector ).addBack( selector ) ); + + } + + // Return whatever we have found for labels + return this.pushStack( labels ); +}; + + +/*! + * jQuery UI Scroll Parent 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: scrollParent +//>>group: Core +//>>description: Get the closest ancestor element that is scrollable. +//>>docs: http://api.jqueryui.com/scrollParent/ + + + +var scrollParent = $.fn.scrollParent = function( includeHidden ) { + var position = this.css( "position" ), + excludeStaticParent = position === "absolute", + overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, + scrollParent = this.parents().filter( function() { + var parent = $( this ); + if ( excludeStaticParent && parent.css( "position" ) === "static" ) { + return false; + } + return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + + parent.css( "overflow-x" ) ); + } ).eq( 0 ); + + return position === "fixed" || !scrollParent.length ? + $( this[ 0 ].ownerDocument || document ) : + scrollParent; +}; + + +/*! + * jQuery UI Unique ID 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: uniqueId +//>>group: Core +//>>description: Functions to generate and remove uniqueId's +//>>docs: http://api.jqueryui.com/uniqueId/ + + + +var uniqueId = $.fn.extend( { + uniqueId: ( function() { + var uuid = 0; + + return function() { + return this.each( function() { + if ( !this.id ) { + this.id = "ui-id-" + ( ++uuid ); + } + } ); + }; + } )(), + + removeUniqueId: function() { + return this.each( function() { + if ( /^ui-id-\d+$/.test( this.id ) ) { + $( this ).removeAttr( "id" ); + } + } ); + } +} ); + + + + +// This file is deprecated +var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); + +/*! + * jQuery UI Mouse 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Mouse +//>>group: Widgets +//>>description: Abstracts mouse-based interactions to assist in creating certain widgets. +//>>docs: http://api.jqueryui.com/mouse/ + + + +var mouseHandled = false; +$( document ).on( "mouseup", function() { + mouseHandled = false; +} ); + +var widgetsMouse = $.widget( "ui.mouse", { + version: "1.12.1", + options: { + cancel: "input, textarea, button, select, option", + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var that = this; + + this.element + .on( "mousedown." + this.widgetName, function( event ) { + return that._mouseDown( event ); + } ) + .on( "click." + this.widgetName, function( event ) { + if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) { + $.removeData( event.target, that.widgetName + ".preventClickEvent" ); + event.stopImmediatePropagation(); + return false; + } + } ); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.off( "." + this.widgetName ); + if ( this._mouseMoveDelegate ) { + this.document + .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); + } + }, + + _mouseDown: function( event ) { + + // don't let more than one widget handle mouseStart + if ( mouseHandled ) { + return; + } + + this._mouseMoved = false; + + // We may have missed mouseup (out of window) + ( this._mouseStarted && this._mouseUp( event ) ); + + this._mouseDownEvent = event; + + var that = this, + btnIsLeft = ( event.which === 1 ), + + // event.target.nodeName works around a bug in IE 8 with + // disabled inputs (#7620) + elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ? + $( event.target ).closest( this.options.cancel ).length : false ); + if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if ( !this.mouseDelayMet ) { + this._mouseDelayTimer = setTimeout( function() { + that.mouseDelayMet = true; + }, this.options.delay ); + } + + if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { + this._mouseStarted = ( this._mouseStart( event ) !== false ); + if ( !this._mouseStarted ) { + event.preventDefault(); + return true; + } + } + + // Click event may never have fired (Gecko & Opera) + if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) { + $.removeData( event.target, this.widgetName + ".preventClickEvent" ); + } + + // These delegates are required to keep context + this._mouseMoveDelegate = function( event ) { + return that._mouseMove( event ); + }; + this._mouseUpDelegate = function( event ) { + return that._mouseUp( event ); + }; + + this.document + .on( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .on( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + event.preventDefault(); + + mouseHandled = true; + return true; + }, + + _mouseMove: function( event ) { + + // Only check for mouseups outside the document if you've moved inside the document + // at least once. This prevents the firing of mouseup in the case of IE<9, which will + // fire a mousemove event if content is placed under the cursor. See #7778 + // Support: IE <9 + if ( this._mouseMoved ) { + + // IE mouseup check - mouseup happened when mouse was out of window + if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && + !event.button ) { + return this._mouseUp( event ); + + // Iframe mouseup check - mouseup occurred in another document + } else if ( !event.which ) { + + // Support: Safari <=8 - 9 + // Safari sets which to 0 if you press any of the following keys + // during a drag (#14461) + if ( event.originalEvent.altKey || event.originalEvent.ctrlKey || + event.originalEvent.metaKey || event.originalEvent.shiftKey ) { + this.ignoreMissingWhich = true; + } else if ( !this.ignoreMissingWhich ) { + return this._mouseUp( event ); + } + } + } + + if ( event.which || event.button ) { + this._mouseMoved = true; + } + + if ( this._mouseStarted ) { + this._mouseDrag( event ); + return event.preventDefault(); + } + + if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { + this._mouseStarted = + ( this._mouseStart( this._mouseDownEvent, event ) !== false ); + ( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) ); + } + + return !this._mouseStarted; + }, + + _mouseUp: function( event ) { + this.document + .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + if ( this._mouseStarted ) { + this._mouseStarted = false; + + if ( event.target === this._mouseDownEvent.target ) { + $.data( event.target, this.widgetName + ".preventClickEvent", true ); + } + + this._mouseStop( event ); + } + + if ( this._mouseDelayTimer ) { + clearTimeout( this._mouseDelayTimer ); + delete this._mouseDelayTimer; + } + + this.ignoreMissingWhich = false; + mouseHandled = false; + event.preventDefault(); + }, + + _mouseDistanceMet: function( event ) { + return ( Math.max( + Math.abs( this._mouseDownEvent.pageX - event.pageX ), + Math.abs( this._mouseDownEvent.pageY - event.pageY ) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function( /* event */ ) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function( /* event */ ) {}, + _mouseDrag: function( /* event */ ) {}, + _mouseStop: function( /* event */ ) {}, + _mouseCapture: function( /* event */ ) { return true; } +} ); + + + + +// $.ui.plugin is deprecated. Use $.widget() extensions instead. +var plugin = $.ui.plugin = { + add: function( module, option, set ) { + var i, + proto = $.ui[ module ].prototype; + for ( i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args, allowDisconnected ) { + var i, + set = instance.plugins[ name ]; + + if ( !set ) { + return; + } + + if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || + instance.element[ 0 ].parentNode.nodeType === 11 ) ) { + return; + } + + for ( i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } + } +}; + + + +var safeActiveElement = $.ui.safeActiveElement = function( document ) { + var activeElement; + + // Support: IE 9 only + // IE9 throws an "Unspecified error" accessing document.activeElement from an ');};$(document).on('click','.accept-risk',function(){renderVideo($(this).data("id"));});$(document).on('click','#episode-options li a',function(e){e.preventDefault();$('#episode-options li a').tooltip('hide');$('#episode-options li a').removeClass('active');$(this).addClass('active');var currentId=$(this).data('id');var video=videos[currentId];if(video[3]){$('#video-container').html('
              '+ +'
              '+ +'

              Esta opción contiene publicidad y ventanas emergentes ajenas a nuestro sitio web

              '+ +'

              '+ +'
              '+ +'
              ');}else{renderVideo(currentId);} +return false;});$('#episodes-order').click(function(e){e.preventDefault();episodes.reverse();episodes_details.reverse();episodesList();});episodesList=function(){$('.episodes-list').empty();for(var x in episodes){$('.episodes-list').append('
            • '+
+anime_info[2]+
+'

              '+ +anime_info[2]+ +' Episodio '+ +episodes[x]+ +'

              '+ +episodes_details[x]+ +'
            • ');}};$('#reset').click(function(e){e.preventDefault();window.location.href='/directorio';});}); \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/97169D71DA127D79A1C895619121D0E370497204 b/home/.surf/cache/WebKitCache/Version 16/Blobs/97169D71DA127D79A1C895619121D0E370497204 new file mode 100644 index 0000000..0d07bb0 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/97169D71DA127D79A1C895619121D0E370497204 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/973F5E8F660C2DEF56BA66E267D39F662BF2EDFD b/home/.surf/cache/WebKitCache/Version 16/Blobs/973F5E8F660C2DEF56BA66E267D39F662BF2EDFD new file mode 100644 index 0000000..dae9631 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/973F5E8F660C2DEF56BA66E267D39F662BF2EDFD differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/98B63ACC7BE1F69D9657EFE022B874413A93B987 b/home/.surf/cache/WebKitCache/Version 16/Blobs/98B63ACC7BE1F69D9657EFE022B874413A93B987 new file mode 100644 index 0000000..ef390c9 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/98B63ACC7BE1F69D9657EFE022B874413A93B987 @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["repositories","app_assets_modules_github_soft-nav_navigate_ts"],{54679(a,b,c){c.d(b,{H:()=>f,v:()=>e});var d=c(59753);function e(){let a=document.getElementById("ajax-error-message");a&&(a.hidden=!1)}function f(){let a=document.getElementById("ajax-error-message");a&&(a.hidden=!0)}(0,d.on)("deprecatedAjaxError","[data-remote]",function(a){let b=a.detail,{error:c,text:d}=b;a.currentTarget===a.target&&"abort"!==c&&"canceled"!==c&&(/e,YE:()=>f,Zf:()=>g});var d=c(11793);let e=()=>{let a=document.querySelector("meta[name=keyboard-shortcuts-preference]");return!a||"all"===a.content},f=a=>/Enter|Arrow|Escape|Meta|Control|Esc/.test(a)||a.includes("Alt")&&a.includes("Shift"),g=a=>{let b=(0,d.EL)(a);return!!e()||f(b)}},98249(a,b,c){c.d(b,{D:()=>g,a:()=>f});var d=c(2825),e=c(75662);async function f(a,b,c){let f=new Request(b,c);f.headers.append("X-Requested-With","XMLHttpRequest");let g=await self.fetch(f);if(g.status<200||g.status>=300)throw Error(`HTTP ${g.status}${g.statusText||""}`);return(0,d.t)((0,d.P)(a),g),(0,e.r)(a,await g.text())}function g(a,b,c=1e3,d=[200]){return async function c(e){let f=new Request(a,b);f.headers.append("X-Requested-With","XMLHttpRequest");let g=await self.fetch(f);if(202===g.status)return await new Promise(a=>setTimeout(a,e)),c(1.5*e);if(d.includes(g.status))return g;if(g.status<200||g.status>=300)throw Error(`HTTP ${g.status}${g.statusText||""}`);throw Error(`Unexpected ${g.status} response status from poll endpoint`)}(c)}},54650(a,b,c){c.d(b,{Bt:()=>h,DN:()=>k,KL:()=>n,Se:()=>j,qC:()=>o,sw:()=>l});var d=c(59753),e=c(76177),f=c(54679);function g(a,b,c){return a.dispatchEvent(new CustomEvent(b,{bubbles:!0,cancelable:c}))}function h(a,b){b&&(i(a,b),(0,e.j)(b)),g(a,"submit",!0)&&a.submit()}function i(a,b){if(!(a instanceof HTMLFormElement))throw TypeError("The specified element is not of type HTMLFormElement.");if(!(b instanceof HTMLElement))throw TypeError("The specified element is not of type HTMLElement.");if("submit"!==b.type)throw TypeError("The specified element is not a submit button.");if(!a||a!==b.form)throw Error("The specified element is not owned by the form element.")}function j(a,b){if("boolean"==typeof b){if(a instanceof HTMLInputElement)a.checked=b;else throw TypeError("only checkboxes can be set to boolean value")}else{if("checkbox"===a.type)throw TypeError("checkbox can't be set to string value");a.value=b}g(a,"change",!1)}function k(a,b){for(let c in b){let d=b[c],e=a.elements.namedItem(c);e instanceof HTMLInputElement?e.value=d:e instanceof HTMLTextAreaElement&&(e.value=d)}}function l(a){if(!(a instanceof HTMLElement))return!1;let b=a.nodeName.toLowerCase(),c=(a.getAttribute("type")||"").toLowerCase();return"select"===b||"textarea"===b||"input"===b&&"submit"!==c&&"reset"!==c||a.isContentEditable}function m(a){return new URLSearchParams(a)}function n(a,b){let c=new URLSearchParams(a.search),d=m(b);for(let[e,f]of d)c.append(e,f);return c.toString()}function o(a){return m(new FormData(a)).toString()}(0,d.on)("click",".js-remote-submit-button",async function(a){let b=a.currentTarget,c=b.form;a.preventDefault();let d;try{d=await fetch(c.action,{method:c.method,body:new FormData(c),headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"}})}catch{}d&&!d.ok&&(0,f.v)()})},9302(a,b,c){c.d(b,{IW:()=>j,Mw:()=>o,"_C":()=>n,lO:()=>m,qA:()=>l,y0:()=>g});let d=[],e=0,f;function g(){return f}function h(){try{return Math.min(Math.max(0,history.length)||0,9007199254740991)}catch(a){return 0}}function i(){return h()-1+e}function j(a){f=a;let b=location.href;d[i()]={url:b,state:f},d.length=h(),window.dispatchEvent(new CustomEvent("statechange",{bubbles:!1,cancelable:!1}))}function k(){return new Date().getTime()}function l(a,b,c){e=0;let d={_id:k(),...a};history.pushState(d,b,c),j(d)}function m(a,b,c){let d={...f,...a};history.replaceState(d,b,c),j(d)}function n(){let a=d[i()-1];if(a)return a.url}function o(){let a=d[i()+1];if(a)return a.url}f=function(){let a={_id:new Date().getTime(),...history.state};return j(a),a}(),window.addEventListener("popstate",function(a){let b=a.state;if(!b|| !b._id&&!b.turbo?.restorationIdentifier)return;let c=b.turbo?.restorationIdentifier,f=d[i()-1]?.state?.turbo?.restorationIdentifier;f===c?e--:e++,j(b)},!0);let p;window.addEventListener("turbo:visit",a=>{a instanceof CustomEvent&&(p=a.detail.action)}),window.addEventListener("turbo:load",()=>{"restore"!==p&&(e=0,m(history.state,"",""))}),window.addEventListener("hashchange",function(){if(h()>d.length){let a={_id:k()};history.replaceState(a,"",location.href),j(a)}},!0),window.addEventListener("pageshow",()=>{d=[],e=0})},2825(a,b,c){function d(a){let b=[...a.querySelectorAll("meta[name=html-safe-nonce]")].map(a=>a.content);if(b.length<1)throw Error("could not find html-safe-nonce on document");return b}c.d(b,{P:()=>d,t:()=>f});let e=class ResponseError extends Error{constructor(a,b){super(`${a} for HTTP ${b.status}`),this.response=b}};function f(a,b,c=!1){let d=b.headers.get("content-type")||"";if(!c&&!d.startsWith("text/html"))throw new e(`expected response with text/html, but was ${d}`,b);if(c&&!(d.startsWith("text/html")||d.startsWith("application/json")))throw new e(`expected response with text/html or application/json, but was ${d}`,b);let f=b.headers.get("x-html-safe");if(f){if(!a.includes(f))throw new e("response X-HTML-Safe nonce did not match",b)}else throw new e("missing X-HTML-Safe nonce",b)}},29764(a,b,c){c.d(b,{"$S":()=>e,Fk:()=>f,sz:()=>g});var d=c(60958);function e(a,b,c){let e={hydroEventPayload:a,hydroEventHmac:b,visitorPayload:"",visitorHmac:"",hydroClientContext:c},f=document.querySelector("meta[name=visitor-payload]");f instanceof HTMLMetaElement&&(e.visitorPayload=f.content);let g=document.querySelector("meta[name=visitor-hmac]")||"";g instanceof HTMLMetaElement&&(e.visitorHmac=g.content),(0,d.b)(e,!0)}function f(a){let b=a.getAttribute("data-hydro-view")||"",c=a.getAttribute("data-hydro-view-hmac")||"",d=a.getAttribute("data-hydro-client-context")||"";e(b,c,d)}function g(a){let b=a.getAttribute("data-hydro-click-payload")||"",c=a.getAttribute("data-hydro-click-hmac")||"",d=a.getAttribute("data-hydro-client-context")||"";e(b,c,d)}},55843(a,b,c){var d=c(76006),e=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let f=class InputDemuxElement extends HTMLElement{connectedCallback(){this.control&&(this.storedInput=Array(this.control.children.length).fill("")),this.addEventListener("input",this.relayInput.bind(this)),this.addEventListener("keydown",this.relayKeydown.bind(this));let a=this.closest("details");a&&a.addEventListener("toggle",()=>{a.open&&this.source.focus()})}relayKeydown(a){if((this.isControlTab(a.target)||a.target===this.source)&&("ArrowDown"===a.key||"Tab"===a.key))a.preventDefault(),a.stopPropagation(),this.routeCustomEvent(new CustomEvent("focus-list"));else if("Escape"===a.key){let b=this.closest("details");b&&b.removeAttribute("open")}}isControlTab(a){return!!a&&!!this.control&&Array.from(this.control.children).includes(a)}relayInput(a){if(!a.target)return;let b=a.target,c=b.value;this.routeCustomEvent(new CustomEvent("input-entered",{detail:c}))}routeCustomEvent(a){let b=this.sinks[this.selectedIndex];b.dispatchEvent(a)}get selectedIndex(){if(!this.control)return 0;let a=this.control.querySelector('[aria-selected="true"]');return a?Array.from(this.control.children).indexOf(a):0}storeInput(){this.storedInput[this.selectedIndex]=this.source.value}updateInput(a){this.source.value=this.storedInput[this.selectedIndex];let b=a.detail.relatedTarget.getAttribute("data-filter-placeholder");this.source.placeholder=b,this.source.setAttribute("aria-label",b),this.notifySelected()}notifySelected(){let a=this.sinks[this.selectedIndex],b=new CustomEvent("tab-selected");a.dispatchEvent(b)}};e([d.fA],f.prototype,"source",void 0),e([d.GO],f.prototype,"sinks",void 0),e([d.fA],f.prototype,"control",void 0),f=e([d.Ih],f)},4738(a,b,c){c.d(b,{QZ:()=>v,ZH:()=>B,jK:()=>w,T_:()=>A,Sw:()=>z,VF:()=>y,VH:()=>C});var d=c(76932),e=c(59753),f=c(98105),g=c(11793),h=c(94313),i=c(64463);function j(a,b){let c=a,d=a.ownerDocument;(c===d||c===d.defaultView||c===d.documentElement||c===d.body)&&(c=d);let e=d.defaultView.Document;if(c instanceof e){let f=null!=b.top?b.top:d.defaultView.pageYOffset,g=null!=b.left?b.left:d.defaultView.pageXOffset;d.defaultView.scrollTo(g,f);return}let h=d.defaultView.HTMLElement;if(!(c instanceof h))throw Error("invariant");c.scrollTop=b.top,null!=b.left&&(c.scrollLeft=b.left)}var k=c(97629);let l=navigator.userAgent.match(/Macintosh/),m=l?"metaKey":"ctrlKey",n=l?"Meta":"Control",o=!1,p={x:0,y:0};function q(a){a instanceof MouseEvent&&((p.x!==a.clientX||p.y!==a.clientY)&&(o=!1),p={x:a.clientX,y:a.clientY})}function r(a){if(o)return;let b=a.currentTarget,{target:c}=a;if(!(c instanceof Element)||!(b instanceof HTMLElement)||!b.closest(".js-active-navigation-container"))return;let d=c.closest(".js-navigation-item");d&&I(d,b)}(0,i.N7)(".js-navigation-container:not(.js-navigation-container-no-mouse)",{subscribe:a=>(0,d.qC)((0,d.RB)(a,"mouseover",q),(0,d.RB)(a,"mouseover",r))});let s=0;function t(a){if(a.target!==document.body&&a.target instanceof HTMLElement&&!a.target.classList.contains("js-navigation-enable"))return;o=!0;let b=J(),c=!1;if(b){let d=b.querySelector(".js-navigation-item.navigation-focus")||b;c=(0,e.f)(d,"navigation:keydown",{hotkey:(0,g.EL)(a),originalEvent:a,originalTarget:a.target})}c||a.preventDefault()}function u(a){let b=a.modifierKey||a.altKey||a.ctrlKey||a.metaKey,c=(0,e.f)(a.currentTarget,"navigation:open",{modifierKey:b,shiftKey:a.shiftKey});c||a.preventDefault()}function v(a){let b=J();a!==b&&(null!==b&&w(b),a?.classList.add("js-active-navigation-container"))}function w(a){a.classList.remove("js-active-navigation-container")}(0,i.N7)(".js-active-navigation-container",{add(){1== ++s&&document.addEventListener("keydown",t)},remove(){0== --s&&document.removeEventListener("keydown",t)}}),(0,e.on)("navigation:keydown",".js-active-navigation-container",function(a){let b=a.currentTarget,c=a.detail.originalTarget.matches("input, textarea"),d=a.target;if((0,h.Zf)(a.detail.originalEvent)){if(d.classList.contains("js-navigation-item")){if(c){if(l)switch((0,g.EL)(a.detail.originalEvent)){case"Control+n":E(d,b);break;case"Control+p":D(d,b)}switch((0,g.EL)(a.detail.originalEvent)){case"ArrowUp":D(d,b);break;case"ArrowDown":E(d,b);break;case"Enter":case`${n}+Enter`:H(d,a.detail.originalEvent[m])}}else{if(l)switch((0,g.EL)(a.detail.originalEvent)){case"Control+n":E(d,b);break;case"Control+p":D(d,b);break;case"Alt+v":F(d,b);break;case"Control+v":G(d,b)}switch((0,g.EL)(a.detail.originalEvent)){case"j":case"J":E(d,b);break;case"k":case"K":D(d,b);break;case"o":case"Enter":case`${n}+Enter`:H(d,a.detail[m])}}}else{let e=K(b)[0];if(e){if(c)l&&"Control+n"===(0,g.EL)(a.detail.originalEvent)&&I(e,b),"ArrowDown"===(0,g.EL)(a.detail.originalEvent)&&I(e,b);else{if(l)switch((0,g.EL)(a.detail.originalEvent)){case"Control+n":case"Control+v":I(e,b)}"j"===(0,g.EL)(a.detail.originalEvent)&&I(e,b)}}}if(c){if(l)switch((0,g.EL)(a.detail.originalEvent)){case"Control+n":case"Control+p":a.preventDefault()}switch((0,g.EL)(a.detail.originalEvent)){case"ArrowUp":case"ArrowDown":case"Enter":a.preventDefault()}}else{if(l)switch((0,g.EL)(a.detail.originalEvent)){case"Control+n":case"Control+p":case"Control+v":case"Alt+v":a.preventDefault()}switch((0,g.EL)(a.detail.originalEvent)){case"j":case"k":case"o":case"Enter":case`${m}+Enter`:a.preventDefault()}}}}),(0,e.on)("click",".js-active-navigation-container .js-navigation-item",function(a){u(a)}),(0,e.on)("navigation:keyopen",".js-active-navigation-container .js-navigation-item",function(a){let b=a.currentTarget.classList.contains("js-navigation-open")?a.currentTarget:a.currentTarget.querySelector(".js-navigation-open");if(b instanceof HTMLAnchorElement){if(a.detail.modifierKey)window.open(b.href,"_blank"),window.focus();else{let c=b.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0}));c&&b.click()}a.preventDefault()}else u(a)});let x=[];function y(a){let b=J();b&&x.push(b),v(a)}function z(a){w(a),B(a);let b=x.pop();b&&v(b)}function A(a,b){let c=K(a)[0],d=(b||a).closest(".js-navigation-item")||c;if(v(a),d instanceof HTMLElement){let e=I(d,a);if(e)return;let g=(0,f.VZ)(d);N(g,d)}}function B(a){let b=a.querySelectorAll(".js-navigation-item.navigation-focus");for(let c of b)c.classList.remove("navigation-focus")}function C(a,b){B(a),A(a,b)}function D(a,b){let c=K(b),d=c.indexOf(a),e=c[d-1];if(e){let g=I(e,b);if(g)return;let h=(0,f.VZ)(e);"page"===L(b)?M(h,e):N(h,e)}}function E(a,b){let c=K(b),d=c.indexOf(a),e=c[d+1];if(e){let g=I(e,b);if(g)return;let h=(0,f.VZ)(e);"page"===L(b)?M(h,e):N(h,e)}}function F(a,b){let c=K(b),d=c.indexOf(a),e=(0,f.VZ)(a);if(null==e)return;let g,h;for(;(g=c[d-1])&&(h=(0,f._C)(g,e))&&h.top>=0;)d--;if(g){let i=I(g,b);if(i)return;M(e,g)}}function G(a,b){let c=K(b),d=c.indexOf(a),e=(0,f.VZ)(a);if(null==e)return;let g,h;for(;(g=c[d+1])&&(h=(0,f._C)(g,e))&&h.bottom>=0;)d++;if(g){let i=I(g,b);if(i)return;M(e,g)}}function H(a,b=!1){(0,e.f)(a,"navigation:keyopen",{modifierKey:b})}function I(a,b){return!(0,e.f)(a,"navigation:focus")||(B(b),a.classList.add("navigation-focus"),!1)}function J(){return document.querySelector(".js-active-navigation-container")}function K(a){let b=[];for(let c of a.querySelectorAll(".js-navigation-item"))c instanceof HTMLElement&&(0,k.Z)(c)&&b.push(c);return b}function L(a){return a.getAttribute("data-navigation-scroll")||"item"}function M(a,b,c="smooth"){let d=(0,f._C)(b,a);d&&(d.bottom<=0?b.scrollIntoView({behavior:c,block:"start"}):d.top<=0&&b.scrollIntoView({behavior:c,block:"end"}))}function N(a,b){let c=(0,f.oE)(b,a),d=(0,f._C)(b,a);if(null!=c&&null!=d){if(d.bottom<=0&&document.body){let e=null!=a.offsetParent?a.scrollHeight:document.body.scrollHeight,g=e-(c.bottom+d.height);j(a,{top:g})}else d.top<=0&&j(a,{top:c.top})}}},254(a,b,c){c.d(b,{ZG:()=>h,q6:()=>j,w4:()=>i});var d=c(8439);let e=!1,f=new d.Z;function g(a){let b=a.target;if(b instanceof HTMLElement&&b.nodeType!==Node.DOCUMENT_NODE)for(let c of f.matches(b))c.data.call(null,b)}function h(a,b){e||(e=!0,document.addEventListener("focus",g,!0)),f.add(a,b),document.activeElement instanceof HTMLElement&&document.activeElement.matches(a)&&b(document.activeElement)}function i(a,b,c){function d(b){let e=b.currentTarget;e&&(e.removeEventListener(a,c),e.removeEventListener("blur",d))}h(b,function(b){b.addEventListener(a,c),b.addEventListener("blur",d)})}function j(a,b){function c(a){let{currentTarget:d}=a;d&&(d.removeEventListener("input",b),d.removeEventListener("blur",c))}h(a,function(a){a.addEventListener("input",b),a.addEventListener("blur",c)})}},75662(a,b,c){c.d(b,{r:()=>d});function d(a,b){let c=a.createElement("template");return c.innerHTML=b,a.importNode(c.content,!0)}},87551(a,b,c){c.d(b,{X:()=>e});var d=c(64463);function e(){return/Windows/.test(navigator.userAgent)?"windows":/Macintosh/.test(navigator.userAgent)?"mac":null}(0,d.N7)(".js-remove-unless-platform",function(a){!function(a){let b=(a.getAttribute("data-platforms")||"").split(","),c=e();return Boolean(c&&b.includes(c))}(a)&&a.remove()})},76177(a,b,c){function d(a){let b=a.closest("form");if(!(b instanceof HTMLFormElement))return;let c=e(b);if(a.name){let d=a.matches("input[type=submit]")?"Submit":"",f=a.value||d;c||((c=document.createElement("input")).type="hidden",c.classList.add("js-submit-button-value"),b.prepend(c)),c.name=a.name,c.value=f}else c&&c.remove()}function e(a){let b=a.querySelector("input.js-submit-button-value");return b instanceof HTMLInputElement?b:null}c.d(b,{j:()=>d,u:()=>e})},41246(a,b,c){c.d(b,{b:()=>k});var d=c(76006),e=c(87551),f=c(86702),g=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let{getItem:h,setItem:i}=(0,f.Z)("localStorage"),j="code-button-default-tab",k=class GetRepoElement extends HTMLElement{showDownloadMessage(a){let b=this.findPlatform(a);b&&this.showPlatform(b)}showCodespaces(a){let b=this.findPlatform(a);b&&(this.showPlatform(b),this.loadAndUpdateContent())}showCodespaceSelector(a){let b=this.findPlatform(a);b&&(this.showPlatform(b),this.codespaceSelector&&(this.codespaceSelector.hidden=!1))}showOpenOrCreateInCodespace(){this.openOrCreateInCodespace&&(this.openOrCreateInCodespace.hidden=!1)}removeOpenOrCreateInCodespace(){this.openOrCreateInCodespace&&this.openOrCreateInCodespace.remove()}refreshList(){this.shouldRefreshList&&(this.shouldRefreshList=!1,this.loadAndUpdateContent())}trackDelete(){this.shouldRefreshList=!0}hideSpinner(){this.codespaceLoadingMenu&&(this.codespaceLoadingMenu.hidden=!0),this.codespaceList&&(this.codespaceList.hidden=!1)}showSpinner(){this.codespaceLoadingMenu&&(this.codespaceLoadingMenu.hidden=!1),this.codespaceList&&(this.codespaceList.hidden=!0)}onDetailsToggle(a){for(let b of(this.modal.hidden=!1,this.platforms))b.hidden=!0;let c=a.target;c&&c.open&&this.selectDefaultTab()}showPlatform(a){for(let b of(this.modal.hidden=!0,this.platforms))b.hidden=b.getAttribute("data-platform")!==a}findPlatform(a){return a.currentTarget.getAttribute("data-open-app")||(0,e.X)()}refreshOnError(){window.location.reload()}pollForVscode(a){this.showPlatform("vscode");let b=a.currentTarget.getAttribute("data-src");b&&this.vscodePoller.setAttribute("src",b)}backToCodespacesFromVscodePolling(){this.loadAndUpdateContent(),this.showPlatform("codespaces")}localTabSelected(){i(j,"local")}cloudTabSelected(){i(j,"cloud"),"lazyLoadedCodespacesList"===this.codespaceList.id&&this.loadAndUpdateContent()}selectDefaultTab(){let a=h(j);if(!a)return;let b=this.querySelector(`button[data-tab="${a}"`);b&&b.click()}loadAndUpdateContent(){this.codespaceList.setAttribute("src",this.codespaceList.getAttribute("data-src"))}constructor(...a){super(...a),this.shouldRefreshList=!1}};g([d.fA],k.prototype,"modal",void 0),g([d.fA],k.prototype,"codespaceForm",void 0),g([d.fA],k.prototype,"codespaceLoadingMenu",void 0),g([d.fA],k.prototype,"codespaceList",void 0),g([d.fA],k.prototype,"codespaceSelector",void 0),g([d.fA],k.prototype,"openOrCreateInCodespace",void 0),g([d.fA],k.prototype,"vscodePoller",void 0),g([d.GO],k.prototype,"platforms",void 0),k=g([d.Ih],k)},1883(a,b,c){var d=c(13002),e=c(88309),f=c(59753),g=c(29764);(0,f.on)("tab-container-changed",".js-branches-tags-tabs",async function(a){let b=a.detail.relatedTarget,c=a.currentTarget;if(!c)return;let f,g;for(let h of c.querySelectorAll("[data-controls-ref-menu-id]")){if(!(h instanceof d.Z||h instanceof e.Z))return;let i=h.getAttribute("data-controls-ref-menu-id"),j=b.id===i;h.hidden=!j,j?g=h:f||(f=h.input?h.input.value:"")}let k=g&&g.input;k&&(g&& void 0!==f&&(k.value=f),k.focus())}),(0,f.on)("click",".js-onboarding-list-all",function(a){a.preventDefault();let b=document.querySelectorAll(".js-task-list-hide-on-breadcrumb"),c=document.querySelectorAll(".js-task-list-show-on-breadcrumb");for(let d of b)d.hidden=!0;for(let e of c)e.hidden=!1}),(0,f.on)("click",".js-branch-select-menu",a=>{let b=a.currentTarget;b instanceof HTMLDetailsElement&&!b.open&&(0,g.sz)(b)})},25811(a,b,c){c.d(b,{LS:()=>f,cl:()=>g,rV:()=>e});var d=c(86702);let{getItem:e,setItem:f,removeItem:g}=(0,d.Z)("sessionStorage")},55065(a,b,c){c.d(b,{"$g":()=>SoftNavSuccessEvent,OV:()=>SoftNavStartEvent,QW:()=>SoftNavErrorEvent,Xr:()=>SoftNavEndEvent});var d=c(31167);let e=class SoftNavEvent extends Event{constructor(a,b){super(b),this.mechanism=a}};class SoftNavStartEvent extends e{constructor(a){super(a,d.QE.START)}}class SoftNavSuccessEvent extends e{constructor(a,b){super(a,d.QE.SUCCESS),this.visitCount=b}}class SoftNavErrorEvent extends e{constructor(a,b){super(a,d.QE.ERROR),this.error=b}}class SoftNavEndEvent extends e{constructor(a){super(a,d.QE.END)}}},86824(a,b,c){c.r(b),c.d(b,{softNavigate:()=>f});var d=c(74395),e=c(31167);function f(a,b){(0,e.LD)("turbo"),(0,d.Vn)(a,{...b})}},31167(a,b,c){c.d(b,{BT:()=>l,FP:()=>n,LD:()=>k,QE:()=>g,TL:()=>o,Yl:()=>j,jN:()=>h,r_:()=>m,u5:()=>p});var d=c(55065),e=c(29573),f=c(58843);let g=Object.freeze({INITIAL:"soft-nav:initial",START:"soft-nav:start",SUCCESS:"soft-nav:success",ERROR:"soft-nav:error",FRAME_UPDATE:"soft-nav:frame-update",END:"soft-nav:end",RENDER:"soft-nav:render",PROGRESS_BAR:{START:"soft-nav:progress-bar:start",END:"soft-nav:progress-bar:end"}}),h="reload",i=0;function j(){i=0,document.dispatchEvent(new Event(g.INITIAL)),(0,f.XL)()}function k(a){(0,f.sj)()||(q(),document.dispatchEvent(new d.OV(a)),(0,f.U6)(a),(0,f.J$)(),(0,f.Nt)(),(0,e.hY)())}function l(a={}){s(a)&&(i+=1,document.dispatchEvent(new d.$g((0,f.Gj)(),i)),n(a))}function m(a={}){if(!s(a))return;i=0;let b=(0,f.Wl)()||h;document.dispatchEvent(new d.QW((0,f.Gj)(),b)),r(),(0,e.t3)(b),(0,f.XL)()}function n(a={}){s(a)&&(r(),document.dispatchEvent(new d.Xr((0,f.Gj)())),(0,f.pS)())}function o(a={}){s(a)&&((0,e.mr)(),document.dispatchEvent(new Event(g.RENDER)))}function p(){document.dispatchEvent(new Event(g.FRAME_UPDATE))}function q(){document.dispatchEvent(new Event(g.PROGRESS_BAR.START))}function r(){document.dispatchEvent(new Event(g.PROGRESS_BAR.END))}function s({skipIfGoingToReactApp:a,allowedMechanisms:b=[]}={}){return(0,f.sj)()&&(0===b.length||b.includes((0,f.Gj)()))&&(!a||!(0,f.Nb)())}},29573(a,b,c){c.d(b,{CF:()=>g,hY:()=>h,mr:()=>j,t3:()=>i});var d=c(60958),e=c(58843);let f="stats:soft-nav-duration",g={turbo:"TURBO",react:"REACT","turbo.frame":"FRAME",ui:"UI",hard:"HARD"};function h(){performance.mark(f)}function i(a){(0,d.b)({turboFailureReason:a,turboStartUrl:(0,e.wP)(),turboEndUrl:window.location.href})}function j(){let a=function(){if(0===performance.getEntriesByName(f).length)return null;performance.measure(f,f);let a=performance.getEntriesByName(f),b=a.pop();return b?b.duration:null}();if(!a)return;let b=g[(0,e.Gj)()],c=Math.round(a);b===g.react&&document.dispatchEvent(new CustomEvent("staffbar-update",{detail:{duration:c}})),(0,d.b)({requestUrl:window.location.href,softNavigationTiming:{mechanism:b,destination:(0,e.Nb)()||"rails",duration:c,initiator:(0,e.CI)()||"rails"}})}},58843(a,b,c){c.d(b,{Ak:()=>r,CI:()=>v,Gj:()=>o,"J$":()=>u,Nb:()=>w,Nt:()=>s,OE:()=>p,U6:()=>l,Wl:()=>q,XL:()=>k,pS:()=>m,sj:()=>n,wP:()=>t});var d=c(25811),e=c(31167);let f="soft-nav:fail",g="soft-nav:fail-referrer",h="soft-nav:referrer",i="soft-nav:marker",j="soft-nav:react-app-name";function k(){(0,d.LS)(i,"0"),(0,d.cl)(h),(0,d.cl)(f),(0,d.cl)(g),(0,d.cl)(j)}function l(a){(0,d.LS)(i,a)}function m(){(0,d.LS)(i,"0")}function n(){let a=(0,d.rV)(i);return a&&"0"!==a}function o(){return(0,d.rV)(i)}function p(){return Boolean(q())}function q(){return(0,d.rV)(f)}function r(a){(0,d.LS)(f,a||e.jN),(0,d.LS)(g,window.location.href)}function s(){(0,d.LS)(h,window.location.href)}function t(){return(0,d.rV)(h)||document.referrer}function u(){let a=w();a?(0,d.LS)(j,a):(0,d.cl)(j)}function v(){return(0,d.rV)(j)}function w(){return document.querySelector('meta[name="ui"]')?"ui":document.querySelector("react-app")?.getAttribute("app-name")}},58541(a,b,c){var d;(0,c(64463).N7)("#js-spoofed-commit-warning-trigger",{add(){let a=document.getElementById("spoof-warning");if(!a)return;let b=document.querySelector(".commit-title");b&&b.classList.add("pb-1"),a.hidden=!1,a.removeAttribute("aria-hidden")}})},76932(a,b,c){c.d(b,{RB:()=>d,qC:()=>e,w0:()=>Subscription});class Subscription{constructor(a){this.closed=!1,this.unsubscribe=()=>{a(),this.closed=!0}}}function d(a,b,c,d={capture:!1}){return a.addEventListener(b,c,d),new Subscription(()=>{a.removeEventListener(b,c,d)})}function e(...a){return new Subscription(()=>{for(let b of a)b.unsubscribe()})}},97629(a,b,c){c.d(b,{Z:()=>d});function d(a){var b;return!((b=a).offsetWidth<=0)||!(b.offsetHeight<=0)}},6780(a,b,c){var d,e=c(76006),f=c(3447),g=c(11793),h=c(98249),i=c(59753),j=c(9302),k=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let l=class BranchFilterElement extends HTMLElement{submit(a){a.preventDefault()}resetField(a){if("Escape"!==(0,g.EL)(a))return;let b=this.field.value.trim();this.field.value="",b&&this.search()}reset(){this.field.focus(),this.field.value="",(0,i.f)(this.field,"input")}get activeFilter(){return this.filters.find(a=>a.classList.contains("selected"))??null}async search(){this.originalSelectedItem||(this.originalSelectedItem=this.activeFilter);let a=this.field.value.trim().length>0,b=m(this.field);for(let c of(this.classList.toggle("is-search-mode",a),this.classList.add("is-loading"),this.filters))c.classList.remove("selected");a?this.allFilter.classList.add("selected"):this.originalSelectedItem&&(this.originalSelectedItem.classList.add("selected"),this.originalSelectedItem=null),this.abortSearch?.abort();let{signal:d}=this.abortSearch=new AbortController;try{let e=await (0,h.a)(document,b,{signal:d});(0,j.lO)(null,"",b),this.result.textContent="",this.result.appendChild(e)}catch{}d.aborted||this.classList.remove("is-loading")}constructor(...a){super(...a),this.abortSearch=null,this.originalSelectedItem=null}};function m(a){let b=a.form,c=a.value.trim();if(c){let d=new URL(b.action,window.location.origin),e=new URLSearchParams(d.search.slice(1)),f=b.elements.namedItem("utf8");return f instanceof HTMLInputElement&&e.append("utf8",f.value),e.append("query",c),d.search=e.toString(),d.toString()}return b.getAttribute("data-reset-url")}k([e.fA],l.prototype,"field",void 0),k([e.fA],l.prototype,"result",void 0),k([e.fA],l.prototype,"allFilter",void 0),k([e.GO],l.prototype,"filters",void 0),k([(0,f.D)(100)],l.prototype,"search",null),l=k([e.Ih],l);var n=c(15345),o=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let p=class BranchFilterItemElement extends HTMLElement{get branch(){return this.getAttribute("branch")}get branches(){let a=this.closest("branch-filter"),b=a.querySelectorAll("branch-filter-item");return Array.from(b).filter(a=>a.branch===this.branch)}get dialogBodyPath(){return this.getAttribute("dialog-body-path")}get destroyDialog(){let a=this.closest("branch-filter");return a.querySelector("modal-dialog")}loading(a){for(let b of this.branches)a?b.spinner.removeAttribute("hidden"):b.spinner.setAttribute("hidden","true"),b.destroyButton&&(b.destroyButton.hidden=a)}set mode(a){for(let b of this.branches)b.classList.toggle("Details--on","restore"===a)}async restore(a){a.preventDefault(),this.loading(!0);let b=a.target,c;try{c=await fetch(b.action,{method:b.method,body:new FormData(b),headers:{"X-Requested-With":"XMLHttpRequest"}})}catch{}finally{c&&c.ok||location.reload(),this.loading(!1)}this.mode="destroy",setTimeout(()=>this.destroyButton?.focus(),1)}async destroy(a){a.preventDefault(),this.loading(!0),this.disableAllDeleteButtons(!0);let b;try{b=await fetch(this.dialogBodyPath)}catch{}if(!b||!b.ok){this.displayServerError(!0,b?.status===404),this.disableAllDeleteButtons(!1),this.loading(!1);return}this.displayServerError(!1);let c=await b.text();c?(this.setUpDialog(c),this.loading(!1),this.destroyDialog.show(),this.disableAllDeleteButtons(!1)):(this.disableAllDeleteButtons(!1),await this.confirmDeletion())}async confirmDeletion(){this.loading(!0),this.destroyDialog.close();let a=this.destroyButton.closest("form"),b;try{b=await fetch(a.action,{method:a.method,body:new FormData(a),headers:{"X-Requested-With":"XMLHttpRequest"}})}catch{}if(!b||!b.ok){this.displayServerError(!0,b?.status===404),this.loading(!1);return}(0,n.x)(`Branch ${this.branch} deleted`),this.loading(!1),this.mode="restore",setTimeout(()=>this.restoreButton?.focus(),1)}setUpDialog(a){let b=this.destroyDialog;b.querySelector(".js-delete-dialog-body").innerHTML=a,b.addEventListener("close",this.closeHandler),b.addEventListener("cancel",this.cancelHandler)}handleDialogClose(){this.removeDialogEventListeners(),this.confirmDeletion()}handleDialogCancel(){this.removeDialogEventListeners(),setTimeout(()=>this.destroyButton?.focus(),1)}removeDialogEventListeners(){let a=this.destroyDialog;a.removeEventListener("close",this.closeHandler),a.removeEventListener("cancel",this.cancelHandler)}disableAllDeleteButtons(a){for(let b of document.querySelectorAll(".js-branch-delete-button"))b.disabled=a,a?b.classList.add("disabled"):b.classList.remove("disabled")}displayServerError(a,b=!1){let c=document.querySelector(".js-branch-delete-error"),d=document.querySelector(".js-branch-delete-warning");a?b?(d.querySelector(".js-branch-delete-warning-name").textContent=this.branch,d.hidden=!1):(c.querySelector(".js-branch-delete-error-name").textContent=this.branch,c.hidden=!1):(c.hidden=!0,d.hidden=!0)}constructor(...a){super(...a),this.closeHandler=()=>this.handleDialogClose(),this.cancelHandler=()=>this.handleDialogCancel()}};o([e.fA],p.prototype,"destroyButton",void 0),o([e.fA],p.prototype,"restoreButton",void 0),o([e.fA],p.prototype,"spinner",void 0),p=o([e.Ih],p);var q=c(64463);(0,q.N7)(".js-new-badge-autodismiss",{constructor:HTMLFormElement,add(a){let b=a.closest("details");b.addEventListener("toggle",()=>{b.hasAttribute("open")&&fetch(a.action,{method:a.method,body:new FormData(a),headers:{"X-Requested-With":"XMLHttpRequest"}})})}}),(0,q.N7)(".js-fetch-upstream-details-content",{constructor:HTMLElement,initialize(a){a.hidden=!0}}),(0,i.on)("click",".js-fetch-upstream-summary",async function(){let a=document.querySelector("details.js-fetch-upstream-details"),b=a.querySelector(".js-fetch-upstream-details-spinner"),c=a.querySelector(".js-fetch-upstream-details-content");if(b.hidden&&!c.hidden)return;b.hidden=!1;let d=c.querySelector(".js-fetch-upstream-conflicts-ui"),e=c.querySelector(".js-fetch-upstream-no-conflicts-ui"),f=parseInt(c.getAttribute("data-behind"));if(0===f){d.hidden=!0,e.hidden=!1,c.hidden=!1,b.hidden=!0;return}let g=c.getAttribute("data-mergeability-check-url"),h=await fetch(g,{headers:{Accept:"application/json"}});if(c.hidden=!1,b.hidden=!0,h.ok){let i=await h.json();"clean"===i.state?e.hidden=!1:d.hidden=!1}else d.hidden=!1});var r=c(76932),s=c(65935),t=c(54650);(0,q.N7)(".repository-import",{subscribe:a=>(0,r.RB)(a,"socket:message",function(a){let b=a.detail.data;b.redirect_to&&(document.location.href=b.redirect_to,a.stopImmediatePropagation())})}),(0,i.on)("change","input.js-repository-import-lfs-opt",function({currentTarget:a}){let b=parseInt(a.getAttribute("data-percent-used")||""),c=a.closest(".js-repository-import-lfs-container"),d=a.getAttribute("data-used")||"";c.querySelector(".js-repository-import-lfs-warn").classList.toggle("d-none",!(b>100)),c.querySelector(".js-usage-bar").classList.toggle("exceeded",b>=100),c.querySelector(".js-usage-bar").setAttribute("aria-label",`${b}%`),c.querySelector(".js-repository-import-lfs-progress").style.width=`${b}%`,c.querySelector("span.js-usage-text").textContent=d}),(0,s.AC)(".js-repository-import-author-form",async function(a,b){let c=await b.html(),d=a.closest(".js-repository-import-author");d.replaceWith(c.html)}),(0,i.on)("click",".js-repository-import-projects-cancel-button",function(){let a=document.querySelector(".js-repository-import-projects-cancel-form");(0,t.Bt)(a)}),(0,q.N7)(".js-branch-merge-queue-link",{subscribe:a=>(0,r.RB)(a,"socket:message",async function(b){let c=b.detail.data.queue_entries_count,d=a.getAttribute("data-singular-message"),e=a.getAttribute("data-plural-message");"1"===c?a.textContent=`${c} ${d}`:a.textContent=`${c} ${e}`})});var u=c(254);let v=!1,w=new URLSearchParams(window.location.search),x=w.get("profile_readme");function y(){let a=document.querySelector(".js-repo-name");(0,i.f)(a,"input");let b=document.querySelector('.js-owner-container [aria-checked="true"]'),c="false"!==b.getAttribute("data-org-allow-public-repos"),d=document.querySelector(".js-privacy-toggle[value=public]"),e=document.querySelector(".js-privacy-toggle-label-public"),f=document.querySelector(".js-public-description"),g=document.querySelector(".js-public-restricted-by-policy-description");B(c,d,e,f,g);let h=b.getAttribute("data-business-id"),j=H(h,b),k="false"!==b.getAttribute("data-org-allow-private-repos"),l=document.querySelector(".js-privacy-toggle[value=private]"),m=document.querySelector(".js-privacy-toggle-label-private"),n=document.querySelector(".js-private-description"),o=document.querySelector(".js-private-restricted-by-policy-description");B(k,l,m,n,o),C(),O(),D();let p="false"!==b.getAttribute("data-org-private-restricted-by-plan"),q=document.querySelector(".js-upgrade-private-description"),r="false"!==b.getAttribute("data-org-show-upgrade"),s=b.getAttribute("data-org-name"),t=s?document.querySelector(`a[data-upgrade-link="${s}"]`):null,u=document.querySelector(".js-ask-owner-message");k||!p?(q&&(q.hidden=!0),t&&(t.hidden=!0),u&&(u.hidden=!0)):(o&&(o.hidden=p),q&&(q.hidden=!1),t&&(t.hidden=!r),u&&(u.hidden=r)),A(b);let v=b.getAttribute("data-default-new-repo-branch"),w=document.querySelector(".js-new-repo-owner-default-branch");w&&(w.textContent=v);let x=b.getAttribute("data-owner-settings-link-prefix"),y=document.querySelector(".js-new-repo-owner-settings-link-prefix");y&&(y.textContent=x);let z=b.getAttribute("data-owner-settings-url"),E=document.querySelector(".js-repo-owner-default-branch-settings-link-container"),F=document.querySelector(".js-org-repo-owner-default-branch-settings-info");if(z){let N=document.querySelector(".js-new-repo-owner-settings-link");N&&(N.href=z,E&&(E.hidden=!1)),F&&(F.hidden=!0)}else if(E&&(E.hidden=!0,F)){let P=b.hasAttribute("data-viewer-is-org-admin");F.hidden=!P}let Q="true"===b.getAttribute("data-org-show-trade-controls"),R="true"===b.getAttribute("data-viewer-is-org-admin"),S="true"===b.getAttribute("data-user-show-trade-controls"),T=Q&&!k,U=document.querySelector(".js-trade-controls-description"),V=document.querySelector(".js-individual-trade-controls-description");if(S||T){let W=!S&&!R&&T;o&&(W?o.hidden=!1:o.hidden=!0),l.disabled=!0,n&&(n.hidden=!0),q&&(q.hidden=!0),t&&(t.hidden=!0),u&&(u.hidden=!0)}else U&&(U.hidden=!0),V&&(V.hidden=!0);S?(U&&(U.hidden=!0),V&&(V.hidden=!1)):T&&U&&(V&&(V.hidden=!0),R?U.hidden=!1:U.hidden=!0),G(b,d,j,l),J("yes"===b.getAttribute("data-permission")),L(),I(b),K();let X=document.querySelector(".js-quick-install-container");if(X){let Y=X.querySelector(".js-quick-install-divider");Y.hidden=!0;let Z=document.querySelector("input[name=owner]:checked"),$=Z.parentElement;if($){let _=$.querySelector(".js-quick-install-list-template");if(_ instanceof HTMLTemplateElement){let aa=X.querySelector(".js-account-apps");aa.textContent="",aa.append(_.content.cloneNode(!0)),_.children.length>0&&(Y.hidden=!1)}}}M()}function z(a,b){let c=b.getAttribute("data-org-name"),d=b.getAttribute("data-business-name"),e="true"===b.getAttribute("data-is-user-or-org"),f=c?`the ${c} organization`:"your personal account",g=d?` (${d})`:"",h=a=>e?`${a} in ${f}${g}.`:`${a}.`,i=document.querySelector(".js-new-repo-destination-message");if(i){let j=a?"internal"===a?"n internal":` ${a}`:"";i.textContent=h(`You are creating a${j} repository`);return}let k=document.querySelector(".js-new-fork-destination-message");if(k){k.textContent=h("You are creating a fork");return}}function A(a){let b=document.querySelector(".js-privacy-toggle:checked");z(b?.value,a)}function B(a,b,c,d,e){a?(b&&(b.disabled=!1),c&&c.classList.remove("color-fg-muted"),d&&(d.hidden=!1),e&&(e.hidden=!0)):(b&&(b.disabled=!0),c&&c.classList.add("color-fg-muted"),d&&(d.hidden=!0),e&&(e.hidden=!1))}function C(){let a=E();if(!a)return;let b=a.closest(".form-group");if(!b)return;let c=F();if(!c)return;let d="true"===a.getAttribute("data-is-user-or-org"),e=b.querySelector("#repository-owner")===document.activeElement;d||!c.value||e?b.classList.remove("errored"):b.classList.add("errored")}function D(){let a=document.querySelectorAll('.js-org-upgrade-link:not([hidden=""]');for(let b of a)b.hidden=!0}function E(){return document.querySelector('.js-owner-container [aria-checked="true"]')}function F(){return document.querySelector(".js-owner-reponame .js-repo-name")}function G(a,b,c,d){let e=null;if("private"===a.getAttribute("data-default")&&d&&!d.disabled?e=d:"internal"===a.getAttribute("data-default")&&c&&!c.disabled?e=c:b&&!b.disabled?e=b:c&&!c.disabled&&(e=c),d&&!d.disabled&&"member"===x?e=d:b&&!b.disabled&&x&&(e=b),!e)return;let f=b&&b.disabled&&b.checked||d.disabled&&d.checked||c&&c.disabled&&c.checked,g=(!b||!b.checked)&&(!c||!c.checked)&&!d.checked;(!1===v|| !0===f|| !0===g)&&(e.checked=!0,(0,i.f)(e,"change"))}function H(a,b){let c=!1,d=document.querySelectorAll(".js-new-repo-internal-visibility");for(let e of d){e.hidden=!0;let f=e.querySelector(".js-privacy-toggle[value=internal]");f instanceof HTMLInputElement&&f.checked&&(c=!0)}if(a){let g=document.querySelector(`#new-repo-internal-visibility-${a}`);if(g){g.hidden=!1;let h=g.querySelector(".js-privacy-toggle-label-internal"),j=g.querySelector(".js-internal-description"),k=g.querySelector(".js-internal-restricted-by-policy-description"),l=g.querySelector(".js-privacy-toggle[value=internal]");if(l instanceof HTMLInputElement)return"false"===b.getAttribute("data-org-allow-internal-repos")?(l.disabled=!0,h&&h.classList.add("color-fg-muted"),j&&(j.hidden=!0),k&&(k.hidden=!1)):(c&&(l.checked=!0,(0,i.f)(l,"change")),l.disabled=!1,h&&h.classList.remove("color-fg-muted"),j&&(j.hidden=!1),k&&(k.hidden=!0)),l}}return null}function I(a){let b=document.querySelector("auto-check.js-repo-name-autocheck"),c=b.getAttribute("src"),d=b.getAttribute("disabled-src"),e="true"===a.getAttribute("data-is-user-or-org");e?(d&&b.setAttribute("src",d),b.removeAttribute("disabled-src")):(c&&b.setAttribute("disabled-src",c),b.removeAttribute("src"))}function J(a){for(let b of document.querySelectorAll(".js-with-permission-fields"))b.hidden=!a;for(let c of document.querySelectorAll(".js-without-permission-fields"))c.hidden=a;let d=document.querySelector(".errored"),e=document.querySelector("dl.warn");d&&(d.hidden=!a),e&&(e.hidden=!a)}function K(a){let b=a?.target||document.querySelector(".js-privacy-toggle:checked");if(!b)return;!function(a){let b=document.querySelector('.js-owner-container [aria-checked="true"]');z(a,b)}(b.value);let c=document.querySelector("#js-upgrade-container");if(!c)return;let d=c.querySelector(".js-billing-section"),e=c.querySelector(".js-confirm-upgrade-checkbox");"false"===b.value?(c.hidden=!1,d&&d.classList.remove("has-removed-contents"),e&&(e.checked=!0)):(c.hidden=!0,d&&d.classList.add("has-removed-contents"),e&&(e.checked=!1)),M()}function L(){let a=document.querySelector("#js-upgrade-container");if(!a)return;let b=document.querySelector("#js-payment-methods-form");a.firstElementChild&&b.appendChild(a.firstElementChild);let c=document.querySelector("input[name=owner]:checked").value,d=b.querySelector(`.js-upgrade[data-login="${c}"]`);d&&a.appendChild(d)}function M(){let a=document.querySelector(".js-repo-form"),b=a.querySelector(".js-repository-owner-choice:checked"),c=a.querySelector(".js-repo-name"),d=a.querySelector(".js-repo-url"),e=!d||!d.classList.contains("is-autocheck-errored"),f=!!document.querySelector(".js-page-repo-persisted")||!!b;(e=e&&f)&&c&&(e=c.classList.contains("is-autocheck-successful"),function(){let a=document.querySelector(".js-privacy-toggle:checked");if(a)return"private"===a.value}()&&(e=e&&N()));let g=document.querySelector(".js-stacks-policy-status-message");g&&!g?.hidden&&(e=!1);let h=a.querySelector("button[type=submit]");h.disabled=!e}function N(){let a=document.querySelector("#js-upgrade-container");if(!a)return!0;let b=a.querySelector(".js-ofac-sanction-notice");if(b)return!1;let c=a.querySelector(".js-confirm-upgrade-checkbox");if(c instanceof HTMLInputElement&&!c.checked)return!1;let d=a.querySelector(".js-zuora-billing-info");return!(d&&d.classList.contains("d-none"))}async function O(){let a=document.querySelector(".js-repository-owner-choice:checked"),b=document.querySelector(".js-stacks-policy")?.getAttribute("data-stack-url");if(!a||!b)return;let c=new URL(b,window.location.origin),d=document.querySelector(".js-stacks-policy-status-message"),e=new URLSearchParams(c.search.slice(1));e.set("owner",a.value),c.search=e.toString();let f=await fetch(c.toString(),{headers:{Accept:"application/json"}});if(f.ok){let g=await f.json();d&&(d.hidden="success"===g.status)}}(0,q.N7)("#js-upgrade-container .js-zuora-billing-info:not(.d-none)",M),(0,q.N7)(".js-page-new-repo",function(){let a=document.querySelector(".js-owner-container");if(!a)return;let b=document.querySelector("#js-upgrade-container");b&&(b.hidden=!0),P(),y()});let P=()=>{let a=document.querySelector(".js-repo-form"),b=a.querySelector(".js-repo-url");if(b){b.focus();return}let c=a.querySelector(".js-template-repository-select");if(c){c.focus();return}let d=a.querySelector(".js-owner-select");d&&d.focus()};(0,i.on)("focusout","#repository-owner",function(){C()}),(0,i.on)("click",".js-reponame-suggestion",function(a){let b=document.querySelector(".js-repo-name");b.value=a.currentTarget.textContent,C(),(0,i.f)(b,"input",!1)}),(0,i.on)("click",".js-privacy-toggle",function(){v=!0}),(0,i.on)("change",".js-privacy-toggle",K),(0,i.on)("details-menu-selected",".js-owner-container",y,{capture:!0}),(0,i.on)("change","#js-upgrade-container input",M),(0,u.q6)("#js-upgrade-container input",M);let Q=a=>{let b=document.querySelector(".js-org-profile");if(b){let c=document.querySelector(".js-owner-container input.js-repository-owner-is-org:checked"),d=a?.target||document.querySelector(".js-repo-name"),e=!(c&&".github"===d.value.toLowerCase());b.hidden=e;let f=document.querySelector("#repo-name-suggestion");f.hidden=!e}},R=a=>{let b=document.querySelector(".js-org-private-profile");if(b){let c=document.querySelector(".js-owner-container input.js-repository-owner-is-org:checked"),d=a?.target||document.querySelector(".js-repo-name"),e=!(c&&".github-private"===d.value.toLowerCase());b.hidden=e;let f=document.querySelector("#repo-name-suggestion");f.hidden=!e}},S=a=>{let b=document.querySelector(".js-personal");if(b){let c=document.querySelector(".js-owner-container input.js-repository-owner-is-viewer"),d=a?.target||document.querySelector(".js-repo-name"),e=!(c&&c.checked&&c.defaultValue.toLowerCase()===d.value.toLowerCase());b.hidden=e;let f=document.querySelector("#repo-name-suggestion");f.hidden=!e}};async function T(a){return(0,h.a)(document,a)}async function U(a){let b=a.getAttribute("data-pulse-diffstat-summary-url"),c;try{b&&(c=await T(b),V(c,a))}catch(d){let e=a.querySelector(".js-blankslate-loading"),f=a.querySelector(".js-blankslate-error");e.classList.add("d-none"),f.classList.remove("d-none")}}function V(a,b){b.textContent="",b.appendChild(a)}(0,u.q6)(".js-owner-reponame .js-repo-name",function(a){S(a),Q(a),R(a),C(),M()}),(0,i.on)("auto-check-send",".js-repo-name-auto-check",function(a){let b=a.currentTarget,c=b.form,d=c.querySelector("input[name=owner]:checked").value;a.detail.body.append("owner",d)}),(0,i.on)("auto-check-complete",".js-repo-name-auto-check",M),(0,u.q6)(".js-repo-url",function(a){let b=a.target;if(!(b instanceof HTMLInputElement))return;let c=b.closest(".form-group");if(!(c instanceof HTMLDListElement))return;let d=document.querySelector(".js-insecure-url-warning"),e=document.querySelector(".js-svn-url-error"),f=document.querySelector(".js-git-url-error"),g=b.value.toLowerCase();d.hidden=!g.startsWith("http://"),e.hidden=!g.startsWith("svn://"),f.hidden=!g.startsWith("git://"),g.startsWith("svn://")||g.startsWith("git://")?(b.classList.add("is-autocheck-errored"),c.classList.add("errored")):(b.classList.remove("is-autocheck-errored"),c.classList.remove("errored")),M()}),(0,i.on)("change",".js-repo-init-setting-menu-option",M),(0,i.on)("change",".js-repo-readme",M),(0,i.on)("change",".js-toggle-new-repo-default-branch-info",a=>{let b=a.currentTarget;!function(a){let b=a.closest("form"),c=b.querySelector(".js-new-repo-default-branch-info");if(!c)return;let d=b.querySelectorAll(".js-toggle-new-repo-default-branch-info:checked"),e=d.length>0;c.hidden=!e}(b)}),S(null),Q(null),R(null),c(1883),(0,q.N7)(".js-pulse-contribution-data",a=>{U(a)});var W=c(48858);async function X(a){let b=a.form,c=b.querySelector("#release_draft");c.value="1",Z(a,"saving");let d=await fetch(b.action,{method:b.method,body:new FormData(b),headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"}});if(!d.ok){Z(a,"failed");return}let e=await d.json();return Z(a,"saved"),setTimeout(Z,5e3,a,"default"),(0,i.f)(b,"release:saved",{release:e}),e}function Y(a){let b=a.closest(".js-releases-marketplace-publish-container"),c=b.querySelector(".js-releases-marketplace-publish-preview");a.checked?c.classList.remove("d-none"):c.classList.add("d-none")}function Z(a,b){for(let c of a.querySelectorAll(".js-save-draft-button-state"))c.hidden=c.getAttribute("data-state")!==b;a.disabled="saving"===b}function $(a){let b=document.querySelector(".js-release-target-wrapper");if(null!=b){switch(aa(a),a){case"valid":case"invalid":case"duplicate":case"branch_exists":b.hidden=!0;break;case"loading":break;default:b.hidden=!1}for(let c of document.querySelectorAll(".js-tag-status-message"))c.hidden=c.getAttribute("data-state")!==a,c.getAttribute("data-state")===a?c.setAttribute("role","status"):c.removeAttribute("role");am(),ag("pending")}}function _(){let a=document.querySelector(".js-release-tag");return a.getAttribute("data-state")}function aa(a){let b=document.querySelector(".js-release-tag");b.setAttribute("data-state",a)}(0,i.on)("change",".js-releases-marketplace-publish-field",function(a){Y(a.currentTarget)}),(0,q.N7)(".js-releases-marketplace-publish-field",function(a){Y(a)}),(0,i.on)("click",".js-save-draft",function(a){let b=a.currentTarget;!b.disabled&&(X(b),a.preventDefault())}),(0,i.on)("click",".js-prerelease-checkbox",a=>{let b=a.currentTarget,c=a.currentTarget.closest("form").querySelector("#is_stored_latest"),d=document.querySelector(".js-latest-release-checkbox");d&&(b.checked?(d.checked=!1,d.disabled=!0):"1"===c.value?(d.checked=!0,d.disabled=!0):d.disabled=!1)}),(0,q.N7)(".js-latest-release-checkbox",function(a){let b=a,c=a.closest("form").querySelector("#is_stored_latest"),d=b.checked&& !0===b.disabled;c.value=d?"1":"0"}),(0,i.on)("release:saved",".js-release-form",function(a){let b=a.detail.release,c=a.currentTarget;if(c.setAttribute("action",b.update_url),b.update_authenticity_token){let d=c.querySelector("input[name=authenticity_token]");d.value=b.update_authenticity_token}(0,j.lO)(history.state,document.title,b.edit_url);let e=c.querySelector("#release_id");if(!e.value){e.value=b.id;let f=document.createElement("input");f.type="hidden",f.name="_method",f.value="put",c.appendChild(f)}}),(0,i.on)("click",".js-publish-release",function(){document.querySelector("#release_draft").value="0"});let ab=new WeakMap;function ac(a){let b=a.querySelector('input[name="release[tag_name]"]:checked');return b?.value}async function ad(a){let b=ac(a);if(!b){$("empty");return}if(b===ab.get(a))return;$("loading"),ab.set(a,b);let c=a.getAttribute("data-url"),d=new URL(c,window.location.origin),e=new URLSearchParams(d.search.slice(1));e.append("tag_name",b),d.search=e.toString();let f=await fetch(d.toString(),{headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"}});if(!f.ok){$("invalid");return}let g=await f.json();"duplicate"===g.status&&parseInt(a.getAttribute("data-existing-id"))===parseInt(g.release_id)?$("valid"):(document.querySelector(".js-release-tag .js-edit-release-link").setAttribute("href",g.url),$(g.status)),al(a)}async function ae(a){let b=a.offsetWidth;a.style.width=`${b}px`,ag("loading"),a.setAttribute("aria-disabled","true");let c=a.getAttribute("data-repo-url"),d=`${c}/releases/notes`,e=new URL(d,window.location.origin),f=new URLSearchParams(e.search.slice(1));f.append("commitish",aj()),f.append("tag_name",ac(document)||""),f.append("previous_tag_name",ak()),e.search=f.toString();let g=await fetch(e.toString(),{headers:{Accept:"application/json"}});if(g.ok){let h=await g.json();if(h.commitish===aj()){let i=document.getElementById("release_body"),j="generated"===ai()?"":i.value.trim();j?i.value=j.concat("\n\n",h.body):i.value=h.body;let k=document.getElementById("release_name");k.value||(k.value=h.title),ag("succeed"),(0,n.x)("Successfully generated release notes"),ah(j?"generated-and-edited":"generated"),am(!0);let l=document.querySelector(".js-release-body-warning");l.textContent=h.warning_message,l.hidden=!h.warning_message}}else{ag("failed"),a.setAttribute("aria-disabled","false");let m=await g.json();if(m&&m.error){let o=document.getElementById("form-error-alert");o.textContent=m.error,o.hidden=!1}}}(0,i.on)("click",".js-generate-release-notes",function(a){let b=a.currentTarget;"true"!==b.getAttribute("aria-disabled")&&ae(b)});let af=["pending","loading","succeed","failed"];function ag(a){if(af.map(b=>{let c=document.getElementById(`generate-icon-${b}`),d=document.getElementById("generate-btn-txt");c&&(b===a?(d&&d.setAttribute("hidden","true"),("succeed"===a||"failed"===a)&&setTimeout(()=>{c.setAttribute("hidden","true"),d&&d.removeAttribute("hidden")},2e3),c.removeAttribute("hidden")):c.setAttribute("hidden","true"))}),"failed"!==a){let b=document.getElementById("form-error-alert");b.textContent="",b.hidden=!0}}function ah(a){let b=document.getElementById("generated_notes_state");b.value=a}function ai(){let a=document.getElementById("generated_notes_state");return a.value}function aj(){return"valid"===_()?ac(document)||"":document.querySelector('input[name="release[target_commitish]"]:checked')?.value||""}function ak(){return document.querySelector('input[name="release[previous_tag_name]"]:checked')?.value||""}function al(a){let b=a.closest("form"),c=b.querySelector(".js-previewable-comment-form");if(!c)return;let d=c.getAttribute("data-base-preview-url");d||(d=String(c.getAttribute("data-preview-url")),c.setAttribute("data-base-preview-url",d));let e=a.querySelectorAll('input[name="release[tag_name]"], input[name="release[target_commitish]"]:checked'),f=new URL(d,window.location.origin),g=new URLSearchParams(f.search.slice(1));for(let h of e)h.value&&g.append(h.name,h.value);f.search=g.toString(),c.setAttribute("data-preview-url",f.toString())}function am(a=!1){let b=document.querySelector(".js-generate-release-notes"),c=document.getElementById("prev-tag-picker"),d=document.querySelector("tool-tip[for='generate-notes-btn']"),e=_(),f="valid"!==e&&"pending"!==e,g=a||f;b.setAttribute("aria-disabled",g.toString()),d&&(g?d.textContent=`${f?"Select a valid tag to a":"Clear existing notes to a"}utomatically add the Markdown for all the merged pull requests from this diff and contributors of this release`:d.textContent="Automatically add the Markdown for all the merged pull requests from this diff and contributors of this release"),c&&(c.hidden=g)}function an(a){if(""===a.value)am(),ag("pending"),ah("initial");else{let b=ai(),c="initial"!==b;am(c),"generated"===b&&ah("generated-and-edited")}}(0,q.N7)(".js-release-tag",function(a){ad(a)}),(0,q.N7)("details-menu",function(a){(0,W.e)(a)}),(0,i.on)("click",".js-release-expand-btn",async function(a){let b=a.currentTarget.closest(".js-release-expandable"),c=b.getAttribute("data-expand-url"),d=await (0,h.a)(document,c);b?.replaceWith(d)}),(0,i.on)("click",".js-release-asset-untruncate-btn",async function(a){a.currentTarget.setAttribute("hidden","true");let b=a.currentTarget.parentNode?.querySelector(".js-truncate-assets-spinner");b&&b.removeAttribute("hidden");let c=a.currentTarget.closest(".js-truncated-assets-fragment"),d=c?.getAttribute("data-deferred-src");d&&c?.setAttribute("src",encodeURI(d))}),(0,q.N7)("#release_body",function(a){let b=a;b.addEventListener("input",function(){an(b)}),an(b)}),(0,i.on)("change",".js-release-check-tag",function(a){let b=a.currentTarget.closest(".js-release-tag");ad(b)}),(0,q.N7)(".js-release-form .js-previewable-comment-form",function(a){let b=a.closest("form").querySelector(".js-release-tag");al(b)}),(0,q.N7)("#release_page_title",function(a){let b=a.textContent?.trim()||"";b.length&&(document.title=b)}),(0,q.N7)("#release-filter",function(a){let b=a;b.value.length>0&&(b.focus(),b.setSelectionRange(b.value.length,b.value.length))});let ao,ap;async function aq(a){let b=document.querySelector(".js-release-stack").getAttribute("data-stack-url"),c=new URL(b,window.location.origin),d;switch(au({target_found:!0,template_found:!0,loading:!0},"tag"),a.id){case"tag-list":{let e=a.querySelector('input[name="release[tag_name]"]:checked');if(!e)return;(d=await as(c,"ref",e)).target_found?au(d,"tag"):(d=await as(c,ap,ao),au(d,"ref"===ap?"branch":"commit"));break}case"filter-list-branches":{let f=a.querySelector('input[name="release[target_commitish]"]:checked');if(!f)return;ao=f,ap="ref",d=await as(c,"ref",f),au(d,"branch");break}case"filter-list-tags":{let g=a.querySelector('input[name="release[target_commitish]"]:checked');if(!g)return;ao=g,ap="oid",d=await as(c,"oid",g),au(d,"commit")}}}let ar=new WeakMap;async function as(a,b,c){if(ar.has(c))return ar.get(c);let d=new URLSearchParams(a.search.slice(1));d.append(b,c.value),a.search=d.toString();let e=await fetch(a.toString(),{headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"}}),f={target_found:!1};return e.ok&&((f=await e.json()).target_found=!0),ar.set(c,f),f}let at={branding:"Icon and color found in stack template.",template:"Contains all the required information.",readme:"File exists.",init:"No issues found in init section."};function au(a,b){if(!a.target_found)return;let c=document.querySelector(".js-releases-marketplace-banner-container"),d=document.querySelector(".js-releases-marketplace-publish-heading"),e=document.querySelector(".js-publish-release"),f=!1;if(e.disabled=d.hidden=c.hidden=!a.template_found,!a.template_found)return;let g=["branding","template","readme","init"];for(let h of g){let i;"failure"==(i=a.loading?"loading":a[h]?"failure":"success")&&(f=!0);let j=c.querySelector(`#${h}-row`);for(let k of j.querySelectorAll(".status-icon"))k.hidden=k.getAttribute("data-state")!==i;let l=j.querySelector(".js-status-text");for(let m of["color-fg-attention","color-fg-danger","color-fg-muted"])l.classList.remove(m);switch(i){case"success":l.textContent=at[h],l.classList.add("color-fg-muted");break;case"failure":l.textContent=a[h],l.classList.add("color-fg-danger");break;case"loading":l.textContent="Loading...",l.classList.add("color-fg-attention")}for(let n of j.querySelectorAll(".js-modify-button")){let o=`${h}_path`;n.setAttribute("href",a[o]),"branch"===b&&"loading"!==i?n.hidden=n.getAttribute("data-state")!==i:n.hidden=!0}}let p=c.querySelector("#init-row");p.hidden=!a.init_section_exists,p.querySelector('.js-modify-button[data-state="failure"] button').textContent=p.querySelector('.js-modify-button[data-state="failure"]').getAttribute(a.init_exists?"data-edit-text":"data-add-text"),e.disabled=f}(0,i.on)("change",".js-release-stack #filter-list-branches",a=>aq(a.currentTarget)),(0,i.on)("change",".js-release-stack #filter-list-tags",a=>aq(a.currentTarget)),(0,i.on)("change",".js-release-stack #tag-list",a=>aq(a.currentTarget)),(0,q.N7)(".js-release-stack #filter-list-branches",function(a){aq(a)});let av="";(0,i.on)("auto-check-message-updated",".js-rename-branch-input",function(a){let b=a.currentTarget;!function(a){let b=a.closest(".js-rename-branch-form"),c=a.value,d=c!==a.defaultValue&&""!==c,e=b.querySelector(".js-rename-branch-autocheck-message");if(e&&d){let f=!1;for(let g of((c=e.getAttribute("data-shell-safe-name")||av).includes("<")&&(f=!0),b.querySelectorAll(".js-rename-branch-new-name")))g.textContent=c;for(let h of((c=e.getAttribute("data-shell-safe-name-with-remote")||`origin/${av}`).includes("<")&&(f=!0),b.querySelectorAll(".js-rename-branch-new-name-with-remote")))h.textContent=c;let i=b.querySelector(".js-rename-branch-special-characters-documentation");i&&f&&(i.hidden=!1,i.removeAttribute("aria-hidden"))}}(b)});let aw=a=>{let b=document.querySelector(ax);if(b){let c=0===a.value.length;b.disabled=c}},ax='form.js-protected-branch-settings button[type="submit"]';(0,q.N7)(ax,{add(){let a=document.getElementById("rule_field");a&&(aw(a),a.addEventListener("input",()=>aw(a)))}}),(0,i.on)("change",".js-template-repository-choice",function(a){let b=a.target,c=b.checked&&""!==b.value,d=b.form,e=d.querySelector(".js-repository-auto-init-options");e.classList.toggle("has-removed-contents",c);let f=d.querySelectorAll(".js-template-repository-setting"),g=d.querySelectorAll(".js-template-repository-name-display");if(c){let h=b.closest(".js-template-repository-choice-container"),j=h.querySelector(".js-template-repository-name"),k=b.getAttribute("data-owner"),l=d.querySelector(`.js-repository-owner-choice[value="${k}"]`);if(l instanceof HTMLInputElement)l.checked=!0,(0,i.f)(l,"change");else{let m=d.querySelector(".js-repository-owner-choice.js-repository-owner-is-viewer");m.checked=!0,(0,i.f)(m,"change")}for(let n of g)n.textContent=j.textContent}else for(let o of g)o.textContent="";for(let p of f)p.hidden=!c});var ay=c(47142),az=c(10160),aA=c(69567),aB=c(15205);let aC=(0,aB.Z)(ay.Gs);(0,u.w4)("keydown",".js-tree-finder-field",a=>{"Escape"===a.key&&(a.preventDefault(),history.back())}),(0,q.N7)(".js-tree-finder",a=>{let b=a.querySelector(".js-tree-finder-field"),c=a.querySelector(".js-tree-finder-virtual-filter"),d=a.querySelector(".js-tree-browser"),e=a.querySelector(".js-tree-browser-results"),f=a.querySelector(".js-tree-browser-result-template"),g=new az.Z(b,e);c.filter=(a,b)=>""===b||(0,ay.CD)(b,a)&&aC(b,a)>0,c.addEventListener("virtual-filter-input-filter",()=>{d.updating="lazy"}),c.addEventListener("virtual-filter-input-filtered",()=>{d.updating="eager"}),d.addEventListener("virtual-list-sort",a=>{a.preventDefault();let c=b.value;d.sort((a,b)=>aC(c,b)-aC(c,a))}),d.addEventListener("virtual-list-update",()=>{g.stop()}),d.addEventListener("virtual-list-updated",()=>{g.start(),g.navigate()}),d.addEventListener("virtual-list-render-item",a=>{var b;if(!(a instanceof CustomEvent))return;let c=new aA.R(f,{item:a.detail.item,id:`entry-${Math.random().toString().substr(2,5)}`,urlEncodedItem:encodeURIComponent(b=a.detail.item).replaceAll("%2F","/")}),d=c.querySelector("marked-text");d&&(d.positions=ay.m7),a.detail.fragment.append(c)}),d.querySelector("ul").hidden=!1,b.focus(),g.start()});var aD=c(57260),aE=c(31167),aF=c(86824);let aG=null,aH=new WeakMap;function aI(a){a.classList.remove("is-progress-bar");let b=a.closest(".js-upload-manifest-file-container"),c=b.querySelector(".js-upload-progress");c.hidden=!0;let d=b.querySelector(".js-upload-meter-text .js-upload-meter-filename");d.textContent=""}function aJ(a){aI(a.currentTarget)}async function aK(a){let b=a.getAttribute("data-redirect-url");try{await (0,h.D)(a.getAttribute("data-poll-url")),window.location.href=b}catch(c){document.querySelector(".js-manifest-ready-check").hidden=!0,document.querySelector(".js-manifest-ready-check-failed").hidden=!1}}function aL(a){let b=a.closest("form");return b.querySelector("#release_id").value}(0,i.on)("file-attachment-accept",".js-upload-manifest-file",function(a){let{attachments:b}=a.detail,c=parseInt(a.currentTarget.getAttribute("data-directory-upload-max-files")||"",10);b.length>c&&(a.preventDefault(),a.currentTarget.classList.add("is-too-many"))}),(0,i.on)("document:drop",".js-upload-manifest-tree-view",async function(a){let{transfer:b}=a.detail,c=a.currentTarget,d=await aD.P.traverse(b,!0),e=c.getAttribute("data-drop-url");document.addEventListener(aE.QE.SUCCESS,()=>{document.querySelector(".js-upload-manifest-file").attach(d)},{once:!0}),(0,aF.softNavigate)(e)}),(0,i.on)("upload:setup",".js-upload-manifest-file",async function(a){let{batch:b,form:c,preprocess:d}=a.detail,e=a.currentTarget;function f(){c.append("upload_manifest_id",aH.get(e))}if(function(a,b){let c=a.closest(".js-upload-manifest-file-container"),d=c.querySelector(".js-upload-progress");d.hidden=!1,a.classList.add("is-progress-bar");let e=d.querySelector(".js-upload-meter-text"),f=e.querySelector(".js-upload-meter-range-start");f.textContent=String(b.uploaded()+1);let g=e.querySelector(".js-upload-meter-range-end");g.textContent=String(b.size)}(e,b),aH.get(e)){f();return}if(aG){d.push(aG.then(f));return}let g=e.closest(".js-upload-manifest-file-container"),h=g.querySelector(".js-upload-manifest-form");aG=fetch(h.action,{method:h.method,body:new FormData(h),headers:{Accept:"application/json"}});let[i,j]=function a(){let b,c=new Promise(a=>{b=a});return[c,b]}();d.push(i.then(f));let k=await aG;if(!k.ok)return;let l=await k.json(),m=document.querySelector(".js-manifest-commit-form"),n=m.elements.namedItem("manifest_id");n.value=l.upload_manifest.id,aH.set(e,l.upload_manifest.id),aG=null,j()}),(0,i.on)("upload:start",".js-upload-manifest-file",function(a){let{attachment:b,batch:c}=a.detail,d=a.currentTarget.closest(".js-upload-manifest-file-container"),e=d.querySelector(".js-upload-progress"),f=e.querySelector(".js-upload-meter-text"),g=f.querySelector(".js-upload-meter-range-start");g.textContent=c.uploaded()+1;let h=f.querySelector(".js-upload-meter-filename");h.textContent=b.fullPath}),(0,i.on)("upload:complete",".js-upload-manifest-file",function(a){let{attachment:b,batch:c}=a.detail,d=document.querySelector(".js-manifest-commit-file-template"),e=d.querySelector(".js-manifest-file-entry").cloneNode(!0),f=e.querySelector(".js-filename");f.textContent=b.fullPath;let g=b.id,h=e.querySelector(".js-remove-manifest-file-form"),i=h.elements.namedItem("file_id");i.value=g;let j=document.querySelector(".js-manifest-file-list");j.hidden=!1,a.currentTarget.classList.add("is-file-list");let k=j.querySelector(".js-manifest-file-list-root");k.appendChild(e),c.isFinished()&&aI(a.currentTarget)}),(0,i.on)("upload:progress",".js-upload-manifest-file",function(a){let{batch:b}=a.detail,c=a.currentTarget.closest(".js-upload-manifest-file-container"),d=c.querySelector(".js-upload-meter");d.style.width=`${b.percent()}%`}),(0,i.on)("upload:error",".js-upload-manifest-file",aJ),(0,i.on)("upload:invalid",".js-upload-manifest-file",aJ),(0,s.AC)(".js-remove-manifest-file-form",async function(a,b){await b.html();let c=a.closest(".js-manifest-file-list-root"),d=a.closest(".js-manifest-file-entry");if(d.remove(),!c.hasChildNodes()){let e=c.closest(".js-manifest-file-list");e.hidden=!0;let f=document.querySelector(".js-upload-manifest-file");f.classList.remove("is-file-list")}}),(0,q.N7)(".js-manifest-ready-check",{initialize(a){aK(a)}}),(0,i.on)("click",".js-release-remove-file",function(a){let b=a.currentTarget.closest(".js-release-file");b.classList.add("delete"),b.querySelector("input.destroy").value="true"}),(0,i.on)("click",".js-release-undo-remove-file",function(a){let b=a.currentTarget.closest(".js-release-file");b.classList.remove("delete"),b.querySelector("input.destroy").value=""});let aM=null;function aN(a,b){b.append("release_id",aL(a));let c=Array.from(document.querySelectorAll(".js-releases-field .js-release-file.delete .id"));if(c.length){let d=c.map(a=>a.value);b.append("deletion_candidates",d.join(","))}}(0,i.on)("release:saved",".js-release-form",function(a){let b=a.currentTarget;aM=null;let c=!1;for(let d of b.querySelectorAll(".js-releases-field .js-release-file"))d.classList.contains("delete")?d.remove():d.classList.contains("js-template")||(c=!0);let e=b.querySelector(".js-releases-field");e.classList.toggle("not-populated",!c),e.classList.toggle("is-populated",c)}),(0,i.on)("upload:setup",".js-upload-release-file",function(a){let{form:b,preprocess:c}=a.detail,d=a.currentTarget;if(aL(d)){aN(d,b);return}if(!aM){let e=document.querySelector(".js-save-draft");aM=X(e)}let f=aN.bind(null,d,b);c.push(aM.then(f))}),(0,i.on)("upload:start",".js-upload-release-file",function(a){let b=a.detail.policy,c=a.currentTarget.querySelector(".js-upload-meter");c.classList.remove("d-none");let d=b.asset.replaced_asset;if(d)for(let e of document.querySelectorAll(".js-releases-field .js-release-file .id"))Number(e.value)===d&&e.closest(".js-release-file").remove()}),(0,i.on)("upload:complete",".js-upload-release-file",function(a){let{attachment:b}=a.detail,c=document.querySelector(".js-releases-field"),d=c.querySelector(".js-template").cloneNode(!0);d.classList.remove("d-none","js-template"),d.querySelector("input.id").value=b.id;let e=b.name||b.href.split("/").pop();for(let f of c.querySelectorAll(".js-release-file"))f.querySelector(".js-release-asset-filename")?.value===e&&"starter"===f.getAttribute("data-state")&&f.remove();for(let g of d.querySelectorAll(".js-release-asset-filename"))g instanceof HTMLInputElement?g.value=e:g.textContent=e;let h=`(${(b.file.size/1048576).toFixed(2)} MB)`;d.querySelector(".js-release-asset-filesize").textContent=h,d.setAttribute("data-state","uploaded"),c.appendChild(d),c.classList.remove("not-populated"),c.classList.add("is-populated");let i=a.currentTarget.querySelector(".js-upload-meter");i.classList.add("d-none")}),(0,i.on)("upload:progress",".js-upload-release-file",function(a){let{attachment:b}=a.detail,c=a.currentTarget.querySelector(".js-upload-meter");c.style.width=`${b.percent}%`});var aO=c(41246),aP=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let aQ=((d=class RepoCodespacesCountElement extends HTMLElement{connectedCallback(){(0,q.N7)("get-repo",{constructor:aO.b,add:a=>{this.handleGetRepoElement(a)}})}handleGetRepoElement(a){a.openOrCreateInCodespace&&(0===this.codespacesCount?a.showOpenOrCreateInCodespace():a.removeOpenOrCreateInCodespace())}constructor(...a){super(...a),this.codespacesCount=0}}).attrPrefix="",d);aP([e.Lj],aQ.prototype,"codespacesCount",void 0),aQ=aP([e.Ih],aQ),c(55843),c(82368),c(58541),c(4738)},15345(a,b,c){c.d(b,{N:()=>e,x:()=>f});var d=c(86283);function e(a){f(h(a))}function f(a){g(a)}function g(a){let b=d.n4?.querySelector("#js-global-screen-reader-notice");b&&(b.textContent===a?b.textContent=`${a}\u00A0`:b.textContent=a)}function h(a){return(a.getAttribute("aria-label")||a.innerText||"").trim()}}},a=>{var b=b=>a(a.s=b);a.O(0,["vendors-node_modules_selector-observer_dist_index_esm_js","vendors-node_modules_manuelpuyol_turbo_dist_turbo_es2017-esm_js","vendors-node_modules_virtualized-list_es_index_js-node_modules_github_memoize_dist_esm_index_-ced8cc","vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_mini-throt-a33094","vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_mini-th-85225b","app_assets_modules_github_ref-selector_ts"],()=>b(6780));var c=a.O()}]) +//# sourceMappingURL=repositories-5d98a5c6b82a.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/99B8F190A90B9C9BCC0ED63C9325D75BC3C29F93 b/home/.surf/cache/WebKitCache/Version 16/Blobs/99B8F190A90B9C9BCC0ED63C9325D75BC3C29F93 new file mode 100644 index 0000000..cfd7e41 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/99B8F190A90B9C9BCC0ED63C9325D75BC3C29F93 @@ -0,0 +1,29264 @@ +/* Bundle Includes: + * css/buttons.css + * css/components.css + * css/ui/mcomponents.css + * css/style.css + * css/fm-lists.css + * css/grid-table.css + * css/tabs.css + * css/empty-pages.css + * css/gallery.css + * css/onboarding.css + * css/download.css + * css/user-card.css + * css/account.css + * css/banners.css + * css/dropdowns.css + * css/jq-ui-custom.css + * css/labels-and-filters.css + * css/dialogs.css + */ + +.nonclickable{ + cursor:not-allowed !important +} +button input{ + border:0; + height:100%; + left:0; + margin:0; + opacity:0; + padding:0; + position:absolute; + top:0; + width:100%; + z-index:1 +} +button input[type=file]{ + cursor:pointer +} +button input[type=file]::-webkit-file-upload-button{ + cursor:pointer +} +button.icon-dropdown{ + border-radius:4px; + cursor:pointer; + float:right; + padding:2px 13px 2px 3px; + position:relative; + text-align:left +} +button.icon-dropdown.disabled>i{ + cursor:default +} +.icon-dropdown.disabled{ + cursor:default; + opacity:.6 +} +button.icon-dropdown.active,button.icon-dropdown:not(.disabled):hover{ + background-image:url(../imagery/mega-new-chat-sprite.40f37d9cda30e011.png); + background-position:-64px -657px; + background-repeat:no-repeat +} +button.icon-dropdown:not(.disabled).active{ + background-position:-64px -699px +} +button.icon-dropdown.active:after,button.icon-dropdown.active:before,button.icon-dropdown:not(.disabled):hover:after,button.icon-dropdown:not(.disabled):hover:before{ + border-radius:2px; + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +button.disabled.visible{ + cursor:default; + opacity:.6 +} +.link-button.left{ + margin-left:5px +} +.link-button.right{ + margin-right:5px +} +.link-button.light{ + align-items:center; + border-radius:4px; + color:#333; + display:flex; + font-size:13px; + height:32px; + margin:2px 0; + padding:0; + white-space:normal; + width:100% +} +.dropdown-item.link-button.light span,.link-button.light span{ + padding-right:20px +} +.dropdown-item.link-button.light:not(.disabled):hover,.link-button.light:not(.disabled):hover{ + background-color:var(--stroke-main) +} +button:not(.mega-button) .icon{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-repeat:no-repeat; + box-sizing:border-box; + float:left; + height:24px; + margin:3px 8px 4px 0; + width:24px +} +button.icon-dropdown.disabled>i{ + cursor:default +} +.icon-dropdown.disabled{ + cursor:default; + opacity:.6 +} +button.icon-dropdown.active,button.icon-dropdown:not(.disabled):hover{ + background-image:url(../imagery/mega-new-chat-sprite.40f37d9cda30e011.png); + background-position:-64px -657px; + background-repeat:no-repeat +} +button.icon-dropdown:not(.disabled).active{ + background-position:-64px -699px +} +button.icon-dropdown.active:after,button.icon-dropdown.active:before,button.icon-dropdown:not(.disabled):hover:after,button.icon-dropdown:not(.disabled):hover:before{ + border-radius:2px; + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +button.disabled.visible{ + cursor:default; + opacity:.6 +} +.link-button.left{ + margin-left:5px +} +.link-button.right{ + margin-right:5px +} +.link-button.light{ + align-items:center; + border-radius:4px; + color:#333; + display:flex; + font-size:13px; + height:32px; + margin:2px 0; + padding:0; + white-space:normal; + width:100% +} +.dropdown-item.link-button.light span,.link-button.light span{ + padding-right:20px +} +.dropdown-item.link-button.light:not(.disabled):hover,.link-button.light:not(.disabled):hover{ + background-color:var(--surface-main) +} +button:not(.mega-button) .icon{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-repeat:no-repeat; + box-sizing:border-box; + float:left; + height:24px; + margin:3px 8px 4px 0; + width:24px +} +.link-button{ + cursor:pointer; + display:block; + font-family:var(--text-font-family); + font-size:13px; + line-height:20px; + overflow:hidden; + position:relative; + text-align:left; + text-overflow:ellipsis; + transition:all .2s ease-in-out; + white-space:nowrap +} +.link-button.lato{ + font-size:0 +} +.link-button.lato-semibold span{ + color:#666; + font-size:14px +} +.link-button.lato-semibold:hover span{ + color:#333 +} +.link-button.right{ + margin-left:27px +} +.link-button.red{ + color:#e44c51 +} +.link-button.red:hover{ + color:#d90007 +} +.button i,.default-white-button i,.link-button i{ + font-size:inherit; + line-height:inherit +} +.dropdown-item.link-button.light,.link-button.light{ + border-radius:4px; + color:var(--text-color-high); + display:inline-block; + font-size:13px; + height:32px; + line-height:32px; + margin:2px 0; + padding:0; + white-space:normal; + width:100% +} +.dropdown-item.link-button.light:not(.disabled):hover,.link-button.light:not(.disabled):hover{ + background-color:rgba(0, 0, 0, .02); + box-shadow:0 0 0 1px rgba(0, 0, 0, .1); + color:var(--text-color-high) +} +.link-button.light i{ + float:left; + margin:4px 0 0 6px; + opacity:1 +} +.dropdown-item.link-button.light i.colorized{ + float:left; + margin:1px 0 0 6px; + opacity:1 +} +.link-button.light span{ + display:block; + padding-left:37px; + padding-right:20px +} +.dropdown-item.link-button.light span{ + display:block; + padding-left:35px +} +.tiny-button{ + background-color:#fff; + border-radius:4px; + box-sizing:border-box; + cursor:pointer; + float:right; + height:16px; + min-width:0; + opacity:0; + padding:0; + position:relative; + text-align:left; + transition:color .2s ease-in-out,box-shadow .2s ease-in-out,background-color .2s ease-in-out; + width:25px +} +.tiny-button:after,.tiny-button:before{ + border-radius:inherit; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.tiny-button:after{ + box-shadow:0 0 0 1px rgba(0, 0, 0, .1) +} +.tiny-button .tiny-icon{ + display:block; + margin:0 auto +} +.contacts-info:hover .tiny-button,.data-block-view:hover .tiny-button,.message.content-area:hover>.right-aligned-msg-buttons>.tiny-button,.message.shared-data.thumb:hover .tiny-button,.shared-link.thumb:hover .tiny-button,.tiny-button.active{ + opacity:1 +} +.contacts-info:hover .tiny-button.disabled,.data-block-view:hover .tiny-button.disabled,.message.content-area:hover>.tiny-button.disabled,.shared-link.thumb:hover .tiny-button.disabled,.tiny-button.active.disabled{ + cursor:default; + opacity:.6 +} +.tiny-button.active:not(.disabled),.tiny-button:not(.disabled):hover{ + box-shadow:0 0 0 1px rgba(0, 0, 0, .1) +} +.tiny-button.call{ + opacity:1; + position:absolute; + right:4px; + top:4px; + z-index:10 +} +.conversationsApp .button:not(.disabled)>i,.conversationsApp .button:not(.disabled)>span{ + cursor:pointer +} +.account.left-pane.info-block.backup-button i,.top-menu-item.backup i{ + --mask-color:var(--label-yellow) +} +.link-button.dropdown{ + align-items:center; + border:none; + color:var(--text-color-high); + cursor:pointer; + font:var(--text-body1); + overflow:unset; + padding:6px; + position:relative +} +.link-button.dropdown:not(.hidden){ + display:inline-flex +} +.link-button.dropdown:before{ + content:""; + left:0; + position:absolute; + top:0 +} +.link-button.dropdown+span{ + display:inline-flex; + flex-grow:1; + justify-content:center; + margin:0 8px +} +.link-button.dropdown i{ + --icon-size:24px; + -webkit-margin-end:8px; + margin:0; + margin-inline-end:8px; + transition:var(--transition-color) +} +.link-button.dropdown span+i{ + -webkit-margin-start:8px; + margin:0; + margin-inline-start:8px +} +.link-button.dropdown .dropdown-content{ + background:var(--surface-main); + border:var(--context-menu-border); + border-radius:12px; + box-shadow:0 5px 10px 0 rgba(0, 0, 0, .3); + box-sizing:border-box; + display:none; + font-size:0; + left:-3px; + min-width:200px; + padding:8px 0; + position:absolute; + top:36px; + transition:var(--transition-opacity); + z-index:5 +} +.fm-header-buttons .link-button.dropdown .dropdown-content{ + z-index:250 +} +.link-button.dropdown:hover .dropdown-content{ + display:block +} +.link-button.dropdown .dropdown-btn{ + --mask-color:var(--text-color-medium); + align-items:center; + background:var(--surface-main); + border:0; + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-medium); + cursor:pointer; + display:flex; + font:var(--text-body1); + margin:0 8px; + min-height:32px; + outline:none; + padding:0 8px; + position:relative; + text-align:start; + transition:var(--transition-bg-color), var(--transition-color); + width:calc(100% - 16px) +} +.link-button.dropdown .dropdown-btn:hover{ + --mask-color:var(--text-color-high); + background:var(--surface-grey-2); + color:var(--text-color-high) +} +.link-button.dropdown .separator{ + background-color:var(--divider-color); + display:block; + height:1px; + margin:8px 0 +} +.link-button.dropdown .dropdown-btn span{ + flex:1; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} + +.selection-status-bar{ + background-color:var(--stroke-grey-2); + border-left:2px solid var(--stroke-main); + box-sizing:border-box; + cursor:default; + flex-shrink:0; + height:64px; + padding:6px 12px +} +.rtl .selection-status-bar{ + display:rtl +} +.search .selection-status-bar{ + display:none +} +.search-multi .selection-status-bar{ + display:block +} +.fm-right-files-block.item-selected .selection-status-bar{ + -khtml-toast-notification:1; + margin-bottom:0; + opacity:1; + visibility:visible; + z-index:11 +} +.selection-status-bar .selection-bar-col .sel-notif-size-total{ + -webkit-margin-start:10px; + background-color:var(--stroke-main); + border-radius:50px; + color:var(--stroke-main-inverted); + display:inline-block; + height:28px; + line-height:28px; + margin-inline-start:10px; + padding:0 14px; + text-align:center +} +.selection-status-bar .selection-bar-col .sel-notif-size-total:empty{ + display:none +} +.selection-status-bar .selection-bar-col{ + color:var(--text-color-high); + float:left; + font:var(--text-body1); + line-height:28px; + margin-top:13px +} +.rtl .selection-status-bar .selection-bar-col{ + float:right +} +.selection-links-wrapper{ + float:right; + position:relative; + top:12px +} +.rtl .selection-links-wrapper{ + float:left +} +.selection-status-bar .mega-button{ + -webkit-margin-start:18px; + margin-inline-start:18px +} +.selection-status-bar .mega-button.small>div i{ + --icon-size:24px; + --mask-color:var(--icon-rest) +} +.btn-galleries,.btn-myfiles{ + background:transparent; + border:none; + border-radius:4px; + box-sizing:border-box; + color:var(--stroke-main-inverted); + cursor:pointer; + font:var(--text-body1); + height:32px; + line-height:32px; + margin:2px 0; + opacity:.7; + outline:0; + overflow:hidden; + padding:0 6px; + text-align:start; + text-overflow:ellipsis; + white-space:nowrap; + width:100% +} +.btn-galleries{ + -webkit-padding-start:4px; + padding-inline-start:4px +} +.btn-galleries i,.btn-myfiles i{ + -webkit-margin-end:8px; + --icon-size:24px; + --mask-color:var(--stroke-main-inverted); + float:left; + line-height:32px; + margin-inline-end:8px; + margin-top:4px +} +.btn-galleries.active i:not(.icon-arrow-down),.btn-myfiles.active i:not(.icon-arrow-down){ + --mask-color:var(--secondary-blue) +} +.rtl .btn-galleries i,.rtl .btn-myfiles i{ + float:right +} +.btn-galleries.active,.btn-galleries:hover,.btn-myfiles.active,.btn-myfiles:hover{ + background-color:var(--stroke-grey-1); + box-shadow:0 1px 4px 0 rgba(0, 0, 0, .1); + color:var(--stroke-main-inverted); + cursor:pointer +} +.btn-galleries.active,.btn-myfiles.active{ + opacity:1 +} +.btn-galleries span,.btn-myfiles span{ + -webkit-margin-end:8px; + margin-inline-end:8px +} +.btn-icon{ + background:transparent; + border:none; + border-radius:4px; + cursor:pointer; + font-family:inherit; + margin:2px 0; + outline:0; + padding:0; + text-align:start +} +.btn-icon:hover{ + background:var(--button-hover) +} +.btn-link{ + background:transparent; + border:none; + color:var(--text-color-success); + cursor:pointer; + font:var(--text-body2); + max-width:300px; + outline:0; + overflow:hidden; + padding:0; + text-align:start; + text-overflow:ellipsis; + white-space:nowrap +} + +.m-overlay{ + height:100vh; + left:0; + position:fixed; + top:0; + width:100vw; + z-index:149 +} +.m-menu-select .dropdown-item i{ + margin:0 +} +.cursor-pointer{ + cursor:pointer +} +.nw-fm-tree-arrow.rot-90:before{ + transform:rotate(90deg) +} +.m-tabs>div{ + color:var(--text-color-high); + cursor:pointer; + padding:.5rem 1.5rem; + position:relative; + transition:all .3s ease; + white-space:nowrap +} +.m-tabs>div:after{ + background:var(--text-color-info); + border-radius:3px 3px 0 0; + bottom:0; + content:""; + height:3px; + left:0; + opacity:0; + position:absolute; + right:0; + transform:scaleX(0); + transition:all .3s cubic-bezier(1, 0, 0, 1); + will-change:transform, box-shadow, opacity +} +.m-tabs>div.active:after{ + opacity:1; + transform:scale(1) +} +.ml-1{ + margin-left:.25rem +} +.ml-3{ + margin-left:.75rem +} +.ml-5{ + margin-left:1.25rem +} +.mr-4{ + margin-right:1rem +} +.mt-2{ + margin-top:.5rem +} +.mt-16{ + margin-top:4rem +} +.mx-auto{ + margin-left:auto; + margin-right:auto +} +.p-4{ + padding:1rem +} +.p-6{ + padding:1.5rem +} +.pl-18{ + padding-left:4.5rem +} +.pr-7{ + padding-right:1.75rem +} +.px-1{ + padding-left:.25rem; + padding-right:.25rem +} +.px-2{ + padding-left:.5rem; + padding-right:.5rem +} +.px-3{ + padding-left:.75rem; + padding-right:.75rem +} +.px-6{ + padding-left:1.5rem; + padding-right:1.5rem +} +.py-1{ + padding-bottom:.25rem; + padding-top:.25rem +} +.py-2{ + padding-bottom:.5rem; + padding-top:.5rem +} +.py-10{ + padding-bottom:2.5rem; + padding-top:2.5rem +} +.w-full{ + width:100% +} +.m-dropdown-item{ + --mask-color:var(--icon-rest); + align-items:center; + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-higher); + cursor:pointer; + display:flex; + font-size:14px; + height:32px; + max-width:100%; + overflow:hidden; + padding:0 8px; + position:relative; + text-align:initial; + text-overflow:ellipsis; + transition:var(--transition-color), var(--transition-bg-color); + white-space:nowrap +} +.m-dropdown-item.opened,.m-dropdown-item:hover{ + --mask-color:var(--icon-active); + background:var(--button-hover); + color:var(--text-color-high) +} +.m-dropdown-item.contains-submenu.icon-arrow-right-after:after{ + color:var(--icon-rest); + content:"\f281"; + font-family:fm-mono,sans-serif; + font-size:var(--icon-size, 16px); + font-style:normal; + line-height:1 +} +.m-dropdown-item.contains-submenu.icon-arrow-right-after.opened:after,.m-dropdown-item.contains-submenu.icon-arrow-right-after:hover:after{ + color:var(--icon-active) +} +.m-dropdown-item i{ + --icon-size:24px +} +.m-dropdown-item:not(.item-bold){ + font-family:var(--text-font-family) +} +.m-dropdown-item.item-bold{ + font-family:var(--text-font-family-bold) +} +.m-dropdown-item-label{ + font-size:12px +} +.content-visibility-auto{ + content-visibility:auto +} +.flex{ + display:flex +} +.flex-center{ + align-items:center; + justify-content:center +} +.flex-column{ + flex-direction:column +} +.flex-1{ + flex-grow:1 +} +.flex-row{ + flex-direction:row +} +.justify-between{ + justify-content:space-between +} +.justify-center{ + justify-content:center +} +.justify-end{ + justify-content:end +} +.items-center{ + align-items:center +} +.text-ellipsis{ + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.text-center{ + text-align:center +} +.text-color-high{ + color:var(--text-color-high) +} +.font-body-1{ + font:var(--text-body1) +} +.icon-size-6{ + --icon-size:24px +} +.icon-size-16{ + --icon-size:64px +} +.skeleton{ + animation:fadeInOutLoopSubtle 2s linear infinite; + background-color:#e5e5e5 +} +.mega-dialog.m-dialog{ + animation:dialogpopin .3s ease +} +.mega-dialog.m-dialog h3{ + font-weight:400; + margin:1.5rem 0 .8rem; + overflow:hidden; + padding:0 3rem; + width:100% +} +.mega-dialog.m-dialog i.icon-left{ + left:1.75rem; + position:absolute; + top:1.5rem +} +.mega-dialog button.m-dialog-close{ + right:1.5rem; + top:1.5rem +} +.m-dialog-overlay{ + animation:fadein .3s ease +} +.m-context{ + animation:contextpopin .2s ease +} +.grid-3-cols{ + grid-template-columns:repeat(3, minmax(0, 1fr)) +} +.grid-5-cols{ + grid-template-columns:repeat(5, minmax(0, 1fr)) +} +.grid-10-cols{ + grid-template-columns:repeat(10, minmax(0, 1fr)) +} +.grid-15-cols{ + grid-template-columns:repeat(15, minmax(0, 1fr)) +} +.m-context .m-dropdown-item.red i{ + --mask-color:var(--secondary-red) +} +i.text-color-medium{ + --mask-color:var(--text-color-medium) +} +.rotating{ + animation:rotate .8s linear infinite +} +@keyframes dialogpopin{ +0%{ + margin-top:30px; + opacity:0 +} +to{ + margin-top:0; + opacity:1 +} +} +@keyframes contextpopin{ +0%{ + margin-top:5px; + opacity:0 +} +to{ + margin-top:0; + opacity:1 +} +} +@keyframes fadein{ +0%{ + opacity:0 +} +to{ + opacity:1 +} +} + +body,td,th{ + color:var(--text-color-medium); + font:var(--text-body1) +} +body.dndc-warning *,body.dragging *{ + cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAMAAADQkB38AAAAk1BMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAADq6uoAAADKysrIyMgAAAAAAAAAAAAAAAAAAAAAAABkZGRjY2MAAAAAAABSUlLu7u6ioqL7+/v19fX09PTn5+fm5ubg4OD+/v77+/v5+fn4+Pj+/v79/f36+vr5+fn////+/v79/f3////wraXmd2reRzbWGwXVFgAAAADd3lkAAAAAKnRSTlMAAAECAwQHCQwMDg4OEhUYGhscHBwfIic5e35+hoaK1NbY2drb3t76+/v4f/0JAAAAzElEQVR42nXPA7oEMRBF4bBqbJtt7X9zw5vGw/n8hyX+SUeRlp9qSFEBrSFHBbSJ0CZCmwhtIvQ3Qiv8pUCobCK0gdE3qmM0n70b1DEa9fgdVcdf1v415tta66PvH9ctrNBg2NbLa5xmWRpfl1/URLpzS/JPya0rkNrEOYq3CmhPqcP0ZIHkZ3n0Kc98AnJQYcgOz9Xxs0PaVQ/tCWind/el+8QCFa+87+e9FSugNO3F4RIEl8OibYRDabg/HI+HfXb2RqksMZNVEvSrJ0vxKjuSIILOAAAAAElFTkSuQmCC), auto !important +} +body.dndc-copy *{ + cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAYAAADnTu3OAAABq0lEQVRIx62UvUoDQRDHN+bgCIQUghA0INj4DFr4EHmF3BsINkLKFGLjK1xt7G2sQ4rYiPgBIVgkkOKqHOTuSNb9hzncnLcfl8vAwLAz+9ud2ZllnHO2T/0zGDvgJLCZQooAXYJpoUWAtRSog+4MVEFLAfOgpYFZ6F6AMnRvQFtoIaANtDDQVNOdgLqbWrWNSmi6Cjf2qdBWjh4VApJ9LLQBX4661ilLsHrp0cvC5vN5PUmS2/V6/SZcMRQ21uDLHrL1fVFdmiksCIJzsflr9PPMH148fvN0tVHYWIMPMcoPlqCb2gyHw8Zqtfruv97z68fLXIUPMYPBoPEPuHUKY5UwDLu4hQxIRV5DzGKx6GKPDuiIGr0jNRMQMYjFHh0Q/RWjXjIoK/AhBrFpT6qANVHwxBYo6phQl6iBURR92KaMWBPQnc1mPdtHmU6nPVPKTqfTacVxPO6P9G2DGM/zWqZHqSAF3/cvRDpjVWPDhxiabW3bQKqYmHa7fTaZTO6Wy+UnHgoKG2vw0VRVTY0tQ3H6IY3kCWmT1moyzAaYpu/QSMpfl0M+ZgSW0V8721qNKliUZwAAAABJRU5ErkJggg==), auto !important +} +body.dndc-download *{ + cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAYAAADnTu3OAAABwUlEQVRIx62UQUsCQRTHx1wQQTwEgZQQdOkzVNCH8Cu436DoEnj0EF36CnbVOnfxGOLBLhFWJNJBwYMnBXcXneYvb2xcd3Z2XQf+8Jj39jf73rw3jHPOdql/g7E9Tgs206w4wAzBQqFxgFkJDINuDdRBEwGDoImBfuhOgCp0Z8Co0FjAKNDYQFNNtwKG/WmkttEtmq7YjX0sVAzQQSwg2YdCefgClImcsgLLJR49P2w0GuU8z7tdLBbvwuVCsLEHn/+QteeL6lKQsPF4fCo+/ur8vvCHps1vni6Xgo09+BCjfWAJuqxNu93Oz+fz78bbPb+qnwcKPsS0Wq38BnDtFMZS0+m0gr9QAXKpe4iZTCYVfBMGtESNPpCaCYgYxOKbMCD6y0W9TEDEIFb2pA6YFQX3JLDZfdyYktef5xVQ1NGjLtEDHcfpqimrUMCu6xerlBFrAmaGw2HVfymAqjB5KYPBoGpK2SqXy0XXdXuNTnjbIMa27aLpUlJIoVarnYl0errGhg8xNNuhbYOVxsSUSqWTfr9/N5vNPnFREGzswUdTlTY1tgrF6fs0kkekAu1lVVgUoEzfopFUny6LfMwITKI/Vh1S/Komqc4AAAAASUVORK5CYII=), auto !important +} +body.dndc-move *{ + cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAMAAADQkB38AAAApVBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAADq6uoAAADKysrIyMgAAAAAAAAAAAAAAAAAAAAAAABkZGRjY2MAAAAAAABSUlLu7u6ioqL7+/v19fX09PTn5+fm5ubg4OD+/v77+/v5+fn4+Pj+/v79/f36+vr5+fn////+/v79/f3////8/fvt9ebT5cHO4rmw0JGtz4ytzoyRvmR8skd2rj5zrDoAAAATX568AAAAKnRSTlMAAAECAwQHCQwMDg4OEhUYGhscHBwfIic5e35+hoaK1NbY2drb3t76+/v4f/0JAAAA10lEQVR42nXPBZLDUAiA4SjU3V3jbvc/2i4NqTH9x7+nKD/SPU9XH70heBXrG6JXkUoklUgqkVQgqURSiaQSSVWBpB/o1cE7evMZNXhHb9RDCl7H/60txiRrrY+2fVy3eAUGw7a+vEZZUWTRdVmjDqB3bkn5KLl1FU7bRGWZh6TRVmM0T1mZBR5hdjIZwS5i36PKwgZGdF7oYoPn1/Fzg7B7PbQHRnN6T/lL94nJqOHKqj9vrVBjVI324nBxnMth0TaUBlUD+8PxeNhHsgZVzQREMDWVSfQHABQtFjzZy/cAAAAASUVORK5CYII=), auto !important +} +body.dndc-to-shared *{ + cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAYAAADnTu3OAAABo0lEQVRIx62UzWrCQBDH15oSBPFQKEgbKPTSNyj0NXwFPfUVCh499DEE6Sv0ESTnUvoB1pOCB08KJkG3808nuKbZjxgX/jDsTH6bmZ1ZIaUUp9TeEOJM8oItNKsM0GeYEVoG2MiAJujRQB20ErAIWhmYh54EqEJPBnSFlgK6QEsDbTU9Cmj6U6e20S2ertKNfUMKCnRZCsj2FakFX4F855QVWLPy6OVhi8WimSTJ0263eyNXDMHGHnz5Qw6eL65LO4Mtl8s7+vhL/oykfL2X8uX8T7BpDz7EaB9Yhqa1CcOwtd1uv2X4KOVIFIt8iBmPx61/wINThKit1+t++mcqIFvqHsWsVqs+vjEBParRe5qaDUgxiMU3JqCfXgDqNTI0N3yIodisJ3XABhU8cQVSHRPuEj0wiqIP15QRawP68/l84Hops9lsYEvZ63a7QRzHE1vbIKbX6wW2S6khheFw+EDpTHSNDR9ieLaNbYNVx8R0Op3b6XT6vNlsPnFREGzswcdTVbc1tgrF6Rc8ktesNu81VJgLMEvf45FUny6PfcIKrKJfLghr2vp93yQAAAAASUVORK5CYII=), auto !important +} +body.dndc-to-contacts *{ + cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAQAAABNRyVFAAABO0lEQVR42o3SgYYCQRgH8P9uyxhWOCJ3cQQ9Q6/RK9y9QxQBQgD2CXqCHuMcLCRVrMAdIXBHu6P5bph8dqfJ3PcnH3585t+C/hn7E5MZxKiNHwrDLA1AaRDTEGQahkzDkGkYMg1DpmHINAyZIgiZPoTNgXhc+Ct6nI4PWvaMNiRH+E5blob+QmanVE31miqq9FpNTykaUKCDLgw7D/Q+p4wmJhnlpPfnQR3GECbxZ/t6WNG4lhVdDx9tCzmIfmf5DZi5bTn9zBA1YaI22R3MSG2QNKGgamIRz5gmRBVEE0qtfPCqIB1Ybn2ny60Lxffc95ivuXs6eetVhVtPVbz33MdEkMthWdQLL4vlENKtB2ghHfWPi8tOK60uu+Ni1EeKllu4pRJP6OLFpGs2adk9BCIkEPYjM1sEODCUP1BoXRVnWXDhAAAAAElFTkSuQmCC), auto !important +} +body.dndc-to-conversations *{ + cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAYAAADnTu3OAAABqElEQVRIx62UzUrDQBDHtzZQCqUHQShaELx48ODZ1+jJe/MWQi9CDz5GDuIDePENSr2K+AE1FxsI0osp5INmu/8ywW3MZjdNBwaGndnf7szOLOOcs33qn8HYASeBzRRSBdgiWCm0CrCdAcugOwNV0FrAImhtYB66F6AM3RvQFFoJaAKtDNTVdCdg2U2N2kYlNF2VG/tUaL9AjyoByT4W2oWvQFvGKUuwTu3Ry8N83+8kSXKTpumLcMVQ2FiDL3/I1vdFdellsMVicS42fzy6v/z66ZtfPnxtFDbW4EOM8oMl6KY20+m0u1qtPm+ff/jF/axQ4UPMZDLp/gNuncJYY7lcjnALGZCJvIaYIAhG2FMGtESNXpGaDogYxGJPGRD9FaNeMigv8CEGsVlPqoBtUfDEFCjqmFCXqIFRFL2ZpoxYHbDled7Y9FHm8/lYl7I1HA77cRzPdG2DGNu2+7pHaSAFx3GuRDozVWPDhxia7dK2gTQxMYPB4Mx13bswDN/xUFDYWIOPpqqpa2wZitMPaSRPSHu01pZhJsAsfYtGUv66LPIxLbCOrgEN/25uqs1k2wAAAABJRU5ErkJggg==), auto !important +} +body.dndc-to-rubbish *{ + cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAQAAABNRyVFAAABPUlEQVR42o3SAYb7QBQG8C9pGEMUf0r9tyyFnqHX6BV277CkFFAUQE7QE/QYayFQ1bZEwS5FwS7NjM7bYSqS1xnd9xGDH898GdAf4z4x2UGMxvihsIxRP5QWMRqGjIYho2HIaBgy+hhyGoQByiGjCENOg7A9EOHCnzGo0/NBx/6jC1lH+FY7lj76hTU7pXpq1qRImbWenlK0oEAPfVh2Hpl9QTllNjkVZPbnURPGEDbxR/d6WNFbIyu6Ht67NXRB9DMrbsDO7VTQ9wxRGyZ6k9/BnPQGSRsKUtkdzIgURBtKoy1kyeiqIRmstr7V1ZZD8TX3XeZzzlcnLwNV8npU+Trgl4kgl+OqbBZelcsxJK8H6CCdDI+Ly85ooy+742IyRIoOL9xRiX/o48mmb0/SsXsIREggbo8sQQQw+Ci/0ABXxd/zTcIAAAAASUVORK5CYII=), auto !important +} +body.dndc-sort *{ + cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAMAAADQkB38AAAAnFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAADq6uoAAADKysrIyMgAAAAAAAAAAAAAAAAAAAAAAABkZGRjY2MAAAAAAABSUlLu7u6ioqL7+/v19fX09PTn5+fm5ubg4OD+/v77+/v5+fn4+Pj+/v79/f36+vr5+fn////+/v79/f3////O4rnG3a++2KOtz4ytzoyRvmR2rj5zrDoAAABHwXXkAAAAKnRSTlMAAAECAwQHCQwMDg4OEhUYGhscHBwfIic5e35+hoaK1NbY2drb3t76+/v4f/0JAAAA3ElEQVR42nXPBZaEMAyAYaik4+6uOCzt3P9uS5Ywlrf/868a759kkkj/rzeE5EH6hiZ5oDJE5YjKEZUjKkdUjqgcUX2GqB+Y1ME7JvMZNnjHZNQzGLyOV9ZmY6K11scwPK5btAKDYVsur2lpbZlelzVKANm5Fc7lmXPFretRYpNamydJZl26FYT6VKJV6sqTJoTQViWJtc6Gz69GL4xNg+fX8XODsHs9tAdCPb3/0JfuE00ozCqoPx+sjCD0VXtxuETR5bBoK69BX5n+cDwe9g1ag77QYAxo4ROxfgHnhCtTck1C2wAAAABJRU5ErkJggg==), auto !important +} +body *{ + -webkit-touch-callout:none; + user-select:none +} +body :not(input):not(textarea){ + -webkit-user-select:none +} +.loading-cursor,.progress-cursor,.wait-cursor{ + cursor:progress !important +} +.fmdb-working #topmenu .membership-status{ + background-image:url(../imagery/mega-ajax-loader-tiny.621d323cd3d054fe.gif) !important; + background-position:50% !important; + background-repeat:no-repeat !important; + background-size:auto !important +} +.fm-breadcrumbs:first-child:not(.public-links) .loading{ + display:none; + left:calc(50% - 8px); + position:absolute; + top:0 +} +.block-loading-spinner,.wait-cursor .fm-breadcrumbs:first-child:not(.public-links) .loading{ + animation:rotate .8s linear infinite; + animation-timing-function:steps(8); + background-position:100% 0; + display:block; + font-size:0 !important +} +.wait-cursor .fm-breadcrumbs:first-child:not(.public-links) .not-loading{ + opacity:0 +} +.fmdb-working #topmenu .membership-status,.wait-cursor .fm-breadcrumbs:first-child:not(.public-links) .right-arrow-bg>span{ + visibility:collapse +} +html.dark-mode{ + filter:invert(1) +} +html.dark-mode .loading-main-block .loading-m-block,html.dark-mode .loading-main-block .loading-percentage{ + background-color:#000; + filter:invert(1) +} +html.dark-mode .account.qr-icon{ + background:#fff; + filter:invert(1); + padding:5px; + position:absolute +} +html.dark-mode .qr-settings .settings-left-block.slide-in-out .content-txt{ + position:absolute; + top:178px; + width:235px +} +html.dark-mode .mega-dialog.two-factor-dialog .two-factor-qr-code{ + filter:invert(1); + padding:5px +} +html.dark-mode .achievements-icon,html.dark-mode .browsers.icon.medium,html.dark-mode .business-icon.semi-medium,html.dark-mode .logo,html.dark-mode .main-loader,html.dark-mode .nw-fm-left-icons-panel,html.dark-mode .plan-icon,html.dark-mode .sub-loader,html.dark-mode img,html.dark-mode video{ + filter:invert(1) +} +img:not([src]){ + visibility:hidden +} +html{ + font-size:100%; + -webkit-text-size-adjust:100%; + -ms-text-size-adjust:100% +} +body,html{ + height:100%; + width:100% +} +body{ + background-color:#fff !important; + font-family:var(--text-font-family); + margin:0; + overflow:hidden; + padding:0; + position:relative; + top:0 +} +body.mobile.bottom-pages{ + overflow:visible +} +.lato{ + font-family:var(--text-font-family) +} +.lato-semibold{ + font-family:var(--text-font-family-semibold) +} +input[type=number]{ + -moz-appearance:textfield +} +input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{ + -webkit-appearance:none +} +input[type=search],input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-results-button,input[type=search]::-webkit-search-results-decoration{ + -webkit-appearance:none +} +input:-webkit-autofill,input:-webkit-autofill:focus{ + -webkit-text-fill-color:#878787; + -webkit-box-shadow:inset 0 0 0 50px #fff +} +div,input,object,span,texarea{ + outline:none; + resize:none +} +.bottom-pages.developers #pageholder{ + background-image:none +} +.italic{ + font-style:italic +} +.left-textalign{ + text-align:start +} +.right-textalign{ + text-align:end !important +} +.centered-textalign{ + text-align:center +} +a,a:active,a:hover,a:link,a:visited{ + cursor:pointer; + outline:none; + text-decoration:none +} +.bold,strong{ + font-family:source_sans_prosemibold,Arial,sans-serif; + font-weight:400 +} +input,textarea{ + -moz-appearance:none; + font-family:source_sans_proregular,Arial,sans-serif; + outline:none; + resize:none +} +a,a:active,a:focus img,a:hover,a:link,a:visited{ + outline:none +} +.image-scale-hack{ + -ms-transform:rotate( .0001deg ); + -webkit-transform:rotate( .0001deg ); + transform:rotate( .0001deg ) +} +#help2 .clear{ + clear:both; + display:block; + margin:0; + padding:0 +} +.clear{ + clear:both +} +.clear_r{ + clear:right +} +.clear_l,.clear_r{ + margin:0; + padding:0 +} +.clear_l{ + clear:left +} +.right{ + float:right +} +.left,.rtl .right{ + float:left +} +.rtl .left{ + float:right +} +.centered-content{ + text-align:center +} +.right-text-align{ + text-align:right +} +.white-bg{ + background-color:#fff +} +.logo{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-6px -383px; + background-repeat:no-repeat; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + cursor:pointer; + display:none; + float:left; + height:24px; + margin:6px 0 0 12px; + width:24px +} +.bottom-pages .logo,.new-startpage .logo{ + display:block +} +.loading .top-head{ + z-index:1000 +} +.bottom-pages .top-head:after{ + background-color:rgba(0, 0, 0, .05) +} +.relative{ + position:relative +} +.checkdiv.right{ + float:right +} +.centered-checkbox{ + clear:both; + font-size:0; + padding:0 0 7px; + text-align:center +} +.centered-checkbox .checkboxOff,.centered-checkbox .checkboxOn{ + display:inline-block; + float:none; + margin-left:0; + vertical-align:top +} +.centered-checkbox .radio-txt{ + display:inline-block; + float:none; + padding-right:0; + vertical-align:top +} +.new-registration-checkbox .register-st2-button{ + background-image:none; + float:right; + margin-top:-7px; + padding:0 +} +.new-registration-checkbox .register-st2-button,.register1 .register-st2-button{ + margin-bottom:33px +} +.new-registration-checkbox .register-st2-button-arrow{ + background-image:none; + -webkit-border-radius:5px; + -khtml-border-radius:5px; + border-radius:5px; + padding:0 15px +} +.login-page-create-new{ + float:right; + font-size:14px; + padding:35px 0 0 +} +.main-mid-pad.big-pad{ + padding-bottom:40px; + padding-top:67px +} +.login-page-create-new span{ + cursor:pointer +} +.new-registration-checkbox .radio-txt{ + padding-top:2px; + vertical-align:top +} +.radio-txt a{ + color:var(--text-color-info) +} +.radio-txt a:hover{ + text-decoration:underline +} +label span.black{ + color:#000 +} +.affiliate-block.a-form input.checkboxOff,.affiliate-block.a-form input.checkboxOn,.browsers input.checkboxOff,.browsers input.checkboxOn,.download-checkbox input.checkboxOff,.download-checkbox input.checkboxOn,.fm-account-blocks input.checkboxOff,.fm-account-blocks input.checkboxOn,.mega-dialog input.checkboxOff,.mega-dialog input.checkboxOn,.tips input.checkboxOff,.tips input.checkboxOn{ + margin:0 +} +.main_bg_image{ + padding-bottom:160px +} +.nw-fm-percentage{ + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + float:left; + overflow:hidden; + position:relative +} +.nw-fm-percentage ul{ + list-style-type:none +} +.nw-fm-percentage li{ + position:absolute; + top:0 +} +.nw-fm-percentage,.nw-fm-percentage li,.nw-fm-percentage p,.nw-fm-percentage ul{ + height:148px; + margin:0; + padding:0; + width:148px +} +.nw-fm-percentage span{ + display:block; + height:148px; + width:74px +} +.nw-fm-percentage ul :nth-child(odd){ + clip:rect(0, 148px, 148px, 74px) +} +.nw-fm-percentage ul :nth-child(2n){ + clip:rect(0, 74px, 148px, 0) +} +.right-c span{ + -moz-border-radius-topleft:74px; + -moz-border-radius-bottomleft:74px; + -webkit-border-bottom-left-radius:74px; + border-bottom-left-radius:74px; + -webkit-border-top-left-radius:74px; + border-top-left-radius:74px +} +.left-c span{ + -moz-border-radius-topright:74px; + -moz-border-radius-bottomright:74px; + -webkit-border-bottom-right-radius:74px; + border-bottom-right-radius:74px; + -webkit-border-top-right-radius:74px; + border-top-right-radius:74px; + margin-left:74px +} +.chart.data .contents-txt,.chart.data .gb-txt,.chart.data .pecents-txt{ + color:var(--text-color-high); + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.chart.data .gb-txt,.chart.data .of-txt,.chart.data .pecents-txt{ + display:inline-block; + padding-bottom:2px; + vertical-align:bottom +} +.chart.data .perc-txt{ + color:var(--text-color-medium); + display:inline-block; + font-family:source_sans_prolight,Arial,sans-serif; + font-size:34px; + height:40px; + line-height:40px; + position:relative +} +.free .fm-right-account-block:not(.active-achievements) .bandwidth .chart.data .perc-txt,.free .fm-right-block:not(.active-achievements) .bandwidth .chart.data .perc-txt,.no-percs .chart.data .perc-txt{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-10px -11854px; + width:30px +} +.free .bandwidth .chart.data .perc-txt:before,.no-percs .chart.data .perc-txt:before{ + content:"\00a0" +} +.chart.data .size-txt{ + color:var(--text-color-success); + display:inline-block; + font:var(--text-h2); + vertical-align:bottom +} +.exceeded .chart.data .size-txt{ + color:var(--text-color-error) +} +.going-out .chart.data .size-txt{ + color:var(--text-color-warning) +} +.chart.data .of-txt{ + color:var(--text-color-low) +} +.chart.icon{ + left:26px; + position:absolute; + top:44px; + z-index:10 +} +.rtl .chart.icon{ + left:auto; + right:26px +} +.terms-top-txt{ + height:300px; + line-height:21px; + margin-bottom:5px; + overflow-x:hidden; + overflow-y:scroll; + padding:12px +} +.new-registration .register-pass-status-line1,.new-registration .register-pass-status-line2,.new-registration .register-pass-status-line3,.new-registration .register-pass-status-line4,.new-registration .register-pass-status-line5{ + height:2px; + margin-right:5px; + width:80px +} +.new-registration .register-pass-status-line5{ + margin-right:0 +} +.new-registration{ + padding-bottom:20px +} +.bus-reg-body .new-registration{ + margin-top:-4px; + padding-bottom:12px +} +.change-pass-block .notice-input-block.last{ + margin:4px 0 0 +} +.new-messages-indicator,.notification-num{ + border-radius:9px; + box-sizing:border-box; + color:var(--secondary-white); + display:block; + font:var(--text-body2); + height:18px; + margin:-6px 0 0; + max-width:100%; + min-width:18px; + overflow:hidden; + padding:0 3px; + position:relative; + text-align:center; + text-overflow:ellipsis +} +.nw-fm-left-icon.conversations .new-messages-indicator{ + background-color:#2ba6de +} +.new-messages-indicator .chat-pending-call{ + display:block; + float:left; + margin-top:-1px +} +.notification-num{ + display:inline-block; + margin:0 -10px 0 12px; + position:absolute; + top:2px; + z-index:1 +} +.new-messages-indicator{ + position:absolute; + right:6px; + top:13px +} +.top-chat-notification .notification-num{ + background-color:#2ba6de +} +.notification-item.template{ + display:none +} +.notification-item.clickable{ + cursor:pointer +} +.notification-item{ + display:block +} +.notification-item:nth-of-type(2n){ + background:var(--surface-grey-3) +} +.notification-item:hover{ + background:var(--surface-grey-4) +} +.notification-list{ + max-height:481px; + overflow:auto; + padding:0 !important +} +.notification-list,.notification-scr-list{ + box-sizing:border-box +} +.empty .fm-notifications-bottom,.empty .notification-scr-list,.loading .fm-notifications-bottom,.no-new-notifications .notification-scr-list,.notification-popup-loading{ + display:none +} +.loading .notification-popup-loading{ + display:block; + text-align:center +} +.notification-popup.loading .notification-popup-empty{ + display:none +} +.notification-empty-icon,.notification-loading-icon{ + --icon-size:64px; + --mask-color:var(--icon-rest); + margin:96px auto 0 +} +.notification-popup-loading-txt{ + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body1); + margin:36px 0 96px; + position:relative +} +.notification-popup-loading-txt span{ + vertical-align:middle +} +.notification-loading-spinner{ + --icon-size:32px; + display:inline-block; + vertical-align:middle +} +.loading .notification-loading-spinner{ + animation:rotate 2s linear infinite; + animation-timing-function:steps(8) +} +.notification-popup-empty{ + display:none +} +.empty .notification-popup-empty,.no-new-notifications .notification-popup-empty{ + display:block; + text-align:center +} +.notification-popup-empty img{ + padding-top:40px; + width:218px +} +.notification-popup-empty-txt{ + color:var(--text-color-medium); + font:var(--text-body1); + margin:36px 0 96px +} +.notification-empty{ + display:none +} +.empty .notification-empty{ + -webkit-margin-start:-72px; + display:block; + height:270px; + left:50%; + margin:-135px 0; + margin-inline-start:-72px; + position:absolute; + text-align:center; + top:50%; + width:400px +} +.notification-scroll{ + box-sizing:border-box; + max-height:490px; + overflow:hidden; + position:relative; + width:100% +} +.notification-status-icon{ + display:flex; + position:relative +} +.notification-type{ + box-sizing:border-box; + display:flex; + flex-direction:column; + table-layout:fixed; + width:calc(100% - 52px) +} +.notification-avatar{ + border-radius:100%; + color:#fff; + display:block; + font-size:23px; + height:32px; + line-height:48px; + margin-top:12px; + position:relative; + text-align:center; + text-transform:uppercase; + width:32px +} +.notification-item .avatar-wrapper{ + color:#fff; + font-size:18px; + height:32px; + line-height:32px; + margin:0; + width:32px +} +.notification-item .avatar-wrapper img{ + height:32px; + width:32px +} +.notification-accepted-bl,.notification-request-buttons{ + align-self:flex-start; + margin:2px 0; + padding:0 20px 0 12px; + text-align:right +} +.fm-dialog-button.notifications-button{ + margin-top:0 +} +.nt-contact-request.accepted .notification-accepted-bl,.nt-contact-request .notification-request-buttons{ + display:table-cell +} +.notification-accepted-bl,.nt-contact-request.accepted .notification-request-buttons,.nt-contact-request.not-now .notification-request-buttons{ + display:none +} +.notification-accepted{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-14px -7100px; + background-repeat:no-repeat; + color:var(--text-color-medium); + font-size:13px; + line-height:18px; + margin:0 14px 0 0; + padding:2px 0 2px 28px +} +.notification-avatar-icon{ + background:#fff; + border-radius:50%; + height:16px; + position:absolute; + right:-4px; + top:-4px; + width:16px +} +.rtl .notification-avatar-icon{ + left:-8px; + right:auto +} +.black{ + color:#000 +} +.notification-avatar-icon i{ + --icon-size:16px; + display:none +} +.nt-contact-accepted .notification-avatar-icon i.plus,.nt-contact-deleted .notification-avatar-icon i.cross,.nt-contact-request-blocked .notification-avatar-icon i.minus,.nt-contact-request-denied .notification-avatar-icon i.minus,.nt-contact-request-ignored .notification-avatar-icon i.minus,.nt-contact-request .notification-avatar-icon i.contact,.nt-incoming-share .notification-avatar-icon i.plus,.nt-new-files .notification-avatar-icon i.plus,.nt-payment-reminder-notification .notification-avatar-icon i.exclamation,.nt-revocation-of-incoming .notification-avatar-icon i.minus{ + display:block +} +.nt-new-files .notification-avatar-icon i{ + --mask-color:var(--secondary-green) +} +.nt-incoming-share .notification-avatar-icon i{ + --mask-color:var(--secondary-orange) +} +.nt-contact-request .notification-avatar-icon i{ + --mask-color:var(--secondary-blue) +} +.nt-contact-accepted .notification-avatar-icon i,.nt-incoming-share .notification-avatar-icon i{ + --mask-color:var(--secondary-orange) +} +.nt-contact-deleted .notification-avatar-icon i,.nt-payment-reminder-notification .notification-avatar-icon i{ + --mask-color:var(--secondary-red) +} +.nt-contact-request-blocked .notification-avatar-icon i,.nt-contact-request-denied .notification-avatar-icon i,.nt-contact-request-ignored .notification-avatar-icon i,.nt-revocation-of-incoming .notification-avatar-icon i{ + --mask-color:var(--secondary-grey) +} +.notification-item .notification-icon{ + --icon-size:32px; + display:block; + flex-grow:0; + flex-shrink:0; + height:32px; + width:32px +} +.notification-item .notification-icon i{ + display:none +} +.nt-payment-notification .notification-icon .payment-icon,.nt-payment-reminder-notification .notification-icon .payment-icon,.nt-takedown-notification .notification-icon .takedown-icon,.nt-takedown-reinstated-notification .notification-icon .reinstated-icon{ + display:block +} +.notification-avatar img{ + height:48px; + width:48px +} +.notification-username{ + color:var(--text-color-high); + display:block; + font:var(--text-body1-bold); + overflow:hidden; + padding:0; + text-overflow:ellipsis; + white-space:nowrap +} +.notification-content{ + box-sizing:border-box; + min-height:48px; + overflow:hidden; + padding:8px 12px 0; + vertical-align:middle +} +.notification-info{ + word-wrap:break-word; + color:var(--text-color-high); + display:block; + font:var(--text-body2); + padding:1px 0 +} +.notification-date{ + -webkit-padding-start:12px; + color:var(--text-color-medium); + display:block; + font:var(--text-caption); + margin-bottom:6px; + padding-inline-start:12px +} +body.notification-body{ + background-color:#f2f2f3 !important +} +#fmholder{ + height:100%; + min-width:987px; + position:absolute; + width:100% +} +.nt-circle-bg1{ + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + margin:34px 0 7px 230px +} +.nt-circle-bg1,.nt-circle-bg2{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:52px; + width:52px +} +.nt-circle-bg2{ + border:2px solid #fff; + -moz-border-radius:100%x; + -webkit-border-radius:100%; + border-radius:100% +} +.nt-circle-bg3{ + background-color:#5b5a59; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:48px; + width:48px +} +.nt-circle-date{ + font-size:23px; + line-height:24px; + padding:4px 0 0 +} +.nt-circle-date,.nt-circle-month{ + color:#fff; + display:block; + text-align:center +} +.nt-circle-month{ + font-size:13px; + line-height:12px; + text-transform:uppercase +} +.new-notifications-bg{ + background-color:rgba(0, 0, 0, .05); + height:100%; + margin-left:48px; + position:absolute; + width:256px +} +.nt-main-date{ + color:#777; + float:left; + font-size:13px; + height:63px; + padding:23px 19px 0 0; + text-align:right; + width:256px +} +.notification-nw-pad,.nt-main-date{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box +} +.notification-nw-pad{ + display:table-cell; + height:62px; + padding:4px 0 0 64px; + vertical-align:middle +} +.nt-red-bar{ + background-color:#d11e00; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + float:left; + font-size:15px; + font-weight:400; + height:50px; + line-height:19px; + padding:15px 15px 16px 16px; + width:305px +} +.red-bar-txt{ + color:#fff; + display:block; + height:19px +} +.nt-white-bar{ + background-color:#fff; + border-bottom:1px solid #e5e5e5; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:51px; + margin-left:305px +} +a.nt-back-button:hover{ + background-position:left -148px +} +.nt-back-button span{ + -moz-border-radius-bottomright:4px; + -moz-border-radius-topright:4px; + background-color:#dadee1; + -webkit-border-bottom-right-radius:4px; + border-bottom-right-radius:4px; + -webkit-border-top-right-radius:4px; + border-top-right-radius:4px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#363636; + display:block; + font-size:14px; + height:30px; + height:30px; + line-height:29px; + padding:0 10px 0 8px +} +a.nt-back-button:hover span{ + background-color:#f0373b; + color:#fff +} +.nt-settings-button,a.nt-settings-button,a.nt-settings-button:active,a.nt-settings-button:link,a.nt-settings-button:visited{ + background-color:#dadee1; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:block; + float:left; + height:30px; + margin:10px 0 0 10px +} +a.nt-settings-button:hover{ + background-color:#f0373b; + color:#fff +} +a.nt-settings-button:hover span{ + color:#fff +} +.tagit-new{ + display:none +} +form{ + margin:0; + padding:0 +} +.facebook-lnk{ + background-color:#3868ab; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + display:block; + height:24px; + margin:4px 16px 4px 0; + width:24px +} +.facebook-lnk:hover{ + height:30px; + margin:1px 13px 1px -3px; + width:30px +} +.facebook-lnk .social-icon{ + background-position:11px -156px +} +.twitter-lnk{ + background-color:#35bde5; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + display:block; + height:24px; + margin:4px 16px 4px 4px; + width:24px +} +.twitter-lnk .social-icon{ + background-position:-33px -156px; + left:4px +} +.twitter-lnk:hover{ + height:30px; + margin:1px 13px 1px 1px; + width:30px +} +.rss-lnk{ + background-color:#f4811e; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + display:block; + height:24px; + margin:4px; + width:24px +} +.rss-lnk .social-icon{ + background-position:-77px -156px; + left:4px +} +.rss-lnk:hover{ + height:30px; + margin:1px; + width:30px +} +.social-float{ + float:left; + position:relative +} +.social-icon{ + background-image:url(../imagery/mega-blog-new-sprite.81eab3edf0ea431c.png); + background-repeat:no-repeat; + display:block; + height:24px; + left:0; + position:absolute; + top:4px; + width:24px +} +.social{ + padding-bottom:73px; + position:relative +} +.social-arrow{ + background-image:url(../imagery/mega-blog-new-sprite.81eab3edf0ea431c.png); + background-position:0 -269px; + background-repeat:no-repeat; + display:block; + height:54px; + width:18px; + width:100%; + z-index:101 +} +.social-arrow,.social-block{ + display:none; + position:absolute +} +.social-block{ + background-color:#fefefe; + border:1px solid #d4d4d4; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + -webkit-box-shadow:0 1px 0 rgba(50, 50, 50, .05); + -moz-box-shadow:0 1px 0 rgba(50, 50, 50, .05); + box-shadow:0 1px 0 rgba(50, 50, 50, .05); + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + cursor:default; + min-height:40px; + padding:10 15px 15px; + top:53px; + width:281px; + z-index:100 +} +.active .social-arrow,.active .social-block{ + display:block +} +.social-block h2{ + border-bottom:1px solid #e2e2e2; + font-size:17px; + margin-bottom:15px; + padding:0 0 7px +} +.facebook-lnk h2{ + color:#3867ab +} +.twitter-lnk h2{ + color:#2ca5c9 +} +.google-plus h2{ + color:#d83500 +} +.rss h2{ + color:#f4811e +} +.rss-view-all{ + background-image:url(../imagery/mega-blog-new-sprite.81eab3edf0ea431c.png); + background-position:-12px -46px; + background-repeat:no-repeat; + color:#e5391f !important; + display:block; + font-size:15px; + line-height:24px; + padding:0 0 0 17px +} +.twitter-lnk .social-block{ + left:-68px +} +.google-plus .social-block{ + left:-136px +} +.rss .social-block{ + left:-204px +} +.social-lnk{ + cursor:pointer +} +.sync ul{ + margin:0; + padding:43px 0 25px; + width:430px +} +.affiliate ul,.pro ul{ + margin:0; + padding:7px 0 0 +} +.affiliate li,.blog-new-full ul li,.pro li:not(.no-red-dot),.sync li{ + color:#3f4646; + font-size:14px; + font-weight:400; + line-height:28px; + list-style-type:none; + margin:0; + padding:0 0 18px 20px; + position:relative; + text-align:left +} +.affiliate li:before,.blog-new-full ul li:before,.pro li:not(.no-red-dot):before,.sync li:before{ + color:var(--text-color-error); + content:"\25CF"; + left:0; + position:absolute +} +.pro li:not(.no-red-dot){ + padding:0 0 12px 20px +} +strong.small-header{ + display:block; + font-family:source_sans_probold,Arial,sans-serif; + font-weight:400; + padding-bottom:4px +} +.browsers-top-icon{ + background-repeat:no-repeat; + float:left; + height:174px; + width:226px +} +.browsers-top-icon.safari{ + background-image:url(../imagery/mega-browsers-safari.a7305140f530cb2c.png); + background-position:46px 20px; + background-size:143px 126px +} +.browsers-top-icon.ie10{ + background-image:url(../imagery/mega-browsers-ie10.80db4a7992f4cca6.png); + background-position:40px 22px; + background-size:153px 121px +} +.browsers-top-icon.ie9{ + background-image:url(../imagery/mega-browsers-ie9.f482b6317e306e78.png); + background-position:40px 24px; + background-size:162px 118px +} +.browsers-info-block{ + padding:20px 20px 28px 226px +} +.browsers-info-header{ + color:#363b3b; + font-family:source_sans_prosemibold,Arial,Helvetica,sans-serif; + font-size:16px; + line-height:21px; + padding-top:8px +} +.browsers-info-block p{ + color:#767f7f; + font-size:14px; + line-height:21px; + margin:0; + padding:10px 0 0 +} +.browsers-gray-notification{ + background-image:url(../imagery/mega-browsers-sprite.179e9fa1abdfc1d6.png); + background-position:left -922px; + background-repeat:repeat-x; + background-size:100px auto; + color:#363b3b; + font-size:16px; + line-height:21px; + padding:16px 20px 0 +} +.properties-small-gray{ + color:var(--text-color-medium); + display:block; + font:var(--text-body1) +} +.properties-small-gray.path{ + padding-inline-start:16px; + padding-top:8px +} +.shared .propreties-dark-txt.contact-list{ + -webkit-padding-end:25px; + display:inline-block; + padding-inline-end:25px +} +.contact-list-icon{ + display:none +} +.shared .contact-list-icon{ + --mask-color:var(--icon-rest); + --icon-size:24px; + background-repeat:no-repeat; + cursor:pointer; + display:inline-block; + height:24px; + margin:-5px 4px; + vertical-align:text-bottom; + width:24px +} +.shared .contact-list-icon.active,.shared .contact-list-icon:hover{ + --mask-color:var(--icon-active) +} +.propreties-dark-txt{ + word-wrap:break-word; + color:var(--text-color-high); + display:block; + font:var(--text-body1); + padding-bottom:16px; + word-break:break-all +} +.properties-name-block .propreties-dark-txt{ + font:var(--text-body1-bold) +} +.propreties-dark-txt a,.propreties-dark-txt a:active,.propreties-dark-txt a:visited{ + color:var(--text-color-info) +} +.properties-name-container{ + display:flex +} +.properties-name-block{ + -webkit-padding-end:39px; + -webkit-padding-start:11px; + display:inline-block; + padding-inline-end:39px; + padding-inline-start:11px; + position:relative +} +.properties-small-gray:empty+.properties-name-block{ + -webkit-padding-start:0; + padding-inline-start:0 +} +.properties-breadcrumb{ + background-color:var(--surface-grey-1); + border:2px solid var(--stroke-grey-2); + border-radius:12px; + box-sizing:border-box; + height:60px; + margin:0 -18px 16px +} +.properties-breadcrumb .breadcrumb-dropdown{ + max-height:177px +} +.properties-breadcrumb .breadcrumb-dropdown .ps__scrollbar-y-rail{ + margin:8px 0 +} +.properties-name-block .file-settings-icon{ + align-items:center; + bottom:auto; + display:flex; + justify-content:center; + right:0; + top:-1px; + z-index:10 +} +.hidden-context .properties-name-block .file-settings-icon,.multiple .properties-name-block .file-settings-icon{ + display:none +} +.propreties-dark-txt b{ + display:block; + font-family:var(--text-font-family-semibold); + padding-top:8px +} +.properties-float-bl{ + min-height:51px; + width:50% +} +.properties-context-menu{ + background:var(--surface-main-inverted); + border-radius:8px; + display:none; + min-width:140px; + padding:8px 0; + position:absolute; + z-index:100 +} +.properties-context-arrow{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-repeat:no-repeat; + border:9px solid transparent; + border-top:9px solid var(--stroke-main-inverted); + bottom:-16px; + height:16px; + left:50%; + margin:0 0 0 -9px; + position:absolute; + width:16px +} +.properties-context-item{ + align-items:center; + color:var(--text-color-medium-inverted); + cursor:pointer; + display:flex; + font:var(--text-body1); + height:24px; + padding:0 20px 0 36px; + position:relative; + transition:all .2s ease-in-out +} +.properties-context-item span{ + white-space:nowrap +} +.properties-context-item.show-more{ + color:var(--text-color-low-inverted) +} +.properties-context-item:hover{ + background:var(--surface-grey-1-inverted); + color:var(--text-color-high-inverted) +} +.properties-context-item.properties-share-options{ + height:32px; + line-height:31px +} +.properties-context-item.properties-share-options:hover{ + background-color:#ffb300 +} +.properties-share-icon{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-position:-132px -3180px; + background-repeat:no-repeat; + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50); + height:18px; + left:11px; + -moz-opacity:.5; + -khtml-opacity:.5; + opacity:.5; + position:absolute; + top:6px; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + width:18px +} +.properties-share-options:hover .properties-share-icon{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity:1; + -khtml-opacity:1; + opacity:1 +} +.properties-contact-status{ + background-color:#ff1a53; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + height:8px; + left:16px; + position:absolute; + top:7px; + width:8px +} +a.tips-button.properties{ + margin-right:10px +} +.on_off{ + float:right; + margin:30px 20px 0 +} +.iPhoneCheckContainer{ + -moz-border-radius:40px; + -webkit-border-radius:40px; + -khtml-border-radius:40px; + border-radius:40px; + height:40px; + width:100px +} +.iPhoneCheckHandle{ + background-size:25px 26px; + height:25px; + width:25px +} +.iPhoneCheckContainer{ + -moz-border-radius:40px; + -webkit-border-radius:40px; + -khtml-border-radius:40px; + border-radius:40px; + cursor:pointer; + height:40px; + overflow:hidden; + position:relative; + -webkit-transform:translateZ(0); + width:100px +} +.iPhoneCheckContainer input{ + filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + left:30px; + opacity:0; + position:absolute; + top:5px +} +.iPhoneCheckContainer label{ + cursor:pointer; + display:block; + height:40px; + overflow:hidden; + position:absolute; + top:0; + white-space:nowrap; + width:100px +} +.iPhoneCheckDisabled{ + filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity:.5 +} +label.iPhoneCheckLabelOn{ + color:#fff; + left:0 +} +label.iPhoneCheckLabelOn span{ + display:none +} +label.iPhoneCheckLabelOff{ + background-color:#c8c8c8; + -moz-border-radius:40px; + -webkit-border-radius:40px; + -khtml-border-radius:40px; + border-radius:40px; + color:#fff; + right:0 +} +label.iPhoneCheckLabelOff span{ + display:none +} +.iPhoneCheckHandle{ + cursor:pointer; + display:block; + height:40px; + left:0; + position:absolute; + top:0; + width:40px +} +.iPhoneCheckHandleRight{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + height:100%; + padding:4px; + width:100% +} +.iPhoneCheckHandleCenter{ + background-color:#fff; + -moz-border-radius:32px; + -webkit-border-radius:32px; + -khtml-border-radius:32px; + border-radius:32px; + height:100%; + width:100% +} +.fm-tree-panel{ + box-sizing:border-box; + flex:1; + height:100%; + min-width:100%; + position:relative +} +.content-panel{ + display:none +} +.chat-lp-body .content-panel{ + overflow:hidden +} +.fm-tree-panel ul{ + display:block; + list-style:none; + margin:0; + padding:0 +} +.mega-dialog .fm-picker-dialog-tree-panel ul,.share-add-dialog-bottom-bo.share-add-dialog-bottom-body ul{ + display:block; + list-style:none; + margin:0; + transition:all .2s ease-in-out +} +.fm-picker-dialog .dialog-content-block>ul{ + -webkit-padding-start:0; + padding-inline-start:0 +} +.fm-tree-panel ul ul,.mega-dialog .fm-picker-dialog-tree-panel ul ul{ + display:none +} +.fm-tree-panel ul ul.opened,.mega-dialog .fm-picker-dialog-tree-panel ul ul.opened{ + display:block +} +ul ul .nw-fm-tree-item{ + -webkit-padding-start:24px; + padding-inline-start:24px +} +ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:48px; + padding-inline-start:48px +} +ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:72px; + padding-inline-start:72px +} +ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:96px; + padding-inline-start:96px +} +ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:120px; + padding-inline-start:120px +} +ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:144px; + padding-inline-start:144px +} +ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:168px; + padding-inline-start:168px +} +ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:192px; + padding-inline-start:192px +} +ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:216px; + padding-inline-start:216px +} +ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:240px; + padding-inline-start:240px +} +ul ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:264px; + padding-inline-start:264px +} +ul ul ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:288px; + padding-inline-start:288px +} +ul ul ul ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:312px; + padding-inline-start:312px +} +ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:336px; + padding-inline-start:336px +} +ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:360px; + padding-inline-start:360px +} +.nw-fm-tree-item{ + background-color:rgba(217, 0, 7, 0); + display:flex; + line-height:0; + padding:4px 0 +} +.nw-fm-tree-item .data-item-icon{ + right:12px; + top:2px +} +.nw-fm-tree-item.hovered,.nw-fm-tree-item:hover{ + background-color:rgba(217, 0, 7, .2); + color:#fff +} +.dropdown-item.disabled,.nw-conversations-item.disabled,.nw-fm-tree-item.disabled{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50); + -moz-opacity:.5; + -khtml-opacity:.5; + opacity:.5 +} +.nw-fm-tree-item.dragover{ + background-color:rgba(217, 0, 7, .3) +} +.out-shares .nw-fm-tree-item.hovered,.out-shares .nw-fm-tree-item:hover,.public-links .nw-fm-tree-item.hovered,.public-links .nw-fm-tree-item:hover,.shared-with-me .nw-fm-tree-item.hovered,.shared-with-me .nw-fm-tree-item:hover{ + background-color:rgba(255, 179, 0, .3) +} +.out-shares .nw-fm-tree-item.selected,.public-links .nw-fm-tree-item.selected,.shared-with-me .nw-fm-tree-item.selected{ + background-color:rgba(255, 179, 0, .5) +} +.out-shares .nw-fm-tree-item.dragover,.public-links .nw-fm-tree-item.dragoved,.shared-with-me .nw-fm-tree-item.dragover{ + background-color:rgba(255, 179, 0, .4) +} +.rubbish-bin .nw-fm-tree-item.hovered,.rubbish-bin .nw-fm-tree-item:hover{ + background-color:rgba(39, 183, 0, .3) +} +.rubbish-bin .nw-fm-tree-item.selected{ + background-color:rgba(39, 183, 0, .6) +} +.rubbish-bin .nw-fm-tree-item.dragover{ + background-color:rgba(39, 183, 0, .4) +} +.fm-tree-panel li,.mega-dialog .fm-picker-dialog-tree-panel li,.share-add-dialog-bottom-body li{ + display:block; + list-style:none; + margin:0; + padding:0; + position:relative; + white-space:nowrap +} +.nw-fm-arrow-icon{ + --icon-size:16px; + --mask-color:var(--icon-rest); + cursor:default; + display:block; + position:absolute; + top:8px +} +.nw-fm-arrow-icon:before{ + -webkit-font-smoothing:antialiased; + -moz-osx-font-smoothing:grayscale; + color:var(--mask-color); + display:inline-block; + font-family:fm-mono !important; + font-size:16px; + font-style:normal; + font-variant:normal; + height:100%; + line-height:1; + text-rendering:auto; + vertical-align:top; + width:24px +} +.nw-fm-tree-item.contains-folders .nw-fm-arrow-icon{ + cursor:pointer +} +.nw-fm-tree-folder{ + -webkit-margin-start:45px; + -webkit-padding-start:32px; + box-sizing:border-box; + color:var(--stroke-link-inverted); + display:inline-block; + font-size:14px; + height:24px; + line-height:24px; + margin-inline-start:45px; + padding-inline-start:32px; + position:relative; + white-space:nowrap; + width:auto +} +.transfer-filetype-icon.photo-folder{ + background-position:-337px -757px; + margin:0 +} +.transfer-filetype-icon.folder{ + background-position:-337px -717px; + margin:0 +} +.transfer-filetype-icon.rubbish-folder{ + background-position:-297px -717px +} +.transfer-filetype-icon.folder-sync{ + background-position:-337px -1157px +} +.transfer-filetype-icon.rubbish-folder-sync{ + background-position:-297px -1157px +} +.transfer-filetype-icon.folder-backup{ + background-position:-337px -1237px +} +.transfer-filetype-icon.rubbish-folder-backup{ + background-position:-297px -1237px +} +.transfer-filetype-icon.folder-chat{ + background-position:-337px -1317px +} +.transfer-filetype-icon.rubbish-folder-chat{ + background-position:-377px -1317px +} +.transfer-filetype-icon.folder-camera{ + background-position:-337px -757px +} +.transfer-filetype-icon.rubbish-folder-camera{ + background-position:-297px -1357px +} +.transfer-filetype-icon.backup{ + background-position:-297px -1398px +} +.transfer-filetype-icon.pc{ + background-position:-297px -1437px +} +.transfer-filetype-icon.pc-linux{ + background-position:-377px -1397px +} +.transfer-filetype-icon.pc-win{ + background-position:-377px -1437px +} +.transfer-filetype-icon.pc-mac{ + background-position:-337px -1437px +} +.transfer-filetype-icon.mobile{ + background-position:-297px -1477px +} +.transfer-filetype-icon.mobile-ios{ + background-position:-337px -1477px +} +.transfer-filetype-icon.mobile-android{ + background-position:-377px -1477px +} +.transfer-filetype-icon.ex-device{ + background-position:-297px -1317px +} +.transfer-filetype-icon.inbound-share{ + background-position:-337px -877px +} +.transfer-filetype-icon.folder-shared{ + margin:0 +} +.transfer-filetype-icon.rubbish-folder-shared{ + background-position:-297px -957px +} +.nw-fm-tree-item.dragover .nw-fm-tree-folder,.nw-fm-tree-item.selected .nw-fm-tree-folder,.nw-fm-tree-item:hover .nw-fm-tree-folder{ + color:#fff +} +.rubbish-bin .nw-fm-tree-folder:before,.transfer-filetype-icon.folder.dark{ + background-position:-297px -717px +} +.rubbish-bin .nw-fm-tree-folder.shared-folder:before,.rubbish-bin .nw-fm-tree-item.expanded .nw-fm-tree-folder.shared-folder:before,.rubbish-bin .nw-fm-tree-item.expanded .nw-fm-tree-folder:before,.rubbish-bin .nw-fm-tree-item.expanded .nw-fm-tree-shared-folder:before,.rubbish-bin .nw-fm-tree-shared-folder:before{ + background-position:-297px -1037px +} +.nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-shared-folder:before,.transfer-filetype-icon.folder-shared{ + background-position:-337px -957px +} +.nw-fm-tree-item .nw-fm-tree-folder.shared-folder.expanded:before,.nw-fm-tree-item.nw-fm-tree-shared-folder.expanded:before{ + background-position:-337px -997px +} +.nw-fm-tree-item.dragover .nw-fm-tree-folder:before,.nw-fm-tree-item.selected .nw-fm-tree-folder:before,.nw-fm-tree-item:hover .nw-fm-tree-folder:before,.rubbish-bin .nw-fm-tree-item.dragover .nw-fm-tree-folder:before,.rubbish-bin .nw-fm-tree-item.selected .nw-fm-tree-folder:before,.rubbish-bin .nw-fm-tree-item:hover .nw-fm-tree-folder:before{ + background-position:-377px -717px +} +.nw-fm-tree-item.dragover .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.dragover .nw-fm-tree-shared-folder:before,.nw-fm-tree-item.selected .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.selected .nw-fm-tree-shared-folder:before,.nw-fm-tree-item:hover .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item:hover .nw-fm-tree-shared-folder:before{ + background-position:-377px -957px +} +.nw-fm-tree-item.dragover.expanded .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.dragover.expanded .nw-fm-tree-shared-folder:before,.nw-fm-tree-item.expanded:hover .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.expanded:hover .nw-fm-tree-shared-folder:before,.nw-fm-tree-item.selected.expanded .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.selected.expanded .nw-fm-tree-shared-folder:before{ + background-position:-377px -997px +} +.nw-fm-tree-item.opened .nw-fm-tree-folder:before{ + background-position:-337px -1037px +} +.rubbish-bin .nw-fm-tree-item.opened .nw-fm-tree-folder:before{ + background-position:-297px -1037px +} +.nw-fm-tree-item.dragover .nw-fm-tree-folder:before,.nw-fm-tree-item.selected .nw-fm-tree-folder:before,.nw-fm-tree-item:hover .nw-fm-tree-folder:before,.rubbish-bin .nw-fm-tree-item.dragover .nw-fm-tree-folder:before,.rubbish-bin .nw-fm-tree-item.selected .nw-fm-tree-folder:before,.rubbish-bin .nw-fm-tree-item:hover .nw-fm-tree-folder:before{ + background-position:-377px -717px +} +.nw-fm-tree-item.expanded .nw-fm-tree-folder:before{ + background-position:-337px -1037px +} +.nw-fm-tree-item.expanded .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.expanded .nw-fm-tree-shared-folder:before{ + background-position:-337px -997px +} +.nw-fm-tree-item.dragover.expanded .nw-fm-tree-folder:before,.nw-fm-tree-item.dragover.opened .nw-fm-tree-folder:before,.nw-fm-tree-item.expanded.opened.selected .nw-fm-tree-folder:before,.nw-fm-tree-item.expanded:hover .nw-fm-tree-folder:before,.nw-fm-tree-item.opened:hover .nw-fm-tree-folder:before,.nw-fm-tree-item.selected.opened .nw-fm-tree-folder:before,.rubbish-bin .nw-fm-tree-item.dragover.opened .nw-fm-tree-folder:before,.rubbish-bin .nw-fm-tree-item.opened:hover .nw-fm-tree-folder:before,.rubbish-bin .nw-fm-tree-item.selected.opened .nw-fm-tree-folder:before{ + background-position:-377px -1037px +} +.nw-fm-tree-item.dragover .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.dragover .nw-fm-tree-shared-folder:before,.nw-fm-tree-item.selected .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.selected .nw-fm-tree-shared-folder:before,.nw-fm-tree-item:hover .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item:hover .nw-fm-tree-shared-folder:before{ + background-position:-377px -957px +} +.nw-fm-tree-item.opened.dragover .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.opened.dragover .nw-fm-tree-shared-folder:before,.nw-fm-tree-item.opened.selected .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.opened.selected .nw-fm-tree-shared-folder:before,.nw-fm-tree-item.opened:hover .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.opened:hover .nw-fm-tree-shared-folder:before,.rubbish-bin .nw-fm-tree-item.opened.dragover .nw-fm-tree-folder.shared-folder:before,.rubbish-bin .nw-fm-tree-item.opened.dragover .nw-fm-tree-shared-folder:before,.rubbish-bin .nw-fm-tree-item.opened.selected .nw-fm-tree-folder.shared-folder:before,.rubbish-bin .nw-fm-tree-item.opened.selected .nw-fm-tree-shared-folder:before,.rubbish-bin .nw-fm-tree-item.opened:hover .nw-fm-tree-folder.shared-folder:before,.rubbish-bin .nw-fm-tree-item.opened:hover .nw-fm-tree-shared-folder:before{ + background-position:-377px -997px +} +.nw-fm-tree-folder.inbound-share:before{ + background-position:-337px -877px; + margin:0 +} +.nw-fm-tree-item.dragover>.nw-fm-tree-folder.inbound-share:before,.nw-fm-tree-item.selected>.nw-fm-tree-folder.inbound-share:before,.nw-fm-tree-item:hover>.nw-fm-tree-folder.inbound-share:before{ + background-position:-377px -877px +} +.nw-fm-tree-item.expanded>.nw-fm-tree-folder.inbound-share:before,.nw-fm-tree-item.opened>.nw-fm-tree-folder.inbound-share:before{ + background-position:-337px -917px +} +.nw-fm-tree-item.expanded.dragover>.nw-fm-tree-folder.inbound-share:before,.nw-fm-tree-item.expanded:hover>.nw-fm-tree-folder.inbound-share:before,.nw-fm-tree-item.opened.dragover>.nw-fm-tree-folder.inbound-share:before,.nw-fm-tree-item.opened:hover>.nw-fm-tree-folder.inbound-share:before,.nw-fm-tree-item.selected.expanded>.nw-fm-tree-folder.inbound-share:before,.nw-fm-tree-item.selected.opened>.nw-fm-tree-folder.inbound-share:before{ + background-position:-377px -917px +} +.nw-fm-tree-folder.puf-folder:before,.transfer-filetype-icon.puf-folder{ + background-position:-337px -1077px +} +.nw-fm-tree-item.expanded .nw-fm-tree-folder.puf-folder:before{ + background-position:-337px -1117px +} +.rubbish-bin .nw-fm-tree-folder.puf-folder:before{ + background-position:-297px -1077px +} +.rubbish-bin .nw-fm-tree-item.expanded .nw-fm-tree-folder.puf-folder:before{ + background-position:-297px -1117px +} +.nw-fm-tree-item.dragover .nw-fm-tree-folder.puf-folder:before,.nw-fm-tree-item.selected .nw-fm-tree-folder.puf-folder:before,.nw-fm-tree-item:hover .nw-fm-tree-folder.puf-folder:before,.rubbish-bin .nw-fm-tree-item.dragover .nw-fm-tree-folder.puf-folder:before,.rubbish-bin .nw-fm-tree-item.selected .nw-fm-tree-folder.puf-folder:before,.rubbish-bin .nw-fm-tree-item:hover .nw-fm-tree-folder.puf-folder:before{ + background-position:-377px -1077px +} +.nw-fm-tree-item.dragover.expanded .nw-fm-tree-folder.puf-folder:before,.nw-fm-tree-item.dragover.opened .nw-fm-tree-folder.puf-folder:before,.nw-fm-tree-item.expanded.opened.selected .nw-fm-tree-folder.puf-folder:before,.nw-fm-tree-item.expanded:hover .nw-fm-tree-folder.puf-folder:before,.nw-fm-tree-item.opened:hover .nw-fm-tree-folder.puf-folder:before,.nw-fm-tree-item.selected.opened .nw-fm-tree-folder.puf-folder:before,.rubbish-bin .nw-fm-tree-item.dragover.opened .nw-fm-tree-folder.puf-folder:before,.rubbish-bin .nw-fm-tree-item.opened:hover .nw-fm-tree-folder.puf-folder:before,.rubbish-bin .nw-fm-tree-item.selected.opened .nw-fm-tree-folder.puf-folder:before{ + background-position:-377px -1117px +} +.nw-contact-item{ + background-color:transparent; + cursor:pointer; + display:block; + height:48px; + overflow:hidden; + overflow:hidden; + padding-right:15px +} +.nw-contact-item:hover{ + background-color:rgba(113, 173, 58, .1) +} +.nw-contact-item.selected{ + background-color:rgba(113, 173, 58, .5) +} +.fm-add-user-scrolling .nw-contact-item{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:right -2907px; + background-repeat:no-repeat; + padding-right:32px +} +.fm-add-user-scrolling .nw-contact-item:nth-child(2n){ + background-color:rgba(0, 0, 0, .02) +} +.fm-add-user-scrolling .nw-contact-item:hover{ + background-color:rgba(0, 0, 0, .03) +} +.fm-add-user-scrolling .nw-contact-item.selected{ + background-color:rgba(0, 0, 0, .05); + background-position:right -2859px +} +.fm-add-user-scrolling .nw-contact-item.selected .nw-contact-name{ + color:#666 +} +.fm-dialog-search{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-10px -2969px; + background-repeat:no-repeat; + border:2px solid #d9d9d9; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:32px; + margin:12px; + padding:0 10px 0 32px +} +.fm-dialog-search input{ + border:0; + color:#868686; + font-size:14px; + line-height:27px; + margin:0; + padding:0; + width:100% +} +.nw-contact-status{ + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + float:left; + height:6px; + margin:21px 0 0 12px; + width:6px +} +.shared-blocks-view .nw-contact-status,.shared-grid-view .nw-contact-status{ + border:0; + margin:21px 2px 0 12px +} +.fm-tree-panel .nw-contact-status,.nw-conversations-item .nw-contact-status{ + margin:9px 0 0 14px +} +.online .nw-contact-status,.online .properties-contact-status{ + background-color:#13e03c +} +.away .nw-contact-status,.away .properties-contact-status{ + background-color:orange +} +.busy .nw-contact-status,.busy .properties-contact-status{ + background-color:#eb4444 +} +.offline .nw-contact-status,.offline .properties-contact-status{ + background-color:#666 +} +.black .nw-contact-status,.black .properties-contact-status{ + background-color:#000; + visibility:hidden +} +.contacts-avatar{ + margin:0 0 0 12px +} +.nw-verified-icon{ + background-color:#1fa4e7; + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-11px -2244px; + background-repeat:no-repeat; + border:2px solid #fff; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + -webkit-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + -moz-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:none; + height:16px; + position:absolute; + right:-6px; + top:-4px; + width:16px; + z-index:10 +} +.gray-tick .nw-verified-icon,.green-tick .nw-verified-icon,.verified .nw-verified-icon{ + display:block +} +.green-tick .nw-verified-icon{ + background-color:#31b500 +} +.gray-tick .nw-verified-icon{ + background-color:#999 +} +.nw-tree-panel-filter-tag,.nw-tree-panel-header{ + color:#666; + display:none; + font-size:15px; + height:36px; + line-height:36px; + overflow:hidden; + padding:0 25px 0 12px; + position:relative; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.nw-tree-panel-filter-tag{ + height:25px; + line-height:25px; + padding:0 6px 0 12px +} +.active-folder-link .nw-tree-panel-filter-tag{ + padding:2px 25px 0 12px +} +.share-dialog-panel-arrows{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-12px -9768px; + background-repeat:no-repeat; + opacity:.6; + right:2px +} +.nw-tree-panel-arrows.icons-sprite,.share-dialog-panel-arrows{ + cursor:pointer; + height:24px; + position:absolute; + top:6px; + -webkit-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out; + width:24px +} +.nw-tree-panel-arrows.icons-sprite{ + background-position:-88px -1992px; + display:none; + opacity:.8; + right:7px +} +.active-folder-link .nw-fm-tree-item .nw-fm-tree-folder{ + -webkit-margin-start:24px; + margin-inline-start:24px +} +.active-folder-link .nw-fm-tree-item .nw-fm-tree-arrow{ + -webkit-margin-start:6px; + margin-inline-start:6px +} +.nw-tree-panel-arrows.active,.nw-tree-panel-arrows:hover{ + opacity:1 +} +.fm-tree-panel .nw-contact-item,.mega-dialog .fm-picker-dialog-tree-panel .nw-contact-item,.nw-conversations-item{ + background-color:transparent; + cursor:default; + height:24px; + overflow:hidden; + padding-right:12px; + position:relative; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.nw-conversations-unread{ + background-color:#1fa4e7; + border:2px solid #fff; + -moz-border-radius:14px; + -webkit-border-radius:14px; + border-radius:14px; + -webkit-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + -moz-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + display:none; + font-size:10px; + height:16px; + line-height:12px; + min-width:16px; + padding:0 3px; + position:absolute; + right:8px; + text-align:center; + top:4px; + z-index:10 +} +.unread .nw-conversations-unread{ + display:block +} +.nw-contact-item .nw-conversations-unread{ + background-color:hsla(0, 0%, 46.7%, .3); + color:#fff +} +.nw-contact-item.selected .nw-conversations-unread,.nw-contact-item:hover .nw-conversations-unread{ + background-color:#fff; + color:#666 +} +.nw-conversations-item:hover{ + background-color:rgba(43, 166, 222, .3); + color:#fff +} +.fm-tree-panel .nw-contact-item:hover{ + background-color:hsla(0, 0%, 46.7%, .3); + color:#fff +} +.fm-tree-panel .nw-contact-item.selected{ + background-color:hsla(0, 0%, 46.7%, .5); + color:#fff +} +.nw-conversations-item.selected{ + background-color:rgba(43, 166, 222, .5); + color:#fff +} +.fm-tree-panel .nw-contact-name,.mega-dialog .fm-picker-dialog-tree-panel .nw-contact-item,.nw-conversations-name{ + margin:0 36px 0 32px; + overflow:hidden; + padding:0; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.fm-tree-panel .nw-contact-item.selected .nw-contact-name,.fm-tree-panel .nw-contact-item:hover .nw-contact-name,.nw-conversations-item.selected .nw-conversations-name,.nw-conversations-item:hover .nw-conversations-name{ + color:#fff +} +.tree-item{ + display:none +} +.fm-avatar,.tree-item.active{ + display:block +} +.fm-avatar{ + cursor:pointer; + float:right; + height:28px; + margin:4px 11px 0 0; + position:relative; + width:28px +} +.fm-avatar:empty{ + display:none +} +.fm-avatar .avatar-wrapper{ + border-radius:50%; + font-family:source_sans_proregular,sans-serif; + font-size:15px; + height:28px; + line-height:28px; + margin:0; + width:28px +} +.fm-avatar .avatar-wrapper:before{ + -webkit-box-shadow:none; + -moz-box-shadow:none; + box-shadow:none +} +.fm-avatar:after{ + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.download-page .fm-avatar{ + height:44px; + margin:3px 8px 0 -2px; + width:44px +} +.fm-avatar img{ + border:0; + border-radius:50%; + height:100%; + width:100% +} +.activity-status-block{ + float:right; + margin:12px 10px 0 0 +} +.activity-status{ + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + height:6px; + margin:3px; + position:relative; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + width:6px +} +.activity-status,.activity-status.top:before{ + box-sizing:border-box; + transition:all .2s ease-in-out +} +.activity-status.top:before{ + background-color:inherit; + border:2px solid var(--stroke-main); + border-radius:100%; + content:""; + height:10px; + margin:-2px 0 0 -2px; + position:absolute; + width:10px +} +.dropdown-item .activity-status{ + -webkit-box-shadow:0 0 0 2px transparent; + -moz-box-shadow:0 0 0 2px transparent; + box-shadow:0 0 0 2px transparent; + display:inline-block; + height:8px; + margin:12px 12px 0 -2px; + vertical-align:top; + width:8px +} +.activity-status-info{ + color:var(--text-color-medium); + font-size:12px; + line-height:12px; + margin:-3px 0 8px; + padding:0 0 0 18px; + white-space:normal +} +.activity-status.online{ + background-color:var(--label-green) +} +.activity-status.away{ + background-color:var(--label-orange) +} +.activity-status.busy{ + background-color:var(--label-red) +} +.activity-status.offline{ + background-color:var(--label-grey) +} +.activity-status.black{ + background-color:#000; + visibility:hidden +} +.membership-status-block{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + float:right; + height:24px; + margin:10px 9px 0 0 +} +.top-head .user-name{ + max-width:250px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.user-name,a.user-name{ + color:#333; + cursor:pointer; + display:block; + float:right; + font-size:14px; + line-height:24px; + margin:5px 6px 0 0 +} +.new-notification-info{ + background-color:#333; + -moz-border-radius:8px; + -webkit-border-radius:8px; + border-radius:8px; + color:#ccc; + display:none; + font-size:13px; + height:24px; + left:50%; + line-height:23px; + margin:50px 0 0 -59px; + padding:0 8px; + position:absolute; + white-space:nowrap; + z-index:100 +} +.warning-icon-area{ + cursor:pointer; + height:24px; + width:24px +} +.warning-popup-body{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.warning-popup-body .green{ + color:var(--text-color-success) +} +.warning-header{ + color:var(--text-color-high); + display:flex; + font:var(--text-h2); + margin-bottom:16px +} +.astropay-payment-reminder .warning-header{ + display:block +} +.warning-icon.sprite-fm-illustration.img-topbar-email-registration{ + --width:82px; + float:left; + height:82px; + margin-right:20px; + width:82px +} +.astropay-payment-reminder .warning-popup-body{ + display:table; + position:relative +} +.astropay-payment-reminder .left-block{ + display:table-cell; + padding-top:3px; + width:48px +} +.astropay-payment-reminder .plan-icon i{ + --icon-size:48px; + display:none +} +.astropay-payment-reminder .plan-icon.business i.business,.astropay-payment-reminder .plan-icon.pro1 i.pro1,.astropay-payment-reminder .plan-icon.pro2 i.pro2,.astropay-payment-reminder .plan-icon.pro3 i.pro3,.astropay-payment-reminder .plan-icon.pro4 i.pro4,.astropay-payment-reminder .plan-icon.pro101 i.pro101{ + display:block +} +.warning-icon.sprite-fm-illustration.img-dialog-business-expiry{ + --width:48px; + height:48px; + width:48px +} +.astropay-payment-reminder .right-block{ + display:table-cell; + padding-left:24px; + vertical-align:top +} +.astropay-payment-reminder .last-payment-info{ + font:var(--text-body2) +} +.astropay-payment-reminder .purchased-label{ + color:var(--text-color-high) +} +.astropay-payment-reminder .expired-label{ + color:var(--text-color-error); + padding-left:24px +} +.astropay-payment-reminder .expired-date,.astropay-payment-reminder .purchased-date{ + padding-left:8px +} +.astropay-payment-reminder .provider-icon{ + padding-bottom:2px +} +.astropay-payment-reminder .first-message,.astropay-payment-reminder .second-message{ + font:var(--text-body2) +} +.astropay-payment-reminder .first-message{ + margin-top:16px +} +.astropay-payment-reminder .second-message{ + margin-top:8px +} +.astropay-payment-reminder .plan-expired-checkbox-wrapper{ + -webkit-margin-end:auto; + margin-inline-end:auto +} +.astropay-payment-reminder .plan-expired-checkbox-wrapper .checkboxOff,.astropay-payment-reminder .plan-expired-checkbox-wrapper .checkboxOn{ + -webkit-margin-end:8px; + margin-inline-end:8px +} +.astropay-payment-reminder .plan-expired-checkbox-label{ + font:var(--text-body2); + white-space:nowrap +} +.astropay-payment-reminder .confirm-reason{ + margin-top:15px +} +.astropay-payment-reminder .confirm-reason>label{ + display:block +} +.astropay-payment-reminder .confirm-reason-message{ + background:var(--surface-grey-1) none repeat scroll 0 0; + border:0; + border-radius:5px; + box-sizing:border-box; + color:var(--text-color-high); + font-size:13px; + height:62px; + margin-top:5px; + padding:10px; + width:100% +} +.site-update-available .warning-popup-body{ + display:table +} +.warning-icon.sprite-fm-uni.icon-mega-logo{ + -webkit-margin-end:20px; + flex:0 0 auto; + height:24px; + margin:3px 0; + margin-inline-end:20px; + width:24px +} +.site-update-available .release-info{ + color:var(--text-color-low); + font:var(--text-body2) +} +.top-search-bl{ + float:right; + height:24px; + position:relative +} +.top-search-input::-webkit-input-placeholder{ + color:#ccc +} +.top-search-input:-moz-placeholder,.top-search-input::-moz-placeholder{ + color:#ccc; + opacity:1 +} +.top-search-input:-ms-input-placeholder{ + color:#ccc +} +.active.focused .top-search-input{ + color:#666 +} +.top-clear-button{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:right -1769px; + background-repeat:no-repeat; + cursor:pointer; + display:block; + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=60); + height:24px; + -moz-opacity:.6; + -khtml-opacity:.6; + opacity:.6; + position:absolute; + right:0; + -webkit-transition:opacity .2s ease-in-out; + -moz-transition:opacity .2s ease-in-out; + -o-transition:opacity .2s ease-in-out; + -ms-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out; + width:30px; + z-index:100 +} +.top-clear-button:hover{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=80); + -moz-opacity:.8; + -khtml-opacity:.8; + opacity:.8 +} +.top-search-button{ + background-image:url(../imagery/mega-icons-sprite.48528e60724d858e.png); + background-position:6px -1350px; + background-repeat:no-repeat; + cursor:pointer; + display:block; + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=60); + height:24px; + -moz-opacity:.6; + -khtml-opacity:.6; + opacity:.6; + position:absolute; + right:0; + -webkit-transform:rotate(90deg); + -moz-transform:rotate(90deg); + -o-transform:rotate(90deg); + -ms-transform:rotate(90deg); + transform:rotate(90deg); + -webkit-transition:opacity .2s ease-in-out; + -moz-transition:opacity .2s ease-in-out; + -o-transition:opacity .2s ease-in-out; + -ms-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out; + width:30px; + z-index:100 +} +.top-search-clear{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:24px; + margin:0 0 0 49px; + padding:6px 0 0; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.top-search-input{ + background-color:initial; + border:0; + color:#666; + font-size:14px; + line-height:23px; + margin:0; + padding:0; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + width:0 +} +.active .top-search-input,.contains-value .top-search-input{ + padding-right:38px; + width:160px +} +.contains-value .top-search-input{ + -webkit-transition:none; + transition:none +} +.fm-main{ + background:var(--surface-main); + height:100%; + overflow:hidden +} +.fm-left-panel{ + background:var(--surface-grey-2); + display:flex; + flex-direction:column; + float:left; + height:100%; + max-width:calc(100% - 600px); + position:relative; + width:256px; + z-index:20 +} +.rtl .fm-left-panel{ + direction:rtl +} +.notifications .fm-left-panel{ + width:304px +} +.nw-fm-left-icons-panel{ + background-color:var(--navbar-background); + float:left; + height:100%; + min-height:528px; + position:relative; + width:64px; + z-index:21 +} +.transfer-panel-opened .nw-fm-left-icons-panel{ + border-right:2px solid var(--stroke-grey-1) +} +.nw-fm-left-icons-panel .bottom-icons{ + bottom:0; + left:0; + position:absolute +} +.content-panel.active{ + display:block +} +.transfers-header-bl{ + display:none; + padding:8px 0 0 8px; + position:absolute +} +.transfers .transfers-header-bl{ + display:block +} +.nw-fm-left-icon{ + border-radius:8px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + cursor:pointer; + height:52px; + margin:2px 6px; + padding:2px; + position:relative; + transition:background-color .2s ease-in-out; + width:52px +} +.nw-fm-left-icon:first-of-type{ + margin-top:6px +} +.bottom-icons .nw-fm-left-icon.transfers{ + margin-bottom:8px +} +.nw-fm-left-icon:before{ + content:""; + height:48px; + opacity:.5; + position:absolute; + transition:opacity .2s ease-in-out; + width:48px +} +.nw-fm-left-icon:not(.photos).active{ + background-color:var(--stroke-black) +} +.nw-fm-left-icon.active:before,.nw-fm-left-icon:hover:before{ + opacity:1 +} +.nw-fm-left-icon.dashboard:before{ + height:48px; + opacity:1; + width:48px +} +.nw-fm-left-icon.user-management:before{ + height:48px; + width:48px +} +.nw-fm-left-icon .nw-fm-left-border{ + border:0; + border-radius:1px; + box-sizing:border-box; + height:32px; + position:absolute; + top:10px; + transition:all .2s ease-in-out; + width:2px +} +.transfers .nw-fm-left-border{ + z-index:100 +} +.nw-fm-left-icon.active .nw-fm-left-border{ + background-color:var(--secondary-blue) +} +.dark-tooltip{ + background:var(--surface-grey-1-inverted); + border-radius:8px; + color:var(--text-color-high-inverted); + font:var(--text-body2); + height:24px; + left:46px; + line-height:23px; + margin:12px 0 0; + opacity:0; + padding:0 10px; + position:absolute; + transition:left .2s ease-in-out,opacity .2s ease-in-out,visibility .2s ease-in-out; + visibility:hidden; + white-space:nowrap; + z-index:1130 +} +.dark-tooltip.hovered{ + left:64px; + opacity:1; + visibility:visible +} +.dark-tooltip.top{ + left:0; + margin:0; + top:34px; + transition:top .2s ease-in-out,opacity .2s ease-in-out,visibility .2s ease-in-out +} +.dark-tooltip.top.hovered{ + top:39px +} +.nw-fm-left-icon.folder-link{ + display:none +} +button.l-pane-visibility{ + display:none; + margin-top:-12px; + position:absolute; + right:-10px; + top:50%; + z-index:19 +} +.l-pane-collapsed .fm-left-panel{ + width:6px !important +} +.l-pane-collapsed .fm-tree-panel,.l-pane-collapsed .nw-tree-panel-filter-tag,.l-pane-collapsed .nw-tree-panel-header{ + display:none +} +.l-pane-collapsed .fm-right-files-block{ + margin-left:54px !important +} +.nw-fm-left-icon .beta-text{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:center -848px; + background-repeat:no-repeat; + height:14px; + left:6px; + position:absolute; + top:49px; + width:36px +} +.nw-fm-left-icon.transfers.active .transfer-bar-overlay div,.nw-fm-left-icon.transfers:hover .transfer-bar-overlay div,.transfering.active .transfer-bar-overlay div{ + background-color:#fff +} +.dark-overlay{ + background:radial-gradient(ellipse at center, #4c4c4c 0, #000 100%); + bottom:0; + height:100%; + left:0; + opacity:.5; + position:fixed; + top:0; + width:100%; + z-index:1112 +} +.dark-overlay.white{ + background:var(--surface-main); + opacity:.9 +} +.light-overlay{ + background-color:var(--stroke-main); + height:100%; + left:0; + position:absolute; + width:100%; + z-index:1100 +} +.light-overlay.transparent{ + background-color:hsla(0, 0%, 100%, .5); + height:100%; + z-index:499 +} +body.loading .light-overlay{ + z-index:1200 +} +.not-logged .cloud-popup-icon,.not-logged .fm-add-user,.not-logged .nw-fm-left-icon.rubbish-bin,.not-logged .top-search-bl{ + display:none !important +} +.not-logged .fm-right-header.folder-link .fm-files-view-icon{ + display:block +} +.transfer-panel{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:48px; + overflow:hidden +} +.transfer-icons-block{ + background-color:#101010 +} +.transfer-panel-opened .transfer-panel{ + height:193px +} +.transfer-panel-title{ + display:flex; + float:left; + padding:11px 0 0 8px +} +.transfer-table .tranfer-filetype-txt,.transfer-table .transfer-type{ + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.active-folder-link .file-block-title,.active-folder-link .nw-fm-tree-folder,.active-folder-link .tranfer-filetype-txt{ + user-select:text !important; + -webkit-user-select:text !important +} +.transfer-pause-icon.link-button.active .small-icon.pause-icon{ + background-position:-13px -11745px +} +.transfer-pause-icon.link-button:not(.disabled) .small-icon.pause-icon{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=60); + -moz-opacity:.6; + -khtml-opacity:.6; + opacity:.6 +} +.transfer-pause-icon.link-button:not(.disabled):hover .small-icon.pause-icon{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity:1; + -khtml-opacity:1; + opacity:1 +} +.arrow.asc.grid-header-star,.arrow.desc.grid-header-star,.grid-status-icon.star{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-8px -4790px; + background-repeat:no-repeat; + display:block; + height:24px; + width:30px +} +.arrow.grid-header-star{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50); + margin-top:-1px; + -moz-opacity:.5; + -khtml-opacity:.5; + opacity:.5 +} +.grid-sixth-th{ + width:45px +} +.properties-body .file-status-icon{ + height:20px; + left:2px; + position:absolute; + top:2px; + width:20px; + z-index:10 +} +.taken-down .grid-status-icon,.taken-down .grid-status-icon.star{ + background-position:-8px -4934px +} +.taken-down .file-status-icon,.taken-down .file-status-icon.star{ + background-position:-9px -4934px +} +.undecryptable .grid-status-icon,.undecryptable .grid-status-icon.star{ + background-position:-9px -2637px; + background-repeat:no-repeat +} +.undecryptable .file-status-icon,.undecryptable .file-status-icon.star{ + background-position:-10px -2637px +} +.out-shared-blocks-view .shared-folder-info-block{ + z-index:1 +} +.out-shared-blocks-view .shared-folder-info,.shared-contact-info{ + display:inline-block +} +.fm-notification-block{ + align-items:center; + background-color:var(--label-red); + border-radius:8px; + color:var(--text-color-white-high); + display:none; + flex-shrink:0; + font:var(--text-body1); + margin:2px 24px; + overflow:hidden; + padding:4px 8px; + position:relative; + text-align:start; + white-space:normal +} +.fm-notification-block.visible{ + display:flex +} +.fm-notification-block.almost-full,.fm-notification-block.grace-business,.fm-notification-block.payment-card-almost-expired{ + background-color:var(--label-orange) +} +.fm-notification-block.business-next-tier{ + background-color:var(--label-blue) +} +.fm-notification-block.expired-business.visible span a,.fm-notification-block.expired-business.visible span span,.fm-notification-block.grace-business.visible span a,.fm-notification-block.grace-business.visible span span{ + font-family:var(--text-font-family-bold) +} +.fm-notification-block .notification-block-icon{ + --icon-size:24px; + --mask-color:var(--text-color-white-high); + -webkit-margin-end:12px; + margin-inline-end:12px +} +.fm-notification-block a{ + color:var(--text-color-white-high); + cursor:pointer; + text-decoration:underline +} +.fm-notification-block a:hover{ + text-decoration:none +} +.fm-notification-block .fm-notification-close,.fm-notification-block>a{ + -webkit-margin-start:auto; + margin-inline-start:auto +} +.fm-notification-block .fm-notification-close{ + --icon-size:24px; + --mask-color:var(--text-color-white-high); + cursor:pointer; + z-index:1 +} +.fm-notification-block a+.fm-notification-close{ + -webkit-margin-start:16px; + margin-inline-start:16px +} +.fm-notification.almost-full .visible-notification .fm-notification-block.almost-full,.fm-notification.full .visible-notification .fm-notification-block.full{ + display:flex +} +.mega-dialog .nw-contact-name{ + color:inherit; + display:inline-block; + font-size:14px; + line-height:26px; + margin:0 20px 0 14px; + overflow:hidden; + padding:0; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap; + width:calc(50% - 56px) +} +.mega-dialog .nw-contact-name img.emoji{ + margin-top:0 +} +.mega-dialog .nw-contact-status{ + -webkit-margin-start:12px; + border:1px solid var(--stroke-main); + flex-shrink:0; + height:8px; + margin:0; + margin-inline-start:12px; + width:8px +} +.mega-dialog .fm-picker-dialog-tree-panel .nw-contact-item{ + align-items:center; + display:flex; + height:30px; + margin:1px 0; + padding:0 14px +} +.mega-dialog .nw-contact-item.selected:hover{ + background-color:rgba(43, 166, 222, .5); + color:#fff +} +.mega-dialog .fm-picker-dialog-tree-panel .nw-contact-group,.mega-dialog .nw-contact-email{ + display:inline-block; + margin:0; + overflow:hidden; + padding:0; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap; + width:calc(50% - 2px) +} +.mega-dialog .nw-contact-name.group{ + margin-left:11px +} +.file-block-title{ + background-color:initial; + border-radius:24px; + bottom:-6px; + box-sizing:border-box; + color:var(--text-color-high); + display:inline-block; + font-size:14px; + height:26px; + left:50%; + line-height:26px; + margin:auto; + max-width:calc(100% - 70px); + overflow:hidden; + overflow:hidden; + padding:0 14px; + position:absolute; + text-align:center; + text-overflow:ellipsis; + transform:translate(-50%, -50%); + white-space:pre-wrap; + white-space:nowrap; + word-break:break-all +} +.megaList-content .megaListItem .file-block-title{ + max-width:174px +} +.file-block-title:before{ + background:var(--surface-highlight-1); + content:""; + height:100%; + margin-left:-14px; + margin-right:-14px; + position:absolute; + width:calc(100% + 28px); + z-index:-1 +} +.colour-label .file-block-title{ + padding-right:18px +} +.colour-label .file-block-title:after,.colour-label .shared-folder-info-block:after,.colour-label .tranfer-filetype-txt:after{ + background-color:#a4a4a7; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + content:""; + display:block; + height:8px; + position:absolute; + right:6px; + top:11px; + width:8px +} +.colour-label.red .file-block-title:after,.colour-label.red .shared-folder-info-block:after,.colour-label.red .tranfer-filetype-txt:after{ + background-color:#ff625c +} +.colour-label.orange .file-block-title:after,.colour-label.orange .shared-folder-info-block:after,.colour-label.orange .tranfer-filetype-txt:after{ + background-color:#f9a646 +} +.colour-label.yellow .file-block-title:after,.colour-label.yellow .shared-folder-info-block:after,.colour-label.yellow .tranfer-filetype-txt:after{ + background-color:#f4ce4a +} +.colour-label.green .file-block-title:after,.colour-label.green .shared-folder-info-block:after,.colour-label.green .tranfer-filetype-txt:after{ + background-color:#6dcc50 +} +.colour-label.blue .file-block-title:after,.colour-label.blue .shared-folder-info-block:after,.colour-label.blue .tranfer-filetype-txt:after{ + background-color:#4bb8f3 +} +.colour-label.purple .file-block-title:after,.colour-label.purple .shared-folder-info-block:after,.colour-label.purple .tranfer-filetype-txt:after{ + background-color:#d088e1 +} +.colour-label .shared-folder-info-block{ + padding-right:12px +} +.colour-label .shared-folder-info-block:after{ + right:2px; + top:13px +} +.data-block-view.colour-label .shared-folder-info-block{ + padding-right:18px +} +.data-block-view.colour-label .shared-folder-info-block:after{ + right:6px; + top:24px +} +.colour-label .tranfer-filetype-txt,.data-block-view.colour-label .tranfer-filetype-txt{ + padding-right:12px +} +.clear-transfer-icon,.file-settings-icon,.grid-url-arrow,.link-transfer-status{ + cursor:pointer; + display:block; + height:16px; + left:9px; + opacity:0; + position:absolute; + top:0; + width:16px +} +.clear-transfer-icon i,.file-settings-icon i,.grid-url-arrow i{ + --icon-size:16px; + --mask-color:var(--icon-inactive) +} +.grid-url-header-nw .grid-url-arrow{ + left:auto; + right:14px; + top:16px +} +.clear-transfer-icon{ + left:39px; + width:16px +} +.own-data .grid-url-arrow{ + left:54px +} +.file-settings-icon{ + bottom:7px; + left:auto; + right:6px; + top:auto; + z-index:10 +} +.clear-transfer-icon:after{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:1px -4045px; + opacity:.67 +} +.hide-settings-icon{ + background-color:initial; + border:none; + -moz-opacity:0; + -khtml-opacity:0; + opacity:0 +} +.clone-of-header,.clone-of-header span,.clone-of-header th{ + height:0; + line-height:0; + overflow:hidden +} +.clone-of-header th{ + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.fm-browsers-icon,.fm-flags-icon,.fm-member-icon,.transfer-filetype-icon{ + display:block; + position:absolute +} +.transfer-filetype-icon{ + background-position:-336px -357px; + height:24px; + margin:0 0 0 -1px; + padding:0; + width:22px +} +.medium-file-icon,.transfer-filetype-icon{ + background-image:url(../imagery/mega-files-icons.8f44fb1e74566206.png); + background-repeat:no-repeat +} +.medium-file-icon{ + background-position:-216px -3239px; + height:38px; + width:38px +} +.medium-file-icon.word{ + background-position:-216px 1px +} +.medium-file-icon.web-lang{ + background-position:-216px -119px +} +.medium-file-icon.web-data{ + background-position:-216px -239px +} +.medium-file-icon.video{ + background-position:-216px -359px +} +.medium-file-icon.openoffice{ + background-position:-216px -479px +} +.medium-file-icon.keynote{ + background-position:-216px -599px +} +.medium-file-icon.numbers{ + background-position:-216px -719px +} +.medium-file-icon.vcard{ + background-position:-216px -839px +} +.medium-file-icon.torrent{ + background-position:-216px -959px +} +.medium-file-icon.text{ + background-position:-216px -1079px +} +.medium-file-icon.pages{ + background-position:-216px -1199px +} +.medium-file-icon.spreadsheet{ + background-position:-216px -1319px +} +.medium-file-icon.recovery{ + background-position:-216px -1439px +} +.medium-file-icon.dmg{ + background-position:-216px -1559px +} +.medium-file-icon.raw{ + background-position:-216px -1679px +} +.medium-file-icon.premiere{ + background-position:-216px -1799px +} +.medium-file-icon.powerpoint{ + background-position:-216px -1919px +} +.medium-file-icon.megasync{ + background-position:-216px -2039px +} +.medium-file-icon.megasync-mac{ + background-position:-216px -2159px +} +.medium-file-icon.photoshop{ + background-position:-216px -2279px +} +.medium-file-icon.pdf{ + background-position:-216px -2399px +} +.medium-file-icon.experience{ + background-position:-216px -2519px +} +.medium-file-icon.indesign{ + background-position:-216px -2639px +} +.medium-file-icon.image{ + background-position:-216px -2759px +} +.medium-file-icon.illustrator{ + background-position:-216px -2879px +} +.medium-file-icon.sketch-alt{ + background-position:-216px -2999px +} +.medium-file-icon.sketch{ + background-position:-216px -3119px +} +.medium-file-icon.generic{ + background-position:-216px -3239px +} +.medium-file-icon.font{ + background-position:-216px -3359px +} +.medium-file-icon.executable{ + background-position:-216px -3479px +} +.medium-file-icon.excel{ + background-position:-216px -3599px +} +.medium-file-icon.compressed{ + background-position:-216px -3719px +} +.medium-file-icon.cad{ + background-position:-216px -3839px +} +.medium-file-icon.audio{ + background-position:-216px -3959px +} +.medium-file-icon.aftereffects{ + background-position:-216px -4070px +} +.medium-file-icon.threed{ + background-position:-216px -4199px +} +.medium-file-icon.folder{ + background-position:-216px -4319px +} +.medium-file-icon.photo-folder{ + background-position:-216px -4559px +} +.medium-file-icon.rubbish-folder{ + background-position:-216px -4679px +} +.medium-file-icon.folder-sync{ + background-position:-216px -5879px +} +.medium-file-icon.rubbish-folder-sync{ + background-position:-216px -5999px +} +.medium-file-icon.folder-backup{ + background-position:-216px -6119px +} +.medium-file-icon.rubbish-folder-backup{ + background-position:-216px -6239px +} +.medium-file-icon.folder-chat{ + background-position:-216px -5639px +} +.medium-file-icon.rubbish-folder-chat{ + background-position:-216px -5759px +} +.medium-file-icon.folder-camera{ + background-position:-216px -4559px +} +.medium-file-icon.rubbish-folder-camera{ + background-position:-216px -4679px +} +.medium-file-icon.puf-folder{ + background-position:-216px -5279px +} +.medium-file-icon.rubbish-puf-folder{ + background-position:-216px -5399px +} +.medium-file-icon.folder-shared{ + background-position:-216px -5039px +} +.medium-file-icon.rubbish-folder-shared{ + background-position:-216px -5159px +} +.fm-blocks-view.shared-view .medium-file-icon.folder,.medium-file-icon.inbound-share,.shared-blocks-view .medium-file-icon.folder{ + background-position:-216px -4799px +} +.medium-file-icon.backup{ + background-position:-215px -6360px; + width:40px +} +.medium-file-icon.pc{ + background-position:-215px -6481px; + width:40px +} +.medium-file-icon.pc-mac{ + background-position:-215px -6721px; + width:40px +} +.medium-file-icon.pc-linux{ + background-position:-215px -6841px; + width:40px +} +.medium-file-icon.pc-win{ + background-position:-215px -6601px; + width:40px +} +.medium-file-icon.mobile{ + background-position:-215px -6962px +} +.medium-file-icon.mobile-ios{ + background-position:-215px -7082px +} +.medium-file-icon.mobile-android{ + background-position:-215px -7202px +} +.medium-file-icon.ex-device{ + background-position:-215px -7322px +} +.transfer-filetype-icon img{ + display:none +} +.transfer-filetype-icon.word{ + background-position:-296px 3px +} +.transfer-filetype-icon.web-lang{ + background-position:-296px -37px +} +.transfer-filetype-icon.web-data{ + background-position:-296px -77px +} +.transfer-filetype-icon.video{ + background-position:-296px -117px +} +.transfer-filetype-icon.openoffice{ + background-position:-296px -157px +} +.transfer-filetype-icon.keynote{ + background-position:-296px -197px +} +.transfer-filetype-icon.vector{ + background-position:-296px -237px +} +.transfer-filetype-icon.numbers{ + background-position:-296px -277px +} +.transfer-filetype-icon.torrent{ + background-position:-296px -317px +} +.transfer-filetype-icon.text{ + background-position:-296px -357px +} +.transfer-filetype-icon.pages{ + background-position:-296px -397px +} +.transfer-filetype-icon.spreadsheet{ + background-position:-296px -437px +} +.transfer-filetype-icon.recovery{ + background-position:-296px -477px +} +.transfer-filetype-icon.dmg{ + background-position:-296px -517px +} +.transfer-filetype-icon.raw{ + background-position:-296px -557px +} +.transfer-filetype-icon.premiere{ + background-position:-296px -597px +} +.transfer-filetype-icon.powerpoint{ + background-position:-296px -637px +} +.transfer-filetype-icon.megasync{ + background-position:-296px -677px +} +.transfer-filetype-icon.megasync-mac{ + background-position:-336px 3px +} +.transfer-filetype-icon.photoshop{ + background-position:-336px -37px +} +.transfer-filetype-icon.pdf{ + background-position:-336px -77px +} +.transfer-filetype-icon.experience{ + background-position:-336px -117px +} +.transfer-filetype-icon.indesign{ + background-position:-336px -157px +} +.transfer-filetype-icon.graphic,.transfer-filetype-icon.image{ + background-position:-336px -197px +} +.transfer-filetype-icon.illustrator{ + background-position:-336px -237px +} +.transfer-filetype-icon.sketch-alt{ + background-position:-336px -277px +} +.transfer-filetype-icon.sketch{ + background-position:-336px -317px +} +.transfer-filetype-icon.generic{ + background-position:-336px -357px +} +.transfer-filetype-icon.font{ + background-position:-336px -397px +} +.transfer-filetype-icon.executable{ + background-position:-336px -437px +} +.transfer-filetype-icon.excel{ + background-position:-336px -477px +} +.transfer-filetype-icon.compressed{ + background-position:-336px -517px +} +.transfer-filetype-icon.cad{ + background-position:-336px -557px +} +.transfer-filetype-icon.audio{ + background-position:-336px -597px +} +.transfer-filetype-icon.aftereffects{ + background-position:-336px -637px +} +.transfer-filetype-icon.threed{ + background-position:-336px -677px +} +.create-folder-input-bl .transfer-filetype-icon.folder,.rename-input-bl .transfer-filetype-icon.folder,.rename-input-bl .transfer-filetype-icon.folder-shared{ + background-position:-297px -717px; + margin:0 +} +.thumb .transfer-filetype-icon.image,.thumb .transfer-filetype-icon.pdf,.thumb .transfer-filetype-icon.video{ + background-image:none +} +.export-icon{ + background-image:url(../imagery/mega-files-icons.8f44fb1e74566206.png); + background-position:0 0; + background-repeat:no-repeat; + float:left; + height:60px; + margin:22px; + width:64px +} +.export-icon.word,.share-folder-icon div.word{ + background-position:-113px 1px +} +.export-icon.web-lang,.share-folder-icon div.web-lang{ + background-position:-113px -119px +} +.export-icon.web-data,.share-folder-icon div.web-data{ + background-position:-113px -239px +} +.export-icon.video,.share-folder-icon div.video{ + background-position:-113px -359px +} +.export-icon.openoffice,.share-folder-icon div.openoffice{ + background-position:-113px -479px +} +.export-icon.keynote,.share-folder-icon div.keynote{ + background-position:-113px -599px +} +.export-icon.numbers,.export-icon.vector,.share-folder-icon div.numbers,.share-folder-icon div.vector{ + background-position:-113px -719px +} +.export-icon.vcard,.share-folder-icon div.vcard{ + background-position:-113px -839px +} +.export-icon.torrent,.share-folder-icon div.torrent{ + background-position:-113px -959px +} +.export-icon.text,.share-folder-icon div.text{ + background-position:-113px -1079px +} +.export-icon.pages,.share-folder-icon div.pages{ + background-position:-113px -1199px +} +.export-icon.spreadsheet,.share-folder-icon div.spreadsheet{ + background-position:-113px -1319px +} +.export-icon.recovery,.share-folder-icon div.recovery{ + background-position:-113px -1439px +} +.export-icon.dmg,.share-folder-icon div.dmg{ + background-position:-113px -1559px +} +.export-icon.raw,.share-folder-icon div.raw{ + background-position:-113px -1679px +} +.export-icon.premiere,.share-folder-icon div.premiere{ + background-position:-113px -1799px +} +.export-icon.powerpoint,.share-folder-icon div.powerpoint{ + background-position:-113px -1919px +} +.export-icon.megasync,.share-folder-icon div.megasync{ + background-position:-113px -2039px +} +.export-icon.megasync-mac,.share-folder-icon div.megasync-mac{ + background-position:-113px -2159px +} +.export-icon.photoshop,.share-folder-icon div.photoshop{ + background-position:-113px -2279px +} +.export-icon.pdf,.share-folder-icon div.pdf{ + background-position:-113px -2399px +} +.export-icon.experience,.share-folder-icon div.experience{ + background-position:-113px -2519px +} +.export-icon.indesign,.share-folder-icon div.indesign{ + background-position:-113px -2639px +} +.export-icon.image,.share-folder-icon div.image{ + background-position:-113px -2759px +} +.export-icon.illustrator,.share-folder-icon div.illustrator{ + background-position:-113px -2879px +} +.export-icon.sketch-alt,.share-folder-icon div.sketch-alt{ + background-position:-113px -2999px +} +.export-icon.sketch,.share-folder-icon div.sketch{ + background-position:-113px -3119px +} +.export-icon.generic,.share-folder-icon div.generic{ + background-position:-113px -3239px +} +.export-icon.font,.share-folder-icon div.font{ + background-position:-113px -3359px +} +.export-icon.executable,.share-folder-icon div.executable{ + background-position:-113px -3479px +} +.export-icon.excel,.share-folder-icon div.excel{ + background-position:-113px -3599px +} +.export-icon.compressed,.share-folder-icon div.compressed{ + background-position:-113px -3719px +} +.export-icon.cad,.share-folder-icon div.cad{ + background-position:-113px -3839px +} +.export-icon.audio,.share-folder-icon div.audio{ + background-position:-113px -3959px +} +.export-icon.aftereffects,.share-folder-icon div.aftereffects{ + background-position:-113px -4079px +} +.export-icon.threed,.share-folder-icon div.threed{ + background-position:-113px -4199px +} +.export-icon.folder,.export-icon.folderConflict,.share-folder-icon div.folder{ + background-position:-113px -4319px +} +.export-icon.folder-camera,.share-folder-icon div.folder-camera{ + background-position:-113px -4559px +} +.export-icon.rubbish-folder-camera,.share-folder-icon div.rubbish-folder-camera{ + background-position:-113px -4679px +} +.export-icon.folder-chat,.share-folder-icon div.folder-chat{ + background-position:-113px -5639px +} +.export-icon.folder-chat,.share-folder-icon div.rubbish-folder-chat{ + background-position:-113px -5759px +} +.export-icon.folder-sync,.share-folder-icon div.folder-sync{ + background-position:-113px -5879px +} +.export-icon.rubbish-folder-sync,.share-folder-icon div.rubbish-folder-sync{ + background-position:-113px -5999px +} +.export-icon.folder-backup,.share-folder-icon div.folder-backup{ + background-position:-113px -6119px +} +.export-icon.rubbish-folder-backup,.share-folder-icon div.rubbish-folder-backup{ + background-position:-113px -6239px +} +.export-icon.backup,.share-folder-icon div.backup{ + background-position:-111px -6359px; + width:68px +} +.export-icon.pc,.share-folder-icon div.pc{ + background-position:-112px -6479px; + width:68px +} +.export-icon.pc-mac,.share-folder-icon div.pc-mac{ + background-position:-112px -6719px; + width:68px +} +.export-icon.pc-win,.share-folder-icon div.pc-win{ + background-position:-112px -6599px; + width:68px +} +.export-icon.pc-linux,.share-folder-icon div.pc-linux{ + background-position:-112px -6839px; + width:68px +} +.export-icon.mobile,.share-folder-icon div.mobile{ + background-position:-114px -6959px +} +.export-icon.mobile-ios,.share-folder-icon div.mobile-ios{ + background-position:-114px -7079px +} +.export-icon.mobile-android,.share-folder-icon div.mobile-android{ + background-position:-114px -7199px +} +.export-icon.ex-device,.share-folder-icon div.ex-device{ + background-position:-114px -7319px +} +.export-icon.inbound-share,.export-icon.rubbish-inbound-share,.share-folder-icon div.inbound-share,.share-folder-icon div.rubbish-inbound-share{ + background-position:-113px -4919px +} +.export-icon.folder-shared,.share-folder-icon div.folder-shared{ + background-position:-113px -5039px +} +.export-icon.rubbish-folder-shared,.share-folder-icon div.rubbish-folder-shared{ + background-position:-113px -5159px +} +.export-icon.puf-folder,.share-folder-icon div.puf-folder{ + background-position:-113px -5279px +} +.export-icon.rubbish-puf-folder,.share-folder-icon div.rubbish-puf-folder{ + background-position:-113px -5399px +} +.img-block.thumb,.thumb .block-view-file-type,.thumb .img-block{ + background:none; + border-radius:4px; + display:table-cell; + height:156px; + left:-1px; + margin:0; + position:relative; + text-align:center; + top:-1px; + transform:none; + vertical-align:middle; + width:156px +} +.img-block.thumb.video,.thumb.video .block-view-file-type,.thumb.video .img-block{ + background-color:#000; + background-image:none +} +.thumb .transfer-filetype-icon img{ + background-color:var(--stroke-mid-grey); + border-radius:2px; + display:inline-block; + height:18px; + margin:3px 2px; + width:18px +} +.tranfer-filetype-txt{ + box-sizing:border-box; + color:var(--text-color-high); + display:inline-block; + font:var(--text-body2); + font:var(--text-body1); + max-width:100%; + overflow:hidden; + padding-right:0; + text-overflow:ellipsis; + vertical-align:middle; + white-space:nowrap +} +.backup-file-info span.tranfer-filetype-txt.backup{ + padding:0 +} +.transfer-status{ + display:block; + height:32px; + line-height:31px; + padding:0; + position:relative; + white-space:nowrap +} +.transfer-started .transfer-status,.transfer-status{ + color:var(--text-color-medium) +} +.transfer-error .transfer-status{ + color:var(--text-color-error) +} +.transfer-completed .transfer-status{ + color:var(--text-color-success) +} +.transfer-type,.transfer-type li,.transfer-type p,.transfer-type span,.transfer-type ul{ + height:20px; + list-style-type:none; + margin:0; + padding:0; + width:20px +} +.transfer-type{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=70); + margin:2px 0 0 10px; + -moz-opacity:.7; + -khtml-opacity:.7; + opacity:.7; + position:relative +} +.transfer-completed .transfer-type,.transfer-error .transfer-type,.transfer-started .transfer-type{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity:1; + -khtml-opacity:1; + opacity:1 +} +.transfer-type.download:before,.transfer-type.upload:before,.transfer-type:after,.transfer-type:before{ + content:""; + display:block; + height:16px; + left:2px; + position:absolute; + top:2px; + width:16px +} +.transfer-type.upload:after{ + --mask-color:var(--secondary-blue); + z-index:11 +} +.transfer-type.download:after{ + --mask-color:var(--secondary-green); + z-index:11 +} +.transfer-type:after{ + background-color:var(--stroke-main); + border-radius:100%; + z-index:10 +} +.transfer-type ul :nth-child(odd){ + clip:rect(0, 20px, 20px, 10px) +} +.transfer-type ul li:nth-child(2n){ + clip:rect(0, 10px, 20px, 0) +} +.transfer-type ul li{ + position:absolute +} +.transfer-type ul li span{ + background-color:var(--secondary-green); + display:block; + height:20px; + width:10px +} +.transfer-type.upload ul span{ + background-color:var(--secondary-blue) +} +.transfer-type.safari-downloaded ul li span{ + background-color:var(--secondary-red) +} +.transfer-started.transfer-paused:not(.transfer-completed) .transfer-type ul li span{ + background-color:rgba(0, 0, 0, .3) +} +.transfer-type.safari-downloaded:before{ + background-position:-7px -4064px +} +.transfer-paused.transfer-started .transfer-type:before{ + background-position:-13px -4110px +} +.transfer-type ul li.right-c span{ + -moz-border-radius-topleft:10px; + -moz-border-radius-bottomleft:10px; + -webkit-border-bottom-left-radius:10px; + border-bottom-left-radius:10px; + -webkit-border-top-left-radius:10px; + border-top-left-radius:10px +} +.transfer-type ul li.left-c span{ + -moz-border-radius-topright:10px; + -moz-border-radius-bottomright:10px; + -webkit-border-bottom-right-radius:10px; + border-bottom-right-radius:10px; + -webkit-border-top-right-radius:10px; + border-top-right-radius:10px; + margin-left:10px +} +.transfer-status:first-letter{ + text-transform:uppercase +} +.transfer-table .eta{ + display:inline-block; + min-width:100px +} +.transfer-table .eta span{ + color:#999; + padding:0 5px 0 1px +} +.transfer-table .eta.unknown{ + opacity:.36 +} +.transfer-table .eta.unknown:before{ + background:linear-gradient(90deg, var(--icon-rest) 0, var(--icon-rest) 44%, var(--stroke-main) 45%, var(--stroke-main) 55%, var(--icon-rest) 56%, var(--icon-rest) 100%); + content:""; + display:inline-block; + height:2px; + vertical-align:middle; + width:48px +} +.transfer-table .speed{ + color:#999 +} +.transfer-table .speed span{ + color:#666; + padding:0 5px 0 0 +} +.speed.unknown{ + color:#999; + text-transform:uppercase +} +.transfer-panel-opened .transfer-table-wrapper{ + display:block +} +.fm-right-files-block{ + height:calc(100% - 48px); + position:relative +} +.fm-right-header{ + -webkit-padding-end:8px; + padding-inline-end:8px +} +.rtl .fm-right-header{ + direction:rtl +} +.fm-transfers-header{ + -webkit-padding-end:16px; + margin-bottom:4px; + padding-inline-end:16px +} +.fm-right-header,.fm-transfers-header,.new-notification-top{ + background-color:var(--stroke-main); + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + flex-shrink:0; + height:48px; + overflow:hidden; + position:relative; + white-space:nowrap +} +.fm-right-header .mega-button,.fm-transfers-header .mega-button{ + -webkit-margin-end:8px; + margin-inline-end:8px +} +.fm-transfers-header .mega-button{ + margin-top:5px +} +.fm-transfers-header .mega-button i{ + --mask-color:var(--icon-rest) +} +.fm-transfers-header .mega-button.transfer-clear-all-icon i{ + --mask-color:var(--secondary-red) +} +.fm-right-header .mega-button.fm-new-shared-folder{ + overflow:visible +} +.fm-header-buttons{ + align-items:center; + box-sizing:border-box; + display:flex; + flex-direction:row-reverse; + float:right; + font-size:0; + height:48px; + padding-right:9px; + white-space:nowrap +} +.rtl .fm-header-buttons{ + float:left; + width:100% +} +.fm-breadcrumbs-block{ + box-sizing:border-box; + font-size:0; + height:36px; + overflow:hidden; + white-space:nowrap +} +.properties-breadcrumb .fm-breadcrumbs-block.info{ + height:24px +} +.properties-breadcrumb .fm-breadcrumbs-wrapper.info{ + -webkit-padding-start:8px; + margin-top:unset; + padding-inline-start:8px +} +.fm-breadcrumbs-wrapper{ + -webkit-padding-start:20px; + align-items:center; + display:flex; + margin-top:6px; + padding-inline-start:20px +} +.fm-breadcrumbs-block:not(.hidden){ + -webkit-padding-end:24px; + align-items:center; + display:flex; + padding-inline-end:24px; + width:100% +} +.fm-breadcrumbs{ + align-items:center; + cursor:pointer; + display:flex; + height:24px; + min-width:0; + position:relative; + text-decoration:none +} +.fm-breadcrumbs.root{ + flex-shrink:0 +} +.properties-breadcrumb .fm-breadcrumbs:last-of-type{ + flex-shrink:0; + max-width:70% +} +.properties-breadcrumb .fm-breadcrumbs-wrapper a{ + min-width:44px +} +.fm-breadcrumbs:last-of-type{ + flex-shrink:0; + max-width:70% +} +.fm-breadcrumbs:only-child{ + max-width:100% +} +.fm-breadcrumbs .sprite-fm-mono{ + --mask-color:var(--icon-rest) +} +.fm-breadcrumbs span.sprite-fm-mono{ + margin-left:10px +} +.fm-breadcrumbs .next-arrow{ + --mask-color:var(--icon-rest); + display:block; + right:-4px; + top:3px +} +.rtl .fm-breadcrumbs .next-arrow{ + transform:rotate(180deg) +} +.crumb-overflow-link{ + align-items:center; + background-color:var(--stroke-main); + display:flex; + padding:0 4px +} +.properties-breadcrumb .crumb-overflow-link{ + background-color:unset +} +.crumb-overflow-link .breadcrumb-dropdown-link{ + border-radius:12px; + height:24px +} +.crumb-overflow-link .breadcrumb-dropdown-link:hover{ + background:var(--surface-grey-2) +} +.search-bottom-wrapper .crumb-overflow-link{ + background:var(--surface-grey-2); + height:64px +} +.search-bottom-wrapper .crumb-overflow-link .breadcrumb-dropdown-link{ + border-radius:12px; + height:24px +} +.search-bottom-wrapper .crumb-overflow-link .breadcrumb-dropdown-link:hover{ + background:var(--surface-grey-1) +} +.crumb-overflow-link i{ + --mask-color:var(--icon-rest); + flex-shrink:0 +} +.rtl .crumb-overflow-link i{ + transform:rotate(180deg) +} +.crumb-overflow-link i.menu-icon{ + margin:0 8px +} +.fm-breadcrumbs:first-child .sprite-fm-mono.icon-arrow-right{ + --icon-size:16px +} +.fm-breadcrumbs .right-arrow-bg{ + display:block; + font:var(--text-body1); + overflow:hidden; + padding:0 8px; + position:relative; + text-align:center; + text-overflow:ellipsis; + user-select:text +} +.fm-breadcrumbs.public-links i.small-icon.get-link{ + left:12px; + margin:0; + opacity:.75; + position:absolute; + top:8px +} +.fm-account-top .right-arrow-bg{ + color:var(--text-color-high); + display:block; + font-size:var(--text-body1); + overflow:hidden; + text-overflow:ellipsis; + width:100% +} +.breadcrumb-dropdown{ + display:none; + position:relative +} +.breadcrumb-dropdown.active{ + background-color:var(--context-menu-background); + border-radius:12px; + box-shadow:var(--dropdown-shadow); + display:flex; + flex-direction:column; + left:24px; + min-width:200px; + padding:10px; + position:absolute; + top:32px; + width:max-content; + z-index:99 +} +.fm-breadcrumbs-wrapper .breadcrumb-dropdown.active{ + max-height:85vh; + z-index:300 +} +.rtl .breadcrumb-dropdown.active{ + left:auto; + right:24px +} +.search-bottom-wrapper .breadcrumb-dropdown{ + bottom:52px; + position:absolute; + top:auto; + z-index:200 +} +.breadcrumb-dropdown a{ + align-items:center; + border-radius:4px; + box-sizing:border-box; + color:var(--stroke-main-inverted); + display:flex; + font:var(--text-body1); + height:32px; + margin-right:0; + opacity:.7; + padding:6px; + position:relative +} +.breadcrumb-dropdown a:hover{ + background-color:var(--stroke-grey-4); + opacity:1 +} +.breadcrumb-dropdown a i{ + --mask-color:var(--icon-rest); + display:block +} +.breadcrumb-dropdown a span{ + margin-left:8px; + max-width:300px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.deleted .avatar-wrapper,.deleted .fm-chat-user-info,.ignored .avatar-wrapper,.ignored .fm-chat-user-info{ + opacity:.5 +} +.fm-breadcrumbs.contacts .right-arrow-bg span{ + display:none +} +.fm-picker-breadcrumbs .fm-breadcrumbs.contacts .right-arrow-bg span{ + display:inline-block +} +.fm-files-view-icon{ + -webkit-margin-end:11px; + -webkit-margin-start:16px; + cursor:pointer; + display:block; + float:right; + height:24px; + margin:6px 0; + margin-inline-end:11px; + margin-inline-start:16px; + transition:opacity .2s ease-in-out; + width:24px +} +.fm-files-view-icon .small-icon{ + background-image:none +} +.fm-files-view-icon i{ + --mask-color:var(--stroke-mid-grey); + --icon-size:24px +} +.fm-files-view-icon .listing-view-icon{ + background-position:-4px -1333px; + height:22px; + padding:3px; + width:22px +} +.fm-files-view-icon.listing-view{ + background-image:none +} +.fm-files-view-icon.block-view{ + background-image:none; + margin:0 +} +.fm-files-view-icon.block-view.active,.fm-files-view-icon.listing-view.active{ + border-bottom:2px solid var(--secondary-blue) +} +.fm-files-view-icon.block-view.active i,.fm-files-view-icon.listing-view.active i{ + --mask-color:var(--icon-active) +} +.fm-files-view-icon.block-view.inactive,.fm-files-view-icon.listing-view.inactive{ + cursor:default +} +.fm-files-search input::-webkit-input-placeholder{ + opacity:.3 +} +.context-menu,.dialog-sorting-menu,.fm-sorting-menu{ + -webkit-background-clip:padding-box; + background-clip:padding-box; + background-color:#333; + -moz-border-radius:8px; + -webkit-border-radius:8px; + border-radius:8px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + min-width:160px; + padding:8px 0; + position:absolute; + z-index:500 +} +.search-permissions .permissions-menu-arrow{ + display:none +} +.nw-sorting-menu{ + right:-155px; + top:33px +} +.dropdown.body.dialog-sorting-menu,.fm-sorting-menu{ + left:590px; + min-width:198px; + top:103px +} +.mega-dialog .dropdown.body.dialog-sorting-menu{ + left:176px; + top:202px +} +.context-menu-divider{ + background-color:hsla(0, 0%, 100%, .1); + display:block; + height:2px; + margin:3px 0 +} +.context-menu-divider.pro{ + background-color:initial +} +.dropdown.body.add-user-popup,.dropdown.body.add-user-popup .create-new-folder,.dropdown.body.create-new-folder{ + z-index:900 +} +.dropdown.body.create-new-folder .fm-dialog-body{ + margin-bottom:24px; + padding:0 +} +.dropdown.body.create-new-folder .fm-notifications-bottom{ + display:flex; + flex-direction:row-reverse; + min-height:0; + padding:0 +} +.dropdown.body.create-new-folder .fm-notifications-bottom button{ + -webkit-margin-start:8px; + margin:0; + margin-inline-start:8px +} +.dialog .add-user-size-icon.short-size{ + display:none +} +.add-user-notification{ + margin-bottom:16px; + margin-top:16px +} +.cancel-subscription-txt{ + padding:16px 8px 0 +} +.cancel-textarea-bl.mega-textarea{ + margin:-4px 0 0 +} +.cancel-textarea-bl .cancel-textarea.textarea-scroll{ + margin:12px 0; + max-height:140px +} +.cancel-textarea-bl .cancel-textarea.textarea-scroll textarea{ + min-height:140px +} +.rename-input-bl input{ + background-image:none +} +.create-folder-input-bl input.error,.error .create-folder-input-bl,.error .fm-account-input,.error .rename-input-bl,.rename-input-bl input.error,input.summary-ff-name.error{ + color:#d90007 +} +.create-album-input-bl i,.create-folder-input-bl i,.rename-input-bl i{ + background-repeat:no-repeat; + height:24px; + left:8px; + position:absolute; + top:6px; + width:24px +} +.fm-account-labels .labels-block.email-confirm-txt{ + display:none; + height:18px +} +.email-confirm .fm-account-labels .labels-block.email-confirm-txt{ + display:block +} +.fmholder td{ + cursor:default +} +.fm-account-overlay,.fm-dialog-overlay{ + background:var(--surface-overlay); + bottom:0; + height:100%; + left:0; + position:fixed; + top:0; + width:100%; + z-index:1100 +} +.fm-dialog-overlay.bitcoin-invoice-dialog-overlay,.fm-dialog-overlay.dark-overlay,.fm-dialog-overlay.payment-dialog-overlay,.fm-dialog-overlay.voucher-dialog-overlay{ + background:rgba(34, 34, 34, .95) +} +.invoice-container{ + position:relative +} +.rtl .invoice-container{ + direction:ltr !important +} +.de .user-management-account-settings .invoice-detail .invoice-container.pay-receipt .mega-contact-container{ + width:55.5% +} +.de .user-management-account-settings .invoice-detail .invoice-container.pay-receipt .inv-title-container{ + width:calc(44% - 56px) +} +.mega-dialog.reset-success-st3{ + width:456px +} +.mega-dialog.restore-success{ + margin:-137px 0 0 -182px; + min-height:274px; + width:364px +} +.mega-dialog.password-dialog{ + width:500px +} +.mega-dialog.chat-confirm-dialog{ + margin:-97px 0 0 -302px; + min-height:50px; + width:604px +} +.mega-dialog.generic-dialog{ + height:auto; + margin:-160px 0 0 -150px; + min-height:240px; + min-width:320px; + overflow:hidden; + width:auto; + z-index:1200 +} +.mega-dialog.generic-dialog .fm-dialog-contents{ + min-height:120px +} +.paypal-body{ + margin-top:15px; + text-align:center; + width:504px +} +.qr-http-link{ + color:#333; + font-family:source_sans_prosemibold,sans-serif; + font-size:15px; + line-height:19px; + user-select:text +} +.mega-dialog.file-edit-dialog{ + left:25%; + top:25%; + width:800px +} +.file-edit-dialog iframe{ + margin-left:20px; + width:741px +} +.versioning-indicator{ + display:none; + position:absolute +} +.dialog.versioning-indicator{ + left:14px; + top:14px +} +.data-block-view .versioning-indicator{ + float:right; + height:16px; + left:7px; + margin:4px 4px 4px 0; + position:static; + top:2px; + width:16px +} +.data-block-view .versioning-indicator i{ + --mask-color:var(--icon-rest); + --icon-size:16px +} +.bitcoin-invoice-dialog .bitcoin-qr-code{ + margin:25px 0 20px 26px; + width:276px +} +.bitcoin-invoice-dialog .bitcoin-qr-code canvas{ + background-color:#f2f2f2; + border-radius:10px; + padding:10px +} +.fm-blocks-view .versioning .versioning-indicator,.fm-recents .versioning .versioning-indicator,.ver-col-container .versioning .versioning-indicator{ + display:block +} +.taken-down .dialog.versioning-indicator{ + display:none +} +.file-status-icon.star+.dialog.versioning-indicator{ + left:44px +} +.notification-header{ + border-bottom:1px solid var(--divider-color); + box-sizing:border-box; + padding:14px 0 10px; + position:relative; + text-align:center; + z-index:1 +} +.notification-txt{ + color:var(--text-color-high); + display:inline-block; + float:none; + font:var(--text-h3-bold) +} +.notification-status{ + background:var(--label-red); + border-radius:100%; + display:block; + flex-grow:0; + flex-shrink:0; + height:8px; + margin:24px 4px 0; + transition:background-color .2s ease-in-out; + width:8px +} +.read .notification-status{ + background:none +} +.download-save-your-file{ + height:100%; + left:0; + position:absolute; + top:0; + width:100%; + z-index:100 +} +.download-save-your-file object{ + cursor:pointer; + width:100% !important +} +.fm-dialog-new-folder-input{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-medium); + float:left; + float:none; + height:40px; + width:330px; + width:100% +} +.fm-dialog-new-folder-pad{ + margin:0 30px 0 0 +} +.fm-dialog-new-folder-input input{ + background-color:initial; + border:0; + box-sizing:border-box; + color:var(--text-color-medium); + font:var(--text-body1); + height:38px; + margin-top:0; + padding:0 10px; + width:100% +} +.active .fm-dialog-new-folder-input input{ + color:#9a9a9a +} +.fm-notifications-bottom{ + padding-top:12px +} +.fm-dialog-button.dialog-newfolder-button{ + float:left; + margin-left:-4px +} +.fm-dialog-button.links-button{ + position:relative +} +.fm-dialog-button.links-button object{ + height:32px; + left:0; + position:absolute; + top:0; + width:100% +} +.confirmation-checkbox{ + margin:-5px 0 0 -16px +} +.fm-share-body{ + height:318px; + margin-top:12px +} +.bp-body{ + height:320px; + margin-top:15px +} +.fm-share-permissions-block.bottom{ + background-position:right -9918px; + bottom:7px; + top:auto +} +.fm-notification-body{ + box-sizing:border-box; + padding:26px 20px +} +.fm-del-contact-avatar{ + display:none +} +.delete-contact .fm-del-contact-avatar{ + border-radius:100%; + color:#fff; + display:block; + font-size:30px; + height:100%; + line-height:63px; + position:relative; + text-align:center; + width:100% +} +.avatar-wrapper.avatar-remove-dialog,.delete-contact .fm-del-contact-avatar img{ + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + font-size:30px; + height:64px; + line-height:64px; + width:64px +} +.delete-contact .verified_icon i.verified-user-icon{ + display:block +} +.fm-del-contacts-number{ + display:none +} +.delete-contact.multiple .fm-del-contacts-number{ + background-color:#777; + border:3px solid #fff; + -moz-border-radius:30px; + -webkit-border-radius:30px; + border-radius:30px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + display:block; + font-family:source_sans_prosemibold,Arial,sans-serif; + font-size:15px; + height:30px; + line-height:24px; + min-width:30px; + padding:0 8px; + position:absolute; + right:-7px; + text-align:center; + top:-7px; + z-index:10 +} +.delete-contact.multiple .fm-del-contact-avatar i.multiple{ + display:block !important +} +.fm-notification-info{ + display:table-cell; + font-family:LatoWeb,source_sans_proregular,sans-serif; + height:75px; + margin-left:90px; + vertical-align:middle +} +.fm-notification-info h1,.fm-notification-info h2,.fm-notification-info p{ + color:#333; + font-size:15px; + font-weight:400; + line-height:21px; + margin:0; + padding:0 +} +.fm-notification-info h2{ + font-size:14px +} +.fm-notification-info p{ + color:#888; + font-size:13px; + line-height:20px; + padding:9px 0 0 +} +.fm-notification-info p:first-child{ + padding-top:0 +} +.fm-notification-info p.red{ + color:#d90007; + font-size:13px; + line-height:21px; + padding:15px 0 0 23px +} +.fm-notification-info p.red:before{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-position:0 -1848px; + background-repeat:no-repeat; + content:""; + display:block; + height:18px; + margin:3px 0 0 -23px; + position:absolute; + width:18px +} +.fileupload-item label,.folderupload-item label{ + cursor:pointer; + display:block; + line-height:31px +} +.chrome-dialog-body{ + box-sizing:border-box; + height:186px; + padding:10px 0 0; + position:relative; + text-align:center +} +.chrome-dialog-logo{ + background-image:url(../imagery/mega-browsers-sprite.179e9fa1abdfc1d6.png); + background-position:center -509px; + background-repeat:repeat-x; + background-size:100px auto; + cursor:pointer; + height:90px; + margin:0 auto; + width:90px +} +.chrome-dialog-notification{ + background-color:#000; + border-radius:4px; + color:#fff; + display:inline-block; + font-size:14px; + line-height:16px; + margin:10px 0 0; + padding:0 10px 6px; + text-align:center +} +.chrome-dialog-arrow{ + background-image:url(../imagery/mega-browsers-sprite.179e9fa1abdfc1d6.png); + background-position:center -808px; + background-repeat:no-repeat; + background-size:100px auto; + height:5px; + margin:0 auto; + position:relative; + top:-5px; + width:10px +} +.fm-bandwidth-body{ + min-height:436px +} +.fm-bandwidth-icon{ + background-image:url(../imagery/mega-quota-sprite.cd2b57b66e5c53c1.png); + background-position:left 0; + background-repeat:repeat-x; + float:left; + height:66px; + margin:28px 0 28px 28px; + width:66px +} +.fm-bandwidth-icon.pro-icon{ + background-position:left -333px; + height:63px; + margin:28px 0 28px 28px +} +.fm-bandwidth-icon-text{ + color:#333; + font-size:14px; + line-height:21px; + margin-left:90px; + padding:28px; + text-align:left +} +.fm-bandwidth-dashed{ + background-image:url(../imagery/mega-quota-sprite.cd2b57b66e5c53c1.png); + background-position:-5px -810px; + background-repeat:repeat-x; + padding:28px 28px 16px +} +.fm-bandwidth-dashed.quota-bottom-block{ + padding:0 +} +.fm-short-blocks{ + box-sizing:border-box; + float:left; + padding:0 5px 16px; + width:33.333333% +} +.fm-bandwidth-gray-bl{ + background-color:#f6f6f6; + border-radius:4px; + min-height:110px; + text-align:center +} +.fm-bandwidth-number-txt{ + color:#bf1900; + font-size:31px; + line-height:34px; + padding:23px 0 0; + text-align:center +} +.fm-bandwidth-number-txt span.small{ + font-size:20px +} +.green{ + color:var(--text-color-success) +} +.fm-bandwidth-small-txt{ + color:#333; + font-size:14px; + line-height:18px; + text-align:center +} +.fm-bandwidth-dashed p{ + color:#666; + font-size:14px; + line-height:20px; + margin:0; + padding:0 5px 10px +} +.quota-bottom-block.fm-bandwidth-icon-text{ + padding:20px 20px 18px +} +.export-links-warning{ + background-color:rgba(51, 51, 51, .95); + bottom:0; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + left:0; + padding:24px; + position:absolute; + width:100%; + z-index:1200 +} +.export-links-warning p{ + color:#ccc; + font-size:13px; + line-height:21px; + margin:0; + padding:3px 0 +} +.export-warning-content{ + margin:0 auto; + max-width:947px; + min-height:48px +} +span.orange{ + color:#ffd300; + display:block +} +.export-links-warning p span.red{ + color:#f0373b; + display:block +} +.export-links-warning-close{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-position:-54px -4874px; + background-repeat:no-repeat; + cursor:pointer; + float:right; + height:30px; + margin:-15px -17px 0 0; + opacity:.3; + transition:opacity .2s ease-in-out; + width:30px +} +.no-link .checkboxOff,.no-link .checkboxOn,.no-link .radio-txt{ + display:none +} +.top-head .dropdown.body{ + top:40px; + z-index:1120 +} +.top-user-status-popup.dropdown.body{ + border-radius:24px; + font-size:0; + padding:24px; + width:240px +} +.top-user-status-popup .dropdown-item.mid-txt{ + border-radius:4px; + flex-wrap:wrap; + height:auto; + padding:6px 12px +} +.top-user-status-popup .dropdown-item span{ + flex:1; + font:var(--text-body1) +} +.top-user-status-popup .dropdown-item .activity-status{ + -webkit-margin-end:12px; + flex:0 0 auto; + height:8px; + margin:0; + margin-inline-end:12px; + width:8px +} +.top-user-status-popup .activity-status-info{ + -webkit-padding-start:21px; + box-sizing:border-box; + color:var(--text-color-low); + font:var(--text-body2); + margin:2px 0 0; + padding-inline-start:21px; + white-space:normal; + width:100% +} +.top-user-status-popup .activity-status-info.last{ + margin-bottom:0 +} +.dropdown.popup.notification-popup{ + padding:0 !important +} +.dropdown.popup.top-login-popup{ + min-width:332px +} +.dropdown.popup.top-warning-popup{ + border-radius:24px; + min-width:404px +} +.dropdown.popup.top-warning-popup .fm-notifications-bottom{ + justify-content:flex-end; + min-height:0; + padding:24px 0 0 +} +.dropdown.popup.astropay-payment-reminder{ + min-width:434px +} +.dropdown.popup.membership-popup{ + min-height:265px; + min-width:472px +} +.dropdown.popup.over-quota .warning-popup-body{ + font:var(--text-body2) +} +.dropdown.popup.over-quota{ + width:528px +} +.dropdown.popup.over-quota a{ + color:var(--text-color-info) +} +.dropdown.popup.over-quota .description{ + margin:16px 0 0 +} +.dropdown.popup.ephemeral-session .description{ + font:var(--text-body2) +} +.dropdown.popup.ephemeral-session .warning-popup-body .green{ + color:var(--text-color-success) +} +.membership-loading,.membership-main-block{ + min-height:211px; + position:relative +} +.membership-loader{ + background-color:#000; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + height:40px; + left:50%; + margin:-20px 0 0 -20px; + position:absolute; + top:50%; + width:40px +} +.membership-loader img{ + margin:1px; + width:38px +} +.fm-account-bg .plan-icon{ + float:left; + margin:-1px -1px 0 -5px; + position:static +} +.membership-big-txt{ + font-size:15px; + line-height:21px; + padding:4px 0 6px +} +.fm-account-reseller .membership-big-txt{ + box-sizing:border-box; + font-size:20px; + height:68px; + line-height:21px; + padding:21px 0 6px +} +.membership-big-txt.name{ + color:var(--text-color-high); + font:var(--text-h2); + padding:20px 0 0 +} +.membership-big-txt.email,.membership-big-txt.name{ + max-width:100%; + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.membership-big-txt.email{ + box-sizing:border-box; + color:var(--text-color-medium); + font:var(--text-body1); + margin:0 0 8px; + position:relative +} +.membership-big-txt.plan-txt{ + color:#71ad32 +} +.pro-popup .membership-big-txt.plan-txt{ + color:#333 +} +.pro-popup .membership-big-txt.balance{ + color:#d90007 +} +.membership-big-txt.floating{ + display:inline-block +} +.mobile.fm-dialog-overlay,.mobile.payment-result.failed,.mobile.payment-result.pending.alternate,.mobile.payment-result.pending.original,.mobile.payment-result.success{ + display:none; + position:absolute +} +.dropdown.body.submenu.reset{ + left:100%; + right:auto +} +.dropdown.body.submenu.left-position{ + left:auto; + right:100% +} +.rtl .dropdown.body.submenu.right-position{ + left:100%; + right:auto +} +.dropdown.body.submenu.overlap-right{ + right:auto +} +.dropdown.body.submenu.overlap-left{ + left:auto +} +.context-bottom-arrow,.context-top-arrow{ + border-left:4px solid transparent; + border-right:4px solid transparent; + cursor:pointer; + display:none; + height:0; + left:calc(50% - 4px); + position:absolute; + top:10px; + width:0 +} +.mega-height>.context-bottom-arrow,.mega-height>.context-top-arrow{ + display:block +} +.context-top-arrow{ + border-bottom:4px solid var(--icon-rest) +} +.context-bottom-arrow{ + border-top:4px solid var(--icon-rest); + bottom:10px; + top:auto +} +.context-bottom-arrow.disabled,.context-top-arrow.disabled{ + cursor:default; + opacity:.7 +} +.dropdown.body.submenu.mega-height,.dropdown.files-menu.mega-height{ + margin-top:-14px; + padding:22px 8px +} +.context-scrolling-block,.dropdown.body.submenu.mega-height>.context-bottom-arrow,.dropdown.body.submenu.mega-height>.context-top-arrow{ + display:block +} +.dropdown.body.submenu.mega-height>.context-scrolling-block,.dropdown.files-menu.mega-height>.context-scrolling-block{ + height:100%; + margin:0 -8px; + overflow:hidden; + padding:0 8px +} +.dropdown-item.sort-grid-item i{ + background-position:100px 100px; + background-repeat:no-repeat +} +.dropdown-item.sort-grid-item.selected i{ + background-position:-7px -1991px +} +.dropdown-item.sort-grid-item.selected.inverted i{ + background-position:-45px -1991px +} +.dropdown-item.sort-grid-item.selected:hover i{ + background-position:-26px -1991px +} +.dropdown-item.sort-grid-item.selected.inverted:hover i{ + background-position:-62px -1991px +} +.sorting-menu-item{ + background-color:hsla(0, 0%, 100%, 0); + background-position:right -7966px; + background-repeat:no-repeat; + border-radius:2px; + box-sizing:border-box; + color:#999; + cursor:pointer; + display:block; + font-size:13px; + height:24px; + line-height:23px; + padding:0 12px; + position:relative; + transition:background-color .2s ease-in-out,color .2s ease-in-out; + white-space:nowrap +} +.sorting-menu-item:hover{ + background-color:hsla(0, 0%, 100%, .1) +} +.sorting-menu-item.active,.sorting-menu-item.selected{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + color:#fff +} +.bottom-points-position .context-menu-points,.left-points-position .context-menu-points,.right-points-position .context-menu-points,.top-points-position .context-menu-points{ + display:block +} +.bottom-points-position.context-menu,.left-points-position.context-menu,.right-points-position.context-menu,.top-points-position.context-menu{ + padding:16px 0 8px +} +.right-points-position .context-menu-points{ + left:auto; + right:4px +} +.bottom-points-position .context-menu-points{ + bottom:4px; + top:auto +} +.open-item .context-menu-icon{ + background-position:-3px -4633px +} +.cloud-item .context-menu-icon{ + background-position:6px -8444px +} +.download-item .context-menu-icon{ + background-position:-3px -5212px +} +.download-standart-item .context-menu-icon{ + background-position:-3px -304px +} +.zipdownload-item .context-menu-icon{ + background-position:-3px -336px +} +.send-to-contact-item .context-menu-icon{ + background-position:-3px -4694px; + background-position:-3px -4987px +} +.createwidget-item .context-menu-icon,.getlink-item .context-menu-icon,.managewidget-item .context-menu-icon,.removewidget-item .context-menu-icon{ + background-position:-3px -4344px +} +.removelink-item .context-menu-icon{ + background-position:-3px -5186px +} +.image-like-item .context-menu-icon,.sh4r1ng-item .context-menu-icon{ + background-position:-3px -4800px +} +.move-item .context-menu-icon{ + background-position:-3px -4416px +} +.copy-item .context-menu-icon,.import-item .context-menu-icon{ + background-position:-2px -4448px +} +.folder-item .context-menu-icon{ + background-position:-3px -4556px +} +.shared-folder-item .context-menu-icon{ + background-position:-4px -4666px +} +.newfolder-item .context-menu-icon{ + background-position:-3px -5160px +} +.fileupload-item .context-menu-icon{ + background-position:-3px -4312px +} +.folderupload-item .context-menu-icon{ + background-position:-3px -5250px +} +.clearbin-item .context-menu-icon,.remove-item .context-menu-icon{ + background-position:-3px -4479px +} +.startchat-item .context-menu-icon{ + background-position:-4px -7260px +} +.startaudio-item .context-menu-icon{ + background-position:-4px -2259px +} +.startvideo-item .context-menu-icon{ + background-position:-5px -2004px +} +.leaveshare-item .context-menu-icon{ + background-position:-1px -10038px +} +.properties-item .context-menu-icon{ + background-position:-3px -4240px +} +.advanced-item .context-menu-icon{ + background-position:5px -8579px +} +.permissions-item .context-menu-icon{ + background-position:-2px -4935px; + background-position:-3px -4935px +} +.rename-item .context-menu-icon{ + background-position:-3px -4383px +} +.addcontact-item .context-menu-icon{ + background-position:-3px -5020px +} +.reply-item .context-menu-icon{ + background-position:-3px -5057px +} +.reply-to-all .context-menu-icon{ + background-position:-3px -5090px +} +.forward-item .context-menu-icon{ + background-position:-3px -5123px +} +.add-star-item .context-menu-icon{ + background-position:-3px -4271px +} +.canceltransfer-item .context-menu-icon{ + background-position:4px -3716px +} +.select-all .context-menu-icon{ + background-position:-1px -5290px +} +.preview-item .context-menu-icon{ + background-position:-3px -5380px +} +.transfer-pause .context-menu-icon{ + background-position:5px -3612px +} +.transfer-play .context-menu-icon{ + background-position:4px -5432px +} +.move-up .context-menu-icon{ + background-position:5px -3652px +} +.move-down .context-menu-icon{ + background-position:5px -3684px +} +.transfer-clear .context-menu-icon{ + background-position:5px -3716px +} +.full-access .context-menu-icon,.read-and-write .context-menu-icon,.read-only .context-menu-icon{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-repeat:no-repeat +} +.full-access .context-menu-icon{ + background-position:-75px -175px +} +.read-and-write .context-menu-icon{ + background-position:-75px -207px +} +.read-only .context-menu-icon{ + background-position:-75px -238px +} +.fm-account-top-title{ + color:#333; + font-size:17px; + line-height:48px; + padding:0 0 0 20px; + position:absolute; + text-align:left +} +.fm-account-main{ + height:100%; + max-width:100%; + width:100% +} +.fm-account-header{ + color:var(--text-color-high); + font:var(--text-h3-bold); + height:18px; + margin:3px 0 +} +.transfers-form .fm-account-header{ + height:auto +} +.fm-account-header.big{ + font-size:18px; + padding:18px 0 0 +} +.fm-account-header.light-grey{ + color:#999 +} +.fm-account-history .fm-account-header,.fm-account-widget .fm-account-header{ + line-height:16px +} +.account.data-txt{ + color:#333; + font-size:14px; + line-height:18px; + margin:0 0 -9px; + padding:12px 0 0 +} +.account.data-txt span{ + color:#d90007 +} +.fm-account-header .semi-big-icon{ + margin:-5px 12px -3px -1px; + vertical-align:top +} +.fm-account-header span{ + display:inline-block; + vertical-align:top +} +.avatar-bg{ + height:100%; + left:0; + overflow:hidden; + pointer-events:none; + position:absolute; + top:0; + -webkit-transform:translateZ(0); + width:100% +} +.avatar-bg span{ + background-position:50%; + background-size:cover; + display:block; + filter:blur(10px); + -webkit-filter:blur(15px); + height:110%; + left:-5%; + position:absolute; + top:-5%; + width:110% +} +.avatar-bg:after{ + background:linear-gradient(180deg, hsla(0, 0%, 96.1%, .5) 0, #f5f5f5); + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.avatar-bg.colorized:after{ + background:linear-gradient(180deg, hsla(0, 0%, 96.1%, .7) 0, #f5f5f5) +} +.account.user-data-block{ + font-size:0; + line-height:0; + padding:60px 20px 16px; + position:relative; + text-align:center +} +.account.user-data-block .plan-icon i{ + display:none; + height:24px; + margin:0 auto 4px; + width:24px +} +.account.user-data-block .plan-icon.free i.free,.account.user-data-block .plan-icon.pro1 i.pro1,.account.user-data-block .plan-icon.pro2 i.pro2,.account.user-data-block .plan-icon.pro3 i.pro3,.account.user-data-block .plan-icon.pro4 i.pro4,.account.user-data-block .plan-icon.pro100 i.business,.account.user-data-block .plan-icon.pro101 i.pro101{ + display:block +} +.account.membership-plan{ + color:var(--text-color-high); + font:var(--text-body1); + position:relative +} +.account.usename-block{ + display:inline-block; + max-width:100%; + position:relative +} +.account.settings-button{ + cursor:pointer; + position:absolute; + right:0; + top:20px +} +.account.settings-button i{ + display:none +} +.expiry a{ + color:#fc444b +} +.rtl .content-panel.dashboard{ + direction:rtl +} +.widgets.content-block{ + box-sizing:border-box; + margin:0 auto; + max-width:988px; + padding:0 24px 24px +} +.rtl .widgets.content-block{ + direction:rtl +} +.ar.business-user .widgets.content-block{ + min-width:750px +} +.widgets.content-block .data-table tr:nth-child(2) td{ + border-width:1px 0 0 +} +.widgets.content-block .data-table tr:nth-child(2) td:after{ + display:block +} +.dashboard .account.user-data-block{ + padding:60px 20px 0 +} +.dashboard .welcome-message-banner{ + margin:24px 0 +} +.dashboard .welcome-message-banner i{ + -webkit-margin-end:8px; + display:inline-block; + height:24px; + margin-inline-end:8px; + vertical-align:middle; + width:24px +} +.dashboard .welcome-message-banner .message{ + color:var(--text-color-high); + display:inline-block; + font:var(--text-h3); + font-family:var(--text-font-family-semibold); + vertical-align:middle +} +.account.left-pane.divider{ + background:var(--surface-main); + height:2px +} +.account.max-width-bl{ + max-width:1400px +} +.account.left-pane .progress-block{ + background-color:rgba(0, 0, 0, .05) +} +.account.left-pane button{ + margin:12px auto +} +.account.left-pane.small-txt{ + color:var(--text-color-medium); + text-align:start +} +.account.left-pane.big-txt,.account.left-pane.small-txt{ + display:block; + font:var(--text-body1); + margin:6px 0; + white-space:normal +} +.account.left-pane.big-txt{ + -webkit-margin-start:auto; + color:var(--text-color-high); + margin-inline-start:auto; + text-align:end +} +.account.left-pane.big-txt.suba-pay-bill{ + margin-bottom:15px; + margin-top:-2px; + width:100% +} +.left-pane.info-block.business-users .account.left-pane.big-txt.suba-days-left,.left-pane.info-block.business-users .account.left-pane.big-txt.suba-status.disabled,.left-pane.info-block.business-users .account.left-pane.big-txt.suba-status.pending{ + color:var(--text-color-warning); + font:var(--text-h3); + opacity:1 +} +.left-pane.info-block.business-users .account.left-pane.big-txt.suba-days-left{ + margin-top:-10px +} +.account.left-pane.big-txt span{ + color:#777; + padding-left:5px +} +.account.left-pane.big-txt .pay-bill-btn span{ + color:unset; + padding-left:unset +} +.account.widget .fm-account-blocks{ + max-width:50%; + padding-top:10px +} +.chart-warning{ + border-left:2px solid #ffd300; + color:#333; + cursor:pointer; + font-size:14px; + line-height:18px; + margin:21px 0 1px; + padding:0 0 0 8px; + position:relative +} +.chart-warning a{ + color:#d90007; + font-family:source_sans_prosemibold,sans-serif +} +.chart-warning.red,.exceeded .chart-warning{ + border-color:#d90007 +} +.going-out .big-icon.cloud{ + background-position:0 -11804px +} +.settings-banner .going-out .chart.progressbars span:before{ + background:var(--stroke-warning) +} +.exceeded .big-icon.cloud{ + background-position:0 -10934px +} +.exceeded .chart.data .perc-txt,.exceeded .chart.data .size-txt,.settings-banner .exceeded .chart.data .perc-txt,.settings-banner .exceeded .chart.data .size-txt{ + color:var(--text-color-error) +} +.bandwidth.exceeded .chart.progressbars span:before,.exceeded .chart.progressbars span:before{ + background:var(--stroke-error) +} +.account.widget.text a.blue{ + color:#2ba6de +} +.account.widget.body.min-height{ + min-height:218px +} +.business-dashboard button.upload-file,.non-business-dashboard button.upload-file{ + --mask-color:var(--secondary-green); + -webkit-margin-start:auto; + margin-inline-start:auto +} +.account.data-table{ + -webkit-margin-start:-24px; + background:transparent; + border:0; + margin-inline-start:-24px; + padding:0 8px 8px; + width:calc(100% + 48px) +} +.account.data-table tr td:after{ + background:var(--divider-color) +} +.account.data-table td:last-of-type{ + text-align:end +} +.account.data-table .empty td{ + color:var(--text-color-low) +} +.account.data-table .empty i{ + --mask-color:var(--icon-inactive) +} +.account.data-item .tiny-icon.cog{ + cursor:pointer; + margin-left:4px; + margin-top:2px; + opacity:.8 +} +.account.data-item .tiny-icon.cog:hover{ + opacity:1 +} +.widget.buttons.qr-widget{ + margin-right:0; + margin-top:105px +} +.account.widget.text.qr-text{ + float:left; + width:65% +} +.account.bonuses-blocks,.account.referral-blocks{ + align-items:center; + display:flex; + flex-wrap:wrap; + justify-content:space-between; + margin-top:16px +} +.account.bonuses-block{ + align-items:center; + display:flex; + margin-top:16px; + width:50% +} +.low-width .account.bonuses-blocks,.low-width .account.referral-blocks{ + justify-content:center +} +.account.referral-block{ + font:var(--text-h2); + margin-top:16px +} +.business-dashboard .account.referral-block{ + width:auto +} +.account.achievements button.more-bonuses,.account.referrals button.referral-program{ + flex:0 0 auto; + flex-shrink:1 +} +.account.bonuses-icon i{ + -webkit-margin-end:24px; + display:inline-block; + height:32px; + margin-inline-end:24px; + width:32px +} +.account.bonuses-title,.account.referral-title{ + font:var(--text-body1); + font-family:var(--text-font-family-semibold); + white-space:nowrap +} +.account.referral-title{ + margin-bottom:4px +} +.account.bonuses-size{ + color:var(--text-color-success); + font:var(--text-h3) +} +.account.referral-value.local{ + color:var(--secondary-green); + display:inline-block; + font:var(--text-h1) +} +.account.referral-value.euro{ + border:1px solid var(--stroke-grey-2); + border-radius:12px; + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body2); + padding:0 4px; + vertical-align:text-bottom +} +.account.referrals .disclaimer{ + color:var(--text-color-medium); + font:var(--text-body2); + margin-top:12px +} +.low-width .account.referrals .disclaimer{ + text-align:center +} +.account.responsive-widget-block{ + display:flex; + flex-direction:row +} +.account.responsive-widget-block .widget.body{ + width:100% +} +.fm-right-block.dashboard.active-achievements .account.responsive-widget-block .widget.body:nth-child(2n){ + -webkit-margin-start:12px; + margin-inline-start:12px +} +.low-width .account.responsive-widget-block{ + flex-direction:column +} +.fm-right-block.dashboard.active-achievements.low-width .account.responsive-widget-block .widget.body{ + -webkit-margin-start:0; + margin-inline-start:0; + margin-top:12px; + width:100% +} +.low-width .account.referral-block{ + margin:0 0 24px; + width:50% +} +.low-width .account.referral-value.local{ + font:var(--text-h2) +} +.chat-widget .account.data-item,.chat-widget .account.widget.title{ + cursor:pointer +} +.account.data-table i{ + --icon-size:16px; + --mask-color:var(--icon-rest); + -webkit-margin-end:8px; + display:inline-block; + margin-inline-end:8px; + vertical-align:middle +} +.account.data-table i.versioning-settings{ + -webkit-margin-start:4px; + cursor:pointer; + margin-inline-start:4px +} +.account.data-table i.versioning-settings:hover{ + --mask-color:var(--icon-active) +} +.account.data-table td span{ + vertical-align:middle +} +.account.data-left-td{ + color:#666; + display:table-cell; + font-size:14px; + line-height:18px; + padding:8px 15px 8px 0 +} +.account.data-right-td{ + display:table-cell; + text-align:right; + vertical-align:middle; + width:19px +} +.account.data-right-td span{ + -moz-border-radius:19px; + -webkit-border-radius:19px; + border-radius:19px; + -webkit-box-shadow:0 0 0 1px #eee; + -moz-box-shadow:0 0 0 1px #eee; + box-shadow:0 0 0 1px #eee; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#666; + display:inline-block; + font-size:14px; + height:19px; + line-height:18px; + margin:1px 0 0; + min-width:19px; + padding:0 6px; + text-align:center +} +.account.learn-more{ + color:#f0373a; + cursor:pointer; + font-family:LatoWebSemibold,sans-serif; + font-size:13px; + height:21px; + letter-spacing:.93px; + position:relative +} +.dropdown.transfer-icon{ + background-image:url(../imagery/mega-account-sprite.b1005bdaf399cdee.png); + background-position:-3px -554px; + background-repeat:no-repeat; + height:68px; + margin:23px auto 0; + width:68px +} +.small.account.progress-list{ + display:block; + padding:9px 0 11px +} +.account.widget .medium.account.progress-list{ + display:flex; + flex-wrap:wrap; + justify-content:space-between; + margin-top:12px +} +.account.widget .medium.account.progress-list .item-wrapper{ + flex-shrink:1 +} +.account.widget .medium.account.progress-list .item-wrapper .pr-item{ + width:max-content +} +.small.account.progress-list.colorized{ + padding:12px 0 2px +} +.medium.account.grey-info-bl{ + background-color:#f2f2f2; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + margin:24px -8px 22px; + padding:4px 8px 4px 9px +} +.medium.account.grey-info-bl i{ + margin:3px 4px 0 0 +} +.grey-info-bl .account.progress-title{ + color:#777; + font-family:Open Sans Italic,sans-serif; + font-size:13px; + height:auto +} +.grey-info-bl .version-settings-button{ + color:#888; + cursor:pointer; + font-size:13px; + line-height:16px; + line-height:inherit; + margin-left:22px +} +.grey-info-bl .version-settings-button:hover{ + color:#666; + text-decoration:underline +} +.small .account.progress-title{ + float:left; + height:24px; + padding:0 +} +.medium .account.progress-title{ + padding:0 +} +.medium .account.progress-size{ + font-size:18px; + line-height:22px +} +.small.account.progress-size{ + color:var(--text-color-success); + display:inline-block; + font:var(--text-body2) +} +.account.progress-block.tiny{ + background-color:#fff; + -moz-border-radius:8px; + -webkit-border-radius:8px; + border-radius:8px; + -webkit-box-shadow:inset 0 0 0 1px #999; + -moz-box-shadow:inset 0 0 0 1px #999; + box-shadow:inset 0 0 0 1px #999; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:8px; + margin-bottom:2px +} +.account.progress-block.tiny.filled{ + background-color:#eee; + -webkit-box-shadow:none; + -moz-box-shadow:none; + box-shadow:none +} +.top-login-full{ + --icon-size:24px; + --mask-color:var(--icon-rest); + cursor:pointer; + display:block; + position:absolute; + right:14px; + top:14px; + z-index:10 +} +.rtl .top-login-full{ + left:14px; + right:auto +} +.top-login-full:hover{ + --mask-color:var(--icon-active) +} +.affiliate-input-block,.top-login-input-block{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:6px -73px; + background-repeat:no-repeat; + border:1px solid #d9d9d9; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + margin-bottom:10px; + padding:1px 11px 1px 31px; + position:relative +} +.affiliate-input-block:not(.dynamic-height),.top-login-input-block{ + height:30px +} +.fm-account-input.voucheramount{ + background:var(--surface-grey-1); + float:right; + margin-top:0; + min-width:50px; + width:80px +} +.affiliate-input-block.focused,.top-login-input-block.focused{ + border-color:#b2b2b2 +} +.affiliate-input-block.incorrect,.top-login-input-block.incorrect{ + border-color:#d52600 +} +.top-login-input-block.e-mail{ + background-position:6px -73px +} +.top-login-input-block.password{ + background-position:6px -113px +} +.top-login-input-block.e-mail.incorrect{ + background-position:6px -153px +} +.top-login-input-block.password.incorrect{ + background-position:6px -193px +} +.affiliate-input-block input,.affiliate-input-block textarea,.top-login-input-block input{ + border:0; + color:#666; + font-family:source_sans_proregular,Arial,sans-serif; + font-size:13px; + line-height:25px; + margin:0; + padding:0; + width:100% +} +.affiliate-input-block input,.top-login-input-block input{ + height:25px +} +.affiliate-input-block input::-webkit-input-placeholder,.top-login-input-block input::-webkit-input-placeholder{ + color:#878787 !important +} +.affiliate-input-block input:-moz-placeholder,.affiliate-input-block input::-moz-placeholder,.top-login-input-block input:-moz-placeholder,.top-login-input-block input::-moz-placeholder{ + color:#878787 !important; + opacity:1 +} +.affiliate-input-block input:-ms-input-placeholder,.top-login-input-block input:-ms-input-placeholder{ + color:#878787 !important +} +.top-head .dropdown.top-login-popup{ + top:48px +} +.top-login-warning{ + background:var(--surface-main-inverted); + border-radius:6px; + font:var(--text-body1); + left:0; + min-height:60px; + opacity:1; + position:absolute; + top:calc(100% + 12px); + transition:opacity .2s ease-in-out 0s; + width:100% +} +.video-theatre-mode .top-login-warning.active{ + margin-top:28px +} +.top-login-warning-close{ + --icon-size:16px; + --mask-color:var(--icon-rest-inverted); + cursor:pointer; + position:absolute; + right:14px; + top:14px +} +.rtl .top-login-warning-close{ + left:14px; + right:auto +} +.top-login-warning-close:hover{ + --mask-color:var(--icon-active-inverted) +} +.top-login-warning-pad{ + color:var(--text-color-medium-inverted); + font:var(--text-body2); + padding:24px +} +.top-login-warning-icon{ + float:left; + height:48px; + width:48px +} +.rtl .top-login-warning-icon{ + float:right +} +.top-login-warning-txt{ + -webkit-margin-start:62px; + -webkit-padding-end:10px; + margin-inline-start:62px; + padding-bottom:12px; + padding-inline-end:10px +} +.top-login-warning-pad a{ + color:var(--text-color-error-inverted) +} +.top-login-warning-bott{ + padding-top:20px +} +.top-login-popup .top-login-warning-bott .radio-txt{ + color:var(--text-color-low-inverted); + font:var(--text-body2) +} +.top-login-input-tooltip{ + display:none; + height:26px; + left:0; + position:absolute; + width:1px; + z-index:10 +} +.login-register-input .top-login-input-tooltip{ + left:auto; + right:0 +} +.login-register-input.incorrect .top-login-input-tooltip,.top-login-input-block.incorrect .top-login-input-tooltip{ + display:block +} +.top-login-tooltip-arrow{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:-3px -554px; + background-repeat:no-repeat; + height:26px; + margin-left:-13px; + position:relative; + width:5px +} +.top-login-forgot-pass{ + color:var(--text-color-low) !important; + font:var(--text-body1); + text-decoration:underline +} +.top-login-forgot-pass:hover{ + text-decoration:none +} +.password-tooltip-arrow{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:0 -912px; + background-repeat:no-repeat; + height:5px; + left:50%; + margin:0 0 -10px -6px; + position:absolute; + width:13px +} +.login-register-input .top-login-tooltip-arrow{ + background-position:-3px -849px; + margin-left:6px +} +.top-loginp-tooltip-txt{ + background-color:rgba(0, 0, 0, .9); + -moz-border-radius:7px; + -webkit-border-radius:7px; + border-radius:7px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#ff2c00; + height:30px; + line-height:28px; + padding:0 10px; + position:absolute; + right:5px; + top:-2px; + white-space:nowrap +} +.login-register-input .top-loginp-tooltip-txt{ + font-size:13px; + height:auto; + left:5px; + line-height:15px; + min-height:46px; + min-width:220px; + padding:7px 15px 5px; + right:auto; + text-align:left; + top:-5px +} +.top-login-input-tooltip.both-incorrect{ + display:none; + margin-top:23px +} +.both-incorrect-inputs .top-login-input-tooltip.both-incorrect{ + display:block +} +.both-incorrect .top-loginp-tooltip-txt{ + line-height:16px; + min-height:45px; + padding:5px 15px; + text-align:center; + top:-9px +} +.login-register-input .white-txt,.top-loginp-tooltip-txt .white-txt{ + color:#fff +} +.both-incorrect-inputs .top-login-input-block{ + border-color:#d52600 +} +.both-incorrect-inputs .top-login-input-block.e-mail{ + background-position:6px -153px +} +.both-incorrect-inputs .top-login-input-block.password{ + background-position:6px -193px +} +.main-top-info-block{ + align-items:center; + background-color:var(--secondary-orange); + border-radius:8px; + box-sizing:border-box; + color:var(--text-color-white-high); + display:flex; + height:36px; + left:12px; + position:relative; + top:67px; + width:calc(100% - 24px) +} +.main-top-info-block i{ + --mask-color:var(--secondary-white); + --icon-size:24px; + margin-left:12px +} +.main-top-info-text{ + color:#fff; + font-size:14px; + height:30px; + line-height:28px; + margin:0 0 0 12px +} +.main-mid-pad{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + margin:0 auto; + padding:0 15px +} +.bottom-page.sign .main-mid-pad,.main-mid-pad{ + max-width:1020px +} +.main-mid-pad.backup-recover.withkey,.main-mid-pad.bus-repay,.main-mid-pad.improved-recovery-steps{ + background-color:#f5f7f9; + max-width:100%; + padding:0 +} +.main-mid-pad.bus-repay{ + background:var(--surface-grey-1) +} +.main-mid-pad.plans{ + padding-bottom:2px +} +.key .main-mid-pad.plans{ + max-width:1280px; + min-width:980px; + width:auto +} +.key3.main-mid-pad{ + max-width:100%; + padding:0; + width:100% +} +.main-left-block{ + float:left; + padding:42px 0; + width:420px +} +.email-change .main-left-block{ + padding:73px 0 +} +.main-right-block{ + margin-left:520px +} +.sign .main-right-block{ + margin-left:560px; + padding-top:116px +} +h3.main-italic-header{ + font-size:19px; + line-height:31px; + padding:30px 0 25px +} +h3.main-italic-header,h5.main-italic-header{ + color:#333; + font-family:source_sans_proregular,Arial,sans-serif; + font-weight:400; + margin:0 +} +h5.main-italic-header{ + font-size:17px; + line-height:28px; + padding:0 0 5px +} +.main-italic-header .red{ + color:#f0373b +} +.login-register-input{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:9px -69px; + background-repeat:no-repeat; + border:2px solid #d9d9d9; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:40px; + margin-bottom:20px; + padding:0 10px 0 35px; + position:relative +} +.top-dialog-login-button span{ + display:inline-block; + overflow:hidden; + position:relative +} +button.loading span i{ + background-color:#fff; + display:block; + height:100%; + left:0; + margin:2px 0 0; + position:absolute; + text-align:center; + top:0; + vertical-align:top; + width:100% +} +.top-dialog-login-button.loading .loading-gif{ + background:transparent url(../imagery/mega-ajax-loader.6c46c484795103db.gif) no-repeat scroll 0 0 / 16px 16px; + box-shadow:none; + display:inline; + height:16px; + padding:0 8px; + width:16px +} +.login-register-input input{ + border:0; + color:#868686; + font-family:source_sans_proregular,Arial,sans-serif; + font-size:14px; + line-height:21px; + margin:7px 0 0; + padding:0; + width:100% +} +.login-register-input.email{ + background-position:9px -68px +} +.login-register-input.password{ + background-position:9px -109px +} +.login-register-input.green-tick{ + background-image:url(../imagery/mega-encr-sprite.160a67d7886a0f9d.png); + background-position:6px -585px; + background-repeat:no-repeat +} +.login-register-input.name{ + background-position:9px -1049px +} +.login-register-input.focused{ + border-color:#b2b2b2 +} +.login-register-input.incorrect{ + border-color:#d52600 +} +.login-register-input.email.incorrect{ + background-position:9px -149px +} +.login-register-input.password.incorrect{ + background-position:9px -189px +} +.login-register-input.name.incorrect{ + background-position:9px -1099px +} +.login-page-forgot-bl{ + padding:0 0 24px; + text-align:end +} +.register-st2-txt-block{ + padding-top:80px +} +.register-st2-txt-block p{ + color:#666; + font-size:14px; + line-height:20px; + margin:0; + padding:0 0 30px +} +.register-st2-txt-block p a{ + color:#f0373b +} +.register-st2-txt-block p a:focus,.register-st2-txt-block p a:hover{ + text-decoration:underline +} +.register-st2-button{ + cursor:pointer; + float:left; + margin-bottom:20px +} +.register-st2-button-arrow{ + background-color:rgba(0, 0, 0, .05); + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:right -662px; + background-repeat:no-repeat; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + color:#fff; + font-size:14px; + height:40px; + line-height:38px; + padding:0 30px 0 15px +} +.back .register-st2-button-arrow{ + background-position:-28px -1197px; + padding:0 15px 0 30px +} +.active .register-st2-button-arrow{ + background-color:#f0373b +} +.register-name-input-block{ + border-right:2px solid #d9d9d9; + float:left; + padding-right:10px; + width:174px +} +.register-family-input-block,.register-name-input-block{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:36px +} +.register-family-input-block{ + margin-left:174px; + padding-left:10px +} +.incorrect .register-name-input-block{ + border-color:#d52600 +} +.login-register-input.insufficient-strength,.login-register-input.loading,.login-register-input.meets-minimum-strength{ + padding:0 30px 0 35px +} +.password-status-icon{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:2px -1000px; + background-repeat:no-repeat; + display:none; + height:36px; + position:absolute; + right:0; + top:22px; + width:30px; + z-index:10 +} +.insufficient-strength .password-status-icon{ + background-position:2px -939px +} +.insufficient-strength .password-status-icon,.meets-minimum-strength .password-status-icon{ + display:block +} +.password-status-warning{ + background-color:rgba(0, 0, 0, .9); + border-radius:7px; + bottom:33px; + box-sizing:border-box; + color:#fff; + font-size:13px; + left:50%; + line-height:28px; + margin-left:-87px; + padding:0 10px; + position:absolute; + white-space:nowrap +} +.password-warning-txt{ + color:#ffba00 +} +.mega-dialog.registration-success.registration-page-success.chatlink .fm-dialog-close{ + display:none +} +.reg-resend-email{ + display:table; + width:100% +} +.special .reg-resend-email{ + margin-top:30px +} +.reg-resend-input-bl{ + display:table-cell; + padding:0 12px 0 0; + vertical-align:top +} +.reg-resend-input-bl input{ + background-color:rgba(0, 0, 0, .02); + border:1px solid rgba(0, 0, 0, .15); + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + color:var(--text-color-high); + display:block; + font-family:LatoWeb,sans-serif; + font-size:14px; + line-height:32px; + max-height:36px; + min-height:36px; + padding:0 15px; + width:100% +} +.reg-resend-button-bl{ + display:table-cell; + vertical-align:top; + width:92px +} +.resend-email-button{ + background-color:#00bfa5; + background-image:url(../imagery/mega-register-big-sprite.c4d9847b9909de00.png); + background-position:12px 7px; + border:1px solid #00ac94; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + cursor:pointer; + font-family:LatoWeb,sans-serif; + font-size:14px; + height:36px; + line-height:36px; + margin:0; + padding:0 16px 0 35px; + -webkit-transition:background-color .2s ease-in-out; + -moz-transition:background-color .2s ease-in-out; + -o-transition:background-color .2s ease-in-out; + -ms-transition:background-color .2s ease-in-out; + transition:all .2s ease-in-out; + white-space:nowrap +} +.resend-email-button:hover{ + background-color:#00ac94 +} +.fm-dialog-top-text{ + font-size:14px; + line-height:18px; + padding:0 +} +.reset-small-txt{ + color:var(--text-color-medium); + padding:20px 0 16px +} +.downslideshow-progress{ + background-color:#fff; + -webkit-border-radius:8px; + -moz-border-radius:8px; + border-radius:8px; + height:10px; + width:0 +} +.new-download-right-block{ + height:210px; + margin-left:299px +} +.new-download-pad{ + display:table; + table-layout:fixed; + width:100% +} +.new-download-centered-bl{ + display:table-cell; + height:210px; + position:relative; + vertical-align:middle +} +.new-download-file-icon{ + background-image:url(../imagery/mega-files-icons.8f44fb1e74566206.png); + background-position:0 0; + background-repeat:no-repeat; + float:left; + height:60px; + margin:0; + width:54px +} +.new-download-file-info{ + margin-left:70px +} +.new-download-file-title{ + color:#333; + font-family:source_sans_prosemibold,sans-serif; + font-size:14px; + line-height:18px; + overflow:hidden; + padding:7px 0 3px; + text-overflow:ellipsis; + white-space:nowrap; + width:100% +} +.new-download-file-size{ + color:#666; + font-size:13px; + padding-top:5px +} +.new-download-gray-button,.new-download-sync-app,.regular-download{ + background-color:rgba(217, 0, 7, .7); + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + cursor:pointer; + float:left; + height:50px; + margin-right:8px; + margin-top:14px; + padding:7px 13px 0; + -webkit-transition:background-color .2s ease-in-out; + -moz-transition:background-color .2s ease-in-out; + -o-transition:background-color .2s ease-in-out; + -ms-transition:background-color .2s ease-in-out; + transition:background-color .2s ease-in-out +} +.new-download-sync-app:hover,.regular-download:hover{ + background-color:#d90007 +} +.new-download-red-button,.new-download-sync-app{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-position:-2px -1321px; + background-repeat:no-repeat; + padding:7px 13px 0 52px +} +.regular-download{ + padding:7px 33px 0 +} +.regular-download .new-download-button-txt1{ + line-height:36px +} +.new-download-red-button{ + background-position:-2px -1423px; + color:#2ba6de; + cursor:pointer; + font-family:source_sans_prosemibold,sans-serif; + font-size:14px; + line-height:34px; + margin-top:12px; + padding:0 0 0 36px +} +.new-download-red-button:hover{ + background-position:-2px -1383px; + color:#777 +} +.new-download-gray-button{ + background-color:#666 +} +.new-download-gray-button:hover{ + background-color:#333 +} +.logged-in .new-download-gray-button{ + display:block +} +.download-message .new-download-buttons,.downloading .new-download-buttons{ + display:none +} +.downloading .new-download-icon{ + background-position:33px 30px +} +.downloading-block{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + display:none; + min-height:76px; + padding-top:15px +} +.downloading .downloading-block{ + display:block +} +.downloading-progress{ + background-color:rgba(0, 0, 0, .15); + -webkit-border-radius:10px; + -moz-border-radius:10px; + border-radius:10px; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + height:20px; + padding:5px +} +.downloading-progress-bar,.downslideshow-progress{ + background-color:#fff; + -webkit-border-radius:8px; + -moz-border-radius:8px; + border-radius:8px; + height:10px; + width:0 +} +.downloading-txt{ + background-position:-118px -734px; + color:#999; + font-size:14px; + line-height:20px; + margin-top:20px; + padding:0 35px 0 30px +} +.download-pause,.downloading-txt{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-repeat:no-repeat; + float:left; + min-height:20px +} +.download-pause{ + background-position:-38px -694px; + cursor:pointer; + margin:20px 10px 0 0; + width:22px +} +.download-pause:hover{ + background-position:-78px -694px +} +.download-pause.active{ + background-position:-78px -734px +} +.downloading-txt.time{ + background-position:-118px -694px +} +.downloading-txt.temporary-error{ + background-position:-200px -646px; + float:none; + margin-right:0 +} +.new-download-icon div{ + color:#d83200; + display:none; + font-size:51px; + line-height:54px; + padding:90px 0 0 30px; + text-align:center +} +.new-download-icon div span{ + font-size:25px +} +.downloading .new-download-icon div{ + display:block +} +.download-complete-icon,.download-message-icon{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-position:-119px -646px; + background-repeat:no-repeat; + display:none; + height:20px; + left:38px; + margin-top:-2px; + position:absolute; + width:20px; + z-index:10 +} +.download-complete-icon{ + background-position:-159px -646px +} +.download-complete .download-complete-icon,.download-message .download-message-icon,.downloading .download-message-icon{ + display:block +} +.download-message-txt{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + color:#666; + display:none; + font-size:14px; + line-height:20px; + min-height:76px; + padding-top:23px +} +.download-message .download-message-txt{ + display:block +} +.new-download-button-txt1{ + color:#fff; + font-family:source_sans_prosemibold,sans-serif; + font-size:15px; + line-height:18px +} +.new-download-button-txt2{ + color:hsla(0, 0%, 100%, .9); + font-size:14px; + line-height:14px; + padding-top:1px; + -webkit-transition:color 20ms ease-in-out; + -moz-transition:color 20ms ease-in-out; + -o-transition:color 20ms ease-in-out; + -ms-transition:color 20ms ease-in-out; + transition:color 20ms ease-in-out +} +.new-download-gray-button:hover .new-download-button-txt2,.new-download-sync-app:hover .new-download-button-txt2{ + color:#fff +} +.file-info-block{ + margin-left:-1px; + position:relative +} +.not-available-some-reason .file-info-block,.not-available-some-reason .new-download-buttons,.not-available-temporary .file-info-block,.not-available-temporary .new-download-buttons,.not-available-user .file-info-block,.not-available-user .new-download-buttons{ + display:none +} +.not-available-some-reason .new-download-icon,.not-available-user .new-download-icon{ + background-position:33px -290px +} +.some-reason-block,.temporary-block,.user-block{ + display:none +} +.not-available-some-reason .some-reason-block,.not-available-temporary .temporary-block,.not-available-user .user-block{ + display:block +} +.download-error-title{ + color:#f0373b; + font-family:Open Sans Semibold Italic,Arial,sans-serif; + font-size:16px; + letter-spacing:-.1px; + line-height:20px +} +.download-error-temp-txt,.download-error-txt{ + color:#333; + font-size:14px; + line-height:21px; + padding:11px 0 4px +} +.download-error-temp-txt{ + color:#666; + padding:11px 0 0 +} +.download-error-ul{ + background-position:-118px -877px; + line-height:21px; + padding:5px 0 5px 20px +} +.download-error-ul,.download-user-icon{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-repeat:no-repeat; + color:#666; + font-size:14px +} +.download-user-icon{ + background-position:-118px -768px; + line-height:20px; + padding:11px 0 0 40px +} +.not-available-temporary .new-download-icon{ + background-position:33px -149px +} +.data-protection .download-button{ + background:#d90007; + border-radius:5px; + color:#fff; + cursor:pointer; + display:inline-block; + display:block; + height:20px; + margin-top:10px; + padding:10px 40px; + position:relative; + text-align:center; + width:100px +} +.data-protection .download-button .label{ + line-height:20px +} +.data-protection .download-button .loading-image,.data-protection .download-button.loading .label{ + display:none +} +.data-protection .download-button.loading .loading-image{ + display:inline-block; + font-size:0; + height:28px; + left:50%; + line-height:0; + margin-left:-14px; + margin-top:-4px; + position:absolute; + width:28px +} +.data-protection .download-button .loading-image img{ + height:28px; + width:28px +} +.data-protection .error-message{ + color:#d90007; + margin-top:5px +} +.terms-agent-info{ + background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAHACAMAAAClA6mTAAAAdVBMVEUAAAB6enoAAAB5eXkAAAAAAADS0tJfX1+fn5+SkpK6urrQ0NCfn58DAwOOjo6bm5uSkpJiYmJsbGyWlpaKiooRERESEhIzMzM6OjqAgIBOTk5NTU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZVnt1AAAAJ3RSTlM/dSt1IjCuYn95j6Z7TnV7d2ZofXlRUVlbd2JiBQodJ0g6RBM1TQBXfVx0AAAA+0lEQVR42u3VyU7DMBSFYQOd5wnaQlKPJ+//iOTasWkisUACqULnX0T5LMeOvLFq2qqxMeNK3iI12nShFdrvaISmMAhDYS2sEyUrnxZ6BzifeWvV+ibs0A0oi7usQi9l7mVU04skSZL8bWoHOJ0ZEAuJGgjeB0BHOhmXOS4S8EIPDNifbCNHealbZGUQs92+o0QfKY/+BeQHF1AAnpsv1sZUmZLWD3CwJEmSJPkHfH9D6fVD4emcdX6BAk77pP0JQsx3ot0cidgs1uvFBpmr5WSyXGXOtphOsZ0lHg+IHY7C6wVdlysGv/Eoh0OSJEmSJEmS/5EoDfjDpT4BqFGb8u6Q/iIAAAAASUVORK5CYII=); + background-position:0 6px; + background-repeat:no-repeat; + display:block; + margin-bottom:15px; + padding:0 0 0 32px +} +.terms-agent-info.name{ + background-position:0 6px; + margin:-5px 0 15px +} +.terms-agent-info.adress{ + background-position:0 -101px; + margin:0 0 15px +} +.terms-agent-info.email{ + background-position:0 -229px; + margin:0 +} +.account-warning-icon{ + background-image:url(../imagery/mega-top-login-sprite-2x.b7f3e5d749787609.png); + background-position:3px -1888px; + display:none; + margin-left:3px; + position:relative; + width:19px +} +.exceeded .account-warning-icon{ + display:inline-block +} +.sync-top-txt-block h3.main-italic-header .blue{ + color:#1fa4e5 +} +.gray-bg{ + background-color:#f2f2f2 +} +.white-bg{ + background-color:#fff +} +b,strong{ + font-family:var(--text-font-family-bold); + font-weight:400 +} +.share-folder-block{ + background-color:#f6f6f6; + margin:12px 0 -12px; + min-height:90px +} +.share-folder-icon{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + float:left; + padding:10px 0 0 15px; + position:relative; + width:86px +} +.share-folder-icon div{ + background-image:url(../imagery/mega-files-icons.8f44fb1e74566206.png); + background-repeat:no-repeat; + height:64px; + margin-top:3px; + width:56px +} +.share-folder-info{ + margin-left:87px; + padding:23px 0 0 +} +.share-folder-info .propreties-dark-txt{ + font-size:13px; + line-height:20px +} +.share-folder-link-bl{ + padding:5px 0 15px 16px +} +.about-top-block{ + background-color:#fafafa +} +.about-top-block p{ + padding:8px 0 10px +} +.widget-block{ + border:2px solid #f2f2f2; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + bottom:10px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + cursor:pointer; + height:54px; + left:10px; + padding:5px; + position:absolute; + width:54px; + z-index:800 +} +.widget-block:hover{ + border:2px solid #b2b2b2 +} +.widget-arrows,.widget-circle{ + background-image:url(../imagery/mega-widget-progress.a4490a624321cee7.png); + background-position:0 0; + background-repeat:no-repeat; + height:40px; + width:40px +} +.widget-arrows{ + background-position:left -1060px; + position:relative +} +.widget-tooltip{ + -moz-background-clip:border; + -webkit-background-clip:border; + background-clip:initial; + background-color:#fff; + border:2px solid rgba(0, 0, 0, .3); + -moz-border-radius:7px; + -webkit-border-radius:7px; + border-radius:7px; + bottom:56px; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + display:none; + left:-7px; + min-width:195px; + padding:10px 10px 1px; + position:absolute; + z-index:900 +} +.widget-icon{ + background-image:url(../imagery/mega-widget-progress.a4490a624321cee7.png); + background-position:-11px -1132px; + background-repeat:no-repeat; + color:#666; + font-size:13px; + line-height:18px; + margin-bottom:9px; + min-height:18px; + padding-left:27px; + white-space:nowrap +} +.widget-icon.downloading{ + background-position:-11px -1200px +} +.widget-txt{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + display:inline-block; + min-width:85px; + padding-right:10px +} +.widget-speed-block{ + background-color:#b2b2b2; + -moz-border-radius:10px; + -webkit-border-radius:10px; + border-radius:10px; + color:#fff; + display:inline-block; + padding:0 10px +} +.widget-arrow{ + background-image:url(../imagery/mega-widget-progress.a4490a624321cee7.png); + background-position:center -1261px; + bottom:50px; + display:none; + height:8px; + left:14px; + position:absolute; + width:12px; + word-break:break-all; + z-index:900 +} +.active .widget-arrow,.active .widget-tooltip{ + display:block +} +.widget-circle.percents-0{ + background-position:0 0 +} +.widget-circle.percents-1,.widget-circle.percents-2,.widget-circle.percents-3,.widget-circle.percents-4,.widget-circle.percents-5,.widget-circle.percents-6{ + background-position:0 -50px +} +.widget-circle.percents-7,.widget-circle.percents-8,.widget-circle.percents-9,.widget-circle.percents-10,.widget-circle.percents-11,.widget-circle.percents-12{ + background-position:0 -100px +} +.widget-circle.percents-13,.widget-circle.percents-14,.widget-circle.percents-15,.widget-circle.percents-16,.widget-circle.percents-17,.widget-circle.percents-18{ + background-position:0 -150px +} +.widget-circle.percents-19,.widget-circle.percents-20,.widget-circle.percents-21,.widget-circle.percents-22,.widget-circle.percents-23,.widget-circle.percents-24{ + background-position:0 -200px +} +.widget-circle.percents-25,.widget-circle.percents-26,.widget-circle.percents-27,.widget-circle.percents-28,.widget-circle.percents-29,.widget-circle.percents-30{ + background-position:0 -250px +} +.widget-circle.percents-31,.widget-circle.percents-32,.widget-circle.percents-33,.widget-circle.percents-34,.widget-circle.percents-35,.widget-circle.percents-36{ + background-position:0 -300px +} +.widget-circle.percents-37,.widget-circle.percents-38,.widget-circle.percents-39,.widget-circle.percents-40,.widget-circle.percents-41,.widget-circle.percents-42{ + background-position:0 -350px +} +.widget-circle.percents-43,.widget-circle.percents-44,.widget-circle.percents-45{ + background-position:0 -400px +} +.widget-circle.percents-46,.widget-circle.percents-47,.widget-circle.percents-48,.widget-circle.percents-49{ + background-position:0 -450px +} +.widget-circle.percents-50{ + background-position:0 -500px +} +.widget-circle.percents-51,.widget-circle.percents-52,.widget-circle.percents-53,.widget-circle.percents-54,.widget-circle.percents-55,.widget-circle.percents-56{ + background-position:0 -550px +} +.widget-circle.percents-57,.widget-circle.percents-58,.widget-circle.percents-59,.widget-circle.percents-60,.widget-circle.percents-61,.widget-circle.percents-62{ + background-position:0 -600px +} +.widget-circle.percents-63,.widget-circle.percents-64,.widget-circle.percents-65,.widget-circle.percents-66,.widget-circle.percents-67{ + background-position:0 -650px +} +.widget-circle.percents-68,.widget-circle.percents-69,.widget-circle.percents-70,.widget-circle.percents-71,.widget-circle.percents-72{ + background-position:0 -700px +} +.widget-circle.percents-73,.widget-circle.percents-74,.widget-circle.percents-75,.widget-circle.percents-76,.widget-circle.percents-77{ + background-position:0 -750px +} +.widget-circle.percents-78,.widget-circle.percents-79,.widget-circle.percents-80,.widget-circle.percents-81,.widget-circle.percents-82{ + background-position:0 -800px +} +.widget-circle.percents-83,.widget-circle.percents-84,.widget-circle.percents-85,.widget-circle.percents-86,.widget-circle.percents-87{ + background-position:0 -850px +} +.widget-circle.percents-88,.widget-circle.percents-89,.widget-circle.percents-90,.widget-circle.percents-91,.widget-circle.percents-92{ + background-position:0 -900px +} +.widget-circle.percents-93,.widget-circle.percents-94,.widget-circle.percents-95,.widget-circle.percents-96,.widget-circle.percents-97,.widget-circle.percents-98,.widget-circle.percents-99{ + background-position:0 -950px +} +.widget-circle.percents-100{ + background-position:0 -1000px +} +.resellers-main-block{ + font-size:0; + margin:0 -25px +} +.resellers-link{ + border:2px solid #d9d9d9; + border-radius:5px; + box-sizing:border-box; + display:inline-block; + margin:25px; + min-height:160px; + text-align:center; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + vertical-align:top; + width:33.333333%; + width:calc(33.33333% - 50px) +} +.resellers-link:hover{ + border-color:#d42400 +} +.resellers-link.single{ + margin-left:3px +} +.resellers-logo{ + display:block; + margin:48px auto 29px; + width:220px +} +.resellers-logo.cb{ + margin-top:44px +} +.resellers-payment{ + display:inline-block; + margin:0 4px; + opacity:.5; + width:32px +} +.resellers-link:hover .resellers-payment{ + opacity:1 +} +.resellers-top-txt{ + padding:20px 0 17px +} +.top-login-input-tooltip.active{ + display:block +} +input[type=range]{ + -webkit-appearance:none !important; + background:#b2b2b2; + -webkit-border-radius:5px; + -moz-border-radius:5px; + border-radius:5px; + height:10px +} +input[type=range]::-webkit-slider-thumb{ + -webkit-appearance:none !important; + background:#fff; + -moz-background-clip:padding; + -webkit-background-clip:padding-box; + background-clip:padding-box; + border:2px solid rgba(0, 0, 0, .15); + -webkit-border-radius:100%; + -moz-border-radius:100%; + border-radius:100%; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:28px; + width:28px +} +ul.top-ul{ + margin:0 0 45px; + padding:0 +} +ul.mid-ul{ + margin:0 0 20px; + padding:0 +} +ul.can-ul,ul.cannt-ul{ + margin:0; + padding:0 +} +ul.bot-ul{ + margin:15px 0 10px; + padding:0 +} +ul.bot-ul li,ul.can-ul li,ul.cannt-ul li,ul.mid-ul li,ul.top-ul li{ + background-image:none; + color:#3f4646; + line-height:25px; + list-style:none; + margin:5px 0; + padding:0 +} +ul.mid-ul li{ + margin:20px 0 0 +} +ul.can-ul li,ul.cannt-ul li{ + margin:-6px 0 16px +} +ul.bot-ul li span,ul.can-ul li span,ul.cannt-ul li span,ul.mid-ul li span,ul.top-ul li span{ + background-image:url(../imagery/mega-new-affiliate-sprite.6944692422885986.png); + background-position:left -1614px; + background-repeat:no-repeat; + display:inline-block; + padding-left:15px +} +ul.mid-ul li span{ + background-position:-1480px -1614px +} +ul.can-ul li span{ + background-position:-151px -1345px; + padding-left:25px +} +ul.cannt-ul li span{ + background-position:-740px -1345px; + padding-left:25px +} +.new-affiliate-small-bl{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + width:50% +} +.new-affiliate-small-bl.left{ + float:left; + padding-right:30px +} +.new-affiliate-small-bl.right{ + float:right; + padding-left:30px +} +.new-affiliate-gray{ + background-color:#f2f2f2 +} +.new-bottom-pages.affiliate h1{ + padding:28px 0 0 +} +.new-affiliate-gray .new-bottom-pages.affiliate h1{ + color:#565656 +} +.new-affiliate-label{ + color:#858585; + float:left; + font-size:14px; + line-height:25px; + padding:20px 18px 4px 0; + position:relative +} +.new-affiliate-star{ + background-image:url(../imagery/mega-new-affiliate-sprite.6944692422885986.png); + background-position:-1478px -1541px; + background-repeat:no-repeat; + height:15px; + position:absolute; + right:0; + width:14px +} +.affiliate-input-block{ + background-color:#fff; + background-image:none; + margin-bottom:0; + padding:0 10px +} +.affiliate-input-block.short{ + float:left; + margin-right:10px; + min-width:70px +} +.affiliate-input-block.short.year{ + min-width:80px +} +.affiliate-input-block input{ + color:#858585 +} +.affiliate-input-block.select{ + background-image:url(../imagery/mega-new-affiliate-sprite.6944692422885986.png); + background-position:right -1310px; + background-repeat:no-repeat; + overflow:hidden; + position:relative +} +.affiliate-input-block.select select{ + border:0; + height:26px; + margin:0; + opacity:0; + padding:0; + position:absolute; + top:0; + width:100%; + z-index:10 +} +.affiliate-select-txt{ + color:#666; + font-size:14px; + line-height:28px; + padding-right:23px +} +.forms-page{ + padding:10px 20px 50px +} +.affiliate-input-block.textarea-block{ + height:auto; + padding:2px 10px +} +.affiliate-input-block.textarea-block textarea{ + border:0; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + color:#666; + font-size:14px; + height:126px; + line-height:20px; + margin:0; + outline:none; + padding:0; + resize:none; + width:100% +} +.new-affiliate-label.textarea-label{ + padding-top:30px +} +.affiliate .new-registration-checkbox .checkboxOff,.affiliate .new-registration-checkbox .checkboxOn{ + margin-bottom:0 +} +.affiliate .reg-st5-complete-button{ + margin:40px 0 30px; + min-width:110px; + text-align:center +} +.contact-new-row{ + border-bottom:1px solid #ccc +} +.main-mid-pad.new-bottom-pages.contact{ + margin:0 auto; + padding:0 15px +} +.contact-new-column{ + border-left:2px solid #fafafa; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + float:left; + margin:0 -2px; + padding:60px 0 73px 40px; + width:50% +} +.contact-new-column:first-child{ + border-left:0; + border-right:2px solid #f2f2f2; + margin:0; + padding:60px 40px 73px 0 +} +.contact-new-title{ + background-image:url(../imagery/mega-contact-new-sprite.aedb90d2da67409e.png); + background-position:0 15px; + background-repeat:no-repeat; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#d32700; + display:table-cell; + font-family:Open Sans Semibold Italic,Arial,sans-serif; + font-size:16px; + height:62px; + letter-spacing:-.1px; + line-height:21px; + padding-left:47px; + vertical-align:middle; + width:100% +} +.contact-new-title.legal{ + background-position:-4px -312px +} +.contact-new-title.copyright{ + background-position:-4px -119px +} +.contact-new-title.improvements{ + background-position:-4px -280px +} +.contact-new-title.report-a-bug{ + background-position:-4px -216px +} +.contact-new-title.media{ + background-position:-4px -344px +} +.contact-new-title.get-support{ + background-position:-4px -87px +} +.contact-new-title.report-objectionable-material{ + background-position:-4px -151px +} +.contact-new-title.privacy{ + background-position:-4px -184px +} +.contact-new-title.security{ + background-position:-4px -248px +} +.contact-new-title.suggest-improvements{ + background-position:-4px -280px +} +.contact-new-title.other-ip-issues{ + background-position:-4px -376px +} +.contact-new-title.corporate-office{ + background-position:-4px -409px +} +.contact-new-title.corporate-mail{ + background-position:-4px -441px +} +.contact-new-title.other-group-companies{ + background-position:-4px -473px +} +.contact-new-title.eu-representative,.contact-new-title.gdpr{ + background-position:-4px -505px +} +.contact-new-txt{ + color:#333; + font-size:14px; + line-height:25px; + min-height:75px; + padding:0 +} +.contact-new-txt a{ + color:#d92e00; + cursor:pointer; + text-decoration:underline +} +.contact-new-button,a.contact-new-button{ + background-color:#b2b2b2; + background-image:url(../imagery/mega-contact-new-sprite.aedb90d2da67409e.png); + background-position:right -134px; + background-repeat:no-repeat; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + color:#fff; + display:block; + float:left; + height:24px; + line-height:23px; + margin:12px 0 0; + padding:0 30px 0 10px +} +a.contact-new-button:hover{ + background-color:#d90007; + -webkit-box-shadow:inset 0 1px 1px 0 hsla(0, 0%, 100%, .2); + -moz-box-shadow:inset 0 1px 1px 0 hsla(0, 0%, 100%, .2); + box-shadow:inset 0 1px 1px 0 hsla(0, 0%, 100%, .2) +} +.contact-new-row.bottom{ + margin-bottom:-2px +} +.main-pad-block{ + position:relative +} +.dev-nw-gray-bg{ + min-width:980px; + overflow:hidden; + z-index:0 +} +.dev-nw-gray,.dev-nw-gray-bg{ + height:100%; + position:absolute; + width:100% +} +.dev-nw-gray{ + background-color:#fafafa; + margin-right:240px; + right:50% +} +.main-mid-pad.new-bottom-pages.dev-nw,.main-mid-pad.new-bottom-pages.help-nw,.main-mid-pad.new-bottom-pages.investors-nw{ + padding-left:10px; + position:relative; + z-index:2 +} +.new-left-menu-block{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + float:left; + padding:30px 0 0 2px; + position:absolute; + width:241px +} +.new-left-menu-block.floating{ + position:fixed; + top:46px !important +} +.new-right-content-block{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + margin-left:241px; + min-height:500px; + padding:10px 0 0 50px +} +.new-left-menu-link{ + -moz-border-radius-bottomleft:5px; + -moz-border-radius-topleft:5px; + -webkit-border-bottom-left-radius:5px; + border-bottom-left-radius:5px; + -webkit-border-top-left-radius:5px; + border-top-left-radius:5px; + cursor:pointer; + height:40px; + margin-bottom:10px +} +.new-left-link-pad,.new-left-menu-icon{ + background-image:url(../imagery/mega-sdk-sprite.da8c28c79254ff0e.png); + background-position:-838px 5px; + background-repeat:no-repeat; + color:#38393d; + display:table-cell; + font-size:14px; + height:40px; + line-height:17px; + padding-left:44px; + padding-right:20px; + vertical-align:middle +} +.new-left-link-pad{ + background:none; + padding-left:12px +} +.new-left-menu-icon.dev-home{ + background-position:-838px 5px +} +.new-left-menu-link.active,.new-left-menu-link:hover{ + background-color:#fff +} +.new-left-menu-link.active .new-left-link-pad,.new-left-menu-link.active .new-left-menu-icon,.new-left-menu-link:hover .new-left-link-pad,.new-left-menu-link:hover .new-left-menu-icon{ + color:#d8260b +} +.new-left-menu-icon.dev-home{ + background-position:-838px 5px +} +.new-left-menu-link.active .new-left-menu-icon.dev-home,.new-left-menu-link:hover .new-left-menu-icon.dev-home{ + background-position:-838px -75px +} +.new-left-menu-icon.dev-sdk{ + background-position:-838px -156px +} +.new-left-menu-link.active .new-left-menu-icon.dev-sdk,.new-left-menu-link:hover .new-left-menu-icon.dev-sdk{ + background-position:-838px -236px +} +.new-left-menu-icon.dev-doc{ + background-position:-838px -326px +} +.new-left-menu-link.active .new-left-menu-icon.dev-doc,.new-left-menu-link:hover .new-left-menu-icon.dev-doc{ + background-position:-838px -416px +} +.dev-short-block{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + float:left; + padding:45px 30px 30px 0; + width:50% +} +.dev-short-block.right{ + padding:45px 0 30px 30px +} +.dev-short-bl-icon{ + background-image:url(../imagery/mega-sdk-sprite.da8c28c79254ff0e.png); + background-position:-10px 0; + background-repeat:no-repeat; + height:180px +} +.dev-short-bl-icon.docs{ + background-position:-390px 0 +} +.dev-short-block .new-affiliate-bot-txt{ + color:#666; + line-height:21px; + margin:0 0 15px; + min-height:80px +} +.new-right-content-block .new-bottom-pages h1{ + color:#38393d +} +.dev-new-divider{ + background-color:#f2f2f2; + height:2px; + margin:0 -20px +} +.dev-new-mid-pad{ + padding:10px 0 50px +} +.dev-new-appplications-table .grid-table th{ + height:30px; + line-height:27px !important +} +.dev-new-appplications-table .grid-table td{ + color:#666; + height:31px +} +.dev-new-top-pad{ + padding:45px 0 30px +} +.dev-short-bl-icon.left{ + float:left; + height:170px; + width:191px +} +.dev-new-sdk-txt{ + color:#666; + display:table-cell; + font-size:14px; + height:160px; + line-height:21px; + margin-left:191px; + vertical-align:middle +} +.dev-new-bottom-pad{ + padding:10px 0 20px +} +.dev-new-appplications-table{ + border:2px solid #dbdbdb; + -moz-border-radius:6px; + -webkit-border-radius:6px; + border-radius:6px; + margin-top:46px; + overflow:hidden +} +.dev-new-app-header{ + color:#f0373b; + font-family:Open Sans Semibold Italic,Arial,sans-serif; + font-size:16px; + letter-spacing:-.1px; + line-height:24px; + padding:13px 10px +} +.dev-new-appplications-table table{ + margin-bottom:-2px +} +.dev-new-table-icon{ + background-position:0 -458px; + padding:0 0 0 30px +} +.dev-new-app-settings,.dev-new-table-icon{ + background-image:url(../imagery/mega-sdk-sprite.da8c28c79254ff0e.png); + background-repeat:no-repeat; + display:block +} +.dev-new-app-settings{ + background-position:3px -546px; + cursor:pointer; + height:27px; + margin-left:4px; + width:27px +} +.dev-new-app-settings:hover{ + background-position:3px -626px +} +.dev-new-appplications-table .grid-table tr td:first-child{ + padding-left:10px +} +.dev-new-appplications-table .grid-table td{ + color:#666 +} +.dev-new-appplications-table table.grid-table td:nth-child(4),.dev-new-appplications-table table.grid-table th:nth-child(4){ + padding:0; + width:35px +} +.dev-no-apps-txt{ + background-position:-300px -285px; + color:#999; + font-size:17px; + line-height:21px; + margin:30px auto; + padding-top:105px; + text-align:center; + width:300px +} +.dev-new-app-big-icon,.dev-no-apps-txt{ + background-image:url(../imagery/mega-sdk-sprite.da8c28c79254ff0e.png); + background-repeat:no-repeat +} +.dev-new-app-big-icon{ + background-position:0 -726px; + color:#333; + float:left; + font-size:31px; + height:52px; + line-height:50px; + margin:40px 0; + padding-left:85px +} +.dev-new-app-left-block{ + float:left; + padding-top:48px; + width:150px +} +.dev-new-label{ + color:#333; + font-size:14px; + height:30px; + line-height:28px; + margin-bottom:20px; + text-align:right +} +.dev-new-label.textarea-label{ + margin-bottom:124px +} +.dev-new-app-right-block{ + margin-left:170px; + padding-top:48px +} +.dev-new-app-right-block .affiliate-input-block{ + margin-bottom:20px +} +.dev-new-app-txt-pad{ + height:30px; + margin-bottom:20px +} +.dev-new-app-right-block .radioOff,.dev-new-app-right-block .radioOn{ + margin-top:5px +} +.dev-new-app-right-block .radio-txt{ + padding-top:5px +} +.dev-new-app-right-block .reg-st5-complete-button.active{ + margin:30px 10px 20px 0; + min-width:100px; + text-align:center +} +.dev-new-app-right-block .reg-st5-complete-button.active.cancel{ + background-color:#b2b2b2 +} +.new-left-submenu{ + margin-top:-10px +} +.new-left-submenu-item{ + background-image:url(../imagery/mega-sdk-sprite.da8c28c79254ff0e.png); + background-position:-840px -604px; + background-repeat:no-repeat; + padding:10px 0 0 32px +} +.new-left-submenu-item.last{ + background-position:-840px -654px +} +.new-left-submenu-item .new-left-menu-link{ + margin:0 +} +.new-left-submenu-item .new-left-menu-icon{ + background-image:none; + padding:0 12px +} +.new-bottom-pages .new-right-content-block h2{ + color:#38393d +} +.new-bottom-pages .new-right-content-block ul{ + margin:5px 0 0; + padding:0 +} +.new-bottom-pages .new-right-content-block li{ + background-image:url(../imagery/mega-sdk-sprite.da8c28c79254ff0e.png); + background-position:-897px -1024px; + background-repeat:no-repeat; + color:#333; + font-size:14px; + line-height:26px; + list-style:none; + margin:15px 0 0; + padding-left:15px +} +c,code{ + font-family:Courier New,Courier,monospace +} +.new-notifications-txt{ + color:#fff; + font-size:15px; + line-height:47px +} +.new-notifications-scroll{ + height:100%; + margin-left:48px +} +.new-notification-icon{ + background-color:#5b5a59; + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-9px -941px; + background-repeat:no-repeat; + border:4px solid #fff; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:32px; + margin:8px 0 0 240px; + width:32px +} +.new-notification-txt-bl{ + margin:10px 0 0 132px; + text-align:center; + width:250px +} +.new-notification-txt{ + background-color:#afb0b0; + border:2px solid #fff; + -moz-border-radius:28px; + -webkit-border-radius:28px; + border-radius:28px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + display:inline-block; + font-size:13px; + height:28px; + letter-spacing:.5px; + line-height:23px; + padding:0 10px +} +.new-notification-pad{ + padding:0 0 312px; + position:relative +} +.fm-main.notifications{ + position:relative +} +.new-bottom-pages .copyrigths p span.text{ + margin-left:28px; + padding:0 +} +span.roman-number{ + -webkit-margin-end:8px; + color:var(--text-color-error); + display:block; + float:left; + font:var(--text-body1); + font-style:italic; + margin-inline-end:8px +} +.rtl span.roman-number{ + float:right +} +.copyrights-gray{ + background:var(--surface-grey-1) +} +.copyrights-page .reg-st5-complete-button.active{ + margin:40px 0; + min-width:156px; + text-align:center +} +p.copyrights-red{ + color:#f0373b; + padding-bottom:6px +} +.register-st2-button.active.copyrights-form{ + float:right; + margin:48px 0 5px +} +.reg-st5-complete-button.active.copyrights-form{ + background-color:#4c4c4c; + float:left; + margin:48px 0 5px +} +.register-st2-button.active.back.copyrights-form{ + float:left +} +.register-st2-button.active.back.copyrights-form .register-st2-button-arrow{ + background-color:#4c4c4c +} +.copyrights-bottom{ + padding:24px 0 16px +} +.copyrights-bottom .new-registration-checkbox .checkboxOff,.copyrights-bottom .new-registration-checkbox .checkboxOn{ + margin:4px 1px 0 0; + position:absolute +} +.copyrights-bottom .new-registration-checkbox{ + margin-bottom:69px; + position:relative +} +.copyrights-bottom .new-registration-checkbox .radio-txt{ + display:block; + float:none; + line-height:24px; + margin:-1px 0 0 35px; + padding:0; + position:absolute; + text-indent:0 +} +.copyrights-h2-pad{ + padding:28px 0 6px +} +.copyrights-h2-pad span{ + color:#333 +} +.new-left-menu-icon.help-icon{ + background-image:url(../imagery/mega-help-new-sprite.2e17c39b68409fd.png); + background-position:0 -5px; + background-repeat:no-repeat +} +.new-left-menu-icon.help-icon.help-home{ + background-position:11px 9px +} +.new-left-menu-icon.help-icon.help-basics{ + background-position:11px -42px +} +.new-left-menu-icon.help-icon.help-sharing{ + background-position:11px -92px +} +.new-left-menu-icon.help-icon.help-security{ + background-position:11px -143px +} +.new-left-menu-icon.help-icon.help-account{ + background-position:11px -192px +} +.new-left-menu-icon.help-icon.help-sync{ + background-position:11px -242px +} +.new-left-menu-icon.help-icon.help-ios{ + background-position:11px -292px +} +.new-left-menu-icon.help-icon.help-android{ + background-position:11px -342px +} +.new-left-menu-icon.help-icon.help-mega-chat{ + background-position:10px -799px +} +.new-left-menu-icon.help-icon.help-windows-phone{ + background-position:10px -897px +} +.new-left-menu-icon.help-icon.help-blackberry{ + background-position:-477px -112px +} +.active .new-left-menu-icon.help-icon.help-home,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-home{ + background-position:11px -391px +} +.active .new-left-menu-icon.help-icon.help-basics,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-basics{ + background-position:11px -442px +} +.active .new-left-menu-icon.help-icon.help-sharing,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-sharing{ + background-position:11px -492px +} +.active .new-left-menu-icon.help-icon.help-security,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-security{ + background-position:11px -543px +} +.active .new-left-menu-icon.help-icon.help-account,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-account{ + background-position:11px -592px +} +.active .new-left-menu-icon.help-icon.help-sync,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-sync{ + background-position:11px -642px +} +.active .new-left-menu-icon.help-icon.help-ios,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-ios{ + background-position:11px -692px +} +.active .new-left-menu-icon.help-icon.help-android,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-android{ + background-position:11px -742px +} +.active .new-left-menu-icon.help-icon.help-mega-chat,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-mega-chat{ + background-position:10px -849px +} +.active .new-left-menu-icon.help-icon.help-windows-phone,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-windows-phone{ + background-position:10px -947px +} +.active .new-left-menu-icon.help-icon.help-blackberry,.new-left-menu-link:hover .new-left-menu-icon.help-icon.help-blackberry{ + background-position:-477px -162px +} +h1.help-home-header{ + color:#38393d; + padding-bottom:40px +} +.help-nw .blog-new-div{ + margin:50px 0 10px -52px +} +.help-nw .blog-new-div div{ + left:660px; + right:auto +} +.help-short-block{ + overflow:hidden +} +.help-nw .dev-short-block.left{ + padding:0 20px 0 0 +} +.help-nw .dev-short-block.right{ + padding:0 0 0 20px +} +.help-text-block{ + color:#666; + line-height:21px; + margin:10px 0 25px; + min-height:0 +} +.help-nw .dev-new-button{ + background-image:url(../imagery/mega-help-new-sprite.2e17c39b68409fd.png); + background-position:right -365px; + background-repeat:no-repeat; + padding:0 38px 0 13px +} +.help-nw .dev-new-button:hover{ + background-position:right -425px +} +.help-listing{ + background-image:url(../imagery/mega-help-new-sprite.2e17c39b68409fd.png); + background-position:-862px 2px; + background-repeat:no-repeat; + color:#666; + cursor:pointer; + line-height:27px; + margin:10px 0 0; + min-height:0; + padding:0 0 0 20px +} +.help-listing:hover{ + color:#f0373b +} +.help-nw .dev-short-block.help-nw-short-blocks{ + margin:0 -3px; + padding-bottom:20px +} +.help-block{ + border:2px solid #d9d9d9; + border-radius:5px; + box-sizing:border-box; + cursor:pointer; + margin:40px 3px 0; + min-height:136px; + padding:0 20px 20px +} +.help-block:first-child{ + margin:20px 3px 0 +} +.help-block:first-child:hover{ + margin:17px 0 -3px +} +.help-block:hover{ + border:5px solid #bf1900; + margin:37px 0 -3px; + min-height:142px +} +.help-short-icon{ + background-image:url(../imagery/mega-help-new-sprite.2e17c39b68409fd.png); + background-position:0 0; + background-repeat:no-repeat; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#bf1900; + display:table-cell; + font-family:Open Sans Semibold Italic,Arial,sans-serif; + font-size:16px; + height:60px; + letter-spacing:-.1px; + line-height:24px; + padding:10px 20px 0 47px; + vertical-align:middle; + width:100% +} +.help-short-icon.basics{ + background-position:-502px -472px +} +.help-short-icon.security{ + background-position:-502px -642px +} +.help-short-icon.sync{ + background-position:-502px -812px +} +.help-short-icon.android{ + background-position:-502px -982px +} +.help-short-icon.sharing{ + background-position:-849px -472px +} +.help-short-icon.account{ + background-position:-849px -642px +} +.help-short-icon.ios{ + background-position:-849px -812px +} +.help-short-icon.windows-phone{ + background-position:-502px -901px +} +.help-short-icon.mega-chat{ + background-position:-498px -725px +} +.help-short-icon.blackberry{ + background-position:-501px -560px +} +.help-short-txt{ + color:#333; + font-size:14px; + line-height:26px +} +.help-info-pages h1.help-home-header{ + padding-bottom:10px +} +.new-bottom-pages .help-info-pages li{ + margin:0 +} +.new-bottom-pages .help-info-pages ol,.new-bottom-pages .help-info-pages ul{ + padding-left:20px +} +.new-bottom-pages .help-info-pages p{ + color:#666; + padding:5px 0 +} +.new-bottom-pages .help-info-pages p b,.new-bottom-pages .help-info-pages p strong{ + font-family:source_sans_prosemibold,Arial,sans-serif; + font-weight:400 +} +.new-bottom-pages .help-info-pages p i,.new-bottom-pages .help-info-pages p strong.italic{ + font-family:Open Sans Semibold Italic,Arial,sans-serif; + font-size:13px; + font-style:normal; + letter-spacing:-.1px +} +.new-bottom-pages .help-info-pages li p{ + padding:0 +} +.help-nw ol,.help-nw ul{ + padding-left:10px !important +} +.help-nw li,.help-nw p{ + margin-top:10px +} +.help-nw h2{ + margin-top:20px +} +.help-nw p{ + position:relative; + text-align:left +} +.help-nw img{ + max-width:100% +} +.sync-coming-soon-txt{ + color:#1d9fea; + font-family:source_sans_proregular,Arial,sans-serif; + font-size:41px; + font-style:italic; + height:70px; + line-height:68px; + margin-bottom:30px; + text-align:center +} +.no-status .activity-status.online{ + display:none !important +} +div.new-bottom-pages li,div.new-bottom-pages p{ + text-align:justify +} +.register-game-txt{ + color:#666; + font-size:17px; + line-height:24px; + margin-bottom:45px; + margin-left:201px; + width:589px +} +.register-game-buttons{ + text-align:center +} +.register-game-button{ + border:4px solid #676767; + border-radius:25px; + box-sizing:border-box; + color:#676767; + cursor:pointer; + display:inline-block; + font-size:17px; + height:40px; + line-height:31px; + margin:0 20px; + min-width:140px; + padding:0 15px; + text-align:center +} +.register-game-button:hover{ + background-color:#676767; + color:#fff +} +.register-game-button.start{ + border:4px solid #d82c00; + color:#d82c00 +} +.register-game-button.start:hover{ + background-color:#d82c00; + color:#fff +} +.arrow:not(.grid-header-star){ + --icon-size:24px; + --mask-color:var(--icon-rest); + cursor:pointer; + display:block; + float:left; + width:100% +} +.arrow.sprite-fm-mono:before{ + display:none; + height:24px; + margin:-3px 12px; + position:absolute; + right:0; + width:24px +} +.rtl .arrow.sprite-fm-mono:before{ + left:0; + left:10px; + right:auto +} +.arrow.sprite-fm-mono.desc:before{ + display:inline-block; + transform:rotate(180deg) +} +.arrow.sprite-fm-mono.asc:before{ + display:inline-block +} +.arrow.label:not(.asc):not(.desc){ + background-image:none +} +.search-bottom-wrapper{ + background-color:var(--stroke-grey-2); + display:none; + flex-shrink:0; + padding:0 20px; + z-index:12; + z-index:12 +} +.search-bottom-wrapper,.search-bottom-wrapper .fm-breadcrumbs-block{ + align-items:center; + box-sizing:border-box; + height:64px; + width:100%; + width:100% +} +.search-bottom-wrapper .fm-breadcrumbs-block{ + display:flex; + overflow:hidden; + white-space:nowrap +} +.search .search-bottom-wrapper{ + display:flex +} +.search .search-bottom-wrapper.hidden{ + display:none +} +.empty-search-bottom-menu{ + bottom:0; + display:none; + position:absolute; + width:100% +} +.empty-search-bg{ + background-color:var(--stroke-grey-2); + height:30px; + margin-left:2px +} +.search .file-block-scrolling,.select .file-block-scrolling,.select .out-shared-blocks-scrolling,.select .shared-blocks-scrolling{ + height:100%; + height:-webkit-calc(100% - 35px); + height:-moz-calc(100% - 35px); + height:calc(100% - 35px) +} +.lpxf{ + font-size:17px !important +} +.fm-right-header.context{ + overflow:visible +} +.top-context-menu{ + background-color:#f2f2f2; + box-sizing:border-box; + height:48px; + margin:0; + padding:5px; + position:absolute; + width:100%; + z-index:10 +} +.top-context-border{ + background-color:#fff; + border:2px solid #b2b2b2; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:100%; + width:100% +} +.top-context-close{ + background-image:url(../imagery/mega-context-top.d773e0268788d617.png); + background-position:10px -198px; + background-repeat:no-repeat; + cursor:pointer; + float:right; + height:35px; + width:35px +} +.backup-recover h3.main-italic-header{ + padding:30px 0 20px +} +.backup-recover .main-left-block .register-st2-txt-block{ + padding:0 +} +.backup-recover h5.main-italic-header{ + padding:0 0 13px +} +.backup-recover .main-right-block .register-st2-txt-block{ + padding-top:74px +} +.backup-download-block,.recover-upload-block{ + background-image:url(../imagery/mega-encr-sprite.160a67d7886a0f9d.png); + background-position:0 6px; + background-repeat:no-repeat; + height:125px; + padding:15px 0 0 76px +} +.recover-upload-block{ + background-position:0 -314px +} +.backup-download-block.downloading,.recover-upload-block.uploading{ + background-position:0 -442px; + position:relative +} +.backup-download-percents,.restore-upload-percents{ + color:#f0373b; + display:none; + font-size:21px; + line-height:24px; + margin-left:-100px; + padding-top:22px; + position:absolute; + text-align:center; + width:79px +} +.downloading .backup-download-percents,.uploading .restore-upload-percents{ + display:block +} +.backup-download-block .transfer-filetype-icon{ + margin:-1px 0 0 -2px +} +.backup-download-block .tranfer-filetype-txt{ + line-height:23px; + padding-left:25px +} +.backup-download-button{ + background:#f0373b; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + color:#fff; + cursor:pointer; + float:left; + font-size:13px; + height:24px; + line-height:23px; + margin-top:4px; + padding:0 15px; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.backup-download-button,.backup-download-button:hover{ + -webkit-box-shadow:inset 0 1px 1px 0 hsla(0, 0%, 100%, .2); + -moz-box-shadow:inset 0 1px 1px 0 hsla(0, 0%, 100%, .2); + box-shadow:inset 0 1px 1px 0 hsla(0, 0%, 100%, .2) +} +.backup-download-button:hover{ + background:#e12124 +} +.cancel-account-button{ + background-color:#d32200; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + color:#fff; + cursor:pointer; + float:left; + font-size:13px; + height:24px; + line-height:23px; + margin-bottom:30px; + margin-top:4px; + padding:0 15px +} +.backup-recover .login-register-input{ + margin-top:6px; + padding-right:12px +} +.backup-input-button{ + box-sizing:border-box; + position:absolute; + right:0; + top:0; + z-index:10 +} +.backup-input-button object{ + left:0; + opacity:0; + position:absolute; + top:0 +} +.backup-recover .login-register-input input{ + color:#858585 +} +.backup-notification-block{ + background-color:rgba(16, 16, 16, .8); + height:90px; + width:100%; + z-index:10 +} +.backup-notification-icon{ + background-image:url(../imagery/mega-encr-sprite.160a67d7886a0f9d.png); + background-position:15px -222px; + background-repeat:no-repeat; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + margin:0 auto; + padding:0 20px 0 73px; + width:980px +} +.backup-notification-txt{ + color:#fff; + display:table-cell; + font-size:13px; + height:90px; + line-height:16px; + vertical-align:middle +} +.backup-notification-txt span{ + color:#ffb800 +} +.main-right-block.recover-block{ + padding-top:10px +} +.backup-recover .recover-block .register-st2-txt-block{ + height:20px; + min-height:20px; + padding:0 +} +.recover-block span.green{ + color:#6bb219 +} +.light-gray{ + color:#999 +} +.backup-file-info{ + height:26px +} +.recover-upload-block .tranfer-filetype-txt{ + padding-left:24px +} +.restore-uploading-status-icon{ + background-image:url(../imagery/mega-encr-sprite.160a67d7886a0f9d.png); + background-position:-4px -594px; + background-repeat:no-repeat; + display:block; + height:24px; + position:absolute; + width:24px +} +.restore-uploading-status-icon.fail{ + background-position:-4px -662px +} +.restore-verify-button{ + float:right; + margin:10px 0 30px +} +.restore-verify-button.reset-account{ + float:left; + margin-top:0 +} +.restore-verify-button.active{ + cursor:pointer +} +.login-register-input.fail{ + background-image:url(../imagery/mega-encr-sprite.160a67d7886a0f9d.png); + background-position:4px -653px; + background-repeat:no-repeat +} +.reset-close-button,.restore-close-button{ + margin-top:-10px; + padding-bottom:20px; + text-align:center +} +.restore-success .fm-dialog-button.browsers-button{ + display:inline-block; + float:none; + margin:0 +} +.reset-account-lock-image{ + background-image:url(../imagery/mega-encr-sprite.160a67d7886a0f9d.png); + background-position:center -860px; + background-repeat:no-repeat; + height:415px +} +.shared-with-me .avatar-wrapper{ + margin:0; + position:absolute; + top:6px +} +.fm-chat-user-status{ + color:#666; + font-size:13px; + line-height:18px +} +.shared-with-me .fm-chat-user-info{ + float:none; + margin:0 0 0 44px +} +.fm-share-user-info{ + color:#333; + display:table; + float:left; + height:34px; + margin:7px 0 0 8px; + table-layout:fixed; + vertical-align:middle; + white-space:nowrap; + width:172px +} +.fm-share-centered{ + display:table-cell; + vertical-align:middle +} +.fm-share-centered div{ + overflow:hidden; + text-overflow:ellipsis +} +.shared-folder-icon{ + background-image:url(../imagery/mega-files-icons.8f44fb1e74566206.png); + background-position:-217px -4799px; + background-repeat:no-repeat; + height:37px; + position:absolute; + width:40px +} +.shared-folder-info-block{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:block; + font:var(--text-body1); + padding:0 0 0 51px; + position:relative; + text-align:left +} +.contact-name,.shared-folder-name{ + color:var(--text-color-high); + display:block; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.shared-contact-info{ + color:var(--text-color-medium); + display:block; + font:var(--text-body2); + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.data-block-view.semi-big .shared-folder-info{ + line-height:20px +} +.shared-top-details{ + background:var(--surface-grey-1); + height:128px; + position:relative +} +.shared-top-details .fm-share-copy,.shared-top-details .fm-share-download{ + margin-right:8px +} +.shared-details-icon{ + background-image:url(../imagery/mega-files-icons.8f44fb1e74566206.png); + background-position:-4px -4791px; + background-repeat:no-repeat; + float:left; + height:90px; + margin:15px 0 0 36px; + width:80px +} +.shared-details-info-block{ + margin-left:133px +} +.shared-details-pad{ + min-width:630px; + overflow:hidden; + padding:26px 0 2px 2px; + position:relative +} +.contact-details-user-name,.shared-details-folder-name{ + color:var(--text-color-high); + float:left; + font:var(--text-h2); + max-width:calc(100% - 56px); + overflow:hidden; + padding-right:10px; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.shared-details-folder-name{ + max-width:calc(100% - 216px) +} +.mega-dialog .contact-details-user-name,.mega-dialog .shared-details-folder-name{ + max-width:100% +} +.shared-details-pad .grid-url-arrow{ + float:left; + height:24px; + left:auto; + margin:4px 12px 0; + opacity:1; + position:relative; + top:auto; + width:24px +} +.shared-details-pad .grid-url-arrow i{ + --icon-size:24px +} +.shared-details-pad .grid-url-arrow.active i,.shared-details-pad .grid-url-arrow:hover i{ + --mask-color:var(--icon-rest) +} +.contact-top-details{ + background-color:#fff; + margin-top:-1px; + min-height:207px; + min-width:710px; + overflow:hidden; + position:relative +} +.contact-top-details .nw-contact-block-avatar{ + float:left; + margin:22px 22px 0; + position:absolute +} +.contact-fingerprint-block{ + margin:52px 45px 0 0; + min-width:214px; + position:absolute; + right:0 +} +.contact-fingerprint-title{ + color:var(--text-color-high); + font:var(--text-body1-bold); + height:35px; + padding:0 0 0 10px +} +.contact-fingerprint-txt{ + text-transform:uppercase; + width:220px +} +.contact-fingerprint-txt span{ + box-sizing:border-box; + color:var(--text-color-low); + display:inline-block; + font:var(--text-body1); + height:19px; + padding-left:10px; + width:42px +} +.contact-details-pad{ + box-sizing:border-box; + margin:0 255px 10px 207px; + min-height:182px; + padding-top:44px; + position:relative; + vertical-align:top +} +.contact-details-pad .onlinestatus{ + height:16px; + margin-bottom:20px +} +.contact-details-email{ + box-sizing:border-box; + height:24px; + overflow:hidden; + padding:4px 0 5px; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.contact-details-pad .nw-contact-status{ + margin:6px 6px 0 0 +} +.contact-details-pad button{ + float:left; + margin:0 10px 10px 0 +} +.fm-question{ + display:none +} +.verify-buttons{ + padding:10px 0 0 10px +} +.verify-buttons button{ + margin-right:10px; + min-width:20px +} +.contact-share-notification{ + color:#666; + font-size:13px; + line-height:24px; + margin:13px 0 15px 25px; + padding-left:28px; + position:relative +} +.contact-share-notification:before{ + background-image:url(../imagery/mega-files-icons.8f44fb1e74566206.png); + background-position:-297px -877px; + background-repeat:no-repeat; + content:""; + height:24px; + left:0; + position:absolute; + top:0; + width:24px +} +.contact-top-details .grid-url-arrow{ + float:left; + left:auto; + margin:8px 0 0 11px; + position:relative; + top:auto +} +.contact-top-details:hover .grid-url-arrow{ + opacity:1 +} +.shared-details-pad .shared-folder-access{ + color:var(--text-color-medium); + display:inline-flex; + float:left; + margin-top:4px +} +.shared-details-pad .shared-folder-access i{ + --mask-color:var(--icon-rest); + display:inline-block; + height:20px; + margin-right:5px; + width:20px +} +.shared-details-pad .shared-folder-access span{ + background-color:var(--stroke-grey-2); + border-radius:50px; + color:var(--text-color-high); + display:inline-block; + font:var(--text-body1); + padding:2px 10px; + vertical-align:middle +} +.shared-details-pad .avatar-wrapper{ + border-radius:2px; + height:24px; + line-height:24px; + margin:10px 0 0; + width:24px +} +.shared-details-pad .small-rounded-avatar img{ + height:24px; + width:24px +} +.shared-details-pad .fm-chat-user{ + color:var(--text-color-medium); + font:var(--text-body2); + overflow:hidden; + padding:6px 0 0; + text-overflow:ellipsis; + white-space:nowrap +} +.shared-details-pad .fm-chat-user span{ + color:var(--text-color-low); + padding-left:12px +} +.shared-details-pad .fm-chat-user span:before{ + content:"\00B7"; + left:-6px; + position:relative +} +.shared-details-buttons{ + background:var(--surface-grey-1); + margin:64px 0 0; + padding:0 40px 0 0; + position:absolute; + right:0; + top:0 +} +.shared-details-buttons:before{ + background:linear-gradient(to right, hsla(0, 0%, 100%, 0) 0, var(--stroke-grey-1) 100%); + content:""; + height:100%; + left:-20px; + position:absolute; + top:0; + width:20px +} +.shared-details-buttons .mega-button{ + min-width:20px +} +.files-grid-view.shared-folder-content,.fm-blocks-view.shared-folder-content{ + height:calc(100% - 128px) +} +.shared-details-block .files-grid-view.shared-folder-content{ + padding-top:14px +} +.emptied .shared-details-block .files-grid-view.shared-folder-content{ + padding-top:0 +} +.shared-details-pad .fm-chat-user-info{ + float:none; + margin:7px 0 0 32px +} +.u-card-data{ + box-sizing:border-box; + display:inline-block; + max-width:100%; + padding:0 12px 0 0; + position:relative; + vertical-align:top +} +.u-card-data .shared-folder-name{ + display:block +} +.u-card-data .nw-contact-status{ + left:auto; + margin:6px 0 0; + right:0; + top:0 +} +ul.token-input-list{ + background-color:#fff; + border:1px solid #999; + clear:left; + cursor:text; + font-family:Verdana,sans-serif; + font-size:13px; + height:auto !important; + height:1%; + margin:0; + overflow:hidden; + padding:0; + width:400px; + z-index:999 +} +ul.token-input-list,ul.token-input-list li{ + list-style-type:none +} +ul.token-input-list li input{ + -webkit-appearance:caret; + background-color:#fff; + border:0; + padding:3px 8px; + width:350px +} +li.token-input-token{ + background-color:#d0efa0; + color:#000; + cursor:default; + display:block; + font-weight:700; + height:auto !important; + height:1%; + margin:3px; + overflow:hidden; + padding:3px 5px +} +li.token-input-token p{ + float:left; + margin:0; + padding:0 +} +li.token-input-token span{ + color:#777; + cursor:pointer; + float:right +} +li.token-input-selected-token{ + background-color:#08844e; + color:#fff +} +li.token-input-selected-token span{ + color:#bbb +} +div.token-input-dropdown{ + background-color:#fff; + border-bottom:1px solid #ccc; + border-left:1px solid #ccc; + border-right:1px solid #ccc; + cursor:default; + font-family:Verdana,sans-serif; + font-size:13px; + overflow:hidden; + position:absolute; + width:400px; + z-index:1 +} +div.token-input-dropdown p{ + color:#777; + font-weight:700; + margin:0; + padding:5px +} +div.token-input-dropdown ul{ + margin:0; + padding:0 +} +div.token-input-dropdown ul li{ + background-color:#fff; + list-style-type:none; + padding:3px +} +div.token-input-dropdown ul li.token-input-dropdown-item{ + background-color:#fafafa +} +div.token-input-dropdown ul li.token-input-dropdown-item2{ + background-color:#fff +} +div.token-input-dropdown ul li em{ + font-style:normal; + font-weight:700 +} +div.token-input-dropdown ul li.token-input-selected-dropdown-item{ + background-color:#d0efa0 +} +ul.token-input-list-mega{ + border:0; + box-sizing:border-box; + clear:left; + cursor:text; + display:block; + font:var(--text-body1); + height:auto !important; + list-style-type:none; + margin:0; + min-height:38px; + overflow:hidden; + padding:0 15px 0 40px; + z-index:999 +} +.add-user-popup ul.token-input-list-mega{ + padding:0 15px 0 40px +} +.rtl .add-user-popup ul.token-input-list-mega{ + padding:0 40px 0 15px +} +.multiple-input{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:3px; + box-sizing:border-box; + max-height:144px; + min-height:40px; + min-width:100% +} +.multiple-input:hover{ + border-color:var(--stroke-info) +} +.duplicated-input-warning,.multiple-input-warning,.reg-resend-email-meg{ + background-color:var(--banner-background-error); + border:1px solid var(--banner-border-error); + border-radius:4px; + color:var(--banner-text-error) +} +.duplicated-input-warning,.multiple-input-warning,.reg-resend-email-meg,.whitespaces-input-warning{ + box-sizing:border-box; + display:none; + font:var(--text-body1); + margin-top:6px; + min-height:24px; + padding:2px 12px; + position:relative; + width:100%; + z-index:100 +} +.whitespaces-input-warning{ + background-color:var(--banner-background-warning); + border:1px solid var(--banner-border-warning); + border-radius:4px; + color:var(--banner-text-warning) +} +.add-user-popup .multiple-input-warning{ + text-align:center +} +.duplicate .duplicated-input-warning,.error .multiple-input-warning,.error .reg-resend-email-meg,.whitespaces .whitespaces-input-warning{ + display:block +} +.multiple-input input,ul.token-input-list-mega li input{ + -webkit-appearance:caret; + background-color:initial; + border:0; + box-sizing:border-box; + box-sizing:border-box; + color:var(--text-color-high); + float:left; + font:var(--text-body1); + margin:0; + max-width:100%; + padding:9px 3px; + transition:color .2s ease-in-out; + width:100px +} +input#token-input-,input#token-input-:focus{ + color:#666 +} +li.token-input-token-mega{ + background-clip:padding-box; + border-radius:1px; + box-sizing:border-box; + color:var(--text-color-high); + cursor:default; + float:left; + font:var(--text-body1); + margin:9px 6px 9px 0; + max-width:100%; + overflow:hidden; + padding:0 20px 0 24px; + position:relative; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + user-select:text; + white-space:nowrap +} +.token-input-token-mega .verified_icon{ + display:none !important +} +li.token-input-token-mega.no-avatar{ + padding:0 20px 0 10px +} +li.token-input-token-mega p{ + display:inline; + margin:0; + padding:0 +} +li.token-input-token-invite .remove-item,li.token-input-token-mega .remove-item{ + --icon-size:24px; + --mask-color:var(--text-color-medium); + cursor:pointer; + display:block; + margin-left:4px; + opacity:.7; + position:absolute; + right:-4px; + top:0; + transition:opacity .2s ease-in-out +} +li.token-input-token-invite .remove-item:hover,li.token-input-token-mega .remove-item:hover{ + opacity:1 +} +li.token-input-selected-token-mega{ + background-color:hsla(0, 0%, 100%, .5) +} +li.token-input-input-token-mega{ + float:left; + list-style-type:none; + margin:0; + max-width:100%; + padding:0; + text-align:left +} +li.token-input-input-token-mega:first-child,li.token-input-input-token-mega:first-child input{ + min-width:100% +} +.active li.token-input-input-token-mega:first-child{ + min-width:none +} +.add-user-notification textarea::placeholder,.create-folder-input-bl input::placeholder,.multiple-input input::placeholder{ + color:var(--text-color-low) !important +} +.active .multiple-input input::placeholder,.add-user-notification.focused textarea::placeholder,.focused .create-folder-input-bl input::placeholder{ + color:var(--text-color-medium) !important +} +div.token-input-dropdown-mega{ + -webkit-background-clip:padding-box; + background-clip:padding-box; + background-color:#fff; + border:2px solid rgba(0, 0, 0, .1); + border-radius:5px; + -moz-border-radius:5px; + -webkit-border-radius:5px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + cursor:default; + font-size:13px; + margin:2px -2px 0; + overflow:hidden; + position:absolute; + width:342px; + z-index:1200 +} +div.token-input-dropdown-mega p{ + line-height:24px; + margin:0; + padding:9px 10px 11px; + text-align:center +} +div.token-input-dropdown-mega ul{ + margin:0; + max-height:274px; + padding:0 +} +div.token-input-dropdown-mega ul li{ + background-color:#fff; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:54px; + list-style-type:none; + margin:0; + padding:3px; + text-align:left; + -webkit-transition:background-color .2s ease-in-out; + -moz-transition:background-color .2s ease-in-out; + -o-transition:background-color .2s ease-in-out; + -ms-transition:background-color .2s ease-in-out; + transition:background-color .2s ease-in-out +} +div.token-input-dropdown-mega ul li.token-input-dropdown-item2-mega,div.token-input-dropdown-mega ul li.token-input-dropdown-item-mega{ + background-color:#fff +} +div.token-input-dropdown-mega ul li em{ + font-style:normal; + font-weight:700 +} +div.token-input-dropdown-mega ul li.token-input-selected-dropdown-item-mega{ + background-color:rgba(0, 0, 0, .04); + color:#fff +} +.share-dialog-contact-bl .fm-chat-user{ + color:#444; + font-family:LatoWebSemibold,sans-serif +} +.share-dialog-contact-bl .fm-chat-user span{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:inline-block; + max-width:100%; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.share-dialog-contact-bl .avatar-wrapper{ + margin:8px 0 0 +} +.share-dialog-contact-bl .fm-share-user-info{ + margin:7px 0 0 12px +} +.share-item-bl .export-link-item{ + display:block; + float:left; + height:74px; + padding-top:8px; + width:259px +} +.share-item-bl .export-icon{ + margin:0 10px +} +.share-item-bl .export-link-text-pad{ + width:170px +} +.share-item-bl .share-dialog-remove-button{ + margin-top:26px +} +.share-dialog-contact-bl.pending .fm-chat-user span{ + max-width:-webkit-calc(100% - 26px); + max-width:-moz-calc(100% - 26px); + max-width:calc(100% - 26px) +} +.pending-indicator,.search-avatar{ + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + display:block; + font:var(--text-caption); + height:16px; + left:0; + line-height:16px; + margin:2px 0 0 4px; + position:absolute; + text-align:center; + text-transform:uppercase; + top:0; + width:16px +} +.pending-indicator span,.search-avatar span{ + color:#fff +} +.pending-indicator{ + display:none +} +.share-pending-info{ + background-color:#333; + -moz-border-radius:8px; + -webkit-border-radius:8px; + border-radius:8px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#fd0; + font-size:13px; + line-height:18px; + margin:6px 0 0 -98px; + padding:12px 15px 14px; + position:absolute; + text-align:center; + width:240px; + z-index:10 +} +.share-pending-arrow{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-position:left -3831px; + background-repeat:no-repeat; + bottom:-10px; + height:10px; + left:50%; + margin-left:-9px; + position:absolute; + width:18px +} +.pending .pending-indicator{ + display:inline-block; + font-size:13px; + left:5px; + line-height:17px; + margin:0; + position:relative; + top:1px; + vertical-align:top +} +.pending .pending-indicator:before{ + content:"\00a0" +} +.search-avatar img{ + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + height:16px; + width:16px +} +.email .avatar-wrapper,.email .search-avatar,.gmail .avatar-wrapper,.gmail .search-avatar,.pending-indicator,.pending .search-avatar{ + background:#00897b; + background:-moz-linear-gradient(45deg, #00897b 0, #00bdb2 100%); + background:-webkit-linear-gradient(45deg, #00897b,#00bdb2); + background:linear-gradient(45deg, #00897b,#00bdb2) +} +.email .avatar-wrapper:after,.email .search-avatar:after,.gmail .avatar-wrapper:after,.gmail .search-avatar:after,.pending-indicator:after,.pending .search-avatar:after{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-position:center -535px; + background-repeat:no-repeat; + content:""; + display:block; + height:100%; + position:absolute; + width:100% +} +.gmail .avatar-wrapper:after,.gmail .search-avatar:after{ + background-color:#dd4b39 !important; + background-position:center -630px; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100% +} +.pending-indicator,.pending .search-avatar{ + background:#fcad00 !important +} +.pending-indicator:after,.pending .search-avatar:after{ + background-position:-3px -3761px; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100% +} +.email .avatar-wrapper:after{ + background-position:center -571px +} +.email .semi-mid-avatar:after{ + background-position:center -5880px +} +.gmail .avatar-wrapper:after{ + background-position:center -674px +} +.email .search-avatar:after{ + background-position:-72px -535px +} +.token-input-dropdown-mega .fm-chat-user{ + color:#333; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.token-input-dropdown-mega .fm-chat-user-email{ + color:#666; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.token-input-dropdown-mega .fm-chat-user-info{ + float:none; + margin:7px 0 0 51px +} +.email .fm-chat-user{ + padding-top:7px +} +.email .fm-chat-user-email{ + display:none +} +.ipc .left.email,.opc .left.email{ + min-height:34px +} +.share-search-result{ + cursor:pointer +} +.share-search-result.selected{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-position:right -748px; + background-repeat:no-repeat +} +.active .multiple-input{ + border-color:var(--stroke-info) +} +.error .multiple-input{ + border-color:var(--stroke-error) +} +.overlayed .main-blur-block,.overlayed .mega-dialog.arrange-to-back,.overlayed.mobile .bottom-page.scroll-block{ + filter:blur(.25em); + -webkit-filter:blur(.25em); + overflow:hidden +} +.overlayed .bottom-page.scroll-block,.overlayed.bottom-pages .mega-dialog.arrange-to-back{ + filter:blur(.25em); + -webkit-filter:blur(.25em) +} +.fmholder .main-blur-block{ + display:block; + height:100% +} +.overlayed .tooltip-blur{ + filter:blur(.25em); + -webkit-filter:blur(.25em) +} +.fm-mega-dialog{ + background-clip:padding-box; + background-color:#fff; + border:2px solid rgba(0, 0, 0, .1); + border-radius:8px; + box-sizing:border-box; + display:flex; + margin:46px 0 0; + position:absolute; + width:360px; + z-index:900 +} +.fm-mega-dialog.expanded{ + z-index:1200 +} +.fm-mega-dialog .fm-mega-dialog-pad{ + margin:12px +} +.fm-mega-dialog-size-icon{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:center -5509px; + background-repeat:no-repeat; + cursor:pointer; + height:20px; + opacity:.3; + position:absolute; + right:10px; + top:6px; + -webkit-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out; + width:20px +} +.fm-mega-dialog-size-icon:hover{ + opacity:.6 +} +.fm-mega-dialog-size-icon.short-size{ + background-position:center -5559px; + right:40px; + top:16px +} +.fm-mega-dialog.dialog .fm-dialog-close{ + display:block +} +.popup.non-activated-account{ + width:456px +} +.top-warning-popup.non-activated-account .warning-popup-body{ + align-items:center; + display:flex +} +.popup.non-activated-account .mailbox-icon{ + -webkit-margin-end:24px; + --width:96px; + display:inline-block; + flex-shrink:0; + height:96px; + margin-inline-end:24px; + width:96px +} +.tree-item-on-filter-hidden,.tree-item-on-search-hidden{ + display:none !important +} +.fm-mega-dialog .fm-mega-dialog-pad{ + margin:0 +} +.payment-processing{ + background:rgba(34, 34, 34, .95); + height:100%; + left:0; + pointer-events:none; + position:absolute; + top:0; + width:100%; + z-index:2000 +} +.payment-animation-pad{ + position:absolute; + text-align:center; + top:50%; + transform:translateY(-50%); + width:100% +} +.payment-animation{ + display:inline-block; + height:164px; + width:146px +} +.payment-animation-txt{ + color:#fff; + font-family:source_sans_proregular,Arial,sans-serif; + font-size:20px; + line-height:24px; + padding:45px 0 0 +} +.payment-result{ + align-items:center; + background-color:rgba(34, 34, 34, .95); + display:flex; + height:100%; + justify-content:center; + min-width:500px; + position:absolute; + width:100%; + z-index:2200 +} +.feedback-result-pad,.payment-result-pad{ + text-align:center; + z-index:2200 +} +.payment-result-header,.payment-result-txt{ + color:#fff; + font:var(--text-h1); + padding-bottom:16px +} +.feedback-result-pad .payment-result-header{ + padding-bottom:45px +} +.feedback-result-pad .result-icon{ + height:128px; + margin:0 auto 48px; + width:128px +} +.payment-result-txt{ + font:var(--text-body1); + padding-bottom:44px +} +.payment-result.pending .payment-result-txt{ + margin:0 auto; + max-width:700px +} +.payment-result.pending .payment-result-txt>a{ + color:#fff; + text-decoration:underline +} +.payment-result .result-icon{ + height:128px; + margin:0 auto 24px; + width:128px +} +.choose-plan-button{ + border:2px solid rgba(19, 224, 60, .7); + -moz-border-radius:8px; + -webkit-border-radius:8px; + border-radius:8px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#13e03c; + cursor:pointer; + display:inline-block; + font-size:16px; + height:48px; + line-height:44px; + min-width:240px; + padding:0 15px; + text-transform:uppercase; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.choose-plan-button:hover{ + background-color:var(--text-color-success); + border-color:var(--stroke-success); + color:#2e2e2e +} +body.pro:after{ + content:url(../imagery/mega-payment-animation.adcbb036907d4b76.gif); + display:none +} +.fm-transfers-block{ + -webkit-margin-start:48px; + display:none; + height:calc(100% - 48px); + margin-inline-start:48px +} +.transfer-panel-opened .fm-transfers-block{ + display:block +} +.transfer-panel-opened .fm-right-files-block,.transfer-panel-opened .fm-tree-panel,.transfer-panel-opened .left-pane-drag-handle,.transfer-panel-opened .nw-tree-panel-header{ + display:none +} +.transfer-panel-opened .fm-left-panel{ + height:auto +} +.transfer-panel-opened .l-pane-visibility{ + display:none +} +.nw-fm-percentage.download,.nw-fm-percentage.upload{ + -webkit-margin-start:8px; + background-color:var(--stroke-grey-2); + float:none; + margin:8px 0; + margin-inline-start:8px; + position:absolute +} +.nw-fm-percentage.upload{ + -webkit-margin-start:12px; + background-color:var(--stroke-grey-2); + margin:12px 0; + margin-inline-start:12px +} +.nw-fm-percentage.upload,.nw-fm-percentage.upload li,.nw-fm-percentage.upload p,.nw-fm-percentage.upload ul{ + height:24px; + width:24px +} +.nw-fm-percentage.upload span{ + height:24px; + width:12px +} +.nw-fm-percentage.upload ul :nth-child(odd){ + clip:rect(0, 24px, 24px, 12px) +} +.nw-fm-percentage.upload ul :nth-child(2n){ + clip:rect(0, 12px, 24px, 0) +} +.nw-fm-percentage.upload .right-c span{ + -moz-border-radius-topleft:12px; + -moz-border-radius-bottomleft:12px; + -webkit-border-bottom-left-radius:12px; + border-bottom-left-radius:12px; + -webkit-border-top-left-radius:12px; + border-top-left-radius:12px +} +.nw-fm-percentage.upload .left-c span{ + -moz-border-radius-topright:12px; + -moz-border-radius-bottomright:12px; + -webkit-border-bottom-right-radius:12px; + border-bottom-right-radius:12px; + -webkit-border-top-right-radius:12px; + border-top-right-radius:12px; + margin-left:12px +} +.transfer-bar-overlay{ + background-color:#222; + border-radius:100%; + height:20px; + left:2px; + position:absolute; + top:2px; + width:20px +} +.rtl .transfer-bar-overlay{ + left:auto; + right:2px +} +.transfer-bar-overlay i{ + --mask-color:var(--icon-rest); + --icon-size:20px; + transition:opacity .2s ease-in-out 0s +} +.nw-fm-left-icon.transfers:hover .transfer-bar-overlay i{ + --mask-color:var(--icon-active) +} +.nw-fm-percentage.download,.nw-fm-percentage.download li,.nw-fm-percentage.download p,.nw-fm-percentage.download ul{ + height:32px; + width:32px +} +.nw-fm-percentage.download span{ + height:32px; + width:16px +} +.nw-fm-percentage.download ul :nth-child(odd){ + clip:rect(0, 32px, 32px, 16px) +} +.nw-fm-percentage.download ul :nth-child(2n){ + clip:rect(0, 16px, 32px, 0) +} +.nw-fm-percentage.download .right-c span{ + -moz-border-radius-topleft:16px; + -moz-border-radius-bottomleft:16px; + -webkit-border-bottom-left-radius:16px; + border-bottom-left-radius:16px; + -webkit-border-top-left-radius:16px; + border-top-left-radius:16px +} +.nw-fm-percentage.download .left-c span{ + -moz-border-radius-topright:16px; + -moz-border-radius-bottomright:16px; + -webkit-border-bottom-right-radius:16px; + border-bottom-right-radius:16px; + -webkit-border-top-right-radius:16px; + border-top-right-radius:16px; + margin-left:16px +} +.download .transfer-bar-overlay{ + height:28px; + width:28px +} +.upload .nw-fm-chart0.left-c span,.upload .nw-fm-chart0.right-c span{ + background:#61d2ff +} +.download .nw-fm-chart0.left-c span,.download .nw-fm-chart0.right-c span{ + background:#13e03c +} +.transfer-bar-overlay div{ + background-color:hsla(0, 0%, 100%, .7); + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-13px -564px; + background-repeat:no-repeat; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + display:block; + height:16px; + margin:2px 0 0 2px; + -webkit-transition:background-color .2s ease-in-out; + -moz-transition:background-color .2s ease-in-out; + -o-transition:background-color .2s ease-in-out; + -ms-transition:background-color .2s ease-in-out; + transition:background-color .2s ease-in-out; + width:16px +} +.transfering .transfer-bar-overlay div{ + background-color:hsla(0, 0%, 100%, .8) +} +.paused .transfer-bar-overlay div{ + background-position:-13px -604px +} +.nw-dark-overlay{ + background-color:rgba(34, 34, 34, .95); + height:100%; + left:0; + overflow:hidden; + position:absolute; + top:0; + width:100%; + z-index:999999 +} +.megasync-content{ + margin:-243px 0 0; + position:absolute; + text-align:center; + top:50%; + width:100% +} +.megasync-logo{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-position:center -1479px; + display:inline-block; + height:67px; + margin:0 0 0 28px; + width:256px +} +.megasync-info{ + color:#fff; + font-family:source_sans_prolight,sans-serif; + font-size:16px; + line-height:32px; + margin:0 auto; + padding:33px 0 54px; + text-align:center; + width:800px +} +.megasync-close{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-11px -1544px; + background-repeat:no-repeat; + cursor:pointer; + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=70); + height:14px; + -moz-opacity:.7; + -khtml-opacity:.7; + opacity:.7; + position:absolute; + right:15px; + top:15px; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + width:14px +} +.megasync-close:hover{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity:1; + -khtml-opacity:1; + opacity:1 +} +.megasync-close-txt{ + color:hsla(0, 0%, 100%, .3); + cursor:default; + font-size:13px; + height:20px; + position:absolute; + right:0; + text-align:center; + top:36px; + width:48px +} +.mega-list-arrow{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-position:center -2171px; + cursor:pointer; + height:23px +} +.mega-list-arrow.up{ + transform:rotate(180deg) +} +.mega-list-arrow.inactive{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); + -moz-opacity:.3; + -khtml-opacity:.3; + opacity:.3 +} +.bandwidth-text-bl .star{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-position:-50px -1551px; + background-repeat:no-repeat; + display:inline-block; + margin:0 -20px 0 5px; + width:15px +} +.fm-dialog-close.small{ + background-image:url(../imagery/mega-register-big-sprite.c4d9847b9909de00.png); + background-position:-40px -130px +} +.megasync-upload-overlay .fm-mega-dialog-pad{ + margin:0 auto; + padding:0; + width:540px +} +.megasync-upload-overlay .megasync-content{ + margin:-163px 0 0 +} +.megasync-upload-overlay .megasync-info{ + color:var(--text-color-white-high); + font:var(--text-h3); + padding:40px 0 +} +.megasync-upload-overlay .feedback-label-txt{ + display:inline-block; + padding-top:16px; + white-space:nowrap +} +.megasync-upload-overlay .megasync-bottom{ + padding-top:unset +} +.megasync-content .megasync-title i{ + background-repeat:no-repeat; + border-radius:8px; + display:inline-block; + height:40px; + margin:-1px 16px 0 0; + vertical-align:top; + width:40px +} +.megasync-content .megasync-title span{ + color:var(--text-color-white-high); + font:var(--text-h1-bold) +} +.megasync-upload-overlay button.download-button{ + margin:0 0 0 12px; + white-space:nowrap +} +.megasync-info a{ + color:#d90007; + cursor:pointer +} +.camera-access{ + min-height:700px +} +.camera-access div{ + color:#fff; + font-family:source_sans_prolight,sans-serif; + font-size:19px; + line-height:24px; + text-align:center +} +.camera-top-block{ + margin:-105px 0 0; + position:absolute; + top:25%; + width:100% +} +.camera-top-icon{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-position:center -3065px; + height:110px; + margin:0 auto 53px; + width:110px +} +.left-arrow .camera-top-icon{ + background-position:center -2895px +} +.camera-top-txt{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + margin:0 auto; + max-width:800px; + padding:0 30px +} +.camera-bottom-block{ + background-color:rgba(0, 0, 0, .5); + bottom:0; + height:50%; + position:absolute; + width:100% +} +.camera-bottom-pad{ + margin:-172px 0 0; + position:absolute; + top:50%; + width:100% +} +div.camera-bottom-txt{ + color:hsla(0, 0%, 100%, .3); + font-family:source_sans_proextralight,sans-serif; + font-size:60px; + line-height:75px; + padding:0 0 67px +} +.camera-bottom-icon{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-position:center -3260px; + background-repeat:no-repeat; + display:inline-block; + min-width:380px; + padding-top:113px +} +.camera-bottom-icon.pause{ + background-position:center -3405px +} +.half-sized{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + float:left; + width:50% +} +.half-sized.right{ + float:right; + right:0 +} +.data-block.storage-data .account.buttons,.data-block.storage-data .chart-warning{ + display:none +} +.data-block.exceeded .account.buttons,.data-block.exceeded .chart-warning{ + display:block +} +.data-block.storage-data .chart-warning{ + margin:12px 0 -15px 10px +} +.empty.account.pr-item i,.empty .account.progress-title{ + opacity:.3 +} +.account.progress-list.half-sized:not(.hidden)+.account.progress-list.half-sized{ + padding:15px 0 18px 35px +} +.account.progress-item{ + display:table-row +} +.account.progress-data{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:table-cell; + height:30px; + padding-right:12px; + vertical-align:top; + white-space:nowrap; + width:10px +} +.account.progress-item.disabled{ + opacity:.3 +} +.account.progress-title span{ + font:var(--text-body1); + vertical-align:middle +} +.account.progress-title i{ + --icon-size:12px; + -webkit-margin-end:4px; + display:inline-block; + margin-inline-end:4px; + vertical-align:middle +} +.account.cloud-drive .progress-title i{ + --mask-color:var(--label-blue) +} +.account.inbox .progress-title i{ + --mask-color:var(--label-orange) +} +.account.rubbish-bin .progress-title i{ + --mask-color:var(--label-red) +} +.account.available .progress-title i{ + --mask-color:var(--label-grey) +} +.account.backups .progress-title i{ + --mask-color:var(--label-green) +} +.account.versions .progress-title i{ + --mask-color:var(--label-orange) +} +.achieved:not(.disabled) .account.progress-title{ + opacity:.5 +} +.account.pr-item{ + cursor:default +} +.account.storage-data .pr-item:not(.pr3),.pointer-c,.storage .account.pr-item:not(.available){ + cursor:pointer +} +.account.progress-perc{ + -webkit-margin-end:8px; + align-items:center; + display:inline-flex; + margin-inline-end:8px +} +.account.progress-perc .value{ + -webkit-margin-end:4px; + font:var(--text-data); + margin-inline-end:4px +} +.account.progress-perc .unit{ + font:var(--text-body2) +} +.account.progress-bar .progress-bar-container{ + background-color:rgba(0, 0, 0, .2); + border-radius:3px; + display:flex; + height:6px; + margin-top:32px; + overflow:hidden; + width:100% +} +.account.progress-bar .progress-bar-section{ + height:100% +} +.account.progress-bar .progress-bar-section.pr0{ + background-color:var(--label-blue) +} +.account.progress-bar .progress-bar-section.pr2{ + background-color:var(--label-green) +} +.account.progress-bar .progress-bar-section.pr1{ + background-color:var(--label-red) +} +.account.progress-bar .progress-bar-section.pr3{ + background-color:var(--label-orange) +} +.account.progress-size.medium,.account.progress-title.medium{ + font-size:16px; + line-height:28px +} +.account.progress-size.grey{ + color:#777 +} +.account.progress-size.grey span{ + color:#424242 +} +.account.progress-title.blue{ + color:#2ba6de +} +.account.progress-title.green{ + color:#31b500 +} +.account.used-space-block{ + padding-bottom:20px +} +.active-achievements .account.tab-content.achievements:not(.hidden){ + display:block +} +.red-txt{ + color:#f0373b +} +.account.progress-block{ + background-color:#eee; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + font-size:0; + height:12px; + margin:0; + overflow:hidden; + white-space:nowrap +} +.account.progress-block.small{ + -moz-border-radius:3px; + -webkit-border-radius:3px; + border-radius:3px; + height:16px +} +.account.progress-block.used-space,.used-space .account.progress-bar{ + height:32px +} +.account.star-description{ + color:#777; + font-size:14px; + line-height:18px; + margin:0 0 -18px +} +.red-star{ + color:#f0373b +} +.account .progress-title.star:after{ + color:#f0373b; + content:" *"; + display:inline +} +.account.widget.body{ + background:var(--surface-grey-5); + border:2px solid var(--stroke-grey-2); + border-radius:12px; + box-sizing:border-box; + color:var(--text-color-high); + margin-top:12px; + position:relative +} +.account.widget.body.achievements,.account.widget.body.referrals{ + margin-top:8px +} +.account.widget.body.storage{ + margin-bottom:4px +} +.fm-right-block:not(.active-achievements) .account.widget.body.achievements{ + display:none +} +.account.widget.body.masterkey,.account.widget.body.reviewsessions,.account.widget.body.two-factor-authentication{ + float:left; + margin:36px 20px 36px 10px; + width:-webkit-calc(50% - 30px); + width:-moz-calc(50% - 30px); + width:calc(50% - 30px) +} +.low-width .widget.body.masterkey,.low-width .widget.body.reviewsessions,.low-width .widget.body.two-factor-authentication{ + float:none; + margin:36px 0 36px 36px; + width:448px +} +.account.widget.body.reviewsessions,.account.widget.body.two-factor-authentication{ + margin-top:0 +} +.account.two-factor-authentication.enabled .enable-disable-2fa-button{ + background:#f0373b; + border:initial; + box-shadow:0 1px 2px 0 rgba(217, 0, 7, .3) +} +.account.two-factor-authentication.enabled .two-factor-disable-pin{ + background-color:rgba(0, 0, 0, .02); + border:1px solid rgba(0, 0, 0, .15); + border-radius:3px; + box-sizing:border-box; + color:#999; + display:block; + font-size:14px; + left:0; + line-height:18px; + margin-right:50px; + padding:7px 77px; + position:absolute; + text-align:center; + top:0 +} +.account.two-factor-authentication .two-factor-disable-pin{ + display:none +} +.account.two-factor-authentication .text-and-buttons{ + position:relative +} +.account.two-factor-authentication .enable-disable-2fa-button .button-label-enabled{ + display:none +} +.account.two-factor-authentication.enabled .button-label-enabled{ + display:block +} +.account.two-factor-authentication.enabled .button-label-disabled{ + display:none +} +.account.quota-alert-banner{ + border:1px solid transparent; + border-radius:4px; + box-sizing:border-box; + font:var(--text-body1); + margin-top:8px; + padding:2px 24px; + text-align:center; + width:100% +} +.account.quota-alert-banner.warning{ + background:var(--banner-background-warning); + border-color:var(--banner-border-warning); + color:var(--banner-text-warning) +} +.account.quota-alert-banner.error{ + background:var(--banner-background-error); + border-color:var(--banner-border-error); + color:var(--banner-text-error) +} +.account.widget.content{ + padding:24px; + position:relative; + z-index:1 +} +.bandwidth .account.widget.content{ + z-index:2 +} +.account.widget.title{ + align-items:center; + display:flex; + font:var(--text-h2); + margin-bottom:24px +} +.account.widget.title>i{ + -webkit-margin-end:16px; + display:inline-block; + height:24px; + margin-inline-end:16px; + vertical-align:middle; + width:24px +} +.account.widget.title>span{ + -webkit-padding-end:12px; + flex:1; + padding-inline-end:12px; + vertical-align:text-top +} +.account.widget.text{ + font:var(--text-body1); + margin:16px 0 8px +} +.data-list{ + padding-top:14px +} +.widget.buttons{ + display:flex; + justify-content:flex-end; + margin:11px -8px -7px 0 +} +.account.widget.text+.widget.buttons{ + margin:-15px -8px -7px 0 +} +.accountbuttons button{ + margin-top:27px +} +.min-pad button.mega-button{ + margin-top:-12px +} +.free .min-pad button.mega-button{ + margin-bottom:8px; + margin-top:0 +} +.account.chart.body{ + background:var(--surface-progress-background); + border-radius:100%; + float:left; + height:100px; + position:relative; + transform:rotate(-2.8deg); + width:100px +} +.rtl .account.chart.body{ + float:right +} +.account.chart.overlay{ + -webkit-margin-start:50px; + background:var(--surface-main); + display:block; + height:92px; + margin:19px 0 0; + margin-inline-start:50px; + position:absolute; + width:92px; + z-index:10 +} +.account.chart.overlay span{ + display:block; + height:12px; + left:-1px; + overflow:hidden; + position:absolute; + top:73px; + width:7px; + z-index:1 +} +.rtl .account.chart.overlay span{ + left:auto; + right:-1px +} +.account.chart.overlay span:first-child{ + left:34px; + top:-5px; + transform:rotate(45deg) +} +.rtl .account.chart.overlay span:first-child{ + left:auto; + right:34px; + transform:rotate(-45deg) +} +.account.chart.overlay span:after{ + -webkit-margin-start:-7px; + border:4px solid #fff; + border-radius:100%; + box-sizing:border-box; + content:""; + display:block; + height:12px; + margin-inline-start:-7px; + width:12px +} +.theme-dark .account.chart.overlay span:after{ + border-color:#333 +} +.fm-account-main .account.chart.overlay span:after{ + border-color:#fafafa +} +.account.chart.body:after{ + background:var(--surface-main); + border-radius:100%; + content:""; + display:block; + height:84px; + list-style:none; + margin:8px; + padding:0; + position:absolute; + width:84px; + z-index:10 +} +.account.chart-block{ + padding:18px 0 0; + position:relative +} +.chart.progressbars{ + border-radius:100%; + overflow:hidden +} +.chart.progressbars,.chart.progressbars div,.chart.progressbars span{ + height:100%; + position:absolute; + width:100% +} +.chart.progressbars span{ + display:block +} +.free .fm-right-account-block:not(.active-achievements) .bandwidth .chart.progressbars span,.free .fm-right-block.dashboard:not(.active-achievements) .bandwidth .chart.progressbars span{ + -o-transform:none !important; + -ms-transform:none !important; + -webkit-transform:none !important; + transform:none !important +} +.bandwidth.exceeded .chart.progressbars span,.free .fm-right-account-block .bandwidth.exceeded .chart.progressbars span,.free .fm-right-block.dashboard .bandwidth.exceeded .chart.progressbars span{ + -o-transform:rotate(180deg) !important; + -ms-transform:rotate(180deg) !important; + -webkit-transform:rotate(180deg) !important; + transform:rotate(180deg) !important +} +.chart.progressbars .right-chart{ + clip:rect(0, 100px, 100px, 50px) +} +.chart.progressbars .left-chart{ + clip:rect(0, 50px, 100px, 0) +} +.chart.progressbars span:before{ + background-color:#2ba6de; + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:50% +} +.chart.progressbars .left-chart span:before{ + margin-left:50% +} +.chart.progressbars span:after{ + background:var(--stroke-dark-grey); + border-radius:5px; + bottom:0; + content:""; + height:6px; + left:calc(50% - 3px); + position:absolute; + width:6px; + z-index:12 +} +.chart.progressbars.exceeded span:after{ + display:none +} +.account.chart.data{ + -webkit-margin-start:120px; + margin:9px 0 0; + margin-inline-start:120px; + min-width:84px; + position:relative; + white-space:nowrap +} +.account.upgrade-button-info{ + color:#999; + display:table-cell; + font-size:12px; + line-height:14px; + padding:5px 10px 0 0; + vertical-align:middle +} +.account.upgrade-button-bl{ + display:table-cell; + vertical-align:middle; + width:50px +} +.contact-us-revamp .main-mid-pad{ + max-width:1280px; + width:auto +} +.contact-us-revamp .about-top-block .new-bottom-pages{ + padding:46px 0 32px +} +.contact-us-revamp .contact-new-row .main-mid-pad{ + overflow:auto; + padding:0; + position:relative; + width:100% +} +.contact-us-revamp .about-top-block{ + background-color:#fff +} +.contact-us-revamp .contact-new-title{ + background-image:none; + color:#262f3b; + display:block; + font-family:source_sans_probold,sans-serif; + font-size:18px; + height:auto; + line-height:28px; + margin-bottom:16px; + padding-left:40px +} +.contact-us .contact-new-title:before{ + background-image:url(../imagery/mega-contact-us-sprite-2x.f4afbb36e8eb141.png); + background-size:80px auto; + content:""; + display:inline-block; + height:28px; + margin-left:-40px; + position:absolute; + width:28px +} +.contact-us .contact-new-title.directory:before{ + background-image:none +} +.contact-new-title.legal:before{ + background-position:-4px -312px +} +.contact-new-title.copyright:before{ + background-position:-4px -119px +} +.contact-new-title.improvements:before{ + background-position:-4px -280px +} +.contact-new-title.report-a-bug:before{ + background-position:-4px -216px +} +.contact-new-title.media:before{ + background-position:-4px -344px +} +.contact-new-title.get-support:before{ + background-position:-4px -87px +} +.contact-new-title.report-objectionable-material:before{ + background-position:-4px -151px +} +.contact-new-title.privacy:before{ + background-position:-4px -184px +} +.contact-new-title.security:before{ + background-position:-4px -248px +} +.contact-new-title.suggest-improvements:before{ + background-position:-4px -280px +} +.contact-new-title.other-ip-issues:before{ + background-position:-4px -376px +} +.contact-new-title.corporate-office:before{ + background-position:-4px -409px +} +.contact-new-title.corporate-mail:before{ + background-position:-4px -441px +} +.contact-new-title.other-group-companies:before{ + background-position:-4px -473px +} +.contact-new-title.eu-representative:before,.contact-new-title.gdpr:before{ + background-position:-4px -505px +} +.contact-us-revamp h1{ + background-image:url(../imagery/mega-contact-us-sprite.a5cd7d67582b6977.png); + background-position:0 -6px; + background-repeat:no-repeat; + color:#262f3b; + font-family:var(--text-font-family-second-semibold); + font-size:36px; + line-height:72px; + margin:36px 0 32px; + padding:0 0 0 96px +} +.contact-us-revamp p{ + color:#333; + font-size:14px; + line-height:26px; + padding:8px 0 10px +} +.contact-us-revamp .contact-directory .contact-new-title{ + background-image:none; + padding-left:0 +} +.contact-us-revamp .contact-new-column{ + border-left:none; + border-right:none; + padding:40px 30px 48px +} +.contact-us-revamp .contact-new-column.two-column{ + width:100% +} +.contact-us-revamp .directory-list-wrapper{ + margin-top:28px; + padding-left:15px; + padding-right:15px +} +.contact-us-revamp .contact-new-button,a.contact-new-button{ + background:#f0373a; + border-radius:3px; + border-radius:4px; + box-shadow:0 1px 2px 0 rgba(217, 0, 7, .3); + font-family:source_sans_prosemibold,sans-serif; + font-size:14px; + height:32px; + line-height:32px; + margin:16px 0 0 40px; + padding:1px 21px; + transition:color .2s ease-in-out,box-shadow .2s ease-in-out,background-color .2s ease-in-out +} +.contact-us-revamp .contact-new-txt{ + color:#676d75; + font-size:15px; + margin-left:40px; + min-height:auto +} +.support a.contact-new-button{ + margin-left:0 +} +.contact-us-revamp .contact-body-wrapper{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + margin:0 auto; + max-width:1280px; + overflow:auto; + padding:46px 25px 0 +} +.contact-us-revamp .contact-directory{ + display:inline-block; + width:25% +} +.contact-us-revamp .contact-right-body{ + float:right; + width:75% +} +.contact-us-revamp .directory-list-wrapper ul li{ + color:#262f3b; + cursor:pointer; + font-size:15px; + line-height:24px; + list-style-position:outside; + margin-bottom:12px +} +.contact-us-revamp .directory-list-wrapper ul li:hover{ + text-decoration:underline +} +.contact-us-revamp .directory-list-wrapper ul{ + -webkit-margin-before:0; + -webkit-margin-after:0; + -webkit-margin-start:0; + -webkit-margin-end:0; + -webkit-padding-start:20px +} +.contact-us-revamp .contact-new-row.bottom{ + border-bottom:0 solid #fff; + margin-bottom:96px +} +@media only screen and (max-width:1570px){ +.conversations-block{ + width:33.333333% +} +} +@media only screen and (max-height:292px){ +.video-call .fm-right-header{ + min-height:48px +} +} +@media only screen and (max-width:1133px){ +.conversations-block{ + width:50% +} +} +@media only screen and (max-width:1100px){ +.download.bottom-buttons{ + left:0; + width:100% +} +.contact-us-revamp .contact-directory{ + display:none +} +.contact-us-revamp .contact-body-wrapper{ + width:1024px +} +.contact-us-revamp .contact-right-body{ + float:none; + margin:0 -15px; + width:auto +} +} +@media only screen and (max-height:730px){ +.currentLink img{ + max-height:250px; + width:auto !important +} +.animations-left-container,.animations-right-container{ + margin-top:-120px +} +} +.transfer-drag-handle{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + cursor:n-resize; + width:100%; + z-index:10 +} +.left-pane-drag-handle{ + box-sizing:border-box; + cursor:ew-resize; + height:100%; + left:auto !important; + position:absolute; + right:0; + width:4px; + z-index:999 +} +.fm-account-blocks.disabled{ + opacity:.4 +} +.verified_icon{ + display:none +} +.verified .verified_icon{ + background-color:#1fa4e7; + background-image:url(../imagery/mega-new-chat-sprite.40f37d9cda30e011.png); + background-position:-7px -1353px; + background-repeat:no-repeat; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + -webkit-box-shadow:0 0 0 2px #fff; + -moz-box-shadow:0 0 0 2px #fff; + box-shadow:0 0 0 2px #fff; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:block; + height:12px; + position:absolute; + right:-3px; + top:-3px; + width:12px +} +.context-avatar.verified .verified_icon,.notification-avatar .verified .verified_icon{ + display:none +} +.support .account-form-wrapper{ + display:table; + table-layout:fixed; + width:100% +} +.free .support .account-form-wraper,.low-width .support .account-form-wraper{ + padding:0 +} +.support .fm-account-labels{ + padding-top:10px; + width:70px +} +.support .fm-account-inputs-blocks,.support .fm-account-labels{ + display:table-cell; + vertical-align:top +} +.support .fm-account-inputs-blocks{ + padding-top:15px; + width:470px +} +.support .fm-account-labels .labels-block{ + display:table-row +} +.support .fm-account-labels label{ + box-sizing:border-box; + display:table-cell; + height:48px; + padding-bottom:1px; + padding-right:15px; + vertical-align:middle; + width:100% +} +.support #support-subject{ + float:none +} +.support .fm-account-input{ + border:none; + height:auto; + line-height:0; + margin:16px 0 0 +} +.support textarea{ + border:2px solid #e8e8e8; + border-radius:4px; + -moz-border-radius:4px; + -webkit-border-radius:4px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#666; + font-size:14px; + height:80%; + padding:8px 35px 8px 10px; + width:100% +} +.help2 img[alt=smallx]{ + max-width:50px +} +.help2 img[alt=small]{ + max-width:50% +} +.mega-dialog.fm-picker-dialog .share-dialog-permissions{ + float:left; + margin-top:12px +} +body.megaChatDisabled .nw-fm-left-icon.conversations{ + display:none +} +.fadeinout{ + -webkit-animation:fadeinout 2s linear forwards; + animation:fadeinout 2s linear forwards; + animation-iteration-count:infinite; + -webkit-animation-iteration-count:infinite +} +@-webkit-keyframes fadeinout{ +0%,to{ + opacity:.2 +} +50%{ + opacity:1 +} +} +@keyframes fadeinout{ +0%,to{ + opacity:.2 +} +50%{ + opacity:1 +} +} +.red-star-img{ + background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMSI+PGcgZmlsbD0ibm9uZSI+PGcgZmlsbD0iI0Q5MDAwNyI+PHBhdGggZD0iTTIuMjUgMTFMMy4zIDYuOTMgMCA0LjRsNC4zMy0uNTNMNiAwbDEuNjcgMy44N0wxMiA0LjQgOC43IDYuOTMgOS43NSAxMSA2IDguODJ6Ii8+PC9nPjwvZz48L3N2Zz4=); + display:inline-block; + height:11px; + margin-left:8px; + margin-right:4px; + width:12px +} +.reg-st3-txt-achprogram{ + color:#666; + font-family:source_sans_proregular,sans-serif; + font-size:16px; + line-height:20px; + margin-top:8px; + padding:0 30px +} +.public-links-cnt{ + background-color:#999; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + color:#fff; + display:inline-block; + font-size:12px; + height:14px; + line-height:13px; + margin:4px 0 0 8px; + padding:0 3px !important; + vertical-align:top +} +.investors-pdf-block{ + margin-bottom:12px +} +.investors-pdf-block:first-of-type{ + margin-top:12px +} +.investors-pdf-block:last-of-type{ + margin-bottom:0 +} +.investors-pdf-block a{ + color:#eb4444; + float:right; + font-size:14px; + line-height:44px +} +.investors-pdf-title{ + color:#333; + font-size:16px; + line-height:24px +} +.investors-pdf-date{ + color:#999; + font-size:13px; + line-height:20px +} +.password-tooltip.tooltip-block{ + border-radius:6px; + box-shadow:0 0 20px 5px rgba(0, 0, 0, .06); + display:inline-block; + opacity:0; + position:absolute; + right:-406px; + top:-116px; + width:390px; + z-index:10 +} +.password-tooltip.tooltip-block,.password-tooltip.tooltip-block.visible{ + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.password-tooltip.tooltip-block.visible{ + opacity:1 +} +.password-tooltip.tooltip-block .triangle-pointer{ + background-color:#fff; + box-shadow:-10px 7px 20px 0 rgba(0, 0, 0, .06); + height:20px; + left:-9px; + position:absolute; + top:126px; + transform:rotate(45deg); + width:20px +} +.password-tooltip.tooltip-block .password-tooltip-card{ + background:#fff; + border:1px solid #f4f4f6; + border-radius:6px; + padding:28px 32px +} +.password-tooltip.tooltip-block p{ + word-wrap:break-word; + color:#262f3b; + text-align:left; + white-space:normal +} +.tooltip-block .minimum-password-block .password-icon{ + background-image:url(../imagery/mega-recover-account-sprite.83dadcefcd96b88b.png); + background-position:-133px -761px; + background-repeat:no-repeat; + background-size:344px auto; + display:inline-block; + height:20px; + left:0; + margin-right:8px; + opacity:1; + position:relative; + top:0; + vertical-align:middle; + width:20px +} +.tooltip-block .minimum-password-block .password-icon.success{ + background-position:-133px -782px +} +.password-tooltip.tooltip-block .minimum-password-block p.minimum-password{ + display:inline-block; + margin-bottom:0; + vertical-align:middle +} +.password-tooltip.tooltip-block p.minor-gray-header{ + color:#818993; + font-family:LatoWeb,source_sans_proregular,Arial,sans-serif; + font-size:14px; + line-height:21px; + margin:16px 0 12px; + text-align:left +} +.password-tooltip.tooltip-block h5.main-italic-header{ + font-size:16px; + margin-bottom:10px +} +.withoutkey .new-registration-checkbox.reset-pass{ + margin:24px auto; + width:402px +} +.reset-pass .radio-txt{ + margin-bottom:25px +} +.withoutkey .new-registration-checkbox.reset-pass .radio-txt{ + padding-right:0 +} +.checkdiv.left{ + float:left +} +.fm-right-files-block{ + display:flex; + flex-direction:column +} +.content-panel.dashboard .sprite-fm-mono.icon-info-filled.simpletip{ + --mask-color:var(--icon-rest); + --icon-size:24px; + background-repeat:no-repeat; + cursor:pointer; + display:inline-block; + height:24px; + margin-left:4px; + vertical-align:middle; + width:24px +} +.content-panel.dashboard .sprite-fm-mono.icon-info-filled.simpletip:hover{ + --mask-color:var(--icon-active) +} +.content-panel.user-management .user-management-status,.user-management-view .user-management-status{ + -webkit-margin-end:4px; + display:inline-block; + flex-grow:0; + flex-shrink:0; + height:16px; + margin-inline-end:4px; + vertical-align:middle; + width:16px +} +.content-panel.user-management .user-management-status{ + -webkit-margin-end:12px; + margin-inline-end:12px +} +.user-management-view .user-management-status-txt{ + vertical-align:middle +} +.content-panel.user-management .user-management-status i,.user-management-view .user-management-status i{ + --icon-size:16px; + display:none; + height:100%; + width:100% +} +.content-panel.user-management .enabled.user-management-status i.enabled,.user-management-view .enabled.user-management-status i.enabled{ + --mask-color:var(--secondary-green); + display:block +} +.content-panel.user-management .pending.user-management-status i.pending,.user-management-view .pending.user-management-status i.pending{ + --mask-color:var(--secondary-orange); + display:block +} +.content-panel.user-management .disabled.user-management-status i.disabled,.user-management-view .disabled.user-management-status i.disabled{ + --mask-color:var(--secondary-red); + display:block +} +.user-management-tree-panel-header{ + --mask-color:var(--text-color-medium); + -webkit-padding-start:8px; + align-items:center; + background:var(--surface-grey-2); + box-sizing:border-box; + color:var(--text-color-medium); + cursor:pointer; + display:flex; + font:var(--text-body1); + height:48px; + overflow:hidden; + padding-inline-start:8px; + position:relative; + text-overflow:ellipsis; + transition:var(--transition-color); + white-space:nowrap; + width:100% +} +.user-management-tree-panel-header:not(.active):hover{ + --mask-color:var(--text-color-high); + color:var(--text-color-high) +} +.user-management-tree-panel-header.active{ + cursor:default +} +.user-management-tree-panel-header.disabled-accounts{ + border-top:2px solid var(--stroke-main); + order:1 +} +.user-management-tree-panel-header.disabled-accounts.active{ + order:0 +} +.user-management-tree-panel-header i{ + --icon-size:16px; + -webkit-margin-end:4px; + margin-inline-end:4px; + transition:background-color .25s +} +.user-management-tree-panel-header.active i{ + transform:rotate(90deg) +} +.content-panel.user-management{ + -webkit-padding-start:20px; + box-sizing:border-box; + min-height:auto; + min-width:100%; + padding-inline-start:20px; + position:relative +} +.nw-user-management-name{ + color:var(--text-color-medium); + display:block; + font:var(--text-body2); + overflow:hidden; + padding:0; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.fm-right-header-user-management{ + background:var(--surface-main); + box-sizing:border-box; + flex-grow:0; + flex-shrink:0; + height:48px; + position:relative; + white-space:nowrap +} +.user-management-main-page-buttons{ + box-sizing:border-box; + cursor:pointer; + display:flex; + flex-direction:row-reverse; + font-size:0; + padding:5px 16px; + position:absolute; + right:0; + top:0; + white-space:nowrap; + z-index:40 +} +.rtl .user-management-main-page-buttons{ + left:0; + right:auto +} +.user-management-main-page-buttons button:not(:first-of-type){ + -webkit-margin-end:12px; + margin-inline-end:12px +} +.user-management-main-page-buttons button:not(.mega-button) .icon{ + margin:1px 8px 1px -3px +} +.user-management-main-page-buttons .add-sub-user i{ + --mask-color:var(--secondary-green) +} +.user-management-main-page-buttons .ba-account i{ + --mask-color:var(--secondary-orange) +} +.user-management-view .scroll-block{ + overflow:hidden; + position:relative +} +.user-management-overview-bar{ + background:var(--surface-grey-2); + border-left:2px solid var(--stroke-main); + bottom:0; + height:46px; + position:absolute; + text-align:center; + z-index:19 +} +.user-management-overview-bar,.user-management-overview-bar-data{ + align-items:center; + display:flex; + justify-content:center; + width:100% +} +.user-management-overview-bar-data{ + padding:0 12px +} +.user-management-overview-bar-data .info-block{ + align-items:center; + display:flex; + justify-content:center; + padding:0 32px; + position:relative +} +.user-management-overview-bar-data .info-block:first-child{ + -webkit-padding-end:112px; + padding-inline-end:112px; + padding-left:0 +} +.user-management-overview-bar-data .info-block:last-child{ + padding-right:0 +} +.user-management-overview-bar-data .info-block .icon{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-repeat:no-repeat; + float:left; + height:24px; + margin:20px 8px 20px 0; + padding:0; + width:20px +} +.user-management-overview-bar-data .info-block .title{ + -webkit-padding-end:8px; + color:var(--text-color-high); + display:inline-block; + font:var(--text-body1); + max-width:180px; + padding-inline-end:8px; + vertical-align:middle +} +.user-management-overview-bar-data .info-block .value{ + background:var(--surface-main); + border-radius:11px; + flex-shrink:0; + padding:2px 8px +} +.user-management-overview-bar-data .info-block .number,.user-management-overview-bar-data .info-block .title2{ + color:var(--text-color-high); + display:inline-block; + font:var(--text-body1); + vertical-align:middle +} +.user-management-overview-bar-data button{ + margin:16px 0 16px 80px +} +.user-management-overview-bar-data button:not(.mega-button) .icon{ + margin:4px 8px 4px 0 +} +.user-management-list-table{ + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + width:100% +} +.content-panel.user-management .nw-user-management-item{ + -webkit-padding-start:4px; + -webkit-padding-end:4px; + align-items:center; + border-radius:4px; + cursor:pointer; + display:flex; + height:32px; + margin:1px 8px; + overflow:hidden; + padding-inline-end:4px; + padding-inline-start:4px; + position:relative; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + transition:all .15s ease-in-out; + white-space:nowrap +} +.content-panel.user-management .nw-user-management-item:hover{ + background:var(--surface-main); + color:var(--text-color-high) +} +.content-panel.user-management .nw-user-management-item.selected{ + background:var(--surface-grey-1); + color:var(--text-color-high) +} +.nw-user-management-item.selected .nw-user-management-name,.nw-user-management-item:hover .nw-user-management-name{ + color:var(--text-color-high) +} +.fm-files-view-icon-user-management.listing-view{ + background-position:-6px -1335px +} +.fm-files-view-icon-user-management.listing-view:hover{ + opacity:.4 +} +.fm-files-view-icon-user-management.block-view.active,.fm-files-view-icon-user-management.listing-view.active{ + opacity:.7 +} +.fm-files-view-icon-user-management.block-view.inactive,.fm-files-view-icon-user-management.listing-view.inactive{ + cursor:default; + opacity:.05 +} +.user-management-breadcrumb{ + --mask-color:var(--text-color-medium); + align-items:center; + background:var(--surface-main); + box-sizing:border-box; + display:flex; + min-height:48px; + padding:8px 24px +} +.user-management-breadcrumb i{ + --icon-size:16px; + display:inline-flex; + margin:0 8px +} +.rtl .user-management-breadcrumb i{ + transform:rotate(180deg) +} +.user-management-breadcrumb.pro-iv-invoices .user-management-subuser-name.acc-acc,.user-management-breadcrumb .user-management-title{ + color:var(--text-color-medium); + cursor:pointer; + display:inline-flex; + font:var(--text-body1); + transition:var(--transition-color) +} +.user-management-breadcrumb.pro-iv-invoices .user-management-subuser-name.acc-acc:hover,.user-management-breadcrumb .user-management-title:hover{ + color:var(--text-color-high) +} +.fm-right-header-user-management .user-management-subuser-avatars,.user-management-dialog .user-management-subuser-avatars,.user-management-view .user-management-subuser-avatars{ + border:1px solid rgba(0, 0, 0, .05); + border-radius:100%; + box-sizing:border-box; + height:24px; + margin:0; + padding:0; + position:relative; + width:24px +} +.fm-right-header-user-management .user-management-subuser-avatars .avatar-wrapper.small-rounded-avatar,.user-management-view .user-management-subuser-avatars .avatar-wrapper.small-rounded-avatar{ + font-size:16px; + height:24px; + line-height:20px; + width:24px +} +.user-management-dialog .user-management-subuser-avatars .avatar-wrapper.small-rounded-avatar{ + border-radius:50%; + font-size:16px; + height:24px; + line-height:24px; + width:24px +} +.fm-right-header-user-management .user-management-subuser-avatars .avatar-wrapper.small-rounded-avatar img,.user-management-dialog .user-management-subuser-avatars .avatar-wrapper.small-rounded-avatar img,.user-management-view .user-management-subuser-avatars .avatar-wrapper.small-rounded-avatar img{ + height:20px; + width:20px +} +.fm-right-header-user-management .user-management-subuser-image,.user-management-dialog .user-management-subuser-image,.user-management-view .user-management-subuser-image{ + background-color:#f0f8ff; + border-radius:100%; + height:20px; + margin:1px; + padding:0; + position:absolute; + width:20px +} +.user-management-subuser-profile-container{ + background:var(--surface-main); + box-sizing:border-box; + display:flex; + padding:24px; + width:100% +} +.user-management-view .subaccount-img-big{ + border-radius:8px; + height:160px; + overflow:hidden; + transition:.1s; + width:160px +} +.user-management-subuser-profile-container .subaccount-img-big .avatar-wrapper.small-rounded-avatar{ + border-radius:8px; + font-size:80px; + height:100%; + line-height:158px; + width:100% +} +.user-management-subuser-profile-container .subaccount-img-big .avatar-wrapper.small-rounded-avatar img{ + height:100%; + width:100% +} +.user-management-subuser-profile-container .user-management-subuser-profile{ + display:flex; + flex-direction:column; + justify-content:space-between; + width:100% +} +.user-management-subuser-profile-container .user-management-subuser-profile-details{ + display:flex; + flex-direction:row +} +.user-management-subuser-profile-container .subuser-container{ + -webkit-padding-start:24px; + -webkit-padding-end:48px; + border-right:1px solid var(--stroke-grey-2); + max-width:360px; + padding-inline-end:48px; + padding-inline-start:24px; + width:50% +} +.user-management-subuser-profile-container .subuser-sec-profile-container{ + max-width:360px; + padding:0 24px; + width:50% +} +.user-management-subuser-profile-container .subuser-sec-profile-container .icon{ + display:inline-block; + padding-right:24px; + vertical-align:top +} +.user-management-subuser-profile-container .subuser-sec-profile-container ul{ + display:inline-block; + list-style-type:none; + margin:6px 0 0; + padding:0 +} +.user-management-subuser-profile-container .subuser-sec-profile-container ul li{ + padding-bottom:8px +} +.user-management-subuser-profile-container .subuser-sec-profile-container ul li span{ + text-overflow:ellipsis; + white-space:nowrap +} +.user-management-subuser-profile-container .subuser-sec-profile-container ul li>span:first-child{ + color:var(--text-color-high); + font:var(--text-body1) +} +.user-management-subuser-profile-container .subuser-sec-profile-container ul li>span:last-child{ + color:var(--text-color-medium); + font:var(--text-body1); + padding-left:4px +} +.user-management-subuser-profile-container .user-management-subuser-profile .subuser-name{ + color:var(--text-color-high); + display:block; + font:var(--text-h2); + max-width:100%; + overflow:hidden; + position:relative; + text-overflow:ellipsis; + white-space:nowrap +} +.user-management-subuser-profile-container .user-management-subuser-profile .subuser-email{ + color:var(--text-color-low); + display:block; + font:var(--text-body1); + margin:4px 0; + max-width:100%; + overflow:hidden; + position:relative; + text-overflow:ellipsis; + white-space:nowrap +} +.user-management-subaccount-view-container .user-management-subuser-profile-container .view-status-row{ + margin:4px 0; + position:relative; + width:100% +} +.user-management-subaccount-view-container .profile-button-container{ + -webkit-padding-start:24px; + padding-inline-start:24px +} +.user-management-view-status.disabled,.user-management-view-status.enabled,.user-management-view-status.pending{ + -webkit-margin-start:4px; + display:inline-block; + height:16px; + margin-inline-start:4px; + position:relative; + vertical-align:middle; + width:16px +} +.user-management-view-status.disabled i,.user-management-view-status.enabled i,.user-management-view-status.pending i{ + --icon-size:16px; + display:none; + height:100%; + width:100% +} +.user-management-view-status.enabled i.enabled{ + --mask-color:var(--secondary-green); + display:inline-block +} +.user-management-view-status.disabled i.disabled{ + --mask-color:var(--secondary-red); + display:inline-block +} +.user-management-view-status.pending i.pending{ + --mask-color:var(--secondary-orange); + display:inline-block +} +.user-management-subuser-profile .view-status-row .user-management-view-status.text{ + color:var(--text-color-low); + display:inline-block; + font:var(--text-body1); + vertical-align:middle; + white-space:nowrap +} +.user-management-subuser-profile .view-status-row .initial-pw-bar{ + background-color:orange; + border-radius:4px; + box-shadow:0 2px 4px 0 rgba(0, 0, 0, .1); + display:inline-block; + height:28px; + margin-left:108px; + position:absolute; + width:auto +} +.user-management-subuser-profile .initial-pw-bar .icon-button{ + background-color:rgba(0, 0, 0, .05); + border-radius:0 4px 4px 0; + cursor:pointer; + display:inline-block; + float:right; + height:28px; + position:relative; + transition:.1s; + width:40px +} +.user-management-subuser-profile .initial-pw-bar .icon-button:hover{ + background-color:rgba(0, 0, 0, .1) +} +.user-management-subuser-profile .initial-pw-bar .icon-button:before{ + background-color:rgba(0, 0, 0, .1); + content:""; + height:100%; + left:0; + position:absolute; + width:1px +} +.user-management-subuser-profile .initial-pw-bar .icon{ + margin:2px 8px; + position:relative +} +.user-management-subuser-profile .initial-pw-bar span{ + color:#fff; + float:left; + font-size:14px; + font-weight:400; + line-height:28px; + padding:0 12px +} +.user-management-subuser-profile .initial-pw-bar span b{ + color:#fafafa; + font-weight:600; + margin:0 12px 0 0 +} +.user-management-subuser-profile .user-management-view-status.text{ + margin:0 +} +.user-management-subuser-profile .admin-icon.role{ + margin:4px 0; + position:relative; + width:100% +} +.user-management-subuser-profile .admin-icon.role i{ + display:inline-block; + vertical-align:middle +} +.user-management-subuser-profile .admin-icon .admin-text{ + color:var(--text-color-high); + display:inline-block; + font:var(--text-body1); + position:relative; + vertical-align:bottom; + width:auto +} +.user-management-subuser-profile-container button{ + margin-top:8px +} +.user-management-subuser-profile-container button:not(:last-of-type){ + -webkit-margin-end:12px; + margin-inline-end:12px +} +.user-management-view .user-management-view-data{ + background:var(--surface-main); + box-sizing:border-box; + margin-top:24px; + padding:24px; + position:relative; + width:100% +} +.user-management-view-data .user-management-view-overall-usage{ + border-bottom:1px solid var(--stroke-grey-2); + padding-bottom:24px; + position:relative +} +.user-management-view-data .user-management-view-overall-usage .data{ + align-items:center; + display:flex +} +.user-management-view-data .user-management-view-overall-usage .title{ + width:100% +} +.user-management-storage,.user-management-transfer{ + align-items:center; + display:flex; + position:relative +} +.business-dashboard .user-management-storage,.business-dashboard .user-management-transfer{ + -webkit-padding-end:48px; + flex-grow:1; + padding-inline-end:48px +} +.user-management-storage{ + -webkit-padding-end:120px; + padding-inline-end:120px +} +.low-width .business-dashboard .user-management-storage,.low-width .business-dashboard .user-management-transfer{ + display:flex; + justify-content:center; + padding:0 0 24px +} +.user-management-storage .img,.user-management-transfer .img{ + display:inline-block; + flex-grow:0; + flex-shrink:0; + height:64px; + width:64px +} +.user-management-storage .img i,.user-management-transfer .img i{ + height:100%; + width:100% +} +.business-dashboard .storage-img{ + margin-left:24px +} +.business-dashboard .view-info,.user-management-view-data .user-management-view-overall-usage .view-info{ + -webkit-padding-start:20px; + display:inline-block; + padding-inline-start:20px; + position:relative; + vertical-align:top +} +.user-management-view-data .user-management-view-overall-usage .view-info .storage-transfer-text{ + color:var(--text-color-high); + font:var(--text-body1); + margin-bottom:8px +} +.business-dashboard .view-info .storage-transfer-text{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.business-dashboard .view-info .storage-transfer-current{ + color:var(--text-color-high); + font:var(--text-h3-bold) +} +.business-dashboard .view-info .storage-transfer-data-details{ + display:flex; + margin-top:8px +} +.business-dashboard .admin .view-info .storage-transfer-data-details{ + gap:20px; + margin-top:16px +} +.business-dashboard .view-info .storage-transfer-data-details-base{ + width:80px +} +.business-dashboard .view-info .storage-transfer-data-base-ext,.business-dashboard .view-info .storage-transfer-data-base-head{ + color:var(--text-color-medium) +} +.business-dashboard .view-info .storage-transfer-data-base-ext{ + white-space:nowrap +} +.user-management-view-data .user-management-view-overall-usage .view-info .storage-transfer-data{ + color:var(--text-color-high); + font:var(--text-h1) +} +.business-dashboard .view-info .storage-transfer-data{ + color:var(--text-color-high); + font:var(--text-h3-bold) +} +.business-dashboard .user-management-storage .img,.business-dashboard .user-management-transfer .img{ + height:60px; + width:60px +} +.business-dashboard .admin .user-management-storage .img,.business-dashboard .admin .user-management-transfer .img{ + align-self:start; + height:48px; + width:48px +} +.subaccount-view-used-data{ + display:block; + padding-top:24px; + position:relative; + width:100% +} +.used-storage-wrap{ + box-sizing:border-box; + color:var(--text-color-medium); + display:table; + font:var(--text-body2); + max-width:960px; + min-width:500px; + text-align:start; + text-overflow:ellipsis; + width:100% +} +.data-container .used-storage-wrap{ + padding:0 24px +} +.used-storage-wrap .used-storage-info{ + position:relative; + text-align:start; + text-overflow:ellipsis; + z-index:1 +} +.used-storage-wrap .used-storage-info div{ + display:table-cell; + vertical-align:middle +} +.used-storage-icon-cell{ + width:16px +} +.used-storage-icon-cell i{ + --icon-size:16px; + --mask-color:var(--text-color-medium); + padding-right:8px +} +.used-storage-info{ + box-sizing:border-box; + display:table-row; + height:32px; + padding-bottom:16px +} +.used-storage-info .versioning-settings{ + --icon-size:16px; + --mask-color:var(--text-color-medium); + cursor:pointer +} +.used-storage-info .ff-number{ + position:relative; + vertical-align:top +} +.used-storage-info .file-number,.used-storage-info .folder-number{ + display:inline-block +} +.used-storage-wrap .used-storage-info .folder-number{ + text-align:end +} +.used-storage-wrap .used-storage-info .folder-number:empty+div{ + display:none +} +.used-storage-wrap .file-number{ + padding:7px 4px +} +.used-storage-wrap .used-storage-info .ff-occupy{ + display:table-cell; + text-align:end +} +.used-storage-wrap .empty{ + color:var(--text-color-low) +} +.used-storage-wrap .empty i{ + --mask-color:var(--icon-inactive) +} +.used-storage-wrap .folder-number{ + width:120px +} +.used-storage-wrap .ba-version .folder-number{ + width:123px +} +.user-management-overview-buttons{ + box-sizing:border-box; + position:absolute; + right:12px; + top:8px +} +.user-management-overview-buttons button{ + float:right; + line-height:32px; + margin-right:12px +} +.user-management-overview-buttons button:not(.mega-button) .icon{ + margin:4px 8px 4px 0 +} +.user-management-grid-table,.user-management-overview-container,.user-management-subaccount-view-container{ + background:var(--surface-grey-1); + height:100%; + position:relative; + width:100% +} +.user-analysis-container{ + box-sizing:border-box; + margin:20px 24px; + position:relative; + width:calc(100% - 40px) +} +.business-dashboard .view-title,.user-management-view .view-title{ + box-sizing:border-box; + color:var(--text-color-high); + display:block; + font:var(--text-h2); + position:relative; + width:100% +} +.business-dashboard .view-title{ + display:flex; + padding-bottom:16px; + text-align:start +} +.business-dashboard-container .storage-analysis-container .view-title,.business-dashboard-container .storage-analysis-pie-container .view-title,.business-dashboard-container .transfer-analysis-container .view-title,.user-management-overview-container .view-title,.user-management-view .table-user-management .view-title,.user-management-view .user-analysis-container .view-title{ + padding:24px 24px 16px +} +.user-management-subaccount-view-container .view-title{ + margin-bottom:32px +} +.business-dashboard .overall-usage-container .view-title:after{ + -webkit-margin-start:-24px; + background-color:var(--divider-color); + bottom:0; + content:""; + height:1px; + left:0; + margin-inline-start:-24px; + position:absolute; + width:calc(100% + 48px) +} +.user-analysis-summary-data{ + border-top:1px solid var(--stroke-grey-2); + display:flex; + flex-direction:row; + margin-bottom:8px +} +.user-segments-container{ + position:relative; + width:25% +} +.user-segments-container:first-child{ + border-bottom-left-radius:12px +} +.rtl .user-segments-container:first-child{ + border-bottom-left-radius:0; + border-bottom-right-radius:12px +} +.user-segment-title{ + font:var(--text-body1); + margin-top:12px +} +.user-segment-number,.user-segment-title{ + color:var(--text-color-medium); + text-align:center; + width:100% +} +.user-segment-number{ + font:var(--text-h0); + margin:4px 0 +} +.user-management-overview-container b{ + font-weight:900 +} +.user-segments-container:first-child .user-segment-number,.user-segments-container:first-child .user-segment-title{ + color:var(--secondary-green) +} +.data-analysis-container{ + box-sizing:border-box; + display:flex; + height:auto; + margin:0 auto; + max-width:1400px; + position:relative; + width:100% +} +.business-dashboard .storage-analysis-pie-container{ + box-sizing:border-box +} +.storage-analysis-pie-container .storage-big-chart{ + height:160px; + margin:24px auto; + position:relative; + width:160px +} +.storage-analysis-pie-container .storage-big-chart-wrapper{ + align-items:center; + display:flex; + flex-wrap:wrap; + margin:24px auto; + position:relative +} +.storage-analysis-pie-container .storage-big-chart-wrapper .storage-pie-chart-container{ + flex-grow:1; + width:40% +} +.storage-analysis-pie-container .storage-big-chart-wrapper .storage-pie-data-container{ + flex-grow:2; + margin:auto 0; + width:60% +} +.user-management-overview-container .storage-big-chart .pie{ + height:160px; + left:80px; + overflow:hidden; + position:absolute; + -moz-transform-origin:left center; + -ms-transform-origin:left center; + -o-transform-origin:left center; + -webkit-transform-origin:left center; + transform-origin:left center; + width:80px +} +.user-management-overview-container .storage-big-chart .pie.big{ + height:160px; + left:0; + -moz-transform-origin:center center; + -ms-transform-origin:center center; + -o-transform-origin:center center; + -webkit-transform-origin:center center; + transform-origin:center center; + width:160px +} +.user-management-overview-container .storage-big-chart .pie .pie-internal{ + border-radius:80px 0 0 80px; + content:""; + height:160px; + left:-80px; + position:absolute; + -moz-transform-origin:right center; + -ms-transform-origin:right center; + -o-transform-origin:right center; + -webkit-transform-origin:right center; + transform-origin:right center; + width:80px +} +.user-management-overview-container .storage-big-chart .pie.big .pie-internal{ + left:0 +} +.user-management-overview-container .storage-big-chart .pie.big .pie-internal2{ + border-radius:0 80px 80px 0; + content:""; + height:160px; + left:80px; + position:absolute; + width:80px +} +.user-management-overview-container .storage-big-chart .pie:first-of-type .pie-internal,.user-management-overview-container .storage-big-chart .pie:first-of-type .pie-internal2{ + background-color:#00bfa5 +} +.user-management-overview-container .storage-big-chart .pie:nth-of-type(2) .pie-internal,.user-management-overview-container .storage-big-chart .pie:nth-of-type(2) .pie-internal2{ + background-color:#f5a623 +} +.user-management-overview-container .storage-big-chart .pie:nth-of-type(3) .pie-internal,.user-management-overview-container .storage-big-chart .pie:nth-of-type(3) .pie-internal2{ + background-color:#bbb +} +.user-management-overview-container .storage-big-chart .pie:nth-of-type(4) .pie-internal,.user-management-overview-container .storage-big-chart .pie:nth-of-type(4) .pie-internal2{ + background-color:#5867c3 +} +.business-dashboard-container .storage-summary{ + --surface-alpha:0.4; + align-items:center; + background:var(--surface-grey-4); + color:var(--text-color-high); + display:flex; + padding:18px 0 +} +.business-dashboard-container .storage-summary .total-storage-title{ + -webkit-margin-start:24px; + color:var(--text-color-medium); + margin-inline-start:24px +} +.business-dashboard-container .storage-summary .total-storage-number{ + -webkit-margin-start:16px; + font:var(--text-h3); + margin-inline-start:16px +} +.storage-division-container{ + align-items:center; + cursor:pointer; + display:flex; + margin:0 24px; + padding:6px 0; + position:relative; + width:auto +} +.user-management-view .storage-division-container.disabled{ + cursor:pointer !important; + opacity:.5 +} +.storage-division-container .storage-division-per{ + border-radius:9px; + color:#fff; + display:inline-block; + font-size:13px; + height:18px; + line-height:18px; + padding:0 10px; + position:relative +} +.storage-division-container .storage-division-per.one-digit{ + padding:0 12px +} +.storage-division-container .storage-division-per.two-digits{ + padding:0 8px +} +.storage-division-container .storage-division-per.three-digits{ + padding:0 4px +} +.storage-division-name{ + -webkit-margin-start:12px; + color:var(--text-color-high); + display:inline-block; + font:var(--text-body1); + margin-inline-start:12px; + position:relative; + width:calc(100% - 140px) +} +.storage-division-num{ + -webkit-margin-start:auto; + color:var(--text-color-medium); + font:var(--text-body1); + margin-inline-start:auto +} +.rtl .storage-division-num{ + left:0; + right:auto +} +.storage-division-per.cloud-drive-color{ + background-color:var(--label-red) +} +.storage-division-per.inbox-color{ + background-color:var(--label-orange) +} +.storage-division-per.incoming-color{ + background-color:var(--label-purple) +} +.storage-division-per.backups-color{ + background-color:var(--label-green) +} +.storage-division-per.rubbish-color{ + background-color:var(--label-grey) +} +.storage-analysis-container{ + --webkit-margin-end:4px; + box-sizing:border-box; + margin-inline-end:4px; + width:calc(50% - 4px) +} +.transfer-analysis-container{ + -webkit-margin-start:4px; + box-sizing:border-box; + margin-inline-start:4px; + width:calc(50% - 4px) +} +.analysis-summary-container{ + --surface-alpha:0.4; + background-color:var(--surface-grey-4); + padding:12px 24px 0 +} +.analysis-summary-container>div{ + flex-grow:1; + padding:8px 0 +} +.analysis-summary-container .two-column{ + gap:24px; + display:flex; + justify-content:space-between; + min-height:48px +} +.analysis-summary-container .two-column>div:not(.hidden){ + display:flex; + padding-bottom:8px; + width:100% +} +.analysis-summary-container .transfer-usage{ + align-items:baseline; + color:var(--text-color-medium); + display:flex; + font:var(--text-body1) +} +.analysis-summary-container .transfer-usage span.label{ + width:120px +} +.analysis-summary-container .transfer-usage span.usage-value{ + -webkit-margin-start:8px; + color:var(--text-color-high); + display:inline-block; + font:var(--text-h3); + margin-inline-start:8px; + position:relative; + white-space:nowrap +} +.nl .analysis-summary-container .transfer-usage span.usage-value{ + -webkit-margin-start:24px; + margin-inline-start:24px +} +.analysis-summary-container .next-bill-ratio{ + gap:4px; + color:var(--text-color-medium); + font:var(--text-body1) +} +.analysis-summary-container .next-bill-ratio div{ + display:flex +} +.analysis-summary-container .next-bill-ratio .ratio-value{ + white-space:nowrap +} +.analysis-summary-container .next-bill-ratio.up i,.analysis-summary-container .next-bill-ratio.up span.ratio-value{ + color:var(--label-green) +} +.analysis-summary-container .next-bill-ratio.down i,.analysis-summary-container .next-bill-ratio.down span.ratio-value{ + color:var(--label-red) +} +.user-management-overview-container .bond-color{ + color:#00bfa5 +} +@media only screen and (max-width:1200px){ +.business-dashboard .data-analysis-container{ + flex-wrap:wrap +} +.user-management-overview-container .storage-analysis-pie-container{ + -webkit-margin-end:0; + margin-bottom:24px; + margin-inline-end:0; + width:100% +} +.user-management-overview-container .transfer-analysis-container{ + -webkit-margin-start:0; + margin-inline-start:0; + width:100% +} +} +.business-dashboard .data-analysis-container .daily-storage-container,.business-dashboard .data-analysis-container .daily-transfer-container{ + align-items:center; + display:flex; + flex-wrap:wrap; + justify-content:space-between +} +.business-dashboard .data-analysis-container .chart-month-container{ + align-items:center; + display:flex; + flex-wrap:nowrap; + justify-content:space-between; + width:100% +} +.business-dashboard .data-analysis-container .daily-title{ + color:var(--text-color-medium); + font:var(--text-body1); + padding:32px 24px +} +.business-dashboard .data-analysis-container .mega-input{ + -webkit-margin-end:24px; + margin-inline-end:24px +} +.business-dashboard .data-analysis-container .chart-container{ + width:100% +} +.business-dashboard .daily-storage-container>span,.business-dashboard .daily-transfer-container>span{ + color:var(--text-color-medium); + font:var(--text-body2); + margin:0 24px 24px; + position:relative +} +.business-dashboard .data-analysis-container .analysis-remarks-container{ + color:var(--text-color-low); + font:var(--text-body2); + margin:0 24px 16px; + position:relative +} +.user-management-grid-table a{ + background-color:#fff; + border:1px solid rgba(0, 0, 0, .1); + border-radius:6px; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + content:""; + cursor:pointer; + float:left; + height:220px; + margin:16px 0 0 12px; + position:relative; + transition:.2s; + width:170px +} +.user-management-grid-table a:hover{ + box-shadow:0 0 0 4px rgba(0, 0, 0, .1) +} +.user-management-grid-table a:hover .subaccount-button{ + display:inline-block +} +.subaccount-img-big{ + flex-grow:0; + flex-shrink:0; + position:relative +} +.subaccount-img-big .subaccount-button{ + background-color:#fff; + border:1px solid rgba(0, 0, 0, .1); + border-radius:6px; + bottom:8px; + box-shadow:0 .5px 2px 0 rgba(0, 0, 0, .05); + height:16px; + position:absolute; + right:8px; + transition:.2s; + width:25px +} +.subaccount-img-big .subaccount-button:hover{ + box-shadow:0 0 0 4px rgba(0, 0, 0, .1) +} +.subaccount-img-big .subaccount-button .subaccount-button-dot{ + background-color:#999; + display:inline-block; + float:left; + height:3px; + margin:6.5px 0; + position:relative; + width:3px +} +.subaccount-img-big .subaccount-button .subaccount-button-dot:first-child{ + margin-left:5px +} +.subaccount-img-big .subaccount-button .subaccount-button-dot:nth-child(2){ + margin:6.5px 3px +} +.user-management-grid-table a .subaccount-name{ + color:#666; + float:left; + font-size:14px; + line-height:18px; + margin:8px 0 2px 8px; + max-width:130px; + overflow:hidden; + position:relative; + text-overflow:ellipsis; + white-space:nowrap +} +.user-management-grid-table a .subaccount-email{ + clear:both; + color:#999; + font-size:13px; + line-height:16px; + margin:2px 0 12px 8px; + max-width:160px; + overflow:hidden; + position:relative; + text-overflow:ellipsis; + white-space:nowrap +} +.user-management-grid-table a .user-management-status{ + margin:13px 0 0 9px +} +.user-management-grid-table a .subaccount-img-big .subaccount-grid-menu{ + background-color:#fff; + border:1px solid rgba(0, 0, 0, .1); + border-radius:4px; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + content:""; + cursor:pointer; + height:136px; + left:127px; + position:absolute; + top:160px; + transition:.2s; + width:250px; + z-index:9 +} +.user-management-grid-table a .subaccount-img-big .subaccount-grid-menu .subaccount-grid-menu-option{ + border-radius:2px; + color:#666; + display:block; + font-size:14px; + height:32px; + line-height:32px; + margin:8px 8px 0; + overflow:hidden; + position:relative; + text-overflow:ellipsis; + white-space:nowrap; + width:234px +} +.user-management-grid-table a .subaccount-img-big .subaccount-grid-menu .subaccount-grid-menu-option:hover{ + background-color:#f5f5f5 +} +.user-management-grid-table a .subaccount-img-big .subaccount-grid-menu .subaccount-grid-menu-option:last-child{ + margin:16px 8px 8px +} +.user-management-grid-table a .subaccount-img-big .subaccount-grid-menu.disabled-user .subaccount-grid-menu-option:last-child{ + color:#00bfa5; + margin:16px 8px 8px +} +.user-management-grid-table a .subaccount-img-big .subaccount-grid-menu.disabled-user .subaccount-grid-menu-option:last-child:hover{ + background-color:rgba(0, 191, 165, .1) +} +.user-management-grid-table a .subaccount-img-big .subaccount-grid-menu.enabled-user .subaccount-grid-menu-option:last-child{ + color:#e44c51; + margin:16px 8px 8px +} +.user-management-grid-table a .subaccount-img-big .subaccount-grid-menu.enabled-user .subaccount-grid-menu-option:last-child:hover{ + background-color:rgba(228, 76, 81, .1) +} +.user-management-grid-table a .subaccount-img-big .subaccount-grid-menu:before{ + background-color:#eee; + bottom:48px; + content:""; + display:block; + height:1px; + position:absolute; + width:100% +} +.user-management-grid-table a .subaccount-img-big .subaccount-grid-menu .subaccount-grid-menu-option .icon{ + float:left; + margin:4px 12px 4px 8px; + position:relative +} +.fm-main-user-management .overlay{ + background:radial-gradient(ellipse at center, #4c4c4c 0, #000 100%); + bottom:-5%; + height:110%; + left:-5%; + opacity:.5; + overflow:hidden; + position:fixed; + top:-5%; + width:110%; + z-index:1110 +} +.fm-main-user-management.main-blur-block{ + filter:blur(.25em); + -webkit-filter:blur(.25em) +} +.user-management-dialog .edit-email-warning.active{ + margin-top:-14px; + width:-webkit-calc(100% - 16px); + width:-moz-calc(100% - 16px); + width:calc(100% - 16px); + z-index:999 +} +.user-management-dialog .dialog-tree-panel-scroll{ + overflow:hidden +} +.user-management-dialog .dialog-subtitle{ + height:auto; + margin:0 auto 40px; + position:relative +} +.user-management-dialog .dialog-input-container{ + box-sizing:border-box; + height:auto; + padding:32px 32px 0; + position:relative; + width:100% +} +.user-management-dialog .dialog-input-container .input-user .confirm-img.icon{ + bottom:36px; + left:220px; + position:absolute +} +.toggle-optional-inputs-container{ + display:block; + text-align:center +} +.fm-right-header-user-management .default-button-no-border,.user-management-dialog .default-button-no-border,.user-management-view .default-button-no-border{ + box-sizing:border-box; + color:#999; + cursor:pointer; + display:inline-block; + font-size:14px; + height:24px; + line-height:24px; + margin:4px 0; + padding:0; + transition:.2s; + width:auto +} +.fm-right-header-user-management .icon,.user-management-dialog .icon,.user-management-overview-bar .icon,.voucher-info-redeem .icon{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-repeat:no-repeat; + height:24px; + width:24px +} +.user-management-dialog .icon48,.user-management-view .icon48{ + display:inline-block; + height:48px; + width:48px +} +.user-management-dialog .icon48,.user-management-view .icon48,.user-management-view .icon56{ + background-image:url(../imagery/mega-big-icons.af0093a3433fb0ee.png); + background-repeat:no-repeat; + position:relative +} +.user-management-view .icon56{ + height:56px; + width:56px +} +.bottom-page.unsub .icon64,.user-management-dialog .icon64,.user-management-view .icon64{ + background-image:url(../imagery/mega-big-icons.af0093a3433fb0ee.png); + background-repeat:no-repeat; + height:64px; + position:relative; + width:64px +} +.user-management-view .add-user-icon56{ + background-position:0 -343px +} +.user-management-view .accounts-icon56{ + background-position:-64px -343px +} +.user-management-dialog .checked-icon56{ + background-position:-124px -280px +} +.dialog-heading-img{ + display:block +} +.user-management-dialog .delete-img.icon{ + height:24px; + position:absolute; + right:16px; + top:16px; + width:24px +} +.verification-container .verification-user-info .sub-e,.verification-container .verification-user-info .sub-p{ + display:inline; + user-select:text +} +.pending-email-note{ + background-color:var(--banner-background-warning); + border:1px solid var(--banner-border-warning); + border-radius:4px; + color:var(--banner-text-warning); + display:none; + height:auto; + line-height:26px; + padding:0 12px; + width:auto +} +.pending-email-note.active{ + display:inline-block +} +.user-management-subaccount-view-container .pending-email-note{ + margin:4px 0; + max-width:100%; + position:relative; + transition:.1s; + z-index:998 +} +.user-management-subaccount-view-container .pending-email-note:hover .top-login-warning.edit-email-warning{ + display:inline-block; + opacity:1 +} +.user-management-subaccount-view-container .top-login-warning.edit-email-warning{ + display:none; + margin-left:-15px +} +.user-management-subaccount-view-container .top-login-warning.edit-email-warning .top-login-warning-pad{ + line-height:18px; + padding:20px 16px +} +.user-management-subaccount-view-container .top-login-warning.edit-email-warning .top-login-warning-txt{ + margin:0; + padding:0 +} +.re-enable-large-icon{ + background-position:-117px -1261px +} +.user-management-landing-page{ + background:var(--surface-main); + display:flex +} +.user-management-landing-page .landing-page-container{ + margin:auto; + max-width:680px; + padding:24px; + position:relative +} +.user-management-landing-page .landing-title{ + color:var(--text-color-high); + font:var(--text-h1); + text-align:center; + width:100% +} +.user-management-landing-page .landing-sub-title{ + color:var(--text-color-medium); + font:var(--text-body1); + margin:24px 0 56px; + text-align:center; + width:100% +} +.user-management-landing-page .landing-sub-container{ + align-items:center; + border-bottom:1px solid var(--divider-color); + display:flex; + height:auto; + position:relative; + transition:.2s +} +.user-management-landing-page .landing-sub-container.first{ + border-top:1px solid var(--divider-color) +} +.user-management-landing-page .landing-sub-container .list-icon{ + float:left; + height:64px; + margin:16px 24px 16px 0; + position:relative; + width:64px +} +.user-management-landing-page .landing-sub-container .landing-container-title{ + color:var(--text-color-high); + font:var(--text-h3) +} +.user-management-landing-page .landing-sub-container .landing-container-subtitle{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.user-management-landing-page .licence-bar{ + background-color:#333; + border-radius:8px; + bottom:0; + box-sizing:border-box; + height:48px; + left:50%; + margin-left:-340px; + padding:12px 60px 12px 0; + position:absolute; + width:680px +} +.user-management-landing-page .licence-bar .icon{ + float:left; + margin:0 4px 0 24px; + position:relative +} +.user-management-landing-page .licence-bar span{ + color:#fafafa; + font-size:14px; + line-height:24px; + position:relative; + vertical-align:top +} +.user-management-landing-page .landing-sub-container button{ + -webkit-margin-start:auto; + margin-inline-start:auto +} +.user-management-account-settings .settings-menu-bar{ + background:var(--surface-main); + box-sizing:border-box; + display:block; + padding:0 24px; + position:relative; + width:100% +} +.user-management-account-settings .settings-menu-bar .settings-menu-item{ + box-sizing:border-box; + color:var(--text-color-medium); + cursor:pointer; + display:inline-block; + font:var(--text-h3); + padding:20px 24px 8px; + position:relative +} +.user-management-account-settings .settings-menu-bar .settings-menu-item:hover{ + color:var(--text-color-high) +} +.user-management-account-settings .settings-menu-bar .settings-menu-item.selected{ + color:var(--text-color-high); + cursor:default; + font:var(--text-h3-bold) +} +.user-management-account-settings .settings-menu-bar .settings-menu-item.suba-setting-inv.selected{ + cursor:pointer +} +.user-management-account-settings .settings-menu-bar .settings-menu-item.selected:after{ + background-color:var(--secondary-blue); + bottom:0; + content:""; + display:block; + height:2px; + left:0; + position:absolute; + width:100% +} +.user-management-account-settings .settings-submenu-bar{ + background-color:#fff; + box-sizing:border-box; + height:48px; + padding-left:32px; + position:relative; + width:100% +} +.user-management-account-settings .settings-submenu-item{ + color:#666; + cursor:pointer; + display:inline-block; + font-size:16px; + line-height:48px; + margin-right:80px +} +.user-management-account-settings .settings-submenu-item .setting-icon24{ + display:inline-block; + margin:12px 4px 12px 12px +} +.user-management-account-settings .settings-submenu-item:hover{ + color:#333 +} +.user-management-account-settings .settings-submenu-item:hover .setting-icon24{ + opacity:.5 +} +.user-management-account-settings .settings-submenu-item.selected{ + color:#333; + font-weight:600 +} +.user-management-account-settings .settings-submenu-item.selected .setting-icon24{ + opacity:.7 +} +.user-management-account-settings .settings-submenu-item *{ + vertical-align:top +} +.user-management-account-settings .profile{ + height:calc(100% - 52px); + overflow:hidden; + text-align:center +} +.user-management-account-settings .option-containers{ + font-size:0; + padding:24px 12px 32px +} +.user-management-account-settings button.saving-btn-profile{ + -webkit-margin-end:12px; + margin-inline-end:12px; + margin-top:12px +} +.user-management-account-settings .bus-input-block{ + box-sizing:border-box; + display:inline-block; + padding:0 12px 8px; + vertical-align:top; + width:50% +} +.user-management-account-settings .setting-block{ + background:var(--surface-main); + border:2px solid var(--table-border); + border-radius:12px; + box-sizing:border-box; + display:inline-flex; + flex-direction:column; + margin:24px 24px 0; + max-width:1400px; + width:calc(100% - 48px) +} +.user-management-account-settings .setting-block:not(:nth-child(3)){ + margin:24px +} +.user-management-account-settings .title{ + border-bottom:1px solid var(--stroke-grey-2); + color:var(--text-color-high); + font:var(--text-h2); + padding:24px 24px 16px; + text-align:start +} +.user-management-dialog .ff-icon,.user-management-view .ff-icon{ + background-image:url(../imagery/mega-files-icons.8f44fb1e74566206.png); + background-repeat:no-repeat; + height:24px; + width:24px +} +.subaccount-img-big .avatar span{ + color:#fff; + float:left; + font-size:74px; + margin-left:36%; + margin-top:38% +} +.subaccount-img-big .avatar,.subaccount-img-big .avatar img{ + -moz-border-radius:0; + -webkit-border-radius:0; + border-radius:0; + height:162px; + margin:0; + width:162px +} +.subaccount-img-big .avatar img{ + float:left; + margin-left:-2px; + margin-top:-2px +} +.fm-right-header-user-management .border,.user-management-dialog .border,.user-management-view .border{ + background-color:rgba(0, 0, 0, .1); + content:" "; + display:block; + height:1px; + margin-bottom:0; + position:relative; + width:100% +} +.fm-left-panel.user-management .disabled,.fm-right-header-user-management .disabled,.user-management-dialog .disabled:not(button),.user-management-overview-bar .disabled,.user-management-view .disabled:not(button){ + opacity:1 +} +.user-management-view{ + border-top:1px solid var(--stroke-grey-2); + box-sizing:border-box; + height:100%; + overflow:hidden; + position:relative +} +.user-management-view.main-page{ + border-top:none +} +.user-management-view .icon-wrapper i{ + --icon-size:24px; + --mask-color:var(--text-color-rest); + display:block; + transition:var(--transition-color) +} +.user-management-view .icon-wrapper i:hover{ + --mask-color:var(--text-color-active) +} +.user-management-view .user-management-list-table{ + box-sizing:border-box; + height:100%; + padding:0 0 48px; + position:relative; + width:100% +} +.user-management-view .table-user-management{ + border-top:2px solid var(--stroke-grey-2); + display:flex; + flex-direction:column; + height:calc(100% - 216px) +} +.user-management-view .table-user-management .view-title{ + padding-left:48px +} +.user-management-view .table-user-management .user-management-scroll{ + position:relative +} +.user-management-view .icon-admin{ + --icon-size:24px; + --mask-color:var(--icon-rest); + display:block +} +.user-management-list-table .fm-user-management-user .admin-icon{ + -webkit-margin-start:16px; + display:inline-block; + margin-inline-start:16px; + vertical-align:middle +} +.user-management-account-settings{ + background:var(--surface-grey-1); + height:100% +} +.user-management-account-settings .invoice{ + height:calc(100% - 52px) +} +.user-management-account-settings .invoice .invoice-list{ + margin:0 auto 24px; + max-width:1400px; + width:calc(100% - 48px) +} +.user-management-account-settings .invoice .invoice-subtitle{ + color:var(--text-color-high); + font:var(--text-h2); + margin:24px 0 16px +} +.user-management-account-settings .invoice .invoice-table a{ + text-decoration:underline +} +.user-management-account-settings .invoice .invoice-table td,.user-management-account-settings .invoice .invoice-table th{ + overflow:visible +} +.user-management-account-settings .invoice .invoice-table th:first-child{ + width:20% +} +.user-management-account-settings .invoice .invoice-table th:nth-child(2){ + width:40% +} +.user-management-account-settings .invoice .invoice-table th:nth-child(3){ + width:20% +} +.user-management-account-settings .invoice .invoice-table th:nth-child(4){ + height:100%; + width:20% +} +.user-management-account-settings .invoice-detail{ + display:flex; + flex-direction:column; + left:0; + position:relative; + top:0 +} +.user-management-account-settings .invoice-detail .invoice-button{ + margin:32px auto; + width:595px +} +.user-management-account-settings .invoice-detail .invoice-container{ + background-color:#fff; + border:1px solid rgba(0, 0, 0, .1); + border-radius:8px; + box-shadow:0 .5px 2px 0 rgba(0, 0, 0, .05); + box-sizing:initial; + font-size:0; + height:842px; + margin:0 auto 24px; + width:595px +} +.user-management-account-settings .invoice-detail .mega-contact-container{ + display:inline-block; + position:relative; + vertical-align:top; + width:59.5% +} +.user-management-account-settings .invoice-detail .inv-title-container{ + display:inline-block; + margin-right:56px; + position:relative; + vertical-align:top; + width:calc(40% - 56px) +} +.user-management-account-settings .mega-contact-container ul{ + list-style-type:none; + margin:12px 0 32px; + padding-left:76px +} +.user-management-account-settings .invoice-detail .mega-logo{ + background-image:url(../imagery/mega-invoice-image.9dda2c08908acd71.png); + background-position:0 0; + background-repeat:no-repeat; + background-size:120px auto; + display:inline-block; + height:39px; + margin:64px auto auto 56px; + width:120px +} +.user-management-account-settings .invoice-detail .mega-contact-container .inv-subtitle{ + margin:12px auto 8px 102px +} +.user-management-account-settings .invoice-detail .inv-mega-contact{ + margin-bottom:8px; + position:relative; + text-decoration:none +} +.user-management-account-settings .icon12{ + background-image:url(../imagery/mega-invoice-image.9dda2c08908acd71.png); + background-repeat:no-repeat; + background-size:120px auto; + display:inline-block; + height:12px; + margin-top:4px; + vertical-align:top; + width:12px +} +.user-management-account-settings .email-small-icon{ + background-position:-3px -47px; + opacity:.5 +} +.user-management-account-settings .add-small-icon{ + background-position:-19px -47px; + opacity:.5 +} +.user-management-account-settings .post-small-icon{ + background-position:-35px -47px; + opacity:.5 +} +.user-management-account-settings .inv-mega-contact p{ + color:#666; + display:inline-block; + font-size:13px; + line-height:18px; + margin:0 0 4px 12px; + max-width:75%; + white-space:normal +} +.user-management-account-settings .inv-mega-contact:first-child p{ + color:#000; + font-weight:600 +} +.user-management-account-settings .invoice-detail .inv-title-container .inv-right{ + float:right; + width:100% +} +.user-management-account-settings .invoice-detail .inv-title-container .inv-title{ + color:#333; + font-size:32px; + font-weight:600; + line-height:39px; + margin:64px 0 0; + position:relative; + text-align:left +} +.user-management-account-settings .invoice-detail .inv-title-container ul{ + list-style-type:none; + margin:12px 0 0; + padding-left:0; + position:relative +} +.user-management-account-settings .invoice-detail .inv-title-container ul li{ + text-decoration:none +} +.user-management-account-settings .invoice-detail .inv-title-container ul li>span:first-child{ + color:#333; + display:inline-block; + font-size:13px; + line-height:20px; + text-align:left +} +.user-management-account-settings .invoice-detail .inv-title-container ul li>span:last-child{ + color:#888; + display:inline-block; + font-size:13px; + line-height:20px; + margin-left:4px; + text-align:left +} +.user-management-account-settings .invoice-detail .inv-add-container{ + display:inline-block; + height:auto; + position:relative; + width:100% +} +.user-management-account-settings .invoice-detail .inv-border{ + background-color:rgba(0, 0, 0, .1); + content:""; + height:1px; + margin-left:56px; + position:relative; + width:calc(100% - 112px) +} +.user-management-account-settings .invoice-detail .inv-add-container .inv-subtitle{ + display:inline-block; + height:100%; + position:relative; + vertical-align:top; + width:100px +} +.user-management-account-settings .invoice-detail .inv-subtitle{ + color:#333; + font-size:16px; + font-weight:600; + line-height:20px; + margin:32px auto 8px 56px +} +.user-management-account-settings .invoice-detail .inv-add-container ul{ + display:inline-block; + list-style-type:none; + margin:32px 0; + padding:0; + position:relative; + width:63% +} +.user-management-account-settings .invoice-detail .inv-add-container ul li{ + color:#666; + font-size:13px; + line-height:20px; + margin-bottom:4px; + text-decoration:none; + text-overflow:clip; + width:calc(100% - 56px) +} +.user-management-account-settings .invoice-detail .inv-add-container ul .inv-company-name{ + color:#000; + font-weight:600; + margin-bottom:8px +} +.user-management-account-settings .invoice-detail .inv-add-container ul .inv-per-name{ + color:#000; + margin-bottom:8px +} +.user-management-account-settings .invoice-detail .inv-payment-table{ + border-bottom:1px solid #333; + border-top:1px solid #333; + margin:0 56px; + width:calc(100% - 112px) +} +.user-management-account-settings .invoice-detail .inv-payment-table ul{ + list-style-type:none; + margin:0; + padding:0; + width:100% +} +.user-management-account-settings .invoice-detail .inv-payment-table ul li{ + color:var(--text-color-black-medium); + font:var(--text-caption); + padding:8px 0; + position:relative +} +.user-management-account-settings .invoice-detail .inv-payment-table ul li:first-child{ + color:#333; + font-size:16px; + font-weight:900; + line-height:20px; + padding:8px 0 +} +.user-management-account-settings .invoice-detail .inv-payment-table ul li:first-child:before{ + background-color:rgba(0, 0, 0, .1); + bottom:0; + content:""; + height:1px; + left:0; + position:absolute; + width:100% +} +.user-management-account-settings .invoice-detail .inv-payment-table ul li .inv-payment-header,.user-management-account-settings .invoice-detail .inv-payment-table ul li .inv-payment-item{ + display:inline-block +} +.user-management-account-settings .invoice-detail .inv-payment-table ul li .inv-payment-header:first-child,.user-management-account-settings .invoice-detail .inv-payment-table ul li .inv-payment-item:first-child{ + vertical-align:top; + width:60px +} +.user-management-account-settings .invoice-detail .inv-payment-table ul li .inv-payment-header:nth-child(2),.user-management-account-settings .invoice-detail .inv-payment-table ul li .inv-payment-item:nth-child(2){ + margin-left:15px; + width:auto +} +.user-management-account-settings .invoice-detail .inv-payment-table ul li .inv-payment-header:nth-child(3),.user-management-account-settings .invoice-detail .inv-payment-table ul li .inv-payment-item:nth-child(3){ + color:var(--text-color-black-high); + float:right; + font-weight:700; + text-align:right; + vertical-align:top; + width:75px +} +.user-management-account-settings .invoice-detail .inv-payment-table ul .inv-payment-price:not(:last-child):after{ + background-color:rgba(0, 0, 0, .1); + content:""; + height:1px; + left:0; + position:absolute; + top:0; + width:100% +} +.user-management-account-settings .invoice-detail .inv-payment-table ul .inv-payment-price:last-child{ + color:#000; + font-size:18px; + font-weight:900; + line-height:24px; + padding:12px 0 +} +.user-management-account-settings .invoice-detail .inv-payment-table ul .inv-payment-price:last-child:before{ + background-color:rgba(0, 0, 0, .1); + content:""; + height:1px; + position:absolute; + right:0; + top:0; + width:175px +} +.user-management-account-settings .invoice-detail .inv-payment-table ul .inv-payment-price .inv-gst-perc,.user-management-account-settings .invoice-detail .inv-payment-table ul .inv-payment-price .inv-payment-price-detail:first-child{ + display:inline-block; + text-align:right; + width:calc(100% - 110px) +} +.user-management-account-settings .invoice-detail .inv-payment-table ul .inv-payment-price .inv-payment-price-deactive-users{ + position:absolute; + width:calc(100% - 230px) +} +.user-management-account-settings .invoice-detail .inv-payment-table ul .inv-payment-price .inv-payment-price-detail:last-child{ + color:var(--text-color-black-high); + display:inline-block; + float:right; + font-weight:700; + text-align:right +} +.business-dashboard{ + overflow:hidden; + padding:0 +} +.business-dashboard .business-dashboard-container{ + margin:0 auto; + max-width:1064px; + width:100% +} +.user-management-view .section-container{ + background:var(--surface-main); + background-clip:padding-box; + border:2px solid var(--stroke-grey-2); + border-radius:12px +} +.business-dashboard .section-container{ + background:var(--surface-grey-5); + border:2px solid var(--stroke-grey-2); + border-radius:12px; + color:var(--text-color-high); + margin-top:12px; + position:relative +} +.business-dashboard .overall-usage-container{ + align-items:center; + box-sizing:border-box; + margin-bottom:12px; + padding:24px 24px 0 +} +.business-dashboard .overall-usage-container .data{ + align-items:center; + display:flex; + flex-wrap:nowrap; + padding:48px 0 +} +.business-dashboard .overall-usage-container.admin .data{ + gap:48px +} +.low-width .business-dashboard .overall-usage-container .data{ + justify-content:center; + padding:24px 0 +} +.ru .low-width .business-dashboard .overall-usage-container .data{ + flex-direction:column +} +.business-dashboard .overall-usage-container .overall-next-bill-wrapper{ + --surface-alpha:0.4; + background:var(--surface-grey-4); + border-radius:0 0 12px 12px; + display:none; + height:auto; + margin:0 -24px +} +.business-dashboard .overall-usage-container .overall-next-bill-wrapper.pro-iv{ + background:var(--surface-main); + position:relative +} +.business-dashboard .overall-usage-container .overall-next-bill-wrapper.pro-iv:before{ + -webkit-margin-start:-24px; + background-color:var(--divider-color); + content:""; + height:1px; + left:0; + margin-inline-start:-24px; + position:absolute; + top:0; + width:calc(100% + 48px) +} +.business-dashboard .overall-usage-container.admin .overall-next-bill-wrapper{ + display:block +} +.business-dashboard .overall-usage-container .overall-next-bill-container{ + padding:16px 24px; + position:relative +} +.business-dashboard .overall-usage-container .pro-iv .overall-next-bill-container{ + padding:16px +} +.business-dashboard .overall-usage-container .overall-next-bill-container .title{ + font:var(--text-body1); + font-family:var(--text-font-family-semibold) +} +.business-dashboard .overall-usage-container .overall-next-bill-container span.asterisk{ + font:var(--text-h2); + margin-left:-4px +} +.business-dashboard .overall-usage-container .next-bill-value.local{ + color:var(--secondary-green); + display:inline-block; + font:var(--text-h2) +} +.business-dashboard .overall-usage-container .next-bill-value.euro,.business-dashboard .referrals.widget .account.referral-value.euro{ + background-color:var(--surface-main); + border:1px solid var(--stroke-grey-2); + border-radius:12px; + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body1); + padding:0 6px; + vertical-align:text-bottom +} +.business-dashboard .overall-usage-container .next-bill-message{ + color:var(--text-color-medium); + font:var(--text-body2); + margin-top:12px +} +.business-dashboard .overall-usage-container .next-bill-message>div{ + margin-left:8px +} +.rtl .business-dashboard .overall-usage-container .next-bill-message>div{ + margin-right:8px +} +.business-dashboard .overall-usage-container .next-bill-message .first-message:before{ + content:"*"; + left:24px; + position:absolute +} +.business-dashboard .overall-usage-container .pro-iv .next-bill-message .first-message:before{ + left:16px +} +.rtl .business-dashboard .overall-usage-container .next-bill-message .first-message:before{ + right:24px +} +.business-dashboard .overall-usage-container .mega-button.invoices-button{ + position:absolute; + right:48px; + top:16px +} +.rtl .business-dashboard .overall-usage-container .mega-button.invoices-button{ + left:48px; + right:auto +} +.business-dashboard .subaccount-view-used-data{ + box-sizing:border-box; + padding:24px +} +.business-dashboard .subaccount-view-used-data .used-storage-info.ba-pub-links,.business-dashboard .subaccount-view-used-data .used-storage-info.ba-pub-links td{ + cursor:pointer +} +.content-panel.business-dashboard .intro-info.active,.content-panel.dashboard .intro-info.active{ + color:#00bfa5 +} +.content-panel.business-dashboard .intro-info.pending,.content-panel.dashboard .intro-info.pending{ + color:#f5a623 +} +.content-panel.business-dashboard .intro-info.disabled,.content-panel.dashboard .intro-info.disabled{ + color:#666 +} +.dragger-block{ + left:200px; + top:200px; + z-index:900 +} +.dragger-block,.dragger-content{ + min-height:20px; + position:absolute +} +.dragger-content{ + -webkit-background-clip:padding-box; + -moz-background-clip:padding-box; + background-clip:padding-box; + background-color:var(--stroke-grey-1); + border:2px solid var(--stroke-main); + border-radius:8px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + margin:-34px 0 0 -65px; + padding:7px 13px; + width:auto !important +} +.dragger-entry{ + margin:0 0 0 24px; + max-width:160px; + overflow:hidden; + padding-top:4px; + position:relative; + white-space:nowrap; + width:auto; + word-break:keep-all +} +.dragger-files-number{ + background-color:#d32200; + -moz-border-radius:10px; + -webkit-border-radius:10px; + border-radius:10px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + display:none; + font-size:11px; + height:14px; + line-height:13px; + margin:-40px 0 0 -70px; + min-width:14px; + padding:0 4px; + position:absolute; + text-align:center +} +.information-highlight{ + border-radius:4px; + box-sizing:border-box; + font:var(--text-body1); + margin:0 auto; + opacity:0; + padding:4px 8px; + text-align:center; + width:300px +} +.information-highlight.success{ + background-color:var(--banner-background-success); + border:1px solid var(--banner-border-success); + color:var(--banner-text-success); + opacity:1 +} +.information-highlight.warning{ + background-color:var(--banner-background-error); + border:1px solid var(--banner-border-error); + box-sizing:border-box; + color:var(--banner-text-error); + opacity:1; + width:302px +} +.dialog-subtitle{ + height:auto; + position:relative +} +.privacy-policy p.first,.takedown-guidance p.first{ + padding-top:5px +} +.privacy-policy h2{ + margin-top:25px +} +.terms-page-content.privacy-policy span.text.list-item{ + display:list-item; + list-style-position:inside; + list-style-type:disc +} +.simpletip-tooltip .gray-text{ + color:#868686 +} +.bottom-page.developer-settings .developer-settings-container{ + margin-bottom:100px +} +.bottom-page.developer-settings h3{ + text-align:center +} +.bottom-page.developer-settings .apply{ + background-color:#f0373a; + color:#fff; + display:flex; + margin:10px auto; + width:300px +} +.bottom-page.developer-settings .developer-setting{ + width:100% +} +.button-container.default{ + box-sizing:border-box; + height:64px; + margin-top:40px; + padding:16px; + position:relative; + text-align:right; + width:100% +} +.button-container.default:before{ + background-color:rgba(0, 0, 0, .1); + content:""; + height:1px; + left:0; + position:absolute; + top:0; + width:100% +} +.button-container .btn{ + display:inline-block; + margin-left:16px +} +.txt-editor-frame{ + left:0; + position:absolute; + top:0; + z-index:800 +} +.txt-editor-frame,.txt-editor-frame iframe{ + height:100%; + width:100% +} +.top-login-popup.sign header{ + padding-bottom:24px +} +.top-login-popup.sign .login-page-forgot-bl{ + padding:0 0 34px +} +.pro-login-dialog.sign .login-checkbox{ + margin:8px 11px 0 0 +} +.fm-right-header{ + overflow:visible +} +.corner-messages{ + bottom:0; + left:72px; + position:fixed; + z-index:221 +} +.active-folder-link .corner-messages{ + bottom:24px +} +.in-call .corner-messages{ + bottom:24px; + left:24px +} +.mega-dialog div.stay-dlg-subtext{ + color:var(--text-color-low); + font:var(--text-body2); + margin-top:12px +} +.vertical-align-top{ + vertical-align:top +} + +.megaList-content>*{ + position:absolute +} +.megaListContainer tr{ + width:100% +} +.megaListContainer .fm-dialog-table tr{ + height:32px +} +.megaListContainer.shared-folder-content .file-block-scrolling{ + margin-right:10px +} +.megaListContainer.shared-folder-content .megaList-content{ + margin-left:-8px; + margin-top:-8px +} +.megalist-pusher{ + border:0 !important; + display:block !important; + margin:0 !important; + padding:0 !important +} + +.fm-right-files-block.emptied .files-grid-view:not(.shared-folder-content),.fm-right-files-block.emptied .out-shared-grid-view,.fm-right-files-block.emptied .shared-grid-view{ + display:none +} +.files-grid-view,.files-grid-view.out-shares-view,.files-grid-view.public-links-view,.files-grid-view.shared-view,.shared-grid-view{ + box-sizing:border-box; + height:100%; + overflow:hidden; + position:relative +} +.shared-grid-view .grid-table{ + min-width:1000px; + table-layout:fixed +} +.out-shared-grid-view .grid-table td:first-child,.out-shared-grid-view .grid-table th:first-child,.shared-grid-view .grid-table td:first-child,.shared-grid-view .grid-table th:first-child{ + -webkit-padding-start:0; + padding-inline-start:0; + padding-top:3px; + text-align:center +} +.out-shared-grid-view .grid-table td:last-child,.out-shared-grid-view .grid-table th:last-child,.shared-grid-view .grid-table td:last-child,.shared-grid-view .grid-table th:last-child{ + -webkit-padding-end:0; + padding-inline-end:0 +} +.out-shared-grid-view{ + box-sizing:border-box; + height:100%; + overflow:hidden; + position:relative +} +.out-shared-grid-view .grid-table{ + min-width:1000px; + table-layout:fixed +} +.transfer-table-wrapper{ + box-sizing:border-box; + height:100%; + height:calc(100% - 48px); + overflow:hidden; + position:relative; + top:-1px +} +.transfer-table-wrapper th:first-child:before,.transfer-table-wrapper th:last-child:before,.transfer-table-wrapper th:nth-child(7):before{ + display:none +} +.grid-wrapper{ + box-sizing:initial; + display:inline-block; + margin:0 26px; + min-height:100%; + min-width:calc(100% - 52px); + position:relative; + vertical-align:top +} +.grid-scrolling-table{ + background:no-repeat center 33px linear-gradient(90deg, var(--stroke-grey-2), var(--stroke-grey-2)); + background-size:100% 1px +} +.grid-scrolling-table,.transfer-scrolling-table{ + height:100% +} +.transfer-scrolling-table{ + background:no-repeat center 24px linear-gradient(90deg, var(--stroke-grey-2), var(--stroke-grey-2)); + background-size:auto 1px; + position:relative !important +} +table{ + border-collapse:initial; + border-spacing:0; + display:table +} +table tr td:first-child:after{ + left:auto; + right:-2px; + width:calc(100% - 8px) +} +table tr td:last-child:after{ + width:calc(100% - 8px) +} +.table-hover tr.ui-selected td:before,.table-hover tr:hover td:before{ + bottom:2px; + content:""; + left:0; + position:absolute; + right:0; + top:2px; + z-index:-1 +} +.table-hover tr:hover td:before{ + background:var(--surface-grey-3); + border-bottom:1px solid var(--grid-hover-border); + border-top:1px solid var(--grid-hover-border) +} +.table-hover tr.ui-selected td:before{ + background:var(--surface-grey-4); + border-bottom:1px solid var(--stroke-grey-4); + border-top:1px solid var(--stroke-grey-4) +} +.table-hover tr.ui-selected td:first-child:before{ + background-image:linear-gradient(var(--secondary-blue), var(--secondary-blue)); + background-position:4px; + background-repeat:no-repeat; + background-size:2px calc(100% - 8px); + border-left:1px solid var(--stroke-grey-4) +} +.rtl .table-hover tr.ui-selected td:first-child:before{ + background-position:calc(100% - 4px) +} +.table-hover tr.ui-selected td:first-child:before,.table-hover tr:hover td:first-child:before{ + border-radius:4px 0 0 4px; + left:-10px; + right:-2px +} +.rtl .table-hover tr.ui-selected td:first-child:before,.rtl .table-hover tr:hover td:first-child:before{ + border-radius:0 4px 4px 0; + left:-2px; + right:-10px +} +.table-hover tr.ui-selected td:last-child:before,.table-hover tr:hover td:last-child:before,.transfer-table tr.ui-selected td:nth-child(8):before,.transfer-table tr:hover td:nth-child(8):before{ + border-radius:0 4px 4px 0; + right:-10px +} +.rtl .table-hover tr.ui-selected td:last-child:before,.rtl .table-hover tr:hover td:last-child:before,.rtl .transfer-table tr.ui-selected td:nth-child(8):before,.rtl .transfer-table tr:hover td:nth-child(8):before{ + border-radius:4px 0 0 4px; + left:-10px; + right:0 +} +.table-hover tr:hover td:last-child:before{ + border-right:1px solid var(--grid-hover-border) +} +.rtl .table-hover tr:hover td:last-child:before{ + border-left:1px solid var(--grid-hover-border); + border-right:none +} +.table-hover tr.ui-selected td:last-child:before{ + border-right:1px solid var(--stroke-grey-4) +} +table tr.ui-selected .clear-transfer-icon,table tr.ui-selected .grid-url-arrow,table tr.ui-selected .link-transfer-status,table tr:hover .clear-transfer-icon,table tr:hover .grid-url-arrow,table tr:hover .link-transfer-status{ + opacity:1 +} +.rtl .table-hover tr.ui-selected td:last-child:before{ + border-left:1px solid var(--stroke-grey-4); + border-right:none +} +.grid-table thead tr{ + background-color:var(--stroke-main); + font-size:0; + position:relative; + white-space:nowrap; + width:100% +} +.grid-table thead .filter-block.body{ + -webkit-margin-end:18px; + margin:3px 0 0; + margin-inline-end:18px +} +.grid-table th{ + -webkit-padding-start:5px; + -webkit-padding-end:13px; + background:var(--surface-main); + box-sizing:border-box; + color:var(--stroke-main-inverted); + font:var(--text-body2); + height:24px; + overflow:hidden; + padding-inline-end:13px; + padding-inline-start:5px; + padding-top:9px; + position:sticky; + position:-webkit-sticky; + text-align:start; + text-overflow:ellipsis; + top:0; + white-space:nowrap; + z-index:201 +} +.grid-table th:first-child{ + -webkit-padding-start:16px; + padding-inline-start:16px +} +.grid-table th:last-child{ + -webkit-padding-end:16px; + padding-inline-end:16px +} +.grid-table th:first-child:after,.grid-table th:last-child:before{ + background-color:var(--stroke-main); + bottom:0; + content:""; + left:-26px; + position:absolute; + right:0; + top:-1px; + z-index:-1 +} +.grid-table th:last-child:before{ + left:0; + right:-26px +} +.grid-table thead .grid-view-resize{ + cursor:col-resize; + position:absolute; + right:0; + width:16px +} +.rtl .grid-table thead .grid-view-resize{ + left:0; + right:auto +} +.grid-table thead th:not(:first-child):not(:last-child):not(.grid-url-header):not(.grid-first-th):hover:before{ + background-color:var(--stroke-mid-grey); + bottom:0; + content:""; + cursor:col-resize; + height:20px; + position:absolute; + right:7px; + width:1px +} +.grid-table thead th.full-width-col{ + width:100% +} +.rtl .grid-table th:not(.grid-url-header):hover:before{ + left:7px; + right:auto +} +.grid-table th.grid-first-th{ + -webkit-padding-start:12px; + -webkit-padding-end:14px; + cursor:pointer; + padding:0; + padding-inline-end:14px; + padding-inline-start:12px; + width:75px +} +.grid-table.fm th.grid-first-th{ + cursor:pointer +} +.grid-table.fm th:first-child{ + padding:0 +} +.grid-table.fm td,.grid-table.fm th{ + display:none +} +.grid-table.fm.v-extras [megatype=extras],.grid-table.fm.v-fav [megatype=fav],.grid-table.fm.v-fname [megatype=fname],.grid-table.fm.v-label [megatype=label],.grid-table.fm.v-size [megatype=size],.grid-table.fm.v-timeAd [megatype=timeAd],.grid-table.fm.v-timeMd [megatype=timeMd],.grid-table.fm.v-type [megatype=type],.grid-table.fm.v-versions [megatype=versions],.grid-table.fm td.space-maintainer-end,.grid-table.fm td.space-maintainer-start,.grid-table.fm th.grid-empty-spacer,.grid-table.fm th:first-child{ + display:table-cell +} +.grid-table th:last-child:after{ + display:none +} +.grid-table th span.grid-header-star{ + height:16px; + line-height:16px +} +.grid-table th.grid-first-th i,.grid-table th span.grid-header-star i{ + --icon-size:16px; + --mask-color:var(--icon-rest); + display:inline-block +} +.files-grid-view .grid-scrolling-table{ + box-sizing:border-box; + padding-bottom:6px +} +.files-grid-view.fm .column-settings{ + background-color:var(--stroke-main); + content:""; + cursor:pointer; + display:inline-block; + height:24px; + position:absolute; + right:0; + top:0; + width:40px; + z-index:209 +} +.shared-details-block .files-grid-view.fm .column-settings{ + top:14px +} +.rtl .files-grid-view.fm .column-settings{ + left:0; + right:auto +} +.emptied .files-grid-view.fm .column-settings{ + display:none +} +.files-grid-view.fm .column-settings i{ + --icon-size:24px; + -webkit-margin-start:8px; + --mask-color:var(--icon-inactive); + margin-inline-start:8px +} +.files-grid-view.fm .column-settings.c-opened i,.files-grid-view.fm .column-settings:hover i{ + --mask-color:var(--icon-active) +} +.files-grid-view.fm .column-settings.overlap{ + background-color:var(--stroke-main); + border-left:1px solid var(--stroke-grey-2); + padding-bottom:4px; + padding-top:5px +} +.rtl .files-grid-view.fm .column-settings.overlap{ + border-left:unset; + border-right:1px solid var(--stroke-grey-2) +} +.out-shared-grid-view>.grid-table thead:after{ + width:calc(100% - 32px) +} +table.grid-table{ + border-collapse:initial; + margin:0 auto; + table-layout:fixed; + width:100% +} +table.grid-table td:first-child,table.grid-table th:first-child{ + -webkit-padding-start:12px; + padding-inline-start:12px +} +.transfer-table tr td:nth-child(8),table.grid-table td.space-maintainer-end,table.grid-table td.space-maintainer-start,table.grid-table td:first-child,table.grid-table td:last-child,table.grid-table th:first-child,table.grid-table th:last-child{ + overflow:visible +} +table.grid-table td{ + -webkit-padding-start:5px; + -webkit-padding-end:13px; + border-bottom:1px solid var(--stroke-grey-2); + overflow:hidden; + padding:0; + padding-inline-end:13px; + padding-inline-start:5px; + position:relative; + text-overflow:ellipsis +} +table.grid-table .tranfer-filetype-txt{ + -webkit-padding-start:38px; + box-sizing:border-box; + display:block; + left:0; + overflow:hidden; + padding-inline-start:38px; + text-overflow:ellipsis; + white-space:nowrap; + width:100% +} +.taken-down .file-block-title,.taken-down .nw-fm-tree-folder,.taken-down .propreties-dark-txt,.taken-down .tranfer-filetype-txt,table.grid-table .taken-down td{ + color:var(--secondary-red) +} +table.grid-table .undecryptable td{ + color:var(--stroke-mid-grey) +} +.undecryptable .file-block-title,.undecryptable .nw-fm-tree-folder,.undecryptable .propreties-dark-txt,.undecryptable .shared-folder-info,.undecryptable .shared-folder-name,table.grid-table .undecryptable .tranfer-filetype-txt{ + color:var(--secondary-orange) +} +table.grid-table .ver-col-container{ + line-height:30px +} +table.grid-table .ver-col-container>div{ + vertical-align:middle +} +table.grid-table .ver-col-container .ver-nb{ + color:var(--grid-text); + display:inline-block; + font:var(--text-body2); + height:18px; + text-align:center; + width:19px +} +table.grid-table .ver-col-container .ver-icon.versioning{ + display:inline-block; + height:26px +} +table.grid-table .ver-col-container .ver-icon.versioning .versioning-indicator{ + display:inline-block; + height:100%; + position:relative +} +table.grid-table .ver-col-container .ver-size{ + -webkit-margin-start:8px; + background-color:var(--stroke-mid-grey); + border-radius:8px; + display:inline-block; + height:15px; + margin-inline-start:8px +} +table.grid-table .ver-col-container .ver-size .ver-size-nb{ + color:var(--text-color-white-high); + font:var(--text-body2); + height:15px; + line-height:15px; + padding-left:7px; + padding-right:7px; + text-align:center +} +table.grid-table .grid-url-arrow{ + background-color:initial; + border-radius:4px; + cursor:pointer; + display:block; + height:24px; + left:35px; + opacity:0; + padding:0 2px; + position:absolute; + top:0; + transition:all 50ms ease-in-out; + width:24px +} +.rtl table.grid-table .grid-url-arrow{ + left:auto; + right:35px +} +table.grid-table .grid-url-arrow i{ + --icon-size:24px; + --mask-color:var(--icon-inactive) +} +table.grid-table .grid-url-arrow.active i,table.grid-table .grid-url-arrow:hover i{ + --mask-color:var(--icon-active) +} +table.grid-table .grid-url-header-nw .grid-url-arrow{ + left:auto; + right:14px; + top:17px +} +.rtl table.grid-table .grid-url-header-nw .grid-url-arrow{ + left:14px; + right:auto +} +table.grid-table tr{ + box-sizing:border-box +} +table.grid-table tr:empty{ + border:0 +} +table.grid-table tr:not(.taken-down) .grid-status-icon:not(.read-only):not(.read-and-write){ + cursor:pointer +} +table.grid-table .grid-status-icon{ + --icon-size:16px; + --mask-color:var(--icon-rest); + display:inline-block; + margin:0 0 1px; + vertical-align:middle +} +table.grid-table .grid-status-icon.icon-info{ + background-color:var(--secondary-orange) +} +table.grid-table .grid-status-icon.icon-takedown{ + --mask-color:var(--secondary-red) +} +table.grid-table tbody i:not(.verified-user-icon):not(.icon-dot){ + --mask-color:var(--icon-rest); + --icon-size:24px; + display:inline-block; + margin-bottom:1px; + vertical-align:middle +} +table.grid-table tbody .versioning-indicator i.icon-versions-previous{ + display:block +} +table.grid-table tbody tr:not(.linked) .icon-link{ + display:none +} +table.grid-table tbody .linked .icon-link{ + display:inline-block +} +.rtl table.fm{ + direction:rtl +} +table.fm td{ + box-sizing:border-box; + color:var(--text-color-medium); + font:var(--text-body2); + height:32px; + line-height:31px; + overflow:hidden; + padding:0; + position:relative; + text-align:start; + text-overflow:ellipsis; + white-space:nowrap; + z-index:0 +} +table.fm [megatype=fav],table.fm td{ + -webkit-padding-start:5px; + -webkit-padding-end:13px; + padding-inline-end:13px; + padding-inline-start:5px +} +table.fm [megatype=fav]{ + text-align:center +} +table.fm td[megatype=fname]{ + min-width:180px +} +table.fm td[megatype=empty]{ + display:table-cell; + width:100% +} +table.fm td:first-child,table.fm th:first-child{ + -webkit-padding-start:0; + padding-inline-start:0; + width:0 +} +table.fm tr{ + white-space:nowrap; + width:100% +} +table.fm .transfer-filetype-icon,table.fm .versioning-indicator{ + top:50%; + transform:translateY(-50%) +} +table.fm .grid-url-arrow{ + margin-top:0 +} +.terms-page-content.terms .index-table{ + margin:24px auto; + width:100% +} +.terms-page-content.terms .index-table td{ + -webkit-padding-end:8px; + font-family:var(--text-font-family); + padding:8px 0; + padding-inline-end:8px +} +.terms-page-content.terms .index-table td:not(:first-child){ + text-align:end +} +.bottom-page.developer-settings .developer-settings-table{ + margin:auto; + text-align:start +} +.megasync-table{ + background-color:#fff; + border-radius:6px; + display:inline-block; + overflow:hidden +} +.megasync-table table{ + width:640px +} +.megasync-table table td,.megasync-table table th{ + border-left:1px solid rgba(0, 0, 0, .1); + box-sizing:border-box; + font-weight:400; + height:80px; + padding:0 23px; + text-align:start; + vertical-align:middle; + white-space:nowrap +} +.megasync-table table td{ + border-top:1px solid rgba(0, 0, 0, .1); + height:63px +} +.megasync-table table td:first-child,.megasync-table table th:first-child{ + background-color:#f2f2f2; + border-left:0; + text-align:right; + width:209px +} +.megasync-table table td:nth-child(2),.megasync-table table th:nth-child(2){ + padding:0 26px; + width:216px +} +.megasync-table table td:nth-child(3),.megasync-table table th:nth-child(3){ + padding:0 28px; + width:215px +} +.megasync-table table td span,.megasync-table table th span{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-position:left 1000px; + background-repeat:no-repeat; + color:#333; + display:inline-block; + font-size:16px; + line-height:40px; + padding:0 +} +.megasync-table table span.tick{ + background-position:-4px -1768px +} +.megasync-table table span.dots{ + background-position:-3px -1648px +} +.megasync-table table span.globe{ + background-position:-2px -1577px; + margin-left:-3px; + padding:0 0 0 48px !important +} +.megasync-table table span.sync{ + background-position:0 -1696px; + margin-left:-4px; + padding:0 0 0 45px !important +} +.megasync-table table td:first-child span,.megasync-table table th:first-child span{ + background-image:none; + color:rgba(51, 51, 51, .7) +} +.megasync-table table td:nth-child(2) span,.megasync-table table th:nth-child(2) span{ + padding:0 0 0 45px +} +.megasync-table table td:nth-child(3) span,.megasync-table table th:nth-child(3) span{ + padding:0 0 0 41px +} +.user-management-view .table-user-management table{ + border:none; + margin:0 24px; + table-layout:fixed; + width:calc(100% - 48px) +} +.user-management-view .table-user-management .data-table tr .name .fm-user-management-user{ + align-items:center; + display:flex; + white-space:nowrap +} +.user-management-view .table-user-management .data-table tr .status{ + white-space:nowrap; + width:14% +} +.user-management-view .table-user-management .data-table tr .last-active,.user-management-view .table-user-management .data-table tr .used-storage,.user-management-view .table-user-management .data-table tr .used-transfer{ + width:14% +} +.user-management-view .table-user-management .data-table tr .actions{ + width:140px +} +.user-management-view .grid-table-user-management tbody tr{ + height:64px +} +.user-management-view .grid-table-user-management td{ + cursor:pointer +} +.user-management-view .grid-table-user-management th{ + box-sizing:border-box; + color:var(--text-color-medium); + font:var(--text-body2); + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.user-management-view .user-management-list-table tr .icon-wrapper{ + opacity:0; + transition:var(--transition-opacity); + vertical-align:middle +} +.files-grid-view.user-management-view .user-management-list-table tbody tr:hover .icon-wrapper{ + opacity:1 +} +.files-grid-view.user-management-view .user-management-list-table tbody tr .icon-wrapper.disabled i{ + --mask-color:var(--icon-inactive) +} +.files-grid-view.user-management-view .user-management-list-table tbody tr .icon-wrapper:not(.disabled) i{ + --mask-color:var(--icon-rest) +} +.files-grid-view.user-management-view .user-management-list-table tbody tr .icon-wrapper:not(.disabled):hover i{ + --mask-color:var(--icon-active) +} +.files-grid-view.user-management-view .user-management-list-table tbody tr td .icon-wrapper{ + -webkit-margin-start:8px; + cursor:pointer; + display:inline-block; + margin-inline-start:8px; + position:relative +} +.user-management-list-table tr td .user-management-name{ + color:var(--text-color-high); + font:var(--text-body1); + overflow:hidden; + text-overflow:ellipsis; + vertical-align:bottom; + white-space:nowrap +} +.user-management-list-table tr td .user-management-email{ + color:var(--text-color-low); + font:var(--text-body2); + margin-top:2px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.user-management-list-table tr td .user-management-email.pending-email,.user-management-list-table tr td .user-management-email.warning{ + color:var(--text-color-warning) +} +@media only screen and (max-width:1368px) and (min-width:320px){ +table.shared-with-me td:nth-child(2){ + width:150px !important +} +.contacts-panel table.shared-with-me td:nth-child(2){ + width:240px !important +} +} +table.shared-with-me td{ + height:56px; + vertical-align:middle; + z-index:0 +} +table.shared-with-me .avatar-wrapper{ + margin:0; + position:absolute; + top:14px +} +table.shared-with-me .shared-folder-info-block{ + box-sizing:border-box; + display:block; + font:var(--text-body2); + padding:0 0 0 51px; + position:relative; + text-align:left +} +table.shared-with-me .shared-folder-info-block .shared-folder-name{ + color:var(--text-color-high); + display:block; + font:var(--text-body1); + overflow:hidden; + padding-inline-end:24px; + text-overflow:ellipsis; + white-space:nowrap +} +table.shared-with-me .shared-folder-info-block .shared-folder-info{ + color:var(--text-color-low); + display:block; + font:var(--text-body2); + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +table.shared-with-me .fm-chat-user-info{ + display:block; + float:none; + margin:0 0 0 44px +} +table.shared-with-me .fm-chat-user-info .fm-chat-user{ + color:var(--text-color-high); + display:block; + font:var(--text-body1); + margin-right:20px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +table.shared-with-me .fm-chat-user-info .nw-contact-status{ + margin:6px 6px 0 0 +} +table.shared-with-me .fm-chat-user-info .fm-chat-user-status{ + color:var(--text-color-low); + font:var(--text-body2) +} +table.shared-with-me .shared-folder-size{ + font:var(--text-body2) +} +table.shared-with-me .shared-folder-access{ + color:var(--text-color-medium); + display:block +} +table.shared-with-me .shared-folder-access i{ + --icon-size:22px; + display:inline-block; + margin-right:5px +} +table.shared-with-me .shared-folder-access span{ + display:inline-block; + font:var(--text-body2); + vertical-align:middle +} +@media only screen and (max-width:1368px) and (min-width:320px){ +table.out-shares td:nth-child(2){ + width:150px !important +} +} +table.out-shares td{ + height:56px; + z-index:0 +} +table.out-shares .shared-folder-info-block{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:block; + font:var(--text-body2); + padding:0 0 0 51px; + position:relative; + text-align:left +} +table.out-shares .shared-folder-info-block .shared-folder-name{ + color:var(--text-color-high); + display:block; + font:var(--text-body1); + overflow:hidden; + padding-inline-end:24px; + text-overflow:ellipsis; + white-space:nowrap +} +table.out-shares .shared-folder-info-block .shared-folder-info{ + color:var(--text-color-low); + display:block; + font:var(--text-body2); + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +table.out-shares .fm-chat-users-wrapper.simpletip{ + display:inline-block; + max-width:100%; + vertical-align:top +} +table.out-shares .fm-chat-users-wrapper.simpletip:hover{ + text-decoration:underline +} +table.out-shares .fm-chat-users,table.out-shares .fm-chat-users-other,table.out-shares .last-shared-time,table.out-shares .shared-folder-size{ + color:var(--text-color-medium); + font:var(--text-body2) +} +table.out-shares .fm-chat-users{ + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.transfer-table thead{ + margin:0 16px; + min-width:1152px; + white-space:nowrap; + width:calc(100% - 32px) +} +.transfer-table th{ + background-color:var(--stroke-main); + box-sizing:border-box; + color:var(--stroke-main-inverted); + display:table-cell; + float:none; + font:var(--text-body2); + height:24px; + overflow:hidden; + padding:0 13px 0 5px; + position:sticky; + position:-webkit-sticky; + text-align:left; + text-overflow:ellipsis; + top:0; + white-space:nowrap; + z-index:1 +} +.transfer-table th:first-child span{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-6px -4019px; + background-repeat:no-repeat; + display:block; + height:24px +} +.fm-transfers-block td{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#707070; + font-size:13px; + font-weight:400; + height:32px; + line-height:32px; + overflow:hidden; + padding:0 13px 0 5px; + position:relative; + text-align:left; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.transfer-table{ + min-width:1152px +} +.transfer-table,.transfer-table tbody{ + height:auto; + table-layout:fixed; + white-space:nowrap +} +.transfer-table .tranfer-filetype-txt{ + box-sizing:border-box; + display:block; + left:0; + overflow:hidden; + padding-left:30px; + padding-top:7px; + position:absolute; + text-overflow:ellipsis; + white-space:nowrap; + width:100% +} +.transfer-table .transfer-filetype-icon{ + margin:4px 0 0 -1px +} +.transfer-table .transfer-type{ + margin:0 auto +} +.transfer-table .transfer-type:before{ + background-image:none +} +.transfer-table td{ + border-bottom:1px solid var(--stroke-grey-2); + box-sizing:border-box; + color:var(--text-color-high); + cursor:default; + font:var(--text-body1); + height:32px; + line-height:32px; + padding-left:5px; + position:relative; + z-index:0 +} +.transfer-table td object{ + height:26px; + left:0; + opacity:0; + position:absolute; + top:0; + width:100%; + z-index:10 +} +.transfer-table td:first-child,.transfer-table th:first-child{ + background-image:none; + overflow:visible; + padding:0 +} +.transfer-table td:nth-child(2){ + vertical-align:top +} +.transfer-table td:nth-child(7),.transfer-table th:nth-child(7){ + background-image:none +} +.transfer-table td:nth-child(8):before{ + border-radius:0 4px 4px 0 +} +.transfer-table td:nth-child(9),.transfer-table th:nth-child(9){ + overflow:visible; + width:0 +} +.dndc-sort .transfer-table td:nth-child(9),.transfer-table td:nth-child(9),.transfer-table th:nth-child(9){ + display:none +} +.transfer-table .clear-transfer-icon i,.transfer-table .grid-url-arrow i,.transfer-table .link-transfer-status i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + display:inline-block; + vertical-align:middle +} +.transfer-table .clear-transfer-icon:hover i,.transfer-table .grid-url-arrow i,.transfer-table .link-transfer-status:hover i{ + --mask-color:var(--icon-active) +} +@media only screen and (max-width:1260px){ +.transfer-table th:nth-child(3){ + width:192px +} +} +@media only screen and (max-width:1100px){ +.transfer-table th:nth-child(6){ + width:162px +} +} +.fm-account-reseller .grid-table.vouchers{ + table-layout:auto +} +.grid-table.vouchers td:first-child{ + padding-left:12px +} +.dev-new-appplications-table .grid-table th{ + height:30px; + line-height:27px !important +} +.dev-new-appplications-table .grid-table td{ + color:#666; + height:31px +} +.dev-new-appplications-table .grid-table tr td:first-child{ + padding-left:10px +} +.dev-new-appplications-table .grid-table td{ + color:#666 +} +.dev-new-appplications-table table.grid-table td:nth-child(4),.dev-new-appplications-table table.grid-table th:nth-child(4){ + padding:0; + width:35px +} +.grid-scrolling-table.ps>.ps__scrollbar-y-rail,.user-management-scroll.ps>.ps__scrollbar-y-rail{ + margin-top:36px +} +.contacts-list .grid-scrolling-table.ps>.ps__scrollbar-y-rail{ + margin-top:24px +} +.add-from-cloud-dialog .grid-scrolling-table.ps>.ps__scrollbar-y-rail{ + margin-top:34px +} +.transfer-scrolling-table.ps>.ps__scrollbar-y-rail{ + margin-top:26px +} + +.gallery-tabs-bl,.shares-tabs-bl{ + background-color:var(--surface-main); + border-bottom:1px solid var(--surface-grey-2); + box-sizing:border-box; + display:table; + margin:0; + padding:16px 16px 0 12px; + width:100% +} +.gallery-tabs-bl{ + align-items:center; + border-bottom:1px solid var(--surface-main); + display:flex; + flex-shrink:0; + flex-wrap:wrap; + height:49px; + min-width:700px +} +.rtl .gallery-tabs-bl{ + direction:rtl +} +.fm-right-files-block.emptied .gallery-tabs-bl button:not(.gallery-close-discovery){ + display:none +} +.gallery-section-title{ + color:var(--text-color-high); + flex:10000 1 0%; + font:var(--text-body1); + line-height:26px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.gallery-section-discovery{ + flex:10000 1 0%; + position:relative +} +.rtl .gallery-section-discovery{ + text-align:left +} +body:not(.rtl) .gallery-section-discovery{ + text-align:right +} +.rtl .gallery-section-title{ + left:auto; + right:25px +} +.gallery-section-title i{ + --icon-size:24px; + --mask-color:var(--secondary-blue); + -webkit-margin-end:8px; + margin-inline-end:8px +} +.gallery-tab-lnk,.shares-tab-lnk{ + background-color:initial; + border:0; + border-bottom:2px solid transparent; + box-sizing:border-box; + color:var(--text-color-high); + cursor:pointer; + float:left; + font:var(--text-h3); + height:32px; + margin:0 24px -1px; + opacity:.7; + outline:0; + padding:0 0 8px; + position:relative +} +.gallery-tab-lnk.filled,.shares-tab-lnk.filled{ + padding:4px 5px 0 24px +} +.gallery-tab-lnk span,.shares-tab-lnk span{ + border-radius:4px; + color:#fff; + display:none; + font:var(--text-body2); + height:14px; + line-height:14px; + margin:4px 0 0 9px; + padding:0 4px; + text-align:center; + vertical-align:top +} +.gallery-tab-lnk.filled span,.shares-tab-lnk.filled span{ + display:inline-block +} +.gallery-tab-lnk.active,.shares-tab-lnk.active{ + border-color:var(--secondary-blue); + color:var(--text-color-high); + font:var(--text-h3-bold); + opacity:1 +} + +.fm-empty-section,.fm-empty-sharef{ + align-items:center; + background:var(--surface-grey-1); + box-sizing:border-box; + display:flex; + flex-direction:column; + flex-grow:1; + height:100%; + text-align:center +} +.fm-empty-pad{ + margin:auto +} +.fm-empty-section .mega-button.large{ + margin-top:30px +} +.fm-empty-pad i.section-icon,.fm-empty-section i.section-icon,.fm-empty-sharef i.section-icon{ + --icon-size:192px; + --mask-color:var(--secondary-grey); + display:inline-block +} +.fm-empty-section.fm-empty-user-management{ + z-index:2 +} +.fm-empty-sharef.fm-empty-pad{ + margin-top:0; + top:0 +} +.not-logged .fm-empty-contacts .fm-empty-button,.not-logged .fm-empty-contacts .fm-empty-description{ + display:none +} +.fm-empty-contacts button{ + margin:0 +} +.fm-empty-cloud-txt{ + color:var(--text-color-high); + font:var(--text-h0); + margin-top:8px +} +.fm-empty-description{ + padding:8px 20px 0 +} +.fm-empty-description,.fm-not-logged-description{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.fm-not-logged-description{ + padding:10px 20px 0 +} +.fm-not-logged-description span{ + color:var(--text-color-success) +} +.fm-empty-public-link-bg{ + background-position:center -3575px; + height:102px +} +.fm-empty-description,.fm-not-logged-description{ + padding:10px 20px 18px; + text-align:center +} +.fm-empty-description.small,.fm-not-logged-description.small{ + color:var(--text-color-medium); + font:var(--text-body1); + padding:1px 20px 29px +} +.fm-empty-options{ + display:flex; + justify-content:center +} +.fm-empty-options .fm-empty-options-item{ + align-items:center; + color:var(--text-color-medium); + display:flex; + flex-direction:column; + font:var(--text-body1); + margin:72px 30px 0; + max-width:192px +} +.fm-empty-options .fm-empty-options-item i{ + --icon-size:48px; + --mask-color:var(--secondary-blue); + margin-bottom:24px +} +.description.footnote-text,.fm-not-logged-description.footnote-text{ + color:var(--text-color-low); + font:var(--text-body2); + margin-top:16px +} +.fm-not-logged-text,.not-logged .empty-share-public{ + display:none +} +.not-logged .fm-not-logged-text{ + display:block +} +.empty-share-public{ + color:var(--text-color-low); + font:var(--text-body1); + padding:18px 0 0 +} +.empty-share-public.loading{ + opacity:.3 +} +.empty-share-public.loading a{ + cursor:default +} +.empty-share-public a{ + text-decoration:underline +} +.empty-share-public span{ + color:var(--text-color-high); + font:var(--text-body1-bold); + vertical-align:middle +} +.empty-share-public i{ + --icon-size:24px; + --mask-color:var(--secondary-blue); + -webkit-margin-end:8px; + display:inline-block; + margin-inline-end:8px; + vertical-align:middle +} +.contacts-content .fm-empty-contacts{ + margin-top:10px +} + +.nw-fm-left-icon.cloud-drive.active:after,.nw-fm-left-icon.gallery.active:after{ + background-color:var(--surface-black); + border-radius:8px; + bottom:0; + content:""; + height:calc(200% + 2px); + left:0; + position:absolute; + width:100%; + z-index:-1 +} +.nw-fm-left-icon.cloud-drive.active:after{ + bottom:auto; + top:0 +} +.gallery-view{ + -webkit-padding-start:4px; + background:var(--surface-grey-1); + box-sizing:border-box; + height:100%; + min-height:280px; + overflow:hidden; + padding-inline-start:4px; + position:relative +} +.rtl .gallery-view{ + direction:rtl +} +.gallery-view-scrolling{ + -webkit-padding-start:1px; + -webkit-padding-end:14px; + box-sizing:border-box; + height:100%; + padding-inline-end:14px; + padding-inline-start:1px; + padding-top:1px +} +.gallery-view .content-block{ + display:grid; + margin:0 auto; + position:relative +} +.gallery-view .content-row{ + position:relative +} +.gallery-view .content-row.template{ + display:none +} +.gallery-view .content{ + margin:4px auto +} +.gallery-view.gallery-type-a.zoom-1 .content{ + max-width:1704px; + min-width:303px +} +.gallery-view.gallery-type-a.zoom-2 .content{ + max-width:2440px; + min-width:505px +} +.gallery-view.gallery-type-a.zoom-3 .content{ + max-width:2420px; + min-width:1010px +} +.gallery-view.gallery-type-a.zoom-4 .content{ + max-width:2430px; + min-width:1020px +} +.gallery-view .showDate .content-block:before,.gallery-view .showMore .content-block:after{ + background:var(--stroke-grey-2-inverted); + border-radius:12px; + color:var(--text-color-higher-inverted); + content:attr(data-date); + left:12px; + padding:2px 12px; + position:absolute; + top:12px; + z-index:4 +} +.rtl .gallery-view .showDate .content-block:before,.rtl .gallery-view .showMore .content-block:after{ + left:auto; + right:12px +} +.gallery-view .showMore .content-block:after{ + bottom:12px; + content:attr(data-more); + left:auto; + right:12px; + top:auto +} +.rtl .gallery-view .showMore .content-block:after{ + left:12px; + right:auto +} +.album-timeline-cell.ui-selected,.gallery-view .content .data-block-view.ui-selected,.gallery-view .content .data-block-view:hover{ + border-radius:2px +} +.gallery-view .gallery-view-scrolling .content .data-block-view:not(.ui-selected):hover{ + z-index:2 +} +.gallery-view .gallery-view-scrolling .content .data-block-view.ui-selected{ + z-index:3 +} +.gallery-view .block-view-file-type{ + top:50% +} +.gallery-view .data-block-bg .block-view-file-type.image,.gallery-view .data-block-bg .block-view-file-type.video{ + --icon-size:calc(var(--block-height, 200px)*0.5); + --mask-color:var(--stroke-grey-1); + background:none; + height:calc(var(--block-height, 200px)*.5); + width:calc(var(--block-height, 200px)*.5) +} +.gallery-view .data-block-bg.thumb .block-view-file-type:before{ + display:none +} +.gallery-view .data-block-bg.thumb .block-view-file-type{ + align-items:center; + display:flex; + justify-content:center; + left:50%; + position:absolute; + top:50%; + transform:translate(-50%, -50%); + width:100% +} +.gallery-view .data-block-view .data-block-bg.thumb img{ + background:var(--image-background); + height:auto; + max-width:100%; + width:auto +} +.gallery-view .content .data-block-view .data-block-bg{ + background:var(--surface-main); + border:none; + border-radius:0; + height:100%; + padding-top:100%; + width:auto +} +.gallery-view .content .data-block-view.ui-selected:after,.gallery-view .content .data-block-view:hover:after{ + border:2px solid var(--stroke-highlight); + border-radius:24px; + box-sizing:border-box; + outline:2px solid var(--stroke-highlight); + outline-offset:-1px +} +.gallery-view .data-block-bg.thumb{ + position:relative +} +.gallery-view .data-block-bg.video .video-thumb-details{ + display:none +} +.gallery-view.gallery-type-a .data-block-view{ + border-radius:0; + margin:4px; + min-width:66px; + width:auto +} +.gallery-view.gallery-type-a.zoom-3 .data-block-view,.gallery-view.gallery-type-a.zoom-4 .data-block-view{ + margin:1px +} +.gallery-view.gallery-type-a .data-block-view:not(.ui-selected):hover{ + box-shadow:0 0 0 2px var(--stroke-grey-2); + transition-duration:.2s +} +.gallery-view.gallery-type-a .data-block-view.ui-selected{ + box-shadow:0 0 0 2px var(--secondary-blue); + transition-duration:.2s +} +.gallery-view.gallery-type-a .data-block-view.ui-selected:after,.gallery-view.gallery-type-a .data-block-view:not(.ui-selected):hover:after{ + border:1px solid var(--stroke-highlight); + border-radius:2px; + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.gallery-view.gallery-type-a .data-block-bg .data-block-fav-icon{ + bottom:4px; + color:var(--secondary-white); + display:none; + left:auto; + position:absolute; + right:4px; + top:auto +} +.gallery-view.gallery-type-a.gallery-type-fav .data-block-bg .data-block-fav-icon{ + display:block +} +.gallery-view.gallery-type-a .data-block-bg.video .video-thumb-details{ + background:var(--surface-highlight-1); + border-radius:12px; + bottom:4px; + display:block; + left:4px; + padding:2px 8px; + right:auto; + top:auto +} +.gallery-view.gallery-type-a.zoom-4 .data-block-bg.video .video-thumb-details{ + font-size:10px; + padding:0 4px +} +.gallery-view.gallery-type-a.zoom-1 .data-block-view{ + max-width:560px +} +.gallery-view.gallery-type-a.zoom-2 .data-block-view{ + max-width:480px +} +.gallery-view.gallery-type-a.zoom-3 .data-block-view{ + max-width:240px +} +.gallery-view.gallery-type-a.zoom-4 .data-block-view{ + max-width:160px +} +.gallery-view.gallery-type-a.zoom-1 .content-block{ + grid-template-columns:repeat(3, 33.33333%) +} +.gallery-view.gallery-type-a.zoom-2 .content-block{ + grid-template-columns:repeat(5, 20%) +} +.gallery-view.gallery-type-a.zoom-3 .content-block{ + grid-template-columns:repeat(10, 10%) +} +.gallery-view.gallery-type-a.zoom-4 .content-block{ + grid-template-columns:repeat(15, 6.66667%) +} +.gallery-view-zoom-control{ + display:none +} +.gallery-view.gallery-type-a .gallery-view-zoom-control{ + display:block; + position:absolute; + right:20px; + top:12px; + z-index:10 +} +.rtl .gallery-view.gallery-type-a .gallery-view-zoom-control{ + left:20px; + right:auto +} +.gallery-view-zoom-control .btn-icon{ + background:var(--stroke-grey-2-inverted); + border-radius:50%; + height:24px; + text-align:center; + width:24px +} +.gallery-view-zoom-control i{ + --icon-size:20px; + --mask-color:var(--text-color-higher-inverted) +} +.gallery-view.gallery-type-d .showDate .content-block:before{ + background:transparent; + color:var(--text-color-high); + font:var(--text-h2); + left:24px; + padding:0; + top:20px; + z-index:4 +} +.theme-dark .gallery-view.gallery-type-d .showDate .content-block:before{ + text-shadow:0 1px 2px rgba(0, 0, 0, .3) +} +.rtl .gallery-view.gallery-type-d .showDate .content-block:before{ + left:auto; + right:24px +} +.gallery-view.gallery-type-d .data-block-view{ + border-radius:0; + margin:1px; + width:auto +} +.gallery-view.gallery-type-d .data-block-view:not(.ui-selected):hover{ + border-width:1px; + box-shadow:0 0 0 2px var(--stroke-grey-2); + transition-duration:.2s +} +.gallery-view.gallery-type-d .data-block-view.ui-selected{ + border-width:1px; + box-shadow:0 0 0 2px var(--secondary-blue); + transition-duration:.2s +} +.gallery-view.gallery-type-d .showDate .data-block-view:after{ + background:linear-gradient(180deg, var(--surface-inner-shadow) 0, transparent 84px); + border-radius:0; + border-width:1px; + content:""; + height:100%; + left:0; + position:absolute; + right:0; + top:0 +} +.gallery-view.gallery-type-d .content-row .content-block{ + align-items:stretch; + max-width:820px; + min-width:620px +} +.gallery-view.gallery-type-d .content-row.layout-1 .content-block{ + grid-template-columns:62.90323% +} +.gallery-view.gallery-type-d .content-row.layout-2 .content-block{ + grid-template-columns:50% 50% +} +.gallery-view.gallery-type-d .content-row.layout-3 .content-block{ + grid-template-columns:62.90323% 37.09677%; + grid-template-rows:50% 50% +} +.gallery-view.gallery-type-d .content-row.layout-3-2 .content-block{ + grid-template-columns:37.09677% 62.90323%; + grid-template-rows:50% 50% +} +.gallery-view.gallery-type-d .content-row.layout-4 .content-block{ + grid-template-columns:62.90323% 18.54839% 18.54839%; + grid-template-rows:62.90323% 37.09677% +} +.gallery-view.gallery-type-d .content-row.layout-1 .data-block-view:first-child{ + z-index:3 +} +.gallery-view.gallery-type-d .content-row.layout-1 .data-block-view.ui-selected:first-child,.gallery-view.gallery-type-d .content-row.layout-1 .data-block-view:hover:first-child{ + border-right-color:var(--stroke-grey-1) +} +.gallery-view.gallery-type-d .content-row.layout-1 .gallery-block-bg-wrap{ + height:calc(100% - 2px); + left:1px; + overflow:hidden; + position:absolute; + top:1px; + width:calc(100% - 2px); + z-index:0 +} +.gallery-view.gallery-type-d .content-row.layout-1 .gallery-block-bg{ + filter:blur(10px); + opacity:.5; + position:relative; + top:50%; + transform:translateY(-50%); + width:100% +} +.gallery-view.gallery-type-d .content-row.layout-3 .data-block-view:first-child{ + grid-column:1; + grid-row:1 / 3 +} +.gallery-view.gallery-type-d .content-row.layout-3 .data-block-view:nth-child(2){ + grid-column:2; + grid-row:1 +} +.gallery-view.gallery-type-d .content-row.layout-3 .data-block-view:nth-child(3){ + grid-column:2; + grid-row:2 +} +.gallery-view.gallery-type-d .content-row.layout-3-2 .data-block-view:first-child{ + grid-column:1; + grid-row:1 +} +.gallery-view.gallery-type-d .content-row.layout-3-2 .data-block-view:nth-child(2){ + grid-column:1; + grid-row:2 +} +.gallery-view.gallery-type-d .content-row.layout-3-2 .data-block-view:nth-child(3){ + grid-column:2; + grid-row:1 / 3 +} +.gallery-view.gallery-type-d .content-row.layout-4 .data-block-view:first-child{ + grid-column:1; + grid-row:1 / 3 +} +.gallery-view.gallery-type-d .content-row.layout-4 .data-block-view:nth-child(2){ + grid-column:2 / 4; + grid-row:1 +} +.gallery-view.gallery-type-d .content-row.layout-4 .data-block-view:nth-child(3){ + grid-column:2; + grid-row:2 +} +.gallery-view.gallery-type-d .content-row.layout-4 .data-block-view:nth-child(4){ + grid-column:3; + grid-row:2 +} +.gallery-view.gallery-type-d .data-block-bg{ + height:100%; + top:0 +} +.gallery-view.gallery-type-d .content-row.layout-3 .data-block-view:nth-child(2) .data-block-bg,.gallery-view.gallery-type-d .content-row.layout-3 .data-block-view:nth-child(3) .data-block-bg,.gallery-view.gallery-type-d .content-row.layout-3-2 .data-block-view:first-child .data-block-bg,.gallery-view.gallery-type-d .content-row.layout-3-2 .data-block-view:nth-child(2) .data-block-bg{ + padding-top:67.10526% +} +.gallery-view.gallery-type-d .content-row.layout-4 .data-block-view:nth-child(2) .data-block-bg{ + padding-top:82.45614% +} +.gallery-view.gallery-type-d .content-row.layout-1 .data-block-view .data-block-bg,.gallery-view.gallery-type-d .content-row.layout-3 .data-block-view:first-child .data-block-bg,.gallery-view.gallery-type-d .content-row.layout-3-2 .data-block-view:nth-child(3) .data-block-bg,.gallery-view.gallery-type-d .content-row.layout-4 .data-block-view:first-child .data-block-bg{ + padding-top:79.38144% +} +.gallery-view.gallery-type-m .gallery-date-block{ + -webkit-padding-start:24px; + background:transparent; + box-sizing:border-box; + color:var(--text-color-high); + display:block; + font:var(--text-h1); + line-height:48px; + margin:0 auto; + max-width:820px; + min-width:620px; + padding-inline-start:24px +} +.gallery-view.gallery-type-m .gallery-date-block span{ + color:var(--secondary-blue) +} +.gallery-view.gallery-type-m .gallery-date-block i{ + --icon-size:24px; + margin-top:-6px; + vertical-align:middle +} +.gallery-view.gallery-type-m .data-block-view:before{ + background:transparent; + color:var(--text-color-high); + content:attr(data-date); + font:var(--text-h2); + left:24px; + padding:0; + position:absolute; + top:20px; + z-index:3 +} +.theme-dark .gallery-view.gallery-type-m .data-block-view:before{ + text-shadow:0 1px 2px rgba(0, 0, 0, .3) +} +.rtl .gallery-view.gallery-type-m .data-block-view:before{ + left:auto; + right:24px +} +.gallery-view.gallery-type-m .data-block-view:after{ + background:linear-gradient(180deg, var(--surface-inner-shadow) 0, transparent 84px); + content:""; + height:100%; + left:0; + position:absolute; + right:0; + top:0 +} +.gallery-view.gallery-type-m .data-block-view{ + border-radius:24px; + margin:0; + width:auto +} +.gallery-view.gallery-type-m .gallery-view-scrolling .content .data-block-view.ui-selected,.gallery-view.gallery-type-m .gallery-view-scrolling .content .data-block-view:hover{ + border-radius:24px +} +.gallery-view.gallery-type-m .content-row{ + padding-top:16px +} +.gallery-view.gallery-type-m .content-row .content-block{ + grid-gap:20px; + align-items:stretch; + max-width:820px; + min-width:620px +} +.gallery-view.gallery-type-m .content-row.layout-1 .content-block,.gallery-view.gallery-type-m .content-row.layout-2 .content-block{ + grid-template-columns:calc(50% - 10px) calc(50% - 10px) +} +.gallery-view.gallery-type-m .content-row.layout-3 .content-block{ + grid-template-columns:61.29032% 35.48387%; + grid-template-rows:calc(50% - 10px) calc(50% - 10px) +} +.gallery-view.gallery-type-m .content-row.layout-3-2 .content-block{ + grid-template-columns:35.48387% 61.29032%; + grid-template-rows:calc(50% - 10px) calc(50% - 10px) +} +.gallery-view.gallery-type-m .content-row.layout-4 .content-block{ + grid-template-columns:calc(50% - 10px) calc(50% - 10px); + grid-template-rows:calc(50% - 10px) calc(50% - 10px) +} +.gallery-view.gallery-type-m .content-row.layout-3 .data-block-view:first-child{ + grid-column:1; + grid-row:1 / 3 +} +.gallery-view.gallery-type-m .content-row.layout-3 .data-block-view:nth-child(2){ + grid-column:2; + grid-row:1 +} +.gallery-view.gallery-type-m .content-row.layout-3 .data-block-view:nth-child(3){ + grid-column:2; + grid-row:2 +} +.gallery-view.gallery-type-m .content-row.layout-3-2 .data-block-view:first-child{ + grid-column:1; + grid-row:1 +} +.gallery-view.gallery-type-m .content-row.layout-3-2 .data-block-view:nth-child(2){ + grid-column:1; + grid-row:2 +} +.gallery-view.gallery-type-m .content-row.layout-3-2 .data-block-view:nth-child(3){ + grid-column:2; + grid-row:1 / 3 +} +.gallery-view.gallery-type-m .content-row.layout-4 .data-block-view:first-child{ + grid-column:1; + grid-row:1 +} +.gallery-view.gallery-type-m .content-row.layout-4 .data-block-view:nth-child(2){ + grid-column:2; + grid-row:1 +} +.gallery-view.gallery-type-m .content-row.layout-4 .data-block-view:nth-child(3){ + grid-column:1; + grid-row:2 +} +.gallery-view.gallery-type-m .content-row.layout-4 .data-block-view:nth-child(4){ + grid-column:2; + grid-row:2 +} +.gallery-view.gallery-type-a .data-block-bg{ + height:100%; + top:0 +} +.gallery-view.gallery-type-m .content-row.layout-3 .data-block-view:nth-child(2) .data-block-bg,.gallery-view.gallery-type-m .content-row.layout-3 .data-block-view:nth-child(3) .data-block-bg,.gallery-view.gallery-type-m .content-row.layout-3-2 .data-block-view:first-child .data-block-bg,.gallery-view.gallery-type-m .content-row.layout-3-2 .data-block-view:nth-child(2) .data-block-bg{ + padding-top:81.81818% +} +.gallery-view.gallery-type-m .content-row.layout-4 .data-block-view .data-block-bg{ + padding-top:66.66667% +} +.gallery-view.gallery-type-y .data-block-view:before{ + background:transparent; + color:var(--text-color-high); + content:attr(data-date); + font:var(--text-h0-bold); + left:24px; + padding:0; + position:absolute; + top:20px; + z-index:3 +} +.theme-dark .gallery-view.gallery-type-y .data-block-view:before{ + text-shadow:0 1px 2px rgba(0, 0, 0, .3) +} +.rtl .gallery-view.gallery-type-y .data-block-view:before{ + left:auto; + right:24px +} +.gallery-view.gallery-type-y .data-block-view:after{ + background:linear-gradient(180deg, var(--surface-inner-shadow) 0, transparent 84px); + content:""; + height:100%; + left:0; + position:absolute; + right:0; + top:0 +} +.gallery-view.gallery-type-y .data-block-view{ + border-radius:24px; + margin:0; + width:auto +} +.gallery-view.gallery-type-y .gallery-view-scrolling .content .data-block-view.ui-selected,.gallery-view.gallery-type-y .gallery-view-scrolling .content .data-block-view:hover{ + border-radius:24px +} +.gallery-view.gallery-type-y .data-block-view.ui-selected .data-block-bg{ + border:none +} +.gallery-view.gallery-type-y .content-row{ + padding-top:16px +} +.gallery-view.gallery-type-y .content-row .content-block{ + grid-gap:20px; + align-items:stretch; + grid-template-columns:calc(50% - 10px) calc(50% - 10px); + max-width:820px; + min-width:620px +} +.mega-button.action.gallery-close-discovery{ + -webkit-padding-end:8px; + padding-inline-end:8px; + position:relative; + top:-4px +} +.gallery-close-discovery i{ + --mask-color:var(--secondary-red) +} +.gallery-close-discovery span{ + white-space:nowrap +} +.btn-galleries.js-lpbtn.favourites.active i,.gallery-tabs-bl .gallery-section-title .sprite-fm-mono.icon-favourite-filled{ + --mask-color:var(--secondary-red) +} +.gallery-view .data-block-fav-icon{ + display:none +} +.js-lp-gallery.lp-gallery{ + overflow-y:auto +} +#albums-view{ + background:var(--surface-grey-1); + height:100%; + min-height:280px; + overflow:hidden +} +.albums-header{ + background-color:var(--surface-main); + height:49px; + padding-left:21px; + padding-right:21px +} +.albums-grid{ + grid-gap:1.25rem; + box-sizing:border-box; + display:grid; + height:calc(100vh - 97px); + overflow:hidden; + padding:2.1rem 0 +} +.albums-grid .albums-grid-cell.album-placeholder>div i{ + --mask-color:var(--secondary-grey); + margin-top:2.2rem +} +.albums-grid:not(.albums-grid-3-col) .albums-grid-cell.album-placeholder>div i{ + --icon-size:120px +} +.albums-grid:not(.albums-grid-3-col) .albums-grid-cell .album-label{ + font:700 var(--text-h2) +} +.albums-grid:not(.albums-grid-3-col) .albums-grid-cell{ + height:300px +} +.albums-grid.albums-grid-3-col .albums-grid-cell{ + height:200px +} +.albums-grid.albums-grid-3-col .albums-grid-cell .album-label{ + font:700 var(--text-h3) +} +.albums-grid.albums-grid-3-col .albums-grid-cell.album-placeholder>div i{ + --icon-size:72px +} +.albums-grid.album-content-grid{ + grid-template-columns:1fr; + grid-template-rows:1fr; + padding:0; + position:relative +} +.albums-grid-cell{ + background-position:50%; + background-repeat:no-repeat; + background-size:cover; + border-radius:24px; + overflow:hidden; + transition:background-color .1s ease-in-out,box-shadow .1s ease-in-out; + transition-duration:.2s +} +.album-timeline-cell.ui-selected,.albums-grid-cell.ui-selected{ + box-shadow:0 0 0 2px var(--secondary-blue); + transition-duration:.2s +} +.albums-grid-cell.album-placeholder{ + background-color:var(--surface-grey-2) +} +.albums-grid-cell>div:not(.flex-row){ + background:linear-gradient(180deg, rgba(34, 34, 34, 0), rgba(34, 34, 34, .6)); + color:var(--text-color-white-high); + padding:20px 24px; + text-shadow:0 1px 1px rgba(0, 0, 0, .3) +} +.albums-grid-cell.album-placeholder>div{ + background:none; + color:var(--text-color-high); + text-shadow:none +} +.albums-tree-list{ + height:0; + overflow-y:hidden +} +.js-lp-gallery .btn-galleries.expansion-btn-open+.albums-tree-list{ + height:auto; + overflow:visible +} +.js-lp-gallery .btn-galleries:not(.expansion-btn):not(.subalbum-btn){ + padding-left:1.5rem +} +.js-lp-gallery .subalbum-btn{ + margin-right:.5rem; + min-width:100%; + padding-left:2.5rem; + padding-right:2.5rem; + width:auto +} +.js-lp-gallery .btn-galleries.expansion-btn{ + padding-inline-start:1.5rem; + position:relative +} +.js-lp-gallery .btn-galleries.expansion-btn:not(.expansion-btn-open) .icon-dropdown{ + transform:rotate(270deg) +} +.js-lp-gallery .btn-galleries.expansion-btn i.icon-dropdown{ + left:2px; + margin-top:4px; + position:absolute +} +.create-album-input-bl+div{ + display:block +} +.create-album-input-bl i.icon-album{ + --mask-color:var(--text-color-medium) +} +.create-album-input-bl:focus-within,.create-album-input-bl:hover{ + border:1px solid var(--secondary-blue) +} +.empty-albums-title{ + font-weight:700 +} +.empty-albums-title+.mega-button{ + margin-top:2.3rem +} +.album-timeline-main{ + box-sizing:border-box; + position:relative +} +.album-timeline-dialog{ + box-sizing:border-box; + height:460px +} +.album-timeline{ + grid-gap:.5rem; + background:var(--surface-grey-1); + display:grid +} +.album-items-dialog{ + width:720px +} +.album-items-dialog>section>div{ + background:var(--surface-grey-1) +} +.album-items-dialog .m-tabs{ + background-color:var(--surface-main) +} +.album-timeline-cell{ + background-position:50%; + background-repeat:no-repeat; + background-size:cover; + margin:4px; + position:relative +} +.album-timeline-cell.show-date:before,.album-timeline-cell.show-video-duration:after{ + background:var(--stroke-grey-2); + border-radius:12px; + color:var(--text-color-higher); + left:.25rem; + padding:.125rem .625rem; + position:absolute; + white-space:nowrap; + z-index:5 +} +.album-timeline-cell.show-date:before{ + content:attr(data-date); + font-weight:700; + top:.25rem +} +.album-timeline-cell.show-video-duration:after{ + bottom:.25rem; + content:attr(data-video-duration) +} +.album-timeline-cell.ui-selected i.icon-check-circle{ + --mask-color:var(--secondary-blue); + background-color:var(--text-color-white-high); + border-radius:1rem; + height:1.25rem; + left:.25rem; + position:absolute; + top:.25rem; + width:1.25rem; + z-index:4 +} +.album-timeline-cell.ui-selected i.icon-check-circle:before{ + left:-.125rem; + position:relative; + top:-.125rem +} +.album-timeline-cell.show-date i.icon-check-circle{ + display:none +} +.locations-dialog-nav,.timeline-location{ + margin-left:-.25rem; + width:calc(100% + .5rem) +} +.empty-albums-section i{ + --icon-size:192px +} +.album-content-grid .gallery-view-zoom-control{ + gap:.25rem; + display:flex; + position:absolute; + right:1.25rem; + top:.75rem; + z-index:10 +} +.lp-gallery .btn-galleries{ + overflow:visible +} +.sidebar-button-iconwrap{ + display:inline-block; + width:30px +} +.icon-next-arrow.rot-180:before{ + transform:rotate(180deg) +} +.breadcrumb-btn{ + box-shadow:none; + min-width:0 +} +.breadcrumb-btn i{ + --mask-color:#979797 +} +.albums-header .mega-button span{ + display:block; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.timeline-location{ + background:var(--surface-main); + margin-top:-1rem; + padding-bottom:26px +} + +#ob-dialog{ + background:var(--label-blue); + max-width:450px +} +#ob-dialog,#ob-dialog .mega-button.action,#ob-dialog header div>*{ + --mask-color:var(--text-color-white-high); + color:var(--text-color-white-high) +} +#ob-dialog header h2{ + text-align:start +} +#ob-dialog-arrow{ + --mask-color:var(--label-blue); + --icon-size:24px; + height:16px; + position:absolute +} +#ob-dialog-arrow.right{ + right:-12px; + top:calc(50% - 12px); + transform:rotate(270deg) +} +#ob-dialog-arrow.left{ + left:-12px; + top:calc(50% - 12px); + transform:rotate(90deg) +} +#ob-dialog-arrow.top{ + left:calc(50% - 12px); + top:-8px; + transform:rotate(180deg) +} +#ob-dialog-arrow.bottom{ + bottom:-8px; + left:calc(50% - 12px) +} +#ob-dialog-arrow.top-left{ + left:48px; + top:-8px; + transform:rotate(180deg) +} +#ob-dialog .link-button{ + color:var(--text-color-white-high); + margin-right:auto; + min-width:80px +} +.rtl #ob-dialog .link-button{ + margin-left:auto; + margin-right:0 +} +.context .onboarding-highlight-dot,.context .onboarding-highlight-dot:after,.context .onboarding-highlight-dot:before,.nw-fm-left-icon.conversations .onboarding-highlight-dot,.nw-fm-left-icon.conversations .onboarding-highlight-dot:after,.nw-fm-left-icon.conversations .onboarding-highlight-dot:before{ + background:var(--label-blue); + border-radius:100%; + content:""; + height:10px; + position:absolute; + right:8px; + top:calc(50% - 5px); + width:10px +} +.rtl .context .onboarding-highlight-dot{ + left:8px; + right:auto +} +.context .onboarding-highlight-dot:after,.context .onboarding-highlight-dot:before,.nw-fm-left-icon.conversations .onboarding-highlight-dot:after,.nw-fm-left-icon.conversations .onboarding-highlight-dot:before{ + animation:onboarding-hotspot-circle 1.5s linear infinite; + background:radial-gradient(circle, transparent 40%, var(--label-blue) calc(100% - 2px), var(--label-blue) 100%); + left:0; + right:0; + top:0 +} +.context .onboarding-highlight-dot:after{ + animation-delay:.5s +} +#ob-dialog.mcob{ + z-index:121 +} +.overlayed #ob-dialog.mcob{ + visibility:hidden +} +.in-call #ob-dialog.mcob{ + display:none +} +#ob-dialog.mcob header{ + -webkit-padding-end:24px; + padding-inline-end:24px +} +#ob-dialog.mcob #ob-dialog-title{ + font:var(--text-h2-bold) +} +#ob-dialog.mcob #ob-dialog-text{ + font:var(--text-body1) +} +@keyframes onboarding-hotspot-rect{ +0%{ + box-shadow:0 0 0 0 var(--label-blue); + opacity:.8 +} +70%{ + box-shadow:0 0 0 12px var(--label-blue); + opacity:0 +} +to{ + box-shadow:0 0 0 0 var(--label-blue); + opacity:0 +} +} +@keyframes onboarding-hotspot-rect-2{ +0%{ + box-shadow:0 0 0 0 var(--label-blue); + opacity:1 +} +70%{ + box-shadow:0 0 0 12px var(--label-blue); + opacity:0 +} +to{ + box-shadow:0 0 0 0 var(--label-blue); + opacity:0 +} +} +@keyframes onboarding-hotspot-circle{ +0%{ + opacity:1; + transform:scale(1) +} +20%{ + opacity:1 +} +70%{ + opacity:0; + transform:scale(2) +} +to{ + opacity:0; + transform:scale(2) +} +} +.button.onboarding-hotspot-animation-rect:after,.button.onboarding-hotspot-animation-rect:before,.onboarding-control-panel .onboarding-step-link.hotspot:after,.onboarding-control-panel .onboarding-step-link.hotspot:before{ + animation:onboarding-hotspot-rect 1.4s linear infinite; + border-radius:4px; + content:""; + height:100%; + left:0; + position:absolute; + width:100% +} +.fm-uploads.button.onboarding-hotspot-animation-rect:after,.fm-uploads.button.onboarding-hotspot-animation-rect:before{ + height:calc(100% - 6px); + top:3px +} +.button.onboarding-hotspot-animation-rect:after,.onboarding-control-panel .onboarding-step-link.hotspot:after{ + animation-delay:.4s; + animation-name:onboarding-hotspot-rect-2; + left:0 +} +.onboarding-control-panel{ + border-radius:12px; + box-shadow:inset 0 0 0 2px var(--table-border); + margin:8px 24px; + position:relative +} +.rtl .onboarding-control-panel{ + direction:rtl +} +.onboarding-control-panel .onboarding-control-panel-content{ + align-items:center; + background:var(--surface-grey-1); + border-radius:12px; + display:flex; + height:100%; + overflow:hidden; + position:relative +} +.onboarding-control-panel .mega-button.close{ + position:absolute; + right:15px; + top:15px +} +.rtl .onboarding-control-panel .mega-button.close{ + left:15px; + right:auto +} +.onboarding-control-panel .onboarding-control-panel-title{ + -webkit-margin-start:24px; + align-items:center; + color:var(--text-color-high); + display:flex; + flex-grow:0; + flex-shrink:0; + font:var(--text-h3-bold); + height:80px; + margin-inline-start:24px; + position:relative; + text-align:start; + width:calc(30% - 55px) +} +.onboarding-control-panel-title-bg,.onboarding-control-panel-title-bg:after{ + background-image:var(--onboarding-control-panel-fill); + background-position:100%; + background-repeat:no-repeat; + background-size:contain; + content:""; + height:100%; + position:absolute; + width:100%; + z-index:0 +} +.onboarding-control-panel-title-bg{ + left:-15px; + overflow:hidden; + transform:skew(-20deg); + width:30% +} +.rtl .onboarding-control-panel-title-bg{ + left:auto; + right:-15px; + transform:skew(20deg) scaleX(-1) +} +.onboarding-control-panel-title-bg:after{ + background-image:url(../imagery/mega-achievements-header_backdrop.a288c18a7aecfa95.svg); + right:-5px; + transform:skewX(20deg) +} +.rtl .onboarding-control-panel-title-bg:after{ + right:-15px; + transform:skewX(20deg) +} +.onboarding-control-panel .onboarding-control-panel-step{ + -webkit-margin-end:36px; + -webkit-margin-start:30px; + align-items:center; + display:flex; + height:100%; + margin-inline-end:36px; + margin-inline-start:30px; + position:relative; + text-align:start; + vertical-align:middle; + width:70% +} +.onboarding-control-panel .onboarding-step-link{ + margin:0 12px; + min-height:32px; + overflow:visible; + padding:0 var(--outer-padding); + z-index:2 +} +.onboarding-control-panel .onboarding-step-link.complete{ + cursor:default +} +.onboarding-control-panel .onboarding-step-link .onboarding-step{ + --width:24px; + --height:24px; + border-radius:100%; + font-style:normal; + position:relative +} +.onboarding-control-panel .onboarding-step-link.active .onboarding-step,.onboarding-control-panel .onboarding-step-link.complete .onboarding-step{ + background:var(--button-fill-blue); + border:none; + box-shadow:none; + color:var(--text-color-white-high); + position:relative +} +.onboarding-control-panel .onboarding-step-link.active .onboarding-step:before{ + border:2px solid var(--label-blue); + border-radius:50%; + content:""; + height:28px; + position:absolute; + width:28px +} +.onboarding-control-panel .onboarding-step-link:not(.active):not(.complete):hover .onboarding-step{ + background:var(--neutral-hover) +} +.onboarding-control-panel .onboarding-step-link.complete .onboarding-step{ + cursor:default +} +.onboarding-control-panel .onboarding-step-link.complete .onboarding-step .onboarding-step-count,.onboarding-control-panel .onboarding-step-link .onboarding-step-complete-icon{ + display:none +} +.onboarding-control-panel .onboarding-step-link.complete .onboarding-step-complete-icon{ + --mask-color:var(--text-color-white-high); + --icon-size:16px; + display:block +} +.onboarding-control-panel .onboarding-step-link span{ + display:inline; + font:var(--text-body1); + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.onboarding-control-panel .onboarding-step-link.complete span{ + color:var(--text-color-low) +} +.onboarding-control-panel .onboarding-control-panel-complete,.onboarding-control-panel .onboarding-control-panel-dismiss{ + align-items:center; + color:var(--text-color-high); + display:flex; + font:var(--text-body1); + min-height:80px +} +.onboarding-control-panel .onboarding-control-panel-complete *,.onboarding-control-panel .onboarding-control-panel-dismiss *{ + display:inline-block; + vertical-align:middle +} +.onboarding-control-panel .onboarding-control-panel-complete .mega-button,.onboarding-control-panel .onboarding-control-panel-dismiss .mega-button{ + -webkit-margin-start:8px; + -webkit-margin-end:0; + flex:0 0 auto; + margin-inline-end:0; + margin-inline-start:8px +} +.onboarding-control-panel .onboarding-control-panel-complete .question-content,.onboarding-control-panel .onboarding-control-panel-dismiss .question-content{ + -webkit-margin-start:10px; + -webkit-margin-end:auto; + font:var(--text-body1); + margin-inline-end:auto; + margin-inline-start:10px +} +.onboarding-control-panel .onboarding-control-panel-dismiss{ + background:var(--surface-grey-1); + border-radius:12px; + padding:0 24px +} +.onboarding-control-panel .onboarding-control-panel-complete{ + background:var(--label-blue); + border-radius:8px; + color:var(--text-color-white-high); + height:auto; + margin:0; + min-height:56px +} +.onboarding-control-panel .onboarding-control-panel-complete i{ + --mask-color:var(--text-color-white-high) +} +.onboarding-control-panel .onboarding-control-panel-complete .icon-accept{ + -webkit-margin-start:17px; + -webkit-margin-end:0; + flex:0 0 auto; + margin-inline-end:0; + margin-inline-start:17px +} +.onboarding-control-panel .onboarding-control-panel-complete .question-content{ + -webkit-margin-start:13px; + -webkit-margin-end:36px; + font:var(--text-h3-bold); + margin-inline-end:36px; + margin-inline-start:13px; + vertical-align:middle +} +.onboarding-control-panel .onboarding-control-panel-complete .question-content a,.onboarding-control-panel .onboarding-control-panel-complete .question-content a:active,.onboarding-control-panel .onboarding-control-panel-complete .question-content a:visited{ + color:var(--text-color-white-high); + font:var(--text-body1); + text-decoration:underline; + vertical-align:middle +} +.nw-fm-left-icon.conversations .onboarding-highlight-dot+.onboarding-mc-nv{ + background:var(--surface-main); + border-radius:20px; + box-shadow:var(--dialog-shadow); + box-sizing:border-box; + display:none; + left:56px; + max-width:316px; + padding:24px; + position:relative; + top:-32px; + width:316px +} +.nw-fm-left-icon.conversations.w-onboard .onboarding-highlight-dot+.onboarding-mc-nv:hover,.nw-fm-left-icon.conversations.w-onboard:hover .onboarding-highlight-dot+.onboarding-mc-nv{ + display:block +} +.nw-fm-left-icon.conversations .onboarding-mc-nv div{ + color:var(--text-color-high); + font:var(--text-h3-bold); + margin:16px 0 8px +} +.nw-fm-left-icon.conversations .onboarding-mc-nv span{ + color:var(--text-color-medium); + font:var(--text-body2) +} +.nw-fm-left-icon.conversations .onboarding-mc-nv img{ + max-width:100% +} +.nw-fm-left-icon.conversations .onboarding-mc-nv i{ + --icon-size:24px; + --mask-color:var(--stroke-main); + height:16px; + left:-12px; + position:absolute; + top:48px; + transform:rotate(90deg) +} +@media only screen and (max-width:1100px){ +.onboarding-control-panel-title-bg{ + display:none +} +.onboarding-control-panel .onboarding-control-panel-content{ + flex-wrap:wrap; + height:auto +} +.onboarding-control-panel .onboarding-control-panel-title{ + height:auto; + margin-bottom:18px; + margin-top:24px; + width:auto +} +.onboarding-control-panel .onboarding-control-panel-step{ + -webkit-margin-start:6px; + margin-bottom:24px; + margin-inline-start:6px; + width:100% +} +} + +.bottom-page.download{ + background-color:var(--surface-main); + height:100% +} +.download.main-pad{ + border-radius:12px; + height:calc(100% - 40px); + margin:40px auto 0; + max-width:80%; + overflow:hidden; + position:relative; + text-align:start; + width:100% +} +.global-error .download.main-pad,.global-error .download.main-pad:before{ + display:none +} +.download.download-page.video-theatre-mode.video .download.main-pad{ + border-radius:0; + margin:0; + max-width:100%; + width:100% +} +.video-theatre-mode .download.main-pad{ + border-radius:0; + box-shadow:none; + display:block; + height:100%; + width:100% +} +.video-theatre-mode .download.main-pad:before{ + display:none +} +.download .dark-numbers{ + -webkit-padding-end:4px; + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body1); + height:20px; + padding-inline-end:4px; + vertical-align:middle +} +.download .dark-numbers span{ + color:var(--text-color-medium); + padding:0 2px +} +.download .dark-numbers:empty{ + padding:0 +} +.download .light-txt{ + color:var(--text-color-medium); + display:inline-block; + font:var(--text-h3); + vertical-align:top +} +.download .light-txt.small{ + font:var(--text-body1) +} +.download.eta-block,.download.speed-block{ + box-sizing:border-box; + font-size:0; + line-height:0 +} +.download.complete-block{ + display:none; + font-size:0; + line-height:0; + padding:6px 0; + text-align:left +} +.download.complete-block span{ + color:var(--text-color-success); + display:inline-block; + font:var(--text-body1); + vertical-align:top +} +.download.complete-block i{ + --icon-size:24px; + color:var(--stroke-success); + margin:0 5px 0 -3px +} +.transfer-wrapper .download.eta-block i{ + --icon-size:24px; + margin:-2px 7px 0 0; + vertical-align:top +} +.download.speed-block{ + display:block; + margin:0 24px; + padding:0; + text-align:end +} +button.small i.folder-with-loupe{ + margin:4px 5px 1px 1px; + opacity:.7 +} +.download.speed-block i{ + --icon-size:16px; + color:var(--stroke-success); + margin:1px 4px 0 0 +} +.download.speed-block span{ + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body2); + vertical-align:top +} +.download.info-block{ + display:flex; + flex-direction:column; + padding-top:4px; + position:relative +} +.download.download-page:not(.image,.txtfile,.video) .download.info-block{ + height:100% +} +.download.transfer-buttons{ + text-align:end; + white-space:nowrap +} +.download.main-transfer-info{ + align-items:center; + display:flex +} +.download-complete .progress-cell .mid-pause{ + cursor:default; + opacity:.7 +} +.download.error-text,.download.state-text{ + display:flex; + font-size:0; + padding:6px 0; + position:relative +} +.download.error-text span{ + color:var(--text-color-error) +} +.download.error-text span,.download.state-text span{ + display:inline-block; + font:var(--text-body1); + vertical-align:top +} +.download.save-text span{ + color:var(--text-color-success) +} +.download.error-text i,.download.state-text i{ + -webkit-margin-start:-3px; + -webkit-margin-end:5px; + --icon-size:24px; + color:var(--stroke-error); + margin-bottom:0; + margin-inline-end:5px; + margin-inline-start:-3px; + margin-top:-2px +} +.download.state-text.save i{ + position:absolute +} +.download.state-text.save span{ + padding-left:24px +} +.download.overquoata-error:not(.hidden){ + align-items:center; + display:flex; + font-size:0; + height:28px; + padding:4px 0 +} +.download.overquoata-error:not(.hidden)+button{ + -webkit-margin-start:12px; + margin-inline-start:12px +} +.download.overquoata-error span{ + color:var(--text-color-error); + display:inline-block; + font-size:14px; + line-height:24px; + vertical-align:top +} +.download.overquoata-error i{ + -webkit-margin-end:8px; + --icon-size:24px; + --mask-color:var(--text-color-error); + margin-inline-end:8px +} +.download.state-text{ + border-radius:4px; + color:var(--text-color-high); + margin:0 8px 8px; + padding:2px +} +.download.state-text span{ + display:inline-block; + margin:auto +} +.download.state-text.save{ + background-color:var(--banner-background-success); + border:1px solid var(--banner-border-success); + color:var(--banner-text-success) +} +.download.state-text.resume{ + background-color:var(--banner-background-warning); + border:1px solid var(--banner-border-warning); + color:var(--banner-text-warning) +} +.download.download-page .download.warning-block{ + background-color:#333; + border-radius:12px; + bottom:78px; + box-shadow:var(--dialog-shadow); + color:#fafafa; + left:50%; + max-width:768px; + min-width:768px; + opacity:0; + overflow:visible; + padding:15px 20px 15px 15px; + position:fixed; + transform:translate(-50%, 20px); + transition:visibility .2s ease-in-out,margin-bottom .2s ease-in-out; + visibility:hidden; + z-index:100 +} +.download.download-page .download.warning-block:before{ + border-radius:inherit; + box-shadow:inset 0 0 0 1px hsla(0, 0%, 100%, .4); + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.download.download-page .download.warning-block.visible{ + animation:seconds 1s forwards; + display:table +} +.download.download-page .download.warning-block .content-wrapper{ + gap:12px; + align-items:center; + display:flex +} +.download.download-page .download.warning-block .content-wrapper .content{ + flex-grow:1 +} +.download.warning-block .mega-button span{ + white-space:nowrap +} +.download.warning-block .content a,.download.warning-block .content a:active,.download.warning-block .content a:link,.download.warning-block .content a:visited{ + color:inherit; + position:relative; + text-decoration:underline +} +.download.warning-block .content a:hover{ + text-decoration:none +} +.download.warning-block .fm-dialog-close{ + background-color:#fff; + background-position:-133px -5348px; + border-radius:100%; + box-shadow:0 1px 4px 0 rgba(0, 0, 0, .1); + height:28px; + opacity:.9; + right:-8px; + top:-8px; + width:28px +} +.download.warning-block .fm-dialog-close:before{ + border-radius:100%; + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + display:block; + height:100%; + width:100% +} +.download.warning-block .fm-dialog-close:hover{ + opacity:1 +} +@-webkit-keyframes seconds{ +0%{ + margin-bottom:-384px; + opacity:0; + visibility:hidden +} +to{ + margin-bottom:0; + opacity:1; + visibility:visible +} +} +@keyframes seconds{ +0%{ + margin-bottom:-384px; + opacity:0; + visibility:hidden +} +to{ + margin-bottom:0; + opacity:1; + visibility:visible +} +} +.download .block-view-file-type{ + left:50%; + margin:0; + top:50% +} +.download .file-type-wrapper{ + align-items:center; + background-color:var(--surface-grey-6); + border-radius:8px; + display:flex; + flex-grow:1; + height:261px; + justify-content:center; + margin:auto auto 4px; + overflow:hidden; + position:relative; + width:calc(100% - 8px) +} +.download .thumb .file-type-wrapper{ + display:none +} +.download.info-txt.big-txt{ + font-size:0; + line-height:0 +} +.download.info-block .file-type-wrapper.clickable{ + cursor:pointer +} +.download.buttons-block:empty,.download.transfer-buttons:empty{ + display:none +} +.download.progress-block{ + background-color:var(--progress-bar-background); + border-radius:4px; + height:4px; + margin:8px 0 0; + overflow:hidden +} +.download.progress-bar{ + background-color:var(--secondary-green); + height:4px; + width:0 +} +.download.error-title{ + color:var(--secondary-red); + font:var(--text-h3); + margin:0 0 10px; + text-align:left +} +.download.icon-error{ + --icon-size:64px; + float:left; + vertical-align:top +} +.download.error-content{ + padding-left:105px +} +.download.error-description{ + color:var(--surface-main-inverted); + font:var(--text-h3); + margin:15px 0 10px; + text-align:left +} +.download.error-description a{ + color:#333; + text-decoration:underline +} +.download.error-description a:hover{ + text-decoration:underline +} +.download.error-list-item{ + color:var(--text-color-medium); + font:var(--text-body2); + margin-bottom:2px; + padding:0 0 0 16px; + position:relative; + text-align:left +} +.download.error-list-item a,.download.error-list-item a:visited{ + color:var(--text-color-error) +} +.download.error-list-item:before{ + background-color:var(--text-color-medium); + border-radius:100%; + content:""; + display:block; + height:4px; + left:0; + position:absolute; + top:7px; + width:4px +} +.megasync-bottom{ + display:inline-block; + padding-top:8px +} +button.megasync-slider{ + cursor:pointer; + position:absolute; + top:351px; + z-index:10 +} +button.megasync-slider i{ + --mask-color:var(--icon-rest) +} +.megasync-slider.next.disabled,.megasync-slider.prev.disabled{ + cursor:default; + opacity:0 +} +button.megasync-slider.next{ + position:absolute; + right:16px; + top:calc(50% - 30px) +} +button.megasync-slider.prev{ + left:16px; + position:absolute; + top:calc(50% - 30px) +} +.megasync-overlay .mega-input.megasync-dropdown{ + margin:-20px auto 20px; + min-width:230px +} +.download.thumb-block{ + background-color:#000; + border-radius:6px; + display:none; + height:261px; + margin:auto auto 8px; + overflow:hidden; + position:relative; + width:calc(100% - 16px) +} +.download.thumb-block.clickable{ + cursor:zoom-in +} +.download.thumb-block img{ + border-radius:2px; + height:100%; + left:50%; + margin:0; + position:absolute; + top:50%; + transform:translate(-50%, -50%); + width:auto +} +.download.info-block.thumb .block-view-file-type,.megasync-close,.megasync-close-txt{ + display:none +} +.downloading .megasync-close,.downloading .megasync-close-txt,.thumb .download.thumb-block{ + display:block +} +.download-complete .download.bar-buttons,.download-complete .download.buttons-block,.download-complete .download.checkbox-bl,.download-complete .download.eta-block,.download-complete .download.pause-button,.download-complete .download.speed-block,.download-complete .pause-transfer,.download-complete .progress-cell.mid-pause,.downloading .download.bar-buttons,.downloading .download.checkbox-bl,.video.download-complete .download.checkbox-bl,.video.downloading .download.checkbox-bl{ + display:none +} +.download-complete .complete-block,.download-complete .download .bar-transfer-info,.downloading .download.bar-transfer-info{ + display:flex +} +.download-complete .download.progress-cell,.downloading .download.progress-cell{ + display:flex; + flex-grow:1; + max-width:33% +} +.download.deleted-user,.download.invalid-error,.download.some-reason,.download.temporarty-error,.global-error .download.buttons-block,.global-error .download.checkbox-bl,.global-error .download.info-block,.megasync-content.features{ + display:none +} +.download-complete .download.percents-block,.downloading .megasync-content.features{ + display:block +} +.invalid-url .download.invalid-error,.na-some-reason .download.some-reason,.not-available-user .download.deleted-user,.temporary-na .download.temporarty-error{ + display:inline-block; + margin:auto +} +.video .file-type-wrapper{ + display:none +} +.video .download.info-block{ + margin:0; + padding-top:0 +} +.download.video-block{ + display:none; + flex-grow:1 +} +.video .download.video-block{ + border:4px solid transparent; + border-radius:12px; + display:block; + overflow:hidden; + position:relative; + text-align:center +} +:not(.video-theatre-mode).video .download.video-block{ + height:261px +} +.video .download.video-block video{ + height:100%; + object-fit:cover; + width:100% +} +.video.video-theatre-mode .download.video-block video{ + object-fit:contain +} +.video.video-theatre-mode .download.download-page.expanded,.video.video-theatre-mode .download.download-page.expanded:not(.en){ + max-height:100% +} +.video .download.video-block img{ + height:100%; + margin:0 auto +} +.video .download.checkbox-bl{ + display:inline-block; + margin:7px 0 10px; + position:relative +} +.video .download.img-preview-button{ + display:none +} +.video .download.info-block .block-view-file-type{ + background-position:-219px -356px; + height:43px; + margin:15px 0 0 15px; + width:32px +} +.video .download.transfer-buttons{ + display:none +} +.video.resumable .download.buttons-block{ + border:0 +} +.video .download-content .download.speed-block{ + padding:0 +} +.video.resumable.video-theatre-mode .download.state-text{ + box-sizing:border-box +} +.download.download-page.video-theatre-mode{ + height:calc(100vh - 60px) !important +} +.video-theatre-mode .download-page.download-content .table-cell,.video-theatre-mode .download-page.dropdown-table{ + display:block +} +.download.download-page.video-theatre-mode .download-content{ + height:calc(100vh - 60px); + margin-top:60px +} +.video-theatre-mode .download.transfer-wrapper{ + background-color:var(--surface-grey-1); + box-shadow:none; + height:100%; + padding:0 +} +.video-theatre-mode .download.video-block{ + border:0; + border-radius:0; + height:calc(100vh - 280px) +} +.video-theatre-mode .download.video-block:not(:-webkit-full-screen){ + height:calc(100vh - 280px) !important +} +.video-theatre-mode .download.video-block:not(:-moz-full-screen){ + height:calc(100vh - 280px) !important +} +.video-theatre-mode .download.video-block:-webkit-full-screen{ + height:100vh !important +} +.video-theatre-mode .download.video-block:-moz-full-screen{ + height:100vh !important +} +.video-theatre-mode .download.video-block[data-fullscreen=true]{ + height:100% !important; + width:100% +} +.video-theatre-mode .download.buttons-block{ + border:0; + box-shadow:none; + box-sizing:border-box; + display:table-cell; + margin:0 auto; + padding:0 10px; + vertical-align:top; + white-space:nowrap +} +.video-theatre-mode .download.info-block,.video-theatre-mode .download.over-transfer-quota{ + border-radius:12px; + box-sizing:border-box; + margin:16px auto; + max-width:80%; + position:relative; + width:100% +} +.video-theatre-mode .download.info-block .progress-container{ + background-color:none +} +.video-theatre-mode .download.info-block .file-details-wrapper{ + border-top:none +} +.video-mode-wrapper .checkbox-bl,.video-theatre-mode.download-complete .download.transfer-wrapper .download.checkbox-bl,.video-theatre-mode.download-complete .video-mode-wrapper,.video-theatre-mode.downloading .download.transfer-wrapper .download.checkbox-bl,.video-theatre-mode.downloading .video-mode-wrapper,.video-theatre-mode>.checkbox-bl{ + display:none +} +.video-theatre-mode .video-mode-wrapper{ + display:table; + margin:0 auto; + width:100% +} +.video-theatre-mode .download.info-block{ + padding:0 +} +.video-theatre-mode .download .pause-transfer.square{ + width:48px +} +.video-theatre-mode.stream-overquota .video-mode-wrapper{ + display:none +} +.download.over-transfer-quota{ + border-top:1px solid var(--stroke-grey-2); + display:none; + padding:16px 26px 20px +} +.download.over-transfer-quota:not(.hidden){ + display:block +} +.download.over-transfer-quota{ + padding:8px +} +.download.overquota-message{ + margin-bottom:8px +} +.download.transfer-overquota-txt{ + color:var(--text-color-high); + font:var(--text-body1) +} +.download.transfer-overquota-txt span.countdown{ + margin:-5px 2px 0 +} +.download.transfer-overquota-txt span{ + border-bottom:2px solid var(--input-text-underline-error); + color:var(--text-color-high); + font:var(--text-h3); + padding:0 2px +} +.video-theatre-mode .download.over-transfer-quota{ + border-radius:0; + border-top:1px solid var(--stroke-grey-2); + display:block; + margin:0 auto; + padding:12px 10px 8px +} +.download.over-transfer-quota .download.video-transfer-buttons{ + float:right +} +.video-theatre-mode .download.overquota-message{ + margin-bottom:15px +} +.download.over-transfer-quota button{ + float:none +} +.download.over-transfer-quota button.small{ + margin-left:8px; + margin-right:0 +} +.download.over-transfer-quota button.small i{ + margin:8px 3px 1px -5px +} +.video-theatre-mode.stream-overquota .download.top-transfer-buttons,.video-theatre-mode button.share,.video.resumable.video-theatre-mode .download.checkbox-bl{ + display:none +} +.video-theatre-mode.downloading.overquota .download.top-transfer-buttons{ + display:inline-block +} +.video-theatre-mode.stream-overquota .download.info-block .checkbox-bl{ + display:none +} +body.logged:not(.en) .video-theatre-mode.overquota .download.video-block,body:not(.en) .video-theatre-mode.stream-overquota .download.video-block{ + height:calc(100% - 150px) +} +body.pro-user .download.over-transfer-quota .overquota-message-block,body:not(.pro-user) .download.over-transfer-quota .overquoata-error{ + display:none +} +@media only screen and (max-width:625px){ +body .download.download-page{ + box-shadow:0 1px 0 0 rgba(0, 0, 0, .1); + padding-bottom:0 +} +} +.download-page.download-content{ + background-color:var(--surface-main); + border-width:1px 0; + height:calc(100% - 62px); + left:0; + margin-top:60px; + position:absolute; + right:0; + width:calc(100% - 1px) +} +.download-page.download-content.browserscreen,.download-page.download-content.fullscreen{ + height:100%; + margin:0 +} +.download-grid{ + align-items:start; + display:grid; + grid-template-columns:1fr; + grid-template-rows:1fr; + height:100% +} +.download-grid .center-cell{ + align-items:center; + display:flex; + flex-direction:column; + grid-column:1 / 2; + grid-row:1 / 2; + justify-content:flex-start; + width:100% +} +.download-footer{ + align-items:center; + background-color:var(--surface-main); + bottom:0; + display:flex; + height:60px; + justify-content:center; + left:0; + padding:0 16px; + position:absolute; + right:0; + z-index:99 +} +.download-footer p{ + color:var(--text-color-high); + font:var(--text-body1); + margin-left:16px +} +.download-footer a{ + color:var(--text-color-success); + font:var(--text-body1); + margin:auto 16px +} +.download-footer i{ + --width:48px; + height:48px; + width:48px +} +.download.transfer-wrapper{ + background-color:var(--surface-grey-1); + border:1px solid var(--stroke-grey-4); + border-radius:12px; + box-shadow:var(--dialog-shadow-thin); + box-sizing:border-box; + display:flex; + flex-direction:column; + height:calc(100% - 118px); + width:100% +} +.download.info-block .file-details-wrapper{ + border-top:1px solid var(--stroke-grey-2); + display:grid; + grid-template-columns:1fr auto auto auto; + padding:8px +} +.rtl .download.info-block .file-details-wrapper{ + direction:rtl +} +.download.info-block .file-details-wrapper .title-container{ + align-items:center; + display:flex +} +.download.info-block .title-block{ + color:var(--text-color-high); + display:grid; + font:var(--text-h3-bold); + grid-template-columns:1fr auto +} +.download.info-block .title-block .filename{ + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.download.info-block .file-size-block{ + color:var(--surface-main-inverted); + display:flex; + opacity:.7; + padding:0 16px; + white-space:nowrap +} +.rtl .download.info-block .file-size-block{ + padding:0 16px 0 64px +} +.download.info-block .file-size-block span{ + white-space:nowrap +} +.download.info-block .file-details-wrapper .links-container{ + gap:4px; + align-items:center; + display:flex +} +.download.info-block .file-details-wrapper .links-container button span{ + white-space:nowrap +} +.download.info-txt.small-txt .dark{ + color:var(--text-color-success) +} +.overquota .download.info-txt.small-txt .dark{ + color:var(--text-color-error) +} +.download.info-txt.small-txt hr{ + border:0; + display:inline; + margin:0; + vertical-align:top +} +.download.info-txt.small-txt hr:before{ + content:"/"; + display:inline-block; + padding:0 5px; + vertical-align:top +} +@media only screen and (max-width:632px){ +.download.info-block .file-details-wrapper{ + gap:16px; + display:flex; + flex-direction:column; + justify-content:center +} +} +.download.in-progress,.overquota .download.in-progress,.stream-overquota .download.in-progress,.video.resumable .download.in-progress{ + display:none +} +.download-complete .download.in-progress,.downloading .download.in-progress,.error:not(.overquota) .download.in-progress{ + display:block +} +.download-complete.overquota .download.in-progress,.download-complete.stream-overquota .download.in-progress,.download-complete button.download.download-file,.downloading.overquota .download.in-progress,.downloading.stream-overquota .download.in-progress,.downloading button.download.download-file{ + display:none +} +.message-container{ + display:grid +} +.progress-container{ + background-color:var(--surface-grey-1); + border-radius:0 0 12px 12px; + border-top:1px solid var(--stroke-grey-2); + display:block; + padding:8px +} +.progress-info-block{ + display:flex; + justify-content:space-between; + margin:5px 0; + width:100% +} +.progress-stats-block{ + align-items:center; + display:flex; + flex-grow:1; + min-height:34px +} +.download-complete .download-dropdown,.download-complete .mega-button.resume,.download-complete .mega-button.save,.download-complete .merge-mega-button.download,.downloading .download-dropdown,.downloading .mega-button.resume,.downloading .mega-button.save,.downloading .merge-mega-button.download,.paused-transfer .download.speed-block,.resumable .download-dropdown,.resumable .merge-mega-button.download{ + display:none +} +.options-dropdown{ + display:none; + position:relative +} +.download-dropdown{ + display:inline-block; + position:relative +} +.download-dropdown button.icon{ + height:36px; + width:36px +} +.options-dropdown button.icon{ + --border-width:0; + height:36px; + width:36px +} +.options-dropdown button.icon,.options-dropdown button.icon:hover{ + background:var(--surface-grey-2) +} +.download-dropdown button.icon i,.options-dropdown button.icon i{ + --icon-size:24px; + color:var(--icon-rest); + margin:auto +} +.download-dropdown-content,.options-dropdown-content{ + border-bottom:5px solid transparent; + bottom:37px; + min-width:160px; + position:absolute; + right:0; + transition:var(--transition-opacity); + transition:all 0s ease .5s; + visibility:hidden; + z-index:1 +} +.rtl .download-dropdown-content,.rtl .options-dropdown-content{ + left:0; + right:unset +} +.download-dropdown-content div,.options-dropdown-content div{ + background:var(--surface-main); + border:var(--context-menu-border); + border-radius:12px; + box-shadow:0 5px 10px 0 rgba(0, 0, 0, .3); + overflow:hidden +} +.download-dropdown-content a,.options-dropdown-content a{ + --mask-color:var(--text-color-medium); + background:var(--surface-main); + color:var(--text-color-medium); + display:block; + font:var(--text-body1); + padding:12px 56px 12px 12px; + position:relative; + text-decoration:none; + transition:var(--transition-bg-color), var(--transition-color); + white-space:nowrap +} +.rtl .download-dropdown-content a,.rtl .options-dropdown-content a{ + padding:12px 12px 12px 56px +} +.download-dropdown-content a i{ + --icon-size:18px; + margin-right:12px +} +.download-dropdown-content a i.icon-question,.download-dropdown-content a i.icon-question-filled{ + --icon-size:24px; + display:inline-block; + margin-left:22px; + position:absolute; + top:10px +} +.download-dropdown-content a:first-child{ + border-bottom:1px solid var(--stroke-grey-2) +} +.download-dropdown-content a:hover,.options-dropdown-content a:hover{ + --mask-color:var(--text-color-high); + background:var(--surface-grey-1); + color:var(--text-color-high) +} +.download-dropdown-content a:hover i:last-child{ + --mask-color:var(--text-color-medium) +} +.download-dropdown-content a:hover i:last-child:hover{ + --mask-color:var(--icon-active) +} +.download-dropdown:hover .download-dropdown-content,.options-dropdown:hover .options-dropdown-content{ + transition-delay:0s; + visibility:visible; + z-index:99 +} +.options-dropdown .video-share{ + display:none +} +.video .options-dropdown{ + display:inline-block +} +.video .options-dropdown .video-share{ + display:block +} +.download.textviewer-block,.txtfile .file-type-wrapper{ + display:none +} +.txtfile .download.info-block{ + margin:0; + padding-top:0 +} +.txtfile .download.textviewer-block{ + border:4px solid transparent; + border-radius:8px; + display:block; + flex-grow:1; + height:261px; + overflow:hidden; + position:relative +} +.txtfile .download.textviewer-block .CodeMirror-cursors{ + visibility:hidden +} +.txtfile .download.textviewer-block .block-view-file-type{ + left:50%; + top:50%; + transform:translate(-50%, -50%) +} +.download.image-block{ + display:none; + flex-grow:1 +} +.image .download.image-block{ + background-color:var(--surface-grey-6); + border-radius:6px 6px 0 0; + display:block; + flex-grow:1; + height:261px; + margin:4px auto auto; + overflow:hidden; + width:calc(100% - 8px) +} +.image .download.info-block .file-type-wrapper{ + display:none +} +.download.image-block .media-viewer-container{ + position:relative; + z-index:99 +} +.download.image-block .media-viewer-container.browserscreen,.download.image-block .media-viewer-container.fullscreen{ + position:fixed; + z-index:999 +} +.download.image-block .media-viewer-container.browserscreen .v-btn.browserscreen,.download.image-block .media-viewer-container.fullscreen .v-btn.browserscreen{ + display:none +} +.download.image-block .media-viewer-container:not(.browserscreen,.fullscreen) .v-btn.browserscreen{ + display:inline-block +} +.download.image-block .media-viewer-container .viewer-progress,.download.image-block .media-viewer-container header{ + display:none +} +.download.image-block .media-viewer-container.browserscreen header,.download.image-block .media-viewer-container.fullscreen header{ + display:block +} + +.user-card-presence{ + background-color:#666; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:inline-block; + height:6px; + margin:7px 14px 5px 8px; + width:6px +} +.fm-chat-user-email{ + display:block +} +.error.user-card-presence{ + background-color:initial !important; + border:2px solid #fff +} +.online.user-card-presence{ + background-color:#13e03c; + border-color:#13e03c +} +.away.user-card-presence{ + background-color:orange; + border-color:orange +} +.busy.user-card-presence{ + background-color:#eb4444; + border-color:#eb4444 +} +.offline.user-card-presence{ + background-color:#666; + border-color:#666 +} +.black.user-card-presence{ + background-color:#000; + border-color:#000; + visibility:hidden +} +.user-card-presence.big{ + border:2px solid #fff; + -webkit-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + -moz-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + height:16px; + width:16px +} +.user-card-data{ + padding:0 30px 0 48px +} +.user-card-data.no-status{ + padding:0 0 0 50px +} +.user-card-name{ + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + max-width:100%; + overflow:hidden; + position:relative; + text-overflow:ellipsis; + white-space:nowrap +} +button.user-card-name:hover{ + text-decoration:underline +} +.user-card-name.light{ + color:var(--text-color-high); + display:inline-block; + max-width:calc(100% - 40px) +} +.user-card-name .grey{ + color:var(--text-color-medium); + padding-left:6px +} +.user-card-name.white{ + color:#fff +} +.user-card-email{ + color:#777; + font-size:13px; + line-height:18px; + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.user-card-email.small{ + font-size:12px; + line-height:14px +} +.user-card-name.small{ + font-size:13px; + line-height:19px +} +.user-card.small{ + font-size:12px; + line-height:14px +} +.user-card-verified i{ + --icon-size:14px; + --mask-color:var(--secondary-blue) +} +.user-card-verified,.verified .verified_icon{ + background-color:#fff; + border-radius:100%; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + box-sizing:border-box; + float:left; + height:15px; + position:relative; + width:15px +} +.small-rounded-avatar .user-card-verified,.verified .verified_icon{ + position:absolute; + right:-5px; + top:-4px; + z-index:10 +} +.short .small-rounded-avatar .user-card-verified{ + position:absolute; + right:-4px; + top:-3px; + z-index:10 +} +.context-avatar .user-card-verified{ + left:8px; + position:absolute; + position:absolute; + top:8px; + z-index:10 +} +.verified_icon{ + display:none +} +.verified .verified_icon{ + display:block +} +.group-chat .chat-contacts-list .user-card-presence{ + margin:7px 0 5px 8px +} +.group-chat .chat-contacts-list .user-card-name,.right-chat-contact-card .user-card-name{ + display:inline-block; + max-width:calc(100% - 40px); + padding-top:6px +} +.chat-contacts-list .user-card-data .audio-call{ + display:block; + float:right; + margin-top:5px +} +.chat-contacts-list .user-card-data .audio-call i{ + --icon-size:24px; + --mask-color:var(--icon-inactive) +} +.right-chat-contact-card .user-card-name{ + padding-top:0 +} +.group-chat .chat-right-pad .user-card-email{ + display:none +} +.avatar-wrapper.square .verified_icon,.fm-blocks-view .avatar-wrapper .verified_icon{ + right:8px; + top:8px +} +.user-card-tick-wrap{ + align-items:center; + background:var(--checkbox-fill-inactive); + border:1px solid var(--checkbox-border-inactive); + border-radius:3px; + box-sizing:border-box; + display:flex; + height:16px; + justify-content:center; + position:absolute; + right:12px; + top:50%; + transform:translateY(-50%); + width:16px; + z-index:1 +} +.rtl .user-card-tick-wrap{ + left:12px; + right:unset +} +.user-card-tick-wrap i{ + display:none; + margin:0 +} +.contacts-info .user-card-tick-wrap+.user-card-data{ + padding-right:20px +} +.selected .user-card-tick-wrap{ + background:var(--checkbox-fill-active); + border:1px solid var(--checkbox-fill-active) +} +.selected .user-card-tick-wrap i{ + --icon-size:14px; + --mask-color:var(--secondary-white); + display:block +} + +.sign .main-pad-block{ + background-color:#fafafa +} +.bottom-page.sign .register-st2-txt-block{ + padding-top:94px +} +.bottom-page.sign .main-left-block{ + padding:64px 0; + width:486px +} +.account.login-form,.account.register-form{ + background-color:#fff; + border:1px solid rgba(0, 0, 0, .05); + border-radius:24px; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + box-sizing:border-box; + overflow:hidden; + padding:4px 48px 0; + text-align:center; + width:100% +} +.account.register-form .pw-strength-wrap{ + margin-bottom:20px; + margin-top:-15px; + text-align:left +} +.account.register-form .checkbox-block{ + align-items:flex-start; + display:flex; + padding:24px 0 0; + text-align:initial +} +.account.register-form .checkbox-block+.checkbox-block{ + padding-top:8px +} +.account.register-form .checkbox{ + -webkit-margin-end:14px; + margin:2px 0; + margin-inline-end:14px +} +.account.register-form .radio-txt{ + color:var(--text-color-medium); + font:var(--text-body1); + font-size:13px +} +.account.register-form .content-txt.pw-strength-note{ + color:#aaa; + margin-left:4px; + margin-top:8px +} +.account.login-form .dialog-dark-bottom.register,.account.register-form .dialog-dark-bottom.login{ + align-items:center; + background:var(--surface-main-inverted); + box-sizing:border-box; + color:var(--text-color-medium-inverted); + display:flex; + font:var(--text-body1); + justify-content:center; + margin:0 -48px; + min-height:48px; + padding:12px 48px +} +.main-left-block.businessSubAc .account.register-form .dialog-dark-bottom.login,.main-left-block.confirm .account.login-form .dialog-dark-bottom.register{ + display:none +} +.account.login-form .dialog-dark-bottom.register a,.account.register-form .dialog-dark-bottom.login a{ + color:var(--text-color-high-inverted); + font-family:var(--text-font-family-semibold); + font-size:15px; + margin-left:4px; + text-decoration:underline +} +@media (hover:hover){ +.account.login-form .dialog-dark-bottom.register a:hover,.account.register-form .dialog-dark-bottom.login a:hover{ + text-decoration:none +} +} +.account.top-header{ + color:#333; + font-family:var(--text-font-family-second-regular); + font-size:28px; + line-height:44px; + padding:48px 0 40px +} +.mega-dialog header .account.top-header{ + color:#333; + padding:40px 0 10px 40px +} +.mega-dialog header .account.top-header.small{ + font-size:26px; + padding:40px 0 0 40px +} +.account.top-header span{ + color:#f0373b +} +.account.top-header.wide{ + width:112% +} +.account.text-header{ + color:#000; + font-family:var(--text-font-family-second-regular); + font-size:18px; + line-height:30px; + padding:35px 0 44px +} +.account.small-header-txt{ + color:#666; + float:right; + font-size:14px; + line-height:24px; + padding:64px 0 0 +} +.account.small-header-txt a{ + color:#f0373b; + cursor:pointer +} +.account.small-header-txt a:hover{ + text-decoration:underline +} +.account.half-sized-block.full-sized-error .message-container{ + width:calc(200% + 24px) +} +.account.input-wrapper{ + -webkit-padding-end:8px; + -webkit-padding-start:38px; + border-bottom:1px solid var(--stroke-grey-2); + font-size:0; + line-height:0; + margin:0 0 24px; + padding:14px 0 5px; + padding-inline-end:8px; + padding-inline-start:38px; + position:relative; + transition:border-color .2s ease-in-out; + white-space:nowrap +} +.account.input-wrapper.small{ + -webkit-margin-start:8px; + margin:0; + margin-inline-start:8px +} +.account.input-wrapper.top-placeholder{ + margin:0 0 24px +} +.account.input-wrapper.top-placeholder label{ + color:var(--text-color-low); + display:none; + font:var(--text-body2); + position:absolute; + top:-12px +} +.account.input-wrapper.top-placeholder.selected label,.account.input-wrapper.top-placeholder input:not(:placeholder-shown)+label{ + display:block +} +.account.input-wrapper.focused{ + border-color:rgba(0, 0, 0, .4) +} +.account.input-wrapper.incorrect,.both-incorrect-inputs .account.input-wrapper{ + border-color:var(--stroke-error) +} +.account.input-wrapper i{ + --mask-color:var(--text-color-medium); + --icon-size:24px; + left:4px; + position:absolute; + top:14px +} +.rtl .account.input-wrapper i{ + left:auto; + right:4px +} +.account.input-wrapper .ui-selectmenu-button,.account.input-wrapper input,.account.input-wrapper select{ + background-color:initial; + border:0; + box-sizing:border-box; + color:var(--text-color-medium); + font:var(--text-body1); + height:24px; + margin:0; + padding:0; + transition:color .2s ease-in-out; + width:100% +} +.account.input-wrapper select{ + height:24px; + opacity:0 +} +.account.input-wrapper .select-arrow{ + left:auto; + right:5px; + transition:transform .2s ease-in-out; + z-index:-1 +} +.ui-selectmenu-button-open+label+.select-arrow{ + transform:rotate(90deg) +} +.account.input-wrapper .ui-selectmenu-button{ + box-shadow:none; + color:var(--text-color-medium); + font:var(--text-body2); + height:24px +} +.account.input-wrapper.selected .ui-selectmenu-button{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.account.input-wrapper .ui-selectmenu-button:before{ + display:none +} +.account.input-wrapper:not(.small) input[type=number]{ + font-size:20px +} +.account.input-wrapper.incorrect input,.both-incorrect-inputs .account.input-wrapper input{ + color:#da3135 +} +.account.input-wrapper input::placeholder{ + color:var(--text-color-medium); + font:var(--text-body2) +} +.account.input-wrapper.focused input::placeholder{ + color:#ccc +} +.account.input-wrapper input:-webkit-autofill,input:-webkit-autofill:focus{ + -webkit-text-fill-color:#000; + -webkit-box-shadow:inset 0 0 0 50px #fafafa +} +.account.grouped-inputs{ + font-size:0; + padding:0 0 12px; + text-align:center; + white-space:nowrap +} +.account.grouped-inputs .num{ + background-color:#f7f7f7; + border:1px solid rgba(0, 0, 0, .15); + border-radius:4px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:inline-block; + height:48px; + margin:0 0 0 4px; + padding:0; + width:40px +} +.account.grouped-inputs .num:first-child{ + margin:0 +} +.account.grouped-inputs .account.input-wrapper input[type=number]{ + font-size:36px; + height:45px; + line-height:45px; + text-align:center +} +.sms-code-input-container{ + position:relative +} +.sms-verification-number-input{ + background:transparent; + border:0; + font-size:38px; + height:38px; + letter-spacing:25px; + line-height:38px; + position:absolute; + text-indent:13px; + top:4px; + width:300px; + z-index:2 +} +body.ar .sms-verification-number-input{ + font-family:source_sans_proregular,Arial,sans-serif !important +} +.account.input-tooltip,.both-input-tooltip{ + -webkit-margin-start:20px; + background:var(--banner-background-warning); + border:1px solid var(--banner-border-warning); + border-radius:4px; + bottom:0; + box-sizing:border-box; + color:var(--banner-text-warning); + display:none; + font:var(--text-body2); + left:100%; + margin-inline-start:20px; + min-height:24px; + padding:4px 8px; + position:absolute; + z-index:10 +} +.both-input-tooltip{ + bottom:-22px +} +.account.input-tooltip.left,.both-input-tooltip.left{ + left:auto; + margin:0 20px 0 0; + right:100% +} +.account.input-tooltip.mid{ + bottom:auto; + top:26px +} +.both-incorrect-inputs .both-input-tooltip,.incorrect .account.input-tooltip{ + display:block +} +.incorrect .account.input-tooltip.bottom{ + bottom:-40px; + left:-20px; + top:auto +} +.incorrect .account.input-tooltip.bottom-center{ + bottom:auto; + left:0; + margin-top:9px; + right:0; + text-align:center; + top:100% +} +.account.input-tooltip.static{ + margin:0; + position:static +} +.incorrect+.account.input-tooltip.static{ + display:block +} +.account.input-wrapper.incorrect.top-placeholder+.account.input-tooltip.static{ + margin:-12px 0 0 +} +.account.input-tooltip.static.visible{ + display:block; + margin:-12px 0 0 +} +.account.checkbox-block.focused .checkboxOff:before,.account.checkbox-block.focused .checkboxOn:before,.pw-remind.checkbox-block.focused .checkboxOff:before,.pw-remind.checkbox-block.focused .checkboxOn:before{ + -webkit-box-shadow:0 0 0 1px rgba(240, 55, 58, .5); + -moz-box-shadow:0 0 0 1px rgba(240, 55, 58, .5); + box-shadow:0 0 0 1px rgba(240, 55, 58, .5) +} +.account.checkbox-block.left{ + align-items:center; + display:inline-flex; + height:48px; + margin:48px 0; + white-space:nowrap +} +button.login-button{ + margin-top:2px +} +.business button.register-button{ + margin-top:30px +} +.account.input-wrapper.password{ + padding-right:80px +} +.login .account.input-wrapper.password{ + padding-right:0 +} +.sign .main-pad-block button{ + display:flex; + margin:48px 0 +} +button span{ + display:inline-block; + vertical-align:top +} +button .loader{ + display:none +} +button .loader img{ + width:16px +} +button.loading .loader{ + display:flex +} +.business-block,.business .personal-block{ + display:none +} +.business .business-block{ + display:block +} +.account.input-hint{ + color:#999; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:12px; + left:38px; + letter-spacing:.86px; + line-height:24px; + position:absolute; + top:-18px +} +.account.radio-buttons.register-pad{ + margin:-2px 0 0; + padding:0 0 29px +} +.register-pad div.right{ + float:right +} +.radio-txt.medium{ + color:#333; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:16px; + padding-right:5px +} +.radio-txt.medium span{ + padding-right:8px +} +.account.radio-buttons .provider-icon{ + margin:0 0 0 8px +} +.account.checkbox-block.terms{ + padding-bottom:3px +} +.account.checkbox-block.small{ + display:flex; + padding:0 0 14px 1px +} +.register-side-pane .account.checkbox-block.small{ + padding:0 0 16px 8px +} +.account.checkbox-block.small .radio-txt{ + font-size:13px +} +.account.checkbox-block.small .checkboxOff,.account.checkbox-block.small .checkboxOn{ + margin-top:5px +} +.account.checkbox-block.small .radio-txt{ + padding:4px 0 0 +} +.account.business-plan{ + background-color:#fff; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + -webkit-box-shadow:0 0 20px 0 rgba(0, 0, 0, .05); + -moz-box-shadow:0 0 20px 0 rgba(0, 0, 0, .05); + box-shadow:0 0 20px 0 rgba(0, 0, 0, .05); + float:right; + margin:198px 0 0; + position:relative; + width:360px +} +.account.business-plan *{ + position:relative +} +.account.business-plan:after,.account.business-plan:before{ + -webkit-box-shadow:0 2px 5px 0 hsla(0, 0%, 40%, .1); + -moz-box-shadow:0 2px 5px 0 hsla(0, 0%, 40%, .1); + box-shadow:0 2px 5px 0 hsla(0, 0%, 40%, .1); + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.account.business-plan:after{ + -webkit-box-shadow:0 0 1px 0 #e6e6e6; + -moz-box-shadow:0 0 1px 0 #e6e6e6; + box-shadow:0 0 1px 0 #e6e6e6 +} +.account.business-plan-icon{ + background-image:url(../imagery/mega-business.537c69455ef14de7.png); + background-position:-255px -1255px; + height:68px; + margin:35px auto 2px; + width:68px +} +.account.business-plan-title{ + color:#666; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:20px; + line-height:26px; + padding:0 0 40px; + text-align:center +} +.account.business-plan-price{ + background-color:#00bfa5; + -moz-border-radius:2px; + -webkit-border-radius:2px; + border-radius:2px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + font-size:16px; + height:72px; + line-height:40px; + margin:0 16px 16px; + padding:15px 0 0; + text-align:center +} +.account.business-plan-price .big{ + font-size:40px; + padding-right:12px +} +.account.business-plan-info,.account.business-plan-total{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#333; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:16px; + height:54px; + line-height:20px; + margin:0 16px; + padding:17px 16px 0 +} +.account.business-plan-info.grey{ + background-color:rgba(0, 0, 0, .03) +} +.account.business-plan-total{ + border-top:1px solid rgba(0, 0, 0, .1); + font-size:24px; + height:67px; + line-height:30px +} +.account.icons-blocks{ + font-size:0 +} +.sign .bottom-page.small-txt{ + color:#666; + font-family:var(--text-font-family-second-regular); + font-size:14px; + line-height:24px; + padding-bottom:30px; + padding-top:30px +} +.sign .bottom-page.big-icon.top-pad{ + margin:9px auto 16px +} +.bottom-page.big-icon.business{ + background-image:url(../imagery/mega-business.537c69455ef14de7.png) +} +.bottom-page.big-icon.business.key{ + background-position:1px -1370px +} +.bottom-page.big-icon.business.revert{ + background-position:-149px -1370px +} +.bottom-page.big-icon.business.https{ + background-position:1px -1520px +} +.main-left-block.confirm{ + float:none; + margin:36px auto 0; + text-align:center +} +.dropdown.body.popup.top-login-popup{ + border-radius:24px; + width:400px +} +.dropdown.body.popup.top-login-popup .mega-button{ + float:right +} +.rtl .dropdown.body.popup.top-login-popup .mega-button{ + float:left +} +.dropdown.body.popup.top-login-popup .checkbox-block{ + align-items:center; + display:flex; + float:left; + height:36px; + white-space:nowrap +} +.rtl .dropdown.body.popup.top-login-popup .checkbox-block{ + float:right +} +.big-illustration{ + background-image:url(../imagery/mega-register-sprite.378a84f4453f99d5.png); + background-repeat:no-repeat; + display:inline-block; + height:142px; + width:400px +} +.big-illustration.register.shield{ + background-position:-17px -833px +} +.big-illustration.register.pw-lock{ + background-position:-17px -994px +} +.big-illustration.login.safe-key,.big-illustration.register.safe-key{ + background-position:-19px -1172px +} +.register-slide{ + position:relative; + width:456px +} +.login-slide-block,.register-slide-block{ + margin:48px 0 0; + overflow:hidden; + position:relative; + text-align:center; + width:456px +} +.login-slide-block{ + margin-top:0 +} +.login-slide-block h2,.register-slide-block h2{ + font-family:LatoWebLight,source_sans_proregular,Arial; + font-weight:300; + margin:32px 0 20px; + white-space:normal +} +.login-slide-block h2 b,.register-slide-block h2 b{ + font-family:LatoWebBold,source_sans_proregular,Arial +} +.login-slide-block a,.register-slide-block a{ + color:#ff333a; + font-size:14px; + line-height:20px; + text-decoration:underline +} +.register-slide-wrapper{ + position:relative; + top:0; + transition:left .7s ease-in-out; + white-space:nowrap; + width:456px +} +.register-slide-wrapper[data-slide="1"]{ + left:0 +} +.register-slide-wrapper[data-slide="2"]{ + left:-457px +} +.register-slide-wrapper[data-slide="3"]{ + left:-913px +} +.register-slide .slider-ctrl-button{ + -webkit-box-shadow:none; + -moz-box-shadow:none; + box-shadow:none; + margin:0; + opacity:.4; + position:absolute; + top:60%; + -webkit-transition:all .25s ease-in-out; + -moz-transition:all .25s ease-in-out; + -o-transition:all .25s ease-in-out; + -ms-transition:all .25s ease-in-out; + transition:all .25s ease-in-out +} +.register-slide:hover .slider-ctrl-button{ + opacity:1 +} +.register-slide .slider-ctrl-button:hover{ + background-color:hsla(0, 0%, 100%, .8); + border-radius:100%; + opacity:1 +} +.register-slide .slider-ctrl-button.prev{ + left:-32px +} +.register-slide .slider-ctrl-button.next{ + right:-32px +} +.register-slide .slider-ctrl-button:before{ + display:none +} +.register-slide-page{ + display:inline-block; + vertical-align:top; + width:100% +} + +.mega-banner.body{ + background-color:var(--banner-background-info); + border-radius:3px; + box-shadow:0 0 0 1px var(--banner-border-info); + display:table; + padding:0 8px +} +.mega-banner.body.warning-template{ + background-color:var(--banner-background-warning); + box-shadow:0 0 0 1px var(--banner-border-warning); + color:var(--banner-text-warning) +} +.mega-banner.with-btn{ + margin-top:20px; + text-align:left +} +.mega-banner.with-btn .text-cell{ + padding:6px 0 +} +.mega-banner.with-btn .btn-cell button{ + position:static +} +.mega-banner.body .versioning-body-text{ + -webkit-padding-start:8px; + max-width:370px; + padding-inline-start:8px +} +.mega-banner.body.with-btn .versioning-body-text{ + max-width:none +} +.free .mega-banner.body:not(.hidden){ + position:relative +} +.mega-banner .cell{ + color:var(--banner-text-info); + display:table-cell; + font:var(--text-body1); + vertical-align:middle +} +.account .mega-banner button{ + -webkit-margin-start:24px; + margin:8px 0; + margin-inline-start:24px +} +.mega-banner i{ + --icon-size:24px; + margin:4px 0 +} +.mega-banner i.x30{ + --icon-size:30px +} +.mega-banner i.sprite-fm-mono{ + --mask-color:var(--banner-text-info) +} +.mega-banner.cell i.sprite-fm-mono{ + margin-top:0 +} +.mega-banner.cell .button{ + position:relative; + transform:none +} +.mega-banner.cell:nth-child(2){ + width:auto +} +.mega-banner .semi-big-icon{ + margin:0 11px 0 3px +} +.mega-banner .button{ + margin:12px 0 12px 24px +} +.mega-banner .fvnotice,.orange-notification .fvnotice{ + background-position:-233px -1666px; + display:inline-block; + height:24px; + margin-top:4px; + width:24px +} +.settings-banner{ + align-items:center; + background:var(--surface-grey-3); + border:2px solid var(--stroke-grey-2); + border-radius:12px; + box-sizing:border-box; + display:flex; + font-size:0; + margin:16px auto 0; + max-width:1034px; + width:calc(100% - 48px) +} +.settings-banner .settings-banner-cell{ + box-sizing:border-box; + padding:24px +} +.settings-banner .settings-banner-cell .title-txt{ + display:block; + padding-bottom:10px +} +.settings-banner .settings-banner-cell:nth-child(2){ + flex:1; + padding:24px 0 +} +.low-width .settings-banner{ + flex-wrap:wrap +} +.low-width .settings-banner .settings-banner-cell{ + text-align:center; + width:100% +} +.low-width .settings-banner .settings-banner-cell:nth-child(2){ + padding:0 24px +} + +.dropdown.body{ + background:var(--surface-main); + border:var(--dropdown-border); + border-radius:12px; + box-shadow:var(--dropdown-shadow); + box-sizing:border-box; + min-height:32px; + min-width:160px; + padding:8px; + position:absolute; + z-index:250 +} +.rtl .dropdown.body{ + direction:rtl +} +.dropdown.body.light{ + line-height:0; + padding:4px 6px +} +.dropdown.body.dark{ + background:var(--surface-main-inverted); + border-radius:8px; + box-shadow:none +} +.dropdown.body.black{ + background-color:#000; + min-width:174px +} +.dropdown.info-txt{ + color:var(--text-color-medium); + font:var(--text-body1-bold); + padding:2px 0 6px 5px +} +.dropdown.body.context{ + box-shadow:0 5px 10px 0 rgba(0, 0, 0, .3); + min-width:188px +} +.rtl .dropdown.body.context{ + direction:rtl +} +.rtl .dropdown.body.context .icon-arrow-right-after:after{ + transform:scaleX(-1) +} +.dropdown.body.submenu{ + left:100%; + margin:-8px -4px 0; + max-width:240px; + min-width:202px; + opacity:0; + right:auto; + -webkit-transition:all .2s ease-in-out,right .2s ease-in-out; + transition:all .2s ease-in-out,right .2s ease-in-out; + visibility:hidden +} +.rtl .dropdown.body.submenu{ + left:auto; + right:100% +} +.fr .dropdown.body.submenu{ + max-width:290px; + min-width:252px +} +.dropdown.body.submenu.active{ + opacity:1; + visibility:visible +} +.disabled-submenu+.dropdown.body.submenu{ + display:none; + visibility:hidden +} +.dropdown.body.submenu.active{ + display:block; + opacity:1 +} +#bodyel .context .dropdown.body.submenu.active{ + display:block +} +.dropdown.body hr{ + border:0; + margin:8px -8px; + padding:0; + position:relative +} +.dropdown.body hr,.dropdown.body hr:before{ + background:var(--divider-color); + height:1px +} +.dropdown.body hr:before{ + content:""; + left:0; + position:absolute; + width:100% +} +.dropdown.body.popup{ + padding:24px; + width:402px +} +.mega-dialog.dropdown.body{ + width:560px; + z-index:1200 +} +.dropdown.body.white-context-menu{ + box-shadow:0 5px 10px 0 rgba(0, 0, 0, .3) +} +.dropdown.body.wide-dropdown{ + width:240px +} +.dropdown.body.retention-history-menu{ + width:162px +} +.dropdown.body .retention-history-menu__list{ + z-index:300 +} +.dropdown.body .retention-history-menu__list>.retention-history-menu__list__elem{ + justify-content:space-between +} +.dropdown.body .retention-history-menu__list>.retention-history-menu__list__elem i{ + --icon-size:24px; + --mask-color:var(--secondary-green); + -webkit-margin-end:0; + margin-inline-end:0 +} +.dropdown.body .dropdown-item{ + position:relative; + width:auto; + z-index:10 +} +.dropdown.body span.loading{ + line-height:32px +} +.dropdown-white-arrow{ + background:var(--arrow-color, var(--surface-main)); + border-bottom:1px solid var(--stroke-grey-2); + border-right:1px solid var(--stroke-grey-2); + display:none; + top:-7px; + transition:var(--transition-bg-color) +} +.dropdown-inverted-arrow,.dropdown-white-arrow{ + height:12px; + left:calc(50% - 6px); + position:absolute; + transform:rotate(-135deg); + width:12px; + z-index:123 +} +.dropdown-inverted-arrow{ + background:var(--surface-main-inverted); + border-bottom:1px solid var(--stroke-grey-2-inverted); + border-right:1px solid var(--stroke-grey-2-inverted); + top:-6px +} +.dropdown-dark-arrow{ + border-bottom:12px solid transparent; + border-right:12px solid var(--arrow-color, #333); + border-top:12px solid transparent; + display:none; + height:0; + left:-10px; + position:absolute; + top:10px; + width:0; + z-index:123 +} +.dropdown.dropdown-arrow .dropdown-dark-arrow,.dropdown.dropdown-arrow:not(.dialog):not(.mega-dialog) .dropdown-white-arrow{ + display:block +} +.down-arrow .dropdown-white-arrow{ + bottom:-7px; + top:auto; + transform:rotate(45deg) +} +.dropdown.body.popup.astropay-payment-reminder{ + max-width:480px; + width:auto; + width:max-content +} +.dropdown.body.popup.non-activated-account{ + width:456px +} +.left-arrow .dropdown-white-arrow{ + left:-7px; + margin:-12px 0 0; + top:50%; + transform:rotate(135deg) +} +.right-arrow .dropdown-white-arrow{ + left:auto; + margin:-12px 0 0; + right:-7px; + top:50%; + transform:rotate(-45deg) +} +.left-pos-arrow .dropdown-white-arrow{ + left:8px; + margin:0; + right:auto +} +.right-pos-arrow .dropdown-white-arrow{ + left:auto; + margin:0; + right:8px +} +.top-pos-arrow .dropdown-white-arrow{ + bottom:auto; + margin:0; + top:8px +} +.high-top-pos-arrow .dropdown-white-arrow{ + bottom:auto; + margin:0; + top:3px +} +.bottom-pos-arrow .dropdown-white-arrow{ + bottom:8px; + margin:0; + top:auto +} +.dropdown-item{ + --mask-color:var(--icon-rest); + align-items:center; + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-medium); + cursor:pointer; + display:flex; + font:var(--text-body1); + height:32px; + max-width:100%; + padding:0 8px; + position:relative; + text-align:initial; + transition:var(--transition-color), var(--transition-bg-color); + white-space:nowrap +} +.dropdown-item,.dropdown-item span{ + overflow:hidden; + text-overflow:ellipsis +} +.dropdown-item span{ + flex:1 +} +.dropdown-item.static{ + cursor:default +} +.dark .dropdown-item{ + --mask-color:var(--text-color-medium-inverted); + color:var(--text-color-medium-inverted) +} +.black .dropdown-item{ + color:hsla(0, 0%, 100%, .8); + font-size:16px +} +.dropdown-item.opened,.dropdown-item:not(.static):hover{ + --mask-color:var(--icon-active); + background:var(--button-hover); + color:var(--text-color-high) +} +.context .dropdown-item.opened,.context .dropdown-item:not(.static):hover{ + width:auto +} +.dropdown-item.active,.txt-hovers .dropdown-item:not(.static):hover{ + --mask-color:var(--icon-active); + background-color:initial; + color:var(--text-color-high) +} +.dark .dropdown-item.active,.dark .dropdown-item:not(.static):hover{ + --mask-color:var(--text-color-white-high); + background-color:initial; + color:var(--text-color-white-high) +} +.dropdown-item.contains-submenu.icon-arrow-right-after:not(.disabled-submenu):after{ + --mask-color:var(--icon-rest); + -webkit-margin-start:8px; + height:16px; + margin-inline-start:8px; + transition:var(--transition-color); + width:16px +} +.dropdown-item.contains-submenu.icon-arrow-right-after.opened:after,.dropdown-item.contains-submenu.icon-arrow-right-after:hover:after{ + --mask-color:var(--icon-active) +} +.dropdown-item.tick-item.active .status-text{ + -webkit-margin-end:8px; + margin-inline-end:8px +} +.dropdown-item.tick-item.active:after{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:-30px -1816px; + background-repeat:no-repeat; + content:""; + height:8px; + margin:0; + position:absolute; + right:8px; + top:12px; + width:11px +} +.rtl .dropdown-item.tick-item.active:after{ + left:8px; + right:auto +} +.dropdown-item.tick-item.active:hover:before{ + background-position:-30px -1856px +} +.dropdown-item.red{ + color:var(--secondary-red) +} +.context .dropdown-item.red,.dropdown-item.red i{ + --mask-color:var(--secondary-red) +} +.dropdown-item.red:not(.disabled):hover{ + --mask-color:var(--text-color-white-high); + background-color:var(--secondary-red); + color:var(--text-color-white-high) +} +.dropdown-item.red:not(.disabled):hover i{ + --mask-color:var(--secondary-white) +} +.dropdown-item i{ + --icon-size:24px; + -webkit-margin-end:8px; + margin-inline-end:8px; + transition:var(--transition-color) +} +.dropdown-item>span+i{ + -webkit-margin-start:8px; + --icon-size:16px; + margin:0; + margin-inline-start:8px +} +.dropdown-item>span+i.warning{ + --icon-size:24px +} +.context .dropdown.submenu{ + border-radius:12px; + box-shadow:0 5px 10px 0 rgba(0, 0, 0, .3) +} +.dropdown-warning{ + --icon-size:24px; + color:var(--text-color-warning); + display:flex; + padding:0 8px +} +.dropdown-warning i{ + -webkit-margin-end:8px; + margin-inline-end:8px +} +.dropdown-warning span{ + min-width:180px; + padding:2px 0 +} +.dropdown-items-info{ + color:var(--text-color-medium); + font:var(--text-body1); + padding:0 4px 6px +} +.dropdown-section.sort-by .dropdown-item,.dropdown-section.sort-by .dropdown-item i{ + transition:none +} +.link-button .dropdown.body:not(.popup){ + margin:2px 0 0; + padding:8px 0 +} +.link-button .dropdown.body .dropdown-item{ + border-radius:0 +} +.link-button .dropdown.body .dropdown-item i{ + margin:0 9px 1px 0 +} +.link-button .dropdown.body:not(.popup) .dropdown-white-arrow{ + margin-left:-107px +} +.dropdown.body.notification{ + bottom:29px; + color:#666; + display:none; + font-family:source_sans_proregular,Arial; + font-size:13px; + left:50%; + line-height:18px; + margin:0 0 0 -141px; + padding:17px 18px 15px; + text-align:center; + width:282px +} +.message.text-block em:hover .dropdown.body.notification{ + display:block +} +.dropdown.notification-text{ + color:#666; + font-size:14px; + line-height:19px; + padding:7px 15px 5px 12px; + white-space:nowrap +} +.dropdown.notification-text i{ + margin:0 8px 0 -1px +} +.dark-direct-tooltip{ + background:var(--surface-grey-1-inverted); + border-radius:6px; + color:var(--text-color-high-inverted); + display:none; + font-size:14px; + line-height:20px; + padding:8px 12px; + position:absolute; + white-space:nowrap +} +.dark-direct-tooltip.in-call,.dark-direct-tooltip.inverted{ + background:var(--surface-grey-1); + color:var(--text-color-high) +} +.dark-direct-tooltip.simpletip-tooltip.in-call i{ + --mask-color:var(--stroke-grey-1) +} +.dark-direct-tooltip i.icon-tooltip-arrow{ + --icon-size:24px; + bottom:-6px; + height:14px; + left:calc(50% - 12px); + position:absolute; + width:24px +} +.dropdown.body.tooltip{ + opacity:0; + position:fixed; + transition:opacity .2s ease-in-out,visibility .2s ease-in-out; + visibility:collapse +} +.dropdown.body.tooltip.small{ + border-radius:6px; + color:#333; + font-size:14px; + line-height:18px; + padding:12px 24px; + position:fixed; + text-align:center; + z-index:1500 +} +.dropdown.body.tooltip.visible{ + opacity:1; + visibility:visible +} +.dropdown.body.img-preview{ + min-width:0; + padding:4px +} +.img-preview .dropdown.img-wrapper{ + background-image:linear-gradient(45deg, hsla(0, 0%, 87.1%, .6) 25%, transparent 0), linear-gradient(-45deg, hsla(0, 0%, 87.1%, .6) 25%, transparent 0), linear-gradient(45deg, transparent 75%, hsla(0, 0%, 87.1%, .6) 0), linear-gradient(-45deg, transparent 75%, hsla(0, 0%, 87.1%, .6) 0); + background-position:0 0, 0 10px, 10px -10px, -10px 0; + background-size:20px 20px; + border-radius:2px; + display:table-cell; + height:120px; + overflow:hidden; + text-align:center; + vertical-align:middle; + width:120px +} +.dropdown.body.img-preview img{ + max-height:100%; + max-width:100% +} +.dropdown.contact-preview{ + max-width:320px; + min-width:238px; + position:fixed +} +.dropdown.contact-preview .contacts-info.body{ + padding:4px +} +.dropdown.body.img-preview{ + padding:4px; + position:fixed +} +.img-preview .dropdown.img-wrapper{ + width:176px +} +.dropdown.body.download.context{ + width:188px +} +.dropdown.body.submenu.download{ + width:214px +} +.dropdown.body.dropdown-arrow.wide-dropdown{ + margin-bottom:16px +} +.dropdown-item.active-tick:before{ + -webkit-margin-start:8px; + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + content:""; + height:14px; + margin-inline-start:8px; + width:14px +} +.dropdown.text-block{ + color:#666; + font-size:14px; + line-height:20px; + margin:0; + padding:11px 24px 24px; + position:relative +} +.dropdown.text-block span{ + color:#424242 +} +.dropdown.text-block a{ + color:#ff4d4a +} +.context .dropdown-item{ + line-height:32px; + padding:0 8px +} +.context .dropdown-item.visible-col-select i.sprite-fm-mono.icon-add{ + opacity:0 +} +.context .dropdown-item.visible-col-select:hover i.sprite-fm-mono.icon-add{ + opacity:1 +} +.context .small-icon{ + float:left; + margin:6px 13px 1px 1px +} +.dropdown.submenu.labels{ + max-width:unset; + white-space:nowrap +} +.dropdown-color-txt{ + color:var(--text-color-medium); + display:block; + font:var(--text-body1); + margin:8px; + text-transform:uppercase +} +.dark .dropdown-color-txt{ + color:#fff +} +.dropdown-colour-item{ + -webkit-margin-end:6px; + -webkit-margin-start:6px; + background-color:#777; + border-radius:100%; + cursor:pointer; + display:inline-block; + height:16px; + margin:6px 0 8px; + margin-inline-end:6px; + margin-inline-start:6px; + position:relative; + transition:var(--transition-bg-color); + width:16px; + z-index:1 +} +.dropdown-item+.dropdown-colour-item{ + -webkit-margin-start:12px; + margin-inline-start:12px +} +.labels.small .dropdown-colour-item{ + height:14px; + width:14px +} +.labels.no-tips .dropdown-colour-item{ + margin-bottom:13px +} +.dropdown-color-info{ + word-wrap:break-word; + color:var(--text-color-low); + display:block; + font:var(--text-body1); + font-style:italic; + margin:8px 0 6px 8px; + max-width:174px; + opacity:0; + padding:0; + transition:all .2s ease-in-out,right .2s ease-in-out +} +.dropdown-color-info.active{ + opacity:1 +} +.context .dropdown-color-info{ + max-width:200px +} +.dropdown-colour-item:after,.dropdown-colour-item:before{ + border-radius:100%; + content:""; + height:100%; + position:absolute; + -webkit-transition:all .2s ease-in-out,right .2s ease-in-out; + transition:all .2s ease-in-out,right .2s ease-in-out; + width:100% +} +.dropdown-colour-item.active:hover:after{ + opacity:.8 +} +.dropdown-colour-item.active:before{ + box-shadow:0 0 0 2px var(--stroke-main) +} +.dropdown-colour-item.red-colour-label{ + background-color:var(--label-red) +} +.dropdown-colour-item.orange-colour-label{ + background-color:var(--label-orange) +} +.dropdown-colour-item.yellow-colour-label{ + background-color:var(--label-yellow) +} +.dropdown-colour-item.green-colour-label{ + background-color:var(--label-green) +} +.dropdown-colour-item.blue-colour-label{ + background-color:var(--label-blue) +} +.dropdown-colour-item.purple-colour-label{ + background-color:var(--label-purple) +} +.dropdown-colour-item.grey-colour-label{ + background-color:var(--label-grey) +} +.dropdown-colour-item.red-colour-label:hover{ + box-shadow:0 0 0 4px rgba(255, 98, 92, .3) +} +.dropdown-colour-item.orange-colour-label:hover{ + box-shadow:0 0 0 4px rgba(249, 166, 70, .3) +} +.dropdown-colour-item.yellow-colour-label:hover{ + box-shadow:0 0 0 4px rgba(244, 206, 74, .3) +} +.dropdown-colour-item.green-colour-label:hover{ + box-shadow:0 0 0 4px rgba(109, 204, 80, .3) +} +.dropdown-colour-item.blue-colour-label:hover{ + box-shadow:0 0 0 4px rgba(74, 184, 243, .3) +} +.dropdown-colour-item.purple-colour-label:hover{ + box-shadow:0 0 0 4px rgba(208, 136, 225, .3) +} +.dropdown-colour-item.grey-colour-label:hover{ + box-shadow:0 0 0 4px rgba(164, 164, 167, .3) +} +.dropdown-colour-item.red-colour-label.active{ + box-shadow:0 0 0 4px var(--label-red) +} +.dropdown-colour-item.orange-colour-label.active{ + box-shadow:0 0 0 4px var(--label-orange) +} +.dropdown-colour-item.yellow-colour-label.active{ + box-shadow:0 0 0 4px var(--label-yellow) +} +.dropdown-colour-item.green-colour-label.active{ + box-shadow:0 0 0 4px var(--label-green) +} +.dropdown-colour-item.blue-colour-label.active{ + box-shadow:0 0 0 4px var(--label-blue) +} +.dropdown-colour-item.purple-colour-label.active{ + box-shadow:0 0 0 4px var(--label-purple) +} +.dropdown-colour-item.grey-colour-label.active{ + box-shadow:0 0 0 4px var(--label-grey) +} +.labels.disabled .dropdown-colour-item{ + box-shadow:none; + cursor:inherit +} +.dropdown.body.hint{ + border-radius:3px; + box-shadow:0 0 12px 0 rgba(0, 0, 0, .1); + padding:0; + width:542px +} +.dropdown.body.hint:not(.white-context-menu):not(.mega-dialog):before{ + box-shadow:0 0 0 1px rgba(0, 0, 0, .1) +} +.hint .dropdown-white-arrow{ + background-position:0 -2314px +} +.hint.down-arrow .dropdown-white-arrow{ + background-position:-24px -2321px +} +.hint.left-arrow .dropdown-white-arrow{ + background-position:-8px -2349px +} +.hint.right-arrow .dropdown-white-arrow{ + background-position:-29px -2349px +} +.hint .dropdown.content-block{ + padding:24px +} +.dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite.70f0db4270a9fe6e.png); + background-position:0 0; + background-repeat:no-repeat; + float:left; + height:180px; + width:180px +} +.es .dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-es.9d56bfee32be936b.png) +} +.br .dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-pt.e0924a35f666d3e5.png) +} +.cn .dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-cn.24dc09c14c8cbf8d.png) +} +.dropdown.hint-thumb.upload{ + background-position:-420px -210px; + height:198px; + margin-bottom:-18px +} +.dropdown.hint-thumb.add-contacts{ + background-position:0 -420px +} +.dropdown.hint-thumb.chat{ + background-position:-210px -210px +} +.dropdown.hint-thumb.manage-transfers{ + background-position:0 -210px +} +.dropdown.hint-thumb.share-content{ + background-position:0 0 +} +.dropdown.hint-thumb.share-folders{ + background-position:-210px 0 +} +.dropdown.hint-thumb.rubbish-bin{ + background-position:-420px 0 +} +.dropdown.hint-thumb.left-click{ + background-position:0 -631px; + height:144px; + margin:-11px 0 -11px -15px; + width:192px +} +.dropdown.hint-thumb.right-click{ + background-position:-250px -631px; + height:144px; + margin:-11px 0 -11px -15px; + width:192px +} +.dropdown.hint-thumb.have-notifications{ + background-position:-195px -420px; + margin-left:-15px; + width:210px +} +.dropdown.hint-info-block{ + margin:0 0 0 204px; + min-height:180px +} +.dropdown.close-button{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:6px -1157px; + background-repeat:no-repeat; + cursor:pointer; + height:24px; + opacity:.53; + position:absolute; + right:10px; + top:10px; + -webkit-transition:opacity .1s ease-in-out; + transition:opacity .1s ease-in-out; + width:24px; + z-index:10 +} +.dropdown.close-button:hover{ + opacity:.65 +} +.dropdown.hint-header{ + color:#ff333a; + font-size:18px +} +.dropdown.hint-header,.dropdown.hint-info{ + font-family:LatoWeb,source_sans_proregular,Arial; + line-height:24px +} +.dropdown.hint-info{ + color:#333; + font-size:14px; + padding:8px 0 40px +} +.dropdown.hint-info .bold{ + font-family:LatoWebBold,source_sans_prosemibold,Arial +} +.dropdown.hint-info .red{ + color:#ff333a +} +.dropdown.hint-info a{ + color:#ff333a; + font-family:LatoWebBold,source_sans_prosemibold,Arial +} +.dropdown.hint-bottom{ + bottom:0; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:table; + padding:0 24px 24px 228px; + position:absolute; + width:100% +} +.hint.short .dropdown.hint-bottom{ + display:none +} +.hint.short .dropdown.hint-info-block{ + display:table-cell; + height:120px; + margin:0; + min-height:0; + padding:0 0 0 27px; + vertical-align:middle +} +.hint.short .dropdown.hint-info{ + padding:8px 0 0 +} +.dropdown.hint-bottom .checkbox-block{ + display:table-cell; + vertical-align:middle +} +.hint-bottom .checkdiv.small{ + margin-top:1px +} +.hint-bottom button{ + display:table-cell; + margin-top:1px; + min-width:auto +} +.hint-bottom .radio-txt{ + line-height:16px; + padding-right:6px; + padding-top:0; + vertical-align:top +} +.dropdown-avatar,.dropdown-avatar .avatar,.dropdown-contact-details{ + border-radius:inherit +} +.dropdown-avatar{ + cursor:pointer; + margin:-8px -9px 8px; + position:relative +} +.dropdown-avatar.rounded{ + border-radius:8px +} +.dropdown-avatar:before{ + background:linear-gradient(180deg, hsla(0, 0%, 100%, 0) 0, rgba(0, 0, 0, .6)); + bottom:0; + content:""; + display:block; + height:100%; + position:absolute; + transition:opacity .25s ease-in-out; + width:100%; + z-index:1 +} +.dropdown-avatar:hover:before{ + opacity:.1 +} +.dropdown-avatar .contact-name-loading{ + margin:7px 0 0 +} +.dropdown-fingerprint{ + background-position:0 -3881px; + background-repeat:repeat-x; + background:var(--surface-grey-1); + box-shadow:0 1px 0 0 rgba(0, 0, 0, .1); + box-sizing:border-box; + height:80px; + margin:-8px -8px 9px; + padding:11px 8px 6px; + position:relative +} +.dropdown-item:not(.hidden)+.dropdown-fingerprint{ + box-shadow:0 0 0 1px rgba(0, 0, 0, .1); + margin:9px -8px +} +.dropdown .contact-fingerprint-title{ + color:var(--text-color-medium); + font:var(--text-body1); + height:auto; + line-height:18px; + font:var(--text-body1); + overflow:hidden; + padding-bottom:6px; + position:relative; + text-overflow:ellipsis; + white-space:nowrap +} +.dropdown .contact-fingerprint-title span{ + display:inline-block; + max-width:180px; + overflow:hidden; + position:relative; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + vertical-align:top; + white-space:nowrap +} +.dropdown .dropdown-verify{ + display:none +} +.dropdown .dropdown-verify.active{ + align-items:center; + background-color:var(--stroke-grey-3); + box-sizing:border-box; + color:var(--text-color-medium); + cursor:pointer; + display:flex; + font:var(--text-body1); + height:100%; + left:0; + line-height:20px; + opacity:0; + position:absolute; + top:0; + transition:opacity .25s ease-in-out; + width:100% +} +.dropdown .dropdown-verify:hover{ + opacity:1 +} +.dropdown .dropdown-verify i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + margin:0 0 0 10px +} +.dropdown .dropdown-verify span{ + padding-left:10px +} +.contact-fingerprint-title .user-card-verified,.verified .contact-fingerprint-title .verified_icon{ + align-items:center; + display:inline-flex; + float:none; + justify-content:center; + margin:1px 0 0 10px; + position:relative; + right:auto; + top:auto; + vertical-align:top +} +.dropdown .contact-fingerprint-txt span{ + width:44px +} +.dropdown-user-name{ + bottom:8px; + box-sizing:border-box; + color:#fff; + cursor:pointer; + font-size:0; + left:0; + line-height:0; + margin:0; + padding:0 18px; + position:absolute; + -moz-text-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + -webkit-text-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + text-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + -webkit-transition:opacity .25s ease-in-out; + transition:opacity .25s ease-in-out; + width:100%; + z-index:10 +} +.dropdown-user-name .name{ + box-sizing:border-box; + display:inline-block; + font:var(--text-h3); + max-width:100%; + overflow:hidden; + padding-right:24px; + position:relative; + text-overflow:ellipsis; + white-space:nowrap +} +.dropdown-user-name .email{ + display:block; + font-size:14px; + line-height:17px; + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.dropdown-contact-details:hover .dropdown-user-name{ + opacity:0 +} +.dropdown .nw-contact-status,.user-card-presence.small{ + box-shadow:0 0 0 2px #fff; + height:8px; + left:auto; + margin:0; + position:absolute; + right:6px; + top:8px; + width:8px; + z-index:10 +} +.dropdown.reactions-dropdown .dropdown-white-arrow{ + display:none !important +} +.dropdown.body.up-arrow{ + margin-top:-20px +} +.gif-panel-wrapper{ + bottom:100%; + position:absolute; + width:100% +} +.gif-panel{ + background:var(--surface-grey-1); + border-radius:5px; + bottom:100%; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + height:550px; + margin:0 18px 5px; + padding:0; + position:relative; + z-index:100 +} +.gif-panel:before{ + border-radius:inherit; + box-shadow:0 0 0 1px rgba(0, 0, 0, .1); + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.dropdown.body.gif-panel-overlay{ + height:550px; + width:630px +} +.gif-panel .gif-panel-header{ + background:var(--surface-grey-2); + border-bottom:1px solid rgba(0, 0, 0, .1); + border-radius:5px 5px 0 0; + height:31px; + padding:8px +} +.gif-panel .gif-panel-header+.ps{ + max-height:calc(100% - 47px) +} +.gif-panel .gif-panel-header .gif-panel-search{ + overflow:hidden; + position:relative +} +.gif-panel .gif-panel-header .gif-panel-search .gif-search-field{ + float:left; + overflow:hidden; + position:relative; + width:-webkit-calc(100% - 168px); + width:-moz-calc(100% - 168px); + width:calc(100% - 168px) +} +.gif-panel .gif-panel-header .gif-panel-search .gif-search-field i{ + --icon-size:24px; + --mask-color:var(--icon-inactive); + cursor:pointer; + left:6px; + position:absolute; + top:50%; + transform:translateY(-50%) +} +.gif-panel .gif-panel-header .gif-panel-search .gif-search-field i.icon-close-component{ + left:auto; + right:6px +} +.gif-panel .gif-panel-header .gif-panel-search .gif-search-field input{ + background:var(--surface-grey-1); + border:0; + border-radius:18px; + box-sizing:border-box; + color:var(--text-color-high); + float:left; + font:var(--text-body1); + height:32px; + padding:0 35px; + width:100% +} +.gif-panel .gif-panel-header .gif-panel-search .giphy-logo{ + background:var(--surface-black); + border-radius:4px; + color:var(--text-color-white-high); + float:right; + height:30px; + margin:1px 0 0; + min-width:160px; + overflow:hidden; + text-transform:uppercase; + white-space:nowrap +} +.gif-panel .gif-panel-header .gif-panel-search .giphy-logo img{ + display:block; + max-height:100%; + max-width:100% +} +.gif-panel .gif-panel-content{ + height:calc(100% - 62px); + overflow:hidden +} +.gif-panel .gif-panel-results{ + column-count:2; + column-gap:14px; + padding:14px +} +@media screen and (min-width:1200px){ +.gif-panel .gif-panel-results{ + column-count:3 +} +} +@media screen and (min-width:1366px){ +.gif-panel .gif-panel-results{ + column-count:4 +} +} +@media screen and (min-width:1536px){ +.gif-panel .gif-panel-results{ + column-count:5 +} +} +@media screen and (min-width:1920px){ +.gif-panel .gif-panel-results{ + column-count:7 +} +} +@media screen and (min-width:2200px){ +.gif-panel .gif-panel-results{ + column-count:8 +} +} +@media screen and (min-width:2560px){ +.gif-panel .gif-panel-results{ + column-count:10 +} +} +@media screen and (min-width:3440px){ +.gif-panel .gif-panel-results{ + column-count:12 +} +} +@media screen and (min-width:5120px){ +.gif-panel .gif-panel-results{ + column-count:18 +} +} +.gif-panel .gif-panel-results .node-container{ + display:inline-block; + margin:0 0 7px; + width:100% +} +.gif-panel .gif-panel-results .node-container.clickable{ cursor:pointer +} +.gif-panel .gif-panel-results .node-container.clickable:hover .node{ opacity:.7 +} +.gif-panel .gif-panel-results .node-container.clickable:hover .node:after{ + border:4px solid #249fd6 +} +.gif-panel .gif-panel-results .node-container.clickable .node:after{ + border:0 solid rgba(36, 159, 214, .3); + border-radius:6px; + bottom:0; + content:""; + display:block; + left:0; + position:absolute; + right:0; + top:0; + transition:border-color .2s ease-in +} +.gif-panel .gif-panel-results .node-container .node{ + background-color:var(--stroke-mid-grey); + background-position:50%; + background-repeat:no-repeat; + background-size:cover; + border-radius:6px; + display:inline-block; + height:100%; + position:relative; + transition:opacity .2s ease-in-out; + width:100% +} +.gif-panel .gif-panel-results .node-container .node span{ + position:absolute; + visibility:hidden +} +.gif-panel .gif-panel-results .node-container .node img{ + border-radius:6px; + display:block +} +.gif-panel .results-end{ + margin:20px 0 30px; + min-height:60px; + text-align:center +} +.gif-panel .results-end strong{ + display:inline-block; + padding:0 0 0 10px +} +.gif-panel .no-results-container{ + display:table; + height:100%; + width:100% +} +.gif-panel .no-results-content{ + display:table-cell; + font-size:22px; + text-align:center; + vertical-align:middle +} +.gif-panel .no-results-content i{ + display:block; + margin:0 auto 30px +} +.dropdown footer{ + display:flex; + justify-content:space-between; + padding:12px 0 +} +.context .dropdown-item i.sort-arrow{ + --icon-size:16px; + opacity:0 +} +.context .dropdown-item.active i.sort-arrow,.context .dropdown-item.selected i.sort-arrow{ + opacity:1 +} + +.ui-widget{ + font-size:13px +} +.tagit-new{ + display:none +} +.ui-autocomplete.ui-menu.ui-widget.ui-widget-content.ui-corner-all{ + background-color:#fff; + border:1px solid rgba(0, 0, 0, .21); + border-radius:4px; + box-shadow:0 3px 4px rgba(50, 50, 50, .4); + box-sizing:border-box; + margin:0; + overflow:hidden; + padding:0; + width:280px +} +.ui-autocomplete.ui-menu.ui-widget.ui-widget-content.ui-corner-all li{ + display:block; + list-style:none; + margin:0; + padding:0 +} +.send-files-menu-item,.ui-autocomplete.ui-menu.ui-widget.ui-widget-content.ui-corner-all li a{ + color:#383b3d; + cursor:pointer; + display:block; + font-size:13px; + height:30px; + line-height:29px; + list-style:none; + padding-left:42px +} +.ui-autocomplete.ui-menu.ui-widget.ui-widget-content.ui-corner-all li:first-child a{ + border-top-left-radius:3px; + border-top-right-radius:3px +} +.send-files-menu-item:hover,.ui-autocomplete.ui-menu.ui-widget.ui-widget-content.ui-corner-all li a.ui-state-hover{ + background-color:#cacfd4 +} +.datepickers-container{ + left:0; + position:absolute; + top:0; + z-index:2201 +} +@media print{ +.datepickers-container{ + display:none +} +} +.datepicker{ + background:var(--surface-main); + border:1px solid var(--stroke-grey-2); + border-radius:24px; + color:var(--text-color-high); + font-family:var(--text-font-family); + left:-100000px; + margin:0; + min-width:252px; + opacity:0; + position:absolute; + transition:opacity .2s ease-in-out 0s; + z-index:100 +} +.datepicker.active{ + opacity:1 +} +.datepicker--content{ + padding:7px +} +.datepicker--body{ + display:none +} +.datepicker--body.active{ + display:block +} +.datepicker--cell{ + border-radius:100%; + box-sizing:border-box; + color:var(--text-color-medium); + cursor:pointer; + display:inline-block; + font-size:14px; + height:32px; + line-height:32px; + margin:1px; + overflow:hidden; + position:relative; + text-align:center; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + transition:background-color .2s ease-in-out 0s,color .2s ease-in-out 0s; + white-space:nowrap; + width:32px; + z-index:1 +} +.datepicker--cell-month,.datepicker--cell-year{ + border-radius:16px; + height:48px; + line-height:48px; + margin:2px; + width:55px; + width:calc(25% - 4px) +} +.ar .datepicker--cells-months{ + width:300px +} +.datepicker--cell.-focus-{ + background:var(--surface-grey-2) +} +.datepicker--cell.-current-{ + background:transparent; + color:var(--text-solor-red) +} +.datepicker--cell.-disabled-{ + background:transparent; + color:var(--text-color-low); + cursor:default +} +.datepicker--cell.-selected-{ + background:var(--surface-error); + color:var(--text-color-high) +} +.datepicker--cell:empty{ + cursor:default +} +.datepicker--days-names{ + font-size:0 +} +.datepicker--day-name{ + color:var(--text-color-medium); + display:inline-block; + font-family:var(--text-font-family); + font-size:10px; + height:32px; + line-height:32px; + margin:1px; + text-align:center; + text-transform:uppercase; + width:32px +} +.datepicker--nav{ + font-size:0; + margin:7px 0 2px; + position:relative; + text-align:center +} +.datepicker--nav-title{ + border-radius:16px; + cursor:pointer; + display:inline-block; + font-family:var(--text-font-family); + font-size:15px; + line-height:32px; + padding:0 12px; + position:relative; + transition:background-color .2s ease-in-out 0s,color .2s ease-in-out 0s +} +.datepicker--nav-title i{ + font-style:normal +} +.datepicker--nav-title:hover{ + background:var(--surface-grey-2) +} +.datepicker--nav-title.-disabled-{ + background:none; + cursor:default +} +.datepicker--nav-action{ + cursor:pointer; + font-size:0; + height:28px; + position:absolute; + right:10px; + top:3px; + width:28px; + z-index:1 +} +.datepicker--nav-action i{ + --icon-size:28px; + color:var(--icon-rest) +} +.datepicker--nav-action:hover i{ + color:var(--icon-active) +} +.datepicker--nav-action:first-child{ + left:10px; + right:auto; + transform:rotate(180deg) +} +.datepicker--nav-action.-disabled-{ + display:none +} + +.colour-label-ind,.colour-label .file-block-title:after,.colour-label .shared-folder-info-block:after,.colour-label .tranfer-filetype-txt:after{ + background-color:var(--label-grey); + border-radius:100%; + content:""; + display:block; + height:8px; + width:8px +} +.colour-label .file-block-title:after,.colour-label .shared-folder-info-block:after,.colour-label .tranfer-filetype-txt:after{ + position:absolute; + right:6px; + top:9px +} +.colour-label-ind.red,.colour-label.red .file-block-title:after,.colour-label.red .shared-folder-info-block:after,.colour-label.red .tranfer-filetype-txt:after{ + background-color:var(--label-red) +} +.colour-label-ind.orange,.colour-label.orange .file-block-title:after,.colour-label.orange .shared-folder-info-block:after,.colour-label.orange .tranfer-filetype-txt:after{ + background-color:var(--label-orange) +} +.colour-label-ind.yellow,.colour-label.yellow .file-block-title:after,.colour-label.yellow .shared-folder-info-block:after,.colour-label.yellow .tranfer-filetype-txt:after{ + background-color:var(--label-yellow) +} +.colour-label-ind.green,.colour-label.green .file-block-title:after,.colour-label.green .shared-folder-info-block:after,.colour-label.green .tranfer-filetype-txt:after{ + background-color:var(--label-green) +} +.colour-label-ind.blue,.colour-label.blue .file-block-title:after,.colour-label.blue .shared-folder-info-block:after,.colour-label.blue .tranfer-filetype-txt:after{ + background-color:var(--label-blue) +} +.colour-label-ind.purple,.colour-label.purple .file-block-title:after,.colour-label.purple .shared-folder-info-block:after,.colour-label.purple .tranfer-filetype-txt:after{ + background-color:var(--label-purple) +} +.active-folder-link .colour-label-ind,.active-folder-link .colour-label .file-block-title:after,.active-folder-link .colour-label .shared-folder-info-block:after,.active-folder-link .colour-label .tranfer-filetype-txt:after{ + display:none +} +.colour-label .shared-folder-info-block:after{ + right:2px; + top:13px +} +.rtl .colour-label .shared-folder-info-block:after{ + left:2px; + right:auto +} +.nw-fm-tree-item .colour-label-ind{ + display:inline-block; + margin:8px 6px; + vertical-align:middle +} +.nw-fm-tree-item:not(.linked):not(.on-gallery) .colour-label-ind{ + -webkit-margin-end:33px; + margin-inline-end:33px +} +.rtl .nw-fm-tree-item .colour-label-ind{ + left:36px; + right:auto +} +.nw-fm-tree-item.hovered .colour-label-ind,.nw-fm-tree-item.selected .colour-label-ind,.nw-fm-tree-item:hover .colour-label-ind{ + box-shadow:0 0 0 1px var(--stroke-main) +} +.nw-fm-tree-item.linked.on-gallery .colour-label-ind{ + right:70px +} +.nw-fm-tree-item.label{ + -webkit-padding-end:46px; + padding-inline-end:46px +} +.colour-label .file-block-title{ + -webkit-padding-end:18px; + padding-inline-end:18px +} +.colour-label .shared-folder-info-block{ + -webkit-padding-end:12px; + padding-inline-end:12px; + padding-right:12px; + position:relative +} +.data-block-view.colour-label .shared-folder-info-block{ + -webkit-padding-end:18px; + padding-inline-end:18px; + position:relative +} +.data-block-view.colour-label .shared-folder-info-block:after{ + right:6px; + top:24px +} +.rtl .data-block-view.colour-label .shared-folder-info-block:after{ + left:6px; + right:auto +} +.colour-label .tranfer-filetype-txt{ + -webkit-padding-end:24px; + padding-inline-end:24px +} +.data-block-view.colour-label .tranfer-filetype-txt{ + -webkit-padding-end:12px; + padding-inline-end:12px +} +.colour-label .tranfer-filetype-txt:after{ + right:12px; + top:12px +} +.rtl .colour-label .tranfer-filetype-txt:after{ + left:12px; + right:auto +} +.filter-block.body,.filter-block.tree{ + -webkit-padding-end:38px; + -webkit-padding-start:7px; + background-color:var(--stroke-grey-3); + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + box-shadow:inset 0 0 0 1px rgba(0, 0, 0, .1); + color:var(--text-color-high); + float:right; + font-size:0; + height:20px; + margin:8px 0 0; + padding:0; + padding-inline-end:38px; + padding-inline-start:7px; + position:relative; + white-space:nowrap +} +.filter-block.tree{ + -webkit-margin-end:5px; + margin-inline-end:5px; + margin-top:0 +} +.filter-block.body *,.filter-block.tree *{ + display:inline-block; + vertical-align:top +} +.filter-block.info{ + font-size:12px; + line-height:19px; + padding:0 2px 0 0 +} +.filter-block .colour-label-ind{ + margin:6px 0 0 6px; + position:static +} +.filter-block.close{ + cursor:pointer; + margin:2px; + position:absolute; + right:0; + top:0 +} +.filter-block.close i{ + --icon-size:16px; + --mask-color:var(--icon-rest); + transition:var(--transition-color) +} +.filter-block.close:hover i{ + --mask-color:var(--icon-active) +} +.fm-right-header .filter-block.body{ + -webkit-margin-end:5px; + margin:14px 0 0; + margin-inline-end:5px +} + +.btn-close-dialog,.export-links-warning-close,.fm-dialog-close{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-repeat:no-repeat; + cursor:pointer; + height:30px; + position:absolute; + transition:opacity .2s ease-in-out; + width:30px; + z-index:10 +} +.btn-close-dialog,.export-links-warning-close{ + background-position:-53px -4825px; + opacity:.3; + right:10px; + top:11px +} +.fm-dialog-close{ + background-position:-93px -4824px; + opacity:.6; + right:16px; + top:16px +} +.fm-dialog-close.medium{ + background-position:-132px -5347px +} +.btn-close-dialog:hover,.fm-dialog-close:hover{ + opacity:.8 +} +.fm-dialog-close.white{ + background-position:-53px -4875px; + opacity:.8 +} +.fm-notifications-bottom button:not(:last-child){ + -webkit-margin-end:8px; + margin-inline-end:8px +} +.fm-notifications-bottom>a{ + display:block +} +.fm-notifications-bottom{ + align-items:center; + box-sizing:border-box; + display:flex; + min-height:57px; + padding:24px 48px 48px; + position:relative +} +.overlay-close,.payment-close{ + min-width:56px; + position:absolute; + right:14px; + top:14px; + z-index:2300 +} +.overlay-close-icon,.payment-close-icon{ + --icon-size:24px; + --mask-color:var(--text-color-high); + cursor:pointer; + margin:0 auto; + opacity:.7; + position:static; + transition:all .2s ease-in-out +} +.overlay-close-icon:hover,.payment-close-icon:hover{ + opacity:1 +} +.overlay-close span,.payment-close span{ + color:hsla(0, 0%, 100%, .3); + display:block; + font-size:13px; + padding-top:2px; + text-align:center +} +.fm-dialog-body{ + padding:24px; + position:relative +} +.fm-main-user-management.main-blur-block{ + background-color:rgba(0, 0, 0, .1); + display:block; + height:100%; + width:100% +} +.mega-dialog.arrange-to-back,div.overlay.arrange-to-back{ + z-index:900 +} +.arrange-to-front,.dropdown.context.arrange-to-front{ + z-index:1300 +} +.mega-dialog.firefox-dialog{ + margin:-187px 0 0 -310px; + min-height:100px; + width:620px +} +.mega-dialog.bandwidth-dialog{ + min-height:657px; + width:964px +} +.big-padding .fm-dialog-close{ + right:14px; + top:19px +} +.bottom-checkbox{ + display:table-cell; + height:56px; + position:relative; + vertical-align:middle +} +.bottom-checkbox .radio-txt{ + float:none; + line-height:18px; + max-width:none; + padding-left:35px +} +.rounded-tip-button{ + height:24px; + position:relative; + width:24px +} +.rounded-tip-button>i{ + --icon-size:24px; + cursor:pointer; + display:block; + position:absolute +} +.rounded-tip-button .dropdown{ + opacity:0; + -webkit-transition:opacity .2s ease-in-out,visibility .2s ease-in-out; + transition:opacity .2s ease-in-out,visibility .2s ease-in-out; + visibility:hidden +} +.rounded-tip-button:hover .dropdown{ + opacity:1; + visibility:visible +} +.mega-dialog.new-group-chat .content-block{ + padding:0 +} +.mega-dialog.new-group-chat .group-chat-dialog.content{ + padding:0 48px +} +.mega-dialog.new-group-chat,.mega-dialog.send-contact{ + width:420px +} +.fr.fontsize2 .mega-dialog.new-group-chat{ + width:382px +} +body.de .mega-dialog.new-group-chat{ + width:440px +} +.mega-dialog .contacts-search-scroll{ + height:336px !important +} +.mega-dialog.new-group-chat .fm-dialog-content,.mega-dialog.send-contact .fm-dialog-content{ + padding:0 0 0 12px +} +.mega-dialog.new-group-chat .contacts-search-scroll,.mega-dialog.send-contact .contacts-search-scroll{ + height:320px !important; + margin:8px auto 0 +} +.contacts-search-header .small-icon.conversations{ + opacity:.65 +} +.mega-dialog.send-contact .content-block{ + padding:0 +} +.group-chat-dialog{ + color:var(--text-color-high); + font:var(--text-body1-bold); + padding:0 +} +.group-chat-dialog .open-invite-toggle,.group-chat-dialog .rotation-toggle{ + float:right; + margin:12px 0 0 +} +.group-chat-dialog.header{ + padding:14px 12px 10px 0 +} +.group-chat-dialog.description{ + color:var(--text-color-low); + font:var(--text-body1); + padding:0 12px 0 0 +} +.toggle-checkbox.right+.group-chat-dialog.header{ + padding-right:80px +} +.group-chat-dialog.checkbox{ + padding:0 0 12px +} +.radio-txt.lato.mid{ + color:var(--text-color-high); + font:var(--text-body1) +} +.mega-dialog .group-chat-dialog .checkboxOff,.mega-dialog .group-chat-dialog .checkboxOn{ + margin:14px 12px 0 0 +} +.mega-dialog .group-chat-dialog .radio-txt{ + padding-top:12px +} +.mega-dialog.new-group-chat .contacts-search-scroll.short,.mega-dialog.new-group-chat .group-chat-dialog.checkbox+.contacts-search-scroll{ + height:226px !important +} +.toggle-checkbox{ + background:linear-gradient(180deg, rgba(0, 0, 0, .15) 0, rgba(0, 0, 0, .1)); + border-radius:20px; + font-size:0; + height:20px; + line-height:0; + overflow:hidden; + position:relative; + width:40px +} +.group-chat-dialog .toggle-checkbox{ + margin:16px 12px 0 0 +} +.toggle-checkbox-wrap{ + background:linear-gradient(180deg, rgba(255, 51, 58, 0) 0, rgba(217, 0, 7, 0)); + border-radius:20px; + display:inline-block; + height:100%; + position:relative; + transition:all .2s ease-in-out; + width:50% +} +.checked .toggle-checkbox-wrap{ + background:linear-gradient(180deg, #ff333a 0, #d90007); + width:100% +} +.toggle-checkbox-button{ + background-color:#fff; + border-radius:100%; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + cursor:pointer; + height:16px; + margin:2px; + position:absolute; + right:0; + width:16px +} +.toggle-checkbox-button:before{ + border-radius:100%; + box-shadow:0 0 0 1px rgba(0, 0, 0, .15); + height:100%; + width:100% +} +.group-chat-dialog.checkbox.disabled .checkdiv,.group-chat-dialog.checkbox.disabled label.radio-txt{ + cursor:default !important +} +.mega-dialog.add-from-cloud{ + height:720px; + max-height:90%; + max-width:90%; + overflow:hidden; + width:800px +} +.mega-dialog.add-from-cloud .content{ + border-bottom:1px solid var(--stroke-grey-2); + overflow:hidden +} +.mega-dialog.add-from-cloud .fm-dialog-tabs:after{ + border-bottom:1px solid var(--stroke-grey-2); + content:""; + display:block; + left:0; + position:absolute; + width:100% +} +.mega-dialog.add-from-cloud .content-block{ + min-height:500px; + position:relative +} +.mega-dialog.add-from-cloud .content-block .content-container{ + position:relative; + z-index:1 +} +.mega-dialog.add-from-cloud .megaList2.megaListContainer{ + height:434px !important +} +.mega-dialog.add-from-cloud .megaListContainer .data-block-bg{ + border-radius:8px; + width:192px +} +.mega-dialog.add-from-cloud .megaList-content{ + margin-bottom:0; + margin-left:5px; + margin-top:5px +} +.mega-dialog .fm-breadcrumbs-wrapper{ + max-width:calc(100% - 152px); + position:relative; + transition:max-width .2s ease-in-out +} +.mega-dialog .properties-breadcrumb .fm-breadcrumbs-wrapper.info{ + max-width:100% +} +.mega-dialog .active-search+.fm-breadcrumbs-wrapper{ + max-width:calc(100% - 302px) +} +.mega-dialog .fm-breadcrumbs-wrapper a{ + color:var(--text-color-medium); + text-decoration:none +} +.mega-dialog .properties-breadcrumb .fm-breadcrumbs-wrapper a{ + color:var(--text-color-high) +} +.mega-dialog.add-from-cloud .fm-header-buttons{ + background:transparent +} +.mega-dialog.add-from-cloud .fm-header-buttons input{ + background:transparent; + border-radius:4px; + color:var(--stroke-main-inverted); + font:var(--text-body1); + padding:5px +} +.mega-dialog.add-from-cloud .fm-header-buttons input::placeholder{ + color:var(--stroke-main-inverted); + opacity:.3 +} +.mega-dialog.add-from-cloud .fm-header-buttons.active-search input{ + background:var(--surface-grey-6); + border:1px solid var(--stroke-grey-2); + border-radius:50px +} +.mega-dialog.add-from-cloud .fm-header-buttons i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + cursor:pointer; + display:block; + float:left; + margin:0 0 0 5px +} +.mega-dialog.add-from-cloud .fm-header-buttons.active-search i{ + --mask-color:var(--icon-inactive) +} +.mega-dialog.add-from-cloud .fm-header-buttons i.icon-preview-reveal{ + display:block; + float:left; + margin:3px 0 0 +} +.mega-dialog.add-from-cloud .fm-header-buttons i.icon-close-component{ + position:absolute; + right:14px; + top:5px +} +.mega-dialog.add-from-cloud .chat-fm-view-mode-selector i{ + --mask-color:var(--icon-inactive) +} +.mega-dialog.add-from-cloud .chat-fm-view-mode-selector i.active{ + --mask-color:var(--icon-active); + border-bottom:2px solid var(--secondary-blue) +} +.mega-dialog.add-from-cloud.has-breadcrumbs-bottom .fm-dialog-scroll{ + height:572px !important +} +.mega-dialog .fm-breadcrumbs-wrapper.breadcrumbs-bottom{ + background-color:initial; + max-width:none; + overflow:visible; + position:relative; + width:100%; + z-index:10 +} +.mega-dialog .fm-breadcrumbs-wrapper.breadcrumbs-bottom .fm-breadcrumbs-block{ + height:40px; + overflow:visible; + padding:5px 0 0 5px +} +.mega-dialog .fm-breadcrumbs-wrapper.breadcrumbs-bottom .crumb-overflow-link{ + background:none +} +.mega-dialog .fm-breadcrumbs-wrapper.breadcrumbs-bottom .crumb-overflow-link .breadcrumb-dropdown-link:hover{ + background:var(--surface-grey-1) +} +.mega-dialog .fm-breadcrumbs-wrapper.breadcrumbs-bottom .fm-breadcrumbs:first-child{ + background-color:initial +} +.mega-dialog .fm-breadcrumbs-wrapper .fm-breadcrumbs:first-child{ + flex-shrink:0 +} +.mega-dialog .properties-breadcrumb .fm-breadcrumbs-wrapper.info .fm-breadcrumbs:not(.cloud-drive):first-child{ + flex-shrink:unset +} +.mega-dialog .fm-breadcrumbs-wrapper .right-arrow-bg.recycle-item{ + background-position:8px -8036px +} +.mega-dialog .fm-breadcrumbs-wrapper .right-arrow-bg.inbox-item{ + background-position:4px -6717px +} +.mega-dialog .fm-breadcrumbs-wrapper.breadcrumbs-bottom .right-arrow-bg span{ + margin:-2px 0 0; + padding:0 2px +} +.mega-dialog .breadcrumb-dropdown{ + position:absolute; + top:100% +} +.mega-dialog .breadcrumbs-bottom .breadcrumb-dropdown{ + bottom:100%; + top:auto +} +.mega-dialog .breadcrumb-dropdown a,.mega-dialog .breadcrumb-dropdown a:active{ + color:unset; + text-decoration:none +} +.mega-dialog .properties-breadcrumb .breadcrumb-dropdown a,.mega-dialog .properties-breadcrumb .breadcrumb-dropdown a:active{ + color:var(--stroke-main-inverted) +} +.mega-dialog .properties-breadcrumb .breadcrumb-dropdown.ps--active-y a{ + margin-right:4px +} +.fm-dialog-table.grid-table th.grid-first-th i{ + float:none; + margin:0 auto +} +.fm-dialog-table.grid-table{ + margin:0 24px 0 8px; + width:calc(100% - 32px) +} +.fm-dialog-table.grid-table td.extras-column{ + padding-inline:0; + width:24px +} +.fm-dialog-table.grid-table .tranfer-filetype-txt{ + padding-top:0 +} +.fm-dialog-table.grid-table .grid-status-icon{ + margin:0 auto +} +.mega-dialog.add-from-cloud .tranfer-filetype-txt{ + cursor:pointer; + max-width:900px +} +.fm-dialog-table.grid-table td .tooltip-handler-container{ + height:24px +} +.fm-dialog-table.grid-table th{ + padding-top:3px +} +.fm-dialog-table.grid-table th:first-child{ + padding:0; + width:40px +} +.fm-dialog-table.grid-table th:nth-child(2){ + width:100% +} +.fm-dialog-table.grid-table th:nth-child(3){ + background-image:none; + width:95px +} +.fm-dialog-table.grid-table th:nth-child(4){ + width:148px +} +.fm-dialog-table.grid-table th:nth-child(5){ + width:24px +} +.fm-dialog-table.grid-table th span{ + float:left +} +.fm-dialog-table.grid-table th i{ + --icon-size:18px; + --mask-color:var(--icon-rest); + display:block; + float:right +} +.fm-dialog-table.grid-table tr.ui-selected td:first-child:before,.fm-dialog-table.grid-table tr:hover td:first-child:before{ + left:-7px +} +.fm-dialog-table.grid-table tr.ui-selected td:last-child:before,.fm-dialog-table.grid-table tr:hover td:last-child:before{ + right:-7px +} +.fm-files-search{ + border-right:1px solid var(--stroke-grey-2); + margin:0 4px 0 0; + position:relative +} +.mega-dialog.add-from-cloud .fm-header-buttons.active-search i.icon-preview-reveal{ + left:5px; + position:absolute; + top:2px +} +.mega-dialog.add-from-cloud .fm-header-buttons.active-search input{ + margin-right:11px; + padding-left:32px; + padding-right:24px +} +.fm-files-search i.search{ + --icon-size:24px; + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-6px -474px; + background-repeat:no-repeat; + cursor:pointer; + display:block; + float:left; + -moz-opacity:.8; + -khtml-opacity:.8; + opacity:.8; + -webkit-transition:opacity .2s ease-in-out; + -moz-transition:opacity .2s ease-in-out; + -o-transition:opacity .2s ease-in-out; + -ms-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out +} +.active-search .fm-files-search i.search,.fm-files-search i.search:hover{ + -moz-opacity:1; + -khtml-opacity:1; + opacity:1 +} +.fm-files-search input{ + border:0; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#666; + float:left; + font-size:14px; + line-height:24px; + margin:0; + padding:0; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + width:0 +} +.fm-header-buttons.active-search input{ + padding:0 0 0 12px; + width:165px +} +.fm-picker-header{ + align-items:center; + display:flex; + height:48px; + position:relative +} +.fm-picker-header .fm-header-buttons{ + position:absolute; + right:5px +} +.add-from-cloud .dialog-empty-block,.fm-dialog-scroll{ + height:434px !important +} +.mega-dialog .public-link-icon{ + --mask-color:var(--icon-rest); + height:24px; + position:absolute; + right:10px; + top:0; + width:24px +} +.add-from-cloud .dialog-empty-block,.fm-dialog-scroll.blocks{ + box-shadow:0 -1px 0 0 rgba(0, 0, 0, .1) +} +.fm-dialog-scroll.blocks .content{ + padding-bottom:12px +} +.fm-dialog-scroll.blocks .data-block-view{ + margin:12px 0 0 12px +} +.fm-dialog-tabs{ + border-bottom:1px solid var(--stroke-grey-2); + padding:26px 0 0 +} +.add-from-cloud .fm-dialog-tab{ + border-bottom:2px solid transparent; + box-sizing:border-box; + color:var(--text-color-medium); + cursor:pointer; + float:left; + font:var(--text-h3); + height:32px; + margin-bottom:-1px; + padding:0 24px; + position:relative; + z-index:1 +} +.rtl .add-from-cloud .fm-dialog-tab{ + float:right +} +.add-from-cloud.no-incoming .fm-dialog-tab.incoming{ + display:none +} +.add-from-cloud .fm-dialog-tab.active{ + border-color:var(--stroke-info); + color:var(--text-color-high); + cursor:default +} +@media only screen and (max-width:1440px){ +.mega-dialog.add-from-cloud{ + width:800px +} +.mega-dialog.add-from-cloud .tranfer-filetype-txt{ + max-width:770px +} +} +@media only screen and (max-height:850px){ +.add-from-cloud .dialog-empty-block,.fm-dialog-scroll{ + height:434px !important +} +.mega-dialog.add-from-cloud.has-breadcrumbs-bottom .fm-dialog-scroll{ + height:372px !important +} +} +@media only screen and (max-width:1280px){ +.mega-dialog.add-from-cloud{ + width:800px +} +.mega-dialog.add-from-cloud .tranfer-filetype-txt{ + max-width:600px +} +} +@media only screen and (max-width:1024px){ +.mega-dialog.add-from-cloud{ + width:700px +} +.mega-dialog.add-from-cloud .tranfer-filetype-txt{ + max-width:250px +} +} +.message.body.dialog-wrapper{ + background-color:rgba(0, 0, 0, .02); + border:1px solid rgba(0, 0, 0, .05); + border-radius:4px; + margin:0; + padding:13px 15px +} +.dialog-wrapper .message.text-block{ + color:#666; + font-size:14px; + margin-right:0 +} +.footer-checkbox{ + float:left +} +.mega-dialog.truncate-conversation .fm-dialog-content{ + margin-bottom:24px +} +.fm-dialog-body.centered-content{ + font-size:0 +} +.chat-rename-dialog{ + width:400px +} +.chat-rename-dialog input{ + padding-left:10px; + width:260px +} +.chat-rename-dialog .rename-input-bl{ + margin-bottom:10px +} +.add-user-size-icon,.create-folder-size-icon{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:center -5509px; + background-repeat:no-repeat; + cursor:pointer; + height:20px; + opacity:.3; + position:absolute; + right:10px; + top:5px; + transition:opacity .2s ease-in-out; + width:20px; + z-index:40 +} +.add-user-size-icon:hover,.create-folder-size-icon:hover{ + -moz-opacity:.6; + -khtml-opacity:.6; + opacity:.6 +} +.add-user-size-icon.short-size,.create-folder-size-icon.short-size{ + background-position:center -5559px; + right:40px; + top:14px; + z-index:30 +} +.create-album-input-bl,.create-folder-input-bl,.fm-account-input,.rename-input-bl{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + box-sizing:border-box; + height:38px; + position:relative; + width:100% +} +.create-album-input-bl input,.create-folder-input-bl input,.fm-account-input input,.rename-input-bl input{ + background-color:initial; + background-repeat:no-repeat; + border:0; + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + height:36px; + margin:0; + padding:0 8px 0 40px; + transition:color .2s ease-in-out; + width:100% +} +.create-folder-input-bl input{ + float:right +} +.create-folder-input-bl input:-webkit-autofill,.create-folder-input-bl input:-webkit-autofill:focus,.create-folder-input-bl input:-webkit-autofill:hover{ + -webkit-text-fill-color:var(--text-color-high); + box-shadow:0 0 0 1000px var(--surface-grey-1) inset; + caret-color:var(--text-color-high); + transition:background-color 5000s ease-in-out 0s +} +.duplicate .create-folder-input-bl{ + border:1px solid var(--input-text-underline-error) +} +.create-folder-input-bl:focus-within,.create-folder-input-bl:hover:not(.duplicate .create-folder-input-bl){ + border:1px solid var(--secondary-blue) +} +.create-album-input-bl i,.create-folder-input-bl i{ + --icon-size:24px; + --mask-color:var(--icon-inactive); + float:left +} +.create-folder-input-bl input:focus+i{ + --mask-color:var(--icon-rest) +} +.chat-rename-group-dialog{ + padding:0 10px !important +} +.fm-account-input input{ + padding:0 8px +} +.error .fm-account-input{ + color:#d90007 +} +.nw-dark-overlay.megasync-overlay{ + background-color:var(--surface-black-bar); + transition:all .2s ease-in-out +} +.nw-dark-overlay.megasync-overlay .default-select-dropdown:after,.nw-dark-overlay.megasync-overlay .default-select-dropdown:before{ + content:unset +} +.nw-dark-overlay.megasync-overlay.downloading{ + background-color:rgba(34, 34, 34, .95) +} +.fm-dialog-close.big{ + background-image:url(../imagery/mega-download-dialog.cf6daa0027e27782.png); + background-position:-368px 7px; + opacity:.5; + right:17px; + top:17px +} +.fm-dialog-close.big:hover{ + opacity:.8 +} +.megasync-content.slider{ + background-color:#fff; + border-radius:24px; + box-shadow:var(--dialog-shadow); + display:block; + left:50%; + margin:-256px 0 0 -450px; + overflow:hidden; + position:absolute; + top:50%; + width:900px; + z-index:1200 +} +.warning .megasync-content.slider{ + margin-top:-301px +} +.downloading .megasync-content.slider{ + display:none +} +.megasync-body{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + min-height:inherit; + overflow:hidden; + padding:31px 0 0; + position:relative; + text-align:center +} +.megasync-slider.main-block{ + min-height:506px; + position:relative +} +.slide1 .megasync-slider.body-block{ + left:0 +} +.slide2 .megasync-slider.body-block{ + left:-768px +} +.slide3 .megasync-slider.body-block{ + left:-1536px +} +.megasync-slider.body-block{ + min-height:506px; + position:relative; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.megasync-info-txt a{ + cursor:pointer +} +.megasync-slide{ + font-family:LatoWeb,source_sans_proregular,sans-serif; + left:0; + min-height:481px; + opacity:0; + position:absolute; + transition:all .4s ease-in-out; + visibility:hidden; + width:900px +} +.megasync-slide.next{ + left:100% +} +.megasync-slide.prev{ + left:-100% +} +.files-ammount .megasync-slide.slide0{ + display:block +} +.megasync-slide.current{ + opacity:1; + visibility:visible +} +.megasync-slide.slide2{ + text-align:start +} +.megasync-img{ + height:463px; + position:relative +} +.megasync-backup-bg{ + background:linear-gradient(120deg, #fff, #fff 50%, #fafafa 0, #fafafa); + height:calc(100% + 56px); + left:-29px; + position:absolute; + top:-31px; + width:calc(100% + 56px) +} +.megasync-backup-img{ + --width:384px; + height:228px; + left:56px; + position:absolute; + top:126px; + width:384px; + z-index:1 +} +.megasync-img:before{ + background-image:url(../imagery/mega-download-dialog.cf6daa0027e27782.png); + background-position:42px -194px; + background-repeat:no-repeat; + content:""; + height:413px; + left:0; + position:absolute; + top:0; + width:100% +} +.megasync-img.img0:before{ + background-position:center -1069px; + border:1px dashed #d0d0d0; + -moz-border-radius:3px; + -webkit-border-radius:3px; + border-radius:3px; + bottom:auto; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + height:200px; + left:50%; + margin:84px 0 0 -300px; + overflow:hidden; + width:600px +} +.megasync-img.img2:before{ + background-position:center -581px +} +.megasync-header{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#333; + font-size:20px; + height:43px; + padding:4px 25px 0 +} +.megasync-header,.megasync-text{ + line-height:24px; + position:relative; + text-align:center +} +.megasync-text{ + color:#777; + font-size:15px; + height:109px; + margin:0 auto; + max-width:584px; + padding:0 +} +.megasync-info-txt{ + color:#777; + font-size:14px; + left:410px; + line-height:18px; + position:absolute; + top:107px; + width:180px +} +.megasync-info-arrow{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-position:-15px -2448px; + height:45px; + left:350px; + position:absolute; + top:207px; + width:46px +} +.megasync-dark-logo{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-position:-1px -1178px; + background-repeat:no-repeat; + color:#666; + display:inline-block; + height:68px; + margin:-23px 0 0 23px; + width:258px +} +.megasync-dark-logo,.megasync-listing{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box +} +.megasync-listing{ + margin:11px 0 0 129px; + padding:0 0 12px 82px; + position:relative; + text-align:start; + width:482px +} +.megasync-icon{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-position:0 -2289px; + height:64px; + left:0; + margin:0; + position:absolute; + width:64px +} +.megasync-icon.blink{ + background-position:-92px -2289px +} +.megasync-icon.infinity{ + background-position:-172px -2289px +} +.megasync-listing h3{ + color:#333; + font-size:16px; + line-height:20px; + margin:0; + padding:0 0 9px +} +.megasync-listing p{ + color:#777; + font-size:14px; + line-height:18px; + margin:0; + padding:0 +} +.megasync-slider-wrap{ + position:relative +} +.megasync-body button{ + min-width:0; + position:relative; + vertical-align:top +} +.megasync-buttons{ + margin:-76px 0 0; + position:absolute; + width:100% +} +.megasync-buttons button{ + padding:0 24px +} +.megasync-bottom-warning{ + background:var(--surface-main-inverted); + color:var(--text-color-high-inverted); + display:none; + font:var(--text-body1); + padding:10px; + position:relative; + table-layout:fixed; + text-align:start; + width:100% +} +.megasync-bottom-warning.visible,.warning .megasync-bottom-warning{ + display:table +} +.megasync-bottom-warning a{ + color:var(--text-color-high-inverted); + text-decoration:underline +} +.megasync-bottom-warning a:hover{ + text-decoration:none +} +.megasync-bottom-warning .download.big-icon{ + margin:0; + position:static; + top:0 +} +.megasync-bottom-warning span{ + display:table-cell; + padding:0; + text-align:start; + vertical-align:middle; + width:74px +} +.megasync-bottom-warning span.txt{ + padding:15px; + width:auto +} +.megasync-features{ + font-size:0; + height:423px +} +.megasync-feature{ + display:inline-block; + padding:20px 0 0; + width:30.5% +} +.megasync-feature-txt{ + color:#666; + font-family:var(--text-font-family-second-regular); + font-size:16px; + line-height:20px; + margin:-7px 0 0 +} +.megasync-content .fm-dialog-close{ + background:none; + opacity:.8; + right:16px; + top:16px +} +.rtl .megasync-content .fm-dialog-close{ + left:16px; + right:auto +} +.megasync-content .fm-dialog-close:hover{ + opacity:1 +} +.megasync-content .fm-dialog-close i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + margin-top:3px +} +.megasync-slide-info{ + box-sizing:border-box; + display:table-cell; + height:400px; + padding:0 47px 0 518px; + position:relative; + text-align:start; + vertical-align:middle; + width:100% +} +.megasync-slide-info .small-header{ + color:#3c434d; + font-size:14px; + line-height:17px; + text-transform:uppercase +} +.megasync-slide-info .small-header.positive{ + color:var(--secondary-green) +} +.megasync-slide-info .big-header{ + color:#3c434d; + font-family:LatoWebBold,source_sans_probold,Arial,sans-serif; + font-size:24px; + line-height:32px; + padding:10px 0 20px +} +.megasync-slide-info .txt{ + color:rgba(60, 67, 77, .7); + font-size:13px; + line-height:20px +} +.fm-versioning.overlay{ + background:var(--surface-grey-1); + height:100%; + left:0; + position:absolute; + top:0; + width:100%; + z-index:799 +} +.rtl .fm-versioning.overlay{ + direction:rtl +} +.fm-versioning.header{ + background:var(--surface-main); + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + height:64px +} +.fm-versioning.body{ + box-sizing:border-box; + display:inline-block; + height:calc(100% - 64px); + width:100% +} +.fm-versioning.pad{ + align-items:center; + box-sizing:border-box; + display:flex; + height:100%; + justify-content:space-between; + margin:0 auto; + max-width:1200px; + padding:0 50px +} +.fm-versioning .data-table{ + padding:0 +} +.fm-versioning .data-table:last-child{ + margin-bottom:12px +} +.fm-versioning.top-column{ + align-items:center; + display:flex; + white-space:nowrap +} +.fm-versioning.top-column:first-child{ + min-width:0; + width:100% +} +.fm-versioning.top-column.versioning-buttons{ + flex-shrink:0 +} +.fm-versioning.close,.fm-versioning.settings{ + cursor:pointer; + position:absolute; + top:20px +} +.fm-versioning.settings{ + left:20px +} +.rtl .fm-versioning.settings{ + left:auto; + right:20px +} +.fm-versioning.close{ + right:20px +} +.rtl .fm-versioning.close{ + left:20px; + right:auto +} +.fm-versioning.close i,.fm-versioning.settings i{ + --mask-color:var(--icon-rest); + --icon-size:24px +} +.fm-versioning.close:hover i,.fm-versioning.settings:hover i{ + --mask-color:var(--icon-active) +} +.fm-versioning.pad button{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.fm-versioning .medium-file-icon{ + display:inline-block; + flex-shrink:0; + margin:0; + vertical-align:middle +} +.fm-versioning.file-data{ + -webkit-margin-start:16px; + margin-inline-start:16px +} +.header .fm-versioning.file-data{ + box-sizing:border-box; + max-width:calc(100% - 64px); + width:auto +} +.fm-versioning.file-name{ + color:var(--text-color-medium); + font:var(--text-h2); + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.fm-versioning.file-name span.current{ + color:var(--text-color-info); + cursor:default; + font:var(--text-body1); + padding:0 0 0 10px +} +.fm-versioning.file-info span.current{ + color:var(--text-color-info) +} +.fm-versioning.file-path{ + align-items:center; + color:var(--text-color-medium); + display:flex; + font:var(--text-body2); + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.fm-versioning.file-path>span{ + align-items:center; + display:flex; + min-width:32px +} +.fm-versioning.file-path>span:first-of-type{ + flex-shrink:0 +} +.fm-versioning.file-path>span i{ + --icon-size:15px; + --mask-color:var(--icon-inactive) +} +.fm-versioning.file-path>span span{ + overflow:hidden; + text-overflow:ellipsis +} +.fm-versioning.scroll-bl{ + height:100%; + overflow:hidden; + width:100% +} +.fm-versioning.scroll-bl .content{ + margin:0 auto; + max-width:1200px; + padding:0 50px +} +.fm-versioning.data{ + color:var(--text-color-info); + font:var(--text-h2); + padding:24px 0 12px +} +.fm-versioning.file-name,.fm-versioning.modified-info,.fm-versioning.modified-time{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.fm-versioning.file-info{ + color:var(--text-color-low); + font:var(--text-body2) +} +.fm-versioning.file-icon{ + width:62px +} +.fm-versioning.file-data{ + width:auto +} +.fm-versioning.modified-time{ + width:100px +} +.fm-versioning.modified-time i,.fm-versioning.modified-time span{ + display:inline-block; + vertical-align:middle +} +.fm-versioning.modified-info{ + width:380px +} +.fm-versioning.button-container{ + width:176px +} +.fm-versioning.file-info .size{ + position:relative +} +.fm-versioning.buttons{ + display:flex; + opacity:0; + transition:all .2s ease-in-out; + visibility:hidden +} +.fm-versioning.buttons .delete-file,.fm-versioning.buttons .download-file,.fm-versioning.buttons .revert-file{ + border-radius:4px; + cursor:pointer; + padding:4px +} +.file-info-row .fm-versioning.buttons .delete-file:hover,.file-info-row .fm-versioning.buttons .download-file:hover,.file-info-row .fm-versioning.buttons .revert-file:hover{ + background:var(--surface-grey-2) +} +.file-info-row.active .fm-versioning.buttons .delete-file:hover,.file-info-row.active .fm-versioning.buttons .download-file:hover,.file-info-row.active .fm-versioning.buttons .revert-file:hover{ + background:var(--surface-mid-grey) +} +.fm-versioning.buttons .download-file,.fm-versioning.buttons .preview-file,.fm-versioning.buttons .revert-file{ + -webkit-margin-end:8px; + margin-inline-end:8px +} +.file-info-row:hover .fm-versioning.buttons{ + opacity:1; + visibility:visible +} +.fm-versioning.buttons i{ + --mask-color:var(--icon-rest); + --icon-size:24px; + margin:0 +} +.fm-versioning.buttons div:not(.disabled):hover i{ + --mask-color:var(--icon-active) +} +.fm-versioning.buttons i.disabled{ + --mask-color:var(--icon-inactive); + opacity:1 +} +.fm-versioning.buttons div.disabled{ + opacity:1 +} +.drag-n-drop.overlay{ + background-color:rgba(0, 0, 0, .4); + height:100%; + left:0; + position:absolute; + top:0; + width:100%; + z-index:2000 +} +.drag-n-drop.content{ + background-color:#fff; + border-radius:4px; + display:table; + height:168px; + left:50%; + margin-top:-64px; + position:absolute; + top:50%; + transform:translateX(-50%); + width:400px +} +.drag-n-drop.header{ + background-image:url(../imagery/mega-overlay-sprite.bf2e646f2f83e139.png); + background-position:top; + background-repeat:no-repeat; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + color:rgba(51, 51, 51, .8); + font-family:source_sans_prolight,sans-serif; + font-size:36px; + height:211px; + letter-spacing:.2px; + line-height:40px; + margin:-83px auto 0; + padding:139px 30px 0; + text-align:center; + white-space:nowrap +} +.drag-n-drop.header strong{ + font-family:source_sans_probold,sans-serif; + font-weight:400 +} +.drag-n-drop hr{ + background-image:url(../imagery/mega-overlay-sprite.bf2e646f2f83e139.png); + background-position:left -211px; + background-repeat:repeat-x; + border:0; + height:1px; + margin:0; + padding:0; + width:100% +} +.drag-n-drop.info-block{ + color:#777e82; + font-size:14px; + line-height:18px; + opacity:.8; + padding:9px 30px 0; + text-align:center +} +.drag-n-drop.info-block i{ + background-image:url(../imagery/mega-overlay-sprite.bf2e646f2f83e139.png); + background-position:0 -240px; + background-repeat:no-repeat; + height:18px; + width:16px +} +.drag-n-drop.info-block i,.drag-n-drop.info-block span{ + display:inline-block; + vertical-align:top +} +.user-management-dialog .icon102{ + background-image:url(../imagery/mega-big-icons.af0093a3433fb0ee.png); + background-size:192px auto +} +.user-management-dialog .dialog-sub-title{ + color:var(--text-color-high); + font:var(--text-h3); + margin-bottom:8px; + margin-top:24px; + text-align:center; + width:100% +} +.user-management-dialog .dialog-txt{ + text-align:center; + width:100% +} +.mega-dialog.improved-recovery-steps .recover-paste-block h5.main-italic-header{ + display:block; + text-align:start +} +.mega-dialog.improved-recovery-steps .recover-paste-block{ + margin:30px auto 0 +} +.mega-dialog.export-chat-links-dialog{ + width:560px +} +.mega-dialog.export-chat-links-dialog .export-link-item{ + margin:12px auto 32px +} +.mega-dialog.export-chat-links-dialog .export-link-text-pad{ + padding:10px 0 +} +.mega-dialog.export-chat-links-dialog .file-link-block{ + font-size:15px; + padding:9px 16px +} +.mega-dialog.export-chat-links-dialog .export-chat-ink-warning{ + color:var(--text-color-medium); + font-size:15px +} +.fm-dialogs.export-chat-links-dialog .rename-input-bl input{ + padding-left:8px +} +.mega-dialog.join-group-chat{ + font-family:LatoWeb,source_sans_proregular,sans-serif; + margin:-241px 0 0 -240px; + text-align:center; + width:480px +} +.join-group-chat .fm-dialog-body{ + padding:12px 42px 24px +} +.join-group-chat .members{ + color:#666; + font-size:16px; + letter-spacing:-.18px; + line-height:21px; + padding:0 +} +.join-group-chat .info{ + color:#333; + font-size:14px; + letter-spacing:-.18px; + line-height:21px; + padding:32px 0 +} +.join-group-chat .huge-icon{ + margin:12px auto 0 +} +.join-group-chat button{ + margin:0 0 22px +} +.join-group-chat .red-link{ + color:#f0373a; + cursor:pointer; + display:inline-block; + font-size:16px; + letter-spacing:-.18px; + line-height:21px; + margin:0; + padding:0 +} +.join-group-chat .red-link:hover{ + text-decoration:underline +} +.mega-dialog.type-480px227{ + width:480px +} +.login-set-pass.content-block{ + color:var(--text-color-high); + font:var(--text-body1); + padding:22px 35px 35px; + text-align:center +} +.login-set-pass .text{ + padding:2px 0 18px +} +.login-set-pass .dialog-login-form{ + margin-top:9px +} +.dialog-empty-block{ + align-items:center; + display:none; + height:280px; + justify-content:center; + position:relative; + text-align:center +} +.dialog-empty-block.active{ + display:flex; + width:100% +} +.dialog-empty-block i,.dialog-empty-icon{ + --icon-size:72px; + --mask-color:var(--icon-rest); + display:inline-block +} +.dialog-empty-header{ + color:var(--text-color-high); + font:var(--text-h2); + margin-top:8px +} +.dialog-empty-pad i{ + --icon-size:96px; + --mask-color:var(--secondary-grey); + text-align:center +} +.dialog-empty-txt{ + color:var(--text-color-low); + font-size:13px; + line-height:21px; + padding:0 12px; + text-align:center +} +.fm-dialog-body .nw-fm-tree-item:hover{ + border:0 +} +.share-dialog-tree-panel{ + margin:0 -12px 12px; + overflow:hidden +} +.share-dialog-tree-panel .nw-fm-tree-item{ + padding-right:28px +} +.dialog-tree-panel-scroll{ + height:232px; + min-width:calc(100% - 12px) +} +.fm-dialog-body .nw-conversations-item{ + border:0; + color:#333; + font-family:LatoWeb; + font-size:14px; + letter-spacing:1px; + line-height:17px; + margin-left:34px; + padding:8px 0 14px; + width:343px +} +.contact-nickname-dialog .horizontal-bar{ + background-color:#00bfa5; + height:1px +} +.share-dialog-tree-panel.active{ + display:block +} +.dialog-content-block{ + min-width:100% +} +.mega-dialog .fm-picker-dialog-tree-panel ul .nw-fm-tree-item{ + -webkit-padding-start:5px; + -webkit-padding-end:5px; + -webkit-margin-end:15px; + margin-bottom:1px; + margin-inline-end:15px; + margin-top:1px; + padding-inline-end:5px; + padding-inline-start:5px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul .nw-fm-tree-item{ + -webkit-padding-start:28px; + padding-inline-start:28px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:52px; + padding-inline-start:52px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:76px; + padding-inline-start:76px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:100px; + padding-inline-start:100px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:124px; + padding-inline-start:124px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:148px; + padding-inline-start:148px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:172px; + padding-inline-start:172px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:196px; + padding-inline-start:196px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:220px; + padding-inline-start:220px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:244px; + padding-inline-start:244px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:268px; + padding-inline-start:268px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:292px; + padding-inline-start:292px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:316px; + padding-inline-start:316px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:340px; + padding-inline-start:340px +} +.mega-dialog .fm-picker-dialog-tree-panel ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul ul .nw-fm-tree-item{ + -webkit-padding-start:364px; + padding-inline-start:364px +} +.dark-direct-tooltip.custom-html{ + color:var(--text-color-high-inverted); + display:block; + opacity:0; + position:absolute; + z-index:1200 +} +.dark-direct-tooltip.custom-html .content i{ + -webkit-margin-start:20px; + --icon-size:24px; + --mask-color:var(--text-color-high-inverted); + cursor:pointer; + display:inline-block; + margin:0; + margin-inline-start:20px; + position:static; + vertical-align:middle +} +.dark-direct-tooltip.custom-html .green{ + color:var(--text-color-success-inverted) +} +.dark-direct-tooltip.custom-html.visible{ + opacity:1 +} +.dark-direct-tooltip.custom-html input{ + background-color:initial; + border:0; + color:var(--text-color-high-inverted); + display:inline-block; + font:var(--text-body1); + margin:0; + padding:0; + vertical-align:middle +} +.fm-right-account-block .add-more-img{ + background-position:0 -12376px +} +.share-dialog-panel-arrows{ + right:11px; + top:11px +} +.dropdown-item.disabled,.dropdown-item.notactive{ + background-position:0 -12376px; + opacity:.5 +} +.dialog-top-icon{ + margin:26px 0 17px +} +.dialog-top-icon.semi-huge-icon{ + margin:15px 0 2px +} +.dialog.header-before-icon{ + color:var(--text-color-high); + font:var(--text-h1); + padding:2px 0 8px +} +.dialog.p-after-icon{ + box-sizing:border-box; + margin:0; + padding:5px 0 16px +} +.dialog.big-buttons-block{ + font-size:0; + padding:24px 0 4px; + white-space:nowrap +} +.dialog.big-buttons-block button{ + display:inline-block; + margin:0 6px +} +.fm-dialog-body .centered-checkbox{ + padding:2px 0 10px +} +.fm-dialog-body .centered-checkbox:empty{ + padding:0 +} +@media only screen and (max-height:768px){ +.dialog.p-after-icon{ + padding-bottom:8px +} +} +.mega-dialog.verify-phone .achievements-icon{ + background-image:url(../imagery/mega-mid-achievements.3f1e4319d9df72af.png); + background-repeat:no-repeat; + background-size:380px auto +} +.mega-dialog.verify-phone button.close i{ + --mask-color:var(--text-color-white-high) +} +.mega-dialog footer aside .radio-txt{ + max-width:none; + padding-right:0; + padding-top:0 +} +.mega-dialog footer aside .checkdiv{ + margin-top:0 +} +.mega-dialog.set-password-dialog{ + margin:auto; + width:392px +} +.mega-dialog.set-password-dialog .existing-pass{ + padding:0 +} +.mega-dialog.set-password-dialog .existing-tip{ + color:#999; + font-size:12px; + line-height:20px; + padding:3px 0 13px; + text-align:center +} +.mega-dialog.set-password-dialog .existing-input{ + background:var(--surface-main); + border-radius:4px; + box-shadow:0 0 0 1px var(--stroke-grey-2); + display:flex; + height:36px; + margin-bottom:8px; + position:relative; + width:100% +} +.mega-dialog.set-password-dialog .existing-input-wrap{ + flex-grow:1; + padding-right:35px; + position:relative +} +.mega-dialog.set-password-dialog .existing-input i{ + --icon-size:24px; + --mask-color:var(--text-color-high); + cursor:pointer; + position:absolute; + right:10px; + top:6px +} +.rtl .mega-dialog.set-password-dialog .existing-input i{ + left:10px; + right:auto +} +.mega-dialog.set-password-dialog .existing-input input{ + background-color:initial; + border:0; + box-sizing:border-box; + caret-color:transparent; + color:var(--text-color-high); + font-family:LatoWeb,Arial,sans-serif; + font-size:14px; + height:36px; + line-height:36px; + margin:0; + padding:0 0 0 12px +} +.mega-dialog.set-password-dialog .existing-input button{ + border-radius:0 4px 4px 0; + flex-grow:0 +} +.rtl .mega-dialog.set-password-dialog .existing-input button{ + border-radius:4px 0 0 4px +} +.mega-dialog.set-password-dialog .pass-wrapper{ + position:relative +} +.mega-dialog.set-password-dialog .strength{ + background-color:green; + border-radius:12px; + color:#fff; + font-size:14px; + height:24px; + line-height:24px; + padding:0 10px; + position:absolute; + right:30px; + top:24px; + z-index:12 +} +.mega-dialog.set-password-dialog div.mega-input-title{ + font-size:12px +} +.mega-dialog.set-password-dialog .strength:empty{ + display:none +} +.good1+.set-password-dialog.strength,.mega-dialog.set-password-dialog .mega-input-title-ontop.good1:after{ + background-color:#ff2a0b +} +.good2+.set-password-dialog.strength,.mega-dialog.set-password-dialog .mega-input-title-ontop.good2:after{ + background-color:#ffc926 +} +.good3+.set-password-dialog.strength,.mega-dialog.set-password-dialog .mega-input-title-ontop.good3:after{ + background-color:#7ab148 +} +.good4+.set-password-dialog.strength,.mega-dialog.set-password-dialog .mega-input-title-ontop.good4:after{ + background-color:#7dd016 +} +.good5+.set-password-dialog.strength,.mega-dialog.set-password-dialog .mega-input-title-ontop.good5:after{ + background-color:#1da1e9 +} +.mega-dialog.set-password-dialog .mega-input-title-ontop.with-icon input{ + font-size:14px +} +.mega-dialog.set-password-dialog .retype .mega-input-title-ontop{ + margin-bottom:0 +} +.mega-dialog.password-dialog .instruction-message{ + line-height:20px; + padding:0 0 20px +} +.mega-dialog.password-dialog .decryption-password{ + position:relative +} +.mega-dialog.password-dialog .decryption-password i{ + --icon-size:24px; + --mask-color:var(--text-color-medium); + left:12px; + position:absolute; + top:6px +} +.mega-dialog.password-dialog .decryption-password input{ + text-indent:36px +} +.mega-dialog.password-dialog .decryption-in-progress i{ + animation:rotate .8s linear infinite +} +.mega-dialog.rename-dialog{ + min-width:480px +} +.mega-dialog.export-links-dialog{ + width:720px +} +.de .mega-dialog.export-links-dialog{ + width:760px +} +.mega-dialog.export-links-dialog .settings-row .info-icon{ + -webkit-margin-start:4px; + cursor:pointer; + display:inline-block; + height:24px; + margin-inline-start:4px; + transition:opacity .3s ease 0s; + vertical-align:middle; + width:24px +} +.mega-dialog.export-links-dialog .settings-row span{ + vertical-align:middle +} +.mega-dialog.export-links-dialog .half-sized-block,.mega-dialog.export-links-dialog .half-sized-block:first-child{ + padding:0 +} +.mega-dialog.export-links-dialog.embed header{ + display:block; + padding-bottom:0 +} +.mega-dialog.export-links-dialog.embed header h2{ + border-bottom:2px solid transparent; + cursor:pointer; + float:left; + opacity:.7; + padding:0 36px 6px; + text-align:center; + width:auto +} +.rtl .mega-dialog.export-links-dialog.embed header h2{ + float:right +} +.mega-dialog.export-links-dialog header h2.active{ + border-color:var(--stroke-info); + font:var(--text-h2-bold); + opacity:1 +} +.mega-dialog.export-links-dialog.embed .options{ + padding-top:10px +} +.mega-dialog.export-links-dialog .links-content .options{ + margin-bottom:24px +} +.export-links-dialog .checkdiv.disabled+label,.mega-dialog.export-links-dialog .checkdiv.disabled{ + cursor:default; + opacity:.6 +} +.mega-dialog.export-links-dialog .checkdiv.disabled input{ + cursor:default +} +.mega-dialog.export-links-dialog .rounded-tip-button{ + display:inline-block; + vertical-align:middle +} +.mega-dialog.export-links-dialog .keys-tip{ + -webkit-margin-start:-160px; + background:var(--surface-main); + border-radius:24px; + bottom:34px; + color:var(--text-color-medium); + font:var(--text-body1); + left:50%; + margin-inline-start:-160px; + padding:12px; + text-align:center; + width:320px +} +.mega-dialog.export-links-dialog .keys-tip.left-arrow{ + bottom:auto; + left:34px; + margin:0; + top:-47px +} +.rtl .mega-dialog.export-links-dialog .keys-tip.left-arrow{ + left:auto; + right:34px +} +.mega-dialog.export-links-dialog .keys-tip.left-arrow i{ + top:64px +} +.mega-dialog.export-links-dialog .illustration{ + --width:128px; + height:92px; + margin:16px auto; + width:128px +} +.mega-dialog.export-links-dialog .keys-tip .tip-header{ + color:var(--text-color-high); + font:var(--text-h3); + margin-bottom:8px +} +.mega-dialog.export-links-dialog .keys-tip .tip-text{ + padding:0 0 8px +} +.mega-dialog.export-links-dialog .keys-tip .tip-link,.mega-dialog.export-links-dialog .keys-tip .tip-link:visited{ + cursor:pointer; + font:var(--text-body2); + position:relative +} +.mega-dialog.export-links-dialog .pro{ + padding:38px 0 0; + position:relative +} +.mega-dialog.export-links-dialog .pro.disabled:before{ + content:""; + cursor:pointer; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100%; + z-index:10 +} +.rtl .mega-dialog.export-links-dialog .pro.disabled:before{ + left:auto; + right:0 +} +.mega-dialog.export-links-dialog .pro-only-feature{ + color:var(--text-color-error); + display:none +} +.mega-dialog.export-links-dialog .disabled .pro-only-feature{ + display:inline +} +.mega-dialog.export-links-dialog .pro .expiry-container{ + display:inline-block; + margin-top:15px; + position:relative +} +.mega-dialog.export-links-dialog .pro input.set-date{ + bottom:0; + cursor:pointer; + left:0; + opacity:0; + position:absolute; + right:0; + top:0; + z-index:9 +} +.mega-dialog.export-links-dialog .sub-header~button{ + margin:0 +} +.mega-dialog.export-links-dialog .sub-header+button,.mega-dialog.export-links-dialog .sub-header~button.remove{ + margin-top:15px +} +.mega-dialog.export-links-dialog button.expiry{ + -webkit-margin-end:4px; + margin-inline-end:4px; + z-index:1 +} +.mega-dialog.export-links-dialog button.expiry .label{ + z-index:1 +} +.mega-dialog.export-links-dialog button.expiry .common-date{ + overflow:hidden; + position:absolute; + top:0; + width:100% +} +.mega-dialog.export-links-dialog button.expiry input.set-date{ + background-color:initial; + border:0; + box-sizing:border-box; + color:var(--text-color-high); + cursor:pointer; + display:inline-block; + font-size:14px; + height:100%; + line-height:0; + margin:0; + opacity:0; + padding:0 15px; + position:absolute; + width:100%; + z-index:1200 +} +.mega-dialog.export-links-dialog button.remove-date{ + left:-4px; + z-index:1200 +} +.mega-dialog.export-links-dialog .links{ + padding:0; + position:relative +} +.mega-dialog.export-links-dialog .links-scroll{ + box-sizing:border-box; + max-height:398px; + padding:24px 48px 0; + position:relative +} +.mega-dialog.export-links-dialog .item{ + background:var(--surface-main); + border-radius:4px; + margin-top:8px; + padding:12px; + position:relative; + white-space:nowrap +} +.mega-dialog.export-links-dialog .links-scroll.ps--active-y .item{ + margin:6px 0 +} +.mega-dialog.export-links-dialog .item:first-child{ + margin-top:0 +} +.mega-dialog.export-links-dialog .item:last-child{ + margin-bottom:12px +} +.mega-dialog.export-links-dialog .item .transfer-filetype-icon{ + left:20px; + top:12px +} +.rtl .mega-dialog.export-links-dialog .item .transfer-filetype-icon{ + left:auto; + right:20px +} +.mega-dialog.export-links-dialog .item-title{ + -webkit-margin-start:36px; + -webkit-margin-end:3px; + color:var(--text-color-high); + display:inline-block; + height:29px; + margin-inline-end:3px; + margin-inline-start:36px; + max-width:calc(100% - 230px); + overflow:hidden; + padding-top:3px; + position:relative; + text-overflow:ellipsis; + vertical-align:top +} +.mega-dialog.export-links-dialog .item-size{ + -webkit-margin-start:8px; + display:inline-block; + margin-inline-start:8px; + padding-top:3px; + vertical-align:top +} +.mega-dialog.export-links-dialog .item-link{ + border:1px solid var(--stroke-grey-2); + border-radius:4px; + display:flex; + height:40px; + position:relative; + width:100% +} +.mega-dialog.export-links-dialog .input-wrap{ + flex:1; + vertical-align:top; + width:100% +} +.mega-dialog.export-links-dialog .item-link i{ + --icon-size:24px; + --mask-color:var(--text-color-medium); + left:6px; + position:absolute; + top:7px +} +.rtl .mega-dialog.export-links-dialog .item-link i{ + left:auto; + right:6px +} +.mega-dialog.export-links-dialog .item-link input{ + -webkit-padding-start:36px; + background-color:initial; + border:0; + box-sizing:border-box; + caret-color:transparent; + color:var(--text-color-high); + height:38px; + margin:0; + padding:0 10px; + padding-inline-start:36px; + width:100% +} +.mega-dialog.export-links-dialog .item-link button{ + border-radius:0 4px 4px 0; + height:38px +} +.rtl .mega-dialog.export-links-dialog .item-link button{ + border-radius:4px 0 0 4px +} +.mega-dialog.export-links-dialog .item-link.key{ + display:none +} +.mega-dialog.export-links-dialog .separately .item:not(.password-protect-link) .item-link{ + float:left; + width:calc(50% - 10px) +} +.rtl .mega-dialog.export-links-dialog .separately .item:not(.password-protect-link) .item-link{ + float:right +} +.mega-dialog.export-links-dialog .separately .item:not(.password-protect-link) .item-link.key{ + -webkit-margin-start:20px; + display:flex; + margin-inline-start:20px +} +.mega-dialog.export-links-dialog .icons{ + -webkit-padding-end:2px; + float:right; + padding-inline-end:2px; + position:relative +} +.rtl .mega-dialog.export-links-dialog .icons{ + float:left +} +.mega-dialog.export-links-dialog .icons i{ + -webkit-margin-start:8px; + --icon-size:24px; + cursor:pointer; + float:right; + margin-inline-start:8px; + position:relative +} +.rtl .mega-dialog.export-links-dialog .icons i{ + float:left +} +.mega-dialog.export-links-dialog .icons i input{ + border:0; + cursor:pointer; + height:100%; + margin:0; + opacity:0; + padding:0; + position:absolute; + width:100% +} +.mega-dialog.export-links-dialog .icons i.cog{ + opacity:.7 +} +.mega-dialog.export-links-dialog .dropdown.export{ + min-width:190px +} +.mega-dialog.export-links-dialog .dropdown.export.visible{ + display:block +} +.mega-dialog.export-links-dialog .dropdown.export .remove i{ + --mask-color:var(--label-red) +} +.mega-dialog.export-links-dialog .dropdown-item.link-button.light:not(.hidden){ + align-items:center; + display:flex; + white-space:nowrap; + width:auto +} +.mega-dialog.export-links-dialog .link-button.hidden+hr{ + display:none +} +.mega-dialog.export-links-dialog .fm-dialog-tab{ + background-image:linear-gradient(-180deg, hsla(0, 0%, 97.6%, .05), hsla(0, 0%, 93.3%, .1)); + border-bottom:1px solid #eee; + height:48px; + margin-top:8px; + width:100% +} +.mega-dialog.export-links-dialog .fm-dialog-tab .fm-tab-wrapper{ + align-items:center; + display:flex; + justify-content:center; + margin:0 auto; + width:auto +} +.mega-dialog.export-links-dialog .fm-dialog-tab .fm-tab{ + border-bottom:2px solid transparent; + color:var(--text-color-high); + cursor:pointer; + font-size:14px; + height:48px; + line-height:48px; + margin-top:-1px; + min-width:112px; + opacity:.4; + padding:0 20px; + text-align:center; + transition:all .2s ease-in-out +} +.mega-dialog.export-links-dialog .fm-dialog-tab .fm-tab:hover{ + border-bottom:2px solid var(--stroke-info); + opacity:.6; + transition:all .2s ease-in-out +} +.mega-dialog.export-links-dialog .fm-dialog-tab .fm-tab.active{ + border-bottom:2px solid var(--stroke-error); + height:48px; + line-height:48px; + opacity:1; + padding:0 20px +} +.mega-dialog.export-links-dialog .settings-container{ + overflow:auto +} +.mega-dialog.export-links-dialog .video-thumbnail *{ + background-color:#222; + display:inline-block; + height:72px; + position:relative; + width:128px +} +.mega-dialog.export-links-dialog .video-thumbnail div{ + left:0; + position:absolute; + top:0; + width:100% +} +.mega-dialog.export-links-dialog .file-information-container{ + -webkit-padding-start:16px; + display:table-cell; + padding-inline-start:16px; + vertical-align:middle +} +.mega-dialog.export-links-dialog .video-thumbnail-container{ + display:table-row +} +.mega-dialog.export-links-dialog .video-thumbnail{ + display:table-cell; + line-height:0; + vertical-align:middle; + width:10px +} +.mega-dialog.export-links-dialog .video-attributes{ + color:var(--text-color-medium); + display:table; + padding-top:5px +} +.mega-dialog.export-links-dialog .embed-setting{ + display:inline-block +} +.mega-dialog.export-links-dialog .embed-setting.disabled{ + cursor:none !important; + opacity:.3 +} +.mega-dialog.export-links-dialog .embed-setting.enabled{ + cursor:auto; + opacity:1 +} +.mega-dialog.export-links-dialog .video-resolution-by{ + display:inline-block; + line-height:48px +} +.mega-dialog.export-links-dialog .video-player-container{ + height:360px; + position:relative; + width:100% +} +.mega-dialog.export-links-dialog .video-player-container iframe{ + display:block; + margin:0 auto; + position:relative +} +.mega-dialog.export-links-dialog .embed-content .wrapper.embed-video{ + box-sizing:border-box; + display:table; + height:auto; + margin:24px 0; + width:100% +} +.mega-dialog.export-links-dialog .embed-content .code-field{ + background:var(--surface-main); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + display:flex; + min-height:20px; + padding:12px +} +.mega-dialog .embed-content .code-field span{ + color:var(--text-color-high); + display:inline-block; + font:var(--text-body1); + height:auto; + max-width:calc(100% - 24px); + overflow-wrap:break-word; + user-select:text +} +.mega-dialog.export-links-dialog .embed-content .wrapper.embed-code-container{ + margin-top:12px +} +.mega-dialog.export-links-dialog .embed-content .information-container{ + color:var(--text-color-medium); + font:var(--text-body2); + margin:12px 0 0; + opacity:.7 +} +.mega-dialog .embed-content .checkboxOn:not(input),.mega-dialog.export-links-dialog .embed-content .checkboxOff:not(input){ + margin:16px 14px +} +.mega-dialog .embed-content input.checkboxOff:not(input),.mega-dialog.export-links-dialog .embed-content input.checkboxOn:not(input){ + margin:0 +} +.mega-dialog.export-links-dialog .embed-content .radio-txt{ + color:var(--text-color-high); + line-height:48px; + padding:0 +} +.mega-dialog .embed-content .start-at-time,.mega-dialog.export-links-dialog .embed-content .video-resolution{ + display:inline-block; + margin:8px +} +.mega-dialog .embed-content .start-at-time input,.mega-dialog.export-links-dialog .embed-content .video-resolution input{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + height:32px; + line-height:27px; + margin:0; + max-width:80px; + outline:none; + padding:0 10px; + text-align:center; + width:auto +} +.mega-dialog.export-links-dialog .embed-content .settings-container{ + background-color:var(--stroke-main); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + margin-top:8px; + min-height:44px; + overflow:auto +} +.mega-dialog.export-links-dialog .embed-content .tab-icon{ + --icon-size:24px; + --mask-color:var(--icon-rest); + -webkit-margin-end:8px; + display:inline-block; + flex-grow:0; + flex-shrink:0; + margin-inline-end:8px +} +.mega-dialog.export-links-dialog .embed-content .fm-subheading{ + -webkit-margin-start:12px; + color:var(--text-color-medium); + font:var(--text-body1-bold); + margin-inline-start:12px; + margin-top:20px +} +.mega-dialog.export-links-dialog .embed-content .video-filename{ + color:var(--text-color-high); + font:var(--text-h3); + overflow:hidden; + word-break:break-word +} +.mega-dialog.export-links-dialog footer.empty{ + height:48px; + padding-top:0 +} +.mega-dialog.export-links-dialog footer.empty .footer-container{ + display:none +} +.mega-dialog.export-links-dialog .radio-txt{ + color:var(--text-color-high); + padding-inline-end:4px +} +.mega-dialog.export-links-dialog .key .checkdiv{ + -webkit-margin-end:4px; + margin-inline-end:4px +} +.mega-dialog.export-links-dialog .key .checkdiv:after{ + pointer-events:none +} +.mega-dialog.export-links-dialog footer{ + z-index:10 +} +.mega-dialog.create-file-dialog,.mega-dialog.create-folder-dialog{ + width:400px +} +.mega-dialog.fm-picker-dialog{ + width:670px +} +.mega-dialog.fm-picker-dialog .folder-container{ + box-sizing:border-box; + display:flex; + height:205px; + padding:0 +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-list{ + padding:15px 0 +} +.mega-dialog.fm-picker-dialog.arrange-to-back{ + z-index:500 +} +.mega-dialog.fm-picker-dialog .fm-picker-breadcrumbs{ + --mask-color:var(--icon-rest); + align-items:center; + display:flex; + height:32px; + max-width:100%; + overflow:hidden; + white-space:nowrap +} +.mega-dialog.fm-picker-dialog .breadcrumb-dropdown.active{ + left:4px +} +.rtl .mega-dialog.fm-picker-dialog .breadcrumb-dropdown.active{ + left:auto; + right:4px +} +.mega-dialog.fm-picker-dialog .icon{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-repeat:no-repeat; + background-size:48px auto; + height:24px; + width:24px +} +.mega-dialog.fm-picker-dialog .summary-container{ + height:auto; + position:relative; + width:100% +} +.mega-dialog.fm-picker-dialog .summary-row{ + align-items:center; + display:flex; + justify-content:space-between; + margin:24px; + position:relative +} +.mega-dialog.fm-picker-dialog.whitespaces.duplicate .summary-row.summary-selected{ + height:100px +} +.mega-dialog.fm-picker-dialog.whitespaces:not(.duplicate) .summary-row.summary-selected{ + height:80px +} +.mega-dialog.fm-picker-dialog.duplicate:not(.whitespaces) .summary-row.summary-selected{ + height:50px +} +.mega-dialog.fm-picker-dialog .summary-row.unfold{ + align-items:flex-start +} +.mega-dialog.fm-picker-dialog .summary-row .summary-title{ + -webkit-padding-end:12px; + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + padding-inline-end:12px; + position:relative; + text-align:start; + vertical-align:top; + width:30% +} +.mega-dialog.fm-picker-dialog .summary-row.unfold .summary-title{ + top:6px +} +.mega-dialog.fm-picker-dialog .summary-row .summary-input{ + border-radius:3px; + box-sizing:border-box; + font:var(--text-body1); + height:32px; + max-height:130px; + padding:0; + position:relative; + transition:.1s; + vertical-align:middle; + width:70% +} +.mega-dialog.fm-picker-dialog .summary-row .summary-input.unfold{ + height:auto +} +.mega-dialog.fm-picker-dialog .summary-input .item-row{ + bottom:0; + box-sizing:border-box; + height:32px; + left:0; + line-height:31px; + overflow:hidden; + position:relative; + transition:.1s; + vertical-align:middle; + white-space:nowrap; + width:100% +} +.rtl .mega-dialog.fm-picker-dialog .summary-input .item-row{ + left:auto; + right:0 +} +.mega-dialog.fm-picker-dialog .summary-input .item-row:hover{ + border:var(--stroke-grey-1); + border-radius:3px +} +.mega-dialog.fm-picker-dialog .summary-input .summary-ff-name,.mega-dialog.fm-picker-dialog .summary-input .summary-ff-name-ellipsis{ + -webkit-margin-start:36px; + display:inline-block; + height:32px; + line-height:32px; + margin-inline-start:36px; + max-width:280px; + overflow:hidden; + position:relative; + text-overflow:ellipsis; + vertical-align:top; + white-space:nowrap +} +.mega-dialog.fm-picker-dialog .summary-container .transfer-filetype-icon.chat{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-12px -4517px; + background-repeat:no-repeat; + background-size:48px auto; + height:24px; + opacity:.4; + width:24px +} +.mega-dialog.fm-picker-dialog .summary-container .transfer-filetype-icon.folder{ + background-position:-337px -717px +} +.mega-dialog.fm-picker-dialog .folder-container{ + height:280px; + position:relative; + width:100% +} +.mega-dialog.fm-picker-dialog .user-card-email.small.note{ + -webkit-margin-end:-8px; + -webkit-margin-start:-58px; + background:var(--surface-grey-1); + border-radius:4px; + color:var(--text-color-high); + font:var(--text-body2); + margin:12px 0 0; + margin-inline-end:-8px; + margin-inline-start:-58px; + padding:8px 16px; + text-align:center +} +.mega-dialog.fm-picker-dialog .dropdown.contact-preview{ + padding:12px 20px +} +.mega-dialog.fm-picker-dialog .dropdown.contact-preview .user-card-data{ + padding-right:0 +} +.mega-dialog.fm-picker-dialog .dropdown.contact-preview .contacts-info.body{ + padding:0 8px +} +.mega-dialog.fm-picker-dialog .summary-items.multi{ + cursor:pointer +} +.mega-dialog.fm-picker-dialog .fm-breadcrumbs{ + color:var(--text-color-medium); + cursor:pointer; + height:32px; + min-width:42px; + text-decoration:none !important +} +.mega-dialog.fm-picker-dialog .summary-input.high-light .fm-picker-breadcrumbs{ + display:none +} +.mega-dialog.fm-picker-dialog .item-row .summary-status{ + -webkit-padding-end:10px; + -webkit-padding-start:36px; + display:block; + height:32px; + line-height:31px; + overflow:hidden; + padding:0; + padding-inline-end:10px; + padding-inline-start:36px; + position:relative; + text-overflow:ellipsis; + vertical-align:top; + white-space:nowrap +} +.mega-dialog.fm-picker-dialog .summary-input .item-row:first-child .summary-ff-name{ + max-width:250px +} +.mega-dialog.fm-picker-dialog .summary-input .item-row:first-child .summary-ff-name-ellipsis{ + max-width:210px; + text-overflow:ellipsis +} +.mega-dialog.fm-picker-dialog .summary-input .item-row .delete-item{ + --mask-color:var(--icon-rest); + --icon-size:24px; + cursor:pointer; + display:none; + position:absolute; + right:8px; + top:4px +} +.rtl .mega-dialog.fm-picker-dialog .summary-input .item-row .delete-item{ + left:8px; + right:auto +} +.mega-dialog.fm-picker-dialog .summary-input .item-row .delete-item:hover{ + --mask-color:var(--icon-active) +} +.mega-dialog.fm-picker-dialog .summary-input .item-row span{ + height:32px; + left:0; + line-height:31px; + max-width:300px; + overflow:hidden; + position:relative; + text-overflow:ellipsis; + vertical-align:top; + white-space:nowrap +} +.rtl .mega-dialog.fm-picker-dialog .summary-input .item-row span{ + left:auto; + right:0 +} +.mega-dialog.fm-picker-dialog .summary-input .link-row .link-row-block{ + color:var(--text-color-high); + display:inline-block; + left:0; + max-width:412px +} +.rtl .mega-dialog.fm-picker-dialog .summary-input .link-row .link-row-block{ + left:auto; + right:0 +} +.mega-dialog.fm-picker-dialog .summary-row .summary-input .icon{ + -webkit-margin-end:4px; + -webkit-margin-start:8px; + display:inline-block; + margin:4px 0 0; + margin-inline-end:4px; + margin-inline-start:8px; + vertical-align:top +} +.mega-dialog.fm-picker-dialog .summary-input .ff-name{ + display:inline-block; + line-height:32px; + max-width:90px; + overflow:hidden; + text-overflow:ellipsis; + vertical-align:top; + white-space:nowrap +} +.mega-dialog.fm-picker-dialog .summary-row>.icon{ + background:var(--surface-main); + border:var(--stroke-grey-2); + border-radius:4px; + box-sizing:border-box; + cursor:pointer; + opacity:.6; + position:absolute; + right:0 +} +.rtl .mega-dialog.fm-picker-dialog .summary-row>.icon{ + left:0; + right:auto +} +.mega-dialog.fm-picker-dialog .summary-row>.icon:hover{ + opacity:.8 +} +.mega-dialog.fm-picker-dialog .summary-row .drop-down{ + top:4px +} +.mega-dialog.fm-picker-dialog .summary-row .add-more-img.icon,.mega-dialog.fm-picker-dialog .summary-row .drop-up{ + bottom:4px +} +.mega-dialog.fm-picker-dialog .side-pane{ + border-right:1px solid var(--stroke-grey-2); + box-sizing:border-box; + display:inline-block; + flex-grow:0; + flex-shrink:0; + height:280px; + position:relative; + width:56px +} +.rtl .mega-dialog.fm-picker-dialog .side-pane{ + border-left:1px solid var(--stroke-grey-2); + border-right:none +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-panel-header{ + height:40px; + position:relative; + width:100% +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-panel-header span{ + -webkit-padding-start:24px; + color:var(--text-color-high); + display:inline-block; + font-size:14px; + line-height:40px; + overflow:hidden; + padding-inline-start:24px; + position:relative; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + vertical-align:top; + white-space:nowrap +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-panel-header .dropdown-color-txt{ + -webkit-padding-start:0; + color:var(--text-color-high); + line-height:18px; + padding-inline-start:0 +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-panel-header .fm-picker-dialog-panel-arrows:not(.hidden){ + --icon-size:24px; + --mask-color:var(--icon-rest); + cursor:pointer; + display:inline-block; + left:8px; + position:relative; + top:8px; + vertical-align:top +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-panel-header .fm-picker-dialog-panel-arrows:not(.hidden):hover{ + --mask-color:var(--icon-active) +} +.rtl .mega-dialog.fm-picker-dialog .fm-picker-dialog-panel-header .fm-picker-dialog-panel-arrows:not(.hidden){ + left:auto; + right:8px +} +.mega-dialog.fm-picker-dialog .dialog-sorting-menu{ + left:130px; + padding:8px; + top:-40px; + width:200px +} +.mega-dialog.fm-picker-dialog .dialog-sorting-menu .dropdown-item{ + text-decoration:none +} +.mega-dialog.fm-picker-dialog .dialog-sorting-menu .dropdown-item span{ + padding-left:0 +} +.rtl .mega-dialog.fm-picker-dialog .dialog-sorting-menu{ + left:auto; + right:130px +} +.mega-dialog.fm-picker-dialog .search-bar{ + border-radius:16px; + box-sizing:border-box; + height:32px; + overflow:hidden; + padding:0 8px; + position:absolute; + right:24px; + top:4px; + width:190px +} +.rtl .mega-dialog.fm-picker-dialog .search-bar{ + left:24px; + right:auto +} +.mega-dialog.fm-picker-dialog .search-bar input{ + background-color:initial; + border:0; + color:var(--text-color-high); + font:var(--text-body1); + line-height:32px; + margin:0; + padding:0; + width:100% +} +.mega-dialog.fm-picker-dialog .search-bar input::placeholder{ + color:var(--text-color-low) +} +.mega-dialog.fm-picker-dialog .search-bar .icon{ + cursor:pointer; + position:absolute; + right:0; + top:0; + transition:.1s +} +.rtl .mega-dialog.fm-picker-dialog .search-bar .icon{ + left:0; + right:auto +} +.mega-dialog.fm-picker-dialog .search-bar .icon:hover{ + opacity:.7 +} +.mega-dialog.fm-picker-dialog .right-pane .dialog-tree-panel-scroll{ + box-sizing:border-box; + margin:8px 0 0; + overflow:hidden; + padding:0 8px; + position:relative +} +.mega-dialog.fm-picker-dialog .right-pane .dialog-tree-panel-scroll span{ + color:var(--text-color-high); + font:var(--text-body2); + overflow:hidden; + text-overflow:ellipsis +} +.mega-dialog.fm-picker-dialog .right-pane .dialog-tree-panel-scroll ul{ + padding:0 +} +.mega-dialog.fm-picker-dialog .right-pane .dialog-tree-panel-scroll li>span{ + --mask-color:var(--icon-rest); + border-radius:4px +} +.mega-dialog.fm-picker-dialog .right-pane .dialog-tree-panel-scroll li>span:hover{ + --mask-color:var(--icon-active) +} +.mega-dialog.fm-picker-dialog .right-pane .dialog-tree-panel-scroll li>span.nw-fm-tree-item{ + align-items:center; + display:flex; + height:24px; + position:relative +} +.mega-dialog.fm-picker-dialog .right-pane .dialog-tree-panel-scroll .nw-fm-tree-item.contains-folders.expanded .sprite-fm-mono.icon-arrow-right{ + background-image:none; + transform:rotate(90deg) +} +.mega-dialog.fm-picker-dialog .nw-fm-tree-folder{ + -webkit-padding-start:30px; + -webkit-margin-start:24px; + height:18px; + line-height:18px; + margin-inline-start:24px; + max-width:calc(100% - 40px); + padding-inline-start:30px +} +.mega-dialog.fm-picker-dialog .nw-fm-tree-folder:before{ + top:-3px +} +.mega-dialog.fm-picker-dialog .nw-fm-tree-item .nw-fm-tree-arrow{ + -webkit-margin-start:6px; + margin-inline-start:6px; + top:4px +} +.mega-dialog.fm-picker-dialog .nw-contact-item:hover,.mega-dialog.fm-picker-dialog .nw-fm-tree-item.dragover,.mega-dialog.fm-picker-dialog .nw-fm-tree-item:hover{ + background:var(--surface-grey-4) +} +.mega-dialog.fm-picker-dialog .nw-contact-item.selected,.mega-dialog.fm-picker-dialog .nw-fm-tree-item.selected{ + --mask-color:var(--icon-active); + background:var(--surface-grey-6) +} +.mega-dialog.fm-picker-dialog .nw-contact-item.selected:before,.mega-dialog.fm-picker-dialog .nw-fm-tree-item.selected:before{ + background:var(--secondary-blue); + border-radius:1px; + content:""; + height:calc(100% - 8px); + left:4px; + position:absolute; + top:4px; + width:2px +} +.rtl .mega-dialog.fm-picker-dialog .nw-contact-item.selected:before,.rtl .mega-dialog.fm-picker-dialog .nw-fm-tree-item.selected:before{ + left:auto; + right:4px +} +.mega-dialog.fm-picker-dialog .nw-fm-tree-item.disabled{ + background-position:0 -12376px; + opacity:.5 +} +.mega-dialog.fm-picker-dialog .nw-fm-tree-item.linked{ + position:relative +} +.mega-dialog.fm-picker-dialog .nw-fm-tree-item .colour-label-ind{ + right:32px; + top:8px +} +.rtl .mega-dialog.fm-picker-dialog .nw-fm-tree-item .colour-label-ind{ + left:32px; + right:auto +} +.mega-dialog.fm-picker-dialog .nw-fm-tree-item.linked .file-status-ico{ + top:0 +} +.mega-dialog.fm-picker-dialog .my-chat-list{ + box-sizing:border-box; + display:inline-block; + height:310px; + position:relative; + width:308px +} +.mega-dialog.fm-picker-dialog .selected-list{ + box-sizing:border-box; + display:inline-block; + height:310px; + position:absolute; + right:0; + top:0; + width:308px +} +.rtl .mega-dialog.fm-picker-dialog .selected-list{ + left:0; + right:auto +} +.mega-dialog.fm-picker-dialog .my-chat-list:after{ + background-color:rgba(0, 0, 0, .1); + content:""; + display:block; + height:100%; + position:absolute; + right:0; + top:0; + width:1px +} +.rtl .mega-dialog.fm-picker-dialog .my-chat-list:after{ + left:0; + right:auto +} +.mega-dialog.fm-picker-dialog .dialog-tree-panel-scroll .delete-img.icon{ + position:absolute; + right:24px; + top:0 +} +.rtl .mega-dialog.fm-picker-dialog .dialog-tree-panel-scroll .delete-img.icon{ + left:24px; + right:auto +} +.mega-dialog.fm-picker-dialog .delete-img{ + background-position:0 -12400px; + cursor:pointer; + opacity:.3 +} +.mega-dialog.fm-picker-dialog .delete-img:hover{ + opacity:.9 +} +.mega-dialog.fm-picker-dialog .add-more-img{ + background-position:0 -12376px +} +.mega-dialog.fm-picker-dialog .dialog-subtitle{ + -webkit-margin-start:190px; + display:block; + height:auto; + left:50%; + margin-bottom:24px; + margin-inline-start:190px; + width:380px +} +.rtl .mega-dialog.fm-picker-dialog .dialog-subtitle{ + left:auto; + right:50% +} +.mega-dialog.fm-picker-dialog .summary-container .target-icon,.mega-dialog.fm-picker-dialog .summary-container .transfer-filetype-icon{ + -webkit-margin-start:8px; + --icon-size:24px; + --mask-color:var(--icon-rest); + margin:4px 0 0; + margin-inline-start:8px; + position:absolute +} +.mega-dialog.fm-picker-dialog .dialog-button-container{ + display:block; + height:56px; + position:relative; + width:100% +} +.mega-dialog.fm-picker-dialog .dialog-button-container:before{ + background-color:var(--stroke-grey-1); + content:""; + display:block; + height:1px; + position:absolute; + top:0; + width:100% +} +.mega-dialog.fm-picker-dialog .dialog-button-container button{ + margin:12px 0; + padding:0 24px; + position:relative +} +.mega-dialog.fm-picker-dialog .summary-input.placeholder{ + align-items:center; + background:var(--surface-grey-4); + color:var(--text-color-low); + display:flex +} +.mega-dialog.fm-picker-dialog .search-bar.placeholder i{ + --mask-color:var(--icon-inactive); + --icon-size:24px; + -webkit-margin-end:8px; + margin-inline-end:8px +} +.mega-dialog.fm-picker-dialog .search-bar.placeholder .search-icon-reset{ + -webkit-margin-end:0; + --mask-color:var(--icon-rest); + cursor:pointer; + margin-inline-end:0 +} +.mega-dialog.fm-picker-dialog .summary-input.focus{ + border:1px solid var(--stroke-grey-2); + color:var(--text-color-low) +} +.mega-dialog.fm-picker-dialog .summary-input.active{ + background:var(--surface-main); + border:1px solid var(--stroke-grey-2); + color:var(--text-color-high) +} +.mega-dialog.fm-picker-dialog .summary-input.correct-input{ + background:var(--surface-main); + border:1px solid var(--stroke-grey-2); + color:var(--text-color-medium); + vertical-align:top +} +.mega-dialog.fm-picker-dialog .summary-input.correct-input .choose-target{ + display:none +} +.mega-dialog.fm-picker-dialog .summary-input.error{ + background:var(--banner-background-error); + box-shadow:0 0 0 1px var(--banner-border-error); + color:var(--banner-text-error) +} +.mega-dialog.fm-picker-dialog .summary-input.disable{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + color:var(--text-color-low); + opacity:.3 +} +.mega-dialog.fm-picker-dialog .summary-input.error-message{ + color:var(--text-color-high) +} +.mega-dialog.fm-picker-dialog .summary-input.high-light{ + background:var(--surface-grey-6); + box-shadow:0 0 0 1px var(--stroke-grey-6); + color:var(--text-color-low) +} +.mega-dialog.fm-picker-dialog .summary-input #f-name-input{ + background-color:initial; + border:none; + box-sizing:border-box; + color:var(--text-color-medium); + font:var(--text-body1); + margin:0; + max-width:365px; + padding:0 8px 0 40px; + width:365px +} +.mega-dialog.fm-picker-dialog .nw-contact-item .encrypted-spacer{ + width:16px +} +.mega-dialog.fm-picker-dialog .nw-contact-item .group-chat-icon{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.mega-dialog.fm-picker-dialog .summary-input.unfold .item-row:first-child .summary-ff-name,.mega-dialog.fm-picker-dialog .summary-input.unfold .item-row:first-child .summary-ff-name-ellipsis{ + max-width:280px +} +.mega-dialog.fm-picker-dialog .summary-input.unfold .item-row:hover .delete-item{ + display:inline-block +} +.mega-dialog.fm-picker-dialog .summary-row .summary-input .item-row-group{ + max-height:130px; + overflow:hidden; + padding:0; + position:relative; + width:100% +} +.mega-dialog.fm-picker-dialog .fm-breadcrumbs .right-arrow-bg{ + cursor:pointer; + font:var(--text-body1) +} +.mega-dialog.fm-picker-dialog .fm-breadcrumbs.has-next-button .sprite-fm-mono.icon-arrow-right{ + top:3px +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-button{ + cursor:pointer; + height:64px; + position:relative; + width:100% +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-button i{ + --icon-size:32px; + --mask-color:var(--icon-rest); + left:12px; + position:absolute; + top:14px; + transition:.1s +} +.rtl .mega-dialog.fm-picker-dialog .fm-picker-dialog-button i{ + left:auto; + right:12px +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-button.active i,.mega-dialog.fm-picker-dialog .fm-picker-dialog-button:hover i{ + --mask-color:var(--icon-active) +} +.mega-dialog.fm-picker-dialog .side-pane .fm-picker-dialog-button .tooltip{ + background-color:var(--stroke-main-inverted); + border-radius:4px; + bottom:22px; + color:var(--text-color-high-inverted); + font:var(--text-body2); + height:20px; + left:44px; + line-height:20px; + margin:2px; + opacity:0; + padding:0 8px; + pointer-events:none; + position:absolute; + transition:left .5s ease-in,visibility 5s,opacity .3s ease-in; + visibility:hidden; + white-space:nowrap; + z-index:1129 +} +.rtl .mega-dialog.fm-picker-dialog .side-pane .fm-picker-dialog-button .tooltip{ + left:auto; + right:44px +} +.mega-dialog.fm-picker-dialog .side-pane .fm-picker-dialog-button:hover .tooltip{ + left:50px; + opacity:1; + visibility:visible +} +.rtl .mega-dialog.fm-picker-dialog .side-pane .fm-picker-dialog-button:hover .tooltip{ + left:auto; + right:50px +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-button .left-border{ + height:64px; + left:0; + position:absolute; + top:0; + transition:all .2s ease-in-out; + width:3px +} +.rtl .mega-dialog.fm-picker-dialog .fm-picker-dialog-button .left-border{ + left:auto; + right:0 +} +.mega-dialog.fm-picker-dialog .side-pane .fm-picker-dialog-button.active{ + cursor:default +} +.mega-dialog.fm-picker-dialog .side-pane .fm-picker-dialog-button.active i{ + opacity:1 +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-button.active .left-border{ + background:var(--stroke-info) +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-tree-panel{ + display:none; + height:280px; + width:calc(100% - 56px) +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-panel-arrows{ + right:11px; + top:11px +} +.rtl .mega-dialog.fm-picker-dialog .fm-picker-dialog-panel-arrows{ + left:11px; + right:auto +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-txt{ + display:none +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-txt.cloud-drive{ + color:#df0000 +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-txt.shared-with-me{ + color:#ffa600 +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-txt.conversations{ + color:#1fa5df +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-txt.rubbish-bin{ + color:#26b700 +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-txt.active{ + display:inline +} +.mega-dialog.fm-picker-dialog .fm-picker-dialog-tree-panel.active{ + display:block +} +.mega-dialog.fm-picker-dialog .share-dialog-permissions{ + align-items:center; + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + cursor:pointer; + display:flex; + height:36px; + line-height:34px; + padding:0 12px +} +.mega-dialog.fm-picker-dialog .share-dialog-permissions i{ + --icon-size:24px; + -webkit-margin-end:8px; + --mask-color:var(--text-color-medium); + display:none; + margin-inline-end:8px +} +.mega-dialog.fm-picker-dialog .share-dialog-permissions.full-access i.full-access,.mega-dialog.fm-picker-dialog .share-dialog-permissions.read-and-write i.read-and-write,.mega-dialog.fm-picker-dialog .share-dialog-permissions.read-only i.read-only{ + display:block +} +.mega-dialog.fm-picker-dialog .share-dialog-permissions i.down-arrow{ + -webkit-margin-start:8px; + -webkit-margin-end:0; + display:block; + margin-inline-end:0; + margin-inline-start:8px +} +.mega-dialog.fm-picker-dialog .footer-container{ + position:relative +} +.rtl .mega-dialog.fm-picker-dialog .fm-breadcrumbs .sprite-fm-mono.icon-arrow-right{ + transform:rotate(180deg) +} +.mega-dialog.fm-picker-dialog .summary-items-drop-icon{ + --icon-size:24px; + --mask-color:var(--icon-rest); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + box-sizing:initial; + cursor:pointer; + position:absolute; + right:-34px +} +.rtl .mega-dialog.fm-picker-dialog .summary-items-drop-icon{ + left:-34px; + right:auto +} +.mega-dialog.fm-picker-dialog .summary-items-drop-icon:hover{ + --mask-color:var(--icon-active) +} +.mega-dialog.avatar-dialog{ + min-width:404px; + overflow:hidden +} +.mega-dialog.avatar-dialog .avatar-body{ + padding:0 +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container.filereader-unsupported .description.fallback{ + display:block +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container .description.fallback,.mega-dialog.avatar-dialog .image-upload-and-crop-container.filereader-unsupported .description{ + display:none +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container form.aui{ + margin:20px auto 0 +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container form.aui .spinner{ + float:left; + height:30px; + margin-left:-30px; + width:30px +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container .image-upload-field{ + display:none +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container .image-upload-field[disabled]+.image-upload-field-replacement{ + filter:alpha(opacity=50); + opacity:.5 +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container .image-upload-field[disabled]+.image-upload-field-replacement:hover{ + border-color:#ccc +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container .image-upload-field[disabled]+.image-upload-field-replacement:active{ + box-shadow:none +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container .image-explorer-container{ + margin:0 auto +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container .select-avatar{ + margin-left:12px +} +.mega-dialog.avatar-dialog .image-upload-and-crop-container .cancel-avatar{ + margin-left:0 +} +.mega-dialog.avatar-dialog .image-explorer-container{ + height:447px; + width:400px +} +.mega-dialog.avatar-dialog .image-explorer-container.empty .image-explorer-image-view{ + line-height:28px; + margin:0 +} +.mega-dialog.avatar-dialog .image-explorer-container.empty .image-explorer-image-view[data-upload-prompt]:after{ + background-clip:padding-box; + background-size:48px; + border-radius:3px; + box-sizing:border-box; + color:#aaa; + content:attr(data-upload-prompt); + font-size:21px; + height:100%; + left:50%; + margin-left:-30%; + padding:48px 20px 0; + position:absolute; + text-align:center; + top:35%; + width:60% +} +.mega-dialog.avatar-dialog .image-explorer-container.empty .image-explorer-image-view .image-explorer-mask,.mega-dialog.avatar-dialog .image-explorer-container.empty .image-explorer-image-view .image-explorer-source{ + display:none +} +.mega-dialog.avatar-dialog .image-explorer-container.empty .image-explorer-image-view .image-explorer-drag-delegate{ + cursor:default +} +.mega-dialog.avatar-dialog .image-explorer-container.empty .zoom-slider-wrap,.mega-dialog.avatar-dialog .image-explorer-container.error .image-explorer-image-view[data-upload-prompt]:after{ + display:none +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view{ + height:400px; + overflow:hidden; + position:relative; + width:400px +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view.active-drop-target{ + border-color:#14892c +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view.active-drop-target[data-upload-prompt]:after{ + background-size:48px; + color:#14892c +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view .image-explorer-drag-delegate{ + cursor:move; + height:100%; + position:absolute; + width:100% +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view .image-explorer-mask{ + box-shadow:0 0 0 1000px rgba(0, 0, 0, .5); + left:50%; + margin-left:-128px; + margin-top:-128px; + position:absolute; + top:50% +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view .image-explorer-mask.circle-mask{ + background-clip:padding-box; + border:2px solid #fff; + border-radius:100%; + box-shadow:0 0 0 1px rgba(0, 0, 0, .15); + box-sizing:border-box; + height:260px; + width:260px +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view .image-explorer-mask.square-mask{ + height:256px; + width:256px +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view .image-explorer-mask.rounded-square-mask{ + background-clip:padding-box; + border-radius:5px; + height:256px; + width:256px +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view img{ + left:50%; + position:absolute; + top:50% +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view .aui-message{ + word-wrap:break-word; + left:50%; + margin:0 0 0 -140px; + max-height:280px; + position:absolute; + top:50%; + width:280px; + z-index:10 +} +.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-image-view .aui-message.closeable{ + padding-right:36px +} +.mega-dialog.avatar-dialog .image-explorer-container .zoom-slider-wrap{ + align-items:center; + display:flex; + flex:1 1 auto; + height:47px; + justify-content:center; + line-height:20px; + margin:0 50px; + padding-top:11px; + position:relative; + width:300px +} +.mega-dialog.avatar-dialog .image-explorer-container .zoom-in,.mega-dialog.avatar-dialog .image-explorer-container .zoom-out{ + --icon-size:24px; + cursor:pointer; + margin:6px 12px; + top:50% +} +.mega-dialog.avatar-dialog .image-explorer-container .zoom-out{ + left:-32px +} +.rtl .mega-dialog.avatar-dialog .image-explorer-container .zoom-out{ + left:auto; + right:-32px +} +.mega-dialog.avatar-dialog .image-explorer-container .zoom-in{ + right:-34px +} +.rtl .mega-dialog.avatar-dialog .image-explorer-container .zoom-in{ + left:-34px; + right:auto +} +.mega-dialog.avatar-dialog .image-explorer-container .fd-slider,.mega-dialog.avatar-dialog .image-explorer-container .ui-slider.ui-widget-content{ + background:var(--progress-bar-background); + border-radius:2px; + display:inline-block; + height:4px; + margin:0; + padding:0; + vertical-align:middle; + width:120px +} +.mega-dialog.avatar-dialog .image-explorer-container .ui-slider-handle{ + -webkit-margin-start:-8px; + background:var(--secondary-white); + background-clip:padding-box; + border:1px solid var(--switch-handle-border); + border-radius:100%; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + box-sizing:initial; + height:16px; + margin:0; + margin-inline-start:-8px; + top:-7px; + width:16px +} +.mega-dialog.avatar-dialog .image-explorer-container .ui-slider .ui-slider-range{ + background:var(--surface-main-inverted); + height:100%; + opacity:.5 +} +.mega-dialog.avatar-dialog .image-explorer-container .fd-slider.fd-form-element-hidden,.mega-dialog.avatar-dialog .image-explorer-container .image-explorer-scale-slider.fd-form-element-hidden{ + display:none +} +.mega-dialog.avatar-dialog .image-explorer-container .fd-slider .fd-slider-bar{ + left:3px; + right:3px +} +.mega-dialog.avatar-dialog .image-explorer-container .fd-slider .fd-slider-range{ + left:4px +} +.mega-dialog.avatar-dialog .avatar-footer{ + justify-content:space-between +} +.mega-dialog.avatar-dialog .avatar-footer div{ + -webkit-margin-start:auto; + display:flex; + margin-inline-start:auto +} +.mega-dialog.avatar-dialog .avatar-footer label{ + -webkit-margin-end:8px; + cursor:pointer; + display:block; + margin-inline-end:8px +} +.mega-dialog.fingerprint-dialog{ + width:750px +} +.mega-dialog.fingerprint-dialog .fingerprint-txt{ + color:var(--text-color-medium); + text-transform:uppercase +} +.mega-dialog.fingerprint-dialog .fingerprint-txt span{ + box-sizing:border-box; + display:inline-block; + height:19px; + padding-left:10px; + padding:0 5px; + width:42px; + width:auto +} +.mega-dialog.fingerprint-dialog .fingerprint-bott-txt{ + padding:15px 24px +} +.mega-dialog.fingerprint-dialog .fingerprint-mid-txt{ + background:var(--banner-background-info); + border:1px solid var(--banner-border-info); + border-radius:4px; + color:var(--banner-text-info); + padding:4px +} +.mega-dialog.fingerprint-dialog .fingerprint-bott-txt{ + background-color:initial; + padding:15px 19px 0 0 +} +.mega-dialog.fingerprint-dialog .fingerprint-bott-txt .fingerprint-txt{ + padding:0 +} +.mega-dialog.fingerprint-dialog .fingerprint-bott-header{ + font-size:14px; + padding:0 5px 9px +} +.mega-dialog.fingerprint-dialog .fingerprint-mid-info{ + display:flex; + margin:24px 0 +} +.mega-dialog.fingerprint-dialog .fingerprint-avatar{ + align-items:center; + display:flex +} +.mega-dialog.fingerprint-dialog .fingerprint-avatar div{ + height:64px; + width:64px +} +.mega-dialog.fingerprint-dialog .fingerprint-avatar .avatar-wrapper{ + align-items:center; + display:flex; + font:var(--text-h1); + justify-content:center +} +.mega-dialog.fingerprint-dialog .fingerprint-code{ + background:var(--surface-grey-1); + border-radius:8px; + box-sizing:border-box; + margin-left:auto; + padding:14px 18px 12px; + width:270px +} +.mega-dialog.fingerprint-dialog .fingerprint-code .contact-fingerprint-title{ + height:auto; + padding:0 5px 17px +} +.mega-dialog.fingerprint-dialog .fingerprint-contact-info{ + margin:0 16px; + max-width:240px; + padding:21px 0 0 +} +.mega-dialog.fingerprint-dialog .fingerprint-contact-info .contact-details-email,.mega-dialog.fingerprint-dialog .fingerprint-contact-info .contact-details-user-name{ + display:block; + float:none; + overflow:hidden; + padding-right:0; + text-overflow:ellipsis; + white-space:nowrap +} +.mega-dialog.loginrequired-dialog{ + width:500px +} +.mega-dialog.properties-dialog{ + min-height:280px; + width:704px +} +.rtl .mega-dialog.properties-dialog{ + direction:rtl +} +.mega-dialog.properties-dialog header h2{ + -webkit-padding-start:326px; + display:none; + margin-top:24px; + padding-inline-start:326px; + text-align:start +} +.mega-dialog.properties-dialog .avatar-wrapper{ + margin:5px 0 0 5px +} +.mega-dialog.properties-dialog .properties-body{ + min-height:280px +} +.mega-dialog.properties-dialog .properties-file-icon{ + box-sizing:border-box; + height:256px; + left:12px; + margin-top:-128px; + padding:8px; + position:absolute; + top:50%; + width:256px +} +.rtl .mega-dialog.properties-dialog .properties-file-icon{ + left:auto; + right:12px +} +.mega-dialog.properties-dialog .properties-body:before{ + background:var(--surface-grey-1); + border-radius:var(--border-radius) 0 0 var(--border-radius); + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:280px +} +.rtl .mega-dialog.properties-dialog .properties-body:before{ + border-radius:0 var(--border-radius) var(--border-radius) 0; + left:auto; + right:0 +} +.mega-dialog.properties-dialog .properties-file-icon i{ + background-image:url(../imagery/mega-properties-sprite.e5956f1034d8c3a0.png); + background-position:29px 40px; + background-repeat:no-repeat; + height:240px; + left:0; + margin:8px; + position:absolute; + top:0; + width:242px; + z-index:3 +} +.rtl .mega-dialog.properties-dialog .properties-file-icon i{ + left:auto; + right:0 +} +.mega-dialog.properties-dialog.multiple .properties-file-icon i{ + left:-10px; + top:-10px +} +.mega-dialog.properties-dialog.multiple .properties-file-icon i:nth-child(2){ + left:0; + opacity:.5; + top:0; + z-index:2 +} +.mega-dialog.properties-dialog.multiple .properties-file-icon i:nth-child(3){ + left:10px; + opacity:.2; + top:10px; + transition:opacity .2s ease-in-out; + z-index:1 +} +.mega-dialog.properties-dialog.two-elements .properties-file-icon i{ + left:-5px; + top:-5px +} +.mega-dialog.properties-dialog.two-elements .properties-file-icon i:nth-child(2){ + left:5px; + top:5px; + z-index:1 +} +.rtl .mega-dialog.properties-dialog.multiple .properties-file-icon i{ + left:auto; + right:-10px +} +.rtl .mega-dialog.properties-dialog.multiple .properties-file-icon i:nth-child(2){ + left:auto; + right:0 +} +.rtl .mega-dialog.properties-dialog.multiple .properties-file-icon i:nth-child(3){ + left:auto; + right:10px +} +.rtl .mega-dialog.properties-dialog.two-elements .properties-file-icon i{ + left:auto; + right:-5px +} +.rtl .mega-dialog.properties-dialog.two-elements .properties-file-icon i:nth-child(2){ + left:auto; + right:5px +} +.mega-dialog.properties-dialog .file-status-icon{ + --mask-color:var(--icon-rest); + --icon-size:16px; + left:16px; + top:16px +} +.rtl .mega-dialog.properties-dialog .file-status-icon{ + left:auto; + right:16px +} +.mega-dialog.properties-dialog .taken-down-icon{ + display:none +} +.mega-dialog.properties-dialog.taken-down .taken-down-icon{ + --mask-color:var(--label-red); + --icon-size:24px; + display:block; + left:12px; + position:absolute; + top:12px +} +.rtl .mega-dialog.properties-dialog.taken-down .taken-down-icon{ + left:auto; + right:12px +} +.mega-dialog.properties-dialog.taken-down .file-status-icon{ + display:none +} +.mega-dialog.properties-dialog .propreties-dark-txt.t7{ + max-width:150px; + word-break:break-word +} +.mega-dialog.properties-dialog .propreties-dark-txt.t7,.mega-dialog.properties-dialog .propreties-dark-txt.t11{ + line-height:22px +} +.mega-dialog.properties-dialog.multiple .properties-float-bl.second span{ + display:none +} +.mega-dialog.properties-dialog .properties-elements-counter{ + display:none; + height:40px; + left:203px; + position:absolute; + text-align:center; + top:24px; + z-index:10 +} +.rtl .mega-dialog.properties-dialog .properties-elements-counter{ + left:auto; + right:203px +} +.mega-dialog.properties-dialog.folders-only .properties-elements-counter,.mega-dialog.properties-dialog.shared-with-me .properties-elements-counter,.mega-dialog.properties-dialog.shared .properties-elements-counter{ + top:61px +} +.mega-dialog.properties-dialog.multiple.folders-only .properties-elements-counter{ + top:51px +} +.mega-dialog.properties-dialog.multiple.folders-only.two-elements .properties-elements-counter{ + top:56px +} +.mega-dialog.properties-dialog.multiple .properties-elements-counter,.mega-dialog.properties-dialog.shared-with-me .properties-elements-counter,.mega-dialog.properties-dialog.shared .properties-elements-counter{ + display:block; + position:absolute +} +.mega-dialog.properties-dialog.shared .properties-elements-counter span{ + background:var(--surface-main-inverted); + border:2px solid var(--stroke-main); + border-radius:50%; + color:var(--text-color-high-inverted); + display:block; + font:var(--text-h2); + height:36px; + line-height:32px; + width:36px +} +.mega-dialog.properties-dialog .multiple .properties-elements-counter span,.mega-dialog.properties-dialog .properties-elements-counter span{ + background-color:var(--label-red); + border-radius:40px; + box-sizing:border-box; + color:#fff; + display:inline-block; + font-family:source_sans_prosemibold,Arial,sans-serif; + font-size:19px; + height:32px; + line-height:31px; + margin:4px; + min-width:32px; + padding:0 3px; + text-align:center +} +.mega-dialog.properties-dialog .properties-elements-counter i{ + --icon-size:32px; + --mask-color:#fff; + display:none; + left:6px; + position:absolute; + top:6px +} +.mega-dialog.properties-dialog.shared-with-me.read-only .properties-elements-counter span{ + background:var(--label-blue) +} +.mega-dialog.properties-dialog.shared-with-me.read-only .properties-elements-counter i.read-only{ + display:block +} +.mega-dialog.properties-dialog.shared-with-me.read-and-write .properties-elements-counter span{ + background:var(--label-orange) +} +.mega-dialog.properties-dialog.shared-with-me.read-and-write .properties-elements-counter i.read-and-write{ + display:block +} +.mega-dialog.properties-dialog.shared-with-me.full-access .properties-elements-counter span{ + background:var(--label-green) +} +.mega-dialog.properties-dialog.shared-with-me.full-access .properties-elements-counter i.full-access{ + display:block +} +.mega-dialog.properties-dialog .properties-txt-wrapper{ + display:table; + table-layout:fixed; + width:100% +} +.mega-dialog.properties-dialog .properties-txt-pad{ + -webkit-padding-start:326px; + box-sizing:border-box; + display:table-cell; + height:280px; + padding:46px 46px 30px; + padding-inline-start:326px; + vertical-align:middle +} +.mega-dialog.properties-dialog .properties-txt-pad:after{ + clear:both; + content:""; + display:block +} +.mega-dialog.properties-dialog .properties-items{ + display:flex; + flex-wrap:wrap +} +.mega-dialog.properties-dialog .properties-link-block{ + -webkit-padding-start:20px; + border-top:2px solid #eee; + box-sizing:border-box; + height:70px; + padding:13px 10px 0; + padding-inline-start:20px +} +.mega-dialog.properties-dialog .properties-shared-block{ + -webkit-padding-start:20px; + border-top:2px solid #eee; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + display:none; + height:100px; + padding:13px 10px 0; + padding-inline-start:20px +} +.mega-dialog.properties-dialog.shared .properties-shared-block{ + display:block +} +.mega-dialog.properties-dialog.no-link .properties-link-block{ + display:none +} +.mega-dialog.properties-dialog .properties-file-lnk-pad{ + -webkit-margin-end:90px; + margin-inline-end:90px +} +.mega-dialog.properties-dialog .properties-file-txt{ + color:#999; + float:left; + font-size:14px; + line-height:21px +} +.mega-dialog.properties-dialog .properties-file-link{ + color:#333; + font-size:13px; + line-height:21px +} +.mega-dialog.properties-dialog .properties-file-key{ + color:#999; + display:none +} +.mega-dialog.properties-dialog.show-key .properties-file-key{ + display:inline +} +.mega-dialog.properties-dialog .properties-file-icon i.word{ + background-position:29px 40px +} +.mega-dialog.properties-dialog .properties-file-icon i.web-lang{ + background-position:29px -240px +} +.mega-dialog.properties-dialog .properties-file-icon i.web-data{ + background-position:29px -520px +} +.mega-dialog.properties-dialog .properties-file-icon i.video{ + background-position:29px -800px +} +.mega-dialog.properties-dialog .properties-file-icon i.openoffice{ + background-position:29px -1080px +} +.mega-dialog.properties-dialog .properties-file-icon i.keynote{ + background-position:29px -1360px +} +.mega-dialog.properties-dialog .properties-file-icon i.vector{ + background-position:29px -1640px +} +.mega-dialog.properties-dialog .properties-file-icon i.numbers{ + background-position:29px -1920px +} +.mega-dialog.properties-dialog .properties-file-icon i.torrent{ + background-position:29px -2200px +} +.mega-dialog.properties-dialog .properties-file-icon i.text{ + background-position:29px -2480px +} +.mega-dialog.properties-dialog .properties-file-icon i.pages{ + background-position:29px -2760px +} +.mega-dialog.properties-dialog .properties-file-icon i.spreadsheet{ + background-position:29px -3040px +} +.mega-dialog.properties-dialog .properties-file-icon i.recovery{ + background-position:29px -3320px +} +.mega-dialog.properties-dialog .properties-file-icon i.dmg{ + background-position:29px -3600px +} +.mega-dialog.properties-dialog .properties-file-icon i.raw{ + background-position:29px -3880px +} +.mega-dialog.properties-dialog .properties-file-icon i.premiere{ + background-position:29px -4160px +} +.mega-dialog.properties-dialog .properties-file-icon i.powerpoint{ + background-position:29px -4440px +} +.mega-dialog.properties-dialog .properties-file-icon i.megasync{ + background-position:29px -7420px +} +.mega-dialog.properties-dialog .properties-file-icon i.megasync-mac{ + background-position:29px -5000px +} +.mega-dialog.properties-dialog .properties-file-icon i.photoshop{ + background-position:29px -5280px +} +.mega-dialog.properties-dialog .properties-file-icon i.pdf{ + background-position:29px -5560px +} +.mega-dialog.properties-dialog .properties-file-icon i.experience{ + background-position:29px -5840px +} +.mega-dialog.properties-dialog .properties-file-icon i.indesign{ + background-position:29px -6120px +} +.mega-dialog.properties-dialog .properties-file-icon i.image{ + background-position:-391px 40px +} +.mega-dialog.properties-dialog .properties-file-icon i.illustrator{ + background-position:-391px -240px +} +.mega-dialog.properties-dialog .properties-file-icon i.sketch{ + background-position:-391px -520px +} +.mega-dialog.properties-dialog .properties-file-icon i.generic{ + background-position:-391px -800px +} +.mega-dialog.properties-dialog .properties-file-icon i.font{ + background-position:-391px -1080px +} +.mega-dialog.properties-dialog .properties-file-icon i.executable{ + background-position:-391px -1360px +} +.mega-dialog.properties-dialog .properties-file-icon i.excel{ + background-position:-391px -1640px +} +.mega-dialog.properties-dialog .properties-file-icon i.compressed{ + background-position:-391px -1920px +} +.mega-dialog.properties-dialog .properties-file-icon i.cad{ + background-position:-391px -2200px +} +.mega-dialog.properties-dialog .properties-file-icon i.audio{ + background-position:-391px -2480px +} +.mega-dialog.properties-dialog .properties-file-icon i.aftereffects{ + background-position:-391px -2760px +} +.mega-dialog.properties-dialog .properties-file-icon i.threed{ + background-position:-391px -3040px +} +.mega-dialog.properties-dialog .properties-file-icon i.folder{ + background-position:-391px -3320px +} +.mega-dialog.properties-dialog .properties-file-icon i.rubbish-folder{ + background-position:-391px -3600px +} +.mega-dialog.properties-dialog .properties-file-icon i.folder-camera{ + background-position:-391px -3880px +} +.mega-dialog.properties-dialog .properties-file-icon i.rubbish-folder-camera{ + background-position:-391px -4160px +} +.mega-dialog.properties-dialog .properties-file-icon i.folder-chat{ + background-position:-391px -7260px +} +.mega-dialog.properties-dialog .properties-file-icon i.rubbish-folder-chat{ + background-position:-391px -7540px +} +.mega-dialog.properties-dialog .properties-file-icon i.folder-sync{ + background-position:-391px -6700px +} +.mega-dialog.properties-dialog .properties-file-icon i.rubbish-folder-sync{ + background-position:-391px -6980px +} +.mega-dialog.properties-dialog .properties-file-icon i.folder-backup{ + background-position:-391px -6140px +} +.mega-dialog.properties-dialog .properties-file-icon i.rubbish-folder-backup{ + background-position:-391px -6420px +} +.mega-dialog.properties-dialog .properties-file-icon i.backup{ + background-position:13px -6423px +} +.mega-dialog.properties-dialog .properties-file-icon i.pc{ + background-position:13px -6683px +} +.mega-dialog.properties-dialog .properties-file-icon i.pc-linux{ + background-position:13px -7464px +} +.mega-dialog.properties-dialog .properties-file-icon i.pc-mac{ + background-position:13px -6943px +} +.mega-dialog.properties-dialog .properties-file-icon i.pc-win{ + background-position:13px -7203px +} +.mega-dialog.properties-dialog .properties-file-icon i.mobile{ + background-position:13px -7723px +} +.mega-dialog.properties-dialog .properties-file-icon i.mobile-ios{ + background-position:13px -7983px +} +.mega-dialog.properties-dialog .properties-file-icon i.mobile-android{ + background-position:-391px -7982px +} +.mega-dialog.properties-dialog .properties-file-icon i.ex-device{ + background-position:9px -8242px +} +.mega-dialog.properties-dialog .properties-file-icon i.folder-shared{ + background-position:-391px -5020px +} +.mega-dialog.properties-dialog .properties-file-icon i.rubbish-folder-shared{ + background-position:-391px -5300px +} +.mega-dialog.properties-dialog .properties-file-icon i.inbound-share,.mega-dialog.properties-dialog .properties-file-icon i.rubbish-inbound-share{ + background-position:-391px -4460px +} +.mega-dialog.properties-dialog .properties-file-icon i.puf-folder{ + background-position:-391px -5580px +} +.mega-dialog.properties-dialog .properties-file-icon i.rubbish-puf-folder{ + background-position:-391px -5860px +} +.mega-dialog.add-user-popup{ + width:640px +} +.mega-dialog.add-user-popup .footer-container{ + flex-direction:column +} +.mega-dialog.add-user-popup .footer-container button.add-user-popup-button{ + margin:0 auto +} +.mega-dialog.add-user-popup aside{ + text-align:start +} +.mega-dialog.add-user-popup aside i{ + -webkit-margin-end:4px; + --icon-size:24px; + display:inline-block; + margin-inline-end:4px; + vertical-align:middle +} +.mega-dialog.add-user-popup aside span{ + vertical-align:middle +} +.mega-dialog.add-user-popup.arrange-to-back{ + z-index:900 +} +.dropdown.body.add-user-popup{ + max-width:90%; + width:640px !important; + z-index:100 +} +.mega-dialog.add-user-popup .multiple-input i:not(.remove-item){ + --icon-size:24px; + -webkit-margin-start:10px; + left:0; + margin-inline-start:10px; + margin-top:7px; + opacity:.74; + position:absolute +} +.rtl .mega-dialog.add-user-popup .multiple-input i:not(.remove-item){ + left:auto; + right:0 +} +.mega-dialog.add-user-popup .img-dialogs-achievements{ + --width:56px; + height:56px; + width:56px +} +.mega-dialog.add-user-popup .hidden-achievement-cell{ + display:table-cell; + vertical-align:middle +} +.mega-dialog.add-user-popup .hidden-achievement-cell:first-child{ + width:68px +} +.mega-dialog.add-user-popup .hidden-achievement-cell .big-txt{ + color:var(--text-color-high); + font:var(--text-h3) +} +.mega-dialog.add-user-popup .add-user-notification,.mega-dialog.add-user-popup.private .hidden-textarea-info{ + display:none +} +.mega-dialog.add-user-popup.private .add-user-notification{ + display:block +} +.mega-dialog.add-user-popup .hidden-achievement-info{ + display:table; + margin-top:24px +} +.mega-dialog.add-user-popup .hidden-textarea-info{ + margin-top:10px; + text-align:center +} +.mega-dialog.add-user-popup .hidden-textarea-info span{ + cursor:pointer; + display:inline-block; + padding:0 10px +} +.mega-dialog.add-user-popup .hidden-textarea-info span:hover{ + text-decoration:underline +} +.mega-dialog.payment-address-dialog{ + max-height:100vh; + width:730px +} +.mega-dialog.payment-address-dialog header{ + align-items:center; + flex-direction:row; + justify-content:space-between; + padding-top:38px +} +.mega-dialog.payment-address-dialog .mega-input{ + margin-top:12px +} +.mega-dialog.payment-address-dialog .content-block.address-block{ + display:flex; + flex-direction:row; + justify-content:space-between +} +.mega-dialog.payment-address-dialog-body{ + padding:30px 30px 10px +} +.mega-dialog .content-block.payment-address-dialog-body{ + padding-bottom:16px +} +.mega-dialog.payment-address-dialog section{ + flex-shrink:unset +} +.mega-dialog.payment-address-dialog .plan-icon{ + display:inline-block; + vertical-align:middle +} +.mega-dialog.payment-address-dialog .plan-icon i{ + --icon-size:60px; + display:none +} +.mega-dialog.payment-address-dialog .plan-icon.business i.business,.mega-dialog.payment-address-dialog .plan-icon.pro1 i.pro1,.mega-dialog.payment-address-dialog .plan-icon.pro2 i.pro2,.mega-dialog.payment-address-dialog .plan-icon.pro3 i.pro3,.mega-dialog.payment-address-dialog .plan-icon.pro4 i.pro4,.mega-dialog.payment-address-dialog .plan-icon.pro101 i.pro101{ + display:block +} +.mega-dialog.payment-address-dialog .payment-plan-info{ + -webkit-padding-start:15px; + display:inline-block; + max-width:485px; + padding-inline-start:15px; + vertical-align:middle +} +.mega-dialog.payment-address-dialog .payment-form-header{ + margin-top:20px; + position:relative +} +.mega-dialog.payment-address-dialog .payment-plan-title,.payment-address-dialog .payment-plan-price{ + color:var(--text-color-high); + font:var(--text-h1) +} +.mega-dialog.payment-address-dialog .payment-icons{ + height:40px; + overflow:hidden; + position:absolute; + right:-5px; + top:-15px; + width:96px +} +.mega-dialog.payment-address-dialog .payment-icons .provider-icon{ + margin:14px; + position:absolute; + right:-5px +} +.rtl .mega-dialog.payment-address-dialog .payment-icons,.rtl .mega-dialog.payment-address-dialog .payment-icons .provider-icon{ + left:-5px; + right:auto +} +.mega-dialog.payment-address-dialog .payment-plan-price{ + margin-top:6px +} +.mega-dialog.payment-address-dialog .payment-half-block{ + -webkit-padding-end:7px; + box-sizing:border-box; + padding-inline-end:7px; + width:50% +} +.mega-dialog.payment-address-dialog .payment-half-block.second{ + -webkit-padding-end:0; + -webkit-padding-start:7px; + border:0; + padding-inline-end:0; + padding-inline-start:7px; + position:relative +} +.mega-dialog.payment-address-dialog .payment-note-first{ + margin-top:8px +} +.mega-dialog.payment-address-dialog .payment-note-first b{ + -webkit-touch-callout:text; + color:var(--text-color-high); + -webkit-user-select:text; + user-select:text +} +.mega-dialog.payment-address-dialog .payment-form-title{ + color:var(--text-color-high); + float:left; + font:var(--text-body2-higher) +} +.rtl .mega-dialog.payment-address-dialog .payment-form-title{ + float:right +} +.mega-dialog.payment-address-dialog .remember-billing-info-wrapper{ + -webkit-padding-start:48px; + padding:20px 0; + padding-inline-start:48px +} +.mega-dialog.payment-address-dialog .fm-account-input{ + border-radius:4px; + margin:12px 0 0; + width:auto +} +.mega-dialog.payment-address-dialog .fm-account-input.error{ + border:1px solid var(--text-color-error); + box-sizing:border-box +} +.mega-dialog.payment-address-dialog .fm-account-input input{ + color:var(--text-color-medium) +} +.mega-dialog.payment-address-dialog .default-select.error{ + border:1px solid var(--text-color-error); + box-shadow:none; + box-sizing:border-box +} +.mega-dialog.payment-address-dialog .payment-cc{ + height:32px; + margin:19px 0 0 +} +.mega-dialog.payment-address-dialog .payment-cc-icon{ + position:absolute +} +.mega-dialog.payment-address-dialog .payment-provider-icon{ + --icon-size:48px; + display:inline-block; + float:right; + margin-right:5px +} +.mega-dialog.payment-address-dialog .payment-cc-icon.visa{ + --icon-size:48px; + right:0 +} +.rtl .mega-dialog.payment-address-dialog .payment-cc-icon.visa{ + left:0 +} +.mega-dialog.payment-address-dialog .payment-cc-icon.mastercard{ + --icon-size:48px; + right:48px +} +.rtl .mega-dialog.payment-address-dialog .payment-cc-icon.mastercard{ + left:48px +} +.mega-dialog.payment-address-dialog .payment-short-bl{ + -webkit-padding-end:7px; + box-sizing:border-box; + float:left; + padding-inline-end:7px; + width:50% +} +.rtl .mega-dialog.payment-address-dialog .payment-short-bl{ + float:right +} +.mega-dialog.payment-address-dialog .payment-short-bl.second{ + -webkit-padding-end:0; + -webkit-padding-start:7px; + padding-inline-end:0; + padding-inline-start:7px +} +.mega-dialog.payment-address-dialog .payment-short-bl.triplex{ + -webkit-padding-end:7px; + padding-inline-end:7px; + width:33.333333% +} +.mega-dialog.payment-address-dialog .payment-short-bl.triplex.second{ + padding:0 7px +} +.mega-dialog.payment-address-dialog .payment-short-bl.triplex.third{ + -webkit-padding-end:0; + -webkit-padding-start:7px; + padding-inline-end:0; + padding-inline-start:7px +} +.mega-dialog.payment-address-dialog .payment-short-bl .default-select{ + float:none; + margin:19px 0 0; + width:100% +} +.mega-dialog.payment-address-dialog .footer-container{ + align-items:center; + flex-direction:column +} +.mega-dialog.payment-address-dialog .footer-container .button{ + display:flex; + justify-content:center +} +.mega-dialog.payment-address-dialog .error-message{ + background:var(--banner-background-error); + border:var(--banner-border-error); + border-radius:4px; + color:var(--banner-text-error); + margin:12px 48px 0; + padding:2px 16px; + text-align:center +} +.mega-dialog.payment-address-dialog .payment-half-block .fm-account-input input{ + color:var(--text-color-high) +} +.mega-dialog.payment-address-dialog .payment-half-block .fm-account-input input::placeholder{ + color:var(--text-color-low) +} +.mega-dialog.payment-address-dialog.active .fm-account-input{ + background:var(--surface-grey-1) +} +.mega-dialog.payment-address-dialog.active .fm-account-input.focused{ + background:var(--surface-grey-2) +} +.mega-dialog.payment-address-dialog.active .fm-account-input.focused input{ + color:var(--text-color-high) +} +.mega-dialog.payment-address-dialog .payment-half-block .fm-account-input.focused input::placeholder{ + color:var(--text-color-low) +} +.mega-dialog.payment-address-dialog .default-dropdown-item.template{ + display:none +} +.mega-dialog.payment-address-dialog .states.disabled{ + cursor:default; + opacity:.5 +} +.mega-dialog.payment-address-dialog .states{ + margin-bottom:20px +} +.mega-dialog.payment-address-dialog .states .mega-input-dropdown .dropdown-scroll{ + max-height:160px +} +.mega-dialog.payment-address-dialog>footer .footer-container{ + padding-top:0 +} +.mega-dialog.bottom-pages-dialog{ + width:604px +} +.mega-dialog.bottom-pages-dialog .content-block{ + padding:0 +} +.mega-dialog.bottom-pages-dialog .bp-main{ + color:#595959; + font-size:15px; + line-height:23px; + padding:0 48px +} +.mega-dialog.bottom-pages-dialog .bp-main h1{ + font-size:18px; + padding:0 +} +.mega-dialog.bottom-pages-dialog .bp-main h2{ + font-size:15px; + padding:16px 0 0 +} +.mega-dialog.bottom-pages-dialog .bp-main p{ + padding:19px 0 0 +} +.mega-dialog.pro-login-dialog{ + width:490px +} +.mega-dialog.pro-login-dialog header{ + padding:32px 48px 0 +} +.mega-dialog.pro-login-dialog header h1{ + text-align:center +} +.mega-dialog.pro-login-dialog .login-page-forgot-bl{ + padding:0 0 24px +} +.mega-dialog.pro-login-dialog footer .footer-container{ + justify-content:space-between +} +.mega-dialog.pro-login-dialog .footer-container .checkbox-block{ + align-items:center; + flex-grow:1 +} +.mega-dialog.pro-login-dialog aside{ + background:var(--surface-grey-3); + color:var(--text-color-medium); + text-align:center +} +.mega-dialog.pro-login-dialog aside p a{ + color:var(--text-color-high); + font-family:var(--text-font-family-semibold) +} +.mega-dialog.collected-data-review-dialog{ + max-height:590px; + width:600px; + z-index:1250 +} +.mega-dialog.collected-data-review-dialog textarea{ + display:block +} +.mega-dialog.collected-data-review-dialog .collected-data-textarea{ + height:400px; + overflow:hidden; + position:relative +} +.mega-dialog.collected-data-review-dialog .collected-data{ + -webkit-margin-start:48px; + --webkit-margin-end:24px; + border:0; + display:block; + margin-inline-end:24px; + margin-inline-start:48px; + overflow:hidden; + padding:0 +} +.mega-dialog.collected-data-review-dialog .collected-data li{ + background:none; + counter-increment:step-counter; + font:var(--text-body2); + font-family:source_code_proregular,sans-serif; + list-style-type:none; + padding:0; + text-indent:12px +} +.mega-dialog.collected-data-review-dialog .collected-data li:first-child,.mega-dialog.collected-data-review-dialog .collected-data li:last-child{ + text-indent:0 +} +.mega-dialog.collected-data-review-dialog .collected-data li:before{ + color:var(--text-color-info); + content:counter(step-counter); + display:block; + left:-15px; + min-width:40px; + position:absolute; + text-align:end +} +.rtl .mega-dialog.collected-data-review-dialog .collected-data li:before{ + left:auto; + right:-15px +} +.mega-dialog.wire-transfer-dialog{ + max-width:100vw; + width:1145px +} +.mega-dialog.wire-transfer-dialog .content-block{ + padding-bottom:48px +} +.mega-dialog.wire-transfer-dialog ul{ + margin-bottom:0 +} +.mega-dialog.wire-transfer-dialog li{ + padding-bottom:0 +} +.mega-dialog.wire-transfer-dialog .wire-transfer-options{ + overflow:auto +} +.mega-dialog.wire-transfer-dialog .wire-transfer-details{ + background:var(--surface-grey-1); + border-radius:7px; + float:left; + margin-bottom:20px; + padding:15px; + width:49% +} +.mega-dialog.wire-transfer-dialog .wire-transfer-details:last-child{ + float:right +} +.mega-dialog.wire-transfer-dialog .resellers-top-txt{ + padding-bottom:0 +} +.mega-dialog.wire-transfer-dialog .resellers-top-txt .wire-transfer-details th{ + padding-right:15px; + text-align:start; + white-space:nowrap +} +.mega-dialog.wire-transfer-dialog .resellers-top-txt .wire-transfer-details .bank-address{ + padding-bottom:15px +} +.mega-dialog.languages-dialog{ + min-height:320px; + width:770px +} +.mega-dialog.languages-dialog a.nlanguage-lnk,.mega-dialog.languages-dialog a.nlanguage-lnk:active,.mega-dialog.languages-dialog a.nlanguage-lnk:link,.mega-dialog.languages-dialog a.nlanguage-lnk:visited{ + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-high); + cursor:pointer; + display:inline-block; + font:var(--text-body1); + margin:1px; + padding:2px 12px; + position:relative; + text-decoration:none; + width:163px +} +.mega-dialog.languages-dialog a.nlanguage-lnk:hover{ + background:var(--surface-grey-3) +} +.mega-dialog.languages-dialog a.nlanguage-lnk.language-template{ + display:none +} +.mega-dialog.languages-dialog a.nlanguage-lnk.selected,.mega-dialog.languages-dialog a.nlanguage-lnk.selected:active,.mega-dialog.languages-dialog a.nlanguage-lnk.selected:hover,.mega-dialog.languages-dialog a.nlanguage-lnk.selected:link,.mega-dialog.languages-dialog a.nlanguage-lnk.selected:visited{ + background:var(--surface-grey-4) +} +.mega-dialog.languages-dialog a.nlanguage-lnk.selected:before{ + background:var(--label-blue); + border-radius:1px; + content:""; + height:calc(100% - 8px); + left:4px; + position:absolute; + top:4px; + width:2px +} +.rtl .mega-dialog.languages-dialog a.nlanguage-lnk.selected:before{ + left:auto; + right:4px +} +.mega-dialog.languages-dialog .tier-one-languages{ + margin-top:15px +} +.mega-dialog.languages-dialog .tier-two-languages{ + display:none; + margin-bottom:10px; + margin-top:20px +} +.mega-dialog.languages-dialog .native-language-name{ + line-height:28px +} +.mega-dialog.languages-dialog .show-more-languages{ + cursor:pointer; + display:table; + margin-top:30px; + width:100% +} +.mega-dialog.languages-dialog .show-more-languages .show-more-text{ + color:#999; + display:table-cell; + font-family:source_sans_proregular,Arial,sans-serif; + font-size:14px; + padding-left:12px; + white-space:nowrap +} +.mega-dialog.languages-dialog .show-more-languages:hover .show-more-text{ + color:#555 +} +.mega-dialog.languages-dialog .show-more-languages .bar{ + display:table-cell; + padding-left:15px; + width:100% +} +.mega-dialog.languages-dialog .show-more-languages .bar div{ + border-bottom:1px solid #f2f2f2; + margin-bottom:3px +} +.mega-dialog.languages-dialog .show-more-languages .round-arrow{ + display:table-cell; + padding-left:14px; + vertical-align:middle +} +.mega-dialog.languages-dialog .show-more-languages .round-arrow span{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-13px -1108px; + background-repeat:no-repeat; + display:inline-block; + height:7px; + opacity:.6; + position:relative; + top:1px; + vertical-align:middle; + width:11px +} +.mega-dialog.languages-dialog .show-more-languages .round-arrow.opened span{ + transform:rotate(180deg) +} +.mega-dialog.languages-dialog .show-more-languages:hover .round-arrow span{ + opacity:1 +} +.mega-dialog.languages-dialog .nlanguage-lnk .beta{ + border:1px solid rgba(192, 199, 203, .3); + border-radius:7px; + box-sizing:border-box; + color:#c0c7cd; + font-size:10px; + font-style:normal; + margin-left:5px; + padding:0 4px; + text-align:center; + text-transform:uppercase +} +.mega-dialog.languages-dialog .nlanguage-lnk.selected .beta{ + visibility:hidden +} +.mega-dialog.contact-info{ + width:560px +} +.mega-dialog.pro-register-dialog{ + width:728px +} +.mega-dialog.pro-register-dialog header{ + padding:0 +} +.mega-dialog.pro-register-dialog header .graphic.wide{ + --width:400px; + height:120px; + width:400px +} +.mega-dialog.pro-register-dialog header p{ + padding:0 48px; + text-align:center +} +.mega-dialog.pro-register-dialog .dialog-register-form{ + margin-top:24px +} +.mega-dialog.pro-register-dialog .account.input-tooltip,.pro-register-dialog .both-input-tooltip{ + font-size:13px; + min-width:100%; + text-transform:none +} +.mega-dialog.pro-register-dialog .password .account.input-tooltip{ + min-width:516px +} +.mega-dialog.pro-register-dialog .account.checkbox-block{ + display:flex; + padding:12px 0 0; + width:105% +} +.mega-dialog.pro-register-dialog .account.input-wrapper{ + margin:0 0 37px +} +.mega-dialog.pro-register-dialog .txt_dark{ + font-family:LatoWeb_SemiBold,Arial,sans-serif; + font-weight:700 +} +.mega-dialog.pro-register-dialog footer aside.no-padding{ + padding:0 +} +.mega-dialog.credentials-warning-dialog{ + overflow:hidden; + width:600px; + z-index:1101 +} +.mega-dialog.credentials-warning-dialog .avatarAndWarningMessage{ + overflow:hidden +} +.mega-dialog.credentials-warning-dialog .userAvatar{ + float:left +} +.mega-dialog.credentials-warning-dialog .information{ + -webkit-margin-start:20px; + float:left; + margin-inline-start:20px; + width:390px +} +.mega-dialog.credentials-warning-dialog .information.noAvatar{ + -webkit-margin-start:0; + margin-inline-start:0; + width:auto +} +.mega-dialog.credentials-warning-dialog .information .firstLine{ + color:var(--text-color-error) +} +.mega-dialog.credentials-warning-dialog .information .emailAddress{ + color:var(--text-color-high) +} +.mega-dialog.credentials-warning-dialog .userAvatar img{ + border-radius:50%; + height:90px; + width:90px +} +.mega-dialog.credentials-warning-dialog .previousCredentials .title{ + color:var(--text-color-high) +} +.mega-dialog.credentials-warning-dialog .avatarAndWarningMessage,.mega-dialog.credentials-warning-dialog .newCredentials,.mega-dialog.credentials-warning-dialog .postResetCredentials,.mega-dialog.credentials-warning-dialog .previousCredentials{ + margin-bottom:40px +} +.mega-dialog.credentials-warning-dialog .newCredentials .fingerprint,.mega-dialog.credentials-warning-dialog .postResetCredentials .fingerprint,.mega-dialog.credentials-warning-dialog .previousCredentials .fingerprint{ + -webkit-margin-start:-4px; + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + font-family:monospace,sans-serif; + font-size:14px; + height:36px; + line-height:34px; + margin-inline-start:-4px; + margin-top:10px; + text-transform:uppercase +} +.mega-dialog.credentials-warning-dialog .newCredentials .fingerprint>span,.mega-dialog.credentials-warning-dialog .postResetCredentials .fingerprint>span,.mega-dialog.credentials-warning-dialog .previousCredentials .fingerprint>span{ + display:inline-block; + text-align:center; + width:44px +} +.mega-dialog.credentials-warning-dialog .newCredentials span.mismatch{ + color:var(--text-color-error) +} +.mega-dialog.credentials-warning-dialog .newCredentials .title{ + color:var(--text-color-error); + font-weight:700 +} +.mega-dialog.credentials-warning-dialog .newCredentials .title.reset{ + color:var(--text-color-high) +} +.mega-dialog.credentials-warning-dialog .resetCredentials .title{ + margin-bottom:10px +} +.credentials-warning-dialog .resetCredentials .reset-credentials-button,.mega-dialog.credentials-warning-dialog .verifyCredentials .verify-contact-button{ + margin-top:24px +} +.mega-dialog.credentials-warning-dialog .postResetCredentials .title,.mega-dialog.credentials-warning-dialog .verifyCredentials .title{ + color:var(--text-color-high) +} +.mega-dialog.credentials-warning-dialog .instruction{ + padding:3px 20px +} +.mega-dialog.credentials-warning-dialog .instruction .reject{ + color:var(--text-color-error) +} +.mega-dialog.credentials-warning-dialog .instruction .accept{ + color:var(--text-color-success) +} +.mega-dialog.credentials-warning-dialog .highlighted-section{ + padding-bottom:16px; + padding-top:16px +} +.mega-dialog.cancel-subscription-st1{ + width:444px +} +.mega-dialog.cancel-subscription-st1 header{ + margin-bottom:10px +} +.mega-dialog.cancel-subscription-st1 .reset-small-txt{ + font-size:13px; + padding:25px 0 15px +} +.mega-dialog.cancel-subscription-st1 form{ + display:block; + padding:0 +} +.mega-dialog.download-dialog{ + min-height:100px; + width:504px +} +.mega-dialog.download-dialog .download-chrome-lnk{ + display:block; + margin-top:16px +} +.mega-dialog.download-dialog .download-chrome-lnk i{ + --icon-size:24px; + -webkit-margin-end:4px; + display:inline-block; + margin-inline-end:4px; + vertical-align:middle +} +.mega-dialog.download-dialog .download-chrome-lnk span{ + vertical-align:middle +} +.mega-dialog.key-signature-warning-dialog{ + z-index:1101 +} +.mega-dialog.key-signature-warning-dialog .information .firstLine{ + color:var(--text-color-error); + font-weight:700 +} +.mega-dialog.key-signature-warning-dialog .information .emailAddress{ + color:var(--text-color-high) +} +.mega-dialog.key-signature-warning-dialog .userAvatar img{ + border-radius:50%; + height:100%; + width:100% +} +.mega-dialog.dlkey-dialog{ + width:480px +} +.mega-dialog.dlkey-dialog .fm-dialog-new-folder-pad{ + margin:0 36px 0 0 +} +.mega-dialog.dlkey-dialog .instruction-message{ + padding:0 0 10px +} +.mega-dialog.dlkey-dialog .decryption-key{ + position:relative +} +.mega-dialog.dlkey-dialog .decryption-key .icon{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-position:-6px -5510px; + background-repeat:no-repeat; + height:22px; + left:13px; + opacity:.5; + position:absolute; + top:5px; + width:24px +} +.mega-dialog.bitcoin-invoice-dialog{ + border-radius:var(--border-radius); + overflow:hidden; + width:660px +} +.mega-dialog.bitcoin-invoice-dialog .helper-explanation{ + font-size:12px; + margin-top:10px +} +.mega-dialog.bitcoin-invoice-dialog .scan-code-instruction{ + -webkit-margin-start:35px; + color:var(--text-color-medium); + font-size:13px; + margin-inline-start:35px; + padding-top:35px +} +.mega-dialog.bitcoin-invoice-dialog .bitcoin-qr-code{ + -webkit-margin-start:26px; + margin:25px 0 20px; + margin-inline-start:26px; + width:276px +} +.mega-dialog.bitcoin-invoice-dialog .qr-code-mega-icon{ + background:url(../imagery/mega-bitcoin.db98bfc9d9dd860f.png) 0 -650px no-repeat; + display:none; + height:40.5px; + left:143.5px; + opacity:1; + position:absolute; + top:183px; + width:40.5px +} +.mega-dialog.bitcoin-invoice-dialog a.btn-open-wallet{ + border:2px solid #47abdc; + border-radius:5px; + box-sizing:border-box; + color:#47abdc; + display:block; + font-size:14px; + height:32px; + line-height:27px; + margin:0 36px; + overflow:hidden; + padding:0 10px; + text-align:center; + transition:all .2s ease-in-out +} +.mega-dialog.bitcoin-invoice-dialog a.btn-open-wallet:hover{ + background-color:#47abdc; + color:#fff +} +.mega-dialog.bitcoin-invoice-dialog .bitcoin-address{ + color:var(--text-color-medium); + font-size:11px; + padding:10px 30px 21px; + text-align:center +} +.mega-dialog.bitcoin-invoice-dialog .price-expired-instruction{ + display:none; + font:var(--text-body1); + margin-bottom:12px; + padding:0 36px +} +.mega-dialog.bitcoin-invoice-dialog .price-expired-instruction b{ + font-family:var(--text-font-family-semibold) +} +.mega-dialog.bitcoin-invoice-dialog section.content{ + display:flex; + flex-direction:row +} +.mega-dialog.bitcoin-invoice-dialog .left-side{ + width:50% +} +.mega-dialog.bitcoin-invoice-dialog .right-side{ + background-color:#47abdc; + color:#fff; + padding:35px 35px 26px; + width:50% +} +.mega-dialog.bitcoin-invoice-dialog .plan-icon{ + margin:30px 0 0 +} +.mega-dialog.bitcoin-invoice-dialog .plan-icon i{ + --icon-size:60px; + display:none +} +.mega-dialog.bitcoin-invoice-dialog .plan-icon.business i.business,.mega-dialog.bitcoin-invoice-dialog .plan-icon.pro1 i.pro1,.mega-dialog.bitcoin-invoice-dialog .plan-icon.pro2 i.pro2,.mega-dialog.bitcoin-invoice-dialog .plan-icon.pro3 i.pro3,.mega-dialog.bitcoin-invoice-dialog .plan-icon.pro4 i.pro4{ + display:block +} +.mega-dialog.bitcoin-invoice-dialog .invoice-date-time{ + font-size:13px; + text-align:start +} +.mega-dialog.bitcoin-invoice-dialog .plan-name{ + font-family:source_sans_prolight,sans-serif; + font-size:30px; + line-height:32px; + padding-top:5px +} +.mega-dialog.bitcoin-invoice-dialog .plan-duration{ + font-family:source_sans_prolight,sans-serif +} +.mega-dialog.bitcoin-invoice-dialog .plan-duration,.mega-dialog.bitcoin-invoice-dialog .plan-price-euros{ + font-size:21px; + line-height:24px; + padding-top:6px +} +.mega-dialog.bitcoin-invoice-dialog .plan-price-euros>span{ + font-size:.8em +} +.mega-dialog.bitcoin-invoice-dialog .plan-price-bitcoins{ + display:inline-block; + font-size:39px; + line-height:42px; + padding-top:26px +} +.mega-dialog.bitcoin-invoice-dialog .plan-price-bitcoins-btc{ + display:inline-block; + font-size:14px; + padding-left:4px +} +.mega-dialog.bitcoin-invoice-dialog .separator{ + border-bottom:1px solid #fff; + margin-bottom:25px; + padding-top:10px +} +.mega-dialog.bitcoin-invoice-dialog .expiry-instruction{ + box-sizing:border-box; + display:table-cell; + font-size:13px; + height:45px; + opacity:.5; + vertical-align:middle +} +.mega-dialog.bitcoin-invoice-dialog .clock-icon{ + -webkit-margin-end:5px; + background:url(../imagery/mega-bitcoin.db98bfc9d9dd860f.png) 0 -786px no-repeat; + display:inline-block; + height:15px; + margin:3px 0 0; + margin-inline-end:5px; + vertical-align:top; + width:15px +} +.mega-dialog.bitcoin-invoice-dialog .clock-icon:before{ + content:"\00a0" +} +.mega-dialog.bitcoin-invoice-dialog .time-to-expire{ + float:right; + font-size:32px; + line-height:42px; + opacity:.5 +} +.rtl .mega-dialog.bitcoin-invoice-dialog .time-to-expire{ + float:left +} +.mega-dialog.invite-dialog{ + width:644px +} +.mega-dialog.invite-dialog header .graphic.default-content{ + height:90px +} +.mega-dialog.invite-dialog .content-block{ + text-align:center +} +.mega-dialog.invite-dialog.success button.send,.mega-dialog.invite-dialog button.back{ + display:none +} +.mega-dialog.invite-dialog.success button.back{ + display:inline-flex +} +.mega-dialog.invite-dialog .achievement-dialog.input-info{ + padding:12px 0 0 +} +.mega-dialog.invite-dialog.success .default-content,.mega-dialog.invite-dialog:not(.success) .success-content{ + display:none !important +} +.mega-dialog.invite-dialog .how-it-works{ + margin-top:24px +} +.mega-dialog.invite-dialog .how-it-works i{ + transition:transform .2s +} +.mega-dialog.invite-dialog .how-it-works.closed i{ + transform:rotate(180deg) +} +.mega-dialog.invite-dialog .how-it-works-body{ + height:200px; + overflow:hidden; + transition:height .2s +} +.mega-dialog.invite-dialog .how-it-works-body.closed{ + height:0 +} +.mega-dialog .achievement-dialog.green-header{ + color:var(--text-color-success); + display:inline-block; + font:var(--text-h3); + padding:21px 10px 0; + position:relative +} +.mega-dialog .achievement-dialog.info-body{ + margin:16px 0; + text-align:start; + width:100% +} +.mega-dialog .achievement-dialog.info-body p{ + margin-bottom:8px +} +.mega-dialog .achievement-dialog.info-body p strong{ + color:var(--text-color-high) +} +.mega-dialog .achievement-dialog.info-body p.note{ + font:var(--text-body2); + margin-bottom:4px +} +.mega-dialog .achievement-dialog.info-body p .red{ + color:var(--text-color-error) +} +.mega-dialog .achievement-dialog.input-header{ + font:var(--text-h3); + padding:16px 0 +} +.mega-dialog .achievement-dialog.input-field{ + -webkit-padding-end:10px; + border-radius:3px; + box-sizing:border-box; + cursor:text; + height:auto !important; + line-height:0; + max-height:64px; + min-height:32px; + overflow:hidden; + padding-inline-end:10px; + text-align:center +} +.mega-dialog .active .achievement-dialog.input-field{ + background:var(--surface-grey-1) +} +.mega-dialog .achievement-dialog.input-field ul{ + clear:left; + font-size:0; + line-height:0; + overflow:hidden; + padding:0 10px; + transition:all 0ms ease-in-out +} +.mega-dialog .achievement-dialog.input-field li{ + -webkit-padding-end:18px; + -webkit-margin-end:6px; + cursor:default; + float:left; + font:var(--text-body1); + margin:0; + margin-inline-end:6px; + max-width:100%; + overflow:hidden; + padding:6px 4px; + padding-inline-end:18px; + position:relative; + text-overflow:ellipsis; + white-space:nowrap +} +.rtl .mega-dialog .achievement-dialog.input-field li{ + float:right +} +.mega-dialog li.token-input-token-invite .remove-item{ + top:6px +} +.mega-dialog .achievement-dialog.input-field input{ + background:transparent; + border:none; + box-sizing:border-box; + color:var(--text-color-high); + float:left; + margin:0; + padding:6px 0; + width:100px +} +.rtl .mega-dialog .achievement-dialog.input-field input{ + float:right +} +.mega-dialog .achievement-dialog.input-field input.tiny,.mega-dialog .multiple-input input.tiny,.mega-dialog ul.token-input-list-mega li input.tiny{ + width:0 !important +} +.mega-dialog .achievement-dialog li.token-input-input-token-invite{ + float:left; + list-style-type:none; + margin:0; + max-width:100%; + padding:0 4px +} +.rtl .mega-dialog .achievement-dialog li.token-input-input-token-invite{ + float:right +} +.mega-dialog .achievement-dialog.input-field input.red,.mega-dialog .achievement-dialog.input-info.red{ + color:var(--text-color-error) +} +.mega-dialog .achievement-dialog.input-info,.mega-dialog .achievement-dialog.success-info{ + color:var(--text-color-low); + font:var(--text-body2); + padding:12px 0 15px +} +.mega-dialog .achievement-dialog.success-info{ + padding:23px 0 26px +} +.mega-dialog .achievement-dialog.links-block{ + align-items:center; + display:flex +} +.mega-dialog .achievement-dialog.links-block.first{ + margin-top:24px +} +.mega-dialog .achievement-dialog.links-block.second{ + margin-top:8px +} +.mega-dialog .achievement-dialog.links-block input{ + width:100% +} +.mega-dialog .achievement-dialog.links-block .input-field{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + padding:0 14px +} +.mega-dialog .achievement-dialog.links-block .input-label{ + -webkit-margin-end:16px; + color:var(--text-color-high); + margin-inline-end:16px; + text-align:end; + width:50% +} +.mega-dialog .achievement-dialog.fm-dialog-body{ + padding:12px 48px 24px +} +.mega-dialog .achievement-dialog.header{ + font:var(--text-h2); + padding:0; + width:544px +} +.mega-dialog .achievement-dialog ol{ + margin:0; + padding:3px 0 5px 13px +} +.mega-dialog .achievement-dialog ol li{ + color:var(--text-color-medium); + display:list-item; + font-size:14px; + line-height:18px; + list-style:decimal; + padding:2px 0; + white-space:normal +} +.mega-dialog .achievement-dialog.header span{ + border-bottom:2px solid var(--text-color-error); + color:var(--text-color-error) +} +.mega-dialog .achievement-dialog.reward{ + display:inline-block; + margin:15px 21px 0; + position:relative; + text-align:start +} +.mega-dialog .achievement-dialog.reward i{ + vertical-align:top +} +.mega-dialog .achievement-dialog.reward-txt{ + color:var(--text-color-medium); + display:inline-block; + font-size:14px; + line-height:17px; + margin:6px 0 0 15px; + vertical-align:top +} +.mega-dialog .achievement-dialog.reward-txt span{ + color:#2ba6de; + display:block; + font-size:18px; + line-height:18px; + text-transform:uppercase +} +.mega-dialog .achievement-dialog.reward.storage span{ + color:#2ba6de +} +.mega-dialog .achievement-dialog.reward.bandwidth span{ + color:#31b500 +} +.mega-dialog .achievement-dialog.description{ + color:var(--text-color-medium); + font-size:14px; + line-height:18px; + padding:18px 0 0 +} +.mega-dialog .achievement-dialog.expires-txt{ + color:var(--text-color-high); + cursor:default; + font:var(--text-body1); + padding:15px 0 24px +} +.mega-dialog .achievement-dialog.expires-txt.red{ + color:var(--text-color-error) +} +body.fr .mega-dialog .achievement-dialog.expires-txt.red,body.jp .mega-dialog .achievement-dialog.expires-txt.red{ + line-height:18px +} +.mega-dialog .achievement-dialog.bottom-block{ + background:var(--surface-grey-1); + border-radius:0 0 12px 12px; + border-top:1px solid var(--divider-color); + padding:8px 24px 16px +} +.mega-dialog .achievement-dialog.bottom-block .achievement-dialog.reward{ + align-items:center; + border-bottom:1px solid var(--divider-color); + display:flex; + margin:0; + position:relative; + width:100% +} +.mega-dialog .achievement-dialog.bottom-block .achievement-dialog.reward:last-of-type{ + border-bottom:none +} +.mega-dialog .achievement-dialog.bottom-block .achievement-dialog.reward i{ + -webkit-margin-end:8px; + --icon-size:24px; + --mask-color:var(--icon-rest); + display:inline-block; + margin:10px 0; + margin-inline-end:8px +} +.mega-dialog .expired .achievement-dialog.bottom-block .achievement-dialog.reward i{ + --mask-color:var(--icon-inactive) +} +.mega-dialog .achievement-dialog.bottom-block .achievement-dialog.reward-txt{ + color:var(--text-color-high); + display:inline-block; + margin:0; + max-width:150px +} +.mega-dialog .achievement-dialog.bottom-block .achievement-dialog.reward span{ + -webkit-margin-start:auto; + color:var(--text-color-high); + margin-inline-start:auto; + text-align:end +} +.mega-dialog .achievement-dialog.status-block{ + bottom:0; + left:0; + position:absolute; + width:100% +} +.mega-dialog .achievement-dialog.status-block button{ + display:inline-block; + min-width:126px +} +.mega-dialog .achieved .achievement-dialog.status-block button{ + display:none +} +.mega-dialog .achievement-dialog.achieved-icon{ + display:none; + font-size:0; + line-height:0 +} +.mega-dialog .achieved .achievement-dialog.achieved-icon{ + display:block +} +.mega-dialog .achieved .achievement-dialog.right-block,.mega-dialog .one-reward .achievement-dialog.right-block{ + padding:0 15px; + vertical-align:middle +} +.mega-dialog .one-reward .achievement-dialog.right-block .reward{ + margin:0 0 4px 10px +} +.mega-dialog .achieved .achievement-dialog.right-block .reward,.mega-dialog .one-reward .right-block .reward.bandwidth{ + display:none +} +.fm-voucher-popup{ + width:440px +} +.fm-voucher-popup .content-block{ + align-items:center; + display:flex; + justify-content:space-between +} +.fm-voucher-popup .mega-input.title-ontop{ + -webkit-margin-inline-end:12px; + margin-inline-end:12px +} +.mega-dialog.resume-transfer{ + width:520px +} +.mega-dialog.resume-transfer .resume-transfers-button .icon{ + background-image:url(../imagery/mega-icons-sprite.48528e60724d858e.png); + background-size:262px auto; + height:28px; + width:28px +} +.mega-dialog.voucher-dialog{ + width:480px +} +.ct .mega-dialog.voucher-dialog{ + width:540px +} +.mega-dialog.voucher-dialog .plan-icon{ + -webkit-margin-start:3px; + display:inline-block; + margin-inline-start:3px; + margin-top:6px; + position:static +} +.mega-dialog.voucher-dialog .plan-icon i{ + --icon-size:60px; + display:none +} +.mega-dialog.voucher-dialog .plan-icon.business i.business,.mega-dialog.voucher-dialog .plan-icon.pro1 i.pro1,.mega-dialog.voucher-dialog .plan-icon.pro2 i.pro2,.mega-dialog.voucher-dialog .plan-icon.pro3 i.pro3,.mega-dialog.voucher-dialog .plan-icon.pro4 i.pro4{ + display:block +} +.mega-dialog.voucher-dialog .voucher-plan-info{ + -webkit-padding-start:15px; + display:inline-block; + margin-top:10px; + padding-inline-start:15px; + position:absolute +} +.mega-dialog.voucher-dialog .payment-plan-price,.mega-dialog.voucher-dialog .voucher-plan-title{ + color:var(--text-color-high); + font:var(--text-h1) +} +.mega-dialog.voucher-dialog .voucher-plan-price{ + -webkit-padding-end:10px; + float:right; + font:var(--text-h1); + padding-inline-end:10px; + padding-top:26px +} +.mega-dialog.voucher-dialog .voucher-account-balance{ + -webkit-padding-end:10px; + color:var(--text-color-error); + float:right; + font:var(--text-h1); + padding-inline-end:10px +} +.rtl .mega-dialog.voucher-dialog .voucher-account-balance,.rtl .mega-dialog.voucher-dialog .voucher-plan-price{ + float:left +} +.mega-dialog.voucher-dialog .voucher-account-balance.sufficient-funds{ + color:var(--text-color-success) +} +.mega-dialog.voucher-dialog .voucher-block{ + border-top:1px solid var(--stroke-grey-2); + box-sizing:border-box; + margin-top:19px; + padding-top:25px +} +.mega-dialog.voucher-dialog .voucher-title{ + letter-spacing:.1px; + line-height:125% +} +.mega-dialog.voucher-dialog .voucher-sub-title{ + letter-spacing:.1px; + line-height:200%; + margin-top:3px +} +.mega-dialog.voucher-dialog .voucher-information-help{ + color:#9b9b9b; + letter-spacing:.1px; + line-height:20px; + margin:20px 0 0 +} +.mega-dialog.voucher-dialog .voucher-dialog-td{ + display:table-cell; + overflow:hidden; + transition:all .2s ease-in-out +} +.mega-dialog.voucher-dialog .payment-eurosign{ + font-size:25px +} +.mega-dialog.voucher-dialog .voucher-input-container{ + display:flex; + width:100% +} +.mega-dialog.voucher-dialog .voucher-input-container .fm-account-input{ + -webkit-margin-end:8px; + flex:1; + margin-inline-end:8px +} +.mega-dialog.voucher-dialog .voucher-input-container .voucher-redeem-now{ + flex-shrink:0 +} +.mega-dialog.invitation-dialog{ + width:724px +} +.mega-dialog.invitation-dialog .content-block{ + padding:0; + text-align:center +} +.mega-dialog.invitation-dialog .table{ + display:table; + table-layout:fixed; + text-align:start; + width:100% +} +.mega-dialog.invitation-dialog .table-row{ + display:table-row +} +.mega-dialog.invitation-dialog .table-row:nth-child(2n){ + background:var(--surface-grey-2) +} +.mega-dialog.invitation-dialog .table-cell{ + border-left:1px dashed rgba(0, 0, 0, .1); + box-sizing:border-box; + color:var(--text-color-medium); + display:table-cell; + font-size:13px; + height:48px; + line-height:18px; + overflow:hidden; + padding:0 12px; + position:relative; + text-overflow:ellipsis; + vertical-align:middle; + white-space:nowrap +} +.mega-dialog.invitation-dialog .table-cell>i{ + --icon-size:24px; + display:block +} +.mega-dialog.invitation-dialog .table-cell .granted-icon{ + --mask-color:var(--label-green) +} +.mega-dialog.invitation-dialog .table-cell .pending-icon{ + --mask-color:var(--label-grey) +} +.mega-dialog.invitation-dialog .table-cell .pending-install-icon{ + --mask-color:var(--label-orange) +} +.mega-dialog.invitation-dialog .table-cell span{ + display:block; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.mega-dialog.invitation-dialog .table-cell .resend{ + position:absolute; + right:12px; + top:50%; + transform:translateY(-50%) +} +.rtl .mega-dialog.invitation-dialog .table-cell .resend{ + left:12px; + right:auto +} +.mega-dialog.invitation-dialog .table-cell:first-child{ + border-left:0; + padding:0 9px; + text-overflow:clip; + width:35px +} +.mega-dialog.invitation-dialog .table-cell:nth-child(3){ + width:170px +} +.mega-dialog.invitation-dialog .table-cell:nth-child(4){ + width:190px +} +.mega-dialog.invitation-dialog .table-row.header .table-cell{ + border-bottom:1px solid rgba(0, 0, 0, .1); + border-left:1px solid rgba(0, 0, 0, .1); + color:var(--text-color-medium); + display:table-cell; + font-size:13px; + height:16px; + line-height:16px; + padding:0 12px 4px +} +.mega-dialog.invitation-dialog .table-cell strong{ + font-size:14px +} +.mega-dialog.invitation-dialog .table-cell .dark-grey{ + color:var(--text-color-high) +} +.mega-dialog.invitation-dialog .table-cell .light-grey{ + color:var(--text-color-low) +} +.mega-dialog.invitation-dialog .table-cell .green{ + color:var(--text-color-success); + font-size:13px +} +.mega-dialog.invitation-dialog .table-cell .orange{ + color:var(--text-color-warning); + font-size:13px +} +.mega-dialog.invitation-dialog .table-cell.small{ + color:var(--text-color-low) +} +.mega-dialog.invitation-dialog .table-cell span{ + -webkit-margin-end:8px; + cursor:pointer; + display:block; + margin-inline-end:8px +} +.mega-dialog.invitation-dialog .table-cell span.desc{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:right -11445px; + background-repeat:no-repeat +} +.mega-dialog.invitation-dialog .table-cell span.asc{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:right -11475px; + background-repeat:no-repeat +} +.mega-dialog.invitation-dialog .table-scroll{ + border-bottom:1px solid rgba(0, 0, 0, .1); + height:385px +} +.mega-dialog.invitation-dialog .table-bg{ + min-height:100% +} +.mega-dialog.invitation-dialog .table-info{ + color:var(--text-color-medium); + font-size:14px; + line-height:18px; + padding:24px 48px 0; + text-align:start +} +.mega-dialog.invitation-dialog .table-info span{ + color:var(--text-color-warning) +} +.mega-dialog.create-widget-info-dialog{ + text-align:center; + width:640px +} +.mega-dialog.create-widget-info-dialog aside{ + text-align:start +} +.mega-dialog.create-widget-info-dialog .fm-widget-illustration{ + --width:336px; + height:120px; + margin:0 auto; + width:336px +} +.mega-dialog.create-widget-info-dialog .fm-widget-introduction,.mega-dialog.create-widget-info-dialog .fm-widget-manage{ + color:var(--text-color-high); + font:var(--text-h2); + margin:24px auto 12px +} +.mega-dialog.astropay-dialog{ + max-height:100% +} +.mega-dialog.astropay-dialog .astropay-label{ + display:block; + margin:16px 0 8px +} +.mega-dialog.astropay-dialog .fm-account-input{ + margin-top:5px +} +.mega-dialog.astropay-dialog .astropay-information{ + margin-bottom:20px +} +.mega-dialog.astropay-dialog .provider-name{ + color:var(--text-color-high) +} +.mega-dialog.astropay-dialog .provider-icon{ + margin:0 2px +} +.mega-dialog.astropay-dialog .powered-by-astropay{ + background:#fff; + border-radius:4px; + display:block; + height:36px; + width:80px +} +.mega-dialog.astropay-dialog .powered-by-astropay i{ + --icon-size:96px; + bottom:17px; + height:96px; + left:39px; + pointer-events:none; + position:absolute; + width:96px +} +.mega-dialog.astropay-dialog section{ + flex-shrink:unset +} +.rtl .mega-dialog.astropay-dialog .powered-by-astropay i{ + left:auto; + right:32px +} +.mega-dialog.limited-bandwidth-dialog:not(.pro){ + max-height:calc(100% - 40px); + max-width:calc(100% - 40px); + min-width:700px; + overflow:hidden; + width:1200px +} +.mega-dialog.limited-bandwidth-dialog .radio-txt{ + -webkit-padding-end:0; + padding-inline-end:0 +} +.mega-dialog.limited-bandwidth-dialog .pricing-page.radio-buttons{ + display:flex; + float:right; + height:28px; + margin:0 12px 14px 0 +} +.mega-dialog.limited-bandwidth-dialog .pricing-page.radio-buttons .radioOff,.mega-dialog.limited-bandwidth-dialog .pricing-page.radio-buttons .radioOn{ + vertical-align:text-top +} +.rtl .mega-dialog.limited-bandwidth-dialog .pricing-page.radio-buttons{ + float:left +} +.mega-dialog.limited-bandwidth-dialog .pricing-page.local-currency-tip{ + padding:0 +} +.mega-dialog.limited-bandwidth-dialog .pricing-page.local-currency-tip:not(.hidden){ + display:block +} +.mega-dialog.limited-bandwidth-dialog.pro .pricing-page.local-currency-tip{ + display:none +} +.mega-dialog.limited-bandwidth-dialog .dialog-scroll-overlay{ + background:linear-gradient(180deg, hsla(0, 0%, 100%, 0) 0, #fff); + border:0; + height:12px; + left:0; + margin:-12px 0 0; + position:absolute; + width:100% +} +.mega-dialog.limited-bandwidth-dialog.exceeded:not(.local-currency) .dialog-scroll-overlay{ + display:none +} +.mega-dialog.limited-bandwidth-dialog .dialog-cards{ + -webkit-margin-end:-12px; + margin:0; + margin-inline-end:-12px; + min-height:664px; + overflow:auto +} +.mega-dialog.limited-bandwidth-dialog .scrollable{ + -webkit-overflow-scrolling:touch; + border-bottom:1px solid var(--stroke-grey-2); + border-top:1px solid var(--stroke-grey-2); + box-sizing:border-box; + height:100%; + overflow:scroll; + position:relative +} +.mega-dialog.limited-bandwidth-dialog .pricing-page.plans-block{ + border-top:0; + max-width:none +} +.mega-dialog.limited-bandwidth-dialog .get-more-bonuses,.mega-dialog.limited-bandwidth-dialog .registered,.mega-dialog.limited-bandwidth-dialog.registered .not-registered{ + display:none +} +.mega-dialog.limited-bandwidth-dialog.registered .registered{ + display:block +} +.mega-dialog.limited-bandwidth-dialog.registered button .registered{ + display:flex +} +.mega-dialog.limited-bandwidth-dialog.achievements .get-more-bonuses{ + display:inline-flex +} +.mega-dialog.limited-bandwidth-dialog:not(.exceeded) .bottom-tips span{ + display:inline-block +} +.mega-dialog.limited-bandwidth-dialog .limited-bottom{ + display:none +} +.mega-dialog.limited-bandwidth-dialog footer .footer-container.limited-bottom{ + padding-bottom:16px +} +.local-currency .mega-dialog.limited-bandwidth-dialog .limited-bottom button.download{ + margin-top:20px +} +.mega-dialog.limited-bandwidth-dialog:not(.exceeded) .dialog.limited-bottom{ + display:flex +} +.mega-dialog.limited-bandwidth-dialog aside{ + display:flex; + justify-content:space-between; + margin-top:32px +} +.mega-dialog.limited-bandwidth-dialog aside>div{ + flex-basis:20% +} +.mega-dialog.limited-bandwidth-dialog aside>div:first-of-type{ + text-align:start +} +.mega-dialog.limited-bandwidth-dialog .bottom-tips{ + flex-basis:auto; + margin:auto +} +.mega-dialog.limited-bandwidth-dialog .dialog.bottom-tips span,.mega-dialog.limited-bandwidth-dialog.exceeded:not(.pro) .dialog.bottom-tips span{ + display:inline-block +} +.mega-dialog.limited-bandwidth-dialog.exceeded.pro .dialog.bottom-tips a{ + margin-bottom:8px +} +.mega-dialog.limited-bandwidth-dialog .step1-block .radio-txt:first-of-type{ + -webkit-margin-end:24px; + margin-inline-end:24px +} +.mega-dialog.limited-bandwidth-dialog .big-104px-icon.full,.mega-dialog.limited-bandwidth-dialog .dialog.header-before-icon.exceeded,.mega-dialog.limited-bandwidth-dialog .dialog.pro-exceeded-bl,.mega-dialog.limited-bandwidth-dialog .dialog.pro-exceeded-slider,.mega-dialog.limited-bandwidth-dialog .dialog.transfer-slider,.mega-dialog.limited-bandwidth-dialog.exceeded .dialog.header-before-icon.limited,.mega-dialog.limited-bandwidth-dialog.exceeded.pro .dialog.p-after-icon,.mega-dialog.limited-bandwidth-dialog.exceeded.pro button.continue,.mega-dialog.limited-bandwidth-dialog.exceeded.pro button.upgrade,.mega-dialog.limited-bandwidth-dialog.exceeded .semi-huge-icon.almost-full,.mega-dialog.limited-bandwidth-dialog.exceeded:not(.pro) .limited-bl,.mega-dialog.limited-bandwidth-dialog .semi-huge-icon.speedometer.full,.mega-dialog.limited-bandwidth-dialog .step1-block,.mega-dialog.limited-bandwidth-dialog button.close,.mega-dialog.limited-bandwidth-dialog button.upgrade.pro{ + display:none +} +.mega-dialog.limited-bandwidth-dialog.exceeded .dialog.header-before-icon.exceeded,.mega-dialog.limited-bandwidth-dialog.exceeded:not(.pro) .step1-block,.mega-dialog.limited-bandwidth-dialog.exceeded button.close,.mega-dialog.limited-bandwidth-dialog.pro.exceeded .dialog.pro-exceeded-bl,.mega-dialog.limited-bandwidth-dialog.slider .dialog.pro-exceeded-slider,.mega-dialog.limited-bandwidth-dialog:not(.exceeded) .step1-block{ + display:block +} +.logged .mega-dialog.limited-bandwidth-dialog.exceeded.achievements:not(.pro) .semi-huge-icon.speedometer.full,.logged .mega-dialog.limited-bandwidth-dialog.exceeded:not(.pro):not(.achievements) .big-104px-icon.full,.mega-dialog.limited-bandwidth-dialog.exceeded.pro button.upgrade.pro,.mega-dialog.limited-bandwidth-dialog.exceeded:not(.pro) .semi-huge-iconspeedometer,.not-logged .mega-dialog.limited-bandwidth-dialog.exceeded:not(.pro) .semi-huge-icon.speedometer.full{ + display:inline-block +} +.mega-dialog.limited-bandwidth-dialog .dialog.transfer-overquota-txt{ + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + margin:0 0 16px +} +.mega-dialog.limited-bandwidth-dialog .dialog.transfer-overquota-txt span{ + border-bottom:2px solid #ff333a; + color:var(--text-color-high); + font:var(--text-h3); + padding:0 2px +} +.mega-dialog.limited-bandwidth-dialog .dialog.overquota-bott-bl,.mega-dialog.limited-bandwidth-dialog .dialog.overquota-bottom-bl,.mega-dialog.limited-bandwidth-dialog:not(.exceeded) .dialog.transfer-overquota-txt{ + display:none +} +.logged .mega-dialog.limited-bandwidth-dialog.exceeded.achievements:not(.pro) .dialog.overquota-bott-bl,.logged .mega-dialog.limited-bandwidth-dialog:not(.exceeded).achievements .dialog.overquota-bott-bl,.not-logged .mega-dialog.limited-bandwidth-dialog.exceeded:not(.pro) .dialog.overquota-bott-bl,.not-logged .mega-dialog.limited-bandwidth-dialog:not(.exceeded) .dialog.overquota-bott-bl{ + box-shadow:0 -1px 0 0 rgba(0, 0, 0, .1); + display:table; + width:100% +} +.mega-dialog.limited-bandwidth-dialog .dialog.overquota-bott-buttons,.mega-dialog.limited-bandwidth-dialog .dialog.overquota-bott-txt{ + display:table-cell; + height:104px; + position:relative; + vertical-align:middle +} +.mega-dialog.limited-bandwidth-dialog .dialog.overquota-bott-buttons{ + -webkit-padding-end:20px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + padding-inline-end:20px; + text-align:end; + white-space:nowrap; + width:100px +} +.mega-dialog.limited-bandwidth-dialog .dialog.overquota-bott-txt i{ + left:18px; + margin:-34px 0 0; + position:absolute; + top:50% +} +.rtl .mega-dialog.limited-bandwidth-dialog .dialog.overquota-bott-txt i{ + left:auto; + right:18px +} +.mega-dialog.limited-bandwidth-dialog .dialog.overquota-bott-txt span{ + -webkit-padding-end:17px; + -webkit-padding-start:108px; + display:none; + padding:28px 0; + padding-inline-end:17px; + padding-inline-start:108px +} +.logged .mega-dialog.limited-bandwidth-dialog.achievements span.logged.achievements,.not-logged .mega-dialog.limited-bandwidth-dialog.achievements span.not-logged.achievements,.not-logged .mega-dialog.limited-bandwidth-dialog:not(.achievements) span.not-logged.no-achievements{ + display:block +} +.mega-dialog.limited-bandwidth-dialog .overquota-bott-buttons button{ + -webkit-margin-start:9px; + display:none; + margin-inline-start:9px +} +.mega-dialog.limited-bandwidth-dialog.achievements .overquota-bott-buttons button.get-more-bonuses,.not-logged .mega-dialog.limited-bandwidth-dialog.exceeded .overquota-bott-buttons button.login,.not-logged .mega-dialog.limited-bandwidth-dialog:not(.achievements) .overquota-bott-buttons button.create-account{ + display:inline-block +} +.logged .mega-dialog.limited-bandwidth-dialog.achievements .overquota-bott-buttons button .not-registered{ + display:none +} +.logged .mega-dialog.limited-bandwidth-dialog.achievements .overquota-bott-buttons button .registered{ + display:block +} +.mega-dialog.limited-bandwidth-dialog.hidden-bottom .dialog.overquota-bott-bl{ + display:none !important +} +.mega-dialog.limited-bandwidth-dialog .dialog.transfer-overquota-txt span.countdown{ + margin:0 5px +} +.mega-dialog.limited-bandwidth-dialog .dialog.transfer-overquota-txt span span{ + border:0; + color:var(--text-color-medium) +} +.mega-dialog.limited-bandwidth-dialog .dialog.transfer-plans{ + margin:0 -10px; + padding:8px 0 0; + white-space:nowrap +} +.mega-dialog.limited-bandwidth-dialog .dialog.pro-exceeded-txt{ + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body1); + padding:0 0 6px +} +.mega-dialog.limited-bandwidth-dialog .account.chart-block{ + align-items:center; + display:flex; + font:var(--text-h3); + justify-content:center; + margin:16px 0 24px; + text-align:start +} +.mega-dialog.limited-bandwidth-dialog .account.chart.body{ + transform:none +} +.mega-dialog.limited-bandwidth-dialog .account.chart.data{ + -webkit-margin-start:24px; + left:0; + margin:0; + margin-inline-start:24px +} +.mega-dialog.limited-bandwidth-dialog:not(.exceeded) .dialog.big-buttons-block{ + display:none +} +.mega-dialog.limited-bandwidth-dialog.exceeded.pro .dialog.big-buttons-block{ + display:inline-block; + margin:2px 0 10px; + padding:16px 0 0; + text-align:start +} +.mega-dialog.limited-bandwidth-dialog.exceeded.pro.slider .dialog.big-buttons-block{ + margin:2px 0 1px +} +.mega-dialog.limited-bandwidth-dialog.exceeded.pro .bandwidth .chart.data .perc-txt:before{ + display:none +} +.mega-dialog.limited-bandwidth-dialog .bandwidth .perc-txt{ + color:var(--text-color-high); + display:block; + font:var(--text-body1); + height:auto; + left:50%; + position:absolute; + top:50%; + transform:translateX(-50%) translateY(-50%); + z-index:11 +} +.mega-dialog.limited-bandwidth-dialog.exceeded.pro .chart.progressbars span:before{ + background:var(--surface-error) +} +.mega-dialog.limited-bandwidth-dialog.pro.exceeded{ + width:724px +} +.mega-dialog.limited-bandwidth-dialog .dialog-slider-txt{ + font-size:20px; + line-height:25px; + margin:22px auto 0; + max-width:504px; + position:relative; + text-align:center +} +.mega-dialog.limited-bandwidth-dialog .dialog-slider-txt:before{ + background-color:rgba(0, 0, 0, .1); + content:""; + display:block; + height:1px; + left:0; + position:absolute; + top:13px; + width:100% +} +.mega-dialog.limited-bandwidth-dialog .dialog.pro-slider-description{ + display:inline-block; + padding:13px 0 0 +} +.mega-dialog.limited-bandwidth-dialog .bandwith-settings .slider.numbers.val2{ + -webkit-margin-start:501px; + margin-inline-start:501px +} +.mega-dialog.limited-bandwidth-dialog .bandwith-settings{ + direction:ltr; + margin:48px auto 24px +} +.mega-dialog.limited-bandwidth-dialog .ui-slider.ui-widget-content{ + margin:15px auto 0; + width:100% +} +.mega-dialog.limited-bandwidth-dialog .dialog-slider-txt span{ + font:var(--text-h3); + padding:0 15px; + position:relative +} +.mega-dialog.limited-bandwidth-dialog.exceeded.pro.slider .radio-txt{ + padding-top:8px +} +.mega-dialog.exceeded.pro.slider .checkboxOn,.mega-dialog.limited-bandwidth-dialog.exceeded.pro.slider .checkboxOff{ + margin-top:10px +} +.mega-dialog.limited-bandwidth-dialog.exceeded.uploads .bottom-tips,.mega-dialog.limited-bandwidth-dialog.exceeded.uploads .msg-prewarning,.mega-dialog.limited-bandwidth-dialog.exceeded.uploads .transfer-overquota-txt{ + display:none +} +.mega-dialog.limited-bandwidth-dialog.exceeded.uploads footer aside{ + padding:0 +} +.mega-dialog.limited-bandwidth-dialog .plans-row .pricing-page.plan{ + border-color:var(--stroke-grey-2) +} +.mega-dialog.limited-bandwidth-dialog .plans-row .pricing-page.plan:not(.details){ + border-top:none +} +.rtl .mega-dialog.limited-bandwidth-dialog .plans-row .pricing-page.plan:last-child,body:not(.rtl) .mega-dialog.limited-bandwidth-dialog .plans-row .pricing-page.plan:first-child{ + border-left:none +} +.mega-dialog.limited-bandwidth-dialog .pricing-page.plans-block{ + border-bottom:none +} +.mega-dialog.limited-bandwidth-dialog .pricing-page i{ + --icon-size:16px; + --mask-color:var(--text-color-medium); + position:absolute; + right:10px; + top:10px; + transition:background-color .2s ease-in-out +} +.mega-dialog.limited-bandwidth-dialog .pricing-page i:hover{ + --mask-color:var(--text-color-high) +} +.rtl .mega-dialog.limited-bandwidth-dialog .pricing-page i{ + left:13px; + right:auto +} +.mega-dialog.limited-bandwidth-dialog .ui-slider .ui-slider-range{ + background:var(--surface-error) +} +@media only screen and (max-height:768px){ +.mega-dialog.limited-bandwidth-dialog .pricing-page.plan-button{ + margin:12px 0 20px +} +.mega-dialog.limited-bandwidth-dialog .pricing-page.plan-info{ + font-size:14px; + line-height:21px +} +.mega-dialog.limited-bandwidth-dialog .pricing-page.plan-label{ + margin-bottom:10px +} +.mega-dialog.limited-bandwidth-dialog .dialog.transfer-overquota-txt{ + padding-bottom:8px +} +} +.mega-dialog.storage-dialog{ + width:644px +} +.mega-dialog.storage-dialog header .graphic{ + height:90px +} +.mega-dialog.storage-dialog .fm-dialog-body{ + padding:0 48px 19px; + text-align:center +} +.mega-dialog.storage-dialog .body-p{ + font:var(--text-body1); + padding:0 0 12px +} +.mega-dialog.storage-dialog .body-header{ + color:var(--text-color-medium); + font:var(--text-h3); + margin:0 auto; + max-width:420px +} +.mega-dialog.storage-dialog .odq-warning .body-p{ + -webkit-margin-start:16px; + color:var(--text-color-high); + display:inline-block; + font-family:var(--text-font-family-semibold); + margin-bottom:16px; + margin-inline-start:16px; + margin-top:-35px; + padding:initial; + text-align:initial; + vertical-align:middle; + width:400px +} +.mega-dialog.storage-dialog .odq-warning .body-p span{ + color:var(--text-color-warning) +} +.mega-dialog.storage-dialog .odq-warning .warning-icon{ + display:inline-block; + height:60px; + width:60px +} +.mega-dialog.storage-dialog .odq-warning{ + margin-bottom:24px; + margin-top:11px +} +.mega-dialog.storage-dialog .odq-warning .odq-divider{ + background:var(--stroke-grey-2); + border-radius:4px; + height:1px; + width:100% +} +.mega-dialog.storage-dialog .fm-dialog-body.full.odq{ + padding-bottom:36px +} +.mega-dialog.storage-dialog .body-p a{ + color:var(--text-color-success); + cursor:pointer +} +.mega-dialog.storage-dialog .body-p b{ + font:var(--text-body1-bold) +} +.mega-dialog.storage-dialog .body-p.medium{ + font:var(--text-body1); + padding:2px 0 0 +} +.mega-dialog.storage-dialog .body-p.small{ + color:var(--text-color-medium); + font:var(--text-body2); + padding:12px 0 15px +} +.mega-dialog.storage-dialog .body-p.small.top-pad{ + padding:24px 0 0 +} +.mega-dialog.storage-dialog .divider-txt{ + color:var(--text-color-low); + font:var(--text-body1); + margin-top:12px; + padding:16px 0 13px; + position:relative +} +.mega-dialog.storage-dialog .divider-txt:before{ + background:var(--surface-grey-2); + content:""; + height:1px; + left:0; + position:absolute; + top:28px; + width:100% +} +.rtl .mega-dialog.storage-dialog .divider-txt:before{ + left:auto; + right:0 +} +.mega-dialog.storage-dialog .divider-txt span{ + background:var(--surface-main); + display:inline-block; + padding:0 16px; + position:relative +} +.mega-dialog.storage-dialog .achievements-bl,.mega-dialog.storage-dialog.achievements .no-achievements-bl{ + display:none +} +.mega-dialog.storage-dialog.achievements .achievements-bl{ + display:block +} +.mega-dialog.storage-dialog .body-p i.rocket{ + cursor:pointer +} +.mega-dialog.storage-dialog .body-p.small a{ + color:var(--text-color-medium); + cursor:pointer; + text-decoration:underline +} +.mega-dialog.storage-dialog .body-p.small i{ + display:inline-block; + margin:-2px 0 0; + vertical-align:top +} +.mega-dialog.storage-dialog.almost-full .full,.mega-dialog.storage-dialog.full .almost-full{ + display:none +} +.mega-dialog.storage-dialog .buttons-block{ + display:flex; + font-size:0; + justify-content:center; + padding:12px 0 0 +} +.mega-dialog.storage-dialog .buttons-block button{ + margin:0 6px +} +.mega-dialog.storage-dialog.almost-full .chart.progressbars span:after,.mega-dialog.storage-dialog.almost-full .chart.progressbars span:before{ + background:var(--stroke-warning) +} +.mega-dialog.storage-dialog.almost-full .size-txt{ + color:var(--text-color-warning) !important +} +.mega-dialog.storage-dialog .chart .perc-txt{ + color:var(--text-color-high); + display:block; + font:var(--text-body1); + height:auto; + left:50%; + position:absolute; + top:50%; + transform:translateX(-50%) translateY(-50%); + z-index:11 +} +.mega-dialog.storage-dialog .account.chart.body:after{ + background:var(--surface-main) +} +.mega-dialog.storage-dialog .account.chart.body{ + transform:none +} +.mega-dialog.storage-dialog .account.chart.overlay span:after{ + border-color:var(--stroke-main) +} +.mega-dialog.storage-dialog .account.chart.data{ + -webkit-margin-start:24px; + margin:0; + margin-inline-start:24px +} +.mega-dialog.storage-dialog .account.chart-block{ + align-items:center; + display:flex; + font-size:0; + justify-content:center; + margin:24px 0 32px; + padding:0; + text-align:start +} +.mega-dialog.widget-dialog{ + width:690px +} +.widget-dialog .fm-subheading{ + color:var(--text-color-high); + letter-spacing:0; + margin:32px auto 12px; + width:556px +} +.widget-dialog .fm-body-text{ + align-items:center; + color:var(--text-color-high); + display:flex; + font:var(--text-body2); + letter-spacing:0; + margin:24px 2px +} +.widget-dialog .widget-folder-icon{ + --mask-color:var(--text-color-medium); + --icon-size:24px; + -webkit-margin-end:8px; + display:inline-block; + margin-inline-end:8px +} +.widget-dialog .fm-body-text span{ + width:496px +} +.widget-dialog .widget-code{ + align-items:center; + background:var(--surface-main); + border:1px solid var(--stroke-grey-2); + border-radius:3px; + display:flex; + overflow:hidden; + padding:8px 10px +} +.widget-dialog .widget-code-wrapper{ + color:var(--text-color-medium); + cursor:text; + font:var(--text-body1); + line-height:1.5; + -webkit-user-select:text; + -moz-user-select:text; + -ms-user-select:text; + user-select:text; + white-space:normal; + word-break:break-word +} +.widget-dialog .widget-dialog-buttons{ + height:32px; + margin:0 8px +} +.widget-dialog .fm-dialog-tab{ + margin-top:8px +} +.widget-dialog .fm-dialog-tab .fm-tab-wrapper{ + align-items:center; + display:flex; + justify-content:center; + margin:0 auto; + width:auto +} +.widget-dialog .fm-dialog-tab .fm-tab{ + border-bottom:2px solid transparent; + color:var(--text-color-high); + cursor:pointer; + font:var(--text-body1); + min-width:100px; + opacity:.4; + padding:13px 20px; + text-align:center; + transition:var(--transition-border), var(--transition-opacity) +} +.widget-dialog .fm-dialog-tab .fm-tab i{ + --icon-size:24px; + --mask-color:var(--icon-rest) +} +.widget-dialog .fm-dialog-tab .fm-tab.active{ + border-bottom:2px solid var(--stroke-info); + opacity:1 +} +.mega-dialog.widget-dialog .tab-icon{ + --icon-size:24px; + --mask-color:var(--icon-rest); + -webkit-margin-end:10px; + display:inline-block; + float:left; + margin-inline-end:10px +} +.widget-dialog .close-button{ + min-width:100px +} +.widget-dialog .fm-dialog-block{ + margin:24px 0 0 +} +.widget-dialog .fm-block-subheading{ + color:var(--text-color-high); + font-size:14px; + margin-bottom:12px +} +.widget-dialog .embed-block{ + border-radius:2px; + box-sizing:border-box; + cursor:pointer; + display:table; + height:100%; + transition:all .2s ease-out; + width:calc(50% - 4px) +} +.widget-dialog .embed-block.active .embed-button-subheading{ + color:var(--text-color-high); + font-family:var(--text-font-family-semibold) +} +.widget-dialog .embed-button-centre{ + -webkit-margin-end:4px; + border-radius:3px; + margin-inline-end:4px; + padding:8px; + text-align:center; + transition:all .2s ease-out +} +.widget-dialog .embed-button{ + border-radius:3px; + display:table; + height:44px +} +.widget-dialog .embed-button.centre-button{ + margin:12px auto 0 +} +.widget-dialog .right-button .embed-button-centre{ + -webkit-margin-start:4px; + margin-inline-start:4px +} +.widget-dialog .embed-button-container{ + background:var(--surface-grey-2); + border-radius:2px; + display:flex; + justify-content:space-between; + padding:8px +} +.widget-dialog .embed-button-centre:hover{ + background:var(--surface-main); + transition:all .2s ease-out +} +.widget-dialog .embed-button-subheading{ + -webkit-margin-start:12px; + color:#999; + display:inline-block; + font-size:13px; + line-height:19px; + margin-inline-start:12px; + text-align:center +} +.widget-dialog .embed-button.light-theme{ + background:#fff; + background-image:linear-gradient(-180deg, hsla(0, 0%, 100%, 0), hsla(0, 0%, 96.5%, .5)); + border:1px solid rgba(0, 0, 0, .05); + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + transition:all .5s ease-out +} +.widget-dialog .embed-button.dark-theme{ + background-color:#f33; + border:1px solid #d90007; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .25),inset 0 -2px 3px 0 rgba(159, 0, 0, .12); + transition:all .5s ease-out +} +.widget-dialog .embed-button.dark-theme .embed-action-text{ + color:#fff +} +.widget-dialog .embed-button.light-theme .embed-action-text{ + color:#70777b +} +.widget-dialog .embed-button.dark-theme:hover{ + background-color:#f44; + border:1px solid #d90007; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .25),inset 0 -2px 3px 0 rgba(159, 0, 0, .12); + transition:all .5s ease-out +} +.widget-dialog .embed-button.light-theme:hover{ + background-image:linear-gradient(-180deg, hsla(0, 0%, 100%, 0), hsla(0, 0%, 96.5%, .25)); + border:1px solid #eee; + box-shadow:0 0 0 0 transparent; + transition:all .5s ease-out +} +.widget-dialog .embed-button .embed-content-wrapper{ + display:table-cell; + padding:0 16px; + vertical-align:middle +} +.widget-dialog .embed-button .embed-mega-icon{ + -webkit-margin-end:12px; + background-image:url(../imagery/mega-puf-embed-icons-2x.b0b1d898bf5095ad.png); + background-repeat:no-repeat; + background-size:56px auto; + display:inline-block; + height:25px; + margin-inline-end:12px; + vertical-align:middle; + width:25px +} +.widget-dialog .embed-button.dark-theme .embed-mega-icon{ + background-position:-2px -2px +} +.widget-dialog .embed-button.light-theme .embed-mega-icon{ + background-position:-29px -2px +} +.widget-dialog .embed-button .embed-action-text{ + display:inline-block; + font-family:source_sans_prosemibold,sans-serif; + vertical-align:middle +} +.widget-dialog .embed-button-select{ + display:inline-flex +} +.widget-dialog .uiembed-button{ + margin:0 +} +.widget-dialog .url-link .widget-dialog-buttons{ + padding-top:10px +} +.mega-dialog.copyrights-dialog{ + width:644px +} +.mega-dialog.copyrights-dialog p{ + margin-top:20px +} +.mega-dialog.achievements-list-dialog{ + overflow:hidden; + width:996px +} +.mega-dialog.achievements-list-dialog .content-block{ + background:var(--surface-grey-1); + padding:0 +} +.theme-dark .mega-dialog.achievements-list-dialog .content-block{ + background:var(--surface-grey-2) +} +.mega-dialog.achievements-list-dialog .account.top-header.small{ + padding:40px 40px 0; + text-align:center +} +.mega-dialog.achievements-list-dialog header{ + border-bottom:1px solid var(--stroke-grey-2) +} +.mega-dialog.achievements-list-dialog .achievements-scroll{ + max-height:550px; + overflow:hidden; + padding:0 48px +} +.mega-dialog.achievements-list-dialog .achievement-banner{ + display:flex; + margin-top:24px; + padding:32px; + width:100% +} +.mega-dialog.achievements-list-dialog .achievement-banner,.mega-dialog.achievements-list-dialog .achievements-cell{ + background:var(--surface-main); + border:2px solid var(--stroke-grey-2); + border-radius:12px +} +.mega-dialog.achievements-list-dialog .achieved-block{ + align-items:center; + display:flex; + position:relative; + width:33.33333% +} +.mega-dialog.achievements-list-dialog .achieved-block:last-of-type{ + justify-content:flex-end +} +.mega-dialog.achievements-list-dialog .achieved-block .achievements-header-icon{ + height:48px; + margin:0 24px; + width:48px +} +.mega-dialog.achievements-list-dialog .achievement-banner .fm-account-header{ + display:block; + font:var(--text-color-high); + height:auto; + margin:0 +} +.mega-dialog.achievements-list-dialog .achievement-banner .fm-account-header span{ + line-height:24px +} +.mega-dialog.achievements-list-dialog .achievement-banner .quota-txt{ + color:var(--text-color-high); + display:block; + font:var(--text-h1) +} +.mega-dialog.achievements-list-dialog .achieved-block.invitees .new-dialog-icon{ + -webkit-margin-start:8px; + --icon-size:24px; + --mask-color:var(--text-color-high); + cursor:pointer; + display:inline-block; + margin-inline-start:8px; + opacity:.7; + transition:.2s +} +.mega-dialog.achievements-list-dialog .achieved-block.invitees .new-dialog-icon:hover{ + opacity:1 +} +.mega-dialog.achievements-list-dialog .achievements-list{ + display:flex; + flex-wrap:wrap; + margin-top:40px +} +.mega-dialog.achievements-list-dialog .achievements-cell{ + -webkit-margin-end:24px; + display:flex; + flex-direction:column; + justify-content:space-between; + margin-bottom:24px; + margin-inline-end:24px; + position:relative; + width:calc(33.33333% - 16px) +} +.mega-dialog.achievements-list-dialog .achievement-details{ + display:flex; + flex-direction:column; + height:100% +} +.mega-dialog.achievements-list-dialog .achievements-cell:nth-child(3n){ + -webkit-margin-end:0; + margin-inline-end:0 +} +.mega-dialog.achievements-list-dialog .achievements-cell .image-container{ + display:flex; + flex-grow:0; + flex-shrink:0; + height:128px; + margin:12px auto; + width:128px +} +.mega-dialog.achievements-list-dialog .achievements-cell .image-container .green-tick{ + height:100%; + width:100% +} +.mega-dialog.achievements-list-dialog .achievements-cell .image-container .achievement-icon{ + --width:100%; + margin:auto; + width:100% +} +.mega-dialog.achievements-list-dialog .ach-install-megasync .achievement-icon{ + height:70px +} +.mega-dialog.achievements-list-dialog .ach-install-mobile-app .achievement-icon{ + height:102px +} +.mega-dialog.achievements-list-dialog .ach-invite-friend .achievement-icon{ + height:74px +} +.mega-dialog.achievements-list-dialog .ach-sms-verification .achievement-icon{ + height:101px +} +.mega-dialog.achievements-list-dialog .ach-create-account .achievement-icon{ + height:88px +} +.mega-dialog.achievements-list-dialog .achievement-full.info{ + display:flex; + flex-direction:column; + height:100%; + justify-content:space-between; + padding:0 24px; + position:relative; + text-align:center +} +.mega-dialog.achievements-list-dialog .achievements-cell .achievement-full.info .subtitle-txt{ + height:40px; + line-height:20px; + max-width:236px; + text-align:center +} +.mega-dialog.achievements-list-dialog .achievement-full.info .achi-content-txt{ + color:var(--text-color-medium); + display:block; + font:var(--text-body2); + padding-top:8px; + text-align:center; + vertical-align:top +} +.mega-dialog.achievements-list-dialog .achievement-full.info .content-txt-container{ + display:block; + height:112px; + padding-top:8px +} +.mega-dialog.achievements-list-dialog .achievements-cell .remind-icon{ + -webkit-margin-start:4px; + cursor:pointer; + display:inline-block; + height:24px; + margin-inline-start:4px; + margin-top:-6px; + vertical-align:middle; + width:24px +} +.mega-dialog.achievements-list-dialog .achievements-cell .dropdown-inverted-arrow{ + position:absolute; + right:46px; + top:0 +} +.rtl .mega-dialog.achievements-list-dialog .achievements-cell .dropdown-inverted-arrow{ + left:46px; + right:auto +} +.mega-dialog.achievements-list-dialog .achievements-cell .icon-container{ + -webkit-margin-start:-4px; + display:inline-block; + height:22px; + margin-inline-start:-4px; + margin-top:2px; + overflow:visible; + position:absolute; + vertical-align:top; + width:24px +} +.mega-dialog.achievements-list-dialog .content-txt-container ol{ + color:var(--texct-color-medium); + list-style-position:inside; + margin:0; + padding:0 +} +.mega-dialog.achievements-list-dialog .content-txt-container ol li{ + margin-bottom:12px; + position:relative; + text-align:center +} +.mega-dialog.achievements-list-dialog .content-txt-container ol li:last-child{ + margin-bottom:0 +} +.mega-dialog.achievements-list-dialog .content-txt-container li a{ + color:var(--text-color-medium); + cursor:default; + font:var(--text-body1); + text-decoration:none; + width:216px +} +.mega-dialog.achievements-list-dialog .achievements-cell .achievement-dialog.expires-txt{ + align-self:center; + border-radius:4px; + display:none; + margin:24px 0; + padding:2px 16px; + text-align:center +} +.mega-dialog.achievements-list-dialog .achievements-cell .achievement-dialog.expires-txt.info{ + background:var(--banner-background-info); + border:1px solid var(--banner-border-info); + color:var(--banner-text-info) +} +.mega-dialog.achievements-list-dialog .achievements-cell .achievement-dialog.expires-txt.error{ + background:var(--banner-background-error); + border:1px solid var(--banner-border-error); + color:var(--banner-text-error); + min-width:70% +} +.mega-dialog.achievements-list-dialog .achievements-cell.achieved .achievement-dialog.expires-txt,.mega-dialog.achievements-list-dialog .achievements-cell.one-reward .achievement-dialog.expires-txt{ + display:inline-block +} +.mega-dialog.achievements-list-dialog .achievement-full.info .mega-button.positive{ + display:inline-block; + margin:24px auto 16px; + position:relative; + width:auto +} +.mega-dialog.achievements-list-dialog .achievements-cell.achieved .mega-button.positive,.mega-dialog.achievements-list-dialog .achievements-cell.one-reward .mega-button.positive{ + display:none +} +.mega-dialog.achievements-list-dialog footer aside a,.mega-dialog.achievements-list-dialog footer aside p{ + font:var(--text-h3) +} +.mega-dialog.achievements-list-dialog footer a{ + text-decoration:underline +} +.mega-dialog.achievements-list-dialog footer .footer-container p span{ + color:var(--text-color-success) +} +@media only screen and (max-height:740px){ +.mega-dialog.achievements-list-dialog .achievements-scroll{ + max-height:448px +} +} +.mega-dialog.duplicate-conflict{ + width:564px +} +.mega-dialog.duplicate-conflict .radio-txt{ + display:initial; + padding:0 +} +.mega-dialog.duplicate-conflict .info-txt{ + color:var(--text-color-medium); + font-size:14px; + line-height:24px +} +.mega-dialog.duplicate-conflict .info-txt strong{ + display:inline-block; + font-family:var(--text-font-family-semibold); + max-width:100%; + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + vertical-align:top; + white-space:nowrap; + word-break:break-word +} +.mega-dialog.duplicate-conflict .info-txt.light-grey{ + color:var(--text-color-low) +} +.mega-dialog.duplicate-conflict .info-txt.light-grey .red{ + white-space:nowrap +} +.mega-dialog.duplicate-conflict .red-header{ + color:var(--text-color-error); + font-size:17px; + line-height:26px +} +.mega-dialog.duplicate-conflict .action-block{ + background:none; + border:none; + border-radius:8px; + box-sizing:border-box; + cursor:pointer; + left:-12px; + margin-top:12px; + outline:none; + padding:4px 12px; + position:relative; + text-align:start; + width:calc(100% + 24px) +} +.rtl .mega-dialog.duplicate-conflict .action-block{ + left:auto; + right:-12px +} +.mega-dialog.duplicate-conflict .action-block:hover{ + background:var(--surface-grey-2) +} +.mega-dialog.duplicate-conflict .info-block{ + display:table; + padding:9px 0; + table-layout:fixed; + width:100% +} +.mega-dialog.duplicate-conflict .file-info{ + -webkit-padding-start:78px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:table-cell; + font-size:0; + height:60px; + padding-inline-start:78px; + vertical-align:middle; + width:100% +} +.mega-dialog.duplicate-conflict .file-info .info-txt{ + line-height:20px +} +.mega-dialog.duplicate-conflict .file-name{ + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.mega-dialog.duplicate-conflict .export-icon{ + -webkit-margin-start:-4px; + margin:0; + margin-inline-start:-4px; + position:absolute +} +.mega-dialog.duplicate-conflict .file-date i,.mega-dialog.duplicate-conflict .file-date span{ + display:inline-block; + position:relative; + vertical-align:top +} +.mega-dialog.duplicate-conflict .file-date i{ + -webkit-margin-start:-4px; + -webkit-margin-end:1px; + margin:-1px 0 0; + margin-inline-end:1px; + margin-inline-start:-4px +} +.mega-dialog.duplicate-conflict .file-date .time{ + -webkit-padding-start:22px; + padding-inline-start:22px +} +.mega-dialog.duplicate-conflict .file-date .time:before{ + background-color:rgba(0, 0, 0, .1); + content:""; + display:block; + height:14px; + left:10px; + position:absolute; + top:3px; + width:1px +} +.rtl .mega-dialog.duplicate-conflict .file-date .time:before{ + left:auto; + right:10px +} +.mega-dialog.duplicate-conflict .multiple-files .export-icon:nth-child(2){ + -webkit-margin-start:-4px; + margin:4px 0 0; + margin-inline-start:-4px +} +.mega-dialog.duplicate-conflict .multiple-files .export-icon:first-child{ + -webkit-margin-start:4px; + margin:-4px 0 0; + margin-inline-start:4px +} +.fr .mega-dialog.pass-reminder,.ru .mega-dialog.pass-reminder{ + width:690px +} +.mega-dialog.pass-reminder header .graphic{ + height:79px +} +.mega-dialog.pass-reminder .content-block{ + position:relative +} +.mega-dialog.pass-reminder .bottom-page.big-icon{ + display:block; + margin:23px auto 0 +} +.mega-dialog.pass-reminder .info-txt{ + font-size:14px; + line-height:24px; + padding:23px 0 32px; + text-align:center +} +.mega-dialog.pass-reminder .light.info-txt{ + color:var(--text-color-low); + line-height:18px; + padding-top:6px 0 0 0 +} +.mega-dialog.pass-reminder .info-txt a{ + color:var(--text-color-error) +} +.mega-dialog.pass-reminder .dialog.input-wrapper{ + display:table; + font-size:0; + line-height:0; + margin-bottom:4px; + width:100% +} +.mega-dialog.pass-reminder .dialog.big-input-bg{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:3px; + box-sizing:border-box; + display:table-cell; + height:36px; + padding:8px 12px 0; + vertical-align:top +} +.mega-dialog.pass-reminder .dialog.big-input-bg input{ + background:var(--surface-grey-1); + border:0; + color:var(--text-color-high); + font-size:14px; + line-height:18px; + margin:0; + padding:0; + vertical-align:top; + width:calc(100% - 24px) +} +.mega-dialog.pass-reminder .dialog.big-input-bg i{ + --icon-size:18px +} +.mega-dialog.pass-reminder.wrong .dialog.big-input-bg{ + border:1px solid var(--stroke-error) +} +.mega-dialog.pass-reminder.wrong .dialog.big-input-bg input{ + color:var(--text-color-error) +} +.mega-dialog.pass-reminder .dialog.big-input-bg input::placeholder{ + color:var(--text-color-low) +} +.mega-dialog.pass-reminder .dialog.input-button{ + -webkit-padding-start:12px; + box-sizing:border-box; + display:table-cell; + padding-inline-start:12px; + vertical-align:top; + width:96px +} +.mega-dialog.pass-reminder .result-block{ + margin:8px 0 0; + min-height:4px +} +.mega-dialog.pass-reminder .result-txt{ + color:var(--text-color-success); + font-size:12px; + line-height:15px; + text-align:center +} +.mega-dialog.pass-reminder .result-txt.wrong{ + color:var(--text-color-error) +} +.mega-dialog.pass-reminder .result-txt i{ + -webkit-margin-end:5px; + display:inline-block; + margin:0; + margin-inline-end:5px; + vertical-align:top +} +.mega-dialog.pass-reminder .second-option-wrapper{ + color:var(--text-color-low); + display:block; + font-size:13px; + line-height:20px; + padding:16px 0 24px; + position:relative; + text-align:center +} +.mega-dialog.pass-reminder .second-option-wrapper:after{ + background-color:var(--stroke-grey-2); + bottom:0; + content:""; + display:block; + height:1px; + left:0; + position:absolute; + width:100% +} +.mega-dialog.pass-reminder .second-option-wrapper a{ + -webkit-margin-start:8px; + color:var(--text-color-success); + cursor:pointer; + font-size:14px; + line-height:20px; + margin-inline-start:8px; + text-decoration:underline; + vertical-align:top +} +.mega-dialog.pass-reminder .dropdown.body.pass-reminder .radio-txt.medium{ + font-size:14px +} +.mega-dialog.pass-reminder button.change-pass{ + display:none +} +.mega-dialog.pass-reminder.wrong button.change-pass{ + display:inline-block +} +.mega-dialog.park-account-dialog{ + width:640px +} +.mega-dialog.park-account-dialog .checkbox-container .settings-row .checkdiv{ + flex-grow:0; + flex-shrink:0 +} +.mega-dialog.park-account-dialog .settings-row .info-icon:hover{ + opacity:.8 +} +.mega-dialog.park-account-dialog .checkbox-container .settings-row{ + display:flex; + margin-bottom:24px +} +.mega-dialog.park-account-dialog .checkbox-container .checkdiv{ + margin:2px 11px 0 0 +} +.mega-dialog.park-account-dialog .checkbox-container .settings-row:last-of-type{ + margin-bottom:0 +} +.mega-dialog.park-account-dialog .content-text{ + line-height:21px; + margin-left:60px +} +.mega-dialog.two-factor-dialog{ + width:520px +} +.mega-dialog.two-factor-dialog .two-factor-content-block{ + height:auto; + padding:24px 30px 0; + position:relative +} +.mega-dialog.two-factor-dialog .two-factor-content-block.verify-tfactor{ + margin:10px 18px 0 +} +.mega-dialog.two-factor-dialog .two-factor-qr-code{ + background-color:#f2f2f2; + border-radius:10px; + height:244px; + margin:24px auto 48px; + padding:10px; + position:relative; + width:244px +} +.mega-dialog.two-factor-dialog .fm-account-input input{ + background-color:var(--text-grey-1); + border-radius:3px; + box-sizing:border-box; + height:36px; + line-height:36px; + padding:0; + text-align:center +} +.mega-dialog.two-factor-dialog .fm-account-input{ + height:38px; + margin:24px auto 16px +} +.mega-dialog.two-factor-dialog .finish-button{ + min-width:120px; + width:auto +} +.mega-dialog.two-factor-dialog .dialog-body-subheader{ + color:var(--text-color-high); + font:var(--text-h2); + font-family:var(--text-font-family-semibold); + margin:0 auto 32px; + text-align:center; + width:300px +} +.mega-dialog.two-factor-dialog .dialog-body-centre-text{ + margin:16px auto 24px; + text-align:center; + width:384px +} +.auth-app-select-tooltip{ + background:var(--surface-main); + border-radius:12px; + box-shadow:0 2px 10px 0 rgba(0, 0, 0, .15); + margin:5px; + position:absolute; + width:376px; + z-index:1300 +} +.auth-app-select-tooltip .dropdown-white-arrow{ + display:block +} +.auth-app-select-tooltip .explanation{ + color:var(--text-color-high); + font:var(--text-body1); + margin:24px 20px 20px +} +.auth-app-select-tooltip .app-link{ + border:1px solid var(--stroke-grey-2); + border-radius:4px; + cursor:pointer; + display:block; + margin:4px 20px 0; + position:relative; + transition:all .2s ease-in-out +} +.auth-app-select-tooltip .app-link:hover{ + background:var(--surface-grey-1) +} +.auth-app-select-tooltip .app-link:last-child{ + margin-bottom:20px +} +.auth-app-select-tooltip .app-link-icon{ + background:url(../imagery/mega-2fa-auth-apps.f1691735c7bef98e.png); + background-repeat:no-repeat; + display:inline-block; + height:32px; + left:14px; + position:absolute; + top:12px; + width:32px +} +.rtl .auth-app-select-tooltip .app-link-icon{ + left:auto; + right:14px +} +.auth-app-select-tooltip .authy .app-link-icon{ + background-position:-2px -2px +} +.auth-app-select-tooltip .duomobile .app-link-icon{ + background-position:-38px -2px +} +.auth-app-select-tooltip .googleauthenticator .app-link-icon{ + background-position:-2px -38px +} +.auth-app-select-tooltip .microsoftauthenticator .app-link-icon{ + background-position:-38px -38px +} +.auth-app-select-tooltip .app-link-text{ + -webkit-margin-start:64px; + color:var(--text-color-medium); + display:block; + font-size:14px; + line-height:56px; + margin-inline-start:64px +} +.auth-app-select-tooltip .app-arrow{ + --icon-size:24px; + --mask-color:var(--text-color-medium); + position:absolute; + right:25px; + top:15px +} +.rtl .auth-app-select-tooltip .app-arrow{ + left:25px; + right:auto; + transform:rotate(180deg) +} +.mega-dialog.verify-two-factor-login{ + width:480px +} +.mega-dialog.verify-two-factor-login .fm-account-input{ + width:302px +} +.mega-dialog.verify-two-factor-login .fm-account-input input{ + color:var(--text-color-high); + font-size:20px; + line-height:25px; + text-align:center +} +.es .mega-dialog.setup-two-factor-verify .pin-input,.es .mega-dialog.verify-two-factor-login .fm-account-input input{ + font:var(--text-h3) +} +.mega-dialog.verify-two-factor-login .warning-text-field{ + background:var(--banner-background-error); + border:1px solid var(--banner-border-error); + border-radius:2px; + box-sizing:border-box; + color:var(--banner-text-error); + font:var(--text-body1); + margin:0 auto; + padding:4px 0; + text-align:center; + width:302px +} +.mega-dialog.verify-two-factor-login .loading-image img{ + height:28px; + width:28px +} +.mega-dialog.verify-two-factor-login .lost-authenticator-button:hover{ + text-decoration:underline +} +.mega-dialog.two-factor-verify-action .lost-authenticator-button,.mega-dialog.verify-two-factor-login .lost-authenticator-button{ + cursor:pointer +} +.mega-dialog.two-factor-verify-action .lost-authenticator-button:hover{ + text-decoration:underline +} +.mega-dialog.two-factor-verify-action .pin-input{ + color:var(--text-color-high); + font:var(--text-h3); + text-align:center +} +.mega-dialog.setup-two-factor .no-auth-app-button{ + color:var(--text-color-success); + cursor:pointer; + display:inline-block; + margin-top:12px +} +.mega-dialog.setup-two-factor-verify .pin-input{ + color:var(--text-color-high); + font:var(--text-h3); + text-align:center +} +.mega-dialog.setup-two-factor-backup-key .content-block{ + margin-top:16px; + padding-bottom:24px +} +.mega-dialog.setup-two-factor-backup-key .recovery-key-container .recovery-key-icon{ + -webkit-margin-start:12px; + -webkit-margin-end:8px; + display:inline-block; + height:48px; + margin:8px 0; + margin-inline-end:8px; + margin-inline-start:12px; + width:48px +} +.mega-dialog.setup-two-factor-backup-key .information-highlight.warning{ + margin:12px auto 16px; + width:100% +} +.mega-dialog.setup-two-factor-backup-key .recovery-key-container{ + border:1px solid var(--stroke-grey-2); + border-radius:4px; + box-sizing:border-box; + height:66px +} +.mega-dialog.setup-two-factor-backup-key .recovery-key-container .recovery-key-button{ + -webkit-margin-end:12px; + float:right; + margin-inline-end:12px; + margin-top:16px +} +.rtl .mega-dialog.setup-two-factor-backup-key .recovery-key-container .recovery-key-button{ + float:left +} +.mega-dialog.setup-two-factor-backup-key .recovery-key-info-block{ + display:inline-block; + margin-top:15px; + vertical-align:top +} +.mega-dialog.setup-two-factor-backup-key .recovery-key-info-block .recovery-key-name{ + color:var(--text-color-high); + font-size:14px; + height:18px; + line-height:18px; + width:210px +} +.mega-dialog.setup-two-factor-backup-key .recovery-key-info-block .recovery-key-size{ + color:var(--text-color-low); + font-size:13px; + line-height:17px +} +.mega-dialog.setup-two-factor-backup-key .dialog-body-centre-text{ + margin:24px auto 0 +} +.mega-dialog.generate-url{ + width:690px +} +.mega-dialog.generate-url .content-block{ + padding-bottom:48px +} +.mega-dialog .generate-url.header{ + font:var(--text-h3); + padding-bottom:29px +} +.mega-dialog.generate-url .header.custom{ + border-top:1px solid var(--stroke-grey-1); + padding-top:20px +} +.mega-dialog.generate-url .url-block{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:3px; + color:var(--text-color-high); + display:flex; + font:var(--text-body1); + justify-content:space-between; + position:relative; + text-align:start; + white-space:nowrap +} +.mega-dialog.generate-url .url-block button{ + flex-grow:0; + flex-shrink:0 +} +.mega-dialog.generate-url .custom-block{ + margin-top:12px +} +.mega-dialog.generate-url .custom-block.error .url-block{ + box-shadow:0 0 0 1px var(--stroke-error) +} +.mega-dialog.generate-url .custom-block.error input{ + color:var(--text-color-error) +} +.mega-dialog.generate-url .custom-block .error-message{ + color:var(--text-color-error); + display:none; + font-size:14px; + line-height:17px; + margin-top:6px +} +.mega-dialog.generate-url .custom-block.error .error-message{ + display:block +} +.mega-dialog.generate-url .url-block .url,.mega-dialog.generate-url.url-block .url-input{ + -webkit-padding-end:20px; + -webkit-padding-start:40px; + color:var(--text-color-high); + cursor:text; + display:block; + line-height:24px; + min-height:24px; + overflow:hidden; + padding:10px 0; + padding-inline-end:20px; + padding-inline-start:40px; + user-select:text; + white-space:nowrap +} +.mega-dialog.generate-url .url-block .url-input{ + -webkit-padding-start:20px; + background:transparent; + border:none; + box-sizing:border-box; + color:var(--text-color-high); + display:inline-block; + font-size:16px; + padding-inline-start:20px; + width:calc(100% - 46px) +} +.mega-dialog.generate-url .url-block .url span{ + color:var(--secondary-green); + text-decoration:underline; + user-select:text +} +.mega-dialog.generate-url .url-block i.link-icon{ + -webkit-margin-start:8px; + --icon-size:24px; + --mask-color:var(--text-color-medium); + margin:10px 0 0; + margin-inline-start:8px; + position:absolute +} +.mega-dialog.generate-url .copy-button,.mega-dialog.generate-url .custom-button{ + border-radius:0 3px 3px 0; + height:44px +} +.rtl .mega-dialog.generate-url .copy-button,.rtl .mega-dialog.generate-url .custom-button{ + border-radius:3px 0 0 3px +} +.mega-dialog.generate-url .custom-button{ + height:40px; + padding:0 23px +} +.mega-dialog.generate-url .info{ + color:var(--text-color-medium); + font:var(--text-body1); + padding:24px 0 9px +} +.mega-dialog.generate-url .page-names a,.mega-dialog.generate-url .page-names span{ + background:var(--surface-grey-2); + border-radius:13px; + color:var(--text-color-medium); + cursor:pointer; + display:inline-block; + font-size:12px; + height:26px; + line-height:26px; + margin:5px 3px; + padding:0 10px; + transition:all .2s ease-in-out; + vertical-align:top +} +.generate-url.page-names span.active,.mega-dialog.generate-url .page-names span:hover{ + background-color:var(--secondary-green); + color:#fff +} +.mega-dialog.generate-url .generate-url.page-names a,.mega-dialog.generate-url .page-names a:visited{ + background-color:initial; + color:var(--secondary-green); + padding:0 +} +.mega-dialog.generate-url .page-names a:hover{ + text-decoration:underline +} +.rtl .mega-dialog.generate-url button.generate-url i{ + transform:rotate(180deg) +} +.mega-dialog.qr-contact{ + width:482px +} +.mega-dialog.qr-contact .avatar-wrapper{ + float:none; + font-family:LatoWebSemibold,Arial,sans-serif; + font-size:38px; + height:100px; + line-height:96px; + margin:0 auto; + width:100px +} +.mega-dialog.qr-contact .avatar-wrapper .verified_icon{ + display:none +} +.mega-dialog.qr-contact .avatar-wrapper img{ + height:96px; + margin-top:2px; + width:96px +} +.mega-dialog.qr-contact .qr-contact-name{ + color:var(--text-color-high); + font-size:16px; + line-height:24px; + margin-top:24px; + text-align:center; + user-select:text +} +.mega-dialog.qr-contact .qr-contact-email{ + color:var(--text-color-medium); + font-size:14px; + line-height:18px; + margin-top:4px; + text-align:center; + user-select:text +} +.mega-dialog.group-chat-link{ + width:520px +} +.mega-dialog.group-chat-link header{ + flex-direction:row +} +.mega-dialog.group-chat-link header i{ + --icon-size:32px; + border-radius:2px; + margin:0 8px 0 0 +} +.mega-dialog.group-chat-link .content-block,.mega-dialog.group-chat-link.in-call-info .content-block,.mega-dialog.group-chat-link.in-call-info header h2,.mega-dialog.group-chat-link header h2{ + text-align:left +} +.fr .mega-dialog.group-chat-link{ + width:440px +} +.mega-dialog.group-chat-link .link-input-container,.mega-dialog.invite .link-input-container{ + position:relative +} +.mega-dialog.group-chat-link .link-input-container input{ + padding-right:75px +} +.mega-dialog.group-chat-link .link-input-container button{ + border-radius:0 4px 4px 0; + position:absolute; + right:0; + top:50%; + transform:translateY(-50%); + z-index:11 +} +.mega-dialog.group-chat-link .info{ + color:var(--text-color-medium); + padding-top:7px +} +.mega-dialog.group-chat-link .info span{ + color:var(--text-color-high) +} +.mega-dialog.group-chat-link .big-icon{ + margin:12px auto 0 +} +.mega-dialog.group-chat-link .chat-link-input,.mega-dialog.invite-meeting .chat-link-input{ + box-sizing:border-box; + padding:0 10px 0 0; + position:relative +} +.mega-dialog.group-chat-link .chat-link-input i,.mega-dialog.invite-meeting .chat-link-input i{ + --icon-size:28px; + --mask-color:var(--icon-rest); + left:5px; + position:absolute; + top:50%; + transform:translateY(-50%) +} +.mega-dialog.group-chat-link .chat-link-input input,.mega-dialog.invite-meeting .chat-link-input input{ + background:var(--surface-grey-1); + border:2px solid var(--stroke-grey-2); + border-radius:12px; + color:var(--text-color-medium); + height:40px; + margin:0; + padding:10px 10px 10px 35px; + width:100% +} +.mega-dialog.group-chat-link.requires-topic{ + width:450px +} +.mega-dialog.joined-to-affiliate{ + width:596px +} +.mega-dialog.joined-to-affiliate .text{ + margin-top:16px; + text-align:center +} +.mega-dialog.contact-nickname-dialog{ + width:550px +} +.mega-dialog.contact-nickname-dialog .content-block{ + margin:16px 0 +} +.mega-dialog.contact-nickname-dialog .input-block{ + position:relative +} +.mega-dialog.contact-nickname-dialog .input-block i{ + --icon-size:24px; + --mask-color:var(--text-color-medium); + left:7px; + position:absolute; + top:20px +} +.rtl .mega-dialog.contact-nickname-dialog .input-block i{ + left:auto; + right:7px +} +.mega-dialog.affiliate-redeem{ + text-align:center; + width:770px +} +.mega-dialog.affiliate-redeem .next-btn{ + margin-inline-start:auto +} +.mega-dialog.affiliate-redeem .prev-btn i{ + --icon-size:16px +} +.rtl .mega-dialog.affiliate-redeem .prev-btn i{ + transform:rotate(180deg) +} +.mega-dialog.affiliate-redeem .timing{ + background-color:var(--banner-background-success); + border:1px solid var(--banner-border-success); + border-radius:4px; + box-sizing:border-box; + color:var(--banner-text-success); + display:inline-block; + font:var(--text-body1); + padding:1px 15px +} +.mega-dialog.affiliate-redeem .timing span{ + white-space:nowrap +} +.mega-dialog.affiliate-redeem .timing.orange{ + background-color:var(--banner-background-warning); + border:1px solid var(--banner-border-warning); + color:var(--banner-text-warning) +} +.mega-dialog.affiliate-redeem .timing.orange i{ + background-color:var(--banner-text-warning) +} +.mega-dialog.affiliate-redeem .cells{ + border-radius:4px; + box-sizing:border-box; + float:left; + text-align:start; + width:330px +} +.rtl .mega-dialog.affiliate-redeem .cells{ + float:right +} +.mega-dialog.affiliate-redeem .cells.left{ + -webkit-margin-start:-12px; + margin:24px 0 0; + margin-inline-start:-12px +} +.mega-dialog.affiliate-redeem .cells.scrollable{ + position:relative +} +.mega-dialog.affiliate-redeem .cells .cell-content{ + max-height:400px; + padding:4px 20px; + position:relative +} +.mega-dialog.affiliate-redeem .cells .cell-content.ps--active-y{ + border:1px solid var(--stroke-grey-2); + border-radius:12px +} +.mega-dialog.affiliate-redeem .cells:not(.step2) .ps .header{ + padding:20px 0 24px +} +.mega-dialog.affiliate-redeem .cells.step3{ + min-height:290px +} +.mega-dialog.affiliate-redeem .cells.step4 .cell-content{ + padding:0 18px +} +.mega-dialog.affiliate-redeem .cells.right{ + float:right; + margin-top:24px +} +.rtl .mega-dialog.affiliate-redeem .cells.right{ + float:left +} +.mega-dialog.affiliate-redeem .summary-wrap{ + background:var(--surface-grey-2); + border:1px solid var(--stroke-grey-2); + border-radius:12px; + overflow:hidden +} +.mega-dialog.affiliate-redeem .header{ + background:var(--surface-main); + color:var(--text-color-high); + font:var(--text-h3-bold) +} +.mega-dialog.affiliate-redeem .summary{ + background:var(--surface-main) +} +.mega-dialog.affiliate-redeem .header+.mega-input{ + margin:8px 0 +} +.mega-dialog.affiliate-redeem .template{ + display:none +} +.mega-dialog.affiliate-redeem .summary>div{ + align-items:baseline; + display:flex; + padding:12px 24px +} +.mega-dialog.affiliate-redeem .summary-wrap .header{ + padding:24px 24px 12px +} +.mega-dialog.affiliate-redeem .summary-wrap .info{ + -webkit-padding-end:12px; + color:var(--text-color-low); + font:var(--text-body2); + padding-inline-end:12px; + width:50% +} +.mega-dialog.affiliate-redeem .summary-wrap .price{ + -webkit-padding-end:0; + color:var(--text-color-high); + font:var(--text-body2); + margin-top:0; + padding-inline-end:0 +} +.mega-dialog.affiliate-redeem .summary-wrap .euro:not(.hidden){ + -webkit-margin-start:4px; + color:var(--text-color-low); + margin-inline-start:4px; + white-space:nowrap +} +.mega-dialog.affiliate-redeem hr{ + background:var(--surface-grey-2); + border:0; + clear:both; + height:1px; + margin:0; + padding:0 +} +.mega-dialog.affiliate-redeem .amount{ + align-items:baseline; + display:flex; + font:var(--text-body2); + padding:12px 24px 24px +} +.mega-dialog.affiliate-redeem .amount .info{ + color:var(--text-color-high); + word-break:break-all +} +.mega-dialog.affiliate-redeem .amount .price{ + font:var(--text-body2) +} +.mega-dialog.affiliate-redeem .local-info{ + color:var(--text-color-medium); + font:var(--text-body2); + padding:10px 0 0 +} +.mega-dialog.affiliate-redeem .commission-wrap{ + display:flex; + flex-wrap:wrap; + justify-content:space-between; + margin-bottom:40px; + white-space:nowrap; + width:100% +} +.mega-dialog.affiliate-redeem .commission-wrap .redeem-all-btn{ + flex-shrink:0; + min-width:0 +} +.mega-dialog.affiliate-redeem .available-comission{ + -webkit-margin-end:8px; + font:var(--text-body2); + line-height:24px; + margin-inline-end:8px +} +.mega-dialog.affiliate-redeem .amount-message-container{ + background:var(--banner-background-error); + border:1px solid var(--banner-border-error); + border-radius:4px; + color:var(--banner-text-error); + margin:-32px 0 32px; + padding:2px 8px +} +.mega-dialog.affiliate-redeem .available-comission span{ + color:var(--text-color-success); + white-space:nowrap +} +.mega-dialog.affiliate-redeem .affiliate-redeem .payment-type-wrapper{ + float:left +} +.mega-dialog.affiliate-redeem .payment-type{ + margin-top:16px +} +.mega-dialog.affiliate-redeem .payment-type .radio-txt{ + color:var(--text-color-high); + vertical-align:initial +} +.mega-dialog.affiliate-redeem .withdraw-txt{ + color:var(--text-color-medium); + font:var(--text-body1); + padding:16px 0 40px +} +.mega-dialog.affiliate-redeem .withdraw-txt a,.mega-dialog.affiliate-redeem .withdraw-txt a:visited{ + color:var(--text-color-success); + cursor:pointer; + float:right; + font:var(--text-body1) +} +.rtl .mega-dialog.affiliate-redeem .withdraw-txt a,.rtl .mega-dialog.affiliate-redeem .withdraw-txt a:visited{ + float:left +} +.mega-dialog.affiliate-redeem .withdraw-txt a:hover{ + text-decoration:underline +} +.mega-dialog.affiliate-redeem .default-select{ + float:none; + margin:8px 0; + width:100% +} +#affi-country{ + z-index:auto +} +.mega-dialog.affiliate-redeem .withdraw-details{ + padding:16px 0 0 +} +.mega-dialog.affiliate-redeem .withdraw-details label{ + color:var(--text-color-low); + font:var(--text-body2) +} +.mega-dialog.affiliate-redeem .withdraw-details .warning{ + display:flex +} +.mega-dialog.affiliate-redeem .withdraw-details .warning i{ + --icon-size:24px; + -webkit-margin-end:8px; + flex-shrink:0; + margin-inline-end:8px +} +.mega-dialog.affiliate-redeem form.withdraw-details .warning span{ + color:var(--text-color-low); + font:var(--text-body2); + padding-top:4px +} +.mega-dialog.affiliate-redeem .mega-input-title-ontop:last-child{ + margin-bottom:0 +} +.mega-dialog.affiliate-redeem .affi-dynamic-acc-info .mega-input-title-ontop,.mega-dialog.affiliate-redeem .affi-dynamic-acc-name .mega-input-title-ontop,.mega-dialog.affiliate-redeem .affi-dynamic-acc-type .mega-input-title-ontop{ + margin-bottom:8px +} +.mega-dialog.affiliate-redeem .affi-dynamic-acc-info .default-select-dropdown{ + max-width:100% +} +.mega-dialog.affiliate-redeem .bitcoin-org{ + color:var(--text-color-low); + font:var(--text-body1); + margin-top:16px; + padding:0; + position:relative +} +.mega-dialog.affiliate-redeem .bitcoin-org a{ + color:var(--text-color-low); + font:var(--text-body2); + text-decoration:underline +} +.mega-dialog.affiliate-redeem .bitcoin-data{ + position:relative +} +.mega-dialog.affiliate-redeem .bitcoin-data .bitcoin-fill-checkbox,.mega-dialog.affiliate-redeem .bitcoin-data .save-bitcoin-checkbox,.mega-dialog.affiliate-redeem .bitcoin-data .save-data-tip{ + margin-bottom:16px +} +.mega-dialog.affiliate-redeem button.back i{ + transform:rotate(180deg) +} +.mega-dialog.affiliate-redeem label.radio-txt{ + color:var(--text-color-low) +} +.mega-dialog.affiliate-redeem .auto-fill-checkbox,.mega-dialog.affiliate-redeem .save-data-checkbox{ + padding:0 0 16px +} +.mega-dialog.affiliate-redeem .save-data-tip{ + background:var(--banner-background-success); + border:1px solid var(--banner-border-success); + border-radius:4px; + box-sizing:border-box; + color:var(--banner-text-success); + display:inline-block; + font-size:13px; + line-height:20px; + margin:8px 0 0; + max-height:100px; + padding:8px +} +.mega-dialog.affiliate-redeem .save-data-tip .right{ + -webkit-margin-start:12px; + cursor:pointer; + font-size:14px; + margin:5px 0 0; + margin-inline-start:12px +} +.mega-dialog.affiliate-redeem .mega-input-title-ontop input{ + -webkit-padding-start:8px; + -webkit-padding-end:12px; + padding-inline-end:12px; + padding-inline-start:8px +} +.mega-dialog.affiliate-redeem .method-chosen{ + float:left +} +.rtl .mega-dialog.affiliate-redeem .method-chosen{ + float:right +} +.mega-dialog.verify-phone{ + width:360px +} +.mega-dialog.verify-phone header{ + background:linear-gradient(180deg, #40b0d7 0, #29a6d1); + margin-bottom:24px; + padding-bottom:0 +} +.mega-dialog.verify-phone header h2{ + color:#fff; + margin-bottom:36px +} +.mega-dialog.verify-phone.suspended .not-now-button,.mega-dialog.verify-phone.suspended button.close{ + display:none +} +.mega-dialog.verify-phone .verify-ph-info{ + box-sizing:border-box; + font:var(--text-body1); + min-height:72px; + padding:0 0 20px; + text-align:center +} +.mega-dialog.verify-phone .verify-ph-info.long{ + letter-spacing:1px +} +.mega-dialog.verify-phone .verify-ph-info .green-lnk{ + color:var(--text-color-success); + cursor:pointer; + display:block; + font-size:13px +} +.mega-dialog.verify-phone .verify-ph-info .phone-num{ + color:var(--text-color-low); + display:block +} +.mega-dialog.verify-phone .verify-success-page .verify-ph-info{ + min-height:0 +} +.mega-dialog.verify-phone .verify-ph-icon,.mega-dialog.verify-phone .verify-ph-success-icon{ + --width:150px; + height:172px; + margin:auto; + width:150px +} +.mega-dialog.verify-phone .verify-ph-info.small-txt{ + font-size:13px; + min-height:0 +} +.mega-dialog.verify-phone .account.input-tooltip+.verify-ph-info{ + padding:32px 0 0 +} +.mega-dialog.verify-phone .incorrect+.account.input-tooltip+.verify-ph-info{ + padding:8px 0 0 +} +.mega-dialog.verify-phone .verify-ph-bonus-container{ + display:inline-block; + margin:auto; + padding:22px 0 0; + text-align:start +} +.mega-dialog.verify-phone .verify-success-page{ + text-align:center +} +.mega-dialog.verify-phone .verify-ph-info.long{ + height:auto; + min-height:0 +} +.mega-dialog.verify-phone .verify-success-page.non-achievement-account .verify-ph-info.long{ + height:174px; + margin-top:48px +} +.mega-dialog.verify-phone .verify-ph-bonus-container .bonus-image{ + -webkit-margin-end:20px; + display:inline-block; + margin-inline-end:20px +} +.mega-dialog.verify-phone .verify-success-page.non-achievement-account .verify-ph-bonus-container{ + display:none +} +.mega-dialog.verify-phone .verify-ph-bonus-block.storge-bonus .bonus-image{ + background-position:-22px -267px +} +.mega-dialog.verify-phone .verify-ph-bonus-block.transfer-bonus .bonus-image{ + background-position:-92px -267px +} +.mega-dialog.verify-phone .verify-ph-bonus-container .verify-ph-bonus-block:not(:last-child) .bonus-image{ + margin-bottom:24px +} +.mega-dialog.verify-phone .verify-ph-bonus-block{ + display:table-row-group +} +.mega-dialog.verify-phone .verify-ph-bonus-intro-wrapper{ + display:inline-block; + vertical-align:top +} +.mega-dialog.verify-phone .verify-ph-bonus-intro-wrapper .big-num{ + color:var(--text-color-high); + display:table-row; + font-size:30px; + height:38px; + line-height:36px; + text-align:start +} +.mega-dialog.verify-phone .verify-ph-bonus-intro-wrapper .body-txt{ + color:var(--text-color-high); + display:table-row; + font-family:var(--text-font-family-semibold); + font-size:14px; + height:18px; + line-height:17px; + text-align:start +} +.mega-dialog.verify-phone aside.js-verify-success-page.non-achievement-account{ + display:none +} +.mega-dialog.verify-phone .verify-ph-bonus-valid-days .valid-days-title{ + display:inline-block; + position:relative +} +.mega-dialog.verify-phone .verify-ph-bonus-valid-days .valid-days-title i{ + --icon-size:24px; + -webkit-margin-end:4px; + display:inline-block; + margin-inline-end:4px; + vertical-align:middle +} +.mega-dialog.verify-phone .verify-ph-bonus-valid-days .valid-days-title span{ + vertical-align:middle +} +.mega-dialog.verify-phone .verify-ph-bonus-valid-days .valid-days-body-txt{ + display:inline-block; + font-family:var(--text-font-family-semibold); + vertical-align:middle +} +.mega-dialog.verify-phone .sms-verification-number-input{ + background:transparent; + border:0; + direction:ltr !important; + font-family:source_sans_proregular,Arial,sans-serif !important; + font-size:38px; + height:38px; + letter-spacing:25px; + line-height:38px; + margin-right:-37px; + position:absolute; + text-indent:13px; + top:4px; + width:300px; + z-index:2 +} +.mega-dialog.voucher-info-redeem{ + width:544px +} +.mega-dialog.voucher-info-redeem h2{ + margin:0; + text-align:center +} +.mega-dialog.voucher-info-redeem .v-description{ + text-align:center +} +.mega-dialog.voucher-info-redeem .voucher-logo{ + align-items:center; + background-color:var(--stroke-grey-1); + border:2px solid var(--stroke-grey-2); + border-radius:12px; + display:flex; + height:72px; + width:450px +} +.mega-dialog.voucher-info-redeem .voucher-logo .plan-icon{ + -webkit-margin-start:26px; + display:inline-block; + margin-inline-start:26px +} +.mega-dialog.voucher-info-redeem .plan-icon i{ + --icon-size:44px; + display:none; + height:44px; + width:44px +} +.mega-dialog.voucher-info-redeem .plan-icon.business i.business,.mega-dialog.voucher-info-redeem .plan-icon.pro1 i.pro1,.mega-dialog.voucher-info-redeem .plan-icon.pro2 i.pro2,.mega-dialog.voucher-info-redeem .plan-icon.pro3 i.pro3,.mega-dialog.voucher-info-redeem .plan-icon.pro4 i.pro4,.mega-dialog.voucher-info-redeem .plan-icon.pro101 i.pro101{ + display:block +} +.mega-dialog.voucher-info-redeem .voucher-logo .v-separator{ + -webkit-margin-start:26px; + background-color:var(--stroke-grey-2); + display:inline-block; + height:36px; + margin-inline-start:26px; + width:1px +} +.mega-dialog.voucher-info-redeem .voucher-logo .plan-info{ + -webkit-margin-start:28px; + color:var(--text-color-high); + display:inline-block; + font-family:var(--text-font-family-bold); + font-size:14px; + line-height:20px; + margin-inline-start:28px; + text-align:center; + width:120px +} +.mega-dialog.affiliate-request{ + width:630px +} +.mega-dialog.affiliate-request .status-cells{ + display:flex; + position:relative +} +.mega-dialog.affiliate-request .status-cell{ + padding:36px 0 12px; + text-align:center; + width:33.333333% +} +.mega-dialog.affiliate-request .status-message{ + font:var(--text-body2); + padding:4px 0 40px; + text-align:center +} +.mega-dialog.affiliate-request .status-message:empty{ + padding-bottom:0 +} +.mega-dialog.affiliate-request .status{ + background:#eee; + background:linear-gradient(180deg, #eee 0, #d8d8d8); + border:2px solid #fff; + border-radius:100%; + box-shadow:0 0 4px 0 rgba(0, 0, 0, .2); + box-sizing:border-box; + height:32px; + margin:0 auto; + overflow:hidden; + position:relative; + width:32px +} +.mega-dialog.affiliate-request .status-txt{ + color:var(--text-color-low); + font:var(--text-h3); + padding:10px 0 0 +} +.mega-dialog.affiliate-request .loading .progress{ + width:50% +} +.mega-dialog.affiliate-request .loading .status-txt{ + color:var(--text-color-high) +} +.mega-dialog.affiliate-request .progress{ + background:#00b6aa; + background:linear-gradient(180deg, #00b6aa 0,#009883); + height:28px; + overflow:hidden; + position:relative; + width:0 +} +.mega-dialog.affiliate-request .complete .progress{ + min-width:100% +} +.mega-dialog.affiliate-request .complete .progress span{ + background-position:5px -6722px; + display:block; + height:28px; + width:28px +} +.mega-dialog.affiliate-request .dialog-sprite.dots{ + background-position:0 -6708px; + background-repeat:repeat-x; + height:4px; + left:95px; + position:absolute; + top:50px; + width:350px +} +.mega-dialog.recovery-key-dialog{ + width:680px +} +.mega-dialog.recovery-key-dialog header .graphic{ + height:80px +} +.mega-dialog.recovery-key-dialog .content-block.dialog-bottom{ + padding-bottom:48px +} +.mega-dialog.recovery-key-dialog .recover-paste-block button{ + display:inline-flex +} +.mega-dialog.recovery-key-dialog aside{ + margin-top:24px +} +.mega-dialog.recovery-key-dialog aside p{ + padding:0 +} +.mega-dialog.recovery-key-dialog .recover-paste-block .right-section>button:not(.hidden){ + min-width:auto +} +.mega-dialog.recovery-key-dialog i{ + --mask-color:var(--text-color-medium) +} +.mega-dialog.recovery-key-dialog i.shiny{ + --mask-color:var(--label-yellow) +} +.mega-dialog.recovery-key-dialog .account.input-wrapper input{ + vertical-align:middle +} +.mega-dialog.recovery-key-dialog i{ + display:inline-block; + left:0; + position:static; + top:0; + vertical-align:middle +} +.mega-dialog.recovery-key-dialog .backup-key-header{ + color:var(--text-color-high); + font:var(--text-h3); + margin:0; + text-align:start +} +.mega-dialog.affiliate-guide{ + width:750px +} +.mega-dialog.affiliate-guide .step{ + display:none +} +.mega-dialog.affiliate-guide .step.active{ + display:block +} +.mega-dialog.affiliate-guide footer button.back i,.mega-dialog.affiliate-guide footer button.next i{ + --icon-size:16px +} +.mega-dialog.affiliate-guide footer .step.active{ + display:flex; + padding-top:24px +} +.mega-dialog.affiliate-guide footer{ + border-top:1px solid transparent +} +.mega-dialog.affiliate-guide footer.has-divider{ + border-color:var(--divider-color) +} +.rtl .mega-dialog.affiliate-guide .bottom-button i{ + transform:rotate(180deg) +} +.mega-dialog.affiliate-guide .illustration{ + --width:434px; + height:148px; + margin:20px auto 8px; + width:434px +} +.mega-dialog.affiliate-guide .big-header{ + color:var(--text-color-high); + font:var(--text-h1); + padding:18px 0 6px; + text-align:center +} +.mega-dialog.affiliate-guide .affiliate-guide-content{ + display:table; + height:372px; + opacity:0; + position:absolute; + table-layout:fixed; + top:0; + transition:opacity .25s ease-in-out,visibility .25s ease-in-out; + visibility:hidden; + width:100% +} +.mega-dialog.affiliate-guide .affiliate-guide-content.active{ + opacity:1; + position:relative; + visibility:visible +} +.mega-dialog.affiliate-guide .cell{ + display:table-cell; + vertical-align:middle +} +.mega-dialog.affiliate-guide .step2 .cell{ + padding:0 32px +} +.mega-dialog.affiliate-guide .slide1 .cell{ + padding:0 +} +.mega-dialog.affiliate-guide .cell.half-sized{ + float:none; + padding:0 +} +.mega-dialog.affiliate-guide .cell i{ + --mask-color:var(--secondary-green); + --icon-size:24px; + float:left; + margin:7px 0 0 +} +.rtl .mega-dialog.affiliate-guide .cell i{ + float:right +} +.mega-dialog.affiliate-guide .cell .feature-block i{ + --icon-size:64px; + margin-bottom:12px +} +.mega-dialog.affiliate-guide .header{ + color:var(--text-color-medium); + font:var(--text-body1); + padding:10px 0 +} +.mega-dialog.affiliate-guide .info{ + -webkit-padding-start:28px; + box-sizing:border-box; + color:var(--text-color-medium); + padding-bottom:10px; + padding-inline-start:28px +} +.mega-dialog.affiliate-guide .info a,.mega-dialog.affiliate-guide .info strong{ + color:var(--text-color-success); + font-weight:400 +} +.mega-dialog.affiliate-guide .info a{ + text-decoration:underline +} +.mega-dialog.affiliate-guide .info a:hover{ + text-decoration:none +} +.mega-dialog.affiliate-guide .rules{ + -webkit-padding-end:28px; + line-height:16px; + padding-inline-end:28px +} +.mega-dialog.affiliate-guide .cell i+.header{ + -webkit-padding-start:28px; + padding-inline-start:28px +} +.mega-dialog.affiliate-guide .slides{ + position:relative +} +.mega-dialog.affiliate-guide .step1 .affiliate-guide-content{ + height:120px; + margin:0 auto 4px; + width:602px +} +.mega-dialog.affiliate-guide .step1 .half-sized{ + -webkit-padding-start:12px; + padding:0; + padding-inline-start:12px +} +.mega-dialog.affiliate-guide .top-block{ + border-radius:var(--border-radius) 0; + display:flex; + font-size:0; + position:relative; + text-align:center; + z-index:1 +} +.mega-dialog.affiliate-guide a.bottom-link{ + color:var(--text-color-medium); + font:var(--text-body1); + text-decoration:underline +} +.mega-dialog.affiliate-guide a.bottom-link:hover{ + text-decoration:none +} +.mega-dialog.affiliate-guide .nav-button{ + border-bottom:2px solid transparent; + box-sizing:border-box; + color:var(--text-color-low); + cursor:pointer; + display:inline-block; + font:var(--text-body1); + margin:18px 0 0; + padding-bottom:6px; + transition:all .25s ease-in-out; + vertical-align:top; + width:33.33333% +} +.mega-dialog.affiliate-guide .nav-button .txt{ + box-sizing:border-box; + text-align:start +} +.mega-dialog.affiliate-guide .nav-button:hover{ + color:var(--text-color-high) +} +.mega-dialog.affiliate-guide .nav-button.active{ + border-color:var(--secondary-blue); + color:var(--text-color-high); + font:var(--text-body1-bold) +} +.mega-dialog.affiliate-guide .feature-block{ + box-sizing:border-box; + color:var(--text-color-medium); + float:left; + padding:10px 20px; + text-align:center; + width:50% +} +.rtl .mega-dialog.affiliate-guide .feature-block{ + float:right +} +.mega-dialog.affiliate-guide .feature-block strong{ + color:var(--text-color-high); + display:block; + font:var(--text-h3); + font-weight:400; + padding:1px 0 7px +} +.mega-dialog.affiliate-guide .feature-block i,.rtl .mega-dialog.affiliate-guide .feature-block i{ + display:block; + float:none; + margin:0 auto +} +.mega-dialog.affiliate-guide .slide2 i{ + margin:10px 0 0 +} +.mega-dialog.affiliate-guide .slide2 .header{ + color:var(--text-color-high); + font:var(--text-h3); + padding:10px 0 +} +.mega-dialog.affiliate-guide .slide2 .info{ + min-height:96px; + padding-bottom:16px +} +.mega-dialog.affiliate-guide .slide2 .info:last-child{ + min-height:auto; + padding-bottom:10px +} +.mega-dialog.affiliate-guide .affiliate-guide-content.slide3{ + display:block; + max-width:calc(100% + 48px); + padding-right:48px; + width:calc(100% + 48px) +} +.mega-dialog.affiliate-guide .slide3 .cell.info{ + color:var(--text-color-higher); + font:var(--text-body1); + padding-bottom:0; + padding-top:28px +} +.mega-dialog.affiliate-guide .slide3 .info .note{ + font:var(--text-body2) +} +.mega-dialog.affiliate-guide .affiliate-guide.info{ + color:var(--text-color-medium); + padding:10px 0 4px 31px +} +.mega-dialog.user-management-add-user-dialog header{ + margin-bottom:8px +} +.mega-dialog.user-management-add-user-dialog .dialog-subtitle{ + margin-bottom:0; + text-align:center +} +.mega-dialog.user-management-add-user-dialog h2~.dialog-subtitle{ + margin-top:16px +} +.mega-dialog.user-management-add-user-dialog .footer-container{ + display:flex; + flex-flow:row-reverse; + justify-content:space-between +} +.mega-dialog.user-management-add-user-dialog aside .icon{ + display:inline-block +} +.mega-dialog.user-management-add-user-dialog button.toggle-optional-inputs{ + margin:20px 0; + position:relative +} +.mega-dialog.user-management-add-user-dialog button.toggle-optional-inputs i{ + --mask-color:var(--icon-rest) +} +.mega-dialog.user-management-add-user-dialog button.toggle-optional-inputs:hover i{ + --mask-color:var(--icon-active) +} +.mega-dialog.user-management-add-user-dialog button.toggle-optional-inputs .toggle-title{ + display:inline-block; + text-overflow:ellipsis; + white-space:nowrap +} +.mega-dialog.user-management-add-user-dialog button.toggle-optional-inputs.show .close-icon{ + transform:rotate(180deg) +} +.mega-dialog.user-management-add-user-dialog .default-button-no-border{ + float:left +} +.rtl .mega-dialog.user-management-add-user-dialog .default-button-no-border{ + float:right +} +.mega-dialog.user-management-add-user-dialog .invite-link-option .enable-pw-txt{ + -webkit-margin-end:12px; + color:var(--text-color-low); + display:inline-block; + margin-inline-end:12px; + max-width:270px; + vertical-align:top +} +.mega-dialog.user-management-add-user-dialog{ + width:598px +} +.mega-dialog.user-management-add-user-dialog .verification-container{ + align-items:center; + background:var(--surface-grey-1); + border-radius:4px; + box-sizing:border-box; + display:flex; + height:auto; + justify-content:space-between; + padding:8px 12px; + position:relative; + width:100% +} +.mega-dialog.user-management-add-user-dialog .optional-input-container{ + display:none +} +.mega-dialog.user-management-add-user-dialog .verification-container .verification-user-info{ + display:inline-block; + overflow:hidden; + position:relative; + text-overflow:ellipsis; + white-space:nowrap; + width:auto +} +.mega-dialog.user-management-add-user-dialog .verification-container .verification-user-info *{ + color:var(--text-color-medium) +} +.mega-dialog.user-management-add-user-dialog .verification-container .verification-user-info div{ + text-align:start +} +.mega-dialog.user-management-add-user-dialog .verification-container .verification-user-info .verification-user-email{ + display:flex +} +.mega-dialog.user-management-add-user-dialog .verification-container .verification-user-info .verification-user-pw{ + display:flex; + margin-top:12px +} +.mega-dialog.user-management-add-user-dialog .verification-container .verification-user-info .verification-user-email.single-line{ + text-align:center; + width:468px +} +.mega-dialog.user-management-add-user-dialog .verification-container .verification-user-info .verification-user-email .sub-e,.mega-dialog.user-management-add-user-dialog .verification-container .verification-user-info .verification-user-pw .sub-p{ + display:inline-block; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.mega-dialog.user-management-add-user-dialog .verification-container .verification-user-info b{ + -webkit-margin-end:12px; + color:var(--text-color-high); + margin-inline-end:12px +} +.mega-dialog.user-management-add-user-dialog .verification-container .checked-icon56.icon56{ + position:absolute; + right:40px; + top:28px +} +.rtl .mega-dialog.user-management-add-user-dialog .verification-container .checked-icon56.icon56{ + left:40px; + right:auto +} +.mega-dialog.user-management-add-user-dialog .verification-container button{ + flex:0 0 auto; + height:36px +} +.rtl .mega-dialog.user-management-add-user-dialog .verification-container button{ + left:16px; + right:auto +} +.mega-dialog.user-management-add-user-dialog .border{ + margin-bottom:24px +} +.mega-dialog.add-reassign-dialog{ + width:688px +} +.mega-dialog.add-reassign-dialog .content-block{ + padding-bottom:48px +} +.mega-dialog.add-reassign-dialog .content-block i{ + --width:120px; + height:120px; + margin:8px auto 24px; + width:120px +} +.mega-dialog.add-reassign-dialog .dialog-input-container{ + margin-top:36px; + padding:0 +} +.mega-dialog.add-reassign-dialog tr{ + vertical-align:top +} +.mega-dialog.add-reassign-dialog .mega-button.positive{ + display:inline-block +} +.mega-dialog.add-reassign-dialog .dialog-input-container td,.mega-dialog.add-reassign-dialog .dialog-input-container th{ + width:312px +} +.mega-dialog.add-reassign-dialog .dialog-input-container tr:nth-child(3) td{ + box-sizing:border-box; + padding:8px 0 32px +} +.mega-dialog.add-reassign-dialog .dialog-input-container tr td:first-child,.mega-dialog.add-reassign-dialog .dialog-input-container tr th:first-child{ + -webkit-padding-end:32px; + padding-inline-end:32px +} +.mega-dialog.add-reassign-dialog .dialog-input-container tr td:nth-child(2),.mega-dialog.add-reassign-dialog .dialog-input-container tr th:nth-child(2){ + -webkit-padding-start:32px; + padding-inline-start:32px +} +.mega-dialog.add-reassign-dialog .dialog-input-container tr:last-child td{ + box-sizing:border-box; + padding-bottom:8px; + text-align:center +} +.mega-dialog.add-reassign-dialog .dialog-dark-bottom{ + padding-left:32px +} +.mega-dialog.user-management-edit-profile-dialog{ + width:660px +} +.mega-dialog.user-management-edit-profile-dialog .dialog-input-title-ontop.email{ + z-index:999 +} +.mega-dialog.user-management-edit-profile-dialog header{ + align-items:center; + flex-direction:row; + margin-bottom:16px +} +.mega-dialog.user-management-edit-profile-dialog .pending-email-note.active{ + display:inline-block +} +.mega-dialog.user-management-edit-profile-dialog .pending-email-note{ + background-color:var(--banner-background-warning); + border:1px solid var(--banner-border-warning); + border-radius:4px; + color:var(--banner-text-warning); + cursor:pointer; + display:none; + float:right; + height:auto; + margin:-16px 0 18px; + padding:0 12px; + position:relative; + width:47%; + z-index:998 +} +.rtl .mega-dialog.user-management-edit-profile-dialog .pending-email-note{ + float:left +} +.mega-dialog.user-management-edit-profile-dialog .pending-email-note b,.mega-dialog.user-management-edit-profile-dialog .pending-email-note span{ + pointer-events:none +} +.mega-dialog.user-management-edit-profile-dialog .user-management-subuser-avatars{ + border:unset +} +.mega-dialog.user-management-edit-profile-dialog .user-management-subuser-avatars .avatar img{ + -webkit-margin-start:-2px; + float:left; + margin-inline-start:-2px; + margin-top:-2px +} +.rtl .mega-dialog.user-management-edit-profile-dialog .user-management-subuser-avatars .avatar img{ + float:right +} +.mega-dialog.user-management-edit-profile-dialog .user-management-subuser-avatars .avatar span{ + color:#fff; + float:left; + font-size:10px; + line-height:normal; + margin-left:33%; + margin-top:13% +} +.rtl .mega-dialog.user-management-edit-profile-dialog .user-management-subuser-avatars .avatar span{ + float:right +} +.mega-dialog.user-management-edit-profile-dialog .border{ + margin-bottom:24px +} +.mega-dialog.user-management-edit-profile-dialog .user-management-subuser-avatars{ + -webkit-margin-end:16px; + margin-inline-end:16px +} +.mega-dialog.payment-reminder{ + text-align:center; + width:596px +} +.mega-dialog.payment-reminder .img-dialog-pro-flexi-expiry{ + position:relative +} +.mega-dialog.payment-reminder .img-dialog-pro-flexi-expiry .icon-crests-pro-flexi-details{ + height:120px; + width:120px; + z-index:1 +} +.mega-dialog.payment-reminder .img-dialog-pro-flexi-expiry .icon-takedown{ + bottom:-5px; + height:70px; + position:absolute; + right:-20px; + width:70px; + z-index:2 +} +.mega-dialog.payment-card-expired header .graphic{ + --width:116px; + --height:80px; + height:80px; + width:116px +} +.mega-dialog.user-management-able-user-dialog .re-enable-large-icon{ + background-position:-117px -1261px +} +.mega-dialog.user-management-able-user-dialog .disable-large-icon{ + background-position:-4px -98px +} +.mega-dialog.user-management-able-user-dialog .dialog-text-one b{ + font-family:var(--text-font-family-semibold) +} +.mega-dialog.user-management-able-user-dialog .bold-warning{ + -webkit-margin-end:6px; + background:var(--banner-background-warning); + border:1px solid var(--banner-border-warning); + border-radius:4px; + box-sizing:border-box; + color:var(--banner-text-warning); + display:inline-block; + margin-inline-end:6px; + padding:2px 16px +} +.mega-dialog.user-management-able-user-dialog.warning .warning-large-icon{ + background-position:-22px -1261px +} +.mega-dialog.sub-account-link-password{ + width:594px +} +.mega-dialog.sub-account-link-password.user-management-dialog .mega-input-title-ontop{ + display:block; + margin:0 auto; + width:250px +} +.mega-dialog.user-management-migrate-process-dialog{ + width:560px +} +.mega-dialog.user-management-migrate-process-dialog .content-block.animation{ + padding-bottom:32px; + padding-top:32px; + text-align:center +} +.mega-dialog.user-management-migrate-process-dialog .image-block{ + display:inline-block; + width:148px +} +.mega-dialog.user-management-migrate-process-dialog .image-block p{ + text-align:center; + width:100% +} +.mega-dialog.user-management-migrate-process-dialog .image-block i{ + --icon-size:96px; + margin:0 auto 24px +} +.mega-dialog.user-management-migrate-process-dialog .process-container{ + display:inline-block; + height:48px; + position:relative; + top:24px; + vertical-align:top; + width:128px +} +.mega-dialog.user-management-migrate-process-dialog .process-arrow{ + --icon-size:48px; + --mask-color:var(--text-color-high); + animation:process-arrow-animation 1s linear infinite; + left:-24px; + opacity:0; + position:absolute; + top:0; + transform:translateX(0) +} +@keyframes process-arrow-animation{ +0%{ + opacity:0; + transform:translateX(0) +} +20%{ + opacity:1 +} +80%{ + opacity:1 +} +to{ + opacity:0; + transform:translateX(128px) +} +} +.rtl .mega-dialog.user-management-migrate-process-dialog .process-container{ + transform:rotate(180deg) +} +.mega-dialog.user-management-migrate-process-dialog .data-migrate.process-block{ + -webkit-margin-end:20px; + border-radius:2px; + display:inline-block; + height:4px; + margin:42px 0 8px; + margin-inline-end:20px; + position:relative; + width:384px +} +.mega-dialog.user-management-migrate-process-dialog .data-migrate.progress-bar{ + background-color:var(--secondary-green); + border-radius:2px; + height:4px; + width:60% +} +.mega-dialog.user-management-migrate-process-dialog .process-percentage{ + background:var(--surface-mid-grey); + border-radius:12px; + color:#fff; + display:inline-block; + font-size:14px; + font-weight:700; + height:24px; + line-height:24px; + margin:32px 0 8px; + position:relative; + text-align:center; + vertical-align:top; + width:56px +} +.mega-dialog.user-management-migrate-process-dialog .progress{ + padding-bottom:24px +} +.mega-dialog.bus-welcome-dialog{ + width:663px +} +.mega-dialog.bus-welcome-dialog .content-block{ + display:flex; + justify-content:center; + padding-bottom:48px +} +.mega-dialog.bus-welcome-dialog .content-block>div{ + border:1px solid var(--stroke-grey-2) +} +.mega-dialog.bus-welcome-dialog .dialog-left-block,.mega-dialog.bus-welcome-dialog .dialog-right-block{ + border:1px solid var(--stroke-grey-2); + border-radius:8px; + box-sizing:border-box; + cursor:pointer; + display:inline-block; + transition:.5s; + vertical-align:top; + width:272px +} +.mega-dialog.bus-welcome-dialog .dialog-left-block:hover,.mega-dialog.bus-welcome-dialog .dialog-right-block:hover{ + background:var(--surface-grey-2) +} +.mega-dialog.bus-welcome-dialog .dialog-left-block{ + -webkit-margin-end:12px; + margin-inline-end:12px; + padding:24px +} +.mega-dialog.bus-welcome-dialog .dialog-right-block{ + -webkit-margin-start:12px; + margin-inline-start:12px; + padding:24px +} +.mega-dialog.bus-welcome-dialog .content-block i{ + --icon-size:64px; + margin:auto +} +.mega-dialog.reset-success{ + width:400px +} +.mega-dialog.reset-success .reset-success-title{ + font:var(--text-h2-bold) +} +.mega-dialog.reset-success .content-block{ + padding:0 24px 16px; + text-align:center +} +.mega-dialog.reset-success .reset-email-success-txt{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.mega-dialog.reset-success .reset-email-success-sub-txt{ + color:var(--text-color-medium); + font:var(--text-body2); + margin-top:16px +} +.mega-dialog.reset-success .reset-email-success-sub-txt a{ + text-decoration:none +} +.mega-dialog.reset-success footer aside{ + background-color:var(--surface-main); + padding:8px 0 24px +} +.mega-dialog.reset-success footer button.ok-btn{ + font:var(--text-body1) +} +.mega-dialog.awaiting-confirmation{ + width:393px +} +.mega-dialog.awaiting-confirmation .content-block{ + padding-bottom:48px +} +.mega-dialog.registration-page-success.chatlink .reg-success-special .reg-success-txt,.mega-dialog.registration-page-success .reg-success-special,.mega-dialog.registration-page-success .reg-success-special .chat-message,.mega-dialog.registration-page-success .reg-success-special .reg-success-txt.chat-header,.mega-dialog.registration-page-success.special .reg-success-normal{ + display:none +} +.mega-dialog.registration-page-success.special .reg-success-special{ + display:block +} +.mega-dialog.registration-page-success.chatlink .reg-success-special .reg-success-txt.chat-header{ + display:block; + text-align:center +} +.mega-dialog.registration-page-success.chatlink .reg-success-special .reg-success-txt.chat-message{ + display:block; + padding:16px 0 0 +} +.mega-dialog.registration-page-success .content-block{ + padding-bottom:48px +} +.mega-dialog.registration-page-success .reg-resend-email-txt{ + font:var(--text-h3); + max-width:540px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.mega-dialog.account-reset-confirmation{ + width:393px +} +.mega-dialog.account-reset-confirmation .content-block{ + padding-bottom:48px +} +.mega-dialog.dialog-template-message{ + z-index:1201 +} +.mega-dialog.dialog-template-message button.close{ + display:none +} +.mega-dialog.dialog-template-message.with-close-btn button.close{ + display:block +} +.mega-dialog.dialog-template-message header i{ + display:none; + height:100%; + width:100% +} +.mega-dialog.dialog-template-message.confirmation header i.confirmation,.mega-dialog.dialog-template-message.error header i.error,.mega-dialog.dialog-template-message.info header i.info,.mega-dialog.dialog-template-message.question header i.question,.mega-dialog.dialog-template-message.warning header i.warning{ + display:block +} +.mega-dialog.dialog-template-message header p .folder-info{ + white-space:nowrap +} +.mega-dialog.dialog-template-message header h3 i,.mega-dialog.dialog-template-message header p .folder-info i{ + -webkit-margin-start:3px; + display:inline-block; + height:24px; + margin-inline-start:3px; + vertical-align:top; + width:24px +} +.mega-dialog.dialog-template-message header p .folder-info i{ + -webkit-margin-start:3px; + margin:-2px 0; + margin-inline-start:3px +} +.mega-dialog.dialog-template-message header p .folder-info span{ + font-family:var(--text-font-family-semibold); + white-space:normal; + word-break:break-word +} +.mega-dialog.dialog-template-message header h3 span{ + word-break:break-word +} +.mega-dialog.dialog-template-message .bottom-bar-link{ + -webkit-margin-end:auto; + color:var(--text-color-medium); + margin-inline-end:auto +} +.mega-dialog.dialog-template-message>footer .confirmation-input{ + -webkit-margin-start:88px; + margin:0 48px 24px; + margin-inline-start:88px +} +.mega-dialog.dialog-template-message>footer .confirmation-input label{ + color:var(--text-color-high); + display:block; + font:var(--text-body2); + margin:-12px 0 6px +} +.mega-dialog.dialog-template-message>footer .confirmation-input label:empty{ + display:none +} +.mega-dialog.feedback-dialog{ + background-color:rgba(34, 34, 34, .95); + border:0; + border-radius:0; + flex-direction:column; + height:100%; + justify-content:center; + left:0; + margin:0 !important; + max-height:100%; + top:0 !important; + transform:none; + width:100%; + z-index:1200 +} +.mega-dialog.feedback-dialog .content{ + display:flex; + flex-direction:column +} +.mega-dialog.feedback-dialog .feedback-dialog-body{ + text-align:center; + width:100% +} +.mega-dialog.feedback-dialog .feedback-dialog-header{ + color:var(--text-color-high); + font:var(--text-h1) +} +.mega-dialog.feedback-dialog .fm-mega-dialog-pad{ + margin:0 auto; + padding:0; + width:500px +} +.mega-dialog.feedback-dialog .rating{ + padding:31px 0 24px +} +.mega-dialog.feedback-dialog .feedback-dialog-textarea{ + background:var(--surface-black); + border-radius:4px; + margin:20px 0 8px +} +.mega-dialog.feedback-dialog .feedback-dialog-textarea textarea{ + background-color:initial; + color:var(--text-color-medium); + z-index:1 +} +.mega-dialog.feedback-dialog .overlay-close span{ + position:absolute; + right:0; + top:35px; + width:100% +} +.mega-dialog.feedback-dialog .rating a{ + --icon-size:100px; + --mask-color:var(--label-grey); + cursor:pointer; + display:block; + float:left +} +.rtl .mega-dialog.feedback-dialog .rating a{ + float:right +} +.mega-dialog.feedback-dialog .rating a.active,.mega-dialog.feedback-dialog .rating a.colored{ + --mask-color:var(--label-yellow) +} +.mega-dialog.feedback-dialog .feedback-label-txt{ + -webkit-margin-start:5px; + display:flex; + font-size:14px; + line-height:18px; + margin-inline-start:5px; + padding:15px 0 1px; + position:relative; + text-align:start +} +.mega-dialog.feedback-dialog .feedback-label-txt .radio-txt{ + color:var(--text-color-medium); + float:none; + font:var(--text-body1); + padding:0 +} +.mega-dialog.feedback-dialog .feedback-question{ + -webkit-margin-start:6px; + cursor:pointer; + flex-grow:0; + flex-shrink:0; + height:24px; + margin-inline-start:6px; + position:relative; + top:-4px; + width:24px +} +.mega-dialog.feedback-dialog .feedback-question:before{ + height:24px; + width:24px +} +.mega-dialog.feedback-dialog .feedback-question .dropdown{ + background:#fff; + bottom:38px; + color:#333; + display:none; + padding:15px; + right:-126px; + text-align:center; + width:276px +} +.mega-dialog.feedback-dialog .dropdown-white-arrow{ + --arrow-color:#fff +} +.mega-dialog.feedback-dialog .feedback-question:hover .dropdown{ + display:block +} +.mega-dialog.feedback-dialog .feedback-dialog-bottom{ + justify-content:center; + padding-top:40px; + width:100% +} +.mega-dialog.reset-success-st2{ + width:600px +} +.mega-dialog.reset-success-st2 .fm-account-input{ + float:none; + margin:0; + width:auto +} +.mega-dialog.reset-success-st2 .reset-pass-error{ + background-color:#fdebeb; + border-radius:4px; + box-shadow:0 0 0 1px #ec989a; + box-sizing:border-box; + color:#da3135; + display:none; + font-size:14px; + line-height:18px; + margin:0 8px; + padding:3px 12px +} +.mega-dialog.reset-success-st2 .reset-pass-error.error{ + display:block +} +.mega-dialog.reset-success-st3 .reset-txt{ + display:block; + float:none; + margin-bottom:17px +} +.mega-dialog.reset-success-st3 header{ + margin:0 0 10px +} +.mega-dialog.reset-success-st3 form{ + display:block; + padding:0 +} +.mega-dialog.reset-success-st3 .radioOff,.mega-dialog.reset-success-st3 .radioOn{ + margin:0; + vertical-align:top +} +.mega-dialog.reset-success-st3 .radio-txt{ + display:inline-block; + margin:0 0 16px 8px; + padding:0 +} +.mega-dialog.user-management-dialog.bus-pw-reset{ + width:560px +} +.mega-dialog.user-management-dialog.bus-pw-reset .bus-pw-wrapper{ + margin-bottom:24px; + margin-top:40px +} +.mega-dialog.user-management-dialog.bus-pw-reset .dialog-subtitle{ + margin:0 auto 16px +} +.mega-dialog.user-management-dialog.bus-pw-reset .notification-label{ + background:var(--banner-background-warning); + border:1px solid var(--banner-border-warning); + border-radius:4px; + color:var(--banner-text-warning); + margin-bottom:36px; + padding:4px 12px; + text-align:start +} +.mega-dialog.user-management-dialog.bus-pw-reset .verification-container .hide-pw .show-pw,.mega-dialog.user-management-dialog.bus-pw-reset .verification-container .show-pw .hide-pw{ + display:none +} +.mega-dialog.user-management-dialog.bus-pw-reset .verification-container .hide-pw .hide-pw,.mega-dialog.user-management-dialog.bus-pw-reset .verification-container .show-pw .show-pw{ + display:block +} +.mega-dialog.user-management-dialog.bus-pw-reset .verification-container .pass-visibility{ + --icon-size:24px; + --mask-color:var(--icon-rest); + -webkit-margin-start:auto; + cursor:pointer; + margin-inline-start:auto +} +.mega-dialog.user-management-dialog.bus-pw-reset .verification-container .pass-visibility:hover{ + --mask-color:var(--icon-active) +} +.mega-dialog.user-management-dialog.bus-pw-reset .mega-button.positive.semi-big{ + display:inline-block; + height:40px; + line-height:39px +} +.mega-dialog.user-management-dialog.bus-pw-reset .generate-pass-btn{ + display:flex; + margin:0 auto 24px +} +.mega-dialog.user-management-dialog.bus-pw-reset .verification-container{ + -webkit-margin-end:6px; + align-items:center; + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + box-sizing:border-box; + display:inline-flex; + margin-inline-end:6px; + max-width:410px; + min-height:36px; + min-width:360px; + padding:5px 12px; + position:relative; + text-align:start; + vertical-align:top +} +.mega-dialog.user-management-dialog.bus-pw-reset .temp-pw{ + display:inline-block +} +.mega-dialog.create-private-chat{ + text-align:center; + width:560px +} +.mega-dialog.create-private-chat .wrapper{ + margin:24px auto 44px; + width:460px +} +.mega-dialog.create-private-chat .fm-body-text{ + font-size:16px; + line-height:24px +} +.mega-dialog.create-private-chat .private-chat-illustration .bottom-page.big-icon.top-pad,.mega-dialog.create-private-chat button.make-private{ + display:table; + margin:24px auto +} +.mega-dialog.create-private-chat i{ + margin:14px 0 18px +} +.mega-dialog.create-private-chat .dialog-body-text strong{ + font:var(--text-h3-bold) +} +.mega-dialog.create-private-chat .dialog-body-text{ + color:var(--text-color-medium); + font:var(--text-h3); + margin:0 auto 24px; + max-width:480px +} +.mega-dialog.push-settings-dialog{ + width:360px +} +.mega-dialog.push-settings-dialog .radio-txt{ + -webkit-padding-start:36px; + cursor:pointer; + display:block; + padding:5px 0 11px 36px; + padding-inline-start:36px; + position:relative +} +.mega-dialog.push-settings-dialog .radio-txt:last-of-type{ + padding-bottom:0 +} +.mega-dialog.push-settings-dialog .custom-radio{ + left:6px; + margin:0; + position:absolute; + top:6px +} +.rtl .mega-dialog.push-settings-dialog .custom-radio{ + left:auto; + right:6px +} +.mega-dialog.push-settings-dialog .buttons-block{ + -webkit-padding-start:16px; + padding:0 16px 16px 0; + padding-inline-start:16px +} +.mega-dialog.incoming-call-dialog{ + background-image:url(../imagery/mega-incoming-animation.c15f1b7b3223e7f2.svg); + background-position:center -15px; + background-repeat:no-repeat; + min-height:320px; + width:374px +} +.mega-dialog.incoming-call-dialog .incoming-call-header{ + color:var(--text-color-medium); + font:var(--text-h3-bold); + text-align:center +} +.mega-dialog.incoming-call-dialog .content-block{ + background:transparent; + padding:0 24px 24px +} +.incoming-contact-info{ + color:var(--text-color-high); + display:inline-block; + font:var(--text-body1) +} +.incoming-contact-info span.incoming-call-txt{ + color:var(--text-color-low); + display:block; + font:var(--text-body2) +} +.incoming-call-avatar{ + border:4px solid var(--text-color-white-high); + border-radius:100%; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + box-sizing:border-box; + height:140px; + margin:0 auto; + overflow:hidden; + position:relative; + width:140px +} +.incoming-call-avatar .avatar-wrapper{ + border:0; + box-shadow:none; + font-size:42px; + height:132px; + line-height:130px; + margin:0; + width:132px +} +.incoming-call-avatar .avatar-wrapper span{ + color:var(--text-color-white-high) +} +.incoming-call-avatar img,.incoming-call-shadow-bl{ + border-radius:100%; + height:132px; + width:132px +} +.incoming-call-shadow-bl{ + box-shadow:inset 0 2px 1px 0 rgba(0, 0, 0, .06); + position:absolute; + top:0; + z-index:10 +} +.incoming-call-username{ + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + height:65px; + margin:0 20px; + overflow:hidden; + padding:17px 0; + text-align:center +} +.incoming-call-buttons{ + display:flex; + padding:0 8px 8px; + text-align:center +} +.incoming-call-buttons button.incoming-call-button{ + flex:0 0 64px; + margin:0 4px; + min-width:auto +} +.incoming-call-buttons button.audio-call{ + flex:1 1 auto +} +.mega-dialog.payment-dialog{ + min-height:254px; + width:730px +} +.mega-dialog.payment-dialog header{ + align-items:center; + flex-direction:row; + justify-content:space-between; + padding-top:38px +} +.mega-dialog.payment-dialog .content-block{ + display:flex; + flex-direction:row; + margin-top:24px +} +.mega-dialog.payment-dialog .plan-icon{ + -webkit-margin-end:16px; + display:inline-block; + margin-inline-end:16px; + vertical-align:middle +} +.mega-dialog.payment-dialog .plan-icon i{ + --icon-size:60px; + display:none +} +.mega-dialog.payment-dialog .plan-icon.business i.business,.mega-dialog.payment-dialog .plan-icon.pro1 i.pro1,.mega-dialog.payment-dialog .plan-icon.pro2 i.pro2,.mega-dialog.payment-dialog .plan-icon.pro3 i.pro3,.mega-dialog.payment-dialog .plan-icon.pro4 i.pro4{ + display:block +} +.mega-dialog.payment-dialog .payment-plan-info{ + display:inline-block; + vertical-align:middle +} +.mega-dialog.payment-dialog .payment-plan-price,.mega-dialog.payment-dialog .payment-plan-title{ + color:var(--text-color-high); + font:var(--text-h1) +} +.mega-dialog.payment-dialog .payment-plan-price{ + -webkit-margin-end:12px; + margin-inline-end:12px +} +.mega-dialog.payment-dialog .mega-input{ + margin-top:12px; + min-width:auto +} +.mega-dialog.payment-dialog .payment-form-title{ + color:var(--text-color-high); + font:var(--text-body2-higher) +} +.mega-dialog.payment-dialog .payment-half-block{ + -webkit-padding-end:24px; + border-right:2px solid var(--stroke-grey-2); + box-sizing:border-box; + padding-bottom:12px; + padding-inline-end:24px; + width:50% +} +.rtl .mega-dialog.payment-dialog .payment-half-block{ + border-left:2px solid var(--stroke-grey-2); + border-right:none +} +.mega-dialog.payment-dialog .payment-half-block.second{ + -webkit-padding-end:0; + -webkit-padding-start:24px; + border:0; + padding-inline-end:0; + padding-inline-start:24px +} +.mega-dialog.payment-dialog .payment-cc{ + height:32px; + margin-top:19px; + position:relative +} +.mega-dialog.payment-dialog .payment-cc div.radioOff,.mega-dialog.payment-dialog .payment-cc div.radioOn{ + opacity:0 +} +.mega-dialog.payment-dialog .payment-cc-icon{ + height:48px; + left:0; + position:absolute; + top:-7px; + width:48px +} +.rtl .mega-dialog.payment-dialog .payment-cc-icon{ + left:auto; + right:0 +} +.mega-dialog.payment-dialog .payment-cc-icon.mastercard{ + left:48px +} +.rtl .mega-dialog.payment-dialog .payment-cc-icon.mastercard{ + left:auto; + right:48px +} +.mega-dialog.payment-dialog .compound-inputs{ + display:flex; + justify-content:space-between +} +.mega-dialog.payment-dialog .compound-inputs .mega-input{ + width:calc(50% - 6px) +} +.mega-dialog.payment-dialog .compound-inputs.triplex .mega-input{ + width:calc(33.33333% - 8px) +} +.mega-dialog.pro-discount{ + width:520px +} +.mega-dialog.pro-discount .discount-desc{ + color:var(--text-color-success); + font:var(--text-h3) +} +.mega-dialog.pro-discount .content-block{ + padding-bottom:24px; + text-align:center +} +.mega-dialog.pro-discount footer aside{ + text-align:start +} +.rtl .voucher-redeem-dialog{ + direction:rtl +} +.voucher-redeem-dialog .account-information{ + align-items:center; + display:flex; + left:50%; + margin:-145px 0 0 -393px; + position:absolute; + text-align:start; + top:50%; + z-index:2200 +} +.voucher-redeem-dialog .left-information{ + -webkit-padding-end:50px; + padding-inline-end:50px; + padding-top:5px +} +.voucher-redeem-dialog .pricing-page.plan-data.storage{ + margin-top:20px +} +.voucher-redeem-dialog .right-information{ + color:var(--text-color-medium); + font:var(--text-body1); + width:500px +} +.voucher-redeem-dialog .pricing-page.plan{ + min-width:250px; + padding-bottom:20px +} +.voucher-redeem-dialog .pricing-page.euro-price{ + margin-bottom:30px +} +.voucher-redeem-dialog .pricing-page.euro-price:empty{ + margin-bottom:0 +} +.voucher-redeem-dialog .membership-gray-block{ + height:auto +} +.voucher-redeem-dialog .title-text{ + color:var(--text-color-high); + font:var(--text-h2); + max-width:400px +} +.voucher-redeem-dialog .balance-text{ + margin-top:40px +} +.voucher-redeem-dialog .complete-upgrade-text{ + margin-top:20px +} +.voucher-redeem-dialog .complete-text{ + color:var(--text-color-success) +} +.voucher-redeem-dialog .click-here-text{ + font-weight:700 +} +.voucher-redeem-dialog .buttons{ + margin-top:50px +} +.voucher-redeem-dialog .choose-plan-button{ + border:2px solid var(--stroke-grey-2); + margin-left:10px; + min-width:auto; + padding:0 30px; + text-align:center +} +.voucher-redeem-dialog .choose-plan-button:hover{ + background-color:#ccc; + border-color:#ccc; + color:#2e2e2e +} +.voucher-redeem-dialog .plan-icon i{ + --icon-size:80px; + display:none; + margin:auto +} +.voucher-redeem-dialog .plan-icon.business i.business,.voucher-redeem-dialog .plan-icon.pro1 i.pro1,.voucher-redeem-dialog .plan-icon.pro2 i.pro2,.voucher-redeem-dialog .plan-icon.pro3 i.pro3,.voucher-redeem-dialog .plan-icon.pro4 i.pro4{ + display:block +} +.mega-dialog.recovery-key-info .illustration-block{ + --width:64px; + height:64px; + margin:0 auto 12px; + width:64px +} +.mega-dialog.recovery-key-info{ + height:auto; + width:640px +} +.mega-dialog.thankyou-dialog{ + align-items:center; + background-color:rgba(34, 34, 34, .95); + display:flex; + height:100%; + justify-content:center; + position:absolute; + top:0; + width:100%; + z-index:2200 +} +.mega-dialog.thankyou-dialog .thankyou-close{ + cursor:pointer; + position:absolute; + right:14px; + top:14px; + z-index:2300 +} +.mega-dialog.thankyou-dialog .thankyou-close i{ + --icon-size:24px; + --mask-color:var(--text-color-high); + opacity:.7; + transition:opacity .2s +} +.mega-dialog.thankyou-dialog .thankyou-close:hover i{ + opacity:1 +} +.mega-dialog.thankyou-dialog .thankyou-body{ + position:absolute; + text-align:center; + z-index:2200 +} +.mega-dialog.thankyou-dialog .thankyou-body .thankyou-header,.mega-dialog.thankyou-dialog .thankyou-body .thankyou-txt{ + color:var(--text-color-high); + font:var(--text-h1); + padding-bottom:16px +} +.mega-dialog.thankyou-dialog .thankyou-body .thankyou-txt{ + font:var(--text-body1); + margin:0 auto 36px; + max-width:700px +} +.mega-dialog.thankyou-dialog .thankyou-body .thankyou-icon{ + display:block; + height:128px; + margin:0 auto 48px; + width:128px +} +.mega-dialog.thankyou-dialog .thankyou-body .green-link{ + color:var(--text-color-success) +} +.mega-dialog.payment-stripe-dialog iframe{ + background:none; + border-radius:24px; + display:block; + height:585px; + width:640px +} +.mega-dialog.payment-stripe-dialog .content-block{ + background:transparent; + padding:0 +} +.mega-dialog.payment-stripe-failure-dialog,.mega-dialog.payment-stripe-success-dialog{ + width:400px +} +.mega-dialog.payment-stripe-failure-dialog .content-block,.mega-dialog.payment-stripe-success-dialog .content-block{ + padding-bottom:48px +} +.mega-dialog.payment-stripe-failure-dialog .stripe-error,.mega-dialog.payment-stripe-success-dialog .stripe-error{ + margin-bottom:16px +} +.mega-desktopapp-download .dialog-top>h2{ + font:var(--text-h2-bold); + line-height:32px +} +.mega-desktopapp-download .dialog-top>h2>i{ + --icon-size:26px; + --mask-color:var(--text-color-white-high); + -webkit-margin-end:12px; + background:var(--label-blue); + border-radius:7px; + font-weight:400; + height:32px; + margin-inline-end:12px; + vertical-align:bottom; + width:32px +} +.mega-desktopapp-download .dialog-top>h2>i:before{ + height:var(--icon-size); + position:relative; + top:3px; + width:var(--icon-size) +} +.mega-dialog.mega-desktopapp-download .dialog-top .graphic{ + --width:250px; + height:150px; + margin-bottom:32px; + width:250px +} +.mega-desktopapp-download aside a,.mega-desktopapp-download aside a:active,.mega-desktopapp-download aside a:visited{ + color:var(--text-color-medium); + text-decoration:underline +} +.mega-dialog.report-abuse{ + max-height:90vh +} +.mega-dialog.report-abuse .subtitle{ + color:var(--text-color-error); + font:var(--text-h3-bold) +} +.mega-dialog.report-abuse .content-block{ + min-height:300px +} +@media screen and (max-height:500px){ +.mega-dialog.report-abuse .content-block{ + min-height:50px +} +} +.mega-dialog.report-abuse .content-block>section{ + padding-top:10px +} +.mega-dialog.report-abuse .sub-container{ + margin-top:24px +} +.mega-dialog.report-abuse .abusetypes-block p{ + color:var(--text-color-medium); + margin-bottom:20px +} +.mega-dialog.report-abuse .radio-buttons>*{ + display:flex; + margin:12px 0 +} +.mega-dialog.report-abuse input.form-control,.mega-dialog.report-abuse textarea.form-control{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + height:36px; + margin:0; + padding:0 8px; + transition:color .2s ease-in-out; + width:100% +} +.mega-dialog.report-abuse textarea.form-control{ + height:100px; + padding:8px +} +.mega-dialog.report-abuse form .form-row{ + margin-bottom:12px +} +.mega-dialog.report-abuse form>section{ + margin-top:20px +} +.mega-dialog.report-abuse form>section.abusetypes-block{ + margin-top:10px +} +.mega-dialog.report-abuse form p{ + color:var(--text-color-higher); + margin-bottom:6px +} +.mega-dialog.report-abuse form .form-row.two-col{ + display:flex +} +.mega-dialog.report-abuse form .form-row.two-col input.form-control:first-child{ + margin-right:20px +} +.mega-dialog.report-abuse form .form-row.two-col .form-control.half{ + width:calc(50% - 10px) +} +.mega-dialog.report-abuse form .form-row.two-col :placeholder-shown{ + opacity:1 +} +.mega-dialog.report-abuse input::placeholder,.mega-dialog.report-abuse textarea::placeholder{ + color:var(--surface-mid-grey) +} +.mega-dialog.report-abuse input:focus::placeholder,.mega-dialog.report-abuse textarea:focus::placeholder{ + opacity:0 +} +.mega-dialog.report-abuse .mega-input.form-control{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + height:36px; + margin:0; + padding:0; + transition:color .2s ease-in-out; + width:100% +} +.mega-dialog.report-abuse .mega-input.form-control:before{ + content:none +} +.mega-dialog.report-abuse .mega-input.form-control .placeholder{ + opacity:.4 +} +.mega-dialog.report-abuse .mega-input-dropdown .dropdown-scroll{ + max-height:250px +} +.mega-dialog.report-abuse .form-control.error{ + border:1px solid var(--input-text-underline-error) +} +.mega-dialog.report-abuse a{ + text-decoration:underline; + user-select:text +} +.mega-dialog.report-abuse a:hover{ + text-decoration:none +} +.mega-dialog.report-abuse .message-container{ + background:var(--banner-background-error); + border:1px solid var(--banner-border-error); + border-radius:4px; + box-sizing:border-box; + color:var(--banner-text-error); + font:var(--text-body1); + margin-bottom:10px; + padding:2px; + text-align:center +} +.mega-dialog.report-abuse .radio-buttons .radio-txt{ + color:var(--text-color-higher) +} +.mega-dialog.report-abuse .checkbox-block{ + margin-top:20px +} +.mega-dialog.report-abuse .checkbox-block .checkbox-txt{ + color:var(--text-color-higher); + font:var(--text-body2) +} +.mega-dialog.stop-backup .select-action-wrap{ + background-color:var(--surface-grey-1); + margin:8px 0; + padding-bottom:14px; + padding-top:14px +} +.mega-dialog.stop-backup .select-action{ + display:flex; + padding:12px +} +.mega-dialog.stop-backup .select-action .radio-button{ + flex:0 0 auto +} +.mega-dialog.stop-backup .select-action label{ + color:var(--text-color-high); + display:block; + font:var(--text-body1-bold) +} +.mega-dialog.stop-backup .select-action .action-info{ + color:var(--text-color-high); + display:block; + font:var(--text-body2); + padding-top:6px +} +.mega-dialog.stop-backup .path-wrap{ + align-items:center; + display:flex; + font:var(--text-body2); + padding-top:10px +} +.mega-dialog.stop-backup .path-wrap .move-label{ + color:var(--text-color-high); + flex:0 0 auto; + opacity:.5 +} +.mega-dialog.stop-backup .path-wrap .mega-button{ + flex:0 0 auto +} +.mega-dialog.stop-backup .mega-input.box-style{ + -webkit-margin-start:12px; + height:30px; + margin:0 5px; + margin-inline-start:12px +} +.mega-dialog.stop-backup .mega-input.box-style input{ + font:var(--text-body2); + overflow:auto; + text-overflow:unset +} diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/9ABA6C924AD17EEC5185CB7204198BBF78FE54A3 b/home/.surf/cache/WebKitCache/Version 16/Blobs/9ABA6C924AD17EEC5185CB7204198BBF78FE54A3 new file mode 100644 index 0000000..51f088c Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/9ABA6C924AD17EEC5185CB7204198BBF78FE54A3 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/9AE9D0DBFFA8AA2B2D85E00AFDE2CAF1128FA0B2 b/home/.surf/cache/WebKitCache/Version 16/Blobs/9AE9D0DBFFA8AA2B2D85E00AFDE2CAF1128FA0B2 new file mode 100644 index 0000000..e154861 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/9AE9D0DBFFA8AA2B2D85E00AFDE2CAF1128FA0B2 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/9C1F3D1E5602102FF8DCBA7A5469A866A453C75A b/home/.surf/cache/WebKitCache/Version 16/Blobs/9C1F3D1E5602102FF8DCBA7A5469A866A453C75A new file mode 100644 index 0000000..9883874 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/9C1F3D1E5602102FF8DCBA7A5469A866A453C75A @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["sessions"],{59753(a,b,c){function d(){if(!(this instanceof d))return new d;this.size=0,this.uid=0,this.selectors=[],this.selectorObjects={},this.indexes=Object.create(this.indexes),this.activeIndexes=[]}c.d(b,{f:()=>B,on:()=>A});var e,f=window.document.documentElement,g=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector;d.prototype.matchesSelector=function(a,b){return g.call(a,b)},d.prototype.querySelectorAll=function(a,b){return b.querySelectorAll(a)},d.prototype.indexes=[];var h=/^#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"ID",selector:function(a){var b;if(b=a.match(h))return b[0].slice(1)},element:function(a){if(a.id)return[a.id]}});var i=/^\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"CLASS",selector:function(a){var b;if(b=a.match(i))return b[0].slice(1)},element:function(a){var b=a.className;if(b){if("string"==typeof b)return b.split(/\s/);if("object"==typeof b&&"baseVal"in b)return b.baseVal.split(/\s/)}}});var j=/^((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"TAG",selector:function(a){var b;if(b=a.match(j))return b[0].toUpperCase()},element:function(a){return[a.nodeName.toUpperCase()]}}),d.prototype.indexes.default={name:"UNIVERSAL",selector:function(){return!0},element:function(){return[!0]}},e="function"==typeof window.Map?window.Map:function(){function a(){this.map={}}return a.prototype.get=function(a){return this.map[a+" "]},a.prototype.set=function(a,b){this.map[a+" "]=b},a}();var k=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;function l(a,b){var c,d,e,f,g,h,i=(a=a.slice(0).concat(a.default)).length,j=b,l=[];do if(k.exec(""),(e=k.exec(j))&&(j=e[3],e[2]||!j)){for(c=0;c3&& void 0!==arguments[3]?arguments[3]:{},f=!!e.capture,g=f?p:o,h=g[a];h||(h=new d,g[a]=h,document.addEventListener(a,z,f)),h.add(b,c)}function B(a,b,c){return a.dispatchEvent(new CustomEvent(b,{bubbles:!0,cancelable:!0,detail:c}))}},54679(a,b,c){c.d(b,{H:()=>f,v:()=>e});var d=c(59753);function e(){let a=document.getElementById("ajax-error-message");a&&(a.hidden=!1)}function f(){let a=document.getElementById("ajax-error-message");a&&(a.hidden=!0)}(0,d.on)("deprecatedAjaxError","[data-remote]",function(a){let b=a.detail,{error:c,text:d}=b;a.currentTarget===a.target&&"abort"!==c&&"canceled"!==c&&(/e,d8:()=>g,ej:()=>d,kT:()=>h})},54650(a,b,c){c.d(b,{Bt:()=>h,DN:()=>k,KL:()=>n,Se:()=>j,qC:()=>o,sw:()=>l});var d=c(59753),e=c(76177),f=c(54679);function g(a,b,c){return a.dispatchEvent(new CustomEvent(b,{bubbles:!0,cancelable:c}))}function h(a,b){b&&(i(a,b),(0,e.j)(b)),g(a,"submit",!0)&&a.submit()}function i(a,b){if(!(a instanceof HTMLFormElement))throw TypeError("The specified element is not of type HTMLFormElement.");if(!(b instanceof HTMLElement))throw TypeError("The specified element is not of type HTMLElement.");if("submit"!==b.type)throw TypeError("The specified element is not a submit button.");if(!a||a!==b.form)throw Error("The specified element is not owned by the form element.")}function j(a,b){if("boolean"==typeof b){if(a instanceof HTMLInputElement)a.checked=b;else throw TypeError("only checkboxes can be set to boolean value")}else{if("checkbox"===a.type)throw TypeError("checkbox can't be set to string value");a.value=b}g(a,"change",!1)}function k(a,b){for(let c in b){let d=b[c],e=a.elements.namedItem(c);e instanceof HTMLInputElement?e.value=d:e instanceof HTMLTextAreaElement&&(e.value=d)}}function l(a){if(!(a instanceof HTMLElement))return!1;let b=a.nodeName.toLowerCase(),c=(a.getAttribute("type")||"").toLowerCase();return"select"===b||"textarea"===b||"input"===b&&"submit"!==c&&"reset"!==c||a.isContentEditable}function m(a){return new URLSearchParams(a)}function n(a,b){let c=new URLSearchParams(a.search),d=m(b);for(let[e,f]of d)c.append(e,f);return c.toString()}function o(a){return m(new FormData(a)).toString()}(0,d.on)("click",".js-remote-submit-button",async function(a){let b=a.currentTarget,c=b.form;a.preventDefault();let d;try{d=await fetch(c.action,{method:c.method,body:new FormData(c),headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"}})}catch{}d&&!d.ok&&(0,f.v)()})},254(a,b,c){c.d(b,{ZG:()=>h,q6:()=>j,w4:()=>i});var d=c(8439);let e=!1,f=new d.Z;function g(a){let b=a.target;if(b instanceof HTMLElement&&b.nodeType!==Node.DOCUMENT_NODE)for(let c of f.matches(b))c.data.call(null,b)}function h(a,b){e||(e=!0,document.addEventListener("focus",g,!0)),f.add(a,b),document.activeElement instanceof HTMLElement&&document.activeElement.matches(a)&&b(document.activeElement)}function i(a,b,c){function d(b){let e=b.currentTarget;e&&(e.removeEventListener(a,c),e.removeEventListener("blur",d))}h(b,function(b){b.addEventListener(a,c),b.addEventListener("blur",d)})}function j(a,b){function c(a){let{currentTarget:d}=a;d&&(d.removeEventListener("input",b),d.removeEventListener("blur",c))}h(a,function(a){a.addEventListener("input",b),a.addEventListener("blur",c)})}},76177(a,b,c){function d(a){let b=a.closest("form");if(!(b instanceof HTMLFormElement))return;let c=e(b);if(a.name){let d=a.matches("input[type=submit]")?"Submit":"",f=a.value||d;c||((c=document.createElement("input")).type="hidden",c.classList.add("js-submit-button-value"),b.prepend(c)),c.name=a.name,c.value=f}else c&&c.remove()}function e(a){let b=a.querySelector("input.js-submit-button-value");return b instanceof HTMLInputElement?b:null}c.d(b,{j:()=>d,u:()=>e})},8704(a,b,c){c.d(b,{A7:()=>d.A7,ko:()=>d.ko,q1:()=>d.q1});var d=c(53729)},96056(a,b,c){c.d(b,{Hu:()=>l,"_8":()=>i,cj:()=>h});var d=c(69567),e=c(64463);let f="github-mobile-auth-flash";function g(){let a=document.querySelector("#js-flash-container");if(a)for(let b of a.children)!b.classList.contains("js-flash-template")&&b.classList.contains(f)&&a.removeChild(b)}function h(){let a=document.getElementById("github-mobile-authenticate-prompt");a&&(a.hidden=!0);let b=document.getElementById("github-mobile-authenticate-error-and-retry");b&&(b.hidden=!1)}function i(){g();let a=document.getElementById("github-mobile-authenticate-prompt");a&&(a.hidden=!1);let b=document.getElementById("github-mobile-authenticate-error-and-retry");b&&(b.hidden=!0)}function j(a){a&&function(a){let b=new d.R(document.querySelector("template.js-flash-template"),{className:`flash-error ${f}`,message:a}),c=document.importNode(b,!0),e=document.querySelector("#js-flash-container");e&&(g(),e.appendChild(c))}(a),h()}function k(a){return document.getElementById("github-mobile-authenticate-error-and-retry").getAttribute(a)}async function l(a,b,c,d){try{var e,f,g,h;await (e=a.getAttribute("data-poll-url"),f=b,g=c,h=d,async function a(b){if(h&&h())return;let c="STATUS_UNKNOWN",d;try{let i=document.getElementById("github-mobile-authenticate-form"),l=i.querySelector(".js-data-url-csrf"),m=await self.fetch(new Request(e,{method:"POST",body:new FormData(i),mode:"same-origin",headers:{Accept:"application/json","Scoped-CSRF-Token":l.value,"X-Requested-With":"XMLHttpRequest"}}));if(m.ok){let n=await m.json();c=n.status,d=n.token}else c="STATUS_ERROR"}catch{c="STATUS_ERROR"}let o;switch(c){case"STATUS_APPROVED":var p;let q;return f?f():void((q=(p=d)?new URL(`password_reset/${encodeURIComponent(p)}`,window.location.origin):new URL("",window.location.href)).searchParams.set("redirect","true"),window.location.assign(q));case"STATUS_EXPIRED":return o=k("timeout-flash"),g?g(o):j(o);case"STATUS_ACTIVE":case"STATUS_ERROR":case"STATUS_UNKNOWN":break;case"STATUS_REJECTED":return o=k("error-flash"),g?g(o):void document.getElementById("github-mobile-rejected-redirect").click();default:return o=k("error-flash"),g?g(o):j(o)}await new Promise(a=>setTimeout(a,3e3)),a(0)}(0))}catch(i){let l=k("error-flash");return j(l)}}(0,e.N7)(".js-poll-github-mobile-two-factor-authenticate",function(a){l(a)}),(0,e.N7)(".js-poll-github-mobile-verified-device-authenticate",function(a){l(a)}),(0,e.N7)(".js-poll-github-mobile-two-factor-password-reset-authenticate",function(a){l(a)})},98576(a,b,c){c.d(b,{C:()=>h,v:()=>i});var d=c(64463),e=c(254),f=c(65935),g=c(54650);function h(){document.body.classList.add("is-sending"),document.body.classList.remove("is-sent","is-not-sent")}function i(){document.body.classList.add("is-sent"),document.body.classList.remove("is-sending")}(0,f.AC)(".js-send-auth-code",async(a,b)=>{h();let c;try{c=await b.text()}catch(d){var e;(e=d.response.text)&&(document.querySelector(".js-sms-error").textContent=e),document.body.classList.add("is-not-sent"),document.body.classList.remove("is-sending")}c&&i()}),(0,d.N7)(".js-two-factor-sms-fallback-button",function(a){a.addEventListener("toggle",function(a){let b=a.currentTarget;for(let c of b.querySelectorAll(".flash"))c instanceof HTMLElement&&(c.hidden=!0);b.querySelector(".js-configure-sms-fallback").hidden=!1,b.querySelector(".js-verify-sms-fallback").hidden=!0})}),(0,f.AC)(".js-two-factor-set-sms-fallback",async(a,b)=>{let c;try{c=await b.text()}catch(d){let e=a.querySelector(".js-configure-sms-fallback"),f=a.querySelector(".js-verify-sms-fallback"),g=e.hidden?f:e,h=g.querySelector(".flash");switch(d.response.status){case 422:case 429:h.textContent=JSON.parse(d.response.text).error,h.hidden=!1}}if(c)switch(c.status){case 200:case 201:window.location.reload();break;case 202:a.querySelector(".js-configure-sms-fallback").hidden=!0,a.querySelector(".js-verify-sms-fallback").hidden=!1,a.querySelector(".js-fallback-otp").focus()}}),(0,e.q6)(".js-verification-code-input-auto-submit",function(a){let b=a.currentTarget,c=b.pattern||"[0-9]{6}";RegExp(`^(${c})$`).test(b.value)&&(0,g.Bt)(b.form)})},63047(a,b,c){c.d(b,{T:()=>e,k:()=>f});var d=c(8433);function e(){return(0,d.Zh)()?"supported":"unsupported"}async function f(){return await window.PublicKeyCredential?.isUserVerifyingPlatformAuthenticatorAvailable()?"supported":"unsupported"}},5760(a,b,c){var d=c(67404),e=c(64463);(0,e.N7)(".js-transform-notice",{constructor:HTMLElement,add(a){let b=(0,d.$1)("org_transform_notice");for(let c of b){let e=document.createElement("span");try{e.textContent=atob(decodeURIComponent(c.value)),(0,d.kT)(c.key),a.appendChild(e),a.hidden=!1}catch(f){}return}}}),c(98576),c(96056);var f=c(63047),g=c(8433),h=c(54650);async function i(){let a=document.querySelector(".js-conditional-webauthn-placeholder"),b=await globalThis.PublicKeyCredential?.isConditionalMediationAvailable?.();if(a&&b){document.querySelector("#login_field")?.setAttribute("autocomplete","username webauthn");let c=a.getAttribute("data-webauthn-sign-request");if(!c)return;let d=JSON.parse(c),e=await (0,g.U2)((0,g.wz)(d)),f=a.querySelector(".js-webauthn-response");f.value=JSON.stringify(e),(0,h.Bt)(a)}}(0,e.N7)(".js-webauthn-support",{constructor:HTMLInputElement,add(a){(0,h.Se)(a,(0,f.T)())}}),(0,e.N7)(".js-webauthn-iuvpaa-support",{constructor:HTMLInputElement,async add(a){(0,h.Se)(a,await (0,f.k)())}}),(0,e.N7)(".js-conditional-webauthn-placeholder",function(){i()});var j=c(254),k=c(8704);let l=window.location.hostname.split(".")[0];(0,j.q6)(".js-login-field",function(a){let b=a.target,c=b.closest("form");if(!c)return;let d=c.querySelector(".js-password-field"),e=c.querySelector(".js-sign-in-button");if(!d||!e)return;let f=b.value,g=["pj_nitin","up_the_irons"],h=()=>!(0,k.ko)();h()&&f.includes("_")&&!f.includes("@")&&!g.includes(f)&&!f.endsWith("_admin")&&!(e.getAttribute("development")&&(f.endsWith("_fab")||"github"!==l))?(d.setAttribute("disabled","true"),e.value=e.getAttribute("data-sso-label")||" "):(d.removeAttribute("disabled"),e.value=e.getAttribute("data-signin-label")||" ")})},53729(a,b,c){c.d(b,{A7:()=>i,ko:()=>h,q1:()=>g});var d=c(15205),e=c(86283);let f=(0,d.Z)(function(){return e.n4?.head?.querySelector('meta[name="runtime-environment"]')?.content||""}),g=(0,d.Z)(function(){return e.n4?.head?.querySelector('meta[name="is-private-instance"]')?.content==="true"}),h=(0,d.Z)(function(){return"enterprise"===f()}),i="webpack"},86283(a,b,c){c.d(b,{Qg:()=>d.Qg,iG:()=>e.iG,jX:()=>e.jX,n4:()=>e.n4,yF:()=>d.yF});var d=c(35647),e=c(73614)},73614(a,b,c){c.d(b,{iG:()=>e,jX:()=>f,n4:()=>d});let d="undefined"==typeof document?void 0:document,e="undefined"==typeof window?void 0:window,f="undefined"==typeof location?{pathname:"",origin:"",search:""}:location},35647(a,b,c){c.d(b,{Qg:()=>f,yF:()=>g});var d=c(73614);let e=void 0===d.n4,f=!e;function g(){return!!e||Boolean(d.n4.querySelector('react-app[data-ssr="true"]'))}},15205(a,b,c){function d(...a){return JSON.stringify(a,(a,b)=>"object"==typeof b?b:String(b))}function e(a,b={}){let{hash:c=d,cache:e=new Map}=b;return function(...b){let d=c.apply(this,b);if(e.has(d))return e.get(d);let f=a.apply(this,b);return f instanceof Promise&&(f=f.catch(a=>{throw e.delete(d),a})),e.set(d,f),f}}c.d(b,{Z:()=>e})}},a=>{var b=b=>a(a.s=b);a.O(0,["vendors-node_modules_selector-observer_dist_index_esm_js","vendors-node_modules_github_remote-form_dist_index_js-node_modules_github_template-parts_lib_-273494"],()=>b(5760));var c=a.O()}]) +//# sourceMappingURL=sessions-874445d6dbaf.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/9E653835288EBD4E49131FD00B5CEE4F1003CED3 b/home/.surf/cache/WebKitCache/Version 16/Blobs/9E653835288EBD4E49131FD00B5CEE4F1003CED3 new file mode 100644 index 0000000..f634325 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/9E653835288EBD4E49131FD00B5CEE4F1003CED3 @@ -0,0 +1,3 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["app_assets_modules_github_behaviors_user-content_ts-app_assets_modules_github_blob-anchor_ts--b39cba"],{82664(a,b,c){function d(a){let b=document.querySelectorAll(a);if(b.length>0)return b[b.length-1]}function e(){return`${window.location.protocol}//${window.location.host}${function(){let a=d("meta[name=analytics-location]");return a?a.content:window.location.pathname}()+function(){let a=d("meta[name=analytics-location-query-strip]"),b="";a||(b=window.location.search);let c=d("meta[name=analytics-location-params]");for(let e of(c&&(b+=(b?"&":"?")+c.content),document.querySelectorAll("meta[name=analytics-param-rename]"))){let f=e.content.split(":",2);b=b.replace(RegExp(`(^|[?&])${f[0]}($|=)`,"g"),`$1${f[1]}$2`)}return b}()}`}c.d(b,{S:()=>e})},86975(a,b,c){c.d(b,{AU:()=>j,Ap:()=>w,DT:()=>o,HN:()=>i,Lq:()=>g,T2:()=>u,Yg:()=>t,ag:()=>s,ck:()=>k,po:()=>r,q3:()=>l,uL:()=>v,wz:()=>n,xc:()=>h,xk:()=>p,zH:()=>f});var d=c(64707);let e="data-turbo-loaded";function f(){document.documentElement.setAttribute(e,"")}function g(){return document.documentElement.hasAttribute(e)}let h=()=>!(0,d.c)("PJAX_ENABLED"),i=a=>a?.tagName==="TURBO-FRAME";function j(a,b){let c=a.split("/",3).join("/"),d=b.split("/",3).join("/");return c===d}function k(a,b){let c=a.split("/",2).join("/"),d=b.split("/",2).join("/");return c===d}async function l(){let a=document.head.querySelectorAll("link[rel=stylesheet]"),b=new Set([...document.styleSheets].map(a=>a.href)),c=[];for(let d of a)""===d.href||b.has(d.href)||c.push(m(d));await Promise.all(c)}let m=(a,b=2e3)=>new Promise(c=>{let d=()=>{a.removeEventListener("error",d),a.removeEventListener("load",d),c()};a.addEventListener("load",d,{once:!0}),a.addEventListener("error",d,{once:!0}),setTimeout(d,b)}),n=(a,b)=>{let c=b||a.querySelectorAll("[data-turbo-replace]"),d=[...document.querySelectorAll("[data-turbo-replace]")];for(let e of c){let f=d.find(a=>a.id===e.id);f&&f.replaceWith(e)}},o=a=>{for(let b of a.querySelectorAll("link[rel=stylesheet]"))document.head.querySelector(`link[href="${b.getAttribute("href")}"], + link[data-href="${b.getAttribute("data-href")}"]`)||document.head.append(b)},p=a=>{for(let b of a.querySelectorAll("script"))document.head.querySelector(`script[src="${b.getAttribute("src")}"]`)||q(b)},q=a=>{let{src:b}=a;if(!b)return;let c=document.createElement("script"),d=a.getAttribute("type");d&&(c.type=d),c.src=b,document.head&&document.head.appendChild(c)},r=a=>{let b=[];for(let c of a.querySelectorAll('meta[data-turbo-track="reload"]'))document.querySelector(`meta[http-equiv="${c.getAttribute("http-equiv")}"]`)?.content!==c.content&&b.push(u(c.getAttribute("http-equiv")));return b},s=a=>{let b=a.querySelector("[data-turbo-head]")||a.head;return{title:b.querySelector("title")?.textContent,transients:[...b.querySelectorAll("[data-turbo-transient]")].map(a=>a.cloneNode(!0)),bodyClasses:a.querySelector("meta[name=turbo-body-classes]")?.content,replacedElements:[...a.querySelectorAll("[data-turbo-replace]")].map(a=>a.cloneNode(!0))}},t=()=>[...document.documentElement.attributes],u=a=>a.replace(/^x-/,"").replaceAll("-","_"),v=a=>document.dispatchEvent(new CustomEvent("turbo:reload",{detail:{reason:a}})),w=(a,b)=>{for(let c of a.attributes)b.hasAttribute(c.nodeName)||"aria-busy"===c.nodeName||a.removeAttribute(c.nodeName);for(let d of b.attributes)a.getAttribute(d.nodeName)!==d.nodeValue&&a.setAttribute(d.nodeName,d.nodeValue)}},86412(a,b,c){c.d(b,{p:()=>i});var d=c(87098),e=c(59753),f=c(80721),g=c(3126);let h=!0;function i(a){h=a}function j(){if(!h||document.querySelector(":target"))return;let a=(0,d.$z)(location.hash).toLowerCase(),b=(0,d.Q)(document,`user-content-${a}`);b&&(0,g.zT)(b)}window.addEventListener("hashchange",j),document.addEventListener("turbo:load",j),async function(){await f.x,j()}(),(0,e.on)("click","a[href]",function(a){let{currentTarget:b}=a;b instanceof HTMLAnchorElement&&b.href===location.href&&location.hash.length>1&&setTimeout(function(){a.defaultPrevented||j()})})},56334(a,b,c){function d(a){let b=a.match(/#?(?:L)(\d+)((?:C)(\d+))?/g);if(b){if(1===b.length){let c=g(b[0]);if(!c)return;return Object.freeze({start:c,end:c})}if(2!==b.length)return;{let d=g(b[0]),e=g(b[1]);if(!d||!e)return;return k(Object.freeze({start:d,end:e}))}}}function e(a){let b=d(a),c=function(a){let b=a.match(/(file-.+?-)L\d+?/i);return b?b[1]:""}(a);return{blobRange:b,anchorPrefix:c}}function f({anchorPrefix:a,blobRange:b}){return b?`#${a}${function(a){let{start:b,end:c}=k(a);return null!=b.column&&null!=c.column?`L${b.line}C${b.column}-L${c.line}C${c.column}`:null!=b.column?`L${b.line}C${b.column}-L${c.line}`:null!=c.column?`L${b.line}-L${c.line}C${c.column}`:b.line===c.line?`L${b.line}`:`L${b.line}-L${c.line}`}(b)}`:"#"}function g(a){let b=a.match(/L(\d+)/),c=a.match(/C(\d+)/);return b?Object.freeze({line:parseInt(b[1]),column:c?parseInt(c[1]):null}):null}function h(a,b){let[c,d]=i(a.start,!0,b),[e,f]=i(a.end,!1,b);if(!c||!e)return;let g=d,h=f;if(-1===g&&(g=0),-1===h&&(h=e.childNodes.length),!c.ownerDocument)throw Error("DOMRange needs to be inside document");let j=c.ownerDocument.createRange();return j.setStart(c,g),j.setEnd(e,h),j}function i(a,b,c){let d=[null,0],e=c(a.line);if(!e)return d;if(null==a.column)return[e,-1];let f=a.column-1,g=j(e);for(let h=0;hf,G5:()=>d,M9:()=>h,n6:()=>e})},54697(a,b,c){c.d(b,{Pi:()=>g,gD:()=>h,hX:()=>j,l8:()=>i});var d=c(59753);let e=new WeakMap,f=new WeakMap;function g(a){return e.get(a)}async function h(a){return e.get(a)||k(await l(a,"codeEditor:ready"))}function i(a,b){f.set(a,b)}function j(a){return f.get(a)}function k(a){if(!(a instanceof CustomEvent))throw Error("assert: event is not a CustomEvent");let b=a.detail.editor;if(!a.target)throw Error("assert: event.target is null");return e.set(a.target,b),b}function l(a,b){return new Promise(c=>{a.addEventListener(b,c,{once:!0})})}(0,d.on)("codeEditor:ready",".js-code-editor",k)},67404(a,b,c){function d(a){return e(a)[0]}function e(a){let b=[];for(let c of f()){let[d,e]=c.trim().split("=");a===d&& void 0!==e&&b.push({key:d,value:e})}return b}function f(){try{return document.cookie.split(";")}catch{return[]}}function g(a,b,c=null,d=!1,e="lax"){let f=document.domain;if(null==f)throw Error("Unable to get document domain");f.endsWith(".github.com")&&(f="github.com");let g="https:"===location.protocol?"; secure":"",h=c?`; expires=${c}`:"";!1===d&&(f=`.${f}`);try{document.cookie=`${a}=${b}; path=/; domain=${f}${h}${g}; samesite=${e}`}catch{}}function h(a,b=!1){let c=document.domain;if(null==c)throw Error("Unable to get document domain");c.endsWith(".github.com")&&(c="github.com");let d=new Date().getTime(),e=new Date(d-1).toUTCString(),f="https:"===location.protocol?"; secure":"",g=`; expires=${e}`;!1===b&&(c=`.${c}`);try{document.cookie=`${a}=''; path=/; domain=${c}${g}${f}`}catch{}}c.d(b,{"$1":()=>e,d8:()=>g,ej:()=>d,kT:()=>h})},25019(a,b,c){c.d(b,{aJ:()=>u,cI:()=>r,eK:()=>n});var d=c(82918),e=c(45341),f=c(28382),g=c(82664),h=c(86975),i=c(58843),j=c(8704);let k=!1,l=0,m=Date.now();function n(a,b={}){var c;"AbortError"!==(c=a).name&&("TypeError"!==c.name||"Failed to fetch"!==c.message)&&o(q(p(a),b))}async function o(a){if(!w())return;let b=document.head?.querySelector('meta[name="browser-errors-url"]')?.content;if(b){if(t(a.error.stacktrace)){k=!0;return}l++;try{await fetch(b,{method:"post",body:JSON.stringify(a)})}catch{}}}function p(a){return{type:a.name,value:a.message,stacktrace:r(a)}}function q(a,b={}){return Object.assign({error:a,sanitizedUrl:(0,g.S)()||window.location.href,readyState:document.readyState,referrer:(0,i.wP)(),timeSinceLoad:Math.round(Date.now()-m),user:u()||void 0,turbo:(0,h.xc)(),bundler:j.A7,ui:Boolean(document.querySelector('meta[name="ui"]'))},b)}function r(a){return(0,f.Q)(a.stack||"").map(a=>({filename:a.file||"",function:String(a.methodName),lineno:(a.lineNumber||0).toString(),colno:(a.column||0).toString()}))}let s=/(chrome|moz|safari)-extension:\/\//;function t(a){return a.some(a=>s.test(a.filename)||s.test(a.function))}function u(){let a=document.head?.querySelector('meta[name="user-login"]')?.content;if(a)return a;let b=(0,d.b)();return`anonymous-${b}`}let v=!1;function w(){return!v&&!k&&l<10&&(0,e.Gb)()}if(window.addEventListener("pageshow",()=>v=!1),window.addEventListener("pagehide",()=>v=!0),"function"==typeof BroadcastChannel){let x=new BroadcastChannel("shared-worker-error");x.addEventListener("message",a=>{n(a.data.error)})}},64707(a,b,c){c.d(b,{"$":()=>g,c:()=>f});var d=c(15205);let e=(0,d.Z)(function(){return(document.head?.querySelector('meta[name="enabled-features"]')?.content||"").split(",")}),f=(0,d.Z)(function(a){return -1!==e().indexOf(a)}),g={isFeatureEnabled:f}},41982(a,b,c){c.d(b,{W:()=>d});function d(a,b,c){return[...function*(a,b){for(let c of a){let d=b(c);null!=d&&(yield d)}}(a,a=>{let c=b(a);return null!=c?[a,c]:null})].sort((a,b)=>c(a[1],b[1])).map(([a])=>a)}},87738(a,b,c){function d(a,b,c=.1){let d=g(a,b,c);if(d&& -1===b.indexOf("/")){let e=a.substring(a.lastIndexOf("/")+1);d+=g(e,b,c)}return d}function e(a,b,c){if(b){let d=a.innerHTML.trim().match(c||function(a){let b=a.toLowerCase().split(""),c="";for(let d=0;d"),e=!0):e&&(f.push(""),e=!1),f.push(h))}a.innerHTML=f.join("")}else{let i=a.innerHTML.trim(),j=i.replace(/<\/?mark>/g,"");i!==j&&(a.innerHTML=j)}}c.d(b,{EW:()=>d,Qw:()=>e,qu:()=>h});let f=new Set([" ","-","_"]);function g(a,b,c=.1){let d=a;if(d===b)return 1;let e=d.length,g=0,h=0;for(let i=0;i -1?m:Math.max(k,l);if(-1===n)return 0;g+=.1,d[n]===j&&(g+=.1),0===n&&(g+=.9-c,0===i&&(h=1)),f.has(d.charAt(n-1))&&(g+=.9-c),d=d.substring(n+1,e)}let o=b.length,p=g/o,q=(p*(o/e)+p)/2;return h&&q+c<1&&(q+=c),q}function h(a,b){return a.score>b.score?-1:a.scoreb.text?1:0}},93928(a,b,c){function d(a){let b=a.split("\u200D"),c=0;for(let d of b){let e=Array.from(d.split(/[\ufe00-\ufe0f]/).join("")).length;c+=e}return c/b.length}function e(a,b,c,d=!0){let e=a.value.substring(0,a.selectionEnd||0),f=a.value.substring(a.selectionEnd||0);return h(a,(e=e.replace(b,c))+(f=f.replace(b,c)),e.length,d),c}function f(a,b,c){if(null===a.selectionStart||null===a.selectionEnd)return e(a,b,c);let d=a.value.substring(0,a.selectionStart),f=a.value.substring(a.selectionEnd);return h(a,d+c+f,d.length),c}function g(a,b,c={}){let d=a.selectionEnd||0,e=a.value.substring(0,d),f=a.value.substring(d),g=""===a.value||e.match(/\n$/)?"":"\n",h=c.appendNewline?"\n":"",i=g+b+h;a.value=e+i+f;let j=d+i.length;return a.selectionStart=j,a.selectionEnd=j,a.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!1})),a.focus(),i}function h(a,b,c,d=!0){a.value=b,d&&(a.selectionStart=c,a.selectionEnd=c),a.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!1}))}function i(a,b){let c=[...a],d=new TextEncoder,e=new Uint8Array(4);for(let f=0;f=b))break}return b}c.d(b,{Om:()=>g,lp:()=>e,rq:()=>d,t4:()=>f,yb:()=>i})}}]) +//# sourceMappingURL=app_assets_modules_github_behaviors_user-content_ts-app_assets_modules_github_blob-anchor_ts--b39cba-f394f445d042.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/A1F7DB9280ADA6C57F8BC64EC4E2FAAA418AEB79 b/home/.surf/cache/WebKitCache/Version 16/Blobs/A1F7DB9280ADA6C57F8BC64EC4E2FAAA418AEB79 new file mode 100644 index 0000000..645fb5d --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/A1F7DB9280ADA6C57F8BC64EC4E2FAAA418AEB79 @@ -0,0 +1 @@ +define("translations",["require"],function(define){return define.amd=!0,function(a,b){"object"==typeof exports&&"undefined"!=typeof module&&"function"==typeof require?b(require("../moment")):"function"==typeof define&&define.amd?define(["moment"],b):b(a.moment)}(this,function(a){"use strict";var b="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),c="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),d=a.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,d){return/-MMM-/.test(d)?c[a.month()]:b[a.month()]},weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return d}),{"Please enter your name.":"Por favor escribe tu nombre.","Please enter your email address.":"Por favor escribe tu correo.","Invalid email address.":"Dirección de email inválida.","Please enter a password.":"Por favor escribe una contraseña.","Password must have at least 6 characters.":"La contraseña debe tener como mínimo 6 caracteres.","Name must have at least %(minLength)s characters.":"Nombre debe tener al menos %(minLength)s caracteres.","Name must have less than %(maxLength)s characters.":"Nombre debe tener menos de %(maxLength)s caracteres.","Location must have less than %(maxLength)s characters.":"Ubicación debe tener menos de %(maxLength)s caracteres.","Site must have less than %(maxLength)s characters.":"Sitio debe tener menos de %(maxLength)s caracteres.","Please enter a valid site.":"Por favor escribe un sitio válido.","Comments can't be blank.":"Los comentarios no pueden dejarse en blanco.","Comments must have at least 2 characters.":"Los comentarios deben tener al menos 2 caracteres.","Please sign in or enter a name and email address.":"Debe iniciar sesión o introduzca un nombre y dirección de correo electrónico.","Please enter both a name and email address.":"Por favor, introduzca un nombre y dirección de correo electrónico.","Invalid email address format.":"Formato inválido de dirección de correo electrónico.","Description must have at least %(minLength)s characters.":"La descripción debe tener al menos %(minLength)s caracteres.","Description must have less than %(maxLength)s characters.":"La descripción debe tener menos de %(maxLength)s caracteres.",Gray:"Gris",Blue:"Azul",Green:"Verde",Yellow:"Amarillo",Orange:"Naranja",Red:"Rojo",Purple:"Morado","See Your Feed":"Ver tu RSS","Find More Discussions":"Encontrar más discusiones","Comment Policy":"Política de Comentarios","Please read our %(commentPolicyLink)s before commenting.":"Por favor lee nuestra %(commentPolicyLink)s antes de comentar.","%(forumName)s Comment Policy":"Política de Comentarios de %(forumName)s","1 comment":"1 comentario","%(numPosts)s comments":"%(numPosts)s comentarios",Comments:"Comentarios",Community:"Comunidad","Disqus' Privacy Policy":"Política de Privacidad de Disqus","Privacy Policy":"Políticas de Privacidad","Load more comments":"Cargar más comentarios","Subscribe and get email updates from this discussion":"Suscribirse y recibir actualizaciones de esta discusión por correo electrónico",Subscribe:"Suscribirse","Add Disqus to your site":"Agrega Disqus a tu sitio","Add Disqus":"Agregar Disqus",Add:"Agregar","Powered by Disqus":"Desarrollado por Disqus","Enter email address":"Introduce correo electrónico","Hide this message":"Ocultar este mensaje","Unfortunately your image upload failed. Please verify that the file is valid and in a supported format (JPEG, PNG, or GIF).":"Desafortunadamente la carga de tu imagen falló. Por favor verifica que el archivo sea válido y esté en un formato compatible (JPEG, PNG, o GIF).","Unfortunately your image upload failed. Please verify that the file is in a supported format (JPEG, PNG, or GIF).":"Desafortunadamente la carga de tu imagen falló. Por favor verifica que el archivo esté en un formato compatible (JPEG, PNG, o GIF).","Unfortunately your image upload failed. Please verify that your image is under 5MB.":"Desafortunadamente la carga de tu imagen falló. Por favor verifica que tu imagen sea inferior a 5MB.","You must be logged in to upload an image.":"Debes haber iniciado sesión para subir una imagen.","Unfortunately your image upload failed. Please verify that your image is in a supported format (JPEG, PNG, or GIF) and under 5MB. If you continue seeing this error, please try again later.":"Desafortunadamente la carga de tu imagen falló. Por favor verifica que tu imagen esté en un formato compatible (JPEG, PNG, o GIF) y no exceda los 5MB. Si continúas viendo este error, por favor inténtalo más tarde.","Sorry we didn't catch that. Try again?":"Lo sentimos, no entendimos. ¿Intentamos de nuevo?","Did you know you can drag and drop images too? Try it now!":"¿Sabias que también puedes arrastrar y soltar imágenes? ¡Inténtalo ahora!","Join the discussion…":"Únete a la discusión...","Start the discussion…":"Comienza la discusión...","Please wait until your images finish uploading.":"Por favor, espere hasta que sus imágenes terminen de cargar.","Oops! We're having trouble posting your comment. Check your internet connection and try again.":"Oops! Estamos teniendo problemas al publicar su comentario. Revise su coneccion de internet e intente nuevamente.","in this conversation":"en esta conversación",Avatar:"Avatar","That email address is already registered with a Disqus account. Log in or enter another email.":"Este email ya está registrado con una cuenta de ONPETV. Inicie sesión o ingrese otro email.","The e-mail address you specified is already in use.":"El nombre de usuario que usted ha especificado está en uso.","Try logging in.":"Intente acceder","Connect with %(forumName)s":"Conectar con %(forumName)s","%(forumName)s needs permission to access your account.":"%(forumName)s necesita permiso para acceder a tu cuenta.",Next:"Siguiente","Terms of Service":"Términos de Servicio","I agree to Disqus' %(terms)s":"Estoy de acuerdo con los %(terms)sde Disqus","I agree to Disqus' processing of email and IP address, and the use of cookies, to facilitate my authentication and posting of comments, explained further in the %(policy)s":"Acepto el procesamiento por parte de Disqus del correo electrónico y la dirección IP, y el uso de cookies, para facilitar mi autenticación y publicación de comentarios, explicado más detalladamente en la %(policy)s","Data Sharing Policy":"Política de Intercambio de Datos","I agree to additional processing of my information, including first and third party cookies, for personalized content and advertising as outlined in our %(policy)s":"Estoy de acuerdo con el procesamiento adicional de mi información, incluidas las cookies de primeros y terceros, para el contenido personalizado y la publicidad tal como se describe en nuestra %(policy)s","or sign up with Disqus":"o registrarse con Disqus","or pick a name":"o elija un nombre","Disqus is a discussion network":"Disqus es una red de discusión","Don't be a jerk or do anything illegal. Everything is easier that way.":"No seas imprudente o hagas algo ilegal. Todo es más fácil de esa manera.","Read full terms and conditions":"Lee los términos y condiciones",Name:"Nombre",Email:"Correo electrónico",Password:"Contraseña","I'd rather post as a guest":"Prefiero comentar como invitado",Post:"Publicar","Log in with":"Iniciar sesión con","Drag and drop your images here to upload them.":"Arrastra y suelta tus imágenes para subirlas.","Post as %(name)s":"Publicar como %(name)s","Save Edit":"Guardar Cambios",Cancel:"Cancelar",Link:"Enlace","We are unable to post your comment because %(blocker)s has placed your account in a timeout. You will be able to comment again when your timeout expires %(expirationRelative)s.":"No nos fue posible publicar tu comentario porque %(blocker)s ha puesto tu cuenta en tiempo de espera. Podrás comentar de nuevo cuando tu tiempo de espera expire en %(expirationRelative)s.","We are unable to post your comment because you have been banned by %(blocker)s.":"No podimos publicar tu comentario porque fuiste bloquado por %(blocker)s.","Find out more.":"Saber más.","%(forumName)s requires you to verify your email address before posting.":"%(forumName)s requiere que usted para verificar su dirección de correo electrónico antes de publicar.","Verify Email":"Confirmar correo electrónico","Send verification email to %(email)s":"Enviar correo electrónico de verificación a %(email)s",Play:"Reproducir",Hide:"Ocultar",View:"Ver","Edit profile":"Editar perfil",Private:"Privado",Following:"Siguiendo",Follow:"Seguir","Full profile":"Perfil completo","1 vote":"1 voto","%(numLikesReceived)s votes":"%(numLikesReceived)s votos",MOD:"MOD","Disqus Pro gives you access to exclusive features like auto-moderation, shadow banning, and customization options.":"Disqus Pro te brinda acceso a funciones exclusivas como moderación automática, bloqueo invisible y opciones de personalización.","Subscriptions and Billing":"Subscripciones y Facturación","1 day":"1 día","1 week":"1 semana","2 weeks":"2 semanas","Adding this person to the whitelist will automatically approve his or her new comments from now on.":"Al agregar esta persona a la lista blanca automáticamente aprobará sus nuevos comentarios a partir de ahora.",Timeout:"Tiempo de espera","Restrict a user's ability to comment for a period of time. This notifies the user of their timeout. If discussions get heated, enforce timeouts so that users cool off and improve their behavior.":"Restringe la capacidad del usuario para comentar durante un período de tiempo. Esto notifica al usuario de su tiempo de espera. Si las discusiones se calientan, aplica tiempos de espera para que los usuarios se moderen y mejoren su comportamiento.",Custom:"Personalizado","Shadow Ban":"Bloqueo Oculto","Ban a user without them knowing. The user can still comment, however, their posts will only be visible to themselves. Use it against trolls and spammers who attempt to circumvent a ban with new accounts.":"Bloquea a un usuario sin que se entere. El usuario podrá seguir comentando, sin embargo, sus publicaciones serán será sólo visibles para él mismo. Úsalo contra trolls y spammers que intentan eludir una prohibición con cuentas nuevas.","Permanently ban the user so they can no longer post, vote, or flag comments on your site. If the user repeatedly violates your comment policy, revoke their ability to participate.":"Prohibir permanentemente al usuario para que ya no pueda publicar, votar o marcar comentarios en su sitio. Si el usuario incumple reiteradamente tu política de comentarios, revoca su capacidad para participar.","Last 30 days of comments:":"Comentarios de los últimos 30 días:","Do nothing":"No hacer nada",Delete:"Eliminar comentario","Mark as spam":"Marcar como spam","User:":"Usuario:","Email:":"Correo electrónico:","IP Address:":"Dirección IP:","Note:":"Nota:","Adding an IP address to the banned list may also unintentionally block others who may share this IP address.":"El agregar una dirección IP a la lista de bloqueados puede también de manera no intencional bloquear a otros que pudieran compartir esta dirección IP.","Reason for banning:":"Motivo del bloqueo:","You can remove the user from the banned list at any time.":"Puedes eliminar al usuario de la lista de bloqueados en cualquier momento.","Add to Trusted List":"Agregar a Lista de Confianza","Add to Banned List":"Agregar a Lista de Bloqueados","One other person is typing…":"Otra persona esta tipeando...","%(num)s other people are typing…":"%(num) personas están escribiendo...","I disagree with this user":"No estoy de acuerdo con este usuario","Targeted harassment":"Acoso dirigido","posted or encouraged others to post harassing comments or hate speech targeting me, other individuals, or groups":"publicío o animó a otros a publicar comentarios de hostigamiento o discurso de odio dirigido hacia mí, a otras personas o grupos",Spam:"Spam","posted spam comments or discussions":"publicó comentarios o discusiones spam","Inappropriate profile":"Perfil inapropiado","profile contains inappropriate images or text":"el perfil contiene imágenes o texto inapropiados","Threatening content":"Contenido amenazante","posted directly threatening content":"publicó contenido directamente amenazador",Impersonation:"Suplantación de identidad","misrepresents themselves as someone else":"se hace pasar por otra persona","Private information":"Informacion privada","posted someone else's personally identifiable information":"publicó información de identificación personal de otra persona","Flag Comment":"Marcar Comentario","Why are you flagging this comment?":"¿Por qué estás marcando este comentario?","Before flagging, please keep in mind that %(disqus)s does not moderate communities. Your username will be shown to the moderator, so you should only flag this comment for one of the reasons listed above.":"Antes de marcar, toma en cuenta que %(disqus)s no modera las comunidades. Tu nombre de usuario se mostrará al moderador, por lo que solo deberías marcar este comentario por uno de los motivos enumerados anteriormente.","Thanks for your feedback!":"¡Gracias por tus comentarios!",Done:"Hecho","Other tools for you:":"Otras herramientas para ti:","Blocking this user will hide all of their activity and comments from your %(disqus)s content, feeds, and notifications.":"Al bloquear este usuario se ocultará toda su actividad y comentarios del contenido, noticias y notificaciones de tu %(disqus)s.","Would you like to block %(user)s?":"¿Te gustaría bloquear a %(user)s?","Block User":"Bloquear Usuario","No Thanks":"No Gracias","Blocked User":"Usuario Bloqueado","You've blocked %(user)s.":"Has bloqueado a %(user)s.","You won't see comments from this user on %(disqus)s in discussions, notifications, and more.":"No verás más comentarios de este usuario en %(disqus)s discusiones, notificaciones y más.","Manage Blocked Users":"Administrar Usuarios Bloqueados","Something went wrong while trying to block this user. Please try again later.":"Algo salió mal mientras intentamos bloquear a este usuario. Por favor intenta mas tarde.","Unfortunately this user could not be blocked; you have reached the limit for number of users blocked.":"Desafortunadamente este usuario no pudo ser bloqueado; has alcanzado el limite de usuarios bloqueados.","Vote up":"Votar a favor","Vote down":"Votar en contra",Edit:"Editar",Reply:"Responder","View all comments":"Ver todos los comentarios","All Comments":"Todos los comentarios",Share:"Compartir","Click to copy post link":"Haz clic para copiar vínculo a publicación","Leave Feedback":"Dejar su opinion","Mark as Spam":"Marcar como Spam","Ban User":"Expulsar Usuario",Moderate:"Moderar","Stop featuring":"Detener destacados","Feature this comment":"Destacar este comentario",Flagged:"Marcado","Flag as inappropriate":"Marcar como no apropiado",Collapse:"Contraer",Expand:"Expandir",Mod:"Moder.","All-Star":"All-Star","This comment has no content.":"Este comentario no tiene contenido","see more":"ver más","This comment was deleted.":"Este comentario fue eliminado.","Comment score below threshold.":"Puntuación de comentario por debajo del umbral.","Show comment.":"Mostrar comentario.","Your comment is awaiting moderation.":"Tu comentario está esperando ser moderado.","See your comment.":"Ver tu comentario.","Why?":"¿Por qué?","This comment is awaiting moderation.":"Este comentario está en espera de moderación.","You must sign in to up-vote this post.":"Debes iniciar sesión para votar positivo en este post.","You must sign in to down-vote this post.":"Debes iniciar sesión para votar negativo este comentario.","Featured by %(forum)s":"Patrocinado por %(forums)s","Sponsored on Disqus":"Patrocinado por Disqus","Hold on, this is waiting to be approved by %(forum)s.":"Un momento, esta a la espera de ser aprobado por %(forum)s","You've featured a comment! This comment will now also appear at the top of the discussion.":"Tu tienes destacado un comentario! Este comentario ahora aparecerá primero en la discusion","Are you sure you want to block this user?":"¿Estás seguro que deseas bloquear a este usuario?","Are you sure you want to delete this comment? You cannot undo this action.":"¿Seguro que quieres borrar este comentario? No se puede deshacer esta acción.","This discussion has been closed.":"Esta discusión se ha cerrado.","Be the first to comment.":"Sé el primero en comentar.","Nothing in this discussion yet.":"Nada en esta discusión todavía.","Welcome to %(Disqus)s! Discover more great discussions just like this one. We're a lot more than comments.":"¡Bienvenido a %(Disqus)s! Descubre más conversaciones geniales como esta. Somos mucho más que comentarios.","Get Started":"Comenzar",Dismiss:"Descartar","Featured Comment":"Destacado por","Show One New Comment":"Mostrar Un Comentario Nuevo","Show %(comments)s New Comments":"Mostrar %(comments)s Nuevos Comentarios","Show 1 new reply":"Mostrar 1 nueva respuesta","Show %(replies)s new replies":"Mostrar %(replies)s nuevas respuestas","What do you think?":"¿Qué te parece?","1 Response":"1 reacción","Sort by Best":"ordenar por el mejor","Sort by Newest":"ordenar por el más nuevo","Sort by Oldest":"ordenar por el más viejo",Best:"Mejor",Newest:"Lo más nuevo",Oldest:"Más antiguo",Login:"Iniciar sesión","Your Profile":"Tu Perfil","Display Media":"Mostrar Medios","Hide Media":"Ocultar Medios","Edit Settings":"Editar Configuración","Don't Premoderate Thread":"No Moderar Previamente el Hilo","Premoderate Thread":"Moderar Previamente el Hilo","Open Thread":"Abrir Tema","Close Thread":"Cerrar Tema",Help:"Ayuda",Debug:"Depurar",Repair:"Reparar",Logout:"Cerrar sesión","Important Update":"Actualización Importante","When you log in with Disqus, we process personal data to facilitate your authentication and posting of comments. We also store the comments you post and those comments are immediately viewable and searchable by anyone around the world.":"Cuando inicias sesión con Disqus, procesamos los datos personales para facilitar tu autenticación y publicación de comentarios. También almacenamos los comentarios que publicas y esos comentarios son inmediatamente visibles y buscables por cualquier persona en todo el mundo.",Proceed:"Proceder","One new comment above.":"Un nuevo comentario arriba.","%(num)s new comments above.":"%(num)snuevos comentarios arriba.","One new comment below.":"Un nuevo comentario abajo.","%(num)s new comments below.":"%(num)s nuevos comentarios abajo.","The Disqus comment system is temporarily in maintenance mode. You can still read comments during this time, however posting comments and other actions are temporarily delayed.":"El sistema de comentarios de Disqus está en modo de mantenimiento temporalmente. Puedes leer comentarios durante este tiempo, sin embargo publicar comentarios y otras acciones están temporalmente demoradas.","Comments on this entire site are premoderated (only moderators can see this message).":"Los comentarios en este sitio son moderados previamente (sólo los moderadores pueden ver este mensaje).","Change site settings.":"Cambiar configuración del sitio.","Comments on this thread are premoderated (only moderators can see this message).":"Los comentarios en este hilo son moderados previamente (sólo los moderadores pueden ver este mensaje).","An error occurred while opening the thread. Please try again.":"Ha ocurrido un error cuando se abría la publicación. Inténtalo nuevamente","An error occurred while closing the thread. Please try again.":"Ha ocurrido un error cuando se cerraba la publicación. Inténtalo nuevamente","An error occurred while updating the thread. Please try again.":"Se produjo un error al actualizar el hilo. Inténtalo de nuevo."}}); \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/A294BFDC599E0F4F856CF93CD5BFE346E9993BFE b/home/.surf/cache/WebKitCache/Version 16/Blobs/A294BFDC599E0F4F856CF93CD5BFE346E9993BFE new file mode 100644 index 0000000..a5f28ca --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/A294BFDC599E0F4F856CF93CD5BFE346E9993BFE @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/A2D0A012912F1F0FAF145EE8B20055C8EDE175DE b/home/.surf/cache/WebKitCache/Version 16/Blobs/A2D0A012912F1F0FAF145EE8B20055C8EDE175DE new file mode 100644 index 0000000..cc92041 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/A2D0A012912F1F0FAF145EE8B20055C8EDE175DE differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/A5E6EF30EC02B3C0F25B01584C852738AC3493FF b/home/.surf/cache/WebKitCache/Version 16/Blobs/A5E6EF30EC02B3C0F25B01584C852738AC3493FF new file mode 100644 index 0000000..ca66866 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/A5E6EF30EC02B3C0F25B01584C852738AC3493FF @@ -0,0 +1,163 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_lit-html_lit-html_js"],{13695(a,b,c){c.d(b,{X:()=>e,w:()=>f});/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ let d=new WeakMap,e=a=>(...b)=>{let c=a(...b);return d.set(c,!0),c},f=a=>"function"==typeof a&&d.has(a)},66921(a,b,c){c.d(b,{V:()=>e,eC:()=>d,r4:()=>f});/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ /** + * True if the custom elements polyfill is in use. + */ let d=void 0!==window.customElements&& void 0!==window.customElements.polyfillWrapFlushCallback,e=(a,b,c=null,d=null)=>{for(;b!==c;){let e=b.nextSibling;a.insertBefore(b,d),b=e}},f=(a,b,c=null)=>{for(;b!==c;){let d=b.nextSibling;a.removeChild(b),b=d}}},31301(a,b,c){c.d(b,{J:()=>d,L:()=>e});/** + * @license + * Copyright (c) 2018 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ /** + * A sentinel value that signals that a value was handled by a directive and + * should not be written to the DOM. + */ let d={},e={}},28356(a,b,c){c.d(b,{JG:()=>BooleanAttributePart,K1:()=>EventPart,QG:()=>AttributeCommitter,"_l":()=>AttributePart,m:()=>PropertyCommitter,nt:()=>NodePart,pt:()=>j});var d=c(13695),e=c(66921),f=c(31301),g=c(3122),h=c(89823),i=c(60560);/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ /** + * @module lit-html + */ let j=a=>null===a||!("object"==typeof a||"function"==typeof a),k=a=>Array.isArray(a)||!!(a&&a[Symbol.iterator]);class AttributeCommitter{constructor(a,b,c){this.dirty=!0,this.element=a,this.name=b,this.strings=c,this.parts=[];for(let d=0;dthis.handleEvent(a)}setValue(a){this.__pendingValue=a}commit(){for(;(0,d.w)(this.__pendingValue);){let a=this.__pendingValue;this.__pendingValue=f.J,a(this)}if(this.__pendingValue===f.J)return;let b=this.__pendingValue,c=this.value,e=null==b||null!=c&&(b.capture!==c.capture||b.once!==c.once||b.passive!==c.passive);e&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),null!=b&&(null==c||e)&&(this.__options=o(b),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=b,this.__pendingValue=f.J}handleEvent(a){"function"==typeof this.value?this.value.call(this.eventContext||this.element,a):this.value.handleEvent(a)}}let o=a=>a&&(l?{capture:a.capture,passive:a.passive,once:a.once}:a.capture)},3122(a,b,c){c.d(b,{R:()=>TemplateInstance});var d=c(66921),e=c(60560);/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ /** + * @module lit-html + */ /** + * An instance of a `Template` that can be attached to the DOM and updated + * with new values. + */ class TemplateInstance{constructor(a,b,c){this.__parts=[],this.template=a,this.processor=b,this.options=c}update(a){let b=0;for(let c of this.__parts)void 0!==c&&c.setValue(a[b]),b++;for(let d of this.__parts)void 0!==d&&d.commit()}_clone(){let a=d.eC?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),b=[],c=this.template.parts,f=document.createTreeWalker(a,133,null,!1),g=0,h=0,i,j=f.nextNode();for(;gTemplateResult}),c(66921);var d=c(60560);/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ /** + * @module lit-html + */ let e=` ${d.Jw} `;class TemplateResult{constructor(a,b,c,d){this.strings=a,this.values=b,this.type=c,this.processor=d}getHTML(){let a=this.strings.length-1,b="",c=!1;for(let f=0;f -1||c)&& -1===g.indexOf("-->",h+1);let i=d.W5.exec(g);null===i?b+=g+(c?e:d.N):b+=g.substr(0,i.index)+i[1]+i[2]+d.$E+i[3]+d.Jw}return b+this.strings[a]}getTemplateElement(){let a=document.createElement("template");return a.innerHTML=this.getHTML(),a}}},60560(a,b,c){c.d(b,{"$E":()=>g,IW:()=>j,Jw:()=>d,N:()=>e,W5:()=>k,YS:()=>Template,pC:()=>i});/* unused harmony export markerRegex */ /** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ /** + * An expression marker with embedded unique key to avoid collision with + * possible text in templates. + */ let d=`{{lit-${String(Math.random()).slice(2)}}}`,e=``,f=RegExp(`${d}|${e}`),g="$lit$";class Template{constructor(a,b){this.parts=[],this.element=b;let c=[],e=[],i=document.createTreeWalker(b.content,133,null,!1),l=0,m=-1,n=0,{strings:o,values:{length:p}}=a;for(;n0;){let v=o[n],w=k.exec(v)[2],x=w.toLowerCase()+g,y=q.getAttribute(x);q.removeAttribute(x);let z=y.split(f);this.parts.push({type:"attribute",index:m,name:w,strings:z}),n+=z.length-1}}"TEMPLATE"===q.tagName&&(e.push(q),i.currentNode=q.content)}else if(3===q.nodeType){let A=q.data;if(A.indexOf(d)>=0){let B=q.parentNode,C=A.split(f),D=C.length-1;for(let E=0;E{let c=a.length-b.length;return c>=0&&a.slice(c)===b},i=a=>-1!==a.index,j=()=>document.createComment(""),k=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/},36162(a,b,c){c.d(b,{"_l":()=>d._l,nt:()=>d.nt,IW:()=>i.IW,XM:()=>g.X,dy:()=>n,r4:()=>h.r4,sY:()=>m,V:()=>h.V});var d=c(28356);let e=new /** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ /** + * Creates Parts when a template is instantiated. + */ class DefaultTemplateProcessor{handleAttributeExpressions(a,b,c,e){let f=b[0];if("."===f){let g=new d.m(a,b.slice(1),c);return g.parts}if("@"===f)return[new d.K1(a,b.slice(1),e.eventContext)];if("?"===f)return[new d.JG(a,b.slice(1),c)];let h=new d.QG(a,b,c);return h.parts}handleTextExpression(a){return new d.nt(a)}};var f=c(89823),g=c(13695),h=c(66921);c(31301);var i=c(60560);/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ /** + * The default TemplateFactory which caches Templates keyed on + * result.type and result.strings. + */ function j(a){let b=k.get(a.type);void 0===b&&(b={stringsArray:new WeakMap,keyString:new Map},k.set(a.type,b));let c=b.stringsArray.get(a.strings);if(void 0!==c)return c;let d=a.strings.join(i.Jw);return void 0===(c=b.keyString.get(d))&&(c=new i.YS(a,a.getTemplateElement()),b.keyString.set(d,c)),b.stringsArray.set(a.strings,c),c}let k=new Map,l=new WeakMap,m=(a,b,c)=>{let e=l.get(b);void 0===e&&((0,h.r4)(b,b.firstChild),l.set(b,e=new d.nt(Object.assign({templateFactory:j},c))),e.appendInto(b)),e.setValue(a),e.commit()};c(3122),/** + * @license + * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at + * http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at + * http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at + * http://polymer.github.io/PATENTS.txt + */ /** + * + * Main lit-html module. + * + * Main exports: + * + * - [[html]] + * - [[svg]] + * - [[render]] + * + * @module lit-html + * @preferred + */ /** + * Do not remove this comment; it keeps typedoc from misplacing the module + * docs. + */ // TODO(justinfagnani): remove line when we get NodePart moving methods +// IMPORTANT: do not change the property name or the assignment expression. +// This line will be used in regexes to search for lit-html usage. +// TODO(justinfagnani): inject version number at build time +(window.litHtmlVersions||(window.litHtmlVersions=[])).push("1.1.2");let n=(a,...b)=>new f.j(a,b,"html",e)}}]) +//# sourceMappingURL=vendors-node_modules_lit-html_lit-html_js-4a94a393c1fd.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/A72C141DDF9EBE50C0854240751F542F9F6DD054 b/home/.surf/cache/WebKitCache/Version 16/Blobs/A72C141DDF9EBE50C0854240751F542F9F6DD054 new file mode 100644 index 0000000..c8a6381 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/A72C141DDF9EBE50C0854240751F542F9F6DD054 @@ -0,0 +1,3 @@ +:root,[data-color-mode=light][data-light-theme=light],[data-color-mode=dark][data-dark-theme=light]{/*! */}:root,[data-color-mode=light][data-light-theme=light],[data-color-mode=dark][data-dark-theme=light]{--color-canvas-default-transparent: rgba(255,255,255,0);--color-page-header-bg: #f6f8fa;--color-marketing-icon-primary: #218bff;--color-marketing-icon-secondary: #54aeff;--color-diff-blob-addition-num-text: #24292f;--color-diff-blob-addition-fg: #24292f;--color-diff-blob-addition-num-bg: #ccffd8;--color-diff-blob-addition-line-bg: #e6ffec;--color-diff-blob-addition-word-bg: #abf2bc;--color-diff-blob-deletion-num-text: #24292f;--color-diff-blob-deletion-fg: #24292f;--color-diff-blob-deletion-num-bg: #ffd7d5;--color-diff-blob-deletion-line-bg: #ffebe9;--color-diff-blob-deletion-word-bg: rgba(255,129,130,0.4);--color-diff-blob-hunk-num-bg: rgba(84,174,255,0.4);--color-diff-blob-expander-icon: #57606a;--color-diff-blob-selected-line-highlight-mix-blend-mode: multiply;--color-diffstat-deletion-border: rgba(27,31,36,0.15);--color-diffstat-addition-border: rgba(27,31,36,0.15);--color-diffstat-addition-bg: #2da44e;--color-search-keyword-hl: #fff8c5;--color-prettylights-syntax-comment: #6e7781;--color-prettylights-syntax-constant: #0550ae;--color-prettylights-syntax-entity: #8250df;--color-prettylights-syntax-storage-modifier-import: #24292f;--color-prettylights-syntax-entity-tag: #116329;--color-prettylights-syntax-keyword: #cf222e;--color-prettylights-syntax-string: #0a3069;--color-prettylights-syntax-variable: #953800;--color-prettylights-syntax-brackethighlighter-unmatched: #82071e;--color-prettylights-syntax-invalid-illegal-text: #f6f8fa;--color-prettylights-syntax-invalid-illegal-bg: #82071e;--color-prettylights-syntax-carriage-return-text: #f6f8fa;--color-prettylights-syntax-carriage-return-bg: #cf222e;--color-prettylights-syntax-string-regexp: #116329;--color-prettylights-syntax-markup-list: #3b2300;--color-prettylights-syntax-markup-heading: #0550ae;--color-prettylights-syntax-markup-italic: #24292f;--color-prettylights-syntax-markup-bold: #24292f;--color-prettylights-syntax-markup-deleted-text: #82071e;--color-prettylights-syntax-markup-deleted-bg: #ffebe9;--color-prettylights-syntax-markup-inserted-text: #116329;--color-prettylights-syntax-markup-inserted-bg: #dafbe1;--color-prettylights-syntax-markup-changed-text: #953800;--color-prettylights-syntax-markup-changed-bg: #ffd8b5;--color-prettylights-syntax-markup-ignored-text: #eaeef2;--color-prettylights-syntax-markup-ignored-bg: #0550ae;--color-prettylights-syntax-meta-diff-range: #8250df;--color-prettylights-syntax-brackethighlighter-angle: #57606a;--color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;--color-prettylights-syntax-constant-other-reference-link: #0a3069;--color-codemirror-text: #24292f;--color-codemirror-bg: #ffffff;--color-codemirror-gutters-bg: #ffffff;--color-codemirror-guttermarker-text: #ffffff;--color-codemirror-guttermarker-subtle-text: #6e7781;--color-codemirror-linenumber-text: #57606a;--color-codemirror-cursor: #24292f;--color-codemirror-selection-bg: rgba(84,174,255,0.4);--color-codemirror-activeline-bg: rgba(234,238,242,0.5);--color-codemirror-matchingbracket-text: #24292f;--color-codemirror-lines-bg: #ffffff;--color-codemirror-syntax-comment: #24292f;--color-codemirror-syntax-constant: #0550ae;--color-codemirror-syntax-entity: #8250df;--color-codemirror-syntax-keyword: #cf222e;--color-codemirror-syntax-storage: #cf222e;--color-codemirror-syntax-string: #0a3069;--color-codemirror-syntax-support: #0550ae;--color-codemirror-syntax-variable: #953800;--color-checks-bg: #24292f;--color-checks-run-border-width: 0px;--color-checks-container-border-width: 0px;--color-checks-text-primary: #f6f8fa;--color-checks-text-secondary: #8c959f;--color-checks-text-link: #54aeff;--color-checks-btn-icon: #afb8c1;--color-checks-btn-hover-icon: #f6f8fa;--color-checks-btn-hover-bg: rgba(255,255,255,0.125);--color-checks-input-text: #eaeef2;--color-checks-input-placeholder-text: #8c959f;--color-checks-input-focus-text: #8c959f;--color-checks-input-bg: #32383f;--color-checks-input-shadow: none;--color-checks-donut-error: #fa4549;--color-checks-donut-pending: #bf8700;--color-checks-donut-success: #2da44e;--color-checks-donut-neutral: #afb8c1;--color-checks-dropdown-text: #afb8c1;--color-checks-dropdown-bg: #32383f;--color-checks-dropdown-border: #424a53;--color-checks-dropdown-shadow: rgba(27,31,36,0.3);--color-checks-dropdown-hover-text: #f6f8fa;--color-checks-dropdown-hover-bg: #424a53;--color-checks-dropdown-btn-hover-text: #f6f8fa;--color-checks-dropdown-btn-hover-bg: #32383f;--color-checks-scrollbar-thumb-bg: #57606a;--color-checks-header-label-text: #d0d7de;--color-checks-header-label-open-text: #f6f8fa;--color-checks-header-border: #32383f;--color-checks-header-icon: #8c959f;--color-checks-line-text: #d0d7de;--color-checks-line-num-text: rgba(140,149,159,0.75);--color-checks-line-timestamp-text: #8c959f;--color-checks-line-hover-bg: #32383f;--color-checks-line-selected-bg: rgba(33,139,255,0.15);--color-checks-line-selected-num-text: #54aeff;--color-checks-line-dt-fm-text: #24292f;--color-checks-line-dt-fm-bg: #9a6700;--color-checks-gate-bg: rgba(125,78,0,0.15);--color-checks-gate-text: #d0d7de;--color-checks-gate-waiting-text: #d4a72c;--color-checks-step-header-open-bg: #32383f;--color-checks-step-error-text: #ff8182;--color-checks-step-warning-text: #d4a72c;--color-checks-logline-text: #8c959f;--color-checks-logline-num-text: rgba(140,149,159,0.75);--color-checks-logline-debug-text: #c297ff;--color-checks-logline-error-text: #d0d7de;--color-checks-logline-error-num-text: #ff8182;--color-checks-logline-error-bg: rgba(164,14,38,0.15);--color-checks-logline-warning-text: #d0d7de;--color-checks-logline-warning-num-text: #d4a72c;--color-checks-logline-warning-bg: rgba(125,78,0,0.15);--color-checks-logline-command-text: #54aeff;--color-checks-logline-section-text: #4ac26b;--color-checks-ansi-black: #24292f;--color-checks-ansi-black-bright: #32383f;--color-checks-ansi-white: #d0d7de;--color-checks-ansi-white-bright: #d0d7de;--color-checks-ansi-gray: #8c959f;--color-checks-ansi-red: #ff8182;--color-checks-ansi-red-bright: #ffaba8;--color-checks-ansi-green: #4ac26b;--color-checks-ansi-green-bright: #6fdd8b;--color-checks-ansi-yellow: #d4a72c;--color-checks-ansi-yellow-bright: #eac54f;--color-checks-ansi-blue: #54aeff;--color-checks-ansi-blue-bright: #80ccff;--color-checks-ansi-magenta: #c297ff;--color-checks-ansi-magenta-bright: #d8b9ff;--color-checks-ansi-cyan: #76e3ea;--color-checks-ansi-cyan-bright: #b3f0ff;--color-project-header-bg: #24292f;--color-project-sidebar-bg: #ffffff;--color-project-gradient-in: #ffffff;--color-project-gradient-out: rgba(255,255,255,0);--color-mktg-btn-bg: #1b1f23;--color-mktg-btn-shadow-outline: rgb(0 0 0 / 15%) 0 0 0 1px inset;--color-mktg-btn-shadow-focus: rgb(0 0 0 / 15%) 0 0 0 4px;--color-mktg-btn-shadow-hover: 0 3px 2px rgba(0, 0, 0, 0.07), 0 7px 5px rgba(0, 0, 0, 0.04), 0 12px 10px rgba(0, 0, 0, 0.03), 0 22px 18px rgba(0, 0, 0, 0.03), 0 42px 33px rgba(0, 0, 0, 0.02), 0 100px 80px rgba(0, 0, 0, 0.02);--color-mktg-btn-shadow-hover-muted: rgb(0 0 0 / 70%) 0 0 0 2px inset;--color-avatar-bg: #ffffff;--color-avatar-border: rgba(27,31,36,0.15);--color-avatar-stack-fade: #afb8c1;--color-avatar-stack-fade-more: #d0d7de;--color-avatar-child-shadow: -2px -2px 0 rgba(255,255,255,0.8);--color-topic-tag-border: rgba(0,0,0,0);--color-counter-border: rgba(0,0,0,0);--color-select-menu-backdrop-border: rgba(0,0,0,0);--color-select-menu-tap-highlight: rgba(175,184,193,0.5);--color-select-menu-tap-focus-bg: #b6e3ff;--color-overlay-shadow: 0 1px 3px rgba(27,31,36,0.12), 0 8px 24px rgba(66,74,83,0.12);--color-header-text: rgba(255,255,255,0.7);--color-header-bg: #24292f;--color-header-divider: #57606a;--color-header-logo: #ffffff;--color-header-search-bg: #24292f;--color-header-search-border: #57606a;--color-sidenav-selected-bg: #ffffff;--color-menu-bg-active: rgba(0,0,0,0);--color-input-disabled-bg: rgba(175,184,193,0.2);--color-timeline-badge-bg: #eaeef2;--color-ansi-black: #24292f;--color-ansi-black-bright: #57606a;--color-ansi-white: #6e7781;--color-ansi-white-bright: #8c959f;--color-ansi-gray: #6e7781;--color-ansi-red: #cf222e;--color-ansi-red-bright: #a40e26;--color-ansi-green: #116329;--color-ansi-green-bright: #1a7f37;--color-ansi-yellow: #4d2d00;--color-ansi-yellow-bright: #633c01;--color-ansi-blue: #0969da;--color-ansi-blue-bright: #218bff;--color-ansi-magenta: #8250df;--color-ansi-magenta-bright: #a475f9;--color-ansi-cyan: #1b7c83;--color-ansi-cyan-bright: #3192aa;--color-btn-text: #24292f;--color-btn-bg: #f6f8fa;--color-btn-border: rgba(27,31,36,0.15);--color-btn-shadow: 0 1px 0 rgba(27,31,36,0.04);--color-btn-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.25);--color-btn-hover-bg: #f3f4f6;--color-btn-hover-border: rgba(27,31,36,0.15);--color-btn-active-bg: hsla(220,14%,93%,1);--color-btn-active-border: rgba(27,31,36,0.15);--color-btn-selected-bg: hsla(220,14%,94%,1);--color-btn-focus-bg: #f6f8fa;--color-btn-focus-border: rgba(27,31,36,0.15);--color-btn-focus-shadow: 0 0 0 3px rgba(9,105,218,0.3);--color-btn-shadow-active: inset 0 0.15em 0.3em rgba(27,31,36,0.15);--color-btn-shadow-input-focus: 0 0 0 0.2em rgba(9,105,218,0.3);--color-btn-counter-bg: rgba(27,31,36,0.08);--color-btn-primary-text: #ffffff;--color-btn-primary-bg: #2da44e;--color-btn-primary-border: rgba(27,31,36,0.15);--color-btn-primary-shadow: 0 1px 0 rgba(27,31,36,0.1);--color-btn-primary-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-primary-hover-bg: #2c974b;--color-btn-primary-hover-border: rgba(27,31,36,0.15);--color-btn-primary-selected-bg: hsla(137,55%,36%,1);--color-btn-primary-selected-shadow: inset 0 1px 0 rgba(0,45,17,0.2);--color-btn-primary-disabled-text: rgba(255,255,255,0.8);--color-btn-primary-disabled-bg: #94d3a2;--color-btn-primary-disabled-border: rgba(27,31,36,0.15);--color-btn-primary-focus-bg: #2da44e;--color-btn-primary-focus-border: rgba(27,31,36,0.15);--color-btn-primary-focus-shadow: 0 0 0 3px rgba(45,164,78,0.4);--color-btn-primary-icon: rgba(255,255,255,0.8);--color-btn-primary-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-text: #0969da;--color-btn-outline-hover-text: #ffffff;--color-btn-outline-hover-bg: #0969da;--color-btn-outline-hover-border: rgba(27,31,36,0.15);--color-btn-outline-hover-shadow: 0 1px 0 rgba(27,31,36,0.1);--color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-outline-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-selected-text: #ffffff;--color-btn-outline-selected-bg: hsla(212,92%,42%,1);--color-btn-outline-selected-border: rgba(27,31,36,0.15);--color-btn-outline-selected-shadow: inset 0 1px 0 rgba(0,33,85,0.2);--color-btn-outline-disabled-text: rgba(9,105,218,0.5);--color-btn-outline-disabled-bg: #f6f8fa;--color-btn-outline-disabled-counter-bg: rgba(9,105,218,0.05);--color-btn-outline-focus-border: rgba(27,31,36,0.15);--color-btn-outline-focus-shadow: 0 0 0 3px rgba(5,80,174,0.4);--color-btn-outline-counter-bg: rgba(9,105,218,0.1);--color-btn-danger-text: #cf222e;--color-btn-danger-hover-text: #ffffff;--color-btn-danger-hover-bg: #a40e26;--color-btn-danger-hover-border: rgba(27,31,36,0.15);--color-btn-danger-hover-shadow: 0 1px 0 rgba(27,31,36,0.1);--color-btn-danger-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-danger-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-danger-selected-text: #ffffff;--color-btn-danger-selected-bg: hsla(356,72%,44%,1);--color-btn-danger-selected-border: rgba(27,31,36,0.15);--color-btn-danger-selected-shadow: inset 0 1px 0 rgba(76,0,20,0.2);--color-btn-danger-disabled-text: rgba(207,34,46,0.5);--color-btn-danger-disabled-bg: #f6f8fa;--color-btn-danger-disabled-counter-bg: rgba(207,34,46,0.05);--color-btn-danger-focus-border: rgba(27,31,36,0.15);--color-btn-danger-focus-shadow: 0 0 0 3px rgba(164,14,38,0.4);--color-btn-danger-counter-bg: rgba(207,34,46,0.1);--color-btn-danger-icon: #cf222e;--color-btn-danger-hover-icon: #ffffff;--color-underlinenav-icon: #6e7781;--color-underlinenav-border-hover: rgba(175,184,193,0.2);--color-action-list-item-inline-divider: rgba(208,215,222,0.48);--color-action-list-item-default-hover-bg: rgba(208,215,222,0.32);--color-action-list-item-default-hover-border: rgba(0,0,0,0);--color-action-list-item-default-active-bg: rgba(208,215,222,0.48);--color-action-list-item-default-active-border: rgba(0,0,0,0);--color-action-list-item-default-selected-bg: rgba(208,215,222,0.24);--color-action-list-item-danger-hover-bg: rgba(255,235,233,0.64);--color-action-list-item-danger-active-bg: #ffebe9;--color-action-list-item-danger-hover-text: #cf222e;--color-switch-track-bg: #eaeef2;--color-switch-track-border: #afb8c1;--color-switch-track-checked-bg: #ddf4ff;--color-switch-track-checked-hover-bg: #b6e3ff;--color-switch-track-checked-active-bg: #80ccff;--color-switch-track-checked-border: #54aeff;--color-switch-knob-checked-bg: #0969da;--color-switch-knob-checked-disabled-bg: #6e7781;--color-segmented-control-bg: #eaeef2;--color-segmented-control-button-hover-bg: rgba(175,184,193,0.2);--color-segmented-control-button-active-bg: rgba(175,184,193,0.4);--color-segmented-control-button-selected-border: #6e7781;--color-tree-view-item-chevron-hover-bg: rgba(208,215,222,0.32);--color-tree-view-item-directory-fill: #54aeff;--color-fg-default: #24292f;--color-fg-muted: #57606a;--color-fg-subtle: #6e7781;--color-fg-on-emphasis: #ffffff;--color-canvas-default: #ffffff;--color-canvas-overlay: #ffffff;--color-canvas-inset: #f6f8fa;--color-canvas-subtle: #f6f8fa;--color-border-default: #d0d7de;--color-border-muted: hsla(210,18%,87%,1);--color-border-subtle: rgba(27,31,36,0.15);--color-shadow-small: 0 1px 0 rgba(27,31,36,0.04);--color-shadow-medium: 0 3px 6px rgba(140,149,159,0.15);--color-shadow-large: 0 8px 24px rgba(140,149,159,0.2);--color-shadow-extra-large: 0 12px 28px rgba(140,149,159,0.3);--color-neutral-emphasis-plus: #24292f;--color-neutral-emphasis: #6e7781;--color-neutral-muted: rgba(175,184,193,0.2);--color-neutral-subtle: rgba(234,238,242,0.5);--color-accent-fg: #0969da;--color-accent-emphasis: #0969da;--color-accent-muted: rgba(84,174,255,0.4);--color-accent-subtle: #ddf4ff;--color-success-fg: #1a7f37;--color-success-emphasis: #2da44e;--color-success-muted: rgba(74,194,107,0.4);--color-success-subtle: #dafbe1;--color-attention-fg: #9a6700;--color-attention-emphasis: #bf8700;--color-attention-muted: rgba(212,167,44,0.4);--color-attention-subtle: #fff8c5;--color-severe-fg: #bc4c00;--color-severe-emphasis: #bc4c00;--color-severe-muted: rgba(251,143,68,0.4);--color-severe-subtle: #fff1e5;--color-danger-fg: #cf222e;--color-danger-emphasis: #cf222e;--color-danger-muted: rgba(255,129,130,0.4);--color-danger-subtle: #ffebe9;--color-open-fg: #1a7f37;--color-open-emphasis: #2da44e;--color-open-muted: rgba(74,194,107,0.4);--color-open-subtle: #dafbe1;--color-closed-fg: #cf222e;--color-closed-emphasis: #cf222e;--color-closed-muted: rgba(255,129,130,0.4);--color-closed-subtle: #ffebe9;--color-done-fg: #8250df;--color-done-emphasis: #8250df;--color-done-muted: rgba(194,151,255,0.4);--color-done-subtle: #fbefff;--color-sponsors-fg: #bf3989;--color-sponsors-emphasis: #bf3989;--color-sponsors-muted: rgba(255,128,200,0.4);--color-sponsors-subtle: #ffeff7;--color-primer-fg-disabled: #8c959f;--color-primer-canvas-backdrop: rgba(27,31,36,0.5);--color-primer-canvas-sticky: rgba(255,255,255,0.95);--color-primer-border-active: #fd8c73;--color-primer-border-contrast: rgba(27,31,36,0.1);--color-primer-shadow-highlight: inset 0 1px 0 rgba(255,255,255,0.25);--color-primer-shadow-inset: inset 0 1px 0 rgba(208,215,222,0.2);--color-primer-shadow-focus: 0 0 0 3px rgba(9,105,218,0.3);--color-scale-black: #1b1f24;--color-scale-white: #ffffff;--color-scale-gray-0: #f6f8fa;--color-scale-gray-1: #eaeef2;--color-scale-gray-2: #d0d7de;--color-scale-gray-3: #afb8c1;--color-scale-gray-4: #8c959f;--color-scale-gray-5: #6e7781;--color-scale-gray-6: #57606a;--color-scale-gray-7: #424a53;--color-scale-gray-8: #32383f;--color-scale-gray-9: #24292f;--color-scale-blue-0: #ddf4ff;--color-scale-blue-1: #b6e3ff;--color-scale-blue-2: #80ccff;--color-scale-blue-3: #54aeff;--color-scale-blue-4: #218bff;--color-scale-blue-5: #0969da;--color-scale-blue-6: #0550ae;--color-scale-blue-7: #033d8b;--color-scale-blue-8: #0a3069;--color-scale-blue-9: #002155;--color-scale-green-0: #dafbe1;--color-scale-green-1: #aceebb;--color-scale-green-2: #6fdd8b;--color-scale-green-3: #4ac26b;--color-scale-green-4: #2da44e;--color-scale-green-5: #1a7f37;--color-scale-green-6: #116329;--color-scale-green-7: #044f1e;--color-scale-green-8: #003d16;--color-scale-green-9: #002d11;--color-scale-yellow-0: #fff8c5;--color-scale-yellow-1: #fae17d;--color-scale-yellow-2: #eac54f;--color-scale-yellow-3: #d4a72c;--color-scale-yellow-4: #bf8700;--color-scale-yellow-5: #9a6700;--color-scale-yellow-6: #7d4e00;--color-scale-yellow-7: #633c01;--color-scale-yellow-8: #4d2d00;--color-scale-yellow-9: #3b2300;--color-scale-orange-0: #fff1e5;--color-scale-orange-1: #ffd8b5;--color-scale-orange-2: #ffb77c;--color-scale-orange-3: #fb8f44;--color-scale-orange-4: #e16f24;--color-scale-orange-5: #bc4c00;--color-scale-orange-6: #953800;--color-scale-orange-7: #762c00;--color-scale-orange-8: #5c2200;--color-scale-orange-9: #471700;--color-scale-red-0: #ffebe9;--color-scale-red-1: #ffcecb;--color-scale-red-2: #ffaba8;--color-scale-red-3: #ff8182;--color-scale-red-4: #fa4549;--color-scale-red-5: #cf222e;--color-scale-red-6: #a40e26;--color-scale-red-7: #82071e;--color-scale-red-8: #660018;--color-scale-red-9: #4c0014;--color-scale-purple-0: #fbefff;--color-scale-purple-1: #ecd8ff;--color-scale-purple-2: #d8b9ff;--color-scale-purple-3: #c297ff;--color-scale-purple-4: #a475f9;--color-scale-purple-5: #8250df;--color-scale-purple-6: #6639ba;--color-scale-purple-7: #512a97;--color-scale-purple-8: #3e1f79;--color-scale-purple-9: #2e1461;--color-scale-pink-0: #ffeff7;--color-scale-pink-1: #ffd3eb;--color-scale-pink-2: #ffadda;--color-scale-pink-3: #ff80c8;--color-scale-pink-4: #e85aad;--color-scale-pink-5: #bf3989;--color-scale-pink-6: #99286e;--color-scale-pink-7: #772057;--color-scale-pink-8: #611347;--color-scale-pink-9: #4d0336;--color-scale-coral-0: #fff0eb;--color-scale-coral-1: #ffd6cc;--color-scale-coral-2: #ffb4a1;--color-scale-coral-3: #fd8c73;--color-scale-coral-4: #ec6547;--color-scale-coral-5: #c4432b;--color-scale-coral-6: #9e2f1c;--color-scale-coral-7: #801f0f;--color-scale-coral-8: #691105;--color-scale-coral-9: #510901}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme=light]{--color-canvas-default-transparent: rgba(255,255,255,0);--color-page-header-bg: #f6f8fa;--color-marketing-icon-primary: #218bff;--color-marketing-icon-secondary: #54aeff;--color-diff-blob-addition-num-text: #24292f;--color-diff-blob-addition-fg: #24292f;--color-diff-blob-addition-num-bg: #ccffd8;--color-diff-blob-addition-line-bg: #e6ffec;--color-diff-blob-addition-word-bg: #abf2bc;--color-diff-blob-deletion-num-text: #24292f;--color-diff-blob-deletion-fg: #24292f;--color-diff-blob-deletion-num-bg: #ffd7d5;--color-diff-blob-deletion-line-bg: #ffebe9;--color-diff-blob-deletion-word-bg: rgba(255,129,130,0.4);--color-diff-blob-hunk-num-bg: rgba(84,174,255,0.4);--color-diff-blob-expander-icon: #57606a;--color-diff-blob-selected-line-highlight-mix-blend-mode: multiply;--color-diffstat-deletion-border: rgba(27,31,36,0.15);--color-diffstat-addition-border: rgba(27,31,36,0.15);--color-diffstat-addition-bg: #2da44e;--color-search-keyword-hl: #fff8c5;--color-prettylights-syntax-comment: #6e7781;--color-prettylights-syntax-constant: #0550ae;--color-prettylights-syntax-entity: #8250df;--color-prettylights-syntax-storage-modifier-import: #24292f;--color-prettylights-syntax-entity-tag: #116329;--color-prettylights-syntax-keyword: #cf222e;--color-prettylights-syntax-string: #0a3069;--color-prettylights-syntax-variable: #953800;--color-prettylights-syntax-brackethighlighter-unmatched: #82071e;--color-prettylights-syntax-invalid-illegal-text: #f6f8fa;--color-prettylights-syntax-invalid-illegal-bg: #82071e;--color-prettylights-syntax-carriage-return-text: #f6f8fa;--color-prettylights-syntax-carriage-return-bg: #cf222e;--color-prettylights-syntax-string-regexp: #116329;--color-prettylights-syntax-markup-list: #3b2300;--color-prettylights-syntax-markup-heading: #0550ae;--color-prettylights-syntax-markup-italic: #24292f;--color-prettylights-syntax-markup-bold: #24292f;--color-prettylights-syntax-markup-deleted-text: #82071e;--color-prettylights-syntax-markup-deleted-bg: #ffebe9;--color-prettylights-syntax-markup-inserted-text: #116329;--color-prettylights-syntax-markup-inserted-bg: #dafbe1;--color-prettylights-syntax-markup-changed-text: #953800;--color-prettylights-syntax-markup-changed-bg: #ffd8b5;--color-prettylights-syntax-markup-ignored-text: #eaeef2;--color-prettylights-syntax-markup-ignored-bg: #0550ae;--color-prettylights-syntax-meta-diff-range: #8250df;--color-prettylights-syntax-brackethighlighter-angle: #57606a;--color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;--color-prettylights-syntax-constant-other-reference-link: #0a3069;--color-codemirror-text: #24292f;--color-codemirror-bg: #ffffff;--color-codemirror-gutters-bg: #ffffff;--color-codemirror-guttermarker-text: #ffffff;--color-codemirror-guttermarker-subtle-text: #6e7781;--color-codemirror-linenumber-text: #57606a;--color-codemirror-cursor: #24292f;--color-codemirror-selection-bg: rgba(84,174,255,0.4);--color-codemirror-activeline-bg: rgba(234,238,242,0.5);--color-codemirror-matchingbracket-text: #24292f;--color-codemirror-lines-bg: #ffffff;--color-codemirror-syntax-comment: #24292f;--color-codemirror-syntax-constant: #0550ae;--color-codemirror-syntax-entity: #8250df;--color-codemirror-syntax-keyword: #cf222e;--color-codemirror-syntax-storage: #cf222e;--color-codemirror-syntax-string: #0a3069;--color-codemirror-syntax-support: #0550ae;--color-codemirror-syntax-variable: #953800;--color-checks-bg: #24292f;--color-checks-run-border-width: 0px;--color-checks-container-border-width: 0px;--color-checks-text-primary: #f6f8fa;--color-checks-text-secondary: #8c959f;--color-checks-text-link: #54aeff;--color-checks-btn-icon: #afb8c1;--color-checks-btn-hover-icon: #f6f8fa;--color-checks-btn-hover-bg: rgba(255,255,255,0.125);--color-checks-input-text: #eaeef2;--color-checks-input-placeholder-text: #8c959f;--color-checks-input-focus-text: #8c959f;--color-checks-input-bg: #32383f;--color-checks-input-shadow: none;--color-checks-donut-error: #fa4549;--color-checks-donut-pending: #bf8700;--color-checks-donut-success: #2da44e;--color-checks-donut-neutral: #afb8c1;--color-checks-dropdown-text: #afb8c1;--color-checks-dropdown-bg: #32383f;--color-checks-dropdown-border: #424a53;--color-checks-dropdown-shadow: rgba(27,31,36,0.3);--color-checks-dropdown-hover-text: #f6f8fa;--color-checks-dropdown-hover-bg: #424a53;--color-checks-dropdown-btn-hover-text: #f6f8fa;--color-checks-dropdown-btn-hover-bg: #32383f;--color-checks-scrollbar-thumb-bg: #57606a;--color-checks-header-label-text: #d0d7de;--color-checks-header-label-open-text: #f6f8fa;--color-checks-header-border: #32383f;--color-checks-header-icon: #8c959f;--color-checks-line-text: #d0d7de;--color-checks-line-num-text: rgba(140,149,159,0.75);--color-checks-line-timestamp-text: #8c959f;--color-checks-line-hover-bg: #32383f;--color-checks-line-selected-bg: rgba(33,139,255,0.15);--color-checks-line-selected-num-text: #54aeff;--color-checks-line-dt-fm-text: #24292f;--color-checks-line-dt-fm-bg: #9a6700;--color-checks-gate-bg: rgba(125,78,0,0.15);--color-checks-gate-text: #d0d7de;--color-checks-gate-waiting-text: #d4a72c;--color-checks-step-header-open-bg: #32383f;--color-checks-step-error-text: #ff8182;--color-checks-step-warning-text: #d4a72c;--color-checks-logline-text: #8c959f;--color-checks-logline-num-text: rgba(140,149,159,0.75);--color-checks-logline-debug-text: #c297ff;--color-checks-logline-error-text: #d0d7de;--color-checks-logline-error-num-text: #ff8182;--color-checks-logline-error-bg: rgba(164,14,38,0.15);--color-checks-logline-warning-text: #d0d7de;--color-checks-logline-warning-num-text: #d4a72c;--color-checks-logline-warning-bg: rgba(125,78,0,0.15);--color-checks-logline-command-text: #54aeff;--color-checks-logline-section-text: #4ac26b;--color-checks-ansi-black: #24292f;--color-checks-ansi-black-bright: #32383f;--color-checks-ansi-white: #d0d7de;--color-checks-ansi-white-bright: #d0d7de;--color-checks-ansi-gray: #8c959f;--color-checks-ansi-red: #ff8182;--color-checks-ansi-red-bright: #ffaba8;--color-checks-ansi-green: #4ac26b;--color-checks-ansi-green-bright: #6fdd8b;--color-checks-ansi-yellow: #d4a72c;--color-checks-ansi-yellow-bright: #eac54f;--color-checks-ansi-blue: #54aeff;--color-checks-ansi-blue-bright: #80ccff;--color-checks-ansi-magenta: #c297ff;--color-checks-ansi-magenta-bright: #d8b9ff;--color-checks-ansi-cyan: #76e3ea;--color-checks-ansi-cyan-bright: #b3f0ff;--color-project-header-bg: #24292f;--color-project-sidebar-bg: #ffffff;--color-project-gradient-in: #ffffff;--color-project-gradient-out: rgba(255,255,255,0);--color-mktg-btn-bg: #1b1f23;--color-mktg-btn-shadow-outline: rgb(0 0 0 / 15%) 0 0 0 1px inset;--color-mktg-btn-shadow-focus: rgb(0 0 0 / 15%) 0 0 0 4px;--color-mktg-btn-shadow-hover: 0 3px 2px rgba(0, 0, 0, 0.07), 0 7px 5px rgba(0, 0, 0, 0.04), 0 12px 10px rgba(0, 0, 0, 0.03), 0 22px 18px rgba(0, 0, 0, 0.03), 0 42px 33px rgba(0, 0, 0, 0.02), 0 100px 80px rgba(0, 0, 0, 0.02);--color-mktg-btn-shadow-hover-muted: rgb(0 0 0 / 70%) 0 0 0 2px inset;--color-avatar-bg: #ffffff;--color-avatar-border: rgba(27,31,36,0.15);--color-avatar-stack-fade: #afb8c1;--color-avatar-stack-fade-more: #d0d7de;--color-avatar-child-shadow: -2px -2px 0 rgba(255,255,255,0.8);--color-topic-tag-border: rgba(0,0,0,0);--color-counter-border: rgba(0,0,0,0);--color-select-menu-backdrop-border: rgba(0,0,0,0);--color-select-menu-tap-highlight: rgba(175,184,193,0.5);--color-select-menu-tap-focus-bg: #b6e3ff;--color-overlay-shadow: 0 1px 3px rgba(27,31,36,0.12), 0 8px 24px rgba(66,74,83,0.12);--color-header-text: rgba(255,255,255,0.7);--color-header-bg: #24292f;--color-header-divider: #57606a;--color-header-logo: #ffffff;--color-header-search-bg: #24292f;--color-header-search-border: #57606a;--color-sidenav-selected-bg: #ffffff;--color-menu-bg-active: rgba(0,0,0,0);--color-input-disabled-bg: rgba(175,184,193,0.2);--color-timeline-badge-bg: #eaeef2;--color-ansi-black: #24292f;--color-ansi-black-bright: #57606a;--color-ansi-white: #6e7781;--color-ansi-white-bright: #8c959f;--color-ansi-gray: #6e7781;--color-ansi-red: #cf222e;--color-ansi-red-bright: #a40e26;--color-ansi-green: #116329;--color-ansi-green-bright: #1a7f37;--color-ansi-yellow: #4d2d00;--color-ansi-yellow-bright: #633c01;--color-ansi-blue: #0969da;--color-ansi-blue-bright: #218bff;--color-ansi-magenta: #8250df;--color-ansi-magenta-bright: #a475f9;--color-ansi-cyan: #1b7c83;--color-ansi-cyan-bright: #3192aa;--color-btn-text: #24292f;--color-btn-bg: #f6f8fa;--color-btn-border: rgba(27,31,36,0.15);--color-btn-shadow: 0 1px 0 rgba(27,31,36,0.04);--color-btn-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.25);--color-btn-hover-bg: #f3f4f6;--color-btn-hover-border: rgba(27,31,36,0.15);--color-btn-active-bg: hsla(220,14%,93%,1);--color-btn-active-border: rgba(27,31,36,0.15);--color-btn-selected-bg: hsla(220,14%,94%,1);--color-btn-focus-bg: #f6f8fa;--color-btn-focus-border: rgba(27,31,36,0.15);--color-btn-focus-shadow: 0 0 0 3px rgba(9,105,218,0.3);--color-btn-shadow-active: inset 0 0.15em 0.3em rgba(27,31,36,0.15);--color-btn-shadow-input-focus: 0 0 0 0.2em rgba(9,105,218,0.3);--color-btn-counter-bg: rgba(27,31,36,0.08);--color-btn-primary-text: #ffffff;--color-btn-primary-bg: #2da44e;--color-btn-primary-border: rgba(27,31,36,0.15);--color-btn-primary-shadow: 0 1px 0 rgba(27,31,36,0.1);--color-btn-primary-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-primary-hover-bg: #2c974b;--color-btn-primary-hover-border: rgba(27,31,36,0.15);--color-btn-primary-selected-bg: hsla(137,55%,36%,1);--color-btn-primary-selected-shadow: inset 0 1px 0 rgba(0,45,17,0.2);--color-btn-primary-disabled-text: rgba(255,255,255,0.8);--color-btn-primary-disabled-bg: #94d3a2;--color-btn-primary-disabled-border: rgba(27,31,36,0.15);--color-btn-primary-focus-bg: #2da44e;--color-btn-primary-focus-border: rgba(27,31,36,0.15);--color-btn-primary-focus-shadow: 0 0 0 3px rgba(45,164,78,0.4);--color-btn-primary-icon: rgba(255,255,255,0.8);--color-btn-primary-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-text: #0969da;--color-btn-outline-hover-text: #ffffff;--color-btn-outline-hover-bg: #0969da;--color-btn-outline-hover-border: rgba(27,31,36,0.15);--color-btn-outline-hover-shadow: 0 1px 0 rgba(27,31,36,0.1);--color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-outline-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-selected-text: #ffffff;--color-btn-outline-selected-bg: hsla(212,92%,42%,1);--color-btn-outline-selected-border: rgba(27,31,36,0.15);--color-btn-outline-selected-shadow: inset 0 1px 0 rgba(0,33,85,0.2);--color-btn-outline-disabled-text: rgba(9,105,218,0.5);--color-btn-outline-disabled-bg: #f6f8fa;--color-btn-outline-disabled-counter-bg: rgba(9,105,218,0.05);--color-btn-outline-focus-border: rgba(27,31,36,0.15);--color-btn-outline-focus-shadow: 0 0 0 3px rgba(5,80,174,0.4);--color-btn-outline-counter-bg: rgba(9,105,218,0.1);--color-btn-danger-text: #cf222e;--color-btn-danger-hover-text: #ffffff;--color-btn-danger-hover-bg: #a40e26;--color-btn-danger-hover-border: rgba(27,31,36,0.15);--color-btn-danger-hover-shadow: 0 1px 0 rgba(27,31,36,0.1);--color-btn-danger-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-danger-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-danger-selected-text: #ffffff;--color-btn-danger-selected-bg: hsla(356,72%,44%,1);--color-btn-danger-selected-border: rgba(27,31,36,0.15);--color-btn-danger-selected-shadow: inset 0 1px 0 rgba(76,0,20,0.2);--color-btn-danger-disabled-text: rgba(207,34,46,0.5);--color-btn-danger-disabled-bg: #f6f8fa;--color-btn-danger-disabled-counter-bg: rgba(207,34,46,0.05);--color-btn-danger-focus-border: rgba(27,31,36,0.15);--color-btn-danger-focus-shadow: 0 0 0 3px rgba(164,14,38,0.4);--color-btn-danger-counter-bg: rgba(207,34,46,0.1);--color-btn-danger-icon: #cf222e;--color-btn-danger-hover-icon: #ffffff;--color-underlinenav-icon: #6e7781;--color-underlinenav-border-hover: rgba(175,184,193,0.2);--color-action-list-item-inline-divider: rgba(208,215,222,0.48);--color-action-list-item-default-hover-bg: rgba(208,215,222,0.32);--color-action-list-item-default-hover-border: rgba(0,0,0,0);--color-action-list-item-default-active-bg: rgba(208,215,222,0.48);--color-action-list-item-default-active-border: rgba(0,0,0,0);--color-action-list-item-default-selected-bg: rgba(208,215,222,0.24);--color-action-list-item-danger-hover-bg: rgba(255,235,233,0.64);--color-action-list-item-danger-active-bg: #ffebe9;--color-action-list-item-danger-hover-text: #cf222e;--color-switch-track-bg: #eaeef2;--color-switch-track-border: #afb8c1;--color-switch-track-checked-bg: #ddf4ff;--color-switch-track-checked-hover-bg: #b6e3ff;--color-switch-track-checked-active-bg: #80ccff;--color-switch-track-checked-border: #54aeff;--color-switch-knob-checked-bg: #0969da;--color-switch-knob-checked-disabled-bg: #6e7781;--color-segmented-control-bg: #eaeef2;--color-segmented-control-button-hover-bg: rgba(175,184,193,0.2);--color-segmented-control-button-active-bg: rgba(175,184,193,0.4);--color-segmented-control-button-selected-border: #6e7781;--color-tree-view-item-chevron-hover-bg: rgba(208,215,222,0.32);--color-tree-view-item-directory-fill: #54aeff;--color-fg-default: #24292f;--color-fg-muted: #57606a;--color-fg-subtle: #6e7781;--color-fg-on-emphasis: #ffffff;--color-canvas-default: #ffffff;--color-canvas-overlay: #ffffff;--color-canvas-inset: #f6f8fa;--color-canvas-subtle: #f6f8fa;--color-border-default: #d0d7de;--color-border-muted: hsla(210,18%,87%,1);--color-border-subtle: rgba(27,31,36,0.15);--color-shadow-small: 0 1px 0 rgba(27,31,36,0.04);--color-shadow-medium: 0 3px 6px rgba(140,149,159,0.15);--color-shadow-large: 0 8px 24px rgba(140,149,159,0.2);--color-shadow-extra-large: 0 12px 28px rgba(140,149,159,0.3);--color-neutral-emphasis-plus: #24292f;--color-neutral-emphasis: #6e7781;--color-neutral-muted: rgba(175,184,193,0.2);--color-neutral-subtle: rgba(234,238,242,0.5);--color-accent-fg: #0969da;--color-accent-emphasis: #0969da;--color-accent-muted: rgba(84,174,255,0.4);--color-accent-subtle: #ddf4ff;--color-success-fg: #1a7f37;--color-success-emphasis: #2da44e;--color-success-muted: rgba(74,194,107,0.4);--color-success-subtle: #dafbe1;--color-attention-fg: #9a6700;--color-attention-emphasis: #bf8700;--color-attention-muted: rgba(212,167,44,0.4);--color-attention-subtle: #fff8c5;--color-severe-fg: #bc4c00;--color-severe-emphasis: #bc4c00;--color-severe-muted: rgba(251,143,68,0.4);--color-severe-subtle: #fff1e5;--color-danger-fg: #cf222e;--color-danger-emphasis: #cf222e;--color-danger-muted: rgba(255,129,130,0.4);--color-danger-subtle: #ffebe9;--color-open-fg: #1a7f37;--color-open-emphasis: #2da44e;--color-open-muted: rgba(74,194,107,0.4);--color-open-subtle: #dafbe1;--color-closed-fg: #cf222e;--color-closed-emphasis: #cf222e;--color-closed-muted: rgba(255,129,130,0.4);--color-closed-subtle: #ffebe9;--color-done-fg: #8250df;--color-done-emphasis: #8250df;--color-done-muted: rgba(194,151,255,0.4);--color-done-subtle: #fbefff;--color-sponsors-fg: #bf3989;--color-sponsors-emphasis: #bf3989;--color-sponsors-muted: rgba(255,128,200,0.4);--color-sponsors-subtle: #ffeff7;--color-primer-fg-disabled: #8c959f;--color-primer-canvas-backdrop: rgba(27,31,36,0.5);--color-primer-canvas-sticky: rgba(255,255,255,0.95);--color-primer-border-active: #fd8c73;--color-primer-border-contrast: rgba(27,31,36,0.1);--color-primer-shadow-highlight: inset 0 1px 0 rgba(255,255,255,0.25);--color-primer-shadow-inset: inset 0 1px 0 rgba(208,215,222,0.2);--color-primer-shadow-focus: 0 0 0 3px rgba(9,105,218,0.3);--color-scale-black: #1b1f24;--color-scale-white: #ffffff;--color-scale-gray-0: #f6f8fa;--color-scale-gray-1: #eaeef2;--color-scale-gray-2: #d0d7de;--color-scale-gray-3: #afb8c1;--color-scale-gray-4: #8c959f;--color-scale-gray-5: #6e7781;--color-scale-gray-6: #57606a;--color-scale-gray-7: #424a53;--color-scale-gray-8: #32383f;--color-scale-gray-9: #24292f;--color-scale-blue-0: #ddf4ff;--color-scale-blue-1: #b6e3ff;--color-scale-blue-2: #80ccff;--color-scale-blue-3: #54aeff;--color-scale-blue-4: #218bff;--color-scale-blue-5: #0969da;--color-scale-blue-6: #0550ae;--color-scale-blue-7: #033d8b;--color-scale-blue-8: #0a3069;--color-scale-blue-9: #002155;--color-scale-green-0: #dafbe1;--color-scale-green-1: #aceebb;--color-scale-green-2: #6fdd8b;--color-scale-green-3: #4ac26b;--color-scale-green-4: #2da44e;--color-scale-green-5: #1a7f37;--color-scale-green-6: #116329;--color-scale-green-7: #044f1e;--color-scale-green-8: #003d16;--color-scale-green-9: #002d11;--color-scale-yellow-0: #fff8c5;--color-scale-yellow-1: #fae17d;--color-scale-yellow-2: #eac54f;--color-scale-yellow-3: #d4a72c;--color-scale-yellow-4: #bf8700;--color-scale-yellow-5: #9a6700;--color-scale-yellow-6: #7d4e00;--color-scale-yellow-7: #633c01;--color-scale-yellow-8: #4d2d00;--color-scale-yellow-9: #3b2300;--color-scale-orange-0: #fff1e5;--color-scale-orange-1: #ffd8b5;--color-scale-orange-2: #ffb77c;--color-scale-orange-3: #fb8f44;--color-scale-orange-4: #e16f24;--color-scale-orange-5: #bc4c00;--color-scale-orange-6: #953800;--color-scale-orange-7: #762c00;--color-scale-orange-8: #5c2200;--color-scale-orange-9: #471700;--color-scale-red-0: #ffebe9;--color-scale-red-1: #ffcecb;--color-scale-red-2: #ffaba8;--color-scale-red-3: #ff8182;--color-scale-red-4: #fa4549;--color-scale-red-5: #cf222e;--color-scale-red-6: #a40e26;--color-scale-red-7: #82071e;--color-scale-red-8: #660018;--color-scale-red-9: #4c0014;--color-scale-purple-0: #fbefff;--color-scale-purple-1: #ecd8ff;--color-scale-purple-2: #d8b9ff;--color-scale-purple-3: #c297ff;--color-scale-purple-4: #a475f9;--color-scale-purple-5: #8250df;--color-scale-purple-6: #6639ba;--color-scale-purple-7: #512a97;--color-scale-purple-8: #3e1f79;--color-scale-purple-9: #2e1461;--color-scale-pink-0: #ffeff7;--color-scale-pink-1: #ffd3eb;--color-scale-pink-2: #ffadda;--color-scale-pink-3: #ff80c8;--color-scale-pink-4: #e85aad;--color-scale-pink-5: #bf3989;--color-scale-pink-6: #99286e;--color-scale-pink-7: #772057;--color-scale-pink-8: #611347;--color-scale-pink-9: #4d0336;--color-scale-coral-0: #fff0eb;--color-scale-coral-1: #ffd6cc;--color-scale-coral-2: #ffb4a1;--color-scale-coral-3: #fd8c73;--color-scale-coral-4: #ec6547;--color-scale-coral-5: #c4432b;--color-scale-coral-6: #9e2f1c;--color-scale-coral-7: #801f0f;--color-scale-coral-8: #691105;--color-scale-coral-9: #510901}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme=light]{--color-canvas-default-transparent: rgba(255,255,255,0);--color-page-header-bg: #f6f8fa;--color-marketing-icon-primary: #218bff;--color-marketing-icon-secondary: #54aeff;--color-diff-blob-addition-num-text: #24292f;--color-diff-blob-addition-fg: #24292f;--color-diff-blob-addition-num-bg: #ccffd8;--color-diff-blob-addition-line-bg: #e6ffec;--color-diff-blob-addition-word-bg: #abf2bc;--color-diff-blob-deletion-num-text: #24292f;--color-diff-blob-deletion-fg: #24292f;--color-diff-blob-deletion-num-bg: #ffd7d5;--color-diff-blob-deletion-line-bg: #ffebe9;--color-diff-blob-deletion-word-bg: rgba(255,129,130,0.4);--color-diff-blob-hunk-num-bg: rgba(84,174,255,0.4);--color-diff-blob-expander-icon: #57606a;--color-diff-blob-selected-line-highlight-mix-blend-mode: multiply;--color-diffstat-deletion-border: rgba(27,31,36,0.15);--color-diffstat-addition-border: rgba(27,31,36,0.15);--color-diffstat-addition-bg: #2da44e;--color-search-keyword-hl: #fff8c5;--color-prettylights-syntax-comment: #6e7781;--color-prettylights-syntax-constant: #0550ae;--color-prettylights-syntax-entity: #8250df;--color-prettylights-syntax-storage-modifier-import: #24292f;--color-prettylights-syntax-entity-tag: #116329;--color-prettylights-syntax-keyword: #cf222e;--color-prettylights-syntax-string: #0a3069;--color-prettylights-syntax-variable: #953800;--color-prettylights-syntax-brackethighlighter-unmatched: #82071e;--color-prettylights-syntax-invalid-illegal-text: #f6f8fa;--color-prettylights-syntax-invalid-illegal-bg: #82071e;--color-prettylights-syntax-carriage-return-text: #f6f8fa;--color-prettylights-syntax-carriage-return-bg: #cf222e;--color-prettylights-syntax-string-regexp: #116329;--color-prettylights-syntax-markup-list: #3b2300;--color-prettylights-syntax-markup-heading: #0550ae;--color-prettylights-syntax-markup-italic: #24292f;--color-prettylights-syntax-markup-bold: #24292f;--color-prettylights-syntax-markup-deleted-text: #82071e;--color-prettylights-syntax-markup-deleted-bg: #ffebe9;--color-prettylights-syntax-markup-inserted-text: #116329;--color-prettylights-syntax-markup-inserted-bg: #dafbe1;--color-prettylights-syntax-markup-changed-text: #953800;--color-prettylights-syntax-markup-changed-bg: #ffd8b5;--color-prettylights-syntax-markup-ignored-text: #eaeef2;--color-prettylights-syntax-markup-ignored-bg: #0550ae;--color-prettylights-syntax-meta-diff-range: #8250df;--color-prettylights-syntax-brackethighlighter-angle: #57606a;--color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;--color-prettylights-syntax-constant-other-reference-link: #0a3069;--color-codemirror-text: #24292f;--color-codemirror-bg: #ffffff;--color-codemirror-gutters-bg: #ffffff;--color-codemirror-guttermarker-text: #ffffff;--color-codemirror-guttermarker-subtle-text: #6e7781;--color-codemirror-linenumber-text: #57606a;--color-codemirror-cursor: #24292f;--color-codemirror-selection-bg: rgba(84,174,255,0.4);--color-codemirror-activeline-bg: rgba(234,238,242,0.5);--color-codemirror-matchingbracket-text: #24292f;--color-codemirror-lines-bg: #ffffff;--color-codemirror-syntax-comment: #24292f;--color-codemirror-syntax-constant: #0550ae;--color-codemirror-syntax-entity: #8250df;--color-codemirror-syntax-keyword: #cf222e;--color-codemirror-syntax-storage: #cf222e;--color-codemirror-syntax-string: #0a3069;--color-codemirror-syntax-support: #0550ae;--color-codemirror-syntax-variable: #953800;--color-checks-bg: #24292f;--color-checks-run-border-width: 0px;--color-checks-container-border-width: 0px;--color-checks-text-primary: #f6f8fa;--color-checks-text-secondary: #8c959f;--color-checks-text-link: #54aeff;--color-checks-btn-icon: #afb8c1;--color-checks-btn-hover-icon: #f6f8fa;--color-checks-btn-hover-bg: rgba(255,255,255,0.125);--color-checks-input-text: #eaeef2;--color-checks-input-placeholder-text: #8c959f;--color-checks-input-focus-text: #8c959f;--color-checks-input-bg: #32383f;--color-checks-input-shadow: none;--color-checks-donut-error: #fa4549;--color-checks-donut-pending: #bf8700;--color-checks-donut-success: #2da44e;--color-checks-donut-neutral: #afb8c1;--color-checks-dropdown-text: #afb8c1;--color-checks-dropdown-bg: #32383f;--color-checks-dropdown-border: #424a53;--color-checks-dropdown-shadow: rgba(27,31,36,0.3);--color-checks-dropdown-hover-text: #f6f8fa;--color-checks-dropdown-hover-bg: #424a53;--color-checks-dropdown-btn-hover-text: #f6f8fa;--color-checks-dropdown-btn-hover-bg: #32383f;--color-checks-scrollbar-thumb-bg: #57606a;--color-checks-header-label-text: #d0d7de;--color-checks-header-label-open-text: #f6f8fa;--color-checks-header-border: #32383f;--color-checks-header-icon: #8c959f;--color-checks-line-text: #d0d7de;--color-checks-line-num-text: rgba(140,149,159,0.75);--color-checks-line-timestamp-text: #8c959f;--color-checks-line-hover-bg: #32383f;--color-checks-line-selected-bg: rgba(33,139,255,0.15);--color-checks-line-selected-num-text: #54aeff;--color-checks-line-dt-fm-text: #24292f;--color-checks-line-dt-fm-bg: #9a6700;--color-checks-gate-bg: rgba(125,78,0,0.15);--color-checks-gate-text: #d0d7de;--color-checks-gate-waiting-text: #d4a72c;--color-checks-step-header-open-bg: #32383f;--color-checks-step-error-text: #ff8182;--color-checks-step-warning-text: #d4a72c;--color-checks-logline-text: #8c959f;--color-checks-logline-num-text: rgba(140,149,159,0.75);--color-checks-logline-debug-text: #c297ff;--color-checks-logline-error-text: #d0d7de;--color-checks-logline-error-num-text: #ff8182;--color-checks-logline-error-bg: rgba(164,14,38,0.15);--color-checks-logline-warning-text: #d0d7de;--color-checks-logline-warning-num-text: #d4a72c;--color-checks-logline-warning-bg: rgba(125,78,0,0.15);--color-checks-logline-command-text: #54aeff;--color-checks-logline-section-text: #4ac26b;--color-checks-ansi-black: #24292f;--color-checks-ansi-black-bright: #32383f;--color-checks-ansi-white: #d0d7de;--color-checks-ansi-white-bright: #d0d7de;--color-checks-ansi-gray: #8c959f;--color-checks-ansi-red: #ff8182;--color-checks-ansi-red-bright: #ffaba8;--color-checks-ansi-green: #4ac26b;--color-checks-ansi-green-bright: #6fdd8b;--color-checks-ansi-yellow: #d4a72c;--color-checks-ansi-yellow-bright: #eac54f;--color-checks-ansi-blue: #54aeff;--color-checks-ansi-blue-bright: #80ccff;--color-checks-ansi-magenta: #c297ff;--color-checks-ansi-magenta-bright: #d8b9ff;--color-checks-ansi-cyan: #76e3ea;--color-checks-ansi-cyan-bright: #b3f0ff;--color-project-header-bg: #24292f;--color-project-sidebar-bg: #ffffff;--color-project-gradient-in: #ffffff;--color-project-gradient-out: rgba(255,255,255,0);--color-mktg-btn-bg: #1b1f23;--color-mktg-btn-shadow-outline: rgb(0 0 0 / 15%) 0 0 0 1px inset;--color-mktg-btn-shadow-focus: rgb(0 0 0 / 15%) 0 0 0 4px;--color-mktg-btn-shadow-hover: 0 3px 2px rgba(0, 0, 0, 0.07), 0 7px 5px rgba(0, 0, 0, 0.04), 0 12px 10px rgba(0, 0, 0, 0.03), 0 22px 18px rgba(0, 0, 0, 0.03), 0 42px 33px rgba(0, 0, 0, 0.02), 0 100px 80px rgba(0, 0, 0, 0.02);--color-mktg-btn-shadow-hover-muted: rgb(0 0 0 / 70%) 0 0 0 2px inset;--color-avatar-bg: #ffffff;--color-avatar-border: rgba(27,31,36,0.15);--color-avatar-stack-fade: #afb8c1;--color-avatar-stack-fade-more: #d0d7de;--color-avatar-child-shadow: -2px -2px 0 rgba(255,255,255,0.8);--color-topic-tag-border: rgba(0,0,0,0);--color-counter-border: rgba(0,0,0,0);--color-select-menu-backdrop-border: rgba(0,0,0,0);--color-select-menu-tap-highlight: rgba(175,184,193,0.5);--color-select-menu-tap-focus-bg: #b6e3ff;--color-overlay-shadow: 0 1px 3px rgba(27,31,36,0.12), 0 8px 24px rgba(66,74,83,0.12);--color-header-text: rgba(255,255,255,0.7);--color-header-bg: #24292f;--color-header-divider: #57606a;--color-header-logo: #ffffff;--color-header-search-bg: #24292f;--color-header-search-border: #57606a;--color-sidenav-selected-bg: #ffffff;--color-menu-bg-active: rgba(0,0,0,0);--color-input-disabled-bg: rgba(175,184,193,0.2);--color-timeline-badge-bg: #eaeef2;--color-ansi-black: #24292f;--color-ansi-black-bright: #57606a;--color-ansi-white: #6e7781;--color-ansi-white-bright: #8c959f;--color-ansi-gray: #6e7781;--color-ansi-red: #cf222e;--color-ansi-red-bright: #a40e26;--color-ansi-green: #116329;--color-ansi-green-bright: #1a7f37;--color-ansi-yellow: #4d2d00;--color-ansi-yellow-bright: #633c01;--color-ansi-blue: #0969da;--color-ansi-blue-bright: #218bff;--color-ansi-magenta: #8250df;--color-ansi-magenta-bright: #a475f9;--color-ansi-cyan: #1b7c83;--color-ansi-cyan-bright: #3192aa;--color-btn-text: #24292f;--color-btn-bg: #f6f8fa;--color-btn-border: rgba(27,31,36,0.15);--color-btn-shadow: 0 1px 0 rgba(27,31,36,0.04);--color-btn-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.25);--color-btn-hover-bg: #f3f4f6;--color-btn-hover-border: rgba(27,31,36,0.15);--color-btn-active-bg: hsla(220,14%,93%,1);--color-btn-active-border: rgba(27,31,36,0.15);--color-btn-selected-bg: hsla(220,14%,94%,1);--color-btn-focus-bg: #f6f8fa;--color-btn-focus-border: rgba(27,31,36,0.15);--color-btn-focus-shadow: 0 0 0 3px rgba(9,105,218,0.3);--color-btn-shadow-active: inset 0 0.15em 0.3em rgba(27,31,36,0.15);--color-btn-shadow-input-focus: 0 0 0 0.2em rgba(9,105,218,0.3);--color-btn-counter-bg: rgba(27,31,36,0.08);--color-btn-primary-text: #ffffff;--color-btn-primary-bg: #2da44e;--color-btn-primary-border: rgba(27,31,36,0.15);--color-btn-primary-shadow: 0 1px 0 rgba(27,31,36,0.1);--color-btn-primary-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-primary-hover-bg: #2c974b;--color-btn-primary-hover-border: rgba(27,31,36,0.15);--color-btn-primary-selected-bg: hsla(137,55%,36%,1);--color-btn-primary-selected-shadow: inset 0 1px 0 rgba(0,45,17,0.2);--color-btn-primary-disabled-text: rgba(255,255,255,0.8);--color-btn-primary-disabled-bg: #94d3a2;--color-btn-primary-disabled-border: rgba(27,31,36,0.15);--color-btn-primary-focus-bg: #2da44e;--color-btn-primary-focus-border: rgba(27,31,36,0.15);--color-btn-primary-focus-shadow: 0 0 0 3px rgba(45,164,78,0.4);--color-btn-primary-icon: rgba(255,255,255,0.8);--color-btn-primary-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-text: #0969da;--color-btn-outline-hover-text: #ffffff;--color-btn-outline-hover-bg: #0969da;--color-btn-outline-hover-border: rgba(27,31,36,0.15);--color-btn-outline-hover-shadow: 0 1px 0 rgba(27,31,36,0.1);--color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-outline-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-outline-selected-text: #ffffff;--color-btn-outline-selected-bg: hsla(212,92%,42%,1);--color-btn-outline-selected-border: rgba(27,31,36,0.15);--color-btn-outline-selected-shadow: inset 0 1px 0 rgba(0,33,85,0.2);--color-btn-outline-disabled-text: rgba(9,105,218,0.5);--color-btn-outline-disabled-bg: #f6f8fa;--color-btn-outline-disabled-counter-bg: rgba(9,105,218,0.05);--color-btn-outline-focus-border: rgba(27,31,36,0.15);--color-btn-outline-focus-shadow: 0 0 0 3px rgba(5,80,174,0.4);--color-btn-outline-counter-bg: rgba(9,105,218,0.1);--color-btn-danger-text: #cf222e;--color-btn-danger-hover-text: #ffffff;--color-btn-danger-hover-bg: #a40e26;--color-btn-danger-hover-border: rgba(27,31,36,0.15);--color-btn-danger-hover-shadow: 0 1px 0 rgba(27,31,36,0.1);--color-btn-danger-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);--color-btn-danger-hover-counter-bg: rgba(255,255,255,0.2);--color-btn-danger-selected-text: #ffffff;--color-btn-danger-selected-bg: hsla(356,72%,44%,1);--color-btn-danger-selected-border: rgba(27,31,36,0.15);--color-btn-danger-selected-shadow: inset 0 1px 0 rgba(76,0,20,0.2);--color-btn-danger-disabled-text: rgba(207,34,46,0.5);--color-btn-danger-disabled-bg: #f6f8fa;--color-btn-danger-disabled-counter-bg: rgba(207,34,46,0.05);--color-btn-danger-focus-border: rgba(27,31,36,0.15);--color-btn-danger-focus-shadow: 0 0 0 3px rgba(164,14,38,0.4);--color-btn-danger-counter-bg: rgba(207,34,46,0.1);--color-btn-danger-icon: #cf222e;--color-btn-danger-hover-icon: #ffffff;--color-underlinenav-icon: #6e7781;--color-underlinenav-border-hover: rgba(175,184,193,0.2);--color-action-list-item-inline-divider: rgba(208,215,222,0.48);--color-action-list-item-default-hover-bg: rgba(208,215,222,0.32);--color-action-list-item-default-hover-border: rgba(0,0,0,0);--color-action-list-item-default-active-bg: rgba(208,215,222,0.48);--color-action-list-item-default-active-border: rgba(0,0,0,0);--color-action-list-item-default-selected-bg: rgba(208,215,222,0.24);--color-action-list-item-danger-hover-bg: rgba(255,235,233,0.64);--color-action-list-item-danger-active-bg: #ffebe9;--color-action-list-item-danger-hover-text: #cf222e;--color-switch-track-bg: #eaeef2;--color-switch-track-border: #afb8c1;--color-switch-track-checked-bg: #ddf4ff;--color-switch-track-checked-hover-bg: #b6e3ff;--color-switch-track-checked-active-bg: #80ccff;--color-switch-track-checked-border: #54aeff;--color-switch-knob-checked-bg: #0969da;--color-switch-knob-checked-disabled-bg: #6e7781;--color-segmented-control-bg: #eaeef2;--color-segmented-control-button-hover-bg: rgba(175,184,193,0.2);--color-segmented-control-button-active-bg: rgba(175,184,193,0.4);--color-segmented-control-button-selected-border: #6e7781;--color-tree-view-item-chevron-hover-bg: rgba(208,215,222,0.32);--color-tree-view-item-directory-fill: #54aeff;--color-fg-default: #24292f;--color-fg-muted: #57606a;--color-fg-subtle: #6e7781;--color-fg-on-emphasis: #ffffff;--color-canvas-default: #ffffff;--color-canvas-overlay: #ffffff;--color-canvas-inset: #f6f8fa;--color-canvas-subtle: #f6f8fa;--color-border-default: #d0d7de;--color-border-muted: hsla(210,18%,87%,1);--color-border-subtle: rgba(27,31,36,0.15);--color-shadow-small: 0 1px 0 rgba(27,31,36,0.04);--color-shadow-medium: 0 3px 6px rgba(140,149,159,0.15);--color-shadow-large: 0 8px 24px rgba(140,149,159,0.2);--color-shadow-extra-large: 0 12px 28px rgba(140,149,159,0.3);--color-neutral-emphasis-plus: #24292f;--color-neutral-emphasis: #6e7781;--color-neutral-muted: rgba(175,184,193,0.2);--color-neutral-subtle: rgba(234,238,242,0.5);--color-accent-fg: #0969da;--color-accent-emphasis: #0969da;--color-accent-muted: rgba(84,174,255,0.4);--color-accent-subtle: #ddf4ff;--color-success-fg: #1a7f37;--color-success-emphasis: #2da44e;--color-success-muted: rgba(74,194,107,0.4);--color-success-subtle: #dafbe1;--color-attention-fg: #9a6700;--color-attention-emphasis: #bf8700;--color-attention-muted: rgba(212,167,44,0.4);--color-attention-subtle: #fff8c5;--color-severe-fg: #bc4c00;--color-severe-emphasis: #bc4c00;--color-severe-muted: rgba(251,143,68,0.4);--color-severe-subtle: #fff1e5;--color-danger-fg: #cf222e;--color-danger-emphasis: #cf222e;--color-danger-muted: rgba(255,129,130,0.4);--color-danger-subtle: #ffebe9;--color-open-fg: #1a7f37;--color-open-emphasis: #2da44e;--color-open-muted: rgba(74,194,107,0.4);--color-open-subtle: #dafbe1;--color-closed-fg: #cf222e;--color-closed-emphasis: #cf222e;--color-closed-muted: rgba(255,129,130,0.4);--color-closed-subtle: #ffebe9;--color-done-fg: #8250df;--color-done-emphasis: #8250df;--color-done-muted: rgba(194,151,255,0.4);--color-done-subtle: #fbefff;--color-sponsors-fg: #bf3989;--color-sponsors-emphasis: #bf3989;--color-sponsors-muted: rgba(255,128,200,0.4);--color-sponsors-subtle: #ffeff7;--color-primer-fg-disabled: #8c959f;--color-primer-canvas-backdrop: rgba(27,31,36,0.5);--color-primer-canvas-sticky: rgba(255,255,255,0.95);--color-primer-border-active: #fd8c73;--color-primer-border-contrast: rgba(27,31,36,0.1);--color-primer-shadow-highlight: inset 0 1px 0 rgba(255,255,255,0.25);--color-primer-shadow-inset: inset 0 1px 0 rgba(208,215,222,0.2);--color-primer-shadow-focus: 0 0 0 3px rgba(9,105,218,0.3);--color-scale-black: #1b1f24;--color-scale-white: #ffffff;--color-scale-gray-0: #f6f8fa;--color-scale-gray-1: #eaeef2;--color-scale-gray-2: #d0d7de;--color-scale-gray-3: #afb8c1;--color-scale-gray-4: #8c959f;--color-scale-gray-5: #6e7781;--color-scale-gray-6: #57606a;--color-scale-gray-7: #424a53;--color-scale-gray-8: #32383f;--color-scale-gray-9: #24292f;--color-scale-blue-0: #ddf4ff;--color-scale-blue-1: #b6e3ff;--color-scale-blue-2: #80ccff;--color-scale-blue-3: #54aeff;--color-scale-blue-4: #218bff;--color-scale-blue-5: #0969da;--color-scale-blue-6: #0550ae;--color-scale-blue-7: #033d8b;--color-scale-blue-8: #0a3069;--color-scale-blue-9: #002155;--color-scale-green-0: #dafbe1;--color-scale-green-1: #aceebb;--color-scale-green-2: #6fdd8b;--color-scale-green-3: #4ac26b;--color-scale-green-4: #2da44e;--color-scale-green-5: #1a7f37;--color-scale-green-6: #116329;--color-scale-green-7: #044f1e;--color-scale-green-8: #003d16;--color-scale-green-9: #002d11;--color-scale-yellow-0: #fff8c5;--color-scale-yellow-1: #fae17d;--color-scale-yellow-2: #eac54f;--color-scale-yellow-3: #d4a72c;--color-scale-yellow-4: #bf8700;--color-scale-yellow-5: #9a6700;--color-scale-yellow-6: #7d4e00;--color-scale-yellow-7: #633c01;--color-scale-yellow-8: #4d2d00;--color-scale-yellow-9: #3b2300;--color-scale-orange-0: #fff1e5;--color-scale-orange-1: #ffd8b5;--color-scale-orange-2: #ffb77c;--color-scale-orange-3: #fb8f44;--color-scale-orange-4: #e16f24;--color-scale-orange-5: #bc4c00;--color-scale-orange-6: #953800;--color-scale-orange-7: #762c00;--color-scale-orange-8: #5c2200;--color-scale-orange-9: #471700;--color-scale-red-0: #ffebe9;--color-scale-red-1: #ffcecb;--color-scale-red-2: #ffaba8;--color-scale-red-3: #ff8182;--color-scale-red-4: #fa4549;--color-scale-red-5: #cf222e;--color-scale-red-6: #a40e26;--color-scale-red-7: #82071e;--color-scale-red-8: #660018;--color-scale-red-9: #4c0014;--color-scale-purple-0: #fbefff;--color-scale-purple-1: #ecd8ff;--color-scale-purple-2: #d8b9ff;--color-scale-purple-3: #c297ff;--color-scale-purple-4: #a475f9;--color-scale-purple-5: #8250df;--color-scale-purple-6: #6639ba;--color-scale-purple-7: #512a97;--color-scale-purple-8: #3e1f79;--color-scale-purple-9: #2e1461;--color-scale-pink-0: #ffeff7;--color-scale-pink-1: #ffd3eb;--color-scale-pink-2: #ffadda;--color-scale-pink-3: #ff80c8;--color-scale-pink-4: #e85aad;--color-scale-pink-5: #bf3989;--color-scale-pink-6: #99286e;--color-scale-pink-7: #772057;--color-scale-pink-8: #611347;--color-scale-pink-9: #4d0336;--color-scale-coral-0: #fff0eb;--color-scale-coral-1: #ffd6cc;--color-scale-coral-2: #ffb4a1;--color-scale-coral-3: #fd8c73;--color-scale-coral-4: #ec6547;--color-scale-coral-5: #c4432b;--color-scale-coral-6: #9e2f1c;--color-scale-coral-7: #801f0f;--color-scale-coral-8: #691105;--color-scale-coral-9: #510901}} + +/*# sourceMappingURL=light-1a80a42cdf6e.css.map*/ \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/A761782343AD28B4E5934BF61C96312CCF1CC89F b/home/.surf/cache/WebKitCache/Version 16/Blobs/A761782343AD28B4E5934BF61C96312CCF1CC89F new file mode 100644 index 0000000..5117e40 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/A761782343AD28B4E5934BF61C96312CCF1CC89F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/A83E74A54AECBFD7DFA4B99CDFDD937BFFCE95C1 b/home/.surf/cache/WebKitCache/Version 16/Blobs/A83E74A54AECBFD7DFA4B99CDFDD937BFFCE95C1 new file mode 100644 index 0000000..72d37b1 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/A83E74A54AECBFD7DFA4B99CDFDD937BFFCE95C1 @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_mini-th-85225b"],{57260(a,b,c){c.d(b,{P:()=>Attachment});class Attachment{constructor(a,b){this.file=a,this.directory=b,this.state="pending",this.id=null,this.href=null,this.name=null,this.percent=0}static traverse(a,b){return d(a,b)}static from(a){let b=[];for(let c of a)if(c instanceof File)b.push(new Attachment(c));else if(c instanceof Attachment)b.push(c);else throw Error("Unexpected type");return b}get fullPath(){return this.directory?`${this.directory}/${this.file.name}`:this.file.name}isImage(){return["image/gif","image/png","image/jpg","image/jpeg","image/svg+xml"].indexOf(this.file.type)> -1}isVideo(){return["video/mp4","video/quicktime"].indexOf(this.file.type)> -1}saving(a){if("pending"!==this.state&&"saving"!==this.state)throw Error(`Unexpected transition from ${this.state} to saving`);this.state="saving",this.percent=a}saved(a){var b,c,d;if("pending"!==this.state&&"saving"!==this.state)throw Error(`Unexpected transition from ${this.state} to saved`);this.state="saved",this.id=null!==(b=null==a?void 0:a.id)&& void 0!==b?b:null,this.href=null!==(c=null==a?void 0:a.href)&& void 0!==c?c:null,this.name=null!==(d=null==a?void 0:a.name)&& void 0!==d?d:null}isPending(){return"pending"===this.state}isSaving(){return"saving"===this.state}isSaved(){return"saved"===this.state}}function d(a,b){return b&&i(a)?h("",j(a)):Promise.resolve(e(Array.from(a.files||[])).map(a=>new Attachment(a)))}function e(a){return Array.from(a).filter(a=>{var b;return!(b=a).name.startsWith(".")})}function f(a){return new Promise(function(b,c){a.file(b,c)})}function g(a){return new Promise(function(b,c){let d=[],e=a.createReader(),f=()=>{e.readEntries(a=>{a.length>0?(d.push(...a),f()):b(d)},c)};f()})}async function h(a,b){let c=[];for(let d of e(b))if(d.isDirectory)c.push(...await h(d.fullPath,await g(d)));else{let i=await f(d);c.push(new Attachment(i,a))}return c}function i(a){return a.items&&Array.from(a.items).some(a=>{let b=a.webkitGetAsEntry&&a.webkitGetAsEntry();return b&&b.isDirectory})}function j(a){return Array.from(a.items).map(a=>a.webkitGetAsEntry()).filter(a=>null!=a)}class FileAttachmentElement extends HTMLElement{connectedCallback(){this.addEventListener("dragenter",m),this.addEventListener("dragover",m),this.addEventListener("dragleave",n),this.addEventListener("drop",o),this.addEventListener("paste",q),this.addEventListener("change",r)}disconnectedCallback(){this.removeEventListener("dragenter",m),this.removeEventListener("dragover",m),this.removeEventListener("dragleave",n),this.removeEventListener("drop",o),this.removeEventListener("paste",q),this.removeEventListener("change",r)}get directory(){return this.hasAttribute("directory")}set directory(a){a?this.setAttribute("directory",""):this.removeAttribute("directory")}async attach(a){let b=a instanceof DataTransfer?await Attachment.traverse(a,this.directory):Attachment.from(a),c=this.dispatchEvent(new CustomEvent("file-attachment-accept",{bubbles:!0,cancelable:!0,detail:{attachments:b}}));c&&b.length&&this.dispatchEvent(new CustomEvent("file-attachment-accepted",{bubbles:!0,detail:{attachments:b}}))}}function k(a){return Array.from(a.types).indexOf("Files")>=0}let l=null;function m(a){let b=a.currentTarget;l&&clearTimeout(l),l=window.setTimeout(()=>b.removeAttribute("hover"),200);let c=a.dataTransfer;c&&k(c)&&(c.dropEffect="copy",b.setAttribute("hover",""),a.preventDefault())}function n(a){a.dataTransfer&&(a.dataTransfer.dropEffect="none");let b=a.currentTarget;b.removeAttribute("hover"),a.stopPropagation(),a.preventDefault()}function o(a){let b=a.currentTarget;if(!(b instanceof FileAttachmentElement))return;b.removeAttribute("hover");let c=a.dataTransfer;c&&k(c)&&(b.attach(c),a.stopPropagation(),a.preventDefault())}let p=/^image\/(gif|png|jpeg)$/;function q(a){if(!a.clipboardData||!a.clipboardData.items)return;let b=a.currentTarget;if(!(b instanceof FileAttachmentElement))return;let c=function(a){for(let b of a)if("file"===b.kind&&p.test(b.type))return b.getAsFile();return null}(a.clipboardData.items);if(!c)return;let d=[c];b.attach(d),a.preventDefault()}function r(a){let b=a.currentTarget;if(!(b instanceof FileAttachmentElement))return;let c=a.target;if(!(c instanceof HTMLInputElement))return;let d=b.getAttribute("input");if(d&&c.id!==d)return;let e=c.files;e&&0!==e.length&&(b.attach(e),c.value="")}window.customElements.get("file-attachment")||(window.FileAttachmentElement=FileAttachmentElement,window.customElements.define("file-attachment",FileAttachmentElement))},3447(a,b,c){c.d(b,{D:()=>f,P:()=>e});var d=c(46263);function e(a=0,b={}){return(c,e,f)=>{if(!f||"function"!=typeof f.value)throw Error("debounce can only decorate functions");let g=f.value;f.value=(0,d.P)(g,a,b),Object.defineProperty(c,e,f)}}function f(a=0,b={}){return(c,e,f)=>{if(!f||"function"!=typeof f.value)throw Error("debounce can only decorate functions");let g=f.value;f.value=(0,d.D)(g,a,b),Object.defineProperty(c,e,f)}}},48858(a,b,c){c.d(b,{e:()=>g});var d=c(78160);(0,c(44542).O)();let e=[],f;function g(a,b,c){let h=new AbortController,i=null!=c?c:h.signal;a.setAttribute("data-focus-trap","active");let j=document.createElement("span");j.setAttribute("class","sentinel"),j.setAttribute("tabindex","0"),j.setAttribute("aria-hidden","true"),j.onfocus=()=>{let b=(0,d.O)(a,!0);null==b||b.focus()};let k=document.createElement("span");k.setAttribute("class","sentinel"),k.setAttribute("tabindex","0"),k.setAttribute("aria-hidden","true"),k.onfocus=()=>{let b=(0,d.O)(a);null==b||b.focus()},a.prepend(j),a.append(k);let l;function m(c){if(c instanceof HTMLElement&&document.contains(a)){if(a.contains(c)){l=c;return}if(l&&(0,d.Wq)(l)&&a.contains(l)){l.focus();return}if(b&&a.contains(b)){b.focus();return}{let e=(0,d.O)(a);null==e||e.focus();return}}}let n=function(a){let b=new AbortController;return a.addEventListener("abort",()=>{b.abort()}),b}(i);if(f){let o=f;f.container.setAttribute("data-focus-trap","suspended"),f.controller.abort(),e.push(o)}n.signal.addEventListener("abort",()=>{f=void 0}),i.addEventListener("abort",()=>{a.removeAttribute("data-focus-trap");let b=a.getElementsByClassName("sentinel");for(;b.length>0;)b[0].remove();let c=e.findIndex(b=>b.container===a);c>=0&&e.splice(c,1),function(){let a=e.pop();a&&g(a.container,a.initialFocus,a.originalSignal)}()}),document.addEventListener("focus",a=>{m(a.target)},{signal:n.signal,capture:!0}),m(document.activeElement),f={container:a,controller:n,initialFocus:b,originalSignal:i};let p=e.findIndex(b=>b.container===a);if(p>=0&&e.splice(p,1),!c)return h}},44542(a,b,c){c.d(b,{O:()=>h});let d=!1;function e(){}try{let f=Object.create({},{signal:{get(){d=!0}}});window.addEventListener("test",e,f),window.removeEventListener("test",e,f)}catch(g){}function h(){d||(!function(){if("undefined"==typeof window)return;let a=EventTarget.prototype.addEventListener;EventTarget.prototype.addEventListener=function(b,c,d){return"object"==typeof d&&"signal"in d&&d.signal instanceof AbortSignal&&a.call(d.signal,"abort",()=>{this.removeEventListener(b,c,d)}),a.call(this,b,c,d)}}(),d=!0)}},78160(a,b,c){function*d(a,b={}){var c,d;let e=null!==(c=b.strict)&& void 0!==c&&c,h=null!==(d=b.onlyTabbable)&& void 0!==d&&d?g:f,i=document.createTreeWalker(a,NodeFilter.SHOW_ELEMENT,{acceptNode:a=>a instanceof HTMLElement&&h(a,e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}),j=null;if(!b.reverse&&h(a,e)&&(yield a),b.reverse){let k=i.lastChild();for(;k;)j=k,k=i.lastChild()}else j=i.firstChild();for(;j instanceof HTMLElement;)yield j,j=b.reverse?i.previousNode():i.nextNode();b.reverse&&h(a,e)&&(yield a)}function e(a,b=!1){return d(a,{reverse:b,strict:!0,onlyTabbable:!0}).next().value}function f(a,b=!1){let c=["BUTTON","INPUT","SELECT","TEXTAREA","OPTGROUP","OPTION","FIELDSET"].includes(a.tagName)&&a.disabled,d=a.hidden,e=a instanceof HTMLInputElement&&"hidden"===a.type,f=a.classList.contains("sentinel");if(c||d||e||f)return!1;if(b){let g=0===a.offsetWidth||0===a.offsetHeight,h=["hidden","collapse"].includes(getComputedStyle(a).visibility),i=0===a.getClientRects().length;if(g||h||i)return!1}return null!=a.getAttribute("tabindex")||(!(a instanceof HTMLAnchorElement)||null!=a.getAttribute("href"))&& -1!==a.tabIndex}function g(a,b=!1){return f(a,b)&&"-1"!==a.getAttribute("tabindex")}c.d(b,{O:()=>e,Wq:()=>g,hT:()=>d})},59753(a,b,c){function d(){if(!(this instanceof d))return new d;this.size=0,this.uid=0,this.selectors=[],this.selectorObjects={},this.indexes=Object.create(this.indexes),this.activeIndexes=[]}c.d(b,{f:()=>B,on:()=>A});var e,f=window.document.documentElement,g=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector;d.prototype.matchesSelector=function(a,b){return g.call(a,b)},d.prototype.querySelectorAll=function(a,b){return b.querySelectorAll(a)},d.prototype.indexes=[];var h=/^#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"ID",selector:function(a){var b;if(b=a.match(h))return b[0].slice(1)},element:function(a){if(a.id)return[a.id]}});var i=/^\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"CLASS",selector:function(a){var b;if(b=a.match(i))return b[0].slice(1)},element:function(a){var b=a.className;if(b){if("string"==typeof b)return b.split(/\s/);if("object"==typeof b&&"baseVal"in b)return b.baseVal.split(/\s/)}}});var j=/^((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"TAG",selector:function(a){var b;if(b=a.match(j))return b[0].toUpperCase()},element:function(a){return[a.nodeName.toUpperCase()]}}),d.prototype.indexes.default={name:"UNIVERSAL",selector:function(){return!0},element:function(){return[!0]}},e="function"==typeof window.Map?window.Map:function(){function a(){this.map={}}return a.prototype.get=function(a){return this.map[a+" "]},a.prototype.set=function(a,b){this.map[a+" "]=b},a}();var k=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;function l(a,b){var c,d,e,f,g,h,i=(a=a.slice(0).concat(a.default)).length,j=b,l=[];do if(k.exec(""),(e=k.exec(j))&&(j=e[3],e[2]||!j)){for(c=0;c3&& void 0!==arguments[3]?arguments[3]:{},f=!!e.capture,g=f?p:o,h=g[a];h||(h=new d,g[a]=h,document.addEventListener(a,z,f)),h.add(b,c)}function B(a,b,c){return a.dispatchEvent(new CustomEvent(b,{bubbles:!0,cancelable:!0,detail:c}))}},47142(a,b,c){c.d(b,{CD:()=>k,Gs:()=>i,m7:()=>j});var d=-1/0,e=1/0;function f(a){return a.toLowerCase()===a}function g(a){return a.toUpperCase()===a}function h(a,b,c,e){for(var h=a.length,i=b.length,j=a.toLowerCase(),k=b.toLowerCase(),l=function(a){for(var b=a.length,c=Array(b),d="/",e=0;e1024)return d;var g=Array(c),i=Array(c);return h(a,b,g,i),i[c-1][f-1]}function j(a,b){var c=a.length,e=b.length,f=Array(c);if(!c||!e)return f;if(c===e){for(var g=0;g1024)return f;var i=Array(c),j=Array(c);h(a,b,i,j);for(var k=!1,g=c-1,l=e-1;g>=0;g--)for(;l>=0;l--)if(i[g][l]!==d&&(k||i[g][l]===j[g][l])){k=g&&l&&j[g][l]===i[g-1][l-1]+1,f[g]=l--;break}return f}function k(a,b){a=a.toLowerCase(),b=b.toLowerCase();for(var c=a.length,d=0,e=0;dCombobox});class Combobox{constructor(a,b,{tabInsertsSuggestions:c,defaultFirstOption:e}={}){this.input=a,this.list=b,this.tabInsertsSuggestions=null==c||c,this.defaultFirstOption=null!=e&&e,this.isComposing=!1,b.id||(b.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=a=>d(a,this),this.compositionEventHandler=a=>i(a,this),this.inputHandler=this.clearSelection.bind(this),a.setAttribute("role","combobox"),a.setAttribute("aria-controls",b.id),a.setAttribute("aria-expanded","false"),a.setAttribute("aria-autocomplete","list"),a.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",e),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",e)}indicateDefaultOption(){var a;this.defaultFirstOption&&(null===(a=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(h)[0])|| void 0===a||a.setAttribute("data-combobox-option-default","true"))}navigate(a=1){let b=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(h)[0],c=Array.from(this.list.querySelectorAll('[role="option"]')).filter(h),d=c.indexOf(b);if(d===c.length-1&&1===a||0===d&& -1===a){this.clearSelection(),this.input.focus();return}let e=1===a?0:c.length-1;if(b&&d>=0){let f=d+a;f>=0&&f0||a.offsetHeight>0)}function i(a,b){b.isComposing="compositionstart"===a.type;let c=document.getElementById(b.input.getAttribute("aria-controls")||"");c&&b.clearSelection()}function j(a,b){k(a,b)||(a.scrollTop=b.offsetTop)}function k(a,b){let c=a.scrollTop,d=c+a.clientHeight,e=b.offsetTop,f=e+b.clientHeight;return e>=c&&f<=d}}}]) +//# sourceMappingURL=vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_mini-th-85225b-74acbc8b9345.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/AA7C4FA7F0BAF09C2C9D3ED265737AF16D9E6F9E b/home/.surf/cache/WebKitCache/Version 16/Blobs/AA7C4FA7F0BAF09C2C9D3ED265737AF16D9E6F9E new file mode 100644 index 0000000..5916925 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/AA7C4FA7F0BAF09C2C9D3ED265737AF16D9E6F9E differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/AAF075DD7CD01A665E7EDCD7E9DDDE0F12F93C62 b/home/.surf/cache/WebKitCache/Version 16/Blobs/AAF075DD7CD01A665E7EDCD7E9DDDE0F12F93C62 new file mode 100644 index 0000000..6098b55 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/AAF075DD7CD01A665E7EDCD7E9DDDE0F12F93C62 @@ -0,0 +1,924 @@ +/* Bundle Includes: + * css/dialogs-common.css + * css/dialogs/cookie-dialog.css + * css/jquery-ui.extra.css + */ + +.mega-banner-container{ + align-items:center; + display:flex; + justify-content:center; + width:100% +} +.mega-banner-template{ + --border-radius:24px; + --mask-color:var(--text-color-high); + background:var(--surface-main); + bottom:0; + box-shadow:0 4px 16px 0 rgb(0 0 0 / .1); + box-sizing:border-box; + color:var(--text-color-medium); + display:flex; + flex-direction:column; + font:var(--text-body1); + position:fixed; + width:100%; + z-index:1090 +} +.mega-banner-template.hidden{ + display:none +} +.mega-banner-template button.close{ + align-items:center; + background:transparent; + border:none; + cursor:pointer; + display:flex; + justify-content:center; + outline:none; + padding:0; + position:absolute; + right:16px; + top:16px; + z-index:2010 +} +.rtl .mega-banner-template button.close{ + left:16px; + right:auto +} +.mega-banner-template button.close i{ + --icon-size:24px; + margin:0; + opacity:.6; + transition:opacity .2s ease-in-out +} +@media (hover:hover){ +.mega-banner-template button.close i:hover{ + opacity:.8 +} +} +.mega-banner-template>.content{ + align-items:center; + display:flex; + padding:24px 80px +} +.mega-banner-template .graphic{ + --width:74px; + -webkit-margin-end:20px; + flex:0 0 auto; + height:74px; + margin:0 2px; + margin-inline-end:20px; + width:74px +} +.mega-banner-template header{ + align-items:center; + display:flex; + flex:1 1 auto +} +.mega-banner-template header h3{ + color:var(--text-color-high); + font:var(--text-body1-bold); + margin:0 0 8px; + padding:0 +} +.mega-banner-template header p{ + color:var(--text-color-medium); + font:var(--text-body1); + margin:0; + padding:0 +} +.mega-banner-template header p a,.mega-banner-template header p a:visited{ + color:var(--text-color-medium); + text-decoration:underline +} +@media (hover:hover){ +.mega-banner-template header p a:hover{ + text-decoration:none +} +} +.mega-banner-template header .info{ + flex:1 1 auto +} +.mega-banner-template .buttons{ + -webkit-margin-start:60px; + display:flex; + flex:0 0 auto; + margin-inline-start:60px +} +.mega-banner-template .buttons button~button{ + -webkit-margin-start:16px; + margin-inline-start:16px +} +.mega-dialog-container.common-container{ + z-index:1300 +} +.mega-dialog-container.common-container.arrange-to-back{ + z-index:1000 +} +.dialog-sprite,.ui-datepicker-next,.ui-datepicker-prev,i.dialog-sprite{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-repeat:no-repeat +} +.fm-dialog-title{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#666; + font-size:20px; + line-height:30px; + min-height:38px; + overflow:hidden; + padding:20px 48px 0; + text-align:center; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.fm-dialog-title.small{ + color:#666; + font-family:var(--text-font-family); + font-size:16px; + letter-spacing:-.18px; + line-height:25px +} +.fm-dialog-title.medium{ + color:#333; + font-family:var(--text-font-family); + font-size:18px; + padding-top:23px +} +.fm-dialog-title.top-pad{ + padding-top:30px +} +.contrast .fm-dialog-title,.fm-dialog-title.dark{ + color:#333 +} +.mobile .fm-dialog-title{ + padding-left:25px; + padding-right:25px; + white-space:normal +} +.mobile .fm-dialog-title.medium{ + font-size:16px +} +@media only screen and (max-width:860px){ +.mega-banner-template>.content{ + padding:24px 48px +} +.mega-banner-template .buttons{ + -webkit-margin-start:24px; + margin-inline-start:24px +} +} +@media only screen and (max-width:720px){ +.mega-banner-template>.content{ + display:block; + padding:24px +} +.mega-banner-template .buttons{ + justify-content:space-between; + margin:15px 0 0 +} +.mega-banner-template .buttons button{ + width:calc(50% - 6px) +} +} +.mobile .mega-banner-template{ + border-radius:4px; + bottom:10px; + box-shadow:1px 1px 5px 0 rgb(147 147 147 / .5); + left:10px; + width:calc(100% - 20px); + z-index:190 +} +.mobile .mega-banner-template button.close i{ + --icon-size:20px +} +.mobile .mega-banner-template header h3{ + font-size:13px +} +.mobile .mega-banner-template header p{ + font:var(--text-body2) +} +.mobile .mega-dialog-container .mega-dialog{ + -webkit-overflow-scrolling:touch; + overflow:scroll +} +.mobile .mega-dialog-container .mega-dialog:not(.fullsize-on-mobile){ + max-height:calc(100% - 30px); + max-width:768px; + width:calc(100% - 30px) +} +.mobile .mega-dialog-container .mega-dialog.fullsize-on-mobile{ + height:100%; + width:100% +} +.mega-dialog.verify-email{ + max-width:360px +} +.mega-dialog.verify-email .header{ + background:var(--surface-error); + border-radius:23px 23px 0 0 +} +.mobile .mega-dialog.verify-email .header{ + border-radius:0 +} +.mega-dialog.verify-email .content-block{ + text-align:center +} +.mega-dialog.verify-email .content-block .text:first-child{ + margin-top:16px +} +.mega-dialog.verify-email .content-block .text{ + color:var(--text-color-high); + margin-bottom:16px +} +.mega-dialog.verify-email .content-block .header-text{ + margin-bottom:4px +} +.mega-dialog.verify-email .content-block .text strong{ + font-family:var(--text-font-family-semibold) +} +.mega-dialog.verify-email .content-block .text.small{ + font:var(--text-body2); + margin-bottom:8px +} +.mega-dialog.verify-email .content-block .text.red{ + color:var(--text-color-error); + cursor:pointer; + margin-bottom:0; + position:relative +} +.mega-dialog.verify-email .locked-account{ + --width:72px; + height:72px; + margin:0 auto 16px; + width:72px +} +.mega-dialog.verify-email .dropdown.body{ + border-radius:24px; + bottom:29px; + cursor:default; + left:50%; + margin:0 0 0 -160px; + opacity:0; + padding:24px; + position:absolute; + transition:opacity .2s ease-in-out,visibility .2s ease-in-out; + visibility:hidden; + width:320px +} +.verify-email.content-block .text.red .dropdown.body:after{ + bottom:-10px; + content:""; + height:34px; + left:0; + position:absolute; + width:100% +} +.verify-email.content-block .text.red:hover .dropdown.body{ + opacity:1; + visibility:visible +} +h3.verify-email.header-txt{ + color:var(--text-color-high); + font:var(--text-h3); + margin:0 0 12px +} +.verify-email .dropdown.body .text:last-child{ + margin:0 +} +.mobile .mega-dialog.verify-email{ + max-width:100% +} +.mobile .mega-dialog.verify-email-login-to-account .footer-container,.mobile .mega-dialog.verify-email-set-new-pass .footer-container,.mobile .mega-dialog.verify-email .footer-container{ + justify-content:center; + padding:16px 0 +} +.mobile .verify-email.content-block{ + padding:19px 20px 0 +} +.mobile .verify-email.header{ + height:auto; + padding-top:24px +} +.mobile .verify-email.header-txt{ + padding-bottom:12px; + padding-top:0 +} +.mobile .verify-email.content-block .text{ + margin-bottom:15px +} +.mobile .verify-email.content-block .text.red{ + margin-bottom:20px +} +.mobile .verify-email .dropdown.body{ + margin-left:-50%; + width:100% +} +.mobile .verify-email.content-block .text.red{ + position:static +} +.mobile .verify-email .dropdown.body{ + bottom:auto !important; + height:auto; + margin:0; + max-height:100%; + max-height:-webkit-calc(100% - 60px); + max-height:-moz-calc(100% - 60px); + max-height:calc(100% - 60px); + max-height:none; + max-width:100%; + max-width:-webkit-calc(100% - 60px); + max-width:-moz-calc(100% - 60px); + max-width:calc(100% - 60px); + top:50%; + -webkit-transform:translate(-50%, -50%); + -moz-transform:translate(-50%, -50%); + -ms-transform:translate(-50%, -50%); + -o-transform:translate(-50%, -50%); + transform:translate(-50%, -50%) +} +.mega-dialog.type-480px227{ + max-width:480px +} +.login-set-pass.content-block{ + color:var(--text-color-high); + font:var(--text-body1); + padding:22px 35px 35px; + text-align:center +} +.login-set-pass .text{ + padding:2px 0 18px +} +.login-set-pass .dialog-login-form{ + margin-top:9px +} +.mobile .mega-dialog.type-480px227{ + max-width:100% +} +.mobile .login-set-pass .text{ + padding-bottom:5px +} +.mobile .login-set-pass .dialog-login-form.low-pad{ + margin-top:-10px +} +.mobile .login-set-pass .text{ + padding:2px 0 10px +} +.mobile .account.dialog-login-form-low-pad{ + margin-top:-5px +} +.mobile .login-set-pass .dialog-login-form{ + margin-top:0 +} +.mobile .login-set-pass .dialog-top-icon.locked-account{ + margin-bottom:5px +} +.mobile .type-480px227 .mega-input.title-ontop{ + margin-bottom:10px +} +.mobile .login-set-pass button{ + margin-top:0 +} +@media only screen and (orientation:landscape){ +.mobile .verify-email.header{ + padding-top:14px +} +} +.mobile .mega-dialog-container{ + align-items:center; + display:flex; + height:100%; + justify-content:center; + left:0; + pointer-events:none; + position:fixed; + top:0; + width:100%; + z-index:1300 +} +.mobile .mega-dialog-container>*{ + pointer-events:auto +} +.mobile .mega-dialog{ + background:#fff; + position:absolute +} +.mobile .mega-dialog:not(.fullsize-on-mobile){ + border-radius:24px +} +.mobile .mega-dialog.fullsize-on-mobile{ + border-radius:0 +} +.mobile .mega-dialog footer{ + text-align:center +} +.mobile .mega-dialog aside{ + min-height:24px +} +.mobile .mega-dialog .mega-button{ + appearance:none; + border:none; + border-radius:4px; + box-sizing:border-box; + cursor:pointer; + display:inline-block; + font-size:14px; + height:48px; + line-height:48px; + min-width:128px; + outline:none; + padding:0 25px; + position:relative; + white-space:nowrap +} +.mobile .mega-dialog .mega-button.disabled{ + opacity:.4 +} +.mobile .mega-dialog .mega-button:before{ + border-radius:inherit; + box-shadow:0 1px 2px 0 rgb(0 0 0 / .15); + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.mobile .mega-dialog .mega-button.positive,.mobile .mega-dialog footer button.positive{ + background:linear-gradient(180deg, #00bfa5 0, #00a690); + color:#fff +} +.mobile .verify-email-login-to-account button.close,.mobile .verify-email button.close{ + display:none +} +.mobile .verify-email-login-to-account header h2{ + color:#333; + font-family:var(--text-font-family); + font-size:16px; + line-height:24px; + margin-bottom:0; + text-align:center +} +.mobile .verify-email-login-to-account .content-block{ + padding:10px 25px 25px +} +.mobile .verify-email-login-to-account .dialog-top-icon.locked-account{ + margin:16px auto +} +.mobile .verify-email-set-new-pass button.close{ + display:none +} +.mobile .verify-email-set-new-pass header h2{ + color:#333; + font-family:var(--text-font-family); + font-size:16px; + line-height:24px; + margin-bottom:0; + margin-top:18px; + text-align:center +} +.mobile .verify-email-set-new-pass .content-block{ + padding:10px 25px 25px +} +@media only screen and (max-height:600px){ +.mega-dialog>section{ + flex-shrink:0 +} +} + +.cookie-dialog{ + display:flex; + margin:0 !important; + max-height:calc(100% - 30px); + max-width:596px; + text-align:center; + width:calc(100% - 30px); + z-index:9999 !important +} +.mobile .mega-dialog.cookie-dialog{ + max-width:596px; + overflow:visible +} +.cookie-dialog .content-block{ + border-radius:var(--border-radius); + display:none; + flex-direction:column; + font-size:0; + min-height:0; + width:100% +} +.cookie-dialog .content-block.active{ + display:flex +} +.cookie-dialog .scrollable-block{ + -webkit-overflow-scrolling:touch; + overflow:auto; + padding:0 48px; + position:relative +} +.cookie-dialog .step2 .scrollable-block{ + padding:0 30px +} +.cookie-dialog .bottom-buttons{ + background:var(--surface-grey-1); + border-bottom-left-radius:var(--border-radius); + border-bottom-right-radius:var(--border-radius); + padding:24px 48px; + position:relative +} +.cookie-dialog .step2 .bottom-buttons{ + height:60px; + padding:14px 30px +} +.rtl .cookie-dialog .bottom-buttons .right{ + float:left +} +.rtl .cookie-dialog .bottom-buttons .left{ + float:right +} +.cookie-dialog .bottom-buttons button{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.cookie-dialog .bottom-buttons button.left{ + -webkit-margin-end:8px; + margin:0; + margin-inline-end:8px +} +.cookie-dialog .scrollable-block.big-pad{ + padding:62px 50px +} +.cookie-dialog .cookie-icon{ + --width:120px; + height:120px; + margin:0 auto; + width:120px +} +.cookie-dialog .header{ + color:var(--text-color-high); + font:var(--text-h2); + padding:24px 0 0 +} +.cookie-dialog .common-info{ + color:var(--text-color-medium); + font:var(--text-body1); + padding:30px 0 0 +} +.cookie-dialog a.green,.cookie-dialog a.green:visited{ + color:var(--text-color-success); + overflow-wrap:break-word +} +.cookie-dialog .header.medium{ + font:var(--text-h2); + padding:12px 0 +} +.cookie-dialog .step2 .header.medium{ + font:var(--text-h3); + padding:29px 0 0 +} +.cookie-dialog .settings-tip{ + color:var(--text-color-low); + display:none; + font-size:13px; + line-height:20px; + margin:-22px auto 10px; + max-width:478px; + padding:0 24px +} +.cookie-dialog .step2 .settings-tip{ + margin-top:7px +} +.cookie-dialog .settings{ + border-collapse:collapse; + display:table; + width:100% +} +.cookie-dialog .settings-row{ + border-top:1px solid var(--stroke-grey-2); + display:table-row +} +.cookie-dialog .settings-row.hidden{ + display:none +} +.cookie-dialog .settings-row:first-child{ + border:0 +} +.cookie-dialog .settings-cell{ + display:table-cell; + line-height:0; + padding:12px 0 +} +.cookie-dialog .settings-cell:first-child{ + text-align:start; + vertical-align:bottom +} +.cookie-dialog .settings-cell.saved{ + background:var(--surface-grey-1); + display:none +} +.cookie-dialog .settings-header{ + color:var(--text-color-high); + font-family:var(--text-font-family-semibold); + font-size:15px; + line-height:22px +} +.cookie-dialog .settings-text{ + color:var(--text-color-low); + font-size:14px; + line-height:22px; + padding:10px 0 0 +} +.cookie-dialog .settings-cell a,.cookie-dialog .settings-cell a:active{ + color:var(--text-color-low); + display:inline-block; + font-size:14px; + line-height:22px; + margin:4px 0; + text-decoration:underline +} +.cookie-dialog .settings-cell a:visited{ + color:var(--text-color-low) +} +.cookie-dialog .toggle-header{ + color:var(--text-color-high); + display:none; + font-family:var(--text-font-family-semibold); + font-size:14px; + line-height:17px; + min-width:82px; + padding:2px 10px 10px +} +.cookie-dialog .mega-switch,.rtl .cookie-dialog .mega-switch{ + float:none +} +.cookie-dialog .mega-switch.disabled{ + cursor:default; + opacity:.5 +} +.cookie-dialog .settings-links{ + margin:10px 0 48px +} +.cookie-dialog a.settings-link{ + -webkit-margin-end:25px; + font-family:var(--text-font-family-semibold); + margin:10px 0 0; + margin-inline-end:25px +} +.cookie-dialog a.settings-link,.cookie-dialog a.settings-link:visited{ + color:var(--text-color-medium) +} +.cookie-dialog a.settings-link:active,.cookie-dialog a.settings-link:visited{ + margin-right:25px +} +.cookie-dialog a.settings-link:last-child{ + -webkit-margin-end:0; + margin-inline-end:0 +} +.cookie-dialog .tabs{ + display:none; + font-size:0; + padding:5px 0 0; + white-space:nowrap +} +.cookie-dialog .settings-tab{ + background:var(--surface-grey-1); + color:var(--text-color-medium); + display:inline-block; + font-size:14px; + height:44px; + line-height:44px; + vertical-align:top; + width:50% +} +.cookie-dialog .settings-tab.active{ + border-bottom:2px solid var(--stroke-success); + color:var(--text-color-success); + font-family:var(--text-font-family-semibold) +} +.active-saved-cookies .settings-tip,.active-saved-cookies .toggle-header{ + display:block +} +.active-saved-cookies .settings-cell.saved{ + display:table-cell +} +.cookie-dialog .info-block{ + color:var(--text-color-low); + font-size:14px; + line-height:22px; + padding:0 0 52px; + text-align:start +} +.cookie-dialog .header.small{ + font:var(--text-h3); + padding:0 0 4px +} +.cookie-dialog .info-block .category{ + color:var(--text-color-medium); + padding:0 0 7px +} +.cookie-dialog .info-block ul{ + list-style:none; + margin:0; + padding:0 +} +.cookie-dialog .info-block li:before{ + -webkit-margin-end:4px; + content:"\2022"; + display:inline-block; + margin-inline-end:4px; + vertical-align:top +} +.mobile .cookie-dialog .scrollable-block.big-pad{ + padding:40px 30px 20px +} +.mobile .cookie-dialog .scrollable-block{ + padding:0 20px +} +.mobile .cookie-dialog .settings-links{ + margin-bottom:0 +} +.mobile .cookie-dialog .toggle-header{ + display:none +} +.mobile .cookie-dialog .settings-cell.saved{ + background-color:initial +} +.mobile .active-saved-cookies .tabs{ + display:block +} +.mobile .cookie-dialog .info-block{ + padding:10px 0 28px +} +.mobile .cookie-dialog .bottom-buttons.pad{ + padding-bottom:30px +} +.mobile .cookie-dialog .bottom-buttons{ + background-color:initial; + box-shadow:none; + height:auto; + padding:26px 16px 12px +} +.mobile .cookie-dialog .bottom-buttons .mega-button{ + margin-bottom:8px; + width:100% +} +.mobile .cookie-banner .buttons .mega-button,.mobile .cookie-dialog .bottom-buttons .mega-button{ + background:linear-gradient(180deg, rgb(255 255 255), rgb(253 253 253)); + border-radius:4px; + box-shadow:0 1px 1px 0 rgb(0 0 0 / .07),inset 0 0 0 1px rgb(226 226 226); + color:var(--text-color-medium); + line-height:24px; + padding:6px 8px; + text-decoration:none +} +.mobile .cookie-dialog .bottom-buttons .mega-button:before{ + display:none +} +.mobile .cookie-banner .buttons .mega-button.positive,.mobile .cookie-dialog .bottom-buttons .mega-button.positive{ + background:linear-gradient(180deg, rgb(7 190 177), rgb(0 191 165)); + box-shadow:0 1px 1px 0 rgba(0 0 0 / .11),inset 0 2px 1px 0 rgba(255 255 255 / .2); + color:#fff; + line-height:24px; + padding:6px 8px +} +.mobile .cookie-dialog .bottom-buttons .mega-button.m-lnk{ + background:none; + box-shadow:none; + color:#818993; + font-size:12px; + height:36px; + line-height:36px; + text-decoration:underline +} +.mobile .cookie-dialog .bottom-buttons .mega-button.m-lnk:before{ + display:none +} +@media only screen and (max-width:625px),screen and (max-height:625px){ +.cookie-dialog .header,.cookie-dialog .header.medium{ + font-family:var(--text-font-family-semibold); + font-size:17px +} +.cookie-dialog .common-info{ + font-size:14px; + padding:15px 0 0 +} +.cookie-dialog .header.medium{ + padding:18px 0 +} +.cookie-dialog .settings-tip{ + margin-top:-14px +} +.cookie-dialog .settings-header{ + color:var(--text-color-high); + font-size:14px +} +.cookie-dialog .settings-row:first-child .settings-cell{ + padding:12px 0 +} +.cookie-dialog .settings-text{ + color:var(--text-color-medium); + font-size:13px; + line-height:16px; + padding:7px 0 0 +} +.cookie-dialog .settings-cell a,.cookie-dialog .settings-cell a:active{ + font-size:13px; + line-height:17px +} +.cookie-dialog .info-block{ + font-size:12px; + line-height:18px; + padding:10px 0 52px; + text-align:center +} +.cookie-dialog .header.small{ + font-size:14px; + padding:0 0 5px +} +.cookie-dialog .info-block .category{ + color:var(--text-color-high); + font-size:13px; + padding:0 0 16px +} +} +@media (hover:hover){ +.cookie-banner .buttons a:hover,.cookie-dialog a:hover{ + text-decoration:none +} +} + +.ui-resizable{ + position:relative +} +.ui-resizable-handle{ + display:block; + font-size:.1px; + position:absolute +} +.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{ + display:none +} +.ui-resizable-n{ + cursor:n-resize; + height:15px; + left:0; + top:-1px; + width:100% +} +.ui-resizable-s{ + bottom:-5px; + cursor:s-resize; + height:7px; + left:0; + width:100% +} +.ui-resizable-e{ + cursor:e-resize; + right:-5px +} +.ui-resizable-e,.ui-resizable-w{ + height:100%; + top:0; + width:7px +} +.ui-resizable-w{ + cursor:w-resize; + left:-5px +} +.ui-resizable-se{ + bottom:1px; + cursor:se-resize; + height:12px; + right:1px; + width:12px +} +.ui-resizable-sw{ + bottom:-5px; + cursor:sw-resize +} +.ui-resizable-nw,.ui-resizable-sw{ + height:9px; + left:-5px; + width:9px +} +.ui-resizable-nw{ + cursor:nw-resize; + top:-5px +} +.ui-resizable-ne{ + cursor:ne-resize; + height:9px; + right:-5px; + top:-5px; + width:9px +} +.ui-selectable-helper{ + background:var(--surface-highlight-2); + border:1px dotted var(--stroke-mid-grey); + position:absolute; + z-index:1250 +} diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/ACD9041D153990997396C19864F9E30D48481ED1 b/home/.surf/cache/WebKitCache/Version 16/Blobs/ACD9041D153990997396C19864F9E30D48481ED1 new file mode 100644 index 0000000..ac7d580 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/ACD9041D153990997396C19864F9E30D48481ED1 @@ -0,0 +1,38 @@ +(function(){var da=function(a){var b=0;return function(){return b>>0)+"_",d=0,e=function(f){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new b(c+(f||"")+"_"+d++,f)};return e}); +h("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c=e}});var ja=function(a,b){a instanceof String&&(a+="");var c=0,d=!1,e={next:function(){if(!d&&cc&&(c=Math.max(c+e,0));c>>0),ka=0,la=function(a,b){function c(){}c.prototype=b.prototype;a.H=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.G=function(d,e,f){for(var k=Array(arguments.length-2),m=2;m=e.value}if(a){d=d||B;a=H(I(),b.i());"function"===typeof c&&(c=c());C||(C=new pa);e=C;b=b.i();if(0f}f&&c.push(e)}return c},Va=function(){var a=Q.nonce;return void 0!==a?a&&a===String(a)&&a.match(Ta)?a:Q.nonce=null:K.querySelector?(a=K.querySelector("script[nonce]"))?(a=a.nonce||a.getAttribute("nonce")||"",a&&a===String(a)&&a.match(Ta)?Q.nonce=a:Q.nonce=null):null:null},Xa=function(a){if("loading"!=K.readyState)Wa(a); +else{var b=Va(),c="";null!==b&&(c=' nonce="'+b+'"');a="<"+Y+' src="'+encodeURI(a)+'"'+c+">";K.write(Z?Z.createHTML(a):a)}},Wa=function(a){var b=K.createElement(Y);b.setAttribute("src",Z?Z.createScriptURL(a):a);a=Va();null!==a&&b.setAttribute("nonce",a);b.async="true";(a=K.getElementsByTagName(Y)[0])?a.parentNode.insertBefore(b,a):(K.head||K.body||K.documentElement).appendChild(b)},Za=function(a,b,c){Ya(function(){var d=b===Ba()?L(P,"_",M()):M();d=L(R(b),"_",d);a(d)},c)},ab=function(a,b){var c= +b||{};"function"==typeof b&&(c={},c.callback=b);var d=(b=c)&&b._c;if(d)for(var e=0;e=a.length||(a=a.substr(b).split(":").filter(function(d){return!["api","platform"].includes(d)}),c.features=a))}]);Da.bs0=window.gapi._bs||(new Date).getTime();T("bs0");Da.bs1=(new Date).getTime();T("bs1");delete window.gapi._bs;window.gapi.load("",{callback:window["gapi_onload"],_c:{url:"https://apis.google.com/js/api.js",jsl:{ci:{"oauth-flow":{authUrl:"https://accounts.google.com/o/oauth2/auth",proxyUrl:"https://accounts.google.com/o/oauth2/postmessageRelay",disableOpt:!0,idpIframeUrl:"https://accounts.google.com/o/oauth2/iframe",usegapi:!1},debug:{reportExceptionRate:1,forceIm:!1,rethrowException:!0,host:"https://apis.google.com"},enableMultilogin:!0,"googleapis.config":{auth:{useFirstPartyAuthV2:!0},root:"https://content.googleapis.com","root-1p":"https://clients6.google.com"},inline:{css:1}, +disableRealtimeCallback:!1,drive_share:{skipInitCommand:!0},csi:{rate:.01},client:{cors:!1},signInDeprecation:{rate:0},include_granted_scopes:!0,llang:"es",iframes:{youtube:{params:{location:["search","hash"]},url:":socialhost:/:session_prefix:_/widget/render/youtube?usegapi=1",methods:["scroll","openwindow"]},ytsubscribe:{url:"https://www.youtube.com/subscribe_embed?usegapi=1"},plus_circle:{params:{url:""},url:":socialhost:/:session_prefix::se:_/widget/plus/circle?usegapi=1"},plus_share:{params:{url:""}, +url:":socialhost:/:session_prefix::se:_/+1/sharebutton?plusShare=true&usegapi=1"},rbr_s:{params:{url:""},url:":socialhost:/:session_prefix::se:_/widget/render/recobarsimplescroller"},":source:":"3p",playemm:{url:"https://play.google.com/work/embedded/search?usegapi=1&usegapi=1"},savetoandroidpay:{url:"https://pay.google.com/gp/v/widget/save"},blogger:{params:{location:["search","hash"]},url:":socialhost:/:session_prefix:_/widget/render/blogger?usegapi=1",methods:["scroll","openwindow"]},evwidget:{params:{url:""}, +url:":socialhost:/:session_prefix:_/events/widget?usegapi=1"},partnersbadge:{url:"https://www.gstatic.com/partners/badge/templates/badge.html?usegapi=1"},dataconnector:{url:"https://dataconnector.corp.google.com/:session_prefix:ui/widgetview?usegapi=1"},surveyoptin:{url:"https://www.google.com/shopping/customerreviews/optin?usegapi=1"},":socialhost:":"https://apis.google.com",shortlists:{url:""},hangout:{url:"https://talkgadget.google.com/:session_prefix:talkgadget/_/widget"},plus_followers:{params:{url:""}, +url:":socialhost:/_/im/_/widget/render/plus/followers?usegapi=1"},post:{params:{url:""},url:":socialhost:/:session_prefix::im_prefix:_/widget/render/post?usegapi=1"},signin:{params:{url:""},url:":socialhost:/:session_prefix:_/widget/render/signin?usegapi=1",methods:["onauth"]},rbr_i:{params:{url:""},url:":socialhost:/:session_prefix::se:_/widget/render/recobarinvitation"},share:{url:":socialhost:/:session_prefix::im_prefix:_/widget/render/share?usegapi=1"},plusone:{params:{count:"",size:"",url:""}, +url:":socialhost:/:session_prefix::se:_/+1/fastbutton?usegapi=1"},comments:{params:{location:["search","hash"]},url:":socialhost:/:session_prefix:_/widget/render/comments?usegapi=1",methods:["scroll","openwindow"]},":im_socialhost:":"https://plus.googleapis.com",backdrop:{url:"https://clients3.google.com/cast/chromecast/home/widget/backdrop?usegapi=1"},visibility:{params:{url:""},url:":socialhost:/:session_prefix:_/widget/render/visibility?usegapi=1"},autocomplete:{params:{url:""},url:":socialhost:/:session_prefix:_/widget/render/autocomplete"}, +":signuphost:":"https://plus.google.com",ratingbadge:{url:"https://www.google.com/shopping/customerreviews/badge?usegapi=1"},appcirclepicker:{url:":socialhost:/:session_prefix:_/widget/render/appcirclepicker"},follow:{url:":socialhost:/:session_prefix:_/widget/render/follow?usegapi=1"},community:{url:":ctx_socialhost:/:session_prefix::im_prefix:_/widget/render/community?usegapi=1"},sharetoclassroom:{url:"https://classroom.google.com/sharewidget?usegapi=1"},ytshare:{params:{url:""},url:":socialhost:/:session_prefix:_/widget/render/ytshare?usegapi=1"}, +plus:{url:":socialhost:/:session_prefix:_/widget/render/badge?usegapi=1"},family_creation:{params:{url:""},url:"https://families.google.com/webcreation?usegapi=1&usegapi=1"},commentcount:{url:":socialhost:/:session_prefix:_/widget/render/commentcount?usegapi=1"},configurator:{url:":socialhost:/:session_prefix:_/plusbuttonconfigurator?usegapi=1"},zoomableimage:{url:"https://ssl.gstatic.com/microscope/embed/"},appfinder:{url:"https://workspace.google.com/:session_prefix:marketplace/appfinder?usegapi=1"},savetowallet:{url:"https://pay.google.com/gp/v/widget/save"}, +person:{url:":socialhost:/:session_prefix:_/widget/render/person?usegapi=1"},savetodrive:{url:"https://drive.google.com/savetodrivebutton?usegapi=1",methods:["save"]},page:{url:":socialhost:/:session_prefix:_/widget/render/page?usegapi=1"},card:{url:":socialhost:/:session_prefix:_/hovercard/card"}}},h:"m;/_/scs/abc-static/_/js/k=gapi.lb.es.TMNQlWGu74E.O/d=1/rs=AHpOoo9xdx1sQ-1KZhDqZE1rtKj2BTe_gQ/m=__features__",u:"https://apis.google.com/js/api.js",hee:!0,dpo:!1,le:["scs"],glrp:false},platform:"backdrop blogger comments commentcount community donation family_creation follow hangout health page partnersbadge person playemm playreview plus plusone post ratingbadge savetoandroidpay savetodrive savetowallet sharetoclassroom shortlists signin2 surveyoptin visibility youtube ytsubscribe zoomableimage".split(" "), +annotation:["interactivepost","recobar","signin2","autocomplete"]}});}).call(this); diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/ACE990C8C5AD4869F3355F18EE75E83DA2C57B9A b/home/.surf/cache/WebKitCache/Version 16/Blobs/ACE990C8C5AD4869F3355F18EE75E83DA2C57B9A new file mode 100644 index 0000000..95fc8f6 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/ACE990C8C5AD4869F3355F18EE75E83DA2C57B9A differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/AE112FFCC5CDAB03CE3A7EED26A93FEC8822C83A b/home/.surf/cache/WebKitCache/Version 16/Blobs/AE112FFCC5CDAB03CE3A7EED26A93FEC8822C83A new file mode 100644 index 0000000..302807e --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/AE112FFCC5CDAB03CE3A7EED26A93FEC8822C83A @@ -0,0 +1,231 @@ +/*1673114907,,JIT Construction: v1006796593,en_US*/ + +/** + * Copyright (c) 2017-present, Facebook, Inc. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Facebook. + * + * As with any software that integrates with the Facebook platform, your use of + * this software is subject to the Facebook Platform Policy + * [http://developers.facebook.com/policy/]. This copyright 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. + */ +try {(window.FB && !window.FB.__buffer) || (function() { var apply = Function.prototype.apply; function bindContext(fn, thisArg) { return function _sdkBound() { return apply.call(fn, thisArg, arguments); }; } var global = { __type: 'JS_SDK_SANDBOX', window: window, document: window.document }; var sandboxSafelist = [ 'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval' ]; for (var i = 0; i < sandboxSafelist.length; i++) { global[sandboxSafelist[i]] = bindContext( window[sandboxSafelist[i]], window ); } (function() { var self = window; var __DEV__ = 0; function emptyFunction() {}; var __transform_includes = {}; var __annotator, __bodyWrapper; var __w, __t; var undefined; with (this) { (function(){var a={},b=function(a,b){if(!a&&!b)return null;var c={};typeof a!=="undefined"&&(c.type=a);typeof b!=="undefined"&&(c.signature=b);return c},c=function(a,c){return b(a&&/^[A-Z]/.test(a)?a:void 0,c&&(c.params&&c.params.length||c.returns)?"function("+(c.params?c.params.map(function(a){return/\?/.test(a)?"?"+a.replace("?",""):a}).join(","):"")+")"+(c.returns?":"+c.returns:""):void 0)},d=function(a,b,c){return a},e=function(a,b,d){"sourcemeta"in __transform_includes&&(a.__SMmeta=b);if("typechecks"in __transform_includes){b=c(b?b.name:void 0,d);b&&__w(a,b)}return a},f=function(a,b,c){return c.apply(a,b)},g=function(a,b,c,d){d&&d.params&&__t.apply(a,d.params);c=c.apply(a,b);d&&d.returns&&__t([c,d.returns]);return c};g=function(b,c,d,e,f){if(f){f.callId||(f.callId=f.module+":"+(f.line||0)+":"+(f.column||0));e=f.callId;a[e]=(a[e]||0)+1}return d.apply(b,c)};typeof __transform_includes==="undefined"?(__annotator=d,__bodyWrapper=f):(__annotator=e,"codeusage"in __transform_includes?(__annotator=d,__bodyWrapper=g,__bodyWrapper.getCodeUsage=function(){return a},__bodyWrapper.clearCodeUsage=function(){a={}}):"typechecks"in __transform_includes?__bodyWrapper=f:__bodyWrapper=f)})(); +__t=function(a){return a[0]},__w=function(a){return a}; +(function(a){var b={},c=["global","require","requireDynamic","requireLazy","module","exports"],d=["global","require","importDefault","importNamespace","requireLazy","module","exports"],e=1,f=32,g=64,h={},i=Object.prototype.hasOwnProperty;function j(e,h){if(!i.call(b,e)){if(h)return null;throw new Error("Module "+e+" has not been defined")}h=b[e];if(h.resolved)return h;e=h.special;var j=h.factory.length,n=e&f?d.concat(h.deps):c.concat(h.deps),o=[],p;for(var q=0;q1?Number(arguments[1]):0;isNaN(c)&&(c=0);var d=Math.min(Math.max(c,0),b.length);return b.indexOf(String(a),c)==d},endsWith:function(a){var b=String(this);if(this==null)throw new TypeError("String.prototype.endsWith called on null or undefined");var c=b.length,d=String(a),e=arguments.length>1?Number(arguments[1]):c;isNaN(e)&&(e=0);var f=Math.min(Math.max(e,0),c),g=f-d.length;return g<0?!1:b.lastIndexOf(d,g)==g},includes:function(a){if(this==null)throw new TypeError("String.prototype.contains called on null or undefined");var b=String(this),c=arguments.length>1?Number(arguments[1]):0;isNaN(c)&&(c=0);return b.indexOf(String(a),c)!=-1},repeat:function(a){if(this==null)throw new TypeError("String.prototype.repeat called on null or undefined");var b=String(this);a=a?Number(a):0;isNaN(a)&&(a=0);if(a<0||a===Infinity)throw RangeError();if(a===1)return b;if(a===0)return"";var c="";while(a)a&1&&(c+=b),(a>>=1)&&(b+=b);return c}};b=a;f["default"]=b}),66); +__d("ES6Array",[],(function(a,b,c,d,e,f){"use strict";a={from:function(a){if(a==null)throw new TypeError("Object is null or undefined");var b=arguments[1],c=arguments[2],d=this,e=Object(a),f=typeof Symbol==="function"&&navigator.userAgent.indexOf("Trident/7.0")===-1?typeof Symbol==="function"?Symbol.iterator:"@@iterator":"@@iterator",g=typeof b==="function",h=typeof e[f]==="function",i=0,j,k;if(h){j=typeof d==="function"?new d():[];var l=e[f](),m;while(!(m=l.next()).done)k=m.value,g&&(k=b.call(c,k,i)),j[i]=k,i+=1;j.length=i;return j}var n=e.length;(isNaN(n)||n<0)&&(n=0);j=typeof d==="function"?new d(n):new Array(n);while(i>>0;for(var e=0;e>>0,f=arguments[1],g=f>>0,h=g<0?Math.max(e+g,0):Math.min(g,e),i=arguments[2],j=i===void 0?e:i>>0,k=j<0?Math.max(e+j,0):Math.min(j,e);while(h=this.MIN_SAFE_INTEGER&&a<=this.MAX_SAFE_INTEGER&&Math.floor(a)===a},EPSILON:a,MAX_SAFE_INTEGER:b,MIN_SAFE_INTEGER:c};e=d;f["default"]=e}),66); +__d("ES6Object",[],(function(a,b,c,d,e,f){var g={}.hasOwnProperty;a={assign:function(a){if(a==null)throw new TypeError("Object.assign target cannot be null or undefined");a=Object(a);for(var b=0;b<(arguments.length<=1?0:arguments.length-1);b++){var c=b+1<1||arguments.length<=b+1?void 0:arguments[b+1];if(c==null)continue;c=Object(c);for(var d in c)g.call(c,d)&&(a[d]=c[d])}return a},is:function(a,b){if(a===b)return a!==0||1/a===1/b;else return a!==a&&b!==b}};b=a;f["default"]=b}),66); +__d("ES5Array",[],(function(a,b,c,d,e,f){a={isArray:function(a){return Object.prototype.toString.call(a)=="[object Array]"}};b=a;f["default"]=b}),66); +__d("ES5ArrayPrototype",[],(function(a,b,c,d,e,f){a={indexOf:function(a,b){b=b;var c=this.length;b|=0;b<0&&(b+=c);for(;b=0?1:-1}a={includes:function(a){"use strict";if(a!==void 0&&g(this)&&!(typeof a==="number"&&isNaN(a)))return h.apply(this,arguments)!==-1;var b=Object(this),c=b.length?i(b.length):0;if(c===0)return!1;var d=arguments.length>1?j(arguments[1]):0,e=d<0?Math.max(c+d,0):d,f=isNaN(a)&&typeof a==="number";while(e1)))/4)-A((a-1901+b)/100)+A((a-1601+b)/400)};(o=b.hasOwnProperty)||(o=function(a){var b={},c;(b.__proto__=null,b.__proto__={toString:1},b).toString!=n?o=function(a){var b=this.__proto__;a=a in(this.__proto__=null,this);this.__proto__=b;return a}:(c=b.constructor,o=function(a){var b=(this.constructor||c).prototype;return a in this&&!(a in b&&this[a]===b[a])});return o.call(this,a)});p=function(a,b){var d=0,e,f;(e=function(){this.valueOf=0}).prototype.valueOf=0;f=new e();for(e in f)o.call(f,e)&&d++;f=null;!d?(f=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],p=function(a,b){var d=n.call(a)==t,e,g=!d&&typeof a.constructor!="function"&&c[typeof a.hasOwnProperty]&&a.hasOwnProperty||o;for(e in a)!(d&&e=="prototype")&&g.call(a,e)&&b(e);for(d=f.length;e=f[--d];g.call(a,e)&&b(e));}):d==2?p=function(a,b){var c={},d=n.call(a)==t,e;for(e in a)!(d&&e=="prototype")&&!o.call(c,e)&&(c[e]=1)&&o.call(a,e)&&b(e)}:p=function(a,b){var c=n.call(a)==t,d,e;for(d in a)!(c&&d=="prototype")&&o.call(a,d)&&!(e=d==="constructor")&&b(d);(e||o.call(a,d="constructor"))&&b(d)};return p(a,b)};if(!s("json-stringify")){var D={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},E="000000",F=function(a,b){return(E+(b||0)).slice(-a)},G="\\u00",H=function(a){var b='"',c=0,d=a.length,e=!z||d>10,f=e&&(z?a.split(""):a);for(;c-1/0&&h<1/0){if(C){m=A(h/864e5);for(j=A(m/365.2425)+1970-1;C(j+1,0)<=m;j++);for(k=A((m-C(j,0))/30.42);C(j,k+1)<=m;k++);m=1+m-C(j,k);r=(h%864e5+864e5)%864e5;s=A(r/36e5)%24;t=A(r/6e4)%60;z=A(r/1e3)%60;r=r%1e3}else j=h.getUTCFullYear(),k=h.getUTCMonth(),m=h.getUTCDate(),s=h.getUTCHours(),t=h.getUTCMinutes(),z=h.getUTCSeconds(),r=h.getUTCMilliseconds();h=(j<=0||j>=1e4?(j<0?"-":"+")+F(6,j<0?-j:j):F(4,j))+"-"+F(2,k+1)+"-"+F(2,m)+"T"+F(2,s)+":"+F(2,t)+":"+F(2,z)+"."+F(3,r)+"Z"}else h=null;else typeof h.toJSON=="function"&&(i!=v&&i!=w&&i!=x||o.call(h,"toJSON"))&&(h=h.toJSON(a))}c&&(h=c.call(b,a,h));if(h===null)return"null";i=n.call(h);if(i==y)return""+h;else if(i==v)return h>-1/0&&h<1/0?""+h:"null";else if(i==w)return H(""+h);if(typeof h=="object"){for(j=g.length;j--;)if(g[j]===h)throw l();g.push(h);B=[];k=f;f+=e;if(i==x){for(m=0,j=h.length;m0)for(e="",d>10&&(d=10);e.length=48&&g<=57||g>=97&&g<=102||g>=65&&g<=70||N();c+=J("0x"+a.slice(d,L));break;default:N()}}else{if(g==34)break;g=a.charCodeAt(L);d=L;while(g>=32&&g!=92&&g!=34)g=a.charCodeAt(++L);c+=a.slice(d,L)}}if(a.charCodeAt(L)==34){L++;return c}N();default:d=L;g==45&&(f=!0,g=a.charCodeAt(++L));if(g>=48&&g<=57){g==48&&(g=a.charCodeAt(L+1),g>=48&&g<=57)&&N();f=!1;for(;L=48&&g<=57);L++);if(a.charCodeAt(L)==46){e=++L;for(;e=48&&g<=57);e++);e==L&&N();L=e}g=a.charCodeAt(L);if(g==101||g==69){g=a.charCodeAt(++L);(g==43||g==45)&&L++;for(e=L;e=48&&g<=57);e++);e==L&&N();L=e}return+a.slice(d,L)}f&&N();if(a.slice(L,L+4)=="true"){L+=4;return!0}else if(a.slice(L,L+5)=="false"){L+=5;return!1}else if(a.slice(L,L+4)=="null"){L+=4;return null}N()}}return"$"},P=function(a){var b,c;a=="$"&&N();if(typeof a=="string"){if((z?a.charAt(0):a[0])=="@")return a.slice(1);if(a=="["){b=[];for(;;c||(c=!0)){a=O();if(a=="]")break;c&&(a==","?(a=O(),a=="]"&&N()):N());a==","&&N();b.push(P(a))}return b}else if(a=="{"){b={};for(;;c||(c=!0)){a=O();if(a=="}")break;c&&(a==","?(a=O(),a=="}"&&N()):N());(a==","||typeof a!="string"||(z?a.charAt(0):a[0])!="@"||O()!=":")&&N();b[a.slice(1)]=P(O())}return b}N()}return a},Q=function(a,b,c){c=R(a,b,c);c===q?delete a[b]:a[b]=c},R=function(a,b,c){var d=a[b],e;if(typeof d=="object"&&d)if(n.call(d)==x)for(e=d.length;e--;)Q(d,e,c);else p(d,function(a){Q(d,a,c)});return c.call(a,b,d)};a.parse=function(a,b){var c;L=0;M=""+a;a=P(O());O()!="$"&&N();L=M=null;return b&&n.call(b)==t?R((c={},c[""]=a,c),"",b):a}}}a.runInContext=k;return a}if(d&&!b)k(e,d);else{var l=e.JSON,m=e.JSON3,n=!1,o=k(e,e.JSON3={noConflict:function(){n||(n=!0,e.JSON=l,e.JSON3=m,l=m=null);return o}});e.JSON={parse:o.parse,stringify:o.stringify}}b&&i(function(){return o})}).call(this)}var k=!1;function l(){k||(k=!0,j());return h.exports}function b(a){switch(a){case void 0:return l()}}e.exports=b}),null); +__d("json3",["json3-3.3.2"],(function(a,b,c,d,e,f){e.exports=b("json3-3.3.2")()}),null); +__d("ES",["ES5FunctionPrototype","ES5StringPrototype","ES6Array","ES6ArrayPrototype","ES6Number","ES6Object","ES7ArrayPrototype","ES7Object","ES7StringPrototype","json3"],(function(a,b,c,d,e,f,g){var h={}.toString,i={"JSON.stringify":c("json3").stringify,"JSON.parse":c("json3").parse};d={"Function.prototype":c("ES5FunctionPrototype"),"String.prototype":c("ES5StringPrototype")};e={Object:c("ES6Object"),"Array.prototype":c("ES6ArrayPrototype"),Number:c("ES6Number"),Array:c("ES6Array")};f={Object:c("ES7Object"),"String.prototype":c("ES7StringPrototype"),"Array.prototype":c("ES7ArrayPrototype")};function a(a){for(var b in a){if(!Object.prototype.hasOwnProperty.call(a,b))continue;var c=a[b],d=b.split(".");if(d.length===2){var e=d[0],f=d[1];if(!e||!f||!window[e]||!window[e][f]){var g=e?window[e]:"-",h=e&&window[e]&&f?window[e][f]:"-";throw new Error("Unexpected state (t11975770): "+(e+", "+f+", "+g+", "+h+", "+b))}}e=d.length===2?window[d[0]][d[1]]:window[b];for(f in c){if(!Object.prototype.hasOwnProperty.call(c,f))continue;if(typeof c[f]!=="function"){i[b+"."+f]=c[f];continue}g=e[f];i[b+"."+f]=g&&/\{\s+\[native code\]\s\}/.test(g)?g:c[f]}}}a(d);a(e);a(f);function b(a,b,c){var d=c?h.call(a).slice(8,-1)+".prototype":a,e;if(Array.isArray(a))if(typeof d==="string")e=i[d+"."+b];else throw new Error("Can't polyfill "+b+" directly on an Array.");else if(typeof d==="string")e=i[d+"."+b];else if(typeof a==="string")throw new Error("Can't polyfill "+b+" directly on a string.");else e=a[b];if(typeof e==="function"){for(var f=arguments.length,g=new Array(f>3?f-3:0),j=3;j=0)continue;c[d]=a[d]}return c};g.objectWithoutProperties=g.objectWithoutPropertiesLoose;g.taggedTemplateLiteralLoose=function(a,b){b||(b=a.slice(0));a.raw=b;return a};g.bind=b("ES5FunctionPrototype").bind;e.exports=g}),null);var ES=require('ES');var babelHelpers=require('sdk.babelHelpers');(function(a,b){var c="keys",d="values",e="entries",f=function(){var a=h(Array),b;a||(b=function(){"use strict";function a(a,b){this.$1=a,this.$2=b,this.$3=0}var b=a.prototype;b.next=function(){if(this.$1==null)return{value:void 0,done:!0};var a=this.$1,b=this.$1.length,f=this.$3,g=this.$2;if(f>=b){this.$1=void 0;return{value:void 0,done:!0}}this.$3=f+1;if(g===c)return{value:f,done:!1};else if(g===d)return{value:a[f],done:!1};else if(g===e)return{value:[f,a[f]],done:!1}};b[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]=function(){return this};return a}());return{keys:a?function(a){return a.keys()}:function(a){return new b(a,c)},values:a?function(a){return a.values()}:function(a){return new b(a,d)},entries:a?function(a){return a.entries()}:function(a){return new b(a,e)}}}(),g=function(){var a=h(String),b;a||(b=function(){"use strict";function a(a){this.$1=a,this.$2=0}var b=a.prototype;b.next=function(){if(this.$1==null)return{value:void 0,done:!0};var a=this.$2,b=this.$1,c=b.length;if(a>=c){this.$1=void 0;return{value:void 0,done:!0}}var d=b.charCodeAt(a);if(d<55296||d>56319||a+1===c)d=b[a];else{c=b.charCodeAt(a+1);c<56320||c>57343?d=b[a]:d=b[a]+b[a+1]}this.$2=a+d.length;return{value:d,done:!1}};b[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]=function(){return this};return a}());return{keys:function(){throw TypeError("Strings default iterator doesn't implement keys.")},values:a?function(a){return a[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]()}:function(a){return new b(a)},entries:function(){throw TypeError("Strings default iterator doesn't implement entries.")}}}();function h(a){return typeof a.prototype[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]==="function"&&typeof a.prototype.values==="function"&&typeof a.prototype.keys==="function"&&typeof a.prototype.entries==="function"}var i=function(){"use strict";function a(a,b){this.$1=a,this.$2=b,this.$3=Object.keys(a),this.$4=0}var b=a.prototype;b.next=function(){var a=this.$3.length,b=this.$4,f=this.$2,g=this.$3[b];if(b>=a){this.$1=void 0;return{value:void 0,done:!0}}this.$4=b+1;if(f===c)return{value:g,done:!1};else if(f===d)return{value:this.$1[g],done:!1};else if(f===e)return{value:[g,this.$1[g]],done:!1}};b[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]=function(){return this};return a}(),j={keys:function(a){return new i(a,c)},values:function(a){return new i(a,d)},entries:function(a){return new i(a,e)}};function k(a,b){if(typeof a==="string")return g[b||d](a);else if(Array.isArray(a))return f[b||d](a);else if(a[typeof Symbol==="function"?Symbol.iterator:"@@iterator"])return a[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]();else return j[b||e](a)}ES("Object","assign",!1,k,{KIND_KEYS:c,KIND_VALUES:d,KIND_ENTRIES:e,keys:function(a){return k(a,c)},values:function(a){return k(a,d)},entries:function(a){return k(a,e)},generic:j.entries});a.FB_enumerate=k})(typeof global==="undefined"?this:global); +(function(a,b){var c=a.window||a;function d(){return"f"+(Math.random()*(1<<30)).toString(16).replace(".","")}function e(a){var b=a?a.ownerDocument||a:document;b=b.defaultView||c;return!!(a&&(typeof b.Node==="function"?a instanceof b.Node:typeof a==="object"&&typeof a.nodeType==="number"&&typeof a.nodeName==="string"))}function f(a){a=c[a];if(a==null)return!0;if(typeof c.Symbol!=="function")return!0;var b=a.prototype;return a==null||typeof a!=="function"||typeof b.clear!=="function"||new a().size!==0||typeof b.keys!=="function"||typeof b.forEach!=="function"}var g=a.FB_enumerate,h=function(){if(!f("Map"))return c.Map;var b="key",i="value",j="key+value",k="$map_",l,m="IE_HASH_",a=function(){"use strict";function a(a){if(!r(this))throw new TypeError("Wrong map object type.");q(this);if(a!=null){a=g(a);var b;while(!(b=a.next()).done){if(!r(b.value))throw new TypeError("Expected iterable items to be pair objects.");this.set(b.value[0],b.value[1])}}}var c=a.prototype;c.clear=function(){q(this)};c.has=function(a){a=o(this,a);return!!(a!=null&&this._mapData[a])};c.set=function(a,b){var c=o(this,a);c!=null&&this._mapData[c]?this._mapData[c][1]=b:(c=this._mapData.push([a,b])-1,p(this,a,c),this.size+=1);return this};c.get=function(a){a=o(this,a);if(a==null)return void 0;else return this._mapData[a][1]};c["delete"]=function(a){var b=o(this,a);if(b!=null&&this._mapData[b]){p(this,a,void 0);this._mapData[b]=void 0;this.size-=1;return!0}else return!1};c.entries=function(){return new n(this,j)};c.keys=function(){return new n(this,b)};c.values=function(){return new n(this,i)};c.forEach=function(a,b){if(typeof a!=="function")throw new TypeError("Callback must be callable.");a=ES(a,"bind",!0,b||void 0);b=this._mapData;for(var c=0;cdiv{overflow:hidden}\u0040keyframes fb_transform{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.fb_animate{animation:fb_transform .3s forwards}\n.fb_hidden{position:absolute;top:-10000px;z-index:10001}.fb_reposition{overflow:hidden;position:relative}.fb_invisible{display:none}.fb_reset{background:none;border:0;border-spacing:0;color:#000;cursor:auto;direction:ltr;font-family:'lucida grande', tahoma, verdana, arial, sans-serif;font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:1;margin:0;overflow:visible;padding:0;text-align:left;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-spacing:normal}.fb_reset>div{overflow:hidden}\u0040keyframes fb_transform{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.fb_animate{animation:fb_transform .3s forwards}\n.fb_dialog{background:rgba(82, 82, 82, .7);position:absolute;top:-10000px;z-index:10001}.fb_dialog_advanced{border-radius:8px;padding:10px}.fb_dialog_content{background:#fff;color:#373737}.fb_dialog_close_icon{background:url(https:\/\/z-p3-static.xx.fbcdn.net\/rsrc.php\/v3\/yq\/r\/IE9JII6Z1Ys.png) no-repeat scroll 0 0 transparent;cursor:pointer;display:block;height:15px;position:absolute;right:18px;top:17px;width:15px}.fb_dialog_mobile .fb_dialog_close_icon{left:5px;right:auto;top:5px}.fb_dialog_padding{background-color:transparent;position:absolute;width:1px;z-index:-1}.fb_dialog_close_icon:hover{background:url(https:\/\/z-p3-static.xx.fbcdn.net\/rsrc.php\/v3\/yq\/r\/IE9JII6Z1Ys.png) no-repeat scroll 0 -15px transparent}.fb_dialog_close_icon:active{background:url(https:\/\/z-p3-static.xx.fbcdn.net\/rsrc.php\/v3\/yq\/r\/IE9JII6Z1Ys.png) no-repeat scroll 0 -30px transparent}.fb_dialog_iframe{line-height:0}.fb_dialog_content .dialog_title{background:#6d84b4;border:1px solid #365899;color:#fff;font-size:14px;font-weight:bold;margin:0}.fb_dialog_content .dialog_title>span{background:url(https:\/\/z-p3-static.xx.fbcdn.net\/rsrc.php\/v3\/yd\/r\/Cou7n-nqK52.gif) no-repeat 5px 50\u0025;float:left;padding:5px 0 7px 26px}body.fb_hidden{height:100\u0025;left:0;margin:0;overflow:visible;position:absolute;top:-10000px;transform:none;width:100\u0025}.fb_dialog.fb_dialog_mobile.loading{background:url(https:\/\/z-p3-static.xx.fbcdn.net\/rsrc.php\/v3\/ya\/r\/3rhSv5V8j3o.gif) white no-repeat 50\u0025 50\u0025;min-height:100\u0025;min-width:100\u0025;overflow:hidden;position:absolute;top:0;z-index:10001}.fb_dialog.fb_dialog_mobile.loading.centered{background:none;height:auto;min-height:initial;min-width:initial;width:auto}.fb_dialog.fb_dialog_mobile.loading.centered #fb_dialog_loader_spinner{width:100\u0025}.fb_dialog.fb_dialog_mobile.loading.centered .fb_dialog_content{background:none}.loading.centered #fb_dialog_loader_close{clear:both;color:#fff;display:block;font-size:18px;padding-top:20px}#fb-root #fb_dialog_ipad_overlay{background:rgba(0, 0, 0, .4);bottom:0;left:0;min-height:100\u0025;position:absolute;right:0;top:0;width:100\u0025;z-index:10000}#fb-root #fb_dialog_ipad_overlay.hidden{display:none}.fb_dialog.fb_dialog_mobile.loading iframe{visibility:hidden}.fb_dialog_mobile .fb_dialog_iframe{position:sticky;top:0}.fb_dialog_content .dialog_header{background:linear-gradient(from(#738aba), to(#2c4987));border-bottom:1px solid;border-color:#043b87;box-shadow:white 0 1px 1px -1px inset;color:#fff;font:bold 14px Helvetica, sans-serif;text-overflow:ellipsis;text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0;vertical-align:middle;white-space:nowrap}.fb_dialog_content .dialog_header table{height:43px;width:100\u0025}.fb_dialog_content .dialog_header td.header_left{font-size:12px;padding-left:5px;vertical-align:middle;width:60px}.fb_dialog_content .dialog_header td.header_right{font-size:12px;padding-right:5px;vertical-align:middle;width:60px}.fb_dialog_content .touchable_button{background:linear-gradient(from(#4267B2), to(#2a4887));background-clip:padding-box;border:1px solid #29487d;border-radius:3px;display:inline-block;line-height:18px;margin-top:3px;max-width:85px;padding:4px 12px;position:relative}.fb_dialog_content .dialog_header .touchable_button input{background:none;border:none;color:#fff;font:bold 12px Helvetica, sans-serif;margin:2px -12px;padding:2px 6px 3px 6px;text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0}.fb_dialog_content .dialog_header .header_center{color:#fff;font-size:16px;font-weight:bold;line-height:18px;text-align:center;vertical-align:middle}.fb_dialog_content .dialog_content{background:url(https:\/\/z-p3-static.xx.fbcdn.net\/rsrc.php\/v3\/y9\/r\/jKEcVPZFk-2.gif) no-repeat 50\u0025 50\u0025;border:1px solid #4a4a4a;border-bottom:0;border-top:0;height:150px}.fb_dialog_content .dialog_footer{background:#f5f6f7;border:1px solid #4a4a4a;border-top-color:#ccc;height:40px}#fb_dialog_loader_close{float:left}.fb_dialog.fb_dialog_mobile .fb_dialog_close_icon{visibility:hidden}#fb_dialog_loader_spinner{animation:rotateSpinner 1.2s linear infinite;background-color:transparent;background-image:url(https:\/\/z-p3-static.xx.fbcdn.net\/rsrc.php\/v3\/yD\/r\/t-wz8gw1xG1.png);background-position:50\u0025 50\u0025;background-repeat:no-repeat;height:24px;width:24px}\u0040keyframes rotateSpinner{0\u0025{transform:rotate(0deg)}100\u0025{transform:rotate(360deg)}}\n.fb_iframe_widget{display:inline-block;position:relative}.fb_iframe_widget span{display:inline-block;position:relative;text-align:justify}.fb_iframe_widget iframe{position:absolute}.fb_iframe_widget_fluid_desktop,.fb_iframe_widget_fluid_desktop span,.fb_iframe_widget_fluid_desktop iframe{max-width:100\u0025}.fb_iframe_widget_fluid_desktop iframe{min-width:220px;position:relative}.fb_iframe_widget_lift{z-index:1}.fb_iframe_widget_fluid{display:inline}.fb_iframe_widget_fluid span{width:100\u0025}\n.fb_mpn_mobile_landing_page_slide_out{animation-duration:200ms;animation-name:fb_mpn_landing_page_slide_out;transition-timing-function:ease-in}.fb_mpn_mobile_landing_page_slide_out_from_left{animation-duration:200ms;animation-name:fb_mpn_landing_page_slide_out_from_left;transition-timing-function:ease-in}.fb_mpn_mobile_landing_page_slide_up{animation-duration:500ms;animation-name:fb_mpn_landing_page_slide_up;transition-timing-function:ease-in}.fb_mpn_mobile_bounce_in{animation-duration:300ms;animation-name:fb_mpn_bounce_in;transition-timing-function:ease-in}.fb_mpn_mobile_bounce_out{animation-duration:300ms;animation-name:fb_mpn_bounce_out;transition-timing-function:ease-in}.fb_mpn_mobile_bounce_out_v2{animation-duration:300ms;animation-name:fb_mpn_fade_out;transition-timing-function:ease-in}.fb_customer_chat_bounce_in_v2{animation-duration:300ms;animation-name:fb_bounce_in_v2;transition-timing-function:ease-in}.fb_customer_chat_bounce_in_from_left{animation-duration:300ms;animation-name:fb_bounce_in_from_left;transition-timing-function:ease-in}.fb_customer_chat_bounce_out_v2{animation-duration:300ms;animation-name:fb_bounce_out_v2;transition-timing-function:ease-in}.fb_customer_chat_bounce_out_from_left{animation-duration:300ms;animation-name:fb_bounce_out_from_left;transition-timing-function:ease-in}.fb_invisible_flow{display:inherit;height:0;overflow-x:hidden;width:0}\u0040keyframes fb_mpn_landing_page_slide_out{0\u0025{margin:0 12px;width:100\u0025 - 24px}60\u0025{border-radius:18px}100\u0025{border-radius:50\u0025;margin:0 24px;width:60px}}\u0040keyframes fb_mpn_landing_page_slide_out_from_left{0\u0025{left:12px;width:100\u0025 - 24px}60\u0025{border-radius:18px}100\u0025{border-radius:50\u0025;left:12px;width:60px}}\u0040keyframes fb_mpn_landing_page_slide_up{0\u0025{bottom:0;opacity:0}100\u0025{bottom:24px;opacity:1}}\u0040keyframes fb_mpn_bounce_in{0\u0025{opacity:.5;top:100\u0025}100\u0025{opacity:1;top:0}}\u0040keyframes fb_mpn_fade_out{0\u0025{bottom:30px;opacity:1}100\u0025{bottom:0;opacity:0}}\u0040keyframes fb_mpn_bounce_out{0\u0025{opacity:1;top:0}100\u0025{opacity:.5;top:100\u0025}}\u0040keyframes fb_bounce_in_v2{0\u0025{opacity:0;transform:scale(0, 0);transform-origin:bottom right}50\u0025{transform:scale(1.03, 1.03);transform-origin:bottom right}100\u0025{opacity:1;transform:scale(1, 1);transform-origin:bottom right}}\u0040keyframes fb_bounce_in_from_left{0\u0025{opacity:0;transform:scale(0, 0);transform-origin:bottom left}50\u0025{transform:scale(1.03, 1.03);transform-origin:bottom left}100\u0025{opacity:1;transform:scale(1, 1);transform-origin:bottom left}}\u0040keyframes fb_bounce_out_v2{0\u0025{opacity:1;transform:scale(1, 1);transform-origin:bottom right}100\u0025{opacity:0;transform:scale(0, 0);transform-origin:bottom right}}\u0040keyframes fb_bounce_out_from_left{0\u0025{opacity:1;transform:scale(1, 1);transform-origin:bottom left}100\u0025{opacity:0;transform:scale(0, 0);transform-origin:bottom left}}\u0040keyframes slideInFromBottom{0\u0025{opacity:.1;transform:translateY(100\u0025)}100\u0025{opacity:1;transform:translateY(0)}}\u0040keyframes slideInFromBottomDelay{0\u0025{opacity:0;transform:translateY(100\u0025)}97\u0025{opacity:0;transform:translateY(100\u0025)}100\u0025{opacity:1;transform:translateY(0)}}","components":["css:fb.css.base","css:fb.css.dialog","css:fb.css.iframewidget","css:fb.css.customer_chat_plugin_iframe"]});__d("JSSDKRuntimeConfig",[],{"locale":"en_US","revision":"1006796593","rtl":false,"sdkab":null,"sdkns":"","sdkurl":"https:\/\/connect.facebook.net\/en_US\/sdk.js","scribeurl":"https:\/\/www.facebook.com\/platform\/scribe_endpoint.php\/"});__d("JSSDKXDConfig",[],{"XXdUrl":"\/x\/connect\/xd_arbiter\/?version=46","useCdn":true});__d("UrlMapConfig",[],{"www":"web.facebook.com","m":"mobile.facebook.com","business":"business.facebook.com","api":"z-p3-api.facebook.com","api_read":"z-p3-api.facebook.com","graph":"z-p3-graph.facebook.com","an":"an.facebook.com","fbcdn":"z-p3-static.xx.fbcdn.net","cdn":"staticxx.facebook.com","graph_facebook":"z-p3-graph.facebook.com","graph_gaming":"graph.fb.gg","graph_instagram":"graph.instagram.com","www_instagram":"www.instagram.com","social_plugin":"socialplugin.facebook.net"});__d("JSSDKShadowCssConfig",[],{"css:fb.shadow.css.fb_login_button":".fb_login_button_container{align-content:center;align-items:center;border:0;color:#fff;display:flex;font-family:'Roboto', 'Freight Sans LF Pro', Helvetica, Arial, 'Lucida Grande', sans-serif;font-weight:bold;margin:auto}.fb-button-main-element{display:flex;flex-wrap:nowrap;overflow:hidden}.fb-iframe-overlay{display:flex}.fb-button-main-element:hover{cursor:pointer}.fb-button-main-element:focus{filter:brightness(80\u0025)}.fb_button_label_element{align-items:center;display:flex;font-weight:bold;justify-content:center}.fb_button_label{margin:auto;pointer-events:none}.fb_button_svg_logo{height:1.33em;margin-left:.4em;margin-right:.4em;padding:.065em}.login_fb_logo .f_logo_f{fill:transparent}.single_button_svg_logo{margin-bottom:.08em}"}); __d("DOMWrapper",[],(function(a,b,c,d,e,f){"use strict";var g,h;function a(a){g=a}function b(){return g||document.body}function c(a){h=a}function d(){return h||self}f.setRoot=a;f.getRoot=b;f.setWindow=c;f.getWindow=d}),66); +__d("dotAccess",[],(function(a,b,c,d,e,f){function a(a,b,c){b=b.split(".");do{var d=b.shift();a=a[d]||c&&(a[d]={})}while(b.length&&a);return a}f["default"]=a}),66); +__d("guid",[],(function(a,b,c,d,e,f){function a(){return"f"+(Math.random()*(1<<30)).toString(16).replace(".","")}f["default"]=a}),66); +__d("wrapFunction",[],(function(a,b,c,d,e,f){var g={};function a(a,b,c){var d=b in g?g[b](a,c):a;return function(){for(var a=arguments.length,b=new Array(a),c=0;c3?d-3:0),f=3;f=b&&j[a in j?a:"log"](i)};function a(a){g=a}d=ES(c,"bind",!0,null,"debug",b.DEBUG);e=ES(c,"bind",!0,null,"info",b.INFO);var h=ES(c,"bind",!0,null,"warn",b.WARNING),i=ES(c,"bind",!0,null,"error",b.ERROR);f.Level=b;f.log=c;f.setLevel=a;f.debug=d;f.info=e;f.warn=h;f.error=i}),66); +__d("sdk.UA",[],(function(a,b,c,d,e,f){a=navigator.userAgent;var g={iphone:/\b(iPhone|iP[ao]d)/.test(a),ipad:/\b(iP[ao]d)/.test(a),android:/Android/i.test(a),nativeApp:/FBAN\/\w+;/i.test(a)&&!/FBAN\/mLite;/.test(a),nativeAndroidApp:/FB_IAB\/\w+;/i.test(a),nativeInstagramApp:/Instagram/i.test(a),nativeMessengeriOSApp:/MessengerForiOS/i.test(a),nativeMessengerAndroidApp:/Orca\-Android/i.test(a),ucBrowser:/UCBrowser/i.test(a)},h=/Mobile/i.test(a),i={ie:NaN,firefox:NaN,chrome:NaN,webkit:NaN,osx:NaN,edge:NaN,operaMini:NaN,ucWeb:NaN};b=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(a);if(b){i.ie=b[1]?parseFloat(b[1]):b[4]?parseFloat(b[4]):NaN;i.firefox=b[2]||"";i.webkit=b[3]||"";if(b[3]){c=/(?:Chrome\/(\d+\.\d+))/.exec(a);i.chrome=c?c[1]:"";d=/(?:Edge\/(\d+\.\d+))/.exec(a);i.edge=d?d[1]:""}}e=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(a);e&&(i.osx=e[1]);b=/(?:Opera Mini\/(\d+(?:\.\d+)?))/.exec(a);b&&(i.operaMini=b[1]);c=/(?:UCWEB\/(\d+(?:\.\d+))?)/.exec(a);c&&(i.ucWeb=c[1]||"2.0");function j(a){return String(a).split(".").map(function(a){return parseFloat(a)})}var k={};Object.keys(i).map(function(a){var b=function(){return parseFloat(i[a])};b.getVersionParts=function(){return j(i[a])};k[a]=b});Object.keys(g).map(function(a){k[a]=function(){return g[a]}});k.mobile=function(){return g.iphone||g.ipad||g.android||h};k.mTouch=function(){return g.android||g.iphone||g.ipad};k.facebookInAppBrowser=function(){return g.nativeApp||g.nativeAndroidApp};k.inAppBrowser=function(){return g.nativeApp||g.nativeAndroidApp||g.nativeInstagramApp};k.mBasic=function(){return!!(i.ucWeb||i.operaMini)};k.instagram=function(){return g.nativeInstagramApp};k.messenger=function(){return g.nativeMessengeriOSApp||g.nativeMessengerAndroidApp};k.isSupportedIABVersion=function(a){if(!k.facebookInAppBrowser())return!1;var b=/(?:FBAV\/(\d+(\.\d+)+))/.exec(navigator.userAgent);if(b){b=parseFloat(b[1]);if(b>=a)return!0}return!1};d=k;f["default"]=d}),66); +__d("sdk.domReady",[],(function(a,b,c,d,e,f){var g;c="readyState"in document?/loaded|complete/.test(document.readyState):!!document.body;function a(){if(!g)return;var a;while(a=g.shift())a();g=null}function b(a){if(g){g.push(a);return}else a()}c||(g=[],document.addEventListener?(document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1)):document.attachEvent&&(document.attachEvent("onreadystatechange",a),window.attachEvent("onload",a)));f["default"]=b}),67); +__d("sdk.Content",["Log","sdk.UA","sdk.domReady"],(function(a,b,c,d,e,f,g){"use strict";var h,i;function j(a,b){b||(!h?(h=b=document.getElementById("fb-root"),b||(d("Log").warn('The "fb-root" div has not been created, auto-creating'),h=b=document.createElement("div"),b.id="fb-root",c("sdk.UA").ie()||!document.body?c("sdk.domReady")(function(){b&&document.body&&document.body.appendChild(b)}):document.body.appendChild(b)),b.className+=" fb_reset"):b=h);b.appendChild(a);return a}function k(a){if(!i){i=document.createElement("div");var b=i.style;b.position="absolute";b.top="-10000px";b.width="0";b.height="0";i=j(i)}return j(a,i)}function a(a,b){var c=document.createElement("form");c.action=a.url;c.target=a.target;c.method=b?"GET":"POST";k(c);for(b in a.params)if(Object.prototype.hasOwnProperty.call(a.params,b)){var d=a.params[b];if(d!=null){var e=document.createElement("input");e.name=b;e.value=d;c.appendChild(e)}}c.submit();c.parentNode&&c.parentNode.removeChild(c)}g.append=j;g.appendHidden=k;g.submitToTarget=a}),98); +__d("sdk.DOM",["guid","sdk.domReady"],(function(a,b,c,d,e,f,g){var h={},i={};function j(a,b){a=a.getAttribute(b)||a.getAttribute(b.replace(/_/g,"-"))||a.getAttribute(b.replace(/-/g,"_"))||a.getAttribute(b.replace(/-/g,""))||a.getAttribute(b.replace(/_/g,""))||a.getAttribute("data-"+b)||a.getAttribute("data-"+b.replace(/_/g,"-"))||a.getAttribute("data-"+b.replace(/-/g,"_"))||a.getAttribute("data-"+b.replace(/-/g,""))||a.getAttribute("data-"+b.replace(/_/g,""));return a!=null?String(a):null}function a(a,b){a=j(a,b);return a!=null?/^(true|1|yes|on)$/.test(a):null}function b(a,b){try{a.innerHTML=b}catch(a){throw new Error("Could not set innerHTML : "+a.message)}}function k(a,b){a=" "+a.className+" ";return a.indexOf(" "+b+" ")>=0}function d(a,b){if(a==null)return;k(a,b)||(a.className=a.className+" "+b)}function e(a,b){if(a==null)return;b=new RegExp("\\s*"+b,"g");a.className=a.className.replace(b,"").trim()}function f(a,b,c){c===void 0&&(c="*");b=b||document.body;if(b==null)return[];c=c||"*";return ES("Array","from",!1,b.querySelectorAll(c+"."+a))}function l(a,b){b=u(b);var c=document.defaultView.getComputedStyle(a).getPropertyValue(b);c=a.style.getPropertyValue(b);/background-position?/.test(b)&&/top|left/.test(c)&&(c="0%");return c}function m(a,b,c){a.style.setProperty(u(b),c)}function n(a,b,c,d,e){a=a.styleSheets;for(var f=0;f1?b-1:0),d=1;d1?c-1:0),e=1;e2?e-2:0),g=2;g0&&(d+=" Params: "+b.map(function(a){return"%s"}).join(", "));a=c("Env").show_invariant_decoder===!0?"visit "+i(a,b)+" to see the full message.":"";return{message:d,decoderLink:a}}function i(a,b){a="https://www.internalfb.com/intern/invariant/"+a+"/";b.length>0&&(a+="?"+b.map(function(a,b){return"args["+b+"]="+encodeURIComponent(String(a))}).join("&"));return a}g["default"]=a}),98); +__d("UrlMap",["invariant","UrlMapConfig","sdk.Runtime"],(function(a,b,c,d,e,f,g,h){function a(a){var b="https";if(a==="graph_domain"){var e=c("sdk.Runtime").getGraphDomain();e?a="graph_".concat(e):a="graph"}if(a in d("UrlMapConfig"))return b+"://"+d("UrlMapConfig")[a];a in d("UrlMapConfig")||h(0,2511,a);return""}g.resolve=a}),98); +__d("sdk.Scribe",["QueryString","UrlMap","sdk.Runtime"],(function(a,b,c,d,e,f,g){var h={};function a(a,b,e){e===void 0&&(e=!1);if(a==="jssdk_error"){var f=ES("JSON","stringify",!1,b);if(Object.prototype.hasOwnProperty.call(h,f))return;else h[f]=!0}if(b.extra!=null&&typeof b.extra==="object"){f=b.extra;f.revision=c("sdk.Runtime").getRevision()}f=new Image();var g=d("UrlMap").resolve("www")+"/platform/scribe_endpoint.php/";e||(f.crossOrigin="anonymous");f.src=c("QueryString").appendToUrl(g,{c:a,m:ES("JSON","stringify",!1,babelHelpers["extends"]({},b,{isSPIN:c("sdk.Runtime").getIsSPIN()}))})}g.log=a}),98); +__d("sdk.FeatureFunctor",[],(function(a,b,c,d,e,f){function g(a,b,c){if(a.features&&b in a.features){a=a.features[b];if(typeof a==="object"&&typeof a.rate==="number")if(a.rate&&Math.random()*100<=a.rate)return a.value||!0;else return a.value?null:!1;else return a}return c}function a(a){return function(){for(var b=arguments.length,c=new Array(b),d=0;d1?c-1:0),e=1;ep+m){var c=a-n;for(var d=o,e=Array.isArray(d),f=0,d=e?d:d[typeof Symbol==="function"?Symbol.iterator:"@@iterator"]();;){var g;if(e){if(f>=d.length)break;g=d[f++]}else{f=d.next();if(f.done)break;g=f.value}g=g;var h=g[0];g=g[1];g.lastAccessed":"",v;function ba(a){var b=a.error!=null?u(a.error):h(a.message||"");b.fileName==null&&a.filename!=null&&(b.fileName=a.filename);b.line==null&&a.lineno!=null&&(b.line=a.lineno);b.column==null&&a.colno!=null&&(b.column=a.colno);b.guardList=[aa];b.loggingSource="ONERROR";(a=v)===null||a===void 0?void 0:a.reportError(b)}var w={setup:function(b){if(typeof a.addEventListener!=="function")return;if(v!=null)return;v=b;a.addEventListener("error",ba)}},x=[],y={pushGuard:function(a){x.unshift(a)},popGuard:function(){x.shift()},inGuard:function(){return x.length!==0},cloneGuardList:function(){return x.map(function(a){return a.name})},findDeferredSource:function(){for(var a=0;a=0)return"warn";return a.stack!=null&&a.stack.indexOf("chrome-extension://")>=0?"warn":"error"}var z=[],A=function(){function a(){this.metadata=[].concat(z)}var b=a.prototype;b.addEntries=function(){var a;(a=this.metadata).push.apply(a,arguments);return this};b.addEntry=function(a,b,c){this.metadata.push([a,b,c]);return this};b.isEmpty=function(){return this.metadata.length===0};b.clearEntries=function(){this.metadata=[]};b.format=function(){var a=[];this.metadata.forEach(function(b){if(b&&b.length){b=b.map(function(a){return a!=null?String(a).replace(/:/g,"_"):""}).join(":");a.push(b)}});return a};b.getAll=function(){return this.metadata};a.addGlobalMetadata=function(a,b,c){z.push([a,b,c])};a.getGlobalMetadata=function(){return z};a.unsetGlobalMetadata=function(a,b){z=z.filter(function(c){return!(Array.isArray(c)&&c[0]===a&&c[1]===b)})};return a}(),B={debug:1,info:2,warn:3,error:4,fatal:5};function c(a,b){if(Object.isFrozen(a))return;b.type&&((!a.type||B[a.type]>B[b.type])&&(a.type=b.type));var c=b.metadata;if(c!=null){var d;d=(d=a.metadata)!==null&&d!==void 0?d:new A();c!=null&&d.addEntries.apply(d,c.getAll());a.metadata=d}b.project!=null&&(a.project=b.project);b.errorName!=null&&(a.errorName=b.errorName);b.componentStack!=null&&(a.componentStack=b.componentStack);b.deferredSource!=null&&(a.deferredSource=b.deferredSource);b.blameModule!=null&&(a.blameModule=b.blameModule);b.loggingSource!=null&&(a.loggingSource=b.loggingSource);d=(c=a.messageFormat)!==null&&c!==void 0?c:a.message;c=(c=a.messageParams)!==null&&c!==void 0?c:[];if(d!==b.messageFormat&&b.messageFormat!=null){var e;d+=" [Caught in: "+b.messageFormat+"]";c.push.apply(c,(e=b.messageParams)!==null&&e!==void 0?e:[])}a.messageFormat=d;a.messageParams=c;e=b.forcedKey;d=a.forcedKey;c=e!=null&&d!=null?e+"_"+d:e!==null&&e!==void 0?e:d;a.forcedKey=c}function d(a){var b;return da((b=a.messageFormat)!==null&&b!==void 0?b:a.message,a.messageParams||[])}function da(a,b){var c=0;a=a.replace(/%s/g,function(){return cea&&D.shift()}function F(a){var b=a.getAllResponseHeaders();if(b!=null&&b.indexOf("X-FB-Debug")>=0){b=a.getResponseHeader("X-FB-Debug");b&&E(b)}}function fa(){return D}var G={add:E,addFromXHR:F,getAll:fa},ga="abcdefghijklmnopqrstuvwxyz012345";function H(){var a=0;for(var b=arguments.length,c=new Array(b),d=0;d>=5;return i}var I=[/\(([^\s\)\()]+):(\d+):(\d+)\)$/,/@([^\s\)\()]+):(\d+):(\d+)$/,/^([^\s\)\()]+):(\d+):(\d+)$/,/^at ([^\s\)\()]+):(\d+):(\d+)$/],ha=/^\w+:\s.*?\n/g;Error.stackTraceLimit!=null&&Error.stackTraceLimit<80&&(Error.stackTraceLimit=80);function ia(a){var b=a.name,c=a.message;a=a.stack;if(a==null)return null;if(b!=null&&c!=null&&c!==""){var d=b+": "+c+"\n";if(ES(a,"startsWith",!0,d))return a.substr(d.length);if(a===b+": "+c)return null}if(b!=null){d=b+"\n";if(ES(a,"startsWith",!0,d))return a.substr(d.length)}if(c!=null&&c!==""){b=": "+c+"\n";d=a.indexOf(b);c=a.substring(0,d);if(/^\w+$/.test(c))return a.substring(d+b.length)}return a.replace(ha,"")}function J(a){a=a.trim();var b;a;var c,d,e;if(ES(a,"includes",!0,"charset=utf-8;base64,"))b="";else{var f;for(var g=0;g");c!=null&&d!=null&&a!=null&&(b+=" ("+c+":"+d+":"+a+")");return b}function L(c){var d,e,f,h,i,j,k=ka(c);d=(d=c.taalOpcodes)!==null&&d!==void 0?d:[];var l=c.framesToPop;if(l!=null){l=Math.min(l,k.length);while(l-->0)d.unshift(g.PREVIOUS_FRAME)}l=(l=c.messageFormat)!==null&&l!==void 0?l:c.message;e=((e=c.messageParams)!==null&&e!==void 0?e:[]).map(function(a){return String(a)});var m=la(c.componentStack),n=m==null?null:m.map(J),o=c.metadata?c.metadata.format():new A().format();o.length===0&&(o=void 0);var p=k.map(function(a){return a.text}).join("\n");f=(f=c.errorName)!==null&&f!==void 0?f:c.name;var q=ca(c),r=c.loggingSource,s=c.project;h=(h=c.lineNumber)!==null&&h!==void 0?h:c.line;i=(i=c.columnNumber)!==null&&i!==void 0?i:c.column;j=(j=c.fileName)!==null&&j!==void 0?j:c.sourceURL;var t=k.length>0;t&&h==null&&(h=k[0].line);t&&i==null&&(i=k[0].column);t&&j==null&&(j=k[0].script);n={blameModule:c.blameModule,column:i==null?null:String(i),clientTime:Math.floor(Date.now()/1e3),componentStackFrames:n,deferredSource:c.deferredSource!=null?L(c.deferredSource):null,extra:(t=c.extra)!==null&&t!==void 0?t:{},fbtrace_id:c.fbtrace_id,guardList:(i=c.guardList)!==null&&i!==void 0?i:[],hash:H(f,p,q,s,r),isNormalizedError:!0,line:h==null?null:String(h),loggingSource:r,message:C.toReadableMessage(c),messageFormat:l,messageParams:e,metadata:o,name:f,page_time:Math.floor(b("performanceNowSinceAppStart")()),project:s,reactComponentStack:m,script:j,serverHash:c.serverHash,stack:p,stackFrames:k,type:q,xFBDebug:G.getAll()};c.forcedKey!=null&&(n.forcedKey=c.forcedKey);d.length>0&&(n.taalOpcodes=d);t=a.location;t&&(n.windowLocationURL=t.href);for(i in n)n[i]==null&&delete n[i];return n}function ma(a){return a!=null&&typeof a==="object"&&a.isNormalizedError===!0?a:null}var M={formatStackFrame:K,normalizeError:L,ifNormalizedError:ma},na="",N=[],O=[],P=50,Q=!1,R={history:O,addListener:function(a,b){b===void 0&&(b=!1),N.push(a),b||O.forEach(function(b){return a(b,(b=b.loggingSource)!==null&&b!==void 0?b:"DEPRECATED")})},unshiftListener:function(a){N.unshift(a)},removeListener:function(a){b("removeFromArray")(N,a)},reportError:function(a){a=M.normalizeError(a);R.reportNormalizedError(a)},reportNormalizedError:function(b){if(Q)return!1;var a=y.cloneGuardList();b.componentStackFrames&&a.unshift(na);a.length>0&&(b.guardList=a);if(b.deferredSource==null){a=y.findDeferredSource();a!=null&&(b.deferredSource=M.normalizeError(a))}O.length>P&&O.splice(P/2,1);O.push(b);Q=!0;for(a=0;aU?a.substring(0,U-3)+"...":a}function ra(a,b){var c;c={appId:Y(b.appId),cavalry_lid:b.cavalry_lid,access_token:k.access_token,ancestor_hash:a.hash,bundle_variant:(c=b.bundle_variant)!==null&&c!==void 0?c:null,clientTime:X(a.clientTime),column:a.column,componentStackFrames:Z(a.componentStackFrames),events:a.events,extra:pa(a.extra,b.extra),forcedKey:a.forcedKey,frontend_env:(c=b.frontend_env)!==null&&c!==void 0?c:null,guardList:a.guardList,line:a.line,loggingFramework:b.loggingFramework,messageFormat:qa(a.messageFormat),messageParams:a.messageParams.map(qa),name:a.name,sample_weight:Y(b.sample_weight),script:a.script,site_category:b.site_category,stackFrames:Z(a.stackFrames),type:a.type,page_time:Y(a.page_time),project:a.project,push_phase:b.push_phase,report_source:b.report_source,report_source_ref:b.report_source_ref,rollout_hash:(c=b.rollout_hash)!==null&&c!==void 0?c:null,script_path:b.script_path,server_revision:Y(b.server_revision),spin:Y(b.spin),svn_rev:String(b.client_revision),additional_client_revisions:ES("Array","from",!1,(c=b.additional_client_revisions)!==null&&c!==void 0?c:[]).map(X),taalOpcodes:a.taalOpcodes==null?null:a.taalOpcodes.map(function(a){return a}),web_session_id:b.web_session_id,version:"3",xFBDebug:a.xFBDebug};b=a.blameModule;var d=a.deferredSource;b!=null&&(c.blameModule=String(b));d&&d.stackFrames&&(c.deferredSource={stackFrames:Z(d.stackFrames)});a.metadata&&(c.metadata=a.metadata);a.loadingUrls&&(c.loadingUrls=a.loadingUrls);a.serverHash!=null&&(c.serverHash=a.serverHash);a.windowLocationURL!=null&&(c.windowLocationURL=a.windowLocationURL);a.loggingSource!=null&&(c.loggingSource=a.loggingSource);return c}function sa(a,b,c){var d;W++;if(b.sample_weight===0)return!1;var e=s.shouldLog(a);if(e==null)return!1;if((d=b.projectBlocklist)!==null&&d!==void 0&&ES(d,"includes",!0,a.project))return!1;d=ra(a,b);ES("Object","assign",!1,d,{ancestors:V.slice(),clientWeight:X(e),page_position:X(W)});V.length<15&&V.push(a.hash);c(d);return!0}var ta={createErrorPayload:ra,postError:sa},$=null,ua=!1;function va(a){if(!$)return;var b=a.reason,c;if(b!=null&&typeof b==="object"&&(b.name==null||b.name===""||b.message==null||b.message===""))try{c=h("UnhandledRejection: %s",ES("JSON","stringify",!1,b)),c.loggingSource="ONUNHANDLEDREJECTION"}catch(a){c=h("UnhandledRejection: (circular) %s",Object.keys(b).join(",")),c.loggingSource="ONUNHANDLEDREJECTION"}else c=u(b),c.loggingSource||(c.loggingSource="ONUNHANDLEDREJECTION");try{b=a.promise;c.stack=String(c.stack||"")+(b!=null&&typeof b.settledStack==="string"?"\n()\n"+b.settledStack:"")+(b!=null&&typeof b.createdStack==="string"?"\n()\n"+b.createdStack:"")}catch(a){}$.reportError(c);a.preventDefault()}function wa(b){$=b,typeof a.addEventListener==="function"&&!ua&&(ua=!0,a.addEventListener("unhandledrejection",va))}var xa={onunhandledrejection:va,setup:wa};c={preSetup:function(a){(a==null||a.ignoreOnError!==!0)&&w.setup(R),(a==null||a.ignoreOnUnahndledRejection!==!0)&&xa.setup(R)},setup:function(a,b){R.addListener(function(c){ta.postError(c,a,b)})}};var ya=function(){function a(a){this.project=a,this.events=[],this.metadata=new A(),this.taalOpcodes=[]}var b=a.prototype;b.$1=function(b,c){var d=String(c),e=this.events,f=this.project,h=this.metadata,i=this.blameModule,j=this.forcedKey,k=this.error,l;for(var m=arguments.length,n=new Array(m>2?m-2:0),o=2;o0&&new a("fblogger").blameToPreviousFrame().blameToPreviousFrame().warn("Blame helpers do not work with catching"),C.aggregateError(k,{messageFormat:d,messageParams:C.toStringParams(n),errorName:k.name,forcedKey:j,project:f,type:b,loggingSource:"FBLOGGER"}),l=M.normalizeError(k);else{k=new Error(d);if(k.stack===void 0)try{throw k}catch(a){}k.messageFormat=d;k.messageParams=C.toStringParams(n);k.blameModule=i;k.forcedKey=j;k.project=f;k.type=b;k.loggingSource="FBLOGGER";k.taalOpcodes=[g.PREVIOUS_FRAME,g.PREVIOUS_FRAME].concat(this.taalOpcodes);l=M.normalizeError(k);l.name="FBLogger"}if(!h.isEmpty())if(l.metadata==null)l.metadata=h.format();else{var q=l.metadata.concat(h.format()),r=new Set(q);l.metadata=ES("Array","from",!1,r.values())}if(e.length>0)if(l.events!=null){var s;(s=l.events).push.apply(s,e)}else l.events=e;R.reportNormalizedError(l);return k};b.fatal=function(a){for(var b=arguments.length,c=new Array(b>1?b-1:0),d=1;d1?b-1:0),d=1;d1?b-1:0),d=1;d1?b-1:0),d=1;d1?b-1:0),d=1;d=0;d--)c[a[d]]=b[d];else for(d=a.length-1;d>=0;d--)c[a[d]]=b;return c}f["default"]=g}),66); +__d("URISchemes",["createObjectFrom"],(function(a,b,c,d,e,f,g){var h=c("createObjectFrom")(["accountscenter","aidemos","aistudio","blob","cmms","fb","fba","fbatwork","fb-ama","fb-internal","fb-workchat","fb-workchat-secure","fb-messenger","fb-messenger-public","fb-messenger-group-thread","fb-page-messages","fb-pma","fbcf","fbconnect","fbinternal","fbmobilehome","fbrpc","file","flipper","ftp","gtalk","http","https","mailto","wss","ms-app","intent","itms","itms-apps","itms-services","lasso","market","svn+ssh","fbstaging","tel","sms","pebblejs","sftp","whatsapp","moments","flash","fblite","chrome-extension","webcal","instagram","iglite","fb124024574287414","fb124024574287414rc","fb124024574287414master","fb1576585912599779","fb929757330408142","designpack","fbpixelcloud","fbapi20130214","fb1196383223757595","oculus","oculus.store","oculus.feed","oculusstore","odh","com.oculus.rd","aria","skype","ms-windows-store","callto","messenger","workchat","fb236786383180508","fb1775440806014337","data","fb-mk","munki","origami-file","fb-nimble-vrsrecorder","fb-nimble-monohandtrackingvis","together","togetherbl","horizonlauncher","venues","whatsapp-consumer","whatsapp-smb","fb-ide-opener","fb-vscode","fb-vscode-insiders","editor","spark-studio","manifold","origami-internal","origami-public","stella","mwa","mattermost","logaggregator","workrooms"]);function a(a){return a==null||a===""?!0:Object.prototype.hasOwnProperty.call(h,a.toLowerCase())}g.isAllowed=a}),98); +__d("isSameOrigin",[],(function(a,b,c,d,e,f){"use strict";function a(a,b){return!a.getProtocol()||!a.getDomain()||!b.getProtocol()||!b.getDomain()?!1:a.getOrigin()===b.getOrigin()}f["default"]=a}),66); +__d("setHostSubdomain",[],(function(a,b,c,d,e,f){function a(a,b){a=a.split(".");a.length<3?a.unshift(b):a[0]=b;return a.join(".")}f["default"]=a}),66); +__d("URIAbstractBase",["invariant","FBLogger","PHPStrictQuerySerializer","URIRFC3986","URISchemes","isSameOrigin","setHostSubdomain"],(function(a,b,c,d,e,f,g){var h,i,j=new RegExp("[\\x00-\\x2c\\x2f\\x3b-\\x40\\x5c\\x5e\\x60\\x7b-\\x7f\\uFDD0-\\uFDEF\\uFFF0-\\uFFFF\\u2047\\u2048\\uFE56\\uFE5F\\uFF03\\uFF0F\\uFF1F]"),k=new RegExp("^(?:[^/]*:|[\\x00-\\x1f]*/[\\x00-\\x1f]*/)"),l=[];a=function(){"use strict";a.parse=function(c,d,e,f){if(!d)return!0;if(d instanceof a){c.setProtocol(d.getProtocol());c.setDomain(d.getDomain());c.setPort(d.getPort());c.setPath(d.getPath());c.setQueryData(f.deserialize(f.serialize(d.getQueryData())));c.setFragment(d.getFragment());c.setIsGeneric(d.getIsGeneric());c.setForceFragmentSeparator(d.getForceFragmentSeparator());c.setOriginalRawQuery(d.getOriginalRawQuery());c.setQueryParamModified(!1);return!0}d=d.toString().trim();var g=(h||(h=b("URIRFC3986"))).parse(d)||{fragment:null,scheme:null,query:null};if(!e&&!(i||(i=b("URISchemes"))).isAllowed(g.scheme))return!1;c.setProtocol(g.scheme||"");if(!e&&j.test(g.host||""))return!1;c.setDomain(g.host||"");c.setPort(g.port||"");c.setPath(g.path||"");if(e)c.setQueryData(f.deserialize(g.query||"")||{});else try{c.setQueryData(f.deserialize(g.query||"")||{})}catch(a){return!1}c.setFragment(g.fragment||"");g.fragment===""&&c.setForceFragmentSeparator(!0);c.setIsGeneric(g.isGenericURI||!1);c.setOriginalRawQuery(g.query);c.setQueryParamModified(!1);if(g.userinfo!==null){if(e)throw new Error("URI.parse: invalid URI (userinfo is not allowed in a URI): "+d);return!1}if(!c.getDomain()&&c.getPath().indexOf("\\")!==-1){if(e)throw new Error("URI.parse: invalid URI (no domain but multiple back-slashes): "+d);return!1}if(!c.getProtocol()&&k.test(d)){if(e)throw new Error("URI.parse: invalid URI (unsafe protocol-relative URLs): "+d+"'");return!1}if(c.getDomain()&&c.getPath()&&!ES(c.getPath(),"startsWith",!0,"/")){if(e)throw new Error("URI.parse: invalid URI (domain and path where path lacks leading slash): "+d);return!1}c.getProtocol()&&!c.getIsGeneric()&&!c.getDomain()&&c.getPath()!==""&&b("FBLogger")("uri").warn('URI.parse: invalid URI (protocol "'+c.getProtocol()+'" with no domain)');return!0};a.tryParse=function(b,c){var d=new a(null,c);return a.parse(d,b,!1,c)?d:null};a.isValid=function(b,c){return!!a.tryParse(b,c)};function a(b,c){c||g(0,2966),this.$9=c,this.$7="",this.$1="",this.$6="",this.$5="",this.$3="",this.$4=!1,this.$8={},this.$2=!1,a.parse(this,b,!0,c),this.$11=!1}var c=a.prototype;c.setProtocol=function(a){(i||(i=b("URISchemes"))).isAllowed(a)||g(0,11793,a);this.$7=a;return this};c.getProtocol=function(){return(this.$7||"").toLowerCase()};c.setSecure=function(a){return this.setProtocol(a?"https":"http")};c.isSecure=function(){return this.getProtocol()==="https"};c.setDomain=function(a){if(j.test(a))throw new Error("URI.setDomain: unsafe domain specified: "+a+" for url "+this.toString());this.$1=a;return this};c.getDomain=function(){return this.$1};c.setPort=function(a){this.$6=a;return this};c.getPort=function(){return this.$6};c.setPath=function(a){this.$5=a;return this};c.getPath=function(){return this.$5};c.addQueryData=function(a,b){Object.prototype.toString.call(a)==="[object Object]"?ES("Object","assign",!1,this.$8,a):this.$8[a]=b;this.$11=!0;return this};c.setQueryData=function(a){this.$8=a;this.$11=!0;return this};c.getQueryData=function(){return this.$8};c.setQueryString=function(a){return this.setQueryData(this.$9.deserialize(a))};c.getQueryString=function(a,b,c){a===void 0&&(a=!1);b===void 0&&(b=function(){return!1});c===void 0&&(c=null);return this.$12(!1,a,b,c)};c.$12=function(a,b,c,d){a===void 0&&(a=!1);b===void 0&&(b=!1);c===void 0&&(c=function(){return!1});d===void 0&&(d=null);if(!this.$11&&(b||c(this.getDomain()))){return(b=this.$10)!=null?b:""}return(a&&d?d:this.$9).serialize(this.getQueryData())};c.removeQueryData=function(a){Array.isArray(a)||(a=[a]);for(var b=0,c=a.length;b0||this.getFragment())};c.toString=function(a,b){a===void 0&&(a=function(){return!1});b===void 0&&(b=null);return this.$13(!1,!1,a,b)};c.toStringRawQuery=function(a,b){a===void 0&&(a=function(){return!1});b===void 0&&(b=null);return this.$13(!0,!1,a,b)};c.toStringPreserveQuery=function(a,b){a===void 0&&(a=function(){return!1});b===void 0&&(b=null);return this.$13(!1,!0,a,b)};c.toStringStrictQueryEncoding=function(a){a===void 0&&(a=function(){return!1});return this.$13(!0,!1,a,b("PHPStrictQuerySerializer"))};c.$13=function(a,b,c,d){a===void 0&&(a=!1);b===void 0&&(b=!1);c===void 0&&(c=function(){return!1});d===void 0&&(d=null);var e=this;for(var f=0;f0||h(0,4698);this.$1.length===this.$2.length||h(0,4699);var a=this.$1,b=this.$2;this.$1=[];this.$2=[];this.$4=null;if(a.length===1){var d=a[0],e=b[0],f=d.body?c("QueryString").decode(d.body):null;this.executeRequest(d.relative_url,d.method,f,e);return}this.executeRequest("/","POST",{batch:a,include_headers:!1,batch_app_id:this.$3||j},function(a){Array.isArray(a)?a.forEach(function(a,d){b[d](c("sdk.safelyParseResponse")(a&&a.body))}):b.forEach(function(a){return a({error:{message:"Fatal: batch call failed."}})})})};return a}();g["default"]=a}),98); +__d("RequestConstants",["errorCode"],(function(a,b,c,d,e,f,g,h){a={code:1,error_subcode:1357045,message:"unknown error (empty response)",type:"http",status:0};g.PARSE_ERROR_TEMPLATE=a}),98); +__d("sdk.Cookie",["QueryString","sdk.Runtime","sdk.Scribe","sdk.feature"],(function(a,b,c,d,e,f,g){var h=null,i=["fblo_","fbsr_","fbm_"];function j(a,b,e,f){if(!ES(i,"includes",!0,a)){d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"unknown_cookie_prefix."+a});if(c("sdk.feature")("limit_unknown_cookie_setting",!1))return}a=a+c("sdk.Runtime").getClientID();f=f?"; SameSite=None;Secure":"";var g=h!==null&&h!==".";g&&(document.cookie=a+"=; expires=Wed, 04 Feb 2004 08:00:00 GMT"+f,document.cookie=a+"=; expires=Wed, 04 Feb 2004 08:00:00 GMT;domain="+location.hostname+f);var j=new Date(e).toUTCString();document.cookie=a+"="+b+(b&&e===0?"":"; expires="+j)+"; path=/"+(g?"; domain="+((a=h)!=null?a:""):"")+f}function k(a){a=a+c("sdk.Runtime").getClientID();a=new RegExp("\\b"+a+"=([^;]*)\\b");a=document.cookie.match(a);if(a==null)return null;else return a[1]}function a(a){h=a;a=c("QueryString").encode({base_domain:h!==null&&h!=="."?h:""});var b=new Date();b.setFullYear(b.getFullYear()+1);j("fbm_",a,b.getTime(),!0)}function b(){return h}function l(){var a=k("fbm_");if(a!=null&&h===null){a=c("QueryString").decode(a);h=a.base_domain;return{base_domain:h}}return null}function e(){return k("fbsr_")}function f(a,b){if(a==="")throw new Error("Value passed to Cookie.setSignedRequestCookie was empty.");j("fbsr_",a,b,!0)}function m(){l(),j("fbsr_","",0,!0)}g.setRaw=j;g.getRaw=k;g.setDomain=a;g.getDomain=b;g.loadMeta=l;g.loadSignedRequest=e;g.setSignedRequestCookie=f;g.clearSignedRequestCookie=m}),98); +__d("CORSRequest",["Log","QueryString","RequestConstants","sdk.Cookie","sdk.safelyParseResponse","wrapFunction"],(function(a,b,c,d,e,f,g){function h(a,b,d){d===void 0&&(d={withCredentials:!1});if(!self.XMLHttpRequest)return null;var e=new XMLHttpRequest(),f=function(){};((d=d)==null?void 0:d.withCredentials)&&(e.withCredentials=!0);if("withCredentials"in e)e.open(a,b,!0),e.setRequestHeader("Content-type","application/x-www-form-urlencoded");else if(self.XDomainRequest){e=new XDomainRequest();try{e.open(a,b),e.onprogress=e.ontimeout=f}catch(a){return null}}else return null;var g={send:function(a){e.send(a)}},h=c("wrapFunction")(function(){h=f,"onload"in g&&g.onload(e)},"entry","XMLHttpRequest:load"),i=c("wrapFunction")(function(){i=f,"onerror"in g&&g.onerror(e)},"entry","XMLHttpRequest:error");e.onload=function(){h()};e.onerror=function(){i()};e.onreadystatechange=function(){e.readyState==4&&(e.status==200?h():i())};return g}var i="for (;;);",j=i.length;function k(a){a.substring(0,j)==i&&(a=a.substring(j));return a}function a(a,b,e,f,g){g===void 0&&(g={withCredentials:!1});if(ES(a,"includes",!0,"/../")||ES(a,"includes",!0,"/..\\")||ES(a,"includes",!0,"\\../")||ES(a,"includes",!0,"\\..\\")){d("Log").error("CORSRequest.execute(): path traversal is not allowed.");return!1}try{if(self.document){var i=d("sdk.Cookie").getRaw("cppo");i&&(a=c("QueryString").appendToUrl(a,c("QueryString").encode({__cppo:i})))}}catch(a){}e.suppress_http_code=1;i=c("QueryString").encode(e);b!="post"&&(a=c("QueryString").appendToUrl(a,i),i="");e=h(b,a,g);if(!e)return!1;e.onload=function(b){f(c("sdk.safelyParseResponse")(k(b.responseText),a,b.status))};e.onerror=function(b){b.responseText?f(c("sdk.safelyParseResponse")(k(b.responseText),a,b.status)):f({error:babelHelpers["extends"]({},d("RequestConstants").PARSE_ERROR_TEMPLATE,{status:b.status})})};e.send(i);return!0}b={execute:a};e=b;g["default"]=e}),98); +__d("ApiClient",["ApiBatcher","ApiClientUtils","Assert","CORSRequest","Log","ObservableMixin","QueryString","UrlMap","flattenObject"],(function(a,b,c,d,e,f,g){var h,i,j,k=[],l=!1,m=2e3,n={fql_query:!0,fql_multiquery:!0,friends_get:!0,notifications_get:!0,stream_get:!0,users_getinfo:!0},o=["cors"],p=0,q=[],r=0,s=0,t,u=d("Log");function v(a,b,d,e){var f=r!==0&&p>=r;if(f){q.push(function(){return v(a,b,d,e)});y.inform("request.queued",a,b,d);return}p++;var g=babelHelpers["extends"]({},j,d);g.pretty=g.pretty||0;g=c("flattenObject")(g);f={cors:c("CORSRequest")};var i={},m=g.access_token||h;m&&(i.access_token=m);b!=="get"&&k.forEach(function(a){i[a]=g[a]});m=Object.keys(i);m.length>0&&(a=c("QueryString").appendToUrl(a,i),delete g.access_token);m=o;for(var n=0;n0&&pm&&b==="get"}f=y;g["default"]=f}),98); +__d("FBEventsParamList",[],(function(a,b,c,d,e,f){"use strict";var g="deep",h="shallow";a=function(){function a(){this.list=[]}var b=a.prototype;b.append=function(a,b){this.$1(encodeURIComponent(a),b,g)};b.each=function(a){var b=this.list;for(var c=0,d=b.length;c(i+"?"+b).length?n(i,b):o(i,a)}function n(a,b){var c=new Image();c.src=a+"?"+b}function o(a,b){var c="fb"+Math.random().toString().replace(".",""),e=document.createElement("form");e.method="post";e.action=a;e.target=c;e.acceptCharset="utf-8";e.style.display="none";a=!!(window.attachEvent&&!window.addEventListener);a=a?'';a.root.innerHTML='';f=!0;window.setTimeout(function(){a.root.innerHTML=j,a.root.firstChild.src=a.url,typeof a.onInsert==="function"&&a.onInsert(a.root.firstChild)},0)}else{i=document.createElement("iframe");i.id=b;i.name=e;i.onload=h;i.scrolling="no";i.style.border="none";i.style.overflow="hidden";a.title!=null&&(i.title=a.title);a.className!=null&&(i.className=a.className);a.height!==void 0&&(i.style.height=a.height+"px");a.width!==void 0&&(a.width==="100%"?i.style.width=a.width:i.style.width=a.width+"px");a.root.appendChild(i);f=!0;i.src=a.url;a.onInsert&&a.onInsert(i)}}g["default"]=a}),98); +__d("sdk.Impressions",["Miny","QueryString","UrlMap","getBlankIframeSrc","guid","insertIframe","sdk.Content","sdk.Runtime"],(function(a,b,c,d,e,f,g){function h(a,b){b===void 0&&(b=!1);var e=c("sdk.Runtime").getClientID(),f=c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS);e&&(typeof a.api_key!=="string"||a.api_key==="")&&(a.api_key=e);a.kid_directed_site=c("sdk.Runtime").getKidDirectedSite();e=d("UrlMap").resolve("www")+"/platform/impression.php/"+c("guid")()+"/";f&&(e=d("UrlMap").resolve("www")+"/platform/canvas_impression.php/"+c("guid")()+"/");var g=c("QueryString").appendToUrl(e,a);if(g.length>2e3&&(a.payload&&typeof a.payload==="string")){var h=a.payload,k=c("Miny").encode(h);k&&k.length0,"You need to call FB.init() with App ID first.");return a}function E(a){c("Assert").isTrue(Object.keys(a).length<=q,"The total number of user properties cannot exceed "+q+".");for(var b in a)c("Assert").isTrue(m.test(b)||ES(s,"includes",!0,b),"Invalid user properties key name: "+b+". It must be between 1 and "+n+" characters, and must contain only alphanumerics, _, - or spaces, starting with alphanumeric or _. Or, it must be a pre-defined user property"),c("Assert").isTrue(a[b].toString().length<=r,"Invalid user properties value: "+a[b]+". It must be no longer than "+r+" characters.")}function F(a){c("Assert").isTrue(k.test(a),"Invalid event name: "+a+". It must be between 1 and "+l+" characters, and must be contain only alphanumerics, _, - or spaces, starting with alphanumeric or _.")}function G(a){c("Assert").isTrue(a.length<=p,"Invalid app version: "+a+". It must be no longer than "+p+" characters.")}function H(a){c("Assert").isTrue(a.length!==0,"User ID must be set before updateUserProperties can be called."),c("Assert").isTrue(a.length<=o,"Invalid user ID: "+a+". It must be no longer than "+o+" characters.")}a=Object.freeze({logEvent:u,logPurchase:a,activateApp:b,logPageView:e,setUserID:f,getUserID:v,clearUserID:w,updateUserProperties:A,setAppVersion:x,getAppVersion:y,clearAppVersion:z,EventNames:h,ParameterNames:j});g.assertGetValidAppID=D;g.assertValidUserProperties=E;g.assertValidEventName=F;g.assertValidAppVersion=G;g.assertValidUserID=H;g.AppEvents=a}),98); +__d("sdk.Event",[],(function(a,b,c,d,e,f){"use strict";var g="event.subscribe",h="event.unsubscribe",i;function j(){i||(i={});return i}function k(a,b){var c=j();!c[a]?c[a]=[b]:c[a].indexOf(b)==-1&&c[a].push(b);a!=g&&a!=h&&m(g,a,c[a])}function l(a,b){var c=j()[a];c&&c.forEach(function(a,d){a===b&&c.splice(d,1)});a!=g&&a!=h&&m(h,a,c)}function a(a,b){var c=arguments;if(!b()){var d=function d(){b.apply(b,c)&&l(a,d)};k(a,d)}}function b(a){delete j()[a]}function m(a){for(var b=arguments.length,c=new Array(b>1?b-1:0),d=1;dDate.now())return a}catch(a){return null}}return null}g.setLocalStorageToken=a;g.removeLocalStorageToken=b;g.setSessionStorage=e;g.getLocalStorageTokens=f;g.getCachedResponse=i}),98); +__d("Base64",[],(function(a,b,c,d,e,f){var g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function h(a){a=a.charCodeAt(0)<<16|a.charCodeAt(1)<<8|a.charCodeAt(2);return String.fromCharCode(g.charCodeAt(a>>>18),g.charCodeAt(a>>>12&63),g.charCodeAt(a>>>6&63),g.charCodeAt(a&63))}var i=">___?456789:;<=_______\0\x01\x02\x03\x04\x05\x06\x07\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19______\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123";function j(a){a=i.charCodeAt(a.charCodeAt(0)-43)<<18|i.charCodeAt(a.charCodeAt(1)-43)<<12|i.charCodeAt(a.charCodeAt(2)-43)<<6|i.charCodeAt(a.charCodeAt(3)-43);return String.fromCharCode(a>>>16,a>>>8&255,a&255)}var k={encode:function(a){a=unescape(encodeURI(a));var b=(a.length+2)%3;a=(a+"\0\0".slice(b)).replace(/[\s\S]{3}/g,h);return a.slice(0,a.length+b-2)+"==".slice(b)},decode:function(a){a=a.replace(/[^A-Za-z0-9+\/]/g,"");var b=a.length+3&3;a=(a+"AAA".slice(b)).replace(/..../g,j);a=a.slice(0,a.length+b-3);try{return decodeURIComponent(escape(a))}catch(a){throw new Error("Not valid UTF-8")}},encodeObject:function(a){return k.encode(ES("JSON","stringify",!1,a))},decodeObject:function(a){return ES("JSON","parse",!1,k.decode(a))},encodeNums:function(a){return String.fromCharCode.apply(String,a.map(function(a){return g.charCodeAt((a|-(a>63?1:0))&-(a>0?1:0)&63)}))}};a=k;f["default"]=a}),66); +__d("sdk.SignedRequest",["Base64"],(function(a,b,c,d,e,f,g){function a(a){if(a==null||a==="")return null;a=a.split(".",2)[1].replace(/\-/g,"+").replace(/\_/g,"/");return c("Base64").decodeObject(a)}g.parse=a}),98); +__d("sdk.getContextType",["sdk.Runtime","sdk.UA"],(function(a,b,c,d,e,f,g){function a(){if(c("sdk.UA").nativeApp())return 3;if(c("sdk.UA").mobile())return 2;return c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)?5:1}g["default"]=a}),98); +__d("sdk.statusCORS",["Log","UrlMap","sdk.AuthState","sdk.AuthStorageUtils","sdk.AuthUtils","sdk.Impressions","sdk.Runtime","sdk.Scribe","sdk.URI","sdk.feature","sdk.getContextType"],(function(a,b,c,d,e,f,g){"use strict";var h=6e4,i=114;function a(a,b,e,f){f===void 0&&(f="facebook");var g=m(b),l=Date.now();function p(){var b=new XMLHttpRequest();b&&(b.open("GET",g.toString(),!0),b.withCredentials=!0,b.onreadystatechange=function(){if(b.readyState===4){if(c("sdk.feature")("e2e_ping_tracking",!0)){var g={init:l,close:Date.now(),method:"cors"};d("Log").debug("e2e: %s",ES("JSON","stringify",!1,g));d("sdk.Impressions").log(i,{payload:g})}if(b.status===200){j(a,(g=b.getResponseHeader("fb-s"))!=null?g:"unknown",(g=b.getResponseHeader("fb-ar"))!=null?g:"{}",f)}else k(a,b.status,e,f)}},b.send())}function q(){n(f)||window.setTimeout(function(){o(f==="facebook"?"instagram":"facebook"),c("sdk.AuthState").setState({shouldSecondLoginRequestTimeOut:!0})},h)}function r(){window.fetch(g.toString(),{referrer:"/",mode:"cors",credentials:"include"}).then(function(b){if(c("sdk.AuthState").getState().shouldSecondLoginRequestTimeOut){c("sdk.AuthState").setState({shouldSecondLoginRequestTimeOut:!1});return}q();if(b.status===200){var d;j(a,(d=b.headers.get("fb-s"))!=null?d:"unknown",(d=b.headers.get("fb-ar"))!=null?d:"{}",f)}else k(a,b.status,e,f)})["catch"](function(b){if(c("sdk.AuthState").getState().shouldSecondLoginRequestTimeOut){c("sdk.AuthState").setState({shouldSecondLoginRequestTimeOut:!1});return}q();k(a,0,e,f)})}typeof window.fetch==="function"?r():p()}function j(a,b,e,f){f===void 0&&(f="facebook");switch(b){case"connected":e=ES("JSON","parse",!1,e);var g={accessToken:e.access_token,userID:e.user_id,expiresIn:Number(e.expires_in),signedRequest:e.signed_request,graphDomain:e.graph_domain};e.enforce_https!=null&&c("sdk.Runtime").setEnforceHttps(!0);e.data_access_expiration_time!=null&&(g.data_access_expiration_time=Number(e.data_access_expiration_time));e.base_domain!=null&&d("sdk.AuthUtils").setBaseDomain(e.base_domain);d("sdk.AuthUtils").setGraphDomain(e.graph_domain);d("sdk.AuthStorageUtils").setLocalStorageToken(g,e.long_lived_token);d("sdk.AuthUtils").removeLogoutState();e={authResponse:g,status:b,loginSource:f,cb:a};d("sdk.AuthUtils").AuthInternalEvent.inform(d("sdk.AuthUtils").AuthConstants.CORS_FETCH_COMPLETED_EVENT,e);break;case"not_authorized":case"unknown":default:g={authResponse:null,status:b,loginSource:f,cb:a};d("sdk.AuthUtils").AuthInternalEvent.inform(d("sdk.AuthUtils").AuthConstants.CORS_FETCH_COMPLETED_EVENT,g)}}function k(a,b,e,f){f===void 0&&(f="facebook");b===0?(c("sdk.feature")("cors_status_fetch_cancel_tracking",!1)&&d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"CORS_STATUS_FETCH_CANCELLED",extra:{message:"Status 0 returned."}}),d("Log").error("Error retrieving login status, fetch cancelled.")):(d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"CORS_STATUS_FETCH",extra:{message:"HTTP Status Code "+b}}),d("Log").error("Error retrieving login status, HTTP status code: "+b));b=l();if(b&&b===f){b={authResponse:e,status:c("sdk.Runtime").getLoginStatus(),loginSource:f,cb:a,shouldSetAuthResponse:!1};d("sdk.AuthUtils").AuthInternalEvent.inform(d("sdk.AuthUtils").AuthConstants.CORS_FETCH_COMPLETED_EVENT,b)}else{e={authResponse:null,status:"unknown",loginSource:f,cb:a,shouldSetAuthResponse:!1};d("sdk.AuthUtils").AuthInternalEvent.inform(d("sdk.AuthUtils").AuthConstants.CORS_FETCH_COMPLETED_EVENT,e)}}function l(){var a=c("sdk.AuthState").getState().currentAuthResponse;return a?d("sdk.AuthUtils").isInstagramLogin(a)?"instagram":"facebook":null}function m(a){a=new(c("sdk.URI"))(d("UrlMap").resolve("www").replace("web.","www.")+"/x/oauth/status").addQueryData("client_id",c("sdk.Runtime").getClientID()).addQueryData("input_token",a).addQueryData("redirect_uri",window.location.href).addQueryData("origin",c("sdk.getContextType")()).addQueryData("sdk","joey").addQueryData("wants_cookie_data",c("sdk.Runtime").getUseCookie());if(window.location.ancestorOrigins){var b=window.location.ancestorOrigins;if(b.length>0){var e="";for(var f=0;f-1;if(!e&&!b){e=d("sdk.AuthStorageUtils").getCachedResponse();if(e!=null){var f;c("sdk.AuthState").setState({loadState:"loaded"});c("sdk.Auth").setAuthResponse(e.authResponse,(f=e.status)!=null?f:"unknown","facebook",!0);d("sdk.AuthUtils").setRevalidateTimer(e.status==="connected"?d("sdk.AuthUtils").AuthConstants.CONNECTED_REVALIDATE_PERIOD:d("sdk.AuthUtils").AuthConstants.DEFAULT_REVALIDATE_PERIOD)}}if(!b)if(c("sdk.AuthState").getState().loadState==="loaded"){if(a){f={authResponse:c("sdk.Auth").getAuthResponse(),status:c("sdk.Runtime").getLoginStatus()};a(f)}return}else if(c("sdk.AuthState").getState().loadState==="loading"){a&&d("sdk.AuthUtils").AuthInternalEvent.subscribe("FB.loginStatus",a);return}a&&d("sdk.AuthUtils").AuthInternalEvent.subscribe("FB.loginStatus",a);c("sdk.AuthState").setState({loadState:"loading"});e=function(a){c("sdk.AuthState").setState({loadState:"loaded"}),d("sdk.AuthUtils").AuthInternalEvent.inform("FB.loginStatus",a),d("sdk.AuthUtils").AuthInternalEvent.clearSubscribers("FB.loginStatus")};i(e)}function m(a){var b="unknown";c("sdk.Auth").setAuthResponse(null,b,null);b={authResponse:null,status:b,loginSource:null};a&&a(b)}var n={getLoginStatus:l,fetchLoginStatus:i,onSDKInit:a};b=n;g["default"]=b}),98); +__d("sdk.LoggingUtils",["sdk.Impressions","sdk.feature"],(function(a,b,c,d,e,f,g){"use strict";var h={buttonLoad:"client_login_button_load",buttonClick:"client_login_click",loginSuccess:"client_login_success",loginCancel:"client_login_cancel",popupHide:"client_login_popup_hide_xfoa",popupShow:"client_login_popup_show_xfoa",loginEnd:"client_login_end",loginStart:"client_login_start",loginCompleteHeartbeat:"client_login_complete_heartbeat",loginStatusPopupShowXfoa:"client_login_status_popup_show_xfoa",loginStatusPopupHideXfoa:"client_login_status_popup_hide_xfoa",loginStatusPopupClickXfoa:"client_login_status_popup_click_xfoa",loginStatusPopupErrorXfoa:"client_login_status_popup_error_xfoa"};function i(a,b,e){d("sdk.Impressions").log(117,{payload:babelHelpers["extends"]({},e||{},{logger_id:a,action:b,client_funnel_version:c("sdk.feature")("oauth_funnel_logger_version",1)})})}function a(a,b){var c=a&&a.cbt!==void 0?Number(a.cbt):0;i(a==null?void 0:a.logger_id,b,{cbt_delta:Date.now()-c})}function b(a,b){b!==void 0&&i(a,b)}function e(a,b){a!==void 0&&i(b,h.loginStatusPopupErrorXfoa,{message:a})}g.logEventName=h;g.logEvent=i;g.logLoginEvent=a;g.logPopupEvent=b;g.logDisambiguationTrayEvent=e}),98); +__d("sdk.Auth",["Log","UrlMap","sdk.AuthState","sdk.AuthStorageUtils","sdk.AuthUtils","sdk.Cookie","sdk.Frictionless","sdk.LoggingUtils","sdk.Runtime","sdk.Scribe","sdk.SignedRequest","sdk.URI","sdk.ui"],(function(a,b,c,d,e,f,g){b("sdk.Frictionless");var h=5*1e3;function a(a,b){b&&b.perms&&!b.scope&&(b.scope=b.perms,delete b.perms,d("Log").warn("OAuth2 specification states that 'perms' should now be called 'scope'. Please update."));var e=c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)||c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.PAGETAB);c("sdk.ui")(babelHelpers["extends"]({method:"permissions.oauth",display:e?"async":"popup",domain:location.hostname},b||{}),a)}function i(a){switch(a){case"connected":return"connected";case"not_authorized":return"not_authorized";default:return"unknown"}}function e(a){(a==null?void 0:a.shouldSetAuthResponse)!==!1&&((a==null?void 0:a.status)==="connected"&&d("sdk.AuthUtils").setRevalidateTimer(),j(a==null?void 0:a.authResponse,i(a==null?void 0:a.status),a==null?void 0:a.loginSource));var b=a==null?void 0:a.cb;if(b!=null){a={authResponse:a==null?void 0:a.authResponse,status:i(a==null?void 0:a.status),loginSource:a==null?void 0:a.loginSource};b(a)}d("sdk.AuthUtils").AuthInternalEvent.clearSubscribers(d("sdk.AuthUtils").AuthConstants.CORS_FETCH_COMPLETED_EVENT);d("sdk.AuthUtils").AuthInternalEvent.clearSubscribers(d("sdk.AuthUtils").AuthConstants.XFOA_FINAL_RESPONSE_EVENT)}function j(a,b,e,f){e===void 0&&(e="facebook");f===void 0&&(f=!1);var g=c("sdk.Runtime").getUserID(),h=c("sdk.Runtime").getLoginStatus(),i="";if(a!=null){c("sdk.AuthState").setState({loadState:"loaded"});if(a.userID!=null&&a.userID!=="")i=a.userID;else if(a.signedRequest!=null&&a.signedRequest!==""){var j=d("sdk.SignedRequest").parse(a.signedRequest);j!=null&&j!==""&&j.user_id!=null&&j.user_id!==""&&(i=j.user_id)}if(c("sdk.Runtime").getUseCookie()){j=a.expiresIn===0?0:Date.now()+a.expiresIn*1e3;d("sdk.Cookie").setSignedRequestCookie(a.signedRequest,j)}}else{c("sdk.Runtime").getUseCookie()&&d("sdk.Cookie").clearSignedRequestCookie();if(c("sdk.Runtime").getUseLocalStorage()){d("sdk.AuthStorageUtils").removeLocalStorageToken((j=e)!=null?j:"facebook")}}j=h==="unknown"&&a!=null||c("sdk.Runtime").getUseCookie()&&c("sdk.Runtime").getCookieUserID()!==i;var k=g!=null&&g!==""&&a==null;g=a!=null&&g!=null&&g!==""&&g!=i;var l=a!=c("sdk.AuthState").getState().currentAuthResponse;h=b!=h;c("sdk.Runtime").setLoginStatus(b);c("sdk.Runtime").setAccessToken(a&&a.accessToken||null);c("sdk.Runtime").setUserID(i);c("sdk.Runtime").setGraphDomain(a&&a.graphDomain||"");c("sdk.AuthState").setState({currentAuthResponse:a});i={authResponse:a,status:b,loginSource:e};(k||g)&&d("sdk.AuthUtils").AuthInternalEvent.inform("logout",i);(j||g)&&d("sdk.AuthUtils").AuthInternalEvent.inform("login",i);l&&d("sdk.AuthUtils").AuthInternalEvent.inform("authresponse.change",i);h&&d("sdk.AuthUtils").AuthInternalEvent.inform("status.change",i);f||d("sdk.AuthStorageUtils").setSessionStorage(a,b);return i}function k(){return c("sdk.AuthState").getState().currentAuthResponse}function f(a){var b=k(),e=d("sdk.AuthUtils").isInstagramLogin(b)?"instagram":"facebook";j(null,"unknown",e);d("sdk.AuthUtils").setLogoutState();if(b!=null&&b.accessToken!=null){e=new(c("sdk.URI"))(d("UrlMap").resolve("www").replace("web.","www.")+"/x/oauth/logout").addQueryData("access_token",b.accessToken);var f=new XMLHttpRequest(),g=!1;f&&(f.open("GET",e.toString(),!0),f.withCredentials=!0,a&&(f.onreadystatechange=function(){if(f.readyState>=2){if(g)return;a({authResponse:k(),status:c("sdk.Runtime").getLoginStatus()});g=!0}}),f.send())}d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"PLATFORM_AUTH_LOGOUT",extra:{args:{fblo:!0}}})}function l(a,b,e,f){return function(e){if(e&&e.access_token){var g=d("sdk.SignedRequest").parse(e.signed_request);g=g!=null?g.user_id!=null?g.user_id:null:null;b={accessToken:e.access_token,userID:g,expiresIn:Number(e.expires_in),signedRequest:e.signed_request,graphDomain:e.graph_domain};e.asset_scopes&&(b=babelHelpers["extends"]({},b,{asset_scopes:ES("JSON","parse",!1,e.asset_scopes)}));b=n(b,e);d("sdk.AuthUtils").removeLogoutState();g="connected";j(b,g);m(f)}else if(e&&e.asset_scopes)b={asset_scopes:ES("JSON","parse",!1,e.asset_scopes)},b=n(b,e),d("sdk.AuthUtils").removeLogoutState(),g="connected",j(b,g),m(f);else if(e&&(e.error||e.error_message||e.error_description||e.error_code||e.error_reason||e.result&&e.result.closeWindow)){d("sdk.AuthUtils").setLogoutState();g="unknown";j(null,g);var h=e.error_message||e.error_description;g={authResponse:k(),status:g,message:h};e.error==="access_denied"||e.result&&e.result.closeWindow?d("sdk.AuthUtils").AuthInternalEvent.inform("loginDenied",g):d("sdk.AuthUtils").AuthInternalEvent.inform("loginError",g)}else e&&e.result&&(d("sdk.AuthUtils").removeLogoutState(),b=e.result.authResponse);if(a){h={authResponse:b,status:c("sdk.Runtime").getLoginStatus()};a(h)}return b}}function m(a){if(a&&a.tp&&a.tp!=="unspecified")return;d("sdk.LoggingUtils").logLoginEvent(a,d("sdk.LoggingUtils").logEventName.loginEnd);window.setTimeout(function(){d("sdk.LoggingUtils").logLoginEvent(a,d("sdk.LoggingUtils").logEventName.loginCompleteHeartbeat)},h)}function n(a,b){b.granted_scopes&&(a=babelHelpers["extends"]({},a,{grantedScopes:b.granted_scopes}));b.data_access_expiration_time&&(a=babelHelpers["extends"]({},a,{data_access_expiration_time:Number(b.data_access_expiration_time)}));b.base_domain!=null&&d("sdk.AuthUtils").setBaseDomain(b.base_domain);d("sdk.AuthUtils").setGraphDomain(b.graph_domain);b.enforce_https&&c("sdk.Runtime").setEnforceHttps(!0);b.referred&&(a=babelHelpers["extends"]({},a,{referred:b.referred}));d("sdk.AuthStorageUtils").setLocalStorageToken(a,b.long_lived_token);return a}b={setFinalAuthResponse:e,login:a,logout:f,setAuthResponse:j,getAuthResponse:k,parseSignedRequest:d("sdk.SignedRequest").parse,xdResponseWrapper:l,subscribe:d("sdk.AuthUtils").AuthInternalEvent.subscribe,unsubscribe:d("sdk.AuthUtils").AuthInternalEvent.unsubscribe};e=b;g["default"]=e}),98); +__d("dedupString",[],(function(a,b,c,d,e,f){"use strict";function a(a){var b;return Object.keys((b={},b[a]=0,b))[0]}f["default"]=a}),66); +__d("emptyFunction",[],(function(a,b,c,d,e,f){function a(a){return function(){return a}}b=function(){};b.thatReturns=a;b.thatReturnsFalse=a(!1);b.thatReturnsTrue=a(!0);b.thatReturnsNull=a(null);b.thatReturnsThis=function(){return this};b.thatReturnsArgument=function(a){return a};c=b;f["default"]=c}),66); +__d("passiveEventListenerUtil",[],(function(a,b,c,d,e,f){"use strict";b=!1;try{c=Object.defineProperty({},"passive",{get:function(){b=!0}});window.addEventListener("test",null,c)}catch(a){}var g=b;function a(a){return g?a:typeof a==="boolean"?a:a.capture||!1}f.isPassiveEventListenerSupported=g;f.makeEventOptions=a}),66); +__d("DOMEventListener",["invariant","dedupString","emptyFunction","passiveEventListenerUtil","wrapFunction"],(function(a,b,c,d,e,f,g){var h=b("passiveEventListenerUtil").isPassiveEventListenerSupported,i,j;window.addEventListener?(i=function(a,c,d,e){e===void 0&&(e=!1),d.wrapper=b("wrapFunction")(d,"entry",b("dedupString")("DOMEventListener.add "+c)),a.addEventListener(c,d.wrapper,h?e:!1)},j=function(a,b,c,d){d===void 0&&(d=!1),a.removeEventListener(b,c.wrapper,h?d:!1)}):window.attachEvent?(i=function(a,c,d,e){e===void 0,d.wrapper=b("wrapFunction")(d,"entry","DOMEventListener.add "+c),a.attachEvent||g(0,2798),a.attachEvent("on"+c,d.wrapper)},j=function(a,b,c,d){d===void 0,a.detachEvent||g(0,2799),a.detachEvent("on"+b,c.wrapper)}):j=i=b("emptyFunction");a={add:function(a,b,c,d){d===void 0&&(d=!1);i(a,b,c,d);return{remove:function(){j(a,b,c,d)}}},remove:j};e.exports=a}),null); +__d("JSONRPC",["Log"],(function(a,b,c,d,e,f){a=function(){"use strict";function a(a){var b=this;this.$1=0;this.$2={};this.remote=function(a){b.$3=a;return b.remote};this.local={};this.$4=a}var c=a.prototype;c.stub=function(a){var b=this;this.remote[a]=function(){var c={jsonrpc:"2.0",method:a};for(var d=arguments.length,e=new Array(d),f=0;fg&&(k=g);k+=(e=m.scrollTop)!=null?e:0;if(c("sdk.UA").mobile()){n=100;if(b){n+=((g=m.height)!=null?g:h-l)/2;d("sdk.DOM").addCss(document.body,"fb_reposition")}else d("sdk.DOM").addCss(document.body,"fb_hidden"),document.body.style.width="auto",k=1e4;e=d("sdk.DOM").getByClass("fb_dialog_padding",a);e.length&&(e[0].style.height=n+"px")}a.style.left=(f>0?f:0)+"px";a.style.top=(k>0?k:0)+"px"}function m(a,b,c){l(a,b,c);b=d("sdk.DOM").getViewportInfo();b=(c=b.scrollTop)!=null?c:0+((c=b.height)!=null?c:h-a.offsetHeight)*.05;d("sdk.DOM").setStyle(a,"top",b+"px")}function n(){var a=document.createElement("div");a.setAttribute("id","fb_dialog_ipad_overlay");k(a);return a}function o(a){a=a||{};var b=document.createElement("div"),e=a;e=e.onClose;if(a.closeIcon&&e){var f=document.createElement("a");f.className="fb_dialog_close_icon";d("DOMEventListener").add(f,"click",e);b.appendChild(f)}e="fb_dialog";e+=" "+(a.classes||"");e+=c("sdk.UA").mobile()?" fb_dialog_mobile":" fb_dialog_advanced";b.className=e;if(a.width){f=parseInt(a.width,10);isNaN(f)||(b.style.width=f+"px")}e=document.createElement("div");a.content&&d("sdk.Content").append(a.content,e);e.className="fb_dialog_content";b.appendChild(e);if(c("sdk.UA").mobile()){f=document.createElement("div");f.className="fb_dialog_padding";b.appendChild(f)}return{dialogElement:b,contentRoot:e}}function p(a){var b=document.body;a?d("sdk.DOM").removeCss(b,"fb_reposition"):d("sdk.DOM").removeCss(b,"fb_hidden")}g.isOrientationPotrait=a;g.addDoubleClickAction=b;g.addIdleDesktopAction=e;g.addMobileOrientationChangeAction=f;g.applyScreenDimensions=k;g.setDialogPositionToCenter=l;g.setDialogPositionToTop=m;g.setupNewDarkOverlay=n;g.setupNewDialog=o;g.onDialogHideCleanup=p}),98); +__d("sdk.fbt",[],(function(a,b,c,d,e,f){a=function(){};a._=function(a){var b=typeof a==="string"?a:a[0];b==null&&(typeof a==="object"&&a!==null&&!Array.isArray(a)&&"*"in a&&(b=a["*"]));return b};b=a;f["default"]=b}),66); +__d("sdk.Dialog",["DOMEventListener","ObservableMixin","Type","sdk.Canvas.Environment","sdk.Content","sdk.DOM","sdk.DialogUtils","sdk.Runtime","sdk.UA","sdk.fbt"],(function(a,b,c,d,e,f,g){var h=30,i=590,j=500,k=240,l=575;function m(){var a=d("sdk.DOM").getViewportInfo(),b=a.height;a=a.width;return b!=null&&a!=null?{width:Math.min(a,j),height:Math.min(b,i)}:null}var n=c("Type").extend({constructor:function(a,b){this.parent(),this.id=a,this.display=b,this._e2e={},o._dialogs||(o._dialogs={},o._addOrientationHandler()),o._dialogs[a]=this,this.trackEvent("init")},trackEvent:function(a,b){if(this._e2e[a])return this;this._e2e[a]=b||Date.now();a=="close"&&this.inform("e2e:end",this._e2e);return this},trackEvents:function(a){typeof a==="string"&&(a=ES("JSON","parse",!1,a));for(var b in a)Object.prototype.hasOwnProperty.call(a,b)&&this.trackEvent(b,a[b]);return this}},c("ObservableMixin")),o={newInstance:function(a,b){return new n(a,b)},_dialogs:null,_lastYOffset:0,_availScreenWidth:null,_overlayListeners:[],_loaderEl:null,_overlayEl:null,_stack:[],_active:null,get:function(a){return o._dialogs[a]},_findRoot:function(a){a=a;while(a){if(d("sdk.DOM").containsCss(a,"fb_dialog"))return a;a.parentElement instanceof HTMLElement&&(a=a.parentElement)}},_createWWWLoader:function(a){a=a?a:"460";var b=document.createElement("div");b.innerHTML='
              Facebook
              ';return o.create({content:b,width:a})},_createMobileLoader:function(){var a=document.createElement("div");c("sdk.UA").nativeApp()?a.innerHTML='
              ':o.isTabletStyle()?a.innerHTML='":a.innerHTML='
              '+c("sdk.fbt")._("Loading...")+'
              ';return o.create({classes:"loading"+(o.isTabletStyle()?" centered":""),content:a})},_setDialogOverlayStyle:function(){o._overlayEl!=null&&d("sdk.DialogUtils").applyScreenDimensions(o._overlayEl)},_showTabletOverlay:function(a){if(!o.isTabletStyle())return;if(o._overlayEl==null){a=d("sdk.DialogUtils").setupNewDarkOverlay();a.className="";o._overlayEl=a;d("sdk.Content").append(o._overlayEl,null)}else o._overlayEl.className=""},_hideTabletOverlay:function(){o.isTabletStyle()&&(o._overlayEl!=null&&(o._overlayEl.className="hidden"),o._overlayListeners.forEach(function(a){return a.remove()}),o._overlayListeners=[])},showLoader:function(a,b){a||(a=function(){});var e=function(){o._hideLoader(),d("sdk.DialogUtils").onDialogHideCleanup(o.isTabletStyle()),o._hideTabletOverlay(),a!=null&&a()};o._showTabletOverlay(e);o._loaderEl||(o._loaderEl=o._findRoot(c("sdk.UA").mobile()?o._createMobileLoader():o._createWWWLoader(b)));b=document.getElementById("fb_dialog_loader_close");if(b){d("sdk.DOM").removeCss(b,"fb_hidden");b=d("DOMEventListener").add(b,"click",e);o._overlayListeners.push(b)}o._loaderEl!=null&&o._makeActive(o._loaderEl)},_hideLoader:function(){o._loaderEl&&o._loaderEl==o._active&&(o._loaderEl.style.top="-10000px")},_makeActive:function(a){o._setDialogSizes(),o._lowerActive(),o._active=a,c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)&&c("sdk.Canvas.Environment").getPageInfo(function(a){o._centerActive(a)}),o._centerActive()},_lowerActive:function(){if(!o._active)return;o._active.style.top="-10000px";o._active=null},_removeStacked:function(a){o._stack=o._stack.filter(function(b){return b!=a})},_centerActive:function(a){var b=o._active;if(!b)return;d("sdk.DialogUtils").setDialogPositionToCenter(b,o.isTabletStyle(),a)},_setDialogSizes:function(a){a===void 0&&(a=!1);if(!c("sdk.UA").mobile())return;for(var b in o._dialogs)if(Object.prototype.hasOwnProperty.call(o._dialogs,b)){var d=document.getElementById(b);d&&(d.style.width=o.getDefaultSize().width+"px",a||(d.style.height=o.getDefaultSize().height+"px"))}},getDefaultSize:function(){if(c("sdk.UA").mobile()){var a=m();if(a){var b;if((b=(b=d("sdk.DOM").getViewportInfo())==null?void 0:b.width)!=null?b:j<=a.width){a.width=(b=(b=d("sdk.DOM").getViewportInfo())==null?void 0:b.width)!=null?b:j-h}if((b=(b=d("sdk.DOM").getViewportInfo())==null?void 0:b.height)!=null?b:i<=a.height){a.height=(b=(b=d("sdk.DOM").getViewportInfo())==null?void 0:b.height)!=null?b:i-h}return a}if(c("sdk.UA").ipad())return{width:j,height:i};if(c("sdk.UA").android())return{width:screen.availWidth,height:screen.availHeight};else{b=window.innerWidth;a=window.innerHeight;var e=b/a>1.2;return{width:b,height:Math.max(a,e?screen.width:screen.height)}}}return{width:l,height:k}},_handleOrientationChange:function(){var a;o._availScreenWidth=(a=(a=d("sdk.DOM").getViewportInfo())==null?void 0:a.width)!=null?a:j;if(o.isTabletStyle())o._setDialogSizes(!0),o._centerActive(),o._setDialogOverlayStyle();else{a=o.getDefaultSize().width;for(var b in o._dialogs)if(Object.prototype.hasOwnProperty.call(o._dialogs,b)){var c=document.getElementById(b);c&&(c.style.width=a+"px")}}},_addOrientationHandler:function(){var a;if(!c("sdk.UA").mobile())return;o._availScreenWidth=(a=(a=d("sdk.DOM").getViewportInfo())==null?void 0:a.width)!=null?a:j;d("sdk.DialogUtils").addMobileOrientationChangeAction(o._handleOrientationChange)},create:function(a){var b=d("sdk.DialogUtils").setupNewDialog(a);d("sdk.Content").append(b.dialogElement);a.visible&&o.show(b.dialogElement);typeof a.styles==="object"&&ES("Object","assign",!1,b.dialogElement.style,a.styles);return b.contentRoot},show:function(a){var b=o._findRoot(a);b!=null&&(o._removeStacked(b),o._hideLoader(),o._makeActive(b),o._stack.push(b),"fbCallID"in a&&o.get(a.fbCallID).inform("iframe_show").trackEvent("show"))},hide:function(a){var b=o._findRoot(a);o._hideLoader();b==o._active&&(o._lowerActive(),d("sdk.DialogUtils").onDialogHideCleanup(o.isTabletStyle()),o._hideTabletOverlay(),"fbCallID"in a&&o.get(a.fbCallID).inform("iframe_hide").trackEvent("hide"))},remove:function(a){var b=o._findRoot(a);if(b){a=o._active==b;o._removeStacked(b);a?(o._hideLoader(),o._stack.length>0?o.show(o._stack.pop()):(o._lowerActive(),d("sdk.DialogUtils").onDialogHideCleanup(o.isTabletStyle()),o._hideTabletOverlay())):o._active===null&&o._stack.length>0&&o.show(o._stack.pop());window.setTimeout(function(){var a;(a=b.parentNode)==null?void 0:a.removeChild(b)},3e3)}},isActive:function(a){a=o._findRoot(a);return a!=null&&a===o._active},isTabletStyle:function(){if(!c("sdk.UA").mobile())return!1;var a=m();return a!=null&&(a.height>=i||a.width>=j)}};a=o;g["default"]=a}),98); +__d("sdk.PlatformVersioning",["ManagedError","sdk.Runtime"],(function(a,b,c,d,e,f,g){var h=/^v\d+\.\d\d?$/;function a(){if(!c("sdk.Runtime").getVersion())throw new(c("ManagedError"))("init not called with valid version")}function b(a){if(!h.test(a))throw new(c("ManagedError"))("invalid version specified")}g.REGEX=h;g.assertVersionIsSet=a;g.assertValidVersion=b}),98); +__d("sdk.warnInsecure",["Log","sdk.Runtime","sdk.Scribe","sdk.feature"],(function(a,b,c,d,e,f,g){"use strict";var h=c("sdk.feature")("https_only_learn_more",""),i={};function a(a){window.location.protocol!=="https:"&&(d("Log").log("error",-1,"The method FB.%s can no longer be called from http pages. %s",a,h),c("sdk.feature")("https_only_scribe_logging",!0)&&!Object.prototype.hasOwnProperty.call(i,a)&&(d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"HttpsOnly",extra:{message:a}}),i[a]=!0));return!0}g["default"]=a}),98); +__d("sdk.api",["ApiClient","sdk.PlatformVersioning","sdk.Runtime","sdk.URI","sdk.warnInsecure"],(function(a,b,c,d,e,f,g){function a(a){for(var b=arguments.length,e=new Array(b>1?b-1:0),f=1;f0)g--,d("Log").debug("resending xdArbiterRegister"),i();else{window.clearInterval(f);if(g===0){d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"XD_FB_QUEUE_INITIALIZATION",extra:{message:"Failed to initialize in "+e+"ms"}});d("Log").error("xdAbiterRegisterAck not received");return}}},b)}var w={rpc:c("sdk.RPC"),_callbacks:{},_forever:{},_channel:m,_origin:n,onMessage:s,init:u,sendToFacebook:t,inform:function(a,b,c,d){t("facebook",{method:a,params:ES("JSON","stringify",!1,b||{}),behavior:d||"p",relation:c})},handler:function(a,b,d,e){a="#"+c("QueryString").encode({cb:w.registerCallback(a,d,e),origin:n+"/"+m,domain:location.hostname,relation:b||"opener",is_canvas:c("sdk.Runtime").isCanvasEnvironment()});return l+a},registerCallback:function(a,b,d){d=d||c("guid")();b&&(w._forever[d]=!0);w._callbacks[d]=a;return d}};d("sdk.Event").subscribe("init:post",function(a){j=a.xdProxyName,u(a.xdProxyName)});f.exports=w}),34); +__d("sdk.modFeatureCheck",["JSSDKConfig"],(function(a,b,c,d,e,f,g){function a(a,b,c){c===void 0&&(c=!1);if(d("JSSDKConfig").features&&a in d("JSSDKConfig").features){var e=d("JSSDKConfig").features[a];if(typeof e==="object"&&Array.isArray(e))return b.some(function(a){return e.some(function(b){return a%b===0})})}return c}g.forIDs=a}),98); +__d("sdk.openMessenger",["sdk.UA"],(function(a,b,c,d,e,f,g){"use strict";var h="https://itunes.apple.com/us/app/messenger/id454638411",i="https://play.google.com/store/apps/details?id=com.facebook.orca",j=3e3;function a(a){var b,d,e=a.link;a=a.app_id;c("sdk.UA").android()?(b="intent://share/#Intent;package=com.facebook.orca;scheme=fb-messenger;S.android.intent.extra.TEXT="+encodeURIComponent(e)+";S.trigger=send_plugin;",a&&(b+="S.platform_app_id="+encodeURIComponent(a)+";"),b+="end",d=i):(b="fb-messenger://share?link="+encodeURIComponent(e),a&&(b+="&app_id="+encodeURIComponent(a)),d=h);setTimeout(function(){window.location.href=d},j);window.location.href=b}g["default"]=a}),98); +__d("sdk.UIServer",["Log","QueryString","UrlMap","createObjectFrom","flattenObject","guid","insertIframe","resolveURI","sdk.Auth","sdk.Auth.LoginStatus","sdk.Content","sdk.DOM","sdk.Dialog","sdk.Event","sdk.Extensions","sdk.Frictionless","sdk.LoggingUtils","sdk.Native","sdk.Popup","sdk.RPC","sdk.Runtime","sdk.UA","sdk.XD","sdk.api","sdk.fbt","sdk.feature","sdk.getContextType","sdk.modFeatureCheck","sdk.openMessenger"],(function(a,b,c,d,e,f,g){var h={transform:function(a){if(a.params.display==="touch"&&p.canIframe(a.params)&&window.postMessage){a.params.channel=p._xdChannelHandler(a.id,"parent");c("sdk.UA").nativeApp()||(a.params.in_iframe=1);return a}else return p.genericTransform(a)},getXdRelation:function(a){var b=a.display;return b==="touch"&&window.postMessage&&a.in_iframe?"parent":p.getXdRelation(a)}};function i(a){return p.isOAuth(a)&&d("sdk.Extensions").supportsDialog("oauth")}function j(a){return p.isOAuth(a)&&(a.is_account_link===!0||a.is_account_link==="true")&&d("sdk.Extensions").supportsDialog("accountLink")}function k(a){if(!c("sdk.Runtime").getClientID()){d("Log").error("FB.login() called before FB.init().");return}if(c("sdk.Auth").getAuthResponse()&&!a.params.scope&&!a.params.asset_scope&&!a.params.auth_type){a.params.plugin_prepare||(d("Log").error("FB.login() called when user is already connected."),a.cb&&(a==null?void 0:a.cb({status:c("sdk.Runtime").getLoginStatus(),authResponse:c("sdk.Auth").getAuthResponse()})));return}var b=a.cb,e=a.id;delete a.cb;a&&a.params&&!a.params.logger_id&&(a.params.logger_id=c("guid")());a&&a.params&&!a.params.cbt&&(a.params.cbt=Date.now());(a.params.fx_app==="instagram"||a.params.fx_app==="ig_single")&&!a.params.scope&&(a.params.scope="public_profile");var f=a.params.auth_type;f=f&&ES(f,"includes",!0,"reauthenticate");var g={token:!0,signed_request:!0,graph_domain:!0};g=Object.keys(ES("Object","assign",!1,a.params.response_type?c("createObjectFrom")(a.params.response_type.split(",")):{},g)).join(",");a.params.display==="async"?(ES("Object","assign",!1,a.params,{client_id:c("sdk.Runtime").getClientID(),origin:c("sdk.getContextType")(),response_type:g,domain:location.hostname}),a.cb=c("sdk.Auth").xdResponseWrapper(b,c("sdk.Auth").getAuthResponse(),"permissions.oauth",a.params)):(f&&p._xdNextHandler(function(a){b({authResponse:null,status:"not_authorized"})},e,a.params.plugin_prepare?"opener.parent":"opener",!0),ES("Object","assign",!1,a.params,{client_id:c("sdk.Runtime").getClientID(),redirect_uri:c("resolveURI")(p.xdHandler(b,e,a.params.plugin_prepare?"opener.parent":"opener",c("sdk.Auth").getAuthResponse(),"permissions.oauth",!f,a.params)),origin:c("sdk.getContextType")(),response_type:g,domain:location.hostname}));e=a.params&&a.params.tp&&a.params.tp!=="unspecified";!a.params.plugin_prepare&&!e&&d("sdk.LoggingUtils").logEvent(a.params.logger_id,d("sdk.LoggingUtils").logEventName.loginStart,{cbt_delta:0});return a}a={"stream.share":{size:{width:670,height:340},url:"sharer.php",transform:function(a){a.params.u||(a.params.u=window.location.toString());a.params.display="popup";return a}},gaming_friendfinder:{url:"gaming/me/friendfinder/",transform:function(a){if(!c("sdk.Runtime").getClientID()){d("Log").error("FriendFinder called before FB.init().");return}a.url+=c("sdk.Runtime").getClientID();a.size={width:400,height:800};return a}},gaming_media_library:{url:"gaming/me/media_asset/",transform:function(a){a.url+=a.params.media_id;a.size={width:400,height:800};return a}},apprequests:{transform:function(a){a=h.transform(a);a.size={width:445,height:635};a.params.display="popup";a.params.in_iframe=!1;a.params.frictionless=c("sdk.Frictionless")&&c("sdk.Frictionless")._useFrictionless;a.params.frictionless&&(c("sdk.Frictionless").isAllowed(a.params.to)&&(a.hideLoader=!0),a.cb=c("sdk.Frictionless")._processRequestResponse(a.cb,a.hideLoader));a.closeIcon=!1;return a},getXdRelation:h.getXdRelation},"permissions.oauth":{url:"dialog/oauth",size:{width:c("sdk.UA").mobile()?null:600,height:c("sdk.UA").mobile()?null:679},transform:function(a){return k(a)}},"permissions.ig_oauth":{url:"oauth/authorize",size:{width:c("sdk.UA").mobile()?null:600,height:c("sdk.UA").mobile()?null:679},transform:function(a){return k(a)}},photo_picker:{url:"dialog/photo_picker",size:{width:c("sdk.UA").mobile()?null:600,height:c("sdk.UA").mobile()?null:679},transform:function(a){if(!c("sdk.Runtime").getClientID()){d("Log").error("Photo Picker was called before FB.init().");return}var b=a.cb,e=a.id;delete a.cb;ES("Object","assign",!1,a.params,{client_id:c("sdk.Runtime").getClientID(),redirect_uri:c("resolveURI")(p.xdHandlerPhotoPicker(b,e,a.params.plugin_prepare?"opener.parent":"opener","photo_picker",a.params)),origin:c("sdk.getContextType")(),domain:location.hostname});return a}},"auth.logout":{transform:function(a){!c("sdk.Runtime").getClientID()?d("Log").error("FB.logout() called before calling FB.init()."):!c("sdk.Auth").getAuthResponse()?d("Log").error("FB.logout() called without an access token."):c("sdk.Auth").logout(a.cb)}},"login.status":{transform:function(a){c("sdk.Auth.LoginStatus").getLoginStatus(a.cb)}},pay:{size:{width:555,height:120},connectDisplay:"popup"},live_broadcast:{transform:function(a){a.params.phase==="create"&&(a.size={width:480,height:280});a.params.phase==="publish"&&(a.size={width:772,height:540});return a},require_access_token:!0},boost:{transform:function(a){a.size={width:960,height:760};a.params.display="popup";return a}},share_referral:{size:{width:482,height:725}}};var l={},m=0;function n(a,b){l[b]=!0;return function(c){delete l[b],a(c)}}function o(a){var b=a.method.toLowerCase();return b==="pay"&&a.display==="async"?!0:!1}var p={Methods:a,_oauthMethodNameSet:new Set(["permissions.oauth","permissions.request","permissions.ig_oauth"]),_loadedNodes:{},_defaultCb:{},_resultToken:'"xxRESULTTOKENxx"',_popupInterval:null,genericTransform:function(a){(a.params.display=="dialog"||a.params.display=="iframe")&&ES("Object","assign",!1,a.params,{display:"iframe",channel:p._xdChannelHandler(a.id,"parent.parent")},!0);return a},isOAuth:function(a){return p._oauthMethodNameSet.has(a.method)||a.method=="oauth"},checkOauthDisplay:function(a){var b=a.scope||a.perms||c("sdk.Runtime").getScope();return!b?a.display:"popup"},prepareCall:function(a,b){var e=a.method.toLowerCase(),f=Object.prototype.hasOwnProperty.call(p.Methods,e)?babelHelpers["extends"]({},p.Methods[e]):{},g=a.id||c("guid")(),h=!0;ES("Object","assign",!1,a,{app_id:c("sdk.Runtime").getClientID(),locale:c("sdk.Runtime").getLocale(),sdk:"joey",access_token:h&&c("sdk.Runtime").getAccessToken()||void 0});a.display=p.getDisplayMode(f,a);f.url||(f.url="dialog/"+e);(f.url=="dialog/oauth"||f.url=="dialog/permissions.request")&&(a.display=="iframe"||a.display=="touch"&&a.in_iframe)&&(a.display=p.checkOauthDisplay(a));if(f.url=="dialog/oauth"){if(m>=((h=c("sdk.feature")("max_oauth_dialog_retries",100))!=null?h:100)){d("Log").error("Your request to oauth has exceeded the rate limit, please try again later");return}m++}a.display=="popup"&&!f.require_access_token&&delete a.access_token;if(c("sdk.Runtime").getIsVersioned()&&f.url.substring(0,7)==="dialog/"){h=a.version||c("sdk.Runtime").getVersion();h!=null&&h!==""&&h!=="null"&&(f.url=h+"/"+f.url)}if(o(a)){if(l[e]){h='Dialog "'+e+'" is trying to run more than once.';d("Log").warn(h);b({error_code:-100,error_message:h});return}b=n(b,e)}h={cb:b,id:g,size:f.size||p.getDefaultSize(),url:d("UrlMap").resolve(a.fx_app==="instagram"||a.fx_app==="ig_single"?"www_instagram":a.display=="touch"?"m":"www")+"/"+f.url,params:a,name:e,dialog:c("sdk.Dialog").newInstance(g,a.display)};b=f.transform?f.transform:p.genericTransform;if(b){h=b(h);if(!h)return}a.display==="touch"&&a.in_iframe&&(h.params.parent_height=window.innerHeight);e=f.getXdRelation||p.getXdRelation;b=e(h.params);!(h.id in p._defaultCb)&&!("next"in h.params)&&!("redirect_uri"in h.params)&&(h.params.next=p._xdResult(h.cb,h.id,b,!0));(b==="parent"||b==="opener")&&ES("Object","assign",!1,h.params,{channel_url:p._xdChannelHandler(g,b==="parent"?"parent.parent":"opener")},!0);h=p.prepareParams(h);return h},prepareParams:function(a){a.params.display!=="async"&&delete a.params.method;a.params.kid_directed_site=c("sdk.Runtime").getKidDirectedSite()||a.params.kid_directed_site;a.params=c("flattenObject")(a.params);var b=c("QueryString").encode(a.params);!c("sdk.UA").nativeApp()&&p.urlTooLongForIE(a.url+"?"+b)?a.post=!0:b&&(a.url+="?"+b);return a},urlTooLongForIE:function(a){return c("sdk.UA").ie()!=null&&c("sdk.UA").ie()<=8&&a.length>2048},getDisplayMode:function(a,b){if(b.display==="hidden"||b.display==="none"||b.display==="native")return b.display;var e=c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)||c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.PAGETAB);if(e&&(d("sdk.modFeatureCheck").forIDs("force_popup_to_canvas_apps_with_id",[c("sdk.Runtime").getClientID()])||c("sdk.feature")("force_popup_to_all_canvas_app",!1)))return"popup";if(e&&!b.display)return"async";if(i(b)||j(b))return"async";if(c("sdk.UA").mobile()||b.display==="touch")return"touch";if((b.display=="iframe"||b.display=="dialog")&&!p.canIframe(b)){d("Log").error('"dialog" mode can only be used when the user is connected.');return"popup"}return a.connectDisplay&&!e?a.connectDisplay:b.display||(p.canIframe(b)?"dialog":"popup")},canIframe:function(a){return c("sdk.Runtime").getAccessToken()},getXdRelation:function(a){a=a.display;if(a==="popup"||a==="touch")return"opener";if(a==="dialog"||a==="iframe"||a==="hidden"||a==="none")return"parent";return a==="async"?"parent.frames["+window.name+"]":""},popup:function(a){var b=d("sdk.Popup").popup(a,p.isOAuth({method:a.name}));b&&(p.setLoadedNode(a,b,"popup"),a.id in p._defaultCb&&p._popupMonitor())},setLoadedNode:function(a,b,c){c==="iframe"&&(b.fbCallID=a.id),b={node:b,type:c,fbCallID:a.id,method:a.name,params:a.params},p._loadedNodes[a.id]=b},getLoadedNode:function(a){a=typeof a==="object"?a.id:a;a=p._loadedNodes[a];return a?a.node:null},hidden:function(a){a.className="FB_UI_Hidden",a.root=d("sdk.Content").appendHidden(document.createElement("div")),p._insertIframe(a)},iframe:function(a){a.className="FB_UI_Dialog";var b=function(){var b=ES("JSON","stringify",!1,{error_code:4201,error_message:c("sdk.fbt")._("User canceled the Dialog flow")});p._triggerDefault(a.id,b)},e={onClose:b,closeIcon:a.closeIcon===void 0?!0:a.closeIcon,classes:c("sdk.Dialog").isTabletStyle()?"centered":""};a.root=c("sdk.Dialog").create(e);a.hideLoader||c("sdk.Dialog").showLoader(b,a.size.width);d("sdk.DOM").addCss(a.root,"fb_dialog_iframe");p._insertIframe(a)},touch:function(a){a.params&&a.params.in_iframe?a.ui_created?c("sdk.Dialog").showLoader(function(){p._triggerDefault(a.id,null)},0):p.iframe(a):c("sdk.UA").nativeApp()&&!a.ui_created?(a.frame=a.id,c("sdk.Native").onready(function(){p.setLoadedNode(a,c("sdk.Native").open(a.url+"#cb="+a.frameName),"native")}),p._popupMonitor()):a.ui_created||p.popup(a)},async:function(a){a.params.redirect_uri=location.protocol+"//"+location.host+location.pathname;delete a.params.access_token;a.params.is_canvas=c("sdk.Runtime").isCanvasEnvironment();var b=function(b){b=b.result;if(b&&b.e2e){var d=c("sdk.Dialog").get(a.id);d.trackEvents(b.e2e);d.trackEvent("close");delete b.e2e}a.cb(b)};i(a.params)||j(a.params)?(a.params.method="oauth",a.params.redirect_uri=a.params.next,d("sdk.Extensions").remote.showDialog(a.params,b)):c("sdk.RPC").remote.showDialog(a.params,b)},"native":function(a){c("sdk.openMessenger")(a.params)},getDefaultSize:function(){return c("sdk.Dialog").getDefaultSize()},_insertIframe:function(a){p._loadedNodes[a.id]=!1;var b=function(b){a.id in p._loadedNodes&&p.setLoadedNode(a,b,"iframe")};a.post?c("insertIframe")({url:"about:blank",root:a.root,className:a.className,width:a.size.width,height:a.size.height,id:a.id,onInsert:b,onload:function(b){d("sdk.Content").submitToTarget({url:a.url,target:b.name,params:a.params})}}):c("insertIframe")({url:a.url,root:a.root,className:a.className,width:a.size.width,height:a.size.height,id:a.id,name:a.frameName,onInsert:b})},_handleResizeMessage:function(a,b){a=p.getLoadedNode(a);if(!a)return;b.height&&(a.style.height=b.height+"px");b.width&&b.width!=0&&(a.style.width=b.width+"px");c("sdk.XD").inform("resize.ack",b||{},"parent.frames["+a.name+"]");!c("sdk.Dialog").isActive(a)?c("sdk.Dialog").show(a):c("sdk.Dialog")._centerActive()},_triggerDefault:function(a,b){var c={frame:a,result:""};b&&(c.result=b);p._xdRecv(c,p._defaultCb[a]||function(){})},_popupMonitor:function(){var a;for(var b in p._loadedNodes)if(Object.prototype.hasOwnProperty.call(p._loadedNodes,b)&&b in p._defaultCb){var d=function(){var d=p._loadedNodes[b];if(d.type!="popup"&&d.type!="native")return"continue";var e=d.node;try{e.closed?p.isOAuth(d)?c("sdk.Auth.LoginStatus").getLoginStatus(function(a){(a==null?void 0:a.status)==="connected"&&d.params!=null&&d.params.return_scopes?c("sdk.api")("/me/permissions",function(c){(!c||c.error)&&p._triggerDefault(b,a);var d="";c=c&&c.data?c.data:[];for(var e=0;e=-b)return!1}i=a;c("sdk.RPC").remote.setSize(a);return!0}function a(a,b){b===void 0&&typeof a==="number"&&(b=a,a=!0),a||a===void 0?(h===null&&(h=window.setInterval(function(){k()},b||100)),k()):h!==null&&(window.clearInterval(h),h=null)}c("sdk.RPC").stub("setSize");b={setSize:k,setAutoGrow:a};e=b;g["default"]=e}),98); +__d("sdk.Canvas.Navigation",["sdk.RPC"],(function(a,b,c,d,e,f){function a(a){b("sdk.RPC").local.navigate=function(b){a({path:b})},b("sdk.RPC").remote.setNavigationEnabled(!0)}b("sdk.RPC").stub("setNavigationEnabled");c={setUrlHandler:a};d=c;f["default"]=d}),66); +__d("sdk.Canvas.Plugin",["Log","sdk.Runtime","sdk.UA","sdk.api"],(function(a,b,c,d,e,f,g){var h="CLSID:D27CDB6E-AE6D-11CF-96B8-444553540000",i="CLSID:444785F1-DE89-4295-863A-D46C3A781394",j=null;f=c("sdk.UA").osx()&&c("sdk.UA").osx.getVersionParts();var k=!(f&&f[0]>10&&f[1]>10&&(c("sdk.UA").chrome()>=31||c("sdk.UA").webkit()>=537.71||c("sdk.UA").firefox()>=25));function l(a){a._hideunity_savedstyle={},a._hideunity_savedstyle.left=a.style.left,a._hideunity_savedstyle.position=a.style.position,a._hideunity_savedstyle.width=a.style.width,a._hideunity_savedstyle.height=a.style.height,a.style.left="-10000px",a.style.position="absolute",a.style.width="1px",a.style.height="1px"}function m(a){a._hideunity_savedstyle&&(a.style.left=a._hideunity_savedstyle.left,a.style.position=a._hideunity_savedstyle.position,a.style.width=a._hideunity_savedstyle.width,a.style.height=a._hideunity_savedstyle.height)}function n(a){a._old_visibility=a.style.visibility,a.style.visibility="hidden"}function o(a){a.style.visibility=a._old_visibility||"",delete a._old_visibility}function p(a){var b=a.type?a.type.toLowerCase():null;b=b==="application/x-shockwave-flash"||a.classid&&a.classid.toUpperCase()==h;if(!b)return!1;b=/opaque|transparent/i;if(b.test(a.getAttribute("wmode")))return!1;for(var c=0;c=1/d("JSSDKCanvasPrefetcherConfig").sampleRate||!d("JSSDKCanvasPrefetcherConfig").enabled||ES(i,"includes",!0,c("sdk.Runtime").getClientID()))return;setTimeout(l,3e4)}function b(a){j=a}function e(a){k.push(a)}f={COLLECT_AUTOMATIC:h.AUTOMATIC,COLLECT_MANUAL:h.MANUAL,addStaticResource:e,setCollectionMode:b,_maybeSample:a};e=f;g["default"]=e}),98); +__d("sdk.Canvas.Tti",["sdk.RPC","sdk.Runtime"],(function(a,b,c,d,e,f,g){function h(a,b){b={appId:c("sdk.Runtime").getClientID(),time:Date.now(),name:b};b=[b];a&&b.push(function(b){a(b.result)});c("sdk.RPC").remote.logTtiMessage.apply(null,b)}function a(){h(null,"StartIframeAppTtiTimer")}function b(a){h(a,"StopIframeAppTtiTimer")}function d(a){h(a,"RecordIframeAppTti")}c("sdk.RPC").stub("logTtiMessage");e={setDoneLoading:d,startTimer:a,stopTimer:b};f=e;g["default"]=f}),98); +__d("sdk.Canvas-public",["Assert","FB","Log","sdk.Canvas.Environment","sdk.Canvas.IframeHandling","sdk.Canvas.Navigation","sdk.Canvas.Plugin","sdk.Canvas.Prefetcher","sdk.Canvas.Tti","sdk.Event","sdk.RPC","sdk.Runtime"],(function(a,b,c,d,e,f,g){function a(){c("FB").provide("Canvas",{setSize:function(a){c("Assert").maybeObject(a,"Invalid argument");return c("sdk.Canvas.IframeHandling").setSize.apply(null,arguments)},setAutoGrow:function(){return c("sdk.Canvas.IframeHandling").setAutoGrow.apply(null,arguments)},getPageInfo:function(a){c("Assert").isFunction(a,"Invalid argument");return c("sdk.Canvas.Environment").getPageInfo.apply(null,arguments)},scrollTo:function(a,b){c("Assert").maybeNumber(a,"Invalid argument");c("Assert").maybeNumber(b,"Invalid argument");return c("sdk.Canvas.Environment").scrollTo.apply(null,arguments)},setDoneLoading:function(a){c("Assert").maybeFunction(a,"Invalid argument");return c("sdk.Canvas.Tti").setDoneLoading.apply(null,arguments)},startTimer:function(){return c("sdk.Canvas.Tti").startTimer.apply(null,arguments)},stopTimer:function(a){c("Assert").maybeFunction(a,"Invalid argument");return c("sdk.Canvas.Tti").stopTimer.apply(null,arguments)},setUrlHandler:function(a){c("Assert").isFunction(a,"Invalid argument");return c("sdk.Canvas.Navigation").setUrlHandler.apply(null,arguments)}}),c("sdk.RPC").local.fireEvent=ES(d("sdk.Event").fire,"bind",!0,d("sdk.Event")),d("sdk.Event").subscribe("init:post",function(a){c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)&&(c("Assert").isTrue(!a.hideFlashCallback||!a.hidePluginCallback,"cannot specify deprecated hideFlashCallback and new hidePluginCallback"),c("sdk.Canvas.Plugin")._setHidePluginCallback(a.hidePluginCallback||a.hideFlashCallback))})}function h(){c("sdk.RPC").local.hidePluginObjects=function(){d("Log").info("hidePluginObjects called"),c("sdk.Canvas.Plugin").hidePluginCallback({state:"opened"})},c("sdk.RPC").local.showPluginObjects=function(){d("Log").info("showPluginObjects called"),c("sdk.Canvas.Plugin").hidePluginCallback({state:"closed"})},c("sdk.RPC").local.showFlashObjects=c("sdk.RPC").local.showPluginObjects,c("sdk.RPC").local.hideFlashObjects=c("sdk.RPC").local.hidePluginObjects}function b(){h(),c("FB").provide("Canvas.Plugin",c("sdk.Canvas.Plugin"))}function e(){c("FB").provide("Canvas.Prefetcher",c("sdk.Canvas.Prefetcher")),d("sdk.Event").subscribe("init:post",function(a){c("sdk.Runtime").isEnvironment(c("sdk.Runtime").ENVIRONMENTS.CANVAS)&&c("sdk.Canvas.Prefetcher")._maybeSample()})}function f(){d("sdk.Event").subscribe(d("sdk.Event").SUBSCRIBE,a);d("sdk.Event").subscribe(d("sdk.Event").UNSUBSCRIBE,b);c("sdk.RPC").stub("useFriendsOnline");function a(a,b){if(a!="canvas.friendsOnlineUpdated")return;b.length===1&&c("sdk.RPC").remote.useFriendsOnline(!0)}function b(a,b){if(a!="canvas.friendsOnlineUpdated")return;b.length===0&&c("sdk.RPC").remote.useFriendsOnline(!1)}}a={init:a,initCanvasPlugin:b,initCanvasPrefetcher:e,initCanvasPresence:f,initRPC:h};b=a;g["default"]=b}),98); +__d("sdk.Event-public",["FB","Log","sdk.Event"],(function(a,b,c,d,e,f,g){function a(){var a=function(a){return d("Log").error("FB.Event."+a+"() has been deprecated")};c("FB").provide("Event",{subscribe:function(a,b){return d("sdk.Event").subscribe(a,b)},unsubscribe:ES(d("sdk.Event").unsubscribe,"bind",!0,d("sdk.Event")),clear:ES(a,"bind",!0,null,"clear"),fire:ES(a,"bind",!0,null,"fire")})}b={init:a};e=b;g["default"]=e}),98); +__d("sdk.Frictionless-public",["FB","sdk.Event","sdk.Frictionless"],(function(a,b,c,d,e,f,g){"use strict";function a(){d("sdk.Event").subscribe("init:post",function(a){a.frictionlessRequests&&c("sdk.Frictionless").init()}),c("FB").provide("Frictionless",c("sdk.Frictionless"))}b={init:a};e=b;g["default"]=e}),98); +__d("sdk.GamingServices",["sdk.api","sdk.ui"],(function(a,b,c,d,e,f,g){function a(a){c("sdk.ui")({display:"touch",method:"gaming_friendfinder"},a)}function b(a,b,d,e){c("sdk.api")("me/photos","POST",{caption:b,url:a},function(a){if(d===!1||!a||a.error)e!==null&&e(a);else{var b=a.id;c("sdk.ui")({display:"touch",method:"gaming_media_library",media_id:b},function(b){e!==null&&e(a)})}})}d={friendFinder:a,uploadImageToMediaLibrary:b};e=d;g["default"]=e}),98); +__d("sdk.GamingServices-public",["FB","sdk.GamingServices"],(function(a,b,c,d,e,f,g){"use strict";function a(){c("FB").provide("",{gamingservices:c("sdk.GamingServices")})}b={init:a};d=b;g["default"]=d}),98); +__d("sdk.PluginUtils",["resolveURI","sdk.Event"],(function(a,b,c,d,e,f,g){var h={string:function(a){return a},bool:function(a){return a!=null?/^(?:true|1|yes|on)$/i.test(a):void 0},url:function(a){return c("resolveURI")(a)},url_maybe:function(a){return a!=null&&a!==""?c("resolveURI")(a):void 0},hostname:function(a){return a!=null&&a!==""?a:"window.location.hostname"},px:function(a){if(typeof a==="string"){var b=a.match(/^(\d+)(?:px)?$/);return b!=null?parseInt(b[0],10):void 0}else if(typeof a==="number")return a;else return void 0},text:function(a){return a}};function i(a,b){var c;return(c=(c=(c=(c=(c=(c=a[b])!=null?c:a[b.replace(/_/g,"-")])!=null?c:a[b.replace(/_/g,"")])!=null?c:a["data-"+b])!=null?c:a["data-"+b.replace(/_/g,"-")])!=null?c:a["data-"+b.replace(/_/g,"")])!=null?c:void 0}function a(a,b,c,d){Object.keys(a).forEach(function(e){if(a[e]==="text"&&!c[e]){var f;c[e]=(f=(f=b.textContent)!=null?f:b.innerText)!=null?f:void 0;b.setAttribute(e,c[e])}d[e]=h[a[e]](i(c,e))})}function j(a,b,c){b==="100%"?a.style.width="100%":b!=null&&b!==""&&(a.style.width=b+"px"),(c!=null&&c!==""||c===0)&&(a.style.height=c+"px")}function b(a){return function(b){b={width:b.width,height:b.height,pluginID:a};d("sdk.Event").fire("xfbml.resize",b)}}function e(a){return a==="100%"?"100%":a!=null?parseInt(a,10):void 0}function f(a){a!=null&&j(a,0,0)}var k={skin:"string",font:"string",width:"string",height:"px",ref:"string",lazy:"bool",color_scheme:"string"};g.getVal=i;g.validate=a;g.resize=j;g.resizeBubbler=b;g.parse=e;g.collapseIframe=f;g.baseParams=k}),98); +__d("isNumberLike",[],(function(a,b,c,d,e,f){function a(a){return!isNaN(parseFloat(a))&&isFinite(a)}f["default"]=a}),66); +__d("sdk.createIframe",["DOMEventListener","getBlankIframeSrc","guid","isNumberLike"],(function(a,b,c,d,e,f,g){function a(a){var b=ES("Object","assign",!1,{},a),e,f=b.name||c("guid")(),g=b.root,h=b.style||{border:"none"},i=b.url,j=b.onload,k=b.onerror;e=document.createElement("iframe");e.name=f;delete b.style;delete b.name;delete b.url;delete b.root;delete b.onload;delete b.onerror;delete b.height;delete b.width;b.frameBorder===void 0&&(b.frameBorder=0);b.allowTransparency===void 0&&(b.allowTransparency=!0);b.allowFullscreen===void 0&&(b.allowFullscreen=!0);b.scrolling===void 0&&(b.scrolling="no");b.allow===void 0&&(b.allow="encrypted-media");b.lazy&&(b.loading="lazy",h.visibility&&delete h.visibility);delete b.lazy;a.width!=null&&c("isNumberLike")(a.width)&&(e.width=a.width+"px");a.height!=null&&c("isNumberLike")(a.height)&&(e.height=a.height+"px");b.testid&&e.dataset!=null&&(e.dataset.testid=b.testid,delete b.testid);for(f in b)Object.prototype.hasOwnProperty.call(b,f)&&e.setAttribute(f,b[f]);ES("Object","assign",!1,e.style,h);e.src=c("getBlankIframeSrc")();g!=null&&g.appendChild(e);if(j)var l=d("DOMEventListener").add(e,"load",function(){l.remove(),j()});if(k)var m=d("DOMEventListener").add(e,"error",function(){m.remove(),k()});e.src=i;return e}g["default"]=a}),98); +__d("IframePlugin",["Log","ObservableMixin","QueryString","Type","UrlMap","guid","sdk.Auth.LoginStatus","sdk.AuthUtils","sdk.DOM","sdk.Event","sdk.PlatformVersioning","sdk.PluginUtils","sdk.Runtime","sdk.UA","sdk.URI","sdk.XD","sdk.createIframe"],(function(a,b,c,d,e,f,g){var h=c("Type").extend({constructor:function(a,b,e,f){var g=this;this.parent();e=e.replace(/-/g,"_");var h=d("sdk.PluginUtils").getVal(f,"plugin_id");this.subscribe("xd.resize",d("sdk.PluginUtils").resizeBubbler(h));this.subscribe("xd.resize.flow",d("sdk.PluginUtils").resizeBubbler(h));this.subscribe("xd.resize.flow",function(a){ES("Object","assign",!1,g._iframeOptions.root.style,{verticalAlign:"bottom",overflow:""}),d("sdk.PluginUtils").resize(g._iframeOptions.root,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),g.updateLift(),window.clearTimeout(g._timeoutID)});this.subscribe("xd.resize",function(a){ES("Object","assign",!1,g._iframeOptions.root.style,{verticalAlign:"bottom",overflow:""}),d("sdk.PluginUtils").resize(g._iframeOptions.root,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),d("sdk.PluginUtils").resize(g._iframe,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),g._isIframeResized=!0,g.updateLift(),window.clearTimeout(g._timeoutID)});this.subscribe("xd.resize.iframe",function(a){d("sdk.PluginUtils").resize(g._iframe,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),g._isIframeResized=!0,g.updateLift(),window.clearTimeout(g._timeoutID)});this.subscribe("xd.sdk_event",function(b){var c=ES("JSON","parse",!1,b.data);c.pluginID=h;d("sdk.Event").fire(b.event,c,a)});var i=d("UrlMap").resolve("www")+"/plugins/"+e+".php?",j={};d("sdk.PluginUtils").validate(this.getParams(),a,f,j);d("sdk.PluginUtils").validate(d("sdk.PluginUtils").baseParams,a,f,j);ES("Object","assign",!1,j,{app_id:c("sdk.Runtime").getClientID(),locale:c("sdk.Runtime").getLocale(),sdk:"joey",kid_directed_site:c("sdk.Runtime").getKidDirectedSite(),channel:d("sdk.XD").handler(function(a){a!=null&&g.inform("xd."+a.type,a)},"parent.parent",!0)});this.shouldIgnoreWidth()&&(j.width=void 0);j.container_width=a.offsetWidth;d("sdk.DOM").addCss(a,"fb_iframe_widget");var k=c("guid")();this.subscribe("xd.verify",function(a){d("sdk.XD").sendToFacebook(k,{method:"xd/verify",params:ES("JSON","stringify",!1,a.token)})});this.subscribe("xd.refreshLoginStatus",function(){d("sdk.AuthUtils").removeLogoutState(),c("sdk.Auth.LoginStatus").getLoginStatus(ES(g.inform,"bind",!0,g,"login.status"),!0)});f=document.createElement("span");ES("Object","assign",!1,f.style,{verticalAlign:"top",width:j.lazy?"1px":"0px",height:j.lazy?"1px":"0px",overflow:"hidden"});this._element=a;this._ns=b;this._tag=e;this._params=j;this._config=this.getConfig();this._iframeOptions={root:f,url:i+c("QueryString").encode(j),name:k,width:this._config.mobile_fullsize&&c("sdk.UA").mobile()?void 0:j.width||1e3,height:j.height||1e3,style:{border:"none",visibility:"hidden"},title:this._ns+":"+this._tag+" Facebook Social Plugin",testid:this._ns+":"+this._tag+" Facebook Social Plugin",onload:function(){return g.inform("render")},onerror:function(){return d("sdk.PluginUtils").collapseIframe(g._iframe)},lazy:j.lazy};this.isFluid()&&j.width!=="auto"&&(d("sdk.DOM").addCss(this._element,"fb_iframe_widget_fluid_desktop"),!j.width&&this._config.full_width&&(this._element.style.width="100%",this._iframeOptions.root.style.width="100%",this._iframeOptions.style.width="100%",this._params.container_width=this._element.offsetWidth,this._iframeOptions.url=i+c("QueryString").encode(this._params)))},shouldIgnoreWidth:function(){return c("sdk.UA").mobile()&&this.getConfig().mobile_fullsize},useInlineHeightForMobile:function(){return!0},process:function(){var a=this;if(c("sdk.Runtime").getIsVersioned()){d("sdk.PlatformVersioning").assertVersionIsSet();var b=new(c("sdk.URI"))(this._iframeOptions.url);this._iframeOptions.url=b.setPath("/"+c("sdk.Runtime").getVersion()+b.getPath()).toString()}b=babelHelpers["extends"]({},this._params);delete b.channel;var e=c("QueryString").encode(b);if(this._element.getAttribute("fb-iframe-plugin-query")==e){d("Log").info("Skipping render: %s:%s %s",this._ns,this._tag,e);this.inform("render");return}this._element.setAttribute("fb-iframe-plugin-query",e);this.subscribe("render",function(){d("sdk.Event").fire("iframeplugin:onload"),a._iframe.style.visibility="visible",a._isIframeResized||d("sdk.PluginUtils").collapseIframe(a._iframe)});while(this._element.firstChild)this._element.removeChild(this._element.firstChild);this._element.appendChild(this._iframeOptions.root);var f=c("sdk.UA").mobile()?120:45;this._timeoutID=window.setTimeout(function(){d("sdk.PluginUtils").collapseIframe(a._iframe),d("Log").warn("%s:%s failed to resize in %ss",a._ns,a._tag,f)},f*1e3);this._iframe=c("sdk.createIframe")(this._iframeOptions);d("sdk.Event").fire("iframeplugin:create");if(c("sdk.UA").mobile()||b.width==="auto"){this.useInlineHeightForMobile()&&d("sdk.DOM").addCss(this._element,"fb_iframe_widget_fluid");if(!this._iframeOptions.width){ES("Object","assign",!1,this._element.style,{display:"block",width:"100%",height:"auto"});ES("Object","assign",!1,this._iframeOptions.root.style,{width:"100%",height:"auto"});e={height:"auto",position:"static",width:"100%"};(c("sdk.UA").iphone()||c("sdk.UA").ipad())&&ES("Object","assign",!1,e,{width:"220px","min-width":"100%"});ES("Object","assign",!1,this._iframe.style,e)}}},getConfig:function(){return{}},isFluid:function(){var a=this.getConfig();return a.fluid},updateLift:function(){var a=this._iframe.style.width===this._iframeOptions.root.style.width&&this._iframe.style.height===this._iframeOptions.root.style.height;d("sdk.DOM")[a?"removeCss":"addCss"](this._iframe,"fb_iframe_widget_lift")}},c("ObservableMixin"));h.withParams=function(a,b){return h.extend({getParams:function(){return a},getConfig:function(){return b?b:{}}})};a=h;g["default"]=a}),98); +__d("PluginConfig",["sdk.feature"],(function(a,b,c,d,e,f,g){a={mobile_fullsize:!0};b={mobile_fullsize:!0};d={mobile_fullsize:!0};e={mobile_fullsize:!0};f={mobile_fullsize:!0};c={fluid:c("sdk.feature")("fluid_embed",!1),mobile_fullsize:!0};a={comment_embed:a,messengerpreconfirmation:b,messengeraccountconfirmation:d,messengerbusinesslink:e,messengertoggle:f,post:c};b=a;g["default"]=b}),98); +__d("PluginAttrTypes",[],(function(a,b,c,d,e,f){"use strict";a="string";b="bool";c="url";f.string=a;f.bool=b;f.url=c}),66); +__d("PluginTags",["PluginAttrTypes"],(function(a,b,c,d,e,f,g){var h={ad_library_spend_tracker:{country:d("PluginAttrTypes").string,time_preset:d("PluginAttrTypes").string,custom_start_date:d("PluginAttrTypes").string,custom_end_date:d("PluginAttrTypes").string,race_type:d("PluginAttrTypes").string,state:d("PluginAttrTypes").string,district:d("PluginAttrTypes").string,page_ids:d("PluginAttrTypes").string,include_vps:d("PluginAttrTypes").bool},comment_embed:{href:d("PluginAttrTypes").url,include_parent:d("PluginAttrTypes").bool},composer:{action_type:d("PluginAttrTypes").string,action_properties:d("PluginAttrTypes").string},create_event_button:{},group:{href:d("PluginAttrTypes").url,show_social_context:d("PluginAttrTypes").bool,show_group_info:d("PluginAttrTypes").bool,show_metadata:d("PluginAttrTypes").bool},like:{href:d("PluginAttrTypes").url,layout:d("PluginAttrTypes").string,show_faces:d("PluginAttrTypes").bool,share:d("PluginAttrTypes").bool,action:d("PluginAttrTypes").string,send:d("PluginAttrTypes").bool,size:d("PluginAttrTypes").string},like_box:{href:d("PluginAttrTypes").string,show_faces:d("PluginAttrTypes").bool,header:d("PluginAttrTypes").bool,stream:d("PluginAttrTypes").bool,force_wall:d("PluginAttrTypes").bool,show_border:d("PluginAttrTypes").bool,id:d("PluginAttrTypes").string,connections:d("PluginAttrTypes").string,profile_id:d("PluginAttrTypes").string,name:d("PluginAttrTypes").string},page:{href:d("PluginAttrTypes").string,hide_cta:d("PluginAttrTypes").bool,hide_cover:d("PluginAttrTypes").bool,small_header:d("PluginAttrTypes").bool,adapt_container_width:d("PluginAttrTypes").bool,show_facepile:d("PluginAttrTypes").bool,show_posts:d("PluginAttrTypes").bool,tabs:d("PluginAttrTypes").string},page_events:{href:d("PluginAttrTypes").url},post:{href:d("PluginAttrTypes").url,show_text:d("PluginAttrTypes").bool},profile_pic:{uid:d("PluginAttrTypes").string,linked:d("PluginAttrTypes").bool,href:d("PluginAttrTypes").string,size:d("PluginAttrTypes").string,facebook_logo:d("PluginAttrTypes").bool},send_to_mobile:{max_rows:d("PluginAttrTypes").string,show_faces:d("PluginAttrTypes").bool,size:d("PluginAttrTypes").string}},i={fan:"like_box",likebox:"like_box"};Object.keys(i).forEach(function(a){h[a]=h[i[a]]});a=h;g["default"]=a}),98); +__d("runOnce",[],(function(a,b,c,d,e,f){function a(a){var b=!1,c;return function(){b||(b=!0,c=a());return c}}f["default"]=a}),66); +__d("XFBML",["Assert","Log","runOnce","sdk.Observable"],(function(a,b,c,d,e,f,g){var h={},i={},j=0,k=new(d("sdk.Observable").Observable)();function l(a,b){return(a[b]+"").trim()}function m(a){return h[l(a,"nodeName").toLowerCase()]}function n(a){var b=l(a,"className").split(/\s+/).filter(function(a){return Object.prototype.hasOwnProperty.call(i,a)});if(b.length===0)return void 0;if(a.getAttribute("fb-xfbml-state")||!a.childNodes||a.childNodes.length===0||a.childNodes.length===1&&a.childNodes[0].nodeType===3||a.children.length===1&&l(a.children[0],"className")==="fb-xfbml-parse-ignore")return i[b[0]]}function o(a){var b={};ES("Array","from",!1,a.attributes).forEach(function(a){b[l(a,"name")]=l(a,"value")});return b}function p(a,b,e){c("Assert").isTrue(a&&a.nodeType&&a.nodeType===1&&!!a.getElementsByTagName,"Invalid DOM node passed to FB.XFBML.parse()");c("Assert").isFunction(b,"Invalid callback passed to FB.XFBML.parse()");if(a==null)return;var f=++j;d("Log").info("XFBML Parsing Start %s",f);var g=1,h=0,i=function(){g--,g===0&&(d("Log").info("XFBML Parsing Finish %s, %s tags found",f,h),b!=null&&b(),k.inform("render",[f,h])),c("Assert").isTrue(g>=0,"onrender() has been called too many times")};ES("Array","from",!1,a.getElementsByTagName("*")).forEach(function(a){if(e!==!0&&a.getAttribute("fb-xfbml-state"))return;if(a.nodeType!==1)return;var b=m(a)||n(a);if(b==null)return;g++;h++;var d=new b.ctor(a,b.xmlns,b.localName,o(a));d.subscribe("render",c("runOnce")(function(){a.setAttribute("fb-xfbml-state","rendered"),i()}));b=function b(){a.getAttribute("fb-xfbml-state")=="parsed"?k.subscribe("render.queue",b):(a.setAttribute("fb-xfbml-state","parsed"),d.process())};b()});k.inform("parse",[f,h]);var l=3e4;window.setTimeout(function(){g>0&&d("Log").warn("%s tags failed to render in %s ms",g,l)},l);i()}k.subscribe("render",function(){var a=k.getSubscribers("render.queue");k.clearSubscribers("render.queue");a.forEach(function(a){a([])})});a={registerTag:function(a){var b=a.xmlns+":"+a.localName;if(b==="fb:customerchat"&&h[b]!=null)return;c("Assert").isUndefined(h[b],b+" already registered");h[b]=a;i[a.xmlns+"-"+a.localName]=a},parse:function(a,b){p((a=a)!=null?a:document.body,(a=b)!=null?a:function(){},!0)},parseNew:function(){p(document.body,function(){},!1)},subscribe:k.subscribe,unsubscribe:k.unsubscribe};b=a;g["default"]=b}),98); +__d("sdk.XFBML.Comments",["IframePlugin","QueryString","UrlMap","sdk.DOM","sdk.Event","sdk.PluginUtils","sdk.Runtime","sdk.UA","sdk.URI"],(function(a,b,c,d,e,f,g){var h=320,i=babelHelpers["extends"]({numposts:"string",href:"url",permalink:"bool",order_by:"string",mobile:"bool",version:"string",hide_post_profile:"bool",limit:"string",offset:"string",view:"string",fb_comment_id:"string",from_mod_tool:"bool",migrated:"string",xid:"string",title:"string",url:"string",quiet:"string",reverse:"string",simple:"string",css:"string",notify:"string",count:"bool",skin:"string",font:"string",width:"string",height:"px",ref:"string",lazy:"bool",color_scheme:"string"},d("sdk.PluginUtils").baseParams);function j(a,b){Object.keys(i).forEach(function(c){var e=d("sdk.DOM").getAttr(a,c);e!==null&&(b[c]=e)});Object.keys(b).forEach(function(a){ES(a,"startsWith",!0,"data-")&&delete b[a]});c("sdk.UA").mobile()&&b.mobile!==!1&&(b.mobile=!0);b.skin||(b.skin=b.colorscheme);if(!b.href){b.title=b.title||document.title;b.url=b.url||document.URL;if(!b.xid){var e=document.URL.indexOf("#");e>0?b.xid=encodeURIComponent(document.URL.substring(0,e)):b.xid=encodeURIComponent(document.URL)}b.migrated&&(b.href=d("UrlMap").resolve("www")+"/plugins/comments_v1.php?app_id="+c("sdk.Runtime").getClientID()+"&xid="+encodeURIComponent(b.xid)+"&url="+encodeURIComponent(b.url))}else{e=b.fb_comment_id;e||(e=c("QueryString").decode(document.URL.substring(document.URL.indexOf("?")+1)).fb_comment_id,e&&e.indexOf("#")>0&&(e=e.substring(0,e.indexOf("#"))));e&&(b.fb_comment_id=e)}b.version||(b.version=c("sdk.Runtime").getVersion());b.permalink||(b.width=b.mobile||b.width==="auto"||b.width==="100%"?"":b.width?Math.max(b.width,h):550,b.height=100);if(b.href!=null){e=new(c("sdk.URI"))(b.href);e.getProtocol()||(b.href=e.setProtocol("http").toString())}return b}a=c("IframePlugin").extend({constructor:function(a,b,c,e){e=j(a,e),this.parent(a,b,c,e),this.subscribe("xd.sdk_event",function(a){d("sdk.Event").fire(a.event,ES("JSON","parse",!1,a.data))})},getConfig:function(){return{fluid:!0,full_width:!0}},getParams:function(){return i}});b=a;g["default"]=b}),98); +__d("sdk.XFBML.CommentsCount",["sdk.DOM","sdk.XFBML.Comments","sprintf"],(function(a,b,c,d,e,f,g){a=c("sdk.XFBML.Comments").extend({constructor:function(a,b,e,f){d("sdk.DOM").addCss(a,"fb_comments_count_zero"),f.count=1,this.parent(a,b,"comments",f),this.subscribe("xd.comment_count",function(b){b=ES("JSON","parse",!1,b.data);d("sdk.DOM").html(a,c("sprintf")('%s',b.count));b.count>0&&d("sdk.DOM").removeCss(a,"fb_comments_count_zero");d("sdk.DOM").removeCss(a,"fb_iframe_widget")})}});b=a;g["default"]=b}),98); +__d("$InternalEnum",[],(function(a,b,c,d,e,f){"use strict";var g=Object.prototype.hasOwnProperty,h=typeof WeakMap==="function"?new WeakMap():new Map();function i(a){var b=h.get(a);if(b!==void 0)return b;var c=new Map();Object.getOwnPropertyNames(a).forEach(function(b){c.set(a[b],b)});try{h.set(a,c)}catch(a){}return c}var j=Object.freeze(Object.defineProperties(Object.create(null),{isValid:{value:function(a){return i(this).has(a)}},cast:{value:function(a){return this.isValid(a)?a:void 0}},members:{value:function(){return i(this).keys()}},getName:{value:function(a){return i(this).get(a)}}}));function a(a){var b=Object.create(j);for(var c in a)g.call(a,c)&&Object.defineProperty(b,c,{value:a[c]});return Object.freeze(b)}var k=Object.freeze(Object.defineProperties(Object.create(null),{isValid:{value:function(a){return typeof a==="string"?g.call(this,a):!1}},cast:{value:j.cast},members:{value:function(){return Object.getOwnPropertyNames(this).values()}},getName:{value:function(a){return a}}}));a.Mirrored=function(a){var b=Object.create(k);for(var c=0,d=a.length;c0){var e=o(d);a.setTimeout(function(){return x(e)},c.timeout)}return o(d)}function q(a){a=p(a);h[a]=null}function r(){l||(l=!0,c("requestAnimationFramePolyfill")(function(a){l=!1,t(c("performanceNow")()-a)}))}function s(a){var b=m-n;if(ab||ak){a=s(a);if(a>0){b=b+a;w(b);k=b}}u()&&r()}function u(){return ia.$1){a.$3();return}var h=Date.now();if(h-b>a.$2){a.$3();return}h=g.timeRemaining();e+=h>=49&&f>=49?h:0;f=h;c(d)};return c(g)};b.isBrowserCompatible=function(){return typeof window==="undefined"?!1:typeof window.requestIdleCallback==="function"};return a}();g["default"]=a}),98); +__d("uuid",[],(function(a,b,c,d,e,f){"use strict";function a(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=Math.random()*16|0;a=a=="x"?b:b&3|8;return a.toString(16)})}f["default"]=a}),66); +__d("sdk.XFBML.ChatDOM",["$InternalEnum","CORSRequest","ChatPluginEntryPointIconEnum","ChatPluginEntryPointLabelEnum","ChatPluginEntryPointSizeEnum","ChatPluginSDKPreLoggingUtils","ChatPluginStyleUtils","DOMPlugin","Log","UrlMap","getJSEnumSafe","performanceAbsoluteNow","sdk.Content","sdk.DOM","sdk.IdleCallback","sdk.XFBML.CustomerChatNew","sdk.fbt","sdk.feature","uuid"],(function(a,b,c,d,e,f,g){"use strict";var h=b("$InternalEnum").Mirrored(["WAITING","LOADING","LOADED"]);a=function(a){babelHelpers.inheritsLoose(b,a);function b(b,e,f,g){var i;i=a.call(this,b,e,f,g,{allow_guests:"bool",attribution:"string",greeting_dialog_display:"string",greeting_dialog_delay:"string",logged_in_greeting:"string",logged_out_greeting:"string",minimized:"bool",page_id:"string",theme_color:"string",override:"string",attribution_version:"string",is_loaded_by_facade:"bool"})||this;e=c("performanceAbsoluteNow")();f=c("uuid")();var j=window.location.href;ES("Object","assign",!1,i.params,{current_url:j,log_id:f,request_time:e,is_loaded_by_facade:!0,should_use_new_domain:g.should_use_new_domain});d("ChatPluginSDKPreLoggingUtils").preLogging(Boolean(g.should_use_new_domain),"chat_plugin_sdk_facade_create",i.params,!1);d("sdk.DOM").remove(b);d("sdk.Content").append(b);i.$ChatDOMFacade3=document.createElement("div");i.$ChatDOMFacade1=h.WAITING;i.$ChatDOMFacade2=!1;i.$ChatDOMFacade6=!1;i.$ChatDOMFacade8="standard";i.$ChatDOMFacade9="none";i.$ChatDOMFacade10="none";i.$ChatDOMFacade11="left";i.$ChatDOMFacade12=0;i.$ChatDOMFacade13=0;i.$ChatDOMFacade14=!1;i.$ChatDOMFacade15=Boolean(g.should_use_new_domain);i.shadowCss=["css:fb.shadow.css.chatdom"];i.$ChatDOMFacade4=c("performanceAbsoluteNow")();d("Log").info("facadeperf: Started browser idle loader.");i.$ChatDOMFacade5=new(c("sdk.IdleCallback"))(c("sdk.feature")("chat_plugin_facade_timeout_ms",8e3),function(){var a=c("performanceAbsoluteNow")();d("Log").info("facadeperf: Idle callback starts full load in %sms.",a-i.$ChatDOMFacade4);i.$ChatDOMFacade16(!1,!1)}).start();return i}var e=b.prototype;e.render=function(a){var b=this;this.$ChatDOMFacade3.classList.add("container");a=this.$ChatDOMFacade15?d("UrlMap").resolve("social_plugin")+"/customer_chat/facade/":d("UrlMap").resolve("www")+"/plugins/customer_chat/facade/";c("CORSRequest").execute(a,"get",this.params,function(a){var e,f=c("performanceAbsoluteNow")();d("Log").info("facadeperf: CORS request completed in %sms.",f-b.$ChatDOMFacade4);if(a.error)return;b.$ChatDOMFacade11=a.alignment;b.$ChatDOMFacade12=a.bottom_spacing;b.$ChatDOMFacade13=a.side_spacing;f=a.theme_color;b.$ChatDOMFacade8=(e=c("getJSEnumSafe")(c("ChatPluginEntryPointSizeEnum"),(e=a.entry_point_size)==null?void 0:e.toUpperCase()))!=null?e:"standard";b.$ChatDOMFacade9=(e=c("ChatPluginEntryPointLabelEnum").cast(a.entry_point_label))!=null?e:"none";b.$ChatDOMFacade10=(e=c("ChatPluginEntryPointIconEnum").cast(a.entry_point_icon_enum))!=null?e:"none";b.$ChatDOMFacade14=a.away_hours_enabled&&!a.is_page_away;if(b.$ChatDOMFacade9==="none"){e=document.createElement("div");d("sdk.DOM").html(e,a.entry_point_icon_svg);e=e==null?void 0:e.outerHTML;d("sdk.DOM").html(b.$ChatDOMFacade3,e)}else{e=a.entry_point_icon_svg;d("sdk.DOM").html(b.$ChatDOMFacade3,b.$ChatDOMFacade17(e))}e=d("ChatPluginStyleUtils").getEntryPointStyle(a.alignment,a.bottom_spacing,a.side_spacing,!1,!0,a.entry_point_label,b.$ChatDOMFacade8);ES("Object","assign",!1,b.$ChatDOMFacade3.style,e);b.$ChatDOMFacade3.style.backgroundColor=f;if(b.$ChatDOMFacade14){e=d("ChatPluginStyleUtils").getAvailabilityStatusStyleText(a.alignment,a.bottom_spacing,a.side_spacing,a.entry_point_label,a.entry_point_icon_enum,b.$ChatDOMFacade8,!1,!0);f=document.createElement("div");ES("Object","assign",!1,f.style,e);b.$ChatDOMFacade3.append(f)}d("ChatPluginSDKPreLoggingUtils").preLogging(b.$ChatDOMFacade15,"chat_plugin_sdk_facade_load",b.params)});this.$ChatDOMFacade3.addEventListener("click",function(a){b.$ChatDOMFacade16(!0,!0)});return this.$ChatDOMFacade3};e.$ChatDOMFacade18=function(a){switch(a){case"chat":return c("sdk.fbt")._("Chat");case"help":return c("sdk.fbt")._("Help");case"ask_us":return c("sdk.fbt")._("Ask us");case"none":return""}};e.$ChatDOMFacade19=function(){var a;(a=this.element.parentNode)==null?void 0:a.removeChild(this.element)};e.$ChatDOMFacade20=function(){if(this.$ChatDOMFacade2||this.$ChatDOMFacade1===h.LOADED)return;if(this.$ChatDOMFacade9==="none"){var a=this.$ChatDOMFacade8==="compact"?24:36;a=this.$ChatDOMFacade21(a);d("sdk.DOM").html(this.$ChatDOMFacade3,'\n
              \n '+a+"\n
              \n ")}else{a=this.$ChatDOMFacade8==="compact"?20:24;a=this.$ChatDOMFacade21(a);if(this.$ChatDOMFacade10==="none"){var b=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_ICON_MARGIN_RIGHT:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_ICON_MARGIN_RIGHT;d("sdk.DOM").html(this.$ChatDOMFacade3.children[0],this.$ChatDOMFacade22(b,a)+this.$ChatDOMFacade3.children[0].innerHTML);if(this.$ChatDOMFacade14){b=d("ChatPluginStyleUtils").getAvailabilityStatusStyleText(this.$ChatDOMFacade11,this.$ChatDOMFacade12,this.$ChatDOMFacade13,this.$ChatDOMFacade9,"chat_round_icon",this.$ChatDOMFacade8,!1,!1);var c=document.createElement("div");ES("Object","assign",!1,c.style,b);d("sdk.DOM").remove(this.$ChatDOMFacade3.children[1]);this.$ChatDOMFacade3.append(c)}}else d("sdk.DOM").html(this.$ChatDOMFacade3.children[0].children[0],a)}this.$ChatDOMFacade2=!0};e.$ChatDOMFacade17=function(a){var b=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_HEIGHT:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_HEIGHT,c=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_FONT_SIZE:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_FONT_SIZE,e=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_LINE_HEIGHT:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_LINE_HEIGHT,f=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_ICON_MARGIN_RIGHT:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_ICON_MARGIN_RIGHT,g=this.$ChatDOMFacade8==="compact"?d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_COMPACT_PADDING_HORIZONTAL:d("ChatPluginStyleUtils").LABELED_ENTRY_POINT_STANDARD_PADDING_HORIZONTAL;return'\n
              \n '+(a&&'\n
              \n '+a+"\n
              \n ")+'\n '+this.$ChatDOMFacade18(this.$ChatDOMFacade9).toString()+"
              \n
              \n "};e.$ChatDOMFacade22=function(a,b){return'\n
              \n '+b+"\n
              \n "};e.$ChatDOMFacade21=function(a){return'\n \n \n \n '};e.$ChatDOMFacade23=function(a){if(a&&this.$ChatDOMFacade7&&!this.$ChatDOMFacade6){this.$ChatDOMFacade6=!0;var b=this.$ChatDOMFacade7;b.subscribe("iframes_loaded",function(a){b.showDialog()})}};e.$ChatDOMFacade16=function(a,b){var e=this;b&&this.$ChatDOMFacade20();this.$ChatDOMFacade23(a);if(this.$ChatDOMFacade1!==h.WAITING)return;this.$ChatDOMFacade1=h.LOADING;b=document.createElement("div");d("sdk.Content").append(b,this.element);b=new(c("sdk.XFBML.CustomerChatNew"))(b,"fb","customerchat",this.params);this.$ChatDOMFacade7=b;b.subscribe("xd.mpn.setupIconIframe",function(a){e.$ChatDOMFacade1=h.LOADED,e.$ChatDOMFacade19()});this.$ChatDOMFacade23(a);b.process()};return b}(d("DOMPlugin").DOMPlugin);g["default"]=a}),98); +__d("IframePluginClass",["Log","QueryString","UrlMap","guid","sdk.Auth.LoginStatus","sdk.AuthUtils","sdk.DOM","sdk.Event","sdk.Observable","sdk.PlatformVersioning","sdk.PluginUtils","sdk.Runtime","sdk.UA","sdk.URI","sdk.XD","sdk.createIframe"],(function(a,b,c,d,e,f,g){a=function(a){babelHelpers.inheritsLoose(b,a);function b(b,e,f,g,h){var i;h===void 0&&(h=null);i=a.call(this)||this;f=f.replace(/-/g,"_");i.$IframePluginClass2=!1;i.config=h!=null?h:{fluid:!1,mobile_fullsize:!1,full_width:!1};var j=d("sdk.PluginUtils").getVal(g,"plugin_id");i.subscribe("xd.resize",d("sdk.PluginUtils").resizeBubbler(j));i.subscribe("xd.resize.flow",d("sdk.PluginUtils").resizeBubbler(j));i.subscribe("xd.resize.flow",function(a){ES("Object","assign",!1,i.iframeOptions.root.style,{verticalAlign:"bottom",overflow:""}),d("sdk.PluginUtils").resize(i.iframeOptions.root,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),i.updateLift(),window.clearTimeout(i.$IframePluginClass1)});i.subscribe("xd.resize",function(a){ES("Object","assign",!1,i.iframeOptions.root.style,{verticalAlign:"bottom",overflow:""}),d("sdk.PluginUtils").resize(i.iframeOptions.root,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),d("sdk.PluginUtils").resize(i.iframe,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),i.$IframePluginClass2=!0,i.updateLift(),window.clearTimeout(i.$IframePluginClass1)});i.subscribe("xd.resize.iframe",function(a){d("sdk.PluginUtils").resize(i.iframe,d("sdk.PluginUtils").parse(a.width),d("sdk.PluginUtils").parse(a.height)),i.$IframePluginClass2=!0,i.updateLift(),window.clearTimeout(i.$IframePluginClass1)});i.subscribe("xd.sdk_event",function(a){var c=ES("JSON","parse",!1,a.data);c.pluginID=j;d("sdk.Event").fire(a.event,c,b)});h=g.should_use_new_domain?d("UrlMap").resolve("social_plugin")+"/"+f+".php?":d("UrlMap").resolve("www")+"/plugins/"+f+".php?";var k={};d("sdk.PluginUtils").validate(i.getParams(),b,g,k);d("sdk.PluginUtils").validate(d("sdk.PluginUtils").baseParams,b,g,k);ES("Object","assign",!1,k,{app_id:c("sdk.Runtime").getClientID(),locale:c("sdk.Runtime").getLocale(),sdk:"joey",kid_directed_site:c("sdk.Runtime").getKidDirectedSite(),channel:d("sdk.XD").handler(function(a){a!=null&&i.inform("xd."+a.type,a)},"parent.parent",!0)});i.shouldIgnoreWidth()&&(k.width=void 0);k.container_width=b.offsetWidth;d("sdk.DOM").addCss(b,"fb_iframe_widget");var l=c("guid")();i.subscribe("xd.verify",function(a){d("sdk.XD").sendToFacebook(l,{method:"xd/verify",params:ES("JSON","stringify",!1,a.token)})});i.subscribe("xd.refreshLoginStatus",function(){d("sdk.AuthUtils").removeLogoutState(),c("sdk.Auth.LoginStatus").getLoginStatus(ES(i.inform,"bind",!0,babelHelpers.assertThisInitialized(i),"login.status"),!0)});g=document.createElement("span");ES("Object","assign",!1,g.style,{verticalAlign:"top",width:k.lazy?"1px":"0px",height:k.lazy?"1px":"0px",overflow:"hidden"});i.element=b;i.ns=e;i.tag=f;i.params=k;i.iframeOptions={root:g,url:h+c("QueryString").encode(k),name:l,width:i.config.mobile_fullsize&&c("sdk.UA").mobile()?void 0:k.width||1e3,height:k.height||1e3,style:{border:"none",visibility:"hidden"},title:i.ns+":"+i.tag+" Facebook Social Plugin",testid:i.ns+":"+i.tag+" Facebook Social Plugin",onload:function(){return i.inform("render")},onerror:function(){return d("sdk.PluginUtils").collapseIframe(i.iframe)},lazy:k.lazy};i.config.fluid&&k.width!=="auto"&&(d("sdk.DOM").addCss(i.element,"fbiframe_widget_fluid_desktop"),!k.width&&i.config.full_width&&(i.element.style.width="100%",i.iframeOptions.root.style.width="100%",i.iframeOptions.style.width="100%",i.params.container_width=i.element.offsetWidth,i.iframeOptions.url=h+c("QueryString").encode(i.params)));return i}var e=b.prototype;e.shouldIgnoreWidth=function(){return c("sdk.UA").mobile()&&this.config.mobile_fullsize};e.useInlineHeightForMobile=function(){return!0};e.process=function(){var a=this;if(c("sdk.Runtime").getIsVersioned()){d("sdk.PlatformVersioning").assertVersionIsSet();var b=new(c("sdk.URI"))(this.iframeOptions.url);this.iframeOptions.url=b.setPath("/"+c("sdk.Runtime").getVersion()+b.getPath()).toString()}b=babelHelpers["extends"]({},this.params);delete b.channel;var e=c("QueryString").encode(b);if(this.element.getAttribute("fb-iframe-plugin-query")==e){d("Log").info("Skipping render: %s:%s %s",this.ns,this.tag,e);this.inform("render");return}this.element.setAttribute("fb-iframe-plugin-query",e);this.subscribe("render",function(){d("sdk.Event").fire("iframeplugin:onload"),a.iframe.style.visibility="visible",a.$IframePluginClass2||d("sdk.PluginUtils").collapseIframe(a.iframe)});while(this.element.firstChild)this.element.removeChild(this.element.firstChild);this.element.appendChild(this.iframeOptions.root);var f=c("sdk.UA").mobile()?120:45;this.$IframePluginClass1=window.setTimeout(function(){d("sdk.PluginUtils").collapseIframe(a.iframe),d("Log").warn("%s:%s failed to resize in %ss",a.ns,a.tag,f)},f*1e3);this.iframe=c("sdk.createIframe")(this.iframeOptions);d("sdk.Event").fire("iframeplugin:create");if(c("sdk.UA").mobile()||b.width==="auto"){this.useInlineHeightForMobile()&&d("sdk.DOM").addCss(this.element,"fbiframe_widget_fluid");if(!this.iframeOptions.width){ES("Object","assign",!1,this.element.style,{display:"block",width:"100%",height:"auto"});ES("Object","assign",!1,this.iframeOptions.root.style,{width:"100%",height:"auto"});e={height:"auto",position:"static",width:"100%"};(c("sdk.UA").iphone()||c("sdk.UA").ipad())&&ES("Object","assign",!1,e,{width:"220px",minWidth:"100%"});ES("Object","assign",!1,this.iframe.style,e)}}};e.getParams=function(){return this.params};e.updateLift=function(){var a=this.iframe.style.width===this.iframeOptions.root.style.width&&this.iframe.style.height===this.iframeOptions.root.style.height;(a?d("sdk.DOM").removeCss:d("sdk.DOM").addCss)(this.iframe,"fbiframe_widget_lift")};return b}(d("sdk.Observable").Observable);g["default"]=a}),98); +__d("MPNExplicitUserInteractions",[],(function(a,b,c,d,e,f){"use strict";var g=36e5;function a(a){return a==null?!1:Date.now()<=a+g}f.hasUserInteraction=a}),66); +__d("MPNLocalState",[],(function(a,b,c,d,e,f){"use strict";a={LANDING_BANNER:1,WELCOME_PAGE:2,ITP_CONTINUE:3,THREAD_VIEW:4,BUBBLE:5,REENGAGEMENT_COLLAPSED_VIEW:6,REENGAGEMENT_EXPANDED_VIEW:7};b={CHAT_NOT_STARTED:1,LOGGED_IN_CHAT_STARTED:2,GUEST_CHAT_STARTED:3};c="__fb_chat_plugin";f.MPNLocalStatePath=a;f.MPNChatState=b;f.LOCAL_STATE_KEY=c}),66); +__d("getFacebookOriginForTarget",["Log"],(function(a,b,c,d,e,f,g){function a(a,b){b===void 0&&(b=top);var c=0,e=!1,f=200;window.addEventListener("message",function(c){c.source===b&&c.data.xdArbiterAck&&(/\.facebook\.(com|net)$/.test(c.origin)&&/^https:/.test(c.origin)?e===!1&&(e=!0,d("Log").debug("initXdArbiter got xdArbiterAck from "+c.origin),a(c.origin)):d("Log").error("xdAbiterAck was not from Facebook: ",c.origin))},!1);b.postMessage({xdArbiterSyn:!0},"*");c=window.setInterval(function(){!e&&f>0?(f--,d("Log").debug("resending xdArbiterSyn"),b.postMessage({xdArbiterSyn:!0},"*")):window.clearInterval(c)},200)}g["default"]=a}),98); +__d("MPNSingletonProvider",[],(function(a,b,c,d,e,f){"use strict";a=function(){function a(a){this.$1=null,this.$2=a}var b=a.prototype;b.get=function(){this.$1==null&&(this.$1=this.$2());return this.$1};b.clear=function(){this.$1=null};return a}();f["default"]=a}),66); +__d("sdk.DocumentTitle",[],(function(a,b,c,d,e,f){var g=document.title,h=null,i=1500,j=null,k=!1;function l(){h!==null?!k?m(h):n():(clearInterval(j),j=null,n())}function m(a){document.title=a,k=!0}function n(){o(g),k=!1}function a(){return g}function o(a){document.title=a}function b(a){h=a;j===null&&(j=setInterval(l,i));return{stop:function(){h=null}}}f.get=a;f.set=o;f.blink=b}),66); +__d("sdk.cp.Constants",["MPNLocalState","UrlMap","sdk.Runtime"],(function(a,b,c,d,e,f,g){"use strict";a=c("sdk.Runtime").getIsVersioned()?d("UrlMap").resolve("www")+"/"+c("sdk.Runtime").getVersion()+"/plugins/customer_chat/bubble":d("UrlMap").resolve("www")+"/plugins/customer_chat/bubble";b=c("sdk.Runtime").getIsVersioned()?d("UrlMap").resolve("social_plugin")+"/"+c("sdk.Runtime").getVersion()+"/customer_chat/bubble":d("UrlMap").resolve("social_plugin")+"/customer_chat/bubble";e={attribute:{alignment:"alignment",mobilePath:"mobile_path",desktopBottomSpacing:"desktop_bottom_spacing"},path:{landingPage:"/",welcomePage:"/welcome",bubble:"/bubble",itp:"/itpcontinue"},localStateKey:d("MPNLocalState").LOCAL_STATE_KEY,animationEvents:["animationend","mozAnimationEnd","MSAnimationEnd","oAnimationEnd","webkitAnimationEnd"],blankFrameURL:a,blankFrameNewDomainURL:b};g["default"]=e}),98); +__d("sdk.cp.Actions",["DOMEventListener","MPNExplicitUserInteractions","MPNLocalState","MPNSingletonProvider","sdk.DOM","sdk.DocumentTitle","sdk.URI","sdk.WebStorage","sdk.cp.Constants"],(function(a,b,c,d,e,f,g){"use strict";var h=function(){function a(){}var b=a.prototype;b.reloadIframe=function(a,b){var e;if(a==null)return;var f=new(c("sdk.URI"))(a.src),g=f.getQueryData();g.local_state=(e=d("sdk.WebStorage").getLocalStorage())==null?void 0:e.getItem(c("sdk.cp.Constants").localStateKey);g.request_time=Date.now();(b==="true"||this.getExplicitUserInteractionFlag())&&(g.has_explicit_interaction="1");g.is_implicit_reload="1";f.setQueryData(g);a.src=f.valueOf()};b.getExplicitUserInteractionFlag=function(){var a=d("sdk.WebStorage").getLocalStorage(),b=null;if(a!=null)try{b=a.getItem(d("MPNLocalState").LOCAL_STATE_KEY)}catch(a){return!1}if(b!=null)try{a=ES("JSON","parse",!1,b);return d("MPNExplicitUserInteractions").hasUserInteraction(a==null?void 0:a.euit)}catch(a){return!1}return!1};b.setDialogAppearance=function(a,b){if(a==null)return;var c=b.height,e=b.boxShadow,f=b.margin,g=b.width;b=b.bottom;e!=null&&d("sdk.DOM").setStyle(a,"boxShadow",e);f!=null&&d("sdk.DOM").setStyle(a,"margin",f);c!=null&&d("sdk.DOM").setStyle(a,"height",c);g!=null&&d("sdk.DOM").setStyle(a,"width",g);b!=null&&d("sdk.DOM").setStyle(a,"bottom",b)};b.blinkPageTitle=function(a){var b=this;a!=null?(this.$2(),this.$1=d("sdk.DocumentTitle").blink(a),c("DOMEventListener").add(window,"focus",function(a){b.$2()})):this.$1&&a==null&&this.$2()};b.$2=function(){this.$1!=null&&(this.$1.stop(),this.$1=null)};return a}();a=new(c("MPNSingletonProvider"))(function(){return new h()});b=a.get();g["default"]=b}),98); +__d("sdk.cp.Animation",["sdk.DOM","sdk.UA","sdk.cp.Constants"],(function(a,b,c,d,e,f,g){"use strict";function a(a){if(!a)return;var b=d("sdk.DOM").getAttr(a,c("sdk.cp.Constants").attribute.alignment);a=d("sdk.DOM").getAttr(a,c("sdk.cp.Constants").attribute.mobilePath);var e=c("sdk.UA").mobile(),f;if(e)switch(a){case c("sdk.cp.Constants").path.landingPage:return"fb_mpn_mobile_landing_page_slide_up";case c("sdk.cp.Constants").path.welcomePage:case c("sdk.cp.Constants").path.bubble:case c("sdk.cp.Constants").path.itp:return null;default:return"fb_mpn_mobile_bounce_in"}else switch(b){case"left":f="fb_customer_chat_bounce_in_from_left";break;case"right":default:f="fb_customer_chat_bounce_in_v2"}return f}function b(a){if(!a)return;var b=d("sdk.DOM").getAttr(a,c("sdk.cp.Constants").attribute.alignment);a=d("sdk.DOM").getAttr(a,c("sdk.cp.Constants").attribute.mobilePath);var e=c("sdk.UA").mobile(),f;if(e)switch(a){case c("sdk.cp.Constants").path.landingPage:return b==="left"?"fb_mpn_mobile_landing_page_slide_out_from_left":"fb_mpn_mobile_landing_page_slide_out";case c("sdk.cp.Constants").path.bubble:return"fb_mpn_mobile_bounce_out_v2";default:return"fb_mpn_mobile_bounce_out"}else switch(b){case"left":f="fb_customer_chat_bounce_out_from_left";break;case"right":default:f="fb_customer_chat_bounce_out_v2"}return f}g.iframeBounceInAnimation=a;g.iframeBounceOutAnimation=b}),98); +__d("sdk.cp.Storage",["MPNSingletonProvider","sdk.WebStorage","sdk.cp.Constants"],(function(a,b,c,d,e,f,g){"use strict";var h=function(){function a(){}var b=a.prototype;b.setState=function(a){var b=d("sdk.WebStorage").getLocalStorageForRead();if(!b)return;try{if(a==null)b.removeItem(c("sdk.cp.Constants").localStateKey);else{var e=b.getItem(c("sdk.cp.Constants").localStateKey);if(e==null)b.setItem(c("sdk.cp.Constants").localStateKey,ES("JSON","stringify",!1,ES("JSON","parse",!1,a)));else{e=ES("JSON","parse",!1,e);a=ES("JSON","parse",!1,a);b.setItem(c("sdk.cp.Constants").localStateKey,ES("JSON","stringify",!1,babelHelpers["extends"]({},e,a)))}}}catch(a){return}};b.getStateJSON=function(){var a=d("sdk.WebStorage").getLocalStorageForRead();if(!a)return"{}";a=a.getItem(c("sdk.cp.Constants").localStateKey);return a==null?"{}":ES("JSON","stringify",!1,ES("JSON","parse",!1,a))};return a}();a=new(c("MPNSingletonProvider"))(function(){return new h()});b=a.get();g["default"]=b}),98); +__d("sdk.XFBML.CustomerChatNew",["ChatPluginSDKPreLoggingUtils","DOMEventListener","IframePluginClass","Log","MPNExplicitUserInteractions","MPNLocalState","QueryString","UrlMap","getFacebookOriginForTarget","performanceAbsoluteNow","sdk.Content","sdk.DOM","sdk.DialogUtils","sdk.Event","sdk.UA","sdk.WebStorage","sdk.XD","sdk.XFBML.CustomerChatWrapper","sdk.cp.Actions","sdk.cp.Animation","sdk.cp.Constants","sdk.cp.Storage","sdk.createIframe"],(function(a,b,c,d,e,f,g){"use strict";a=function(a){babelHelpers.inheritsLoose(b,a);function b(b,c,e,f){var g;g=a.call(this,b,c,e,f)||this;g.$CustomerChat1=null;g.$CustomerChat2=null;g.$CustomerChat3=null;g.$CustomerChat4=null;g.$CustomerChat5=null;g.$CustomerChat6=null;g.$CustomerChat7=null;g.$CustomerChat8=null;g.$CustomerChat9=null;g.$CustomerChat10=null;g.$CustomerChat11=null;g.$CustomerChat12=!1;g.$CustomerChat13=null;g.$CustomerChat14=!1;g.$CustomerChat15=!1;g.show=function(a){a===void 0&&(a=!0),g.$CustomerChat15=!1,g.$CustomerChat1!=null&&d("sdk.DOM").setStyle(g.$CustomerChat1,"display","inline"),a&&g.$CustomerChat30(g.$CustomerChat4),d("sdk.Event").fire("customerchat.show"),g.$CustomerChat34("show")};g.hide=function(){g.$CustomerChat15=!0,g.$CustomerChat1!=null&&d("sdk.DOM").setStyle(g.$CustomerChat1,"display","none"),g.$CustomerChat29(g.$CustomerChat4),d("sdk.Event").fire("customerchat.hide"),g.$CustomerChat34("hide")};g.showDialog=function(){g.$CustomerChat1!=null&&d("sdk.DOM").setStyle(g.$CustomerChat1,"display","inline"),g.$CustomerChat30(g.$CustomerChat4),g.$CustomerChat34("showDialog")};g.hideDialog=function(){g.$CustomerChat29(g.$CustomerChat4),g.$CustomerChat34("hideDialog")};g.update=function(a){var b;d("sdk.XD").sendToFacebook((b=g.$CustomerChat5)!=null?b:"",{method:"updateCustomerChat",params:ES("JSON","stringify",!1,a||{})});g.$CustomerChat34("update")};d("sdk.DOM").addCss(b,"fb_invisible_flow");d("sdk.DOM").remove(b);d("sdk.Content").append(b);g.$CustomerChat16=Boolean(f.should_use_new_domain);g.$CustomerChat17();d("sdk.Event").fire("customerchat.load");g.$CustomerChat18();d("ChatPluginSDKPreLoggingUtils").preLogging(g.$CustomerChat16,"chat_plugin_sdk_dialog_iframe_create",g.params,!1);return g}var e=b.prototype;e.$CustomerChat17=function(){var a=d("sdk.WebStorage").getLocalStorage(),b=null;if(a!=null)try{b=a.getItem(d("MPNLocalState").LOCAL_STATE_KEY)}catch(a){d("Log").warn("Failed to access localStorage")}b!=null&&ES("Object","assign",!1,this.params,{local_state:b});if(b!=null)try{a=ES("JSON","parse",!1,b);d("MPNExplicitUserInteractions").hasUserInteraction(a==null?void 0:a.euit)&&ES("Object","assign",!1,this.params,{has_explicit_interaction:1})}catch(a){d("Log").warn("Invalid local state")}b=c("performanceAbsoluteNow")();ES("Object","assign",!1,this.params,{request_time:b});a=this.$CustomerChat16?d("UrlMap").resolve("social_plugin")+"/"+this.tag+".php?":d("UrlMap").resolve("www")+"/plugins/"+this.tag+".php?";this.iframeOptions.url=a+c("QueryString").encode(this.params);this.iframeOptions.title=""};e.$CustomerChat18=function(){var a=this;this.subscribe("render",function(){d("ChatPluginSDKPreLoggingUtils").preLogging(a.$CustomerChat16,"chat_plugin_sdk_dialog_iframe_load",a.params)});this.subscribe("xd.mpn.storeState",function(a){c("sdk.cp.Storage").setState(a.state)});this.subscribe("xd.mpn.getState",function(b){b=c("sdk.cp.Storage").getStateJSON();b={name:"mpnDidFetchState",params:b};a.$CustomerChat19(b);a.$CustomerChat20(b)});this.subscribe("xd.mpn.setupIconIframe",function(b){a.$CustomerChat21(b)});this.subscribe("xd.mpn.setupDialogIframe",function(b){a.$CustomerChat22(b)});this.subscribe("xd.mpn.toggleDialogVisibility",function(b){a.$CustomerChat23(b)});this.subscribe("xd.mpn.toggleGreetingDialogVisibility",function(b){a.$CustomerChat24(b)});this.subscribe("xd.mpn.updateGreetingAppearance",function(b){c("sdk.cp.Actions").setDialogAppearance(a.$CustomerChat10,b)});this.subscribe("xd.mpn.updateDialogAppearance",function(b){c("sdk.cp.Actions").setDialogAppearance(a.iframe,b)});this.subscribe("xd.mpn.updateIconAppearance",function(b){c("sdk.cp.Actions").setDialogAppearance(a.$CustomerChat3,b)});this.subscribe("xd.mpn.reload",function(b){c("sdk.cp.Actions").reloadIframe(a.iframe,b.hasExplicitInteraction)});this.subscribe("xd.mpn.updatePageTitle",function(a){c("sdk.cp.Actions").blinkPageTitle(a.title)});this.subscribe("xd.mpn.navigateToWelcomePage",function(b){a.$CustomerChat25(b.isHidden)});d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEvent.subscribe(d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEventType.SHOW,this.show);d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEvent.subscribe(d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEventType.HIDE,this.hide);d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEvent.subscribe(d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEventType.SHOW_DIALOG,this.showDialog);d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEvent.subscribe(d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEventType.HIDE_DIALOG,this.hideDialog);d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEvent.subscribe(d("sdk.XFBML.CustomerChatWrapper").CustomerChatInternalEventType.UPDATE,this.update)};e.$CustomerChat21=function(a){var b=this;this.$CustomerChat1&&d("sdk.DOM").remove(this.$CustomerChat1);var e=a.frameName,f=a.iconSVG,g=d("sdk.DialogUtils").setupNewDialog(),h=ES("JSON","parse",!1,a.cssText),i=document.createElement("div");f!=null&&(d("sdk.DOM").html(i,f),ES("Object","assign",!1,i.style,h),i.style.boxShadow="none",d("sdk.Content").append(i,g.contentRoot));var j="blank_"+e;this.$CustomerChat1=g.dialogElement;this.$CustomerChat3=c("sdk.createIframe")({url:this.$CustomerChat16?c("sdk.cp.Constants").blankFrameNewDomainURL:c("sdk.cp.Constants").blankFrameURL,name:j,root:g.contentRoot,tabindex:-1,width:60,style:h,"data-testid":"bubble_iframe",onload:function(){d("ChatPluginSDKPreLoggingUtils").preLogging(b.$CustomerChat16,"chat_plugin_sdk_icon_iframe_load",b.params),b.$CustomerChat2=j,b.$CustomerChat26(),b.$CustomerChat27(),window.setTimeout(function(){d("sdk.DOM").remove(i)},100)}});this.$CustomerChat1&&this.$CustomerChat1.setAttribute(c("sdk.cp.Constants").attribute.alignment,a.alignment);this.$CustomerChat1&&d("sdk.Content").append(this.$CustomerChat1);var k="availabilityStatus_"+e;this.$CustomerChat8=c("sdk.createIframe")({url:this.$CustomerChat16?c("sdk.cp.Constants").blankFrameNewDomainURL:c("sdk.cp.Constants").blankFrameURL,name:k,root:g.contentRoot,tabindex:-1,style:ES("JSON","parse",!1,a.availabilityStatusCssText),"data-testid":"availabilityStatus_iframe",onload:function(){b.$CustomerChat9=k,b.$CustomerChat26(),b.$CustomerChat27()}});d("sdk.Content").append(this.$CustomerChat8,g.contentRoot);var l="unread_"+e;this.$CustomerChat6=c("sdk.createIframe")({url:this.$CustomerChat16?c("sdk.cp.Constants").blankFrameNewDomainURL:c("sdk.cp.Constants").blankFrameURL,name:l,root:g.contentRoot,tabindex:-1,style:ES("JSON","parse",!1,a.unreadCountCssText),"data-testid":"unread_iframe",onload:function(){b.$CustomerChat7=l,b.$CustomerChat26(),b.$CustomerChat27()}});d("sdk.Content").append(this.$CustomerChat6,g.contentRoot);f=c("sdk.UA").mobile();if(!f){var m="greeting_"+e;this.$CustomerChat10=c("sdk.createIframe")({url:this.$CustomerChat16?c("sdk.cp.Constants").blankFrameNewDomainURL:c("sdk.cp.Constants").blankFrameURL,name:m,root:g.contentRoot,tabindex:-1,style:ES("JSON","parse",!1,a.greetingCssText),"data-testid":"greeting_iframe",onload:function(){b.$CustomerChat11=m,b.$CustomerChat26(),b.$CustomerChat27()}});d("sdk.Content").append(this.$CustomerChat10,g.contentRoot)}};e.$CustomerChat27=function(){this.$CustomerChat2!==null&&this.$CustomerChat7!==null&&this.$CustomerChat9!==null&&this.$CustomerChat5!==null&&this.$CustomerChat11!==null&&!this.$CustomerChat12&&(this.$CustomerChat12=!0,this.inform("iframes_loaded"))};e.$CustomerChat26=function(){var a;this.$CustomerChat19({name:"bubbleFrameLoaded",frameName:this.$CustomerChat2,unreadCountFrameName:this.$CustomerChat7,availabilityStatusIframeName:this.$CustomerChat9,greetingIframeName:this.$CustomerChat11,iconSrc:(a=this.$CustomerChat3)==null?void 0:a.src,unreadSrc:(a=this.$CustomerChat6)==null?void 0:a.src,request_time:this.params.request_time,log_id:this.params.log_id})};e.$CustomerChat25=function(a){this.$CustomerChat19({name:"navigateToWelcomePage",isHidden:a})};e.$CustomerChat22=function(a){var b=a.cssText,e=a.mobilePath,f=a.isDialogHidden;a=a.desktopBottomSpacing;this.$CustomerChat1&&(e&&this.$CustomerChat1.setAttribute(c("sdk.cp.Constants").attribute.mobilePath,e),a&&this.$CustomerChat1.setAttribute(c("sdk.cp.Constants").attribute.desktopBottomSpacing,a.toString()));this.$CustomerChat14=f==="true";this.iframe&&(this.iframe.setAttribute("data-testid","dialog_iframe"),this.iframe.style.cssText=b);this.$CustomerChat4=this.iframe;this.$CustomerChat5=this.iframe.name;this.$CustomerChat27();a=c("sdk.UA").mobile();if(a&&!this.$CustomerChat14){if(e==c("sdk.cp.Constants").path.landingPage){f=d("sdk.cp.Animation").iframeBounceInAnimation(this.$CustomerChat1);f!=null&&d("sdk.DOM").addCss(this.$CustomerChat4,f)}e!=c("sdk.cp.Constants").path.landingPage&&e!=c("sdk.cp.Constants").path.bubble&&this.$CustomerChat28()}this.$CustomerChat15&&this.hide()};e.$CustomerChat23=function(a){a=a.shouldHide;a==="true"?this.$CustomerChat29(this.iframe):this.$CustomerChat30(this.iframe)};e.$CustomerChat24=function(a){a=a.shouldHide;a==="true"?this.$CustomerChat31(this.$CustomerChat10):this.$CustomerChat32(this.$CustomerChat10)};e.getParams=function(){return{allow_guests:"bool",attribution:"string",greeting_dialog_display:"string",greeting_dialog_delay:"string",logged_in_greeting:"string",logged_out_greeting:"string",minimized:"bool",page_id:"string",theme_color:"string",override:"string",attribution_version:"string",is_loaded_by_facade:"bool",current_url:"string",log_id:"string",request_time:"px"}};e.$CustomerChat33=function(a,b){var d=this,e=window.frames[a],f=function(a){e==null?void 0:e.postMessage(babelHelpers["extends"]({},b),a)};this.$CustomerChat13===null?c("getFacebookOriginForTarget")(function(a){d.$CustomerChat13=a,f(d.$CustomerChat13)},e):f(this.$CustomerChat13)};e.$CustomerChat20=function(a){var b;this.$CustomerChat33((b=this.$CustomerChat2)!=null?b:"",a)};e.$CustomerChat19=function(a){var b;this.$CustomerChat33((b=this.$CustomerChat5)!=null?b:"",a)};e.$CustomerChat34=function(a){this.$CustomerChat19({name:"CustomerChat.SDK.Called",event:a})};e.$CustomerChat28=function(){var a="fb_new_ui_mobile_overlay_active";d("sdk.DOM").addCss(document.body,a)};e.$CustomerChat30=function(a){if(!a)return;if(this.$CustomerChat14){this.$CustomerChat14=!1;var b=d("sdk.cp.Animation").iframeBounceInAnimation(this.$CustomerChat1),e=d("sdk.cp.Animation").iframeBounceOutAnimation(this.$CustomerChat1);e!=null&&d("sdk.DOM").removeCss(a,e);b!=null&&d("sdk.DOM").addCss(a,b);if(c("sdk.UA").mobile())d("sdk.DOM").setStyle(a,"maxHeight","100%"),d("sdk.DOM").setStyle(a,"height","100%"),d("sdk.DOM").setStyle(a,"width","100%");else{e=this.$CustomerChat1&&d("sdk.DOM").getAttr(this.$CustomerChat1,c("sdk.cp.Constants").attribute.desktopBottomSpacing);b=e==null?"80":Number(e)+60;d("sdk.DOM").setStyle(a,"maxHeight","calc(100% - "+b+"px)");d("sdk.DOM").setStyle(a,"minHeight","300px")}this.$CustomerChat19({name:"CustomerChat.isDialogHidden",params:{is_dialog_hidden:!1}});this.$CustomerChat20({name:"CustomerChat.isDialogHidden",params:{is_dialog_hidden:!1}});d("sdk.Event").fire("customerchat.dialogShow")}};e.$CustomerChat29=function(a){var b=this;if(!a)return;if(!this.$CustomerChat14){this.$CustomerChat14=!0;var e=d("sdk.cp.Animation").iframeBounceInAnimation(this.$CustomerChat1),f=d("sdk.cp.Animation").iframeBounceOutAnimation(this.$CustomerChat1);e!=null&&d("sdk.DOM").removeCss(a,e);f!=null&&d("sdk.DOM").addCss(a,f);var g={};c("sdk.cp.Constants").animationEvents.forEach(function(e){var f=function(e){b.$CustomerChat14&&(d("sdk.DOM").setStyle(a,"maxHeight","0"),d("sdk.DOM").setStyle(a,"minHeight","0"),c("sdk.cp.Constants").animationEvents.forEach(function(b){g[b]&&(d("DOMEventListener").remove(a,b,g[b]),delete g[b])}))};g[e]=f;d("DOMEventListener").add(a,e,f)});this.$CustomerChat19({name:"CustomerChat.isDialogHidden",params:{is_dialog_hidden:!0}});this.$CustomerChat20({name:"CustomerChat.isDialogHidden",params:{is_dialog_hidden:!0}})}d("sdk.Event").fire("customerchat.dialogHide")};e.$CustomerChat31=function(a){if(!a)return;d("sdk.DOM").setStyle(a,"maxHeight","0");d("sdk.DOM").setStyle(a,"minHeight","0")};e.$CustomerChat32=function(a){if(!a)return;d("sdk.DOM").setStyle(a,"maxHeight","calc(100% - 80px)")};return b}(c("IframePluginClass"));g["default"]=a}),98); +__d("sdk.XFBML.CustomerChatWrapper",["$InternalEnum","CORSRequest","UrlMap","sdk.Observable","sdk.XFBML.ChatDOM"],(function(a,b,c,d,e,f,g){a=b("$InternalEnum")({SHOW:"SHOW",HIDE:"HIDE",SHOW_DIALOG:"SHOW_DIALOG",HIDE_DIALOG:"HIDE_DIALOG",UPDATE:"UDPATE"});e=new(d("sdk.Observable").Observable)();f=function(a,b,c,d){return new h(a,b,c,d)};var h=function(b){babelHelpers.inheritsLoose(a,b);function a(a,c,d,e){var f;f=b.call(this)||this;f.$CustomerChatWrapper2=a;f.$CustomerChatWrapper3=c;f.$CustomerChatWrapper4=d;f.$CustomerChatWrapper5=e;return f}var e=a.prototype;e.process=function(){var a=this,b=d("UrlMap").resolve("social_plugin")+"/new_domain_gating/";c("CORSRequest").execute(b,"get",{page_id:this.$CustomerChatWrapper5.page_id,endpoint:this.$CustomerChatWrapper4},function(b){a.$CustomerChatWrapper5.should_use_new_domain=b.should_use_new_domain,a.$CustomerChatWrapper1=new(c("sdk.XFBML.ChatDOM"))(a.$CustomerChatWrapper2,a.$CustomerChatWrapper3,a.$CustomerChatWrapper4,a.$CustomerChatWrapper5),a.$CustomerChatWrapper1.subscribe("render",function(){a.inform("render")}),a.$CustomerChatWrapper1.process()})};return a}(d("sdk.Observable").Observable);g.CustomerChatInternalEventType=a;g.CustomerChatInternalEvent=e;g.CustomerChatWrapperPlugin=f}),98); +__d("sdk.XFBML.LWIAdsCreation",["IframePlugin","sdk.createIframe"],(function(a,b,c,d,e,f,g){"use strict";a=c("IframePlugin").extend({constructor:function(a,b,c,d){this.parent(a,b,c,d),this._setUpSubscriptions()},getParams:function(){return{fbe_extras:"string",fbe_redirect_uri:"string",fbe_scopes:"string",fbe_state:"string",hide_manage_button:"bool",hide_explore_more_options:"bool",preferred_ad_options:"string"}},_setUpSubscriptions:function(){var a=this;this.subscribe("xd.lwiadscreation.load",function(b){a._createIframe(b)})},_createIframe:function(a){c("sdk.createIframe")({url:a.iframeURL,name:"LWIAdsCreationRootIframe",root:document.body,height:300,width:950})}});b=a;g["default"]=b}),98); +__d("sdk.XFBML.LWIAdsInsights",["IframePlugin","sdk.createIframe"],(function(a,b,c,d,e,f,g){"use strict";a=c("IframePlugin").extend({constructor:function(a,b,c,d){this.parent(a,b,c,d),this._setUpSubscriptions()},getParams:function(){return{fbe_extras:"string",fbe_redirect_uri:"string",fbe_scopes:"string",fbe_state:"string"}},_setUpSubscriptions:function(){var a=this;this.subscribe("xd.lwiadsinsights.load",function(b){a._createIframe(b)})},_createIframe:function(a){c("sdk.createIframe")({url:a.iframeURL,name:"LWIAdsInsightsRootIframe",root:document.body,height:800,width:1050})}});b=a;g["default"]=b}),98); +__d("safeEval",["sdk.Runtime","sdk.Scribe"],(function(a,b,c,d,e,f,g){function a(a,b){if(a===null||typeof a==="undefined")return;if(typeof a!=="string")return a;if(/^\w+$/.test(a)&&typeof window[a]==="function")return window[a].apply(null,b||[]);d("sdk.Scribe").log("jssdk_error",{appId:c("sdk.Runtime").getClientID(),error:"USE_OF_EVAL_FUNCTION",extra:{message:"Developer used an eval function"}});return Function('return eval("'+a.replace(/\"/g,'\\"')+'");').apply(null,b||[])}f.exports=a}),34); +__d("sdk.SVGLogos",["guid"],(function(a,b,c,d,e,f,g){"use strict";var h="M90,212v-75h-27v-31h27v-25q0,-40 40,-40q15,0 24,2v26h-14q-16,0 -16,16v21h30l-5,31h-27v75",i="a106 106,0,1,0,-32 0",j="a106 106,1,0,1,-32 0";function k(a,b){Object.getOwnPropertyNames(b).forEach(function(c){return a.setAttribute(c,b[c])});return a}function l(a,b,c){b=k(document.createElementNS("http://www.w3.org/2000/svg",b),c);a==null?void 0:a.appendChild(b);return b}a=function(a){a=l(null,"svg",ES("Object","assign",!1,{viewBox:"0 0 100 100",preserveAspectRatio:"xMinYMin"},a));l(a,"line",{x1:"0",y1:"100",x2:"100",y2:"0","stroke-width":"12"});l(a,"line",{x1:"0",y1:"0",x2:"100",y2:"100","stroke-width":"12"});return a};b=function(a){a=l(null,"svg",ES("Object","assign",!1,{viewBox:"0 0 213 213",preserveAspectRatio:"xMinYMin"},a));l(a,"path",{d:h+i,"class":"f_logo_circle"});l(a,"path",{d:h+j,"class":"f_logo_f"});return a};d=function(a){a=l(null,"svg",ES("Object","assign",!1,{viewBox:"0 0 213 213",preserveAspectRatio:"xMinYMin"},a));l(a,"path",{d:h+i,"class":"f_logo_circle",fill:"white"});l(a,"path",{d:h+j,"class":"f_logo_f",fill:"white"});return a};e=function(a){a=l(null,"svg",ES("Object","assign",!1,{viewBox:"-2 -2 104 104",preserveAspectRatio:"xMinYMin"},a));l(a,"rect",{x:"5",y:"5",width:"91",height:"91","stroke-width":"9",rx:"23","class":"ig_logo_body"});l(a,"circle",{cx:"77",cy:"23",r:"6","class":"ig_logo_flash"});l(a,"circle",{cx:"50",cy:"50",r:"21","stroke-width":"9","class":"ig_logo_lens"});return a};f=function(a){var b=c("guid")();a=l(null,"svg",ES("Object","assign",!1,{viewBox:"-2 -2 104 104",preserveAspectRatio:"xMinYMin"},a));var d=l(a,"defs",{}),e=l(d,"mask",{id:b});l(e,"circle",{cx:"77",cy:"23",r:"6",fill:"white"});l(e,"circle",{cx:"50",cy:"50",r:"21","stroke-width":"9",stroke:"white"});l(e,"rect",{x:"5",y:"5",width:"91",height:"91","stroke-width":"9",rx:"23",stroke:"white",fill:"none"});e=l(d,"linearGradient",{id:"purplepink",x1:"0",x2:".15",y1:"0",y2:".6"});l(e,"stop",{offset:"12%","stop-color":"rgb(88,85,214)"});l(e,"stop",{offset:"85%","stop-color":"rgb(215,27,122)"});e=l(d,"radialGradient",{id:"yelloworange",cx:".35",cy:"1",r:"2"});l(e,"stop",{offset:"7%","stop-color":"rgb(252,215,114)"});l(e,"stop",{offset:"20%","stop-color":"rgb(244,102,37)"});l(e,"stop",{offset:"38%","stop-color":"rgb(225,37,122)","stop-opacity":"0"});l(a,"rect",{x:"1",y:"1",width:"99",height:"99","stroke-width":"0",rx:"23",fill:"url(#purplepink)",style:"mask: url(#"+b+")"});l(a,"rect",{x:"1",y:"1",width:"99",height:"99","stroke-width":"0",rx:"23",fill:"url(#yelloworange)",style:"mask: url(#"+b+")"});return a};g.close=a;g.facebook=b;g.facebookWhite=d;g.instagram=e;g.instagramColor=f}),98); +__d("sdk.SharedStringConstants",["sdk.fbt"],(function(a,b,c,d,e,f,g){"use strict";a={continueWith:c("sdk.fbt")._("Continue with {facebook_app_name} or {instagram_app_name}"),continueWithShort:c("sdk.fbt")._("{facebook_app_name} or {instagram_app_name}"),loginButtonAriaLabel:c("sdk.fbt")._("Continue with Facebook or Instagram"),logout:c("sdk.fbt")._("Logout"),logoutButtonAriaLabel:c("sdk.fbt")._("Logout the current website"),titleText:c("sdk.fbt")._("Choose Account"),promptText:c("sdk.fbt")._("Which account would you like to use to log in?"),facebookText:c("sdk.fbt")._("Log in with Facebook"),facebookTextShort:c("sdk.fbt")._("Log in"),instagramText:c("sdk.fbt")._("Log in with Instagram"),disambiguationDialogAriaLabelText:c("sdk.fbt")._("Log in with Facebook or Instagram"),fbButtonText:c("sdk.fbt")._("Continue with Facebook"),igButtonText:c("sdk.fbt")._("Continue with Instagram")};g.buttonStringsFBT=a}),98); +__d("sdk.XFBML.ShadowDOMLoginButton",["DOMPlugin","UrlMap","sdk.Auth","sdk.Event","sdk.LoggingUtils","sdk.PluginUtils","sdk.Runtime","sdk.SVGLogos","sdk.SharedStringConstants","sdk.createIframe","sdk.ui"],(function(a,b,c,d,e,f,g){var h={small:"11px",medium:"13px",large:"16px"},i={small:"20px",medium:"30px",large:"40px"},j="{facebook_app_name}";a=function(a){babelHelpers.inheritsLoose(b,a);function b(b,e,f,g,h){b=a.call(this,b,e,f,g,h)||this;b.stateObservers=[];b.shadowCss=["css:fb.shadow.css.fb_login_button"];b.container=document.createElement("div");b.container.classList.add("fb_login_button_container");b.container.dir="auto";b.loginButtonText=b.updateLabel();b.fbLoginButton=document.createElement("button");b.borderRadius=b.updateRadius(b.params);b.fbLoginButton=b.createSingleButton(b.loginButtonText);b.createFBButton("fb-button-main-element",d("sdk.SharedStringConstants").buttonStringsFBT.logout,d("sdk.SharedStringConstants").buttonStringsFBT.logoutButtonAriaLabel,r,function(a){this.style.display=a.status==="connected"?"flex":"none"},ES(function(a){c("sdk.Auth").logout(),a&&a.detail===0&&this.fbLoginButton&&this.fbLoginButton.style.display!=="none"&&this.fbLoginButton.focus()},"bind",!0,babelHelpers.assertThisInitialized(b)));return b}var e=b.prototype;e.render=function(a){var b=this;this.updateDisplay({shouldHideDisambiguation:!0,status:c("sdk.Runtime").getLoginStatus()});d("sdk.Event").subscribe("auth.statusChange",function(a){a={shouldHideDisambiguation:!0,status:a.status,fxApp:a.loginSource};b.updateDisplay(a)});return this.container};e.createSingleButton=function(a){return this.createFBButton("fb-button-main-element",a,a,q,function(a){this.style.display=a.status==="connected"?"none":"flex"},ES(function(a){a.stopPropagation(),d("sdk.LoggingUtils").logLoginEvent(this.params,d("sdk.LoggingUtils").logEventName.buttonClick+"_single_fb"),this.loginTrigger()},"bind",!0,this))};e.loginTrigger=function(){var a="";c("sdk.ui")({method:"permissions.oauth",display:"popup",scope:a},this.loginCb())};e.createFBButton=function(a,b,c,d,e,f){var g=document.createElement("button");g.classList.add(a);g.setAttribute("aria-label",c);a=document.createElement("span");a.classList.add("fb_button_label_element");a.classList.add("fb_button_label");this.applyStyles(g,this.params);this.use_continue_as===!0?a.append(this.createIframeOverlay(this.container,this.params)):d(this.params,b,a);g.appendChild(a);g.addEventListener("click",function(a){f(a),g.blur()});g.updateDisplay=ES(e,"bind",!0,g);this.stateObservers.push(g);this.container.appendChild(g);return g};e.loginCb=function(){var a=this;return function(b){b.authResponse!=null&&b.status==="connected"?d("sdk.LoggingUtils").logLoginEvent(a.params,d("sdk.LoggingUtils").logEventName.loginSuccess+"_single_fb"):d("sdk.LoggingUtils").logLoginEvent(a.params,d("sdk.LoggingUtils").logEventName.loginCancel+"_single_fb")}};e.updateDisplay=function(a){this.stateObservers.forEach(function(b){return b.updateDisplay(a)})};e.updateLabel=function(){var a=this.params["button-type"]==="login_with"?d("sdk.SharedStringConstants").buttonStringsFBT.facebookText:d("sdk.SharedStringConstants").buttonStringsFBT.fbButtonText,b=o(this.params,a);this.params["button-type"]==="login_with"&&(a=b?a:d("sdk.SharedStringConstants").buttonStringsFBT.facebookTextShort);return a};e.updateRadius=function(a){var b;b=(b=d("sdk.PluginUtils").getVal(a,"layout"))!=null?b:"default";a=String(d("sdk.PluginUtils").getVal(a,"size"));a=a!==""?a:"small";a=a==="large"?"4px":"3px";return b==="rounded"?"20px":a};e.applyStyles=function(a,b){var c=String(d("sdk.PluginUtils").getVal(b,"size"));c=c!==""?c:"small";a.style.borderRadius=this.borderRadius;b=(b=d("sdk.PluginUtils").getVal(b,"width"))!=null?b:null;a.style.width=k(c,b).toString();a.style.fontSize=h[c];a.style.height=i[c];a.style.backgroundColor="rgb(26,119,242)";a.style.color="#fff";a.style.border="0";a.style.fontWeight="bold"};e.createIframeOverlay=function(a,b){var e,f=String(d("sdk.PluginUtils").getVal(b,"size"));f=f!==""?f:"small";var g=c("sdk.Runtime").getClientID(),h=String(d("sdk.PluginUtils").getVal(b,"layout"));h=h!==""?h:"default";e=(e=d("sdk.PluginUtils").getVal(b,"width"))!=null?e:null;e=k(f,e).toString();g=d("UrlMap").resolve("www")+("/plugins/login_button_overlay/"+g+"/"+e+"/"+f+"/"+h+"/");h={root:a,url:g,borderRadius:(f=d("sdk.PluginUtils").getVal(b,"layout"))!=null?f:"default",width:e};a=c("sdk.createIframe")(h);a.classList.add("fb-iframe-overlay");return a};return b}(d("DOMPlugin").DOMPlugin);function k(a,b){a=a!=null?a:"small";return b===""||b==null?m(a):l(a,b)}function l(a,b){b=isNaN(b)?0:Number(b);var c=m(a),d=n(a);if(bn(a)?d:b}function m(a){switch(a){case"large":return 240;case"medium":return 200;default:return 200}}function n(a){switch(a){case"large":return 400;case"medium":return 320;default:return 300}}function o(a,b){var c;b=b.replace(/\s?{facebook_app_name}\s?/,"");c=(c=d("sdk.PluginUtils").getVal(a,"width"))!=null?c:null;a=(a=d("sdk.PluginUtils").getVal(a,"size"))!=null?a:"large";a=k(a,c);c=p(b)?p(b):0;return c0||typeof a==="string"&&/^[0-9a-f]{21,}$|^[0-9]{1,21}$/.test(a);if(b)return a.toString();d("Log").warn("Invalid App Id: Must be a number or numeric string representing the application id.");return null}function a(a){c("sdk.Runtime").getInitialized()&&d("Log").warn("FB.init has already been called - this could indicate a problem");if(c("sdk.Runtime").getIsVersioned()){if(Object.prototype.toString.call(a)!=="[object Object]")throw new(c("ManagedError"))("Invalid argument");if(a.authResponse)throw new(c("ManagedError"))("Setting authResponse is not supported");a.version||(a.version=new(c("sdk.URI"))(location.href).getQueryData().sdk_version);d("sdk.PlatformVersioning").assertValidVersion(a.version);c("sdk.Runtime").setVersion(a.version)}else/number|string/.test(typeof a)&&(d("Log").warn("FB.init called with invalid parameters"),a={apiKey:a}),a.status==null&&(a.legacyStatusInit=!0),a=babelHelpers["extends"]({status:!0},a||{});var b=h(a.appId||a.apiKey);b!==null&&c("sdk.Runtime").setClientID(b);"scope"in a&&c("sdk.Runtime").setScope(a.scope);a.cookie&&(c("sdk.Runtime").setUseCookie(!0),typeof a.cookie==="string"&&d("sdk.Cookie").setDomain(a.cookie));(a.localStorage===!1||a.localStorage==="false")&&c("sdk.Runtime").setUseLocalStorage(!1);a.kidDirectedSite&&c("sdk.Runtime").setKidDirectedSite(!0);a.useFamilyLogin&&c("sdk.Runtime").setShouldLoadFamilyLogin(!0);(a.autoLogAppEvents==="1"||a.autoLogAppEvents==="true")&&(a.autoLogAppEvents=!0);a.ab&&c("sdk.Runtime").setSDKAB(a.ab);c("sdk.Runtime").setInitialized(!0);c("sdk.UA").mBasic()&&d("sdk.MBasicInitializer").init();d("sdk.Event").fire("init:post",a)}g["default"]=a}),98); +__d("sdk.init-public",["FB","QueryString","sdk.AppEvents","sdk.ErrorHandling","sdk.Event","sdk.Frictionless","sdk.XD","sdk.init"],(function(a,b,c,d,e,f,g){"use strict";function a(){b("sdk.XD"),b("sdk.AppEvents"),b("sdk.Frictionless"),window.setTimeout(function(){var a=/(connect\.facebook\.net|\.facebook\.com\/assets.php|\.facebook\.net\/assets.php).*?#(.*)/;ES("Array","from",!1,window.document.getElementsByTagName("script")).forEach(function(b){if(b.src){b=a.exec(b.src);if(b){var d={};b=c("QueryString").decode(b[2]);for(var e in b)if(Object.prototype.hasOwnProperty.call(b,e)){var f=b[e];f==="0"?d[e]=0:d[e]=f}c("sdk.init")(d)}}});window.fbAsyncInit&&!window.fbAsyncInit.hasRun&&(d("sdk.Event").fire("init:asyncstart"),window.fbAsyncInit.hasRun=!0,c("sdk.ErrorHandling").unguard(window.fbAsyncInit)())},0),c("FB").provide("",{init:c("sdk.init")}),d("sdk.Event").subscribe("init:post",function(){window.__buffer!==void 0&&window.__buffer.replay()}),window.setTimeout(function(){window.__buffer&&window.__buffer.opts&&c("sdk.init")(window.__buffer.opts)},0)}e={initialize:a};f=e;g["default"]=f}),98); +__d("sdk.Time",["Log","sdk.Impressions","sdk.Runtime","sdk.URI","sdk.feature"],(function(a,b,c,d,e,f,g){"use strict";var h=window.performance,i=h&&"now"in h&&"getEntriesByName"in h,j,k={};function a(){function a(a,b){var e=!1;try{a=new(c("sdk.URI"))(a.name);var f=a.getDomain();a=a.getPath();e=f===b.getDomain()&&ES(a,"includes",!0,"/rsrc.php/")}catch(a){d("Log").error("Malformed URL was passed to the URL constructor: Error %s occured",a.message)}return e}function b(b){var d=h.getEntriesByType("resource").filter(function(d){return a(d,new(c("sdk.URI"))(b))}),e=d.length>=1;e||(d=h.getEntriesByType("resource").filter(function(a){return ES(a.name,"startsWith",!0,b)}));return d}if(i){var e=c("sdk.Runtime").getSDKUrl(),f=null;b=b(e);if(b.length>1)if(b>2)b=null;else{var g=ES(b,"findIndex",!0,function(a){return ES(a.name,"startsWith",!0,e+"?hash=")});!g?b=null:(f=b.splice(g)[0],b=b[0])}else if(b.length===1){g=document.getElementById("facebook-jssdk-iframe");g&&g instanceof HTMLIFrameElement&&(f=g.contentWindow.performance.getEntriesByType("resource").find(function(a){return ES(a.name,"startsWith",!0,e)}));b=b[0]}else b=null;b&&(k.fetchTime=Math.round(b.duration),f&&(k.fetchTime+=Math.round(f.duration)),"transferSize"in b&&(k.transferSize=b.transferSize,f&&(k.transferSize+=f.transferSize)),d("Log").debug("sdkperf: it took %s ms and %s bytes to load %s",k.fetchTime,k.transferSize,e),j=b.startTime,k.ns=c("sdk.Runtime").getSDKNS(),j&&window.setTimeout(function(){var a=c("sdk.feature")("log_perf",!1),b=c("sdk.Runtime").getSDKAB();b&&(k.ab=b,a=!0);a&&d("sdk.Impressions").log(116,k)},1e4))}}function b(a){if(!i||!j)return;k[a]=Math.round(h.now()-j);d("Log").debug("sdkperf: %s logged after %s ms",a,k[a])}g.recordBootload=a;g.log=b}),98); +__d("sdk.time-public",["runOnce","sdk.Event","sdk.Time"],(function(a,b,c,d,e,f,g){"use strict";function a(){d("sdk.Time").recordBootload(),d("sdk.Event").subscribe("init:post",function(){d("sdk.Time").log("init")}),d("sdk.Event").subscribe("init:asyncstart",function(){d("sdk.Time").log("asyncstart")}),d("sdk.Event").subscribe("iframeplugin:create",c("runOnce")(function(){return d("sdk.Time").log("pluginframe")})),d("sdk.Event").subscribe("iframeplugin:onload",c("runOnce")(function(){return d("sdk.Time").log("ttfp")}))}b={init:a};e=b;g["default"]=e}),98); +__d("legacy:fb.sdk.index",["FB","sdk.AppEvents-public","sdk.Auth-public","sdk.Canvas-public","sdk.Event-public","sdk.Frictionless-public","sdk.GamingServices-public","sdk.Runtime","sdk.XFBML-public","sdk.api-public","sdk.init-public","sdk.time-public","sdk.ui"],(function(a,b,c,d,e,f,g){c("sdk.api-public").init(),c("sdk.AppEvents-public").init(),c("sdk.Auth-public").init(),c("sdk.Canvas-public").init(),c("sdk.Canvas-public").initCanvasPlugin(),c("sdk.Canvas-public").initCanvasPrefetcher(),c("sdk.Canvas-public").initCanvasPresence(),c("sdk.Event-public").init(),c("sdk.Frictionless-public").init(),c("sdk.GamingServices-public").init(),c("sdk.init-public").initialize(),c("sdk.time-public").init(),c("FB").provide("",{ui:c("sdk.ui")}),c("sdk.XFBML-public").init(),c("sdk.XFBML-public").initXFBMLBasedSocialPlugin(),c("sdk.Runtime").setIsVersioned(!0)}),35); +window.FB&&window.FB.__buffer&&(window.__buffer=babelHelpers["extends"]({},window.FB.__buffer)); } }).call(global);})();} catch (e) {var i = new Image();i.crossOrigin = 'anonymous';i.dataset.testid = 'fbSDKErrorReport';i.src='https://www.facebook.com/platform/scribe_endpoint.php/?c=jssdk_error&m='+encodeURIComponent('{"error":"LOAD", "extra": {"name":"'+e.name+'","line":"'+(e.lineNumber||e.line)+'","script":"'+(e.fileName||e.sourceURL||e.script||"sdk.js")+'","stack":"'+(e.stackTrace||e.stack)+'","revision":"1006796593","namespace":"FB","message":"'+e.message+'"}}');document.body.appendChild(i);} \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B09362AA33C6AC8CB2F72769A315C15F65EB1318 b/home/.surf/cache/WebKitCache/Version 16/Blobs/B09362AA33C6AC8CB2F72769A315C15F65EB1318 new file mode 100644 index 0000000..b26e804 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/B09362AA33C6AC8CB2F72769A315C15F65EB1318 @@ -0,0 +1,15167 @@ +/* Bundle Includes: + * js/attr.js + * js/mega.js + * js/megaPromise.js + * js/reqstatclient.js + * js/mDB.js + * js/mouse.js + * js/datastructs.js + * js/idbkvstorage.js + * js/sharedlocalkvstorage.js + * js/tlvstore.js + * js/vendor/jsbn.js + * js/vendor/jsbn2.js + */ + +/** + * mega.attr.* related code + */ + +(function _userAttributeHandling(global) { + "use strict"; + + var ns = Object.create(null); + var _inflight = Object.create(null); + var logger = MegaLogger.getLogger('user-attribute'); + var ATTRIB_CACHE_NON_CONTACT_EXP_TIME = 2 * 60 * 60; + var REVOKE_INFLIGHT = !1; // Lyubo is not happy so disabled for now :) + + var ATTR_REQ_CHANNEL = { + '*keyring': 6, + '*!authring': 6, + '*!authRSA': 6, + '*!authCu255': 6, + '+puCu255': 6, + '+sigCu255': 6, + '+puEd255': 6, + '+sigPubk': 6 + }; + + /** + * Assemble property name on Mega API. + * + * @private + * @param attribute {String} + * Name of the attribute. + * @param pub {Boolean|Number} + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * False for private encrypted attributes + * @param nonHistoric {Boolean} + * True for non-historic attributes (default: false). Non-historic attributes will overwrite the value, and + * not retain previous values on the API server. + * @param encodeValues {Boolean|undefined} + * If true, the object's values will be encoded to a UTF-8 byte array (Uint8Array) then encoded as a + * String containing 8 bit representations of the bytes before being passed to the TLV encoding/encrypting + * library. This is useful if the values contain special characters. The SDK is compatible with reading these. + * @return {String} + */ + var buildAttribute = ns._buildAttribute = function (attribute, pub, nonHistoric, encodeValues) { + + if (encodeValues) { + attribute = '>' + attribute; + } + + if (nonHistoric === true || nonHistoric === 1) { + attribute = '!' + attribute; + } + + if (pub === true || pub === undefined) { + attribute = '+' + attribute; + } + else if (pub === -2) { + attribute = '^' + attribute; + } + else if (pub !== -1) { + attribute = '*' + attribute; + } + + return attribute; + }; + + /** + * Assemble property name for database. + * + * @private + * @param userHandle {String} + * Mega's internal user handle. + * @param attribute {String} + * Name of the attribute. + * @return {String} + */ + var buildCacheKey = ns._buildCacheKey = function(userHandle, attribute) { + return userHandle + "_" + attribute; + }; + + /** + * Revoke a pending attribute retrieval if it gets overwritten/invalidated meanwhile. + * @param {String} cacheKey The key obtained from buildCacheKey() + * @returns {Boolean} Whether it was revoked + * @private + */ + var revokeRequest = function(cacheKey) { + if (_inflight[cacheKey]) { + if (REVOKE_INFLIGHT) { + if (d > 1) { + logger.info('Revoking Inflight Request...', cacheKey); + } + _inflight[cacheKey].revoked = true; + } + else { + if (d > 1) { + logger.info('Invalidating Inflight Request...', cacheKey); + } + } + delete _inflight[cacheKey]; + return true; + } + return false; + }; + + /** + * Converts an object with key/value pairs where the values may have special characters (Javascript stores strings + * as UTF-16) which may take up 2+ bytes. First it converts the values to UTF-8 encoding, then encodes those bytes + * to their 8 bit string representation. This object can then be sent directly to the TLV encoding library and + * encrypted as each string character is 8 bits. + * @param {Object} attribute An object with key/value pairs, the values being either ASCII strings or regular + * JavaScript Strings with UTF-16 characters + * @returns {Object} Returns the object with converted values + * @deprecated + * @see {@link tlvstore.encrypt} / {@link tlvstore.decrypt} + */ + ns.encodeObjectValues = function(attribute) { + + var encodedAttribute = {}; + var encoder = new TextEncoder('utf-8'); + + Object.keys(attribute).forEach(function(key) { + + // Encode to UTF-8 and store as Uint8Array bytes + var value = attribute[key]; + var byteArray = encoder.encode(value); + var encodedString = ''; + + // Encode from bytes back to String in 8 bit characters + for (var i = 0; i < byteArray.length; i++) { + encodedString += String.fromCharCode(byteArray[i]); + } + + // Store the encoded string + encodedAttribute[key] = encodedString; + }); + + return encodedAttribute; + }; + + /** + * Converts an object's values (with key/value pairs where the values have 8 bit characters) back to a byte array + * then converts that back to its normal JavaScript string representation + * @param {Object} attribute An object with key/value pairs + * @returns {Object} Returns the object with converted values + * @deprecated + * @see {@link tlvstore.encrypt} / {@link tlvstore.decrypt} + */ + ns.decodeObjectValues = function(attribute) { + + var decodedAttribute = {}; + var decoder = new TextDecoder('utf-8'); + + Object.keys(attribute).forEach(function(key) { + + var value = attribute[key]; + var decodedBytes = []; + + // Encode from 8 bit characters back to bytes + for (var i = 0; i < value.length; i++) { + decodedBytes.push(value.charCodeAt(i)); + } + + // Create Uint8Array for the TextDecoder then decode + var byteArray = new Uint8Array(decodedBytes); + var regularString = decoder.decode(byteArray); + + // Store the decoded string + decodedAttribute[key] = regularString; + }); + + return decodedAttribute; + }; + + /** + * Retrieves a user attribute. + * + * @param userhandle {String} + * Mega's internal user handle. + * @param attribute {String} + * Name of the attribute. + * @param pub {Boolean|Number} + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * False for private encrypted attributes + * @param nonHistoric {Boolean} + * True for non-historic attributes (default: false). Non-historic + * attributes will overwrite the value, and not retain previous + * values on the API server. + * @param callback {Function} + * Callback function to call upon completion (default: none). + * @param ctx {Object} + * Context, in case higher hierarchies need to inject a context + * (default: none). + * @param chathandle {String} pass chathandle in case this is an anonymous user previewing a specific pub chat + * @param decodeValues {Boolean|undefined} + * If true, the object's values will be decoded from String containing 8 bit representations of bytes to a + * UTF-8 byte array then decoded back to regular JavaScript Strings (UTF-16). This is useful if the values + * contain special characters. The SDK is compatible with reading these. + * + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + * Can be used to use promises instead of callbacks for asynchronous + * dependencies. + */ + ns.get = function _getUserAttribute( + userhandle, attribute, pub, nonHistoric, callback, ctx, chathandle, decodeValues) { + + if (typeof userhandle !== 'string' || base64urldecode(userhandle).length !== 8) { + return MegaPromise.reject(EARGS); + } + attribute = buildAttribute(attribute, pub, nonHistoric, decodeValues); + + // Prevent firing API requests when API already gave the attribute value with 'ug' + if (attribute[0] === '^' && Object(window.u_attr).u === userhandle && u_attr[attribute]) { + if (d > 1) { + logger.info('Attribute retrieval "%s" ug-provided.', attribute); + } + if (callback) { + callback(u_attr[attribute], {u: userhandle, ua: attribute}); + } + return MegaPromise.resolve(u_attr[attribute]); + } + + var self = this; + var myCtx = ctx || {}; + var args = toArray.apply(null, arguments); + + // Assemble property name on Mega API. + var cacheKey = buildCacheKey(userhandle, attribute); + + if (_inflight[cacheKey]) { + if (d > 1) { + logger.warn('Attribute retrieval "%s" already pending,...', cacheKey); + } + return _inflight[cacheKey]; + } + + // Make the promise to execute the API code. + var thePromise = new MegaPromise(); + _inflight[cacheKey] = thePromise; + + /** + * Check whether the request was revoked meanwhile and pipe it to retrieve fresh data + * @returns {Boolean} + * @private + */ + var isRevoked = function() { + if (thePromise.revoked) { + logger.info('Attribute retrieval got revoked...', cacheKey); + + if (_inflight[cacheKey]) { + logger.info('Another inflight request got set for "%s", reusing for revoked one.', cacheKey); + } + + thePromise.linkDoneAndFailTo(_inflight[cacheKey] || mega.attr.get.apply(mega.attr, args)); + return true; + } + return false; + }; + + /** + * mega.attr.get::settleFunctionDone + * + * Fullfill the promise with the result/attribute value from either API or cache. + * + * @param {Number|Object} res The result/attribute value. + * @param {Boolean} cached Whether it came from cache. + */ + var settleFunctionDone = function _settleFunctionDone(res, cached) { + var tag = cached ? 'Cached ' : ''; + res = Object(res).hasOwnProperty('av') ? res.av : res; + + // Another conditional, the result value may have been changed. + if (typeof res !== 'number') { + + // If it's a private attribute container + if (attribute.charAt(0) === '*') { + + // Base64 URL decode, decrypt and convert back to object key/value pairs + res = self.handleLegacyCacheAndDecryption(res, thePromise, attribute); + + // If the decodeValues flag is on, decode the 8 bit chars in the string to a UTF-8 byte array then + // convert back to a regular JavaScript String (UTF-16) + if (attribute[1] === '>' || attribute[2] === '>') { + res = self.decodeObjectValues(res); + } + } + + // Otherwise if a non-encrypted private attribute, base64 decode the data + else if (attribute.charAt(0) === '^') { + res = base64urldecode(res); + } + + if (d > 1 || is_karma) { + var loggerValueOutput = pub ? JSON.stringify(res) : '-- hidden --'; + if (loggerValueOutput.length > 256) { + loggerValueOutput = loggerValueOutput.substr(0, 256) + '...'; + } + logger.info(tag + 'Attribute "%s" for user "%s" is %s.', + attribute, userhandle, loggerValueOutput); + } + thePromise.resolve(res); + } + else { + // Got back an error (a number). + if (d > 1 || is_karma) { + logger.warn(tag + 'attribute "%s" for user "%s" could not be retrieved: %d!', + attribute, userhandle, res); + } + thePromise.reject(res); + } + + // remove pending promise cache + console.assert(!isRevoked(), 'The attribute retrieval should not have been revoked at this point...'); + delete _inflight[cacheKey]; + + // Finish off if we have a callback. + if (callback) { + callback(res, myCtx); + } + }; + + /** + * mega.attr.get::settleFunction + * + * Process result from `uga` API request, and cache it. + * + * @param {Number|Object} res The received result. + */ + var settleFunction = function _settleFunction(res) { + if (isRevoked()) { + return; + } + // Cache all returned values, except errors other than ENOENT + if (typeof res !== 'number' || res === ENOENT) { + var exp = 0; + // Only add cache expiration for attributes of non-contacts, because + // contact's attributes would be always in sync (using actionpackets) + if (userhandle !== u_handle && (!M.u[userhandle] || M.u[userhandle].c !== 1)) { + exp = unixtime(); + } + attribCache.setItem(cacheKey, JSON.stringify([res, exp])); + + if (res.v) { + self._versions[cacheKey] = res.v; + } + } + + settleFunctionDone(res); + }; + + // Assemble context for this async API request. + myCtx.u = userhandle; + myCtx.ua = attribute; + myCtx.callback = settleFunction; + + /** + * mega.attr.get::doApiReq + * + * Perform a `uga` API request If we are unable to retrieve the entry + * from the cache. If a MegaPromise is passed as argument, we'll wait + * for it to complete before firing the api rquest. + * + * settleFunction will be used to process the api result. + * + * @param {MegaPromise|Number} [promise] Optional promise to wait for. + */ + var doApiReq = function _doApiReq(promise) { + if (isRevoked()) { + if (promise === -0xdeadbeef) { + logger.warn('Attribute "%s" got revoked while removing a cached entry!', cacheKey); + } + return; + } + if (promise instanceof MegaPromise) { + promise.always(function() { + doApiReq(-0xdeadbeef); + }); + } + else { + if (chathandle) { + api_req( + {'a': 'mcuga', "ph": chathandle, 'u': userhandle, 'ua': attribute, 'v': 1}, + myCtx, + ATTR_REQ_CHANNEL[attribute] + ); + } + else { + api_req( + {'a': 'uga', 'u': userhandle, 'ua': attribute, 'v': 1}, + myCtx, + ATTR_REQ_CHANNEL[attribute] + ); + } + } + }; + + // check the cache first! + attribCache.getItem(cacheKey) + .fail(doApiReq) + .done(function __attribCacheGetDone(v) { + var result; + + if (isRevoked()) { + return; + } + + try { + var res = JSON.parse(v); + + if ($.isArray(res)) { + var exp = res[1]; + + // Pick the cached entry as long it has no expiry or it hasn't expired + if (!exp || exp > (unixtime() - ATTRIB_CACHE_NON_CONTACT_EXP_TIME)) { + if (res[0].av) { + result = res[0].av; + if (res[0].v) { + self._versions[cacheKey] = res[0].v; + } + } + else { + // legacy support, e.g. for cached attribute values + result = res[0]; + } + } + } + } + catch (ex) { + logger.error(ex); + } + + if (result === undefined) { + doApiReq(attribCache.removeItem(cacheKey)); + } + else { + settleFunctionDone(result, true); + } + }); + + return thePromise; + }; + + /** + * Removes a user attribute for oneself. + * Note: THIS METHOD IS LEFT HERE FOR DEVELOPMENT AND TESTING PURPOSES, PLEASE DON'T USE FOR PRODUCTION FEATURES. + * + * @deprecated + * + * @param attribute {string} + * Name of the attribute. + * @param pub {Boolean|Number} + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * False for private encrypted attributes + * @param nonHistoric {bool} + * True for non-historic attributes (default: false). Non-historic + * attributes will overwrite the value, and not retain previous + * values on the API server. + * @param encodeValues {Boolean|undefined} + * If true and used in combination with the private/encrypted flag (* attribute), the object's values will be + * encoded to UTF-8 as a byte array (Uint8Array) then encoded as a String containing the 8 bit representations + * of the bytes before being passed to the TLV encoding/encrypting functions. These functions will convert + * these 8 bit strings back to bytes before encryption. This feature is useful if the object values contain + * special characters. The SDK is compatible with reading these attributes. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns.remove = promisify(function(resolve, reject, attribute, pub, nonHistoric, encodeValues) { + if (arguments.length > 3) { + attribute = buildAttribute(attribute, pub, nonHistoric, encodeValues); + } + var cacheKey = buildCacheKey(u_handle, attribute); + + if (d) { + console.warn("Removing attribute %s, I really hope you know what you are doing!", attribute); + } + + if (attribute[0] === '^') { + delete u_attr[attribute]; + } + + var self = this; + var req = {'a': 'upr', 'ua': attribute, 'v': 1}; + if (self._versions[cacheKey]) { + // req['av'] = self._versions[cacheKey]; + } + + attribCache.removeItem(cacheKey) + .always(function() { + api_req(req, { + callback: function(res) { + // Revoke pending attribute retrieval, if any. + revokeRequest(cacheKey); + + if (typeof res === 'number' || res < 0) { + logger.warn('Error removing user attribute "%s", result: %s!', attribute, res); + reject(res); + } + else { + if (self._versions[cacheKey] && typeof res === 'string') { + self._versions[cacheKey] = res; + } + logger.info('Removed user attribute "%s", result: ' + res, attribute); + resolve(); + } + } + }, ATTR_REQ_CHANNEL[attribute]); + }); + }); + + /** + * Stores a user attribute for oneself. + * + * @param attribute {string} + * Name of the attribute. The max length is 16 characters. Note that the SDK only reads the first 8 chars. Also + * note that the prefix characters such as *, +, ^, ! or > may be added so usually you have less to work with. + * @param value {object} + * Value of the user attribute. Public properties are of type {string}, + * private ones have to be an object with key/value pairs. + * @param pub {Boolean|Number} + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * False for private encrypted attributes + * @param nonHistoric {Boolean} + * True for non-historic attributes (default: false). Non-historic + * attributes will overwrite the value, and not retain previous + * values on the API server. + * @param callback {Function} + * Callback function to call upon completion (default: none). This callback + * function expects two parameters: the attribute `name`, and its `value`. + * In case of an error, the `value` will be undefined. + * @param ctx {Object} + * Context, in case higher hierarchies need to inject a context + * (default: none). + * @param mode {Integer|undefined} + * Encryption mode. One of tlvstore.BLOCK_ENCRYPTION_SCHEME (to use default AES_GCM_12_16 pass undefined). + * @param useVersion {Boolean|undefined} + * If true is passed, 'upv' would be used instead of 'up' (which means that conflict handlers and all + * versioning logic may be used for setting this attribute) + * @param encodeValues {Boolean|undefined} + * If true and used in combination with the private/encrypted flag (* attribute), the object's values will be + * encoded to UTF-8 as a byte array (Uint8Array) then encoded as a String containing the 8 bit representations + * of the bytes before being passed to the TLV encoding/encrypting functions. These functions will convert + * these 8 bit strings back to bytes before encryption. This feature is useful if the object values contain + * special characters. The SDK is compatible with reading these attributes. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + * Can be used to use promises instead of callbacks for asynchronous + * dependencies. + */ + ns.set = function _setUserAttribute( + attribute, value, pub, nonHistoric, callback, ctx, mode, useVersion, encodeValues) { + + var self = this; + var myCtx = ctx || {}; + var savedValue = value; + var attrName = attribute; + + // Prepare all data needed for the call on the Mega API. + if (mode === undefined) { + mode = tlvstore.BLOCK_ENCRYPTION_SCHEME.AES_GCM_12_16; + } + + // Format to get the right prefixes + attribute = buildAttribute(attribute, pub, nonHistoric, encodeValues); + + // If encrypted/private attribute, the value should be a key/value property container + if (attribute[0] === '*') { + + // If encode flag is on, encode the object values to UTF-8 then 8 bit strings so TLV blockEncrypt can parse + if (attribute[1] === '>' || attribute[2] === '>') { + value = self.encodeObjectValues(value); + } + + // Encode to TLV, encrypt it then Base64 URL encode it so it can be stored API side + savedValue = base64urlencode( + tlvstore.blockEncrypt( + tlvstore.containerToTlvRecords(value), u_k, mode, false + ) + ); + } + + // Otherwise if a non-encrypted private attribute, base64 encode the data + else if (attribute[0] === '^') { + savedValue = base64urlencode(value); + } + + // Make the promise to execute the API code. + var thePromise = new MegaPromise(); + + var cacheKey = buildCacheKey(u_handle, attribute); + + // Revoke pending attribute retrieval, if any. + revokeRequest(cacheKey); + + // clear when the value is being sent to the API server, during that period + // the value should be retrieved from the server, because of potential + // race conditions + attribCache.removeItem(cacheKey); + + var settleFunction = function(res) { + if (typeof res !== 'number') { + attribCache.setItem(cacheKey, JSON.stringify([{"av": savedValue, "v": res[attribute]}, 0])); + if (res[attribute]) { + self._versions[cacheKey] = res[attribute]; + } + + logger.info('Setting user attribute "' + + attribute + '", result: ' + res); + thePromise.resolve(res); + } + else { + if (res === EEXPIRED && useVersion) { + var conflictHandlerId = attribute; + + if ( + !self._conflictHandlers[conflictHandlerId] || + self._conflictHandlers[conflictHandlerId].length === 0 + ) { + logger.error('Server returned version conflict for attribute "' + + attribute + '", result: ' + res + ', local version:', self._versions[cacheKey]); + thePromise.reject(res); + } + else { + // ensure that this attr's value is not cached and up-to-date. + attribCache.removeItem(cacheKey); + + self.get( + u_handle, + attrName, + pub, + nonHistoric, + false, + false, + false, + encodeValues + ) + .done(function(attrVal) { + var valObj = { + 'localValue': value, + 'remoteValue': attrVal, + 'mergedValue': value, + 'latestVersion': self._versions[cacheKey] + }; + + var matched = self._conflictHandlers[conflictHandlerId].some(function(cb, index) { + return cb(valObj, index); + }); + + if (matched) { + thePromise.linkDoneAndFailTo( + self.set( + attrName, + valObj.mergedValue, + pub, + nonHistoric, + callback, + ctx, + mode, + useVersion, + encodeValues + ) + ); + } + + }) + .fail(function(failResult) { + logger.error( + "This should never happen:", attribute, res, failResult, self._versions[cacheKey] + ); + thePromise.reject(failResult); + }); + } + + } + else { + logger.warn('Error setting user attribute "' + + attribute + '", result: ' + res + '!'); + thePromise.reject(res); + } + } + + // Finish off if we have a callback. + if (callback) { + callback(res, myCtx); + } + }; + + if (window.is_chatlink) { + switch (attrName) { + case 'authRSA': + case 'authring': + case 'authCu255': + if (d) { + logger.warn('Leaving attribute "%s" into memory-only mode.', attribute); + } + // @todo smartly sync/merge those attributes when the (full reg.) user moves away from the chat-link + queueMicrotask(() => settleFunction([])); + return thePromise; + } + } + + // Assemble context for this async API request. + myCtx.ua = attribute; + myCtx.callback = settleFunction; + + + // Fire it off. + var apiCall = {'a': 'up', 'i': requesti}; + + if (useVersion) { + var version = self._versions[cacheKey]; + + apiCall['a'] = 'upv'; + if (version) { + apiCall[attribute] = [ + savedValue, + version + ]; + + api_req(apiCall, myCtx, ATTR_REQ_CHANNEL[attribute]); + } + else { + // retrieve version/data from cache or server? + self.get(u_handle, attrName, pub, nonHistoric).always(function() { + version = self._versions[cacheKey]; + + apiCall['a'] = 'upv'; + if (version) { + apiCall[attribute] = [ + savedValue, + version + ]; + } + else { + apiCall[attribute] = [ + savedValue + ]; + } + api_req(apiCall, myCtx, ATTR_REQ_CHANNEL[attribute]); + }); + + } + } + else { + apiCall[attribute] = savedValue; + + api_req(apiCall, myCtx, ATTR_REQ_CHANNEL[attribute]); + } + + + return thePromise; + }; + + ns._versions = Object.create(null); + ns._conflictHandlers = Object.create(null); + + ns.registerConflictHandler = function (attributeName, pub, nonHistoric, encodeValues, mergeFn) { + var attributeId = buildAttribute(attributeName, pub, nonHistoric, encodeValues); + + if (!this._conflictHandlers[attributeId]) { + this._conflictHandlers[attributeId] = []; + } + this._conflictHandlers[attributeId].push(mergeFn); + }; + + /** + * An internal list of queued setArrayAttribute operations + * + * @type {Array} + * @private + */ + ns._queuedSetArrayAttributeOps = []; + + + /** + * QueuedSetArrayAttribute is used to represent an instance of a "set" op in an queue of QueuedSetArrayAttribute's. + * Every QueuedSetArrayAttribute can contain multiple changes to multiple keys. + * This is done transparently in mega.attr.setArrayAttribute. + * + * @private + * @param {String} attr - see mega.attr.setArrayAttribute + * @param {String} attributeName see mega.attr.setArrayAttribute + * @param {String} k initial k to be changed + * @param {String} v initial value to be used for the change + * @param {String} pub see mega.attr.setArrayAttribute + * @param {String} nonHistoric see mega.attr.setArrayAttribute + * @constructor + */ + var QueuedSetArrayAttribute = function(attr, attributeName, k, v, pub, nonHistoric) { + var self = this; + self.attr = attr; + self.attributeName = attributeName; + self.pub = pub; + self.nonHistoric = nonHistoric; + self.ops = []; + self.state = QueuedSetArrayAttribute.STATE.QUEUED; + + var proxyPromise = new MegaPromise(); + proxyPromise.always(function() { + // logger.debug("finished: ", proxyPromise.state(), self.toString()); + + self.state = QueuedSetArrayAttribute.STATE.DONE; + array.remove(self.attr._queuedSetArrayAttributeOps, self); + + if (self.attr._queuedSetArrayAttributeOps.length > 0) { + // execute now + self.attr._nextQueuedSetArrayAttributeOp(); + } + }); + + self.queueSubOp(k, v); + + self.promise = proxyPromise; + self.attr._queuedSetArrayAttributeOps.push(self); + if (self.attr._queuedSetArrayAttributeOps.length === 1) { + // execute now + self.attr._nextQueuedSetArrayAttributeOp(); + } + }; + + QueuedSetArrayAttribute.STATE = { + 'QUEUED': 1, + 'EXECUTING': 2, + 'DONE': 3 + }; + + /** + * Internal method, that is used for adding subOps, e.g. an QueuedSetArrayAttribute can contain multiple + * changes to a key. + * + * @private + * @param {String} k + * @param {String} v + */ + QueuedSetArrayAttribute.prototype.queueSubOp = function(k, v) { + var self = this; + self.ops.push([k, v]); + logger.debug("QueuedSetArrayAttribute queued sub op", k, v, self.toString()); + }; + + /** + * Debugging purposes only + * + * @returns {String} + */ + QueuedSetArrayAttribute.prototype.toString = function() { + var self = this; + + var setOps = []; + + self.ops.forEach(function(entry) { + setOps.push(entry[0] + "=" + entry[1]); + }); + + return "QueuedSetArrayAttribute: " + buildAttribute(self.attributeName, self.pub, self.nonHistoric) + "(" + + setOps.join(",") + + ")"; + }; + + /** + * Execute this QueuedSetArrayAttribute changes and send them to the server. + * + * @returns {MegaPromise|*} + */ + QueuedSetArrayAttribute.prototype.exec = function() { + var self = this; + + var proxyPromise = self.promise; + self.state = QueuedSetArrayAttribute.STATE.EXECUTING; + + logger.debug("QueuedSetArrayAttribute executing: ", self.toString()); + + var _setArrayAttribute = function(r) { + if (r === EINTERNAL) { + r = {}; + } + else if (typeof r === 'number') { + logger.error("Found number value for attribute: ", self.attributeName, " when trying to use it as " + + "attribute array. Halting .setArrayAttribute"); + proxyPromise.reject(r); + return; + } + var arr = r ? r : {}; + self.ops.forEach(function(entry) { + arr[entry[0]] = entry[1]; + }); + + var serializedValue = arr; + + proxyPromise.linkDoneAndFailTo( + self.attr.set( + self.attributeName, + serializedValue, + self.pub, + self.nonHistoric, + undefined, + undefined, + undefined, + true + ) + ); + }; + + self.attr.get(u_handle, self.attributeName, self.pub, self.nonHistoric) + .done(function(r) { + try { + if (r === -9) { + _setArrayAttribute({}); + proxyPromise.reject(r); + } + else { + _setArrayAttribute(r); + } + } + catch (e) { + logger.error("QueuedSetArrayAttribute failed, because of exception: ", e); + proxyPromise.reject(e, r); + } + }) + .fail(function(r) { + if (r === -9) { + try { + _setArrayAttribute({}); + } + catch (e) { + logger.error("QueuedSetArrayAttribute failed, because of exception: ", e); + } + proxyPromise.reject(r); + } + else { + proxyPromise.reject(r); + } + }); + + return proxyPromise; + }; + + /** + * Try to execute next op, if such is available. + * + * @type {Function} + * @private + */ + ns._nextQueuedSetArrayAttributeOp = SoonFc(function() { + var self = this; + var found = false; + self._queuedSetArrayAttributeOps.forEach(function(op) { + if (!found && op.state === QueuedSetArrayAttribute.STATE.QUEUED) { + found = op; + } + }); + + if (found) { + found.exec(); + } + }, 75); + + + ns.QueuedSetArrayAttribute = QueuedSetArrayAttribute; + + /** + * Update the value (value) of a specific key (subkey) in an "array attribute". + * Important note: `setArrayAttribtues` are cleverly throttled to not flood the API, but also, while being queued, + * multiple .setArrayAttribute('a', ...) -> .setArrayAttribute('a', ...), etc, may be executed in one single API + * call. + * For the developer, this is going to be transparently handled, since any .setArrayAttribute returns a promise and + * that promise would be synced with the internal queueing mechanism, so the only thing he/she needs to take care + * is eventually define a proper execution flow using promises. + * + * @param {String} attributeName see mega.attr.set + * @param {String} subkey generic + * @param {String} value generic + * @param {Integer|undefined|false} pub see mega.attr.set + * @param {Integer|undefined|false} nonHistoric see mega.attr.set + * @returns {MegaPromise|*} + */ + ns.setArrayAttribute = function(attributeName, subkey, value, pub, nonHistoric) { + var self = this; + var found = false; + self._queuedSetArrayAttributeOps.forEach(function(op) { + if ( + !found && + op.state === QueuedSetArrayAttribute.STATE.QUEUED && + op.attributeName === attributeName && + op.pub === pub && + op.nonHistoric === nonHistoric + ) { + found = op; + } + }); + + if (found && found.state === QueuedSetArrayAttribute.STATE.QUEUED) { + found.queueSubOp(subkey, value); + return found.promise; + } + else { + var op = new QueuedSetArrayAttribute(self, attributeName, subkey, value, pub, nonHistoric); + return op.promise; + } + }; + + /** + * Get a specific `subkey`'s value from an "array attribute" + * + * @param {String} userId see mega.attr.get + * @param {String} attributeName the actual attribtue name + * @param {String} subkey the actual subkey stored in that array attribute + * @param {Integer|undefined|false} pub see mega.attr.get + * @param {Integer|undefined|false} nonHistoric see mega.attr.get + * @returns {MegaPromise} + */ + ns.getArrayAttribute = function(userId, attributeName, subkey, pub, nonHistoric) { + var self = this; + + var proxyPromise = new MegaPromise(); + + var $getPromise = self.get(userId, attributeName, pub, nonHistoric) + .done(function(r) { + try { + var arr = r ? r : {}; + proxyPromise.resolve( + arr[subkey] + ); + } + catch (e) { + proxyPromise.reject(e, r); + } + }); + + proxyPromise.linkFailTo($getPromise); + + return proxyPromise; + }; + + /** + * Handle BitMap attributes + * + * @param attrName + * @param version + */ + ns.handleBitMapAttribute = function(attrName, version) { + var attributeStringName = attrName.substr(2); + var bitMapInstance = attribCache.bitMapsManager.get(attributeStringName); + if (bitMapInstance.getVersion() !== version) { + mega.attr.get( + u_handle, + attributeStringName, + attrName.substr(0, 2) === '+!' ? true : -2, + true + ).done(function(r) { + bitMapInstance.mergeFrom(r, false); + }); + } + }; + + /** + * Handles legacy cache & decryption of attributes that use tlvstore + * + * @param {String|Object} res The payload to decrypt. + * @param {MegaPromise} [thePromise] Promise to signal rejections. + * @param {String} [attribute] Attribute name we're decrypting. + * @returns {*} the actual res (if altered) + * @deprecated + * @see {@link tlvstore.encrypt} / {@link tlvstore.decrypt} + */ + ns.handleLegacyCacheAndDecryption = function(res, thePromise, attribute) { + if (typeof res !== 'object') { + try { + var clearContainer = tlvstore.blockDecrypt( + base64urldecode(res), + u_k + ); + res = tlvstore.tlvRecordsToContainer(clearContainer, true); + + if (res === false) { + throw new Error('TLV Record decoding failed.'); + } + } + catch (e) { + if (d) { + logger.error('Could not decrypt private user attribute %s: %s', attribute, e.message, e); + } + res = EINTERNAL; + + if (thePromise) { + thePromise.reject(res); + } + } + } + + return res; + }; + + var uaPacketParserHandler = Object.create(null); + + /** + * Process action-packet for attribute updates. + * + * @param {String} attrName Attribute name + * @param {String} userHandle User handle + * @param {Boolean} [ownActionPacket] Whether the action-packet was issued by oneself + * @param {String} [version] version, as returned by the API + */ + ns.uaPacketParser = function uaPacketParser(attrName, userHandle, ownActionPacket, version) { + var cacheKey = userHandle + "_" + attrName; + + if (this._versions[cacheKey] === version) { + // dont invalidate if we have the same version in memory. + return; + } + + // Revoke pending attribute retrieval, if any. + revokeRequest(cacheKey); + + logger.debug('uaPacketParser: Invalidating cache entry "%s"', cacheKey); + + // XXX: Even if we're using promises here, this is guaranteed to resolve synchronously atm, + // so if this ever changes we'll need to make sure it's properly adapted... + + if (window.u_attr && userHandle === window.u_handle && attrName[0] === '^') { + delete u_attr[attrName]; + } + + var removeItemPromise = attribCache.removeItem(cacheKey); + + removeItemPromise + .always(function _uaPacketParser() { + if (typeof uaPacketParserHandler[attrName] === 'function') { + uaPacketParserHandler[attrName](userHandle); + } + else if ( + (attrName.substr(0, 2) === '+!' || attrName.substr(0, 2) === '^!') && + attribCache.bitMapsManager.exists(attrName.substr(2)) + ) { + mega.attr.handleBitMapAttribute(attrName, version); + } + else if (d > 1) { + logger.debug('uaPacketParser: No handler for "%s"', attrName); + } + }); + + return removeItemPromise; + }; + + mBroadcaster.once('boot_done', function() { + uaPacketParserHandler['firstname'] = function(userHandle) { + if (M.u[userHandle]) { + M.u[userHandle].firstName = M.u[userHandle].lastName = ""; + M.syncUsersFullname(userHandle); + } + else if (d) { + console.warn('uaPacketParser: Unknown user %s handling first/lastname', userHandle); + } + }; + uaPacketParserHandler.lastname = uaPacketParserHandler.firstname; + + uaPacketParserHandler['+a'] = function(userHandle) { + M.avatars(userHandle); + }; + uaPacketParserHandler['*!authring'] = function() { + if (!mega.keyMgr.generation) { + authring.getContacts('Ed25519'); + } + }; + uaPacketParserHandler['*!authRSA'] = function() { + authring.getContacts('RSA'); + }; + uaPacketParserHandler['*!authCu255'] = function() { + if (!mega.keyMgr.generation) { + authring.getContacts('Cu25519'); + } + }; + uaPacketParserHandler['+puEd255'] = function(userHandle) { + // pubEd25519 key was updated! force fingerprint regen. + delete pubEd25519[userHandle]; + crypt.getPubEd25519(userHandle); + }; + uaPacketParserHandler['*!fmconfig'] = function() { + if (fminitialized) { + mega.config.fetch() + .then(() => { + // @todo move this to config->refresh.ui()? + if (page === 'fm/account/transfers') { + accountUI.transfers.transferTools.megasync.render(); + } + }) + .dump('fmconfig.sync'); + } + }; + uaPacketParserHandler['*!>alias'] = function() { + nicknames.updateNicknamesFromActionPacket(); + }; + uaPacketParserHandler['birthday'] = function(userHandle) { + mega.attr.get(userHandle, 'birthday', -1, false, function(res) { + u_attr['birthday'] = from8(base64urldecode(res)); + if (fminitialized && page === 'fm/account') { + accountUI.account.profiles.renderBirthDay(); + } + }); + }; + uaPacketParserHandler['birthmonth'] = function(userHandle) { + mega.attr.get(userHandle, 'birthmonth', -1, false, function(res) { + u_attr['birthmonth'] = from8(base64urldecode(res)); + if (fminitialized && page === 'fm/account') { + accountUI.account.profiles.renderBirthMonth(); + } + }); + }; + uaPacketParserHandler['birthyear'] = function(userHandle) { + mega.attr.get(userHandle, 'birthyear', -1, false, function(res) { + u_attr['birthyear'] = from8(base64urldecode(res)); + if (fminitialized && page === 'fm/account') { + accountUI.account.profiles.renderBirthYear(); + } + }); + }; + uaPacketParserHandler['country'] = function(userHandle) { + mega.attr.get(userHandle, 'country', -1, false, function(res) { + u_attr['country'] = from8(base64urldecode(res)); + if (fminitialized && page === 'fm/account') { + accountUI.account.profiles.renderCountry(); + accountUI.account.profiles.bindEvents(); + } + }); + }; + uaPacketParserHandler['^!prd'] = function() { + mBroadcaster.sendMessage('attr:passwordReminderDialog'); + // if page is session history and new password action detected. update session table. + if (fminitialized && page === 'fm/account/security' && accountUI.security) { + accountUI.security.session.update(1); + } + }; + uaPacketParserHandler['^!dv'] = function() { + if (fminitialized && M.account) { + delay('fv:uvi^dv', fileversioning.updateVersionInfo.bind(fileversioning), 4e3); + } + }; + uaPacketParserHandler['^clv'] = function(userHandle) { + mega.attr.get(userHandle, 'clv', -2, 0, function(res, ctx) { + u_attr[ctx.ua] = res; + + if (fminitialized && page === 'fm/account') { + accountUI.account.qrcode.render(M.account, res); + } + }); + }; + uaPacketParserHandler['^!rubbishtime'] = function(userHandle) { + if (u_attr.flags.ssrs > 0) { + mega.attr.get(userHandle, 'rubbishtime', -2, 1, function(res, ctx) { + u_attr[ctx.ua] = res; + + if (fminitialized && M.account) { + M.account.ssrs = parseInt(res); + if (page === 'fm/account/file-management') { + accountUI.fileManagement.rubsched.render(M.account); + } + } + }); + } + }; + uaPacketParserHandler['^!usl'] = function() { + if (fminitialized && u_type) { + M.getStorageState(true).always(M.checkStorageQuota.bind(M, 2e3)); + } + }; + uaPacketParserHandler['*!rp'] = function() { + if (fminitialized) { + mBroadcaster.sendMessage('attr:rp'); + } + }; + uaPacketParserHandler['^!enotif'] = function() { + mega.enotif.handleAttributeUpdate(); + }; + uaPacketParserHandler['^!affid'] = function(userHandle) { + mega.attr.get(userHandle, 'affid', -2, 1, function(res, ctx) { + u_attr[ctx.ua] = res; + + if (fminitialized) { + M.affiliate.id = res; + } + }); + }; + uaPacketParserHandler['^!webtheme'] = function(userHandle) { + + mega.attr.get(userHandle, 'webtheme', -2, 1, function(res, ctx) { + + u_attr[ctx.ua] = res; + + if (!is_mobile && is_fm()) { + mega.ui.theme.set(res | 0); + } + }); + }; + + uaPacketParserHandler['^!ps'] = function(userHandle) { + mega.attr.get(userHandle, 'ps', -2, 1, function(res, ctx) { + u_attr[ctx.ua] = res; + + if (fminitialized && megaChatIsReady && typeof pushNotificationSettings !== 'undefined') { + pushNotificationSettings.init(); + } + }); + }; + uaPacketParserHandler['^!csp'] = () => 'csp' in window && csp.init(); + + uaPacketParserHandler['*!cam'] = function(userHandle) { + + mega.attr.get(userHandle, "cam", false, true, (res, ctx) => { + + u_attr[ctx.ua] = base64urlencode( + tlvstore.blockEncrypt( + tlvstore.containerToTlvRecords(res), u_k, tlvstore.BLOCK_ENCRYPTION_SCHEME.AES_GCM_12_16 + ) + ); + + if (fminitialized) { + + M.CameraId = base64urlencode(res.h); + M.SecondCameraId = base64urlencode(res.sh); + + M.cameraUploadUI(); + mega.gallery.nodeUpdated = true; + + if (M.currentCustomView.type === 'gallery') { + galleryUI(); + } + } + }); + }; + + uaPacketParserHandler['^!bak'] = (userHandle) => { + + mega.attr.get(userHandle, 'bak', -2, 1, (res, ctx) => { + + u_attr[ctx.ua] = res; + + if (fminitialized) { + M.BackupsId = base64urlencode(u_attr[ctx.ua]); + } + }); + }; + + uaPacketParserHandler['^!keys'] = (userHandle) => { + if (d) { + console.log(`*** KEYS UPDATED for ${userHandle}`); + } + + if (userHandle === u_handle && 'keyMgr' in mega) { + + const shouldLoad = fminitialized || !mega.keyMgr.generation; + + if (shouldLoad) { + mega.keyMgr.fetchKeyStore() + .catch((ex) => { + console.error('key-manager error', ex); + }); + } + } + }; + + if (d) { + global._uaPacketParserHandler = uaPacketParserHandler; + } + }); + + /** + * Create helper factory. + * @param {String} attribute Name of the attribute. + * @param {Boolean|Number} pub + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * @param {Boolean} nonHistoric + * True for non-historic attributes (default: false). Non-historic + * attributes will overwrite the value, and not retain previous + * values on the API server. + * @param {String} storeKey An object key to store the data under + * @param {Function} [decode] Function to post-process the value before returning it + * @param {Function} [encode] Function to pre-process the value before storing it + * @return {Object} + */ + ns.factory = function(attribute, pub, nonHistoric, storeKey, decode, encode) { + var key = buildAttribute(attribute, pub, nonHistoric); + if (this.factory[key]) { + return this.factory[key]; + } + + if (typeof encode !== 'function') { + encode = function(value) { + return JSON.stringify(value); + }; + } + if (typeof decode !== 'function') { + decode = function(value) { + return JSON.parse(value); + }; + } + var log = new MegaLogger('factory[' + key + ']', false, logger); + + var cacheValue = function(value) { + cacheValue.last = decode(value[storeKey]); + + if (key[0] === '*') { + value = base64urlencode( + tlvstore.blockEncrypt( + tlvstore.containerToTlvRecords(value), u_k, tlvstore.BLOCK_ENCRYPTION_SCHEME.AES_GCM_12_16 + ) + ); + } + else if (key[0] === '^') { + value = base64urlencode(value); + } + + if (typeof u_attr === 'object') { + u_attr[key] = value; + } + + return cacheValue.last; + }; + cacheValue.last = false; + + var factory = { + notify: function() { + for (var i = this.notify.queue.length; i--;) { + this.notify.queue[i](cacheValue.last); + } + }, + change: function(callback) { + this.notify.queue.push(tryCatch(callback)); + return this; + }, + remove: function() { + return mega.attr.remove(attribute, pub, nonHistoric); + }, + + set: promisify(function(resolve, reject, value) { + var store = {}; + store[storeKey] = encode(value); + + cacheValue(store); + log.debug('storing value', store); + + mega.attr.set(attribute, store, pub, nonHistoric).then(resolve).catch(reject); + }), + + get: promisify(function(resolve, reject, force) { + if (!force && Object(u_attr).hasOwnProperty(key)) { + var value = u_attr[key] || false; + + if (value) { + if (key[0] === '*') { + value = mega.attr.handleLegacyCacheAndDecryption(value); + } + else if (key[0] === '^') { + value = base64urldecode(value); + } + } + + log.debug('cached value', value); + value = value[storeKey]; + + if (value) { + cacheValue.last = decode(value); + return resolve(cacheValue.last); + } + } + + mega.attr.get(u_handle, attribute, pub, nonHistoric) + .then(function(value) { + log.debug('got value', value); + resolve(cacheValue(value)); + }) + .catch(reject); + }) + }; + + factory.notify.queue = []; + + if (uaPacketParserHandler[key]) { + return log.warn('exists'); + } + + uaPacketParserHandler[key] = function() { + if (fminitialized && u_type) { + cacheValue.last = false; + if (typeof u_attr === 'object') { + delete u_attr[key]; + } + factory.get(true).always(factory.notify.bind(factory)); + } + }; + + this.factory[key] = factory; + return Object.freeze(factory); + }; + + /** + * An attribute factory that eases handling folder creation/management, e.g. My chat files + * @param {String} attribute Name of the attribute. + * @param {Boolean|Number} pub + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * @param {Boolean} nonHistoric + * True for non-historic attributes (default: false). Non-historic + * attributes will overwrite the value, and not retain previous + * values on the API server. + * @param {String} storeKey An object key to store the data under + * @param {String|Array} name The folder name, if an array it's [localized, english] + * @param {Function} [decode] Function to post-process the value before returning it + * @param {Function} [encode] Function to pre-process the value before storing it + * @return {Object} + */ + ns.getFolderFactory = function(attribute, pub, nonHistoric, storeKey, name, decode, encode) { + if (!Array.isArray(name)) { + name = [name]; + } + var localeName = name[0] || name[1]; + var englishName = name[1] || localeName; + var log = new MegaLogger('fldFactory[' + englishName + ']', false, logger); + + // listen for attribute changes. + var onchange = function(handle) { + // XXX: caching the value under the global `M` is meant for compatibility + // with legacy synchronous code, any new logic should stick to promises. + M[attribute] = handle; + dbfetch.node([handle]).always(function(res) { + M[attribute] = res[0] || M[attribute]; + if (M[attribute].p === M.RubbishID) { + M[attribute] = false; + } else if (M[attribute].name !== localeName) { + M.rename(M[attribute].h, localeName); + } + if (d) { + log.info("Updating folder...", M[attribute]); + } + }); + }; + var ns = Object.create(null); + var factory = this.factory(attribute, pub, nonHistoric, storeKey, decode, encode).change(onchange); + + // Initialization logic, invoke just once when needed. + ns.init = function() { + factory.get().then(factory.notify.bind(factory)).catch(function() { + // attribute not set, lookup for a legacy folder node + var keys = Object.keys(M.c[M.RootID] || {}); + + for (var i = keys.length; i--;) { + var n = M.getNodeByHandle(keys[i]); + + if (n.name === englishName || n.name === localeName) { + if (d) { + log.info('Found existing folder, migrating to attribute...', n.h, n); + } + factory.set(n.h).dump(attribute); + if (n.name !== localeName) { + M.rename(n.h, localeName); + } + break; + } + } + }); + }; + + // Retrieve folder node, optionally specifying whether if should be created if it does not exists. + ns.get = promisify(function(resolve, reject, create) { + factory.get().then(function(h) { return dbfetch.node([h]); }).always(function(res) { + var node = res[0]; + if (node && node.p !== M.RubbishID) { + return resolve(node); + } + + if (!create) { + return reject(node || ENOENT); + } + + var target = typeof create === 'string' && create || M.RootID; + M.createFolder(target, ns.name).always(function(target) { + if (!M.d[target]) { + if (d) { + log.warn("Failed to create folder...", target, api_strerror(target)); + } + return reject(target); + } + + ns.set(target).always(resolve.bind(null, M.d[target])); + }); + }); + }); + + // Store folder handle. + ns.set = function(handle) { + return handle === Object(M[attribute]).h ? Promise.resolve(EEXIST) : factory.set(handle); + }; + + // Get notified about changes. + ns.change = function(cb) { + factory.change(cb); + return this; + }; + + Object.defineProperty(ns, 'name', { + get: function() { + return Object(M[attribute]).name || localeName || englishName; + } + }); + + return Object.freeze(ns); + }; + + ns.registerConflictHandler( + "lstint", + false, + true, + false, + function(valObj) { + var remoteValues = valObj.remoteValue; + var localValues = valObj.localValue; + // merge and compare any changes from remoteValues[u_h] = {type: timestamp} -> mergedValues + Object.keys(remoteValues).forEach(function(k) { + // not yet added to local values, merge + if (!localValues[k]) { + valObj.mergedValue[k] = remoteValues[k]; + } + else { + // exists in local values + var remoteData = remoteValues[k].split(":"); + var remoteTs = parseInt(remoteData[1]); + + var localData = localValues[k].split(":"); + var localTs = parseInt(localData[1]); + if (localTs > remoteTs) { + // local timestamp is newer then the remote one, use local + valObj.mergedValue[k] = localValues[k]; + } + else if (localTs < remoteTs) { + // remote timestamp is newer, use remote + valObj.mergedValue[k] = remoteValues[k]; + } + } + }); + + // add any entries which exists locally, but not remotely. + Object.keys(localValues).forEach(function(k) { + if (!remoteValues[k]) { + valObj.mergedValue[k] = localValues[k]; + } + }); + + // logger.debug("merged: ", valObj.localValue, valObj.remoteValue, valObj.mergedValue); + + + return true; + }); + + ns.registerConflictHandler( + "alias", + false, + true, + true, + function(valObj) { + valObj.mergedValue = $.extend({}, valObj.localValue, valObj.remoteValue, nicknames._dirty); + + // logger.debug("merged: ", valObj.localValue, valObj.remoteValue, valObj.mergedValue); + + return true; + }); + + if (d) { + ns._inflight = _inflight; + } + + if (is_karma) { + ns._logger = logger; + mega.attr = ns; + } + else { + Object.defineProperty(mega, 'attr', { + value: Object.freeze(ns) + }); + } + ns = undefined; + +})(self); + +var newnodes = []; +var currsn; // current *network* sn (not to be confused with the IndexedDB/memory state) +var fminitialized = false; +var requesti = makeid(10); +var folderlink = false; +var dumpsremaining; +var residualfm; +var workers; // worker pool +var fmdb; // the FM DB engine (cf. mDB.js) +var ufsc; // global ufs-size-cache instance +var mclp; // promise waiting for mc to load + +Object.defineProperties(window, { + // How many nodes are written on a single DB transaction (per table) + FMDB_FLUSH_THRESHOLD: { + value: parseInt(localStorage.fmdbbl) || 9087 + }, + // How many nodes can be awaiting in memory before applying back-pressure. + BACKPRESSURE_FMDB_LIMIT: { + value: parseInt(localStorage.fmdbpl) || 290784 + }, + // How many nodes can be awaiting decryption (per worker) before applying back-pressure. + BACKPRESSURE_WORKER_LIMIT: { + value: 8192 + }, + // Maximum number of bytes that can be retained in internal buffers before applying backpressure. + BACKPRESSURE_HIGHWATERMARK: { + value: 0x2000000 + }, + // Time to wait (in seconds) when applying backpressure + BACKPRESSURE_WAIT_TIME: { + value: 420 / 1000 + } +}); + +/** @property mega.shouldApplyNetworkBackPressure */ +lazy(mega, 'shouldApplyNetworkBackPressure', () => { + 'use strict'; + + if (mega.flags.nobp || parseInt(localStorage.nobp)) { + if (d) { + console.info('Disabling network back-pressure.', mega.flags.nobp); + } + Object.defineProperty(mega, 'nobp', {value: true}); + return () => false; + } + + return (aContentLength) => { + const nobp = BACKPRESSURE_HIGHWATERMARK > aContentLength; + + if (mega.nobp !== false) { + mega.nobp = nobp; + } + + return !nobp; + }; +}); + +/** @property mega.is */ +lazy(mega, 'is', () => { + 'use strict'; + const obj = { + /** + * @name loading + * @memberOf mega.is + */ + get loading() { + return !!(mega.state & window.MEGAFLAG_LOADINGCLOUD); + } + }; + + return Object.freeze(Object.setPrototypeOf(obj, null)); +}); + +// Set up the MegaLogger's root logger +MegaLogger.rootLogger = new MegaLogger( + "", + { + onCritical: function(msg, pkg) { + if (typeof pkg === 'string') { + pkg = pkg.split('[').shift(); + if (pkg) { + msg = '[' + pkg + '] ' + msg; + } + } + srvlog(msg, 0, 1); + }, + isEnabled: !!window.d + }, + false +); + +var loadingInitDialog; + +if (typeof loadingDialog === 'undefined') { + var loadingDialog = Object.create(null); + + // New subject value to specify loading dialog subject. + // Loading dialog with subject will not disappear until it hided with the subject + $.loadingSubject = Object.create(null); + + loadingDialog.nest = 0; + /** + * Show overlay and loading spinner + * @param {String} subject Subject of overlay + * @param {String} label Loading text label with description + * @returns {void} + */ + loadingDialog.show = function(subject, label) { + 'use strict'; + + var $overlay; + var $spinner; + + subject = subject || 'common'; + + if (!this.quiet) { + $overlay = $('.dark-overlay:not(.mobile)', 'body'); + $spinner = $('.loading-spinner:not(.manual-management)', 'body'); + + if (label) { + $overlay.addClass('white'); + $('.status-txt', $spinner).text(label).addClass('loading'); + } + + $overlay.removeClass('hidden'); + $spinner.removeClass('hidden').addClass('active'); + this.active = true; + + // Even there is current on going loading pregress bar, if loading dialog is called show spinner + $('.main-loader', $spinner).removeClass('hidden'); + + // Prevent scrolling for mobile web + if (is_mobile && $overlay.length && $spinner.length) { + document.getElementById('loading-overlay').addEventListener('touchmove', function(e){ + e.preventDefault(); + }, {passive: false}); + + document.getElementById('loading-spinner').addEventListener('touchmove', function(e){ + e.preventDefault(); + }, {passive: false}); + } + } + + $.loadingSubject[subject] = 1; + }; + loadingDialog.hide = function(subject) { + 'use strict'; + + var $overlay; + var $spinner; + + subject = subject || 'common'; + + delete $.loadingSubject[subject]; + + if (!loadingInitDialog.active && (Object.keys($.loadingSubject).length === 0 || subject === 'force')) { + $overlay = $('.dark-overlay:not(.mobile)', 'body'); + $spinner = $('.loading-spinner:not(.manual-management)', 'body'); + + $overlay.removeClass('white').addClass('hidden'); + $spinner.removeClass('active').addClass('hidden'); + $('.status-txt.loading', $spinner).removeClass('loading'); + + this.nest = 0; + this.active = false; + $.loadingSubject = Object.create(null); + } + }; + loadingDialog.pshow = function() { + 'use strict'; + + if (!this.nest++) { + this.show('--dont-mess-with-me'); + } + }; + loadingDialog.phide = function() { + 'use strict'; + + if (--this.nest < 1) { + this.hide('--dont-mess-with-me'); + this.nest = 0; + } + return !this.nest; + }; + loadingDialog.quiet = false; + loadingDialog.showProgress = function(progress) { + + 'use strict'; + + // Do not interrupt init dialog + if (loadingInitDialog && loadingInitDialog.active) { + return; + } + + const $spinner = $('.loading-spinner:not(.manual-management)').removeClass('hidden'); + + // If there is no current loadingDialog, make spinner disapears + if (!loadingDialog.active) { + $('.main-loader', $spinner).addClass('hidden'); + } + + $('.loader-progressbar', $spinner).addClass('active'); + + if (progress) { + $('.loader-percents', $spinner).css('transform', `scaleX(${progress / 100})`); + } + }; + loadingDialog.hideProgress = function() { + + 'use strict'; + + // Do not interrupt init dialog + if (loadingInitDialog && loadingInitDialog.active) { + return; + } + + const $spinner = $('.loading-spinner:not(.manual-management)'); + + $('.loader-progressbar', $spinner).removeClass('active'); + + // awaiting 300 fadeout animation + setTimeout(() => { + + // If there is another active loading dialog do not interrupt it. + if (!loadingDialog.active) { + $spinner.addClass('hidden'); + } + $('.loader-percents', $spinner).css('transform', ''); + }, 301); + }; +} + +if (typeof loadingInitDialog === 'undefined') { + loadingInitDialog = Object.create(null); + loadingInitDialog.progress = false; + loadingInitDialog.active = false; + loadingInitDialog.show = function() { + var $loadingSpinner = $('.loading-spinner'); + + // Folder link load + if (pfid) { + $loadingSpinner.find('.step1').text(l[8584]); // Requesting folder data + $loadingSpinner.find('.step2').text(l[8585]); // Receiving folder data + $loadingSpinner.find('.step3').text(l[8586]); // Decrypting folder data + } + else { + // Regular account load + $loadingSpinner.find('.step1').text(l[8577]); // Requesting account data + $loadingSpinner.find('.step2').text(l[8578]); // Receiving account data + $loadingSpinner.find('.step3').text(l[8579]); // Decrypting + } + + // On mobile, due to reduced screen size we just want a simpler single step with the text 'Loading' + if (is_mobile) { + $loadingSpinner.find('.step1').text(l[1456]); + } + + this.hide(); + $('.light-overlay').removeClass('hidden'); + $('body').addClass('loading'); + $('.loading-spinner:not(.manual-management)').removeClass('hidden').addClass('init active'); + this.active = true; + }; + loadingInitDialog.step1 = function() { + $('.loading-info li.loading').addClass('loaded').removeClass('loading'); + $('.loading-info li.step1').addClass('loading'); + }; + loadingInitDialog.step2 = function(progress) { + 'use strict'; + if (!this.active) { + return; + } + if (this.progress === false) { + + // Don't show step 2 loading if on mobile + if (!is_mobile) { + $('.loading-info li.loading').addClass('loaded').removeClass('loading'); + $('.loading-info li.step2').addClass('loading'); + } + $('.loader-progressbar').addClass('active'); + + // Load performance report + mega.loadReport.ttfb = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + // If the PSA is visible reposition the account loading bar + if (typeof psa !== 'undefined') { + psa.repositionAccountLoadingBar(); + } + } + if (progress) { + $('.loader-percents').css('transform', `scaleX(${progress * 0.5 / 100})`); + } + this.progress = true; + }; + loadingInitDialog.step3 = function(progress, delayStep) { + 'use strict'; + + if (this.progress) { + + // Don't show step 3 loading if on mobile + if (progress === 1 && !is_mobile) { + + $('.loading-info li.loading').addClass('loaded').removeClass('loading'); + $('.loading-info li.step3').addClass('loading'); + } + + if (!this.loader) { + this.loader = document.getElementsByClassName('loader-percents')[0]; + } + + if (typeof this.progress !== 'number') { + this.progress = 0; + } + + // This trying moving backward, nope sorry you cannot do this. + if (this.progress > progress || !this.loader) { + return; + } + + // only update UI with 0.5% step + if (this.progress + 1 <= progress) { + + this.progress = progress | 0; + this.loader.classList.remove('delay-loader'); + this.loader.style.transform = `scaleX(${(this.progress * 0.5 + 50) / 100})`; + + requestAnimationFrame(() => { + + if (this.progress >= 99 || this.progress === false) { + + const elm = document.getElementsByClassName('loader-progressbar')[0]; + + if (elm) { + elm.classList.remove('active'); + elm.style.bottom = 0; + } + } + else if (this.loader && delayStep && this.progress < delayStep) { + + this.loader.classList.add('delay-loader'); + this.loader.style.transform = `scaleX(${(delayStep * 0.5 + 50) / 100})`; + } + }); + } + } + }; + loadingInitDialog.hide = function(subject) { + 'use strict'; + this.loader = null; + this.active = false; + this.progress = false; + $('.light-overlay').addClass('hidden'); + $('body').removeClass('loading'); + if ($.loadingSubject && Object.keys($.loadingSubject).length === 0) { + $('.loading-spinner:not(.manual-management)').addClass('hidden').removeClass('init active'); + } + $('.loading-info li').removeClass('loading loaded'); + $('.loader-progressbar').removeClass('active'); + $('.loader-percents').width('0%').removeAttr('style'); + + // Implicitly hide the former dialog, as per the linked dependency. + window.loadingDialog.hide(subject); + }; +} + +// execute actionpacket +// actionpackets are received and executed strictly in order. receiving and +// execution run concurrently (a connection drop while the execution is +// ongoing invalidates the IndexedDB state and forces a reload!) +var scq = Object.create(null); // hash of [actionpacket, [nodes]] +var scqtail = 0; // next scq index to process +var scqhead = 0; // next scq index to write +var scloadtnodes = false; // if `t` packet requires nodes in memory +var scinflight = false; // don't run more than one execsc() "thread" +var sccount = 0; // number of actionpackets processed at connection loss +var scfetches = Object.create(null); // holds pending nodes to be retrieved from fmdb +var scfsubtree = Object.create(null); // fetch entire subtree as needed by some action-packets +var scwaitnodes = Object.create(null); // supplements scfetches per scqi index +var nodesinflight = Object.create(null); // number of nodes being processed in the worker for scqi +var sc_history = []; // array holding the history of action-packets +var nodes_scqi_order = 0; // variable to count the node arrival order before sending to workers + +// enqueue nodes needed to process packets +function sc_fqueue(handle, packet) { + "use strict"; + + if (handle && (!M.c[handle] || scfsubtree[handle])) { + if (scwaitnodes[packet.scqi]) { + scwaitnodes[packet.scqi]++; + } + else { + scwaitnodes[packet.scqi] = 1; + } + if (!scfetches[handle]) { + scfetches[handle] = []; + } + scfetches[handle].push(packet.scqi); + return 1; + } + return 0; +} + +// queue 't' packet nodes for db retrieval +function sc_fqueuet(scni, packet) { + "use strict"; + + var result = 0; + + if (scloadtnodes) { + var scnodes = scq[scni] && scq[scni][1]; + + if (scnodes && scnodes.length) { + packet = packet || scq[scni][0]; + + if (!packet) { + console.error('sc_fqueuet: invalid packet!'); + } + else { + if (d > 1) { + console.debug('sc_fqueuet', scni, packet, clone(scnodes)); + } + for (var i = scnodes.length; i--;) { + result += sc_fqueue(scnodes[i].p, packet); + } + } + } + } + + return result; +} + +// fetch from db the queued scfetches +async function sc_fetcher() { + "use strict"; + + if ($.scFetcherRunning) { + if (d > 1) { + console.debug('sc_fetcher already running...'); + } + return; + } + + const queue = scfetches; + const handles = Object.keys(queue); + const fsubtree = scfsubtree; + scfetches = Object.create(null); + scfsubtree = Object.create(null); + + if (!handles.length) { + return queueMicrotask(resumesc); + } + $.scFetcherRunning = true; + + if (d) { + console.info('Retrieving from DB nodes required to parse action-packets...', handles); + } + // console.time('sc:fetcher'); + + while (handles.length) { + const bunch = handles.splice(0, 8192); + await dbfetch.geta(bunch).catch(dump); + + // Retrieve all needed subtrees and file versions if any, and then finish the batch processing + const subtree = new Set(); + + for (let i = bunch.length; i--;) { + const n = M.d[bunch[i]]; + + if (n) { + if (n.t) { + if (fsubtree[n.h]) { + // entire subtree + subtree.add(n.h); + } + } + else if (n.tvf) { + // file versions + subtree.add(n.h); + } + } + } + + if (subtree.size) { + await dbfetch.tree([...subtree]).catch(dump); + } + + for (let i = bunch.length; i--;) { + const h = bunch[i]; + for (let p = queue[h].length; p--;) { + const scqi = queue[h][p]; + if (!--scwaitnodes[scqi]) { + delete scwaitnodes[scqi]; + } + } + } + + queueMicrotask(resumesc); + } + // console.timeEnd('sc:fetcher'); + + $.scFetcherRunning = false; + queueMicrotask(sc_fetcher); +} + +/** + * function to start fetching nodes needed for the action packets + * @param {Number} scni id of action packe in scq + */ +function startNodesFetching(scni) { + "use strict"; + if (!--nodesinflight[scni]) { + delete nodesinflight[scni]; + + if (scloadtnodes && scq[scni] && scq[scni][0] && sc_fqueuet(scni)) { + // fetch required nodes from db + sc_fetcher().catch(dump); + } + else { + // resume processing, if appropriate and needed + resumesc(); + } + } +} + +// enqueue parsed actionpacket +function sc_packet(a) { + "use strict"; + + // set scq slot number + a.scqi = scqhead; + + if (d > 1) { + console.debug('sc_packet', loadfm.fromapi, scloadtnodes, a.a, a); + } + + // record history + // if (sc_history) { + // sc_history.push(a.a); + // } + + // check if this packet needs nodes to be present, + // unless `fromapi` where nodes are placed in memory already as received. + if (window.fmdb && (!loadfm.fromapi || !fmdb.memoize)) + { + const inflight = $.len(scfetches); + + scloadtnodes = true; + + switch (a.a) { + case 'd': + scfsubtree[a.n] = 1; + /* falls through */ + case 's': + case 's2': + case 'fa': + case 'u': + sc_fqueue(a.n, a); + /* fall-through */ + case 'ph': + sc_fqueue(a.h, a); // s, s2, ph + break; + case 't': + // If no workers, all scnodes should be ready + // OR the scnodes are ready but not the ap set yet + if (!decWorkerPool.ok || scq[scqhead] && !scq[scqhead][0]) { + sc_fqueuet(scqhead, a); + } + break; + } + + if ($.len(scfetches) !== inflight) { + sc_fetcher(); + } + } + + if ((a.a === 's' || a.a === 's2') && a.k && !self.secureKeyMgr) { + /** + * There are two occasions where `crypto_process_sharekey()` must not be called: + * + * 1. `a.k` is symmetric (AES), `a.u` is set and `a.u != u_handle` + * (because the resulting sharekey would be rubbish) + * + * 2. `a.k` is asymmetric (RSA), `a.u` is set and `a.u != u_handle` + * (because we either get a rubbish sharekey or an RSA exception from asmcrypto) + */ + var prockey = false; + + if (a.k.length > 43) { + if (!a.u || a.u === u_handle) { + // RSA-keyed share command targeted to u_handle: run through worker + prockey = !a.o || a.o !== u_handle; + + if (prockey) { + rsasharekeys[a.n] = true; + } + } + } + else { + prockey = (!a.o || a.o === u_handle); + } + + if (prockey) { + if (decWorkerPool.ok && rsasharekeys[a.n]) { + decWorkerPool.postPacket(a, scqhead++); + return; + } + + var k = crypto_process_sharekey(a.n, a.k); + + if (k !== false) { + a.k = k; + crypto_setsharekey(a.n, k, true); + } + else { + console.warn("Failed to decrypt RSA share key for " + a.n + ": " + a.k); + } + } + } + + if (a.a === 't') { + startNodesFetching(scqhead); + } + + // other packet types do not warrant the worker detour + if (scq[scqhead]) scq[scqhead++][0] = a; + else scq[scqhead++] = [a, []]; + + // resume processing if needed + resumesc(); +} + +// submit nodes from `t` actionpacket to worker +function sc_node(n) { + "use strict"; + + crypto_rsacheck(n); + + if (!decWorkerPool.ok) { + crypto_decryptnode(n); + if (scq[scqhead]) scq[scqhead][1].push(n); + else scq[scqhead] = [null, [n]]; + // sc_packet() call will follow + return; + } + + if (nodesinflight[scqhead]) { + nodesinflight[scqhead]++; + } + else { + nodesinflight[scqhead] = 2; + nodes_scqi_order = 0; // reset the order var + } + + n.scni = scqhead; // set scq slot number (sc_packet() call will follow) + n.arrivalOrder = nodes_scqi_order++; // storing arrival order + decWorkerPool.postNode(n, scqhead % decWorkerPool.length); +} + +// inter-actionpacket state, gets reset in getsc() +var scsharesuiupd; +var scpubliclinksuiupd; +var scContactsSharesUIUpdate; +var loadavatars = []; +var scinshare = Object.create(null); +var sckeyrequest = Object.create(null); + +// sc packet parser +var scparser = Object.create(null); +scparser.$common = Object.create(null); +scparser.$helper = Object.create(null); +scparser[requesti] = Object.create(null); + +/** + * Add a new sc parser handler + * @param {String} type The packet type, s2, la, t, etc + * @param {Object|Function|String} handler The handler descriptor + * If handler is a function, it is meant to parse packets not triggered locally, otherwise + * must be an object with either an 'r' (triggered remotely), 'l' (triggered locally), or 'b'oth. + */ +scparser.$add = function(type, handler) { + if (typeof handler === 'function') { + handler = {r: handler}; + } + if (handler.b) { + scparser.$common[type] = handler.b; + } + if (handler.r) { + scparser[type] = handler.r; + } + if (handler.l) { + scparser[requesti][type] = handler.l; + } +}; + +scparser.$helper.c = function(a) { + // contact notification + process_u(a.u); + + scparser.$notify(a); + + if (megaChatIsReady) { + $.each(a.u, function(k, v) { + if (v.c !== 0) { + // load all keys. + crypt.getPubRSA(v.u); + crypt.getPubCu25519(v.u); + crypt.getPubEd25519(v.u); + } + megaChat[v.c === 0 || (v.c === 2 && v.c !== u_handle) ? "processRemovedUser" : "processNewUser"](v.u); + }); + } +}; + +scparser.$add('c', { + r: function(a) { + scparser.$helper.c(a); + + // contact is deleted on remote computer, remove contact from contacts left panel + if (fminitialized && a.u[0].c === 0) { + + $.each(a.u, function(k, v) { + var userHandle = v.u; + + // hide the context menu if it is currently visible and this contact was removed. + if ($.selected && ($.selected[0] === userHandle)) { + + // was selected + if (selectionManager) { + selectionManager.clear_selection(); + } + $.selected = []; + + if ($('.dropdown.body.files-menu').is(":visible")) { + $.hideContextMenu(); + } + } + }); + } + }, + l: function(a) { + scparser.$helper.c(a); + } +}); + +scparser.$add('s', { + r: function(a) { + if (folderlink) { + return; + } + + var n, i; + var prockey = false; + + if (a.o === u_handle) { + // if access right are undefined, then share is deleted + if (typeof a.r === 'undefined') { + M.delNodeShare(a.n, a.u, a.okd); + if (!folderlink && a.u !== 'EXP' && fminitialized) { + if (a.ou !== u_handle) { + notify.notifyFromActionPacket({ + a: 'dshare', + n: a.n, + u: a.o, + orig: a.ou, + rece: a.u + }); + } + } + } + else { + var handle = a.n; + var shares = Object(M.d[handle]).shares || {}; + + if (self.secureKeyMgr) { + + if (a.u) { + M.nodeShare(handle, {h: a.n, r: a.r, u: a.u, ts: a.ts}); + } + else { + if (d) { + console.debug(`Got share action-packet for pending contact: ${a.n}*${a.p}`, [a]); + } + console.assert(a.a === 's2', `INVALID SHARE, missing user-handle for ${a.n}`, a); + } + } + else if (a.u in shares || a.ha === crypto_handleauth(a.n)) { + + // I updated or created my share + var k = decrypt_key(u_k_aes, base64_to_a32(a.ok)); + + if (k) { + crypto_setsharekey(handle, k); + + if (!a.u) { + // this must be a pending share + if (a.a === 's2') { + // store ownerkey + if (fmdb) { + fmdb.add('ok', {h: handle, d: {k: a.ok, ha: a.ha}}); + } + } + else { + console.error('INVALID SHARE, missing user handle', a); + } + } + else { + M.nodeShare(handle, { + h: a.n, + r: a.r, + u: a.u, + ts: a.ts + }); + } + } + } + } + } + else { + if (a.n && typeof a.k !== 'undefined' && !u_sharekeys[a.n] && !self.secureKeyMgr) { + if (Array.isArray(a.k)) { + // a.k has been processed by the worker + crypto_setsharekey(a.n, a.k); + prockey = true; + } + else if (d) { + // XXX: misdirected actionpackets? + console.warn('Got share action-packet with invalid key, wait for it.', a.n, a.k, [a]); + } + } + + if (a.u === 'EXP') { + var exportLink = new mega.Share.ExportLink({'nodesToProcess': [a.h]}); + exportLink.getExportLink(); + } + + if ('o' in a) { + if (!('r' in a)) { + // share deletion + n = M.d[a.n]; + + if (n) { + if (a.u === u_handle) { + // incoming share + if (d) { + console.log('Incoming share ' + a.n + " revoked.", n.su, M.d[n.p]); + } + + if (M.d[n.p]) { + // inner share: leave nodes intact, just remove .r/.su + delete n.r; + delete n.su; + delete n.sk; + delete M.c.shares[a.n]; + mega.keyMgr.deleteShares([a.n]).catch(dump); + + if (M.tree.shares) { + delete M.tree.shares[a.n]; + } + + if (fmdb) { + fmdb.del('s', a.u + '*' + a.n); + } + M.nodeUpdated(n); + } + else { + // toplevel share: delete entire tree + // (the API will have removed all subshares at this point) + M.delNode(a.n); + } + } + else { + if (a.o === u_handle) { + M.delNodeShare(a.n, a.u); + } + } + } + + if (!folderlink && a.u !== 'EXP' && fminitialized) { + if (a.ou !== u_handle) { + notify.notifyFromActionPacket({ + a: 'dshare', + n: a.n, + u: a.o, + orig: a.ou, + rece: a.u + }); + } + } + } + else { + if (d) { + console.log('Inbound share, preparing for receiving its nodes'); + } + + // if the parent node already exists, all we do is setting .r/.su + // we can skip the subsequent tree; we already have the nodes + if (n = M.d[a.n]) { + n.r = a.r; + n.su = a.o; + M.nodeUpdated(n); + + scinshare.skip = true; + } + else { + scinshare.skip = false; + scinshare.h = a.n; + scinshare.r = a.r; + scinshare.sk = a.k; + scinshare.su = a.o; + + if (!folderlink && fminitialized) { + notify.notifyFromActionPacket({ + a: 'share', + n: a.n, + u: a.o + }); + } + } + } + } + } + + if (prockey) { + var nodes = M.getNodesSync(a.n, true); + + for (i = nodes.length; i--;) { + if (n = M.d[nodes[i]]) { + if (typeof n.k === 'string') { + crypto_decryptnode(n); + newnodes.push(M.d[n.h]); + } + } + } + } + + if (fminitialized) { + onIdle(sharedUInode.bind(null, a.n)); + } + scsharesuiupd = true; + scContactsSharesUIUpdate = a.o ? a.o : false; + }, + l: function(a) { + // share modification + // (used during share dialog removal of contact from share list) + // is this a full share delete? + if (a.r === undefined) { + // fill DDL with removed contact + if (a.u && M.u[a.u] && M.u[a.u].m && !is_mobile) { + var email = M.u[a.u].m; + var contactName = M.getNameByHandle(a.u); + + addToMultiInputDropDownList('.share-multiple-input', [{id: email, name: contactName}]); + addToMultiInputDropDownList('.add-contact-multiple-input', [{id: email, name: contactName}]); + } + } + + if (a.okd) { + M.delNodeShare(a.n, a.u, a.okd); + } + + if (fminitialized) { + // a full share contains .h param + onIdle(sharedUInode.bind(null, a.h)); + } + scsharesuiupd = true; + } +}); + +scparser.$add('s2', { + r: function(a) { + // 's2' still requires the logic for 's' + this.s(a); + + processPS([a]); + }, + l: function(a) { + // 's2' still requires the logic for 's' + this.s(a); + + // store ownerkey + if (fmdb && !self.secureKeyMgr) { + fmdb.add('ok', {h: a.n, d: {k: a.ok, ha: a.ha}}); + } + processPS([a]); + } +}); + +scparser.$add('t', function(a, scnodes) { + // node tree + // the nodes have been pre-parsed and stored in scnodes + if (scinshare.skip) { + // FIXME: do we still need to notify anything here? + scinshare.skip = false; + return; + } + + let i; + const ufsc = new UFSSizeCache(); + let rootNode = scnodes.length && scnodes[0] || false; + + // is this tree a new inshare with root scinshare.h? set share-relevant + // attributes in its root node. + if (scinshare.h) { + for (i = scnodes.length; i--;) { + if (scnodes[i].h === scinshare.h) { + scnodes[i].su = scinshare.su; + scnodes[i].r = scinshare.r; + scnodes[i].sk = scinshare.sk; + rootNode = scnodes[i]; + + if (M.d[rootNode.h]) { + // save r/su/sk, we'll break next... + M.addNode(rootNode); + } + } + else if (M.d[scnodes[i].h]) { + ufsc.feednode(scnodes[i]); + delete scnodes[i]; + } + } + scinshare.h = false; + } + if (M.d[rootNode.h]) { + // skip repetitive notification of (share) nodes + if (d) { + console.debug('skipping repetitive notification of (share) nodes'); + } + return; + } + + // notification logic + if (fminitialized && !pfid && a.ou && a.ou !== u_handle + && rootNode && rootNode.p && !rootNode.su) { + + const targetid = rootNode.p; + const pnodes = []; + + for (i = 0; i < scnodes.length; i++) { + if (scnodes[i] && scnodes[i].p === targetid) { + pnodes.push({ + h: scnodes[i].h, + t: scnodes[i].t + }); + } + } + + notify.notifyFromActionPacket({ + a: 'put', + n: targetid, + u: a.ou, + f: pnodes + }); + } + + const mns = $.moveNodeShares; + for (i = 0; i < scnodes.length; i++) { + if (scnodes[i]) { + delete scnodes[i].i; + delete scnodes[i].scni; + delete scnodes[i].arrivalOrder; + + M.addNode(scnodes[i]); + ufsc.feednode(scnodes[i]); + + if (mns) { + const {h} = scnodes[i]; + const share = mns[h]; + + if (share) { + + // eslint-disable-next-line guard-for-in + for (const su in share) { + M.nodeShare(h, share[su], true); + + if (su === 'EXP') { + scpubliclinksuiupd = true; + } + else { + scsharesuiupd = true; + } + } + + delete mns[h]; + } + } + } + } + + ufsc.save(rootNode); + + if (d > 1) { + // f2 if set must be empty since the nodes must have been processed through workers. + console.assert(!a.t || !a.t.f2 || !a.t.f2.length, 'Check this...'); + } + + if (fminitialized && !is_mobile) { + // update versioning info. + i = scnodes.length > 1 && Object(scnodes[1]).h || rootNode.h; + if (i) { + // TODO: ensure this is backward compatible... + fileversioning.updateFileVersioningDialog(i); + } + } + + if (fminitialized) { + M.storageQuotaCache = null; + } +}); + +scparser.$add('opc', { + b: function(a) { + // outgoing pending contact + processOPC([a]); + + if (fminitialized && M.chat && megaChatIsReady + && megaChat.routingSection === "contacts" + && megaChat.routingSubSection === "sent") { + + mBroadcaster.sendMessage('fmViewUpdate:opc'); + } + } +}); + +scparser.$add('ipc', { + b: function(a) { + // incoming pending contact + processIPC([a]); + + if (fminitialized && megaChatIsReady) { + mBroadcaster.sendMessage('fmViewUpdate:ipc'); + } + + notify.notifyFromActionPacket(a); + } +}); + +scparser.$add('ph', { + r: function(a) { + // exported link + processPH([a]); + + // not applicable - don't return anything, or it will show a blank notification + if (typeof a.up !== 'undefined' && typeof a.down !== 'undefined') { + notify.notifyFromActionPacket(a); + } + scpubliclinksuiupd = true; + }, + l: function(a) { + // exported link + processPH([a]); + + scpubliclinksuiupd = true; + } +}); + +scparser.$add('upci', { + b: function(a) { + // update to incoming pending contact request + processUPCI([a]); + } +}); + +scparser.$add('upco', { + b: function(a) { + // update to outgoing pending contact request + processUPCO([a]); + + // if the status is accepted ('2'), then this will be followed + // by a contact packet and we do not need to notify + if (a.s != 2) { + notify.notifyFromActionPacket(a); + } + } +}); + +scparser.$add('puh', { + b: function(a) { + "use strict"; + mega.megadrop.pufProcessPUH([a]); + } +}); + +scparser.$add('pup', { + b: function(a) { + "use strict"; + mega.megadrop.pupProcessPUP([a]); + } +}); + +scparser.$add('se', { + b: function(a) { + processEmailChangeActionPacket(a); + } +}); + +scparser.$add('pk', { + b: function() { + 'use strict'; + mega.keyMgr.fetchPendingInShareKeys().catch(dump); + } +}); + +scparser.$add('ua', { + r: function(a) { + 'use strict'; + + if (Array.isArray(a.ua)) { + var attrs = a.ua; + var actionPacketUserId = a.u; + + for (var j = 0; j < attrs.length; j++) { + var attributeName = attrs[j]; + mega.attr.uaPacketParser(attributeName, actionPacketUserId, false, a.v && a.v[j]); + } + + // in case of business master + // first, am i a master? + if (u_attr && u_attr.b && u_attr.b.m) { + // then, do i have this user as sub-user? + if ((M.suba && M.suba[actionPacketUserId]) || u_attr.b.bu === actionPacketUserId) { + M.require('businessAcc_js', 'businessAccUI_js').done( + function () { + var business = new BusinessAccount(); + business.updateSubUserInfo(actionPacketUserId, attrs); + } + ); + } + } + } + }, + l: function(a) { + 'use strict'; + + if (Array.isArray(a.ua)) { + var attrs = a.ua; + var actionPacketUserId = a.u; + + for (var j = 0; j < attrs.length; j++) { + var version = a.v && a.v[j]; + var attributeName = attrs[j]; + + // fill version if missing + if (version && !mega.attr._versions[actionPacketUserId + "_" + attributeName]) { + mega.attr._versions[actionPacketUserId + "_" + attributeName] = version; + } + + // handle avatar related action packets (e.g. avatar modified) + if (attributeName === '+a') { + loadavatars.push(actionPacketUserId); + } + else if (attributeName === 'firstname' || attributeName === 'lastname') { + // handle firstname/lastname attributes + mega.attr.uaPacketParser(attributeName, actionPacketUserId, true, version); + } + } + // in case of business master + // first, am i a master? + if (u_attr && u_attr.b && u_attr.b.m) { + // then, do i have this user as sub-user? + if ((M.suba && M.suba[actionPacketUserId]) || u_attr.b.bu === actionPacketUserId) { + M.require('businessAcc_js', 'businessAccUI_js').done( + function () { + var business = new BusinessAccount(); + business.updateSubUserInfo(actionPacketUserId, attrs); + } + ); + } + } + } + } +}); + +scparser.$add('sd', { + b: function() { + "use strict"; + + if (fminitialized && page === 'fm/account/security') { + // need to wait until session history is refreshed. + setTimeout(function() { + accountUI.security.session.update(true); + }, 3000); + } + } +}); + +scparser.$add('e', function(a) { + // CMS update + var str = hex2bin(a.c || ""); + if (str.substr(0, 5) === ".cms.") { + var cmsType = str.split(".")[2]; + var cmsId = str.substr(6 + cmsType.length).split("."); + CMS.reRender(cmsType, cmsId); + } +}); + +scparser.$add('fa', function(a) { + // file attribute change/addition + var n = M.d[a.n]; + if (n) { + n.fa = a.fa; + M.nodeUpdated(n); + + mBroadcaster.sendMessage('fa:ready', a.n, a.fa); + } +}); + +scparser.$add('k', function(a) { + // key request + if (a.sr) { + crypto_procsr(a.sr); + } + if (a.cr) { + crypto_proccr(a.cr); + } + else if (!pfid && a.n) { + if (!sckeyrequest[a.h]) { + sckeyrequest[a.h] = []; + } + sckeyrequest[a.h].push(...a.n); + } + + scsharesuiupd = true; +}); + +scparser.$add('u', function(a) { + // update node attributes + var n = M.d[a.n]; + if (n) { + var oldattr; + var oldname = n.name; + var oldfav = n.fav; + var oldlbl = n.lbl; + + // key update - no longer supported + // API sends keys only for backwards compatibility + // if (a.k) n.k = a.k; + + // attribute update - replaces all existing attributes! + if (a.at) { + oldattr = crypto_clearattr(n); + oldattr.u = n.u; + oldattr.ts = n.ts; + n.a = a.at; + } + + // owner update + if (a.u) { + n.u = a.u; + } + + // timestamp update + if (a.ts) { + n.ts = a.ts; + } + + // try to decrypt new attributes + crypto_decryptnode(n); + + // we got a new attribute string, but it didn't pass muster? + // revert to previous state (effectively ignoring the SC command) + if (a.at && n.a) { + if (d) { + console.warn("Ignored bad attribute update for node " + a.n); + } + crypto_restoreattr(n, oldattr); + delete n.a; + } + else { + // success - check what changed and redraw + if (M.scAckQueue[a.i]) { + if (fminitialized && mega.megadrop.pufs[n.h] && n.name !== mega.megadrop.pufs[n.h].fn) { + mega.megadrop.pupUpdate(n.h, 'msg', n.name); + } + + // Triggered locally, being DOM already updated. + if (d) { + console.log('scAckQueue - triggered locally.', a.i); + } + delete M.scAckQueue[a.i]; + } + else if (a.at) { + if (fminitialized) { + if (n.name !== oldname) { + M.onRenameUIUpdate(n.h, n.name); + } + if (n.fav !== oldfav) { + M.favouriteDomUpdate(n, n.fav); + } + if (n.lbl !== oldlbl) { + M.labelDomUpdate(n.h, n.lbl); + } + } + } + + // save modified node + M.nodeUpdated(n); + } + } +}); + +scparser.$add('d', function(a) { + var fileDeletion = (M.d[a.n] && !M.d[a.n].t); + var topVersion = null; + if (fileDeletion) { + topVersion = fileversioning.getTopNodeSync(a.n); + } + + // This is node move + if (a.m) { + if (d) { + console.time(`sc:d.${a.n}`); + } + $.moveNodeShares = $.moveNodeShares || Object.create(null); + (function _checkMoveNodeShare(h) { + const n = M.d[h]; + if (n) { + if (n.shares) { + $.moveNodeShares[h] = n.shares; + } + if (n.t && M.c[h]) { + Object.keys(M.c[h]).forEach(_checkMoveNodeShare); + } + } + })(a.n); + if (d) { + console.timeEnd(`sc:d.${a.n}`); + } + } + + // node deletion + M.delNode(a.n); + + // was selected, now clear the selected array. + if ($.selected && ($.selected[0] === a.n)) { + $.selected = []; + } + if (!pfid) { + scparser.$notify(a); + } + if (!is_mobile) { + if (fileDeletion && !a.v) {// this is a deletion of file. + if (M.d[topVersion]) { + fileversioning.updateFileVersioningDialog(topVersion); + } + else { + fileversioning.closeFileVersioningDialog(a.n); + } + } + } + + // Remove all upload in queue that target deleted node + if (fminitialized && ul_queue.length > 0) { + ulmanager.ulClearTargetDeleted(a.n); + } + + if (!a.m && fminitialized && !pfid) { + M.storageQuotaCache = null; + delay('checkLeftStorageBlock', () => M.checkLeftStorageBlock()); + } +}); + +scparser.$add('la', function() { + + 'use strict'; + + // last seen/acknowledged notification sn + notify.markAllNotificationsAsSeen(true); + +}); + +scparser.$add('usc', function() { + // user state cleared - mark local DB as invalid + fm_forcerefresh(); +}); + +// Payment received +scparser.$add('psts', function(a) { + + if (!pfid && u_type) { + M.checkStorageQuota(2000); + } + pro.processPaymentReceived(a); + + if (ulmanager.ulOverStorageQuota) { + eventlog(99701); + onIdle(function() { + ulmanager.ulResumeOverStorageQuotaState(); + }); + } + + onIdle(function() { + dlmanager._onOverQuotaAttemptRetry(); + }); + + onIdle(function() { + watchdog.notify('psts', (a.r === 's' && a.p) | 0); + }); + + // If user is on FM, update account status with this packet. + if (fminitialized) { + onIdle(function() { + if (page.indexOf('fm/account') === 0) { + accountUI(); + } + else { + M.accountData(); + } + }); + + M.storageQuotaCache = null; + } +}); + +// Payment reminder +scparser.$add('pses', function(a) { + 'use strict'; + notify.notifyFromActionPacket(a); +}); + +// Payment card status +scparser.$add('cce', () => { + 'use strict'; + // assuming that this AP will come only to PRO/Business accounts. + if (fminitialized) { + delay( + 'cceAP', + () => { + M.req({ a: 'uq', pro: 1 }).then((res) => { + if (typeof res === 'object') { + M.showPaymentCardBanner(res.cce); + if (M.account && res.cce) { + M.account.cce = res.cce; + } + } + }); + }, + 2000); + } +}); + +scparser.mcpc = scparser.mcc = function (a) { + // MEGAchat + if (megaChatIsReady) { + megaChat._queuedMccPackets.push(a); + } + else if (Array.isArray(loadfm.chatmcf)) { + // Merge if exists. + // This can happen in case some data came from fmdb, but there were still queued ap's (mcpc for + // added/removed participants). If this doesn't merge the chatmcf entry, this would end up removing the + // 'ck', since mcpc doesn't contain 'ck' properties and the chat would render useless (no key). + var i = loadfm.chatmcf.length; + while (i--) { + var entry = loadfm.chatmcf[i]; + if (entry.id === a.id) { + delete a.a; + Object.assign(entry, a); + a = entry; + break; + } + } + if (i < 0) { + loadfm.chatmcf.push(a); + } + } + else { + console.error('unable to parse mcc packet'); + const { master, slaves } = mBroadcaster.crossTab; + eventlog( + 99779, + JSON.stringify([ + 1, + buildVersion && buildVersion.website || 'dev', + sessionStorage.updateRequiredBy | 0, + loadfm.chatmcf === null ? 'null' : typeof loadfm.chatmcf, + u_type | 0, + (!!master) | 0, + Object(slaves).length | 0 + ]) + ); + } + + if (fmdb) { + delete a.a; + fmdb.add('mcf', {id: a.id, d: a}); + } +}; + +// MEGAchat archive/unarchive +scparser.mcfc = scparser.mcfpc = function(a) { + 'use strict'; + + if (window.megaChatIsReady) { + var room = megaChat.getChatById(a.id); + if (room) { + return room.updateFlags(a.f, true); + } + } + + if (!loadfm.chatmcfc) { + loadfm.chatmcfc = {}; + } + loadfm.chatmcfc[a.id] = a.f; +}; + + +scparser.$add('_sn', function(a) { + // sn update? + if (d) { + console.log("New SN: " + a.sn); + console.assert(a.sn === window.currsn); + } + delay('sc.set-sn', () => { + if (window.fmdb) { + const {fmdb} = window; + if (d) { + console.assert(fmdb.db || fmdb.crashed, 'Invalid FMDB State..'); + } + + if (fmdb.db) { + setsn(currsn); + } + } + }, 2789); + + // rewrite accumulated RSA keys to AES to save CPU & bandwidth & space + crypto_node_rsa2aes(); + + // rewrite accumulated RSA keys to AES to save CPU & bandwidth & space + crypto_share_rsa2aes(); + + // reset state + scinshare = Object.create(null); + + if (megaChatIsReady) { + megaChat.onSnActionPacketReceived(); + } +}); + +scparser.$add('_fm', function() { + // completed initial processing, enable UI + crypto_fixmissingkeys(missingkeys); + delay('reqmissingkeys', crypto_reqmissingkeys, 4e3); + loadfm_done(); +}); + +// sub-user status change in business account +scparser.$add('ssc', process_businessAccountSubUsers_SC); + +// business account change which requires reload (such as payment against expired account) +scparser.$add('ub', function() { + "use strict"; + fm_fullreload(null, 'ub-business'); +}); + +// Pro Flexi account change which requires reload (such as payment against expired account) +scparser.$add('upf', () => { + "use strict"; + fm_fullreload(null, 'upf-proflexi'); +}); + +// Sets handlers +scparser.$add('asp', (data) => { + 'use strict'; + mega.sets.parseAsp(data); +}); +scparser.$add('asr',(data) => { + 'use strict'; + mega.sets.parseAsr(data); +}); +scparser.$add('aep', (data) => { + 'use strict'; + mega.sets.parseAep(data); +}); +scparser.$add('aer', (data) => { + 'use strict'; + mega.sets.parseAer(data); +}); + +scparser.$notify = function(a) { + // only show a notification if we did not trigger the action ourselves + if (!pfid && u_attr && a.ou !== u_attr.u) { + notify.notifyFromActionPacket(a); + } +}; + +scparser.$call = function(a, scnodes) { + + try { + if (scparser.$common[a.a]) { + // no matter who triggered it + scparser.$common[a.a](a); + } + else if (scparser[a.i]) { + // triggered locally + if (scparser[a.i][a.a]) { + scparser[a.i][a.a](a); + } + } + else if (scparser[a.a]) { + // triggered remotely or cached. + scparser[a.a](a, scnodes); + } + else if (d) { + console.debug('Ignoring unsupported SC command ' + a.a, a); + } + } + catch (ex) { + console.error('scparser', ex); + + onIdle(function() { + throw ex; + }); + } +}; + + +scparser.$finalize = function() { + // scq ran empty - nothing to do for now + if (d) { + console.log(sccount + " SC command(s) processed."); + } + + // perform post-execution UI work + if (fminitialized) { + var promise = MegaPromise.resolve(); + + if (newnodes.length) { + promise = M.updFileManagerUI(); + } + + promise.always(function() { + + if (loadavatars.length) { + M.avatars(loadavatars); + loadavatars = []; + } + + delay('thumbnails', fm_thumbnails, 3200); + + if ($.dialog === 'properties') { + delay($.dialog, propertiesDialog.bind(this, 3)); + } + + if (scsharesuiupd) { + onIdle(function() { + M.buildtree({h: 'shares'}, M.buildtree.FORCE_REBUILD); + M.buildtree({h: 'out-shares'}, M.buildtree.FORCE_REBUILD); + + if (M.currentrootid === 'shares' || M.currentrootid === 'out-shares') { + M.openFolder(M.currentdirid, true); + } + else if (megaChatIsReady && M.chat && megaChat.routingSection === "contacts") { + let id = String(M.currentdirid).substr(14); + mBroadcaster.sendMessage("fmViewUpdate:" + id); + } + + if ($.dialog === 'share') { + // Re-render the content of access list in share dialog + renderShareDialogAccessList(); + } + }); + + scsharesuiupd = false; + } + + if (scpubliclinksuiupd) { + onIdle(function() { + M.buildtree({h: 'public-links'}, M.buildtree.FORCE_REBUILD); + + if (M.currentrootid === 'public-links') { + M.openFolder(M.currentdirid, true); + } + }); + + scpubliclinksuiupd = false; + } + + if (!pfid && $.len(sckeyrequest)) { + const keyof = (h) => crypto_keyok(M.d[h]); + if (d) { + console.debug('Supplying requested keys...', sckeyrequest); + } + // eslint-disable-next-line guard-for-in + for (const h in sckeyrequest) { + const n = sckeyrequest[h].filter(keyof); + const cr = crypto_makecr(n, [h], true); + + if (cr[2].length) { + api_req({a: 'k', cr, i: requesti}); + } + } + + sckeyrequest = Object.create(null); + } + + if ("chat/contacts/" + scContactsSharesUIUpdate === M.currentdirid) { + onIdle(function(handle) { + mBroadcaster.sendMessage('fmViewUpdate:' + handle); + }.bind(this, scContactsSharesUIUpdate)); + + scContactsSharesUIUpdate = false; + } + + sccount = 0; + scinflight = false; + queueMicrotask(resumesc); + }); + } + else { + sccount = 0; + scinflight = false; + } +}; + +// if no execsc() thread is running, check if one should be, and start it if so. +function resumesc() { + "use strict"; + + if (!scinflight) { + if (scq[scqtail] && scq[scqtail][0] && !scwaitnodes[scqtail] && !nodesinflight[scqtail]) { + scinflight = true; + execsc(); + } + } +} + +// execute actionpackets from scq[scqtail] onwards +function execsc() { + "use strict"; + + var tick = Date.now(); + var tickcount = 0; + + do { + if (!scq[scqtail] || !scq[scqtail][0] || scwaitnodes[scqtail] + || (scq[scqtail][0].a === 't' && nodesinflight[scqtail])) { + + return scparser.$finalize(); + } + + sccount++; + + var a = scq[scqtail][0]; + var scnodes = scq[scqtail][1]; + delete scq[scqtail++]; + delete a.scqi; + + var idtag = a.i; + if (a.i !== requesti && M.scAckQueue[a.i] === requesti) { + // An API request triggered locally wanting to get notified when the associated packet is processed. + delete M.scAckQueue[a.i]; + a.i = requesti; + } + + if (d) { + console.info('Received SC command "' + a.a + '"' + (a.i === requesti ? ' (triggered locally)' : ''), a); + } + + // process action-packet + scparser.$call(a, scnodes); + + // If there is any listener waiting for acknowledge from API, dispatch it. + var cid = M.scAckQueue[a.i] ? a.i : a.a + '.' + a.i; + + if (typeof M.scAckQueue[cid] === 'function') { + if (d) { + console.debug('execsc: dispatching ' + a.i); + } + onIdle(M.scAckQueue[cid].bind(null, a, scnodes)); + delete M.scAckQueue[cid]; + } + + if (a.a === 's' || a.a === 's2') { + mBroadcaster.sendMessage('share-packet.' + idtag, a); + } + + tickcount++; + } while (Date.now()-tick < 200); + + if (d) console.log("Processed " + tickcount + " SC commands in the past 200 ms"); + onIdle(execsc); +} + +// a node was updated significantly: write to DB and redraw +function fm_updated(n) { + "use strict"; + + M.nodeUpdated(n); + + if (fminitialized) { + removeUInode(n.h); + newnodes.push(n); + if (M.megaRender) { + M.megaRender.revokeDOMNode(n.h, true); + } + delay('ui:fm.updated', () => M.updFileManagerUI()); + } +} + +function initworkerpool() { + "use strict"; + + // Allow all 0 keys to be used (for those users that used a bad client that want to retrieve their files) + const allowNullKeys = localStorage.getItem('allownullkeys') ? 1 : undefined; + if (allowNullKeys) { + self.allowNullKeys = allowNullKeys; + } + const {secureKeyMgr} = self; + if (secureKeyMgr && d) { + console.info('Secure Keys Management.', mega.keyMgr.generation); + } + + const workerStateData = { + d, + u_k, + u_privk, + u_handle, + secureKeyMgr, + allowNullKeys, + usk: window.u_attr && u_attr['*~usk'] + }; + + // re/initialize workers (with state for a user account fetch, if applies) + decWorkerPool.init(worker_procmsg, 8, !pfid && workerStateData); + + if (d) { + console.debug('initworkerpool', decWorkerPool); + } +} + +// queue a DB invalidation-plus-reload request to the FMDB subsystem +// if it isn't up, reload directly +// the server-side treecache is wiped (otherwise, we could run into +// an endless loop) +function fm_forcerefresh(light) { + "use strict"; + + if (light !== true) { + localStorage.force = 1; + } + + if (fmdb) { + // stop further SC processing + window.execsc = nop; + + // bring DB to a defined state + fmdb.invalidate().finally(() => location.reload()); + } + else { + location.reload(); + } +} + +// triggers a full reload including wiping the remote treecache +// (e.g. because the treecache is damaged or too old) +function fm_fullreload(q, logMsg) { + "use strict"; + + if (q) { + api_cancel(q); + } + + // FIXME: properly encapsulate ALL client state in an object + // that supports destruction. + // (at the moment, if we wipe the DB and then call loadfm(), + // there will be way too much attribute, key and chat stuff already + // churning away - we simply cannot just delete their databases + // without restarting them. + // until then - it's the sledgehammer method; can't be anything + // more surgical :( + if (logMsg === 'ETOOMANY' && mega.loadReport.mode < 2 && !sessionStorage.lightTreeReload) { + sessionStorage.lightTreeReload = 1; + } + else { + localStorage.force = 1; + delete sessionStorage.lightTreeReload; + } + + // done reload callback + var step = 1; + var done = function() { + if (!--step) { + location.reload(); + } + }; + + // log event if message provided + if (logMsg) { + api_req({a: 'log', e: 99624, m: logMsg}, {callback: done}); + step++; + } + + if (fmdb) { + // stop further SC processing + window.execsc = nop; + + // bring DB to a defined state + fmdb.invalidate().finally(done); + } + else { + done(); + } +} + +// this receives the ok elements one by one as per the filter rule +// to facilitate the decryption of outbound shares, the API now sends ok before f +function tree_ok0(ok) { + "use strict"; + + if (self.secureKeyMgr) { + if (d > -2) { + console.warn('Secure environment, moving on...', ok); + } + return; + } + + if (fmdb) { + fmdb.add('ok', { h : ok.h, d : ok }); + } + + // bind outbound share root to specific worker, post ok element to that worker + // FIXME: check if nested outbound shares are returned with all shareufskeys! + // if that is not the case, we need to bind all ok handles to the same worker + if (decWorkerPool.ok) { + decWorkerPool.postNode(ok); + } + else if (crypto_handleauthcheck(ok.h, ok.ha)) { + if (d) { + console.log(`Successfully decrypted sharekeys for ${ok.h}`); + } + const key = decrypt_key(u_k_aes, base64_to_a32(ok.k)); + crypto_setsharekey2(ok.h, key); + } + else { + console.error(`handleauthcheck() failed for ${ok.h}`); + } +} + +/** + * Emplace node into M.d and M.c + * + * @param {Object} node The node to add + * @param {Boolean} [noc] Whether adding to M.c should be skipped, only used by fetchchildren! + */ +function emplacenode(node, noc) { + "use strict"; + + if (node.p) { + // we have to add M.c[sharinguserhandle] records explicitly as + // node.p has ceased to be the sharing user handle + if (node.su) { + if (!M.c[node.su]) { + M.c[node.su] = Object.create(null); + } + M.c[node.su][node.h] = node.t + 1; + } + if (!noc) { + if (!M.c[node.p]) { + M.c[node.p] = Object.create(null); + } + M.c[node.p][node.h] = node.t + 1; + } + + if (node.hash) { + if (!M.h[node.hash]) { + M.h[node.hash] = new Set(); + } + M.h[node.hash].add(node.h); + } + } + else if (node.t > 1 && node.t < 5) { + M[['RootID', 'InboxID', 'RubbishID'][node.t - 2]] = node.h; + } + else { + if (d) { + console.error("Received parent-less node of type " + node.t + ": " + node.h); + } + + srvlog2('parent-less', node.t, node.h); + } + + if (!node.h || node.h.length !== 8) { + if (d && !node.h) { + console.error('Invalid node placement.', node); + } + M.d[node.h] = node; + } + else { + M.d[node.h] = Object.setPrototypeOf(node, MegaNode.prototype); + } +} + +// this receives the node objects one by one as per the filter rule +function tree_node(node) { + "use strict"; + + if (pfkey && !M.RootID) { + // set up the workers for folder link decryption + if (decWorkerPool.ok) { + decWorkerPool.signal({ + d, + pfkey, + n_h: node.h, + secureKeyMgr: self.secureKeyMgr, + allowNullKeys: self.allowNullKeys + }); + } + else { + crypto_setsharekey2(node.h, base64_to_a32(pfkey)); + } + + M.RootID = node.h; + } + + crypto_rsacheck(node); + + // RSA share key? need to rewrite, too. + if (node.sk && node.sk.length > 43) { + rsasharekeys[node.h] = true; + } + + // children inherit their parents' worker bindings; unbound inshare roots receive a new binding + // unbound nodes go to a random worker (round-robin assignment) + if (decWorkerPool.ok) { + decWorkerPool.postNode(node); + } + else { + crypto_decryptnode(node); + worker_procmsg({data: node}); + } +} + +// this receives the remainder of the JSON after the filter was applied +function tree_residue(fm, ctx) { + "use strict"; + + // store the residual f response for perusal once all workers signal that they're done + residualfm = fm[0] || false; + + // request an "I am done" confirmation ({}) from all workers + if (decWorkerPool.ok) { + dumpsremaining = decWorkerPool.length; + decWorkerPool.signal({}); + } + else { + dumpsremaining = 1; + worker_procmsg({ data: { done: 1 } }); + } + + // (mandatory steps at the conclusion of a successful split response) + api_ready(this.q); + api_proc(this.q); +} + +// process worker responses (decrypted nodes, processed actionpackets, state dumps...) +function worker_procmsg(ev) { + "use strict"; + + var h; + + if (ev.data.scqi >= 0) { + // enqueue processed actionpacket + if (scq[ev.data.scqi]) scq[ev.data.scqi][0] = ev.data; + else scq[ev.data.scqi] = [ev.data, []]; + + // resume processing, if appropriate and needed + resumesc(); + } + else if (ev.data.h) { + // enqueue or emplace processed node + if (ev.data.t < 2 && !crypto_keyok(ev.data)) { + // report as missing + console.assert(typeof ev.data.k === 'string', `Key-less? node ${ev.data.h}`, ev.data); + tryCatch(() => crypto_reportmissingkey(ev.data))(); + } + + if (ev.data.scni >= 0) { + // enqueue processed node + if (scq[ev.data.scni]) { + scq[ev.data.scni][1][ev.data.arrivalOrder] = ev.data; + } + else { + var initArray = []; + initArray[ev.data.arrivalOrder] = ev.data; + scq[ev.data.scni] = [null, initArray]; + } + + startNodesFetching(ev.data.scni); + } + else { + // maintain special incoming shares index + if (ev.data.su) { + M.c.shares[ev.data.h] = { su : ev.data.su, r : ev.data.r, t: ev.data.h }; + + if (u_sharekeys[ev.data.h]) { + M.c.shares[ev.data.h].sk = u_sharekeys[ev.data.h][0]; + } + } + + if (ufsc.cache && ev.data.p) { + ufsc.feednode(ev.data); + } + + const ok = fmdb && !fmdb.crashed; + const emplace = mega.nobp || !ok || fminitialized || fmdb && fmdb.memoize || M.isInRoot(ev.data, true); + + if (ok) { + fmdb.add('f', { + h : ev.data.h, + p : ev.data.p, + s : ev.data.s >= 0 ? ev.data.s : -ev.data.t, + t : ev.data.t ? 1262304e3 - ev.data.ts : ev.data.ts, + c : ev.data.hash || '', + fa: ev.data.fa || '', + d : ev.data + }); + } + + if (emplace) { + emplacenode(ev.data); + } + } + } + else if (ev.data[0] === 'console') { + if (d) { + var args = ev.data[1]; + args.unshift('[nodedec worker]'); + console.log.apply(console, args); + } + } + else if (ev.data[0] === 'srvlog2') { + srvlog2.apply(null, ev.data[1]); + } + else if (ev.data.done) { + if (d) { + console.log(`Worker ${dumpsremaining} done, ${ev.data.jobs} jobs completed.`); + } + + if (ev.data.sharekeys) { + for (h in ev.data.sharekeys) { + crypto_setsharekey(h, ev.data.sharekeys[h]); + } + } + + if (!--dumpsremaining) { + // store incoming shares + for (h in M.c.shares) { + if (u_sharekeys[h]) M.c.shares[h].sk = a32_to_base64(u_sharekeys[h][0]); + + if (fmdb) { + fmdb.add('s', { o_t : M.c.shares[h].su + '*' + h, + d : M.c.shares[h] }); + } + } + + decWorkerPool.cleanup(); + loadfm.fromapi = true; + dbfetchfm(); + } + } + else { + console.error("Unidentified nodedec worker response:", ev.data); + } +} + +function loadfm(force) { + "use strict"; + assert(!is_chatlink); + + if (force) { + localStorage.force = true; + loadfm.loaded = false; + } + if (loadfm.loaded) { + Soon(loadfm_done.bind(this, -0x800e0fff)); + } + else { + if (is_fm()) { + loadingDialog.hide(); + loadingInitDialog.show(); + loadingInitDialog.step1(); + } + if (!loadfm.loading) { + if (!decWorkerPool.ok) { + initworkerpool(); + } + M.reset(); + + fminitialized = false; + loadfm.loading = true; + + // is this a folder link? or do we have no valid cache for this session? + if (pfid) { + fmdb = false; + fetchfm(false); + } + else if (!u_k_aes) { + console.error('No master key found... please contact support@mega.nz'); + } + else { + const f_table_schema = '&h, p, s, c, t, fa'; + fmdb = FMDB(u_handle, { + // channel 0: transactional by _sn update + f : f_table_schema, // nodes - handle, parent, size (negative size: type), checksum + s : '&o_t', // shares - origin/target; both incoming & outgoing + ok : '&h', // ownerkeys for outgoing shares - handle + mk : '&h', // missing node keys - handle + u : '&u', // users - handle + ph : '&h', // exported links - handle + tree : '&h', // tree folders - handle + suba : '&s_ac', // sub_accounts of master business account + opc : '&p', // outgoing pending contact - id + ipc : '&p', // incoming pending contact - id + ps : '&h_p', // pending share - handle/id + mcf : '&id', // chats - id + ua : '&k', // user attributes - key (maintained by IndexedBKVStorage) + _sn : '&i', // sn - fixed index 1 + puf : '&ph', // public upload folder - handle + pup : '&p', // public upload page - handle + + // channel 1: non-transactional (maintained by IndexedDBKVStorage) + }, {}); + + fmdb.init(fetchfm, localStorage.force); + } + } + } +} + +async function fetchfm(sn) { + "use strict"; + + // we always intially fetch historical actionpactions + // before showing the filemanager + initialscfetch = true; + + // Initialize ufs size cache + ufsc = new UFSSizeCache(); + + // Get the media codecs list ready + mclp = MediaInfoLib.getMediaCodecsList(); + + // worker pending state dump counter + dumpsremaining = 0; + + // residual fm (minus ok/f elements) post-filtration + residualfm = false; + + // erase existing RootID + // reason: tree_node must set up the workers as soon as the first node of a folder + // link arrives, and this is how it knows that it is the first node. + M.RootID = false; + + if (!is_mobile) { + // activate/prefetch attribute cache at this early stage + await attribCache.load(); + } + + if (sn) { + currsn = sn; + return dbfetchfm(); + } + + // no cache requested or available - get from API. + // load tree for active GLOBAL context - either we load a folderlink or the + // user tree, they never coexist, there is no encapsulation/separation of state. + const req = {a: 'f', c: 1, r: 1}; + + // we disallow treecache usage if this is a forced reload + if (!localStorage.force) { + req.ca = 1; + } + else if (mBroadcaster.crossTab.master) { + delete localStorage.force; + } + + api_req(req, { + progress: (pcn) => { + window.loadingInitDialog.step2(parseInt(pcn)); + + if (pcn > 99 && !mega.loadReport.ttlb) { + // Load performance report -- time to last byte + mega.loadReport.ttlb = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + mega.loadReport.ttlb += mega.loadReport.ttfb; + mega.loadReport.ttfm = mega.loadReport.stepTimeStamp; + } + } + }, 4); + + /** @property mega.loadReport.mode */ + Object.defineProperty(mega.loadReport, 'mode', {value: 2, writable: false}); + + if (!folderlink) { + // dbToNet holds the time wasted trying to read local DB, and having found we have to query the server. + mega.loadReport.dbToNet = Date.now() - mega.loadReport.startTime; + mega.loadReport.stepTimeStamp = Date.now(); + } +} + +function dbfetchfm() { + "use strict"; + var tables = { + tree: function(r) { + for (var i = r.length; i--;) { + ufsc.addTreeNode(r[i], true); + } + if (d) { + console.debug('processed %d tree nodes.', r.length); + } + }, + opc: processOPC, + ipc: processIPC, + ps: function(r) { + if (r.length) { + processPS(r, true); + // processPS may invokes nodeShare(), that uses acquire. + return dbfetch.acquire(r.map(n => n.h)); + } + }, + puf: function _(r) { + if (r.length) { + mega.megadrop.pufProcessDb(r); + return dbfetch.geta(r.map(n => n.h)); + } + }, + suba: process_suba, + pup: mega.megadrop.pupProcessDb, + mcf: 1 + }; + var tableProc = function(t) { + return function(r) { + if (tables[t] === 1) { + if (r.length > 0) { + // only set chatmcf is there is anything returned + // if not, this would force the chat to do a 'mcf' call + loadfm.chatmcf = r; + } + else { + loadfm.chatmcf = -1; + } + } + else { + return tables[t](r, true); + } + }; + }; + var checkSettled = function(r) { + for (var i = r.length; i--;) { + if (r[i].status !== 'fulfilled') { + throw new Error(r[i].reason); + } + } + }; + + loadingInitDialog.step2(); + + const isFromAPI = !!loadfm.fromapi; + const loadReport = isFromAPI ? nop : (key) => { + const now = Date.now(); + mega.loadReport[key] = now - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = now; + }; + const finish = () => { + + if (isFromAPI) { + window.loadingInitDialog.step3(1, 20); + setTimeout(loadfm_callback, 420, residualfm); + residualfm = false; + } + else { + getsc(true); + } + }; + + if (!window.fmdb) { + console.assert(isFromAPI); + return onIdle(finish); + } + + if (isFromAPI) { + // Tree nodes are already in memory. + delete tables.tree; + } + + if (d) { + console.time('dbfetchfm'); + } + + Promise.allSettled([fmdb.get('ok'), dbfetch.init()]) + .then((r) => { + checkSettled(r); + process_ok(r[0].value, true); + + loadReport('recvNodes'); + return Promise.allSettled([fmdb.get('mk'), fmdb.get('u'), fmdb.get('s')]); + }) + .then((r) => { + var promises = []; + + checkSettled(r); + crypto_missingkeysfromdb(r[0].value); + mega.loadReport.pn1 = Date.now() - mega.loadReport.stepTimeStamp; + + process_u(r[1].value, true); + loadReport('pn2'); + // @todo deprecate those pn1-pn5 ... + loadReport('pn3'); + + r = r[2].value; + for (var i = r.length; i--;) { + if (r[i].su) { + // this is an inbound share + M.c.shares[r[i].t] = r[i]; + + if (r[i].sk) { + crypto_setsharekey(r[i].t, base64_to_a32(r[i].sk), true); + } + } + else { + // this is an outbound share + promises.push(M.nodeShare(r[i].h, r[i], true)); + } + } + loadReport('pn4'); + + if (promises.length) { + // handle all outbound shares through a single promise. + // if an ENOENT happens, this won't halt the process... + promises = [Promise.allSettled(promises)]; + } + + for (var j = 0, it = Object.keys(tables); j < it.length; ++j) { + var t = it[j]; + promises.push(fmdb.get(t).then(tableProc(t)).catch(dump)); + } + loadReport('pn5'); + + return Promise.allSettled(promises); + }) + .then((r) => { + checkSettled(r); + + if (d) { + console.info('All settled, %d operations completed to load from DB.', r.length); + console.timeEnd('dbfetchfm'); + } + + if (!isFromAPI) { + mega.loadReport.mode = 1; + mega.loadReport.procNodeCount = Object.keys(M.d || {}).length; + loadReport('procNodes'); + } + + if (!mBroadcaster.crossTab.master && window.fmdb) { + // on a secondary tab, prevent writing to DB once we have read its contents + fmdb.crashed = 666; + fmdb.pending = [[]]; + } + console.assert(window.fmdb, 'check what is going on here...'); + }) + .then(finish) + .catch((ex) => { + console.error(ex); + siteLoadError(ex, 'dbfetchfm'); + }); +} + +// returns tree type h is in +// FIXME: make result numeric +function treetype(h) { + "use strict"; + + for (;;) { + if (!M.d[h]) { + return h; + } + + if (h === M.InboxID) { + return 'inbox'; + } + + // root node reached? + if (M.d[h].t > 1) { + return 'cloud'; + } + + // incoming share reached? (does not need to be the outermost one) + if (M.d[h].su) { + return 'shares'; + } + + if ('contacts shares messages opc ipc '.indexOf(M.d[h].p + ' ') >= 0) { + return M.d[h].p; + } + + h = M.d[h].p; + } +} + +// determine whether a node is shared +async function shared(h) { + "use strict"; + + if (!M.d[h]) { + await dbfetch.acquire(h); + } + + let rc = false; + while (h && M.d[h]) { + if (M.d[h].shares) { + rc = h; + break; + } + h = M.d[h].p; + } + return rc; +} + +// returns sharing user (or false if not in an inshare) +function sharer(h) { + "use strict"; + + while (h && M.d[h]) { + if (M.d[h].su) { + return M.d[h].su; + } + + h = M.d[h].p; + } + + return false; +} + +// FIXME: remove alt +function ddtype(ids, toid, alt) { + "use strict"; + + if (folderlink) { + return false; + } + + var r = false, totype = treetype(toid); + + for (var i = ids.length; i--; ) { + var fromid = ids[i]; + + if (fromid === toid || !M.d[fromid]) return false; + + var fromtype = treetype(fromid); + + if (fromtype === 'inbox' || treetype(toid) === 'inbox') { + + return false; + } + + if (totype == 'cloud') { + if (fromtype == 'cloud') { + // within and between own trees, always allow move ... + if (M.isCircular(fromid, toid)) { + // ... except of a folder into itself or a subfolder + return false; + } + + r = 'move'; + } + else if (fromtype == 'shares') { + r = toid === M.RubbishID ? 'copydel' : 'copy'; + } + } + else if (totype == 'contacts') { + if (toid == 'contacts') { + // never allow move to own contacts + return false; + } + + // to a contact, always allow a copy (inbox drop) + r = 'copy'; + } + else if (totype === 'shares' && M.getNodeRights(toid)) { + if (fromtype == 'shares') { + if (sharer(fromid) === sharer(toid)) { + if (M.isCircular(fromid, toid)) { + // prevent moving/copying of a folder into iself or a subfolder + return false; + } + + //r = (M.getNodeRights(fromid) > 1) ? 'move' : 'copy'; //commented out by khaled - fixing Bug #7697 + if (M.getNodeRights(fromid) > 1) { // added by khaled + r = 'move'; + } + else { + return false; // fixing Bug #7697, dont allow drag and drop if permission <2 + } + } + else { + r = 'copy'; + } + } + else if (fromtype == 'cloud') { + // from cloud to a folder with write permission, always copy + r = 'copy'; + } + } + else { + return false; + } + } + + // FIXME: do not simply return the operation allowed for the last processed fromid + return r; +} + +/** + * Share a node with other users. + * + * Recreate target/users list and call appropriate api_setshare function. + * @param {String} nodeId + * Selected node id + * @param {Array} targets + * List of JSON_Object containing user email or user handle and access permission, + * i.e. `{ u: , r: }`. + * @param {Boolean} dontShowShareDialog + * If set to `true`, don't show the share dialogue. + * @returns {doShare.$promise|MegaPromise} + */ +function doShare(nodeId, targets, dontShowShareDialog) { + 'use strict'; + + if (!nodeId || !targets || !targets.length) { + console.error('Invalid parameters for doShare()', nodeId, targets); + return MegaPromise.reject(EARGS); + } + + var masterPromise = new MegaPromise(); + var logger = MegaLogger.getLogger('doShare'); + + /** Settle function for API set share command. */ + var _shareDone = function(result, users) { + + // Loose comparison is important (incoming JSON). + if (result.r && result.r[0] == '0') { + for (var i in result.u) { + if (result.u.hasOwnProperty(i)) { + M.addUser(result.u[i]); + } + } + + for (var k in result.r) { + if (result.r.hasOwnProperty(k)) { + if ((result.r[k] === 0) && users && users[k] && users[k].u) { + var rights = users[k].r; + var user = users[k].u; + + if (user.indexOf('@') >= 0) { + user = M.getUserByEmail(user).u; + } + + // A pending share may not have a corresponding user and should not be added + // A pending share can also be identified by a user who is only a '0' contact + // level (passive) + if (M.u[user] && M.u[user].c) { + M.nodeShare(nodeId, { + h: nodeId, + r: rights, + u: user, + ts: unixtime() + }); + setLastInteractionWith(user, "0:" + unixtime()); + } + else { + var isPendingContact = false; + + if (users[k].m) { + for (var pid in M.opc) { + if (M.opc[pid].m === users[k].m) { + isPendingContact = true; + break; + } + } + } + + if (!isPendingContact) { + logger.warn('Invalid user (%s[%s]): c=%s', + user, + users[k].u, + M.u[user] ? String(M.u[user].c) : 'unknown!', + M.u[user], users[k]); + } + else { + logger.debug('Finished share action with pending contact.', JSON.stringify(users[k])); + } + } + } + } + } + if (dontShowShareDialog !== true) { + $('.mega-dialog.share-dialog').removeClass('hidden'); + } + loadingDialog.hide(); + // Render the outgoing shares page after set the new share node + if (M.currentrootid === 'out-shares') { + M.openFolder(M.currentdirid, true); + } + + masterPromise.resolve(); + } + else { + // $('.mega-dialog.share-dialog').removeClass('hidden'); + if (d) { + console.error('doShare failed.', result); + } + loadingDialog.hide(); + msgDialog('warninga', l[135], l[47], tryCatch(() => JSON.stringify(result))() || result); + masterPromise.reject(result); + } + }; + + // Get complete children directory structure for root node with id === nodeId + /** (this is now done before the share dialog opens) + var childNodesId; + + M.getNodes(nodeId, true) + .then((r) => { + childNodesId = r; + targets.forEach(targetsForeach); + }) + .catch(dump); + */ + + // Create new lists of users, active (with user handle) and non existing (pending) + var targetsForeach = function(value) { + + var email = value.u; + var accessRights = value.r; + + // Search by email only don't use handle cause user can re-register account + crypt.getPubKeyAttribute(email, 'RSA', { + targetEmail: email, + shareAccessRightsLevel: accessRights + }) + .always(function (pubKey, result) { + var sharePromise; + + // parse [api-result, user-data-ctx] + var ctx = result[1]; + result = result[0]; + + if (result.pubk) { + var userHandle = result.u; + + // 'u' is returned user handle, 'r' is access right + var usersWithHandle = []; + + // M.u[].c might be 0 for invisible/removed, or undefined for pending contact + if (M.u[userHandle] && M.u[userHandle].c) { + usersWithHandle.push({ 'r': ctx.shareAccessRightsLevel, 'u': userHandle }); + } + else { + usersWithHandle.push({ + 'r': ctx.shareAccessRightsLevel, + 'u': userHandle, + // this was never correct.. + // 'k': result.pubk, + 'm': ctx.targetEmail + }); + } + + sharePromise = api_setshare(nodeId, usersWithHandle, childNodesId); + sharePromise.done(function _sharePromiseWithHandleDone(result) { + _shareDone(result, usersWithHandle); + }); + masterPromise.linkFailTo(sharePromise); + } + else { + // NOT ok, user doesn't have account yet + var usersWithoutHandle = []; + usersWithoutHandle.push({ 'r': ctx.shareAccessRightsLevel, 'u': ctx.targetEmail }); + sharePromise = api_setshare1({ + node: nodeId, + targets: usersWithoutHandle, + sharenodes: childNodesId + }); + sharePromise.done(function _sharePromiseWithoutHandleDone(result) { + _shareDone(result, ctx.targetEmail); + }); + masterPromise.linkFailTo(sharePromise); + } + }); + }; + + // retrieve snapshot of the share children at the time the dialog was opened + // (any newer ones already have their shareufskey set) + const childNodesId = mega.keyMgr.getShareSnapshot(nodeId); + if (childNodesId) { + targets.forEach(targetsForeach); + } + else { + console.error('Check this out..', nodeId); + masterPromise.reject(EINTERNAL); + } + + return masterPromise; +} + +// moving a foreign node (one that is not owned by u_handle) from an outshare +// to a location not covered by any u_sharekey requires taking ownership +// and re-encrypting its key with u_k. +// moving a tree to a (possibly nested) outshare requires a full set of keys +// to be provided. FIXME: record which keys are known to the API and exclude +// those that are to reduce API traffic. +function processmove(apireq) { + if (d) console.log('processmove', apireq); + + var root = {}; + var tsharepath = M.getShareNodesSync(apireq.t); + var nsharepath = M.getShareNodesSync(apireq.n, root); + var movingnodes = false; + + // is the node to be moved in an outshare (or possibly multiple nested ones)? + if (nsharepath.length && root.handle) { + // yes, it is - are we moving to an outshare? + if (!tsharepath.length) { + // we are not - check for any foreign nodes being moved + movingnodes = M.getNodesSync(apireq.n, true); + + var foreignnodes = []; + + for (var i = movingnodes.length; i--; ) { + if (M.d[movingnodes[i]].u !== u_handle) { + foreignnodes.push(movingnodes[i]); + } + } + + if (foreignnodes.length) { + if (d) console.log('rekeying foreignnodes', foreignnodes.length); + + // update all foreign nodes' keys and take ownership + api_updfkey(movingnodes); + } + } + } + + // is the target location in any shares? add CR element. + if (tsharepath.length) { + if (!movingnodes) { + movingnodes = M.getNodesSync(apireq.n, true); + } + + apireq.cr = crypto_makecr(movingnodes, tsharepath, true); + } +} + +function process_f(f, cb, updateVersioning) { + "use strict"; + + if (f) { + for (var i = 0; i < f.length; i++) { + var n = f[i]; + if (updateVersioning) { + // this is a response from updating versioning, clear the previous versions first. + if (M.d[n.h]) { + M.delNode(n.h); + ufsc.delNode(n.h); + } + + n.fv = 1; + } + M.addNode(n); + ufsc.addNode(n); + } + } + + // TODO: This function is no longer asynchronous, remove the callback dependency (?) + if (typeof cb === 'function') { + cb(); + } +} + +/** + * Handle incoming pending contacts + * + * @param {array.} pending contacts + * + */ +function processIPC(ipc, ignoreDB) { + 'use strict'; + + for (let i = 0; i < ipc.length; ++i) { + + // Update ipc status + M.addIPC(ipc[i], ignoreDB); + + // Deletion of incomming pending contact request, user who sent request, canceled it + if (ipc[i].dts) { + M.delIPC(ipc[i].p); + delete M.ipc[ipc[i].p]; + + if (fminitialized) { + + // Update token.input plugin + removeFromMultiInputDDL('.share-multiple-input', {id: ipc[i].m, name: ipc[i].m}); + } + } + else if (fminitialized) { + // Don't prevent contact creation when there's already IPC available + // When user add contact who already sent IPC, server will automatically create full contact + var contactName = M.getNameByHandle(ipc[i].p); + + // Update token.input plugin + addToMultiInputDropDownList('.share-multiple-input', [{id: ipc[i].m, name: contactName}]); + } + } +} + +/** + * Handle outgoing pending contacts + * + * @param {array.} pending contacts + */ +function processOPC(opc, ignoreDB) { + 'use strict'; + + for (let i = 0; i < opc.length; ++i) { + M.addOPC(opc[i], ignoreDB); + + if (opc[i].dts) { + M.delOPC(opc[i].p); + + if (fminitialized) { + + // Update tokenInput plugin + removeFromMultiInputDDL('.share-multiple-input', {id: opc[i].m, name: opc[i].m}); + removeFromMultiInputDDL('.add-contact-multiple-input', {id: opc[i].m, name: opc[i].m}); + } + } + else { + // Search through M.opc to find duplicated e-mail with .dts + // If found remove deleted opc + // And update sent-request grid + for (var k in M.opc) { + if (M.opc[k].dts && (M.opc[k].m === opc[i].m)) { + delete M.opc[k]; + break; + } + } + + if (fminitialized) { + const contactName = M.getNameByHandle(opc[i].p); + + // Update tokenInput plugin + addToMultiInputDropDownList('.share-multiple-input', [{id: opc[i].m, name: contactName}]); + addToMultiInputDropDownList('.add-contact-multiple-input', [{id: opc[i].m, name: contactName}]); + } + } + } +} + +/** + * processPH + * + * Process export link (public handle) action packet and 'f' tree response. + * @param {Object} publicHandles The Public Handles action packet i.e. a: 'ph'. + */ +function processPH(publicHandles) { + + var nodeId; + var publicHandleId; + var timeNow = unixtime(); + var UiExportLink = fminitialized && !is_mobile && new mega.UI.Share.ExportLink(); + + for (var i = publicHandles.length; i--; ) { + var value = publicHandles[i]; + + nodeId = value.h; + if (!M.d[nodeId]) continue; + + if (fmdb) { + if (value.d) { + fmdb.del('ph', nodeId); + } + else { + fmdb.add('ph', { h : nodeId }); + } + } + + publicHandleId = value.ph; + + // remove exported link, down: 1 + if (value.d) { + M.delNodeShare(nodeId, 'EXP'); + + if (fminitialized && M.currentdirid === 'public-links') { + removeUInode(nodeId, value.p); + selectionManager.remove_from_selection(nodeId); + } + + if (UiExportLink) { + UiExportLink.removeExportLinkIcon(nodeId); + } + } + else { + var share = clone(value); + delete share.a; + delete share.i; + delete share.n; + share.u = 'EXP'; + share.r = 0; + + if (M.d[nodeId].ph !== publicHandleId) { + M.d[nodeId].ph = publicHandleId; + M.nodeUpdated(M.d[nodeId]); + } + + M.nodeShare(share.h, share); + + if (UiExportLink) { + UiExportLink.addExportLinkIcon(nodeId); + } + } + + if (UiExportLink && (value.down !== undefined)) { + UiExportLink.updateTakenDownItem(nodeId, value.down); + } + + // Update the public link icon for mobile + if (is_mobile) { + mobile.cloud.updateLinkStatus(nodeId); + } + + if (fminitialized && M.recentsRender) { + M.recentsRender.nodeChanged(nodeId); + } + } +} + +/** + * Handle pending shares + * + * @param {array.} pending shares + */ +function processPS(pendingShares, ignoreDB) { + 'use strict'; + for (let i = 0; i < pendingShares.length; ++i) { + const ps = pendingShares[i]; + + // From gettree + if (ps.h) { + M.addPS(ps, ignoreDB); + } + // Situation different from gettree, s2 from API response, doesn't have .h attr instead have .n + else { + const timeStamp = ps.ts; + const nodeHandle = ps.n; + const shareRights = ps.r; + const pendingContactId = ps.p; + const contactName = M.getNameByHandle(pendingContactId); + + // shareRights is undefined when user denies pending contact request + // .op is available when user accepts pending contact request and + // remaining pending share should be updated to full share + if ((typeof shareRights === 'undefined') || ps.op) { + M.delPS(pendingContactId, nodeHandle); + + if (ps.op) { + M.nodeShare(nodeHandle, { + h: ps.n, + o: ps.n, + p: ps.p, + u: ps.u, + r: ps.r, + ts: ps.ts + }); + } + + if (fminitialized && M.opc && M.opc[ps.p]) { + // Update tokenInput plugin + addToMultiInputDropDownList('.share-multiple-input', [{ + id: M.opc[pendingContactId].m, + name: contactName + }]); + addToMultiInputDropDownList('.add-contact-multiple-input', [{ + id: M.opc[pendingContactId].m, + name: contactName + }]); + } + } + else { + // Add the pending share to state + M.addPS({ + 'h':nodeHandle, + 'p':pendingContactId, + 'r':shareRights, + 'ts':timeStamp + }, ignoreDB); + + if (M.d[nodeHandle] && M.d[nodeHandle].t) { + // Update M.IS_SHARED flag + ufsc.addTreeNode(M.d[nodeHandle]); + } + } + + if (fminitialized) { + sharedUInode(nodeHandle); + } + } + } +} + +/** + * Handle upca response, upci, pending contact request updated (for whom it's incomming) + * + * @param {array.} ap (actionpackets) + * + */ +function processUPCI(ap) { + if (d) console.debug('processUPCI'); + for (var i in ap) { + if (ap[i].s) { + delete M.ipc[ap[i].p]; + M.delIPC(ap[i].p);// Remove from localStorage + mBroadcaster.sendMessage('fmViewUpdate:ipc'); + } + } +} + +/** + * processUPCO + * + * Handle upco response, upco, pending contact request updated (for whom it's outgoing). + * @param {Array} ap (actionpackets) . + */ +function processUPCO(ap) { + + if (d) console.debug('processUPCO'); + + var psid = '';// pending id + + // Loop through action packets + for (var i in ap) { + if (ap.hasOwnProperty(i)) { + + // Have status of pending share + if (ap[i].s) { + + psid = ap[i].p; + delete M.opc[psid]; + delete M.ipc[psid]; + M.delOPC(psid); + M.delIPC(psid); + + // Delete all matching pending shares + for (var k in M.ps) { + M.delPS(psid, k); + } + + // Update tokenInput plugin + removeFromMultiInputDDL('.share-multiple-input', {id: ap[i].m, name: ap[i].m}); + removeFromMultiInputDDL('.add-contact-multiple-input', {id: ap[i].m, name: ap[i].m}); + mBroadcaster.sendMessage('fmViewUpdate:opc'); + } + } + } +} + +/** + * Updates contact/user data in global variable M.u, local dB and taking care of items in share and add contacts + * dialogs dropdown + * + * @param {Object} users Information about users (properties defined in js/fm/megadata.js) + */ +function process_u(users, ignoreDB) { + "use strict"; + + // If nicknames private encrypted attribute is set. + if (nicknames.cache === false && Object(u_attr).hasOwnProperty('*!>alias')) { + nicknames.decryptAndCacheNicknames(u_attr['*!>alias']); + } + + for (var i = 0; i < users.length; i++) { + + var userEmail = users[i].m; + var userHandle = users[i].u; + var userStatus = users[i].c; + + // If this user had a nickname in the past, don't delete it if they are now added as a contact + // Or if the nickname is set in the initial 'ug' API request, then set it + users[i].nickname = userHandle in M.u && M.u[userHandle].nickname || nicknames.cache[userHandle] || ''; + + if (userStatus === 1) { + users[i].h = userHandle; + users[i].t = 1; + users[i].p = 'contacts'; + + M.addNode(users[i], ignoreDB); + + var contactName = M.getNameByHandle(userHandle); + + // Update token.input plugin + addToMultiInputDropDownList('.share-multiple-input', [{id: userEmail, name: contactName}]); + addToMultiInputDropDownList('.add-contact-multiple-input', [{id: userEmail, name: contactName}]); + } + else if (M.d[userHandle]) { + M.delNode(userHandle, ignoreDB); + + // Update token.input plugin + removeFromMultiInputDDL('.share-multiple-input', {id: userEmail, name: userEmail}); + removeFromMultiInputDDL('.add-contact-multiple-input', {id: userEmail, name: userEmail}); + } + + // Update user attributes M.u + M.addUser(users[i], ignoreDB); + + // If a contact, sync data objs M.d and M.u + if (userStatus === 1) { + M.d[userHandle] = M.u[userHandle]; + } + } +} + +/** + * a function to parse the JSON object received holding information about sub-accounts of a business account. + * This object will exist only in business accounts. + * @param {String[]} suba the object to parse, it must contain an array of sub-accounts ids (can be empty) + * @param {Boolean} ignoreDB if we want to skip DB updating + */ +function process_suba(suba, ignoreDB) { + "use strict"; + if (!suba || !suba.length) { + return; + } + + M.onFileManagerReady(() => { + + M.require('businessAcc_js', 'businessAccUI_js').done(() => { + + // the response is an array of users's handles (Masters). this means at least it will contain + // the current user handle. + // later-on we need to iterate on all of them. For now we dont know how to treat sub-masters yet + // --> we will target only current users's subs + const bAccount = new BusinessAccount(); + // if (!suba || !suba[u_handle]) { + // return; + // } + // suba = suba[u_handle]; + if (suba.length) { + for (var k = 0; k < suba.length; k++) { + bAccount.parseSUBA(suba[k], ignoreDB); + } + } + // else { + // bAccount.parseSUBA(null, true); // dummy call to flag that this is a master B-account + // } + }); + }); +} + +/** + * A function to precess the action packets received related to business account sub-users + * @param {Object} packet + */ +function process_businessAccountSubUsers_SC(packet) { + "use strict"; + // we dont process these action packets on mobile + if (is_mobile) { + return; + } + if (!packet) { // no packet + return; + } + if (!M.suba) { // no sub-users in memory + return; + } + if (!packet.a) { // no packet type/operation + return; + } + if (!packet.u) { // no user handle + return; + } + + var subUser = M.suba[packet.u]; + if (!subUser) { // sub-user not found --> it's new one + subUser = Object.create(null); + subUser.u = packet.u; + } + + var valChanged = false; + + if ('s' in packet && packet.s !== subUser.s) { // new status + subUser.s = packet.s; + valChanged = true; + } + if (packet.e && packet.e !== subUser.e) { // new email + subUser.e = packet.e; + valChanged = true; + } + if (packet.firstname && packet.firstname !== subUser.firstname) { // new first-name + subUser.firstname = packet.firstname; + valChanged = true; + } + if (packet.lastname && packet.lastname !== subUser.lastname) { // new last-name + subUser.lastname = packet.lastname; + valChanged = true; + } + if (packet.position && packet.position !== subUser.position) { // new position + subUser.position = packet.position; + valChanged = true; + } + if (packet.idnum && packet.idnum !== subUser.idnum) { // new id number + subUser.idnum = packet.idnum; + valChanged = true; + } + if (packet.phonenum && packet.phonenum !== subUser.phonenum) { // new phone number + subUser.phonenum = packet.phonenum; + valChanged = true; + } + if (packet.location && packet.location !== subUser.location) { // new location + subUser.location = packet.location; + valChanged = true; + } + if (valChanged) { + M.require('businessAcc_js', 'businessAccUI_js').done( + function() { + var bAccount = new BusinessAccount(); + bAccount.parseSUBA(subUser, false, true); + } + ); + } +} + +function process_ok(ok, ignoreDB) { + "use strict"; + + for (var i = ok.length; i--; ) { + if (ok[i].ha === crypto_handleauth(ok[i].h)) + { + if (fmdb && !pfkey && !ignoreDB) { + fmdb.add('ok', { h : ok[i].h, d : ok[i] }); + } + crypto_setsharekey(ok[i].h, decrypt_key(u_k_aes, base64_to_a32(ok[i].k)), ignoreDB); + } + } +} + + +function processMCF(mcfResponse, ignoreDB) { + 'use strict'; + + if (mcfResponse === EEXPIRED || mcfResponse === EINTERNAL) { + return; + } + + // Process mcf response from API (i.e. gettree) or indexedDB + if (Array.isArray(mcfResponse)) { + for (var i = mcfResponse.length; i--;) { + var chatRoomInfo = mcfResponse[i]; + + if (fmdb && !pfkey && !ignoreDB) { + fmdb.add('mcf', {id: chatRoomInfo.id, d: chatRoomInfo}); + } + + if (typeof Chat !== 'undefined') { + Chat.mcf[chatRoomInfo.id] = chatRoomInfo; + } + } + } + else if (d) { + console.error('Unexpected mcf response.', mcfResponse); + } +} + +function folderreqerr(c, e) { + 'use strict'; + + var title = l[1043]; + var message = null; + + loadingInitDialog.hide(); + + loadfm.loaded = false; + loadfm.loading = false; + + if ($.dialog) { + return mBroadcaster.once('closedialog', SoonFc(90, () => folderreqerr(c, e))); + } + + if (typeof e === 'object' && e.err < 0) { + if (e.u === 7) { + message = l[23242]; + + if (e.l !== 2) { + message = l[23243]; + } + } + else { + e = e.err; + } + } + + // If desktop site show "Folder link unavailable" dialog + if (!is_mobile) { + if (parseInt(e) === EARGS) { + title = l[20198]; + message = l[20199]; + } + else if (!message) { + message = l[1044] + '
              • ' + l[1045] + '
              • ' + l[247] + '
              • ' + l[1046] + '
              • '; + } + + parsepage(pages['placeholder']); + msgDialog('warninga', title, message, false, function() { + + // If the user is logged-in, he'll be redirected to the cloud + loadSubPage('login'); + + // FIXME: no location.reload() should be needed.. + location.reload(); + }); + } + else { + // Show file/folder not found overlay + mobile.initDOM(); + mobile.notFoundOverlay.show(message || parseInt(e && e.err || e)); + } +} + +/** + * Initialize the chat subsystem. + * @param {*} [action] Specific action procedure to follow + * @returns {Promise} promise fulfilled on completion. + */ +function init_chat(action) { + 'use strict'; + return new Promise(function(resolve, reject) { + var __init_chat = function() { + var result = false; + + if ((is_chatlink || u_type || is_eplusplus) && !megaChatIsReady) { + if (d) { + console.info('Initializing the chat...'); + } + var _chat = new Chat(); + + // `megaChatIsDisabled` might be set if `new Karere()` failed (Ie, in older browsers) + if (!window.megaChatIsDisabled) { + window.megaChat = _chat; + megaChat.init().then(resolve).catch(reject); + resolve = null; + } + } + + if (!loadfm.loading) { + window.loadingInitDialog.hide(); + } + + if (resolve) { + resolve(result); + } + }; + + if (window.megaChatIsReady) { + $.tresizer(); + return __init_chat(); + } + var mclp = MediaInfoLib.getMediaCodecsList(); + + if (action === 0x104DF11E5) { + M.require('chat') + .always(function() { + mclp.always(__init_chat); + }); + } + else if (is_chatlink) { + mclp.always(__init_chat); + } + else if (pfid) { + if (d) { + console.log('Will not initialize the chat (folder-link)'); + } + + resolve(EACCESS); + } + else { + authring.onAuthringReady('chat').then(__init_chat); + } + }); +} + +function loadfm_callback(res) { + 'use strict'; + + if ((parseInt(res) | 0) < 0 || res === undefined) { + window.loadingInitDialog.hide(); + + // tell the user we were unable to retrieve the cloud drive contents, upon clicking OK redirect to /support + msgDialog('warninga', l[1311], l[16892], api_strerror(res), loadSubPage.bind(null, 'support')); + return; + } + + mega.loadReport.recvNodes = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + if (pfkey) { + folderlink = pfid; + // Hide the parent, to prevent dbfetch from trying to retrieve it. + Object(M.d[M.RootID]).p = ''; + } + + if (res.noc) { + mega.loadReport.noc = res.noc; + } + if (res.tct) { + mega.loadReport.tct = res.tct; + } + if (res.ok && !res.ok0) { + // this is a legacy cached tree without an ok0 element + process_ok(res.ok); + } + if (res.u) { + process_u(res.u); + } + if (res.opc) { + processOPC(res.opc); + } + if (res.suba) { + if (!is_mobile) { + process_suba(res.suba); + } + } + if (res.ipc) { + processIPC(res.ipc); + } + if (res.ps) { + processPS(res.ps); + } + if (res.mcf) { + // save the response to be processed later once chat files were loaded + loadfm.chatmcf = res.mcf.c || res.mcf; + if (res.mcf.pc) { + loadfm.chatmcf = (loadfm.chatmcf || []).concat(res.mcf.pc); + } + // cf will include the flags (like whether it is archived) and chatid, + // so it needs to combine it before processing it. + var mergeCfToChatmcf = function(entry) { + for (var i = 0; i < loadfm.chatmcf.length; i++) { + if (loadfm.chatmcf[i].id === entry.id) { + loadfm.chatmcf[i].f = entry.f; + } + } + }; + + if (res.mcf.cf) { + for (var i = 0; i < res.mcf.cf.length; i++) { + mergeCfToChatmcf(res.mcf.cf[i]); + } + } + if (res.mcf.pcf) { + for (var i = 0; i < res.mcf.pcf.length; i++) { + mergeCfToChatmcf(res.mcf.pcf[i]); + } + } + // ensure the response is saved in fmdb, even if the chat is disabled or not loaded yet + processMCF(loadfm.chatmcf); + } + + if (res.aesp) { + mega.sets.resetDB(res.aesp); + } + + M.avatars(); + + if (localStorage['treefixup$' + u_handle]) { + // We found inconsistent tree nodes and forced a reload, log it. + eventlog(99695); + } + + process_f(res.f, function onLoadFMDone(hasMissingKeys) { + + // Check if the key for a folderlink was correct + if (folderlink && missingkeys[M.RootID]) { + window.loadingInitDialog.hide(); + + loadfm.loaded = false; + loadfm.loading = false; + + // If on mobile, load the decryption key overlay + if (is_mobile) { + mobile.decryptionKeyOverlay.show(pfid, true, true); + return new MegaPromise(); + } + else { + // Otherwise load the regular webclient decryption key dialog + return mKeyDialog(pfid, true, true) + .fail(function() { + loadSubPage('start'); + }); + } + } + + if (folderlink) { + + // This folderlink is valid to affiliate + M.affiliate.storeAffiliate(folderlink, 2); + } + + // If we have shares, and if a share is for this node, record it on the nodes share list + if (res.s) { + for (let i = res.s.length; i--;) { + M.nodeShare(res.s[i].h, res.s[i]); + } + } + + // Handle public/export links. Why here? Make sure that M.d already exists + if (res.ph) { + processPH(res.ph); + } + + // Handle versioning nodes + if (res.f2) { + process_f(res.f2, null, true); + } + + // This package is sent on hard refresh if owner have enabled or disabled PUF + if (res.uph) { + mega.megadrop.processUPHAP(res.uph); + } + + // decrypt hitherto undecrypted nodes + crypto_fixmissingkeys(missingkeys); + + if (res.cr) { + crypto_procmcr(res.cr); + } + + if (res.sr) { + crypto_procsr(res.sr); + } + setsn(currsn = res.sn); + + mega.loadReport.procNodeCount = Object.keys(M.d || {}).length; + mega.loadReport.procNodes = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + window.loadingInitDialog.step3(20, 35); + + // Time to save the ufs-size-cache, from which M.tree nodes will be created and being + // those dependant on in-memory-nodes from the initial load to set flags such SHARED. + (async() => ufsc.save())().catch(dump) + .finally(() => { + // commit transaction and set sn + setsn(res.sn); + currsn = res.sn; + + window.loadingInitDialog.step3(35, 40); + + // retrieve initial batch of action packets, if any + // we'll then complete the process using loadfm_done + getsc(true); + }); + }); +} + +/** + * Function to be invoked when the cloud has finished loading, + * being the nodes loaded from either server or local cache. + */ +function loadfm_done(mDBload) { + + window.loadingInitDialog.step3(56, 85); + + mDBload = mDBload || !loadfm.fromapi; + + loadfm.loaded = Date.now(); + loadfm.loading = false; + loadfm.fromapi = false; + + if (d > 1) console.error('loadfm_done', is_fm()); + + mega.loadReport.procAPs = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + if (!pfid && u_type == 3) { + + // Ensure tree nodes consistency... + var tlen = Object.keys(M.tree[M.RootID] || {}).length; + var clen = Object.keys(M.c[M.RootID] || {}).filter(function(h) { return M.c[M.RootID][h] > 1 }).length; + + if (tlen < clen) { + if (localStorage['treefixup$' + u_handle]) { + // The force reload attempt did not helped on getting tree nodes consistency back (?!) + eventlog(99696); + } + else if ((Date.now() - parseInt(localStorage['treeic$' + u_handle] || 0)) < 864e6) { + // The user suffered again from inconsistent tree nodes within the + // last 10 days, we are not force reloading his account on this case. + eventlog(99697); + } + else { + // Force reload the account to get tree nodes consistency back... + localStorage['treeic$' + u_handle] = Date.now(); + localStorage['treefixup$' + u_handle] = 1; + return fm_forcerefresh(); + } + } + delete localStorage['treefixup$' + u_handle]; + + // load/initialise the authentication system + authring.initAuthenticationSystem(); + } + + // This function is invoked once the M.openFolder()'s promise (through renderfm()) is fulfilled. + var _completion = function() { + + window.loadingInitDialog.step3(100); + + var hideLoadingDialog = !is_mobile && !CMS.isLoading(); + + if ((location.host === 'mega.nz' || !megaChatIsDisabled) && !is_mobile) { + + if (!pfid && !loadfm.chatloading && (u_type === 3 || is_eplusplus)) { + loadfm.chatloading = true; + + M.require('chat') + .always(function() { + + if (typeof ChatRoom !== 'undefined') { + + if (loadfm.chatmcf) { + processMCF(loadfm.chatmcf, true); + loadfm.chatmcf = null; + } + init_chat(); + } + else { + // FIXME: this won't be reached because the request will fail silently + console.error('Chat resources failed to load...'); + } + + loadfm.chatloading = false; + loadfm.chatloaded = Date.now(); + }); + + /* + if (getSitePath().substr(0, 8) === '/fm/chat') { + // Keep the "decrypting" step until the chat have loaded. + hideLoadingDialog = false; + }*/ + } + } + + // Check Business (or Pro Flexi) account is expired on initial phase in desktop web + if (!is_mobile && u_attr && (u_attr.b || u_attr.pf)) { + + M.require('businessAcc_js', 'businessAccUI_js').done(() => { + + var business_ui = new BusinessAccountUI(); + + if (u_attr.b && u_attr.b.m) { + business_ui.showWelcomeDialog(); + } + + // the function will check if the account is expired + business_ui.showExp_GraceUIElements(); + }); + } + + if (hideLoadingDialog) { + onIdle(() => { + window.loadingInitDialog.hide(); + + // Reposition UI elements right after hiding the loading overlay, + // without waiting for the lazy $.tresizer() triggered by MegaRender + fm_resize_handler(true); + }); + } + + // -0x800e0fff indicates a call to loadfm() when it was already loaded + if (mDBload !== -0x800e0fff && !is_mobile) { + onIdle(function _initialNotify() { + + // If this was called from the initial fm load via gettree or db load, we should request the + // latest notifications. These must be done after the first getSC call. + if (!folderlink) { + notify.getInitialNotifications(); + } + }); + + if (mBroadcaster.crossTab.master && !mega.loadReport.sent) { + mega.loadReport.sent = true; + + var r = mega.loadReport; + var tick = Date.now() - r.aliveTimeStamp; + + r.totalTimeSpent = Date.now() - mega.loadReport.startTime; + + r = [ + r.mode, // 1: DB, 2: API + r.recvNodes, r.procNodes, r.procAPs, + r.fmConfigFetch, r.renderfm, + r.dbToNet | 0, // see mDB.js comment + r.totalTimeSpent, + Object.keys(M.d || {}).length, // total account nodes + r.procNodeCount, // nodes before APs processing + buildVersion.timestamp || -1, // -- VERSION TAG -- + navigator.hardwareConcurrency | 0, // cpu cores + folderlink ? 1 : 0, + pageLoadTime, // secureboot's resources load time + r.ttfb | 0, // time-to-first-byte (for gettree) + r.noc | 0, // tree not cached + r.tct | 0, // tree compute time + r.recvAPs, // time waiting to receive APs + r.EAGAINs, // -3/-4s while loading + r.e500s, // http err 500 while loading + r.errs, // any other errors while loading + decWorkerPool.ok && decWorkerPool.length || -666, + r.ttlb | 0, // time to last byte + r.ttfm | 0, // time to fm since ttlb + u_type === 3 ? (mBroadcaster.crossTab.master ? 1 : 0) : -1, // master, or slave tab? + r.pn1, r.pn2, r.pn3, r.pn4, r.pn5, // procNodes steps + Object.keys(M.tree || {}).length, // total tree nodes + r.invisibleTime | 0, // time spent as background tab + ]; + + if (d) { + console.debug('loadReport', r, tick, document.hidden); + } + + if (!(tick > 2100) && !document.hidden) { + api_req({a: 'log', e: 99626, m: JSON.stringify(r)}); + } + } + + if (mDBload) { + M.avatars(); + } + } + if ($.msgDialog) { + closeMsg(); + } + clearInterval(mega.loadReport.aliveTimer); + mega.state &= ~window.MEGAFLAG_LOADINGCLOUD; + + watchdog.notify('loadfm_done'); + }; + + var _onConfigReady = function() { + + window.loadingInitDialog.step3(85, 100); + + var promise = MegaPromise.resolve(); + + mega.loadReport.fmConfigFetch = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + // are we actually on an #fm/* page? + if (page !== 'start' && is_fm() || $('.fm-main.default').is(":visible")) { + promise = M.initFileManager(); + + mega.loadReport.renderfm = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + // load report - time to fm after last byte received + mega.loadReport.ttfm = Date.now() - mega.loadReport.ttfm; + + // setup fm-notifications such as 'full' or 'almost-full' if needed. + if (!pfid && u_type) { + M.getStorageState().then(function(res) { + // 0: Green, 1: Orange (almost full), 2: Red (full) + if (res >= 1) { + M.checkStorageQuota(50); + } + }); + M.myChatFilesFolder.init(); + M.getMyBackups().catch(dump); + M.getCameraUploads().catch(dump); + } + } + else { + mega.loadReport.ttfm = -1; + mega.loadReport.renderfm = -1; + } + + mclp = Promise.resolve(); + promise.always(_completion); + }; + + Promise.allSettled([mclp, u_type > 2 && mega.config.fetch()]) + .then(_onConfigReady) + .catch(function(ex) { + console.warn(ex); + tryCatch(_onConfigReady, (ex) => { + // give time for window.onerror to fire 'cd2' before showing the blocking confirm-dialog + setTimeout(function() { + siteLoadError(ex, 'loadfm'); + }, 2e3); + + // reach window.onerror + throw ex; + })(); + }); +} + +function fmtreenode(id, e) +{ + if (M.getNodeRoot(id) === 'contacts') + return false; + var treenodes = {}; + if (typeof fmconfig.treenodes !== 'undefined') + treenodes = fmconfig.treenodes; + if (e) + treenodes[id] = 1; + else + { + $('#treesub_' + id + ' .expanded').each(function(i, e) + { + var id2 = $(e).attr('id'); + if (id2) + { + id2 = id2.replace('treea_', ''); + $('#treesub_' + id2).removeClass('opened'); + $('#treea_' + id2).removeClass('expanded'); + delete treenodes[id2]; + } + }); + delete treenodes[id]; + } + mega.config.set('treenodes', treenodes); + + M.treenodes = JSON.stringify(treenodes); +} + +function fmsortmode(id, n, d) +{ + var sortmodes = {}; + if (typeof fmconfig.sortmodes !== 'undefined') + sortmodes = fmconfig.sortmodes; + if (n === 'name' && d > 0 && id !== "contacts") { + // don't delete for "contacts" section, since "status" is the default there. + delete sortmodes[id]; + } + else if (n === "status" && d > 0 && id === "contacts") { + // DO delete for "contacts" section, since "status" is the default there, so default is already d > 1. + delete sortmodes[id]; + } + else + sortmodes[id] = {n: n, d: d}; + mega.config.set('sortmodes', sortmodes); +} + +function fmviewmode(id, e) +{ + var viewmodes = {}; + if (typeof fmconfig.viewmodes !== 'undefined') + viewmodes = fmconfig.viewmodes; + if (e) + viewmodes[id] = 1; + else + viewmodes[id] = 0; + mega.config.set('viewmodes', viewmodes); +} + +/** @property window.thumbnails */ +lazy(self, 'thumbnails', () => { + 'use strict'; + return new ThumbManager(200, 'otf.thumbs'); +}); + +/** @property fm_thumbnails.exclude */ +lazy(fm_thumbnails, 'exclude', () => { + 'use strict'; + const res = { + recents: 5, + photos: 7, + [mega.gallery.secKeys.cuphotos]: 7, + [mega.gallery.secKeys.cdphotos]: 7, + images: 7, + [mega.gallery.secKeys.cuimages]: 7, + [mega.gallery.secKeys.cdimages]: 7, + videos: 7, + [mega.gallery.secKeys.cuvideos]: 7, + [mega.gallery.secKeys.cdvideos]: 7, + favourites: 7 + }; + return Object.setPrototypeOf(res, null); +}); + +function fm_thumbnails(mode, nodeList, callback) +{ + 'use strict'; + + const pwd = M.currentdirid; + const exclude = fm_thumbnails.exclude[pwd]; + if (M.chat && mode !== 'standalone' || exclude > 6) { + return; + } + nodeList = (mode === 'standalone' ? nodeList : false) || M.v; + + let count = 0; + const transparent = {WEBP: 1, PNG: 1, SVG: 1, GIF: 1}; + const max = M.rmItemsInView ? Math.max(M.rmItemsInView | 0, 48) : Infinity; + const treq = []; + + const onTheFly = + !is_mobile && M.viewmode && mode !== 'standalone' && !exclude + && !mega.config.get('noflytn') ? Object.create(null) : false; + + // check if the node is rendered within/near the view-port. + const isVisible = (n) => { + return pwd === M.currentdirid && (mode === 'standalone' || isVisible.dom(n)); + }; + isVisible.dom = M.megaRender + ? (n) => n.seen && M.megaRender.isDOMNodeVisible(n.h) + : (n) => elementIsVisible(document.getElementById(n.h)); + + const setSrcAttribute = (n, uri) => { + if (isVisible(n)) { + uri = uri || thumbnails.get(n.fa); + + if (uri) { + let imgNode = document.getElementById(n.h); + + if (imgNode && (imgNode = imgNode.querySelector('img'))) { + n.seen = 2; + imgNode.setAttribute('src', uri); + imgNode.parentNode.parentNode.classList.add('thumb'); + } + } + } + }; + + // enqueue thumbnail retrieval. + const queue = (n) => { + let type = ':0*'; + const fa = String(n.fa); + + if (onTheFly && fa.includes(':1*') && !transparent[fileext(n.name, true, true)] || !fa.includes(type)) { + type = ':1*'; + + if (onTheFly) { + onTheFly[fa] = n; + } + } + + if (fa.includes(type)) { + type = type[1] | 0; + + if (thumbnails.queued(n, type)) { + + if (!treq[type]) { + treq[type] = Object.create(null); + } + treq[type][fa] = n; + + if (++count > max) { + // break + return true; + } + } + else if (n.seen !== 2) { + setSrcAttribute(n); + } + } + }; + + + if (d) { + console.time('fm_thumbnails'); + } + + for (let i = 0; i < nodeList.length; i++) { + const n = nodeList[i]; + + if (n && n.fa && !missingkeys[n.h]) { + if (isVisible(n) && queue(n)) { + break; + } + + if (mode === 'standalone' && typeof callback === 'function') { + if (thumbnails.has(n.fa)) { + onIdle(callback.bind(null, n)); + } + else if (thumbnails.pending[n.fa]) { + thumbnails.pending[n.fa].push(callback.bind(null, n)); + } + } + } + } + + if (count > 0) { + if (d) { + console.log('Requesting %d thumbs (%d loaded)', count, thumbnails.loaded, treq); + } + thumbnails.loaded += count; + + // add, render, and deduplicate new thumbnail. + const append = (fa, uri) => { + if (d > 1) { + console.info(`Rendering thumbnail ${fa}, ${uri}`); + } + thumbnails.add(fa, uri, (n) => setSrcAttribute(n, uri)); + }; + + // re-queue thumbnail retrieval. + const requeue = (handle, data, callback) => { + treq[0][handle] = data; + + delay('fm:thumbnails.requeue', () => { + api_getfileattr(treq[0], 0, callback); + treq[0] = {}; + }, 4321); + }; + + // validate we can render a node + const validate = (fa, uint8) => { + let valid = true; + + if (uint8 === 0xDEAD || uint8 && !uint8.byteLength || !thumbnails.each(fa, (n) => isVisible(n))) { + valid = false; + thumbnails.decouple(fa); + } + + return valid; + }; + + // handle thumbnail retrieval. + const onload = async(ctx, fa, uint8) => { + if (!validate(fa, uint8)) { + return; + } + + if (onTheFly[fa]) { + const blob = await webgl.getDynamicThumbnail(uint8, {ats: 1}).catch(nop); + + if (blob) { + append(fa, URL.createObjectURL(blob)); + + if (thumbnails.db) { + thumbnails.db.add(fa, blob); + } + } + else { + if (d) { + console.debug(`Failed to generate on-the-fly thumbnail for ${fa}`); + } + requeue(fa, onTheFly[fa], onload); + } + + onTheFly[fa] = null; + } + else { + append(fa, mObjectURL([uint8.buffer || uint8], 'image/jpeg')); + } + }; + + queueMicrotask(async() => { + + if (treq[1]) { + let proceed = true; + + if (onTheFly) { + await thumbnails.query( + Object.keys(treq[1]).filter(h => !!onTheFly[h]), + (h) => { + delete treq[1][h]; + delete onTheFly[h]; + return validate(h); + }, + (h, buf) => onload(0, h, buf) + ).catch(dump); + + proceed = $.len(treq[1]) > 0; + } + + if (proceed) { + api_getfileattr(treq[1], 1, onload); + } + } + + if (treq[0]) { + api_getfileattr(treq[0], 0, onload); + } + treq[0] = {}; + }); + } + + if (d) { + console.timeEnd('fm_thumbnails'); + } +} + + +mBroadcaster.once('boot_done', function() { + "use strict"; + + var uad = ua.details || false; + var browser = String(uad.browser || ''); + + if (!browser || browser === "Safari" || /edge|explorer/i.test(browser)) { + if (d) { + console.info('Disabling paste proxy on this browser...', browser, [uad]); + } + return; + } + + // Didn't found a better place for this, so I'm leaving it here... + // This is basically a proxy of on paste, that would trigger a new event, which would receive the actual + // File object, name, etc. + $(document).on('paste', function(event) { + const {clipboardData, originalEvent = false} = event; + let {items} = clipboardData || originalEvent.clipboardData || {}; + + if (!items && originalEvent.clipboardData) { + // safari + items = originalEvent.clipboardData.files; + } + var fileName = false; + + var blob = null; + if (items) { + if (ua.details.browser === "Firefox" && items.length === 2) { + // trying to paste an image, but .. FF does not have support for that. (It adds the file icon as + // the image, which is a BAD UX, so .. halt now!) + return; + } + for (var i = 0; i < items.length; i++) { + if (items[i].type.indexOf("text/rtf") === 0) { + // halt execution, this is a Rich text formatted clipboard data, which may also contain an image, + // so we need to halt here, otherwise it may be threated as image, instead of text + return; + } + else if (items[i].type.indexOf("image") === 0) { + if (items[i] instanceof File) { + // Safari, using .files + blob = items[i]; + } + else { + blob = items[i].getAsFile(); + } + } + else if (items[i].kind === "string") { + items[i].getAsString(function(str) { + fileName = str; + }); + } + } + } + + if (blob !== null) { + if (fileName) { + // we've got the name of the file... + blob.name = fileName; + } + + if (!blob.name) { + // no name found..generate dummy name. + var ext = blob.type.replace("image/", "").toLowerCase(); + fileName = blob.name = "image." + (ext === "jpeg" ? "jpg" : ext); + } + + var simulatedEvent = new $.Event("pastedimage"); + $(window).trigger(simulatedEvent, [blob, fileName]); + + // was this event handled and preventing default? if yes, prevent the raw event from pasting the + // file name text + if (simulatedEvent.isDefaultPrevented()) { + event.preventDefault(); + return false; + } + } + }); +}); + +/** + * Mega Promise + * + * Polyfill + easier to debug variant of Promises which are currently implemented in some of the cutting edge browsers. + * + * The main goals of using this, instead of directly using native Promises are: + * - stack traces + * - .done, .fail + * - all js exceptions will be logged (in the console) and thrown as expected + * + * Note: for now, we will use $.Deferred to get this functionality out of the box and MegaPromise will act as a bridge + * between the original Promise API and jQuery's Deferred APIs. + * + * Implementation note: .progress is currently not implemented. + */ + + +/** + * Mega Promise constructor + * + * @returns {MegaPromise} + * @constructor + */ +function MegaPromise(fn) { + var self = this; + + this.$deferred = new $.Deferred(); + this.state$deferred = this.$deferred; + + if (fn) { + var resolve = function() { + self.resolve.apply(self, arguments); + }; + var reject = function() { + self.reject.apply(self, arguments); + }; + + try { + fn(resolve, reject); + } + catch (ex) { + reject(ex); + } + } + + if (MegaPromise.debugPendingPromisesTimeout > 0) { + var preStack = M.getStack(); + setTimeout(function() { + if (self.state() === 'pending') { + console.error("Pending promise found: ", self, preStack); + } + }, MegaPromise.debugPendingPromisesTimeout); + } + + if (MegaPromise.debugPreStack === true) { + self.stack = M.getStack(); + } +} + +/** + * Set this to any number (millisecond) and a timer would check if all promises are resolved in that time. If they are + * still in 'pending' state, they will trigger an error (this is a debugging helper, not something that you should + * leave on in production code!) + * + * @type {boolean|Number} + */ +MegaPromise.debugPendingPromisesTimeout = false; + +/** + * Set this to true, to enable all promises to store a pre-stack in .stack. + * + * @type {boolean} + */ +MegaPromise.debugPreStack = false; + +/** + * Convert Native and jQuery promises to MegaPromises, by creating a MegaPromise proxy which will be attached + * to the actual underlying promise's .then callbacks. + * + * @param p + * @returns {MegaPromise} + * @private + */ +MegaPromise.asMegaPromiseProxy = function(p) { + var $promise = new MegaPromise(); + + p.then( + function megaPromiseResProxy() { + $promise.resolve.apply($promise, arguments); + }, + MegaPromise.getTraceableReject($promise, p)); + + return $promise; +}; + +/** + * Common function to be used as reject callback to promises. + * + * @param promise {MegaPromise} + * @returns {function} + * @private + */ +MegaPromise.getTraceableReject = function($promise, origPromise) { + 'use strict'; + // Save the current stack pointer in case of an async call behind + // the promise.reject (Ie, onAPIProcXHRLoad shown as initial call) + var preStack = d > 1 && M.getStack(); + + return function __mpTraceableReject(aResult) { + if (window.d > 1) { + var postStack = M.getStack(); + if (typeof console.group === 'function') { + console.group('PROMISE REJECTED'); + } + console.debug('Promise rejected: ', aResult, origPromise); + console.debug('pre-Stack', preStack); + console.debug('post-Stack', postStack); + if (typeof console.groupEnd === 'function') { + console.groupEnd(); + } + } + try { + if (typeof $promise === 'function') { + $promise.apply(origPromise, arguments); + } + else { + $promise.reject.apply($promise, arguments); + } + } + catch(e) { + console.error('Unexpected promise error: ', e, preStack); + } + }; +}; + +MegaPromise.prototype.benchmark = function(uniqueDebuggingName) { + var self = this; + MegaPromise._benchmarkTimes = MegaPromise._benchmarkTimes || {}; + MegaPromise._benchmarkTimes[uniqueDebuggingName] = Date.now(); + + self.always(function() { + console.error( + uniqueDebuggingName, + 'finished in:', + Date.now() - MegaPromise._benchmarkTimes[uniqueDebuggingName] + ); + delete MegaPromise._benchmarkTimes[uniqueDebuggingName]; + }); + + // allow chaining. + return self; +}; + +/** + * By implementing this method, MegaPromise will be compatible with .when/.all syntax. + * + * jQuery: https://github.com/jquery/jquery/blob/10399ddcf8a239acc27bdec9231b996b178224d3/src/deferred.js#L133 + * + * @returns {jQuery.Deferred} + */ +MegaPromise.prototype.promise = function() { + return this.$deferred.promise(); +}; + +/** + * Alias of .then + * + * @param res + * Function to be called on resolution of the promise. + * @param [rej] + * Function to be called on rejection of the promise. + * @returns {MegaPromise} + */ +MegaPromise.prototype.then = function(res, rej) { + + return MegaPromise.asMegaPromiseProxy(this.$deferred.then(res, rej)); +}; + +/** + * Alias of .done + * + * @param res + * @returns {MegaPromise} + */ +MegaPromise.prototype.done = function(res) { + this.$deferred.done(res); + return this; +}; + +/** + * Alias of .state + * + * @returns {String} + */ +MegaPromise.prototype.state = function() { + return this.$deferred.state(); +}; + +/** + * Alias of .fail + * + * @param rej + * @returns {MegaPromise} + */ +MegaPromise.prototype.fail = function(rej) { + this.$deferred.fail(rej); + return this; +}; + + +/** + * Alias of .fail + * + * @param rej + * @returns {MegaPromise} + */ +MegaPromise.prototype.catch = MegaPromise.prototype.fail; + +/** + * Alias of .resolve + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.resolve = function() { + this.state$deferred.resolve.apply(this.state$deferred, arguments); + return this; +}; + +/** + * Alias of .reject + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.reject = function() { + this.state$deferred.reject.apply(this.state$deferred, arguments); + return this; +}; + +/** + * Alias of .always + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.always = function() { + this.$deferred.always.apply(this.$deferred, arguments); + return this; +}; + +/** + * Alias of .then, which works like .always and exchanges the internal Deferred promise. + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.pipe = function(resolve, reject) { + var pipe = this.then(resolve, reject || resolve); + this.$deferred = pipe.$deferred; + return pipe; +}; + +/** + * Alias of .always + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.wait = function(callback) { + 'use strict'; + + this.$deferred.always((...args) => { + + queueMicrotask(() => callback(...args)); + }); + return this; +}; + +/** + * Alias of .wait + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.finally = MegaPromise.prototype.wait; + +/** + * Invoke promise fulfilment through try/catch and reject it if there's some exception... + * @param {Function} resolve The function to invoke on fulfilment + * @param {Function} [reject] The function to invoke on rejection/caught exceptions + * @returns {MegaPromise} + */ +MegaPromise.prototype.tryCatch = function(resolve, reject) { + 'use strict'; + reject = reject || function() {}; + return this.done(tryCatch(resolve, reject)).fail(reject); +}; + +/** + * Alias of .always + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.unpack = function(callback) { + // callback = tryCatch(callback); + + this.$deferred.always(function(result) { + if (result.__unpack$$$) { + // flatten an n-dimensional array. + for (var i = result.length; i--;) { + // pick the first argument for each member + result[i] = result[i][0]; + } + result = Array.prototype.concat.apply([], result); + } + callback(result); + }); + return this; +}; + +/** + * Link the `targetPromise`'s state to the current promise. E.g. when targetPromise get resolved, the current promise + * will get resolved too with the same arguments passed to targetPromise. + * + * PS: This is a simple DSL-like helper to save us from duplicating code when using promises :) + * + * @param targetPromise + * @returns {MegaPromise} current promise, helpful for js call chaining + */ +MegaPromise.prototype.linkDoneTo = function(targetPromise) { + var self = this; + + if (targetPromise instanceof MegaPromise) { + // Using MegaPromise.done since it's more lightweight than the thenable + // which creates a new deferred instance proxied back to MegaPromise... + targetPromise.done(function() { + self.resolve.apply(self, arguments); + }); + } + else { + targetPromise.then(function() { + self.resolve.apply(self, arguments); + }); + } + + return this; +}; + +/** + * Link the `targetPromise`'s state to the current promise. E.g. when targetPromise get rejected, the current promise + * will get rejected too with the same arguments passed to targetPromise. + * PS: This is a simple DSL-like helper to save us from duplicating code when using promises :) + * + * + * @param targetPromise + * @returns {MegaPromise} current promise, helpful for js call chaining + */ +MegaPromise.prototype.linkFailTo = function(targetPromise) { + var self = this; + + if (targetPromise instanceof MegaPromise) { + // Using MegaPromise.fail since it's more lightweight than the thenable + // which creates a new deferred instance proxied back to MegaPromise... + targetPromise.fail(function() { + self.reject.apply(self, arguments); + }); + } + else { + targetPromise.then(undefined, function() { + self.reject.apply(self, arguments); + }); + } + + return this; +}; + +/** + * Link the `targetPromise`'s state to the current promise (both done and fail, see .linkDoneTo and .linkFailTo) + * + * PS: This is a simple DSL-like helper to save us from duplicating code when using promises :) + * + * @param targetPromise + * @returns {MegaPromise} current promise, helpful for js call chaining + */ +MegaPromise.prototype.linkDoneAndFailTo = function(targetPromise) { + 'use strict'; + + if (targetPromise instanceof MegaPromise) { + this.linkDoneTo(targetPromise); + this.linkFailTo(targetPromise); + } + else { + if (!(targetPromise instanceof Promise)) { + targetPromise = Promise.resolve(targetPromise); + } + targetPromise.then((res) => this.resolve(res)) + .catch((ex) => { + this.reject(ex); + }); + } + return this; +}; + +/** + * Link promise's state to a function's value. E.g. if the function returns a promise that promise's state will be + * linked to the current fn. If it returns a non-promise-like value it will resolve/reject the current promise's value. + * + * PS: This is a simple DSL-like helper to save us from duplicating code when using promises :) + * + * @returns {MegaPromise} current promise, helpful for js call chaining + */ +MegaPromise.prototype.linkDoneAndFailToResult = function(cb, context, args) { + var self = this; + + var ret = cb.apply(context, args); + + if (ret instanceof MegaPromise) { + self.linkDoneTo(ret); + self.linkFailTo(ret); + } + else { + self.resolve(ret); + } + + return self; +}; + +/** + * Development helper, that will dump the result/state change of this promise to the console + * + * @param [msg] {String} optional msg + * @returns {MegaPromise} current promise, helpful for js call chaining + */ +MegaPromise.prototype.dumpToConsole = function(msg) { + var self = this; + + if (d) { + self.then( + function () { + console.log("success: ", msg ? msg : arguments, !msg ? null : arguments); + }, function () { + console.error("error: ", msg ? msg : arguments, !msg ? null : arguments); + } + ); + } + + return self; +}; +MegaPromise.prototype.dump = MegaPromise.prototype.dumpToConsole; + +/** + * Check if what we have is *potentially* another Promise implementation (Native, Bluebird, Q, etc) + * @param {*|Object} p What we expect to be a promise. + * @returns {Boolean} whether it is + */ +MegaPromise.isAnotherPromise = function(p) { + 'use strict'; + return !(p instanceof MegaPromise) && typeof Object(p).then === 'function'; +}; + +/** + * Implementation of Promise.all/$.when, with a little bit more flexible way of handling different type of promises + * passed in the `promisesList` + * + * @returns {MegaPromise} + */ +MegaPromise.all = function(promisesList) { + 'use strict'; + + var _jQueryPromisesList = promisesList.map(function(p) { + if (MegaPromise.isAnotherPromise(p)) { + p = MegaPromise.asMegaPromiseProxy(p); + } + + if (d) { + console.assert(p instanceof MegaPromise); + } + return p; + }); + + var promise = new MegaPromise(); + + $.when.apply($, _jQueryPromisesList) + .done(function megaPromiseResProxy() { + promise.resolve(toArray.apply(null, arguments)); + }) + .fail(MegaPromise.getTraceableReject(promise)); + + return promise; +}; + +/** + * Implementation of Promise.all/$.when, with a little bit more flexible way of handling different type of promises + * passed in the `promisesList`. + * + * Warning: This method will return a "master promise" which will only get resolved when ALL promises had finished + * processing (e.g. changed their state to either resolved or rejected). The only case when the master promise will get, + * rejected is if there are still 'pending' promises in the `promisesList` after the `timeout` + * + * @param promisesList {Array} + * @param [timeout] {Integer} max ms to way for the master promise to be resolved before rejecting it + * @returns {MegaPromise} + */ +MegaPromise.allDone = function(promisesList, timeout) { + // IF empty, resolve immediately + if (promisesList.length === 0) { + return MegaPromise.resolve(); + } + var masterPromise = new MegaPromise(); + var totalLeft = promisesList.length; + var results = []; + results.__unpack$$$ = 1; + + var alwaysCb = function() { + results.push(toArray.apply(null, arguments)); + + if (--totalLeft === 0) { + masterPromise.resolve(results); + } + }; + + for (var i = promisesList.length; i--;) { + var v = promisesList[i]; + + if (MegaPromise.isAnotherPromise(v)) { + v = MegaPromise.asMegaPromiseProxy(v); + } + + if (v instanceof MegaPromise) { + v.done(alwaysCb); + v.fail(alwaysCb); + } + else { + if (d) { + console.warn('non-promise provided...', v); + } + alwaysCb(v); + } + } + + if (timeout) { + var timeoutTimer = setTimeout(function () { + masterPromise.reject(results); + }, timeout); + + masterPromise.always(function () { + clearTimeout(timeoutTimer); + }); + } + + return masterPromise; +}; + +/** + * alias of Promise.resolve, will create a new promise, resolved with the arguments passed to this method + * + * @returns {MegaPromise} + */ +MegaPromise.resolve = function() { + var p = new MegaPromise(); + p.resolve.apply(p, arguments); + + return p; +}; + + +/** + * alias of Promise.reject, will create a new promise, rejected with the arguments passed to this method + * + * @returns {MegaPromise} + */ +MegaPromise.reject = function() { + var p = new MegaPromise(); + p.reject.apply(p, arguments); + + return p; +}; + +/** + * Development helper tool to delay .resolve/.reject of a promise. + * + * @param ms {Number} milliseconds to delay the .resolve/.reject + */ +MegaPromise.prototype.fakeDelay = function(ms) { + var self = this; + if (self._fakeDelayEnabled) { + return; + } + + var origResolve = self.resolve; + var origReject = self.reject; + self.resolve = function() { + var args = arguments; + setTimeout(function() { + origResolve.apply(self, args); + }, ms); + + return self; + }; + self.reject = function() { + var args = arguments; + setTimeout(function() { + origReject.apply(self, args); + }, ms); + + return self; + }; + + self._fakeDelayEnabled = true; + + return self; +}; + +lazy(mega, 'requestStatusMonitor', () => { + 'use strict'; + const logger = new MegaLogger('RequestStatusMonitor'); + + return new class RequestStatusMonitor { + + constructor() { + this.running = false; + this.partialreqstat = false; + this.reqstatbackoff = 0; + } + + framing(data) { + + if (this.partialreqstat) { + + // we have unprocessed data - append new + const temp = new Uint8Array(this.partialreqstat.byteLength + data.byteLength); + temp.set(new Uint8Array(this.partialreqstat), 0); + temp.set(new Uint8Array(data), this.partialreqstat.byteLength); + this.partialreqstat = temp.buffer; + } + else { + this.partialreqstat = data; + } + + for (;;) { + const t = this.process(this.partialreqstat); + + if (!t) { + break; + } + + if (t === this.partialreqstat.byteLength) { + + this.partialreqstat = false; + break; + } + + // residual data present - chop + this.partialreqstat = this.partialreqstat.slice(t); + } + } + + process(ab) { + + // incomplete? + if (ab.byteLength < 2) { + return 0; + } + + let i; + const ba = new Uint8Array(ab); + const numusers = ba[0] + (ba[1] << 8); + + if (!numusers) { + + if (d) { + logger.log("*** No operation in progress"); + } + + loadingDialog.hideProgress(); + + return 2; + } + + let pos = 2 + 8 * numusers; + + // incomplete? + if (ab.byteLength < pos + 2) { + return 0; + } + + const numops = ba[pos] + (ba[pos + 1] << 8); + + // incomplete? + if (ab.byteLength < pos + 2 + numops + 3 * 4) { + return 0; + } + + let description = `User ${ab_to_base64(ab.slice(2, 10))}`; + + if (numusers > 1) { + description += ', affecting '; + + for (i = 1; i < numusers; i++) { + description += `${ab_to_base64(ab.slice(2 + 8 * i, 10 + 8 * i))},`; + } + } + + description += ' is executing a '; + + for (i = 0; i < numops; i++) { + if (i) { + description += '/'; + } + + if (String.fromCharCode(ba[pos + 2 + i]) === 'p') { + description += 'file or folder creation'; + } + else { + description += 'UNKNOWN operation'; + } + } + + pos += 2 + numops; + + const _int32lefromab = ab => ab[0] + (ab[1] << 8) + (ab[2] << 16) + (ab[3] << 24); + const start = _int32lefromab(ab.slice(pos, pos + 4)); + const curr = _int32lefromab(ab.slice(pos + 4, pos + 8)); + const end = _int32lefromab(ab.slice(pos + 8, pos + 12)); + const progress = curr / end * 100; + + description += ` since ${start}, ${progress}%`; + description += ` [${curr}/${end}]`; + + loadingDialog.showProgress(progress); + + if (d) { + logger.log(description); + } + + return pos + 3 * 4; + } + + retry() { + + // retry with capped randomised exponential backoff + if (this.reqstatbackoff < 30000) { + this.reqstatbackoff += this.reqstatbackoff + 500 + Math.random() * 500; + } + + this.running = false; + setTimeout(() => this.init(), this.reqstatbackoff); + } + + async start() { + const {u_sid} = window; + if (!u_sid) { + if (d) { + logger.warn('Session no longer valid.'); + } + this.running = false; + return; + } + + return fetch(`${apipath}cs/rs?sid=${u_sid}`) + .then((response) => { + + this.reqstatbackoff = 0; + const reader = response.body.getReader(); + + // Feed incoming chunked transfer encoded data. + return new ReadableStream({ + start: () => { + const retry = () => this.retry(); + + (async() => { + while (true) { + const {value, done} = await reader.read(); + if (done) { + onIdle(retry); + break; + } + this.framing(value); + } + })().catch(retry); + } + }); + }); + } + + init() { + if (!this.running) { + this.running = true; + + this.start() + .catch((ex) => { + logger.debug(ex); + this.retry(); + }); + } + } + }; +}); + +// FM IndexedDB layer (using Dexie.js - https://github.com/dfahlander/Dexie.js) +// (indexes and payload are obfuscated using AES ECB - FIXME: use CBC for the payload) + +// DB name is fm_ + encrypted u_handle (folder links are not cached yet - FIXME) +// init() checks for the presence of a valid _sn record and wipes the DB if none is found +// pending[] is an array of write transactions that will be streamed to the DB +// setting pending[]._sn opens a new transaction, so always set it last + +// - small updates run as a physical IndexedDB transaction +// - large updates are written on the fly, but with the _sn cleared, which +// ensures integrity, but invalidates the DB if the update can't complete + +// plainname: the base name that will be obfuscated using u_k +// schema: the Dexie database schema +// channelmap: { tablename : channel } - tables that do not map to channel 0 +// (only channel 0 operates under an _sn-triggered transaction regime) +function FMDB(plainname, schema, channelmap) { + 'use strict'; + + if (!(this instanceof FMDB)) { + return new FMDB(plainname, schema, channelmap); + } + + // DB Instance. + this.db = false; + + // DB name suffix, derived from u_handle and u_k + this.name = false; + + // DB schema - https://github.com/dfahlander/Dexie.js/wiki/TableSchema + this.schema = schema; + + // the table names contained in the schema (set at open) + this.tables = null; + + // if we have non-transactional (write-through) tables, they are mapped + // to channel numbers > 0 here + this.channelmap = channelmap || {}; + + // pending obfuscated writes [channel][tid][tablename][action_autoincrement] = [payloads] + this.pending = [[]]; + + // current channel tid being written to (via .add()/.del()) by the application code + this.head = [0]; + + // current channel tid being sent to IndexedDB + this.tail = [0]; + + // -1: idle, 0: deleted sn and writing (or write-through), 1: transaction open and writing + this.state = -1; + + // upper limit when pending data needs to start to get flushed. + this.limit = FMDB_FLUSH_THRESHOLD; + + // flag indicating whether there is a pending write + this.writing = false; + + // [tid, tablename, action] of .pending[] hash item currently being written + this.inflight = false; + + // the write is complete and needs be be committed (either because of _sn or write-through) + this.commit = false; + + // a DB error occurred, do not touch IndexedDB for the rest of the session + this.crashed = true; + + // DB invalidation process: callback and ready flag + this.inval_cb = false; + this.inval_ready = false; + + // whether multi-table transactions work (1) or not (0) (Apple, looking at you!) + this.cantransact = -1; + + // a flag to know if we have sn set in database. -1 = we don't know, 0 = not set, 1 = is set + this.sn_Set = -1; + + // @see {@link FMDB.compare} + this._cache = Object.create(null); + + // initialise additional channels + for (var i in this.channelmap) { + i = this.channelmap[i]; + this.head[i] = 0; + this.tail[i] = 0; + this.pending[i] = []; + } + + // protect user identity post-logout + this.name = ab_to_base64(this.strcrypt((plainname + plainname).substr(0, 16))); + + // console logging + this.logger = MegaLogger.getLogger('FMDB'); + this.logger.options.printDate = 'rad' in mega; + this.logger.options.levelColors = { + 'ERROR': '#fe000b', + 'DEBUG': '#005aff', + 'WARN': '#d66d00', + 'INFO': '#2ca100', + 'LOG': '#5b5352' + }; + + // if (d) Dexie.debug = "dexie"; +} + +tryCatch(function() { + 'use strict'; + + // Check for indexedDB 2.0 + binary keys support. + Object.defineProperty(FMDB, 'iDBv2', {value: indexedDB.cmp(new Uint8Array(0), 0)}); +}, false)(); + +// options +FMDB.$useBinaryKeys = FMDB.iDBv2 ? 1 : 0; +FMDB.$usePostSerialz = 2; + +// @private increase to drop/recreate *all* databases. +FMDB.version = 1; + +// @private +Object.defineProperty(FMDB, 'capabilities', { + value: FMDB.iDBv2 << 4 | (FMDB.$useBinaryKeys | FMDB.$usePostSerialz /* | ... */) +}); +// @private persistence prefix +Object.defineProperty(FMDB, 'perspex', {value: '.' + FMDB.version + FMDB.capabilities.toString(32)}); + +// initialise cross-tab access arbitration identity +FMDB.prototype.identity = Date.now() + Math.random().toString(26); + +/** @property fmdb.memoize */ +lazy(FMDB.prototype, 'memoize', () => { + 'use strict'; + // leave cloud nodes in memory?.. + return parseInt(localStorage.cnize) !== 0; +}); + +// set up and check fm DB for user u +// calls result(sn) if found and sn present +// wipes DB an calls result(false) otherwise +FMDB.prototype.init = function fmdb_init(result, wipe) { + "use strict"; + + var fmdb = this; + var dbpfx = 'fm30_'; + var slave = !mBroadcaster.crossTab.master; + + fmdb.crashed = false; + fmdb.inval_cb = false; + fmdb.inval_ready = false; + + // prefix database name with options/capabilities + dbpfx += FMDB.perspex.substr(1); + + // Make the database name dependent on the current schema. + dbpfx += MurmurHash3(JSON.stringify(this.schema), 0x6f01f).toString(16); + + // Notify completion invoking the provided callback + var resolve = function(sn, error) { + fmdb.opening = false; + + if (typeof result === 'function') { + if (error) { + fmdb.crashed = 2; + fmdb.logger.warn('Marking DB as crashed.', error); + + if (fmdb.db) { + const {db} = fmdb; + queueMicrotask(() => db.delete()); + } + + fmdb.db = null; + fmdb.evento(`$init:${error}`); + } + + result(sn); + + // prevent this from being called twice.. + result = null; + } + }; + + // Catch errors, mark DB as crashed, and move forward without indexedDB support + var reject = function(e) { + resolve(false, e || EFAILED); + }; + + // Database opening logic + var openDataBase = function() { + // start inter-tab heartbeat + // fmdb.beacon(); + fmdb.db = new Dexie(dbpfx + fmdb.name, {chromeTransactionDurability: 'relaxed'}); + + // There is some inconsistency in Chrome 58.0.3029.110 that could cause indexedDB OPs to take ages... + setTimeout(function() { + // if not resolved already... + if (result !== null) { + if (d) { + fmdb.logger.warn('Opening the database timed out.'); + } + + reject(ETEMPUNAVAIL); + } + }, 15000); + + var dbSchema = {}; + if (!Array.isArray(fmdb.schema)) { + fmdb.schema = [fmdb.schema]; + } + + for (var i = 0; i < fmdb.schema.length; i++) { + var schema = fmdb.schema[i]; + for (var k in schema) { + if (schema.hasOwnProperty(k)) { + dbSchema[k] = schema[k]; + } + } + fmdb.db.version(i + 1).stores(dbSchema); + } + fmdb.tables = Object.keys(dbSchema); + + fmdb.db.open().then(function() { + if (fmdb.crashed) { + // Opening timed out. + return; + } + fmdb.get('_sn').always(function(r) { + if (!wipe && r[0] && r[0].length === 11) { + if (d) { + fmdb.logger.log("DB sn: " + r[0]); + } + resolve(r[0]); + } + else if (slave || fmdb.crashed) { + fmdb.crashed = 2; + resolve(false); + } + else { + if (d) { + fmdb.logger.log("No sn found in DB, wiping..."); + } + fmdb.db.delete().then(function() { + fmdb.db.open().then(function() { + resolve(false); + }).catch(reject); + }).catch(reject); + } + }); + }).catch(Dexie.MissingAPIError, function(e) { + fmdb.logger.error("IndexedDB unavailable", e); + reject(e); + }).catch(reject); + }; + openDataBase = tryCatch(openDataBase, reject); + + // Enumerate databases and collect those not prefixed with 'dbpfx' (which is the current format) + var collectDataBaseNames = function() { + var timer; + var todrop = []; + var done = function() { + clearTimeout(timer); + fmdb.dropall(todrop, openDataBase); + done = null; + }; + + if (d) { + fmdb.logger.log('Collecting database names...'); + } + + Dexie.getDatabaseNames(function(r) { + if (sessionStorage.fmdbDropALL) { + todrop = r; + fmdb.logger.warn('drop all...', r); + return; + } + for (var i = r.length; i--;) { + // drop only fmX related databases and skip slkv's + if (r[i][0] !== '$' && r[i].substr(0, dbpfx.length) !== dbpfx + && r[i].substr(-FMDB.perspex.length) !== FMDB.perspex) { + + todrop.push(r[i]); + } + } + }).finally(function() { + if (d) { + if (todrop.length) { + fmdb.logger.log("Deleting obsolete DBs: " + todrop.join(', ')); + } + else { + fmdb.logger.log('No databases collected...'); + } + } + + if (done) { + done(); + } + }); + + timer = setTimeout(function() { + if (d) { + fmdb.logger.warn('Dexie.getDatabaseNames timed out...'); + } + done(); + }, 3000); + }; + collectDataBaseNames = tryCatch(collectDataBaseNames, openDataBase); + + // Let's start the fun... + if (fmdb.crashed) { + resolve(false); + } + else if (!fmdb.db) { + if (fmdb.opening) { + fmdb.logger.error('Something went wrong... a DB is already opening...'); + } + else { + // Collect obsolete databases to remove them, and proceed opening our current database + collectDataBaseNames(); + + fmdb.opening = true; + } + } + else { + console.error('fmdb.db is already set...'); + } +}; + +// send failure event +FMDB.prototype.evento = function(message) { + 'use strict'; + message = String(message).split('\n')[0].substr(0, 380); + if (message.includes('not allow mutations')) { + // Ignore spammy Firefox in PBM. + return; + } + const eid = 99724; + const once = !eventlog.sent || eventlog.sent[eid] > 0; + + eventlog(eid, message, once); + + queueMicrotask(() => { + if (eventlog.sent) { + eventlog.sent[eid] = 1; + } + }); +}; + +// drop database +FMDB.prototype.drop = async function fmdb_drop() { + 'use strict'; + + if (this.db) { + await this.invalidate(); + await this.db.delete().catch(dump); + this.db = null; + } +}; + +// drop random databases +FMDB.prototype.dropall = function fmdb_dropall(dbs, cb) { + if (!dbs || !dbs.length) { + cb(); + } + else { + var fmdb = this; + var db = new Dexie(dbs.pop()); + var next = function(ev) { + next = function() {}; + if (ev && ev.type === 'blocked') { + fmdb.logger.warn('Cannot delete blocked indexedDB: ' + db.name); + } + fmdb.dropall(dbs, cb); + }; + + // If the DB is blocked, Dexie will try to delete it as soon there are no locks on it. + // However, we'll resolve immediately without waiting for it, since that will happen in + // an undetermined amount of time which needless to say is an odd UX experience... + db.on('blocked', next); + + db.delete().then(function() { + fmdb.logger.log("Deleted IndexedDB " + db.name); + }).catch(function(err){ + fmdb.logger.error("Unable to delete IndexedDB " + db.name, err); + }).finally(function() { + next(); + }); + } +}; + +// check if data for table is currently being written. +FMDB.prototype.hasPendingWrites = function(table) { + 'use strict'; + + if (!table) { + return this.writing; + } + var ch = this.channelmap[table] || 0; + var ps = this.pending[ch][this.tail[ch]] || false; + + return this.tail[ch] !== this.head[ch] && ps[table]; +}; + +/** check whether we're busy with too many pending writes */ +Object.defineProperty(FMDB.prototype, 'busy', { + get: function() { + 'use strict'; + const limit = BACKPRESSURE_FMDB_LIMIT; + const pending = this.pending[0]; + + let count = 0; + let i = pending.length; + while (i--) { + const t = pending[i] && pending[i].f; + + for (let {h} = t || !1; h >= 0; h--) { + if (t[h]) { + count += t[h].size || t[h].length || 0; + if (count > limit) { + if (d) { + console.debug('fmdb.busy', count); + } + return true; + } + } + } + } + return false; + } +}); + +// enqueue a table write - type 0 == addition, type 1 == deletion +// IndexedDB activity is triggered once we have a few thousand of pending rows or the sn +// (writing the sn - which is done last - completes the transaction and starts a new one) +FMDB.prototype.enqueue = function fmdb_enqueue(table, row, type) { + "use strict"; + + let c; + let lProp = 'size'; + const ch = this.channelmap[table] || 0; + + // if needed, create new transaction at index fmdb.head + if (!(c = this.pending[ch][this.head[ch]])) { + c = this.pending[ch][this.head[ch]] = Object.create(null); + } + + // if needed, create new hash of modifications for this table + // .h = head, .t = tail (last written to the DB) + if (!c[table]) { + // even indexes hold additions, odd indexes hold deletions + c[table] = { t : -1, h : type }; + c = c[table]; + } + else { + // (we continue to use the highest index if it is of the requested type + // unless it is currently in flight) + // increment .h(head) if needed + c = c[table]; + if ((c.h ^ type) & 1) c.h++; + } + + if (c[c.h]) { + if (this.useMap[table]) { + if (type & 1) { + c[c.h].add(row); + } + else { + c[c.h].set(row.h, row); + } + } + else { + c[c.h].push(row); + lProp = 'length'; + } + } + else if (this.useMap[table]) { + if (type & 1) { + c[c.h] = new Set([row]); + } + else { + c[c.h] = new Map([[row.h, row]]); + } + } + else { + c[c.h] = [row]; + lProp = 'length'; + } + + // force a flush when a lot of data is pending or the _sn was updated + // also, force a flush for non-transactional channels (> 0) + if (ch || table[0] === '_' || c[c.h][lProp] > this.limit) { + // the next write goes to a fresh transaction + if (!ch) { + fmdb.head[ch]++; + } + fmdb.writepending(fmdb.head.length - 1); + } +}; + +/** + * Serialize data before storing it into indexedDB + * @param {String} table The table this dta belongs to + * @param {Object} row Object to serialize. + * @returns {Object} The input data serialized + */ +FMDB.prototype.serialize = function(table, row) { + 'use strict'; + + if (row.d) { + if (this.stripnode[table]) { + // this node type is stripnode-optimised: temporarily remove redundant elements + // to create a leaner JSON and save IndexedDB space + var j = row.d; // this references the live object! + var t = this.stripnode[table](j); // remove overhead + row.d = JSON.stringify(j); // store lean result + + // Restore overhead (In Firefox, Object.assign() is ~63% faster than for..in) + Object.assign(j, t); + } + else { + // otherwise, just stringify it all + row.d = JSON.stringify(row.d); + } + } + + // obfuscate index elements as base64-encoded strings, payload as ArrayBuffer + for (var i in row) { + if (i === 'd') { + row.d = this.strcrypt(row.d); + } + else if (table !== 'f' || i !== 't') { + row[i] = this.toStore(row[i]); + } + } + + return row; +}; + +FMDB.prototype.getError = function(ex) { + 'use strict'; + const error = ex && ex.inner || ex || !1; + const message = `~${error.name || ''}: ${error.message || ex && ex.message || ex}`; + return {error, message}; +}; + +FMDB.prototype._transactionErrorHandled = function(ch, ex) { + 'use strict'; + const tag = '$fmdb$fail$state'; + const state = sessionStorage[tag] | 0; + const {error, message} = this.getError(ex); + + let res = false; + let eventMsg = `$wptr:${message.substr(0, 99)}`; + + if (this.inflight) { + if (d) { + console.assert(this.inflight instanceof Error); + } + if (this.inflight instanceof Error) { + eventMsg += ` >> ${this.inflight}`; + } + this.inflight = false; + } + this.evento(eventMsg); + + if (mega.is.loading && (error.name === 'TimeoutError' || error.name === 'AbortError')) { + if (d) { + this.logger.info("Transaction %s, retrying...", error.name, ex); + + if (mega.loadReport) { + this.logger.info('loadReport', JSON.stringify(mega.loadReport)); + } + } + + res = true; + sessionStorage[tag] = 1 + state; + + switch (state) { + case 0: + case 1: + case 2: + if (!this.crashed) { + this.state = -1; + this.writing = 0; + this.writepending(ch); + + if (mega.loadReport && mega.loadReport.invisibleTime > 0) { + sessionStorage[tag]--; + } + break; + } + /* fallthrough */ + case 3: + if (!mega.nobp) { + localStorage.nobp = 1; + fm_forcerefresh(true); + break; + } + /* fallthrough */ + case 4: + fm_fullreload(null, 'DB-crash'); + break; + default: + res = false; // let the DB crash. + break; + } + } + + return res; +}; + +// FIXME: auto-retry smaller transactions? (need stats about transaction failures) +// ch - channel to operate on +FMDB.prototype.writepending = function fmdb_writepending(ch) { + "use strict"; + + // exit loop if we ran out of pending writes or have crashed + if (this.inflight || ch < 0 || this.crashed || this.writing) { + return; + } + + // signal when we start/finish to save stuff + if (!ch) { + if (this.tail[ch] === this.head[ch] - 1) { + document.documentElement.classList.add('fmdb-working'); + } + else if (this.tail[ch] === this.head[ch]) { + document.documentElement.classList.remove('fmdb-working'); + this.pending[ch] = this.pending[ch].filter(Boolean); + this.tail[ch] = this.head[ch] = 0; + this._cache = Object.create(null); + } + } + + // iterate all channels to find pending writes + if (!this.pending[ch][this.tail[ch]]) { + return this.writepending(ch - 1); + } + + if (this.tail[ch] >= this.head[ch]) { + return; + } + + var fmdb = this; + + if (d > 1) { + fmdb.logger.warn('writepending()', ch, fmdb.state, + Object(fmdb.pending[0][fmdb.tail[0]])._sn, fmdb.cantransact); + } + + if (!ch && fmdb.state < 0 && fmdb.cantransact) { + + // if the write job is on channel 0 and already complete (has _sn set), + // we execute it in a single transaction without first clearing sn + fmdb.state = 1; + fmdb.writing = 1; + fmdb.db.transaction('rw!', fmdb.tables, () => { + if (d) { + fmdb.logger.info("Transaction started"); + console.time('fmdb-transaction'); + } + fmdb.commit = false; + fmdb.cantransact = 1; + + if (fmdb.sn_Set && !fmdb.pending[0][fmdb.tail[0]]._sn && currsn) { + fmdb.db._sn.clear().then(function() { + fmdb.sn_Set = 0; + dispatchputs(); + }); + } + else { + dispatchputs(); + } + }).then(() => { + // transaction completed: delete written data + delete fmdb.pending[0][fmdb.tail[0]++]; + + if (d) { + fmdb.logger.log("HEAD = " + fmdb.head[0] + " --- Tail = " + fmdb.tail[0]); + } + + fmdb.state = -1; + if (d) { + fmdb.logger.info("Transaction committed"); + console.timeEnd('fmdb-transaction'); + } + fmdb.writing = 0; + fmdb.writepending(ch); + }).catch((ex) => { + if (d) { + console.timeEnd('fmdb-transaction'); + } + + if (fmdb.cantransact < 0) { + fmdb.logger.error("Your browser's IndexedDB implementation is bogus, disabling transactions."); + fmdb.cantransact = 0; + fmdb.writing = 0; + fmdb.writepending(ch); + } + else if (!fmdb._transactionErrorHandled(ch, ex)) { + // FIXME: retry instead? need statistics. + fmdb.logger.error("Transaction failed, marking DB as crashed", ex); + fmdb.state = -1; + fmdb.invalidate(); + } + }); + } + else { + if (d) { + console.error('channel 1 Block ... invoked'); + } + // we do not inject write-through operations into a live transaction + if (fmdb.state > 0) { + dispatchputs(); + } + else { + // the job is incomplete or non-transactional - set state to "executing + // write without transaction" + fmdb.state = 0; + + if (ch) { + // non-transactional channel: go ahead and write + + dispatchputs(); + } + else { + // mark db as "writing" until the sn cleaning have completed, + // this flag will be reset on dispatchputs() once fmdb.commit is set + fmdb.writing = 2; + // we clear the sn (the new sn will be written as the last action in this write job) + // unfortunately, the DB will have to be wiped in case anything goes wrong + var sendOperation = function() { + fmdb.commit = false; + fmdb.writing = 3; + + dispatchputs(); + }; + if (currsn) { + fmdb.db._sn.clear().then( + function() { + if (d) { + console.error('channel 1 + Sn cleared'); + } + fmdb.sn_Set = 0; + sendOperation(); + } + ).catch(function(e) { + fmdb.logger.error("SN clearing failed, marking DB as crashed", e); + fmdb.state = -1; + fmdb.invalidate(); + + fmdb.evento(`$wpsn:${e}`); + }); + } + else { + sendOperation(); + } + + } + } + } + + // start writing all pending data in this transaction to the DB + // conclude/commit the (virtual or real) transaction once _sn has been written + function dispatchputs() { + if (fmdb.inflight) return; + + if (fmdb.commit) { + // invalidation commit completed? + if (fmdb.inval_ready) { + if (fmdb.inval_cb) { + // fmdb.db.close(); + fmdb.inval_cb(); // caller must not reuse fmdb object + } + return; + } + + // the transaction is complete: delete from pending + if (!fmdb.state) { + // we had been executing without transaction protection, delete the current + // transaction and try to dispatch the next one immediately + if (!ch) delete fmdb.pending[0][fmdb.tail[0]++]; + + fmdb.commit = false; + fmdb.state = -1; + fmdb.writing = false; + fmdb.writepending(ch); + } + + // if we had a real IndexedDB transaction open, it will commit + // as soon as the browser main thread goes idle + + // I wont return, because this is relying on processing _sn table as the last + // table in the current pending operations.. + + // return; + } + + var tablesremaining = false; + + // this entirely relies on non-numeric hash keys being iterated + // in the order they were added. FIXME: check if always true + for (var table in fmdb.pending[ch][fmdb.tail[ch]]) { // iterate through pending tables, _sn last + var t = fmdb.pending[ch][fmdb.tail[ch]][table]; + + // do we have at least one update pending? (could be multiple) + if (t[t.h]) { + tablesremaining = true; + + // locate next pending table update (even/odd: put/del) + while (t.t <= t.h && !t[t.t]) t.t++; + + // all written: advance head + if (t.t == t.h) t.h++; + + if (fmdb.crashed && !(t.t & 1)) { + if (d) { + fmdb.logger.warn('The DB is crashed, halting put...'); + } + return; + } + + if (d) { + fmdb.logger.debug("DB %s with %s element(s) on table %s, channel %s, state %s", + t.t & 1 ? 'del' : 'put', t[t.t].size || t[t.t].length, table, ch, fmdb.state); + } + + // if we are on a non-transactional channel or the _sn is being updated, + // request a commit after the operation completes. + if (ch || table[0] == '_') { + fmdb.commit = true; + fmdb.sn_Set = 1; + } + + // record what we are sending... + fmdb.inflight = true; + + // is this an in-band _sn invalidation, and do we have a callback set? arm it. + if (fmdb.inval_cb && t.t & 1 && table[0] === '_') { + fmdb.inval_ready = true; + } + + // ...and send update off to IndexedDB for writing + write(table, t[t.t], t.t++ & 1 ? 'bulkDelete' : 'bulkPut'); + + // we don't send more than one transaction (looking at you, Microsoft!) + if (!fmdb.state) { + fmdb.inflight = t; + return; + } + } + else { + // if we are non-transactional and all data has been written for this + // table, we can safely delete its record + if (!fmdb.state && t.t == t.h) { + delete fmdb.pending[ch][fmdb.tail[ch]][table]; + } + } + } + + // if we are non-transactional, this deletes the "transaction" when done + // (as commit will never be set) + if (!fmdb.state && !tablesremaining) { + delete fmdb.pending[ch][fmdb.tail[ch]]; + + fmdb.writing = null; + fmdb.writepending(fmdb.head.length - 1); + } + } + + // bulk write operation + function write(table, data, op) { + if ('size' in data) { + // chrome90: 5ms per 1m + data = [...data.values()]; + } + const limit = window.fminitialized ? fmdb.limit >> 3 : data.length + 1; + + if (FMDB.$usePostSerialz) { + if (d) { + console.time('fmdb-serialize'); + } + + if (op === 'bulkPut') { + if (!data[0].d || fmdb._raw(data[0])) { + for (let x = data.length; x--;) { + fmdb.serialize(table, data[x]); + } + } + else if (d) { + fmdb.logger.debug('No data serialization was needed, retrying?', data); + } + } + else if (!(data[0] instanceof ArrayBuffer)) { + for (let j = data.length; j--;) { + data[j] = fmdb.toStore(data[j]); + } + } + + if (d) { + console.timeEnd('fmdb-serialize'); + } + } + + if (data.length < limit) { + fmdb.db[table][op](data).then(writeend).catch(writeerror); + return; + } + + var idx = 0; + (function bulkTick() { + var rows = data.slice(idx, idx += limit); + + if (rows.length) { + if (d > 1) { + var left = idx > data.length ? 0 : data.length - idx; + fmdb.logger.log('%s for %d rows, %d remaining...', op, rows.length, left); + } + fmdb.db[table][op](rows).then(bulkTick).catch(writeerror); + } + else { + data = undefined; + writeend(); + } + })(); + } + + // event handler for bulk operation completion + function writeend() { + if (d) { + fmdb.logger.log('DB write successful' + + (fmdb.commit ? ' - transaction complete' : '') + ', state: ' + fmdb.state); + } + + // if we are non-transactional, remove the written data from pending + // (we have to keep it for the transactional case because it needs to + // be visible to the pending updates search that getbykey() performs) + if (!fmdb.state) { + delete fmdb.inflight[fmdb.inflight.t - 1]; + fmdb.inflight = false; + + // in non-transactional loop back when the browser is idle so that we'll + // prevent unnecessarily hanging the main thread and short writes... + if (!fmdb.commit) { + if (loadfm.loaded) { + onIdle(dispatchputs); + } + else { + setTimeout(dispatchputs, 2600); + } + return; + } + } + + // loop back to write more pending data (or to commit the transaction) + fmdb.inflight = false; + dispatchputs(); + } + + // event handler for bulk operation error + function writeerror(ex) { + if (ex instanceof Dexie.BulkError) { + fmdb.logger.error('Bulk operation error, %s records failed.', ex.failures.length, ex); + } + else { + fmdb.logger.error('Unexpected error in bulk operation...', ex); + } + + if (fmdb.state > 0 && !fmdb.crashed) { + if (d) { + fmdb.logger.info('We are transactional, attempting to retry...'); + } + fmdb.inflight = ex; + return; + } + + fmdb.state = -1; + fmdb.inflight = false; + + // If there is an invalidation request pending, dispatch it. + if (fmdb.inval_cb) { + console.assert(fmdb.crashed, 'Invalid state, the DB must be crashed already...'); + fmdb.inval_cb(); + } + else { + fmdb.invalidate(); + } + + if (d) { + fmdb.logger.warn('Marked DB as crashed...', ex.name); + } + + fmdb.evento(ex); + } +}; + +/** + * Encrypt Unicode string with user's master key + * @param {String} s The unicode string + * @returns {ArrayBuffer} encrypted buffer + * @todo use CBC instead of ECB! + */ +FMDB.prototype.strcrypt = function fmdb_strcrypt(s) { + "use strict"; + + if (d && String(s).length > 0x10000) { + (this.logger || console) + .warn('The data you are trying to write is too large and will degrade the performance...', [s]); + } + + var len = (s = '' + s).length; + var bytes = this.utf8length(s); + if (bytes === len) { + var a32 = new Int32Array(len + 3 >> 2); + for (var i = len; i--;) { + a32[i >> 2] |= s.charCodeAt(i) << 8 * (i & 3); + } + return this._crypt(u_k_aes, a32); + } + + return this._crypt(u_k_aes, this.to8(s, bytes)); +}; + +/** + * Decrypt buffer with user's master key + * @param {ArrayBuffer} buffer Encrypted buffer + * @returns {String} unicode string + * @see {@link FMDB.strcrypt} + */ +FMDB.prototype.strdecrypt = function fmdb_strdecrypt(buffer) { + "use strict"; + + if (buffer.byteLength) { + var s = this.from8(this._decrypt(u_k_aes, buffer)); + for (var i = s.length; i--;) { + if (s.charCodeAt(i)) { + return s.substr(0, i + 1); + } + } + } + return ''; +}; + +// @private legacy version +FMDB.prototype.strcrypt0 = function fmdb_strcrypt(s) { + "use strict"; + + if (d && String(s).length > 0x10000) { + console.warn('The data you are trying to write is too huge and will degrade the performance...'); + } + + var a32 = str_to_a32(to8(s)); + for (var i = (-a32.length) & 3; i--; ) a32.push(0); + return a32_to_ab(encrypt_key(u_k_aes, a32)).buffer; +}; + +// @private legacy version +FMDB.prototype.strdecrypt0 = function fmdb_strdecrypt(ab) { + "use strict"; + + if (!ab.byteLength) return ''; + var a32 = []; + var dv = new DataView(ab); + for (var i = ab.byteLength/4; i--; ) a32[i] = dv.getUint32(i*4); + var s = from8(a32_to_str(decrypt_key(u_k_aes, a32))); + for (var i = s.length; i--; ) if (s.charCodeAt(i)) return s.substr(0, i+1); +}; + + +// TODO: @lp/@diego we need to move this to some other place... +FMDB._mcfCache = {}; + +// tables storing pending writes as Map() instances. +FMDB.prototype.useMap = Object.assign(Object.create(null), {f: true, tree: true}); + +// remove fields that are duplicated in or can be inferred from the index to reduce database size +FMDB.prototype.stripnode = Object.freeze({ + f : function(f) { + 'use strict'; + var t = { h : f.h, t : f.t, s : f.s }; + + // Remove pollution from the ufs-size-cache + // 1. non-folder nodes does not need tb/td/tf + if (!f.t) { + delete f.tb; + delete f.td; + delete f.tf; + } + // 2. remove Zero properties from versioning nodes inserted everywhere... + if (f.tvb === 0) delete f.tvb; + if (f.tvf === 0) delete f.tvf; + + // Remove properties used as indexes + delete f.h; + delete f.t; + delete f.s; + + t.ts = f.ts; + delete f.ts; + + if (f.hash) { + t.hash = f.hash; + delete f.hash; + } + + if (f.fa) { + t.fa = f.fa; + delete f.fa; + } + + // Remove other garbage + if ('seen' in f) { + t.seen = f.seen; + delete f.seen; // inserted by the dynlist + } + + if (f.shares) { + t.shares = f.shares; + delete f.shares; // will be populated from the s table + } + + if (f.fav !== undefined && !(f.fav | 0)) { + delete f.fav; + } + if (f.lbl !== undefined && !(f.lbl | 0)) { + delete f.lbl; + } + + if (f.p) { + t.p = f.p; + delete f.p; + } + + if (f.ar) { + t.ar = f.ar; + delete f.ar; + } + + if (f.u === u_handle) { + t.u = f.u; + f.u = '~'; + } + + return t; + }, + + tree: function(f) { + 'use strict'; + var t = {h: f.h}; + delete f.h; + if (f.td !== undefined && !f.td) { + delete f.td; + } + if (f.tb !== undefined && !f.tb) { + delete f.tb; + } + if (f.tf !== undefined && !f.tf) { + delete f.tf; + } + if (f.tvf !== undefined && !f.tvf) { + delete f.tvf; + } + if (f.tvb !== undefined && !f.tvb) { + delete f.tvb; + } + if (f.lbl !== undefined && !(f.lbl | 0)) { + delete f.lbl; + } + return t; + }, + + ua: function(ua) { + 'use strict'; + delete ua.k; + }, + + u: function(usr) { + 'use strict'; + delete usr.u; + delete usr.ats; + delete usr.name; + delete usr.avatar; + delete usr.presence; + delete usr.lastName; + delete usr.firstName; + delete usr.shortName; + delete usr.presenceMtime; + }, + + mcf: function(mcf) { + 'use strict'; + // mcf may contain 'undefined' values, which should NOT be set, otherwise they may replace the mcfCache + var cache = {}; + var keys = ['id', 'cs', 'g', 'u', 'ts', 'ct', 'ck', 'f', 'm', 'mr']; + for (var idx = keys.length; idx--;) { + var k = keys[idx]; + + if (mcf[k] !== undefined) { + cache[k] = mcf[k]; + } + } + // transient properties, that need to be resetted + cache.n = mcf.n || undefined; + + FMDB._mcfCache[cache.id] = Object.assign({}, FMDB._mcfCache[mcf.id], cache); + Object.assign(mcf, FMDB._mcfCache[cache.id]); + + var t = {id: mcf.id, ou: mcf.ou, n: mcf.n, url: mcf.url}; + delete mcf.id; + delete mcf.ou; + delete mcf.url; + delete mcf.n; + + if (mcf.g === 0) { + t.g = 0; + delete mcf.g; + } + if (mcf.m === 0) { + t.m = 0; + delete mcf.m; + } + if (mcf.f === 0) { + t.f = 0; + delete mcf.f; + } + if (mcf.cs === 0) { + t.cs = 0; + delete mcf.cs; + } + + if (mcf.u) { + t.u = mcf.u; + mcf.u = ''; + + for (var i = t.u.length; i--;) { + mcf.u += t.u[i].u + t.u[i].p; + } + } + + return t; + } +}); + +// re-add previously removed index fields to the payload object +FMDB.prototype.restorenode = Object.freeze({ + ok : function(ok, index) { + 'use strict'; + ok.h = index.h; + }, + + f : function(f, index) { + 'use strict'; + f.h = index.h; + f.p = index.p; + f.ts = index.t < 0 ? 1262304e3 - index.t : index.t; + if (index.c) { + f.hash = index.c; + } + if (index.fa) { + f.fa = index.fa; + } + if (index.s < 0) f.t = -index.s; + else { + f.t = 0; + f.s = parseFloat(index.s); + } + if (!f.ar && f.k && typeof f.k == 'object') { + f.ar = Object.create(null); + } + if (f.u === '~') { + f.u = u_handle; + } + }, + tree : function(f, index) { + 'use strict'; + f.h = index.h; + }, + + ph : function(ph, index) { + 'use strict'; + ph.h = index.h; + }, + + ua : function(ua, index) { + 'use strict'; + ua.k = index.k; + }, + + u: function(usr, index) { + 'use strict'; + usr.u = index.u; + }, + + h: function(out, index) { + 'use strict'; + out.h = index.h; + out.hash = index.c; + }, + + mk : function(mk, index) { + 'use strict'; + mk.h = index.h; + }, + + mcf: function(mcf, index) { + 'use strict'; + mcf.id = index.id; + + mcf.m = mcf.m || 0; + mcf.g = mcf.g || 0; + mcf.f = mcf.f || 0; + mcf.cs = mcf.cs || 0; + + if (typeof mcf.u === 'string') { + var users = []; + for (var i = 0; i < mcf.u.length; i += 12) { + users.push({ + p: mcf.u[11 + i] | 0, + u: mcf.u.substr(i, 11) + }); + } + mcf.u = users; + } + + FMDB._mcfCache[mcf.id] = mcf; + } +}); + +// enqueue IndexedDB puts +// sn must be added last and effectively (mostly actually) "commits" the "transaction" +// the next addition will then start a new "transaction" +// (large writes will not execute as an IndexedDB transaction because IndexedDB can't) +FMDB.prototype.add = function fmdb_add(table, row) { + "use strict"; + + if (this.crashed) return; + + this.enqueue(table, row, 0); +}; + +// enqueue IndexedDB deletions +FMDB.prototype.del = function fmdb_del(table, index) { + "use strict"; + + if (this.crashed) return; + + this.enqueue(table, index, 1); +}; + +// non-transactional read with subsequent deobfuscation, with optional prefix filter +// (must NOT be used for dirty reads - use getbykey() instead) +FMDB.prototype.get = async function fmdb_get(table, chunked) { + "use strict"; + if (this.crashed > 1) { + // a read operation failed previously + return []; + } + + if (d) { + this.logger.log("Fetching entire table %s...", table, chunked ? '(chunked)' : ''); + } + + if (chunked) { + const limit = 8192; + const {keyPath} = this.db[table].schema.primKey; + + let res = await this.db[table].orderBy(keyPath).limit(limit).toArray(); + while (res.length) { + let last = res[res.length - 1][keyPath].slice(0); + + this.normaliseresult(table, res); + last = chunked(res, last) || last; + + res = res.length >= limit && await this.db[table].where(keyPath).above(last).limit(limit).toArray(); + } + return; + } + + const r = await this.db[table].toArray().catch(dump); + if (r) { + this.normaliseresult(table, r); + } + else { + if (d && !this.crashed) { + this.logger.error("Read operation failed, marking DB as read-crashed"); + } + await this.invalidate(1); + } + + return r || []; +}; + +FMDB.prototype.normaliseresult = function fmdb_normaliseresult(table, r) { + "use strict"; + + var t; + for (var i = r.length; i--; ) { + try { + if (!r[i]) { + // non-existing bulkGet result. + r.splice(i, 1); + continue; + } + + if (this._raw(r[i])) { + // not encrypted. + if (d > 1) { + console.assert(FMDB.$usePostSerialz); + } + r[i] = r[i].d; + continue; + } + + t = r[i].d ? JSON.parse(this.strdecrypt(r[i].d)) : {}; + + if (this.restorenode[table]) { + // restore attributes based on the table's indexes + for (var p in r[i]) { + if (p !== 'd' && (table !== 'f' || p !== 't')) { + r[i][p] = this.fromStore(r[i][p]); + } + } + this.restorenode[table](t, r[i]); + } + + r[i] = t; + } + catch (ex) { + if (d) { + this.logger.error("IndexedDB corruption: " + this.strdecrypt(r[i].d), ex); + } + r.splice(i, 1); + } + } +}; + +// non-transactional read with subsequent deobfuscation, with optional key filter +// (dirty reads are supported by scanning the pending writes after the IndexedDB read completes) +// anyof and where are mutually exclusive, FIXME: add post-anyof where filtering? +// eslint-disable-next-line complexity +FMDB.prototype.getbykey = async function fmdb_getbykey(table, index, anyof, where, limit) { + 'use strict'; + let bulk = false; + let options = false; + if (typeof index !== 'string') { + options = index; + index = options.index; + anyof = anyof || options.anyof; + where = where || options.where; + limit = limit || options.limit; + } + + if (this.crashed > 1 || anyof && !anyof[1].length) { + return []; + } + + const ch = this.channelmap[table] || 0; + const writing = this.writing || this.head[ch] !== this.tail[ch]; + const debug = d && (x => (m, ...a) => this.logger.warn(`[${x}] ${m}`, ...a))(Math.random().toString(28).slice(-7)); + + if (debug) { + debug(`Fetching table ${table}...${writing ? '\u26a1' : ''}`, options || where || anyof && anyof.flat()); + } + + let i = 0; + let t = this.db[table]; + + if (!index) { + // No index provided, fallback to primary key + index = t.schema.primKey.keyPath; + } + + if (anyof) { + // encrypt all values in the list + for (i = anyof[1].length; i--;) { + anyof[1][i] = this.toStore(anyof[1][i]); + } + + if (anyof[1].length > 1) { + if (!limit && anyof[0] === t.schema.primKey.keyPath) { + bulk = true; + t = t.bulkGet(anyof[1]); + } + else if (options.offset) { + t = t.where(anyof[0]).anyOf(anyof[1]); + } + else { + let flat = a => a.flat(); + if (limit) { + flat = (lmt => a => a.flat().slice(0, lmt))(limit); + limit = false; + } + t = Promise.all(anyof[1].map(k => t.where(anyof[0]).equals(k).toArray())).then(flat); + } + } + else { + t = t.where(anyof[0]).equals(anyof[1][0]); + } + } + else if (options.query) { + // Perform custom user-provided query + t = options.query(t); + } + else if (where) { + for (let k = where.length; k--;) { + // encrypt the filter values (logical AND is commutative, so we can reverse the order) + if (typeof where[k][1] === 'string') { + if (!this._cache[where[k][1]]) { + this._cache[where[k][1]] = this.toStore(where[k][1]); + } + where[k][1] = this._cache[where[k][1]]; + } + + // apply filter criterion + if (i) { + t = t.and(where[k][0]); + } + else { + t = t.where(where[k][0]); + i = 1; + } + + t = t.equals(where[k][1]); + } + } + + if (options.offset) { + t = t.offset(options.offset); + } + + if (limit) { + t = t.limit(limit); + } + + t = options.sortBy ? t.sortBy(options.sortBy) : t.toArray ? t.toArray() : t; + + // eslint-disable-next-line complexity + const r = await t.then((r) => { + // now scan the pending elements to capture and return unwritten updates + // FIXME: typically, there are very few or no pending elements - + // determine if we can reduce overall CPU load by replacing the + // occasional scan with a constantly maintained hash for direct lookups? + let j, f, k; + let match = 0; + const isMap = this.useMap[table]; + const pending = this.pending[ch]; + const matches = Object.create(null); + const lProp = isMap ? 'size' : 'length'; + + if (bulk) { + for (let i = r.length; i--;) { + if (!r[i]) { + // non-existing bulkGet result. + r.splice(i, 1); + } + } + } + const dbRecords = !!r.length; + + // iterate transactions in reverse chronological order + for (let tid = pending.length; tid--;) { + const t = pending[tid] && pending[tid][table]; + + // any updates pending for this table? + if (t && (t[t.h] && t[t.h][lProp] || t[t.h - 1] && t[t.h - 1][lProp])) { + // debugger + // examine update actions in reverse chronological order + // FIXME: can stop the loop at t.t for non-transactional writes + for (let a = t.h; a >= 0; a--) { + /* eslint-disable max-depth */ + if (t[a]) { + const data = isMap ? [...t[a].values()] : t[a]; + + if (a & 1) { + // no need to record a deletion unless we got db entries + if (dbRecords) { + // deletion - always by bare index + for (j = data.length; j--;) { + f = this._value(data[j]); + + if (typeof matches[f] == 'undefined') { + // boolean false means "record deleted" + matches[f] = false; + match++; + } + } + } + } + else { + // addition or update - index field is attribute + // iterate updates in reverse chronological order + // (updates are not commutative) + for (j = data.length; j--;) { + const update = data[j]; + + f = this._value(update[index]); + if (typeof matches[f] == 'undefined') { + // check if this update matches our criteria, if any + if (where) { + for (k = where.length; k--;) { + if (!this.compare(table, where[k][0], where[k][1], update)) { + break; + } + } + + // mismatch detected - record it as a deletion + if (k >= 0) { + // no need to record a deletion unless we got db entries + if (dbRecords) { + match++; + matches[f] = false; + } + continue; + } + } + else if (options.query) { + // If a custom query was made, notify there was a + // pending update and whether if should be included. + if (!(options.include && options.include(update, index))) { + // nope - record it as a deletion + matches[f] = false; + match++; + continue; + } + } + else if (anyof) { + // does this update modify a record matched by the anyof inclusion list? + for (k = anyof[1].length; k--;) { + if (this.compare(table, anyof[0], anyof[1][k], update)) { + break; + } + } + + // no match detected - record it as a deletion + if (k < 0) { + // no need to record a deletion unless we got db entries + if (dbRecords) { + match++; + matches[f] = false; + } + continue; + } + } + + match++; + matches[f] = update; + } + } + } + } + } + } + } + + // scan the result for updates/deletions/additions arising out of the matches found + if (match) { + if (debug) { + debug('pending matches', match, r.length); + } + + for (i = r.length; i--;) { + // if this is a binary key, convert it to string + f = this._value(r[i][index]); + + if (typeof matches[f] !== 'undefined') { + if (matches[f] === false) { + // a returned record was deleted or overwritten with + // keys that fall outside our where clause + r.splice(i, 1); + } + else { + // a returned record was overwritten and still matches + // our where clause + r[i] = this.clone(matches[f]); + matches[f] = undefined; + } + } + } + + // now add newly written records + for (t in matches) { + if (matches[t]) { + r.push(this.clone(matches[t])); + } + } + } + + // filter out matching records + if (where) { + for (i = r.length; i--;) { + for (k = where.length; k--;) { + if (!this.compare(table, where[k][0], where[k][1], r[i])) { + r.splice(i, 1); + break; + } + } + } + } + + // Apply user-provided filtering, if any + if (options.filter) { + r = options.filter(r); + } + + if (r.length) { + this.normaliseresult(table, r); + } + return r; + }).catch((ex) => { + if (debug && !this.crashed) { + debug("Read operation failed, marking DB as read-crashed", ex); + } + }); + + if (!r) { + await this.invalidate(1); + } + return r || []; +}; + +// invokes getbykey in chunked mode +FMDB.prototype.getchunk = async function(table, options, onchunk) { + 'use strict'; + if (typeof options === 'function') { + onchunk = options; + options = Object.create(null); + } + options.limit = options.limit || 1e4; + + var mng = options.offset === undefined; + if (mng) { + options.offset = -options.limit; + } + + while (true) { + if (mng) { + options.offset += options.limit; + } + const {limit} = options; + const r = await this.getbykey(table, options); + + if (onchunk(r) === false) { + return EAGAIN; + } + + if (r.length < limit) { + break; + } + } +}; + +// simple/fast/non-recursive object cloning +FMDB.prototype.clone = function fmdb_clone(o) { + 'use strict'; + + o = {...o}; + + if (!o.d || 'byteLength' in o.d) { + + for (const k in o) { + + if (o[k] && o[k].byteLength) { + + o[k] = o[k].slice(0); + } + } + } + + return o; +}; + +/** + * Encrypt 32-bit words using AES ECB... + * @param {sjcl.cipher.aes} cipher AES cipher + * @param {TypedArray} input data + * @returns {ArrayBuffer} encrypted data + * @private + */ +FMDB.prototype._crypt = function(cipher, input) { + 'use strict'; + var a32 = new Int32Array(input.buffer); + var i32 = new Int32Array(a32.length + 3 & ~3); + for (var i = 0; i < a32.length; i += 4) { + var u = cipher.encrypt([a32[i], a32[i + 1], a32[i + 2], a32[i + 3]]); + i32[i] = u[0]; + i32[i + 1] = u[1]; + i32[i + 2] = u[2]; + i32[i + 3] = u[3]; + } + return i32.buffer; +}; + +/** + * Decrypt 32-bit words using AES ECB... + * @param {sjcl.cipher.aes} cipher AES cipher + * @param {ArrayBuffer} buffer Encrypted data + * @returns {ArrayBuffer} decrypted data + * @private + */ +FMDB.prototype._decrypt = function(cipher, buffer) { + 'use strict'; + var u32 = new Uint32Array(buffer); + for (var i = 0; i < u32.length; i += 4) { + var u = cipher.decrypt([u32[i], u32[i + 1], u32[i + 2], u32[i + 3]]); + u32[i + 3] = u[3]; + u32[i + 2] = u[2]; + u32[i + 1] = u[1]; + u32[i] = u[0]; + } + return u32.buffer; +}; + +/** + * Converts UTF-8 string to Unicode + * @param {ArrayBuffer} buffer Input buffer + * @returns {String} Unicode string. + */ +FMDB.prototype.from8 = function(buffer) { + 'use strict'; + + var idx = 0; + var str = ''; + var ptr = new Uint8Array(buffer); + var len = ptr.byteLength; + while (len > idx) { + var b = ptr[idx++]; + if (!b) { + return str; + } + if (!(b & 0x80)) { + str += String.fromCharCode(b); + continue; + } + + var l = ptr[idx++] & 63; + if ((b & 0xE0) === 0xC0) { + str += String.fromCharCode((b & 31) << 6 | l); + continue; + } + + var h = ptr[idx++] & 63; + if ((b & 0xF0) === 0xE0) { + b = (b & 15) << 12 | l << 6 | h; + } + else { + b = (b & 7) << 18 | l << 12 | h << 6 | ptr[idx++] & 63; + } + + if (b < 0x10000) { + str += String.fromCharCode(b); + } + else { + var ch = b - 0x10000; + str += String.fromCharCode(0xD800 | ch >> 10, 0xDC00 | ch & 0x3FF); + } + } + + return str; +}; + +/** + * Converts Unicode string to UTF-8 + * @param {String} str Input string + * @param {Number} [len] bytes to allocate + * @returns {Uint8Array} utf-8 bytes + */ +FMDB.prototype.to8 = function(str, len) { + 'use strict'; + var p = 0; + var u8 = new Uint8Array((len || this.utf8length(str)) + 3 & ~3); + + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u > 55295 && u < 57344) { + u = 0x10000 + ((u & 0x3FF) << 10) | str.charCodeAt(++i) & 0x3FF; + } + if (u < 128) { + u8[p++] = u; + } + else if (u < 2048) { + u8[p++] = 0xC0 | u >> 6; + u8[p++] = 0x80 | u & 63; + } + else if (u < 65536) { + u8[p++] = 0xE0 | u >> 12; + u8[p++] = 0x80 | u >> 6 & 63; + u8[p++] = 0x80 | u & 63; + } + else { + u8[p++] = 0xF0 | u >> 18; + u8[p++] = 0x80 | u >> 12 & 63; + u8[p++] = 0x80 | u >> 6 & 63; + u8[p++] = 0x80 | u & 63; + } + } + return u8; +}; + +/** + * Calculate the length required for Unicode to UTF-8 conversion + * @param {String} str Input string. + * @returns {Number} The length + */ +FMDB.prototype.utf8length = function(str) { + 'use strict'; + + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u > 55295 && u < 57344) { + u = 0x10000 + ((u & 0x3FF) << 10) | str.charCodeAt(++i) & 0x3FF; + } + if (u < 128) { + ++len; + } + else if (u < 2048) { + len += 2; + } + else if (u < 65536) { + len += 3; + } + else { + len += 4; + } + } + return len; +}; + +/** + * Check for needle into haystack + * @param {Array} haystack haystack + * @param {String|ArrayBuffer} needle needle + * @returns {Boolean} whether is found. + */ +FMDB.prototype.exists = function(haystack, needle) { + 'use strict'; + for (var i = haystack.length; i--;) { + if (this.equal(haystack[i], needle)) { + return true; + } + } + return false; +}; + +/** + * Check whether two indexedDB-stored values are equal. + * @param {ArrayBuffer} a1 first item to compare + * @param {ArrayBuffer} a2 second item to compere + * @returns {Boolean} true if both are deep equal + */ +FMDB.prototype.equal = function(a1, a2) { + 'use strict'; + const len = a1.byteLength; + + if (len === a2.byteLength) { + a1 = new Uint8Array(a1); + a2 = new Uint8Array(a2); + + let i = 0; + while (i < len) { + if (a1[i] !== a2[i]) { + return false; + } + ++i; + } + + return true; + } + + return false; +}; + +/** + * Check whether two indexedDB-stored values are equal. + * @param {String} a1 first item to compare + * @param {String} a2 second item to compere + * @returns {Boolean} true if both are deep equal + */ +FMDB.prototype.equals = function(a1, a2) { + 'use strict'; + return a1 === a2; +}; + +/** + * Validate store-ready entry + * @param {Object} entry An object + * @returns {Boolean} whether it is.. + * @private + */ +FMDB.prototype._raw = function(entry) { + 'use strict'; + return entry.d && entry.d.byteLength === undefined; +}; + +/** + * Get raw value for encrypted record. + * @param {String|ArrayBuffer} value Input + * @returns {String} raw value + * @private + */ +FMDB.prototype._value = function(value) { + 'use strict'; + + if (value instanceof ArrayBuffer) { + value = this.fromStore(value.slice(0)); + } + + return value; +}; + +/** + * store-agnostic value comparison. + * @param {String} table The DB table + * @param {String} key The row index. + * @param {String|ArrayBuffer} value item to compare (always encrypted) + * @param {Object} store Store containing key. (*may* not be encrypted) + * @returns {Boolean} true if both are deep equal + */ +FMDB.prototype.compare = function(table, key, value, store) { + 'use strict'; + let eq = store[key]; + + if (this._raw(store)) { + + if (!this._cache[eq]) { + this._cache[eq] = this.toStore(eq); + } + eq = this._cache[eq]; + } + + return this.equal(value, eq); +}; + +/** + * indexedDB data serialization. + * @param {String} data Input string + * @returns {*|String} serialized data (as base64, unless we have binary keys support) + */ +FMDB.prototype.toStore = function(data) { + 'use strict'; + return ab_to_base64(this.strcrypt(data)); +}; + +/** + * indexedDB data de-serialization. + * @param {TypedArray|ArrayBuffer|String} data Input data + * @returns {*} de-serialized data. + */ +FMDB.prototype.fromStore = function(data) { + 'use strict'; + return this.strdecrypt(base64_to_ab(data)); +}; + +// convert to encrypted-base64 +FMDB.prototype.toB64 = FMDB.prototype.toStore; +// convert from encrypted-base64 +FMDB.prototype.fromB64 = FMDB.prototype.fromStore; + +if (FMDB.$useBinaryKeys) { + FMDB.prototype.toStore = FMDB.prototype.strcrypt; + FMDB.prototype.fromStore = FMDB.prototype.strdecrypt; +} +else { + FMDB.prototype.equal = FMDB.prototype.equals; + + if (!FMDB.$usePostSerialz) { + FMDB.prototype.compare = FMDB.prototype.equal; + console.warn('Fix FMDB._value()....'); + } +} + +if (!FMDB.$usePostSerialz) { + FMDB.prototype.add = function fmdb_adds(table, row) { + 'use strict'; + if (!this.crashed) { + this.enqueue(table, this.serialize(table, row), 0); + } + }; + FMDB.prototype.del = function fmdb_dels(table, index) { + "use strict"; + if (!this.crashed) { + this.enqueue(table, this.toStore(index), 1); + } + }; +} + +// @private +FMDB.prototype._bench = function(v, m) { + 'use strict'; + var i; + var a = Array(1e6); + var s = + '\u0073\u0061\u006d\u0070\u006c\u0065\u0020\u0074\u0072\u0061\u006e\u0073\u006c\u0061' + + '\u0074\u0065\u003a\u0020\u5c11\u91cf\u002c\u0020\u6837\u54c1\u002c\u0020\uff08\u533b' + + '\u751f\u6216\u79d1\u5b66\u5bb6\u68c0\u6d4b\u7528\u7684\uff09\u6837\u672c\uff0c\u8bd5'; + + s = typeof v === 'string' ? v : v && JSON.stringify(v) || s; + + var enc = 'strcrypt' + (m === undefined ? '' : m); + var dec = 'strdecrypt' + (m === undefined ? '' : m); + + onIdle(function() { + console.time(enc); + for (i = a.length; i--;) { + a[i] = fmdb[enc](s); + } + console.timeEnd(enc); + }); + + onIdle(function() { + console.time(dec); + for (i = a.length; i--;) { + fmdb[dec](a[i]); + } + console.timeEnd(dec); + }); + + onIdle(function() { + console.assert(m !== undefined || fmdb.from8(a[1]).split('\0')[0] === s); + console.groupEnd(); + }); + console.group('please wait...'); +}; + + +// reliably invalidate the current database (delete the sn) +FMDB.prototype.invalidate = promisify(function(resolve, reject, readop) { + 'use strict'; + + if (this.crashed) { + return resolve(); + } + + var channels = Object.keys(this.pending); + + // erase all pending data + for (var i = channels.length; i--;) { + this.head[i] = 0; + this.tail[i] = 0; + this.pending[i] = []; + } + this._cache = Object.create(null); + + // clear the writing flag for the next del() call to pass through + this.writing = null; + + // enqueue the final _sn deletion that will mark the DB as invalid + this.del('_sn', 1); + + // prevent further reads or writes + this.crashed = readop ? 2 : 1; + + // set completion callback + this.inval_cb = function() { + // XXX: Just invalidating the DB may causes a timeout trying to open it on the next page load, since we + // do attempt to delete it when no sn is found, which would take a while to complete for large accounts. + // This is currently the 20% of hits we do receive through 99724 so from now on we will hold the current + // session until the DB has been deleted. + if (readop || !this.db) { + onIdle(resolve); + } + else { + this.db.delete().finally(resolve); + } + + this.pending = [[]]; + document.documentElement.classList.remove('fmdb-working'); + }; +}); + + +function mDBcls() { + if (fmdb && fmdb.db) { + fmdb.db.close(); + } + fmdb = null; +} + + +// -------------------------------------------------------------------------- + +/** + * Wrapper around Dexie that remembers and removes deprecated databases. + * @param {String} aUniqueID Unique Identified for this database. + * @see {@link MegaDexie.getDBName} for additional parameters. + * @details as part of this constructor, {aPayLoad} must be the schema if provided. + * @constructor + */ +class MegaDexie extends Dexie { + constructor(aUniqueID, ...args) { + const dbname = MegaDexie.getDBName(...args); + super(dbname, {chromeTransactionDurability: 'relaxed'}); + + this.__dbUniqueID = this.__fromUniqueID(aUniqueID + args[0]); + this.__rememberDBName(dbname); + + if (args[3]) { + // Schema given. + this.version(1).stores(args[3]); + } + + if (d > 2) { + MegaDexie.__dbConnections.push(this); + } + + this.onerror = null; + Object.defineProperty(this, '__bulkPutQueue', {value: Object.create(null)}); + Object.defineProperty(this, '__ident_0', {value: `megadexie.${this.__dbUniqueID}-${++mIncID}`}); + } + + get [Symbol.toStringTag]() { + return 'MegaDexie'; + } + + toString() { + return String(this._uname || this.name || this.__ident_0); + } + + put(table, data) { + const {promise} = mega; + + if (!this.__bulkPutQueue[table]) { + this.__bulkPutQueue[table] = []; + } + + // @todo deduplicate? benchmark! + this.__bulkPutQueue[table].push([promise, data]); + + delay(this.__ident_0 + table, () => { + const queue = this.__bulkPutQueue[table]; + delete this.__bulkPutQueue[table]; + + const promises = []; + const release = (res, error) => { + let meth = 'resolve'; + if (error) { + res = error; + meth = 'reject'; + } + for (let i = promises.length; i--;) { + promises[i][meth](res); + } + }; + + for (let i = queue.length; i--;) { + const [promise, data] = queue[i]; + promises.push(promise); + queue[i] = data; + } + + const bulkPut = () => this[table].bulkPut(queue).then(release); + + bulkPut().catch(async(ex) => { + let res = 0; + let failure = new MEGAException(ex.inner || ex, this, ex.name); + + if (failure.name === 'DatabaseClosedError') { + // eslint-disable-next-line local-rules/open + res = await this.open().then(bulkPut).catch(echo); + if (!res) { + if (d) { + console.debug('DB closed unexpectedly and re-opened...', this); + } + return; + } + } + + if (this.onerror) { + res = this.onerror(ex); + if (res) { + failure = null; + } + } + + this.error = ex; + return release(res, failure); + }).catch(dump); + }, 60); + + return promise; + } + + async export() { + return MegaDexie.export(this); + } + + async import(blob) { + return MegaDexie.import(blob, this); + } + + static async import(aFile, aDBInstance) { + const buf = aFile.name.endsWith('.gz') ? await M.decompress(aFile) : await M.toArrayBuffer(aFile); + const len = buf.byteLength; + assert(len > 0x10000); + + const view = new DataView(buf); + assert(view.getUint32(0) === 0x13064D44, 'Invalid file.'); + assert(view.getUint8(len - 17) === 0xEF, 'File corrupted(?)'); + + let offset = 8; + const tde = new TextDecoder(); + const readValue = () => { + const b = view.getUint8(offset); + const l = b >> 4; + const t = b & 15; + + const size = view[`getUint${l << 3}`](++offset, true); + offset += l; + + let data = buf.slice(offset, offset + size); + if (t > 1) { + data = tde.decode(data); + + switch (t) { + case 2: + data = parseInt(data, 36); + break; + case 4: + data = JSON.parse(data); + break; + } + } + + offset += size; + return data; + }; + const settings = readValue(); + assert('schema' in settings); + + const key = [ + view.getInt32(len - 16, true), + view.getInt32(len - 12, true), + view.getInt32(len - 8, true), + view.getInt32(len - 4, true) + ]; + const {u_k: uk1, u_k_aes: uk2} = window; + const keyMatch = JSON.stringify(uk1) === JSON.stringify(key); + + if (aDBInstance) { + // @todo re-encrypt'em(?) + assert(keyMatch, 'Key mismatch, cannot import.'); + } + else { + if (!keyMatch) { + u_k = key; + u_k_aes = new sjcl.cipher.aes(u_k); + } + const name = `DBImport${Math.random().toString(36)}`; + + if (settings.schema.lru) { + // eslint-disable-next-line no-use-before-define + aDBInstance = await LRUMegaDexie.create(name); + } + else { + aDBInstance = new MegaDexie('DBIMPORT', name, 'imp_', true, settings.schema); + } + + if (!keyMatch) { + u_k = uk1; + u_k_aes = uk2; + } + } + + offset = 0x10000; + while (view.getUint8(offset) !== 0xEF) { + const bulk = []; + const table = readValue(); + + while (view.getUint8(offset) !== 0xFF) { + const data = {}; + + while (view.getUint8(offset) !== 0xFE) { + const key = readValue(); + data[key] = readValue(); + } + + offset++; + bulk.push(data); + } + + offset++; + await aDBInstance[table].bulkPut(bulk); + } + + return aDBInstance; + } + + static async export(aDBInstance) { + let offset = 0; + let buf = new Uint8Array(0x1000000); + const tde = new TextEncoder(); + const gbl = (n) => n < 256 ? 1 : n < 65536 ? 2 : 4; + const rnd = (s, b = 0x100000) => (s + b & -b) >>> 0; + const types = {buffer: 1, number: 2, string: 3, object: 4}; + const put = (data, offset) => { + if (typeof data === 'number') { + data = new window[`Uint${gbl(data) << 3}Array`]([data]); + } + if (offset + data.byteLength > buf.byteLength) { + const tmp = new Uint8Array(rnd(buf.byteLength + data.byteLength)); + tmp.set(buf); + buf = tmp; + } + buf.set(new Uint8Array(data.buffer || data), offset); + return offset + data.byteLength; + }; + const add = (data, pos) => { + let t = data.byteLength >= 0 ? 'buffer' : typeof data; + if (t !== 'buffer') { + if (t === 'number') { + data = data.toString(36); + } + else if (t !== 'string') { + t = 'object'; + data = JSON.stringify(data); + } + data = tde.encode(data); + } + + const j = gbl(data.byteLength); + const p = put(data, put(data.byteLength, put(j << 4 | types[t], pos || offset))); + if (!pos) { + offset = p; + } + }; + + add('MDBv01'); + offset = 0x10000; + + const {tables} = aDBInstance; + const schema = Object.create(null); + + assert(aDBInstance instanceof Dexie && tables.length); + + for (let i = 0; i < tables.length; ++i) { + const s = []; + const table = tables[i]; + const {db, name, schema: {primKey, indexes = false}} = table; + + if (primKey) { + s.push(primKey.unique ? `&${primKey.name}` : primKey.src); + } + if (indexes.length) { + s.push(...indexes.map((i) => i.src)); + } + + add(name); + schema[name] = s.join(', '); + + const res = await db[name].toArray(); + for (let i = res.length; i--;) { + const e = res[i]; + + for (const k in e) { + add(k); + add(e[k]); + } + + put(0xfe, offset++); + } + + put(0xff, offset++); + } + + add({schema}, 8); + buf = buf.slice(0, put(new Uint32Array(u_k), put(0xef, offset))); + + const {_uname, name} = aDBInstance; + const data = await M.compress(buf).catch(nop); + const filename = `mega-dbexport.${_uname || name || aDBInstance}`; + + return M.saveAs(data || buf, data ? `${filename}.gz` : filename); + } +} + +/** + * Helper to create common database names. + * @param {String} aName The main name. + * @param {String} [aIdent] Identity (added to the db name as-is) + * @param {Boolean} [aTagUser] Whether this database is user-specific + * @param {*} [aPayload] Some serializable data to randomize the db name + * @param {*} [aPersistent] Whether this database is persistent, true by default. + * @returns {String} encrypted database name + */ +MegaDexie.getDBName = function(aName, aIdent, aTagUser, aPayload, aPersistent) { + 'use strict'; + if (typeof u_k_aes === 'undefined') { + if (window.u_k) { + throw new Error('Invalid account state.'); + } + window.u_k_aes = new sjcl.cipher.aes(str_to_a32('' + ua).slice(-4)); + console.warn('MegaDexie.getDBName: Adding temporal key for non-logged user.'); + } + var pex = aPersistent === false ? '' : FMDB.perspex; + aPayload = aPayload && MurmurHash3(JSON.stringify(aPayload)).toString(16) || ''; + return (aIdent || '') + FMDB.prototype.toB64(aPayload + aName + (aTagUser ? u_handle : '')) + pex; +}; + +/** + * The missing Dexie.bulkUpdate + * @param {String} [table] Optional Dexie table + * @param {Array} bulkData Bulk data + * @returns {Promise} promise + */ +MegaDexie.prototype.bulkUpdate = promisify(function(resolve, reject, table, bulkData) { + 'use strict'; + + if (typeof table !== 'string') { + bulkData = table; + table = this.tables; + table = table.length === 1 && table[0].name; + } + + if (!bulkData.length) { + return resolve(bulkData); + } + table = this.table(table); + + var i; + var keyPath; + var anyOf = []; + var schema = table.schema; + var indexes = schema.indexes; + + for (i = 0; i < indexes.length; ++i) { + if (indexes[i].unique) { + keyPath = indexes[i].keyPath; + break; + } + } + + for (i = bulkData.length; i--;) { + var v = bulkData[i][keyPath || schema.primKey.keyPath]; + + if (FMDB.prototype.exists(anyOf, v)) { + bulkData.splice(i, 1); + } + else { + anyOf.push(v); + } + } + + (keyPath ? table.where(keyPath).anyOf(anyOf).toArray() : table.bulkGet(anyOf)) + .then(function(r) { + var toUpdate = []; + + keyPath = keyPath || schema.primKey.keyPath; + for (var i = r.length; i--;) { + for (var j = r[i] && bulkData.length; j--;) { + if (FMDB.prototype.equal(r[i][keyPath], bulkData[j][keyPath])) { + delete bulkData[j][keyPath]; + toUpdate.push([r[i], bulkData.splice(j, 1)[0]]); + break; + } + } + } + + var tasks = toUpdate.map(function(u) { + return table.where(":id").equals(u[0][schema.primKey.keyPath]).modify(u[1]); + }); + if (bulkData.length) { + tasks.push(table.bulkPut(bulkData)); + } + return Promise.all(tasks); + }) + .then(resolve) + .catch(reject); +}); + +/** + * Remember newly opened database. + * @param {String} aDBName The database being opened. + * @returns {void} + * @private + */ +MegaDexie.prototype.__rememberDBName = function(aDBName) { + 'use strict'; + var aUniqueID = this.__dbUniqueID; + + MegaDexie.__knownDBNames.get(aUniqueID) + .then(function(s) { + if (s) { + if (s.v === aDBName) { + return; + } + Dexie.delete(s.v).then(nop).catch(dump); + } + return MegaDexie.__knownDBNames.put({k: aUniqueID, t: Date.now() - 1589e9, v: aDBName}); + }) + .catch(nop); + + this.__checkStaleDBNames(); +}; + +/** + * Forget database. + * @returns {void} + * @private + */ +MegaDexie.prototype.__forgetDBName = function() { + 'use strict'; + MegaDexie.__knownDBNames.delete(this.__dbUniqueID).then(nop).catch(dump); +}; + +MegaDexie.prototype.__checkStaleDBNames = function() { + 'use strict'; + + if (MegaDexie.__staleDBsChecked) { + return; + } + + var canQueryDatabases = typeof Object(window.indexedDB).databases === 'function'; + MegaDexie.__staleDBsChecked = canQueryDatabases ? true : -1; + + if (canQueryDatabases) { + setTimeout(function() { + var databases = []; + + if (d) { + console.debug('Checking stale databases...'); + } + + indexedDB.databases() + .then(function(r) { + for (var i = r.length; i--;) { + console.assert(r[i].name); + if (r[i].name) { + databases.push(r[i].name); + } + } + + return databases.length ? MegaDexie.__knownDBNames.toArray() : Promise.resolve([]); + }) + .then(function(r) { + var stale = []; + + for (var i = r.length; i--;) { + if (databases.indexOf(r[i].v) < 0) { + if (d) { + console.warn('Found stale database...', r[i].v); + } + stale.push(r[i].k); + } + } + + if (stale.length) { + MegaDexie.__knownDBNames.bulkDelete(stale).then(nop).catch(dump); + } + else { + console.debug('Yay, no stale databases found.'); + } + }) + .catch(nop); + }, 4e4); + } +}; + +/** + * Hash unique identifier + * @param {Number|String} aUniqueID Unique Identifier for database. + * @returns {Number} hash + * @private + */ +MegaDexie.prototype.__fromUniqueID = function(aUniqueID) { + 'use strict'; + return MurmurHash3('mega' + aUniqueID + window.u_handle, -0x9fffee); +}; + +/** + * Deletes the database. + * @returns {Promise} promise + */ +MegaDexie.prototype.delete = function() { + 'use strict'; + this.__forgetDBName(); + return Dexie.prototype.delete.apply(this, arguments); +}; + +/** + * Open the database. + * @returns {Promise} promise + */ +MegaDexie.prototype.open = function() { + 'use strict'; + this.__rememberDBName(this.name); + return Dexie.prototype.open.apply(this, arguments); +}; + +/** + * @name __knownDBNames + * @memberOf MegaDexie + */ +lazy(MegaDexie, '__knownDBNames', function() { + 'use strict'; + var db = new Dexie('$kdbn', {addons: []}); + db.version(1).stores({k: '&k'}); + return db.table('k'); +}); + +/** + * @name getDatabaseNames + * @memberOf MegaDexie + */ +lazy(MegaDexie, 'getDatabaseNames', () => { + 'use strict'; + if (typeof Object(window.indexedDB).databases === 'function') { + return async() => { + const dbs = await indexedDB.databases(); + return dbs.map(obj => obj.name); + }; + } + return async() => { + const dbs = await MegaDexie.__knownDBNames.toArray(); + return dbs.map(obj => obj.v); + }; +}); + +// @private +MegaDexie.__dbConnections = []; + +/** + * Creates a new database layer, which may change at anytime, and thus with + * the only assertion the instance returned will have set/get/remove methods + * @param {String} name Database name. + * @param {Boolean|Number} binary mode + * @returns {*} database instance. + */ +MegaDexie.create = function(name, binary) { + 'use strict'; + binary = binary && SharedLocalKVStorage.DB_MODE.BINARY; + return new SharedLocalKVStorage.Utils.DexieStorage('mdcdb:' + name, binary); +}; + +// -------------------------------------------------------------------------- + +class LRUMegaDexie extends MegaDexie { + constructor(name, options = 4e3) { + options = typeof options === 'number' ? {limit: options} : options; + + super('LRUMMDB', name, options.pfx || 'lru_', true, { + lru: '&k', + data: '&h, ts' + }); + + this.options = options; + + if (LRUMegaDexie.wSet) { + this._uname = name; + LRUMegaDexie.wSet.add(this); + } + + LRUMegaDexie.hookErrorHandlers(this); + } + + get [Symbol.toStringTag]() { + return 'LRUMegaDexie'; + } + + async setup(options = false, key = null) { + + if (key) { + const algo = { + ...key.algorithm, + tagLength: 32, + iv: options.iv || new Uint32Array(u_k_aes._key[0].slice(4, 7)) + }; + const view = new DataView(algo.iv.buffer); + let ctr = Math.random() * 0x1000000 >>> 0; + + Object.defineProperties(this, { + encrypt: { + value: async(data) => { + view.setUint32(0, ++ctr, true); + const encrypted = new Uint8Array(data.byteLength + 8); + const payload = new DataView(encrypted.buffer, 0, 4); + payload.setUint32(0, ctr, true); + algo.additionalData = payload; + encrypted.set(new Uint8Array(await crypto.subtle.encrypt(algo, key, data)), 4); + return encrypted.buffer; + } + }, + decrypt: { + value: async(data) => { + const payload = new DataView(data, 0, 4); + const ctr = payload.getUint32(0, true); + view.setUint32(0, ctr, true); + algo.additionalData = payload; + return crypto.subtle.decrypt(algo, key, new DataView(data, 4)) + .catch((ex) => { + const msg = `LRUMegaDexie(${this}) decrypt error: ${ex.message || ex.name}`; + throw new MEGAException(msg, ex, ex.name || 'DataCloneError'); + }); + } + } + }); + } + + return this.update(options); + } + + async update(options) { + this.options = Object.assign({}, (await this.lru.get('options') || {}).value, this.options, options); + + delete this.options.iv; + const promises = [this.lru.put({k: 'options', value: Object.setPrototypeOf(this.options, null)})]; + + for (const k in this.options) { + promises.push(this.lru.put({k, value: this.options[k]})); + } + + this.drain(); + await Promise.all(promises); + return this; + } + + async find(h) { + return this.data.exists(h); + } + + async has(h) { + return !!await this.find(h); + } + + async get(h) { + // @todo FIXME improve Collection.modify() to NOT retrieve WHOLE rows + // const coll = this.data.where('h').equals(h); + // const {data} = await coll.first() || false; + // return data && (await Promise.all([coll.modify({ts: Date.now()}), this.decrypt(data)]))[1]; + + const {data} = await this.data.get(h) || false; + if (data) { + this.put('data', {h, data, ts: Date.now()}).catch(dump); + return this.decrypt(data); + } + } + + async set(h, data) { + assert(data.byteLength > 16); + data = await this.encrypt(data); + delay(this.name, () => this.drain(), 9e3); + return this.put('data', {h, data, ts: Date.now()}); + } + + async bulkGet(bulk, err = {}) { + const now = Date.now(); + const res = Object.create(null); + + if (bulk) { + bulk = await this.data.bulkGet(bulk); + } + else { + bulk = await this.data.orderBy('ts').toArray(); + } + + for (let i = bulk.length; i--;) { + const e = bulk[i]; + + if (e) { + const value = await this.decrypt(e.data) + .catch((ex) => { + err[e.h] = {ts: new Date(e.ts).toISOString(), bytes: e.data.byteLength, ex}; + }); + + if (value) { + e.ts = now; + res[e.h] = value; + continue; + } + } + + bulk.splice(i, 1); + } + + + if (d && $.len(err)) { + console.group(`LRUMegaDexie.bulkGet(${this}) errors found...`); + console.table(err); + console.groupEnd(); + } + + this.data.bulkPut(bulk) + .catch((ex) => { + if (d) { + console.warn(`${this}: ${ex}`, ex); + } + return bulk.map((e) => this.put('data', e)); + }); + + return res; + } + + drain() { + this.data.count() + .then(count => count > this.options.limit && this.data.orderBy('ts').limit(count / 10 | 1).primaryKeys()) + .then(keys => keys && this.data.bulkDelete(keys)) + .catch(dump); + } + + encrypt(data) { + return data; + } + + decrypt(data) { + return data; + } +} + +/** @property LRUMegaDexie.create */ +lazy(LRUMegaDexie, 'create', () => { + 'use strict'; + const parity = lazy(Object.create(null), 'key', () => { + return crypto.subtle.importKey( + "raw", + new Uint32Array(u_k_aes._key[0].slice(0, 4)), + {name: "AES-GCM"}, + false, + ["encrypt", "decrypt"] + ); + }); + + const extend = (obj) => { + if (obj instanceof LRUMap) { + const {get, set} = obj; + + Object.defineProperties(obj, { + get: { + value: async function(...args) { + return get.apply(this, args); + } + }, + bulkGet: { + value: async function(bulk) { + return bulk.reduce((target, e) => { + const value = get.call(this, e); + if (value) { + target[e] = value; + } + return target; + }, Object.create(null)); + } + }, + set: { + value: async function(...args) { + return set.apply(this, args); + } + }, + find: { + value: async function(keys) { + const res = []; + for (let i = keys.length; i--;) { + if (this.has(keys[i])) { + res.push(keys[i]); + } + } + return res; + } + } + }); + } + + return obj; + }; + + return async(name, options) => { + const db = await new LRUMegaDexie(name, options).setup(options, await parity.key).catch(dump); + if (d && !db) { + console.warn('LRU cannot be backed by DB, using memory-only instead...', name); + } + return extend(db || new LRUMap(Math.max(256, (options && options.limit || options) >> 3))); + }; +}); + +Object.defineProperties(LRUMegaDexie, { + wSet: { + value: self.d > 0 && new IWeakSet() + }, + errorHandler: { + value: (ev) => { + 'use strict'; + const message = String(((ev.target || ev).error || ev.inner || ev).message || ev.type || ev); + + if (d) { + console.warn(`LRUMegaDexie error (${ev.type || ev.name})`, message, [ev]); + } + + if (ev.type !== 'close' && !/\s(?:clos[ei]|delet[ei])/.test(message)) { + eventlog(99748, message.split('\n')[0].substr(0, 300), true); + } + + // drop all LRU-based databases. + LRUMegaDexie.drop().catch(dump); + } + }, + hookErrorHandlers: { + value: (lru) => { + 'use strict'; + if (!lru.idbdb) { + return lru.on('ready', () => LRUMegaDexie.hookErrorHandlers(lru)); + } + const {onabort, onerror} = lru.idbdb; + + lru.idbdb.onabort = lru.idbdb.onerror = (ev) => { + LRUMegaDexie.errorHandler(ev); + return ev.type === 'abort' ? onabort && onabort(ev) : onerror && onerror(ev); + }; + + lru.on('close', lru.onerror = LRUMegaDexie.errorHandler); + } + }, + drop: { + value: async() => { + 'use strict'; + const dbs = await MegaDexie.getDatabaseNames(); + return Promise.all(dbs.filter(n => n.startsWith('lru_')).map(n => Dexie.delete(n))); + } + }, + verify: { + value: async() => { + 'use strict'; + const stats = {}; + + for (const db of LRUMegaDexie.wSet) { + const err = {}; + const res = await db.bulkGet(0, err); + const nid = `${db.name} (${db._uname})`; + const ecn = $.len(err); + const cnt = $.len(res) + ecn; + + let bytes = 0; + let errors = 0; + + if (ecn) { + bytes = Object.values(err) + .reduce((n, o) => { + n += o.bytes; + return n; + }, 0); + errors = `${ecn} (${parseFloat(ecn * 100 / cnt).toFixed(2)}%, ${bytesToSize(bytes)})`; + } + + for (const k in res) { + bytes += res[k].byteLength; + } + + if (bytes > 1e6) { + bytes = `${bytes} (${bytesToSize(bytes)})`; + } + stats[nid] = {bytes, records: cnt, errors}; + } + console.table(stats); + } + }, + size: { + get() { + 'use strict'; + const {promise} = mega; + + let name; + const seen = {total: {bytes: 0}}; + const store = (row) => { + const {byteLength} = row.data; + seen[name].bytes += byteLength; + seen.total.bytes += byteLength; + }; + + (async(obj) => { + for (const db of obj) { + name = `${db.name} (${db._uname})`; + seen[name] = {bytes: 0}; + await db.data.each(store); + } + console.table(seen); + promise.resolve(seen.total); + })(LRUMegaDexie.wSet); + + return promise; + } + } +}); + +// -------------------------------------------------------------------------- +// -------------------------------------------------------------------------- + +/** + * Helper functions to retrieve nodes from indexedDB. + * @name dbfetch + * @memberOf window + */ +Object.defineProperty(self, 'dbfetch', (function() { + 'use strict'; + const node_inflight = new Set(); + const tree_inflight = Object.create(null); + + const getNode = (h, cb) => { + if (M.d[h]) { + return cb(M.d[h]); + } + fmdb.getbykey('f', 'h', ['h', [h]]) + .always(function(r) { + if (r.length) { + emplacenode(r[0], true); + } + cb(M.d[h]); + }); + + }; + + const emplace = (r, noc) => { + for (let i = r.length; i--;) { + emplacenode(r[i], noc); + } + }; + + const showLoading = (h) => { + $.dbOpenHandle = h; + document.documentElement.classList.add('wait-cursor'); + }; + const hideLoading = (h) => { + if ($.dbOpenHandle === h) { + $.dbOpenHandle = false; + document.documentElement.classList.remove('wait-cursor'); + } + }; + + const dbfetch = Object.assign(Object.create(null), { + /** + * Retrieve root nodes only, on-demand node loading mode. + * or retrieve whole 'f' table in chunked mode. + * @returns {Promise} fulfilled on completion + * @memberOf dbfetch + */ + async init() { + + if (M.RootID || !mBroadcaster.crossTab.master) { + // fetch the whole cloud on slave tabs.. + return M.RootID || fmdb.get('f', (res) => emplace(res)); + } + + // fetch the three root nodes + const r = await fmdb.getbykey('f', 'h', ['s', ['-2', '-3', '-4']]); + + emplace(r); + if (!r.length || !M.RootID) { + throw new Error('indexedDB corruption!'); + } + + // fetch all top-level nodes + emplace(await fmdb.getbykey('f', 'h', ['p', [M.RootID, M.InboxID, M.RubbishID]])); + }, + + /** + * Check whether a node is currently loading from DB. + * @param {String} handle The ufs-node handle + * @returns {Boolean} whether it is. + */ + isLoading: function(handle) { + return !!(tree_inflight[handle] || node_inflight.lock || node_inflight.size && node_inflight.has(handle)); + }, + + /** + * Fetch all children; also, fetch path to root; populates M.c and M.d in streaming mode + * + * @param {String} handle Node handle + * @param {MegaPromise} [waiter] waiting parent + * @returns {*|MegaPromise} + * @memberOf dbfetch + */ + open: promisify((resolve, reject, handle, waiter) => { + const fail = (ex) => { + reject(ex); + hideLoading(handle); + queueMicrotask(() => { + if (tree_inflight[handle] === waiter) { + delete tree_inflight[handle]; + } + waiter.reject(ex); + }); + }; + const done = (res) => { + if (resolve) { + resolve(res); + } + hideLoading(handle); + queueMicrotask(() => { + if (tree_inflight[handle] === waiter) { + delete tree_inflight[handle]; + } + waiter.resolve(handle); + }); + }; + + // Dear ESLint, this is not a window.open call. + // eslint-disable-next-line local-rules/open + let ready = (n) => dbfetch.open(n.p).catch(nop); + + if (typeof handle !== 'string' || handle.length !== 8) { + return resolve(handle); + } + var silent = waiter === undefined; + + if (silent) { + waiter = mega.promise; + waiter.catch(nop); + } + else { + showLoading(handle); + } + + if (tree_inflight[handle]) { + if (M.c[handle]) { + queueMicrotask(resolve); + resolve = null; + } + return tree_inflight[handle].then(done).catch(fail); + } + tree_inflight[handle] = waiter; + + getNode(handle, (n) => { + if (!n) { + return fail(ENOENT); + } + if (!n.t || M.c[n.h]) { + return ready(n).finally(done); + } + if (!silent) { + showLoading(handle); + } + + let promise; + const opts = { + limit: 4, + offset: 0, + where: [['p', handle]] + }; + const ack = (res) => { + if (ready) { + promise = ready(n).finally(resolve); + ready = resolve = null; + } + else if (res) { + promise.finally(() => { + newnodes = newnodes.concat(res); + queueMicrotask(() => { + M.updFileManagerUI().dump(`dbf-open-${opts.i || handle}`); + }); + }); + } + return promise; + }; + + if (d) { + opts.i = `${makeid(9)}.${handle}`; + } + + fmdb.getchunk('f', opts, (r) => { + if (!opts.offset) { + M.c[n.h] = Object.create(null); + } + + opts.offset += opts.limit; + if (opts.limit < 4096) { + opts.limit <<= 2; + } + + emplace(r); + ack(r); + + }).catch(dump).finally(() => (promise || ack()).finally(done)); + }); + }), + + /** + * Fetch all children; also, fetch path to root; populates M.c and M.d + * + * @param {String} parent Node handle + * @returns {Promise} none + * @memberOf dbfetch + */ + async get(parent) { + + if (d > 1) { + console.warn('dbfetch.get(%s)', parent); + } + + if (typeof parent !== 'string') { + throw new Error(`Invalid parent, cannot fetch children for ${parent}`); + } + + // is this a user handle or a non-handle? no fetching needed. + while (parent.length === 8) { + + // has the parent been fetched yet? + if (!M.d[parent]) { + const r = await fmdb.getbykey('f', 'h', ['h', [parent]]); + if (r.length > 1) { + console.error(`Unexpected number of result for node ${parent}`, r.length, r); + } + + // providing a 'true' flag so that the node isn't added to M.c, + // otherwise crawling back to the parent won't work properly. + emplace(r, true); + + if (!M.d[parent]) { + // no parent found?! + break; + } + } + + // have the children been fetched yet? + if (M.d[parent].t && !M.c[parent]) { + // no: do so now. + await this.tree([parent], 0); + + if (!M.c[parent]) { + if (d) { + console.error(`Failed to fill M.c for folder node ${parent}...!`, M.d[parent]); + } + eventlog(99667); + break; + } + } + + // crawl back to root (not necessary until we start purging from memory) + parent = M.d[parent].p; + } + }, + + /** + * Fetch all children; also, fetch path to root; populates M.c and M.d + * same as fetchchildren/dbfetch.get, but takes an array of handles. + * + * @param {Array} handles ufs-node handles + * @returns {Promise} settle + * @memberOf dbfetch + */ + async geta(handles) { + // if (handles.length < 2) { + // return handles.length && this.get(handles[0]); + // } + emplace(await fmdb.getbykey('f', 'h', ['h', handles.filter(h => !M.d[h])]), true); + + let bulk = handles.filter(h => M.d[h] && M.d[h].t && !M.c[h]); + if (bulk.length) { + await this.tree(bulk, 0); + } + + bulk = new Set(); + for (let i = handles.length; i--;) { + const n = M.d[handles[i]]; + if (n && n.p) { + bulk.add(n.p); + } + } + return bulk.size && this.geta([...bulk]); + }, + + /** + * Fetch entire subtree. + * + * @param {Array} parents Node handles + * @param {Number} [level] Recursion level, optional + * @returns {Promise} + * @memberOf dbfetch + */ + async tree(parents, level = -1) { + if (!fmdb) { + throw new Error('Invalid operation, FMDB is not available.'); + } + const inflight = new Set(); + const {promise} = mega; + + // check which parents have already been fetched - no need to fetch those + // (since we do not purge loaded nodes, the presence of M.c for a node + // means that all of its children are guaranteed to be in memory.) + while (parents.length) { + const p = []; + for (let i = parents.length; i--;) { + const h = parents[i]; + if (tree_inflight[h]) { + inflight.add(tree_inflight[h]); + } + else if (!M.c[h]) { + tree_inflight[h] = promise; + p.push(h); + } + } + + if (p.length) { + + // fetch children of all unfetched parents + const r = await fmdb.getbykey('f', 'h', ['p', [...p]]); + + // store fetched nodes + for (let i = p.length; i--;) { + delete tree_inflight[p[i]]; + + // M.c should be set when *all direct* children have + // been fetched from the DB (even if there are none) + M.c[p[i]] = Object.create(null); + } + + emplace(r); + p.length = 0; + } + + if (level--) { + // extract parents from children + for (let i = parents.length; i--;) { + for (const h in M.c[parents[i]]) { + // with file versioning, files can have children, too! + if (M.d[h].t || M.d[h].tvf) { + p.push(h); + } + } + } + } + + parents = p; + } + + promise.resolve(); + return inflight.size ? Promise.allSettled([...inflight, promise]) : promise; + }, + + /** + * Throttled version of {@link dbfetch.get} to issue a single DB request for a bunch of node retrievals at once. + * @param {String|Array} h uts-node handle, or an array of them. + * @returns {Promise} promise + */ + async acquire(h) { + if (Array.isArray(h)) { + h.forEach(node_inflight.add, node_inflight); + } + else { + node_inflight.add(h); + } + + if (d) { + console.debug('acquiring node', h); + } + + do { + await tSleep(0.2); + } + while (node_inflight.lock); + + if (node_inflight.size) { + const handles = [...node_inflight]; + + node_inflight.clear(); + node_inflight.lock = true; + + if (d) { + console.warn('acquiring nodes...', handles); + } + + await this.geta(handles); + node_inflight.lock = false; + } + }, + + /** + * Retrieve nodes by handle. + * WARNING: emplacenode() is not used, it's up to the caller if so desired. + * + * @param {Array} handles + * @returns {Promise} + * @memberOf dbfetch + */ + async node(handles) { + const result = []; + + for (let i = handles.length; i--;) { + if (M.d[handles[i]]) { + result.push(M.d[handles[i]]); + handles.splice(i, 1); + } + } + + if (!handles.length || !fmdb) { + if (d && handles.length) { + console.warn('Unknown nodes: ' + handles); + } + return result; + } + + const r = await fmdb.getbykey('f', 'h', ['h', [...handles]]); + if (d && handles.length < 2 && r.length > 1) { + console.error('Unexpected DB reply, more than a single node returned.'); + } + + return result.length ? [...result, ...r] : r; + }, + + /** + * Retrieve a node by its hash. + * + * @param hash + * @returns {Promise} + * @memberOf dbfetch + */ + async hash(hash) { + if (M.h[hash]) { + for (const h of M.h[hash]) { + if (M.d[h]) { + return M.d[h]; + } + } + } + + const [n] = await fmdb.getbykey('f', 'c', false, [['c', hash]], 1); + if (n) { + // got the hash and a handle it belong to + if (!M.h[hash]) { + M.h[hash] = new Set(); + } + M.h[hash].add(n.h); + } + return n; + }, + + async media(limit = 2e3, onchunk = null) { + if (fmdb) { + if (typeof limit === 'function') { + onchunk = limit; + limit = 2e3; + } + + const options = { + limit, + query(t) { + return t.where('fa').notEqual(fmdb.toStore('')); + } + }; + + if (onchunk) { + return fmdb.getchunk('f', options, onchunk); + } + + delete options.limit; + return fmdb.getbykey('f', options); + } + }, + + /** + * Fetch all children recursively; also, fetch path to root + * + * @param {Array} handles + * @returns {Promise} + * @memberOf dbfetch + */ + async coll(handles) { + if (!fmdb) { + return; + } + + // fetch nodes and their path to root + await this.geta(handles); + + const folders = []; + for (let i = handles.length; i--;) { + const n = M.d[handles[i]]; + if (n && (n.t || n.tvf)) { + folders.push(n.h); + } + } + + if (folders.length) { + await dbfetch.tree(folders); + } + } + }); + + return {value: Object.freeze(dbfetch)}; +})()); + +/* Collect entropy from mouse motion and key press events + * Note that this is coded to work with either DOM2 or Internet Explorer + * style events. + * We don't use every successive mouse movement event. + * Instead, we use some bits from random() to determine how many + * subsequent mouse movements we ignore before capturing the next one. + * + * Collected entropy is used to salt asmCrypto's PRNG. + * + * mouse motion event code originally from John Walker + * key press timing code thanks to Nigel Johnstone */ + +var lastactive = Date.now(); + +var bioSeed = new Uint32Array(256); +var bioCounter = 0; + +var mouseMoveSkip = 0; // Delay counter for mouse entropy collection + +// ---------------------------------------- + +if (window.performance !== undefined && window.performance.now !== undefined) { + // Though `performance.now()` SHOULD be accurate to a microsecond, + // spec says it's implementation-dependant (http://www.w3.org/TR/hr-time/#sec-DOMHighResTimeStamp) + // That's why 16 least significan bits are returned + var timeValue = function() { + return (window.performance.now() * 1000) & 0xffff + }; +} +else { + if (d) { + console.warn("Entropy collector uses low-precision Date.now()"); + } + var timeValue = function() { + return Date.now() & 0xffff + }; +} + +function keyPressEntropy(e) { + 'use strict'; + lastactive = Date.now(); + + bioSeed[bioCounter++ & 255] ^= (e.keyCode << 16) | timeValue(); + + if (typeof onactivity === 'function') { + delay('ev:on.activity', onactivity, 800); + } +} + +var mouseApiRetryT = false; + +function mouseMoveEntropy(e) { + 'use strict'; + lastactive = Date.now(); + + var v = (((e.screenX << 8) | (e.screenY & 255)) << 16) | timeValue(); + + if (saveRandSeed.needed) { + if (bioCounter < 45) { + // `bioCounter` is incremented once per 4 move events in average + // 45 * 4 = 180 first move events should provide at about 270 bits of entropy + // (conservative estimation is 1.5 bits of entropy per move event) + asmCrypto.random.seed(new Uint32Array([v])); + } + else { + if (d) { + console.log("Got the first seed for future PRNG reseeding"); + } + saveRandSeed(); + } + } + + if (mouseMoveSkip-- <= 0) { + bioSeed[bioCounter++ & 255] ^= v; + + mouseMoveSkip = (Math.random() * 8) | 0; + + if ((bioCounter & 255) === 0) { + if (d) { + console.log("Reseeding PRNG with collected entropy"); + } + asmCrypto.random.seed(bioSeed); + saveRandSeed(); + } + } + + if (!mouseApiRetryT || mouseApiRetryT < lastactive) { + mouseApiRetryT = lastactive + 2000; + api_retry(); + } + + if (typeof onactivity === 'function') { + delay('ev:on.activity', onactivity, 700); + } +} + +// Store some random bits for reseeding RNG in the future +function saveRandSeed() { + 'use strict'; + // @todo move this out of localStorage.. + tryCatch(() => { + const randseed = new Uint8Array(32); + asmCrypto.getRandomValues(randseed); + localStorage.randseed = base64urlencode(asmCrypto.bytes_to_string(randseed)); + })(); + saveRandSeed.needed = false; +} +saveRandSeed.needed = !localStorage.randseed; + +// ---------------------------------------- + +function eventsEnd() { + if (document.removeEventListener) { + document.removeEventListener("mousemove", mouseMoveEntropy, false); + document.removeEventListener("keypress", keyPressEntropy, false); + } + else if (document.detachEvent) { + document.detachEvent("onmousemove", mouseMoveEntropy); + document.detachEvent("onkeypress", keyPressEntropy); + } +} + +// Start collection of entropy. + +function eventsCollect() { + 'use strict'; + if (!d) { + asmCrypto.random.skipSystemRNGWarning = true; + } + + if (localStorage.randseed) { + if (d) { + console.log("Initially seeding PRNG with a stored seed"); + } + asmCrypto.random.seed(asmCrypto.string_to_bytes(base64urldecode(localStorage.randseed))); + } + + if (mega.getRandomValues.strong) { + if (d > 1) { + console.log("Initially seeding PRNG with strong random values"); + } + asmCrypto.random.seed(mega.getRandomValues(384)); + } + + if ((document.implementation.hasFeature("Events", "2.0")) + && document.addEventListener) // Document Object Model (DOM) 2 events + { + document.addEventListener("mousemove", mouseMoveEntropy, false); + document.addEventListener("keypress", keyPressEntropy, false); + } + else if (document.attachEvent) // IE 5 and above event model + { + document.attachEvent("onmousemove", mouseMoveEntropy); + document.attachEvent("onkeypress", keyPressEntropy); + } +} + +// keyboard/mouse entropy +mBroadcaster.once('boot_done', eventsCollect); + +/** + * MEGA Data Structures + * Modern/unified way of handling/monitoring/syncing data changes required for the Webclient to work in a more: + * 1. easy to use by us (developers) + * 2. reactive/optimised way + */ + +(function _dataStruct(global) { +'use strict'; + +var dsIncID = 0; + +var VALUE_DESCRIPTOR = {configurable: true, value: null}; +function _defineValue(target, prop, value) { + VALUE_DESCRIPTOR.value = value; + Object.defineProperty(target, prop, VALUE_DESCRIPTOR); + VALUE_DESCRIPTOR.value = null; +} + +var VNE_DESCRIPTOR = {configurable: true, writable: true, value: null}; +function _defineNonEnum(target, prop, value) { + VNE_DESCRIPTOR.value = value; + Object.defineProperty(target, prop, VNE_DESCRIPTOR); + VNE_DESCRIPTOR.value = null; +} + +function _cmp(a, b) { + return a === b || a === null && b === undefined || b === null && a === undefined; +} + +function _timing(proto, min, max) { + min = min || 10; + max = max || 70; + var wrap = function(f, m) { + return function(...args) { + var t = performance.now(); + var r = m.apply(this, args); + if ((t = performance.now() - t) > min) { + var fn = t > max ? 'error' : 'warn'; + console[fn]('[timing] %s.%s: %fms', this, f, t, [this], args); + } + return r; + }; + }; + proto = proto.prototype || proto; + var keys = Object.keys(proto); + + console.warn('timing %s...', Object(proto.constructor).name || '', keys); + + for (var i = keys.length; i--;) { + if (typeof proto[keys[i]] === 'function') { + proto[keys[i]] = wrap(keys[i], proto[keys[i]]); + } + } + + return proto; +} + +const _warnOnce = SoonFc(400, function _warnOnce(where, ...args) { + const prop = `__warn_once_${MurmurHash3(args[0], -0x7ff)}`; + + if (!where[prop]) { + _defineNonEnum(where, prop, 1); + console.warn.apply(console, args); + } +}); + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +function MegaDataEvent(src, target) { + if (typeof src === 'object') { + this.originalEvent = src; + + if (src.defaultPrevented || src.defaultPrevented === undefined + && src.returnValue === false || src.isDefaultPrevented && src.isDefaultPrevented()) { + + this.isDefaultPrevented = returnTrue; + } + } + else { + src = {type: src}; + } + + this.type = src.type; + this.target = src.target || target; +} + +inherits(MegaDataEvent, null); + +MegaDataEvent.prototype.isDefaultPrevented = returnFalse; +MegaDataEvent.prototype.isPropagationStopped = returnFalse; + +MegaDataEvent.prototype.preventDefault = function() { + this.isDefaultPrevented = returnTrue; + if (this.originalEvent) { + this.originalEvent.preventDefault(); + } +}; + +MegaDataEvent.prototype.stopPropagation = function() { + this.isPropagationStopped = returnTrue; + if (this.originalEvent) { + this.originalEvent.stopPropagation(); + } +}; + +// Very simple replacement for jQuery.event +function MegaDataEmitter() { + /* dummy */ +} + +inherits(MegaDataEmitter, null); + +_defineValue(MegaDataEmitter, 'seen', Object.create(null)); +_defineValue(MegaDataEmitter, 'expando', '__event_emitter_' + (Math.random() * Math.pow(2, 56) - 1)); + +/** @function MegaDataEmitter.getEmitter */ +_defineValue(MegaDataEmitter, 'getEmitter', function(event, target) { + var emitter = target[MegaDataEmitter.expando]; + if (!emitter) { + emitter = Object.create(null); + _defineValue(target, MegaDataEmitter.expando, emitter); + } + var pos; + var src = event.type && event; + var types = String(event.type || event).split(/\s+/).filter(String); + var namespaces = Array(types.length); + + for (var i = types.length; i--;) { + namespaces[i] = ''; + if ((pos = types[i].indexOf('.')) >= 0) { + namespaces[i] = types[i].substr(pos + 1).split('.').sort().join('.'); + types[i] = types[i].substr(0, pos); + } + } + return {types: types, namespaces: namespaces, event: src || types[0], events: emitter}; +}); + +/** @function MegaDataEmitter.wrapOne */ +_defineValue(MegaDataEmitter, 'wrapOne', function(handler) { + return function _one(event) { + this.off(event, _one); + return handler.apply(this, arguments); + }; +}); + +MegaDataEmitter.prototype.off = function(event, handler) { + if (event instanceof MegaDataEvent) { + event.currentTarget.off(event.type + (event.namespace ? '.' + event.namespace : ''), handler); + return this; + } + + var emitter = MegaDataEmitter.getEmitter(event, this); + for (var j = emitter.types.length; j--;) { + var type = emitter.types[j]; + var namespace = emitter.namespaces[j]; + var handlers = emitter.events[type] || []; + + for (var i = handlers.length; i--;) { + var tmp = handlers[i]; + + if (type === tmp.type + && (!handler || handler.pid === tmp.pid) + && (!namespace || namespace === tmp.namespace)) { + + handlers.splice(i, 1); + } + } + + if (!handlers.length) { + delete emitter.events[type]; + } + } + + return this; +}; + +MegaDataEmitter.prototype.one = function(event, handler, data) { + return this.on(event, handler, data, true); +}; + +MegaDataEmitter.prototype.on = function(event, handler, data, one) { + var emitter = MegaDataEmitter.getEmitter(event, this); + var events = emitter.events; + + handler = one ? MegaDataEmitter.wrapOne(handler) : handler; + if (!handler.pid) { + handler.pid = ++dsIncID; + } + + for (var i = emitter.types.length; i--;) { + var type = emitter.types[i]; + var namespace = emitter.namespaces[i]; + + if (!events[type]) { + events[type] = []; + } + + events[type].push({ + type: type, + data: data, + pid: handler.pid, + handler: handler, + namespace: namespace + }); + + if (d) { + MegaDataEmitter.seen[type] = 1; + } + } + return this; +}; + +// eslint-disable-next-line complexity +MegaDataEmitter.prototype.trigger = function(event, data) { + var emitter = MegaDataEmitter.getEmitter(event, this); + + event = new MegaDataEvent(emitter.event, this); + event.data = data; + + // @todo require all trigger() calls to provide an array to prevent checking for isArray() + data = data ? Array.isArray(data) ? data : [data] : []; + data = [event, ...data]; + + let idx = 0; + let res, tmp; + var type = emitter.types[0]; + var namespace = emitter.namespaces[0]; + const handlers = [...(emitter.events[type] || [])]; + while ((tmp = handlers[idx++]) && !event.isPropagationStopped()) { + event.currentTarget = this; + event.namespace = namespace; + + if ((!namespace || namespace === tmp.namespace) + && (res = tmp.handler.apply(this, data)) !== undefined) { + + event.result = res; + if (res === false) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + + if (!event.isDefaultPrevented()) { + tmp = this['on' + type]; + + if (typeof tmp === 'function') { + event.result = tmp.apply(this, data); + if (event.result === false) { + event.preventDefault(); + } + } + } + + if (event.originalEvent && event.result !== undefined) { + event.originalEvent.returnValue = event.result; + } + + return event.result; +}; + +MegaDataEmitter.prototype.rebind = function(event, handler) { + return this.off(event).on(event, handler); +}; +MegaDataEmitter.prototype.bind = MegaDataEmitter.prototype.on; +MegaDataEmitter.prototype.unbind = MegaDataEmitter.prototype.off; + +Object.freeze(MegaDataEmitter); + +/** + * Simple map-like implementation that tracks changes + * + * @param [parent] + * @param [defaultData] + * @constructor + */ +function MegaDataMap(parent, defaultData) { + // MegaDataEmitter.call(this); + + /** @property MegaDataMap._parent */ + _defineNonEnum(this, '_parent', parent || false); + + /** @property MegaDataMap._dataChangeIndex */ + _defineNonEnum(this, '_dataChangeIndex', 0); + /** @property MegaDataMap._dataChangeListeners */ + _defineNonEnum(this, '_dataChangeListeners', []); + /** @property MegaDataMap._dataChangeTrackedId */ + _defineNonEnum(this, '_dataChangeTrackedId', ++dsIncID); + + /** @property MegaDataMap._data */ + _defineNonEnum(this, '_data', defaultData || {}); + Object.setPrototypeOf(this._data, null); + + if (d > 1) { + if (!MegaDataMap.__instancesOf) { + MegaDataMap.__instancesOf = new WeakMap(); + } + MegaDataMap.__instancesOf.set(this, Object.getPrototypeOf(this)); + } +} + +inherits(MegaDataMap, MegaDataEmitter); + +/** @property MegaDataMap.__ident_0 */ +lazy(MegaDataMap.prototype, '__ident_0', function() { + return this.constructor.name + '.' + ++dsIncID; +}); + +/** @function MegaDataMap.prototype._schedule */ +lazy(MegaDataMap.prototype, '_schedule', function() { + let task = null; + const callTask = () => { + if (task) { + queueMicrotask(task); + task = null; + } + }; + return (callback) => { + if (!task) { + queueMicrotask(callTask); + } + task = () => callback.call(this); + }; +}); + +Object.defineProperty(MegaDataMap.prototype, 'length', { + get: function() { + return Object.keys(this._data).length; + }, + configurable: true +}); + +_defineValue(MegaDataMap.prototype, 'valueOf', function() { + return this.__ident_0; +}); + +MegaDataMap.prototype.trackDataChange = function(...args) { + var self = this; + this._schedule(function _trackDataChange() { + var that = self; + + do { + args.unshift(that); + + if (that === self) { + that._dispatchChangeListeners(args); + } + else { + that._enqueueChangeListenersDsp(args); + } + + } while ((that = that._parent) instanceof MegaDataMap); + }); +}; + +MegaDataMap.prototype.addChangeListener = function(cb) { + if (d) { + var h = this._dataChangeListeners; + if (d > 1 && h.length > 200) { + _warnOnce(this, '%s: Too many handlers added(%d)! race?', this, h.length, [this]); + } + console.assert(h.indexOf(cb) < 0, 'handler exists'); + + if (typeof cb === 'function') { + console.assert(!cb.__mdmChangeListenerID, 'reusing handler'); + } + else { + console.assert(typeof cb.handleChangeEvent === 'function', 'invalid instance'); + } + } + + if (typeof cb === 'function') { + /** @property Function.__mdmChangeListenerID */ + _defineValue(cb, '__mdmChangeListenerID', dsIncID + 1); + } + + this._dataChangeListeners.push(cb); + return ++dsIncID; +}; + +MegaDataMap.prototype.removeEventHandler = function(handler) { + var result = false; + var listeners = this._dataChangeListeners; + + if (d) { + console.assert(handler && typeof handler.handleChangeEvent === 'function'); + } + + for (var i = listeners.length; i--;) { + if (listeners[i] === handler) { + listeners.splice(i, 1); + ++result; + } + } + + return result; +}; + +MegaDataMap.prototype.removeChangeListener = function(cb) { + var cId = cb && cb.__mdmChangeListenerID || cb; + + if (d) { + console.assert(cId > 0, 'invalid listener id'); + } + + if (cId > 0) { + var listeners = this._dataChangeListeners; + + for (var i = listeners.length; i--;) { + if (listeners[i].__mdmChangeListenerID === cId) { + _defineValue(listeners[i], '__mdmChangeListenerID', 'nop'); + listeners.splice(i, 1); + + if (d > 1) { + while (--i > 0) { + console.assert(listeners[i].__mdmChangeListenerID !== cId); + } + } + + return true; + } + } + } + + return false; +}; + +MegaDataMap.prototype._enqueueChangeListenersDsp = function(args) { + delay(`mdm:cl:q.${this.__ident_0}`, () => this._dispatchChangeListeners(args), 40); +}; + +MegaDataMap.prototype._dispatchChangeListeners = function(args) { + var listeners = this._dataChangeListeners; + + if (d > 1) { + console.debug('%s: dispatching %s awaiting listeners', this, listeners.length, [this]); + } + this._dataChangeIndex++; + + for (var i = listeners.length; i--;) { + var result; + var listener = listeners[i]; + + if (typeof listener === 'function') { + result = listener.apply(this, args); + } + else if (listener) { + result = listener.handleChangeEvent.apply(listener, args); + } + + if (result === 0xDEAD) { + this.removeChangeListener(listener); + } + } +}; + +// eslint-disable-next-line local-rules/misc-warnings +MegaDataMap.prototype.forEach = function(cb) { + // this._data is a dict, so no guard-for-in needed + // eslint-disable-next-line guard-for-in + for (var k in this._data) { + if (cb(this._data[k], k) === false) { + break; + } + } +}; +MegaDataMap.prototype.every = function(cb) { + var self = this; + return self.keys().every(function(k) { + return cb(self._data[k], k); + }); +}; +MegaDataMap.prototype.some = function(cb) { + var self = this; + return self.keys().some(function(k) { + return cb(self._data[k], k); + }); +}; + +MegaDataMap.prototype.map = function(cb) { + var self = this; + var res = []; + self.forEach(function(v, k) { + var intermediateResult = cb(v, k); + if (intermediateResult !== null && intermediateResult !== undefined) { + res.push(intermediateResult); + } + }); + return res; +}; + +MegaDataMap.prototype.keys = function() { + return Object.keys(this._data); +}; + +MegaDataMap.prototype.size = function() { + return this.keys().length; +}; + +MegaDataMap.prototype.destroy = tryCatch(function() { + var self = this; + Object.keys(self).map(function(k) { + return self._removeDefinedProperty(k); + }); + Object.freeze(this); +}); + +MegaDataMap.prototype.clear = tryCatch(function() { + Object.keys(this).map((k) => { + return this._removeDefinedProperty(k); + }); + this.trackDataChange(); +}); + +MegaDataMap.prototype.setObservable = function(k, defaultValue) { + Object.defineProperty(this, k, { + get: function() { + return this.get(k, defaultValue); + }, + set: function(value) { + this.set(k, value, false, defaultValue); + }, + enumerable: true + }); +}; + +MegaDataMap.prototype.exists = function(keyValue) { + return keyValue in this._data; +}; + +MegaDataMap.prototype.set = function(k, v, ignoreTrackDataChange) { + if (d) { + console.assert(k !== undefined && k !== false, "missing key"); + } + + if (v instanceof MegaDataMap && !v._parent) { + _defineNonEnum(v, '_parent', this); + } + + if (_cmp(this._data[k], v) === true) { + return false; + } + + this._data[k] = v; + + if (k in this) { + this[k] = v; + } + else { + Object.defineProperty(this, k, { + get: function() { + return this._data[k]; + }, + set: function(value) { + if (value !== this._data[k]) { + this._data[k] = value; + this.trackDataChange(this._data, k, v); + } + }, + enumerable: true, + configurable: true + }); + } + + if (!ignoreTrackDataChange) { + this.trackDataChange(this._data, k, v); + } +}; + +MegaDataMap.prototype.remove = function(k) { + var v = this._data[k]; + + if (v instanceof MegaDataMap && v._parent === this) { + _defineNonEnum(v, '_parent', null); + } + + this._removeDefinedProperty(k); + this.trackDataChange(this._data, k, v); +}; + +/** @function MegaDataMap.prototype._removeDefinedProperty */ +_defineValue(MegaDataMap.prototype, '_removeDefinedProperty', function(k) { + if (k in this) { + Object.defineProperty(this, k, { + writable: true, + value: undefined, + configurable: true + }); + delete this[k]; + } + if (k in this._data) { + delete this._data[k]; + } +}); + +/** @function MegaDataMap.prototype.toJS */ +_defineValue(MegaDataMap.prototype, 'toJS', function() { + return this._data; +}); + +_defineValue(MegaDataMap.prototype, 'hasOwnProperty', function(prop) { + return prop in this._data; +}); + +_defineValue(MegaDataMap.prototype, 'propertyIsEnumerable', function(prop) { + return this.hasOwnProperty(prop); +}); + + + +/** + * Plain Object-like container for storing data, with the following features: + * - track changes ONLY on predefined list of properties + * + * @param {Object} [trackProperties] properties to observe for changes + * @param {Object} [defaultData] default/initial data + * @constructor + */ +function MegaDataObject(trackProperties, defaultData) { + MegaDataMap.call(this, null, defaultData); + + if (trackProperties) { + for (var k in trackProperties) { + if (Object.hasOwnProperty.call(trackProperties, k)) { + this.setObservable(k, trackProperties[k]); + } + } + } + + /* + if (d && typeof Proxy === 'function') { + var slave = Object.create(Object.getPrototypeOf(this)); + Object.setPrototypeOf(this, new Proxy(slave, { + defineProperty: function(target, property, descriptor) { + if (String(property).startsWith('jQuery')) { + debugger + console.assert(false); + } + Object.defineProperty(target, property, descriptor); + return true; + } + })); + }*/ +} + +inherits(MegaDataObject, MegaDataMap); + +MegaDataObject.prototype.set = function(k, v, ignoreDataChange, defaultVal) { + var notSet = !(k in this._data); + + if (notSet || _cmp(this._data[k], v) !== true) { + if (notSet && _cmp(defaultVal, v) === true) { + // this._data[...] is empty and defaultVal == newVal, DON'T track updates. + return false; + } + + if (!ignoreDataChange) { + this.trackDataChange(this._data, k, v); + } + this._data[k] = v; + } +}; + +MegaDataObject.prototype.get = function(k, defaultVal) { + return this._data && k in this._data ? this._data[k] : defaultVal; +}; + + +/** + * MegaDataSortedMap + * @param keyField + * @param sortField + * @param parent + * @constructor + */ +function MegaDataSortedMap(keyField, sortField, parent) { + MegaDataMap.call(this, parent); + + /** @property MegaDataSortedMap._parent */ + _defineNonEnum(this, '_parent', parent || false); + /** @property MegaDataSortedMap._sortedVals */ + _defineNonEnum(this, '_sortedVals', []); + /** @property MegaDataSortedMap._keyField */ + _defineNonEnum(this, '_keyField', keyField); + /** @property MegaDataSortedMap._sortField */ + _defineNonEnum(this, '_sortField', sortField); +} + +inherits(MegaDataSortedMap, MegaDataMap); + +Object.defineProperty(MegaDataSortedMap.prototype, 'length', { + get: function() { + return this._sortedVals.length; + }, + configurable: true +}); + +// eslint-disable-next-line local-rules/misc-warnings +MegaDataSortedMap.prototype.forEach = function(cb) { + for (var i = 0; i < this._sortedVals.length; ++i) { + var k = this._sortedVals[i]; + cb(this._data[k], k); + } +}; + +MegaDataSortedMap.prototype.replace = function(k, newValue) { + if (this._data[k] === newValue) { + // already the same, save some CPU and do nothing. + return true; + } + + if (k in this._data) { + // cleanup + if (newValue[this._keyField] !== k) { + this.removeByKey(k); + } + this.push(newValue); + return true; + } + + return false; +}; + +/** @property MegaDataSortedMap._comparator */ +lazy(MegaDataSortedMap.prototype, '_comparator', function() { + var self = this; + + if (this._sortField === undefined) { + return indexedDB.cmp.bind(indexedDB); + } + + if (typeof self._sortField === "function") { + return function(a, b) { + return self._sortField(self._data[a], self._data[b]); + }; + } + + return function(a, b) { + var sortFields = self._sortField.split(","); + + for (var i = 0; i < sortFields.length; i++) { + var sortField = sortFields[i]; + var ascOrDesc = 1; + if (sortField[0] === '-') { + ascOrDesc = -1; + sortField = sortField.substr(1); + } + + var _a = self._data[a][sortField]; + var _b = self._data[b][sortField]; + + if (_a !== undefined && _b !== undefined) { + if (_a < _b) { + return -1 * ascOrDesc; + } + if (_a > _b) { + return ascOrDesc; + } + return 0; + } + } + return 0; + }; +}); + +MegaDataSortedMap.prototype.push = function(v) { + var self = this; + + var keyVal = v[self._keyField]; + + if (keyVal in self._data) { + self.removeByKey(keyVal); + } + + self.set(keyVal, v, true); + + var minIndex = 0; + var maxIndex = this._sortedVals.length - 1; + var currentIndex; + var currentElement; + var cmp = self._comparator; + + var result = false; + while (minIndex <= maxIndex) { + currentIndex = (minIndex + maxIndex) / 2 | 0; + currentElement = this._sortedVals[currentIndex]; + + var cmpResult = cmp(currentElement, keyVal); + if (cmpResult === -1) { + minIndex = currentIndex + 1; + } + else if (cmpResult === 1) { + maxIndex = currentIndex - 1; + } + else { + result = true; + break; + } + } + + if (!result) { + if (currentElement === undefined) { + // first + self._sortedVals.push(keyVal); + } + else { + self._sortedVals.splice(cmp(currentElement, keyVal) === -1 ? currentIndex + 1 : currentIndex, 0, keyVal); + } + + self.trackDataChange(); + } + else { + // found another item in the list, with the same order value, insert after + self._sortedVals.splice(currentIndex, 0, keyVal); + } + return self._sortedVals.length; +}; + +MegaDataSortedMap.prototype.removeByKey = MegaDataSortedMap.prototype.remove = function(keyValue) { + if (keyValue in this._data) { + array.remove(this._sortedVals, keyValue); + this._removeDefinedProperty(keyValue); + this.trackDataChange(); + return true; + } + return false; +}; + +MegaDataSortedMap.prototype.exists = function(keyValue) { + return keyValue in this._data; +}; + +MegaDataSortedMap.prototype.keys = function() { + return this._sortedVals; +}; + +MegaDataSortedMap.prototype.values = function() { + var res = []; + // eslint-disable-next-line local-rules/misc-warnings + this.forEach(function(v) { + res.push(v); + }); + + return res; +}; + +MegaDataSortedMap.prototype.getItem = function(num) { + return this._data[this._sortedVals[num]]; +}; + +MegaDataSortedMap.prototype.indexOfKey = function(value) { + return this._sortedVals.indexOf(value); +}; + +MegaDataSortedMap.prototype.clear = function() { + _defineNonEnum(this, '_sortedVals', []); + _defineNonEnum(this, '_data', Object.create(null)); + if (this.trackDataChange) { + this.trackDataChange(); + } +}; + +/** + * Simplified version of `Array.prototype.splice`, only supports 2 args (no adding/replacement of items) for now. + * + * @param {Number} start first index to start from + * @param {Number} deleteCount number of items to delete + * @returns {Array} array of deleted item ids + */ +MegaDataSortedMap.prototype.splice = function(start, deleteCount) { + var deletedItemIds = this._sortedVals.splice(start, deleteCount); + + for (var i = deletedItemIds.length; i--;) { + this._removeDefinedProperty(deletedItemIds[i]); + } + + this.trackDataChange(); + + return deletedItemIds; +}; + +/** + * Returns a regular array (not a sorted map!) of values sliced as with `Array.prototype.slice` + * + * @param {Number} begin first index to start from + * @param {Number} end last index where to end the "slice" + * @returns {Array} array of removed IDs + */ +MegaDataSortedMap.prototype.slice = function(begin, end) { + var results = this._sortedVals.slice(begin, end); + for (var i = results.length; i--;) { + results[i] = this._data[results[i]]; + } + return results; +}; + +var testMegaDataSortedMap = function() { + var arr1 = new MegaDataSortedMap("id", "orderValue,ts"); + arr1.push({ + 'id': 1, + 'ts': 1, + 'orderValue': 1 + }); + + arr1.push({ + 'id': 2, + 'ts': 3, + 'orderValue': 2 + }); + arr1.push({ + 'id': 3, + 'ts': 2 + }); + + arr1.forEach(function(v, k) { + console.error(v, k); + }); + return arr1; +}; + + +/** + * Generic "MegaDataBitMap" manager that manages a list of all registered (by unique name) MegaDataBitMaps + * + * @constructor + */ +function MegaDataBitMapManager() { + this._bitmaps = Object.create(null); +} + +inherits(MegaDataBitMapManager, null); + +/** + * Register a MegaDataBitMap + * @param {String} name + * @param {MegaDataBitMap} megaDataBitMap + */ +MegaDataBitMapManager.prototype.register = function(name, megaDataBitMap) { + if (this._bitmaps[name] !== undefined) { + console.error("Tried to register a MegaDataBitMap that already exists (at least with that name)."); + return; + } + this._bitmaps[name] = megaDataBitMap; +}; + +/** + * Check if an MegaDataBitMap with a specific `name` exists. + * + * @param {String} name + * @returns {Boolean} + */ +MegaDataBitMapManager.prototype.exists = function(name) { + return typeof(this._bitmaps[name]) !== 'undefined'; +}; + +/** + * Get the instance of a specific by `name` MegaDataBitMap + * + * @param {String} name + * @returns {*} + */ +MegaDataBitMapManager.prototype.get = function(name) { + return this._bitmaps[name]; +}; + +/** + * MegaDataBitMaps are array, that are stored as attributes (on the MEGA API side), which hold 0s and 1s for a specific + * (predefined, ordered set of) keys. + * Once the data is .commit()'ed adding new keys should always be done at the end of the array. + * No keys should be removed, because that would mess up the values stored in the user attribute, since all keys are + * only available on the client side, the data is mapped via the key index (e.g. key1 = 0, key2 = 1, keyN = N - 1). + * + * @param {String} name Should be unique. + * @param {Boolean} isPub should the attribute be public or private? + * @param {Array} keys Array of keys + * @constructor + */ +function MegaDataBitMap(name, isPub, keys) { + MegaDataObject.call(this, array.to.object(keys, 0)); + + this.name = name; + this._keys = keys; + this._isPub = isPub; + this._data = new Uint8Array(keys.length); + this._updatedMask = new Uint8Array(keys.length); + this._version = null; + + attribCache.bitMapsManager.register(name, this); + + this._readyPromise = new Promise((resolve, reject) => { + mega.attr.get(u_handle, name, this.isPublic() ? true : -2, true) + .then(r => { + if (typeof r !== 'string') { + throw r; + } + this.mergeFrom(r, false); + resolve(); + }) + .catch(ex => { + if (ex === ENOENT) { + return resolve(ex); + } + // -9 is ok, means the attribute does not exists on the server + console.error("mega.attr.get failed:", ex); + reject(ex); + }); + }); +} + +inherits(MegaDataBitMap, MegaDataObject); + +Object.defineProperty(MegaDataBitMap.prototype, 'length', { + get: function() { + return this._data.length; + }, + enumerable: false, + configurable: true +}); + +/** + * Returns a list of keys that are currently registered with this MegaDataBitMap instance. + * + * @returns {Array} + */ +MegaDataBitMap.prototype.keys = function() { + return this._keys; +}; + +/** + * Flip the value of `key` from 0 -> 1 or from 1 -> 0 + * Calling this function would trigger a change event. + * Calling this function would NOT persist the data on the server, until the .commit() method is called. + * + * @param {String} key + * @returns {Boolean} + */ +MegaDataBitMap.prototype.toggle = function(key) { + const keyIdx = this._keys.indexOf(key); + if (keyIdx === -1) { + return false; + } + + this.set(key, this._data[keyIdx] ? 0 : 1); +}; + +/** + * Reset the internal "updated mask" to mark all keys as commited. + * Mainly used internally by `MegaDataBitMap.prototype.commit()` + */ +MegaDataBitMap.prototype.commited = function() { + this._updatedMask = new Uint8Array(this._keys.length); +}; + +/** + * Change the value of `key` to `v` (can be either 0 or 1, integer). + * Calling this function would trigger a change event. + * Calling this function would NOT persist the data on the server, until the .commit() method is called. + * + * @param {String} key + * @param {Number} v Can be either 0 or 1 + * @param {Boolean} ignoreDataChange If true, would not trigger a change event + * @param {Number} defaultVal By default, the default value is supposed to be 0, but any other value can be passed here + */ +MegaDataBitMap.prototype.set = function(key, v, ignoreDataChange, defaultVal) { + if (typeof(v) !== 'number' && v !== 1 && v !== 0) { + console.error("MegaDataBitMap...set was called with non-zero/one value as 2nd argument."); + return; + } + + this._readyPromise.then(() => { + this.setSync(key, v, ignoreDataChange, defaultVal); + }); +}; + +/** + * Synchronous setter. Prefer using MegaDataBitMap.set(). + * Can use instead if you are aware of the state of this._readyPromise + * + * @param {String} key The bit map key to set + * @param {Number} v Can be either 0 or 1 + * @param {Boolean} ignoreDataChange If true, would not trigger a change event + * @param {Number} defaultVal By default, the default value is supposed to be 0, but any other value can be passed here + * @returns {boolean|void} False if no change + * @see MegaDataBitMap.prototype.set + */ +MegaDataBitMap.prototype.setSync = function(key, v, ignoreDataChange, defaultVal = 0) { + const keyIdx = this._keys.indexOf(key); + if (keyIdx === -1) { + return false; + } + + if ( + typeof this._data[keyIdx] === 'undefined' + && typeof defaultVal !== 'undefined' + && _cmp(defaultVal, v) === true + || this._data[keyIdx] === v /* already the same value... */ + ) { + // self._data[...] is empty and defaultVal == newVal, DON'T track updates. + return false; + } + + this._data[keyIdx] = v; + this._updatedMask[keyIdx] = 1; + + if (!ignoreDataChange) { + this.trackDataChange(this._data, key, v); + } +}; + +/** + * Returns the promise that will be resolved when the MegaDataBitMap has finished requesting the attribute from + * the server initially + * + * @returns {Promise} The initialisation promise + */ +MegaDataBitMap.prototype.isReady = function() { + return this._readyPromise; +}; + +MegaDataBitMap.prototype.get = async function(key, defaultVal = false) { + await this._readyPromise; + return this.getSync(key, defaultVal); +}; + +/** + * Synchronous getter. Prefer using MegaDataBitMap.get(). + * Can use instead if you are aware of the state of this._readyPromise + * + * @param {string} key Key for the value to fetch + * @param {*|boolean} defaultVal Default value if the key is not set + * @returns {*|boolean} The current value of the key + * @see MegaDataBitMap.prototype.get + */ +MegaDataBitMap.prototype.getSync = function(key, defaultVal = false) { + const keyIdx = this._keys.indexOf(key); + if (keyIdx === -1) { + throw key; + } + + return this._data && typeof this._data[keyIdx] !== 'undefined' ? this._data[keyIdx] : defaultVal; +}; + +/** + * Merge the current MegaDataBitMap value with a {String} `str`. + * Merging is done the following way: + * - IF a value of a key, passed by `str` differs from the one in the current instance: + * a) if was marked as 'dirty' (not commited, via the update mask) it would not be merged (its assumed that any data, + * stored in 'dirty' state and not commited is the most up to date one) + * b) the local value for that key would be updated, following a change event + * + * @param {String} str String, containing 0 and 1 chars to be parsed as Uint8Array with 0 and 1s + * @param {Boolean} requiresCommit Pass true, to mark all changes in the update mask (e.g. they would be schedulled for + * sending to the server on the next .commit() call) + */ +MegaDataBitMap.prototype.mergeFrom = function(str, requiresCommit) { + let targetLength = str.length; + if (this._keys.length > str.length) { + targetLength = this._keys.length; + } + for (let i = 0, strLen = str.length; i < strLen; i++) { + const newVal = str.charCodeAt(i); + if (this._data[i] !== newVal) { + if (this._updatedMask[i] && this._updatedMask[i] === 1) { + // found uncommited change, would leave (and not merge), since in that case, we would assume that + // since changes are commited (almost) immediately after the .set()/.toggle() is done, then this + // was just changed and its newer/up to date then the one from the server. + } + else { + this._data[i] = newVal; + this.trackDataChange( + this._data, + this._keys[i], + newVal + ); + if (requiresCommit) { + this._updatedMask[i] = 1; + } + } + } + } + + // resize if needed. + if (this._keys.length > targetLength) { + this._data.fill(false, this._keys.length, targetLength - this._keys.length); + } +}; + +/** + * Convert to a base64urlencoded string + * + * @returns {String} + */ +_defineValue(MegaDataBitMap.prototype, 'toString', function() { + return base64urlencode(String.fromCharCode.apply(null, this._data)); +}); + +/** + * Convert the mask to a base64urlencoded string + * + * @returns {String} + */ +MegaDataBitMap.prototype.maskToString = function() { + return base64urlencode( + String.fromCharCode.apply(null, this._updatedMask) + ); +}; + +/** + * Convert to a 0 and 1 string (separated by ",") + * + * @returns {String} + */ +MegaDataBitMap.prototype.toDebugString = function() { + return this._data.toString(); +}; + +/** + * Set the current version of the attribute (received and controlled by the API) + * + * @param ver + * @returns {String} + */ +MegaDataBitMap.prototype.setVersion = function(ver) { + return this._version = ver; +}; + +/** + * Get the current version of the attribute (received and controlled by the API) + * + * @returns {String|undefined} + */ +MegaDataBitMap.prototype.getVersion = function() { + return this._version; +}; + +/** + * Was this attribute marked as public? + * + * @returns {Boolean} + */ +MegaDataBitMap.prototype.isPublic = function() { + return this._isPub; +}; + +/** + * Commits all changes which were marked as changed. + * All changed keys/bits would be overwritten on the server + * All non-changed keys/bits, may be altered in case another commit (by another client) had changed them. In that case, + * a change event would be triggered. + * + * @returns {Promise} + */ +MegaDataBitMap.prototype.commit = function() { + this._commitPromise = this._commitPromise || new Promise((resolve, reject) => { + delay(`mdbm-commit${this.name}`, () => { + if (!this._updatedMask.includes(1)) { + delete this._commitPromise; + return resolve(false); + } + + const attributeFullName = `${this.isPublic() ? '+' : '^'}!${this.name}`; + const cacheKey = `${u_handle}_${attributeFullName}`; + attribCache.setItem(cacheKey, JSON.stringify([this.toString(), 0])); + api_req( + { + a: 'usma', + n: attributeFullName, + ua: this.toString(), + m: this.maskToString() + }, + { + callback: (response) => { + if (typeof response === 'number') { + reject(response); + } + else { + if (response.ua && response.ua !== this.toString()) { + this.mergeFrom(base64urldecode(response.ua)); + attribCache.setItem(cacheKey, JSON.stringify([this.toString(), 0])); + } + if (response.v) { + this.setVersion(response.v); + } + this.commited(); + resolve(response); + } + delete this._commitPromise; + } + } + ); + }, 100); + }); + + return this._commitPromise; +}; + +/** + * Commit the MegaDataBitMap with basic handling of the resulting promise + * + * @returns {void} void + */ +MegaDataBitMap.prototype.safeCommit = function() { + if (this._commitPromise) { + // Already committing + return; + } + this.commit().then(nop).catch(dump); +}; + +/** + * Initialise a new MegaDataBitMap from string + * Only used for testing some stuff. + * + * @param {String} name + * @param {Boolean} isPub + * @param {Array} keys + * @param {String} base64str + * @param {*} [parent] + * @returns {MegaDataBitMap} + */ +MegaDataBitMap.fromString = function(name, isPub, keys, base64str, parent) { + const str = base64urldecode(base64str); + let targetLength = str.length; + if (keys.length > str.length) { + targetLength = keys.length; + } + const buf = new ArrayBuffer(targetLength); // 2 bytes for each char + const bufView = new Uint8Array(buf); + for (let i = 0, strLen = str.length; i < strLen; i++) { + bufView[i] = str.charCodeAt(i); + } + const mdbm = new MegaDataBitMap(name, isPub, keys, parent); + mdbm._data = new Uint8Array(buf, 0, buf.byteLength); + if (keys.length > buf.length) { + mdbm._data.fill(false, keys.length, buf.length - keys.length); + } + return mdbm; +}; + + +/** + * Mark all bits/keys as 0s (would not commit the changes). + */ +MegaDataBitMap.prototype.reset = function() { + const keys = this.keys(); + for (let i = 0; i < keys.length; i++) { + this.set(keys[i], 0); + } +}; + +/** + * Experiments, tests and examples + * + * @returns {MegaDataBitMap} + */ +var testMegaDataBitMap = function() { + var keys = [ + 'key1', + 'key2', + 'key3', + ]; + var arr1 = new MegaDataBitMap("arr1", false, keys); + + arr1.toggle('key2'); + + arr1.commited(); + + var arr2 = MegaDataBitMap.fromString("arr2", false, keys, arr1.toString()); + assert(arr2.toString() === arr1.toString()); + + console.error(arr2._updatedMask.toString()); + arr2.toggle('key1'); + console.error(arr2._updatedMask.toString()); + arr1.mergeFrom(arr2.toString()); + return arr1; +}; + +/** + * Bitmap based on an integer. + * @param attribute {String} + * Name of the attribute. + * @param map An array of keys to use for identifying each bit. + * @param pub {Boolean|Number} + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * False for private encrypted attributes + * @param nonHistoric {Boolean} + * True for non-historic attributes (default: false). Non-historic attributes will overwrite the value, and + * not retain previous values on the API server. + * @param autoSaveTimeout {int} Autosave after x millisecond. + * @constructor + */ +function MegaIntBitMap(attribute, map, pub, nonHistoric, autoSaveTimeout) { + this.value = undefined; + this.attribute = attribute; + this.map = map; + this.pub = pub; + this.nonHistoric = nonHistoric; + this.isReadyPromise = null; + this.autoSaveTimeout = autoSaveTimeout; + this.autoSaveTimer = null; +} + +/** + * Get a bit based on its key. + * @param key The bit key. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.get = function(key) { + var self = this; + return new MegaPromise(function(resolve, reject) { + self.isReady().then(function() { + var mask; + if (Array.isArray(key)) { + var bitKey; + var result = {}; + for (var i = 0; i < key.length; i++) { + bitKey = key[i]; + mask = self.getMask(bitKey); + if (!mask) { + reject("Invalid Key"); + return false; + } + result[bitKey] = self.value & mask ? true : false; + } + resolve(result); + } else { + mask = self.getMask(key); + if (!mask) { + reject("Invalid Key"); + return false; + } + resolve(self.value & mask ? true : false); + } + + }, reject); + }); +}; + +/** + * Set a bit/bits based on a key/keys. + * @param key object|string The bit key or map of bit keys -> newState + * @param newValue {bool|void} The new state if previous parameter is a bit key. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.set = function(key, newValue) { + var self = this; + return new MegaPromise(function(resolve, reject) { + self.isReady().then(function() { + var mask; + // jscs:disable disallowImplicitTypeConversion + if (typeof key === 'object') { + var bitKey; + var updatedValue = self.value; + var keys = Object.keys(key); + for (var i = 0; i < keys.length; i++) { + bitKey = keys[i]; + mask = self.getMask(bitKey); + if (!mask) { + reject("Invalid Key"); + return false; + } + updatedValue = key[bitKey] ? (updatedValue | mask) : (updatedValue & (~mask)); + } + self.value = updatedValue; + } else { + mask = self.getMask(key); + if (!mask) { + reject("Invalid Key"); + return false; + } + self.value = newValue ? (self.value | mask) : (self.value & (~mask)); + } + // jscs:enable disallowImplicitTypeConversion + self.valueChanged(); + resolve(self.value); + }, reject); + }); +}; + +/** + * Get all bits. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.getAll = function() { + var self = this; + return new MegaPromise(function(resolve, reject) { + self.isReady().then(function() { + var all = {}; + for (var i = 0; i < self.map.length; i++) { + all[self.map[i]] = self.value & (1 << i) ? true : false; + } + resolve(all); + }, reject); + }); +}; + +/** + * Set all bits that we know about. + * @param newValue The new state for all known bits. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.setAll = function(newValue) { + var self = this; + return new MegaPromise(function(resolve, reject) { + self.isReady().then(function() { + // jscs:disable disallowImplicitTypeConversion + var mask = ~(0xFFFFFF << self.map.length); + self.value = newValue ? self.value | mask : self.value & (~mask); + // jscs:enable disallowImplicitTypeConversion + self.valueChanged(); + resolve(self.value); + }, reject); + }); +}; + +/** + * Get a mask from a key. + * @param key The bit key. + */ +MegaIntBitMap.prototype.getMask = function(key) { + var idx = this.map.indexOf(key); + if (idx >= 0) { + return 1 << idx; + } + return false; +}; + +/** + * Load attribute. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.load = function() { + var self = this; + return new MegaPromise(function(resolve, reject) { + mega.attr.get(u_attr.u, self.attribute, self.pub, self.nonHistoric).then(function(value) { + self.value = parseInt(value); + resolve(); + }, function(value) { + if (value === ENOENT) { + self.value = 0; + resolve(); + } else { + reject.apply(null, arguments); + } + }); + }); +}; + +/** + * Save Attribute. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.save = function() { + return mega.attr.set( + this.attribute, + this.value, + this.pub, + this.nonHistoric + ); +}; + +/** + * Wait till ready. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.isReady = function() { + if (this.isReadyPromise === null) { + var self = this; + this.isReadyPromise = new MegaPromise(function(resolve, reject) { + self.load().then(resolve, reject); + }); + } + return this.isReadyPromise; +}; + +/** + * Directly set all the bits by providing an int. + * @param newValue {int} The new value + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.setValue = function(newValue) { + var self = this; + return new MegaPromise(function(resolve, reject) { + self.isReady().then(function() { + self.value = newValue; + self.valueChanged(); + resolve(self.value); + }, reject); + }); +}; + +/** + * Track value changed. + * Note: Call this whenever the value is changed. + */ +MegaIntBitMap.prototype.valueChanged = function() { + if (this.autoSaveTimeout) { + var self = this; + clearTimeout(this.autoSaveTimer); + this.autoSaveTimer = setTimeout(function() { + clearTimeout(self.autoSaveTimer); + self.save(); + }, self.autoSaveTimeout); + } +}; + +/** + * Triggered when the attribute is updated, thus updating our internal value. + * @return {MegaPromise} + */ +MegaIntBitMap.prototype.handleAttributeUpdate = function() { + this.isReadyPromise = null; + return this.isReady(); +}; + +// ---------------------------------------------------------------------------------------- + +Object.defineProperty(global, 'MegaDataMap', {value: MegaDataMap}); +Object.defineProperty(global, 'MegaDataObject', {value: MegaDataObject}); +Object.defineProperty(global, 'MegaDataSortedMap', {value: MegaDataSortedMap}); + +/** @constructor MegaDataEvent */ +Object.defineProperty(global, 'MegaDataEvent', {value: MegaDataEvent}); +/** @constructor MegaDataEmitter */ +Object.defineProperty(global, 'MegaDataEmitter', {value: MegaDataEmitter}); + +Object.defineProperty(global, 'MegaIntBitMap', {value: MegaIntBitMap}); +Object.defineProperty(global, 'MegaDataBitMap', {value: MegaDataBitMap}); +Object.defineProperty(global, 'MegaDataBitMapManager', {value: MegaDataBitMapManager}); + +if (d) { + if (d > 1) { + _timing(MegaDataMap); + _timing(MegaDataObject); + _timing(MegaDataEmitter); + _timing(MegaDataSortedMap); + } + global._timing = _timing; + global.testMegaDataBitMap = testMegaDataBitMap; + global.testMegaDataSortedMap = testMegaDataSortedMap; +} + +})(self); + +/** + * IndexedDB Key/Value Storage + */ + +// (the name must exist in the FMDB schema with index 'k') +function IndexedDBKVStorage(name) { + 'use strict'; + + this.name = name; + this.dbcache = Object.create(null); // items that reside in the DB + this.newcache = Object.create(null); // new items that are pending flushing to the DB + this.delcache = Object.create(null); // delete items that are pending deletion from the DB +} + +inherits(IndexedDBKVStorage, null); + +// sets fmdb reference and prefills the memory cache from the DB +// (call this ONCE as soon as the user-specific IndexedDB is open) +// (this is robust against an undefined fmdb reference) +IndexedDBKVStorage.prototype.load = async function() { + 'use strict'; + if (window.is_eplusplus) { + const pfx = `e++${this.name}!`; + const store = await M.getPersistentDataEntries(pfx, true).catch(dump) || {}; + const keys = Object.keys(store); + for (let i = keys.length; i--;) { + if (store[keys[i]]) { + this.dbcache[keys[i].substr(pfx.length)] = store[keys[i]]; + } + else if (d) { + console.warn('Malformed data in entry.', keys[i], store[keys[i]]); + } + } + } + else if (window.fmdb) { + const r = await fmdb.get(this.name).catch(dump) || []; + for (let i = r.length; i--;) { + this.dbcache[r[i].k] = r[i].v; + } + } +}; + +// flush new items / deletions to the DB (in channel 0, this should +// be followed by call to setsn()) +// will be a no-op if no fmdb set +IndexedDBKVStorage.prototype.flush = function() { + 'use strict'; + var k; + var fmdb = window.fmdb || false; + + for (k in this.delcache) { + if (is_eplusplus) { + M.delPersistentData('e++' + this.name + '!' + k).always(nop); + } + else if (fmdb) { + fmdb.del(this.name, k); + } + delete this.dbcache[k]; + } + + for (k in this.newcache) { + if (is_eplusplus) { + M.setPersistentData('e++' + this.name + '!' + k, this.newcache[k]).always(nop); + } + else if (fmdb) { + fmdb.add(this.name, {k: k, d: {v: this.newcache[k]}}); + } + this.dbcache[k] = this.newcache[k]; + } + + this.delcache = Object.create(null); + this.newcache = Object.create(null); +}; + +// set item in DB/cache +// (must only be called in response to an API response triggered by an actionpacket) +IndexedDBKVStorage.prototype.setItem = function __IDBKVSetItem(k, v) { + 'use strict'; + var self = this; + console.assert(v !== undefined); + return new MegaPromise(function(resolve) { + delete self.delcache[k]; + self.newcache[k] = v; + self.saveState(); + resolve([k, v]); + }); +}; + +// get item - if not found, promise will be rejected +IndexedDBKVStorage.prototype.getItem = function __IDBKVGetItem(k) { + 'use strict'; + var self = this; + return new MegaPromise(function(resolve, reject) { + if (!self.delcache[k]) { + + if (self.newcache[k] !== undefined) { + // record recently (over)written + return resolve(self.newcache[k]); + } + + // record available in DB + if (self.dbcache[k] !== undefined) { + return resolve(self.dbcache[k]); + } + } + + // record deleted or unavailable + reject(); + }); +}; + +// remove item from DB/cache +// (must only be called in response to an API response triggered by an actionpacket) +IndexedDBKVStorage.prototype.removeItem = function __IDBKVRemoveItem(k) { + 'use strict'; + + this.delcache[k] = true; + delete this.newcache[k]; + this.saveState(); + + return MegaPromise.resolve(); +}; + +// enqueue explicit flush +IndexedDBKVStorage.prototype.saveState = function() { + 'use strict'; + var self = this; + + delay('attribcache:savestate', function() { + if (d) { + console.debug('attribcache:savestate(%s)...', currsn, fminitialized); + } + + if (fminitialized && currsn || is_eplusplus) { + if (window.fmdb) { + setsn(currsn); + } + else { + self.flush(); + } + } + }, 2600); +}; + +// Clear DB Table and in-memory contents. +IndexedDBKVStorage.prototype.clear = promisify(function __IDBKVClear(resolve, reject) { + 'use strict'; + var self = this; + console.error("This function should not be used under normal conditions..."); + self.constructor.call(this, this.name); + + if (is_eplusplus) { + M.getPersistentDataEntries('e++' + this.name + '!') + .then(function(r) { + return Promise.allSettled(r.map(function(k) { + return M.delPersistentData(k); + })); + }) + .then(resolve).catch(reject); + return; + } + + if (window.fmdb && Object(fmdb.db).hasOwnProperty(this.name)) { + return fmdb.db[this.name].clear().then(resolve).catch(reject); + } + + reject(); +}); + +if (!is_karma) { + Object.freeze(IndexedDBKVStorage.prototype); +} +Object.freeze(IndexedDBKVStorage); + +var attribCache = false; +mBroadcaster.once('boot_done', function() { + 'use strict'; + attribCache = new IndexedDBKVStorage('ua'); + attribCache.bitMapsManager = new MegaDataBitMapManager(); + + // We no longer need this for anything else. + window.IndexedDBKVStorage = null; +}); + +/** + * Shared, Local Key Value Storage. + * To be used for storing local (non-api persisted data, mostly non-critical data). + * + * @param name {String} + * @param manualFlush {bool} by default disabled, note: NOT tested/used yet. + * @param [broadcaster] {Object} mBroadcaster-like object in case you don't want to use the global mBroadcaster + * and watchdog (useful for unit tests - see test/utilities/fakebroadcaster.js) + * + * @constructor + */ +var SharedLocalKVStorage = function(name, manualFlush, broadcaster) { + var self = this; + + if (!broadcaster) { + broadcaster = mBroadcaster; + } + self.broadcaster = broadcaster; + + // intentionally using '.wdog' instead of '.watchdog', because a self.wdog (where 'self' is not defined), + // would basically cause our code to use the global 'watchdog' object, which can cause a lot of hard to track + // issues! + if (typeof broadcaster.watchdog !== 'undefined') { + self.wdog = broadcaster.watchdog; + } + else { + self.wdog = watchdog; + } + + + self.name = name; + self.manualFlush = manualFlush; + + const id = broadcaster.id || broadcaster.crossTab && broadcaster.crossTab.ctID; + self.logger = new MegaLogger(`SharedLocalKVStorage[${name}:${id}]`); + self.debug = window.d > 0 && d; + + self.persistAdapter = null; + + self._queuedSetOperations = Object.create(null); + + self._listeners = {}; + self._initPersistance(); + + Object.defineProperty(this, 'isMaster', { + get: function() { + return !!self.broadcaster.crossTab.master; + }, + set: function() { + throw new Error(".isMaster is read only!"); + } + }); +}; + +inherits(SharedLocalKVStorage, MegaDataEmitter); + +/** + * Worst case scenario of an inactive tab, that is heavily throttled by Chrome, so we need to set the query time out + * when running in realworld cases to a bit higher value. + */ +SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT = ( + mega.chrome ? 10000 : 1000 +); + +SharedLocalKVStorage._replyToQuery = function(watchdog, token, query, value) { + watchdog.notify('Q!Rep!y', { + query: query, + token: token, + value: value + }); +}; + +SharedLocalKVStorage._clearQueuedSetRecord = (self, key, target) => { + 'use strict'; + assert(self instanceof SharedLocalKVStorage); + + if (self._queuedSetOperations[key]) { + const index = self._queuedSetOperations[key].indexOf(target); + if (d) { + console.assert(index >= 0, `Cannot find ${key}'s`, target); + } + + if (index > -1) { + self._queuedSetOperations[key].splice(index, 1); + + if (!self._queuedSetOperations[key].length) { + delete self._queuedSetOperations[key]; + + if (self.debug) { + self.logger.debug(`SetQueue ran empty for ${key}`); + } + } + + if (self.debug && !$.len(self._queuedSetOperations)) { + self.logger.debug(`SetQueue emptied.`); + } + } + } + else if (self.debug) { + self.logger.warn(`SetQueue is missing ${key}`); + } +}; + +SharedLocalKVStorage.prototype.triggerOnChange = function(k, v) { + var self = this; + self.trigger('onChange', [k, v]); +}; + +SharedLocalKVStorage.prototype._setupPersistance = function() { + 'use strict'; + var self = this; + console.assert(!this.persistAdapter, 'a previous persist adapter exists ?!..'); + + // clear any old/previously added event handlers in case this function is called after a master change + [ + 'watchdog:Q!slkv_get_' + self.name, + `watchdog:Q!slkv_getby_${this.name}`, + 'watchdog:Q!slkv_keys_' + self.name, + 'watchdog:Q!slkv_set_' + self.name, + `watchdog:Q!slkv_clear_${this.name}`, + `watchdog:Q!slkv_destroy_${this.name}`, + 'watchdog:slkv_mchanged_' + self.name, + 'crossTab:master' + ].forEach(function(k) { + if (self._listeners[k]) { + self.broadcaster.removeListener(self._listeners[k]); + delete self._listeners[k]; + } + // self.wdog.removeEventHandler(k); + }) ; + + + var listenersMap = {}; + + if (self.broadcaster.crossTab.master) { + // i'm the cross tab master + self.persistAdapter = new SharedLocalKVStorage.Utils.DexieStorage( + self.name, + self.manualFlush, + self.wdog.wdID + ); + + listenersMap["watchdog:Q!slkv_keys_" + self.name] = function (args) { + var token = args.data.reply; + assert(token, 'token is missing for: ' + JSON.stringify(args)); + + self.keys(args.data.p).then((keys) => { + SharedLocalKVStorage._replyToQuery(self.wdog, token, "Q!slkv_keys_" + self.name, keys); + }).catch(dump); + }; + + listenersMap[`watchdog:Q!slkv_destroy_${this.name}`] = (args) => { + const token = args.data.reply; + + this.destroy() + .catch(dump) + .finally(() => { + SharedLocalKVStorage._replyToQuery(this.wdog, token, `Q!slkv_destroy_${this.name}`, 0xDEAD); + }); + }; + + listenersMap[`watchdog:Q!slkv_clear_${this.name}`] = (args) => { + const token = args.data.reply; + + this.clear() + .catch(dump) + .finally(() => { + SharedLocalKVStorage._replyToQuery(this.wdog, token, `Q!slkv_clear_${this.name}`, 0xDEADBEEF); + }); + }; + + listenersMap["watchdog:Q!slkv_get_" + self.name] = function(args) { + var token = args.data.reply; + self.getItem(args.data.k) + .then((response) => { + if (self.debug > 1) { + self.logger.debug("Sending slkv_get reply: ", args.data.k, response); + } + SharedLocalKVStorage._replyToQuery(self.wdog, token, "Q!slkv_get_" + self.name, response); + }) + .catch(() => { + SharedLocalKVStorage._replyToQuery(self.wdog, token, "Q!slkv_get_" + self.name, undefined); + }); + }; + + listenersMap[`watchdog:Q!slkv_getby_${this.name}`] = (args) => { + const {reply: token, pfx} = args.data; + + this.eachPrefixItem(pfx) + .then((response) => { + SharedLocalKVStorage._replyToQuery(this.wdog, token, `Q!slkv_getby_${this.name}`, response); + }) + .catch((ex) => { + if (this.debug && ex !== ENOENT || this.debug > 1) { + this.logger.warn(`slkv_getby_${this.name}:${pfx}`, ex); + } + SharedLocalKVStorage._replyToQuery(this.wdog, token, `Q!slkv_getby_${this.name}`, undefined); + }); + }; + + listenersMap["watchdog:Q!slkv_set_" + self.name] = function(args) { + var token = args.data.reply; + + var result; + + if (typeof args.data.v === 'undefined') { + result = self.removeItem(args.data.k, { + 'origin': args.origin + }); + } + else { + result = self.setItem(args.data.k, args.data.v, { + 'origin': args.origin + }); + } + + result + .done(function(response) { + SharedLocalKVStorage._replyToQuery(self.wdog, token, "Q!slkv_set_" + self.name, response); + }) + .fail(function() { + SharedLocalKVStorage._replyToQuery(self.wdog, token, "Q!slkv_set_" + self.name, undefined); + }); + }; + } + else { + self.persistAdapter = false; + + listenersMap["watchdog:slkv_mchanged_" + self.name] = function(args) { + if (args.data.meta.origin !== self.wdog.wdID) { + self.triggerOnChange(args.data.k, args.data.v); + } + }; + + listenersMap['crossTab:master'] = function(args) { + // .setMaster was locally called. + if (!self.persistAdapter) { + self._setupPersistance(); + } + }; + } + + + Object.keys(listenersMap).forEach(function(k) { + self._listeners[k] = self.broadcaster.addListener(k, listenersMap[k]); + }); +}; + +SharedLocalKVStorage.prototype._initPersistance = function() { + var self = this; + + self._setupPersistance(); + + if (this.debug) { + self.rebind("onChange.logger" + self.name, function(e, k, v) { + self.logger.debug("Got onChange event:", k, v); + }); + } + + this._leavingListener = this.broadcaster.addListener('crossTab:leaving', ({origin, data}) => { + const {wasMaster, newMaster} = data; + const didMasterLeave = wasMaster && wasMaster !== -1; + const didBecomeMaster = didMasterLeave && newMaster === this.broadcaster.crossTab.ctID; + + if (this.debug) { + const msg = `Tab '${(origin >>> 0).toString(36)}' leaved, checking ownership...`; + this.logger.log(msg, {didMasterLeave, didBecomeMaster, origin}, data); + } + + // master had changed? + if (didMasterLeave) { + if (didBecomeMaster) { + console.assert(this.broadcaster.crossTab.master, 'I was expecting to be master...'); + if (!this.persistAdapter) { + this._setupPersistance(); + } + } + + const setItem = (k, data) => { + const {targetValue, resolve, reject} = data; + + if (d) { + this.logger.debug(`Re-setting value for '${k}'`, targetValue); + } + + this.setItem(k, targetValue) + .then(resolve) + .catch(reject) + .finally(() => { + SharedLocalKVStorage._clearQueuedSetRecord(this, k, data); + }); + }; + + // master had changed, do I've any queued ops that were not executed? re-send them! + for (const k in this._queuedSetOperations) { + const pending = this._queuedSetOperations[k]; + + for (let i = 0; i < pending.length; ++i) { + setItem(k, pending[i]); + } + } + } + }); +}; + + +SharedLocalKVStorage.prototype.getItem = function(k) { + var self = this; + + if (self.broadcaster.crossTab.master) { + return this.persistAdapter.getItem(k); + } + else { + // request using cross tab from master + var promise = new MegaPromise(); + + self.wdog.query("slkv_get_" + self.name, SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, false, {'k': k}, true) + .then((response) => { + if (response && response[0]) { + promise.resolve(response[0]); + } + else { + promise.reject(); + } + }) + .catch((ex) => { + self.logger.warn("getItem request failed: ", k, ex); + promise.reject(ex); + }); + + return promise; + } +}; + +SharedLocalKVStorage.prototype.eachPrefixItem = function __SLKVEachItem(pfx, each) { + 'use strict'; + + if (this.broadcaster.crossTab.master) { + return this.persistAdapter.eachPrefixItem(pfx, each); + } + + return new MegaPromise((resolve, reject) => { + + this.wdog.query(`slkv_getby_${this.name}`, SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, false, {pfx}, true) + .then(([res]) => { + if (!res) { + return reject(ENOENT); + } + if (each) { + for (const k in res) { + each(res[k], k); + } + } + resolve(res); + }) + .catch(reject); + }); +}; + +SharedLocalKVStorage.prototype.dump = function(prefix) { + 'use strict'; + return this.eachPrefixItem(prefix || '', dump).dump(`${this.name}.dump(${prefix || ''})`); +}; + +SharedLocalKVStorage.prototype.keys = function(prefix) { + var self = this; + + if (self.broadcaster.crossTab.master) { + return self.persistAdapter.keys(prefix); + } + else { + // request using cross tab from master + var promise = new MegaPromise(); + + self.wdog.query( + "slkv_keys_" + self.name, + SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, + false, + { + 'p': prefix + }, + true + ).then((response) => { + if (response && response[0]) { + promise.resolve(response[0]); + } + else { + promise.reject(EINCOMPLETE); + } + }).catch((ex) => { + promise.reject(ex); + }); + + return promise; + } + +}; + + +SharedLocalKVStorage.prototype.setItem = function(k, v, meta) { + 'use strict'; + var self = this; + if (self.broadcaster.crossTab.master) { + var fn = "setItem"; + if (typeof v === 'undefined') { + fn = "removeItem"; + } + + if (!meta) { + // if triggered locally, by the master, there is no 'meta', so lets add our wdID + meta = { + 'origin': self.wdog.wdID + }; + } + else { + // if i'm not the one who triggered the change, trigger a local on change event. + self.triggerOnChange(k, v); + } + // Notify via watchdog that there was a change! + // doing it immediately (and not after .done), because of Chrome's delay of indexedDB operations + self.wdog.notify("slkv_mchanged_" + self.name, {'k': k, 'v': v, 'meta': meta}); + + return self.persistAdapter[fn](k, v); + } + + return new MegaPromise((resolve, reject) => { + + if (!this._queuedSetOperations[k]) { + this._queuedSetOperations[k] = []; + } + const op = {resolve, reject, targetValue: v}; + this._queuedSetOperations[k].push(op); + + this.wdog.query(`slkv_set_${this.name}`, SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, false, {k, v}, true) + .then(resolve) + .catch(reject) + .finally(() => { + SharedLocalKVStorage._clearQueuedSetRecord(self, k, op); + }); + }); +}; + +SharedLocalKVStorage.prototype.removeItem = function(k, meta) { + var self = this; + if (self.broadcaster.crossTab.master) { + return self.setItem(k, undefined, meta); + } + else { + var promise = new MegaPromise(); + self.wdog.query( + "slkv_set_" + self.name, + SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, + false, + { + 'k': k, + 'v': undefined + }, + true + ) + .then(() => { + promise.resolve(); + }) + .catch(() => { + promise.reject(); + }); + return promise; + } +}; + +SharedLocalKVStorage.prototype.clear = function() { + 'use strict'; + + if (this.debug) { + this.logger.warn('Cleaning instance...', [this]); + } + + if (this.broadcaster.crossTab.master) { + return this.persistAdapter.clear(); + } + + return new MegaPromise((resolve, reject) => { + this.wdog.query(`slkv_clear_${this.name}`, SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, false, false, true) + .then(resolve) + .catch(reject); + }); +}; + +SharedLocalKVStorage.prototype.destroy = function() { + 'use strict'; + var self = this; + + if (self.debug) { + self.logger.warn('Destroying instance...', [this]); + } + + if (self._leavingListener) { + self.broadcaster.removeListener(self._leavingListener); + } + + if (self.debug) { + self.off(`onChange.logger${self.name}`); + } + + if (self.broadcaster.crossTab.master) { + return this.persistAdapter.destroy(); + } + + return new MegaPromise((resolve, reject) => { + self.wdog.query(`slkv_destroy_${this.name}`, SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, false, false, true) + .then(resolve) + .catch(reject); + }); +}; + +SharedLocalKVStorage.DB_MODE = { + 'MANUAL_FLUSH': 1, + 'NO_MEMOIZE': 2, + 'FORCE_MEMOIZE': 4, + 'BINARY': 8, +}; +SharedLocalKVStorage.DB_STATE = { + 'NOT_READY': 0, + 'READY': 1, + 'INITIALISING': 2, + 'FAILED': 3, +}; + +SharedLocalKVStorage.encrypt = function(val) { + 'use strict'; + + return FMDB.prototype.toStore(JSON.stringify(val)); +}; +SharedLocalKVStorage.decrypt = function(val) { + 'use strict'; + + try { + return JSON.parse(FMDB.prototype.fromStore(val)); + } + catch (e) { + return ""; + } +}; + +SharedLocalKVStorage.Utils = Object.create(null); + +SharedLocalKVStorage.Utils.lazyInitCall = function(proto, method, master, fn) { + 'use strict'; + if (fn === undefined) { + fn = master; + master = true; + } + proto[method] = function __SLKVLazyInitCall(...args) { + if (master && !mBroadcaster.crossTab.master) { + // the method shall dealt with it. + return fn.apply(this, arguments); + } + + return new Promise((resolve, reject) => { + const name = this.__slkvLazyInitMutex || (this.__slkvLazyInitMutex = `lIMutex${makeUUID().slice(-13)}`); + mutex.lock(name).then((unlock) => { + const onReadyState = () => { + delete this.__slkvLazyInitMutex; + return (this[method] = fn).apply(this, args).then(resolve).catch(reject); + }; + + if (Object.hasOwnProperty.call(this, '__slkvLazyInitReady')) { + return onReadyState().finally(unlock); + } + + this.lazyInit() + .then(() => { + Object.defineProperty(this, '__slkvLazyInitReady', {value: 1}); + return onReadyState(); + }) + .finally(unlock); + }).catch(reject); + }); + }; + + return proto[method]; +}; + +SharedLocalKVStorage.Utils._requiresMutex = function SLKVMutexWrapper(origFunc, methodName) { + 'use strict'; + return function __SLKVMutexWrapper(...args) { + const name = this.__mutexLockName || (this.__mutexLockName = `slkv${makeUUID().slice(-13)}`); + return new MegaPromise((resolve, reject) => { + mutex.lock(name) + .then((unlock) => { + const wrap = (dsp) => (arg) => { + if (d > 1) { + this.logger.warn('Releasing lock(%s) from %s...', name, methodName); + console.timeEnd(name); + } + unlock().then(() => dsp(arg)).catch(reject); + }; + if (d > 1) { + this.logger.warn('Lock(%s) acquired for %s...', name, methodName, [this, ...args]); + console.time(name); + } + origFunc.apply(this, args).then(wrap(resolve)).catch(wrap(reject)); + }) + .catch(reject); + }); + }; +}; + +SharedLocalKVStorage.Utils.DexieStorage = function(name, options) { + 'use strict'; + + this.name = name; + this.dbState = SharedLocalKVStorage.DB_STATE.NOT_READY; + this.logger = new MegaLogger("SLKVDStorage[" + name + "]"); + + this.binary = options & SharedLocalKVStorage.DB_MODE.BINARY; + this.manualFlush = options & SharedLocalKVStorage.DB_MODE.MANUAL_FLUSH; + this.memoize = !(options & SharedLocalKVStorage.DB_MODE.NO_MEMOIZE); + + if (this.binary) { + this.memoize = options & SharedLocalKVStorage.DB_MODE.FORCE_MEMOIZE; + this._encryptValue = this._encryptBinaryValue; + this._decryptValue = this._decryptBinaryValue; + } + + this._reinitCache(); +}; +inherits(SharedLocalKVStorage.Utils.DexieStorage, MegaDataEmitter); + +/** + * Database connection. + * @name db + * @memberOf SharedLocalKVStorage.Utils.DexieStorage.prototype + */ +lazy(SharedLocalKVStorage.Utils.DexieStorage.prototype, 'db', function() { + 'use strict'; + return new MegaDexie('SLKV', this.name, 'slkv_', true, {kv: '++i, &k'}); +}); + +SharedLocalKVStorage.Utils._requiresDbReady = function SLKVDBConnRequired(fn) { + 'use strict'; + return function __requiresDBConnWrapper(...args) { + + if (this.dbState === SharedLocalKVStorage.DB_STATE.READY) { + return fn.apply(this, arguments); + } + + var self = this; + var promise = new MegaPromise(); + + if (!u_handle) { + promise.reject(); + return promise; + } + + var success = function() { + promise.linkDoneAndFailTo(fn.apply(self, args)); + }; + + var failure = function(ex) { + self.logger.warn(ex); + self.dbState = SharedLocalKVStorage.DB_STATE.FAILED; + promise.reject("DB_FAILED"); + }; + + // lazy db init + if (self.dbState === SharedLocalKVStorage.DB_STATE.NOT_READY) { + self.dbState = SharedLocalKVStorage.DB_STATE.INITIALISING; + + self.dbLoadingPromise = new MegaPromise(); + + self.db.open().then(self._OpenDB.bind(self)).then(function(r) { + self.logger.info('DB Ready, %d records loaded.', r.length, r); + }).catch(failure).finally(function() { + var p = self.dbLoadingPromise; + delete self.dbLoadingPromise; + + if (d > 1) { + self.db.$__OwnerInstance = self; + } + + if (self.dbState === SharedLocalKVStorage.DB_STATE.FAILED) { + return p.reject("DB_OPEN_FAILED"); + } + self.dbState = SharedLocalKVStorage.DB_STATE.READY; + + success(); + p.resolve(); + }).catch(failure); + } + else if (self.dbState === SharedLocalKVStorage.DB_STATE.INITIALISING) { + // DB open is in progress. + self.dbLoadingPromise.then(success).catch(failure); + } + else { + promise.reject("DB_FAILED"); + } + + return promise; + }; +}; + +SharedLocalKVStorage.Utils.DexieStorage.prototype._encryptKey = SharedLocalKVStorage.encrypt; +SharedLocalKVStorage.Utils.DexieStorage.prototype._decryptKey = SharedLocalKVStorage.decrypt; +SharedLocalKVStorage.Utils.DexieStorage.prototype._encryptValue = SharedLocalKVStorage.encrypt; +SharedLocalKVStorage.Utils.DexieStorage.prototype._decryptValue = SharedLocalKVStorage.decrypt; + +// @private +SharedLocalKVStorage.Utils.DexieStorage.prototype._encryptBinaryValue = function(value) { + 'use strict'; + var pad = -value.byteLength & 15; + if (pad) { + var tmp = new Uint8Array(value.byteLength + pad); + tmp.set(value); + value = tmp; + } + return [pad, FMDB.prototype._crypt(u_k_aes, value)]; +}; + +// @private +SharedLocalKVStorage.Utils.DexieStorage.prototype._decryptBinaryValue = function(value) { + 'use strict'; + var pad = value[0]; + value = FMDB.prototype._decrypt(u_k_aes, value[1]); + return pad ? value.slice(0, -pad) : value; +}; + +SharedLocalKVStorage.Utils.DexieStorage.prototype._OpenDB = function() { + 'use strict'; + var self = this; + + if (!this.memoize) { + return Promise.resolve([]); + } + return self.db.kv.toArray() + .then(function(r) { + for (var i = 0; i < r.length; ++i) { + self.dbcache[self._decryptKey(r[i].k)] = self._decryptValue(r[i].v); + } + return r; + }); +}; + +// flush new items / deletions to the DB (in channel 0, this should +// be followed by call to setsn()) +// will be a no-op if no fmdb set +SharedLocalKVStorage.Utils.DexieStorage.prototype.flush = function() { + 'use strict'; + var self = this; + var masterPromise = new MegaPromise(); + + var debug = function(o) { + return o.map(function(o) { + return self._decryptKey(o.k) + ':' + self._decryptValue(o.v); + }); + }; + + var done = onIdle.bind(null, function() { + if (!self.memoize) { + self._reinitCache(); + } + masterPromise.resolve(); + }); + + var bulkDelete = Object.keys(self.delcache) + .map(function(k) { + delete self.dbcache[k]; + return self.db.kv.where('k').equals(self._encryptKey(k)).delete(); + }); + + var bulkPut = Object.keys(self.newcache) + .map(function(k) { + self.dbcache[k] = self.newcache[k]; + return { + k: self._encryptKey(k), + v: self._encryptValue(self.newcache[k]) + }; + }); + + self.delcache = Object.create(null); + self.newcache = Object.create(null); + + Promise.all(bulkDelete) + .then(function() { + return self.db.bulkUpdate(bulkPut); + }) + .then(done) + .catch(function(ex) { + if (d || is_karma) { + self.db.kv.toArray() + .then(function(o) { + self.logger.error("flush failed", ex.message, [ex], debug(bulkPut), debug(o)); + masterPromise.reject(ex); + }); + } + else { + masterPromise.reject(ex); + } + }); + + return masterPromise; +}; + + +SharedLocalKVStorage.Utils.DexieStorage.prototype.setItem = function __SLKVSetItem(k, v) { + 'use strict'; + console.assert(v !== undefined); + + delete this.delcache[k]; + this.newcache[k] = v; + + if (this.manualFlush) { + return MegaPromise.resolve(); + } + + return this.flush(); +}; + +// get item - if not found, promise will be rejected +SharedLocalKVStorage.Utils.DexieStorage.prototype.getItem = function __SLKVGetItem(k) { + 'use strict'; + var self = this; + return new MegaPromise(function(resolve, reject) { + + if (!self.delcache[k]) { + if (self.newcache[k] !== undefined) { + // record recently (over)written + return resolve(self.newcache[k]); + } + + // record available in DB + if (self.dbcache[k] !== undefined) { + return resolve(self.dbcache[k]); + } + } + + if (self.memoize) { + // record deleted or unavailable + return reject(); + } + + self.db.kv.where('k').equals(self._encryptKey(k)).toArray() + .then(function(r) { + if (!r.length) { + // record deleted or unavailable + return reject(); + } + + resolve(self._decryptValue(r[0].v)); + }) + .catch(reject); + }); +}; + +SharedLocalKVStorage.Utils.DexieStorage.prototype.keys = function __SLKVKeys(prefix) { + 'use strict'; + var self = this; + return new MegaPromise(function(resolve, reject) { + var filter = function(k) { + return (prefix ? k.startsWith(prefix) : true) && self.delcache[k] === undefined; + }; + + if (self.memoize) { + var keys = Object.keys(Object.assign({}, self.dbcache, self.newcache)); + return resolve(keys.filter(filter)); + } + + self.db.kv.orderBy('k').keys() + .then(function(keys) { + resolve(keys.map(self._decryptKey.bind(self)).filter(filter)); + }) + .catch(reject); + }); +}; + +// check if item exists +SharedLocalKVStorage.Utils.DexieStorage.prototype.hasItem = function __SLKVHasItem(k) { + 'use strict'; + var self = this; + return new MegaPromise(function(resolve, reject) { + if (!self.delcache[k] && (self.newcache[k] !== undefined || self.dbcache[k] !== undefined)) { + return resolve(); + } + + if (self.memoize) { + return reject(); + } + + self.db.kv.where('k').equals(self._encryptKey(k)).keys() + .then(function(r) { + if (r.length) { + return resolve(); + } + reject(); + }) + .catch(reject); + }); +}; + +SharedLocalKVStorage.Utils.DexieStorage.prototype.removeItem = function __SLKVRemoveItem(k, expunge) { + 'use strict'; + var self = this; + expunge = expunge === true; + if (d) { + this.logger.debug(`removeItem(${JSON.stringify(k)})`, expunge, this.memoize, this.manualFlush); + } + + if (!expunge && self.memoize && this.newcache[k] === undefined && this.dbcache[k] === undefined) { + return MegaPromise.reject(); + } + + this.delcache[k] = true; + delete this.newcache[k]; + delete this.dbcache[k]; + + if (!expunge) { + return this.flush(); + } + + return new MegaPromise(function(resolve, reject) { + self.flush().then(function() { + return self.db.kv.count(); + }).then(function(num) { + if (d && !num) { + console.assert(!$.len(Object.assign({}, self.dbcache, self.newcache))); + } + return num ? num : self._destroy(); + }).then(resolve).catch(reject); + }); +}; + +/** + * Iterate over all items, with prefix. + * + * Note: Case sensitive. + * + * @param {String} prefix that would be used for filtering the data + * @param {Function} [each] callback(value, key) + * @returns {MegaPromise} promise + */ +SharedLocalKVStorage.Utils.DexieStorage.prototype.eachPrefixItem = function __SLKVEachItem(prefix, each) { + 'use strict'; + return new MegaPromise((resolve, reject) => { + + let count = 0; + const res = Object.create(null); + + if (this.memoize) { + Object.assign(res, this.dbcache, this.newcache); + + for (const key in res) { + if (this.delcache[key] || !key.startsWith(prefix)) { + delete res[key]; + } + else { + if (each) { + each(res[key], key); + } + ++count; + } + } + + return count ? resolve(res) : reject(ENOENT); + } + + this.db.kv.toArray() + .then((r) => { + + for (let i = r.length; i--;) { + const k = this._decryptKey(r[i].k); + + if (k.startsWith(prefix)) { + res[k] = this._decryptValue(r[i].v); + + if (each) { + each(res[k], k); + } + ++count; + } + } + + return count ? resolve(res) : reject(ENOENT); + }) + .catch(reject); + }); +}; + +/** + * Drops the local db + */ +SharedLocalKVStorage.Utils.DexieStorage.prototype.destroy = function __SLKVDestroy() { + 'use strict'; + return new MegaPromise((resolve, reject) => { + + this._reinitCache(); + this.dbState = SharedLocalKVStorage.DB_STATE.NOT_READY; + + return 'db' in this ? this.db.delete().then(resolve).catch(reject) : resolve(); + }); +}; + +/** + * Re/Initialises the local in memory cache + */ +SharedLocalKVStorage.Utils.DexieStorage.prototype._reinitCache = function __SLKVReinitCache() { + 'use strict'; + this.dbcache = Object.create(null); // items that reside in the DB + this.newcache = Object.create(null); // new items that are pending flushing to the DB + this.delcache = Object.create(null); // delete items that are pending deletion from the DB +}; + + +/** + * Clear DB contents. + * @returns {MegaPromise} + */ +SharedLocalKVStorage.Utils.DexieStorage.prototype.clear = function __SLKVClear() { + var self = this; + + var promise = new MegaPromise(); + + self.db.kv.clear() + .catch(function (e) { + self.logger.error("clear failed: ", arguments, e.stack); + self._reinitCache(); + promise.reject(e); + }) + .finally(function () { + self._reinitCache(); + promise.resolve(); + }); + + return promise; +}; + +SharedLocalKVStorage.Utils.DexieStorage.prototype.close = function __SLKVClose() { + var self = this; + var oldState = self.dbState; + self.dbState = SharedLocalKVStorage.DB_STATE.NOT_READY; + if (oldState === SharedLocalKVStorage.DB_STATE.READY) { + self.db.close(); + } + self.db = null; + self._reinitCache(); +}; + +/** + * So that the code in the file is more easy to debug via IDEs, the + * SharedLocalKVStorage.Utils.DexieStorage._requiresDbReady wrapper is going to wrap the required functions in runtime + * Guarantee that promise-returning methods are executed one after another. + */ +(function __monkeyPatch(proto) { + 'use strict'; + // eslint-disable-next-line local-rules/misc-warnings + Object.keys(proto) + .filter(function(n) { + return n[0] !== '_'; + }) + .forEach(function(methodName) { + var origFunc = SharedLocalKVStorage.Utils._requiresDbReady(proto[methodName], methodName); + + if (methodName !== 'flush') { + if (methodName === 'destroy' /* || ... */) { + // to be used under an already acquired lock. + Object.defineProperty(proto, '_' + methodName, {value: proto[methodName]}); + } + origFunc = SharedLocalKVStorage.Utils._requiresMutex(origFunc, methodName); + } + + proto[methodName] = origFunc; + + var short = methodName.replace(/[A-Z].*/, ''); + if (short !== methodName) { + Object.defineProperty(proto, short, {value: proto[methodName]}); + } + }); +})(SharedLocalKVStorage.Utils.DexieStorage.prototype); + +/** + * @fileOverview + * Storage of key/value pairs in a "container". + */ + +/** @property window.tlvstore */ +lazy(self, 'tlvstore', () => { + "use strict"; + + /** + * @description + *

                Storage of key/value pairs in a "container".

                + * + *

                + * Stores a set of key/value pairs in a binary container format suitable for + * encrypted storage of private attributes

                + * + *

                + * TLV records start with the key as a "tag" (ASCII string), terminated by a + * NULL character (\u0000). The length of the payload is encoded as a 16-bit + * unsigned integer in big endian format (2 bytes), followed by the payload + * (as a byte string). The payload *must* contain 8-bit values for each + * character only!

                + */ + const ns = { + _logger: MegaLogger.getLogger('tlvstore') + }; + + const getKey = (key) => { + if (Array.isArray(key)) { + // Key is in the form of an array of four 32-bit words. + key = new Uint32Array(key); + const u8 = new Uint8Array(key.byteLength); + const dv = new DataView(u8.buffer); + + for (let i = 0; i < key.length; ++i) { + dv.setUint32(i * 4, key[i], false); + } + key = u8; + } + else if (typeof key === 'string') { + key = Uint8Array.from(key, ch => ch.charCodeAt(0)); + } + + return key; + }; + + const te = new TextEncoder(); + const td = new TextDecoder(); + + /** + * Generates a binary encoded TLV record from a key-value pair. + * + * @param key {string} + * ASCII string label of record's key. + * @param value {string} + * Byte string payload of record. + * @param {Boolean} utf8 Require UTF-8 conversion. + * @returns {string} + * Single binary encoded TLV record. + * @private + */ + ns.toTlvRecord = function(key, value, utf8) { + if (utf8) { + value = asmCrypto.bytes_to_string(te.encode(value)); + } + if (value.length > 65535) { + if (typeof eventlog === 'function') { + eventlog(99772, JSON.stringify([1, 1, key.length, value.length, utf8 | 0]), true); + } + this._logger.warn(`TLV-record ${key} did overflow.`, utf8); + } + const length = Math.min(65535, value.length); + return `${key}\u0000${String.fromCharCode(length >>> 8)}${String.fromCharCode(length & 0xff)}${value}`; + }; + + /** + * Generates a binary encoded TLV element from a key-value pair. + * There is no separator in between and the length is fixted 2 bytes. + * If the length of the value is bigger than 0xffff, then it will use 0xffff + * as the length, and append the value after. + * + * @param key {string} + * ASCII string label of record's key. + * @param value {string} + * Byte string payload of record. + * @returns {string} + * Single binary encoded TLV record. + * @private + */ + ns.toTlvElement = function(key, value) { + var length = String.fromCharCode(value.length >>> 8) + + String.fromCharCode(value.length & 0xff); + if (value.length > 0xffff) { + length = String.fromCharCode(0xff) + + String.fromCharCode(0xff); + } + return key + length + value; + }; + + /** + * Generates a binary encoded TLV record container from an object containing + * key-value pairs. + * + * @param container {object} + * Object containing (non-nested) key-value pairs. The keys have to be ASCII + * strings, the values byte strings. + * @param {Boolean} [utf8] Require UTF-8 conversion. + * @returns {string} + * Single binary encoded container of TLV records. + */ + ns.containerToTlvRecords = function(container, utf8) { + var result = ''; + let safe = true; + for (var key in container) { + if (container.hasOwnProperty(key)) { + const type = typeof container[key]; + + if (type !== 'string') { + this._logger.error(`Invalid type for element '${key}'. Expected string but got ${type}.`); + return false; + } + if (safe !== true) { + if (typeof eventlog === 'function') { + eventlog(99772, JSON.stringify([1, 3, result.length])); + } + this._logger.error(`Cannot store ${key}, previous element did overflow.`); + return false; + } + const record = ns.toTlvRecord(key, container[key], utf8); + + result += record; + safe = record.length < 65538 + key.length; + } + } + return result; + }; + + + /** + * Splits and decodes a TLV record off of a container into a key-value pair and + * returns the record and the rest. + * + * @param tlvContainer {String} + * Single binary encoded container of TLV records. + * @returns {Object|Boolean} + * Object containing two elements: `record` contains an array of two + * elements (key and value of the decoded TLV record) and `rest` containing + * the remainder of the tlvContainer still to decode. In case of decoding + * errors, `false` is returned. + */ + ns.splitSingleTlvRecord = function(tlvContainer) { + var keyLength = tlvContainer.indexOf('\u0000'); + var key = tlvContainer.substring(0, keyLength); + var valueLength = (tlvContainer.charCodeAt(keyLength + 1)) << 8 + | tlvContainer.charCodeAt(keyLength + 2); + var value = tlvContainer.substring(keyLength + 3, keyLength + valueLength + 3); + + // @todo what if the value did not overflow but was exactly 65535 bytes (?).. + if (valueLength === 0xffff) { + value = tlvContainer.substring(keyLength + 3); + valueLength = value.length; + } + var rest = tlvContainer.substring(keyLength + valueLength + 3); + + // Consistency checks. + if ((valueLength !== value.length) + || (rest.length !== tlvContainer.length - (keyLength + valueLength + 3))) { + ns._logger.info('Inconsistent TLV decoding. Maybe content UTF-8 encoded?'); + + return false; + } + + return { 'record': [key, value], 'rest': rest }; + }; + + /** + * Splits and decodes a TLV element off of a container into a key-value pair and + * returns the element and the rest. + * Note: if the length is 0xffff, which means the appended value is longer than 0xffff, + * it means the rest is the value. + * + * @param tlvContainer {String} + * Single binary encoded container of TLV elements. + * @returns {Object|Boolean} + * Object containing two parts: `element` contains an array of two + * (key and value of the decoded TLV element) and `rest` containing + * the remainder of the tlvContainer still to decode. In case of decoding + * errors, `false` is returned. + */ + ns.splitSingleTlvElement = function(tlvContainer) { + var keyLength = 1; + var key = tlvContainer.substring(0, keyLength); + var valueLength = (tlvContainer.charCodeAt(keyLength)) << 8 + | tlvContainer.charCodeAt(keyLength + 1); + var value = tlvContainer.substring(keyLength + 2, keyLength + valueLength + 2); + + if (valueLength === 0xffff) { + value = tlvContainer.substring(keyLength + 2); + valueLength = value.length; + } + var rest = tlvContainer.substring(keyLength + valueLength + 2); + // Consistency checks. + if ((valueLength !== value.length) + || (rest.length !== tlvContainer.length - (keyLength + valueLength + 2))) { + ns._logger.info('Inconsistent TLV decoding. Maybe content UTF-8 encoded?'); + + return false; + } + + return { 'record': [key, value], 'rest': rest }; + }; + + /** + * Decodes a binary encoded container of TLV records into an object + * representation. + * + * @param tlvContainer {String} + * Single binary encoded container of TLV records. + * @param [utf8LegacySafe] {Boolean} + * Single binary encoded container of TLV records. + * @returns {Object|Boolean} + * Object containing (non-nested) key-value pairs. `false` in case of + * failing TLV decoding. + */ + ns.tlvRecordsToContainer = function(tlvContainer, utf8LegacySafe) { + var rest = tlvContainer; + var container = {}; + + if (!rest.charCodeAt(0) && rest.length > 65538) { + this._logger.warn('tlv-record overflow fix-up.', [rest]); + + if (typeof eventlog === 'function') { + eventlog(99772, JSON.stringify([1, 7, rest.length]), true); + } + + return {'': rest.substr(3)}; + } + + while (rest.length > 0) { + var result = ns.splitSingleTlvRecord(rest); + if (result === false) { + container = false; + break; + } + container[result.record[0]] = result.record[1]; + rest = result.rest; + } + + if (utf8LegacySafe && (container === false)) { + // Treat the legacy case and first UTF-8 decode the container content. + ns._logger.info('Retrying to decode TLV container legacy style ...'); + + return ns.tlvRecordsToContainer(from8(tlvContainer), false); + } + + return container; + }; + + + /** + * "Enumeration" of block cipher encryption schemes for private attribute + * containers. + * + * @property AES_CCM_12_16 {integer} + * AES in CCM mode, 12 byte IV/nonce and 16 byte MAC. + * @property AES_CCM_10_16 {integer} + * AES in CCM mode, 10 byte IV/nonce and 16 byte MAC. + * @property AES_CCM_10_08 {integer} + * AES in CCM mode, 10 byte IV/nonce and 8 byte MAC. + * @property AES_GCM_12_16 {integer} + * AES in CCM mode, 12 byte IV/nonce and 16 byte MAC. + * @property AES_GCM_10_08 {integer} + * AES in CCM mode, 10 byte IV/nonce and 8 byte MAC. + */ + ns.BLOCK_ENCRYPTION_SCHEME = { + AES_CCM_12_16: 0x00, + AES_CCM_10_16: 0x01, + AES_CCM_10_08: 0x02, + AES_GCM_12_16_BROKEN: 0x03, // Same as 0x00 (not GCM, due to a legacy bug). + AES_GCM_10_08_BROKEN: 0x04, // Same as 0x02 (not GCM, due to a legacy bug). + AES_GCM_12_16: 0x10, + AES_GCM_10_08: 0x11 + }; + + + /** + * Parameters for supported block cipher encryption schemes. + */ + ns.BLOCK_ENCRYPTION_PARAMETERS = { + 0x00: {nonceSize: 12, macSize: 16, cipher: 'AES_CCM'}, // BLOCK_ENCRYPTION_SCHEME.AES_CCM_12_16 + 0x01: {nonceSize: 10, macSize: 16, cipher: 'AES_CCM'}, // BLOCK_ENCRYPTION_SCHEME.AES_CCM_10_16 + 0x02: {nonceSize: 10, macSize: 8, cipher: 'AES_CCM'}, // BLOCK_ENCRYPTION_SCHEME.AES_CCM_10_08 + 0x03: {nonceSize: 12, macSize: 16, cipher: 'AES_CCM'}, // Same as 0x00 (due to a legacy bug). + 0x04: {nonceSize: 10, macSize: 8, cipher: 'AES_CCM'}, // Same as 0x02 (due to a legacy bug). + 0x10: {nonceSize: 12, macSize: 16, cipher: 'AES_GCM'}, // BLOCK_ENCRYPTION_SCHEME.AES_GCM_12_16 + 0x11: {nonceSize: 10, macSize: 8, cipher: 'AES_GCM'} // BLOCK_ENCRYPTION_SCHEME.AES_GCM_10_08 + }; + + + /** + * Encrypts clear text data to an authenticated ciphertext, armoured with + * encryption mode indicator and IV. + * + * @param clearText {String} + * Clear text as byte string. + * @param {String|Array|ArrayBufferLike} key + * Encryption key as byte string. + * @param mode {Number} + * Encryption mode as an integer. One of tlvstore.BLOCK_ENCRYPTION_SCHEME. + * @param [utf8Convert] {Boolean} + * Perform UTF-8 conversion of clear text before encryption (default: false). + * @returns {String} + * Encrypted data block as byte string, incorporating mode, nonce and MAC. + */ + ns.blockEncrypt = function(clearText, key, mode, utf8Convert) { + + const {nonceSize, macSize, cipher} = this.BLOCK_ENCRYPTION_PARAMETERS[mode]; + const nonce = mega.getRandomValues(nonceSize); + + const clearBytes = asmCrypto.string_to_bytes(clearText, utf8Convert); + const cipherBytes = asmCrypto[cipher].encrypt(clearBytes, getKey(key), nonce, undefined, macSize); + + return String.fromCharCode(mode) + asmCrypto.bytes_to_string(nonce) + asmCrypto.bytes_to_string(cipherBytes); + }; + + + /** + * Decrypts an authenticated cipher text armoured with a mode indicator and IV + * to clear text data. + * + * @param cipherText {String} + * Encrypted data block as byte string, incorporating mode, nonce and MAC. + * @param key {String} + * Encryption key as byte string. + * @param [utf8Convert] {Boolean} + * Perform UTF-8 conversion of clear text after decryption (default: false). + * @returns {String} + * Clear text as byte string. + */ + ns.blockDecrypt = function(cipherText, key, utf8Convert) { + + var mode = cipherText.charCodeAt(0); + var nonceSize = ns.BLOCK_ENCRYPTION_PARAMETERS[mode].nonceSize; + var nonceBytes = asmCrypto.string_to_bytes(cipherText.substring(1, nonceSize + 1)); + var cipherBytes = asmCrypto.string_to_bytes(cipherText.substring(nonceSize + 1)); + var tagSize = ns.BLOCK_ENCRYPTION_PARAMETERS[mode].macSize; + var cipher = asmCrypto[ns.BLOCK_ENCRYPTION_PARAMETERS[mode].cipher]; + + const clearBytes = cipher.decrypt(cipherBytes, getKey(key), nonceBytes, undefined, tagSize); + return asmCrypto.bytes_to_string(clearBytes, utf8Convert); + }; + + /** + * Encrypts data to an authenticated ciphertext, armoured with encryption mode indicator and IV. + * + * @param {String|Object} payload plain string or key/value pairs to encrypt + * @param {Boolean} [utf8] Whether to take UTF-8 into account (default: true) + * @param {Array|String|Uint8Array} [key] Encryption key. + * @param {Number} [mode] Encryption scheme, AES GCM 12/16 by default. + * @returns {String} encrypted payload. + * @memberOf tlvstore + */ + ns.encrypt = function(payload, utf8, key, mode) { + utf8 = utf8 !== false; + key = getKey(key || self.u_k); + + if (mode === undefined) { + mode = this.BLOCK_ENCRYPTION_SCHEME.AES_GCM_12_16; + } + + if (typeof payload !== 'object') { + payload = {'': String(payload)}; + } + + return base64urlencode(this.blockEncrypt(this.containerToTlvRecords(payload, utf8), key, mode)); + }; + + /** + * Decrypts an authenticated cipher text armoured with a mode indicator and IV. + * + * @param {String} payload Encrypted cipher text payload + * @param {Boolean} [utf8] Whether to take UTF-8 into account (default: true) + * @param {Array|String|Uint8Array} [key] Encryption key. + * @returns {String|Object} decrypted payload as initially provided, string or key/value pairs + * @memberOf tlvstore + */ + ns.decrypt = function(payload, utf8, key) { + utf8 = utf8 !== false; + key = getKey(key || self.u_k); + + const obj = {}; + let rest = tlvstore.blockDecrypt(base64urldecode(payload), key); + + while (rest.length > 0) { + const res = ns.splitSingleTlvRecord(rest); + if (!res) { + return false; + } + let [key, value] = res.record; + + if (utf8) { + value = td.decode(Uint8Array.from(value, ch => ch.charCodeAt(0))); + } + obj[key] = value; + + rest = res.rest; + } + + return obj[''] || obj; + }; + + if (!window.is_karma) { + Object.setPrototypeOf(ns, null); + return Object.freeze(ns); + } + + return ns; +}); + +/** + * The original jsbn.js code, but wrapped in a closure and added a code to ONLY export "BigInteger" into the + * global (window) scope. + */ +(function(scope) { +// Copyright (c) 2005 Tom Wu +// All Rights Reserved. +// See "LICENSE" for details. + +// Basic JavaScript BN library - subset useful for RSA encryption. + +// Bits per digit +var dbits; + +// JavaScript engine analysis +var canary = 0xdeadbeefcafe; +var j_lm = ((canary&0xffffff)==0xefcafe); + +// (public) Constructor +function BigInteger(a,b,c) { + if(a != null) + if("number" == typeof a) this.fromNumber(a,b,c); + else if(b == null && "string" != typeof a) this.fromString(a,256); + else this.fromString(a,b); +} + +// return new, unset BigInteger +function nbi() { return new BigInteger(null); } + +// am: Compute w_j += (x*this_i), propagate carries, +// c is initial carry, returns final carry. +// c < 3*dvalue, x < 2*dvalue, this_i < dvalue +// We need to select the fastest one that works in this environment. + +// am1: use a single mult and divide to get the high bits, +// max digit bits should be 26 because +// max internal value = 2*dvalue^2-2*dvalue (< 2^53) +function am1(i,x,w,j,c,n) { + while(--n >= 0) { + var v = x*this[i++]+w[j]+c; + c = Math.floor(v/0x4000000); + w[j++] = v&0x3ffffff; + } + return c; +} +// am2 avoids a big mult-and-extract completely. +// Max digit bits should be <= 30 because we do bitwise ops +// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) +function am2(i,x,w,j,c,n) { + var xl = x&0x7fff, xh = x>>15; + while(--n >= 0) { + var l = this[i]&0x7fff; + var h = this[i++]>>15; + var m = xh*l+h*xl; + l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff); + c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); + w[j++] = l&0x3fffffff; + } + return c; +} +// Alternately, set max digit bits to 28 since some +// browsers slow down when dealing with 32-bit numbers. +function am3(i,x,w,j,c,n) { + var xl = x&0x3fff, xh = x>>14; + while(--n >= 0) { + var l = this[i]&0x3fff; + var h = this[i++]>>14; + var m = xh*l+h*xl; + l = xl*l+((m&0x3fff)<<14)+w[j]+c; + c = (l>>28)+(m>>14)+xh*h; + w[j++] = l&0xfffffff; + } + return c; +} +if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) { + BigInteger.prototype.am = am2; + dbits = 30; +} +else if(j_lm && (navigator.appName != "Netscape")) { + BigInteger.prototype.am = am1; + dbits = 26; +} +else { // Mozilla/Netscape seems to prefer am3 + BigInteger.prototype.am = am3; + dbits = 28; +} + +BigInteger.prototype.DB = dbits; +BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i]; + r.t = this.t; + r.s = this.s; +} + +// (protected) set from integer value x, -DV <= x < DV +function bnpFromInt(x) { + this.t = 1; + this.s = (x<0)?-1:0; + if(x > 0) this[0] = x; + else if(x < -1) this[0] = x+this.DV; + else this.t = 0; +} + +// return bigint initialized to value +function nbv(i) { var r = nbi(); r.fromInt(i); return r; } + +// (protected) set from string and radix +function bnpFromString(s,b) { + var k; + if(b == 16) k = 4; + else if(b == 8) k = 3; + else if(b == 256) k = 8; // byte array + else if(b == 2) k = 1; + else if(b == 32) k = 5; + else if(b == 4) k = 2; + else { this.fromRadix(s,b); return; } + this.t = 0; + this.s = 0; + var i = s.length, mi = false, sh = 0; + while(--i >= 0) { + var x = (k==8)?s[i]&0xff:intAt(s,i); + if(x < 0) { + if(s.charAt(i) == "-") mi = true; + continue; + } + mi = false; + if(sh == 0) + this[this.t++] = x; + else if(sh+k > this.DB) { + this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh)); + } + else + this[this.t-1] |= x<= this.DB) sh -= this.DB; + } + if(k == 8 && (s[0]&0x80) != 0) { + this.s = -1; + if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t; +} + +// (public) return string representation in given radix +function bnToString(b) { + if(this.s < 0) return "-"+this.negate().toString(b); + var k; + if(b == 16) k = 4; + else if(b == 8) k = 3; + else if(b == 2) k = 1; + else if(b == 32) k = 5; + else if(b == 4) k = 2; + else return this.toRadix(b); + var km = (1< 0) { + if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); } + while(i >= 0) { + if(p < k) { + d = (this[i]&((1<>(p+=this.DB-k); + } + else { + d = (this[i]>>(p-=k))&km; + if(p <= 0) { p += this.DB; --i; } + } + if(d > 0) m = true; + if(m) r += int2char(d); + } + } + return m?r:"0"; +} + +// (public) -this +function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } + +// (public) |this| +function bnAbs() { return (this.s<0)?this.negate():this; } + +// (public) return + if this > a, - if this < a, 0 if equal +function bnCompareTo(a) { + var r = this.s-a.s; + if(r != 0) return r; + var i = this.t; + r = i-a.t; + if(r != 0) return (this.s<0)?-r:r; + while(--i >= 0) if((r=this[i]-a[i]) != 0) return r; + return 0; +} + +// returns bit length of the integer x +function nbits(x) { + var r = 1, t; + if((t=x>>>16) != 0) { x = t; r += 16; } + if((t=x>>8) != 0) { x = t; r += 8; } + if((t=x>>4) != 0) { x = t; r += 4; } + if((t=x>>2) != 0) { x = t; r += 2; } + if((t=x>>1) != 0) { x = t; r += 1; } + return r; +} + +// (public) return the number of bits in "this" +function bnBitLength() { + if(this.t <= 0) return 0; + return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM)); +} + +// (protected) r = this << n*DB +function bnpDLShiftTo(n,r) { + var i; + for(i = this.t-1; i >= 0; --i) r[i+n] = this[i]; + for(i = n-1; i >= 0; --i) r[i] = 0; + r.t = this.t+n; + r.s = this.s; +} + +// (protected) r = this >> n*DB +function bnpDRShiftTo(n,r) { + for(var i = n; i < this.t; ++i) r[i-n] = this[i]; + r.t = Math.max(this.t-n,0); + r.s = this.s; +} + +// (protected) r = this << n +function bnpLShiftTo(n,r) { + var bs = n%this.DB; + var cbs = this.DB-bs; + var bm = (1<= 0; --i) { + r[i+ds+1] = (this[i]>>cbs)|c; + c = (this[i]&bm)<= 0; --i) r[i] = 0; + r[ds] = c; + r.t = this.t+ds+1; + r.s = this.s; + r.clamp(); +} + +// (protected) r = this >> n +function bnpRShiftTo(n,r) { + r.s = this.s; + var ds = Math.floor(n/this.DB); + if(ds >= this.t) { r.t = 0; return; } + var bs = n%this.DB; + var cbs = this.DB-bs; + var bm = (1<>bs; + for(var i = ds+1; i < this.t; ++i) { + r[i-ds-1] |= (this[i]&bm)<>bs; + } + if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB; + } + if(a.t < this.t) { + c -= a.s; + while(i < this.t) { + c += this[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while(i < a.t) { + c -= a[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c -= a.s; + } + r.s = (c<0)?-1:0; + if(c < -1) r[i++] = this.DV+c; + else if(c > 0) r[i++] = c; + r.t = i; + r.clamp(); +} + +// (protected) r = this * a, r != this,a (HAC 14.12) +// "this" should be the larger one if appropriate. +function bnpMultiplyTo(a,r) { + var x = this.abs(), y = a.abs(); + var i = x.t; + r.t = i+y.t; + while(--i >= 0) r[i] = 0; + for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t); + r.s = 0; + r.clamp(); + if(this.s != a.s) BigInteger.ZERO.subTo(r,r); +} + +// (protected) r = this^2, r != this (HAC 14.16) +function bnpSquareTo(r) { + var x = this.abs(); + var i = r.t = 2*x.t; + while(--i >= 0) r[i] = 0; + for(i = 0; i < x.t-1; ++i) { + var c = x.am(i,x[i],r,2*i,0,1); + if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { + r[i+x.t] -= x.DV; + r[i+x.t+1] = 1; + } + } + if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1); + r.s = 0; + r.clamp(); +} + +// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) +// r != q, this != m. q or r may be null. +function bnpDivRemTo(m,q,r) { + var pm = m.abs(); + if(pm.t <= 0) return; + var pt = this.abs(); + if(pt.t < pm.t) { + if(q != null) q.fromInt(0); + if(r != null) this.copyTo(r); + return; + } + if(r == null) r = nbi(); + var y = nbi(), ts = this.s, ms = m.s; + var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus + if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } + else { pm.copyTo(y); pt.copyTo(r); } + var ys = y.t; + var y0 = y[ys-1]; + if(y0 == 0) return; + var yt = y0*(1<1)?y[ys-2]>>this.F2:0); + var d1 = this.FV/yt, d2 = (1<= 0) { + r[r.t++] = 1; + r.subTo(t,r); + } + BigInteger.ONE.dlShiftTo(ys,t); + t.subTo(y,y); // "negative" y so we can replace sub with am later + while(y.t < ys) y[y.t++] = 0; + while(--j >= 0) { + // Estimate quotient digit + var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2); + if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out + y.dlShiftTo(j,t); + r.subTo(t,r); + while(r[i] < --qd) r.subTo(t,r); + } + } + if(q != null) { + r.drShiftTo(ys,q); + if(ts != ms) BigInteger.ZERO.subTo(q,q); + } + r.t = ys; + r.clamp(); + if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder + if(ts < 0) BigInteger.ZERO.subTo(r,r); +} + +// (public) this mod a +function bnMod(a) { + var r = nbi(); + this.abs().divRemTo(a,null,r); + if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); + return r; +} + +// Modular reduction using "classic" algorithm +function Classic(m) { this.m = m; } +function cConvert(x) { + if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); + else return x; +} +function cRevert(x) { return x; } +function cReduce(x) { x.divRemTo(this.m,null,x); } +function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } +function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + +Classic.prototype.convert = cConvert; +Classic.prototype.revert = cRevert; +Classic.prototype.reduce = cReduce; +Classic.prototype.mulTo = cMulTo; +Classic.prototype.sqrTo = cSqrTo; + +// (protected) return "-1/this % 2^DB"; useful for Mont. reduction +// justification: +// xy == 1 (mod m) +// xy = 1+km +// xy(2-xy) = (1+km)(1-km) +// x[y(2-xy)] = 1-k^2m^2 +// x[y(2-xy)] == 1 (mod m^2) +// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 +// should reduce x and y(2-xy) by m^2 at each step to keep size bounded. +// JS multiply "overflows" differently from C/C++, so care is needed here. +function bnpInvDigit() { + if(this.t < 1) return 0; + var x = this[0]; + if((x&1) == 0) return 0; + var y = x&3; // y == 1/x mod 2^2 + y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 + y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 + y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 + // last step - calculate inverse mod DV directly; + // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints + y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits + // we really want the negative inverse, and -DV < y < DV + return (y>0)?this.DV-y:-y; +} + +// Montgomery reduction +function Montgomery(m) { + this.m = m; + this.mp = m.invDigit(); + this.mpl = this.mp&0x7fff; + this.mph = this.mp>>15; + this.um = (1<<(m.DB-15))-1; + this.mt2 = 2*m.t; +} + +// xR mod m +function montConvert(x) { + var r = nbi(); + x.abs().dlShiftTo(this.m.t,r); + r.divRemTo(this.m,null,r); + if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); + return r; +} + +// x/R mod m +function montRevert(x) { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; +} + +// x = x/R mod m (HAC 14.32) +function montReduce(x) { + while(x.t <= this.mt2) // pad x so am has enough room later + x[x.t++] = 0; + for(var i = 0; i < this.m.t; ++i) { + // faster way of calculating u0 = x[i]*mp mod DV + var j = x[i]&0x7fff; + var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM; + // use am to combine the multiply-shift-add into one call + j = i+this.m.t; + x[j] += this.m.am(0,u0,x,i,0,this.m.t); + // propagate carry + while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } + } + x.clamp(); + x.drShiftTo(this.m.t,x); + if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); +} + +// r = "x^2/R mod m"; x != r +function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + +// r = "xy/R mod m"; x,y != r +function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } + +Montgomery.prototype.convert = montConvert; +Montgomery.prototype.revert = montRevert; +Montgomery.prototype.reduce = montReduce; +Montgomery.prototype.mulTo = montMulTo; +Montgomery.prototype.sqrTo = montSqrTo; + +// (protected) true iff this is even +function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; } + +// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) +function bnpExp(e,z) { + if(e > 0xffffffff || e < 1) return BigInteger.ONE; + var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; + g.copyTo(r); + while(--i >= 0) { + z.sqrTo(r,r2); + if((e&(1< 0) z.mulTo(r2,g,r); + else { var t = r; r = r2; r2 = t; } + } + return z.revert(r); +} + +// (public) this^e % m, 0 <= e < 2^32 +function bnModPowInt(e,m) { + var z; + if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); + return this.exp(e,z); +} + +// protected +BigInteger.prototype.copyTo = bnpCopyTo; +BigInteger.prototype.fromInt = bnpFromInt; +BigInteger.prototype.fromString = bnpFromString; +BigInteger.prototype.clamp = bnpClamp; +BigInteger.prototype.dlShiftTo = bnpDLShiftTo; +BigInteger.prototype.drShiftTo = bnpDRShiftTo; +BigInteger.prototype.lShiftTo = bnpLShiftTo; +BigInteger.prototype.rShiftTo = bnpRShiftTo; +BigInteger.prototype.subTo = bnpSubTo; +BigInteger.prototype.multiplyTo = bnpMultiplyTo; +BigInteger.prototype.squareTo = bnpSquareTo; +BigInteger.prototype.divRemTo = bnpDivRemTo; +BigInteger.prototype.invDigit = bnpInvDigit; +BigInteger.prototype.isEven = bnpIsEven; +BigInteger.prototype.exp = bnpExp; + +// public +BigInteger.prototype.toString = bnToString; +BigInteger.prototype.negate = bnNegate; +BigInteger.prototype.abs = bnAbs; +BigInteger.prototype.compareTo = bnCompareTo; +BigInteger.prototype.bitLength = bnBitLength; +BigInteger.prototype.mod = bnMod; +BigInteger.prototype.modPowInt = bnModPowInt; + +// "constants" +BigInteger.ZERO = nbv(0); +BigInteger.ONE = nbv(1); + +scope.BigInteger = BigInteger; +scope.nbi = nbi; +})(window); + +// Copyright (c) 2005-2009 Tom Wu +// All Rights Reserved. +// See "LICENSE" for details. + +// Extended JavaScript BN functions, required for RSA private ops. + +// Version 1.1: new BigInteger("0", 10) returns "proper" zero +// Version 1.2: square() API, isProbablePrime fix + +// (public) +function bnClone() { var r = nbi(); this.copyTo(r); return r; } + +// (public) return value as integer +function bnIntValue() { + if(this.s < 0) { + if(this.t == 1) return this[0]-this.DV; + else if(this.t == 0) return -1; + } + else if(this.t == 1) return this[0]; + else if(this.t == 0) return 0; + // assumes 16 < DB < 32 + return ((this[1]&((1<<(32-this.DB))-1))<>24; } + +// (public) return value as short (assumes DB>=16) +function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; } + +// (protected) return x s.t. r^x < DV +function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); } + +// (public) 0 if this == 0, 1 if this > 0 +function bnSigNum() { + if(this.s < 0) return -1; + else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0; + else return 1; +} + +// (protected) convert to radix string +function bnpToRadix(b) { + if(b == null) b = 10; + if(this.signum() == 0 || b < 2 || b > 36) return "0"; + var cs = this.chunkSize(b); + var a = Math.pow(b,cs); + var d = nbv(a), y = nbi(), z = nbi(), r = ""; + this.divRemTo(d,y,z); + while(y.signum() > 0) { + r = (a+z.intValue()).toString(b).substr(1) + r; + y.divRemTo(d,y,z); + } + return z.intValue().toString(b) + r; +} + +// (protected) convert from radix string +function bnpFromRadix(s,b) { + this.fromInt(0); + if(b == null) b = 10; + var cs = this.chunkSize(b); + var d = Math.pow(b,cs), mi = false, j = 0, w = 0; + for(var i = 0; i < s.length; ++i) { + var x = intAt(s,i); + if(x < 0) { + if(s.charAt(i) == "-" && this.signum() == 0) mi = true; + continue; + } + w = b*w+x; + if(++j >= cs) { + this.dMultiply(d); + this.dAddOffset(w,0); + j = 0; + w = 0; + } + } + if(j > 0) { + this.dMultiply(Math.pow(b,j)); + this.dAddOffset(w,0); + } + if(mi) BigInteger.ZERO.subTo(this,this); +} + +// (protected) alternate constructor +function bnpFromNumber(a,b,c) { + if("number" == typeof b) { + // new BigInteger(int,int,RNG) + if(a < 2) this.fromInt(1); + else { + this.fromNumber(a,c); + if(!this.testBit(a-1)) // force MSB set + this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this); + if(this.isEven()) this.dAddOffset(1,0); // force odd + while(!this.isProbablePrime(b)) { + this.dAddOffset(2,0); + if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this); + } + } + } + else { + // new BigInteger(int,RNG) + var x = new Array(), t = a&7; + x.length = (a>>3)+1; + b.nextBytes(x); + if(t > 0) x[0] &= ((1< 0) { + if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p) + r[k++] = d|(this.s<<(this.DB-p)); + while(i >= 0) { + if(p < 8) { + d = (this[i]&((1<>(p+=this.DB-8); + } + else { + d = (this[i]>>(p-=8))&0xff; + if(p <= 0) { p += this.DB; --i; } + } + if((d&0x80) != 0) d |= -256; + if(k == 0 && (this.s&0x80) != (d&0x80)) ++k; + if(k > 0 || d != this.s) r[k++] = d; + } + } + return r; +} + +function bnEquals(a) { return(this.compareTo(a)==0); } +function bnMin(a) { return(this.compareTo(a)<0)?this:a; } +function bnMax(a) { return(this.compareTo(a)>0)?this:a; } + +// (protected) r = this op a (bitwise) +function bnpBitwiseTo(a,op,r) { + var i, f, m = Math.min(a.t,this.t); + for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]); + if(a.t < this.t) { + f = a.s&this.DM; + for(i = m; i < this.t; ++i) r[i] = op(this[i],f); + r.t = this.t; + } + else { + f = this.s&this.DM; + for(i = m; i < a.t; ++i) r[i] = op(f,a[i]); + r.t = a.t; + } + r.s = op(this.s,a.s); + r.clamp(); +} + +// (public) this & a +function op_and(x,y) { return x&y; } +function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; } + +// (public) this | a +function op_or(x,y) { return x|y; } +function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; } + +// (public) this ^ a +function op_xor(x,y) { return x^y; } +function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; } + +// (public) this & ~a +function op_andnot(x,y) { return x&~y; } +function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; } + +// (public) ~this +function bnNot() { + var r = nbi(); + for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i]; + r.t = this.t; + r.s = ~this.s; + return r; +} + +// (public) this << n +function bnShiftLeft(n) { + var r = nbi(); + if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r); + return r; +} + +// (public) this >> n +function bnShiftRight(n) { + var r = nbi(); + if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r); + return r; +} + +// return index of lowest 1-bit in x, x < 2^31 +function lbit(x) { + if(x == 0) return -1; + var r = 0; + if((x&0xffff) == 0) { x >>= 16; r += 16; } + if((x&0xff) == 0) { x >>= 8; r += 8; } + if((x&0xf) == 0) { x >>= 4; r += 4; } + if((x&3) == 0) { x >>= 2; r += 2; } + if((x&1) == 0) ++r; + return r; +} + +// (public) returns index of lowest 1-bit (or -1 if none) +function bnGetLowestSetBit() { + for(var i = 0; i < this.t; ++i) + if(this[i] != 0) return i*this.DB+lbit(this[i]); + if(this.s < 0) return this.t*this.DB; + return -1; +} + +// return number of 1 bits in x +function cbit(x) { + var r = 0; + while(x != 0) { x &= x-1; ++r; } + return r; +} + +// (public) return number of set bits +function bnBitCount() { + var r = 0, x = this.s&this.DM; + for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x); + return r; +} + +// (public) true iff nth bit is set +function bnTestBit(n) { + var j = Math.floor(n/this.DB); + if(j >= this.t) return(this.s!=0); + return((this[j]&(1<<(n%this.DB)))!=0); +} + +// (protected) this op (1<>= this.DB; + } + if(a.t < this.t) { + c += a.s; + while(i < this.t) { + c += this[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while(i < a.t) { + c += a[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c += a.s; + } + r.s = (c<0)?-1:0; + if(c > 0) r[i++] = c; + else if(c < -1) r[i++] = this.DV+c; + r.t = i; + r.clamp(); +} + +// (public) this + a +function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; } + +// (public) this - a +function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; } + +// (public) this * a +function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; } + +// (public) this^2 +function bnSquare() { var r = nbi(); this.squareTo(r); return r; } + +// (public) this / a +function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; } + +// (public) this % a +function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; } + +// (public) [this/a,this%a] +function bnDivideAndRemainder(a) { + var q = nbi(), r = nbi(); + this.divRemTo(a,q,r); + return new Array(q,r); +} + +// (protected) this *= n, this >= 0, 1 < n < DV +function bnpDMultiply(n) { + this[this.t] = this.am(0,n-1,this,0,0,this.t); + ++this.t; + this.clamp(); +} + +// (protected) this += n << w words, this >= 0 +function bnpDAddOffset(n,w) { + if(n == 0) return; + while(this.t <= w) this[this.t++] = 0; + this[w] += n; + while(this[w] >= this.DV) { + this[w] -= this.DV; + if(++w >= this.t) this[this.t++] = 0; + ++this[w]; + } +} + +// A "null" reducer +function NullExp() {} +function nNop(x) { return x; } +function nMulTo(x,y,r) { x.multiplyTo(y,r); } +function nSqrTo(x,r) { x.squareTo(r); } + +NullExp.prototype.convert = nNop; +NullExp.prototype.revert = nNop; +NullExp.prototype.mulTo = nMulTo; +NullExp.prototype.sqrTo = nSqrTo; + +// (public) this^e +function bnPow(e) { return this.exp(e,new NullExp()); } + +// (protected) r = lower n words of "this * a", a.t <= n +// "this" should be the larger one if appropriate. +function bnpMultiplyLowerTo(a,n,r) { + var i = Math.min(this.t+a.t,n); + r.s = 0; // assumes a,this >= 0 + r.t = i; + while(i > 0) r[--i] = 0; + var j; + for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t); + for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i); + r.clamp(); +} + +// (protected) r = "this * a" without lower n words, n > 0 +// "this" should be the larger one if appropriate. +function bnpMultiplyUpperTo(a,n,r) { + --n; + var i = r.t = this.t+a.t-n; + r.s = 0; // assumes a,this >= 0 + while(--i >= 0) r[i] = 0; + for(i = Math.max(n-this.t,0); i < a.t; ++i) + r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n); + r.clamp(); + r.drShiftTo(1,r); +} + +// Barrett modular reduction +function Barrett(m) { + // setup Barrett + this.r2 = nbi(); + this.q3 = nbi(); + BigInteger.ONE.dlShiftTo(2*m.t,this.r2); + this.mu = this.r2.divide(m); + this.m = m; +} + +function barrettConvert(x) { + if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m); + else if(x.compareTo(this.m) < 0) return x; + else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } +} + +function barrettRevert(x) { return x; } + +// x = x mod m (HAC 14.42) +function barrettReduce(x) { + x.drShiftTo(this.m.t-1,this.r2); + if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); } + this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3); + this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2); + while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1); + x.subTo(this.r2,x); + while(x.compareTo(this.m) >= 0) x.subTo(this.m,x); +} + +// r = x^2 mod m; x != r +function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + +// r = x*y mod m; x,y != r +function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } + +Barrett.prototype.convert = barrettConvert; +Barrett.prototype.revert = barrettRevert; +Barrett.prototype.reduce = barrettReduce; +Barrett.prototype.mulTo = barrettMulTo; +Barrett.prototype.sqrTo = barrettSqrTo; + +// (public) this^e % m (HAC 14.85) +function bnModPow(e,m) { + var i = e.bitLength(), k, r = nbv(1), z; + if(i <= 0) return r; + else if(i < 18) k = 1; + else if(i < 48) k = 3; + else if(i < 144) k = 4; + else if(i < 768) k = 5; + else k = 6; + if(i < 8) + z = new Classic(m); + else if(m.isEven()) + z = new Barrett(m); + else + z = new Montgomery(m); + + // precomputation + var g = new Array(), n = 3, k1 = k-1, km = (1< 1) { + var g2 = nbi(); + z.sqrTo(g[1],g2); + while(n <= km) { + g[n] = nbi(); + z.mulTo(g2,g[n-2],g[n]); + n += 2; + } + } + + var j = e.t-1, w, is1 = true, r2 = nbi(), t; + i = nbits(e[j])-1; + while(j >= 0) { + if(i >= k1) w = (e[j]>>(i-k1))&km; + else { + w = (e[j]&((1<<(i+1))-1))<<(k1-i); + if(j > 0) w |= e[j-1]>>(this.DB+i-k1); + } + + n = k; + while((w&1) == 0) { w >>= 1; --n; } + if((i -= n) < 0) { i += this.DB; --j; } + if(is1) { // ret == 1, don't bother squaring or multiplying it + g[w].copyTo(r); + is1 = false; + } + else { + while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; } + if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; } + z.mulTo(r2,g[w],r); + } + + while(j >= 0 && (e[j]&(1< 0) { + x.rShiftTo(g,x); + y.rShiftTo(g,y); + } + while(x.signum() > 0) { + if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x); + if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y); + if(x.compareTo(y) >= 0) { + x.subTo(y,x); + x.rShiftTo(1,x); + } + else { + y.subTo(x,y); + y.rShiftTo(1,y); + } + } + if(g > 0) y.lShiftTo(g,y); + return y; +} + +// (protected) this % n, n < 2^26 +function bnpModInt(n) { + if(n <= 0) return 0; + var d = this.DV%n, r = (this.s<0)?n-1:0; + if(this.t > 0) + if(d == 0) r = this[0]%n; + else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n; + return r; +} + +// (public) 1/this % m (HAC 14.61) +function bnModInverse(m) { + var ac = m.isEven(); + if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO; + var u = m.clone(), v = this.clone(); + var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); + while(u.signum() != 0) { + while(u.isEven()) { + u.rShiftTo(1,u); + if(ac) { + if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); } + a.rShiftTo(1,a); + } + else if(!b.isEven()) b.subTo(m,b); + b.rShiftTo(1,b); + } + while(v.isEven()) { + v.rShiftTo(1,v); + if(ac) { + if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); } + c.rShiftTo(1,c); + } + else if(!d.isEven()) d.subTo(m,d); + d.rShiftTo(1,d); + } + if(u.compareTo(v) >= 0) { + u.subTo(v,u); + if(ac) a.subTo(c,a); + b.subTo(d,b); + } + else { + v.subTo(u,v); + if(ac) c.subTo(a,c); + d.subTo(b,d); + } + } + if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; + if(d.compareTo(m) >= 0) return d.subtract(m); + if(d.signum() < 0) d.addTo(m,d); else return d; + if(d.signum() < 0) return d.add(m); else return d; +} + +var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997]; +var lplim = (1<<26)/lowprimes[lowprimes.length-1]; + +// (public) test primality with certainty >= 1-.5^t +function bnIsProbablePrime(t) { + var i, x = this.abs(); + if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) { + for(i = 0; i < lowprimes.length; ++i) + if(x[0] == lowprimes[i]) return true; + return false; + } + if(x.isEven()) return false; + i = 1; + while(i < lowprimes.length) { + var m = lowprimes[i], j = i+1; + while(j < lowprimes.length && m < lplim) m *= lowprimes[j++]; + m = x.modInt(m); + while(i < j) if(m%lowprimes[i++] == 0) return false; + } + return x.millerRabin(t); +} + +// (protected) true if probably prime (HAC 4.24, Miller-Rabin) +function bnpMillerRabin(t) { + var n1 = this.subtract(BigInteger.ONE); + var k = n1.getLowestSetBit(); + if(k <= 0) return false; + var r = n1.shiftRight(k); + t = (t+1)>>1; + if(t > lowprimes.length) t = lowprimes.length; + var a = nbi(); + for(var i = 0; i < t; ++i) { + //Pick bases at random, instead of starting at 2 + a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]); + var y = a.modPow(r,this); + if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { + var j = 1; + while(j++ < k && y.compareTo(n1) != 0) { + y = y.modPowInt(2,this); + if(y.compareTo(BigInteger.ONE) == 0) return false; + } + if(y.compareTo(n1) != 0) return false; + } + } + return true; +} + +// protected +BigInteger.prototype.chunkSize = bnpChunkSize; +BigInteger.prototype.toRadix = bnpToRadix; +BigInteger.prototype.fromRadix = bnpFromRadix; +BigInteger.prototype.fromNumber = bnpFromNumber; +BigInteger.prototype.bitwiseTo = bnpBitwiseTo; +BigInteger.prototype.changeBit = bnpChangeBit; +BigInteger.prototype.addTo = bnpAddTo; +BigInteger.prototype.dMultiply = bnpDMultiply; +BigInteger.prototype.dAddOffset = bnpDAddOffset; +BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; +BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; +BigInteger.prototype.modInt = bnpModInt; +BigInteger.prototype.millerRabin = bnpMillerRabin; + +// public +BigInteger.prototype.clone = bnClone; +BigInteger.prototype.intValue = bnIntValue; +BigInteger.prototype.byteValue = bnByteValue; +BigInteger.prototype.shortValue = bnShortValue; +BigInteger.prototype.signum = bnSigNum; +BigInteger.prototype.toByteArray = bnToByteArray; +BigInteger.prototype.equals = bnEquals; +BigInteger.prototype.min = bnMin; +BigInteger.prototype.max = bnMax; +BigInteger.prototype.and = bnAnd; +BigInteger.prototype.or = bnOr; +BigInteger.prototype.xor = bnXor; +BigInteger.prototype.andNot = bnAndNot; +BigInteger.prototype.not = bnNot; +BigInteger.prototype.shiftLeft = bnShiftLeft; +BigInteger.prototype.shiftRight = bnShiftRight; +BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; +BigInteger.prototype.bitCount = bnBitCount; +BigInteger.prototype.testBit = bnTestBit; +BigInteger.prototype.setBit = bnSetBit; +BigInteger.prototype.clearBit = bnClearBit; +BigInteger.prototype.flipBit = bnFlipBit; +BigInteger.prototype.add = bnAdd; +BigInteger.prototype.subtract = bnSubtract; +BigInteger.prototype.multiply = bnMultiply; +BigInteger.prototype.divide = bnDivide; +BigInteger.prototype.remainder = bnRemainder; +BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; +BigInteger.prototype.modPow = bnModPow; +BigInteger.prototype.modInverse = bnModInverse; +BigInteger.prototype.pow = bnPow; +BigInteger.prototype.gcd = bnGCD; +BigInteger.prototype.isProbablePrime = bnIsProbablePrime; + +// JSBN-specific extension +BigInteger.prototype.square = bnSquare; + +// BigInteger interfaces not implemented in jsbn: + +// BigInteger(int signum, byte[] magnitude) +// double doubleValue() +// float floatValue() +// int hashCode() +// long longValue() +// static BigInteger valueOf(long val) diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B19C8B4893F47639D383A71E982925331F1ADBBA b/home/.surf/cache/WebKitCache/Version 16/Blobs/B19C8B4893F47639D383A71E982925331F1ADBBA new file mode 100644 index 0000000..e3172c4 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/B19C8B4893F47639D383A71E982925331F1ADBBA differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B21699D45158CED447B2BC6857A1A4E26AD894AB b/home/.surf/cache/WebKitCache/Version 16/Blobs/B21699D45158CED447B2BC6857A1A4E26AD894AB new file mode 100644 index 0000000..9202224 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/B21699D45158CED447B2BC6857A1A4E26AD894AB @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_delegated-events_dist_index_js-node_modules_github_details-dialog-elemen-63debe"],{59753(a,b,c){function d(){if(!(this instanceof d))return new d;this.size=0,this.uid=0,this.selectors=[],this.selectorObjects={},this.indexes=Object.create(this.indexes),this.activeIndexes=[]}c.d(b,{f:()=>B,on:()=>A});var e,f=window.document.documentElement,g=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector;d.prototype.matchesSelector=function(a,b){return g.call(a,b)},d.prototype.querySelectorAll=function(a,b){return b.querySelectorAll(a)},d.prototype.indexes=[];var h=/^#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"ID",selector:function(a){var b;if(b=a.match(h))return b[0].slice(1)},element:function(a){if(a.id)return[a.id]}});var i=/^\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"CLASS",selector:function(a){var b;if(b=a.match(i))return b[0].slice(1)},element:function(a){var b=a.className;if(b){if("string"==typeof b)return b.split(/\s/);if("object"==typeof b&&"baseVal"in b)return b.baseVal.split(/\s/)}}});var j=/^((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"TAG",selector:function(a){var b;if(b=a.match(j))return b[0].toUpperCase()},element:function(a){return[a.nodeName.toUpperCase()]}}),d.prototype.indexes.default={name:"UNIVERSAL",selector:function(){return!0},element:function(){return[!0]}},e="function"==typeof window.Map?window.Map:function(){function a(){this.map={}}return a.prototype.get=function(a){return this.map[a+" "]},a.prototype.set=function(a,b){this.map[a+" "]=b},a}();var k=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;function l(a,b){var c,d,e,f,g,h,i=(a=a.slice(0).concat(a.default)).length,j=b,l=[];do if(k.exec(""),(e=k.exec(j))&&(j=e[3],e[2]||!j)){for(c=0;c3&& void 0!==arguments[3]?arguments[3]:{},f=!!e.capture,g=f?p:o,h=g[a];h||(h=new d,g[a]=h,document.addEventListener(a,z,f)),h.add(b,c)}function B(a,b,c){return a.dispatchEvent(new CustomEvent(b,{bubbles:!0,cancelable:!0,detail:c}))}},14840(a,b,c){c.d(b,{Z:()=>t});let d="data-close-dialog",e=`[${d}]`;function f(a){let b=Array.from(a.querySelectorAll("[autofocus]")).filter(h)[0];b||(b=a,a.setAttribute("tabindex","-1")),b.focus()}function g(a){let b=a.currentTarget;b instanceof Element&&("Escape"===a.key||"Esc"===a.key?(o(b,!1),a.stopPropagation()):"Tab"===a.key&&j(a))}function h(a){return a.tabIndex>=0&&!a.disabled&&i(a)}function i(a){return!a.hidden&&(!a.type||"hidden"!==a.type)&&(a.offsetWidth>0||a.offsetHeight>0)}function j(a){if(!(a.currentTarget instanceof Element))return;let b=a.currentTarget.querySelector("details-dialog");if(!b)return;a.preventDefault();let c=Array.from(b.querySelectorAll("*")).filter(h);if(0===c.length)return;let d=a.shiftKey?-1:1,e=b.getRootNode(),f=b.contains(e.activeElement)?e.activeElement:null,g=-1===d?-1:0;if(f instanceof HTMLElement){let i=c.indexOf(f);-1!==i&&(g=i+d)}g<0?g=c.length-1:g%=c.length,c[g].focus()}function k(a){let b=a.querySelector("details-dialog");return!(b instanceof DetailsDialogElement)||b.dispatchEvent(new CustomEvent("details-dialog-close",{bubbles:!0,cancelable:!0}))}function l(a){if(!(a.currentTarget instanceof Element))return;let b=a.currentTarget.closest("details");b&&b.hasAttribute("open")&&!k(b)&&(a.preventDefault(),a.stopPropagation())}function m(a){let b=a.currentTarget;if(!(b instanceof Element))return;let c=b.querySelector("details-dialog");if(c instanceof DetailsDialogElement){if(b.hasAttribute("open")){let d="getRootNode"in c?c.getRootNode():document;d.activeElement instanceof HTMLElement&&s.set(c,{details:b,activeElement:d.activeElement}),f(c),b.addEventListener("keydown",g)}else{for(let e of c.querySelectorAll("form"))e.reset();let h=n(b,c);h&&h.focus(),b.removeEventListener("keydown",g)}}}function n(a,b){let c=s.get(b);return c&&c.activeElement instanceof HTMLElement?c.activeElement:a.querySelector("summary")}function o(a,b){b!==a.hasAttribute("open")&&(b?a.setAttribute("open",""):k(a)&&a.removeAttribute("open"))}function p(a){let b=a.currentTarget;if(!(b instanceof Element))return;let c=b.querySelector("details-dialog");if(!(c instanceof DetailsDialogElement))return;let d=c.querySelector("include-fragment:not([src])");if(!d)return;let e=c.src;null!==e&&(d.addEventListener("loadend",()=>{b.hasAttribute("open")&&f(c)}),d.setAttribute("src",e),r(b))}function q(a,b,c){r(a),b&&a.addEventListener("toggle",p,{once:!0}),b&&c&&a.addEventListener("mouseover",p,{once:!0})}function r(a){a.removeEventListener("toggle",p),a.removeEventListener("mouseover",p)}let s=new WeakMap;class DetailsDialogElement extends HTMLElement{static get CLOSE_ATTR(){return d}static get CLOSE_SELECTOR(){return e}constructor(){super(),s.set(this,{details:null,activeElement:null}),this.addEventListener("click",function({target:a}){if(!(a instanceof Element))return;let b=a.closest("details");b&&a.closest(e)&&o(b,!1)})}get src(){return this.getAttribute("src")}set src(a){this.setAttribute("src",a||"")}get preload(){return this.hasAttribute("preload")}set preload(a){a?this.setAttribute("preload",""):this.removeAttribute("preload")}connectedCallback(){this.setAttribute("role","dialog"),this.setAttribute("aria-modal","true");let a=s.get(this);if(!a)return;let b=this.parentElement;if(!b)return;let c=b.querySelector("summary");c&&(c.hasAttribute("role")||c.setAttribute("role","button"),c.addEventListener("click",l,{capture:!0})),b.addEventListener("toggle",m),a.details=b,q(b,this.src,this.preload)}disconnectedCallback(){let a=s.get(this);if(!a)return;let{details:b}=a;if(!b)return;b.removeEventListener("toggle",m),r(b);let c=b.querySelector("summary");c&&c.removeEventListener("click",l,{capture:!0}),a.details=null}toggle(a){let b=s.get(this);if(!b)return;let{details:c}=b;c&&o(c,a)}static get observedAttributes(){return["src","preload"]}attributeChangedCallback(){let a=s.get(this);if(!a)return;let{details:b}=a;b&&q(b,this.src,this.preload)}}let t=DetailsDialogElement;window.customElements.get("details-dialog")||(window.DetailsDialogElement=DetailsDialogElement,window.customElements.define("details-dialog",DetailsDialogElement))}}]) +//# sourceMappingURL=vendors-node_modules_delegated-events_dist_index_js-node_modules_github_details-dialog-elemen-63debe-eb36e6ab4cfc.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B232EED6CC454448BD6D10AF83DE12BC7090B149 b/home/.surf/cache/WebKitCache/Version 16/Blobs/B232EED6CC454448BD6D10AF83DE12BC7090B149 new file mode 100644 index 0000000..42288c3 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/B232EED6CC454448BD6D10AF83DE12BC7090B149 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B2B439FD32E1C381538650216D641D000A1D98AA b/home/.surf/cache/WebKitCache/Version 16/Blobs/B2B439FD32E1C381538650216D641D000A1D98AA new file mode 100644 index 0000000..232db61 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/B2B439FD32E1C381538650216D641D000A1D98AA differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B44866639D3AAC76014022485453E0B5CC118878 b/home/.surf/cache/WebKitCache/Version 16/Blobs/B44866639D3AAC76014022485453E0B5CC118878 new file mode 100644 index 0000000..e8b11d4 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/B44866639D3AAC76014022485453E0B5CC118878 @@ -0,0 +1,3 @@ +:root,[data-color-mode=light][data-light-theme*=light],[data-color-mode=dark][data-dark-theme*=light]{color-scheme:light}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=light]{color-scheme:light}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=light]{color-scheme:light}}[data-color-mode=light][data-light-theme*=dark],[data-color-mode=dark][data-dark-theme*=dark]{color-scheme:dark}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=dark]{color-scheme:dark}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=dark]{color-scheme:dark}}[data-color-mode]{color:var(--color-fg-default);background-color:var(--color-canvas-default)}@media(forced-colors: active){body{--color-accent-emphasis: Highlight;--color-fg-on-emphasis: LinkText}}.ActionList{padding:8px}.ActionList--full{padding:0}.ActionList--subGroup{padding:0}.ActionList--divided .ActionList-item-label::before{position:absolute;top:-6px;display:block;width:100%;height:1px;content:"";background:var(--color-action-list-item-inline-divider)}.ActionList--divided .ActionList-item-descriptionWrap--inline::before{position:absolute;top:-6px;display:block;width:100%;height:1px;content:"";background:var(--color-action-list-item-inline-divider)}.ActionList--divided .ActionList-item-descriptionWrap--inline .ActionList-item-label::before{content:unset}.ActionList--divided .ActionList-item--navActive .ActionList-item-label::before,.ActionList--divided .ActionList-item--navActive+.ActionList-item .ActionList-item-label::before{visibility:hidden}.ActionList-item:first-of-type .ActionList-item-label::before,.ActionList-sectionDivider+.ActionList-item .ActionList-item-label::before{visibility:hidden}.ActionList-item:first-of-type .ActionList-item-descriptionWrap--inline::before,.ActionList-sectionDivider+.ActionList-item .ActionList-item-descriptionWrap--inline::before{visibility:hidden}.ActionList--tree{--ActionList-tree-depth: 1}.ActionList--tree .ActionList-item--subItem>.ActionList-content{font-size:14px}.ActionList--tree .ActionList-item.ActionList-item--singleton .ActionList-content{padding-left:32px}.ActionList--tree .ActionList-item.ActionList-item--navActive:not(.ActionList-item--subItem) .ActionList-item-label{font-weight:var(--base-text-weight-normal, 400)}.ActionList--tree .ActionList-content[aria-expanded]+.ActionList--subGroup{position:relative}.ActionList--tree .ActionList-content[aria-expanded]+.ActionList--subGroup .ActionList-content{padding-left:calc(8px * var(--ActionList-tree-depth))}.ActionList--tree .ActionList-content[aria-expanded=true] .ActionList-item-collapseIcon{transition:transform 120ms linear;transform:rotate(0deg)}.ActionList--tree .ActionList-content[aria-expanded=true].ActionList-content--hasActiveSubItem>.ActionList-item-label{font-weight:var(--base-text-weight-normal, 400)}.ActionList--tree .ActionList-content[aria-expanded=false] .ActionList-item-collapseIcon{transition:transform 120ms linear;transform:rotate(-90deg)}.ActionList--tree .ActionList-content[aria-expanded=false].ActionList-content--hasActiveSubItem>.ActionList-item-label{font-weight:var(--base-text-weight-normal, 400)}.ActionList--tree .ActionList-item--hasSubItem .ActionList-item--subItem:not(.ActionList-item--hasSubItem) .ActionList-content>span:first-child{padding-left:24px}.ActionList--tree>[aria-level="1"].ActionList-item--hasSubItem>.ActionList--subGroup::before{position:absolute;left:16px;width:1px;height:100%;content:"";background:var(--color-action-list-item-inline-divider)}.ActionList--tree .ActionList-item--hasSubItem:not([aria-level="1"])>.ActionList--subGroup::before{position:absolute;left:calc(8px * (var(--ActionList-tree-depth)) + 7px);width:1px;height:100%;content:"";background:var(--color-action-list-item-inline-divider)}.ActionList-item{position:relative;list-style:none;background-color:transparent;border-radius:6px}.ActionList-item:hover,.ActionList-item:active{cursor:pointer}@media(hover: hover){.ActionList-item:not(.ActionList-item--hasSubItem):hover,.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:hover{cursor:pointer;background-color:var(--color-action-list-item-default-hover-bg)}.ActionList-item:not(.ActionList-item--hasSubItem):hover:not(.ActionList-item--navActive):not(:focus-visible),.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:hover:not(.ActionList-item--navActive):not(:focus-visible){outline:solid 1px transparent;outline-offset:-1px;box-shadow:inset 0 0 0 1px var(--color-action-list-item-default-active-border)}}.ActionList-item:not(.ActionList-item--hasSubItem):active,.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:active{background:var(--color-action-list-item-default-active-bg)}.ActionList-item:not(.ActionList-item--hasSubItem):active:not(.ActionList-item--navActive),.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:active:not(.ActionList-item--navActive){outline:solid 1px transparent;outline-offset:-1px;box-shadow:inset 0 0 0 1px var(--color-action-list-item-default-active-border)}@media(hover: hover){.ActionList-item:not(.ActionList-item--hasSubItem):hover .ActionList-item-label::before,.ActionList-item:not(.ActionList-item--hasSubItem):hover+.ActionList-item .ActionList-item-label::before,.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:hover .ActionList-item-label::before,.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:hover+.ActionList-item .ActionList-item-label::before{visibility:hidden}.ActionList-item:not(.ActionList-item--hasSubItem):hover .ActionList-item-descriptionWrap--inline::before,.ActionList-item:not(.ActionList-item--hasSubItem):hover+.ActionList-item .ActionList-item-descriptionWrap--inline::before,.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:hover .ActionList-item-descriptionWrap--inline::before,.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:hover+.ActionList-item .ActionList-item-descriptionWrap--inline::before{visibility:hidden}}.ActionList-item:not(.ActionList-item--hasSubItem):active .ActionList-item-label::before,.ActionList-item:not(.ActionList-item--hasSubItem):active+.ActionList-item .ActionList-item-label::before,.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:active .ActionList-item-label::before,.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:active+.ActionList-item .ActionList-item-label::before{visibility:hidden}.ActionList-item.ActionList-item--hasSubItem>.ActionList-content{z-index:1}@media(hover: hover){.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:hover{background-color:var(--color-action-list-item-default-hover-bg)}}.ActionList-item.ActionList-item--hasSubItem>.ActionList-content:active{background-color:var(--color-action-list-item-default-active-bg)}.ActionList-item[hidden]+.ActionList-sectionDivider{display:none}.ActionList-item[aria-selected=true]{font-weight:var(--base-text-weight-normal, 400);background:var(--color-action-list-item-default-selected-bg)}@media(hover: hover){.ActionList-item[aria-selected=true]:hover{background-color:var(--color-action-list-item-default-hover-bg)}}.ActionList-item[aria-selected=true]::before,.ActionList-item[aria-selected=true]+.ActionList-item::before{visibility:hidden}.ActionList-item[aria-selected=true]::after{position:absolute;top:calc(50% - 12px);left:-4px;width:4px;height:24px;content:"";background:var(--color-accent-fg);border-radius:6px}.ActionList-item.ActionList-item--navActive:not(.ActionList-item--subItem) .ActionList-item-label{font-weight:var(--base-text-weight-semibold, 600)}.ActionList-item.ActionList-item--navActive:not(.ActionList-item--danger){background:var(--color-action-list-item-default-selected-bg)}@media(hover: hover){.ActionList-item.ActionList-item--navActive:not(.ActionList-item--danger):hover{background-color:var(--color-action-list-item-default-hover-bg)}}.ActionList-item.ActionList-item--navActive:not(.ActionList-item--danger)::before,.ActionList-item.ActionList-item--navActive:not(.ActionList-item--danger)+.ActionList-item::before{visibility:hidden}.ActionList-item.ActionList-item--navActive:not(.ActionList-item--danger)::after{position:absolute;top:calc(50% - 12px);left:-8px;width:4px;height:24px;content:"";background:var(--color-accent-fg);border-radius:6px}.ActionList-item[aria-checked=true] .ActionList-item-multiSelectCheckmark,.ActionList-item[aria-selected=true] .ActionList-item-multiSelectCheckmark{visibility:visible;opacity:1;transition:visibility 0 linear 0,opacity 50ms}.ActionList-item[aria-checked=true] .ActionList-item-singleSelectCheckmark,.ActionList-item[aria-selected=true] .ActionList-item-singleSelectCheckmark{visibility:visible}@media screen and (prefers-reduced-motion: no-preference){.ActionList-item[aria-checked=true] .ActionList-item-singleSelectCheckmark,.ActionList-item[aria-selected=true] .ActionList-item-singleSelectCheckmark{animation:checkmarkIn 200ms cubic-bezier(0.11, 0, 0.5, 0) forwards}}.ActionList-item[aria-checked=true] .ActionList-item-multiSelectIcon .ActionList-item-multiSelectIconRect,.ActionList-item[aria-selected=true] .ActionList-item-multiSelectIcon .ActionList-item-multiSelectIconRect{fill:var(--color-accent-fg);stroke:var(--color-accent-fg);stroke-width:1px}.ActionList-item[aria-checked=true] .ActionList-item-multiSelectIcon .ActionList-item-multiSelectCheckmark,.ActionList-item[aria-selected=true] .ActionList-item-multiSelectIcon .ActionList-item-multiSelectCheckmark{fill:var(--color-fg-on-emphasis)}.ActionList-item[aria-checked=false] .ActionList-item-multiSelectCheckmark,.ActionList-item[aria-selected=false] .ActionList-item-multiSelectCheckmark{visibility:hidden;opacity:0;transition:visibility 0 linear 50ms,opacity 50ms}.ActionList-item[aria-checked=false] .ActionList-item-singleSelectCheckmark,.ActionList-item[aria-selected=false] .ActionList-item-singleSelectCheckmark{visibility:hidden;transition:visibility 0s linear 200ms;clip-path:inset(16px 0 0 0)}@media screen and (prefers-reduced-motion: no-preference){.ActionList-item[aria-checked=false] .ActionList-item-singleSelectCheckmark,.ActionList-item[aria-selected=false] .ActionList-item-singleSelectCheckmark{animation:checkmarkOut 200ms cubic-bezier(0.11, 0, 0.5, 0) forwards}}.ActionList-item[aria-checked=false] .ActionList-item-multiSelectIcon .ActionList-item-multiSelectIconRect,.ActionList-item[aria-selected=false] .ActionList-item-multiSelectIcon .ActionList-item-multiSelectIconRect{fill:var(--color-canvas-default);stroke:var(--color-border-default);stroke-width:1px}.ActionList-item[aria-checked=false] .ActionList-item-multiSelectIconRect,.ActionList-item[aria-selected=false] .ActionList-item-multiSelectIconRect{fill:var(--color-canvas-default);border:1px solid var(--color-border-default)}@keyframes checkmarkIn{from{clip-path:inset(16px 0 0 0)}to{clip-path:inset(0 0 0 0)}}@keyframes checkmarkOut{from{clip-path:inset(0 0 0 0)}to{clip-path:inset(16px 0 0 0)}}.ActionList-item[aria-disabled=true] .ActionList-content .ActionList-item-label,.ActionList-item[aria-disabled=true] .ActionList-content .ActionList-item-description{color:var(--color-primer-fg-disabled)}.ActionList-item[aria-disabled=true] .ActionList-content .ActionList-item-visual{fill:var(--color-primer-fg-disabled)}@media(hover: hover){.ActionList-item[aria-disabled=true]:hover{cursor:not-allowed;background-color:transparent}}.ActionList-item.ActionList-item--danger .ActionList-item-label{color:var(--color-danger-fg)}.ActionList-item.ActionList-item--danger .ActionList-item-visual{color:var(--color-danger-fg)}@media(hover: hover){.ActionList-item.ActionList-item--danger:hover{background:var(--color-action-list-item-danger-hover-bg)}.ActionList-item.ActionList-item--danger:hover .ActionList-item-label{color:var(--color-action-list-item-danger-hover-text)}}.ActionList-item.ActionList-item--danger .ActionList-content:active{background:var(--color-action-list-item-danger-active-bg)}.ActionList-item .ActionList{padding:unset}.ActionList-content{position:relative;display:grid;width:100%;padding:6px 8px;font-size:14px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-default);text-align:left;-webkit-user-select:none;user-select:none;background-color:transparent;border:none;border-radius:6px;transition:background 33.333ms linear;touch-action:manipulation;touch-action:manipulation;-webkit-tap-highlight-color:transparent;grid-template-rows:min-content;grid-template-areas:"leadingAction leadingVisual label trailingVisual trailingAction";grid-template-columns:min-content min-content minmax(0, auto) min-content min-content;align-items:start}.ActionList-content>:not(:last-child){margin-right:8px}.ActionList-content:hover{text-decoration:none}.ActionList-content:focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.ActionList-content:focus:not(:focus-visible){outline:solid 1px transparent}.ActionList-content:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.ActionList-content[aria-disabled=true] .ActionList-item-label,.ActionList-content[aria-disabled=true] .ActionList-item-description{color:var(--color-primer-fg-disabled)}.ActionList-content[aria-disabled=true] .ActionList-item-visual{fill:var(--color-primer-fg-disabled)}@media(hover: hover){.ActionList-content[aria-disabled=true]:hover{cursor:not-allowed;background-color:transparent}}@media screen and (prefers-reduced-motion: no-preference){.ActionList-content[aria-expanded]+.ActionList--subGroup{transition:opacity 160ms cubic-bezier(0.25, 1, 0.5, 1),transform 160ms cubic-bezier(0.25, 1, 0.5, 1)}}.ActionList-content[aria-expanded]+.ActionList--subGroup .ActionList-content{padding-left:24px}.ActionList-content[aria-expanded].ActionList-content--visual16+.ActionList--subGroup .ActionList-content{padding-left:32px}.ActionList-content[aria-expanded].ActionList-content--visual20+.ActionList--subGroup .ActionList-content{padding-left:36px}.ActionList-content[aria-expanded].ActionList-content--visual24+.ActionList--subGroup .ActionList-content{padding-left:40px}.ActionList-content[aria-expanded=true] .ActionList-item-collapseIcon{transition:transform 120ms linear;transform:scaleY(-1)}.ActionList-content[aria-expanded=true]+.ActionList--subGroup{height:auto;overflow:visible;visibility:visible;opacity:1;transform:translateY(0)}.ActionList-content[aria-expanded=true].ActionList-content--hasActiveSubItem>.ActionList-item-label{font-weight:var(--base-text-weight-semibold, 600)}.ActionList-content[aria-expanded=false] .ActionList-item-collapseIcon{transition:transform 120ms linear;transform:scaleY(1)}.ActionList-content[aria-expanded=false]+.ActionList--subGroup{height:0;overflow:hidden;visibility:hidden;opacity:0;transform:translateY(-16px)}.ActionList-content[aria-expanded=false].ActionList-content--hasActiveSubItem{background:var(--color-action-list-item-default-selected-bg)}.ActionList-content[aria-expanded=false].ActionList-content--hasActiveSubItem .ActionList-item-label{font-weight:var(--base-text-weight-semibold, 600)}.ActionList-content[aria-expanded=false].ActionList-content--hasActiveSubItem::before,.ActionList-content[aria-expanded=false].ActionList-content--hasActiveSubItem+.ActionList-item::before{visibility:hidden}.ActionList-content[aria-expanded=false].ActionList-content--hasActiveSubItem::after{position:absolute;top:calc(50% - 12px);left:-8px;width:4px;height:24px;content:"";background:var(--color-accent-fg);border-radius:6px}.ActionList-content.ActionList-content--sizeMedium{padding:10px 8px}.ActionList-content.ActionList-content--sizeLarge{padding:14px 8px}.ActionList-content.ActionList-content--fontSmall{font-size:12px}@media(pointer: coarse){.ActionList-content{padding:14px 8px}}.ActionList-content.ActionList-content--blockDescription .ActionList-item-visual{place-self:start}.ActionList-item-action--leading{grid-area:leadingAction}.ActionList-item-visual--leading{grid-area:leadingVisual}.ActionList-item-label{grid-area:label}.ActionList-item-visual--trailing{grid-area:trailingVisual}.ActionList-item-action--trailing{grid-area:trailingAction}.ActionList-item-descriptionWrap{grid-area:label;display:flex;flex-direction:column}.ActionList-item-descriptionWrap .ActionList-item-description{margin-top:4px}.ActionList-item-descriptionWrap .ActionList-item-label{font-weight:var(--base-text-weight-semibold, 600)}.ActionList-item-descriptionWrap--inline{position:relative;flex-direction:row;align-items:baseline}.ActionList-item-descriptionWrap--inline .ActionList-item-description{margin-left:8px}.ActionList-item-description{font-size:12px;font-weight:var(--base-text-weight-normal, 400);line-height:1.5;color:var(--color-fg-muted)}.ActionList-item-visual,.ActionList-item-action{display:flex;min-height:20px;color:var(--color-fg-muted);pointer-events:none;fill:var(--color-fg-muted);align-items:center}.ActionList-item-label{position:relative;font-weight:var(--base-text-weight-normal, 400);line-height:20px;color:var(--color-fg-default)}.ActionList-item-label--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ActionList-item--subItem>.ActionList-content{font-size:12px}.ActionList-sectionDivider:not(:empty){display:flex;padding:6px 8px;font-size:12px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted);flex-direction:column}.ActionList-sectionDivider:empty{display:block;height:1px;padding:0;margin:7px -8px 8px;list-style:none;background:var(--color-action-list-item-inline-divider);border:0}.ActionList-sectionDivider .ActionList-sectionDivider-title{font-size:12px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted)}.ActionList-sectionDivider--filled{margin:8px -8px;background:var(--color-canvas-subtle);border-top:1px solid var(--color-action-list-item-inline-divider);border-bottom:1px solid var(--color-action-list-item-inline-divider)}.ActionList-sectionDivider--filled:empty{height:8px;box-sizing:border-box}.ActionList-sectionDivider--filled:first-child{margin-top:0}/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}template,[hidden]{display:none !important}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:var(--color-attention-subtle);color:var(--color-fg-default)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:var(--base-text-weight-semibold, 600)}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}*{box-sizing:border-box}input,select,textarea,button{font-family:inherit;font-size:inherit;line-height:inherit}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:var(--body-font-size, 14px);line-height:1.5;color:var(--color-fg-default);background-color:var(--color-canvas-default)}a{color:var(--color-accent-fg);text-decoration:none}a:hover{text-decoration:underline}b,strong{font-weight:var(--base-text-weight-semibold, 600)}fieldset{padding:0;margin:0;border:0}label{font-weight:var(--base-text-weight-semibold, 600)}::placeholder{color:var(--color-fg-subtle);opacity:1}hr,.rule{height:0;margin:15px 0;overflow:hidden;background:transparent;border:0;border-bottom:1px solid var(--color-border-muted)}hr::before,.rule::before{display:table;content:""}hr::after,.rule::after{display:table;clear:both;content:""}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}button{cursor:pointer;border-radius:0}[hidden][hidden]{display:none !important}details summary{cursor:pointer}details:not([open])>*:not(summary){display:none !important}a:focus,button:focus,[role=button]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}a:focus:not(:focus-visible),button:focus:not(:focus-visible),[role=button]:focus:not(:focus-visible),input[type=radio]:focus:not(:focus-visible),input[type=checkbox]:focus:not(:focus-visible){outline:solid 1px transparent}a:focus-visible,button:focus-visible,[role=button]:focus-visible,input[type=radio]:focus-visible,input[type=checkbox]:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}a:not([class]):focus,a:not([class]):focus-visible,input[type=radio]:focus,input[type=radio]:focus-visible,input[type=checkbox]:focus,input[type=checkbox]:focus-visible{outline-offset:0}.focus{border-color:var(--color-accent-fg);outline:none;box-shadow:inset 0 0 0 1px var(--color-accent-fg)}@media(forced-colors: active){*:focus,*:focus-visible{outline:solid 1px transparent}input:not([type=radio],[type=checkbox]):focus,input:not([type=radio],[type=checkbox]):focus-visible,textarea:focus,textarea:focus-visible,select:focus,select:focus-visible{outline-offset:2px}}kbd{display:inline-block;padding:3px 5px;font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;line-height:10px;color:var(--color-fg-default);vertical-align:middle;background-color:var(--color-canvas-subtle);border:solid 1px var(--color-neutral-muted);border-bottom-color:var(--color-neutral-muted);border-radius:6px;box-shadow:inset 0 -1px 0 var(--color-neutral-muted)}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:0}h1{font-size:var(--h1-size, 32px);font-weight:var(--base-text-weight-semibold, 600)}h2{font-size:var(--h2-size, 24px);font-weight:var(--base-text-weight-semibold, 600)}h3{font-size:var(--h3-size, 20px);font-weight:var(--base-text-weight-semibold, 600)}h4{font-size:var(--h4-size, 16px);font-weight:var(--base-text-weight-semibold, 600)}h5{font-size:var(--h5-size, 14px);font-weight:var(--base-text-weight-semibold, 600)}h6{font-size:var(--h6-size, 12px);font-weight:var(--base-text-weight-semibold, 600)}p{margin-top:0;margin-bottom:10px}small{font-size:90%}blockquote{margin:0}ul,ol{padding-left:0;margin-top:0;margin-bottom:0}ol ol,ul ol{list-style-type:lower-roman}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}dd{margin-left:0}tt,code,samp{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px}pre{margin-top:0;margin-bottom:0;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px}.octicon{vertical-align:text-bottom}.octicon{display:inline-block;overflow:visible !important;vertical-align:text-bottom;fill:currentColor}.Box--overlay{width:448px;margin-right:auto;margin-left:auto;background-color:var(--color-canvas-default);background-clip:padding-box;border-color:var(--color-border-default);box-shadow:0 0 18px rgba(0,0,0,.4)}.Box--overlay .Box-header{margin:0;border-width:0;border-bottom-width:1px;border-top-left-radius:6px;border-top-right-radius:6px}.Box-overlay--narrow{width:320px}.Box-overlay--wide{width:640px}.Box-body.scrollable-overlay{max-height:400px;overflow-y:scroll}.Box-body .help{padding-top:8px;margin:0;color:var(--color-fg-muted);text-align:center}.btn{position:relative;display:inline-block;padding:5px 16px;font-size:14px;font-weight:var(--base-text-weight-medium, 500);line-height:20px;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid;border-radius:6px;-webkit-appearance:none;appearance:none}.btn:hover{text-decoration:none}.btn:disabled,.btn.disabled,.btn[aria-disabled=true]{cursor:default}.btn i{font-style:normal;font-weight:var(--base-text-weight-medium, 500);opacity:.75}.btn .octicon{margin-right:4px;color:var(--color-fg-muted);vertical-align:text-bottom}.btn .octicon:only-child{margin-right:0}.btn .Counter{margin-left:2px;color:inherit;text-shadow:none;vertical-align:top;background-color:var(--color-btn-counter-bg)}.btn .dropdown-caret{margin-left:4px;opacity:.8}.btn{color:var(--color-btn-text);background-color:var(--color-btn-bg);border-color:var(--color-btn-border);box-shadow:var(--color-btn-shadow),var(--color-btn-inset-shadow);transition:80ms cubic-bezier(0.33, 1, 0.68, 1);transition-property:color,background-color,box-shadow,border-color}.btn:hover,.btn.hover,[open]>.btn{background-color:var(--color-btn-hover-bg);border-color:var(--color-btn-hover-border);transition-duration:.1s}.btn:active{background-color:var(--color-btn-active-bg);border-color:var(--color-btn-active-border);transition:none}.btn.selected,.btn[aria-selected=true]{background-color:var(--color-btn-selected-bg);box-shadow:var(--color-primer-shadow-inset)}.btn:disabled,.btn.disabled,.btn[aria-disabled=true]{color:var(--color-primer-fg-disabled);background-color:var(--color-btn-bg);border-color:var(--color-btn-border)}.btn:disabled .octicon,.btn.disabled .octicon,.btn[aria-disabled=true] .octicon{color:var(--color-primer-fg-disabled)}.btn-primary{color:var(--color-btn-primary-text);background-color:var(--color-btn-primary-bg);border-color:var(--color-btn-primary-border);box-shadow:var(--color-btn-primary-shadow),var(--color-btn-primary-inset-shadow)}.btn-primary:hover,.btn-primary.hover,[open]>.btn-primary{background-color:var(--color-btn-primary-hover-bg);border-color:var(--color-btn-primary-hover-border)}.btn-primary:focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.btn-primary:focus:not(:focus-visible){outline:solid 1px transparent;box-shadow:none}.btn-primary:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.btn-primary:active,.btn-primary.selected,.btn-primary[aria-selected=true]{background-color:var(--color-btn-primary-selected-bg);box-shadow:var(--color-btn-primary-selected-shadow)}.btn-primary:disabled,.btn-primary.disabled,.btn-primary[aria-disabled=true]{color:var(--color-btn-primary-disabled-text);background-color:var(--color-btn-primary-disabled-bg);border-color:var(--color-btn-primary-disabled-border)}.btn-primary:disabled .octicon,.btn-primary.disabled .octicon,.btn-primary[aria-disabled=true] .octicon{color:var(--color-btn-primary-disabled-text)}.btn-primary .Counter{color:inherit;background-color:var(--color-btn-primary-counter-bg)}.btn-primary .octicon{color:var(--color-btn-primary-icon)}a.btn-primary:focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}a.btn-primary:focus:not(:focus-visible){outline:solid 1px transparent;box-shadow:none}a.btn-primary:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.btn-outline{color:var(--color-btn-outline-text)}.btn-outline:hover,[open]>.btn-outline{color:var(--color-btn-outline-hover-text);background-color:var(--color-btn-outline-hover-bg);border-color:var(--color-btn-outline-hover-border);box-shadow:var(--color-btn-outline-hover-shadow),var(--color-btn-outline-hover-inset-shadow)}.btn-outline:hover .Counter,[open]>.btn-outline .Counter{background-color:var(--color-btn-outline-hover-counter-bg)}.btn-outline:hover .octicon,[open]>.btn-outline .octicon{color:inherit}.btn-outline:active,.btn-outline.selected,.btn-outline[aria-selected=true]{color:var(--color-btn-outline-selected-text);background-color:var(--color-btn-outline-selected-bg);border-color:var(--color-btn-outline-selected-border);box-shadow:var(--color-btn-outline-selected-shadow)}.btn-outline:active:focus,.btn-outline.selected:focus,.btn-outline[aria-selected=true]:focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.btn-outline:active:focus:not(:focus-visible),.btn-outline.selected:focus:not(:focus-visible),.btn-outline[aria-selected=true]:focus:not(:focus-visible){outline:solid 1px transparent;box-shadow:none}.btn-outline:active:focus-visible,.btn-outline.selected:focus-visible,.btn-outline[aria-selected=true]:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.btn-outline:disabled,.btn-outline.disabled,.btn-outline[aria-disabled=true]{color:var(--color-btn-outline-disabled-text);background-color:var(--color-btn-outline-disabled-bg);border-color:var(--color-btn-border);box-shadow:none}.btn-outline:disabled .Counter,.btn-outline.disabled .Counter,.btn-outline[aria-disabled=true] .Counter{background-color:var(--color-btn-outline-disabled-counter-bg)}.btn-outline .Counter{color:inherit;background-color:var(--color-btn-outline-counter-bg)}.btn-danger{color:var(--color-btn-danger-text)}.btn-danger .octicon{color:var(--color-btn-danger-icon)}.btn-danger:hover,[open]>.btn-danger{color:var(--color-btn-danger-hover-text);background-color:var(--color-btn-danger-hover-bg);border-color:var(--color-btn-danger-hover-border);box-shadow:var(--color-btn-danger-hover-shadow),var(--color-btn-danger-hover-inset-shadow)}.btn-danger:hover .Counter,[open]>.btn-danger .Counter{background-color:var(--color-btn-danger-hover-counter-bg)}.btn-danger:hover .octicon,[open]>.btn-danger .octicon{color:var(--color-btn-danger-hover-icon)}.btn-danger:active,.btn-danger.selected,.btn-danger[aria-selected=true]{color:var(--color-btn-danger-selected-text);background-color:var(--color-btn-danger-selected-bg);border-color:var(--color-btn-danger-selected-border);box-shadow:var(--color-btn-danger-selected-shadow)}.btn-danger:disabled,.btn-danger.disabled,.btn-danger[aria-disabled=true]{color:var(--color-btn-danger-disabled-text);background-color:var(--color-btn-danger-disabled-bg);border-color:var(--color-btn-border);box-shadow:none}.btn-danger:disabled .Counter,.btn-danger.disabled .Counter,.btn-danger[aria-disabled=true] .Counter{background-color:var(--color-btn-danger-disabled-counter-bg)}.btn-danger:disabled .octicon,.btn-danger.disabled .octicon,.btn-danger[aria-disabled=true] .octicon{color:var(--color-btn-danger-disabled-text)}.btn-danger .Counter{color:inherit;background-color:var(--color-btn-danger-counter-bg)}.btn-sm{padding:3px 12px;font-size:12px;line-height:20px}.btn-sm .octicon{vertical-align:text-top}.btn-large{padding:.75em 1.5em;font-size:inherit;line-height:1.5;border-radius:.5em}.btn-block{display:block;width:100%;text-align:center}.BtnGroup{display:inline-block;vertical-align:middle}.BtnGroup::before{display:table;content:""}.BtnGroup::after{display:table;clear:both;content:""}.BtnGroup+.BtnGroup,.BtnGroup+.btn{margin-left:4px}.BtnGroup-item{position:relative;float:left;border-right-width:0;border-radius:0}.BtnGroup-item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.BtnGroup-item:last-child{border-right-width:1px;border-top-right-radius:6px;border-bottom-right-radius:6px}.BtnGroup-item.selected,.BtnGroup-item[aria-selected=true],.BtnGroup-item:focus,.BtnGroup-item:active,.BtnGroup-item:hover{border-right-width:1px}.BtnGroup-item.selected+.BtnGroup-item,.BtnGroup-item.selected+.BtnGroup-parent .BtnGroup-item,.BtnGroup-item[aria-selected=true]+.BtnGroup-item,.BtnGroup-item[aria-selected=true]+.BtnGroup-parent .BtnGroup-item,.BtnGroup-item:focus+.BtnGroup-item,.BtnGroup-item:focus+.BtnGroup-parent .BtnGroup-item,.BtnGroup-item:active+.BtnGroup-item,.BtnGroup-item:active+.BtnGroup-parent .BtnGroup-item,.BtnGroup-item:hover+.BtnGroup-item,.BtnGroup-item:hover+.BtnGroup-parent .BtnGroup-item{border-left-width:0}.BtnGroup-parent{float:left}.BtnGroup-parent:first-child .BtnGroup-item{border-top-left-radius:6px;border-bottom-left-radius:6px}.BtnGroup-parent:last-child .BtnGroup-item{border-right-width:1px;border-top-right-radius:6px;border-bottom-right-radius:6px}.BtnGroup-parent .BtnGroup-item{border-right-width:0;border-radius:0}.BtnGroup-parent.selected .BtnGroup-item,.BtnGroup-parent[aria-selected=true] .BtnGroup-item,.BtnGroup-parent:focus .BtnGroup-item,.BtnGroup-parent:active .BtnGroup-item,.BtnGroup-parent:hover .BtnGroup-item{border-right-width:1px}.BtnGroup-parent.selected+.BtnGroup-item,.BtnGroup-parent.selected+.BtnGroup-parent .BtnGroup-item,.BtnGroup-parent[aria-selected=true]+.BtnGroup-item,.BtnGroup-parent[aria-selected=true]+.BtnGroup-parent .BtnGroup-item,.BtnGroup-parent:focus+.BtnGroup-item,.BtnGroup-parent:focus+.BtnGroup-parent .BtnGroup-item,.BtnGroup-parent:active+.BtnGroup-item,.BtnGroup-parent:active+.BtnGroup-parent .BtnGroup-item,.BtnGroup-parent:hover+.BtnGroup-item,.BtnGroup-parent:hover+.BtnGroup-parent .BtnGroup-item{border-left-width:0}.BtnGroup-item:focus,.BtnGroup-item:active,.BtnGroup-parent:focus,.BtnGroup-parent:active{z-index:1}.btn-link{display:inline-block;padding:0;font-size:inherit;color:var(--color-accent-fg);text-decoration:none;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;appearance:none}.btn-link:hover{text-decoration:underline}.btn-link:disabled,.btn-link:disabled:hover,.btn-link[aria-disabled=true],.btn-link[aria-disabled=true]:hover{color:var(--color-primer-fg-disabled);cursor:default}.btn-link:not(.dropdown-item):focus,.btn-link:not(.dropdown-item):focus-visible{border-radius:6px;outline-offset:0}.btn-invisible{color:var(--color-accent-fg);background-color:transparent;border:0;border-radius:6px;box-shadow:none}.btn-invisible:hover,.btn-invisible.zeroclipboard-is-hover{color:var(--color-accent-fg);background-color:var(--color-btn-hover-bg);outline:none;box-shadow:none}.btn-invisible:active,.btn-invisible.selected,.btn-invisible[aria-selected=true],.btn-invisible.zeroclipboard-is-active{color:var(--color-accent-fg);background:none;border-color:var(--color-btn-active-border);outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.btn-invisible:active .btn-invisible.zeroclipboard-is-active{background-color:var(--color-btn-selected-bg)}.btn-invisible:disabled,.btn-invisible.disabled,.btn-invisible[aria-disabled=true]{color:var(--color-primer-fg-disabled);background-color:transparent}.btn-octicon{display:inline-block;padding:5px;margin-left:5px;line-height:1;color:var(--color-fg-muted);vertical-align:middle;background:transparent;border:0;box-shadow:none}.btn-octicon:hover{color:var(--color-accent-fg)}.btn-octicon:focus,.btn-octicon:focus-visible{border-radius:6px}.btn-octicon.disabled,.btn-octicon[aria-disabled=true]{color:var(--color-primer-fg-disabled);cursor:default}.btn-octicon.disabled:hover,.btn-octicon[aria-disabled=true]:hover{color:var(--color-primer-fg-disabled)}.btn-octicon-danger:hover{color:var(--color-danger-fg)}.close-button{padding:0;color:var(--color-fg-muted);background:transparent;border:0}.close-button:hover{color:var(--color-fg-default)}.close-button:active{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.hidden-text-expander{display:block}.hidden-text-expander.inline{position:relative;top:-1px;display:inline-block;margin-left:5px;line-height:0}.hidden-text-expander a,.ellipsis-expander{display:inline-block;height:12px;padding:0 5px 5px;font-size:12px;font-weight:var(--base-text-weight-semibold, 600);line-height:6px;color:var(--color-fg-default);text-decoration:none;vertical-align:middle;background:var(--color-neutral-muted);border:0;border-radius:1px}.hidden-text-expander a:hover,.ellipsis-expander:hover{text-decoration:none;background-color:var(--color-accent-muted)}.hidden-text-expander a:active,.ellipsis-expander:active{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.btn-with-count{float:left;border-top-right-radius:0;border-bottom-right-radius:0}.btn-with-count:focus{z-index:1}.social-count{position:relative;float:left;padding:3px 12px;font-size:12px;font-weight:var(--base-text-weight-semibold, 600);line-height:20px;color:var(--color-fg-default);vertical-align:middle;background-color:var(--color-canvas-default);border:1px solid var(--color-btn-border);border-left:0;border-top-right-radius:6px;border-bottom-right-radius:6px;box-shadow:var(--color-shadow-small),var(--color-primer-shadow-highlight)}.social-count:hover,.social-count:active{text-decoration:none}.social-count:hover{color:var(--color-accent-fg);cursor:pointer}.TableObject{display:table}.TableObject-item{display:table-cell;width:1%;white-space:nowrap;vertical-align:middle}.TableObject-item--primary{width:99%}.form-control,.form-select{padding:5px 12px;font-size:14px;line-height:20px;color:var(--color-fg-default);vertical-align:middle;background-color:var(--color-canvas-default);background-repeat:no-repeat;background-position:right 8px center;border:1px solid var(--color-border-default);border-radius:6px;box-shadow:var(--color-primer-shadow-inset);transition:80ms cubic-bezier(0.33, 1, 0.68, 1);transition-property:color,background-color,box-shadow,border-color}.form-control:focus,.form-select:focus{border-color:var(--color-accent-fg);outline:none;box-shadow:inset 0 0 0 1px var(--color-accent-fg)}.form-control:focus:not(:focus-visible),.form-select:focus:not(:focus-visible){border-color:transparent;border-color:var(--color-accent-fg);outline:none;box-shadow:inset 0 0 0 1px transparent}.form-control:focus-visible,.form-select:focus-visible{border-color:var(--color-accent-fg);outline:none;box-shadow:inset 0 0 0 1px var(--color-accent-fg)}.form-control.border-0:focus,.form-control.border-0:focus-visible,.form-select.border-0:focus,.form-select.border-0:focus-visible{border:1px solid var(--color-accent-fg) !important}.form-control[disabled],fieldset[disabled] .form-control,.form-select[disabled],fieldset[disabled] .form-select{color:var(--color-primer-fg-disabled);background-color:var(--color-input-disabled-bg);border-color:var(--color-border-default);-webkit-text-fill-color:var(--color-primer-fg-disabled);opacity:1}.form-control[disabled]::placeholder,fieldset[disabled] .form-control::placeholder,.form-select[disabled]::placeholder,fieldset[disabled] .form-select::placeholder{color:var(--color-primer-fg-disabled)}@supports(-webkit-touch-callout: none){.form-control,.form-select{font-size:16px}@media(min-width: 768px){.form-control,.form-select{font-size:14px}}}textarea.form-control{padding-top:8px;padding-bottom:8px;line-height:1.5}.input-contrast{background-color:var(--color-canvas-inset)}.input-contrast:focus{background-color:var(--color-canvas-default)}.input-sm{min-height:28px;padding-top:3px;padding-bottom:3px;font-size:12px;line-height:20px}.input-lg{font-size:16px}.input-block{display:block;width:100%}.input-monospace{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace}.input-hide-webkit-autofill::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none !important;pointer-events:none;visibility:hidden}.form-checkbox{padding-left:20px;margin:15px 0;vertical-align:middle}.form-checkbox label em.highlight{position:relative;left:-4px;padding:2px 4px;font-style:normal;background:var(--color-attention-subtle);border-radius:6px}.form-checkbox input[type=checkbox],.form-checkbox input[type=radio]{float:left;margin:5px 0 0 -20px;vertical-align:middle}.form-checkbox .note{display:block;margin:0;font-size:12px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.form-checkbox-details{display:none}.form-checkbox-details-trigger:checked~* .form-checkbox-details,.form-checkbox-details-trigger:checked~.form-checkbox-details{display:block}.hfields{margin:15px 0}.hfields::before{display:table;content:""}.hfields::after{display:table;clear:both;content:""}.hfields .form-group{float:left;margin:0 30px 0 0}.hfields .form-group dt label,.hfields .form-group .form-group-header label{display:inline-block;margin:5px 0 0;color:var(--color-fg-muted)}.hfields .form-group dt img,.hfields .form-group .form-group-header img{position:relative;top:-2px}.hfields .btn{float:left;margin:28px 25px 0 -20px}.hfields .form-select{margin-top:5px}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none;appearance:none}.form-actions::before{display:table;content:""}.form-actions::after{display:table;clear:both;content:""}.form-actions .btn{float:right}.form-actions .btn+.btn{margin-right:5px}.form-warning{padding:8px 10px;margin:10px 0;font-size:14px;color:var(--color-attention-fg);background:var(--color-attention-subtle);border:1px solid var(--color-attention-emphasis);border-radius:6px}.form-warning p{margin:0;line-height:1.5}.form-warning a{font-weight:var(--base-text-weight-semibold, 600)}.form-select{display:inline-block;max-width:100%;height:32px;padding-right:24px;background-color:var(--color-canvas-default);background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iIzU4NjA2OSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNC40MjcgOS40MjdsMy4zOTYgMy4zOTZhLjI1MS4yNTEgMCAwMC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwMDExLjM5NiA5SDQuNjA0YS4yNS4yNSAwIDAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3TDcuODIgMy4wNzJhLjI1LjI1IDAgMDEuMzU0IDBMMTEuNTcgNi40N2EuMjUuMjUgMCAwMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMDEtLjE3Ny0uNDI3eiIgLz48L3N2Zz4=");background-repeat:no-repeat;background-position:right 4px center;background-size:16px;-webkit-appearance:none;appearance:none}.form-select::-ms-expand{opacity:0}.form-select[multiple]{height:auto}[data-color-mode=light][data-light-theme*=dark] .form-select,[data-color-mode=dark][data-dark-theme*=dark] .form-select{background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iIzZlNzY4MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNC40MjcgOS40MjdsMy4zOTYgMy4zOTZhLjI1MS4yNTEgMCAwMC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwMDExLjM5NiA5SDQuNjA0YS4yNS4yNSAwIDAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3TDcuODIgMy4wNzJhLjI1LjI1IDAgMDEuMzU0IDBMMTEuNTcgNi40N2EuMjUuMjUgMCAwMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMDEtLjE3Ny0uNDI3eiIgLz48L3N2Zz4=")}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=dark] .form-select{background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iIzZlNzY4MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNC40MjcgOS40MjdsMy4zOTYgMy4zOTZhLjI1MS4yNTEgMCAwMC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwMDExLjM5NiA5SDQuNjA0YS4yNS4yNSAwIDAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3TDcuODIgMy4wNzJhLjI1LjI1IDAgMDEuMzU0IDBMMTEuNTcgNi40N2EuMjUuMjUgMCAwMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMDEtLjE3Ny0uNDI3eiIgLz48L3N2Zz4=")}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=dark] .form-select{background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iIzZlNzY4MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNC40MjcgOS40MjdsMy4zOTYgMy4zOTZhLjI1MS4yNTEgMCAwMC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwMDExLjM5NiA5SDQuNjA0YS4yNS4yNSAwIDAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3TDcuODIgMy4wNzJhLjI1LjI1IDAgMDEuMzU0IDBMMTEuNTcgNi40N2EuMjUuMjUgMCAwMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMDEtLjE3Ny0uNDI3eiIgLz48L3N2Zz4=")}}.select-sm{height:28px;padding-top:3px;padding-bottom:3px;font-size:12px}.select-sm[multiple]{height:auto;min-height:0}.form-group{margin:15px 0}.form-group .form-control.autocomplete-embedded-icon-wrap:focus-within{background-color:var(--color-canvas-default)}.form-group .form-control{width:440px;max-width:100%;margin-right:5px;background-color:var(--color-canvas-inset)}.form-group .form-control:focus{background-color:var(--color-canvas-default)}.form-group .form-control.shorter{width:130px}.form-group .form-control.short{width:250px}.form-group .form-control.input-block,.form-group .form-control.long{width:100%}.form-group textarea.form-control{width:100%;height:200px;min-height:200px}.form-group textarea.form-control.short{height:50px;min-height:50px}.form-group dt,.form-group .form-group-header{margin:0 0 6px}.form-group label{position:relative}.form-group.flattened dt,.form-group.flattened .form-group-header{float:left;margin:0;line-height:32px}.form-group.flattened dd,.form-group.flattened .form-group-body{line-height:32px}.form-group dd h4,.form-group .form-group-body h4{margin:4px 0 0}.form-group dd h4.is-error,.form-group .form-group-body h4.is-error{color:var(--color-danger-fg)}.form-group dd h4.is-success,.form-group .form-group-body h4.is-success{color:var(--color-success-fg)}.form-group dd h4+.note,.form-group .form-group-body h4+.note{margin-top:0}.form-group.required dt label::after,.form-group.required .form-group-header label::after{padding-left:5px;color:var(--color-danger-fg);content:"*"}.form-group .success,.form-group .error,.form-group .indicator{display:none;font-size:12px;font-weight:var(--base-text-weight-semibold, 600)}.form-group.loading{opacity:.5}.form-group.loading .indicator{display:inline}.form-group.loading .spinner{display:inline-block;vertical-align:middle}.form-group.successful .success{display:inline;color:var(--color-success-fg)}.form-group.successed .success,.form-group.successed .warning,.form-group.successed .error,.form-group.warn .success,.form-group.warn .warning,.form-group.warn .error,.form-group.errored .success,.form-group.errored .warning,.form-group.errored .error{position:absolute;z-index:10;display:block;max-width:450px;padding:4px 8px;margin:8px 0 0;font-size:12px;font-weight:var(--base-text-weight-normal, 400);border-style:solid;border-width:1px;border-radius:6px}.form-group.successed .success::after,.form-group.successed .success::before,.form-group.successed .warning::after,.form-group.successed .warning::before,.form-group.successed .error::after,.form-group.successed .error::before,.form-group.warn .success::after,.form-group.warn .success::before,.form-group.warn .warning::after,.form-group.warn .warning::before,.form-group.warn .error::after,.form-group.warn .error::before,.form-group.errored .success::after,.form-group.errored .success::before,.form-group.errored .warning::after,.form-group.errored .warning::before,.form-group.errored .error::after,.form-group.errored .error::before{position:absolute;bottom:100%;left:10px;z-index:15;width:0;height:0;pointer-events:none;content:" ";border:solid transparent}.form-group.successed .success::after,.form-group.successed .warning::after,.form-group.successed .error::after,.form-group.warn .success::after,.form-group.warn .warning::after,.form-group.warn .error::after,.form-group.errored .success::after,.form-group.errored .warning::after,.form-group.errored .error::after{border-width:5px}.form-group.successed .success::before,.form-group.successed .warning::before,.form-group.successed .error::before,.form-group.warn .success::before,.form-group.warn .warning::before,.form-group.warn .error::before,.form-group.errored .success::before,.form-group.errored .warning::before,.form-group.errored .error::before{margin-left:-1px;border-width:6px}.form-group.successed .success{color:var(--color-fg-default);background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-success-subtle), var(--color-success-subtle));border-color:var(--color-success-muted)}.form-group.successed .success::after{border-bottom-color:var(--color-success-subtle)}.form-group.successed .success::before{border-bottom-color:var(--color-success-muted)}.form-group.warn .form-control:not(:focus,:focus-visible){border-color:var(--color-attention-emphasis)}.form-group.warn .warning{color:var(--color-fg-default);background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-attention-subtle), var(--color-attention-subtle));border-color:var(--color-attention-muted)}.form-group.warn .warning::after{border-bottom-color:var(--color-attention-subtle)}.form-group.warn .warning::before{border-bottom-color:var(--color-attention-muted)}.form-group.errored .form-control:not(:focus,:focus-visible){border-color:var(--color-danger-emphasis)}.form-group.errored label{color:var(--color-danger-fg)}.form-group.errored .error{color:var(--color-fg-default);background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-danger-subtle), var(--color-danger-subtle));border-color:var(--color-danger-muted)}.form-group.errored .error::after{border-bottom-color:var(--color-danger-subtle)}.form-group.errored .error::before{border-bottom-color:var(--color-danger-muted)}.note{min-height:17px;margin:4px 0 2px;font-size:12px;color:var(--color-fg-muted)}.note .spinner{margin-right:3px;vertical-align:middle}dl.form-group>dd .form-control.is-autocheck-loading,dl.form-group>dd .form-control.is-autocheck-successful,dl.form-group>dd .form-control.is-autocheck-errored,.form-group>.form-group-body .form-control.is-autocheck-loading,.form-group>.form-group-body .form-control.is-autocheck-successful,.form-group>.form-group-body .form-control.is-autocheck-errored{padding-right:30px}dl.form-group>dd .form-control.is-autocheck-loading,.form-group>.form-group-body .form-control.is-autocheck-loading{background-image:url("/images/spinners/octocat-spinner-16px.gif")}dl.form-group>dd .form-control.is-autocheck-successful,.form-group>.form-group-body .form-control.is-autocheck-successful{background-image:url("/images/modules/ajax/success.png")}dl.form-group>dd .form-control.is-autocheck-errored,.form-group>.form-group-body .form-control.is-autocheck-errored{background-image:url("/images/modules/ajax/error.png")}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (-moz-min-device-pixel-ratio: 2),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){dl.form-group>dd .form-control.is-autocheck-loading,dl.form-group>dd .form-control.is-autocheck-successful,dl.form-group>dd .form-control.is-autocheck-errored,.form-group>.form-group-body .form-control.is-autocheck-loading,.form-group>.form-group-body .form-control.is-autocheck-successful,.form-group>.form-group-body .form-control.is-autocheck-errored{background-size:16px 16px}dl.form-group>dd .form-control.is-autocheck-loading,.form-group>.form-group-body .form-control.is-autocheck-loading{background-image:url("/images/spinners/octocat-spinner-32.gif")}dl.form-group>dd .form-control.is-autocheck-successful,.form-group>.form-group-body .form-control.is-autocheck-successful{background-image:url("/images/modules/ajax/success@2x.png")}dl.form-group>dd .form-control.is-autocheck-errored,.form-group>.form-group-body .form-control.is-autocheck-errored{background-image:url("/images/modules/ajax/error@2x.png")}}.status-indicator{display:inline-block;width:16px;height:16px;margin-left:5px}.status-indicator .octicon{display:none}.status-indicator-success::before{content:""}.status-indicator-success .octicon-check{display:inline-block;color:var(--color-success-fg);fill:var(--color-success-fg)}.status-indicator-success .octicon-x{display:none}.status-indicator-failed::before{content:""}.status-indicator-failed .octicon-check{display:none}.status-indicator-failed .octicon-x{display:inline-block;color:var(--color-danger-fg);fill:var(--color-danger-fg)}.status-indicator-loading{width:16px;background-image:url("/images/spinners/octocat-spinner-32-EAF2F5.gif");background-repeat:no-repeat;background-position:0 0;background-size:16px}.inline-form{display:inline-block}.inline-form .btn-plain{background-color:transparent;border:0}.drag-and-drop{padding:7px 10px;margin:0;font-size:13px;line-height:16px;color:var(--color-fg-muted);background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default);border-top:0;border-bottom-right-radius:6px;border-bottom-left-radius:6px}.drag-and-drop .default,.drag-and-drop .loading,.drag-and-drop .error{display:none}.drag-and-drop .error{color:var(--color-danger-fg)}.drag-and-drop img{vertical-align:top}.is-default .drag-and-drop .default{display:inline-block}.is-uploading .drag-and-drop .loading{display:inline-block}.is-bad-file .drag-and-drop .bad-file{display:inline-block}.is-duplicate-filename .drag-and-drop .duplicate-filename{display:inline-block}.is-too-big .drag-and-drop .too-big{display:inline-block}.is-hidden-file .drag-and-drop .hidden-file{display:inline-block}.is-empty .drag-and-drop .empty{display:inline-block}.is-bad-permissions .drag-and-drop .bad-permissions{display:inline-block}.is-repository-required .drag-and-drop .repository-required{display:inline-block}.drag-and-drop-error-info{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.drag-and-drop-error-info a{color:var(--color-accent-fg)}.is-failed .drag-and-drop .failed-request{display:inline-block}.manual-file-chooser{position:absolute;width:240px;padding:5px;margin-left:-80px;cursor:pointer;opacity:.0001}.manual-file-chooser:hover+.manual-file-chooser-text{text-decoration:underline}.btn .manual-file-chooser{top:0;padding:0;line-height:34px}.upload-enabled textarea{display:block;border-bottom:1px dashed var(--color-border-default);border-bottom-right-radius:0;border-bottom-left-radius:0}.upload-enabled.focused{border-color:var(--color-accent-fg);border-radius:6px;outline:none;box-shadow:0 0 0 2px var(--color-accent-fg)}.upload-enabled.focused .form-control{border-color:transparent;border-bottom-color:var(--color-accent-fg);box-shadow:none}.upload-enabled.focused .drag-and-drop{border-color:transparent}.dragover textarea,.dragover .drag-and-drop{box-shadow:#c9ff00 0 0 3px}.write-content{position:relative}.previewable-comment-form{position:relative}.previewable-comment-form .tabnav{position:relative;padding:8px 8px 0}.previewable-comment-form .comment{border:1px solid var(--color-border-default)}.previewable-comment-form .comment-form-error{margin-bottom:8px}.previewable-comment-form .write-content,.previewable-comment-form .preview-content{display:none;margin:0 8px 8px}.previewable-comment-form.write-selected .write-content,.previewable-comment-form.preview-selected .preview-content{display:block}.previewable-comment-form textarea{display:block;width:100%;min-height:100px;max-height:500px;padding:8px;resize:vertical}.form-action-spacious{margin-top:10px}div.composer{margin-top:0;border:0}.composer .comment-form-textarea{height:200px;min-height:200px}.composer .tabnav{margin:0 0 10px}h2.account{margin:15px 0 0;font-size:18px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}p.explain{position:relative;font-size:12px;color:var(--color-fg-muted)}p.explain strong{color:var(--color-fg-default)}p.explain .octicon{margin-right:5px;color:var(--color-fg-muted)}p.explain .minibutton{top:-4px;float:right}.form-group label{position:static}.input-group{display:table}.input-group .form-control{position:relative;width:100%}.input-group .form-control:focus{z-index:2}.input-group .form-control+.btn{margin-left:0}.input-group.inline{display:inline-table}.input-group:focus-within button{outline-offset:0}.input-group .form-control.autocomplete-embedded-icon-wrap{display:inline-flex;padding:5px 8px}.input-group .form-control,.input-group-button{display:table-cell}.input-group-button{width:1%;vertical-align:middle}.input-group-button--autocomplete-embedded-icon{vertical-align:bottom}.input-group .form-control:first-child,.input-group-button:first-child .btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-button:first-child .btn{margin-right:-1px}.input-group .form-control:last-child,.input-group-button:last-child .btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-button:last-child .btn{margin-left:-1px}.radio-group::before{display:table;content:""}.radio-group::after{display:table;clear:both;content:""}.radio-label{float:left;padding:6px 16px 6px 36px;margin-left:-1px;font-size:14px;line-height:20px;color:var(--color-fg-default);cursor:pointer;border:1px solid var(--color-border-default)}:checked+.radio-label{position:relative;z-index:1;border-color:var(--color-accent-emphasis)}.radio-label:first-of-type{margin-left:0;border-top-left-radius:6px;border-bottom-left-radius:6px}.radio-label:last-of-type{border-top-right-radius:6px;border-bottom-right-radius:6px}.radio-label .octicon{margin-left:4px;color:var(--color-fg-subtle)}.radio-input{z-index:3;float:left;margin:10px -32px 0 16px}.radio-input:disabled{position:relative}.radio-input:disabled+.radio-label{color:var(--color-primer-fg-disabled);cursor:default;background-color:var(--color-neutral-subtle)}.radio-input:disabled+.radio-label .octicon{color:inherit}.AppFrame .AppFrame-a11yNav{position:absolute;z-index:1000;display:flex;width:100%;padding:var(--base-size-16, 16px);background:var(--color-canvas-inset);padding-block-end:calc(var(--base-size-16, 16px) - var(--primer-borderWidth-thin, 1px));isolation:isolate;align-items:center;gap:var(--base-size-8, 8px)}.AppFrame .AppFrame-a11yNav:not(:focus-within){width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);border:0}.AppFrame .AppFrame-a11yNav:focus-within{top:0;left:0}@media(max-width: 767.98px){.AppFrame .AppFrame-a11yNav:focus-within{justify-content:center}}.AppFrame .AppFrame-a11yLink{transition:none}.AppFrame .AppFrame-a11yLink:not(:focus){display:block;width:var(--base-size-8, 8px);height:var(--base-size-8, 8px);overflow:hidden;text-indent:var(--base-size-128, 128px);pointer-events:none;background:var(--color-border-default);border-radius:var(--primer-borderRadius-full, 100vh)}.AppFrame .AppFrame-a11yLink:focus{z-index:20;display:grid;width:auto;height:auto;min-height:var(--primer-control-medium-size, 32px);padding:0 var(--primer-control-medium-paddingInline-spacious, 16px);overflow:auto;color:var(--color-fg-on-emphasis);background:var(--color-accent-emphasis);border-radius:var(--primer-borderRadius-full, 100vh);align-items:center}@media(pointer: coarse){.AppFrame .AppFrame-a11yLink:focus::after{position:absolute;top:50%;left:50%;width:100%;height:100%;min-height:var(--primer-control-minTarget-coarse, 44px);content:"";transform:translateX(-50%) translateY(-50%)}}@media(prefers-reduced-motion: no-preference){.AppFrame .AppFrame-a11yLink:focus{animation:AppFrame-a11yLink-focus 200ms ease-out}}@keyframes AppFrame-a11yLink-focus{0%{color:var(--color-accent-emphasis);transform:scale(0.3, 0.25)}50%{color:var(--color-accent-emphasis);transform:scale(1, 1)}55%{color:var(--color-fg-on-emphasis)}100%{transform:scaleX(1)}}.AppFrame .AppFrame-main{display:flex;min-height:100vh;flex-direction:column}@supports(height: 100dvh){.AppFrame .AppFrame-main{min-height:100dvh}}.AppFrame .AppFrame-header-wrapper{position:relative;height:min-content;overflow:visible}.AppFrame .AppFrame-header-wrapper .AppFrame-header{position:sticky;top:0;z-index:1}.AppFrame .AppFrame-header{flex:0 0 auto}.AppFrame .AppFrame-subheader{flex:0 0 auto}.AppFrame .AppFrame-body{flex:1 0;height:100%}.AppFrame .AppFrame-footer{flex:0 0 auto}.container-sm{max-width:544px;margin-right:auto;margin-left:auto}.container-md{max-width:768px;margin-right:auto;margin-left:auto}.container-lg{max-width:1012px;margin-right:auto;margin-left:auto}.container-xl{max-width:1280px;margin-right:auto;margin-left:auto}.col-1{width:8.33333333%}.col-2{width:16.66666666%}.col-3{width:24.99999999%}.col-4{width:33.33333332%}.col-5{width:41.66666665%}.col-6{width:49.99999998%}.col-7{width:58.33333331%}.col-8{width:66.66666664%}.col-9{width:74.99999997%}.col-10{width:83.3333333%}.col-11{width:91.66666663%}.col-12{width:100%}@media(min-width: 544px){.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666666%}.col-sm-3{width:24.99999999%}.col-sm-4{width:33.33333332%}.col-sm-5{width:41.66666665%}.col-sm-6{width:49.99999998%}.col-sm-7{width:58.33333331%}.col-sm-8{width:66.66666664%}.col-sm-9{width:74.99999997%}.col-sm-10{width:83.3333333%}.col-sm-11{width:91.66666663%}.col-sm-12{width:100%}}@media(min-width: 768px){.col-md-1{width:8.33333333%}.col-md-2{width:16.66666666%}.col-md-3{width:24.99999999%}.col-md-4{width:33.33333332%}.col-md-5{width:41.66666665%}.col-md-6{width:49.99999998%}.col-md-7{width:58.33333331%}.col-md-8{width:66.66666664%}.col-md-9{width:74.99999997%}.col-md-10{width:83.3333333%}.col-md-11{width:91.66666663%}.col-md-12{width:100%}}@media(min-width: 1012px){.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666666%}.col-lg-3{width:24.99999999%}.col-lg-4{width:33.33333332%}.col-lg-5{width:41.66666665%}.col-lg-6{width:49.99999998%}.col-lg-7{width:58.33333331%}.col-lg-8{width:66.66666664%}.col-lg-9{width:74.99999997%}.col-lg-10{width:83.3333333%}.col-lg-11{width:91.66666663%}.col-lg-12{width:100%}}@media(min-width: 1280px){.col-xl-1{width:8.33333333%}.col-xl-2{width:16.66666666%}.col-xl-3{width:24.99999999%}.col-xl-4{width:33.33333332%}.col-xl-5{width:41.66666665%}.col-xl-6{width:49.99999998%}.col-xl-7{width:58.33333331%}.col-xl-8{width:66.66666664%}.col-xl-9{width:74.99999997%}.col-xl-10{width:83.3333333%}.col-xl-11{width:91.66666663%}.col-xl-12{width:100%}}.gutter{margin-right:-16px;margin-left:-16px}.gutter>[class*=col-]{padding-right:16px !important;padding-left:16px !important}.gutter-condensed{margin-right:-8px;margin-left:-8px}.gutter-condensed>[class*=col-]{padding-right:8px !important;padding-left:8px !important}.gutter-spacious{margin-right:-24px;margin-left:-24px}.gutter-spacious>[class*=col-]{padding-right:24px !important;padding-left:24px !important}@media(min-width: 544px){.gutter-sm{margin-right:-16px;margin-left:-16px}.gutter-sm>[class*=col-]{padding-right:16px !important;padding-left:16px !important}.gutter-sm-condensed{margin-right:-8px;margin-left:-8px}.gutter-sm-condensed>[class*=col-]{padding-right:8px !important;padding-left:8px !important}.gutter-sm-spacious{margin-right:-24px;margin-left:-24px}.gutter-sm-spacious>[class*=col-]{padding-right:24px !important;padding-left:24px !important}}@media(min-width: 768px){.gutter-md{margin-right:-16px;margin-left:-16px}.gutter-md>[class*=col-]{padding-right:16px !important;padding-left:16px !important}.gutter-md-condensed{margin-right:-8px;margin-left:-8px}.gutter-md-condensed>[class*=col-]{padding-right:8px !important;padding-left:8px !important}.gutter-md-spacious{margin-right:-24px;margin-left:-24px}.gutter-md-spacious>[class*=col-]{padding-right:24px !important;padding-left:24px !important}}@media(min-width: 1012px){.gutter-lg{margin-right:-16px;margin-left:-16px}.gutter-lg>[class*=col-]{padding-right:16px !important;padding-left:16px !important}.gutter-lg-condensed{margin-right:-8px;margin-left:-8px}.gutter-lg-condensed>[class*=col-]{padding-right:8px !important;padding-left:8px !important}.gutter-lg-spacious{margin-right:-24px;margin-left:-24px}.gutter-lg-spacious>[class*=col-]{padding-right:24px !important;padding-left:24px !important}}@media(min-width: 1280px){.gutter-xl{margin-right:-16px;margin-left:-16px}.gutter-xl>[class*=col-]{padding-right:16px !important;padding-left:16px !important}.gutter-xl-condensed{margin-right:-8px;margin-left:-8px}.gutter-xl-condensed>[class*=col-]{padding-right:8px !important;padding-left:8px !important}.gutter-xl-spacious{margin-right:-24px;margin-left:-24px}.gutter-xl-spacious>[class*=col-]{padding-right:24px !important;padding-left:24px !important}}.offset-1{margin-left:8.33333333% !important}.offset-2{margin-left:16.66666666% !important}.offset-3{margin-left:24.99999999% !important}.offset-4{margin-left:33.33333332% !important}.offset-5{margin-left:41.66666665% !important}.offset-6{margin-left:49.99999998% !important}.offset-7{margin-left:58.33333331% !important}.offset-8{margin-left:66.66666664% !important}.offset-9{margin-left:74.99999997% !important}.offset-10{margin-left:83.3333333% !important}.offset-11{margin-left:91.66666663% !important}@media(min-width: 544px){.offset-sm-1{margin-left:8.33333333% !important}.offset-sm-2{margin-left:16.66666666% !important}.offset-sm-3{margin-left:24.99999999% !important}.offset-sm-4{margin-left:33.33333332% !important}.offset-sm-5{margin-left:41.66666665% !important}.offset-sm-6{margin-left:49.99999998% !important}.offset-sm-7{margin-left:58.33333331% !important}.offset-sm-8{margin-left:66.66666664% !important}.offset-sm-9{margin-left:74.99999997% !important}.offset-sm-10{margin-left:83.3333333% !important}.offset-sm-11{margin-left:91.66666663% !important}}@media(min-width: 768px){.offset-md-1{margin-left:8.33333333% !important}.offset-md-2{margin-left:16.66666666% !important}.offset-md-3{margin-left:24.99999999% !important}.offset-md-4{margin-left:33.33333332% !important}.offset-md-5{margin-left:41.66666665% !important}.offset-md-6{margin-left:49.99999998% !important}.offset-md-7{margin-left:58.33333331% !important}.offset-md-8{margin-left:66.66666664% !important}.offset-md-9{margin-left:74.99999997% !important}.offset-md-10{margin-left:83.3333333% !important}.offset-md-11{margin-left:91.66666663% !important}}@media(min-width: 1012px){.offset-lg-1{margin-left:8.33333333% !important}.offset-lg-2{margin-left:16.66666666% !important}.offset-lg-3{margin-left:24.99999999% !important}.offset-lg-4{margin-left:33.33333332% !important}.offset-lg-5{margin-left:41.66666665% !important}.offset-lg-6{margin-left:49.99999998% !important}.offset-lg-7{margin-left:58.33333331% !important}.offset-lg-8{margin-left:66.66666664% !important}.offset-lg-9{margin-left:74.99999997% !important}.offset-lg-10{margin-left:83.3333333% !important}.offset-lg-11{margin-left:91.66666663% !important}}@media(min-width: 1280px){.offset-xl-1{margin-left:8.33333333% !important}.offset-xl-2{margin-left:16.66666666% !important}.offset-xl-3{margin-left:24.99999999% !important}.offset-xl-4{margin-left:33.33333332% !important}.offset-xl-5{margin-left:41.66666665% !important}.offset-xl-6{margin-left:49.99999998% !important}.offset-xl-7{margin-left:58.33333331% !important}.offset-xl-8{margin-left:66.66666664% !important}.offset-xl-9{margin-left:74.99999997% !important}.offset-xl-10{margin-left:83.3333333% !important}.offset-xl-11{margin-left:91.66666663% !important}}:root{--Layout-pane-width: 220px;--Layout-content-width: 100%;--Layout-template-columns: 1fr var(--Layout-pane-width);--Layout-template-areas: "content pane";--Layout-column-gap: 16px;--Layout-row-gap: 16px;--Layout-outer-spacing-x: 0px;--Layout-outer-spacing-y: 0px;--Layout-inner-spacing-min: 0px;--Layout-inner-spacing-max: 0px}.PageLayout{display:block;margin:var(--Layout-outer-spacing-y) var(--Layout-outer-spacing-x)}@media(min-width: 768px){.PageLayout.PageLayout--panePos-start{--Layout-template-columns: var(--Layout-pane-width) minmax(0, calc(100% - var(--Layout-pane-width) - var(--Layout-column-gap)));--Layout-template-areas: "pane content"}.PageLayout.PageLayout--panePos-end{--Layout-template-columns: minmax(0, calc(100% - var(--Layout-pane-width) - var(--Layout-column-gap))) var(--Layout-pane-width);--Layout-template-areas: "content pane"}.PageLayout .PageLayout-header--hasDivider{padding-bottom:max(var(--Layout-row-gap),var(--Layout-inner-spacing-min));border-bottom:1px solid var(--color-border-default)}.PageLayout .PageLayout-footer--hasDivider{padding-top:max(var(--Layout-row-gap),var(--Layout-inner-spacing-min));border-top:1px solid var(--color-border-default)}.PageLayout.PageLayout--hasPaneDivider.PageLayout--panePos-start .PageLayout-pane{border-right:1px solid var(--color-border-default)}.PageLayout.PageLayout--hasPaneDivider.PageLayout--panePos-start:not(.PageLayout--columnGap-none) .PageLayout-pane{padding-right:calc(var(--Layout-column-gap) - 1px);margin-right:calc(var(--Layout-column-gap)*-1)}.PageLayout.PageLayout--hasPaneDivider.PageLayout--panePos-start:not(.PageLayout--columnGap-none) .PageLayout-content{margin-left:var(--Layout-column-gap)}.PageLayout.PageLayout--hasPaneDivider.PageLayout--panePos-end .PageLayout-pane{border-left:1px solid var(--color-border-default)}.PageLayout.PageLayout--hasPaneDivider.PageLayout--panePos-end:not(.PageLayout--columnGap-none) .PageLayout-pane{padding-left:calc(var(--Layout-column-gap) - 1px);margin-left:calc(var(--Layout-column-gap)*-1)}.PageLayout.PageLayout--hasPaneDivider.PageLayout--panePos-end:not(.PageLayout--columnGap-none) .PageLayout-content{margin-right:var(--Layout-column-gap)}.PageLayout .PageLayout-pane--sticky{position:sticky;top:0;max-height:100vh;overflow:auto;scrollbar-width:thin}@supports(max-height: 100dvh){.PageLayout .PageLayout-pane--sticky{max-height:100dvh}}.PageLayout [class^=PageLayout-content-centered-]{max-width:calc(var(--Layout-content-width) + var(--Layout-pane-width) + var(--Layout-column-gap));margin-right:auto;margin-left:auto}.PageLayout.PageLayout--hasPaneDivider [class^=PageLayout-content-centered-]{max-width:calc(var(--Layout-content-width) + var(--Layout-pane-width) + var(--Layout-column-gap)*2)}.PageLayout.PageLayout--panePos-start [class^=PageLayout-content-centered-]>[class^=container-]{margin-left:0}.PageLayout.PageLayout--panePos-end [class^=PageLayout-content-centered-]>[class^=container-]{margin-right:0}.PageLayout .PageLayout-content-centered-sm{--Layout-content-width: 544px}.PageLayout .PageLayout-content-centered-md{--Layout-content-width: 768px}.PageLayout .PageLayout-content-centered-lg{--Layout-content-width: 1012px}.PageLayout .PageLayout-content-centered-xl{--Layout-content-width: 1280px}}@media(min-width: 768px)and (min-width: 544px){.PageLayout{--Layout-pane-width: 220px}}@media(min-width: 768px)and (min-width: 768px){.PageLayout{--Layout-pane-width: 256px}}@media(min-width: 768px)and (min-width: 1012px){.PageLayout{--Layout-pane-width: 296px}}@media(min-width: 768px)and (min-width: 768px){.PageLayout.PageLayout--paneWidth-narrow{--Layout-pane-width: 240px}}@media(min-width: 768px)and (min-width: 1012px){.PageLayout.PageLayout--paneWidth-narrow{--Layout-pane-width: 256px}}@media(min-width: 768px)and (min-width: 1012px){.PageLayout.PageLayout--paneWidth-wide{--Layout-pane-width: 320px}}@media(min-width: 768px)and (min-width: 1280px){.PageLayout.PageLayout--paneWidth-wide{--Layout-pane-width: 336px}}@media(max-width: 767.98px){.PageLayout.PageLayout--responsive-stackRegions{--Layout-template-columns: 1fr;--Layout-template-areas: "content" "pane"}.PageLayout.PageLayout--responsive-stackRegions.PageLayout--responsive-panePos-start{--Layout-template-areas: "pane" "content"}.PageLayout.PageLayout--responsive-separateRegions{--Layout-template-columns: 1fr;--Layout-template-areas: "content"}.PageLayout.PageLayout--responsive-separateRegions.PageLayout--responsive-primary-content{--Layout-template-areas: "content"}.PageLayout.PageLayout--responsive-separateRegions.PageLayout--responsive-primary-content .PageLayout-pane{display:none}.PageLayout.PageLayout--responsive-separateRegions.PageLayout--responsive-primary-pane{--Layout-template-areas: "pane"}.PageLayout.PageLayout--responsive-separateRegions.PageLayout--responsive-primary-pane .PageLayout-content{display:none}.PageLayout .PageLayout-region--dividerNarrow-line-before{position:relative;margin-top:var(--Layout-row-gap)}.PageLayout .PageLayout-region--dividerNarrow-line-before::before{position:absolute;left:calc(var(--Layout-outer-spacing-x)*-1);display:block;width:calc(100% + var(--Layout-outer-spacing-x)*2);height:1px;content:"";background-color:var(--color-border-default);top:calc(-1px - var(--Layout-row-gap))}.PageLayout .PageLayout-region--dividerNarrow-line-after{position:relative;margin-bottom:var(--Layout-row-gap)}.PageLayout .PageLayout-region--dividerNarrow-line-after::after{position:absolute;left:calc(var(--Layout-outer-spacing-x)*-1);display:block;width:calc(100% + var(--Layout-outer-spacing-x)*2);height:1px;content:"";background-color:var(--color-border-default);bottom:calc(-1px - var(--Layout-row-gap))}.PageLayout .PageLayout-region--dividerNarrow-filled-before{position:relative;margin-top:calc(8px + var(--Layout-row-gap))}.PageLayout .PageLayout-region--dividerNarrow-filled-before::after{position:absolute;bottom:calc(8px * -1);left:calc(var(--Layout-outer-spacing-x)*-1);display:block;width:calc(100% + var(--Layout-outer-spacing-x)*2);height:8px;content:"";background-color:var(--color-canvas-inset);box-shadow:inset 0 1px var(--color-border-default),inset 0 -1px var(--color-border-default);top:calc(-8px - var(--Layout-row-gap))}.PageLayout .PageLayout-region--dividerNarrow-filled-after{position:relative;margin-bottom:calc(8px + var(--Layout-row-gap))}.PageLayout .PageLayout-region--dividerNarrow-filled-after::before{position:absolute;bottom:calc(8px * -1);left:calc(var(--Layout-outer-spacing-x)*-1);display:block;width:calc(100% + var(--Layout-outer-spacing-x)*2);height:8px;content:"";background-color:var(--color-canvas-inset);box-shadow:inset 0 1px var(--color-border-default),inset 0 -1px var(--color-border-default);bottom:calc(-8px - var(--Layout-row-gap))}}.PageLayout-wrapper{display:grid;grid:auto-flow/1fr;row-gap:var(--Layout-row-gap)}.PageLayout-columns{display:grid;column-gap:var(--Layout-column-gap);row-gap:var(--Layout-row-gap);grid-template-columns:var(--Layout-template-columns);grid-template-rows:1fr;grid-template-areas:var(--Layout-template-areas)}.PageLayout-columns .PageLayout-content{padding-right:var(--Layout-inner-spacing-max);padding-left:var(--Layout-inner-spacing-max);grid-area:content}.PageLayout-columns .PageLayout-pane{grid-area:pane}.PageLayout--outerSpacing-normal{--Layout-outer-spacing-x: 16px;--Layout-outer-spacing-y: 16px}@media(min-width: 1012px){.PageLayout--outerSpacing-normal{--Layout-outer-spacing-x: 24px;--Layout-outer-spacing-y: 24px}}.PageLayout--outerSpacing-condensed{--Layout-outer-spacing-x: 16px;--Layout-outer-spacing-y: 16px}.PageLayout--innerSpacing-normal{--Layout-inner-spacing-min: 16px;--Layout-inner-spacing-max: 16px}@media(min-width: 1012px){.PageLayout--innerSpacing-normal{--Layout-inner-spacing-max: 24px}}.PageLayout--innerSpacing-condensed{--Layout-inner-spacing-min: 16px;--Layout-inner-spacing-max: 16px}.PageLayout--columnGap-normal{--Layout-column-gap: 16px}@media(min-width: 1012px){.PageLayout--columnGap-normal{--Layout-column-gap: 24px}}.PageLayout--columnGap-condensed{--Layout-column-gap: 16px}.PageLayout--columnGap-none{--Layout-column-gap: 0px}.PageLayout--rowGap-normal{--Layout-row-gap: 16px}@media(min-width: 1012px){.PageLayout--rowGap-normal{--Layout-row-gap: 24px}}.PageLayout--rowGap-none{--Layout-row-gap: 0px}.PageLayout--rowGap-condensed{--Layout-row-gap: 16px}.PageLayout-header,.PageLayout-content,.PageLayout-pane,.PageLayout-footer{padding:var(--Layout-inner-spacing-min)}.Stack{--Stack-gap-whenRegular: var(--primer-stack-gap-normal, 16px);--Stack-gap-whenNarrow: var(--primer-stack-gap-normal, 16px);--Stack-gap-whenWide: var(--Stack-gap-whenRegular);--Stack-divider-color: var(--color-border-default);display:flex;flex-flow:column;align-items:stretch;align-content:flex-start;gap:var(--Stack-gap-whenRegular)}@media(max-width: 767.98px){.Stack{gap:var(--Stack-gap-whenNarrow)}}@media(min-width: 1400px){.Stack{gap:var(--Stack-gap-whenWide)}}.Stack-divider{display:none;padding:0;margin:0;border:0;align-self:stretch}.Stack-item{flex:0 1 auto;min-inline-size:0}@media(max-width: 767.98px){.Stack--dir-inline-whenNarrow{flex-flow:row}.Stack--dir-block-whenNarrow{flex-flow:column}.Stack--gap-none-whenNarrow{--Stack-gap-whenNarrow: 0}.Stack--gap-condensed-whenNarrow{--Stack-gap-whenNarrow: var(--primer-stack-gap-condensed, 8px)}.Stack--gap-normal-whenNarrow{--Stack-gap-whenNarrow: var(--primer-stack-gap-normal, 16px)}.Stack--align-start-whenNarrow{align-items:flex-start}.Stack--align-center-whenNarrow{align-items:center}.Stack--align-end-whenNarrow{align-items:flex-end}.Stack--align-baseline-whenNarrow{align-items:baseline}.Stack--alignWrap-start-whenNarrow{align-content:flex-start}.Stack--alignWrap-center-whenNarrow{align-content:center}.Stack--alignWrap-end-whenNarrow{align-content:flex-end}.Stack--alignWrap-distribute-whenNarrow{align-content:space-between}.Stack--alignWrap-distributeEvenly-whenNarrow{align-content:space-evenly}.Stack--spread-start-whenNarrow{justify-content:flex-start}.Stack--spread-center-whenNarrow{justify-content:center}.Stack--spread-end-whenNarrow{justify-content:flex-end}.Stack--spread-distribute-whenNarrow{justify-content:space-between}.Stack--spread-distributeEvenly-whenNarrow{justify-content:space-evenly}.Stack--wrap-whenNarrow{flex-wrap:wrap}.Stack--nowrap-whenNarrow{flex-wrap:nowrap}.Stack--showDividers-whenNarrow>.Stack-divider,.Stack--showDividers-whenNarrow>.Stack-item>.Stack-divider{display:block}:not(.Stack--dir-inline-whenNarrow)>.Stack-divider,:not(.Stack--dir-inline-whenNarrow)>.Stack-item>.Stack-divider{border-block-end:var(--primer-borderWidth-thin, 1px) solid var(--Stack-divider-color);inline-size:auto;block-size:0}.Stack--dir-inline-whenNarrow>.Stack-divider,.Stack--dir-inline-whenNarrow>.Stack-item>.Stack-divider{border-inline-end:var(--primer-borderWidth-thin, 1px) solid var(--Stack-divider-color);inline-size:0;block-size:auto}.Stack-item--expand-whenNarrow{flex-grow:1}.Stack-item--keepSize-whenNarrow{flex-shrink:0}}@media(min-width: 768px){.Stack--dir-inline-whenRegular{flex-flow:row}.Stack--dir-block-whenRegular{flex-flow:column}.Stack--gap-none-whenRegular{--Stack-gap-whenRegular: 0}.Stack--gap-condensed-whenRegular{--Stack-gap-whenRegular: var(--primer-stack-gap-condensed, 8px)}.Stack--gap-normal-whenRegular{--Stack-gap-whenRegular: var(--primer-stack-gap-normal, 16px)}.Stack--gap-spacious-whenRegular{--Stack-gap-whenRegular: var(--primer-stack-gap-spacious, 24px)}.Stack--align-start-whenRegular{align-items:flex-start}.Stack--align-center-whenRegular{align-items:center}.Stack--align-end-whenRegular{align-items:flex-end}.Stack--align-baseline-whenRegular{align-items:baseline}.Stack--alignWrap-start-whenRegular{align-content:flex-start}.Stack--alignWrap-center-whenRegular{align-content:center}.Stack--alignWrap-end-whenRegular{align-content:flex-end}.Stack--alignWrap-distribute-whenRegular{align-content:space-between}.Stack--alignWrap-distributeEvenly-whenRegular{align-content:space-evenly}.Stack--spread-start-whenRegular{justify-content:flex-start}.Stack--spread-center-whenRegular{justify-content:center}.Stack--spread-end-whenRegular{justify-content:flex-end}.Stack--spread-distribute-whenRegular{justify-content:space-between}.Stack--spread-distributeEvenly-whenRegular{justify-content:space-evenly}.Stack--wrap-whenRegular{flex-wrap:wrap}.Stack--nowrap-whenRegular{flex-wrap:nowrap}.Stack--showDividers-whenRegular>.Stack-divider,.Stack--showDividers-whenRegular>.Stack-item>.Stack-divider{display:block}:not(.Stack--dir-inline-whenRegular)>.Stack-divider,:not(.Stack--dir-inline-whenRegular)>.Stack-item>.Stack-divider{border-block-end:var(--primer-borderWidth-thin, 1px) solid var(--Stack-divider-color);inline-size:auto;block-size:0}.Stack--dir-inline-whenRegular>.Stack-divider,.Stack--dir-inline-whenRegular>.Stack-item>.Stack-divider{border-inline-end:var(--primer-borderWidth-thin, 1px) solid var(--Stack-divider-color);inline-size:0;block-size:auto}.Stack-item--expand-whenRegular{flex-grow:1}.Stack-item--keepSize-whenRegular{flex-shrink:0}}@media(min-width: 1400px){.Stack--dir-inline-whenWide{flex-flow:row}.Stack--dir-block-whenWide{flex-flow:column}.Stack--gap-none-whenWide{--Stack-gap-whenWide: 0}.Stack--gap-condensed-whenWide{--Stack-gap-whenWide: var(--primer-stack-gap-condensed, 8px)}.Stack--gap-normal-whenWide{--Stack-gap-whenWide: var(--primer-stack-gap-normal, 16px)}.Stack--gap-spacious-whenWide{--Stack-gap-whenWide: var(--primer-stack-gap-spacious, 24px)}.Stack--align-start-whenWide{align-items:flex-start}.Stack--align-center-whenWide{align-items:center}.Stack--align-end-whenWide{align-items:flex-end}.Stack--align-baseline-whenWide{align-items:baseline}.Stack--alignWrap-start-whenWide{align-content:flex-start}.Stack--alignWrap-center-whenWide{align-content:center}.Stack--alignWrap-end-whenWide{align-content:flex-end}.Stack--alignWrap-distribute-whenWide{align-content:space-between}.Stack--alignWrap-distributeEvenly-whenWide{align-content:space-evenly}.Stack--spread-start-whenWide{justify-content:flex-start}.Stack--spread-center-whenWide{justify-content:center}.Stack--spread-end-whenWide{justify-content:flex-end}.Stack--spread-distribute-whenWide{justify-content:space-between}.Stack--spread-distributeEvenly-whenWide{justify-content:space-evenly}.Stack--wrap-whenWide{flex-wrap:wrap}.Stack--nowrap-whenWide{flex-wrap:nowrap}.Stack--showDividers-whenWide>.Stack-divider,.Stack--showDividers-whenWide>.Stack-item>.Stack-divider{display:block}:not(.Stack--dir-inline-whenWide)>.Stack-divider,:not(.Stack--dir-inline-whenWide)>.Stack-item>.Stack-divider{border-block-end:var(--primer-borderWidth-thin, 1px) solid var(--Stack-divider-color);inline-size:auto;block-size:0}.Stack--dir-inline-whenWide>.Stack-divider,.Stack--dir-inline-whenWide>.Stack-item>.Stack-divider{border-inline-end:var(--primer-borderWidth-thin, 1px) solid var(--Stack-divider-color);inline-size:0;block-size:auto}.Stack-item--expand-whenWide{flex-grow:1}.Stack-item--keepSize-whenWide{flex-shrink:0}}.filter-list{list-style-type:none}.filter-list.small .filter-item{padding:6px 12px;font-size:12px}.filter-list.pjax-active .filter-item{color:var(--color-fg-muted);background-color:transparent}.filter-list.pjax-active .filter-item.pjax-active{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.filter-item{position:relative;display:block;padding:8px 16px;margin-bottom:4px;overflow:hidden;font-size:14px;color:var(--color-fg-muted);text-decoration:none;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border-radius:6px}.filter-item:hover{text-decoration:none;background-color:var(--color-canvas-subtle)}.filter-item.selected,.filter-item[aria-selected=true],.filter-item[aria-current]:not([aria-current=false]){color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.filter-item.selected:focus,.filter-item[aria-selected=true]:focus,.filter-item[aria-current]:not([aria-current=false]):focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.filter-item.selected:focus:not(:focus-visible),.filter-item[aria-selected=true]:focus:not(:focus-visible),.filter-item[aria-current]:not([aria-current=false]):focus:not(:focus-visible){outline:solid 1px transparent;box-shadow:none}.filter-item.selected:focus-visible,.filter-item[aria-selected=true]:focus-visible,.filter-item[aria-current]:not([aria-current=false]):focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.filter-item .count{float:right;font-weight:var(--base-text-weight-semibold, 600)}.filter-item .bar{position:absolute;top:2px;right:0;bottom:2px;z-index:-1;display:inline-block;background-color:var(--color-neutral-subtle)}.SideNav{background-color:var(--color-canvas-subtle)}.SideNav-item{position:relative;display:block;width:100%;padding:12px 16px;color:var(--color-fg-default);text-align:left;background-color:transparent;border:0;border-top:1px solid var(--color-border-muted)}.SideNav-item:first-child{border-top:0}.SideNav-item:last-child{box-shadow:0 1px 0 var(--color-border-default)}.SideNav-item::before{position:absolute;top:0;bottom:0;left:0;z-index:1;width:2px;pointer-events:none;content:""}.SideNav-item:hover{text-decoration:none;background-color:var(--color-neutral-subtle)}.SideNav-item:active{background-color:var(--color-canvas-subtle)}.SideNav-item[aria-current]:not([aria-current=false]),.SideNav-item[aria-selected=true]{background-color:var(--color-sidenav-selected-bg)}.SideNav-item[aria-current]:not([aria-current=false])::before,.SideNav-item[aria-selected=true]::before{background-color:var(--color-primer-border-active)}.SideNav-icon{width:16px;margin-right:8px;color:var(--color-fg-muted)}.SideNav-subItem{position:relative;display:block;width:100%;padding:4px 0;color:var(--color-accent-fg);text-align:left;background-color:transparent;border:0}.SideNav-subItem:hover{color:var(--color-fg-default);text-decoration:none}.SideNav-subItem[aria-current]:not([aria-current=false]),.SideNav-subItem[aria-selected=true]{font-weight:var(--base-text-weight-medium, 500);color:var(--color-fg-default)}.subnav{margin-bottom:20px}.subnav::before{display:table;content:""}.subnav::after{display:table;clear:both;content:""}.subnav-bordered{padding-bottom:20px;border-bottom:1px solid var(--color-border-muted)}.subnav-flush{margin-bottom:0}.subnav-item{position:relative;float:left;padding:5px 16px;font-weight:var(--base-text-weight-medium, 500);line-height:20px;color:var(--color-fg-default);border:1px solid var(--color-border-default)}.subnav-item+.subnav-item{margin-left:-1px}.subnav-item:hover,.subnav-item:focus{text-decoration:none;background-color:var(--color-canvas-subtle)}.subnav-item.selected,.subnav-item[aria-selected=true],.subnav-item[aria-current]:not([aria-current=false]){z-index:2;color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis);border-color:var(--color-accent-emphasis)}.subnav-item.selected:focus,.subnav-item[aria-selected=true]:focus,.subnav-item[aria-current]:not([aria-current=false]):focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.subnav-item.selected:focus:not(:focus-visible),.subnav-item[aria-selected=true]:focus:not(:focus-visible),.subnav-item[aria-current]:not([aria-current=false]):focus:not(:focus-visible){outline:solid 1px transparent;box-shadow:none}.subnav-item.selected:focus-visible,.subnav-item[aria-selected=true]:focus-visible,.subnav-item[aria-current]:not([aria-current=false]):focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.subnav-item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.subnav-item:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.subnav-search{position:relative;margin-left:12px}.subnav-search-input{width:320px;padding-left:32px;color:var(--color-fg-muted)}.subnav-search-input-wide{width:500px}.subnav-search-icon{position:absolute;top:9px;left:8px;display:block;color:var(--color-fg-muted);text-align:center;pointer-events:none}.subnav-search-context .btn{border-top-right-radius:0;border-bottom-right-radius:0}.subnav-search-context .btn:hover,.subnav-search-context .btn:focus,.subnav-search-context .btn:active,.subnav-search-context .btn.selected{z-index:2}.subnav-search-context+.subnav-search{margin-left:-1px}.subnav-search-context+.subnav-search .subnav-search-input{border-top-left-radius:0;border-bottom-left-radius:0}.subnav-search-context .select-menu-modal-holder{z-index:30}.subnav-search-context .select-menu-modal{width:220px}.subnav-search-context .select-menu-item-icon{color:inherit}.subnav-spacer-right{padding-right:12px}.pagination a,.pagination span,.pagination em{min-width:32px;padding:5px 10px;font-style:normal;line-height:20px;color:var(--color-fg-default);text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid transparent;border-radius:6px;transition:border-color .2s cubic-bezier(0.3, 0, 0.5, 1)}.pagination a:hover,.pagination a:focus,.pagination span:hover,.pagination span:focus,.pagination em:hover,.pagination em:focus{text-decoration:none;border-color:var(--color-border-default);transition-duration:.1s}.pagination a:active,.pagination span:active,.pagination em:active{border-color:var(--color-border-muted);transition:none}.pagination .previous_page,.pagination .next_page{color:var(--color-accent-fg)}.pagination .current,.pagination .current:hover,.pagination [aria-current]:not([aria-current=false]){color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis);border-color:transparent}.pagination .gap,.pagination .disabled,.pagination [aria-disabled=true],.pagination .gap:hover,.pagination .disabled:hover,.pagination [aria-disabled=true]:hover{color:var(--color-primer-fg-disabled);cursor:default;border-color:transparent}@supports(clip-path: polygon(50% 0, 100% 50%, 50% 100%)){.pagination .previous_page::before,.pagination .next_page::after{display:inline-block;width:16px;height:16px;vertical-align:text-bottom;content:"";background-color:currentColor}.pagination .previous_page::before{margin-right:4px;clip-path:polygon(9.8px 12.8px, 8.7px 12.8px, 4.5px 8.5px, 4.5px 7.5px, 8.7px 3.2px, 9.8px 4.3px, 6.1px 8px, 9.8px 11.7px, 9.8px 12.8px)}.pagination .next_page::after{margin-left:4px;clip-path:polygon(6.2px 3.2px, 7.3px 3.2px, 11.5px 7.5px, 11.5px 8.5px, 7.3px 12.8px, 6.2px 11.7px, 9.9px 8px, 6.2px 4.3px, 6.2px 3.2px)}}.pagination>*{display:none}.pagination>:first-child,.pagination>:last-child,.pagination>.previous_page,.pagination>.next_page{display:inline-block}@media(min-width: 544px){.pagination>:nth-child(2),.pagination>:nth-last-child(2),.pagination>.current,.pagination>.gap{display:inline-block}}@media(min-width: 768px){.pagination>*{display:inline-block}}.paginate-container{margin-top:16px;margin-bottom:16px;text-align:center}.paginate-container .pagination{display:inline-block}.tooltipped{position:relative}.tooltipped::after{position:absolute;z-index:1000000;display:none;padding:.5em .75em;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--color-fg-on-emphasis);text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:var(--color-neutral-emphasis-plus);border-radius:6px;opacity:0}.tooltipped::before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:var(--color-neutral-emphasis-plus);pointer-events:none;content:"";border:6px solid transparent;opacity:0}@keyframes tooltip-appear{from{opacity:0}to{opacity:1}}.tooltipped:hover::before,.tooltipped:hover::after,.tooltipped:active::before,.tooltipped:active::after,.tooltipped:focus::before,.tooltipped:focus::after{display:inline-block;text-decoration:none;animation-name:tooltip-appear;animation-duration:.1s;animation-fill-mode:forwards;animation-timing-function:ease-in;animation-delay:.4s}.tooltipped-no-delay:hover::before,.tooltipped-no-delay:hover::after,.tooltipped-no-delay:active::before,.tooltipped-no-delay:active::after,.tooltipped-no-delay:focus::before,.tooltipped-no-delay:focus::after{animation-delay:0s}.tooltipped-multiline:hover::after,.tooltipped-multiline:active::after,.tooltipped-multiline:focus::after{display:table-cell}.tooltipped-s::after,.tooltipped-se::after,.tooltipped-sw::after{top:100%;right:50%;margin-top:6px}.tooltipped-s::before,.tooltipped-se::before,.tooltipped-sw::before{top:auto;right:50%;bottom:-7px;margin-right:-6px;border-bottom-color:var(--color-neutral-emphasis-plus)}.tooltipped-se::after{right:auto;left:50%;margin-left:-16px}.tooltipped-sw::after{margin-right:-16px}.tooltipped-n::after,.tooltipped-ne::after,.tooltipped-nw::after{right:50%;bottom:100%;margin-bottom:6px}.tooltipped-n::before,.tooltipped-ne::before,.tooltipped-nw::before{top:-7px;right:50%;bottom:auto;margin-right:-6px;border-top-color:var(--color-neutral-emphasis-plus)}.tooltipped-ne::after{right:auto;left:50%;margin-left:-16px}.tooltipped-nw::after{margin-right:-16px}.tooltipped-s::after,.tooltipped-n::after{transform:translateX(50%)}.tooltipped-w::after{right:100%;bottom:50%;margin-right:6px;transform:translateY(50%)}.tooltipped-w::before{top:50%;bottom:50%;left:-7px;margin-top:-6px;border-left-color:var(--color-neutral-emphasis-plus)}.tooltipped-e::after{bottom:50%;left:100%;margin-left:6px;transform:translateY(50%)}.tooltipped-e::before{top:50%;right:-7px;bottom:50%;margin-top:-6px;border-right-color:var(--color-neutral-emphasis-plus)}.tooltipped-align-right-1::after,.tooltipped-align-right-2::after{right:0;margin-right:0}.tooltipped-align-right-1::before{right:10px}.tooltipped-align-right-2::before{right:15px}.tooltipped-align-left-1::after,.tooltipped-align-left-2::after{left:0;margin-left:0}.tooltipped-align-left-1::before{left:5px}.tooltipped-align-left-2::before{left:10px}.tooltipped-multiline::after{width:max-content;max-width:250px;word-wrap:break-word;white-space:pre-line;border-collapse:separate}.tooltipped-multiline.tooltipped-s::after,.tooltipped-multiline.tooltipped-n::after{right:auto;left:50%;transform:translateX(-50%)}.tooltipped-multiline.tooltipped-w::after,.tooltipped-multiline.tooltipped-e::after{right:100%}.tooltipped-sticky::before,.tooltipped-sticky::after{display:inline-block}.tooltipped-sticky.tooltipped-multiline::after{display:table-cell}.anim-fade-in{animation-name:fade-in;animation-duration:1s;animation-timing-function:ease-in-out}.anim-fade-in.fast{animation-duration:300ms}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}.anim-fade-out{animation-name:fade-out;animation-duration:1s;animation-fill-mode:forwards;animation-timing-function:ease-out}.anim-fade-out.fast{animation-duration:.3s}@keyframes fade-out{0%{opacity:1}100%{opacity:0}}.anim-fade-up{opacity:0;animation-name:fade-up;animation-duration:.3s;animation-fill-mode:forwards;animation-timing-function:ease-out;animation-delay:1s}@keyframes fade-up{0%{opacity:.8;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}.anim-fade-down{animation-name:fade-down;animation-duration:.3s;animation-fill-mode:forwards;animation-timing-function:ease-in}@keyframes fade-down{0%{opacity:1;transform:translateY(0)}100%{opacity:.5;transform:translateY(100%)}}.anim-grow-x{width:0%;animation-name:grow-x;animation-duration:.3s;animation-fill-mode:forwards;animation-timing-function:ease;animation-delay:.5s}@keyframes grow-x{to{width:100%}}.anim-shrink-x{animation-name:shrink-x;animation-duration:.3s;animation-fill-mode:forwards;animation-timing-function:ease-in-out;animation-delay:.5s}@keyframes shrink-x{to{width:0%}}.anim-scale-in{animation-name:scale-in;animation-duration:.15s;animation-timing-function:cubic-bezier(0.2, 0, 0.13, 1.5)}@keyframes scale-in{0%{opacity:0;transform:scale(0.5)}100%{opacity:1;transform:scale(1)}}.anim-pulse{animation-name:pulse;animation-duration:2s;animation-timing-function:linear;animation-iteration-count:infinite}@keyframes pulse{0%{opacity:.3}10%{opacity:1}100%{opacity:.3}}.anim-pulse-in{animation-name:pulse-in;animation-duration:.5s}@keyframes pulse-in{0%{transform:scale3d(1, 1, 1)}50%{transform:scale3d(1.1, 1.1, 1.1)}100%{transform:scale3d(1, 1, 1)}}.hover-grow,.anim-hover-grow{transition:transform .3s;-webkit-backface-visibility:hidden;backface-visibility:hidden}.hover-grow:hover,.anim-hover-grow:hover{transform:scale(1.025)}.anim-rotate{animation:rotate-keyframes 1s linear infinite}@keyframes rotate-keyframes{100%{transform:rotate(360deg)}}.border-x{border-right:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important;border-left:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-y{border-top:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important;border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border{border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-0{border:0 !important}.border-top{border-top:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-right{border-right:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-bottom{border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-left{border-left:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.rounded{border-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-2{border-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-3{border-radius:var(--primer-borderRadius-large, 8px) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--primer-borderRadius-small, 4px) !important;border-top-right-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-top-2{border-top-left-radius:var(--primer-borderRadius-medium, 6px) !important;border-top-right-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-top-3{border-top-left-radius:var(--primer-borderRadius-medium, 8px) !important;border-top-right-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-right-1{border-top-right-radius:var(--primer-borderRadius-small, 4px) !important;border-bottom-right-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-right-2{border-top-right-radius:var(--primer-borderRadius-medium, 6px) !important;border-bottom-right-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-right-3{border-top-right-radius:var(--primer-borderRadius-medium, 8px) !important;border-bottom-right-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--primer-borderRadius-small, 4px) !important;border-bottom-left-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-bottom-2{border-bottom-right-radius:var(--primer-borderRadius-medium, 6px) !important;border-bottom-left-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-bottom-3{border-bottom-right-radius:var(--primer-borderRadius-medium, 8px) !important;border-bottom-left-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-left-1{border-bottom-left-radius:var(--primer-borderRadius-small, 4px) !important;border-top-left-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-left-2{border-bottom-left-radius:var(--primer-borderRadius-medium, 6px) !important;border-top-left-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-left-3{border-bottom-left-radius:var(--primer-borderRadius-medium, 8px) !important;border-top-left-radius:var(--primer-borderRadius-medium, 8px) !important}@media(min-width: 544px){.border-sm{border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-sm-0{border:0 !important}.border-sm-top{border-top:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-sm-right{border-right:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-sm-bottom{border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-sm-left{border-left:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-sm-top-0{border-top:0 !important}.border-sm-right-0{border-right:0 !important}.border-sm-bottom-0{border-bottom:0 !important}.border-sm-left-0{border-left:0 !important}.rounded-sm{border-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-sm-0{border-radius:0 !important}.rounded-sm-1{border-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-sm-2{border-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-sm-3{border-radius:var(--primer-borderRadius-large, 8px) !important}.rounded-sm-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-sm-top-1{border-top-left-radius:var(--primer-borderRadius-small, 4px) !important;border-top-right-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-sm-top-2{border-top-left-radius:var(--primer-borderRadius-medium, 6px) !important;border-top-right-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-sm-top-3{border-top-left-radius:var(--primer-borderRadius-medium, 8px) !important;border-top-right-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-sm-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-sm-right-1{border-top-right-radius:var(--primer-borderRadius-small, 4px) !important;border-bottom-right-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-sm-right-2{border-top-right-radius:var(--primer-borderRadius-medium, 6px) !important;border-bottom-right-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-sm-right-3{border-top-right-radius:var(--primer-borderRadius-medium, 8px) !important;border-bottom-right-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-sm-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-sm-bottom-1{border-bottom-right-radius:var(--primer-borderRadius-small, 4px) !important;border-bottom-left-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-sm-bottom-2{border-bottom-right-radius:var(--primer-borderRadius-medium, 6px) !important;border-bottom-left-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-sm-bottom-3{border-bottom-right-radius:var(--primer-borderRadius-medium, 8px) !important;border-bottom-left-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-sm-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-sm-left-1{border-bottom-left-radius:var(--primer-borderRadius-small, 4px) !important;border-top-left-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-sm-left-2{border-bottom-left-radius:var(--primer-borderRadius-medium, 6px) !important;border-top-left-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-sm-left-3{border-bottom-left-radius:var(--primer-borderRadius-medium, 8px) !important;border-top-left-radius:var(--primer-borderRadius-medium, 8px) !important}}@media(min-width: 768px){.border-md{border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-md-0{border:0 !important}.border-md-top{border-top:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-md-right{border-right:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-md-bottom{border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-md-left{border-left:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-md-top-0{border-top:0 !important}.border-md-right-0{border-right:0 !important}.border-md-bottom-0{border-bottom:0 !important}.border-md-left-0{border-left:0 !important}.rounded-md{border-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-md-0{border-radius:0 !important}.rounded-md-1{border-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-md-2{border-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-md-3{border-radius:var(--primer-borderRadius-large, 8px) !important}.rounded-md-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-md-top-1{border-top-left-radius:var(--primer-borderRadius-small, 4px) !important;border-top-right-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-md-top-2{border-top-left-radius:var(--primer-borderRadius-medium, 6px) !important;border-top-right-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-md-top-3{border-top-left-radius:var(--primer-borderRadius-medium, 8px) !important;border-top-right-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-md-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-md-right-1{border-top-right-radius:var(--primer-borderRadius-small, 4px) !important;border-bottom-right-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-md-right-2{border-top-right-radius:var(--primer-borderRadius-medium, 6px) !important;border-bottom-right-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-md-right-3{border-top-right-radius:var(--primer-borderRadius-medium, 8px) !important;border-bottom-right-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-md-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-md-bottom-1{border-bottom-right-radius:var(--primer-borderRadius-small, 4px) !important;border-bottom-left-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-md-bottom-2{border-bottom-right-radius:var(--primer-borderRadius-medium, 6px) !important;border-bottom-left-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-md-bottom-3{border-bottom-right-radius:var(--primer-borderRadius-medium, 8px) !important;border-bottom-left-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-md-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-md-left-1{border-bottom-left-radius:var(--primer-borderRadius-small, 4px) !important;border-top-left-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-md-left-2{border-bottom-left-radius:var(--primer-borderRadius-medium, 6px) !important;border-top-left-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-md-left-3{border-bottom-left-radius:var(--primer-borderRadius-medium, 8px) !important;border-top-left-radius:var(--primer-borderRadius-medium, 8px) !important}}@media(min-width: 1012px){.border-lg{border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-lg-0{border:0 !important}.border-lg-top{border-top:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-lg-right{border-right:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-lg-bottom{border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-lg-left{border-left:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-lg-top-0{border-top:0 !important}.border-lg-right-0{border-right:0 !important}.border-lg-bottom-0{border-bottom:0 !important}.border-lg-left-0{border-left:0 !important}.rounded-lg{border-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-lg-0{border-radius:0 !important}.rounded-lg-1{border-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-lg-2{border-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-lg-3{border-radius:var(--primer-borderRadius-large, 8px) !important}.rounded-lg-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-lg-top-1{border-top-left-radius:var(--primer-borderRadius-small, 4px) !important;border-top-right-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-lg-top-2{border-top-left-radius:var(--primer-borderRadius-medium, 6px) !important;border-top-right-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-lg-top-3{border-top-left-radius:var(--primer-borderRadius-medium, 8px) !important;border-top-right-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-lg-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-lg-right-1{border-top-right-radius:var(--primer-borderRadius-small, 4px) !important;border-bottom-right-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-lg-right-2{border-top-right-radius:var(--primer-borderRadius-medium, 6px) !important;border-bottom-right-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-lg-right-3{border-top-right-radius:var(--primer-borderRadius-medium, 8px) !important;border-bottom-right-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-lg-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-lg-bottom-1{border-bottom-right-radius:var(--primer-borderRadius-small, 4px) !important;border-bottom-left-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-lg-bottom-2{border-bottom-right-radius:var(--primer-borderRadius-medium, 6px) !important;border-bottom-left-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-lg-bottom-3{border-bottom-right-radius:var(--primer-borderRadius-medium, 8px) !important;border-bottom-left-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-lg-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-lg-left-1{border-bottom-left-radius:var(--primer-borderRadius-small, 4px) !important;border-top-left-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-lg-left-2{border-bottom-left-radius:var(--primer-borderRadius-medium, 6px) !important;border-top-left-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-lg-left-3{border-bottom-left-radius:var(--primer-borderRadius-medium, 8px) !important;border-top-left-radius:var(--primer-borderRadius-medium, 8px) !important}}@media(min-width: 1280px){.border-xl{border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-xl-0{border:0 !important}.border-xl-top{border-top:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-xl-right{border-right:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-xl-bottom{border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-xl-left{border-left:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default) !important}.border-xl-top-0{border-top:0 !important}.border-xl-right-0{border-right:0 !important}.border-xl-bottom-0{border-bottom:0 !important}.border-xl-left-0{border-left:0 !important}.rounded-xl{border-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-xl-0{border-radius:0 !important}.rounded-xl-1{border-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-xl-2{border-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-xl-3{border-radius:var(--primer-borderRadius-large, 8px) !important}.rounded-xl-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-xl-top-1{border-top-left-radius:var(--primer-borderRadius-small, 4px) !important;border-top-right-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-xl-top-2{border-top-left-radius:var(--primer-borderRadius-medium, 6px) !important;border-top-right-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-xl-top-3{border-top-left-radius:var(--primer-borderRadius-medium, 8px) !important;border-top-right-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-xl-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-xl-right-1{border-top-right-radius:var(--primer-borderRadius-small, 4px) !important;border-bottom-right-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-xl-right-2{border-top-right-radius:var(--primer-borderRadius-medium, 6px) !important;border-bottom-right-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-xl-right-3{border-top-right-radius:var(--primer-borderRadius-medium, 8px) !important;border-bottom-right-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-xl-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-xl-bottom-1{border-bottom-right-radius:var(--primer-borderRadius-small, 4px) !important;border-bottom-left-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-xl-bottom-2{border-bottom-right-radius:var(--primer-borderRadius-medium, 6px) !important;border-bottom-left-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-xl-bottom-3{border-bottom-right-radius:var(--primer-borderRadius-medium, 8px) !important;border-bottom-left-radius:var(--primer-borderRadius-medium, 8px) !important}.rounded-xl-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-xl-left-1{border-bottom-left-radius:var(--primer-borderRadius-small, 4px) !important;border-top-left-radius:var(--primer-borderRadius-small, 4px) !important}.rounded-xl-left-2{border-bottom-left-radius:var(--primer-borderRadius-medium, 6px) !important;border-top-left-radius:var(--primer-borderRadius-medium, 6px) !important}.rounded-xl-left-3{border-bottom-left-radius:var(--primer-borderRadius-medium, 8px) !important;border-top-left-radius:var(--primer-borderRadius-medium, 8px) !important}}.circle{border-radius:var(--primer-borderRadius-full, 50%) !important}.border-dashed{border-style:dashed !important}.color-shadow-small{box-shadow:var(--color-shadow-small) !important}.color-shadow-medium{box-shadow:var(--color-shadow-medium) !important}.color-shadow-large{box-shadow:var(--color-shadow-large) !important}.color-shadow-extra-large{box-shadow:var(--color-shadow-extra-large) !important}.box-shadow-none{box-shadow:none !important}.color-fg-default{color:var(--color-fg-default) !important}.color-fg-muted{color:var(--color-fg-muted) !important}.color-fg-subtle{color:var(--color-fg-subtle) !important}.color-fg-accent{color:var(--color-accent-fg) !important}.color-fg-success{color:var(--color-success-fg) !important}.color-fg-attention{color:var(--color-attention-fg) !important}.color-fg-severe{color:var(--color-severe-fg) !important}.color-fg-danger{color:var(--color-danger-fg) !important}.color-fg-open{color:var(--color-open-fg) !important}.color-fg-closed{color:var(--color-closed-fg) !important}.color-fg-done{color:var(--color-done-fg) !important}.color-fg-sponsors{color:var(--color-sponsors-fg) !important}.color-fg-on-emphasis{color:var(--color-fg-on-emphasis) !important}.color-bg-default{background-color:var(--color-canvas-default) !important}.color-bg-overlay{background-color:var(--color-canvas-overlay) !important}.color-bg-inset{background-color:var(--color-canvas-inset) !important}.color-bg-subtle{background-color:var(--color-canvas-subtle) !important}.color-bg-emphasis{background-color:var(--color-neutral-emphasis-plus) !important}.color-bg-accent{background-color:var(--color-accent-subtle) !important}.color-bg-accent-emphasis{background-color:var(--color-accent-emphasis) !important}.color-bg-success{background-color:var(--color-success-subtle) !important}.color-bg-success-emphasis{background-color:var(--color-success-emphasis) !important}.color-bg-attention{background-color:var(--color-attention-subtle) !important}.color-bg-attention-emphasis{background-color:var(--color-attention-emphasis) !important}.color-bg-severe{background-color:var(--color-severe-subtle) !important}.color-bg-severe-emphasis{background-color:var(--color-severe-emphasis) !important}.color-bg-danger{background-color:var(--color-danger-subtle) !important}.color-bg-danger-emphasis{background-color:var(--color-danger-emphasis) !important}.color-bg-open{background-color:var(--color-open-subtle) !important}.color-bg-open-emphasis{background-color:var(--color-open-emphasis) !important}.color-bg-closed{background-color:var(--color-closed-subtle) !important}.color-bg-closed-emphasis{background-color:var(--color-closed-emphasis) !important}.color-bg-done{background-color:var(--color-done-subtle) !important}.color-bg-done-emphasis{background-color:var(--color-done-emphasis) !important}.color-bg-sponsors{background-color:var(--color-sponsors-subtle) !important}.color-bg-sponsors-emphasis{background-color:var(--color-sponsors-emphasis) !important}.color-bg-transparent{background-color:transparent !important}.color-border-default{border-color:var(--color-border-default) !important}.color-border-muted{border-color:var(--color-border-muted) !important}.color-border-subtle{border-color:var(--color-border-subtle) !important}.color-border-accent{border-color:var(--color-accent-muted) !important}.color-border-accent-emphasis{border-color:var(--color-accent-emphasis) !important}.color-border-success{border-color:var(--color-success-muted) !important}.color-border-success-emphasis{border-color:var(--color-success-emphasis) !important}.color-border-attention{border-color:var(--color-attention-muted) !important}.color-border-attention-emphasis{border-color:var(--color-attention-emphasis) !important}.color-border-severe{border-color:var(--color-severe-muted) !important}.color-border-severe-emphasis{border-color:var(--color-severe-emphasis) !important}.color-border-danger{border-color:var(--color-danger-muted) !important}.color-border-danger-emphasis{border-color:var(--color-danger-emphasis) !important}.color-border-open{border-color:var(--color-open-muted) !important}.color-border-open-emphasis{border-color:var(--color-open-emphasis) !important}.color-border-closed{border-color:var(--color-closed-muted) !important}.color-border-closed-emphasis{border-color:var(--color-closed-emphasis) !important}.color-border-done{border-color:var(--color-done-muted) !important}.color-border-done-emphasis{border-color:var(--color-done-emphasis) !important}.color-border-sponsors{border-color:var(--color-sponsors-muted) !important}.color-border-sponsors-emphasis{border-color:var(--color-sponsors-emphasis) !important}.color-fg-inherit{color:inherit !important}.details-overlay[open]>summary::before{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:block;cursor:default;content:" ";background:transparent}.details-overlay-dark[open]>summary::before{z-index:111;background:var(--color-primer-canvas-backdrop)}.details-reset>summary{list-style:none;transition:80ms cubic-bezier(0.33, 1, 0.68, 1);transition-property:color,background-color,box-shadow,border-color}.details-reset>summary:focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.details-reset>summary:focus:not(:focus-visible){outline:solid 1px transparent}.details-reset>summary:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.details-reset>summary.btn-primary:focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.details-reset>summary.btn-primary:focus:not(:focus-visible){outline:solid 1px transparent;box-shadow:none}.details-reset>summary.btn-primary:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.details-reset>summary::before{display:none}.details-reset>summary::-webkit-details-marker{display:none}.details-overlay>summary{transition:80ms cubic-bezier(0.33, 1, 0.68, 1);transition-property:color,background-color,box-shadow,border-color}.details-overlay>summary:focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.details-overlay>summary:focus:not(:focus-visible){outline:solid 1px transparent}.details-overlay>summary:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.details-overlay>summary.btn-primary:focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.details-overlay>summary.btn-primary:focus:not(:focus-visible){outline:solid 1px transparent;box-shadow:none}.details-overlay>summary.btn-primary:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis)}.flex-row{flex-direction:row !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column{flex-direction:column !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-justify-start{justify-content:flex-start !important}.flex-justify-end{justify-content:flex-end !important}.flex-justify-center{justify-content:center !important}.flex-justify-between{justify-content:space-between !important}.flex-justify-around{justify-content:space-around !important}.flex-items-start{align-items:flex-start !important}.flex-items-end{align-items:flex-end !important}.flex-items-center{align-items:center !important}.flex-items-baseline{align-items:baseline !important}.flex-items-stretch{align-items:stretch !important}.flex-content-start{align-content:flex-start !important}.flex-content-end{align-content:flex-end !important}.flex-content-center{align-content:center !important}.flex-content-between{align-content:space-between !important}.flex-content-around{align-content:space-around !important}.flex-content-stretch{align-content:stretch !important}.flex-1{flex:1 !important}.flex-auto{flex:auto !important}.flex-grow-0{flex-grow:0 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-self-auto{align-self:auto !important}.flex-self-start{align-self:flex-start !important}.flex-self-end{align-self:flex-end !important}.flex-self-center{align-self:center !important}.flex-self-baseline{align-self:baseline !important}.flex-self-stretch{align-self:stretch !important}.flex-order-1{order:1 !important}.flex-order-2{order:2 !important}.flex-order-none{order:inherit !important}@media(min-width: 544px){.flex-sm-row{flex-direction:row !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column{flex-direction:column !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-justify-start{justify-content:flex-start !important}.flex-sm-justify-end{justify-content:flex-end !important}.flex-sm-justify-center{justify-content:center !important}.flex-sm-justify-between{justify-content:space-between !important}.flex-sm-justify-around{justify-content:space-around !important}.flex-sm-items-start{align-items:flex-start !important}.flex-sm-items-end{align-items:flex-end !important}.flex-sm-items-center{align-items:center !important}.flex-sm-items-baseline{align-items:baseline !important}.flex-sm-items-stretch{align-items:stretch !important}.flex-sm-content-start{align-content:flex-start !important}.flex-sm-content-end{align-content:flex-end !important}.flex-sm-content-center{align-content:center !important}.flex-sm-content-between{align-content:space-between !important}.flex-sm-content-around{align-content:space-around !important}.flex-sm-content-stretch{align-content:stretch !important}.flex-sm-1{flex:1 !important}.flex-sm-auto{flex:auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-self-auto{align-self:auto !important}.flex-sm-self-start{align-self:flex-start !important}.flex-sm-self-end{align-self:flex-end !important}.flex-sm-self-center{align-self:center !important}.flex-sm-self-baseline{align-self:baseline !important}.flex-sm-self-stretch{align-self:stretch !important}.flex-sm-order-1{order:1 !important}.flex-sm-order-2{order:2 !important}.flex-sm-order-none{order:inherit !important}}@media(min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column{flex-direction:column !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-justify-start{justify-content:flex-start !important}.flex-md-justify-end{justify-content:flex-end !important}.flex-md-justify-center{justify-content:center !important}.flex-md-justify-between{justify-content:space-between !important}.flex-md-justify-around{justify-content:space-around !important}.flex-md-items-start{align-items:flex-start !important}.flex-md-items-end{align-items:flex-end !important}.flex-md-items-center{align-items:center !important}.flex-md-items-baseline{align-items:baseline !important}.flex-md-items-stretch{align-items:stretch !important}.flex-md-content-start{align-content:flex-start !important}.flex-md-content-end{align-content:flex-end !important}.flex-md-content-center{align-content:center !important}.flex-md-content-between{align-content:space-between !important}.flex-md-content-around{align-content:space-around !important}.flex-md-content-stretch{align-content:stretch !important}.flex-md-1{flex:1 !important}.flex-md-auto{flex:auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-self-auto{align-self:auto !important}.flex-md-self-start{align-self:flex-start !important}.flex-md-self-end{align-self:flex-end !important}.flex-md-self-center{align-self:center !important}.flex-md-self-baseline{align-self:baseline !important}.flex-md-self-stretch{align-self:stretch !important}.flex-md-order-1{order:1 !important}.flex-md-order-2{order:2 !important}.flex-md-order-none{order:inherit !important}}@media(min-width: 1012px){.flex-lg-row{flex-direction:row !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column{flex-direction:column !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-justify-start{justify-content:flex-start !important}.flex-lg-justify-end{justify-content:flex-end !important}.flex-lg-justify-center{justify-content:center !important}.flex-lg-justify-between{justify-content:space-between !important}.flex-lg-justify-around{justify-content:space-around !important}.flex-lg-items-start{align-items:flex-start !important}.flex-lg-items-end{align-items:flex-end !important}.flex-lg-items-center{align-items:center !important}.flex-lg-items-baseline{align-items:baseline !important}.flex-lg-items-stretch{align-items:stretch !important}.flex-lg-content-start{align-content:flex-start !important}.flex-lg-content-end{align-content:flex-end !important}.flex-lg-content-center{align-content:center !important}.flex-lg-content-between{align-content:space-between !important}.flex-lg-content-around{align-content:space-around !important}.flex-lg-content-stretch{align-content:stretch !important}.flex-lg-1{flex:1 !important}.flex-lg-auto{flex:auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-self-auto{align-self:auto !important}.flex-lg-self-start{align-self:flex-start !important}.flex-lg-self-end{align-self:flex-end !important}.flex-lg-self-center{align-self:center !important}.flex-lg-self-baseline{align-self:baseline !important}.flex-lg-self-stretch{align-self:stretch !important}.flex-lg-order-1{order:1 !important}.flex-lg-order-2{order:2 !important}.flex-lg-order-none{order:inherit !important}}@media(min-width: 1280px){.flex-xl-row{flex-direction:row !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column{flex-direction:column !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-justify-start{justify-content:flex-start !important}.flex-xl-justify-end{justify-content:flex-end !important}.flex-xl-justify-center{justify-content:center !important}.flex-xl-justify-between{justify-content:space-between !important}.flex-xl-justify-around{justify-content:space-around !important}.flex-xl-items-start{align-items:flex-start !important}.flex-xl-items-end{align-items:flex-end !important}.flex-xl-items-center{align-items:center !important}.flex-xl-items-baseline{align-items:baseline !important}.flex-xl-items-stretch{align-items:stretch !important}.flex-xl-content-start{align-content:flex-start !important}.flex-xl-content-end{align-content:flex-end !important}.flex-xl-content-center{align-content:center !important}.flex-xl-content-between{align-content:space-between !important}.flex-xl-content-around{align-content:space-around !important}.flex-xl-content-stretch{align-content:stretch !important}.flex-xl-1{flex:1 !important}.flex-xl-auto{flex:auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-self-auto{align-self:auto !important}.flex-xl-self-start{align-self:flex-start !important}.flex-xl-self-end{align-self:flex-end !important}.flex-xl-self-center{align-self:center !important}.flex-xl-self-baseline{align-self:baseline !important}.flex-xl-self-stretch{align-self:stretch !important}.flex-xl-order-1{order:1 !important}.flex-xl-order-2{order:2 !important}.flex-xl-order-none{order:inherit !important}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}@media(min-width: 544px){.position-sm-static{position:static !important}.position-sm-relative{position:relative !important}.position-sm-absolute{position:absolute !important}.position-sm-fixed{position:fixed !important}.position-sm-sticky{position:sticky !important}}@media(min-width: 768px){.position-md-static{position:static !important}.position-md-relative{position:relative !important}.position-md-absolute{position:absolute !important}.position-md-fixed{position:fixed !important}.position-md-sticky{position:sticky !important}}@media(min-width: 1012px){.position-lg-static{position:static !important}.position-lg-relative{position:relative !important}.position-lg-absolute{position:absolute !important}.position-lg-fixed{position:fixed !important}.position-lg-sticky{position:sticky !important}}@media(min-width: 1280px){.position-xl-static{position:static !important}.position-xl-relative{position:relative !important}.position-xl-absolute{position:absolute !important}.position-xl-fixed{position:fixed !important}.position-xl-sticky{position:sticky !important}}.top-0{top:0 !important}.right-0{right:0 !important}.bottom-0{bottom:0 !important}.left-0{left:0 !important}.top-auto{top:auto !important}.right-auto{right:auto !important}.bottom-auto{bottom:auto !important}.left-auto{left:auto !important}@media(min-width: 544px){.top-sm-0{top:0 !important}.right-sm-0{right:0 !important}.bottom-sm-0{bottom:0 !important}.left-sm-0{left:0 !important}.top-sm-auto{top:auto !important}.right-sm-auto{right:auto !important}.bottom-sm-auto{bottom:auto !important}.left-sm-auto{left:auto !important}}@media(min-width: 768px){.top-md-0{top:0 !important}.right-md-0{right:0 !important}.bottom-md-0{bottom:0 !important}.left-md-0{left:0 !important}.top-md-auto{top:auto !important}.right-md-auto{right:auto !important}.bottom-md-auto{bottom:auto !important}.left-md-auto{left:auto !important}}@media(min-width: 1012px){.top-lg-0{top:0 !important}.right-lg-0{right:0 !important}.bottom-lg-0{bottom:0 !important}.left-lg-0{left:0 !important}.top-lg-auto{top:auto !important}.right-lg-auto{right:auto !important}.bottom-lg-auto{bottom:auto !important}.left-lg-auto{left:auto !important}}@media(min-width: 1280px){.top-xl-0{top:0 !important}.right-xl-0{right:0 !important}.bottom-xl-0{bottom:0 !important}.left-xl-0{left:0 !important}.top-xl-auto{top:auto !important}.right-xl-auto{right:auto !important}.bottom-xl-auto{bottom:auto !important}.left-xl-auto{left:auto !important}}.v-align-middle{vertical-align:middle !important}.v-align-top{vertical-align:top !important}.v-align-bottom{vertical-align:bottom !important}.v-align-text-top{vertical-align:text-top !important}.v-align-text-bottom{vertical-align:text-bottom !important}.v-align-baseline{vertical-align:baseline !important}.overflow-visible{overflow:visible !important}.overflow-x-visible{overflow-x:visible !important}.overflow-y-visible{overflow-y:visible !important}.overflow-hidden{overflow:hidden !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-auto{overflow:auto !important}.overflow-x-auto{overflow-x:auto !important}.overflow-y-auto{overflow-y:auto !important}.overflow-scroll{overflow:scroll !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-scroll{overflow-y:scroll !important}@media(min-width: 544px){.overflow-sm-visible{overflow:visible !important}.overflow-sm-x-visible{overflow-x:visible !important}.overflow-sm-y-visible{overflow-y:visible !important}.overflow-sm-hidden{overflow:hidden !important}.overflow-sm-x-hidden{overflow-x:hidden !important}.overflow-sm-y-hidden{overflow-y:hidden !important}.overflow-sm-auto{overflow:auto !important}.overflow-sm-x-auto{overflow-x:auto !important}.overflow-sm-y-auto{overflow-y:auto !important}.overflow-sm-scroll{overflow:scroll !important}.overflow-sm-x-scroll{overflow-x:scroll !important}.overflow-sm-y-scroll{overflow-y:scroll !important}}@media(min-width: 768px){.overflow-md-visible{overflow:visible !important}.overflow-md-x-visible{overflow-x:visible !important}.overflow-md-y-visible{overflow-y:visible !important}.overflow-md-hidden{overflow:hidden !important}.overflow-md-x-hidden{overflow-x:hidden !important}.overflow-md-y-hidden{overflow-y:hidden !important}.overflow-md-auto{overflow:auto !important}.overflow-md-x-auto{overflow-x:auto !important}.overflow-md-y-auto{overflow-y:auto !important}.overflow-md-scroll{overflow:scroll !important}.overflow-md-x-scroll{overflow-x:scroll !important}.overflow-md-y-scroll{overflow-y:scroll !important}}@media(min-width: 1012px){.overflow-lg-visible{overflow:visible !important}.overflow-lg-x-visible{overflow-x:visible !important}.overflow-lg-y-visible{overflow-y:visible !important}.overflow-lg-hidden{overflow:hidden !important}.overflow-lg-x-hidden{overflow-x:hidden !important}.overflow-lg-y-hidden{overflow-y:hidden !important}.overflow-lg-auto{overflow:auto !important}.overflow-lg-x-auto{overflow-x:auto !important}.overflow-lg-y-auto{overflow-y:auto !important}.overflow-lg-scroll{overflow:scroll !important}.overflow-lg-x-scroll{overflow-x:scroll !important}.overflow-lg-y-scroll{overflow-y:scroll !important}}@media(min-width: 1280px){.overflow-xl-visible{overflow:visible !important}.overflow-xl-x-visible{overflow-x:visible !important}.overflow-xl-y-visible{overflow-y:visible !important}.overflow-xl-hidden{overflow:hidden !important}.overflow-xl-x-hidden{overflow-x:hidden !important}.overflow-xl-y-hidden{overflow-y:hidden !important}.overflow-xl-auto{overflow:auto !important}.overflow-xl-x-auto{overflow-x:auto !important}.overflow-xl-y-auto{overflow-y:auto !important}.overflow-xl-scroll{overflow:scroll !important}.overflow-xl-x-scroll{overflow-x:scroll !important}.overflow-xl-y-scroll{overflow-y:scroll !important}}.clearfix::before{display:table;content:""}.clearfix::after{display:table;clear:both;content:""}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media(min-width: 544px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media(min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media(min-width: 1012px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media(min-width: 1280px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.width-fit{max-width:100% !important}.width-full{width:100% !important}.height-fit{max-height:100% !important}.height-full{height:100% !important}.min-width-0{min-width:0 !important}.width-auto{width:auto !important}.direction-rtl{direction:rtl !important}.direction-ltr{direction:ltr !important}@media(min-width: 544px){.width-sm-auto{width:auto !important}.direction-sm-rtl{direction:rtl !important}.direction-sm-ltr{direction:ltr !important}}@media(min-width: 768px){.width-md-auto{width:auto !important}.direction-md-rtl{direction:rtl !important}.direction-md-ltr{direction:ltr !important}}@media(min-width: 1012px){.width-lg-auto{width:auto !important}.direction-lg-rtl{direction:rtl !important}.direction-lg-ltr{direction:ltr !important}}@media(min-width: 1280px){.width-xl-auto{width:auto !important}.direction-xl-rtl{direction:rtl !important}.direction-xl-ltr{direction:ltr !important}}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mb-0{margin-bottom:0 !important}.mr-0{margin-right:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:var(--base-size-4, 4px) !important}.mt-1{margin-top:var(--base-size-4, 4px) !important}.mb-1{margin-bottom:var(--base-size-4, 4px) !important}.mr-1{margin-right:var(--base-size-4, 4px) !important}.ml-1{margin-left:var(--base-size-4, 4px) !important}.mt-n1{margin-top:calc(-1*var(--base-size-4, 4px)) !important}.mb-n1{margin-bottom:calc(-1*var(--base-size-4, 4px)) !important}.mr-n1{margin-right:calc(-1*var(--base-size-4, 4px)) !important}.ml-n1{margin-left:calc(-1*var(--base-size-4, 4px)) !important}.mx-1{margin-right:var(--base-size-4, 4px) !important;margin-left:var(--base-size-4, 4px) !important}.my-1{margin-top:var(--base-size-4, 4px) !important;margin-bottom:var(--base-size-4, 4px) !important}.m-2{margin:var(--base-size-8, 8px) !important}.mt-2{margin-top:var(--base-size-8, 8px) !important}.mb-2{margin-bottom:var(--base-size-8, 8px) !important}.mr-2{margin-right:var(--base-size-8, 8px) !important}.ml-2{margin-left:var(--base-size-8, 8px) !important}.mt-n2{margin-top:calc(-1*var(--base-size-8, 8px)) !important}.mb-n2{margin-bottom:calc(-1*var(--base-size-8, 8px)) !important}.mr-n2{margin-right:calc(-1*var(--base-size-8, 8px)) !important}.ml-n2{margin-left:calc(-1*var(--base-size-8, 8px)) !important}.mx-2{margin-right:var(--base-size-8, 8px) !important;margin-left:var(--base-size-8, 8px) !important}.my-2{margin-top:var(--base-size-8, 8px) !important;margin-bottom:var(--base-size-8, 8px) !important}.m-3{margin:var(--base-size-16, 16px) !important}.mt-3{margin-top:var(--base-size-16, 16px) !important}.mb-3{margin-bottom:var(--base-size-16, 16px) !important}.mr-3{margin-right:var(--base-size-16, 16px) !important}.ml-3{margin-left:var(--base-size-16, 16px) !important}.mt-n3{margin-top:calc(-1*var(--base-size-16, 16px)) !important}.mb-n3{margin-bottom:calc(-1*var(--base-size-16, 16px)) !important}.mr-n3{margin-right:calc(-1*var(--base-size-16, 16px)) !important}.ml-n3{margin-left:calc(-1*var(--base-size-16, 16px)) !important}.mx-3{margin-right:var(--base-size-16, 16px) !important;margin-left:var(--base-size-16, 16px) !important}.my-3{margin-top:var(--base-size-16, 16px) !important;margin-bottom:var(--base-size-16, 16px) !important}.m-4{margin:var(--base-size-24, 24px) !important}.mt-4{margin-top:var(--base-size-24, 24px) !important}.mb-4{margin-bottom:var(--base-size-24, 24px) !important}.mr-4{margin-right:var(--base-size-24, 24px) !important}.ml-4{margin-left:var(--base-size-24, 24px) !important}.mt-n4{margin-top:calc(-1*var(--base-size-24, 24px)) !important}.mb-n4{margin-bottom:calc(-1*var(--base-size-24, 24px)) !important}.mr-n4{margin-right:calc(-1*var(--base-size-24, 24px)) !important}.ml-n4{margin-left:calc(-1*var(--base-size-24, 24px)) !important}.mx-4{margin-right:var(--base-size-24, 24px) !important;margin-left:var(--base-size-24, 24px) !important}.my-4{margin-top:var(--base-size-24, 24px) !important;margin-bottom:var(--base-size-24, 24px) !important}.m-5{margin:var(--base-size-32, 32px) !important}.mt-5{margin-top:var(--base-size-32, 32px) !important}.mb-5{margin-bottom:var(--base-size-32, 32px) !important}.mr-5{margin-right:var(--base-size-32, 32px) !important}.ml-5{margin-left:var(--base-size-32, 32px) !important}.mt-n5{margin-top:calc(-1*var(--base-size-32, 32px)) !important}.mb-n5{margin-bottom:calc(-1*var(--base-size-32, 32px)) !important}.mr-n5{margin-right:calc(-1*var(--base-size-32, 32px)) !important}.ml-n5{margin-left:calc(-1*var(--base-size-32, 32px)) !important}.mx-5{margin-right:var(--base-size-32, 32px) !important;margin-left:var(--base-size-32, 32px) !important}.my-5{margin-top:var(--base-size-32, 32px) !important;margin-bottom:var(--base-size-32, 32px) !important}.m-6{margin:var(--base-size-40, 40px) !important}.mt-6{margin-top:var(--base-size-40, 40px) !important}.mb-6{margin-bottom:var(--base-size-40, 40px) !important}.mr-6{margin-right:var(--base-size-40, 40px) !important}.ml-6{margin-left:var(--base-size-40, 40px) !important}.mt-n6{margin-top:calc(-1*var(--base-size-40, 40px)) !important}.mb-n6{margin-bottom:calc(-1*var(--base-size-40, 40px)) !important}.mr-n6{margin-right:calc(-1*var(--base-size-40, 40px)) !important}.ml-n6{margin-left:calc(-1*var(--base-size-40, 40px)) !important}.mx-6{margin-right:var(--base-size-40, 40px) !important;margin-left:var(--base-size-40, 40px) !important}.my-6{margin-top:var(--base-size-40, 40px) !important;margin-bottom:var(--base-size-40, 40px) !important}.mt-7{margin-top:var(--base-size-48, 48px) !important}.mb-7{margin-bottom:var(--base-size-48, 48px) !important}.mt-n7{margin-top:calc(-1*var(--base-size-48, 48px)) !important}.mb-n7{margin-bottom:calc(-1*var(--base-size-48, 48px)) !important}.my-7{margin-top:var(--base-size-48, 48px) !important;margin-bottom:var(--base-size-48, 48px) !important}.mt-8{margin-top:var(--base-size-64, 64px) !important}.mb-8{margin-bottom:var(--base-size-64, 64px) !important}.mt-n8{margin-top:calc(-1*var(--base-size-64, 64px)) !important}.mb-n8{margin-bottom:calc(-1*var(--base-size-64, 64px)) !important}.my-8{margin-top:var(--base-size-64, 64px) !important;margin-bottom:var(--base-size-64, 64px) !important}.mt-9{margin-top:var(--base-size-80, 80px) !important}.mb-9{margin-bottom:var(--base-size-80, 80px) !important}.mt-n9{margin-top:calc(-1*var(--base-size-80, 80px)) !important}.mb-n9{margin-bottom:calc(-1*var(--base-size-80, 80px)) !important}.my-9{margin-top:var(--base-size-80, 80px) !important;margin-bottom:var(--base-size-80, 80px) !important}.mt-10{margin-top:var(--base-size-96, 96px) !important}.mb-10{margin-bottom:var(--base-size-96, 96px) !important}.mt-n10{margin-top:calc(-1*var(--base-size-96, 96px)) !important}.mb-n10{margin-bottom:calc(-1*var(--base-size-96, 96px)) !important}.my-10{margin-top:var(--base-size-96, 96px) !important;margin-bottom:var(--base-size-96, 96px) !important}.mt-11{margin-top:var(--base-size-112, 112px) !important}.mb-11{margin-bottom:var(--base-size-112, 112px) !important}.mt-n11{margin-top:calc(-1*var(--base-size-112, 112px)) !important}.mb-n11{margin-bottom:calc(-1*var(--base-size-112, 112px)) !important}.my-11{margin-top:var(--base-size-112, 112px) !important;margin-bottom:var(--base-size-112, 112px) !important}.mt-12{margin-top:var(--base-size-128, 128px) !important}.mb-12{margin-bottom:var(--base-size-128, 128px) !important}.mt-n12{margin-top:calc(-1*var(--base-size-128, 128px)) !important}.mb-n12{margin-bottom:calc(-1*var(--base-size-128, 128px)) !important}.my-12{margin-top:var(--base-size-128, 128px) !important;margin-bottom:var(--base-size-128, 128px) !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}@media(min-width: 544px){.m-sm-0{margin:0 !important}.mt-sm-0{margin-top:0 !important}.mb-sm-0{margin-bottom:0 !important}.mr-sm-0{margin-right:0 !important}.ml-sm-0{margin-left:0 !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.m-sm-1{margin:var(--base-size-4, 4px) !important}.mt-sm-1{margin-top:var(--base-size-4, 4px) !important}.mb-sm-1{margin-bottom:var(--base-size-4, 4px) !important}.mr-sm-1{margin-right:var(--base-size-4, 4px) !important}.ml-sm-1{margin-left:var(--base-size-4, 4px) !important}.mt-sm-n1{margin-top:calc(-1*var(--base-size-4, 4px)) !important}.mb-sm-n1{margin-bottom:calc(-1*var(--base-size-4, 4px)) !important}.mr-sm-n1{margin-right:calc(-1*var(--base-size-4, 4px)) !important}.ml-sm-n1{margin-left:calc(-1*var(--base-size-4, 4px)) !important}.mx-sm-1{margin-right:var(--base-size-4, 4px) !important;margin-left:var(--base-size-4, 4px) !important}.my-sm-1{margin-top:var(--base-size-4, 4px) !important;margin-bottom:var(--base-size-4, 4px) !important}.m-sm-2{margin:var(--base-size-8, 8px) !important}.mt-sm-2{margin-top:var(--base-size-8, 8px) !important}.mb-sm-2{margin-bottom:var(--base-size-8, 8px) !important}.mr-sm-2{margin-right:var(--base-size-8, 8px) !important}.ml-sm-2{margin-left:var(--base-size-8, 8px) !important}.mt-sm-n2{margin-top:calc(-1*var(--base-size-8, 8px)) !important}.mb-sm-n2{margin-bottom:calc(-1*var(--base-size-8, 8px)) !important}.mr-sm-n2{margin-right:calc(-1*var(--base-size-8, 8px)) !important}.ml-sm-n2{margin-left:calc(-1*var(--base-size-8, 8px)) !important}.mx-sm-2{margin-right:var(--base-size-8, 8px) !important;margin-left:var(--base-size-8, 8px) !important}.my-sm-2{margin-top:var(--base-size-8, 8px) !important;margin-bottom:var(--base-size-8, 8px) !important}.m-sm-3{margin:var(--base-size-16, 16px) !important}.mt-sm-3{margin-top:var(--base-size-16, 16px) !important}.mb-sm-3{margin-bottom:var(--base-size-16, 16px) !important}.mr-sm-3{margin-right:var(--base-size-16, 16px) !important}.ml-sm-3{margin-left:var(--base-size-16, 16px) !important}.mt-sm-n3{margin-top:calc(-1*var(--base-size-16, 16px)) !important}.mb-sm-n3{margin-bottom:calc(-1*var(--base-size-16, 16px)) !important}.mr-sm-n3{margin-right:calc(-1*var(--base-size-16, 16px)) !important}.ml-sm-n3{margin-left:calc(-1*var(--base-size-16, 16px)) !important}.mx-sm-3{margin-right:var(--base-size-16, 16px) !important;margin-left:var(--base-size-16, 16px) !important}.my-sm-3{margin-top:var(--base-size-16, 16px) !important;margin-bottom:var(--base-size-16, 16px) !important}.m-sm-4{margin:var(--base-size-24, 24px) !important}.mt-sm-4{margin-top:var(--base-size-24, 24px) !important}.mb-sm-4{margin-bottom:var(--base-size-24, 24px) !important}.mr-sm-4{margin-right:var(--base-size-24, 24px) !important}.ml-sm-4{margin-left:var(--base-size-24, 24px) !important}.mt-sm-n4{margin-top:calc(-1*var(--base-size-24, 24px)) !important}.mb-sm-n4{margin-bottom:calc(-1*var(--base-size-24, 24px)) !important}.mr-sm-n4{margin-right:calc(-1*var(--base-size-24, 24px)) !important}.ml-sm-n4{margin-left:calc(-1*var(--base-size-24, 24px)) !important}.mx-sm-4{margin-right:var(--base-size-24, 24px) !important;margin-left:var(--base-size-24, 24px) !important}.my-sm-4{margin-top:var(--base-size-24, 24px) !important;margin-bottom:var(--base-size-24, 24px) !important}.m-sm-5{margin:var(--base-size-32, 32px) !important}.mt-sm-5{margin-top:var(--base-size-32, 32px) !important}.mb-sm-5{margin-bottom:var(--base-size-32, 32px) !important}.mr-sm-5{margin-right:var(--base-size-32, 32px) !important}.ml-sm-5{margin-left:var(--base-size-32, 32px) !important}.mt-sm-n5{margin-top:calc(-1*var(--base-size-32, 32px)) !important}.mb-sm-n5{margin-bottom:calc(-1*var(--base-size-32, 32px)) !important}.mr-sm-n5{margin-right:calc(-1*var(--base-size-32, 32px)) !important}.ml-sm-n5{margin-left:calc(-1*var(--base-size-32, 32px)) !important}.mx-sm-5{margin-right:var(--base-size-32, 32px) !important;margin-left:var(--base-size-32, 32px) !important}.my-sm-5{margin-top:var(--base-size-32, 32px) !important;margin-bottom:var(--base-size-32, 32px) !important}.m-sm-6{margin:var(--base-size-40, 40px) !important}.mt-sm-6{margin-top:var(--base-size-40, 40px) !important}.mb-sm-6{margin-bottom:var(--base-size-40, 40px) !important}.mr-sm-6{margin-right:var(--base-size-40, 40px) !important}.ml-sm-6{margin-left:var(--base-size-40, 40px) !important}.mt-sm-n6{margin-top:calc(-1*var(--base-size-40, 40px)) !important}.mb-sm-n6{margin-bottom:calc(-1*var(--base-size-40, 40px)) !important}.mr-sm-n6{margin-right:calc(-1*var(--base-size-40, 40px)) !important}.ml-sm-n6{margin-left:calc(-1*var(--base-size-40, 40px)) !important}.mx-sm-6{margin-right:var(--base-size-40, 40px) !important;margin-left:var(--base-size-40, 40px) !important}.my-sm-6{margin-top:var(--base-size-40, 40px) !important;margin-bottom:var(--base-size-40, 40px) !important}.mt-sm-7{margin-top:var(--base-size-48, 48px) !important}.mb-sm-7{margin-bottom:var(--base-size-48, 48px) !important}.mt-sm-n7{margin-top:calc(-1*var(--base-size-48, 48px)) !important}.mb-sm-n7{margin-bottom:calc(-1*var(--base-size-48, 48px)) !important}.my-sm-7{margin-top:var(--base-size-48, 48px) !important;margin-bottom:var(--base-size-48, 48px) !important}.mt-sm-8{margin-top:var(--base-size-64, 64px) !important}.mb-sm-8{margin-bottom:var(--base-size-64, 64px) !important}.mt-sm-n8{margin-top:calc(-1*var(--base-size-64, 64px)) !important}.mb-sm-n8{margin-bottom:calc(-1*var(--base-size-64, 64px)) !important}.my-sm-8{margin-top:var(--base-size-64, 64px) !important;margin-bottom:var(--base-size-64, 64px) !important}.mt-sm-9{margin-top:var(--base-size-80, 80px) !important}.mb-sm-9{margin-bottom:var(--base-size-80, 80px) !important}.mt-sm-n9{margin-top:calc(-1*var(--base-size-80, 80px)) !important}.mb-sm-n9{margin-bottom:calc(-1*var(--base-size-80, 80px)) !important}.my-sm-9{margin-top:var(--base-size-80, 80px) !important;margin-bottom:var(--base-size-80, 80px) !important}.mt-sm-10{margin-top:var(--base-size-96, 96px) !important}.mb-sm-10{margin-bottom:var(--base-size-96, 96px) !important}.mt-sm-n10{margin-top:calc(-1*var(--base-size-96, 96px)) !important}.mb-sm-n10{margin-bottom:calc(-1*var(--base-size-96, 96px)) !important}.my-sm-10{margin-top:var(--base-size-96, 96px) !important;margin-bottom:var(--base-size-96, 96px) !important}.mt-sm-11{margin-top:var(--base-size-112, 112px) !important}.mb-sm-11{margin-bottom:var(--base-size-112, 112px) !important}.mt-sm-n11{margin-top:calc(-1*var(--base-size-112, 112px)) !important}.mb-sm-n11{margin-bottom:calc(-1*var(--base-size-112, 112px)) !important}.my-sm-11{margin-top:var(--base-size-112, 112px) !important;margin-bottom:var(--base-size-112, 112px) !important}.mt-sm-12{margin-top:var(--base-size-128, 128px) !important}.mb-sm-12{margin-bottom:var(--base-size-128, 128px) !important}.mt-sm-n12{margin-top:calc(-1*var(--base-size-128, 128px)) !important}.mb-sm-n12{margin-bottom:calc(-1*var(--base-size-128, 128px)) !important}.my-sm-12{margin-top:var(--base-size-128, 128px) !important;margin-bottom:var(--base-size-128, 128px) !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}}@media(min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0{margin-top:0 !important}.mb-md-0{margin-bottom:0 !important}.mr-md-0{margin-right:0 !important}.ml-md-0{margin-left:0 !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.m-md-1{margin:var(--base-size-4, 4px) !important}.mt-md-1{margin-top:var(--base-size-4, 4px) !important}.mb-md-1{margin-bottom:var(--base-size-4, 4px) !important}.mr-md-1{margin-right:var(--base-size-4, 4px) !important}.ml-md-1{margin-left:var(--base-size-4, 4px) !important}.mt-md-n1{margin-top:calc(-1*var(--base-size-4, 4px)) !important}.mb-md-n1{margin-bottom:calc(-1*var(--base-size-4, 4px)) !important}.mr-md-n1{margin-right:calc(-1*var(--base-size-4, 4px)) !important}.ml-md-n1{margin-left:calc(-1*var(--base-size-4, 4px)) !important}.mx-md-1{margin-right:var(--base-size-4, 4px) !important;margin-left:var(--base-size-4, 4px) !important}.my-md-1{margin-top:var(--base-size-4, 4px) !important;margin-bottom:var(--base-size-4, 4px) !important}.m-md-2{margin:var(--base-size-8, 8px) !important}.mt-md-2{margin-top:var(--base-size-8, 8px) !important}.mb-md-2{margin-bottom:var(--base-size-8, 8px) !important}.mr-md-2{margin-right:var(--base-size-8, 8px) !important}.ml-md-2{margin-left:var(--base-size-8, 8px) !important}.mt-md-n2{margin-top:calc(-1*var(--base-size-8, 8px)) !important}.mb-md-n2{margin-bottom:calc(-1*var(--base-size-8, 8px)) !important}.mr-md-n2{margin-right:calc(-1*var(--base-size-8, 8px)) !important}.ml-md-n2{margin-left:calc(-1*var(--base-size-8, 8px)) !important}.mx-md-2{margin-right:var(--base-size-8, 8px) !important;margin-left:var(--base-size-8, 8px) !important}.my-md-2{margin-top:var(--base-size-8, 8px) !important;margin-bottom:var(--base-size-8, 8px) !important}.m-md-3{margin:var(--base-size-16, 16px) !important}.mt-md-3{margin-top:var(--base-size-16, 16px) !important}.mb-md-3{margin-bottom:var(--base-size-16, 16px) !important}.mr-md-3{margin-right:var(--base-size-16, 16px) !important}.ml-md-3{margin-left:var(--base-size-16, 16px) !important}.mt-md-n3{margin-top:calc(-1*var(--base-size-16, 16px)) !important}.mb-md-n3{margin-bottom:calc(-1*var(--base-size-16, 16px)) !important}.mr-md-n3{margin-right:calc(-1*var(--base-size-16, 16px)) !important}.ml-md-n3{margin-left:calc(-1*var(--base-size-16, 16px)) !important}.mx-md-3{margin-right:var(--base-size-16, 16px) !important;margin-left:var(--base-size-16, 16px) !important}.my-md-3{margin-top:var(--base-size-16, 16px) !important;margin-bottom:var(--base-size-16, 16px) !important}.m-md-4{margin:var(--base-size-24, 24px) !important}.mt-md-4{margin-top:var(--base-size-24, 24px) !important}.mb-md-4{margin-bottom:var(--base-size-24, 24px) !important}.mr-md-4{margin-right:var(--base-size-24, 24px) !important}.ml-md-4{margin-left:var(--base-size-24, 24px) !important}.mt-md-n4{margin-top:calc(-1*var(--base-size-24, 24px)) !important}.mb-md-n4{margin-bottom:calc(-1*var(--base-size-24, 24px)) !important}.mr-md-n4{margin-right:calc(-1*var(--base-size-24, 24px)) !important}.ml-md-n4{margin-left:calc(-1*var(--base-size-24, 24px)) !important}.mx-md-4{margin-right:var(--base-size-24, 24px) !important;margin-left:var(--base-size-24, 24px) !important}.my-md-4{margin-top:var(--base-size-24, 24px) !important;margin-bottom:var(--base-size-24, 24px) !important}.m-md-5{margin:var(--base-size-32, 32px) !important}.mt-md-5{margin-top:var(--base-size-32, 32px) !important}.mb-md-5{margin-bottom:var(--base-size-32, 32px) !important}.mr-md-5{margin-right:var(--base-size-32, 32px) !important}.ml-md-5{margin-left:var(--base-size-32, 32px) !important}.mt-md-n5{margin-top:calc(-1*var(--base-size-32, 32px)) !important}.mb-md-n5{margin-bottom:calc(-1*var(--base-size-32, 32px)) !important}.mr-md-n5{margin-right:calc(-1*var(--base-size-32, 32px)) !important}.ml-md-n5{margin-left:calc(-1*var(--base-size-32, 32px)) !important}.mx-md-5{margin-right:var(--base-size-32, 32px) !important;margin-left:var(--base-size-32, 32px) !important}.my-md-5{margin-top:var(--base-size-32, 32px) !important;margin-bottom:var(--base-size-32, 32px) !important}.m-md-6{margin:var(--base-size-40, 40px) !important}.mt-md-6{margin-top:var(--base-size-40, 40px) !important}.mb-md-6{margin-bottom:var(--base-size-40, 40px) !important}.mr-md-6{margin-right:var(--base-size-40, 40px) !important}.ml-md-6{margin-left:var(--base-size-40, 40px) !important}.mt-md-n6{margin-top:calc(-1*var(--base-size-40, 40px)) !important}.mb-md-n6{margin-bottom:calc(-1*var(--base-size-40, 40px)) !important}.mr-md-n6{margin-right:calc(-1*var(--base-size-40, 40px)) !important}.ml-md-n6{margin-left:calc(-1*var(--base-size-40, 40px)) !important}.mx-md-6{margin-right:var(--base-size-40, 40px) !important;margin-left:var(--base-size-40, 40px) !important}.my-md-6{margin-top:var(--base-size-40, 40px) !important;margin-bottom:var(--base-size-40, 40px) !important}.mt-md-7{margin-top:var(--base-size-48, 48px) !important}.mb-md-7{margin-bottom:var(--base-size-48, 48px) !important}.mt-md-n7{margin-top:calc(-1*var(--base-size-48, 48px)) !important}.mb-md-n7{margin-bottom:calc(-1*var(--base-size-48, 48px)) !important}.my-md-7{margin-top:var(--base-size-48, 48px) !important;margin-bottom:var(--base-size-48, 48px) !important}.mt-md-8{margin-top:var(--base-size-64, 64px) !important}.mb-md-8{margin-bottom:var(--base-size-64, 64px) !important}.mt-md-n8{margin-top:calc(-1*var(--base-size-64, 64px)) !important}.mb-md-n8{margin-bottom:calc(-1*var(--base-size-64, 64px)) !important}.my-md-8{margin-top:var(--base-size-64, 64px) !important;margin-bottom:var(--base-size-64, 64px) !important}.mt-md-9{margin-top:var(--base-size-80, 80px) !important}.mb-md-9{margin-bottom:var(--base-size-80, 80px) !important}.mt-md-n9{margin-top:calc(-1*var(--base-size-80, 80px)) !important}.mb-md-n9{margin-bottom:calc(-1*var(--base-size-80, 80px)) !important}.my-md-9{margin-top:var(--base-size-80, 80px) !important;margin-bottom:var(--base-size-80, 80px) !important}.mt-md-10{margin-top:var(--base-size-96, 96px) !important}.mb-md-10{margin-bottom:var(--base-size-96, 96px) !important}.mt-md-n10{margin-top:calc(-1*var(--base-size-96, 96px)) !important}.mb-md-n10{margin-bottom:calc(-1*var(--base-size-96, 96px)) !important}.my-md-10{margin-top:var(--base-size-96, 96px) !important;margin-bottom:var(--base-size-96, 96px) !important}.mt-md-11{margin-top:var(--base-size-112, 112px) !important}.mb-md-11{margin-bottom:var(--base-size-112, 112px) !important}.mt-md-n11{margin-top:calc(-1*var(--base-size-112, 112px)) !important}.mb-md-n11{margin-bottom:calc(-1*var(--base-size-112, 112px)) !important}.my-md-11{margin-top:var(--base-size-112, 112px) !important;margin-bottom:var(--base-size-112, 112px) !important}.mt-md-12{margin-top:var(--base-size-128, 128px) !important}.mb-md-12{margin-bottom:var(--base-size-128, 128px) !important}.mt-md-n12{margin-top:calc(-1*var(--base-size-128, 128px)) !important}.mb-md-n12{margin-bottom:calc(-1*var(--base-size-128, 128px)) !important}.my-md-12{margin-top:var(--base-size-128, 128px) !important;margin-bottom:var(--base-size-128, 128px) !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}}@media(min-width: 1012px){.m-lg-0{margin:0 !important}.mt-lg-0{margin-top:0 !important}.mb-lg-0{margin-bottom:0 !important}.mr-lg-0{margin-right:0 !important}.ml-lg-0{margin-left:0 !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.m-lg-1{margin:var(--base-size-4, 4px) !important}.mt-lg-1{margin-top:var(--base-size-4, 4px) !important}.mb-lg-1{margin-bottom:var(--base-size-4, 4px) !important}.mr-lg-1{margin-right:var(--base-size-4, 4px) !important}.ml-lg-1{margin-left:var(--base-size-4, 4px) !important}.mt-lg-n1{margin-top:calc(-1*var(--base-size-4, 4px)) !important}.mb-lg-n1{margin-bottom:calc(-1*var(--base-size-4, 4px)) !important}.mr-lg-n1{margin-right:calc(-1*var(--base-size-4, 4px)) !important}.ml-lg-n1{margin-left:calc(-1*var(--base-size-4, 4px)) !important}.mx-lg-1{margin-right:var(--base-size-4, 4px) !important;margin-left:var(--base-size-4, 4px) !important}.my-lg-1{margin-top:var(--base-size-4, 4px) !important;margin-bottom:var(--base-size-4, 4px) !important}.m-lg-2{margin:var(--base-size-8, 8px) !important}.mt-lg-2{margin-top:var(--base-size-8, 8px) !important}.mb-lg-2{margin-bottom:var(--base-size-8, 8px) !important}.mr-lg-2{margin-right:var(--base-size-8, 8px) !important}.ml-lg-2{margin-left:var(--base-size-8, 8px) !important}.mt-lg-n2{margin-top:calc(-1*var(--base-size-8, 8px)) !important}.mb-lg-n2{margin-bottom:calc(-1*var(--base-size-8, 8px)) !important}.mr-lg-n2{margin-right:calc(-1*var(--base-size-8, 8px)) !important}.ml-lg-n2{margin-left:calc(-1*var(--base-size-8, 8px)) !important}.mx-lg-2{margin-right:var(--base-size-8, 8px) !important;margin-left:var(--base-size-8, 8px) !important}.my-lg-2{margin-top:var(--base-size-8, 8px) !important;margin-bottom:var(--base-size-8, 8px) !important}.m-lg-3{margin:var(--base-size-16, 16px) !important}.mt-lg-3{margin-top:var(--base-size-16, 16px) !important}.mb-lg-3{margin-bottom:var(--base-size-16, 16px) !important}.mr-lg-3{margin-right:var(--base-size-16, 16px) !important}.ml-lg-3{margin-left:var(--base-size-16, 16px) !important}.mt-lg-n3{margin-top:calc(-1*var(--base-size-16, 16px)) !important}.mb-lg-n3{margin-bottom:calc(-1*var(--base-size-16, 16px)) !important}.mr-lg-n3{margin-right:calc(-1*var(--base-size-16, 16px)) !important}.ml-lg-n3{margin-left:calc(-1*var(--base-size-16, 16px)) !important}.mx-lg-3{margin-right:var(--base-size-16, 16px) !important;margin-left:var(--base-size-16, 16px) !important}.my-lg-3{margin-top:var(--base-size-16, 16px) !important;margin-bottom:var(--base-size-16, 16px) !important}.m-lg-4{margin:var(--base-size-24, 24px) !important}.mt-lg-4{margin-top:var(--base-size-24, 24px) !important}.mb-lg-4{margin-bottom:var(--base-size-24, 24px) !important}.mr-lg-4{margin-right:var(--base-size-24, 24px) !important}.ml-lg-4{margin-left:var(--base-size-24, 24px) !important}.mt-lg-n4{margin-top:calc(-1*var(--base-size-24, 24px)) !important}.mb-lg-n4{margin-bottom:calc(-1*var(--base-size-24, 24px)) !important}.mr-lg-n4{margin-right:calc(-1*var(--base-size-24, 24px)) !important}.ml-lg-n4{margin-left:calc(-1*var(--base-size-24, 24px)) !important}.mx-lg-4{margin-right:var(--base-size-24, 24px) !important;margin-left:var(--base-size-24, 24px) !important}.my-lg-4{margin-top:var(--base-size-24, 24px) !important;margin-bottom:var(--base-size-24, 24px) !important}.m-lg-5{margin:var(--base-size-32, 32px) !important}.mt-lg-5{margin-top:var(--base-size-32, 32px) !important}.mb-lg-5{margin-bottom:var(--base-size-32, 32px) !important}.mr-lg-5{margin-right:var(--base-size-32, 32px) !important}.ml-lg-5{margin-left:var(--base-size-32, 32px) !important}.mt-lg-n5{margin-top:calc(-1*var(--base-size-32, 32px)) !important}.mb-lg-n5{margin-bottom:calc(-1*var(--base-size-32, 32px)) !important}.mr-lg-n5{margin-right:calc(-1*var(--base-size-32, 32px)) !important}.ml-lg-n5{margin-left:calc(-1*var(--base-size-32, 32px)) !important}.mx-lg-5{margin-right:var(--base-size-32, 32px) !important;margin-left:var(--base-size-32, 32px) !important}.my-lg-5{margin-top:var(--base-size-32, 32px) !important;margin-bottom:var(--base-size-32, 32px) !important}.m-lg-6{margin:var(--base-size-40, 40px) !important}.mt-lg-6{margin-top:var(--base-size-40, 40px) !important}.mb-lg-6{margin-bottom:var(--base-size-40, 40px) !important}.mr-lg-6{margin-right:var(--base-size-40, 40px) !important}.ml-lg-6{margin-left:var(--base-size-40, 40px) !important}.mt-lg-n6{margin-top:calc(-1*var(--base-size-40, 40px)) !important}.mb-lg-n6{margin-bottom:calc(-1*var(--base-size-40, 40px)) !important}.mr-lg-n6{margin-right:calc(-1*var(--base-size-40, 40px)) !important}.ml-lg-n6{margin-left:calc(-1*var(--base-size-40, 40px)) !important}.mx-lg-6{margin-right:var(--base-size-40, 40px) !important;margin-left:var(--base-size-40, 40px) !important}.my-lg-6{margin-top:var(--base-size-40, 40px) !important;margin-bottom:var(--base-size-40, 40px) !important}.mt-lg-7{margin-top:var(--base-size-48, 48px) !important}.mb-lg-7{margin-bottom:var(--base-size-48, 48px) !important}.mt-lg-n7{margin-top:calc(-1*var(--base-size-48, 48px)) !important}.mb-lg-n7{margin-bottom:calc(-1*var(--base-size-48, 48px)) !important}.my-lg-7{margin-top:var(--base-size-48, 48px) !important;margin-bottom:var(--base-size-48, 48px) !important}.mt-lg-8{margin-top:var(--base-size-64, 64px) !important}.mb-lg-8{margin-bottom:var(--base-size-64, 64px) !important}.mt-lg-n8{margin-top:calc(-1*var(--base-size-64, 64px)) !important}.mb-lg-n8{margin-bottom:calc(-1*var(--base-size-64, 64px)) !important}.my-lg-8{margin-top:var(--base-size-64, 64px) !important;margin-bottom:var(--base-size-64, 64px) !important}.mt-lg-9{margin-top:var(--base-size-80, 80px) !important}.mb-lg-9{margin-bottom:var(--base-size-80, 80px) !important}.mt-lg-n9{margin-top:calc(-1*var(--base-size-80, 80px)) !important}.mb-lg-n9{margin-bottom:calc(-1*var(--base-size-80, 80px)) !important}.my-lg-9{margin-top:var(--base-size-80, 80px) !important;margin-bottom:var(--base-size-80, 80px) !important}.mt-lg-10{margin-top:var(--base-size-96, 96px) !important}.mb-lg-10{margin-bottom:var(--base-size-96, 96px) !important}.mt-lg-n10{margin-top:calc(-1*var(--base-size-96, 96px)) !important}.mb-lg-n10{margin-bottom:calc(-1*var(--base-size-96, 96px)) !important}.my-lg-10{margin-top:var(--base-size-96, 96px) !important;margin-bottom:var(--base-size-96, 96px) !important}.mt-lg-11{margin-top:var(--base-size-112, 112px) !important}.mb-lg-11{margin-bottom:var(--base-size-112, 112px) !important}.mt-lg-n11{margin-top:calc(-1*var(--base-size-112, 112px)) !important}.mb-lg-n11{margin-bottom:calc(-1*var(--base-size-112, 112px)) !important}.my-lg-11{margin-top:var(--base-size-112, 112px) !important;margin-bottom:var(--base-size-112, 112px) !important}.mt-lg-12{margin-top:var(--base-size-128, 128px) !important}.mb-lg-12{margin-bottom:var(--base-size-128, 128px) !important}.mt-lg-n12{margin-top:calc(-1*var(--base-size-128, 128px)) !important}.mb-lg-n12{margin-bottom:calc(-1*var(--base-size-128, 128px)) !important}.my-lg-12{margin-top:var(--base-size-128, 128px) !important;margin-bottom:var(--base-size-128, 128px) !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}}@media(min-width: 1280px){.m-xl-0{margin:0 !important}.mt-xl-0{margin-top:0 !important}.mb-xl-0{margin-bottom:0 !important}.mr-xl-0{margin-right:0 !important}.ml-xl-0{margin-left:0 !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.m-xl-1{margin:var(--base-size-4, 4px) !important}.mt-xl-1{margin-top:var(--base-size-4, 4px) !important}.mb-xl-1{margin-bottom:var(--base-size-4, 4px) !important}.mr-xl-1{margin-right:var(--base-size-4, 4px) !important}.ml-xl-1{margin-left:var(--base-size-4, 4px) !important}.mt-xl-n1{margin-top:calc(-1*var(--base-size-4, 4px)) !important}.mb-xl-n1{margin-bottom:calc(-1*var(--base-size-4, 4px)) !important}.mr-xl-n1{margin-right:calc(-1*var(--base-size-4, 4px)) !important}.ml-xl-n1{margin-left:calc(-1*var(--base-size-4, 4px)) !important}.mx-xl-1{margin-right:var(--base-size-4, 4px) !important;margin-left:var(--base-size-4, 4px) !important}.my-xl-1{margin-top:var(--base-size-4, 4px) !important;margin-bottom:var(--base-size-4, 4px) !important}.m-xl-2{margin:var(--base-size-8, 8px) !important}.mt-xl-2{margin-top:var(--base-size-8, 8px) !important}.mb-xl-2{margin-bottom:var(--base-size-8, 8px) !important}.mr-xl-2{margin-right:var(--base-size-8, 8px) !important}.ml-xl-2{margin-left:var(--base-size-8, 8px) !important}.mt-xl-n2{margin-top:calc(-1*var(--base-size-8, 8px)) !important}.mb-xl-n2{margin-bottom:calc(-1*var(--base-size-8, 8px)) !important}.mr-xl-n2{margin-right:calc(-1*var(--base-size-8, 8px)) !important}.ml-xl-n2{margin-left:calc(-1*var(--base-size-8, 8px)) !important}.mx-xl-2{margin-right:var(--base-size-8, 8px) !important;margin-left:var(--base-size-8, 8px) !important}.my-xl-2{margin-top:var(--base-size-8, 8px) !important;margin-bottom:var(--base-size-8, 8px) !important}.m-xl-3{margin:var(--base-size-16, 16px) !important}.mt-xl-3{margin-top:var(--base-size-16, 16px) !important}.mb-xl-3{margin-bottom:var(--base-size-16, 16px) !important}.mr-xl-3{margin-right:var(--base-size-16, 16px) !important}.ml-xl-3{margin-left:var(--base-size-16, 16px) !important}.mt-xl-n3{margin-top:calc(-1*var(--base-size-16, 16px)) !important}.mb-xl-n3{margin-bottom:calc(-1*var(--base-size-16, 16px)) !important}.mr-xl-n3{margin-right:calc(-1*var(--base-size-16, 16px)) !important}.ml-xl-n3{margin-left:calc(-1*var(--base-size-16, 16px)) !important}.mx-xl-3{margin-right:var(--base-size-16, 16px) !important;margin-left:var(--base-size-16, 16px) !important}.my-xl-3{margin-top:var(--base-size-16, 16px) !important;margin-bottom:var(--base-size-16, 16px) !important}.m-xl-4{margin:var(--base-size-24, 24px) !important}.mt-xl-4{margin-top:var(--base-size-24, 24px) !important}.mb-xl-4{margin-bottom:var(--base-size-24, 24px) !important}.mr-xl-4{margin-right:var(--base-size-24, 24px) !important}.ml-xl-4{margin-left:var(--base-size-24, 24px) !important}.mt-xl-n4{margin-top:calc(-1*var(--base-size-24, 24px)) !important}.mb-xl-n4{margin-bottom:calc(-1*var(--base-size-24, 24px)) !important}.mr-xl-n4{margin-right:calc(-1*var(--base-size-24, 24px)) !important}.ml-xl-n4{margin-left:calc(-1*var(--base-size-24, 24px)) !important}.mx-xl-4{margin-right:var(--base-size-24, 24px) !important;margin-left:var(--base-size-24, 24px) !important}.my-xl-4{margin-top:var(--base-size-24, 24px) !important;margin-bottom:var(--base-size-24, 24px) !important}.m-xl-5{margin:var(--base-size-32, 32px) !important}.mt-xl-5{margin-top:var(--base-size-32, 32px) !important}.mb-xl-5{margin-bottom:var(--base-size-32, 32px) !important}.mr-xl-5{margin-right:var(--base-size-32, 32px) !important}.ml-xl-5{margin-left:var(--base-size-32, 32px) !important}.mt-xl-n5{margin-top:calc(-1*var(--base-size-32, 32px)) !important}.mb-xl-n5{margin-bottom:calc(-1*var(--base-size-32, 32px)) !important}.mr-xl-n5{margin-right:calc(-1*var(--base-size-32, 32px)) !important}.ml-xl-n5{margin-left:calc(-1*var(--base-size-32, 32px)) !important}.mx-xl-5{margin-right:var(--base-size-32, 32px) !important;margin-left:var(--base-size-32, 32px) !important}.my-xl-5{margin-top:var(--base-size-32, 32px) !important;margin-bottom:var(--base-size-32, 32px) !important}.m-xl-6{margin:var(--base-size-40, 40px) !important}.mt-xl-6{margin-top:var(--base-size-40, 40px) !important}.mb-xl-6{margin-bottom:var(--base-size-40, 40px) !important}.mr-xl-6{margin-right:var(--base-size-40, 40px) !important}.ml-xl-6{margin-left:var(--base-size-40, 40px) !important}.mt-xl-n6{margin-top:calc(-1*var(--base-size-40, 40px)) !important}.mb-xl-n6{margin-bottom:calc(-1*var(--base-size-40, 40px)) !important}.mr-xl-n6{margin-right:calc(-1*var(--base-size-40, 40px)) !important}.ml-xl-n6{margin-left:calc(-1*var(--base-size-40, 40px)) !important}.mx-xl-6{margin-right:var(--base-size-40, 40px) !important;margin-left:var(--base-size-40, 40px) !important}.my-xl-6{margin-top:var(--base-size-40, 40px) !important;margin-bottom:var(--base-size-40, 40px) !important}.mt-xl-7{margin-top:var(--base-size-48, 48px) !important}.mb-xl-7{margin-bottom:var(--base-size-48, 48px) !important}.mt-xl-n7{margin-top:calc(-1*var(--base-size-48, 48px)) !important}.mb-xl-n7{margin-bottom:calc(-1*var(--base-size-48, 48px)) !important}.my-xl-7{margin-top:var(--base-size-48, 48px) !important;margin-bottom:var(--base-size-48, 48px) !important}.mt-xl-8{margin-top:var(--base-size-64, 64px) !important}.mb-xl-8{margin-bottom:var(--base-size-64, 64px) !important}.mt-xl-n8{margin-top:calc(-1*var(--base-size-64, 64px)) !important}.mb-xl-n8{margin-bottom:calc(-1*var(--base-size-64, 64px)) !important}.my-xl-8{margin-top:var(--base-size-64, 64px) !important;margin-bottom:var(--base-size-64, 64px) !important}.mt-xl-9{margin-top:var(--base-size-80, 80px) !important}.mb-xl-9{margin-bottom:var(--base-size-80, 80px) !important}.mt-xl-n9{margin-top:calc(-1*var(--base-size-80, 80px)) !important}.mb-xl-n9{margin-bottom:calc(-1*var(--base-size-80, 80px)) !important}.my-xl-9{margin-top:var(--base-size-80, 80px) !important;margin-bottom:var(--base-size-80, 80px) !important}.mt-xl-10{margin-top:var(--base-size-96, 96px) !important}.mb-xl-10{margin-bottom:var(--base-size-96, 96px) !important}.mt-xl-n10{margin-top:calc(-1*var(--base-size-96, 96px)) !important}.mb-xl-n10{margin-bottom:calc(-1*var(--base-size-96, 96px)) !important}.my-xl-10{margin-top:var(--base-size-96, 96px) !important;margin-bottom:var(--base-size-96, 96px) !important}.mt-xl-11{margin-top:var(--base-size-112, 112px) !important}.mb-xl-11{margin-bottom:var(--base-size-112, 112px) !important}.mt-xl-n11{margin-top:calc(-1*var(--base-size-112, 112px)) !important}.mb-xl-n11{margin-bottom:calc(-1*var(--base-size-112, 112px)) !important}.my-xl-11{margin-top:var(--base-size-112, 112px) !important;margin-bottom:var(--base-size-112, 112px) !important}.mt-xl-12{margin-top:var(--base-size-128, 128px) !important}.mb-xl-12{margin-bottom:var(--base-size-128, 128px) !important}.mt-xl-n12{margin-top:calc(-1*var(--base-size-128, 128px)) !important}.mb-xl-n12{margin-bottom:calc(-1*var(--base-size-128, 128px)) !important}.my-xl-12{margin-top:var(--base-size-128, 128px) !important;margin-bottom:var(--base-size-128, 128px) !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-right:0 !important;padding-left:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:var(--base-size-4, 4px) !important}.pt-1{padding-top:var(--base-size-4, 4px) !important}.pr-1{padding-right:var(--base-size-4, 4px) !important}.pb-1{padding-bottom:var(--base-size-4, 4px) !important}.pl-1{padding-left:var(--base-size-4, 4px) !important}.px-1{padding-right:var(--base-size-4, 4px) !important;padding-left:var(--base-size-4, 4px) !important}.py-1{padding-top:var(--base-size-4, 4px) !important;padding-bottom:var(--base-size-4, 4px) !important}.p-2{padding:var(--base-size-8, 8px) !important}.pt-2{padding-top:var(--base-size-8, 8px) !important}.pr-2{padding-right:var(--base-size-8, 8px) !important}.pb-2{padding-bottom:var(--base-size-8, 8px) !important}.pl-2{padding-left:var(--base-size-8, 8px) !important}.px-2{padding-right:var(--base-size-8, 8px) !important;padding-left:var(--base-size-8, 8px) !important}.py-2{padding-top:var(--base-size-8, 8px) !important;padding-bottom:var(--base-size-8, 8px) !important}.p-3{padding:var(--base-size-16, 16px) !important}.pt-3{padding-top:var(--base-size-16, 16px) !important}.pr-3{padding-right:var(--base-size-16, 16px) !important}.pb-3{padding-bottom:var(--base-size-16, 16px) !important}.pl-3{padding-left:var(--base-size-16, 16px) !important}.px-3{padding-right:var(--base-size-16, 16px) !important;padding-left:var(--base-size-16, 16px) !important}.py-3{padding-top:var(--base-size-16, 16px) !important;padding-bottom:var(--base-size-16, 16px) !important}.p-4{padding:var(--base-size-24, 24px) !important}.pt-4{padding-top:var(--base-size-24, 24px) !important}.pr-4{padding-right:var(--base-size-24, 24px) !important}.pb-4{padding-bottom:var(--base-size-24, 24px) !important}.pl-4{padding-left:var(--base-size-24, 24px) !important}.px-4{padding-right:var(--base-size-24, 24px) !important;padding-left:var(--base-size-24, 24px) !important}.py-4{padding-top:var(--base-size-24, 24px) !important;padding-bottom:var(--base-size-24, 24px) !important}.p-5{padding:var(--base-size-32, 32px) !important}.pt-5{padding-top:var(--base-size-32, 32px) !important}.pr-5{padding-right:var(--base-size-32, 32px) !important}.pb-5{padding-bottom:var(--base-size-32, 32px) !important}.pl-5{padding-left:var(--base-size-32, 32px) !important}.px-5{padding-right:var(--base-size-32, 32px) !important;padding-left:var(--base-size-32, 32px) !important}.py-5{padding-top:var(--base-size-32, 32px) !important;padding-bottom:var(--base-size-32, 32px) !important}.p-6{padding:var(--base-size-40, 40px) !important}.pt-6{padding-top:var(--base-size-40, 40px) !important}.pr-6{padding-right:var(--base-size-40, 40px) !important}.pb-6{padding-bottom:var(--base-size-40, 40px) !important}.pl-6{padding-left:var(--base-size-40, 40px) !important}.px-6{padding-right:var(--base-size-40, 40px) !important;padding-left:var(--base-size-40, 40px) !important}.py-6{padding-top:var(--base-size-40, 40px) !important;padding-bottom:var(--base-size-40, 40px) !important}.pt-7{padding-top:var(--base-size-48, 48px) !important}.pr-7{padding-right:var(--base-size-48, 48px) !important}.pb-7{padding-bottom:var(--base-size-48, 48px) !important}.pl-7{padding-left:var(--base-size-48, 48px) !important}.py-7{padding-top:var(--base-size-48, 48px) !important;padding-bottom:var(--base-size-48, 48px) !important}.pt-8{padding-top:var(--base-size-64, 64px) !important}.pr-8{padding-right:var(--base-size-64, 64px) !important}.pb-8{padding-bottom:var(--base-size-64, 64px) !important}.pl-8{padding-left:var(--base-size-64, 64px) !important}.py-8{padding-top:var(--base-size-64, 64px) !important;padding-bottom:var(--base-size-64, 64px) !important}.pt-9{padding-top:var(--base-size-80, 80px) !important}.pr-9{padding-right:var(--base-size-80, 80px) !important}.pb-9{padding-bottom:var(--base-size-80, 80px) !important}.pl-9{padding-left:var(--base-size-80, 80px) !important}.py-9{padding-top:var(--base-size-80, 80px) !important;padding-bottom:var(--base-size-80, 80px) !important}.pt-10{padding-top:var(--base-size-96, 96px) !important}.pr-10{padding-right:var(--base-size-96, 96px) !important}.pb-10{padding-bottom:var(--base-size-96, 96px) !important}.pl-10{padding-left:var(--base-size-96, 96px) !important}.py-10{padding-top:var(--base-size-96, 96px) !important;padding-bottom:var(--base-size-96, 96px) !important}.pt-11{padding-top:var(--base-size-112, 112px) !important}.pr-11{padding-right:var(--base-size-112, 112px) !important}.pb-11{padding-bottom:var(--base-size-112, 112px) !important}.pl-11{padding-left:var(--base-size-112, 112px) !important}.py-11{padding-top:var(--base-size-112, 112px) !important;padding-bottom:var(--base-size-112, 112px) !important}.pt-12{padding-top:var(--base-size-128, 128px) !important}.pr-12{padding-right:var(--base-size-128, 128px) !important}.pb-12{padding-bottom:var(--base-size-128, 128px) !important}.pl-12{padding-left:var(--base-size-128, 128px) !important}.py-12{padding-top:var(--base-size-128, 128px) !important;padding-bottom:var(--base-size-128, 128px) !important}@media(min-width: 544px){.p-sm-0{padding:0 !important}.pt-sm-0{padding-top:0 !important}.pr-sm-0{padding-right:0 !important}.pb-sm-0{padding-bottom:0 !important}.pl-sm-0{padding-left:0 !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.p-sm-1{padding:var(--base-size-4, 4px) !important}.pt-sm-1{padding-top:var(--base-size-4, 4px) !important}.pr-sm-1{padding-right:var(--base-size-4, 4px) !important}.pb-sm-1{padding-bottom:var(--base-size-4, 4px) !important}.pl-sm-1{padding-left:var(--base-size-4, 4px) !important}.px-sm-1{padding-right:var(--base-size-4, 4px) !important;padding-left:var(--base-size-4, 4px) !important}.py-sm-1{padding-top:var(--base-size-4, 4px) !important;padding-bottom:var(--base-size-4, 4px) !important}.p-sm-2{padding:var(--base-size-8, 8px) !important}.pt-sm-2{padding-top:var(--base-size-8, 8px) !important}.pr-sm-2{padding-right:var(--base-size-8, 8px) !important}.pb-sm-2{padding-bottom:var(--base-size-8, 8px) !important}.pl-sm-2{padding-left:var(--base-size-8, 8px) !important}.px-sm-2{padding-right:var(--base-size-8, 8px) !important;padding-left:var(--base-size-8, 8px) !important}.py-sm-2{padding-top:var(--base-size-8, 8px) !important;padding-bottom:var(--base-size-8, 8px) !important}.p-sm-3{padding:var(--base-size-16, 16px) !important}.pt-sm-3{padding-top:var(--base-size-16, 16px) !important}.pr-sm-3{padding-right:var(--base-size-16, 16px) !important}.pb-sm-3{padding-bottom:var(--base-size-16, 16px) !important}.pl-sm-3{padding-left:var(--base-size-16, 16px) !important}.px-sm-3{padding-right:var(--base-size-16, 16px) !important;padding-left:var(--base-size-16, 16px) !important}.py-sm-3{padding-top:var(--base-size-16, 16px) !important;padding-bottom:var(--base-size-16, 16px) !important}.p-sm-4{padding:var(--base-size-24, 24px) !important}.pt-sm-4{padding-top:var(--base-size-24, 24px) !important}.pr-sm-4{padding-right:var(--base-size-24, 24px) !important}.pb-sm-4{padding-bottom:var(--base-size-24, 24px) !important}.pl-sm-4{padding-left:var(--base-size-24, 24px) !important}.px-sm-4{padding-right:var(--base-size-24, 24px) !important;padding-left:var(--base-size-24, 24px) !important}.py-sm-4{padding-top:var(--base-size-24, 24px) !important;padding-bottom:var(--base-size-24, 24px) !important}.p-sm-5{padding:var(--base-size-32, 32px) !important}.pt-sm-5{padding-top:var(--base-size-32, 32px) !important}.pr-sm-5{padding-right:var(--base-size-32, 32px) !important}.pb-sm-5{padding-bottom:var(--base-size-32, 32px) !important}.pl-sm-5{padding-left:var(--base-size-32, 32px) !important}.px-sm-5{padding-right:var(--base-size-32, 32px) !important;padding-left:var(--base-size-32, 32px) !important}.py-sm-5{padding-top:var(--base-size-32, 32px) !important;padding-bottom:var(--base-size-32, 32px) !important}.p-sm-6{padding:var(--base-size-40, 40px) !important}.pt-sm-6{padding-top:var(--base-size-40, 40px) !important}.pr-sm-6{padding-right:var(--base-size-40, 40px) !important}.pb-sm-6{padding-bottom:var(--base-size-40, 40px) !important}.pl-sm-6{padding-left:var(--base-size-40, 40px) !important}.px-sm-6{padding-right:var(--base-size-40, 40px) !important;padding-left:var(--base-size-40, 40px) !important}.py-sm-6{padding-top:var(--base-size-40, 40px) !important;padding-bottom:var(--base-size-40, 40px) !important}.pt-sm-7{padding-top:var(--base-size-48, 48px) !important}.pr-sm-7{padding-right:var(--base-size-48, 48px) !important}.pb-sm-7{padding-bottom:var(--base-size-48, 48px) !important}.pl-sm-7{padding-left:var(--base-size-48, 48px) !important}.py-sm-7{padding-top:var(--base-size-48, 48px) !important;padding-bottom:var(--base-size-48, 48px) !important}.pt-sm-8{padding-top:var(--base-size-64, 64px) !important}.pr-sm-8{padding-right:var(--base-size-64, 64px) !important}.pb-sm-8{padding-bottom:var(--base-size-64, 64px) !important}.pl-sm-8{padding-left:var(--base-size-64, 64px) !important}.py-sm-8{padding-top:var(--base-size-64, 64px) !important;padding-bottom:var(--base-size-64, 64px) !important}.pt-sm-9{padding-top:var(--base-size-80, 80px) !important}.pr-sm-9{padding-right:var(--base-size-80, 80px) !important}.pb-sm-9{padding-bottom:var(--base-size-80, 80px) !important}.pl-sm-9{padding-left:var(--base-size-80, 80px) !important}.py-sm-9{padding-top:var(--base-size-80, 80px) !important;padding-bottom:var(--base-size-80, 80px) !important}.pt-sm-10{padding-top:var(--base-size-96, 96px) !important}.pr-sm-10{padding-right:var(--base-size-96, 96px) !important}.pb-sm-10{padding-bottom:var(--base-size-96, 96px) !important}.pl-sm-10{padding-left:var(--base-size-96, 96px) !important}.py-sm-10{padding-top:var(--base-size-96, 96px) !important;padding-bottom:var(--base-size-96, 96px) !important}.pt-sm-11{padding-top:var(--base-size-112, 112px) !important}.pr-sm-11{padding-right:var(--base-size-112, 112px) !important}.pb-sm-11{padding-bottom:var(--base-size-112, 112px) !important}.pl-sm-11{padding-left:var(--base-size-112, 112px) !important}.py-sm-11{padding-top:var(--base-size-112, 112px) !important;padding-bottom:var(--base-size-112, 112px) !important}.pt-sm-12{padding-top:var(--base-size-128, 128px) !important}.pr-sm-12{padding-right:var(--base-size-128, 128px) !important}.pb-sm-12{padding-bottom:var(--base-size-128, 128px) !important}.pl-sm-12{padding-left:var(--base-size-128, 128px) !important}.py-sm-12{padding-top:var(--base-size-128, 128px) !important;padding-bottom:var(--base-size-128, 128px) !important}}@media(min-width: 768px){.p-md-0{padding:0 !important}.pt-md-0{padding-top:0 !important}.pr-md-0{padding-right:0 !important}.pb-md-0{padding-bottom:0 !important}.pl-md-0{padding-left:0 !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.p-md-1{padding:var(--base-size-4, 4px) !important}.pt-md-1{padding-top:var(--base-size-4, 4px) !important}.pr-md-1{padding-right:var(--base-size-4, 4px) !important}.pb-md-1{padding-bottom:var(--base-size-4, 4px) !important}.pl-md-1{padding-left:var(--base-size-4, 4px) !important}.px-md-1{padding-right:var(--base-size-4, 4px) !important;padding-left:var(--base-size-4, 4px) !important}.py-md-1{padding-top:var(--base-size-4, 4px) !important;padding-bottom:var(--base-size-4, 4px) !important}.p-md-2{padding:var(--base-size-8, 8px) !important}.pt-md-2{padding-top:var(--base-size-8, 8px) !important}.pr-md-2{padding-right:var(--base-size-8, 8px) !important}.pb-md-2{padding-bottom:var(--base-size-8, 8px) !important}.pl-md-2{padding-left:var(--base-size-8, 8px) !important}.px-md-2{padding-right:var(--base-size-8, 8px) !important;padding-left:var(--base-size-8, 8px) !important}.py-md-2{padding-top:var(--base-size-8, 8px) !important;padding-bottom:var(--base-size-8, 8px) !important}.p-md-3{padding:var(--base-size-16, 16px) !important}.pt-md-3{padding-top:var(--base-size-16, 16px) !important}.pr-md-3{padding-right:var(--base-size-16, 16px) !important}.pb-md-3{padding-bottom:var(--base-size-16, 16px) !important}.pl-md-3{padding-left:var(--base-size-16, 16px) !important}.px-md-3{padding-right:var(--base-size-16, 16px) !important;padding-left:var(--base-size-16, 16px) !important}.py-md-3{padding-top:var(--base-size-16, 16px) !important;padding-bottom:var(--base-size-16, 16px) !important}.p-md-4{padding:var(--base-size-24, 24px) !important}.pt-md-4{padding-top:var(--base-size-24, 24px) !important}.pr-md-4{padding-right:var(--base-size-24, 24px) !important}.pb-md-4{padding-bottom:var(--base-size-24, 24px) !important}.pl-md-4{padding-left:var(--base-size-24, 24px) !important}.px-md-4{padding-right:var(--base-size-24, 24px) !important;padding-left:var(--base-size-24, 24px) !important}.py-md-4{padding-top:var(--base-size-24, 24px) !important;padding-bottom:var(--base-size-24, 24px) !important}.p-md-5{padding:var(--base-size-32, 32px) !important}.pt-md-5{padding-top:var(--base-size-32, 32px) !important}.pr-md-5{padding-right:var(--base-size-32, 32px) !important}.pb-md-5{padding-bottom:var(--base-size-32, 32px) !important}.pl-md-5{padding-left:var(--base-size-32, 32px) !important}.px-md-5{padding-right:var(--base-size-32, 32px) !important;padding-left:var(--base-size-32, 32px) !important}.py-md-5{padding-top:var(--base-size-32, 32px) !important;padding-bottom:var(--base-size-32, 32px) !important}.p-md-6{padding:var(--base-size-40, 40px) !important}.pt-md-6{padding-top:var(--base-size-40, 40px) !important}.pr-md-6{padding-right:var(--base-size-40, 40px) !important}.pb-md-6{padding-bottom:var(--base-size-40, 40px) !important}.pl-md-6{padding-left:var(--base-size-40, 40px) !important}.px-md-6{padding-right:var(--base-size-40, 40px) !important;padding-left:var(--base-size-40, 40px) !important}.py-md-6{padding-top:var(--base-size-40, 40px) !important;padding-bottom:var(--base-size-40, 40px) !important}.pt-md-7{padding-top:var(--base-size-48, 48px) !important}.pr-md-7{padding-right:var(--base-size-48, 48px) !important}.pb-md-7{padding-bottom:var(--base-size-48, 48px) !important}.pl-md-7{padding-left:var(--base-size-48, 48px) !important}.py-md-7{padding-top:var(--base-size-48, 48px) !important;padding-bottom:var(--base-size-48, 48px) !important}.pt-md-8{padding-top:var(--base-size-64, 64px) !important}.pr-md-8{padding-right:var(--base-size-64, 64px) !important}.pb-md-8{padding-bottom:var(--base-size-64, 64px) !important}.pl-md-8{padding-left:var(--base-size-64, 64px) !important}.py-md-8{padding-top:var(--base-size-64, 64px) !important;padding-bottom:var(--base-size-64, 64px) !important}.pt-md-9{padding-top:var(--base-size-80, 80px) !important}.pr-md-9{padding-right:var(--base-size-80, 80px) !important}.pb-md-9{padding-bottom:var(--base-size-80, 80px) !important}.pl-md-9{padding-left:var(--base-size-80, 80px) !important}.py-md-9{padding-top:var(--base-size-80, 80px) !important;padding-bottom:var(--base-size-80, 80px) !important}.pt-md-10{padding-top:var(--base-size-96, 96px) !important}.pr-md-10{padding-right:var(--base-size-96, 96px) !important}.pb-md-10{padding-bottom:var(--base-size-96, 96px) !important}.pl-md-10{padding-left:var(--base-size-96, 96px) !important}.py-md-10{padding-top:var(--base-size-96, 96px) !important;padding-bottom:var(--base-size-96, 96px) !important}.pt-md-11{padding-top:var(--base-size-112, 112px) !important}.pr-md-11{padding-right:var(--base-size-112, 112px) !important}.pb-md-11{padding-bottom:var(--base-size-112, 112px) !important}.pl-md-11{padding-left:var(--base-size-112, 112px) !important}.py-md-11{padding-top:var(--base-size-112, 112px) !important;padding-bottom:var(--base-size-112, 112px) !important}.pt-md-12{padding-top:var(--base-size-128, 128px) !important}.pr-md-12{padding-right:var(--base-size-128, 128px) !important}.pb-md-12{padding-bottom:var(--base-size-128, 128px) !important}.pl-md-12{padding-left:var(--base-size-128, 128px) !important}.py-md-12{padding-top:var(--base-size-128, 128px) !important;padding-bottom:var(--base-size-128, 128px) !important}}@media(min-width: 1012px){.p-lg-0{padding:0 !important}.pt-lg-0{padding-top:0 !important}.pr-lg-0{padding-right:0 !important}.pb-lg-0{padding-bottom:0 !important}.pl-lg-0{padding-left:0 !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.p-lg-1{padding:var(--base-size-4, 4px) !important}.pt-lg-1{padding-top:var(--base-size-4, 4px) !important}.pr-lg-1{padding-right:var(--base-size-4, 4px) !important}.pb-lg-1{padding-bottom:var(--base-size-4, 4px) !important}.pl-lg-1{padding-left:var(--base-size-4, 4px) !important}.px-lg-1{padding-right:var(--base-size-4, 4px) !important;padding-left:var(--base-size-4, 4px) !important}.py-lg-1{padding-top:var(--base-size-4, 4px) !important;padding-bottom:var(--base-size-4, 4px) !important}.p-lg-2{padding:var(--base-size-8, 8px) !important}.pt-lg-2{padding-top:var(--base-size-8, 8px) !important}.pr-lg-2{padding-right:var(--base-size-8, 8px) !important}.pb-lg-2{padding-bottom:var(--base-size-8, 8px) !important}.pl-lg-2{padding-left:var(--base-size-8, 8px) !important}.px-lg-2{padding-right:var(--base-size-8, 8px) !important;padding-left:var(--base-size-8, 8px) !important}.py-lg-2{padding-top:var(--base-size-8, 8px) !important;padding-bottom:var(--base-size-8, 8px) !important}.p-lg-3{padding:var(--base-size-16, 16px) !important}.pt-lg-3{padding-top:var(--base-size-16, 16px) !important}.pr-lg-3{padding-right:var(--base-size-16, 16px) !important}.pb-lg-3{padding-bottom:var(--base-size-16, 16px) !important}.pl-lg-3{padding-left:var(--base-size-16, 16px) !important}.px-lg-3{padding-right:var(--base-size-16, 16px) !important;padding-left:var(--base-size-16, 16px) !important}.py-lg-3{padding-top:var(--base-size-16, 16px) !important;padding-bottom:var(--base-size-16, 16px) !important}.p-lg-4{padding:var(--base-size-24, 24px) !important}.pt-lg-4{padding-top:var(--base-size-24, 24px) !important}.pr-lg-4{padding-right:var(--base-size-24, 24px) !important}.pb-lg-4{padding-bottom:var(--base-size-24, 24px) !important}.pl-lg-4{padding-left:var(--base-size-24, 24px) !important}.px-lg-4{padding-right:var(--base-size-24, 24px) !important;padding-left:var(--base-size-24, 24px) !important}.py-lg-4{padding-top:var(--base-size-24, 24px) !important;padding-bottom:var(--base-size-24, 24px) !important}.p-lg-5{padding:var(--base-size-32, 32px) !important}.pt-lg-5{padding-top:var(--base-size-32, 32px) !important}.pr-lg-5{padding-right:var(--base-size-32, 32px) !important}.pb-lg-5{padding-bottom:var(--base-size-32, 32px) !important}.pl-lg-5{padding-left:var(--base-size-32, 32px) !important}.px-lg-5{padding-right:var(--base-size-32, 32px) !important;padding-left:var(--base-size-32, 32px) !important}.py-lg-5{padding-top:var(--base-size-32, 32px) !important;padding-bottom:var(--base-size-32, 32px) !important}.p-lg-6{padding:var(--base-size-40, 40px) !important}.pt-lg-6{padding-top:var(--base-size-40, 40px) !important}.pr-lg-6{padding-right:var(--base-size-40, 40px) !important}.pb-lg-6{padding-bottom:var(--base-size-40, 40px) !important}.pl-lg-6{padding-left:var(--base-size-40, 40px) !important}.px-lg-6{padding-right:var(--base-size-40, 40px) !important;padding-left:var(--base-size-40, 40px) !important}.py-lg-6{padding-top:var(--base-size-40, 40px) !important;padding-bottom:var(--base-size-40, 40px) !important}.pt-lg-7{padding-top:var(--base-size-48, 48px) !important}.pr-lg-7{padding-right:var(--base-size-48, 48px) !important}.pb-lg-7{padding-bottom:var(--base-size-48, 48px) !important}.pl-lg-7{padding-left:var(--base-size-48, 48px) !important}.py-lg-7{padding-top:var(--base-size-48, 48px) !important;padding-bottom:var(--base-size-48, 48px) !important}.pt-lg-8{padding-top:var(--base-size-64, 64px) !important}.pr-lg-8{padding-right:var(--base-size-64, 64px) !important}.pb-lg-8{padding-bottom:var(--base-size-64, 64px) !important}.pl-lg-8{padding-left:var(--base-size-64, 64px) !important}.py-lg-8{padding-top:var(--base-size-64, 64px) !important;padding-bottom:var(--base-size-64, 64px) !important}.pt-lg-9{padding-top:var(--base-size-80, 80px) !important}.pr-lg-9{padding-right:var(--base-size-80, 80px) !important}.pb-lg-9{padding-bottom:var(--base-size-80, 80px) !important}.pl-lg-9{padding-left:var(--base-size-80, 80px) !important}.py-lg-9{padding-top:var(--base-size-80, 80px) !important;padding-bottom:var(--base-size-80, 80px) !important}.pt-lg-10{padding-top:var(--base-size-96, 96px) !important}.pr-lg-10{padding-right:var(--base-size-96, 96px) !important}.pb-lg-10{padding-bottom:var(--base-size-96, 96px) !important}.pl-lg-10{padding-left:var(--base-size-96, 96px) !important}.py-lg-10{padding-top:var(--base-size-96, 96px) !important;padding-bottom:var(--base-size-96, 96px) !important}.pt-lg-11{padding-top:var(--base-size-112, 112px) !important}.pr-lg-11{padding-right:var(--base-size-112, 112px) !important}.pb-lg-11{padding-bottom:var(--base-size-112, 112px) !important}.pl-lg-11{padding-left:var(--base-size-112, 112px) !important}.py-lg-11{padding-top:var(--base-size-112, 112px) !important;padding-bottom:var(--base-size-112, 112px) !important}.pt-lg-12{padding-top:var(--base-size-128, 128px) !important}.pr-lg-12{padding-right:var(--base-size-128, 128px) !important}.pb-lg-12{padding-bottom:var(--base-size-128, 128px) !important}.pl-lg-12{padding-left:var(--base-size-128, 128px) !important}.py-lg-12{padding-top:var(--base-size-128, 128px) !important;padding-bottom:var(--base-size-128, 128px) !important}}@media(min-width: 1280px){.p-xl-0{padding:0 !important}.pt-xl-0{padding-top:0 !important}.pr-xl-0{padding-right:0 !important}.pb-xl-0{padding-bottom:0 !important}.pl-xl-0{padding-left:0 !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.p-xl-1{padding:var(--base-size-4, 4px) !important}.pt-xl-1{padding-top:var(--base-size-4, 4px) !important}.pr-xl-1{padding-right:var(--base-size-4, 4px) !important}.pb-xl-1{padding-bottom:var(--base-size-4, 4px) !important}.pl-xl-1{padding-left:var(--base-size-4, 4px) !important}.px-xl-1{padding-right:var(--base-size-4, 4px) !important;padding-left:var(--base-size-4, 4px) !important}.py-xl-1{padding-top:var(--base-size-4, 4px) !important;padding-bottom:var(--base-size-4, 4px) !important}.p-xl-2{padding:var(--base-size-8, 8px) !important}.pt-xl-2{padding-top:var(--base-size-8, 8px) !important}.pr-xl-2{padding-right:var(--base-size-8, 8px) !important}.pb-xl-2{padding-bottom:var(--base-size-8, 8px) !important}.pl-xl-2{padding-left:var(--base-size-8, 8px) !important}.px-xl-2{padding-right:var(--base-size-8, 8px) !important;padding-left:var(--base-size-8, 8px) !important}.py-xl-2{padding-top:var(--base-size-8, 8px) !important;padding-bottom:var(--base-size-8, 8px) !important}.p-xl-3{padding:var(--base-size-16, 16px) !important}.pt-xl-3{padding-top:var(--base-size-16, 16px) !important}.pr-xl-3{padding-right:var(--base-size-16, 16px) !important}.pb-xl-3{padding-bottom:var(--base-size-16, 16px) !important}.pl-xl-3{padding-left:var(--base-size-16, 16px) !important}.px-xl-3{padding-right:var(--base-size-16, 16px) !important;padding-left:var(--base-size-16, 16px) !important}.py-xl-3{padding-top:var(--base-size-16, 16px) !important;padding-bottom:var(--base-size-16, 16px) !important}.p-xl-4{padding:var(--base-size-24, 24px) !important}.pt-xl-4{padding-top:var(--base-size-24, 24px) !important}.pr-xl-4{padding-right:var(--base-size-24, 24px) !important}.pb-xl-4{padding-bottom:var(--base-size-24, 24px) !important}.pl-xl-4{padding-left:var(--base-size-24, 24px) !important}.px-xl-4{padding-right:var(--base-size-24, 24px) !important;padding-left:var(--base-size-24, 24px) !important}.py-xl-4{padding-top:var(--base-size-24, 24px) !important;padding-bottom:var(--base-size-24, 24px) !important}.p-xl-5{padding:var(--base-size-32, 32px) !important}.pt-xl-5{padding-top:var(--base-size-32, 32px) !important}.pr-xl-5{padding-right:var(--base-size-32, 32px) !important}.pb-xl-5{padding-bottom:var(--base-size-32, 32px) !important}.pl-xl-5{padding-left:var(--base-size-32, 32px) !important}.px-xl-5{padding-right:var(--base-size-32, 32px) !important;padding-left:var(--base-size-32, 32px) !important}.py-xl-5{padding-top:var(--base-size-32, 32px) !important;padding-bottom:var(--base-size-32, 32px) !important}.p-xl-6{padding:var(--base-size-40, 40px) !important}.pt-xl-6{padding-top:var(--base-size-40, 40px) !important}.pr-xl-6{padding-right:var(--base-size-40, 40px) !important}.pb-xl-6{padding-bottom:var(--base-size-40, 40px) !important}.pl-xl-6{padding-left:var(--base-size-40, 40px) !important}.px-xl-6{padding-right:var(--base-size-40, 40px) !important;padding-left:var(--base-size-40, 40px) !important}.py-xl-6{padding-top:var(--base-size-40, 40px) !important;padding-bottom:var(--base-size-40, 40px) !important}.pt-xl-7{padding-top:var(--base-size-48, 48px) !important}.pr-xl-7{padding-right:var(--base-size-48, 48px) !important}.pb-xl-7{padding-bottom:var(--base-size-48, 48px) !important}.pl-xl-7{padding-left:var(--base-size-48, 48px) !important}.py-xl-7{padding-top:var(--base-size-48, 48px) !important;padding-bottom:var(--base-size-48, 48px) !important}.pt-xl-8{padding-top:var(--base-size-64, 64px) !important}.pr-xl-8{padding-right:var(--base-size-64, 64px) !important}.pb-xl-8{padding-bottom:var(--base-size-64, 64px) !important}.pl-xl-8{padding-left:var(--base-size-64, 64px) !important}.py-xl-8{padding-top:var(--base-size-64, 64px) !important;padding-bottom:var(--base-size-64, 64px) !important}.pt-xl-9{padding-top:var(--base-size-80, 80px) !important}.pr-xl-9{padding-right:var(--base-size-80, 80px) !important}.pb-xl-9{padding-bottom:var(--base-size-80, 80px) !important}.pl-xl-9{padding-left:var(--base-size-80, 80px) !important}.py-xl-9{padding-top:var(--base-size-80, 80px) !important;padding-bottom:var(--base-size-80, 80px) !important}.pt-xl-10{padding-top:var(--base-size-96, 96px) !important}.pr-xl-10{padding-right:var(--base-size-96, 96px) !important}.pb-xl-10{padding-bottom:var(--base-size-96, 96px) !important}.pl-xl-10{padding-left:var(--base-size-96, 96px) !important}.py-xl-10{padding-top:var(--base-size-96, 96px) !important;padding-bottom:var(--base-size-96, 96px) !important}.pt-xl-11{padding-top:var(--base-size-112, 112px) !important}.pr-xl-11{padding-right:var(--base-size-112, 112px) !important}.pb-xl-11{padding-bottom:var(--base-size-112, 112px) !important}.pl-xl-11{padding-left:var(--base-size-112, 112px) !important}.py-xl-11{padding-top:var(--base-size-112, 112px) !important;padding-bottom:var(--base-size-112, 112px) !important}.pt-xl-12{padding-top:var(--base-size-128, 128px) !important}.pr-xl-12{padding-right:var(--base-size-128, 128px) !important}.pb-xl-12{padding-bottom:var(--base-size-128, 128px) !important}.pl-xl-12{padding-left:var(--base-size-128, 128px) !important}.py-xl-12{padding-top:var(--base-size-128, 128px) !important;padding-bottom:var(--base-size-128, 128px) !important}}.p-responsive{padding-right:var(--base-size-16, 16px) !important;padding-left:var(--base-size-16, 16px) !important}@media(min-width: 544px){.p-responsive{padding-right:var(--base-size-40, 40px) !important;padding-left:var(--base-size-40, 40px) !important}}@media(min-width: 1012px){.p-responsive{padding-right:var(--base-size-16, 16px) !important;padding-left:var(--base-size-16, 16px) !important}}.h1{font-size:var(--h1-size-mobile, 26px) !important}@media(min-width: 768px){.h1{font-size:var(--h1-size, 32px) !important}}.h2{font-size:var(--h2-size-mobile, 22px) !important}@media(min-width: 768px){.h2{font-size:var(--h2-size, 24px) !important}}.h3{font-size:var(--h3-size-mobile, 18px) !important}@media(min-width: 768px){.h3{font-size:var(--h3-size, 20px) !important}}.h4{font-size:var(--h4-size, 16px) !important}.h5{font-size:var(--h5-size, 14px) !important}.h6{font-size:var(--h6-size, 12px) !important}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:var(--base-text-weight-semibold, var(--base-text-weight-semibold, 600)) !important}.f1{font-size:var(--h1-size-mobile, 26px) !important}@media(min-width: 768px){.f1{font-size:var(--h1-size, 32px) !important}}.f2{font-size:var(--h2-size-mobile, 22px) !important}@media(min-width: 768px){.f2{font-size:var(--h2-size, 24px) !important}}.f3{font-size:var(--h3-size-mobile, 18px) !important}@media(min-width: 768px){.f3{font-size:var(--h3-size, 20px) !important}}.f4{font-size:var(--h4-size, 16px) !important}@media(min-width: 768px){.f4{font-size:var(--h4-size, 16px) !important}}.f5{font-size:var(--h5-size, 14px) !important}.f6{font-size:var(--h6-size, 12px) !important}.f00-light{font-size:var(--h00-size-mobile, 40px) !important;font-weight:var(--base-text-weight-light, var(--base-text-weight-light, 300)) !important}@media(min-width: 768px){.f00-light{font-size:var(--h00-size, 48px) !important}}.f0-light{font-size:var(--h0-size-mobile, 32px) !important;font-weight:var(--base-text-weight-light, var(--base-text-weight-light, 300)) !important}@media(min-width: 768px){.f0-light{font-size:var(--h0-size, 40px) !important}}.f1-light{font-size:var(--h1-size-mobile, 26px) !important;font-weight:var(--base-text-weight-light, var(--base-text-weight-light, 300)) !important}@media(min-width: 768px){.f1-light{font-size:var(--h1-size, 32px) !important}}.f2-light{font-size:var(--h2-size-mobile, 22px) !important;font-weight:var(--base-text-weight-light, var(--base-text-weight-light, 300)) !important}@media(min-width: 768px){.f2-light{font-size:var(--h2-size, 24px) !important}}.f3-light{font-size:var(--h3-size-mobile, 18px) !important;font-weight:var(--base-text-weight-light, var(--base-text-weight-light, 300)) !important}@media(min-width: 768px){.f3-light{font-size:var(--h3-size, 20px) !important}}.text-small{font-size:var(--h6-size, 12px) !important}.lead{margin-bottom:30px;font-size:var(--h3-size, 20px);font-weight:var(--base-text-weight-light, var(--base-text-weight-light, 300))}.lh-condensed-ultra{line-height:1 !important}.lh-condensed{line-height:1.25 !important}.lh-default{line-height:1.5 !important}.lh-0{line-height:0 !important}@media(min-width: 544px){.lh-sm-condensed-ultra{line-height:1 !important}.lh-sm-condensed{line-height:1.25 !important}.lh-sm-default{line-height:1.5 !important}.lh-sm-0{line-height:0 !important}}@media(min-width: 768px){.lh-md-condensed-ultra{line-height:1 !important}.lh-md-condensed{line-height:1.25 !important}.lh-md-default{line-height:1.5 !important}.lh-md-0{line-height:0 !important}}@media(min-width: 1012px){.lh-lg-condensed-ultra{line-height:1 !important}.lh-lg-condensed{line-height:1.25 !important}.lh-lg-default{line-height:1.5 !important}.lh-lg-0{line-height:0 !important}}@media(min-width: 1280px){.lh-xl-condensed-ultra{line-height:1 !important}.lh-xl-condensed{line-height:1.25 !important}.lh-xl-default{line-height:1.5 !important}.lh-xl-0{line-height:0 !important}}.text-right{text-align:right !important}.text-left{text-align:left !important}.text-center{text-align:center !important}@media(min-width: 544px){.text-sm-right{text-align:right !important}.text-sm-left{text-align:left !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.text-md-right{text-align:right !important}.text-md-left{text-align:left !important}.text-md-center{text-align:center !important}}@media(min-width: 1012px){.text-lg-right{text-align:right !important}.text-lg-left{text-align:left !important}.text-lg-center{text-align:center !important}}@media(min-width: 1280px){.text-xl-right{text-align:right !important}.text-xl-left{text-align:left !important}.text-xl-center{text-align:center !important}}.text-normal{font-weight:var(--base-text-weight-normal, 400) !important}.text-bold{font-weight:var(--base-text-weight-semibold, 600) !important}.text-semibold{font-weight:var(--base-text-weight-medium, 500) !important}.text-light{font-weight:var(--base-text-weight-light, 300) !important}.text-italic{font-style:italic !important}.text-uppercase{text-transform:uppercase !important}.text-underline{text-decoration:underline !important}.no-underline{text-decoration:none !important}.no-wrap{white-space:nowrap !important}.ws-normal{white-space:normal !important}.wb-break-word{word-break:break-word !important;word-wrap:break-word !important;overflow-wrap:break-word !important}.wb-break-all{word-break:break-all !important}.text-emphasized{font-weight:var(--base-text-weight-semibold, var(--base-text-weight-semibold, 600))}.list-style-none{list-style:none !important}.text-mono{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace !important}.user-select-none{-webkit-user-select:none !important;user-select:none !important}.text-capitalize{text-transform:capitalize !important}.d-block{display:block !important}.d-flex{display:flex !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.d-table{display:table !important}.d-table-cell{display:table-cell !important}@media(min-width: 544px){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.d-sm-table{display:table !important}.d-sm-table-cell{display:table-cell !important}}@media(min-width: 768px){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.d-md-table{display:table !important}.d-md-table-cell{display:table-cell !important}}@media(min-width: 1012px){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.d-lg-table{display:table !important}.d-lg-table-cell{display:table-cell !important}}@media(min-width: 1280px){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.d-xl-table{display:table !important}.d-xl-table-cell{display:table-cell !important}}.v-hidden{visibility:hidden !important}.v-visible{visibility:visible !important}@media(max-width: 543.98px){.hide-sm{display:none !important}}@media(min-width: 544px)and (max-width: 767.98px){.hide-md{display:none !important}}@media(min-width: 768px)and (max-width: 1011.98px){.hide-lg{display:none !important}}@media(min-width: 1012px){.hide-xl{display:none !important}}.show-whenNarrow,.show-whenRegular,.show-whenWide,.show-whenRegular.hide-whenWide{display:none !important}.hide-whenNarrow,.hide-whenRegular,.hide-whenWide{display:block !important}@media(max-width: 767.98px){.show-whenNarrow{display:block !important}.hide-whenNarrow{display:none !important}}@media(min-width: 768px){.show-whenRegular,.show-whenRegular.hide-whenWide{display:block !important}.hide-whenRegular{display:none !important}}@media(min-width: 1280px){.show-whenWide{display:block !important}.hide-whenWide,.show-whenRegular.hide-whenWide{display:none !important}}.table-fixed{table-layout:fixed !important}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);word-wrap:normal;border:0}.show-on-focus{position:absolute;width:1px;height:1px;margin:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}.show-on-focus:focus{z-index:999;width:auto;height:auto;clip:auto}.suggester{position:relative;top:0;left:0;min-width:180px;padding:0;margin:0;margin-top:24px;list-style:none;cursor:pointer;background:var(--color-canvas-overlay);border:1px solid var(--color-border-default);border-radius:6px;box-shadow:var(--color-shadow-medium)}.suggester li{display:block;padding:4px 8px;font-weight:var(--base-text-weight-medium, 500);border-bottom:1px solid var(--color-border-muted)}.suggester li small{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.suggester li:last-child{border-bottom:0;border-bottom-right-radius:6px;border-bottom-left-radius:6px}.suggester li:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.suggester li:hover{color:var(--color-fg-on-emphasis);text-decoration:none;background:var(--color-accent-emphasis)}.suggester li:hover small{color:var(--color-fg-on-emphasis)}.suggester li:hover .octicon{color:inherit !important}.suggester li[aria-selected=true],.suggester li.navigation-focus{color:var(--color-fg-on-emphasis);text-decoration:none;background:var(--color-accent-emphasis)}.suggester li[aria-selected=true] small,.suggester li.navigation-focus small{color:var(--color-fg-on-emphasis)}.suggester li[aria-selected=true] .octicon,.suggester li.navigation-focus .octicon{color:inherit !important}.suggester-container{position:absolute;top:0;left:0;z-index:30}@media(max-width: 544px){.page-responsive .suggester-container{right:8px !important;left:8px !important}.page-responsive .suggester li{padding:8px 16px}}.avatar-parent-child{position:relative}.avatar-child{position:absolute;right:-15%;bottom:-9%;background-color:var(--color-canvas-default);border-radius:4px;box-shadow:var(--color-avatar-child-shadow)}.CircleBadge{display:flex;align-items:center;justify-content:center;background-color:var(--color-canvas-default);border-radius:50%;box-shadow:var(--color-shadow-medium)}.CircleBadge-icon{max-width:60% !important;height:auto !important;max-height:55% !important}.CircleBadge--small{width:56px;height:56px}.CircleBadge--medium{width:96px;height:96px}.CircleBadge--large{width:128px;height:128px}.DashedConnection{position:relative}.DashedConnection::before{position:absolute;top:50%;left:0;width:100%;content:"";border-bottom:2px dashed var(--color-border-default)}.DashedConnection .CircleBadge{position:relative}.branch-name{display:inline-block;padding:2px 6px;font:12px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;color:var(--color-fg-muted);word-break:break-all;background-color:var(--color-accent-subtle);border-radius:6px}.branch-name .octicon{margin:1px -2px 0 0;color:var(--color-fg-muted)}a.branch-name{color:var(--color-accent-fg);background-color:var(--color-accent-subtle)}a.branch-name .octicon{color:var(--color-accent-fg)}.Header{z-index:32;display:flex;padding:16px;font-size:14px;line-height:1.5;color:var(--color-header-text);background-color:var(--color-header-bg);align-items:center;flex-wrap:nowrap}.Header-item{display:flex;margin-right:16px;align-self:stretch;align-items:center;flex-wrap:nowrap}.Header-item--full{flex:auto}.Header-link{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-header-logo);white-space:nowrap}.Header-link:hover,.Header-link:focus{color:var(--color-header-text);text-decoration:none}.Header-input{color:var(--color-header-text);background-color:var(--color-header-search-bg);border:1px solid var(--color-header-search-border);box-shadow:none}.Header-input::placeholder{color:rgba(255,255,255,.75)}.IssueLabel{display:inline-block;padding:0 7px;font-size:12px;font-weight:var(--base-text-weight-medium, 500);line-height:18px;white-space:nowrap;border:1px solid transparent;border-radius:2em}.IssueLabel .g-emoji{position:relative;top:-0.05em;display:inline-block;font-size:1em;line-height:1}.IssueLabel:hover{text-decoration:none}.IssueLabel--big{padding-right:10px;padding-left:10px;line-height:22px}.diffstat{font-size:12px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted);white-space:nowrap;cursor:default}.diffstat-block-deleted,.diffstat-block-added,.diffstat-block-neutral{display:inline-block;width:8px;height:8px;margin-left:1px;outline-offset:-1px}.diffstat-block-deleted{background-color:var(--color-danger-emphasis);outline:1px solid var(--color-border-subtle)}.diffstat-block-added{background-color:var(--color-diffstat-addition-bg);outline:1px solid var(--color-border-subtle)}.diffstat-block-neutral{background-color:var(--color-neutral-muted);outline:1px solid var(--color-border-subtle)}.AnimatedEllipsis{display:inline-block;overflow:hidden;vertical-align:bottom}.AnimatedEllipsis::after{display:inline-block;content:"...";animation:AnimatedEllipsis-keyframes 1.2s steps(4, jump-none) infinite}@keyframes AnimatedEllipsis-keyframes{0%{transform:translateX(-100%)}}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>*:first-child{margin-top:0 !important}.markdown-body>*:last-child{margin-bottom:0 !important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:var(--color-danger-fg)}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre,.markdown-body details{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:var(--color-border-default);border:0}.markdown-body blockquote{padding:0 1em;color:var(--color-fg-muted);border-left:.25em solid var(--color-border-default)}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:var(--base-text-weight-semibold, 600);line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:var(--color-fg-default);vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code{padding:0 .2em;font-size:inherit}.markdown-body h1{padding-bottom:.3em;font-size:2em;border-bottom:1px solid var(--color-border-muted)}.markdown-body h2{padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid var(--color-border-muted)}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:var(--color-fg-muted)}.markdown-body summary h1,.markdown-body summary h2,.markdown-body summary h3,.markdown-body summary h4,.markdown-body summary h5,.markdown-body summary h6{display:inline-block}.markdown-body summary h1 .anchor,.markdown-body summary h2 .anchor,.markdown-body summary h3 .anchor,.markdown-body summary h4 .anchor,.markdown-body summary h5 .anchor,.markdown-body summary h6 .anchor{margin-left:-40px}.markdown-body summary h1,.markdown-body summary h2{padding-bottom:0;border-bottom:0}.markdown-body ul,.markdown-body ol{padding-left:2em}.markdown-body ul.no-list,.markdown-body ol.no-list{padding:0;list-style-type:none}.markdown-body ol[type=a]{list-style-type:lower-alpha}.markdown-body ol[type=A]{list-style-type:upper-alpha}.markdown-body ol[type=i]{list-style-type:lower-roman}.markdown-body ol[type=I]{list-style-type:upper-roman}.markdown-body ol[type="1"]{list-style-type:decimal}.markdown-body div>ol:not([type]){list-style-type:decimal}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:var(--base-text-weight-semibold, 600)}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;width:max-content;max-width:100%;overflow:auto}.markdown-body table th{font-weight:var(--base-text-weight-semibold, 600)}.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid var(--color-border-default)}.markdown-body table tr{background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-muted)}.markdown-body table tr:nth-child(2n){background-color:var(--color-canvas-subtle)}.markdown-body table img{background-color:transparent}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:var(--color-canvas-default)}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid var(--color-border-default)}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:var(--color-fg-default)}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;background-color:var(--color-neutral-muted);border-radius:6px}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body samp{font-size:85%}.markdown-body pre{word-wrap:normal}.markdown-body pre code{font-size:100%}.markdown-body pre>code{padding:0;margin:0;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:var(--color-canvas-subtle);border-radius:6px}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body .csv-data td,.markdown-body .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:var(--color-canvas-default);border:0}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{font-weight:var(--base-text-weight-semibold, 600);background:var(--color-canvas-subtle);border-top:0}.markdown-body [data-footnote-ref]::before{content:"["}.markdown-body [data-footnote-ref]::after{content:"]"}.markdown-body .footnotes{font-size:12px;color:var(--color-fg-muted);border-top:1px solid var(--color-border-default)}.markdown-body .footnotes ol{padding-left:16px}.markdown-body .footnotes ol ul{display:inline-block;padding-left:16px;margin-top:16px}.markdown-body .footnotes li{position:relative}.markdown-body .footnotes li:target::before{position:absolute;top:-8px;right:-8px;bottom:-8px;left:-24px;pointer-events:none;content:"";border:2px solid var(--color-accent-emphasis);border-radius:6px}.markdown-body .footnotes li:target{color:var(--color-fg-default)}.markdown-body .footnotes .data-footnote-backref g-emoji{font-family:monospace}.SelectMenu{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99;display:flex;padding:16px;pointer-events:none;flex-direction:column}@media(min-width: 544px){.SelectMenu{position:absolute;top:auto;right:auto;bottom:auto;left:auto;padding:0}}.SelectMenu::before{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;content:"";background-color:var(--color-primer-canvas-backdrop)}@media(min-width: 544px){.SelectMenu::before{display:none}}.SelectMenu-modal{position:relative;z-index:99;display:flex;max-height:66%;margin:auto 0;overflow:hidden;pointer-events:auto;flex-direction:column;background-color:var(--color-canvas-overlay);border:1px solid var(--color-select-menu-backdrop-border);border-radius:12px;box-shadow:var(--color-shadow-large);animation:SelectMenu-modal-animation .12s cubic-bezier(0, 0.1, 0.1, 1) backwards}@keyframes SelectMenu-modal-animation{0%{opacity:0;transform:scale(0.9)}}@keyframes SelectMenu-modal-animation--sm{0%{opacity:0;transform:translateY(-16px)}}@media(min-width: 544px){.SelectMenu-modal{width:300px;height:auto;max-height:480px;margin:8px 0 16px 0;font-size:12px;border-color:var(--color-border-default);border-radius:6px;box-shadow:var(--color-shadow-large);animation-name:SelectMenu-modal-animation--sm}}.SelectMenu-header{display:flex;padding:16px;flex:none;align-items:center;border-bottom:1px solid var(--color-border-muted)}@media(min-width: 544px){.SelectMenu-header{padding:7px 7px 7px 16px}}.SelectMenu-title{flex:1;font-size:14px;font-weight:var(--base-text-weight-semibold, 600)}@media(min-width: 544px){.SelectMenu-title{font-size:inherit}}.SelectMenu-closeButton{padding:16px;margin:-16px;line-height:1;color:var(--color-fg-muted);background-color:transparent;border:0}@media(min-width: 544px){.SelectMenu-closeButton{padding:8px;margin:-8px -7px}}.SelectMenu-filter{padding:16px;margin:0;border-bottom:1px solid var(--color-border-muted)}@media(min-width: 544px){.SelectMenu-filter{padding:8px}}.SelectMenu-input{display:block;width:100%}@media(min-width: 544px){.SelectMenu-input{font-size:14px}}.SelectMenu-list{position:relative;padding:0;margin:0;margin-bottom:-1px;flex:auto;overflow-x:hidden;overflow-y:auto;background-color:var(--color-canvas-overlay);-webkit-overflow-scrolling:touch}.SelectMenu-item{display:flex;align-items:center;width:100%;padding:16px;overflow:hidden;color:var(--color-fg-default);text-align:left;cursor:pointer;background-color:var(--color-canvas-overlay);border:0;border-bottom:1px solid var(--color-border-muted)}@media(min-width: 544px){.SelectMenu-item{padding-top:7px;padding-bottom:7px}}.SelectMenu-list--borderless .SelectMenu-item{border-bottom:0}.SelectMenu-icon{width:16px;margin-right:8px;flex-shrink:0}.SelectMenu-icon--check{visibility:hidden;transition:transform .12s cubic-bezier(0.5, 0.1, 1, 0.5),visibility 0s .12s linear;transform:scale(0)}.SelectMenu-tabs{display:flex;flex-shrink:0;overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px 0 var(--color-border-muted);-webkit-overflow-scrolling:touch}.SelectMenu-tabs::-webkit-scrollbar{display:none}@media(min-width: 544px){.SelectMenu-tabs{padding:8px 8px 0 8px}}.SelectMenu-tab{flex:1;padding:8px 16px;font-size:12px;font-weight:var(--base-text-weight-medium, 500);color:var(--color-fg-muted);text-align:center;background-color:transparent;border:0;box-shadow:inset 0 -1px 0 var(--color-border-muted)}@media(min-width: 544px){.SelectMenu-tab{flex:none;padding:4px 16px;border:1px solid transparent;border-bottom-width:0;border-top-left-radius:6px;border-top-right-radius:6px}}.SelectMenu-tab[aria-selected=true]{z-index:1;color:var(--color-fg-default);cursor:default;background-color:var(--color-canvas-overlay);box-shadow:0 0 0 1px var(--color-border-muted)}@media(min-width: 544px){.SelectMenu-tab[aria-selected=true]{border-color:var(--color-border-muted);box-shadow:none}}.SelectMenu-message{padding:7px 16px;text-align:center;background-color:var(--color-canvas-overlay);border-bottom:1px solid var(--color-border-muted)}.SelectMenu-blankslate,.SelectMenu-loading{padding:24px 16px;text-align:center;background-color:var(--color-canvas-overlay)}.SelectMenu-divider{padding:4px 16px;margin:0;font-size:12px;font-weight:var(--base-text-weight-medium, 500);color:var(--color-fg-muted);background-color:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-muted)}.SelectMenu-list--borderless .SelectMenu-divider{border-top:1px solid var(--color-border-muted)}.SelectMenu-list--borderless .SelectMenu-divider:empty{padding:0;border-top:0}.SelectMenu-footer{z-index:0;padding:8px 16px;font-size:12px;color:var(--color-fg-muted);text-align:center;border-top:1px solid var(--color-border-muted)}@media(min-width: 544px){.SelectMenu-footer{padding:7px 16px}}.SelectMenu--hasFilter .SelectMenu-modal{height:80%;max-height:none;margin-top:0}@media(min-width: 544px){.SelectMenu--hasFilter .SelectMenu-modal{height:auto;max-height:480px;margin-top:8px}}.SelectMenu-tab:focus,.SelectMenu-item:focus{outline:0}.SelectMenu-item:hover{text-decoration:none}.SelectMenu-item[aria-checked=true]{font-weight:var(--base-text-weight-medium, 500);color:var(--color-fg-default)}.SelectMenu-item[aria-checked=true] .SelectMenu-icon--check{visibility:visible;transition:transform .12s cubic-bezier(0, 0, 0.2, 1),visibility 0s linear;transform:scale(1)}.SelectMenu-item:disabled,.SelectMenu-item[aria-disabled=true]{color:var(--color-primer-fg-disabled);pointer-events:none}@media(hover: hover){body:not(.intent-mouse) .SelectMenu-closeButton:focus,.SelectMenu-closeButton:hover{color:var(--color-fg-default)}.SelectMenu-closeButton:active{color:var(--color-fg-muted)}body:not(.intent-mouse) .SelectMenu-item:focus,.SelectMenu-item:hover{background-color:var(--color-neutral-subtle)}.SelectMenu-item:active{background-color:var(--color-canvas-subtle)}body:not(.intent-mouse) .SelectMenu-tab:focus{background-color:var(--color-select-menu-tap-focus-bg)}.SelectMenu-tab:hover{color:var(--color-fg-default)}.SelectMenu-tab:not([aria-selected=true]):active{color:var(--color-fg-default);background-color:var(--color-canvas-subtle)}}@media(hover: none){.SelectMenu-item:focus,.SelectMenu-item:active{background-color:var(--color-canvas-subtle)}.SelectMenu-item{-webkit-tap-highlight-color:var(--color-select-menu-tap-highlight)}}.Toast{display:flex;margin:8px;color:var(--color-fg-default);background-color:var(--color-canvas-default);border-radius:6px;box-shadow:inset 0 0 0 1px var(--color-border-default),var(--color-shadow-large)}@media(min-width: 544px){.Toast{width:max-content;max-width:450px;margin:16px}}.Toast-icon{display:flex;align-items:center;justify-content:center;width:48px;flex-shrink:0;color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis);border:1px solid transparent;border-right:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.Toast-content{padding:16px}.Toast-dismissButton{max-height:54px;padding:16px;color:inherit;background-color:transparent;border:0}.Toast-dismissButton:hover{opacity:.7}.Toast-dismissButton:active{opacity:.5}.Toast--loading{color:var(--color-fg-default);box-shadow:inset 0 0 0 1px var(--color-border-default),var(--color-shadow-large)}.Toast--loading .Toast-icon{background-color:var(--color-neutral-emphasis)}.Toast--error{color:var(--color-fg-default);box-shadow:inset 0 0 0 1px var(--color-border-default),var(--color-shadow-large)}.Toast--error .Toast-icon{background-color:var(--color-danger-emphasis)}.Toast--warning{color:var(--color-fg-default);box-shadow:inset 0 0 0 1px var(--color-border-default),var(--color-shadow-large)}.Toast--warning .Toast-icon{background-color:var(--color-attention-emphasis)}.Toast--success{color:var(--color-fg-default);box-shadow:inset 0 0 0 1px var(--color-border-default),var(--color-shadow-large)}.Toast--success .Toast-icon{background-color:var(--color-success-emphasis)}.Toast--animateIn{animation:Toast--animateIn .18s cubic-bezier(0.22, 0.61, 0.36, 1) backwards}@keyframes Toast--animateIn{0%{opacity:0;transform:translateY(100%)}}.Toast--animateOut{animation:Toast--animateOut .18s cubic-bezier(0.55, 0.06, 0.68, 0.19) forwards}@keyframes Toast--animateOut{100%{pointer-events:none;opacity:0;transform:translateY(100%)}}.Toast--spinner{animation:Toast--spinner 1000ms linear infinite}@keyframes Toast--spinner{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}:root{--primer-actionListContent-paddingBlock:var(--primer-control-medium-paddingBlock,6px)}.ActionListWrap{list-style:none}.ActionListWrap--inset{padding:var(--base-size-8, 8px)}.ActionListWrap--divided .ActionListItem-label:before{height:1px}.ActionListWrap--divided .ActionListItem-descriptionWrap--inline:before,.ActionListWrap--divided .ActionListItem-label:before{background:var(--color-action-list-item-inline-divider);content:"";display:block;position:absolute;top:calc(var(--primer-actionListContent-paddingBlock)*-1);width:100%}.ActionListWrap--divided .ActionListItem-descriptionWrap--inline:before{height:var(--primer-borderWidth-thin, 1px)}.ActionListWrap--divided .ActionListItem-descriptionWrap--inline .ActionListItem-label:before{content:unset}.ActionList-sectionDivider+.ActionListItem .ActionListItem-descriptionWrap--inline:before,.ActionList-sectionDivider+.ActionListItem .ActionListItem-label:before,.ActionListItem:first-of-type .ActionListItem-descriptionWrap--inline:before,.ActionListItem:first-of-type .ActionListItem-label:before,.ActionListWrap--divided .ActionListItem--navActive .ActionListItem-label:before,.ActionListWrap--divided .ActionListItem--navActive+.ActionListItem .ActionListItem-label:before{visibility:hidden}.ActionListItem{background-color:initial;border-radius:var(--primer-borderRadius-medium, 6px);list-style:none;position:relative}.ActionListItem:active,.ActionListItem:hover{cursor:pointer}@media(hover: hover){.ActionListItem:hover .ActionListItem-descriptionWrap--inline:before,.ActionListItem:hover .ActionListItem-label:before,.ActionListItem:hover+.ActionListItem .ActionListItem-descriptionWrap--inline:before,.ActionListItem:hover+.ActionListItem .ActionListItem-label:before{visibility:hidden}}.ActionListItem[hidden]+.ActionList-sectionDivider{display:none}.ActionListItem.ActionListItem--hasSubItem>.ActionListContent{z-index:1}@media(hover: hover){.ActionListItem.ActionListItem--hasSubItem>.ActionListContent:hover{background-color:var(--color-action-list-item-default-hover-bg)}}.ActionListItem.ActionListItem--hasSubItem>.ActionListContent:active{background-color:var(--color-action-list-item-default-active-bg)}@media(hover: hover){.ActionListItem.ActionListItem--hasSubItem>.ActionListContent:hover,.ActionListItem:not(.ActionListItem--hasSubItem):hover{background-color:var(--color-action-list-item-default-hover-bg);cursor:pointer}.ActionListItem.ActionListItem--hasSubItem>.ActionListContent:hover:not(.ActionListItem--navActive,:focus-visible),.ActionListItem:not(.ActionListItem--hasSubItem):hover:not(.ActionListItem--navActive,:focus-visible){box-shadow:var(--primer-borderInset-thin, 1px) var(--color-action-list-item-default-active-border);outline:solid var(--primer-borderWidth-thin, 1px) #0000;outline-offset:calc(var(--primer-borderWidth-thin, 1px)*-1)}}.ActionListItem.ActionListItem--hasSubItem>.ActionListContent:active,.ActionListItem:not(.ActionListItem--hasSubItem):active{background:var(--color-action-list-item-default-active-bg)}.ActionListItem.ActionListItem--hasSubItem>.ActionListContent:active:not(.ActionListItem--navActive),.ActionListItem:not(.ActionListItem--hasSubItem):active:not(.ActionListItem--navActive){box-shadow:var(--primer-borderInset-thin, 1px) var(--color-action-list-item-default-active-border);outline:solid var(--primer-borderWidth-thin, 1px) #0000;outline-offset:calc(var(--primer-borderWidth-thin, 1px)*-1)}.ActionListItem.ActionListItem--hasSubItem>.ActionListContent:active .ActionListItem-label:before,.ActionListItem.ActionListItem--hasSubItem>.ActionListContent:active+.ActionListItem .ActionListItem-label:before,.ActionListItem:not(.ActionListItem--hasSubItem):active .ActionListItem-label:before,.ActionListItem:not(.ActionListItem--hasSubItem):active+.ActionListItem .ActionListItem-label:before{visibility:hidden}.ActionListItem[aria-checked=true] .ActionListItem-multiSelectCheckmark,.ActionListItem[aria-selected=true] .ActionListItem-multiSelectCheckmark{opacity:1;transition:visibility 0 linear 0,opacity 50ms;visibility:visible}.ActionListItem[aria-checked=true] .ActionListItem-singleSelectCheckmark,.ActionListItem[aria-selected=true] .ActionListItem-singleSelectCheckmark{visibility:visible}@media screen and (prefers-reduced-motion: no-preference){.ActionListItem[aria-checked=true] .ActionListItem-singleSelectCheckmark,.ActionListItem[aria-selected=true] .ActionListItem-singleSelectCheckmark{animation:checkmarkIn .2s cubic-bezier(0.11, 0, 0.5, 0) forwards}}.ActionListItem[aria-checked=true] .ActionListItem-multiSelectIcon .ActionListItem-multiSelectIconRect,.ActionListItem[aria-selected=true] .ActionListItem-multiSelectIcon .ActionListItem-multiSelectIconRect{fill:var(--color-accent-fg);stroke:var(--color-accent-fg);stroke-width:var(--primer-borderWidth-thin, 1px)}.ActionListItem[aria-checked=true] .ActionListItem-multiSelectIcon .ActionListItem-multiSelectCheckmark,.ActionListItem[aria-selected=true] .ActionListItem-multiSelectIcon .ActionListItem-multiSelectCheckmark{fill:var(--color-fg-on-emphasis)}.ActionListItem[aria-checked=false] .ActionListItem-multiSelectCheckmark,.ActionListItem[aria-selected=false] .ActionListItem-multiSelectCheckmark{opacity:0;transition:visibility 0 linear 50ms,opacity 50ms;visibility:hidden}.ActionListItem[aria-checked=false] .ActionListItem-singleSelectCheckmark,.ActionListItem[aria-selected=false] .ActionListItem-singleSelectCheckmark{clip-path:inset(16px 0 0 0);transition:visibility 0s linear .2s;visibility:hidden}@media screen and (prefers-reduced-motion: no-preference){.ActionListItem[aria-checked=false] .ActionListItem-singleSelectCheckmark,.ActionListItem[aria-selected=false] .ActionListItem-singleSelectCheckmark{animation:checkmarkOut .2s cubic-bezier(0.11, 0, 0.5, 0) forwards}}.ActionListItem[aria-checked=false] .ActionListItem-multiSelectIcon .ActionListItem-multiSelectIconRect,.ActionListItem[aria-selected=false] .ActionListItem-multiSelectIcon .ActionListItem-multiSelectIconRect{fill:var(--color-canvas-default);stroke:var(--color-border-default);stroke-width:var(--primer-borderWidth-thin, 1px)}.ActionListItem[aria-checked=false] .ActionListItem-multiSelectIconRect,.ActionListItem[aria-selected=false] .ActionListItem-multiSelectIconRect{fill:var(--color-canvas-default);border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default)}.ActionListItem[aria-selected=true]{background:var(--color-action-list-item-default-selected-bg);font-weight:var(--base-text-weight-normal, 400)}@media(hover: hover){.ActionListItem[aria-selected=true]:hover{background-color:var(--color-action-list-item-default-hover-bg)}}.ActionListItem[aria-selected=true]+.ActionListItem:before,.ActionListItem[aria-selected=true]:before{visibility:hidden}.ActionListItem[aria-selected=true]:after{background:var(--color-accent-fg);border-radius:var(--primer-borderRadius-medium, 6px);content:"";height:var(--base-size-24, 24px);left:calc(var(--base-size-4, 4px)*-1);position:absolute;top:calc(50% - 12px);width:var(--base-size-4, 4px)}.ActionListItem.ActionListItem--navActive:not(.ActionListItem--subItem) .ActionListItem-label{font-weight:var(--base-text-weight-semibold, 600)}.ActionListItem.ActionListItem--navActive:not(.ActionListItem--danger){background:var(--color-action-list-item-default-selected-bg)}@media(hover: hover){.ActionListItem.ActionListItem--navActive:not(.ActionListItem--danger):hover{background-color:var(--color-action-list-item-default-hover-bg)}}.ActionListItem.ActionListItem--navActive:not(.ActionListItem--danger)+.ActionListItem:before,.ActionListItem.ActionListItem--navActive:not(.ActionListItem--danger):before{visibility:hidden}.ActionListItem.ActionListItem--navActive:not(.ActionListItem--danger):after{background:var(--color-accent-fg);border-radius:var(--primer-borderRadius-medium, 6px);content:"";height:var(--base-size-24, 24px);left:calc(var(--base-size-8, 8px)*-1);position:absolute;top:calc(50% - 12px);width:var(--base-size-4, 4px)}.ActionListItem[aria-disabled=true] .ActionListContent .ActionListItem-description,.ActionListItem[aria-disabled=true] .ActionListContent .ActionListItem-label{color:var(--color-primer-fg-disabled)}.ActionListItem[aria-disabled=true] .ActionListContent .ActionListItem-visual{fill:var(--color-primer-fg-disabled)}@media(hover: hover){.ActionListItem[aria-disabled=true]:hover{background-color:initial;cursor:not-allowed}}.ActionListItem.ActionListItem--danger .ActionListItem-label,.ActionListItem.ActionListItem--danger .ActionListItem-visual{color:var(--color-danger-fg)}@media(hover: hover){.ActionListItem.ActionListItem--danger:hover{background:var(--color-action-list-item-danger-hover-bg)}.ActionListItem.ActionListItem--danger:hover .ActionListItem-label{color:var(--color-action-list-item-danger-hover-text)}}.ActionListItem.ActionListItem--danger .ActionListContent:active{background:var(--color-action-list-item-danger-active-bg)}.ActionListContent{-webkit-tap-highlight-color:transparent;align-items:start;background-color:initial;border:none;border-radius:var(--primer-borderRadius-medium, 6px);color:var(--color-fg-default);display:grid;grid-template-areas:"leadingAction leadingVisual label trailingVisual trailingAction";grid-template-columns:min-content min-content minmax(0, auto) min-content min-content;grid-template-rows:min-content;padding-block:var(--primer-actionListContent-paddingBlock);padding-inline:var(--primer-control-medium-paddingInline-condensed, 8px);position:relative;text-align:left;touch-action:manipulation;transition:background 33.333ms linear;-webkit-user-select:none;user-select:none;width:100%}.ActionListContent>:not(:last-child){margin-right:var(--primer-control-medium-gap, 8px)}.ActionListContent:hover{text-decoration:none}.ActionListContent[aria-disabled=true] .ActionListItem-description,.ActionListContent[aria-disabled=true] .ActionListItem-label{color:var(--color-primer-fg-disabled)}.ActionListContent[aria-disabled=true] .ActionListItem-visual{fill:var(--color-primer-fg-disabled)}@media(hover: hover){.ActionListContent[aria-disabled=true]:hover{background-color:initial;cursor:not-allowed}}@media screen and (prefers-reduced-motion: no-preference){.ActionListContent[aria-expanded]+.ActionList--subGroup{transition:opacity .16s cubic-bezier(0.25, 1, 0.5, 1),transform .16s cubic-bezier(0.25, 1, 0.5, 1)}}.ActionListContent[aria-expanded]+.ActionList--subGroup .ActionListContent{padding-left:var(--base-size-24, 24px)}.ActionListContent.ActionListContent--visual16[aria-expanded]+.ActionList--subGroup .ActionListContent{padding-left:var(--base-size-32, 32px)}.ActionListContent.ActionListContent--visual20[aria-expanded]+.ActionList--subGroup .ActionListContent{padding-left:var(--base-size-36, 36px)}.ActionListContent.ActionListContent--visual24[aria-expanded]+.ActionList--subGroup .ActionListContent{padding-left:var(--base-size-40, 40px)}.ActionListContent[aria-expanded=true] .ActionListItem-collapseIcon{transform:scaleY(-1);transition:transform .12s linear}.ActionListContent[aria-expanded=true]+.ActionList--subGroup{height:auto;opacity:1;overflow:visible;transform:translateY(0);visibility:visible}.ActionListContent.ActionListContent--hasActiveSubItem[aria-expanded=true]>.ActionListItem-label{font-weight:var(--base-text-weight-semibold, 600)}.ActionListContent[aria-expanded=false] .ActionListItem-collapseIcon{transform:scaleY(1);transition:transform .12s linear}.ActionListContent[aria-expanded=false]+.ActionList--subGroup{height:0;opacity:0;overflow:hidden;transform:translateY(calc(var(--base-size-16, 16px) * -1));visibility:hidden}.ActionListContent.ActionListContent--hasActiveSubItem[aria-expanded=false]{background:var(--color-action-list-item-default-selected-bg)}.ActionListContent.ActionListContent--hasActiveSubItem[aria-expanded=false] .ActionListItem-label{font-weight:var(--base-text-weight-semibold, 600)}.ActionListContent.ActionListContent--hasActiveSubItem[aria-expanded=false]+.ActionListItem:before,.ActionListContent.ActionListContent--hasActiveSubItem[aria-expanded=false]:before{visibility:hidden}.ActionListContent.ActionListContent--hasActiveSubItem[aria-expanded=false]:after{background:var(--color-accent-fg);border-radius:var(--primer-borderRadius-medium, 6px);content:"";height:var(--base-size-24, 24px);left:calc(var(--base-size-8, 8px)*-1);position:absolute;top:calc(50% - 12px);width:var(--base-size-4, 4px)}.ActionListContent.ActionListContent--sizeLarge{--primer-actionListContent-paddingBlock:var(--primer-control-large-paddingBlock,0.625rem)}.ActionListContent.ActionListContent--sizeXLarge{--primer-actionListContent-paddingBlock:var(--primer-control-xlarge-paddingBlock,0.875rem)}@media(pointer: coarse){.ActionListContent{--primer-actionListContent-paddingBlock:var(--primer-control-large-paddingBlock,0.625rem)}}.ActionListContent.ActionListContent--blockDescription .ActionListItem-visual{place-self:start}.ActionListItem-action--leading{grid-area:leadingAction}.ActionListItem-visual--leading{grid-area:leadingVisual}.ActionListItem-visual--trailing{grid-area:trailingVisual}.ActionListItem-action--trailing{grid-area:trailingAction}.ActionListItem-descriptionWrap{display:flex;flex-direction:column;gap:var(--base-size-4, 4px);grid-area:label}.ActionListItem-descriptionWrap .ActionListItem-label{font-weight:var(--base-text-weight-semibold, 600)}.ActionListItem-descriptionWrap--inline{align-items:baseline;flex-direction:row;gap:var(--base-size-8, 8px);position:relative}.ActionListItem-description{color:var(--color-fg-muted);font-size:var(--primer-text-body-size-small, 12px);font-weight:var(--base-text-weight-normal, 400);line-height:var(--primer-text-body-lineHeight-small, 1.66667)}.ActionListItem-action,.ActionListItem-visual{fill:var(--color-fg-muted);align-items:center;color:var(--color-fg-muted);display:flex;min-height:var(--primer-control-medium-lineBoxHeight, 20px);pointer-events:none}.ActionListItem-label{color:var(--color-fg-default);font-size:var(--primer-text-body-size-medium, 14px);font-weight:var(--base-text-weight-normal, 400);grid-area:label;line-height:var(--primer-text-body-lineHeight-medium, 1.42857);position:relative}.ActionListItem-label--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ActionListItem--subItem>.ActionListContent>.ActionListItem-label{font-size:var(--primer-text-body-size-small, 12px);line-height:var(--primer-text-body-lineHeight-small, 1.66667)}.ActionListItem--withActions{align-items:center;display:flex;flex-wrap:nowrap}.ActionListItem-trailingAction{border-bottom-left-radius:0;border-top-left-radius:0}.ActionListItem--trailingActionHover .ActionListItem-trailingAction{visibility:hidden}.ActionListItem--trailingActionHover:focus-within .ActionListItem-trailingAction,.ActionListItem--trailingActionHover:hover .ActionListItem-trailingAction{visibility:visible}.ActionList-sectionDivider:not(:empty){color:var(--color-fg-muted);display:flex;flex-direction:column;font-size:var(--primer-text-body-size-small, 12px);font-weight:var(--base-text-weight-semibold, 600);line-height:var(--primer-text-body-lineHeight-small, 1.66667);padding-block:var(--base-size-8, 8px);padding-inline:var(--primer-actionListContent-paddingBlock)}.ActionList-sectionDivider:empty{background:var(--color-action-list-item-inline-divider);border:0;display:block;height:var(--primer-borderWidth-thin, 1px);list-style:none;margin-block-end:var(--base-size-8, 8px);margin-block-start:calc(var(--base-size-8, 8px) - var(--primer-borderWidth-thin, 1px));margin-inline:calc(var(--base-size-8, 8px)*-1);padding:0}.ActionList-sectionDivider .ActionList-sectionDivider-title{color:var(--color-fg-muted);font-size:var(--primer-text-body-size-small, 12px);font-weight:var(--base-text-weight-semibold, 600)}.ActionList-sectionDivider--filled{background:var(--color-canvas-subtle);border-bottom:solid var(--primer-borderWidth-thin, 1px) var(--color-action-list-item-inline-divider);border-top:solid var(--primer-borderWidth-thin, 1px) var(--color-action-list-item-inline-divider);margin-block-end:var(--base-size-8, 8px);margin-block-start:calc(var(--base-size-8, 8px) - var(--primer-borderWidth-thin, 1px));margin-inline:calc(var(--base-size-8, 8px)*-1)}.ActionList-sectionDivider--filled:empty{box-sizing:border-box;height:var(--base-size-8, 8px)}.ActionList-sectionDivider--filled:first-child{margin-block-start:0}.autocomplete-label-stacked{display:block;margin-bottom:6px}.autocomplete-label-inline{display:inline;margin-right:6px}@media(max-width: 543.98px){.autocomplete-label-inline{display:block;margin-bottom:6px}}.autocomplete-body{display:inline;position:relative}.autocomplete-embedded-icon-wrap{align-items:center;display:inline-flex;padding:4px 8px}.autocomplete-embedded-icon-wrap:focus-within{border-color:var(--color-accent-fg);box-shadow:inset 0 0 0 1px var(--color-accent-fg);outline:none}.autocomplete-embedded-icon-wrap .form-control{border:none;box-shadow:none;margin-left:8px;padding:0}.autocomplete-embedded-icon-wrap .form-control:focus{box-shadow:none}.autocomplete-embedded-icon-wrap .form-control:focus-visible{box-shadow:none}.autocomplete-results{background:var(--color-canvas-overlay);border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);border-radius:var(--primer-borderRadius-medium, 6px);box-shadow:var(--color-shadow-medium);font-size:13px;left:0;list-style:none;max-height:20em;min-width:100%;overflow-y:auto;position:absolute;width:max-content;z-index:99}.autocomplete-item{background-color:var(--color-canvas-overlay);border:0;color:var(--color-fg-default);cursor:pointer;display:block;font-weight:var(--base-text-weight-semibold, 600);overflow:hidden;padding:4px 8px;text-align:left;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;width:100%}.autocomplete-item:hover{background-color:var(--color-accent-emphasis);color:var(--color-fg-on-emphasis);text-decoration:none}.autocomplete-item:hover *{color:inherit !important}.autocomplete-item.navigation-focus,.autocomplete-item.selected,.autocomplete-item[aria-selected=true]{background-color:var(--color-accent-emphasis);color:var(--color-fg-on-emphasis);text-decoration:none}.autocomplete-item.navigation-focus *,.autocomplete-item.selected *,.autocomplete-item[aria-selected=true] *{color:inherit !important}.Banner{background-image:linear-gradient(var(--color-accent-subtle), var(--color-accent-subtle));border:var(--primer-borderWidth-thin, max(1px, 0.0625rem)) solid var(--color-accent-muted);border-radius:var(--primer-borderRadius-medium, 6px);color:var(--color-fg-default);display:grid;grid-auto-flow:column;grid-template-areas:"visual message actions close";grid-template-columns:min-content 1fr minmax(0, auto) min-content;grid-template-rows:min-content;padding:var(--base-size-8, 8px);position:relative}@media(max-width: 543.98px){.Banner{grid-template-areas:"visual message close" ". actions actions";grid-template-columns:min-content 1fr min-content;grid-template-rows:min-content min-content}.Banner .Banner-actions{margin:var(--base-size-8, 8px) 0 0 var(--base-size-8, 8px)}}.Banner .Banner-visual{align-self:start;display:grid;grid-area:visual;padding:var(--base-size-6, 6px) var(--base-size-8, 8px)}.Banner .Banner-visual>.octicon{margin-block:calc(var(--base-size-4, 4px)/2)}.Banner .Banner-visual>*{align-self:center}.Banner .Banner-message{align-self:center;grid-area:message;padding:var(--base-size-6, 6px) var(--base-size-8, 8px)}.Banner .Banner-message p:last-child{margin-bottom:0}.Banner .Banner-message .Banner-title:not(:only-child){font-weight:var(--base-text-weight-semibold, 600);margin-bottom:0}.Banner .Banner-actions{grid-area:actions}.Banner .Banner-actions:last-child{align-self:center}.Banner .Banner-close{grid-area:close;margin-left:var(--primer-controlStack-medium-gap-condensed, 8px)}.Banner .Banner-visual .octicon{color:var(--color-accent-fg)}.Banner.Banner--warning{background-image:linear-gradient(var(--color-attention-subtle), var(--color-attention-subtle));border-color:var(--color-attention-muted);color:var(--color-fg-default)}.Banner.Banner--warning .Banner-visual .octicon{color:var(--color-attention-fg)}.Banner.Banner--error{background-image:linear-gradient(var(--color-danger-subtle), var(--color-danger-subtle));border-color:var(--color-danger-muted);color:var(--color-fg-default)}.Banner.Banner--error .Banner-visual .octicon{color:var(--color-danger-fg)}.Banner.Banner--success{background-image:linear-gradient(var(--color-success-subtle), var(--color-success-subtle));border-color:var(--color-success-muted);color:var(--color-fg-default)}.Banner.Banner--success .Banner-visual .octicon{color:var(--color-success-fg)}.Banner.Banner--full{border-left:0;border-radius:0;border-right:0;margin-top:calc(var(--primer-borderWidth-thin, max(1px, 0.0625rem))*-1)}@media(max-width: 767.98px){.Banner.Banner--full-whenNarrow{border-left:0;border-radius:0;border-right:0;margin-top:calc(var(--primer-borderWidth-thin, max(1px, 0.0625rem))*-1)}}.Overlay--hidden{display:none !important}.Overlay--visibilityHidden{height:0;opacity:0;overflow:hidden;visibility:hidden}.Overlay{background-color:var(--color-canvas-overlay);border-radius:var(--primer-borderRadius-large, 12px);box-shadow:var(--color-overlay-shadow);display:flex;flex-direction:column;max-height:min(100vh - 2rem,var(--overlay-height));min-width:192px;opacity:1;white-space:normal;width:min(var(--overlay-width),100vw - 2rem)}.Overlay.Overlay--size-auto{max-height:calc(100vh - 2rem);max-width:calc(100vw - 2rem);min-width:192px}.Overlay.Overlay--size-full{height:100vh;width:100vw}.Overlay.Overlay--size-xsmall{--overlay-width:192px;max-height:calc(100vh - 2rem)}.Overlay.Overlay--size-small{--overlay-height:256px;--overlay-width:320px}.Overlay.Overlay--size-small-portrait{--overlay-height:432px;--overlay-width:320px}.Overlay.Overlay--size-medium{--overlay-height:320px;--overlay-width:480px}.Overlay.Overlay--size-medium-portrait{--overlay-height:600px;--overlay-width:480px}.Overlay.Overlay--size-large{--overlay-height:432px;--overlay-width:640px}.Overlay.Overlay--size-xlarge{--overlay-height:600px;--overlay-width:960px}.Overlay.Overlay--height-auto{height:auto}.Overlay.Overlay--height-xsmall{height:min(192px,100vh - 2rem)}.Overlay.Overlay--height-small{height:min(256px,100vh - 2rem)}.Overlay.Overlay--height-medium{height:min(320px,100vh - 2rem)}.Overlay.Overlay--height-large{height:min(432px,100vh - 2rem)}.Overlay.Overlay--height-xlarge{height:min(600px,100vh - 2rem)}.Overlay.Overlay--width-auto{width:auto}.Overlay.Overlay--width-small{width:min(256px,100vw - 2rem)}.Overlay.Overlay--width-medium{width:min(320px,100vw - 2rem)}.Overlay.Overlay--width-large{width:min(480px,100vw - 2rem)}.Overlay.Overlay--width-xlarge{width:min(640px,100vw - 2rem)}.Overlay.Overlay--width-xxlarge{width:min(960px,100vw - 2rem)}@media screen and (prefers-reduced-motion: no-preference){.Overlay.Overlay--motion-scaleFade{animation:Overlay--motion-scaleFade .2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running}}@keyframes Overlay--motion-scaleFade{0%{opacity:0;transform:scale(0.5)}to{opacity:1;transform:scale(1)}}.Overlay-form{flex-grow:1;overflow:auto}.Overlay-form,.Overlay-header{display:flex;flex-direction:column}.Overlay-header{z-index:1}.Overlay-header.Overlay-header--divided{box-shadow:inset 0 calc(var(--primer-borderWidth-thin, 1px)*-1) var(--color-border-default);padding-bottom:var(--primer-stack-padding-condensed, 8px)}.Overlay-header.Overlay-header--divided+.Overlay-body{padding-top:var(--primer-stack-padding-normal, 16px)}.Overlay-header.Overlay-header--large .Overlay-headerContentWrap .Overlay-titleWrap{gap:var(--primer-stack-gap-condensed, 8px)}.Overlay-header.Overlay-header--large .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-title{font-size:var(--primer-text-title-size-medium, 20px)}.Overlay-header.Overlay-header--large .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-description{font-size:var(--primer-text-body-size-medium, 14px)}.Overlay-header .Overlay-headerContentWrap{align-items:flex-start;display:flex;gap:var(--primer-stack-gap-condensed, 8px);padding:var(--primer-stack-gap-condensed, 8px) var(--primer-stack-gap-condensed, 8px) 0 var(--primer-stack-gap-condensed, 8px)}.Overlay-header .Overlay-headerContentWrap .Overlay-actionWrap{display:flex;flex-direction:row;gap:var(--primer-stack-gap-condensed, 8px)}.Overlay-header .Overlay-headerContentWrap .Overlay-titleWrap{display:flex;flex-direction:column;flex-grow:1;gap:var(--primer-control-small-gap, 4px);padding:calc(var(--primer-stack-gap-condensed, 8px)*.75) 0 calc(var(--primer-stack-gap-condensed, 8px)*.75) var(--primer-stack-gap-condensed, 8px)}.Overlay-header .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-title{font-size:var(--primer-text-body-size-medium, 14px);font-weight:var(--base-text-weight-semibold, 600);margin:0}.Overlay-header .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-description{color:var(--color-fg-muted);font-size:var(--primer-text-body-size-small, 12px);font-weight:var(--base-text-weight-normal, 400);margin:0}.Overlay-body{flex-grow:1;font-size:var(--primer-text-body-size-medium, 14px);overflow-y:auto;padding:var(--primer-stack-padding-normal, 16px);padding-top:0;scrollbar-width:thin}.Overlay-body.Overlay-body--paddingCondensed{padding:var(--primer-stack-padding-condensed, 8px);padding-top:0}.Overlay-body.Overlay-body--paddingNone{padding:0}.Overlay-footer{display:flex;flex-direction:row;flex-shrink:0;flex-wrap:wrap;padding:0 var(--primer-stack-padding-normal, 16px) var(--primer-stack-padding-normal, 16px) var(--primer-stack-padding-normal, 16px);z-index:1}.Overlay-footer.Overlay-footer--divided{box-shadow:inset 0 var(--primer-borderWidth-thin, 1px) var(--color-border-default);padding-top:var(--primer-stack-padding-normal, 16px)}.Overlay-footer.Overlay-footer--alignStart{gap:var(--primer-stack-gap-condensed, 8px);justify-content:flex-start}.Overlay-footer.Overlay-footer--alignCenter{gap:var(--primer-stack-gap-condensed, 8px);justify-content:center}.Overlay-footer.Overlay-footer--alignEnd{gap:var(--primer-stack-gap-condensed, 8px);justify-content:flex-end}.Overlay-closeButton{align-self:flex-start;background-color:initial;border:var(--primer-borderWidth-thin, 1px) solid #0000;border-radius:var(--primer-borderRadius-medium, 6px);color:var(--color-fg-muted);cursor:pointer;display:grid;flex-shrink:0;height:var(--base-size-32, 32px);padding:0;place-content:center;position:relative;transition:.2s cubic-bezier(0.3, 0, 0.5, 1);transition-property:color,background-color,border-color;-webkit-user-select:none;user-select:none;width:var(--base-size-32, 32px)}.Overlay-closeButton:focus,.Overlay-closeButton:hover{background-color:var(--color-btn-hover-bg);border:var(--primer-borderWidth-thin, 1px) solid var(--color-btn-hover-bg)}.Overlay-closeButton.close-button{border:var(--primer-borderWidth-thin, 1px) solid #0000}.Overlay-backdrop--center{align-items:center;background-color:var(--color-neutral-muted);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--anchor{background-color:initial;position:absolute;z-index:999}.Overlay-backdrop--anchor .Overlay{width:auto}.Overlay-backdrop--side{background-color:var(--color-neutral-muted);bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--side,.Overlay-backdrop--side.Overlay-backdrop--placement-left{align-items:center;justify-content:left}.Overlay-backdrop--side.Overlay-backdrop--placement-left>.Overlay{border-radius:var(--primer-borderRadius-large, 12px);border-bottom-left-radius:0;border-top-left-radius:0;height:100vh;max-height:unset}@media screen and (prefers-reduced-motion: no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-left>.Overlay{animation:Overlay--motion-slideInRight .25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running}}.Overlay-backdrop--side.Overlay-backdrop--placement-right{align-items:center;justify-content:right}.Overlay-backdrop--side.Overlay-backdrop--placement-right>.Overlay{border-radius:var(--primer-borderRadius-large, 12px);border-bottom-right-radius:0;border-top-right-radius:0;height:100vh;max-height:unset}@media screen and (prefers-reduced-motion: no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-right>.Overlay{animation:Overlay--motion-slideInLeft .25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running}}.Overlay-backdrop--side.Overlay-backdrop--placement-bottom{align-items:end;justify-content:center}.Overlay-backdrop--side.Overlay-backdrop--placement-bottom>.Overlay{border-radius:var(--primer-borderRadius-large, 12px);border-bottom-left-radius:0;border-bottom-right-radius:0;height:auto;max-height:calc(100vh - 2rem);width:100vw}@media screen and (prefers-reduced-motion: no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-bottom>.Overlay{animation:Overlay--motion-slideUp .25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running}}.Overlay-backdrop--side.Overlay-backdrop--placement-top{align-items:start;justify-content:center}.Overlay-backdrop--side.Overlay-backdrop--placement-top>.Overlay{border-radius:var(--primer-borderRadius-large, 12px);border-top-left-radius:0;border-top-right-radius:0}@media screen and (prefers-reduced-motion: no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-top>.Overlay{animation:Overlay--motion-slideDown .25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running}}.Overlay-backdrop--full{background-color:var(--color-neutral-muted);bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--full .Overlay{border-radius:unset !important;flex-grow:1;height:100%;max-height:100vh;max-width:100vw;width:100%}@media(max-width: 767px){.Overlay-backdrop--center-whenNarrow{align-items:center;background-color:var(--color-neutral-muted);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--anchor-whenNarrow{background-color:initial;position:absolute;z-index:999}.Overlay-backdrop--anchor-whenNarrow .Overlay{width:auto}.Overlay-backdrop--side-whenNarrow{background-color:var(--color-neutral-muted);bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--side-whenNarrow,.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-left-whenNarrow{align-items:center;justify-content:left}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-left-whenNarrow>.Overlay-whenNarrow{border-radius:var(--primer-borderRadius-large, 12px);border-bottom-left-radius:0;border-top-left-radius:0;height:100vh;max-height:unset}}@media screen and (max-width: 767px)and (prefers-reduced-motion: no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-left-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideInRight .25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running}}@media(max-width: 767px){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-right-whenNarrow{align-items:center;justify-content:right}}@media(max-width: 767px){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-right-whenNarrow>.Overlay-whenNarrow{border-radius:var(--primer-borderRadius-large, 12px);border-bottom-right-radius:0;border-top-right-radius:0;height:100vh;max-height:unset}}@media screen and (max-width: 767px)and (prefers-reduced-motion: no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-right-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideInLeft .25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running}}@media(max-width: 767px){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-bottom-whenNarrow{align-items:end;justify-content:center}}@media(max-width: 767px){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-bottom-whenNarrow>.Overlay-whenNarrow{border-radius:var(--primer-borderRadius-large, 12px);border-bottom-left-radius:0;border-bottom-right-radius:0;height:auto;max-height:calc(100vh - 2rem);width:100vw}}@media screen and (max-width: 767px)and (prefers-reduced-motion: no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-bottom-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideUp .25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running}}@media(max-width: 767px){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-top-whenNarrow{align-items:start;justify-content:center}}@media(max-width: 767px){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-top-whenNarrow>.Overlay-whenNarrow{border-radius:var(--primer-borderRadius-large, 12px);border-top-left-radius:0;border-top-right-radius:0}}@media screen and (max-width: 767px)and (prefers-reduced-motion: no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-top-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideDown .25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running}}@media(max-width: 767px){.Overlay-backdrop--full-whenNarrow{background-color:var(--color-neutral-muted);bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}}@media(max-width: 767px){.Overlay-backdrop--full-whenNarrow .Overlay{border-radius:unset !important;flex-grow:1;height:100%;max-height:100vh;max-width:100vw;width:100%}}@keyframes Overlay--motion-slideDown{0%{transform:translateY(-100%)}}@keyframes Overlay--motion-slideUp{0%{transform:translateY(100%)}}@keyframes Overlay--motion-slideInRight{0%{transform:translateX(-100%)}}@keyframes Overlay--motion-slideInLeft{0%{transform:translateX(100%)}}.dropdown{position:relative}.dropdown-caret{border-bottom-color:#0000;border-left-color:#0000;border-right-color:#0000;border-style:solid;border-width:var(--primer-borderWidth-thicker, 4px) var(--primer-borderWidth-thicker, 4px) 0;content:"";display:inline-block;height:0;vertical-align:middle;width:0}.dropdown-menu{background-clip:padding-box;background-color:var(--color-canvas-overlay);border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);border-radius:var(--primer-borderRadius-medium, 6px);box-shadow:var(--color-shadow-large);left:0;list-style:none;margin-top:2px;padding-bottom:var(--primer-control-small-paddingBlock, 4px);padding-top:var(--primer-control-small-paddingBlock, 4px);position:absolute;top:100%;width:160px;z-index:100}.dropdown-menu:after,.dropdown-menu:before{content:"";display:inline-block;position:absolute}.dropdown-menu:before{border:8px solid #0000;border-bottom:8px solid var(--color-border-default)}.dropdown-menu:after{border:7px solid #0000;border-bottom:7px solid var(--color-canvas-overlay)}.dropdown-menu>ul{list-style:none}.dropdown-menu-no-overflow{width:auto}.dropdown-menu-no-overflow .dropdown-item{overflow:visible;padding:var(--primer-control-small-paddingBlock, 4px) var(--primer-control-medium-paddingInline-spacious, 16px);text-overflow:inherit}.dropdown-item{color:var(--color-fg-default);display:block;overflow:hidden;padding:var(--primer-control-small-paddingBlock, 4px) var(--primer-control-medium-paddingInline-condensed, 8px) var(--primer-control-small-paddingBlock, 4px) var(--primer-control-medium-paddingInline-spacious, 16px);text-overflow:ellipsis;white-space:nowrap}.dropdown-item:hover{background-color:var(--color-accent-emphasis);color:var(--color-fg-on-emphasis);text-decoration:none}.dropdown-item:hover>.octicon{color:inherit;opacity:1}.dropdown-item:hover [class*=color-fg-],.dropdown-item:hover>.Label{color:inherit !important}.dropdown-item:hover>.Label{border-color:currentcolor}.dropdown-item.btn-link,.dropdown-signout{text-align:left;width:100%}.dropdown-signout{background:none;border:0}.dropdown-divider{border-top:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);display:block;height:0;margin:var(--primer-stack-gap-condensed, 8px) 0}.dropdown-header{color:var(--color-fg-muted);font-size:var(--primer-text-body-size-small, 12px);padding:var(--primer-control-small-paddingBlock, 4px) var(--primer-control-medium-paddingInline-spacious, 16px)}.dropdown-item[aria-checked=false] .octicon-check{display:none}.dropdown-menu-w{left:auto;margin-right:8px;margin-top:0;right:100%;top:0;width:auto}.dropdown-menu-w:before{border-color:#0000;border-left-color:var(--color-border-default);left:auto;right:-16px;top:10px}.dropdown-menu-w:after{border-color:#0000;border-left-color:var(--color-canvas-overlay);left:auto;right:-14px;top:11px}.dropdown-menu-e{left:100%;margin-left:8px;margin-top:0;top:0;width:auto}.dropdown-menu-e:before{border-color:#0000;border-right-color:var(--color-border-default);left:-16px;top:10px}.dropdown-menu-e:after{border-color:#0000;border-right-color:var(--color-canvas-overlay);left:-14px;top:11px}.dropdown-menu-ne{bottom:100%;left:0;margin-bottom:3px;top:auto}.dropdown-menu-ne:after,.dropdown-menu-ne:before{right:auto;top:auto}.dropdown-menu-ne:before{border-bottom:0;border-left:8px solid #0000;border-right:8px solid #0000;border-top:8px solid var(--color-border-default);bottom:-8px;left:9px}.dropdown-menu-ne:after{border-bottom:0;border-left:7px solid #0000;border-right:7px solid #0000;border-top:7px solid var(--color-canvas-overlay);bottom:-7px;left:10px}.dropdown-menu-s{left:auto;right:50%;transform:translateX(50%)}.dropdown-menu-s:before{right:50%;top:-16px;transform:translateX(50%)}.dropdown-menu-s:after{right:50%;top:-14px;transform:translateX(50%)}.dropdown-menu-sw{left:auto;right:0}.dropdown-menu-sw:before{left:auto;right:9px;top:-16px}.dropdown-menu-sw:after{left:auto;right:10px;top:-14px}.dropdown-menu-se:before{left:9px;top:-16px}.dropdown-menu-se:after{left:10px;top:-14px}.Layout{--Layout-sidebar-width:220px;--Layout-gutter:16px;display:grid}@media(max-width: 543.98px){.Layout{grid-auto-flow:row;grid-template-columns:1fr !important}.Layout .Layout-divider,.Layout .Layout-main,.Layout .Layout-sidebar{grid-column:1 !important;width:100% !important}.Layout.Layout--sidebarPosition-flowRow-start .Layout-sidebar{grid-row:1}.Layout.Layout--sidebarPosition-flowRow-end .Layout-sidebar,.Layout.Layout--sidebarPosition-flowRow-start .Layout-main{grid-row:2/span 2}.Layout.Layout--sidebarPosition-flowRow-end .Layout-main{grid-row:1}.Layout.Layout--sidebarPosition-flowRow-none .Layout-sidebar{display:none}.Layout.Layout--divided{--Layout-gutter:0}.Layout.Layout--divided .Layout-divider{grid-row:2;height:1px}.Layout.Layout--divided .Layout-divider.Layout-divider--flowRow-hidden{display:none}.Layout.Layout--divided .Layout-divider.Layout-divider--flowRow-shallow{background:var(--color-canvas-inset);border-color:var(--color-border-default);border-style:solid;border-width:var(--primer-borderWidth-thin, 1px) 0;height:8px;margin-right:0}.Layout.Layout--divided .Layout-main,.Layout.Layout--divided.Layout--sidebarPosition-flowRow-end .Layout-sidebar{grid-row:3/span 1}.Layout.Layout--divided.Layout--sidebarPosition-flowRow-end .Layout-main{grid-row:1}}@media(max-width: 767.98px){.Layout.Layout--flowRow-until-md{grid-auto-flow:row;grid-template-columns:1fr !important}.Layout.Layout--flowRow-until-md .Layout-divider,.Layout.Layout--flowRow-until-md .Layout-main,.Layout.Layout--flowRow-until-md .Layout-sidebar{grid-column:1 !important;width:100% !important}.Layout.Layout--flowRow-until-md.Layout--sidebarPosition-flowRow-start .Layout-sidebar{grid-row:1}.Layout.Layout--flowRow-until-md.Layout--sidebarPosition-flowRow-end .Layout-sidebar,.Layout.Layout--flowRow-until-md.Layout--sidebarPosition-flowRow-start .Layout-main{grid-row:2/span 2}.Layout.Layout--flowRow-until-md.Layout--sidebarPosition-flowRow-end .Layout-main{grid-row:1}.Layout.Layout--flowRow-until-md.Layout--sidebarPosition-flowRow-none .Layout-sidebar{display:none}.Layout.Layout--flowRow-until-md.Layout--divided{--Layout-gutter:0}.Layout.Layout--flowRow-until-md.Layout--divided .Layout-divider{grid-row:2;height:1px}.Layout.Layout--flowRow-until-md.Layout--divided .Layout-divider.Layout-divider--flowRow-hidden{display:none}.Layout.Layout--flowRow-until-md.Layout--divided .Layout-divider.Layout-divider--flowRow-shallow{background:var(--color-canvas-inset);border-color:var(--color-border-default);border-style:solid;border-width:var(--primer-borderWidth-thin, 1px) 0;height:8px;margin-right:0}.Layout.Layout--flowRow-until-md.Layout--divided .Layout-main,.Layout.Layout--flowRow-until-md.Layout--divided.Layout--sidebarPosition-flowRow-end .Layout-sidebar{grid-row:3/span 1}.Layout.Layout--flowRow-until-md.Layout--divided.Layout--sidebarPosition-flowRow-end .Layout-main{grid-row:1}}@media(max-width: 1011.98px){.Layout.Layout--flowRow-until-lg{grid-auto-flow:row;grid-template-columns:1fr !important}.Layout.Layout--flowRow-until-lg .Layout-divider,.Layout.Layout--flowRow-until-lg .Layout-main,.Layout.Layout--flowRow-until-lg .Layout-sidebar{grid-column:1 !important;width:100% !important}.Layout.Layout--flowRow-until-lg.Layout--sidebarPosition-flowRow-start .Layout-sidebar{grid-row:1}.Layout.Layout--flowRow-until-lg.Layout--sidebarPosition-flowRow-end .Layout-sidebar,.Layout.Layout--flowRow-until-lg.Layout--sidebarPosition-flowRow-start .Layout-main{grid-row:2/span 2}.Layout.Layout--flowRow-until-lg.Layout--sidebarPosition-flowRow-end .Layout-main{grid-row:1}.Layout.Layout--flowRow-until-lg.Layout--sidebarPosition-flowRow-none .Layout-sidebar{display:none}.Layout.Layout--flowRow-until-lg.Layout--divided{--Layout-gutter:0}.Layout.Layout--flowRow-until-lg.Layout--divided .Layout-divider{grid-row:2;height:1px}.Layout.Layout--flowRow-until-lg.Layout--divided .Layout-divider.Layout-divider--flowRow-hidden{display:none}.Layout.Layout--flowRow-until-lg.Layout--divided .Layout-divider.Layout-divider--flowRow-shallow{background:var(--color-canvas-inset);border-color:var(--color-border-default);border-style:solid;border-width:var(--primer-borderWidth-thin, 1px) 0;height:8px;margin-right:0}.Layout.Layout--flowRow-until-lg.Layout--divided .Layout-main,.Layout.Layout--flowRow-until-lg.Layout--divided.Layout--sidebarPosition-flowRow-end .Layout-sidebar{grid-row:3/span 1}.Layout.Layout--flowRow-until-lg.Layout--divided.Layout--sidebarPosition-flowRow-end .Layout-main{grid-row:1}}.Layout{grid-gap:var(--Layout-gutter);grid-auto-flow:column;grid-template-columns:auto 0 minmax(0, calc(100% - var(--Layout-sidebar-width) - var(--Layout-gutter)))}.Layout .Layout-sidebar{grid-column:1}.Layout .Layout-divider{display:none}.Layout .Layout-main{grid-column:2/span 2}@media(min-width: 1012px){.Layout{--Layout-gutter:24px}}.Layout.Layout--gutter-none{--Layout-gutter:0px}.Layout.Layout--gutter-condensed{--Layout-gutter:16px}@media(min-width: 1012px){.Layout.Layout--gutter-spacious{--Layout-gutter:32px}}@media(min-width: 1280px){.Layout.Layout--gutter-spacious{--Layout-gutter:40px}}@media(min-width: 544px){.Layout{--Layout-sidebar-width:220px}}@media(min-width: 768px){.Layout{--Layout-sidebar-width:256px}}@media(min-width: 1012px){.Layout{--Layout-sidebar-width:296px}}@media(min-width: 768px){.Layout.Layout--sidebar-narrow{--Layout-sidebar-width:240px}}@media(min-width: 1012px){.Layout.Layout--sidebar-narrow{--Layout-sidebar-width:256px}.Layout.Layout--sidebar-wide{--Layout-sidebar-width:320px}}@media(min-width: 1280px){.Layout.Layout--sidebar-wide{--Layout-sidebar-width:336px}}.Layout.Layout--sidebarPosition-start .Layout-sidebar{grid-column:1}.Layout.Layout--sidebarPosition-start .Layout-main{grid-column:2/span 2}.Layout.Layout--sidebarPosition-end{grid-template-columns:minmax(0, calc(100% - var(--Layout-sidebar-width) - var(--Layout-gutter))) 0 auto}.Layout.Layout--sidebarPosition-end .Layout-main{grid-column:1}.Layout.Layout--sidebarPosition-end .Layout-sidebar{grid-column:2/span 2}.Layout.Layout--divided .Layout-divider{background:var(--color-border-default);display:block;grid-column:2;margin-right:-1px;width:1px}.Layout.Layout--divided .Layout-main,.Layout.Layout--divided.Layout--sidebarPosition-end .Layout-sidebar{grid-column:3/span 1}.Layout.Layout--divided.Layout--sidebarPosition-end .Layout-main{grid-column:1}.Layout-divider{display:none;width:1px}.Layout-sidebar{width:var(--Layout-sidebar-width)}.Layout-main{min-width:0}.Layout-main .Layout-main-centered-lg,.Layout-main .Layout-main-centered-md,.Layout-main .Layout-main-centered-xl{margin-left:auto;margin-right:auto}.Layout-main .Layout-main-centered-lg>.container-lg,.Layout-main .Layout-main-centered-lg>.container-md,.Layout-main .Layout-main-centered-lg>.container-xl,.Layout-main .Layout-main-centered-md>.container-lg,.Layout-main .Layout-main-centered-md>.container-md,.Layout-main .Layout-main-centered-md>.container-xl,.Layout-main .Layout-main-centered-xl>.container-lg,.Layout-main .Layout-main-centered-xl>.container-md,.Layout-main .Layout-main-centered-xl>.container-xl{margin-left:0}.Layout-main .Layout-main-centered-md{max-width:calc(var(--primer-breakpoint-medium, 768px) + var(--Layout-sidebar-width) + var(--Layout-gutter))}.Layout-main .Layout-main-centered-lg{max-width:calc(var(--primer-breakpoint-large, 1012px) + var(--Layout-sidebar-width) + var(--Layout-gutter))}.Layout-main .Layout-main-centered-xl{max-width:calc(var(--primer-breakpoint-xlarge, 1280px) + var(--Layout-sidebar-width) + var(--Layout-gutter))}.tabnav{border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);margin-bottom:var(--primer-stack-gap-normal, 16px);margin-top:0}.tabnav-tabs{display:flex;margin-bottom:calc(var(--primer-borderWidth-thin, 1px)*-1);overflow:auto}.tabnav-tab{background-color:initial;border:var(--primer-borderWidth-thin, 1px) solid #0000;border-bottom:0;color:var(--color-fg-muted);display:inline-block;flex-shrink:0;font-size:var(--primer-text-body-size-medium, 14px);line-height:23px;padding:var(--base-size-8, 8px) var(--primer-control-medium-paddingInline-spacious, 16px);text-decoration:none;transition:color .2s cubic-bezier(0.3, 0, 0.5, 1)}.tabnav-tab.selected,.tabnav-tab[aria-current]:not([aria-current=false]),.tabnav-tab[aria-selected=true]{background-color:var(--color-canvas-default);border-color:var(--color-border-default);border-radius:var(--primer-borderRadius-medium, 6px) var(--primer-borderRadius-medium, 6px) 0 0;color:var(--color-fg-default)}.tabnav-tab.selected .octicon,.tabnav-tab[aria-current]:not([aria-current=false]) .octicon,.tabnav-tab[aria-selected=true] .octicon{color:inherit}.tabnav-tab:hover{color:var(--color-fg-default);text-decoration:none;transition-duration:.1s}.tabnav-tab:focus,.tabnav-tab:focus-visible{border-radius:var(--primer-borderRadius-medium, 6px) var(--primer-borderRadius-medium, 6px) 0 0 !important}.tabnav-tab:focus,.tabnav-tab:focus-visible{outline-offset:-6px}.tabnav-tab .octicon,.tabnav-tab:active{color:var(--color-fg-muted)}.tabnav-tab .octicon{margin-right:var(--primer-control-small-gap, 4px)}.tabnav-tab .Counter{color:inherit;margin-left:var(--primer-control-small-gap, 4px)}.tabnav-extra{color:var(--color-fg-muted);display:inline-block;font-size:var(--primer-text-body-size-small, 12px);margin-left:10px;padding-top:10px}.tabnav-extra>.octicon{margin-right:2px}a.tabnav-extra:hover{color:var(--color-accent-fg);text-decoration:none}.tabnav-btn{margin-left:var(--primer-controlStack-medium-gap-condensed, 8px)}.FormControl{display:inline-flex;flex-direction:column;gap:var(--base-size-4, 4px)}.FormControl--fullWidth{display:flex}.FormControl-label{color:var(--color-fg-default);font-size:var(--primer-text-body-size-medium, 14px);font-weight:var(--base-text-weight-semibold, 600);line-height:var(--primer-text-body-lineHeight-medium, 1.42857);-webkit-user-select:none;user-select:none}.FormControl-caption{color:var(--color-fg-muted);font-size:var(--primer-text-caption-size, 12px);font-weight:var(--primer-text-caption-weight, 400);line-height:var(--primer-text-caption-lineHeight, 1.33333);margin-bottom:0}.FormControl-inlineValidation{fill:var(--color-danger-fg);align-items:center;color:var(--color-danger-fg);display:flex;flex-direction:row;font-size:var(--primer-text-caption-size, 12px);font-weight:var(--base-text-weight-semibold, 600);gap:var(--base-size-4, 4px)}.FormControl-inlineValidation p{margin-bottom:0}.FormControl-input,.FormControl-select,.FormControl-textarea{background-color:var(--color-canvas-default);border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);color:var(--color-fg-default)}.FormControl-input[disabled],.FormControl-select[disabled],.FormControl-textarea[disabled]{-webkit-text-fill-color:var(--color-primer-fg-disabled);background-color:var(--color-input-disabled-bg);border-color:var(--color-border-default);color:var(--color-primer-fg-disabled);cursor:not-allowed;opacity:1}.FormControl-input[invalid]:not(:focus),.FormControl-select[invalid]:not(:focus),.FormControl-textarea[invalid]:not(:focus){border-color:var(--color-danger-emphasis)}.FormControl-input:not([type=checkbox],[type=radio]):focus,.FormControl-select:not([type=checkbox],[type=radio]):focus,.FormControl-textarea:not([type=checkbox],[type=radio]):focus{border-color:var(--color-accent-fg);box-shadow:inset 0 0 0 1px var(--color-accent-fg);outline:none}.FormControl-input:not([type=checkbox],[type=radio]):focus:not(:focus-visible),.FormControl-select:not([type=checkbox],[type=radio]):focus:not(:focus-visible),.FormControl-textarea:not([type=checkbox],[type=radio]):focus:not(:focus-visible){border-color:#0000;border-color:var(--color-accent-fg);box-shadow:inset 0 0 0 1px #0000 var(--color-accent-fg);outline:none}.FormControl-input:not([type=checkbox],[type=radio]):focus-visible,.FormControl-select:not([type=checkbox],[type=radio]):focus-visible,.FormControl-textarea:not([type=checkbox],[type=radio]):focus-visible{border-color:var(--color-accent-fg);box-shadow:inset 0 0 0 1px var(--color-accent-fg);outline:none}.FormControl-input,.FormControl-select,.FormControl-textarea{border-radius:var(--primer-borderRadius-medium, 6px);font-size:var(--primer-text-body-size-medium, 14px);line-height:var(--primer-text-body-lineHeight-medium, 1.42857);padding-block:calc(var(--primer-control-medium-paddingBlock, 6px) - var(--primer-borderWidth-thin, 1px));padding-inline:var(--primer-control-medium-paddingInline-condensed, 8px);transition:80ms cubic-bezier(0.33, 1, 0.68, 1);transition-property:color,background-color,box-shadow,border-color;width:100%}.FormControl-input[disabled]::placeholder,.FormControl-select[disabled]::placeholder,.FormControl-textarea[disabled]::placeholder{color:var(--color-primer-fg-disabled)}.FormControl-input[readonly],.FormControl-select[readonly],.FormControl-textarea[readonly]{background-color:var(--color-input-disabled-bg)}.FormControl-input::placeholder,.FormControl-select::placeholder,.FormControl-textarea::placeholder{color:var(--color-fg-subtle);opacity:1}.FormControl-input.FormControl-small,.FormControl-select.FormControl-small,.FormControl-textarea.FormControl-small{font-size:var(--primer-text-body-size-small, 12px);height:var(--primer-control-small-size, 28px);padding-block:var(--primer-control-small-paddingBlock, 4px);padding-inline:var(--primer-control-small-paddingInline-normal, 8px)}.FormControl-input.FormControl-medium,.FormControl-select.FormControl-medium,.FormControl-textarea.FormControl-medium{height:var(--primer-control-medium-size, 32px)}.FormControl-input.FormControl-large,.FormControl-select.FormControl-large,.FormControl-textarea.FormControl-large{height:var(--primer-control-large-size, 40px);padding-block:var(--primer-control-large-paddingBlock, 10px);padding-inline:var(--primer-control-large-paddingInline-normal, 12px)}.FormControl-input.FormControl-inset,.FormControl-select.FormControl-inset,.FormControl-textarea.FormControl-inset{background-color:var(--color-canvas-inset)}.FormControl-input.FormControl-inset:focus,.FormControl-input.FormControl-inset:focus-visible,.FormControl-select.FormControl-inset:focus,.FormControl-select.FormControl-inset:focus-visible,.FormControl-textarea.FormControl-inset:focus,.FormControl-textarea.FormControl-inset:focus-visible{background-color:var(--color-canvas-default)}.FormControl-input.FormControl-monospace,.FormControl-select.FormControl-monospace,.FormControl-textarea.FormControl-monospace{font-family:var(--primer-fontStack-monospace, "ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace")}.FormControl-input.FormControl-error,.FormControl-select.FormControl-error,.FormControl-textarea.FormControl-error{border-color:var(--color-danger-emphasis)}.FormControl-input.FormControl-success,.FormControl-select.FormControl-success,.FormControl-textarea.FormControl-success{border-color:var(--color-success-emphasis)}.FormControl-input.FormControl-warning,.FormControl-select.FormControl-warning,.FormControl-textarea.FormControl-warning{border-color:var(--color-attention-emphasis)}.FormControl-input-wrap{display:grid;position:relative}.FormControl-input-wrap .FormControl-input-leadingVisualWrap{color:var(--color-fg-muted);display:block;height:var(--base-size-16, 16px);left:var(--base-size-8, 8px);pointer-events:none;position:absolute;top:var(--base-size-8, 8px);width:var(--base-size-16, 16px)}.FormControl-input-wrap .FormControl-input-leadingVisualWrap .FormControl-input-leadingVisual{display:block;-webkit-user-select:none;user-select:none}.FormControl-input-wrap .FormControl-input-trailingAction{align-items:center;background:#0000;border:0;border-radius:var(--primer-borderRadius-small);color:var(--color-fg-muted);cursor:pointer;display:grid;height:var(--primer-control-xsmall-size, 24px);justify-content:center;padding:0;position:absolute;right:var(--base-size-4, 4px);top:var(--base-size-4, 4px);transition:.2s cubic-bezier(0.3, 0, 0.5, 1);transition-property:color,background-color,border-color;width:var(--primer-control-xsmall-size, 24px);z-index:4}.FormControl-input-wrap .FormControl-input-trailingAction svg{-webkit-user-select:none;user-select:none}.FormControl-input-wrap .FormControl-input-trailingAction[disabled]{color:var(--color-primer-fg-disabled);pointer-events:none}.FormControl-input-wrap .FormControl-input-trailingAction:hover{background:var(--color-action-list-item-default-hover-bg)}.FormControl-input-wrap .FormControl-input-trailingAction:active{background:var(--color-action-list-item-default-active-bg)}.FormControl-input-wrap .FormControl-input-trailingAction.FormControl-input-trailingAction--divider:before{background:var(--color-border-default);content:"";display:block;height:var(--base-size-16);left:calc(var(--base-size-4, 4px)*-1);position:absolute;top:calc((var(--primer-control-xsmall-size) - var(--base-size-16))/2);width:var(--primer-borderWidth-thin)}.FormControl-input-wrap .FormControl-input-trailingAction:after{content:"";height:100%;left:50%;min-height:var(--primer-control-medium-size, 32px) var(--primer-control-medium-size, 32px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}@media(pointer: coarse){.FormControl-input-wrap .FormControl-input-trailingAction:after{min-height:var(--primer-control-minTarget-coarse, 44px);min-width:var(--primer-control-minTarget-coarse, 44px)}}.FormControl-input-wrap.FormControl-input-wrap--leadingVisual .FormControl-input{padding-inline-start:calc(var(--primer-control-medium-paddingInline-condensed, 8px) + var(--base-size-16, 16px) + var(--primer-control-medium-gap, 8px))}.FormControl-input-wrap.FormControl-input-wrap--trailingAction .FormControl-input{padding-inline-end:calc(var(--primer-control-medium-paddingInline-condensed, 8px) + var(--base-size-16, 16px) + var(--primer-control-medium-gap, 8px))}.FormControl-input-wrap.FormControl-input-wrap--trailingAction.FormControl-input-wrap-trailingAction--divider .FormControl-input{padding-inline-end:calc(var(--primer-control-medium-paddingInline-condensed, 8px) + var(--base-size-16, 16px) + var(--primer-control-medium-gap, 8px) + var(--primer-borderWidth-thin, 1px))}.FormControl-input-wrap.FormControl-small .FormControl-input-leadingVisualWrap{left:calc(var(--primer-control-medium-paddingInline-condensed, 8px) - .125rem);top:calc(var(--primer-control-medium-paddingInline-condensed, 8px) - .125rem)}.FormControl-input-wrap.FormControl-small.FormControl-input-wrap--trailingAction .FormControl-input.FormControl-small{padding-inline-end:calc(var(--primer-control-small-paddingInline-condensed, 8px) + var(--base-size-16, 16px) + var(--primer-control-small-gap, 8px))}.FormControl-input-wrap.FormControl-small.FormControl-input-wrap--trailingAction.FormControl-input-wrap-trailingAction--divider .FormControl-input.FormControl-small{padding-inline-end:calc(var(--primer-control-small-paddingInline-condensed, 8px) + var(--base-size-16, 16px) + var(--primer-control-small-gap, 8px) + var(--primer-borderWidth-thin, 1px))}.FormControl-input-wrap.FormControl-small .FormControl-input-trailingAction{height:calc(var(--primer-control-small-size, 28px) - var(--base-size-8, 8px));width:calc(var(--primer-control-small-size, 28px) - var(--base-size-8, 8px))}.FormControl-input-wrap.FormControl-small .FormControl-input-trailingAction:before{top:calc((var(--primer-control-xsmall-size) - var(--base-size-16))/4)}.FormControl-input-wrap.FormControl-large .FormControl-input-leadingVisualWrap{left:var(--primer-control-medium-paddingInline-normal, 12px);top:var(--primer-control-medium-paddingInline-normal, 12px)}.FormControl-input-wrap.FormControl-large.FormControl-input-wrap--leadingVisual .FormControl-input.FormControl-large{padding-inline-start:calc(var(--primer-control-large-paddingInline-normal, 12px) + var(--base-size-16, 16px) + var(--primer-control-large-gap, 8px))}.FormControl-input-wrap.FormControl-large.FormControl-input-wrap--trailingAction .FormControl-input.FormControl-large{padding-inline-end:calc(var(--primer-control-large-paddingInline-normal, 12px) + var(--base-size-16, 16px) + var(--primer-control-large-gap, 8px))}.FormControl-input-wrap.FormControl-large.FormControl-input-wrap--trailingAction.FormControl-input-wrap-trailingAction--divider .FormControl-input.FormControl-large{padding-inline-end:calc(var(--primer-control-large-paddingInline-normal, 12px) + var(--base-size-16, 16px) + var(--primer-control-large-gap, 8px) + var(--primer-borderWidth-thin, 1px))}.FormControl-input-wrap.FormControl-large .FormControl-input-trailingAction{height:var(--primer-control-small-size, 28px);right:calc(var(--primer-control-medium-paddingInline-condensed, 8px) - .125rem);top:calc(var(--primer-control-medium-paddingInline-condensed, 8px) - .125rem);width:var(--primer-control-small-size, 28px)}.FormControl-input-wrap.FormControl-large .FormControl-input-trailingAction:before{height:var(--base-size-20);top:unset}.FormControl-select-wrap{display:grid;grid-template-columns:minmax(0, auto) var(--base-size-16, 16px)}.FormControl-select-wrap:after{background-color:var(--color-fg-muted);content:"";grid-column:2;grid-row:1;height:var(--base-size-16, 16px);-webkit-mask:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiM1ODYwNjkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTQuNDI3IDkuNDI3IDMuMzk2IDMuMzk2YS4yNTEuMjUxIDAgMCAwIC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwIDAgMTEuMzk2IDlINC42MDRhLjI1LjI1IDAgMCAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3IDcuODIgMy4wNzJhLjI1LjI1IDAgMCAxIC4zNTQgMEwxMS41NyA2LjQ3YS4yNS4yNSAwIDAgMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMCAxLS4xNzctLjQyN3oiLz48L3N2Zz4=");mask:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiM1ODYwNjkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTQuNDI3IDkuNDI3IDMuMzk2IDMuMzk2YS4yNTEuMjUxIDAgMCAwIC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwIDAgMTEuMzk2IDlINC42MDRhLjI1LjI1IDAgMCAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3IDcuODIgMy4wNzJhLjI1LjI1IDAgMCAxIC4zNTQgMEwxMS41NyA2LjQ3YS4yNS4yNSAwIDAgMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMCAxLS4xNzctLjQyN3oiLz48L3N2Zz4=");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;padding-right:var(--base-size-4, 4px);place-self:center end;pointer-events:none;width:var(--base-size-16, 16px)}.FormControl-select-wrap .FormControl-select{-webkit-appearance:none;appearance:none;grid-column:1/-1;grid-row:1;padding-right:var(--base-size-20, 20px)}.FormControl-checkbox-wrap,.FormControl-radio-wrap{display:inline-grid;gap:var(--base-size-8, 8px);grid-template-columns:min-content auto}.FormControl-checkbox-wrap .FormControl-checkbox-labelWrap,.FormControl-checkbox-wrap .FormControl-radio-labelWrap,.FormControl-radio-wrap .FormControl-checkbox-labelWrap,.FormControl-radio-wrap .FormControl-radio-labelWrap{display:flex;flex-direction:column;gap:var(--base-size-4, 4px)}.FormControl-checkbox-wrap .FormControl-label,.FormControl-radio-wrap .FormControl-label{cursor:pointer}input[type=checkbox].FormControl-checkbox{background-color:var(--color-canvas-default);border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);color:var(--color-fg-default)}input.FormControl-checkbox[type=checkbox][disabled]{-webkit-text-fill-color:var(--color-primer-fg-disabled);background-color:var(--color-input-disabled-bg);border-color:var(--color-border-default);color:var(--color-primer-fg-disabled);cursor:not-allowed;opacity:1}input.FormControl-checkbox[type=checkbox][invalid]:not(:focus){border-color:var(--color-danger-emphasis)}input.FormControl-checkbox[type=checkbox]:not([type=checkbox],[type=radio]):focus{border-color:var(--color-accent-fg);box-shadow:inset 0 0 0 1px var(--color-accent-fg);outline:none}input.FormControl-checkbox[type=checkbox]:not([type=checkbox],[type=radio]):focus:not(:focus-visible){border-color:#0000;border-color:var(--color-accent-fg);box-shadow:inset 0 0 0 1px #0000 var(--color-accent-fg);outline:none}input.FormControl-checkbox[type=checkbox]:not([type=checkbox],[type=radio]):focus-visible{border-color:var(--color-accent-fg);box-shadow:inset 0 0 0 1px var(--color-accent-fg);outline:none}input[type=checkbox].FormControl-checkbox{-webkit-appearance:none;appearance:none;border-color:var(--color-neutral-emphasis);border-radius:var(--primer-borderRadius-small, 3px);cursor:pointer;display:grid;height:var(--base-size-16, 16px);margin:.125rem 0 0;place-content:center;position:relative;transition:background-color,border-color 80ms cubic-bezier(0.33, 1, 0.68, 1);width:var(--base-size-16, 16px)}input.FormControl-checkbox[type=checkbox]:before{background-color:var(--color-fg-on-emphasis);clip-path:inset(var(--base-size-16, 16px) 0 0 0);content:"";height:var(--base-size-16, 16px);-webkit-mask-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjc4LjIyYS43NS43NSAwIDAgMSAwIDEuMDYxTDQuNTIgOC41NDFhLjc1Mi43NTIgMCAwIDEtMS4wNjIgMEwuMjAyIDUuMjg1YS43NS43NSAwIDAgMSAxLjA2MS0xLjA2MWwyLjcyNSAyLjcyM0wxMC43MTguMjJhLjc1MS43NTEgMCAwIDEgMS4wNjIgMFoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=");mask-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjc4LjIyYS43NS43NSAwIDAgMSAwIDEuMDYxTDQuNTIgOC41NDFhLjc1Mi43NTIgMCAwIDEtMS4wNjIgMEwuMjAyIDUuMjg1YS43NS43NSAwIDAgMSAxLjA2MS0xLjA2MWwyLjcyNSAyLjcyM0wxMC43MTguMjJhLjc1MS43NTEgMCAwIDEgMS4wNjIgMFoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:75%;mask-size:75%;transition:visibility 0s linear .23s;visibility:hidden;width:var(--base-size-16, 16px)}@media screen and (prefers-reduced-motion: no-preference){input.FormControl-checkbox[type=checkbox]:before{animation:checkmarkOut 80ms cubic-bezier(0.65, 0, 0.35, 1) forwards}}input.FormControl-checkbox[type=checkbox]:after{content:"";height:100%;left:50%;min-height:var(--primer-control-medium-size, 32px) var(--primer-control-medium-size, 32px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}input.FormControl-checkbox[type=checkbox][disabled]~.FormControl-checkbox-labelWrap .FormControl-label,input.FormControl-checkbox[type=checkbox][disabled]~.FormControl-radio-labelWrap .FormControl-label{color:var(--color-primer-fg-disabled);cursor:not-allowed}input.FormControl-checkbox[type=checkbox]:checked{background:var(--color-accent-fg);border-color:var(--color-accent-fg);transition:background-color,border-color 80ms cubic-bezier(0.32, 0, 0.67, 0) 0ms}input.FormControl-checkbox[type=checkbox]:checked:before{transition:visibility 0s linear 0s;visibility:visible}@media screen and (prefers-reduced-motion: no-preference){input.FormControl-checkbox[type=checkbox]:checked:before{animation:checkmarkIn 80ms cubic-bezier(0.65, 0, 0.35, 1) 80ms forwards}}input.FormControl-checkbox[type=checkbox]:checked:disabled{background-color:var(--color-primer-fg-disabled);border-color:var(--color-primer-fg-disabled);cursor:not-allowed;opacity:1}input.FormControl-checkbox[type=checkbox]:checked:disabled:before{background-color:var(--color-fg-on-emphasis)}@media(forced-colors: active){input.FormControl-checkbox[type=checkbox]:checked{background-color:canvastext;border-color:canvastext}}input.FormControl-checkbox[type=checkbox]:focus-visible{box-shadow:none;outline:2px solid var(--color-accent-fg);outline-offset:2px}input.FormControl-checkbox[type=checkbox]:indeterminate:before{-webkit-mask-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgMWExIDEgMCAwIDEgMS0xaDhhMSAxIDAgMSAxIDAgMkgxYTEgMSAwIDAgMS0xLTFaIiBmaWxsPSIjZmZmIi8+PC9zdmc+");mask-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgMWExIDEgMCAwIDEgMS0xaDhhMSAxIDAgMSAxIDAgMkgxYTEgMSAwIDAgMS0xLTFaIiBmaWxsPSIjZmZmIi8+PC9zdmc+");visibility:visible}input[type=radio].FormControl-radio{background-color:var(--color-canvas-default);border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);color:var(--color-fg-default)}input.FormControl-radio[type=radio][disabled]{-webkit-text-fill-color:var(--color-primer-fg-disabled);background-color:var(--color-input-disabled-bg);border-color:var(--color-border-default);color:var(--color-primer-fg-disabled);cursor:not-allowed;opacity:1}input.FormControl-radio[type=radio][invalid]:not(:focus){border-color:var(--color-danger-emphasis)}input.FormControl-radio[type=radio]:not([type=checkbox],[type=radio]):focus{border-color:var(--color-accent-fg);box-shadow:inset 0 0 0 1px var(--color-accent-fg);outline:none}input.FormControl-radio[type=radio]:not([type=checkbox],[type=radio]):focus:not(:focus-visible){border-color:#0000;border-color:var(--color-accent-fg);box-shadow:inset 0 0 0 1px #0000 var(--color-accent-fg);outline:none}input.FormControl-radio[type=radio]:not([type=checkbox],[type=radio]):focus-visible{border-color:var(--color-accent-fg);box-shadow:inset 0 0 0 1px var(--color-accent-fg);outline:none}input[type=radio].FormControl-radio{-webkit-appearance:none;appearance:none;border-color:var(--color-neutral-emphasis);border-radius:var(--primer-borderRadius-full, 100vh);cursor:pointer;height:var(--base-size-16, 16px);margin:.125rem 0 0;position:relative;transition:background-color,border-color 80ms cubic-bezier(0.33, 1, 0.68, 1);width:var(--base-size-16, 16px)}input.FormControl-radio[type=radio]:after{content:"";height:100%;left:50%;min-height:var(--primer-control-medium-size, 32px) var(--primer-control-medium-size, 32px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}input.FormControl-radio[type=radio]:checked{border-color:var(--color-accent-fg);border-width:var(--base-size-4, 4px)}input.FormControl-radio[type=radio]:checked:disabled{border-color:var(--color-primer-fg-disabled);cursor:not-allowed}input.FormControl-radio[type=radio]:focus-visible{box-shadow:none;outline:2px solid var(--color-accent-fg);outline-offset:2px}@media(forced-colors: active){input[type=radio].FormControl-radio{background-color:canvastext;border-color:canvastext}}@keyframes checkmarkIn{0%{clip-path:inset(var(--base-size-16, 16px) 0 0 0)}to{clip-path:inset(0 0 0 0)}}@keyframes checkmarkOut{0%{clip-path:inset(0 0 0 0)}to{clip-path:inset(var(--base-size-16, 16px) 0 0 0)}}.btn-mktg{-webkit-appearance:none !important;appearance:none !important;background:linear-gradient(180deg, #ffffff26 0, #fff0 100%),var(--color-mktg-btn-bg) !important;border:0;border-radius:.375rem;color:var(--color-canvas-default);display:inline-block;font-size:1rem;font-weight:var(--base-text-weight-semibold, 600);line-height:1;padding:.9rem 1.5rem 1.1rem;position:relative;text-align:center;transition:box-shadow .2s,outline .2s ease;-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap;z-index:1}.btn-mktg:before{background:linear-gradient(180deg, #ffffff26, #fff0) !important;background-blend-mode:normal;border-radius:inherit;bottom:0;content:"";left:0;opacity:0;position:absolute;right:0;top:0;transition:opacity .2s;z-index:-1}.btn-mktg:hover{box-shadow:var(--color-mktg-btn-shadow-hover) !important;text-decoration:none}.btn-mktg.focus:before,.btn-mktg:focus-visible:before,.btn-mktg:focus:before,.btn-mktg:hover:before{opacity:1}.btn-mktg:focus{box-shadow:none;outline:2px solid var(--color-accent-fg);outline-offset:2px}.btn-mktg:focus:not(:focus-visible){box-shadow:none;outline:1px solid #0000}.btn-mktg:focus-visible{box-shadow:none;outline:2px solid var(--color-accent-fg);outline-offset:2px}.btn-mktg:active:before{opacity:.5 !important}.btn-mktg.disabled,.btn-mktg[disabled]{cursor:default;opacity:.5;pointer-events:none}.btn-muted-mktg{background:none !important;box-shadow:var(--color-mktg-btn-shadow-outline);color:var(--color-fg-default) !important}.btn-muted-mktg:before{display:none}.btn-muted-mktg:hover{box-shadow:var(--color-mktg-btn-shadow-hover-muted) !important}.btn-muted-mktg:active{box-shadow:var(--color-fg-default) 0 0 0 3px inset !important}.btn-muted-mktg:disabled{box-shadow:var(--color-fg-subtle) 0 0 0 1px inset !important}.btn-subtle-mktg{box-shadow:none !important;color:var(--color-fg-default) !important}.btn-subtle-mktg,.btn-subtle-mktg:before{background:none !important}.btn-subtle-mktg:hover{box-shadow:var(--color-mktg-btn-shadow-hover-muted) !important}.btn-signup-mktg{background:linear-gradient(180deg, #34b75926, #2ea44f00),#2ea44f !important;color:#fff}.btn-signup-mktg:before{background:linear-gradient(180deg, #34b75926, #2ea44f00) !important}.btn-signup-mktg:focus{box-shadow:none;outline:2px solid var(--color-accent-fg);outline-offset:2px}.btn-signup-mktg:focus:not(:focus-visible){box-shadow:none;outline:1px solid #0000}.btn-signup-mktg:focus-visible{box-shadow:none;outline:2px solid var(--color-accent-fg);outline-offset:2px}.btn-small-mktg{padding:.625rem 1rem .8125rem}.btn-large-mktg{font-size:1.25rem;padding:16px 30px 20px !important}.ToggleSwitch,.ToggleSwitch.ToggleSwitch{display:inline-flex}.ToggleSwitch{align-items:center;gap:var(--primer-controlStack-medium-gap-condensed, 8px)}.ToggleSwitch:hover .ToggleSwitch-knob{background-color:var(--color-btn-hover-bg)}.ToggleSwitch:active .ToggleSwitch-knob{background-color:var(--color-btn-active-bg)}.ToggleSwitch--checked .ToggleSwitch-statusOn{height:auto;visibility:visible}.ToggleSwitch--checked .ToggleSwitch-statusOff{height:0;visibility:hidden}.ToggleSwitch-track{-webkit-appearance:none;appearance:none;background-color:var(--color-switch-track-bg);border:var(--primer-borderWidth-thin, 1px) solid var(--color-switch-track-border);border-radius:var(--primer-borderRadius-medium, 6px);cursor:pointer;display:block;height:var(--primer-control-medium-size, 32px);overflow:hidden;padding:0;position:relative;text-decoration:none;transition-duration:80ms;transition-property:background-color,border-color;transition-timing-function:cubic-bezier(0.5, 1, 0.89, 1);-webkit-user-select:none;user-select:none;width:var(--base-size-64, 64px)}.ToggleSwitch-track:focus,.ToggleSwitch-track:focus-visible{outline-offset:0}@media(pointer: coarse){.ToggleSwitch-track:before{content:"";height:100%;left:50%;min-height:44px;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}}@media(prefers-reduced-motion){.ToggleSwitch-track,.ToggleSwitch-track *{transition:none}}.ToggleSwitch-track[aria-checked=true][aria-disabled=true]{background-color:var(--color-canvas-subtle);border-color:var(--color-border-subtle)}.ToggleSwitch-track[aria-checked=true][aria-disabled=true]:active,.ToggleSwitch-track[aria-checked=true][aria-disabled=true]:hover{background-color:var(--color-canvas-subtle)}.ToggleSwitch-track[aria-checked=true][aria-disabled=true] .ToggleSwitch-knob,.ToggleSwitch-track[aria-checked=true][aria-disabled=true]:active .ToggleSwitch-knob,.ToggleSwitch-track[aria-checked=true][aria-disabled=true]:hover .ToggleSwitch-knob{background-color:var(--color-switch-knob-checked-disabled-bg)}.ToggleSwitch-track[aria-checked=true]{background-color:var(--color-switch-track-checked-bg);border-color:var(--color-switch-track-checked-border)}.ToggleSwitch-track[aria-checked=true]:hover{background-color:var(--color-switch-track-checked-hover-bg)}.ToggleSwitch-track[aria-checked=true]:active{background-color:var(--color-switch-track-checked-active-bg)}.ToggleSwitch-track[aria-checked=true] .ToggleSwitch-knob{background-color:var(--color-switch-knob-checked-bg);border:0;transform:translateX(calc(100% + 1px))}.ToggleSwitch-track[aria-checked=true] .ToggleSwitch-lineIcon{transform:translateX(0)}.ToggleSwitch-track[aria-checked=true] .ToggleSwitch-circleIcon{transform:translateX(100%)}.ToggleSwitch-track[aria-disabled=true]{background-color:var(--color-canvas-subtle);border-color:var(--color-border-subtle);cursor:not-allowed;transition-property:none}.ToggleSwitch-track[aria-disabled=true]:active .ToggleSwitch-knob,.ToggleSwitch-track[aria-disabled=true]:hover .ToggleSwitch-knob{background-color:var(--color-btn-bg)}.ToggleSwitch-track[aria-disabled=true] .ToggleSwitch-knob{border-color:var(--color-border-default);box-shadow:none}.ToggleSwitch-track[aria-disabled=true] .ToggleSwitch-knob:active,.ToggleSwitch-track[aria-disabled=true] .ToggleSwitch-knob:hover{background-color:var(--color-btn-bg)}.ToggleSwitch-track[aria-disabled=true] .ToggleSwitch-circleIcon,.ToggleSwitch-track[aria-disabled=true] .ToggleSwitch-lineIcon{color:var(--color-fg-subtle)}.ToggleSwitch-icons{align-items:center;display:flex;height:100%;overflow:hidden;width:100%}.ToggleSwitch-lineIcon{color:var(--color-accent-fg);transform:translateX(-100%)}.ToggleSwitch-circleIcon,.ToggleSwitch-lineIcon{flex:1 0 50%;line-height:0;transition-duration:80ms;transition-property:transform}.ToggleSwitch-circleIcon{color:var(--color-fg-default);transform:translateX(0)}.ToggleSwitch-knob{background-color:var(--color-btn-bg);border:var(--primer-borderWidth-thin, 1px) solid var(--color-switch-track-border);border-radius:var(--primer-borderRadius-medium, 6px);bottom:-1px;box-shadow:var(--color-shadow-medium),var(--color-btn-inset-shadow);position:absolute;top:-1px;transform:translateX(-1px);transition-duration:80ms;transition-property:transform;transition-timing-function:cubic-bezier(0.5, 1, 0.89, 1);width:50%;z-index:1}@media(prefers-reduced-motion){.ToggleSwitch-knob{transition:none}}.ToggleSwitch-status{color:var(--color-fg-default);font-size:var(--primer-text-body-size-medium, 14px);line-height:1.5;position:relative;text-align:right}.ToggleSwitch--small .ToggleSwitch-status{font-size:var(--primer-text-body-size-small, 12px)}.ToggleSwitch--small .ToggleSwitch-track{height:var(--primer-control-xsmall-size, 24px);width:var(--base-size-48, 48px)}.ToggleSwitch--disabled .ToggleSwitch-status{color:var(--color-fg-muted)}.ToggleSwitch-statusOn{height:0;visibility:hidden}.ToggleSwitch-statusOff{height:auto;visibility:visible}.ToggleSwitch--statusAtEnd{flex-direction:row-reverse}.ToggleSwitch--statusAtEnd .ToggleSwitch-status{text-align:left}.UnderlineNav{-webkit-overflow-scrolling:auto;box-shadow:inset 0 -1px 0 var(--color-border-muted);display:flex;justify-content:space-between;min-height:var(--base-size-48, 48px);overflow-x:auto;overflow-y:hidden}.UnderlineNav .Counter{background-color:var(--color-neutral-muted);color:var(--color-fg-default);margin-left:var(--primer-control-medium-gap, 8px)}.UnderlineNav .Counter--primary{background-color:var(--color-neutral-emphasis);color:var(--color-fg-on-emphasis)}.UnderlineNav-body{align-items:center;display:flex;gap:var(--primer-control-medium-gap, 8px);list-style:none}.UnderlineNav-item{align-items:center;background-color:initial;border:0;border-radius:var(--primer-borderRadius-medium, 6px);color:var(--color-fg-default);cursor:pointer;display:flex;font-size:var(--primer-text-body-size-medium, 14px);line-height:30px;padding:0 var(--primer-control-medium-paddingInline-condensed, 8px);position:relative;text-align:center;white-space:nowrap}.UnderlineNav-item:focus,.UnderlineNav-item:focus-visible,.UnderlineNav-item:hover{border-bottom-color:var(--color-neutral-muted);color:var(--color-fg-default);outline-offset:-2px;text-decoration:none;transition:border-bottom-color .12s ease-out}.UnderlineNav-item [data-content]:before{content:attr(data-content);display:block;font-weight:var(--base-text-weight-semibold, 600);height:0;visibility:hidden}.UnderlineNav-item:before{content:"";height:100%;left:50%;min-height:48px;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}@media(pointer: fine){.UnderlineNav-item:hover{background:var(--color-action-list-item-default-hover-bg);color:var(--color-fg-default);text-decoration:none;transition:background .12s ease-out}}.UnderlineNav-item.selected,.UnderlineNav-item[aria-current]:not([aria-current=false]),.UnderlineNav-item[role=tab][aria-selected=true]{border-bottom-color:var(--color-primer-border-active);color:var(--color-fg-default);font-weight:var(--base-text-weight-semibold, 600)}.UnderlineNav-item.selected:after,.UnderlineNav-item[aria-current]:not([aria-current=false]):after,.UnderlineNav-item[role=tab][aria-selected=true]:after{background:var(--color-primer-border-active);border-radius:var(--primer-borderRadius-medium, 6px);bottom:calc(50% - 25px);content:"";height:2px;position:absolute;right:50%;transform:translate(50%, -50%);width:100%}.UnderlineNav--right{justify-content:flex-end}.UnderlineNav--right .UnderlineNav-actions{flex:1 1 auto}.UnderlineNav-actions{align-self:center}.UnderlineNav--full{display:block}.UnderlineNav--full .UnderlineNav-body{min-height:var(--base-size-48, 48px)}.UnderlineNav-octicon{fill:var(--color-fg-muted);color:var(--color-fg-muted);display:inline !important;margin-right:var(--primer-control-medium-gap, 8px)}.UnderlineNav-container{display:flex;justify-content:space-between}.SegmentedControl{background-color:var(--color-segmented-control-bg);border-radius:var(--primer-borderRadius-medium, 6px);box-shadow:var(--primer-borderInset-thin, inset 0 0 0 max(1px, 0.0625rem)) var(--color-border-default);display:inline-flex;list-style:none}.SegmentedControl-item{border:var(--primer-borderWidth-thin, max(1px, 0.0625rem)) solid #0000;border-radius:var(--primer-borderRadius-medium, 6px);display:inline-flex;padding:var(--primer-control-xsmall-paddingInline-condensed, 4px);position:relative}.SegmentedControl-item.SegmentedControl-item--selected{background-color:var(--color-btn-bg);border-color:var(--color-segmented-control-button-selected-border)}.SegmentedControl-item.SegmentedControl-item--selected .Button{font-weight:var(--base-text-weight-semibold, 600)}.SegmentedControl-item.SegmentedControl-item--selected .Button:hover{background-color:initial}.SegmentedControl-item.SegmentedControl-item--selected+.SegmentedControl-item:before,.SegmentedControl-item.SegmentedControl-item--selected:before{border-color:#0000}.SegmentedControl-item .Button-label[data-content]:before{content:attr(data-content);display:block;font-weight:var(--base-text-weight-semibold, 600);height:0;visibility:hidden}.SegmentedControl-item:before{border-left:var(--primer-borderWidth-thin, max(1px, 0.0625rem)) solid var(--color-border-default);content:"";inset:0 0 0 -1px;margin-bottom:var(--primer-control-medium-paddingBlock, 6px);margin-top:var(--primer-control-medium-paddingBlock, 6px);position:absolute}.SegmentedControl-item .Button{border:0;color:var(--color-btn-text);font-weight:var(--base-text-weight-normal, 400);transition:none}.SegmentedControl-item .Button:focus-visible{border-radius:calc(var(--primer-borderRadius-medium, 6px) - 5px);outline-offset:calc(var(--primer-control-xsmall-paddingInline-condensed, 4px) - var(--primer-borderWidth-thin, 1px))}.SegmentedControl-item .Button--small{height:calc(var(--primer-control-small-size, 28px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2);padding:0 calc(var(--primer-control-small-paddingInline-condensed, 8px) - var(--primer-control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--small.Button--iconOnly{width:calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--small.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--primer-control-medium-size, 32px);min-width:var(--primer-control-medium-size, 32px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--medium{height:calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2);padding:0 calc(var(--primer-control-medium-paddingInline-normal, 12px) - var(--primer-control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--medium.Button--iconOnly{width:calc(var(--primer-control-medium-size, 32px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--medium.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--primer-control-medium-size, 32px);min-width:var(--primer-control-medium-size, 32px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--large{height:calc(var(--primer-control-large-size, 40px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2);padding:0 calc(var(--primer-control-large-paddingInline-spacious, 16px) - var(--primer-control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--large.Button--iconOnly{width:calc(var(--primer-control-large-size, 40px) - var(--primer-control-xsmall-paddingInline-condensed, 4px)*2 - var(--primer-borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--large.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--primer-control-large-size, 40px);min-width:var(--primer-control-large-size, 40px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--iconOnly{padding:initial}.SegmentedControl-item .Button--invisible.Button--invisible-noVisuals .Button-label{color:var(--color-btn-text)}.SegmentedControl--fullWidth{display:flex}.SegmentedControl--fullWidth .SegmentedControl-item{flex:1;justify-content:center}.SegmentedControl--fullWidth .Button--iconOnly,.SegmentedControl--fullWidth .Button-withTooltip{width:100%}.menu{background-color:var(--color-canvas-default);border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);border-radius:var(--primer-borderRadius-medium, 6px);list-style:none;margin-bottom:var(--primer-stack-gap-normal, 16px)}.menu-item{border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-muted);color:var(--color-fg-default);display:block;padding:var(--primer-control-medium-paddingInline-condensed, 8px) var(--primer-control-medium-paddingInline-spacious, 16px);position:relative}.menu-item:first-child{border-top:0;border-top-right-radius:var(--primer-borderRadius-medium, 6px)}.menu-item:first-child,.menu-item:first-child:before{border-top-left-radius:var(--primer-borderRadius-medium, 6px)}.menu-item:last-child{border-bottom:0;border-bottom-right-radius:var(--primer-borderRadius-medium, 6px)}.menu-item:last-child,.menu-item:last-child:before{border-bottom-left-radius:var(--primer-borderRadius-medium, 6px)}.menu-item:hover{background-color:var(--color-neutral-subtle);text-decoration:none}.menu-item:active{background-color:var(--color-canvas-subtle)}.menu-item.selected,.menu-item[aria-current]:not([aria-current=false]),.menu-item[aria-selected=true]{background-color:var(--color-menu-bg-active);cursor:default}.menu-item.selected:before,.menu-item[aria-current]:not([aria-current=false]):before,.menu-item[aria-selected=true]:before{background-color:var(--color-primer-border-active);bottom:0;content:"";left:0;position:absolute;top:0;width:2px}.menu-item .octicon{color:var(--color-fg-muted);margin-right:var(--primer-control-medium-gap, 8px);text-align:center;width:16px}.menu-item .Counter{float:right;margin-left:var(--primer-control-small-gap, 4px)}.menu-item .menu-warning{color:var(--color-attention-fg);float:right}.menu-item .avatar{float:left;margin-right:var(--primer-control-small-gap, 4px)}.menu-item.alert .Counter{color:var(--color-danger-fg)}.menu-heading{border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-muted);color:var(--color-fg-default);display:block;font-size:inherit;font-weight:var(--base-text-weight-semibold, 600);margin-bottom:0;margin-top:0;padding:var(--primer-control-medium-paddingInline-condensed, 8px) var(--primer-control-medium-paddingInline-spacious, 16px)}.menu-heading:hover{text-decoration:none}.menu-heading:first-child{border-top-left-radius:var(--primer-borderRadius-medium, 6px);border-top-right-radius:var(--primer-borderRadius-medium, 6px)}.menu-heading:last-child{border-bottom:0;border-bottom-left-radius:var(--primer-borderRadius-medium, 6px);border-bottom-right-radius:var(--primer-borderRadius-medium, 6px)}.avatar{background-color:var(--color-avatar-bg);border-radius:var(--primer-borderRadius-medium, 6px);box-shadow:0 0 0 1px var(--color-avatar-border);display:inline-block;flex-shrink:0;line-height:1;overflow:hidden;vertical-align:middle}.avatar-link{float:left;line-height:1}.avatar-group-item{display:inline-block;margin-bottom:3px}.avatar-1,.avatar-2,.avatar-small{border-radius:var(--primer-borderRadius-small, 4px)}.avatar-1{height:var(--base-size-16, 16px);width:var(--base-size-16, 16px)}.avatar-2{height:var(--base-size-20, 20px);width:var(--base-size-20, 20px)}.avatar-3{height:var(--base-size-24, 24px);width:var(--base-size-24, 24px)}.avatar-4{height:var(--base-size-28, 28px);width:var(--base-size-28, 28px)}.avatar-5{height:var(--base-size-32, 32px);width:var(--base-size-32, 32px)}.avatar-6{height:var(--base-size-40, 40px);width:var(--base-size-40, 40px)}.avatar-7{height:var(--base-size-48, 48px);width:var(--base-size-48, 48px)}.avatar-8{height:var(--base-size-64, 64px);width:var(--base-size-64, 64px)}.AvatarStack{height:20px;min-width:26px;position:relative}.AvatarStack .AvatarStack-body{position:absolute}.AvatarStack.AvatarStack--two{min-width:36px}.AvatarStack.AvatarStack--three-plus{min-width:46px}.AvatarStack-body{background:var(--color-canvas-default);border-radius:100px;display:flex}.AvatarStack-body .avatar{background-color:var(--color-canvas-default);border-radius:var(--primer-borderRadius-small, 4px);border-right:var(--primer-borderWidth-thin, 1px) solid var(--color-canvas-default);box-shadow:none;box-sizing:initial;display:flex;height:20px;margin-right:-11px;position:relative;transition:margin .1s ease-in-out;width:20px;z-index:2}.AvatarStack-body .avatar:first-child{z-index:3}.AvatarStack-body .avatar:last-child{border-right:0;z-index:1}.AvatarStack-body .avatar img{border-radius:var(--primer-borderRadius-small, 4px)}.AvatarStack-body .avatar:nth-child(n+4){display:none;opacity:0}.AvatarStack-body:hover .avatar{margin-right:3px}.AvatarStack-body:hover .avatar:nth-child(n+4){display:flex;opacity:1}.AvatarStack-body:hover .avatar-more{display:none !important}.avatar.avatar-more{background:var(--color-canvas-subtle);margin-right:0;z-index:1}.avatar.avatar-more:after,.avatar.avatar-more:before{border-radius:2px;content:"";display:block;height:20px;outline:var(--primer-borderWidth-thin, 1px) solid var(--color-canvas-default);position:absolute}.avatar.avatar-more:before{background:var(--color-avatar-stack-fade-more);width:17px}.avatar.avatar-more:after{background:var(--color-avatar-stack-fade);width:14px}.AvatarStack--right .AvatarStack-body{flex-direction:row-reverse;right:0}.AvatarStack--right .AvatarStack-body:hover .avatar{margin-left:3px;margin-right:0}.AvatarStack--right .AvatarStack-body .avatar:not(:last-child){border-left:0}.AvatarStack--right .avatar.avatar-more{background:var(--color-avatar-stack-fade)}.AvatarStack--right .avatar.avatar-more:before{width:5px}.AvatarStack--right .avatar.avatar-more:after{background:var(--color-canvas-subtle);width:2px}.AvatarStack--right .avatar{border-left:var(--primer-borderWidth-thin, 1px) solid var(--color-canvas-default);border-right:0;margin-left:-11px;margin-right:0}.Box{background-color:var(--color-canvas-default);border-color:var(--color-border-default);border-radius:var(--primer-borderRadius-medium, 6px);border-style:solid;border-width:var(--primer-borderWidth-thin, 1px)}.Box--condensed{line-height:1.25}.Box--condensed .Box-body,.Box--condensed .Box-footer,.Box--condensed .Box-header{padding:var(--primer-stack-padding-condensed, 8px) var(--primer-stack-padding-normal, 16px)}.Box--condensed .Box-btn-octicon.btn-octicon{line-height:1.25;margin:calc(var(--primer-controlStack-medium-gap-condensed, 8px)*-1) calc(var(--primer-controlStack-small-gap-spacious, 16px)*-1);padding:var(--primer-control-medium-paddingInline-condensed, 8px) var(--primer-control-medium-paddingInline-spacious, 16px)}.Box--condensed .Box-row{padding:var(--primer-stack-padding-condensed, 8px) var(--primer-stack-padding-normal, 16px)}.Box--spacious .Box-header{line-height:1.25;padding:var(--primer-stack-padding-spacious, 24px)}.Box--spacious .Box-title{font-size:var(--primer-text-title-size-medium, 20px)}.Box--spacious .Box-body,.Box--spacious .Box-btn-octicon.btn-octicon,.Box--spacious .Box-footer{padding:var(--primer-stack-padding-spacious, 24px)}.Box--spacious .Box-btn-octicon.btn-octicon{margin:calc(var(--primer-stack-gap-spacious, 24px)*-1) calc(var(--primer-stack-gap-spacious, 24px)*-1)}.Box--spacious .Box-row{padding:var(--primer-stack-padding-spacious, 24px)}.Box-header{background-color:var(--color-canvas-subtle);border-color:var(--color-border-default);border-style:solid;border-top-left-radius:var(--primer-borderRadius-medium, 6px);border-top-right-radius:var(--primer-borderRadius-medium, 6px);border-width:var(--primer-borderWidth-thin, 1px);margin:calc(var(--primer-borderWidth-thin, 1px)*-1) calc(var(--primer-borderWidth-thin, 1px)*-1) 0;padding:var(--primer-stack-padding-normal, 16px)}.Box-title{font-size:var(--primer-text-body-size-medium, 14px);font-weight:var(--base-text-weight-semibold, 600)}.Box-body{border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);padding:var(--primer-stack-padding-normal, 16px)}.Box-body:last-of-type{border-bottom-left-radius:var(--primer-borderRadius-medium, 6px);border-bottom-right-radius:var(--primer-borderRadius-medium, 6px);margin-bottom:calc(var(--primer-borderWidth-thin, 1px)*-1)}.Box-row{border-top:var(--primer-borderWidth-thin, 1px) solid var(--color-border-muted);list-style-type:none;margin-top:calc(var(--primer-borderWidth-thin, 1px)*-1);padding:var(--primer-stack-padding-normal, 16px)}.Box-row:first-of-type{border-top-left-radius:var(--primer-borderRadius-medium, 6px);border-top-right-radius:var(--primer-borderRadius-medium, 6px)}.Box-row:last-of-type{border-bottom-left-radius:var(--primer-borderRadius-medium, 6px);border-bottom-right-radius:var(--primer-borderRadius-medium, 6px)}.Box-row.Box-row--unread,.Box-row.unread{box-shadow:inset 2px 0 0 var(--color-accent-emphasis)}.Box-row.navigation-focus .Box-row--drag-button{color:var(--color-accent-fg);cursor:grab;opacity:1}.Box-row.navigation-focus.is-dragging .Box-row--drag-button{cursor:grabbing}.Box-row.navigation-focus.sortable-chosen,.Box-row.navigation-focus.sortable-ghost{background-color:var(--color-canvas-subtle)}.Box-row.navigation-focus.sortable-ghost .Box-row--drag-hide{opacity:0}.Box-row--focus-gray.navigation-focus{background-color:var(--color-canvas-subtle)}.Box-row--focus-blue.navigation-focus{background-color:var(--color-accent-subtle)}.Box-row--hover-gray:hover{background-color:var(--color-canvas-subtle)}.Box-row--hover-blue:hover{background-color:var(--color-accent-subtle)}@media(min-width: 768px){.Box-row-link{color:var(--color-fg-default);text-decoration:none}.Box-row-link:hover{color:var(--color-accent-fg);text-decoration:none}}.Box-row--drag-button{opacity:0}.Box-footer{border-radius:0 0 var(--primer-borderRadius-medium, 6px) var(--primer-borderRadius-medium, 6px);border-top:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);margin-top:calc(var(--primer-borderWidth-thin, 1px)*-1);padding:var(--primer-stack-padding-normal, 16px)}.Box--scrollable{max-height:324px;overflow:scroll}.Box--blue,.Box--blue .Box-header{border-color:var(--color-accent-muted)}.Box--blue .Box-header{background-color:var(--color-accent-subtle)}.Box--blue .Box-body,.Box--blue .Box-footer,.Box--blue .Box-row{border-color:var(--color-accent-muted)}.Box--danger,.Box--danger .Box-body:last-of-type,.Box--danger .Box-row:first-of-type{border-color:var(--color-danger-emphasis)}.Box-header--blue{background-color:var(--color-accent-subtle);border-color:var(--color-accent-muted)}.Box-row--yellow{background-color:var(--color-attention-subtle)}.Box-row--blue{background-color:var(--color-accent-subtle)}.Box-row--gray{background-color:var(--color-canvas-subtle)}.Box-btn-octicon.btn-octicon{line-height:1.5;margin:calc(var(--primer-controlStack-small-gap-spacious, 16px)*-1) calc(var(--primer-controlStack-small-gap-spacious, 16px)*-1);padding:var(--primer-control-medium-paddingInline-spacious, 16px) var(--primer-control-medium-paddingInline-spacious, 16px)}.blankslate{padding:var(--base-size-32, 32px);position:relative;text-align:center}.blankslate p{color:var(--color-fg-muted)}.blankslate code{background:var(--color-canvas-default);border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-muted);border-radius:var(--primer-borderRadius-medium, 6px);font-size:var(--primer-text-body-size-medium, 14px);padding:2px 5px 3px}.blankslate img{height:56px;width:56px}.blankslate-icon{color:var(--color-fg-muted);margin-bottom:var(--primer-stack-gap-condensed, 8px);margin-left:var(--primer-control-small-gap, 4px);margin-right:var(--primer-control-small-gap, 4px)}.blankslate-image{margin-bottom:var(--primer-stack-gap-normal, 16px)}.blankslate-heading{margin-bottom:var(--base-size-4, 4px)}.blankslate-action{margin-top:var(--primer-stack-gap-normal, 16px)}.blankslate-action:first-of-type{margin-top:var(--primer-stack-gap-spacious, 24px)}.blankslate-action:last-of-type{margin-bottom:var(--primer-stack-gap-condensed, 8px)}.blankslate-capped{border-radius:0 0 var(--primer-borderRadius-medium, 6px) var(--primer-borderRadius-medium, 6px)}.blankslate-spacious{padding:var(--base-size-80, 80px) var(--base-size-40, 40px)}.blankslate-narrow{margin:0 auto;max-width:485px}.blankslate-large img{height:80px;width:80px}.blankslate-large h3{font-size:24px;margin:var(--primer-stack-gap-normal, 16px) 0}.blankslate-large p{font-size:var(--primer-text-body-size-large, 16px)}.blankslate-clean-background{border:0}.breadcrumb-item{display:inline-block;list-style:none;margin-left:-0.35em;white-space:nowrap}.breadcrumb-item:after{border-right:.1em solid var(--color-fg-muted);content:"";display:inline-block;height:.8em;margin:0 .5em;transform:rotate(15deg)}.breadcrumb-item:first-child{margin-left:0}.breadcrumb-item-selected:after,.breadcrumb-item[aria-current]:not([aria-current=false]):after{content:none}.breadcrumb-item-selected a{color:var(--color-fg-default)}:root{--primer-duration-fast:80ms;--primer-easing-easeInOut:cubic-bezier(0.65,0,0.35,1)}.Button{align-items:center;background-color:initial;border:var(--primer-borderWidth-thin, 1px) solid;border-color:#0000;border-radius:var(--primer-borderRadius-medium, 6px);color:var(--color-btn-text);cursor:pointer;display:flex;flex-direction:row;font-size:var(--primer-text-body-size-medium, 14px);font-weight:var(--base-text-weight-medium, 500);gap:var(--primer-control-medium-gap, 8px);height:var(--primer-control-medium-size, 32px);justify-content:space-between;min-width:max-content;padding:0 var(--primer-control-medium-paddingInline-normal, 12px);position:relative;text-align:center;transition:var(--primer-duration-fast) var(--primer-easing-easeInOut);transition-property:color,fill,background-color,border-color;-webkit-user-select:none;user-select:none}@media(pointer: course){.Button:before{content:"";height:100%;left:50%;min-height:48px;min-width:48px;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}}.Button:hover{transition-duration:var(--primer-duration-fast)}.Button:active{transition:none}.Button:disabled,.Button[aria-disabled=true]{box-shadow:none;cursor:not-allowed}.Button-withTooltip{display:inline-block;position:relative}a.Button,summary.Button{display:inline-flex}a.Button:hover,summary.Button:hover{text-decoration:none}.Button-content{align-items:center;display:grid;flex:1 0 auto;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0, auto) min-content;place-content:center}.Button-content>:not(:last-child){margin-right:var(--primer-control-medium-gap, 8px)}.Button-content--alignStart{justify-content:start}.Button-visual{display:flex;pointer-events:none}.Button-visual .Counter{background-color:var(--color-btn-counter-bg);color:inherit}.Button-label{grid-area:text;line-height:var(--primer-text-body-lineHeight-medium, 1.42857);white-space:nowrap}.Button-leadingVisual{grid-area:leadingVisual}.Button-trailingVisual{grid-area:trailingVisual}.Button-trailingAction{margin-right:calc(var(--base-size-4, 4px)*-1)}.Button--small{font-size:var(--primer-text-body-size-small, 12px);gap:var(--primer-control-small-gap, 4px);height:var(--primer-control-small-size, 28px);padding:0 var(--primer-control-small-paddingInline-condensed, 8px)}.Button--small .Button-label{line-height:var(--primer-text-body-lineHeight-small, 1.66667)}.Button--small .Button-content>:not(:last-child){margin-right:var(--primer-control-small-gap, 4px)}.Button--large{gap:var(--primer-control-large-gap, 8px);height:var(--primer-control-large-size, 40px);padding:0 var(--primer-control-large-paddingInline-spacious, 16px)}.Button--large .Button-label{line-height:var(--primer-text-body-lineHeight-large, 1.5)}.Button--large .Button-content>:not(:last-child){margin-right:var(--primer-control-large-gap, 8px)}.Button--fullWidth{width:100%}.Button--primary{fill:var(--color-btn-primary-icon);background-color:var(--color-btn-primary-bg);border-color:var(--color-btn-primary-border);box-shadow:var(--color-btn-primary-shadow),var(--color-btn-primary-inset-shadow);color:var(--color-btn-primary-text)}.Button--primary:hover:not(:disabled){background-color:var(--color-btn-primary-hover-bg);border-color:var(--color-btn-primary-hover-border)}.Button--primary:focus{box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis);outline:2px solid var(--color-accent-fg);outline-offset:-2px}.Button--primary:focus:not(:focus-visible){box-shadow:none;outline:1px solid #0000}.Button--primary:focus-visible{box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis);outline:2px solid var(--color-accent-fg);outline-offset:-2px}.Button--primary:active:not(:disabled),.Button--primary[aria-pressed=true]{background-color:var(--color-btn-primary-selected-bg);box-shadow:var(--color-btn-primary-selected-shadow)}.Button--primary:disabled,.Button--primary[aria-disabled=true]{fill:var(--color-btn-primary-disabled-text);background-color:var(--color-btn-primary-disabled-bg);border-color:var(--color-btn-primary-disabled-border);color:var(--color-btn-primary-disabled-text)}.Button--secondary{fill:var(--color-fg-muted);background-color:var(--color-btn-bg);border-color:var(--color-btn-border);box-shadow:var(--color-btn-shadow),var(--color-btn-inset-shadow);color:var(--color-btn-text)}.Button--secondary:hover:not(:disabled){background-color:var(--color-btn-hover-bg);border-color:var(--color-btn-hover-border)}.Button--secondary:active:not(:disabled){background-color:var(--color-btn-active-bg);border-color:var(--color-btn-active-border)}.Button--secondary[aria-pressed=true]{background-color:var(--color-btn-selected-bg);box-shadow:var(--color-primer-shadow-inset)}.Button--secondary:disabled,.Button--secondary[aria-disabled=true]{fill:var(--color-primer-fg-disabled);background-color:var(--color-btn-bg);border-color:var(--color-btn-border);color:var(--color-primer-fg-disabled)}.Button--invisible{color:var(--color-btn-text)}.Button--invisible:hover:not(:disabled){background-color:var(--color-action-list-item-default-hover-bg)}.Button--invisible:active:not(:disabled),.Button--invisible[aria-pressed=true]{background-color:var(--color-action-list-item-default-active-bg)}.Button--invisible:disabled,.Button--invisible[aria-disabled=true]{fill:var(--color-primer-fg-disabled);background-color:var(--color-btn-bg);border-color:var(--color-btn-border);color:var(--color-primer-fg-disabled)}.Button--invisible.Button--invisible-noVisuals .Button-label{color:var(--color-accent-fg)}.Button--invisible .Button-visual{color:var(--color-fg-muted)}.Button--link{fill:var(--color-accent-fg);border:none;color:var(--color-accent-fg);display:inline-block;font-size:inherit;height:unset;padding:0}.Button--link:hover:not(:disabled){text-decoration:underline}.Button--link:focus,.Button--link:focus-visible{outline-offset:2px}.Button--link:disabled,.Button--link[aria-disabled=true]{fill:var(--color-primer-fg-disabled);background-color:initial;border-color:#0000;color:var(--color-primer-fg-disabled)}.Button--danger{fill:var(--color-btn-danger-icon);background-color:var(--color-btn-bg);border-color:var(--color-btn-border);box-shadow:var(--color-btn-shadow),var(--color-btn-inset-shadow);color:var(--color-btn-danger-text)}.Button--danger:hover:not(:disabled){fill:var(--color-btn-danger-hover-text);background-color:var(--color-btn-danger-hover-bg);border-color:var(--color-btn-danger-hover-border);box-shadow:var(--color-btn-danger-hover-shadow),var(--color-btn-danger-hover-inset-shadow);color:var(--color-btn-danger-hover-text)}.Button--danger:active:not(:disabled),.Button--danger[aria-pressed=true]{fill:var(--color-btn-danger-selected-text);background-color:var(--color-btn-danger-selected-bg);border-color:var(--color-btn-danger-selected-border);box-shadow:var(--color-btn-danger-selected-shadow);color:var(--color-btn-danger-selected-text)}.Button--danger:disabled,.Button--danger[aria-disabled=true]{fill:var(--color-btn-danger-disabled-text);background-color:var(--color-btn-danger-disabled-bg);border-color:var(--color-btn-border);color:var(--color-btn-danger-disabled-text)}.Button--iconOnly{display:grid;padding:unset;place-content:center;width:var(--primer-control-medium-size, 32px)}.Button--iconOnly.Button--small{width:var(--primer-control-small-size, 28px)}.Button--iconOnly.Button--large{width:var(--primer-control-large-size, 40px)}.Counter{background-color:var(--color-neutral-muted);border:var(--primer-borderWidth-thin, 1px) solid var(--color-counter-border);border-radius:2em;color:var(--color-fg-default);display:inline-block;font-size:var(--primer-text-body-size-small, 12px);font-weight:var(--base-text-weight-medium, 500);line-height:calc(var(--base-size-20, 20px) - var(--primer-borderWidth-thin, 1px)*2);min-width:var(--base-size-20, 20px);padding:0 6px;text-align:center}.Counter:empty{display:none}.Counter .octicon{opacity:.8;vertical-align:text-top}.Counter--primary{background-color:var(--color-neutral-emphasis);color:var(--color-fg-on-emphasis)}.Counter--secondary{background-color:var(--color-neutral-subtle);color:var(--color-fg-muted)}.flash:not(.Banner){background-image:linear-gradient(var(--color-accent-subtle), var(--color-accent-subtle));border-color:var(--color-accent-muted);border-radius:var(--primer-borderRadius-medium, 6px);border-style:solid;border-width:var(--primer-borderWidth-thin, 1px);color:var(--color-fg-default);padding:var(--base-size-20, 20px) var(--primer-control-medium-paddingInline-spacious, 16px);position:relative}.flash:not(.Banner) .octicon{color:var(--color-accent-fg);margin-right:var(--base-size-12, 12px)}.flash:not(.Banner) p:last-child{margin-bottom:0}.flash-messages{margin-bottom:var(--primer-stack-gap-spacious, 24px)}.flash-close:not(.Banner-close){-webkit-appearance:none;appearance:none;background:none;border:0;cursor:pointer;float:right;margin:calc(var(--primer-control-medium-paddingInline-spacious, 16px)*-1);padding:var(--primer-control-medium-paddingInline-spacious, 16px);text-align:center}.flash-close:not(.Banner-close):hover{opacity:.7}.flash-close:not(.Banner-close):active{opacity:.5}.flash-close:not(.Banner-close) .octicon{margin-right:0}.flash-action:not(.Banner-actions){background-clip:padding-box;float:right;margin-left:var(--primer-stack-gap-spacious, 24px);margin-top:-3px}.flash-action.btn:not(.Banner-actions) .octicon{color:var(--color-fg-muted);margin-right:var(--primer-control-small-gap, 4px)}.flash-action.btn-primary:not(.Banner-actions){background-clip:initial}.flash-action.btn-primary:not(.Banner-actions) .octicon{color:inherit}.flash-warn:not(.Banner){background-image:linear-gradient(var(--color-attention-subtle), var(--color-attention-subtle));border-color:var(--color-attention-muted);color:var(--color-fg-default)}.flash-warn:not(.Banner) .octicon{color:var(--color-attention-fg)}.flash-error:not(.Banner){background-image:linear-gradient(var(--color-danger-subtle), var(--color-danger-subtle));border-color:var(--color-danger-muted);color:var(--color-fg-default)}.flash-error:not(.Banner) .octicon{color:var(--color-danger-fg)}.flash-success:not(.Banner){background-image:linear-gradient(var(--color-success-subtle), var(--color-success-subtle));border-color:var(--color-success-muted);color:var(--color-fg-default)}.flash-success:not(.Banner) .octicon{color:var(--color-success-fg)}.flash-full:not(.Banner){border-radius:0;border-width:var(--primer-borderWidth-thin, 1px) 0;margin-top:calc(var(--primer-borderWidth-thin, 1px)*-1)}.flash-banner{border-left:0;border-radius:0;border-right:0;border-top:0;position:fixed;top:0;width:100%;z-index:90}.flash-banner,.flash-full{background-color:var(--color-canvas-default)}.warning{background-color:var(--color-attention-subtle);font-weight:var(--base-text-weight-semibold, 600);margin-bottom:.8em;padding:.5em}.labels{position:relative}.Label,.label{border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);border-radius:2em;display:inline-block;font-size:var(--primer-text-body-size-small, 12px);font-weight:var(--base-text-weight-medium, 500);line-height:18px;padding:0 7px;white-space:nowrap}.Label:hover,.label:hover{text-decoration:none}.Label--large{line-height:22px;padding-left:10px;padding-right:10px}.Label--inline{display:inline;font-size:85%;padding:.12em .5em}.Label--primary{border-color:var(--color-neutral-emphasis);color:var(--color-fg-default)}.Label--secondary{border-color:var(--color-border-default);color:var(--color-fg-muted)}.Label--accent,.Label--info{border-color:var(--color-accent-emphasis);color:var(--color-accent-fg)}.Label--success{border-color:var(--color-success-emphasis);color:var(--color-success-fg)}.Label--attention,.Label--warning{border-color:var(--color-attention-emphasis);color:var(--color-attention-fg)}.Label--severe{border-color:var(--color-severe-emphasis);color:var(--color-severe-fg)}.Label--danger{border-color:var(--color-danger-emphasis);color:var(--color-danger-fg)}.Label--open{border-color:var(--color-open-emphasis);color:var(--color-open-fg)}.Label--closed{border-color:var(--color-closed-emphasis);color:var(--color-closed-fg)}.Label--done{border-color:var(--color-done-emphasis);color:var(--color-done-fg)}.Label--sponsors{border-color:var(--color-sponsors-emphasis);color:var(--color-sponsors-fg)}.Link{color:var(--color-accent-fg)}.Link:hover{cursor:pointer;text-decoration:underline}.Link:focus,.Link:focus-visible{outline-offset:0}.Link--primary{color:var(--color-fg-default) !important}.Link--primary:hover{color:var(--color-accent-fg) !important}.Link--secondary{color:var(--color-fg-muted) !important}.Link--secondary:hover{color:var(--color-accent-fg) !important}.Link--muted{color:var(--color-fg-muted) !important}.Link--muted:hover{text-decoration:none}.Link--muted:hover,.Link--onHover:hover{color:var(--color-accent-fg) !important}.Link--onHover:hover{cursor:pointer;text-decoration:underline}.Link--muted:hover [class*=color-fg],.Link--primary:hover [class*=color-fg],.Link--secondary:hover [class*=color-fg]{color:inherit !important}.Popover{position:absolute;z-index:100}.Popover-message{background-color:var(--color-canvas-overlay);border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);border-radius:var(--primer-borderRadius-medium, 6px);margin-left:auto;margin-right:auto;position:relative;width:232px}.Popover-message:after,.Popover-message:before{content:"";display:inline-block;left:50%;position:absolute}.Popover-message:before{border:8px solid #0000;border-bottom:8px solid var(--color-border-default);margin-left:-9px;top:-16px}.Popover-message:after{border:7px solid #0000;border-bottom:7px solid var(--color-canvas-overlay);margin-left:-8px;top:-14px}.Popover-message--no-caret:after,.Popover-message--no-caret:before{display:none}.Popover-message--bottom-left:after,.Popover-message--bottom-left:before,.Popover-message--bottom-right:after,.Popover-message--bottom-right:before,.Popover-message--bottom:after,.Popover-message--bottom:before{border-bottom-color:#0000;top:auto}.Popover-message--bottom-left:before,.Popover-message--bottom-right:before,.Popover-message--bottom:before{border-top-color:var(--color-border-default);bottom:-16px}.Popover-message--bottom-left:after,.Popover-message--bottom-right:after,.Popover-message--bottom:after{border-top-color:var(--color-canvas-overlay);bottom:-14px}.Popover-message--bottom-right,.Popover-message--top-right{margin-right:0;right:-9px}.Popover-message--bottom-right:after,.Popover-message--bottom-right:before,.Popover-message--top-right:after,.Popover-message--top-right:before{left:auto;margin-left:0}.Popover-message--bottom-right:before,.Popover-message--top-right:before{right:20px}.Popover-message--bottom-right:after,.Popover-message--top-right:after{right:21px}.Popover-message--bottom-left,.Popover-message--top-left{left:-9px;margin-left:0}.Popover-message--bottom-left:after,.Popover-message--bottom-left:before,.Popover-message--top-left:after,.Popover-message--top-left:before{left:24px;margin-left:0}.Popover-message--bottom-left:after,.Popover-message--top-left:after{left:25px}.Popover-message--left-bottom:after,.Popover-message--left-bottom:before,.Popover-message--left-top:after,.Popover-message--left-top:before,.Popover-message--left:after,.Popover-message--left:before,.Popover-message--right-bottom:after,.Popover-message--right-bottom:before,.Popover-message--right-top:after,.Popover-message--right-top:before,.Popover-message--right:after,.Popover-message--right:before{border-bottom-color:#0000;left:auto;margin-left:0;top:50%}.Popover-message--left-bottom:before,.Popover-message--left-top:before,.Popover-message--left:before,.Popover-message--right-bottom:before,.Popover-message--right-top:before,.Popover-message--right:before{margin-top:-9px}.Popover-message--left-bottom:after,.Popover-message--left-top:after,.Popover-message--left:after,.Popover-message--right-bottom:after,.Popover-message--right-top:after,.Popover-message--right:after{margin-top:-8px}.Popover-message--right-bottom:before,.Popover-message--right-top:before,.Popover-message--right:before{border-left-color:var(--color-border-default);right:-16px}.Popover-message--right-bottom:after,.Popover-message--right-top:after,.Popover-message--right:after{border-left-color:var(--color-canvas-overlay);right:-14px}.Popover-message--left-bottom:before,.Popover-message--left-top:before,.Popover-message--left:before{border-right-color:var(--color-border-default);left:-16px}.Popover-message--left-bottom:after,.Popover-message--left-top:after,.Popover-message--left:after{border-right-color:var(--color-canvas-overlay);left:-14px}.Popover-message--left-top:after,.Popover-message--left-top:before,.Popover-message--right-top:after,.Popover-message--right-top:before{top:24px}.Popover-message--left-bottom:after,.Popover-message--left-bottom:before,.Popover-message--right-bottom:after,.Popover-message--right-bottom:before{top:auto}.Popover-message--left-bottom:before,.Popover-message--right-bottom:before{bottom:16px}.Popover-message--left-bottom:after,.Popover-message--right-bottom:after{bottom:17px}@media(min-width: 544px){.Popover-message--large{min-width:320px}}@media(max-width: 767.98px){.Popover{bottom:0 !important;left:0 !important;position:fixed;right:0 !important;top:auto !important}.Popover-message{bottom:auto;left:auto;margin:var(--primer-stack-gap-condensed, 8px);right:auto;top:auto;width:auto !important}.Popover-message>.btn-octicon{padding:var(--primer-control-medium-paddingInline-normal, 12px) !important}.Popover-message:after,.Popover-message:before{display:none}}.Progress{background-color:var(--color-neutral-muted);border-radius:6px;display:flex;height:8px;outline:1px solid #0000;overflow:hidden}.Progress--large{height:10px}.Progress--small{height:5px}.Progress-item{outline:2px solid #0000}.Progress-item+.Progress-item{margin-left:2px}.State,.state{border-radius:2em;display:inline-block;font-size:var(--primer-text-body-size-medium, 14px);font-weight:var(--base-text-weight-medium, 500);line-height:var(--primer-control-medium-lineBoxHeight, 20px);padding:5px var(--primer-control-medium-paddingInline-normal, 12px);text-align:center;white-space:nowrap}.State,.State--draft,.state{background-color:var(--color-neutral-emphasis);border:var(--primer-borderWidth-thin, 1px) solid #0000;color:var(--color-fg-on-emphasis)}.State--open{background-color:var(--color-open-emphasis)}.State--merged,.State--open{color:var(--color-fg-on-emphasis)}.State--merged{background-color:var(--color-done-emphasis)}.State--closed{background-color:var(--color-closed-emphasis);color:var(--color-fg-on-emphasis)}.State--small{font-size:var(--primer-text-body-size-small, 12px);line-height:var(--base-size-24, 24px);padding:0 10px}.State--small .octicon{width:1em}.Subhead{border-bottom:var(--primer-borderWidth-thin, 1px) solid var(--color-border-muted);display:flex;flex-flow:row wrap;justify-content:flex-end;margin-bottom:var(--primer-stack-gap-normal, 16px);padding-bottom:var(--primer-stack-padding-condensed, 8px)}.Subhead--spacious{margin-top:var(--base-size-40, 40px)}.Subhead-heading{flex:1 1 auto;font-size:24px;font-weight:var(--base-text-weight-normal, 400);order:0}.Subhead-heading--danger{color:var(--color-danger-fg);font-weight:var(--base-text-weight-semibold, 600)}.Subhead-description{color:var(--color-fg-muted);flex:1 100%;font-size:var(--primer-text-body-size-medium, 14px);order:2}.Subhead-actions{align-self:center;justify-content:flex-end;margin:var(--base-size-4, 4px) 0 var(--base-size-4, 4px) var(--base-size-4, 4px);order:1}.Subhead-actions+.Subhead-description{margin-top:var(--base-size-4, 4px)}.Truncate{display:inline-flex;max-width:100%;min-width:0}.Truncate>.Truncate-text{max-width:-moz-fit-content;max-width:fit-content;min-width:1ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Truncate>.Truncate-text+.Truncate-text{margin-left:var(--primer-control-small-gap, 4px)}.Truncate>.Truncate-text.Truncate-text--primary{flex-basis:200%}.Truncate>.Truncate-text.Truncate-text--expandable:active,.Truncate>.Truncate-text.Truncate-text--expandable:focus,.Truncate>.Truncate-text.Truncate-text--expandable:hover{cursor:pointer;flex-shrink:0;max-width:100% !important}.TimelineItem{display:flex;margin-left:var(--primer-stack-gap-normal, 16px);padding:var(--primer-stack-padding-normal, 16px) 0;position:relative}.TimelineItem:before{background-color:var(--color-border-muted);bottom:0;content:"";display:block;left:0;position:absolute;top:0;width:var(--primer-borderWidth-thick, 2px)}.TimelineItem:target .TimelineItem-badge{border-color:var(--color-accent-emphasis);box-shadow:0 0 .2em var(--color-accent-muted)}.TimelineItem-badge{align-items:center;background-color:var(--color-timeline-badge-bg);border:var(--primer-borderWidth-thick, 2px) solid var(--color-canvas-default);border-radius:50%;color:var(--color-fg-muted);display:flex;flex-shrink:0;height:var(--primer-control-medium-size, 32px);justify-content:center;margin-left:calc(var(--primer-control-medium-size, 32px)/-2 + 1px);margin-right:var(--primer-controlStack-medium-gap-condensed, 8px);position:relative;width:var(--primer-control-medium-size, 32px);z-index:1}.TimelineItem-badge--success{background-color:var(--color-success-emphasis);border:var(--primer-borderWidth-thin, 1px) solid #0000;color:var(--color-fg-on-emphasis)}.TimelineItem-body{color:var(--color-fg-muted);flex:auto;margin-top:var(--base-size-4, 4px);max-width:100%;min-width:0}.TimelineItem-avatar{left:-72px;position:absolute;z-index:1}.TimelineItem-break{background-color:var(--color-canvas-default);border:0;border-top:var(--primer-borderWidth-thicker, 4px) solid var(--color-border-default);height:var(--primer-stack-gap-spacious, 24px);margin:0;margin-bottom:calc(var(--primer-stack-gap-normal, 16px)*-1);margin-left:-56px;position:relative;z-index:1}.TimelineItem--condensed{padding-bottom:0;padding-top:var(--base-size-4, 4px)}.TimelineItem--condensed:last-child{padding-bottom:var(--primer-stack-gap-normal, 16px)}.TimelineItem--condensed .TimelineItem-badge{background-color:var(--color-canvas-default);border:0;color:var(--color-fg-muted);height:var(--base-size-16, 16px);margin-bottom:var(--base-size-8, 8px);margin-top:var(--base-size-8, 8px)}.css-truncate .css-truncate-overflow,.css-truncate .css-truncate-target,.css-truncate.css-truncate-overflow,.css-truncate.css-truncate-target{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.css-truncate .css-truncate-target,.css-truncate.css-truncate-target{display:inline-block;max-width:125px;vertical-align:top}.css-truncate.expandable.css-truncate-target:hover,.css-truncate.expandable.zeroclipboard-is-hover .css-truncate-target,.css-truncate.expandable.zeroclipboard-is-hover.css-truncate-target,.css-truncate.expandable:hover .css-truncate-target{max-width:10000px !important}.OrderedList{margin:8px}.OrderedList-type--decimal{list-style-type:decimal}.OrderedList-type--upperAlpha{list-style-type:upper-alpha}.OrderedList-type--lowerAlpha{list-style-type:lower-alpha}.OrderedList-type--upperRoman{list-style-type:upper-roman}.OrderedList-type--lowerRoman{list-style-type:lower-roman}.UnorderedList{margin:8px} + +/*# sourceMappingURL=primer-18e0eebb7bf7.css.map*/ \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B637106FCA82954246E8414C81D8E9ECFBCF9D00 b/home/.surf/cache/WebKitCache/Version 16/Blobs/B637106FCA82954246E8414C81D8E9ECFBCF9D00 new file mode 100644 index 0000000..ec1b367 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/B637106FCA82954246E8414C81D8E9ECFBCF9D00 @@ -0,0 +1,8 @@ +/*! + * @primer/css/marketing + * http://primer.style/css + * + * Released under MIT license. Copyright (c) 2019 GitHub Inc. + */.h0-mktg,.h1-mktg,.h2-mktg,.h3-mktg,.h4-mktg,.h5-mktg,.h6-mktg{font-family:"Mona Sans","Mona Sans Fallback",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-feature-settings:"ss02" on,"ss01" on;font-weight:700 !important;letter-spacing:-0.01em !important}.h0-mktg{font-size:48px !important;line-height:52px !important;font-weight:800 !important}@media(min-width: 768px){.h0-mktg{font-size:72px !important;line-height:76px !important}}@media(min-width: 1012px){.h0-mktg{font-size:96px !important;line-height:100px !important}}.h1-mktg{font-size:40px !important;line-height:44px !important;font-weight:800 !important}@media(min-width: 768px){.h1-mktg{font-size:56px !important;line-height:60px !important;letter-spacing:-0.03em !important}}@media(min-width: 1012px){.h1-mktg{font-size:72px !important;line-height:76px !important}}.h2-mktg{font-size:32px !important;line-height:36px !important;font-weight:800 !important}@media(min-width: 768px){.h2-mktg{font-size:48px !important;line-height:52px !important;letter-spacing:-0.03em !important}}@media(min-width: 1012px){.h2-mktg{font-size:64px !important;line-height:68px !important}}.h3-mktg{font-size:28px !important;line-height:32px !important;font-weight:800 !important}@media(min-width: 768px){.h3-mktg{font-size:40px !important;line-height:44px !important}}@media(min-width: 1012px){.h3-mktg{font-size:48px !important;line-height:52px !important;letter-spacing:-0.03em !important}}.h4-mktg{font-size:24px !important;line-height:28px !important;font-weight:800 !important}@media(min-width: 768px){.h4-mktg{font-size:28px !important;line-height:32px !important}}@media(min-width: 1012px){.h4-mktg{font-size:32px !important;line-height:36px !important}}.h5-mktg{font-size:20px !important;line-height:24px !important}@media(min-width: 768px){.h5-mktg{font-size:24px !important;line-height:28px !important;font-weight:800 !important}}.h6-mktg{font-size:16px !important;line-height:20px !important}@media(min-width: 768px){.h6-mktg{font-size:20px !important;line-height:24px !important}}.f0-mktg,.f1-mktg,.f2-mktg,.f3-mktg,.f4-mktg,.f5-mktg,.f6-mktg{font-family:"Mona Sans","Mona Sans Fallback",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-feature-settings:"ss02" on,"ss01" on;font-weight:var(--base-text-weight-normal, 400)}.f0-mktg{font-size:28px !important;line-height:40px !important;letter-spacing:-0.01em !important;font-weight:600}@media(min-width: 768px){.f0-mktg{font-size:40px !important;line-height:52px !important}}@media(min-width: 1012px){.f0-mktg{font-size:48px !important;line-height:64px !important}}.f1-mktg{font-size:24px !important;line-height:32px !important;font-weight:600}@media(min-width: 768px){.f1-mktg{font-size:28px !important;line-height:40px !important;letter-spacing:-0.01em !important}}@media(min-width: 1012px){.f1-mktg{font-size:32px !important;line-height:44px !important}}.f2-mktg{font-size:20px !important;line-height:28px !important}@media(min-width: 1012px){.f2-mktg{font-size:24px !important;line-height:32px !important;font-weight:500}}.f3-mktg{font-size:16px !important;line-height:24px !important}@media(min-width: 768px){.f3-mktg{font-size:20px !important;line-height:28px !important}}.f4-mktg{font-size:16px !important;line-height:24px !important}.f5-mktg{font-size:14px !important;line-height:20px !important}.f6-mktg{font-size:12px !important;line-height:20px !important}.text-medium{font-weight:500 !important}.btn-mktg{position:relative;z-index:1;display:inline-block;padding:.9rem 1.5rem 1.1rem;font-size:1rem;font-weight:700;line-height:1;color:var(--color-canvas-default);text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;user-select:none;background:linear-gradient(180deg, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%),var(--color-mktg-btn-bg) !important;border:0;border-radius:.375rem;transition:box-shadow .2s,outline .2s ease;-webkit-appearance:none !important;appearance:none !important}.btn-mktg::before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;content:"";background:linear-gradient(180deg, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%) !important;border-radius:inherit;opacity:0;opacity:0;transition:opacity .2s;background-blend-mode:normal}.btn-mktg:hover{text-decoration:none;box-shadow:var(--color-mktg-btn-shadow-hover) !important}.btn-mktg:hover::before,.btn-mktg:focus::before,.btn-mktg:focus-visible::before,.btn-mktg.focus::before{opacity:1}.btn-mktg:focus{outline:2px solid var(--color-accent-fg);outline-offset:2px;box-shadow:none}.btn-mktg:focus:not(:focus-visible){outline:solid 1px transparent;box-shadow:none}.btn-mktg:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:2px;box-shadow:none}.btn-mktg:active::before{opacity:.5 !important}.btn-mktg.disabled,.btn-mktg[disabled]{pointer-events:none;cursor:default;opacity:.5}.btn-muted-mktg{color:var(--color-fg-default) !important;background:none !important;box-shadow:var(--color-mktg-btn-shadow-outline)}.btn-muted-mktg::before{display:none}.btn-muted-mktg:hover{box-shadow:var(--color-mktg-btn-shadow-hover-muted) !important}.btn-muted-mktg:active{box-shadow:var(--color-fg-default) 0 0 0 3px inset !important}.btn-muted-mktg:disabled{box-shadow:var(--color-fg-subtle) 0 0 0 1px inset !important}.btn-subtle-mktg{color:var(--color-fg-default) !important;background:none !important;box-shadow:none !important}.btn-subtle-mktg::before{background:none !important}.btn-subtle-mktg:hover{box-shadow:var(--color-mktg-btn-shadow-hover-muted) !important}.btn-signup-mktg{color:#fff;background:linear-gradient(180deg, rgba(52, 183, 89, 0.15) 0%, rgba(46, 164, 79, 0) 100%),#2ea44f !important}.btn-signup-mktg::before{background:linear-gradient(180deg, rgba(52, 183, 89, 0.15) 0%, rgba(46, 164, 79, 0) 100%) !important}.btn-signup-mktg:focus{outline:2px solid var(--color-accent-fg);outline-offset:2px;box-shadow:none}.btn-signup-mktg:focus:not(:focus-visible){outline:solid 1px transparent;box-shadow:none}.btn-signup-mktg:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:2px;box-shadow:none}.btn-small-mktg{padding:.625rem 1rem .8125rem}.btn-large-mktg{padding:16px 30px 20px !important;font-size:1.25rem}.link-mktg{position:relative;display:inline-block}.link-mktg:hover{text-decoration:none}.link-mktg::after,.link-mktg.link-emphasis-mktg::before{position:absolute;bottom:-0.15em;left:0;width:calc(100% - 1em);height:2px;pointer-events:none;content:"";background-color:currentColor;transform:scaleX(0);transform-origin:0 0}@media screen and (prefers-reduced-motion: no-preference){.link-mktg::after,.link-mktg.link-emphasis-mktg::before{transition:transform .3s ease}}.link-mktg.link-emphasis-mktg::before{opacity:.2;transform:scaleX(1)}.link-mktg:hover::after,.link-mktg:active::after{transform:scaleX(1)}.link-mktg:focus,.link-mktg:focus-visible{outline-offset:2px}.link-mktg.arrow-target-mktg .arrow-symbol-mktg{margin-left:-0.25em}.hover-grow-mktg{transition:transform .4s cubic-bezier(0.16, 1, 0.3, 1)}.hover-grow-mktg:hover{transform:scale3d(1.025, 1.025, 1.025)}.btn-mktg .octicon,.link-mktg .octicon,.arrow-target-mktg .octicon{width:1em;height:1em}.btn-mktg .arrow-symbol-mktg,.link-mktg .arrow-symbol-mktg,.arrow-target-mktg .arrow-symbol-mktg{transition:transform .2s;transform:translateX(0)}.btn-mktg .arrow-symbol-mktg path:last-child,.link-mktg .arrow-symbol-mktg path:last-child,.arrow-target-mktg .arrow-symbol-mktg path:last-child{stroke-dasharray:10;stroke-dashoffset:10;transition:stroke-dashoffset .2s}@media screen and (prefers-reduced-motion: no-preference){.btn-mktg:hover .arrow-symbol-mktg,.btn-mktg:focus .arrow-symbol-mktg,.link-mktg:hover .arrow-symbol-mktg,.link-mktg:focus .arrow-symbol-mktg,.arrow-target-mktg:hover .arrow-symbol-mktg,.arrow-target-mktg:focus .arrow-symbol-mktg{transform:translateX(4px)}.btn-mktg:hover .arrow-symbol-mktg path:last-child,.btn-mktg:focus .arrow-symbol-mktg path:last-child,.link-mktg:hover .arrow-symbol-mktg path:last-child,.link-mktg:focus .arrow-symbol-mktg path:last-child,.arrow-target-mktg:hover .arrow-symbol-mktg path:last-child,.arrow-target-mktg:focus .arrow-symbol-mktg path:last-child{stroke-dashoffset:20}.btn-mktg:active .arrow-symbol-mktg,.link-mktg:active .arrow-symbol-mktg,.arrow-target-mktg:active .arrow-symbol-mktg{transform:translateX(6px)}}.grayscale{filter:grayscale(100%)}.top-1{top:4px !important}.right-1{right:4px !important}.bottom-1{bottom:4px !important}.left-1{left:4px !important}.top-n1{top:-4px !important}.right-n1{right:-4px !important}.bottom-n1{bottom:-4px !important}.left-n1{left:-4px !important}.top-2{top:8px !important}.right-2{right:8px !important}.bottom-2{bottom:8px !important}.left-2{left:8px !important}.top-n2{top:-8px !important}.right-n2{right:-8px !important}.bottom-n2{bottom:-8px !important}.left-n2{left:-8px !important}.top-3{top:16px !important}.right-3{right:16px !important}.bottom-3{bottom:16px !important}.left-3{left:16px !important}.top-n3{top:-16px !important}.right-n3{right:-16px !important}.bottom-n3{bottom:-16px !important}.left-n3{left:-16px !important}.top-4{top:24px !important}.right-4{right:24px !important}.bottom-4{bottom:24px !important}.left-4{left:24px !important}.top-n4{top:-24px !important}.right-n4{right:-24px !important}.bottom-n4{bottom:-24px !important}.left-n4{left:-24px !important}.top-5{top:32px !important}.right-5{right:32px !important}.bottom-5{bottom:32px !important}.left-5{left:32px !important}.top-n5{top:-32px !important}.right-n5{right:-32px !important}.bottom-n5{bottom:-32px !important}.left-n5{left:-32px !important}.top-6{top:40px !important}.right-6{right:40px !important}.bottom-6{bottom:40px !important}.left-6{left:40px !important}.top-n6{top:-40px !important}.right-n6{right:-40px !important}.bottom-n6{bottom:-40px !important}.left-n6{left:-40px !important}.top-7{top:48px !important}.right-7{right:48px !important}.bottom-7{bottom:48px !important}.left-7{left:48px !important}.top-n7{top:-48px !important}.right-n7{right:-48px !important}.bottom-n7{bottom:-48px !important}.left-n7{left:-48px !important}.top-8{top:64px !important}.right-8{right:64px !important}.bottom-8{bottom:64px !important}.left-8{left:64px !important}.top-n8{top:-64px !important}.right-n8{right:-64px !important}.bottom-n8{bottom:-64px !important}.left-n8{left:-64px !important}.top-9{top:80px !important}.right-9{right:80px !important}.bottom-9{bottom:80px !important}.left-9{left:80px !important}.top-n9{top:-80px !important}.right-n9{right:-80px !important}.bottom-n9{bottom:-80px !important}.left-n9{left:-80px !important}.top-10{top:96px !important}.right-10{right:96px !important}.bottom-10{bottom:96px !important}.left-10{left:96px !important}.top-n10{top:-96px !important}.right-n10{right:-96px !important}.bottom-n10{bottom:-96px !important}.left-n10{left:-96px !important}.top-11{top:112px !important}.right-11{right:112px !important}.bottom-11{bottom:112px !important}.left-11{left:112px !important}.top-n11{top:-112px !important}.right-n11{right:-112px !important}.bottom-n11{bottom:-112px !important}.left-n11{left:-112px !important}.top-12{top:128px !important}.right-12{right:128px !important}.bottom-12{bottom:128px !important}.left-12{left:128px !important}.top-n12{top:-128px !important}.right-n12{right:-128px !important}.bottom-n12{bottom:-128px !important}.left-n12{left:-128px !important}@media(min-width: 768px){.top-md-0{top:0 !important}.right-md-0{right:0 !important}.bottom-md-0{bottom:0 !important}.left-md-0{left:0 !important}.top-md-1{top:4px !important}.right-md-1{right:4px !important}.bottom-md-1{bottom:4px !important}.left-md-1{left:4px !important}.top-md-n1{top:-4px !important}.right-md-n1{right:-4px !important}.bottom-md-n1{bottom:-4px !important}.left-md-n1{left:-4px !important}.top-md-2{top:8px !important}.right-md-2{right:8px !important}.bottom-md-2{bottom:8px !important}.left-md-2{left:8px !important}.top-md-n2{top:-8px !important}.right-md-n2{right:-8px !important}.bottom-md-n2{bottom:-8px !important}.left-md-n2{left:-8px !important}.top-md-3{top:16px !important}.right-md-3{right:16px !important}.bottom-md-3{bottom:16px !important}.left-md-3{left:16px !important}.top-md-n3{top:-16px !important}.right-md-n3{right:-16px !important}.bottom-md-n3{bottom:-16px !important}.left-md-n3{left:-16px !important}.top-md-4{top:24px !important}.right-md-4{right:24px !important}.bottom-md-4{bottom:24px !important}.left-md-4{left:24px !important}.top-md-n4{top:-24px !important}.right-md-n4{right:-24px !important}.bottom-md-n4{bottom:-24px !important}.left-md-n4{left:-24px !important}.top-md-5{top:32px !important}.right-md-5{right:32px !important}.bottom-md-5{bottom:32px !important}.left-md-5{left:32px !important}.top-md-n5{top:-32px !important}.right-md-n5{right:-32px !important}.bottom-md-n5{bottom:-32px !important}.left-md-n5{left:-32px !important}.top-md-6{top:40px !important}.right-md-6{right:40px !important}.bottom-md-6{bottom:40px !important}.left-md-6{left:40px !important}.top-md-n6{top:-40px !important}.right-md-n6{right:-40px !important}.bottom-md-n6{bottom:-40px !important}.left-md-n6{left:-40px !important}.top-md-7{top:48px !important}.right-md-7{right:48px !important}.bottom-md-7{bottom:48px !important}.left-md-7{left:48px !important}.top-md-n7{top:-48px !important}.right-md-n7{right:-48px !important}.bottom-md-n7{bottom:-48px !important}.left-md-n7{left:-48px !important}.top-md-8{top:64px !important}.right-md-8{right:64px !important}.bottom-md-8{bottom:64px !important}.left-md-8{left:64px !important}.top-md-n8{top:-64px !important}.right-md-n8{right:-64px !important}.bottom-md-n8{bottom:-64px !important}.left-md-n8{left:-64px !important}.top-md-9{top:80px !important}.right-md-9{right:80px !important}.bottom-md-9{bottom:80px !important}.left-md-9{left:80px !important}.top-md-n9{top:-80px !important}.right-md-n9{right:-80px !important}.bottom-md-n9{bottom:-80px !important}.left-md-n9{left:-80px !important}.top-md-10{top:96px !important}.right-md-10{right:96px !important}.bottom-md-10{bottom:96px !important}.left-md-10{left:96px !important}.top-md-n10{top:-96px !important}.right-md-n10{right:-96px !important}.bottom-md-n10{bottom:-96px !important}.left-md-n10{left:-96px !important}.top-md-11{top:112px !important}.right-md-11{right:112px !important}.bottom-md-11{bottom:112px !important}.left-md-11{left:112px !important}.top-md-n11{top:-112px !important}.right-md-n11{right:-112px !important}.bottom-md-n11{bottom:-112px !important}.left-md-n11{left:-112px !important}.top-md-12{top:128px !important}.right-md-12{right:128px !important}.bottom-md-12{bottom:128px !important}.left-md-12{left:128px !important}.top-md-n12{top:-128px !important}.right-md-n12{right:-128px !important}.bottom-md-n12{bottom:-128px !important}.left-md-n12{left:-128px !important}}@media(min-width: 1012px){.top-lg-0{top:0 !important}.right-lg-0{right:0 !important}.bottom-lg-0{bottom:0 !important}.left-lg-0{left:0 !important}.top-lg-1{top:4px !important}.right-lg-1{right:4px !important}.bottom-lg-1{bottom:4px !important}.left-lg-1{left:4px !important}.top-lg-n1{top:-4px !important}.right-lg-n1{right:-4px !important}.bottom-lg-n1{bottom:-4px !important}.left-lg-n1{left:-4px !important}.top-lg-2{top:8px !important}.right-lg-2{right:8px !important}.bottom-lg-2{bottom:8px !important}.left-lg-2{left:8px !important}.top-lg-n2{top:-8px !important}.right-lg-n2{right:-8px !important}.bottom-lg-n2{bottom:-8px !important}.left-lg-n2{left:-8px !important}.top-lg-3{top:16px !important}.right-lg-3{right:16px !important}.bottom-lg-3{bottom:16px !important}.left-lg-3{left:16px !important}.top-lg-n3{top:-16px !important}.right-lg-n3{right:-16px !important}.bottom-lg-n3{bottom:-16px !important}.left-lg-n3{left:-16px !important}.top-lg-4{top:24px !important}.right-lg-4{right:24px !important}.bottom-lg-4{bottom:24px !important}.left-lg-4{left:24px !important}.top-lg-n4{top:-24px !important}.right-lg-n4{right:-24px !important}.bottom-lg-n4{bottom:-24px !important}.left-lg-n4{left:-24px !important}.top-lg-5{top:32px !important}.right-lg-5{right:32px !important}.bottom-lg-5{bottom:32px !important}.left-lg-5{left:32px !important}.top-lg-n5{top:-32px !important}.right-lg-n5{right:-32px !important}.bottom-lg-n5{bottom:-32px !important}.left-lg-n5{left:-32px !important}.top-lg-6{top:40px !important}.right-lg-6{right:40px !important}.bottom-lg-6{bottom:40px !important}.left-lg-6{left:40px !important}.top-lg-n6{top:-40px !important}.right-lg-n6{right:-40px !important}.bottom-lg-n6{bottom:-40px !important}.left-lg-n6{left:-40px !important}.top-lg-7{top:48px !important}.right-lg-7{right:48px !important}.bottom-lg-7{bottom:48px !important}.left-lg-7{left:48px !important}.top-lg-n7{top:-48px !important}.right-lg-n7{right:-48px !important}.bottom-lg-n7{bottom:-48px !important}.left-lg-n7{left:-48px !important}.top-lg-8{top:64px !important}.right-lg-8{right:64px !important}.bottom-lg-8{bottom:64px !important}.left-lg-8{left:64px !important}.top-lg-n8{top:-64px !important}.right-lg-n8{right:-64px !important}.bottom-lg-n8{bottom:-64px !important}.left-lg-n8{left:-64px !important}.top-lg-9{top:80px !important}.right-lg-9{right:80px !important}.bottom-lg-9{bottom:80px !important}.left-lg-9{left:80px !important}.top-lg-n9{top:-80px !important}.right-lg-n9{right:-80px !important}.bottom-lg-n9{bottom:-80px !important}.left-lg-n9{left:-80px !important}.top-lg-10{top:96px !important}.right-lg-10{right:96px !important}.bottom-lg-10{bottom:96px !important}.left-lg-10{left:96px !important}.top-lg-n10{top:-96px !important}.right-lg-n10{right:-96px !important}.bottom-lg-n10{bottom:-96px !important}.left-lg-n10{left:-96px !important}.top-lg-11{top:112px !important}.right-lg-11{right:112px !important}.bottom-lg-11{bottom:112px !important}.left-lg-11{left:112px !important}.top-lg-n11{top:-112px !important}.right-lg-n11{right:-112px !important}.bottom-lg-n11{bottom:-112px !important}.left-lg-n11{left:-112px !important}.top-lg-12{top:128px !important}.right-lg-12{right:128px !important}.bottom-lg-12{bottom:128px !important}.left-lg-12{left:128px !important}.top-lg-n12{top:-128px !important}.right-lg-n12{right:-128px !important}.bottom-lg-n12{bottom:-128px !important}.left-lg-n12{left:-128px !important}}.offset-n1{margin-left:-8.33333333%}.offset-n2{margin-left:-16.66666666%}.offset-n3{margin-left:-24.99999999%}.offset-n4{margin-left:-33.33333332%}.offset-n5{margin-left:-41.66666665%}.offset-n6{margin-left:-49.99999998%}.offset-n7{margin-left:-58.33333331%}@media(min-width: 544px){.offset-sm-n1{margin-left:-8.33333333%}.offset-sm-n2{margin-left:-16.66666666%}.offset-sm-n3{margin-left:-24.99999999%}.offset-sm-n4{margin-left:-33.33333332%}.offset-sm-n5{margin-left:-41.66666665%}.offset-sm-n6{margin-left:-49.99999998%}.offset-sm-n7{margin-left:-58.33333331%}}@media(min-width: 768px){.offset-md-n1{margin-left:-8.33333333%}.offset-md-n2{margin-left:-16.66666666%}.offset-md-n3{margin-left:-24.99999999%}.offset-md-n4{margin-left:-33.33333332%}.offset-md-n5{margin-left:-41.66666665%}.offset-md-n6{margin-left:-49.99999998%}.offset-md-n7{margin-left:-58.33333331%}}@media(min-width: 1012px){.offset-lg-n1{margin-left:-8.33333333%}.offset-lg-n2{margin-left:-16.66666666%}.offset-lg-n3{margin-left:-24.99999999%}.offset-lg-n4{margin-left:-33.33333332%}.offset-lg-n5{margin-left:-41.66666665%}.offset-lg-n6{margin-left:-49.99999998%}.offset-lg-n7{margin-left:-58.33333331%}}@media(min-width: 1280px){.offset-xl-n1{margin-left:-8.33333333%}.offset-xl-n2{margin-left:-16.66666666%}.offset-xl-n3{margin-left:-24.99999999%}.offset-xl-n4{margin-left:-33.33333332%}.offset-xl-n5{margin-left:-41.66666665%}.offset-xl-n6{margin-left:-49.99999998%}.offset-xl-n7{margin-left:-58.33333331%}}.width-auto{width:auto !important}.height-auto{height:auto !important}.object-fit-cover{object-fit:cover !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}.z-n1{z-index:-1 !important}.z-n2{z-index:-2 !important}.box-shadow-default-mktg{box-shadow:0 2.75px 2.21px rgba(0,0,0,.07),0 6.65px 5.32px rgba(0,0,0,.043),0 12.5px 10px rgba(0,0,0,.03),0 22px 18px rgba(0,0,0,.03),0 42px 33.4px rgba(0,0,0,.02),0 100px 80px rgba(0,0,0,.017) !important}.box-shadow-active-mktg{box-shadow:0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09) !important}.box-shadow-card-mktg{box-shadow:0 3px 2px rgba(0,0,0,.04),0 7px 5px rgba(0,0,0,.02),0 13px 10px rgba(0,0,0,.02),0 22px 17px rgba(0,0,0,.02) !important}.box-shadow-default-border-mktg{box-shadow:0 0 0 1px rgba(53,72,91,.14),0 2.75px 2.21px rgba(0,0,0,.07),0 6.65px 5.32px rgba(0,0,0,.043),0 12.5px 10px rgba(0,0,0,.03),0 22px 18px rgba(0,0,0,.03),0 42px 33.4px rgba(0,0,0,.02),0 100px 80px rgba(0,0,0,.017) !important}.box-shadow-active-border-mktg{box-shadow:0 0 0 1px rgba(53,72,91,.14),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09) !important}.box-shadow-active-border-inverse-mktg{box-shadow:0 0 0 1px rgba(0,0,0,.5),0 70px 65px rgba(0,0,0,.18),0 30px 30px rgba(0,0,0,.14),0 15px 15px rgba(0,0,0,.12),0 10px 8px rgba(0,0,0,.1),0 4px 4px rgba(0,0,0,.08),0 2px 2px rgba(0,0,0,.06) !important}.box-shadow-active-border-light-mktg{box-shadow:0 0 0 1px rgba(255,255,255,.1),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09) !important}.box-shadow-card-border-mktg{box-shadow:0 0 0 1px rgba(53,72,91,.14),0 3px 2px rgba(0,0,0,.04),0 7px 5px rgba(0,0,0,.02),0 13px 10px rgba(0,0,0,.02),0 22px 17px rgba(0,0,0,.02) !important}.box-shadow-card-border-inverse-mktg{box-shadow:0 0 0 1px rgba(0,0,0,.5),0 97px 77px rgba(0,0,0,.02),0 40px 32px rgba(0,0,0,.02),0 21.6px 17px rgba(0,0,0,.03),0 12px 9.7px rgba(0,0,0,.04),0 6.4px 5px rgba(0,0,0,.04),0 2.7px 2.1px rgba(0,0,0,.07) !important}.box-shadow-card-border-light-mktg{box-shadow:0 0 0 1px rgba(255,255,255,.1),0 3px 2px rgba(0,0,0,.04),0 7px 5px rgba(0,0,0,.02),0 13px 10px rgba(0,0,0,.02),0 22px 17px rgba(0,0,0,.02) !important}.box-shadow-mktg-xl{box-shadow:0 2.74416px 2.74416px rgba(0,0,0,.0274351),0 5.48831px 5.48831px rgba(0,0,0,.0400741),0 13.7208px 10.9766px rgba(0,0,0,.0499982),0 20.5812px 20.5812px rgba(0,0,0,.0596004),0 41.1623px 41.1623px rgba(0,0,0,.0709366),0 96.0454px 89.1851px rgba(0,0,0,.09)}.box-shadow-card-dark-mktg{position:relative;box-shadow:0 0 0 1px #000,0 30px 30px rgba(0,0,0,.07),0 15px 15px rgba(0,0,0,.06),0 10px 8px rgba(0,0,0,.05),0 4px 4px rgba(0,0,0,.04),0 2px 2px rgba(0,0,0,.03)}.box-shadow-card-dark-mktg::after{position:absolute;top:0;left:0;display:block;width:100%;height:100%;pointer-events:none;content:"";border-radius:inherit;box-shadow:inset 0 1px 1px rgba(255,255,255,.1)}.opacity-4{opacity:.4}.text-gray-mktg{color:#627597 !important}.text-gray-dark-mktg{color:#040d21 !important}.text-gray-light-mktg{color:#8193b2 !important}.text-purple-mktg{color:#6f57ff !important;transition:color .4s}a.text-purple-mktg:hover{color:#614eda !important}.text-white-fade{color:rgba(255,255,255,.7) !important}.code-green{color:#0dbc79}.code-pink{color:#ea4aaa}.bg-gray-dark-mktg{background-color:#040d21}.bg-blue-dark{background-color:#032f62 !important}.bg-radial-white{background:radial-gradient(145.3% 145.3% at 65.91% 0%, #fff 0%, #f0f0f0 100%)}.bg-gray-800-mktg{background-color:#0c162d}.text-gradient-mint-blue-dark{background:-webkit-linear-gradient(-70deg, #a2facf 0%, #64acff 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone}.text-gradient-coral-yellow-dark{background:-webkit-linear-gradient(-70deg, #ff7170 0%, #ffe57f 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone}.text-gradient-turq-purple-dark{background:-webkit-linear-gradient(-70deg, #3bf0e4 0%, #bca1f7 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone}.text-gradient-blue-green{background:-webkit-linear-gradient(-70deg, #2188ff 0%, #01a49e 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone}.text-gradient-red-orange{background:-webkit-linear-gradient(-70deg, #ed4e50 0%, #f06f00 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone}.text-gradient-purple-coral{background:-webkit-linear-gradient(-70deg, #9867f0 0%, #ed4e50 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone}.text-gradient-blue-purple{background:-webkit-linear-gradient(-70deg, #2188ff 0%, #804eda 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone}.text-gradient-mint-blue{background:linear-gradient(271.72deg, #a2facf 7.09%, #64acff 96.61%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.text-gradient-pink-blue{background:-webkit-linear-gradient(-70deg, #db469f 0%, #2188ff 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone}.text-gradient-mktg{background:-webkit-linear-gradient(-70deg, var(--mktg-accent-primary, #9867f0) 0%, var(--mktg-accent-secondary, #ed4e50) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone}.text-gradient-copilot{background:-webkit-linear-gradient(300deg, #93f5ec 20%, #a77bf3 70%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone}.gradient-border-mktg{position:relative}.gradient-border-mktg::before{position:absolute;top:-1px;left:-1px;z-index:-1;width:100%;height:100%;content:"";background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default)),radial-gradient(circle at top left, var(--mktg-accent-primary, #9867f0), var(--mktg-accent-secondary, #ed4e50));background-clip:content-box,border-box;background-origin:border-box;border:double 1px transparent;border-radius:2em}:root [data-color-mode=dark]{--color-canvas-default: #0d1117}.by-2>*+*{margin-top:8px !important}@media(min-width: 1012px){.bx-lg-2>*+*{margin-left:8px !important}}@media(min-width: 768px){.bx-md-4>*+*{margin-left:24px !important}}@media(min-width: 768px){.by-md-0>*+*{margin-top:0 !important}}@media(min-width: 1012px){.by-lg-0>*+*{margin-top:0 !important}}.col-5-max{width:100%;max-width:33.75rem}@media(min-width: 544px){.col-5-max{max-width:34.375rem}}@media(min-width: 544px){.col-5-max{max-width:33.75rem}}.col-6-max{width:100%;max-width:40.5rem}@media(min-width: 544px){.col-6-max{max-width:41.25rem}}@media(min-width: 1012px){.col-6-max{max-width:40.5rem}}.col-7-max{width:100%;max-width:47.25rem}@media(min-width: 544px){.col-7-max{max-width:48.125rem}}@media(min-width: 1012px){.col-7-max{max-width:47.25rem}}.col-8-max{width:100%;max-width:54rem}@media(min-width: 544px){.col-8-max{max-width:55rem}}@media(min-width: 1012px){.col-8-max{max-width:54rem}}.col-9-max{width:100%;max-width:60.75rem}@media(min-width: 544px){.col-9-max{max-width:61.875rem}}@media(min-width: 1012px){.col-9-max{max-width:61.5rem}}.col-10-max{width:100%;max-width:67.5rem}@media(min-width: 544px){.col-10-max{max-width:68.75rem}}@media(min-width: 1012px){.col-10-max{max-width:67.5rem}}.container-xxl{max-width:1548px;margin-right:auto;margin-left:auto}@media(min-width: 544px){.gutter-sm-0{margin-right:0rem;margin-left:0rem}.gutter-sm-0>[class*=col-]{padding-right:0rem !important;padding-left:0rem !important}}@media(min-width: 768px){.gutter-md-0{margin-right:0rem;margin-left:0rem}.gutter-md-0>[class*=col-]{padding-right:0rem !important;padding-left:0rem !important}}@media(min-width: 1012px){.gutter-lg-0{margin-right:0rem;margin-left:0rem}.gutter-lg-0>[class*=col-]{padding-right:0rem !important;padding-left:0rem !important}}@media(min-width: 1280px){.top-xl-0{top:0 !important}}@media(min-width: 1280px){.top-xl-3{top:16px !important}}@media(min-width: 1280px){.top-xl-5{top:32px !important}}@media(min-width: 1280px){.top-xl-n5{top:-32px !important}}@media(min-width: 1280px){.top-xl-n10{top:-96px !important}}@media(min-width: 1280px){.top-xl-n12{top:-128px !important}}@media(min-width: 1280px){.right-xl-0{right:0 !important}}@media(min-width: 768px){.left-md-auto.left-md-auto{left:auto !important}}.wide-block{max-width:1464px;padding:6.5rem 0 0 !important;background-color:#040d21}@media(min-width: 1464px){.wide-block{border-radius:1rem !important}}@media(max-width: 1464px){.wide-block-container{overflow:hidden !important}}@media(min-width: 1464px){.wide-block-container{margin-bottom:80px}}.img-responsive{display:block;width:100%;max-width:100%;height:auto}.underlined-mktg{position:relative;text-decoration:none !important}.underlined-mktg::after{position:absolute;bottom:-0.15em;left:0;display:block;width:100%;height:1px;pointer-events:none;content:"";background-color:currentColor;opacity:.5;transition:opacity .3s ease}.underlined-mktg:hover::after{opacity:1}.cursor-pointer{cursor:pointer}.events-none{pointer-events:none}.events-auto{pointer-events:auto}@media(min-width: 1012px){.mr-lg-9{margin-right:80px !important}}.my-auto{margin-top:auto;margin-bottom:auto}.mr-7{margin-right:48px !important}.ml-n7{margin-left:-48px !important}@media(min-width: 768px){.pt-md-0{margin-bottom:0 !important}.py-md-7{padding-top:48px !important;padding-bottom:48px !important}.px-md-8{padding-right:64px !important;padding-left:64px !important}.px-md-10{padding-right:96px !important;padding-left:96px !important}}@media(min-width: 1012px){.px-lg-8{padding-right:64px !important;padding-left:64px !important}}@font-face{font-family:"Mona Sans";src:url("/static/fonts/github/mona-sans.woff2") format("woff2 supports variations"),url("/static/fonts/github/mona-sans.woff2") format("woff2-variations");font-weight:200 900;font-stretch:75% 125%;font-display:swap}@font-face{font-family:"Hubot Sans";src:url("/static/fonts/github/hubot-sans.woff2") format("woff2 supports variations"),url("/static/fonts/github/hubot-sans.woff2") format("woff2-variations");font-weight:200 900;font-stretch:75% 125%;font-display:swap}@font-face{font-family:"Mona Sans Fallback";size-adjust:108.5%;ascent-override:82%;src:local(Arial)}@font-face{font-family:"Mona Sans Header Fallback";size-adjust:102.7%;ascent-override:82%;src:local(Arial Bold)}.font-mktg{font-family:"Mona Sans","Mona Sans Fallback",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";word-break:keep-all}.font-mktg .text-semibold{font-weight:600 !important}.font-mktg .text-bold{font-family:"Mona Sans","Mona Sans Header Fallback",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol" !important;font-weight:700 !important}.font-mktg .text-italic{font-variation-settings:"ital" 10;font-synthesis:none}.font-mktg [data-color-mode=dark]{--color-fg-default: #fff !important}.font-mktg .font-alt-mktg{font-family:"Hubot Sans","Mona Sans","Mona Sans Fallback",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol" !important;font-feature-settings:"liga","ss02"}.h1-mktg,.h2-mktg,.h3-mktg,.h4-mktg,.h5-mktg{font-family:"Mona Sans","Mona Sans Header Fallback",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-feature-settings:unset}.f0-mktg,.f1-mktg,.f2-mktg,.f3-mktg,.f4-mktg,.f5-mktg,.f6-mktg{font-feature-settings:unset}.text-ultra-light{font-weight:200 !important}.text-medium{font-weight:500 !important}.text-extrabold{font-family:"Mona Sans","Mona Sans Header Fallback",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol" !important;font-weight:800 !important}.text-heavy{font-family:"Mona Sans","Mona Sans Header Fallback",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol" !important;font-weight:900}.lh-condensed-mktg{line-height:1.1 !important}.btn-mktg{padding-top:1rem;padding-bottom:1rem}.btn-small-mktg{padding:.7rem 1rem}.btn-large-mktg{padding:18px 30px !important}.text-spaced{letter-spacing:.075em !important}.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.river-mktg em{font-style:normal;color:var(--color-fg-default)}.river-mktg strike{color:var(--color-fg-muted)}.river-mktg p code{font-size:90%}.river-mktg code i{font-style:normal;color:var(--color-fg-default)}.feature-card-mktg em{font-style:normal;color:var(--color-fg-default)}.text-extra-condensed{font-stretch:75%}.text-condensed{font-stretch:87.5%}.text-expanded{font-stretch:125%}.unselectable{-webkit-user-select:none;user-select:none}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pre-line{white-space:pre-line}.hanging-quote-mktg{position:relative}.hanging-quote-mktg::before{position:absolute;top:0;left:0;font-size:1em;font-weight:700;line-height:1;pointer-events:none;content:"“";background:var(--mktg-accent-primary);-webkit-background-clip:text;-webkit-text-fill-color:transparent;transform:translateY(-60%);clip-path:polygon(0 0, 100% 0, 100% 98%, 0 98%)}@media(min-width: 768px){.hanging-quote-mktg::before{transform:translateX(-130%)}}.build-in-fade{opacity:0;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1),transform .6s cubic-bezier(0.16, 1, 0.3, 1)}.build-in-fade.build-in-animate{opacity:1}.build-out-fade{opacity:1;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1),transform .6s cubic-bezier(0.16, 1, 0.3, 1)}.build-out-fade.build-in-animate{opacity:0}.build-in-slideY{opacity:0;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1),transform .6s cubic-bezier(0.16, 1, 0.3, 1);transform:translateY(15px)}.build-in-slideY.build-in-animate{opacity:1;transform:translateY(0)}.build-in-slideX-left{opacity:0;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1),transform .6s cubic-bezier(0.16, 1, 0.3, 1);transform:translateX(-15px)}.build-in-slideX-left.build-in-animate{opacity:1;transform:translateX(0)}.build-in-slideX-right{opacity:0;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1),transform .6s cubic-bezier(0.16, 1, 0.3, 1);transform:translateX(15px)}.build-in-slideX-right.build-in-animate{opacity:1;transform:translateX(0)}.build-in-scale-up{opacity:0;transition:opacity .7s cubic-bezier(0.16, 1, 0.3, 1),transform .7s cubic-bezier(0.16, 1, 0.3, 1);transform:scale(0.96) translateY(24px)}.build-in-scale-up.build-in-animate{opacity:1;transform:scale(1) translateY(0)}.build-in-scale-down{opacity:0;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1),transform .6s cubic-bezier(0.16, 1, 0.3, 1);transform:translateY(-50px) scale(0)}.build-in-scale-down.build-in-animate{opacity:1;transform:translateY(0)}.build-in-scale-right{opacity:0;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1),transform .6s cubic-bezier(0.16, 1, 0.3, 1);transform:scale(0.9) translateX(-20px)}.build-in-scale-right.build-in-animate{opacity:1;transform:translateY(0)}.build-in-scale-left{opacity:0;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1),transform .6s cubic-bezier(0.16, 1, 0.3, 1);transform:scale(0.9) translateX(20px)}.build-in-scale-left.build-in-animate{opacity:1;transform:translateY(0)}.build-in-scale-fade{opacity:0;transition:opacity .7s cubic-bezier(0.16, 1, 0.3, 1),transform .7s cubic-bezier(0.16, 1, 0.3, 1);transform:scale(0.96)}.build-in-scale-fade.build-in-animate{opacity:1;transform:scale(1)}.build-in-reduced{transition-delay:0s !important;transition-duration:0s !important;animation-duration:0s !important;animation-delay:0s !important}.build-in-reduced *{transition-delay:0s !important;transition-duration:0s !important;animation-duration:0s !important;animation-delay:0s !important}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@keyframes float-translate{50%{transform:translateY(-7px)}}@keyframes float{0%{transform:rotate(10deg) translateY(0)}50%{transform:rotate(5deg) translateY(-10px)}100%{transform:rotate(10deg) translateY(0)}}.animation-is-typing{position:relative}.animation-is-typing::before{position:absolute;top:0;right:-0.8em;bottom:0;display:block;height:100%;margin-top:auto;margin-bottom:auto;font-size:1em;line-height:1em;content:"▊"}.build-in-animate .animation-is-typing::before{animation:BlinkingCursor .75s infinite}@keyframes BlinkingCursor{0%,45%{opacity:1}55%,100%{opacity:0}}.animate-float{animation:float 12s ease-in-out infinite}.header-white .header-logged-out,.header-white .Header{background-color:#fff !important}.header-white .header-logged-out:not(.open),.header-white .Header:not(.open){color:var(--color-fg-default) !important}.header-white .header-logged-out:not(.open) .HeaderMenu-toggle-bar,.header-white .Header:not(.open) .HeaderMenu-toggle-bar{background-color:var(--color-fg-default) !important}.header-white .Header-link,.header-white .HeaderMenu-link{color:var(--color-fg-default) !important}.header-white .Header-link:hover,.header-white .HeaderMenu-link:hover{color:var(--color-fg-muted) !important}@media(min-width: 1012px){.header-white .header-search-wrapper{background:#dfdfdf !important;border-color:transparent}}.header-white header:not(.header-logged-out) .header-search-wrapper,.header-white header:not(.header-logged-out) .search-input-container{background:#dfdfdf !important;border-color:transparent}.header-white header:not(.header-logged-out) .header-search-button,.header-white header:not(.header-logged-out) .header-search-input{color:var(--color-fg-default) !important}.header-white header:not(.header-logged-out) .header-search-button.placeholder,.header-white header:not(.header-logged-out) .header-search-input::placeholder{color:var(--color-fg-muted) !important}.header-white .notification-indicator .mail-status{border-color:#fff !important}.header-white-transparent .header-logged-out,.header-white-transparent .Header{background-color:transparent !important}.header-dark .Header-old,.header-dark .Header,.header-dark .AppHeader{--AppHeader-bg: rgb(13, 17, 23);background-color:var(--AppHeader-bg) !important}.header-black .Header-old,.header-black .Header,.header-black .AppHeader{--AppHeader-bg: black;background-color:var(--AppHeader-bg) !important}.header-overlay .header-logged-out,.header-overlay .Header,.header-overlay .AppHeader{position:absolute !important;right:0;left:0}.header-overlay .AppHeader{--AppHeader-bg: transparent;z-index:2}.header-overlay .header-logged-out,.header-overlay .Header:not(.open){background-color:transparent}@media(min-width: 1012px){.header-overlay .header-search-wrapper{background-color:rgba(46,55,74,.82) !important}}.header-overlay .Header-button,.header-overlay .search-input-container{background-color:rgba(46,55,74,.82) !important}.header-overlay .AppHeader,.header-overlay .AppHeader .form-control,.header-overlay .AppHeader .AppHeader-button,.header-dark .AppHeader,.header-dark .AppHeader .form-control,.header-dark .AppHeader .AppHeader-button,.header-black .AppHeader,.header-black .AppHeader .form-control,.header-black .AppHeader .AppHeader-button{box-shadow:none}.header-overlay .AppHeader,.header-overlay .AppHeader .AppHeader-logo>*,.header-overlay .AppHeader .AppHeader-button,.header-dark .AppHeader,.header-dark .AppHeader .AppHeader-logo>*,.header-dark .AppHeader .AppHeader-button,.header-black .AppHeader,.header-black .AppHeader .AppHeader-logo>*,.header-black .AppHeader .AppHeader-button{color:#fff !important}[data-color-mode=dark] .footer-logo-mktg{color:var(--color-scale-white)}.testimonial-logo{height:3rem}.testimonial-avatar{width:5rem;height:5rem;border:4px solid #fff}.testimonial-image-blend{mix-blend-mode:color-burn}.terminal-mktg{min-height:280px}.terminal-mktg a{color:var(--color-fg-default)}.terminal-mktg var{font-style:normal;color:var(--color-fg-muted)}.terminal-mktg em{font-style:normal;color:var(--color-success-fg)}.terminal-mktg del{color:var(--color-danger-fg);text-decoration:none}.site-subnav{box-shadow:0 1px 0 rgba(0,0,0,.1)}.subnav-link{font-size:12px;color:var(--color-fg-muted);cursor:pointer;border:0;border-bottom:2px solid transparent;transition:border-bottom-color .4s}@media(min-width: 768px){.subnav-link{font-size:14px}}.subnav-link:hover{color:var(--color-fg-default);border-bottom-color:var(--color-border-default)}.subnav-link.selected{font-weight:600;color:var(--color-fg-default) !important;border-bottom-color:#1074e7}.subnav-primary{flex-basis:100%;border-bottom-color:transparent}@media(min-width: 768px){.subnav-primary{flex-basis:auto}}.subnav-primary:hover{border-bottom-color:transparent}@media(min-width: 768px){.subnav-primary:hover{border-bottom-color:var(--color-border-default)}}.subnav-primary.selected{border-bottom-color:transparent}@media(min-width: 768px){.subnav-primary.selected{border-bottom-color:#1074e7}}.site-subnav-sticky{position:sticky;top:0;z-index:21}.site-subnav-sticky.is-stuck{background-clip:padding-box}.pattern-container{height:160% !important}.resource-card{transition:transform .6s cubic-bezier(0.16, 1, 0.3, 1)}.resource-card::before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:"";border-radius:inherit;box-shadow:0 4px 14px rgba(0,0,0,.1);opacity:0;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1)}.resource-card:hover{transform:scale3d(1.025, 1.025, 1)}.resource-card:hover::before{opacity:1}.resource-card:hover .octicon-chevrow,.resource-card:focus .octicon-chevrow{transform:translateX(8px)}.read-more-link::before{position:absolute;top:0;left:0%;width:100%;height:100%;content:"";box-shadow:0 1px 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1),0 4px 4px rgba(0,0,0,.1),0 8px 8px rgba(0,0,0,.1),0 16px 16px rgba(0,0,0,.1);opacity:0;transition:opacity .6s ease}.read-more-link:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.read-more-link:first-child::before{border-top-left-radius:inherit;border-top-right-radius:inherit}.read-more-link:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.read-more-link:last-child::before{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.read-more-link:hover::before{opacity:1}.read-more-link~.read-more-link{border-top:1px solid var(--color-border-default)}.icon-container{width:6rem;height:6rem;line-height:5.75rem;background:radial-gradient(227.48% 373.86% at 50% 220.45%, #9e7bff 31.77%, #3d8bd3 100%)}.icon-container img{width:3.5rem;height:3.5rem}.looping-mktg[loop]:hover{cursor:url("/images/modules/site/icons/cursor-pause.svg"),auto}.looping-paused-mktg[loop]:hover{cursor:url("/images/modules/site/icons/cursor-play.svg"),auto}@media screen and (prefers-reduced-motion: no-preference){.img-reduced-motion{display:none !important}}@media screen and (prefers-reduced-motion: reduce){.video-reduced-motion{display:none !important}}.video-responsive{position:relative;max-width:100%;height:0;padding-bottom:56.25%}.video-responsive iframe,.video-responsive object,.video-responsive embed{position:absolute;top:0;left:0;width:100%;height:100%}.togglevideo .togglevideo-hidewhencollapsed{display:none}.togglevideo.is-expanded .togglevideo-hidewhenexpanded{display:none !important}.togglevideo.is-expanded .togglevideo-showwhenexpanded{display:block !important}.SegmentedNav .selected{color:var(--color-fg-muted)}.SegmentedContent{display:none}.SegmentedContent.active{display:block}.SegmentedNav .UnderlineNav-item.selected{border-bottom-color:var(--color-accent-emphasis)}.SegmentedNav .subnav-item{background-color:var(--color-canvas-default)}.SegmentedNav .subnav-item:hover,.SegmentedNav .subnav-item:focus{background-color:var(--color-canvas-subtle)}.SegmentedNav .subnav-item.selected{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.fade-img-to-white-bg::before,.fade-img-to-white-bg::after{display:block;height:8px;content:""}@media(min-width: 768px){.fade-img-to-white-bg::before,.fade-img-to-white-bg::after{height:40px}}.fade-img-to-white-bg::before{background:linear-gradient(to bottom, #fff 0%, rgba(255, 255, 255, 0) 100%)}.fade-img-to-white-bg::after{background:linear-gradient(to top, #fff 0%, rgba(255, 255, 255, 0) 100%)}.pricing-card-accordion[open] .octicon-chevron-right{height:auto;transform:rotate(90deg)}.pricing-card-accordion:hover .pricing-card-accordion-state .octicon{color:var(--color-fg-muted)}.pricing-card-accordion-state .octicon{color:var(--color-fg-muted);transition:transform .09s ease-out}.sub-nav-mktg.is-stuck{background:var(--color-canvas-default);box-shadow:var(--color-shadow-medium),0 1px 1px rgba(0,0,0,.1)}.sub-nav-mktg-shadow{box-shadow:var(--sub-nav-mktg-shadow)}:root{--sub-nav-mktg-shadow: 0 0 0 1px rgba(53, 72, 91, 0.14), 0 3px 2px rgba(0, 0, 0, 0.04), 0 7px 7px rgba(0, 0, 0, 0.03)}:root [data-color-mode=dark]{--sub-nav-mktg-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 3px 2px rgba(0, 0, 0, 0.2), 0 7px 7px rgba(0, 0, 0, 0.15)}.init-hidden:not(.is-stuck){visibility:hidden}@media(max-width: 1011px){.sub-nav-mktg-ctas{display:none}}@media(max-width: 1011px){.sub-nav-mktg.scrollnav:not(.is-stuck){visibility:hidden}.sub-nav-mktg-toggle:hover{color:var(--color-fg-default)}.sub-nav-mktg.on .on-hidden{display:none}.sub-nav-mktg.on .sub-nav-title-link{margin-bottom:8px}.sub-nav-mktg.on .sub-nav-mktg-link{display:block}.sub-nav-mktg.on .sub-nav-mktg-link.active,.sub-nav-mktg.on .sub-nav-mktg-link.selected{color:var(--color-accent-fg) !important}.sub-nav-mktg.on .sub-nav-mktg-wrapper{display:block !important;background-color:var(--color-canvas-default)}.sub-nav-mktg.on .sub-nav-mktg-ctas{display:block;padding-top:8px}.sub-nav-mktg.on .sub-nav-mktg-links{gap:16px !important}.sub-nav-mktg.on::after{position:fixed;top:0;z-index:-1;width:100%;height:100%;content:"";background:var(--color-primer-canvas-backdrop)}.sub-nav-mktg.on::after,.sub-nav-mktg.on .sub-nav-mktg-link,.sub-nav-mktg.on .sub-nav-mktg-ctas{animation:fade-in 300ms ease-in}.sub-nav-mktg:not(.on) .on-visible{display:none}.sub-nav-mktg:not(.on) .sub-nav-mktg-links.with-title{text-align:right}.sub-nav-mktg:not(.on) .sub-nav-mktg-link{display:inline-block}.sub-nav-mktg:not(.on) .sub-nav-mktg-link:not(.active,.selected){display:none}}@media(min-width: 1012px){.sub-nav-mktg-link{position:relative}.sub-nav-mktg-link::after{position:absolute;bottom:0;left:15%;width:70%;height:1px;content:"";background-color:var(--color-fg-default);transition:transform .25s ease-in-out;transform:scale(0)}.sub-nav-mktg-link:hover::after{background-color:var(--color-accent-fg)}.sub-nav-mktg-link:hover::after,.sub-nav-mktg-link.active::after,.sub-nav-mktg-link.selected::after{transform:scale(1)}.sub-nav-mktg-link.selected::after{transition-delay:.2s}.sub-nav-mktg-ctas{transition:opacity .5s}.sub-nav-mktg:not(.ctas-always-visible):not(.is-stuck) .sub-nav-mktg-ctas{visibility:hidden;opacity:0}}.faq-mktg summary::marker,.faq-mktg summary::-webkit-details-marker{display:none !important}.faq-mktg summary::after,.faq-mktg summary::before{position:absolute;top:-8px;bottom:0;left:0;display:block;width:23px;height:30px;margin-top:auto;margin-bottom:auto;font-size:32px;line-height:1em;text-align:center;background:linear-gradient(-70deg, var(--mktg-accent-primary, var(--color-fg-muted)) 0%, var(--mktg-accent-secondary, var(--color-fg-muted)) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone;box-decoration-break:clone;transition:transform .3s ease,opacity .2s ease}.faq-mktg summary::after{content:"+"}.faq-mktg summary::before{top:-12px;font-weight:700;content:"-";opacity:0}.faq-mktg details[open] summary::after{opacity:0;transform:rotateZ(180deg)}.faq-mktg details[open] summary::before{opacity:1;transform:rotateZ(180deg)}.faq-mktg details[open] div{animation:fade-in .5s}.faq-mktg details ol,.faq-mktg details ul{margin-top:16px;margin-bottom:16px;margin-left:16px}.faq-mktg-item-hover-effect{height:1px;border-bottom-width:3px !important;transition:.3s transform;transform:scaleY(0);transform-origin:50% 100%}.faq-mktg-item:hover .faq-mktg-item-hover-effect{transform:scaleY(1)}.code-editor-component .animation-is-typing::before{content:"|"}.eyebrow-banner{max-width:573px;background:rgba(1,1,1,.6);background:linear-gradient(90deg, rgba(1, 1, 1, 0.6) 0%, rgba(1, 1, 1, 0.461139) 59.76%, rgba(1, 1, 1, 0) 100%);border-color:#424b5b !important;border-radius:100px}@media(min-width: 768px){.eyebrow-banner{font-size:16px !important}}.eyebrow-banner:hover .eyebrow-banner-title{text-decoration:underline}.eyebrow-banner-icon{max-height:36px}@media(min-width: 768px){.eyebrow-banner-icon{max-height:44px}} + +/*# sourceMappingURL=site-b1e984919df8.css.map*/ \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B6AB13229C96B0E17EF3944D827172FFD792D23C b/home/.surf/cache/WebKitCache/Version 16/Blobs/B6AB13229C96B0E17EF3944D827172FFD792D23C new file mode 100644 index 0000000..716a407 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/B6AB13229C96B0E17EF3944D827172FFD792D23C differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B7519DC5571AAA5B3A5F50CD527146E18EE8517D b/home/.surf/cache/WebKitCache/Version 16/Blobs/B7519DC5571AAA5B3A5F50CD527146E18EE8517D new file mode 100644 index 0000000..9950da4 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/B7519DC5571AAA5B3A5F50CD527146E18EE8517D differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B899DEE978B63F8B931B2EDB13DF757DE9F3F84E b/home/.surf/cache/WebKitCache/Version 16/Blobs/B899DEE978B63F8B931B2EDB13DF757DE9F3F84E new file mode 100644 index 0000000..22ba484 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/B899DEE978B63F8B931B2EDB13DF757DE9F3F84E differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/B9DE1A9342332A40E6CECA53AD54CA019E1BBEF8 b/home/.surf/cache/WebKitCache/Version 16/Blobs/B9DE1A9342332A40E6CECA53AD54CA019E1BBEF8 new file mode 100644 index 0000000..5787c63 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/B9DE1A9342332A40E6CECA53AD54CA019E1BBEF8 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/BA037D00D2C4A18F6B2E227CE00E6B04F30C828D b/home/.surf/cache/WebKitCache/Version 16/Blobs/BA037D00D2C4A18F6B2E227CE00E6B04F30C828D new file mode 100644 index 0000000..8d06b41 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/BA037D00D2C4A18F6B2E227CE00E6B04F30C828D @@ -0,0 +1,282 @@ + +// Copyright 2012 Google Inc. All rights reserved. +(function(){ + +var data = { +"resource": { + "version":"1", + + "macros":[{"function":"__e"},{"function":"__cid"}], + "tags":[{"function":"__rep","once_per_event":true,"vtp_containerId":["macro",1],"tag_id":1}], + "predicates":[{"function":"_eq","arg0":["macro",0],"arg1":"gtm.js"}], + "rules":[[["if",0],["add",0]]] +}, +"runtime":[] + + + + + +}; + + +/* + + Copyright The Closure Library Authors. + SPDX-License-Identifier: Apache-2.0 +*/ +var ca,da=function(a){var b=0;return function(){return bb)a=0,b=2147483647;return Math.floor(Math.random()*(b-a+1)+a)},xa=function(a,b){for(var c=new ua,d=0;d>2,n=(f&3)<<4|g>>4,p=(g&15)<<2|l>>6,q=l&63;e||(q=64,d||(p=64));b.push(Ra[m],Ra[n],Ra[p],Ra[q])}return b.join("")} +function Va(a){function b(m){for(;d>4);64!=g&&(c+=String.fromCharCode(f<<4&240|g>>2),64!=l&&(c+=String.fromCharCode(g<<6&192|l)))}};var Wa={},Xa=function(a,b){Wa[a]=Wa[a]||[];Wa[a][b]=!0},Ya=function(){delete Wa.GA4_EVENT},Za=function(a){var b=Wa[a];if(!b||0===b.length)return"";for(var c=[],d=0,e=0;e
              "));b=b.lastChild;for(var c=[];b.firstChild;)c.push(b.removeChild(b.firstChild));return c},Mb=function(a,b,c){c=c||100;for(var d={},e=0;e=f)return!0;(d=d.parentElement)&&(e=E.getComputedStyle(d,null))}return!1};var Ye=/:[0-9]+$/,Ze=function(a,b,c){for(var d=a.split("&"),e=0;ec?a.href:a.href.substr(0,c)}return b},df=function(a){var b=F.createElement("a");a&&(b.href=a);var c=b.pathname;"/"!==c[0]&&(a||Xa("TAGGING",1),c="/"+c);var d=b.hostname.replace(Ye,"");return{href:b.href,protocol:b.protocol,host:b.host,hostname:d,pathname:c,search:b.search,hash:b.hash,port:b.port}},ef=function(a){function b(n){var p=n.split("=")[0];return 0>d.indexOf(p)?n:p+"=0"}function c(n){return n.split("&").map(b).filter(function(p){return void 0!==p}).join("&")}var d="gclid dclid gbraid wbraid gclaw gcldc gclha gclgf gclgb _gl".split(" "), +e=df(a),f=a.split(/[?#]/)[0],g=e.search,l=e.hash;"?"===g[0]&&(g=g.substring(1));"#"===l[0]&&(l=l.substring(1));g=c(g);l=c(l);""!==g&&(g="?"+g);""!==l&&(l="#"+l);var m=""+f+g+l;"/"===m[m.length-1]&&(m=m.substring(0,m.length-1));return m};var ff={};var If={},Jf=function(a,b){if(E._gtmexpgrp&&E._gtmexpgrp.hasOwnProperty(a))return E._gtmexpgrp[a];void 0===If[a]&&(If[a]=Math.floor(Math.random()*b));return If[a]};var Lf={qf:"CO",mk:"CO-SAN"};var Mf=new function(a,b){this.h=a;this.defaultValue=void 0===b?!1:b}(1933);var Nf=function(a){Nf[" "](a);return a};Nf[" "]=function(){};var Pf=function(){var a=Of,b="wf";if(a.wf&&a.hasOwnProperty(b))return a.wf;var c=new a;return a.wf=c};var Of=function(){var a={};this.h=function(){var b=Mf.h,c=Mf.defaultValue;return null!=a[b]?a[b]:c};this.m=function(){a[Mf.h]=!0}};var Qf=[];function Rf(){var a=yb("google_tag_data",{});a.ics||(a.ics={entries:{},set:Sf,update:Tf,addListener:Uf,notifyListeners:Vf,active:!1,usedDefault:!1,usedUpdate:!1,accessedDefault:!1,accessedAny:!1,wasSetLate:!1});return a.ics} +function Sf(a,b,c,d,e,f){var g=Rf();g.usedDefault||!g.accessedDefault&&!g.accessedAny||(g.wasSetLate=!0);g.active=!0;g.usedDefault=!0;if(void 0!=b){var l=g.entries,m=l[a]||{},n=m.region,p=c&&h(c)?c.toUpperCase():void 0;d=d.toUpperCase();e=e.toUpperCase();if(""===d||p===e||(p===d?n!==e:!p&&!n)){var q=!!(f&&0>21:b;return b};var ug=function(a,b,c){for(var d=[],e=b.split(";"),f=0;fd)return null;var e=a.indexOf("&",d);if(0>e||e>c)e=c;d+=b.length+1;return decodeURIComponent(a.slice(d,-1!==e?e:0).replace(/\+/g," "))},vh=/[?&]($|#)/,wh=function(a,b,c){for(var d,e=a.search(th),f=0,g,l=[];0<=(g=sh(a,f,b,e));)l.push(a.substring(f, +g)),f=Math.min(a.indexOf("&",g)+1||e,e);l.push(a.slice(f));d=l.join("").replace(vh,"$1");var m,n=null!=c?"="+encodeURIComponent(String(c)):"";var p=b+n;if(p){var q,r=d.indexOf("#");0>r&&(r=d.length);var u=d.indexOf("?"),t;0>u||u>r?(u=r,t=""):t=d.substring(u+1,r);q=[d.slice(0,u),t,d.slice(r)];var v=q[1];q[1]=p?v?v+"&"+p:p:v;m=q[0]+(q[1]?"?"+q[1]:"")+q[2]}else m=d;return m};var xh=function(a,b){if(a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b(a[c],c,a)};function yh(a){if(!a||!F.head)return null;var b=zh("META");F.head.appendChild(b);b.httpEquiv="origin-trial";b.content=a;return b} +var Ah=function(){if(E.top==E)return 0;var a=E.location.ancestorOrigins;if(a)return a[a.length-1]==E.location.origin?1:2;var b;var c=E.top;try{var d;if(d=!!c&&null!=c.location.href)b:{try{Nf(c.foo);d=!0;break b}catch(e){}d=!1}b=d}catch(e){b=!1}return b?1:2},zh=function(a,b){b=void 0===b?document:b;return b.createElement(String(a).toLowerCase())};function Bh(a,b,c,d){d=void 0===d?!1:d;a.google_image_requests||(a.google_image_requests=[]);var e=zh("IMG",a.document);if(c){var f=function(){if(c){var g=a.google_image_requests,l=$a(g,e);0<=l&&Array.prototype.splice.call(g,l,1)}e.removeEventListener&&e.removeEventListener("load",f,!1);e.removeEventListener&&e.removeEventListener("error",f,!1)};oh(e,"load",f);oh(e,"error",f)}d&&(e.attributionsrc="");e.src=b;a.google_image_requests.push(e)} +var Dh=function(a){var b;b=void 0===b?!1:b;var c="https://pagead2.googlesyndication.com/pagead/gen_204?id=tcfe";xh(a,function(d,e){d&&(c+="&"+e+"="+encodeURIComponent(d))});Ch(c,b)},Ch=function(a,b){var c=window,d;b=void 0===b?!1:b;d=void 0===d?!1:d;if(c.fetch){var e={keepalive:!0,credentials:"include",redirect:"follow",method:"get",mode:"no-cors"};d&&(e.mode="cors",e.headers={"Attribution-Reporting-Eligible":"event-source"});c.fetch(a,e)}else Bh(c,a,void 0===b?!1:b,void 0===d?!1:d)};var Eh=function(){};var Fh=function(a){void 0!==a.addtlConsent&&"string"!==typeof a.addtlConsent&&(a.addtlConsent=void 0);void 0!==a.gdprApplies&&"boolean"!==typeof a.gdprApplies&&(a.gdprApplies=void 0);return void 0!==a.tcString&&"string"!==typeof a.tcString||void 0!==a.listenerId&&"number"!==typeof a.listenerId?2:a.cmpStatus&&"error"!==a.cmpStatus?0:3},Gh=function(a,b){b=void 0===b?{}:b;this.m=a;this.h=null;this.M={};this.Ia=0;var c;this.P=null!=(c=b.Ek)?c:500;var d;this.D=null!=(d=b.Xk)?d:!1;this.B=null};la(Gh,Eh); +Gh.prototype.addEventListener=function(a){var b=this,c={internalBlockOnErrors:this.D},d=wg(function(){return a(c)}),e=0;-1!==this.P&&(e=setTimeout(function(){c.tcString="tcunavailable";c.internalErrorState=1;d()},this.P));var f=function(g,l){clearTimeout(e);g?(c=g,c.internalErrorState=Fh(c),c.internalBlockOnErrors=b.D,l&&0===c.internalErrorState||(c.tcString="tcunavailable",l||(c.internalErrorState=3))):(c.tcString="tcunavailable",c.internalErrorState=3);a(c)};try{Hh(this,"addEventListener",f)}catch(g){c.tcString= +"tcunavailable",c.internalErrorState=3,e&&(clearTimeout(e),e=0),d()}};Gh.prototype.removeEventListener=function(a){a&&a.listenerId&&Hh(this,"removeEventListener",null,a.listenerId)}; +var Jh=function(a,b,c){var d;d=void 0===d?"755":d;var e;a:{if(a.publisher&&a.publisher.restrictions){var f=a.publisher.restrictions[b];if(void 0!==f){e=f[void 0===d?"755":d];break a}}e=void 0}var g=e;if(0===g)return!1;var l=c;2===c?(l=0,2===g&&(l=1)):3===c&&(l=1,1===g&&(l=0));var m;if(0===l)if(a.purpose&&a.vendor){var n=Ih(a.vendor.consents,void 0===d?"755":d);m=n&&"1"===b&&a.purposeOneTreatment&&"CH"===a.publisherCC?!0:n&&Ih(a.purpose.consents,b)}else m=!0;else m=1===l?a.purpose&&a.vendor?Ih(a.purpose.legitimateInterests, +b)&&Ih(a.vendor.legitimateInterests,void 0===d?"755":d):!0:!0;return m},Ih=function(a,b){return!(!a||!a[b])},Hh=function(a,b,c,d){c||(c=function(){});if("function"===typeof a.m.__tcfapi){var e=a.m.__tcfapi;e(b,2,c,d)}else if(Kh(a)){Lh(a);var f=++a.Ia;a.M[f]=c;if(a.h){var g={};a.h.postMessage((g.__tcfapiCall={command:b,version:2,callId:f,parameter:d},g),"*")}}else c({},!1)},Kh=function(a){if(a.h)return a.h;var b;a:{for(var c=a.m,d=0;50>d;++d){var e;try{e=!(!c.frames||!c.frames.__tcfapiLocator)}catch(l){e= +!1}if(e){b=c;break a}var f;b:{try{var g=c.parent;if(g&&g!=c){f=g;break b}}catch(l){}f=null}if(!(c=f))break}b=null}a.h=b;return a.h},Lh=function(a){a.B||(a.B=function(b){try{var c;c=("string"===typeof b.data?JSON.parse(b.data):b.data).__tcfapiReturn;a.M[c.callId](c.returnValue,c.success)}catch(d){}},oh(a.m,"message",a.B))},Mh=function(a){if(!1===a.gdprApplies)return!0;void 0===a.internalErrorState&&(a.internalErrorState=Fh(a));return"error"===a.cmpStatus||0!==a.internalErrorState?a.internalBlockOnErrors? +(Dh({e:String(a.internalErrorState)}),!1):!0:"loaded"!==a.cmpStatus||"tcloaded"!==a.eventStatus&&"useractioncomplete"!==a.eventStatus?!1:!0};var Nh=!0;Nh=!1;var Oh={1:0,3:0,4:0,7:3,9:3,10:3},Ph=nh("",550),Qh=nh("",500);function Rh(){var a=de.tcf||{};return de.tcf=a} +var Wh=function(){var a=Rh(),b=new Gh(E,{Ek:Nh?3E3:-1});if(!0===E.gtag_enable_tcf_support&&!a.active&&("function"===typeof E.__tcfapi||"function"===typeof b.m.__tcfapi||null!=Kh(b))){a.active=!0;a.nd={};Sh();var c=null;Nh?c=E.setTimeout(function(){Th(a);Uh(a);c=null},Qh):a.tcString="tcunavailable";try{b.addEventListener(function(d){c&&(clearTimeout(c),c=null);if(0!==d.internalErrorState)Th(a),Uh(a);else{var e;a.gdprApplies=d.gdprApplies;if(!1===d.gdprApplies)e=Vh(),b.removeEventListener(d);else if("tcloaded"=== +d.eventStatus||"useractioncomplete"===d.eventStatus||"cmpuishown"===d.eventStatus){var f={},g;for(g in Oh)if(Oh.hasOwnProperty(g))if("1"===g){var l,m=d,n=!0;n=void 0===n?!1:n;l=Mh(m)?!1===m.gdprApplies||"tcunavailable"===m.tcString||void 0===m.gdprApplies&&!n||"string"!==typeof m.tcString||!m.tcString.length?!0:Jh(m,"1",0):!1;f["1"]=l}else f[g]=Jh(d,g,Oh[g]);e=f}e&&(a.tcString=d.tcString||"tcempty",a.nd=e,Uh(a))}})}catch(d){c&&(clearTimeout(c),c=null),Th(a),Uh(a)}}}; +function Th(a){a.type="e";a.tcString="tcunavailable";Nh&&(a.nd=Vh())}function Sh(){var a={},b=(a.ad_storage="denied",a.wait_for_update=Ph,a);kg(b)}function Vh(){var a={},b;for(b in Oh)Oh.hasOwnProperty(b)&&(a[b]=!0);return a}function Uh(a){var b={},c=(b.ad_storage=a.nd["1"]?"granted":"denied",b);lg(c,{eventId:0},{gdprApplies:a?a.gdprApplies:void 0,tcString:Xh()})} +var Xh=function(){var a=Rh();return a.active?a.tcString||"":""},Yh=function(){var a=Rh();return a.active&&void 0!==a.gdprApplies?a.gdprApplies?"1":"0":""},Zh=function(a){if(!Oh.hasOwnProperty(String(a)))return!0;var b=Rh();return b.active&&b.nd?!!b.nd[String(a)]:!0};var $h=function(a){var b=String(a[Wb.Ta]||"").replace(/_/g,"");0===b.indexOf("cvt")&&(b="cvt");return b};var ai=["L","S","Y"],bi=["S","E"],ci={sampleRate:"0.005000",Uh:"",Th:Number("5"),Sh:Number("")},di=0<=F.location.search.indexOf("?gtm_latency=")||0<=F.location.search.indexOf(">m_latency="),ei; +if(!(ei=di)){var fi=Math.random(),gi=ci.sampleRate;ei=fi=Gi--))O(1),Ci[Ai]=!0;else{void 0===Qi[Ai]&&Fi.nk();var b=Ii(!0,a);a?Nb(b):Gb(b);if(ri||ti&&0>=8);b[c++]=e}var f=4;void 0===f&&(f=0);if(!nj){nj={};for(var g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),l=["+/=","+/","-_=","-_.","-_"],m=0;5>m;m++){var n=g.concat(l[m].split(""));mj[m]=n;for(var p=0;p>2],D=r[(y&3)<<4|x>>4],H=r[(x&15)<<2|A>>6],J=r[A&63];u[w++]=""+B+D+H+J}var C=0,K=t;switch(b.length-v){case 2:C=b[v+1],K=r[(C&15)<<2]||t;case 1:var M=b[v];u[w]=""+r[M>>2]+r[(M&3)<<4|C>>4]+K+t}return u.join("")};var pj="platform platformVersion architecture model uaFullVersion bitness fullVersionList wow64".split(" ");function qj(){var a;return null!=(a=E.google_tag_data)?a:E.google_tag_data={}}function rj(){var a=E.google_tag_data,b;if(null!=a&&a.uach){var c=a.uach,d=Object.assign({},c);c.fullVersionList&&(d.fullVersionList=c.fullVersionList.slice(0));b=d}else b=null;return b}function sj(){var a,b;return null!=(b=null==(a=E.google_tag_data)?void 0:a.uach_promise)?b:null} +function tj(){var a,b;return"function"===typeof(null==(a=E.navigator)?void 0:null==(b=a.userAgentData)?void 0:b.getHighEntropyValues)}function uj(){if(!tj())return null;var a=qj();if(a.uach_promise)return a.uach_promise;var b=E.navigator.userAgentData.getHighEntropyValues(pj).then(function(c){null!=a.uach||(a.uach=c);return c});return a.uach_promise=b};function Aj(a,b,c,d){var e,f=Number(null!=a.Va?a.Va:void 0);0!==f&&(e=new Date((b||z())+1E3*(f||7776E3)));return{path:a.path,domain:a.domain,flags:a.flags,encode:!!c,expires:e,ub:d}};var Bj=["1"],Cj={},Tj={},Vj=function(a){return Cj[Uj(a)]},Yj=function(a,b){b=void 0===b?!0:b;var c=Uj(a.prefix);if(!Cj[c]&&!Wj(c,a.path,a.domain)&&b){var d=Uj(a.prefix),e=Ug();if(0===Xj(d,e,a)){var f=yb("google_tag_data",{});f._gcl_au||(f._gcl_au=e)}Wj(c,a.path,a.domain)}};function Xj(a,b,c,d){var e=Yg(b,"1",c.domain,c.path),f=Aj(c,d);f.ub="ad_storage";return Qg(a,e,f)} +function Wj(a,b,c){var d=Xg(a,b,c,Bj,"ad_storage");if(!d)return!1;var e=d.split(".");5===e.length?(Cj[a]=e.slice(0,2).join("."),Tj[a]={id:e.slice(2,4).join("."),yh:Number(e[4])||0}):3===e.length?Tj[a]={id:e.slice(0,2).join("."),yh:Number(e[2])||0}:Cj[a]=d;return!0}function Uj(a){return(a||"_gcl")+"_au"};var Zj;var dk=function(){var a=ak,b=bk,c=ck(),d=function(g){a(g.target||g.srcElement||{})},e=function(g){b(g.target||g.srcElement||{})};if(!c.init){Hb(F,"mousedown",d);Hb(F,"keyup",d);Hb(F,"submit",e);var f=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){b(this);f.call(this)};c.init=!0}},ek=function(a,b,c,d,e){var f={callback:a,domains:b,fragment:2===c,placement:c,forms:d,sameHost:e};ck().decorators.push(f)},fk=function(a,b,c){for(var d=ck().decorators,e={},f=0;ff;f++){for(var g=f,l=0;8>l;l++)g=g&1?g>>>1^3988292384:g>>>1;e[f]=g}d=e}Zj=d;for(var m=4294967295,n=0;n>>8^Zj[(m^c.charCodeAt(n))&255];return((m^-1)>>>0).toString(36)} +function nk(){return function(a){var b=df(E.location.href),c=b.search.replace("?",""),d=Ze(c,"_gl",!0)||"";a.query=ok(d)||{};var e=bf(b,"fragment").match(kk("_gl"));a.fragment=ok(e&&e[3]||"")||{}}}function pk(a,b){var c=kk(a).exec(b),d=b;if(c){var e=c[2],f=c[4];d=c[1];f&&(d=d+e+f)}return d} +var qk=function(a,b){b||(b="_gl");var c=jk.exec(a);if(!c)return"";var d=c[1],e=pk(b,(c[2]||"").slice(1)),f=pk(b,(c[3]||"").slice(1));e.length&&(e="?"+e);f.length&&(f="#"+f);return""+d+e+f},rk=function(a){var b=nk(),c=ck();c.data||(c.data={query:{},fragment:{}},b(c.data));var d={},e=c.data;e&&(Ha(d,e.query),a&&Ha(d,e.fragment));return d},ok=function(a){try{var b=sk(a,3);if(void 0!==b){for(var c={},d=b?b.split("*"):[],e=0;e+1e;++e){var f=gk.exec(d);if(f){c=f;break a}d=decodeURIComponent(d)}c=void 0}var g=c;if(g&&"1"===g[1]){var l=g[3],m;a:{for(var n=g[2],p=0;pf.length||!b&&3!==f.length)&&Number(f[1])){d[c[e].Pf]||(d[c[e].Pf]=[]);var g={version:f[0],timestamp:1E3*Number(f[1]),fa:f[2]};b&&3p){n=!0;break b}n=!1}if(!n){var u=Aj(b,m,!0);u.ub="ad_storage";Qg(g,l,u)}}}}Qk(Ok(c.gclid,c.gclsrc),!1,b)})},Sk=function(a,b){var c=Fk[a];if(void 0!==c)return b+c},Tk=function(a){return 0!==Vk(a.split(".")).length?1E3*(Number(a.split(".")[1])|| +0):0};function Kk(a){var b=Vk(a.split("."));return 0===b.length?null:{version:b[0],fa:b[2],timestamp:1E3*(Number(b[1])||0),labels:b.slice(3)}}function Vk(a){return 3>a.length||"GCL"!==a[0]&&"1"!==a[0]||!/^\d+$/.test(a[1])||!Ek.test(a[2])?[]:a} +var Wk=function(a,b,c,d,e){if(ra(b)&&xg(E)){var f=Nk(e),g=function(){for(var l={},m=0;mb};var hl=/[A-Z]+/,il=/\s/,jl=function(a){if(h(a)){a=Da(a);var b=a.indexOf("-");if(!(0>b)){var c=a.substring(0,b);if(hl.test(c)){for(var d=a.substring(b+1).split("/"),e=0;el;l++){var m=g[l].src;if(m){m=m.toLowerCase();if(0===m.indexOf(e)){b=3;break a}1===f&&0===m.indexOf(d)&&(f=2)}}b=f}else b=a;return b}; +var pl=function(a,b,c){if(E[a.functionName])return b.Gf&&G(b.Gf),E[a.functionName];var d=ol();E[a.functionName]=d;if(a.be)for(var e=0;ez()-d){Xa("TAGGING",9);return}}else try{if(50<=F.querySelectorAll('iframe[allow="join-ad-interest-group"][data-tagging-id*="-"]').length){Xa("TAGGING",10);return}}catch(e){}Fb(a,void 0,{allow:"join-ad-interest-group"},{taggingId:b,loadTime:z()},c)}function tm(){return S(60)?"https://td.doubleclick.net":"https://googleads.g.doubleclick.net"};var um=RegExp("^UA-\\d+-\\d+%3A[\\w-]+(?:%2C[\\w-]+)*(?:%3BUA-\\d+-\\d+%3A[\\w-]+(?:%2C[\\w-]+)*)*$"),vm=/^~?[\w-]+(?:\.~?[\w-]+)*$/,wm=/^\d+\.fls\.doubleclick\.net$/,xm=/;gac=([^;?]+)/,ym=/;gacgb=([^;?]+)/,zm=/;gclaw=([^;?]+)/,Am=/;gclgb=([^;?]+)/; +function Bm(a,b){if(wm.test(F.location.host)){var c=F.location.href.match(b);return c&&2==c.length&&c[1].match(um)?decodeURIComponent(c[1]):""}var d=[],e;for(e in a){for(var f=[],g=a[e],l=0;lc.indexOf(l))if(m&&0c.indexOf(m[q])){O(11);p=!1;break a}}else{p=!1;break a}p=!0}n=p}var r=!1;if(d){var u=0<=e.indexOf(l);if(u)r=u;else{var t=xa(e,m||[]);t&&O(10);r=t}}var v=!n||r;v||!(0<=m.indexOf("sandboxedScripts"))||c&&-1!==c.indexOf("sandboxedScripts")||(v=xa(e,Xn));return f[l]=v}},Yn=!1; +var Zn=function(){return Un.test(E.location&&E.location.hostname)};var ao={initialized:11,complete:12,interactive:13},bo={},co=Object.freeze((bo[P.g.za]=!0,bo)),eo=0<=F.location.search.indexOf("?gtm_diagnostics=")||0<=F.location.search.indexOf(">m_diagnostics="),go=function(a,b,c){if(hi&&"config"===a&&!(1jo){jo++;try{F.documentElement.doScroll("left"),lo()}catch(a){E.setTimeout(mo,50)}}}var no=function(a){io?a():ko.push(a)};var oo=function(a,b){return{entityType:1,indexInOriginContainer:a,nameInOriginContainer:b,originContainerId:ah.H}};var qo=function(a,b){this.h=!1;this.D=[];this.M={tags:[]};this.P=!1;this.m=this.B=0;po(this,a,b)},ro=function(a,b,c,d){if(ge.hasOwnProperty(b)||"__zone"===b)return-1;var e={};Ub(d)&&(e=I(d,e));e.id=c;e.status="timeout";return a.M.tags.push(e)-1},so=function(a,b,c,d){var e=a.M.tags[b];e&&(e.status=c,e.executionTime=d)},to=function(a){if(!a.h){for(var b=a.D,c=0;c=a.B&&to(a)})},wo=function(a){a.P=!0;a.m>=a.B&&to(a)};var xo={ca:{Jk:"ads_conversion_hit",Kk:"container_execute_start",bi:"container_setup_end",Wf:"container_setup_start",Nk:"event_execute_end",Ok:"event_execute_start",Pk:"event_setup_start",Qk:"ga4_conversion_hit",ef:"page_load",Cb:"snippet_load",Xi:"tag_callback_error",Yi:"tag_callback_failure",Zi:"tag_callback_success",aj:"tag_execute_end",hh:"tag_execute_start"}}; +var Ao=function(a,b,c,d,e,f){var g={};return g},Bo=function(a){var b=!1;return b},Co=function(a,b){},Do=function(a,b,c){},Eo=function(){function a(d){return!qa(d)||0>d?0:d}if(!de._li&&Qb()&&Qb().timing){var b=Qb().timing.navigationStart,c=qa(Fe.get("gtm.start"))?Fe.get("gtm.start"):0;de._li={cst:a(c-b),cbt:a(ue-b)}}},Fo=function(a){Qb()&&Qb().mark(ah.H+"_"+a+"_start")},Go=function(a){if(Qb()){var b=Qb(),c=ah.H+"_"+a+"_start",d=ah.H+"_"+a+"_duration";b.measure(d,c);var e=Qb().getEntriesByName(d)[0];b.clearMarks(c);b.clearMeasures(d); +var f=de._p||{};void 0===f[a]&&(f[a]=e.duration,de._p=f);return e.duration}},Ho=function(){var a=Pb();if(void 0!==a){var b=de._p||{};b.PAGEVIEW=a;de._p=b}};var Io={},Jo=function(){return E.GoogleAnalyticsObject&&E[E.GoogleAnalyticsObject]},Ko=!1;var Lo=function(a){E.GoogleAnalyticsObject||(E.GoogleAnalyticsObject=a||"ga");var b=E.GoogleAnalyticsObject;if(E[b])E.hasOwnProperty(b);else{var c=function(){c.q=c.q||[];c.q.push(arguments)};c.l=Number(Ea());E[b]=c}Eo();return E[b]},Mo=function(a){if(ag()){var b=Jo();b(a+"require","linker");b(a+"linker:passthrough",!0)}}; +function No(){return E.GoogleAnalyticsObject||"ga"} +var Oo=function(a){},Po=function(a,b){return function(){var c=Jo(),d=c&&c.getByName&&c.getByName(a);if(d){var e=d.get("sendHitTask");d.set("sendHitTask",function(f){var g=f.get("hitPayload"),l=f.get("hitCallback"),m=0>g.indexOf("&tid="+b);m&&(f.set("hitPayload",g.replace(/&tid=UA-[0-9]+-[0-9]+/,"&tid="+b),!0),f.set("hitCallback",void 0,!0));e(f);m&&(f.set("hitPayload", +g,!0),f.set("hitCallback",l,!0),f.set("_x_19",void 0,!0),e(f))})}}};function Uo(a,b,c,d){var e=wc[a],f=Vo(a,b,c,d);if(!f)return null;var g=Fc(e[Wb.gh],c,[]);if(g&&g.length){var l=g[0];f=Uo(l.index,{O:f,N:1===l.sh?b.terminate:f,terminate:b.terminate},c,d)}return f} +function Vo(a,b,c,d){function e(){if(f[Wb.Qi])l();else{var w=Gc(f,c,[]),y=w[Wb.Yh];if(null!=y)for(var x=0;xe?1:dl?1:ga.length)&&h(a[1])){var d={};if(2r.indexOf(n)&&r.push(n)}}else{nq(e.id);var u=e.id,t=d[P.g.Od]||"default";t=t.toString().split(",");for(var v=0;vw.indexOf(u)&&w.push(u)}}delete d[P.g.Od];var y=b.eventMetadata||{};y.hasOwnProperty("is_external_event")||(y.is_external_event=!b.fromContainerExecution);b.eventMetadata= +y;delete d[P.g.Rb];for(var x=g?[e.id]:dh(),A=0;Aa.length)&&h(c)){var d;if(2Sq&&(Sq=x)}Xq=!1}}}return!a}function fr(){var b=dr();try{vq(ah.H)}catch(c){}return b} +function fp(a){if(Sqn)for(O(4),c.pruned=!0;this.length>n;)this.shift();var p="boolean"!==typeof m||m;return dr()&&p};var e=b.slice(0).map(function(f){return a(f)});Uq.push.apply(Uq,e);if(gr()){G(fr)}},gr=function(){var a=!0;return a};function ir(a){if(null==a||0===a.length)return!1;var b=Number(a),c=z();return bc-9E5}function jr(a){return a&&0===a.indexOf("pending:")?ir(a.substr(8)):!1};var Bc={};Bc.Vd=new String("undefined");var Kr=E.clearTimeout,Lr=E.setTimeout,W=function(a,b,c,d){if($g()){b&&G(b)}else return Db(a,b,c,d)},Mr=function(){return new Date},Nr=function(){return E.location.href},Or=function(a){return bf(df(a),"fragment")},Pr=function(a){return cf(df(a))},Qr=function(a,b){return Ee(a,b||2)},Rr=function(a,b,c){var d;b?(a.eventCallback=b,c&&(a.eventTimeout=c),d=Zq(a)):d=Zq(a);return d},Sr=function(a,b){E[a]=b},X=function(a,b,c){b&& +(void 0===E[a]||c&&!E[a])&&(E[a]=b);return E[a]},Tr=function(a,b,c){return Ag(a,b,void 0===c?!0:!!c)},Ur=function(a,b,c){return 0===Qg(a,b,c)},Vr=function(a,b){if($g()){b&&G(b)}else Fb(a,b)},Wr=function(a){return!!qr(a,"init",!1)},Xr=function(a){or(a,"init",!0)},Yr=function(a,b,c){hi&&(Vb(a)||ej(c,b,a))}; +var vs=["matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector"];function ws(a,b){a=String(a);b=String(b);var c=a.length-b.length;return 0<=c&&a.indexOf(b,c)===c}var xs=new ua;function ys(a,b,c){var d=c?"i":void 0;try{var e=String(b)+d,f=xs.get(e);f||(f=new RegExp(b,d),xs.set(e,f));return f.test(a)}catch(g){return!1}} +function zs(a,b){function c(g){var l=df(g),m=bf(l,"protocol"),n=bf(l,"host",!0),p=bf(l,"port"),q=bf(l,"path").toLowerCase().replace(/\/$/,"");if(void 0===m||"http"===m&&"80"===p||"https"===m&&"443"===p)m="web",p="default";return[m,n,p,q]}for(var d=c(String(a)),e=c(String(b)),f=0;f=Number(c);case "_gt":return Number(b)>Number(c); +case "_lc":return 0<=String(b).split(",").indexOf(String(c));case "_le":return Number(b)<=Number(c);case "_lt":return Number(b)r.indexOf(P.g.Fc)&&(l.cookieName=w+"_ga")}}!1!==d(P.g.mi)&&!1!==d(P.g.xb)&&st()||(g.allowAdFeatures=!1);!1!==d(P.g.X)&&tt()||(g.allowAdPersonalizationSignals=!1);!c.C&&d(P.g.hb)&&(l._useUp=!0);if(c.C){l.name=l.name||e.gtmTrackerName;var B=g.hitCallback;g.hitCallback=function(){pa(B)&&B();c.O()}}else{Cv(l,"cookieDomain","auto");Cv(g,"forceSSL",!0);Cv(e,"eventCategory",fw(b));hw[b]&&Cv(f,"nonInteraction",!0);"login"===b||"sign_up"===b||"share"=== +b?Cv(e,"eventLabel",d(P.g.zg)):"search"===b||"view_search_results"===b?Cv(e,"eventLabel",d(P.g.Gi)):"select_content"===b&&Cv(e,"eventLabel",d(P.g.ri));var D=e[P.g.va]||{},H=D[P.g.Ub];H||0!=H&&D[P.g.T]?l.allowLinker=!0:!1===H&&Cv(l,"useAmpClientId",!1);f.hitCallback=c.O;l.name=a}ag()&&(g["&gcs"]=ng(),mg(P.g.R)||(l.storage="none"),mg(P.g.F)||(g.allowAdFeatures=!1,l.storeGac=!1));var J=d(P.g.oa)||d(P.g.zb),C=d(P.g.Md);J&&(c.C||(l[P.g.zb]=J),l._cd2l=!0);C&&!c.C&&(l[P.g.Md]=C);e.fieldsToSend=f;e.fieldsToSet= +g;e.createOnlyFields=l;return e},Dv=function(a){var b=a.gtmEcommerceData;if(!b)return null;var c={};b.currencyCode&&(c.rf=b.currencyCode);if(b.impressions){c.action="impressions";var d=b.impressions;c.xh="impressions"===b.translateIfKeyEquals?Nv(d):d}if(b.promoView){c.action="promo_view";var e=b.promoView.promotions;c.md="promoView"===b.translateIfKeyEquals?Nv(e):e}if(b.promoClick){c.action="promo_click";var f=b.promoClick.promotions;c.md="promoClick"===b.translateIfKeyEquals?Nv(f):f;c.Ua=b.promoClick.actionField; +return c}for(var g in b)if(b.hasOwnProperty(g)&&"translateIfKeyEquals"!==g&&"impressions"!==g&&"promoView"!==g&&"promoClick"!==g&&"currencyCode"!==g){c.action=g;var l=b[g].products;c.Gb="products"===b.translateIfKeyEquals?Nv(l):l;c.Ua=b[g].actionField;break}return Object.keys(c).length?c:null},Ev=function(a,b){function c(t){return{id:d(P.g.Ga),affiliation:d(P.g.wi),revenue:d(P.g.la),tax:d(P.g.lg),shipping:d(P.g.Ic),coupon:d(P.g.xi),list:d(P.g.Ge)||d(P.g.Fe)||t}}for(var d=function(t){return U(b,t)}, +e=d(P.g.Z),f,g=0;e&&g{"use strict";var e,t,a,n,r,l,i,o={9708:(e,t,a)=>{a.d(t,{Z:()=>m});var n=a(8328),r=a(714),l=a(8332),i=a(1478),o=a.n(i),c=a(4935);const s={button:"ffON2NH02oMAcqyoh2UU",fullWidth:"VVwKmb7llplcxyVXzHz9",customVariant:"GnLX_jUB3Jn3idluie7R",primary:"dkPsZgoVlwHrgASCd797",secondary:"q7VhSk71XgyB1xYfeChb",tertiary:"sz280YLkLemh3mLtestR",ghost:"CPXAhl7VTkj2dHDyAYAf",yellow:"YONrIxL5q5BzYkbeRFhq",customSize:"J6kopNnJfLRnTk4tGjvG",xsmall:"MQCbz04ET5EljRmK3YpQ",small:"vcOFkrrvuSYp7xsAur2Y",medium:"hUUdRtuaOUx7mcSwc56s",large:"eEHLqtMiqMsCAZCkwFaE"},d=["as","variant","size","fullWidth","className","children"],u=(0,l.Gp)((function(e,t){let{as:a="button",variant:l="primary",size:i="small",fullWidth:c=!1,className:u,children:m}=e,p=(0,r.Z)(e,d);return React.createElement(a,(0,n.Z)({ref:t,className:o()(u,s.button,s[i],s[l],{[s.fullWidth]:c})},p),m)}));u.proptypes={as:c.PropTypes.oneOf(["button","a"]),className:c.PropTypes.string,children:c.PropTypes.oneOfType([c.PropTypes.arrayOf(c.PropTypes.node),c.PropTypes.node]).isRequired,variant:c.PropTypes.oneOf(["primary","secondary","tertiary","ghost","customVariant"]),size:c.PropTypes.oneOf(["xsmall","small","medium","large","customSize"]),fullWidth:c.PropTypes.bool};const m=u},4005:(e,t,a)=>{a.d(t,{Z:()=>m});var n=a(8328),r=a(714),l=a(4935),i=a.n(l),o=a(1478),c=a.n(o);const s=["as","className","children"],d=["as","className","children"];function u(e){let{as:t="div",className:a,children:l}=e,i=(0,r.Z)(e,s);return React.createElement(t,(0,n.Z)({className:c()("O9Ipab51rBntYb0pwOQn",a)},i),l)}u.Header=function(e){let{as:t="header",className:a,children:l}=e,i=(0,r.Z)(e,d);return React.createElement(t,(0,n.Z)({className:c()("XstXTivL2FzVzau53UZr",a)},i),l)},u.Header.propTypes={as:i().oneOf(["div","header"]),className:i().string,children:i().any};const m=u},7628:(e,t,a)=>{a.d(t,{Z:()=>c});var n=a(8328),r=a(714),l=a(8332);const i=["children","tagName"];function o(e){let{children:t,tagName:a="div"}=e,o=(0,r.Z)(e,i);const c=(0,l.sO)(),s=(0,l.I4)((e=>{null!==e&&(c.current=t(e))}),[t]);return(0,l.d4)((()=>()=>{var e;"function"==typeof(null==c||null===(e=c.current)||void 0===e?void 0:e.destroy)&&c.current.destroy()}),[t]),React.createElement(a,(0,n.Z)({ref:s},o))}const c=(0,l.X$)(o)},7524:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(1478),r=a.n(n),l=a(1382);function i({expanded:e,onClick:t,lang:a,className:n}){return React.createElement("div",{className:r()("LvQyYDtEWRDVojZY8klT",n)},React.createElement("div",{className:"tV0DEo5a5LUrl8Piw6Ao",onClick:t},React.createElement(l.Z,{type:e?"up":"down","aria-hidden":"true"}),e?a.expanded:a.collapsed))}},4071:(e,t,a)=>{a.d(t,{Z:()=>h});var n=a(8328),r=a(8888),l=a(714),i=(a(6755),a(4935)),o=a.n(i),c=a(8332),s=a(8927),d=a(3502);const u=["backDataId","backData","onClick","href","target","rel","children"];function m(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function p(e,t){let{backDataId:a,backData:i={},onClick:o,href:p,target:h,rel:g="noopener",children:v}=e,f=(0,l.Z)(e,u);const b=(0,c.sO)(),y=(0,d.Z)("backData"),w=(0,d.Z)("searchExperiments"),k=(0,d.Z)("settings",["kd","kg"]),E=(0,d.Z)("device"),R=(0,d.Z)("deep");let x=p;const O=(0,s.Fo)(x),P=E.isIDevice&&"itunes.apple.com"===O||E.isAndroid&&"play.google.com"===O;return!k.useRedirect()||-1!==x.indexOf("/l/?")||(0,s.pM)(x)||P||(x=`${x.startsWith("https")||E.isOnion?"":"http://r.duckduckgo.com"}/l/?uddg=${encodeURIComponent(x)}¬rut=duckduck_in`),(0,c.aP)(t,(()=>({focus(){b.current.focus()},blur(){b.current.blur()},click(){b.current.click()},openInNewWindow({ctrlKey:e,shiftKey:t,metaKey:a,button:n}={}){const r={defaultPrevented:!1,preventDefault(){this.defaultPrevented=!0},stopPropagation(){},stopImmediatePropagation(){},composedPath(){},ctrlKey:e,shiftKey:t,metaKey:a,button:n};o&&o(r),r.defaultPrevented||(0,s.oL)(x,{isSafari:E.isSafari})}})),[E,x,o]),React.createElement("a",(0,n.Z)({ref:b,href:p,rel:g,target:h},f,{"data-handled-by-react":"true",onClick:e=>{if(o&&o(e),e.ctrlKey||!E.isIE&&e.metaKey||"_blank"===h&&!(0,s.pM)(x)||e.shiftKey||e.button&&(1===e.button||E.isIE&&4===e.button))return e.shiftKey&&!E.isIE&&!E.isSafari||x!==p?(e.preventDefault(),void(0,s.oL)(x,{isSafari:E.isSafari})):void 0;if(a&&y.set(a,function(e){for(var t=1;t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Search · surf browser · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + + + +
              + Skip to content + + + + + + + + + + + +
              + +
              + + + + + + + +
              + + + + + + +
              + + + + + + + + + + +
              +
              +
              + + + + + + + + + + + + + + + + + + + + + +
              + + + + + +
              +
              +
              +
              +
              + + +
              + +
              + +
              + + + + + + + + + +
              + Advanced search +
              + Cheat sheet + + +
              + +

              Search cheat sheet

              +
              + +
              +

              GitHub’s search supports a variety of different operations. Here’s a quick cheat sheet for some of the common searches.

              +

              For more information, visit our search help section.

              + +

              Basic search

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              This searchFinds repositories with…
              cat stars:>100Find cat repositories with greater than 100 stars.
              user:defunktGet all repositories from the user defunkt.
              tom location:"San Francisco, CA"Find all tom users in "San Francisco, CA".
              join extension:coffeeFind all instances of join in code with coffee extension.
              NOT catExcludes all results containing cat.
              + +
              + +

              Repository search + + + +

              +

              Repository search looks through the projects you have access to on GitHub. You can also filter the results:

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              This searchFinds repositories with…
              cat stars:>100Find cat repositories with greater than 100 stars.
              user:defunktGet all repositories from the user defunkt.
              pugs pushed:>2013-01-28Pugs repositories pushed to since Jan 28, 2013.
              node.js forks:<200Find all node.js repositories with less than 200 forks.
              jquery size:1024..4089Find jquery repositories between the sizes 1024 and 4089 kB.
              gitx fork:trueRepository search includes forks of gitx.
              gitx fork:onlyRepository search returns only forks of gitx.
              + +
              + +

              Code search + + + +

              +

              Code search looks through the files hosted on GitHub. You can also filter the results:

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              This searchFinds repositories with…
              install repo:charles/privaterepoFind all instances of install in code from the repository charles/privaterepo.
              shogun user:herokuFind references to shogun from all public heroku repositories.
              join extension:coffeeFind all instances of join in code with coffee extension.
              system size:>1000Find all instances of system in code of file size greater than 1000kbs.
              examples path:/docs/Find all examples in the path /docs/.
              replace fork:trueSearch replace in the source code of forks.
              + +
              + +

              Issue search + + + +

              +

              Issue search looks through issues and pull requests on GitHub. You can also filter the results:

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              This searchFinds issues…
              encoding user:herokuEncoding issues across the Heroku organization.
              cat is:openFind cat issues that are open.
              strange comments:>42Issues with more than 42 comments.
              hard label:bugHard issues labeled as a bug.
              author:mojomboAll issues authored by mojombo.
              mentions:tpopeAll issues mentioning tpope.
              assignee:rtomaykoAll issues assigned to rtomayko.
              exception created:>2012-12-31Created since the beginning of 2013.
              exception updated:<2013-01-01Last updated before 2013.
              + +
              + +

              User search + + + +

              +

              User search finds users with an account on GitHub. You can also filter the results:

              + + + + + + + + + + + + + + + + + + + + + + + + + +
              This searchFinds repositories with…
              fullname:"Linus Torvalds"Find users with the full name "Linus Torvalds".
              tom location:"San Francisco, CA"Find all tom users in "San Francisco, CA".
              chris followers:100..200Find all chris users with followers between 100 and 200.
              ryan repos:>10Find all ryan users with more than 10 repositories.
              +
              +
              + +
              +
              +
              + +
              +
              + + + + +
              +

              + 1 code result + + in void-linux/void-packages + + + or view all results on GitHub + +

              + +
              + + +
              +
              + +
              + +
              + + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + 1 + # Template file for 'surf'
              + 2 + pkgname=surf
              + 3 + version=2.1 +
              + 4 + revision=1 +
              + 5 + build_style=gnu-makefile +
              + 9 + short_desc="Simple web browser based on WebKit/GTK+"
              + 10 + maintainer="Orphaned <orphan@voidlinux.org>" +
              + 11 + license="MIT" +
              +
              + +
              + + + Showing the top three matches + + + + Last indexed May 9, 2021 + +
              + +
              +
              + +
              + +
              + +
              +
              + + +
              + +
              + + +
              + +
              + + +
              +
              + +
              + + + + + + + + + + + + + + + + + + +
              + +
              + + + diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/BB2732CC2EEC5E9AB6E93BAD2D57266F674F3FA5 b/home/.surf/cache/WebKitCache/Version 16/Blobs/BB2732CC2EEC5E9AB6E93BAD2D57266F674F3FA5 new file mode 100644 index 0000000..e9f192d --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/BB2732CC2EEC5E9AB6E93BAD2D57266F674F3FA5 @@ -0,0 +1,548 @@ + +@media only screen and (min-width:783px){ +.anim.img1,.anim.img-wrap:after,.anim.img-wrap:before,.bottom-page.anim,.startpage.top-notice,.top-to-bott.anim{ + opacity:0; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + -webkit-transition-timing-function:ease-in-out; + transition-timing-function:ease-in-out +} +.start-animation .anim.img1,.start-animation .anim.img-wrap:after,.start-animation .anim.img-wrap:before,.start-animation .startpage.top-notice,.top-to-bott.anim{ + opacity:0 +} +.start-animation .anim.i2,.start-animation .anim.img-wrap:after,.start-animation .anim.img-wrap:before{ + -webkit-animation-delay:.5s; + animation-delay:.5s; + -webkit-animation-duration:.5s; + animation-duration:.5s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:top-fade-in; + animation-name:top-fade-in +} +.top-to-bott.anim{ + -webkit-animation-duration:.15s; + animation-duration:.15s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:top-ease-out; + animation-name:top-ease-out +} +.start-animation .anim.i3,.start-animation .anim.i4{ + -webkit-animation-delay:.3s; + animation-delay:.3s; + -webkit-animation-duration:.5s; + animation-duration:.5s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:top-fade-in-down; + animation-name:top-fade-in-down +} +.start-animation .startpage.top-notice{ + -webkit-animation-delay:2.2s; + animation-delay:2.2s; + -webkit-animation-duration:.15s; + animation-duration:.15s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:top-fade-in; + animation-name:top-fade-in +} +.start-animation .anim.i1{ + -webkit-animation-delay:1s; + animation-delay:1s; + -webkit-animation-duration:.2s; + animation-duration:.2s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:top-bg1; + animation-name:top-bg1 +} +.bottom-page.left-cell.animated{ + opacity:0; + transform:translateX(10%) +} +.bottom-page.left-cell.animated.order1,.bottom-page.right-cell.animated{ + opacity:0; + transform:translateX(-10%) +} +.bottom-page.left-cell.animated.start-animation,.bottom-page.right-cell.animated.start-animation{ + -webkit-animation-delay:.5s; + animation-delay:.5s; + -webkit-animation-duration:1s; + animation-duration:1s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:sfrom-r-to-l; + animation-name:sfrom-r-to-l +} +.bottom-page.left-cell.animated.start-animation.order1{ + -webkit-animation-delay:.5s; + animation-delay:.5s; + -webkit-animation-duration:1s; + animation-duration:1s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:sfrom-l-to-r; + animation-name:sfrom-l-to-r +} +.start-animation .startpage.img2-progress span{ + -webkit-animation-delay:1.1s; + animation-delay:1.1s; + -webkit-animation-duration:7s; + animation-duration:7s; + -webkit-animation-fill-mode:forwards; + animation-iteration-count:infinite; + -webkit-animation-name:st-progress; + animation-name:st-progress +} +.start-animation .startpage.img2-progress.pr2 span{ + -webkit-animation-duration:12s; + animation-duration:12s +} +.startpage-filetypes.animated .img3{ + opacity:0; + transform:translateY(-10px); + -webkit-transition:opacity 1.2s ease-in-out,transform 1.2s ease-in-out; + transition:opacity 1.2s ease-in-out,transform 1.2s ease-in-out; + transition-timing-function:ease-in-out +} +.startpage-filetypes.start-animation.animated .icon.main{ + opacity:1; + transform:translateY(0) +} +.animated .lock.main{ + transform:scale(1.02) +} +.startpage-filetypes.start-animation.animated .lock.main{ + -webkit-animation-delay:.7s, .7s; + animation-delay:.7s, .7s; + -webkit-animation-duration:1.5s, .3s; + animation-duration:1.5s, .3s; + -webkit-animation-fill-mode:forwards, forwards; + animation-fill-mode:forwards, forwards; + -webkit-animation-iteration-count:1, 1; + animation-iteration-count:1, 1; + -webkit-animation-name:show-locks, locks-bouncing; + animation-name:show-locks, locks-bouncing +} +.startpage-filetypes.start-animation.animated .shadow{ + transform:translateY(2%) +} +.startpage-filetypes.start-animation.animated .icon.shadow{ + -webkit-animation-delay:.5s; + animation-delay:.5s; + -webkit-animation-duration:1.5s; + animation-duration:1.5s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:show-locks; + animation-name:show-locks +} +.startpage-filetypes.start-animation.animated .lock.shadow{ + -webkit-animation-delay:.5s; + animation-delay:.5s; + -webkit-animation-duration:1.5s; + animation-duration:1.5s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:show-shadow-locks; + animation-name:show-shadow-locks +} +.animated.start-animation .startpage-chat-content span{ + -webkit-animation-delay:1s; + animation-delay:1s; + -webkit-animation-duration:6s; + animation-duration:6s; + -webkit-animation-iteration-count:infinite; + animation-iteration-count:infinite; + -webkit-animation-name:scroll-chat; + animation-name:scroll-chat +} +.animated.start-animation .startpage-busines-cont{ + opacity:0 +} +.animated.start-animation .startpage-busines-cont.c1{ + -webkit-animation-delay:1s; + animation-delay:1s; + -webkit-animation-duration:1s; + animation-duration:1s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:show-c1; + animation-name:show-c1; + -webkit-perspective-origin:50% 50%; + perspective-origin:50% 50% +} +.animated.start-animation .startpage-busines-cont.c2{ + -webkit-animation-delay:1.5s; + animation-delay:1.5s; + -webkit-animation-duration:1.4s; + animation-duration:1.4s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:show-c2; + animation-name:show-c2; + -webkit-perspective-origin:50% 50%; + perspective-origin:50% 50% +} +. .bottom-page.big-header.animated.start-animation .startpage.carousel.start-animation{ + -webkit-animation-delay:.3s; + animation-delay:.3s; + -webkit-animation-duration:.6s; + animation-duration:.6s; + -webkit-animation-fill-mode:forwards; + animation-fill-mode:forwards; + -webkit-animation-name:show-features; + animation-name:show-features +} +.scale.animated{ + opacity:0; + transform:scale(.9); + -webkit-transition:all .5s ease-in-out; + transition:all .5s ease-in-out +} +.scale.animated.start-animation{ + opacity:1; + transform:scale(1) +} +.fadein{ + opacity:0 +} +.fadein.start-animation{ + opacity:1; + -webkit-transition:opacity .5s ease-in-out; + transition:opacity .5s ease-in-out; + -webkit-transition-delay:.3s; + transition-delay:.3s +} +.affiliate.refer-cell.animated{ + opacity:0; + position:relative; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.affiliate.refer-cell.animated.start-animation:hover{ + transform:scale(1.06) !important +} +.affiliate.refer-cell.animated.start-animation{ + opacity:1; + -webkit-transition:opacity .5s ease-in-out,transform .3s ease-in-out; + transition:opacity .5s ease-in-out,transform .3s ease-in-out; + -webkit-transition-delay:.3s, 0ms; + transition-delay:.3s, 0ms +} +.animated.col-3{ + opacity:0; + position:relative; + transform:translateY(-5%) +} +.animated.col-3.start-animation{ + opacity:1; + transform:translate(0); + -webkit-transition:all .5s ease-in-out; + transition:all .5s ease-in-out; + -webkit-transition-delay:.5s; + transition-delay:.5s; + -webkit-transition-timing-function:ease-in-out; + transition-timing-function:ease-in-out +} +} +@-webkit-keyframes top-bg1{ +0%{ + opacity:0; +transform:translateY(30%) scale(.6) +} +to{ + opacity:1; +transform:translateY(0) scale(1) +} +} +@keyframes top-bg1{ +0%{ + opacity:0; +transform:translateY(30%) scale(.6) +} +to{ + opacity:1; +transform:translateY(0) scale(1) +} +} +@-webkit-keyframes top-fade-in{ +0%{ + opacity:0 +} +to{ + opacity:1 +} +} +@keyframes top-fade-in{ +0%{ + opacity:0 +} +to{ + opacity:1 +} +} +@-webkit-keyframes top-fade-in-down{ +0%{ + opacity:0; + top:-10px +} +to{ + opacity:1; + top:0 +} +} +@keyframes top-fade-in-down{ +0%{ + opacity:0; + top:-10px +} +to{ + opacity:1; + top:0 +} +} +@-webkit-keyframes top-ease-out{ +0%{ + opacity:0; + transform:translateY(-10px) +} +to{ + opacity:1; + transform:translateY(0) +} +} +@keyframes top-ease-out{ +0%{ + opacity:0; + transform:translateY(-10px) +} +to{ + opacity:1; + transform:translateY(0) +} +} +@-webkit-keyframes tiny-translate{ +0%{ + opacity:0; + transform:translateY(-1%) +} +to{ + opacity:1; + transform:translateY(0) +} +} +@keyframes tiny-translate{ +0%{ + opacity:0; + transform:translateY(-1%) +} +to{ + opacity:1; + transform:translateY(0) +} +} +@-webkit-keyframes sfrom-r-to-l{ +0%{ + opacity:0; + transform:translateX(10%) +} +to{ + opacity:1; + transform:translateX(0) +} +} +@keyframes sfrom-r-to-l{ +0%{ + opacity:0; + transform:translateX(10%) +} +to{ + opacity:1; + transform:translateX(0) +} +} +@-webkit-keyframes sfrom-l-to-r{ +0%{ + opacity:0; + transform:translateX(-10%) +} +to{ + opacity:1; + transform:translateX(0) +} +} +@keyframes sfrom-l-to-r{ +0%{ + opacity:0; + transform:translateX(-10%) +} +to{ + opacity:1; + transform:translateX(0) +} +} +@-webkit-keyframes st-progress{ +0%{ + width:0 +} +to{ + width:100% +} +} +@keyframes st-progress{ +0%{ + width:0 +} +to{ + width:100% +} +} +@-webkit-keyframes locks-bouncing{ +0%{ + transform:scale(1.02) +} +to{ + transform:scale(1) +} +} +@keyframes locks-bouncing{ +0%{ + transform:scale(1.02) +} +to{ + transform:scale(1) +} +} +@-webkit-keyframes show-locks{ +0%{ + opacity:0 +} +to{ + opacity:1 +} +} +@keyframes show-locks{ +0%{ + opacity:0 +} +to{ + opacity:1 +} +} +@-webkit-keyframes show-shadow-locks{ +0%{ + opacity:0 +} +to{ + opacity:.05 +} +} +@keyframes show-shadow-locks{ +0%{ + opacity:0 +} +to{ + opacity:.05 +} +} +@-webkit-keyframes scroll-chat{ +0%{ + top:0 +} +50%{ + top:-472px +} +to{ + top:0 +} +} +@keyframes scroll-chat{ +0%{ + top:0 +} +50%{ + top:-472px +} +to{ + top:0 +} +} +@-webkit-keyframes show-c1{ +0%{ + opacity:0; + transform:rotate(-15deg) +} +to{ + opacity:1; + transform:rotate(0deg) +} +} +@keyframes show-c1{ +0%{ + opacity:0; + transform:rotate(-15deg) +} +to{ + opacity:1; + transform:rotate(0deg) +} +} +@-webkit-keyframes show-c2{ +0%{ + opacity:0; + transform:rotate(-15deg) +} +to{ + opacity:1; + transform:rotate(0deg) +} +} +@keyframes show-c2{ +0%{ + opacity:0; + transform:rotate(-15deg) +} +to{ + opacity:1; + transform:rotate(0deg) +} +} +@-webkit-keyframes move-blocks{ +0%{ + opacity:0; + transform:scale(.5) +} +to{ + opacity:1; + transform:scale(1) +} +} +@keyframes move-blocks{ +0%{ + opacity:0; + transform:scale(.5) +} +to{ + opacity:1; + transform:scale(1) +} +} +@-webkit-keyframes show-features{ +0%{ + opacity:0 +} +to{ + opacity:1 +} +} +@keyframes show-features{ +0%{ + opacity:0 +} +to{ + opacity:1 +} +} diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/BB4D8450E1C0A7FD64FAA62ADD1AC48112EE5BA7 b/home/.surf/cache/WebKitCache/Version 16/Blobs/BB4D8450E1C0A7FD64FAA62ADD1AC48112EE5BA7 new file mode 100644 index 0000000..5acb7f6 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/BB4D8450E1C0A7FD64FAA62ADD1AC48112EE5BA7 @@ -0,0 +1,4051 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Commits · void-linux/void-packages · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + + + +
              + Skip to content + + + + + + + + + + + +
              + +
              + + + + + + + +
              + + + + + + +
              + + + + + + + + + + +
              +
              +
              + + + + + + + + + + + + + + + + + + + + +
              + + + + + +
              + Permalink + +
              + +
              +
              + + + master + + + + +
              +
              +
              + Switch branches/tags + +
              + + + +
              + +
              + +
              + + +
              + +
              + + + + + + + + + + + + + + + + + +
              + + +
              +
              +
              +
              + +
              + +
              + + +
              + +
              +
              +
              +

              Name already in use

              +
              +
              + +
              +
              +
              +
              + +
              A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? +
              + +
              +
              + + +
              +
              + + +
              + +
              +
              +
              + +
              +
              +

              Commits on Jan 7, 2023

              +
                +
              1. +
                +

                + powertop: fix update-check + +

                + + +
                + +
                + +
                + +
                + pascal-huber + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + b9e6a5f + +
                +
                + + +
                +
              2. + +
              3. +
                +

                + lighttpd: update to 1.4.68 + + + +

                + +
                * update to 1.4.68
                +* modify build command for meson type: feature options
                +* fix meson build
                + +
                + +
                + +
                + +
                + gstrauss + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 81f64ec + +
                +
                + + +
                +
              4. + +
              5. +
                +

                + perl-URI: update to 5.17. + +

                + + +
                + +
                + +
                + +
                + mhmdanas + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 9fab4fc + +
                +
                + + +
                +
              6. + +
              7. +
                +

                + perl-MIME-tools: update to 5.510. + +

                + + +
                + +
                + +
                + +
                + mhmdanas + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + c89becc + +
                +
                + + +
                +
              8. + +
              9. +
                +

                + rssguard: update to 4.2.7. + +

                + + +
                + +
                + +
                + +
                + mobinmob + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 54af211 + +
                +
                + + +
                +
              10. + +
              11. +
                +

                + ristretto: update to 0.12.4. + +

                + + +
                + +
                + +
                + +
                + mobinmob + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 6cd82bf + +
                +
                + + +
                +
              12. + +
              13. +
                +

                + sigi: update to 3.6.0 + +

                + + +
                + +
                + +
                + +
                + hiljusti + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + b9bd687 + +
                +
                + + +
                +
              14. + +
              15. +
                +

                + xfce4-screenshooter: update to 1.10.2. + + + +

                + +
                * use libsoup3
                + +
                + +
                +
                + + @paper42 +
                +
                + +
                + paper42 + + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 49fe1c0 + +
                +
                + + +
                +
              16. + +
              17. +
                +

                + gdu: update to 5.21.0. + +

                + + +
                + +
                + +
                + +
                + TeddyDD + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 84eb1c5 + +
                +
                + + +
                +
              18. + +
              19. +
                +

                + doctl: update to 1.92.0. + +

                + + +
                + +
                + +
                + +
                + benalb + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 9ea86bd + +
                +
                + + +
                +
              20. + +
              21. +
                +

                + github-cli: update to 2.21.2 + + + +

                + +
                Closes: #41432 [via git-merge-pr]
                + +
                + +
                + +
                + +
                + tranzystorek-io + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 9331390 + +
                +
                + + +
                +
              22. + +
              23. +
                +

                + dbeaver: update to 22.3.1. + + + +

                + +
                Closes: #41451 [via git-merge-pr]
                + +
                + +
                + +
                + +
                + knusbaum + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 4b3121b + +
                +
                + + +
                +
              24. + +
              25. +
                +

                + skype: update to 8.92.0.401. + + + +

                + +
                Closes: #41445 [via git-merge-pr]
                + +
                + +
                + +
                + +
                + mobinmob + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 4f5d7c8 + +
                +
                + + +
                +
              26. + +
              27. +
                +

                + qalculate-qt: update to 4.5.1. + + + +

                + +
                Closes: #41456 [via git-merge-pr]
                + +
                + +
                + +
                + +
                + mhmdanas + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 205b518 + +
                +
                + + +
                +
              28. + +
              29. +
                +

                + qalculate-gtk: update to 4.5.1. + +

                + + +
                + +
                + +
                + +
                + mhmdanas + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 7df47d0 + +
                +
                + + +
                +
              30. + +
              31. +
                +

                + libqalculate: update to 4.5.1. + +

                + + +
                + +
                + +
                + +
                + mhmdanas + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + e707508 + +
                +
                + + +
                +
              32. + +
              33. +
                +

                + just: update to 1.11.0 + + + +

                + +
                Closes: #41461 [via git-merge-pr]
                + +
                + +
                + +
                + +
                + cinerea0 + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 686f191 + +
                +
                + + +
                +
              34. + +
              35. +
                +

                + usql: update to 0.13.5. + + + +

                + +
                Closes: #41502 [via git-merge-pr]
                + +
                + +
                + +
                + +
                + icp1994 + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 061a710 + +
                +
                + + +
                +
              36. + +
              37. +
                +

                + SDL2: update to 2.26.2. + + + +

                + +
                Closes: #41508 [via git-merge-pr]
                + +
                + +
                + +
                + +
                + motorto + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 4d5d451 + +
                +
                + + +
                +
              38. + +
              39. +
                +

                + exiftool: update to 12.54. + + + +

                + +
                Closes: #41506 [via git-merge-pr]
                + +
                + +
                + +
                + +
                + benalb + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 304b747 + +
                +
                + + +
                +
              40. + +
              41. +
                +

                + CONTRIBUTING.md: removing duplicated word + + + +

                + +
                removing duplicated 'the' from the section 'Creating, updating, and
                +modifying packages in Void by yourself'
                + +
                + +
                + +
                + +
                + carvalhudo + + authored and + abenson + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 647df89 + +
                +
                + + +
                +
              42. + +
              43. +
                +

                + stellarium: update to 1.2. + + + +

                + +
                I have opened an issue regarding the distfiles and versioning:
                +
                +  Stellarium/stellarium#2981
                + +
                + +
                +
                + + @abenson +
                +
                + +
                + abenson + + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + d04ebef + +
                +
                + + +
                +
              44. + +
              45. +
                +

                + syncthingtray: update to 1.3.2. + +

                + + +
                + +
                +
                + + @classabbyamp +
                +
                + +
                + classabbyamp + + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + + + + +
                + + bcb7c5d + +
                +
                + + +
                +
              46. + +
              47. +
                +

                + chezmoi: update to 2.29.1. + +

                + + +
                + +
                +
                + + @classabbyamp +
                +
                + +
                + classabbyamp + + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + + + + +
                + + f263041 + +
                +
                + + +
                +
              48. + +
              49. +
                +

                + imhex: update to 1.26.2. + +

                + + +
                + +
                +
                + + @classabbyamp +
                +
                + +
                + classabbyamp + + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + + + + +
                + + ad255b1 + +
                +
                + + +
                +
              50. + +
              51. +
                +

                + python3-rich: update to 13.0.1. + +

                + + +
                + +
                +
                + + @abenson +
                +
                + +
                + abenson + + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 35bd890 + +
                +
                + + +
                +
              52. + +
              53. +
                +

                + hwloc: update to 2.7.2. + +

                + + +
                + +
                +
                + + @leahneukirchen +
                +
                + +
                + leahneukirchen + + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + c8f404a + +
                +
                + + +
                +
              54. + +
              55. +
                +

                + fontforge: update to 20230101. + +

                + + +
                + +
                +
                + + @leahneukirchen +
                +
                + +
                + leahneukirchen + + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 3f56b2c + +
                +
                + + +
                +
              56. + +
              57. +
                +

                + bpftrace: update to 0.16.0. + +

                + + +
                + +
                +
                + + @leahneukirchen +
                +
                + +
                + leahneukirchen + + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 6c23888 + +
                +
                + + +
                +
              58. + +
              59. +
                +

                + New package: libbpf-1.1.0 + +

                + + +
                + +
                +
                + + @leahneukirchen +
                +
                + +
                + leahneukirchen + + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 1adc7db + +
                +
                + + +
                +
              60. + +
              61. +
                +

                + linux-lts: update to 5.15. + +

                + + +
                + +
                +
                + + @classabbyamp +
                +
                + +
                + classabbyamp + + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 81d598c + +
                +
                + + +
                +
              62. + +
              63. +
                +

                + galculator: remove gtk2 subpackage + +

                + + +
                + +
                +
                + + @paper42 +
                +
                + +
                + paper42 + + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 908f9d2 + +
                +
                + + +
                +
              64. + +
              65. +
                +

                + gtkimageview: use repo-default for $distfiles + +

                + + +
                + +
                +
                + + @paper42 +
                +
                + +
                + paper42 + + committed + Jan 7, 2023 + +
                +
                + + + + + + + +
                + +
                + +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + bbb5e5c + +
                +
                + + +
                +
              66. + +
              67. +
                +

                + gftp: use repo-default/distfiles for $distfiles + +

                + + +
                + +
                +
                + + @paper42 +
                +
                + +
                + paper42 + + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + 4739b92 + +
                +
                + + +
                +
              68. + +
              69. +
                +

                + ibus-m17n: remove unused gnome-common build dep + +

                + + +
                + +
                +
                + + @paper42 +
                +
                + +
                + paper42 + + committed + Jan 7, 2023 + +
                +
                +
                +
                +
                + +
                + + + + + + + + + + +
                + + eb04269 + +
                +
                + + +
                +
              70. + +
              +
              +
              +
              + + +
              +
              Older
              +
              + + +
              + + +
              + +
              + + +
              +
              + +
              + + + + + + + + + + + + + + + + + + +
              + +
              + + + diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/BBA4A4F1C8309BFDB9A3345F74BDF7DFB0D1E7AC b/home/.surf/cache/WebKitCache/Version 16/Blobs/BBA4A4F1C8309BFDB9A3345F74BDF7DFB0D1E7AC new file mode 100644 index 0000000..09cd40a --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/BBA4A4F1C8309BFDB9A3345F74BDF7DFB0D1E7AC @@ -0,0 +1,113 @@ +var Qs=Math.pow;(function(){var Js={"./node_modules/jquery.are-you-sure/jquery.are-you-sure.js":function(){(function(d){d.fn.areYouSure=function(B){var de=d.extend({message:"You have unsaved changes!",dirtyClass:"dirty",change:null,silent:!1,addRemoveFieldsMarksDirty:!1,fieldEvents:"change keyup propertychange input",fieldSelector:":input:not(input[type=submit]):not(input[type=button])"},B),c=function(q){if(q.hasClass("ays-ignore")||q.hasClass("aysIgnore")||q.attr("data-ays-ignore")||q.attr("name")===void 0)return null;if(q.is(":disabled"))return"ays-disabled";var ue,G=q.attr("type");switch(q.is("select")&&(G="select"),G){case"checkbox":case"radio":ue=q.is(":checked");break;case"select":ue="",q.find("option").each(function(E){var z=d(this);z.is(":selected")&&(ue+=z.val())});break;default:ue=q.val()}return ue},m=function(q){q.data("ays-orig",c(q))},h=function(q){var ue=function(ye){var ve=ye.data("ays-orig");return ve===void 0?!1:c(ye)!=ve},G=d(this).is("form")?d(this):d(this).parents("form");if(ue(d(q.target))){P(G,!0);return}if($fields=G.find(de.fieldSelector),de.addRemoveFieldsMarksDirty){var E=G.data("ays-orig-field-count");if(E!=$fields.length){P(G,!0);return}}var z=!1;$fields.each(function(){if($field=d(this),ue($field))return z=!0,!1}),P(G,z)},O=function(q){var ue=q.find(de.fieldSelector);d(ue).each(function(){m(d(this))}),d(ue).unbind(de.fieldEvents,h),d(ue).bind(de.fieldEvents,h),q.data("ays-orig-field-count",d(ue).length),P(q,!1)},P=function(q,ue){var G=ue!=q.hasClass(de.dirtyClass);q.toggleClass(de.dirtyClass,ue),G&&(de.change&&de.change.call(q,q),ue&&q.trigger("dirty.areYouSure",[q]),ue||q.trigger("clean.areYouSure",[q]),q.trigger("change.areYouSure",[q]))},L=function(){var q=d(this),ue=q.find(de.fieldSelector);d(ue).each(function(){var G=d(this);G.data("ays-orig")||(m(G),G.bind(de.fieldEvents,h))}),q.trigger("checkform.areYouSure")},oe=function(){O(d(this))};return!de.silent&&!window.aysUnloadSet&&(window.aysUnloadSet=!0,d(window).bind("beforeunload",function(){if($dirtyForms=d("form").filter("."+de.dirtyClass),$dirtyForms.length!=0){if(navigator.userAgent.toLowerCase().match(/msie|chrome/)){if(window.aysHasPrompted)return;window.aysHasPrompted=!0,window.setTimeout(function(){window.aysHasPrompted=!1},900)}return de.message}})),this.each(function(q){if(!!d(this).is("form")){var ue=d(this);ue.submit(function(){ue.removeClass(de.dirtyClass)}),ue.bind("reset",function(){P(ue,!1)}),ue.bind("rescan.areYouSure",L),ue.bind("reinitialize.areYouSure",oe),ue.bind("checkform.areYouSure",h),O(ue)}})}})(jQuery)},"./node_modules/jquery/dist/jquery.js":function(d,B){var de,c;(function(m,h){"use strict";typeof d.exports=="object"?d.exports=m.document?h(m,!0):function(O){if(!O.document)throw new Error("jQuery requires a window with a document");return h(O)}:h(m)})(typeof window!="undefined"?window:this,function(m,h){"use strict";var O=[],P=Object.getPrototypeOf,L=O.slice,oe=O.flat?function(a){return O.flat.call(a)}:function(a){return O.concat.apply([],a)},q=O.push,ue=O.indexOf,G={},E=G.toString,z=G.hasOwnProperty,ye=z.toString,ve=ye.call(Object),n={},I=function(f){return typeof f=="function"&&typeof f.nodeType!="number"&&typeof f.item!="function"},ce=function(f){return f!=null&&f===f.window},le=m.document,X={type:!0,src:!0,nonce:!0,noModule:!0};function ge(a,f,g){g=g||le;var j,R,$=g.createElement("script");if($.text=a,f)for(j in X)R=f[j]||f.getAttribute&&f.getAttribute(j),R&&$.setAttribute(j,R);g.head.appendChild($).parentNode.removeChild($)}function je(a){return a==null?a+"":typeof a=="object"||typeof a=="function"?G[E.call(a)]||"object":typeof a}var W="3.6.0",s=function(a,f){return new s.fn.init(a,f)};s.fn=s.prototype={jquery:W,constructor:s,length:0,toArray:function(){return L.call(this)},get:function(a){return a==null?L.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var f=s.merge(this.constructor(),a);return f.prevObject=this,f},each:function(a){return s.each(this,a)},map:function(a){return this.pushStack(s.map(this,function(f,g){return a.call(f,g,f)}))},slice:function(){return this.pushStack(L.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(s.grep(this,function(a,f){return(f+1)%2}))},odd:function(){return this.pushStack(s.grep(this,function(a,f){return f%2}))},eq:function(a){var f=this.length,g=+a+(a<0?f:0);return this.pushStack(g>=0&&g0&&f-1 in a}var Oe=function(a){var f,g,j,R,$,Q,Ae,Te,Ie,Xe,st,Ge,it,Tt,Lt,Ft,Ri,_i,Ni,ei="sizzle"+1*new Date,Gt=a.document,nn=0,Zt=0,vi=Gr(),Ar=Gr(),di=Gr(),Hi=Gr(),er=function(N,ne){return N===ne&&(st=!0),0},fr={}.hasOwnProperty,fn=[],wn=fn.pop,rn=fn.push,Bn=fn.push,Fr=fn.slice,Dn=function(N,ne){for(var be=0,Re=N.length;be+~]|"+ni+")"+ni+"*"),Vn=new RegExp(ni+"|>"),Pa=new RegExp(qn),ba=new RegExp("^"+tr+"$"),Dr={ID:new RegExp("^#("+tr+")"),CLASS:new RegExp("^\\.("+tr+")"),TAG:new RegExp("^("+tr+"|[*])"),ATTR:new RegExp("^"+Wr),PSEUDO:new RegExp("^"+qn),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ni+"*(even|odd|(([+-]|)(\\d*)n|)"+ni+"*(?:([+-]|)"+ni+"*(\\d+)|))"+ni+"*\\)|)","i"),bool:new RegExp("^(?:"+Wn+")$","i"),needsContext:new RegExp("^"+ni+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ni+"*((?:-\\d)?\\d*)"+ni+"*\\)|)(?=[^-]|$)","i")},qr=/HTML$/i,ya=/^(?:input|select|textarea|button)$/i,oa=/^h\d$/i,Lr=/^[^{]+\{\s*\[native \w/,Ra=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Vr=/[+~]/,ir=new RegExp("\\\\[\\da-fA-F]{1,6}"+ni+"?|\\\\([^\\r\\n\\f])","g"),nr=function(N,ne){var be="0x"+N.slice(1)-65536;return ne||(be<0?String.fromCharCode(be+65536):String.fromCharCode(be>>10|55296,be&1023|56320))},sa=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Nr=function(N,ne){return ne?N==="\0"?"\uFFFD":N.slice(0,-1)+"\\"+N.charCodeAt(N.length-1).toString(16)+" ":"\\"+N},wa=function(){Ge()},ji=H(function(N){return N.disabled===!0&&N.nodeName.toLowerCase()==="fieldset"},{dir:"parentNode",next:"legend"});try{Bn.apply(fn=Fr.call(Gt.childNodes),Gt.childNodes),fn[Gt.childNodes.length].nodeType}catch(N){Bn={apply:fn.length?function(ne,be){rn.apply(ne,Fr.call(be))}:function(ne,be){for(var Re=ne.length,Ce=0;ne[Re++]=be[Ce++];);ne.length=Re-1}}}function hi(N,ne,be,Re){var Ce,He,et,tt,lt,gt,mt,yt=ne&&ne.ownerDocument,Ct=ne?ne.nodeType:9;if(be=be||[],typeof N!="string"||!N||Ct!==1&&Ct!==9&&Ct!==11)return be;if(!Re&&(Ge(ne),ne=ne||it,Lt)){if(Ct!==11&&(lt=Ra.exec(N)))if(Ce=lt[1]){if(Ct===9)if(et=ne.getElementById(Ce)){if(et.id===Ce)return be.push(et),be}else return be;else if(yt&&(et=yt.getElementById(Ce))&&Ni(ne,et)&&et.id===Ce)return be.push(et),be}else{if(lt[2])return Bn.apply(be,ne.getElementsByTagName(N)),be;if((Ce=lt[3])&&g.getElementsByClassName&&ne.getElementsByClassName)return Bn.apply(be,ne.getElementsByClassName(Ce)),be}if(g.qsa&&!Hi[N+" "]&&(!Ft||!Ft.test(N))&&(Ct!==1||ne.nodeName.toLowerCase()!=="object")){if(mt=N,yt=ne,Ct===1&&(Vn.test(N)||Or.test(N))){for(yt=Vr.test(N)&&b(ne.parentNode)||ne,(yt!==ne||!g.scope)&&((tt=ne.getAttribute("id"))?tt=tt.replace(sa,Nr):ne.setAttribute("id",tt=ei)),gt=Q(N),He=gt.length;He--;)gt[He]=(tt?"#"+tt:":scope")+" "+C(gt[He]);mt=gt.join(",")}try{return Bn.apply(be,yt.querySelectorAll(mt)),be}catch(Ot){Hi(N,!0)}finally{tt===ei&&ne.removeAttribute("id")}}}return Te(N.replace(kr,"$1"),ne,be,Re)}function Gr(){var N=[];function ne(be,Re){return N.push(be+" ")>j.cacheLength&&delete ne[N.shift()],ne[be+" "]=Re}return ne}function Xi(N){return N[ei]=!0,N}function _n(N){var ne=it.createElement("fieldset");try{return!!N(ne)}catch(be){return!1}finally{ne.parentNode&&ne.parentNode.removeChild(ne),ne=null}}function br(N,ne){for(var be=N.split("|"),Re=be.length;Re--;)j.attrHandle[be[Re]]=ne}function Kr(N,ne){var be=ne&&N,Re=be&&N.nodeType===1&&ne.nodeType===1&&N.sourceIndex-ne.sourceIndex;if(Re)return Re;if(be){for(;be=be.nextSibling;)if(be===ne)return-1}return N?1:-1}function Yr(N){return function(ne){var be=ne.nodeName.toLowerCase();return be==="input"&&ne.type===N}}function la(N){return function(ne){var be=ne.nodeName.toLowerCase();return(be==="input"||be==="button")&&ne.type===N}}function ie(N){return function(ne){return"form"in ne?ne.parentNode&&ne.disabled===!1?"label"in ne?"label"in ne.parentNode?ne.parentNode.disabled===N:ne.disabled===N:ne.isDisabled===N||ne.isDisabled!==!N&&ji(ne)===N:ne.disabled===N:"label"in ne?ne.disabled===N:!1}}function u(N){return Xi(function(ne){return ne=+ne,Xi(function(be,Re){for(var Ce,He=N([],be.length,ne),et=He.length;et--;)be[Ce=He[et]]&&(be[Ce]=!(Re[Ce]=be[Ce]))})})}function b(N){return N&&typeof N.getElementsByTagName!="undefined"&&N}g=hi.support={},$=hi.isXML=function(N){var ne=N&&N.namespaceURI,be=N&&(N.ownerDocument||N).documentElement;return!qr.test(ne||be&&be.nodeName||"HTML")},Ge=hi.setDocument=function(N){var ne,be,Re=N?N.ownerDocument||N:Gt;return Re==it||Re.nodeType!==9||!Re.documentElement||(it=Re,Tt=it.documentElement,Lt=!$(it),Gt!=it&&(be=it.defaultView)&&be.top!==be&&(be.addEventListener?be.addEventListener("unload",wa,!1):be.attachEvent&&be.attachEvent("onunload",wa)),g.scope=_n(function(Ce){return Tt.appendChild(Ce).appendChild(it.createElement("div")),typeof Ce.querySelectorAll!="undefined"&&!Ce.querySelectorAll(":scope fieldset div").length}),g.attributes=_n(function(Ce){return Ce.className="i",!Ce.getAttribute("className")}),g.getElementsByTagName=_n(function(Ce){return Ce.appendChild(it.createComment("")),!Ce.getElementsByTagName("*").length}),g.getElementsByClassName=Lr.test(it.getElementsByClassName),g.getById=_n(function(Ce){return Tt.appendChild(Ce).id=ei,!it.getElementsByName||!it.getElementsByName(ei).length}),g.getById?(j.filter.ID=function(Ce){var He=Ce.replace(ir,nr);return function(et){return et.getAttribute("id")===He}},j.find.ID=function(Ce,He){if(typeof He.getElementById!="undefined"&&Lt){var et=He.getElementById(Ce);return et?[et]:[]}}):(j.filter.ID=function(Ce){var He=Ce.replace(ir,nr);return function(et){var tt=typeof et.getAttributeNode!="undefined"&&et.getAttributeNode("id");return tt&&tt.value===He}},j.find.ID=function(Ce,He){if(typeof He.getElementById!="undefined"&&Lt){var et,tt,lt,gt=He.getElementById(Ce);if(gt){if(et=gt.getAttributeNode("id"),et&&et.value===Ce)return[gt];for(lt=He.getElementsByName(Ce),tt=0;gt=lt[tt++];)if(et=gt.getAttributeNode("id"),et&&et.value===Ce)return[gt]}return[]}}),j.find.TAG=g.getElementsByTagName?function(Ce,He){if(typeof He.getElementsByTagName!="undefined")return He.getElementsByTagName(Ce);if(g.qsa)return He.querySelectorAll(Ce)}:function(Ce,He){var et,tt=[],lt=0,gt=He.getElementsByTagName(Ce);if(Ce==="*"){for(;et=gt[lt++];)et.nodeType===1&&tt.push(et);return tt}return gt},j.find.CLASS=g.getElementsByClassName&&function(Ce,He){if(typeof He.getElementsByClassName!="undefined"&&Lt)return He.getElementsByClassName(Ce)},Ri=[],Ft=[],(g.qsa=Lr.test(it.querySelectorAll))&&(_n(function(Ce){var He;Tt.appendChild(Ce).innerHTML="",Ce.querySelectorAll("[msallowcapture^='']").length&&Ft.push("[*^$]="+ni+`*(?:''|"")`),Ce.querySelectorAll("[selected]").length||Ft.push("\\["+ni+"*(?:value|"+Wn+")"),Ce.querySelectorAll("[id~="+ei+"-]").length||Ft.push("~="),He=it.createElement("input"),He.setAttribute("name",""),Ce.appendChild(He),Ce.querySelectorAll("[name='']").length||Ft.push("\\["+ni+"*name"+ni+"*="+ni+`*(?:''|"")`),Ce.querySelectorAll(":checked").length||Ft.push(":checked"),Ce.querySelectorAll("a#"+ei+"+*").length||Ft.push(".#.+[+~]"),Ce.querySelectorAll("\\\f"),Ft.push("[\\r\\n\\f]")}),_n(function(Ce){Ce.innerHTML="";var He=it.createElement("input");He.setAttribute("type","hidden"),Ce.appendChild(He).setAttribute("name","D"),Ce.querySelectorAll("[name=d]").length&&Ft.push("name"+ni+"*[*^$|!~]?="),Ce.querySelectorAll(":enabled").length!==2&&Ft.push(":enabled",":disabled"),Tt.appendChild(Ce).disabled=!0,Ce.querySelectorAll(":disabled").length!==2&&Ft.push(":enabled",":disabled"),Ce.querySelectorAll("*,:x"),Ft.push(",.*:")})),(g.matchesSelector=Lr.test(_i=Tt.matches||Tt.webkitMatchesSelector||Tt.mozMatchesSelector||Tt.oMatchesSelector||Tt.msMatchesSelector))&&_n(function(Ce){g.disconnectedMatch=_i.call(Ce,"*"),_i.call(Ce,"[s!='']:x"),Ri.push("!=",qn)}),Ft=Ft.length&&new RegExp(Ft.join("|")),Ri=Ri.length&&new RegExp(Ri.join("|")),ne=Lr.test(Tt.compareDocumentPosition),Ni=ne||Lr.test(Tt.contains)?function(Ce,He){var et=Ce.nodeType===9?Ce.documentElement:Ce,tt=He&&He.parentNode;return Ce===tt||!!(tt&&tt.nodeType===1&&(et.contains?et.contains(tt):Ce.compareDocumentPosition&&Ce.compareDocumentPosition(tt)&16))}:function(Ce,He){if(He){for(;He=He.parentNode;)if(He===Ce)return!0}return!1},er=ne?function(Ce,He){if(Ce===He)return st=!0,0;var et=!Ce.compareDocumentPosition-!He.compareDocumentPosition;return et||(et=(Ce.ownerDocument||Ce)==(He.ownerDocument||He)?Ce.compareDocumentPosition(He):1,et&1||!g.sortDetached&&He.compareDocumentPosition(Ce)===et?Ce==it||Ce.ownerDocument==Gt&&Ni(Gt,Ce)?-1:He==it||He.ownerDocument==Gt&&Ni(Gt,He)?1:Xe?Dn(Xe,Ce)-Dn(Xe,He):0:et&4?-1:1)}:function(Ce,He){if(Ce===He)return st=!0,0;var et,tt=0,lt=Ce.parentNode,gt=He.parentNode,mt=[Ce],yt=[He];if(!lt||!gt)return Ce==it?-1:He==it?1:lt?-1:gt?1:Xe?Dn(Xe,Ce)-Dn(Xe,He):0;if(lt===gt)return Kr(Ce,He);for(et=Ce;et=et.parentNode;)mt.unshift(et);for(et=He;et=et.parentNode;)yt.unshift(et);for(;mt[tt]===yt[tt];)tt++;return tt?Kr(mt[tt],yt[tt]):mt[tt]==Gt?-1:yt[tt]==Gt?1:0}),it},hi.matches=function(N,ne){return hi(N,null,null,ne)},hi.matchesSelector=function(N,ne){if(Ge(N),g.matchesSelector&&Lt&&!Hi[ne+" "]&&(!Ri||!Ri.test(ne))&&(!Ft||!Ft.test(ne)))try{var be=_i.call(N,ne);if(be||g.disconnectedMatch||N.document&&N.document.nodeType!==11)return be}catch(Re){Hi(ne,!0)}return hi(ne,it,null,[N]).length>0},hi.contains=function(N,ne){return(N.ownerDocument||N)!=it&&Ge(N),Ni(N,ne)},hi.attr=function(N,ne){(N.ownerDocument||N)!=it&&Ge(N);var be=j.attrHandle[ne.toLowerCase()],Re=be&&fr.call(j.attrHandle,ne.toLowerCase())?be(N,ne,!Lt):void 0;return Re!==void 0?Re:g.attributes||!Lt?N.getAttribute(ne):(Re=N.getAttributeNode(ne))&&Re.specified?Re.value:null},hi.escape=function(N){return(N+"").replace(sa,Nr)},hi.error=function(N){throw new Error("Syntax error, unrecognized expression: "+N)},hi.uniqueSort=function(N){var ne,be=[],Re=0,Ce=0;if(st=!g.detectDuplicates,Xe=!g.sortStable&&N.slice(0),N.sort(er),st){for(;ne=N[Ce++];)ne===N[Ce]&&(Re=be.push(Ce));for(;Re--;)N.splice(be[Re],1)}return Xe=null,N},R=hi.getText=function(N){var ne,be="",Re=0,Ce=N.nodeType;if(Ce){if(Ce===1||Ce===9||Ce===11){if(typeof N.textContent=="string")return N.textContent;for(N=N.firstChild;N;N=N.nextSibling)be+=R(N)}else if(Ce===3||Ce===4)return N.nodeValue}else for(;ne=N[Re++];)be+=R(ne);return be},j=hi.selectors={cacheLength:50,createPseudo:Xi,match:Dr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(N){return N[1]=N[1].replace(ir,nr),N[3]=(N[3]||N[4]||N[5]||"").replace(ir,nr),N[2]==="~="&&(N[3]=" "+N[3]+" "),N.slice(0,4)},CHILD:function(N){return N[1]=N[1].toLowerCase(),N[1].slice(0,3)==="nth"?(N[3]||hi.error(N[0]),N[4]=+(N[4]?N[5]+(N[6]||1):2*(N[3]==="even"||N[3]==="odd")),N[5]=+(N[7]+N[8]||N[3]==="odd")):N[3]&&hi.error(N[0]),N},PSEUDO:function(N){var ne,be=!N[6]&&N[2];return Dr.CHILD.test(N[0])?null:(N[3]?N[2]=N[4]||N[5]||"":be&&Pa.test(be)&&(ne=Q(be,!0))&&(ne=be.indexOf(")",be.length-ne)-be.length)&&(N[0]=N[0].slice(0,ne),N[2]=be.slice(0,ne)),N.slice(0,3))}},filter:{TAG:function(N){var ne=N.replace(ir,nr).toLowerCase();return N==="*"?function(){return!0}:function(be){return be.nodeName&&be.nodeName.toLowerCase()===ne}},CLASS:function(N){var ne=vi[N+" "];return ne||(ne=new RegExp("(^|"+ni+")"+N+"("+ni+"|$)"))&&vi(N,function(be){return ne.test(typeof be.className=="string"&&be.className||typeof be.getAttribute!="undefined"&&be.getAttribute("class")||"")})},ATTR:function(N,ne,be){return function(Re){var Ce=hi.attr(Re,N);return Ce==null?ne==="!=":ne?(Ce+="",ne==="="?Ce===be:ne==="!="?Ce!==be:ne==="^="?be&&Ce.indexOf(be)===0:ne==="*="?be&&Ce.indexOf(be)>-1:ne==="$="?be&&Ce.slice(-be.length)===be:ne==="~="?(" "+Ce.replace(Er," ")+" ").indexOf(be)>-1:ne==="|="?Ce===be||Ce.slice(0,be.length+1)===be+"-":!1):!0}},CHILD:function(N,ne,be,Re,Ce){var He=N.slice(0,3)!=="nth",et=N.slice(-4)!=="last",tt=ne==="of-type";return Re===1&&Ce===0?function(lt){return!!lt.parentNode}:function(lt,gt,mt){var yt,Ct,Ot,At,pi,Pi,Mi=He!==et?"nextSibling":"previousSibling",ri=lt.parentNode,Pn=tt&<.nodeName.toLowerCase(),Gn=!mt&&!tt,Ui=!1;if(ri){if(He){for(;Mi;){for(At=lt;At=At[Mi];)if(tt?At.nodeName.toLowerCase()===Pn:At.nodeType===1)return!1;Pi=Mi=N==="only"&&!Pi&&"nextSibling"}return!0}if(Pi=[et?ri.firstChild:ri.lastChild],et&&Gn){for(At=ri,Ot=At[ei]||(At[ei]={}),Ct=Ot[At.uniqueID]||(Ot[At.uniqueID]={}),yt=Ct[N]||[],pi=yt[0]===nn&&yt[1],Ui=pi&&yt[2],At=pi&&ri.childNodes[pi];At=++pi&&At&&At[Mi]||(Ui=pi=0)||Pi.pop();)if(At.nodeType===1&&++Ui&&At===lt){Ct[N]=[nn,pi,Ui];break}}else if(Gn&&(At=lt,Ot=At[ei]||(At[ei]={}),Ct=Ot[At.uniqueID]||(Ot[At.uniqueID]={}),yt=Ct[N]||[],pi=yt[0]===nn&&yt[1],Ui=pi),Ui===!1)for(;(At=++pi&&At&&At[Mi]||(Ui=pi=0)||Pi.pop())&&!((tt?At.nodeName.toLowerCase()===Pn:At.nodeType===1)&&++Ui&&(Gn&&(Ot=At[ei]||(At[ei]={}),Ct=Ot[At.uniqueID]||(Ot[At.uniqueID]={}),Ct[N]=[nn,Ui]),At===lt)););return Ui-=Ce,Ui===Re||Ui%Re===0&&Ui/Re>=0}}},PSEUDO:function(N,ne){var be,Re=j.pseudos[N]||j.setFilters[N.toLowerCase()]||hi.error("unsupported pseudo: "+N);return Re[ei]?Re(ne):Re.length>1?(be=[N,N,"",ne],j.setFilters.hasOwnProperty(N.toLowerCase())?Xi(function(Ce,He){for(var et,tt=Re(Ce,ne),lt=tt.length;lt--;)et=Dn(Ce,tt[lt]),Ce[et]=!(He[et]=tt[lt])}):function(Ce){return Re(Ce,0,be)}):Re}},pseudos:{not:Xi(function(N){var ne=[],be=[],Re=Ae(N.replace(kr,"$1"));return Re[ei]?Xi(function(Ce,He,et,tt){for(var lt,gt=Re(Ce,null,tt,[]),mt=Ce.length;mt--;)(lt=gt[mt])&&(Ce[mt]=!(He[mt]=lt))}):function(Ce,He,et){return ne[0]=Ce,Re(ne,null,et,be),ne[0]=null,!be.pop()}}),has:Xi(function(N){return function(ne){return hi(N,ne).length>0}}),contains:Xi(function(N){return N=N.replace(ir,nr),function(ne){return(ne.textContent||R(ne)).indexOf(N)>-1}}),lang:Xi(function(N){return ba.test(N||"")||hi.error("unsupported lang: "+N),N=N.replace(ir,nr).toLowerCase(),function(ne){var be;do if(be=Lt?ne.lang:ne.getAttribute("xml:lang")||ne.getAttribute("lang"))return be=be.toLowerCase(),be===N||be.indexOf(N+"-")===0;while((ne=ne.parentNode)&&ne.nodeType===1);return!1}}),target:function(N){var ne=a.location&&a.location.hash;return ne&&ne.slice(1)===N.id},root:function(N){return N===Tt},focus:function(N){return N===it.activeElement&&(!it.hasFocus||it.hasFocus())&&!!(N.type||N.href||~N.tabIndex)},enabled:ie(!1),disabled:ie(!0),checked:function(N){var ne=N.nodeName.toLowerCase();return ne==="input"&&!!N.checked||ne==="option"&&!!N.selected},selected:function(N){return N.parentNode&&N.parentNode.selectedIndex,N.selected===!0},empty:function(N){for(N=N.firstChild;N;N=N.nextSibling)if(N.nodeType<6)return!1;return!0},parent:function(N){return!j.pseudos.empty(N)},header:function(N){return oa.test(N.nodeName)},input:function(N){return ya.test(N.nodeName)},button:function(N){var ne=N.nodeName.toLowerCase();return ne==="input"&&N.type==="button"||ne==="button"},text:function(N){var ne;return N.nodeName.toLowerCase()==="input"&&N.type==="text"&&((ne=N.getAttribute("type"))==null||ne.toLowerCase()==="text")},first:u(function(){return[0]}),last:u(function(N,ne){return[ne-1]}),eq:u(function(N,ne,be){return[be<0?be+ne:be]}),even:u(function(N,ne){for(var be=0;bene?ne:be;--Re>=0;)N.push(Re);return N}),gt:u(function(N,ne,be){for(var Re=be<0?be+ne:be;++Re1?function(ne,be,Re){for(var Ce=N.length;Ce--;)if(!N[Ce](ne,be,Re))return!1;return!0}:N[0]}function fe(N,ne,be){for(var Re=0,Ce=ne.length;Re-1&&(et[mt]=!(tt[mt]=Ct))}}else ri=Pe(ri===tt?ri.splice(pi,ri.length):ri),Ce?Ce(null,tt,ri,gt):Bn.apply(tt,ri)})}function Ye(N){for(var ne,be,Re,Ce=N.length,He=j.relative[N[0].type],et=He||j.relative[" "],tt=He?1:0,lt=H(function(yt){return yt===ne},et,!0),gt=H(function(yt){return Dn(ne,yt)>-1},et,!0),mt=[function(yt,Ct,Ot){var At=!He&&(Ot||Ct!==Ie)||((ne=Ct).nodeType?lt(yt,Ct,Ot):gt(yt,Ct,Ot));return ne=null,At}];tt1&&ee(mt),tt>1&&C(N.slice(0,tt-1).concat({value:N[tt-2].type===" "?"*":""})).replace(kr,"$1"),be,tt0,Re=N.length>0,Ce=function(He,et,tt,lt,gt){var mt,yt,Ct,Ot=0,At="0",pi=He&&[],Pi=[],Mi=Ie,ri=He||Re&&j.find.TAG("*",gt),Pn=nn+=Mi==null?1:Math.random()||.1,Gn=ri.length;for(gt&&(Ie=et==it||et||gt);At!==Gn&&(mt=ri[At])!=null;At++){if(Re&&mt){for(yt=0,!et&&mt.ownerDocument!=it&&(Ge(mt),tt=!Lt);Ct=N[yt++];)if(Ct(mt,et||it,tt)){lt.push(mt);break}gt&&(nn=Pn)}be&&((mt=!Ct&&mt)&&Ot--,He&&pi.push(mt))}if(Ot+=At,be&&At!==Ot){for(yt=0;Ct=ne[yt++];)Ct(pi,Pi,et,tt);if(He){if(Ot>0)for(;At--;)pi[At]||Pi[At]||(Pi[At]=wn.call(lt));Pi=Pe(Pi)}Bn.apply(lt,Pi),gt&&!He&&Pi.length>0&&Ot+ne.length>1&&hi.uniqueSort(lt)}return gt&&(nn=Pn,Ie=Mi),pi};return be?Xi(Ce):Ce}return Ae=hi.compile=function(N,ne){var be,Re=[],Ce=[],He=di[N+" "];if(!He){for(ne||(ne=Q(N)),be=ne.length;be--;)He=Ye(ne[be]),He[ei]?Re.push(He):Ce.push(He);He=di(N,at(Ce,Re)),He.selector=N}return He},Te=hi.select=function(N,ne,be,Re){var Ce,He,et,tt,lt,gt=typeof N=="function"&&N,mt=!Re&&Q(N=gt.selector||N);if(be=be||[],mt.length===1){if(He=mt[0]=mt[0].slice(0),He.length>2&&(et=He[0]).type==="ID"&&ne.nodeType===9&&Lt&&j.relative[He[1].type]){if(ne=(j.find.ID(et.matches[0].replace(ir,nr),ne)||[])[0],ne)gt&&(ne=ne.parentNode);else return be;N=N.slice(He.shift().value.length)}for(Ce=Dr.needsContext.test(N)?0:He.length;Ce--&&(et=He[Ce],!j.relative[tt=et.type]);)if((lt=j.find[tt])&&(Re=lt(et.matches[0].replace(ir,nr),Vr.test(He[0].type)&&b(ne.parentNode)||ne))){if(He.splice(Ce,1),N=Re.length&&C(He),!N)return Bn.apply(be,Re),be;break}}return(gt||Ae(N,mt))(Re,ne,!Lt,be,!ne||Vr.test(N)&&b(ne.parentNode)||ne),be},g.sortStable=ei.split("").sort(er).join("")===ei,g.detectDuplicates=!!st,Ge(),g.sortDetached=_n(function(N){return N.compareDocumentPosition(it.createElement("fieldset"))&1}),_n(function(N){return N.innerHTML="",N.firstChild.getAttribute("href")==="#"})||br("type|href|height|width",function(N,ne,be){if(!be)return N.getAttribute(ne,ne.toLowerCase()==="type"?1:2)}),(!g.attributes||!_n(function(N){return N.innerHTML="",N.firstChild.setAttribute("value",""),N.firstChild.getAttribute("value")===""}))&&br("value",function(N,ne,be){if(!be&&N.nodeName.toLowerCase()==="input")return N.defaultValue}),_n(function(N){return N.getAttribute("disabled")==null})||br(Wn,function(N,ne,be){var Re;if(!be)return N[ne]===!0?ne.toLowerCase():(Re=N.getAttributeNode(ne))&&Re.specified?Re.value:null}),hi}(m);s.find=Oe,s.expr=Oe.selectors,s.expr[":"]=s.expr.pseudos,s.uniqueSort=s.unique=Oe.uniqueSort,s.text=Oe.getText,s.isXMLDoc=Oe.isXML,s.contains=Oe.contains,s.escapeSelector=Oe.escape;var xe=function(a,f,g){for(var j=[],R=g!==void 0;(a=a[f])&&a.nodeType!==9;)if(a.nodeType===1){if(R&&s(a).is(g))break;j.push(a)}return j},se=function(a,f){for(var g=[];a;a=a.nextSibling)a.nodeType===1&&a!==f&&g.push(a);return g},Z=s.expr.match.needsContext;function qe(a,f){return a.nodeName&&a.nodeName.toLowerCase()===f.toLowerCase()}var F=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(a,f,g){return I(f)?s.grep(a,function(j,R){return!!f.call(j,R,j)!==g}):f.nodeType?s.grep(a,function(j){return j===f!==g}):typeof f!="string"?s.grep(a,function(j){return ue.call(f,j)>-1!==g}):s.filter(f,a,g)}s.filter=function(a,f,g){var j=f[0];return g&&(a=":not("+a+")"),f.length===1&&j.nodeType===1?s.find.matchesSelector(j,a)?[j]:[]:s.find.matches(a,s.grep(f,function(R){return R.nodeType===1}))},s.fn.extend({find:function(a){var f,g,j=this.length,R=this;if(typeof a!="string")return this.pushStack(s(a).filter(function(){for(f=0;f1?s.uniqueSort(g):g},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,typeof a=="string"&&Z.test(a)?s(a):a||[],!1).length}});var k,Y=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Se=s.fn.init=function(a,f,g){var j,R;if(!a)return this;if(g=g||k,typeof a=="string")if(a[0]==="<"&&a[a.length-1]===">"&&a.length>=3?j=[null,a,null]:j=Y.exec(a),j&&(j[1]||!f))if(j[1]){if(f=f instanceof s?f[0]:f,s.merge(this,s.parseHTML(j[1],f&&f.nodeType?f.ownerDocument||f:le,!0)),F.test(j[1])&&s.isPlainObject(f))for(j in f)I(this[j])?this[j](f[j]):this.attr(j,f[j]);return this}else return R=le.getElementById(j[2]),R&&(this[0]=R,this.length=1),this;else return!f||f.jquery?(f||g).find(a):this.constructor(f).find(a);else{if(a.nodeType)return this[0]=a,this.length=1,this;if(I(a))return g.ready!==void 0?g.ready(a):a(s)}return s.makeArray(a,this)};Se.prototype=s.fn,k=s(le);var Ne=/^(?:parents|prev(?:Until|All))/,ze={children:!0,contents:!0,next:!0,prev:!0};s.fn.extend({has:function(a){var f=s(a,this),g=f.length;return this.filter(function(){for(var j=0;j-1:g.nodeType===1&&s.find.matchesSelector(g,a))){$.push(g);break}}return this.pushStack($.length>1?s.uniqueSort($):$)},index:function(a){return a?typeof a=="string"?ue.call(s(a),this[0]):ue.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,f){return this.pushStack(s.uniqueSort(s.merge(this.get(),s(a,f))))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}});function K(a,f){for(;(a=a[f])&&a.nodeType!==1;);return a}s.each({parent:function(a){var f=a.parentNode;return f&&f.nodeType!==11?f:null},parents:function(a){return xe(a,"parentNode")},parentsUntil:function(a,f,g){return xe(a,"parentNode",g)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return xe(a,"nextSibling")},prevAll:function(a){return xe(a,"previousSibling")},nextUntil:function(a,f,g){return xe(a,"nextSibling",g)},prevUntil:function(a,f,g){return xe(a,"previousSibling",g)},siblings:function(a){return se((a.parentNode||{}).firstChild,a)},children:function(a){return se(a.firstChild)},contents:function(a){return a.contentDocument!=null&&P(a.contentDocument)?a.contentDocument:(qe(a,"template")&&(a=a.content||a),s.merge([],a.childNodes))}},function(a,f){s.fn[a]=function(g,j){var R=s.map(this,f,g);return a.slice(-5)!=="Until"&&(j=g),j&&typeof j=="string"&&(R=s.filter(j,R)),this.length>1&&(ze[a]||s.uniqueSort(R),Ne.test(a)&&R.reverse()),this.pushStack(R)}});var T=/[^\x20\t\r\n\f]+/g;function J(a){var f={};return s.each(a.match(T)||[],function(g,j){f[j]=!0}),f}s.Callbacks=function(a){a=typeof a=="string"?J(a):s.extend({},a);var f,g,j,R,$=[],Q=[],Ae=-1,Te=function(){for(R=R||a.once,j=f=!0;Q.length;Ae=-1)for(g=Q.shift();++Ae<$.length;)$[Ae].apply(g[0],g[1])===!1&&a.stopOnFalse&&(Ae=$.length,g=!1);a.memory||(g=!1),f=!1,R&&(g?$=[]:$="")},Ie={add:function(){return $&&(g&&!f&&(Ae=$.length-1,Q.push(g)),function Xe(st){s.each(st,function(Ge,it){I(it)?(!a.unique||!Ie.has(it))&&$.push(it):it&&it.length&&je(it)!=="string"&&Xe(it)})}(arguments),g&&!f&&Te()),this},remove:function(){return s.each(arguments,function(Xe,st){for(var Ge;(Ge=s.inArray(st,$,Ge))>-1;)$.splice(Ge,1),Ge<=Ae&&Ae--}),this},has:function(Xe){return Xe?s.inArray(Xe,$)>-1:$.length>0},empty:function(){return $&&($=[]),this},disable:function(){return R=Q=[],$=g="",this},disabled:function(){return!$},lock:function(){return R=Q=[],!g&&!f&&($=g=""),this},locked:function(){return!!R},fireWith:function(Xe,st){return R||(st=st||[],st=[Xe,st.slice?st.slice():st],Q.push(st),f||Te()),this},fire:function(){return Ie.fireWith(this,arguments),this},fired:function(){return!!j}};return Ie};function A(a){return a}function ae(a){throw a}function we(a,f,g,j){var R;try{a&&I(R=a.promise)?R.call(a).done(f).fail(g):a&&I(R=a.then)?R.call(a,f,g):f.apply(void 0,[a].slice(j))}catch($){g.apply(void 0,[$])}}s.extend({Deferred:function(a){var f=[["notify","progress",s.Callbacks("memory"),s.Callbacks("memory"),2],["resolve","done",s.Callbacks("once memory"),s.Callbacks("once memory"),0,"resolved"],["reject","fail",s.Callbacks("once memory"),s.Callbacks("once memory"),1,"rejected"]],g="pending",j={state:function(){return g},always:function(){return R.done(arguments).fail(arguments),this},catch:function($){return j.then(null,$)},pipe:function(){var $=arguments;return s.Deferred(function(Q){s.each(f,function(Ae,Te){var Ie=I($[Te[4]])&&$[Te[4]];R[Te[1]](function(){var Xe=Ie&&Ie.apply(this,arguments);Xe&&I(Xe.promise)?Xe.promise().progress(Q.notify).done(Q.resolve).fail(Q.reject):Q[Te[0]+"With"](this,Ie?[Xe]:arguments)})}),$=null}).promise()},then:function($,Q,Ae){var Te=0;function Ie(Xe,st,Ge,it){return function(){var Tt=this,Lt=arguments,Ft=function(){var _i,Ni;if(!(Xe=Te&&(Ge!==ae&&(Tt=void 0,Lt=[_i]),st.rejectWith(Tt,Lt))}};Xe?Ri():(s.Deferred.getStackHook&&(Ri.stackTrace=s.Deferred.getStackHook()),m.setTimeout(Ri))}}return s.Deferred(function(Xe){f[0][3].add(Ie(0,Xe,I(Ae)?Ae:A,Xe.notifyWith)),f[1][3].add(Ie(0,Xe,I($)?$:A)),f[2][3].add(Ie(0,Xe,I(Q)?Q:ae))}).promise()},promise:function($){return $!=null?s.extend($,j):j}},R={};return s.each(f,function($,Q){var Ae=Q[2],Te=Q[5];j[Q[1]]=Ae.add,Te&&Ae.add(function(){g=Te},f[3-$][2].disable,f[3-$][3].disable,f[0][2].lock,f[0][3].lock),Ae.add(Q[3].fire),R[Q[0]]=function(){return R[Q[0]+"With"](this===R?void 0:this,arguments),this},R[Q[0]+"With"]=Ae.fireWith}),j.promise(R),a&&a.call(R,R),R},when:function(a){var f=arguments.length,g=f,j=Array(g),R=L.call(arguments),$=s.Deferred(),Q=function(Ae){return function(Te){j[Ae]=this,R[Ae]=arguments.length>1?L.call(arguments):Te,--f||$.resolveWith(j,R)}};if(f<=1&&(we(a,$.done(Q(g)).resolve,$.reject,!f),$.state()==="pending"||I(R[g]&&R[g].then)))return $.then();for(;g--;)we(R[g],Q(g),$.reject);return $.promise()}});var Le=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;s.Deferred.exceptionHook=function(a,f){m.console&&m.console.warn&&a&&Le.test(a.name)&&m.console.warn("jQuery.Deferred exception: "+a.message,a.stack,f)},s.readyException=function(a){m.setTimeout(function(){throw a})};var We=s.Deferred();s.fn.ready=function(a){return We.then(a).catch(function(f){s.readyException(f)}),this},s.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--s.readyWait:s.isReady)||(s.isReady=!0,!(a!==!0&&--s.readyWait>0)&&We.resolveWith(le,[s]))}}),s.ready.then=We.then;function Je(){le.removeEventListener("DOMContentLoaded",Je),m.removeEventListener("load",Je),s.ready()}le.readyState==="complete"||le.readyState!=="loading"&&!le.documentElement.doScroll?m.setTimeout(s.ready):(le.addEventListener("DOMContentLoaded",Je),m.addEventListener("load",Je));var ut=function(a,f,g,j,R,$,Q){var Ae=0,Te=a.length,Ie=g==null;if(je(g)==="object"){R=!0;for(Ae in g)ut(a,f,Ae,g[Ae],!0,$,Q)}else if(j!==void 0&&(R=!0,I(j)||(Q=!0),Ie&&(Q?(f.call(a,j),f=null):(Ie=f,f=function(Xe,st,Ge){return Ie.call(s(Xe),Ge)})),f))for(;Ae1,null,!0)},removeData:function(a){return this.each(function(){Kt.remove(this,a)})}}),s.extend({queue:function(a,f,g){var j;if(a)return f=(f||"fx")+"queue",j=jt.get(a,f),g&&(!j||Array.isArray(g)?j=jt.access(a,f,s.makeArray(g)):j.push(g)),j||[]},dequeue:function(a,f){f=f||"fx";var g=s.queue(a,f),j=g.length,R=g.shift(),$=s._queueHooks(a,f),Q=function(){s.dequeue(a,f)};R==="inprogress"&&(R=g.shift(),j--),R&&(f==="fx"&&g.unshift("inprogress"),delete $.stop,R.call(a,Q,$)),!j&&$&&$.empty.fire()},_queueHooks:function(a,f){var g=f+"queueHooks";return jt.get(a,g)||jt.access(a,g,{empty:s.Callbacks("once memory").add(function(){jt.remove(a,[f+"queue",g])})})}}),s.fn.extend({queue:function(a,f){var g=2;return typeof a!="string"&&(f=a,a="fx",g--),arguments.length\x20\t\r\n\f]*)/i,zt=/^$|^module$|\/(?:java|ecma)script/i;(function(){var a=le.createDocumentFragment(),f=a.appendChild(le.createElement("div")),g=le.createElement("input");g.setAttribute("type","radio"),g.setAttribute("checked","checked"),g.setAttribute("name","t"),f.appendChild(g),n.checkClone=f.cloneNode(!0).cloneNode(!0).lastChild.checked,f.innerHTML="",n.noCloneChecked=!!f.cloneNode(!0).lastChild.defaultValue,f.innerHTML="",n.option=!!f.lastChild})();var Bt={thead:[1,"","
              "],col:[2,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],_default:[0,"",""]};Bt.tbody=Bt.tfoot=Bt.colgroup=Bt.caption=Bt.thead,Bt.th=Bt.td,n.option||(Bt.optgroup=Bt.option=[1,""]);function li(a,f){var g;return typeof a.getElementsByTagName!="undefined"?g=a.getElementsByTagName(f||"*"):typeof a.querySelectorAll!="undefined"?g=a.querySelectorAll(f||"*"):g=[],f===void 0||f&&qe(a,f)?s.merge([a],g):g}function Mn(a,f){for(var g=0,j=a.length;g-1){R&&R.push($);continue}if(Ie=Mt($),Q=li(st.appendChild($),"script"),Ie&&Mn(Q),g)for(Xe=0;$=Q[Xe++];)zt.test($.type||"")&&g.push($)}return st}var pr=/^([^.]*)(?:\.(.+)|)/;function Vi(){return!0}function In(){return!1}function _r(a,f){return a===Qi()==(f==="focus")}function Qi(){try{return le.activeElement}catch(a){}}function Gi(a,f,g,j,R,$){var Q,Ae;if(typeof f=="object"){typeof g!="string"&&(j=j||g,g=void 0);for(Ae in f)Gi(a,Ae,g,j,f[Ae],$);return a}if(j==null&&R==null?(R=g,j=g=void 0):R==null&&(typeof g=="string"?(R=j,j=void 0):(R=j,j=g,g=void 0)),R===!1)R=In;else if(!R)return a;return $===1&&(Q=R,R=function(Te){return s().off(Te),Q.apply(this,arguments)},R.guid=Q.guid||(Q.guid=s.guid++)),a.each(function(){s.event.add(this,f,R,j,g)})}s.event={global:{},add:function(a,f,g,j,R){var $,Q,Ae,Te,Ie,Xe,st,Ge,it,Tt,Lt,Ft=jt.get(a);if(!!qt(a))for(g.handler&&($=g,g=$.handler,R=$.selector),R&&s.find.matchesSelector(_t,R),g.guid||(g.guid=s.guid++),(Te=Ft.events)||(Te=Ft.events=Object.create(null)),(Q=Ft.handle)||(Q=Ft.handle=function(Ri){return typeof s!="undefined"&&s.event.triggered!==Ri.type?s.event.dispatch.apply(a,arguments):void 0}),f=(f||"").match(T)||[""],Ie=f.length;Ie--;)Ae=pr.exec(f[Ie])||[],it=Lt=Ae[1],Tt=(Ae[2]||"").split(".").sort(),it&&(st=s.event.special[it]||{},it=(R?st.delegateType:st.bindType)||it,st=s.event.special[it]||{},Xe=s.extend({type:it,origType:Lt,data:j,handler:g,guid:g.guid,selector:R,needsContext:R&&s.expr.match.needsContext.test(R),namespace:Tt.join(".")},$),(Ge=Te[it])||(Ge=Te[it]=[],Ge.delegateCount=0,(!st.setup||st.setup.call(a,j,Tt,Q)===!1)&&a.addEventListener&&a.addEventListener(it,Q)),st.add&&(st.add.call(a,Xe),Xe.handler.guid||(Xe.handler.guid=g.guid)),R?Ge.splice(Ge.delegateCount++,0,Xe):Ge.push(Xe),s.event.global[it]=!0)},remove:function(a,f,g,j,R){var $,Q,Ae,Te,Ie,Xe,st,Ge,it,Tt,Lt,Ft=jt.hasData(a)&&jt.get(a);if(!(!Ft||!(Te=Ft.events))){for(f=(f||"").match(T)||[""],Ie=f.length;Ie--;){if(Ae=pr.exec(f[Ie])||[],it=Lt=Ae[1],Tt=(Ae[2]||"").split(".").sort(),!it){for(it in Te)s.event.remove(a,it+f[Ie],g,j,!0);continue}for(st=s.event.special[it]||{},it=(j?st.delegateType:st.bindType)||it,Ge=Te[it]||[],Ae=Ae[2]&&new RegExp("(^|\\.)"+Tt.join("\\.(?:.*\\.|)")+"(\\.|$)"),Q=$=Ge.length;$--;)Xe=Ge[$],(R||Lt===Xe.origType)&&(!g||g.guid===Xe.guid)&&(!Ae||Ae.test(Xe.namespace))&&(!j||j===Xe.selector||j==="**"&&Xe.selector)&&(Ge.splice($,1),Xe.selector&&Ge.delegateCount--,st.remove&&st.remove.call(a,Xe));Q&&!Ge.length&&((!st.teardown||st.teardown.call(a,Tt,Ft.handle)===!1)&&s.removeEvent(a,it,Ft.handle),delete Te[it])}s.isEmptyObject(Te)&&jt.remove(a,"handle events")}},dispatch:function(a){var f,g,j,R,$,Q,Ae=new Array(arguments.length),Te=s.event.fix(a),Ie=(jt.get(this,"events")||Object.create(null))[Te.type]||[],Xe=s.event.special[Te.type]||{};for(Ae[0]=Te,f=1;f=1)){for(;Ie!==this;Ie=Ie.parentNode||this)if(Ie.nodeType===1&&!(a.type==="click"&&Ie.disabled===!0)){for($=[],Q={},g=0;g-1:s.find(R,this,null,[Ie]).length),Q[R]&&$.push(j);$.length&&Ae.push({elem:Ie,handlers:$})}}return Ie=this,Te\s*$/g;function gi(a,f){return qe(a,"table")&&qe(f.nodeType!==11?f:f.firstChild,"tr")&&s(a).children("tbody")[0]||a}function Hr(a){return a.type=(a.getAttribute("type")!==null)+"/"+a.type,a}function Yn(a){return(a.type||"").slice(0,5)==="true/"?a.type=a.type.slice(5):a.removeAttribute("type"),a}function Ki(a,f){var g,j,R,$,Q,Ae,Te;if(f.nodeType===1){if(jt.hasData(a)&&($=jt.get(a),Te=$.events,Te)){jt.remove(f,"handle events");for(R in Te)for(g=0,j=Te[R].length;g1&&typeof it=="string"&&!n.checkClone&&sr.test(it))return a.each(function(Lt){var Ft=a.eq(Lt);Tt&&(f[0]=it.call(this,Lt,Ft.html())),Nn(Ft,f,g,j)});if(st&&(R=xn(f,a[0].ownerDocument,!1,a,j),$=R.firstChild,R.childNodes.length===1&&(R=$),$||j)){for(Q=s.map(li(R,"script"),Hr),Ae=Q.length;Xe0&&Mn(Q,!Te&&li(a,"script")),Ae},cleanData:function(a){for(var f,g,j,R=s.event.special,$=0;(g=a[$])!==void 0;$++)if(qt(g)){if(f=g[jt.expando]){if(f.events)for(j in f.events)R[j]?s.event.remove(g,j):s.removeEvent(g,j,f.handle);g[jt.expando]=void 0}g[Kt.expando]&&(g[Kt.expando]=void 0)}}}),s.fn.extend({detach:function(a){return Mr(this,a,!0)},remove:function(a){return Mr(this,a)},text:function(a){return ut(this,function(f){return f===void 0?s.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=f)})},null,a,arguments.length)},append:function(){return Nn(this,arguments,function(a){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var f=gi(this,a);f.appendChild(a)}})},prepend:function(){return Nn(this,arguments,function(a){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var f=gi(this,a);f.insertBefore(a,f.firstChild)}})},before:function(){return Nn(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Nn(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,f=0;(a=this[f])!=null;f++)a.nodeType===1&&(s.cleanData(li(a,!1)),a.textContent="");return this},clone:function(a,f){return a=a==null?!1:a,f=f==null?a:f,this.map(function(){return s.clone(this,a,f)})},html:function(a){return ut(this,function(f){var g=this[0]||{},j=0,R=this.length;if(f===void 0&&g.nodeType===1)return g.innerHTML;if(typeof f=="string"&&!Fn.test(f)&&!Bt[(xt.exec(f)||["",""])[1].toLowerCase()]){f=s.htmlPrefilter(f);try{for(;j=0&&(Te+=Math.max(0,Math.ceil(a["offset"+f[0].toUpperCase()+f.slice(1)]-$-Te-Ae-.5))||0),Te}function kn(a,f,g){var j=hr(a),R=!n.boxSizingReliable()||g,$=R&&s.css(a,"boxSizing",!1,j)==="border-box",Q=$,Ae=on(a,f,j),Te="offset"+f[0].toUpperCase()+f.slice(1);if(Ir.test(Ae)){if(!g)return Ae;Ae="auto"}return(!n.boxSizingReliable()&&$||!n.reliableTrDimensions()&&qe(a,"tr")||Ae==="auto"||!parseFloat(Ae)&&s.css(a,"display",!1,j)==="inline")&&a.getClientRects().length&&($=s.css(a,"boxSizing",!1,j)==="border-box",Q=Te in a,Q&&(Ae=a[Te])),Ae=parseFloat(Ae)||0,Ae+Sn(a,f,g||($?"border":"content"),Q,j,Ae)+"px"}s.extend({cssHooks:{opacity:{get:function(a,f){if(f){var g=on(a,"opacity");return g===""?"1":g}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(a,f,g,j){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var R,$,Q,Ae=Et(f),Te=sn.test(f),Ie=a.style;if(Te||(f=jr(Ae)),Q=s.cssHooks[f]||s.cssHooks[Ae],g!==void 0){if($=typeof g,$==="string"&&(R=De.exec(g))&&R[1]&&(g=Xt(a,f,R),$="number"),g==null||g!==g)return;$==="number"&&!Te&&(g+=R&&R[3]||(s.cssNumber[Ae]?"":"px")),!n.clearCloneStyle&&g===""&&f.indexOf("background")===0&&(Ie[f]="inherit"),(!Q||!("set"in Q)||(g=Q.set(a,g,j))!==void 0)&&(Te?Ie.setProperty(f,g):Ie[f]=g)}else return Q&&"get"in Q&&(R=Q.get(a,!1,j))!==void 0?R:Ie[f]}},css:function(a,f,g,j){var R,$,Q,Ae=Et(f),Te=sn.test(f);return Te||(f=jr(Ae)),Q=s.cssHooks[f]||s.cssHooks[Ae],Q&&"get"in Q&&(R=Q.get(a,!0,g)),R===void 0&&(R=on(a,f,j)),R==="normal"&&f in na&&(R=na[f]),g===""||g?($=parseFloat(R),g===!0||isFinite($)?$||0:R):R}}),s.each(["height","width"],function(a,f){s.cssHooks[f]={get:function(g,j,R){if(j)return $n.test(s.css(g,"display"))&&(!g.getClientRects().length||!g.getBoundingClientRect().width)?Ji(g,Cn,function(){return kn(g,f,R)}):kn(g,f,R)},set:function(g,j,R){var $,Q=hr(g),Ae=!n.scrollboxSize()&&Q.position==="absolute",Te=Ae||R,Ie=Te&&s.css(g,"boxSizing",!1,Q)==="border-box",Xe=R?Sn(g,f,R,Ie,Q):0;return Ie&&Ae&&(Xe-=Math.ceil(g["offset"+f[0].toUpperCase()+f.slice(1)]-parseFloat(Q[f])-Sn(g,f,"border",!1,Q)-.5)),Xe&&($=De.exec(j))&&($[3]||"px")!=="px"&&(g.style[f]=j,j=s.css(g,f)),gr(g,j,Xe)}}}),s.cssHooks.marginLeft=ki(n.reliableMarginLeft,function(a,f){if(f)return(parseFloat(on(a,"marginLeft"))||a.getBoundingClientRect().left-Ji(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),s.each({margin:"",padding:"",border:"Width"},function(a,f){s.cssHooks[a+f]={expand:function(g){for(var j=0,R={},$=typeof g=="string"?g.split(" "):[g];j<4;j++)R[a+nt[j]+f]=$[j]||$[j-2]||$[0];return R}},a!=="margin"&&(s.cssHooks[a+f].set=gr)}),s.fn.extend({css:function(a,f){return ut(this,function(g,j,R){var $,Q,Ae={},Te=0;if(Array.isArray(j)){for($=hr(g),Q=j.length;Te1)}});function wi(a,f,g,j,R){return new wi.prototype.init(a,f,g,j,R)}s.Tween=wi,wi.prototype={constructor:wi,init:function(a,f,g,j,R,$){this.elem=a,this.prop=g,this.easing=R||s.easing._default,this.options=f,this.start=this.now=this.cur(),this.end=j,this.unit=$||(s.cssNumber[g]?"":"px")},cur:function(){var a=wi.propHooks[this.prop];return a&&a.get?a.get(this):wi.propHooks._default.get(this)},run:function(a){var f,g=wi.propHooks[this.prop];return this.options.duration?this.pos=f=s.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=f=a,this.now=(this.end-this.start)*f+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),g&&g.set?g.set(this):wi.propHooks._default.set(this),this}},wi.prototype.init.prototype=wi.prototype,wi.propHooks={_default:{get:function(a){var f;return a.elem.nodeType!==1||a.elem[a.prop]!=null&&a.elem.style[a.prop]==null?a.elem[a.prop]:(f=s.css(a.elem,a.prop,""),!f||f==="auto"?0:f)},set:function(a){s.fx.step[a.prop]?s.fx.step[a.prop](a):a.elem.nodeType===1&&(s.cssHooks[a.prop]||a.elem.style[jr(a.prop)]!=null)?s.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},wi.propHooks.scrollTop=wi.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},s.easing={linear:function(a){return a},swing:function(a){return .5-Math.cos(a*Math.PI)/2},_default:"swing"},s.fx=wi.prototype.init,s.fx.step={};var Xn,en,On=/^(?:toggle|show|hide)$/,Tn=/queueHooks$/;function cr(){en&&(le.hidden===!1&&m.requestAnimationFrame?m.requestAnimationFrame(cr):m.setTimeout(cr,s.fx.interval),s.fx.tick())}function xr(){return m.setTimeout(function(){Xn=void 0}),Xn=Date.now()}function ln(a,f){var g,j=0,R={height:a};for(f=f?1:0;j<4;j+=2-f)g=nt[j],R["margin"+g]=R["padding"+g]=a;return f&&(R.opacity=R.width=a),R}function ii(a,f,g){for(var j,R=(mn.tweeners[f]||[]).concat(mn.tweeners["*"]),$=0,Q=R.length;$1)},removeAttr:function(a){return this.each(function(){s.removeAttr(this,a)})}}),s.extend({attr:function(a,f,g){var j,R,$=a.nodeType;if(!($===3||$===8||$===2)){if(typeof a.getAttribute=="undefined")return s.prop(a,f,g);if(($!==1||!s.isXMLDoc(a))&&(R=s.attrHooks[f.toLowerCase()]||(s.expr.match.bool.test(f)?ra:void 0)),g!==void 0){if(g===null){s.removeAttr(a,f);return}return R&&"set"in R&&(j=R.set(a,g,f))!==void 0?j:(a.setAttribute(f,g+""),g)}return R&&"get"in R&&(j=R.get(a,f))!==null?j:(j=s.find.attr(a,f),j==null?void 0:j)}},attrHooks:{type:{set:function(a,f){if(!n.radioValue&&f==="radio"&&qe(a,"input")){var g=a.value;return a.setAttribute("type",f),g&&(a.value=g),f}}}},removeAttr:function(a,f){var g,j=0,R=f&&f.match(T);if(R&&a.nodeType===1)for(;g=R[j++];)a.removeAttribute(g)}}),ra={set:function(a,f,g){return f===!1?s.removeAttr(a,g):a.setAttribute(g,g),g}},s.each(s.expr.match.bool.source.match(/\w+/g),function(a,f){var g=Oi[f]||s.find.attr;Oi[f]=function(j,R,$){var Q,Ae,Te=R.toLowerCase();return $||(Ae=Oi[Te],Oi[Te]=Q,Q=g(j,R,$)!=null?Te:null,Oi[Te]=Ae),Q}});var Qn=/^(?:input|select|textarea|button)$/i,An=/^(?:a|area)$/i;s.fn.extend({prop:function(a,f){return ut(this,s.prop,a,f,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[s.propFix[a]||a]})}}),s.extend({prop:function(a,f,g){var j,R,$=a.nodeType;if(!($===3||$===8||$===2))return($!==1||!s.isXMLDoc(a))&&(f=s.propFix[f]||f,R=s.propHooks[f]),g!==void 0?R&&"set"in R&&(j=R.set(a,g,f))!==void 0?j:a[f]=g:R&&"get"in R&&(j=R.get(a,f))!==null?j:a[f]},propHooks:{tabIndex:{get:function(a){var f=s.find.attr(a,"tabindex");return f?parseInt(f,10):Qn.test(a.nodeName)||An.test(a.nodeName)&&a.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),n.optSelected||(s.propHooks.selected={get:function(a){var f=a.parentNode;return f&&f.parentNode&&f.parentNode.selectedIndex,null},set:function(a){var f=a.parentNode;f&&(f.selectedIndex,f.parentNode&&f.parentNode.selectedIndex)}}),s.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){s.propFix[this.toLowerCase()]=this});function cn(a){var f=a.match(T)||[];return f.join(" ")}function ur(a){return a.getAttribute&&a.getAttribute("class")||""}function Un(a){return Array.isArray(a)?a:typeof a=="string"?a.match(T)||[]:[]}s.fn.extend({addClass:function(a){var f,g,j,R,$,Q,Ae,Te=0;if(I(a))return this.each(function(Ie){s(this).addClass(a.call(this,Ie,ur(this)))});if(f=Un(a),f.length){for(;g=this[Te++];)if(R=ur(g),j=g.nodeType===1&&" "+cn(R)+" ",j){for(Q=0;$=f[Q++];)j.indexOf(" "+$+" ")<0&&(j+=$+" ");Ae=cn(j),R!==Ae&&g.setAttribute("class",Ae)}}return this},removeClass:function(a){var f,g,j,R,$,Q,Ae,Te=0;if(I(a))return this.each(function(Ie){s(this).removeClass(a.call(this,Ie,ur(this)))});if(!arguments.length)return this.attr("class","");if(f=Un(a),f.length){for(;g=this[Te++];)if(R=ur(g),j=g.nodeType===1&&" "+cn(R)+" ",j){for(Q=0;$=f[Q++];)for(;j.indexOf(" "+$+" ")>-1;)j=j.replace(" "+$+" "," ");Ae=cn(j),R!==Ae&&g.setAttribute("class",Ae)}}return this},toggleClass:function(a,f){var g=typeof a,j=g==="string"||Array.isArray(a);return typeof f=="boolean"&&j?f?this.addClass(a):this.removeClass(a):I(a)?this.each(function(R){s(this).toggleClass(a.call(this,R,ur(this),f),f)}):this.each(function(){var R,$,Q,Ae;if(j)for($=0,Q=s(this),Ae=Un(a);R=Ae[$++];)Q.hasClass(R)?Q.removeClass(R):Q.addClass(R);else(a===void 0||g==="boolean")&&(R=ur(this),R&&jt.set(this,"__className__",R),this.setAttribute&&this.setAttribute("class",R||a===!1?"":jt.get(this,"__className__")||""))})},hasClass:function(a){var f,g,j=0;for(f=" "+a+" ";g=this[j++];)if(g.nodeType===1&&(" "+cn(ur(g))+" ").indexOf(f)>-1)return!0;return!1}});var ga=/\r/g;s.fn.extend({val:function(a){var f,g,j,R=this[0];return arguments.length?(j=I(a),this.each(function($){var Q;this.nodeType===1&&(j?Q=a.call(this,$,s(this).val()):Q=a,Q==null?Q="":typeof Q=="number"?Q+="":Array.isArray(Q)&&(Q=s.map(Q,function(Ae){return Ae==null?"":Ae+""})),f=s.valHooks[this.type]||s.valHooks[this.nodeName.toLowerCase()],(!f||!("set"in f)||f.set(this,Q,"value")===void 0)&&(this.value=Q))})):R?(f=s.valHooks[R.type]||s.valHooks[R.nodeName.toLowerCase()],f&&"get"in f&&(g=f.get(R,"value"))!==void 0?g:(g=R.value,typeof g=="string"?g.replace(ga,""):g==null?"":g)):void 0}}),s.extend({valHooks:{option:{get:function(a){var f=s.find.attr(a,"value");return f!=null?f:cn(s.text(a))}},select:{get:function(a){var f,g,j,R=a.options,$=a.selectedIndex,Q=a.type==="select-one",Ae=Q?null:[],Te=Q?$+1:R.length;for($<0?j=Te:j=Q?$:0;j-1)&&(g=!0);return g||(a.selectedIndex=-1),$}}}}),s.each(["radio","checkbox"],function(){s.valHooks[this]={set:function(a,f){if(Array.isArray(f))return a.checked=s.inArray(s(a).val(),f)>-1}},n.checkOn||(s.valHooks[this].get=function(a){return a.getAttribute("value")===null?"on":a.value})}),n.focusin="onfocusin"in m;var Jn=/^(?:focusinfocus|focusoutblur)$/,un=function(a){a.stopPropagation()};s.extend(s.event,{trigger:function(a,f,g,j){var R,$,Q,Ae,Te,Ie,Xe,st,Ge=[g||le],it=z.call(a,"type")?a.type:a,Tt=z.call(a,"namespace")?a.namespace.split("."):[];if($=st=Q=g=g||le,!(g.nodeType===3||g.nodeType===8)&&!Jn.test(it+s.event.triggered)&&(it.indexOf(".")>-1&&(Tt=it.split("."),it=Tt.shift(),Tt.sort()),Te=it.indexOf(":")<0&&"on"+it,a=a[s.expando]?a:new s.Event(it,typeof a=="object"&&a),a.isTrigger=j?2:3,a.namespace=Tt.join("."),a.rnamespace=a.namespace?new RegExp("(^|\\.)"+Tt.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,a.result=void 0,a.target||(a.target=g),f=f==null?[a]:s.makeArray(f,[a]),Xe=s.event.special[it]||{},!(!j&&Xe.trigger&&Xe.trigger.apply(g,f)===!1))){if(!j&&!Xe.noBubble&&!ce(g)){for(Ae=Xe.delegateType||it,Jn.test(Ae+it)||($=$.parentNode);$;$=$.parentNode)Ge.push($),Q=$;Q===(g.ownerDocument||le)&&Ge.push(Q.defaultView||Q.parentWindow||m)}for(R=0;($=Ge[R++])&&!a.isPropagationStopped();)st=$,a.type=R>1?Ae:Xe.bindType||it,Ie=(jt.get($,"events")||Object.create(null))[a.type]&&jt.get($,"handle"),Ie&&Ie.apply($,f),Ie=Te&&$[Te],Ie&&Ie.apply&&qt($)&&(a.result=Ie.apply($,f),a.result===!1&&a.preventDefault());return a.type=it,!j&&!a.isDefaultPrevented()&&(!Xe._default||Xe._default.apply(Ge.pop(),f)===!1)&&qt(g)&&Te&&I(g[it])&&!ce(g)&&(Q=g[Te],Q&&(g[Te]=null),s.event.triggered=it,a.isPropagationStopped()&&st.addEventListener(it,un),g[it](),a.isPropagationStopped()&&st.removeEventListener(it,un),s.event.triggered=void 0,Q&&(g[Te]=Q)),a.result}},simulate:function(a,f,g){var j=s.extend(new s.Event,g,{type:a,isSimulated:!0});s.event.trigger(j,null,f)}}),s.fn.extend({trigger:function(a,f){return this.each(function(){s.event.trigger(a,f,this)})},triggerHandler:function(a,f){var g=this[0];if(g)return s.event.trigger(a,f,g,!0)}}),n.focusin||s.each({focus:"focusin",blur:"focusout"},function(a,f){var g=function(j){s.event.simulate(f,j.target,s.event.fix(j))};s.event.special[f]={setup:function(){var j=this.ownerDocument||this.document||this,R=jt.access(j,f);R||j.addEventListener(a,g,!0),jt.access(j,f,(R||0)+1)},teardown:function(){var j=this.ownerDocument||this.document||this,R=jt.access(j,f)-1;R?jt.access(j,f,R):(j.removeEventListener(a,g,!0),jt.remove(j,f))}}});var En=m.location,y={guid:Date.now()},M=/\?/;s.parseXML=function(a){var f,g;if(!a||typeof a!="string")return null;try{f=new m.DOMParser().parseFromString(a,"text/xml")}catch(j){}return g=f&&f.getElementsByTagName("parsererror")[0],(!f||g)&&s.error("Invalid XML: "+(g?s.map(g.childNodes,function(j){return j.textContent}).join(` +`):a)),f};var re=/\[\]$/,me=/\r?\n/g,Fe=/^(?:submit|button|image|reset|file)$/i,Ve=/^(?:input|select|textarea|keygen)/i;function Ze(a,f,g,j){var R;if(Array.isArray(f))s.each(f,function($,Q){g||re.test(a)?j(a,Q):Ze(a+"["+(typeof Q=="object"&&Q!=null?$:"")+"]",Q,g,j)});else if(!g&&je(f)==="object")for(R in f)Ze(a+"["+R+"]",f[R],g,j);else j(a,f)}s.param=function(a,f){var g,j=[],R=function($,Q){var Ae=I(Q)?Q():Q;j[j.length]=encodeURIComponent($)+"="+encodeURIComponent(Ae==null?"":Ae)};if(a==null)return"";if(Array.isArray(a)||a.jquery&&!s.isPlainObject(a))s.each(a,function(){R(this.name,this.value)});else for(g in a)Ze(g,a[g],f,R);return j.join("&")},s.fn.extend({serialize:function(){return s.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=s.prop(this,"elements");return a?s.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!s(this).is(":disabled")&&Ve.test(this.nodeName)&&!Fe.test(a)&&(this.checked||!ft.test(a))}).map(function(a,f){var g=s(this).val();return g==null?null:Array.isArray(g)?s.map(g,function(j){return{name:f.name,value:j.replace(me,`\r +`)}}):{name:f.name,value:g.replace(me,`\r +`)}}).get()}});var rt=/%20/g,pt=/#.*$/,kt=/([?&])_=[^&]*/,$t=/^(.*?):[ \t]*([^\r\n]*)$/mg,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nt=/^(?:GET|HEAD)$/,Qt=/^\/\//,Ht={},Di={},Yi="*/".concat("*"),yn=le.createElement("a");yn.href=En.href;function Yt(a){return function(f,g){typeof f!="string"&&(g=f,f="*");var j,R=0,$=f.toLowerCase().match(T)||[];if(I(g))for(;j=$[R++];)j[0]==="+"?(j=j.slice(1)||"*",(a[j]=a[j]||[]).unshift(g)):(a[j]=a[j]||[]).push(g)}}function qi(a,f,g,j){var R={},$=a===Di;function Q(Ae){var Te;return R[Ae]=!0,s.each(a[Ae]||[],function(Ie,Xe){var st=Xe(f,g,j);if(typeof st=="string"&&!$&&!R[st])return f.dataTypes.unshift(st),Q(st),!1;if($)return!(Te=st)}),Te}return Q(f.dataTypes[0])||!R["*"]&&Q("*")}function Zn(a,f){var g,j,R=s.ajaxSettings.flatOptions||{};for(g in f)f[g]!==void 0&&((R[g]?a:j||(j={}))[g]=f[g]);return j&&s.extend(!0,a,j),a}function vr(a,f,g){for(var j,R,$,Q,Ae=a.contents,Te=a.dataTypes;Te[0]==="*";)Te.shift(),j===void 0&&(j=a.mimeType||f.getResponseHeader("Content-Type"));if(j){for(R in Ae)if(Ae[R]&&Ae[R].test(j)){Te.unshift(R);break}}if(Te[0]in g)$=Te[0];else{for(R in g){if(!Te[0]||a.converters[R+" "+Te[0]]){$=R;break}Q||(Q=R)}$=$||Q}if($)return $!==Te[0]&&Te.unshift($),g[$]}function aa(a,f,g,j){var R,$,Q,Ae,Te,Ie={},Xe=a.dataTypes.slice();if(Xe[1])for(Q in a.converters)Ie[Q.toLowerCase()]=a.converters[Q];for($=Xe.shift();$;)if(a.responseFields[$]&&(g[a.responseFields[$]]=f),!Te&&j&&a.dataFilter&&(f=a.dataFilter(f,a.dataType)),Te=$,$=Xe.shift(),$){if($==="*")$=Te;else if(Te!=="*"&&Te!==$){if(Q=Ie[Te+" "+$]||Ie["* "+$],!Q){for(R in Ie)if(Ae=R.split(" "),Ae[1]===$&&(Q=Ie[Te+" "+Ae[0]]||Ie["* "+Ae[0]],Q)){Q===!0?Q=Ie[R]:Ie[R]!==!0&&($=Ae[0],Xe.unshift(Ae[1]));break}}if(Q!==!0)if(Q&&a.throws)f=Q(f);else try{f=Q(f)}catch(st){return{state:"parsererror",error:Q?st:"No conversion from "+Te+" to "+$}}}}return{state:"success",data:f}}s.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:En.href,type:"GET",isLocal:Pt.test(En.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Yi,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":s.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,f){return f?Zn(Zn(a,s.ajaxSettings),f):Zn(s.ajaxSettings,a)},ajaxPrefilter:Yt(Ht),ajaxTransport:Yt(Di),ajax:function(a,f){typeof a=="object"&&(f=a,a=void 0),f=f||{};var g,j,R,$,Q,Ae,Te,Ie,Xe,st,Ge=s.ajaxSetup({},f),it=Ge.context||Ge,Tt=Ge.context&&(it.nodeType||it.jquery)?s(it):s.event,Lt=s.Deferred(),Ft=s.Callbacks("once memory"),Ri=Ge.statusCode||{},_i={},Ni={},ei="canceled",Gt={readyState:0,getResponseHeader:function(Zt){var vi;if(Te){if(!$)for($={};vi=$t.exec(R);)$[vi[1].toLowerCase()+" "]=($[vi[1].toLowerCase()+" "]||[]).concat(vi[2]);vi=$[Zt.toLowerCase()+" "]}return vi==null?null:vi.join(", ")},getAllResponseHeaders:function(){return Te?R:null},setRequestHeader:function(Zt,vi){return Te==null&&(Zt=Ni[Zt.toLowerCase()]=Ni[Zt.toLowerCase()]||Zt,_i[Zt]=vi),this},overrideMimeType:function(Zt){return Te==null&&(Ge.mimeType=Zt),this},statusCode:function(Zt){var vi;if(Zt)if(Te)Gt.always(Zt[Gt.status]);else for(vi in Zt)Ri[vi]=[Ri[vi],Zt[vi]];return this},abort:function(Zt){var vi=Zt||ei;return g&&g.abort(vi),nn(0,vi),this}};if(Lt.promise(Gt),Ge.url=((a||Ge.url||En.href)+"").replace(Qt,En.protocol+"//"),Ge.type=f.method||f.type||Ge.method||Ge.type,Ge.dataTypes=(Ge.dataType||"*").toLowerCase().match(T)||[""],Ge.crossDomain==null){Ae=le.createElement("a");try{Ae.href=Ge.url,Ae.href=Ae.href,Ge.crossDomain=yn.protocol+"//"+yn.host!=Ae.protocol+"//"+Ae.host}catch(Zt){Ge.crossDomain=!0}}if(Ge.data&&Ge.processData&&typeof Ge.data!="string"&&(Ge.data=s.param(Ge.data,Ge.traditional)),qi(Ht,Ge,f,Gt),Te)return Gt;Ie=s.event&&Ge.global,Ie&&s.active++===0&&s.event.trigger("ajaxStart"),Ge.type=Ge.type.toUpperCase(),Ge.hasContent=!Nt.test(Ge.type),j=Ge.url.replace(pt,""),Ge.hasContent?Ge.data&&Ge.processData&&(Ge.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(Ge.data=Ge.data.replace(rt,"+")):(st=Ge.url.slice(j.length),Ge.data&&(Ge.processData||typeof Ge.data=="string")&&(j+=(M.test(j)?"&":"?")+Ge.data,delete Ge.data),Ge.cache===!1&&(j=j.replace(kt,"$1"),st=(M.test(j)?"&":"?")+"_="+y.guid+++st),Ge.url=j+st),Ge.ifModified&&(s.lastModified[j]&&Gt.setRequestHeader("If-Modified-Since",s.lastModified[j]),s.etag[j]&&Gt.setRequestHeader("If-None-Match",s.etag[j])),(Ge.data&&Ge.hasContent&&Ge.contentType!==!1||f.contentType)&&Gt.setRequestHeader("Content-Type",Ge.contentType),Gt.setRequestHeader("Accept",Ge.dataTypes[0]&&Ge.accepts[Ge.dataTypes[0]]?Ge.accepts[Ge.dataTypes[0]]+(Ge.dataTypes[0]!=="*"?", "+Yi+"; q=0.01":""):Ge.accepts["*"]);for(Xe in Ge.headers)Gt.setRequestHeader(Xe,Ge.headers[Xe]);if(Ge.beforeSend&&(Ge.beforeSend.call(it,Gt,Ge)===!1||Te))return Gt.abort();if(ei="abort",Ft.add(Ge.complete),Gt.done(Ge.success),Gt.fail(Ge.error),g=qi(Di,Ge,f,Gt),!g)nn(-1,"No Transport");else{if(Gt.readyState=1,Ie&&Tt.trigger("ajaxSend",[Gt,Ge]),Te)return Gt;Ge.async&&Ge.timeout>0&&(Q=m.setTimeout(function(){Gt.abort("timeout")},Ge.timeout));try{Te=!1,g.send(_i,nn)}catch(Zt){if(Te)throw Zt;nn(-1,Zt)}}function nn(Zt,vi,Ar,di){var Hi,er,fr,fn,wn,rn=vi;Te||(Te=!0,Q&&m.clearTimeout(Q),g=void 0,R=di||"",Gt.readyState=Zt>0?4:0,Hi=Zt>=200&&Zt<300||Zt===304,Ar&&(fn=vr(Ge,Gt,Ar)),!Hi&&s.inArray("script",Ge.dataTypes)>-1&&s.inArray("json",Ge.dataTypes)<0&&(Ge.converters["text script"]=function(){}),fn=aa(Ge,fn,Gt,Hi),Hi?(Ge.ifModified&&(wn=Gt.getResponseHeader("Last-Modified"),wn&&(s.lastModified[j]=wn),wn=Gt.getResponseHeader("etag"),wn&&(s.etag[j]=wn)),Zt===204||Ge.type==="HEAD"?rn="nocontent":Zt===304?rn="notmodified":(rn=fn.state,er=fn.data,fr=fn.error,Hi=!fr)):(fr=rn,(Zt||!rn)&&(rn="error",Zt<0&&(Zt=0))),Gt.status=Zt,Gt.statusText=(vi||rn)+"",Hi?Lt.resolveWith(it,[er,rn,Gt]):Lt.rejectWith(it,[Gt,rn,fr]),Gt.statusCode(Ri),Ri=void 0,Ie&&Tt.trigger(Hi?"ajaxSuccess":"ajaxError",[Gt,Ge,Hi?er:fr]),Ft.fireWith(it,[Gt,rn]),Ie&&(Tt.trigger("ajaxComplete",[Gt,Ge]),--s.active||s.event.trigger("ajaxStop")))}return Gt},getJSON:function(a,f,g){return s.get(a,f,g,"json")},getScript:function(a,f){return s.get(a,void 0,f,"script")}}),s.each(["get","post"],function(a,f){s[f]=function(g,j,R,$){return I(j)&&($=$||R,R=j,j=void 0),s.ajax(s.extend({url:g,type:f,dataType:$,data:j,success:R},s.isPlainObject(g)&&g))}}),s.ajaxPrefilter(function(a){var f;for(f in a.headers)f.toLowerCase()==="content-type"&&(a.contentType=a.headers[f]||"")}),s._evalUrl=function(a,f,g){return s.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(j){s.globalEval(j,f,g)}})},s.fn.extend({wrapAll:function(a){var f;return this[0]&&(I(a)&&(a=a.call(this[0])),f=s(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&f.insertBefore(this[0]),f.map(function(){for(var g=this;g.firstElementChild;)g=g.firstElementChild;return g}).append(this)),this},wrapInner:function(a){return I(a)?this.each(function(f){s(this).wrapInner(a.call(this,f))}):this.each(function(){var f=s(this),g=f.contents();g.length?g.wrapAll(a):f.append(a)})},wrap:function(a){var f=I(a);return this.each(function(g){s(this).wrapAll(f?a.call(this,g):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){s(this).replaceWith(this.childNodes)}),this}}),s.expr.pseudos.hidden=function(a){return!s.expr.pseudos.visible(a)},s.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},s.ajaxSettings.xhr=function(){try{return new m.XMLHttpRequest}catch(a){}};var Cr={0:200,1223:204},tn=s.ajaxSettings.xhr();n.cors=!!tn&&"withCredentials"in tn,n.ajax=tn=!!tn,s.ajaxTransport(function(a){var f,g;if(n.cors||tn&&!a.crossDomain)return{send:function(j,R){var $,Q=a.xhr();if(Q.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for($ in a.xhrFields)Q[$]=a.xhrFields[$];a.mimeType&&Q.overrideMimeType&&Q.overrideMimeType(a.mimeType),!a.crossDomain&&!j["X-Requested-With"]&&(j["X-Requested-With"]="XMLHttpRequest");for($ in j)Q.setRequestHeader($,j[$]);f=function(Ae){return function(){f&&(f=g=Q.onload=Q.onerror=Q.onabort=Q.ontimeout=Q.onreadystatechange=null,Ae==="abort"?Q.abort():Ae==="error"?typeof Q.status!="number"?R(0,"error"):R(Q.status,Q.statusText):R(Cr[Q.status]||Q.status,Q.statusText,(Q.responseType||"text")!=="text"||typeof Q.responseText!="string"?{binary:Q.response}:{text:Q.responseText},Q.getAllResponseHeaders()))}},Q.onload=f(),g=Q.onerror=Q.ontimeout=f("error"),Q.onabort!==void 0?Q.onabort=g:Q.onreadystatechange=function(){Q.readyState===4&&m.setTimeout(function(){f&&g()})},f=f("abort");try{Q.send(a.hasContent&&a.data||null)}catch(Ae){if(f)throw Ae}},abort:function(){f&&f()}}}),s.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),s.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return s.globalEval(a),a}}}),s.ajaxPrefilter("script",function(a){a.cache===void 0&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),s.ajaxTransport("script",function(a){if(a.crossDomain||a.scriptAttrs){var f,g;return{send:function(j,R){f=s(" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Search · surfbrowser · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + + + +
              + Skip to content + + + + + + + + + + + +
              + +
              + + + + + + + +
              + + + + + + +
              + + + + + + + + + + +
              +
              + + + +
              +
              +
              +
              + + +
              + +
              + +
              + + + + + +
              +

              + States +

              + +
              + +
              + +
              + + +
              +

              + Languages +

              + + +
              + + +
              + +
              + + + + + +
              + Advanced search +
              + Cheat sheet + + +
              + +

              Search cheat sheet

              +
              + +
              +

              GitHub’s search supports a variety of different operations. Here’s a quick cheat sheet for some of the common searches.

              +

              For more information, visit our search help section.

              + +

              Basic search

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              This searchFinds repositories with…
              cat stars:>100Find cat repositories with greater than 100 stars.
              user:defunktGet all repositories from the user defunkt.
              tom location:"San Francisco, CA"Find all tom users in "San Francisco, CA".
              join extension:coffeeFind all instances of join in code with coffee extension.
              NOT catExcludes all results containing cat.
              + +
              + +

              Repository search + + + +

              +

              Repository search looks through the projects you have access to on GitHub. You can also filter the results:

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              This searchFinds repositories with…
              cat stars:>100Find cat repositories with greater than 100 stars.
              user:defunktGet all repositories from the user defunkt.
              pugs pushed:>2013-01-28Pugs repositories pushed to since Jan 28, 2013.
              node.js forks:<200Find all node.js repositories with less than 200 forks.
              jquery size:1024..4089Find jquery repositories between the sizes 1024 and 4089 kB.
              gitx fork:trueRepository search includes forks of gitx.
              gitx fork:onlyRepository search returns only forks of gitx.
              + +
              + +

              Code search + + + +

              +

              Code search looks through the files hosted on GitHub. You can also filter the results:

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              This searchFinds repositories with…
              install repo:charles/privaterepoFind all instances of install in code from the repository charles/privaterepo.
              shogun user:herokuFind references to shogun from all public heroku repositories.
              join extension:coffeeFind all instances of join in code with coffee extension.
              system size:>1000Find all instances of system in code of file size greater than 1000kbs.
              examples path:/docs/Find all examples in the path /docs/.
              replace fork:trueSearch replace in the source code of forks.
              + +
              + +

              Issue search + + + +

              +

              Issue search looks through issues and pull requests on GitHub. You can also filter the results:

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              This searchFinds issues…
              encoding user:herokuEncoding issues across the Heroku organization.
              cat is:openFind cat issues that are open.
              strange comments:>42Issues with more than 42 comments.
              hard label:bugHard issues labeled as a bug.
              author:mojomboAll issues authored by mojombo.
              mentions:tpopeAll issues mentioning tpope.
              assignee:rtomaykoAll issues assigned to rtomayko.
              exception created:>2012-12-31Created since the beginning of 2013.
              exception updated:<2013-01-01Last updated before 2013.
              + +
              + +

              User search + + + +

              +

              User search finds users with an account on GitHub. You can also filter the results:

              + + + + + + + + + + + + + + + + + + + + + + + + + +
              This searchFinds repositories with…
              fullname:"Linus Torvalds"Find users with the full name "Linus Torvalds".
              tom location:"San Francisco, CA"Find all tom users in "San Francisco, CA".
              chris followers:100..200Find all chris users with followers between 100 and 200.
              ryan repos:>10Find all ryan users with more than 10 repositories.
              +
              +
              + +
              +
              +
              + +
              +
              + + + + +
              +

              + 3 issues + + +

              + +
              + + +
              +
              + +
              + + +
              + + +
              + +
              + + + + + + +
              +
              + summercms + + opened + + Apr 9, 2020 +
              + + +
              +
              +
              + + +
              + +
              + + + + +

              ... ) | +| | | | +| | | | ++-----------------------------------+-----------------------------------+----------------------------+ +| surfbrowser ...

              + +
              + + enhancement + + + New Agent + + + Update Agent + +
              + +
              +
              + jaydiablo + + opened + + Jun 1, 2017 +
              + + + 2 + comments + + +
              + + browscap:master + + ← + + jaydiablo:issue-1446 + +
              +
              +
              +
              + +
              + +
              + +
              +
              + + +
              + + +
              +
              + + + + + + + + + + + + + + + + + + +
              + +
              + + diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/CFF3BF7E86835DACFE9498AC1ED130B8DA618419 b/home/.surf/cache/WebKitCache/Version 16/Blobs/CFF3BF7E86835DACFE9498AC1ED130B8DA618419 new file mode 100644 index 0000000..42f2009 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/CFF3BF7E86835DACFE9498AC1ED130B8DA618419 @@ -0,0 +1,199 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_primer_view-components_app_components_primer_primer_js-node_modules_gith-6a1af4"],{48030(a,b,c){c.d(b,{N:()=>f});let d={"outside-top":["outside-bottom","outside-right","outside-left","outside-bottom"],"outside-bottom":["outside-top","outside-right","outside-left","outside-bottom"],"outside-left":["outside-right","outside-bottom","outside-top","outside-bottom"],"outside-right":["outside-left","outside-bottom","outside-top","outside-bottom"]},e={start:["end","center"],end:["start","center"],center:["end","start"]};function f(a,b,c={}){let d=g(a),e=h(d),f=getComputedStyle(d),i=d.getBoundingClientRect(),[l,m]=[f.borderTopWidth,f.borderLeftWidth].map(a=>parseInt(a,10)||0),n={top:i.top+l,left:i.left+m};return k(e,n,a.getBoundingClientRect(),b instanceof Element?b.getBoundingClientRect():b,j(c))}function g(a){let b=a.parentNode;for(;null!==b;){if(b instanceof HTMLElement&&"static"!==getComputedStyle(b).position)return b;b=b.parentNode}return document.body}function h(a){let b=a;for(;null!==b&&b!==document.body;){let c=getComputedStyle(b);if("visible"!==c.overflow)break;b=b.parentNode}let d=b!==document.body&&b instanceof HTMLElement?b:document.body,e=d.getBoundingClientRect(),f=getComputedStyle(d),[g,h,i,j]=[f.borderTopWidth,f.borderLeftWidth,f.borderRightWidth,f.borderBottomWidth].map(a=>parseInt(a,10)||0);return{top:e.top+g,left:e.left+h,width:e.width-i-h,height:Math.max(e.height-g-j,d===document.body?window.innerHeight:-1/0)}}let i={side:"outside-bottom",align:"start",anchorOffset:4,alignmentOffset:4,allowOutOfBounds:!1};function j(a={}){var b,c,d,e,f;let g=null!==(b=a.side)&& void 0!==b?b:i.side,h=null!==(c=a.align)&& void 0!==c?c:i.align;return{side:g,align:h,anchorOffset:null!==(d=a.anchorOffset)&& void 0!==d?d:"inside-center"===g?0:i.anchorOffset,alignmentOffset:null!==(e=a.alignmentOffset)&& void 0!==e?e:"center"!==h&&g.startsWith("inside")?i.alignmentOffset:0,allowOutOfBounds:null!==(f=a.allowOutOfBounds)&& void 0!==f?f:i.allowOutOfBounds}}function k(a,b,c,f,{side:g,align:h,allowOutOfBounds:i,anchorOffset:j,alignmentOffset:k}){let o={top:a.top-b.top,left:a.left-b.left,width:a.width,height:a.height},p=l(c,f,g,h,j,k),q=g,r=h;if(p.top-=b.top,p.left-=b.left,!i){let s=d[g],t=0;if(s){let u=g;for(;ta.width+o.left&&(p.left=a.width+o.left-c.width),s&&ta.height+o.top&&(p.top=a.height+o.top-c.height)}return Object.assign(Object.assign({},p),{anchorSide:q,anchorAlign:r})}function l(a,b,c,d,e,f){let g=b.left+b.width,h=b.top+b.height,i=-1,j=-1;return"outside-top"===c?i=b.top-e-a.height:"outside-bottom"===c?i=h+e:"outside-left"===c?j=b.left-e-a.width:"outside-right"===c&&(j=g+e),("outside-top"===c||"outside-bottom"===c)&&(j="start"===d?b.left+f:"center"===d?b.left-(a.width-b.width)/2+f:g-a.width-f),("outside-left"===c||"outside-right"===c)&&(i="start"===d?b.top+f:"center"===d?b.top-(a.height-b.height)/2+f:h-a.height-f),"inside-top"===c?i=b.top+e:"inside-bottom"===c?i=h-e-a.height:"inside-left"===c?j=b.left+e:"inside-right"===c?j=g-e-a.width:"inside-center"===c&&(j=(g+b.left)/2-a.width/2+e),"inside-top"===c||"inside-bottom"===c?j="start"===d?b.left+f:"center"===d?b.left-(a.width-b.width)/2+f:g-a.width-f:("inside-left"===c||"inside-right"===c||"inside-center"===c)&&(i="start"===d?b.top+f:"center"===d?b.top-(a.height-b.height)/2+f:h-a.height-f),{top:i,left:j}}function m(a,b,c,d){return"outside-top"===a||"outside-bottom"===a?b.topc.height+c.top:b.leftc.width+c.left}function n(a,b,c,d){return"end"===a?b.leftc.left+c.width||b.leftg});var d=c(78160);(0,c(44542).O)();let e=[],f;function g(a,b,c){let h=new AbortController,i=null!=c?c:h.signal;a.setAttribute("data-focus-trap","active");let j=document.createElement("span");j.setAttribute("class","sentinel"),j.setAttribute("tabindex","0"),j.setAttribute("aria-hidden","true"),j.onfocus=()=>{let b=(0,d.O)(a,!0);null==b||b.focus()};let k=document.createElement("span");k.setAttribute("class","sentinel"),k.setAttribute("tabindex","0"),k.setAttribute("aria-hidden","true"),k.onfocus=()=>{let b=(0,d.O)(a);null==b||b.focus()},a.prepend(j),a.append(k);let l;function m(c){if(c instanceof HTMLElement&&document.contains(a)){if(a.contains(c)){l=c;return}if(l&&(0,d.Wq)(l)&&a.contains(l)){l.focus();return}if(b&&a.contains(b)){b.focus();return}{let e=(0,d.O)(a);null==e||e.focus();return}}}let n=function(a){let b=new AbortController;return a.addEventListener("abort",()=>{b.abort()}),b}(i);if(f){let o=f;f.container.setAttribute("data-focus-trap","suspended"),f.controller.abort(),e.push(o)}n.signal.addEventListener("abort",()=>{f=void 0}),i.addEventListener("abort",()=>{a.removeAttribute("data-focus-trap");let b=a.getElementsByClassName("sentinel");for(;b.length>0;)b[0].remove();let c=e.findIndex(b=>b.container===a);c>=0&&e.splice(c,1),function(){let a=e.pop();a&&g(a.container,a.initialFocus,a.originalSignal)}()}),document.addEventListener("focus",a=>{m(a.target)},{signal:n.signal,capture:!0}),m(document.activeElement),f={container:a,controller:n,initialFocus:b,originalSignal:i};let p=e.findIndex(b=>b.container===a);if(p>=0&&e.splice(p,1),!c)return h}},44542(a,b,c){c.d(b,{O:()=>h});let d=!1;function e(){}try{let f=Object.create({},{signal:{get(){d=!0}}});window.addEventListener("test",e,f),window.removeEventListener("test",e,f)}catch(g){}function h(){d||(!function(){if("undefined"==typeof window)return;let a=EventTarget.prototype.addEventListener;EventTarget.prototype.addEventListener=function(b,c,d){return"object"==typeof d&&"signal"in d&&d.signal instanceof AbortSignal&&a.call(d.signal,"abort",()=>{this.removeEventListener(b,c,d)}),a.call(this,b,c,d)}}(),d=!0)}},78160(a,b,c){function*d(a,b={}){var c,d;let e=null!==(c=b.strict)&& void 0!==c&&c,h=null!==(d=b.onlyTabbable)&& void 0!==d&&d?g:f,i=document.createTreeWalker(a,NodeFilter.SHOW_ELEMENT,{acceptNode:a=>a instanceof HTMLElement&&h(a,e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}),j=null;if(!b.reverse&&h(a,e)&&(yield a),b.reverse){let k=i.lastChild();for(;k;)j=k,k=i.lastChild()}else j=i.firstChild();for(;j instanceof HTMLElement;)yield j,j=b.reverse?i.previousNode():i.nextNode();b.reverse&&h(a,e)&&(yield a)}function e(a,b=!1){return d(a,{reverse:b,strict:!0,onlyTabbable:!0}).next().value}function f(a,b=!1){let c=["BUTTON","INPUT","SELECT","TEXTAREA","OPTGROUP","OPTION","FIELDSET"].includes(a.tagName)&&a.disabled,d=a.hidden,e=a instanceof HTMLInputElement&&"hidden"===a.type,f=a.classList.contains("sentinel");if(c||d||e||f)return!1;if(b){let g=0===a.offsetWidth||0===a.offsetHeight,h=["hidden","collapse"].includes(getComputedStyle(a).visibility),i=0===a.getClientRects().length;if(g||h||i)return!1}return null!=a.getAttribute("tabindex")||(!(a instanceof HTMLAnchorElement)||null!=a.getAttribute("href"))&& -1!==a.tabIndex}function g(a,b=!1){return f(a,b)&&"-1"!==a.getAttribute("tabindex")}c.d(b,{O:()=>e,Wq:()=>g,hT:()=>d})},28585(a,b,c){c.d(b,{F:()=>ModalDialogElement});var d,e,f,g,h=c(48858),i=c(78160),j=function(a,b,c,d){if("a"===c&&!d)throw TypeError("Private accessor was defined without a getter");if("function"==typeof b?a!==b||!d:!b.has(a))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===c?d:"a"===c?d.call(a):d?d.value:b.get(a)},k=function(a,b,c,d,e){if("m"===d)throw TypeError("Private method is not writable");if("a"===d&&!e)throw TypeError("Private accessor was defined without a setter");if("function"==typeof b?a!==b||!e:!b.has(a))throw TypeError("Cannot write private member to an object whose class did not declare it");return"a"===d?e.call(a,c):e?e.value=c:b.set(a,c),c};function l(a){document.activeElement!==a&&(null==a||a.focus())}let m=[];function n(a){let b=a.target,c=null==b?void 0:b.closest("button"),d=null==c?void 0:c.getAttribute("data-show-dialog-id");if(c&&d){a.stopPropagation();let e=document.getElementById(d);if(e instanceof ModalDialogElement){e.openButton=c,e.show();return}}let f=m[m.length-1];if(!f)return;let g=!b.closest(`#${f.getAttribute("id")}`);if(!c){g&&(m.pop(),f.close());return}(d=c.getAttribute("data-close-dialog-id"))===f.id&&(m.pop(),f.close()),(d=c.getAttribute("data-submit-dialog-id"))===f.id&&(m.pop(),f.close(!0))}class ModalDialogElement extends HTMLElement{constructor(){super(...arguments),d.add(this),e.set(this,new AbortController)}get open(){return this.hasAttribute("open")}set open(a){var b,c,g,n;if(a){if(this.open)return;this.setAttribute("open",""),null===(b=j(this,d,"a",f))|| void 0===b||b.classList.remove("Overlay--hidden"),document.body.style.overflow="hidden",j(this,e,"f").signal.aborted&&k(this,e,new AbortController,"f"),(0,h.e)(this,void 0,j(this,e,"f").signal),m.push(this)}else{if(!this.open)return;this.removeAttribute("open"),null===(c=j(this,d,"a",f))|| void 0===c||c.classList.add("Overlay--hidden"),document.body.style.overflow="initial",j(this,e,"f").abort();let o=(null===(g=this.openButton)|| void 0===g?void 0:g.closest("details"))||(null===(n=this.openButton)|| void 0===n?void 0:n.closest("action-menu"));o?l((0,i.O)(o)):l(this.openButton),this.openButton=null}}get showButtons(){return document.querySelectorAll(`button[data-show-dialog-id='${this.id}']`)}connectedCallback(){this.hasAttribute("role")||this.setAttribute("role","dialog"),document.addEventListener("click",n),this.addEventListener("keydown",a=>j(this,d,"m",g).call(this,a))}show(){this.open=!0}close(a=!1){if(!1===this.open)return;let b=a?"close":"cancel",c=new Event(b);this.dispatchEvent(c),this.open=!1}}e=new WeakMap,d=new WeakSet,f=function(){var a;return(null===(a=this.parentElement)|| void 0===a?void 0:a.hasAttribute("data-modal-dialog-overlay"))?this.parentElement:null},g=function(a){a instanceof KeyboardEvent&& !a.isComposing&&"Escape"===a.key&&this.open&&(this.close(),a.preventDefault(),a.stopPropagation())},window.customElements.get("modal-dialog")||(window.ModalDialogElement=ModalDialogElement,window.customElements.define("modal-dialog",ModalDialogElement))},62467(a,b,c){c(11095);let d=new WeakMap,e=new WeakMap,f=new WeakMap;function g(a){let b=a.currentTarget;if(!(b instanceof ImageCropElement))return;let{box:c,image:d}=f.get(b)||{};if(!c||!d)return;let g=0,h=0;if(a instanceof KeyboardEvent)"ArrowUp"===a.key?h=-1:"ArrowDown"===a.key?h=1:"ArrowLeft"===a.key?g=-1:"ArrowRight"===a.key&&(g=1);else if(e.has(b)&&a instanceof MouseEvent){let i=e.get(b);g=a.pageX-i.dragStartX,h=a.pageY-i.dragStartY}else if(e.has(b)&&a instanceof TouchEvent){let{pageX:j,pageY:k}=a.changedTouches[0],{dragStartX:l,dragStartY:m}=e.get(b);g=j-l,h=k-m}if(0!==g||0!==h){let o=Math.min(Math.max(0,c.offsetLeft+g),d.width-c.offsetWidth),p=Math.min(Math.max(0,c.offsetTop+h),d.height-c.offsetHeight);c.style.left=`${o}px`,c.style.top=`${p}px`,n(b,{x:o,y:p,width:c.offsetWidth,height:c.offsetHeight})}if(a instanceof MouseEvent)e.set(b,{dragStartX:a.pageX,dragStartY:a.pageY});else if(a instanceof TouchEvent){let{pageX:q,pageY:r}=a.changedTouches[0];e.set(b,{dragStartX:q,dragStartY:r})}}function h(a){let b=a.target;if(!(b instanceof HTMLElement))return;let c=i(b);if(!(c instanceof ImageCropElement))return;let{box:e}=f.get(c)||{};if(!e)return;let g=c.getBoundingClientRect(),h,j,m;if(a instanceof KeyboardEvent){if("Escape"===a.key)return l(c);if("-"===a.key&&(m=-10),"="===a.key&&(m=10),!m)return;h=e.offsetWidth+m,j=e.offsetHeight+m,d.set(c,{startX:e.offsetLeft,startY:e.offsetTop})}else if(a instanceof MouseEvent){let n=d.get(c);if(!n)return;h=a.pageX-n.startX-g.left-window.pageXOffset,j=a.pageY-n.startY-g.top-window.pageYOffset}else if(a instanceof TouchEvent){let o=d.get(c);if(!o)return;h=a.changedTouches[0].pageX-o.startX-g.left-window.pageXOffset,j=a.changedTouches[0].pageY-o.startY-g.top-window.pageYOffset}h&&j&&k(c,h,j,!(a instanceof KeyboardEvent))}function i(a){let b=a.getRootNode();return b instanceof ShadowRoot?b.host:a}function j(a){let b=a.currentTarget;if(!(b instanceof HTMLElement))return;let c=i(b);if(!(c instanceof ImageCropElement))return;let{box:e}=f.get(c)||{};if(!e)return;let j=a.target;if(j instanceof HTMLElement){if(j.hasAttribute("data-direction")){let k=j.getAttribute("data-direction")||"";c.addEventListener("mousemove",h),c.addEventListener("touchmove",h,{passive:!0}),["nw","se"].indexOf(k)>=0&&c.classList.add("nwse"),["ne","sw"].indexOf(k)>=0&&c.classList.add("nesw"),d.set(c,{startX:e.offsetLeft+(["se","ne"].indexOf(k)>=0?0:e.offsetWidth),startY:e.offsetTop+(["se","sw"].indexOf(k)>=0?0:e.offsetHeight)}),h(a)}else c.addEventListener("mousemove",g),c.addEventListener("touchmove",g,{passive:!0})}}function k(a,b,c,e=!0){let g=Math.max(Math.abs(b),Math.abs(c),10),h=d.get(a);if(!h)return;let{box:i,image:j}=f.get(a)||{};if(!i||!j)return;g=Math.min(g,c>0?j.height-h.startY:h.startY,b>0?j.width-h.startX:h.startX);let k=e?Math.round(Math.max(0,b>0?h.startX:h.startX-g)):i.offsetLeft,l=e?Math.round(Math.max(0,c>0?h.startY:h.startY-g)):i.offsetTop;i.style.left=`${k}px`,i.style.top=`${l}px`,i.style.width=`${g}px`,i.style.height=`${g}px`,n(a,{x:k,y:l,width:g,height:g})}function l(a){let{image:b}=f.get(a)||{};if(!b)return;let c=Math.round(b.clientWidth>b.clientHeight?b.clientHeight:b.clientWidth);d.set(a,{startX:(b.clientWidth-c)/2,startY:(b.clientHeight-c)/2}),k(a,c,c)}function m(a){let b=a.currentTarget;b instanceof ImageCropElement&&(e.delete(b),b.classList.remove("nwse","nesw"),b.removeEventListener("mousemove",h),b.removeEventListener("mousemove",g),b.removeEventListener("touchmove",h),b.removeEventListener("touchmove",g))}function n(a,b){let{image:c}=f.get(a)||{};if(!c)return;let d=c.naturalWidth/c.width;for(let e in b){let g=Math.round(b[e]*d);b[e]=g;let h=a.querySelector(`[data-image-crop-input='${e}']`);h instanceof HTMLInputElement&&(h.value=g.toString())}a.dispatchEvent(new CustomEvent("image-crop-change",{bubbles:!0,detail:b}))}class ImageCropElement extends HTMLElement{connectedCallback(){if(f.has(this))return;let a=this.attachShadow({mode:"open"});a.innerHTML=` + + +
              + +
              +
              +
              +
              +
              +
              +
              +
              +
              +
              +`;let b=a.querySelector("[data-crop-box]");if(!(b instanceof HTMLElement))return;let c=a.querySelector("img");c instanceof HTMLImageElement&&(f.set(this,{box:b,image:c}),c.addEventListener("load",()=>{this.loaded=!0,l(this)}),this.addEventListener("mouseleave",m),this.addEventListener("touchend",m),this.addEventListener("mouseup",m),b.addEventListener("mousedown",j),b.addEventListener("touchstart",j,{passive:!0}),this.addEventListener("keydown",g),this.addEventListener("keydown",h),this.src&&(c.src=this.src))}static get observedAttributes(){return["src"]}get src(){return this.getAttribute("src")}set src(a){a?this.setAttribute("src",a):this.removeAttribute("src")}get loaded(){return this.hasAttribute("loaded")}set loaded(a){a?this.setAttribute("loaded",""):this.removeAttribute("loaded")}attributeChangedCallback(a,b,c){let{image:d}=f.get(this)||{};"src"===a&&(this.loaded=!1,d&&(d.src=c))}}window.customElements.get("image-crop")||(window.ImageCropElement=ImageCropElement,window.customElements.define("image-crop",ImageCropElement)),c(28585);var o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L=c(76006),M=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let N=class NavListElement extends HTMLElement{connectedCallback(){this.setShowMoreItemState()}get showMoreDisabled(){return this.showMoreItem.hasAttribute("aria-disabled")}set showMoreDisabled(a){a?this.showMoreItem.setAttribute("aria-disabled","true"):this.showMoreItem.removeAttribute("aria-disabled"),this.showMoreItem.classList.toggle("disabled",a)}set currentPage(a){this.showMoreItem.setAttribute("data-current-page",a.toString())}get currentPage(){return parseInt(this.showMoreItem.getAttribute("data-current-page"))||1}get totalPages(){return parseInt(this.showMoreItem.getAttribute("data-total-pages"))||1}get paginationSrc(){return this.showMoreItem.getAttribute("src")||""}expandItem(a){var b;null===(b=a.nextElementSibling)|| void 0===b||b.removeAttribute("data-hidden"),a.setAttribute("aria-expanded","true")}collapseItem(a){var b;null===(b=a.nextElementSibling)|| void 0===b||b.setAttribute("data-hidden",""),a.setAttribute("aria-expanded","false")}itemIsExpanded(a){return(null==a?void 0:a.tagName)==="A"||(null==a?void 0:a.getAttribute("aria-expanded"))==="true"}handleItemWithSubItemClick(a){let b=a.target;if(!(b instanceof HTMLElement))return;let c=b.closest("button");c&&(this.itemIsExpanded(c)?this.collapseItem(c):this.expandItem(c),a.stopPropagation())}async showMore(a){var b,c;if(a.preventDefault(),this.showMoreDisabled)return;this.showMoreDisabled=!0;let d;try{let e=new URL(this.paginationSrc,window.location.origin);this.currentPage++,e.searchParams.append("page",this.currentPage.toString());let f=await fetch(e);if(!f.ok)return;d=await f.text(),this.currentPage===this.totalPages&&(this.showMoreItem.hidden=!0)}catch(g){this.showMoreDisabled=!1,this.currentPage--;return}let h=this.parseHTML(document,d);null===(b=null==h?void 0:h.querySelector("li > a"))|| void 0===b||b.setAttribute("data-targets","nav-list.focusMarkers"),this.list.insertBefore(h,this.showMoreItem),null===(c=this.focusMarkers.pop())|| void 0===c||c.focus(),this.showMoreDisabled=!1}setShowMoreItemState(){this.showMoreItem&&(this.currentPage=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g},P=function(a,b,c,d){if("a"===c&&!d)throw TypeError("Private accessor was defined without a getter");if("function"==typeof b?a!==b||!d:!b.has(a))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===c?d:"a"===c?d.call(a):d?d.value:b.get(a)};let Q=class SegmentedControlElement extends HTMLElement{constructor(){super(...arguments),o.add(this)}connectedCallback(){P(this,o,"m",p).call(this)}select(a){var b,c;let d=a.currentTarget;for(let e of this.items)e.classList.remove("SegmentedControl-item--selected"),null===(b=e.querySelector("[aria-current]"))|| void 0===b||b.setAttribute("aria-current","false");null===(c=d.closest("li.SegmentedControl-item"))|| void 0===c||c.classList.add("SegmentedControl-item--selected"),d.setAttribute("aria-current","true")}};o=new WeakSet,p=function(){for(let a of this.querySelectorAll(".Button-label"))a.setAttribute("data-content",a.textContent||"")},O([L.GO],Q.prototype,"items",void 0),Q=O([L.Ih],Q),window.customElements.get("segmented-control")||(window.SegmentedControlElement=Q,window.customElements.define("segmented-control",Q));var R=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let S=class ToggleSwitchElement extends HTMLElement{get src(){let a=this.getAttribute("src");if(!a)return null;let b=this.ownerDocument.createElement("a");return b.href=a,b.href}get csrf(){let a=this.querySelector("[data-csrf]");return this.getAttribute("csrf")||a instanceof HTMLInputElement&&a.value||null}get csrfField(){return this.getAttribute("csrf-field")||"authenticity_token"}isRemote(){return null!=this.src}toggle(){!this.isDisabled()&&(this.isRemote()?(this.setLoadingState(),this.submitForm()):this.performToggle())}turnOn(){!this.isDisabled()&&(this.switch.setAttribute("aria-checked","true"),this.classList.add("ToggleSwitch--checked"))}turnOff(){!this.isDisabled()&&(this.switch.setAttribute("aria-checked","false"),this.classList.remove("ToggleSwitch--checked"))}isOn(){return"true"===this.switch.getAttribute("aria-checked")}isOff(){return!this.isOn()}isDisabled(){return"true"===this.switch.getAttribute("aria-disabled")}disable(){this.switch.setAttribute("aria-disabled","true")}enable(){this.switch.setAttribute("aria-disabled","false")}performToggle(){this.isOn()?this.turnOff():this.turnOn()}setLoadingState(){this.disable(),this.errorIcon.setAttribute("hidden","hidden"),this.loadingSpinner.removeAttribute("hidden")}setSuccessState(){this.setFinishedState(!1)}setErrorState(){this.setFinishedState(!0)}setFinishedState(a){a&&this.errorIcon.removeAttribute("hidden"),this.loadingSpinner.setAttribute("hidden","hidden"),this.enable()}async submitForm(){let a=new FormData;this.csrf&&a.append(this.csrfField,this.csrf),a.append("value",this.isOn()?"0":"1");try{if(!this.src)throw Error("invalid src");let b=await fetch(this.src,{credentials:"same-origin",method:"POST",headers:{"Requested-With":"XMLHttpRequest"},body:a});b.ok?(this.setSuccessState(),this.performToggle()):this.setErrorState()}catch(c){this.setErrorState()}}};R([L.fA],S.prototype,"switch",void 0),R([L.fA],S.prototype,"loadingSpinner",void 0),R([L.fA],S.prototype,"errorIcon",void 0),R([function(a=0,b={}){return(c,d,e)=>{if(!e||"function"!=typeof e.value)throw Error("debounce can only decorate functions");let f=e.value;e.value=function(a,b=0,{start:c=!1,middle:d=!1,once:e=!1}={}){return function(a,b=0,{start:c=!0,middle:d=!0,once:e=!1}={}){let f=0,g,h=!1;function i(...j){if(h)return;let k=Date.now()-f;f=Date.now(),c?(c=!1,a.apply(this,j),e&&i.cancel()):(d&&k{f=Date.now(),a.apply(this,j),e&&i.cancel()},d?b-k:b))}return i.cancel=()=>{clearTimeout(g),h=!0},i}(a,b,{start:c,middle:d,once:e})}(f,a,b),Object.defineProperty(c,d,e)}}(300)],S.prototype,"submitForm",null),S=R([L.Ih],S),window.customElements.get("toggle-switch")||(window.ToggleSwitchElement=S,window.customElements.define("toggle-switch",S));var T=c(48030),U=function(a,b,c,d){if("a"===c&&!d)throw TypeError("Private accessor was defined without a getter");if("function"==typeof b?a!==b||!d:!b.has(a))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===c?d:"a"===c?d.call(a):d?d.value:b.get(a)},V=function(a,b,c,d,e){if("m"===d)throw TypeError("Private method is not writable");if("a"===d&&!e)throw TypeError("Private accessor was defined without a setter");if("function"==typeof b?a!==b||!e:!b.has(a))throw TypeError("Cannot write private member to an object whose class did not declare it");return"a"===d?e.call(a,c):e?e.value=c:b.set(a,c),c};let W="tooltip-open",X="sr-only",Y=["tooltip-n","tooltip-s","tooltip-e","tooltip-w","tooltip-ne","tooltip-se","tooltip-nw","tooltip-sw"];class ToolTipElement extends HTMLElement{constructor(){super(...arguments),q.add(this),r.set(this,void 0),s.set(this,"center"),t.set(this,"outside-bottom"),u.set(this,!1)}styles(){return` + :host { + position: absolute; + z-index: 1000000; + padding: .5em .75em; + font: normal normal 11px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + -webkit-font-smoothing: subpixel-antialiased; + color: var(--color-fg-on-emphasis); + text-align: center; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-wrap: break-word; + white-space: pre; + background: var(--color-neutral-emphasis-plus); + border-radius: 6px; + opacity: 0; + max-width: 250px; + word-wrap: break-word; + white-space: normal; + width: max-content; + } + + :host:before{ + position: absolute; + z-index: 1000001; + color: var(--color-neutral-emphasis-plus); + content: ""; + border: 6px solid transparent; + opacity: 0 + } + + @keyframes tooltip-appear { + from { + opacity: 0 + } + to { + opacity: 1 + } + } + + :host:after{ + position: absolute; + display: block; + right: 0; + left: 0; + height: 12px; + content: "" + } + + :host(.${W}), + :host(.${W}):before { + animation-name: tooltip-appear; + animation-duration: .1s; + animation-fill-mode: forwards; + animation-timing-function: ease-in; + animation-delay: .4s + } + + :host(.tooltip-s):before, + :host(.tooltip-n):before { + right: 50%; + margin-right: -6px; + } + + :host(.tooltip-s):before, + :host(.tooltip-se):before, + :host(.tooltip-sw):before { + bottom: 100%; + border-bottom-color: var(--color-neutral-emphasis-plus) + } + + :host(.tooltip-s):after, + :host(.tooltip-se):after, + :host(.tooltip-sw):after { + bottom: 100% + } + + :host(.tooltip-n):before, + :host(.tooltip-ne):before, + :host(.tooltip-nw):before { + top: 100%; + border-top-color: var(--color-neutral-emphasis-plus) + } + + :host(.tooltip-n):after, + :host(.tooltip-ne):after, + :host(.tooltip-nw):after { + top: 100% + } + + :host(.tooltip-se):before, + :host(.tooltip-ne):before { + left: 0; + margin-left: 6px; + } + + :host(.tooltip-sw):before, + :host(.tooltip-nw):before { + right: 0; + margin-right: 6px; + } + + :host(.tooltip-w):before { + top: 50%; + bottom: 50%; + left: 100%; + margin-top: -6px; + border-left-color: var(--color-neutral-emphasis-plus) + } + + :host(.tooltip-e):before { + top: 50%; + right: 100%; + bottom: 50%; + margin-top: -6px; + border-right-color: var(--color-neutral-emphasis-plus) + } + `}get htmlFor(){return this.getAttribute("for")||""}set htmlFor(a){this.setAttribute("for",a)}get type(){let a=this.getAttribute("data-type");return"label"===a?"label":"description"}set type(a){this.setAttribute("data-type",a)}get direction(){return this.getAttribute("data-direction")||"s"}set direction(a){this.setAttribute("data-direction",a)}get control(){return this.ownerDocument.getElementById(this.htmlFor)}set hiddenFromView(a){this.classList.toggle(X,a),this.isConnected&&U(this,q,"m",v).call(this)}get hiddenFromView(){return this.classList.contains(X)}connectedCallback(){var a;if(U(this,q,"m",w).call(this),U(this,q,"m",x).call(this),!this.shadowRoot){let b=this.attachShadow({mode:"open"}),c=b.appendChild(document.createElement("style"));c.textContent=this.styles(),b.appendChild(document.createElement("slot"))}if(this.hiddenFromView=!0,V(this,u,!0,"f"),this.id||(this.id=`tooltip-${Date.now()}-${(1e4*Math.random()).toFixed(0)}`),!this.control)return;this.setAttribute("role","tooltip"),null===(a=U(this,r,"f"))|| void 0===a||a.abort(),V(this,r,new AbortController,"f");let{signal:d}=U(this,r,"f");this.addEventListener("mouseleave",this,{signal:d}),this.control.addEventListener("mouseenter",this,{signal:d}),this.control.addEventListener("mouseleave",this,{signal:d}),this.control.addEventListener("focus",this,{signal:d}),this.control.addEventListener("blur",this,{signal:d}),this.ownerDocument.addEventListener("keydown",this,{signal:d}),U(this,q,"m",v).call(this)}disconnectedCallback(){var a;null===(a=U(this,r,"f"))|| void 0===a||a.abort()}handleEvent(a){this.control&&(("mouseenter"===a.type||"focus"===a.type)&&this.hiddenFromView?this.hiddenFromView=!1:"blur"===a.type?this.hiddenFromView=!0:"mouseleave"===a.type&&a.relatedTarget!==this.control&&a.relatedTarget!==this?this.hiddenFromView=!0:"keydown"!==a.type||"Escape"!==a.key||this.hiddenFromView||(this.hiddenFromView=!0))}attributeChangedCallback(a){this.isConnected&&("id"===a||"data-type"===a?U(this,q,"m",w).call(this):"data-direction"===a&&U(this,q,"m",x).call(this))}}r=new WeakMap,s=new WeakMap,t=new WeakMap,u=new WeakMap,q=new WeakSet,v=function(){if(this.hiddenFromView)this.classList.remove(W,...Y);else{for(let a of(this.classList.add(W),this.ownerDocument.querySelectorAll(this.tagName)))a!==this&&(a.hiddenFromView=!0);U(this,q,"m",y).call(this)}},w=function(){if(this.id&&this.control){if("label"===this.type){let a=this.control.getAttribute("aria-labelledby");a=a?a.split(" ").includes(this.id)?`${a}`:`${a} ${this.id}`:this.id,this.control.setAttribute("aria-labelledby",a),this.setAttribute("aria-hidden","true")}else{let b=this.control.getAttribute("aria-describedby");b=b?b.split(" ").includes(this.id)?`${b}`:`${b} ${this.id}`:this.id,this.control.setAttribute("aria-describedby",b)}}},x=function(){this.classList.remove(...Y);let a=this.direction;"n"===a?(V(this,s,"center","f"),V(this,t,"outside-top","f")):"ne"===a?(V(this,s,"start","f"),V(this,t,"outside-top","f")):"e"===a?(V(this,s,"center","f"),V(this,t,"outside-right","f")):"se"===a?(V(this,s,"start","f"),V(this,t,"outside-bottom","f")):"s"===a?(V(this,s,"center","f"),V(this,t,"outside-bottom","f")):"sw"===a?(V(this,s,"end","f"),V(this,t,"outside-bottom","f")):"w"===a?(V(this,s,"center","f"),V(this,t,"outside-left","f")):"nw"===a&&(V(this,s,"end","f"),V(this,t,"outside-top","f"))},y=function(){if(!this.control||!U(this,u,"f")||this.hiddenFromView)return;let a=10;this.style.left="0px";let b=(0,T.N)(this,this.control,{side:U(this,t,"f"),align:U(this,s,"f"),anchorOffset:a}),c=b.anchorSide,d=b.anchorAlign;this.style.top=`${b.top}px`,this.style.left=`${b.left}px`;let e="s";e="outside-left"===c?"w":"outside-right"===c?"e":"outside-top"===c?"center"===d?"n":"start"===d?"ne":"nw":"center"===d?"s":"start"===d?"se":"sw",this.classList.add(`tooltip-${e}`)},ToolTipElement.observedAttributes=["data-type","data-direction","id"],window.customElements.get("tool-tip")||(window.ToolTipElement=ToolTipElement,window.customElements.define("tool-tip",ToolTipElement));var Z=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let $=class XBannerElement extends HTMLElement{dismiss(){if(this.shouldReappear()){this.style.setProperty("visibility","hidden"),setTimeout(()=>{this.style.setProperty("visibility","visible")},2e3);return}let a=this.parentElement;a&&a.removeChild(this)}shouldReappear(){return"true"===this.getAttribute("data-reappear")}};function _(a){a.style.display="inline-block"}function aa(a){a.style.display="none"}Z([L.fA],$.prototype,"titleText",void 0),$=Z([L.Ih],$),window.customElements.get("x-banner")||(window.XBannerElement=$,window.customElements.define("x-banner",$)),c(46481),c(76745);let ab=new WeakMap;document.addEventListener("clipboard-copy",({target:a})=>{if(!(a instanceof HTMLElement)||!a.hasAttribute("data-view-component"))return;let b=ab.get(a);b?(clearTimeout(b),ab.delete(a)):function(a){let[b,c]=a.querySelectorAll(".octicon");b&&c&&(aa(b),_(c))}(a),ab.set(a,setTimeout(()=>{(function(a){let[b,c]=a.querySelectorAll(".octicon");b&&c&&(_(b),aa(c))})(a),ab.delete(a)},2e3))});var ac=function(a,b,c,d,e){if("m"===d)throw TypeError("Private method is not writable");if("a"===d&&!e)throw TypeError("Private accessor was defined without a setter");if("function"==typeof b?a!==b||!e:!b.has(a))throw TypeError("Cannot write private member to an object whose class did not declare it");return"a"===d?e.call(a,c):e?e.value=c:b.set(a,c),c},ad=function(a,b,c,d){if("a"===c&&!d)throw TypeError("Private accessor was defined without a getter");if("function"==typeof b?a!==b||!d:!b.has(a))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===c?d:"a"===c?d.call(a):d?d.value:b.get(a)};let ae="undefined"!=typeof Intl&&Intl.ListFormat||class ListFormatPonyFill{formatToParts(a){let b=[];for(let c of a)b.push({type:"element",value:c}),b.push({type:"literal",value:", "});return b.slice(0,-1)}},af=[["years","year"],["months","month"],["weeks","week"],["days","day"],["hours","hour"],["minutes","minute"],["seconds","second"],["milliseconds","millisecond"],],ag={minimumIntegerDigits:2};class DurationFormat{constructor(a,b={}){z.set(this,void 0);let c=String(b.style||"short");"long"!==c&&"short"!==c&&"narrow"!==c&&"digital"!==c&&(c="short");let d="digital"===c?"numeric":c,e=b.hours||d;d="2-digit"===e?"numeric":e;let f=b.minutes||d;d="2-digit"===f?"numeric":f;let g=b.seconds||d;d="2-digit"===g?"numeric":g;let h=b.milliseconds||d;ac(this,z,{locale:a,style:c,years:b.years||"digital"===c?"short":c,yearsDisplay:"always"===b.yearsDisplay?"always":"auto",months:b.months||"digital"===c?"short":c,monthsDisplay:"always"===b.monthsDisplay?"always":"auto",weeks:b.weeks||"digital"===c?"short":c,weeksDisplay:"always"===b.weeksDisplay?"always":"auto",days:b.days||"digital"===c?"short":c,daysDisplay:"always"===b.daysDisplay?"always":"auto",hours:e,hoursDisplay:"always"===b.hoursDisplay?"always":"digital"===c?"always":"auto",minutes:f,minutesDisplay:"always"===b.minutesDisplay?"always":"digital"===c?"always":"auto",seconds:g,secondsDisplay:"always"===b.secondsDisplay?"always":"digital"===c?"always":"auto",milliseconds:h,millisecondsDisplay:"always"===b.millisecondsDisplay?"always":"auto"},"f")}resolvedOptions(){return ad(this,z,"f")}formatToParts(a){let b=[],c=ad(this,z,"f"),d=c.style,e=c.locale;for(let[f,g]of af){let h=a[f];if("auto"===c[`${f}Display`]&&!h)continue;let i=c[f],j="2-digit"===i?ag:"numeric"===i?{}:{style:"unit",unit:g,unitDisplay:i};b.push(new Intl.NumberFormat(e,j).format(h))}return new ae(e,{type:"unit",style:"digital"===d?"short":d}).formatToParts(b)}format(a){return this.formatToParts(a).map(a=>a.value).join("")}}z=new WeakMap;let ah=/^[-+]?P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)W)?(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?)?$/,ai=["year","month","week","day","hour","minute","second","millisecond"],aj=a=>ah.test(a);class Duration{constructor(a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0){this.years=a,this.months=b,this.weeks=c,this.days=d,this.hours=e,this.minutes=f,this.seconds=g,this.milliseconds=h,this.years||(this.years=0),this.sign||(this.sign=Math.sign(this.years)),this.months||(this.months=0),this.sign||(this.sign=Math.sign(this.months)),this.weeks||(this.weeks=0),this.sign||(this.sign=Math.sign(this.weeks)),this.days||(this.days=0),this.sign||(this.sign=Math.sign(this.days)),this.hours||(this.hours=0),this.sign||(this.sign=Math.sign(this.hours)),this.minutes||(this.minutes=0),this.sign||(this.sign=Math.sign(this.minutes)),this.seconds||(this.seconds=0),this.sign||(this.sign=Math.sign(this.seconds)),this.milliseconds||(this.milliseconds=0),this.sign||(this.sign=Math.sign(this.milliseconds)),this.blank=0===this.sign}abs(){return new Duration(Math.abs(this.years),Math.abs(this.months),Math.abs(this.weeks),Math.abs(this.days),Math.abs(this.hours),Math.abs(this.minutes),Math.abs(this.seconds),Math.abs(this.milliseconds))}static from(a){var b;if("string"==typeof a){let c=String(a).trim(),d=c.startsWith("-")?-1:1,e=null===(b=c.match(ah))|| void 0===b?void 0:b.slice(1).map(a=>(Number(a)||0)*d);return e?new Duration(...e):new Duration}if("object"==typeof a){let{years:f,months:g,weeks:h,days:i,hours:j,minutes:k,seconds:l,milliseconds:m}=a;return new Duration(f,g,h,i,j,k,l,m)}throw RangeError("invalid duration")}static compare(a,b){let c=Date.now(),d=Math.abs(ak(c,Duration.from(a)).getTime()-c),e=Math.abs(ak(c,Duration.from(b)).getTime()-c);return d>e?-1:d=900&&(h+=Math.round(i/1e3)),(h||g||f||e||d||c||b)&&(i=0),h>=55&&(g+=Math.round(h/60)),(g||f||e||d||c||b)&&(h=0),g>=55&&(f+=Math.round(g/60)),(f||e||d||c||b)&&(g=0),f>=21&&(e+=Math.round(f/24)),(e||d||c||b)&&(f=0),e>=6&&(d+=Math.round(e/7)),(d||c||b)&&(e=0),d>=4&&(c+=Math.round(d/4)),(c||b)&&(d=0),c>=11&&(b+=Math.round(c/12)),b&&(c=0);let j=a.sign;return new Duration(b*j,c*j,d*j,e*j,f*j,g*j,h*j,i*j)}var am=function(a,b,c,d){if("a"===c&&!d)throw TypeError("Private accessor was defined without a getter");if("function"==typeof b?a!==b||!d:!b.has(a))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===c?d:"a"===c?d.call(a):d?d.value:b.get(a)},an=function(a,b,c,d,e){if("m"===d)throw TypeError("Private method is not writable");if("a"===d&&!e)throw TypeError("Private accessor was defined without a setter");if("function"==typeof b?a!==b||!e:!b.has(a))throw TypeError("Cannot write private member to an object whose class did not declare it");return"a"===d?e.call(a,c):e?e.value=c:b.set(a,c),c};let ao="undefined"!=typeof globalThis?globalThis:window,ap=ao.HTMLElement||null,aq=new Duration,ar=new Duration(0,0,0,0,0,1);class RelativeTimeUpdatedEvent extends Event{constructor(a,b,c,d){super("relative-time-updated",{bubbles:!0,composed:!0}),this.oldText=a,this.newText=b,this.oldTitle=c,this.newTitle=d}}function as(a){if(!a.date)return 1/0;if("duration"===a.format||"elapsed"===a.format){let b=a.precision;if("second"===b)return 1e3;if("minute"===b)return 6e4}let c=Math.abs(Date.now()-a.date.getTime());return c<6e4?1e3:c<36e5?6e4:36e5}let at=new class{constructor(){this.elements=new Set,this.time=1/0,this.timer=-1}observe(a){if(this.elements.has(a))return;this.elements.add(a);let b=a.date;if(b&&b.getTime()){let c=as(a),d=Date.now()+c;dthis.update(),c),this.time=d)}}unobserve(a){this.elements.has(a)&&this.elements.delete(a)}update(){if(clearTimeout(this.timer),!this.elements.size)return;let a=1/0;for(let b of this.elements)a=Math.min(a,as(b)),b.update();this.time=Math.min(36e5,a),this.timer=setTimeout(()=>this.update(),this.time),this.time+=Date.now()}};class relative_time_element_RelativeTimeElement extends ap{constructor(){super(...arguments),A.add(this),B.set(this,!1),C.set(this,!1),E.set(this,this.shadowRoot?this.shadowRoot:this.attachShadow?this.attachShadow({mode:"open"}):this)}static get observedAttributes(){return["second","minute","hour","weekday","day","month","year","time-zone-name","prefix","threshold","tense","precision","format","format-style","datetime","lang","title",]}get second(){let a=this.getAttribute("second");if("numeric"===a||"2-digit"===a)return a}set second(a){this.setAttribute("second",a||"")}get minute(){let a=this.getAttribute("minute");if("numeric"===a||"2-digit"===a)return a}set minute(a){this.setAttribute("minute",a||"")}get hour(){let a=this.getAttribute("hour");if("numeric"===a||"2-digit"===a)return a}set hour(a){this.setAttribute("hour",a||"")}get weekday(){let a=this.getAttribute("weekday");return"long"===a||"short"===a||"narrow"===a?a:"datetime"===this.format&&""!==a?this.formatStyle:void 0}set weekday(a){this.setAttribute("weekday",a||"")}get day(){var a;let b=null!==(a=this.getAttribute("day"))&& void 0!==a?a:"numeric";if("numeric"===b||"2-digit"===b)return b}set day(a){this.setAttribute("day",a||"")}get month(){let a=this.format,b=this.getAttribute("month");if(""!==b&&(null!=b||(b="datetime"===a?this.formatStyle:"short"),"numeric"===b||"2-digit"===b||"short"===b||"long"===b||"narrow"===b))return b}set month(a){this.setAttribute("month",a||"")}get year(){var a;let b=this.getAttribute("year");return"numeric"===b||"2-digit"===b?b:this.hasAttribute("year")||new Date().getUTCFullYear()===(null===(a=this.date)|| void 0===a?void 0:a.getUTCFullYear())?void 0:"numeric"}set year(a){this.setAttribute("day",a||"")}get timeZoneName(){let a=this.getAttribute("time-zone-name");if("long"===a||"short"===a||"shortOffset"===a||"longOffset"===a||"shortGeneric"===a||"longGeneric"===a)return a}set timeZoneName(a){this.setAttribute("time-zone-name",a||"")}get prefix(){var a;return null!==(a=this.getAttribute("prefix"))&& void 0!==a?a:"datetime"===this.format?"":"on"}set prefix(a){this.setAttribute("prefix",a)}get threshold(){let a=this.getAttribute("threshold");return a&&aj(a)?a:"P30D"}set threshold(a){this.setAttribute("threshold",a)}get tense(){let a=this.getAttribute("tense");return"past"===a?"past":"future"===a?"future":"auto"}set tense(a){this.setAttribute("tense",a)}get precision(){let a=this.getAttribute("precision");return ai.includes(a)?a:"micro"===this.format?"minute":"second"}set precision(a){this.setAttribute("precision",a)}get format(){let a=this.getAttribute("format");return"datetime"===a?"datetime":"relative"===a?"relative":"duration"===a?"duration":"micro"===a?"micro":"elapsed"===a?"elapsed":"auto"}set format(a){this.setAttribute("format",a)}get formatStyle(){let a=this.getAttribute("format-style");if("long"===a)return"long";if("short"===a)return"short";if("narrow"===a)return"narrow";let b=this.format;return"elapsed"===b||"micro"===b?"narrow":"datetime"===b?"short":"long"}set formatStyle(a){this.setAttribute("format-style",a)}get datetime(){return this.getAttribute("datetime")||""}set datetime(a){this.setAttribute("datetime",a)}get date(){let a=Date.parse(this.datetime);return Number.isNaN(a)?null:new Date(a)}set date(a){this.datetime=(null==a?void 0:a.toISOString())||""}connectedCallback(){this.update()}disconnectedCallback(){at.unobserve(this)}attributeChangedCallback(a,b,c){b===c||("title"===a&&an(this,B,null!==c&&(this.date&&am(this,A,"m",F).call(this,this.date))!==c,"f"),am(this,C,"f")||"title"===a&&am(this,B,"f")||an(this,C,(async()=>{await Promise.resolve(),this.update()})(),"f"))}update(){let a=am(this,E,"f").textContent||this.textContent||"",b=this.getAttribute("title")||"",c=b,d=this.date;if("undefined"==typeof Intl||!Intl.DateTimeFormat||!d){am(this,E,"f").textContent=a;return}let e=Date.now();!am(this,B,"f")&&(c=am(this,A,"m",F).call(this,d)||"")&&this.setAttribute("title",c);let f=function(a,b="second",c=Date.now()){let d=a.getTime()-c;if(0===d)return new Duration;let e=Math.sign(d),f=Math.abs(d),g=Math.floor(f/1e3),h=Math.floor(g/60),i=Math.floor(h/60),j=Math.floor(i/24),k=Math.floor(j/30),l=Math.floor(k/12),m=ai.indexOf(b)||ai.length;return new Duration(m>=0?l*e:0,m>=1?(k-12*l)*e:0,0,m>=3?(j-30*k)*e:0,m>=4?(i-24*j)*e:0,m>=5?(h-60*i)*e:0,m>=6?(g-60*h)*e:0,m>=7?(f-1e3*g)*e:0)}(d,this.precision,e),g=am(this,A,"m",G).call(this,f),h=a;(h="duration"===g?am(this,A,"m",H).call(this,f):"relative"===g?am(this,A,"m",I).call(this,f):am(this,A,"m",J).call(this,d))?am(this,E,"f").textContent=h:this.shadowRoot===am(this,E,"f")&&this.textContent&&(am(this,E,"f").textContent=this.textContent),(h!==a||c!==b)&&this.dispatchEvent(new RelativeTimeUpdatedEvent(a,h,b,c)),"relative"===g||"duration"===g?at.observe(this):at.unobserve(this),an(this,C,!1,"f")}}B=new WeakMap,C=new WeakMap,E=new WeakMap,A=new WeakSet,D=function(){var a;return(null===(a=this.closest("[lang]"))|| void 0===a?void 0:a.getAttribute("lang"))||this.ownerDocument.documentElement.getAttribute("lang")||"default"},F=function(a){return new Intl.DateTimeFormat(am(this,A,"a",D),{day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"}).format(a)},G=function(a){let b=this.format;if("datetime"===b)return"datetime";if("duration"===b||"elapsed"===b||"micro"===b)return"duration";if(("auto"===b||"relative"===b)&&"undefined"!=typeof Intl&&Intl.RelativeTimeFormat){let c=this.tense;if("past"===c||"future"===c||1===Duration.compare(a,this.threshold))return"relative"}return"datetime"},H=function(a){let b=am(this,A,"a",D),c=this.format,d=this.formatStyle,e=this.tense,f=aq;"micro"===c?(a=al(a),f=ar,("past"===this.tense&& -1!==a.sign||"future"===this.tense&&1!==a.sign)&&(a=ar)):("past"===e&& -1!==a.sign||"future"===e&&1!==a.sign)&&(a=f);let g=`${this.precision}sDisplay`;return a.blank?f.toLocaleString(b,{style:d,[g]:"always"}):a.abs().toLocaleString(b,{style:d})},I=function(a){let b=new Intl.RelativeTimeFormat(am(this,A,"a",D),{numeric:"auto",style:this.formatStyle}),c=this.tense;"future"===c&&1!==a.sign&&(a=aq),"past"===c&& -1!==a.sign&&(a=aq);let[d,e]=function(a){let b=al(a);if(b.blank)return[0,"second"];for(let c of ai){if("millisecond"===c)continue;let d=b[`${c}s`];if(d)return[d,c]}return[0,"second"]}(a);return"second"===e&&d<10?b.format(0,"second"):b.format(d,e)},J=function(a){let b=new Intl.DateTimeFormat(am(this,A,"a",D),{second:this.second,minute:this.minute,hour:this.hour,weekday:this.weekday,day:this.day,month:this.month,year:this.year,timeZoneName:this.timeZoneName});return`${this.prefix} ${b.format(a)}`.trim()};let au="undefined"!=typeof globalThis?globalThis:window;try{customElements.define("relative-time",relative_time_element_RelativeTimeElement),au.RelativeTimeElement=relative_time_element_RelativeTimeElement}catch(av){if(!(au.DOMException&&av instanceof DOMException&&"NotSupportedError"===av.name)&&!(av instanceof ReferenceError))throw av}c(29501);var aw=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let ax=class PrimerMultiInputElement extends HTMLElement{activateField(a){var b,c;let d=this.findField(a);if(d){for(let e of this.fields)e!==d&&(e.setAttribute("disabled","disabled"),e.setAttribute("hidden","hidden"),null===(b=e.parentElement)|| void 0===b||b.setAttribute("hidden","hidden"));d.removeAttribute("disabled"),d.removeAttribute("hidden"),null===(c=d.parentElement)|| void 0===c||c.removeAttribute("hidden")}}findField(a){for(let b of this.fields)if(b.getAttribute("data-name")===a)return b;return null}};aw([L.GO],ax.prototype,"fields",void 0),ax=aw([L.Ih],ax),window.customElements.get("primer-multi-input")||(Object.assign(window,{PrimerMultiInputElement:ax}),window.customElements.define("primer-multi-input",ax)),c(38257);var ay=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g},az=function(a,b,c,d){if("a"===c&&!d)throw TypeError("Private accessor was defined without a getter");if("function"==typeof b?a!==b||!d:!b.has(a))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===c?d:"a"===c?d.call(a):d?d.value:b.get(a)},aA=function(a,b,c,d,e){if("m"===d)throw TypeError("Private method is not writable");if("a"===d&&!e)throw TypeError("Private accessor was defined without a setter");if("function"==typeof b?a!==b||!e:!b.has(a))throw TypeError("Cannot write private member to an object whose class did not declare it");return"a"===d?e.call(a,c):e?e.value=c:b.set(a,c),c};let aB=class PrimerTextFieldElement extends HTMLElement{constructor(){super(...arguments),K.set(this,void 0)}connectedCallback(){var a;null===(a=az(this,K,"f"))|| void 0===a||a.abort();let{signal:b}=aA(this,K,new AbortController,"f");this.inputElement.addEventListener("auto-check-success",()=>{this.clearError()},{signal:b}),this.inputElement.addEventListener("auto-check-error",a=>{a.detail.response.text().then(a=>{this.setError(a)})},{signal:b})}disconnectedCallback(){var a;null===(a=az(this,K,"f"))|| void 0===a||a.abort()}clearError(){this.inputElement.removeAttribute("invalid"),this.validationElement.hidden=!0,this.validationMessageElement.innerText=""}setError(a){this.validationMessageElement.innerText=a,this.validationElement.hidden=!1,this.inputElement.setAttribute("invalid","true")}};K=new WeakMap,ay([L.fA],aB.prototype,"inputElement",void 0),ay([L.fA],aB.prototype,"validationElement",void 0),ay([L.fA],aB.prototype,"validationMessageElement",void 0),aB=ay([L.Ih],aB)},38257(a,b,c){c.d(b,{Z:()=>j});let d=new WeakMap;class AutoCheckElement extends HTMLElement{connectedCallback(){let a=this.input;if(!a)return;let b=function(a,b=0,{start:c=!1,middle:d=!1,once:e=!1}={}){return function(a,b=0,{start:c=!0,middle:d=!0,once:e=!1}={}){var f,g=0,h=!1,i=function i(...j){if(!h){var k=Date.now()-g;g=Date.now(),c?(c=!1,a(...j),e&&i.cancel()):(d&&kh=a;b.dispatchEvent(new CustomEvent("auto-check-start",{bubbles:!0,detail:{setValidity:i}})),c.required&&b.setCustomValidity(h)}async function f(a,b,c){try{let d=await fetch(b,c);return a.dispatchEvent(new CustomEvent("load")),a.dispatchEvent(new CustomEvent("loadend")),d}catch(e){throw"AbortError"!==e.name&&(a.dispatchEvent(new CustomEvent("error")),a.dispatchEvent(new CustomEvent("loadend"))),e}}async function g(a){let b=a.input;if(!b)return;let c=a.csrfField,e=a.src,g=a.csrf,j=d.get(a);if(!e||!g||!j||!b.value.trim()){a.required&&b.setCustomValidity("");return}let k=new FormData;k.append(c,g),k.append("value",b.value),b.dispatchEvent(new CustomEvent("auto-check-send",{bubbles:!0,detail:{body:k}})),j.controller?j.controller.abort():a.dispatchEvent(new CustomEvent("loadstart")),j.controller="AbortController"in window?new AbortController:{signal:null,abort(){}};try{let l=await f(a,e,{credentials:"same-origin",signal:j.controller.signal,method:"POST",body:k});l.ok?h(l,b,a.required):i(l,b,a.required),j.controller=null,b.dispatchEvent(new CustomEvent("auto-check-complete",{bubbles:!0}))}catch(m){"AbortError"!==m.name&&(j.controller=null,b.dispatchEvent(new CustomEvent("auto-check-complete",{bubbles:!0})))}}function h(a,b,c){c&&b.setCustomValidity(""),b.dispatchEvent(new CustomEvent("auto-check-success",{bubbles:!0,detail:{response:a.clone()}}))}function i(a,b,c){let d="Validation failed";b.dispatchEvent(new CustomEvent("auto-check-error",{bubbles:!0,detail:{response:a.clone(),setValidity:a=>d=a}})),c&&b.setCustomValidity(d)}window.customElements.get("auto-check")||(window.AutoCheckElement=AutoCheckElement,window.customElements.define("auto-check",AutoCheckElement));let j=AutoCheckElement},11095(){class DetailsMenuElement extends HTMLElement{get preload(){return this.hasAttribute("preload")}set preload(a){a?this.setAttribute("preload",""):this.removeAttribute("preload")}get src(){return this.getAttribute("src")||""}set src(a){this.setAttribute("src",a)}connectedCallback(){this.hasAttribute("role")||this.setAttribute("role","menu");let g=this.parentElement;if(!g)return;let h=g.querySelector("summary");h&&(h.setAttribute("aria-haspopup","menu"),h.hasAttribute("role")||h.setAttribute("role","button"));let i=[c(g,"compositionstart",a=>s(this,a)),c(g,"compositionend",a=>s(this,a)),c(g,"click",a=>k(g,a)),c(g,"change",a=>k(g,a)),c(g,"keydown",a=>m(g,this,a)),c(g,"toggle",()=>d(g,this),{once:!0}),c(g,"toggle",()=>f(g)),this.preload?c(g,"mouseover",()=>d(g,this),{once:!0}):b,...e(g)];a.set(this,{subscriptions:i,loaded:!1,isComposing:!1})}disconnectedCallback(){let b=a.get(this);if(b)for(let c of(a.delete(this),b.subscriptions))c.unsubscribe()}}let a=new WeakMap,b={unsubscribe(){}};function c(a,b,c,d=!1){return a.addEventListener(b,c,d),{unsubscribe(){a.removeEventListener(b,c,d)}}}function d(b,c){let d=c.getAttribute("src");if(!d)return;let e=a.get(c);if(!e||e.loaded)return;e.loaded=!0;let f=c.querySelector("include-fragment");f&&!f.hasAttribute("src")&&(f.addEventListener("loadend",()=>g(b)),f.setAttribute("src",d))}function e(a){let b=!1;return[c(a,"mousedown",()=>b=!0),c(a,"keydown",()=>b=!1),c(a,"toggle",()=>{a.hasAttribute("open")&&(g(a)||b||h(a))})]}function f(a){if(a.hasAttribute("open"))for(let b of document.querySelectorAll("details[open] > details-menu")){let c=b.closest("details");c&&c!==a&&!c.contains(a)&&c.removeAttribute("open")}}function g(a){if(!a.hasAttribute("open"))return!1;let b=a.querySelector("details-menu [autofocus]");return!!b&&(b.focus(),!0)}function h(a){let b=document.activeElement;if(b&&n(b)&&a.contains(b))return;let c=i(a,!0);c&&c.focus()}function i(a,b){let c=Array.from(a.querySelectorAll('[role^="menuitem"]:not([hidden]):not([disabled])')),d=document.activeElement,e=d instanceof HTMLElement?c.indexOf(d):-1,f=b?c[e+1]:c[e-1],g=b?c[0]:c[c.length-1];return f||g}let j=navigator.userAgent.match(/Macintosh/);function k(a,b){let c=b.target;if(c instanceof Element&&c.closest("details")===a){if("click"===b.type){let d=c.closest('[role="menuitem"], [role="menuitemradio"]');if(!d)return;let e=d.querySelector("input");if("LABEL"===d.tagName&&c===e)return;let f="LABEL"===d.tagName&&e&&!e.checked;f||l(d,a)}else if("change"===b.type){let g=c.closest('[role="menuitemradio"], [role="menuitemcheckbox"]');g&&l(g,a)}}}function l(a,b){if(a.hasAttribute("disabled")||"true"===a.getAttribute("aria-disabled"))return;let c=a.closest("details-menu");if(!c)return;let d=c.dispatchEvent(new CustomEvent("details-menu-select",{cancelable:!0,detail:{relatedTarget:a}}));d&&(p(a,b),function(a,b){for(let c of b.querySelectorAll('[role="menuitemradio"], [role="menuitemcheckbox"]')){let d=c.querySelector('input[type="radio"], input[type="checkbox"]'),e=(c===a).toString();d instanceof HTMLInputElement&&(e=d.indeterminate?"mixed":d.checked.toString()),c.setAttribute("aria-checked",e)}}(a,b),"menuitemcheckbox"!==a.getAttribute("role")&&o(b),c.dispatchEvent(new CustomEvent("details-menu-selected",{detail:{relatedTarget:a}})))}function m(b,c,d){if(!(d instanceof KeyboardEvent)||b.querySelector("details[open]"))return;let e=a.get(c);if(!e||e.isComposing)return;let f=d.target instanceof Element&&"SUMMARY"===d.target.tagName;switch(d.key){case"Escape":b.hasAttribute("open")&&(o(b),d.preventDefault(),d.stopPropagation());break;case"ArrowDown":{f&&!b.hasAttribute("open")&&b.setAttribute("open","");let g=i(b,!0);g&&g.focus(),d.preventDefault()}break;case"ArrowUp":{f&&!b.hasAttribute("open")&&b.setAttribute("open","");let h=i(b,!1);h&&h.focus(),d.preventDefault()}break;case"n":if(j&&d.ctrlKey){let k=i(b,!0);k&&k.focus(),d.preventDefault()}break;case"p":if(j&&d.ctrlKey){let l=i(b,!1);l&&l.focus(),d.preventDefault()}break;case" ":case"Enter":{let m=document.activeElement;m instanceof HTMLElement&&n(m)&&m.closest("details")===b&&(d.preventDefault(),d.stopPropagation(),m.click())}}}function n(a){let b=a.getAttribute("role");return"menuitem"===b||"menuitemcheckbox"===b||"menuitemradio"===b}function o(a){let b=a.hasAttribute("open");if(!b)return;a.removeAttribute("open");let c=a.querySelector("summary");c&&c.focus()}function p(a,b){let c=b.querySelector("[data-menu-button]");if(!c)return;let d=q(a);if(d)c.textContent=d;else{let e=r(a);e&&(c.innerHTML=e)}}function q(a){if(!a)return null;let b=a.hasAttribute("data-menu-button-text")?a:a.querySelector("[data-menu-button-text]");return b?b.getAttribute("data-menu-button-text")||b.textContent:null}function r(a){if(!a)return null;let b=a.hasAttribute("data-menu-button-contents")?a:a.querySelector("[data-menu-button-contents]");return b?b.innerHTML:null}function s(b,c){let d=a.get(b);d&&(d.isComposing="compositionstart"===c.type)}window.customElements.get("details-menu")||(window.DetailsMenuElement=DetailsMenuElement,window.customElements.define("details-menu",DetailsMenuElement))},73921(){let a=new Set(["\u{1F44B}","\u{1F91A}","\u{1F590}\uFE0F","\u270B","\u{1F596}","\u{1F44C}","\u{1F90F}","\u270C\uFE0F","\u{1F91E}","\u{1F91F}","\u{1F918}","\u{1F919}","\u{1F448}","\u{1F449}","\u{1F446}","\u{1F595}","\u{1F447}","\u261D\uFE0F","\u{1F44D}","\u{1F44E}","\u270A","\u{1F44A}","\u{1F91B}","\u{1F91C}","\u{1F44F}","\u{1F64C}","\u{1F450}","\u{1F932}","\u{1F64F}","\u270D\uFE0F","\u{1F485}","\u{1F933}","\u{1F4AA}","\u{1F9B5}","\u{1F9B6}","\u{1F442}","\u{1F9BB}","\u{1F443}","\u{1F476}","\u{1F9D2}","\u{1F466}","\u{1F467}","\u{1F9D1}","\u{1F471}","\u{1F468}","\u{1F9D4}","\u{1F471}\u200D\u2642\uFE0F","\u{1F468}\u200D\u{1F9B0}","\u{1F468}\u200D\u{1F9B1}","\u{1F468}\u200D\u{1F9B3}","\u{1F468}\u200D\u{1F9B2}","\u{1F469}","\u{1F471}\u200D\u2640\uFE0F","\u{1F469}\u200D\u{1F9B0}","\u{1F469}\u200D\u{1F9B1}","\u{1F469}\u200D\u{1F9B3}","\u{1F469}\u200D\u{1F9B2}","\u{1F9D3}","\u{1F474}","\u{1F475}","\u{1F64D}","\u{1F64D}\u200D\u2642\uFE0F","\u{1F64D}\u200D\u2640\uFE0F","\u{1F64E}","\u{1F64E}\u200D\u2642\uFE0F","\u{1F64E}\u200D\u2640\uFE0F","\u{1F645}","\u{1F645}\u200D\u2642\uFE0F","\u{1F645}\u200D\u2640\uFE0F","\u{1F646}","\u{1F646}\u200D\u2642\uFE0F","\u{1F646}\u200D\u2640\uFE0F","\u{1F481}","\u{1F481}\u200D\u2642\uFE0F","\u{1F481}\u200D\u2640\uFE0F","\u{1F64B}","\u{1F64B}\u200D\u2642\uFE0F","\u{1F64B}\u200D\u2640\uFE0F","\u{1F9CF}","\u{1F9CF}\u200D\u2642\uFE0F","\u{1F9CF}\u200D\u2640\uFE0F","\u{1F647}","\u{1F647}\u200D\u2642\uFE0F","\u{1F647}\u200D\u2640\uFE0F","\u{1F926}","\u{1F926}\u200D\u2642\uFE0F","\u{1F926}\u200D\u2640\uFE0F","\u{1F937}","\u{1F937}\u200D\u2642\uFE0F","\u{1F937}\u200D\u2640\uFE0F","\u{1F468}\u200D\u2695\uFE0F","\u{1F469}\u200D\u2695\uFE0F","\u{1F468}\u200D\u{1F393}","\u{1F469}\u200D\u{1F393}","\u{1F468}\u200D\u{1F3EB}","\u{1F469}\u200D\u{1F3EB}","\u{1F468}\u200D\u2696\uFE0F","\u{1F469}\u200D\u2696\uFE0F","\u{1F468}\u200D\u{1F33E}","\u{1F469}\u200D\u{1F33E}","\u{1F468}\u200D\u{1F373}","\u{1F469}\u200D\u{1F373}","\u{1F468}\u200D\u{1F527}","\u{1F469}\u200D\u{1F527}","\u{1F468}\u200D\u{1F3ED}","\u{1F469}\u200D\u{1F3ED}","\u{1F468}\u200D\u{1F4BC}","\u{1F469}\u200D\u{1F4BC}","\u{1F468}\u200D\u{1F52C}","\u{1F469}\u200D\u{1F52C}","\u{1F468}\u200D\u{1F4BB}","\u{1F469}\u200D\u{1F4BB}","\u{1F468}\u200D\u{1F3A4}","\u{1F469}\u200D\u{1F3A4}","\u{1F468}\u200D\u{1F3A8}","\u{1F469}\u200D\u{1F3A8}","\u{1F468}\u200D\u2708\uFE0F","\u{1F469}\u200D\u2708\uFE0F","\u{1F468}\u200D\u{1F680}","\u{1F469}\u200D\u{1F680}","\u{1F468}\u200D\u{1F692}","\u{1F469}\u200D\u{1F692}","\u{1F46E}","\u{1F46E}\u200D\u2642\uFE0F","\u{1F46E}\u200D\u2640\uFE0F","\u{1F575}\uFE0F","\u{1F575}\uFE0F\u200D\u2642\uFE0F","\u{1F575}\uFE0F\u200D\u2640\uFE0F","\u{1F482}","\u{1F482}\u200D\u2642\uFE0F","\u{1F482}\u200D\u2640\uFE0F","\u{1F477}","\u{1F477}\u200D\u2642\uFE0F","\u{1F477}\u200D\u2640\uFE0F","\u{1F934}","\u{1F478}","\u{1F473}","\u{1F473}\u200D\u2642\uFE0F","\u{1F473}\u200D\u2640\uFE0F","\u{1F472}","\u{1F9D5}","\u{1F935}","\u{1F470}","\u{1F930}","\u{1F931}","\u{1F47C}","\u{1F385}","\u{1F936}","\u{1F9B8}","\u{1F9B8}\u200D\u2642\uFE0F","\u{1F9B8}\u200D\u2640\uFE0F","\u{1F9B9}","\u{1F9B9}\u200D\u2642\uFE0F","\u{1F9B9}\u200D\u2640\uFE0F","\u{1F9D9}","\u{1F9D9}\u200D\u2642\uFE0F","\u{1F9D9}\u200D\u2640\uFE0F","\u{1F9DA}","\u{1F9DA}\u200D\u2642\uFE0F","\u{1F9DA}\u200D\u2640\uFE0F","\u{1F9DB}","\u{1F9DB}\u200D\u2642\uFE0F","\u{1F9DB}\u200D\u2640\uFE0F","\u{1F9DC}","\u{1F9DC}\u200D\u2642\uFE0F","\u{1F9DC}\u200D\u2640\uFE0F","\u{1F9DD}","\u{1F9DD}\u200D\u2642\uFE0F","\u{1F9DD}\u200D\u2640\uFE0F","\u{1F486}","\u{1F486}\u200D\u2642\uFE0F","\u{1F486}\u200D\u2640\uFE0F","\u{1F487}","\u{1F487}\u200D\u2642\uFE0F","\u{1F487}\u200D\u2640\uFE0F","\u{1F6B6}","\u{1F6B6}\u200D\u2642\uFE0F","\u{1F6B6}\u200D\u2640\uFE0F","\u{1F9CD}","\u{1F9CD}\u200D\u2642\uFE0F","\u{1F9CD}\u200D\u2640\uFE0F","\u{1F9CE}","\u{1F9CE}\u200D\u2642\uFE0F","\u{1F9CE}\u200D\u2640\uFE0F","\u{1F468}\u200D\u{1F9AF}","\u{1F469}\u200D\u{1F9AF}","\u{1F468}\u200D\u{1F9BC}","\u{1F469}\u200D\u{1F9BC}","\u{1F468}\u200D\u{1F9BD}","\u{1F469}\u200D\u{1F9BD}","\u{1F3C3}","\u{1F3C3}\u200D\u2642\uFE0F","\u{1F3C3}\u200D\u2640\uFE0F","\u{1F483}","\u{1F57A}","\u{1F574}\uFE0F","\u{1F9D6}","\u{1F9D6}\u200D\u2642\uFE0F","\u{1F9D6}\u200D\u2640\uFE0F","\u{1F9D7}","\u{1F9D7}\u200D\u2642\uFE0F","\u{1F9D7}\u200D\u2640\uFE0F","\u{1F3C7}","\u{1F3C2}","\u{1F3CC}\uFE0F","\u{1F3CC}\uFE0F\u200D\u2642\uFE0F","\u{1F3CC}\uFE0F\u200D\u2640\uFE0F","\u{1F3C4}","\u{1F3C4}\u200D\u2642\uFE0F","\u{1F3C4}\u200D\u2640\uFE0F","\u{1F6A3}","\u{1F6A3}\u200D\u2642\uFE0F","\u{1F6A3}\u200D\u2640\uFE0F","\u{1F3CA}","\u{1F3CA}\u200D\u2642\uFE0F","\u{1F3CA}\u200D\u2640\uFE0F","\u26F9\uFE0F","\u26F9\uFE0F\u200D\u2642\uFE0F","\u26F9\uFE0F\u200D\u2640\uFE0F","\u{1F3CB}\uFE0F","\u{1F3CB}\uFE0F\u200D\u2642\uFE0F","\u{1F3CB}\uFE0F\u200D\u2640\uFE0F","\u{1F6B4}","\u{1F6B4}\u200D\u2642\uFE0F","\u{1F6B4}\u200D\u2640\uFE0F","\u{1F6B5}","\u{1F6B5}\u200D\u2642\uFE0F","\u{1F6B5}\u200D\u2640\uFE0F","\u{1F938}","\u{1F938}\u200D\u2642\uFE0F","\u{1F938}\u200D\u2640\uFE0F","\u{1F93D}","\u{1F93D}\u200D\u2642\uFE0F","\u{1F93D}\u200D\u2640\uFE0F","\u{1F93E}","\u{1F93E}\u200D\u2642\uFE0F","\u{1F93E}\u200D\u2640\uFE0F","\u{1F939}","\u{1F939}\u200D\u2642\uFE0F","\u{1F939}\u200D\u2640\uFE0F","\u{1F9D8}","\u{1F9D8}\u200D\u2642\uFE0F","\u{1F9D8}\u200D\u2640\uFE0F","\u{1F6C0}","\u{1F6CC}","\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}","\u{1F46D}","\u{1F46B}","\u{1F46C}"]);function b(b){return a.has(b)}function c(a){return[...a].filter(a=>!e(a.codePointAt(0))).join("")}function d(a,b){let c=[...a].map(a=>a.codePointAt(0));return c[1]&&(e(c[1])||65039===c[1])?c[1]=b:c.splice(1,0,b),String.fromCodePoint(...c)}function e(a){return a>=127995&&a<=127999}function f(a){switch(a){case 1:return 127995;case 2:return 127996;case 3:return 127997;case 4:return 127998;case 5:return 127999;default:return null}}class GEmojiElement extends HTMLElement{get image(){return this.firstElementChild instanceof HTMLImageElement?this.firstElementChild:null}get tone(){return(this.getAttribute("tone")||"").split(" ").map(a=>{let b=parseInt(a,10);return b>=0&&b<=5?b:0}).join(" ")}set tone(a){this.setAttribute("tone",a)}connectedCallback(){if(null===this.image&&!function(){let a=/\bWindows NT 6.1\b/.test(navigator.userAgent),b=/\bWindows NT 6.2\b/.test(navigator.userAgent),c=/\bWindows NT 6.3\b/.test(navigator.userAgent),d=/\bFreeBSD\b/.test(navigator.userAgent),e=/\bLinux\b/.test(navigator.userAgent)&&!/\bAndroid\b/.test(navigator.userAgent);return!(a||b||c||e||d)}()){let a=this.getAttribute("fallback-src");if(a){this.textContent="";let b=h(this);b.src=a,this.appendChild(b)}}this.hasAttribute("tone")&&g(this)}static get observedAttributes(){return["tone"]}attributeChangedCallback(a){"tone"===a&&g(this)}}function g(a){if(a.image)return;let e=a.tone.split(" ").map(a=>parseInt(a,10));if(0===e.length)a.textContent=c(a.textContent||"");else if(1===e.length){let g=e[0];a.textContent=0===g?c(a.textContent||""):function(a,e){let g=c(a);if(!b(g))return a;let h=f(e);return h?g.split("\u200D").map(a=>b(a)?d(a,h):a).join("\u200D"):a}(a.textContent||"",g)}else a.textContent=function(a,e){let g=c(a);if(!b(g))return a;let h=e.map(a=>f(a));return g.split("\u200D").map(a=>{if(!b(a))return a;let c=h.shift();return c?d(a,c):a}).join("\u200D")}(a.textContent||"",e)}function h(a){let b=document.createElement("img");return b.className="emoji",b.alt=a.getAttribute("alias")||"",b.height=20,b.width=20,b}window.customElements.get("g-emoji")||(window.GEmojiElement=GEmojiElement,window.customElements.define("g-emoji",GEmojiElement))},88823(){let a="complete"===document.readyState?Promise.resolve():new Promise(a=>{window.addEventListener("load",a)});class TypingEffectElement extends HTMLElement{async connectedCallback(){await a,this.content&&await b(this.lines,this.content,this.characterDelay,this.lineDelay),this.cursor&&(this.cursor.hidden=!0),this.dispatchEvent(new CustomEvent("typing:complete",{bubbles:!0,cancelable:!0}))}get content(){return this.querySelector('[data-target="typing-effect.content"]')}get cursor(){return this.querySelector('[data-target="typing-effect.cursor"]')}get lines(){let a=this.getAttribute("data-lines");try{return a?JSON.parse(a):[]}catch(b){return[]}}get prefersReducedMotion(){return window.matchMedia("(prefers-reduced-motion)").matches}get characterDelay(){return this.prefersReducedMotion?0:Math.max(0,Math.min(Math.floor(Number(this.getAttribute("data-character-delay"))),2147483647))||40}set characterDelay(a){if(a>2147483647||a<0)throw new DOMException("Value is negative or greater than the allowed amount");this.setAttribute("data-character-delay",String(a))}get lineDelay(){return this.prefersReducedMotion?0:Math.max(0,Math.min(Math.floor(Number(this.getAttribute("data-line-delay"))),2147483647))||40}set lineDelay(a){if(a>2147483647||a<0)throw new DOMException("Value is negative or greater than the allowed amount");this.setAttribute("data-line-delay",String(a))}}async function b(a,b,d,e){for(let f=0;f{setTimeout(b,a)})}window.customElements.get("typing-effect")||(window.TypingEffectElement=TypingEffectElement,window.customElements.define("typing-effect",TypingEffectElement))}}]) +//# sourceMappingURL=vendors-node_modules_primer_view-components_app_components_primer_primer_js-node_modules_gith-6a1af4-7cbab24f60c4.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/D15B621D15B6305FDDDD8BA21B95BD5FFD1ACCB7 b/home/.surf/cache/WebKitCache/Version 16/Blobs/D15B621D15B6305FDDDD8BA21B95BD5FFD1ACCB7 new file mode 100644 index 0000000..27a24e8 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/D15B621D15B6305FDDDD8BA21B95BD5FFD1ACCB7 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/D240D55217FD58C0375D0434A6C9D30C8C64A02D b/home/.surf/cache/WebKitCache/Version 16/Blobs/D240D55217FD58C0375D0434A6C9D30C8C64A02D new file mode 100644 index 0000000..2140c0a Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/D240D55217FD58C0375D0434A6C9D30C8C64A02D differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/D297B36D1B3A4C2F51A6455BCAEFB827079D1827 b/home/.surf/cache/WebKitCache/Version 16/Blobs/D297B36D1B3A4C2F51A6455BCAEFB827079D1827 new file mode 100644 index 0000000..b061403 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/D297B36D1B3A4C2F51A6455BCAEFB827079D1827 @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
              "],col:[2,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
              ",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0c?a.href:a.href.substr(0,c));a=c;break;case "protocol":a=d;break;case "host":a=a.hostname.replace(C,"").toLowerCase();c&&(c=/^www\d*\./.exec(a))&&c[0]&&(a=a.substr(c[0].length));break;case "port":a=String(Number(a.port)||("http"===d?80:"https"===d?443:""));break;case "path":a.pathname||a.hostname||v(1);a="/"===a.pathname.substr(0,1)?a.pathname:"/"+a.pathname;a=a.split("/");0<=[].indexOf(a[a.length-1])&&(a[a.length-1]="");a=a.join("/");break;case "query":a=a.search.replace("?","");break;case "extension":a= +a.pathname.split(".");a=1>4);64!=h&&(c+=String.fromCharCode(f<<4&240|h>>2),64!=g&&(c+=String.fromCharCode(h<<6&192|g)))}};var L;var N=function(){var a=ca,b=da,c=M(),d=function(h){a(h.target||h.srcElement||{})},e=function(h){b(h.target||h.srcElement||{})};if(!c.init){B("mousedown",d);B("keyup",d);B("submit",e);var f=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){b(this);f.call(this)};c.init=!0}},O=function(a,b,c,d,e){a={callback:a,domains:b,fragment:2===c,placement:c,forms:d,sameHost:e};M().decorators.push(a)},P=function(a,b,c){for(var d=M().decorators,e={},f=0;f>2;l=(l&3)<<4|r>>4;r=(r&15)<<2|x>>6;x&=63;m||(x=64,k||(r=64));h.push(I[ha],I[l],I[r],I[x])}f.call(e,h.join(""))}}a=b.join("*");return["1",R(a),a].join("*")}; +function R(a,b){a=[w.navigator.userAgent,(new Date).getTimezoneOffset(),A.userLanguage||A.language,Math.floor((new Date(Date.now())).getTime()/60/1E3)-(void 0===b?0:b),a].join("*");if(!(b=L)){b=Array(256);for(var c=0;256>c;c++){for(var d=c,e=0;8>e;e++)d=d&1?d>>>1^3988292384:d>>>1;b[c]=d}}L=b;b=4294967295;for(c=0;c>>8^L[(b^a.charCodeAt(c))&255];return((b^-1)>>>0).toString(36)} +function ia(a){return function(b){var c=G(w.location.href),d=c.search.replace("?","");a:{var e=d.split("&");for(var f=0;fb;++b){var c=ea.exec(a);if(c){var d=c;break b}a=decodeURIComponent(a)}d=void 0}if(d&&"1"===d[1]){var e=d[2],f=d[3];b:{for(d=0;3>d;++d)if(e===R(f,d)){var h=!0;break b}h=!1}if(h){var g=f;break a}v(7)}}g=void 0}e=g;if(void 0!==e){g={};var k=e?e.split("*"):[];for(e=0;e+1>21:b}return b};/* + + Copyright The Closure Library Authors. + SPDX-License-Identifier: Apache-2.0 +*/ +var $c=function(a){this.C=a||[]};$c.prototype.set=function(a){this.C[a]=!0};$c.prototype.encode=function(){for(var a=[],b=0;b\x3c/script>'))):(c=M.createElement("script"),c.type="text/javascript",c.async=!0,c.src=ff.createScriptURL(a),d&&(c.onload=d),e&&(c.onerror=e),b&&(c.id=b),g&&c.setAttribute("nonce", +g),a=M.getElementsByTagName("script")[0],a.parentNode.insertBefore(c,a))}},be=function(a,b){return E(M.location[b?"href":"search"],a)},E=function(a,b){return(a=a.match("(?:&|#|\\?)"+K(b).replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")+"=([^&#]*)"))&&2==a.length?a[1]:""},xa=function(){var a=""+M.location.hostname;return 0==a.indexOf("www.")?a.substring(4):a},de=function(a,b){var c=a.indexOf(b);if(5==c||6==c)if(a=a.charAt(c+b.length),"/"==a||"?"==a||""==a||":"==a)return!0;return!1},za=function(a,b){if(1== +b.length&&null!=b[0]&&"object"===typeof b[0])return b[0];for(var c={},d=Math.min(a.length+1,b.length),e=0;eg.length||!c&&3!==g.length)a&&(a.na=!0);else if(Number(g[1])){d[b[e].ja]?a&&(a.pa=!0):d[b[e].ja]=[];var ca={version:g[0],timestamp:1E3*Number(g[1]),qa:g[2]};c&&3=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b, +c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c,d){var e=O.XMLHttpRequest;if(!e)return!1;var g=new e;if(!("withCredentials"in g))return!1;a=a.replace(/^http:/,"https:");g.open("POST",a,!0);g.withCredentials=!0;g.setRequestHeader("Content-Type","text/plain");g.onreadystatechange=function(){if(4==g.readyState){if(d&&"text/plain"===g.getResponseHeader("Content-Type"))try{Ea(d,g.responseText,c)}catch(ca){ge("xhr", +"rsp"),c()}else c();g=null}};g.send(b);return!0},Ea=function(a,b,c){if(1>b.length)ge("xhr","ver","0"),c();else if(3=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";} +function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];ue.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});!1===a.get(xe)&&b.push("npa=1");b.push("z="+Bd());a.set(Ra,b.join("&"),!0)} +function Sa(a){var b=P(a,fa);!b&&a.get(Vd)&&(b="beacon");var c=P(a,gd),d=P(a,oe),e=c||(d||bd(!1)+"")+"/collect";switch(P(a,ad)){case "d":e=c||(d||bd(!1)+"")+"/j/collect";b=a.get(qe)||void 0;pe(e,P(a,Ra),b,a.Z(Ia));break;default:b?(c=P(a,Ra),d=(d=a.Z(Ia))||ua,"image"==b?wc(e,c,d):"xhr"==b&&wd(e,c,d)||"beacon"==b&&x(e,c,d)||ba(e,c,d)):ba(e,P(a,Ra),a.Z(Ia))}e=P(a,Na);e=h(e);b=e.hitcount;e.hitcount=b?b+1:1;e.first_hit||(e.first_hit=(new Date).getTime());e=P(a,Na);delete h(e).pending_experiments;a.set(Ia, +ua,!0)}function Hc(a){qc().expId&&a.set(Nc,qc().expId);qc().expVar&&a.set(Oc,qc().expVar);var b=P(a,Na);if(b=h(b).pending_experiments){var c=[];for(d in b)b.hasOwnProperty(d)&&b[d]&&c.push(encodeURIComponent(d)+"."+encodeURIComponent(b[d]));var d=c.join("!")}else d=void 0;d&&((b=a.get(m))&&(d=b+"!"+d),a.set(m,d,!0))}function cd(){if(O.navigator&&"preview"==O.navigator.loadPurpose)throw"abort";} +function yd(a){var b=O.gaDevIds||[];if(ka(b)){var c=a.get("&did");qa(c)&&0b-9E5};var hd=function(){return Math.round(2147483647*Math.random())},Bd=function(){try{var a=new Uint32Array(1);O.crypto.getRandomValues(a);return a[0]&2147483647}catch(b){return hd()}};function Ta(a){var b=R(a,Ua);500<=b&&J(15);var c=P(a,Va);if("transaction"!=c&&"item"!=c){c=R(a,Wa);var d=(new Date).getTime(),e=R(a,Xa);0==e&&a.set(Xa,d);e=Math.round(2*(d-e)/1E3);0=c)throw"abort";a.set(Wa,--c)}a.set(Ua,++b)};var Ya=function(){this.data=new ee};Ya.prototype.get=function(a){var b=$a(a),c=this.data.get(a);b&&void 0==c&&(c=ea(b.defaultValue)?b.defaultValue():b.defaultValue);return b&&b.Z?b.Z(this,a,c):c};var P=function(a,b){a=a.get(b);return void 0==a?"":""+a},R=function(a,b){a=a.get(b);return void 0==a||""===a?0:Number(a)};Ya.prototype.Z=function(a){return(a=this.get(a))&&ea(a)?a:ua}; +Ya.prototype.set=function(a,b,c){if(a)if("object"==typeof a)for(var d in a)a.hasOwnProperty(d)&&ab(this,d,a[d],c);else ab(this,a,b,c)}; +var ab=function(a,b,c,d){if(void 0!=c)switch(b){case Na:wb.test(c)}var e=$a(b);e&&e.o?e.o(a,b,c,d):a.data.set(b,c,d)},gf={hitPayload:88,location:89,referrer:90,title:91,buildHitTask:93,sendHitTask:94,displayFeaturesTask:95,customTask:97,cookieName:98,cookieDomain:99,cookiePath:100,cookieExpires:101,cookieUpdate:102,cookieFlags:103,storage:104,_x_19:105,transportUrl:106,allowAdFeatures:107,sampleRate:108}; +function hf(a,b){var c=gf[a];c&&J(c);"displayFeaturesTask"===a&&void 0==b&&J(96);/.*Task$/.test(a)&&J(92)}function mf(a,b){if(a)if("object"==typeof a)for(var c in a)a.hasOwnProperty(c)&&hf(c,b);else hf(a,b)};var ue=new ee,ve=[],bb=function(a,b,c,d,e){this.name=a;this.F=b;this.Z=d;this.o=e;this.defaultValue=c},$a=function(a){var b=ue.get(a);if(!b)for(var c=0;c=b?!1:!0},gc=function(a){var b={};if(Ec(b)||Fc(b)){var c=b[Eb];void 0==c||Infinity==c||isNaN(c)||(0c)a[b]=void 0},Fd=function(a){return function(b){if("pageview"==b.get(Va)&&!a.I){a.I=!0;var c=aa(b),d=0a.length)J(12);else{for(var d=[],e=0;e=a&&d.push({hash:ca[0],R:e[g],O:ca})}if(0!=d.length)return 1==d.length?d[0]:Zc(b,d)||Zc(c,d)||Zc(null,d)||d[0]}function Zc(a,b){if(null==a)var c=a=1;else c=La(a),a=La(D(a,".")?a.substring(1):"."+a);for(var d=0;de?"?":"&")+a+b.substring(e);b=b.replace(/&+_ga=/,"&_ga=");return b=b.replace(RegExp("&+_gac="),"&_gac=")},rd=function(a,b){if(b&&b.action)if("get"==b.method.toLowerCase()){a=a.target.get("linkerParam").split("&"); +for(var c=0;carguments.length)){if("string"===typeof arguments[0]){var b=arguments[0];var c=[].slice.call(arguments,1)}else b=arguments[0]&&arguments[0][Va],c=arguments;b&&(c=za(me[b]||[],c),c[Va]=b,mf(c),this.model.set(c,void 0,!0),this.filters.D(this.model),this.model.data.m={})}};pc.prototype.ma=function(a,b){var c=this;u(a,c,b)||(v(a,function(){u(a,c,b)}),y(String(c.get(V)),a,void 0,b,!0))}; +var td=function(a,b){var c=P(a,U);a.data.set(la,"_ga"==c?"_gid":c+"_gid");if("cookie"==P(a,ac)){hc=!1;c=Ca(P(a,U));c=Xd(a,c);if(!c){c=P(a,W);var d=P(a,$b)||xa();c=Xc("__utma",d,c);void 0!=c?(J(10),c=c.O[1]+"."+c.O[2]):c=void 0}c&&(hc=!0);if(d=c&&!a.get(Hd))if(d=c.split("."),2!=d.length)d=!1;else if(d=Number(d[1])){var e=R(a,Zb);d=d+e<(new Date).getTime()/1E3}else d=!1;d&&(c=void 0);c&&(a.data.set(xd,c),a.data.set(Q,c),(c=uc(a))&&a.data.set(I,c));a.get(je)&&(c=a.get(ce),d=a.get(ie),!c||d&&"aw.ds"!= +d)&&(c={},d=(M?df(c):{})[P(a,Na)],le(c),d&&0!=d.length&&(c=d[0],a.data.set(fe,c.timestamp/1E3),a.data.set(ce,c.qa)));a.get(je)&&(c=a.get(Se),d={},e=(M?df(d,"_gac_gb",!0):{})[P(a,Na)],ef(d),e&&0!=e.length&&(d=e[0],e=d.qa,c&&c!==e||(d.labels&&d.labels.length&&(e+="."+d.labels.join(".")),a.data.set(Te,d.timestamp/1E3),a.data.set(Se,e))))}if(a.get(Hd)){c=be("_ga",!!a.get(cc));var g=be("_gl",!!a.get(cc));d=De.get(a.get(cc));e=d._ga;g&&0=ca[0]||0>=ca[1]?"":ca.join("x");a.set(rb,c);c=a.set;var k;if((e=(e=O.navigator)?e.plugins:null)&&e.length)for(l=0;la.split("/")[0].indexOf(":")&&(a=g+d[2].substring(0,d[2].lastIndexOf("/"))+"/"+a);b.href=a;c=kf(b);return{protocol:(b.protocol||"").toLowerCase(),host:c[0],port:c[1],path:c[2],query:b.search||"",url:a||""}},cf=function(a,b){return a&& +0<=a.indexOf("/")?a:(b||bd(!1))+"/plugins/ua/"+a};var Z={ga:function(){Z.fa=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.fa.concat(b);for(Z.fa=[];0c;c++){var d=b[c].src;if(d&&0==d.indexOf(bd(!0)+"/analytics")){b=!0;break a}}b=!1}b&&(Ba=!0)}(O.gaplugins=O.gaplugins||{}).Linker=Dc;b=Dc.prototype;C("linker",Dc);X("decorate",b,b.ca,20);X("autoLink",b,b.S,25);X("passthrough",b,b.$,25);C("displayfeatures",fd);C("adfeatures",fd);Z.D.apply(N,a)}};var nf=N.N,of=O[gb];of&&of.r?nf():z(nf);z(function(){Z.D(["provide","render",ua])});})(window); diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/D33E20875D9FA8BB6ACF019190BA86EB4046EF24 b/home/.surf/cache/WebKitCache/Version 16/Blobs/D33E20875D9FA8BB6ACF019190BA86EB4046EF24 new file mode 100644 index 0000000..5e81c96 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/D33E20875D9FA8BB6ACF019190BA86EB4046EF24 @@ -0,0 +1,16147 @@ +/* Bundle Includes: + * js/fm/filemanager.js + * js/fm/utils.js + * js/fm/megadata.js + * js/fm/megadata/account.js + * js/fm/megadata/avatars.js + * js/fm/megadata/contacts.js + * js/fm/megadata/filters.js + * js/fm/megadata/menus.js + * js/fm/megadata/nodes.js + */ + +function FileManager() { + "use strict"; + + this.logger = new MegaLogger('FileManager'); + this.columnsWidth = { + cloud: Object.create(null), + inshare: Object.create(null), + outshare: Object.create(null) + }; + + this.columnsWidth.cloud.fav = { max: 50, min: 50, curr: 50, viewed: true }; + this.columnsWidth.cloud.fname = { max: 5000, min: 180, curr: '100%', viewed: true }; + this.columnsWidth.cloud.label = { max: 130, min: 80, curr: 80, viewed: false }; + this.columnsWidth.cloud.size = { max: 160, min: 100, curr: 100, viewed: true }; + this.columnsWidth.cloud.type = { max: 180, min: 130, curr: 130, viewed: true }; + this.columnsWidth.cloud.timeAd = { max: 180, min: 130, curr: 130, viewed: true }; + this.columnsWidth.cloud.timeMd = { max: 180, min: 130, curr: 130, viewed: false }; + this.columnsWidth.cloud.versions = { max: 180, min: 130, curr: 130, viewed: false }; + this.columnsWidth.cloud.extras = { max: 140, min: 93, curr: 93, viewed: true }; + + this.columnsWidth.makeNameColumnStatic = function() { + + const header = document.querySelector('.files-grid-view.fm .grid-table thead th[megatype="fname"]'); + if (!header) { + console.assert(false); + return; + } + + // check if it's still dynamic + if (header.style.width.startsWith('calc(') || header.style.width === '100%') { + + var currWidth = getComputedStyle(header).width; + + M.columnsWidth.cloud.fname.curr = currWidth.replace('px', '') | 0; + header.style.width = currWidth; + } + }; + + this.columnsWidth.updateColumnStyle = function() { + + for (var col in M.columnsWidth.cloud) { + + const header = document.querySelector(`.files-grid-view.fm th[megatype="${col}"]`); + + if (!header) { + continue; + } + + if (M.columnsWidth.cloud[col]) { + + if (typeof M.columnsWidth.cloud[col].curr !== 'number') { + + if (col === 'fname') { + + // This is large screen, lets show full table + if (document.body.offsetWidth > 1800) { + M.columnsWidth.cloud[col].curr = header.style.width = '100%'; + } + else { + // hardcoded spacing values due to performance. + // Width of .nw-fm-left-icons-panel = 64px; + // Width of .grid-wrapper margin left and right = 52px; + // Width of spacing want to achieve = 560px on small screen or depends on active column; + // ================= + // Sum of above = 676px on small screen or depends on active column + + M.columnsWidth.cloud[col].curr = header.style.width = + `calc(100vw - ${$.leftPaneResizable.element.outerWidth() + 676}px)`; + } + } + + const headerWidth = getComputedStyle(header).width.replace('px', '') | 0; + + if (headerWidth < M.columnsWidth.cloud[col].min) { + header.style.width = `${M.columnsWidth.cloud[col].min}px`; + } + else if (headerWidth > M.columnsWidth.cloud[col].max) { + header.style.width = `${M.columnsWidth.cloud[col].max}px`; + } + } + + if (M.columnsWidth.cloud[col].viewed) { + $('.grid-table.fm').addClass(`v-${col}`); + } + else { + $('.grid-table.fm').removeClass(`v-${col}`); + } + } + } + }; +} +FileManager.prototype.constructor = FileManager; + +FileManager.prototype.showExpiredBusiness = function() { + 'use strict'; + M.require('businessAcc_js', 'businessAccUI_js').done(function() { + var business_ui = new BusinessAccountUI(); + business_ui.showExpiredDialog(u_attr.b.m); + }); +}; + +/** Check if this is a business expired account, or ODW paywall. */ +FileManager.prototype.isInvalidUserStatus = function() { + 'use strict'; + if (mega.paywall) { + if (u_attr.b && u_attr.b.s === -1) { + if ($.hideContextMenu) { + $.hideContextMenu(); + } + M.showExpiredBusiness(); + return true; + } + if (u_attr.uspw) { + if ($.hideContextMenu) { + $.hideContextMenu(); + } + M.showOverStorageQuota(EPAYWALL); + return true; + } + } + return false; +}; + +/** + * Initialize the rendering of the cloud/file-manager + * @details Former renderfm() + * @returns {MegaPromise} + */ +FileManager.prototype.initFileManager = function() { + "use strict"; + + var promise = new MegaPromise(); + var tpromise; + + if (d) { + console.time('renderfm'); + } + + this.initFileManagerUI(); + this.sortByName(); + + if (is_mobile) { + tpromise = MegaPromise.resolve(); + } + else { + tpromise = this.renderTree(); + tpromise.always(function() { + delay('render:path_breadcrumbs', () => M.renderPathBreadcrumbs()); + }); + } + + tpromise + .always(function() { + var $treesub = $('#treesub_' + M.RootID); + if (!$treesub.hasClass('opened')) { + $treesub.addClass('opened'); + } + + var path = $.autoSelectNode && M.getNodeByHandle($.autoSelectNode).p || M.currentdirid || getLandingPage(); + + if (path) { + mBroadcaster.once('fm:initialized', SoonFc(fmLeftMenuUI)); + } + + M.openFolder(path, true) + .always(function() { + if (megaChatIsReady) { + megaChat.renderMyStatus(); + } + + if (d) { + console.timeEnd('renderfm'); + } + + promise.resolve.apply(promise, arguments); + }); + }); + return promise; +}; + +/** + * Invoke callback once the fm has been initialized + * @param {Boolean} [ifMaster] Invoke callback if running under a master tab + * @param {Function} callback The function to invoke + */ +FileManager.prototype.onFileManagerReady = function(ifMaster, callback) { + 'use strict'; + + if (typeof ifMaster === 'function') { + callback = ifMaster; + ifMaster = false; + } + + callback = (function(callback) { + return function() { + if (!ifMaster || mBroadcaster.crossTab.master) { + onIdle(callback); + } + }; + })(callback); + + if (fminitialized) { + onIdle(callback); + } + else { + mBroadcaster.once('fm:initialized', callback); + } +}; + +/** + * Initialize the cloud/file-manager UI components + * @details Former initUI() + */ +FileManager.prototype.initFileManagerUI = function() { + "use strict"; + + if (d) { + console.time('initUI'); + } + $('.not-logged .fm-not-logged-button.create-account').rebind('click', function() { + loadSubPage('register'); + }); + + $('.fm-main').removeClass('l-pane-collapsed'); + $('button.l-pane-visibility').removeClass('active'); + + $('.fm-dialog-overlay').rebind('click.fm', function(ev) { + if ($.dialog === 'pro-login-dialog' + || $.dialog === 'share' + || $.dialog === 'share-add' + || $.dialog === 'cookies-dialog' + || $.dialog === 'affiliate-redeem-dialog' + || $.dialog === 'discount-offer' + || $.dialog === 'voucher-info-dlg' + || $.dialog === "chat-incoming-call" + || $.dialog === 'onboardingDialog' + || $.dialog === 'stripe-pay' + || $.dialog === 'start-meeting-dialog' + || String($.dialog).startsWith('verify-email') + || localStorage.awaitingConfirmationAccount) { + + return false; + } + showLoseChangesWarning().done(function() { + closeDialog(ev); + }); + $.hideContextMenu(); + + // For ephemeral session redirect to 'fm' page + // if user clicks overlay instead Yes/No or close icon 'x' + // One situation when this is used, is when ephemeral user + // trying to access settings directly via url + if (u_type === 0 && !folderlink) { + loadSubPage('fm'); + } + }); + + if (folderlink) { + $('.nw-fm-left-icons-panel .logo').removeClass('hidden'); + $('.fm-main').addClass('active-folder-link'); + $('.activity-status-block').addClass('hidden'); + + var $prodNav = $('.fm-products-nav').text(''); + if (!u_type) { + $prodNav.safeHTML(translate(pages['pagesmenu'])); + onIdle(clickURLs); + } + + $('button.l-pane-visibility').rebind('click.leftpane', function() { + var $this = $(this); + var $breadcrumbs = $('.fm-right-header .fm-breadcrumbs-block'); + + if ($this.hasClass('active')) { + if (M.currentdirid === M.RootID) { + $breadcrumbs.addClass('deactivated'); + } + $this.removeClass('active'); + $('.fm-main').removeClass('l-pane-collapsed'); + } + else { + $this.addClass('active'); + $('.fm-main').addClass('l-pane-collapsed'); + + M.onFileManagerReady(function() { + if (M.currentdirid === M.RootID) { + $breadcrumbs.removeClass('deactivated') + .find('.folder-link .right-arrow-bg') + .safeHTML('@@', M.getNameByHandle(M.RootID)); + } + }); + } + + // reposition click hint, if opened + if (mega.cttHintTimer) { + M.showClickHint(true); + } + $.tresizer(); + }); + + if (!M.tree[M.RootID]) { + $('button.l-pane-visibility').trigger('click'); + } + } + else { + $('.nw-fm-left-icons-panel .logo').addClass('hidden'); + $('.fm-main').removeClass('active-folder-link'); + $('.fm-products-nav').text(''); + } + + $.doDD = function(e, ui, a, type) { + + // Prevent drop behavior for the `Local` component + // See: ui/meetings/local.jsx + if (ui.helper.hasClass('local-stream')) { + return; + } + + function nRevert(r) { + try { + $(ui.draggable).draggable("option", "revert", false); + if (r) { + $(ui.draggable).remove(); + } + } + catch (e) { + } + } + + var c = $(ui.draggable).attr('class'); + var t, ids, dd; + + + if (c && c.indexOf('nw-fm-tree-item') > -1) { + // tree dragged: + var id = $(ui.draggable).attr('id'); + if (id.indexOf('treea_') > -1) { + ids = [id.replace('treea_', '')]; + } + } + else { + if ($.dragSelected && $.dragSelected.length > 0) { + ids = $.dragSelected; + } + else if ($.selected && $.selected.length > 0) { + // grid dragged: + ids = $.selected; + } + } + + // Workaround a problem where we get over[1] -> over[2] -> out[1] + if (a === 'out' && $.currentOver !== $(e.target).attr('id')) { + a = 'noop'; + } + + if (type == 1) { + // tree dropped: + var c = $(e.target).attr('class'); + if (c && c.indexOf('nw-fm-left-icon') > -1) { + dd = 'nw-fm-left-icon'; + if (a === 'drop') { + if (c.indexOf('cloud') > -1) { + t = M.RootID; + } + else if (c.indexOf('rubbish-bin') > -1) { + t = M.RubbishID; + } + else if (c.indexOf('transfers') > -1) { + dd = 'download'; + } + } + } + else if (c && c.indexOf('js-lpbtn') > -1 && a === 'drop') { + if (c.indexOf('cloud-drive') > -1) { + // Drag and drop to the cloud drive in the file manager left panel + t = M.RootID; + } + else if (c.indexOf('rubbish-bin') > -1) { + // Drag and drop to the rubbish bin in the file manager left panel + t = M.RubbishID; + } + } + else if (c && c.indexOf('js-lpbtn') > -1 && c.indexOf('cloud-drive') > -1 && a === 'over') { + // Drag and over the cloud drive in the file manager left panel + t = M.RootID; + } + else if (c && c.indexOf('nw-fm-tree-item') > -1 && !$(e.target).visible(!0)) { + dd = 'download'; + } + else if ( + $(e.target).is('ul.conversations-pane > li') || + $(e.target).closest('ul.conversations-pane > li').length > 0 || + $(e.target).is('.messages-block') + ) { + if (M.isFile(ids)) { + dd = 'chat-attach'; + } + else { + dd = 'noop'; + } + } + else { + var t = $(e.target).attr('id'); + if (t && t.indexOf('treea_') > -1) { + t = t.replace('treea_', ''); + } + else if (t && t.indexOf('path_') > -1) { + t = t.replace('path_', ''); + } + else if (M.currentdirid !== 'shares' || !M.d[t] || M.getNodeRoot(t) !== 'shares') { + t = undefined; + } + } + } + else { + // grid dropped: + var c = $(e.target).attr('class'); + if (c && c.indexOf('folder') > -1) { + t = $(e.target).attr('id'); + } + } + + var setDDType = function() { + if (ids && ids.length && t) { + dd = ddtype(ids, t, e.altKey); + if (dd === 'move' && e.altKey) { + dd = 'copy'; + } + } + }; + + if (a !== 'noop') { + if ($.liTimerK) { + clearTimeout($.liTimerK); + } + $('body').removeClassWith('dndc-'); + $('.hide-settings-icon').removeClass('hide-settings-icon'); + } + setDDType(); + + if (a === 'drop' || a === 'out' || a === 'noop') { + $(e.target).removeClass('dragover'); + // if (a !== 'noop') $('.dragger-block').addClass('drag'); + } + else if (a === 'over') { + var id = $(e.target).attr('id'); + if (!id) { + $(e.target).uniqueId(); + id = $(e.target).attr('id'); + } + + $.currentOver = id; + setTimeout(function() { + if ($.currentOver === id) { + var h; + if (id.indexOf('treea_') > -1) { + h = id.replace('treea_', ''); + } + else { + var c = $(id).attr('class'); + if (c && c.indexOf('cloud-drive-item') > -1) { + h = M.RootID; + } + else if (c && c.indexOf('recycle-item') > -1) { + h = M.RubbishID; + } + else if (c && c.indexOf('contacts-item') > -1) { + h = 'contacts'; + } + } + if (h) { + M.onTreeUIExpand(h, 1); + } + else if ($(e.target).hasClass('nw-conversations-item')) { + $(e.target).click(); + } + else if ($(e.target).is('ul.conversations-pane > li')) { + $(e.target).click(); + } + } + }, 890); + + if (dd === 'move') { + $.draggingClass = ('dndc-move'); + } + else if (dd === 'copy') { + $.draggingClass = ('dndc-copy'); + } + else if (dd === 'download') { + $.draggingClass = ('dndc-download'); + } + else if (dd === 'nw-fm-left-icon') { + var c = '' + $(e.target).attr('class'); + + $.draggingClass = ('dndc-warning'); + if (c.indexOf('rubbish-bin') > -1) { + $.draggingClass = ('dndc-to-rubbish'); + } + else if (c.indexOf('conversations') > -1) { + $.draggingClass = ('dndc-to-conversations'); + } + else if (c.indexOf('shared-with-me') > -1) { + $.draggingClass = ('dndc-to-shared'); + } + else if (c.indexOf('transfers') > -1) { + $.draggingClass = ('dndc-download'); + } + else if (c.indexOf('cloud-drive') > -1) { + $.draggingClass = ('dndc-move'); + } + else { + c = null; + } + + if (c) { + if ($.liTooltipTimer) { + clearTimeout($.liTooltipTimer); + } + $.liTimerK = setTimeout(function() { + $(e.target).click() + }, 920); + } + } + else if (dd === 'chat-attach') { + $.draggingClass = ('dndc-to-conversations'); + } + else { + $.draggingClass = M.d[t] ? 'dndc-warning' : 'dndc-move'; + } + + $('body').addClass($.draggingClass); + + $(e.target).addClass('dragover'); + $($.selectddUIgrid + ' ' + $.selectddUIitem).removeClass('ui-selected'); + if ($(e.target).hasClass('folder')) { + $(e.target).addClass('ui-selected').find('.file-settings-icon, .grid-url-arrow').addClass('hide-settings-icon'); + } + } + // if (d) console.log('!a:'+a, dd, $(e.target).attr('id'), (M.d[$(e.target).attr('id').split('_').pop()]||{}).name, $(e.target).attr('class'), $(ui.draggable.context).attr('class')); + + var onMouseDrop = function() { + if (dd === 'nw-fm-left-icon') { + // do nothing + } + else if ($(e.target).hasClass('nw-conversations-item') || dd === 'chat-attach') { + nRevert(); + + // drop over a chat window + var currentRoom = megaChat.getCurrentRoom(); + assert(currentRoom, 'Current room missing - this drop action should be impossible.'); + currentRoom.attachNodes(ids); + } + else if (dd === 'move') { + nRevert(); + $.moveids = ids; + $.movet = t; + var $ddelm = $(ui.draggable); + setTimeout(function() { + if ($.movet === M.RubbishID) { + fmremove($.moveids); + if (selectionManager) { + selectionManager.clear_selection(); + } + } + else { + M.moveNodes($.moveids, $.movet) + .done(function(moves) { + if (moves && M.currentdirid !== 'out-shares' && M.currentdirid !== 'public-links' + && String(M.currentdirid).split("/")[0] !== "search") { + $ddelm.remove(); + } + }); + if (window.selectionManager) { + selectionManager.resetTo($.movet); + } + } + }, 50); + } + else if ((dd === 'copy') || (dd === 'copydel')) { + nRevert(); + $.copyids = ids; + $.copyt = t; + setTimeout(function() { + M.copyNodes($.copyids, $.copyt, (dd === 'copydel'), new MegaPromise()) + .done(function() { + + // Update files count... + if (M.currentdirid === 'shares' && !M.viewmode) { + M.openFolder('shares', 1); + } + }) + .fail(function(error) { + if (error === EOVERQUOTA) { + return msgDialog('warninga', l[135], l[8435]); + } + // Tell the user there was an error unless he cancelled the file-conflict dialog + if (error !== EINCOMPLETE) { + msgDialog('warninga', l[135], l[47], api_strerror(error)); + } + }); + }, 50); + } + else if (dd === 'download') { + nRevert(); + var as_zip = e.altKey; + M.addDownload(ids, as_zip); + } + $('.dragger-block').hide(); + }; + + if (a === 'drop' && dd !== undefined) { + dbfetch.get(t).always(function() { + setDDType(); + if (dd) { + onMouseDrop(); + } + }); + } + }; + InitFileDrag(); + M.createFolderUI(); + // M.treeSearchUI(); + // M.treeFilterUI(); + // M.treeSortUI(); + M.initTreePanelSorting(); + M.initContextUI(); + initShareDialog(); + M.addTransferPanelUI(); + M.initUIKeyEvents(); + M.onFileManagerReady(topmenuUI); + M.initMegaSwitchUI(); + + // disabling right click, default contextmenu. + var alwaysShowContextMenu = Boolean(localStorage.contextmenu); + $(document).rebind('contextmenu.doc', function(ev) { + var target = ev.target; + var ALLOWED_IDS = {'embed-code-field': 1}; + var ALLOWED_NODES = {INPUT: 1, TEXTAREA: 1, VIDEO: 1}; + var ALLOWED_CLASSES = [ + 'contact-details-user-name', + 'contact-details-email', + 'nw-conversations-name' + ]; + var ALLOWED_PARENTS = + '#startholder, .fm-account-main, .export-link-item, .contact-fingerprint-txt, .fm-breadcrumbs, ' + + '.fm-affiliate, .text-editor-container'; + var ALLOWED_CLOSEST = + '.multiple-input, .create-folder-input-bl, .content-panel.conversations, ' + + '.messages.content-area, .chat-right-pad .user-card-data'; + + if (ALLOWED_NODES[target.nodeName] || ALLOWED_IDS[target.id] || alwaysShowContextMenu) { + return; + } + + for (var i = ALLOWED_CLASSES.length; i--;) { + if (target.classList.contains(ALLOWED_CLASSES[i])) { + return; + } + } + + var $target = $(target); + if (!is_fm() || $target.parents(ALLOWED_PARENTS).length || $target.closest(ALLOWED_CLOSEST).length) { + return; + } + + $.hideContextMenu(); + return false; + }); + + var $fmholder = $('#fmholder'); + $('.grid-table .grid-view-resize').rebind('mousedown.colresize', function(col) { + var $me = $(this); + var th = $me.closest('th'); + var startOffset = th.outerWidth() - col.pageX; + + $fmholder.rebind('mousemove.colresize', function(col) { + var newWidth = startOffset + col.pageX; + + const min = th.attr('data-minwidth') | 0; + + if (newWidth < min) { + newWidth = min; + } + + var colType = th.attr('megatype'); + if (colType) { + if (newWidth < M.columnsWidth.cloud[colType].min) { + return; + } + if (newWidth > M.columnsWidth.cloud[colType].max) { + return; + } + th.outerWidth(newWidth); + M.columnsWidth.cloud[colType].curr = newWidth; + + if (M.megaRender && M.megaRender.megaList) { + if (M.megaRender.megaList._scrollIsInitialized) { + M.megaRender.megaList.scrollUpdate(); + } + else { + M.megaRender.megaList.resized(); + } + } + } + else { + th.outerWidth(newWidth); + } + + $('#fmholder').css('cursor', 'col-resize'); + }); + + $fmholder.rebind('mouseup.colresize', function() { + M.columnsWidth.makeNameColumnStatic(); + $('#fmholder').css('cursor', ''); + $fmholder.off('mouseup.colresize'); + $fmholder.off('mousemove.colresize'); + }); + }); + + $fmholder + .rebind('ps-scroll-left.fm-x-scroll ps-scroll-right.fm-x-scroll', function(e) { + if (!e || !e.target) { + console.warn('no scroll event info...!'); + console.warn(e); + return; + } + var $target = $(e.target); + if (!$target.hasClass('grid-scrolling-table megaListContainer')) { + return; + } + }); + + $('.fm-files-view-icon').rebind('click', function() { + $.hideContextMenu(); + + var viewValue = $(this).hasClass('listing-view') ? 0 : 1; + + if (fmconfig.uiviewmode | 0) { + mega.config.set('viewmode', viewValue); + } + else { + fmviewmode(M.currentdirid, viewValue); + } + + if (folderlink && M.currentdirid.substr(0, 6) === 'search') { + M.viewmode = viewValue; + M.renderMain(); + } + else { + M.openFolder(M.currentdirid, true).then(reselect.bind(null, 1)); + } + + return false; + }); + + $('.fm-folder-upload, .fm-file-upload').rebind('click', (element) => { + $.hideContextMenu(); + if (element.currentTarget.classList.contains('fm-folder-upload')) { + $('#fileselect2').click(); + } + else { + $('#fileselect1').click(); + } + }); + + $.hideContextMenu = function(event) { + + var a, b, currentNodeClass; + + if (event && event.target) { + + a = event.target.parentNode; + currentNodeClass = event.target.classList; + if (!currentNodeClass.length) { + currentNodeClass = a.classList; + } + if (currentNodeClass && currentNodeClass.contains('dropdown') + && (currentNodeClass.contains('download-item') + || currentNodeClass.contains('move-item')) + && currentNodeClass.contains('active') + || currentNodeClass.contains('inshare-dl-button0')) { + return false; + } + + if (!(a && a.classList.contains('breadcrumb-dropdown-link'))) { + $('.breadcrumb-dropdown').removeClass('active'); + } + } + + $('.nw-sorting-menu').addClass('hidden'); + $('.colour-sorting-menu').addClass('hidden'); + $('.nw-tree-panel-arrows').removeClass('active'); + $('.nw-fm-tree-item').removeClass('dragover'); + $('.nw-fm-tree-item.hovered').removeClass('hovered'); + $('.data-block-view .file-settings-icon').removeClass('active'); + $('.column-settings.overlap').removeClass('c-opened'); + $('.js-statusbarbtn.options').removeClass('c-opened'); + + const $jqe = $('.shared-details-info-block .fm-share-download'); + if ($jqe.hasClass('active')) { + // close & cleanup + $jqe.trigger('click'); + } + $('.fm-share-download').removeClass('active disabled'); + + const $threeDotsContextMenu = $('.shared-details-info-block .grid-url-arrow'); + if ($threeDotsContextMenu.hasClass('active')) { + $threeDotsContextMenu.trigger('click'); + } + $('.grid-url-arrow').removeClass('active'); + + // Set to default + a = $('.dropdown.body.files-menu,.dropdown.body.download'); + a.addClass('hidden'); + b = a.find('.dropdown.body.submenu'); + b.attr('style', ''); + b.removeClass('active left-position overlap-right overlap-left mega-height'); + a.find('.disabled,.context-scrolling-block').removeClass('disabled context-scrolling-block'); + a.find('.dropdown-item.contains-submenu.opened').removeClass('opened'); + + // Cleanup for scrollable context menu + var cnt = $('#cm_scroll').contents(); + $('#cm_scroll').replaceWith(cnt);// Remove .context-scrollable-block + a.removeClass('mega-height'); + a.find('> .context-top-arrow').remove(); + a.find('> .context-bottom-arrow').remove(); + a.css({ 'height': 'auto' });// In case that window is enlarged + + // Remove all sub-menues from context-menu move-item + $('#csb_' + M.RootID).empty(); + + $(window).off('resize.ccmui'); + + // enable scrolling + if ($.disabledContianer) { + Ps.enable($.disabledContianer[0]); + delete $.disabledContianer; + } + + mBroadcaster.sendMessage('contextmenuclose'); + }; + + $fmholder.rebind('click.contextmenu', function(e) { + $.hideContextMenu(e); + if ($.hideTopMenu) { + $.hideTopMenu(e); + } + if (M.chat) { + // chat can handle its own links..no need to return false on every "click" and "element" :O + // halt early, to save some CPU cycles if in chat. + return; + } + var $target = $(e.target); + var exclude = '.upgradelink, .campaign-logo, .resellerbuy, .linkified, a.red, a.mailto, a.top-social-button'; + + if ($target.attr('type') !== 'file' + && !$target.is(exclude) + && !$target.parent().is(exclude)) { + return false; + } + }); + + if (page !== "chat") { + $('.fm-right-header.fm').removeClass('hidden'); + } + + folderlink = folderlink || 0; + + if ((typeof dl_import !== 'undefined') && dl_import) { + M.onFileManagerReady(importFile); + } + + $('.dropdown.body.context').rebind('contextmenu.dropdown', function(e) { + if (!localStorage.contextmenu) { + e.preventDefault(); + } + }); + + $('.nw-fm-left-icon, .js-lpbtn').rebind('contextmenu', (ev) => { + M.contextMenuUI(ev, 1); + return false; + }); + + // stop sort and filter dialog clicking close itself + $('.nw-sorting-menu').on('click', function(e) { + e.stopPropagation(); + }); + + var self = this; + + if (!this.fmTabState || this.fmTabState['cloud-drive'].root !== M.RootID) { + this.fmTabState = { + 'cloud-drive': { // My-files + root: M.RootID, + prev: null, + subpages: [M.InboxID, M.RubbishID, 'recents', 'shares', 'faves', 'out-shares', 'public-links'] + }, + 'gallery': {root: 'photos', prev: null, subpages: Object.keys(mega.gallery.sections)}, + 'photos': { + root: 'photos', + prev: null, + subpages: ['cloud-drive-photos', 'camera-uploads-photos'] + }, + 'images': { + root: 'images', + prev: null, + subpages: ['cloud-drive-images', 'camera-uploads-images'] + }, + 'videos': { + root: 'videos', + prev: null, + subpages: ['cloud-drive-videos', 'camera-uploads-videos'] + }, + 'favourites': {root: 'favourites',prev: null}, + 'albums': {root: 'photos', prev: null}, + 'folder-link': {root: M.RootID, prev: null}, + 'conversations': { + root: 'chat', + prev: null, + subpages: ['chat/contacts', 'chat/contacts/received', 'chat/contacts/sent'] + }, + 'transfers': {root: 'transfers', prev: null}, + 'account': {root: 'account', prev: null}, + 'dashboard': {root: 'dashboard', prev: null, subpages: ['refer']}, + 'user-management': {root: 'user-management', prev: null}, + 'shared-with-me': {root: 'shares', prev: null, subpages: ['out-shares']}, + 'public-links': {root: 'public-links', prev: null}, + 'recents': {root: 'recents', prev: null}, + 'faves': {root: 'faves', prev: null}, + 'backups': {root: 'backups', prev: null}, + 'rubbish-bin': {root: M.RubbishID, prev: null}, + 'backup-center': {root: 'devices', prev: null} + }; + } + + var isMegaSyncTransfer = true; + $('.js-fm-tab').rebind('click.fmTabState', function() { + treesearch = false; + var clickedClass = this.className; + + if (!clickedClass) { + return; + } + + if ((ul_queue && ul_queue.length) || (dl_queue && dl_queue.length)) { + isMegaSyncTransfer = false; + } + if (clickedClass.indexOf('transfers') > -1) { + if (isMegaSyncTransfer && window.useMegaSync === 2) { + megasync.transferManager(); + return; + } + else { + // reset - to ckeck again next time + isMegaSyncTransfer = true; + if (!mega.tpw.isWidgetVisibile()) { + mega.tpw.showWidget(); + if (mega.tpw.isWidgetVisibile()) { + // do if there's no transfers, we will allow going to transfers page + return false; + } + } + else { + mega.tpw.hideWidget(); + } + } + } + + let activeClass = '.js-fm-tab'; + + if (this.classList.contains('btn-myfiles')) { + activeClass = '.btn-myfiles'; + } + else if (this.classList.contains('btn-galleries')) { + activeClass = '.btn-galleries'; + } + + activeClass = ('' + $(activeClass + '.active:visible') + .attr('class')).split(" ").filter(function(c) { + return !!self.fmTabState[c]; + })[0]; + + var activeTab = self.fmTabState[activeClass]; + + if (activeTab) { + if (activeTab.root === M.currentrootid || activeTab.root === 'chat' || + activeTab.subpages && activeTab.subpages.indexOf(M.currentrootid || M.currentdirid) !== -1) { + activeTab.prev = M.currentdirid; + M.lastActiveTab = activeClass; + } + else if (d) { + console.warn('Root mismatch', M.currentrootid, M.currentdirid, activeTab); + } + } + + if (this.classList.contains('devices')) { + if (u_type === 0) { + + // Show message 'This page is for registered users only' + ephemeralDialog(l[17146]); + } + else { + + loadSubPage('fm/devices'); + } + } + + if (this.classList.contains('account') || this.classList.contains('dashboard')) { + $.hideTopMenu(); + + if (u_type === 0) { + if (this.classList.contains('account')) { + ephemeralDialog(l[7687]); + } + else { + // Show message 'This page is for registered users only' + ephemeralDialog(l[17146]); + } + } + else if (this.classList.contains('dashboard')) { + if (M.currentdirid !== 'refer' && self.fmTabState.dashboard.prev === 'refer') { + loadSubPage('fm/refer'); + return false; + } + self.fmTabState.dashboard.prev = null; + loadSubPage('fm/dashboard'); + } + else { + loadSubPage('fm/account'); + } + return false; + } + + for (var tab in self.fmTabState) { + if (~clickedClass.indexOf(tab)) { + tab = self.fmTabState[tab]; + + var targetFolder = null; + + if (tab.root === 'backups') { + targetFolder = M.BackupsId || M.RootID; + } + // Clicked on the currently active tab, should open the root (e.g. go back) + else if (clickedClass.indexOf(activeClass) !== -1) { + targetFolder = tab.root; + + // special case handling for the chat, re-render current conversation + if ( + tab.root === 'chat' && + String(M.currentdirid).substr(0, 5) === 'chat/' && + !M.currentdirid.startsWith('chat/contacts') + ) { + targetFolder = M.currentdirid; + } + } + else if (tab.prev && (M.d[tab.prev] || M.isCustomView(tab.prev) || + (tab.subpages && tab.subpages.indexOf(tab.prev) > -1))) { + targetFolder = tab.prev; + } + else { + targetFolder = tab.root; + } + + M.openFolder(targetFolder, true); + + break; + } + } + }); + + if (dlMethod.warn) { + window.onerror = null; + console.error('This browser is using an outdated download method, good luck...', '' + window.ua); + } + + // chat can handle the left-panel resizing on its own + const lPane = $('.fm-left-panel').filter(":not(.chat-lp-body)"); + $.leftPaneResizable = new FMResizablePane(lPane, { + 'direction': 'e', + 'minWidth': 200, + 'maxWidth': 400, + 'persistanceKey': 'leftPaneWidth', + 'handle': '.left-pane-drag-handle', + 'pagechange': () => { + let {'cloud-drive': {subpages: myFiles} = false} = this.fmTabState; + myFiles = myFiles ? array.to.object([M.RootID, ...myFiles]) : false; + + return function() { + let maxWidth = null; + + if (!myFiles[M.currentrootid]) { + maxWidth = 400; + } + this.setOption('maxWidth', maxWidth); + }; + } + }); + + $($.leftPaneResizable).rebind('resize.lhp', function() { + var w = lPane.width(); + if ($.leftPaneResizable.options.maxWidth && w >= $.leftPaneResizable.options.maxWidth) { + $('.left-pane-drag-handle').css('cursor', 'w-resize'); + $('body').css('cursor', 'w-resize'); + } + else if (w <= $.leftPaneResizable.options.minWidth) { + $('.left-pane-drag-handle').css('cursor', 'e-resize'); + $('body').css('cursor', 'e-resize'); + } + else { + $('.left-pane-drag-handle').css('cursor', 'ew-resize'); + $('body').css('cursor', 'ew-resize'); + } + + if (!this.element.hasClass('ui-resizable-resizing')) { + $('body').css('cursor', 'auto'); + } + + if (lPane.width() < $.leftPaneResizable.options.updateWidth + 60) { + lPane.addClass('small-left-panel'); + } + else { + lPane.removeClass('small-left-panel'); + } + + $.tresizer(); + }); + + $(window).rebind('resize.fmrh hashchange.fmrh', fm_resize_handler); + + if (ua.details.os === "Apple") { + + $(window).rebind('blur.ps-unfocus', function() { + + $(document).rebind('ps-scroll-y.ps-unfocus', function(e) { + + $(e.target).addClass('ps-outfocused-scrolling'); + + delay('ps-out-focused-' + $(e.target).data('ps-id'), function __psOutFocused() { + $(e.target).removeClass('ps-outfocused-scrolling'); + }, 1000); + }); + }); + + if (!document.hasFocus()) { + $(window).trigger('blur.ps-unfocus'); + } + + $(window).rebind('focus.ps-unfocus', function() { + + $(document).off('ps-scroll-y.ps-unfocus'); + }); + } + + if (d) { + console.timeEnd('initUI'); + } +}; + +/** + * A FileManager related method for (re)initializing the shortcuts and selection managers. + * + * @param container + * @param aUpdate + * @param {Boolean} [refresh] are we re-attaching the container? + */ +FileManager.prototype.initShortcutsAndSelection = function(container, aUpdate, refresh) { + 'use strict'; + + if (!window.fmShortcuts) { + window.fmShortcuts = new FMShortcuts(); + } + + if (!aUpdate) { + if (window.selectionManager) { + window.selectionManager.destroy(); + } + + if (M.previousdirid !== M.currentdirid && !refresh) { + // do not retain selected nodes unless re-rendering the same view + $.selected = []; + } + + /** + * (Re)Init the selectionManager, because the .selectable() is reinitialized and we need to + * reattach to its events. + * + * @type {SelectionManager} + */ + window.selectionManager = new SelectionManager2_DOM( + $(container), + { + 'onSelectedUpdated': (selected_list) => { + $.selected = selected_list; + } + } + ).reinitialize(); + } +}; + + +/** + * Update FileManager on new nodes availability + * @details Former rendernew() + * @returns {MegaPromise} + */ +// eslint-disable-next-line complexity +FileManager.prototype.updFileManagerUI = promisify(function(resolve) { + "use strict"; + + var treebuild = Object.create(null); + var UImain = false; + var UItree = false; + var newcontact = false; + var newpath = false; + var newshare = false; + var selnode; + var buildtree = function(n) { + delay('updFileManagerUI:buildtree:' + n.h, function() { + M.buildtree(n, M.buildtree.FORCE_REBUILD); + M.addTreeUIDelayed(); + }, 2600); + }; + + if (d) { + console.debug('updFileManagerUI for %d nodes.', newnodes.length); + console.time('rendernew'); + } + + for (var i = newnodes.length; i--;) { + var newNode = newnodes[i]; + + if (newNode.h.length === 11) { + newcontact = true; + } + if (newNode.su) { + newshare = true; + } + if (newNode.p && newNode.t) { + treebuild[newNode.p] = 1; + } + if (newNode.p === this.currentdirid + || newNode.h === this.currentdirid + || newNode.su && this.currentdirid === 'shares' + || newNode.p === this.currentCustomView.nodeID + || newNode.h === this.currentCustomView.nodeID) { + + UImain = true; + + if ($.onRenderNewSelectNode === newNode.h) { + delete $.onRenderNewSelectNode; + selnode = newNode.h; + } + } + if (!newpath && document.getElementById('path_' + newNode.h)) { + newpath = true; + } + } + + for (var h in treebuild) { + var tb = this.d[h]; + if (tb) { + // If this is out-shares or public-links page, build both cloud-drive tree and it's own + if (this.currentCustomView) { + if (tb.h === M.RubbishID) { + tb = {h: M.RootID}; + } + this.buildtree(tb, this.buildtree.FORCE_REBUILD, 'cloud-drive'); + this.buildtree({h: this.currentCustomView.type}, this.buildtree.FORCE_REBUILD); + } + else { + buildtree(tb); + } + UItree = true; + } + } + + if (d) { + console.log('rendernew, dir=%s, root=%s, mode=%d', this.currentdirid, this.currentrootid, this.viewmode); + console.log('rendernew.stat', newcontact, newshare, UImain, newpath); + console.log('rendernew.tree', Object.keys(treebuild)); + } + + var renderPromise = MegaPromise.resolve(); + if (UImain) { + if (UItree || this.v.length) { + var emptyBeforeUpd = !M.v.length; + this.filterByParent(this.currentCustomView.nodeID || this.currentdirid); + this.sort(); + this.renderMain(!emptyBeforeUpd); + } + else { + renderPromise = this.openFolder(this.currentdirid, true); + } + + UImain = this.currentdirid; + } + + if (this.currentdirid === "recents" && this.recentsRender) { + this.recentsRender.updateState(); + } + + if (UItree) { + if (this.currentrootid === 'shares') { + renderPromise = this.renderTree(); + } + else if (this.currentCustomView) { + this.addTreeUIDelayed(90); + } + + if (this.currentdirid === 'shares' && !this.viewmode) { + // @TODO deprecate MegaPromise.pipe()! + renderPromise.pipe(function() { + return M.openFolder('shares', 1); + }); + } + + renderPromise.always(function() { + if (M.nodeRemovalUIRefresh.pending !== M.currentdirid) { + M.onTreeUIOpen(M.currentdirid); + } + }); + } + + renderPromise.always(function() { + if (newcontact) { + M.avatars(); + + if (megaChatIsReady) { + megaChat.renderMyStatus(); + } + } + if (newshare) { + M.buildtree({h: 'shares'}, M.buildtree.FORCE_REBUILD); + } + if (newpath) { + delay('render:path_breadcrumbs', () => M.renderPathBreadcrumbs()); + } + + if (UImain === M.currentdirid) { + if (selnode) { + Soon(function() { + $.selected = [selnode]; + reselect(1); + }); + } + + if (window.selectionManager) { + // update the total count of nodes + var tmp = selectionManager.vSelectionBar; + if (tmp) { + var mm = String(tmp.textContent).split('/').map(Number); + tmp.textContent = mm[0] + ' / ' + M.v.length; + } + } + + } + + if (u_type === 0) { + // Show "ephemeral session warning" + topmenuUI(); + } + + delay('dashboard:upd', function() { + if (M.currentdirid === 'dashboard') { + dashboardUI(true); + } + else if (UImain === M.currentdirid) { + delay('rendernew:mediainfo:collect', function() { + mBroadcaster.sendMessage('mediainfo:collect'); + $.tresizer(); + }, 3200); + } + }, 2000); + + mBroadcaster.sendMessage('updFileManagerUI'); + + if (d) { + console.timeEnd('rendernew'); + } + + resolve(); + }); + + newnodes = []; +}); + +/** + * Initialize context-menu related user interface + */ +FileManager.prototype.initContextUI = function() { + "use strict"; + + var c = '.dropdown.body.context .dropdown-item'; + + $('.dropdown-section').off('mouseover', '.dropdown-item'); + $('.dropdown-section').on('mouseover', '.dropdown-item', function() { + var $this = $(this), + pos = $this.offset(), + menuPos, + currentId; + + if ($this.hasClass('disabled') && $this.parents('#sm_move').length === 0) { + return false; + } + + // Hide opened submenus + if (!$this.parent().parent().hasClass('submenu')) { + $('.dropdown-item').removeClass('opened'); + $('.dropdown.body.submenu').removeClass('active'); + } + else { + $this.parent().find('.dropdown-item').removeClass('opened'); + $this.parent().find('.submenu').removeClass('active'); + } + + currentId = $this.attr('id'); + if (currentId || $this.hasClass('move-item')) { + M.buildSubMenu(String(currentId).replace('fi_', '')); + } + + // Show necessary submenu + if (!$this.hasClass('opened') && $this.hasClass('contains-submenu')) { + menuPos = M.reCalcMenuPosition($this, pos.left, pos.top, 'submenu'); + + $this.next('.submenu') + .css({'top': menuPos.top}) + .removeClass('hidden') + .addClass('active'); + + $this.addClass('opened'); + } + }); + + var safeMoveNodes = function() { + if (!$(this).hasClass('disabled')) { + $.hideContextMenu(); + M.safeMoveNodes(String($(this).attr('id')).replace('fi_', '')); + } + return false; + }; + + $(c + '.cloud-item').rebind('click', safeMoveNodes); + + $('.dropdown.body.files-menu').off('click', '.folder-item'); + $('.dropdown.body.files-menu').on('click', '.folder-item', safeMoveNodes); + safeMoveNodes = undefined; + + $(c + '.download-item').rebind('click', function() { + var c = this.className; + if (c && (c.indexOf('contains-submenu') > -1 || c.indexOf('msync-found') > -1)) { + M.addDownload($.selected); + } + }); + + $(c + '.download-standart-item').rebind('click', function() { + if (folderlink) { + eventlog(99768); + } + M.addDownload($.selected); + }); + + $(c + '.zipdownload-item').rebind('click', function() { + if (folderlink) { + eventlog(99769); + } + M.addDownload($.selected, true); + }); + + + $(c + '.syncmegasync-item').rebind('click', function () { + // check if this is a business expired account + if (M.isInvalidUserStatus()) { + return; + } + + megasync.isInstalled(function (err, is) { + if (!err || is) { + if (megasync.currUser === u_handle) { + // i know the selection is 1 item [otherwise option in menu wont be visible] + megasync.syncFolder($.selected[0]); + } + } + // no need to do anything, something wierd happened, next time + // the option wont be visible. + }); + $.hideContextMenu(); + }); + + $(c + '.getlink-item, ' + c + '.embedcode-item').rebind('click', this.getLinkAction); + + $(c + '.removelink-item').rebind('click', function() { + // check if this is a business expired account + if (M.isInvalidUserStatus()) { + return; + } + + if (u_type === 0) { + ephemeralDialog(l[1005]); + } + else { + var media = false; + var handles = Array.isArray($.selected) && $.selected.concat(); + var removeLink = function(e) { + if (e) { + var exportLink = new mega.Share.ExportLink({'updateUI': true, 'nodesToProcess': handles}); + exportLink.removeExportLink(); + } + }; + let files = 0; + let folders = 0; + for (var i = handles.length; i--;) { + if (is_video(M.d[handles[i]]) === 1) { + media = true; + } + if (M.d[handles[i]].t) { + folders++; + } + else { + files++; + } + } + + var mediaRemoveLink = () => { + msgDialog('confirmation', l[882], l[17824], 0, removeLink); + }; + + if (mega.config.get('nowarnpl')) { + if (media) { + mediaRemoveLink(); + } + else { + removeLink(true); + } + } + else { + let subtitle = l.plink_remove_dlg_text_mixed; + if (files > 0 && folders === 0) { + subtitle = mega.icu.format(l.plink_remove_dlg_text_file, files); + } + else if (files === 0 && folders > 0) { + subtitle = mega.icu.format(l.plink_remove_dlg_text_folder, folders); + } + const title = mega.icu.format(l.plink_remove_dlg_title, handles.length); + if (media) { + subtitle += `

              ${l[17824]}`; + } + msgDialog('confirmation', '', title, subtitle, removeLink, 'nowarnpl'); + } + } + }); + + $(c + '.dispute-item').rebind('click', function() { + // Find the first takendown node in the list. This is the item we will use to prefill with. + localStorage.removeItem('takedownDisputeNodeURL'); + for (var i = 0; i < $.selected.length; i++) { + var node = M.getNodeByHandle($.selected[i]); + if (node.t & M.IS_TAKENDOWN || M.getNodeShare(node).down === 1) { + var disputeURL = mega.getPublicNodeExportLink(node); + if (disputeURL) { + localStorage.setItem('takedownDisputeNodeURL', disputeURL); + } + break; + } + } + loadSubPage('dispute'); + }); + + $(c + '.rename-item').rebind('click', function() { + // check if this is a business expired account + if (M.isInvalidUserStatus()) { + return; + } + renameDialog(); + }); + + $(c + '.sh4r1ng-item').rebind('click', function() { + M.openSharingDialog(); + }); + + $(`${c}.removeshare-item`).rebind('click', () => { + msgDialog(`remove:!^${l[23737]}!${l[82]}`, '', l.remove_share_title, l.remove_share_msg, res => { + if (res) { + loadingDialog.show(); + new mega.Share().removeSharesFromSelected().always(() => { + loadingDialog.hide(); + }); + } + }, 1); + }); + + // Move Dialog + $(c + '.advanced-item, ' + c + '.move-item').rebind('click', openMoveDialog); + + $(c + '.copy-item').rebind('click', openCopyDialog); + + $(c + '.revert-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + loadingDialog.pshow(); + M.revertRubbishNodes($.selected).always(loadingDialog.phide.bind(loadingDialog)); + }); + + $(c + '.import-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + eventlog(99767); + ASSERT(folderlink, 'Import needs to be used in folder links.'); + + M.importFolderLinkNodes($.selected); + }); + + $(c + '.newfolder-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + createFolderDialog(); + }); + // eslint-disable-next-line local-rules/jquery-scopes + $(c + '.newfile-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + createFileDialog(); + }); + + $(c + '.fileupload-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + $('#fileselect3').click(); + }); + + $(c + '.folderupload-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + $('#fileselect4').click(); + }); + + $(c + '.remove-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + if ($(this).hasClass('disabled')) { + return false; + } + closeDialog(); + fmremove(); + }); + + $(c + '.addcontact-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + contactAddDialog(); + }); + + $(c + '.startchat-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + var $this = $(this); + var user_handle = $.selected; + + if (user_handle.length === 1) { + if (!$this.is('.disabled') && user_handle[0]) { + loadSubPage('fm/chat/p/' + user_handle[0]); + } + } + else { + megaChat.createAndShowGroupRoomFor(user_handle, "", {keyRotation: true, createChatLink: false}); + } + }); + + $(c + '.startaudio-item,' + c + '.startaudiovideo-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + var $this = $(this); + var user_handle = $.selected && $.selected[0]; + + if (!$this.is('.disabled') && user_handle) { + megaChat.createAndShowPrivateRoom(user_handle) + .then(function(room) { + room.setActive(); + room.startAudioCall(); + }); + } + }); + + $(c + '.startvideo-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + var $this = $(this); + var user_handle = $.selected && $.selected[0]; + + if (!$this.is('.disabled') && user_handle) { + megaChat.createAndShowPrivateRoom(user_handle) + .then(function(room) { + room.setActive(); + room.startVideoCall(); + }); + } + }); + + $(c + '.view-profile-item').rebind('click', function(e) { + var $this = $(this); + var user_handle = $.selected && $.selected[0]; + + if (!$this.is('.disabled') && user_handle) { + loadSubPage('fm/chat/contacts/' + user_handle); + // there seem to be some duplicated callbacks triggered by menus.js, but since I'm not sure what would the + // side effects of that can be, I'm stopping propagation here to reduce risk of those causing double + // loadSubPage calls (which breaks fm/$contact -> fm/chat/contacts/$contact redirects, because it triggers + // a race in openFolder) + e.stopPropagation(); + } + }); + + $(c + '.send-files-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + var $this = $(this); + var user_handle = $.selected && $.selected[0]; + + if (!$this.is('.disabled') && user_handle) { + megaChat.openChatAndSendFilesDialog(user_handle); + } + }); + + $(c + '.share-folder-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + var $this = $(this); + var user_handle = $.selected && $.selected[0]; + + if (!$this.is('.disabled') && user_handle) { + openCopyShareDialog(user_handle); + } + }); + + $(`${c}.leaveshare-item`).rebind('click', () => { + if (M.isInvalidUserStatus()) { + return; + } + + for (let i = 0; i < $.selected.length; i++) { + M.leaveShare($.selected[i]).catch(dump); + } + }); + + // Bind Set Nickname context menu button + $(c + '.set-nickname').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + var userHandle = $.selected && $.selected[0]; + + $.hideContextMenu(); + nicknames.setNicknameDialog.init(userHandle); + }); + + $(c + '.remove-contact').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + if ($(this).hasClass('disabled')) { + return; + } + var user_handle = $.selected && $.selected[0]; + + fmremove(user_handle); + }); + + $(c + '.properties-item').rebind('click', function() { + propertiesDialog(); + }); + + // eslint-disable-next-line local-rules/jquery-scopes + $(c + '.edit-file-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + var nodeHandle = $.selected && $.selected[0]; + if (!nodeHandle) { + return; + } + + // Close properties dialog if context menu was triggered there + if ($.dialog === 'properties') { + propertiesDialog(true); + } + + loadingDialog.show('common', l[23130]); + + mega.fileTextEditor.getFile(nodeHandle).done( + function(data) { + loadingDialog.hide(); + mega.textEditorUI.setupEditor(M.d[nodeHandle].name, data, nodeHandle); + } + ).fail(function() { + loadingDialog.hide(); + }); + }); + + $(c + '.properties-versions').rebind('click', function() { + fileversioning.fileVersioningDialog(); + }); + + $(c + '.clearprevious-versions').rebind('click', function() { + + if (M.isInvalidUserStatus()) { + return; + } + + if ($.selected && $.selected.length > 0) { + + const fselected = M.getNodeByHandle($.selected[0]); + + if ($.selected && $.selected.length === 1 && fselected.t && fselected.tvf) { + + const sfWithVf = Object.create(null); + + sfWithVf[$.selected[0]] = fselected.tvf; + + const _getChildFolderWithVerion = function _(h) { + + if (!M.tree[h]) { + return; + } + + const fHandles = Object.keys(M.tree[h]); + + for (let i = fHandles.length; i--;) { + + if (M.tree[h][fHandles[i]].tvf) { + + sfWithVf[fHandles[i]] = M.tree[h][fHandles[i]].tvf; + sfWithVf[h] -= M.tree[h][fHandles[i]].tvf; + _(fHandles[i]); + } + + if (!sfWithVf[h]) { + + delete sfWithVf[h]; + break; + } + } + }; + + msgDialog('remove', l[1003], l.clear_prev_version_folder, l[1007], async(e) => { + + if (e) { + + _getChildFolderWithVerion($.selected[0]); + + const fh = Object.keys(sfWithVf); + await dbfetch.geta(fh); + + for (let i = fh.length; i--;) { + + const cfh = Object.keys(M.c[fh[i]]); + + for (let j = cfh.length; j--;) { + + const cfn = M.getNodeByHandle(cfh[j]); + + if (!cfn.t && cfn.tvf) { + fileversioning.clearPreviousVersions(cfh[j]); + } + } + } + } + }); + + return; + } + + const fvNode = []; + + for (let i = $.selected.length; i--;) { + + const selected = M.getNodeByHandle($.selected[i]); + + if (!selected.t && selected.tvf) { + fvNode.push($.selected[i]); + } + } + + msgDialog('remove', l[1003], mega.icu.format(l[17154], fvNode.length), l[1007], (e) => { + + if (e) { + for (let i = fvNode.length; i--;) { + fileversioning.clearPreviousVersions(fvNode[i]); + } + } + }); + } + }); + + $(c + '.findupes-item').rebind('click', M.findDupes); + + $(c + '.add-star-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + + let newFavState; + + if ($.selected.length > 1) { + // Determine the new fav state value from multiselection + newFavState = Number($('i', $(this)).hasClass('icon-favourite')); + } + else { + newFavState = Number(!M.isFavourite($.selected)); + } + + M.favourite($.selected, newFavState); + }); + + $(c + '.send-to-contact-item').rebind('click', function () { + openCopyDialog('conversations'); + }); + + $('.submenu.labels .dropdown-colour-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + + const classList = this.classList; + let labelId = parseInt(this.dataset.labelId); + + // Remove the existing label from nodes + if (classList.contains('active') && !classList.contains('update-to')) { + labelId = 0; + } + + M.labeling($.selected, labelId); + }); + + $('.colour-sorting-menu .filter-by .dropdown-colour-item').rebind('click', function(e) { + if (d){ + console.log('label color selected'); + } + var labelId = parseInt(this.dataset.labelId); + var parent = $(this).parents('.labels'); + + if (labelId && !parent.hasClass("disabled")) { + // init M.filterLabel[type] if not exist. + if (!M.currentLabelFilter) { + M.filterLabel[M.currentLabelType] = Object.create(null); + } + + M.applyLabelFilter(e); + } + }); + + $('.filter-block.body .close').rebind('click', function() { + delete M.filterLabel[M.currentLabelType]; + $('.colour-sorting-menu .dropdown-colour-item').removeClass('active'); + $(this).parent().addClass('hidden')// Hide 'Filter:' DOM elements + .find('.colour-label-ind').remove();// Remove all colors from it + + $.hideContextMenu(); + M.openFolder(M.currentdirid, true); + }); + + $('.filter-block.rubbish .filter-block.close').rebind('click', function() { + delete M.filterLabel[M.currentLabelType]; + $('.colour-sorting-menu .dropdown-colour-item').removeClass('active'); + $('.filter-block.rubbish.body') + .addClass('hidden')// Hide 'Filter:' DOM elements + .find('.colour-label-ind').remove();// Remove all colors from it + + $.hideContextMenu(); + M.openFolder(M.currentdirid, true); + }); + + $('.submenu.labels .dropdown-colour-item').rebind('mouseover.clrSort', function() { + var labelTxt = this.dataset.labelTxt; + if ($(this).hasClass('update-to')) { + switch (labelTxt) { + case "Red": + labelTxt = l.update_to_red; + break; + case "Orange": + labelTxt = l.update_to_orange; + break; + case "Yellow": + labelTxt = l.update_to_yellow; + break; + case "Green": + labelTxt = l.update_to_green; + break; + case "Blue": + labelTxt = l.update_to_blue; + break; + case "Purple": + labelTxt = l.update_to_purple; + break; + case "Grey": + labelTxt = l.update_to_grey; + break; + } + } + else if ($(this).hasClass('active')) { + switch (labelTxt) { + case "Red": + labelTxt = l[19569]; + break; + case "Orange": + labelTxt = l[19573]; + break; + case "Yellow": + labelTxt = l[19577]; + break; + case "Green": + labelTxt = l[19581]; + break; + case "Blue": + labelTxt = l[19585]; + break; + case "Purple": + labelTxt = l[19589]; + break; + case "Grey": + labelTxt = l[19593]; + break; + } + } + else { + switch (labelTxt) { + case "Red": + labelTxt = l[19568]; + break; + case "Orange": + labelTxt = l[19572]; + break; + case "Yellow": + labelTxt = l[19576]; + break; + case "Green": + labelTxt = l[19580]; + break; + case "Blue": + labelTxt = l[19584]; + break; + case "Purple": + labelTxt = l[19588]; + break; + case "Grey": + labelTxt = l[19592]; + break; + } + } + $('.labels .dropdown-color-info').safeHTML(labelTxt).addClass('active'); + }); + + $('.colour-sorting-menu .labels .dropdown-colour-item').rebind('mouseover.clrSort', function(e) { + if (!$(this).parents('.labels').hasClass('disabled')){ + M.updateLabelInfo(e); + } + }); + + $('.labels .dropdown-colour-item').rebind('mouseout', function() { + $('.labels .dropdown-color-info').removeClass('active'); + }); + + $(c + '.open-item').rebind('click', function() { + var target = $.selected[0]; + if (M.currentrootid === 'out-shares' || M.currentrootid === 'public-links') { + target = M.currentrootid + '/' + target; + } + $('.js-lpbtn').removeClass('active'); + M.openFolder(target); + }); + + $(`${c}.open-gallery`).rebind('click', () => { + var target = $.selected[0]; + M.openFolder(`discovery/${target}`); + }); + + $(c + '.open-cloud-item').rebind('click', function() { + + const node = M.d[$.selected[0]]; + + // Incoming Shares section if shared folder doestn't have parent + const target = node.su && (!node.p || !M.d[node.p]) ? 'shares' : node.p; + + if (mega.gallery.sections[M.currentdirid]) { + M.fmTabState.gallery.prev = M.currentdirid; + } + + M.openFolder(target).then(() => { + selectionManager.add_to_selection(node.h, true); + }); + }); + + $(`${c}.hide-backup`).rebind('click.hBckp', () => { + + mega.backupCenter.hideDevice(); + }); + + $(`${c}.get-more-quota`).rebind('click.getQuota', () => { + + loadSubPage('pro'); + }); + + $(`${c}.new-backup`).rebind('click.nBckp', () => { + + mega.backupCenter.addNewBackup(); + }); + + $(`${c}.view-in-bc-item`).rebind('click.openBC', () => { + + mega.backupCenter.showFolder($.selected[0]); + }); + + $(`${c}.move-backup-item`).rebind('click.moveBckp', () => { + + if (!$.selected.length || !mega.backupCenter.selectedSync + || mega.backupCenter.selectedSync.nodeHandle !== $.selected[0]) { + + return false; + } + + selectFolderDialog(async() => { + + closeDialog(); + loadingDialog.pshow(); + + mega.backupCenter.stopSync( + undefined, mega.backupCenter.selectedSync.nodeHandle, $.mcselected + ) + .then(nop) + .catch((ex) => { + msgDialog('warninga', l[135], l[47], ex); + }) + .finally(() => { + + loadingDialog.phide(); + }); + }, 'move'); + }); + + $(`${c}.remove-backup-item`).rebind('click.removeBckp', () => { + + if (!$.selected.length || !mega.backupCenter.selectedSync + || mega.backupCenter.selectedSync.nodeHandle !== $.selected[0]) { + + return false; + } + + msgDialog( + 'remove', + l[882], + l[13751], + l[1007], + (e) => { + + if (e) { + + loadingDialog.pshow(); + + mega.backupCenter.stopSync( + undefined, mega.backupCenter.selectedSync.nodeHandle + ) + .then(nop) + .catch((ex) => { + msgDialog('warninga', l[135], l[47], ex); + }) + .finally(() => { + + loadingDialog.phide(); + }); + } + } + ); + }); + + $(`${c}.stopbackup-item`).rebind('click.stopBckp', () => { + + mega.backupCenter.showStopBackupDialog(); + }); + + $(`${c}.stopsync-item`).rebind('click.stopSync', () => { + + mega.backupCenter.showStopConfirmationDialog(); + }); + + $(c + '.preview-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + closeDialog(); + slideshow($.selected[0]); + }); + + $(c + '.play-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + var n = $.selected[0]; + + closeDialog(); + + $.autoplay = n; + slideshow(n); + }); + + $(c + '.clearbin-item').rebind('click', function() { + if (M.isInvalidUserStatus()) { + return; + } + doClearbin(true); + }); + + $(c + '.move-up').rebind('click', function() { + $('.transfer-table tr.ui-selected') + .attrs('id') + .map(function(id) { + fm_tfsmove(id, -1); + }); + $('.transfer-table tr.ui-selected').removeClass('ui-selected'); + delay('fm_tfsupdate', fm_tfsupdate); + }); + + $(c + '.move-down').rebind('click', function() { + $('.transfer-table tr.ui-selected') + .attrs('id') + .reverse() + .map(function(id) { + fm_tfsmove(id, 1); + }); + $('.transfer-table tr.ui-selected').removeClass('ui-selected'); + delay('fm_tfsupdate', fm_tfsupdate); + }); + + $(c + '.transfer-play, ' + c + '.transfer-pause').rebind('click', function() { + var $trs = $('.transfer-table tr.ui-selected'); + + if ($(this).hasClass('transfer-play')) { + if ($trs.filter('.transfer-upload').length && ulmanager.ulOverStorageQuota) { + ulmanager.ulShowOverStorageQuotaDialog(); + return; + } + + if (dlmanager.isOverQuota) { + dlmanager.showOverQuotaDialog(); + return; + } + } + + var ids = $trs.attrs('id'); + + if ($(this).hasClass('transfer-play')) { + ids.map(fm_tfsresume); + } + else { + ids.map(fm_tfspause); + } + + $trs.removeClass('ui-selected'); + }); + + $(c + '.canceltransfer-item,' + c + '.transfer-clear').rebind('click', function() { + var $trs = $('.transfer-table tr.ui-selected'); + var toabort = $trs.attrs('id'); + $trs.remove(); + dlmanager.abort(toabort); + ulmanager.abort(toabort); + $.clearTransferPanel(); + tfsheadupdate({c: toabort}); + mega.tpw.removeRow(toabort); + + onIdle(function() { + // XXX: better way to stretch the scrollbar? + $(window).trigger('resize'); + }); + $('.transfer-table tr.ui-selected').removeClass('ui-selected'); + }); + + if (sessionStorage.folderLinkImport || $.onImportCopyNodes) { + onIdle(M.importFolderLinkNodes.bind(M, false)); + } +}; + +FileManager.prototype.createFolderUI = function() { + "use strict"; + + const $inputWrapper = $('.fm-dialog-body', '.create-new-folder.popup'); + const ltWSpaceWarning = new InputFloatWarning($inputWrapper); + + var doCreateFolder = function() { + var $input = $('input', $inputWrapper); + var name = $input.val(); + var errorMsg = ''; + + if (name.trim() === '') { // Check if enter a folder name + errorMsg = l.EmptyName; + } + else if (!M.isSafeName(name)) { // Check if folder name is valid + errorMsg = name.length > 250 ? l.LongName : l[24708]; + } + else if (duplicated(name)) { // Check if folder name already exists + errorMsg = l[23219]; + } + + if (errorMsg !== '') { + $('.duplicated-input-warning span', $inputWrapper).text(errorMsg); + $inputWrapper.addClass('duplicate'); + + setTimeout(function () { + $inputWrapper.removeClass('duplicate'); + $input.removeClass('error'); + $input.trigger("focus"); + }, 2000); + + return; + } + + loadingDialog.pshow(); + var currentdirid = M.currentCustomView.nodeID || M.currentdirid; + + M.createFolder(currentdirid, name) + .then(function(h) { + if (d) { + console.log('Created new folder %s->%s.', currentdirid, h); + } + loadingDialog.phide(); + }) + .catch(function(ex) { + loadingDialog.phide(); + msgDialog('warninga', l[135], l[47], ex < 0 ? api_strerror(ex) : ex); + }); + + return false; + }; + + $('.fm-new-folder').rebind('click', function(e) { + + if (M.isInvalidUserStatus()) { + return; + } + + ltWSpaceWarning.hide(); + + var $me = $(this); + var $nFolderDialog = $('.create-new-folder', 'body').removeClass('filled-input'); + + var $nameInput = $('input', $nFolderDialog).val(''); + + if ($me.hasClass('active')) { + $me.removeClass('active filled-input'); + $nFolderDialog.addClass('hidden'); + } + else { + $me.addClass('active'); + $nFolderDialog.removeClass('hidden'); + topPopupAlign(this, '.dropdown.create-new-folder'); + $nameInput.focus(); + } + $.hideContextMenu(); + return false; + }); + + $('.create-folder-button').rebind('click', doCreateFolder); + + $('.create-folder-button-cancel').rebind('click', function() { + $('.fm-new-folder').removeClass('active'); + $('.create-new-folder').addClass('hidden'); + $('.create-new-folder').removeClass('filled-input'); + $('.create-new-folder input').val(''); + }); + + $('.create-folder-size-icon.full-size').rebind('click', function() { + + var v = $('.create-new-folder input').val(); + + if (v !== l[157] && v !== '') { + $('.create-folder-dialog input').val(v); + } + + $('.create-new-folder input').trigger("focus"); + $('.create-new-folder').removeClass('filled-input'); + $('.create-new-folder').addClass('hidden'); + $('.fm-new-folder').removeClass('active'); + createFolderDialog(0); + $('.create-new-folder input').val(''); + }); + + $('.create-folder-size-icon.short-size').rebind('click', function() { + + var v = $('.create-folder-dialog input').val(); + + if (v !== l[157] && v !== '') { + $('.create-new-folder input').val(v); + $('.create-new-folder').addClass('filled-input'); + } + + $('.fm-new-folder').addClass('active'); + $('.create-new-folder').removeClass('hidden'); + topPopupAlign('.link-button.fm-new-folder', '.create-folder-dialog'); + + createFolderDialog(1); + $('.create-folder-dialog input').val(''); + $('.create-new-folder input').trigger("focus"); + }); + + $('.create-new-folder input').rebind('keyup.create-new-f', function(e) { + ltWSpaceWarning.check({type: 1}); + $('.create-new-folder').addClass('filled-input'); + if ($(this).val() === '') { + $('.create-new-folder').removeClass('filled-input'); + } + if (e.which === 13) { + doCreateFolder(); + } + }); + + $('.create-new-folder input').rebind('focus.create-new-f', function() { + if ($(this).val() === l[157]) { + $(this).val(''); + } + $(this).removeAttr('placeholder'); + $('.create-new-folder').addClass('focused'); + }); + + $('.create-new-folder input').rebind('blur.create-new-f', function() { + $('.create-new-folder').removeClass('focused'); + $(this).attr('placeholder', l[157]); + }); + + $('.fm-new-shared-folder').rebind('click', function() { + if (u_type === 0) { + ephemeralDialog(l[997]); + } + else { + openNewSharedFolderDialog(); + } + }); + + $('.fm-new-link').rebind('click', function() { + if (u_type === 0) { + ephemeralDialog(l[1005]); + } + else { + M.safeShowDialog('create-new-link', function () { + M.initFileAndFolderSelectDialog('create-new-link'); + }); + } + }); +}; + +/** + * Initialize file and folder select dialog from chat. + * This will fill up $.selected with what user selected on the dialog. + * @param {String} type Type of dialog for select default options, e.g. newLink for New public link + */ +FileManager.prototype.initFileAndFolderSelectDialog = function(type, OnSelectCallback) { + 'use strict'; + /* eslint-enable id-length */ + // If chat is not ready. + if (!megaChatIsReady) { + if (megaChatIsDisabled) { + console.error('Mega Chat is disabled, cannot proceed'); + } + else { + // Waiting for chat_initialized broadcaster. + loadingDialog.show(); + mBroadcaster.once('chat_initialized', this.initFileAndFolderSelectDialog.bind(this, type)); + } + return false; + } + + loadingDialog.hide(); + + // Using existing File selector dialog from chat. + var dialogPlacer = document.createElement('div'); + var selected = []; + var constructor; + var doClose = function(noClearSelected) { + ReactDOM.unmountComponentAtNode(dialogPlacer); + constructor.domNode.remove(); + dialogPlacer.remove(); + if (!noClearSelected) { + selected = []; + } + closeDialog(); + }; + + var options = { + 'create-new-link': { + title: l[20667], + classes: 'no-incoming', // Hide incoming share tab + selectLabel: l[1523], + folderSelectable: true, // Can select folder(s) + onAttach: function() { + doClose(true); + $.selected = selected; + M.getLinkAction(); + } + }, + 'openFile': { + title: l[22666], + classes: 'no-incoming', // Hide incoming share tab + selectLabel: l[865], + folderSelectNotAllowed: true, + folderSelectable: false, // Can select folder(s) + customFilterFn: function(node) { + if (node.t) { + return true; + } + if (node.s >= 20971520) { + return false; + } + + if (is_text(node)) { + return true; + } + return false; + }, + onAttach: function() { + doClose(true); + $.selected = selected; + if (OnSelectCallback) { + OnSelectCallback(selected); + } + } + } + }; + + var prop = { + title: options[type].title, + folderSelectable: options[type].folderSelectable, + selectLabel: options[type].selectLabel, + className: options[type].classes, + onClose: function() { + doClose(); + }, + onSelected: function(node) { + selected = node; + }, + onAttachClicked: options[type].onAttach, + }; + if (options[type].folderSelectNotAllowed) { + prop.folderSelectNotAllowed = options[type].folderSelectNotAllowed; + } + if (options[type].customFilterFn) { + prop.customFilterFn = options[type].customFilterFn; + } + + var dialog = React.createElement(CloudBrowserModalDialogUI.CloudBrowserDialog, prop); + + constructor = ReactDOM.render(dialog, dialogPlacer); +}; + +FileManager.prototype.initNewChatlinkDialog = function() { + 'use strict'; + + // If chat is not ready. + if (!megaChatIsReady) { + if (megaChatIsDisabled) { + console.error('Mega Chat is disabled, cannot proceed'); + } + else { + // Waiting for chat_initialized broadcaster. + loadingDialog.show(); + mBroadcaster.once('chat_initialized', this.initNewChatlinkDialog.bind(this)); + } + return false; + } + + loadingDialog.hide(); + + var dialogPlacer = document.createElement('div'); + + var dialog = React.createElement(StartGroupChatDialogUI.StartGroupChatWizard, { + name: "start-group-chat", + flowType: 2, + onClose: function() { + ReactDOM.unmountComponentAtNode(dialogPlacer); + dialogPlacer.remove(); + closeDialog(); + } + }); + + ReactDOM.render(dialog, dialogPlacer); +}; + +FileManager.prototype.initUIKeyEvents = function() { + "use strict"; + + $(window).rebind('keydown.uikeyevents', function(e) { + if ((M.chat && !$.dialog) || M.currentCustomView.type === 'albums') { + return true; + } + + if (e.keyCode == 9 && !$(e.target).is("input,textarea,select")) { + return false; + } + if ($(e.target).filter("input,textarea,select").is(":focus")) { + // when the user is typing in the "New folder dialog", if the current viewMode is grid/icons view, then + // left/right navigation in the input field may cause the selection manager to trigger selection changes. + // Note: I expected that the dialog would set $.dialog, but it doesn't. + if (e.keyCode !== 27) { + return true; + } + } + + var is_transfers_or_accounts = ( + M.currentdirid && (M.currentdirid.substr(0, 7) === 'account' || M.currentdirid === 'transfers') + ); + + // selection manager may not be available on empty folders. + var is_selection_manager_available = !!window.selectionManager; + + var sl = false; + var s = []; + + var selPanel = $('.fm-transfers-block tr.ui-selected'); + + if (selectionManager && selectionManager.selected_list && selectionManager.selected_list.length > 0) { + s = clone(selectionManager.selected_list); + } + else { + var tempSel; + + if (M.viewmode) { + tempSel = $('.data-block-view.ui-selected'); + } + else { + tempSel = $('.grid-table tr.ui-selected'); + } + + s = tempSel.attrs('id'); + } + + + if (!is_fm() && page !== 'login' && page.substr(0, 3) !== 'pro') { + return true; + } + + /** + * Because of te .unbind, this can only be here... it would be better if its moved to iconUI(), but maybe some + * other day :) + */ + if ( + page === 'fm/recents' && + !slideshowid && + !$.dialog + ) { + // left or right + if (e.keyCode === 37 || e.keyCode === 39) { + M.recentsRender.keySelectPrevNext(e.keyCode === 39 | 0 || -1, e.shiftKey); + } + // up or down + else if (e.keyCode === 38 || e.keyCode === 40) { + M.recentsRender.keySelectUpDown(e.keyCode === 40 | 0 || -1, e.shiftKey); + } + + return; + } + else if ( + is_selection_manager_available && + !is_transfers_or_accounts && + !$.dialog && + !slideshowid && + M.viewmode == 1 + ) { + if (e.keyCode == 37) { + // left + selectionManager.select_prev(e.shiftKey, true); + } + else if (e.keyCode == 39) { + // right + selectionManager.select_next(e.shiftKey, true); + } + + // up & down + else if (e.keyCode == 38 || e.keyCode == 40) { + if (e.keyCode === 38) { + selectionManager.select_grid_up(e.shiftKey, true); + } + else { + selectionManager.select_grid_down(e.shiftKey, true); + } + } + } + + if ( + is_selection_manager_available && + !is_transfers_or_accounts && + e.keyCode == 38 && + String($.selectddUIgrid).indexOf('.grid-scrolling-table') > -1 && + !$.dialog + ) { + // up in grid/table + selectionManager.select_prev(e.shiftKey, true); + quickFinder.disable_if_active(); + } + else if ( + is_selection_manager_available && + !is_transfers_or_accounts && + e.keyCode == 40 && + String($.selectddUIgrid).indexOf('.grid-scrolling-table') > -1 && + !$.dialog + ) { + // down in grid/table + selectionManager.select_next(e.shiftKey, true); + quickFinder.disable_if_active(); + } + else if ( + !is_transfers_or_accounts && + e.keyCode == 46 && + s.length > 0 && + !$.dialog && + (M.getNodeRights(M.currentdirid) > 1 || M.currentCustomView) && + M.currentCustomView.type !== 'gallery' && + M.currentrootid !== M.InboxID && + M.currentdirid !== 'devices' + ) { + const nodes = s.filter(h => !M.d[h] || M.getNodeRoot(M.d[h].h) !== M.InboxID); + + if (nodes.length) { + // delete + fmremove(nodes); + } + } + else if ((e.keyCode === 46) && (selPanel.length > 0) + && !$.dialog && M.getNodeRights(M.currentdirid) > 1) { + msgDialog('confirmation', l[1003], mega.icu.format(l[17092], s.length), false, (e) => { + + // we should encapsule the click handler + // to call a function rather than use this hacking + if (e) { + $('.transfer-clear').trigger('click'); + } + }); + } + else if ( + !is_transfers_or_accounts && + e.keyCode == 13 + && s.length > 0 + && !$.dialog + && !$.msgDialog + && !$('.fm-new-folder').hasClass('active') + && !$('.top-search-bl').hasClass('active') + ) { + $.selected = s.filter(h => !M.getNodeShare(h).down); + + if ($.selected && $.selected.length > 0) { + var n = M.d[$.selected[0]]; + + if (M.getNodeRoot(n.h) === M.RubbishID) { + propertiesDialog(); + } + else if (n && n.t) { + M.openFolder(n.h); + } + else if ($.selected.length < 2 && (is_image2(n) || is_video(n))) { + const $elm = mega.gallery.sections[M.currentdirid] + ? $(`#${n.h}.data-block-view`, '#gallery-view') + : $('.dropdown-item.play-item'); + + if ($elm.length) { + $elm.trigger('click').trigger('dblclick'); + } + else { + slideshow($.selected[0]); + } + } + else { + M.addDownload($.selected); + } + } + } + else if ((e.keyCode === 13) && ($.dialog === 'share')) { + addNewContact($('.add-user-popup-button'), false).done(function() { + var share = new mega.Share(); + share.updateNodeShares(); + $('.token-input-token-mega').remove(); + }); + } + else if ((e.keyCode === 13) && ($.dialog === 'rename')) { + $('.rename-dialog-button.rename').trigger('click'); + } + else if (e.keyCode === 27 && $.dialog && ($.msgDialog === 'confirmation')) { + return false; + } + // If the Esc key is pressed while the payment address dialog is visible, close it + else if ((e.keyCode === 27) && !$('.payment-address-dialog').hasClass('hidden')) { + addressDialog.closeDialog(); + } + else if (e.keyCode === 27 && ($.copyDialog || $.moveDialog || $.selectFolderDialog + || $.copyrightsDialog || $.saveAsDialog)) { + closeDialog(); + } + else if (e.keyCode == 27 && $.topMenu) { + topMenu(1); + } + else if (e.keyCode == 27 && $.dialog) { + if ($.dialog === 'share-add' || $.dialog === 'share') { + return false; + } + closeDialog(); + } + else if (e.keyCode == 27 && $('.default-select.active').length) { + var $selectBlock = $('.default-select.active'); + $selectBlock.find('.default-select-dropdown').fadeOut(200); + $selectBlock.removeClass('active'); + } + else if (e.keyCode == 27 && $.msgDialog) { + closeMsg(); + if ($.warningCallback) { + $.warningCallback(false); + $.warningCallback = null; + } + } + else if (e.keyCode === 13 && ($.msgDialog === 'confirmation' || $.msgDialog === 'remove')) { + closeMsg(); + if ($.warningCallback) { + $.warningCallback(true); + $.warningCallback = null; + } + } + else if ( + !is_transfers_or_accounts && + (e.keyCode === 113 /* F2 */) && + (s.length > 0) && + !$.dialog && M.getNodeRights(M.d[s[0]] && M.d[s[0]].h) > 1 && + M.currentrootid !== M.InboxID && + M.currentdirid !== 'devices' && M.getNodeRoot(M.d[s[0]].h) !== M.InboxID + ) { + renameDialog(); + } + else if ( + is_selection_manager_available && + e.keyCode == 65 && + e.ctrlKey && + !$.dialog && + M.currentCustomView.type !== 'gallery' + ) { + if (is_transfers_or_accounts) { + return; + } + // ctrl+a/cmd+a - select all + selectionManager.select_all(); + } + else if (e.keyCode == 27) { + if ($.hideTopMenu) { + $.hideTopMenu(); + } + if ($.hideContextMenu) { + $.hideContextMenu(); + } + } + + if (sl && String($.selectddUIgrid).indexOf('.grid-scrolling-table') > -1) { + // if something is selected, scroll to that item + const $scrollBlock = sl.closest('.ps'); + if (M.megaRender && M.megaRender.megaList && M.megaRender.megaList._wasRendered) { + M.megaRender.megaList.scrollToItem(sl.data('id')); + } + else if ($scrollBlock.length) { + scrollToElement($scrollBlock, sl); + } + } + + M.renderSearchBreadcrumbs(); + }); +}; + +FileManager.prototype.addTransferPanelUI = function() { + "use strict"; + + var transferPanelContextMenu = function(target) { + var file; + var tclear; + + // Please be aware that menu items are all hyperlink elements with the dropdown-item classname. + // Here only hide all menu items and display correct ones, + // which should not include any ones under submenu with the span tag. + var $menuitems = $('.dropdown.body.files-menu a.dropdown-item'); + $menuitems.addClass('hidden'); + + $menuitems.filter('.transfer-pause,.transfer-play,.move-up,.move-down,.transfer-clear').removeClass('hidden'); + + tclear = $menuitems.filter('.transfer-clear').contents('span').get(0) || {}; + tclear.textContent = l[103]; + + if (target === null && (target = $('.transfer-table tr.ui-selected')).length > 1) { + var ids = target.attrs('id'); + var finished = 0; + var paused = 0; + var started = false; + + ids.forEach(function(id) { + file = GlobalProgress[id]; + if (!file) { + finished++; + } + else { + if (file.paused) { + paused++; + } + if (file.started) { + started = true; + } + } + }); + + if (finished === ids.length) { + $menuitems.addClass('hidden') + .filter('.transfer-clear').removeClass('hidden'); + tclear.textContent = l[7218]; + } + else { + if (started) { + $menuitems.filter('.move-up,.move-down').addClass('hidden'); + } + if (paused === ids.length) { + $menuitems.filter('.transfer-pause').addClass('hidden'); + } + + var prev = target.first().prev(); + var next = target.last().next(); + + if (prev.length === 0 || !prev.hasClass('transfer-queued')) { + $menuitems.filter('.move-up').addClass('hidden'); + } + if (next.length === 0) { + $menuitems.filter('.move-down').addClass('hidden'); + } + } + } + else if (!(file = GlobalProgress[$(target).attr('id')])) { + /* no file, it is a finished operation */ + $menuitems.addClass('hidden') + .filter('.transfer-clear').removeClass('hidden'); + tclear.textContent = l[7218]; + } + else { + if (file.started) { + $menuitems.filter('.move-up,.move-down').addClass('hidden'); + } + if (file.paused) { + $menuitems.filter('.transfer-pause').addClass('hidden'); + } + else { + $menuitems.filter('.transfer-play').addClass('hidden'); + } + + if (!target.prev().length || !target.prev().hasClass('transfer-queued')) { + $menuitems.filter('.move-up').addClass('hidden'); + } + if (target.next().length === 0) { + $menuitems.filter('.move-down').addClass('hidden'); + } + } + + // XXX: Hide context-menu's menu-up/down items for now to check if that's the + // origin of some problems, users can still use the new d&d logic to move transfers + $menuitems.filter('.move-up,.move-down').addClass('hidden'); + + var parent = $menuitems.parent(); + parent + .children('hr').addClass('hidden').end() + .children('hr.pause').removeClass('hidden').end(); + + if (parent.height() < 56) { + parent.find('hr.pause').addClass('hidden'); + } + }; + + + $.transferHeader = function(tfse) { + tfse = tfse || M.getTransferElements(); + var domTableEmptyTxt = tfse.domTableEmptyTxt; + var domScrollingTable = tfse.domScrollingTable; + var domTable = tfse.domTable; + tfse = undefined; + + // Show/Hide header if there is no items in transfer list + if (domTable.querySelector('tr')) { + domTableEmptyTxt.classList.add('hidden'); + domScrollingTable.style.display = ''; + } + else { + domTableEmptyTxt.classList.remove('hidden'); + domScrollingTable.style.display = 'none'; + } + + $(domScrollingTable).rebind('click.tst contextmenu.tst', function(e) { + if (!$(e.target).closest('.transfer-table').length) { + $('.ui-selected', domTable).removeClass('ui-selected'); + } + }); + + var $tmp = $('.grid-url-arrow, .clear-transfer-icon, .link-transfer-status', domTable); + $tmp.rebind('click', function(e) { + var target = $(this).closest('tr'); + e.preventDefault(); + e.stopPropagation(); // do not treat it as a regular click on the file + $('tr', domTable).removeClass('ui-selected'); + + if ($(this).hasClass('link-transfer-status')) { + + var $trs = $(this).closest('tr'); + + if ($(this).hasClass('transfer-play')) { + if ($trs.filter('.transfer-upload').length && ulmanager.ulOverStorageQuota) { + ulmanager.ulShowOverStorageQuotaDialog(); + return; + } + + if (dlmanager.isOverQuota) { + dlmanager.showOverQuotaDialog(); + return; + } + } + + var ids = $trs.attrs('id'); + + if ($(this).hasClass('transfer-play')) { + ids.map(fm_tfsresume); + } + else { + ids.filter(id => !String(id).startsWith('LOCKed_')).map(fm_tfspause); + } + } + else { + if (!target.hasClass('.transfer-completed')) { + var toabort = target.attr('id'); + dlmanager.abort(toabort); + ulmanager.abort(toabort); + } + target.fadeOut(function() { + $(this).remove(); + tfsheadupdate({c: target.attr('id')}); + mega.tpw.removeRow(target.attr('id')); + $.clearTransferPanel(); + }); + } + + return false; + }); + + $tmp = $('tr', domTable); + $tmp.rebind('dblclick', function() { + if ($(this).hasClass('transfer-completed')) { + var id = String($(this).attr('id')); + if (id[0] === 'd') { + id = id.split('_').pop(); + } + else if (id[0] === 'u') { + id = String(ulmanager.ulIDToNode[id]); + } + var path = M.getPath(id); + if (path.length > 1) { + M.openFolder(path[1], true) + .always(function() { + $.selected = [id]; + reselect(1); + }); + } + } + return false; + }); + + $tmp.rebind('click contextmenu', function(e) { + if (e.type === 'contextmenu') { + if (!e.ctrlKey && !e.metaKey && !e.shiftKey) { + $('.ui-selected', domTable).removeClass('ui-selected'); + } + $(this).addClass('ui-selected dragover'); + transferPanelContextMenu(null); + return !!M.contextMenuUI(e); + } + else { + var domNode = domTable.querySelector('tr'); + $.hideContextMenu(); + if (e.shiftKey && domNode) { + var start = domNode; + var end = this; + if ($.TgridLastSelected && $($.TgridLastSelected).hasClass('ui-selected')) { + start = $.TgridLastSelected; + } + if ($(start).index() > $(end).index()) { + end = start; + start = this; + } + $('.ui-selected', domTable).removeClass('ui-selected'); + $([start, end]).addClass('ui-selected'); + $(start).nextUntil($(end)).each(function(i, e) { + $(e).addClass('ui-selected'); + }); + } + else if (!e.ctrlKey && !e.metaKey) { + $('.ui-selected', domTable).removeClass('ui-selected'); + $(this).addClass('ui-selected'); + $.TgridLastSelected = this; + } + else { + if ($(this).hasClass("ui-selected")) { + $(this).removeClass("ui-selected"); + } + else { + $(this).addClass("ui-selected"); + $.TgridLastSelected = this; + } + } + } + + return false; + }); + $tmp = undefined; + + delay('tfs-ps-update', function() { + // XXX: This update will fire ps-y-reach-end, set a flag to ignore it... + + $.isTfsPsUpdate = true; + Ps.update(domScrollingTable); + + onIdle(function() { + $.isTfsPsUpdate = false; + }); + }); + }; + + $.transferClose = function() { + $('.nw-fm-left-icon.transfers').removeClass('active'); + $('#fmholder').removeClass('transfer-panel-opened'); + }; + + $.transferOpen = function(force) { + if (force || !$('.nw-fm-left-icon.transfers').hasClass('active')) { + $('.nw-fm-left-icon').removeClass('active'); + $('.nw-fm-left-icon.transfers').addClass('active'); + $('#fmholder').addClass('transfer-panel-opened'); + var domScrollingTable = M.getTransferElements().domScrollingTable; + if (!domScrollingTable.classList.contains('ps')) { + Ps.initialize(domScrollingTable); + } + fm_tfsupdate(); // this will call $.transferHeader(); + } + }; + + $.clearTransferPanel = function() { + var obj = M.getTransferElements(); + if (obj.domTable && !obj.domTable.querySelector('tr')) { + $('.transfer-clear-all-icon').addClass('disabled'); + $('.transfer-pause-icon').addClass('disabled'); + $('.transfer-clear-completed').addClass('disabled'); + obj.domTableEmptyTxt.classList.remove('hidden'); + obj.domUploadBlock.classList.add('hidden'); + obj.domDownloadBlock.classList.add('hidden'); + obj.domUploadBlock.classList.remove('overquota', 'error'); + obj.domDownloadBlock.classList.remove('overquota', 'error'); + obj.domUploadProgressText.textContent = l[1418]; + obj.domDownloadProgressText.textContent = l[1418]; + $('.nw-fm-left-icon.transfers').removeClass('transfering').find('p').removeAttr('style'); + } + + if (M.currentdirid === 'transfers') { + fm_tfsupdate(); + $.tresizer(); + } + }; + + $.removeTransferItems = function($trs) { + var type = null; + if (!$trs) { + $trs = $('.transfer-table tr.transfer-completed'); + type = mega.tpw.DONE; + } + var $len = $trs.length; + const ids = []; + for (let i = 0; i < $trs.length; i++) { + ids.push($trs.eq(i).prop('id')); + } + if ($len && $len < 100) { + $trs.fadeOut(function() { + $(this).remove(); + if (!--$len) { + $.clearTransferPanel(); + } + }); + } + else { + $trs.remove(); + Soon($.clearTransferPanel); + } + tfsheadupdate({c: ids}); + mega.tpw.clearRows(type); + }; + bindTransfersMassEvents('.fm-transfers-header'); + + $('.transfer-clear-completed').rebind('click', function() { + if (!$(this).hasClass('disabled')) { + $.removeTransferItems(); + } + }); +}; + +/** + * Depending the viewmode this fires either addIconUI or addGridUI, plus addTreeUI + * @param {Boolean} aNoTreeUpdate Omit the call to addTreeUI + */ +FileManager.prototype.addViewUI = function(aNoTreeUpdate, refresh) { + if (this.viewmode) { + this.addIconUI(undefined, refresh); + } + else { + this.addGridUI(refresh); + } + + if (!aNoTreeUpdate) { + this.addTreeUI(); + } +}; + +FileManager.prototype.addIconUI = function(aQuiet, refresh) { + "use strict"; + + if (this.chat) { + return; + } + if (d) { + console.time('iconUI'); + } + + // Change title for Public link page + if (page === 'fm/public-links') { + $('.files-menu.context .dropdown-item.sort-timeAd span').safeHTML(l[20694]); + } + else { + $('.files-menu.context .dropdown-item.sort-timeAd span').safeHTML(l[17445]); + } + + $('.fm-files-view-icon.block-view').addClass('active'); + $('.fm-files-view-icon.listing-view').removeClass('active'); + $('.shared-grid-view').addClass('hidden'); + $('.out-shared-grid-view').addClass('hidden'); + $('.files-grid-view.fm').addClass('hidden'); + $('.fm-blocks-view.fm').addClass('hidden'); + + if (this.currentdirid === 'shares') { + $('.shared-blocks-view').removeClass('hidden'); + initPerfectScrollbar($('.shared-blocks-scrolling', '.shared-blocks-view')); + } + else if (this.currentdirid === 'out-shares') { + $('.out-shared-blocks-view').removeClass('hidden'); + initPerfectScrollbar($('.out-shared-blocks-scrolling', '.out-shared-blocks-view')); + } + else if (this.currentrootid === 'shares' && !this.v.length) { + const viewModeClass = (M.viewmode ? '.fm-blocks-view' : '.files-grid-view') + '.fm.shared-folder-content'; + + $(viewModeClass).removeClass('hidden'); + initPerfectScrollbar($(viewModeClass)); + } + // user management ui update is handled in Business Account classes. + else if (this.v.length && M.currentCustomView.type !== 'gallery') { + + $('.fm-blocks-view.fm').removeClass('hidden'); + if (this.currentCustomView) { + $('.fm-blocks-view.fm').addClass(this.currentCustomView.type + '-view'); + } + else { + $('.fm-blocks-view.fm').removeClass('out-shares-view public-links-view'); + } + if (!aQuiet) { + initPerfectScrollbar($('.file-block-scrolling', '.fm-blocks-view.fm')); + } + } + + $('.fm-blocks-view, .fm-empty-cloud, .fm-empty-folder,.shared-blocks-view, .out-shared-blocks-view') + .rebind('contextmenu.fm', function(e) { + if (page === "fm/links") { // Remove context menu option from filtered view + return false; + } + $(this).find('.data-block-view').removeClass('ui-selected'); + // is this required? don't we have a support for a multi-selection context menu? + if (selectionManager) { + selectionManager.clear_selection(); + } + $.selected = []; + $.hideTopMenu(); + return !!M.contextMenuUI(e, 2); + }); + + $('.files-menu.context .submenu.sorting .dropdown-item.sort-grid-item').rebind('click', function(e) { + var sortType; + var $me = $(this); + + if ($me.hasClass('sort-size')) { + sortType = 'size'; + } + else if ($me.hasClass('sort-name')) { + sortType = 'name'; + } + else if ($me.hasClass('sort-label')) { + sortType = 'label'; + } + else if ($me.hasClass('sort-type')) { + sortType = 'type'; + } + else if ($me.hasClass('sort-timeAd')) { + sortType = 'ts'; + } + else if ($me.hasClass('sort-timeMd')) { + sortType = 'mtime'; + } + else if ($me.hasClass('sort-fav')) { + sortType = 'fav'; + } + else if ($me.hasClass('sort-owner')) { + sortType = 'owner'; + } + else if ($me.hasClass('sort-access')) { + sortType = 'access'; + } + else if ($me.hasClass('sort-sharedwith')) { + sortType = 'sharedwith'; + } + else if ($me.hasClass('sort-sharecreated')) { + sortType = 'date'; + } + else if ($me.hasClass('sort-versions')) { + sortType = 'versions'; + } + + var classToAdd = 'selected'; + var iconClassToAdd = 'icon-up'; + var sortDir = 1; + + if ($me.hasClass('selected') && !$me.hasClass('inverted') ) { + classToAdd += ' inverted'; + iconClassToAdd = 'icon-down'; + sortDir = -1; + } + + $('.files-menu.context .submenu.sorting .dropdown-item.sort-grid-item').removeClass('selected inverted'); + $('i.sprite-fm-mono', $me).removeClass('icon-up icon-down').addClass(iconClassToAdd); + $me.addClass(classToAdd); + + M.doSort(sortType, sortDir); + M.renderMain(); + }); + + if (this.currentdirid === 'shares') { + $.selectddUIgrid = '.shared-blocks-scrolling'; + $.selectddUIitem = 'a'; + } + else if (this.currentdirid === 'out-shares') { + $.selectddUIgrid = '.out-shared-blocks-scrolling'; + $.selectddUIitem = 'a'; + } + else if (M.currentCustomView.type === 'gallery') { + $.selectddUIgrid = '.gallery-view'; + } + else { + $.selectddUIgrid = '.file-block-scrolling'; + $.selectddUIitem = 'a'; + } + this.addSelectDragDropUI(refresh); + if (d) { + console.timeEnd('iconUI'); + } + +}; + +FileManager.prototype.addGridUI = function(refresh) { + "use strict"; + + if (this.chat) { + return; + } + if (d) { + console.time('gridUI'); + } + + // Change title for Public link page + if (page === 'fm/public-links') { + $('.fm .grid-table thead .ts').text(l[20694]); + $('.fm .grid-table thead .date').text(l[20694]); + $('.dropdown.body.files-menu .dropdown-item.visible-col-select[megatype="timeAd"] span').text(l[20694]); + } + else { + $('.fm .grid-table thead .ts').text(l[17445]); + $('.fm .grid-table thead .date').text(l[17445]); + $('.dropdown.body.files-menu .dropdown-item.visible-col-select[megatype="timeAd"] span').text(l[17445]); + } + + // $.gridDragging=false; + $.gridLastSelected = false; + $('.fm-files-view-icon.listing-view').addClass('active'); + $('.fm-files-view-icon.block-view').removeClass('active'); + + $.gridHeader = function() { + if (folderlink) { + M.columnsWidth.cloud.versions.viewed = false; + M.columnsWidth.cloud.versions.disabled = true; + M.columnsWidth.cloud.fav.viewed = false; + M.columnsWidth.cloud.fav.disabled = true; + M.columnsWidth.cloud.label.viewed = false; + M.columnsWidth.cloud.label.disabled = true; + } + else { + if (M.columnsWidth.cloud.fav.disabled) { + // came from folder-link + M.columnsWidth.cloud.fav.viewed = true; + } + M.columnsWidth.cloud.versions.disabled = false; + M.columnsWidth.cloud.fav.disabled = false; + M.columnsWidth.cloud.label.disabled = false; + + // if we have FM configuration + var storedColumnsPreferences = mega.config.get('fmColPrefs'); + if (storedColumnsPreferences !== undefined) { + var prefs = getFMColPrefs(storedColumnsPreferences); + for (var colPref in prefs) { + if (Object.prototype.hasOwnProperty.call(prefs, colPref)) { + M.columnsWidth.cloud[colPref].viewed = + prefs[colPref] > 0; + } + } + } + + if (M.currentrootid === M.RubbishID) { + M.columnsWidth.cloud.fav.disabled = true; + M.columnsWidth.cloud.fav.viewed = false; + } + } + + if (M && M.columnsWidth && M.columnsWidth.cloud) { + + M.columnsWidth.updateColumnStyle(); + + if (M.megaRender && M.megaRender.megaList) { + if (!M.megaRender.megaList._scrollIsInitialized) { + M.megaRender.megaList.resized(); + } + else { + M.megaRender.megaList.scrollUpdate(); + } + } + } + }; + + $('.fm-blocks-view.fm').addClass('hidden'); + $('.fm-chat-block').addClass('hidden'); + $('.shared-blocks-view').addClass('hidden'); + $('.shared-grid-view').addClass('hidden'); + $('.out-shared-blocks-view').addClass('hidden'); + $('.out-shared-grid-view').addClass('hidden'); + $('.files-grid-view.fm').addClass('hidden'); + + if (this.currentdirid === 'shares') { + $('.shared-grid-view').removeClass('hidden'); + initPerfectScrollbar($('.grid-scrolling-table', '.shared-grid-view')); + } + else if (this.currentdirid === 'out-shares') { + $('.out-shared-grid-view').removeClass('hidden'); + initPerfectScrollbar($('.grid-scrolling-table', '.out-shared-grid-view')); + } + else if (this.currentrootid === 'shares' && !this.v.length) { + const viewModeClass = (M.viewmode ? '.fm-blocks-view' : '.files-grid-view') + '.fm.shared-folder-content'; + + $(viewModeClass).removeClass('hidden'); + initPerfectScrollbar($(viewModeClass, '.shared-details-block')); + } + else if (this.v.length) { + $('.files-grid-view.fm').removeClass('hidden'); + + if (this.currentCustomView) { + if (this.currentCustomView.type === 'gallery' + || this.currentCustomView.type === 'albums') { + $('.files-grid-view.fm').addClass('hidden'); + } + else { + $('.files-grid-view.fm').addClass(this.currentCustomView.type + '-view'); + } + } + else { + $('.files-grid-view.fm').removeClass('out-shares-view public-links-view'); + } + $.gridHeader(); + + // if there is any node that already rendered before getting correct value, update with resize handler. + fm_resize_handler(); + } + + $('.grid-url-arrow').show(); + $('.grid-url-header').text(''); + + $('.files-grid-view.fm .grid-scrolling-table,.files-grid-view.fm .file-block-scrolling,' + + '.fm-empty-cloud,.fm-empty-folder,.fm.shared-folder-content').rebind('contextmenu.fm', e => { + if (page === "fm/links" && page === "fm/faves") { // Remove context menu option from filtered view + return false; + } + $('.fm-blocks-view .data-block-view').removeClass('ui-selected'); + if (selectionManager) { + selectionManager.clear_selection(); + } + $.selected = []; + $.hideTopMenu(); + return !!M.contextMenuUI(e, 2); + }); + + // enable add star on first column click (make favorite) + $('.grid-table.shared-with-me tr td:first-child').add('.grid-table.out-shares tr td:first-child') + .add('.grid-table.fm tr td:nth-child(2)').rebind('click', function() { + $.hideContextMenu(); + if (M.isInvalidUserStatus()) { + return; + } + var id = [$(this).parent().attr('id')]; + var newFavState = Number(!M.isFavourite(id)); + + // Handling favourites is allowed for full permissions shares only + if (M.getNodeRights(id) > 1) { + M.favourite(id, newFavState); + return false; + } + }); + + $('.grid-table .arrow').rebind('click', function(e) { + // this grid-table is used in the chat - in Archived chats. It won't work there, so - skip doing anything. + if (M.chat) { + return; + } + var cls = $(this).attr('class'); + var dir = 1; + + // Excludes colour sorting dialog for contacts + if (cls.includes('name') && !pfid) { + return M.labelSortMenuUI(e); + } + else { + M.resetLabelSortMenuUI(); + + if (cls && cls.indexOf('desc') > -1) { + dir = -1; + } + for (var sortBy in M.sortRules) { + if (cls.indexOf(sortBy) !== -1) { + + var dateColumns = ['ts', 'mtime', 'date']; + + if (dir !== -1 && dateColumns.indexOf(sortBy) !== -1) { + if (cls.indexOf('asc') === -1) { + dir = -1; + } + } + + M.doSort(sortBy, dir); + M.renderMain(); + + break; + } + } + } + }); + + var showColumnsContextMenu = function(e) { + var notAllowedTabs = ['shares', 'out-shares']; + if (notAllowedTabs.indexOf(M.currentdirid) !== -1) { + return false; + } + M.contextMenuUI(e, 7); + return false; + }; + + $('.grid-table th').rebind('contextmenu', e => showColumnsContextMenu(e)); + + $('.column-settings.overlap').rebind('click', + function(e) { + var $me = $(this); + if ($me.hasClass('c-opened')) { + $.hideContextMenu(); + return false; + } + showColumnsContextMenu(e); + $me.addClass('c-opened'); + return false; + }); + + $('.files-menu.context .dropdown-item.visible-col-select').rebind('click', function(e) { + var $me = $(this); + if ($me.hasClass('notactive')) { + return false; + } + + var targetCol = $me.attr('megatype'); + + if ($me.attr('isviewed')) { + $me.removeAttr('isviewed'); + $('i', $me).removeClass('icon-check').addClass('icon-add'); + M.columnsWidth.cloud[targetCol].viewed = false; + } + else { + $me.attr('isviewed', 'y'); + $('i', $me).removeClass('icon-add').addClass('icon-check'); + M.columnsWidth.cloud[targetCol].viewed = true; + } + + M.columnsWidth.cloud.fname.lastOffsetWidth = null; + M.columnsWidth.updateColumnStyle(); + + var columnPreferences = mega.config.get('fmColPrefs'); + if (columnPreferences === undefined) { + columnPreferences = 108; // default + } + var colConfigNb = getNumberColPrefs(targetCol); + if (colConfigNb) { + if (M.columnsWidth.cloud[targetCol].viewed) { + columnPreferences |= colConfigNb; + } + else { + columnPreferences &= ~colConfigNb; + } + } + mega.config.set('fmColPrefs', columnPreferences); + + if (M.megaRender && M.megaRender.megaList) { + if (!M.megaRender.megaList._scrollIsInitialized) { + M.megaRender.megaList.resized(); + } + else { + M.megaRender.megaList.scrollUpdate(); + } + } + $.hideContextMenu && $.hideContextMenu(); + return false; + }); + + + $('.grid-first-th').rebind('click', function() { + var $el = $(this).children().first(); + var c = $el.attr('class'); + var d = 1; + + if (c && (c.indexOf('desc') > -1)) { + d = -1; + $el.removeClass('desc').addClass('asc'); + } + else { + $el.removeClass('asc').addClass('desc'); + } + + var fav = function(el) { + return el.fav; + }; + + if (M.v.some(fav)) { + for (var f in M.sortRules) { + if (c.indexOf(f) !== -1) { + M.doSort(f, d); + M.renderMain(); + break; + } + } + } + }); + + if (this.currentdirid === 'shares') { + $.selectddUIgrid = '.shared-grid-view .grid-scrolling-table'; + } + else if (this.currentdirid === 'out-shares') { + $.selectddUIgrid = '.out-shared-grid-view .grid-scrolling-table'; + } + else if (M.currentCustomView.type === 'gallery') { + $.selectddUIgrid = '.gallery-view'; + } + else { + $.selectddUIgrid = '.files-grid-view.fm .grid-scrolling-table'; + } + + $.selectddUIitem = 'tbody tr'; + this.addSelectDragDropUIDelayed(refresh); + + if (d) { + console.timeEnd('gridUI'); + } +}; + +FileManager.prototype.addGridUIDelayed = function(refresh) { + delay('GridUI', function() { + M.addGridUI(refresh); + }, 20); +}; + +// Todo Enhance this or probably make this into MegaInput? +FileManager.prototype.initMegaSwitchUI = function() { + + 'use strict'; + + const $switches = $('.mega-switch'); + + const _setHandleIcon = ($handle, on) => { + + if (on) { + $handle.removeClass('icon-minimise-after'); + $handle.addClass('icon-check-after'); + } + else { + $handle.addClass('icon-minimise-after'); + $handle.removeClass('icon-check-after'); + } + }; + + $switches.attr({ + 'role': 'switch', + 'aria-checked': function() { + + const on = this.classList.contains('toggle-on'); + const $handle = $('.mega-feature-switch', this).addClass('sprite-fm-mono-after'); + + _setHandleIcon($handle, on); + + return on; + }, + 'tabindex': '0', + }); + + $(document).rebind('update.accessibility', '.mega-switch', e => { + + const on = e.target.classList.contains('toggle-on'); + + e.target.setAttribute('aria-checked', on); + + _setHandleIcon($(e.target.querySelector('.mega-feature-switch')).addClass('sprite-fm-mono-after'), on); + }); +}; + +FileManager.prototype.getDDhelper = function getDDhelper() { + 'use strict'; + + var id = '#fmholder'; + if (page === 'start') { + id = '#startholder'; + } + $('.dragger-block').remove(); + $(id).append( + '
              ' + + '
              ' + + '
              1
              ' + + '
              ' + ); + $('.dragger-block').show(); + $('.dragger-files-number').hide(); + return $('.dragger-block')[0]; +}; + +FileManager.prototype.addSelectDragDropUI = function(refresh) { + "use strict"; + + if (this.currentdirid && (this.currentdirid.substr(0, 7) === 'account' || M.currentCustomView.type === 'gallery')) { + return false; + } + + if (d) { + console.time('selectddUI'); + } + + var mainSel = $.selectddUIgrid + ' ' + $.selectddUIitem; + var dropSel = $.selectddUIgrid + ' ' + $.selectddUIitem + '.folder'; + + $(dropSel).droppable({ + tolerance: 'pointer', + drop: function(e, ui) { + $.doDD(e, ui, 'drop', 0); + }, + over: function(e, ui) { + $.doDD(e, ui, 'over', 0); + }, + out: function(e, ui) { + $.doDD(e, ui, 'out', 0); + } + }); + + if ($.gridDragging) { + $('body').addClass('dragging ' + ($.draggingClass || '')); + } + + var $ddUIitem = $(mainSel); + var $ddUIgrid = $($.selectddUIgrid); + $ddUIitem.draggable({ + start: function(e, u) { + if (d) { + console.log('draggable.start'); + } + $.hideContextMenu(e); + $.gridDragging = true; + $('body').addClass('dragging'); + if (!$(this).hasClass('ui-selected')) { + selectionManager.resetTo($(this).attr('id')); + } + var max = ($(window).height() - 96) / 24; + var html = []; + $.selected.forEach(function(id, i) { + var n = M.d[id]; + if (n) { + if (max > i) { + html.push( + '
              ' + + '
              ' + + escapeHTML(n.name) + '
              ' + ); + } + } + }); + if ($.selected.length > max) { + $('.dragger-files-number').text($.selected.length); + $('.dragger-files-number').show(); + } + $('#draghelper .dragger-content').html(html.join("")); + $.draggerHeight = $('#draghelper .dragger-content').outerHeight(); + $.draggerWidth = $('#draghelper .dragger-content').outerWidth(); + $.draggerOrigin = M.currentdirid; + $.dragSelected = clone($.selected); + }, + drag: function(e, ui) { + if (ui.position.top + $.draggerHeight - 28 > $(window).height()) { + ui.position.top = $(window).height() - $.draggerHeight + 26; + } + if (ui.position.left + $.draggerWidth - 58 > $(window).width()) { + ui.position.left = $(window).width() - $.draggerWidth + 56; + } + }, + refreshPositions: true, + containment: 'document', + scroll: false, + distance: 10, + revertDuration: 200, + revert: true, + cursorAt: {right: 90, bottom: 56}, + helper: function(e, ui) { + $(this).draggable("option", "containment", [72, 42, $(window).width(), $(window).height()]); + return M.getDDhelper(); + }, + stop: function(event) { + if (d) { + console.log('draggable.stop'); + } + $.gridDragging = $.draggingClass = false; + $('body').removeClass('dragging').removeClassWith("dndc-"); + var origin = $.draggerOrigin; + setTimeout(function __onDragStop() { + M.onTreeUIOpen(M.currentdirid, false, true); + }, 200); + delete $.dragSelected; + } + }); + + $ddUIgrid.selectable({ + filter: $.selectddUIitem, + cancel: '.ps__scrollbar-y-rail, .ps__scrollbar-x-rail, thead', + start: e => { + $.hideContextMenu(e); + $.hideTopMenu(); + $.selecting = true; + }, + stop: () => { + M.renderSearchBreadcrumbs(); + $.selecting = false; + }, + appendTo: $.selectddUIgrid + }); + + // Since selectablecreate is triggered only on first creation of the selectable widget, we need to find a way + // to notify any code (selectionManager) that it can now hook selectable events after the widget is created + $ddUIgrid.trigger('selectablereinitialized'); + + const contextMenuHandler = function(e) { + $.hideContextMenu(e); + + if (e.shiftKey) { + selectionManager.shift_select_to($(this).attr('id'), false, true, true); + } + else if (e.ctrlKey !== false || e.metaKey !== false) { + selectionManager.add_to_selection($(this).attr('id')); + $.gridLastSelected = this; + } + else { + var id = $(this).attr('id'); + + if (selectionManager.selected_list.indexOf(id) === -1) { + selectionManager.resetTo(id); + } + else { + selectionManager.add_to_selection(id); + $.gridLastSelected = this; + } + } + + M.renderSearchBreadcrumbs(); + $.hideTopMenu(); + M.hideClickHint(); + + return !!M.contextMenuUI(e, 1); + }; + + if (!$ddUIgrid.hasClass('ddinit')) { + + $ddUIgrid.addClass('ddinit').rebind('click.filemanager', $.selectddUIitem, function(e, smEvent) { + + // This is triggered from Selection Manager + if (smEvent) { + e = smEvent; + } + + if ($.gridDragging) { + return false; + } + + const $this = $(this); + + if (e.shiftKey) { + selectionManager.shift_select_to($this.attr('id'), false, true, $.selected.length === 0); + } + else if (!e.ctrlKey && !e.metaKey) { + + $.gridLastSelected = this; + + selectionManager.clear_selection(); + selectionManager.add_to_selection($this.attr('id'), true); + } + else if ($this.hasClass("ui-selected")) { + selectionManager.remove_from_selection($this.attr('id'), false); + } + else { + $.gridLastSelected = this; + selectionManager.add_to_selection($this.attr('id')); + } + + if (!mega.cttHintTimer) { + M.showClickHint(); + } + + M.renderSearchBreadcrumbs(); + $.hideContextMenu(e); + + if ($.hideTopMenu) { + $.hideTopMenu(); + } + + return false; + }); + + $ddUIgrid.rebind('contextmenu.filemanager', $.selectddUIitem, contextMenuHandler); + + $ddUIgrid.rebind('mousewheel.selectAndScroll', e => { + + if ($.selecting) { + + delay('selectAndScroll', () => { + + $ddUIgrid = $($.selectddUIgrid); + + $ddUIgrid.selectable('refresh'); + $ddUIgrid.selectable('triggerMouseMove', e); + }, 50); + } + }); + } + + // Open folder/file in filemanager + let tappedItemId = ''; + $ddUIitem.rebind('dblclick.openTarget touchend.tabletOpenTarget', (e) => { + + let h = $(e.currentTarget).attr('id'); + const n = M.getNodeByHandle(h); + + if (!n || M.getNodeShare(n).down) { + // Prevent to preview any kind of taken down files + if (n) { + contextMenuHandler.call(e.currentTarget, e); + } + return false; + } + + // Emulate dblclick on tablet devices + if (e.type === 'touchend' && tappedItemId !== h) { + + tappedItemId = h; + delay('ddUIitem:touchend.tot', () => { + tappedItemId = ''; + }, 600); + + return false; + } + + if (n.t) { + if (e.ctrlKey) { + $.ofShowNoFolders = true; + } + $('.top-context-menu').hide(); + if (M.currentrootid === 'out-shares' || M.currentrootid === 'public-links') { + h = M.currentrootid + '/' + h; + } + M.openFolder(h); + } + else if (is_image2(n) || is_video(n)) { + if (is_video(n)) { + $.autoplay = h; + } + slideshow(h); + } + else if (is_text(n)) { + $.selected = [h]; + // there's no jquery parent for this container. + // eslint-disable-next-line local-rules/jquery-scopes + $('.dropdown.body.context .dropdown-item.edit-file-item').trigger('click'); + } + else if (M.getNodeRoot(n.h) === M.RubbishID) { + propertiesDialog(); + } + else { + M.addDownload([h]); + } + M.hideClickHint(); + }); + + if (!refresh) { + $.tresizer(); + } + + if (d) { + console.timeEnd('selectddUI'); + } + + $ddUIitem = $ddUIgrid = undefined; +}; + +FileManager.prototype.addSelectDragDropUIDelayed = function(refresh) { + delay('selectddUI', function() { + M.addSelectDragDropUI(refresh); + }); +}; + +FileManager.prototype.onSectionUIOpen = function(id) { + "use strict"; + + var tmpId; + var $fmholder = $('#fmholder', 'body'); + const isAlbums = M.currentCustomView.type === 'albums'; + + if (d) { + console.log('sectionUIopen', id, folderlink); + } + if ($.hideContextMenu) { + $.hideContextMenu(); + } + + $('.nw-fm-left-icon', $fmholder).removeClass('active'); + + if (u_type === 3 || window.is_eplusplus) { + $('.nw-fm-left-icon.conversations', $fmholder).removeClass('hidden'); + } + else { + $('.nw-fm-left-icon.conversations', $fmholder).addClass('hidden'); + } + + // View or hide left icon for business account, confirmed and paid. + if (u_attr && u_attr.b && u_attr.b.m && (u_attr.b.s === 1 || u_attr.b.s === 2) && u_privk) { + $('.nw-fm-left-icon.user-management', $fmholder).removeClass('hidden'); + } + else { + $('.nw-fm-left-icon.user-management', $fmholder).addClass('hidden'); + } + + switch (id) { + case 'opc': + case 'ipc': + case 'devices': + tmpId = 'backup-center'; + break; + case 'recents': + case 'search': + case 'shared-with-me': + case 'out-shares': + case 'public-links': + case 'backups': + case 'rubbish-bin': + tmpId = 'cloud-drive'; + break; + case 'affiliate': + tmpId = 'dashboard'; + break; + case 'albums': + tmpId = 'gallery'; + break; + case 'discovery': + tmpId = 'cloud-drive'; + break; + default: + if (M.isDynPage(id)) { + const {location} = M.dynContentLoader[id].options; + if (location) { + tmpId = location; + break; + } + } + tmpId = (mega.gallery.sections[id] || isAlbums) ? 'gallery' : id; + } + + const fmLeftIconName = String(tmpId).replace(/[^\w-]/g, ''); + let fmLeftIcons = document.getElementsByClassName('nw-fm-left-icon'); + + if (fmLeftIcons[fmLeftIconName] && !fmLeftIcons[fmLeftIconName].classList.contains('active')) { + fmLeftIcons[fmLeftIconName].classList.add('active'); + } + + let contentPanels = document.getElementsByClassName('content-panel'); + + for (let i = contentPanels.length; i--;) { + + if (contentPanels[i].classList.contains(fmLeftIconName)) { + + if (!contentPanels[i].classList.contains('active')) { + contentPanels[i].classList.add('active'); + } + } + else if (contentPanels[i].classList.contains('active')) { + contentPanels[i].classList.remove('active'); + } + } + + this.currentTreeType = M.treePanelType(); + + if (tmpId === 'cloud-drive' || tmpId === 'gallery') { + $('.nw-fm-left-icon.gallery', $fmholder).removeClass('hidden'); + } + else { + $('.nw-fm-left-icon.gallery', $fmholder).addClass('hidden'); + } + + $('.fm.fm-right-header, .fm-bottom-right-buttons', $fmholder).addClass('hidden'); + $('.fm-import-to-cloudrive, .fm-download-as-zip', $fmholder).off('click'); + + $fmholder.removeClass('affiliate-program'); + $('.fm-main', $fmholder).removeClass('active-folder-link'); + $('.nw-fm-left-icons-panel .logo', $fmholder).addClass('hidden'); + $('.fm-products-nav', $fmholder).text(''); + $('.nw-fm-left-icon.folder-link', $fmholder).removeClass('active'); + + // Prevent autofill prevent fake form to be submitted + $('#search-fake-form-2', $fmholder).rebind('submit', function() { + return false; + }); + + if (folderlink) { + // XXX: isValidShareLink won't work properly when navigating from/to a folderlink + /*if (!isValidShareLink()) { + $('.fm-breadcrumbs.folder-link .right-arrow-bg').text('Invalid folder'); + } else*/ + if (id === 'cloud-drive' || id === 'transfers') { + $('.nw-fm-left-icons-panel .logo', $fmholder).removeClass('hidden'); + $('.fm-main', $fmholder).addClass('active-folder-link'); + $('.fm-right-header', $fmholder).addClass('folder-link'); + + var $prodNav = $('.fm-products-nav').text(''); + if (!u_type) { + $prodNav.safeHTML(translate(pages['pagesmenu'])); + onIdle(function() { + clickURLs(); + bottompage.initNavButtons($fmholder); + }); + } + + // Remove import and download buttons from the search result. + if (M.currentdirid.substr(0, 6) !== 'search') { + $('.fm-import-to-cloudrive span', $fmholder) + .text(M.currentdirid === M.RootID ? l.folder_link_import_all : l.folder_link_import); + $('.fm-download-as-zip span', $fmholder) + .text(M.currentdirid === M.RootID ? l.folder_link_download_all : l.folder_link_download); + $('.fm-bottom-right-buttons', $fmholder).removeClass('hidden'); + + $('.fm-import-to-cloudrive, .fm-download-as-zip', $fmholder).rebind('click', function() { + const c = $(this).attr('class'); + + if (c.indexOf('fm-import-to-cloudrive') > -1) { + eventlog(M.currentdirid === M.RootID ? 99765 : 99763); + // Import the current folder, could be the root or sub folder + M.importFolderLinkNodes([M.currentdirid]); + } + else if (c.indexOf('fm-download-as-zip') > -1) { + eventlog(M.currentdirid === M.RootID ? 99766 : 99764); + // Download the current folder, could be the root or sub folder + M.addDownload([M.currentdirid], true); + } + }); + } + } + } + + if (id !== 'conversations') { + if (id === 'user-management') { + $('.fm-right-header').addClass('hidden'); + $('.fm-right-header-user-management').removeClass('hidden'); + M.hideEmptyGrids(); + } + else if (M.isCustomView(id).type === 'gallery' || isAlbums) { + $('.fm-right-header').addClass('hidden'); + $('.fm-right-header-user-management').addClass('hidden'); + } + else { + $('.fm-right-header').removeClass('hidden'); + $('.fm-right-header-user-management').addClass('hidden'); + } + + $('.fm-chat-block').addClass('hidden'); + } + + if ( + id !== 'cloud-drive' && + !M.isDynPage(id) && + id !== 'rubbish-bin' && + id !== 'backups' && + id !== 'shared-with-me' && + !String(M.currentdirid).includes('shares') && + id !== 'out-shares' && + !String(M.currentdirid).includes('out-shares') && + id !== 'public-links' && + !String(M.currentdirid).includes('public-links') + ) { + $('.files-grid-view.fm').addClass('hidden'); + $('.fm-blocks-view.fm').addClass('hidden'); + } + + if (id !== 'user-management') { + $('.fm-left-panel').removeClass('user-management'); + $('.user-management-tree-panel-header').addClass('hidden'); + $('.files-grid-view.user-management-view').addClass('hidden'); + $('.fm-blocks-view.user-management-view').addClass('hidden'); + $('.user-management-overview-bar').addClass('hidden'); + } + + if (id !== 'shared-with-me' && M.currentdirid !== 'shares') { + $('.shared-blocks-view').addClass('hidden'); + $('.shared-grid-view').addClass('hidden'); + } + + if (M.currentdirid !== 'out-shares') { + $('.out-shared-blocks-view').addClass('hidden'); + $('.out-shared-grid-view').addClass('hidden'); + } + + if (id !== 'shared-with-me' && id !== 'out-shares') { + $('.shares-tabs-bl').addClass('hidden'); + } + + if (tmpId !== 'gallery' || isAlbums) { + $('.gallery-view').addClass('hidden'); + } + + if (M.previousdirid && M.previousdirid.startsWith('albums')) { + if (M.currentCustomView.type === 'gallery') { + mega.gallery.albums.disposeInteractions(); + } + else if (isAlbums && mega.gallery.albums && mega.gallery.albums.grid) { + mega.gallery.albums.grid.clear(); + } + else { + $('.albums-view', $('.fm-right-files-block')).addClass('hidden'); + + if (mega.gallery.albums) { + mega.gallery.albums.disposeAll(); + } + } + } + + $(".fm-left-panel:not(.chat-lp-body)").removeClass('hidden'); + + if (id !== "recents") { + $(".fm-recents.container").addClass('hidden'); + $('.top-head').find(".recents-tab-link").addClass("hidden").removeClass('active'); + } + if (id !== 'transfers') { + if ($.transferClose) { + $.transferClose(); + } + } + else { + if (!$.transferOpen) { + M.addTransferPanelUI(); + } + $.transferOpen(true); + } + + if (id === 'affiliate') { + $('#fmholder').addClass('affiliate-program'); + } + + // required tricks to make the conversations work with the old UI HTML/css structure + if (id === "conversations") { + // moving the control of the headers in the tree panel to chat.js + ui/conversations.jsx + $('.fm-main.default > .fm-left-panel').addClass('hidden'); + + if (!is_mobile) { + window.mega.ui.searchbar.refresh(); + } + } + else if (id !== "recents") { + $('.fm-main.default > .fm-left-panel').removeClass('hidden'); + } + + // new sections UI + let sections = document.getElementsByClassName('section'); + + for (let i = sections.length; i--;) { + + if (sections[i].classList.contains(tmpId)) { + sections[i].classList.remove('hidden'); + } + else { + sections[i].classList.add('hidden'); + } + } + + // Revamp Implementation Begin + $('.js-fm-left-panel').children('section').addClass('hidden'); + + let panel; + + if ( + (id === 'cloud-drive' && !folderlink) + || id === 'shared-with-me' + || id === 'out-shares' + || id === 'public-links' + || id === 'backups' + || id === 'rubbish-bin' + || id === 'recents' + || id === 'discovery' + || isAlbums + || M.isDynPage(id) + || mega.gallery.sections[id] + ) { + M.initLeftPanel(); + } + else if (id === 'cloud-drive' || id === 'dashboard' + || id === 'account' || id === 'devices') { + + panel = document.getElementsByClassName('js-other-tree-panel').item(0); + + if (panel) { + panel.classList.remove('hidden'); + } + } + else if (id === 'user-management') { + + panel = document.getElementsByClassName('js-other-tree-panel').item(0); + + if (panel) { + panel.classList.remove('hidden'); + } + + panel = document.getElementsByClassName('js-lp-usermanagement').item(0); + + // Don't show the panel if Pro Flexi + if (panel && !u_attr.pf) { + panel.classList.remove('hidden'); + } + + if (selectionManager) { + selectionManager.clear_selection(); + } + } + + // Revamp Implementation End +}; + + +FileManager.prototype.getLinkAction = function() { + 'use strict'; + + if (M.isInvalidUserStatus()) { + return; + } + + // ToDo: Selected can be more than one folder $.selected + // Avoid multiple referencing $.selected instead use event + // add new translation message '... for multiple folders.' + // cancel descendant MEGAdrops after copyRights are accepted + if (u_type === 0) { + ephemeralDialog(l[1005]); + } + else { + var isEmbed = $(this).hasClass('embedcode-item'); + var selNodes = Array.isArray($.selected) ? $.selected.concat() : []; + var showDialog = function() { + mega.Share.initCopyrightsDialog(selNodes, isEmbed); + }; + + var mdList = mega.megadrop.isDropExist(selNodes); + if (mdList.length) { + var fldName = mdList.length > 1 ? l[17626] : l[17403].replace('%1', escapeHTML(M.d[mdList[0]].name)); + + msgDialog('confirmation', l[1003], fldName, l[18229], function(e) { + if (e) { + mega.megadrop.pufRemove(mdList); + // set showDialog as callback for after delete puf. + mega.megadrop.pufCallbacks[selNodes[0]] = {del: showDialog}; + } + }); + } + else { + showDialog(); + } + } +}; + +/** + * Initialize Statusbar Links related user interface + */ +FileManager.prototype.initStatusBarLinks = function() { + "use strict"; + + $('.js-statusbarbtn').rebind('click', function(e){ + if (this.classList.contains('download')) { + if (M.currentCustomView.type === 'albums') { + mega.gallery.albums.downloadSelectedElements(); + } + else { + M.addDownload($.selected); + } + } + else if (this.classList.contains('share')) { + M.openSharingDialog(); + } + else if (this.classList.contains('sendto')) { + openCopyDialog('conversations'); + } + else if (this.classList.contains('link')) { + M.getLinkAction(); + } + else if (this.classList.contains('delete')) { + + if (M.isInvalidUserStatus() || this.classList.contains('disabled')) { + return false; + } + + closeDialog(); + fmremove(); + } + else if (this.classList.contains('options')) { + + if (this.classList.contains('c-opened')) { + + this.classList.remove('c-opened'); + $.hideContextMenu(); + return false; + } + M.contextMenuUI(e, 1); + this.classList.add('c-opened'); + } + else if (this.classList.contains('preview')) { + if (M.currentCustomView.type === 'albums') { + mega.gallery.albums.previewSelectedElements(); + } + else { + slideshow(M.d[$.selected[0]], false); + } + } + else if (this.classList.contains('delete-from-album')) { + mega.gallery.albums.removeSelectedElements(); + } + + return false; + }); +}; + +FileManager.prototype.initLeftPanel = function() { + 'use strict'; + + const isGallery = M.currentCustomView.type === 'gallery'; + const isDiscovery = isGallery && M.currentCustomView.prefixPath === 'discovery/'; + const isAlbums = M.currentCustomView.type === 'albums'; + + let elements = document.getElementsByClassName('js-lpbtn'); + + for (var i = elements.length; i--;) { + elements[i].classList.remove('active'); + } + + elements = document.getElementsByClassName( + ((isGallery && !isDiscovery) || isAlbums) + ? 'js-lp-gallery' + : 'js-lp-myfiles' + ); + + for (var j = elements.length; j--;) { + elements[j].classList.remove('hidden'); + } + + if ((isGallery || isAlbums) && mega.gallery.albums) { + mega.gallery.albums.init(); + } + + document.getElementsByClassName('js-lp-storage-usage')[0].classList.remove('hidden'); + + this.checkLeftStorageBlock(); + + if (M.currentdirid === M.RootID) { + $('.js-clouddrive-btn').addClass('active'); + } + else if (M.currentdirid === M.BackupsId || M.currentrootid === M.InboxID) { + $('.js-lpbtn[data-link="backups"]').addClass('active'); + } + else if (M.currentrootid === 'shares' || M.currentrootid === 'out-shares') { + $('.js-lpbtn[data-link="shares"]').addClass('active'); + } + else if (M.currentdirid === 'recents') { + $('.js-lpbtn[data-link="recents"]').addClass('active'); + } + else if (M.currentrootid === 'public-links') { + $('.js-lpbtn[data-link="links"]').addClass('active'); + } + else if (M.currentrootid === M.RubbishID) { + $('.js-lpbtn[data-link="bin"]').addClass('active'); + } + else if (M.isDynPage(M.currentdirid)) { + $(`.js-lpbtn[data-link="${M.currentdirid}"]`, '.js-myfiles-panel').addClass('active'); + } + else if (isGallery && mega.gallery.sections[M.currentdirid]) { + $(`.js-lpbtn[data-link="${mega.gallery.sections[M.currentdirid].root}"]`).addClass('active'); + } + + $('.js-lpbtn').rebind('click.openSubTab', function(e) { + + let link = $(this).attr('data-link'); + + if (link === 'clouddrive') { + + let $el = $(this); + + if (M.currentdirid === M.RootID || $(e.target).hasClass('js-cloudtree-expander')) { + $el.toggleClass('collapse'); + const $treeContentPanel = $('.content-panel.active'); + if ($treeContentPanel.hasClass('collapse')) { + $treeContentPanel.removeClass('collapse'); + M.addTreeUIDelayed(); + } + else { + $treeContentPanel.addClass('collapse'); + } + $.tresizer(); + } + else { + M.openFolder(M.RootID, true); + } + return; + } + else if (link === 'upgrade') { + loadSubPage('pro'); + } + else if (M.isCustomView(link).type === 'gallery') { + + onIdle(() => { + + const gallery = mega.gallery[link]; + + if (gallery && link === M.previousdirid) { + + gallery.mode = false; + gallery.setMode('a', 1); + } + }); + } + }); +}; + + +/** + * Get "My Backups" folder Handle + * @return {void} + */ +FileManager.prototype.getMyBackups = async function() { + + 'use strict'; + + const res = await Promise.resolve(mega.attr.get(u_handle, 'bak', -2, 1)).catch(nop); + + if (!res) { + return; + } + + const handle = base64urlencode(res); + + if (!handle) { + return; + } + + M.BackupsId = handle; + + const lPaneButton = document.querySelector('.js-lp-myfiles .js-backups-btn'); + + if (lPaneButton.classList.contains('hidden')) { + lPaneButton.classList.remove('hidden'); + } +}; + +FileManager.prototype.getCameraUploads = async function() { + + "use strict"; + + const nodes = []; + const res = await Promise.resolve(mega.attr.get(u_handle, "cam", false, true)).catch(nop); + + if (!res) { + return; + } + + const handle = base64urlencode(res.h); + + if (!handle) { + return; + } + + nodes.push(handle); + M.CameraId = handle; + + this.cameraUploadUI(); + + const handle2 = base64urlencode(res.sh); + + if (handle2) { + nodes.push(handle2); + M.SecondCameraId = handle2; + } + + return nodes; +}; + +FileManager.prototype.cameraUploadUI = function() { + + "use strict"; + + if (M.CameraId) { + + const treeItem = document.querySelector(`[id="treea_${M.CameraId}"] .nw-fm-tree-folder`); + const fmItem = document.querySelector(`[id="${M.CameraId}"] .folder`); + + if (treeItem) { + treeItem.classList.add('camera-folder'); + } + + if (fmItem) { + fmItem.classList.add('folder-camera'); + } + } +}; + +(function(global) { + 'use strict'; + + var _cdialogq = Object.create(null); + + // Define what dialogs can be opened from other dialogs + var diagInheritance = { + 'recovery-key-dialog': ['recovery-key-info'], + properties: ['links', 'rename', 'copyrights', 'copy', 'move', 'share', 'saveAs'], + copy: ['createfolder'], + move: ['createfolder'], + register: ['terms'], + selectFolder: ['createfolder'], + saveAs: ['createfolder'], + share: ['share-add'], + 'stripe-pay': ['stripe-pay-success', 'stripe-pay-failure'] + }; + + var _openDialog = function(name, dsp) { + if (d > 1) { + console.log('safeShowDialog::_openDialog', name, typeof dsp, $.dialog); + } + + onIdle(function() { + if (typeof $.dialog === 'string') { + if ($.dialog === name) { + if (d > 1) { + console.log('Reopening same dialog...', name); + } + } + + // There are a few dialogs that can be opened from others, deal it. + else if (!diagInheritance[$.dialog] || diagInheritance[$.dialog].indexOf(name) < 0) { + _cdialogq[name] = dsp; + return; + } + } + + dsp(); + }); + }; + + mBroadcaster.addListener('closedialog', function() { + var name = Object.keys(_cdialogq).shift(); + + if (name) { + _openDialog(name, _cdialogq[name]); + delete _cdialogq[name]; + } + }); + + if (d) { + global._cdialogq = _cdialogq; + } + + /** + * Prevent dispatching several dialogs in top on each other + * @param {String} dialogName The dialog name to set on $.dialog + * @param {Function|Object} dispatcher The dispatcher, either a jQuery's node/selector or a function + */ + FileManager.prototype.safeShowDialog = function(dialogName, dispatcher) { + + dispatcher = (function(name, dsp) { + return tryCatch(function() { + var $dialog; + + if (d > 1) { + console.warn('Dispatching queued dialog.', name); + } + + if (typeof dsp === 'function') { + $dialog = dsp(); + } + else { + $dialog = $(dsp); + } + + if ($dialog) { + if (!$dialog.hasClass('mega-dialog') && + !$dialog.hasClass('fm-dialog-mobile') && + !$dialog.hasClass('fm-dialog')) { + + throw new Error(`Unexpected dialog(${name}) type...`); + } + + if (!$dialog.is('#ob-dialog')) { + // arrange to back any non-controlled dialogs, + // this class will be removed on the next closeDialog() + $('.mega-dialog:visible, .overlay:visible').addClass('arrange-to-back'); + fm_showoverlay(); + } + $dialog.removeClass('hidden arrange-to-back'); + } + $.dialog = String(name); + }, function(ex) { + // There was an exception dispatching the above code, move to the next queued dialog... + if (d) { + console.warn(ex); + } + mBroadcaster.sendMessage('closedialog', ex); + }); + })(dialogName, dispatcher); + + _openDialog(dialogName, dispatcher); + }; + + /** + * Don't use this method, unless you know what you are doing. + * This method would ditch the currently queued dialogs, without notifying via + * sendMessage('closedialog') or .trigger('dialog-closed'). + * This may cause side effects of some dialogs, not unmounting correctly, despite being hidden. + * E.g. this is specially dangerous with dialogs that do keyboard shortcuts or other global events. + */ + Object.defineProperty(FileManager.prototype.safeShowDialog, 'abort', { + value: function _abort() { + if (d && $.dialog) { + console.info('Aborting dialogs dispatcher while on %s, queued: ', $.dialog, _cdialogq); + } + + delete $.dialog; + loadingDialog.hide('force'); + _cdialogq = Object.create(null); + + $('html, body').removeClass('overlayed'); + $('.fm-dialog-overlay').addClass('hidden'); + $('.mega-dialog:visible, .overlay:visible').addClass('hidden'); + } + }); + +})(self); + +function MegaUtils() { + this.logger = new MegaLogger('MegaUtils'); + this.fscache = Object.create(null); + + if (typeof Intl !== 'undefined' && Intl.Collator) { + this.collator = new Intl.Collator('co', {numeric: true}); + } +} + +function MegaApi() { + this.logger = new MegaLogger('MegaApi'); +} + +MegaApi.prototype = new FileManager(); +MegaApi.prototype.constructor = MegaApi; + +MegaUtils.prototype = new MegaApi(); +MegaUtils.prototype.constructor = MegaUtils; + +// TODO: refactor api_req-related functions here. +MegaApi.prototype.setAPIPath = function(aDomain, aSave) { + 'use strict'; + + if (aDomain === 'debug') { + aDomain = location.host + ':444'; + } + apipath = 'https://' + aDomain + '/'; + + if (aSave) { + localStorage.apipath = apipath; + } + + return apipath; +}; + +MegaApi.prototype.staging = function(aSave) { + this.setAPIPath('staging.api.mega.co.nz', aSave); +}; + +MegaApi.prototype.prod = function(aSave) { + this.setAPIPath('g.api.mega.co.nz', aSave); +}; + +MegaApi.prototype._apiReqInflight = Object.create(null); +MegaApi.prototype._apiReqPollCache = Object.create(null); + +MegaApi.prototype._apiReqReplyCache = Object.create(null); +MegaApi.prototype._apiReqCacheIndex = { + g: function(req) { + 'use strict'; + + if (req.g) { + // cache for four seconds. + return -4; + } + + // cache for the session lifetime + return true; + } +}; + +/** + * Perform an API request, with capability of de-duplicating pending requests. + * @param {Object|String} params The request parameters as an object. + * If an string is provided, assumes a plain request with no additional parameters. + * @param {Number} [ch] The channel to fire the request on. + * @returns {MegaPromise} The promise is rejected if API gives a negative number. + */ +MegaApi.prototype.req = function(params, ch) { + 'use strict'; + + if (typeof params === 'string') { + params = {a: params}; + } + + var key = JSON.stringify(params); + + if (this._apiReqInflight[key]) { + if (d) { + console.info('Reusing pending api request...', params); + } + return this._apiReqInflight[key]; + } + + var self = this; + var promise = new MegaPromise(); + + if (this._apiReqReplyCache[key]) { + var entry = this._apiReqReplyCache[key]; + + if (Date.now() > entry[1]) { + delete this._apiReqReplyCache[key]; + } + else { + onIdle(function() { + if (d) { + console.info('Returning cached api request...', params, entry); + } + promise.resolve(entry[0]); + }); + return promise; + } + } + this._apiReqInflight[key] = promise; + + promise.always(function() { + delete M._apiReqInflight[key]; + }); + + api_req(params, { + callback: tryCatch(function(res) { + delete this.callback; + + if (typeof res === 'number' && res < 0) { + promise.reject.apply(promise, arguments); + } + else { + var cIdx = self._apiReqCacheIndex[params.a]; + + if (cIdx) { + if (typeof cIdx === 'function') { + cIdx = cIdx(params); + } + + self._apiReqReplyCache[key] = [clone(res), cIdx < 0 ? Date.now() + -cIdx * 1e3 : Infinity]; + } + promise.resolve.apply(promise, arguments); + } + }, promise.reject.bind(promise, EFAILED)) + }, ch | 0); + + return promise; +}; + +/** + * Wrapper around MegaApi.req with polling capabilities. + * @param {Number} seconds The number of seconds to wait between requests, returning a cached result until exhausted. + * @param {Object|String} params see MegaApi.req + * @returns {MegaPromise} + * @see MegaApi.req + */ +MegaApi.prototype.req.poll = function(seconds, params) { + 'use strict'; + + var cache = M._apiReqPollCache; + var key = JSON.stringify(params); + var logger = d && MegaLogger.getLogger('req:poll'); + + return new Promise(function _reqPollPromise(resolve, reject) { + var feedback = function(entry) { + if (entry.e) { + reject(entry.r); + } + else { + resolve(entry.r); + } + + cache = params = resolve = reject = undefined; + }; + + var fill = function(error, res) { + var entry = cache[key]; + if (!entry) { + if (d) { + logger.debug('Storing cache entry...', key); + } + entry = cache[key] = Object.create(null); + } + + entry.r = res; + entry.e = error; + + if (entry.t) { + clearTimeout(entry.t); + } + entry.t = setTimeout(function() { + if (d) { + logger.debug('Expiring cache entry...', key); + } + var c = M._apiReqPollCache[key]; + delete M._apiReqPollCache[key]; + + if (c && c.f) { + for (var i = c.f.length; i--;) { + if (d) { + logger.debug('Dispatching awaiting function call...', key, c); + } + c.f[i](); + } + } + }, Math.abs(seconds) * 1e3); + + feedback(entry); + }; + + if (cache[key]) { + if (d) { + logger.warn('Preventing API request from being re-fired.', params, cache[key]); + } + + if (seconds < 0) { + if (d) { + logger.debug('Awaiting to re-fire request...', params); + } + + var c = cache[key]; + var f = _reqPollPromise.bind(this, resolve, reject); + + if (c.f) { + c.f.push(f); + } + else { + c.f = [f]; + } + } + else { + feedback(cache[key]); + } + } + else { + M.req(params).tryCatch(fill.bind(null, false), fill.bind(null, true)); + } + }); +}; + +/** + * A wrapper around MegaApi.req + * @param {Array} params An array of parameters to pass through MegaApi.req + * @returns {MegaPromise} The promise is *always* resolved with an Array of results for each API request. + * @see MegaApi.req + */ +MegaApi.prototype.reqA = function(params) { + 'use strict'; + + var self = this; + var promise = new MegaPromise(); + var mapfn = function(v) { + return self.req(v); + }; + + MegaPromise.allDone(params.map(mapfn)).unpack(promise.resolve.bind(promise)); + + return promise; +}; + +/** + * execCommandUsable + * + * Native browser 'copy' command using execCommand('copy'). + * Supported by Chrome42+, FF41+, IE9+, Opera29+ + * @returns {Boolean} + */ +MegaUtils.prototype.execCommandUsable = function() { + var result; + + try { + return document.queryCommandSupported("copy"); + } + catch (ex) { + try { + result = document.execCommand('copy'); + } + catch (ex) { + } + } + + return result === false; +}; + +/** + * Utility that will return a sorting function (can compare numbers OR strings, depending on the data stored in the + * obj), that can sort an array of objects. + * @param key {String|Function} the name of the property that will be used for the sorting OR a func that will return a + * dynamic value for the object + * @param [order] {Number} 1 for asc, -1 for desc sorting + * @param [alternativeFn] {Function} Optional function to be used for comparison of A and B if both are equal or + * undefined + * @returns {Function} + */ +MegaUtils.prototype.sortObjFn = function(key, order, alternativeFn) { + 'use strict'; + + if (!order) { + order = 1; + } + + if (typeof key !== 'function') { + var k = key; + key = function(o) { + return o[k]; + }; + } + + return function(a, b, tmpOrder) { + var currentOrder = tmpOrder ? tmpOrder : order; + + var aVal = key(a); + var bVal = key(b); + + if (typeof aVal === 'string' && typeof bVal === 'string') { + return aVal.localeCompare(bVal, locale) * currentOrder; + } + else if (typeof aVal === 'string' && typeof bVal === 'undefined') { + return 1 * currentOrder; + } + else if (typeof aVal === 'undefined' && typeof bVal === 'string') { + return -1 * currentOrder; + } + else if (typeof aVal === 'number' && typeof bVal === 'undefined') { + return 1 * currentOrder; + } + else if (typeof aVal === 'undefined' && typeof bVal === 'number') { + return -1 * currentOrder; + } + else if (typeof aVal === 'undefined' && typeof bVal === 'undefined') { + if (alternativeFn) { + return alternativeFn(a, b, currentOrder); + } + else { + return -1 * currentOrder; + } + } + else if (typeof aVal === 'number' && typeof bVal === 'number') { + var _a = aVal || 0; + var _b = bVal || 0; + if (_a > _b) { + return 1 * currentOrder; + } + if (_a < _b) { + return -1 * currentOrder; + } + else { + if (alternativeFn) { + return alternativeFn(a, b, currentOrder); + } + else { + return 0; + } + } + } + else { + return 0; + } + }; +}; + + +/** + * This is an utility function that would simply do a localCompare OR use Intl.Collator for comparing 2 strings. + * + * @param stringA {String} String A + * @param stringB {String} String B + * @param direction {Number} -1 or 1, for inversing the direction for sorting (which is most of the cases) + * @returns {Number} + */ +MegaUtils.prototype.compareStrings = function megaUtilsCompareStrings(stringA, stringB, direction) { + + if (this.collator) { + return this.collator.compare(stringA || '', stringB || '') * direction; + } + + return (stringA || '').localeCompare(stringB || '') * direction; +}; + +/** + * Promise-based XHR request + * @param {Object|String} aURLOrOptions URL or options + * @param {Object|String} [aData] Data to send, optional + * @returns {MegaPromise} + */ +MegaUtils.prototype.xhr = megaUtilsXHR; + +/** + * Retrieve a call stack + * @return {String} + */ +MegaUtils.prototype.getStack = function megaUtilsGetStack() { + var stack; + + if (is_chrome_firefox) { + stack = Components.stack.formattedStack; + } + + if (!stack) { + stack = (new Error()).stack; + + if (!stack) { + try { + throw new Error(); + } + catch (e) { + stack = e.stack; + } + } + } + + return stack; +}; + +/** + * Get function caller. + * @returns {String} caller + */ +MegaUtils.prototype.getCaller = function megaUtilsGetCaller() { + 'use strict'; + var stackIdx = 2; + var stack = M.getStack().split('\n'); + + for (var i = stack.length; i--;) { + if (stack[i].indexOf('getCaller') > 0) { + stackIdx = i; + break; + } + } + + stack = String(stack.splice(++stackIdx + (stack[0] === 'Error'))); + + var m = stack.match(/at\s(\S+)/); + if (m) { + return String(m[1]).split(/[\s:]/)[0]; + } + + return ''; +}; + +/** + * Check whether there are pending transfers. + * + * @return {Boolean} + */ +MegaUtils.prototype.hasPendingTransfers = function megaUtilsHasPendingTransfers() { + 'use strict'; + + return ( + (fminitialized && ulmanager.isUploading) || dlmanager.isDownloading + || typeof dlmanager.isStreaming === 'object' + ); +}; + +/** + * On transfers completion cleanup + */ +MegaUtils.prototype.resetUploadDownload = function megaUtilsResetUploadDownload() { + if (!ul_queue.some(isQueueActive)) { + ul_queue = new UploadQueue(); + ulmanager.isUploading = false; + ASSERT(ulQueue._running === 0, 'ulQueue._running inconsistency on completion'); + ulQueue._pending = []; + ulQueue.setSize((fmconfig.ul_maxSlots | 0) || 4); + + if (page !== 'download') { + + if (mega.megadrop.isInit()) { + mega.megadrop.onCompletion(); + } + } + } + + if (!dl_queue.some(isQueueActive)) { + dl_queue = new DownloadQueue(); + dlmanager.isDownloading = false; + dlQueue.setSize((fmconfig.dl_maxSlots | 0) || 4); + dlQueue.resume(); + + delay.cancel('overquota:retry'); + delay.cancel('overquota:uqft'); + + dlmanager._quotaPushBack = {}; + dlmanager._dlQuotaListener = []; + + + $.totalDL = false; + } + + if (!dlmanager.isDownloading && !ulmanager.isUploading) { + /* destroy all xhr */ + clearTransferXHRs(); + + $('.transfer-pause-icon').addClass('disabled'); + $('.transfer-clear-all-icon').addClass('disabled'); + $('.nw-fm-left-icon.transfers').removeClass('transfering'); + $('.transfers .nw-fm-percentage li p').css('transform', 'rotate(0deg)'); + M.tfsdomqueue = Object.create(null); + GlobalProgress = Object.create(null); + delete $.transferprogress; + if ($.mTransferAnalysis) { + clearInterval($.mTransferAnalysis); + delete $.mTransferAnalysis; + } + $('.transfer-panel-title span').text(''); + dlmanager.dlRetryInterval = 3000; + percent_megatitle(); + + if (dlmanager.onDownloadFatalError) { + dlmanager.showMEGASyncOverlay(true, dlmanager.onDownloadFatalError); + delete dlmanager.onDownloadFatalError; + } + } + + if (d) { + dlmanager.logger.info("resetUploadDownload", ul_queue.length, dl_queue.length); + } + + if (page === 'download') { + delay('percent_megatitle', percent_megatitle); + } + else { + fm_tfsupdate(); + } +}; + +/** + * Abort all pending transfers. + * @param force {boolean} Force to abort transfers or not + * + * @return {MegaPromise} + * Resolved: Transfers were aborted + * Rejected: User canceled confirmation dialog + * + * @details This needs to be used when an operation requires that + * there are no pending transfers, such as a logout. + */ +MegaUtils.prototype.abortTransfers = function megaUtilsAbortTransfers(force) { + "use strict"; + var promise = new MegaPromise(); + force = force || false; + + var abort = function () { + if (dlmanager.isDownloading) { + dlmanager.abort(null); + } + if (ulmanager.isUploading) { + ulmanager.abort(null); + } + if (typeof dlmanager.isStreaming === 'object') { + dlmanager.isStreaming.abort(); + } + dlmanager.isStreaming = false; + + M.resetUploadDownload(); + loadingDialog.show(); + var timer = setInterval(function() { + if (!M.hasPendingTransfers()) { + clearInterval(timer); + promise.resolve(); + } + }, 350); + }; + + if (!M.hasPendingTransfers()) { + promise.resolve(); + } else { + if (force) { + abort(); + } else { + msgDialog('confirmation', l[967], l[377] + ' ' + l[507] + '?', false, function(doIt) { + if (doIt) { + abort(); + } + else { + promise.reject(); + } + }); + } + } + + return promise; +}; + +/** + * Save new UI language. + * @param {String} The new lang + * @returns {Promise} + */ +MegaUtils.prototype.uiSaveLang = promisify(function(resolve, reject, aNewLang) { + 'use strict'; + assert(aNewLang !== window.lang); + + const ack = async() => { + let storage = localStorage; + + loadingDialog.hide(); + + /** + if ('csp' in window) { + await csp.init(); + + if (!csp.has('pref')) { + storage = sessionStorage; + } + } + /**/ + + // Store the new language in localStorage to be used upon reload + storage.lang = aNewLang; + + // If there are transfers, ask the user to cancel them to reload... + M.abortTransfers().then(resolve).catch(function(ex) { + console.debug('Not reloading upon language change...', ex); + reject(ex); + }); + }; + loadingDialog.show(); + + // Set a language user attribute on the API (This is a private but unencrypted user + // attribute so that the API can read it and send emails in the correct language) + if (window.u_handle) { + mega.attr.set( + 'lang', + aNewLang, // E.g. en, es, pt + -2, // Set to private private not encrypted + true // Set to non-historic, this won't retain previous values on API server + ).then(function() { + setTimeout(ack, 2e3); + }).catch(ack); + } + else { + ack(); + } +}); + +/** + * Reload the site cleaning databases & session/localStorage. + * + * Under non-activated/registered accounts this + * will perform a former normal cloud reload. + */ +MegaUtils.prototype.reload = function megaUtilsReload(force) { + 'use strict'; + const _reload = () => { + var u_sid = u_storage.sid; + var u_key = u_storage.k; + var privk = u_storage.privk; + var jj = localStorage.jj; + var debug = localStorage.d; + var lang = localStorage.lang; + var mcd = localStorage.testChatDisabled; + var apipath = debug && localStorage.apipath; + var cdlogger = debug && localStorage.chatdLogger; + const rad = sessionStorage.rad; + const allowNullKeys = localStorage.allownullkeys; + + force = force || sessionStorage.fmAetherReload; + + localStorage.clear(); + sessionStorage.clear(); + + if (u_sid) { + u_storage.sid = u_sid; + u_storage.privk = privk; + u_storage.k = u_key; + localStorage.wasloggedin = true; + } + + if (debug) { + localStorage.d = 1; + localStorage.minLogLevel = 0; + + if (location.host !== 'mega.nz') { + localStorage.dd = true; + if (!is_extension && jj) { + localStorage.jj = jj; + } + } + if (apipath) { + // restore api path across reloads, only for debugging purposes... + localStorage.apipath = apipath; + } + + if (cdlogger) { + localStorage.chatdLogger = 1; + } + } + + if (rad) { + sessionStorage.rad = 1; + } + if (mcd) { + localStorage.testChatDisabled = 1; + } + if (lang) { + localStorage.lang = lang; + } + if (hashLogic) { + localStorage.hashLogic = 1; + } + if (allowNullKeys) { + localStorage.allownullkeys = 1; + } + + if (force) { + localStorage.force = true; + } + else { + sessionStorage.fmAetherReload = 1; + } + location.reload(true); + loadingDialog.hide(); + }; + + if (u_type !== 3 && page !== 'download') { + stopsc(); + stopapi(); + loadfm(true); + return; + } + + // Show message that this operation will destroy the browser cache and reload the data stored by MEGA + msgDialog('confirmation', l[761], l[7713], l[6994], (doIt) => { + if (!doIt) { + return; + } + + let shouldAbortTransfers = true; + if (!ulmanager.isUploading) { + const queue = dl_queue.filter(isQueueActive); + let i = queue.length; + while (i--) { + if (!queue[i].hasResumeSupport) { + break; + } + } + shouldAbortTransfers = i >= 0; + } + + const promise = shouldAbortTransfers ? M.abortTransfers() : Promise.resolve(); + + promise.then(() => { + const waitingPromises = []; + + loadingDialog.show(); + stopsc(); + stopapi(); + + if (window.delay) { + delay.abort(); + } + + if (window.fmdb) { + waitingPromises.push(fmdb.invalidate()); + } + + if (shouldAbortTransfers) { + waitingPromises.push(M.clearFileSystemStorage()); + } + else { + // Trick our onbeforeunlaod() handler. + dlmanager.isDownloading = false; + } + + if (window.megaChatIsReady) { + waitingPromises.push(megaChat.dropAllDatabases()); + } + + Promise.allSettled(waitingPromises).then(dump).finally(_reload); + }); + }); +}; + +/** + * Clear the data on FileSystem storage. + * + * M.clearFileSystemStorage().always(console.debug.bind(console)); + */ +MegaUtils.prototype.clearFileSystemStorage = function megaUtilsClearFileSystemStorage() { + 'use strict'; + + var timer; + var _done = function _done(status) { + clearTimeout(timer); + + if (promise) { + if (d) { + console.timeEnd('fscleaning'); + console.log('FileSystem cleaning finished.', status); + } + + if (status !== 0x7ffe) { + promise.reject(status); + } + else { + promise.resolve(); + } + promise = undefined; + } + }; + + if (is_chrome_firefox || !window.requestFileSystem) { + return MegaPromise.resolve(); + } + + if (d) { + console.time('fscleaning'); + } + + timer = setTimeout(function() { + if (d) { + console.warn('FileSystem cleaning timedout...'); + } + _done(); + }, 4000); + + var promise = new MegaPromise(); + + (function _clear(storagetype) { + if (d) { + console.log('Cleaning FileSystem storage...', storagetype); + } + + function onInitFs(fs) { + var dirReader = fs.root.createReader(); + (function _readEntries(e) { + dirReader.readEntries(function(entries) { + if (!entries.length) { + _next(e || 0x7ffe); + } + else { + (function _iterate(e) { + var entry = entries.pop(); + + if (!entry) { + _readEntries(e); + } + else { + if (d > 1) { + console.debug('Got FileEntry %s', entry.name, entry); + } + + if (String(entry.name).endsWith('mega')) { + var fn = entry.isDirectory ? 'removeRecursively' : 'remove'; + + console.debug('Cleaning FileEntry %s...', entry.name, entry); + + entry[fn](_iterate, function(e) { + console.warn('Failed to remove FileEntry %s', entry.name, entry, e); + _iterate(e); + }); + } + else { + _iterate(); + } + } + })(); + } + }); + })(); + } + + function _next(status) { + if (storagetype === 0) { + _clear(1); + } + else { + _done(status); + } + } + + window.requestFileSystem(storagetype, 1024, onInitFs, _next); + })(0); + + return promise; +}; + +/** + * Resources loader through our secureboot mechanism + * @param {...*} var_args Resources to load, either plain filenames or jsl2 members + * @return {MegaPromise} + */ +MegaUtils.prototype.require = function megaUtilsRequire() { + var files = []; + var args = []; + var logger = d && MegaLogger.getLogger('require', 0, this.logger); + + toArray.apply(null, arguments).forEach(function(rsc) { + // check if a group of resources was provided + if (jsl3[rsc]) { + var group = Object.keys(jsl3[rsc]); + + args = args.concat(group); + + // inject them into jsl2 + for (var i = group.length; i--;) { + if (!jsl2[group[i]]) { + (jsl2[group[i]] = jsl3[rsc][group[i]]).n = group[i]; + } + } + } + else { + args.push(rsc); + } + }); + + args.forEach(function(file) { + + // If a plain filename, inject it into jsl2 + // XXX: Likely this will have a conflict with our current build script + if (!jsl2[file]) { + var filename = file.replace(/^.*\//, ''); + var extension = filename.split('.').pop().toLowerCase(); + var name = filename.replace(/\./g, '_'); + var type; + + if (extension === 'html') { + type = 0; + } + else if (extension === 'js') { + type = 1; + } + else if (extension === 'css') { + type = 2; + } + + jsl2[name] = {f: file, n: name, j: type}; + file = name; + } + + if (!jsl_loaded[jsl2[file].n]) { + files.push(jsl2[file]); + } + }); + + if (files.length === 0) { + // Everything is already loaded + if (logger) { + logger.debug('Nothing to load.', args); + } + return MegaPromise.resolve(); + } + + if (megaUtilsRequire.loading === undefined) { + megaUtilsRequire.pending = []; + megaUtilsRequire.loading = Object.create(null); + } + + var promise = new MegaPromise(); + var rl = megaUtilsRequire.loading; + var rp = megaUtilsRequire.pending; + var loading = Object.keys(rl).length; + + // Check which files are already being loaded + for (var i = files.length; i--;) { + var f = files[i]; + + if (rl[f.n]) { + // loading, remove it. + files.splice(i, 1); + } + else { + // not loading, track it. + rl[f.n] = M.getStack(); + } + } + + // hold up if other files are loading + if (loading) { + rp.push([files, promise]); + + if (logger) { + logger.debug('Queueing %d files...', files.length, args); + } + } + else { + + (function _load(files, promise) { + var onload = function() { + // all files have been loaded, remove them from the tracking queue + for (var i = files.length; i--;) { + delete rl[files[i].n]; + } + + if (logger) { + logger.debug('Finished loading %d files...', files.length, files); + } + + // resolve promise, in a try/catch to ensure the caller doesn't mess us.. + try { + promise.resolve(); + } + catch (ex) { + (logger || console).error(ex); + } + + // check if there is anything pending, and fire it. + var pending = rp.shift(); + + if (pending) { + _load.apply(null, pending); + } + }; + + if (logger) { + logger.debug('Loading %d files...', files.length, files); + } + + if (!files.length) { + // nothing to load + onload(); + } + else if (jsl.length) { + if (logger) { + logger.debug('File(s) externally being loaded, holding up...'); + } + mBroadcaster.once('startMega', SoonFc(90, _load.bind(this, files, promise))); + } + else { + Array.prototype.push.apply(jsl, files); + console.assert(!silent_loading, 'There is another silent loader... ' + silent_loading); + silent_loading = onload; + jsl_start(); + } + })(files, promise); + } + return promise; +}; + +/** + * Check single tab or multiple tabs and there are any active transfers. + * Show a proper message in the warning dialog before logging out. + */ +MegaUtils.prototype.logoutAbortTransfers = function megaUtilsLogoutAbortTransfers() { + "use strict"; + var promise = new MegaPromise(); + var singleTab = true; + + + var logoutAbort = function (htCase) { + if (!M.hasPendingTransfers() && singleTab) { + promise.resolve(); + } + else { + var hasTransferMsg = ""; + if (M.hasPendingTransfers() && singleTab) { + hasTransferMsg = l[19931]; + } + switch (htCase) { + case "this": + hasTransferMsg = l[19931]; + break; + case "other": + hasTransferMsg = l[19932]; + break; + case "others": + hasTransferMsg = l[19933]; + break; + case "this+other": + hasTransferMsg = l[19934]; + break; + case "this+others": + hasTransferMsg = l[19935]; + break; + } + + msgDialog('confirmation', l[967], hasTransferMsg + ' ' + l[507] + '?', false, function(doIt) { + if (doIt) { + watchdog.notify("abort_trans"); + var targetPromise = M.abortTransfers(true); + promise.linkDoneAndFailTo(targetPromise); + } + else { + promise.reject(); + } + }); + } + }; + + if (u_type === 0) { + // if it's in ephemeral session + watchdog.notify("abort_trans"); + var targetPromise = M.abortTransfers(true); + promise.linkDoneAndFailTo(targetPromise); + } else { + watchdog.query("transing").always(function (res) { + if (!res.length) { + // if it's in normal session with a single tab + logoutAbort(); + } else { + // if it's in normal session with multiple tabs + singleTab = false; + + // Watch all tabs and check hasPendingTransfers in each tab + var hasTransferTabNum = 0; + res.forEach(function (i) { + if (i) { + hasTransferTabNum++; + } + }); + + if ((hasTransferTabNum > 0) || M.hasPendingTransfers()) { + if (M.hasPendingTransfers()) { + if (hasTransferTabNum === 0) { + logoutAbort("this"); + } else if (hasTransferTabNum === 1) { + logoutAbort("this+other"); + } else { + logoutAbort("this+others"); + } + } else { + if (hasTransferTabNum === 1) { + logoutAbort("other"); + } else { + logoutAbort("others"); + } + } + } else { + promise.resolve(); + } + } + }); + } + + return promise; +}; + +/** + * Kill session and Logout + */ +MegaUtils.prototype.logout = function megaUtilsLogout() { + "use strict"; + M.logoutAbortTransfers().then(function() { + var step = 2; + var finishLogout = function() { + if (--step === 0) { + u_logout(true); + if (is_extension) { + location.reload(); + } + else if (is_mobile) { + // Always go back to the Login page on logout on mobile + loadSubPage('login'); + return location.reload(); + } + + var sitePath = getSitePath(); + if (sitePath.indexOf('fm/search/') > -1 || sitePath.indexOf('/chat') > -1) { + location.replace(getBaseUrl()); + } + else if (location.href.indexOf('fm/user-management/invdet') > -1) { + var myHost = getBaseUrl() + '/fm/user-management/invoices'; + location.replace(myHost); + } + else { + location.reload(); + } + } + }; + + loadingDialog.show(); + mega.config.flush().always(finishLogout); + var promises = []; + + if ('rad' in mega) { + mega.rad.log('\ud83d\udd1a', 'Logging out...'); + promises.push(new Promise((resolve) => setTimeout(() => mega.rad.flush().finally(resolve), 280))); + } + + if (fmdb && fmconfig.dbDropOnLogout) { + promises.push(fmdb.drop()); + } + + if (window.megaChatIsReady) { + if (megaChat.userPresence) { + megaChat.userPresence.disconnect(); + } + + if (fmconfig.dbDropOnLogout) { + promises.push(megaChat.dropAllDatabases()); + } + } + + if (window.is_eplusplus) { + promises.push(M.delPersistentData('e++ck')); + } + + if (promises.length) { + ++step; + Promise.allSettled(promises).always(finishLogout); + } + + if (u_privk && !loadfm.loading) { + // Use the 'Session Management Logout' API call to kill the current session + api_req({'a': 'sml'}, {callback: finishLogout}); + } + else { + finishLogout(); + } + }); +}; + +/** + * Convert a version string (eg, 2.1.1) to an integer, for easier comparison + * @param {String} version The version string + * @param {Boolean} hex Whether give an hex result + * @return {Number|String} + */ +MegaUtils.prototype.vtol = function megaUtilsVTOL(version, hex) { + version = String(version).split('.'); + + while (version.length < 4) { + version.push(0); + } + + version = ((version[0] | 0) & 0xff) << 24 | + ((version[1] | 0) & 0xff) << 16 | + ((version[2] | 0) & 0xff) << 8 | + ((version[3] | 0) & 0xff); + + version >>>= 0; + + if (hex) { + return version.toString(16); + } + + return version; +}; + +/** + * Retrieve data from storage servers. + * @param {String|Object} aData ufs-node's handle or public link + * @param {Number} [aStartOffset] offset to start retrieveing data from + * @param {Number} [aEndOffset] retrieve data until this offset + * @param {Function} [aProgress] callback function which is called with the percent complete + * @returns {MegaPromise} + */ +MegaUtils.prototype.gfsfetch = megaUtilsGFSFetch; + +/** + * Returns the currently running site version depending on if in development, on the live site or if in an extension + * @returns {String} Returns the string 'dev' if in development or the currently running version e.g. 3.7.0 + */ +MegaUtils.prototype.getSiteVersion = function() { + + // Use 'dev' as the default version if in development + var version = 'dev'; + + // If this is a production version the timestamp will be set + if (buildVersion.timestamp !== '') { + + // Use the website build version by default + version = buildVersion.website; + + // If an extension use the version of that (because sometimes there are independent deployments of extensions) + if (is_extension) { + version = (mega.chrome) ? buildVersion.chrome + ' ' + + (ua.details.browser === 'Edgium' ? l[23326] : l[957]) : + buildVersion.firefox + ' ' + l[959]; + } + } + + return version; +}; + +/** + * Fire "find duplicates" + */ +MegaUtils.prototype.findDupes = function() { + loadingDialog.show(); + onIdle(function() { + M.overrideModes = 1; + loadSubPage('fm/search/~findupes'); + }); +}; + +/** + * Search for nodes + * @param {String} searchTerm The search term to look for. + * @returns {Promise} + */ +MegaUtils.prototype.fmSearchNodes = function(searchTerm) { + 'use strict'; + + // Add log to see how often they use the search + eventlog(99603, JSON.stringify([1, pfid ? 1 : 0, Object(M.d[M.RootID]).tf, searchTerm.length]), pfid); + + return new Promise(function(resolve, reject) { + var promise = MegaPromise.resolve(); + var fill = function(nodes) { + var r = 0; + + for (var i = nodes.length; i--;) { + var n = nodes[i]; + if (M.nn[n.h]) { + r = 1; + } + else if (!n.fv) { + M.nn[n.h] = n.name; + } + } + + return r; + }; + + if (d) { + console.time('fm-search-nodes'); + } + + if (!M.nn) { + M.nn = Object.create(null); + + if (fmdb) { + loadingDialog.show(); + promise = new Promise(function(resolve, reject) { + var ts = 0; + var max = 96; + var options = { + sortBy: 't', + limit: 16384, + + query: function(db) { + return db.where('t').aboveOrEqual(ts); + }, + include: function() { + return true; + } + }; + var add = function(r) { + return r[r.length - 1].ts + fill(r); + }; + + onIdle(function _() { + var done = function(r) { + if (!Array.isArray(r)) { + return reject(r); + } + + if (r.length) { + ts = add(r); + + if (--max && r.length >= options.limit) { + return onIdle(_); + } + } + + if (ts >= 0) { + ts = -1; + max = 48; + r = null; + options.query = function(db) { + return db.where('t').belowOrEqual(ts); + }; + add = function(r) { + return 1262304e3 - r[0].ts + -fill(r); + }; + return onIdle(_); + } + + resolve(); + }; + fmdb.getbykey('f', options).then(done).catch(done); + }); + }); + } + else { + fill(Object.values(M.d)); + } + } + + promise.then(function() { + var h; + var filter = M.getFilterBySearchFn(searchTerm); + + if (folderlink) { + M.v = []; + for (h in M.nn) { + if (filter({name: M.nn[h]}) && h !== M.currentrootid) { + M.v.push(M.d[h]); + } + } + M.currentdirid = 'search/' + searchTerm; + M.renderMain(); + M.onSectionUIOpen('cloud-drive'); + $('.fm-right-header .fm-breadcrumbs-wrapper').addClass('hidden'); + onIdle(resolve); + // mBroadcaster.sendMessage('!sitesearch', searchTerm, 'folder-link', M.v.length); + } + else { + var handles = []; + + for (h in M.nn) { + if (!M.d[h] && filter({name: M.nn[h]}) && handles.push(h) > 4e3) { + break; + } + } + + loadingDialog.show(); + dbfetch.geta(handles).always(function() { + loadingDialog.hide(); + resolve(); + }); + } + + if (d) { + console.timeEnd('fm-search-nodes'); + } + }).catch(function(ex) { + loadingDialog.hide(); + msgDialog('warninga', l[135], l[47], ex); + reject(ex); + }); + }); +}; + + +/** check if the current M.v has any names duplicates. + * @param {String} id Handle of the current view's parent + * @returns {Object} duplicates if none was found it returns null + * */ +MegaUtils.prototype.checkForDuplication = function(id) { + 'use strict'; + if (M.currentrootid === M.RubbishID + || !M.d[id] + || M.getNodeRights(id) < 2) { + return; + } + + if (d) { + console.time('checkForDuplication'); + } + + // at this point we have V prepared. + + var names = Object.create(null); + + // count duplications O(n) + for (let i = M.v.length; i--;) { + const n = M.v[i] || false; + + if (!n.name || missingkeys[n.h]) { + if (d) { + console.debug('name-less node', missingkeys[n.h], [n]); + } + continue; + } + + let target = names[n.name]; + if (!target) { + names[n.name] = target = Object.create(null); + } + + target = target[n.t]; + if (!target) { + names[n.name][n.t] = target = Object.create(null); + target.total = 0; + target.list = []; + } + + target.total++; + target.list.push(n.h); + } + + if (d) { + console.timeEnd('checkForDuplication'); + } + + // extract duplication O(n), if we have any + // O(1) if we dont have any + var dups = Object.create(null); + var dupsFolders = Object.create(null); + + if (M.v.length > Object.keys(names).length) { + + var found = false; + + for (var nodeName in names) { + found = false; + + if (names[nodeName][0] && names[nodeName][0].total > 1) { + dups[nodeName] = names[nodeName][0].list; + found = true; + } + if (names[nodeName][1] && names[nodeName][1].total > 1) { + dupsFolders[nodeName] = names[nodeName][1].list; + found = true; + } + + if (!found) { + names[nodeName] = null; + } + } + + if (!Object.keys(dups).length && !Object.keys(dupsFolders).length) { + if (d) { + console.warn("No Duplications were found in the time when" + + "we have a mismatch in lengths " + + id + '. We have names intersected between files and folders'); + } + return; + } + + var resultObject = Object.create(null); + resultObject.files = dups; + resultObject.folders = dupsFolders; + + return resultObject; + } +}; + +mBroadcaster.addListener('mega:openfolder', SoonFc(300, function(id) { + 'use strict'; + + var dups = M.checkForDuplication(id); + if (dups && (dups.files || dups.folders)) { + var $bar = $('.fm-notification-block.duplicated-items-found').addClass('visible'); + + $('.fix-me-btn', $bar).rebind('click.df', function() { + fileconflict.resolveExistedDuplication(dups, id); + }); + $('.fix-me-close', $bar).rebind('click.df', function() { + $bar.removeClass('visible'); + }); + reselect(1); + } +})); + + +/** + * Handle a redirect from the mega.co.nz/#pro page to mega.nz/#pro page + * and keep the user logged in at the same time + * + * @param {String} [data] optional data to decode + * @returns {Boolean} + */ +MegaUtils.prototype.transferFromMegaCoNz = function(data) { + 'use strict'; + + // Get site transfer data from after the hash in the URL + var urlParts = /sitetransfer!(.*)/.exec(data || window.location); + + if (urlParts) { + + try { + // Decode from Base64 and JSON + urlParts = JSON.parse(atob(urlParts[1])); + } + catch (ex) { + console.error(ex); + loadSubPage('login'); + return false; + } + + if (urlParts) { + + api_req({a: 'log', e: 99804, m: 'User tries to transfer a session from mega.co.nz.'}); + + var toPage = String(urlParts[2] || 'fm').replace('#', ''); + // If the user is already logged in here with the same account + // we can avoid a lot and just take them to the correct page + if (JSON.stringify(u_k) === JSON.stringify(urlParts[0])) { + loadSubPage(toPage); + return false; + } + + // If the user is already logged in but with a different account just load that account instead. The + // hash they came from e.g. a folder link may not be valid for this account so just load the file manager. + else if (u_k && (JSON.stringify(u_k) !== JSON.stringify(urlParts[0]))) { + // If the user is transferred from MEGAsync and is logged in as different account on webclient. + msgDialog( + 'warninga', + l[882], + l.megasync_transferred_different_user, + '', + function() { + if (!urlParts[2] || String(urlParts[2]).match(/^fm/)) { + loadSubPage('fm'); + return false; + } + loadSubPage(toPage); + return false; + } + ); + + return false; + } + + // Likely that they have never logged in here before so we must set this + localStorage.wasloggedin = true; + u_logout(); + + // Set master key, session ID and RSA private key + u_storage = init_storage(sessionStorage); + u_k = urlParts[0]; + u_sid = urlParts[1]; + if (u_k) { + u_storage.k = JSON.stringify(u_k); + } + + loadingDialog.show(); + + var _goToPage = function() { + loadingDialog.hide(); + loadSubPage(toPage); + }; + + var _rawXHR = function(url, data, callback) { + M.xhr(url, JSON.stringify([data])) + .always(function(ev, data) { + var resp = data | 0; + if (typeof data === 'string' && data[0] === '[') { + try { + resp = JSON.parse(data)[0]; + } + catch (ex) { + } + } + callback(resp); + }); + }; + + // Performs a regular login as part of the transfer from mega.co.nz + _rawXHR(apipath + 'cs?id=0&sid=' + u_sid, {'a': 'ug'}, function(data) { + + var ctx = { + checkloginresult: function(ctx, result) { + u_type = result === ESID ? false : result; + if (toPage.substr(0, 1) === '!' && toPage.length > 7) { + _rawXHR(apipath + 'cs?id=0&domain=meganz', + {'a': 'g', 'p': toPage.substr(1, 8)}, + function(data) { + if (data) { + dl_res = data; + } + _goToPage(); + }); + } + else { + _goToPage(); + } + } + }; + api_setsid(u_sid); + u_storage.sid = u_sid; + u_checklogin3a(data, ctx); + }); + return false; + } + } +}; + +/** + * Sanitise filename so that saving to local disk won't cause any issue... + * @param {String} name The filename + * @returns {String} + */ +MegaUtils.prototype.getSafeName = function(name) { + // http://msdn.microsoft.com/en-us/library/aa365247(VS.85) + name = ('' + name).replace(/["*/:<>?\\|]+/g, '.'); + + if (name.length > 250) { + name = name.substr(0, 250) + '.' + name.split('.').pop(); + } + name = name.replace(/[\t\n\r\f\v]+/g, ' '); + name = name.replace(/\u202E|\u200E|\u200F/g, ''); + + var end = name.lastIndexOf('.'); + end = ~end && end || name.length; + if (/^(?:CON|PRN|AUX|NUL|COM\d|LPT\d)$/i.test(name.substr(0, end))) { + name = '!' + name; + } + return name; +}; +/** + * checking if name (file|folder)is satisfaying all OSs [Win + linux + Mac + Android + iOs] rules, + * so syncing to local disks won't cause any issue... + * we cant yet control cases in which : + * I sync a file named [x] from OS [A], + * to another device running another OS [B] + * And the name [x] breaks OS [B] rules. + * + * this method will be called to control, renamings from webclient UI. + * @param {String} name The filename + * @param {Boolean} [allowPathSep] whether to allow ether / or \ as a mean for nested folder creation requirements. + * @returns {Boolean} + */ +MegaUtils.prototype.isSafeName = function(name, allowPathSep) { + 'use strict'; + // below are mainly denied in windows or android. + // we can enhance this as much as we can as + // denied chars set D = W + L + M + A + I + // where W: denied chars on Winfows, L: on linux, M: on MAC, A: on Android, I: on iOS + // minimized to NTFS only + if (name.trim().length <= 0) { + return false; + } + return !(name.search(allowPathSep ? /["*:<>?|]/ : /["*/:<>?\\|]/) >= 0 || name.length > 250); +}; + +/** + * Sanitise path components so that saving to local disk won't cause any issue... + * @param {String} path The full path to sanitise + * @param {String} [file] Optional filename to append + * @returns {Array} Each sanitised path component as array members + */ +MegaUtils.prototype.getSafePath = function(path, file) { + var res = ('' + (path || '')).split(/[\\\/]+/).map(this.getSafeName).filter(String); + if (file) { + res.push(this.getSafeName(file)); + } + return res; +}; + +/** + * Get the state of the storage + * @param {Number|Boolean} [force] Do not use the cached u_attr value + * @return {MegaPromise} 0: Green, 1: Orange (almost full), 2: Red (full) + */ +MegaUtils.prototype.getStorageState = function(force) { + 'use strict'; + var promise = new MegaPromise(); + + if (!force && Object(u_attr).hasOwnProperty('^!usl')) { + return promise.resolve(u_attr['^!usl'] | 0); + } + + // XXX: Not using mega.attr.get since we don't want the result indexedDB-cached. + M.req({'a': 'uga', 'u': u_handle, 'ua': '^!usl', 'v': 1}).then(function(res) { + if (d) { + console.debug('getStorageState', res); + console.assert(res.av, 'Unexpected response...'); + } + var value = base64urldecode(res.av || ''); + + if (typeof u_attr === 'object') { + u_attr['^!usl'] = value; + } + promise.resolve(value | 0); + }).catch(function(ex) { + if (d && ex !== ENOENT) { + console.warn(ex); + } + promise.reject(ex); + }); + + return promise; +}; + +/** + * Retrieve storage quota details, i.e. by firing an uq request. + */ +MegaUtils.prototype.getStorageQuota = function() { + 'use strict'; + var promise = new MegaPromise(); + + M.req({a: 'uq', strg: 1, qc: 1}) + .then(function(res) { + if (res.uslw === undefined) { + res.uslw = 9000; + } + var data = Object.assign(Object.create(null), res, { + max: res.mstrg, + used: res.cstrg, + isFull: res.cstrg / res.mstrg >= 1, + percent: Math.floor(res.cstrg / res.mstrg * 100), + isAlmostFull: res.cstrg / res.mstrg >= res.uslw / 10000 + }); + promise.resolve(data); + }) + .catch(function(ex) { + if (d) { + console.warn(ex); + } + promise.reject(ex); + }); + + return promise; +}; + +/** + * Check Storage quota. + * @param {Number} timeout in milliseconds, defaults to 30 seconds + */ +MegaUtils.prototype.checkStorageQuota = function checkStorageQuota(timeout) { + delay('checkStorageQuota', function _csq() { + M.getStorageQuota().done(function(data) { + if (data.percent < 100) { + if (ulmanager.ulOverStorageQuota) { + onIdle(function() { + ulmanager.ulResumeOverStorageQuotaState(); + }); + } + if (is_mobile) { + mobile.overStorageQuotaOverlay.close(); + } + if (u_attr) { + delete u_attr.uspw; + } + } + M.showOverStorageQuota(data); + }); + }, timeout || 30000); +}; + +/** + * Check whether an operation could take the user over their storage quota + * @param {Number} opSize The size needed by the operation + * @returns {MegaPromise} + */ +MegaUtils.prototype.checkGoingOverStorageQuota = function(opSize) { + 'use strict'; + + var promise = new MegaPromise(); + loadingDialog.pshow(); + + M.getStorageQuota() + .always(function() { + loadingDialog.phide(); + }) + .fail(promise.reject.bind(promise)) + .done(function(data) { + + if (opSize === -1) { + opSize = data.mstrg; + } + + if (opSize > data.mstrg - data.cstrg) { + var options = {custom: 1, title: l[882], body: l[16927]}; + + M.showOverStorageQuota(data, options) + .always(function() { + promise.reject(); + }); + } + else { + promise.resolve(); + } + }); + + return promise; +}; + +/** + * Fill left-pane element with storage quota footprint. + * @param {Object} [data] already-retrieved storage-quota + * @returns {Promise} fulfilled on completion. + */ +MegaUtils.prototype.checkLeftStorageBlock = async function(data) { + 'use strict'; + + const storageBlock = document.querySelector('.js-lp-storage-usage-block'); + + if (!u_type || !fminitialized || this.storageQuotaCache) { + + if (u_type === 0) { + storageBlock.classList.add('hidden'); + } + + return false; + } + + storageBlock.classList.remove('hidden'); + + const loaderSpinner = storageBlock.querySelector('.loader'); + + // minimize DOM ops when not needed by only triggering the loader if really needed + if (loaderSpinner) { + loaderSpinner.classList.add('loading'); + } + + this.storageQuotaCache = data || await this.getStorageQuota(); + + let storageHtml; + const {percent, max, used, isAlmostFull, isFull} = this.storageQuotaCache; + const space = bytesToSize(max, 0); + const space_used = bytesToSize(used); + + storageBlock.classList.remove('over'); + storageBlock.classList.remove('warning'); + + if (isFull && !storageBlock.classList.contains("over")) { + storageBlock.classList.add('over'); + } + else if (isAlmostFull && !storageBlock.classList.contains("warning")) { + storageBlock.classList.add('warning'); + } + + if (u_attr.p) { + storageBlock.querySelector('.plan').textContent = pro.getProPlanName(u_attr.p); + } + else { + storageBlock.querySelector('.plan').textContent = l[1150]; + } + + // Show only space_used for Business and Pro Flexi accounts + if (u_attr && (u_attr.b || u_attr.pf)) { + storageHtml = `${space_used}`; + storageBlock.querySelector('.js-storagegraph').classList.add('hidden'); + storageBlock.querySelector('.js-lpbtn[data-link="upgrade"]').classList.add('hidden'); + } + else { + storageHtml = l[1607].replace('%1', `${space_used}`) + .replace('%2', `${space}`); + } + + $('.storage-txt', storageBlock).safeHTML(storageHtml); + $('.js-storagegraph span', storageBlock).outerWidth(`${percent}%`); + + if (loaderSpinner) { + loaderSpinner.remove(); + } +}; + +/** + * Check whether the provided object is a TypedArray + * @param {Object} obj The object to check + * @returns {Boolean} + */ +MegaUtils.prototype.isTypedArray = function(obj) { + 'use strict'; + + obj = Object(obj).constructor; + return obj && obj.BYTES_PER_ELEMENT > 0; +}; + +/** @property MegaUtils.mTextEncoder */ +lazy(MegaUtils.prototype, 'mTextEncoder', function() { + 'use strict'; + return new TextEncoder(); +}); + +/** + * Convert data to ArrayBuffer + * @param {*} data the data to convert + * @returns {Promise} + */ +MegaUtils.prototype.toArrayBuffer = promisify(function(resolve, reject, data) { + 'use strict'; + + if (typeof data === 'string' && data.substr(0, 5) === 'data:') { + data = dataURLToAB(data); + } + + if (data instanceof Blob) { + this.readBlob(data).then(resolve).catch(reject); + } + else if (typeof data === 'string' && data.substr(0, 5) === 'blob:') { + M.xhr({url: data, type: 'arraybuffer'}) + .then(function(ev, data) { + resolve(data); + }) + .catch(function(ex, detail) { + reject(detail || ex); + }); + } + else if (this.isTypedArray(data)) { + if (data.byteLength !== data.buffer.byteLength) { + resolve(data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)); + } + else { + resolve(data.buffer); + } + } + else if (data instanceof ArrayBuffer) { + resolve(data); + } + else { + if (typeof data !== 'string') { + try { + data = JSON.stringify(data); + } + catch (_) { + } + } + + resolve(this.mTextEncoder.encode('' + data).buffer); + } +}); + +/** + * Retrieves or creates a readable stream for the provided input data + * @param {*} data some arbitrary data + * @returns {Promise|ReadableStream>} + */ +MegaUtils.prototype.getReadableStream = async function(data) { + 'use strict'; + + if (data instanceof Blob) { + return data.stream(); + } + + return new Response(data).body; +}; + +/** + * Compress data using the Compression Streams API + * The Compression Streams API provides a JavaScript API for compressing + * and decompressing streams of data using the gzip or deflate formats. + * @param {ArrayBuffer|Blob} data some arbitrary data + * @param {String} [format] optional, default to gzip + * @returns {Promise} + */ +MegaUtils.prototype.compress = async function(data, format) { + 'use strict'; + const cs = new CompressionStream(format || 'gzip'); + const stream = (await this.getReadableStream(data)).pipeThrough(cs); + return new Response(stream).arrayBuffer(); +}; + +/** + * Decompress data using the Compression Streams API + * The Compression Streams API provides a JavaScript API for compressing + * and decompressing streams of data using the gzip or deflate formats. + * @param {ArrayBuffer|Blob} data some arbitrary data + * @param {String} [format] optional, default to gzip + * @returns {Promise} + */ +MegaUtils.prototype.decompress = async function(data, format) { + 'use strict'; + const ds = new DecompressionStream(format || 'gzip'); + const stream = (await this.getReadableStream(data)).pipeThrough(ds); + return new Response(stream).arrayBuffer(); +}; + +/** + * Save files locally + * @param {*} data The data to save to disk + * @param {String} [filename] The file name + * @returns {MegaPromise} + */ +MegaUtils.prototype.saveAs = function(data, filename) { + 'use strict'; + + var promise = new MegaPromise(); + + if (!filename) { + filename = new Date().toISOString().replace(/\W/g, '') + '.txt'; + } + + var saveToDisk = function(data) { + var dl = {awaitingPromise: promise}; + var io = new MemoryIO(Math.random().toString(36), dl); + io.begin = function() { + io.write(data, 0, function() { + io.download(filename, false); + promise.resolve(); + }); + }; + try { + io.setCredentials(false, data.byteLength, filename); + } + catch (e) { + promise.reject(e); + } + }; + + if (this.isTypedArray(data)) { + saveToDisk(data); + } + else { + this.toArrayBuffer(data) + .then(function(ab) { + saveToDisk(new Uint8Array(ab)); + }) + .catch(function() { + promise.reject.apply(promise, arguments); + }); + } + + return promise; +}; + +/** + * Read a Blob + * @param {Blob|File} blob The blob to read + * @param {String} [meth] The FileReader method to use, defaults to readAsArrayBuffer + * @returns {Promise} + */ +MegaUtils.prototype.readBlob = function(blob, meth) { + 'use strict'; + return new Promise(function(resolve, reject) { + var reader = new FileReader(); + reader.onload = function() { + resolve(this.result); + }; + reader.onerror = reject; + reader[meth || 'readAsArrayBuffer'](blob); + }); +}; + +/** + * Read a FileSystem's FileEntry + * @param {FileEntry} entry the.file.entry + * @param {String} [meth] The FileReader method to use, defaults to readAsArrayBuffer + * @returns {Promise} + */ +MegaUtils.prototype.readFileEntry = function(entry, meth) { + 'use strict'; + return new Promise(function(resolve, reject) { + if (String(entry) === '[object FileEntry]') { + entry.file(function(file) { + M.readBlob(file, meth).then(resolve).catch(reject); + }, reject); + } + else { + reject(EARGS); + } + }); +}; + +/** + * Helper function to quickly perform an IndexedDB (Dexie) operation + * @param {String} name The database name + * @param {Object} schema The database schema, Dexie-style + * @returns {Promise} + */ +MegaUtils.prototype.onDexieDB = promisify(function(resolve, reject, name, schema) { + 'use strict'; + + var db = new Dexie(name); + db.version(1).stores(schema); + db.open().then(resolve.bind(null, db)).catch(function(ex) { + onIdle(db.close.bind(db)); + + if (ex && ex.name === 'InvalidStateError') { + // Firefox in PBM? + return resolve(null); + } + + reject(ex); + }); +}); + +/** + * Wrapper around M.onDexieDB() for the persistent storage functions. + * @param {String} [action] Pre-defined action to perform. + * @param {String} [key] action key. + * @param {String} [value] action key value. + * @returns {Promise} + */ +MegaUtils.prototype.onPersistentDB = promisify(function(resolve, reject, action, key, value) { + 'use strict'; + + this.onDexieDB('$ps', {kv: '&k'}).then((db) => { + const ack = (value) => { + if (!value && action === 'get') { + return reject(ENOENT); + } + resolve(value); + }; + + if (!action) { + // No pre-defined action given, the caller is responsible of db.close()'ing + resolve(db); + } + else if (db) { + var c = db.kv; + var r = action === 'get' ? c.get(key) : action === 'set' ? c.put({k: key, v: value}) : c.delete(key); + + r.then((result) => { + onIdle(db.close.bind(db)); + ack(action === 'get' && result && result.v || null); + }).catch(reject); + } + else { + this.onPersistentDB.fallback.call(null, action, key, value).then(ack).catch(reject); + } + }, reject); +}); + +/** + * indexedDB persistence fallback. + * @param {String} action The fallback action being performed + * @param {String} key The storage key identifier + * @param {*} [value] The storage key value + * @returns {Promise} + */ +MegaUtils.prototype.onPersistentDB.fallback = async function(action, key, value) { + 'use strict'; + const pfx = '$ps!'; + const parse = tryCatch(JSON.parse.bind(JSON)); + const storage = localStorage; + key = pfx + (key || ''); + + var getValue = function(key) { + var value = storage[key]; + if (value) { + value = parse(value) || value; + } + return value; + }; + + if (action === 'set') { + value = tryCatch(JSON.stringify.bind(JSON))(value) || value; + if (d && String(value).length > 4096) { + console.warn('Storing more than 4KB...', key, [value]); + } + storage[key] = value; + } + else if (action === 'get') { + value = getValue(key); + } + else if (action === 'rem') { + value = storage[key]; + delete storage[key]; + } + else if (action === 'enum') { + const entries = Object.keys(storage) + .filter((k) => k.startsWith(key)) + .map((k) => k.substr(pfx.length)); + let result = entries; + + if (value) { + // Read contents + result = Object.create(null); + + for (var i = entries.length; i--;) { + result[entries[i]] = getValue(pfx + entries[i]); + } + } + + value = result; + } + + return value; +}; + +// Get FileSystem storage ignoring polyfills. +lazy(MegaUtils.prototype, 'requestFileSystem', function() { + 'use strict'; + + if (!is_chrome_firefox) { + var requestFileSystem = window.webkitRequestFileSystem || window.requestFileSystem; + + if (typeof requestFileSystem === 'function') { + return requestFileSystem.bind(window); + } + } +}); + +/** + * Get access to persistent FileSystem storage + * @param {Boolean} [writeMode] Whether we want write access + * @param {String|Number} [token] A token to store reusable fs instances + * @returns {Promise} + */ +MegaUtils.prototype.getFileSystemAccess = promisify(function(resolve, reject, writeMode, token) { + 'use strict'; + + var self = this; + + if (Object(this.fscache[token]).ts + 7e6 > Date.now()) { + resolve(this.fscache[token].fs); + } + else if (navigator.webkitPersistentStorage && M.requestFileSystem) { + var success = function(fs) { + if (token) { + self.fscache[token] = {ts: Date.now(), fs: fs}; + } + resolve(fs); + }; + let type = 1; + var request = function(quota) { + M.requestFileSystem(type, quota, success, reject); + }; + + delete this.fscache[token]; + navigator.webkitPersistentStorage.queryUsageAndQuota(function(used, remaining) { + if (remaining) { + request(remaining); + } + else if (writeMode) { + navigator.webkitPersistentStorage.requestQuota(1e10, request, reject); + } + else { + type = 0; + navigator.webkitTemporaryStorage.requestQuota(1e10, request, (err) => { + console.error(err); + reject(EBLOCKED); + }); + } + }, reject); + } + else { + reject(ENOENT); + } +}); + +/** + * Get access to an entry in persistent FileSystem storage + * @param {String} filename The filename under data will be stored + * @param {Boolean} [create] Whether the file(s) should be created + * @returns {Promise} + */ +MegaUtils.prototype.getFileSystemEntry = promisify(function(resolve, reject, filename, create) { + 'use strict'; + + create = create || false; + + this.getFileSystemAccess(create, seqno) + .then(function(fs) { + if (String(filename).indexOf('/') < 0) { + filename += '.mega'; + } + fs.root.getFile(filename, {create: create}, resolve, reject); + }, reject); +}); + +/** + * Retrieve metadata for a filesystem entry + * @param {FileEntry|String} entry A FileEntry instance or filename + * @returns {Promise} + */ +MegaUtils.prototype.getFileEntryMetadata = promisify(function(resolve, reject, entry) { + 'use strict'; + + var getMetadata = function(entry) { + entry.getMetadata(resolve, reject); + }; + + if (String(entry) === '[object FileEntry]') { + getMetadata(entry); + } + else { + this.getFileSystemEntry(entry).then(getMetadata).catch(reject); + } +}); + +/** + * Retrieve all *root* entries in the FileSystem storage. + * @param {String} [aPrefix] Returns entries matching with this prefix + * @param {Boolean} [aMetaData] Whether metadata should be retrieved as well, default to true + * @returns {Promise} + */ +MegaUtils.prototype.getFileSystemEntries = promisify(function(resolve, reject, aPrefix, aMetaData) { + 'use strict'; + + this.getFileSystemAccess(false, seqno) + .then(function(fs) { + var entries = []; + var reader = fs.root.createReader(); + + var success = function() { + var mega = Object.create(null); + + for (var i = entries.length; i--;) { + var name = String(entries[i].name); + + if (entries[i].isFile && name.substr(-5) === '.mega') { + mega[name.substr(0, name.length - 5)] = entries[i]; + } + } + resolve(mega); + }; + + var getMetadata = function(idx) { + var next = function() { + onIdle(getMetadata.bind(this, ++idx)); + }; + + if (idx === entries.length) { + success(); + } + else if (entries[idx].isFile) { + entries[idx].getMetadata(function(metadata) { + entries[idx].date = metadata.modificationTime; + entries[idx].size = metadata.size; + next(); + }, next); + } + else { + next(); + } + }; + + (function _readEntries() { + reader.readEntries(function(result) { + if (result.length) { + if (aPrefix) { + for (var i = result.length; i--;) { + if (String(result[i].name).startsWith(aPrefix)) { + entries.push(result[i]); + } + } + } + else { + entries = entries.concat(result); + } + _readEntries(); + } + else if (aMetaData !== false) { + getMetadata(0); + } + else { + success(); + } + }, reject); + })(); + }).catch(reject); +}); + +/** + * Retrieve data saved into persistent storage + * @param {String} k The key identifying the data + * @returns {Promise} + */ +MegaUtils.prototype.getPersistentData = async function(k) { + 'use strict'; + return this.onPersistentDB('get', k); +}; + +/** + * Save data into persistent storage + * @param {String} k The key identifying the data to store + * @param {*} v The value/data to store + * @returns {Promise} + */ +MegaUtils.prototype.setPersistentData = async function(k, v) { + 'use strict'; + return this.onPersistentDB('set', k, v); +}; + +/** + * Remove previously stored persistent data + * @param {String} k The key identifying the data + * @returns {Promise} + */ +MegaUtils.prototype.delPersistentData = function(k) { + 'use strict'; + + return Promise.allSettled([ + this.onPersistentDB('rem', k), + this.onPersistentDB.fallback('rem', k) + ]); +}; + +/** + * Enumerates all persistent data entries + * @param {String} [aPrefix] Returns entries matching with this prefix + * @param {Boolean} [aReadContents] Whether the contents must be read as well + * @returns {MegaPromise} + */ +MegaUtils.prototype.getPersistentDataEntries = promisify(async function(resolve, reject, aPrefix, aReadContents) { + 'use strict'; + + let result = null; + const append = (data) => { + if (Array.isArray(data)) { + result = result || []; + assert(Array.isArray(result)); + result = result.concat(data); + } + else { + assert(typeof result === 'object' && !Array.isArray(result)); + result = Object.assign(Object.create(null), result, data); + } + }; + const finish = (data) => { + if (data) { + append(data); + } + if (result) { + return resolve(result); + } + reject(ENOENT); + }; + const fail = (ex) => { + if (d > 1) { + console.warn(ex); + } + finish(); + }; + const fallback = () => { + this.onPersistentDB().then((db) => { + if (db) { + var dbc = db.kv; + + if (aPrefix) { + dbc = dbc.where('k').startsWith(aPrefix); + } + else { + dbc = dbc.toCollection(); + } + + dbc[aReadContents ? 'toArray' : 'keys']() + .then(function(entries) { + onIdle(db.close.bind(db)); + + if (!aReadContents) { + return finish(entries); + } + + var result = Object.create(null); + for (var i = entries.length; i--;) { + result[entries[i].k] = entries[i].v; + } + finish(result); + }) + .catch(fail); + } + else { + this.onPersistentDB.fallback('enum', aPrefix, aReadContents, true).then(finish).catch(fail); + } + }, fail); + }; + + // why the closure? check out git blame, some logic was removed here and no need to refactor everything, yet. + fallback(); +}); + +/** + * Returns the name of a country given a country code in the users current language. + * Will return Null if the requested countrycode does not exist. + * @param {String} countryCode The countrycode of the country to get the name of + * @returns {Null|String}. + */ +MegaUtils.prototype.getCountryName = function(countryCode) { + 'use strict'; + + if (!this._countries) { + this.getCountries(); + } + + // Get the stringid for the country code specified. + if (this._countries.hasOwnProperty(countryCode)) { + return this._countries[countryCode]; + } else { + if (d) { + console.error('Error - getCountryName: unrecognizable country code: ' + countryCode); + } + return null; + } +}; + +/** + * Returns an object with all countryCodes:countryNames in the user set language. + * @returns Object + */ +MegaUtils.prototype.getCountries = function() { + 'use strict'; + + if (!this._countries) { + this._countries = (new RegionsCollection()).countries; + } + return this._countries; +}; + +/** + * Returns an object with all the stateCodes:stateNames. + * @returns Object + */ +MegaUtils.prototype.getStates = function() { + 'use strict'; + + if (!this._states) { + this._states = (new RegionsCollection()).states; + } + return this._states; +}; + +/** + * Return a country call code for a given country + * @param {String} isoCountryCode A two letter ISO country code e.g. NZ, AU + * @returns {String} Returns the country international call code e.g. 64, 61 + */ +MegaUtils.prototype.getCountryCallCode = function(isoCountryCode) { + 'use strict'; + + if (!this._countryCallCodes) { + this._countryCallCodes = (new RegionsCollection()).countryCallCodes; + } + return this._countryCallCodes[isoCountryCode]; +}; + +/** + * Gets the trunk (national dialling) code from the given number and country code. + * If the country doesn't have trunk codes or wasn't included in the number, returns an empty string. + * + * @param {string} countryCallCode Country intl. calling code + * @param {string} phoneNumber Phone number in question + * @returns {string} Trunk code or empty string if not found + */ +MegaUtils.prototype.getNumberTrunkCode = function(countryCallCode, phoneNumber) { + 'use strict'; + + if (!this._countryTrunkCodes) { + this._countryTrunkCodes = new RegionsCollection().countryTrunkCodes; + } + + let trunkCodes; + if (this._countryTrunkCodes.hasOwnProperty(countryCallCode)) { + trunkCodes = this._countryTrunkCodes[countryCallCode]; + if (typeof trunkCodes === 'function') { + trunkCodes = trunkCodes(phoneNumber); + } + } + + for (let trunkCode in trunkCodes) { + trunkCode = trunkCodes[trunkCode]; + if (trunkCode && phoneNumber.startsWith(trunkCode)) { + return trunkCode; + } + } + + return ''; // No trunk code is common +}; + +/** + * Formats the given phone number to make it suitable to prepend a country call code. + * Strips hyphens and whitespace, removes the trunk code. + * e.g. NZ 021-1234567 => 2112345567 + * + * @param {string} countryCallCode Country int. calling code + * @param {string} phoneNumber Phone number to format + * @returns {string} Formatted phone number + */ +MegaUtils.prototype.stripPhoneNumber = function(countryCallCode, phoneNumber) { + 'use strict'; + + // Strip hyphens, whitespace + phoneNumber = phoneNumber.replace(/-|\s/g, ''); + + // Remove the trunk code (prefix for dialling nationally) from the given phone number. + const trunkCode = M.getNumberTrunkCode(countryCallCode, phoneNumber); + if (trunkCode && phoneNumber.startsWith(trunkCode)) { + phoneNumber = phoneNumber.substr(trunkCode.length); + } + + return phoneNumber; +}; + +/** + * Check user trying to upload folder by drag and drop. + * @param {Event} event + * @returns {Boolean} + */ +MegaUtils.prototype.checkFolderDrop = function(event) { + + 'use strict'; + + /** + * Check user trying to upload folder. + */ + if (d) { + console.log('Checking user uploading folder.'); + } + + var checkWebkitItems = function _checkWebkitItems() { + var items = event.dataTransfer.items; + for (var i = 0; i < items.length; i++) { + if (items[i].webkitGetAsEntry) { + var item = items[i].webkitGetAsEntry(); + if (item && item.isDirectory) { + return true; + } + } + } + }; + + var checkMozItems = function _checkMozItems() { + try { + var m = event.dataTransfer.mozItemCount; + for (var j = 0; j < m; ++j) { + file = event.dataTransfer.mozGetDataAt("application/x-moz-file", j); + if (file instanceof Ci.nsIFile) { + filedrag_u = []; + if (j === m - 1) { + $.dostart = true; + } + var mozitem = new mozDirtyGetAsEntry(file); /*,e.dataTransfer*/ + if (mozitem.isDirectory) { + return true; + } + } + else { + if (d) { + console.log('FileSelectHandler: Not a nsIFile', file); + } + } + } + } + catch (e) { + alert(e); + Cu.reportError(e); + } + }; + + if (event.dataTransfer + && event.dataTransfer.items + && event.dataTransfer.items.length > 0 && event.dataTransfer.items[0].webkitGetAsEntry) { + return checkWebkitItems(); + } + else if (is_chrome_firefox && event.dataTransfer) { + return checkMozItems(); + } + // else { + // ie does not support DataTransfer.items property. + // Therefore cannot recognise what user upload is folder or not. + // } + + return false; +}; + +/** + * Check the date entered, as day, month and year, is valid + * @param {Number} day Day value of the date to validate + * @param {Number} month Month value of the date to validate + * @param {Number} year Year value of the date to validate + * @returns {Number} 0 on success, else the number represent why date is not valid. + */ +MegaUtils.prototype.validateDate = function(day, month, year) { + + 'use strict'; + + // Check value is null or empty or 0 + if (!day || !month || !year) { + return 1; + } + + // Check value over common range limits + if (day > 31 || month > 12) { + return 2; + } + + const tDate = new Date(); + + tDate.setFullYear(year, month - 1, day); + + // If entered day is not exact as processed date, day value is not exist on entered month of the year, + // i.e. not exist on Calandar + if (tDate.getDate() !== day || tDate.getMonth() + 1 !== month || tDate.getFullYear() !== year) { + return 3; + } + + // it is valid + return 0; +}; + +/** + * Validate raw phone number + * + * @param {string} phoneNumber Phone number + * @param {string} countryCode Country calling code + * @returns {string|Boolean} returns the cleaned phone number otherwise false + */ +MegaUtils.prototype.validatePhoneNumber = function(phoneNumber, countryCode) { + 'use strict'; + + if (typeof phoneNumber !== 'string') { + return false; + } + + let length = 4; + + if (typeof countryCode === 'string') { + countryCode = countryCode.trim(); + phoneNumber = `${countryCode}${phoneNumber}`; + length = countryCode.length + 4; + } + + phoneNumber = phoneNumber.trim().replace(/[^\w+]/g, ''); + + var simplePhoneNumberPattern = new RegExp(`^\\+?\\d{${length},}$`); + + if (!simplePhoneNumberPattern.test(phoneNumber)) { + return false; + } + + return phoneNumber; +}; + +MegaUtils.prototype.noSleep = async function(stop, title) { + 'use strict'; + // Based on https://github.com/richtr/NoSleep.js + + const store = this.noSleep; + + if (store.canUseWakeLock === undefined) { + store.canUseWakeLock = 'wakeLock' in window.navigator; + store.tick = 0; + } + + if (store.canUseWakeLock) { + const {wakeLock} = store; + + if (stop) { + + if (wakeLock && (--store.tick < 1 || stop > 1)) { + store.tick = 0; + store.wakeLock = null; + return (await wakeLock).release(); + } + } + else { + store.tick++; + + if (wakeLock) { + return wakeLock; + } + store.wakeLock = new Promise((resolve, reject) => { + + navigator.wakeLock.request('screen') + .then((res) => { + if (store.tick > 0) { + store.wakeLock = res; + } + return res; + }) + .catch((ex) => { + if (d) { + console.error(ex); + } + delete store.wakeLock; + store.canUseWakeLock = false; + + if (store.tick > 0) { + return this.noSleep(false, title); + } + }) + .then(resolve) + .catch(reject); + }); + } + + return store.wakeLock; + } + + const vNode = store.node = store.node || document.createElement("video"); + assert(vNode, 'Cannot apply no-sleep measures...'); + + if (!store.srcNode) { + vNode.setAttribute('playsinline', ''); + vNode.setAttribute('title', title || 'MEGA'); + vNode.addEventListener("timeupdate", () => { + if (vNode.currentTime > 0.5) { + vNode.currentTime = Math.random(); + } + }); + + const sNode = store.srcNode = document.createElement("source"); + sNode.src = `${staticpath}images/mega/no-sleep.mp4`; + sNode.type = "video/mp4"; + vNode.appendChild(sNode); + } + + if (stop) { + + if (--store.tick < 1 || stop > 1) { + store.awake = false; + vNode.pause(); + } + } + else { + store.awake = true; + return vNode.play(); + } +}; + +/** + * @typedef {Object} MEGA_USER_STRUCT + * Access using namespace mega.u + * Access using global variable M.u + * An object holding informations about specific contacts/user identified + * by "handle" as base64 URL encoded 88-bit value. + * Caches informations for current/past full contacts. + * Pending contacts informations are not stored here. + * @property {String} u + * Mega user handle as base64 URL encoded 88-bit value. + * @property {Number} c + * Contact access right/status: 2: owner, 1: active contact, 0: inactive/deleted. + * @property {String} m + * Email address of the contact. + * @property {Array} m2 + * Array of all emails/phone numbers of a user. + * @property {String} name + * Combines users First and Last name defined in user profile. + * If First and Last name in user profile are undefined holds users email. + * It's used at least like index field for search contacts in share dialog. + * It combines `firstname` and `lastname` of user attributes. + * @property {String} nickname + * A custom nickname for a contact, it won't be set for the current user. + * This information comes from a private encrypted attribute !*>alias which + * stores all contact nicknames for the user. + * @property {String} h + * Holds user handle, value equal to 'u' param. Used only when synching with + * M.d, deeply rooted in code. should not be removed. + * Reason behind it should be searched in file/folders caching structure, + * 'h' represents file/folder "handle" as base64 URL encoded 64-bit value. + * @property {Number} t + * For active contacts but not for the owner 't' is set to 1. For non active + * contacts and owner it's 'undefined'. Used when synching with M.d, deeply + * rooted in code. should not be removed. + * Reason behind it should be searched in file/folders caching structure, + * 't' represents type of item: 2: Cloud Drive root, 1: folder, 0: file + * @property {String} p + * Logic inherited from file manager where parent directory 'p' is + * represented by base64 URL encoded 64-bit value. + * Root directory for Cloud Drive is cached in M.RootID. + * This parameter represents top level/root/parent for 'Contacts' tab. + * All contacts are bind to account owner but instead of owners "handle" + * as base64 URL encoded 88-bit value we are using 'contacts'. + * @property {Number} ts + * UNIX epoch time stamp as an integer in seconds to record last change of + * parameters values. + * @property {Number} rTimeStamp + * UNIX epoch time stamp as an integer in seconds to record last change of + * time stamp. + * @property {Number} lastChatActivity + * UNIX epoch time stamp as an integer in seconds for the last chat + * activity. + */ + +mBroadcaster.once('boot_done', function() { + 'use strict'; + + var struct = { + "u": undefined, + "b": undefined, + "c": undefined, + "m": undefined, + "m2": undefined, + "name": undefined, + "h": undefined, + "t": undefined, + "p": undefined, + "presence": 'unavailable', + "presenceMtime": undefined, + "shortName": "", + "firstName": "", + "lastName": "", + "nickname": "", + "ts": undefined, + "ats": undefined, + "rTimeStamp": undefined, + "avatar": undefined, + "lastGreen": undefined + }; + + Object.defineProperty(window, 'MEGA_USER_STRUCT', {value: Object.freeze(Object.setPrototypeOf(struct, null))}); +}); + + +function MegaData() { + "use strict"; + + this.reset(); + + this.csortd = -1; + this.csort = 'name'; + this.storageQuotaCache = null; + this.tfsdomqueue = Object.create(null); + this.scAckQueue = Object.create(null); + this.sortTreePanel = Object.create(null); + this.lastColumn = null; + this.account = false; + + Object.defineProperty(this, 'fsViewSel', { + value: '.files-grid-view.fm .grid-scrolling-table, .fm-blocks-view.fm .file-block-scrolling', + configurable: false + }); + + (function(self) { + var maf = false; + var saved = 0; + + Object.defineProperty(self, 'maf', { + get: function() { + if (Object(self.account).maf && saved !== self.account.maf) { + saved = self.account.maf; + maf = mega.achievem.prettify(self.account.maf); + } + return maf; + } + }); + })(this); + + // XXX: do NOT change the order, add new entries at the tail, and ask before removing anything.. + const sortRules = { + 'name': this.sortByName.bind(this), + 'size': this.sortBySize.bind(this), + 'type': this.sortByType.bind(this), + 'date': this.sortByDateTime.bind(this), + 'ts': this.sortByDateTime.bind(this), + 'rTimeStamp': this.sortByRts.bind(this), + 'owner': this.sortByOwner.bind(this), + 'modified': this.sortByModTime.bind(this), + 'mtime': this.sortByModTime.bind(this), + 'interaction': this.sortByInteraction.bind(this), + 'access': this.sortByAccess.bind(this), + 'status': this.sortByStatus.bind(this), + 'fav': this.sortByFav.bind(this), + 'email': this.sortByEmail.bind(this), + 'label': this.sortByLabel.bind(this), + 'sharedwith': this.sortBySharedWith.bind(this), + 'versions': this.sortByVersion.bind(this) + }; + Object.setPrototypeOf(sortRules, null); + Object.defineProperty(this, 'sortRules', {value: Object.freeze(sortRules)}); + + /** EventListener interface. */ + this.handleEvent = function(ev) { + if (d > 1) { + console.debug(ev.type, ev); + } + + var ttl; + if (ev.type === 'ps-y-reach-end' && !$.isTfsPsUpdate) { + ttl = M.getTransferTableLengths(); + if (ttl.left > -100) { + this.doFlushTransfersDynList(ttl.size); + } + } + else if (ev.type === 'tfs-dynlist-flush') { + ttl = M.getTransferTableLengths(); + if (ttl.left > -10) { + this.doFlushTransfersDynList(ttl.size); + } + } + }; + + if (is_mobile) { + /* eslint-disable no-useless-concat */ + var dummy = function() { + return MegaPromise.resolve(); + }; + this['init' + 'UIKeyEvents'] = dummy; + this['abort' + 'Transfers'] = dummy; + this['search' + 'Path'] = dummy; + + this['initFile' + 'ManagerUI'] = function() { + if (typeof window.InitFileDrag === 'function') { + window.InitFileDrag(); + delete window.InitFileDrag; + } + }; + mobile.uploadOverlay.shim(this); + + this['addWeb' + 'Download'] = function(nodes) { + // @see filesystem.js/abortAndStartOver + if (d) { + console.assert(Array.isArray(nodes) && nodes.length === 1 && arguments.length === 1, 'bogus usage'); + } + M.resetUploadDownload(); + later(function() { + mobile.downloadOverlay.startDownload(nodes[0]); + }); + }; + + // this['check' + 'StorageQuota'] = dummy; + this['show' + 'OverStorageQuota'] = function(data) { + if (data && (data === EPAYWALL || (data.isFull && Object(u_attr).uspw))) { + data = Object.create(null); + data.isFull = data.isAlmostFull = data.EPAYWALL = true; + } + if (data.isAlmostFull) { + var ab = mobile.alertBanner; + var isPro = Object(u_attr).p; + + var action = function() { + if (data.EPAYWALL) { + if (!M.account) { + M.accountData(function() { + action(); + }); + return; + } + var overlayTexts = odqPaywallDialogTexts(u_attr || {}, M.account); + ab.showError(overlayTexts.fmBannerText); + mobile.overStorageQuotaOverlay.show(overlayTexts.dialogText, overlayTexts.dlgFooterText); + ab.onTap(function() { + loadSubPage('pro'); + }); + } + else { + var mStoragePossible = bytesToSize(pro.maxPlan[2] * 1024 * 1024 * 1024, 0) + + ' (' + pro.maxPlan[2] + ' ' + l[17696] + ')'; + + var msg = isPro ? l[22667].replace('%1', mStoragePossible) : + l[22671].replace('%1', mStoragePossible); + + if (data.isFull) { + + ab.showError(msg); // Your account is full + + mobile.overStorageQuotaOverlay.show(msg); + } + else { + ab.showWarning(isPro ? l[22668].replace('%1', mStoragePossible) : + l[22672].replace('%1', bytesToSize(pro.maxPlan[2] * 1024 * 1024 * 1024, 0)) + .replace('%2', bytesToSize(pro.maxPlan[3] * 1024 * 1024 * 1024, 0)) + ); // Your account is almost full. + } + // When the banner is taped, show pro page. + ab.onTap(function() { + loadSubPage('pro'); + }); + } + }; + + if (!pro.membershipPlans || !pro.membershipPlans.length) { + pro.loadMembershipPlans(action); + } + else { + action(); + } + } + }; + + this['render' + 'Main'] = function(aUpdate) { + if (aUpdate) { + mobile.cloud.renderUpdate(); + } + else { + mobile.cloud.renderLayout(); + } + return true; + }; + + this['updFile' + 'ManagerUI'] = mobile.updFileManagerUI; + + var tf = [ + "renderTree", "buildtree", "initTreePanelSorting", + "treePanelType", "addTreeUI", "addTreeUIDelayed", "onTreeUIExpand", "onTreeUIOpen", + "treeSortUI", "treeFilterUI" + ]; + + for (var i = tf.length; i--;) { + this[tf[i]] = dummy; + } + } + else if (page.substr(0, 8) === 'megadrop') { + this['ul' + 'progress'] = function(ul, perc, bl, bt, bps) { + if (!bl || !ul.starttime || uldl_hold) { + return false; + } + if (d) { + console.assert(mega.megadrop.isInit(), 'Check this...'); + } + var id = ul.id; + var retime = bps > 1000 ? (bt - bl) / bps : -1; + + $.transferprogress['ul_' + id] = [bl, bt, bps]; + delay('percent_megatitle', percent_megatitle, 50); + mega.megadrop.uiUpdateItem(id, bps, retime, perc, bl); + }; + } + + /** @name M.IS_TREE */ + /** @name M.IS_FAV */ + /** @name M.IS_LINKED */ + /** @name M.IS_SHARED */ + /** @name M.IS_TAKENDOWN */ + makeEnum(['TREE', 'FAV', 'LINKED', 'SHARED', 'TAKENDOWN'], 'IS_', this); +} + +MegaData.prototype = new MegaUtils(); +MegaData.prototype.constructor = MegaData; + +// Initialize affiliate dataset on-demand +lazy(MegaData.prototype, 'affiliate', () => { + 'use strict'; + return new AffiliateData(); +}); + +MegaData.prototype.accountData = function(cb, blockui, force) { + "use strict"; + + var account = Object(this.account); + var reuseData = (account.lastupdate > Date.now() - 10000) && !force; + + if (reuseData && (!account.stats || !account.stats[M.RootID])) { + if (d) { + console.error('Track down how we get here...', M.RootID, account.stats && Object.keys(account.stats)); + } + reuseData = false; + } + + if (reuseData && cb) { + cb(account); + } + else { + var uqres = false; + var pstatus = Object(window.u_attr).p; + var mRootID = M.RootID; + + if (!window.fminitialized) { + console.warn('You should not use this function outside the fm...'); + } + console.assert(mRootID, 'I told you...'); + + if (blockui) { + loadingDialog.show(); + } + + let fetchBusinessStorage = 0; + + // Fetch extra storage/transfer base data Pro Flexi or Business master + if (typeof u_attr !== 'undefined') { + fetchBusinessStorage = (u_attr.pf || (u_attr.b && u_attr.b.m)) ? 1 : 0; + } + + api_req({ + a: 'uq', strg: 1, xfer: 1, pro: 1, v: 1, + b: fetchBusinessStorage + }, { + account: account, + callback: function(res, ctx) { + + loadingDialog.hide(); + + if (typeof res === 'object') { + for (var i in res) { + ctx.account[i] = res[i]; + } + ctx.account.type = res.utype; + // ctx.account.stime = res.scycle; + // ctx.account.scycle = res.snext; + ctx.account.expiry = res.suntil; + ctx.account.space = Math.round(res.mstrg); + ctx.account.space_used = Math.round(res.cstrg); + ctx.account.bw = Math.round(res.mxfer); + ctx.account.servbw_used = Math.round(res.csxfer); + ctx.account.downbw_used = Math.round(res.caxfer); + ctx.account.servbw_limit = Math.round(res.srvratio); + ctx.account.isFull = res.cstrg / res.mstrg >= 1; + ctx.account.isAlmostFull = res.cstrg / res.mstrg >= res.uslw / 10000; + + // Business base/extra quotas: + if (res.utype === pro.ACCOUNT_LEVEL_BUSINESS || res.utype === pro.ACCOUNT_LEVEL_PRO_FLEXI) { + ctx.account.space_bus_base = res.b ? res.b.bstrg : undefined; // unit TB + ctx.account.space_bus_ext = res.b ? res.b.estrg : undefined; // unit TB + ctx.account.tfsq_bus_base = res.b ? res.b.bxfer : undefined; // unit TB + ctx.account.tfsq_bus_ext = res.b ? res.b.exfer : undefined; // unit TB + ctx.account.tfsq_bus_used = res.b ? res.b.xfer : undefined; // unit B + ctx.account.space_bus_used = res.b ? res.b.strg : undefined; // unit B + } + + if (res.nextplan) { + ctx.account.nextplan = res.nextplan; + } + + if (res.mxfer === undefined) { + delete ctx.account.mxfer; + } + + // If a subscription, get the timestamp it will be renewed + if (res.stype === 'S') { + ctx.account.srenew = res.srenew; + } + + if (!Object(res.balance).length) { + ctx.account.balance = [['0.00', 'EUR']]; + } + + uqres = res; + } + } + }); + + api_req({a: 'uavl'}, { + account: account, + callback: function(res, ctx) { + if (typeof res !== 'object') { + res = []; + } + ctx.account.vouchers = voucherData(res); + } + }); + + api_req({a: 'maf', v: mega.achievem.RWDLVL}, { + account: account, + callback: function(res, ctx) { + if (typeof res === 'object') { + ctx.account.maf = res; + } + } + }); + if (!is_chatlink) { + api_req({a: 'uga', u: u_handle, ua: '^!rubbishtime', v: 1}, { + account: account, + callback: function(res, ctx) { + if (typeof res === 'object') { + ctx.account.ssrs = base64urldecode(String(res.av || res)) | 0; + } + } + }); + } + api_req({a: 'utt'}, { + account: account, + callback: function(res, ctx) { + if (typeof res !== 'object') { + res = []; + } + ctx.account.transactions = res; + } + }); + + // getting contact link [QR] + // api_req : a=clc contact link create api method + // f=1 a flag to tell the api to create a new link if it doesnt exist. + // but if a previous link was deleted, then dont return any thing (empty) + api_req({ a: 'clc', f: 1 }, { + account: account, + callback: function (res, ctx) { + if (typeof res !== 'string') { + res = ''; + } + else { + res = 'C!' + res; + } + ctx.account.contactLink = res; + } + }); + + + // Get (f)ull payment history + // [[payment id, timestamp, price paid, currency, payment gateway id, payment plan id, num of months purchased]] + api_req({a: 'utp', f: 1}, { + account: account, + callback: function(res, ctx) { + if (typeof res !== 'object') { + res = []; + } + ctx.account.purchases = res; + } + }); + + /* x: 1, load the session ids + useful to expire the session from the session manager */ + api_req({a: 'usl', x: 1}, { + account: account, + callback: function(res, ctx) { + if (typeof res !== 'object') { + res = []; + } + ctx.account.sessions = res; + } + }); + + api_req({a: 'ug'}, { + cb: cb, + account: account, + callback: function(res, ctx) { + let tmUpdate = false; + + if (typeof res === 'object') { + if (res.p) { + u_attr.p = res.p; + if (u_attr.p) { + tmUpdate = true; + } + } + else { + delete u_attr.p; + if (pstatus) { + tmUpdate = true; + } + } + if (res.pf) { + u_attr.pf = res.pf; + tmUpdate = true; + } + if (res.b) { + u_attr.b = res.b; + tmUpdate = true; + } + if (res.uspw) { + u_attr.uspw = res.uspw; + } + else { + delete u_attr.uspw; + } + if (res.mkt) { + u_attr.mkt = res.mkt; + if (Array.isArray(u_attr.mkt.dc) && u_attr.mkt.dc.length) { + delay('ShowDiscountOffer', pro.propay.showDiscountOffer, 7000); + } + } + else { + delete u_attr.mkt; + } + if (res['^!discountoffers']) { + u_attr['^!discountoffers'] = base64urldecode(res['^!discountoffers']); + } + } + + if (!ctx.account.downbw_used) { + ctx.account.downbw_used = 0; + } + + if (pstatus !== u_attr.p) { + ctx.account.justUpgraded = Date.now(); + + M.checkStorageQuota(2); + + // If pro status change is recognised revoke storage quota cache + M.storageQuotaCache = null; + } + + if (tmUpdate) { + topmenuUI(); + } + + if (uqres) { + if (!u_attr.p) { + if (uqres.tal) { + ctx.account.bw = uqres.tal; + } + ctx.account.servbw_used = 0; + } + + if (uqres.tah) { + var bwu = 0; + + for (var w in uqres.tah) { + bwu += uqres.tah[w]; + } + + ctx.account.downbw_used += bwu; + } + } + + // Prepare storage footprint stats. + var cstrgn = ctx.account.cstrgn = Object(ctx.account.cstrgn); + var stats = ctx.account.stats = Object.create(null); + var groups = [M.RootID, M.InboxID, M.RubbishID]; + var root = array.to.object(groups); + var exp = Object(M.su.EXP); + + groups = groups.concat(['inshares', 'outshares', 'links']); + for (var i = groups.length; i--;) { + stats[groups[i]] = array.to.object(['items', 'bytes', 'files', 'folders', 'vbytes', 'vfiles'], 0); + // stats[groups[i]].nodes = []; + } + + // Add pending out-shares that has no user on cstrgn variable + const ps = Object.keys(M.ps || {}); + if (ps.length) { + cstrgn = { + ...cstrgn, + ...ps + .map(h => M.getNodeByHandle(h)) + .reduce((o, n) => { + o[n.h] = [n.tb || 0, n.tf || 0, n.td || 0, n.tvb || 0, n.tvf || 0]; + return o; + }, {}) + }; + } + + for (var handle in cstrgn) { + var data = cstrgn[handle]; + var target = 'outshares'; + + if (root[handle]) { + target = handle; + } + else if (M.c.shares[handle]) { + target = 'inshares'; + } + // stats[target].nodes.push(handle); + + if (exp[handle] && !M.getNodeShareUsers(handle, 'EXP').length) { + continue; + } + + stats[target].items++; + stats[target].bytes += data[0]; + stats[target].files += data[1]; + stats[target].folders += data[2]; + stats[target].vbytes += data[3]; + stats[target].vfiles += data[4]; + } + + // calculate root's folders size + if (M.c[M.RootID]) { + var t = Object.keys(M.c[M.RootID]); + var s = Object(stats[M.RootID]); + + s.fsize = s.bytes; + for (var i = t.length; i--;) { + var node = M.d[t[i]] || false; + + if (!node.t) { + s.fsize -= node.s; + } + } + } + + // calculate public links items/size + var links = stats.links; + Object.keys(exp) + .forEach(function(h) { + if (M.d[h]) { + if (M.d[h].t) { + links.folders++; + links.bytes += M.d[h].tb || 0; + } + else { + links.bytes += M.d[h].s || 0; + links.files++; + } + } + else { + if (d) { + console.error('Not found public node ' + h); + } + links.files++; + } + }); + + ctx.account.lastupdate = Date.now(); + + if (d) { + console.log('stats', JSON.stringify(stats)); + } + + if (!ctx.account.bw) { + ctx.account.bw = 1024 * 1024 * 1024 * 1024 * 1024 * 10; + } + if (!ctx.account.servbw_used) { + ctx.account.servbw_used = 0; + } + if (!ctx.account.downbw_used) { + ctx.account.downbw_used = 0; + } + + M.account = ctx.account; + + if (res.ut) { + localStorage.apiut = res.ut; + } + + // transfers quota + var tfsq = {max: account.bw, used: account.downbw_used}; + + if (u_attr.p) { + tfsq.used += account.servbw_used; + } + else if (M.maf) { + tfsq.used += account.servbw_used; + var max = (M.maf.transfer.base + M.maf.transfer.current); + if (max) { + // has achieved quota + tfsq.ach = true; + tfsq.max = max; + } + } + + tfsq.left = Math.max(tfsq.max - tfsq.used, 0); + tfsq.perc = Math.floor(tfsq.used * 100 / tfsq.max); + + M.account.tfsq = tfsq; + + if (mRootID !== M.RootID) { + // TODO: Check if this really could happen and fix it... + console.error('mRootID changed while loading...', mRootID, M.RootID); + } + + if (ctx.cb) { + ctx.cb(ctx.account); + } + } + }); + } +}; + +MegaData.prototype.refreshSessionList = function(callback) { + "use strict"; + + if (d) { + console.log('Refreshing session list'); + } + if (M.account) { + api_req({a: 'usl', x: 1}, { + account: M.account, + callback: function(res, ctx) { + if (typeof res !== 'object') { + res = []; + } + else { + res.sort(function(a, b) { + if (a[0] < b[0]) { + return 1; + } + else { + return -1; + } + }); + } + + ctx.account.sessions = res; + M.account = ctx.account; + if (typeof callback === 'function') { + callback(); + } + } + }); + } + else { + M.accountData(callback); + } +}; + +/** + * Show the Master/Recovery Key dialog + * @param {Number} [version] Dialog version, 1: post-register, otherwise default one. + */ +MegaData.prototype.showRecoveryKeyDialog = function(version) { + 'use strict'; + + var $dialog = $('.mega-dialog.recovery-key-dialog').removeClass('post-register'); + $('i.js-key', $dialog).removeClass('shiny'); + + // TODO: Implement this on mobile + if (!$dialog.length) { + if (d) { + console.debug('recovery-key-dialog not available...'); + } + return; + } + + M.safeShowDialog('recovery-key-dialog', function() { + + $('.skip-button, button.js-close', $dialog).removeClass('hidden').rebind('click', closeDialog); + $('.copy-recovery-key-button', $dialog).removeClass('hidden').rebind('click', function() { + // Export key showing a toast message + u_exportkey(l[6040]); + }); + $('footer', $dialog).removeClass('hidden'); + $('.content-block', $dialog).removeClass('dialog-bottom'); + $('header.graphic', $dialog).removeClass('hidden'); + + switch (version) { + case 1: + $('.skip-button', $dialog).removeClass('hidden'); + $('button.js-close', $dialog).addClass('hidden'); + $('.copy-recovery-key-button', $dialog).addClass('hidden'); + $('i.js-key', $dialog).addClass('shiny'); + $dialog.addClass('post-register').rebind('dialog-closed', function() { + eventlog(localStorage.recoverykey ? 99718 : 99719); + $dialog.unbind('dialog-closed'); + }); + break; + case 2: + $('.skip-button', $dialog).addClass('hidden'); + $('button.js-close', $dialog).removeClass('hidden'); + $('.copy-recovery-key-button', $dialog).addClass('hidden'); + $('footer', $dialog).addClass('hidden'); + $('.content-block', $dialog).addClass('dialog-bottom'); + $('i.js-key', $dialog).addClass('shiny'); + $('header.graphic', $dialog).addClass('hidden'); + $dialog.addClass('post-register'); + break; + } + + $('.save-recovery-key-button', $dialog).rebind('click', function() { + if ($dialog.hasClass('post-register')) { + M.safeShowDialog('recovery-key-info', function() { + // Show user recovery key info warning + $dialog.addClass('hidden').removeClass('post-register'); + $dialog = $('.mega-dialog.recovery-key-info'); + + // On button click close dialog + $('.close-dialog, button.js-close', $dialog).rebind('click', closeDialog); + + return $dialog; + }); + } + + // Save Recovery Key to disk. + u_savekey(); + + // Show toast message. + showToast('recoveryKey', l[8922]); + }); + + // Automatically select all string when key is clicked. + $('#backup_keyinput_2fa', $dialog).rebind('click.backupRecoveryKey', function() { + this.select(); + }); + + // Update localStorage.recoveryKey when user copied his/her key. + $('#backup_keyinput_2fa', $dialog).rebind('copy.backupRecoveryKey', function() { + + var selection = document.getSelection(); + + // If user is fully selected key and copy it completely. + if (selection.toString() === this.value) { + + mBroadcaster.sendMessage('keyexported'); + + if (!localStorage.recoverykey) { + localStorage.recoverykey = 1; + $('body').addClass('rk-saved'); + } + } + + }); + + $('a.toResetLink', $dialog).rebind('click', function() { + loadingDialog.show(); + + M.req({a: 'erm', m: u_attr.email, t: 9}).always(function(res) { + closeDialog(); + loadingDialog.hide(); + + if (res === ENOENT) { + msgDialog('warningb', l[1513], l[1946]); + } + else if (res === 0) { + if (!is_mobile) { + fm_showoverlay(); + $('.mega-dialog.account-reset-confirmation').removeClass('hidden'); + } + else { + msgDialog('info', '', l[735]); + } + } + else { + msgDialog('warningb', l[135], l[200]); + } + }); + + return false; + }); + + $('.recovery-key.input-wrapper input', $dialog).val(a32_to_base64(u_k)); + + return $dialog; + }); +}; + +MegaData.prototype.hideClickHint = function() { + 'use strict'; + + if (mega.cttHintTimer) { + clearTimeout(mega.cttHintTimer); + delete mega.cttHintTimer; + } + + // implicitly invoking this function will cause that the hint won't be seen anymore. + onIdle(function() { + mega.config.set('ctt', 1); + }); + + $('.show-hints').removeAttr('style'); + $('.dropdown.click-hint').addClass('hidden').removeAttr('style'); +}; + +MegaData.prototype.showClickHint = function(force) { + 'use strict'; + + // Temporarily disabled. This will be added back in future with new design changes. + return false; + + this.hideClickHint(); + + // if the click-tooltip was not seen already + if (force || !mega.config.get('ctt')) { + mega.cttHintTimer = setTimeout(function() { + $('.show-hints').fadeIn(300, function() { + $(this).removeClass('hidden'); + + var $hint = $('.dropdown.click-hint'); + var $thumb = $('.hint-thumb', $hint); + $hint.position({ + of: this, + my: 'left top-5px', + at: 'left+27px top' + }); + $hint.fadeIn(450, function() { + $(this).removeClass('hidden'); + $('.close-button', $hint).rebind('click', M.hideClickHint.bind(M)); + }); + + var imageSwapTimer = setInterval(function() { + if (!mega.cttHintTimer) { + return clearInterval(imageSwapTimer); + } + if ($thumb.hasClass('left-click')) { + $thumb.switchClass("left-click", "right-click", 1000, "easeInOutQuad"); + } + else { + $thumb.switchClass("right-click", "left-click", 1000, "easeInOutQuad"); + } + }, 5e3); + }).rebind('click', M.showClickHint.bind(M, true)); + }, force || 300); + } + + return false; +}; + +MegaData.prototype.showPaymentCardBanner = function(status) { + 'use strict'; + + if (is_mobile) { + mobile.alertBanner.close(); + } + else { + $('.fm-notification-block.payment-card-status').removeClass('visible'); + } + + if (!status) { + return; + } + if (status === 1) { + + mega.attr.get(u_handle, 'cardalmostexp', -2, true).always((res) => { + if (res !== '1') { + + if (is_mobile) { + const $banner = mobile.alertBanner.showWarning(l.payment_card_almost_exp); + $banner.$alertBanner.rebind('tap', loadSubPage.bind(null, 'fm/account/paymentcard')); + + $banner.$alertBannerCloseButton.rebind('tap', () => { + mobile.alertBanner.close(); + mega.attr.set('cardalmostexp', '1', -2, true); + return false; + }); + } + else { + const $banner = $('.fm-notification-block.payment-card-almost-expired').addClass('visible'); + + $('i.close-banner', $banner).rebind('click', () => { + $banner.removeClass('visible'); + mega.attr.set('cardalmostexp', '1', -2, true); + }); + + $('a', $banner) + // .rebind('click', loadSubPage.bind(null, 'fm/account/plan/account-card-info')); + .rebind('click', loadSubPage.bind(null, 'fm/account/plan/account-card-info')); + } + + } + }); + } + + else if (status === 2) { + + if (is_mobile) { + const $banner = mobile.alertBanner.showError(l.payment_card_exp); + $banner.$alertBanner.rebind('tap', loadSubPage.bind(null, 'fm/account/paymentcard')); + + mobile.messageOverlay.show( + l.payment_card_exp_title, + l.payment_card_exp_desc, + 'sprite-fm-illustration img-dialog-payment-card-exp', + [l[148], l[707]]) + .then(loadSubPage.bind(null, 'fm/account/paymentcard')); + } + + else { + const $banner = $('.fm-notification-block.payment-card-expired').addClass('visible'); + + $('i.close-banner', $banner).rebind('click', () => { + $banner.removeClass('visible'); + }); + + $('a', $banner) + .rebind('click', loadSubPage.bind(null, 'fm/account/plan/account-card-info')); + + const $dialog = $('.payment-reminder.payment-card-expired'); + + $('.close', $dialog).rebind('click', closeDialog); + + + $('.update-payment-card', $dialog) + .rebind('click', () => { + closeDialog(); + loadSubPage('fm/account/plan/account-card-info'); + }); + + M.safeShowDialog('expired-card-dialog', $dialog); + } + } +}; + + +/** + * Show storage overquota dialog + * @param {*} quota Storage quota data, as returned from M.getStorageQuota() + * @param {Object} [options] Additional options + */ +MegaData.prototype.showOverStorageQuota = function(quota, options) { + 'use strict'; + + var promise = new MegaPromise(); + if (quota === undefined && options === undefined) { + return promise.reject(); + } + + if (!pro.membershipPlans || !pro.membershipPlans.length) { + pro.loadMembershipPlans(function() { + M.showOverStorageQuota(quota, options); + }); + // no caller relay on the promise really, 1 call has .always + return promise.reject(); + } + + if (quota && quota.isFull && Object(u_attr).uspw) { + // full quota, and uspw exist --> overwrite the full quota warning. + quota = EPAYWALL; + } + + var $strgdlg = $('.mega-dialog.storage-dialog').removeClass('full almost-full'); + var $strgdlgBodyFull = $('.fm-dialog-body.storage-dialog.full', $strgdlg).removeClass('odq'); + var $strgdlgBodyAFull = $('.fm-dialog-body.storage-dialog.almost-full', $strgdlg); + + var prevState = $('.fm-main').is('.almost-full, .full'); + $('.fm-main').removeClass('fm-notification almost-full full'); + var $odqWarn = $('.odq-warning', $strgdlgBodyFull).addClass('hidden'); + var $fullExtras = $('.full-extras', $strgdlgBodyFull).removeClass('hidden'); + var $upgradeBtn = $('.choose-plan span', $strgdlg).text(l[8696]); + + + if (quota === EPAYWALL) { // ODQ paywall + + if (!M.account) { + M.accountData(function() { + M.showOverStorageQuota(quota, options); + }); + return promise.reject(); + } + $('.fm-main').addClass('fm-notification full'); + + $strgdlg.addClass('full'); + $('.body-header', $strgdlgBodyFull).text(l[23519]); + + var dlgTexts = odqPaywallDialogTexts(u_attr || {}, M.account); + $('.body-p.long', $strgdlgBodyFull).safeHTML(dlgTexts.dialogText); + + $strgdlgBodyFull.addClass('odq'); + $odqWarn.removeClass('hidden'); + $fullExtras.addClass('hidden'); + $upgradeBtn.text(l[5549]); + $('.storage-dialog.body-p', $odqWarn).safeHTML(dlgTexts.dlgFooterText); + + $('.fm-notification-block.full').safeHTML( + ` + ${dlgTexts.fmBannerText}`); + } + else { + if (quota === -1) { + quota = { percent: 100 }; + quota.isFull = quota.isAlmostFull = true; + options = { custom: 1 }; + } + + var maxStorage = bytesToSize(pro.maxPlan[2] * 1024 * 1024 * 1024, 0) + + ' (' + pro.maxPlan[2] + ' ' + l[17696] + ')'; + + $('.body-p.long', $strgdlgBodyFull).safeHTML(l[22674].replace('%1', maxStorage). + replace('%2', bytesToSize(pro.maxPlan[3] * 1024 * 1024 * 1024, 0))); + + if (Object(u_attr).p) { + // update texts with "for free accounts" sentences removed. + + $('.body-header', $strgdlgBodyFull).safeHTML(l[16360]); + + $('.no-achievements-bl .body-p', $strgdlgBodyAFull).safeHTML(l[16361]); + $('.achievements-bl .body-p', $strgdlgBodyAFull).safeHTML(l[16361] + ' ' + l[16314]); + } + else { + var minStorage = l[22669].replace('%1', pro.minPlan[5]).replace('%2', pro.minPlan[2] + ' ' + l[17696]) + .replace('%3', bytesToSize(pro.minPlan[3] * 1024 * 1024 * 1024, 0)); + + $('.no-achievements-bl .body-p', $strgdlgBodyAFull).safeHTML(minStorage); + $('.achievements-bl .body-p', $strgdlgBodyAFull).safeHTML(minStorage + ' ' + l[16314]); + } + + var myOptions = Object(options); + if (quota.isFull) { + $strgdlg.addClass('full'); + $('.fm-main').addClass('fm-notification full'); + $('header h2', $strgdlgBodyFull).text(myOptions.title || l[16302]); + $('.body-header', $strgdlgBodyFull).safeHTML(myOptions.body || l[16360]); + } + else if (quota.isAlmostFull || myOptions.custom) { + if (quota.isAlmostFull) { + $('.fm-main').addClass('fm-notification almost-full'); + if (mega.tpw.initialized && mega.tpw.isWidgetVisibile()) { + mega.tpw.showAlmostOverquota(); + } + } + $strgdlg.addClass('almost-full'); + $('header h2.almost-full', $strgdlg).text(myOptions.title || l[16312]); + if (myOptions.body) { + $('.body-header', $strgdlgBodyAFull).safeHTML(myOptions.body); + } + + // Storage chart and info + var strQuotaLimit = bytesToSize(quota.mstrg, 0).split(' '); + var strQuotaUsed = bytesToSize(quota.cstrg); + var $storageChart = $('.fm-account-blocks.storage', $strgdlg); + + var fullDeg = 360; + var deg = fullDeg * quota.percent / 100; + + // Used space chart + if (quota.percent < 50) { + $('.left-chart span', $storageChart).css('transform', 'rotate(180deg)'); + $('.right-chart span', $storageChart).css('transform', `rotate(${180 - deg}deg)`); + $('.right-chart', $storageChart).addClass('low-percent-clip'); + $('.left-chart', $storageChart).addClass('low-percent-clip'); + } + else { + $('.left-chart span', $storageChart).css('transform', 'rotate(180deg)'); + $('.right-chart span', $storageChart).css('transform', `rotate(${(deg - 180) * -1}deg)`); + $('.right-chart', $storageChart).removeClass('low-percent-clip'); + $('.left-chart', $storageChart).removeClass('low-percent-clip'); + } + + $('.chart.data .size-txt', $strgdlg).text(strQuotaUsed); + $('.chart.data .pecents-txt', $strgdlg).text(strQuotaLimit[0]); + $('.chart.data .gb-txt', $strgdlg).text(strQuotaLimit[1]); + $('.chart.body .perc-txt', $strgdlg).text(quota.percent + '%'); + + } + else { + if ($strgdlg.is(':visible')) { + window.closeDialog(); + } + $('.fm-main').removeClass('fm-notification almost-full full'); + return promise.reject(); + } + $('.fm-notification-block.full') + .safeHTML( + ` + ${l[22667].replace('%1', maxStorage)}`); + + $('.fm-notification-block.almost-full') + .safeHTML( + ` + ${l[22668].replace('%1', maxStorage)} + `); + + } + + if (u_type === 0) { + $('.get-bonuses', $strgdlg).addClass('disabled'); + } + + var closeDialog = function() { + $strgdlg.off('dialog-closed'); + window.closeDialog(); + promise.resolve(); + }; + + $strgdlg.rebind('dialog-closed', closeDialog); + + $('button', $strgdlg).rebind('click', function() { + var $this = $(this); + if ($this.hasClass('disabled')) { + return false; + } + closeDialog(); + + if ($this.hasClass('choose-plan')) { + loadSubPage('pro'); + } + else if ($this.hasClass('get-bonuses')) { + mega.achievem.achievementsListDialog(); + } + + return false; + }); + $('button.js-close, button.skip', $strgdlg).rebind('click', closeDialog); + + $('.fm-notification-block .fm-notification-close') + .rebind('click', function() { + $('.fm-main').removeClass('fm-notification almost-full full'); + $.tresizer(); + }); + + mega.achievem.enabled() + .done(function() { + $strgdlg.addClass('achievements'); + }); + + clickURLs(); + + if (quota && quota.isFull && page === 'fm/dashboard') { + $('a.dashboard-link', $strgdlg).rebind('click.dashboard', e => { + e.preventDefault(); + closeDialog(); + }); + } + + $('a.gotorub').attr('href', '/fm/' + M.RubbishID) + .rebind('click', function() { + closeDialog(); + loadSubPage('fm/' + M.RubbishID); + return false; + }); + + if (Object(u_attr).p) { + $upgradeBtn.text(l[16386]); + } + + // if another dialog wasn't opened previously + if (!prevState || Object(options).custom || quota === EPAYWALL) { + M.safeShowDialog('over-storage-quota', $strgdlg); + } + else { + promise.reject(); + } + + if (!prevState) { + // On the banner appearance or disappearance, lets resize height of fm. + $.tresizer(); + } + + return promise; +}; + +// --------------------------------------------------------------------------- + +function voucherData(arr) { + var vouchers = []; + var varr = arr[0]; + var tindex = {}; + for (var i in arr[1]) { + tindex[arr[1][i][0]] = arr[1][i]; + } + for (var i in varr) { + var redeemed = 0; + var cancelled = 0; + var revoked = 0; + var redeem_email = ''; + if ((varr[i].rdm) && (tindex[varr[i].rdm])) { + redeemed = tindex[varr[i].rdm][1]; + redeem_email = tindex[varr[i].rdm][2]; + } + if (varr[i].xl && tindex[varr[i].xl]) { + cancelled = tindex[varr[i].xl][1]; + } + if (varr[i].rvk && tindex[varr[i].rvk]) { + revoked = tindex[varr[i].rvk][1]; + } + vouchers.push({ + id: varr[i].id, + amount: varr[i].g, + currency: varr[i].c, + iss: varr[i].iss, + date: tindex[varr[i].iss][1], + code: varr[i].v, + redeemed: redeemed, + redeem_email: redeem_email, + cancelled: cancelled, + revoked: revoked + }); + } + return vouchers; +} + +mBroadcaster.once('fm:initialized', () => { + 'use strict'; + + if (u_attr && (u_attr.p || u_attr.b)) { + + if (M.account) { + M.showPaymentCardBanner(M.account.cce); + } + else { + M.req({ a: 'uq', pro: 1 }).then((res) => { + if (typeof res === 'object' && res.cce) { + M.showPaymentCardBanner(res.cce); + } + }); + } + } +}); + +MegaData.prototype.avatars = function(userPurgeList) { + if (u_type !== 3) { + return false; + } + if (!this.c.contacts) { + this.c.contacts = Object.create(null); + } + if (u_handle) { + this.c.contacts[u_handle] = 1; + } + + if (userPurgeList) { + // if provided, invalidate the pointed user avatars. + if (!Array.isArray(userPurgeList)) { + userPurgeList = [userPurgeList]; + } + userPurgeList.forEach(useravatar.invalidateAvatar); + } + + if (d) { + console.time('M.avatars'); + } + + var waitingPromises = []; + M.u.forEach(function(c, u) { + // don't load non-contact avatars...such call would be dangerous and should be done by the UI only when + // needed + if (!avatars[u] && (M.u[u].c === 1 || M.u[u].c === 2 || M.u[u].c === 0)) { + + waitingPromises.push(useravatar.loadAvatar(u)); + } + }); + + MegaPromise + .allDone( + waitingPromises + ).always(function() { + + if (d) { + console.timeEnd('M.avatars'); + } + }); + + delete this.c.contacts[u_handle]; +}; + +MegaData.prototype.contactstatus = function(h, wantTimeStamp) { + var folders = 0; + var files = 0; + var ts = 0; + if (this.d[h]) { + if (!wantTimeStamp || !this.d[h].ts) { + // FIXME: include root? + var a = this.getNodesSync(h); + + for (var i = a.length; i--;) { + var n = this.d[a[i]]; + if (n) { + if (ts < n.ts) { + ts = n.ts; + } + if (n.t) { + folders++; + } + else if (!n.fv) { + files++; + } + } + } + if (!this.d[h].ts) { + this.d[h].ts = ts; + } + } + else { + ts = this.d[h].ts; + } + } + + return {files: files, folders: folders, ts: ts}; +}; + +MegaData.prototype.onlineStatusClass = function(os) { + if (os === 4 || os === 'dnd') { + // UserPresence.PRESENCE.DND + return [l[5925], 'busy']; + } + else if (os === 2 || os === 'away') { + // UserPresence.PRESENCE.AWAY + return [l[5924], 'away']; + } + else if (os === 3 || os === 'chat' || os === 'available') { + // UserPresence.PRESENCE.ONLINE + return [l[5923], 'online']; + } + else if (os === 1 || os === 'offline') { + return [l[5926], 'offline']; + } + else { + return ['', 'black']; + } +}; + +MegaData.prototype.onlineStatusEvent = function(u, status) { + 'use strict'; + + if (u instanceof MegaDataObject) { + var $elm = $('.ustatus.' + u.u); + if ($elm.length) { + $elm.removeClass('offline online busy away'); + $elm.addClass(this.onlineStatusClass(status)[1]); + } + + $elm = $('.fm-chat-user-status.' + u.u); + if ($elm.length) { + u = this.onlineStatusClass(status)[0]; + + if (u) { + $elm.safeHTML(u); + } + else { + $elm.text(''); + } + } + } +}; + +/** + * getContactsEMails + * + * Loop through all available contacts, full and pending ones (outgoing and incomming) + * and creates a list of contacts email addresses. + * @returns {Array} contacts, array of contacts email. + */ +MegaData.prototype.getContactsEMails = function(excludeRequests) { + var contact; + var contacts = []; + var contactName; + + // Loop through full contacts + M.u.forEach(function(contact) { + // Active contacts with email set + if (contact.c === 1 && contact.m) { + contacts.push({ + id: contact.m, name: M.getNameByHandle(contact.u), handle: contact.u, + contactType: 'active' + }); + } + }); + + if (!excludeRequests) { + // Loop through outgoing pending contacts + for (var k in M.opc) { + contact = M.opc[k]; + contactName = M.getNameByHandle(M.opc[k].p); + + // Is contact deleted + if (!contact.dts) { + contacts.push({ id: contact.m, name: contactName, handle: M.opc[k].p, contactType: 'opc' }); + } + } + + // Loop through incomming pending contacts + for (var m in M.ipc) { + contact = M.ipc[m]; + contactName = M.getNameByHandle(M.ipc[m].p); + + // Is there a email available + if (contact.m) { + contacts.push({ id: contact.m, name: contactName, handle: M.ipc[m].p, contactType: 'ipc' }); + } + } + } + + // Sort contacts by name in ascending order + contacts.sort(function(contactA, contactB) { + return contactA.name.localeCompare(contactB.name); + }); + + return contacts; +}; + +MegaData.prototype.getActiveContacts = function() { + var res = []; + + if (typeof this.c.contacts === 'object') { + Object.keys(this.c.contacts) + .forEach(function(userHandle) { + if (Object(M.u[userHandle]).c === 1) { + res.push(userHandle); + } + }); + } + + return res; +}; + +MegaData.prototype.getContacts = function(n) { + var folders = []; + for (var i in this.c[n.h]) + if (this.d[i].t == 1 && this.d[i].name) { + folders.push(this.d[i]); + } + + return folders; +}; + +MegaData.prototype.syncUsersFullname = function(userId, chatHandle, promise) { + "use strict"; + var self = this; + var user = userId in this.u && this.u[userId] || false; + + if (!user || user.firstName || user.lastName) { + // already loaded. + return promise ? promise.resolve(user && user.name) : false; + } + + Promise.allSettled([ + mega.attr.get(userId, 'lastname', -1, false, undefined, undefined, chatHandle), + mega.attr.get(userId, 'firstname', -1, false, undefined, undefined, chatHandle) + // @todo .. + // eslint-disable-next-line complexity + ]).then(function(r) { + var user = self.u[userId]; + + if (!user) { + if (promise) { + promise.reject(); + } + return; + } + var lastName = {name: 'lastname', value: r[0].value}; + var firstName = {name: 'firstname', value: r[1].value}; + + [firstName, lastName].forEach(function(obj) { + + // -1, -9, -2, etc... + if (typeof obj.value === 'string') { + try { + obj.value = from8(base64urldecode(obj.value)); + } + catch (ex) { + obj.value = ex; + } + } + + if (typeof obj.value !== 'string' || !obj.value) { + obj.value = ''; + } + }); + + lastName = lastName.value; + firstName = firstName.value; + + const oldNameHash = user.name + user.firstName + user.lastName; + + user.name = ""; + user.lastName = lastName; + user.firstName = firstName; + + if (firstName && $.trim(firstName).length > 0 || lastName && $.trim(lastName).length > 0) { + + if (firstName && $.trim(firstName).length > 0) { + user.name = firstName; + } + if (lastName && $.trim(lastName).length > 0) { + user.name += (user.name.length > 0 ? " " : "") + lastName; + } + + // Get the nickname if available otherwise get the user name + var userName = nicknames.getNickname(userId); + + if (M.currentdirid === 'shares') {// Update right panel list and block view + $('.shared-grid-view .' + userId + ' .fm-chat-user').text(userName); + $('.inbound-share .' + userId).next().find('.shared-folder-info') + .text(l[17590].replace('%1', userName)); + } + else if (M.currentrootid === 'shares') { + $('.shared-details-info-block .' + userId).next() + .find('.fm-chat-user').text(userName + ' <' + user.m + '>'); + } + } + + if (nicknames.cache[userId]) { + user.nickname = nicknames.cache[userId]; + } + + // only clear old avatar if the old one was a text one and was different then the new names + if (user.avatar && user.avatar.type !== "image" && oldNameHash !== user.name + user.firstName + user.lastName) { + user.avatar = false; + useravatar.loaded(userId); + } + + if (userId === u_handle) { + u_attr.firstname = firstName; + u_attr.lastname = lastName; + u_attr.name = user.name; + + $('.user-name').text(u_attr.fullname); + $('.top-menu-logged .name', '.top-menu-popup').text(u_attr.fullname); + $('.membership-big-txt.name').text(u_attr.fullname); + if (M.currentdirid === 'account') { + accountUI.account.profiles.renderFirstName(); + accountUI.account.profiles.renderLastName(); + } + } + + // check if this first name + last belongs to business sub-user + // we added here to avoid re-calling get attribute + minimize the need of code refactoring + if (u_attr && u_attr.b && u_attr.b.m && M.suba && M.suba[userId]) { + M.require('businessAcc_js', 'businessAccUI_js').done( + function() { + var business = new BusinessAccount(); + var subUser = M.suba[userId]; + subUser.lastname = r[0].value; + subUser.firstname = r[1].value; + + business.parseSUBA(subUser, false, true); + } + ); + } + + if ($.dialog === 'share') { + // Re-render the content of access list in share dialog to update contacts' latest names + renderShareDialogAccessList(); + } + + if (promise) { + promise.resolve(user.name); + } + }); + + return promise || true; +}; + +MegaData.prototype.syncContactEmail = function(userHash, promise, forced) { + 'use strict'; + var user = userHash in this.u && this.u[userHash] || false; + + if (megaChatIsReady && megaChat.FORCE_EMAIL_LOADING) { + forced = true; + } + + if (!forced && (is_chatlink || !user || user.c !== 1 && user.c !== 2)) { + return promise ? promise.reject() : false; + } + + if (user.m) { + return promise ? promise.resolve(user.m) : user.m; + } + + var cache = false; + var resolve = promise ? function(email) { + promise[email ? 'resolve' : 'reject'](email); + } : nop; + var validate = function(data) { + if (typeof data === 'string' && data[0] === '[') { + data = JSON.parse(data); + } + if (!Array.isArray(data)) { + data = [data, Infinity]; + } + var email = data[0]; + var expiry = data[1]; + + console.assert(typeof email !== 'string' || email.indexOf('@') > 0); + if (typeof email !== 'string' || email.indexOf('@') < 0) { + console.assert(email === ENOENT); + email = ENOENT; + } + + if (cache === true) { + attribCache.setItem(userHash + "_uge+", JSON.stringify([email, Date.now() + 7e6])); + } + + if (email === ENOENT) { + if (Date.now() > expiry) { + console.assert(!cache); + throw EEXPIRED; + } + + email = undefined; + } + else if (M.u[userHash].m !== email) { + M.u[userHash].m = email; + } + + resolve(email); + }; + + attribCache.getItem(userHash + "_uge+") + .then(validate) + .catch(function() { + cache = true; + asyncApiReq({a: 'uge', u: userHash}).always(validate); + }); + + return promise || true; +}; + +(function() { + "use strict"; + + /** + * Set new user into map store and returns it + * @param {String} u_h user handle + * @param {MegaDataObject|Object} [obj] store + * @returns {MegaDataObject} stored user + */ + MegaData.prototype.setUser = function(u_h, obj) { + if (!(u_h in this.u)) { + if (!(obj instanceof MegaDataObject)) { + if (!obj) { + obj = {h: u_h, u: u_h, m: '', c: undefined}; + } + obj = new MegaDataObject(MEGA_USER_STRUCT, obj); + } + this.u.set(u_h, obj); + } + return this.u[u_h]; + }; + + /** + * addUser, updates global .u variable with new user data + * adds/updates user indexedDB with newest user data + * + * @param {object} u, user object data + * @param {boolean} ignoreDB, don't write to indexedDB + */ + MegaData.prototype.addUser = function(u, ignoreDB) { + if (u && u.u) { + var user = u.u in this.u && this.u[u.u]; + + if (user) { + for (var key in u) { + if (key !== 'name' && key in MEGA_USER_STRUCT) { + user[key] = u[key]; + } + else if (d) { + console.warn('addUser: property "%s" not updated.', key, u[key]); + } + } + } + else { + user = this.setUser(u.u, u); + } + + if (fmdb && !ignoreDB && !pfkey) { + // convert MegaDataObjects -> JS + fmdb.add('u', {u: u.u, d: clone(u instanceof MegaDataMap ? u.toJS() : u)}); + user.firstName = ''; + user.lastName = ''; + attribCache.removeItem(user.u + "_firstname"); + attribCache.removeItem(user.u + "_lastname"); + } + + this.syncUsersFullname(user.u); + if (megaChatIsReady && megaChat.plugins.presencedIntegration) { + megaChat.plugins.presencedIntegration.eventuallyAddPeer(user.u); + } + } + }; +})(); + +// Update M.opc and related localStorage +MegaData.prototype.addOPC = function(u, ignoreDB) { + this.opc[u.p] = u; + if (fmdb && !ignoreDB && !pfkey) { + fmdb.add('opc', {p: u.p, d: u}); + } +}; + +/** + * Delete opc record from localStorage using id + * + * @param {string} id + * + */ +MegaData.prototype.delOPC = function(id) { + if (fmdb && !pfkey) { + fmdb.del('opc', id); + } +}; + +// Update M.ipc and related localStorage +MegaData.prototype.addIPC = function(u, ignoreDB) { + this.ipc[u.p] = u; + if (fmdb && !ignoreDB && !pfkey) { + fmdb.add('ipc', {p: u.p, d: u}); + } +}; + +/** + * Delete ipc record from indexedDb using id + * + * @param {string} id + * + */ +MegaData.prototype.delIPC = function(id) { + if (fmdb && !pfkey) { + fmdb.del('ipc', id); + } +}; + +/** + * Update M.ps and indexedDb + * + * Structure of M.ps + * : + * [ + * : + * {h, p, r, ts}, + * ] + * @param {JSON} ps, pending share + * @param {boolean} ignoreDB + * + * + */ +MegaData.prototype.addPS = function(ps, ignoreDB) { + if (!this.ps[ps.h]) { + this.ps[ps.h] = Object.create(null); + } + this.ps[ps.h][ps.p] = ps; + + if (fmdb && !ignoreDB && !pfkey) { + fmdb.add('ps', {h_p: ps.h + '*' + ps.p, d: ps}); + } + + // maintain special outgoing shares index by user: + if (!this.su[ps.p]) { + this.su[ps.p] = Object.create(null); + } + this.su[ps.p][ps.h] = 2; +}; + +/** + * Maintain .ps and related indexedDb + * + * @param {string} pcrId, pending contact request id + * @param {string} nodeId, shared item id + * + * + */ +MegaData.prototype.delPS = function(pcrId, nodeId) { + + // Delete the pending share + if (this.ps[nodeId]) { + if (this.ps[nodeId][pcrId]) { + delete this.ps[nodeId][pcrId]; + } + + // If there's no pending shares for node left, clean M.ps + if (Object.keys(this.ps[nodeId]).length === 0) { + delete this.ps[nodeId]; + } + } + + // clear pending share history from M.su + if (M.su[pcrId] && M.su[pcrId][nodeId] === 2) { + delete M.su[pcrId][nodeId]; + } + + if (fmdb && !pfkey) { + fmdb.del('ps', nodeId + '*' + pcrId); + } +}; + +/** + * Invite contacts using email address, also known as ongoing pending contacts. + * This uses API 2.0 + * + * @param {String} owner, account owner email address. + * @param {String} target, target email address. + * @param {String} msg, optional custom text message. + * @param {String} contactLink, optional contact link. + * @returns {Integer} proceed, API response code, if negative something is wrong + * look at API response code table. + */ +MegaData.prototype.inviteContact = function (owner, target, msg, contactLink) { + "use strict"; + + var invitePromise = new MegaPromise(); + + // since we have the possibility of having cached attributes of the user we are inviting + // we will remove the cached attrs to allow API request. + // this was done due to cases when a user changes his name, then we invite him + // in other cases when the user is in contacts list, it will be updated with APs. + // 1- check if we have cache + if (attribCache) { + var userHandle = null; + // 2- check if we cache this user. then get his handle + for (var us in M.u) { + if (M.u[us] && M.u[us].m && M.u[us].m === target) { + userHandle = us; + break; + } + } + // 3- if we found the user, remove the cached attrs. + if (userHandle) { + var userKeys = [userHandle + '_lastname', userHandle + '_firstname']; + for (var k = 0; k < userKeys.length; k++) { + attribCache.removeItem(userKeys[k]); + } + M.u[userHandle].firstName = ''; + M.u[userHandle].lastName = ''; + + M.syncUsersFullname(userHandle); + } + } + + if (d) { + console.debug('inviteContact'); + } + var request = { 'a': 'upc', 'u': target, 'e': owner, 'aa': 'a', i: requesti }; + if (contactLink && contactLink.length) { + request.cl = contactLink; + } + if (msg && msg.length) { + request.msg = msg; + } + api_req(request, { + callback: function(resp) { + if (typeof resp === 'object' && resp.p) { + + // In case of invite-dialog we will use notifications + if ($.dialog !== 'invite-friend') { + M.inviteContactMessageHandler(resp.p); + invitePromise.resolve(resp.m); + } + } + if ((typeof resp !== 'object' && contactLink) || (typeof resp === 'number')) { + M.inviteContactMessageHandler(resp); + } + invitePromise.reject(false); + } + }); + return invitePromise; +}; + +/** + * Handle all error codes for contact invitations and shows message + * + * @param {int} errorCode + * @param {string} msg Can be undefined + * @param {email} email Can be undefined + * + */ +MegaData.prototype.inviteContactMessageHandler = function(errorCode) { + if (errorCode === -12) { + + // Invite already sent, and not expired + msgDialog('info', '', 'Invite already sent, waiting for response'); + } + else if (errorCode === -10) { + + // User already sent you an invitation + msgDialog('info', '', 'User already sent you an invitation, check incoming contacts dialog'); + } + else if (errorCode === -2) { + + // User already exist or owner + msgDialog('info', '', l[1783]); + } + // EOVERQUOTA err + else if (errorCode === -17) { + msgDialog('info', '', l.invalid_invitation_sent); + } +}; + +MegaData.prototype.cancelPendingContactRequest = function(target) { + if (d) console.debug('cancelPendingContactRequest'); + var proceed = this.checkCancelContactPrerequisites(target); + + if (proceed === 0) { + api_req({'a': 'upc', 'u': target, 'aa': 'd', i: requesti}, { + callback: function(resp) { + proceed = resp; + } + }); + } + + this.cancelContactMessageHandler(proceed); + + return proceed; +}; + +MegaData.prototype.cancelContactMessageHandler = function(errorCode) { + if (errorCode === -2) { + msgDialog('info', '', 'This pending contact is already deleted.'); + } +}; + +MegaData.prototype.checkCancelContactPrerequisites = function(email) { + + // Check pending invitations + var opc = M.opc; + var foundEmail = false; + for (var i in opc) { + if (M.opc[i].m === email) { + foundEmail = true; + if (M.opc[i].dts) { + return -2;// opc is already deleted + } + } + } + if (!foundEmail) { + return -2;// opc doesn't exist for given email + } + + return 0; +}; + +MegaData.prototype.reinvitePendingContactRequest = function(target) { + + if (d) console.debug('reinvitePendingContactRequest'); + api_req({'a': 'upc', 'u': target, 'aa': 'r', i: requesti}); +}; + +// Answer on 'aa':'a', {"a":"upc","p":"0uUure4TCJw","s":2,"uts":1416434431,"ou":"fRSlXWOeSfo","i":"UAouV6Kori"} +// Answer on 'aa':'i', "{"a":"upc","p":"t17TPe65rMM","s":1,"uts":1416438884,"ou":"nKv9P8pn64U","i":"qHzMjvvqTY"}" +// ToDo, update M.ipc so we can have info about ipc status for view received requests +MegaData.prototype.ipcRequestHandler = function(id, action) { + if (d) console.debug('ipcRequestHandler'); + return new MegaPromise((resolve, reject) => { + var proceed = this.checkIpcRequestPrerequisites(id); + + if (proceed === 0) { + api_req({'a': 'upca', 'p': id, 'aa': action, i: requesti}, { + callback: function(res) { + if (res === 0) { + resolve(res); + } + else { + M.ipcRequestMessageHandler(res); + reject(res); + } + } + }); + } + else { + this.ipcRequestMessageHandler(proceed); + reject(proceed); + } + }); +}; + +MegaData.prototype.ipcRequestMessageHandler = function(errorCode) { + if (errorCode === -2) { + msgDialog('info', 'Already processed', 'Already handled request, something went wrong.'); + } + + // Server busy, ask them to retry the request + else if (errorCode === -3 || errorCode === -4) { + msgDialog('warninga', 'Server busy', 'The server was busy, please try again later.'); + } + + // Repeated request + else if (errorCode === -12) { + msgDialog('info', 'Repeated request', 'The contact has already been accepted.'); + } +}; + +MegaData.prototype.checkIpcRequestPrerequisites = function(id) { + var ipc = this.ipc; + for (var i in ipc) { + if (this.ipc[i].p === id) { + return -0; + } + } + + return 0; +}; + +MegaData.prototype.acceptPendingContactRequest = function(id) { + return this.ipcRequestHandler(id, 'a'); +}; + +MegaData.prototype.denyPendingContactRequest = function(id) { + return this.ipcRequestHandler(id, 'd'); +}; + +MegaData.prototype.ignorePendingContactRequest = function(id) { + return this.ipcRequestHandler(id, 'i'); +}; + +// Searches M.opc for the pending contact +MegaData.prototype.findOutgoingPendingContactIdByEmail = function(email) { + for (var index in this.opc) { + var opc = this.opc[index]; + + if (opc.m === email) { + return opc.p; + } + } +}; + +MegaData.prototype.filterBy = function(f, omitVersions) { + this.filter = f; + this.v = []; + for (var i in this.d) { + if ((!omitVersions || !this.d[i].fv) && f(this.d[i])) { + this.v.push(this.d[i]); + } + } +}; + +/** + * The same as filterBy, but instead of pushing the stuff in M.v, will return a new array. + * + * @param f function, with 1 arguments (node) that returns true when a specific node should be returned in the list + * of filtered results + */ +MegaData.prototype.getFilterBy = function(f) { + var v = []; + for (var i in this.d) { + if (f(this.d[i])) { + v.push(this.d[i]); + } + } + return v; +}; + +/* legacy method + this.filterByParent = function(id) { + this.filterBy(function(node) { + return (node.p === id) || (node.p && (node.p.length === 11) && (id === 'shares')); + }); + };*/ + + +/** + * filter M.v by parent ID + * @param {String} id handle of the parent + * @returns {Object} duplicates if found + */ +MegaData.prototype.filterByParent = function(id) { + var i; + var node; + + if (id === 'shares') { + this.v = []; + var inshares = Object.keys(this.c.shares || {}); + + for (i = inshares.length; i--;) { + node = this.d[inshares[i]] || false; + // filter label applies here. + if (node.su && !this.d[node.p] && (!M.currentLabelFilter || M.filterByLabel(node))) { + this.v.push(node); + } + } + } + // We should have a parent's childs into M.c, no need to traverse the whole M.d + else if (id === 'public-links' || id === 'out-shares' || this.c[id]) { + var list; + + if (id === 'public-links') { + list = this.su.EXP || {}; + } + else if (id === 'out-shares') { + list = this.getOutShareTree(); + } + else { + list = this.c[id]; + } + + this.v = Object.keys(list) + .map(function(h) { + return M.d[h]; + }) + .filter(function(n) { + // Filter versioned file or undefined node. + if (!n || n.fv) { + return false; + } + + // Filter label applies here. + if (M.currentLabelFilter && !M.filterByLabel(n)){ + return false; + } + return true; + }); + } + else { + this.filterBy(function(node) { + return (node.p === id); + }); + } +}; + +MegaData.prototype.filterBySearch = function (str) { + if (hashLogic) { + str = decodeURIComponent(String(str || '').replace('search/', '')).toLowerCase(); + } + else { + str = String(str || '').replace('search/', '').toLowerCase(); + } + + if (str[0] === '~') { + var command = str.substr(1); + str = null; + + /*jshint -W089 */ + if (command === 'findupes') { + var nodesByHash = {}; + + for (var node in this.d) { + node = this.d[node]; + + if (node && node.hash && node.h && M.getNodeRoot(node.h) === this.RootID) { + if (!nodesByHash[node.hash]) { + nodesByHash[node.hash] = []; + } + nodesByHash[node.hash].push(node); + } + } + + var dupes = Object.keys(nodesByHash).filter(function(hash) { + return nodesByHash[hash].length > 1; + }); + + this.v = []; + for (var i in dupes) { + this.v = this.v.concat(nodesByHash[dupes[i]]); + } + + if (this.overrideModes) { + this.overrideModes = 0; + this.overrideViewMode = 1; + this.overrideSortMode = ['size', -1]; + } + + // Wait for this.openFolder to finish and set colors to matching hashes + this.onRenderFinished = function() { + var find = M.viewmode ? 'a' : 'tr'; + $(M.fsViewSel).find(find).each(function() { + var $this = $(this); + var node = M.d[$this.attr('id')]; + + if (node) { + var color = crc32(asmCrypto.SHA256.hex(node.hash)) >>> 8; + + if (M.viewmode) { + var r = (color >> 16) & 0xff; + var g = (color >> 8) & 0xff; + var b = color & 0xff; + + $this.find('.file-block-title') + .css({ + 'border-radius': '0 0 8px 8px', + 'background-color': 'rgba(' + r + ',' + g + ',' + b + ',0.3)' + }); + } + else { + color = ("00" + color.toString(16)).slice(-6); + + $this.find('.transfer-filetype-icon') + .css('background-color', '#' + color); + } + } + }); + loadingDialog.hide(); + }; + } + else { + console.error('Unknown search command', command); + str = '~' + command; + } + /*jshint +W089 */ + } + + if (str) { + this.filterBy(this.getFilterBySearchFn(str), true); + } +}; + +MegaData.prototype.getFilterBySearchFn = function(searchTerm) { + // Simple glob/wildcard support. + // spaces are replaced with *, and * moved to regexp's .* matching + var regex; + var str = String(searchTerm).toLowerCase().replace(/\s+/g, '*'); + + if (str.indexOf('*') !== -1) { + try { + regex = RegExp(str.replace(/(\W)/g, '\\$1').replace(/\\\*/g, '.*'), 'i'); + } + catch (ex) {} + } + + if (regex) { + return function(node) { + return node.name && regex.test(node.name) && node.p !== 'contacts'; + }; + } + + return function(node) { + return (node.name && node.name.toLowerCase().indexOf(str) !== -1 && node.p !== 'contacts'); + }; +}; + +/** + * Filter a node contains right .lbl value + * + * @param {Object} node target node + * + * @return {Boolean} node has the label or not + */ +MegaData.prototype.filterByLabel = function(node) { + "use strict"; + + if (!node.lbl || !M.currentLabelFilter[node.lbl]) { + return false; + } + return true; +}; + +/* + * buildSubMenu - context menu related + * Create sub-menu for context menu parent directory + * + * @param {string} id - parent folder handle + */ +MegaData.prototype.buildSubMenu = function(id) { + 'use strict'; /* jshint -W074 */ + + var csb; + var cs = ''; + var sm = ''; + var tree = Object(this.tree[id]); + var folders = obj_values(tree); + var rootID = escapeHTML(this.RootID); + var rootTree = this.tree[rootID] || false; + var rootTreeLen = $.len(rootTree); + var arrow = ''; + + csb = document.getElementById('sm_move'); + if (!csb || parseInt(csb.dataset.folders) !== rootTreeLen) { + if (rootTree) { + cs = ' contains-submenu sprite-fm-mono-after icon-arrow-right-after'; + sm = '' + + '' + arrow + ''; + } + + if (csb) { + csb.parentNode.removeChild(csb); + } + + $('.dropdown-item.move-item').after( + '' + + ' ' + + ' ' + + ' ' + + ' ' + escapeHTML(l[164]) + '' + + ' ' + sm + + '
              ' + + ' ' + + ' ' + + ' ' + escapeHTML(l[9108]) + '' + + ' ' + arrow + + '
              ' + + '
              ' + ); + + if ((csb = document.getElementById('sm_move'))) { + csb.dataset.folders = rootTreeLen; + M.initContextUI(); // rebind just recreated dropdown-item's + } + } + + csb = document.getElementById('csb_' + id); + if (csb && csb.querySelectorAll('.dropdown-item').length !== folders.length) { + var $csb = $(csb).empty(); + + folders.sort(M.getSortByNameFn2(1)); + for (var i = 0; i < folders.length; i++) { + var fid = escapeHTML(folders[i].h); + + cs = ''; + sm = ''; + if (this.tree[fid]) { + cs = ' contains-submenu sprite-fm-mono-after icon-arrow-right-after'; + sm = '' + + '' + arrow + ''; + } + + var classes = 'folder-item'; + var iconClass = 'icon-folder'; + if (folders[i].t & M.IS_SHARED) { + classes += ' shared-folder-item'; + iconClass = 'icon-folder-outgoing-share'; + } + else if (mega.megadrop.pufs[fid] && mega.megadrop.pufs[fid].s !== 1) { + classes += ' puf-folder'; + iconClass = 'icon-folder-upload'; + } + + var nodeName = missingkeys[fid] ? l[8686] : folders[i].name; + + $csb.append( + '' + + ' ' + + ' ' + escapeHTML(nodeName) + '' + + '' + sm + ); + } + } + + M.disableCircularTargets('#fi_'); +}; + +/** + * Build an array of context-menu items to show for the selected node + * @returns {MegaPromise} + */ +MegaData.prototype.menuItems = function menuItems() { + "use strict"; + + var rrnodes = []; + var promise = new MegaPromise(); + var nodes = ($.selected || []).concat(); + + for (var i = nodes.length; i--;) { + var n = M.d[nodes[i]]; + + if (n) { + + nodes.splice(i, 1); + + if (n.rr && M.getNodeRoot(n.h) === M.RubbishID) { + rrnodes.push(n.rr); + } + // else we can delete .rr and api_setattr + } + } + nodes = nodes.concat(rrnodes); + + var checkMegaSync = function _checkMegaSync(preparedItems) { + $('.dropdown-item.download-item') + .addClass('contains-submenu sprite-fm-mono-after icon-arrow-right-after'); + $('.dropdown-item.download-item').removeClass('msync-found'); + + if (window.useMegaSync === 2 || window.useMegaSync === 3) { + $('.dropdown-item.download-item') + .removeClass('contains-submenu sprite-fm-mono-after icon-arrow-right-after'); + $('.dropdown-item.download-item').addClass('msync-found'); + if (window.useMegaSync === 2 && $.selected.length === 1 && M.d[$.selected[0]].t === 1 + && M.getNodeRoot($.selected[0]) !== M.InboxID) { + var addItemAndResolvePromise = function _addItemAndResolvePromise(error, response) { + if (!error && response === 0) { + preparedItems['.syncmegasync-item'] = 1; + } + promise.resolve(preparedItems); + }; + megasync.syncPossible($.selected[0], addItemAndResolvePromise); + } + else { + promise.resolve(preparedItems); + } + } + else { + promise.resolve(preparedItems); + } + } + + if (nodes.length) { + dbfetch.geta(nodes) + .always(function () { + var preparedItems = M.menuItemsSync(); + checkMegaSync(preparedItems); + }); + } + else { + checkMegaSync(M.menuItemsSync()); + } + + return promise; +}; + +MegaData.prototype.getSelectedSourceRoot = function(isSearch) { + + 'use strict'; + + let sourceRoot = isSearch || M.currentdirid === 'recents' ? M.getNodeRoot($.selected[0]) : M.currentrootid; + + if (sourceRoot === 'public-links' || sourceRoot === 'out-shares') { + sourceRoot = M.RootID; + } + + return sourceRoot; +}; + +MegaData.prototype.checkSendToChat = function(isSearch, sourceRoot) { + + 'use strict'; + + // view send to chat if all selected items are files + if (!folderlink && window.megaChatIsReady && $.selected.length) { + + for (let i = $.selected.length; i--;) { + + let n = M.d[$.selected[i]]; + let nRoot = isSearch ? (n.u === u_handle && M.getNodeRoot($.selected[i])) : sourceRoot; + + if (!n || n.t && (nRoot !== M.RootID && nRoot !== M.InboxID && !M.isDynPage(nRoot)) + || nRoot === M.RubbishID) { + return false; + } + } + return true; + } + return false; +}; + +/** + * Build an array of context-menu items to show for the selected node + * @returns {Object} + */ +MegaData.prototype.menuItemsSync = function menuItemsSync() { + "use strict"; + + var n; + var items = Object.create(null); + var selNode = M.d[$.selected[0]] || false; + const isSearch = page.startsWith('fm/search'); + const sourceRoot = M.getSelectedSourceRoot(isSearch); + let restrictedFolders = false; + + if (selNode && selNode.su && !M.d[selNode.p]) { + items['.leaveshare-item'] = 1; + } + else if (M.getNodeRights($.selected[0]) > 1) { + items['.move-item'] = 1; + items['.remove-item'] = 1; + } + + if (selNode && $.selected.length === 1) { + if (selNode.t) { + if (M.currentdirid !== selNode.h) { + items['.open-item'] = 1; + } + + if ((sourceRoot === M.RootID || M.isDynPage(M.currentrootid)) && !folderlink) { + items['.sh4r1ng-item'] = 1; + + if (M.getNodeShareUsers(selNode, 'EXP').length || M.ps[selNode]) { + items['.removeshare-item'] = 1; + } + } + + if ((sourceRoot === M.RootID || M.isDynPage(M.currentrootid)) + && u_type === 3 + && !M.getShareNodesSync(selNode.h).length + && !folderlink) { + + // Check if the folder is taken down or not + var shareNode = M.getNodeShare(selNode.h); + if (shareNode === false + || shareNode === null + || shareNode.down === undefined + || shareNode.down !== 1) { + + // Create or Remove upload page context menu action + if (mega.megadrop.pufs[selNode.h] + && mega.megadrop.pufs[selNode.h].s !== 1 + && mega.megadrop.pufs[selNode.h].p) { + items['.removewidget-item'] = 1; + items['.managewidget-item'] = 1; + } + else { + items['.createwidget-item'] = 1; + } + } + } + + // If the selected folder contains any versioning show clear version + if (selNode.tvf && M.getNodeRights(selNode.h) > 1) { + items['.clearprevious-versions'] = 1; + } + } + else { + if ((selNode.tvf > 0) && !folderlink) { + items['.properties-versions'] = 1; + if (M.getNodeRights(selNode.h) > 1) { + items['.clearprevious-versions'] = 1; + } + } + + if (is_image2(selNode)) { + items['.preview-item'] = 1; + } + else { + var mediaType = is_video(selNode); + + if (mediaType) { + items['.play-item'] = 1; + + if (mediaType === 1 && sourceRoot !== M.RubbishID && sourceRoot !== "shares") { + items['.embedcode-item'] = 1; + } + } + else if (is_text(selNode)) { + items['.edit-file-item'] = 1; + } + } + } + + if (M.currentCustomView || M.currentdirid.startsWith('search/')) { + items['.open-cloud-item'] = 1; + } + + if (M.getNodeRights(selNode.h) > 1) { + items['.rename-item'] = 1; + items['.add-star-item'] = 1; + items['.colour-label-items'] = 1; + + if (M.isFavourite(selNode.h)) { + $('.add-star-item').safeHTML('@@', l[5872]); + } + else { + $('.add-star-item').safeHTML('@@', l[5871]); + } + + M.colourLabelcmUpdate(selNode.h); + + if (items['.edit-file-item']) { + $('.dropdown-item.edit-file-item span').text(l[865]); + } + } + else if (items['.edit-file-item']) { + $('.dropdown-item.edit-file-item span').text(l[16797]); + } + } + + // Allow to mark as Favourite/Labeled from multi-selection + if ($.selected.length > 1) { + items['.add-star-item'] = 1; + items['.colour-label-items'] = 1; + let allAreFavourite = true; + + for (let i = 0; i < $.selected.length; i++) { + + if (allAreFavourite && !M.isFavourite($.selected[i])) { + allAreFavourite = false; + } + + if (!restrictedFolders + && (sourceRoot === M.InboxID || M.getNodeRoot($.selected[i]) === M.InboxID)) { + + restrictedFolders = true; + } + } + + if (allAreFavourite) { + $('.add-star-item').safeHTML('@@', l[5872]); + } + else { + $('.add-star-item').safeHTML('@@', l[5871]); + } + + M.colourLabelcmUpdate($.selected); + } + + if (M.checkSendToChat(isSearch, sourceRoot)) { + items['.send-to-contact-item'] = 1; + } + + if (selNode) { + items['.download-item'] = 1; + items['.zipdownload-item'] = 1; + items['.copy-item'] = 1; + items['.properties-item'] = 1; + } + items['.refresh-item'] = 1; + + if (folderlink) { + delete items['.copy-item']; + delete items['.add-star-item']; + delete items['.embedcode-item']; + delete items['.colour-label-items']; + delete items['.properties-versions']; + delete items['.clearprevious-versions']; + items['.import-item'] = 1; + items['.getlink-item'] = 1; + } + + if (M.currentCustomView.type === 'gallery') { + + items['.open-cloud-item'] = 1; + + delete items['.move-item']; + delete items['.copy-item']; + delete items['.rename-item']; + delete items['.remove-item']; + if (M.currentdirid !== 'favourites') { + delete items['.add-star-item']; + } + delete items['.colour-label-items']; + delete items['.embedcode-item']; + delete items['.properties-versions']; + delete items['.clearprevious-versions']; + } + + if (selNode.t && !folderlink && M.currentrootid !== M.RubbishID && + M.currentrootid !== 'out-shares' && M.currentrootid !== 'shares' && + M.currentrootid !== 'public-links' && M.currentdirid !== 'recents' && + $.selected.length === 1 && + (M.currentCustomView.type !== 'gallery' || selNode.h !== M.currentCustomView.nodeID)) { + items['.open-gallery'] = 1; + } + + if ((sourceRoot === M.RootID || M.isDynPage(M.currentrootid)) && !folderlink) { + items['.move-item'] = 1; + items['.getlink-item'] = 1; + + var cl = new mega.Share(); + var hasExportLink = cl.hasExportLink($.selected); + + if (hasExportLink) { + items['.removelink-item'] = true; + } + + cl = new mega.Share.ExportLink(); + var isTakenDown = cl.isTakenDown($.selected); + + // If any of selected items is taken down remove actions from context menu + if (isTakenDown) { + delete items['.getlink-item']; + delete items['.embedcode-item']; + delete items['.removelink-item']; + delete items['.sh4r1ng-item']; + delete items['.add-star-item']; + delete items['.colour-label-items']; + delete items['.download-item']; + delete items['.play-item']; + delete items['.preview-item']; + delete items['.edit-file-item']; + delete items['.open-gallery']; + delete items['.open-item']; + items['.dispute-item'] = 1; + } + } + else if (sourceRoot === M.RubbishID && !folderlink) { + items['.move-item'] = 1; + + delete items['.move-item']; + delete items['.copy-item']; + delete items['.rename-item']; + delete items['.add-star-item']; + delete items['.colour-label-items']; + delete items['.properties-versions']; + delete items['.clearprevious-versions']; + + for (var j = $.selected.length; j--;) { + n = M.getNodeByHandle($.selected[j]); + + if (M.getNodeRoot(n.h) === M.RubbishID) { + items['.revert-item'] = 1; + } + else if (items['.revert-item']) { + delete items['.revert-item']; + break; + } + } + } + + // For multiple selections, should check all have the right permission. + if ($.selected.length > 1) { + + let removeItemFlag = true; + let clearVersioned = false; + let favouriteFlag = true; + let labelFlag = true; + + for (var g = 0; g < $.selected.length; g++) { + + // If any of node has read only rights or less, stop loop + if (folderlink || M.getNodeRights($.selected[g]) <= 1) { + + removeItemFlag = false; + clearVersioned = false; + favouriteFlag = false; + labelFlag = false; + + break; + } + + const selected = M.getNodeByHandle($.selected[g]); + + // Do not show clear version option if there is any folder selected + // Or multi-select files including a versioned file and in rubbish bin + if (selected.t || M.currentrootid === M.RubbishID) { + clearVersioned = false; + break; + } + else if (selected.tvf) { + clearVersioned = true; + } + } + + if (!removeItemFlag) { + delete items['.remove-item']; + delete items['.move-item']; + } + + if (!favouriteFlag) { + delete items['.add-star-item']; + } + + if (!labelFlag) { + delete items['.colour-label-items']; + } + + // if there is no folder selected, selected file nodes are versioned, user has right to clear it. + if (clearVersioned) { + items['.clearprevious-versions'] = 1; + } + } + + if (!folderlink && M.getNodeRoot(selNode.p) === M.RubbishID) { + delete items['.download-item']; + delete items['.zipdownload-item']; + } + + if (restrictedFolders || $.selected.length === 1 + && M.getNodeRoot($.selected[0]) === M.InboxID) { + + delete items['.open-cloud-item']; + delete items['.move-item']; + delete items['.rename-item']; + delete items['.add-star-item']; + delete items['.colour-label-items']; + delete items['.embedcode-item']; + delete items['.properties-versions']; + delete items['.clearprevious-versions']; + delete items['.remove-item']; + + let cl = new mega.Share.ExportLink(); + + if (folderlink || cl.isTakenDown($.selected)) { + return items; + } + + cl = new mega.Share(); + + if (cl.hasExportLink($.selected)) { + items['.removelink-item'] = 1; + } + + if (M.currentrootid === M.InboxID && $.selected.length === 1 + && ((selNode.devid || selNode.drvid) && selNode.td > 0 + || M.d[selNode.p].devid || M.d[selNode.p].drvid || selNode.h === M.BackupsId)) { + + items['.view-in-bc-item'] = 1; + } + + items['.getlink-item'] = 1; + + if ($.selected.length === 1 && selNode.t) { + items['.sh4r1ng-item'] = 1; + + if (M.getNodeShareUsers(selNode, 'EXP').length || M.ps[selNode]) { + items['.removeshare-item'] = 1; + } + } + } + + return items; +}; + +/** + * Show a context menu for the selected node. + * @param {Event} e The event being dispatched + * @param {Number} ll The type of context menu. + * @param {String} items Requested items classes, i.e '.properties-item, ...' + * @returns {void} + */ +// eslint-disable-next-line complexity, sonarjs/cognitive-complexity +MegaData.prototype.contextMenuUI = function contextMenuUI(e, ll, items) { + "use strict"; + + var flt; + var asyncShow = false; + var m = $('.dropdown.body.files-menu'); + var $contactDetails = m.find('.dropdown-contact-details'); + + // Selection of first child level ONLY of .dropdown-item in .dropdown.body + var menuCMI = '.dropdown.body.files-menu .dropdown-section > .dropdown-item'; + + // is contextmenu disabled + if (localStorage.contextmenu) { + console.warn('context menus are disabled.'); + return true; + } + + // function to recuring repositioning for sub menus. + var findNewPosition = function() { + M.adjustContextMenuPosition(e, m); + m.find('.contains-submenu.opened').removeClass('opened'); + m.find('.submenu.active').removeClass('active'); + }; + + var showContextMenu = function() { + // This part of code is also executed when ll == 'undefined' + var v = m.children('.dropdown-section'); + + // Count all items inside section, and hide dividers if necessary + v.each(function() { + var $this = $(this); + var a = $this.find('a.dropdown-item'); + var x = a.filter(function() { + return $(this).hasClass('hidden'); + }); + if (x.length === a.length || a.length === 0) { + $this.addClass('hidden'); + } + else { + $this.removeClass('hidden'); + } + }); + + M.adjustContextMenuPosition(e, m); + + M.disableCircularTargets('#fi_'); + + m.removeClass('hidden'); + + // Hide last divider + v.find('hr').removeClass('hidden'); + m.find('.dropdown-section:visible:last hr').addClass('hidden'); + + $(window).rebind('resize.ccmui', SoonFc(findNewPosition)); + + // disable scrolling + var $psContainer = $(e.currentTarget).closest('.ps'); + if ($psContainer.length) { + Ps.disable($psContainer[0]); + $.disabledContianer = $psContainer; + } + + mBroadcaster.sendMessage('showcontextmenu'); + }; + + $.hideContextMenu(e); + $contactDetails.addClass('hidden'); + + // Used when right click is occured outside item, on empty canvas + if (ll === 2) { + // to init megaSync, as the user may click of file/folder upload + // the below event handler will setup the communication with MEGASYNC + var fupload = document.getElementById('fileselect1'); + var mEvent = new MouseEvent('mouseover', { + view: window, + bubbles: true, + cancelable: true + }); + fupload.dispatchEvent(mEvent); + + $(menuCMI).filter('.dropdown-item').addClass('hidden'); + var itemsViewed = false; + var ignoreGrideExtras = false; + + if (M.currentdirid !== 'shares' && M.currentdirid !== 'out-shares') { + // Enable upload item menu for clould-drive, don't show it for rubbish and rest of crew + + const nodeRights = M.getNodeRights(M.currentCustomView.nodeID || M.currentdirid); + + if (nodeRights && M.currentrootid !== M.RubbishID && M.currentrootid !== M.InboxID + && M.getNodeRoot(M.currentdirid.split('/').pop()) !== M.InboxID) { + + if (M.currentrootid === 'contacts') { + $(menuCMI).filter('.addcontact-item').removeClass('hidden'); + ignoreGrideExtras = true; + } + else { + $(menuCMI).filter('.fileupload-item,.newfolder-item').removeClass('hidden'); + + if (nodeRights > 0) { + $(menuCMI).filter('.newfile-item').removeClass('hidden'); + } + + if (is_chrome_firefox & 2 || 'webkitdirectory' in document.createElement('input')) { + $(menuCMI).filter('.folderupload-item').removeClass('hidden'); + } + } + itemsViewed = true; + } + } + + if (M.currentrootid === M.RubbishID && M.v.length) { + $('.files-menu.context .dropdown-item.clearbin-item').removeClass('hidden'); + itemsViewed = true; + } + + if (!ignoreGrideExtras && M.viewmode) { + itemsViewed = true; + $('.files-menu.context .dropdown-item.sort-grid-item-main').removeClass('hidden'); + if (M.currentdirid === 'shares') { + $('.files-menu.context .dropdown-item.sort-grid-item').addClass('hidden'); + $('.files-menu.context .dropdown-item.sort-grid-item.s-inshare').removeClass('hidden'); + } + else if (M.currentdirid === 'out-shares') { + $('.files-menu.context .dropdown-item.sort-grid-item').addClass('hidden'); + $('.files-menu.context .dropdown-item.sort-grid-item.s-outshare').removeClass('hidden'); + } + else { + $('.files-menu.context .dropdown-item.sort-grid-item').addClass('hidden'); + $('.files-menu.context .dropdown-item.sort-grid-item.s-fm').removeClass('hidden'); + if (folderlink) { + $('.files-menu.context .dropdown-item.sort-grid-item.s-fm.sort-label').addClass('hidden'); + $('.files-menu.context .dropdown-item.sort-grid-item.s-fm.sort-fav').addClass('hidden'); + } + + if (M.currentrootid === M.RubbishID) { + $('.files-menu.context .dropdown-item.sort-grid-item.s-fm.sort-fav').addClass('hidden'); + } + } + } + if (!itemsViewed) { + return false; + } + } + else if (ll === 3) {// we want just the download menu + $(menuCMI).addClass('hidden'); + m = $('.dropdown.body.download'); + menuCMI = '.dropdown.body.download .dropdown-item'; + $(menuCMI).removeClass('hidden'); + } + else if (ll === 4 || ll === 5) {// contactUI + $(menuCMI).addClass('hidden'); + + asyncShow = true; + M.menuItems() + .done(function(items) { + + delete items['.download-item']; + delete items['.zipdownload-item']; + delete items['.copy-item']; + delete items['.open-item']; + + if (ll === 5) { + delete items['.properties-item']; + } + + for (var item in items) { + $(menuCMI).filter(item).removeClass('hidden'); + } + + // Hide Info item if properties dialog is opened + if ($.dialog === 'properties') { + delete items['.properties-item']; + } + + onIdle(showContextMenu); + }); + } + else if (ll === 7) { // Columns selection menu + if (M && M.columnsWidth && M.columnsWidth.cloud) { + // Please be aware that have to hide all hyperlink dropdown items that are options in context menu, + // not including any ones under submenu with the span tag. + // Then filter them with the classname of visible-col-select + // and display correct ones based on the visible columns list. + var $currMenuItems = $('.files-menu.context a.dropdown-item') + .addClass('hidden').filter('.visible-col-select'); + for (var col in M.columnsWidth.cloud) { + if (M.columnsWidth.cloud[col] && M.columnsWidth.cloud[col].disabled) { + continue; + } + else { + if (M.columnsWidth.cloud[col] && M.columnsWidth.cloud[col].viewed) { + $currMenuItems.filter('[megatype="' + col + '"]').attr('isviewed', 'y') + .removeClass('hidden').find('i').removeClass('icon-add').addClass('icon-check'); + } + else { + $currMenuItems.filter('[megatype="' + col + '"]').removeAttr('isviewed') + .removeClass('hidden').find('i').removeClass('icon-check').addClass('icon-add'); + } + } + } + } + } + else if (ll === 8 && items) { // Passes requested items + + $(menuCMI).addClass('hidden'); + + asyncShow = true; + + M.menuItems().done(() => { + + $(menuCMI).filter(items).removeClass('hidden'); + + onIdle(showContextMenu); + }); + } + else if (ll) {// Click on item + + // Hide all menu-items + $(menuCMI).addClass('hidden'); + + var id; + var currNodeClass; + var $currentTarget = $(e.currentTarget); + + // This event is context on selection bar + if ($currentTarget.hasClass('js-statusbarbtn')) { + id = $.selected[0]; + currNodeClass = $.gridLastSelected ? $.gridLastSelected.className : false; + } + // This event is context on node itself + else { + id = $currentTarget.attr('id'); + currNodeClass = $currentTarget.attr('class'); + } + + if (id) { + + // File manager left panel click + if (id.includes('treea_')) { + id = id.replace(/treea_+|(os_|pl_)/g, ''); + } + + // File manager breadcrumb path click + else if (id.startsWith('pathbc-')) { + id = id.replace('pathbc-', ''); + } + } + + /*if (id && !M.d[id]) { + + // exist in node list + id = undefined; + }*/ + + // In case that id belongs to contact, 11 char length + if (id && (id.length === 11)) { + var $contactDetails = m.find('.dropdown-contact-details'); + var username = M.getNameByHandle(id) || ''; + + flt = '.remove-contact, .share-folder-item, .set-nickname'; + + // Add .send-files-item to show Send files item + if (!window.megaChatIsDisabled) { + flt += ',.startchat-item, .send-files-item'; + if (megaChat && megaChat.hasSupportForCalls) { + flt += ',.startaudiovideo-item'; + } + } + var $menuCmi = $(menuCMI); + $menuCmi.filter(flt).removeClass('hidden'); + + // Enable All buttons + $menuCmi.filter('.startaudiovideo-item, .send-files-item') + .removeClass('disabled disabled-submenu'); + + // disable remove for business accounts + business users + if (u_attr && u_attr.b && M.u[id] && M.u[id].b) { + $menuCmi.filter('.remove-contact').addClass('disabled'); + } + + // Show Detail block + $contactDetails.removeClass('hidden'); + + if (M.viewmode) { + $contactDetails.find('.view-profile-item').removeClass('hidden'); + $contactDetails.find('.dropdown-avatar').addClass('hidden'); + $contactDetails.find('.dropdown-user-name').addClass('hidden'); + } + else { + $contactDetails.find('.view-profile-item').addClass('hidden'); + + // Set contact avatar + $contactDetails.find('.dropdown-avatar').removeClass('hidden') + .find('.avatar').safeHTML(useravatar.contact(id, 'context-avatar')); + + // Set username + $contactDetails.find('.dropdown-user-name').removeClass('hidden') + .find('.name span').text(username); + } + + // Set contact fingerprint + showAuthenticityCredentials(id, $contactDetails); + + // Open contact details page + $contactDetails.rebind('click.opencontact', function() { + loadSubPage('fm/chat/contacts/' + id); + }); + + var verificationState = u_authring.Ed25519[id] || {}; + var isVerified = (verificationState.method + >= authring.AUTHENTICATION_METHOD.FINGERPRINT_COMPARISON); + + // Show the user is verified + if (isVerified) { + $contactDetails.addClass('verified'); + $contactDetails.find('.dropdown-verify').removeClass('active'); + } + else { + $contactDetails.removeClass('verified'); + $contactDetails.find('.dropdown-verify').addClass('active') + .rebind('click.verify', function(e) { + e.stopPropagation(); + $.hideContextMenu(e); + fingerprintDialog(id); + }); + } + } + else if (currNodeClass && (currNodeClass.indexOf('cloud-drive') > -1 + || currNodeClass.indexOf('folder-link') > -1)) { + flt = '.properties-item'; + if (folderlink) { + flt += ',.import-item'; + } + else { + flt += ',.findupes-item'; + } + if (M.v.length && folderlink) { + flt += ',.zipdownload-item,.download-item'; + } + $.selected = [M.RootID]; + $(menuCMI).filter(flt).removeClass('hidden'); + } + else if (currNodeClass && $(e.currentTarget).hasClass('inbox')) { + $.selected = [M.InboxID]; + $(menuCMI).filter('.properties-item').removeClass('hidden'); + } + else if (currNodeClass && currNodeClass.indexOf('rubbish-bin') > -1) { + $.selected = [M.RubbishID]; + $(menuCMI).filter('.properties-item').removeClass('hidden'); + if (currNodeClass.indexOf('filled') > -1) { + $(menuCMI).filter('.clearbin-item').removeClass('hidden'); + } + } + else if (currNodeClass && currNodeClass.indexOf('contacts-item') > -1) { + $(menuCMI).filter('.addcontact-item').removeClass('hidden'); + } + else if (currNodeClass && currNodeClass.indexOf('messages-item') > -1) { + e.preventDefault(); + return false; + } + else if (currNodeClass + && (currNodeClass.includes('data-block-view') || currNodeClass.includes('folder')) + || String(id).length === 8) { + + asyncShow = true; + M.menuItems() + .done(function(items) { + var $menuCMI = $(menuCMI); + + for (var item in items) { + $menuCMI.filter(item).removeClass('hidden'); + } + + // Hide context menu items not needed for undecrypted nodes + if (missingkeys[id]) { + $menuCMI.filter('.add-star-item').addClass('hidden'); + $menuCMI.filter('.download-item').addClass('hidden'); + $menuCMI.filter('.rename-item').addClass('hidden'); + $menuCMI.filter('.copy-item').addClass('hidden'); + $menuCMI.filter('.move-item').addClass('hidden'); + $menuCMI.filter('.getlink-item').addClass('hidden'); + $menuCMI.filter('.embedcode-item').addClass('hidden'); + $menuCMI.filter('.colour-label-items').addClass('hidden'); + $menuCMI.filter('.send-to-contact-item').addClass('hidden'); + } + else if (M.getNodeShare(id).down === 1) { + $menuCMI.filter('.copy-item').addClass('hidden'); + $menuCMI.filter('.move-item').addClass('hidden'); + $menuCMI.filter('.send-to-contact-item').addClass('hidden'); + } + else { + if (items['.getlink-item']) { + onIdle(() => M.setContextMenuGetLinkText()); + } + if (items['.sh4r1ng-item']) { + onIdle(() => M.setContextMenuShareText()); + } + + if (items['.play-item']) { + var $playItem = $menuCMI.filter('.play-item'); + + if (is_audio(M.d[id])) { + $('i', $playItem).removeClass('icon-video-call-filled').addClass('icon-play-small'); + $('span', $playItem).text(l[17828]); + } + else { + $('i', $playItem).removeClass('icon-play-small').addClass('icon-video-call-filled'); + $('span', $playItem).text(l[16275]); + } + } + + if (items['.remove-item']) { + $('span', $menuCMI.filter('.remove-item')).text(M.getSelectedRemoveLabel($.selected)); + } + } + + // Hide Info item if properties dialog is opened + if ($.dialog === 'properties') { + $menuCMI.filter('.properties-item').addClass('hidden'); + } + + // Hide items for selection Bar Options button + if (!$currentTarget.attr('id')) { + $menuCMI.filter('.download-item, .sh4r1ng-item, .send-to-contact-item,' + + '.getlink-item, .remove-item').addClass('hidden'); + } + + onIdle(showContextMenu); + }); + } + else { + return false; + } + } + + if (!asyncShow) { + showContextMenu(); + } + + e.preventDefault(); +}; + +/** + * Sets the text in the context menu for the Get link and Remove link items. If there are + * more than one nodes selected then the text will be pluralised. If all the selected nodes + * have public links already then the text will change to 'Update link/s'. + */ +MegaData.prototype.setContextMenuGetLinkText = function() { + "use strict"; + + var numOfExistingPublicLinks = 0; + var numOfSelectedNodes = Object($.selected).length; + var getLinkText = ''; + + // Loop through all selected nodes + for (var i = 0; i < numOfSelectedNodes; i++) { + + // Get the node handle of the current node + var nodeHandle = $.selected[i]; + + // If it has a public link, then increment the count + if (M.getNodeShare(nodeHandle)) { + numOfExistingPublicLinks++; + } + } + + // If all the selected nodes have existing public links, set text to 'Manage links' or 'Manage link' + if (numOfSelectedNodes === numOfExistingPublicLinks) { + getLinkText = numOfSelectedNodes > 1 ? l[17520] : l[6909]; + } + else { + // Otherwise change text to 'Get links' or 'Get link' if there are selected nodes without links + getLinkText = (numOfSelectedNodes > 1) ? l[8734] : l[59]; + } + + // If there are multiple nodes with existing links selected, set text to 'Remove links', otherwise 'Remove link' + var removeLinkText = (numOfExistingPublicLinks > 1) ? l[8735] : l[6821]; + + // Set the text for the 'Get/Update link/s' and 'Remove link/s' context menu items + var $contextMenu = $('.dropdown.body'); + $contextMenu.find('.getlink-item span').text(getLinkText); + $contextMenu.find('.removelink-item span').text(removeLinkText); +}; + +/** + * Sets the text in the context menu for the sharing option. + * If the folder is shared or has pending shares then the text will be set to 'Manage share', + * else the text will be set to 'Share folder'. + */ +MegaData.prototype.setContextMenuShareText = function() { + 'use strict'; + + const selectedNode = M.d[$.selected[0]] || false; + let getLinkText = M.currentrootid === M.InboxID + || M.getNodeRoot($.selected[0]) === M.InboxID ? l.read_only_share : l[5631]; + + // If the node has shares or pending shares, set to 'Manage share', else, 'Share folder' + if (selectedNode && M.getNodeShareUsers(selectedNode, 'EXP').length || M.ps[selectedNode]) { + getLinkText = l.manage_share; + } + + $('.sh4r1ng-item span', '.dropdown.body').text(getLinkText); +}; + +/** + * @param {jQuery.Event} e jQuery event + * @param {Object} m Context menu jQuery object + */ +MegaData.prototype.adjustContextMenuPosition = function(e, m) { + "use strict"; + + // mouse cursor, returns the coordinates within the application's client area + // at which the event occurred (as opposed to the coordinates within the page) + var mX = e.clientX; + var mY = e.clientY; + + var mPos;// menu position + if (e.type === 'click' && !e.calculatePosition) {// Clicked on file-settings-icon + var ico = { 'x': e.delegateTarget.clientWidth, 'y': e.delegateTarget.clientHeight }; + var icoPos = getHtmlElemPos(e.delegateTarget);// Get position of clicked file-settings-icon + mPos = M.reCalcMenuPosition(m, icoPos.x, icoPos.y, ico); + } + else {// right click + mPos = M.reCalcMenuPosition(m, mX, mY); + } + + m.css({ 'top': mPos.y, 'left': mPos.x });// set menu position + + return true; +}; + +/** + * Calculates coordinates where context menu will be shown + * @param {Object} m jQuery object of context menu or child class + * @param {Number} x Coordinate x of cursor or clicked element + * @param {Number} y Coordinate y of cursor or clicked element + * @param {Object} ico JSON {x, y} width and height of element clicked on + * @returns {Object} Coordinates {x, y} where context menu will be drawn + */ +MegaData.prototype.reCalcMenuPosition = function(m, x, y, ico) { + "use strict"; + + var TOP_MARGIN = 12; + var SIDE_MARGIN = 12; + + let hiddenUpdate; + + // make it as visitble hidden for temporary to get context size to avoid 'display: none!important' return size 0 bug + // Somehow 'display: none' with '!important' causing jQuery offsetWidth and offsetHeight malfunction. + if (m.hasClass('hidden')) { + m.removeClass('hidden').addClass('v-hidden'); + hiddenUpdate = true; + } + + var cmW = m.outerWidth();// dimensions without margins calculated + var cmH = m.outerHeight();// dimensions without margins calculated + + if (hiddenUpdate) { + m.removeClass('v-hidden').addClass('hidden'); + } + + var wH = window.innerHeight; + var wW = window.innerWidth; + var maxX = wW - SIDE_MARGIN;// max horizontal coordinate, right side of window + var maxY = wH - TOP_MARGIN;// max vertical coordinate, bottom side of window + + // min horizontal coordinate, left side of right panel + var minX = SIDE_MARGIN + $('nav.nw-fm-left-icons-panel').outerWidth(); + var minY = TOP_MARGIN;// min vertical coordinate, top side of window + var wMax = x + cmW;// coordinate of context menu right edge + var hMax = y + cmH;// coordinate of context menu bottom edge + + var top = 'auto'; + var left = '100%'; + var right = 'auto'; + + var overlapParentMenu = function(n) { + var tre = wW - wMax;// to right edge + var tle = x - minX - SIDE_MARGIN;// to left edge + + if (tre >= tle) { + n.addClass('overlap-right'); + n.css({'top': top, 'left': (maxX - x - nmW) + 'px'}); + } + else { + n.addClass('overlap-left'); + n.css({'top': top, 'right': (wMax - nmW - minX) + 'px'}); + } + }; + + /** + * Calculates top position of submenu + * Submenu is relatively positioned to the first sibling element + * @param {Object} n jQuery object, submenu of hovered element + * @returns {String} top Top coordinate in pixels for submenu + */ + var horPos = function(n) { + var top; + var nTop = parseInt(n.css('padding-top')); + var tB = parseInt(n.css('border-top-width')); + var pPos = m.position(); + var b = y + nmH - (nTop - tB);// bottom of submenu + var mP = m.closest('.dropdown.body.submenu'); + var pT = 0; + var bT = 0; + var pE = { top: 0 }; + + if (mP.length) { + pE = mP.offset(); + pT = parseInt(mP.css('padding-top')); + bT = parseInt(mP.css('border-top-width')); + } + + var difference = 0; + + if (b > maxY) { + difference = b - maxY; + } + top = pPos.top - tB - difference + 'px'; + + return top; + }; + + var handleSmall = function(dPos) { + m.find('> .dropdown-section').wrapAll('
              '); + m.append(''); + m.addClass('mega-height'); + cmH = wH - TOP_MARGIN * 2; + m.css({ 'height': wH - TOP_MARGIN * 2 + 'px' }); + m.on('mousemove', M.scrollMegaSubMenu); + dPos.y = wH - cmH; + }; + + var removeMegaHeight = function() { + if (m.hasClass('mega-height')) { + // Cleanup for scrollable context menu upon resizing window. + var cnt = $('#cm_scroll').contents(); + $('#cm_scroll').replaceWith(cnt);// Remove .context-scrollable-block + m.removeClass('mega-height'); + m.find('> .context-top-arrow').remove(); + m.find('> .context-bottom-arrow').remove(); + m.css({ 'height': 'auto' });// In case that window is enlarged + } + }; + + var dPos;// new context menu position + var rtl = $('body').hasClass('rtl'); + + if (typeof ico === 'object') {// draw context menu relative to file-settings-icon + dPos = { 'x': x , 'y': y + ico.y + 4 };// position for right-bot + + // draw to the left + if (wMax > maxX) { + dPos.x = x - cmW + ico.x;// additional pixels to align with -icon + } + + if (cmH + 24 >= wH) {// Handle small windows height + handleSmall(dPos); + } + else { + removeMegaHeight(); + if (hMax > maxY - TOP_MARGIN) { + dPos.y = y - cmH - 4; + if (dPos.y < TOP_MARGIN) { + dPos.y = TOP_MARGIN; + } + } + } + } + else if (ico === 'submenu') {// submenues + var n = m.next('.dropdown.body.submenu'); + var nmW = n.outerWidth();// margin not calculated + var nmH = n.outerHeight();// margins not calculated + if (nmH >= (maxY - TOP_MARGIN)) {// Handle huge menu + nmH = maxY - TOP_MARGIN; + var tmp = document.getElementById('csb_' + String(m.attr('id')).replace('fi_', '')); + if (tmp) { + $(tmp).addClass('context-scrolling-block'); + tmp.addEventListener('mousemove', M.scrollMegaSubMenu.bind(this)); + + // add scrollable context menu. + n.addClass('mega-height'); + n.css({'height': nmH + 'px'}); + } + } + + top = horPos(n); + + if (rtl) { + if (m.parent().parent('.right-position').length === 0) { + if (minX <= (x - nmW)) { + left = '100%'; + right = 'auto'; + } + else if (maxX >= (wMax + nmW)) { + n.addClass('right-position'); + } + else { + overlapParentMenu(n); + + return true; + } + } + else { + if (maxX >= (wMax + nmW)) { + n.addClass('right-position'); + } + else if (minX <= (x - nmW)) { + left = '100%'; + right = 'auto'; + } + else { + overlapParentMenu(n); + + return true; + } + } + } + else { + if (m.parent().parent('.left-position').length === 0) { + if (maxX >= (wMax + nmW)) { + left = 'auto'; + right = '100%'; + } + else if (minX <= (x - nmW)) { + n.addClass('left-position'); + } + else { + overlapParentMenu(n); + + return true; + } + } + else { + if (minX <= (x - nmW)) { + n.addClass('left-position'); + } + else if (maxX >= (wMax + nmW)) { + left = 'auto'; + right = '100%'; + } + else { + overlapParentMenu(n); + + return true; + } + } + } + + return {'top': top, 'left': left, 'right': right}; + } + else {// right click + + if (rtl) { + dPos = { 'x': x - 10 - m.outerWidth(), 'y': y + 10 }; + } + else { + dPos = { 'x': x + 10, 'y': y + 10 }; + } + + if (cmH + 24 >= wH) {// Handle small windows height + handleSmall(dPos); + } + else { + removeMegaHeight(); + if (hMax > maxY) { + dPos.y = wH - cmH - TOP_MARGIN;// align with bottom + } + } + + if (x < minX) { + dPos.x = minX;// left side alignment + } + if (wMax > maxX) { + dPos.x = maxX - cmW;// align with right side + } + } + + return { 'x': dPos.x, 'y': dPos.y }; +}; + +// Scroll menus which height is bigger then window.height +MegaData.prototype.scrollMegaSubMenu = function(e) { + "use strict"; + + var c = $(e.target).closest('.dropdown.body.mega-height'); + var pNode = c.children(':first')[0]; + + if (typeof pNode === 'undefined') { + pNode = c[0]; + } + + if (typeof pNode !== 'undefined') { + var ey = e.pageY; + var h = pNode.offsetHeight; + var dy = h * 0.1;// 10% dead zone at the begining and at the bottom + var pos = getHtmlElemPos(pNode, true); + var py = (ey - pos.y - dy) / (h - dy * 2); + + if (py > 1) { + py = 1; + c.children('.context-bottom-arrow').addClass('disabled'); + } + else if (py < 0) { + py = 0; + c.children('.context-top-arrow').addClass('disabled'); + } + else { + c.children('.context-bottom-arrow,.context-top-arrow').removeClass('disabled'); + } + pNode.scrollTop = py * (pNode.scrollHeight - h); + } +}; + +MegaData.prototype.labelSortMenuUI = function(event, rightClick) { + "use strict"; + + var $menu = $('.colour-sorting-menu'); + var $menuItems = $('.colour-sorting-menu .dropdown-colour-item'); + var x = 0; + var y = 0; + var $sortMenuItems = $('.dropdown-item', $menu).removeClass('active'); + var $selectedItem; + var type = this.currentLabelType; + var sorting = M.sortmode || {n: 'name', d: 1}; + + var dirClass = sorting.d > 0 ? 'icon-up' : 'icon-down'; + + // Close label filtering sorting menu on second Name column click + if ($menu.is(':visible') && !rightClick) { + $menu.addClass('hidden'); + return false; + } + + $('.colour-sorting-menu .dropdown-colour-item').removeClass('active'); + if (M.filterLabel[type]) { + for (var key in M.filterLabel[type]) { + if (key) { + $menuItems.filter('[data-label-id=' + key + ']').addClass('active'); + } + } + } + + $selectedItem = $sortMenuItems + .filter('*[data-by=' + sorting.n + ']') + .addClass('active'); + + var tmpFn = function() { + x = event.clientX; + y = event.clientY; + + $menu.css('left', x + 'px'); + $menu.css('top', y + 'px'); + }; + + if (rightClick) {// FM right mouse click on node + M.adjustContextMenuPosition(event, $menu); + } + else { + tmpFn(); + } + + delay('render:search_breadcrumbs', () => M.renderSearchBreadcrumbs()); + $.hideTopMenu(); + $.hideContextMenu(); + $menu.removeClass('hidden'); + + $('.colour-sorting-menu').off('click', '.dropdown-item'); + $('.colour-sorting-menu').on('click', '.dropdown-item', function() { + // dont to any if it is static + if ($(this).hasClass('static')){ + return false; + } + + if (d){ + console.log('fm sorting start'); + } + + var data = $(this).data(); + var dir = 1; + + if ($(this).hasClass('active')) {// Change sort direction + dir = sorting.d * -1; + } + + $('.colour-sorting-menu').addClass('hidden'); + + var lbl = function(el) { + return el.lbl; + }; + if (data.by === 'label' && !M.v.some(lbl)) { + return false; + } + + M.doSort(data.by, dir); + M.renderMain(); + + return false; + }); + + return false; +}; + +MegaData.prototype.resetLabelSortMenuUI = function() { + "use strict"; + + $('.colour-sorting-menu .dropdown-item').removeClass('active asc desc'); + return false; +}; + +MegaData.prototype.getSelectedRemoveLabel = (handlesArr) => { + 'use strict'; + + let allAreRubbish = true; + let allAreNotRubbish = true; + + for (let i = 0; i < handlesArr.length; i++) { + if (M.getNodeRoot(handlesArr[i]) === M.RubbishID) { + allAreNotRubbish = false; + } + else { + allAreRubbish = false; + } + + if (!allAreRubbish && !allAreNotRubbish) { + break; + } + } + + if (allAreRubbish) { + return l.delete_permanently; + } + + if (allAreNotRubbish) { + return l.move_to_rubbish_bin; + } + + return l[83]; +}; + +(function(global) { + "use strict"; + const delInShareQueue = Object.create(null); + const delUINode = tryCatch(h => removeUInode(h)); + + const clearIndex = function(h) { + if (this.nn && h in this.nn) { + delete this.nn[h]; + } + if (h in this.u) { + this.u[h].c = 0; + } + if (this.su.EXP && h in this.su.EXP) { + delete this.su.EXP[h]; + } + }; + const delNodeVersions = function(p, h) { + const v = fileversioning.getVersionHandles(h); + + if (v.length) { + if (d) { + console.debug('delNodeVersions(%s/%s)...', p, h, v); + } + + for (let i = v.length; i--;) { + // eslint-disable-next-line no-use-before-define + delNodeIterator.call(this, v[i]); + } + } + }; + const delNodeIterator = function(h, delInShareQ, level = 0) { + const n = this.d[h]; + + if (fminitialized) { + delUINode(h); + } + + if (this.c[h] && h.length < 11) { + const c = Object.keys(this.c[h]); + let l = c.length; + + while (l--) { + const n = this.d[c[l]]; + + if (n && n.tvf && !n.t) { + delNodeVersions.call(this, h, c[l]); + } + delNodeIterator.call(this, c[l], delInShareQ, l); + } + delete this.c[h]; + } + + if (fmdb) { + fmdb.del('f', h); + + if (!n || n.ph) { + fmdb.del('ph', h); + } + } + + if (n) { + if (n.su) { + // this is an inbound share + delete this.c.shares[h]; + if (this.tree.shares) { + delete this.tree.shares[h]; + } + delInShareQ.push(`${n.su}*${h}`); + this.delIndex(n.su, h); + } + + if (!level) { + this.delIndex(n.p, h); + } + this.delHash(n); + delete this.d[h]; + } + + clearIndex.call(this, h); + }; + + MegaData.prototype.delNode = function(h, ignoreDB) { + const delInShareQ = delInShareQueue[h] = delInShareQueue[h] || []; + + if (d) { + console.group('delNode(%s)', h); + } + // console.time(`delNode.${h}`); + + if (fminitialized) { + // Handle Inbox/RubbishBin UI changes + delay(fmLeftMenuUI); + } + + if (this.d[h] && !this.d[h].t && this.d[h].tvf) { + const versions = fileversioning.getAllVersionsSync(h); + for (let i = versions.length; i--;) { + ufsc.delNode(versions[i].h, ignoreDB); + } + } + else { + // remove ufssizecache records + if (h.length === 8) { + ufsc.delNode(h, ignoreDB); + } + } + + // node deletion traversal + delNodeIterator.call(this, h, delInShareQ); + + if (delInShareQ.length) { + const nodes = delInShareQ.map(uh => uh.substr(12)); + + mega.keyMgr.deleteShares(nodes).catch(dump); + } + + if (fmdb && !ignoreDB) { + // Perform DB deletions once we got acknowledge from API (action-packets) + // which we can't do above because M.d[h] might be already deleted. + for (let i = delInShareQ.length; i--;) { + fmdb.del('s', delInShareQ[i]); + } + delete delInShareQueue[h]; + } + + if (d) { + console.groupEnd(); + } + // console.timeEnd(`delNode.${h}`); + }; +})(this); + +MegaData.prototype.addNode = function(n, ignoreDB) { + "use strict"; + + if (n.su) { + var u = this.u[n.su]; + if (u) { + u.h = u.u; + u.t = 1; + u.p = 'contacts'; + this.addNode(u); + } + else if (d) { + console.warn('No user record for incoming share', n.su); + } + } + + if (n.t < 2) { + crypto_decryptnode(n); + this.nodeUpdated(n, ignoreDB); + } + if (this.d[n.h] && this.d[n.h].shares) { + n.shares = this.d[n.h].shares; + } + emplacenode(n); + + // sync data objs M.u <-> M.d + if (n.h in this.u && this.u[n.h] !== n) { + for (var k in n) { + // merge changes from n->M.u[n.h] + if (k !== 'name' && k in MEGA_USER_STRUCT) { + this.u[n.h][k] = n[k]; + } + } + this.d[n.h] = this.u[n.h]; + } + + if (fminitialized) { + newnodes.push(n); + + // Handle Inbox/RubbishBin UI changes + delay(fmLeftMenuUI); + } +}; + +MegaData.prototype.delHash = function(n) { + "use strict"; + + if (this.h[n.hash] && this.h[n.hash].has(n.h)) { + this.h[n.hash].delete(n.h); + + if (!this.h[n.hash].size) { + delete this.h[n.hash]; + } + } +}; + +MegaData.prototype.delIndex = function(p, h) { + "use strict"; + // console.warn(`delIndex.${p}.${h}`); + + if (this.c[p] && this.c[p][h]) { + delete this.c[p][h]; + } + + let empty = true; + // eslint-disable-next-line no-unused-vars + for (const i in this.c[p]) { + empty = false; + break; + } + if (empty) { + delete this.c[p]; + if (fminitialized) { + $(`#treea_${p}`).removeClass('contains-folders'); + } + } +}; + +MegaData.prototype.getPath = function(id) { + + var result = []; + var loop = true; + var inshare; + var cv = this.isCustomView(id); + + id = cv ? cv.nodeID : id; + + while (loop) { + if ((id === 'contacts') && (result.length > 1)) { + id = 'shares'; + } + + if (inshare && !this.d[id]) { + // we reached the inshare root, use the owner next + id = inshare; + } + + if ( + this.d[id] + || (id === 'messages') + || (id === 'shares') + || (id === 'out-shares') + || (id === 'public-links') + || (id === this.InboxID) + || (id === 'contacts') + || (id === 'albums' || (cv && cv.type === 'albums')) + || M.isDynPage(id) + || (mega.gallery.sections[id]) + ) { + result.push(id); + } + else if (!id || (id.length !== 11)) { + return []; + } + else if (inshare && id.length === 11 && !this.d[id]) { + result.push(id, 'shares'); + return result; + } + else if (window.megaChatIsReady && megaChat.chats[id]) { + return [id, 'contacts']; + } + + if ( + (id === this.RootID) + || (id === 'shares') + || (id === 'messages') + || (id === this.RubbishID) + || (id === this.InboxID) + || M.isDynPage(id) + || (id === 'contacts') + ) { + loop = false; + } + + if (loop) { + if (!(this.d[id] && this.d[id].p)) { + break; + } + + inshare = this.d[id].su; + id = this.d[id].p; + } + } + + // Get path for Out-shares, Public links, Discovery, and Albums. + // This also cut off all path from invalid out-share and public-link path and return [] + if (cv && result.length > 1) { + + var outShareTree = M.getOutShareTree(); + + for (var i = result.length - 1; i >= 0; i--) { + if (cv.type === 'public-links' && typeof M.su.EXP !== 'undefined' && M.su.EXP[result[i]]) { + result[i + 1] = 'public-links'; + break; + } + else if (cv.type === 'out-shares' && outShareTree[result[i]]) { + result[i + 1] = 'out-shares'; + break; + } + else if (cv.type === 'gallery' && cv.nodeID === result[i]) { + result[i + 1] = 'discovery'; + break; + } + result.pop(); + } + } + + return result; +}; + +/** + * Check entered path or id is a custom view like out-shares and public-links + * If it is, return a set of object that contain detail of it. + * If it is not, return false + * @param {String} pathOrID Path or id of current element. + * @return {Object|Boolean} + */ +MegaData.prototype.isCustomView = function(pathOrID) { + + "use strict"; + + if (!pathOrID || typeof pathOrID !== 'string') { + return false; + } + + var result = Object.create(null); + result.original = pathOrID; + + // Basic gallery view + if (mega.gallery.sections[pathOrID]) { + result.type = 'gallery'; + result.nodeID = pathOrID; + result.prefixTree = ''; + result.prefixPath = ''; + } + // Media discovery view + else if (pathOrID.startsWith('discovery')) { + result.type = 'gallery'; + result.nodeID = pathOrID.replace('discovery/', ''); + result.prefixTree = ''; + result.prefixPath = 'discovery/'; + } + // Albums view + else if (pathOrID === 'albums') { + result.type = 'albums'; + result.nodeID = pathOrID; + result.prefixTree = ''; + result.prefixPath = ''; + } + // Specific album view + else if (pathOrID.startsWith('albums/')) { + result.type = 'albums'; + result.nodeID = pathOrID.replace('albums/', ''); + result.prefixTree = ''; + result.prefixPath = 'albums/'; + } + // This is a out-share id from tree + else if (pathOrID.substr(0, 3) === 'os_') { + result.type = 'out-shares'; + result.nodeID = pathOrID.replace('os_', ''); + result.prefixTree = 'os_'; + result.prefixPath = 'out-shares/'; + } + // This is a public-link id from tree + else if (pathOrID.substr(0, 3) === 'pl_') { + result.type = 'public-links'; + result.nodeID = pathOrID.replace('pl_', ''); + result.prefixTree = 'pl_'; + result.prefixPath = 'public-links/'; + } + // This is a out-share path + else if (pathOrID.substr(0, 11) === 'out-shares/') { + result.type = 'out-shares'; + result.nodeID = pathOrID.replace('out-shares/', ''); + result.prefixTree = 'os_'; + result.prefixPath = 'out-shares/'; + } + // This is a public-link path + else if (pathOrID.substr(0, 13) === 'public-links/') { + result.type = 'public-links'; + result.nodeID = pathOrID.replace('public-links/', ''); + result.prefixTree = 'pl_'; + result.prefixPath = 'public-links/'; + } + else if (pathOrID === 'out-shares') { + result.type = result.nodeID = 'out-shares'; + result.prefixTree = 'os_'; + result.prefixPath = ''; + } + else if (pathOrID === 'public-links') { + result.type = result.nodeID = 'public-links'; + result.prefixTree = 'pl_'; + result.prefixPath = ''; + } + // This is not a out-share or a public-link + else { + result = false; + } + return result; +}; + +/** + * Handle rubbish bin permanent items removal + * How this works? + * In case that param 'all' is true, then all items from rubbish are removed + * In case that param 'all' is false, then selected nodes/items are removed and all child nodes/items if any + * @param {Boolean} all To remove all or just selected nodes/items + */ +MegaData.prototype.clearRubbish = function(all) { + "use strict"; + + var promise = new MegaPromise(); + if (M.isInvalidUserStatus()) { + return promise.reject(EINTERNAL); + } + + if (M.account) { + // reset cached account data + M.account.lastupdate = 0; + } + + if (all) { + loadingDialog.show(); + ulmanager.ulClearTargetDeleted(M.getTreeHandles(M.RubbishID)); + if (window.selectionManager){ + selectionManager.clear_selection(); + } + return M.req('dr').finally(loadingDialog.hide.bind(loadingDialog)); + } + + var selids; + var fail = 0; + var success = 0; + var idtag = mRandomToken('cr'); + + var apiReq = function apiReq(handle, i) { + api_req({a: 'd', n: handle, i: i}, { + callback: function(res) { + if (res !== 0) { + console.warn('Failed to delete node with handle: ' + handle + ' Result: ' + res); + + if (++fail === selids.length && typeof M.scAckQueue[idtag] === 'function') { + onIdle(M.scAckQueue[idtag]); + delete M.scAckQueue[idtag]; + } + } + else { + success++; + } + } + }); + }; + + if (all) { + // Completely empty rubbish + selids = Object.keys(this.c[M.RubbishID] || {}); + } + else { + // Remove only selected items, not all at once + selids = $.selected || []; + } + + if (selids.length) { + loadingDialog.show(); + + M.scAckQueue[idtag] = function() { + loadingDialog.hide(); + + if (success === selids.length) { + if (window.selectionManager){ + selectionManager.clear_selection(); + } + promise.resolve(); + } + else { + promise.reject(selids.length - success); + } + }; + + for (var i = selids.length; i--;) { + apiReq(selids[i], i ? idtag.substr(-5) : idtag); + } + + // Check is there a upload target the deleted folder. + ulmanager.ulClearTargetDeleted(selids); + } + else { + promise.reject(EINCOMPLETE); + } + + return promise; +}; + +// This function has a special hacky purpose, don't use it if you don't know what it does, use M.copyNodes instead. +MegaData.prototype.injectNodes = function(nodes, target, callback) { + if (!Array.isArray(nodes)) { + nodes = [nodes]; + } + + var sane = nodes.filter(function(node) { + return M.isFileNode(node); + }); + + if (sane.length !== nodes.length) { + console.warn('injectNodes: Found invalid nodes.'); + } + + if (!sane.length) { + return false; + } + + nodes = []; + + sane = sane.map(function(node) { + if (!M.d[node.h]) { + nodes.push(node.h); + M.d[node.h] = node; + } + return node.h; + }); + + this.copyNodes(sane, target, false, new MegaPromise()) + .always(function(res) { + + nodes.forEach(function(handle) { + delete M.d[handle]; + }); + + callback(res); + }); + + return nodes.length; +}; + +/** + * @param {Array} cn Array of nodes that needs to be copied + * @param {String} t Destination node handle + * @param {Boolean} [del] Should we delete the node after copying? (Like a move operation) + * @param {MegaPromise} [promise] promise to notify completion on (Optional) + * @param {Array} [tree] optional tree from M.getCopyNodes + * @param {Boolean} [quiet] whether to show the loading spinner or not + * @returns {MegaPromise} The promise provided to this function, if any. + */ +MegaData.prototype.copyNodes = function copynodes(cn, t, del, promise, tree, quiet) { + 'use strict'; + var todel = []; + + if (typeof quiet === 'undefined') { + quiet = false; + } + + if (typeof promise === 'function') { + var tmp = promise; + promise = new MegaPromise(); + promise.always(tmp); + } + + if (M.isInvalidUserStatus()) { + return promise.reject(EINTERNAL); + } + + if (!quiet) { + loadingDialog.pshow(); + } + + if (t.length === 11 && !u_pubkeys[t]) { + var keyCachePromise = api_cachepubkeys([t]); + keyCachePromise.always(function _cachepubkeyscomplete() { + if (!quiet) { + loadingDialog.phide(); + } + + if (u_pubkeys[t]) { + M.copyNodes(cn, t, del, promise, tree, quiet); + } + else { + alert(l[200]); + + // XXX: remove above alert() if promise is set? + if (promise) { + promise.reject(EKEY); + } + } + }); + + return promise; + } + + if (!tree) { + if (this.isFileNode(cn)) { + tree = [cn]; + } + else if ($.onImportCopyNodes) { + tree = $.onImportCopyNodes; + tree.isImporting = true; + } + else { + // 1. get all nodes into memory + this.getCopyNodes(cn, t, function() { + var promise = new MegaPromise(); + + if (t === M.RubbishID) { + + return promise.resolve(null, cn); + } + else { + // 2. check for conflicts + fileconflict.check(cn, t, 'copy') + .always(function(files) { + var handles = []; + var parentsToKeep = Object.create(null); + var names = Object.create(null); + + for (var i = files.length; i--;) { + var n = files[i]; + + names[n.h] = n.name; + handles.push(n.h); + + if (n._replaces) { + todel.push(n._replaces); + } + if (n.keepParent) { + parentsToKeep[n.h] = n.keepParent; + del = false; + // it's complicated. For now if merging involved we wont delete + // as move to/from inshare is excuted as copy + del + // ---> here i am stopping 'del' + } + } + + // 3. in case of new names, provide them back to getCopyNodes + promise.resolve(names, handles, parentsToKeep); + }); + return promise; + } + }) + .always(function _(tree) { + assert(tree, 'No tree provided...'); + + loadingDialog.phide(); + + // 4. Store those nodes the user want to replace + tree.todel = todel.length && todel; + + // 5. Provide the final tree back to copyNodes() and continue + M.copyNodes(cn, t, del, promise, tree, quiet); + }); + + return promise; + } + } + + if (!Object(tree).length) { + // we may receive an empty array, for example if the user cancelled the fileconflict dialog + + if (!quiet) { + loadingDialog.phide(); + } + + if (promise) { + promise.reject(EINCOMPLETE); + } + return promise; + } + + if (del && !tree.safeToDel) { + tree.safeToDel = true; + + var shared = mega.megadrop.isDropExist(cn); + for (var i = tree.length; i--;) { + var n = M.d[tree[i].h] || false; + + console.assert(n, 'Node not found... (%s)', tree[i].h); + + if (n.shares || M.ps[n.h]) { + shared.push(n.h); + } + } + + if (shared.length) { + if (!quiet) { + loadingDialog.phide(); + } + + // Confirm with the user the operation will revoke shares and he wants to + msgDialog('confirmation', l[870], l[34] + ' ' + l[7410], l[6994], function(yes) { + if (yes) { + M.revokeShares(shared).always(M.copyNodes.bind(M, cn, t, del, promise, tree)); + } + else if (promise) { + promise.reject(EBLOCKED); + } + }); + return promise; + } + } + + if (tree.opSize) { + if (!quiet) { + loadingDialog.phide(); + } + + M.checkGoingOverStorageQuota(tree.opSize) + .fail(function() { + if (promise) { + promise.reject(EGOINGOVERQUOTA); + } + }) + .done(function() { + // Not going overquota, provide the final tree back to copyNodes() and continue + M.copyNodes(cn, t, del, promise, tree, quiet); + }); + + delete tree.opSize; + return promise; + } + todel = tree.todel; + + var a = tree; + var nodesCount; + var importNodes = Object(a).length; + var result = []; // copied nodes to fulfill promise + var ops = []; // FIXME: deploy API-side sn check + var opsArr = Object.create(null); + + for (var e = 0; e < a.length; e++) { + var dst = a[e].newTarget || t; + + if (opsArr[dst]) { + opsArr[dst].push(a[e]); + } + else { + opsArr[dst] = [a[e]]; + } + delete a[e].newTarget; + } + + var reportError = function copyNodesError(ex) { + console.error(ex); + loadingDialog.phide(); + + // warn the user about something went wrong... + msgDialog('warninga', l[135], l[47], String(ex), promise && function() { + promise.reject(EINTERNAL); + }); + }; + + var onCopyNodesDone = function() { + M.safeRemoveNodes(todel).always(function() { + if (!quiet) { + loadingDialog.phide(); + } + + if (importNodes && nodesCount < importNodes) { + if (nodesCount) { + msgDialog( + 'warninga', + l[882], + l[8683].replace('%1', nodesCount).replace('%2', importNodes) + ); + } + else { + msgDialog('error', l[882], l[2507]); + } + } + + if (promise) { + promise.resolve(result); + } + }); + }; + + var promiseResolves; + var onScDone = function(packet, nodes) { + for (var i = nodes.length; i--;) { + result.push(nodes[i].h); + } + + if (--promiseResolves < 1) { + onCopyNodesDone(); + } + }; + + for (var d in opsArr) { + var objj = { a: 'p', t: d, n: opsArr[d] }; + objj.v = 3; + objj.i = mRandomToken('pn'); + + this.scAckQueue[objj.i] = onScDone; + var s = this.getShareNodesSync(d); + if (s && s.length) { + objj.cr = crypto_makecr(opsArr[d], s, false); + } + objj.sm = 1; + // eventually append 'cauth' ticket in the objj req. + if (M.chat && megaChatIsReady) { + megaChat.eventuallyAddDldTicketToReq(objj); + } + + if (d === M.RubbishID) { + // since we are copying to rubbish we don't have multiple "d" as duplications are allowed in Rubbish + // but below code is generic and will work regardless + for (var b = 0; b < cn.length; b++) { + var srcNode = M.getNodeByHandle(cn[b]); + if (!srcNode) { + continue; + } + if (M.getNodeRoot(srcNode.h) === M.RubbishID) { + continue; + } + + for (var j = 0; j < opsArr[d].length; j++) { + if (opsArr[d][j].h === srcNode.h) { + + if (window.d) { + console.debug('Adding rr attribute handle,parent...', opsArr[d][j].h, srcNode.p); + } + var newNode = {}; + var originlNode = clone(M.d[opsArr[d][j].h]); + + if (!originlNode) { + break; + } + if (!originlNode.t) { + newNode.k = originlNode.k; + } + originlNode.rr = srcNode.p; + + newNode.a = ab_to_base64(crypto_makeattr(originlNode, newNode)); + + // new node inherits handle, parent and type + newNode.h = originlNode.h; + newNode.t = originlNode.t; + + opsArr[d][j] = newNode; + break; + } + } + + } + + } + var c = (d || "").length === 11; + for (var q = 0; q < opsArr[d].length; q++) { + + try { + opsArr[d][q].k = c + ? base64urlencode(encryptto(d, a32_to_str(opsArr[d][q].k))) + : a32_to_base64(encrypt_key(u_k_aes, opsArr[d][q].k)); + } + catch (ex) { + reportError(ex); + return promise; + } + } + + ops.push(objj); + } + promiseResolves = ops.length; + + api_req(ops, { + cn: cn, + del: del, + t: t, + imp: tree.isImporting, + callback: function(res, ctx) { + + if (typeof res === 'number' && res < 0) { + if (!quiet) { + loadingDialog.phide(); + } + + if (promise) { + promise.reject(res); + } + + // If target of copy/move is in-shared folder, -17 may means ESHAREROVERQUOTA + if (res === EOVERQUOTA && sharer(ctx.t)) { + return M.ulerror(null, ESHAREROVERQUOTA); + } + else { + return M.ulerror(null, res); + } + } + + if (ctx.del) { + for (var i in ctx.cn) { + M.delNode(ctx.cn[i], true); // must not update DB pre-API + if (!res[i]) { + api_req({ a: 'd', n: cn[i]/*, i: requesti*/ }); + } + } + } + + nodesCount = importNodes - Object.keys(res).length; + if (ctx.imp || (ctx.t && ctx.t.length === 11)) { + getsc(true); + } + } + }); + + return promise; +}; + +/** + * Move nodes. + * @param {Array} n Array of node handles + * @param {String} t Target folder node handle + * @param {Boolean} [quiet] omit loading overlay + * @param {Number} folderDefaultConflictResolution pass a default conflict resolution {optional} + * @returns {MegaPromise} Resolves with the number of moves + */ +MegaData.prototype.moveNodes = function moveNodes(n, t, quiet, folderDefaultConflictResolution) { + 'use strict'; /* jshint -W089, -W074 */ + var promise = new MegaPromise(); + + if (M.isInvalidUserStatus()) { + return promise.reject(EINTERNAL); + } + if (!quiet) { + loadingDialog.pshow(); + } + + this.collectNodes(n, t).always(function() { + newnodes = []; + var todel = []; + var parentsToKeep = Object.create(null); + var mergedFolder = Object.create(null); + var pending = {value: 0, cnt: 0}; + var names = Object.create(null); + + var cleanEmptyMergedFolders = function _cleanEmptyMergedFolders() { + if (Object.keys(mergedFolder).length) { + // cleaning empty folders (moved). + // during merging folders may still have some items (user chose dont move for + // one or more files). + // therefore, we check folders in src, if found empty --> clean. + var recursiveFolderCheck = function _recursiveFolderCheck(fHandle) { + var cleanMe = true; + var tempDeleted = []; + + for (var ha in M.c[fHandle]) { + if (!M.d[ha].t) { + return false; + } + + var res = _recursiveFolderCheck(ha); + if (!res) { + cleanMe = false; + } + else { + tempDeleted.push(ha); + } + } + + if (cleanMe) { + for (var le = 0; le < tempDeleted.length; le++) { + var loc = todel.indexOf(tempDeleted[le]); + if (loc >= 0) { + todel.splice(loc, 1); + } + } + + todel.push(fHandle); + return true; + } + }; + + for (var kh = 0; kh < n.length; kh++) { + if (mergedFolder[n[kh]]) { + recursiveFolderCheck(n[kh]); + } + } + } + }; + + // Invoked when the move-nodes operation finished as a whole. + var onMoveNodesDone = function(result) { + + // clean merged empty folders if any + cleanEmptyMergedFolders(); + + // finish operation removing dangling nodes, if any + M.safeRemoveNodes(todel).always(() => { + if (!quiet) { + loadingDialog.phide(); + } + promise.resolve(result); + }); + }; + + // Invoked when all api requests finished. + var apiReqCompletion = function(ctx) { + var renderPromise = MegaPromise.resolve(); + + if (newnodes.length) { + // force fmdb flush by writing the sn, so that we don't have to + // wait for the packet to do so if the operation succeed here. + setsn(currsn); + + if (is_mobile) { + // In Mobile we can currently only move/delete one file/folder to one destination + var keys = Object.keys(ctx.handle); + var targetHandle = keys[0]; + var nodeHandle = ctx.handle[targetHandle][0]; + + // A hook for mobile web to handle node changes. + mobile.cloud.moveFinishedCallback(nodeHandle); + } + else { + renderPromise = M.updFileManagerUI(); + } + } + + renderPromise.always(function() { + Soon(fmLeftMenuUI); + $.tresizer(); + + onMoveNodesDone(ctx.pending.cnt); + }); + }; + + // Helper to move a single node to an specific location. + var moveNode = function(n, t, versions) { + var i; + var h = n.h; + var p = n.p; + var tn = []; + const rub = t === M.RubbishID && M.getNodeRoot(h); + + // allow to revert nodes sent to the rubbish bin + if (rub && rub !== M.RubbishID) { + if (d) { + console.debug('Adding rr attribute...', n.rr, p); + } + if (!n.rr || n.rr !== p) { + n.rr = p; + api_setattr(n, mRandomToken('rrm')); + } + } + else { + if (n.rr) { + delete n.rr; + api_setattr(n, mRandomToken('rrm-d')); + } + } + + if (M.c[p] && M.c[p][h]) { + delete M.c[p][h]; + } + if (typeof M.c[t] === 'undefined') { + M.c[t] = Object.create(null); + } + + if (n.t) { + (function _(h) { + if (M.tree[h]) { + var k = Object.keys(M.tree[h]); + tn = tn.concat(k); + for (var i = k.length; i--;) { + _(k[i]); + } + } + })(h); + + if (M.tree[p]) { + delete M.tree[p][h]; + + if (!$.len(M.tree[p])) { + delete M.tree[p]; + } + } + } + M.c[t][h] = 1; + + if (versions) { + if (d) { + console.assert(versions.length, 'Empty versions array?!'); + } + for (i = versions.length; i--;) { + ufsc.delNode(versions[i].h); + } + for (i = 0; i < versions.length; i++) { + if (i === 0) { + versions[i].p = t; + } + ufsc.addNode(versions[i]); + } + } + else { + ufsc.delNode(h); + n.p = t; + ufsc.addNode(n); + } + + for (i = tn.length; i--;) { + var y = M.d[tn[i]]; + if (y) { + ufsc.addTreeNode(y); + } + } + + // If user is on out-shares, public-link or search list page, move should not remove node from the list + if (M.currentdirid !== 'out-shares' && M.currentdirid !== 'public-links' + && String(M.currentdirid).split("/")[0] !== "search") { + removeUInode(h, p); + } + + M.nodeUpdated(n); + newnodes.push(n); + + if (names[h]) { + if (names[h] === n.name) { + console.debug('fixme: caught invalid rename attempt.', h); + } + else { + M.rename(h, names[h]); + } + } + }; + + // Invoked for each api request that succeed. (Server gave an OK, i.e. Zero result) + var apiReqSuccess = function(ctx) { + var promises = []; + var versions = Object.create(null); + + var getVersions = function(h) { + var promise = fileversioning.getAllVersions(h); + promise.done(function(v) { + versions[h] = v; + }); + return promise; + }; + + var getNodes = function(callback) { + var result = []; + var handles = Object.keys(ctx.handle); + + for (var x = 0; x < handles.length; x++) { + var t = handles[x]; + if (t !== 'NodesToClear') { + var nodes = ctx.handle[t]; + for (var i = 0; i < nodes.length; i++) { + callback(M.d[nodes[i]], t); + } + } + } + + return result; + }; + + getNodes(function(n) { + if (n && !n.t && n.tvf) { + if (d > 1) { + console.debug('Retrieving versions for "%s"...', n.h, n); + } + promises.push(getVersions(n.h)); + } + }); + + var promise = new MegaPromise(); + MegaPromise.allDone(promises).finally(function() { + if (d && promises.length) { + console.log('Versions loaded into memory.', versions); + } + + getNodes(function(n, t) { + if (n && n.p) { + if (d > 1) { + console.debug('Moving node "%s" into "%s"...', n.h, t, n); + } + moveNode(n, t, versions[n.h]); + } + }); + + promise.resolve(); + }); + + return promise; + }; + + // Fire an api request to move a node or a group of them to an specific location. + var apiReq = function(apireq, h) { + pending.cnt++; + pending.value++; + mega.keyMgr.moveNodesApiReq(apireq, { + handle: h, + target: t, + pending: pending, + callback: function(res, ctx) { + var promise = MegaPromise.resolve(); + + if (!res) { + // if the move operation succeed (res == 0), perform the actual move locally + promise = apiReqSuccess(ctx); + } + + promise.always(function() { + if (!--ctx.pending.value) { + apiReqCompletion(ctx); + } + }); + } + }); + }; + + // Perform node collection to initiate the move operation. + var foreach = function(handles) { + var ops = []; + var opsArr = Object.create(null); + + for (var hh = 0; hh < handles.length; hh++) { + var dst = parentsToKeep[handles[hh]] || t; + + if (opsArr[dst]) { + opsArr[dst].push(handles[hh]); + } + else { + opsArr[dst] = [handles[hh]]; + } + } + + for (var dd in opsArr) { + for (var nn = 0; nn < opsArr[dd].length; nn++) { + var h = opsArr[dd][nn]; + var n = M.d[h] || false; + var objj = {a: 'm', t: dd, n: h, i: requesti}; + + if (M.getNodeRoot(h) === M.InboxID) { + mega.backupCenter.ackVaultWriteAccess(h, objj); + } + + // Rename nodes before performing the move to prevent race conditions from other clients... + if (names[h] && n.name !== names[h]) { + M.rename(h, names[h]); + delete names[h]; + } + + processmove(objj); + ops.push(objj); + } + } + + if (ops.length) { + apiReq(ops, opsArr); + } + + if (!pending.value) { + console.assert(!handles.length, 'Hmmm....'); + onMoveNodesDone(0); + } + }; + + // If the target folder is not the Rubbish, check whether we have to handle conflicts. + if (t !== M.RubbishID) { + mega.megadrop.preMoveCheck(n, t).done(function(n, t) { + fileconflict.check(n, t, 'move', null, folderDefaultConflictResolution) + .always(function(files) { + if (!files.length) { + // user canceled the operation. + if (!quiet) { + loadingDialog.phide(); + } + promise.reject(EBLOCKED); + return false; + } + if (!quiet) { // closing conflict dialogs is hiding the loading + loadingDialog.phide(); // making sure it's not visible. + loadingDialog.pshow(); + } + var handles = []; + var sharingIssueBetweenMerged = false; + for (var k = 0; k < files.length; k++) { + var n = files[k]; + if (n._mergedFolderWith) { + mergedFolder[n.h] = n._mergedFolderWith; + // per specs, if one of merged folders [src or dest] has sharing --> stop + var s = M.getShareNodesSync(n.h); + if (s && s.length) { + sharingIssueBetweenMerged = true; + break; + } + s = M.getShareNodesSync(n._mergedFolderWith); + if (s && s.length) { + sharingIssueBetweenMerged = true; + break; + } + continue; // igonre this node, nothing to do + } + names[n.h] = n.name; + if (n._replaces) { + todel.push(n._replaces); + } + if (n.keepParent) { + parentsToKeep[n.h] = n.keepParent; + } + handles.push(n.h); + } + if (!sharingIssueBetweenMerged) { + foreach(handles); + } + else { + if (is_mobile) { + mobile.showErrorToast(l[17739]); + } + else { + msgDialog('warninga', 'Moving Error', l[17739], 'Error in Merging'); + } + if (!quiet) { + loadingDialog.phide(); + } + promise.reject(ECIRCULAR); + } + }); + }).fail(function() { + loadingDialog.hide('force'); + // The user didn't want to disable MEGAdrop folders + promise.reject(EBLOCKED); + }); + } + else { + foreach(n); + } + }); + + return promise; +}; + +/** + * Helper function to move nodes falling back to copy+delete under inshares. + * + * @param {String} target The handle for the target folder to move nodes into + * @param {Array} [nodes] Array of nodes to move, $.selected if none provided + * @returns {MegaPromise} + */ +MegaData.prototype.safeMoveNodes = function safeMoveNodes(target, nodes) { + var promise = new MegaPromise(); + + if (M.isInvalidUserStatus()) { + return promise.reject(EINTERNAL); + } + + nodes = nodes || $.selected || []; + + this.collectNodes(nodes, target) + .always(function() { + var copy = []; + var move = []; + var promises = []; + var totype = treetype(target); + + if (d) { + console.group('safeMoveNodes for %s nodes to target %s (%s)', nodes.length, target, totype, nodes); + } + + for (var i = nodes.length; i--;) { + var node = nodes[i]; + + var fromtype = treetype(node); + + if (fromtype == totype) { + if (!M.isCircular(node, target)) { + if (totype != 'shares' || sharer(node) === sharer(target)) { + move.push(node); + } + else { + copy.push(node); + } + } + } + else { + copy.push(node); + } + } + + if (copy.length) { + if (d) { + console.debug('Performing %s copy+del operations...', copy.length); + } + promises.push(M.copyNodes(copy, target, true, new MegaPromise())); + } + if (move.length) { + if (d) { + console.debug('Performing %s move operations...', move.length); + } + promises.push(M.moveNodes(move, target)); + } + if (window.selectionManager){ + selectionManager.clear_selection(); + } + // TODO: we need an allDone() variant that does signal rejections back!... + promise.linkDoneAndFailTo(MegaPromise.allDone(promises).always(console.groupEnd.bind(console))); + }); + + return promise; +}; + +/** + * Helper function to remove nodes, either sending them to Rubbish or permanently. + * @param {String|Array} handles The handle(s) to remove + * @returns {MegaPromise} + */ +MegaData.prototype.safeRemoveNodes = function(handles) { + 'use strict'; + + var masterPromise = new MegaPromise(); + if (M.isInvalidUserStatus()) { + return masterPromise.reject(EINTERNAL); + } + + handles = handles || []; + + if (!Array.isArray(handles)) { + handles = [handles]; + } + handles = [...handles]; + + // Load required nodes into memory. + dbfetch.geta(handles).always(function() { + var i; + var toDel = []; + var toMove = []; + var promises = []; + + for (i = handles.length; i--;) { + var h = handles[i]; + var n = M.getNodeByHandle(h); + const fromtype = treetype(h); + + if (fromtype === 'shares' || fromtype === 'inbox' || n.p === M.RubbishID) { + toDel.push(h); + } + else { + toMove.push(h); + } + } + + if (toMove.length) { + promises.push(M.moveNodes(toMove, M.RubbishID, true)); + } + + if (toDel.length) { + var idtag = mRandomToken('srn'); + var delPromise = new MegaPromise(); + + for (i = toDel.length; i--;) { + + const ops = {a: 'd', n: toDel[i], i: i ? idtag.substr(-5) : idtag}; + + if (M.getNodeRoot(toDel[i]) === M.InboxID) { + mega.backupCenter.ackVaultWriteAccess(toDel[i], ops); + } + + promises.push(M.req(ops)); + } + + M.scAckQueue[idtag] = function() { + delPromise.resolve(); + }; + promises.push(delPromise); + } + + masterPromise.linkDoneAndFailTo(MegaPromise.allDone(promises)); + }); + + return masterPromise; +}; + +/** + * Revert nodes sent to the rubbish, i.e. they must have `rr` attributes + * @param {String|Array} handles The handle(s) to revert + * @returns {MegaPromise} + */ +MegaData.prototype.revertRubbishNodes = function(handles) { + 'use strict'; /* jshint -W089 */ + var masterPromise = new MegaPromise(); + + if (M.isInvalidUserStatus()) { + return masterPromise.reject(EINTERNAL); + } + + handles = handles || []; + if (!Array.isArray(handles)) { + handles = [handles]; + } + handles = [...handles]; + + if (d) { + console.group('revertRubbishNodes for %s nodes...', handles.length, handles); + + masterPromise.always(console.groupEnd.bind(console)); + } + + // Main reverting logic + var revertNodes = function() { + var targets = Object.create(null); + var promise = MegaPromise.resolve(); + + var moveNode = function(h, t) { + promise.pipe(function() { + + if (t === M.InboxID) { + return false; + } + + if (d) { + console.debug('Reverting %s into %s...', String(h), t); + } + + return M.safeMoveNodes(t, h); + }); + }; + + const selectItems = (handles) => { + if (!Array.isArray(handles)) { + handles = handles && [handles] || []; + } + + if (window.selectionManager) { + selectionManager.clear_selection(); + + for (let i = handles.length; i--;) { + selectionManager.add_to_selection(handles[i]); + } + } + else { + $.selected = handles; + reselect(1); + } + }; + + for (var i = handles.length; i--;) { + var h = handles[i]; + var n = M.getNodeByHandle(h); + var t = n.rr; + const tRoot = M.getNodeRoot(t); + + if (M.getNodeRoot(h) !== M.RubbishID) { + continue; + } + + if (!t || !M.d[t] || tRoot === M.RubbishID || M.getNodeRights(t) < 2 + || is_mobile && tRoot === M.InboxID) { + if (d) { + console.warn('Reverting falling back to cloud root for %s.', h, t, n); + } + t = M.RootID; + } + else if (tRoot && tRoot === M.InboxID) { + t = M.InboxID; + } + + if (targets[t]) { + targets[t].push(h); + } + else { + targets[t] = [h]; + } + } + + if ($.len(targets)) { + var target; + + for (var k in targets) { + moveNode(targets[k], k); + target = [k, targets[k]]; + } + + promise.unpack(function(newNodes) { + var error = false; + + if (!Array.isArray(newNodes)) { + newNodes = [newNodes]; + } + + // we will only get new nodes if a copy+del was invoked. + newNodes = newNodes.filter(function(h) { + if (typeof h === 'number' && h < 0) { + if (d) { + console.warn('Caught error in operation.', h); + } + error = h; + } + return M.d[h]; + }); + + if (is_mobile) { + loadingDialog.hide(); + + if (error) { + masterPromise.reject(error); + } + else { + masterPromise.resolve(targets); + } + return; + } + + // removeUInode may queued another `delay('openfolder', ...)`, let's overwrite it. + delay('openfolder', function() { + if (error) { + // Caught error found, copyNodes/moveNodes should have shown a msgDialog() to the user. + loadingDialog.hide(); + masterPromise.reject(error); + return; + } + + if (targets[M.InboxID]) { + + selectItems(targets[M.InboxID]); + + selectFolderDialog(() => { + loadingDialog.pshow(); + + M.moveNodes(targets[M.InboxID], $.mcselected, true, 3).finally(() => { + loadingDialog.phide(); + closeDialog(); + M.openFolder($.mcselected).finally(() => selectItems(targets[M.InboxID])); + }); + }, 'move'); + + masterPromise.resolve(targets); + } + else { + M.openFolder(target[0]).finally(() => { + selectItems(newNodes.length && newNodes || target[1]); + masterPromise.resolve(targets); + }); + } + }, 90); + }); + } + else { + masterPromise.reject(ENOENT); + } + }; + + // Load required nodes into memory. + dbfetch.geta(handles).always(function() { + var to = Object.create(null); + + for (var i = handles.length; i--;) { + var h = handles[i]; + var n = M.getNodeByHandle(h); + + if (!n) { + if (d) { + console.debug('revertRubbishNodes: node not found.', h); + } + } + else if (n.rr) { + to[n.rr] = 1; + } + } + + dbfetch.geta(Object.keys(to)).always(revertNodes); + }); + + return masterPromise; +}; + +/** + * Helper to move nodes to the rubbish bin + * @param {String|Array} handles The handle(s) to move + * @returns {MegaPromise} + */ +MegaData.prototype.moveToRubbish = function(handles) { + 'use strict'; + var masterPromise = new MegaPromise(); + + if (!Array.isArray(handles)) { + handles = [handles]; + } + + if (d) { + console.group('moveToRubbish %s nodes...', handles.length, handles); + console.time('moveToRubbish'); + } + + // always revoke any sharing status recursively across the affected nodes + this.revokeShares(handles) + .always((nodesToMove) => { + var promise = M.safeMoveNodes(M.RubbishID, nodesToMove); + + if (d) { + promise.always(function() { + console.timeEnd('moveToRubbish'); + console.groupEnd(); + }); + } + masterPromise.linkDoneAndFailTo(promise); + }); + + return masterPromise; +}; + +/** + * Stop sharing nodes recursively across provided handles. + * @param {String|Array} handles The root node handle(s) to stop sharing + * @returns {MegaPromise} + */ +MegaData.prototype.revokeShares = function(handles) { + 'use strict'; /* jshint -W089, -W074 */ + var promise = new MegaPromise(); + + if (M.isInvalidUserStatus()) { + return promise.reject(EINTERNAL); + } + + if (!Array.isArray(handles)) { + handles = [handles]; + } + handles = array.unique(handles); + + if (d) { + console.group('revokeShares for %s nodes...', handles.length, handles); + } + + this.collectNodes(handles) + // eslint-disable-next-line complexity -- @todo refactor + .then(() => { + var i; + var tree = []; + var links = []; + var folders = []; + var promises = []; + + for (i = handles.length; i--;) { + var n = M.d[handles[i]]; + + if (!n) { + console.warn('revokeShares: node not found.', handles[i]); + } + else { + if (n.t) { + folders.push(n.h); + } + if (n.ph) { + links.push(n.h); + } + tree = tree.concat(M.getNodesSync(n.h, true)); + } + } + + // delete pending outshares for the deleted nodes + if (folders.length) { + promises.push(mega.keyMgr.deletePendingOutShares(folders)); + } + + var widgets = mega.megadrop.isDropExist(folders); + + if (widgets.length) { + if (d) { + console.debug('Revoking %s MEGAdrop folders...', widgets.length); + } + promises.push(mega.megadrop.pufRemove(widgets, true)); + } + + for (i = tree.length; i--;) { + var h = tree[i]; + + for (var share in Object(M.d[h]).shares) { + var user = M.d[h].shares[share].u; + + if (user === 'EXP') { + links.push(h); + } + else { + if (d) { + console.debug('Revoking shared folder %s with user %s...', h, user); + } + promises.push(M.revokeFolderShare(h, user)); + } + } + + for (var u in M.ps[h]) { + if (d) { + console.debug('Revoking pending shared folder %s with user %s...', h, u); + } + promises.push(M.revokeFolderShare(h, u, true)); + } + } + + if (links.length) { + links = array.unique(links); + + if (d) { + console.debug('Revoking %s public links...', links.length); + } + + var exportLink = new mega.Share.ExportLink({'updateUI': true, 'nodesToProcess': links}); + promises.push(exportLink.removeExportLink(true)); + } + + if (d) { + console.debug('revokeShares: awaiting for %s promises...', promises.length); + } + + return Promise.allSettled(promises); + }) + .then(() => { + console.groupEnd(); + promise.resolve(handles); + }) + .catch((ex) => { + console.groupEnd(); + promise.reject(ex); + }); + + return promise; +}; + +/** + * Revoke folder share by invoking an s2 request. + * @param {String} h The ufs-node handle + * @param {String} usr The user-handle this node is shared with, or pcr id + * @param {Boolean} [isps] Whether we're revoking a pending share + * @returns {MegaPromise} + */ +MegaData.prototype.revokeFolderShare = function(h, usr, isps) { + 'use strict'; + var promise = new MegaPromise(); + + if (M.isInvalidUserStatus()) { + return promise.reject(EINTERNAL); + } + + if (String(h).length !== 8 || String(usr).length !== 11) { + if (d) { + console.warn('revokeFolderShare: Invalid arguments...', h, usr); + } + return MegaPromise.reject(EARGS); + } + + api_req({a: 's2', n: h, s: [{u: Object(M.opc[usr]).m || usr, r: ''}], ha: '', i: requesti}, { + callback: function(res) { + if (typeof res === 'object') { + // FIXME: verify error codes in res.r + + if (isps) { + M.deletePendingShare(h, usr); + } + else { + M.delNodeShare(h, usr); + setLastInteractionWith(usr, "0:" + unixtime()); + } + + promise.resolve(res); + } + else { + if (d) { + console.warn('revokeFolderShare failed.', res, h, usr); + } + promise.reject(res); + } + } + }); + + return promise; +}; + +/** + * Function to invoke when a node has been modified. + * @param {Object|MegaNode} n The ufs-node that got updated. + * @param {Boolean} [ignoreDB] Whether to prevent saving to DB + */ +MegaData.prototype.nodeUpdated = function(n, ignoreDB) { + if (n.h && n.h.length == 8) { + if (n.t && n.td === undefined) { + // Either this is a newly created folder or it comes from a fresh gettree + n.td = 0; + n.tf = 0; + n.tb = 0; + } + + ufsc.addToDB(n); + + if (this.nn && n.name && !n.fv) { + this.nn[n.h] = n.name; + } + + // update My chat files folder + if (this.cf.h === n.h) { + this.cf = n.p === M.RubbishID ? false : n; + } + + // sync missingkeys with this node's key status + if (crypto_keyok(n)) { + // mark as fixed if necessary + if (missingkeys[n.h]) { + crypto_keyfixed(n.h); + } + } + else { + // always report missing keys as more shares may + // now be affected + if (n.k) { + crypto_reportmissingkey(n); + } + } + + // maintain special incoming shares index + if (n.su) { + if (!this.c[n.su]) { + this.c[n.su] = Object.create(null); + } + this.c[n.su][n.h] = n.t + 1; + + if (!this.c.shares[n.h]) { + if (n.sk && !u_sharekeys[n.h]) { + // extract sharekey from node's sk property + var k = crypto_process_sharekey(n.h, n.sk); + if (k !== false) { + crypto_setsharekey(n.h, k, ignoreDB); + } + } + + this.c.shares[n.h] = { su: n.su, r: n.r, t: n.h }; + + if (u_sharekeys[n.h]) { + this.c.shares[n.h].sk = a32_to_base64(u_sharekeys[n.h][0]); + } + + if (fmdb && !ignoreDB) { + fmdb.add('s', { + o_t: n.su + '*' + n.h, + d: this.c.shares[n.h] + }); + } + } + } + // if node in cached mode in editor, clear it + if (mega && mega.fileTextEditor) { + mega.fileTextEditor.clearCachedFileData(n.h); + } + + if (M.currentCustomView.type === 'albums') { + mega.gallery.albums.onCDNodeUpdate(n); + } + else { + mega.gallery.albumsRendered = false; + } + + if (M.currentCustomView.type === 'gallery') { + mega.gallery.checkEveryGalleryUpdate(n); + mega.gallery.albums.onCDNodeUpdate(n); + } + else { + mega.gallery.nodeUpdated = true; + mega.gallery.albumsRendered = false; + } + + if (this.isDynPage(this.currentdirid) > 1) { + this.dynContentLoader[this.currentdirid].sync(n); + } + + // Update versioning dialog if it is open and the folder is its parent folder, + // the purpose of the following code is to update permisions of historical files. + if ($.selected + && ($.selected.length > 0) + && !$('.fm-versioning').hasClass('hidden')) { + var parentNode = M.d[$.selected[0]] ? M.d[$.selected[0]].p : null; + while (parentNode) { + if (parentNode === n.h) { + fileversioning.updateFileVersioningDialog(); + break; + } + parentNode = M.d[parentNode] ? M.d[parentNode].p : null; + } + } + + mBroadcaster.sendMessage("nodeUpdated:" + n.h); + } +}; + + +/** + * Fire DOM updating when a folder node's size gets updated + * @param {MegaNode} node node object to update in UI + */ +MegaData.prototype.onFolderSizeChangeUIUpdate = function(node) { + "use strict"; + var p = this.viewmode === 0 && this.currentdirid || false; + if (p && String(p).slice(-8) === node.p || M.currentCustomView || p === 'shares') { + var elm = document.getElementById(node.h); + + if (elm) { + var s1 = elm.querySelector('.size'); + var s2 = elm.querySelector('.shared-folder-size'); + + if (s1 || s2) { + var sizeText = bytesToSize(node.tb); + + if (s1) { + s1.textContent = sizeText; + } + if (s2) { + s2.textContent = sizeText; + + if ((s2 = elm.querySelector('.shared-folder-info'))) { + s2.textContent = fm_contains(node.tf, node.td); + } + } + } + } + + // @todo consider bringing back an approach to re-sort by size, one that wouldn't lead to uncaught exceptions. + } +}; + +/** + * Fire DOM updating when a node gets a new name + * @param {String} itemHandle node's handle + * @param {String} newItemName the new name + */ +MegaData.prototype.onRenameUIUpdate = function(itemHandle, newItemName) { + if (fminitialized) { + var n = M.d[itemHandle] || false; + + // DOM update, left and right panel in 'Cloud Drive' tab + $('.grid-table.fm #' + itemHandle + ' .tranfer-filetype-txt').text(newItemName); + $('#' + itemHandle + '.data-block-view .file-block-title').text(newItemName); + + // DOM update, left and right panel in "Shared with me' tab + $('#treea_' + itemHandle + ' span:nth-child(2)').text(newItemName); + $('#' + itemHandle + ' .shared-folder-info-block .shared-folder-name').text(newItemName); + + // DOM update, right panel view during browsing shared content + if (M.currentdirid === itemHandle) { + $('.shared-details-block .shared-details-pad .shared-details-folder-name').text(newItemName); + } + + // DOM update, breadcrumbs in 'Shared with me' tab + if ($('#path_' + itemHandle).length > 0) { + if (this.onRenameUIUpdate.tick) { + clearTimeout(this.onRenameUIUpdate.tick); + } + this.onRenameUIUpdate.tick = setTimeout(function() { + delay('render:path_breadcrumbs', () => M.renderPathBreadcrumbs()); + }, 90); + } + + mega.megadrop.onRename(itemHandle, newItemName); + + // update file versioning dialog if the name of the versioned file changes. + if (!n.t && n.tvf > 0) { + fileversioning.updateFileVersioningDialog(itemHandle); + } + + if (n.p === M.currentdirid) { + delay('onRenameUIUpdate:' + n.p, function() { + if (n.p === M.currentdirid) { + M.openFolder(n.p, true).then(reselect).catch(dump); + } + }, 50); + } + + if ($('#treeli_' + n.h).length > 0) { + // Since n.h may not be a folder, we need to do some check to ensure we really need to do a tree redraw. + // In case its rendered in the dom as #treeli_hash, then this is 100% a folder that was rendered in its old + // order. + // Last but not least, we throttle this, so that big move/rename operations would only redraw the tree once + delay('onRenameUIUpdateTreePane', function () { + M.redrawTree(); + }, 50); + } + } + + if (M.recentsRender) { + M.recentsRender.nodeChanged(itemHandle); + } +}; + +MegaData.prototype.rename = function(itemHandle, newItemName) { + var n = this.d[itemHandle]; + + if (d) { + console.assert(!n || n.name !== newItemName, 'Unneeded rename invoked.'); + } + + if (n && n.name !== newItemName) { + var oldItemName = n.name; + + n.name = newItemName; + if (n.t && M.tree[n.p]) { + Object(M.tree[n.p][n.h]).name = newItemName; + } + + this.onRenameUIUpdate(itemHandle, newItemName); + api_setattr(n, mRandomToken('mv')) + .fail(function(error) { + n.name = oldItemName; + if (n.t && M.tree[n.p]) { + Object(M.tree[n.p][n.h]).name = oldItemName; + } + msgDialog('warninga', l[135], l[47], api_strerror(error)); + M.onRenameUIUpdate(itemHandle, oldItemName); + }); + } +}; + +/** + * Colour Label context menu update + * + * @param {Array | string} handles Selected nodes handles + */ +MegaData.prototype.colourLabelcmUpdate = function(handles) { + + 'use strict'; + + if (fminitialized && handles) { + if (!Array.isArray(handles)) { + handles = [handles]; + } + + const $items = $('.files-menu .dropdown-colour-item'); + const values = []; + let hasLabelCnt = 0; + + for (let i = handles.length; i--;) { + const node = M.d[handles[i]]; + if (!node) { + if (d) { + console.warn('Node not found.', handles[i]); + } + continue; + } + + if (node.lbl) { + hasLabelCnt++; + if (!values.includes(node.lbl)) { + values.push(node.lbl); + } + } + } + + // Determine all nodes have the same label + const isUnifiedLabel = values.length === 1 && handles.length === hasLabelCnt; + + // Reset label submenu + $items.removeClass('active update-to'); + + // Add active state label + if (values.length > 0) { + $items.addClass('update-to'); + + for (let j = values.length; j--;) { + $items.filter('[data-label-id=' + values[j] + ']').addClass('active'); + } + + if (isUnifiedLabel) { + // Remove the 'update-to' classname since all nodes have the same label + $items.filter('[data-label-id=' + values[0] + ']').removeClass('update-to'); + } + } + } +}; + +MegaData.prototype.getLabelClassFromId = function(id) { + + return ({ + '1': 'red', '2': 'orange', '3': 'yellow', + '4': 'green', '5': 'blue', '6': 'purple', '7': 'grey' + })[id] || ''; +}; + +/** + * labelDomUpdate + * + * @param {String} handle + * @param {Number} value Current labelId + */ +MegaData.prototype.labelDomUpdate = function(handle, value) { + "use strict"; + + if (fminitialized) { + var n = M.d[handle] || false; + var labelId = parseInt(value); + var removeClasses = 'colour-label red orange yellow blue green grey purple'; + var color = '
              '; + var prefixTree = M.currentCustomView.prefixTree || ''; + var $treeElements = $('#treea_' + handle).add('#treea_os_' + handle).add('#treea_pl_' + handle); + + // Remove all colour label classes + var $item = $('#' + handle); + $item.removeClass(removeClasses); + $('a', $item).removeClass(removeClasses); + $('.label', $item).text(''); + $treeElements.removeClass('labeled'); + $('.colour-label-ind', $treeElements).remove(); + + if (labelId) { + // Add colour label classes. + var lblColor = M.getLabelClassFromId(labelId); + var colourClass = 'colour-label ' + lblColor; + + $item.addClass(colourClass); + $('a', $item).addClass(colourClass); + $('.nw-fm-tree-iconwrap', $treeElements).safePrepend(color.replace('%1', M.getLabelClassFromId(labelId))) + .addClass('labeled'); + if (M.megaRender) { + $('.label', $item).text(M.megaRender.labelsColors[lblColor]); + } + } + + var currentTreeLabel = M.filterTreePanel[M.currentTreeType + '-label']; + // if current tree is on filtering + if (currentTreeLabel && Object.keys(currentTreeLabel).length > 0) { + // and action is assigning new tag + if (labelId && currentTreeLabel[labelId]) { + $('#treeli_' + prefixTree + handle).removeClass("tree-item-on-filter-hidden"); + } + // and action is unassigning old tag + else { + $('#treeli_' + prefixTree + handle).addClass("tree-item-on-filter-hidden"); + } + } + + // make filter enable/disable depending on filter availabilty. + $('.dropdown-section .dropdown-item-label') + .add('.dropdown-section.filter-by .labels') + .addClass('disabled static'); + + if (M.isLabelExistNodeList(M.v)) { + $('.dropdown-section .dropdown-item-label') + .add('.dropdown-section.filter-by .labels') + .removeClass('disabled static'); + } + + delay('labelDomUpdate:' + n.p, function() { + const {n} = M.sortmode || {}; + if (n === 'label') { + // remember current scroll position and make user not losing it. + var $megaContainer = $('.megaListContainer:visible'); + var currentScrollPosition = $megaContainer.prop('scrollTop'); + + M.openFolder(M.currentdirid, true).always(() => { + $megaContainer.prop('scrollTop', currentScrollPosition); + }).then(reselect); + } + }, 50); + } +}; + +/** + * Labeling of nodes updates DOM and API + * + * @param {Array | string} handles Selected nodes handles + * @param {Integer} newLabelState Numeric value of the new label + */ +MegaData.prototype.labeling = function(handles, newLabelState) { + + 'use strict'; + + if (fminitialized && handles) { + if (!Array.isArray(handles)) { + handles = [handles]; + } + + newLabelState = newLabelState || 0; + + for (let i = handles.length; i--;) { + const handle = handles[i]; + + if (M.getNodeRights(handle) < 2) { + continue; + } + + const node = M.d[handle]; + if (!node) { + if (d) { + console.warn('Node not found.', handle); + } + continue; + } + + node.lbl = newLabelState; + if (!node.lbl) { + delete node.lbl; + } + + if (node.tvf) { + fileversioning.labelVersions(handle, newLabelState); + } + + api_setattr(node, mRandomToken('lbl')); + + // sync with global tree + if (node.t > 0) { + const tn = M.tree[node.p][node.h]; + + tn.lbl = node.lbl; + if (!tn.lbl) { + delete tn.lbl; + } + } + + M.labelDomUpdate(handle, newLabelState); + } + + M.initLabelFilter(M.v); + } +}; + +MegaData.prototype.labelFilterBlockUI = function() { + "use strict"; + + var type = M.currentLabelType; + // Hide all filter DOM elements + $('.fm-right-header.fm .filter-block.body').addClass('hidden'); + $('.files-grid-view.fm .filter-block.body').addClass('hidden'); + + if (M.currentLabelFilter) { + + if (M.viewmode) {// Block view + if (type === 'shares') { + $('.fm-right-header.fm .filter-block.' + type + '.body').removeClass('hidden'); + } + else if (type === 'contact') { + $('.filter-block.body').addClass('hidden'); + $('.fm-right-header.fm .filter-block.body').addClass('hidden'); + } + else { + $('.filter-block.' + type + '.body').addClass('hidden'); + $('.fm-right-header.fm .filter-block.' + type + '.body').removeClass('hidden'); + } + } + else {// List view + if (type === 'shares') { + $('.fm-right-header.fm .filter-block.' + type + '.body').removeClass('hidden'); + } + else if (type === 'contact') { + $('.filter-block.body').addClass('hidden'); + $('.fm-right-header.fm .filter-block.body').addClass('hidden'); + } + else { + $('.fm-right-header.fm .filter-block.' + type + '.body').addClass('hidden'); + $('.filter-block.' + type + '.body').removeClass('hidden'); + } + } + } +}; + +MegaData.prototype.labelType = function() { + "use strict"; + + var result = 'fm'; + switch (M.currentrootid) { + case 'shares': + result = 'shares'; + break; + case 'out-shares': + result = 'out-shares'; + break; + case 'public-links': + result = 'public-links'; + break; + case M.RubbishID: + result = 'rubbish'; + break; + case 'contacts': + result = 'contacts'; + break; + default: + break; + } + + return result; +}; + +/* + * update clicked label's display info + * + * @param {Object} e event triggered to excuting this. + */ +MegaData.prototype.updateLabelInfo = function(e) { + "use strict"; + + var $t = $(e.target); + var labelTxt = $t.data('label-txt'); + + if ($(e.target).hasClass('active')) { + switch (labelTxt) { + case "Red": + labelTxt = l[19571]; + break; + case "Orange": + labelTxt = l[19575]; + break; + case "Yellow": + labelTxt = l[19579]; + break; + case "Green": + labelTxt = l[19583]; + break; + case "Blue": + labelTxt = l[19587]; + break; + case "Purple": + labelTxt = l[19591]; + break; + case "Grey": + labelTxt = l[19595]; + break; + } + } + else { + switch (labelTxt) { + case "Red": + labelTxt = l[19570]; + break; + case "Orange": + labelTxt = l[19574]; + break; + case "Yellow": + labelTxt = l[19578]; + break; + case "Green": + labelTxt = l[19582]; + break; + case "Blue": + labelTxt = l[19586]; + break; + case "Purple": + labelTxt = l[19590]; + break; + case "Grey": + labelTxt = l[19594]; + break; + } + } + + $('.labels .dropdown-color-info').safeHTML(labelTxt).addClass('active'); +}; + +/* + * filter fm and shared with me by tag colour + * + * @param {Object} e event triggered to excuting this. + */ +MegaData.prototype.applyLabelFilter = function (e) { + "use strict"; + + var $t = $(e.target); + var labelId = parseInt($t.data('label-id')); + var type = M.currentLabelType; + var $menuItems = $('.colour-sorting-menu .dropdown-colour-item'); + var $filterBlock = $('.filter-block.' + type + '.body'); + var fltIndicator = '
              '; + var obj = M.filterLabel[type];// Global var holding colour tag filter information for fm and shares + + obj[labelId] = !obj[labelId]; + + if (obj[labelId]) { + $menuItems.filter('[data-label-id=' + labelId + ']').addClass('active'); + $filterBlock.find('.content').append(fltIndicator.replace('%1', M.getLabelClassFromId(labelId))); + + if (M.viewmode) {// Block view + $('.fm-right-header.fm .filter-block.' + type + '.body').removeClass('hidden'); + } + else { + if (M.currentrootid === M.RootID || M.currentrootid === M.RubbishID) { + $('.filter-block.' + type + '.body').removeClass('hidden'); + } + else { + $('.fm-right-header.fm .filter-block.' + type + '.body').removeClass('hidden'); + } + } + } + else { + delete obj[labelId]; + + $menuItems.filter('[data-label-id=' + labelId + ']').removeClass('active'); + $filterBlock.find('.colour-label-ind.' + M.getLabelClassFromId(labelId)).remove(); + if (!Object.keys(obj).length) { + delete M.filterLabel[type]; + $filterBlock.addClass('hidden'); + $.hideContextMenu(); + } + } + + M.updateLabelInfo(e); + M.openFolder(M.currentdirid, true); +}; + +/* + * Check nodelist contains label + * + * @param {Object} nodelist array of nodes + * + * @return {Boolean} + */ + +MegaData.prototype.isLabelExistNodeList = function(nodelist) { + "use strict"; + + for (var i = nodelist.length; i--;) { + var lbl = (nodelist[i] || {}).lbl | 0; + if (lbl) { + return true; + } + } + return false; +}; + +/* + * init label filter and sort if node item has label. + * + * @param {Object} nodelist array of nodes + */ + +MegaData.prototype.initLabelFilter = function(nodelist) { + "use strict"; + + if (d){ + console.log('checking label is existing'); + } + + var $fmMenu = $('.colour-sorting-menu .dropdown-section .dropdown-item-label') + .add('.colour-sorting-menu .dropdown-section.filter-by .labels'); + + if (this.isLabelExistNodeList(nodelist)){ + $fmMenu.removeClass('disabled static'); + if (d){ + console.log('label exist on node list, label filter is ON'); + } + } + else { + $fmMenu.addClass('disabled static'); + if (d){ + console.log('no label exist on node list, label filter is OFF'); + } + } +}; + +/** + * favouriteDomUpdate + * + * @param {Object} node Node object + * @param {Number} favState Favourites state 0 or 1 + */ +MegaData.prototype.favouriteDomUpdate = function(node, favState) { + 'use strict'; + if (fminitialized) { + delay(`fav.dom-update.${node.h}`, () => { + const domListNode = document.getElementById(node.h); + + if (domListNode) { + const $gridView = $('.grid-status-icon', domListNode); + const $blockView = $('.file-status-icon', domListNode); + + if (favState) { + // Add favourite + $gridView.removeClass('icon-dot').addClass('icon-favourite-filled'); + $blockView.addClass('icon-favourite-filled'); + } + else { + // Remove from favourites + $gridView.removeClass('icon-favourite-filled').addClass('icon-dot'); + $blockView.removeClass('icon-favourite-filled'); + } + } + }); + } +}; + +/** + * Change node favourite state. + * @param {Array} handles An array containing node handles + * @param {Number} newFavState Favourites state 0 or 1 + */ +MegaData.prototype.favourite = function(handles, newFavState) { + var exportLink = new mega.Share.ExportLink({}); + + if (fminitialized) { + if (!Array.isArray(handles)) { + handles = [handles]; + } + + $.each(handles, function(index, handle) { + var node = M.getNodeByHandle(handle); + + if (node && !exportLink.isTakenDown(handle) && M.getNodeRoot(handle) !== M.InboxID) { + node.fav = newFavState | 0; + if (!node.fav) { + delete node.fav; + } + api_setattr(node, mRandomToken('fav')); + if (node.tvf) { + fileversioning.favouriteVersions(handle, newFavState); + } + M.favouriteDomUpdate(node, newFavState); + } + }); + } +}; + +/** + * isFavourite + * + * Search throught items via nodesId and report about fav attribute + * @param {Array} nodesId Array of nodes Id + * @returns {Boolean} + */ +MegaData.prototype.isFavourite = function(nodesId) { + + var result = false; + var nodes = nodesId; + + if (!Array.isArray(nodesId)) { + nodes = [nodesId]; + } + + // On first favourite found break the loop + $.each(nodes, function(index, value) { + if (M.d[value] && M.d[value].fav) { + result = true; + return false;// Break the loop + } + }); + + return result; +}; + +/** + * versioningDomUpdate + * + * @param {Handle} fh Node handle + * @param {Number} versionsNumber Number of previous versions. + */ +MegaData.prototype.versioningDomUpdate = function(fh) { + + var $nodeView = $('#' + fh); + + // For cached node but not rendered on dom, using cached selector will update missing dom node as well + if (M.megaRender && M.megaRender.nodeMap[fh]) { + $nodeView = $(M.megaRender.nodeMap[fh]); + } + + var $versionsCol = $nodeView.find('td[megatype="versions"]'); + + if (M.d[fh] && M.d[fh].tvf) {// Add versioning + $nodeView.addClass('versioning'); + if ($versionsCol && $versionsCol.length) { + var $verHtml = M.megaRender.versionColumnPrepare(M.d[fh].tvf, M.d[fh].tvb || 0); + $versionsCol.empty().append($verHtml); + } + } + else {// Remove versioning + $nodeView.removeClass('versioning'); + if ($versionsCol && $versionsCol.length) { + $versionsCol.empty(); + } + } +}; + +MegaData.prototype.getNode = function(idOrObj) { + if (isString(idOrObj) === true && this.d[idOrObj]) { + return this.d[idOrObj]; + } + else if (idOrObj && typeof (idOrObj.t) !== 'undefined') { + return idOrObj; + } + else { + return false; + } +}; + +/** + * Returns all nodes under root (the entire tree) + * FIXME: add reporting about how many nodes were dropped in the process + * + * @param {String} root + * @param {Boolean} [includeroot] includes root itself + * @param {Boolean} [excludebad] prunes everything that's undecryptable - good nodes under a + * bad parent will NOT be returned to keep the result tree-shaped. + * @param {Boolean} [excludeverions] excludes file versions. + * @returns {MegaPromise} + */ +MegaData.prototype.getNodes = async function fm_getnodes(root, includeroot, excludebad, excludeverions) { + 'use strict'; + await dbfetch.acquire(root); + await dbfetch.coll([root]); + return M.getNodesSync(root, includeroot, excludebad, excludeverions); +}; + +/** + * Returns all nodes under root (the entire tree) + * FIXME: add reporting about how many nodes were dropped in the process + * + * @param {String} root + * @param {Boolean} [includeroot] includes root itself + * @param {Boolean} [excludebad] prunes everything that's undecryptable - good nodes under a + * bad parent will NOT be returned to keep the result tree-shaped. + * @param {Boolean} [excludeverions] excludes file versions. + * @returns {Array} + */ +MegaData.prototype.getNodesSync = function fm_getnodessync(root, includeroot, excludebad, excludeverions) { + var nodes = []; + var parents = [root]; + var newparents; + var i; + + while (i = parents.length) { + + newparents = []; + + while (i--) { + // must exist and optionally be fully decrypted to qualify + if (this.d[parents[i]] && (!excludebad || !this.d[parents[i]].a)) { + nodes.push(parents[i]); + if (this.c[parents[i]] && + ((excludeverions && this.d[parents[i]].t) || (!excludeverions))) { + newparents = newparents.concat(Object.keys(this.c[parents[i]])); + } + } + } + + parents = newparents; + } + + if (!includeroot) { + nodes.shift(); + } + return nodes; +}; + +/** + * Collect nodes recursively, as needed for a copy/move operation. + * @param {String|Array} handles The node handles to retrieve recursively. + * @param {String|Array} [targets] Optional target(s) these nodes will be moved into. + * @returns {Promise} + */ +MegaData.prototype.collectNodes = function(handles, targets) { + 'use strict'; + var promises = []; + + if (targets) { + if (!Array.isArray(targets)) { + targets = [targets]; + } + targets = [...targets]; + + for (var t = targets.length; t--;) { + if (M.c[targets[t]]) { + targets.splice(t, 1); + } + } + + if (targets.length) { + promises.push(dbfetch.geta(targets)); + } + } + + if (!Array.isArray(handles)) { + handles = [handles]; + } + handles = [...handles]; + + for (var i = handles.length; i--;) { + var h = handles[i]; + + if (M.d[h] && !M.d[h].t) { + handles.splice(i, 1); + } + } + + if (handles.length) { + promises.push(dbfetch.coll(handles)); + } + + if (d) { + console.log('collectNodes', handles, targets); + } + + return Promise.allSettled(promises); +}; + +/** + * Get all clean (decrypted) subtrees under cn + * FIXME: return total number of nodes omitted because of decryption issues + * + * @param {Array} handles Node handles + * @param {Array|String} [hadd] Additional node handles to fetch, not included in the result + * @param {Object|Function} [names] Object containing handle:name to perform renaming over these nodes, + * or a function returning a promise which will be fulfilled with them. + * @returns {MegaPromise} + */ +MegaData.prototype.getCopyNodes = function fm_getcopynodes(handles, hadd, names) { + var promise = new MegaPromise(); + + this.collectNodes(handles, hadd) + .finally(function() { + var sync = function(names, handles, presevedParents) { + var result = M.getCopyNodesSync(handles, names, presevedParents); + promise.resolve(result); + }; + + if (typeof names === 'function') { + names(handles).done(sync); + } + else { + sync(names, handles); + } + }); + + return promise; +}; + +/** + * Get all clean (decrypted) subtrees under cn + * FIXME: return total number of nodes omitted because of decryption issues + * + * @param {Array} handles An array of node's handles + * @param {Object} [names] Object containing handle:name to perform renaming over these nodes + * @returns {Array} + */ +MegaData.prototype.getCopyNodesSync = function fm_getcopynodesync(handles, names, presevedParents) { + var a = []; + var r = []; + var i, j; + var opSize = 0; + + // add all subtrees under handles[], including the roots + for (i = 0; i < handles.length; i++) { + var tempR = this.getNodesSync(handles[i], true, true); + if (presevedParents && presevedParents[handles[i]]) { + for (var kh = 0; kh < tempR.length; kh++) { + if (!presevedParents[tempR[kh]]) { + presevedParents[tempR[kh]] = presevedParents[handles[i]]; + } + } + } + r = r.concat(tempR); + } + + for (i = 0; i < r.length; i++) { + var n = this.d[r[i]]; + + if (!n) { + if (d) { + console.warn('Node not found', r[i]); + } + continue; + } + + // repackage/-encrypt n for processing by the `p` API + var nn = {}; + + // copied folders receive a new random key + // copied files must retain their existing key + if (!n.t) { + nn.k = n.k; + } + + var cloned = false; + // check if renaming should be done + if (names && names[n.h]) { + n = clone(n); + cloned = true; + n.name = M.getSafeName(names[n.h]); + } + + // check it need to clear node attribute + if ($.clearCopyNodeAttr) { + delete n.lbl; + delete n.fav; + } + + // regardless to where the copy is remove rr + if (n.rr) { + if (!cloned) { + n = clone(n); + } + delete n.rr; + } + + // new node inherits all attributes + nn.a = ab_to_base64(crypto_makeattr(n, nn)); + + // new node inherits handle, parent and type + nn.h = n.h; + nn.p = n.p; + nn.t = n.t; + + if (presevedParents && presevedParents[n.h]) { + nn.newTarget = presevedParents[n.h]; + } + // remove parent unless child + for (j = 0; j < handles.length; j++) { + if (handles[j] === nn.h) { + delete nn.p; + break; + } + } + + // count total size + if (!n.t) { + opSize += n.s || 0; + } + + a.push(nn); + } + + a.opSize = opSize; + + return a; +}; + +/** + * Get all parent nodes having a u_sharekey + * + * @param {String} h Node handle + * @param {Object} [root] output object to get the path root + * @returns {MegaPromise} + */ +MegaData.prototype.getShareNodes = async function fm_getsharenodes(h, root) { + 'use strict'; + if (!this.d[h]) { + await dbfetch.acquire(h); + } + const out = root || {}; + const sharenodes = this.getShareNodesSync(h, out); + return {sharenodes, root: out.handle}; +}; + +/** + * Get all parent nodes having a u_sharekey + * + * @param {String} h Node handle + * @param {Object} [root] output object to get the path root + * @returns {Array} + */ +MegaData.prototype.getShareNodesSync = function fm_getsharenodessync(h, root) { + var sn = []; + var n = this.d[h]; + + while (n && n.p) { + if (u_sharekeys[n.h]) { + sn.push(n.h); + } + n = this.d[n.p]; + } + + if (root) { + root.handle = n && n.h; + } + + return sn; +}; + +/** + * Retrieve a list of recent nodes + * @param {Number} [limit] Limit the returned results, defaults to last 10000 nodes. + * @param {Number} [until] Get nodes not older than this unix timestamp, defaults to nodes from past month. + * @return {Promise} + */ +MegaData.prototype.getRecentNodes = function(limit, until) { + 'use strict'; + console.time("recents:collectNodes"); + + return new Promise(function(resolve) { + var rubTree = M.getTreeHandles(M.RubbishID); + var rubFilter = function(n) { + return rubTree.indexOf(n.p) < 0; + }; + var getLocalNodes = function() { + rubTree = rubFilter.tree; + var nodes = Object.values(M.d) + .filter(function(n) { + return !n.t && n.ts > until && rubFilter(n); + }); + + resolve(nodes, limit); + }; + rubFilter.tree = rubTree; + limit = limit | 0 || 1e4; + until = until || Math.round((Date.now() - 7776e6) / 1e3); + + if (fmdb) { + rubTree = rubTree.map(function(h) { + return fmdb.toStore(h); + }); + var binRubFilter = function(n) { + for (var i = rubTree.length; i--;) { + if (!indexedDB.cmp(rubTree[i], n.p)) { + return false; + } + } + return true; + }; + var dbRubFilter = FMDB.$useBinaryKeys ? binRubFilter : rubFilter; + var options = { + limit: limit, + + query: function(db) { + return db.orderBy('t').reverse().filter(dbRubFilter) + .until(function(row) { + return until > row.t; + }); + }, + include: function(row) { + return row.t > until; + } + }; + fmdb.getbykey('f', options) + .then((nodes) => { + if (nodes.length) { + const sort = M.getSortByDateTimeFn(); + nodes = nodes.filter(n => !n.fv).sort((a, b) => sort(a, b, -1)); + console.timeEnd("recents:collectNodes"); + resolve(limit ? nodes.slice(0, limit) : nodes); + resolve = null; + } + }) + .finally(() => { + if (resolve) { + getLocalNodes(); + } + }); + } + else { + getLocalNodes(); + } + }); +}; + +/** + * Get Recent Actions + * @param {Number} [limit] Limit the returned nodes in the interactions results, defaults to last 10000 nodes. + * @param {Number} [until] Get nodes not older than this unix timestamp, defaults to nodes from past month. + * @return {Promise} + */ +MegaData.prototype.getRecentActionsList = function(limit, until) { + 'use strict'; + + var tree = Object.assign.apply(null, [{}].concat(Object.values(M.tree))); + + // Get date from timestamp with Today & Yesterday titles. + var getDate = function(ts) { + var today = moment().startOf('day'); + var yesterday = today.clone().subtract(1, 'days'); + var format = {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'}; + + getDate = function(ts) { + var date = moment(ts * 1e3); + return date.isSame(today, 'd') + ? l[1301] + : date.isSame(yesterday, 'd') + ? l[1302] + : time2date(ts, 4); + }; + return getDate(ts); + }; + + // Sort array of objects by ts, most recent first. + var byTimeDesc = function(a, b) { + if (a.ts === b.ts) { + return 0; + } + return a.ts > b.ts ? -1 : 1; + }; + + // Create a new action object based off first node in group. + var newActionBucket = function(n, actionType, blockType) { + var b = []; + b.ts = n.ts; + b.date = getDate(b.ts); + b.path = []; + b.user = n.u; + b.action = actionType; + b.type = blockType; + var p = n.p; + + while (tree[p]) { + var t = tree[p]; + p = t.p; + b.path.push({ + name: t.h === M.RootID ? l[164] : t.name || t.h, + h: t.h, + pathPart: true + }); + if (t.t & M.IS_SHARED) { + b.outshare = true; + } + if (t.su && !tree[p]) { + b.path.push({ + name: l[5542], + h: 'shares', + pathPart: true + }); + b.inshare = true; + } + } + return b; + }; + + return new Promise(function(resolve, reject) { + M.getRecentNodes(limit, until).then(function(nodes) { + console.time("recents:collateActions"); + nodes.sort(byTimeDesc); + + // Index is used for finding correct bucket for node. + var index = {}; + + // Action list to return to caller. + var recentActions = []; + recentActions.nodeCount = nodes.length; + + // Radix sort nodes into buckets. + for (var i = 0; i < nodes.length; i++) { + var n = new MegaNode(nodes[i]); + var actionType = n.tvf ? "updated" : "added"; + var blockType = is_image2(n) || is_video(n) === 1 ? 'media' : 'files'; + index[n.u] = index[n.u] || Object.create(null); + index[n.u][n.p] = index[n.u][n.p] || Object.create(null); + index[n.u][n.p][actionType] = index[n.u][n.p][actionType] || Object.create(null); + index[n.u][n.p][actionType][blockType] = index[n.u][n.p][actionType][blockType] || { endts: 0 }; + + // Split nodes into groups based on time separation. + var bucket = index[n.u][n.p][actionType][blockType]; + if (bucket.endts === 0 || n.ts < bucket.endts) { + bucket.endts = n.ts - 21600; // 6 Hours + bucket.group = newActionBucket(n, actionType, blockType); + recentActions.push(bucket.group); + } + + // Populate node properties. + n.recent = true; + delete n.ar; + + // Add node to bucket. + bucket.group.push(n); + } + + console.timeEnd("recents:collateActions"); + M.recentActions = recentActions; + resolve(recentActions); + }).catch(reject); + }); +}; + +/** + * Retrieve all folders hierarchy starting from provided handle + * @param {String} h The root node handle + * @return {Array} node handles + */ +MegaData.prototype.getTreeHandles = function _(h) { + 'use strict'; + + var result = [h]; + var tree = Object.keys(M.tree[h] || {}); + + for (var i = tree.length; i--;) { + result.push.apply(result, _(tree[i])); + } + + return result; +}; + +/** + * Retrieve node rights. + * @details Former rightsById() + * @param {String} id The node handle + * @returns {Number} 0: read-only, 1: read-and-write, 2: full-access + */ +MegaData.prototype.getNodeRights = function(id) { + "use strict"; + + if (this.isDynPage(id)) { + return this.dynContentLoader[id].options.rights | 0; + } + + if (folderlink || !id || id.length !== 8) { + return false; + } + + while (this.d[id] && this.d[id].p) { + if (this.d[id].r >= 0) { + if (missingkeys[id]) { + return 0; + } + return this.d[id].r; + } + id = this.d[id].p; + } + + return 2; +}; + +/** + * Retrieve the root node handle. + * @details Former RootbyId() + * @param {String} id The node handle. + */ +MegaData.prototype.getNodeRoot = function(id) { + "use strict"; + if (id === 'recents') { + return id; + } + if (id) { + id = id.replace('chat/', ''); + } + var p = this.getPath(id); + return p[p.length - 1]; +}; + +/** + * Check whether a node is in the root + * @param {MegaNode|Object} n ufs-node, or raw node object. + * @param {Boolean} [any] in any root, or just RootID. + * @returns {Boolean|Number} value + */ +MegaData.prototype.isInRoot = function(n, any) { + 'use strict'; + + if (n.t > 1 && n.t < 5) { + // It's a root node itself. + return -1; + } + + return n.p && n.p.length === 8 && (n.p === this.RootID || any && (n.p === this.InboxID || n.p === this.RubbishID)); +}; + +// returns true if h1 cannot be moved into h2 without creating circular linkage, false otherwise +MegaData.prototype.isCircular = function(h1, h2) { + "use strict"; + + if (this.d[h1] && this.d[h1].p === h2) { + return true; + } + + for (; ;) { + if (h1 === h2) { + return true; + } + + if (!this.d[h2]) { + return false; + } + + h2 = this.d[h2].p; + } +}; + +/** + * Can be used to be passed to ['nodeId', {nodeObj}].every(...). + * + * @param element + * @param index + * @param array + * @returns {boolean} + * @private + */ +MegaData.prototype._everyTypeFile = function(element, index, array) { + var node = this.getNode(element); + return node && node.t === 0; +}; + +/** + * Can be used to be passed to ['nodeId', {nodeObj}].every(...). + * + * @param element + * @param index + * @param array + * @returns {boolean} + * @private + */ +MegaData.prototype._everyTypeFolder = function(element, index, array) { + var node = this.getNode(element); + return node && node.t; +}; + +/** + * Will return true/false if the passed node Id/node object/array of nodeids or objects is/are all files. + * + * @param nodesId {String|Object|Array} + * @returns {boolean} + */ +MegaData.prototype.isFile = function(nodesId) { + var nodes = nodesId; + if (!Array.isArray(nodesId)) { + nodes = [nodesId]; + } + + return nodes.every(this._everyTypeFile.bind(this)); +}; + +/** + * Will return true/false if the passed node Id/node object/array of nodeids or objects is/are all folders. + * + * @param nodesId {String|Object|Array} + * @returns {boolean} + */ +MegaData.prototype.isFolder = function(nodesId) { + var nodes = nodesId; + if (!Array.isArray(nodesId)) { + nodes = [nodesId]; + } + + return nodes.every(this._everyTypeFolder.bind(this)); +}; + +/** + * Create new folder on the cloud + * @param {String} target The handle where the folder will be created. + * @param {String|Array} name Either a string with the folder name to create, or an array of them. + * @return {Promise} the handle of the deeper created folder. + */ +MegaData.prototype.createFolder = promisify(function(resolve, reject, target, name) { + "use strict"; + var self = this; + var inflight = self.cfInflightR; + + target = String(target || M.RootID); + + // Prevent unneeded API calls if target is not a valid handle + if (target.length !== 8 && target.length !== 11) { + return reject(EACCESS); + } + + if (Array.isArray(name)) { + name = name.map(String.trim).filter(String).slice(0); + + if (name.length) { + // Iterate through the array of folder names, creating one at a time + (function next(target, folderName) { + self.createFolder(target, folderName) + .then(function(folderHandle) { + if (name.length) { + next(folderHandle, name.shift()); + } + else { + resolve(folderHandle); + } + }) + .catch(reject); + })(target, name.shift()); + return; + } + + name = null; + } + + if (!name) { + return resolve(target); + } + + if (!inflight[target]) { + inflight[target] = Object.create(null); + } + if (!inflight[target][name]) { + inflight[target][name] = []; + } + + if (inflight[target][name].push([resolve, reject]) > 1) { + if (d) { + console.debug('deduplicated folder creation attempt on %s for "%s"...', target, name); + } + return; + } + + var _dispatch = function(idx, result) { + var queue = inflight[target][name]; + + delete inflight[target][name]; + if (!$.len(inflight[target])) { + delete inflight[target]; + } + + for (var i = 0; i < queue.length; i++) { + queue[i][idx](result); + } + }; + reject = _dispatch.bind(null, 1); + resolve = _dispatch.bind(null, 0); + + var _done = function cfDone() { + + if (M.c[target]) { + // Check if a folder with the same name already exists. + for (var handle in M.c[target]) { + if (M.d[handle] && M.d[handle].t && M.d[handle].name === name) { + return resolve(M.d[handle].h); + } + } + } + + var n = {name: name}; + var attr = ab_to_base64(crypto_makeattr(n)); + var key = a32_to_base64(encrypt_key(u_k_aes, n.k)); + var req = {a: 'p', t: target, n: [{h: 'xxxxxxxx', t: 1, a: attr, k: key}], i: requesti}; + var sn = M.getShareNodesSync(target); + + if (sn.length) { + req.cr = crypto_makecr([n], sn, false); + req.cr[1][0] = 'xxxxxxxx'; + } + + api_req(req, { + callback: function(res) { + if (d > 1) { + console.log('Create folder result...', res); + } + if (res && typeof res === 'object') { + // Let's be paranoid ensuring we got a proper result + // since this could trash the whole ufs-size-cache.. + var n = Array.isArray(res.f) && res.f[0]; + + if (typeof n !== 'object' || typeof n.h !== 'string' || n.h.length !== 8) { + return reject(EINTERNAL); + } + + newnodes = newnodes || []; + + // this is only safe once sn enforcement has been deployed + M.addNode(n); + ufsc.addNode(n); + + if (!M._cfUIUpdateQ) { + M._cfUIUpdateQ = []; + } + M._cfUIUpdateQ.push([resolve, n.h]); + + delay('createfolder:ui-update', function() { + $('.fm-new-folder').removeClass('active'); + $('.create-new-folder').addClass('hidden'); + $('.create-new-folder input').val(''); + + M.updFileManagerUI().always(function() { + if ($.copyDialog || $.moveDialog || $.selectFolderDialog || $.saveAsDialog) { + refreshDialogContent(); + } + + for (var i = M._cfUIUpdateQ.length; i--;) { + var q = M._cfUIUpdateQ[i]; + q[0](q[1]); + } + delete M._cfUIUpdateQ; + }); + }); + } + else { + reject(res); + } + } + }); + }; + + if (M.c[target]) { + _done(); + } + else { + dbfetch.get(target).always(_done); + } +}); + +/** + * Create new folder on the cloud + * @param {Object} paths Object containing folders on keys, node handles will be filled as their values + * @param {String} target Node handle where the paths will be created + * @return {MegaPromise} + */ +MegaData.prototype.createFolders = promisify(function(resolve, reject, paths, target) { + 'use strict'; + const kind = Symbol('~\\:'); + const logger = d && MegaLogger.getLogger('mkdir', false, this.logger); + + // paths walker to create hierarchy + var walk = function(paths, s) { + var p = paths.shift(); + + if (p) { + s = walk(paths, s[p] = s[p] || Object.create(null)); + } + return s; + }; + + var struct = Object.create(null); + var folders = Object.keys(paths); + + // create paths hierarchy + for (var i = folders.length; i--;) { + var path = folders[i]; + + Object.defineProperty(walk(M.getSafePath(path), struct), kind, {value: path}); + } + folders = folders.length; + + (function _mkdir(s, t) { + if (d > 1) { + logger.debug('mkdir under %s (%s) for...', t, M.getNodeByHandle(t).name, s); + } + Object.keys(s).forEach(function(name) { + M.createFolder(t, name).always(function(res) { + if (res.length !== 8) { + if (d) { + const err = 'Failed to create folder "%s" on target %s(%s)'; + logger.warn(err, name, t, M.getNodeByHandle(t).name, res); + } + return reject(res); + } + + var c = s[name]; // children for the just created folder + + if (c[kind]) { + if (d) { + console.assert(paths[c[kind]] === null, 'Hmm... check this...'); + } + + // record created folder node handle + paths[c[kind]] = res; + folders--; + } + + if (d > 1) { + logger.debug('folder "%s" got handle %s on %s (%s)', name, res, t, M.getNodeByHandle(t).name); + } + + onIdle(_mkdir.bind(null, c, res)); + }); + }); + + if (!folders) { + if (d) { + logger.info('Operation completed.', paths); + } + resolve(paths); + } + })(struct, target); +}); + +// leave incoming share h +// FIXME: implement sn tagging to prevent race condition +MegaData.prototype.leaveShare = promisify(function(resolve, reject, h) { + "use strict"; + + if (d) { + console.log('leaveShare', h); + } + + // leaving inner nested shares is not allowed: walk to the share root + while (this.d[h] && this.d[this.d[h].p]) { + h = this.d[h].p; + } + + if (this.d[h] && this.d[h].su) { + loadingDialog.show(); + + const idtag = mRandomToken('ls'); + M.req({a: 'd', n: h, i: idtag}) + .then(nop) + .catch(ex => { + if (d) { + console.warn('leaveShare', h, ex); + } + delete this.scAckQueue[idtag]; + loadingDialog.hide(); + reject(ex); + }); + + this.scAckQueue[idtag] = function() { + loadingDialog.hide(); + resolve(h); + }; + } + else { + if (d) { + console.warn('Cannot leaveShare', h); + } + reject(ENOENT); + } +}); + +MegaData.prototype.createPublicLink = promisify(function(resolve, reject, handle) { + 'use strict'; + + dbfetch.get(handle).then(function() { + return M.getNodeShare(handle).h === handle || !M.d[handle].t || M.getNodes(handle, 1); + }).then(function(nodes) { + return Array.isArray(nodes) ? api_setshare(handle, [{u: 'EXP', r: 0}], nodes) : {r: [0]}; + }).then(function(res) { + return M.d[handle].ph || res.r && res.r[0] === 0 && M.req({a: 'l', i: requesti, n: handle}); + }).then(function(ph) { + if (!ph || typeof ph !== 'string') { + return reject(EFAILED); + } + var n = M.getNodeByHandle(handle); + if (n.ph !== ph) { + M.nodeShare(handle, {h: handle, r: 0, u: 'EXP', ts: unixtime(), ph: ph}); + n.ph = ph; + M.nodeUpdated(n); + } + var res = { + n: n, + ph: ph, + key: n.t ? u_sharekeys[n.h][0] : n.k + }; + if (mega.flags.nlfe) { + res.link = getBaseUrl() + '/' + (n.t ? 'folder' : 'file') + '/' + res.ph + '#' + a32_to_base64(res.key); + } + else { + res.link = getBaseUrl() + '/#' + (n.t ? 'F' : '') + '!' + res.ph + '!' + a32_to_base64(res.key); + } + resolve(res); + }).catch(reject); +}); + +/** + * Retrieve node share. + * @param {String|Object} node cloud node or handle + * @param {String} [user] The user's handle + * @return {Object} the share object, or false if not found. + */ +MegaData.prototype.getNodeShare = function(node, user) { + "use strict"; + + user = user || 'EXP'; + + if (typeof node !== 'object') { + node = this.getNodeByHandle(node); + } + + if (node && node.shares && user in node.shares) { + return node.shares[user]; + } + + return false; +}; + +/** + * Retrieve all users a node is being shared with + * @param {Object} node The ufs-node + * @param {String} exclude A list of users to exclude + * @return {Array} users list + */ +MegaData.prototype.getNodeShareUsers = function(node, exclude) { + "use strict"; + + var result = []; + + if (typeof node !== 'object') { + node = this.getNodeByHandle(node); + } + + if (node && node.shares) { + var users = Object.keys(node.shares); + + if (exclude) { + if (!Array.isArray(exclude)) { + exclude = [exclude]; + } + + users = users.filter(function(user) { + return exclude.indexOf(user) === -1; + }); + } + + result = users; + } + + return result; +}; + +/** + * Collect users to whom nodes are being shared. + * @param {Array} nodes An array of nodes, or handles + * @param {Boolean} [userobj] Whether return user-objects of just their handles + * @returns {Array} an array of user-handles/objects + */ +MegaData.prototype.getSharingUsers = function(nodes, userobj) { + "use strict"; + + var users = []; + + if (!Array.isArray(nodes)) { + nodes = [nodes]; + } + + for (var i = nodes.length; i--;) { + var node = nodes[i] || false; + + // It's a handle? + if (typeof node === 'string') { + node = this.getNodeByHandle(node); + } + + // outbound shares + if (node.shares) { + users = users.concat(this.getNodeShareUsers(node, 'EXP')); + } + + // inbound shares + if (node.su) { + users.push(node.su); + } + + // outbound pending shares + if (this.ps[node.h]) { + users = users.concat(Object.keys(this.ps[node.h])); + } + } + + users = array.unique(users); + + if (userobj) { + users = users.map(function(h) { + return M.getUserByHandle(h); + }); + } + + return users; +}; + +/** @function MegaData.prototype.nodeShare */ +lazy(MegaData.prototype, 'nodeShare', () => { + 'use strict'; + let lock = false; + let inflight = new Map(); + const tick = Promise.resolve(); + const debug = d > 0 ? console.debug.bind(console, '[mdNodeShare]') : nop; + + const setNodeShare = tryCatch((h, s, ignoreDB) => { + const n = M.d[h]; + if (!n || !s) { + if (d && s) { + debug(`Node ${h} not found.`, s, ignoreDB); + } + return; + } + debug(`Establishing node-share for ${h}`, s, [n]); + + if (typeof n.shares === 'undefined') { + n.shares = Object.create(null); + } + n.shares[s.u] = s; + + // Maintain special outgoing shares index by user + if (!M.su[s.u]) { + M.su[s.u] = Object.create(null); + } + M.su[s.u][h] = 1; + + if (n.t) { + // update tree node flags + ufsc.addTreeNode(n); + } + else if (n.fa && s.u === 'EXP' && s.down) { + debug('cleaning fa for taken-down node...', n.fa, [n], s); + if (thumbnails.has(n.fa)) { + thumbnails.replace(n.h, null); + } + delete n.fa; + M.nodeUpdated(n); + } + + if (fmdb && !ignoreDB && !pfkey) { + fmdb.add('s', { o_t: h + '*' + s.u, d: s }); + + if (u_sharekeys[h]) { + fmdb.add('ok', { + h: h, + d: { + k: a32_to_base64(encrypt_key(u_k_aes, u_sharekeys[h][0])), + ha: crypto_handleauth(h) + } + }); + } + else if (d && !M.getNodeShare(h)) { + console.warn(`No share key for node ${h}`, n); + } + } + + if (fminitialized) { + sharedUInode(h); + } + }); + + return async function mdNodeShare(h, s, ignoreDB) { + if (this.d[h]) { + return setNodeShare(h, s, ignoreDB); + } + + if (inflight.has(h)) { + inflight.get(h).push([h, s, ignoreDB]); + } + else { + inflight.set(h, [[h, s, ignoreDB]]); + } + + // wait for concurrent calls within the same tick. + await tick; + + debug('acquiring lock....', h); + + // too fancy for eslint?.. + // eslint-disable-next-line no-unmodified-loop-condition + while (lock) { + await tSleep(1); + } + + // dispatch inflight entries - FIFO + if (inflight.size) { + lock = true; + + let q = inflight; + inflight = new Map(); + + await dbfetch.acquire([...q.keys()]); + + q = [...q.values()].flat(); + for (let i = q.length; i--;) { + setNodeShare(...q[i]); + } + + // We're done, release the lock for the awaiting callers + lock = false; + } + }; +}); + +/** + * Remove outbound share. + * @param {String} h Node handle. + * @param {String} u User handle to remove the associated share + * @param {Boolean} okd Whether API notified the node is no longer + * shared with anybody else and therefore the + * owner share key must be removed too. + */ +MegaData.prototype.delNodeShare = function(h, u, okd) { + "use strict"; + + if (this.d[h] && typeof this.d[h].shares !== 'undefined') { + var updnode; + + if (this.su[u]) { + delete this.su[u][h]; + } + + if (fmdb) { + fmdb.del('s', h + '*' + u); + } + + api_updfkey(h); + delete this.d[h].shares[u]; + + if (u === 'EXP' && this.d[h].ph) { + delete this.d[h].ph; + + if (fmdb) { + fmdb.del('ph', h); + } + + updnode = true; + } + + var a; + for (var i in this.d[h].shares) { + + // If there is only public link in shares, and deletion is not target public link. + if (i === 'EXP' && Object.keys(this.d[h].shares).length === 1 && u !== 'EXP') { + updnode = true; + } + + if (this.d[h].shares[i]) { + a = true; + break; + } + } + + if (!a) { + delete this.d[h].shares; + updnode = true; + } + + if (updnode) { + this.nodeUpdated(this.d[h]); + + if (fminitialized) { + sharedUInode(h); + } + } + } + + if (okd) { + // The node is no longer shared with anybody, ensure it's properly cleared.. + var users = this.getNodeShareUsers(h, 'EXP'); + + if (users.length) { + console.warn('The node ' + h + ' still has shares on it!', users); + + users.forEach(function(user) { + M.delNodeShare(h, user); + }); + } + + if (fmdb) { + fmdb.del('ok', h); + } + mega.keyMgr.deleteShares([h]).catch(dump); + } +}; + + +/** + * Retrieve an user object by its handle + * @param {String} handle The user's handle + * @return {Object} The user object, of false if not found + */ +MegaData.prototype.getUserByHandle = function(handle) { + "use strict"; + + var user = false; + + if (Object(this.u).hasOwnProperty(handle)) { + user = this.u[handle]; + + if (user instanceof MegaDataObject) { + user = user._data; + } + } + else if (this.opc[handle]) { + user = this.opc[handle]; + } + else if (this.ipc[handle]) { + user = this.ipc[handle]; + } + + if (!user && handle === u_handle) { + user = u_attr; + } + + return user; +}; + +/** + * Retrieve an user object by its email + * @param {String} email The user's handle + * @return {Object} The user object, of false if not found + */ +MegaData.prototype.getUserByEmail = function(email) { + var user = false; + + M.u.every(function(contact, u) { + if (M.u[u].m === email) { + // Found the user object + user = M.u[u]; + + if (user instanceof MegaDataObject) { + user = user._data; + } + return false; + } + return true; + }); + + return user; +}; + +/** + * Retrieve an user object + * @param {String} str An email or handle + * @return {Object} The user object, of false if not found + */ +MegaData.prototype.getUser = function(str) { + "use strict"; + + var user = false; + + if (typeof str !== 'string') { + // Check if it's an user object already.. + + if (Object(str).hasOwnProperty('u')) { + // Yup, likely.. let's see + user = this.getUserByHandle(str.u); + } + } + else if (str.length === 11) { + // It's an user handle + user = this.getUserByHandle(str); + } + else if (str.indexOf('@') > 0) { + // It's an email.. + user = this.getUserByEmail(str); + } + + return user; +}; + +/** + * Retrieve the name of an user or ufs node by its handle + * @param {String} handle The handle + * @return {String} the name, of an empty string if not found + */ +MegaData.prototype.getNameByHandle = function(handle) { + "use strict"; + + var result = ''; + + handle = String(handle); + + if (handle.length === 11) { + var user = this.getUserByHandle(handle); + + // If user exists locally, use Nickname or FirstName LastName or fallback to email + if (user) { + result = nicknames.getNickname(handle) || user.m; + } + else if (window.megaChatIsReady && megaChat.chats[handle]) { + var chat = megaChat.chats[handle]; + result = chat.topic; + if (!result) { + var members = Object.keys(chat.members || {}); + array.remove(members, u_handle); + result = members.map(function(h) { + user = M.getUserByHandle(h); + return user ? user.name && $.trim(user.name) || user.m : h; + }).join(', '); + } + } + } + else if (handle.length === 8) { + var node = this.getNodeByHandle(handle); + + if (node) { + result = node.name || ''; + } + } + + return String(result); +}; + +/** + * Retrieve an ufs node by its handle + * @param {String} handle The node's handle + * @return {Object} The node object, of false if not found + */ +MegaData.prototype.getNodeByHandle = function(handle) { + "use strict"; + + if (this.d[handle]) { + return this.d[handle]; + } + + if (this.chd[handle]) { + return this.chd[handle]; + } + + for (var i = this.v.length; i--;) { + if (this.v[i].h === handle) { + return this.v[i]; + } + } + + return false; +}; + +/** + * Retrieve the parent of an ufs node + * @param {String|Object} node The node or its handle + * @return {Object} The parent handle, of false if not found + */ +MegaData.prototype.getNodeParent = function(node) { + "use strict"; + + if (typeof node === 'string') { + node = this.getNodeByHandle(node); + } + + if (node && node.su) { + // This might be a nested inshare, only return the parent as long it does exists. + return this.d[node.p] ? node.p : 'shares'; + } + + return node && node.p || false; +}; + +/** + * Refresh UI on node removal. + * @param {String} handle The ufs-node's handle. + * @param {String} [parent] this node's parent. + */ +MegaData.prototype.nodeRemovalUIRefresh = function(handle, parent) { + 'use strict'; + const n = this.getNodeByHandle(handle); + const customView = this.currentCustomView; + const currentDir = customView && customView.nodeID || this.currentdirid; + + if (n.t && (currentDir === n.h || this.isCircular(n.h, currentDir))) { + // If the node being removed is a folder, get out of it to the nearest available parent + const root = this.getNodeRoot(parent || n.h); + const path = this.getPath(parent || this.getNodeParent(n) || root); + + // Mark this node as pending to prevent going to the Rubbish meanwhile parsing action-packets.. + this.nodeRemovalUIRefresh.pending = n.h; + + delay('openfolder', () => { + let target = null; + let promise = Promise.resolve(); + + for (let i = 0; i < path.length; ++i) { + const n = this.getNodeByHandle(path[i]); + if (n && this.getNodeRoot(n.h) !== this.RubbishID) { + target = path[i]; + break; + } + } + + if (d) { + console.debug('nodeRemovalUIRefresh(%s)', handle, target, path); + } + + if (target && this.getNodeRoot(handle) !== root) { + if (customView) { + target = target === this.RootID ? customView.type : customView.prefixPath + target; + } + promise = this.openFolder(target); + } + + this.nodeRemovalUIRefresh.pending = null; + delay('redraw-tree', () => promise.then(() => this.redrawTree())); + }, 90); + } +}; + +/** + * Retrieve media properties for a file node. + * @param {MegaNode|String} node An ufs node or handle + * @return {Object} Media properties. + */ +MegaData.prototype.getMediaProperties = function(node) { + 'use strict'; + node = typeof node === 'string' ? this.getNodeByHandle(node) : node; + + if (this.getNodeShare(node).down) { + // File is taken down. + return {icon: fileIcon(node)}; + } + + var isText = false; + var isImage = is_image2(node); + var mediaType = is_video(node); + var isVideo = mediaType > 0; + var isAudio = mediaType > 1; + var isPreviewable = isImage || isVideo; + + if (!isPreviewable && is_text(node)) { + isText = isPreviewable = true; + } + + return { + isText: isText, + isImage: isImage, + isVideo: isVideo, + isAudio: isAudio, + icon: fileIcon(node), + isPreviewable: isPreviewable, + showThumbnail: String(node.fa).indexOf(':1*') > 0 + }; +}; + +/** + * Preview a node in-browser. + * @param {MegaNode|String} node An ufs node or handle + * @return {Boolean} whether it was shown. + */ +MegaData.prototype.viewMediaFile = function(node) { + 'use strict'; + node = typeof node === 'string' ? this.getNodeByHandle(node) : node; + var prop = M.getMediaProperties(node); + var handle = node.ch || node.h; + var result = true; + + console.assert(prop.isPreviewable, 'This is not viewable..'); + + if (prop.isText) { + loadingDialog.show(); + mega.fileTextEditor.getFile(handle) + .then(function(data) { + loadingDialog.hide(); + mega.textEditorUI.setupEditor(node.name, data, handle, true); + }) + .catch(function(ex) { + console.warn(ex); + loadingDialog.hide(); + }); + } + else if (typeof slideshow === 'function') { + if (prop.isVideo) { + $.autoplay = node.h; + } + slideshow(handle, 0, true); + } + else { + console.assert(is_mobile, 'Where are we?...'); + result = false; + } + + return result; +}; + +/** + * Retrieve dashboard statistics data + */ +MegaData.prototype.getDashboardData = function() { + "use strict"; + + var res = Object.create(null); + var s = this.account.stats; + + res.files = { + cnt: s[this.RootID].files - s[this.RootID].vfiles, + size: s[this.RootID].bytes - s[this.RootID].vbytes + }; + res.folders = { cnt: s[this.RootID].folders, size: s[this.RootID].fsize }; + res.rubbish = { cnt: s[this.RubbishID].files, size: s[this.RubbishID].bytes }; + res.ishares = { cnt: s.inshares.items, size: s.inshares.bytes, xfiles: s.inshares.files }; + res.oshares = { cnt: s.outshares.items, size: s.outshares.bytes }; + + res.backups = { + cnt: this.d[this.BackupsId] ? this.d[this.BackupsId].td : 0, + size: this.d[this.BackupsId] ? this.d[this.BackupsId].tb : 0, + xfiles: this.d[this.BackupsId] ? this.d[this.BackupsId].tf : 0 + }; + res.links = { cnt: s.links.folders, size: s.links.bytes, xfiles: s.links.files }; + res.versions = { cnt: s[this.RootID].vfiles, size: s[this.RootID].vbytes }; + + return res; +}; + +/** + * Check whether an object is a file node + * @param {String} n The object to check + * @return {Boolean} + */ +MegaData.prototype.isFileNode = function(n) { + "use strict"; + + return crypto_keyok(n) && !n.t; +}; + +/** + * called when user try to remove pending contact from shared dialog + * should be changed case M.ps structure is changed, take a look at processPS() + * + * @param {string} nodeHandle + * @param {string} pendingContactId + * + * + */ +MegaData.prototype.deletePendingShare = function(nodeHandle, pendingContactId) { + "use strict"; + + if (this.d[nodeHandle]) { + + if (this.ps[nodeHandle] && this.ps[nodeHandle][pendingContactId]) { + this.delPS(pendingContactId, nodeHandle); + + if (this.ps[nodeHandle] === undefined && + (this.d[nodeHandle].shares === undefined || + ('EXP' in this.d[nodeHandle].shares && Object.keys(this.d[nodeHandle].shares).length === 1))) { + this.nodeUpdated(M.d[nodeHandle]); + } + } + } +}; + +MegaData.prototype.emptySharefolderUI = tryCatch(function(lSel) { + "use strict"; + + const contentBlock = document.querySelector('.shared-folder-content'); + let selectedView = null; + let emptyBlock = null; + let clonedEmptyBlock = null; + + if (!contentBlock) { + return; + } + + selectedView = contentBlock.querySelector(lSel || this.fsViewSel); + emptyBlock = contentBlock.querySelector('.fm-empty-sharef'); + + if (!selectedView || emptyBlock) { + return; + } + + clonedEmptyBlock = document.querySelector('.fm-empty-folder').cloneNode(true); + clonedEmptyBlock.classList.remove('hidden'); + clonedEmptyBlock.classList.add('fm-empty-sharef'); + + selectedView.classList.add('hidden'); + selectedView.parentNode.insertBefore(clonedEmptyBlock, selectedView); + contentBlock.classList.remove('hidden'); + + $.tresizer(); +}); + + +/** + * M.disableCircularTargets + * + * Disable parent tree DOM element and all children. + * @param {String} pref, id prefix i.e. { #fi_, #mctreea_ } + */ +MegaData.prototype.disableCircularTargets = function disableCircularTargets(pref) { + "use strict"; + + var nodes = $.selected || []; + + for (var s = nodes.length; s--;) { + var handle = nodes[s]; + var node = M.d[handle]; + + if (node) { + $(pref + handle).addClass('disabled'); + + if (node.p) { + // Disable parent dir + $(pref + node.p).addClass('disabled'); + + // Disable moving to rubbish from rubbish + if (M.getNodeRoot(handle) === M.RubbishID) { + $(pref + M.RubbishID).addClass('disabled'); + } + } + else if (d && node.t < 2 && (node.h !== M.RootID /*folderlink*/)) { + console.error('M.disableCircularTargets: parent-less node!', handle, pref); + } + } + else if (d > 1 || this.currentdirid !== 'recents') { + console.warn('[disableCircularTargets] Node %s%s not found.', pref, handle); + } + + // Disable all children folders + this.disableDescendantFolders(handle, pref); + } +}; + +/** + * Disable descendant folders + * @param {String} id The node handle + * @param {String} pref, id prefix i.e. { #fi_, #mctreea_ } + */ +MegaData.prototype.disableDescendantFolders = function(id, pref) { + 'use strict'; + + if (this.tree[id]) { + var folders = Object.values(this.tree[id]); + + for (var i = folders.length; i--;) { + var h = folders[i].h; + + if (this.tree[h]) { + this.disableDescendantFolders(h, pref); + } + $(pref + h).addClass('disabled'); + } + } +}; + +/** + * Import welcome pdf into the current account. + * @returns {MegaPromise} + */ +MegaData.prototype.importWelcomePDF = function() { + 'use strict'; + var promise = new MegaPromise(); + + M.req('wpdf').always(function(res) { + if (typeof res === 'object') { + var ph = res.ph; + var key = res.k; + M.req({a: 'g', p: ph}).always(function(res) { + if (typeof res.at === 'string') { + // No need to wait for FileManager to be ready, and no need to check anything + // This method is ONLY called when the initial ephemral account is created + if (d) { + console.log('Importing Welcome PDF (%s)', ph, res.at); + } + promise.linkDoneAndFailTo(M.importFileLink(ph, key, res.at)); + } + else { + promise.reject(res); + } + }); + } + else { + promise.reject(res); + } + }); + + return promise; +}; + +MegaData.prototype.bulkFileLinkImport = async function(data, target, verify) { + 'use strict'; + const req = {a: 'p', n: [], cr: [[], [], []]}; + let links = Object.create(null); + + String(data).replace(/(?:[!/]|^)([\w-]{8})[!#]([\w-]{43})\b/g, (x, ph, key) => { + links[ph] = [key, M.req({a: 'g', p: ph}).catch(nop)]; + }); + + // eslint-disable-next-line guard-for-in + for (const ph in links) { + let key = links[ph][0]; + let res = await links[ph][1]; + + if (res && res.at) { + key = base64_to_a32(key).slice(0, 8); + if (key.length === 8) { + const n = {a: res.at}; + crypto_procattr(n, key); + if (n.name) { + res = new MegaNode(Object.assign(res, n, {ph, h: ph, k: key})); + } + } + } + links[ph][1] = res; + } + + if (verify) { + [links, target] = await verify(links, target); + } + req.t = target = target || M.currentdirid; + + // eslint-disable-next-line guard-for-in + for (const ph in links) { + const n = links[ph][1]; + + if (n instanceof MegaNode) { + if (u_sharekeys[target]) { + req.cr[2].push(0, req.cr[2].length / 3, a32_to_base64(encrypt_key(u_sharekeys[target][1], n.k))); + } + req.n.push({ph, t: 0, a: n.at, fa: n.fa, ov: n.ov, k: a32_to_base64(encrypt_key(u_k_aes, n.k))}); + } + } + + if (req.cr[2].length) { + req.cr[0][0] = target; + } + else { + delete req.cr; + } + + console.info('bulkFileLinkImport', links, req); + + return Promise.resolve(M.req(req)); +}; + +/** + * Import file link + * @param {String} ph Public handle + * @param {String} key Node key + * @param {String} attr Node attributes + * @param {String} [srcNode] Prompt the user to choose a target for this source node... + * @returns {MegaPromise} + */ +MegaData.prototype.importFileLink = function importFileLink(ph, key, attr, srcNode) { + 'use strict'; + return new MegaPromise(function(resolve, reject) { + var req = {a: 'p'}; + var n = { + t: 0, + ph: ph, + a: attr, + k: a32_to_base64(encrypt_key(u_k_aes, base64_to_a32(key).slice(0, 8))) + }; + + var _import = function(target) { + req.n = [n]; + req.t = target; + api_req(req, { + callback: function(r) { + if (typeof r === 'object') { + $.onRenderNewSelectNode = r.f[0].h; + resolve(r.f[0].h); + } + else { + M.ulerror(null, r); + reject(r); + } + } + }); + }; + + if (srcNode) { + $.mcImport = true; + $.saveToDialogPromise = reject; + + // Remove original fav and lbl for new node. + delete srcNode.fav; + delete srcNode.lbl; + + n.a = ab_to_base64(crypto_makeattr(srcNode)); + + openSaveToDialog(srcNode, function(srcNode, target) { + M.getShareNodes(target).then(({sharenodes}) => { + const {name} = srcNode; + + fileconflict.check([srcNode], target, 'import').always(function(files) { + var file = files && files[0]; + + if (file) { + if (file._replaces) { + n.ov = file._replaces; + } + + if (file.fa) { + n.fa = file.fa; + } + + if (name !== file.name) { + n.a = ab_to_base64(crypto_makeattr(file)); + } + + if (sharenodes && sharenodes.length) { + req.cr = crypto_makecr([file], sharenodes, false); + } + + _import(target); + M.openFolder(target); + } + else { + reject(EBLOCKED); + } + }); + }).catch(reject); + }); + } + else { + _import(!folderlink && M.RootID ? M.RootID : undefined); + } + }); +}; + +/** + * Import folderlink nodes + * @param {Array} nodes The array of nodes to import + */ +MegaData.prototype.importFolderLinkNodes = function importFolderLinkNodes(nodes) { + "use strict"; + + var _import = function(data) { + M.onFileManagerReady(function() { + loadingDialog.hide('import'); + openCopyDialog(function() { + $.mcImport = true; + $.selected = data[0]; + $.onImportCopyNodes = data[1]; + $.onImportCopyNodes.opSize = data[2]; + + if (d) { + console.log('Importing Nodes...', $.selected, $.onImportCopyNodes, data[2]); + } + }); + }); + }; + + if (($.onImportCopyNodes || sessionStorage.folderLinkImport) && !folderlink) { + loadingDialog.show('import'); + if ($.onImportCopyNodes) { + _import($.onImportCopyNodes); + } + else { + var kv = MegaDexie.create(u_handle); + var key = `import.${sessionStorage.folderLinkImport}`; + + kv.get(key) + .then(function(data) { + _import(data); + kv.remove(key, true).dump(key); + }) + .catch(function(ex) { + if (d) { + console.error(ex); + } + loadingDialog.hide('import'); + kv.remove(key, true).dump(key); + msgDialog('warninga', l[135], l[47]); + }); + } + nodes = null; + delete sessionStorage.folderLinkImport; + } + + var sel = [].concat(nodes || []); + + if (sel.length) { + var FLRootID = M.RootID; + + mega.ui.showLoginRequiredDialog({ + title: l.login_signup_dlg_title, + textContent: l.login_signup_dlg_msg, + showRegister: true + }).then(() => { + loadingDialog.show(); + + tryCatch(() => { + sessionStorage.folderLinkImport = FLRootID; + })(); + + // It is import so need to clear existing attribute for new node. + $.clearCopyNodeAttr = true; + + return M.getCopyNodes(sel) + .then((nodes) => { + var data = [sel, nodes, nodes.opSize]; + var fallback = function() { + $.onImportCopyNodes = data; + loadSubPage('fm'); + }; + + if (!sessionStorage.folderLinkImport || nodes.length > 6000) { + fallback(); + } + else { + MegaDexie.create(u_handle) + .set('import.' + FLRootID, data) + .then(function() { + loadSubPage('fm'); + }) + .catch(function(ex) { + if (d) { + console.warn('Cannot import using indexedDB...', ex); + } + fallback(); + }); + } + }); + }).catch((ex) => { + // If no ex, it was canceled + if (ex) { + console.error(ex); + msgDialog('warninga', l[135], l[47], ex); + } + }).finally(() => { + delete $.clearCopyNodeAttr; + }); + } +}; + +/** + * Utility functions to handle 'My chat files' folder. + * @name myChatFilesFolder + * @memberOf MegaData + * @type {Object} + */ +lazy(MegaData.prototype, 'myChatFilesFolder', function() { + + 'use strict'; + + return mega.attr.getFolderFactory( + "cf", + false, + true, + 'h', + [l[20157], 'My chat files'], + base64urlencode, + base64urldecode + ).change(function(handle) { + + if (handle) { + const treeItem = document.querySelector(`[id="treea_${handle}"] .nw-fm-tree-folder`); + const fmItem = document.querySelector(`[id="${handle}"] .folder`); + + if (treeItem) { + treeItem.classList.add('chat-folder'); + } + + if (fmItem) { + fmItem.classList.add('folder-chat'); + } + } + }); +}); diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/D3598E86FE05C7286C828D6478CEEA3123163777 b/home/.surf/cache/WebKitCache/Version 16/Blobs/D3598E86FE05C7286C828D6478CEEA3123163777 new file mode 100644 index 0000000..901547e --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/D3598E86FE05C7286C828D6478CEEA3123163777 @@ -0,0 +1,3048 @@ +/** + * asmCrypto + * Module from https://github.com/vibornoff/asmcrypto.js/blob/release/src/aes/aes.asm.js + * Copyright (c) 2013 Artem S Vybornov + * + * 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. + */ +var _aes_tables = [ + // 0x0000: Sbox + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, + + // 0x0100: InvSbox + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, + 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, + 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, + 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, + 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, + 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, + 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, + 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, + 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, + 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d, + + // 0x0200: 2 x Sbox[X] + 0xc6, 0xf8, 0xee, 0xf6, 0xff, 0xd6, 0xde, 0x91, 0x60, 0x02, 0xce, 0x56, 0xe7, 0xb5, 0x4d, 0xec, + 0x8f, 0x1f, 0x89, 0xfa, 0xef, 0xb2, 0x8e, 0xfb, 0x41, 0xb3, 0x5f, 0x45, 0x23, 0x53, 0xe4, 0x9b, + 0x75, 0xe1, 0x3d, 0x4c, 0x6c, 0x7e, 0xf5, 0x83, 0x68, 0x51, 0xd1, 0xf9, 0xe2, 0xab, 0x62, 0x2a, + 0x08, 0x95, 0x46, 0x9d, 0x30, 0x37, 0x0a, 0x2f, 0x0e, 0x24, 0x1b, 0xdf, 0xcd, 0x4e, 0x7f, 0xea, + 0x12, 0x1d, 0x58, 0x34, 0x36, 0xdc, 0xb4, 0x5b, 0xa4, 0x76, 0xb7, 0x7d, 0x52, 0xdd, 0x5e, 0x13, + 0xa6, 0xb9, 0x00, 0xc1, 0x40, 0xe3, 0x79, 0xb6, 0xd4, 0x8d, 0x67, 0x72, 0x94, 0x98, 0xb0, 0x85, + 0xbb, 0xc5, 0x4f, 0xed, 0x86, 0x9a, 0x66, 0x11, 0x8a, 0xe9, 0x04, 0xfe, 0xa0, 0x78, 0x25, 0x4b, + 0xa2, 0x5d, 0x80, 0x05, 0x3f, 0x21, 0x70, 0xf1, 0x63, 0x77, 0xaf, 0x42, 0x20, 0xe5, 0xfd, 0xbf, + 0x81, 0x18, 0x26, 0xc3, 0xbe, 0x35, 0x88, 0x2e, 0x93, 0x55, 0xfc, 0x7a, 0xc8, 0xba, 0x32, 0xe6, + 0xc0, 0x19, 0x9e, 0xa3, 0x44, 0x54, 0x3b, 0x0b, 0x8c, 0xc7, 0x6b, 0x28, 0xa7, 0xbc, 0x16, 0xad, + 0xdb, 0x64, 0x74, 0x14, 0x92, 0x0c, 0x48, 0xb8, 0x9f, 0xbd, 0x43, 0xc4, 0x39, 0x31, 0xd3, 0xf2, + 0xd5, 0x8b, 0x6e, 0xda, 0x01, 0xb1, 0x9c, 0x49, 0xd8, 0xac, 0xf3, 0xcf, 0xca, 0xf4, 0x47, 0x10, + 0x6f, 0xf0, 0x4a, 0x5c, 0x38, 0x57, 0x73, 0x97, 0xcb, 0xa1, 0xe8, 0x3e, 0x96, 0x61, 0x0d, 0x0f, + 0xe0, 0x7c, 0x71, 0xcc, 0x90, 0x06, 0xf7, 0x1c, 0xc2, 0x6a, 0xae, 0x69, 0x17, 0x99, 0x3a, 0x27, + 0xd9, 0xeb, 0x2b, 0x22, 0xd2, 0xa9, 0x07, 0x33, 0x2d, 0x3c, 0x15, 0xc9, 0x87, 0xaa, 0x50, 0xa5, + 0x03, 0x59, 0x09, 0x1a, 0x65, 0xd7, 0x84, 0xd0, 0x82, 0x29, 0x5a, 0x1e, 0x7b, 0xa8, 0x6d, 0x2c, + + // 0x0300: 3 x Sbox[X] + 0xa5, 0x84, 0x99, 0x8d, 0x0d, 0xbd, 0xb1, 0x54, 0x50, 0x03, 0xa9, 0x7d, 0x19, 0x62, 0xe6, 0x9a, + 0x45, 0x9d, 0x40, 0x87, 0x15, 0xeb, 0xc9, 0x0b, 0xec, 0x67, 0xfd, 0xea, 0xbf, 0xf7, 0x96, 0x5b, + 0xc2, 0x1c, 0xae, 0x6a, 0x5a, 0x41, 0x02, 0x4f, 0x5c, 0xf4, 0x34, 0x08, 0x93, 0x73, 0x53, 0x3f, + 0x0c, 0x52, 0x65, 0x5e, 0x28, 0xa1, 0x0f, 0xb5, 0x09, 0x36, 0x9b, 0x3d, 0x26, 0x69, 0xcd, 0x9f, + 0x1b, 0x9e, 0x74, 0x2e, 0x2d, 0xb2, 0xee, 0xfb, 0xf6, 0x4d, 0x61, 0xce, 0x7b, 0x3e, 0x71, 0x97, + 0xf5, 0x68, 0x00, 0x2c, 0x60, 0x1f, 0xc8, 0xed, 0xbe, 0x46, 0xd9, 0x4b, 0xde, 0xd4, 0xe8, 0x4a, + 0x6b, 0x2a, 0xe5, 0x16, 0xc5, 0xd7, 0x55, 0x94, 0xcf, 0x10, 0x06, 0x81, 0xf0, 0x44, 0xba, 0xe3, + 0xf3, 0xfe, 0xc0, 0x8a, 0xad, 0xbc, 0x48, 0x04, 0xdf, 0xc1, 0x75, 0x63, 0x30, 0x1a, 0x0e, 0x6d, + 0x4c, 0x14, 0x35, 0x2f, 0xe1, 0xa2, 0xcc, 0x39, 0x57, 0xf2, 0x82, 0x47, 0xac, 0xe7, 0x2b, 0x95, + 0xa0, 0x98, 0xd1, 0x7f, 0x66, 0x7e, 0xab, 0x83, 0xca, 0x29, 0xd3, 0x3c, 0x79, 0xe2, 0x1d, 0x76, + 0x3b, 0x56, 0x4e, 0x1e, 0xdb, 0x0a, 0x6c, 0xe4, 0x5d, 0x6e, 0xef, 0xa6, 0xa8, 0xa4, 0x37, 0x8b, + 0x32, 0x43, 0x59, 0xb7, 0x8c, 0x64, 0xd2, 0xe0, 0xb4, 0xfa, 0x07, 0x25, 0xaf, 0x8e, 0xe9, 0x18, + 0xd5, 0x88, 0x6f, 0x72, 0x24, 0xf1, 0xc7, 0x51, 0x23, 0x7c, 0x9c, 0x21, 0xdd, 0xdc, 0x86, 0x85, + 0x90, 0x42, 0xc4, 0xaa, 0xd8, 0x05, 0x01, 0x12, 0xa3, 0x5f, 0xf9, 0xd0, 0x91, 0x58, 0x27, 0xb9, + 0x38, 0x13, 0xb3, 0x33, 0xbb, 0x70, 0x89, 0xa7, 0xb6, 0x22, 0x92, 0x20, 0x49, 0xff, 0x78, 0x7a, + 0x8f, 0xf8, 0x80, 0x17, 0xda, 0x31, 0xc6, 0xb8, 0xc3, 0xb0, 0x77, 0x11, 0xcb, 0xfc, 0xd6, 0x3a, + + // 0x0400: 9 x X + 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, + 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, + 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, + 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc, + 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, + 0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91, + 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a, + 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, + 0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b, + 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b, + 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, + 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, + 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, + 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, + 0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, + 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46, + + // 0x0500: 11 x X + 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, + 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, + 0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, + 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2, + 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, + 0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f, + 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4, + 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, + 0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e, + 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e, + 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, + 0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55, + 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, + 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, + 0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, + 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3, + + // 0x0600: 13 x X + 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, + 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, + 0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, + 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20, + 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, + 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, + 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d, + 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, + 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, + 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, + 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, + 0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa, + 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, + 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, + 0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, + 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97, + + // 0x0700: 14 x X + 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, + 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, + 0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, + 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61, + 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, + 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, + 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c, + 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, + 0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b, + 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb, + 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, + 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, + 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, + 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, + 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, + 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d + + // 0x0800: processed data +]; + +var _aes_heap_start = 0x800; // multiple of 16 + +function _aes_asm ( stdlib, foreign, buffer ) { + 'use asm'; + + // AES state + var S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, S5 = 0, S6 = 0, S7 = 0, S8 = 0, S9 = 0, SA = 0, SB = 0, SC = 0, SD = 0, SE = 0, SF = 0; + var keySize = 0; + + // GCM mode additional state + var H0 = 0, H1 = 0, H2 = 0, H3 = 0, Z0 = 0, Z1 = 0, Z2 = 0, Z3 = 0; + + // AES key schedule + var R00 = 0, R01 = 0, R02 = 0, R03 = 0, R04 = 0, R05 = 0, R06 = 0, R07 = 0, R08 = 0, R09 = 0, R0A = 0, R0B = 0, R0C = 0, R0D = 0, R0E = 0, R0F = 0, // cipher key + R10 = 0, R11 = 0, R12 = 0, R13 = 0, R14 = 0, R15 = 0, R16 = 0, R17 = 0, R18 = 0, R19 = 0, R1A = 0, R1B = 0, R1C = 0, R1D = 0, R1E = 0, R1F = 0, // round 1 key + R20 = 0, R21 = 0, R22 = 0, R23 = 0, R24 = 0, R25 = 0, R26 = 0, R27 = 0, R28 = 0, R29 = 0, R2A = 0, R2B = 0, R2C = 0, R2D = 0, R2E = 0, R2F = 0, // round 2 key + R30 = 0, R31 = 0, R32 = 0, R33 = 0, R34 = 0, R35 = 0, R36 = 0, R37 = 0, R38 = 0, R39 = 0, R3A = 0, R3B = 0, R3C = 0, R3D = 0, R3E = 0, R3F = 0, // round 3 key + R40 = 0, R41 = 0, R42 = 0, R43 = 0, R44 = 0, R45 = 0, R46 = 0, R47 = 0, R48 = 0, R49 = 0, R4A = 0, R4B = 0, R4C = 0, R4D = 0, R4E = 0, R4F = 0, // round 4 key + R50 = 0, R51 = 0, R52 = 0, R53 = 0, R54 = 0, R55 = 0, R56 = 0, R57 = 0, R58 = 0, R59 = 0, R5A = 0, R5B = 0, R5C = 0, R5D = 0, R5E = 0, R5F = 0, // round 5 key + R60 = 0, R61 = 0, R62 = 0, R63 = 0, R64 = 0, R65 = 0, R66 = 0, R67 = 0, R68 = 0, R69 = 0, R6A = 0, R6B = 0, R6C = 0, R6D = 0, R6E = 0, R6F = 0, // round 6 key + R70 = 0, R71 = 0, R72 = 0, R73 = 0, R74 = 0, R75 = 0, R76 = 0, R77 = 0, R78 = 0, R79 = 0, R7A = 0, R7B = 0, R7C = 0, R7D = 0, R7E = 0, R7F = 0, // round 7 key + R80 = 0, R81 = 0, R82 = 0, R83 = 0, R84 = 0, R85 = 0, R86 = 0, R87 = 0, R88 = 0, R89 = 0, R8A = 0, R8B = 0, R8C = 0, R8D = 0, R8E = 0, R8F = 0, // round 8 key + R90 = 0, R91 = 0, R92 = 0, R93 = 0, R94 = 0, R95 = 0, R96 = 0, R97 = 0, R98 = 0, R99 = 0, R9A = 0, R9B = 0, R9C = 0, R9D = 0, R9E = 0, R9F = 0, // round 9 key + RA0 = 0, RA1 = 0, RA2 = 0, RA3 = 0, RA4 = 0, RA5 = 0, RA6 = 0, RA7 = 0, RA8 = 0, RA9 = 0, RAA = 0, RAB = 0, RAC = 0, RAD = 0, RAE = 0, RAF = 0, // round 10 key + RB0 = 0, RB1 = 0, RB2 = 0, RB3 = 0, RB4 = 0, RB5 = 0, RB6 = 0, RB7 = 0, RB8 = 0, RB9 = 0, RBA = 0, RBB = 0, RBC = 0, RBD = 0, RBE = 0, RBF = 0, // round 11 key + RC0 = 0, RC1 = 0, RC2 = 0, RC3 = 0, RC4 = 0, RC5 = 0, RC6 = 0, RC7 = 0, RC8 = 0, RC9 = 0, RCA = 0, RCB = 0, RCC = 0, RCD = 0, RCE = 0, RCF = 0, // round 12 key + RD0 = 0, RD1 = 0, RD2 = 0, RD3 = 0, RD4 = 0, RD5 = 0, RD6 = 0, RD7 = 0, RD8 = 0, RD9 = 0, RDA = 0, RDB = 0, RDC = 0, RDD = 0, RDE = 0, RDF = 0, // round 13 key + RE0 = 0, RE1 = 0, RE2 = 0, RE3 = 0, RE4 = 0, RE5 = 0, RE6 = 0, RE7 = 0, RE8 = 0, RE9 = 0, REA = 0, REB = 0, REC = 0, RED = 0, REE = 0, REF = 0; // round 14 key + + // I/O buffer + var HEAP = new stdlib.Uint8Array(buffer); + + function _expand_key_128 () { + var sbox = 0; + + // key 1 + R10 = R00 ^ HEAP[sbox|R0D] ^ 0x01; + R11 = R01 ^ HEAP[sbox|R0E]; + R12 = R02 ^ HEAP[sbox|R0F]; + R13 = R03 ^ HEAP[sbox|R0C]; + R14 = R04 ^ R10; + R15 = R05 ^ R11; + R16 = R06 ^ R12; + R17 = R07 ^ R13; + R18 = R08 ^ R14; + R19 = R09 ^ R15; + R1A = R0A ^ R16; + R1B = R0B ^ R17; + R1C = R0C ^ R18; + R1D = R0D ^ R19; + R1E = R0E ^ R1A; + R1F = R0F ^ R1B; + + // key 2 + R20 = R10 ^ HEAP[sbox|R1D] ^ 0x02; + R21 = R11 ^ HEAP[sbox|R1E]; + R22 = R12 ^ HEAP[sbox|R1F]; + R23 = R13 ^ HEAP[sbox|R1C]; + R24 = R14 ^ R20; + R25 = R15 ^ R21; + R26 = R16 ^ R22; + R27 = R17 ^ R23; + R28 = R18 ^ R24; + R29 = R19 ^ R25; + R2A = R1A ^ R26; + R2B = R1B ^ R27; + R2C = R1C ^ R28; + R2D = R1D ^ R29; + R2E = R1E ^ R2A; + R2F = R1F ^ R2B; + + // key 3 + R30 = R20 ^ HEAP[sbox|R2D] ^ 0x04; + R31 = R21 ^ HEAP[sbox|R2E]; + R32 = R22 ^ HEAP[sbox|R2F]; + R33 = R23 ^ HEAP[sbox|R2C]; + R34 = R24 ^ R30; + R35 = R25 ^ R31; + R36 = R26 ^ R32; + R37 = R27 ^ R33; + R38 = R28 ^ R34; + R39 = R29 ^ R35; + R3A = R2A ^ R36; + R3B = R2B ^ R37; + R3C = R2C ^ R38; + R3D = R2D ^ R39; + R3E = R2E ^ R3A; + R3F = R2F ^ R3B; + + // key 4 + R40 = R30 ^ HEAP[sbox|R3D] ^ 0x08; + R41 = R31 ^ HEAP[sbox|R3E]; + R42 = R32 ^ HEAP[sbox|R3F]; + R43 = R33 ^ HEAP[sbox|R3C]; + R44 = R34 ^ R40; + R45 = R35 ^ R41; + R46 = R36 ^ R42; + R47 = R37 ^ R43; + R48 = R38 ^ R44; + R49 = R39 ^ R45; + R4A = R3A ^ R46; + R4B = R3B ^ R47; + R4C = R3C ^ R48; + R4D = R3D ^ R49; + R4E = R3E ^ R4A; + R4F = R3F ^ R4B; + + // key 5 + R50 = R40 ^ HEAP[sbox|R4D] ^ 0x10; + R51 = R41 ^ HEAP[sbox|R4E]; + R52 = R42 ^ HEAP[sbox|R4F]; + R53 = R43 ^ HEAP[sbox|R4C]; + R54 = R44 ^ R50; + R55 = R45 ^ R51; + R56 = R46 ^ R52; + R57 = R47 ^ R53; + R58 = R48 ^ R54; + R59 = R49 ^ R55; + R5A = R4A ^ R56; + R5B = R4B ^ R57; + R5C = R4C ^ R58; + R5D = R4D ^ R59; + R5E = R4E ^ R5A; + R5F = R4F ^ R5B; + + // key 6 + R60 = R50 ^ HEAP[sbox|R5D] ^ 0x20; + R61 = R51 ^ HEAP[sbox|R5E]; + R62 = R52 ^ HEAP[sbox|R5F]; + R63 = R53 ^ HEAP[sbox|R5C]; + R64 = R54 ^ R60; + R65 = R55 ^ R61; + R66 = R56 ^ R62; + R67 = R57 ^ R63; + R68 = R58 ^ R64; + R69 = R59 ^ R65; + R6A = R5A ^ R66; + R6B = R5B ^ R67; + R6C = R5C ^ R68; + R6D = R5D ^ R69; + R6E = R5E ^ R6A; + R6F = R5F ^ R6B; + + // key 7 + R70 = R60 ^ HEAP[sbox|R6D] ^ 0x40; + R71 = R61 ^ HEAP[sbox|R6E]; + R72 = R62 ^ HEAP[sbox|R6F]; + R73 = R63 ^ HEAP[sbox|R6C]; + R74 = R64 ^ R70; + R75 = R65 ^ R71; + R76 = R66 ^ R72; + R77 = R67 ^ R73; + R78 = R68 ^ R74; + R79 = R69 ^ R75; + R7A = R6A ^ R76; + R7B = R6B ^ R77; + R7C = R6C ^ R78; + R7D = R6D ^ R79; + R7E = R6E ^ R7A; + R7F = R6F ^ R7B; + + // key 8 + R80 = R70 ^ HEAP[sbox|R7D] ^ 0x80; + R81 = R71 ^ HEAP[sbox|R7E]; + R82 = R72 ^ HEAP[sbox|R7F]; + R83 = R73 ^ HEAP[sbox|R7C]; + R84 = R74 ^ R80; + R85 = R75 ^ R81; + R86 = R76 ^ R82; + R87 = R77 ^ R83; + R88 = R78 ^ R84; + R89 = R79 ^ R85; + R8A = R7A ^ R86; + R8B = R7B ^ R87; + R8C = R7C ^ R88; + R8D = R7D ^ R89; + R8E = R7E ^ R8A; + R8F = R7F ^ R8B; + + // key 9 + R90 = R80 ^ HEAP[sbox|R8D] ^ 0x1b; + R91 = R81 ^ HEAP[sbox|R8E]; + R92 = R82 ^ HEAP[sbox|R8F]; + R93 = R83 ^ HEAP[sbox|R8C]; + R94 = R84 ^ R90; + R95 = R85 ^ R91; + R96 = R86 ^ R92; + R97 = R87 ^ R93; + R98 = R88 ^ R94; + R99 = R89 ^ R95; + R9A = R8A ^ R96; + R9B = R8B ^ R97; + R9C = R8C ^ R98; + R9D = R8D ^ R99; + R9E = R8E ^ R9A; + R9F = R8F ^ R9B; + + // key 10 + RA0 = R90 ^ HEAP[sbox|R9D] ^ 0x36; + RA1 = R91 ^ HEAP[sbox|R9E]; + RA2 = R92 ^ HEAP[sbox|R9F]; + RA3 = R93 ^ HEAP[sbox|R9C]; + RA4 = R94 ^ RA0; + RA5 = R95 ^ RA1; + RA6 = R96 ^ RA2; + RA7 = R97 ^ RA3; + RA8 = R98 ^ RA4; + RA9 = R99 ^ RA5; + RAA = R9A ^ RA6; + RAB = R9B ^ RA7; + RAC = R9C ^ RA8; + RAD = R9D ^ RA9; + RAE = R9E ^ RAA; + RAF = R9F ^ RAB; + } + + function _expand_key_256 () { + var sbox = 0; + + // key 2 + R20 = R00 ^ HEAP[sbox|R1D] ^ 0x01; + R21 = R01 ^ HEAP[sbox|R1E]; + R22 = R02 ^ HEAP[sbox|R1F]; + R23 = R03 ^ HEAP[sbox|R1C]; + R24 = R04 ^ R20; + R25 = R05 ^ R21; + R26 = R06 ^ R22; + R27 = R07 ^ R23; + R28 = R08 ^ R24; + R29 = R09 ^ R25; + R2A = R0A ^ R26; + R2B = R0B ^ R27; + R2C = R0C ^ R28; + R2D = R0D ^ R29; + R2E = R0E ^ R2A; + R2F = R0F ^ R2B; + + // key 3 + R30 = R10 ^ HEAP[sbox|R2C]; + R31 = R11 ^ HEAP[sbox|R2D]; + R32 = R12 ^ HEAP[sbox|R2E]; + R33 = R13 ^ HEAP[sbox|R2F]; + R34 = R14 ^ R30; + R35 = R15 ^ R31; + R36 = R16 ^ R32; + R37 = R17 ^ R33; + R38 = R18 ^ R34; + R39 = R19 ^ R35; + R3A = R1A ^ R36; + R3B = R1B ^ R37; + R3C = R1C ^ R38; + R3D = R1D ^ R39; + R3E = R1E ^ R3A; + R3F = R1F ^ R3B; + + // key 4 + R40 = R20 ^ HEAP[sbox|R3D] ^ 0x02; + R41 = R21 ^ HEAP[sbox|R3E]; + R42 = R22 ^ HEAP[sbox|R3F]; + R43 = R23 ^ HEAP[sbox|R3C]; + R44 = R24 ^ R40; + R45 = R25 ^ R41; + R46 = R26 ^ R42; + R47 = R27 ^ R43; + R48 = R28 ^ R44; + R49 = R29 ^ R45; + R4A = R2A ^ R46; + R4B = R2B ^ R47; + R4C = R2C ^ R48; + R4D = R2D ^ R49; + R4E = R2E ^ R4A; + R4F = R2F ^ R4B; + + // key 5 + R50 = R30 ^ HEAP[sbox|R4C]; + R51 = R31 ^ HEAP[sbox|R4D]; + R52 = R32 ^ HEAP[sbox|R4E]; + R53 = R33 ^ HEAP[sbox|R4F]; + R54 = R34 ^ R50; + R55 = R35 ^ R51; + R56 = R36 ^ R52; + R57 = R37 ^ R53; + R58 = R38 ^ R54; + R59 = R39 ^ R55; + R5A = R3A ^ R56; + R5B = R3B ^ R57; + R5C = R3C ^ R58; + R5D = R3D ^ R59; + R5E = R3E ^ R5A; + R5F = R3F ^ R5B; + + // key 6 + R60 = R40 ^ HEAP[sbox|R5D] ^ 0x04; + R61 = R41 ^ HEAP[sbox|R5E]; + R62 = R42 ^ HEAP[sbox|R5F]; + R63 = R43 ^ HEAP[sbox|R5C]; + R64 = R44 ^ R60; + R65 = R45 ^ R61; + R66 = R46 ^ R62; + R67 = R47 ^ R63; + R68 = R48 ^ R64; + R69 = R49 ^ R65; + R6A = R4A ^ R66; + R6B = R4B ^ R67; + R6C = R4C ^ R68; + R6D = R4D ^ R69; + R6E = R4E ^ R6A; + R6F = R4F ^ R6B; + + // key 7 + R70 = R50 ^ HEAP[sbox|R6C]; + R71 = R51 ^ HEAP[sbox|R6D]; + R72 = R52 ^ HEAP[sbox|R6E]; + R73 = R53 ^ HEAP[sbox|R6F]; + R74 = R54 ^ R70; + R75 = R55 ^ R71; + R76 = R56 ^ R72; + R77 = R57 ^ R73; + R78 = R58 ^ R74; + R79 = R59 ^ R75; + R7A = R5A ^ R76; + R7B = R5B ^ R77; + R7C = R5C ^ R78; + R7D = R5D ^ R79; + R7E = R5E ^ R7A; + R7F = R5F ^ R7B; + + // key 8 + R80 = R60 ^ HEAP[sbox|R7D] ^ 0x08; + R81 = R61 ^ HEAP[sbox|R7E]; + R82 = R62 ^ HEAP[sbox|R7F]; + R83 = R63 ^ HEAP[sbox|R7C]; + R84 = R64 ^ R80; + R85 = R65 ^ R81; + R86 = R66 ^ R82; + R87 = R67 ^ R83; + R88 = R68 ^ R84; + R89 = R69 ^ R85; + R8A = R6A ^ R86; + R8B = R6B ^ R87; + R8C = R6C ^ R88; + R8D = R6D ^ R89; + R8E = R6E ^ R8A; + R8F = R6F ^ R8B; + + // key 9 + R90 = R70 ^ HEAP[sbox|R8C]; + R91 = R71 ^ HEAP[sbox|R8D]; + R92 = R72 ^ HEAP[sbox|R8E]; + R93 = R73 ^ HEAP[sbox|R8F]; + R94 = R74 ^ R90; + R95 = R75 ^ R91; + R96 = R76 ^ R92; + R97 = R77 ^ R93; + R98 = R78 ^ R94; + R99 = R79 ^ R95; + R9A = R7A ^ R96; + R9B = R7B ^ R97; + R9C = R7C ^ R98; + R9D = R7D ^ R99; + R9E = R7E ^ R9A; + R9F = R7F ^ R9B; + + // key 10 + RA0 = R80 ^ HEAP[sbox|R9D] ^ 0x10; + RA1 = R81 ^ HEAP[sbox|R9E]; + RA2 = R82 ^ HEAP[sbox|R9F]; + RA3 = R83 ^ HEAP[sbox|R9C]; + RA4 = R84 ^ RA0; + RA5 = R85 ^ RA1; + RA6 = R86 ^ RA2; + RA7 = R87 ^ RA3; + RA8 = R88 ^ RA4; + RA9 = R89 ^ RA5; + RAA = R8A ^ RA6; + RAB = R8B ^ RA7; + RAC = R8C ^ RA8; + RAD = R8D ^ RA9; + RAE = R8E ^ RAA; + RAF = R8F ^ RAB; + + // key 11 + RB0 = R90 ^ HEAP[sbox|RAC]; + RB1 = R91 ^ HEAP[sbox|RAD]; + RB2 = R92 ^ HEAP[sbox|RAE]; + RB3 = R93 ^ HEAP[sbox|RAF]; + RB4 = R94 ^ RB0; + RB5 = R95 ^ RB1; + RB6 = R96 ^ RB2; + RB7 = R97 ^ RB3; + RB8 = R98 ^ RB4; + RB9 = R99 ^ RB5; + RBA = R9A ^ RB6; + RBB = R9B ^ RB7; + RBC = R9C ^ RB8; + RBD = R9D ^ RB9; + RBE = R9E ^ RBA; + RBF = R9F ^ RBB; + + // key 12 + RC0 = RA0 ^ HEAP[sbox|RBD] ^ 0x20; + RC1 = RA1 ^ HEAP[sbox|RBE]; + RC2 = RA2 ^ HEAP[sbox|RBF]; + RC3 = RA3 ^ HEAP[sbox|RBC]; + RC4 = RA4 ^ RC0; + RC5 = RA5 ^ RC1; + RC6 = RA6 ^ RC2; + RC7 = RA7 ^ RC3; + RC8 = RA8 ^ RC4; + RC9 = RA9 ^ RC5; + RCA = RAA ^ RC6; + RCB = RAB ^ RC7; + RCC = RAC ^ RC8; + RCD = RAD ^ RC9; + RCE = RAE ^ RCA; + RCF = RAF ^ RCB; + + // key 13 + RD0 = RB0 ^ HEAP[sbox|RCC]; + RD1 = RB1 ^ HEAP[sbox|RCD]; + RD2 = RB2 ^ HEAP[sbox|RCE]; + RD3 = RB3 ^ HEAP[sbox|RCF]; + RD4 = RB4 ^ RD0; + RD5 = RB5 ^ RD1; + RD6 = RB6 ^ RD2; + RD7 = RB7 ^ RD3; + RD8 = RB8 ^ RD4; + RD9 = RB9 ^ RD5; + RDA = RBA ^ RD6; + RDB = RBB ^ RD7; + RDC = RBC ^ RD8; + RDD = RBD ^ RD9; + RDE = RBE ^ RDA; + RDF = RBF ^ RDB; + + // key 14 + RE0 = RC0 ^ HEAP[sbox|RDD] ^ 0x40; + RE1 = RC1 ^ HEAP[sbox|RDE]; + RE2 = RC2 ^ HEAP[sbox|RDF]; + RE3 = RC3 ^ HEAP[sbox|RDC]; + RE4 = RC4 ^ RE0; + RE5 = RC5 ^ RE1; + RE6 = RC6 ^ RE2; + RE7 = RC7 ^ RE3; + RE8 = RC8 ^ RE4; + RE9 = RC9 ^ RE5; + REA = RCA ^ RE6; + REB = RCB ^ RE7; + REC = RCC ^ RE8; + RED = RCD ^ RE9; + REE = RCE ^ REA; + REF = RCF ^ REB; + } + + function _encrypt ( s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF ) { + s0 = s0|0; + s1 = s1|0; + s2 = s2|0; + s3 = s3|0; + s4 = s4|0; + s5 = s5|0; + s6 = s6|0; + s7 = s7|0; + s8 = s8|0; + s9 = s9|0; + sA = sA|0; + sB = sB|0; + sC = sC|0; + sD = sD|0; + sE = sE|0; + sF = sF|0; + + var t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, tA = 0, tB = 0, tC = 0, tD = 0, tE = 0, tF = 0, + sbox = 0, x2_sbox = 0x200, x3_sbox = 0x300; + + // round 0 + s0 = s0 ^ R00; + s1 = s1 ^ R01; + s2 = s2 ^ R02; + s3 = s3 ^ R03; + s4 = s4 ^ R04; + s5 = s5 ^ R05; + s6 = s6 ^ R06; + s7 = s7 ^ R07; + s8 = s8 ^ R08; + s9 = s9 ^ R09; + sA = sA ^ R0A; + sB = sB ^ R0B; + sC = sC ^ R0C; + sD = sD ^ R0D; + sE = sE ^ R0E; + sF = sF ^ R0F; + + // round 1 + t0 = HEAP[x2_sbox|s0] ^ HEAP[x3_sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[sbox|sF] ^ R10; + t1 = HEAP[sbox|s0] ^ HEAP[x2_sbox|s5] ^ HEAP[x3_sbox|sA] ^ HEAP[sbox|sF] ^ R11; + t2 = HEAP[sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[x2_sbox|sA] ^ HEAP[x3_sbox|sF] ^ R12; + t3 = HEAP[x3_sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[x2_sbox|sF] ^ R13; + t4 = HEAP[x2_sbox|s4] ^ HEAP[x3_sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[sbox|s3] ^ R14; + t5 = HEAP[sbox|s4] ^ HEAP[x2_sbox|s9] ^ HEAP[x3_sbox|sE] ^ HEAP[sbox|s3] ^ R15; + t6 = HEAP[sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[x2_sbox|sE] ^ HEAP[x3_sbox|s3] ^ R16; + t7 = HEAP[x3_sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[x2_sbox|s3] ^ R17; + t8 = HEAP[x2_sbox|s8] ^ HEAP[x3_sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[sbox|s7] ^ R18; + t9 = HEAP[sbox|s8] ^ HEAP[x2_sbox|sD] ^ HEAP[x3_sbox|s2] ^ HEAP[sbox|s7] ^ R19; + tA = HEAP[sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[x2_sbox|s2] ^ HEAP[x3_sbox|s7] ^ R1A; + tB = HEAP[x3_sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[x2_sbox|s7] ^ R1B; + tC = HEAP[x2_sbox|sC] ^ HEAP[x3_sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[sbox|sB] ^ R1C; + tD = HEAP[sbox|sC] ^ HEAP[x2_sbox|s1] ^ HEAP[x3_sbox|s6] ^ HEAP[sbox|sB] ^ R1D; + tE = HEAP[sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[x2_sbox|s6] ^ HEAP[x3_sbox|sB] ^ R1E; + tF = HEAP[x3_sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[x2_sbox|sB] ^ R1F; + + // round 2 + s0 = HEAP[x2_sbox|t0] ^ HEAP[x3_sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[sbox|tF] ^ R20; + s1 = HEAP[sbox|t0] ^ HEAP[x2_sbox|t5] ^ HEAP[x3_sbox|tA] ^ HEAP[sbox|tF] ^ R21; + s2 = HEAP[sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[x2_sbox|tA] ^ HEAP[x3_sbox|tF] ^ R22; + s3 = HEAP[x3_sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[x2_sbox|tF] ^ R23; + s4 = HEAP[x2_sbox|t4] ^ HEAP[x3_sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[sbox|t3] ^ R24; + s5 = HEAP[sbox|t4] ^ HEAP[x2_sbox|t9] ^ HEAP[x3_sbox|tE] ^ HEAP[sbox|t3] ^ R25; + s6 = HEAP[sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[x2_sbox|tE] ^ HEAP[x3_sbox|t3] ^ R26; + s7 = HEAP[x3_sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[x2_sbox|t3] ^ R27; + s8 = HEAP[x2_sbox|t8] ^ HEAP[x3_sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[sbox|t7] ^ R28; + s9 = HEAP[sbox|t8] ^ HEAP[x2_sbox|tD] ^ HEAP[x3_sbox|t2] ^ HEAP[sbox|t7] ^ R29; + sA = HEAP[sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[x2_sbox|t2] ^ HEAP[x3_sbox|t7] ^ R2A; + sB = HEAP[x3_sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[x2_sbox|t7] ^ R2B; + sC = HEAP[x2_sbox|tC] ^ HEAP[x3_sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[sbox|tB] ^ R2C; + sD = HEAP[sbox|tC] ^ HEAP[x2_sbox|t1] ^ HEAP[x3_sbox|t6] ^ HEAP[sbox|tB] ^ R2D; + sE = HEAP[sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[x2_sbox|t6] ^ HEAP[x3_sbox|tB] ^ R2E; + sF = HEAP[x3_sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[x2_sbox|tB] ^ R2F; + + // round 3 + t0 = HEAP[x2_sbox|s0] ^ HEAP[x3_sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[sbox|sF] ^ R30; + t1 = HEAP[sbox|s0] ^ HEAP[x2_sbox|s5] ^ HEAP[x3_sbox|sA] ^ HEAP[sbox|sF] ^ R31; + t2 = HEAP[sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[x2_sbox|sA] ^ HEAP[x3_sbox|sF] ^ R32; + t3 = HEAP[x3_sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[x2_sbox|sF] ^ R33; + t4 = HEAP[x2_sbox|s4] ^ HEAP[x3_sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[sbox|s3] ^ R34; + t5 = HEAP[sbox|s4] ^ HEAP[x2_sbox|s9] ^ HEAP[x3_sbox|sE] ^ HEAP[sbox|s3] ^ R35; + t6 = HEAP[sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[x2_sbox|sE] ^ HEAP[x3_sbox|s3] ^ R36; + t7 = HEAP[x3_sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[x2_sbox|s3] ^ R37; + t8 = HEAP[x2_sbox|s8] ^ HEAP[x3_sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[sbox|s7] ^ R38; + t9 = HEAP[sbox|s8] ^ HEAP[x2_sbox|sD] ^ HEAP[x3_sbox|s2] ^ HEAP[sbox|s7] ^ R39; + tA = HEAP[sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[x2_sbox|s2] ^ HEAP[x3_sbox|s7] ^ R3A; + tB = HEAP[x3_sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[x2_sbox|s7] ^ R3B; + tC = HEAP[x2_sbox|sC] ^ HEAP[x3_sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[sbox|sB] ^ R3C; + tD = HEAP[sbox|sC] ^ HEAP[x2_sbox|s1] ^ HEAP[x3_sbox|s6] ^ HEAP[sbox|sB] ^ R3D; + tE = HEAP[sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[x2_sbox|s6] ^ HEAP[x3_sbox|sB] ^ R3E; + tF = HEAP[x3_sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[x2_sbox|sB] ^ R3F; + + // round 4 + s0 = HEAP[x2_sbox|t0] ^ HEAP[x3_sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[sbox|tF] ^ R40; + s1 = HEAP[sbox|t0] ^ HEAP[x2_sbox|t5] ^ HEAP[x3_sbox|tA] ^ HEAP[sbox|tF] ^ R41; + s2 = HEAP[sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[x2_sbox|tA] ^ HEAP[x3_sbox|tF] ^ R42; + s3 = HEAP[x3_sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[x2_sbox|tF] ^ R43; + s4 = HEAP[x2_sbox|t4] ^ HEAP[x3_sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[sbox|t3] ^ R44; + s5 = HEAP[sbox|t4] ^ HEAP[x2_sbox|t9] ^ HEAP[x3_sbox|tE] ^ HEAP[sbox|t3] ^ R45; + s6 = HEAP[sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[x2_sbox|tE] ^ HEAP[x3_sbox|t3] ^ R46; + s7 = HEAP[x3_sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[x2_sbox|t3] ^ R47; + s8 = HEAP[x2_sbox|t8] ^ HEAP[x3_sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[sbox|t7] ^ R48; + s9 = HEAP[sbox|t8] ^ HEAP[x2_sbox|tD] ^ HEAP[x3_sbox|t2] ^ HEAP[sbox|t7] ^ R49; + sA = HEAP[sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[x2_sbox|t2] ^ HEAP[x3_sbox|t7] ^ R4A; + sB = HEAP[x3_sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[x2_sbox|t7] ^ R4B; + sC = HEAP[x2_sbox|tC] ^ HEAP[x3_sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[sbox|tB] ^ R4C; + sD = HEAP[sbox|tC] ^ HEAP[x2_sbox|t1] ^ HEAP[x3_sbox|t6] ^ HEAP[sbox|tB] ^ R4D; + sE = HEAP[sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[x2_sbox|t6] ^ HEAP[x3_sbox|tB] ^ R4E; + sF = HEAP[x3_sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[x2_sbox|tB] ^ R4F; + + // round 5 + t0 = HEAP[x2_sbox|s0] ^ HEAP[x3_sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[sbox|sF] ^ R50; + t1 = HEAP[sbox|s0] ^ HEAP[x2_sbox|s5] ^ HEAP[x3_sbox|sA] ^ HEAP[sbox|sF] ^ R51; + t2 = HEAP[sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[x2_sbox|sA] ^ HEAP[x3_sbox|sF] ^ R52; + t3 = HEAP[x3_sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[x2_sbox|sF] ^ R53; + t4 = HEAP[x2_sbox|s4] ^ HEAP[x3_sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[sbox|s3] ^ R54; + t5 = HEAP[sbox|s4] ^ HEAP[x2_sbox|s9] ^ HEAP[x3_sbox|sE] ^ HEAP[sbox|s3] ^ R55; + t6 = HEAP[sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[x2_sbox|sE] ^ HEAP[x3_sbox|s3] ^ R56; + t7 = HEAP[x3_sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[x2_sbox|s3] ^ R57; + t8 = HEAP[x2_sbox|s8] ^ HEAP[x3_sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[sbox|s7] ^ R58; + t9 = HEAP[sbox|s8] ^ HEAP[x2_sbox|sD] ^ HEAP[x3_sbox|s2] ^ HEAP[sbox|s7] ^ R59; + tA = HEAP[sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[x2_sbox|s2] ^ HEAP[x3_sbox|s7] ^ R5A; + tB = HEAP[x3_sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[x2_sbox|s7] ^ R5B; + tC = HEAP[x2_sbox|sC] ^ HEAP[x3_sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[sbox|sB] ^ R5C; + tD = HEAP[sbox|sC] ^ HEAP[x2_sbox|s1] ^ HEAP[x3_sbox|s6] ^ HEAP[sbox|sB] ^ R5D; + tE = HEAP[sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[x2_sbox|s6] ^ HEAP[x3_sbox|sB] ^ R5E; + tF = HEAP[x3_sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[x2_sbox|sB] ^ R5F; + + // round 6 + s0 = HEAP[x2_sbox|t0] ^ HEAP[x3_sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[sbox|tF] ^ R60; + s1 = HEAP[sbox|t0] ^ HEAP[x2_sbox|t5] ^ HEAP[x3_sbox|tA] ^ HEAP[sbox|tF] ^ R61; + s2 = HEAP[sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[x2_sbox|tA] ^ HEAP[x3_sbox|tF] ^ R62; + s3 = HEAP[x3_sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[x2_sbox|tF] ^ R63; + s4 = HEAP[x2_sbox|t4] ^ HEAP[x3_sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[sbox|t3] ^ R64; + s5 = HEAP[sbox|t4] ^ HEAP[x2_sbox|t9] ^ HEAP[x3_sbox|tE] ^ HEAP[sbox|t3] ^ R65; + s6 = HEAP[sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[x2_sbox|tE] ^ HEAP[x3_sbox|t3] ^ R66; + s7 = HEAP[x3_sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[x2_sbox|t3] ^ R67; + s8 = HEAP[x2_sbox|t8] ^ HEAP[x3_sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[sbox|t7] ^ R68; + s9 = HEAP[sbox|t8] ^ HEAP[x2_sbox|tD] ^ HEAP[x3_sbox|t2] ^ HEAP[sbox|t7] ^ R69; + sA = HEAP[sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[x2_sbox|t2] ^ HEAP[x3_sbox|t7] ^ R6A; + sB = HEAP[x3_sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[x2_sbox|t7] ^ R6B; + sC = HEAP[x2_sbox|tC] ^ HEAP[x3_sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[sbox|tB] ^ R6C; + sD = HEAP[sbox|tC] ^ HEAP[x2_sbox|t1] ^ HEAP[x3_sbox|t6] ^ HEAP[sbox|tB] ^ R6D; + sE = HEAP[sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[x2_sbox|t6] ^ HEAP[x3_sbox|tB] ^ R6E; + sF = HEAP[x3_sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[x2_sbox|tB] ^ R6F; + + // round 7 + t0 = HEAP[x2_sbox|s0] ^ HEAP[x3_sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[sbox|sF] ^ R70; + t1 = HEAP[sbox|s0] ^ HEAP[x2_sbox|s5] ^ HEAP[x3_sbox|sA] ^ HEAP[sbox|sF] ^ R71; + t2 = HEAP[sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[x2_sbox|sA] ^ HEAP[x3_sbox|sF] ^ R72; + t3 = HEAP[x3_sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[x2_sbox|sF] ^ R73; + t4 = HEAP[x2_sbox|s4] ^ HEAP[x3_sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[sbox|s3] ^ R74; + t5 = HEAP[sbox|s4] ^ HEAP[x2_sbox|s9] ^ HEAP[x3_sbox|sE] ^ HEAP[sbox|s3] ^ R75; + t6 = HEAP[sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[x2_sbox|sE] ^ HEAP[x3_sbox|s3] ^ R76; + t7 = HEAP[x3_sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[x2_sbox|s3] ^ R77; + t8 = HEAP[x2_sbox|s8] ^ HEAP[x3_sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[sbox|s7] ^ R78; + t9 = HEAP[sbox|s8] ^ HEAP[x2_sbox|sD] ^ HEAP[x3_sbox|s2] ^ HEAP[sbox|s7] ^ R79; + tA = HEAP[sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[x2_sbox|s2] ^ HEAP[x3_sbox|s7] ^ R7A; + tB = HEAP[x3_sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[x2_sbox|s7] ^ R7B; + tC = HEAP[x2_sbox|sC] ^ HEAP[x3_sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[sbox|sB] ^ R7C; + tD = HEAP[sbox|sC] ^ HEAP[x2_sbox|s1] ^ HEAP[x3_sbox|s6] ^ HEAP[sbox|sB] ^ R7D; + tE = HEAP[sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[x2_sbox|s6] ^ HEAP[x3_sbox|sB] ^ R7E; + tF = HEAP[x3_sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[x2_sbox|sB] ^ R7F; + + // round 8 + s0 = HEAP[x2_sbox|t0] ^ HEAP[x3_sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[sbox|tF] ^ R80; + s1 = HEAP[sbox|t0] ^ HEAP[x2_sbox|t5] ^ HEAP[x3_sbox|tA] ^ HEAP[sbox|tF] ^ R81; + s2 = HEAP[sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[x2_sbox|tA] ^ HEAP[x3_sbox|tF] ^ R82; + s3 = HEAP[x3_sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[x2_sbox|tF] ^ R83; + s4 = HEAP[x2_sbox|t4] ^ HEAP[x3_sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[sbox|t3] ^ R84; + s5 = HEAP[sbox|t4] ^ HEAP[x2_sbox|t9] ^ HEAP[x3_sbox|tE] ^ HEAP[sbox|t3] ^ R85; + s6 = HEAP[sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[x2_sbox|tE] ^ HEAP[x3_sbox|t3] ^ R86; + s7 = HEAP[x3_sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[x2_sbox|t3] ^ R87; + s8 = HEAP[x2_sbox|t8] ^ HEAP[x3_sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[sbox|t7] ^ R88; + s9 = HEAP[sbox|t8] ^ HEAP[x2_sbox|tD] ^ HEAP[x3_sbox|t2] ^ HEAP[sbox|t7] ^ R89; + sA = HEAP[sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[x2_sbox|t2] ^ HEAP[x3_sbox|t7] ^ R8A; + sB = HEAP[x3_sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[x2_sbox|t7] ^ R8B; + sC = HEAP[x2_sbox|tC] ^ HEAP[x3_sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[sbox|tB] ^ R8C; + sD = HEAP[sbox|tC] ^ HEAP[x2_sbox|t1] ^ HEAP[x3_sbox|t6] ^ HEAP[sbox|tB] ^ R8D; + sE = HEAP[sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[x2_sbox|t6] ^ HEAP[x3_sbox|tB] ^ R8E; + sF = HEAP[x3_sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[x2_sbox|tB] ^ R8F; + + // round 9 + t0 = HEAP[x2_sbox|s0] ^ HEAP[x3_sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[sbox|sF] ^ R90; + t1 = HEAP[sbox|s0] ^ HEAP[x2_sbox|s5] ^ HEAP[x3_sbox|sA] ^ HEAP[sbox|sF] ^ R91; + t2 = HEAP[sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[x2_sbox|sA] ^ HEAP[x3_sbox|sF] ^ R92; + t3 = HEAP[x3_sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[x2_sbox|sF] ^ R93; + t4 = HEAP[x2_sbox|s4] ^ HEAP[x3_sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[sbox|s3] ^ R94; + t5 = HEAP[sbox|s4] ^ HEAP[x2_sbox|s9] ^ HEAP[x3_sbox|sE] ^ HEAP[sbox|s3] ^ R95; + t6 = HEAP[sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[x2_sbox|sE] ^ HEAP[x3_sbox|s3] ^ R96; + t7 = HEAP[x3_sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[x2_sbox|s3] ^ R97; + t8 = HEAP[x2_sbox|s8] ^ HEAP[x3_sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[sbox|s7] ^ R98; + t9 = HEAP[sbox|s8] ^ HEAP[x2_sbox|sD] ^ HEAP[x3_sbox|s2] ^ HEAP[sbox|s7] ^ R99; + tA = HEAP[sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[x2_sbox|s2] ^ HEAP[x3_sbox|s7] ^ R9A; + tB = HEAP[x3_sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[x2_sbox|s7] ^ R9B; + tC = HEAP[x2_sbox|sC] ^ HEAP[x3_sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[sbox|sB] ^ R9C; + tD = HEAP[sbox|sC] ^ HEAP[x2_sbox|s1] ^ HEAP[x3_sbox|s6] ^ HEAP[sbox|sB] ^ R9D; + tE = HEAP[sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[x2_sbox|s6] ^ HEAP[x3_sbox|sB] ^ R9E; + tF = HEAP[x3_sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[x2_sbox|sB] ^ R9F; + + if ( (keySize|0) == 16 ) { + // round 10 + S0 = HEAP[sbox|t0] ^ RA0; + S1 = HEAP[sbox|t5] ^ RA1; + S2 = HEAP[sbox|tA] ^ RA2; + S3 = HEAP[sbox|tF] ^ RA3; + S4 = HEAP[sbox|t4] ^ RA4; + S5 = HEAP[sbox|t9] ^ RA5; + S6 = HEAP[sbox|tE] ^ RA6; + S7 = HEAP[sbox|t3] ^ RA7; + S8 = HEAP[sbox|t8] ^ RA8; + S9 = HEAP[sbox|tD] ^ RA9; + SA = HEAP[sbox|t2] ^ RAA; + SB = HEAP[sbox|t7] ^ RAB; + SC = HEAP[sbox|tC] ^ RAC; + SD = HEAP[sbox|t1] ^ RAD; + SE = HEAP[sbox|t6] ^ RAE; + SF = HEAP[sbox|tB] ^ RAF; + + return; + } + + // round 10 + s0 = HEAP[x2_sbox|t0] ^ HEAP[x3_sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[sbox|tF] ^ RA0; + s1 = HEAP[sbox|t0] ^ HEAP[x2_sbox|t5] ^ HEAP[x3_sbox|tA] ^ HEAP[sbox|tF] ^ RA1; + s2 = HEAP[sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[x2_sbox|tA] ^ HEAP[x3_sbox|tF] ^ RA2; + s3 = HEAP[x3_sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[x2_sbox|tF] ^ RA3; + s4 = HEAP[x2_sbox|t4] ^ HEAP[x3_sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[sbox|t3] ^ RA4; + s5 = HEAP[sbox|t4] ^ HEAP[x2_sbox|t9] ^ HEAP[x3_sbox|tE] ^ HEAP[sbox|t3] ^ RA5; + s6 = HEAP[sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[x2_sbox|tE] ^ HEAP[x3_sbox|t3] ^ RA6; + s7 = HEAP[x3_sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[x2_sbox|t3] ^ RA7; + s8 = HEAP[x2_sbox|t8] ^ HEAP[x3_sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[sbox|t7] ^ RA8; + s9 = HEAP[sbox|t8] ^ HEAP[x2_sbox|tD] ^ HEAP[x3_sbox|t2] ^ HEAP[sbox|t7] ^ RA9; + sA = HEAP[sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[x2_sbox|t2] ^ HEAP[x3_sbox|t7] ^ RAA; + sB = HEAP[x3_sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[x2_sbox|t7] ^ RAB; + sC = HEAP[x2_sbox|tC] ^ HEAP[x3_sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[sbox|tB] ^ RAC; + sD = HEAP[sbox|tC] ^ HEAP[x2_sbox|t1] ^ HEAP[x3_sbox|t6] ^ HEAP[sbox|tB] ^ RAD; + sE = HEAP[sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[x2_sbox|t6] ^ HEAP[x3_sbox|tB] ^ RAE; + sF = HEAP[x3_sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[x2_sbox|tB] ^ RAF; + + // round 11 + t0 = HEAP[x2_sbox|s0] ^ HEAP[x3_sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[sbox|sF] ^ RB0; + t1 = HEAP[sbox|s0] ^ HEAP[x2_sbox|s5] ^ HEAP[x3_sbox|sA] ^ HEAP[sbox|sF] ^ RB1; + t2 = HEAP[sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[x2_sbox|sA] ^ HEAP[x3_sbox|sF] ^ RB2; + t3 = HEAP[x3_sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[x2_sbox|sF] ^ RB3; + t4 = HEAP[x2_sbox|s4] ^ HEAP[x3_sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[sbox|s3] ^ RB4; + t5 = HEAP[sbox|s4] ^ HEAP[x2_sbox|s9] ^ HEAP[x3_sbox|sE] ^ HEAP[sbox|s3] ^ RB5; + t6 = HEAP[sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[x2_sbox|sE] ^ HEAP[x3_sbox|s3] ^ RB6; + t7 = HEAP[x3_sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[x2_sbox|s3] ^ RB7; + t8 = HEAP[x2_sbox|s8] ^ HEAP[x3_sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[sbox|s7] ^ RB8; + t9 = HEAP[sbox|s8] ^ HEAP[x2_sbox|sD] ^ HEAP[x3_sbox|s2] ^ HEAP[sbox|s7] ^ RB9; + tA = HEAP[sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[x2_sbox|s2] ^ HEAP[x3_sbox|s7] ^ RBA; + tB = HEAP[x3_sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[x2_sbox|s7] ^ RBB; + tC = HEAP[x2_sbox|sC] ^ HEAP[x3_sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[sbox|sB] ^ RBC; + tD = HEAP[sbox|sC] ^ HEAP[x2_sbox|s1] ^ HEAP[x3_sbox|s6] ^ HEAP[sbox|sB] ^ RBD; + tE = HEAP[sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[x2_sbox|s6] ^ HEAP[x3_sbox|sB] ^ RBE; + tF = HEAP[x3_sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[x2_sbox|sB] ^ RBF; + + // round 12 + s0 = HEAP[x2_sbox|t0] ^ HEAP[x3_sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[sbox|tF] ^ RC0; + s1 = HEAP[sbox|t0] ^ HEAP[x2_sbox|t5] ^ HEAP[x3_sbox|tA] ^ HEAP[sbox|tF] ^ RC1; + s2 = HEAP[sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[x2_sbox|tA] ^ HEAP[x3_sbox|tF] ^ RC2; + s3 = HEAP[x3_sbox|t0] ^ HEAP[sbox|t5] ^ HEAP[sbox|tA] ^ HEAP[x2_sbox|tF] ^ RC3; + s4 = HEAP[x2_sbox|t4] ^ HEAP[x3_sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[sbox|t3] ^ RC4; + s5 = HEAP[sbox|t4] ^ HEAP[x2_sbox|t9] ^ HEAP[x3_sbox|tE] ^ HEAP[sbox|t3] ^ RC5; + s6 = HEAP[sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[x2_sbox|tE] ^ HEAP[x3_sbox|t3] ^ RC6; + s7 = HEAP[x3_sbox|t4] ^ HEAP[sbox|t9] ^ HEAP[sbox|tE] ^ HEAP[x2_sbox|t3] ^ RC7; + s8 = HEAP[x2_sbox|t8] ^ HEAP[x3_sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[sbox|t7] ^ RC8; + s9 = HEAP[sbox|t8] ^ HEAP[x2_sbox|tD] ^ HEAP[x3_sbox|t2] ^ HEAP[sbox|t7] ^ RC9; + sA = HEAP[sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[x2_sbox|t2] ^ HEAP[x3_sbox|t7] ^ RCA; + sB = HEAP[x3_sbox|t8] ^ HEAP[sbox|tD] ^ HEAP[sbox|t2] ^ HEAP[x2_sbox|t7] ^ RCB; + sC = HEAP[x2_sbox|tC] ^ HEAP[x3_sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[sbox|tB] ^ RCC; + sD = HEAP[sbox|tC] ^ HEAP[x2_sbox|t1] ^ HEAP[x3_sbox|t6] ^ HEAP[sbox|tB] ^ RCD; + sE = HEAP[sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[x2_sbox|t6] ^ HEAP[x3_sbox|tB] ^ RCE; + sF = HEAP[x3_sbox|tC] ^ HEAP[sbox|t1] ^ HEAP[sbox|t6] ^ HEAP[x2_sbox|tB] ^ RCF; + + // round 13 + t0 = HEAP[x2_sbox|s0] ^ HEAP[x3_sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[sbox|sF] ^ RD0; + t1 = HEAP[sbox|s0] ^ HEAP[x2_sbox|s5] ^ HEAP[x3_sbox|sA] ^ HEAP[sbox|sF] ^ RD1; + t2 = HEAP[sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[x2_sbox|sA] ^ HEAP[x3_sbox|sF] ^ RD2; + t3 = HEAP[x3_sbox|s0] ^ HEAP[sbox|s5] ^ HEAP[sbox|sA] ^ HEAP[x2_sbox|sF] ^ RD3; + t4 = HEAP[x2_sbox|s4] ^ HEAP[x3_sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[sbox|s3] ^ RD4; + t5 = HEAP[sbox|s4] ^ HEAP[x2_sbox|s9] ^ HEAP[x3_sbox|sE] ^ HEAP[sbox|s3] ^ RD5; + t6 = HEAP[sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[x2_sbox|sE] ^ HEAP[x3_sbox|s3] ^ RD6; + t7 = HEAP[x3_sbox|s4] ^ HEAP[sbox|s9] ^ HEAP[sbox|sE] ^ HEAP[x2_sbox|s3] ^ RD7; + t8 = HEAP[x2_sbox|s8] ^ HEAP[x3_sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[sbox|s7] ^ RD8; + t9 = HEAP[sbox|s8] ^ HEAP[x2_sbox|sD] ^ HEAP[x3_sbox|s2] ^ HEAP[sbox|s7] ^ RD9; + tA = HEAP[sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[x2_sbox|s2] ^ HEAP[x3_sbox|s7] ^ RDA; + tB = HEAP[x3_sbox|s8] ^ HEAP[sbox|sD] ^ HEAP[sbox|s2] ^ HEAP[x2_sbox|s7] ^ RDB; + tC = HEAP[x2_sbox|sC] ^ HEAP[x3_sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[sbox|sB] ^ RDC; + tD = HEAP[sbox|sC] ^ HEAP[x2_sbox|s1] ^ HEAP[x3_sbox|s6] ^ HEAP[sbox|sB] ^ RDD; + tE = HEAP[sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[x2_sbox|s6] ^ HEAP[x3_sbox|sB] ^ RDE; + tF = HEAP[x3_sbox|sC] ^ HEAP[sbox|s1] ^ HEAP[sbox|s6] ^ HEAP[x2_sbox|sB] ^ RDF; + + // round 14 + S0 = HEAP[sbox|t0] ^ RE0; + S1 = HEAP[sbox|t5] ^ RE1; + S2 = HEAP[sbox|tA] ^ RE2; + S3 = HEAP[sbox|tF] ^ RE3; + S4 = HEAP[sbox|t4] ^ RE4; + S5 = HEAP[sbox|t9] ^ RE5; + S6 = HEAP[sbox|tE] ^ RE6; + S7 = HEAP[sbox|t3] ^ RE7; + S8 = HEAP[sbox|t8] ^ RE8; + S9 = HEAP[sbox|tD] ^ RE9; + SA = HEAP[sbox|t2] ^ REA; + SB = HEAP[sbox|t7] ^ REB; + SC = HEAP[sbox|tC] ^ REC; + SD = HEAP[sbox|t1] ^ RED; + SE = HEAP[sbox|t6] ^ REE; + SF = HEAP[sbox|tB] ^ REF; + } + + function _decrypt ( s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF ) { + s0 = s0 | 0; + s1 = s1 | 0; + s2 = s2 | 0; + s3 = s3 | 0; + s4 = s4 | 0; + s5 = s5 | 0; + s6 = s6 | 0; + s7 = s7 | 0; + s8 = s8 | 0; + s9 = s9 | 0; + sA = sA | 0; + sB = sB | 0; + sC = sC | 0; + sD = sD | 0; + sE = sE | 0; + sF = sF | 0; + + var t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, tA = 0, tB = 0, tC = 0, tD = 0, tE = 0, tF = 0, + inv_sbox = 0x100, x9 = 0x400, xB = 0x500, xD = 0x600, xE = 0x700; + + if ( (keySize|0) == 32 ) { + // round 14+13 + t0 = HEAP[inv_sbox|(s0 ^ RE0)] ^ RD0; + t1 = HEAP[inv_sbox|(sD ^ RED)] ^ RD1; + t2 = HEAP[inv_sbox|(sA ^ REA)] ^ RD2; + t3 = HEAP[inv_sbox|(s7 ^ RE7)] ^ RD3; + t4 = HEAP[inv_sbox|(s4 ^ RE4)] ^ RD4; + t5 = HEAP[inv_sbox|(s1 ^ RE1)] ^ RD5; + t6 = HEAP[inv_sbox|(sE ^ REE)] ^ RD6; + t7 = HEAP[inv_sbox|(sB ^ REB)] ^ RD7; + t8 = HEAP[inv_sbox|(s8 ^ RE8)] ^ RD8; + t9 = HEAP[inv_sbox|(s5 ^ RE5)] ^ RD9; + tA = HEAP[inv_sbox|(s2 ^ RE2)] ^ RDA; + tB = HEAP[inv_sbox|(sF ^ REF)] ^ RDB; + tC = HEAP[inv_sbox|(sC ^ REC)] ^ RDC; + tD = HEAP[inv_sbox|(s9 ^ RE9)] ^ RDD; + tE = HEAP[inv_sbox|(s6 ^ RE6)] ^ RDE; + tF = HEAP[inv_sbox|(s3 ^ RE3)] ^ RDF; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 12 + t0 = HEAP[inv_sbox|s0] ^ RC0; + t1 = HEAP[inv_sbox|s1] ^ RC1; + t2 = HEAP[inv_sbox|s2] ^ RC2; + t3 = HEAP[inv_sbox|s3] ^ RC3; + t4 = HEAP[inv_sbox|s4] ^ RC4; + t5 = HEAP[inv_sbox|s5] ^ RC5; + t6 = HEAP[inv_sbox|s6] ^ RC6; + t7 = HEAP[inv_sbox|s7] ^ RC7; + t8 = HEAP[inv_sbox|s8] ^ RC8; + t9 = HEAP[inv_sbox|s9] ^ RC9; + tA = HEAP[inv_sbox|sA] ^ RCA; + tB = HEAP[inv_sbox|sB] ^ RCB; + tC = HEAP[inv_sbox|sC] ^ RCC; + tD = HEAP[inv_sbox|sD] ^ RCD; + tE = HEAP[inv_sbox|sE] ^ RCE; + tF = HEAP[inv_sbox|sF] ^ RCF; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 11 + t0 = HEAP[inv_sbox|s0] ^ RB0; + t1 = HEAP[inv_sbox|s1] ^ RB1; + t2 = HEAP[inv_sbox|s2] ^ RB2; + t3 = HEAP[inv_sbox|s3] ^ RB3; + t4 = HEAP[inv_sbox|s4] ^ RB4; + t5 = HEAP[inv_sbox|s5] ^ RB5; + t6 = HEAP[inv_sbox|s6] ^ RB6; + t7 = HEAP[inv_sbox|s7] ^ RB7; + t8 = HEAP[inv_sbox|s8] ^ RB8; + t9 = HEAP[inv_sbox|s9] ^ RB9; + tA = HEAP[inv_sbox|sA] ^ RBA; + tB = HEAP[inv_sbox|sB] ^ RBB; + tC = HEAP[inv_sbox|sC] ^ RBC; + tD = HEAP[inv_sbox|sD] ^ RBD; + tE = HEAP[inv_sbox|sE] ^ RBE; + tF = HEAP[inv_sbox|sF] ^ RBF; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 10 + t0 = HEAP[inv_sbox|s0] ^ RA0; + t1 = HEAP[inv_sbox|s1] ^ RA1; + t2 = HEAP[inv_sbox|s2] ^ RA2; + t3 = HEAP[inv_sbox|s3] ^ RA3; + t4 = HEAP[inv_sbox|s4] ^ RA4; + t5 = HEAP[inv_sbox|s5] ^ RA5; + t6 = HEAP[inv_sbox|s6] ^ RA6; + t7 = HEAP[inv_sbox|s7] ^ RA7; + t8 = HEAP[inv_sbox|s8] ^ RA8; + t9 = HEAP[inv_sbox|s9] ^ RA9; + tA = HEAP[inv_sbox|sA] ^ RAA; + tB = HEAP[inv_sbox|sB] ^ RAB; + tC = HEAP[inv_sbox|sC] ^ RAC; + tD = HEAP[inv_sbox|sD] ^ RAD; + tE = HEAP[inv_sbox|sE] ^ RAE; + tF = HEAP[inv_sbox|sF] ^ RAF; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 9 + t0 = HEAP[inv_sbox|s0] ^ R90; + t1 = HEAP[inv_sbox|s1] ^ R91; + t2 = HEAP[inv_sbox|s2] ^ R92; + t3 = HEAP[inv_sbox|s3] ^ R93; + t4 = HEAP[inv_sbox|s4] ^ R94; + t5 = HEAP[inv_sbox|s5] ^ R95; + t6 = HEAP[inv_sbox|s6] ^ R96; + t7 = HEAP[inv_sbox|s7] ^ R97; + t8 = HEAP[inv_sbox|s8] ^ R98; + t9 = HEAP[inv_sbox|s9] ^ R99; + tA = HEAP[inv_sbox|sA] ^ R9A; + tB = HEAP[inv_sbox|sB] ^ R9B; + tC = HEAP[inv_sbox|sC] ^ R9C; + tD = HEAP[inv_sbox|sD] ^ R9D; + tE = HEAP[inv_sbox|sE] ^ R9E; + tF = HEAP[inv_sbox|sF] ^ R9F; + } + else { + // round 10 + t0 = HEAP[inv_sbox|(s0 ^ RA0)] ^ R90; + t1 = HEAP[inv_sbox|(sD ^ RAD)] ^ R91; + t2 = HEAP[inv_sbox|(sA ^ RAA)] ^ R92; + t3 = HEAP[inv_sbox|(s7 ^ RA7)] ^ R93; + t4 = HEAP[inv_sbox|(s4 ^ RA4)] ^ R94; + t5 = HEAP[inv_sbox|(s1 ^ RA1)] ^ R95; + t6 = HEAP[inv_sbox|(sE ^ RAE)] ^ R96; + t7 = HEAP[inv_sbox|(sB ^ RAB)] ^ R97; + t8 = HEAP[inv_sbox|(s8 ^ RA8)] ^ R98; + t9 = HEAP[inv_sbox|(s5 ^ RA5)] ^ R99; + tA = HEAP[inv_sbox|(s2 ^ RA2)] ^ R9A; + tB = HEAP[inv_sbox|(sF ^ RAF)] ^ R9B; + tC = HEAP[inv_sbox|(sC ^ RAC)] ^ R9C; + tD = HEAP[inv_sbox|(s9 ^ RA9)] ^ R9D; + tE = HEAP[inv_sbox|(s6 ^ RA6)] ^ R9E; + tF = HEAP[inv_sbox|(s3 ^ RA3)] ^ R9F; + } + + // round 9 + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 8 + t0 = HEAP[inv_sbox|s0] ^ R80; + t1 = HEAP[inv_sbox|s1] ^ R81; + t2 = HEAP[inv_sbox|s2] ^ R82; + t3 = HEAP[inv_sbox|s3] ^ R83; + t4 = HEAP[inv_sbox|s4] ^ R84; + t5 = HEAP[inv_sbox|s5] ^ R85; + t6 = HEAP[inv_sbox|s6] ^ R86; + t7 = HEAP[inv_sbox|s7] ^ R87; + t8 = HEAP[inv_sbox|s8] ^ R88; + t9 = HEAP[inv_sbox|s9] ^ R89; + tA = HEAP[inv_sbox|sA] ^ R8A; + tB = HEAP[inv_sbox|sB] ^ R8B; + tC = HEAP[inv_sbox|sC] ^ R8C; + tD = HEAP[inv_sbox|sD] ^ R8D; + tE = HEAP[inv_sbox|sE] ^ R8E; + tF = HEAP[inv_sbox|sF] ^ R8F; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 7 + t0 = HEAP[inv_sbox|s0] ^ R70; + t1 = HEAP[inv_sbox|s1] ^ R71; + t2 = HEAP[inv_sbox|s2] ^ R72; + t3 = HEAP[inv_sbox|s3] ^ R73; + t4 = HEAP[inv_sbox|s4] ^ R74; + t5 = HEAP[inv_sbox|s5] ^ R75; + t6 = HEAP[inv_sbox|s6] ^ R76; + t7 = HEAP[inv_sbox|s7] ^ R77; + t8 = HEAP[inv_sbox|s8] ^ R78; + t9 = HEAP[inv_sbox|s9] ^ R79; + tA = HEAP[inv_sbox|sA] ^ R7A; + tB = HEAP[inv_sbox|sB] ^ R7B; + tC = HEAP[inv_sbox|sC] ^ R7C; + tD = HEAP[inv_sbox|sD] ^ R7D; + tE = HEAP[inv_sbox|sE] ^ R7E; + tF = HEAP[inv_sbox|sF] ^ R7F; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 6 + t0 = HEAP[inv_sbox|s0] ^ R60; + t1 = HEAP[inv_sbox|s1] ^ R61; + t2 = HEAP[inv_sbox|s2] ^ R62; + t3 = HEAP[inv_sbox|s3] ^ R63; + t4 = HEAP[inv_sbox|s4] ^ R64; + t5 = HEAP[inv_sbox|s5] ^ R65; + t6 = HEAP[inv_sbox|s6] ^ R66; + t7 = HEAP[inv_sbox|s7] ^ R67; + t8 = HEAP[inv_sbox|s8] ^ R68; + t9 = HEAP[inv_sbox|s9] ^ R69; + tA = HEAP[inv_sbox|sA] ^ R6A; + tB = HEAP[inv_sbox|sB] ^ R6B; + tC = HEAP[inv_sbox|sC] ^ R6C; + tD = HEAP[inv_sbox|sD] ^ R6D; + tE = HEAP[inv_sbox|sE] ^ R6E; + tF = HEAP[inv_sbox|sF] ^ R6F; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 5 + t0 = HEAP[inv_sbox|s0] ^ R50; + t1 = HEAP[inv_sbox|s1] ^ R51; + t2 = HEAP[inv_sbox|s2] ^ R52; + t3 = HEAP[inv_sbox|s3] ^ R53; + t4 = HEAP[inv_sbox|s4] ^ R54; + t5 = HEAP[inv_sbox|s5] ^ R55; + t6 = HEAP[inv_sbox|s6] ^ R56; + t7 = HEAP[inv_sbox|s7] ^ R57; + t8 = HEAP[inv_sbox|s8] ^ R58; + t9 = HEAP[inv_sbox|s9] ^ R59; + tA = HEAP[inv_sbox|sA] ^ R5A; + tB = HEAP[inv_sbox|sB] ^ R5B; + tC = HEAP[inv_sbox|sC] ^ R5C; + tD = HEAP[inv_sbox|sD] ^ R5D; + tE = HEAP[inv_sbox|sE] ^ R5E; + tF = HEAP[inv_sbox|sF] ^ R5F; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 4 + t0 = HEAP[inv_sbox|s0] ^ R40; + t1 = HEAP[inv_sbox|s1] ^ R41; + t2 = HEAP[inv_sbox|s2] ^ R42; + t3 = HEAP[inv_sbox|s3] ^ R43; + t4 = HEAP[inv_sbox|s4] ^ R44; + t5 = HEAP[inv_sbox|s5] ^ R45; + t6 = HEAP[inv_sbox|s6] ^ R46; + t7 = HEAP[inv_sbox|s7] ^ R47; + t8 = HEAP[inv_sbox|s8] ^ R48; + t9 = HEAP[inv_sbox|s9] ^ R49; + tA = HEAP[inv_sbox|sA] ^ R4A; + tB = HEAP[inv_sbox|sB] ^ R4B; + tC = HEAP[inv_sbox|sC] ^ R4C; + tD = HEAP[inv_sbox|sD] ^ R4D; + tE = HEAP[inv_sbox|sE] ^ R4E; + tF = HEAP[inv_sbox|sF] ^ R4F; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 3 + t0 = HEAP[inv_sbox|s0] ^ R30; + t1 = HEAP[inv_sbox|s1] ^ R31; + t2 = HEAP[inv_sbox|s2] ^ R32; + t3 = HEAP[inv_sbox|s3] ^ R33; + t4 = HEAP[inv_sbox|s4] ^ R34; + t5 = HEAP[inv_sbox|s5] ^ R35; + t6 = HEAP[inv_sbox|s6] ^ R36; + t7 = HEAP[inv_sbox|s7] ^ R37; + t8 = HEAP[inv_sbox|s8] ^ R38; + t9 = HEAP[inv_sbox|s9] ^ R39; + tA = HEAP[inv_sbox|sA] ^ R3A; + tB = HEAP[inv_sbox|sB] ^ R3B; + tC = HEAP[inv_sbox|sC] ^ R3C; + tD = HEAP[inv_sbox|sD] ^ R3D; + tE = HEAP[inv_sbox|sE] ^ R3E; + tF = HEAP[inv_sbox|sF] ^ R3F; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 2 + t0 = HEAP[inv_sbox|s0] ^ R20; + t1 = HEAP[inv_sbox|s1] ^ R21; + t2 = HEAP[inv_sbox|s2] ^ R22; + t3 = HEAP[inv_sbox|s3] ^ R23; + t4 = HEAP[inv_sbox|s4] ^ R24; + t5 = HEAP[inv_sbox|s5] ^ R25; + t6 = HEAP[inv_sbox|s6] ^ R26; + t7 = HEAP[inv_sbox|s7] ^ R27; + t8 = HEAP[inv_sbox|s8] ^ R28; + t9 = HEAP[inv_sbox|s9] ^ R29; + tA = HEAP[inv_sbox|sA] ^ R2A; + tB = HEAP[inv_sbox|sB] ^ R2B; + tC = HEAP[inv_sbox|sC] ^ R2C; + tD = HEAP[inv_sbox|sD] ^ R2D; + tE = HEAP[inv_sbox|sE] ^ R2E; + tF = HEAP[inv_sbox|sF] ^ R2F; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 1 + t0 = HEAP[inv_sbox|s0] ^ R10; + t1 = HEAP[inv_sbox|s1] ^ R11; + t2 = HEAP[inv_sbox|s2] ^ R12; + t3 = HEAP[inv_sbox|s3] ^ R13; + t4 = HEAP[inv_sbox|s4] ^ R14; + t5 = HEAP[inv_sbox|s5] ^ R15; + t6 = HEAP[inv_sbox|s6] ^ R16; + t7 = HEAP[inv_sbox|s7] ^ R17; + t8 = HEAP[inv_sbox|s8] ^ R18; + t9 = HEAP[inv_sbox|s9] ^ R19; + tA = HEAP[inv_sbox|sA] ^ R1A; + tB = HEAP[inv_sbox|sB] ^ R1B; + tC = HEAP[inv_sbox|sC] ^ R1C; + tD = HEAP[inv_sbox|sD] ^ R1D; + tE = HEAP[inv_sbox|sE] ^ R1E; + tF = HEAP[inv_sbox|sF] ^ R1F; + s0 = HEAP[xE|t0] ^ HEAP[xB|t1] ^ HEAP[xD|t2] ^ HEAP[x9|t3]; + s1 = HEAP[x9|tC] ^ HEAP[xE|tD] ^ HEAP[xB|tE] ^ HEAP[xD|tF]; + s2 = HEAP[xD|t8] ^ HEAP[x9|t9] ^ HEAP[xE|tA] ^ HEAP[xB|tB]; + s3 = HEAP[xB|t4] ^ HEAP[xD|t5] ^ HEAP[x9|t6] ^ HEAP[xE|t7]; + s4 = HEAP[xE|t4] ^ HEAP[xB|t5] ^ HEAP[xD|t6] ^ HEAP[x9|t7]; + s5 = HEAP[x9|t0] ^ HEAP[xE|t1] ^ HEAP[xB|t2] ^ HEAP[xD|t3]; + s6 = HEAP[xD|tC] ^ HEAP[x9|tD] ^ HEAP[xE|tE] ^ HEAP[xB|tF]; + s7 = HEAP[xB|t8] ^ HEAP[xD|t9] ^ HEAP[x9|tA] ^ HEAP[xE|tB]; + s8 = HEAP[xE|t8] ^ HEAP[xB|t9] ^ HEAP[xD|tA] ^ HEAP[x9|tB]; + s9 = HEAP[x9|t4] ^ HEAP[xE|t5] ^ HEAP[xB|t6] ^ HEAP[xD|t7]; + sA = HEAP[xD|t0] ^ HEAP[x9|t1] ^ HEAP[xE|t2] ^ HEAP[xB|t3]; + sB = HEAP[xB|tC] ^ HEAP[xD|tD] ^ HEAP[x9|tE] ^ HEAP[xE|tF]; + sC = HEAP[xE|tC] ^ HEAP[xB|tD] ^ HEAP[xD|tE] ^ HEAP[x9|tF]; + sD = HEAP[x9|t8] ^ HEAP[xE|t9] ^ HEAP[xB|tA] ^ HEAP[xD|tB]; + sE = HEAP[xD|t4] ^ HEAP[x9|t5] ^ HEAP[xE|t6] ^ HEAP[xB|t7]; + sF = HEAP[xB|t0] ^ HEAP[xD|t1] ^ HEAP[x9|t2] ^ HEAP[xE|t3]; + + // round 0 + S0 = HEAP[inv_sbox|s0] ^ R00; + S1 = HEAP[inv_sbox|s1] ^ R01; + S2 = HEAP[inv_sbox|s2] ^ R02; + S3 = HEAP[inv_sbox|s3] ^ R03; + S4 = HEAP[inv_sbox|s4] ^ R04; + S5 = HEAP[inv_sbox|s5] ^ R05; + S6 = HEAP[inv_sbox|s6] ^ R06; + S7 = HEAP[inv_sbox|s7] ^ R07; + S8 = HEAP[inv_sbox|s8] ^ R08; + S9 = HEAP[inv_sbox|s9] ^ R09; + SA = HEAP[inv_sbox|sA] ^ R0A; + SB = HEAP[inv_sbox|sB] ^ R0B; + SC = HEAP[inv_sbox|sC] ^ R0C; + SD = HEAP[inv_sbox|sD] ^ R0D; + SE = HEAP[inv_sbox|sE] ^ R0E; + SF = HEAP[inv_sbox|sF] ^ R0F; + } + + function init_state ( s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF ) { + s0 = s0|0; + s1 = s1|0; + s2 = s2|0; + s3 = s3|0; + s4 = s4|0; + s5 = s5|0; + s6 = s6|0; + s7 = s7|0; + s8 = s8|0; + s9 = s9|0; + sA = sA|0; + sB = sB|0; + sC = sC|0; + sD = sD|0; + sE = sE|0; + sF = sF|0; + + S0 = s0; + S1 = s1; + S2 = s2; + S3 = s3; + S4 = s4; + S5 = s5; + S6 = s6; + S7 = s7; + S8 = s8; + S9 = s9; + SA = sA; + SB = sB; + SC = sC; + SD = sD; + SE = sE; + SF = sF; + } + + // offset - multiple of 16 + function save_state ( offset ) { + offset = offset|0; + + HEAP[offset] = S0; + HEAP[offset|1] = S1; + HEAP[offset|2] = S2; + HEAP[offset|3] = S3; + HEAP[offset|4] = S4; + HEAP[offset|5] = S5; + HEAP[offset|6] = S6; + HEAP[offset|7] = S7; + HEAP[offset|8] = S8; + HEAP[offset|9] = S9; + HEAP[offset|10] = SA; + HEAP[offset|11] = SB; + HEAP[offset|12] = SC; + HEAP[offset|13] = SD; + HEAP[offset|14] = SE; + HEAP[offset|15] = SF; + } + + function init_key_128 ( k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, kA, kB, kC, kD, kE, kF ) { + k0 = k0|0; + k1 = k1|0; + k2 = k2|0; + k3 = k3|0; + k4 = k4|0; + k5 = k5|0; + k6 = k6|0; + k7 = k7|0; + k8 = k8|0; + k9 = k9|0; + kA = kA|0; + kB = kB|0; + kC = kC|0; + kD = kD|0; + kE = kE|0; + kF = kF|0; + + R00 = k0; + R01 = k1; + R02 = k2; + R03 = k3; + R04 = k4; + R05 = k5; + R06 = k6; + R07 = k7; + R08 = k8; + R09 = k9; + R0A = kA; + R0B = kB; + R0C = kC; + R0D = kD; + R0E = kE; + R0F = kF; + + keySize = 16; + + _expand_key_128(); + } + + function init_key_256 ( k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F ) { + k00 = k00|0; + k01 = k01|0; + k02 = k02|0; + k03 = k03|0; + k04 = k04|0; + k05 = k05|0; + k06 = k06|0; + k07 = k07|0; + k08 = k08|0; + k09 = k09|0; + k0A = k0A|0; + k0B = k0B|0; + k0C = k0C|0; + k0D = k0D|0; + k0E = k0E|0; + k0F = k0F|0; + k10 = k10|0; + k11 = k11|0; + k12 = k12|0; + k13 = k13|0; + k14 = k14|0; + k15 = k15|0; + k16 = k16|0; + k17 = k17|0; + k18 = k18|0; + k19 = k19|0; + k1A = k1A|0; + k1B = k1B|0; + k1C = k1C|0; + k1D = k1D|0; + k1E = k1E|0; + k1F = k1F|0; + + R00 = k00; + R01 = k01; + R02 = k02; + R03 = k03; + R04 = k04; + R05 = k05; + R06 = k06; + R07 = k07; + R08 = k08; + R09 = k09; + R0A = k0A; + R0B = k0B; + R0C = k0C; + R0D = k0D; + R0E = k0E; + R0F = k0F; + R10 = k10; + R11 = k11; + R12 = k12; + R13 = k13; + R14 = k14; + R15 = k15; + R16 = k16; + R17 = k17; + R18 = k18; + R19 = k19; + R1A = k1A; + R1B = k1B; + R1C = k1C; + R1D = k1D; + R1E = k1E; + R1F = k1F; + + keySize = 32; + + _expand_key_256(); + } + + // offset, length - multiple of 16 + function ecb_encrypt ( offset, length ) { + offset = offset|0; + length = length|0; + + var encrypted = 0; + + if ( offset & 15 ) + return -1; + + while ( (length|0) >= 16 ) { + _encrypt( + HEAP[offset]|0, + HEAP[offset|1]|0, + HEAP[offset|2]|0, + HEAP[offset|3]|0, + HEAP[offset|4]|0, + HEAP[offset|5]|0, + HEAP[offset|6]|0, + HEAP[offset|7]|0, + HEAP[offset|8]|0, + HEAP[offset|9]|0, + HEAP[offset|10]|0, + HEAP[offset|11]|0, + HEAP[offset|12]|0, + HEAP[offset|13]|0, + HEAP[offset|14]|0, + HEAP[offset|15]|0 + ); + + HEAP[offset] = S0; + HEAP[offset|1] = S1; + HEAP[offset|2] = S2; + HEAP[offset|3] = S3; + HEAP[offset|4] = S4; + HEAP[offset|5] = S5; + HEAP[offset|6] = S6; + HEAP[offset|7] = S7; + HEAP[offset|8] = S8; + HEAP[offset|9] = S9; + HEAP[offset|10] = SA; + HEAP[offset|11] = SB; + HEAP[offset|12] = SC; + HEAP[offset|13] = SD; + HEAP[offset|14] = SE; + HEAP[offset|15] = SF; + + offset = (offset + 16)|0; + length = (length - 16)|0; + + encrypted = (encrypted + 16)|0; + } + + return encrypted|0; + } + + // offset, length - multiple of 16 + function ecb_decrypt ( offset, length ) { + offset = offset|0; + length = length|0; + + var decrypted = 0; + + if ( offset & 15 ) + return -1; + + while ( (length|0) >= 16 ) { + _decrypt( + HEAP[offset]|0, + HEAP[offset|1]|0, + HEAP[offset|2]|0, + HEAP[offset|3]|0, + HEAP[offset|4]|0, + HEAP[offset|5]|0, + HEAP[offset|6]|0, + HEAP[offset|7]|0, + HEAP[offset|8]|0, + HEAP[offset|9]|0, + HEAP[offset|10]|0, + HEAP[offset|11]|0, + HEAP[offset|12]|0, + HEAP[offset|13]|0, + HEAP[offset|14]|0, + HEAP[offset|15]|0 + ); + + HEAP[offset] = S0; + HEAP[offset|1] = S1; + HEAP[offset|2] = S2; + HEAP[offset|3] = S3; + HEAP[offset|4] = S4; + HEAP[offset|5] = S5; + HEAP[offset|6] = S6; + HEAP[offset|7] = S7; + HEAP[offset|8] = S8; + HEAP[offset|9] = S9; + HEAP[offset|10] = SA; + HEAP[offset|11] = SB; + HEAP[offset|12] = SC; + HEAP[offset|13] = SD; + HEAP[offset|14] = SE; + HEAP[offset|15] = SF; + + offset = (offset + 16)|0; + length = (length - 16)|0; + + decrypted = (decrypted + 16)|0; + } + + return decrypted|0; + } + + // offset, length - multiple of 16 + function cbc_encrypt ( offset, length ) { + offset = offset|0; + length = length|0; + + var encrypted = 0; + + if ( offset & 15 ) + return -1; + + while ( (length|0) >= 16 ) { + _encrypt( + S0 ^ HEAP[offset], + S1 ^ HEAP[offset|1], + S2 ^ HEAP[offset|2], + S3 ^ HEAP[offset|3], + S4 ^ HEAP[offset|4], + S5 ^ HEAP[offset|5], + S6 ^ HEAP[offset|6], + S7 ^ HEAP[offset|7], + S8 ^ HEAP[offset|8], + S9 ^ HEAP[offset|9], + SA ^ HEAP[offset|10], + SB ^ HEAP[offset|11], + SC ^ HEAP[offset|12], + SD ^ HEAP[offset|13], + SE ^ HEAP[offset|14], + SF ^ HEAP[offset|15] + ); + + HEAP[offset] = S0; + HEAP[offset|1] = S1; + HEAP[offset|2] = S2; + HEAP[offset|3] = S3; + HEAP[offset|4] = S4; + HEAP[offset|5] = S5; + HEAP[offset|6] = S6; + HEAP[offset|7] = S7; + HEAP[offset|8] = S8; + HEAP[offset|9] = S9; + HEAP[offset|10] = SA; + HEAP[offset|11] = SB; + HEAP[offset|12] = SC; + HEAP[offset|13] = SD; + HEAP[offset|14] = SE; + HEAP[offset|15] = SF; + + offset = (offset + 16)|0; + length = (length - 16)|0; + + encrypted = (encrypted + 16)|0; + } + + return encrypted|0; + } + + // offset, length - multiple of 16 + function cbc_decrypt ( offset, length ) { + offset = offset|0; + length = length|0; + + var iv0 = 0, iv1 = 0, iv2 = 0, iv3 = 0, iv4 = 0, iv5 = 0, iv6 = 0, iv7 = 0, iv8 = 0, iv9 = 0, ivA = 0, ivB = 0, ivC = 0, ivD = 0, ivE = 0, ivF = 0, + decrypted = 0; + + if ( offset & 15 ) + return -1; + + iv0 = S0; iv1 = S1; iv2 = S2; iv3 = S3; iv4 = S4; iv5 = S5; iv6 = S6; iv7 = S7; iv8 = S8; iv9 = S9; ivA = SA; ivB = SB; ivC = SC; ivD = SD; ivE = SE; ivF = SF; + + while ( (length|0) >= 16 ) { + _decrypt( + HEAP[offset]|0, + HEAP[offset|1]|0, + HEAP[offset|2]|0, + HEAP[offset|3]|0, + HEAP[offset|4]|0, + HEAP[offset|5]|0, + HEAP[offset|6]|0, + HEAP[offset|7]|0, + HEAP[offset|8]|0, + HEAP[offset|9]|0, + HEAP[offset|10]|0, + HEAP[offset|11]|0, + HEAP[offset|12]|0, + HEAP[offset|13]|0, + HEAP[offset|14]|0, + HEAP[offset|15]|0 + ); + + S0 = S0 ^ iv0; iv0 = HEAP[offset]|0; + S1 = S1 ^ iv1; iv1 = HEAP[offset|1]|0; + S2 = S2 ^ iv2; iv2 = HEAP[offset|2]|0; + S3 = S3 ^ iv3; iv3 = HEAP[offset|3]|0; + S4 = S4 ^ iv4; iv4 = HEAP[offset|4]|0; + S5 = S5 ^ iv5; iv5 = HEAP[offset|5]|0; + S6 = S6 ^ iv6; iv6 = HEAP[offset|6]|0; + S7 = S7 ^ iv7; iv7 = HEAP[offset|7]|0; + S8 = S8 ^ iv8; iv8 = HEAP[offset|8]|0; + S9 = S9 ^ iv9; iv9 = HEAP[offset|9]|0; + SA = SA ^ ivA; ivA = HEAP[offset|10]|0; + SB = SB ^ ivB; ivB = HEAP[offset|11]|0; + SC = SC ^ ivC; ivC = HEAP[offset|12]|0; + SD = SD ^ ivD; ivD = HEAP[offset|13]|0; + SE = SE ^ ivE; ivE = HEAP[offset|14]|0; + SF = SF ^ ivF; ivF = HEAP[offset|15]|0; + + HEAP[offset] = S0; + HEAP[offset|1] = S1; + HEAP[offset|2] = S2; + HEAP[offset|3] = S3; + HEAP[offset|4] = S4; + HEAP[offset|5] = S5; + HEAP[offset|6] = S6; + HEAP[offset|7] = S7; + HEAP[offset|8] = S8; + HEAP[offset|9] = S9; + HEAP[offset|10] = SA; + HEAP[offset|11] = SB; + HEAP[offset|12] = SC; + HEAP[offset|13] = SD; + HEAP[offset|14] = SE; + HEAP[offset|15] = SF; + + offset = (offset + 16)|0; + length = (length - 16)|0; + + decrypted = (decrypted + 16)|0; + } + + S0 = iv0; S1 = iv1; S2 = iv2; S3 = iv3; S4 = iv4; S5 = iv5; S6 = iv6; S7 = iv7; S8 = iv8; S9 = iv9; SA = ivA; SB = ivB; SC = ivC; SD = ivD; SE = ivE; SF = ivF; + + return decrypted|0; + } + + // offset, length, output - multiple of 16 + function cbc_mac ( offset, length, output ) { + offset = offset|0; + length = length|0; + output = output|0; + + if ( offset & 15 ) + return -1; + + if ( ~output ) + if ( output & 31 ) + return -1; + + while ( (length|0) >= 16 ) { + _encrypt( + S0 ^ HEAP[offset], + S1 ^ HEAP[offset|1], + S2 ^ HEAP[offset|2], + S3 ^ HEAP[offset|3], + S4 ^ HEAP[offset|4], + S5 ^ HEAP[offset|5], + S6 ^ HEAP[offset|6], + S7 ^ HEAP[offset|7], + S8 ^ HEAP[offset|8], + S9 ^ HEAP[offset|9], + SA ^ HEAP[offset|10], + SB ^ HEAP[offset|11], + SC ^ HEAP[offset|12], + SD ^ HEAP[offset|13], + SE ^ HEAP[offset|14], + SF ^ HEAP[offset|15] + ); + + offset = (offset + 16)|0; + length = (length - 16)|0; + } + if ( (length|0) > 0 ) { + S0 = S0 ^ HEAP[offset]; + if ( (length|0) > 1 ) S1 = S1 ^ HEAP[offset|1]; + if ( (length|0) > 2 ) S2 = S2 ^ HEAP[offset|2]; + if ( (length|0) > 3 ) S3 = S3 ^ HEAP[offset|3]; + if ( (length|0) > 4 ) S4 = S4 ^ HEAP[offset|4]; + if ( (length|0) > 5 ) S5 = S5 ^ HEAP[offset|5]; + if ( (length|0) > 6 ) S6 = S6 ^ HEAP[offset|6]; + if ( (length|0) > 7 ) S7 = S7 ^ HEAP[offset|7]; + if ( (length|0) > 8 ) S8 = S8 ^ HEAP[offset|8]; + if ( (length|0) > 9 ) S9 = S9 ^ HEAP[offset|9]; + if ( (length|0) > 10 ) SA = SA ^ HEAP[offset|10]; + if ( (length|0) > 11 ) SB = SB ^ HEAP[offset|11]; + if ( (length|0) > 12 ) SC = SC ^ HEAP[offset|12]; + if ( (length|0) > 13 ) SD = SD ^ HEAP[offset|13]; + if ( (length|0) > 14 ) SE = SE ^ HEAP[offset|14]; + + _encrypt( S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF ); + + offset = (offset + length)|0; + length = 0; + } + + if ( ~output ) { + HEAP[output|0] = S0; + HEAP[output|1] = S1; + HEAP[output|2] = S2; + HEAP[output|3] = S3; + HEAP[output|4] = S4; + HEAP[output|5] = S5; + HEAP[output|6] = S6; + HEAP[output|7] = S7; + HEAP[output|8] = S8; + HEAP[output|9] = S9; + HEAP[output|10] = SA; + HEAP[output|11] = SB; + HEAP[output|12] = SC; + HEAP[output|13] = SD; + HEAP[output|14] = SE; + HEAP[output|15] = SF; + } + + return 0; + } + + // offset, length - multiple of 16 + function ctr_encrypt ( offset, length, n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, nA, nB, nCDEF ) { + offset = offset|0; + length = length|0; + n0 = n0|0; + n1 = n1|0; + n2 = n2|0; + n3 = n3|0; + n4 = n4|0; + n5 = n5|0; + n6 = n6|0; + n7 = n7|0; + n8 = n8|0; + n9 = n9|0; + nA = nA|0; + nB = nB|0; + nCDEF = nCDEF|0; + + var encrypted = 0; + + while ( (length|0) >= 16 ) { + _encrypt( + n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, nA, nB, + nCDEF >>> 24, + nCDEF >>> 16 & 255, + nCDEF >>> 8 & 255, + nCDEF & 255 + ); + + HEAP[offset|0] = HEAP[offset|0] ^ S0; + HEAP[offset|1] = HEAP[offset|1] ^ S1; + HEAP[offset|2] = HEAP[offset|2] ^ S2; + HEAP[offset|3] = HEAP[offset|3] ^ S3; + HEAP[offset|4] = HEAP[offset|4] ^ S4; + HEAP[offset|5] = HEAP[offset|5] ^ S5; + HEAP[offset|6] = HEAP[offset|6] ^ S6; + HEAP[offset|7] = HEAP[offset|7] ^ S7; + HEAP[offset|8] = HEAP[offset|8] ^ S8; + HEAP[offset|9] = HEAP[offset|9] ^ S9; + HEAP[offset|10] = HEAP[offset|10] ^ SA; + HEAP[offset|11] = HEAP[offset|11] ^ SB; + HEAP[offset|12] = HEAP[offset|12] ^ SC; + HEAP[offset|13] = HEAP[offset|13] ^ SD; + HEAP[offset|14] = HEAP[offset|14] ^ SE; + HEAP[offset|15] = HEAP[offset|15] ^ SF; + + offset = (offset + 16)|0; + length = (length - 16)|0; + + encrypted = (encrypted + 16)|0; + nCDEF = (nCDEF + 1)|0; + } + + return encrypted|0; + } + + // offset, length, output - multiple of 16 + function ccm_encrypt ( offset, length, nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8, nonce9, nonceA, nonceB, nonceC, nonceD, counter0, counter1 ) { + offset = offset|0; + length = length|0; + nonce0 = nonce0|0; + nonce1 = nonce1|0; + nonce2 = nonce2|0; + nonce3 = nonce3|0; + nonce4 = nonce4|0; + nonce5 = nonce5|0; + nonce6 = nonce6|0; + nonce7 = nonce7|0; + nonce8 = nonce8|0; + nonce9 = nonce9|0; + nonceA = nonceA|0; + nonceB = nonceB|0; + nonceC = nonceC|0; + nonceD = nonceD|0; + counter0 = counter0|0; + counter1 = counter1|0; + + var iv0 = 0, iv1 = 0, iv2 = 0, iv3 = 0, iv4 = 0, iv5 = 0, iv6 = 0, iv7 = 0, iv8 = 0, iv9 = 0, ivA = 0, ivB = 0, ivC = 0, ivD = 0, ivE = 0, ivF = 0, + s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0, s7 = 0, s8 = 0, s9 = 0, sA = 0, sB = 0, sC = 0, sD = 0, sE = 0, sF = 0, + encrypted = 0; + + if ( offset & 15 ) + return -1; + + iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7, iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF; + + while ( (length|0) >= 16 ) { + s0 = HEAP[offset]|0; + s1 = HEAP[offset|1]|0; + s2 = HEAP[offset|2]|0; + s3 = HEAP[offset|3]|0; + s4 = HEAP[offset|4]|0; + s5 = HEAP[offset|5]|0; + s6 = HEAP[offset|6]|0; + s7 = HEAP[offset|7]|0; + s8 = HEAP[offset|8]|0; + s9 = HEAP[offset|9]|0; + sA = HEAP[offset|10]|0; + sB = HEAP[offset|11]|0; + sC = HEAP[offset|12]|0; + sD = HEAP[offset|13]|0; + sE = HEAP[offset|14]|0; + sF = HEAP[offset|15]|0; + + // + // Cipher + // + + _encrypt( + nonce0, + nonce1, + nonce2, + nonce3, + nonce4, + nonce5, + nonce6, + nonce7, + nonce8 ^ (counter0>>>24), + nonce9 ^ (counter0>>>16&255), + nonceA ^ (counter0>>>8&255), + nonceB ^ (counter0&255), + nonceC ^ (counter1>>>24), + nonceD ^ (counter1>>>16&255), + counter1>>>8&255, + counter1&255 + ); + + HEAP[offset] = s0 ^ S0; + HEAP[offset|1] = s1 ^ S1; + HEAP[offset|2] = s2 ^ S2; + HEAP[offset|3] = s3 ^ S3; + HEAP[offset|4] = s4 ^ S4; + HEAP[offset|5] = s5 ^ S5; + HEAP[offset|6] = s6 ^ S6; + HEAP[offset|7] = s7 ^ S7; + HEAP[offset|8] = s8 ^ S8; + HEAP[offset|9] = s9 ^ S9; + HEAP[offset|10] = sA ^ SA; + HEAP[offset|11] = sB ^ SB; + HEAP[offset|12] = sC ^ SC; + HEAP[offset|13] = sD ^ SD; + HEAP[offset|14] = sE ^ SE; + HEAP[offset|15] = sF ^ SF; + + // + // MAC + // + + _encrypt( + s0 ^ iv0, + s1 ^ iv1, + s2 ^ iv2, + s3 ^ iv3, + s4 ^ iv4, + s5 ^ iv5, + s6 ^ iv6, + s7 ^ iv7, + s8 ^ iv8, + s9 ^ iv9, + sA ^ ivA, + sB ^ ivB, + sC ^ ivC, + sD ^ ivD, + sE ^ ivE, + sF ^ ivF + ); + + iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7, iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF; + + encrypted = (encrypted + 16)|0; + + offset = (offset + 16)|0; + length = (length - 16)|0; + + counter1 = (counter1 + 1)|0; + if ( (counter1|0) == 0 ) counter0 = (counter0 + 1)|0; + } + if ( (length|0) > 0 ) { + s0 = HEAP[offset]|0; + s1 = (length|0) > 1 ? HEAP[offset|1]|0 : 0; + s2 = (length|0) > 2 ? HEAP[offset|2]|0 : 0; + s3 = (length|0) > 3 ? HEAP[offset|3]|0 : 0; + s4 = (length|0) > 4 ? HEAP[offset|4]|0 : 0; + s5 = (length|0) > 5 ? HEAP[offset|5]|0 : 0; + s6 = (length|0) > 6 ? HEAP[offset|6]|0 : 0; + s7 = (length|0) > 7 ? HEAP[offset|7]|0 : 0; + s8 = (length|0) > 8 ? HEAP[offset|8]|0 : 0; + s9 = (length|0) > 9 ? HEAP[offset|9]|0 : 0; + sA = (length|0) > 10 ? HEAP[offset|10]|0 : 0; + sB = (length|0) > 11 ? HEAP[offset|11]|0 : 0; + sC = (length|0) > 12 ? HEAP[offset|12]|0 : 0; + sD = (length|0) > 13 ? HEAP[offset|13]|0 : 0; + sE = (length|0) > 14 ? HEAP[offset|14]|0 : 0; + //sF = 0; + + // + // Cipher + // + + _encrypt( + nonce0, + nonce1, + nonce2, + nonce3, + nonce4, + nonce5, + nonce6, + nonce7, + nonce8 ^ (counter0>>>24), + nonce9 ^ (counter0>>>16&255), + nonceA ^ (counter0>>>8&255), + nonceB ^ (counter0&255), + nonceC ^ (counter1>>>24), + nonceD ^ (counter1>>>16&255), + counter1>>>8&255, + counter1&255 + ); + + HEAP[offset] = s0 ^ S0; + if ( (length|0) > 1 ) HEAP[offset|1] = s1 ^ S1; + if ( (length|0) > 2 ) HEAP[offset|2] = s2 ^ S2; + if ( (length|0) > 3 ) HEAP[offset|3] = s3 ^ S3; + if ( (length|0) > 4 ) HEAP[offset|4] = s4 ^ S4; + if ( (length|0) > 5 ) HEAP[offset|5] = s5 ^ S5; + if ( (length|0) > 6 ) HEAP[offset|6] = s6 ^ S6; + if ( (length|0) > 7 ) HEAP[offset|7] = s7 ^ S7; + if ( (length|0) > 8 ) HEAP[offset|8] = s8 ^ S8; + if ( (length|0) > 9 ) HEAP[offset|9] = s9 ^ S9; + if ( (length|0) > 10 ) HEAP[offset|10] = sA ^ SA; + if ( (length|0) > 11 ) HEAP[offset|11] = sB ^ SB; + if ( (length|0) > 12 ) HEAP[offset|12] = sC ^ SC; + if ( (length|0) > 13 ) HEAP[offset|13] = sD ^ SD; + if ( (length|0) > 14 ) HEAP[offset|14] = sE ^ SE; + //if ( 0 ) HEAP[offset|15] = sF ^ SF; + + // + // MAC + // + + _encrypt( + s0 ^ iv0, + s1 ^ iv1, + s2 ^ iv2, + s3 ^ iv3, + s4 ^ iv4, + s5 ^ iv5, + s6 ^ iv6, + s7 ^ iv7, + s8 ^ iv8, + s9 ^ iv9, + sA ^ ivA, + sB ^ ivB, + sC ^ ivC, + sD ^ ivD, + sE ^ ivE, + ivF // sF = 0 + ); + + iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7, iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF; + + encrypted = (encrypted + length)|0; + + offset = (offset + length)|0; + length = 0; + + counter1 = (counter1 + 1)|0; + if ( (counter1|0) == 0 ) counter0 = (counter0 + 1)|0; + } + + return encrypted|0; + } + + // offset, length, output - multiple of 16 + function ccm_decrypt ( offset, length, nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8, nonce9, nonceA, nonceB, nonceC, nonceD, counter0, counter1 ) { + offset = offset|0; + length = length|0; + nonce0 = nonce0|0; + nonce1 = nonce1|0; + nonce2 = nonce2|0; + nonce3 = nonce3|0; + nonce4 = nonce4|0; + nonce5 = nonce5|0; + nonce6 = nonce6|0; + nonce7 = nonce7|0; + nonce8 = nonce8|0; + nonce9 = nonce9|0; + nonceA = nonceA|0; + nonceB = nonceB|0; + nonceC = nonceC|0; + nonceD = nonceD|0; + counter0 = counter0|0; + counter1 = counter1|0; + + var iv0 = 0, iv1 = 0, iv2 = 0, iv3 = 0, iv4 = 0, iv5 = 0, iv6 = 0, iv7 = 0, iv8 = 0, iv9 = 0, ivA = 0, ivB = 0, ivC = 0, ivD = 0, ivE = 0, ivF = 0, + s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0, s7 = 0, s8 = 0, s9 = 0, sA = 0, sB = 0, sC = 0, sD = 0, sE = 0, sF = 0, + decrypted = 0; + + if ( offset & 15 ) + return -1; + + iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7, iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF; + + while ( (length|0) >= 16 ) { + // + // Cipher + // + + _encrypt( + nonce0, + nonce1, + nonce2, + nonce3, + nonce4, + nonce5, + nonce6, + nonce7, + nonce8 ^ (counter0>>>24), + nonce9 ^ (counter0>>>16&255), + nonceA ^ (counter0>>>8&255), + nonceB ^ (counter0&255), + nonceC ^ (counter1>>>24), + nonceD ^ (counter1>>>16&255), + counter1>>>8&255, + counter1&255 + ); + + HEAP[offset] = s0 = HEAP[offset] ^ S0; + HEAP[offset|1] = s1 = HEAP[offset|1] ^ S1; + HEAP[offset|2] = s2 = HEAP[offset|2] ^ S2; + HEAP[offset|3] = s3 = HEAP[offset|3] ^ S3; + HEAP[offset|4] = s4 = HEAP[offset|4] ^ S4; + HEAP[offset|5] = s5 = HEAP[offset|5] ^ S5; + HEAP[offset|6] = s6 = HEAP[offset|6] ^ S6; + HEAP[offset|7] = s7 = HEAP[offset|7] ^ S7; + HEAP[offset|8] = s8 = HEAP[offset|8] ^ S8; + HEAP[offset|9] = s9 = HEAP[offset|9] ^ S9; + HEAP[offset|10] = sA = HEAP[offset|10] ^ SA; + HEAP[offset|11] = sB = HEAP[offset|11] ^ SB; + HEAP[offset|12] = sC = HEAP[offset|12] ^ SC; + HEAP[offset|13] = sD = HEAP[offset|13] ^ SD; + HEAP[offset|14] = sE = HEAP[offset|14] ^ SE; + HEAP[offset|15] = sF = HEAP[offset|15] ^ SF; + + // + // MAC + // + + _encrypt( + s0 ^ iv0, + s1 ^ iv1, + s2 ^ iv2, + s3 ^ iv3, + s4 ^ iv4, + s5 ^ iv5, + s6 ^ iv6, + s7 ^ iv7, + s8 ^ iv8, + s9 ^ iv9, + sA ^ ivA, + sB ^ ivB, + sC ^ ivC, + sD ^ ivD, + sE ^ ivE, + sF ^ ivF + ); + + iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7, iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF; + + decrypted = (decrypted + 16)|0; + + offset = (offset + 16)|0; + length = (length - 16)|0; + + counter1 = (counter1 + 1)|0; + if ( (counter1|0) == 0 ) counter0 = (counter0 + 1)|0; + } + if ( (length|0) > 0 ) { + // + // Cipher + // + + _encrypt( + nonce0, + nonce1, + nonce2, + nonce3, + nonce4, + nonce5, + nonce6, + nonce7, + nonce8 ^ (counter0>>>24), + nonce9 ^ (counter0>>>16&255), + nonceA ^ (counter0>>>8&255), + nonceB ^ (counter0&255), + nonceC ^ (counter1>>>24), + nonceD ^ (counter1>>>16&255), + counter1>>>8&255, + counter1&255 + ); + + s0 = HEAP[offset] ^ S0; + s1 = (length|0) > 1 ? HEAP[offset|1] ^ S1 : 0; + s2 = (length|0) > 2 ? HEAP[offset|2] ^ S2 : 0; + s3 = (length|0) > 3 ? HEAP[offset|3] ^ S3 : 0; + s4 = (length|0) > 4 ? HEAP[offset|4] ^ S4 : 0; + s5 = (length|0) > 5 ? HEAP[offset|5] ^ S5 : 0; + s6 = (length|0) > 6 ? HEAP[offset|6] ^ S6 : 0; + s7 = (length|0) > 7 ? HEAP[offset|7] ^ S7 : 0; + s8 = (length|0) > 8 ? HEAP[offset|8] ^ S8 : 0; + s9 = (length|0) > 9 ? HEAP[offset|9] ^ S9 : 0; + sA = (length|0) > 10 ? HEAP[offset|10] ^ SA : 0; + sB = (length|0) > 11 ? HEAP[offset|11] ^ SB : 0; + sC = (length|0) > 12 ? HEAP[offset|12] ^ SC : 0; + sD = (length|0) > 13 ? HEAP[offset|13] ^ SD : 0; + sE = (length|0) > 14 ? HEAP[offset|14] ^ SE : 0; + sF = (length|0) > 15 ? HEAP[offset|15] ^ SF : 0; + + HEAP[offset] = s0; + if ( (length|0) > 1 ) HEAP[offset|1] = s1; + if ( (length|0) > 2 ) HEAP[offset|2] = s2; + if ( (length|0) > 3 ) HEAP[offset|3] = s3; + if ( (length|0) > 4 ) HEAP[offset|4] = s4; + if ( (length|0) > 5 ) HEAP[offset|5] = s5; + if ( (length|0) > 6 ) HEAP[offset|6] = s6; + if ( (length|0) > 7 ) HEAP[offset|7] = s7; + if ( (length|0) > 8 ) HEAP[offset|8] = s8; + if ( (length|0) > 9 ) HEAP[offset|9] = s9; + if ( (length|0) > 10 ) HEAP[offset|10] = sA; + if ( (length|0) > 11 ) HEAP[offset|11] = sB; + if ( (length|0) > 12 ) HEAP[offset|12] = sC; + if ( (length|0) > 13 ) HEAP[offset|13] = sD; + if ( (length|0) > 14 ) HEAP[offset|14] = sE; + //if ( (length|0) > 15 ) HEAP[offset|15] = sF; + + // + // MAC + // + + _encrypt( + s0 ^ iv0, + s1 ^ iv1, + s2 ^ iv2, + s3 ^ iv3, + s4 ^ iv4, + s5 ^ iv5, + s6 ^ iv6, + s7 ^ iv7, + s8 ^ iv8, + s9 ^ iv9, + sA ^ ivA, + sB ^ ivB, + sC ^ ivC, + sD ^ ivD, + sE ^ ivE, + sF ^ ivF + ); + + iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7, iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF; + + decrypted = (decrypted + length)|0; + + offset = (offset + length)|0; + length = 0; + + counter1 = (counter1 + 1)|0; + if ( (counter1|0) == 0 ) counter0 = (counter0 + 1)|0; + } + + return decrypted|0; + } + + // offset, length - multiple of 16 + function cfb_encrypt ( offset, length ) { + offset = offset|0; + length = length|0; + + var encrypted = 0; + + if ( offset & 15 ) + return -1; + + while ( (length|0) >= 16 ) { + _encrypt( + S0, + S1, + S2, + S3, + S4, + S5, + S6, + S7, + S8, + S9, + SA, + SB, + SC, + SD, + SE, + SF + ); + + S0 = S0 ^ HEAP[offset]; + S1 = S1 ^ HEAP[offset|1]; + S2 = S2 ^ HEAP[offset|2]; + S3 = S3 ^ HEAP[offset|3]; + S4 = S4 ^ HEAP[offset|4]; + S5 = S5 ^ HEAP[offset|5]; + S6 = S6 ^ HEAP[offset|6]; + S7 = S7 ^ HEAP[offset|7]; + S8 = S8 ^ HEAP[offset|8]; + S9 = S9 ^ HEAP[offset|9]; + SA = SA ^ HEAP[offset|10]; + SB = SB ^ HEAP[offset|11]; + SC = SC ^ HEAP[offset|12]; + SD = SD ^ HEAP[offset|13]; + SE = SE ^ HEAP[offset|14]; + SF = SF ^ HEAP[offset|15]; + + HEAP[offset] = S0; + HEAP[offset|1] = S1; + HEAP[offset|2] = S2; + HEAP[offset|3] = S3; + HEAP[offset|4] = S4; + HEAP[offset|5] = S5; + HEAP[offset|6] = S6; + HEAP[offset|7] = S7; + HEAP[offset|8] = S8; + HEAP[offset|9] = S9; + HEAP[offset|10] = SA; + HEAP[offset|11] = SB; + HEAP[offset|12] = SC; + HEAP[offset|13] = SD; + HEAP[offset|14] = SE; + HEAP[offset|15] = SF; + + offset = (offset + 16)|0; + length = (length - 16)|0; + + encrypted = (encrypted + 16)|0; + } + + if ( (length|0) > 0 ) { + _encrypt( + S0, + S1, + S2, + S3, + S4, + S5, + S6, + S7, + S8, + S9, + SA, + SB, + SC, + SD, + SE, + SF + ); + + HEAP[offset] = HEAP[offset] ^ S0; + if ( (length|0) > 1 ) HEAP[offset|1] = HEAP[offset|1] ^ S1; + if ( (length|0) > 2 ) HEAP[offset|2] = HEAP[offset|2] ^ S2; + if ( (length|0) > 3 ) HEAP[offset|3] = HEAP[offset|3] ^ S3; + if ( (length|0) > 4 ) HEAP[offset|4] = HEAP[offset|4] ^ S4; + if ( (length|0) > 5 ) HEAP[offset|5] = HEAP[offset|5] ^ S5; + if ( (length|0) > 6 ) HEAP[offset|6] = HEAP[offset|6] ^ S6; + if ( (length|0) > 7 ) HEAP[offset|7] = HEAP[offset|7] ^ S7; + if ( (length|0) > 8 ) HEAP[offset|8] = HEAP[offset|8] ^ S8; + if ( (length|0) > 9 ) HEAP[offset|9] = HEAP[offset|9] ^ S9; + if ( (length|0) > 10 ) HEAP[offset|10] = HEAP[offset|10] ^ SA; + if ( (length|0) > 11 ) HEAP[offset|11] = HEAP[offset|11] ^ SB; + if ( (length|0) > 12 ) HEAP[offset|12] = HEAP[offset|12] ^ SC; + if ( (length|0) > 13 ) HEAP[offset|13] = HEAP[offset|13] ^ SD; + if ( (length|0) > 14 ) HEAP[offset|14] = HEAP[offset|14] ^ SE; + //if ( 0 ) HEAP[offset|15] = HEAP[offset|15] ^ SF; + + encrypted = (encrypted + length)|0; + + offset = (offset + length)|0; + length = 0; + } + + return encrypted|0; + } + + // offset, length - multiple of 16 + function cfb_decrypt ( offset, length ) { + offset = offset|0; + length = length|0; + + var iv0 = 0, iv1 = 0, iv2 = 0, iv3 = 0, iv4 = 0, iv5 = 0, iv6 = 0, iv7 = 0, iv8 = 0, iv9 = 0, ivA = 0, ivB = 0, ivC = 0, ivD = 0, ivE = 0, ivF = 0, + decrypted = 0; + + if ( offset & 15 ) + return -1; + + while ( (length|0) >= 16 ) { + _encrypt( + S0, + S1, + S2, + S3, + S4, + S5, + S6, + S7, + S8, + S9, + SA, + SB, + SC, + SD, + SE, + SF + ); + + iv0 = HEAP[offset]|0; + iv1 = HEAP[offset|1]|0; + iv2 = HEAP[offset|2]|0; + iv3 = HEAP[offset|3]|0; + iv4 = HEAP[offset|4]|0; + iv5 = HEAP[offset|5]|0; + iv6 = HEAP[offset|6]|0; + iv7 = HEAP[offset|7]|0; + iv8 = HEAP[offset|8]|0; + iv9 = HEAP[offset|9]|0; + ivA = HEAP[offset|10]|0; + ivB = HEAP[offset|11]|0; + ivC = HEAP[offset|12]|0; + ivD = HEAP[offset|13]|0; + ivE = HEAP[offset|14]|0; + ivF = HEAP[offset|15]|0; + + HEAP[offset] = S0 ^ iv0; + HEAP[offset|1] = S1 ^ iv1; + HEAP[offset|2] = S2 ^ iv2; + HEAP[offset|3] = S3 ^ iv3; + HEAP[offset|4] = S4 ^ iv4; + HEAP[offset|5] = S5 ^ iv5; + HEAP[offset|6] = S6 ^ iv6; + HEAP[offset|7] = S7 ^ iv7; + HEAP[offset|8] = S8 ^ iv8; + HEAP[offset|9] = S9 ^ iv9; + HEAP[offset|10] = SA ^ ivA; + HEAP[offset|11] = SB ^ ivB; + HEAP[offset|12] = SC ^ ivC; + HEAP[offset|13] = SD ^ ivD; + HEAP[offset|14] = SE ^ ivE; + HEAP[offset|15] = SF ^ ivF; + + S0 = iv0; + S1 = iv1; + S2 = iv2; + S3 = iv3; + S4 = iv4; + S5 = iv5; + S6 = iv6; + S7 = iv7; + S8 = iv8; + S9 = iv9; + SA = ivA; + SB = ivB; + SC = ivC; + SD = ivD; + SE = ivE; + SF = ivF; + + offset = (offset + 16)|0; + length = (length - 16)|0; + + decrypted = (decrypted + 16)|0; + } + + + if ( (length|0) > 0 ) { + _encrypt( + S0, + S1, + S2, + S3, + S4, + S5, + S6, + S7, + S8, + S9, + SA, + SB, + SC, + SD, + SE, + SF + ); + + HEAP[offset] = HEAP[offset] ^ S0; + if ( (length|0) > 1 ) HEAP[offset|1] = HEAP[offset|1] ^ S1; + if ( (length|0) > 2 ) HEAP[offset|2] = HEAP[offset|2] ^ S2; + if ( (length|0) > 3 ) HEAP[offset|3] = HEAP[offset|3] ^ S3; + if ( (length|0) > 4 ) HEAP[offset|4] = HEAP[offset|4] ^ S4; + if ( (length|0) > 5 ) HEAP[offset|5] = HEAP[offset|5] ^ S5; + if ( (length|0) > 6 ) HEAP[offset|6] = HEAP[offset|6] ^ S6; + if ( (length|0) > 7 ) HEAP[offset|7] = HEAP[offset|7] ^ S7; + if ( (length|0) > 8 ) HEAP[offset|8] = HEAP[offset|8] ^ S8; + if ( (length|0) > 9 ) HEAP[offset|9] = HEAP[offset|9] ^ S9; + if ( (length|0) > 10 ) HEAP[offset|10] = HEAP[offset|10] ^ SA; + if ( (length|0) > 11 ) HEAP[offset|11] = HEAP[offset|11] ^ SB; + if ( (length|0) > 12 ) HEAP[offset|12] = HEAP[offset|12] ^ SC; + if ( (length|0) > 13 ) HEAP[offset|13] = HEAP[offset|13] ^ SD; + if ( (length|0) > 14 ) HEAP[offset|14] = HEAP[offset|14] ^ SE; + //if ( 0 ) HEAP[offset|15] = HEAP[offset|15] ^ SF; + + decrypted = (decrypted + length)|0; + + offset = (offset + length)|0; + length = 0; + } + + return decrypted|0; + } + + function _gcm_mult ( x0, x1, x2, x3 ) { + x0 = x0|0; + x1 = x1|0; + x2 = x2|0; + x3 = x3|0; + + var y0 = 0, y1 = 0, y2 = 0, y3 = 0, + z0 = 0, z1 = 0, z2 = 0, z3 = 0, + i = 0, c = 0; + + y0 = H0|0, + y1 = H1|0, + y2 = H2|0, + y3 = H3|0; + + for ( ; (i|0) < 128; i = (i + 1)|0 ) { + if ( y0 >>> 31 ) { + z0 = z0 ^ x0, + z1 = z1 ^ x1, + z2 = z2 ^ x2, + z3 = z3 ^ x3; + } + + y0 = (y0 << 1) | (y1 >>> 31), + y1 = (y1 << 1) | (y2 >>> 31), + y2 = (y2 << 1) | (y3 >>> 31), + y3 = (y3 << 1); + + c = x3 & 1; + + x3 = (x3 >>> 1) | (x2 << 31), + x2 = (x2 >>> 1) | (x1 << 31), + x1 = (x1 >>> 1) | (x0 << 31), + x0 = (x0 >>> 1); + + if ( c ) x0 = x0 ^ 0xe1000000; + } + + Z0 = z0, + Z1 = z1, + Z2 = z2, + Z3 = z3; + } + + function gcm_init () { + _encrypt( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), + H0 = (S0 << 24) | (S1 << 16) | (S2 << 8) | S3, + H1 = (S4 << 24) | (S5 << 16) | (S6 << 8) | S7, + H2 = (S8 << 24) | (S9 << 16) | (SA << 8) | SB, + H3 = (SC << 24) | (SD << 16) | (SE << 8) | SF; + + Z0 = Z1 = Z2 = Z3 = 0; + } + + // offset - multiple of 16 + function gcm_ghash ( offset, length ) { + offset = offset|0; + length = length|0; + + var processed = 0; + + if ( offset & 15 ) + return -1; + + Z0 = (S0 << 24) | (S1 << 16) | (S2 << 8) | S3, + Z1 = (S4 << 24) | (S5 << 16) | (S6 << 8) | S7, + Z2 = (S8 << 24) | (S9 << 16) | (SA << 8) | SB, + Z3 = (SC << 24) | (SD << 16) | (SE << 8) | SF; + + while ( (length|0) >= 16 ) { + _gcm_mult( + Z0 ^ ( (HEAP[offset|0] << 24) | (HEAP[offset|1] << 16) | (HEAP[offset|2] << 8) | HEAP[offset|3] ), + Z1 ^ ( (HEAP[offset|4] << 24) | (HEAP[offset|5] << 16) | (HEAP[offset|6] << 8) | HEAP[offset|7] ), + Z2 ^ ( (HEAP[offset|8] << 24) | (HEAP[offset|9] << 16) | (HEAP[offset|10] << 8) | HEAP[offset|11] ), + Z3 ^ ( (HEAP[offset|12] << 24) | (HEAP[offset|13] << 16) | (HEAP[offset|14] << 8) | HEAP[offset|15] ) + ); + + offset = (offset+16)|0, + length = (length-16)|0, + processed = (processed+16)|0; + } + + S0 = Z0 >>> 24, S1 = (Z0 >>> 16) & 255, S2 = (Z0 >>> 8) & 255, S3 = Z0 & 255, + S4 = Z1 >>> 24, S5 = (Z1 >>> 16) & 255, S6 = (Z1 >>> 8) & 255, S7 = Z1 & 255, + S8 = Z2 >>> 24, S9 = (Z2 >>> 16) & 255, SA = (Z2 >>> 8) & 255, SB = Z2 & 255, + SC = Z3 >>> 24, SD = (Z3 >>> 16) & 255, SE = (Z3 >>> 8) & 255, SF = Z3 & 255; + + return processed|0; + } + + // offset - multiple of 16 + function gcm_encrypt ( offset, length, g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, gA, gB, gCDEF ) { + offset = offset|0; + length = length|0; + g0 = g0|0; + g1 = g1|0; + g2 = g2|0; + g3 = g3|0; + g4 = g4|0; + g5 = g5|0; + g6 = g6|0; + g7 = g7|0; + g8 = g8|0; + g9 = g9|0; + gA = gA|0; + gB = gB|0; + gCDEF = gCDEF|0; + + var s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0, s7 = 0, s8 = 0, s9 = 0, sA = 0, sB = 0, sC = 0, sD = 0, sE = 0, sF = 0, + processed = 0; + + if ( offset & 15 ) + return -1; + + while ( (length|0) >= 16 ) { + _encrypt( + g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, gA, gB, + gCDEF >>> 24, (gCDEF >>> 16) & 255, (gCDEF >>> 8) & 255, gCDEF & 255 + ); + + HEAP[offset|0] = s0 = HEAP[offset|0] ^ S0, + HEAP[offset|1] = s1 = HEAP[offset|1] ^ S1, + HEAP[offset|2] = s2 = HEAP[offset|2] ^ S2, + HEAP[offset|3] = s3 = HEAP[offset|3] ^ S3, + HEAP[offset|4] = s4 = HEAP[offset|4] ^ S4, + HEAP[offset|5] = s5 = HEAP[offset|5] ^ S5, + HEAP[offset|6] = s6 = HEAP[offset|6] ^ S6, + HEAP[offset|7] = s7 = HEAP[offset|7] ^ S7, + HEAP[offset|8] = s8 = HEAP[offset|8] ^ S8, + HEAP[offset|9] = s9 = HEAP[offset|9] ^ S9, + HEAP[offset|10] = sA = HEAP[offset|10] ^ SA, + HEAP[offset|11] = sB = HEAP[offset|11] ^ SB, + HEAP[offset|12] = sC = HEAP[offset|12] ^ SC, + HEAP[offset|13] = sD = HEAP[offset|13] ^ SD, + HEAP[offset|14] = sE = HEAP[offset|14] ^ SE, + HEAP[offset|15] = sF = HEAP[offset|15] ^ SF; + + _gcm_mult( + Z0 ^ ( (s0 << 24) | (s1 << 16) | (s2 << 8) | s3 ), + Z1 ^ ( (s4 << 24) | (s5 << 16) | (s6 << 8) | s7 ), + Z2 ^ ( (s8 << 24) | (s9 << 16) | (sA << 8) | sB ), + Z3 ^ ( (sC << 24) | (sD << 16) | (sE << 8) | sF ) + ); + + gCDEF = (gCDEF + 1)|0; + + offset = (offset+16)|0, + length = (length-16)|0, + processed = (processed+16)|0; + } + + if ( (length|0) > 0 ) { + _encrypt( + g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, gA, gB, + gCDEF >>> 24, (gCDEF >>> 16) & 255, (gCDEF >>> 8) & 255, gCDEF & 255 + ); + + s0 = HEAP[offset|0] ^ S0, + s1 = (length|0) > 1 ? HEAP[offset|1] ^ S1 : 0, + s2 = (length|0) > 2 ? HEAP[offset|2] ^ S2 : 0, + s3 = (length|0) > 3 ? HEAP[offset|3] ^ S3 : 0, + s4 = (length|0) > 4 ? HEAP[offset|4] ^ S4 : 0, + s5 = (length|0) > 5 ? HEAP[offset|5] ^ S5 : 0, + s6 = (length|0) > 6 ? HEAP[offset|6] ^ S6 : 0, + s7 = (length|0) > 7 ? HEAP[offset|7] ^ S7 : 0, + s8 = (length|0) > 8 ? HEAP[offset|8] ^ S8 : 0, + s9 = (length|0) > 9 ? HEAP[offset|9] ^ S9 : 0, + sA = (length|0) > 10 ? HEAP[offset|10] ^ SA : 0, + sB = (length|0) > 11 ? HEAP[offset|11] ^ SB : 0, + sC = (length|0) > 12 ? HEAP[offset|12] ^ SC : 0, + sD = (length|0) > 13 ? HEAP[offset|13] ^ SD : 0, + sE = (length|0) > 14 ? HEAP[offset|14] ^ SE : 0; + sF = /*(length|0) > 15 ? HEAP[offset|15] ^ SF :*/ 0; + + HEAP[offset] = s0; + if ( (length|0) > 1 ) HEAP[offset|1] = s1; + if ( (length|0) > 2 ) HEAP[offset|2] = s2; + if ( (length|0) > 3 ) HEAP[offset|3] = s3; + if ( (length|0) > 4 ) HEAP[offset|4] = s4; + if ( (length|0) > 5 ) HEAP[offset|5] = s5; + if ( (length|0) > 6 ) HEAP[offset|6] = s6; + if ( (length|0) > 7 ) HEAP[offset|7] = s7; + if ( (length|0) > 8 ) HEAP[offset|8] = s8; + if ( (length|0) > 9 ) HEAP[offset|9] = s9; + if ( (length|0) > 10 ) HEAP[offset|10] = sA; + if ( (length|0) > 11 ) HEAP[offset|11] = sB; + if ( (length|0) > 12 ) HEAP[offset|12] = sC; + if ( (length|0) > 13 ) HEAP[offset|13] = sD; + if ( (length|0) > 14 ) HEAP[offset|14] = sE; + //if ( 0 ) HEAP[offset|15] = sF; + + _gcm_mult( + Z0 ^ ( (s0 << 24) | (s1 << 16) | (s2 << 8) | s3 ), + Z1 ^ ( (s4 << 24) | (s5 << 16) | (s6 << 8) | s7 ), + Z2 ^ ( (s8 << 24) | (s9 << 16) | (sA << 8) | sB ), + Z3 ^ ( (sC << 24) | (sD << 16) | (sE << 8) | sF ) + ); + + gCDEF = (gCDEF+1)|0; + + processed = (processed+length)|0; + } + + S0 = Z0 >>> 24, S1 = (Z0 >>> 16) & 255, S2 = (Z0 >>> 8) & 255, S3 = Z0 & 255, + S4 = Z1 >>> 24, S5 = (Z1 >>> 16) & 255, S6 = (Z1 >>> 8) & 255, S7 = Z1 & 255, + S8 = Z2 >>> 24, S9 = (Z2 >>> 16) & 255, SA = (Z2 >>> 8) & 255, SB = Z2 & 255, + SC = Z3 >>> 24, SD = (Z3 >>> 16) & 255, SE = (Z3 >>> 8) & 255, SF = Z3 & 255; + + return processed|0; + } + + function gcm_decrypt ( offset, length, g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, gA, gB, gCDEF ) { + offset = offset|0; + length = length|0; + g0 = g0|0; + g1 = g1|0; + g2 = g2|0; + g3 = g3|0; + g4 = g4|0; + g5 = g5|0; + g6 = g6|0; + g7 = g7|0; + g8 = g8|0; + g9 = g9|0; + gA = gA|0; + gB = gB|0; + gCDEF = gCDEF|0; + + var s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0, s7 = 0, s8 = 0, s9 = 0, sA = 0, sB = 0, sC = 0, sD = 0, sE = 0, sF = 0, + processed = 0; + + if ( offset & 15 ) + return -1; + + while ( (length|0) >= 16 ) { + s0 = HEAP[offset|0]|0, + s1 = HEAP[offset|1]|0, + s2 = HEAP[offset|2]|0, + s3 = HEAP[offset|3]|0, + s4 = HEAP[offset|4]|0, + s5 = HEAP[offset|5]|0, + s6 = HEAP[offset|6]|0, + s7 = HEAP[offset|7]|0, + s8 = HEAP[offset|8]|0, + s9 = HEAP[offset|9]|0, + sA = HEAP[offset|10]|0, + sB = HEAP[offset|11]|0, + sC = HEAP[offset|12]|0, + sD = HEAP[offset|13]|0, + sE = HEAP[offset|14]|0, + sF = HEAP[offset|15]|0; + + _gcm_mult( + Z0 ^ ( (s0 << 24) | (s1 << 16) | (s2 << 8) | s3 ), + Z1 ^ ( (s4 << 24) | (s5 << 16) | (s6 << 8) | s7 ), + Z2 ^ ( (s8 << 24) | (s9 << 16) | (sA << 8) | sB ), + Z3 ^ ( (sC << 24) | (sD << 16) | (sE << 8) | sF ) + ); + + _encrypt( + g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, gA, gB, + gCDEF >>> 24, (gCDEF >>> 16) & 255, (gCDEF >>> 8) & 255, gCDEF & 255 + ); + + HEAP[offset|0] = s0 ^ S0, + HEAP[offset|1] = s1 ^ S1, + HEAP[offset|2] = s2 ^ S2, + HEAP[offset|3] = s3 ^ S3, + HEAP[offset|4] = s4 ^ S4, + HEAP[offset|5] = s5 ^ S5, + HEAP[offset|6] = s6 ^ S6, + HEAP[offset|7] = s7 ^ S7, + HEAP[offset|8] = s8 ^ S8, + HEAP[offset|9] = s9 ^ S9, + HEAP[offset|10] = sA ^ SA, + HEAP[offset|11] = sB ^ SB, + HEAP[offset|12] = sC ^ SC, + HEAP[offset|13] = sD ^ SD, + HEAP[offset|14] = sE ^ SE, + HEAP[offset|15] = sF ^ SF; + + gCDEF = (gCDEF + 1)|0; + + offset = (offset+16)|0, + length = (length-16)|0, + processed = (processed+16)|0; + } + + if ( (length|0) > 0 ) { + s0 = HEAP[offset|0]|0, + s1 = (length|0) > 1 ? HEAP[offset|1]|0 : 0, + s2 = (length|0) > 2 ? HEAP[offset|2]|0 : 0, + s3 = (length|0) > 3 ? HEAP[offset|3]|0 : 0, + s4 = (length|0) > 4 ? HEAP[offset|4]|0 : 0, + s5 = (length|0) > 5 ? HEAP[offset|5]|0 : 0, + s6 = (length|0) > 6 ? HEAP[offset|6]|0 : 0, + s7 = (length|0) > 7 ? HEAP[offset|7]|0 : 0, + s8 = (length|0) > 8 ? HEAP[offset|8]|0 : 0, + s9 = (length|0) > 9 ? HEAP[offset|9]|0 : 0, + sA = (length|0) > 10 ? HEAP[offset|10]|0 : 0, + sB = (length|0) > 11 ? HEAP[offset|11]|0 : 0, + sC = (length|0) > 12 ? HEAP[offset|12]|0 : 0, + sD = (length|0) > 13 ? HEAP[offset|13]|0 : 0, + sE = (length|0) > 14 ? HEAP[offset|14]|0 : 0; + sF = /*(length|0) > 15 ? HEAP[offset|15] :*/ 0; + + _gcm_mult( + Z0 ^ ( (s0 << 24) | (s1 << 16) | (s2 << 8) | s3 ), + Z1 ^ ( (s4 << 24) | (s5 << 16) | (s6 << 8) | s7 ), + Z2 ^ ( (s8 << 24) | (s9 << 16) | (sA << 8) | sB ), + Z3 ^ ( (sC << 24) | (sD << 16) | (sE << 8) | sF ) + ); + + _encrypt( + g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, gA, gB, + gCDEF >>> 24, (gCDEF >>> 16) & 255, (gCDEF >>> 8) & 255, gCDEF & 255 + ); + + HEAP[offset] = s0 ^ S0; + if ( (length|0) > 1 ) HEAP[offset|1] = s1 ^ S1; + if ( (length|0) > 2 ) HEAP[offset|2] = s2 ^ S2; + if ( (length|0) > 3 ) HEAP[offset|3] = s3 ^ S3; + if ( (length|0) > 4 ) HEAP[offset|4] = s4 ^ S4; + if ( (length|0) > 5 ) HEAP[offset|5] = s5 ^ S5; + if ( (length|0) > 6 ) HEAP[offset|6] = s6 ^ S6; + if ( (length|0) > 7 ) HEAP[offset|7] = s7 ^ S7; + if ( (length|0) > 8 ) HEAP[offset|8] = s8 ^ S8; + if ( (length|0) > 9 ) HEAP[offset|9] = s9 ^ S9; + if ( (length|0) > 10 ) HEAP[offset|10] = sA ^ SA; + if ( (length|0) > 11 ) HEAP[offset|11] = sB ^ SB; + if ( (length|0) > 12 ) HEAP[offset|12] = sC ^ SC; + if ( (length|0) > 13 ) HEAP[offset|13] = sD ^ SD; + if ( (length|0) > 14 ) HEAP[offset|14] = sE ^ SE; + //if ( 0 ) HEAP[offset|15] = sF ^ SF; + + gCDEF = (gCDEF+1)|0; + + processed = (processed+length)|0; + } + + S0 = Z0 >>> 24, S1 = (Z0 >>> 16) & 255, S2 = (Z0 >>> 8) & 255, S3 = Z0 & 255, + S4 = Z1 >>> 24, S5 = (Z1 >>> 16) & 255, S6 = (Z1 >>> 8) & 255, S7 = Z1 & 255, + S8 = Z2 >>> 24, S9 = (Z2 >>> 16) & 255, SA = (Z2 >>> 8) & 255, SB = Z2 & 255, + SC = Z3 >>> 24, SD = (Z3 >>> 16) & 255, SE = (Z3 >>> 8) & 255, SF = Z3 & 255; + + return processed|0; + } + + return { + _encrypt: _encrypt, + _decrypt: _decrypt, + + init_state: init_state, + save_state: save_state, + + init_key_128: init_key_128, + init_key_256: init_key_256, + + ecb_encrypt: ecb_encrypt, + ecb_decrypt: ecb_decrypt, + + cbc_encrypt: cbc_encrypt, + cbc_decrypt: cbc_decrypt, + cbc_mac: cbc_mac, + + ctr_encrypt: ctr_encrypt, + ctr_decrypt: ctr_encrypt, + + ccm_encrypt: ccm_encrypt, + ccm_decrypt: ccm_decrypt, + + cfb_encrypt: cfb_encrypt, + cfb_decrypt: cfb_decrypt, + + gcm_init: gcm_init, + gcm_ghash: gcm_ghash, + gcm_encrypt: gcm_encrypt, + gcm_decrypt: gcm_decrypt, + }; +} + +function aes_asm ( stdlib, foreign, buffer ) { + var heap = new Uint8Array(buffer); + heap.set(_aes_tables); + return _aes_asm( stdlib, foreign, buffer ); +} diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/D515588B95B6FB1B212F677BB7D8096AE9E9E865 b/home/.surf/cache/WebKitCache/Version 16/Blobs/D515588B95B6FB1B212F677BB7D8096AE9E9E865 new file mode 100644 index 0000000..f391101 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/D515588B95B6FB1B212F677BB7D8096AE9E9E865 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/D52394794230C571907B27A14E559BCB54964110 b/home/.surf/cache/WebKitCache/Version 16/Blobs/D52394794230C571907B27A14E559BCB54964110 new file mode 100644 index 0000000..bc1121b Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/D52394794230C571907B27A14E559BCB54964110 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/D6AAE8A99EA4E9350A045BD728241A6FA2256814 b/home/.surf/cache/WebKitCache/Version 16/Blobs/D6AAE8A99EA4E9350A045BD728241A6FA2256814 new file mode 100644 index 0000000..7a876e2 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/D6AAE8A99EA4E9350A045BD728241A6FA2256814 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/D6C6C1601D820F04FABE5B91AD06736A33C5371D b/home/.surf/cache/WebKitCache/Version 16/Blobs/D6C6C1601D820F04FABE5B91AD06736A33C5371D new file mode 100644 index 0000000..0fabc94 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/D6C6C1601D820F04FABE5B91AD06736A33C5371D @@ -0,0 +1 @@ +DDG.Data.Experiments={about_module:{versions:["v35-1","v35-2","v35-3","v35-4","v36-7","v37-1","v37-2","v37-3"],variants:["a","b"]},stack_overflow:{versions:["v35-5","v35-6","v35-7","v36-1","v36-2","v36-3"],variants:["a","b"]},spelling:{versions:["v33-6","v33-7","v34-1","v34-2","v34-3"],variants:["a","b"]},region_override:{versions:["v38-2","v38-3","v38-4","v38-5","v38-6","v38-7","v39-1","v39-2"],variants:["a","b"]},control:{versions:["v39-3","v39-4","v39-5","v39-6","v39-7","v40-1","v40-2","v40-3","v40-4","v40-5","v40-6","v40-7"],variants:["a","b"]},filter_label:{versions:["v41-1","v41-2","v41-3","v41-4","v41-5","v41-6","v41-7"],variants:["a","b","c","d"]},filters_above_organics:{versions:["v42-1","v42-2","v42-3","v42-4","v42-5","v42-6","v42-7"],variants:["a","b","c","d"]},organic_ux:{versions:["v44-1","v44-2","v44-3","v44-4","v44-5","v44-6","v44-7"],variants:["a","b","c","d","e"],locale:"en_us"},static_news:{versions:["v47-6","v47-7","v48-1","v48-2","v48-3","v48-4","v48-5"],variants:["a","b"]},control2:{versions:["v51-2","v51-3","v51-4","v51-5"],variants:["a","b"]},safe_search_filter:{versions:["v52-1","v52-2","v52-3","v52-4","v52-5","v52-6","v52-7"],variants:["a","b"]},map_module:{versions:["v57-1","v57-2","v57-3","v57-4","v57-5","v57-6","v57-7"],variants:["a","b"],locale:"en_us"},images_ux:{versions:["v58-1"],variants:["a","b"]},images_ux_detail:{versions:["v58-6","v58-7"],variants:["a","b"]},images_ux_filters:{versions:["v59-1","v59-2","v59-3"],variants:["a","b"],englishOnly:!0},placeholder_delay:{versions:["v61-1","v61-2","v61-3"],variants:["a","b"]},back_button:{versions:["v63-1","v63-2","v63-3","v63-4","v63-5","v63-6"],variants:["a","b"]},fixed_ux_header:{versions:["v64-3","v64-4","v64-5","v64-6","v64-7"],variants:["a","b"]},ad_layouts:{versions:["v66-1","v66-2","v66-3","v66-4","v66-5","v66-6","v66-7","v67-1"],variants:["a","b","c"]},ad_layouts_2:{versions:["v67-2","v67-3","v67-4","v67-5","v67-6","v67-7"],variants:["b","c"]},serp_ui:{versions:["v88-3","v88-4","v88-5","v88-6","v88-7","v89-1","v89-2","v89-3","v89-4"],variants:["q","r"],platformName:"androidwos"},chrome_desktop_us_portableapps_control:{versions:["v121-2","v121-3","v121-4","v121-5","v121-6","v121-7","v122-1","v122-2","v122-3","v122-4","v122-5","v122-6","v122-7"],variants:["o"],locale:"en_us",desktopOnly:!0,displayBrowserName:"Chrome"},serp_show_hide_bolding:{versions:["v124-1","v124-2","v124-3","v124-4","v124-5","v124-6","v124-7","v125-1","v125-2","v125-3","v125-4"],variants:["a","b","c"]},green_urls:{versions:["v127-1","v127-2","v127-3","v127-4","v127-5","v127-6","v127-7","v128-1"],variants:["a","b","c","d"]},chrome_desktop_store_install_en:{allocation:[.5,1],variants:["e","f"],desktopOnly:!0,englishOnly:!0,atb:!0,active:!1,displayBrowserName:"Chrome",canInstallExtension:!0},chrome_desktop_store_install_non_en:{allocation:[.5,1],variants:["g","h"],desktopOnly:!0,nonEnglishOnly:!0,atb:!0,active:!1,displayBrowserName:"Chrome",canInstallExtension:!0},serp_footer:{versions:["v129-6","v129-7","v130-1","v130-2","v130-3","v130-4","v130-5","v130-6"],englishOnly:!0,desktopOnly:!0,variants:["e","f"]},safe_search_moderate_default:{versions:["v136-2","v136-3","v136-4","v136-5","v136-6","v136-7","v137-1","v137-2"],variants:["a","b"]},region_toggle_default:{versions:["v140-2","v140-3","v140-4","v140-5","v140-6","v140-7","v141-1","v141-2","v141-3"],variants:["a","b"],desktopOnly:!0},deemphasize_http_links:{versions:["v143-7","v144-1","v144-2","v144-3","v144-4","v144-5","v144-6"],variants:["a","b","c"]},no_ads:{versions:["v148-2","v148-3","v148-4","v148-5","v148-6"],variants:["a","b"],desktopOnly:!0},fonts:{versions:["v154-1","v154-2","v154-3","v154-4","v154-5","v154-6"],variants:["a","b"],mobileAppVariants:{sa:"a",sb:"b",sc:"a",sd:"b"}},ui_updates:{pixelId:"uiu",versions:["v155-1","v155-2","v155-3","v155-4","v155-5","v155-6","v155-7","v156-1","v156-2","v156-3","v156-4","v156-5","v156-6","v156-7"],variants:["a","b"],mobileAppVariants:{sa:"a",sb:"b",sc:"a",sd:"b"}},post_install_onboarding:{versions:["v157-1","v157-2","v157-3","v157-4","v157-5","v157-6","v157-7"],variants:["a","b"],desktopOnly:!0},regions_toggle_exp:{pixelId:"rtl",versions:["v158-1","v158-2","v158-3","v158-4","v158-5","v158-6","v158-7","v159-1","v159-2","v159-3","v159-4","v159-5","v159-6","v159-7"],variants:["a","b"],countries:["DE","FR","PL","CA","IT","ES","AU","BR","NL","GB","ID"],desktopOnly:!0},welcome_message:{pixelId:"wcm",versions:["v163-1","v163-2","v163-3","v163-4","v163-5","v163-6"],variants:["a","b"],desktopOnly:!0,englishOnly:!0},less_prominent_answerbar:{pixelId:"lpab",versions:["v163-7","v164-1","v164-2","v164-3","v164-4","v164-5","v164-6"],variants:["a","b"],desktopOnly:!0},settings_dropdown:{pixelId:"sdd",versions:["v165-3","v165-4","v165-5","v165-6","v165-7","v166-1","v166-2"],variants:["a","b","c"],desktopOnly:!0,englishOnly:!0},welcome_message_2:{pixelId:"wcm2",versions:["v166-3","v166-4","v166-5","v166-6","v166-6","v167-1"],variants:["a","b"],desktopOnly:!0,englishOnly:!0},homepage_landing:{allocation:[.033,.066,.1],variants:["a","b","c"],desktopOnly:!0,englishOnly:!0,atb:!0,active:!1,canInstallExtension:!0,defaultThemeOnly:!0,stickyAtbVariant:!0},homepage_fullbleed_landing:{allocation:[0,.2,.4],variant:"g",variants:["x","w"],desktopOnly:!0,englishOnly:!0,atb:!0,active:!1,canInstallExtension:!0,defaultThemeOnly:!0,minScreenSize:{width:800,height:600},filter:function(){return"en_GB"!==window.locale}},homepage_fullbleed_regional_landing:{allocation:[0,1],variant:"g",variants:["y"],desktopOnly:!0,englishOnly:!0,atb:!0,active:!1,canInstallExtension:!0,defaultThemeOnly:!0,minScreenSize:{width:800,height:600},filter:function(){return"en_GB"===window.locale}},welcome_message_3:{pixelId:"wcm3",versions:["v168-1","v168-2","v168-3","v168-4","v168-5","v168-6","v168-7"],variants:["a","b","c","d"],desktopOnly:!0,englishOnly:!0},extension_optin:{versions:["v169-3","v169-4","v169-5","v169-6","v169-7","v170-1","v170-2","v170-3","v170-4","v170-5"],allocation:[.5,1],variants:["k","l"],desktopOnly:!0,englishOnly:!0,canInstallExtension:!0},mobile_cards:{pixelId:"mcds",versions:["v169-2","v169-3","v169-4","v169-5","v169-6","v169-7","v170-1","v170-7","v171-1","v171-2"],variants:["a","b"],appsOnly:!0,displayBrowserName:"DDG iPhone",mobileAppVariants:{sc:"a",se:"b"}},ct_retention_exp:{pixelId:"ctexp",versions:["v174-7","v175-1","v175-2","v175-3","v175-4","v175-5","v175-6","v175-7"],variants:["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],countries:["AT","AU","BE","BR","CA","CH","DE","DK","ES","FI","FR","GB","ID","IE","IN","IT","JP","MX","NL","NO","NZ","PL","RU","SE","SG","US"],desktopOnly:!0},post_install_homepage:{pixelId:"pih",versions:["v177-3","v177-4","v177-5","v177-6","v177-7","v178-1"],variants:["a","b"],desktopOnly:!0,englishOnly:!0,canInstallExtension:!0,defaultThemeOnly:!0,minScreenSize:{width:900,height:600}},mixed_modules:{variants:["a","b"],pixelId:"miaexp",versions:["v192-7","v193-1","v193-2","v193-3","v193-4","v193-5","v193-6","v193-7"],mobileAppVariants:{sc:"a",se:"b"}},mobile_cards_refinements:{variants:["a","b","c"],pixelId:"crdexp",versions:["v203-2","v203-3","v203-4","v203-5","v203-6","v203-7","v204-1"],mobileAppVariants:{sc:"a",sd:"b",se:"c"}},autocomplete_delay:{variants:["a","b"],pixelId:"acdexp",versions:["v208-3","v208-4","v208-5","v208-6","v208-7","v209-1"]},organic_atb_measure:{allocation:[0,.1],variant:"r",variants:["z"],desktopOnly:!0,englishOnly:!0,atb:!0,active:!1,canInstallExtension:!0},mobile_header:{pixelId:"mhdr",versions:["v211-4","v211-5","v211-6","v211-7","v212-1","v212-2","v212-3"],variants:["a","b"],appsOnly:!0,mobileAppVariants:{sc:"a",se:"b"}},home_brand_messaging:{allocation:[0,.1,.2],variants:["a","d"],desktopOnly:!0,englishOnly:!0,atb:!0,active:!1,canInstallExtension:!0,defaultThemeOnly:!0,minScreenSize:{width:800,height:600}},dynamic_slotting:{pixelId:"sltret",versions:["v213-2","v213-3","v213-4","v213-5","v213-6","v213-7","v214-1","v214-2"],variants:["a","b"],mobileAppVariants:{sc:"a",se:"b"}},privacy_nudge:{allocation:[.3,.5,.7],variant:"r",variants:["y","z"],desktopOnly:!0,englishOnly:!0,atb:!0,active:!1,canInstallExtension:!0,displayBrowserName:"Chrome"},ct_test:{pixelId:"cttest",versions:["v217-2","v217-3"],variants:["a","b"]},larger_extension_tracker_list:{allocation:[.3,.5,.7],variant:"l",variants:["m","n"],desktopOnly:!0,atb:!0,active:!1,canInstallExtension:!0},cookie_blocking:{allocation:[0,.2,.4],variant:"o",variants:["c","d"],desktopOnly:!0,atb:!0,active:!1,canInstallExtension:!0},msh2exp:{variants:["a","b"],versions:["v234-7","v235-1","v235-2","v235-3","v235-4","v235-5","v235-6"],pixelId:"msh2exp",appsOnly:!0,mobileAppVariants:{sc:"a",se:"b"},filter:function(e){return e.device&&e.device.isMobile}},open_app_android:{allocation:[0,1],variant:"d",variants:["b"],mobileOnly:!0,atb:!0,active:!1,platformName:"android",filter:function(e){return e.page&&"serp"===e.page.pageType}},open_app_ios:{allocation:[0,1],variant:"d",variants:["b"],mobileOnly:!0,atb:!0,active:!1,platformName:"iphone",filter:function(e){return e.page&&"serp"===e.page.pageType}},hourly_weather_data:{allocation:[0,.3,.6],variant:"z",variants:["x","y"],atb:!0,active:!1,desktopOnly:!0,canInstallExtension:!0},earlydeep:{pixelId:"earlydeep",versions:["v269-2","v269-3","v269-4","v269-5","v269-6","v269-7","v270-1","v270-2"],variants:["a","b"]},serp_ux_changes:{allocation:[0,.5,1],variant:"g",variants:["x","y"],desktopOnly:!0,canInstallExtension:!0,atb:!0,active:!1,filter:function(e){return!e.settings._hasCustomizedTheme()&&(e.settings.isDefault("kae")||"d"===e.settings.get("kae"))}},mobile_ux_2023:{variants:["p","q"],versions:["v355-3","v355-4","v355-5","v355-6","v355-7","v356-1","v356-2","v356-3","v356-4","v356-5","v356-6","v356-7","v357-1","v357-2","v357-3","v357-4","v357-5","v357-6","v357-7","v358-1","v358-2","v358-3","v358-4","v358-5","v358-6","v358-7","v359-1","v359-2","v359-3","v359-4","v359-5","v359-6","v359-7","v360-1","v360-2","v360-3","v360-4","v360-5","v360-6","v360-7","v361-1","v361-2"],pixelId:"mobileux2023exp",mobileAppVariants:{sc:"p",se:"q"},filter:function(e){return(!window.matchMedia("(prefers-color-scheme: dark)").matches||"-1"===e.settings.get("kae"))&&e.device.isMobileDevice&&e.device.isDDGApp&&e.settings.isDefault("kae")&&e.settings.isDefault("ks")&&e.settings.isDefault("kt")&&e.settings.isDefault("kw")&&e.settings.isDefault("kaz")&&e.settings.isDefault("km")&&e.settings.isDefault("k7")&&e.settings.isDefault("ka")&&e.settings.isDefault("k9")&&e.settings.isDefault("kaa")&&e.settings.isDefault("ku")&&e.settings.isDefault("k8")&&e.settings.isDefault("kx")&&e.settings.isDefault("kaf")&&e.settings.isDefault("kai")&&e.settings.isDefault("k21")&&e.settings.isDefault("k18")&&e.settings.isDefault("kf")}},desktop_new_homepage_control:{allocation:[0,1],variant:"j",variants:["a"],desktopOnly:!0,englishOnly:!0,canInstallExtension:!0,atb:!0,active:!1},mobile_new_homepage_control:{allocation:[0,.1],variant:"j",variants:["a"],mobileOnly:!0,englishOnly:!0,atb:!0,active:!1,filter:function(e){return!(!e.settings.isDefault("kax")&&!e.settings.isDefault("kak)"))&&(!(!e.device.isIDevice||!(-1===e.device.iOsMajorVersion||e.device.iOsMajorVersion>=13))||!(!e.device.isAndroid||!(-1===e.device.androidMajorVersion||e.device.androidMajorVersion>=5)))}}},DDG.Data.Onboarding={_:{},a:{description:"UrbanDictionary campaign 1",variant:"z",urbanDictionaryLandingPage:!0},b:{},c:{description:"UrbanDictionary campaign 2",variant:"z",urbanDictionaryLandingPage:!0},d:{description:"UrbanDictionary campaign 3",variant:"z",urbanDictionaryLandingPage:!0},e:{description:"UrbanDictionary campaign 4",variant:"z",urbanDictionaryLandingPage:!0},f:{},g:{},h:{},i:{},j:{},k:{description:"UrbanDictionary campaign 7",variant:"z",urbanDictionaryLandingPage:!0},l:{description:"UrbanDictionary campaign 8",variant:"z",urbanDictionaryLandingPage:!0},m:{description:"UrbanDictionary campaign 9",variant:"z",urbanDictionaryLandingPage:!0},n:{description:"UrbanDictionary campaign 10",variant:"z",urbanDictionaryLandingPage:!0},o:{description:"UrbanDictionary campaign 11",variant:"z",urbanDictionaryLandingPage:!0},p:{description:"UrbanDictionary campaign 12",variant:"z",urbanDictionaryLandingPage:!0},q:{description:"UrbanDictionary campaign 13",variant:"z",urbanDictionaryLandingPage:!0},r:{description:"UrbanDictionary campaign 14",variant:"z",urbanDictionaryLandingPage:!0},s:{description:"UrbanDictionary campaign 15",variant:"z",urbanDictionaryLandingPage:!0},t:{},u:{description:"PortableApps One Button Modal",modalButtons:1},v:{description:"Youtube Video Campaign"},w:{},x:{description:"Youtube Video Campaign"},y:{},z:{description:"Pagefair 2",variant:"y",urbanDictionaryLandingPage:!0}},DDG.Data.Apps={isIPhone:"https://itunes.apple.com/us/app/id663592361?mt=8",isAndroid:"market://details?id=com.duckduckgo.mobile.android"},DDG.Data.Homepage={queries:[{href:"/?q=tilt+shift+images&ia=images",label:"tilt shift images"},{href:"/?q=thailand+beach+images&ia=images",label:"thailand beach images"},{href:"/?q=gopro+videos&ia=videos",label:"gopro videos"},{href:"/?q=jimmy+fallon+videos&ia=videos",label:"jimmy fallon videos"},{href:"/?q=weather+in+encinitas&ia=weather",label:"weather in encinitas"},{href:"/?q=weather+in+paris&ia=weather",label:"weather in paris"},{href:"/?q=sorbet+recipes&ia=recipes",label:"sorbet recipes"},{href:"/?q=tilapia+recipes&ia=recipes",label:"tilapia recipes"},{href:"/?q=thai+food+in+San+Francisco&ia=places",label:"thai food in San Francisco"},{href:"/?q=bars+near+me",label:"bars near me"},{href:"/?q=katz%27s+deli+new+york&ia=places",label:"katz's deli new york"},{href:"/?q=orange&ia=meanings",label:"orange"},{href:"/?q=daft+punk+soundcloud&ia=soundcloud",label:"daft punk soundcloud"},{href:"/?q=8oz+to+grams&ia=answer",label:"8oz to grams"},{href:"/?q=define+superlative&ia=definition",label:"define superlative"},{href:"/?q=people+in+space&ia=answer",label:"people in space"}]},DDG.Data.HiddenFields={DATE_FILTER:"df",DATE_SORT:"ds",IA_REQUERY:"iar"},function(e){e.Data.answers={_definitions:[],add:function(t){e.Data.answers._definitions.push(t)},getById:function(t){return e.Data.answers._definitions.find((function(e){return e.id===t}))||{}},getByNameId:function(t){return e.Data.answers._definitions.find((function(i){return e.duckbar.getNameId(i.name||i.id)===t}))||{}},getByIdOrFrom:function(t){return e.Data.answers._definitions.find((function(e){return t&&(e.id===t||e.from===t)}))||{}},getBySpiceId:function(t){return e.Data.answers._definitions.find((function(e){return e.convertedFromSpice===t||e.id===t}))||{}},shouldAddAutomatically:function(){return e.Data.answers._definitions.filter((function(e){return"static"===e.type||"function"==typeof e.shouldAddAutomatically&&e.shouldAddAutomatically()}))},getStaticIAs:function(){return e.Data.answers._definitions.filter((function(e){return"static"===e.type}))},convertedFromSpice:function(){return e.Data.answers._definitions.reduce((function(e,t){return t.convertedFromSpice&&(e[t.convertedFromSpice]=t),e}),{})}}}(DDG),DDG.Data.answers.add({id:"web",name:"All",nameId:"web",type:"static"}),function(e){e.Data.answers.add({id:"images",name:"Images",type:"static",answerTypeObj:{answerType:"Images"},topModule:!0,meta:{idField:"image",itemType:l("Images"),linkPrimaryText:1,autoExpand:0,developer:[{name:"env Team"}],signal_from:"images"},onAdd:function(){this.meta.autoExpand=0},onLoad:function(e,t){e&&"1"===e.is_pixelated&&(t.pixelated=!0)},parameters:[{key:"time",values:[{id:"",name:l("Any time")},{id:"Day",name:l("Past day")},{id:"Week",name:l("Past week")},{id:"Month",name:l("Past month")}]},{key:"size",values:[{id:"",name:lp("size","All sizes")},{id:"Small",name:lp("size","Small")},{id:"Medium",name:lp("size","Medium")},{id:"Large",name:lp("size","Large")},{id:"Wallpaper",name:lp("size","Wallpaper")}]},{key:"color",values:[{id:"",name:lp("image-color","All colors")},{id:"color",name:lp("image-color","Color only")},{id:"Monochrome",name:lp("image-color","Black and white")},{id:"Red",name:lp("color","Red")},{id:"Orange",name:lp("color","Orange")},{id:"Yellow",name:lp("color","Yellow")},{id:"Green",name:lp("color","Green")},{id:"Blue",name:lp("color","Blue")},{id:"Purple",name:lp("color","Purple")},{id:"Pink",name:lp("color","Pink")},{id:"Brown",name:lp("color","Brown")},{id:"Black",name:lp("color","Black")},{id:"Gray",name:lp("color","Gray")},{id:"Teal",name:lp("color","Teal")},{id:"White",name:lp("color","White")}]},{key:"type",values:[{id:"",name:lp("image-type","All types")},{id:"photo",name:lp("image-type","Photograph")},{id:"clipart",name:lp("image-type","Clipart")},{id:"gif",name:lp("image-type","Animated GIF")},{id:"transparent",name:lp("image-type","Transparent")},{id:"line",name:lp("image-type","Line Drawing")}]},{key:"layout",values:[{id:"",name:lp("image-layout","All layouts")},{id:"Square",name:lp("image-layout","Square")},{id:"Tall",name:lp("image-layout","Tall")},{id:"Wide",name:lp("image-layout","Wide")}]},{key:"license",footerLink:{url:"https://help.duckduckgo.com/duckduckgo-help-pages/features/image-license/",label:l("Learn %sMore%s","","")},values:[{id:"",name:lp("image-licence","All Licenses")},{id:"Any",name:lp("image-licence","All Creative Commons")},{id:"Public",name:lp("image-licence","Public Domain")},{id:"Share",name:lp("image-licence","Free to Share and Use")},{id:"ShareCommercially",name:lp("image-licence","Free to Share and Use Commercially")},{id:"Modify",name:lp("image-licence","Free to Modify, Share, and Use")},{id:"ModifyCommercially",name:lp("image-licence","Free to Modify, Share, and Use Commercially")}]}],sources:[{id:"ddg",name:"DuckDuckGo",requeryURL:"/i.js?l="+window.rl+"&o=json&q="}],region:!0,safeSearch:!0,templates:e.Data.templates.groups.images,serviceURL:"/i.js?l="+window.rl+"&o=json&q=",allowModuleIA:!0,isFullPage:!0,hasFeedbackButton:!0,supportsInfiniteScroll:!0})}(DDG),function(e){e.Data.answers.add({id:"videos",name:"Videos",model:"Video",type:"static",topModule:!0,answerTypeObj:{answerType:"Videos"},onAdd:function(){this.meta.autoExpand=0,e.deep.isBingV7()&&(this.parameters=this.parameters.filter((function(e){return"videoLicense"!==e.key})),this.meta.idField="url",e.Data.templates.groups.videos.item="videos_item_bing",delete this.meta.detailOverlay)},onLoad:function(e,t){e&&"1"===e.is_pixelated&&(t.pixelated=!0)},parameters:[{key:"publishedAfter",values:[{id:"",name:l("Any time")},{id:"d",name:l("Past day")},{id:"w",name:l("Past week")},{id:"m",name:l("Past month")}]},{key:"videoDefinition",values:[{id:"",name:lp("video-resolution","Any resolution")},{id:"high",name:lp("video-resolution","High definition")},{id:"standard",name:lp("video-resolution","Standard definition")}]},{key:"videoDuration",showDescriptions:!0,values:[{id:"",name:lp("video-duration","Any duration"),description:lp("video-duration","Show videos of any length")},{id:"short",name:lp("video-duration","Short"),description:lp("video-duration","Less than 4 minutes")},{id:"medium",name:lp("video-duration","Medium"),description:lp("video-duration","Between 4 and 20 minutes")},{id:"long",name:lp("video-duration","Long"),description:lp("video-duration","More than 20 minutes")}]},{key:"videoLicense",values:[{id:"",name:lp("video-license","Any license")},{id:"creativeCommon",name:lp("video-license","Creative Commons")},{id:"youtube",name:lp("video-license","YouTube Standard")}]}],sources:[{id:"ddg",name:"DuckDuckGo",requeryURL:"/v.js?l="+window.rl+"&o=json&sr=1&q="}],region:!0,safeSearch:!0,meta:{idField:"id",itemType:l("Videos"),developer:[{name:"env Team"}],signal_from:"videos",linkPrimaryText:1,autoExpand:0,detailOverlay:"VideoDetailOverlay",primaryText:l("Videos"),settingsTitleText:l("Open Settings")},templates:e.Data.templates.groups.videos,serviceURL:"/v.js?l="+window.rl+"&o=json&sr=1&q=",allowModuleIA:!0,moreText:l("More Videos"),isFullPage:!0,hasFeedbackButton:!0,supportsInfiniteScroll:!0})}(DDG),function(e){e.Data.answers.add({id:"news",name:"News",answerTypeObj:{answerType:"News"},topModule:!0,moreText:l("More News"),type:"static",meta:{developer:[{name:"env Team"}],signal_from:"news",itemType:l("News Articles"),rerender:["image"],primaryText:l("Recent News")},safeSearch:!0,region:!0,date:!0,allowVertical:!0,isFullPage:!0,hasFeedbackButton:!0,templates:{item:"news_item"},serviceURL:function(){return"/news.js?l="+window.rl+"&o=json&noamp="+(e.device.isDesktop?1:0)+"&q="}})}(DDG),DDG.Data.answers.add({id:"maps_expanded",name:"Maps",type:"static",isStaticMap:!0,answerTypeObj:{answerType:"Maps",model:"Maps"}}),function(e){e.Data.answers.add({id:"products",name:"Shopping",topModule:!0,slug:"shopping",isFullPage:!0,noModuleItems:!0,answerTypeObj:{answerType:"Products"},type:"static",hasFeedbackButton:!0,carouselHeaderText:l("Shopping"),moreText:l("More Products"),hasDynamicFilters:!0,hasCarouselFeedbackReporting:!0,hasCarouselVisibilityReporting:!0,hasSidebarFilters:!0,hasExploreByItemsEnabled:!1,hasAdStats:!0,meta:{secondaryText:l("Clear all filters"),clickableSecondaryText:1,itemType:l("Products"),autoExpand:0,sourceName:"Bing",hasAdBadge:!0,shouldFollowHeader:!0,productAds:window.Bootstrap.PRODUCTS_META_PRODUCT_ADS,isShoppingVertical:window.shfl,MetabarContentView:"ShoppingHeader"},onAdd:function(){if(!e.settings.isDefault("k1"))return!0;if(!e.searchExperiments||"b"!==e.searchExperiments.getActiveVariant("related_click")&&"b"!==e.searchExperiments.getActiveVariant("related_requery")&&"b"!==e.searchExperiments.getActiveVariant("related_done")&&"b"!==e.searchExperiments.getActiveVariant("related")||(this.hasExploreByItemsEnabled=!0),!this.isSpice){if(!e.settings.region.isProductAdsMarket()&&!this.meta.isShoppingVertical)return!0;e.settings.region.isProductAdsMarket()&&!this.meta.isShoppingVertical&&(this.meta.hidden=!0)}this.allowModuleIA=1,this.showMainSource=1},onLoad:function(t){t&&(e.pageLayout.ads.config.hasCarouselAds=!0)},templates:{item:"bing_products_item"},serviceURL:"/m.js?shopping=1&sfexp=1&o=json&q=",supportsInfiniteScroll:!0,sources:[{id:"ddg",name:"DuckDuckGo"}]})}(DDG),function(e){e.Data.answers.add({id:"autoads",name:"AutoAds",topModule:!0,noModuleItems:!0,answerType:"AutoAds",hasFeedbackButton:!0,carouselHeaderText:" ",hasCarouselFeedbackReporting:!0,hasCarouselVisibilityReporting:!1,showMainSource:!0,doNotCoerceData:!0,hasAdStats:!0,answerTypeObj:{answerType:"AutoAds"},market:window.Bootstrap.AUTOADS_MARKET,meta:{sourceName:"Bing"},onLoad:function(t){t&&(e.pageLayout.ads.config.hasCarouselAds=!0)}})}(DDG),function(e){e.Data.answers.add({id:"about",expandInPlace:!0,onAdd:function(){e.device.isMobile&&this.signal&&(this.signal="low")}})}(DDG),DDG.Data.answers.add({id:"sports_american_football_nfl",topModule:!0,name:"AmericanFootball",tabLabel:"NFL",view:"ReactModule",component:"SportsAmericanFootballNFL",viewRootPath:"Views.Modules",convertedFromSpice:"sports_nfl_games",answerTypeObj:{answerType:"ReactAnswer",model:"ReactAnswer"},from:"nfl_games"}),function(e){e.Data.answers.add({id:"sports_american_football_ncaafb",topModule:!0,name:"AmericanFootball",tabLabel:"NCAA",view:"ReactModule",component:"SportsAmericanFootballNCAA",viewRootPath:"Views.Modules",convertedFromSpice:"sports_ncaafb_games",answerTypeObj:{answerType:"ReactAnswer",model:"ReactAnswer"},from:"ncaafb_games",onAdd:function(){var t;try{var i=!["league","team","games"].includes(this.data.data.module_type),a=!1;if("team"===this.data.data.module_type){var s,o=this.data.data.most_relevant_team.id,r=this.data.data.games[0];r.away_team.id===o?s=r.away_team:r.home_team.id===o&&(s=r.home_team),"FBS"!==s.division_alias&&"FCS"!==s.division_alias&&(a=!0)}t=i||a}catch(e){t=!0}return t&&e.duckbar.failed("ncaafb_games"),t}})}(DDG),DDG.Data.answers.add({id:"sports_basketball",topModule:!0,name:"Basketball",tabLabel:"NBA",view:"Sports",component:"SportsBasketballNBA",viewRootPath:"Views.Modules",convertedFromSpice:"sports_nba_games",answerTypeObj:{answerType:"Basketball",model:"Basketball"},from:"nba_games"}),function(e){e.Data.answers.add({id:"sports_soccer_world_cup",topModule:!0,name:"Soccer",tabLabel:"World Cup",view:"ReactModule",component:"SportsSoccerWorldCup",viewRootPath:"Views.Modules",convertedFromSpice:"sports_soccer_games",answerTypeObj:{answerType:"ReactAnswer",model:"ReactAnswer"},from:"soccer_games",onAdd:function(){var t;try{t=!["league","team","games"].includes(this.data.data.module_type)}catch(e){t=!0}return t&&e.duckbar.failed("soccer_games"),t}})}(DDG),DDG.Data.answers.add({id:"recipes",topModule:!0,answerTypeObj:{answerType:"Recipes"},onAdd:function(){this.allowModuleIA=1,this.showMainSource=1,this.meta=this.meta||{},this.meta.primaryText=l("Recipes"),this.moreText=l("More Recipes")}}),DDG.Data.answers.add({id:"related_searches",name:"RelatedSearches",answerTypeObj:{answerType:"RelatedSearches"},topModule:!0,sideModule:!0,bingSlotting:!0,doNotCoerceData:!0,doNotAllowAsFallback:!0,preventTab:!0}),DDG.Data.answers.add({id:"translations",name:"Translations",topModule:!0,answerTypeObj:{answerType:"Translations",model:"Translations"},doNotCoerceData:!0,preventTab:!0}),DDG.Data.answers.add({data:{},id:"directions",name:"Directions",answerTypeObj:{answerType:"Directions",model:"Directions"},allowMultipleCalls:!0,topModule:!0,preventTab:!0}),function(e){e.Data.answers.add({id:"covid19",model:"Covid19",topModule:!0,preventTab:!0,answerTypeObj:{answerType:"Covid19"},duckbar_topic:"Coronavirus",shouldAddAutomatically:function(){return window.show_covid},onAdd:function(){return!window.show_covid||e.duckbar.future_signal_tab({signal:"high",from:"covid19"})}})}(DDG),DDG.Data.answers.add({id:"dictionary_definition",name:"definition",view:"Definitions",viewRootPath:"Views.Modules",topModule:!0,sideModule:!1,bingSlotting:!1,expandInPlace:!0,convertedFromSpice:"dictionary_definition",answerTypeObj:{answerType:"Definitions",model:"Definitions"}}),DDG.Data.answers.add({id:"maps_places",name:"Places",sideModule:!0,answerTypeObj:{answerType:"Places",model:"Place"}}),DDG.Data.answers.add({id:"maps_maps",name:"Maps",answerTypeObj:{answerType:"Maps",model:"Maps"},topModule:!0}),DDG.Data.answers.add({id:"forecast",topModule:!0,answerTypeObj:{answerType:"Forecast",model:"Forecast"}}),DDG.Data.answers.add({id:"qna",name:"Q&A",view:"ReactModule",viewRootPath:"Views.Modules",doNotCoerceData:!0,topModule:!0,sideModule:!1,bingSlotting:!1,preventTab:!0,answerTypeObj:{answerType:"ReactAnswer",model:"ReactAnswer"}}),function(e){e.Data.answers.add({id:"stocks",name:"Stock",view:"Stocks",viewRootPath:"Views.Modules",topModule:!0,sideModule:!1,bingSlotting:!1,convertedFromSpice:"stocks",answerTypeObj:{answerType:"Stocks",model:"Stocks"},load:function(t,i){i&&i.symbol&&e.Models.Answers.Stocks.api.load(t,i)}})}(DDG),DDG.Data.answers.add({id:"spreadCTA",name:"SpreadCTA",view:"SpreadCTA",viewRootPath:"Views.Modules",sideModule:!0,preventTab:!0,suppressDeviations:!0}),DDG.Data.answers.add({id:"lyrics",name:"Lyrics",view:"Lyrics",viewRootPath:"Views.Modules",sideModule:!0,expandInPlace:!0,answerTypeObj:{answerType:"Lyrics",model:"Lyrics"}}),DDG.Data.answers.add({id:"serpRetentionSurvey",name:"serpRetentionSurvey",view:"ReactModule",viewRootPath:"Views.Modules",answerTypeObj:{answerType:"ReactAnswer",model:"ReactAnswer"},sideModule:!0,preventTab:!0,suppressDeviations:!0}),DDG.Data.answers.add({id:"experimentExtensionPromo",name:"Extension Promo",topModule:!0,view:"ReactModule",viewRootPath:"Views.Modules",answerTypeObj:{answerType:"ReactAnswer",model:"ReactAnswer"},preventTab:!0}),DDG.Data.answers.add({id:"currency",name:"Currency",view:"ReactModule",viewRootPath:"Views.Modules",topModule:!0,preventTab:!0,answerTypeObj:{answerType:"ReactAnswer",model:"ReactAnswer"},convertedFromSpice:"currency"}),function(e){e.Data.answers.add({id:"infobox",pixelId:"infobox_exp",from:"disinformation_label",name:"Infobox",view:"DisinformationWarning",viewRootPath:"Views.Modules",topModule:!0,sideModule:!0,bingSlotting:!0,answerTypeObj:{answerType:"DisinformationWarning",model:"DisinformationWarning"},preventTab:!0,notTriggeredByBing:!0,onAdd:function(){return!["d","e","f","g","h","i"].includes(e.searchExperiments.getActiveVariant("infoboxexp"))}})}(DDG),function(e){e.Data.answers.add({id:"time",name:"Time",view:"ReactModule",viewRootPath:"Views.Modules",topModule:!0,sideModule:!1,answerTypeObj:{answerType:"ReactAnswer",model:"ReactAnswer"},convertedFromSpice:"time",onAdd:function(){var t=this.data;if(!t||"No matches"==t.info)return e.duckbar.failed("time"),!0;var i,a=document.querySelector('[src*="/js/spice/time/"]').getAttribute("src"),s=decodeURIComponentSafe(a.match(/time\/([^]+)/)[1]).toLowerCase().split(","),o=/\/generic\//.test(a),r=decodeURIComponentSafe(a).split("/");if(o&&7===r.length){var n=r[4],l=r[6];t.locations.length&&t.locations[0].geo&&n.indexOf(t.locations[0].geo.name)>-1&&((i=t.locations[0]).overridePlaceName=l)}else for(var d=0;d0&&i[1]||""}function n(e){var t=parseInt((e||"").split(".")[0],10);return isNaN(t)?-1:t}e.Models.Device=t=e.Models.Device||function(t){this.setMaxListeners(3e3),$.extend(this,t),this.isEnglish=window.Bootstrap.isEnglish();var i=this.ua,a=t.host||window.location.host;if(this.isEdge=!!/edge\//.test(i),this.isEdgeChromium=!!/edg\//.test(i),this.isEdgeMobile=!!/(edgios|edga)/.test(i),this.isEdge||this.isEdgeChromium||(this.isIE=!!document.all,this.isIE9=!!/msie 9/.test(i),this.isIE10p=!!/msie 1[0123456789]/.test(i),this.isIE11p=!(!/trident\/[789]/.test(i)&&!/edge\/[0123456789]/.test(i)),(this.isIE10p||this.isIE11p)&&(this.isIE=!0)),this.isWindowsPhone=window.Bootstrap.isWindowsPhone(i),this.isSafari=!(this.isWindowsPhone||this.isEdgeMobile||!/\([windows|macintosh|ipad|iphone].* version.* safari/.test(i)),this.safariVersion=-1,this.isSafari){var s=i.match(/version\/([0-9][0-9]?\.[0-9])/);this.safariVersion=s?parseFloat(s[1]):-1}if(this.isWebkit=!!/webkit/.test(i),this.isYandex=!!/yabrowser/.test(i),this.isBeakerBrowser=!!/beakerbrowser/.test(i),this.isVivaldi=!!/vivaldi/.test(i),this.isBrave=window.Bootstrap.isBrave(i),this.isChromiumBased=!(!/chrome(?!frame)|crios/.test(i)||this.isIE||this.isEdge),this.isChrome=!(!this.isChromiumBased||this.isVivaldi||this.isYandex||/opr\/[0-9][0-9]?/.test(i)||this.isBeakerBrowser||this.isEdgeMobile||this.isEdgeChromium||this.isBrave),this.isFirefox=window.Bootstrap.isFirefox(i),this.firefoxVersion=-1,this.isFirefox){var o=i.match(/(firefox|fxios)\/([0-9]+\.[0-9]+)/);this.firefoxVersion=o?parseFloat(o[2]):-1}if(this.isFirefox38AndUp=this.firefoxVersion>37,this.isFirefox51AndUp=this.firefoxVersion>50,this.isFirefoxLessThan67=this.isFirefox&&this.firefoxVersion<67,this.isFirefox67=this.isFirefox&&67===Math.floor(this.firefoxVersion),this.isFirefox68AndUp=this.isFirefox&&this.firefoxVersion>=68,this.isFirefox82AndUp=this.isFirefox&&this.firefoxVersion>=82,this.isFirefoxFocus=!!/focus/.test(i),this.operaVersion=-1,this.isOpera=!!/opera/.test(i),this.isOpera){var l=i.match(/version\/([0-9.]+)/);l&&(this.operaVersion=parseFloat(l[1],10))}else/opr\/[0-9][0-9]?/.test(i)&&(this.operaVersion=parseInt(i.match(/opr\/([0-9][0-9]?)/)[1],10));if(this.isOperaMini=!!/opera mini|opios/.test(i),this.isOperaMobile=!!/opera mobi/.test(i),this.isOSX=window.Bootstrap.isOSX(i),this.isOSXMavericksAndUp=!!/mac os x 10(_|\.)(1\d|9)/.test(i)||!!/mac os x 11(_|\.)[0-9]{1,2}/.test(i),this.isOSXCatalinaAndUp=!!/mac os x 10(_|\.)(1[5-9])/.test(i)||!!/mac os x 11(_|\.)[0-9]{1,2}/.test(i),this.isOSXBigSurAndUp=!!/mac os x 11(_|\.)[0-9]{1,2}/.test(i),this.isIPod=!!/ipod/.test(i),this.isIPadOS=window.Bootstrap.isIPadOS(i),this.isIPad=window.Bootstrap.isIPad(i),this.isIPhone=window.Bootstrap.isIPhone(i),this.isIDevice=window.Bootstrap.isIDevice(i),this.isIOS8p=window.Bootstrap.isIOS8p(i),this.isIOS8pSafari=!(!this.isIOS8p||this.isChrome||this.isOperaMini||this.isFirefox),this.isMobileSafari=this.isSafari&&this.isIDevice&&!(this.isBrave||this.isFirefox||this.isYandex),this.iOsMajorVersion=-1,this.isIDevice&&(this.iOsMajorVersion=n(r(/os (\d+([_\s]\d+)*) like mac os x/i,i).replace(/[_\s]/g,"."))),this.isAndroid=!(this.isWindowsPhone||!/android/.test(i)),this.isLegacyAndroid=this.isAndroid&&/android ([1-3](\..+)?|4(\.[0-2].*)?)(;|$)/.test(i),this.isAndroid4_3AndUp=this.isAndroid&&!this.isLegacyAndroid,this.androidMajorVersion=-1,this.isAndroid&&(this.androidMajorVersion=n(r(/android[\s/-](\d+(\.\d+)*)/i,i))),this.isBlackberry=!!/blackberry/.test(i),this.chromeVersion=-1,this.isChromiumBased){var d=i.match(/(chrome|crios)\/([0-9]+)\./);this.chromeVersion=d?parseInt(d[2],10):-1}this.isChrome31AndUpOnAndroid=!!(this.isAndroid&&this.isChrome&&this.chromeVersion>30),this.isChrome48AndUp=!!(this.isChrome&&this.chromeVersion>47),this.isAndroidChromeNoOpenSearch=!!(this.isAndroid&&this.isChrome&&this.chromeVersion>31&&this.chromeVersion<57),this.isSilk=!!/silk/.test(i),this.isKonqueror=!!/konqueror/.test(i),this.isWindows=!!/windows/.test(i),this.isWindows10=!!/windows nt 10/.test(i),this.isLinux=!(this.isAndroid||!/linux/.test(i)),this.isOnion=window.Bootstrap.isOnion(a),this.isDDGIgnore=!!/ddgignore/.test(i),this.isDDGTest=window.Bootstrap.isDDGTest(i),this.isSamsung=!!/samsungbrowser/.test(i),this.isDDGApp=window.Bootstrap.isDDGApp(i,t.qs),this.isUCBrowser=!!/(ucbrowser)/.test(i),this.isUCBrowserIOS=this.isUCBrowser&&this.isIPhone,this.isDDGmacOS=!!navigator.duckduckgo&&"macos"===navigator.duckduckgo.platform||/^mozilla\/.*\(macintosh;.*\).*applewebkit\/.*\(khtml, like gecko\)$/.test(i),this.isRetina=is_retina=this.dpr>1,this.is2x=e.is2x=this.dpr>1,this.is3x=e.is3x=this.dpr>2,this.hasFixedHeaderSupport=!this.isIDevice,this.isAppleDevice=this.isIDevice||this.isOSX,this.isIDevice&&(this.isChrome?this.hasFixedHeaderSupport=this.chromeVersion>=57:this.isFirefox?this.hasFixedHeaderSupport=this.firefoxVersion>=7.2:this.isUCBrowserIOS?this.hasFixedHeaderSupport=!1:this.hasFixedHeaderSupport=this.isIOS8pSafari);var c="Browser";this.isDDGIgnore?c="Ignore":/seamonkey/.test(i)?c="SeaMonkey":/iceape/.test(i)?c="Iceape":/palemoon/.test(i)?c="PaleMoon":this.isBrave?c="Brave":this.isSamsung?c="Samsung Internet":this.isFirefox?c="Firefox":/opr\//.test(i)||(this.isAndroid||this.isIDevice)&&(this.isOperaMobile||this.isOperaMini||-1!==this.operaVersion)?c="Opera":this.isFirefoxFocus?c="Focus":this.isUCBrowser?c="UC Browser":this.isEdge||this.isEdgeChromium||this.isEdgeMobile?c="Edge":this.isAndroid?c="Android":/xbox/.test(i)?c="xBox":/midori/.test(i)?c="Midori":/maxthon/.test(i)?c="Maxthon":this.isYandex?c="Yandex":/vivaldi/.test(i)?c="Vivaldi":this.isChrome?c="Chrome":/fennec/.test(i)?c="Fennec":/epiphany/.test(i)?c="Epiphany":/uzbl/.test(i)?c="Uzbl":this.isIE&&"Win64"===navigator.platform&&!function(){var e;try{e=!!new ActiveXObject("htmlfile")}catch(e){}return e}()&&Modernizr.touch&&document.documentElement.clientWidth==screen.width?c="IEMetro":this.isIE?c="IE":this.isOpera?c="Opera":this.isIPad?c="iPad":this.isIPhone?c="iPhone":/arora/.test(i)?c="Arora":this.isSafari?c="Safari":this.isKonqueror?c="Konqueror":this.isBlackberry?c="Blackberry":/phantomjs/.test(i)?c="PhantomJS":this.isDDGmacOS?c="DDG macOS":this.isIDevice&&(c="iOS"),this.isDDGApp&&(c="DDG "+c),this.browserName=e.browserName=c,this.pixelBrowserName=this.isUCBrowser?"ucbrowser":c.toLowerCase(),this.pixelPlatformName=this._getPixelPlatformName(),this.pixelBrowserVersion=this._getPixelBrowserVersion(),this.displayBrowserName=this.browserName,"IEMetro"===c?this.displayBrowserName="IE":"iPhone"===c||"iPad"===c?this.displayBrowserName="Safari":"Android"===c&&(this.displayBrowserName="Chrome"),this._updateScreenSize(),this._updateIsMobileDevice(),this.isSafariWithNativeDDG=this._isSafariWithNativeDDG(),this.isFirefoxWithNativeDDG=this._isFirefoxWithNativeDDG(),this.isIPhone&&!this.isIPod||/mac os x 10[_.]1\d/.test(this.ua)||this.isAndroid&&/mobile/.test(this.ua)&&(this.isChrome||this.isFirefox||this.isEdgeMobile||this.isUCBrowser)||this.isWindowsPhone||this.isBlackberry?this.canMakePhoneCalls=!0:this.canMakePhoneCalls=!1,this.isMobileDevice&&"Firefox"===this.browserName&&(screen.width&&screen.width20&&!this.isMobileDevice||this.chromeVersion>=50||this.safariVersion>7&&!this.isWindows&&!this.isMobileDevice||this.isIOS8pSafari||this.safariVersion>=8&&this.isIDevice||this.operaVersion>14&&!this.isMobileDevice||this.isFirefox38AndUp||this.isIOS8p&&this.isFirefox||this.isBrave||this.isUCBrowser||this.isDDGmacOS),this.pixelId=this.isMobile||this.isMobileDevice?"m":"d",this.isMobileDevice&&(this._wasPortrait=this.isMobilePortrait());var p=$.throttle||window.Cowboy.throttle;window.addEventListener("resize",p(200,this._onResize.bind(this))),window.addEventListener("scroll",this._onScroll.bind(this)),void 0!==document.hidden?(this._visibilityChange="visibilitychange",this._visibilityState="visibilityState"):void 0!==document.mozHidden&&(this._visibilityChange="mozvisibilitychange",this._visibilityState="mozVisibilityState"),this._visibilityChange&&document.addEventListener(this._visibilityChange,this._onVisibilityChange.bind(this),!1)},t.prototype=$.extend({},EventEmitter2.prototype,{scrollTop:function(t,i,a){return void 0===t?void 0!==this._scrollTop?this._scrollTop:this._scrollTop=e.$doc.scrollTop():t===this.scrollTop()?(a&&a(),this._scrollTop=t):(i&&!$.isNumeric(i)&&(i=e.animation_speed),this.$scrollDoc=this.$scrollDoc||$("html,body"),i?this.$scrollDoc.animate({scrollTop:t},i,a):(this.$scrollDoc.scrollTop(t),a&&a()),this._scrollTop=t)},getBrowserMoreURL:function(){var e="https://help.duckduckgo.com/desktop/";return this.isChrome?e+"chrome":this.isOpera?e+"opera":this.isSafari&&!this.isSafariWithNativeDDG?e+"safari":"SeaMonkey"===this.browserName?"https://addons.mozilla.org/seamonkey/addon/duckduckgo-ssl/":this.isFirefox?e+"firefox":void 0},canAddToBrowser:function(){var e=this.getAddToBrowserDirections();return e.useForSearch||e.setAsHomepage},getAddToBrowserDirections:function(){if(this._addToBrowserDirections)return this._addToBrowserDirections;var t,i,a=this.browserName;return this._hasInstallationInstructions()?this.isDDGApp?this._addToBrowserDirections={}:("IE"===a?i="ie":"SeaMonkey"===a?i="seamonkey":"PaleMoon"===a?i="palemoon":e.addToBrowser.canAddToBraveIOS()?i="brave_ios":e.addToBrowser.canAddToMobileFirefox()&&this.isAndroid?i="firefox_android":e.addToBrowser.canAddToMobileFirefox()&&this.isIDevice?i="firefox_ios":this.isFirefoxWithNativeDDG?i="firefox":"Firefox"===a?i="firefox_old":e.device.isUCBrowser&&(this.isAndroid||this.isIDevice)?i="uc_browser_mobile":e.addToBrowser.canAddToChromeMobile()&&this.isAndroid?i="chrome_android_default":e.addToBrowser.canAddToChromeMobile()&&this.isIDevice?i="chrome_ios_default":this.isEdgeMobile&&this.isAndroid?i="edge_android_default":this.isEdgeMobile&&this.isIDevice?i="edge_ios_default":e.addToBrowser.canAddToBraveAndroid()?i="chrome_android_default":this.isChrome&&this.isAndroid?i="chrome_android":"Chrome"===a?i="chrome":"Maxthon"!==a||this.isOSX?this.isSafariWithNativeDDG?i="safari":this.isIOS8p&&this.isSafari?i="ios8":"Safari"===a&&window.postMessage&&this.isOSX?i="safari_old":"Safari"===a&&window.postMessage?i="safari_windows":"Opera"===a?i="opera":"Vivaldi"===a?i="vivaldi":"Edge"===a?i="edge":"Brave"===a&&(i="brave"):i="maxthon","IE"===a?t="ie":a.match(/^Firefox|PaleMoon|SeaMonkey$/)?t="firefox":"Maxthon"===a?t="maxthon":"Chrome"===a?t="chrome":"Safari"===a?t="safari":"Opera"===a?t="opera":"Vivaldi"===a?t="vivaldi":"Edge"===a&&(t="edge"),this._addToBrowserDirections={useForSearch:i&&"use_for_search_"+i,setAsHomepage:t&&"set_as_homepage_"+t}):this._addToBrowserDirections={}},DDGisBrowserDefault:function(){return this.ua.match(/palemoon|porteus|qupzilla|lxle/gi)},isTeapot:function(){return this.width>=590&&this.height<=s},isMobileLandscape:function(){return this.isMobile&&this.width>this.height&&this.isAndroid&&this.width>=425},isMobilePortrait:function(){return this.isMobile&&!this.isMobileLandscape()},isDDGMobileOrDesktopApp:function(){return this.isDDGApp||this.isDDGmacOS},widthBreakpoint:function(){for(var e=i.length;--e;){var t=i[e];if(this.width706)},_isFirefoxWithNativeDDG:function(){return"Firefox"===this.browserName&&(navigator.buildID&&parseInt(navigator.buildID,10)>=20141028112145)},_getPixelBrowserVersion:function(){var e=0;return this.isChrome?e=this.chromeVersion:this.isFirefox?e=this.firefoxVersion:this.isSafari?e=this.safariVersion:-1!==this.operaVersion?e=this.operaVersion:this.isIE11p?e=11:this.isIE10p?e=10:this.isIE9&&(e=9),e},_getPixelPlatformName:function(){var e="other";return this.isAndroid?e="android":this.isIPod?e="ipod":this.isIPad?e="ipad":this.isIPhone?e="iphone":this.isWindowsPhone?e="winphone":this.isWindows?e="windows":this.isLinux?e="linux":this.isBlackberry?e="blackberry":this.isOSX?e="mac":"DDG iOS"===this.browserName&&(e="ios"),e},_hasInstallationInstructions:function(){if(this.isSilk)return!1;var t=!0;return(this.isMobileDevice||this.isMobile)&&(t=e.addToBrowser.canAddToMobileBrowser()||this.isAndroidChromeNoOpenSearch),t},_onResize:function(e){this._updateScreenSize()&&(e.isRotation=this.isMobileDevice&&this._wasPortrait!=this.isMobilePortrait(),this._wasPortrait=this.isMobilePortrait(),this.emit("resize",e))},_onScroll:function(e){delete this._scrollTop,this.emit("scroll",e)},_onVisibilityChange:function(e){this.emit("visibilitychange",d[this._visibilityState])},_addIsMobileClass:function(){this.isMobile&&(document.querySelector("html").className+=" is-mobile")},isSafariLessThanVersion:function(e){return this.isSafari&&parseFloat(this.safariVersion)-1},_onKeydown:function(t){var a=t.keyCode;clearTimeout(this._activeTimeout),this.set("active",1),fq||kk&&"1"!=kk||t.ctrlKey||t.metaKey||this.focusedOnInput()||!e.duckbar||!e.duckbar.areOrganicsShowing||this.enableSERPShortcuts&&this._onSERPKeydown(t);var s=i[a];!s||t.altKey||t.shiftKey||(this.namespace&&this.emit(s+"."+this.namespace,t),this.emit(s,t)),this._activeTimeout=setTimeout(function(){clearTimeout(this._activeTimeout),this.set("active")}.bind(this),500)},_onSERPKeydown:function(e){32==e.keyCode&&nksb()}})}(DDG),function(e){var t=DDG.Models,i=t.Base;t.SelectList=function(e){i.call(this,e),this.select(e.selectedId||this.values[0].id)},t.SelectList.prototype=$.extend({},i.prototype,{select:function(e){var t;this.bing&&$.isArray(e)?this._selectMultiple(e):(this.values.forEach((function(i){i.id===e?(i.selected=!0,t=i):i.selected=!1})),t?this.set("selected",t):this.select(this.values[0].id))},getDisplayName:function(e){return e>1?this.key+" ("+e+")":this.key},_selectMultiple:function(e){var t=[];this.values.forEach((function(i){-1!==e.indexOf(i.id)?(i.selected=!0,t.push(i)):i.selected=!1})),t.length>0?(this.set("selected",t),this.displayName=this.getDisplayName(t.length)):this.select(this.values[0].id)}})}(),function(e){var t=e.Models,i=t.Base;t.Deep=function(e){this._backData=e.backData,this._device=e.device,this._page=e.page,this._pixel=e.pixel,this._settings=e.settings,this.hideRelated=window.iqa,this.results={},this.resultDomains={},this.bindEvents([[this,"load:completed",this._onLoadCompleted],[this,"load:deferred",this._onLoadDeferred],[this,"load:initial",this._onLoadInitial]]),this.setMaxListeners(3e3)},t.Deep.prototype=$.extend({},i.prototype,{isLastResult:!1,isOutOfResults:!1,pageNumber:1,url:null,deferred:!1,pending:!1,completed:!1,_initial:!1,started:0,finished:0,_currentPageItems:{a:[],d:[]},initialize:function(e){this.url=e,this._shouldDefer()?this.emit("load:deferred"):this.run()},_shouldDefer:function(){return window.Bootstrap.shouldDeferDeep(e.duckbar&&e.duckbar.validateRequery)},run:function(e){nrj(this.url,!1,!1,e),this.pending=!1},_onLoadCompleted:function(){this.completed=!0,this._initial||this.emit("load:initial"),this.emit("load:any")},_onLoadDeferred:function(){this.pending=!0,this.deferred=!0,this._initial||this.emit("load:initial"),this.emit("load:any")},_onLoadInitial:function(){this._initial=!0},on:function(e,t,i){if(this._initial&&"load:initial"===e)return t.call(this);this._initial&&"load:any"===e&&t.call(this),EventEmitter2.prototype.on.call(this,e,t,i)},timeSinceStarted:function(){return this.started?(new Date).getTime()-this.started:0},timeSinceFinished:function(){return this.finished?(new Date).getTime()-this.finished:0},getResultCount:function(){return r1c},getFirstSource:function(){return this.results&&this.results.d&&this.results.d[0]&&this.results.d[0].s},getAttributionSource:function(){if(!this.results||!this.results.d||this.results.d.length<=5)return"";this.getFirstSource();return""},canShowAttribution:function(){return!this.showedAttribution&&!!this.getAttributionSource()},addResults:function(e,t){this.results[e]?this.results[e]=this.results[e].concat(t):this.results[e]=t,this._emitChange("results")},_checkBackClickFromSecondPage:function(){if(this.getInstance("settings").autoloadDisabled()&&!this._hasShownFirstPage){var e=this.getInstance("backData").getId(),t=e&&e.match(/r([1a])-([0-9]*)/);t&&(this._hasShownFirstPage="1"===t[1]&&parseInt(t[2],10)>8||"a"===t[1]&&parseInt(t[2],10)>0)}},nrnWrapper:function(e,t,i){var a=this.getInstance("page").ads,s=this.getInstance("settings").autoloadDisabled()&&"d"===e;this._checkBackClickFromSecondPage(),s&&!this._hasShownFirstPage?(this._currentPageItems[e]=t.slice(0,10),this._pendingOrganics=t.slice(10),this._hasShownFirstPage=!0,t=this._currentPageItems[e]):this._currentPageItems[e]=t,this.addResults(e,t),"a"===e&&!a.isBlocked()&&t.length&&this._sendAdImpressions(t),"a"===e&&1===this.pageNumber&&a.setAds(t),this._currentPageItems.a.length&&this._currentPageItems.d.length?this._nrnAdsAndOrganics():"d"===e&&(nrn(e,t,!0,!0),i||this._setPageRendered(),this._currentPageAdsReset(),this._currentPageOrganicsReset())},pageNumberIncrement:function(){return++this.pageNumber},pageNumberDecrement:function(){return--this.pageNumber},hasPendingResults:function(){return this._pendingOrganics&&this._pendingOrganics.length},showPendingResults:function(){if(this.hasPendingResults()){var t=this._pendingOrganics;this._pendingOrganics=null,this.nrnWrapper("d",t,!0),e.ImageLoader.registerAll($(".js-lazyload-icons"),"scrollY")}},hasMoreResultsToLoad:function(){var e=this.results.d?this.results.d.length:0,t=this.hasPendingResults(),i="";return t?i=this._pendingOrganics[t-1].n:e&&(i=this.results.d[e-1].n),!!i},shouldShowNoMoreResultsMessage:function(){var t=e.page.ads.getAds().length,i=this.getResultCount()+t;return 1===this.pageNumber&&i&&i<10&&!$(".pinned-to-bottom .no-results").length&&!$(".pinned-to-bottom .related-searches").length},setUpstream:function(e){e&&(this.upstream=e)},isUpstream:function(e){return this.upstream&&e===this.upstream},isBingV7:function(){return!!this.isBingv7aa||this.isUpstream("bingv7aa")},anomalyDetectionBlock:function(t){var i={c:"dadb",cc:t.cc,gk:t.gk,iadb:t.iadb,sc:t.sc,e:t.e,p:t.p};if(e.pixel.fire("tqadb",i),t.e)return e.pixel.fire("tqadbe",i),void window.location.replace("/50x-tq.html?tq="+t.gk);t.iadb&&t.sc&&(this._fireDelayedTQPixel(2),e.pixel.fire("tqadbm",i),new e.Views.AnomalyModal({appendTo:$("body"),model:new e.Models.AnomalyModal(t)}))},_fireDelayedTQPixel:function(t){setTimeout((function(){e.pixel.fire("tqadbmd")}),1e3*t)},_currentPageAdsReset:function(){this._currentPageItems.a=[]},_currentPageOrganicsReset:function(){this._currentPageItems.d=[]},_sendAdImpressions:function(t){var i={},a=!1;i.n=t.length,i.rl=window.rl,t.forEach(function(i,s){if(i.adn=t.length,!a){var o=e.getProperty(i,"adext.sitelinks.l");o&&o.filter&&(a=o.filter((function(e){return e.snippet})).length>0)}1===this.pageNumber&&(i.adf=1)}.bind(this)),i.sld=a?1:0;var s=t[0].d;(s=(s=s.split("/")).shift())&&(i.d=s),window.sourceTag&&(i.st=window.sourceTag);try{i.ds=t.map((function(e){return e.d})).join(","),t.some((function(e){return e.debug}))&&(i.debug=encodeURIComponent(JSON.stringify(t.map((function(e){return e.debug})))))}catch(e){}this.getInstance("pixel").fire("ad",t[0].s||"default",i)},_nrnAdsAndOrganics:function(){var e=!1;this.getInstance("settings").autoloadDisabled()&&!this._hasRenderedFirstPage&&(this._blockResultSplit=!0,this._currentPageItems.d.length<10&&(this._blockResultSplit=!1)),this._currentPageItems.a.length&&(nrn("a",this._currentPageItems.a,true,e),e=!0,this._currentPageAdsReset(),nrn("d",this._currentPageItems.d,true,e)),this._currentPageAdsReset(),this._currentPageOrganicsReset(),this._setPageRendered()},_setPageRendered:function(){this.finished||this.set("finished",(new Date).getTime()),this.emit("rendered"),this.getInstance("settings").autoloadDisabled()&&(this._hasRenderedFirstPage=!0,this._blockResultSplit=!1)}})}(DDG),function(e){var t=e.Models,i=t.Base,a=[{name:l("Any time"),id:""},{name:l("Past day"),id:"d"},{name:l("Past week"),id:"w"},{name:l("Past month"),id:"m"},{name:l("Past year"),id:"y"}];t.Search=function(t){this.dateFilterId=window[e.Data.HiddenFields.DATE_FILTER],this.deepAnswerIAs={},this.isAdultQuery=window.iqa,this.isMinusQuery=window.iqm,this.isQuoteQuery=window.iqq,this.isDomainQuery=window.iqd,this.isVertical=!1,this.isSiteQuery=window.rq&&-1!==window.rq.indexOf("site%3A"),i.call(this,t),this.on("change:dateFilterId",this._setDateFilter.bind(this)),this.on("change:isVertical",this._changedVertical.bind(this)),this._setDateFilter()},t.Search.prototype=$.extend({},i.prototype,{_dateFilters:a,requery:function(){this.emit("requery")},addBangToSiteInQuery:function(e,t){return t.replace(new RegExp("(^|\\s)("+e+")($|\\s)","i"),"$1!$2$3")},isLatLonQuery:function(){return!!e.get_query().match(/latitude|longitude/gi)},getDateFilterName:function(){return this._dateFilterName},getResultCount:function(){return window.r1c||0},_changedVertical:function(){this.isVertical&&(this.dateFilterId===a[4].id||this.isCustomDateFilter())?(this._pastDateFilter=this.dateFilterId,this.set("dateFilterId","")):!this.isVertical&&this._pastDateFilter&&this.set("dateFilterId",this._pastDateFilter)},_setDateFilter:function(){this.isCustomDateFilter()&&(this._dateFilterName=this._customDateDisplayName()),this._dateFilters.forEach(function(e){e.id===this.dateFilterId?(e.selected=1,this._dateFilterName=e.name):e.selected=0}.bind(this))},isCustomDateFilter:function(){return 2===this.getDateRange().length},getDateRange:function(){return this.dateFilterId?this.dateFilterId.split("..").reduce((function(e,t){return Date.parse(t)&&e.push(new Date(t+"T00:00:00")),e}),[]):[]},_customDateDisplayName:function(){var e={day:"numeric",month:"short",year:"numeric"},t=this.getDateRange().map((function(t){return new Date(t).toLocaleDateString(window.locale.replace("_","-"),e)}));return t[0]===t[1]?t[0]:t.join(" - ")},getDateFilters:function(){return this.isVertical?this._dateFilters.slice(0,4):this._dateFilters},getSiteQuery:function(t){if(!t)return!1;t=decodeURIComponentSafe(t);var i,a,s,o,r=!1,n=[],l=t=e.strip_html(t),d=[];if(s=t.match(/((NOT )?SITE:)([^\s]+)/)){r=!!s[2],d=s[3].split(","),l=t.substring(0,s.index-1);for(var c=0;c1||-1!==rqd.toLowerCase().indexOf("not site:"))&&(n=[]),{str:t,query:l,sites:n,isExcluding:r}},isYhsSource:function(){return"yhs"===this.src},isQuotedQuery:function(){return e.get_query().match(/(\'.+\')|(\".+\")/)}})}(DDG),function(e){var t=e.Models.Base;e.Models.Search.Spelling=function(e){t.call(this,e),this.type=this.type.toLowerCase(),this.query=decodeURIComponentSafe(e.link),this.recourseQuery=decodeURIComponentSafe(e.recourseLink),this.parsedQuery=e.suggestion&&e.suggestion.replace(/<\/?[^>]+(>|$)/g,""),"nmrc"===this.type&&(this.parsedQuery=window.rq)},e.Models.Search.Spelling.prototype=$.extend({},t.prototype,{isValidType:function(){return this.type&&this.type.match(/irf|dym|nmrc/)},makeSpellingURL:function(t,i,a){a&&(t+="&iar="+a+"&ia="+a);var s=e.searchExperiments?e.searchExperiments.getActiveVariant("rspexp2"):null;return"/?q="+t+(i?"&norw=1":"")+(w.rv?"&v="+w.rv:"")+(w.kurl?w.kurl:"")+(s?"&rspexp="+s:"")}})}(DDG);var cd,dz,da,fk,fb,fs,fm,fe,fl,fo,fa,fn,fq,fz,ie,io,ir,is,ga,gd,rc,rd,rs,rsd,rdc,rsc,rtc,rii,rin,rir,rl,rp,reb,rebc,sx,sy,tl,tlz,tac,tr,ts,tn,tsl,tz,nir,kurl,is_mobile,dow,iosx,d=document,w=window;function ncku(e){DDG.device.isIE||e.metaKey||(fa=0)}function nckd(e){!DDG.device.isIE&&e.metaKey&&(fa=1)}function ncf(e){var t,i;fmx=e.clientX,fmy=e.clientY,fmx>viewport_width-100&&fmy>parseInt(viewport_height)-17&&(DDG.settings.isDefault("kav")||DDG.deep.isLastResult||!nrb||nrb()),t="",t=e.srcElement?e.srcElement:e.target;var a=0,s=0;DDG.device.isIE&&(nkdc(e)||nkdm(e))&&(a=1),DDG.device.isEdge&&(nkdc(e)||nkdm(e))&&(s=1);var o=e.which&&2==e.which,r=e.which&&3==e.which;if(s||a||o||r){for(fm=1;t&&t!=window;){if(t.nodeName&&"A"==t.nodeName){if(t.getAttribute&&"true"===t.getAttribute("data-handled-by-react"))break;if(DDG.isJSURL(t.href))return t.onclick&&t.onclick(),!1;t.href=DDG.get_http_redirect(t,r),fl=1;break}if((i=t.id)&&!r){if("links"==i)break;if(rc&&i==rc.id){if(t.getAttribute&&"true"===t.getAttribute("data-handled-by-react"))break;nrg(rc,0,e,1)}}if(!t.parentNode)break;t=t.parentNode}setTimeout((function(){fm=0,fl=0}),1e3)}else fm=0}function ncg(e){fmx=0,fmy=0,!DDG.settings.isDefault("kav")&&e.clientX>viewport_width-25&&!DDG.deep.isLastResult&&nrb&&nrb()}function nir(e){var t,i,a;$(e?".highlight_"+e:".result").each((function(s,o){if(!(o&&o.getAttribute&&"true"===o.getAttribute("data-handled-by-react")||(t=$(o)).attr("data-nir")||(is_mobile_device||(t.on("mouseenter",(function(e){if(fk||fe)return!1;rc&&rc!=this&&nua("nro",rc),nua("nrv",this),rc=this})),t.on("mouseleave",(function(e){if(fk||fe)return!1;nua("nro",this)}))),"a"!=e&&t.click((function(e){e&&e.target&&e.target.getAttribute&&"true"===e.target.getAttribute("data-handled-by-react")||("did_you_mean"!==this.id&&organicClick(this,e),fe||nrg(this,0,e,0))})),t.attr("data-nir",1),e&&"a"!=e&&"v"!=e)))for(i=t.find("a"),a=0;a=65},url:"https://addons.mozilla.org/firefox/downloads/latest/duckduckgo-for-firefox/addon-385621-latest.xpi",reviewsUrl:"https://addons.mozilla.org/firefox/addon/duckduckgo-for-firefox/reviews/",watchCSSForSuccess:!0},Chrome:{canInstall:function(){return!this.device.isMobileDevice&&this.device.isChrome&&(this.device.isWindows&&this.device.chromeVersion>=36||this.device.isOSX&&this.device.chromeVersion>=56)},url:"https://chrome.google.com/webstore/detail/bkdgflcldnnnapblkhphbgpggdiikppg"},Edge:{canInstall:function(){return!e.device.isEnglish&&(!this.device.isMobileDevice&&this.device.isEdgeChromium&&(this.device.isWindows&&this.device.chromeVersion>=36||this.device.isOSX&&this.device.chromeVersion>=56))},url:"https://chrome.google.com/webstore/detail/bkdgflcldnnnapblkhphbgpggdiikppg"},Brave:{canInstall:function(){return!this.device.isMobileDevice&&this.device.isBrave&&(this.device.isWindows&&this.device.chromeVersion>=36||this.device.isOSX&&this.device.chromeVersion>=56)},url:"https://chrome.google.com/webstore/detail/bkdgflcldnnnapblkhphbgpggdiikppg"},Vivaldi:{canInstall:function(){return!1},url:"https://chrome.google.com/webstore/detail/bkdgflcldnnnapblkhphbgpggdiikppg"},Safari:{canInstall:function(){return!this.device.isMobileDevice&&this.device.isOSX&&this.device.isOSXCatalinaAndUp&&!this.device.isIPadOS&&this.device.isSafari&&this.device.safariVersion>=13&&0===document.location.pathname.indexOf("/app")},url:"https://apps.apple.com/app/duckduckgo-privacy-essentials/id1482920575",watchCSSForSuccess:!0}};e.Models.Extension=function(a){t.call(this,a),this.device=a&&a.device||e.device,$.extend(this,i[this.device.browserName]||{})},e.Models.Extension.prototype=$.extend({},t.prototype,{canInstall:function(){return!1},isInstalled:function(t){return void 0===this._isInstalled||t&&t.nocache?"duckduckgo"in navigator?(this._isInstalled=window.Bootstrap.isExtensionInstalled(),this._isInstalled):(this._isInstalled=window.Bootstrap.isExtensionInstalledLegacy(e.device.ua,e.device.qs),this._isInstalled&&e.pixel.fire("old_extension_detected"),this._isInstalled):this._isInstalled}})}(DDG),function(e){var t=e.Models.Base;e.Models.OpenInApp=function(i){i=i||{},t.call(this,{}),this._settings=i.settings||e.settings},e.Models.OpenInApp.prototype=$.extend({},t.prototype,{createAppQueryUrl:function(t){var i=(t=t||{}).qs||"";i&&i.startsWith("?")&&(i=i.substring(1)),i&&!i.startsWith("&")&&(i="&"+i);var a=this._settings.THEME_KEY;this._settings.isDefault(a)||(i+="&"+a+"="+this._settings.get(a));var s="";return t.campaign&&(s="&referrer=utm_source%3D"+t.campaign),"intent://duckduckgo.com/?q="+encodeURIComponent(e.history.get("q"))+i+"#Intent;scheme=https;package=com.duckduckgo.mobile.android;S.browser_fallback_url="+(e.device.isFirefox?encodeURIComponent("https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.duckduckgo.mobile.android"+s):encodeURIComponent("https://play.google.com/store/apps/details?id=com.duckduckgo.mobile.android"+s))+";end"}})}(DDG),function(e){var t=e.Models.Base;e.Models.Ads=function(e){this._deep=e.deep,this._device=e.device,this._settings=e.settings,t.call(this,e),this.ads=[]},e.Models.Ads.prototype=$.extend({},t.prototype,{block:function(){this.set("blocked",1)},isBlocked:function(){return!(!this.blocked&&this.getInstance("settings").isDefault("k1"))},setAds:function(e){!this.isBlocked()&&e&&e.length&&this.set("ads",e)},getAds:function(){return this.ads},getAdIndex:function(e){for(var t=0;t=0;c--)e=o(n[c],t[n[c]],a===n[c]),n[c]!==s&&e.name&&i.unshift(e);return i},fetchSuggested:function(t){e.device.getCountry(this._onFetchedSuggested.bind(this,t))},isProductAdsMarket:function(){return window.Bootstrap.isProductAdsMarket()},isAutoAdsMarket:function(){return window.Bootstrap.isAutoAdsMarket(e.searchExperiments)},_onFetchedSuggested:function(e,i,a){if(!a)return e&&e();var s=a.toLowerCase(),o=[],r=function(t){this.set({suggestedRegion:t}),e&&e(null,t)}.bind(this);if("us"===s)return e&&e();for(var n in"gb"===s&&(s="uk"),t){n.split("-")[0]===s&&o.push(n)}if(!o.length)return e&&e();if(1===o.length||!window.locale)return r(o[0]);for(var l=window.locale.split("_")[0],d=0;de&&(this.prevRegions=this.prevRegions.slice(0,e))},getISOLocale:function(){var e=this.getId();if(!e||"wt-wt"===e)return window.navigator.language;var t=e.split("-"),i=t[0];return"uk"===i&&(i="GB"),t[1]+"-"+i.toUpperCase()}});var r=function(e){return e.split("-")[0]},n=function(e){return"/assets/flags/"+(DDG.is3x?"60":DDG.is2x?"40":"20")+"/"+r(e)+".png?v=4"},d=function(e){return"/assets/flags/"+(DDG.is3x?"48":DDG.is2x?"32":"16")+"/"+r(e)+".png?v=3"},c=function(e){return"/assets/flags/"+(DDG.is3x?"96":DDG.is2x?"64":"32")+"/"+r(e)+".png?v=4"}}(DDG),function(e){var t=e.Data.Settings.kae;e.Models.Settings.Themes={KEY:"kae",getSystemTheme:function(){if(e.device.getColorScheme){var t=e.device.getColorScheme();return t?this._getThemeForColorScheme(t):void 0}},getAll:function(){return DDG.objectToArray(t.values)},getSettingsForTheme:function(e){var i=t.values[e],a=t.values[t.default].settings;if(i)return $.extend({},a,i.settings);var s=tinycolor(e);if(s.isValid()){var o=s.toHexString();return $.extend({},a,{kj:o,k7:o})}return $.extend({},a)},enableColorSchemeDetection:function(e){this.colorSchemeMatching||(this.matcher=e,this.prefersDarkMode=window.matchMedia("(prefers-color-scheme: dark)"),this.prefersLightMode=window.matchMedia("(prefers-color-scheme: light)"),this.prefersDarkMode.addListener(e),this.prefersLightMode.addListener(e),this.colorSchemeMatching=!0)},disableColorSchemeDetection:function(){this.colorSchemeMatching&&(this.prefersDarkMode.removeListener(this.matcher),this.prefersLightMode.removeListener(this.matcher),this.colorSchemeMatching=!1)},_getThemeForColorScheme:function(e){if(e){var t=this.getAll().find((function(t){return t.colorScheme&&t.colorScheme===e}));return t||void 0}}}}(DDG),function(e){var t="/settings.js",i=" CloudSave Settings",a="Error Loading"+i,s="Error Saving"+i,o="Error Deleting"+i,r={url:t,type:"POST",dataType:"json",contentType:"application/json",processData:!1};e.Models.Settings.CloudSave={keyField:"objectKey",isKeyField:function(e){return e===this.keyField||"key"===e},load:function(e,i){if(!e)return i(a);$.ajax({url:t+"?key="+e,dataType:"json",success:function(e){i(null,e)},error:function(){i(a)}})},save:function(e,t,i){if(!e||!t)return i&&i(s);$.ajax($.extend({data:JSON.stringify({command:"write",objectKey:e,obj:t}),success:function(){i&&i(null,t)},error:function(){i&&i(s)}},r))},destroy:function(e,t){if(!e)return t(o);$.ajax($.extend({type:"POST",data:JSON.stringify({command:"delete",objectKey:e}),success:function(){t&&t(null,!0)},error:function(e){t&&t(o)}},r))},phraseToKey:function(e){return new jsSHA(e,"ASCII").getHash("SHA-512","HEX")},validatePassPhrase:function(e,i){if(!e)return i(lp("cloudsave","Please enter a pass phrase"));if(e.length<9)return i(lp("cloudsave","Passphrase must be at least 9 characters long."));var a=this.phraseToKey(e);$.ajax({url:t+"?key="+a,dataType:"json",success:function(){i(lp("cloudsave","Passphrase is already taken."))},error:function(){i(null,!0)}})},suggestPassPhrase:function(e){$.ajax($.extend({type:"POST",data:JSON.stringify({command:"passphrase",n:20}),success:function(t){var i=t.passphrase.split(" "),a="";i.sort((function(){return.5-Math.random()}));for(var s=0;s<4;s++)a+=i[s]+" ";e(null,a.trim())},error:function(){e(!0)}},r))}}}(DDG),function(e){var t=e.Models.Base,i=e.Models.Settings,a="kp",s={1:{name:lp("safe search","Strict"),description:lp("safe search","No adult content")},"-1":{name:lp("safe search","Moderate"),description:lp("safe search","No explicit images or videos")},"-2":{name:lp("setting","Off"),description:lp("safe search","Don't filter adult content")}};i.SafeSearch=function(e){t.call(this,e),this.settings.on("change:kp",this._onSettingChange.bind(this))},i.SafeSearch.prototype=$.extend({},t.prototype,{getId:function(){return this.id||"-1"},getAll:function(){var e,t=[];for(var i in s)(e={id:i,name:s[i].name,description:s[i].description}).selected=e.id===this.getId(),t.push(e);return t},isActive:function(){return"-1"!==this.getId()},getName:function(){return s[this.getId()].name},isStrict:function(){return"1"===this.getId()},isModerate:function(){return"-1"===this.getId()},isOff:function(){return"-2"===this.getId()},setId:function(e,t){this.settings.set(a,e,{saveToCloud:!0,updateURLParams:!0,fallbackToURLParam:!0},t)},setTemporaryId:function(t,i){e.hidden.set(a,t),i&&i()},_onSettingChange:function(){var e=this.settings.get(a);this.set("id",e)}})}(DDG),function(e,t){var i="abcdefghijklmnopqrstuvwxyz",a=t.location.protocol+"//"+t.location.host+"/",s=/<|>|\//g,o=e.Data.Settings,r="kbc",n=e.Models.Settings.CloudSave,l=e.Models.Settings.Themes,d=e.Models.Base;(e.Models.Settings.Settings=function(t){(t=t||{}).cloudSaveKey&&this.setCloudSaveKey(t.cloudSaveKey),this._settings={},this._savedSettings={},this._urlSettings={},this.region=new e.Models.Settings.Region({settings:this}),this.safeSearch=new e.Models.Settings.SafeSearch({settings:this}),this.cloudsave=n,this.themes=l,this._updateDeviceDependentSettings(),this._setFromURLParams(),this._setFromQuerystring(),this._backfillGlobals(),this._setFromCookie(),this._canTouchLocalStorageForCloudSave()&&this._restoreCloudSaveKey(),this._useColorScheme(),this.setMaxListeners(3e3)}).prototype=$.extend({},d.prototype,{THEME_KEY:l.KEY,AUTOCOMPLETE_KEY:"kac",LANGUAGE_KEY:"kad",POST_KEY:"kg",MOBILE_INSTRUCTIONS_KEY:"kas",MAPKIT_LOCAL_STORAGE_KEY:"mapkit.SpileTestResults",OBFUS_DATA_LOCAL_STORAGE_KEY:"general_region_data",USER_LOC_LOCAL_STORAGE_KEY:"my_browser_location",LOCATION_SETTING_KEY:"kar",DEFAULT_FIELD_CLASS:"FormField",TYPE_TO_FIELD_CLASS:{boolean:"BooleanFormField",color:"ColorFormField",composite:"CompositeFormField",thumbnail:"ThumbnailFormField",theme:"ThemeFormField",dropdowncustom:"DropDownCustomFormField",clear:"ClearFormField"},get:function(e){if("kl"===e)return this._getRegionSetting();var t=this._settings[e]||this.getDefault(e);return t=m(e,t)},_getRegionSetting:function(){if(this._settings.kl)return this._settings.kl;if(this._isRegionWithDefaultRegionToggle()){var t=navigator.language||"en-US",i="GB"===window.ct?"uk":(window.ct||"US").toLowerCase();if("us"===i)return"wt-wt";var a=i+"-"+t.split("-")[0],s=e.Data.Settings.regions;return-1!==Object.keys(s).indexOf(a)?a:"wt-wt"}return"wt-wt"},_isRegionWithDefaultRegionToggle:function(){return-1!==["AU","IE","NZ","GB"].indexOf(window.ct)},getISOLocale:function(){var t=e.settings.get(e.settings.LANGUAGE_KEY);return t&&"wt_WT"!==t?t.replace("_","-"):window.navigator.language},getDefault:function(e){var t=o[e];return t&&t.default},isDefault:function(e){return this.get(e)===this.getDefault(e)},hasCustomLinkStyles:function(){return!(this.isDefault("kae")&&this.isDefault("k9")&&this.isDefault("kaa")&&this.isDefault("k8")&&this.isDefault("kx")&&this.isDefault("kaf")&&this.isDefault("kai")&&this.isDefault("kf")&&this.isDefault("k7")&&this.isDefault("k18"))},getData:function(e){var t=$.extend({},o[e]);if(t.id=e,"string"==typeof t.values&&(t.values=$.extend({},o[t.values])),t.values&&t.order){for(var i,a={},s=0;s=57,i=e.device.isIDevice&&e.device.isChrome&&e.device.chromeVersion>=72;return(t||i)&&!e.device.isBrave&&!e.device.isFirefoxFocus&&!e.device.isSamsung&&!e.device.isUCBrowser},canAddToBraveAndroid:function(){return e.device.isAndroid&&e.device.isBrave},canAddToBraveIOS:function(){return e.device.isIOS8p&&e.device.isBrave},canAddToMobileFirefox:function(){return e.device.isIOS8p&&e.device.isFirefox||e.device.isAndroid&&(e.device.isFirefox38AndUp||e.device.isFirefoxFocus)},canAddToMobileUCBrowser:function(){return e.device.isUCBrowser&&(e.device.isAndroid||e.device.isIDevice)},canAddToMobileBrowser:function(){return!e.device.isMobileSafari&&(this.canAddToChromeMobile()||e.device.isIOS8pSafari&&!e.device.isUCBrowser||this.canAddToMobileFirefox()||this.canAddToBraveAndroid()||this.canAddToBraveIOS()||e.device.isEdgeMobile||this.canAddToMobileUCBrowser())},canShowMobileBanner:function(){return this.canAddToMobileBrowser()&&e.settings.isDefault(this.BADGE_DISMISS_KEY)&&this._canShowAgain()},canShowBadgeAgain:function(){return!(e.device.isDesktop&&!this._canShowAgain())},canShowMobileButton:function(){return this.canAddToMobileBrowser()&&(!e.settings.isDefault(this.BADGE_DISMISS_KEY)||!this._canShowAgain())},showDarkInstructions:function(){return this.canAddToMobileBrowser()},dismiss:function(){var t,i=e.opensearch.atbVariant!==e.tParam.DEFAULT_VARIANT?e.opensearch.atbVariant:"",a=4,s=new Date;e.settings.isDefault(this.BADGE_RECURRING_KEY)||(a=30),s.setDate(s.getDate()+a),t=e.opensearch.getATBVersionInfo(s).version,this._canShowAgain()&&e.settings.set(this.BADGE_RECURRING_KEY,t+i,{saveToCloud:!0,fallbackToURLParam:!0})},_canShowAgain:function(){var t=e.opensearch.getDaysSinceCohort(e.settings.get(this.BADGE_RECURRING_KEY)),i=!e.settings.isDefault(this.BADGE_RECURRING_KEY);return!i||i&&e.device.isDesktop&&t>=0&&t<=15||i&&!e.device.isDesktop&&t>=0},canShowOnMobileSerp:function(){return this.canShowMobileBanner()&&e.page.canShowAddToBrowser()&&e.tParam.fromHomepage()},canShowOnDesktopSerp:function(){return this.canShowBadgeAgain()&&e.page.canShowAddToBrowser()&&(e.tParam.fromHomepage()||e.device.isDefaultSearchUser()&&e.extension.canInstall())},canNotYetShowOnDesktopSerp:function(){return!this.canShowBadgeAgain()&&e.page.canShowAddToBrowserButton()&&e.tParam.fromHomepage()},usesOpenSearch:function(){return this.canAddToChromeMobile()&&!(e.device.isChrome&&e.device.chromeVersion>=73)||e.device.isAndroid&&e.device.isEdgeMobile},canShowOpenInAppButton:function(){return e.device.isAndroid&&this.canShowMobileAppPromoOnMobile()&&i.length<8&&(e.tParam.fromDefaultSearch()||e.device.isChrome&&!e.tParam.fromHomepage())},canShowTryAppBanner:function(){return this.canShowMobileAppPromoOnMobile()&&!this.canShowOpenInAppButton()&&!this.hasDismissedMobileAppPromoOnMobile()&&(e.tParam.fromDefaultSearch({lenient:e.device.isChrome})&&""===document.referrer||e.tParam.fromHomepage())},canShowMobileAppPromoOnMobile:function(){var t=e.device.isIDevice&&!e.device.isMobileSafari&&(-1===e.device.iOsMajorVersion||e.device.iOsMajorVersion>=13),i=e.device.isAndroid&&(-1===e.device.androidMajorVersion||e.device.androidMajorVersion>=5);return(!e.tParam.fromDefaultSearch()||!a.includes(e.tParam.get()))&&(e.settings.isDefault(this.BADGE_DISMISS_KEY)&&e.device.isMobileDevice&&(t||i)&&!e.device.isDDGApp&&navigator.cookieEnabled&&"noapp"!==e.history.get("testid"))},hasDismissedMobileAppPromoOnMobile:function(){return!this._canShowAgain()}})}(DDG),function(e){var t=e.Models.Base,i="kao";e.Models.Settings.OnboardingEducation=function(){this.KEY=i,this.isDismissed=!e.settings.isDefault(i),this.didUserScroll=!1,this.isSVGAnimated=!1,this.scrollToAnimationDurationMS=350,this.pauseForAnimationMS=1e3},e.Models.Settings.OnboardingEducation.prototype=$.extend({},t.prototype,{canShow:function(){return e.settings.isDefault(this.KEY)&&!window.extensionsuccess},dismiss:function(){e.settings.set(i,-1,{saveToCloud:!0}),this.isDismissed=!0}})}(DDG),function(e){var t,i={s:"set-text--small",m:"set-text--medium",l:"set-text--larger",t:"set-text--largest"},a={w:"set-wide",s:"set-super-wide"},s=e.Data.languages.languageFontLookup,o=e.Data.languages.fontSubsets,r=tinycolor;e.Models.Settings.LiveUpdater=t=function(t){this.settings=t.settings,this.$html=e.$html||$("html"),this.$body=$("body"),this.isHomePage=t.isHomePage;var i=this;this.settings.on("change",(function(e){i[e]&&i[e](i.settings.get(e))}))},t.prototype={updateAll:function(){for(var e in t.prototype)"k"==e.charAt(0)&&this[e](this.settings.get(e))},removeBackendClasses:function(){this.$html.removeClass("set-theme--dark"),this.$html.removeClass("set-theme--terminal"),this.$html.removeClass("no-theme")},loadFonts:function(){if(this.settings.isDefault("kt")||this.settings.isDefault("ka")){var t=e.Data.languages.resultLanguages||{},i=Object.keys(t)||[],a=[],r=0,l="";if(this.settings.isDefault("kad")||i.unshift(this.settings.get("kad").split("_")[0]),locale&&i.unshift(locale.split("_")[0]),i&&i.length)for(var d=0;d=6)break}}this._clearCSS("customFonts"),l&&(this.$customFontscss=n(l))}},k1:function(e){var t=e&&"-1"==e?"addClass":"removeClass";this.$html[t]("no-ads")},km:function(e){var t=e&&"m"===e?"addClass":"removeClass";this.$html[t]("set-align-center")},ks:function(e){for(var t in i)this.$html.removeClass(i[t]);var a=i[e];a&&this.$html.addClass(a)},kw:function(e){this.$html.removeClass("set-wide").removeClass("set-super-wide");var t=a[e];t&&this.$html.addClass(t)},kg:function(t){var i=$("form[name=x]");if(i.length){var a=t&&"p"===t?"POST":"GET";i.attr("method",a),t&&"p"===t&&(d.title="DuckDuckGo"),e.device.isChrome&&t&&"p"===t&&i.attr("action",window.location.protocol+"//"+window.location.host+"//")}},ko:function(t){this.isHomePage||(e.isHeaderFixed=!1,this.$html.removeClass("set-header--menu"),this.$html.removeClass("set-header--fixed"),"1"==t&&e.device.hasFixedHeaderSupport?(e.isHeaderFixed=!0,this.$html.addClass("set-header--fixed")):"-2"!=t&&"-1"!=t||(this.$html.addClass("set-header--menu"),delete e._header_height))},ku:function(e){this.$html[l(e)]("set-underlined-links")},kaf:function(e){if(this.$html.removeClass("full-urls breadcrumb-urls"),"s"===e&&(this.$html.addClass("full-urls"),$(".result__url__full").each((function(){var e=$(this).text();$(this).text(e.replace(/(\s| )›(\s| )/g,"/"))}))),"b"===e){this.$html.addClass("full-urls breadcrumb-urls"),$(".result__url__full").each((function(){var e=$(this).text();$(this).text(e.replace(/\//g," › "))}))}this._updateKazToggleState()},kaz:function(e){},kad:function(){this.loadFonts()},kag:function(e){$(".search__button")[l(e)]("search__button--active")},kt:function(t){if(this._clearCSS("kt"),t&&t!=this.settings.getDefault("kt")){var i=this.settings.getFontName(t)||t,a=this.settings.getFontName(this.settings.getDefault("kt")),s=!!i.match(/Helvetica|Arial|Sans-serif/);i.match(/Helvetica/)&&(i+=",sans-serif"),this.$ktcss=n(e.exec_template("theme_custom_font",{fontStack:i+","+a,lightenWeight:s}))}},ka:function(e){if(this._clearCSS("ka"),e&&e!=this.settings.getDefault("ka")){var t=this.settings.getFontName(e)||e,i=this.settings.getFontName(this.settings.getDefault("ka"));t.match(/Helvetica/)&&(t+=",sans-serif"),this.$kacss=n(".result__a { font-family:"+t+","+i+";}")}},kj:function(t){var i=this.settings.getThemePalette("kj",t);if(this.$html.removeClass("dark-header"),this._clearCSS("kj"),!t||t==this.settings.getDefault("kj"))return"";var a=u(t),s=a.root.toHsl().l>.5,o=a.root.toRgbString().replace(/rgb\(|\)/g,""),r=a.root.toHexString(),l="",d={},c={},h={};(!s||a.root.toHsl().s>.5)&&this.$html.addClass("dark-header"),i?(d={color:i.tertiary,rgb:o,primary:i.primary,bottomBorder:i.secondary,link:i.text.secondary,activeLink:i.text.primary},c={icon:i.text.secondary,hoverBg:i.secondary,hoverText:i.text.primary,hoverColor:i.text.primary,background:i.tertiary},h={color:r,bg:r,fullPageBg:i.base,detail:a.darker[2],border:i.primary,bottomBorder:i.secondary,outline:i.secondary,text:i.text.secondary,link:i.text.primary,activeLink:i.text.primary,modeBg:i.primary,modeText:i.text.primary,accent1:i.text.secondary,accent2:i.text.primary,accent3:i.secondary,accentText:i.text.primary,accentText2:i.text.secondary,accentText3:i.text.tertiary,btnHoverBg:i.quaternary,btnHoverBorder:i.quaternary,isDark:!s}):s?(d={color:r,rgb:o,primary:a.darker[2],bottomBorder:a.darker[0],link:a.text[2],activeLink:a.text[0]},c={icon:a.text[3],hoverBg:a.text[2],hoverText:a[2],hoverColor:a.lighter[2],background:a.lighter[4]},h={color:r,fullPageBg:r,bg:a.lighter[4],detail:a.lighter[2],border:a.darker[0],bottomBorder:a.darker[0],outline:a.darker[5],text:a.text[1],link:a.text[0],activeLink:a.text[0],tileNav:a.darker[2],modeBg:a.darker[2],modeText:a.text[1],accent1:a.darker[3],accent2:a.darker[4],accent3:a.darker[2],accentText:a.text[2],accentText2:a.text[3],btnHoverBg:r,btnHoverBorder:a.darker[4],isDark:!s}):(d={color:r,rgb:o,primary:a.lighter[2],bottomBorder:a.lighter[3],link:a.text[2],activeLink:a.text[0]},c={icon:a.text[4],hoverBg:a.text[2],hoverText:a.text[2],hoverColor:a.darker[2],background:a.darker[4]},h={color:r,bg:r,fullPageBg:r,detail:a.darker[2],border:a.lighter[3],bottomBorder:a.lighter[3],outline:a.lighter[7],text:a.text[1],link:a.text[0],activeLink:a.text[3],modeBg:a.lighter[1],modeText:a.text[4],accent1:a.lighter[2],accent2:a.lighter[3],accent3:a.lighter[7],accentText:a.text[2],accentText2:a.text[3],accentText3:a.text[4],btnHoverBg:r,btnHoverBorder:a.lighter[3],isDark:!s},l+=_(a,i),l+=m(a,i)),l+=e.exec_template("theme_header",d),this.isHomePage||(s?l+=g(a):(l+=_(a,i),l+=m(a,i)),l+=e.exec_template("theme_header_menu_button",c),l+=e.exec_template("theme_zci",h)),this.$kjcss=n(l)},k7:function(t){var i=this.settings.getThemePalette("k7",t);if(this.$html.removeClass("dark-bg"),this.$k7css&&this.$k7css.remove(),delete this.$k7css,t&&t!=this.settings.getDefault("k7")){var a,s=r(t),o=s.toHexString(),l=s.toPercentageRgbString(),d=u(o),c=d.root.toHsl().l>.5,h=l.replace("rgb(","").replace(")",""),p="",f={},v={},b={},y={},k={},w={},x={};i?(a=r(i.text.primary),f={bg:o,rgbBg:h,text:i.text.primary,rgbText:a.toPercentageRgbString().replace("rgb(","").replace(")",""),textTint:i.text.secondary,textTint2:i.text.tertiary,bgTint:i.primary,bgTint2:i.secondary,bgDark:i.tertiary,rgbBgDark:r(i.tertiary).toRgbString().replace("rgb(","").replace(")",""),btnHoverBg:i.quaternary,btnHoverBorder:i.quaternary},v={bg:i.secondary,border:i.tertiary,text:i.text.secondary,link:i.text.primary,activeLink:i.text.primary},b={icon:i.text.secondary,hoverBg:i.primary,border:i.primary,hoverText:i.text.primary,background:i.tertiary},y={primary:i.text.primary,color:i.text.secondary,tertiaryColor:i.text.tertiary,dateColor:i.text.primary},k={color:i.text.secondary,bgTint:i.primary},w={color:i.primary},x={bgColor:i.secondary,borderColor:i.tertiary,textColor:i.text.secondary,linkColor:i.text.primary}):(a=r(d.text[0]),f={bg:o,rgbBg:h,text:d.text[0],rgbText:a.toPercentageRgbString().replace("rgb(","").replace(")",""),textTint:d.text[3],textTint2:d.text[5],bgTint:c?d.darker[1]:d.lighter[1],bgTint2:c?d.darker[0]:d.lighter[2],bgDark:c?d.lighter[1]:d.darker[1],btnHoverBg:c?d.darker[0]:d.lighter[2],btnHoverBorder:c?d.darker[0]:d.lighter[2]},v={bg:d.darker[1],border:d.darker[2],text:d.text[5],link:d.text[3],activeLink:d.text[0]},b={icon:c?d.darker[4]:d.text[4],hoverBg:c?d.darker[1]:d.lighter[1],border:c?d.darker[1]:d.lighter[1],hoverText:d.text[2],background:c?d.darker[3]:d.text[2]},y={primary:d.text[0],color:d.text[3],tertiaryColor:d.text[5],dateColor:d.text[0]},k={color:d.text[3],bgTint:c?d.darker[1]:d.lighter[1]},w={color:c?d.darker[1]:d.lighter[1]},x={bgColor:d.darker[1],borderColor:d.darker[2],textColor:d.text[3],linkColor:d.text[0]}),f.isDark=!c,f.rgbBgDark=r(f.bgDark).toPercentageRgbString().replace("rgb(","").replace(")",""),p+=e.exec_template("theme_background",f),p+=e.exec_template("theme_sidemenu",v),this.isHomePage?(p+=e.exec_template("theme_header_menu_button",b),c?p+=g(d,i):(p+=_(d,i),p+=m(d,i))):(p+=e.exec_template("theme_result_snippet",y),p+=e.exec_template("theme_result_web_links",k),p+=e.exec_template("theme_result_highlight",w),p+=e.exec_template("theme_result_message",x)),(!c||d.root.toHsl().s>.5)&&(this.$html.addClass("dark-bg"),this.isDarkBg=!0),this.$k7css=n(p)}else this.isHomePage&&e.page.canShowSerpUxExp&&e.page.canShowSerpUxExp()&&this.$html.addClass("is-link-style-exp")},k9:function(t){if(this._clearCSS("k9"),t&&t!=this.settings.getDefault("k9")){var i=r(t);i.isValid()&&(this.$k9css=n(e.exec_template("theme_result_title",{color:i.toHexString()})))}},k8:function(t){if(this._clearCSS("k8"),t&&t!=this.settings.getDefault("k8")){var i=r(t),a=this.settings.getThemePalette("k8",t),s={};i.isValid()&&(s=a?{color:i.toHexString(),primary:a.primary}:{color:i.toHexString(),primary:i.toHexString()},this.$k8css=n(e.exec_template("theme_result_snippet",s)))}},kaa:function(e){if(this._clearCSS("kaa"),e&&e!=this.settings.getDefault("kaa")){var t=r(e);t.isValid()&&(this.$kaacss=n(".results a.result__a:visited,.module--news__body__title:visited,.module__link:visited, .module__link:visited:hover,.module__link a:visited, .module__link a:visited:hover{ color:"+t.toHexString()+";}"))}},kx:function(t){if(this._clearCSS("kx"),this._updateKazToggleState(),t&&t!==this.settings.getDefault("kx")){var i=r(t);i.isValid()&&(this.$kxcss=n(e.exec_template("theme_result_web_links",{color:i.toHexString()})))}},k21:function(t){if(this._clearCSS("k21"),t&&t!=this.settings.getDefault("k21")){var i=r(t),a=this.settings.getThemePalette("k21",t),s=u(i),o=s.root.toHsl().l>.5,l={};l=a?{pageBg:a.base,moduleBg:i.toHexString(),moduleBgRgb:i.toRgbString().replace(/rgb\(|\)/g,""),primary:a.primary,secondary:a.secondary,quaternary:a.quaternary,primaryText:a.text.primary,secondaryText:a.text.secondary,tertiaryText:a.text.tertiary,border:i.toHexString(),borderHover:a.text.tertiary,separator:a.primary,shadows:!0,btnHoverBg:a.quaternary,btnHoverBorder:a.quaternary,isDark:!o}:o?{moduleBg:i.toHexString(),moduleBgRgb:i.toRgbString().replace(/rgb\(|\)/g,""),primary:s.darker[3],secondary:s.darker[4],primaryText:s.text[3],secondaryText:s.text[1],tertiaryText:s.text[2],border:s.darker[1],borderHover:s.darker[2],shadows:!1,separator:s.darker[1],btnHoverBg:s.darker[3],btnHoverBorder:s.darker[3],isDark:!o}:{moduleBg:i.toHexString(),moduleBgRgb:i.toRgbString().replace(/rgb\(|\)/g,""),primary:i.toHexString(),secondary:s.lighter[4],primaryText:s.text[0],secondaryText:s.text[3],tertiaryText:i.toHexString(),border:s.lighter[2],borderHover:s.lighter[5],shadows:!1,separator:s.lighter[2],btnHoverBg:i.toHexString(),btnHoverBorder:s.lighter[2],isDark:!o},i.isValid()&&(this.$k21css=n(e.exec_template("theme_module",l)))}},k20:function(){},k19:function(e){if(this._clearCSS("k19"),e&&e!=this.settings.getDefault("k19")){var t=r(e);t.isValid()&&(this.$k19css=n(".module__more-at, .module__more-at:hover, .module__official-url, .module__official-url:hover {color: "+t.toHexString()+";}"))}},k18:function(){},k17:function(e){if(this._clearCSS("k17"),e&&e!=this.settings.getDefault("k17")){var t=r(e);t.isValid()&&(this.$k17css=n(".result__url:hover {color: "+t.toHexString()+";}"))}},k16:function(e){if(this._clearCSS("k16"),e&&e!=this.settings.getDefault("k16")){var t=r(e);t.isValid()&&(this.$k16css=n(".result__url:visited {color: "+t.toHexString()+";}"))}},k15:function(){},k14:function(){},k13:function(){},k12:function(e){if(this._clearCSS("k12"),e&&e!=this.settings.getDefault("k12")){var t=r(e);t.isValid()&&(this.$k12css=n(".badge--ad {background-color: "+t.toHexString()+";}"))}},k11:function(e){if(this._clearCSS("k11"),e&&e!=this.settings.getDefault("k11")){var t=r(e);t.isValid()&&(this.$k11css=n(".msg--spelling :link,.msg--spelling :visited,.msg--spelling a:hover,.msg__clear,.msg__clear:hover,.msg__all,.msg__all:visited {color: "+t.toHexString()+" !important;}"))}},k10:function(e){if(this._clearCSS("k10"),e&&e!=this.settings.getDefault("k10")){var t=r(e);t.isValid()&&(this.$k10css=n(".highlight .result__a,.result__a:hover,.result__a:visited:hover {color: "+t.toHexString()+" !important;}"))}},kf:function(t){t&&"-1"===t?$(".result__icon").addClass("is-hidden"):($(".result__icon").removeClass("is-hidden"),e.ImageLoader.loadMore())},kai:function(e){"a"!==e?this.$html.removeClass("is-link-order-exp"):this.$html.addClass("is-link-order-exp"),this._updateKazToggleState()},_updateKazToggleState:function(){var e=this.settings.themes.getSettingsForTheme(this.settings.get("kae")).kx;this.settings.isDefault("kaf")&&this.settings.isDefault("kai")&&(this.settings.isDefault("kx")||e&&this.settings.get("kx")===e)?this.settings.clear("kaz"):this.settings.set("kaz","-1",{saveToCookie:!1})},_clearCSS:function(e){var t="$"+e+"css",i=this[t];i&&i.remove(),delete this[t]}};var n=function(e){return $("
              ",{html:"­"}).children().appendTo("body")},l=function(e){return e&&"1"==e?"addClass":"removeClass"},c=function(e,t){return e=r(e),r.lighten(e,t*(1-e.toHsl().l)).toHexString()},h=function(e,t){return e=r(e),r.darken(e,t*e.toHsl().l).toHexString()},p=function(e,t,i,a){for(var s=[],o=1;o<=t;o++)s.push(a(e,i*o));return s},u=function(e){var t=(e=r(e)).toHsl().l>.5,i=r.monochromatic(r.desaturate(e,80),20),a=r.mostReadable(e,i),s=r(a).toHsl().l>.5,o=t?10:4,n=t?4:10;t&&(n+=n*e.toHsl().s);var l=p(a,10,5,s?h:c),d=p(e,8,n,h);return{root:e,text:l,lighter:p(e,8,o,c),darker:d}},_=function(t,i){var a={};return a=i?{bg:i.primary,border:i.secondary,iconText:i.text.secondary,buttonBg:i.quaternary,inputText:i.text.primary,iconHover:i.text.primary,sepColor:i.text.tertiary}:{bg:t.darker[1],border:t.darker[2],iconText:"rgba(255,255,255,0.35)",buttonBg:t.darker[3],inputText:t.text[0],sepColor:t.darker[3]},e.exec_template("theme_search_bar",a)},m=function(t,i){var a=r(t.darker[2]).toRgb(),s={};return s=i?{headerBg:i.tertiary,bg:i.primary,border:i.secondary,lightText:i.text.primary,darkText:i.text.secondary,selectedBg:i.secondary}:{headerBg:t.darker[1],bg:"rgb("+a.r+","+a.g+","+a.b+")",border:t.darker[0],lightText:t.text[1],darkText:t.text[5],selectedBg:t.lighter[3]},e.exec_template("theme_autocomplete",s)},g=function(t,i){return e.exec_template("theme_search_bar",{bg:"#fff",border:t.darker[2],iconText:"rgba(0,0,0,0.35)",buttonBg:t.darker[4],inputText:t.text[1],sepColor:t.darker[4]})}}(DDG),function(e){e.Pages.Base=function(t){this.views={},this.onboardingTest={},e.keyboard=this.keyboard=new e.Models.Keyboard,document.onreadystatechange=this._onReadyStateChange.bind(this),e.ready(this.ready.bind(this))},e.Pages.Base.prototype={ready:function(){var t=document.createElement("link");t.setAttribute("title","DuckDuckGo"),t.setAttribute("type","application/opensearchdescription+xml"),t.setAttribute("rel","search");try{t.setAttribute("href",e.opensearch.getURL())}catch(e){}$("head").append(t),this._initializePage(),e.device.isMobileDevice?e.addClass("html",e.$html,"is-mobile-device"):e.addClass("html",e.$html,"is-not-mobile-device"),e.device.isLegacyAndroid&&e.addClass("html",e.$html,"is-legacy-android"),e.device.isFirefoxFocus&&e.device.isAndroid&&e.addClass("html",e.$html,"is-firefox-focus"),e.settings.on("loaded-initial",this._onSettingsLoaded.bind(this)),e.settings.loadFromCloud({initial:!0}),e.device.on("resize",(function(){e.ImageLoader.loadMore()})),e.device.on("scroll",(function(){e.ImageLoader.loadMore()})),this.headerMenuOps=this.headerMenuOps||{},this.headerMenuOps.disableSearchBar||this.initSearchBar(),this.headerMenuOps.disableSideMenu||this.initSideMenu(),this.initAddToHomepageBanner(),this.onboardingTest=e.Data.Onboarding[e.opensearch.atbVariant]||{},this._verifyMobileInstallation(),this.isSafeDDG=w.safe_ddg},initSearchBar:function(){this.searchbar=new e.Views.SearchBar({el:".js-search-form"}),this.searchbar.on("focus",function(){this.sideMenu&&this.sideMenu.hide()}.bind(this))},initSideMenu:function(){this.sideMenu=new e.Views.SideMenu($.extend({pageType:this.pageType,showATB:this.canShowAddToBrowser(),appendLinkTo:".js-header-aside",appendTo:".js-site-wrapper"},this.sideMenuOps||{})),this.sideMenu.on("opened",function(){this.searchbar&&this.searchbar.hasFocus&&(this._restoreSearchFocus=!0,this.searchbar.unfocus())}.bind(this)),this.sideMenu.on("closed",function(){this._restoreSearchFocus&&(this.searchbar.focus({focusInput:!0}),delete this._restoreSearchFocus)}.bind(this))},initAddToHomepageBanner:function(){if(e.device.isAndroidChromeNoOpenSearch&&navigator.serviceWorker&&!e.addToBrowser.canAddToChromeMobile()){var t=e.tParam.fromDefaultSearch()||e.history.get("atb")||!e.settings.isDefault(e.addToBrowser.BADGE_DISMISS_KEY);navigator.serviceWorker.register("service-worker.js",{scope:"./"}),window.addEventListener("beforeinstallprompt",(function(i){return e.pixel.fire("aths","i"),t||e.addToBrowser.canAddToChromeMobile()?(i.preventDefault(),!1):($(".js-atb-banner-link").hide(),i.userChoice.then((function(i){var a={};t&&(a.r=1),"dismissed"===i.outcome?e.pixel.fire("aths","d",a):e.pixel.fire("aths","c",a)})),!0)}))}},notify:function(t,i,a,s){this.notifications||(this.notifications=new e.Views.Notification({appendTo:"body"})),this.notifications.flash(t,i,a,s)},isInstalled:function(){return!!(e.device.DDGisBrowserDefault()||e.extension.isInstalled()||e.device.isDDGMobileOrDesktopApp()||e.tParam.fromDefaultSearch()||e.history.get("atb")||e.device.isOnion)},canShowAddToBrowser:function(){if(!navigator.cookieEnabled)return!1;if(e.device.isDDGMobileOrDesktopApp()||e.extension.isInstalled()&&2!==e.history.get("exti"))return!1;if(e.addToBrowser.canAddToChromeMobile()&&"crhs"===e.tParam.get())return!0;if(e.device.isMobileDevice&&e.settings.isDefault(e.addToBrowser.BADGE_DISMISS_KEY)&&!e.tParam.fromDefaultSearch()&&!e.history.get("atb")&&e.device.canAddToBrowser()&&"serp"!==this.pageType)return!0;var t="home"===e.page.pageType,i="serp"===e.page.pageType;return e.settings.isDefault(e.addToBrowser.BADGE_DISMISS_KEY)&&e.addToBrowser.canShowBadgeAgain()&&!e.device.DDGisBrowserDefault()&&(!i&&!t||t&&!e.tParam.fromDefaultSearch()||i&&(e.tParam.fromHomepage()||e.device.isDefaultSearchUser()))&&!e.history.get("atb")&&!e.device.isOnion&&e.device.canAddToBrowser()&&e.settings.isDefault("ko")&&!e.duckpan},canShowAddToBrowserButton:function(){return e.settings.isDefault(e.addToBrowser.BADGE_DISMISS_KEY)&&!e.addToBrowser.canShowBadgeAgain()&&!e.device.DDGisBrowserDefault()&&e.device.isDDGMobileOrDesktopApp(),(!e.extension.isInstalled()||2===e.history.get("exti"))&&!e.tParam.fromDefaultSearch()&&!e.history.get("atb")&&!e.device.isOnion&&e.device.canAddToBrowser()&&e.settings.isDefault("ko")&&!e.duckpan},canShowHomepageEducationInstallButton:function(){return!e.device.DDGisBrowserDefault()&&!e.device.isDDGMobileOrDesktopApp()&&!e.extension.isInstalled()&&!e.tParam.fromDefaultSearch()&&!e.history.get("atb")&&!e.device.isOnion&&e.device.canAddToBrowser()&&e.settings.isDefault("ko")&&!e.duckpan},canShowHomepageOnboardingEducation:function(){return e.onboardingEducation.canShow()},fireStat:function(t){var i={b:e.device.pixelBrowserName,atbi:this.canShowAddToBrowser(),ei:this.canShowHomepageOnboardingEducation(),i:this.isInstalled(),d:e.device.pixelId,l:w.locale,p:e.device.pixelPlatformName,atb:e.opensearch.version,va:e.opensearch.variant,atbva:e.opensearch.atbVariant,ax:!e.settings.isDefault(e.addToBrowser.BADGE_RECURRING_KEY),ak:!e.settings.isDefault(e.addToBrowser.BADGE_DISMISS_KEY)};e.pixel.fire(t,i)},canShowSerpUxExp:function(){return e.settings.canShowSerpUxExp()},_onSettingsLoaded:function(){var t=e.settings.toQueryString({onlyURLParams:!0});t&&(kurl+="&"+t),this.liveUpdater&&(e.settings.updater=new e.Models.Settings.LiveUpdater({isHomePage:"home"===this.pageType,settings:e.settings}),e.settings.updater.updateAll(),e.settings.updater.removeBackendClasses(),e.settings.on("change:kae",this.notify.bind(this,l("Settings updated"))))},_checkForForceReload:function(t){t=t||$.noop,"1"===e.querystringParam("rld")?e.history.clear("rld",(function(){t(!0),window.location.reload()})):t(!1)},_verifyMobileInstallation:function(){if(e.device.isMobileDevice&&"serp"===this.pageType){var t=e.settings.get(e.settings.MOBILE_INSTRUCTIONS_KEY);if(e.tParam.fromDefaultSearch({lenient:!0})&&!e.settings.isDefault(e.settings.MOBILE_INSTRUCTIONS_KEY)){var i,a,s,o,r=t.match(/v\d*-\d/);r&&(i=r[0],o=(t=t.replace(i,"")).substr(3),a=t.charAt(0),s=t.charAt(1));var n,l,d=e.settings.isDefault(e.addToBrowser.BADGE_RECURRING_KEY)?0:1;if(a===e.opensearch.variant&&s===e.opensearch.atbVariant)e.opensearch.findRunnableAtbExperimentByVariantAndAtbVariant(a,s)&&(n=!0);i&&(l=e.opensearch.getDaysSinceCohort(i)),e.pixel.fire("exti",e.device.pixelBrowserName,e.opensearch.version,{va:a,atbva:s,cva:e.opensearch.variant,catbva:e.opensearch.atbVariant,r:n?"1":"0",t:e.tParam.fromDefaultSearch({lenient:!1})?e.tParam.get():"n",d:l,l:window.locale,cp:o,exte:0,p:e.device.pixelPlatformName,ak:e.settings.get(e.addToBrowser.BADGE_DISMISS_KEY),ax:d,kae:e.settings.get("kae")}),e.settings.clear(e.settings.MOBILE_INSTRUCTIONS_KEY)}}},_initializePage:function(){var t,i="serp"===this.pageType;i&&e.device.isIE&&setTimeout("d.x.reset()",50),w.postMessage&&((t=d.createElement("iframe")).id="iframe_hidden",t.src="/post3.html",d.body.appendChild(t)),i&&(nir&&nir("v"),setTimeout("nis()",250),e.device.isMobileDevice||($("#web_content_wrapper").on("mousemove",nkf),$(document).on("mouseup",ncg),$(document).on("keydown",nckd),$(document).on("keyup",ncku))),$(document).on("mousedown",ncf)},_hasCachedResources:function(e){if(void 0===e||0===e.length)return!1;for(var t,i,a=0,s=/proximanova/i,o=/\/(arrow|logo_homepage\.normal\.v\d+).svg$/i,r=/((l|u|d)\d+|libs|utils|base)\.js|((s|o)\d+|home|serp|style)\.css/i,n=0;n0},_isBrowserReload:function(e){return performance.navigation.type===performance.navigation.TYPE_RELOAD},_hasDefaultSettings:function(e){var t=Object.keys(e);return 0===t.length||!(1!==t.length||!e.hasOwnProperty("t"))},_onReadyStateChange:function(){"complete"===document.readyState&&("home"!==this.pageType&&"serp"!==this.pageType||e.perf.reportNavigation(this.pageType))}}}(DDG),function(e){var t=e.Pages.Base;e.Pages.Static=function(e){t.call(this,e),this.pixelClass=e&&e.pixelClass||!1},e.Pages.Static.prototype=$.extend({},t.prototype,{pageType:"static",sideMenuOps:{hideThemes:!0},headerMenuOps:{disableSearchBar:!1,disableSideMenu:!1},ready:function(){if("/iframe"===location.pathname&&(this.headerMenuOps.disableSearchBar=!0,this.headerMenuOps.disableSideMenu=!0),e.device.isMobileDevice&&(e.device.isAndroid||e.device.isIDevice)&&e.device.isDDGApp&&[-1,-2].includes(parseInt(e.settings.get("ko"),10))&&e.addClass("html",e.$html,"set-header--hidden"),t.prototype.ready.call(this),$(".js-show-header").click(function(e){e.preventDefault(),e.stopPropagation(),this.searchbar.focus({focusInput:!0})}.bind(this)),this.$anchors=$(".js-anchor"),this.$anchorLinks=$(".js-anchor-link"),this.$anchorLinks.on("click",this._onAnchorLinkClick.bind(this)),this.$popouts=$(".js-popout"),this.$popovers=$(".js-popover"),this._createPopouts(),this._createPopovers(),$("img").bind("contextmenu",(function(e){return!1})),this.pixelClass&&(this.$links=$(".js-static-"+this.pixelClass),this.$links.on("click",this._onLinkClick.bind(this,0))),this.$footerLinks=$(".js-static-foot-link"),this.$footerLinks.length&&this.$footerLinks.on("click",this._onLinkClick.bind(this,1)),"/api"===location.pathname){var i=document.createElement("input");i.type="hidden",i.name="format",i.value="json",e.page.searchbar.$el.append(i)}},addTo:function(t,i){var a=DDG.Utils.AddTo.getData();a[t]&&new e.Views.AddTo({appendTo:i,data:a[t]})},_onAnchorLinkClick:function(t){t.preventDefault();for(var i=t.currentTarget.hash.substr(1),a=this.$anchors,s="",o=0;a.length>o;o++)if(a[o].name===i||a[o].id===i){s=$(a[o]);break}s&&e.device.scrollTop(s.offset().top,500)},_createPopouts:function(){this.views.popouts=[];for(var t,i,a,s=0;this.$popouts.length>s;s++)i=(t=$(this.$popouts[s])).find(".js-popout-link"),a=new e.Views.Modal({$el:t.find(".js-popout-main")}),i.click(a.toggle.bind(a)),this.views.popouts.push(a)},_createPopovers:function(){this.views.popovers=[];for(var t,i,a,s=0;this.$popovers.length>s;s++)t=$(this.$popovers[s]),i=$(t.attr("data-js-selector")),a=new e.Views.Modal({$el:t}),i.click(a.toggle.bind(a)),this.views.popovers.push(a)},_onLinkClick:function(t,i){var a=$(i.currentTarget),s=e.pixel.sanitizeUrl(a.attr("href"));e.pixel.fire("splc",this.pageType,s,{ft:t})}})}(DDG),DDG.assets_loaded=[],DDG.templates={},DDG.first_result="r1-0",DDG.is_header_fixed=!0,DDG.first_source=!1,DDG.last_selection="",DDG.animation_speed=300,DDG.isJSURL=function(e){return!e||"javascript:;"===e||"#"===e},DDG.detect_intent_link=function(e){var t=0;return(DDG.device.isIDevice&&"itunes.apple.com"==e.hostname||DDG.device.isAndroid&&"play.google.com"==e.hostname)&&(t=1),t},DDG.get_http_redirect=function(e,t){var i=e.href;if(DDG.settings.useRedirect()&&-1==e.href.indexOf("/l/?")&&!DDG.isInternalURL(e.href)&&!DDG.detect_intent_link(e)){var a=i.match(/^https/)||DDG.device.isOnion;i=(a?"":"http://r.duckduckgo.com")+"/l/?uddg="+encodeURIComponent(e.href)+"¬rut=duckduck_in",DDG.device.isEdge&&t||nua("nul",e,500)}return i},DDG.get_query_encoded=function(){return rq},DDG.get_query=function(){return decodeURIComponentSafe(rq)},DDG.get_is_safe_search=function(){return DDG.settings.safeSearch.isStrict()},DDG.stem=function(e){return e.replace(/(?:s)$/,"")},DDG.get_asset_path=function(e,t){return Spice&&Spice.sharedir_map&&Spice.sharedir_map[e]?"/share/"+Spice.sharedir_map[e].path+"/"+t:"/share/spice/"+e+"/"+(window["spice_"+e+"_version"]||spice_version)+"/"+t},DDG.get_now=function(){return(new Date).getTime()},DDG.$win=$(window),DDG.$doc=$(document),DDG.$html=$("html"),DDG._$cache={},DDG.$=function(e){return DDG._$cache[e.toString()]||(DDG._$cache[e.toString()]=$(e))},DDG._$classCache={},DDG.addClass=function(e,t,i){DDG._$classCache[e+i]=!0,t.addClass(i)},DDG.removeClass=function(e,t,i){delete DDG._$classCache[e+i],t.removeClass(i)},DDG.hasClass=function(e,t){return DDG._$classCache[e+t]},DDG.toggleClass=function(e,t,i){DDG.hasClass(e,i)?DDG.removeClass(e,t,i):DDG.addClass(e,t,i)},DDG.get_header_height=function(){return void 0!==DDG._header_height?DDG._header_height:DDG._header_height=DDG.$("#header_wrapper").outerHeight()},DDG.linkClickWillOpenInNewTab=function(e){return e.ctrlKey||e.shiftKey||e.metaKey||e.button&&1==e.button||!DDG.settings.isDefault("kn")};var mousewheelevt=/Firefox/i.test(navigator.userAgent)?"DOMMouseScroll":"mousewheel";function nkw(e){DDG.device.isOpera&&!DDG.deep.isLastResult&&nrb&&nrb(),fk=0}function nrv(e,t,i,a){if(!e)return!1;var s,o,r,n;if(s=e,e=e.parentNode,s.id=="r1-"+(parseInt(r1c)-1)&&(DDG.deep.lastClickedId&&DDG.settings.autoloadDisabled()&&DDG.deep.lastPage>DDG.deep.pageNumber?!DDG.deep.isLastResult&&nrb&&nrb("",1):DDG.deep.isLastResult||!nrb||DDG.settings.autoloadDisabled()||nrb("",1)),!t){if(s&&s.getAttribute&&"true"===s.getAttribute("data-handled-by-react"))return;var l=$(s);l.hasClass("highlight")||(l.addClass("highlight"),l.hasClass("highlight_sponsored")&&l.addClass("highlight_sponsored_hover"),o=nun(s),r=l.offset().top,n=DDG.device.scrollTop(),a&&o&&!fq&&(o.focus(),l.addClass("is-keyboard-focus"),o.onblur=function(){l.removeClass("is-keyboard-focus"),this.onblur=void 0},r>n&&(o.onclick=function(e){return nrl(e,this)})))}}function nro(e){var t;if(!e)return!1;var i=$(e);i.hasClass("highlight")&&(i.removeClass("highlight"),i.hasClass("highlight_sponsored_hover")&&i.removeClass("highlight_sponsored_hover"),(t=nun(e))&&!fq&&t.blur())}function nrs(e,t,i){var a,s,o,r,n;a=$(e).offset().top,o=$(e).outerHeight(),s=DDG.device.scrollTop(),n=viewport_height/2,o&&a!=s&&(t||a+o+10>viewport_height+s||a-10n||-1==i&&a-s=a-500?1:0,0,!t&&fmx&&fmy&&fmx>viewport_width-100&&fmy=0;s--){n="r1-"+s,r=(o=d.getElementById(n))&&o.parentNode;var l=$(".result--more__btn")[0];if("block"==$(r).css("display")){DDG.deep.hasPendingResults()?(DDG.deep.showPendingResults(),DDG.deep.autoShowedPendingResults=!0,nsr(l),$(".js-result-sep").removeClass("is-hidden")):nsr(l);break}}fs=0}}}function nrm(e,t){var i,a,s,o,r,n,l,c,h,p,u,_,m,g,f,v,b,y;if(fq)return!1;if(fo)return setTimeout("nrm("+e+",'"+t+"')",100),!1;if(fo=1,i=new RegExp("r(\\d+)-(\\d+)"),a=new RegExp("rl([ei])(\\d+)-(\\d+)"),s=new RegExp("rld-(\\d+)"),t)if(i.test(t))o=RegExp.$1||0,r=RegExp.$2||0;else{if("zero_click_wrapper"!=t)return fo=0,!1;o=1,r=-1}else if(rc&&"zero_click_wrapper"==rc.id)o=1,r=-1;else if(rc&&i.test(rc.id))o=RegExp.$1||0,r=RegExp.$2||0;else if(rc&&a.test(rc.id))o=rs?1:2,u=1;else if(rc&&s.test(rc.id))o=1,u=1;else{if((rc=d.getElementById(DDG.first_result))||(rc=d.getElementById("zero_click_wrapper")),!rc)return fo=0,!1;r=0,o=1}switch(e){case 1:rc&&rc.id&&rc.id==DDG.first_result&&!$(rc).hasClass("highlight")||r++;break;case 2:r--;break;case 3:o++,r=0;break;case 4:o--,r=0;break;case 5:case 6:break;default:r++}if(c="r"+o+"-"+r,r<=-1&&(c="zero_click_wrapper"),h=d.getElementById(c),p=0,t&&(p=d.getElementById(t)),1==e&&2==o&&!h&&r1c&&(c=DDG.first_result,h=d.getElementById(c)),f=DDG.device.scrollTop(),1==e&&($("#"+c).length>0&&(g=$("#"+c).offset().top),g&&(gf+2*viewport_height)))for(n=0;n>-1&&(l=d.getElementById("r1-"+n));){if(b=10,!((g=(v=$(l)).offset().top)-(v.height()+b)0&&(g=$("#"+c).offset().top),gf+viewport_height))for(n=r1c-2;n>0&&(l=d.getElementById("r1-"+n));){if(b=10,!((g=(v=$(l)).offset().top)+(Math.max(v.height(),90)+b)>f+viewport_height)){h=l;break}n--}if(p&&!h&&7==e&&p.nextSibling&&p.nextSibling.firstChild)return(y=p.nextSibling).firstChild&&y.firstChild.onclick&&y.firstChild.onclick(),void(fo=0);if(!p&&!h&&7==e&&rc&&rc.nextSibling&&rc.nextSibling.firstChild)return(y=rc.nextSibling).firstChild&&y.firstChild.onclick&&y.firstChild.onclick(),void(fo=0);if("zero_click_wrapper"!=c||"none"!=$(h).css("display")){if(u)switch(e){case 1:2==o?(h=rc.nextSibling.nextSibling)?"none"==$(h).css("display")&&!(h=h.nextSibling.firstChild).id&&h.nextSibling&&(h=h.nextSibling):(c=DDG.first_result,h=d.getElementById(c)):1==o&&rc.nextSibling.nextSibling?h=rc.nextSibling.nextSibling.nextSibling:(c=DDG.first_result,h=d.getElementById(c));break;case 2:h=rc.previousSibling.previousSibling,"none"==$(h).css("display")&&(h=h.nextSibling.lastChild);break;case 4:break;case 7:h=rc.nextSibling.nextSibling?rc.nextSibling.nextSibling.nextSibling:rc.nextSibling.firstChild;break;default:return fo=0,!1}if(h){if(1==o&&a.test(h.id)&&(h=h.nextSibling.firstChild),7!=e&&rc&&nua("nro",rc),5!=e&&(2==o||rs)&&"none"==$(h.parentNode).css("display")){for(_=h;"zero_click_topics"!=_.parentNode.id&&"links"!=_.parentNode.id&&"content"!=_.parentNode.id;)_=_.parentNode,m||"block"!=$(_).css("display")||(m=_);m&&u?h=_.nextSibling.nextSibling:"none"==$(_).css("display")?h=_.previousSibling:_.nextSibling&&"block"==$(_.nextSibling).css("display")?h=m.lastChild.previousSibling:2==e&&_.previousSibling?h=_.previousSibling:1==e&&_.nextSibling&&"none"==$(_.nextSibling).css("display")?h=_.nextSibling.nextSibling.firstChild.nextSibling:1!=e||_.nextSibling||(h=_.previousSibling),a.test(h.id)&&rs&&"e"==RegExp.$1&&(h=h.nextSibling.firstChild)}nua("nrv",h,0,1,0,7==e?1:0,5==e||7==e?1:0,1),7!=e&&(rc=h),7!=e&&rc&&rc.id&&(fk&&(r>6||2==e)?DDG.device.isOpera?nrs(rc,1,5==e?0:1==e?1:-1):nua("nrs",rc,0,1,0,1,5==e?0:1==e?1:-1):DDG.device.isOpera?nrs(rc,0,0):nua("nrs",rc,0,1))}else 1!=o||"zero_click_wrapper"==c||DDG.deep.isOutOfResults||rs&&it||!(DDG.deep.lastPage>=DDG.deep.pageNumber)||(nrv(d.getElementById("r1-"+parseInt(r1c-1)),1),setTimeout("nrm("+e+",'"+t+"')",100));DDG.device.isOpera&&1==e&&nrb&&nrb(),fo=0}else fo=0}function resultsBetweenLastSeparators(){for(var e=document.querySelectorAll('.result, [data-nrn="result"]'),t=[],i=0,a=0;a
              ');$("#links").append(w),r=w[0]}}_=0,"d"!=e||t.length&&"EOP"!=t[p-1].t&&"EOF"!=t[p-1].t&&DDG.deep.hasMoreResultsToLoad()||(_=1,DDG.deep.set("isOutOfResults",!0),DDG.deep.set("isLastResult",!0),t.length&&"EOP"==t[p-1].t&&(_=2),1===p&&f&&setTimeout((function(){DDG.pixel.fire("nre",{ss:DDG.page.showingSafeSearch})}),250)),"d"==e&&($(".js-results-loading").remove(),p>1&&$(".js-result-sep.is-hidden").removeClass("is-hidden")),h=u=0;for(var x=t.filter((function(e){return"EOF"!==e.t&&"EOP"!==e.t&&!!e.t})).length,D=0;D'+l("Page %s",f)+"
              ":(h.className+=" result--sep--hr has-pagenum",h.innerHTML='
              '+f+"
              ")}else $(h).css("display","none");p.style.display="block",u&&!t?$(u).css("display","block"):u||"d"!=n&&("e0"!=n||fd)||!DDG.page.deepNextURL||((_=d.createElement("span")).className=DDG.settings.autoloadDisabled()?"btn result--more":"result--more",_.className+=" is-loading js-results-loading",_.innerHTML=Handlebars.helpers.loader(),p.parentNode.appendChild(_),"d"==rv&&(rv=""),rds?rds+=50:rds+=30,nrj(DDG.page.deepNextURL,1),delete DDG.page.deepNextURL),t||i||1!=m||e.nextSibling.firstChild&&nrm(6,e.nextSibling.firstChild.id)}}var rx_uddg=new RegExp("[?&]uddg=([^&]+).*$");function nul(e){try{var t;(t=e.href.match(rx_uddg))&&t[1]&&(e.href=decodeURIComponent(t[1]))}catch(e){}fl=0}function nutp(e){var t=e.split("_");DDG.pixel.fire.apply(DDG.pixel,t),t.unshift("old"),DDG.pixel.fire.apply(DDG.pixel,t)}function nua(e,t,i,a,s,o,r,n){s||(s=tr.length,tr[s]=t),i||(i=10),a?tsl?setTimeout("nua("+e+",0,1,"+s+","+o+","+r+","+n+")",100):(tsl=ts.length,setTimeout(e+"(tr["+s+"],"+o+","+r+","+n+");tsl=0",10)):setTimeout(e+"(tr["+s+"],"+o+","+r+","+n+");",i)}function nug(e,t){var i,a,s,o;fl=0,fn=0,o="",window.getSelection?o=window.getSelection().toString():document.selection&&(o=(o=document.selection.createRange()).text);var r=o==DDG.last_selection?1:0;if(DDG.last_selection=o,!r)return!1;t?openBlankWindow(e):!w.postMessage||DDG.device.isSafari||DDG.device.isIDevice||DDG.device.isKonqueror||"p"==kg||!DDG.settings.useRedirect()?(DDG.device.isIE||DDG.device.isIDevice||DDG.device.isChrome||DDG.device.isSafari||DDG.device.isFirefox)&&-1!=e.indexOf("http")&&"p"!=kg&&DDG.settings.useRedirect()?(d.getElementById("iframe_hidden")&&d.body.removeChild(d.getElementById("iframe_hidden")),a=" + + + + +
              + + + + + + + + + + + + + diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/DA47CDDE5F75E2546A2E983B396C817E5914A087 b/home/.surf/cache/WebKitCache/Version 16/Blobs/DA47CDDE5F75E2546A2E983B396C817E5914A087 new file mode 100644 index 0000000..05a0c9d Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/DA47CDDE5F75E2546A2E983B396C817E5914A087 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/DE6D908FA07EFAA5613174BDDE01D60595A195CA b/home/.surf/cache/WebKitCache/Version 16/Blobs/DE6D908FA07EFAA5613174BDDE01D60595A195CA new file mode 100644 index 0000000..3cb808c --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/DE6D908FA07EFAA5613174BDDE01D60595A195CA @@ -0,0 +1 @@ +unixporn at DuckDuckGo
              \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/DE9489C3095E5ACA26173506377D1E3025ECDDF4 b/home/.surf/cache/WebKitCache/Version 16/Blobs/DE9489C3095E5ACA26173506377D1E3025ECDDF4 new file mode 100644 index 0000000..2d2ae67 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/DE9489C3095E5ACA26173506377D1E3025ECDDF4 @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-06ff531","vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-06ff530"],{59753(a,b,c){function d(){if(!(this instanceof d))return new d;this.size=0,this.uid=0,this.selectors=[],this.selectorObjects={},this.indexes=Object.create(this.indexes),this.activeIndexes=[]}c.d(b,{f:()=>B,on:()=>A});var e,f=window.document.documentElement,g=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector;d.prototype.matchesSelector=function(a,b){return g.call(a,b)},d.prototype.querySelectorAll=function(a,b){return b.querySelectorAll(a)},d.prototype.indexes=[];var h=/^#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"ID",selector:function(a){var b;if(b=a.match(h))return b[0].slice(1)},element:function(a){if(a.id)return[a.id]}});var i=/^\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"CLASS",selector:function(a){var b;if(b=a.match(i))return b[0].slice(1)},element:function(a){var b=a.className;if(b){if("string"==typeof b)return b.split(/\s/);if("object"==typeof b&&"baseVal"in b)return b.baseVal.split(/\s/)}}});var j=/^((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"TAG",selector:function(a){var b;if(b=a.match(j))return b[0].toUpperCase()},element:function(a){return[a.nodeName.toUpperCase()]}}),d.prototype.indexes.default={name:"UNIVERSAL",selector:function(){return!0},element:function(){return[!0]}},e="function"==typeof window.Map?window.Map:function(){function a(){this.map={}}return a.prototype.get=function(a){return this.map[a+" "]},a.prototype.set=function(a,b){this.map[a+" "]=b},a}();var k=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;function l(a,b){var c,d,e,f,g,h,i=(a=a.slice(0).concat(a.default)).length,j=b,l=[];do if(k.exec(""),(e=k.exec(j))&&(j=e[3],e[2]||!j)){for(c=0;c3&& void 0!==arguments[3]?arguments[3]:{},f=!!e.capture,g=f?p:o,h=g[a];h||(h=new d,g[a]=h,document.addEventListener(a,z,f)),h.add(b,c)}function B(a,b,c){return a.dispatchEvent(new CustomEvent(b,{bubbles:!0,cancelable:!0,detail:c}))}},76006(a,b,c){c.d(b,{Lj:()=>p,Ih:()=>w,P4:()=>l,nW:()=>E,fA:()=>u,GO:()=>v});let d=new WeakSet;function e(a){h(a),g(a)}let f=new WeakMap;function g(a=document){if(f.has(a))return f.get(a);let b=!1,c=new MutationObserver(a=>{for(let b of a)if("attributes"===b.type&&b.target instanceof Element)k(b.target);else if("childList"===b.type&&b.addedNodes.length)for(let c of b.addedNodes)c instanceof Element&&h(c)});c.observe(a,{childList:!0,subtree:!0,attributeFilter:["data-action"]});let d={get closed(){return b},unsubscribe(){b=!0,f.delete(a),c.disconnect()}};return f.set(a,d),d}function h(a){for(let b of a.querySelectorAll("[data-action]"))k(b);a instanceof Element&&a.hasAttribute("data-action")&&k(a)}function i(a){let b=a.currentTarget;for(let c of j(b))if(a.type===c.type){let e=b.closest(c.tag);d.has(e)&&"function"==typeof e[c.method]&&e[c.method](a);let f=b.getRootNode();if(f instanceof ShadowRoot&&d.has(f.host)&&f.host.matches(c.tag)){let g=f.host;"function"==typeof g[c.method]&&g[c.method](a)}}}function*j(a){for(let b of(a.getAttribute("data-action")||"").trim().split(/\s+/)){let c=b.lastIndexOf(":"),d=Math.max(0,b.lastIndexOf("#"))||b.length;yield{type:b.slice(0,c),tag:b.slice(c+1,d),method:b.slice(d+1)||"handleEvent"}}}function k(a){for(let b of j(a))a.addEventListener(b.type,i)}function l(a,b){let c=a.tagName.toLowerCase();if(a.shadowRoot){for(let d of a.shadowRoot.querySelectorAll(`[data-target~="${c}.${b}"]`))if(!d.closest(c))return d}for(let e of a.querySelectorAll(`[data-target~="${c}.${b}"]`))if(e.closest(c)===a)return e}let m=a=>String("symbol"==typeof a?a.description:a).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),n=(a,b="property")=>{let c=m(a);if(!c.includes("-"))throw new DOMException(`${b}: ${String(a)} is not a valid ${b} name`,"SyntaxError");return c},o="attr";function p(a,b){t(a,o).add(b)}let q=new WeakSet;function r(a,b){if(q.has(a))return;q.add(a);let c=Object.getPrototypeOf(a),d=c?.constructor?.attrPrefix??"data-";for(let e of(b||(b=t(c,o)),b)){let f=a[e],g=n(`${d}${e}`),h={configurable:!0,get(){return this.getAttribute(g)||""},set(a){this.setAttribute(g,a||"")}};"number"==typeof f?h={configurable:!0,get(){return Number(this.getAttribute(g)||0)},set(a){this.setAttribute(g,a)}}:"boolean"==typeof f&&(h={configurable:!0,get(){return this.hasAttribute(g)},set(a){this.toggleAttribute(g,a)}}),Object.defineProperty(a,e,h),e in a&&!a.hasAttribute(g)&&h.set.call(a,f)}}let s=Symbol.for("catalyst");class CatalystDelegate{constructor(a){let b=this,c=a.prototype.connectedCallback;a.prototype.connectedCallback=function(){b.connectedCallback(this,c)};let d=a.prototype.disconnectedCallback;a.prototype.disconnectedCallback=function(){b.disconnectedCallback(this,d)};let e=a.prototype.attributeChangedCallback;a.prototype.attributeChangedCallback=function(a,c,d){b.attributeChangedCallback(this,a,c,d,e)};let f=a.observedAttributes||[];Object.defineProperty(a,"observedAttributes",{configurable:!0,get(){return b.observedAttributes(this,f)},set(a){f=a}}),function(a){let b=a.observedAttributes||[],c=a.attrPrefix??"data-",d=a=>n(`${c}${a}`);Object.defineProperty(a,"observedAttributes",{configurable:!0,get:()=>[...t(a.prototype,o)].map(d).concat(b),set(a){b=a}})}(a),function(a){let b=m(a.name).replace(/-element$/,"");try{window.customElements.define(b,a),window[a.name]=customElements.get(b)}catch(c){if(!(c instanceof DOMException&&"NotSupportedError"===c.name))throw c}}(a)}observedAttributes(a,b){return b}connectedCallback(a,b){var c;a.toggleAttribute("data-catalyst",!0),customElements.upgrade(a),function(a){for(let b of a.querySelectorAll("template[data-shadowroot]"))b.parentElement===a&&a.attachShadow({mode:"closed"===b.getAttribute("data-shadowroot")?"closed":"open"}).append(b.content.cloneNode(!0))}(a),r(a),c=a,d.add(c),c.shadowRoot&&e(c.shadowRoot),h(c),g(c.ownerDocument),b?.call(a),a.shadowRoot&&e(a.shadowRoot)}disconnectedCallback(a,b){b?.call(a)}attributeChangedCallback(a,b,c,d,e){r(a),"data-catalyst"!==b&&e&&e.call(a,b,c,d)}}function t(a,b){if(!Object.prototype.hasOwnProperty.call(a,s)){let c=a[s],d=a[s]=new Map;if(c)for(let[e,f]of c)d.set(e,new Set(f))}let g=a[s];return g.has(b)||g.set(b,new Set),g.get(b)}function u(a,b){t(a,"target").add(b),Object.defineProperty(a,b,{configurable:!0,get(){return l(this,b)}})}function v(a,b){t(a,"targets").add(b),Object.defineProperty(a,b,{configurable:!0,get(){return function(a,b){let c=a.tagName.toLowerCase(),d=[];if(a.shadowRoot)for(let e of a.shadowRoot.querySelectorAll(`[data-targets~="${c}.${b}"]`))e.closest(c)||d.push(e);for(let f of a.querySelectorAll(`[data-targets~="${c}.${b}"]`))f.closest(c)===a&&d.push(f);return d}(this,b)}})}function w(a){new CatalystDelegate(a)}let x=new Map,y=new Promise(a=>{"loading"!==document.readyState?a():document.addEventListener("readystatechange",()=>a(),{once:!0})}),z=new Promise(a=>{let b=new AbortController;b.signal.addEventListener("abort",()=>a());let c={once:!0,passive:!0,signal:b.signal},d=()=>b.abort();document.addEventListener("mousedown",d,c),document.addEventListener("touchstart",d,c),document.addEventListener("keydown",d,c),document.addEventListener("pointerdown",d,c)}),A={ready:()=>y,firstInteraction:()=>z,visible:a=>new Promise(b=>{let c=new IntersectionObserver(a=>{for(let d of a)if(d.isIntersecting){b(),c.disconnect();return}},{rootMargin:"0px 0px 256px 0px",threshold:.01});for(let d of document.querySelectorAll(a))c.observe(d)})},B=new WeakMap;function C(a){cancelAnimationFrame(B.get(a)||0),B.set(a,requestAnimationFrame(()=>{for(let b of x.keys()){let c=a.matches(b)?a:a.querySelector(b);if(customElements.get(b)||c){let d=c?.getAttribute("data-load-on")||"ready",e=d in A?A[d]:A.ready;for(let f of x.get(b)||[])e(b).then(f);x.delete(b),B.delete(a)}}}))}let D;function E(a,b){x.has(a)||x.set(a,new Set),x.get(a).add(b),C(document.body),D||(D=new MutationObserver(a=>{if(x.size)for(let b of a)for(let c of b.addedNodes)c instanceof Element&&C(c)})).observe(document,{subtree:!0,childList:!0})}}}]) +//# sourceMappingURL=vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-06ff531-54620720309a.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/DEACF1F211FBF77D422674EC4906D4C36B95FFD1 b/home/.surf/cache/WebKitCache/Version 16/Blobs/DEACF1F211FBF77D422674EC4906D4C36B95FFD1 new file mode 100644 index 0000000..5ca7db4 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/DEACF1F211FBF77D422674EC4906D4C36B95FFD1 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/E0B36DA8F4785E87D55BEB3592203C921990C30B b/home/.surf/cache/WebKitCache/Version 16/Blobs/E0B36DA8F4785E87D55BEB3592203C921990C30B new file mode 100644 index 0000000..120928c --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/E0B36DA8F4785E87D55BEB3592203C921990C30B @@ -0,0 +1,417 @@ +(function(){try{(function(){function Re(a,c,b,d){var e=this;return C(window,"c.i",function(){function f(G){(G=Se(k,l,"",G)(k,l))&&(S(G.then)?G.then(g):g(G));return G}function g(G){G&&(S(G)?m.push(G):Ma(G)&&z(function(P){var X=P[0];P=P[1];S(P)&&("u"===X?m.push(P):h(P,X))},ya(G)))}function h(G,P,X){e[P]=sl(k,l,X||p,P,G)}var k=window;(!k||isNaN(a)&&!a)&&Te();var l=tl(a,Ue,c,b,d),m=[],p=[gh,Se,hh];p.unshift(ul);var q=u(O,f),r=A(O,Ab),t=N(l);l.id||pb(k,t,"Invalid Metrika id: "+l.id);var y=Wc.o("counters",{});if(y[t])return pb(k, +t,"Duplicate counter "+t+" initialization"),y[t];y[t]=e;Wc.C("counters",y);Wc.Ra("counter",e);z(function(G){G(k,l)},Sd);z(q,zc);f(vl);h(wl(k,l),"params");f(xl);h(yl(k,l,m),"destruct",[gh,hh]);Hb(k,F([k,r,q,1,"a.i"],ih));z(q,Z)})()}function zl(a,c,b,d){var e;if(a=Ga(a,b)){var f=d.data;b=""+b.id;var g=d.sended||[];d.sended||(d.sended=g);H(b,g)||!a.params||d.counter&&""+d.counter!==b||(a.params(f),g.push(b),d.parent&&c.pg((e={},e.type="params",e.data=f,e)))}}function Al(a){var c=B,b=null,d=a.length; +if(0!==a.length&&a[0]){var e=a.slice(-1)[0];S(e)&&(c=e,d=a.length+-1);var f=a.slice(-2)[0];S(f)&&(c=f,b=e,d=a.length+-2);d=a.slice(0,d);return{xh:b,gb:c,ba:1===d.length?a[0]:Ac(d)}}}function Bl(a,c){var b=Cl(a),d=[Dl(a)||El(a)];jh(a)&&d.push(b);var e=ha(a);b=Qa(a);var f=b.o("synced",{});d=Y(function(g){if(c[g]){var h=(f[g]||1)+1440=G&&Xd.push(t)}),(0,Ye[0])(a).then(U("params.eu")).then(function(t){if(t||q){g.C("gdpr_popup",We);Pl(a,c);if(cb(a))return Ql(a,r,c);var y=nh(a,f);if(y)return t=Rl(a,r,y,c,p),t.then(F([a,c],Sl)),t}t||r("8");return K.resolve({value:Cc,Wd:!0})}).then(function(t){g.uc("gdpr_popup");if(t){var y=t.value;t=t.Wd;H(y,Ub)&&g.C("gdpr",y,t?void 0:525600)}y=fc(Xd,ja);gc(a,y,20)(Ra(C(a,"gdr"),B));h.C("f1", +ja)})["catch"](C(a,"gdp.a")))}}}}function Sl(a,c){if(Wd(a)){var b=Td(a),d=Ga(a,c);d=d&&d.params;b=A(v(Tl,n),Ze(b));d&&b.length&&d("gdpr",Y(Boolean,b))}}function Ql(a,c,b){var d=Yd(a,b);return new K(function(e){var f;if(d){var g=d.aa,h=u(v("4",c),v(null,e)),k=W(a,h,2E3,"gdp.f.t");d.pg((f={},f.type="isYandex",f)).then(function(l){l.isYandex?(c("5"),g.D(wa(["GDPR-ok-view-default","GDPR-ok-view-detailed"],$e),function(m){e({value:oh(m[1].type)})})):(c("6"),e(null))})["catch"](h).then(F([a,k],ma))}else e({value:We, +Wd:!0})})}function Pl(a,c){var b=Yd(a,c);b&&b.aa.D(["isYandex"],function(){var d;return d={type:"isYandex"},d.isYandex=Wd(a),d});return b}function Rl(a,c,b,d,e){var f=void 0===e?Ul:e;e=f.url;var g=f.Yf;f=Vl(a,f.Pf,d.Xj);var h=Yd(a,d);if(!h)return K.resolve({value:Cc,Wd:!0});var k=hc(a,{src:""+e+f+g+".js"});return new K(function(l,m){k?(c("7"),k.onerror=function(){var p;c("9");h.og((p={},p.type="GDPR-ok-view-default",p));l(null)},k.onload=function(){c("10");b.D(wa(["GDPR-ok-view-default","GDPR-ok-view-detailed"], +$e),function(p){var q;p=p.type;h.og((q={},q.type=p,q));l({value:oh(p)})})}):(c("9"),m(Sa("gdp.e")))})}function Vl(a,c,b){a=b||kh(a);return H(a,c)?a:"en"}function oh(a){if(H(a,["GDPR-ok-view-default","GDPR-ok-view-detailed"]))return Cc;a=a.replace("GDPR-ok-view-detailed-","");return H(a,Ub)?a:Cc}function ph(a,c,b){var d=n(a,"AppMetricaInitializer"),e=n(d,"init");if(e)try{D(e,d)(jb(a,c))}catch(f){}else qh=W(a,F([a,c,2*b],ph),b,"ai.d");return function(){return ma(a,qh)}}function Wl(a){var c=n(a,"speechSynthesis.getVoices"); +if(!c)return"";a=D(c,a.speechSynthesis);return ic(function(b){return A(v(b,n),Xl)},a())}function Yl(a,c,b){return L("x",A(u(O,oa("concat",""+a),v(b,n)),c))}function Zl(a,c){var b=c.lh;if(!$l(a,b))return"";var d=[];a:{var e=am(a,b);try{var f=F(e,u)()();break a}catch(G){if("ccf"===G.message){f=null;break a}db(G)}f=void 0}if(Ta(f))var g="";else try{g=f.toDataURL()}catch(G){g=""}(f=g)&&d.push(f);var h=b.getContextAttributes();try{var k=Ka(b.getSupportedExtensions,"getSupportedExtensions")?b.getSupportedExtensions()|| +[]:[]}catch(G){k=[]}k=L(";",k);f=af(b.getParameter(b.ALIASED_LINE_WIDTH_RANGE),b);e=af(b.getParameter(b.ALIASED_POINT_SIZE_RANGE),b);g=b.getParameter(b.ALPHA_BITS);h=h&&h.antialias?"yes":"no";var l=b.getParameter(b.BLUE_BITS),m=b.getParameter(b.DEPTH_BITS),p=b.getParameter(b.GREEN_BITS),q=b.getExtension("EXT_texture_filter_anisotropic")||b.getExtension("WEBKIT_EXT_texture_filter_anisotropic")||b.getExtension("MOZ_EXT_texture_filter_anisotropic");if(q){var r=b.getParameter(q.MAX_TEXTURE_MAX_ANISOTROPY_EXT); +0===r&&(r=2)}r={mk:k,"webgl aliased line width range":f,"webgl aliased point size range":e,"webgl alpha bits":g,"webgl antialiasing":h,"webgl blue bits":l,"webgl depth bits":m,"webgl green bits":p,"webgl max anisotropy":q?r:null,"webgl max combined texture image units":b.getParameter(b.MAX_COMBINED_TEXTURE_IMAGE_UNITS),"webgl max cube map texture size":b.getParameter(b.MAX_CUBE_MAP_TEXTURE_SIZE),"webgl max fragment uniform vectors":b.getParameter(b.MAX_FRAGMENT_UNIFORM_VECTORS),"webgl max render buffer size":b.getParameter(b.MAX_RENDERBUFFER_SIZE), +"webgl max texture image units":b.getParameter(b.MAX_TEXTURE_IMAGE_UNITS),"webgl max texture size":b.getParameter(b.MAX_TEXTURE_SIZE),"webgl max varying vectors":b.getParameter(b.MAX_VARYING_VECTORS),"webgl max vertex attribs":b.getParameter(b.MAX_VERTEX_ATTRIBS),"webgl max vertex texture image units":b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS),"webgl max vertex uniform vectors":b.getParameter(b.MAX_VERTEX_UNIFORM_VECTORS),"webgl max viewport dims":af(b.getParameter(b.MAX_VIEWPORT_DIMS),b),"webgl red bits":b.getParameter(b.RED_BITS), +"webgl renderer":b.getParameter(b.RENDERER),"webgl shading language version":b.getParameter(b.SHADING_LANGUAGE_VERSION),"webgl stencil bits":b.getParameter(b.STENCIL_BITS),"webgl vendor":b.getParameter(b.VENDOR),"webgl version":b.getParameter(b.VERSION)};bf(d,r,": ");a:{try{var t=b.getExtension("WEBGL_debug_renderer_info");if(t){var y={"webgl unmasked vendor":b.getParameter(t.UNMASKED_VENDOR_WEBGL),"webgl unmasked renderer":b.getParameter(t.UNMASKED_RENDERER_WEBGL)};break a}}catch(G){}y={}}bf(d,y); +if(!b.getShaderPrecisionFormat)return L("~",d);bf(d,bm(b));return L("~",d)}function bf(a,c,b){void 0===b&&(b=":");z(function(d){return a.push(""+d[0]+b+d[1])},ya(c))}function cm(a,c,b,d){c=d.o("cc");d=F(["cc",""],d.C);if(c){var e=c.split("&");c=e[0];if((e=(e=e[1])&&Ha(e))&&1440"}return null},ji:function(){try{if(!a.sessionStorage)return null; +var c=a.sessionStorage.getItem("__vw_tab_guid"),b=!1;try{var d=a.opener?a.opener.sessionStorage:null;b=!!d&&c===d.getItem("__vw_tab_guid")}catch(e){b=!0}if(!c||b)c=Ih(),a.sessionStorage.setItem("__vw_tab_guid",c);return c}catch(e){return null}}}}function Sm(a,c,b){var d=fd(a),e=ia(a),f=cb(a),g=c.Id(),h=!n(a,"postMessage")||f&&!n(a,"parent.postMessage"),k=v(d,O);if(h){if(!g)return W(a,D(d.O,d,"i",{va:!1}),10),{Hd:k,mg:B,stop:B};db(Sa())}d.D(["sr"],function(r){var t,y=Jh(a,r.source);y&&qf(a,r.source, +(t={},t.type="\u043d",t.frameId=c.ta().Z(y),t))});d.D(["sd"],function(r){var t=r.data;r=r.source;(a===r||Jh(a,r))&&d.O("sdr",{data:t.data,M:t.frameId})});if(f&&!g){var l=!1,m=0,p=function(){var r;qf(a,a.parent,(r={},r.type="sr",r));m=W(a,p,100,"if.i")};p();var q=function(r){d.na(["\u043d"],q);ma(a,m);var t=Hc(a,r.origin).host;l||r.source!==a.parent||!r.data.frameId||"about:blank"!==T(a).host&&!H(t,b)||(l=!0,d.O("i",{M:r.data.frameId,va:!0}))};d.D(["\u043d"],q);W(a,function(){d.na(["\u043d"],q);ma(a, +m);l||(l=!0,d.O("i",{va:!1}))},2E3,"if.r")}e=e.D(a,["message"],function(r){var t=qb(a,r.data);t&&t.type&&H(t.type,Tm)&&d.O(t.type,{data:t,source:r.source,origin:r.origin})});return{Hd:k,mg:function(r){var t;return qf(a,a.parent,(t={},t.frameId=c.Id(),t.data=r,t.type="sd",t))},stop:e}}function Jh(a,c){try{return eb(u(U("contentWindow"),la(c)),qa(a.document.querySelectorAll("iframe")))}catch(b){return null}}function qf(a,c,b){a=jb(a,b);c.postMessage(a,"*")}function Ih(){return Wb()+Wb()+"-"+Wb()+"-"+ +Wb()+"-"+Wb()+"-"+Wb()+Wb()+Wb()}function Wb(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}function Um(a,c){if(Ea(c))return c;var b=a.textContent;if(Ea(b))return b;b=a.data;if(Ea(b))return b;b=a.nodeValue;return Ea(b)?b:""}function Vm(a,c,b,d,e){void 0===d&&(d={});void 0===e&&(e=Ia(c));var f=x(M(function(h,k){h[k.name]=k.value;return h},{},qa(c.attributes)),d);x(f,Wm(c,e,f));var g=(d=M(function(h,k){var l=k[0],m=ce(a,c,l,k[1],b,e),p=m.value;na(p)?delete f[l]:f[l]=p;return h|| +m.qb},!1,ya(f)))&&gd(c);g&&(f.width=g.width,f.height=g.height);return{qb:d,eh:f}}function Wm(a,c,b){var d={};rf(a)?d.value=a.value||b.value:"IMG"!==c||b.src||(d.src="");return d}function ce(a,c,b,d,e,f){void 0===f&&(f=Ia(c));var g={qb:!1,value:d};if(rf(c))"value"===b?!na(d)&&""!==d&&(b=e.Kf,f=e.ag,e=hd(a,c),f?(b=id(a,c,b),a=b.Vd,c=b.Ed,b=b.tb,g.qb=!c&&(e||a)):(g.qb=e,b=!de(c)),b||e)&&(g.value=L("",A(v("\u2022",O),(""+d).split("")))):"checked"===b&&H((c.getAttribute("type")||"").toLowerCase(),Xm)? +g.value=c.checked?"checked":null:Ym.test(b)&&sf(a,c)&&(g.value=null);else if("IMG"===f&&"src"===b)(e=hd(a,c))?(g.qb=e,g.value="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="):g.value=(c.getAttribute("srcset")?c.currentSrc:"")||c.src;else if("A"===f&&"href"===b)g.value=d?"#":"";else if(H(b,["srcset","integrity","crossorigin","password"])||2e||1>3;if(g&1)qc(d,lb(l)),h=k(h),l&2&&qc(d,lb(h[1])),qc(d,h);else if(g&4)for(g=h.length-1;0<=g;){var m=k(h[g]);m.push([0,0,Ff]);m.push([0,lb(l),qc]);m.unshift([0,0,Gf]);f.push.apply(f,m);--g}else if(g&2){k=e[2];var p=e[3],q=e[4],r=e[5],t=ca(h);for(g=t.length-1;0<=g;)m=t[g],m=[[0,0,Gf],[q,h[m],r],[k,m,p],[0,0,Ff],[0,lb(l),qc]],f.push.apply(f,m),--g}else m=k(h),m.push([0,0, +Ff]),m.push([0,lb(l),qc]),m.unshift([0,0,Gf]),f.push.apply(f,m);return d})}function Gf(a){var c=a[1],b=a[0],d=a[2];a[3]?(a[0]=a[3][0],a[1]=a[3][1],a[2]=a[3][2],a[3]=a[3][3]):(a[0]=0,a[1]=[B,0,0],a[2]=a[1]);qc(a,lb(b));b&&(a[2][3]=c[3],a[2]=d,a[0]+=b)}function Ff(a){a[3]=[a[0],a[1],a[2],a[3]];a[1]=[B,0,0];a[2]=a[1];a[0]=0}function qc(a,c){a[0]+=c[1];a[2][3]=c;a[2]=c}function Hf(a){return[[385,a.$g,lb],[336,a.lj,tn],[272,a.bh,un],[208,a.event,vn],[144,a.Qi,wn],[80,a.page,xn]]}function yn(a){return[[321, +a.end,Kb],[273,a.rh,zn],[193,a.page,J],[144,a.data,Hf],[65,a.L,J]]}function Wh(a){return[[84,a.buffer,yn]]}function An(a){return[[129,a.position,J],[81,a.name,Q]]}function Bn(a){return[[81,a.name,Q]]}function Cn(a){return[[81,a.name,Q]]}function un(a){return[[593,a.Pj,Q],[532,a.qj,An],[449,a.ff,J],[401,a.kj,Q],[340,a.Ej,Bn],[276,a.fh,Cn],[209,a.gj,Q],[145,a.hj,Q],[65,a.id,lb]]}function Dn(a){return[[513,a.ff,J],[489,a.Ni,ld],[385,a.Ma,J],[321,a.height,J],[257,a.width,J],[193,a.y,J],[129,a.x,J],[65, +a.id,lb]]}function tn(a){return[[129,a.Ma,J],[84,a.dh,Dn]]}function En(a){return[[81,a.hash,Q]]}function Fn(a){return[[209,a.stack,Q],[145,a.Gh,Q],[81,a.code,Q]]}function Gn(a){return[[193,a.orientation,J],[129,a.height,J],[65,a.width,J]]}function Hn(a){return[[84,a.Mc,In]]}function In(a){return[[273,a.Nc,Q],[193,a.Lf,Kb],[145,a.key,Q],[65,a.id,J]]}function Jn(a){return[[145,a.value,Q],[81,a.Fk,Q]]}function Kn(a){return[[149,a.Ib,Q],[81,a.method,Q]]}function Ln(a){return[[257,a.vb,J],[193,a.wb,J], +[129,a.height,J],[65,a.width,J]]}function Mn(a){return[[144,a.Ng,Xh],[80,a.Lg,Xh]]}function Xh(a){return[[193,a.y,J],[129,a.x,J],[105,a.level,ld]]}function Nn(a){return[[84,a.touches,On]]}function On(a){return[[297,a.force,ld],[233,a.y,ld],[169,a.x,ld],[81,a.id,Q]]}function Pn(a){return[[193,a.hidden,Kb],[129,a.checked,Kb],[81,a.value,Q]]}function Qn(a){return[[257,a.jf,J],[193,a.vg,J],[129,a.end,J],[65,a.start,J]]}function Rn(){return[]}function Sn(a){return[[193,a.page,Kb],[129,a.y,J],[65,a.x,J]]} +function Tn(a){return[[129,a.y,J],[65,a.x,J]]}function Un(a){return[[84,a.Ka,Vn]]}function Vn(a){return[[257,a.index,J],[209,a.me,Q],[145,a.style,Q],[65,a.target,J]]}function vn(a){return[[1168,a.xj,Un],[1104,a.wi,En],[1040,a.Jh,Fn],[976,a.zh,Gn],[912,a.Ki,Hn],[848,a.nj,Ln],[784,a.Yj,Mn],[720,a.Gk,Jn],[656,a.Ck,Kn],[592,a.Fj,Nn],[528,a.mh,Pn],[464,a.tj,Qn],[400,a.Vj,Rn],[336,a.rj,Sn],[272,a.Oi,Tn],[193,a.M,he],[129,a.target,he],[65,a.type,lb]]}function wn(a){return[[257,a.M,he],[208,a.$,Wn],[129, +a.L,J],[65,a.target,J]]}function Wn(a){return[[148,a.Ka,Xn],[65,a.index,J]]}function Xn(a){return[[276,a.d,Yn],[212,a.od,Zn],[148,a.cf,$n],[84,a.Ze,ao]]}function Yn(a){return[[193,a.Ea,J],[144,a.sc,Yh],[65,a.id,J]]}function Zn(a){return[[193,a.Ea,J],[146,a.Jb,81,Q,144,Yh],[65,a.id,J]]}function Yh(a){return[[193,a.r,Kb],[145,a.n,Q],[81,a.Qc,Q]]}function $n(a){return[[641,a.Wa,Kb],[577,a.Ea,J],[513,a.fe,J],[465,a.sc,Q],[402,a.Jb,81,Q,145,Q],[321,a.qe,J],[273,a.Uf,Q],[193,a.ne,J],[145,a.Tf,Q],[65,a.id, +J]]}function ao(a){return[[321,a.Ea,J],[257,a.ne,J],[193,a.fe,J],[129,a.qe,J],[65,a.id,J]]}function xn(a){return[[321,a.Ha,bo],[273,a.ed,Q],[193,a.M,he],[148,a.content,co],[80,a.$,eo]]}function co(a){return[[513,a.hidden,Kb],[449,a.te,J],[385,a.next,J],[337,a.content,Q],[257,a.parent,J],[210,a.attributes,81,Q,145,Q],[145,a.name,Q],[65,a.id,J]]}function eo(a){return[[724,a.yk,fo],[656,a.location,go],[592,a.viewport,Zh],[528,a.screen,Zh],[449,a.Ff,Kb],[401,a.df,Q],[337,a.referrer,Q],[273,a.Gg,Q],[209, +a.af,Q],[145,a.title,Q],[81,a.doctype,Q]]}function fo(a){return[[133,a.scroll,J],[65,a.target,J]]}function go(a){return[[209,a.path,Q],[145,a.protocol,Q],[81,a.host,Q]]}function Zh(a){return[[129,a.height,J],[65,a.width,J]]}function Q(a){var c=ho({},a,[],0);return c?[io,c,a]:[$h,0,0]}function zn(a){return[jo,a.length,a]}function Kb(a){return[$h,1,a?1:0]}function bo(a){a=ai(a);var c=a[0],b=a[1],d=(b>>>28|c<<4)>>>0;c>>>=24;return[bi,0===c?0===d?16384>b?128>b?1:2:2097152>b?3:4:16384>d?128>d?5:6:2097152> +d?7:8:128>c?9:10,a]}function ld(a){return[ko,4,a]}function he(a){return lb((a<<1^a>>31)>>>0)}function J(a){return 0>a?[bi,10,ai(a)]:lb(a)}function lb(a){return[lo,128>a?1:16384>a?2:2097152>a?3:268435456>a?4:5,a]}function lo(a,c,b,d){for(a=c;127>>=7;b[d]=a}function $h(a,c,b,d){b[d]=c}function jo(a,c,b,d){for(a=0;ac)a?g+=1:d[e++]=c;else{if(2048>c){if(a){g+= +2;continue}d[e++]=c>>6|192}else{if(55296===(c&64512)&&56320===((f=b.charCodeAt(h+1))&64512)){if(a){g+=4;continue}c=65536+((c&1023)<<10)+(f&1023);++h;d[e++]=c>>18|240;d[e++]=c>>12&63|128}else{if(a){g+=3;continue}d[e++]=c>>12|224}d[e++]=c>>6&63|128}d[e++]=c&63|128}return a?g:e}}function ko(a,c,b,d){return mo(a)(a,c,b,d)}function no(a,c,b,d){var e=0>c?1:0;e&&(c=-c);if(0===c)md(0<1/c?0:2147483648,b,d);else if(a.isNaN(c))md(2143289344,b,d);else if(3.4028234663852886E38>>0,b,d); +else if(1.1754943508222875E-38>c)md((e<<31|a.Math.round(c/1.401298464324817E-45))>>>0,b,d);else{var f=a.Math.floor(a.Math.log(c)/Math.LN2);md((e<<31|f+127<<23|Math.round(c*a.Math.pow(2,-f)*8388608)&8388607)>>>0,b,d)}}function md(a,c,b){c[b]=a&255;c[b+1]=a>>>8&255;c[b+2]=a>>>16&255;c[b+3]=a>>>24}function bi(a,c,b,d){a=c[0];for(c=c[1];a;)b[d++]=c&127|128,c=(c>>>7|a<<25)>>>0,a>>>=7;for(;127>>=7;b[d++]=c}function ai(a){if(!a)return[0,0];var c=0>a;c&&(a=-a);var b=a>>>0;a=(a-b)/4294967296>>> +0;c&&(a=~a>>>0,b=~b>>>0,4294967295<++b&&(b=0,4294967295<++a&&(a=0)));return[a,b]}function ie(a){return ea(a)?A(ie,a):na(a)||"object"!==typeof a?a:M(function(c,b){var d=b[0],e=b[1],f=oo[d];V(f)&&(f=d);e=H(f,po)?e:ie(e);f?c[f]=e:c[d]=e;return c},{},ya(a))}function di(a,c,b){return function(d,e,f){var g;d=x({H:Ca()},d);d.H.ac("we",Cb(e.Fb));d.G||(d.G={});var h=d.G,k=d.Oa;k=void 0===k?{}:k;h.wmode="0";h["wv-part"]=""+f;h["wv-hit"]=h["wv-hit"]||""+Ib(a);h["page-url"]=h["page-url"]||a.location.href;h.rn= +h.rn||""+Ua(a);h["wv-type"]||(h["wv-type"]=k.Td?"3":"2");f={Ia:{Pa:"webvisor/"+e.id},Y:x(d.Y,{xb:(g={},g["Content-Type"]="text/plain",g),Ue:"POST"}),G:h};e=La(je(a,"wv",e),b);return nd(a,c,e)(x(d,f))}}function qo(a,c){return pa(a,c,function(b){var d=I(a);N(c);if(!d.o("dSync",!1))return d.C("dSync",!0),ei(a,b,{hb:c,Wc:"s",$d:"ds",zj:function(e,f,g){var h=e.$c;e=e.host;if(n(h,"settings"))return db(Sa("ds.e"));f=f(aa)-g;g=e[1];var k,l;h=Ca((k={},k.di=h,k.dit=f,k.dip=g,k));k=(l={},l["page-url"]=T(a).href, +l);return za(a,"S",fi)({H:h,G:k},fi)["catch"](C(a,"ds.rs"))}})})}function ei(a,c,b){var d=b.hb,e=ha(a),f=ro(a,c.userData,d),g=so(a);return g.length?to(a,e,f,c,b).then(function(){return uo(a,g,f,e,b)},B):K.resolve()}function so(a){var c=od(a);a=u(If,mc(["iPhone","iPad"]))(a);return c?vo:a?wo:[]}function uo(a,c,b,d,e){var f=e.zj,g=void 0===f?B:f,h=e.$d,k=d(aa);return xo(a,c,e)(Ra(function(l){z(function(m){m&&ke(a,h+".s",m)},l);l=d(ib);b.C(h,l)},function(l){b.C(h,d(ib));g(l,d,k)}))}function to(a,c,b, +d,e){var f=e.$d,g=e.hb;return new K(function(h,k){var l=b.o(f,0);l=parseInt(""+l,10);return 60>=c(ib)-l?k():yo(a)?h(void 0):gi(d)?k():h(zo(a,g))})}function xo(a,c,b){var d=b.Wc,e=b.data,f=za(a,d,b.hb);a=x({},hi);e&&x(a.G,e);return Ao(A(function(g){return Bo(f(x({Y:{Kg:!1,pj:!0}},hi),A(function(h){var k=h[1],l=h[2];h=L("",A(function(m){return String.fromCharCode(m.charCodeAt(0)+10)},h[0].split("")));return"http"+(l?"s":"")+"://"+h+":"+k+"/"+Co[d]},g)).then(function(h){return x({},h,{host:g[h.Ig]})}))}, +c))}function ro(a,c,b){var d=c||{},e=za(a,"u",b),f=Qa(a);return{o:function(g,h){return V(d[g])?f.o(g,h):d[g]},C:function(g,h){var k,l=""+h;d[g]=l;f.C(g,l);return e({G:(k={},k.key=g,k.value=l,k)},[ra.Ua+"//"+rc+"/user_storage_set"],{})["catch"](C(a,"u.d.s.s"))}}}function Do(a){return{ca:function(c,b){I(a).o("oo")||b()}}}function Eo(a,c){try{var b=c[0];var d=b[1]}catch(e){return function(){return K.resolve()}}return function(e){var f,g=(f={},f["browser-info"]=Fo,f["page-url"]=a.location&&""+a.location.href, +f);return d&&(e=jb(a,e))?d(Go,{Wb:g,Ca:[],fa:"site-info="+be(e)})["catch"](B):K.resolve()}}function Ho(a,c){if(a["disableYaCounter"+c.id]){var b=N(c);delete I(a).o("counters",{})[b];db(Sa("oo.e"))}}function ii(a,c){var b=$c(a,c),d=[],e=[];if(!b)return null;var f=F([a,b.De],Io),g=v(f,Jo);b.aa.D(["initToParent"],function(h){g(d,b.children[h[1].counterId])}).D(["parentConnect"],function(h){g(e,b.Ga[h[1].counterId])});return{aa:b.aa,Kk:function(h,k){return new K(function(l,m){b.De(h,k,function(p,q){l([p, +q])});W(a,v(Sa(),m),5100,"is.o")})},og:function(h){var k={rg:[],Oe:[],data:h};d.push(k);return f(b.children,k,h)},pg:function(h){var k={rg:[],Oe:[],data:h};e.push(k);return f(b.Ga,k,h)}}}function Jo(a,c,b){c=Y(function(d){return!H(b.info.counterId,d.Oe)},c);z(function(d){var e;b.info.counterId&&a((e={},e[b.info.counterId]=b,e),d,d.data)},c)}function Io(a,c,b,d,e){return(new K(function(f,g){var h=ca(b),k=u(d.resolve?d.resolve:O,dd(f)),l=u(d.reject?d.reject:O,dd(g));d.resolve=k;d.reject=l;z(function(m){var p; +d.Oe.push(+m);var q=b[m],r=W(a,v(Sa(),l),5100,"is.m");c(q.window,x(e,(p={},p.toCounter=Ha(m),p)),function(t,y){ma(a,r);d.rg.push(m);d.resolve&&d.resolve(y)})},h)}))["catch"](C(a,"if.b"))}function Ko(a){if(Yc(a))return null;var c=Lo(a),b=c.$f;V(b)&&(c.$f=null,Mo(a).then(function(d){c.$f=d}));return b?1:null}function No(a,c,b){c=N(c);a=ji(a);b=b.G;if((void 0===b?{}:b).nohit)return null;var d=b=null;n(a,"getEntriesByType")&&(d=n(a.getEntriesByType("navigation"),"0"))&&(b=Oo);if(!b){var e=n(a,"timing"); +e&&(b=Po,d=e)}if(!b)return null;a=Qo(a,d,b);c=Ro(c);return(c=So(c,a))&&L(",",c)}function So(a,c){var b=a.length?A(function(d,e){var f=c[e];return f===d?null:f},a):c;a.length=0;z(u(O,oa("push",a)),c);return Y(la(null),b).length===a.length?null:b}function Qo(a,c,b){return A(function(d){var e=d[0],f=d[1];if(S(e))return e(a,c)||null;if(S(f))return null;var g=!(!c[e]||!c[f]);!g&&2===d.length&&(g=0===c[e]&&0===c[f])&&(g=d[1],g=!(ki[d[0]]||ki[g]));return g?(d=Math.round(c[e])-Math.round(c[f]),0>d||36E5< +d?null:d):1===d.length&&c[e]?Math.round(c[e]):null},b)}function Kh(a,c){void 0===c&&(c=!1);for(var b=a.length,d=b-b%3,e=[],f=0;f>18&63],"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[g>>12&63],"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[g>>6&63],"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[g&63])}switch(b-d){case 1:b= +a[d]<<4;e.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[b>>6&63],"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[b&63],"=","=");break;case 2:b=(a[d]<<10)+(a[d+1]<<2),e.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[b>>12&63],"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[b>>6&63],"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[b&63],"=")}e=e.join("");return c?li(e,!0):e}function rh(a, +c){void 0===c&&(c=!1);var b=a,d="",e=0;if(!b)return"";for(c&&(b=li(b));b.length%4;)b+="=";do{var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(e++)),g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(e++)),h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(e++)),k="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(e++));if(0>f||0>g||0>h||0>k)return"";var l= +f<<18|g<<12|h<<6|k;f=l>>16&255;g=l>>8&255;l&=255;d=64===h?d+String.fromCharCode(f):64===k?d+String.fromCharCode(f,g):d+String.fromCharCode(f,g,l)}while(e'; +var f=d.firstChild;f.onload=function(){var h=b("meta");h.setAttribute("http-equiv","Content-Security-Policy");h.setAttribute("content","script-src *");f.contentWindow.document.head.appendChild(h);hc(f.contentWindow,{src:c})};a._ym__remoteIframeEl=f;e.appendChild(d);d.removeChild(f);var g=null;d.attachShadow?g=d.attachShadow({mode:"open"}):d.createShadowRoot?g=d.createShadowRoot():d.webkitCreateShadowRoot&&(g=d.webkitCreateShadowRoot());g?g.appendChild(f):(e.appendChild(f),a._ym__remoteIframeContainer= +f)}}}function dp(a){var c,b=ti(a);a=I(a).o("getCounters",td)();a=A(U("id"),a);return c={id:b},c.counterFound=!!b&&H(b,a),c}function qi(a,c,b){var d;c=ui(a,c,{Dg:gp,Si:(d={},d.href=!0,d)});b=Y(Boolean,A(function(f){return"*"===f?f:Lb(f)},b));var e=A(u(O,oa("concat",[""]),vi("reverse"),ja),b);b=qd(a);d=wi(a,b,1E3);c=D(c.cg,c,e);d.D(c);hp(a,b);xi(a,b);c()}function gp(a,c,b){var d=$a(a),e=b.yb,f=b.Yc,g=e.parentNode,h=e.textContent;if("text"===b.Ae&&h&&d&&g){b=d("small");yi(b);var k=h.split(""),l=zi(h).length; +z(oa("appendChild",b),M(function(m,p){var q=m.ma,r=m.Jg,t=d("small");t.innerHTML=p;var y=ip.test(p);yi(t);y&&(t.style.opacity=""+(l-r-1)/l);q.push(t);return{ma:q,Jg:r+(y?1:0)}},{ma:[],Jg:0},k).ma);jp(a,c,b,f);g.insertBefore(b,e);e.textContent="";return!0}return!1}function jp(a,c,b,d){function e(){z(v(["style","opacity",""],Ac),qa(b.childNodes));if(c){var k=Ga(a,c);k&&k.extLink("tel:"+d,{})}g();h()}var f=ia(a),g=B,h=B;g=f.D(b,["mouseenter"],function(k){if(k.target===b){var l=W(a,e,200,"ph.h.e");(h|| +B)();h=f.D(b,["mouseleave"],function(m){m.target===b&&ma(a,l)})}})}function xi(a,c){Zb(a)(Ra(B,function(){var b,d=a.document.body,e=(b={},b.attributes=!0,b.childList=!0,b.subtree=!0,b);Da("MutationObserver",a.MutationObserver)&&(new MutationObserver(c.O)).observe(d,e)}))}function hp(a,c){return ia(a).D(a,["load"],c.O)}function ui(a,c,b){function d(k){var l;return f(a,c,k)?null===(l=h[k.Yc])||void 0===l?void 0:l.gd:null}var e,f=b.Dg;b=b.Si;var g=void 0===b?(e={},e.href=!0,e.text=!0,e):b,h;return{cg:function(k){return new K(function(l, +m){k&&k.length||m();h=Ai()(k);Zb(a)(Ra(v({oa:[],ya:0},l),function(){var p=ha(a),q=p(aa),r=g.href?kp(a,h):[],t=g.text?Bi(a,h):[];l({oa:Y(ea,Y(Boolean,A(d,r.concat(t)))),ya:p(aa)-q})}))})}}}function kp(a,c){var b=a.document.body;if(!b)return[];var d=Ci(c);return M(function(e,f){var g=n(f,"href");try{var h=decodeURI(g||"")}catch(p){h=""}if("tel:"===h.slice(0,4)){var k=(d.exec(h)||[])[0],l=k?Lb(k):"",m=c[l];V(m)||!l&&"*"!==m.gd[0]||(e.push({Ae:"href",yb:f,Yc:l,eb:Di(k,c[l].eb),Bj:g}),g=Lb(h.slice(4)), +l=Ai()([l?m.gd:[g,""]]),e.push.apply(e,Bi(a,l,f)))}return e},[],qa(b.querySelectorAll("a")))}function Bi(a,c,b){void 0===b&&(b=a.document.body);if(!b)return[];var d=[],e=Ci(c);lf(a,b,function(f){if(f!==b&&"script"!==(n(f,"parentNode.nodeName")||"").toLowerCase()){var g=Y(Boolean,e.exec(f.textContent||"")||[]);z(function(h){var k=Lb(h);V(c[k])||d.push({Ae:"text",yb:f,Yc:k,eb:Di(h,c[k].eb),Bj:f.textContent||""})},g)}},function(f){return e.test(f.textContent||"")?1:0},a.NodeFilter.SHOW_TEXT);return d} +function Ai(){return ud(function(a,c){var b=A(Lb,c),d=b[0];b=b[1];a[d]={eb:b,gd:c};var e=Ei(d);e!==d&&(a[e]={eb:Ei(b),gd:c});return a},{})}function Di(a,c){for(var b=[],d=a.split(""),e=c.split(""),f=0,g=0;g=e.length);g+=1){var h=d[g];"0"<=h&&"9">=h?(b.push(e[f]),f+=1):b.push(d[g])}return L("",b)+c.slice(f+1)}function Ei(a){var c={7:"8",8:"7"};return 11===a.length&&c[a[0]]?""+c[a[0]]+a.slice(1):a}function Ci(a){return new RegExp("(?:"+L("|",A(Fi,ca(a)))+")")}function Gi(a,c,b,d){if(c){var e= +[];c&&(a.document.documentElement.contains(c)?lf(a,c,oa("push",e),d):La(e,Hi(a,c,d)));z(b,e)}}function lf(a,c,b,d,e){function f(g){return S(d)?d(g)?a.NodeFilter.FILTER_ACCEPT:a.NodeFilter.FILTER_REJECT:a.NodeFilter.FILTER_ACCEPT}void 0===e&&(e=-1);if(S(b)&&f(c)===a.NodeFilter.FILTER_ACCEPT&&(b(c),!Bf(c)))for(c=a.document.createTreeWalker(c,e,d?{acceptNode:f}:null,!1);c.nextNode()&&!1!==b(c.currentNode););}function Hi(a,c,b){var d=[],e=u(O,oa("push",d));S(b)?(b=b(c),(na(b)||b===a.NodeFilter.FILTER_ACCEPT)&& +e(c)):e(c);if(c.childNodes&&0c.time-b.time)return!1;e=Math.abs(b.position.x-c.position.x);a=Math.abs(b.position.y-c.position.y);c=c.time-b.time;if(b.element===d&&2>e&&2>a&&1E3>c)return!1}for(;d;){if(rp(d))return!1;d=d.parentElement}return!0}function sp(a,c){var b=null;try{if(b=c.target||c.srcElement)!b.ownerDocument&&b.documentElement?b=b.documentElement:b.ownerDocument!==a.document&&(b=null)}catch(d){}return b}function tp(a){var c=a.which; +a=a.button;return c||void 0===a?c:1===a||3===a?1:2===a?3:4===a?2:0}function Li(a,c){var b=Vb(a),d=Pf(a);return{x:c.pageX||c.clientX+d.x-(b.clientLeft||0)||0,y:c.pageY||c.clientY+d.y-(b.clientTop||0)||0}}function up(a,c){if(a.Jj()){var b=Mi(c);if(b&&!pc("ym-disable-tracklink",b)){var d=a.l,e=a.vh,f=a.hb,g=a.sender,h=a.Kh,k=f.Ac,l=b.href,m=tb(b&&b.innerHTML&&b.innerHTML.replace(/<\/?[^>]+>/gi,""));m=l===m?"":m;if(pc("ym-external-link",b))pe(d,f,{url:l,Qb:!0,title:m,sender:g});else{k=k?Hc(d,k).hostname: +T(d).hostname;h=RegExp("\\.("+L("|",A(vp,h))+")$","i");var p=b.protocol+"//"+b.hostname+b.pathname;h=Ni.test(p)||Ni.test(l)||h.test(l)||h.test(p);b=b.hostname;qe(k)===qe(b)?h?pe(d,f,{url:l,Jc:!0,title:m,sender:g}):m&&e.C("il",tb(m).slice(0,100)):l&&wp.test(l)||pe(d,f,{url:l,Oc:!0,Qb:!0,Jc:h,title:m,sender:g})}}}}function pe(a,c,b,d){var e,f=Ca();b.Jc&&f.C("dl",1);b.Qb&&f.C("ln",1);f={H:f,V:{title:b.title,Oc:!!b.Oc,ba:b.ba},G:(e={},e["page-url"]=b.url,e["page-ref"]=c.Ac||T(a).href,e)};e="Link";b.Jc? +e=b.Qb?"Ext link - File":"File":b.Qb&&(e="Ext link");c=b.sender(f,c).then(d||B).then(Db(a,c,e+". Counter "+c.id+". Url: "+b.url,b));return Jc(a,"cl.p.s",c,b.gb||B,b.l)}function xp(a,c){var b,d,e=(b={},b.string=!0,b.object=!0,b["boolean"]=c,b)[typeof c]||!1;a((d={},d.trackLinks=e,d))}function yp(a,c,b,d){var e=T(a),f=e.hostname;e=e.href;if(c=xd(c).url)a=Hc(a,c),f=a.hostname,e=a.href;return[d+"://"+f+"/"+b,e||""]}function Oi(a){return(a.split(":")[1]||"").replace(/^\/*/,"").replace(/^www\./,"").split("/")[0]} +function Jc(a,c,b,d,e){var f=F([a,d,e],Qf);return b.then(f,function(g){f();ke(a,c,g)})}function re(a,c){return function(b){Pi(a,c,b)}}function zp(a,c){Rf(a)(function(b){delete b[c]})}function Pi(a,c,b){Rf(a)(function(d){d[c]=x(d[c]||{},b)})}function Rf(a){a=I(a);var c=a.o("dsjf")||Ba({});a.Ra("dsjf",c);return c}function Ap(a,c){return function(b){var d,e,f=Ga(a,c);f&&(Ma(b)?Na(ca(b))?(b=Qi(b))&&Na(b)&&f.params((d={},d.__ym=(e={},e.fpmh=b,e),d)):Db(a,c,"First party params error. Empty object.")(): +Db(a,c,"First party params error. Not an object.")())}}function Qi(a){a=ya(a);return M(function(c,b){var d=b[0],e=b[1],f=Ma(e);if(!Ea(e)&&!f)return c;e=f?Qi(e):e;Na(e)&&c.push([d,e]);return c},[],a)}function Ri(a,c,b){void 0===b&&(b=0);c=ya(c);c=M(function(d,e){var f=e[0],g=e[1],h=Ma(g);if(!Ea(g)&&!h)return d;h?g=Ri(a,g,b+1):b||"yandex_cid"!==f?("phone_number"===f?g=Bp(g):"email"===f&&(g=Cp(g)),g=Si(a,g)):g=K.resolve(g);d.push(g.then(function(k){return[f,k]}));return d},[],c);return K.all(c)}function Cp(a){var c= +tb(a).toLowerCase().split("@"),b=c[0];c=c[1];if(!c)return a;c=c.replace("googlemail.com","gmail.com");Ti(c)&&(c="yandex.ru");"yandex.ru"===c?b=b.replace(Sf,"-"):"gmail.com"===c&&(b=b.replace(Sf,""));a=tf(b,"+");-1!==a&&(b=b.slice(0,a));return b+"@"+c}function Bp(a){a=Lb(a);return"8"===a[0]?"7"+a.slice(1):a}function Si(a,c){return new K(function(b,d){var e=(new a.TextEncoder).encode(c);a.crypto.subtle.digest("SHA-256",e).then(function(f){f=new a.Blob([f],{type:"application/octet-binary"});var g=new a.FileReader; +g.onload=function(h){h=n(h,"target.result");var k=(h||"").indexOf(",");-1!==k?b(h.substring(k+1)):d(Kc("fpm.i"))};g.readAsDataURL(f)},d)})}function Ui(a,c){I(a).C("dce:"+c,!0);var b=I(a).o("dclq:"+c);b&&(z(function(d){var e=d[0];d=d[1];ja.apply(void 0,wa([yd(a,c)[e]],d))},b),zd(b))}function Db(a,c,b,d){return Tf(c)?B:v(F(wa([a,N(c)],d?[b+". Params:",d]:[b]),pb),ja)}function pb(){var a=Aa(arguments),c=a.slice(2);yd(a[0],a[1]).log.apply(pb,c)}function Cf(a){var c="1"===Xb(a).o("debug"),b=-1a.selectedIndex:!0}function Ia(a){if(a)try{var c=a.nodeName;if(Ea(c))return c;c=a.tagName;if(Ea(c))return c}catch(b){}}function qj(a,c){var b=a.document.getElementsByTagName("form");return Mb(a)(c,qa(b))}function gq(a,c,b){b=bc("dispatchEvent",b||a.document); +var d=null,e=n(a,"Event.prototype.constructor");if(e&&(Da("(Event|Object|constructor)",e)||kg(a)&&"[object Event]"===""+e))try{d=new a.Event(c)}catch(f){if((a=bc("createEvent",n(a,"document")))&&S(a)){try{d=a(c)}catch(g){}d&&d.initEvent&&d.initEvent(c,!1,!1)}}d&&b(d)}function gd(a){try{return a.getBoundingClientRect&&a.getBoundingClientRect()}catch(c){return"object"===typeof c&&null!==c&&16389===(c.Vf&&c.Vf&65535)?{top:0,bottom:0,left:0,width:0,height:0,right:0}:null}}function Pf(a){var c=uc(a),b= +n(a,"document");return{x:a.pageXOffset||b.documentElement&&b.documentElement.scrollLeft||c&&c.scrollLeft||0,y:a.pageYOffset||b.documentElement&&b.documentElement.scrollTop||c&&c.scrollTop||0}}function Ed(a){var c=lg(a);if(c){var b=c[2];return[a.Math.round(c[0]*b),a.Math.round(c[1]*b)]}c=Vb(a);return[n(c,"clientWidth")||a.innerWidth,n(c,"clientHeight")||a.innerHeight]}function lg(a){var c=n(a,"visualViewport.width"),b=n(a,"visualViewport.height");a=n(a,"visualViewport.scale");return na(c)||na(b)?null: +[Math.floor(c),Math.floor(b),a]}function Vb(a){var c=n(a,"document")||{},b=c.documentElement;return"CSS1Compat"===c.compatMode?b:uc(a)||b}function uc(a){a=n(a,"document");try{return a.getElementsByTagName("body")[0]}catch(c){return null}}function pc(a,c){try{return(new RegExp("(?:^|\\s)"+a+"(?:\\s|$)")).test(c.className)}catch(b){return!1}}function vc(a){var c;try{if(c=a.target||a.srcElement)!c.ownerDocument&&c.documentElement?c=c.documentElement:c.ownerDocument!==document&&(c=null)}catch(b){}return c} +function jc(a){var c=a&&a.parentNode;c&&c.removeChild(a)}function Qb(a){return a?a.innerText||"":""}function Bf(a){if(na(a))return!1;a=a.nodeType;return 3===a||8===a}function tb(a,c){if(a){var b=rj?rj.call(a):(""+a).replace(aj,"");return c&&b.length>c?b.substring(0,c):b}return""}function ff(a,c,b){void 0===c&&(c="");void 0===b&&(b="_ym");var d=""+b+c+"_";return{Ud:hq(a),o:function(e,f){var g=sj(a,""+d+e);return Ta(g)&&!V(f)?f:g},C:function(e,f){tj(a,""+d+e,f);return this},uc:function(e){uj(a,""+d+ +e);return this}}}function tj(a,c,b){var d=mg(a);a=jb(a,b);if(!Ta(a))try{d.setItem(c,a)}catch(e){}}function sj(a,c){var b=mg(a);try{return qb(a,b.getItem(c))}catch(d){}return null}function uj(a,c){var b=mg(a);try{b.removeItem(c)}catch(d){}}function mg(a){try{return a.localStorage}catch(c){}return null}function jb(a,c,b){try{return a.JSON.stringify(c,null,b)}catch(d){return null}}function Ud(a,c,b){void 0===b&&(b=null);a.Bb||(a.Bb=vj());c&&a.Bb.ac(c,b);return a.Bb}function ng(a){return{ca:function(c, +b){var d=a.document,e=c.H;if(e&&og(a)){var f=ia(a),g=function(h){og(a)||(f.dc(d,wj,g),b());return h};f.D(d,wj,g);e.C("pr","1")}else b()}}}function Xa(a,c,b){return function(d,e){var f=La(je(a,"w",e),b);return nd(a,c,f)(d)}}function nd(a,c,b){var d=Bb(a,c);return function(e){return xj(b,e,!0).then(function(){var f=e.Ia||{},g=f.xi,h=void 0===g?"":g;g=f.Pa;var k=void 0===g?"":g;f=f.xk;f=void 0===f?[iq(a,k)]:f;f=A(function(l){return ra.Ua+"//"+(""+h+l||rc)+"/"+k},f);return d(e,f)}).then(function(f){var g= +f.$c;f=f.Ig;e.oj=g;e.Jk=f;return xj(b,e).then(v(g,O))})}}function iq(a,c){return M(function(b,d){return b||d(a,c)},void 0,yj)||rc}function xj(a,c,b){void 0===b&&(b=!1);return new K(function(d,e){function f(k,l){l();d()}var g=a.slice();g.push({ca:f,Ba:f});var h=fc(g,function(k,l){var m=b?k.ca:k.Ba;if(m)try{m(c,l)}catch(p){h(jq),e(p)}else l()});h(zj)})}function Hb(a,c,b){var d=b||"as";if(a.postMessage&&!a.attachEvent){b=ia(a);var e="__ym__promise_"+Ua(a)+"_"+Ua(a),f=B;d=C(a,d,function(g){try{var h= +g.data}catch(k){return}h===e&&(f(),g.stopPropagation&&g.stopPropagation(),c())});f=b.D(a,["message"],d);a.postMessage(e,"*")}else W(a,c,0,d)}function ih(a,c,b,d,e){void 0===d&&(d=1);void 0===e&&(e="itc");c=fc(c,b);gc(a,c,d)(Ra(C(a,e),B))}function gc(a,c,b,d){void 0===b&&(b=1);void 0===d&&(d=Aj);pg=Infinity===b;return Ba(function(e,f){function g(){try{var k=c(d(a,b));h=h.concat(k)}catch(l){return e(l)}c(kq);if(c(Fd))return f(h),Bj(a);pg?(c(d(a,1E4)),f(h),Bj(a)):W(a,g,100)}var h=[];lq(g)})}function Bj(a){if(qg.length){var c= +qg.shift();pg?c():W(a,c,100)}else rg=!1}function lq(a){rg?qg.push(a):(rg=!0,a())}function pf(a){return Ba(function(c,b){b(a)})}function Bo(a){return Ba(function(c,b){a.then(b,c)})}function mq(a){var c=[],b=0;return Ba(function(d,e){z(function(f,g){f(Ra(d,function(h){try{c[g]=h,b+=1,b===a.length&&e(c)}catch(k){d(k)}}))},a)})}function Ao(a){var c=[],b=!1;return Ba(function(d,e){function f(g){c.push(g)===a.length&&d(c)}z(function(g){g(Ra(f,function(h){if(!b)try{e(h),b=!0}catch(k){f(k)}}))},a)})}function Ra(a, +c){return function(b){return b(a,c)}}function fc(a,c){void 0===c&&(c=O);return Ba({Xa:a,Xd:c,Ie:!1,wa:0})}function zj(a){function c(){function d(){b=!0;a.wa+=1}b=!1;a.Xd(a.Xa[a.wa],function(){d()});b||(a.wa+=1,d=v(a,zj))}for(var b=!0;!Fd(a)&&b;)c()}function Aj(a,c){return function(b){var d=ha(a),e=d(aa);return Cj(function(f,g){d(aa)-e>=c&&g(Dj)})(b)}}function ze(a,c){return function(b){var d=ha(a),e=d(aa);return Ae(function(f){d(aa)-e>=c&&Dj(f)})(b)}}function Ae(a){return function(c){for(var b;c.Xa.length&& +!Fd(c);)b=c.Xa.pop(),b=c.Xd(b,c.Xa),a(c);return b}}function nq(a){Fd(a)&&db(Kc("i"));var c=a.Xd(a.Xa[a.wa]);a.wa+=1;return c}function kq(a){a.Ie=!1}function Dj(a){a.Ie=!0}function jq(a){a.wa=a.Xa.length}function Fd(a){return a.Ie||a.Xa.length<=a.wa}function Bb(a,c){return function(b,d){return Ej(a,c,d,b)}}function Ej(a,c,b,d,e,f){var g;void 0===e&&(e=0);void 0===f&&(f=0);var h=x({Ca:[]},d.Y),k=c[f],l=k[0];k=k[1];var m=b[e];h.xb&&h.xb["Content-Type"]||!h.fa||(h.xb=x({},h.xb,(g={},g["Content-Type"]= +"application/x-www-form-urlencoded",g)),h.fa="site-info="+be(h.fa));h.Ue=h.fa?"POST":"GET";h.Wb=oq(a,d,l);h.Ca.push(l);x(d.Y,h);g=""+m+(d.Oa&&d.Oa.Ti?"/1":"");var p=0;p=pq(a,g,h);return k(g,h).then(function(q){kb(a,{name:"requestSuccess",data:{body:q,requestId:p}});return{$c:q,Ig:e}})["catch"](function(q){kb(a,{name:"requestFail",data:{error:q,requestId:p}});var r=f+1>=c.length,t=e+1>=b.length;r&&t&&db(q);return Ej(a,c,b,d,!t&&r?e+1:e,r?0:f+1)})}function oq(a,c,b){var d=x({},c.G);a=ha(a);c.H&&(d["browser-info"]= +Ca(c.H.l()).C("st",a(ue)).za());!d.t&&(c=c.Bb)&&(c.C("ti",b),d.t=c.za());return d}function rb(a){a=ha(a);return Math.round(a(sg)/50)}function sg(a){var c=a.ya,b=c[1];a=c[0]&&b?b():aa(a)-a.yi;return Math.round(a)}function ue(a){return Math.round(aa(a)/1E3)}function ib(a){return Math.floor(aa(a)/1E3/60)}function aa(a){var c=a.Qe;return 0!==c?c:tg(a.l,a.ya)}function Uf(a){var c=ia(a),b=Fj(a),d={l:a,Qe:0,ya:b,yi:tg(a,b)},e=b[1];b[0]&&e||c.D(a,["beforeunload","unload"],function(){0===d.Qe&&(d.Qe=tg(a, +d.ya))});return Ba(d)}function qq(a){return(10>a?"0":"")+a}function wi(a,c,b){function d(){f=0;g&&(g=!1,f=W(a,d,b),e.O(h))}var e=qd(a),f,g=!1,h;c.D(function(k){g=!0;h=k;f||d();return B});return e}function rq(a,c){return a.clearInterval(c)}function sq(a,c,b,d){return a.setInterval(C(a,"i.err."+(d||"def"),c),b)}function W(a,c,b,d){return se(a,C(a,"d.err."+(d||"def"),c),b)}function fd(a){var c={};return{D:function(b,d){z(function(e){n(c,e)||(c[e]=qd(a));c[e].D(d)},b);return this},na:function(b,d){z(function(e){n(c, +e)&&c[e].na(d)},b);return this},O:function(b,d){return n(c,b)?C(a,"e."+d,c[b].O)(d):[]}}}function qd(a){var c=[],b={};b.Bk=c;b.D=u(oa("push",c),v(b,O));b.na=u(Rb(Mb(a))(c),Rb(oa("splice",c))(1),v(b,O));b.O=u(O,Rb(ja),tq(c));return b}function E(a,c,b){return function(){return C(arguments[0],a,c,b).apply(this,arguments)}}function C(a,c,b,d,e){var f=db,g=b||f;return function(){var h=d;try{h=g.apply(e||null,arguments)}catch(k){ke(a,c,k)}return h}}function tg(a,c){var b=c||Fj(a),d=b[0];b=b[1];return!isNaN(d)&& +S(b)?Math.round(b()+d):a.Date.now?a.Date.now():(new a.Date).getTime()}function Fj(a){a=ji(a);var c=n(a,"timing.navigationStart"),b=n(a,"now");b&&(b=D(b,a));return[c,b]}function ji(a){return n(a,"performance")||n(a,"webkitPerformance")}function ke(a,c,b){var d="u.a.e",e="";b&&("object"===typeof b?(d=b.message,e="string"===typeof b.stack&&b.stack.replace(/\n/g,"\\n")||"n.s.e.s"):d=""+b);uq(d)||Oa(u(oa("indexOf",d),la(-1),Gb),vq)||wq(d)&&.1<=a.Math.random()||z(u(O,Mc(["jserrs",d,c,e]),ja),Gj)}function Te(){var a= +Aa(arguments);return db(Sa(a))}function Sa(a){var c="";ea(a)?c=L(".",a):Ea(a)&&(c=a);return Kc("err.kn("+ra.fb+")"+c)}function xq(a){this.message=a}function Hj(a,c,b,d,e){var f=a.addEventListener&&a.removeEventListener,g=!f&&a.attachEvent&&a.detachEvent;if(f||g)if(e=e?f?"removeEventListener":"detachEvent":f?"addEventListener":"attachEvent",f)a[e](c,b,d);else a[e]("on"+c,b)}function pq(a,c,b){var d=Ua(a);kb(a,{name:"request",data:{url:c,requestId:d,Lk:b}});return d}function kb(a,c){var b=c.ea;if(b){var d= +b.split(":");b=d[1];d=Ij(wh(d[0]));if("1"===b||d)return}b=yq(a);1E3===b.length&&b.shift();b.push(c)}function vd(a){return a?u(ya,ud(function(c,b){var d=b[0],e=b[1];V(e)||na(e)||c.push(d+"="+be(e));return c},[]),ad("&"))(a):""}function zq(a){return a?u(fb(function(c){c=c.split("=");var b=c[1];return[c[0],na(b)?void 0:ij(b)]}),ud(function(c,b){c[b[0]]=b[1];return c},{}))(a.split("&")):{}}function ij(a){var c="";try{c=decodeURIComponent(a)}catch(b){}return c}function be(a){try{return encodeURIComponent(a)}catch(c){}a= +L("",Y(function(c){return 55296>=c.charCodeAt(0)},a.split("")));return encodeURIComponent(a)}function je(a,c,b){return A(u(tc,Mc([a,b]),ja),Jj[c]||[])}function Kj(a,c,b,d){a[c]||(a[c]=[]);b&&!na(d)&&Lj(a[c],b,d)}function Lj(a,c,b){for(var d=[c,b],e=-1E4,f=0;f=e){a.splice(f,0,d);return}e=g}a.push(d)}function cc(a){z(function(c){var b=c[1];Ue[c[0]]={ia:b.ia,Za:b.Za}},ya(a))}function tl(a,c,b,d,e){var f="object"===typeof a?a:{id:a, +da:d,oc:e,ba:b};a=M(function(g,h){var k=h[1],l=k.Za;k=f[k.ia];g[h[0]]=l?l(k):k;return g},{},ya(c));Mj(a,a.ba||{});return a}function Aq(a,c){return M(function(b,d){b[c[d[0]].ia]=d[1];return b},{},ya(a))}function Nj(a){a=N(a);return dc[a]&&dc[a].Hj}function Mj(a,c){var b=N(a),d=n(c,"__ym.turbo_page"),e=n(c,"__ym.turbo_page_id");dc[b]||(dc[b]={});if(d||e)dc[b].Hj=d,dc[b].Ij=e}function Oj(a){return Be(a)||od(a)||/mobile/i.test(sb(a))||!V(n(a,"orientation"))}function cf(a,c){if(Gd(a)&&c){var b=sb(a).match(Bq); +if(b&&b.length)return+b[1]>=c}return!1}function df(a,c){var b=sb(a);return b&&(b=b.match(Cq))&&1=c:!1}function og(a){return H("prerender",A(v(n(a,"document"),n),["webkitVisibilityState","visibilityState"]))}function Ua(a,c,b){var d=V(b);V(c)&&d?(d=1,c=1073741824):d?d=1:(d=c,c=b);return a.Math.floor(a.Math.random()*(c-d))+d}function wh(a){try{return parseInt(a,10)}catch(c){return null}}function ae(a,c){return a.isFinite(c)&&!a.isNaN(c)&&"[object Number]"===ug(c)}function Dq(a){for(var c= +[],b=a.length-1;0<=b;--b)c[a.length-1-b]=a[b];return c}function La(a,c){z(u(O,oa("push",a)),c);return a}function vg(a,c){return Array.prototype.sort.call(c,a)}function zd(a){return a.splice(0,a.length)}function qa(a){return a?ea(a)?a:Ce?Ce(a):"number"===typeof a.length&&0<=a.length?Pj(a):[]:[]}function wg(a,c,b){return b?a:c}function Eq(a,c){if(!Gd(a))return!0;try{c.call({0:!0,length:-Math.pow(2,32)+1},function(){throw 1;})}catch(b){return!1}return!0}function Fq(a,c){for(var b="",d=0;da.length)return c;M(function(b,d,e){if(e=== +a.length-1)return b;e===a.length-2?b[d]=a[e+1]:b[d]||(b[d]={});return b[d]},c,a);return c}function n(a,c){return a?M(function(b,d){if(na(b))return b;try{return b[d]}catch(e){}return null},a,c.split(".")):null}function Jd(a){a=a.Ya=a.Ya||{};var c=a._metrika=a._metrika||{};return{Ra:function(b,d){xg.call(c,b)||(c[b]=d);return this},C:function(b,d){c[b]=d;return this},o:function(b,d){var e=c[b];return xg.call(c,b)||V(d)?e:d}}}function wd(a,c){return na(a)?!1:xg.call(a,c)}function w(a,c){var b=[],d=[]; +var e=c?c:O;return function(){var f=Aa(arguments),g=e.apply(void 0,f),h=Uj(g,d);if(-1!==h)return b[h];f=a.apply(void 0,f);b.push(f);d.push(g);return f}}function Mb(a){if(yg)return yg;var c=!1;try{c=[].indexOf&&0===[void 0].indexOf(void 0)}catch(d){}var b=a.Array&&a.Array.prototype&&Ka(a.Array.prototype.indexOf,"indexOf");return yg=a=c&&b?function(d,e){return b.call(e,d)}:Lq}function Lq(a,c){for(var b=0;bd)break}b=-1}return b}function Ea(a){return"string"===typeof a}function ug(a){return Object.prototype.toString.call(a)}function Aa(a){if(Ce)try{return Ce(a)}catch(c){}return Pj(a)}function Pj(a){for(var c=a.length,b=[],d=0;d35+a.length)return!1;for(var e=d-13,f=0,g=8;ge)break}return!1} +function B(){}function Gb(a){return!a}function wb(a,c){return c}function O(a){return a}function Ja(a,c){function b(){this.constructor=a}zg(a,c);a.prototype=null===c?Object.create(c):(b.prototype=c.prototype,new b)}function wa(){for(var a=0,c=0,b=arguments.length;c>8,g&=255,g^=h),d+=g,e+=d;while(--f);d=(d&255)+(d>>8);e=(e&255)+(e>>8)}a=(d&255)+(d>>8)<<8|(e&255)+(e>>8);return 65535===a?0:a}function qb(a,c){if(!c)return null;try{return a.JSON.parse(c)}catch(b){return null}}function kc(a){a=""+a;for(var c=2166136261,b=a.length,d=0;d>>0}function gj(a,c,b,d,e){void 0===e&&(e=!1);return cg(a,c,"",-100,b,d,e)}function Bc(a,c,b){void 0===c&&(c="_ym_");void 0===b&&(b="");var d=Sq(a),e=1===(d||"").split(".").length?d:"."+d,f=b?"_"+b:"";return{uc:function(g,h,k){gj(a,""+c+g+f,h||e,k);return this},o:function(g){return fe(a,""+c+g+f)},C:function(g,h,k,l,m){cg(a,""+c+g+f,h,k,l||e,m);return this}}}function ul(a,c,b,d){var e=ak[b];return e?function(){var f=Aa(arguments);try{var g=d.apply(void 0, +f);var h=I(a);h.Ra("mt",{});var k=h.o("mt"),l=k[e];k[e]=l?l+1:1}catch(m){db(m)}return g}:d}function Hc(a,c){var b=Tq(a);return b?(b.href=c,{protocol:b.protocol,host:b.host,port:b.port,hostname:b.hostname,hash:b.hash,search:b.search,query:b.search.replace(/^\?/,""),pathname:b.pathname||"/",path:(b.pathname||"/")+b.search,href:b.href}):{}}function bk(a){return(a=T(a).hash.split("#")[1])?a.split("?")[0]:""}function Uq(a,c){var b=bk(a);ck=sq(a,function(){var d=bk(a);d!==b&&(c(),b=d)},200,"t.h");return D(rq, +null,a,ck)}function Vq(a,c,b){var d,e,f=c.da,g=c.Te,h=c.Ac,k=I(a),l=Ca((d={},d.wh=1,d.pv=1,d));Ve(f)&&a.Yg&&a.Yg.Zj&&l.C("ad","1");g&&l.C("ut","1");f=k.o("lastReferrer");d=T(a).href;h={G:(e={},e["page-url"]=h||d,e["page-ref"]=f,e),H:l};b(h,c)["catch"](C(a,"g.s"));k.C("lastReferrer",d)}function Wq(a,c,b){function d(){ma(a,h);g(!1)}function e(){k=!0;g(!1);c()}function f(){ma(a,h);if(k)g(!1);else{var P=Math.max(0,b-(q?r:r+l(aa)-t));P?h=W(a,e,P,"u.t.d.c"):e()}}function g(P){z(function(X){var xa=X[0], +sa=X[1];X=X[2];P?y.D(xa,sa,X):y.dc(xa,sa,X)},G)}var h=0,k=!1;if(kg(a))return h=W(a,c,b,"u.t.d"),d;var l=ha(a),m=!1,p=!1,q=!0,r=0,t=l(aa),y=ia(a),G=[[a,["blur"],function(){q=m=p=!0;r+=l(aa)-t;t=l(aa);f()}],[a,["focus"],function(){m||p||(r=0);t=l(aa);m=p=!0;q=!1;f()}],[a.document,["click","mousemove","keydown","scroll"],function(){p||(m=!0,q=!1,p=!0,f())}]];g(!0);f();return d}function Se(a,c,b,d){return function(){if(Ga(a,c)){var e=Aa(arguments);return d.apply(void 0,e)}}}function mb(a,c){a=[a[0]>>> +16,a[0]&65535,a[1]>>>16,a[1]&65535];c=[c[0]>>>16,c[0]&65535,c[1]>>>16,c[1]&65535];var b=[0,0,0,0];b[3]+=a[3]*c[3];b[2]+=b[3]>>>16;b[3]&=65535;b[2]+=a[2]*c[3];b[1]+=b[2]>>>16;b[2]&=65535;b[2]+=a[3]*c[2];b[1]+=b[2]>>>16;b[2]&=65535;b[1]+=a[1]*c[3];b[0]+=b[1]>>>16;b[1]&=65535;b[1]+=a[2]*c[2];b[0]+=b[1]>>>16;b[1]&=65535;b[1]+=a[3]*c[1];b[0]+=b[1]>>>16;b[1]&=65535;b[0]+=a[0]*c[3]+a[1]*c[2]+a[2]*c[1]+a[3]*c[0];b[0]&=65535;return[b[0]<<16|b[1],b[2]<<16|b[3]]}function ec(a,c){a=[a[0]>>>16,a[0]&65535,a[1]>>> +16,a[1]&65535];c=[c[0]>>>16,c[0]&65535,c[1]>>>16,c[1]&65535];var b=[0,0,0,0];b[3]+=a[3]+c[3];b[2]+=b[3]>>>16;b[3]&=65535;b[2]+=a[2]+c[2];b[1]+=b[2]>>>16;b[2]&=65535;b[1]+=a[1]+c[1];b[0]+=b[1]>>>16;b[1]&=65535;b[0]+=a[0]+c[0];b[0]&=65535;return[b[0]<<16|b[1],b[2]<<16|b[3]]}function Oc(a,c){c%=64;if(32===c)return[a[1],a[0]];if(32>c)return[a[0]<>>32-c,a[1]<>>32-c];c-=32;return[a[1]<>>32-c,a[0]<>>32-c]}function hb(a,c){c%=64;return 0===c?a:32>c?[a[0]<>>32-c,a[1]<< +c]:[a[1]<>>1]);a=mb(a,[4283543511,3981806797]);a=ta(a,[0,a[0]>>>1]);a=mb(a,[3301882366,444984403]);return a=ta(a,[0,a[0]>>>1])}function Xq(a,c){void 0===c&&(c=210);var b=a||"",d=c||0,e=b.length-b.length%16;d={R:[0,d],T:[0,d]};for(var f=0;f>>0).toString(16)).slice(-8)+("00000000"+(d.R[1]>>> +0).toString(16)).slice(-8)+("00000000"+(d.T[0]>>>0).toString(16)).slice(-8)+("00000000"+(d.T[1]>>>0).toString(16)).slice(-8)}function Ld(a,c,b){var d=c.getAttribute("itemtype");b=ub('[itemprop~="'+b+'"]',c);return d?Y(function(e){return e.parentNode&&$b("[itemtype]",a,e.parentNode)===c},b):b}function ab(a,c,b){return(a=Ld(a,c,b))&&a.length?a[0]:null}function Ya(a){if(!a)return"";a=ea(a)?a:[a];return a.length?a[0].getAttribute("content")||Qb(a[0]):""}function ek(a){return a?a.attributes&&a.getAttribute("datetime")? +a.getAttribute("datetime"):Ya(a):""}function kd(a,c,b){a=c&&(lc(c.className,"ym-disable-keys")||lc(c.className,"-metrika-nokeys"));return b&&c?a||!!cq(["ym-disable-keys","-metrika-nokeys"],c).length:a}function sf(a,c){return xe(c)?"password"===c.type||c.name&&H(c.name.toLowerCase(),fk)||c.id&&H(c.id.toLowerCase(),fk):!1}function gk(a,c){var b=Math.max(0,Math.min(c,65535));La(a,[b>>8,b&255])}function Jb(a,c){La(a,[c&255])}function gb(a,c,b){return-1!==Mb(a)(b,Yq)?(Jb(c,b),!1):!0}function R(a,c){for(var b= +Math.max(0,c|0);127>=7;La(a,[b])}function Dg(a,c){R(a,c.length);for(var b=0;b=d)return null;if(c.attributes)for(var e=c;e;){if(e.attributes.ek)return null;e=e.parentElement}e= +64;var f=ve(a,c),g=f&&f[Va]?f[Va]:0;0>g&&(g=0);b=(b||"").toUpperCase();var h=ar()[b];h||(e|=2);var k=oj(a,c);k||(e|=4);var l=xf(a,c);(f=f?xf(a,f):null)&&l[0]===f[0]&&l[1]===f[1]&&l[2]===f[2]&&l[3]===f[3]&&(e|=8);oc[d].Xf=l[0]+"x"+l[1];oc[d].size=l[2]+"x"+l[3];c.id&&"string"===typeof c.id&&(e|=32);f=[];if(gb(a,f,1))return null;R(f,d);Jb(f,e);R(f,g);h?Jb(f,h):Eg(f,b);k&&R(f,k);e&8||(R(f,l[0]),R(f,l[1]),R(f,l[2]),R(f,l[3]));e&32&&Eg(f,c.id);Jb(f,0);return f}function br(a,c){var b=c[Va];if(!b||0>b||!vf(c)|| +!c.form||Rh(a,c.form))return[];var d=qj(a,c.form);if(0>d)return[];if(xe(c)){var e={text:0,color:0,tc:0,lk:0,"datetime-local":0,email:0,Vf:0,Ik:0,search:0,Ok:0,time:0,url:0,month:0,Rk:0,password:2,Hk:3,hk:4,file:6,image:7};e=e[c.type]}else{e={bk:1,ck:5};var f=Ia(c);e=V(f)?"":e[f]}if("number"!==typeof e)return[];f=-1;for(var g=c.form.elements,h=g.length,k=0,l=0;kf)return[];g=[];if(gb(a,g,7))return[];R(g,b);R(g,d);R(g,e);Dg(g,c.name||""); +R(g,f);return g}function cr(a,c,b){var d=qj(a,b);if(0>d)return[];var e=b.elements,f=e.length;b=[];for(var g=0;gm?c=[]:(l=(k={},k.mousemove=2,k.click=32,k.dblclick= +33,k.mousedown=4,k.mouseup=30,k.touch=12,k)[f])?(k=[],d=jg(c,d),gb(c,k,l)?c=[]:(R(k,a),R(k,m),R(k,Math.max(0,h[0]-d.left)),R(k,Math.max(0,h[1]-d.top)),/^mouse(up|down)|click$/.test(f)&&(c=g||b,Jb(k,2>c?1:c===(g?2:4)?4:2)),c=k)):c=[]):c=[];return wa(e,c)}function gr(a){var c=null,b=a.l,d=b.document;if(b.getSelection){d=void 0;try{d=b.getSelection()}catch(g){return[]}if(Ta(d))return[];var e=""+d;c=d.anchorNode}else d.selection&&d.selection.createRange&&(d=d.selection.createRange(),e=d.text,c=d.parentElement()); +if("string"!==typeof e)return[];try{for(;c&&1!==c.nodeType;)c=c.parentNode}catch(g){return[]}if(!c)return[];d=id(b,c).tb||kd(b,c,!0);c=c.getElementsByTagName("*");for(var f=0;f=d.length?(b=d,d=""):200>=d.length?(b=d.substr(0,100),d=d.substr(100)):(b=d.substr(0,97),d=d.substr(d.length-97)),c=[],gb(a.l,c,29)?a=[]:(R(c,e),Dg(c,b),Dg(c,d),a=c),a}function hr(a){return wa(Ge(a), +gr(a)||[])}function lk(a){return(a.shiftKey?2:0)|(a.ctrlKey?4:0)|(a.altKey?1:0)|(a.metaKey?8:0)|(a.ctrlKey||a.altKey?16:0)}function mk(a){var c=[];Gg||(Gg=!0,Fg&&c.push.apply(c,Zq(a.l,rb(a.l))),Hb(a.l,function(){Gg=!1},"fv.c"));return c}function nk(a,c,b,d){var e=vc(c);if(!e||zf(a,e))return[];var f=de(e),g=yf(e);c=id(a,e).tb;var h=I(a);if(!f&&(g&&h.o("isEU")||kd(a,e)))a=[];else{f=nc(a,e);h=rb(a);g=[];if(gb(a,g,38))a=[];else{R(g,h);gk(g,b);Jb(g,d);a=e[Va];if(!a||0>a)a=0;R(g,a);Jb(g,c?1:0);a=g}a=wa(f, +a)}return a}function ir(a){var c=a.l,b=a.ra,d=b.keyCode,e=lk(b),f=[],g=v(f,La);if({3:1,8:1,9:1,13:1,16:1,17:1,18:1,19:1,20:1,27:1,33:1,34:1,35:1,36:1,37:1,38:1,39:1,40:1,45:1,46:1,91:1,92:1,93:1,106:1,110:1,111:1,144:1,145:1}[d]||112<=d&&123>=d||96<=d&&105>=d||e&16)19===d&&4===(e&-17)&&(d=144),g(nk(c,b,d,e|16)),Hg=!1,Hb(c,function(){Hg=!0},"fv.kd"),!(67===d&&e&4)||e&1||e&2||g(mk(a));return f}function jr(a){var c=a.l;a=a.ra;var b=[];Hg&&!Ig&&0!==a.which&&(b.push.apply(b,nk(c,a,a.charCode||a.keyCode, +lk(a))),Ig=!0,Hb(c,function(){Ig=!1},"fv.kp"));return b}function ok(a){var c=a.l,b=vc(a.ra);if(!b||Rh(c,b))return[];var d=[];if("FORM"===b.nodeName){for(var e=b.elements,f=0;fd&&2>=k.browserInfo.rqnl&&(k.d=1,h={protocol:k.protocol,host:k.host,Pa:k.resource,ij:k.postParams,ba:k.params,hh:k.browserInfo,rk:k.ghid,time:k.time,Xb:Ha(h),uh:k.counterId, +da:k.counterType},k.telemetry&&(h.Bb=k.telemetry),f.push(h));return f},[],ya(b))}),Pp=/^[a-z][\w.+-]+:/i,Ik=w(td),Qg,Fb=[[ng,1],[te,2],[Pb(),3],[$f,4]],Wf=[],xb=v(Fb,Lj);xb(Xf,100);var Ob=(Qg={},Qg.h=Fb,Qg),ba=v(Ob,Kj);xb(function(a,c){return{ca:function(b,d){var e=(b.V||{}).ba,f=b.Y;f=void 0===f?{}:f;if(e&&(Mj(c,e),!f.fa&&b.H&&b.G)){var g=jb(a,e),h=Ik(a),k=b.H.o("pv");g&&!b.G.nohit&&(kb(a,{ea:N(c),name:"params",data:{Pk:e}}),k?encodeURIComponent(g).length>ra.Rg?h.push([b.H,e]):b.G["site-info"]=g: +(f.fa=g,b.Y=f,b.Oa||(b.Oa={}),b.Oa.Ti=!0))}d()},Ba:function(b,d){var e=Ik(a),f=Ga(a,c),g=f&&f.params;g&&(f=Y(u(tc,la(b.H)),e),z(function(h){g(h[1]);h=He(a)(h,e);e.splice(h,1)},f));d()}}},-1);Ob["1"]=Y(u(tc,la($f),Gb),Fb);xb(function(a){return{ca:function(c,b){var d=c.G;if(!c.H||!d)return b();var e=d["page-ref"],f=d["page-url"];e&&f!==e?d["page-ref"]=$i(a,e):delete d["page-ref"];d["page-url"]=$i(a,f).slice(0,ra.Tg);return b()}}},-100);ba("r",te,1);ba("r",function(a){return{ca:function(c,b){var d=c.H, +e=void 0===d?Ca():d,f=c.V.Xb,g=Bd(a);d=e.o("rqnl",0)+1;e.C("rqnl",d);if(e=n(g,L(".",[f,"browserInfo"])))e.rqnl=d,Yf(a);b()},Ba:function(c,b){bj(a,c);b()}}},2);var Lp=/[^a-z0-9.:-]/,Rg,ac=[],Sg={};ac.push(Wi,0,Nb,Vf,Ad);var Jk=[Nb];Jk.push(Vf);var Kk=Eb(Jk),Tc=Eb([Ad]),$r=Eb([Wi,Ad]),Le=Eb([0,Nb,Vf,Ad]),ua=(Rg={},Rg.h=Kk,Rg);ua.r=Le;ua["1"]=Le;var bd=w(function(a,c){var b=Sg["*"]?Sg["*"]:c&&Sg[c];b||(b=c?ua[c]||[]:ac);b=M(function(d,e,f){(e=e&&e(a))&&d.push([f,e]);return d},[],b);b.length||Te();return b}, +wb),Tg,as=D(K.reject,K,Sa()),va=(Tg={},Tg.h=Xa,Tg);va["1"]=Xa;va.r=Xa;var za=E("g.sen",function(a,c,b){var d=bd(a,c);b=b?Op(a,c,b):[];var e=va[c],f=e?e(a,d,b):Xa(a,d,b);return function(){var g=Aa(arguments),h=g[0];g=g.slice(1);var k=h.Y;h=x(h,{Y:x(void 0===k?{}:k,{Ca:[c]})});return f.apply(void 0,wa([h],g))}},as),Ep=ka(function(a,c){if(!c[a]){var b,d=new K(function(e){b=e});c[a]={eg:b,bb:d,fg:!1}}return c[a].bb}),Vi=w(u(wc,Ba)),gi=u(U("settings.pcs"),la("1")),Od=w(function(a,c){var b=n(a,"console"), +d=n(b,"log");d=De("log",d)?D(d,b):B;var e=n(b,"warn");e=De("warn",e)?D(e,b):d;var f=n(b,"error");b=De("error",f)?D(f,b):d;return{log:Lc(a,"log",c,d),error:Lc(a,"error",c,b),warn:Lc(a,"warn",c,e)}}),bs=E("dc.init",function(a,c){function b(k){for(var l=[],m=1;mMath.random();k.C("lastHit",Yb);Yb=Ca((xa={},xa.nb=1,xa.cl=t,xa.ar=1,xa));xa=xd(c);xa={G:(sa={},sa["page-url"]=xa.url||T(a).href,sa),H:Yb,V:{force:G}};sa=Od(a,N(c)).warn;!P.callback&&P.ctx&&sa('"callback" argument missing');(sa=G||X||sd)||(sa=a.location.href,X=a.document.referrer,sa=!(sa&&X?Oi(sa)===Oi(X):!sa&&!X));if(sa)return sa=g(xa,c),Jc(a,"l.o.l",sa,P.callback,P.ctx)}return null}}var e,f,g=za(a,"n", +c),h=N(c),k=Rc(a,c.id),l=v(v(h,Me(a)),u(ja,U("accurateTrackBounce"))),m=v((e={},e.accurateTrackBounce=!0,e),re(a,h)),p=ha(a),q=p(aa),r=!1,t=0,y;pa(a,c,function(G){t=G.Mh-q});c.$e&&b(c.$e);e=(f={},f.notBounce=d(!0),f.u=y,f);e.accurateTrackBounce=b;return e}),rp=ka(pc)("(ym-disable-clickmap|ym-clickmap-ignore)"),ms=E("clm.p",function(a,c){if(Zc(a))return B;var b=za(a,"m",c),d=N(c),e=ha(a),f=e(aa),g=v(v(d,Me(a)),u(ja,U("clickmap"))),h,k=null;d=C(a,"clm.p.c",function(l){var m=g();if(m){var p=I(a),q=p.o("cls", +{kc:0,x:0,y:0});p.C("cls",{kc:q.kc+1,x:q.x+l.clientX,y:q.y+l.clientY});p="object"===typeof m?m:{};q=p.filter;m=p.isTrackHash||!1;var r=A(function(y){return(""+y).toUpperCase()},p.ignoreTags||[]);V(h)&&(h=p.quota||null);var t=!!p.quota;l={element:sp(a,l),position:Li(a,l),button:tp(l),time:e(aa)};p=T(a).href;if(qp(a,l,k,r,q)){if(t){if(!h)return;--h}r=we(a,l.element);q=r[0];r=r[1];t=jg(a,l.element);q=["rn",Ua(a),"x",Math.floor(65535*(l.position.x-t.left)/(q||1)),"y",Math.floor(65535*(l.position.y-t.top)/ +(r||1)),"t",Math.floor((l.time-f)/100),"p",ig(a,l.element),"X",l.position.x,"Y",l.position.y];q=L(":",q);m&&(q+=":wh:1");pp(a,p,q,b,c);k=l}}});return ia(a).D(n(a,"document"),["click"],d)}),ns=E("trigger.in",function(a,c){c.Eg&&Hb(a,F([a,"yacounter"+c.id+"inited"],gq),"t.i")}),os=E("c.m.p",function(a,c){var b,d=N(c);return b={},b.clickmap=v(re(a,d),op),b}),oi=v("form",$b),cp=v("form",ub),np=w(function(a,c){return pa(a,c,U("settings.form_goals"))},wb),ps=v(!0,Ii),qs=E("s.f.i",function(a,c){var b=[]; +ia(a).D(a,["click"],C(a,"s.f.c",F([a,c,b],mp)));ia(a).D(a,["submit"],C(a,"s.f.e",u(U("target"),F([a,c,b],ps))));Ji(a,c,"Form goal. Counter "+c.id+". Init.")}),rs=E("s.f.i",function(a,c){return pa(a,c,function(b){if(n(b,"settings.button_goals")||-1!==T(a).href.indexOf("yagoalsbuttons=1"))ia(a).D(a,["click"],C(a,"c.t.c",u(U("target"),F([a,c],Se(a,c,"",lp))))),Db(a,c,"Button goal. Counter "+c.id+". Init.")()})}),Fi=w(function(a){return L("[^\\d<>]*",a.split(""))}),km=w(function(a){return new RegExp(Fi(a), +"g")}),ip=/\S/,yi=v(["style","display:inline;margin:0;padding:0;font-size:inherit;color:inherit;line-height:inherit"],Ac),Nk=w(function(a){return Zc(a)||!Dd(a)}),ss=E("phc.h",function(a,c){return Oj(a)||Nk(a)?null:pa(a,c,function(b){if(!n(b,"settings.phchange")){var d=Bc(a,"").o("yaHidePhones");d=d?qb(a,d):"";(b=n(b,"settings.phhide")||d)&&qi(a,c,b)}})}),Ok=w(function(a){a=T(a);a=zq(a.search.substring(1));a["_ym_status-check"]=a["_ym_status-check"]||"";a._ym_lang=a._ym_lang||"ru";return a}),ti=u(Ok, +U("_ym_status-check"),Ha),ts=u(Ok,U("_ym_lang")),si=Wa(/^https:\/\/(yastatic\.net\/s3\/metrika|s3\.mds\.yandex\.net\/internal-metrika-betas|[\w-]+\.dev\.webvisor\.com|[\w-]+\.dev\.metrika\.yandex\.ru)\/(\w|-|\/|(\.)(?!\.))+\.js$/),ep=["form","button","phone","status"],Vg=[],bp=w(function(a,c,b){z(u(Mc([a,c,b]),ja),Vg);if(b.inline){c=ri(b);var d=b.data;b=b.id;ni(a,c,void 0===b?"":b,void 0===d?"":d)}else b.resource&&si(b.resource)&&(a._ym__postMessageEvent=c,a._ym__inpageMode=b.inpageMode,a._ym__initMessage= +b.initMessage,fp(a,b.resource))},function(a,c,b){return b.id}),us=E("cs.init",function(a,c){var b,d=ti(a);if(d&&c.id===d&&"0"===c.da){var e=ri((b={},b.lang=ts(a),b.fileId="status",b));W(a,F([a,e,""+d],ni),0,"cs")}}),vs=E("suid.int",function(a,c){var b;return b={},b.setUserID=function(d,e,f){if(Ea(d)||ae(a,d)){var g=Ga(a,c);d=Ac(["__ym","user_id",d]);g.params(d,e||B,f)}else Od(a,N(c)).error("Incorrect user ID")},b}),Ic={position:"absolute"},mi={position:"fixed"},Kf={borderRadius:"50%"},ws=u(U("settings.sm"), +la(1)),xs=vb("siteStatistics",function(a,c){if(!Oj(a))return Zb(a)(Ra(B,F([a,c,function(b){return ws(b)?$o(a,c.id):B}],pa)))}),ys=E("up.int",function(a,c){var b;return b={},b.userParams=C(a,"up.c",function(d,e,f){var g,h=Ga(a,c),k=yd(a,N(c)).warn;h?Ma(d)?(d=(g={},g.__ymu=d,g),(g=h.params)&&g(d,e||B,f)):k("Wrong user params"):k("No counter instance found")}),b}),zs=/[\*\.\?\(\)]/g,As=w(function(a,c,b){try{var d=b.replace("\\s"," ").replace(zs,"");yd(a,"").warn('Function "'+d+'" has been overridden, this may cause issues with Metrika counter')}catch(e){}}, +wb),Bs=E("r.nn",function(a){Cf(a).isEnabled&&me(a,Ag,function(c){c.xa.D(function(b){As(a,b[1],b[0]);Ag.splice(100)})})}),Cs=E("e.a.p",function(a,c){var b,d=Ga(a,c);d=F([u(O,Ba(!0)),Y(Boolean,A(v(d,n),["clickmap","trackLinks","accurateTrackBounce"]))],A);c.Ch&&d();return b={},b.enableAll=d,b}),yb,xc,Jf=(yb={},yb.transaction_id="id",yb.item_id="id",yb.item_name="name",yb.item_brand="brand",yb.promotion_name="coupon",yb.index="position",yb.item_variant="variant",yb.value="revenue",yb.item_category="category", +yb),mf=(xc={},xc.view_item="detail",xc.add_to_cart="add",xc.remove_from_cart="remove",xc.begin_checkout="checkout",xc.purchase="purchase",xc),Km="currencyCode add delete remove purchase checkout detail".split(" "),Fh=E("dl.w",function(a,c,b){function d(){var g=n(a,c);(e=ea(g)&&me(a,g,b))||(f=W(a,d,1E3,"ec.dl"))}var e,f=0;d();return function(){return ma(a,f)}}),Ds=v("add",le),Es=v("remove",le),Fs=v("detail",le),Gs=v("purchase",le),Hs=E("p.cd",function(a,c){if(od(a)||Be(a)){var b=Qa(a);if(na(b.o("jn"))){b.C("jn", +!1);var d=a.ik||pd(a)?function(){}:/./,e=Od(a,N(c));d.toString=function(){b.C("jn",!0);return"Yandex.Metrika counter is initialized"};e.log("%c%s","color: inherit",d)}}}),Wo=/([0-9\\.]+) Safari/,Is=/\sYptp\/\d\.(\d+)\s/,Pk=w(function(a){var c;a:{if((c=sb(a))&&(c=Is.exec(c))&&1=c||df(a,79)?!1:!Md(a)||Xe(a)}),Qk="monospace;sans-serif;serif;Andale Mono;Arial;Arial Black;Arial Hebrew;Arial MT;Arial Narrow;Arial Rounded MT Bold;Arial Unicode MS;Bitstream Vera Sans Mono;Book Antiqua;Bookman Old Style;Calibri;Cambria;Cambria Math;Century;Century Gothic;Century Schoolbook;Comic Sans;Comic Sans MS;Consolas;Courier;Courier New;Garamond;Geneva;Georgia;Helvetica;Helvetica Neue;Impact;Lucida Bright;Lucida Calligraphy;Lucida Console;Lucida Fax;LUCIDA GRANDE;Lucida Handwriting;Lucida Sans;Lucida Sans Typewriter;Lucida Sans Unicode;Microsoft Sans Serif;Monaco;Monotype Corsiva;MS Gothic;MS Outlook;MS PGothic;MS Reference Sans Serif;MS Sans Serif;MS Serif;MYRIAD;MYRIAD PRO;Palatino;Palatino Linotype;Segoe Print;Segoe Script;Segoe UI;Segoe UI Light;Segoe UI Semibold;Segoe UI Symbol;Tahoma;Times;Times New Roman;Times New Roman PS;Trebuchet MS;Verdana;Wingdings;Wingdings 2;Wingdings 3".split(";"), +Js=w(function(a){a=$a(a)("canvas");var c=n(a,"getContext");if(!c)return null;try{var b=D(c,a)("2d");b.font="72px mmmmmmmmmmlli";var d=b.measureText("mmmmmmmmmmlli").width;return function(e){b.font="72px "+e;return b.measureText("mmmmmmmmmmlli").width===d}}catch(e){return null}}),Rk=Ka(String.prototype.repeat,"repeat"),Ks=Rk?function(a,c){return Rk.call(a,c)}:Fq,Dh=v(!0,function(a,c,b,d){b=c.length&&(b-d.length)/c.length;if(0>=b)return d;c=Ks(c,b);return a?c+d:d+c}),Ee=[2277735313,289559509],Fe=[1291169091, +658871167],To={"*":"+","-":"/",dk:"=","+":"*","/":"-","=":"_"},yc=ka(function(a,c){return I(c).o(a,null)}),Ls=/(\?|&)turbo_uid=([\w\d]+)($|&)/,Ms=w(function(a,c){var b=Xb(a),d=T(a).search.match(Ls);return d&&2<=d.length?(d=d[2],c.rb||b.C("turbo_uid",d),d):(b=b.o("turbo_uid"))?b:""}),Po=[["domainLookupEnd","domainLookupStart"],["connectEnd","connectStart"],["responseStart","requestStart"],["responseEnd","responseStart"],["fetchStart","navigationStart"],["redirectEnd","redirectStart"],[function(a,c){return n(c, +"redirectCount")||n(a,"navigation.redirectCount")}],["domInteractive","domLoading"],["domContentLoadedEventEnd","domContentLoadedEventStart"],["domComplete","navigationStart"],["loadEventStart","navigationStart"],["loadEventEnd","loadEventStart"],["domContentLoadedEventStart","navigationStart"]],nb,Oo=[["domainLookupEnd","domainLookupStart"],["connectEnd","connectStart"],["responseStart","requestStart"],["responseEnd","responseStart"],["fetchStart"],["redirectEnd","redirectStart"],["redirectCount"], +["domInteractive","responseEnd"],["domContentLoadedEventEnd","domContentLoadedEventStart"],["domComplete"],["loadEventStart"],["loadEventEnd","loadEventStart"],["domContentLoadedEventStart"]],ki=(nb={},nb.responseEnd=1,nb.domInteractive=1,nb.domContentLoadedEventStart=1,nb.domContentLoadedEventEnd=1,nb.domComplete=1,nb.loadEventStart=1,nb.loadEventEnd=1,nb.unloadEventStart=1,nb.unloadEventEnd=1,nb.secureConnectionStart=1,nb),Ro=w(td),Lo=w(wc),Mo=w(function(a){var c=n(a,"webkitRequestFileSystem"); +if(S(c)&&!od(a))return(new K(D(c,a,0,0))).then(function(){var d=n(a,"navigator.storage")||{};return d.estimate?d.estimate():{}}).then(function(d){return(d=d.quota)&&12E7>d?!0:!1})["catch"](v(!0,O));if(Gd(a))return c=n(a,"navigator.serviceWorker"),K.resolve(V(c));c=n(a,"openDatabase");if(pd(a)&&S(c)){var b=!1;try{c(null,null,null,null)}catch(d){b=!0}return K.resolve(b)}return K.resolve(!n(a,"indexedDB")&&(n(a,"PointerEvent")||n(a,"MSPointerEvent")))}),Ns=w(function(a){return S(n(a,"yandex.getSiteUid"))? +a.yandex.getSiteUid():null}),Yd=w(ii,u(wb,N)),Os=E("pa.plgn",function(a,c){var b=Yd(a,c);b&&b.aa.D(["pluginInfo"],C(a,"c.plgn",function(){var d=I(a);d.C("cmc",d.o("cmc",0)+1);return Aq(c,Ue)}))}),ob,bb,Gl=(ob={},ob.am="com.am",ob.tr="com.tr",ob.ge="com.ge",ob.il="co.il",ob["\u0440\u0444"]="ru",ob["xn--p1ai"]="ru",ob["\u0443\u043a\u0440"]="ua",ob["xn--j1amh"]="ua",ob["\u0431\u0435\u043b"]="by",ob["xn--90ais"]="by",ob),Sk={"mc.edadeal.ru":/^([^/]+\.)?edadeal\.ru$/,"mc.yandexsport.ru":/^([^/]+\.)?yandexsport\.ru$/, +"mc.kinopoisk.ru":/^([^/]+\.)?kinopoisk\.ru$/},Hl=(bb={},bb.ka="ge",bb.ro="md",bb.tg="tj",bb.tk="tm",bb.et="ee",bb.hy="com.am",bb.he="co.li",bb.ky="kg",bb.uk="ua",bb.be="by",bb.tr="com.tr",bb.kk="kz",bb),Fo="ar:1:pv:1:v:"+ra.fb+":vf:"+Pc.version,Go=ra.Ua+"//"+rc+"/watch/"+ra.Og,Tk={},Ps=E("exps.int",function(a,c){var b;return b={},b.experiments=function(d,e,f){var g,h;void 0===e&&(e=B);if(d&&0f(aa)?K.resolve(g):za(a,"f",h)({H:Ca((b={},b.pv=1,b)),G:(d={},d["page-url"]=T(a).href,d["page-ref"]=a.document.referrer,d)},h).then(function(k){var l;k=(l={},l.time=f(aa),l.params=n(k,"settings"),l.bkParams=n(k,"userData"),l);e.C("wasSynced",k);return k})["catch"](C(a,"f.h"))}),Rs=ka(function(a,c){0===parseFloat(n(c, +"settings.c_recp"))&&(a.ce.C("ymoo"+a.ea,a.Bg(ib)),a.vd&&a.vd.destruct&&a.vd.destruct())}),vo=[[["'(-$&$&$'",30102,0],["'(-$&$&$'",29009,0]],[["oWdZ[nc[jh_YW$Yec",30103,1],["oWdZ[nc[jh_YW$Yec",29010,1]]],wo=[[["oWdZ[nc[jh_YW$Yec",30103,1]],[["oWdZ[nc[jh_YW$Yec",29010,1]]],hi={G:{t:'UV|L7,!"T[rwe&D_>ZIb\\aW#98Y.PC6k'}},fi={id:42822899,da:"0"},Ne,Co=(Ne={},Ne.s="p",Ne["8"]="i",Ne),zo=vb("csp",function(a,c){return za(a,"s",c)({},["https://ymetrica1.com/watch/3/1"])}),Wg="et w v z i u vf".split(" "), +oo={L:"stamp",M:"frameId",$:"meta",df:"base",Ff:"hasBase",af:"address",Gg:"ua",te:"prev",Sf:"namespace",Mc:"keystrokes",Lf:"isMeta",Nc:"modifier",wb:"pageWidth",vb:"pageHeight",vg:"startNode",jf:"endNode",Lg:"zoomFrom",Ng:"zoomTo",level:"level",duration:"duration",Ea:"i",Qc:"o",n:"n",r:"r",sc:"ct",Jb:"at",Tf:"nm",Uf:"ns",ne:"pa",qe:"pr",fe:"nx",Wa:"h",Ka:"changes",Ze:"a",cf:"b",od:"c",me:"op"},po=["attributes","attrs"],Oe=function(){function a(c){this.l=c}a.prototype.za=function(c){var b=ie(c);c= +A(D(this.Qa,this),b);return pf(jb(this.l,A(function(d,e){var f;return x({},b[e],(f={},f.data=d,f))},c)))};a.prototype.Qa=function(c){var b=c.data;"string"!==typeof b&&(b=jb(this.l,ie(c.data)));return b};a.prototype.Va=function(c){return encodeURIComponent(c).length};a.prototype.dd=function(c,b){for(var d=Math.ceil(c.length/b),e=[],f=0;f=b;b+=1){var d=Ya(Gc("h"+b,c));if(d)return d}};a.prototype.hi=function(){var c=Gc('[rel="canonical"]',this.root);if(c)return c.href};a.prototype.Df=function(){return 1};a.prototype.zc=function(){return[]};a.prototype.Lh=function(){var c=this,b=this.zc(),d=1;return M(function(e,f){var g=c.Da({element:f,type:c.Df(f)})||[];ea(g)||(g=[g]);g=M(function(h,k){var l=h.values,m=h.Gf;k&&k.chars>Xg[k.type]&&!H(k.id,m)?(l.push(k),m.push(k.id)):k&&k.chars<=Xg[k.type]&&c.th(k.id,k);return{values:l,Gf:m}},{values:[], +Gf:A(U("id"),e)},g).values;return e.concat(A(function(h){var k;h=x((k={index:d,qg:!1},k.involvedTime=0,k),h);d+=1;return h},g))},[],b)};return a}(),Uk=function(a){function c(){var b,d=null!==a&&a.apply(this,arguments)||this;d.id="j";d.Sd=!0;d.gf=L(",",['script[type="application/ld+json"]','script[type="application/json+ld"]','script[type="ld+json"]','script[type="json+ld"]']);d.Mb=(b={},b.id=function(e){var f=e.data["@id"];e=e.data.mainEntity||e.data.mainEntityOfPage;!f&&e&&(f=e["@id"]);return f}, +b.chars=function(e){return"string"===typeof e.data.text?e.data.text.length:Qb(this.La(e)).length},b.authors=function(e){var f=[];f=f.concat(this.yc(e.data,"author"));f=f.concat(this.yc(e.data.mainEntity,"author"));return f.concat(this.yc(e.data.mainEntityOfPage,"author"))},b.pageTitle=function(e){var f=e.data.headline||"";e.data.fk&&(f+=" "+e.data.alternativeHeadline);""===f&&(e.data.name?f=e.data.name:e.data.itemReviewed&&(f=e.data.itemReviewed));3===e.type&&e.data.parentItem&&(f=e.data.parentItem.text); +return f},b.updateDate=function(e){return e.data.dateModified||""},b.publicationDate=function(e){return e.data.datePublished||""},b.pageUrlCanonical=function(e){return e.data.url},b.topics=function(e){return this.yc(e.data,"about",["name","alternateName"])},b.rubric=function(e){var f=this,g=this.La(e);e=Y(Boolean,A(function(h){if(h=qb(f.l,Qb(h))){var k=f.zf(h);if(k)return M(function(l,m){return l?l:"BreadcrumbList"===m["@type"]?m:l},null,k);if("BreadcrumbList"===h["@type"])return h}return null},[e.element].concat(ub(this.gf, +document.body===g?document.documentElement:g))));return e.length&&(e=e[0].itemListElement,ea(e))?Y(Boolean,A(function(h){return Ma(h)&&h.item&&Ma(h.item)&&!f.l.isNaN(h.position)?{name:h.item.name||h.name,position:h.position}:null},e)):[]},b);return d}Ja(c,a);c.prototype.yc=function(b,d,e){void 0===e&&(e=["name"]);if(!b||!b[d])return[];b=ea(b[d])?b[d]:[b[d]];b=Y(O,A(function(f){return f?"string"===typeof f?f:M(function(g,h){return g||""+f[h]},"",e):null},b));return A(function(f){var g;return g={}, +g.name=f,g},b)};c.prototype.La=function(b){var d=b.element,e=b.data["@id"],f=b.data.url;b=null;f&&"string"===typeof f&&(b=this.qf(f));!b&&e&&"string"===typeof e&&(b=this.qf(e));b||(b=e=d.parentNode,!$b("head",this.l,d)&&e&&0!==Qb(e).length)||(b=this.l.document.body);return b};c.prototype.qf=function(b){try{var d=Hc(this.l,b).hash;if(d){var e=Gc(d,this.l.document.body);if(e)return e}}catch(f){}return null};c.prototype.oe=function(b){return this.Pe[b["@type"]]||1};c.prototype.Da=function(b){var d=this, +e=b.element;if(!b.data&&(b.data=qb(this.l,Qb(e)),!b.data||!/schema\.org/.test(b.data["@context"])&&!ea(b.data)))return null;var f=this.zf(b.data);if(f)return A(function(h){if(!H(h["@type"],d.zb["schema.org"]))return null;h={element:e,data:h,type:d.oe(h)};return a.prototype.Da.call(d,h)},f);if("QAPage"===b.data["@type"]){var g=b.data.mainEntity||b.data.mainEntityOfPage;if(!g)return null}"Question"===b.data["@type"]&&(g=b.data);return g?(b=ic(v(g,n),["acceptedAnswer","suggestedAnswer"]),A(function(h){var k; +if(!h||!H(h["@type"],d.zb["schema.org"]))return null;h={element:e,type:d.oe(h),data:x((k={},k.parentItem=g,k),h)};return a.prototype.Da.call(d,h)},b)):H(b.data["@type"],this.zb["schema.org"])?a.prototype.Da.call(this,x(b,{type:this.oe(b.data)})):null};c.prototype.zc=function(){return ub(this.gf,this.root)};c.prototype.zf=function(b){return ea(b)&&b||b&&ea(b["@graph"])&&b["@graph"]};return c}(Yg),Zg=function(a){function c(){var b,d=null!==a&&a.apply(this,arguments)||this;d.id="s";d.Sd=!0;d.Mj=oa("exec", +new RegExp("schema.org\\/("+L("|",ca(d.Pe))+")$"));d.Mb=(b={},b.id=function(e){e=e.element;var f=ab(this.l,e,"identifier");return f?Ya(f):(f=ab(this.l,e,"mainEntityOfPage"))&&f.getAttribute("itemid")?f.getAttribute("itemid"):null},b.chars=function(e){var f=0;e=e.element;for(var g=["articleBody","reviewBody","recipeInstructions","description","text"],h=0;hthis.Qg&&this.flush()};c.prototype.flush=function(){var b=this.buffer;b.length&&(this.send(b),this.buffer=[])};return c}(Xk),sn=/opera mini/i,Yk="first(-|\\.|_|\\s){0,2}name last(-|\\.|_|\\s){0,2}name zip postal phone address passport (bank|credit)(-|\\.|_|\\s){0,2}card card(-|\\.|_|\\s){0,2}number card(-|\\.|_|\\s){0,2}holder cvv card(-|\\.|_|\\s){0,2}exp card(-|\\.|_|\\s){0,2}name card.*month card.*year card.*month card.*year password email birth(-|\\.|_|\\s){0,2}(day|date) second(-|\\.|_|\\s){0,2}name third(-|\\.|_|\\s){0,2}name patronymic middle(-|\\.|_|\\s){0,2}name birth(-|\\.|_|\\s){0,2}place house street city flat state contact.*".split(" "), +hn=["email","tel"],qn=/ym-hide-content/,rn=/ym-show-content/,nn=/^[\w\u0410-\u042f\u0430-\u044f]$/,on=[65,90],pn=[97,122],ln="color radio checkbox date datetime-local email month number password range search tel text time url week".split(" "),jn=new RegExp("("+L("|",Yk)+")","i"),fk=["password","passwd","pswd"],kn=new RegExp("("+L("|",Yk.concat("\u0438\u043c\u044f \u0444\u0430\u043c\u0438\u043b\u0438\u044f \u043e\u0442\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u043d\u043e\u043c\u0435\u0440(-|\\.|_|\\s){0,2}\u043a\u0430\u0440\u0442\u044b \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f(-|\\.|_|\\s){0,2}\u043f\u043e\u0447\u0442\u0430 \u0434\u0430\u0442\u0430(-|\\.|_|\\s){0,2}\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u043c \u0443\u043b\u0438\u0446\u0430 \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0430 \u0433\u043e\u0440\u043e\u0434 \u043e\u0431\u043b\u0430\u0441\u0442\u044c".split(" ")))+ +")","i"),Va="metrikaId_"+Math.random(),oc={ud:0},ar=w(function(){var a;return a={},a.A=1,a.ABBR=2,a.ACRONYM=3,a.ADDRESS=4,a.APPLET=5,a.AREA=6,a.B=7,a.BASE=8,a.BASEFONT=9,a.BDO=10,a.BIG=11,a.BLOCKQUOTE=12,a.BODY=13,a.BR=14,a.BUTTON=15,a.CAPTION=16,a.CENTER=17,a.CITE=18,a.CODE=19,a.COL=20,a.COLGROUP=21,a.DD=22,a.DEL=23,a.DFN=24,a.DIR=25,a.DIV=26,a.DL=27,a.DT=28,a.EM=29,a.FIELDSET=30,a.FONT=31,a.FORM=32,a.FRAME=33,a.FRAMESET=34,a.H1=35,a.H2=36,a.H3=37,a.H4=38,a.H5=39,a.H6=40,a.HEAD=41,a.HR=42,a.HTML= +43,a.I=44,a.IFRAME=45,a.IMG=46,a.INPUT=47,a.INS=48,a.ISINDEX=49,a.KBD=50,a.LABEL=51,a.LEGEND=52,a.LI=53,a.LINK=54,a.MAP=55,a.MENU=56,a.META=57,a.NOFRAMES=58,a.NOSCRIPT=59,a.OBJECT=60,a.OL=61,a.OPTGROUP=62,a.OPTION=63,a.P=64,a.PARAM=65,a.PRE=66,a.Q=67,a.S=68,a.SAMP=69,a.SCRIPT=70,a.SELECT=71,a.SMALL=72,a.SPAN=73,a.STRIKE=74,a.STRONG=75,a.STYLE=76,a.SUB=77,a.SUP=78,a.TABLE=79,a.TBODY=80,a.TD=81,a.TEXTAREA=82,a.TFOOT=83,a.TH=84,a.THEAD=85,a.TITLE=86,a.TR=87,a.TT=88,a.U=89,a.UL=90,a.VAR=91,a.NOINDEX= +100,a}),Yq=[17,18,38,32,39,15,11,7,1],Ys=function(){var a="first(-|\\.|_|\\s){0,2}name last(-|\\.|_|\\s){0,2}name zip postal phone address passport (bank|credit)(-|\\.|_|\\s){0,2}card card(-|\\.|_|\\s){0,2}number card(-|\\.|_|\\s){0,2}holder cvv card(-|\\.|_|\\s){0,2}exp card(-|\\.|_|\\s){0,2}name card.*month card.*year card.*month card.*year password email birth(-|\\.|_|\\s){0,2}(day|date) second(-|\\.|_|\\s){0,2}name third(-|\\.|_|\\s){0,2}name patronymic middle(-|\\.|_|\\s){0,2}name birth(-|\\.|_|\\s){0,2}place house street city flat state".split(" "); +return{qk:new RegExp("("+L("|",a)+")","i"),Ek:new RegExp("("+L("|",a.concat("\u0438\u043c\u044f;\u0444\u0430\u043c\u0438\u043b\u0438\u044f;\u043e\u0442\u0447\u0435\u0441\u0442\u0432\u043e;\u0438\u043d\u0434\u0435\u043a\u0441;\u0442\u0435\u043b\u0435\u0444\u043e\u043d;\u0430\u0434\u0440\u0435\u0441;\u043f\u0430\u0441\u043f\u043e\u0440\u0442;\u041d\u043e\u043c\u0435\u0440(-|\\.|_|\\s){0,2}\u043a\u0430\u0440\u0442\u044b;\u0434\u0430\u0442\u0430(-|\\.|_|\\s){0,2} \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f;\u0434\u043e\u043c;\u0443\u043b\u0438\u0446\u0430;\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0430;\u0433\u043e\u0440\u043e\u0434;\u043e\u0431\u043b\u0430\u0441\u0442\u044c".split(";")))+ +")","i"),nk:/ym-record-keys/i,Vi:"\u2022",Dk:88}}(),kk=fb(v(Ys.Vi,O)),jd=!0,Fg="",Gg=!1,Hg=!0,Ig=!1,fn=ka(function(a,c){var b=F([a,"efv."+c.event],C);c.N=A(u(O,b),c.N);return c}),Zk=w(function(a){var c=[],b=[],d=[];a.document.attachEvent&&!a.opera&&(c.push(wf),b.push(er),b.push(fr));a.document.addEventListener?c.push(ik):(b.push(hk),d.push(ik));c=wa([{target:a,type:"window",event:"beforeunload",N:[B]},{target:a,type:"window",event:"unload",N:[B]},{event:"click",N:[Ge]},{event:"dblclick",N:[Ge]},{event:"mousedown", +N:[Ge]},{event:"mouseup",N:[hr]},{event:"keydown",N:[ir]},{event:"keypress",N:[jr]},{event:"copy",N:[mk]},{event:"blur",N:c},{event:"focusin",N:b},{event:"focusout",N:d}],!a.document.attachEvent||a.opera?[{target:a,type:"window",event:"focus",N:[Ph]},{target:a,type:"window",event:"blur",N:[wf]}]:[],a.document.addEventListener?[{event:"focus",N:[hk]},{event:"change",N:[jk]},{event:"submit",N:[ok]}]:[{type:"formInput",event:"change",N:[jk]},{type:"form",event:"submit",N:[ok]}]);return en(a,c)}),cn= +w(function(a){return wa(uc(a)?[{target:a,type:"document",event:"mouseleave",N:[kr]}]:[])}),Zs=["submit","beforeunload","unload"],$s=w(function(a,c){var b=c(a);return M(function(d,e){d[e.type+":"+e.event]=e.N;return d},{},b)}),at=v(Zk,function(a,c,b,d){return $s(c,a)[b+":"+d]||[]}),dn=/^\s*function submit\(\)/,bt=E("fw.p",function(a,c){var b;if(!(b=c.Ah||!c.Fb)){var d=I(a),e=!1;b=d.o("hitParam",{});var f=N(c);b[f]&&(d=d.o("counters",{}),e=!(!Ve(c.da)||d[f]));b[f]=1;b=e}if(b)return K.resolve(B);b=new Xs(a, +at);return Zm(a,c,b,Zk,Zs)}),$g,$k=($g=function(a){function c(b,d,e,f){void 0===f&&(f=0);d=a.call(this,b,d,e)||this;d.Me=0;d.Hb=0;d.Le=0;d.buffer=[];d.kd=2E3;d.aa=fd(b);d.cd();d.Le=f;return d}Ja(c,a);c.prototype.wf=function(b){return Y(Boolean,this.aa.O("ag",b))};c.prototype.uf=function(b,d){var e=this;b(Ra(C(this.l,"wv2.b.st"),function(f){e.send(f,d)}))};c.prototype.wj=function(b,d){var e=this;ma(this.l,this.hf);var f=Math.ceil(this.qa.Va(d)/63E4),g=this.qa.dd(d,f);z(function(h,k){var l,m=x({},b, +(l={},l.data=h,l.partNum=k+1,l.end=k+1===f,l));l=e.qa.za([m],!1);e.uf(l,[m])},g);this.cd()};c.prototype.send=function(b,d){var e=this;this.aa.O("se",d);return a.prototype.send.call(this,b,d).then(O,function(){e.aa.O("see",d)})};c.xf=function(b,d,e,f,g){c.md[""+b+d]||(this.md[d]=new c(g,f,e,"m"===d?31457280:0));return this.md[d]};c.prototype.Hi=function(){return this.Le&&this.Me>=this.Le};c.prototype.push=function(b){var d=this;if(!this.Hi()){this.aa.O("p",b);var e=this.qa.Qa(b),f=this.qa.Va(e);7E5< +f?this.wj(b,e):(e=this.wf(this.buffer.concat([b])),e=M(function(g,h){return g+d.qa.Va(d.qa.Qa(h))},0,e),this.Hb+e+f>=7E5*.7&&this.flush(),this.buffer.push(b),this.Hb+=f)}};c.prototype.D=function(b,d){this.aa.D([b],d)};c.prototype.na=function(b,d){this.aa.na([b],d)};c.prototype.flush=function(){var b=this.buffer.concat(this.wf(this.buffer));if(b.length){this.buffer=[];this.Me+=this.Hb;this.Hb=0;var d=this.qa.za(b);this.uf(d,b)}};return c}(Xk),$g.md={},$g),Za=function(){function a(c,b,d){this.Li="wv2.c"; +this.Tb=[];this.ja=[];this.l=c;this.K=uf(c,this,d,this.Li);this.F=b;this.ib=this.F.$h();this.start=this.K.J(this.start,"st");this.stop=this.K.J(this.stop,"sp")}a.prototype.start=function(){var c=this;this.Tb=A(function(b){var d=b[0],e=b[2];b=D(c.K.J(b[1],d[0]),c);return c.ib.D(e||c.l,d,b)},this.ja)};a.prototype.stop=function(){z(ja,this.Tb)};a.prototype.Z=function(c){return this.F.ta().Z(c)};return a}(),Xm=["checkbox","radio"],Ym=/pwd|value|password/i,ah=U("location.href"),ct=function(a){function c(b, +d,e){d=a.call(this,b,d,e)||this;d.sa={elements:[],attributes:[]};d.index=0;d.ie=d.K.J(d.ie,"o");d.wd=d.K.J(d.wd,"io");d.ld=d.K.J(d.ld,"ao");d.we=d.K.J(d.we,"a");d.ue=d.K.J(d.ue,"at");d.xe=d.K.J(d.xe,"r");d.ve=d.K.J(d.ve,"c");d.xa=new b.MutationObserver(d.ie);return d}Ja(c,a);c.prototype.start=function(){this.xa.observe(this.l.document.documentElement,{attributes:!0,characterData:!0,childList:!0,subtree:!0,attributeOldValue:!0,characterDataOldValue:!0})};c.prototype.stop=function(){this.xa.disconnect()}; +c.prototype.ld=function(b){var d=b.target;b=b.attributeName;var e=this.sa.elements.indexOf(d);-1===e&&(e=this.sa.elements.push(d)-1,this.sa.attributes[e]={});this.sa.attributes[e]||(this.sa.attributes[e]={});e=this.sa.attributes[e];var f=d.getAttribute(b);e[b]=ce(this.l,d,b,f,this.F.Cc()).value};c.prototype.wd=function(b){function d(k){var l=Mb(e.l)(k,f);return-1===l?(f.push(k),k={Dd:{}},g.push(k),k):g[l]}var e=this,f=[],g=[];z(function(k){var l=k.attributeName,m=k.removedNodes,p=k.oldValue,q=k.target, +r=k.nextSibling,t=k.previousSibling;switch(k.type){case "attributes":e.ld(k);var y=d(q);y.Dd[l]||(y.Dd[l]=ce(e.l,q,l,p,e.F.Cc()).value);break;case "childList":m&&z(function(G){y=d(G);y.sf||x(y,{sf:q,Qh:r?r:void 0,Rh:t?t:void 0})},qa(m));break;case "characterData":y=d(q),y.tf||(y.tf=p)}},b);var h=this.F.ta();z(function(k,l){h.Fe(k,g[l])},f)};c.prototype.ie=function(b){var d=this;if(ah(this.l)){var e=this.F.L();this.wd(b);z(function(f){var g=f.addedNodes,h=f.removedNodes,k=f.target;switch(f.type){case "childList":h&& +h.length&&d.xe(qa(h),e);g&&g.length&&d.we(qa(g),e);break;case "characterData":d.ve(k,e)}},b);this.ue(e)}else this.stop()};c.prototype.ue=function(b){var d=this;z(function(e,f){var g=d.Bc();d.F.X("mutation",{index:g,attributes:d.sa.attributes[f],target:d.Z(e)},"ac",b)},this.sa.elements);this.sa.elements=[];this.sa.attributes=[]};c.prototype.we=function(b,d){var e=this,f=this.Bc();this.F.ta().Gc({ma:b,bd:function(g){g=A(function(h){h=x({},h);delete h.node;return h},g);e.F.X("mutation",{index:f,ma:g}, +"ad",d)}})};c.prototype.xe=function(b,d){var e=this,f=this.Bc(),g=this.F.ta(),h=A(function(k){var l=g.removeNode(k);Gi(e.l,k,function(m){g.removeNode(m)});return l},b);this.F.X("mutation",{index:f,ma:h},"re",d)};c.prototype.ve=function(b,d){var e=this.Bc();this.F.X("mutation",{value:b.textContent,target:this.Z(b),index:e},"tc",d)};c.prototype.Bc=function(){var b=this.index;this.index+=1;return b};return c}(Za),dt=function(){function a(c,b){var d=this;this.xc=[];this.jb=[];this.ee=1;this.Sa=0;this.sb= +{};this.Ic={};this.Pd=function(f){return d.jb.length?H(f,d.jb):!1};this.removeNode=function(f){var g=d.Z(f),h=Ia(f);if(h)return h="NR:"+h.toLowerCase(),d.Pd(h)&&d.aa.O(h,{data:{node:f,id:g}}),g};this.ob=function(f){var g=Ia(f);if(g){var h=f.__ym_indexer;h||(h=d.ee,f.__ym_indexer=h,d.ee+=1,g="NA:"+g.toLowerCase(),d.Pd(g)&&d.aa.O(g,{data:{node:f,id:h}}));return h}return null};this.l=c;var e=uf(c,this,"i");this.aa=fd(c);this.options=b;this.start=e.J(this.start,"st");this.stop=e.J(this.stop,"sp");this.Z= +e.J(this.Z,"i");this.Fe=e.J(this.Fe,"o");this.Gc=e.J(this.Gc,"a");this.removeNode=e.J(this.removeNode,"r");this.ga=e.J(this.ga,"s")}a.prototype.Fe=function(c,b){var d=this.ob(c);Ta(d)||(this.Ic[d]&&this.Z(c),this.Ic[d]=b)};a.prototype.D=function(c,b,d){c=""+b+c;this.jb.push(c);this.Pd(c)||this.jb.push(c);this.aa.D([c],d)};a.prototype.na=function(c,b,d){var e=""+b+c;this.jb=Y(function(f){return f!==e},this.jb);this.aa.na([e],d)};a.prototype.start=function(){this.Sa=W(this.l,u(D(this.ga,this,!1),this.start), +50,"i.s")};a.prototype.stop=function(){this.flush();ma(this.l,this.Sa);this.xc=[]};a.prototype.Gc=function(c){var b=this,d=[],e=0,f={bd:c.bd,result:[],Hc:0,ma:d};this.xc.push(f);z(function(g){Gi(b.l,g,function(h){var k=b.ob(h);Ta(k)||(d.push(h),b.sb[k]&&b.Z(h),b.sb[k]={node:h,event:f,Kj:e},e+=1)})},c.ma)};a.prototype.Z=function(c){if(c===this.l)return 0;var b=this.ob(c),d=this.sb[b],e=this.Uh(b),f=e.sf,g=e.Dd,h=e.tf,k=e.Qh,l=e.Rh;if(d){e=d.event;d=d.Kj;var m=this.l.document.documentElement===c;k= +k||c.nextSibling;var p=l||c.previousSibling;l=!m&&k?this.ob(k):null;p=!m&&p?this.ob(p):null;m=this.l;k=this.options;f=this.ob(f||c.parentNode||c.parentElement)||0;var q=g,r=void 0;void 0===p&&(p=null);void 0===l&&(l=null);void 0===q&&(q={});void 0===r&&(r=Ia(c));if(V(r))c=void 0;else{g={id:b,te:p!==f?p:null,next:l!==f?l:null,parent:f,name:r.toLowerCase(),node:c};if(Bf(c)){if(h=Um(c,h),g.attributes={},g.content=h)if(c=hd(m,c))g.content=""!==h.trim()?mn(m,h):h,g.hidden=c}else h=Vm(m,c,k,q,r),m=h.qb, +g.attributes=h.eh,m&&(g.hidden=m),c.namespaceURI&&lc(c.namespaceURI,"svg")&&(g.Sf=c.namespaceURI);c=g}if(V(c))return;delete this.sb[b];e.result[d]=c;e.Hc+=1;e.ma.length===e.Hc&&e.bd(e.result)}return b};a.prototype.flush=function(){this.ga(!0)};a.prototype.ga=function(c){var b=this;if(ah(this.l)){var d=ca(this.sb);d=A(function(e){return b.sb[e].node},d);d=fc(d,this.Z);c=c?Cj(B):Aj(this.l,20);d(c);this.xc=Y(function(e){return e.Hc!==e.result.length},this.xc)}};a.prototype.Uh=function(c){if(Ta(c))return{}; +var b=this.Ic[c];return b?(delete this.Ic[c],b):{}};return a}(),et=["input","change","keyup","paste","cut"],ft=function(a){function c(b,d,e){b=a.call(this,b,d,e)||this;b.inputs={};b.zd=!1;b.Rc=b.K.J(b.Rc,"ii");b.Sc=b.K.J(b.Sc,"ir");b.Xc=b.K.J(b.Xc,"ri");b.hd=b.K.J(b.hd,"ur");b.Od=b.K.J(b.Od,"ce");b.Fc=b.K.J(b.Fc,"vc");return b}Ja(c,a);c.prototype.start=function(){var b=this,d=this.F.ta();this.zd=this.oh();z(function(e){e=e.toLowerCase();d.D(e,"NA:",D(b.Rc,b));d.D(e,"NR:",D(b.Sc,b))},Af);this.Tb=[this.ib.D(this.l.document, +et,D(this.Od,this)),function(){z(function(e){e=e.toLowerCase();d.na(e,"NA:",b.Rc);d.na(e,"NR:",b.Sc)},Af);z(b.hd,ca(b.inputs))}]};c.prototype.hd=function(b){if(this.zd){var d=this.inputs[b];d&&(b=d.ej,d=d.element,b&&this.l.Object.defineProperty(d,this.Dc(d),b))}};c.prototype.Sc=function(b){b&&this.hd(b.data.id)};c.prototype.Rc=function(b){b&&(b=b.data,this.Xc(b.node,b.id))};c.prototype.Dc=function(b){return ye(b)?"checked":"value"};c.prototype.Od=function(b){if(b=b.target){var d=this.Dc(b);this.Fc(b[d], +b)}};c.prototype.Fc=function(b,d){var e=this.Z(d),f=this.inputs[e];if(!f&&(f=this.Xc(f,e),!f))return;e=f.qh;var g=f.value,h=this.Dc(d);b&&!H(typeof b,["string","boolean","number"])||b===g||(g=ce(this.l,d,h,b,this.F.Cc()).value,e?this.F.X("event",{target:this.Z(d),checked:!!b},"change"):(e=de(d),h=yf(d),this.F.X("event",{value:g,hidden:h&&!e,target:this.Z(d)},"change")),f.value=b)};c.prototype.Xc=function(b,d){var e=this;if(!rf(b)||"__ym_input_override_test"===b.getAttribute("class")||this.inputs[d])return null; +var f=ye(b),g=this.Dc(b),h={element:b,qh:f,value:b[g]};this.inputs[d]=h;this.zd&&Hb(this.l,function(){var k=e.l.Object.getOwnPropertyDescriptor(Object.getPrototypeOf(b),g)||{},l=e.l.Object.getOwnPropertyDescriptor(b,g)||{},m=x({},k,l);if(Da("((set)?(\\s?"+g+")?)?",m.set)){try{e.l.Object.defineProperty(b,g,x({},m,{configurable:!0,set:function(p){e.Fc(p,this);return m.set.call(this,p)}}))}catch(p){}h.ej=m}});return h};c.prototype.oh=function(){var b=!0,d=$a(this.l)("input");try{d=$a(this.l)("input"); +d.value="INPUT_VALUE";d.style.setProperty("display","none","important");d.setAttribute("type","text");d.setAttribute("class","__ym_input_override_test");var e=this.l.Object.getOwnPropertyDescriptor(Object.getPrototypeOf(d),"value")||{},f=this.l.Object.getOwnPropertyDescriptor(d,"value")||{},g=x({},e,f);this.l.Object.defineProperty(d,"value",x({},g,{configurable:!0,set:function(h){return g.set.call(d,h)}}));"INPUT_VALUE"!==d.value&&(b=!1);d.value="INPUT_TEST";"INPUT_TEST"!==d.value&&(b=!1)}catch(h){b= +!1}return b};return c}(Za),gt=function(a){function c(b,d,e){b=a.call(this,b,d,e)||this;b.ab={width:0,height:0,vb:0,wb:0,orientation:0};b.ja.push([["resize"],b.cj]);b.ja.push([["orientationchange"],b.aj]);return b}Ja(c,a);c.prototype.start=function(){a.prototype.start.call(this);this.kg()};c.prototype.cj=function(){var b=this.Md();this.vi(b)&&(this.ab=b,this.lg(b))};c.prototype.aj=function(){var b=this.Md();this.ab.orientation!==b.orientation&&(this.ab=b,this.uj(b))};c.prototype.Of=function(b){return!b.height|| +!b.width||!b.wb||!b.vb};c.prototype.vi=function(b){return b.height!==this.ab.height||b.width!==this.ab.width};c.prototype.Md=function(){var b=this.F.mb(),d=Ed(this.l),e=d[0];d=d[1];b=b.Ld();return{width:e,height:d,wb:b?b.scrollWidth:0,vb:b?b.scrollHeight:0,orientation:this.F.mb().bi()}};c.prototype.uj=function(b){var d;void 0===d&&(d=this.F.L());this.F.X("event",{width:b.width,height:b.height,orientation:b.orientation},"deviceRotation",d)};c.prototype.lg=function(b,d){void 0===d&&(d=this.F.L());this.F.X("event", +{width:b.width,height:b.height,wb:b.wb,vb:b.vb},"resize",d)};c.prototype.kg=function(){var b=this.Md();this.Of(b)?W(this.l,D(this.kg,this),300):(this.Of(this.ab)&&(this.ab=b),this.lg(b,0))};return c}(Za),Pe=function(){function a(c){this.index=0;this.Cb={};this.l=c}a.prototype.rc=function(c,b,d){void 0===d&&(d={});var e=ha(this.l),f=this.index;this.index+=1;this.Cb[f]={Sa:0,Yb:!1,Oh:c,Ib:[],Zd:e(aa)};var g=this;return function(){var h=Aa(arguments),k=d.kb&&!g.Cb[f].Yb,l=g.Cb[f];ma(g.l,l.Sa);l.Ib=h; +l.Yb=!0;var m=e(aa);if(k||m-l.Zd>=b)c.apply(void 0,h),l.Zd=m;l.Sa=W(g.l,function(){k||(c.apply(void 0,h),l.Zd=e(aa));l.Yb=!1;l.Ib=[]},b,"th")}};a.prototype.flush=function(){var c=this;z(function(b){var d=c.Cb[b],e=d.Sa,f=d.Oh,g=d.Ib;d.Yb&&(c.Cb[b].Yb=!1,f.apply(void 0,g),ma(c.l,e))},ca(this.Cb))};return a}(),ht=function(a){function c(b,d,e){d=a.call(this,b,d,e)||this;d.Ag=[];d.We={x:0,y:0};d.Aa=new Pe(b);d.Vc=d.K.J(d.Vc,"o");d.ja.push([["scroll"],d.dj]);return d}Ja(c,a);c.prototype.start=function(){a.prototype.start.call(this); +this.F.X("event",{x:Math.max(this.l.scrollX,0),y:Math.max(this.l.scrollY,0),page:!0,target:-1},"scroll",0)};c.prototype.stop=function(){a.prototype.stop.call(this);this.Aa.flush()};c.prototype.dj=function(b){if(this.F.mb().If())this.Vc(b);else{var d=b.target,e=Y(function(f){return f[0]===d},this.Ag).pop();e?e=e[1]:(e=this.Aa.rc(D(this.Vc,this),100,{kb:!0}),this.Ag.push([d,e]));e(b)}};c.prototype.Vc=function(b){var d=this.F.mb().Ld();b=b.target;var e=this.Nb(b);d=Oa(la(b),[d,this.l,this.l.document]); +var f=Math.max(e.left,0);e=Math.max(e.top,0);if(d){if(this.We.x===f&&this.We.y===e)return;this.We={x:f,y:e}}this.F.X("event",{x:f,y:e,page:d,target:d?-1:this.Z(b)},"scroll")};c.prototype.Nb=function(b){var d={left:0,top:0};if(!b)return d;if(b.window===b)return{top:b.scrollY||0,left:b.scrollX||0};var e=b.ownerDocument||b,f=b.documentElement,g=e.defaultView||e.parentWindow,h=e.body;return b!==e||(b=this.F.mb().Ld(),b)?H(b,[f,h])?{top:b.scrollTop||g.scrollY,left:b.scrollLeft||g.scrollX}:{top:b.scrollTop|| +0,left:b.scrollLeft||0}:d};return c}(Za),it=["mousemove","mousedown","mouseup","click"],jt=function(a){function c(b,d,e){d=a.call(this,b,d,e)||this;d.ja.push([it,d.$i]);d.Aa=new Pe(b);d.Pc=d.K.J(d.Pc,"n");d.Cj=d.K.J(d.Aa.rc(D(d.Pc,d),100),"t");return d}Ja(c,a);c.prototype.stop=function(){a.prototype.stop.call(this);this.Aa.flush()};c.prototype.$i=function(b){var d=null;try{d=b.type}catch(e){return}"mousemove"===d?this.Cj(b):this.Pc(b)};c.prototype.Pc=function(b){var d=b.type,e=b.clientX;e=void 0=== +e?null:e;var f=b.clientY;f=void 0===f?null:f;b=b.target||this.l.document.elementFromPoint(e,f);this.F.X("event",{x:e||0,y:f||0,target:this.Z(b)},d)};return c}(Za),kt=["focus","blur"],lt=function(a){function c(b,d,e){b=a.call(this,b,d,e)||this;b.ja.push([kt,b.Ph]);return b}Ja(c,a);c.prototype.Ph=function(b){var d=b.target;b=b.type;this.F.X("event",{target:this.Z(d===this.l?this.l.document.documentElement:d)},b)};return c}(Za),mt=w(function(a){var c=Ka(a.getSelection,"getSelection");return c?D(c,a): +B}),nt=u(mt,ja),ot=["mousemove","touchmove","mousedown","touchdown","select"],pt=/text|search|password|tel|url/,qt=function(a){function c(b,d,e){b=a.call(this,b,d,e)||this;b.Qd=!1;b.ja.push([ot,b.si]);return b}Ja(c,a);c.prototype.si=function(b){var d=this.F,e=b.type,f=b.which;b=b.target;if("mousemove"!==e||1===f)(e="select"===e?this.ii(b):this.gi())&&e.start!==e.end?(this.Qd=!0,d.X("event",e,"selection")):this.Qd&&(this.Qd=!1,d.X("event",{start:0,end:0},"selection"))};c.prototype.gi=function(){var b= +nt(this.l);if(b&&0=n(c,"body.scrollHeight")?b:null},bi:function(){var b=a.screen;if(!b)return 0;var d=eb(v(b,n),["orientation","mozOrientation","msOrientation"]);return n(b,d+".angle")||0},Ak:v(a,cb),If:v(a,od),zk:v(a,Be)}}),Ht=function(){function a(c,b){var d=this;this.Pb=0;this.xd=[];this.Ob=null;this.va=this.ec=this.wg=!1;this.Ha=0;this.ei=function(){return d.page};this.Id=function(){return d.Pb};this.Bf=function(){return d.Ha}; +this.$h=function(){return d.ib};this.Af=function(){return d.Ob};this.ta=function(){return d.Rd};this.L=function(){return d.Ke?d.l.Math.max(d.Ke(aa)-d.Ha,0):0};this.Cc=function(){return d.options};this.mb=function(){return d.gh};this.X=function(f,g,h,k){void 0===k&&(k=d.L());f=d.Zh(f,g,h,k);d.ga(f)};this.Zh=function(f,g,h,k){void 0===k&&(k=d.L());return{type:f,data:g,L:k,M:d.Pb,event:h}};this.ga=function(f){f=ea(f)?f:[f];d.wg&&!d.ec?d.va?(f=A(function(g){return g.M?g:x(g,{M:d.Pb})},f),d.Af().mg(f)): +(z(function(g){kb(d.l,{name:"webvisorData",data:g})},f),f=A(Pm,f),d.$b(f)):d.xd=d.xd.concat(f)};this.l=c;var e=uf(c,this,"R");this.He=e.J(this.He,"s");this.ga=e.J(this.ga,"sd");e=I(c);e.o("wv2e")&&Te();e.C("wv2e",!0);this.options=b;this.ib=ia(c);this.Rd=new dt(this.l,b);this.gh=Gt(c);this.ef=A(function(f){return new f[0](c,d,f[1])},bh);this.Ai();this.page=Rm(this.l);this.He()}a.prototype.start=function(c){this.wg=!0;this.$b=c;this.jg()};a.prototype.stop=function(){ah(this.l)&&(z(function(c){return c.stop()}, +this.ef),this.Rd.stop(),this.Ob&&this.Ob.stop(),this.va||this.X("event",{},"eof"))};a.prototype.qc=function(c,b){var d=new a(c,x({},this.options,{M:b}));d.start(B);return d};a.prototype.Ai=function(){var c=this;this.va=!!this.options.M;this.Pb=this.options.M||0;this.ec=!this.va;var b=this.options.Fg||[];b.push(T(this.l).host);this.Ob=Sm(this.l,this,b);b=this.Ob.Hd();cb(this.l)?this.ec&&b.D(["i"],function(d){c.va=d.va;c.ec=!1;d.M&&(c.Pb=d.M);c.jg()}):this.ec=this.va=!1};a.prototype.jg=function(){var c= +zd(this.xd);this.ga(c)};a.prototype.He=function(){this.Ke=Uf(this.l);this.Ha=this.Ke(aa);z(function(c){c.start()},this.ef);this.Rd.start()};return a}(),cd=u(ca,tc),da,It=(da={},da.mousemove=0,da.mouseup=1,da.mousedown=2,da.click=3,da.scroll=4,da.windowblur=5,da.windowfocus=6,da.focus=7,da.blur=8,da.eof=9,da.selection=10,da.change=11,da.input=12,da.touchmove=13,da.touchstart=14,da.touchend=15,da.touchcancel=16,da.touchforcechange=17,da.canvasMethod=18,da.canvasProperty=19,da.zoom=20,da.resize=21,da.mediaMethod= +22,da.mediaProperty=23,da.keystroke=24,da.deviceRotation=25,da.fatalError=26,da.hashchange=27,da.stylechange=28,da),ch=ka(function(a,c){var b;return b={},b[cd(a)]=c,b}),Jt=function(){function a(c){var b;this.isSync=!1;this.Lb=[];this.nf=[];this.l=c;this.Rb=(b={},b.event=D(this.Eh,this),b.page=ch({page:1}),b.mutation=ch({Qi:1}),b.activity=ch({$g:1}),b);this.nf=[[["scroll"],{rj:1}],[["selection"],{tj:1}],[["change","input"],{mh:1}],[["keystroke"],{Ki:1},{Mc:1}],[["zoom"],{Yj:1}],[["resize"],{nj:1}], +[["windowfocus","windowblur","focus","blur","eof"],{Vj:1}],[["mousemove","mouseup","mousedown","click"],{Oi:1}],[["deviceRotation"],{zh:1}],[["fatalError"],{Jh:1}],[["touchmove","touchstart","touchend","touchcancel","touchforcechange"],{Fj:1},{touches:1},{touches:1}],[["hashchange"],{wi:1}],[["stylechange"],{xj:1},{Ka:1},{Ka:1}]]}a.prototype.Eh=function(c){var b,d,e=c.type,f=eb(u(tc,v(e,H)),this.nf);f||db(Kc("vem."+e));"eof"===e&&(this.isSync=!0);var g=f[1],h=f[2];f=f[3];var k=c.$;return{event:(b= +{type:It[e],target:c.target,M:c.M},b[cd(g)]=h?(d={},d[cd(h)]=f?k[cd(f)]:k,d):k,b)}};a.prototype.za=function(c,b){var d=this;void 0===b&&(b=!1);var e=fc(c,function(h){var k=!V(h.partNum);return{data:k?void 0:d.Rb[h.type](h.data),rh:k?h.data:void 0,page:h.partNum,end:h.end,L:h.L}}),f=this.isSync||b?Infinity:10;e=gc(this.l,e,f);var g=[e];this.Lb.push(e);return e(Ke(function(h){h=ge(d.l,Wh,{buffer:h});h=gc(d.l,h,f,ze);g.push(h);d.Lb.push(h);return h}))(Ke(function(h){h=Ef(d.l,h.slice(-4));h=gc(d.l,h, +f,ze);g.push(h);d.Lb.push(h);return h}))(Og(function(h){h=h[h.length-1];z(function(k){k=He(d.l)(k,d.Lb);d.Lb.splice(k,1)},g);return h}))};a.prototype.Qa=function(c){return ge(this.l,Hf,this.Rb[c.type](c.data))(Ae(B))};a.prototype.Va=function(c){return c[0]};a.prototype.dd=function(c,b){for(var d=Ef(this.l,c)(Ae(B)),e=Math.ceil(d.length/b),f=[],g=0;ge?(b+=String.fromCharCode(e),f++):191e?(g=d.charCodeAt(f+1),b+=String.fromCharCode((e&31)<<6|g&63),f+=2):(g=d.charCodeAt(f+1),b+=String.fromCharCode((e& +15)<<12|(g&63)<<6|d.charCodeAt(f+2)&63),f+=3);d=qb(a,b);return ea(d)?A(Oq,d):[]}),Bm=E("ep.ent",function(a,c,b){a=""+Ua(a,10,99);b=""+100*c+b+a;if(16b.name?1:2}),fb(qm))(a):""},ad(",")),ru=function(a){return function(c){var b=$a(c);if(!b)return"";b=b("canvas");var d=[],e=a(),f=e.Ih;e=e.yh;try{var g=oa("getContext",b);d=A(u(O,g),e)}catch(h){return""}return(g=eb(O,d))?f(c,{canvas:b,lh:g}):""}}(function(){return{yh:ou,Ih:Zl}}),Xl=["name","lang","localService","voiceURI","default"],su=E("p.tfs",function(a){var c=I(a);if(!c.o("tfs")){c.C("tfs",!0);c=ia(a);var b=B;b=c.D(a,["message"],function(d){try{var e= +d.origin}catch(h){}if(e&&"https://iframe-toloka.com"===e&&(d=qb(a,d.data),Ma(d)&&"appendremote"===d.action))if(d=Qa(a),d.o("tfsc")||a.confirm("\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u201c\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0441\u0430\u0439\u0442\u043e\u0432\u201c \u043e\u0442 toloka.ai \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c?")){d.C("tfsc", +1);var f,g;I(a).C("_u",(f={},f.getCachedTags=Lf,f.button=(g={},g.closest=v(a,Mf),g.select=Nf,g.getData=v(a,Of),g),f));hc(a,{src:"https://yastatic.net/s3/metrika/2.1540128042.1/form-selector/button_ru.js"});b()}else a.close()})}}),tu=Wa(/[a-z\u0430-\u044f,.]/gi),uu=E("ice",function(a,c,b){var d=Ga(a,c);if(d){var e=n(b,"target");if(e&&(c=n(e,"value"),(c=tb(c))&&!(100<=Na(c)))){b=Lb(c);var f=0g||Si(a,c).then(function(l){var m,p,q,r=ig(a,e);d.params((m={},m.__ym=(p={},p.fi=vj((q={},q.a=f?1:0,q.b=r,q.c=l,q)).za(),p),m))},C(a,"ice.s"))}}}}),vu=["text","email","tel"],wu=["cc-","name","shipping"],xu=E("icei",function(a,c){Dd(a)&&Lk(a)&&Zb(a)(Ra(B,F([a,c,function(b){var d=n(b,"settings.cf");b=of(a)||n(b,"settings.eu");if(d&&!b){var e=ia(a);d=ub("input",a.document.body); +z(function(f){zf(a,f)||!H(f.type,vu)||Oa(O,A(v(f.autocomplete,lc),wu))||e.D(f,["blur"],F([a,c],uu))},qa(d))}}],pa)))}),yu=vb("gic",xu),qh,zu=E("p.ai",function(a,c){return new K(function(b){(Yc(a)||Xe(a))&&b(pa(a,c,function(d){var e;return(d=n(d,"settings.sbp"))?ph(a,x({},d,(e={},e.c=c.id,e)),10):B}));b(B)})}),Ub=["0","1","2","3"],Cc=Ub[0],We=Ub[1],Au=Ub[2],$e=A(u(O,oa("concat","GDPR-ok-view-detailed-")),Ub),Vd=wa("GDPR-ok GDPR-cross GDPR-cancel 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 GDPR-settings GDPR-ok-view-default GDPR-ok-view-detailed 21 22 23".split(" "), +$e,["28","29","30"]),Bu="3 13 14 15 16 17 28".split(" "),Ze=u(fb(U("ymetrikaEvent.type")),Dc(mc(Vd))),Ul={url:"https://yastatic.net/s3/gdpr/popup/v2/",Pf:"ru en et fi lt lv pl fr no sr".split(" "),Yf:"_inversed_buttons"},Tb,Tl=(Tb={},Tb["GDPR-ok"]="ok",Tb["GDPR-ok-view-default"]="ok-default",Tb["GDPR-ok-view-detailed"]="ok-detailed",Tb["GDPR-ok-view-detailed-0"]="ok-detailed-all",Tb["GDPR-ok-view-detailed-1"]="ok-detailed-tech",Tb["GDPR-ok-view-detailed-2"]="ok-detailed-tech-analytics",Tb["GDPR-ok-view-detailed-3"]= +"ok-detailed-tech-other",Tb),Xd=[],lh=u(Ze,fb(lr(Vd)),ad(",")),mh=u(Dc(mc(Vd)),Na,Boolean),Ml=w(function(a,c){var b=c.o("gdpr");return H(b,Ub)?"-"+b:""}),Xc={},nl=w(wc),Jl=u(oa("exec",/counterID=(\d+)/),U("1")),ol=ka(function(a,c){var b=nl(a),d=qa(c),e=d[0],f=d[1],g=d.slice(2);if(f){d=Il(a,e);var h=d[0],k=d[1];d=N(k);b[d]||(b[d]={});b=b[d];c.pf||Xc[f]&&M(function(l,m){return l||!!m(a,k,g,h)},!1,Xc[f])||("init"===f?(c.pf=!0,h?pb(a,""+e,"Duplicate counter "+e+" initialization"):a["yaCounter"+k.id]= +new a.Ya[ra.lc](x({},g[0],k))):h&&h[f]&&b.zi?(h[f].apply(h,g),c.pf=!0):(d=b.ug,d||(d=[],b.ug=d),d.push(wa([e,f],g))))}}),Cu=vb("is",function(a){var c=-1f?d.push(f):(127f?d.push(f>>6|192):(d.push(f>>12|224),d.push(f>>6&63|128)),d.push(f&63|128))}b=Kh(d)}return b},a));x(ag,c)})();(function(){var a={};a.oo=yc("oo");a.pmc=yc("cmc");a.lt=function(c){var b=Jd(c).o("lt",null);return b?c.Math.round(100*b):b};a.yu=function(c){var b=T(c);return H(b.hostname,["dzen.ru","ya.ru"])?(Bc(c,"").o("yandexuid")||"").substring(0,25):null};a.re=u(Xp,Cb);a.aw=function(c){c=eb(u(na,Gb),[c.document.hidden, +c.document.msHidden,c.document.webkitHidden]);return na(c)?null:ed(!c)};a.ifc=yc("ifc");a.ifb=yc("ifb");a.ecs=yc("ecs");a.csi=yc("scip");x(bg,a)})();ua.er=Tc;(function(a){try{var c=bd(a,"er"),b=Eo(a,c);Gj.push(function(d,e,f,g){var h,k,l,m,p;.01>=a.Math.random()||b((h={},h[d]=(k={},k[ra.fb]=(l={},l[e]=(m={},m[f]=g?(p={},p[a.location.href]=g,p):a.location.href,m),l),k),h))})}catch(d){}})(window);(function(){Sd.push(Ho);Wf.unshift(Do);Vg.push(function(a){var c=void 0;void 0===c&&(c=!0);I(a).C("oo", +c)})})();xb(function(a,c){return{ca:function(b,d){var e=b.G,f=b.H;!Tk[c.id]&&f.o("pv")&&c.exp&&!e.nohit&&(e.exp=c.exp,Tk[c.id]=!0);d()}}},-99);Z.push(Ps);Ob.e=Fb;va.e=Xa;ua.e=ac;cc({exp:{ia:"experiments"}});ak.experiments="ex";(function(){var a;Ye.push(Qs);va.f=Xa;x(ua,(a={},a.f=Kk,a));ba("f",Pb(),1);ba("f",$f,2)})();Sd.push(function(a,c){var b={ea:N(c),vd:Ga(a,c),Bg:ha(a),ce:Qa(a)},d=b.Bg(ib);if(!b.ce.Ud){var e=b.ce.o("ymoo"+b.ea);if(e&&30>d-e)b=b.ea,delete I(a).o("counters",{})[b],db(Sa("uws")); +else pa(a,c,Rs(b))["catch"](C(a,"d.f"))}});(function(){var a,c,b=Eb([Nb]);x(ua,(a={},a.s=b,a.S=b,a.u=Tc,a));x(va,(c={},c.s=Bb,c.S=Xa,c.u=Bb,c));ba("s");ba("u");ba("S",Pb(["v","hid","u","vf","rn"]),1);Z.push(E("s",qo))})();va["8"]=Bb;ua["8"]=[Xi];Z.push(function(a,c){return pa(a,c,function(b){var d,e=n(b,"settings.sbp");return e&&ei(a,b,{hb:c,Wc:"8",data:x({},e,(d={},d.c=c.id,d)),$d:"cs"})})});ba("p",Pb(Wg),1);va.p=function(a,c,b){return function(d,e){var f,g=x({H:Ca()},d);g.G||(g.G={});var h=g.G, +k=g.Oa;k=void 0===k?{}:k;h["wv-hit"]=h["wv-hit"]||""+Ib(a);h["page-url"]=h["page-url"]||a.location.href;h.wmode="0";h["wv-part"]="0";h["page-url"]=h["page-url"]||a.location.href;h["wv-type"]||(h["wv-type"]=k.Td?"5":"4");h={Ia:{Pa:"webvisor/"+e.id},Y:x(g.Y,{xb:(f={},f["Content-Type"]="text/plain",f),Ue:"POST"}),G:h};f=La(je(a,"pub",e),b);return nd(a,c,f)(x(g,h))}};ua.p=Eb([0,Nb]);Ab.push(Ws);cc({Fb:{ia:"webvisor",Za:Boolean},Ah:{ia:"disableFormAnalytics",Za:Boolean}});ba("4",Pb(Wg),1);va["4"]=di;ua["4"]= +Eb([0,Nb,Ad]);Ab.push(bt);(function(){ba("W",Pb(Wg),1);ua.W=Eb([0,Nb]);va.W=di;Ab.push(Mt);cc({Fb:{ia:"webvisor"}});cc({Lj:{ia:"trustedDomains"},jc:{ia:"childIframe",Za:Boolean}});Vg.push(function(a){I(a).o("stopRecorder",B)()});zk("wv")})();Z.push(Pt);ba("pi");va.pi=Bb;ua.pi=Tc;zk("w",function(a,c){return{ca:function(b,d){if(b.H){var e=dl(c),f=e.status;"rt"===e.Wc&&f&&(b.H.C("rt",f),b.Ia||(b.Ia={}),b.Ia.xi=1===f?Hh(a,c)+".":"")}d()}}},2);(function(){Z.push(Qt);cc({Ad:{ia:"ecommerce",Za:function(a){if(a)return!0=== +a?"dataLayer":""+a}}});va["1"]||(va["1"]=Xa)})();Z.push(St);Z.push(cu);ua["6"]=Eb([0,Nb]);va["6"]=Bb;Z.push(du);xb(Fc,20);ba("f",Fc,20);ba("n",Fc,20);ba("1",Fc,20);ba("d",Fc,20);ba("5",Fc,20);Z.push(Os);(function(){Ng.push(function(a,c){c.informer=um(a)})})();xb(gf,6);ba("1",gf,6);ba("adb");ba("n",gf,4);ua.adb=Tc;va.adb=nd;zc.push(fu);ua["5"]=ac;va["5"]=Xa;Ob["5"]=Y(u(tc,mc([ng,te]),Gb),Fb);Z.push(gu);xb(xh,7);ba("n",xh,6);Ab.push(hu);va.d=Xa;ba("d",Pb(["hid","u","v","vf"]),1);ua.d=Tc;ba("n",function(a, +c){return{Ba:function(b,d){if(!b.V||!b.V.force){var e=.002,f=c.id===ra.Ug?1:.002,g,h,k,l,m;void 0===e&&(e=1);void 0===f&&(f=1);var p=a.performance;if(p&&S(p.getEntriesByType)&&(e=Math.random()>e,f=Math.random()>f,!e||!f)){p=a.performance.getEntriesByType("resource");for(var q={},r={},t={},y=iu(a),G=0;G=e;e+=1)b+=d.call(a, +e)?""+e:"0";return b+c}catch(f){return c}},function(a){a=n(a,"navigator")||{};return a.doNotTrack||a.msDoNotTrack||"unknown"},function(a){if(a=Js(a))try{for(var c=[],b=0;b{a.error&&(0,d.eK)(a.error)}),window.addEventListener("unhandledrejection",async a=>{if(a.promise)try{await a.promise}catch(b){(0,d.eK)(b)}}),"#b00m"===window.location.hash&&setTimeout(()=>{throw Error("b00m")}),c(30523),(0,c(45341).nn)()},82664(a,b,c){function d(a){let b=document.querySelectorAll(a);if(b.length>0)return b[b.length-1]}function e(){return`${window.location.protocol}//${window.location.host}${function(){let a=d("meta[name=analytics-location]");return a?a.content:window.location.pathname}()+function(){let a=d("meta[name=analytics-location-query-strip]"),b="";a||(b=window.location.search);let c=d("meta[name=analytics-location-params]");for(let e of(c&&(b+=(b?"&":"?")+c.content),document.querySelectorAll("meta[name=analytics-param-rename]"))){let f=e.content.split(":",2);b=b.replace(RegExp(`(^|[?&])${f[0]}($|=)`,"g"),`$1${f[1]}$2`)}return b}()}`}c.d(b,{S:()=>e})},86975(a,b,c){c.d(b,{AU:()=>j,Ap:()=>w,DT:()=>o,HN:()=>i,Lq:()=>g,T2:()=>u,Yg:()=>t,ag:()=>s,ck:()=>k,po:()=>r,q3:()=>l,uL:()=>v,wz:()=>n,xc:()=>h,xk:()=>p,zH:()=>f});var d=c(64707);let e="data-turbo-loaded";function f(){document.documentElement.setAttribute(e,"")}function g(){return document.documentElement.hasAttribute(e)}let h=()=>!(0,d.c)("PJAX_ENABLED"),i=a=>a?.tagName==="TURBO-FRAME";function j(a,b){let c=a.split("/",3).join("/"),d=b.split("/",3).join("/");return c===d}function k(a,b){let c=a.split("/",2).join("/"),d=b.split("/",2).join("/");return c===d}async function l(){let a=document.head.querySelectorAll("link[rel=stylesheet]"),b=new Set([...document.styleSheets].map(a=>a.href)),c=[];for(let d of a)""===d.href||b.has(d.href)||c.push(m(d));await Promise.all(c)}let m=(a,b=2e3)=>new Promise(c=>{let d=()=>{a.removeEventListener("error",d),a.removeEventListener("load",d),c()};a.addEventListener("load",d,{once:!0}),a.addEventListener("error",d,{once:!0}),setTimeout(d,b)}),n=(a,b)=>{let c=b||a.querySelectorAll("[data-turbo-replace]"),d=[...document.querySelectorAll("[data-turbo-replace]")];for(let e of c){let f=d.find(a=>a.id===e.id);f&&f.replaceWith(e)}},o=a=>{for(let b of a.querySelectorAll("link[rel=stylesheet]"))document.head.querySelector(`link[href="${b.getAttribute("href")}"], + link[data-href="${b.getAttribute("data-href")}"]`)||document.head.append(b)},p=a=>{for(let b of a.querySelectorAll("script"))document.head.querySelector(`script[src="${b.getAttribute("src")}"]`)||q(b)},q=a=>{let{src:b}=a;if(!b)return;let c=document.createElement("script"),d=a.getAttribute("type");d&&(c.type=d),c.src=b,document.head&&document.head.appendChild(c)},r=a=>{let b=[];for(let c of a.querySelectorAll('meta[data-turbo-track="reload"]'))document.querySelector(`meta[http-equiv="${c.getAttribute("http-equiv")}"]`)?.content!==c.content&&b.push(u(c.getAttribute("http-equiv")));return b},s=a=>{let b=a.querySelector("[data-turbo-head]")||a.head;return{title:b.querySelector("title")?.textContent,transients:[...b.querySelectorAll("[data-turbo-transient]")].map(a=>a.cloneNode(!0)),bodyClasses:a.querySelector("meta[name=turbo-body-classes]")?.content,replacedElements:[...a.querySelectorAll("[data-turbo-replace]")].map(a=>a.cloneNode(!0))}},t=()=>[...document.documentElement.attributes],u=a=>a.replace(/^x-/,"").replaceAll("-","_"),v=a=>document.dispatchEvent(new CustomEvent("turbo:reload",{detail:{reason:a}})),w=(a,b)=>{for(let c of a.attributes)b.hasAttribute(c.nodeName)||"aria-busy"===c.nodeName||a.removeAttribute(c.nodeName);for(let d of b.attributes)a.getAttribute(d.nodeName)!==d.nodeValue&&a.setAttribute(d.nodeName,d.nodeValue)}},25019(a,b,c){c.d(b,{aJ:()=>u,cI:()=>r,eK:()=>n});var d=c(82918),e=c(45341),f=c(28382),g=c(82664),h=c(86975),i=c(58843),j=c(8704);let k=!1,l=0,m=Date.now();function n(a,b={}){var c;"AbortError"!==(c=a).name&&("TypeError"!==c.name||"Failed to fetch"!==c.message)&&o(q(p(a),b))}async function o(a){if(!w())return;let b=document.head?.querySelector('meta[name="browser-errors-url"]')?.content;if(b){if(t(a.error.stacktrace)){k=!0;return}l++;try{await fetch(b,{method:"post",body:JSON.stringify(a)})}catch{}}}function p(a){return{type:a.name,value:a.message,stacktrace:r(a)}}function q(a,b={}){return Object.assign({error:a,sanitizedUrl:(0,g.S)()||window.location.href,readyState:document.readyState,referrer:(0,i.wP)(),timeSinceLoad:Math.round(Date.now()-m),user:u()||void 0,turbo:(0,h.xc)(),bundler:j.A7,ui:Boolean(document.querySelector('meta[name="ui"]'))},b)}function r(a){return(0,f.Q)(a.stack||"").map(a=>({filename:a.file||"",function:String(a.methodName),lineno:(a.lineNumber||0).toString(),colno:(a.column||0).toString()}))}let s=/(chrome|moz|safari)-extension:\/\//;function t(a){return a.some(a=>s.test(a.filename)||s.test(a.function))}function u(){let a=document.head?.querySelector('meta[name="user-login"]')?.content;if(a)return a;let b=(0,d.b)();return`anonymous-${b}`}let v=!1;function w(){return!v&&!k&&l<10&&(0,e.Gb)()}if(window.addEventListener("pageshow",()=>v=!1),window.addEventListener("pagehide",()=>v=!0),"function"==typeof BroadcastChannel){let x=new BroadcastChannel("shared-worker-error");x.addEventListener("message",a=>{n(a.data.error)})}},64707(a,b,c){c.d(b,{"$":()=>g,c:()=>f});var d=c(15205);let e=(0,d.Z)(function(){return(document.head?.querySelector('meta[name="enabled-features"]')?.content||"").split(",")}),f=(0,d.Z)(function(a){return -1!==e().indexOf(a)}),g={isFeatureEnabled:f}},8704(a,b,c){c.d(b,{A7:()=>d.A7,ko:()=>d.ko,q1:()=>d.q1});var d=c(53729)},86702(a,b,c){c.d(b,{Z:()=>g,"_":()=>h});var d=c(86283),e=c(60958);let f=class NoOpStorage{getItem(){return null}setItem(){}removeItem(){}clear(){}key(){return null}get length(){return 0}};function g(a,b={throwQuotaErrorsOnSet:!1},c=d.iG,g=a=>a,h=a=>a){let i;try{if(!c)throw Error();i=c[a]||new f}catch{i=new f}let{throwQuotaErrorsOnSet:j}=b;function k(a){b.sendCacheStats&&(0,e.b)({incrementKey:a})}function l(a){try{if(i.removeItem(a),b.ttl){let c=`${a}:expiry`;i.removeItem(c)}}catch(d){}}return{getItem:function(a,b=new Date().getTime()){try{let c=i.getItem(a);if(!c)return null;let d=`${a}:expiry`,e=Number(i.getItem(d));if(e&&b>e)return l(a),l(d),k("SAFE_STORAGE_VALUE_EXPIRED"),null;return k("SAFE_STORAGE_VALUE_WITHIN_TTL"),g(c)}catch(f){return null}},setItem:function(a,c,d=new Date().getTime()){try{if(i.setItem(a,h(c)),b.ttl){let e=`${a}:expiry`,f=d+b.ttl;i.setItem(e,f.toString())}}catch(g){if(j&&g.message.toLowerCase().includes("quota"))throw g}},removeItem:l,clear:i.clear,key:i.key,get length(){return i.length}}}function h(a){return g(a,{throwQuotaErrorsOnSet:!1},window,JSON.parse,JSON.stringify)}},25811(a,b,c){c.d(b,{LS:()=>f,cl:()=>g,rV:()=>e});var d=c(86702);let{getItem:e,setItem:f,removeItem:g}=(0,d.Z)("sessionStorage")},55065(a,b,c){c.d(b,{"$g":()=>SoftNavSuccessEvent,OV:()=>SoftNavStartEvent,QW:()=>SoftNavErrorEvent,Xr:()=>SoftNavEndEvent});var d=c(31167);let e=class SoftNavEvent extends Event{constructor(a,b){super(b),this.mechanism=a}};class SoftNavStartEvent extends e{constructor(a){super(a,d.QE.START)}}class SoftNavSuccessEvent extends e{constructor(a,b){super(a,d.QE.SUCCESS),this.visitCount=b}}class SoftNavErrorEvent extends e{constructor(a,b){super(a,d.QE.ERROR),this.error=b}}class SoftNavEndEvent extends e{constructor(a){super(a,d.QE.END)}}},31167(a,b,c){c.d(b,{BT:()=>l,FP:()=>n,LD:()=>k,QE:()=>g,TL:()=>o,Yl:()=>j,jN:()=>h,r_:()=>m,u5:()=>p});var d=c(55065),e=c(29573),f=c(58843);let g=Object.freeze({INITIAL:"soft-nav:initial",START:"soft-nav:start",SUCCESS:"soft-nav:success",ERROR:"soft-nav:error",FRAME_UPDATE:"soft-nav:frame-update",END:"soft-nav:end",RENDER:"soft-nav:render",PROGRESS_BAR:{START:"soft-nav:progress-bar:start",END:"soft-nav:progress-bar:end"}}),h="reload",i=0;function j(){i=0,document.dispatchEvent(new Event(g.INITIAL)),(0,f.XL)()}function k(a){(0,f.sj)()||(q(),document.dispatchEvent(new d.OV(a)),(0,f.U6)(a),(0,f.J$)(),(0,f.Nt)(),(0,e.hY)())}function l(a={}){s(a)&&(i+=1,document.dispatchEvent(new d.$g((0,f.Gj)(),i)),n(a))}function m(a={}){if(!s(a))return;i=0;let b=(0,f.Wl)()||h;document.dispatchEvent(new d.QW((0,f.Gj)(),b)),r(),(0,e.t3)(b),(0,f.XL)()}function n(a={}){s(a)&&(r(),document.dispatchEvent(new d.Xr((0,f.Gj)())),(0,f.pS)())}function o(a={}){s(a)&&((0,e.mr)(),document.dispatchEvent(new Event(g.RENDER)))}function p(){document.dispatchEvent(new Event(g.FRAME_UPDATE))}function q(){document.dispatchEvent(new Event(g.PROGRESS_BAR.START))}function r(){document.dispatchEvent(new Event(g.PROGRESS_BAR.END))}function s({skipIfGoingToReactApp:a,allowedMechanisms:b=[]}={}){return(0,f.sj)()&&(0===b.length||b.includes((0,f.Gj)()))&&(!a||!(0,f.Nb)())}},29573(a,b,c){c.d(b,{CF:()=>g,hY:()=>h,mr:()=>j,t3:()=>i});var d=c(60958),e=c(58843);let f="stats:soft-nav-duration",g={turbo:"TURBO",react:"REACT","turbo.frame":"FRAME",ui:"UI",hard:"HARD"};function h(){performance.mark(f)}function i(a){(0,d.b)({turboFailureReason:a,turboStartUrl:(0,e.wP)(),turboEndUrl:window.location.href})}function j(){let a=function(){if(0===performance.getEntriesByName(f).length)return null;performance.measure(f,f);let a=performance.getEntriesByName(f),b=a.pop();return b?b.duration:null}();if(!a)return;let b=g[(0,e.Gj)()],c=Math.round(a);b===g.react&&document.dispatchEvent(new CustomEvent("staffbar-update",{detail:{duration:c}})),(0,d.b)({requestUrl:window.location.href,softNavigationTiming:{mechanism:b,destination:(0,e.Nb)()||"rails",duration:c,initiator:(0,e.CI)()||"rails"}})}},58843(a,b,c){c.d(b,{Ak:()=>r,CI:()=>v,Gj:()=>o,"J$":()=>u,Nb:()=>w,Nt:()=>s,OE:()=>p,U6:()=>l,Wl:()=>q,XL:()=>k,pS:()=>m,sj:()=>n,wP:()=>t});var d=c(25811),e=c(31167);let f="soft-nav:fail",g="soft-nav:fail-referrer",h="soft-nav:referrer",i="soft-nav:marker",j="soft-nav:react-app-name";function k(){(0,d.LS)(i,"0"),(0,d.cl)(h),(0,d.cl)(f),(0,d.cl)(g),(0,d.cl)(j)}function l(a){(0,d.LS)(i,a)}function m(){(0,d.LS)(i,"0")}function n(){let a=(0,d.rV)(i);return a&&"0"!==a}function o(){return(0,d.rV)(i)}function p(){return Boolean(q())}function q(){return(0,d.rV)(f)}function r(a){(0,d.LS)(f,a||e.jN),(0,d.LS)(g,window.location.href)}function s(){(0,d.LS)(h,window.location.href)}function t(){return(0,d.rV)(h)||document.referrer}function u(){let a=w();a?(0,d.LS)(j,a):(0,d.cl)(j)}function v(){return(0,d.rV)(j)}function w(){return document.querySelector('meta[name="ui"]')?"ui":document.querySelector("react-app")?.getAttribute("app-name")}},60958(a,b,c){c.d(b,{B:()=>m,b:()=>h});var d=c(86283),e=c(4412),f=c(53729);let g=[];function h(a,b=!1){void 0===a.timestamp&&(a.timestamp=new Date().getTime()),a.loggedIn=l(),a.staff=m(),a.bundler=f.A7,g.push(a),b?k():j()}let i=null;async function j(){await e.C,null==i&&(i=window.requestIdleCallback(k))}function k(){if(i=null,!g.length)return;let a=d.n4?.head?.querySelector('meta[name="browser-stats-url"]')?.content;if(!a)return;let b=JSON.stringify({stats:g});try{navigator.sendBeacon&&navigator.sendBeacon(a,b)}catch{}g=[]}function l(){return!!d.n4?.head?.querySelector('meta[name="user-login"]')?.content}function m(){return!!d.n4?.head?.querySelector('meta[name="user-staff"]')?.content}d.n4?.addEventListener("pagehide",k),d.n4?.addEventListener("visibilitychange",k)},4412(a,b,c){c.d(b,{C:()=>f,x:()=>e});var d=c(86283);let e=d.n4?.readyState==="interactive"||d.n4?.readyState==="complete"?Promise.resolve():new Promise(a=>{d.n4?.addEventListener("DOMContentLoaded",()=>{a()})}),f=d.n4?.readyState==="complete"?Promise.resolve():new Promise(a=>{d.iG?.addEventListener("load",a)})},53729(a,b,c){c.d(b,{A7:()=>i,ko:()=>h,q1:()=>g});var d=c(15205),e=c(86283);let f=(0,d.Z)(function(){return e.n4?.head?.querySelector('meta[name="runtime-environment"]')?.content||""}),g=(0,d.Z)(function(){return e.n4?.head?.querySelector('meta[name="is-private-instance"]')?.content==="true"}),h=(0,d.Z)(function(){return"enterprise"===f()}),i="webpack"},86283(a,b,c){c.d(b,{Qg:()=>d.Qg,iG:()=>e.iG,jX:()=>e.jX,n4:()=>e.n4,yF:()=>d.yF});var d=c(35647),e=c(73614)},73614(a,b,c){c.d(b,{iG:()=>e,jX:()=>f,n4:()=>d});let d="undefined"==typeof document?void 0:document,e="undefined"==typeof window?void 0:window,f="undefined"==typeof location?{pathname:"",origin:"",search:""}:location},35647(a,b,c){c.d(b,{Qg:()=>f,yF:()=>g});var d=c(73614);let e=void 0===d.n4,f=!e;function g(){return!!e||Boolean(d.n4.querySelector('react-app[data-ssr="true"]'))}}},a=>{var b=b=>a(a.s=b);a.O(0,["vendors-node_modules_smoothscroll-polyfill_dist_smoothscroll_js-node_modules_stacktrace-parse-297da6"],()=>b(68836));var c=a.O()}]) +//# sourceMappingURL=environment-de177d47c959.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/E3B4BD7ED5B94646D7B1C731D07517D862F1DC0B b/home/.surf/cache/WebKitCache/Version 16/Blobs/E3B4BD7ED5B94646D7B1C731D07517D862F1DC0B new file mode 100644 index 0000000..75fc9ca --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/E3B4BD7ED5B94646D7B1C731D07517D862F1DC0B @@ -0,0 +1,22706 @@ +/* Bundle Includes: + * css/avatars.css + * css/fonts.css + * css/bottom-pages.css + * css/bottom-menu.css + * css/business.css + * css/pro.css + * css/planpricing.css + * css/startpage.css + * css/icons.css + * css/spinners.css + * css/business-register.css + * css/psa.css + * css/about.css + * css/features.css + * css/achievements.css + * css/corporate.css + */ + +.avatar-wrapper{ + background:#fff; + border-radius:100%; + box-sizing:border-box; + color:#fff; + display:block; + font-size:12px; + height:32px; + line-height:32px; + text-align:center; + width:32px +} +.avatar-wrapper,.multi-avatar{ + position:relative +} +.multi-avatar .avatar-wrapper{ + font-size:8px; + height:18px; + line-height:16px; + position:absolute; + width:18px +} +.multi-avatar .avatar-wrapper img{ + height:18px; + width:18px +} +.multi-avatar .verified .verified_icon{ + display:none +} +.multi-avatar-2 .avatar-0{ + left:1px; + top:1px +} +.multi-avatar-2 .avatar-1{ + left:17px; + top:17px +} +.multi-avatar-3 .avatar-0{ + left:9px; + top:0 +} +.multi-avatar-3 .avatar-1{ + left:-2px; + top:19px +} +.multi-avatar-3 .avatar-2{ + left:19px; + top:19px +} +.multi-avatar-4 .avatar-0{ + left:-2px; + top:-2px +} +.multi-avatar-4 .avatar-1{ + left:19px; + top:-2px +} +.multi-avatar-4 .avatar-2{ + left:-2px; + top:19px +} +.multi-avatar-4 .avatar-3{ + left:19px; + top:19px +} +.avatar-wrapper img{ + -moz-border-radius:inherit; + -webkit-border-radius:inherit; + border-radius:inherit; + width:inherit +} +.small-rounded-avatar{ + float:left; + font:var(--text-h3); + line-height:32px +} +.rtl .small-rounded-avatar{ + float:right +} +.small-rounded-avatar.avatar-wrapper.square{ + border:0; + border-radius:4px; + box-shadow:none; + height:32px; + width:32px +} +.token-input-dropdown-mega .small-rounded-avatar{ + margin:6px 0 6px 8px +} +.small-rounded-avatar img{ + height:32px; + width:32px +} +.medium-avatar{ + border-radius:2px; + font-size:48px; + height:162px; + line-height:162px; + width:162px +} +.contacts-medium-avatar{ + border-radius:8px; + font-size:48px; + height:120px; + line-height:120px; + width:120px +} +.semi-mid-avatar{ + border:0; + font-size:48px +} +.mobile.semi-big-avatar,.semi-mid-avatar{ + height:96px; + line-height:96px; + width:96px +} +.mobile.semi-big-avatar{ + border-radius:9px; + font-size:30px +} +.semi-big-avatar{ + border-radius:9px; + font-size:58px; + height:184px; + line-height:184px; + width:184px +} +.context-avatar{ + border-bottom-left-radius:2px; + border-bottom-right-radius:2px; + border-top-left-radius:inherit; + border-top-right-radius:inherit; + font-size:76px; + height:180px; + line-height:178px; + min-width:240px; + overflow:hidden; + width:100% +} +.context-avatar img{ + bottom:0; + left:0; + margin:auto 0; + position:absolute; + top:0 +} +.big-avatar{ + -moz-border-radius:9px; + -webkit-border-radius:9px; + border-radius:9px; + font-size:80px; + height:260px; + line-height:260px; + width:260px +} +.shared-data .user-card-verified{ + display:none +} +.out-shared-blocks-view .avatar-wrapper,.shared-blocks-view .avatar-wrapper{ + margin:9px 0 6px 8px; + z-index:2 +} +#mobile-ui-contact-card .avatar-wrapper,#mobile-ui-contact-card .mobile.semi-big-avatar{ + -moz-border-radius:48px; + -webkit-border-radius:48px; + border-radius:48px; + box-shadow:0 1px 4px 0 rgba(0, 0, 0, .25); + display:block; + height:96px; + margin:0 auto; + position:relative; + width:96px +} +.participantsContainer>.call{ + height:60px; + width:auto +} +.mobile.semi-big-avatar img{ + -moz-border-radius:9px; + -webkit-border-radius:9px; + border-radius:9px; + display:block; + height:96px; + margin:0 auto; + position:relative; + width:96px +} +.group-chat .chat-right-pad .small-rounded-avatar{ + font-size:14px; + line-height:24px; + margin-top:4px +} +.group-chat .chat-right-pad .small-rounded-avatar,.group-chat .chat-right-pad .small-rounded-avatar:before{ + border:0 solid transparent; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + box-shadow:none; + height:24px; + width:24px +} +.group-chat .chat-right-pad .small-rounded-avatar:before{ + content:""; + display:block; + margin:0; + position:absolute +} +.group-chat .chat-right-pad .avatar-letter:before{ + content:attr(data-user-letter); + height:100%; + left:0; + line-height:24px; + position:absolute; + text-align:center; + width:100% +} +.group-chat .chat-right-pad .small-rounded-avatar img{ + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + height:24px; + width:24px +} +.color1{ + background:#55d2f0; + background:linear-gradient(45deg, #55d2f0, #2ba6de) +} +.color2{ + background:#bc2086; + background:linear-gradient(45deg, #bc2086, #880e4f) +} +.color3{ + background:#ffd200; + background:linear-gradient(45deg, #ffd200, orange) +} +.color4{ + background:#5fdb00; + background:linear-gradient(45deg, #5fdb00, #31b500) +} +.color5{ + background:#00bdb2; + background:linear-gradient(45deg, #00bdb2, #00897b) +} +.color6{ + background:#ffa700; + background:linear-gradient(45deg, #ffa700, #ff6f00) +} +.color7{ + background:#e4269b; + background:linear-gradient(45deg, #e4269b, #c51162) +} +.color8{ + background:#ff626c; + background:linear-gradient(45deg, #ff626c, #ff333a) +} +.color9{ + background:#ff8989; + background:linear-gradient(45deg, #ff8989, #ff5252) +} +.color10{ + background:#9aeaff; + background:linear-gradient(45deg, #9aeaff, #61d2ff) +} +.color11{ + background:#00d5e2; + background:linear-gradient(45deg, #00d5e2, #00acc1) +} +.color12{ + background:#ffeb00; + background:linear-gradient(45deg, #ffeb00, #ffd300) +} +.fm-account-avatar{ + border-radius:50%; + cursor:pointer; + height:96px; + margin:0 auto; + overflow:hidden; + width:96px +} +.fm-account-avatar .avatar-wrapper{ + font-size:46px; + height:96px; + line-height:96px; + margin:0 auto; + width:96px +} +.fm-account-avatar .avatar-wrapper img{ + height:96px; + width:96px +} +.fm-account-avatar .avatar-wrapper{ + padding:0 +} +.account-avatar .avatar-wrapper{ + font-size:24px; + line-height:64px; + margin:0 auto +} +.account-avatar .avatar-wrapper img{ + border-radius:8px; + height:64px; + width:64px +} + +@font-face{ + font-family:LatoWebBlack; + font-style:normal; + font-weight:400; + src:url(../fonts/lato-black-ie.eot?v=343dd4ddfb09df0e); + src:url(../fonts/lato-black-ie.eot?&v=343dd4ddfb09df0e#iefix) format("embedded-opentype"), + url(../fonts/lato-black-ie.woff2?v=d2cbbe506f76dcbf) format("woff2"), + url(../fonts/lato-black-ie.woff?v=c7866eab5ff3f0dd) format("woff"), + url(../fonts/lato-black-ie.ttf?v=ff537a0480944661) format("truetype") +} +@font-face{ + font-family:LatoWebBold; + font-style:normal; + font-weight:400; + src:url(../fonts/lato-bold-ie.eot?v=5fb3cf654cb4fb92); + src:url(../fonts/lato-bold-ie.eot?&v=5fb3cf654cb4fb92#iefix) format("embedded-opentype"), + url(../fonts/lato-bold-ie.woff2?v=df081df4f807aa88) format("woff2"), + url(../fonts/lato-bold-ie.woff?v=ec0a2164bb63d064) format("woff"), + url(../fonts/lato-bold-ie.ttf?v=1472bed2b8019f21) format("truetype") +} +@font-face{ + font-family:LatoWeb; + font-style:normal; + font-weight:400; + src:url(../fonts/lato-regular-ie.eot?v=55e89186769a3b0b); + src:url(../fonts/lato-regular-ie.eot?&v=55e89186769a3b0b#iefix) format("embedded-opentype"), + url(../fonts/lato-regular-ie.woff2?v=2aaea217993c48e0) format("woff2"), + url(../fonts/lato-regular-ie.woff?v=3af6ce766eb59421) format("woff"), + url(../fonts/lato-regular-ie.ttf?v=b170a5d9ef8ead66) format("truetype") +} +@font-face{ + font-family:LatoWebLight; + font-style:normal; + font-weight:400; + src:url(../fonts/lato-light-ie.eot?v=85af315cfab5197f); + src:url(../fonts/lato-light-ie.eot?&v=85af315cfab5197f#iefix) format("embedded-opentype"), + url(../fonts/lato-light-ie.woff2?v=3af05cb63f7f4e02) format("woff2"), + url(../fonts/lato-light-ie.woff?v=13443068e98f9ec6) format("woff"), + url(../fonts/lato-light-ie.ttf?v=f76f6d67420912a) format("truetype") +} +@font-face{ + font-family:LatoWebSemibold; + font-style:normal; + font-weight:400; + src:url(../fonts/lato-semibold-ie.eot?v=700ff58db74c2436); + src:url(../fonts/lato-semibold-ie.eot?&v=700ff58db74c2436#iefix) format("embedded-opentype"), + url(../fonts/lato-semibold-ie.woff2?v=6cfae8ad3757353) format("woff2"), + url(../fonts/lato-semibold-ie.woff?v=47074708112e1216) format("woff"), + url(../fonts/lato-semibold-ie.ttf?v=85d3593592c532b1) format("truetype") +} +@media{ +@font-face{ + font-family:LatoWeb; + font-style:normal; + font-weight:400; + src:url(../fonts/Lato-Regular.woff2?v=6343dd45044b0726) format("woff2"), + url(../fonts/Lato-Regular.woff?v=5f466d6db7299fdd) format("woff"), + url(../fonts/Lato-Regular.ttf?v=468fde3aca3cea48) format("truetype"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:LatoWebLight; + font-style:normal; + font-weight:300; + src:url(../fonts/Lato-Light.woff2?v=8399226c9629aa5d) format("woff2"), + url(../fonts/Lato-Light.woff?v=110a917734daa0ef) format("woff"), + url(../fonts/Lato-Light.ttf?v=db8c515f472e86d2) format("truetype"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:LatoWebSemibold; + font-style:normal; + font-weight:400; + src:url(../fonts/Lato-Semibold.woff2?v=7194963095272d0e) format("woff2"), + url(../fonts/Lato-Semibold.woff?v=bf1e1f7d8f1c8671) format("woff"), + url(../fonts/Lato-Semibold.ttf?v=54430cb5ea6d08df) format("truetype"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:LatoWebBlack; + font-style:normal; + font-weight:400; + src:url(../fonts/Lato-Black.woff2?v=b8ffacccb3a17289) format("woff2"), + url(../fonts/Lato-Black.woff?v=f31a4f245bd79d61) format("woff"), + url(../fonts/Lato-Black.ttf?v=a02987a1426091c8) format("truetype"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:LatoWebSemibold; + font-style:normal; + font-weight:400; + src:url(../fonts/Lato-Semibold.woff2?v=7194963095272d0e) format("woff2"), + url(../fonts/Lato-Semibold.woff?v=bf1e1f7d8f1c8671) format("woff"), + url(../fonts/Lato-Semibold.ttf?v=54430cb5ea6d08df) format("truetype"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:LatoWebBold; + font-style:normal; + font-weight:400; + src:url(../fonts/Lato-Bold.woff2?v=68dc6f1014d3c7a0) format("woff2"), + url(../fonts/Lato-Bold.woff?v=49e80a82734920f5) format("woff"), + url(../fonts/Lato-Bold.ttf?v=73ff8d68314b953a) format("truetype"); + text-rendering:optimizeLegibility +} +} +@font-face{ + font-family:brandon_textbold_italic; + font-style:normal; + font-weight:400; + src:url(../fonts/brandontext-bolditalic-webfont.eot?v=8221cbd8cff70c45); + src:url(../fonts/brandontext-bolditalic-webfont.eot?&v=8221cbd8cff70c45#iefix) format("embedded-opentype"), + url(../fonts/brandontext-bolditalic-webfont.woff?v=6fcfc07dc947d6a1) format("woff"), + url(../fonts/brandontext-bolditalic-webfont.ttf?v=f47b81ce4e861b1c) format("truetype"), + url(../fonts/brandontext-bolditalic-webfont.svg?v=216553d5294b4b0c#brandon_textbold_italic) format("svg"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:brandon_textmedium; + font-style:normal; + font-weight:400; + src:url(../fonts/brandontext-medium-webfont.eot?v=b44c8e8be01a5f2d); + src:url(../fonts/brandontext-medium-webfont.eot?&v=b44c8e8be01a5f2d#iefix) format("embedded-opentype"), + url(../fonts/brandontext-medium-webfont.woff?v=c03e130b8e9ec3b5) format("woff"), + url(../fonts/brandontext-medium-webfont.ttf?v=5de499d97d6304ef) format("truetype"), + url(../fonts/brandontext-medium-webfont.svg?v=105925202388e26e#brandon_textmedium) format("svg") +} +@font-face{ + font-family:source_sans_probold; + font-style:normal; + font-weight:400; + src:url(../fonts/SourceSansPro-Bold.eot?v=7961f53a3682d0a); + src:url(../fonts/SourceSansPro-Bold.eot?&v=7961f53a3682d0a#iefix) format("embedded-opentype"), + url(../fonts/SourceSansPro-Bold.woff2?v=da5e1607216b7fc7) format("woff2"), + url(../fonts/SourceSansPro-Bold.woff?v=fda5f3836bcc817e) format("woff"), + url(../fonts/SourceSansPro-Bold.ttf?v=dc8b4b671d164af9) format("truetype"), + url(../fonts/SourceSansPro-Bold.svg?v=b4f58d8956fd67e8#source_sans_probold) format("svg"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:source_sans_proextralight; + font-style:normal; + font-weight:400; + src:url(../fonts/SourceSansPro-ExtraLight.eot?v=107243300395ef1a); + src:url(../fonts/SourceSansPro-ExtraLight.eot?&v=107243300395ef1a#iefix) format("embedded-opentype"), + url(../fonts/SourceSansPro-ExtraLight.woff2?v=3f0366e6fe211607) format("woff2"), + url(../fonts/SourceSansPro-ExtraLight.woff?v=a219c8b7bb559423) format("woff"), + url(../fonts/SourceSansPro-ExtraLight.ttf?v=1bc088fa40f71fab) format("truetype"), + url(../fonts/SourceSansPro-ExtraLight.svg?v=7837652bb14bb186#source_sans_proextralight) format("svg"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:source_sans_prolight; + font-style:normal; + font-weight:400; + src:url(../fonts/SourceSansPro-Light.eot?v=706f32b6cf66f3c3); + src:url(../fonts/SourceSansPro-Light.eot?&v=706f32b6cf66f3c3#iefix) format("embedded-opentype"), + url(../fonts/SourceSansPro-Light.woff2?v=15520f609f83aa2c) format("woff2"), + url(../fonts/SourceSansPro-Light.woff?v=4862250bfb04456c) format("woff"), + url(../fonts/SourceSansPro-Light.ttf?v=bd1e2f8d05b4e331) format("truetype"), + url(../fonts/SourceSansPro-Light.svg?v=1b564b8b86aa2366#source_sans_prolight) format("svg"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:source_sans_proregular; + font-style:normal; + font-weight:400; + src:url(../fonts/SourceSansPro-Regular.eot?v=7a23988b42c3d72e); + src:url(../fonts/SourceSansPro-Regular.eot?&v=7a23988b42c3d72e#iefix) format("embedded-opentype"), + url(../fonts/SourceSansPro-Regular.woff2?v=f71f612f60d5bb7e) format("woff2"), + url(../fonts/SourceSansPro-Regular.woff?v=aa7ff97ad412e8ba) format("woff"), + url(../fonts/SourceSansPro-Regular.ttf?v=717077d422dbdb37) format("truetype"), + url(../fonts/SourceSansPro-Regular.svg?v=843c1fa885b6a595#source_sans_proregular) format("svg"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:source_sans_prosemibold; + font-style:normal; + font-weight:400; + src:url(../fonts/SourceSansPro-Semibold.eot?v=511d4784715b81ab); + src:url(../fonts/SourceSansPro-Semibold.eot?&v=511d4784715b81ab#iefix) format("embedded-opentype"), + url(../fonts/SourceSansPro-Semibold.woff2?v=c0e7b22bf4bc19e6) format("woff2"), + url(../fonts/SourceSansPro-Semibold.woff?v=e35a947e35d3236d) format("woff"), + url(../fonts/SourceSansPro-Semibold.ttf?v=fd1e8d9d703d72c1) format("truetype"), + url(../fonts/SourceSansPro-Semibold.svg?v=216ca3a9395cc6a9#source_sans_prosemibold) format("svg"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:Open Sans Semibold Italic; + font-style:normal; + font-weight:400; + src:url(../fonts/OpenSans-SemiboldItalic.eot?v=dec271ef2f84efb2); + src:url(../fonts/OpenSans-SemiboldItalic.eot?&v=dec271ef2f84efb2#iefix) format("embedded-opentype"), + url(../fonts/OpenSans-SemiboldItalic.woff2?v=955ae5762134a8a0) format("woff2"), + url(../fonts/OpenSans-SemiboldItalic.woff?v=6eecefb2aab3076a) format("woff"), + url(../fonts/OpenSans-SemiboldItalic.ttf?v=438d940fa5797744) format("truetype"), + url(../fonts/OpenSans-SemiboldItalic.svg?v=96f8213fa1fd2812#open_sanssemibold_italic) format("svg"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:Open Sans Italic; + font-style:normal; + font-weight:400; + src:url(../fonts/opensans-italic-webfont.eot?v=54daf94708d07709); + src:url(../fonts/opensans-italic-webfont.eot?&v=54daf94708d07709#iefix) format("embedded-opentype"), + url(../fonts/opensans-italic-webfont.woff2?v=efc4ccc57de24f72) format("woff2"), + url(../fonts/opensans-italic-webfont.woff?v=efa9d2ec075db639) format("woff"), + url(../fonts/opensans-italic-webfont.ttf?v=cc8c9b577f8c2b32) format("truetype"), + url(../fonts/opensans-italic-webfont.svg?v=6fa8ad791b565bf6#open_sansitalic) format("svg"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:source_code_proregular; + font-style:normal; + font-weight:400; + src:url(../fonts/sourcecodepro-regular-webfont.woff2?v=ab4dd75cab235399) format("woff2"), + url(../fonts/sourcecodepro-regular-webfont.woff?v=d178fa354c0c9c71) format("woff"), + url(../fonts/sourcecodepro-regular-webfont.ttf?v=756e1baa3150f33d) format("truetype"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:VentiCF-Bold; + font-style:normal; + font-weight:400; + src:url(../fonts/VentiCF-Bold.eot?&v=f7f1b6fe901d6d3f#iefix) format("embedded-opentype"), + url(../fonts/VentiCF-Bold.otf?v=d989e83523c9a60) format("opentype"), + url(../fonts/VentiCF-Bold.woff?v=fc4caa2c29fe70a) format("woff"), + url(../fonts/VentiCF-Bold.ttf?v=b189f4564300cc6d) format("truetype"), + url(../fonts/VentiCF-Bold.svg?v=852ecf4a131dbe03#VentiCF-Bold) format("svg"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:montserrat; + font-style:normal; + font-weight:400; + src:url(../fonts/montserrat-regular-webfont.eot?v=98b8bc7c84bc427e); + src:url(../fonts/montserrat-regular-webfont.eot?&v=98b8bc7c84bc427e#iefix) format("embedded-opentype"), + url(../fonts/montserrat-regular-webfont.woff?v=b120c269e3d6fb2b) format("woff"), + url(../fonts/montserrat-regular-webfont.ttf?v=d20a1a8331c91487) format("truetype"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:montserrat_semibold; + font-style:normal; + font-weight:400; + src:url(../fonts/montserrat-semibold-webfont.eot?v=26cdfe7ce008628d); + src:url(../fonts/montserrat-semibold-webfont.eot?&v=26cdfe7ce008628d#iefix) format("embedded-opentype"), + url(../fonts/montserrat-semibold-webfont.woff?v=bfb95af2fbe9ccc8) format("woff"), + url(../fonts/montserrat-semibold-webfont.ttf?v=147a6c45405114b2) format("truetype"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:montserrat_bold; + font-style:normal; + font-weight:400; + src:url(../fonts/montserrat-bold-webfont.eot?v=844dec7080c609eb); + src:url(../fonts/montserrat-bold-webfont.eot?&v=844dec7080c609eb#iefix) format("embedded-opentype"), + url(../fonts/montserrat-bold-webfont.woff2?v=bb1c555777a0c2c) format("woff2"), + url(../fonts/montserrat-bold-webfont.woff?v=9b68920ebabf9915) format("woff"), + url(../fonts/montserrat-bold-webfont.ttf?v=73235b913ea2c683) format("truetype"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:montserrat_light; + font-style:normal; + font-weight:400; + src:url(../fonts/montserrat-light-webfont.eot?v=5be462dbc0a9622); + src:url(../fonts/montserrat-light-webfont.eot?&v=5be462dbc0a9622#iefix) format("embedded-opentype"), + url(../fonts/montserrat-light-webfont.woff2?v=86f7972265cf2175) format("woff2"), + url(../fonts/montserrat-light-webfont.woff?v=6a8d1860c1de5b5f) format("woff"), + url(../fonts/montserrat-light-webfont.ttf?v=4480fd3d75859d98) format("truetype"); + text-rendering:optimizeLegibility +} +@font-face{ + font-family:Source Code Pro; + src:url(../fonts/SourceCodePro-Regular.ttf) +} + +.privacy-company h1{ + padding:45px 0 20px +} +.privacy-company-block{ + padding:35px 0 +} +.privacy-company-icon{ + background-image:url(../images/mega/privacy-sprite.png); + background-position:0 0; + background-repeat:no-repeat; + float:left; + height:120px; + width:171px +} +.privacy-company-icon.lock{ + background-position:left -204px; + height:126px +} +.privacy-company-icon.future{ + background-position:left -404px; + height:132px +} +.privacy-company-txt{ + margin-left:171px +} +.privacy-company-header{ + color:#f0373b; + font-family:Open Sans Semibold Italic,Arial; + font-size:16px; + letter-spacing:-.1px; + line-height:20px; + padding:2px 0 0 +} +.privacy-company-txt p{ + color:#3f4646; + font-size:14px; + line-height:26px; + margin:0; + padding:7px 0 9px +} +.privacy-company-bott .st-quote-left,.privacy-company-bott .st-quote-right{ + background-image:url(../images/mega/privacy-sprite.png); + background-position:-10px -650px; + background-repeat:no-repeat +} +.privacy-company-bott .st-quote-right{ + background-position:-70px -748px +} +.copyrights-dispute-bottom{ + background:var(--surface-grey-1); + margin-top:24px; + padding:20px +} +#copyrights-dispute-bottom2{ + margin-top:8px +} +.fmholder div.main-mid-pad.new-bottom-pages *{ + user-select:text !important; + -webkit-user-select:text !important +} +.main-mid-pad.new-bottom-pages.copyrights-dispute-bottom{ + padding:48px 15px 46px +} +.copyrights-dispute-bottom .new-registration-checkbox .checkboxOff,.copyrights-dispute-bottom .new-registration-checkbox .checkboxOn{ + margin:2px 0 0 +} +.copyrights-dispute-bottom .new-registration-checkbox .radio-txt{ + display:block; + float:none; + line-height:24px; + margin:-1px 0 0 35px; + padding:0; + text-indent:0 +} +.copyrights-agent-section{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + margin:0 auto; + padding:0 20px 10px; + width:980px +} +.bp-main h1,.new-bottom-pages h1{ + color:var(--text-color-high); + font:var(--text-h1); + font-weight:400; + margin:0; + padding-top:25px +} +.bp-main h2,.new-bottom-pages h2{ + color:var(--text-color-high); + font:var(--text-h2); + margin:0; + padding:21px 0 0 +} +.new-bottom-pages.cookie-policy h1,.new-bottom-pages.copyrights-page h1,.new-bottom-pages.privacy-policy h1,.new-bottom-pages.takedown-guidance h1,.new-bottom-pages.terms h1{ + font:var(--text-h1-bold) +} +.new-bottom-pages.cookie-policy h2,.new-bottom-pages.copyrights-page h2,.new-bottom-pages.privacy-policy h2,.new-bottom-pages.takedown-guidance h2,.new-bottom-pages.terms h2{ + font:var(--text-h3-bold); + font-style:italic +} +.new-bottom-pages.cookie-policy h3,.new-bottom-pages.copyrights-page h3,.new-bottom-pages.privacy-policy h3,.new-bottom-pages.takedown-guidance h3,.new-bottom-pages.terms h3{ + font:var(--text-h2-bold) +} +.bp-main p,.new-bottom-pages p,.new-bottom-pages p span.text{ + color:var(--text-color-medium); + font:var(--text-body1); + margin:0; + padding-top:25px +} +.new-bottom-pages p span.text{ + -webkit-padding-start:34px; + display:block; + padding-inline-start:34px; + padding-top:0 +} +.new-bottom-pages:not(.terms):not(.privacy-policy):not(.copyrights-page) p span.text{ + color:var(--text-color-low) +} +.new-bottom-pages h2 span.text{ + display:block +} +.bottom-page-txt-pad,.new-bottom-pages h2 span.text{ + -webkit-padding-start:34px; + padding-inline-start:34px +} +.new-bottom-pages h2.list span.text,.new-bottom-pages p.list span.text{ + -webkit-padding-start:75px; + padding-inline-start:75px +} +.new-bottom-pages h2.sub-list span.text,.new-bottom-pages p.sub-list span.text{ + -webkit-padding-start:125px; + padding-inline-start:125px +} +.new-bottom-pages h2 span.number,.new-bottom-pages p span.number{ + border:2px solid #b2b2b2; + -webkit-border-radius:100%; + -moz-border-radius:100%; + border-radius:100%; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + color:#999; + float:left; + font-family:source_sans_prosemibold,Arial; + font-size:13px; + height:24px; + line-height:20px; + margin:2px 0 0; + padding:0; + text-align:center; + width:24px +} +.new-bottom-pages h2.list span.number,.new-bottom-pages h2.sub-list span.number,.new-bottom-pages p.list span.number,.new-bottom-pages p.sub-list span.number{ + background-color:#b2b2b2; + -webkit-border-radius:15px; + -moz-border-radius:15px; + border-radius:15px; + color:#fff; + margin:2px 0 0 30px; + padding:0 5px 0 4px; + width:auto +} +.new-bottom-pages h2.sub-list span.number,.new-bottom-pages p.sub-list span.number{ + margin:2px 0 0 70px +} +.bottom-pages-dialog a,.download.error-text a,.new-bottom-page h2 a,.new-bottom-page h2 span.red,.new-bottom-page li a,.new-bottom-page p a,.new-bottom-page p span.red,.new-bottom-pages .investors-pdf-block a,.new-bottom-pages li a,.new-bottom-pages p a{ + color:var(--text-color-error); + overflow-wrap:break-word +} +.mobile .investors-pdf-block{ + font-size:14px; + line-height:24px; + padding:20px 0 +} +.new-bottom-pages h2 span.number,.new-bottom-pages h2.list span.number,.new-bottom-pages h2.sub-list span.number{ + margin:0 10px 0 0 +} +.new-bottom-pages h2.list span.text{ + padding:0 0 0 44px +} +.new-bottom-pages h2.sub-list span.text{ + padding:0 0 0 57px +} +.main-mid-pad.new-bottom-pages,.new-bottom-pages{ + padding:46px 40px 73px +} +.new-bottom-pages ul{ + padding-left:15px +} +.new-bottom-pages.takedown-guidance ol li,.new-bottom-pages ul li{ + color:#333; + font-size:14px; + line-height:26px; + padding-left:3px +} +.new-bottom-pages.cookie-policy ul li,.new-bottom-pages.takedown-guidance ul li{ + list-style:disc +} +.new-bottom-pages.takedown-guidance ol li{ + list-style:decimal +} +.bottom-pages-dialog .bp-main hr,.new-bottom-pages hr{ + background-color:#e5e5e5; + border:0; + height:1px; + margin:28px -20px 6px; + padding:0 +} +.new-bottom-pages.credits{ + overflow:hidden +} +.credits-main-pad{ + font-size:0; + margin:-3px -25px; + text-align:center +} +.credits-block{ + border-radius:5px; + box-shadow:0 0 0 2px #d9d9d9; + box-sizing:border-box; + display:inline-block; + margin:50px 25px 3px; + max-width:280px; + min-height:200px; + padding:20px; + -webkit-transition:box-shadow .2s ease-in-out; + transition:box-shadow .2s ease-in-out; + vertical-align:top; + width:100% +} +.credits-block:hover{ + box-shadow:0 0 0 5px #d42400 +} +.credits-logo-block{ + display:block; + height:83px +} +.credits-logo-block img{ + max-width:235px; + width:100% +} +.credits-description{ + color:#333; + display:block; + font-size:14px; + line-height:26px +} +.credits-title{ + color:#666; + font-size:20px; + line-height:31px; + padding:5px 0 0 +} +.credits-info,.credits-title{ + display:block; + font-family:Open Sans Semibold Italic,Arial; + letter-spacing:-.1px +} +.credits-info{ + color:#d82d00; + font-size:13px; + line-height:24px; + padding-top:2px +} +.nihilogics.credits-logo-block img{ + margin:-10px 0 0 +} +.nihilogics.credits-logo-block .credits-info{ + margin:-20px 0 0 +} +.standford img{ + float:left; + margin:-3px -180px 0 0 +} +body.bottom-pages .fmholder{ + overflow:hidden; + overflow-y:auto; + position:relative +} +body.bottom-pages.mobile .fmholder{ + overflow:auto +} +html.gbot{ + overflow-y:scroll +} +.gbot body.bottom-pages .fmholder,.gbot body.bottom-pages:not(.mobile){ + overflow:visible +} +.main-scroll-block{ + overflow-x:hidden +} +.absolute-pos{ + left:0; + position:absolute; + z-index:1 +} +.nav-overlay{ + background-color:rgba(0, 0, 0, .5); + bottom:0; + height:100%; + position:fixed; + top:66px; + width:100%; + z-index:90 +} +.bottom-page .top-head{ + background-color:initial; + position:absolute; + -webkit-transition:background-color .2s ease-in-out,top .6s ease-in-out; + transition:background-color .2s ease-in-out,top .6s ease-in-out; + width:100%; + z-index:200 +} +.bottom-page .top-head:after{ + display:none +} +.bottom-page .top-head.floating{ + background-color:#fff; + height:60px; + padding-bottom:14px; + position:fixed; + top:-62px +} +.bottom-page .top-head.floating.activated{ + top:0 +} +.bottom-page .logo:not(.bottom-menu){ + background-position:-6px -773px +} +.bottom-page.light-blue-top .top-head,.bottom-page.light-blue-top .top-head.floating,.bottom-page.light-grey-top .top-head,.bottom-page.light-grey-top .top-head.floating{ + background-color:var(--stroke-main) +} +.bottom-page.top-bl{ + box-sizing:border-box; + padding-top:118px; + table-layout:fixed +} +.mobile .bottom-page.top-bl{ + padding-top:0 +} +.bottom-page.top-bl.light-grey{ + background-color:#fafafa +} +.bottom-page.top-bl .table{ + overflow:hidden; + overflow:visible +} +.mobile .bottom-page.top-bl{ + max-height:1024px +} +.transition{ + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.centered-txt{ + text-align:center +} +.left-txt-align{ + text-align:left +} +.right-txt-align{ + text-align:right +} +#fmholder,.fmholder{ + background-color:var(--surface-main); + background-image:none; + height:100%; + overflow-x:hidden; + overflow-y:hidden +} +.fmholder .bottom-page.scroll-block{ + display:block; + height:100%; + position:relative +} +.fmholder .bottom-page.scroll-block.placeholder{ + background:var(--surface-main) +} +.fmholder .bottom-page.about .top-head.floating,.fmholder .bottom-page.sign .top-head.floating{ + box-shadow:0 1px 0 0 var(--stroke-grey-2) +} +.bottom-page.vertical-centered-bl{ + display:table; + height:100%; + position:relative; + width:100% +} +.bottom-page.vertical-centered-bl.fixed{ + table-layout:fixed +} +.bottom-page.vertical-centered-bl.top-bl{ + height:auto +} +.bottom-page.vertical-centered-bl.active{ + height:73px +} +.bottom-page.table-cell,.bottom-page.vertical-centered-cell{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:table-cell; + height:100%; + position:relative +} +.bottom-page.table-cell.col-2,.bottom-page.table-cell.col-3{ + height:auto +} +.bottom-page.vertical-centered-cell{ + vertical-align:middle +} +.bottom-page.horizontal-centered-bl.jobs,.bottom-page.horizontal-centered-bl.wide.jobs{ + max-width:unset; + padding:unset +} +.bottom-page.horizontal-centered-bl{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:table; + margin:0 auto; + max-width:970px; + table-layout:fixed; + text-align:center; + width:100% +} +.bottom-page.horizontal-centered-bl.side-paddings{ + padding:0 40px +} +.bottom-page.horizontal-centered-bl.right-pad{ + padding:0 13px 0 3px +} +.bottom-page.top-header{ + box-sizing:border-box; + color:rgba(0, 0, 0, .7); + font-size:18px; + line-height:26px; + margin:0 auto; + max-width:810px; + opacity:.8; + padding:47px 15px 0; + text-align:center +} +.bottom-page.top-header span{ + color:#eb4444 +} +.bottom-page.scroll-button{ + bottom:27px; + color:#666; + cursor:pointer; + font-family:source_sans_probold; + font-size:14px; + left:0; + line-height:18px; + position:absolute; + text-align:center; + width:100% +} +body:not(.mobile) .bottom-page.scroll-button:hover{ + opacity:1 +} +.bottom-page.scroll-button span{ + display:inline-block; + padding:11px 0 0; + vertical-align:top +} +.bottom-page.scroll-button.big span{ + color:#242732; + display:block; + font-family:var(--text-font-family-second-regular); + font-size:18px; + line-height:24px; + padding:0 +} +.bottom-page.scroll-icon{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-position:2px -3330px; + background-repeat:no-repeat; + display:inline-block; + height:20px; + margin:10px 6px 0 0; + vertical-align:top; + width:18px +} +.bottom-page.scroll-button.big .scroll-icon{ + background-position:-28px -3330px; + display:block; + margin:20px auto 0 +} +.bottom-page.scroll-button.mid{ + bottom:auto; + position:relative; + top:auto +} +.bottom-page.scroll-button.mid .scroll-icon{ + background-position:-33px -4934px; + display:block; + margin:17px auto 0 +} +.bottom-page.white-block{ + background-color:#fff +} +.bottom-page.transparent,.bottom-page.white-block{ + font-size:0; + overflow:hidden +} +.bottom-page.dark-blue-gradient{ + bbackground:#131d24; + background:-moz-linear-gradient(top, #131d24 0, #2b2e30 46%, #293033 100%); + background:-webkit-linear-gradient(top, #131d24, #2b2e30 46%, #293033); + background:linear-gradient(180deg, #131d24 0, #2b2e30 46%, #293033); + font-size:0; + overflow:hidden; + width:100% +} +.bottom-page.light-grey-gradient{ + background:#fff; + background:-moz-linear-gradient(top, #fff 0, #f8f8f8 100%); + background:-webkit-linear-gradient(top, #fff, #f8f8f8); + background:linear-gradient(180deg, #fff 0, #f8f8f8); + font-size:0; + overflow:hidden; + width:100% +} +.bottom-page.light-grey-gradient.inverted{ + background:#f8f8f8; + background:-moz-linear-gradient(top, #f8f8f8 0, #fff 100%); + background:-webkit-linear-gradient(top, #f8f8f8, #fff); + background:linear-gradient(180deg, #f8f8f8 0, #fff); + font-size:0; + overflow:hidden; + width:100% +} +.dark-blue-bg .bottom-page.big-header,.dark-blue-bg .bottom-page.small-info,.dark-blue-gradient .bottom-page.big-header,.dark-blue-gradient .bottom-page.small-info{ + color:#fff +} +.bottom-page.grey-block{ + background-color:#fafafa; + font-size:0; + overflow:hidden; + width:100% +} +.download .bottom-page.grey-block{ + overflow:visible +} +.bottom-page.blue-block{ + background-color:#f3f6f8; + font-size:0; + overflow:hidden +} +.bottom-page.vertical-centered-bl.top-bl{ + table-layout:fixed +} +.bottom-page.dark-grey-block{ + background-color:#f0f3f5; + font-size:0; + overflow:hidden +} +.bottom-page.grey-blue-block{ + background:#f0f3f5; + background-image:linear-gradient(180deg, #f0f3f5 0, #fff); + background:-moz-linear-gradient(top, #f0f3f5 0, #fff 100%); + background:-webkit-linear-gradient(top, #f0f3f5, #fff); + font-size:0; + overflow:hidden +} +.bottom-page.mid-grey-block{ + background-color:#f6f6f6; + font-size:0; + overflow:hidden +} +.bottom-page.dark-bluegrey-block{ + background-color:#262f3b; + font-size:0; + overflow:hidden +} +.advertise-chat.bottom-page.dark-bluegrey-block{ + overflow:visible +} +.bottom-page.very-dark-blue-bg{ + background:#12151c; + background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMTAwJSI+CiAgICA8c3RvcCBvZmZzZXQ9IjEwJSIgc3RvcC1jb2xvcj0iIzEyMTUxYyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwJSIgc3RvcC1jb2xvcj0iIzEyMTUxYyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM1YjY2NzIiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background:-moz-linear-gradient(-85deg, #12151c 10%, #12151c 10%, #5b6672 100%); + background:-webkit-linear-gradient(-85deg, #12151c 10%, #12151c 0, #5b6672); + background:linear-gradient(165deg, #12151c 10%, #12151c 0, #5b6672) +} +.bottom-page.grey-graident{ + background:#fafafa; + background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZhZmFmYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background:-moz-linear-gradient(top, #fafafa 0, #fff 100%); + background:-webkit-linear-gradient(top, #fafafa, #fff); + background:linear-gradient(180deg, #fafafa 0, #fff) +} +.bottom-page.white-to-grey{ + background:#fff; + background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjYmNiY2IiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background:-moz-linear-gradient(top, #fff 0, #cbcbcb 100%); + background:-webkit-linear-gradient(top, #fff, #cbcbcb); + background:linear-gradient(180deg, #fff 0, #cbcbcb); + font-size:0 +} +.bottom-page.horizontal-graident{ + background:#fafafa; + background:-moz-linear-gradient(left, #fafafa 0, #e6e6e6 100%); + background:-webkit-linear-gradient(left, #fafafa, #e6e6e6); + background:linear-gradient(90deg, #fafafa 0, #e6e6e6) +} +.bottom-page.mid-header{ + color:#777; + font-size:18px; + line-height:32px; + max-width:810px; + padding:0 15px 14px +} +.bottom-page.large-header,.bottom-page.mid-header{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + margin:0 auto +} +.bottom-page.large-header{ + color:#333; + font-family:var(--text-font-family-second-light); + font-size:36px; + line-height:48px; + max-width:890px; + padding:0 0 14px +} +.bottom-page.large-header.big-txt{ + font-size:40px +} +.left-text{ + text-align:left +} +.bottom-page.semibig-header{ + color:#333; + font-family:LatoWeb,\ source_sans_proregular,Arial; + font-size:20px; + line-height:32px; + margin:0 auto; + max-width:810px; + padding:0 0 14px +} +.bottom-page.semibig-header.montserrat{ + font-family:var(--text-font-family-second-regular) +} +.inline-block .bottom-page.mid-header{ + padding-left:0; + padding-right:0 +} +.bottom-page.mid-header.small-pad{ + padding:0 0 7px +} +.bottom-page.mid-header.no-pad{ + padding:0 +} +.bottom-page.mid-header.blue,.bottom-page.mid-header.green,.bottom-page.mid-header.red{ + color:#eb4444; + font-family:var(--text-font-family-second-regular); + line-height:22px; + padding-bottom:20px; + padding-top:4px +} +.bottom-page.mid-header.green{ + color:#3db39e +} +.bottom-page.mid-header.blue{ + color:#2ea9d3 +} +.bottom-page.small-txt{ + color:#666; + font-family:LatoWeb,Arial,sans-serif; + font-size:16px; + line-height:30px +} +.bottom-page.big-icon-info{ + color:#000; + font-family:montserrat,LatoWeb,source_sans_proregular,arial,sans-serif; + font-size:30px; + line-height:37px; + padding:15px 0 21px; + text-align:center +} +.bottom-page.big-icon-info.mid-txt{ + font-size:24px; + line-height:30px; + padding:18px 0 14px +} +.bottom-page.mid-icon-info{ + color:#666; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:16px; + line-height:26px; + padding:0 0 16px +} +.bottom-page.mid-icon-info:last-child{ + padding:0 0 10px +} +.bottom-page.mid-icon-info.short{ + font-size:16px; + line-height:24px; + margin:0 auto; + max-width:260px; + padding:0 +} +.bottom-page.mid-icon-info.no-pad{ + padding:0 +} +.bottom-page.icon-info-header{ + color:#373737; + font-family:var(--text-font-family-second-regular); + font-size:26px; + line-height:32px; + padding:26px 0 14px +} +.bottom-page.small-txt a,.bottom-page.small-txt span{ + color:#f0373b +} +.bottom-page.small-txt.no-pad{ + padding:0 +} +.bottom-page.small-txt.low-space{ + letter-spacing:0 +} +.bottom-page.small-txt .txt-pad{ + padding:0 5px +} +.bottom-page.small-txt .big{ + font-size:20px +} +.inline-block{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:inline-block; + float:none !important; + vertical-align:top +} +.bottom-page .col-2{ + width:50% +} +.bottom-page .col-3{ + width:33.333333% +} +.bottom-page .col-4{ + width:25% +} +.bottom-page .col-5{ + width:20% +} +.bottom-page .col-6{ + width:16.666666% +} +.inline-block.small-pad{ + padding:26px 15px +} +.inline-block.inner-pad,.inline-block.mid-pad{ + padding:26px 28px +} +.inline-block.mid-pad.max-width{ + max-width:485px +} +.bottom-page.vertical-pad-96{ + padding:96px 0 +} +.bottom-page.mid-pad{ + padding:27px 0 28px +} +.bottom-page.top-pad{ + padding-top:70px +} +.bottom-page.small-top-pad{ + padding-top:11px +} +.bottom-page.mid-top-pad{ + padding-top:44px +} +.bottom-page.semi-big-top-pad{ + padding-top:47px +} +.bottom-page.big-top-pad{ + padding-top:96px +} +.bottom-page.huge-top-pad{ + padding-top:100px +} +.bottom-page.ultra-huge-top-pad{ + padding-top:112px +} +.bottom-page.angle-pad{ + padding-top:236px +} +.bottom-page.bott-pad{ + padding-bottom:63px +} +.bottom-page.small-bott-pad{ + padding-bottom:42px +} +.bottom-page.big-bott-pad{ + padding-bottom:88px +} +.bottom-page.huge-bott-pad{ + padding-bottom:134px +} +.bottom-page.overflow-visible{ + overflow:visible +} +.bottom-page.big-header{ + color:#373737; + font-family:var(--text-font-family-second-light); + font-size:36px; + line-height:50px; + margin:0 auto; + max-width:940px; + padding:4px 0 12px +} +.bottom-page.big-header i,.bottom-page.big-header span{ + display:inline-block; + vertical-align:top +} +.bottom-page.big-header i{ + margin:0 10px 0 13px +} +.bottom-page.big-header.light{ + font-family:var(--text-font-family-second-light) +} +.bottom-page.big-header.bold{ + font-family:var(--text-font-family-second-bold); + padding:4px 0 86px +} +.bottom-page.big-header.max-width{ + margin:0 auto; + max-width:895px +} +.bottom-page.big-header i,.bottom-page.big-header span{ + display:inline-block; + vertical-align:top +} +.bottom-page.big-header i{ + margin:0 10px 0 13px +} +.cn .bottom-page.big-header.light,.ct .bottom-page.big-header.light,.jp .bottom-page.big-header.light,.kr .bottom-page.big-header.light{ + font-family:var(--text-font-family-second-regular) +} +.bottom-page.big-header.max-width{ + margin:0 auto; + max-width:895px +} +.bottom-page.big-header.white{ + color:#fff; + line-height:48px +} +.bottom-page.big-header.black{ + color:#000 +} +.bottom-page.big-header .light-red{ + color:#eb4444; + padding-left:20px +} +.img-description .bottom-page.big-header{ + color:#333; + padding:60px 0 27px +} +.bottom-page.big-header.mid-pad{ + padding:21px 0 31px +} +.bottom-page.big-header.small-pad{ + padding:21px 0 24px +} +.bottom-page.big-header.no-pad{ + padding:3px 0 13px +} +.bottom-page.big-header.tiny-pad{ + padding:3px 0 0 +} +.bottom-page.big-header.bott-pad{ + padding:4px 0 62px +} +.bottom-page.big-header.big-bott-pad{ + padding:4px 0 77px +} +.bottom-page.big-header.red{ + color:#eb4444 +} +.bottom-page.big-header.side-pads{ + padding-left:15px; + padding-right:15px +} +.bottom-page.big-header.top-pad{ + padding-top:30px +} +.bottom-page.big-header.wide{ + max-width:1140px +} +.bottom-page.table{ + display:table; + font-size:0; + line-height:0; + margin:0 auto; + max-width:1440px; + table-layout:fixed; + text-align:left; + width:100% +} +.side-txt .bottom-page.table-cell{ + vertical-align:top +} +.vertical-centered-cell .bottom-page.table{ + height:100% +} +.bottom-page.medium-txt{ + color:#777; + font-size:18px; + line-height:32px; + padding-bottom:10px +} +.bottom-page.medium-txt,.bottom-page.small-info{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box +} +.bottom-page.small-info{ + color:#666; + font-family:LatoWeb,source_sans_proregular; + font-size:16px; + line-height:27px; + padding:37px 0 10px +} +.bottom-page.small-info.small-pad{ + margin:-13px 0 -14px; + padding:0 +} +.bottom-page.small-info.mid-pad{ + padding:7px 0 0 +} +.bottom-page.small-info.top-pad-24{ + padding:24px 0 0 +} +.bottom-page.medium-txt.dark{ + color:#333 +} +.bottom-page.medium-txt.white{ + color:#fff +} +.bottom-page.notice-txt{ + color:#999; + font-size:12px; + line-height:15px; + padding:30px 40px 0; + position:relative; + text-align:center +} +.bottom-page.medium-txt.low-width{ + margin:0 auto; + max-width:738px; + padding:10px 15px +} +.medium-txt.small-lineheight{ + line-height:24px; + padding:8px 0 10px +} +.medium-txt.mid-width{ + line-height:26px; + margin:0 auto; + max-width:810px; + padding:14px 15px 18px +} +.medium-txt.bott-pad{ + padding-bottom:50px +} +.medium-txt.big-bott-pad{ + padding-bottom:136px +} +.bottom-page.medium-txt a{ + color:#eb4444 +} +.bottom-page.medium-txt a.underline{ + border-bottom:2px solid #ff333a; + color:#ff333a +} +.mid-green-link,.mid-green-link.small{ + color:#00c0a6; + cursor:pointer; + display:inline-block; + font-family:LatoWeb,source_sans_proregular; + font-size:18px; + line-height:22px; + margin:27px 0 0 +} +.mid-green-link.small{ + font-size:16px +} +.mid-green-link.no-pad{ + margin:0 +} +.mid-green-link,a.mid-green-link,a.mid-green-link:link{ + text-decoration:underline +} +.small-red-link{ + color:#ff333a; + cursor:pointer; + display:inline-block; + font-size:14px; + letter-spacing:.5px; + line-height:16px; + margin:19px 0 0 +} +.small-red-link i{ + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-position:-165px -7px; + background-repeat:no-repeat; + display:inline-block; + height:13px; + margin:3px 0 0 9px; + vertical-align:top; + width:8px +} +.bottom-page.left-cell{ + width:50% +} +.bottom-page.cell-40{ + width:40% +} +.bottom-page.cell-60{ + width:60% +} +.bottom-page.left-cell-35{ + vertical-align:middle; + width:35% +} +.bottom-page.left-cell-65{ + vertical-align:middle; + width:65% +} +.bottom-page.right-cell-35{ + vertical-align:middle; + width:35% +} +.bottom-page.right-cell-65{ + vertical-align:middle; + width:65% +} +.bottom-page.cell-40 .half-sized-cell{ + max-width:388px +} +.bottom-page.big-icon{ + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-position:0 -533px; + background-repeat:no-repeat; + height:102px; + margin:10px auto 26px; + padding:0; + width:102px +} +.bottom-page.big-icon.top-pad{ + margin:25px auto 26px +} +.bottom-page.big-icon.privacy{ + background-position:-5px -242px +} +.bottom-page.big-icon.cloud-b{ + background-position:-153px -242px +} +.bottom-page.big-icon.security{ + background-position:-11px -360px; + width:130px +} +.bottom-page.big-icon.transparent{ + background-position:-154px -359px +} +.bottom-page.big-icon.powerful{ + background-position:-1px -480px +} +.bottom-page.big-icon.generous{ + background-position:-156px -480px +} +.bottom-page.big-icon.connect{ + background-position:-3px -758px +} +.bottom-page.big-icon.sharing{ + background-position:-3px -877px +} +.bottom-page.big-icon.backup{ + background-position:-143px -758px +} +.bottom-page.big-icon.sync{ + background-position:-141px -876px +} +.bottom-page.big-icon.f-versioning{ + background-position:-145px -988px +} +.bottom-page.big-icon.communicate{ + background-position:-4px -991px +} +.bottom-page.big-icon.mega{ + background-position:-16px -1116px +} +.bottom-page.big-icon.global-access{ + background-position:-160px -533px +} +.bottom-page.big-icon.pass-reminder{ + background-position:-160px -2443px +} +.bottom-page.big-icon.secure{ + background-position:-173px -1234px; + height:60px; + width:64px +} +.bottom-page.big-icon.storage{ + background-position:0 -2583px +} +.bottom-page.big-icon.transfer{ + background-position:0 -2443px +} +.bottom-page.big-icon.tick{ + background-position:-160px -2583px +} +.bottom-page.big-icon.folders{ + background-position:-119px -1270px +} +.bottom-page.big-icon.arrows,.bottom-page.big-icon.folders{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png) +} +.bottom-page.big-icon.arrows{ + background-position:-119px -1400px +} +.bottom-page.big-icon.up-down{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-position:-119px -1530px +} +.bottom-page.big-icon.safe{ + background-position:-160px -383px +} +.bottom-page.big-icon.public{ + background-position:-160px -813px +} +.bottom-page.big-icon.registered-users{ + background-position:-37px -1234px; + height:60px; + width:60px +} +.bottom-page.img-description{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:inline-block; + max-width:406px; + text-align:left; + vertical-align:top; + width:100% +} +.bottom-page.left-cell .img-description{ + -webkit-padding-end:30px; + padding-inline-end:30px +} +.bottom-page.right-cell .img-description{ + -webkit-padding-start:30px; + padding-inline-start:30px +} +.bottom-page.img-description.no-pad{ + max-width:none; + padding:0 2px 0 0 +} +.bottom-page.img-description.mid-width{ + max-width:450px +} +.bottom-page.right-cell .img-description.mid-width{ + padding-left:50px +} +.bottom-page.img-description.small-pad{ + max-width:none; + padding:0 15px 0 5px +} +.left-block.img-description.small-pad{ + padding:0 5px 0 15px; + text-align:right +} +.bottom-page.right-cell{ + text-align:right; + width:50% +} +.bottom-page.bottom-align{ + vertical-align:bottom +} +.bottom-page.half-sized-cell,.bottom-page.img{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + width:100% +} +.bottom-page.half-sized-cell{ + display:inline-block; + max-width:485px; + padding-left:40px; + text-align:left +} +.bottom-page.half-sized-cell.mid-width{ + max-width:518px +} +.right .bottom-page.half-sized-cell{ + padding:0 12px 0 5px +} +.bottom-page.half-sized-cell.no-pad{ + padding:0 +} +.bottom-page.full-height{ + height:100% +} +.bottom-page.tabs-block{ + font-size:0; + padding:38px 0 42px; + text-align:center +} +.bottom-page.tab{ + border-bottom:2px solid transparent; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + cursor:pointer; + display:inline-block; + height:72px; + padding:9px 0 0; + width:120px +} +.bottom-page.tab.active{ + border-color:#ff333a +} +.bottom-page.tab-icon{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-position:1px -1941px; + display:block; + height:32px; + margin:0 auto 5px; + opacity:.3; + width:34px +} +.bottom-page.tab.active i,body:not(.mobile) .bottom-page.tab:hover i{ + opacity:1 +} +.bottom-page.tab-icon.tablet{ + background-position:1px -2001px +} +.bottom-page.tab-icon.mobile{ + background-position:7px -2061px +} +.bottom-page.tab span{ + color:#999; + display:block; + font-size:12px; + letter-spacing:.43px; + line-height:12px +} +body:not(.mobile) .bottom-page.tab:hover span{ + color:#666 +} +.bottom-page.tab-content{ + padding:34px 15px; + text-align:center +} +.bottom-btn-container{ + display:inline-block; + margin:50px 0 0; + position:relative; + text-align:center; + white-space:nowrap +} +.bottom-btn-container p{ + color:#666; + display:inline-block; + font-size:16px; + line-height:48px; + margin:0; + padding-right:32px; + position:absolute; + right:100% +} +.bottom-btn-container .bus-plan.button-48-height.red{ + background-color:#f0373a; + border-radius:4px; + box-sizing:border-box; + color:#fff; + cursor:pointer; + display:inline-block; + font-family:LatoWeb,Arial; + font-size:16px; + height:48px; + letter-spacing:1px; + line-height:48px; + min-width:100%; + overflow:hidden; + padding:0 15px; + text-align:center; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + -webkit-transition:background-color .2s ease-in-out; + transition:background-color .2s ease-in-out; + white-space:nowrap +} +body:not(.mobile) .bottom-btn-container .bus-plan.button-48-height.red:hover{ + background-color:#d90007 +} +.bottom-page.horizontal-centered-bl.wide{ + max-width:1246px; + padding:0 40px; + position:relative; + z-index:1 +} +.bottom-page.horizontal-centered-bl.ultra-wide{ + max-width:1440px; + overflow:visible; + padding:0 40px; + position:relative; + z-index:1 +} +.bottom-page.horizontal-centered-bl.mid-wide{ + max-width:1194px; + padding:0 40px +} +.video-info-block{ + display:block; + margin:20px auto 0; + text-align:center; + width:calc(100% - 36px) +} +.video-info-block span.video-duration-badge{ + background:#00bfa5; + border-radius:4px; + color:#fff; + font-size:14px; + margin:0 8px 0 0; + padding:2px 6px; + position:relative; + vertical-align:middle +} +.video-info-block span.play-video-encouragement{ + color:#818993; + font-family:LatoWeb,source_sans_proregular,sans-serif; + font-size:14px; + line-height:1.5; + vertical-align:middle +} +iframe.security-video-container{ + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.bottom-page.icon-blocks-wrap{ + margin:0 -28px; + padding-top:35px; + text-align:left +} +.icon-blocks-wrap .bottom-page.mid-icon-info{ + color:#373737; + line-height:24px; + margin:0 auto; + max-width:400px +} +.icon-blocks-wrap .bottom-page.mid-icon-info a,.icon-blocks-wrap .bottom-page.mid-icon-info a:visited{ + color:#373737; + text-decoration:underline +} +.icon-blocks-wrap .bottom-page.icon{ + margin:40px 0 0 +} +.bottom-page .transparent-button{ + border-radius:4px; + box-sizing:border-box; + color:#fafafa; + display:inline-block; + font-family:LatoWeb,Arial,sans-serif; + font-size:16px; + height:34px; + line-height:34px; + min-width:102px; + padding:0 25px; + position:relative; + text-align:center; + transition:color .2s ease-in-out,box-shadow .2s ease-in-out,background-color .2s ease-in-out; + white-space:nowrap +} +.bottom-page .transparent-button.light{ + color:#666 +} +.bottom-page .transparent-button:after{ + border-radius:inherit; + box-shadow:0 0 0 1px #fff; + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.bottom-page .transparent-button.light:after{ + box-shadow:0 0 0 1px #666 +} +.bottom-page .transparent-button:hover{ + box-shadow:0 0 0 4px hsla(0, 0%, 100%, .2) +} +.bottom-page .transparent-button.light:hover{ + box-shadow:0 0 0 4px rgba(0, 0, 0, .15) +} +.pages-nav.nav-button{ + display:inline-block; + line-height:0; + position:relative; + vertical-align:top; + width:14.2%; + z-index:2 +} +.pages-nav.nav-icon{ + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-position:0 -73px; + display:block; + height:24px; + margin:12px auto 5px; + opacity:.5; + -webkit-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out; + width:22px +} +.contrast .pages-nav.nav-icon{ + opacity:.8 +} +.nav-button.active.greyed-out .nav-icon{ + opacity:.3 +} +.nav-buttons-bl .pages-nav.nav-icon.bott-sprite{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + height:26px; + margin:8px auto 3px; + width:26px +} +.nav-buttons-bl.dark .pages-nav.nav-icon.bott-sprite{ + margin:5px auto 0 +} +.pages-nav.nav-icon.mac{ + background-position:-8px -2250px +} +.pages-nav.nav-icon.win{ + background-position:-67px -2251px +} +.download .pages-nav.nav-icon.linux{ + background-position:-127px -2251px +} +.pages-nav.nav-icon.linux{ + background-position:-188px -2251px +} +.dark .pages-nav.nav-icon.mac{ + background-position:-6px -2191px +} +.dark .pages-nav.nav-icon.win{ + background-position:-54px -2192px +} +.dark .pages-nav.nav-icon.linux{ + background-position:-99px -2193px +} +.pages-nav.button-label,.pages-nav.nav-button.active.greyed-out .button-label{ + color:#333; + display:inline-block; + font-family:source_sans_proregular,Arial; + font-size:16px; + line-height:16px; + text-align:center; + white-space:nowrap +} +.contrast .pages-nav.button-label{ + color:var(--text-color-high); + font:var(--text-body1); + letter-spacing:0 +} +.dark .pages-nav.button-label{ + color:#333; + font-size:14px; + letter-spacing:0; + line-height:20px +} +.bottom-page.table.side-txt{ + height:100px; + margin-top:61px +} +.bottom-page.nav-buttons-bl{ + background:#fff; + background:-moz-linear-gradient(top, #fff 0, #fafafa 100%); + background:-webkit-linear-gradient(top, #fff, #fafafa); + background:linear-gradient(180deg, #fff 0, #fafafa); + border-radius:3px; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + display:inline-block; + font-size:0; + height:64px; + margin:10px 0 0; + max-width:100%; + position:relative; + white-space:nowrap +} +.bottom-page.nav-buttons-bl.contrast{ + background:#fff; + background:-moz-linear-gradient(top, #fff 31%, #ebebeb 100%); + background:-webkit-linear-gradient(top, #fff 31%, #ebebeb); + background:linear-gradient(180deg, #fff 31%, #ebebeb); + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + box-shadow:0 1px 3px 0 rgba(0, 0, 0, .1); + margin-bottom:50px +} +.bottom-page.nav-buttons-bl.dark{ + background:#fafafa; + background:-moz-linear-gradient(top, #fafafa 0, #ccc 100%); + background:-webkit-linear-gradient(top, #fafafa, #ccc); + background:linear-gradient(180deg, #fafafa 0, #ccc); + height:56px +} +.bottom-page.nav-buttons-bl.contrast.pad{ + margin:40px 0 50px +} +.bottom-page.nav-buttons-bl:before{ + border-radius:3px; + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + height:100%; + position:absolute; + width:100% +} +.nav-buttons-bl .pages-nav.nav-button{ + border-left:1px solid rgba(0, 0, 0, .1); + box-sizing:border-box; + height:64px; + position:relative; + width:96px +} +.nav-buttons-bl.dark .pages-nav.nav-button{ + height:56px +} +.nav-buttons-bl.contrast .pages-nav.nav-button{ + border-left:1px solid rgba(0, 0, 0, .2); + width:128px +} +.nav-buttons-bl.contrast .pages-nav.nav-button *{ + position:relative +} +.contrast .pages-nav.nav-button:before{ + background-color:transparent; + border-radius:0 4px 4px 0; + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + width:100% +} +.contrast .pages-nav.nav-button:first-child:before{ + border-bottom-left-radius:4px; + border-top-left-radius:4px +} +.contrast .pages-nav.nav-button:last-child:before{ + border-bottom-right-radius:4px; + border-top-right-radius:4px +} +.contrast .pages-nav.nav-button.active:before{ + background-color:hsla(0, 0%, 100%, .8) +} +.nav-buttons-bl .pages-nav.nav-button:first-child{ + border:0 +} +.nav-buttons-bl .pages-nav.nav-icon{ + margin-top:10px +} +.top-arrow-icon{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-position:-215px -203px; + display:inline-block; + height:5px; + margin:5px 0 0 4px; + opacity:.67; + vertical-align:top; + width:8px +} +.pages-nav.nav-button.opened .top-arrow-icon,.pages-nav.nav-button:hover .top-arrow-icon{ + opacity:1 +} +@media (hover:hover){ +.contrast .pages-nav.nav-button:hover .button-label{ + color:#000 +} +.pages-nav.nav-button.active .button-label,.pages-nav.nav-button.opened .button-label,.pages-nav.nav-button:not(.disabled):hover .button-label{ + color:#171a22 +} +.contrast .nav-button:hover .nav-icon{ + opacity:1 +} +.contrast .pages-nav.nav-button:not(.disabled,.active):hover:before{ + background-color:rgba(0, 0, 0, .05) +} +} +.bottom-page.full-block{ + overflow:hidden; + position:relative +} +.bottom-page.full-block.top-border{ + border-top:1px solid rgba(0, 0, 0, .1) +} +.megacmd .bottom-page.top-bl{ + overflow-x:hidden +} +.megacmd .bottom-page.top-dark-info.medium{ + margin:0 auto; + max-width:950px +} +.megacmd .bottom-page.nav-buttons-bl.dark{ + margin-bottom:200px +} +.megacmd.linux .bottom-page.nav-buttons-bl.dark{ + margin-bottom:50px +} +.megacmd .bottom-page .megaapp-linux{ + margin-bottom:170px +} +.megacmd .bottom-page.horizontal-centered-bl.wide{ + max-width:1246px; + padding:0 40px +} +.megacmd .cmd-pad .transparent-button{ + margin-top:16px +} +.megacmd .cmd-pad .transparent-button:after{ + box-shadow:0 0 0 1px rgba(0, 0, 0, .12) +} +.bottom-page.green-block{ + background-color:#00bfa5 +} +.bottom-page.light-bg{ + background-color:#f5f5f5 +} +.bottom-page.cols-container{ + display:table; + margin:0 auto; + table-layout:fixed; + width:100% +} +.bottom-page.cols-container.horizontal-centered-bl{ + max-width:1440px; + padding:0 +} +.bottom-page.cols-container.tabs{ + table-layout:auto +} +.bottom-page.cols-container .tab-body{ + display:table-cell; + font-size:0; + line-height:0; + padding-top:8px; + vertical-align:top +} +.bottom-page.cols-container .tab-body:first-child{ + padding:0 +} +.bottom-page.cols-container .tab-body.dark{ + background:#939393; + background:-moz-linear-gradient(top, #939393 0, #565656 100%); + background:-webkit-linear-gradient(top, #939393, #565656); + background:linear-gradient(180deg, #939393 0, #565656); + -moz-border-radius:6px; + -webkit-border-radius:6px; + border-radius:6px; + -webkit-box-shadow:0 1px 3px 0 rgba(0, 0, 0, .2); + -moz-box-shadow:0 1px 3px 0 rgba(0, 0, 0, .2); + box-shadow:0 1px 3px 0 rgba(0, 0, 0, .2); + padding:8px; + vertical-align:middle +} +.bottom-page.cols-container .tab-body.dark.low{ + display:none +} +.bottom-page.dark-tab-img{ + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + -webkit-box-shadow:0 2px 6px 0 rgba(0, 0, 0, .6); + -moz-box-shadow:0 2px 6px 0 rgba(0, 0, 0, .6); + box-shadow:0 2px 6px 0 rgba(0, 0, 0, .6); + display:none; + width:100% +} +.bottom-page.dark-tab-img.active{ + display:block +} +.bottom-page.tab-button{ + -moz-border-radius-topleft:4px; + -moz-border-radius-bottomleft:4px; + -webkit-border-bottom-left-radius:4px; + border-bottom-left-radius:4px; + -webkit-border-top-left-radius:4px; + border-top-left-radius:4px; + color:#666; + cursor:pointer; + font-size:18px; + height:56px; + line-height:56px; + padding:0 33px 0 31px; + position:relative; + text-align:left; + white-space:nowrap +} +.bottom-page.tab-body button{ + margin-top:12% +} +.bottom-page.tab-button.active{ + background-color:#00bfa5; + color:#fff +} +.bottom-page.tab-button.active:before{ + background:-moz-linear-gradient(left, transparent 0, rgba(0, 0, 0, .2) 100%); + background:-webkit-linear-gradient(left, transparent, rgba(0, 0, 0, .2)); + background:linear-gradient(90deg, transparent 0, rgba(0, 0, 0, .2)); + content:""; + display:block; + height:100%; + position:absolute; + right:0; + width:30px +} +.bottom-page.tab-lnk-icon{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-position:-12px -3039px; + display:inline-block; + height:26px; + margin:15px 12px 0 0; + vertical-align:top; + width:26px +} +.bottom-page.tab-lnk-icon.landing{ + background-position:-12px -2983px +} +.active .bottom-page.tab-lnk-icon{ + background-position:-72px -3039px +} +.active .bottom-page.tab-lnk-icon.landing{ + background-position:-72px -2983px +} +.bottom-page.cols-container .col3{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + display:table-cell; + overflow:hidden; + padding:32px 40px; + position:relative +} +.bottom-page.cols-container.borders .col3:before{ + background-color:hsla(0, 0%, 100%, .26); + content:""; + display:block; + height:100%; + height:-webkit-calc(100% - 40px); + height:-moz-calc(100% - 40px); + height:calc(100% - 40px); + left:0; + position:absolute; + top:20px; + width:1px +} +.bottom-page.cols-container.borders .col3:first-child:before{ + display:none +} +.bottom-page.bold-title,.bottom-page.container-title{ + color:#fff; + font-family:var(--text-font-family-second-light); + font-size:24px; + font-weight:300; + line-height:32px; + text-align:center +} +.bottom-page.bold-title{ + color:#333; + padding:38px 0 +} +.bottom-page.container-txt{ + color:#fff; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:15px; + line-height:20px; + margin:0 auto; + max-width:352px; + padding:8px 0 60px; + text-align:center +} +.bottom-page.cols-container .buttons{ + bottom:33px; + left:0; + position:absolute; + width:100% +} +.light-bg .bottom-page.container-title,.light-bg .bottom-page.container-txt{ + color:#333 +} +.bottom-page sup{ + font-size:8px; + margin-left:2px; + position:relative; + top:-1px +} +.nav-buttons-bl .pages-nav.nav-button.disabled:after{ + -moz-border-radius-topright:4px; + -moz-border-radius-bottomright:4px; + background-color:hsla(0, 0%, 100%, .8); + -webkit-border-bottom-right-radius:4px; + border-bottom-right-radius:4px; + -webkit-border-top-right-radius:4px; + border-top-right-radius:4px; + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.bottom-page.top-title{ + font-size:0 +} +.bottom-page.top-title span{ + color:#333; + display:inline-block; + font-family:var(--text-font-family-second-bold); + font-size:24px; + letter-spacing:1px; + line-height:36px; + margin:2px 0 44px; + padding:0; + vertical-align:top +} +.bottom-page.top-title.white-text span{ + color:#fff +} +.bottom-page.top-title.no-pad span{ + margin-bottom:0 +} +.bottom-page.top-title i{ + background-repeat:no-repeat; + border-radius:8px; + display:inline-block; + height:40px; + margin:-1px 16px 0 0; + vertical-align:top; + width:40px +} +.page-icon.pages-sprite.nas{ + background-color:#4a90e2; + background-position:-15px -5717px +} +.page-icon.pages-sprite.mobile{ + background-color:#00c1a5; + background-position:-145px -5658px +} +.page-icon.pages-sprite.bird{ + background-color:#ab58f5; + background-position:-208px -5656px +} +.page-icon.pages-sprite.sync{ + background-color:#00a8e1; + background-position:-15px -5656px +} +.page-icon.pages-sprite.extensions{ + background-color:#ffa700; + background-position:-78px -5658px +} +.page-icon.pages-sprite.cmd{ + background-color:#ab58f5; + background-position:-145px -5718px +} +.bottom-page.dark-big-header{ + color:#333; + font-family:var(--text-font-family-second-light); + font-size:36px; + line-height:45px; + padding:10px 0 22px +} +.bottom-page.dark-big-header.no-pad{ + padding-bottom:0 +} +.bottom-page.dark-txt.bott-pad{ + padding:14px 0 54px +} +.bottom-page.dark-txt.no-pad{ + padding:11px 0 0 +} +.col-2.cmd-pad{ + float:left; + padding:58px 65px 7px 0 +} +.col-2.cmd-pad:nth-child(odd){ + padding:58px 0 7px 65px +} +.bottom-page.top-dark-info{ + color:#666; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:18px; + line-height:24px; + padding:0; + position:relative +} +.bottom-page.top-dark-info a,.bottom-page.top-dark-info a:visited{ + color:inherit; + text-decoration:underline +} +.bottom-page.top-dark-info.big{ + color:#333; + font-size:48px; + line-height:72px; + margin:0 auto; + max-width:790px; + padding:3.2% 20px 0 +} +.bottom-page.top-dark-info.medium{ + color:#333; + font-family:var(--text-font-family-second-light); + font-size:36px; + line-height:54px; + z-index:9 +} +.bottom-page.top-dark-info.small{ + color:#333; + font-size:16px; + padding:48px 0 0 +} +.bottom-page.top-dark-info.small.light-grey{ + color:#666; + margin:0 auto; + max-width:820px; + padding:58px 0 0 +} +.bottom-page.top-button-info{ + color:#333; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:16px; + line-height:22px; + padding:65px 0 0 +} +.bottom-page.top-button-info span{ + display:none +} +.unsupported .bottom-page.top-button-info span{ + display:block; + padding:4px 0 0 +} +.bottom-page.top-dark-button{ + background-color:#333; + border-radius:4px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + cursor:pointer; + display:none; + font-family:LatoWebBold,source_sans_prosemibold,Arial; + font-size:0; + height:79px; + line-height:0; + margin:6px 15px 0; + min-width:254px; + padding:14px 20px 0; + text-align:center; + -webkit-transition:background-color .2s ease-in-out,box-shadow .2s ease-in-out; + transition:background-color .2s ease-in-out,box-shadow .2s ease-in-out; + white-space:nowrap +} +body:not(.mobile) .bottom-page.top-dark-button:hover{ + background-color:#222; + -webkit-box-shadow:0 0 0 4px rgba(0, 0, 0, .15); + -moz-box-shadow:0 0 0 4px rgba(0, 0, 0, .15); + box-shadow:0 0 0 4px rgba(0, 0, 0, .15) +} +.bottom-page.top-dark-button .label span{ + display:block; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:16px; + line-height:22px; + white-space:nowrap +} +.bottom-page.top-dark-button .label{ + display:inline-block; + font-size:23px; + line-height:32px; + text-align:left; + vertical-align:top +} +.chrome .bottom-page.top-dark-button.chrome,.edge .bottom-page.top-dark-button.edge,.firefox .bottom-page.top-dark-button.ff,.opera .bottom-page.top-dark-button.opera{ + display:inline-block +} +.bottom-page.top-dark-button i{ + display:inline-block; + margin:-5px 14px 0 -5px; + vertical-align:top +} +.bottom-page.icon{ + background-repeat:no-repeat; + height:60px; + width:60px +} +.bottom-page.icon.pages-sprite,.pages-sprite,i.pages-sprite{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png) +} +.bottom-page.icon.new-pages-sprite{ + background-image:url(../imagery/mega-new-pages-sprite.edf5c495ba8748ed.png) +} +.bottom-page.icon.x96{ + height:96px; + margin:0 auto; + width:96px +} +.bottom-page.icon.x56{ + display:block; + height:56px; + width:56px +} +.bottom-page.icon.x48{ + height:48px; + width:48px +} +.bottom-page.icon.x12,.bottom-page.icon.x25{ + display:block; + height:25px; + width:25px +} +.bottom-page.icon.new-pages-sprite.chrome{ + background-position:-122px -415px; + width:52px +} +.bottom-page.icon.new-pages-sprite.edge{ + background-position:5px -487px; + width:52px +} +.bottom-page.icon.new-pages-sprite.opera{ + background-position:-59px -417px; + width:52px +} +.bottom-page.icon.new-pages-sprite.ff{ + background-position:6px -417px; + width:52px +} +.bottom-page.icon.new-pages-sprite.down-arrow{ + background-position:-233px -2689px +} +.bottom-page.icon.new-pages-sprite.bold-cross,.expanded .bottom-page.icon.new-pages-sprite.down-arrow{ + background-position:-186px -2690px +} +.bottom-page.icon.x56.new-pages-sprite.left-arrow{ + background-position:-31px -2468px; + width:28px +} +.bottom-page.icon.x56.new-pages-sprite.right-arrow{ + background-position:-81px -2468px; + width:28px +} +.bottom-page.icon.x48.new-pages-sprite.payments{ + background-position:-62px -2678px +} +.bottom-page.icon.x48.new-pages-sprite.rules{ + background-position:-121px -2678px +} +.bottom-page.icon.x25.new-pages-sprite.scroll-up,.rotated .bottom-page.icon.x25.new-pages-sprite.scroll-down{ + background-position:-314px -2691px +} +.bottom-page.icon.x25.new-pages-sprite.scroll-down,.rotated .bottom-page.icon.x25.new-pages-sprite.scroll-up{ + background-position:-349px -2691px +} +.bottom-page.icon.x12.new-pages-sprite.tick{ + background-position:-285px -2696px +} +.bottom-page.icon.new-pages-sprite.bird{ + background-position:-185px -419px +} +.bottom-page.icon.pages-sprite.x96.config{ + background-position:-2px -30px +} +.bottom-page.icon.pages-sprite.x96.syncing{ + background-position:6px -5029px +} +.bottom-page.icon.pages-sprite.x96.backups{ + background-position:-191px -5029px +} +.bottom-page.icon.pages-sprite.x96.transfer{ + background-position:0 -5204px; + width:146px +} +.bottom-page.icon.pages-sprite.x96.nas-data{ + background-position:-208px -5220px; + height:70px; + width:74px +} +.bottom-page.icon.pages-sprite.x96.nas-syncing{ + background-position:-196px -5380px; + height:70px; + width:70px +} +.bottom-page.icon.pages-sprite.x96.nas-security{ + background-position:-13px -5380px; + height:70px; + width:58px +} +.bottom-page.icon.pages-sprite.x96.nas-transfer{ + background-position:1px -5542px; + height:70px; + width:105px +} +.bottom-page.icon.pages-sprite.x96.email-attach{ + background-position:-186px -25px; + width:100px +} +.bottom-page.icon.x56.privacy{ + background-position:-3px -263px; + width:65px +} +.bottom-page.icon.x56.power{ + background-position:-96px -261px; + width:61px +} +.bottom-page.icon.x56.secure{ + background-position:-185px -261px; + width:63px +} +.bottom-page.icon.x56.transparent{ + background-position:-11px -363px; + width:52px +} +.bottom-page.icon.x56.reliable{ + background-position:-100px -359px; + width:55px +} +.bottom-page.icon.x56.generous{ + background-position:-183px -359px; + width:59px +} +.unsupported .bottom-page.top-dark-button{ + display:inline-block; + height:62px; + min-width:172px; + padding:10px 10px 0 +} +.unsupported .bottom-page.top-dark-button .label span{ + font-size:13px; + line-height:19px +} +.unsupported .bottom-page.top-dark-button .label{ + font-size:20px; + line-height:22px +} +.unsupported .bottom-page.top-dark-button i{ + background-size:286px auto !important; + margin:-10px 4px 0 -3px; + width:40px !important +} +.unsupported .bottom-page.icon.new-pages-sprite.chrome{ + background-position:-94px -307px +} +.unsupported .bottom-page.icon.new-pages-sprite.opera{ + background-position:-46px -308px +} +.unsupported .bottom-page.icon.new-pages-sprite.ff{ + background-position:4px -309px +} +.unsupported .bottom-page.icon.new-pages-sprite.edge{ + background-position:3px -362px +} +.bottom-page.top-button-info a{ + color:#333; + cursor:pointer; + font-family:LatoWebBold,source_sans_prosemibold,Arial; + text-decoration:none +} +.bottom-page.top-copyrights{ + color:rgba(51, 51, 51, .7); + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:12px; + line-height:18px; + padding:22px 0 0 +} +.bottom-page.top-copyrights.small-pad{ + padding:9px 0 13px +} +.bottom-page.top-copyrights sup{ + margin-left:1px; + top:1px +} +.bottom-page.top-copyrights em{ + color:#333; + font-size:16px; + font-style:normal +} +.bottom-page.top-copyrights a{ + color:#f0373b; + cursor:pointer; + font-family:LatoWebBold,source_sans_prosemibold,Arial +} +.bottom-page.top-copyrights strong{ + font-family:LatoWebBold,source_sans_prosemibold,Arial; + font-weight:400 +} +.mobile .browsers .bottom-page.top-copyrights a{ + color:inherit; + cursor:default +} +.bottom-page.top-copyrights .available{ + color:#333; + display:none; + font-size:16px; + padding-bottom:8px +} +.bottom-page.top-copyrights .available.desktop,.mobile .android .bottom-page.top-copyrights .available.android,.mobile .ios .bottom-page.top-copyrights .available.ios{ + display:block +} +.bottom-page.top-copyrights .content,.mobile .android .bottom-page.top-copyrights .available.desktop,.mobile .ios .bottom-page.top-copyrights .available.desktop,.mobile .ios .bottom-page.top-copyrights.small-pad,.mobile .ios .bottom-page.top-dark-button.ff,.mobile .ios.firefox .bottom-page.top-copyrights .content.ff,.unsupported .bottom-page.top-copyrights .available{ + display:none +} +.chrome .bottom-page.top-copyrights .content.chrome,.edge .bottom-page.top-copyrights .content.edge,.firefox .bottom-page.top-copyrights .content.ff,.opera .bottom-page.top-copyrights .content.opera,.unsupported .bottom-page.top-copyrights .unsupported{ + display:block +} +.android .bottom-page.top-copyrights,.ios .bottom-page.top-copyrights{ + padding-top:0 +} +.unsupported .bottom-page.top-copyrights:not(.small-pad){ + padding:40px 0 46px +} +.bottom-page.sides-pad{ + padding:0 40px +} +.bottom-page.mid-icon{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + float:left; + height:80px; + width:80px +} +.bottom-page.mid-icon.dav{ + background-position:-10px -2575px +} +.bottom-page.mid-icon.ftp{ + background-position:-143px -2577px +} +.bottom-page.mid-icon.config{ + background-position:-146px -2445px; + width:81px +} +.bottom-page.mid-icon.interactive{ + background-position:-10px -2324px +} +.bottom-page.mid-icon.script{ + background-position:-148px -2319px +} +.bottom-page.mid-icon.live{ + background-position:-10px -2446px +} +.bottom-page.icon-info{ + margin:0 0 0 120px; + text-align:left +} +.bottom-page.icon-info .mega-button{ + margin-top:16px +} +.bottom-page.icon-info hr{ + background-color:#333; + border:0; + height:4px; + margin:16px 0 0; + padding:0; + width:36px +} +.bottom-page.dark-title{ + color:#333; + font-family:LatoWeb,source_sans_prosemibold,Arial; + font-size:20px; + line-height:25px +} +.bottom-page.dark-txt{ + color:#666; + font-size:16px; + line-height:24px; + padding:16px 0 0 +} +.bottom-page.dark-txt a,.bottom-page.dark-txt a:active,.bottom-page.dark-txt a:link,.bottom-page.dark-txt a:visited{ + color:#666; + text-decoration:underline +} +.cmd-bg .top-header{ + color:#333 +} +.bottom-page.big-icon.target{ + background-position:1px -310px +} +.bottom-page.big-icon.charts,.bottom-page.big-icon.target{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png) +} +.bottom-page.big-icon.charts{ + background-position:1px -190px +} +.bottom-page.big-icon.mobile-cloud{ + background-position:1px -1400px +} +.bottom-page.big-icon.chat,.bottom-page.big-icon.mobile-cloud{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png) +} +.bottom-page.big-icon.chat{ + background-position:1px -1270px +} +.bottom-page.big-icon.photos{ + background-position:1px -1530px +} +.bottom-page.big-icon.cloud,.bottom-page.big-icon.photos{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png) +} +.bottom-page.big-icon.cloud{ + background-position:1px -1660px +} +.bottom-page.big-icon.camera{ + background-position:-119px -1660px +} +.bottom-page.big-icon.camera,.bottom-page.big-icon.player{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png) +} +.bottom-page.big-icon.player{ + background-position:-119px -1790px +} +.bottom-page.big-icon.mobile-arrow{ + background-position:-119px -1920px +} +.bottom-page.big-icon.mobile-arrow,.cmd-top-img{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png) +} +.cmd-top-img{ + background-position:center -3114px; + background-repeat:no-repeat; + display:none; + height:180px; + margin:0 auto 38px +} +.mobile .cmd-top-img.clone{ + display:block +} +.mobile .megacmd .bottom-page.nav-buttons-bl.dark{ + margin-bottom:150px +} +.bottom-align.float-hero-image{ + width:100% +} +.bottom-page.large-icon{ + background-image:url(../imagery/mega-new-pages-sprite.edf5c495ba8748ed.png); + background-repeat:no-repeat; + background-size:376px auto; + height:188px; + margin:0 auto; + padding:0; + width:188px +} +.bottom-page.big-icon.pages-sprite,.bottom-page.large-icon.pages-sprite{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-repeat:no-repeat; + background-size:360px auto +} +.bottom-page.about-sprite,i.bottom-page.about-sprite{ + background-image:url(../imagery/mega-about-sprite.bc4e0a2b6dd6d832.png); + background-repeat:no-repeat +} +.bottom-page.large-icon.camera{ + background-position:14px -3922px +} +.bottom-page.large-icon.streaming{ + background-position:-152px -3922px +} +.bottom-page.large-icon.save-files{ + background-position:12px -4130px +} +.bottom-page.large-icon.dual-themes{ + background-position:0 -1034px +} +.bottom-page.large-icon.multiple-devices{ + background-position:-188px -1034px +} +.bottom-page.large-icon.multiple-os{ + background-position:0 -1222px +} +.bottom-page.large-icon.stream{ + background-position:-171px -1234px +} +.bottom-page.large-icon.data-retention{ + background-position:0 -1412px +} +.bottom-page.large-icon.peace{ + background-position:11px -1590px; + height:140px +} +.bottom-page.large-icon.hands{ + background-position:-180px -1590px; + height:140px +} +.bottom-page.large-icon.infinity{ + background-position:14px -1718px; + height:140px +} +.bottom-page.large-icon.whisper{ + background-position:-175px -1718px; + height:140px +} +.bottom-page.large-icon.compass{ + background-position:14px -1842px; + height:140px +} +.bottom-page.large-icon.diagram{ + background-position:-177px -1842px; + height:140px +} +.bottom-page.large-icon.chain{ + background-position:-9px -1993px +} +.bottom-page.large-icon.linked-folder{ + background-position:-189px -1992px +} +.bottom-page.large-icon.linked-chat{ + background-position:-12px -2151px +} +.bottom-page.large-icon.add-user{ + background-position:-175px -2144px +} +.bottom-page.icon-122{ + height:122px; + margin:0 auto; + width:122px +} +.bottom-page.icon-122.about-sprite.honesty{ + background-position:-13px 10px +} +.bottom-page.icon-122.about-sprite.respect{ + background-position:-203px 10px +} +.bottom-page.icon-122.about-sprite.tolerance{ + background-position:-407px 10px +} +.bottom-page.icon-122.about-sprite.hard-work{ + background-position:-13px -193px +} +.bottom-page.icon-122.about-sprite.flexibility{ + background-position:-207px -193px +} +.bottom-page.icon-122.about-sprite.teamwork{ + background-position:-417px -183px +} +.bottom-page.icon-122.about-sprite.geo1{ + background-position:21px -1712px +} +.bottom-page.icon-122.about-sprite.geo2{ + background-position:-129px -1712px +} +.bottom-page.icon-122.about-sprite.geo3{ + background-position:-278px -1712px +} +.bottom-page.icon-122.about-sprite.trips{ + background-position:-5px -960px +} +.bottom-page.icon-122.about-sprite.gear{ + background-position:-210px -960px +} +.bottom-page.icon-122.about-sprite.courses{ + background-position:-402px -955px +} +.bottom-page.icon-136{ + height:136px; + margin:0 auto; + width:136px +} +.bottom-page.icon-136.about-sprite.snackbox{ + background-position:3px -365px +} +.bottom-page.icon-136.about-sprite.chrismas{ + background-position:-199px -365px +} +.bottom-page.icon-136.about-sprite.cinema{ + background-position:-399px -365px +} +.bottom-page.icon-136.about-sprite.bbq{ + background-position:2px -559px +} +.bottom-page.icon-136.about-sprite.birthday{ + background-position:-202px -559px +} +.bottom-page.icon-136.about-sprite.sport{ + background-position:-410px -559px +} +.bottom-page.icon-32{ + height:32px; + width:32px +} +.icon-32.about-sprite.quote{ + background-position:-26px -1918px; + display:inline-block; + margin-left:-32px; + vertical-align:top +} +.icon-32.about-sprite.quote.close{ + background-position:-98px -1918px; + margin:0 -32px 0 0 +} +.italic-text .icon-32.about-sprite.quote{ + background-position:-26px -1920px +} +.italic-text .icon-32.about-sprite.quote.close{ + background-position:-98px -1920px +} +.ar .icon-32.about-sprite.quote,.es .icon-32.about-sprite.quote,.fr .icon-32.about-sprite.quote,.it .icon-32.about-sprite.quote,.ru .icon-32.about-sprite.quote{ + background-position:-167px -1915px; + margin:0 0 0 -26px; + width:22px +} +.ar .icon-32.about-sprite.quote.close,.es .icon-32.about-sprite.quote.close,.fr .icon-32.about-sprite.quote.close,.it .icon-32.about-sprite.quote.close,.ru .icon-32.about-sprite.quote.close{ + background-position:-239px -1915px; + margin:0 -26px 0 0 +} +.de .icon-32.about-sprite.quote,.nl .icon-32.about-sprite.quote,.pl .icon-32.about-sprite.quote,.ro .icon-32.about-sprite.quote{ + background-position:-98px -1914px; + margin-bottom:-8px; + margin-top:8px +} +.de .italic-text .icon-32.about-sprite.quote,.nl .italic-text .icon-32.about-sprite.quote,.pl .italic-text .icon-32.about-sprite.quote,.ro .italic-text .icon-32.about-sprite.quote{ + background-position:-98px -1916px +} +.de .icon-32.about-sprite.quote.close{ + background-position:-26px -1920px; + margin-top:0 +} +.nl .icon-32.about-sprite.quote.close,.pl .icon-32.about-sprite.quote.close,.ro .icon-32.about-sprite.quote.close{ + background-position:-98px -1920px; + margin-top:0 +} +.icon-32.about-sprite.quote.small{ + background-position:-17px -1315px; + background-size:360px auto; + height:24px; + margin-left:-28px; + width:24px +} +.icon-32.about-sprite.quote.small.close{ + background-position:-66px -1316px; + margin-left:4px; + margin-right:-32px +} +.ar .icon-32.about-sprite.quote.small,.es .icon-32.about-sprite.quote.small,.fr .icon-32.about-sprite.quote.small,.it .icon-32.about-sprite.quote.small,.ru .icon-32.about-sprite.quote.small{ + background-position:-167px -1920px; + background-size:525px auto; + margin:1px 0 0 -26px +} +.ar .icon-32.about-sprite.quote.close.small,.es .icon-32.about-sprite.quote.close.small,.fr .icon-32.about-sprite.quote.close.small,.it .icon-32.about-sprite.quote.close.small,.ru .icon-32.about-sprite.quote.close.small{ + background-position:-239px -1920px; + margin:2px -26px 0 0 +} +.de .icon-32.about-sprite.quote.small,.nl .icon-32.about-sprite.quote.small,.pl .icon-32.about-sprite.quote.small,.ro .icon-32.about-sprite.quote.small{ + background-position:-66px -1314px; + margin-bottom:-6px; + margin-top:6px +} +.de .icon-32.about-sprite.quote.close.small{ + background-position:-17px -1314px; + margin-top:0 +} +.nl .icon-32.about-sprite.quote.close.small,.pl .icon-32.about-sprite.quote.close.small,.ro .icon-32.about-sprite.quote.close.small{ + background-position:-66px -1315px; + margin-top:0 +} +.cropped-page .bottom-page.big-icon{ + background-image:url(../imagery/mega-new-pages-sprite.edf5c495ba8748ed.png); + background-repeat:no-repeat; + background-size:376px auto; + height:96px; + margin:0 auto 16px; + padding:0; + width:96px +} +.bottom-page.big-icon.clock{ + background-position:0 -439px +} +.bottom-page.big-icon.download-performance{ + background-position:-189px -439px +} +.bottom-page.big-icon.strength-security{ + background-position:0 -557px +} +.bottom-page.big-icon.send-file{ + background-position:0 0 +} +.bottom-page.big-icon.save-offline{ + background-position:-94px 0 +} +.bottom-page.big-icon.share-folder{ + background-position:-188px 0 +} +.bottom-page.big-icon.auto-camera{ + background-position:-282px 0 +} +.bottom-page.big-icon.link-setting{ + background-position:0 -94px +} +.bottom-page.big-icon.network-setting{ + background-position:-94px -94px +} +.bottom-page.big-icon.cloud-download{ + background-position:-188px -94px +} +.bottom-page.big-icon.file-types{ + background-position:-282px -94px +} +.bottom-page.big-icon.window-check{ + background-position:0 -188px +} +.bottom-page.big-icon.sync-icon{ + background-position:-94px -188px +} +.bottom-page.big-icon.versioning{ + background-position:-188px -188px +} +.bottom-page.big-icon.browser-types{ + background-position:-97px -306px; + height:65px +} +.bottom-page.big-icon.mountain-files{ + background-position:0 -282px +} +.bottom-page.big-icon.blue-sync{ + background-position:-217px -307px; + height:58px; + width:58px +} +.bottom-page.img.mobile-view{ + display:none +} +.top-bl .top-title,.top .top-title{ + padding-top:78px +} +.bottom-page.vertical-pull-up{ + z-index:99 +} +.megasync .bottom-page.angle-bg{ + background-color:initial; + background-image:url(../imagery/mega-bottom-page-gray-blue-angle-2x.b13a8177b9853701.png); + background-position:top; + bottom:0 !important; + margin-top:4px +} +.bottom-page.grey-angle-bg{ + background-color:#fff; + background-image:url(../imagery/mega-bottom-page-grey-angle.a68d7d18b17dc6ba.png); + background-position:top; + background-size:100% 100%; + height:1280px; + left:0; + margin:0; + position:absolute; + width:100% +} +.megasync .top-bl .bottom-page.vertical-centered-cell{ + vertical-align:top +} +.megasync .inline-block.mid-pad{ + padding:24px 12px +} +.bottom-page.gray-blue-block{ + background-color:#222734 +} +.megasync .bottom-page img{ + width:100% +} +.megasync .bottom-page.img.sync1{ + display:block; + margin:38px auto 42px; + max-width:960px +} +.megasync .sync-2 .bottom-page img{ + max-width:735px; + width:127% +} +.megasync .sync-3 .bottom-page img{ + display:block; + margin:32px 0; + max-width:540px +} +.megasync .sync-4 .bottom-page img{ + display:block; + margin:32px 0 32px 53px; + max-width:792px; + width:114% +} +.sync-4 .bottom-page.left-cell{ + width:40% +} +.sync-4 .bottom-page.right-cell{ + width:60% +} +.megasync .sync-5 .bottom-page img{ + display:block; + margin:32px 0 32px -30px; + max-width:540px +} +.bottom-page .megaapp-linux.dark .megaapp-button-info,.bottom-page .megaapp-linux.dark .megaapp-linux-info,.bottom-page .megaapp-linux.dark .radio-txt,.bottom-page.very-dark-blue-bg .white-text{ + color:#fff +} +.very-dark-blue-bg .megaapp-button-info.disabled{ + opacity:.6 +} +.megaapp-linux .default-select-dropdown:after,.megaapp-linux .default-select-dropdown:before{ + content:unset +} +.bottom-page.radio-buttons{ + padding:5px 0 0 +} +.megaapp-linux .bottom-page.radio-buttons{ + align-items:center; + display:flex; + flex-wrap:wrap; + justify-content:space-between; + margin:0; + padding:12px 0 0; + width:100% +} +.megaapp-linux .bottom-page.radio-buttons label:last-child{ + -webkit-padding-end:0; + padding-inline-end:0 +} +.download-sprite{ + background-image:url(../imagery/mega-download-sprite.4af55d3dc900fda9.png); + background-repeat:no-repeat +} +.icon.linux.download-sprite{ + height:18px; + width:18px +} +.icon.linux.download-sprite.centos{ + background-position:1px -1928px +} +.icon.linux.download-sprite.debian,.icon.linux.download-sprite.raspbian{ + background-position:1px -1988px +} +.icon.linux.download-sprite.elementary,.icon.linux.download-sprite.elementaryosfreya{ + background-position:1px -1958px +} +.icon.linux.download-sprite.fedora{ + background-position:1px -2138px +} +.icon.linux.download-sprite.mint{ + background-position:1px -2108px +} +.icon.linux.download-sprite.opensuse{ + background-position:1px -2078px +} +.icon.linux.download-sprite.redhat{ + background-position:1px -2049px +} +.icon.linux.download-sprite.ubuntu{ + background-position:1px -2018px +} +.icon.linux.download-sprite.arch{ + background-position:2px -3638px +} +.icon.linux.download-sprite.nautilus{ + background-position:3px -3510px +} +.icon.linux.download-sprite.dolphin{ + background-position:2px -3542px +} +.icon.linux.download-sprite.nemo{ + background-position:2px -3607px +} +.icon.linux.download-sprite.thunar{ + background-position:3px -3574px +} +.bottom-page .megaapp-windows{ + margin-top:20px; + position:relative; + text-align:center; + white-space:nowrap +} +.bottom-page .megaapp-linux{ + box-sizing:border-box; + display:table; + margin:-40px auto 0; + max-width:398px; + min-width:398px; + position:relative; + text-align:left; + white-space:nowrap +} +.bottom-page .megaapp-linux.dark{ + background-color:#333; + border:1px solid rgba(0, 0, 0, .3); + border-radius:4px +} +.bottom-page .megaapp-linux-container{ + padding:24px +} +.bottom-page .megaapp-linux-container button{ + flex:0 0 auto +} +.bottom-page .megaapp-linux-container .mega-input.dropdown-input{ + min-width:auto +} +.bottom-page .megaapp-linux-container .install-guide-trigger{ + color:#6fd7ff; + cursor:default; + font-family:LatoWeb,sans-serif; + font-size:14px; + line-height:21px +} +.bottom-page .megaapp-linux-container .install-guide-text span.install-guide{ + display:block; + float:left; + font-family:LatoWeb,source_sans_proregular,Arial,sans-serif; + font-size:14px; + line-height:20px; + margin:8px 8px 0; + word-break:break-word +} +.bottom-page .megaapp-linux-container .install-guide-copy-msg{ + background-color:rgba(29, 176, 123, .5); + border:1px solid #1db07b; + border-radius:4px; + float:left; + font-size:14px; + line-height:24px; + margin:20px 0 6px 10px; + text-align:center; + width:240px +} +.dark-direct-tooltip.simpletip-tooltip.megasync-tip{ + background-color:#000; + box-sizing:border-box; + color:#fff; + font-size:13px; + line-height:18px; + max-width:228px; + text-align:center +} +.dark-direct-tooltip.simpletip-tooltip.megasync-tip i{ + --mask-color:#000 +} +.bottom-page .install-guide-text .copy-install-guide-icon{ + border-radius:4px; + float:right; + margin:22px 6px 6px 0; + padding:2px 4px; + text-align:center +} +.small-icon.icons-sprite.copy-line-icon{ + background-position:-242px -288px; + cursor:pointer; + height:23px; + opacity:.7; + width:19px +} +.bottom-page .megaapp-linux-container .dark-help-block{ + background-color:#000; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + bottom:190px; + -webkit-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + font-size:14px; + height:0; + line-height:18px; + opacity:0; + padding:7px 10px 10px; + position:absolute; + right:-44px; + text-align:center; + white-space:normal; + width:0; + z-index:10 +} +.bottom-page .megaapp-linux-container .dark-help-block.bottomsync-copy-tip{ + bottom:200px +} +.bottom-page .megaapp-linux-container .dark-help-block.cmd-copy-tip{ + bottom:92px +} +body:not(.mobile) .copy-line-icon:hover .dark-help-block{ + height:unset; + opacity:1; + transition-delay:.75s; + width:60px +} +.bottom-page .copy-line-icon .dark-help-block .dark-notification-arrow{ + top:10px +} +.bottom-page .megaapp-linux-container .copy-line-icon.active{ + opacity:1 +} +.bottom-page .install-guide-text .copy-install-guide-icon.active{ + background-color:hsla(0, 0%, 100%, .1) +} +.bottom-page .megaapp-linux-box-container{ + min-height:480px +} +.bottom-page .megaapp-linux-container .install-guide-text{ + background-color:#222; + border-radius:4px; + color:#fafafa; + line-height:17px; + margin-top:10px; + white-space:normal; + width:100% +} +.bottom-page .megaapp-linux-container .install-guide-text:not(.hidden){ + display:inline-block +} +.megaapp-linux-arrow{ + background-image:url(../imagery/mega-new-pages-sprite.edf5c495ba8748ed.png); + background-position:-347px -329px; + background-repeat:no-repeat; + height:9px; + left:50%; + margin:0 0 0 120px; + position:absolute; + top:-9px; + width:18px; + z-index:10 +} +.megaapp-linux .default-select{ + color:#333; + font-family:var(--text-font-family) +} +.very-dark-blue-bg .megaapp-linux-arrow{ + background-position:-347px -349px +} +.very-dark-blue-bg .megaapp-windows-info{ + color:#fff; + font-size:14px; + line-height:24px; + opacity:.8; + white-space:normal +} +.white-block .megaapp-windows-info{ + color:#999; + font-size:14px; + line-height:24px; + opacity:.8; + white-space:normal +} +.megaapp-windows-info a{ + text-decoration:underline +} +.megaapp-linux-info{ + color:#333; + font-family:LatoWebSemibold,sans-serif; + font-size:16px; + line-height:24px; + padding:32px 0 0 +} +.megaapp-inputs-wrap{ + align-content:center; + display:flex; + margin:12px 0 0 +} +.megaapp-inputs-wrap .mega-input{ + -webkit-margin-end:12px; + flex:1; + margin-inline-end:12px +} +.megaapp-macos{ + background-color:#333; + border:1px solid rgba(0, 0, 0, .3); + border-radius:4px; + box-sizing:border-box; + margin:-20px auto 60px; + max-width:398px; + padding:24px +} +.megaapp-macos .platform-label{ + color:#fff; + font-family:var(--text-font-family-semibold); + font-size:16px; + line-height:24px; + margin-bottom:12px; + text-align:left +} +.megaapp-macos .form-row{ + gap:24px; + align-items:center; + display:flex; + flex-flow:row wrap; + justify-content:space-between +} +.megaapp-macos .form-row label.radio-txt{ + color:#fff +} +.megaapp-footer{ + background-color:#222; + box-sizing:border-box; + color:#fafafa; + font-size:14px; + line-height:24px; + margin-top:16px; + min-height:48px; + padding:12px 24px; + position:relative; + text-align:center; + vertical-align:middle +} +.megaapp-footer:before{ + background-color:rgba(0, 0, 0, .1); + content:""; + display:block; + height:1px; + left:0; + position:absolute; + top:0; + width:100% +} +.megaapp-footer a.download-all-link{ + color:#00bfa5; + cursor:pointer; + display:inline-block; + margin-left:12px; + text-decoration:underline +} +.megaapp-linux-info .bottom-page-icon,.megaapp-linux-info span{ + display:inline-block; + vertical-align:top; + white-space:normal +} +.megaapp-linux-info .bottom-page-icon.white-info{ + margin:4px 0 0 4px +} +.bottom-page-icon.white-info{ + background-image:url(../imagery/mega-new-pages-sprite.edf5c495ba8748ed.png); + background-position:-355px -433px; + background-repeat:no-repeat; + height:18px; + position:relative; + width:18px +} +.dark-notification-block{ + background-color:#000; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + -webkit-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + display:none; + font-family:source_sans_proregular,Arial; + font-size:13px; + left:32px; + line-height:18px; + opacity:0; + padding:10px; + position:absolute; + position:absolute; + text-align:center; + top:-19px; + white-space:normal; + width:228px; + z-index:10 +} +body:not(.mobile) .bottom-page-icon.white-info:not(.disabled):hover .dark-notification-block{ + display:block; + opacity:1 +} +.dark-notification-arrow{ + background-image:url(../imagery/mega-new-pages-sprite.edf5c495ba8748ed.png); + background-position:-328px -436px; + background-repeat:no-repeat; + height:15px; + left:-8px; + position:absolute; + top:21px; + width:8px +} +.bottom-page .megaapp-linux-info:first-child{ + padding-top:0 +} +.bottom-page .default-select.megaapp-dropdown,.bottom-page .default-select.megaext-dropdown{ + float:none; + margin:40px 0 5px; + width:250px +} +.megaapp-button-info{ + color:#666; + font-size:14px; + line-height:24px; + padding:28px 0 62px +} +.bottom-page .megaapp-linux .default-select.megaapp-dropdown,.bottom-page .megaapp-linux .default-select.megaext-dropdown{ + display:inline-block; + margin:13px 12px 0 0; + vertical-align:top +} +.megaapp-button-info a.red{ + color:#ff333a; + cursor:pointer +} +div.radioOff.green,div.radioOn.green{ + -moz-background-clip:padding-box; + -webkit-background-clip:padding-box; + background-clip:padding-box; + border:1px solid rgba(0, 0, 0, .05); + -moz-box-sizing:content-box; + -webkit-box-sizing:content-box; + box-sizing:initial; + height:16px; + width:16px +} +div.radioOn.green{ + border-color:#00bfa5; + -webkit-box-shadow:none; + -moz-box-shadow:none; + box-shadow:none +} +div.radioOff:before.green,div.radioOn:before.green{ + display:none +} +div.radioOn.green:after{ + background:#00bfa5; + opacity:1 +} +.small-green-button{ + background-color:#00bfa5; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + cursor:pointer; + display:inline-block; + font-size:14px; + height:32px; + line-height:32px; + margin-top:13px; + min-width:88px; + padding:0 10px; + text-align:center; + vertical-align:top +} +body:not(.mobile) .small-green-button:not(.disabled):hover{ + -webkit-box-shadow:0 0 0 4px rgba(62, 136, 126, .4); + -moz-box-shadow:0 0 0 4px rgba(62, 136, 126, .4); + box-shadow:0 0 0 4px rgba(62, 136, 126, .4) +} +.bottom-page.hidden-img{ + display:none +} +.bottom-page.img.ios-top{ + bottom:-5.5%; + max-height:86%; + max-width:92.5%; + padding:0 67px 0 1px; + position:absolute; + right:0; + width:auto +} +.mobile-apps-button{ + background-color:rgba(0, 0, 0, .7); + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-position:0 -887px; + background-repeat:no-repeat; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + cursor:pointer; + display:block; + height:64px; + margin:38px 0 77px; + width:191px +} +body:not(.mobile) .mobile-apps-button:hover{ + background-color:#000 +} +.mobile-apps-button.android{ + background-position:0 -1007px; + width:212px +} +.mobile-apps-button.no-pad{ + margin:0 +} +.bottom-page.img.ios2{ + margin:0 -12.5%; + max-width:123%; + width:1256px +} +.bottom-page.img.ios3{ + margin:35px 0 13px; + max-width:761px; + padding:0 15px +} +.bottom-page.img.ios4{ + margin:6px 0 0 -20%; + max-width:120%; + padding:0 1px 0 34px; + width:614px +} +.bottom-page.img.ios5{ + bottom:0; + left:0; + margin:auto -5%; + max-width:110%; + padding-top:62px; + position:absolute; + right:0; + top:0; + width:355px +} +.side-txt .bottom-page.mid-pad{ + padding:44px 15px 28px +} +.bottom-page.img.android-top{ + bottom:-16%; + left:0; + max-height:93.5%; + max-width:93.7%; + padding:0 0 0 66px; + position:absolute; + width:auto +} +.bottom-page.img.android2{ + margin:62px -6% 23px -4.3%; + max-width:95%; + width:969px +} +.bottom-page.img.android3{ + margin:35px 0 13px; + max-width:761px; + padding:0 15px +} +.bottom-page.img.android4{ + bottom:0; + left:0; + margin:auto 0 auto 7%; + max-width:87%; + padding-top:24px; + position:absolute; + right:0; + top:0; + width:281px +} +.bottom-page.img.android5{ + margin:38px 0 0 -10.5%; + max-width:124%; + width:633px +} +.android .bottom-page.top-bl,.ios .bottom-page.top-bl{ + overflow:hidden +} +.medium-txt.small-lineheight.info{ + padding-bottom:80px +} +.bottom-page.table.changed-order .order2,.top-bl .bottom-page.table.changed-order .order2{ + display:none +} +.megasync .left-cell .business-info-block{ + padding-right:40px +} +.megasync .right-cell .business-info-block{ + padding-left:40px +} +.mobileapp .top-bl .horizontal-centered-bl{ + min-height:695px +} +.mobileapp .bottom-page.big-icon{ + margin:0 auto 16px +} +.mobileapp .bottom-page.top-bl>.vertical-centered-cell .bottom-page.angle-bg{ + bottom:-240px +} +.mobileapp .business-info-block{ + padding:15px 0 +} +.mobileapp .bottom-page.business-header{ + padding-top:0 +} +.mobileapp .left-cell .bottom-page.img{ + -webkit-margin-end:35px; + margin-inline-end:35px; + width:calc(100% - 35px) +} +.mobileapp .right-cell .bottom-page.img{ + -webkit-margin-start:35px; + margin:0; + margin-inline-start:35px; + width:calc(100% - 35px) +} +.bottom-page.img.mobile01{ + max-width:458px +} +.bottom-page.img.mobile02{ + max-width:523px +} +.bottom-page.img.mobile03{ + max-width:328px +} +.bottom-page.img.mobile04{ + max-width:538px +} +.rtl .mobileapp .img-wrap{ + text-align:right +} +.bottom-page.apps-buttons{ + font-size:0; + line-height:0; + padding:24px 0 78px +} +.bottom-page.apps-buttons.bott-block{ + padding-bottom:8px +} +.bottom-page.dark-button{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-position:-2px -3512px; + display:inline-block; + height:57px; + margin:30px 15px 0; + width:169px +} +.bottom-page.dark-button.android{ + background-position:-2px -3603px; + width:191px +} +.bottom-page.dark-button.huawei{ + background-position:-172px -3512px; + width:187px +} +.bottom-page.dark-button.small{ + background-position:-2px -2731px; + background-size:280px auto; + height:45px; + width:131px +} +.bottom-page.dark-button.small.android{ + background-position:-2px -2802px; + width:148px +} +.bottom-page.dark-button.small.huawei{ + background-position:-134px -2731px; + width:146px +} +.bottom-page.appstore-button{ + display:inline-block; + height:57px; + margin:30px 15px 0; + width:169px +} +.bottom-page.appstore-button.android{ + height:auto; + margin:0 0 -14px; + width:216px +} +.bottom-page.appstore-button.small{ + margin:0; + width:131px +} +.bottom-page.appstore-button.small.android{ + margin:-4px 0 0 -10px; + width:168px +} +.dark-blue-bg .bottom-page.dark-button:first-child{ + margin-right:30px +} +.bottom-page.top-description{ + color:#676d75; + font-family:LatoWebLight,Arial; + font-size:14px; + line-height:24px; + padding:100px 0 25px +} +.bottom-page.top-description.invisible{ + opacity:0 +} +.bottom-page.big-link{ + color:#333; + display:inline-block; + font-family:LatoWebBold; + font-size:16px; + line-height:24px; + margin-bottom:72px +} +.bottom-page.big-link i,.bottom-page.big-link span{ + display:inline-block; + vertical-align:top +} +.bottom-page.big-link i{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-position:-162px -3401px; + background-size:360px auto; + height:18px; + margin:4px 0 0 12px; + width:25px +} +.bottom-page.big-link i.down{ + background-position:-168px -3400px; + height:22px; + -webkit-transform:rotate(90deg); + -moz-transform:rotate(90deg); + -o-transform:rotate(90deg); + -ms-transform:rotate(90deg); + transform:rotate(90deg); + width:24px +} +.bottom-page.big-link.scrolldown{ + margin:72px 0 +} +.bottom-page.img.mobile-top{ + -webkit-margin-start:38px; + margin:78px 0; + margin-inline-start:38px; + max-width:526px; + width:118% +} +.bottom-page.mid-txt{ + line-height:36px +} +.bottom-page.blue-bg,.bottom-page.top-blue-bg{ + background-color:#eff3f6 +} +.top-blue-bg .bottom-page.angle-bg{ + background-color:#eff3f6; + bottom:-142px !important +} +.bottom-page.large-header .bold{ + font-family:var(--text-font-family-second-semibold) +} +.bottom-page.large-subheader{ + color:#666; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:20px; + line-height:30px; + margin:0 auto; + max-width:840px; + padding:7px 0 15px; + text-align:center +} +.bottom-page.big-icon.green-mobile{ + background-position:-70px -3394px; + height:58px; + width:58px +} +.bottom-page.big-icon.secure.pages-sprite{ + background-position:-198px -4526px; + height:102px; + width:102px +} +.bottom-page.big-icon.carry-files{ + background-position:-191px -4189px +} +.bottom-page.big-icon.chat-call{ + background-position:-189px -4739px +} +.bottom-page.big-icon.share{ + background-position:4px -4738px +} +.bottom-page.large-icon.camera{ + background-position:14px -3922px +} +.bottom-page.large-icon.streaming{ + background-position:-152px -3922px +} +.bottom-page.large-icon.save-files{ + background-position:12px -4130px +} +.bottom-page.large-icon.private{ + background-position:22px -4305px +} +.bottom-page.large-icon.fingerprint{ + background-position:-151px -4322px +} +.bottom-page.large-icon.history{ + background-position:21px -4493px +} +.bottom-page.angle-bg.blue{ + background-color:initial; + background-image:url(../imagery/mega-bottom-page-business-bg3-2x.1140fb826f4606de.png); + background-position:center 0; + bottom:auto; + height:1343px; + margin:-120px 0 0; + top:0 +} +.bottom-page.angle-bg.light-blue{ + background-color:initial; + background-image:url(../imagery/mega-bottom-page-light-blue-angle-2x.49a8214270e53a4b.png); + background-position:bottom; + bottom:0; + height:1119px; + top:auto +} +.bottom-page.top-bl>.vertical-centered-cell .bottom-page.angle-bg.light-blue{ + bottom:-10px +} +.bottom-page.blue-bg{ + font-size:0; + position:relative +} +.bottom-page.angle-pad.blue-bg{ + padding-top:347px +} +.bottom-page.dark-blue-bg{ + background-color:#262f3b; + font-size:0 +} +.dark-blue-bg .bottom-page.top-dark-info{ + color:#fff +} +.dark-blue-bg .bottom-page.top-description{ + color:#fff; + padding:28px 0 +} +.bottom-page.big-link.red{ + color:#f0373b; + margin-bottom:12px +} +.bottom-page.big-link.red i{ + background-position:-211px -3401px +} +.bottom-page.bottom-description{ + color:hsla(0, 0%, 100%, .6); + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:13px; + line-height:22px; + padding:24px 0 0 +} +.security-page-video-block .download.video-block{ + border-radius:4px; + display:block; + height:360px; + margin:0 auto; + overflow:hidden; + position:relative +} +.security-page-video-block{ + background-color:#fff; + border:8px solid #fff; + border-radius:8px; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + box-sizing:border-box; + display:block; + height:367px; + margin:48px auto 32px; + max-width:640px; + padding:0; + position:relative +} +.securitypractice .business-info-block{ + display:inline-block; + max-width:620px; + padding:0 20px; + text-align:left +} +.bottom-page .security-illustration{ + background-image:url(../imagery/mega-security-page.668775c058380a15.png); + background-size:750px auto; + display:block; + height:249px; + left:50%; + margin-left:-187px; + position:relative; + width:375px +} +.bottom-page .security-illustration.root-password{ + background-position:0 0 +} +.bottom-page .security-illustration.create-password{ + background-position:-375px 0 +} +.bottom-page .security-illustration.backup-password{ + background-position:-375px -299px; + height:170px +} +.bottom-page .security-illustration.twofactor{ + background-position:0 -498px +} +.bottom-page .security-illustration.transparency-opensource{ + background-position:-375px -507px +} +.bottom-page .security-illustration.safe{ + background-position:26px -247px +} +.bottom-page .security-illustration.exclamation-triangle{ + background-position:-392px -1016px; + display:inline-block; + height:34px; + width:34px +} +.bottom-page.min-height-400{ + min-height:400px +} +.bottom-page.auth-app-select-tooltip,.bottom-page.password-manager-app-select{ + background-color:#fff; + border:1px solid #fff; + border-radius:12px; + box-shadow:0 0 0 0 transparent; + margin:12px 0 0; + position:relative; + width:100% +} +.bottom-page.auth-app-select-tooltip .app-link,.bottom-page.password-manager-app-select .app-link{ + background-image:linear-gradient(-180deg, #fff, #fcfcfc); + border:1px solid rgba(0, 0, 0, .1); + border-radius:4px; + box-shadow:0 0 0 0 rgba(0, 0, 0, .05); + cursor:pointer; + display:inline-block; + margin:8px 0 0; + position:relative; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + width:calc(50% - 6px) +} +.bottom-page.auth-app-select-tooltip .app-link:hover{ + border:1px solid rgba(0, 0, 0, .1); + box-shadow:0 0 0 4px rgba(0, 0, 0, .15); + -webkit-transition:all .1s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.bottom-page.auth-app-select-tooltip .app-link:nth-of-type(odd){ + margin-right:8px +} +.bottom-page.auth-app-select-tooltip .app-link-text{ + color:#4c5251; + display:block; + font-family:LatoWeb; + font-size:14px; + font-weight:500; + letter-spacing:.2px; + line-height:56px; + margin-left:64px +} +.bottom-page .auth-app-select-tooltip .app-link-icon{ + background:url(../imagery/mega-2fa-auth-apps.f1691735c7bef98e.png); + background-repeat:no-repeat; + display:inline-block; + height:32px; + left:14px; + position:absolute; + top:12px; + width:32px +} +.bottom-page .auth-app-select-tooltip .authy .app-link-icon{ + background-position:-2px -2px +} +.bottom-page .auth-app-select-tooltip .duomobile .app-link-icon{ + background-position:-38px -2px +} +.bottom-page .auth-app-select-tooltip .googleauthenticator .app-link-icon{ + background-position:-2px -38px +} +.bottom-page .auth-app-select-tooltip .microsoftauthenticator .app-link-icon{ + background-position:-38px -38px +} +.bottom-page.auth-app-select-tooltip .app-link-arrow{ + -webkit-tap-highlight-color:rgba(0,0,0,0); + -webkit-tap-highlight-color:transparent; + background-image:url(../imagery/mega-2fa-auth-apps.f1691735c7bef98e.png); + background-position:-14px -77px; + background-repeat:no-repeat; + height:14px; + position:absolute; + right:25px; + top:19px; + width:8px +} +.bottom-page.password-manager-app-select .app-link-icon{ + background:url(../imagery/mega-security-page.668775c058380a15.png); + background-repeat:no-repeat; + display:inline-block; + height:32px; + left:14px; + position:absolute; + top:12px; + width:32px +} +.bottom-page.password-manager-app-select .onepassword .app-link-icon{ + background-position:-9px -1016px +} +.bottom-page.password-manager-app-select .keepass .app-link-icon{ + background-position:-57px -1016px +} +.bottom-page.password-manager-app-select .lastpass .app-link-icon{ + background-position:-102px -1016px +} +.securitypractice .bottom-page.large-subheader{ + margin-top:32px +} +.securitypractice .bottom-page.business-header{ + padding-top:0 +} +.bottom-page.business-text.password-warning{ + background-color:#fff3f3; + border:1px solid #f88b96; + border-radius:4px; + display:table; + margin-top:24px; + padding:4px 12px 4px 8px +} +.bottom-page.business-text.password-warning span{ + color:#333; + display:table-cell; + font-family:LatoWebBold; + padding:0 4px; + position:static; + vertical-align:middle +} +body:not(.mobile) .securitypractice .business-text a.red:hover{ + text-decoration:underline +} +.securitypractice .improved-recovery-steps h5.main-italic-header{ + max-width:100% +} +.securitypractice .improved-recovery-steps .recover-paste-block{ + background:#fff; + border:1px solid rgba(38, 47, 59, .1); + margin:24px 0 4px +} +.securitypractice .improved-recovery-steps .recover-paste-block .right-section>div{ + margin-right:0 +} +.securitypractice .bottom-page.auth-app-select-tooltip,.securitypractice .bottom-page.password-manager-app-select{ + z-index:10 +} +.securitypractice .auth-app-select-tooltip .app-link-arrow{ + top:21px +} +.securitypractice .improved-recovery-steps .recover-paste-block .right-section{ + width:49.5% +} +.extension.img-wrap{ + display:inline-block; + font-size:0; + line-height:0; + margin:95px 0 58px; + position:relative +} +.extension.img-wrap img{ + max-width:807px; + width:100% +} +.extension.img-wrap img.ext2{ + left:0; + position:absolute; + top:0 +} +.browsers .bottom-page.mid-icon-info{ + margin-left:auto; + margin-right:auto; + max-width:500px +} +.browsers .bottom-page.mid-icon-info a{ + display:inline-block; + max-width:100%; + overflow:hidden; + text-overflow:ellipsis; + vertical-align:top +} +.bird .bottom-page.full-block{ + position:static +} +.bottom-page.img.bird-top{ + margin:92px 0 92px 36px; + max-width:600px; + width:100% +} +.bottom-page.top-title.bird{ + padding-top:0 +} +.bird .bottom-page.top-dark-button{ + border-radius:8px; + display:inline-block; + margin-top:28px; + min-width:280px +} +.bird .bottom-page.top-copyrights{ + padding:0 40px 50px; + position:relative; + text-align:center +} +.bird .bottom-page.horizontal-centered-bl.wide{ + max-width:1350px +} +.bird .top-bl .horizontal-centered-bl{ + min-height:545px +} +.bird .bottom-page.top-dark-info.small.light-grey{ + padding-top:30px +} +.bird .bottom-page.scroll-button.mid .scroll-icon{ + margin-bottom:60px +} +.bird .bottom-page.top-bl>.vertical-centered-cell .bottom-page.angle-bg{ + bottom:-310px +} +.bottom-page.img.bird-img2{ + display:block; + margin:0 auto 10px; + max-width:493px; + width:100% +} +.bird .bottom-page.top-dark-button{ + border-radius:8px; + display:inline-block; + margin:28px -25px 0; + min-width:280px +} +.main-mid-pad.opensource{ + padding:76px 15px +} +.opensource-bg{ + height:100%; + position:absolute; + width:100% +} +.opensource-bg:after{ + background-color:#fff; + content:""; + display:block; + height:inherit; + margin:0 auto; + width:inherit +} +.opensource-top-icon{ + background-image:url(../imagery/mega-opensource.9a3dc97bed21b2b1.png); + background-position:-30px 1px; + background-repeat:no-repeat; + float:left; + height:46px; + margin-left:-1px; + width:44px +} +.opensource hr{ + background-color:hsla(0, 0%, 59.2%, .2); + border:0; + float:left; + height:17px; + margin:12px 0 0 15px; + padding:0; + width:1px +} +.opensource h1{ + color:rgba(34, 34, 34, .75); + float:left; + font-family:source_sans_prosemibold; + font-size:28px; + line-height:40px; + margin:0 0 4px 15px; + padding:0 +} +.opensource>p{ + letter-spacing:.2px +} +.opensource-grey-background{ + background-color:#fafafa +} +.opensource-icons-bl{ + margin:0 auto; + padding:60px 0 +} +.opensource-icon-pad{ + float:left; + padding:40px 0; + text-align:center; + width:25% +} +.opensource-icon{ + background-image:url(../imagery/mega-opensource.9a3dc97bed21b2b1.png); + background-repeat:no-repeat; + display:block; + height:102px; + margin:0 auto; + width:102px +} +.opensource-icon,.opensource-icon.webclient{ + background-position:center -109px +} +.opensource-icon.firefox{ + background-position:center -249px +} +.opensource-icon.chrome{ + background-position:center -389px +} +.opensource-icon.thunderbird{ + background-position:center -1229px +} +.opensource-icon.sdk{ + background-position:center -809px +} +.opensource-icon.megasync{ + background-position:center -529px +} +.opensource-icon.android{ + background-position:center -669px +} +.opensource-icon.ios{ + background-position:center -950px +} +.opensource-icon.cmd{ + background-position:center -1369px +} +.opensource-icon.windowsphone{ + background-position:center -1090px +} +.opensource-icon.coming-soon{ + cursor:default; + opacity:.5 +} +a.opensource-icon-txt{ + color:#444; + display:inline-block; + font-family:source_sans_prosemibold; + padding:20px 4px 0 +} +a.opensource-icon-txt.coming-soon{ + cursor:default +} +.opensource-icon-txt>span{ + color:#777 +} +.mega-button.positive.height-48.download-app,.mega-button.positive.height-48.redirect-clouddrive{ + font-size:16px; + margin-top:10px; + padding:0 24px; + z-index:999 +} +.onboard-container-size .bottom-page.horizontal-centered-bl{ + box-sizing:border-box; + height:640px; + min-height:680px; + padding:24px 20px 0; + z-index:999 +} +.onboard-container-size .bottom-page.horizontal-centered-bl.resize{ + min-height:600px +} +.split-buttons div.radioOff,.split-buttons div.radioOn{ + background-color:#fff; + border:1px solid #ddd; + -moz-border-radius:3px; + -webkit-border-radius:3px; + border-radius:3px; + -webkit-box-shadow:0 0 0 0 rgba(0, 0, 0, .1); + -moz-box-shadow:0 0 0 0 rgba(0, 0, 0, .1); + box-shadow:0 0 0 0 rgba(0, 0, 0, .1); + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + cursor:pointer; + float:left; + height:36px; + margin-right:0; + margin-top:0; + position:relative; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + width:calc(50% - 4px) +} +.split-buttons div.radioOff:before,.split-buttons div.radioOn:before{ + -moz-border-radius:0; + -webkit-border-radius:0; + border-radius:0; + -webkit-box-shadow:0 0 0 0 rgba(0, 0, 0, .15); + -moz-box-shadow:0 0 0 0 rgba(0, 0, 0, .15); + box-shadow:0 0 0 0 rgba(0, 0, 0, .15); + content:none; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.split-buttons div.radioOff:after,.split-buttons div.radioOn:after{ + background-color:transparent; + border:0 solid transparent; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + content:none; + display:inline-block; + height:100%; + width:100% +} +.split-buttons .radio-txt{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#777; + display:block; + float:none; + font-family:LatoWeb,source_sans_proregular,sans-serif; + font-size:14px; + line-height:34px; + max-width:100%; + padding-right:0; + padding-top:0 +} +.split-buttons div.radioOff:hover{ + border:1px solid #5bc6b8 +} +.split-buttons div.radioOff:hover,.split-buttons div.radioOn{ + background-color:#e5f8f6; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.split-buttons div.radioOn{ + border:1px solid #a0e8de +} +.split-buttons div.radioOn .radio-txt{ + color:#495057; + font-family:LatoWebBold,Arial +} +.mobile .payment-method{ + width:50% +} +.pro-crest-container .plan-icon{ + margin:14px 0 0 14px +} +.mobile .megaapp-button-info,.mobile button.inline{ + display:none +} +.mobile .megacmd .top-bl .top-header,.mobile .megacmd .top-header,.mobile .megasync .top-bl .medium-txt.small-lineheight{ + padding-bottom:63px +} +.affiliate-page .bottom-page.full-block{ + position:static +} +.affiliate-page .bottom-page.top-bl{ + background-color:#00c0a6; + font-family:LatoWeb,source_sans_proregular,Arial; + margin-bottom:80px; + max-height:none +} +.affiliate-page .bottom-page.content{ + overflow:hidden +} +.rtl .affiliate-page .bottom-page.startpage{ + direction:rtl +} +.affiliate-page .bottom-page.top-title{ + color:#fff; + font-family:LatoWebBold,source_sans_probold,Arial +} +.affiliate-page.top-header{ + color:#fff; + font-family:var(--text-font-family-second-light); + font-size:40px; + letter-spacing:-.33px; + line-height:63px; + margin:0 auto; + max-width:1005px; + padding:36px 0 13px +} +.affiliate-page.top-info{ + color:#fff; + font-size:18px; + letter-spacing:-.15px; + line-height:28px +} +.affiliate-page.buttons{ + margin:17px auto 0; + max-width:880px +} +.bottom-page.white-button{ + background-color:#fff; + border-radius:2px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#00c0a6; + cursor:pointer; + display:inline-block; + font-family:LatoWebBold,source_sans_probold,Arial; + font-size:18px; + height:48px; + line-height:48px; + margin-top:15px; + min-width:200px; + padding:0 10px; + text-align:center; + -webkit-transition:box-shadow .2s ease-in-out; + transition:box-shadow .2s ease-in-out +} +body:not(.mobile) .bottom-page.white-button:hover{ + -webkit-box-shadow:0 0 0 4px hsla(0, 0%, 100%, .4); + -moz-box-shadow:0 0 0 4px hsla(0, 0%, 100%, .4); + box-shadow:0 0 0 4px hsla(0, 0%, 100%, .4) +} +.bottom-page.white-button.dashboard,.logged .bottom-page.white-button.join{ + display:none +} +.logged .bottom-page.white-button.dashboard{ + display:inline-block +} +.affiliate.img-wrap{ + left:25px; + margin:32px auto 0; + max-width:1247px; + position:relative; + top:61px +} +.affiliate.img-wrap img{ + position:relative; + width:100% +} +.affiliate.img-wrap img.abs{ + left:0; + position:absolute; + top:0 +} +.affiliate.img-wrap img.i2{ + z-index:2 +} +.affiliate.img-wrap img.i1{ + z-index:1 +} +.affiliate.img-wrap img.i3{ + z-index:3 +} +.affitiate.calc-header{ + color:#000; + font-family:var(--text-font-family-second-regular); + font-size:40px; + letter-spacing:-.36px; + line-height:54px; + padding:50px 0 66px +} +.affitiate .ref-asterisk{ + display:inline-block; + font-size:30px; + vertical-align:top +} +.affitiate.calc-header span{ + color:#00c0a6; + cursor:pointer; + position:relative; + white-space:nowrap +} +.affitiate.calc-header span:before{ + background-color:#00c0a6; + bottom:4px; + content:""; + height:2px; + left:0; + position:absolute; + width:100% +} +body:not(.mobile) .affitiate.calc-header span:hover:before{ + display:none +} +.affitiate.calc-info{ + color:#9b9b9b; + font-family:LatoWebBold,source_sans_probold,Arial; + font-size:20px; + line-height:24px +} +.affitiate.calc-info.big{ + line-height:28px +} +.affitiate.calc-info.black{ + color:#000 +} +.affitiate.calc-price{ + -webkit-text-fill-color:transparent; + background:-webkit-linear-gradient(left, #ff15d1, #ff3b40 50%, #fca100); + -webkit-background-clip:text; + color:#ff3b40; + font-family:LatoWebBlack,source_sans_probold,Arial; + font-size:160px; + line-height:184px; + padding:0 0 33px +} +.affiliate.icon-info{ + color:#000; + font-family:var(--text-font-family-second-regular); + font-size:28px; + line-height:34px; + padding:20px 0 0 +} +.en .affiliate.icon-info{ + margin:0 auto; + max-width:272px +} +.bottom-page.large-icon.top-pad{ + margin-top:61px +} +.affiliate.refer-blocks{ + border-collapse:initial; + border-spacing:20px; + display:table; + margin:auto; + max-width:1140px; + table-layout:fixed; + width:100% +} +.affiliate.refer-cell{ + background-color:#fff; + border-radius:4px; + -webkit-box-shadow:1px 1px 10px 1px hsla(0, 0%, 74.5%, .5); + -moz-box-shadow:1px 1px 10px 1px hsla(0, 0%, 74.5%, .5); + box-shadow:1px 1px 10px 1px hsla(0, 0%, 74.5%, .5); + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + display:table-cell; + padding:20px 10px; + position:relative; + vertical-align:top; + width:25% +} +.affiliate.refer-separator{ + display:none +} +.affiliate.refer-header{ + color:#000; + font-family:var(--text-font-family-second-light); + font-size:26px; + line-height:32px; + margin:-2px 0 10px; + min-height:64px; + -webkit-transition:color .5s ease-in-out; + transition:color .5s ease-in-out +} +body:not(.mobile) .affiliate.refer-cell:hover .affiliate.refer-header{ + color:#00c0a6 +} +.affiliate.refer-txt{ + color:#666; + font-size:16px; + line-height:24px; + margin:0 0 136px +} +.affiliate.refer-bottom{ + bottom:0; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + height:136px; + left:0; + padding:0 10px; + position:absolute; + width:100% +} +.affiliate.refer-link{ + color:#666; + cursor:pointer; + display:block; + font-size:16px; + letter-spacing:-.13px; + line-height:19px; + margin:25px 0 0; + text-decoration:underline +} +.bottom-page.green-button{ + background-color:#00c0a6; + border-radius:2px; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + cursor:pointer; + display:inline-block; + font-family:LatoWebBold,source_sans_probold,Arial; + font-size:16px; + line-height:18px; + min-width:170px; + padding:15px 12px; + -webkit-transition:box-shadow .2s ease-in-out; + transition:box-shadow .2s ease-in-out +} +.en .bottom-page.green-button{ + font-size:18px +} +body:not(.mobile) .bottom-page.green-button:hover{ + -webkit-box-shadow:0 0 0 4px rgba(0, 191, 165, .3); + box-shadow:0 0 0 4px rgba(0, 191, 165, .3) +} +.affiliate.img2{ + margin:10px 0 0 -13px; + max-width:873px; + width:200% +} +.bottom-page.left-cell .img-description.max-width{ + max-width:340px +} +.affiliate.faq-subheader{ + color:#666; + font-size:18px; + letter-spacing:-.15px; + line-height:28px; + padding:0 0 73px +} +.affiliate.faq-block{ + border-radius:8px; + -webkit-box-shadow:0 0 0 2px rgba(0, 0, 0, .1); + -moz-box-shadow:0 0 0 2px rgba(0, 0, 0, .1); + box-shadow:0 0 0 2px rgba(0, 0, 0, .1); + color:rgba(55, 55, 55, .76); + cursor:pointer; + margin:30px auto 0; + max-width:800px; + padding:0 130px 7px 30px; + position:relative; + text-align:left +} +body:not(.mobile) .affiliate.faq-block:not(.expanded):hover{ + background-color:#fff; + color:#373737 +} +.affiliate.faq-block.expanded{ + -webkit-box-shadow:none; + -moz-box-shadow:none; + box-shadow:none; + color:#373737; + cursor:default +} +.affiliate.faq-header{ + font-family:LatoWebBold,source_sans_probold,Arial; + font-size:22px; + line-height:28px; + padding:37px 0 28px +} +.affiliate.faq-txt{ + font-size:16px; + line-height:24px; + max-height:0; + opacity:0; + overflow:hidden; + -webkit-transition:all .5s ease-in-out; + transition:all .5s ease-in-out +} +.affiliate.faq-txt span{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + display:block; + padding:0 0 34px +} +.affiliate.faq-txt span .note{ + color:#666; + font-size:14px; + padding-top:5px +} +.affiliate.faq-txt a,.affiliate.faq-txt a:visited{ + color:#00c0a6; + text-decoration:underline +} +.expanded .affiliate.faq-txt{ + max-height:500px; + opacity:1 +} +.affiliate.expand-faq{ + cursor:pointer; + position:absolute; + right:35px; + top:38px +} +.affiliate.expand-faq i{ + opacity:.4; + -webkit-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out +} +.expanded .affiliate.expand-faq i,body:not(.mobile) .affiliate.faq-block:hover .affiliate.expand-faq i{ + opacity:.6 +} +body:not(.mobile) .affiliate.faq-block .affiliate.expand-faq:hover i{ + opacity:.8 +} +.affiliate.faq-bottom-txt{ + color:#000; + font-size:20px; + letter-spacing:-.17px; + line-height:24px; + padding:60px 0 0 +} +.affiliate.faq-bottom-txt a,.affiliate.faq-bottom-txt a:visited{ + color:#00c0a6; + text-decoration:underline +} +.affiliate-list.col-2{ + padding:0 25px; + text-align:left +} +.bottom-page.list{ + padding:58px 0 16px +} +.affiliate-list{ + color:#fff; + font-size:16px; + line-height:24px +} +.bottom-page.list-item{ + margin-top:24px; + padding:0 0 0 22px; + position:relative +} +.bottom-page.list-item .note{ + font-size:14px; + padding-top:5px +} +.bottom-page.list-item i{ + display:block; + left:0; + position:absolute; + top:7px +} +.bottom-page.list-item a,.bottom-page.list-item a:visited{ + color:#00c0a6; + text-decoration:underline +} +.bottom-page.dropdown{ + background-color:#fff; + border-radius:8px; + -webkit-box-shadow:2px 2px 6px 0 hsla(0, 0%, 67.5%, .5); + -moz-box-shadow:2px 2px 6px 0 hsla(0, 0%, 67.5%, .5); + box-shadow:2px 2px 6px 0 hsla(0, 0%, 67.5%, .5); + overflow:hidden; + position:absolute; + z-index:10 +} +.bottom-page.dropdown .dropdown-item{ + border-radius:0; + -webkit-box-shadow:0 1px 0 0 #eee; + -moz-box-shadow:0 1px 0 0 #eee; + box-shadow:0 1px 0 0 #eee; + color:#000; + font-size:20px; + height:48px; + line-height:48px; + padding:0 20px; + text-align:center; + text-transform:uppercase; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.bottom-page.affiliate-page .bottom-page.dropdown.time .dropdown-item{ + text-transform:none +} +.bottom-page.dropdown .dropdown-item:last-child{ + -webkit-box-shadow:none; + -moz-box-shadow:none; + box-shadow:none +} +.bottom-page.dropdown .dropdown-item.active,body:not(.mobile) .bottom-page.dropdown .dropdown-item:hover{ + background-color:#00c0a6 !important; + color:#fff +} +.bottom-page.dropdown .dropdown-content{ + -webkit-overflow-scrolling:touch; + max-height:290px; + min-width:80px; + overflow-y:auto +} +.fullscreen .dropdown-wrap,.max-height .dropdown-wrap{ + padding:25px 0 +} +.dropdown-control{ + background-color:#fff; + cursor:default; + display:none; + position:absolute; + text-align:center; + z-index:1 +} +.dropdown-control.down{ + bottom:0 +} +.dropdown-control i{ + margin:0 auto +} +.fullscreen .dropdown-control,.max-height .dropdown-control{ + display:block +} +.bottom-page.dropdown.fullscreen{ + height:100%; + height:-webkit-calc(100% - 10px); + height:-moz-calc(100% - 10px); + height:calc(100% - 10px); + position:fixed; + top:5px!important; + z-index:210 +} +.dropdown.fullscreen .dropdown-content{ + height:100%; + height:-webkit-calc(100% - 50px); + height:-moz-calc(100% - 50px); + height:calc(100% - 50px); + max-height:none +} +.bottom-page.top-dark-info.nas{ + font-size:16px; + margin:0 auto; + max-width:800px; + padding:0 +} +.bottom-page.top-dark-info.nas.pad{ + padding:63px 0 24px +} +.bottom-page.nas-logos{ + font-size:0; + padding:0 0 220px; + text-align:center +} +.bottom-page.nas-logos .top-dark-info.nas{ + padding-top:7px +} +.bottom-page.nas-logos a{ + display:inline-block; + margin:33px 25px 0; + max-width:100%; + vertical-align:top +} +.bottom-page.nas-logos .synology{ + max-width:205px; + width:100% +} +.bottom-page.nas-logos .qnap{ + margin-top:8px; + max-width:225px; + width:100% +} +.bottom-page.cols-wrap{ + margin:92px -28px 0 +} +.bottom-page.semibig-icon-info{ + color:#333; + font-size:18px; + line-height:27px; + padding:20px 0 0 +} +.bottom-page.semibig-icon-info:visited,.bottom-page.semibig-icon-info a{ + color:inherit; + text-decoration:underline +} +.cols-wrap.left-txt-align .bottom-page.icon.x96{ + margin:0 +} +.bottom-page.business-header.small-txt{ + font-size:20px +} +@media only screen and (min-width:1200px){ +.bottom-page.icon-blocks-wrap .inline-block.mid-pad{ + padding:26px 58px +} +.megasync .top-bl{ + min-width:1200px +} +} +@media only screen and (max-width:768px){ +.megasync .bottom-page.left-cell,.megasync .bottom-page.right-cell{ + display:block; + width:100% +} +.megasync .sync-3 .bottom-page img{ + margin:32px auto +} +} +@media only screen and (max-width:1900px){ +.bottom-page.angle-bg,.bottom-page.grey-angle-bg{ + background-size:cover !important +} +.bottom-page.grey-angle-bg{ + background-image:linear-gradient(transparent, transparent), url(../imagery/mega-bottom-page-grey-angle.41e583d8e18bfd30.svg) !important +} +.bottom-page.angle-bg.light{ + background-size:auto 1343px !important +} +} +@media only screen and (max-height:1385px){ +.bottom-page.img.mobile-top{ + width:100% +} +} +@media only screen and (max-height:700px){ +.startpage.top-header{ + padding-top:64px +} +.top-bl .top-title,.top .top-title{ + padding-top:60px +} +.megacmd .bottom-page.nav-buttons-bl.dark{ + margin-bottom:160px +} +.bottom-page.top-dark-info.small{ + padding:20px 0 0 +} +.bottom-page.nas-logos{ + padding-bottom:180px +} +} +@media only screen and (max-width:1280px){ +.bottom-page.img.bird-img2{ + margin-left:36px +} +} +@media only screen and (max-width:1260px) and (min-height:750px){ +.bottom-page.img.ios-top{ + bottom:73px; + margin:auto; + max-height:75.5%; + padding:0 37px 0 1px; + right:0; + top:0 +} +.bottom-page.img.android-top{ + bottom:73px; + margin:auto 0; + max-height:75.5%; + padding:0 1px 0 37px; + right:0; + top:0 +} +} +@media only screen and (max-width:1180px){ +.affiliate.refer-cell{ + width:50% +} +.affiliate.refer-separator{ + display:table-row +} +.affiliate.refer-blocks{ + border-spacing:20px 10px; + display:block; + margin:10px auto; + max-width:700px +} +.affiliate.img2{ + width:120% +} +} +@media only screen and (max-width:1005px){ +.affiliate.icon-info,.affiliate.refer-header{ + font-size:24px +} +.bottom-page.location-right-dist{ + display:table; + width:100% +} +.location-wrapper{ + display:inline-block; + vertical-align:top +} +.bottom-page.location-left-dist{ + padding-bottom:40px +} +.top.img{ + width:100% +} +} +@media only screen and (max-width:987px){ +.bottom-page.top-dark-info.big{ + font-size:38px; + line-height:62px +} +.col-2.cmd-pad{ + padding-right:20px +} +.col-2.cmd-pad:nth-child(odd){ + padding:58px 0 7px 20px +} +.bottom-page.cols-container .col3{ + padding:32px 30px +} +.bottom-page.mid-icon{ + background-size:244px auto !important; + height:56px; + width:56px +} +.bottom-page.mid-icon.dav{ + background-position:-6px -1745px +} +.bottom-page.mid-icon.config{ + background-position:-99px -1657px +} +.bottom-page.mid-icon.interactive{ + background-position:-6px -1575px +} +.bottom-page.mid-icon.script{ + background-position:-100px -1571px +} +.bottom-page.mid-icon.live{ + background-position:-6px -1657px +} +.bottom-page.mid-icon.ftp{ + background-position:-96px -1745px +} +.bottom-page.icon-info{ + margin:0 0 0 82px +} +.affiliate.img-wrap{ + left:8px; + top:21px +} +.affitiate.calc-price{ + font-size:120px +} +.ru .affiliate.icon-info{ + font-size:20px +} +.ar .pages-nav.button-label{ + font-size:14px +} +.ar .pages-nav.content{ + padding:0 5px +} +} +@media only screen and (max-width:970px){ +.bottom-page.dark-button{ + margin:16px 8px 0 +} +.dark-blue-bg .bottom-page.dark-button{ + margin:0 +} +.securitypractice .huge-bott-pad.top-bl{ + padding-bottom:0 +} +.securitypractice .left-cell-35,.securitypractice .left-cell-65,.securitypractice .right-cell-35,.securitypractice .right-cell-65{ + display:block; + width:100% +} +.securitypractice .bottom-page.business-header{ + padding-top:34px +} +.securitypractice .business-info-block{ + max-width:none +} +.securitypractice .right-cell-35.order1{ + display:none +} +.securitypractice .bottom-page.table.changed-order .right-cell-35.order2{ + display:block +} +.bottom-page .security-img.safe{ + background-size:auto 100%; + margin:20px auto; + max-width:100% +} +.bottom-page.img.tm{ + padding:120px 0 0 +} +.affiliate.faq-header{ + font-size:18px; + padding:32px 0 24px +} +.affiliate.faq-block{ + padding-right:80px +} +.affiliate.expand-faq{ + margin-top:0; + right:24px; + top:35px +} +.expanded .affiliate.faq-txt{ + padding:0 0 14px +} +.affiliate.faq-bottom-txt{ + font-size:18px +} +} +@media only screen and (max-width:890px){ +.bottom-page.img.ios2{ + margin:80px -12.5% 0 +} +.bottom-page.big-header,.bottom-page.bold-title,.bottom-page.business-header,.bottom-page.container-title,.bottom-page.dark-big-header,.bottom-page.large-header,.bottom-page.large-header.big,.bottom-page.top-dark-info.medium{ + font-size:30px +} +.mobileapp .top-bl .horizontal-centered-bl{ + min-height:auto +} +.top.img{ + width:unset +} +} +@media only screen and (max-width:870px){ +.bottom-btn-container p{ + display:block; + padding:0 0 5px; + position:static +} +.bottom-btn-container{ + margin:30px 0 0; + white-space:normal +} +.bottom-btn-container p{ + display:block; + padding:0 0 5px; + position:static +} +.bottom-btn-container{ + margin:30px 0 0; + white-space:normal +} +.affitiate.calc-price{ + font-size:100px; + line-height:124px +} +} +@media only screen and (max-width:805px) and (max-height:665px),only screen and (min-height:665px){ +.medium-txt.small-lineheight.info{ + display:none +} +} +@media only screen and (max-width:783px){ +.bottom-page.small-txt{ + font-size:14px; + line-height:24px +} +.inline-block.inner-pad{ + padding:unset; + padding-top:50px; + text-align:center +} +.bottom-page.img.mobile-top{ + margin:0 0 50px +} +.top-bl .bottom-page.table.changed-order .order1{ + display:none +} +.top-bl .bottom-page.table.changed-order .order2{ + display:block +} +.top-bl .bottom-page.table.changed-order.left-cell{ + height:auto +} +.top-bl .bottom-page.table{ + height:auto; + text-align:center +} +.top-bl .bottom-page.left-cell,.top-bl .bottom-page.table-cell{ + display:inline-block; + width:100% +} +.top-bl .bottom-page.left-cell .img-description{ + text-align:center +} +.bottom-page.img.android-top,.bottom-page.img.ios-top{ + margin:0 auto -113px; + max-width:40%; + padding:0; + position:static +} +.top-bl .bottom-page.half-sized-cell{ + max-width:none; + padding:0 40px; + text-align:center +} +.top-bl .mobile-apps-button{ + margin:38px auto 47px +} +.bottom-page.img.sync-top{ + margin-top:-30px; + max-width:60%; + position:relative; + right:0 +} +.mobile .extension.img-wrap{ + margin:43px 0 0 +} +.browsers .bottom-page.huge-top-pad{ + padding-top:45px +} +.extension.img-wrap{ + display:inline-block; + margin:72px 0 0 +} +.bottom-page.top-button-info{ + padding:78px 0 0 +} +.bird .bottom-page.scroll-button.mid,.browsers .bottom-page.scroll-button.mid,.browsers .bottom-page.top-dark-info.small.light-grey{ + display:none +} +.bottom-page.top-dark-button{ + min-width:100px; + padding:14px 15px 0 +} +.bottom-page.top-dark-button i{ + margin-right:10px +} +.bottom-page.top-dark-button .label{ + font-size:20px +} +.bottom-page.top-copyrights.small-pad{ + margin:-14px 0 0 +} +.bottom-page.img.bird-top{ + margin:50px 0 0; + max-width:580px +} +.bird .bottom-page.top-copyrights{ + padding:43px 40px 150px +} +.bird .bottom-page.scroll-button.mid{ + display:none +} +.bird .bottom-page.ultra-huge-top-pad{ + padding-top:0 +} +.bird .bottom-page.vertical-centered-cell.left-cell,.bird .bottom-page.vertical-centered-cell.right-cell{ + display:block; + width:100% +} +.bottom-page.top-title.bird{ + padding-top:60px +} +.bird .bottom-page.table.changed-order .order1{ + display:none +} +.bird .bottom-page.table.changed-order .order2{ + display:block; + height:auto +} +.bird .inline-block.mid-pad{ + margin:0 auto; + max-width:400px +} +.bottom-page.img.bird-img2{ + margin:0 auto 67px; + max-width:580px +} +.bottom-page.big-header.top-small-pad{ + margin-top:0; + padding:60px 0 15px +} +.pages-nav.content{ + padding:0; + width:100% +} +.bottom-page.angle-pad.blue-bg{ + padding-top:107px +} +.bottom-page.angle-bg.blue{ + margin:-300px 0 0 +} +.mobileapp .full-block .bottom-page.img{ + margin:0; + width:100% +} +.bottom-page.img.tm{ + padding:161px 0 0 +} +.megasync .bottom-page.table.changed-order .order2{ + display:block; + height:auto; + margin:0 auto 48px +} +.mobileapp .bottom-page.table.changed-order .order2{ + display:block +} +.megasync .bottom-page.table.changed-order .order1,.mobileapp .bottom-page.table.changed-order .order1{ + display:none +} +.megasync .bottom-page.left-cell,.megasync .bottom-page.right-cell,.mobileapp .bottom-page.left-cell,.mobileapp .bottom-page.right-cell{ + display:block; + height:auto; + text-align:center; + width:100% +} +.megasync .sync-2 .bottom-page img{ + max-width:735px; + width:100% +} +.megasync .sync-3 .bottom-page img{ + margin:32px auto +} +.megasync .left-cell .business-info-block,.megasync .right-cell .business-info-block{ + padding:0 +} +.megasync .sync-4 .bottom-page img,.megasync .sync-5 .bottom-page img{ + margin:32px auto; + width:100% +} +.bottom-menu .col2-of-6{ + width:32% +} +.bottom-page.mid-header{ + max-width:640px +} +.pages-nav.button-label,.pages-nav.nav-button.active.greyed-out .button-label{ + font-size:14px +} +.bottom-page.top-header{ + max-width:610px +} +.bottom-page.big-icons-bl{ + padding-left:10px; + padding-right:10px +} +.bottom-page.big-icons-bl .col-3{ + width:50% +} +.big-icons-bl .bottom-page.small-txt{ + padding-left:30px; + padding-right:30px +} +.bottom-page .img-description{ + max-width:300px +} +.bottom-page.left-cell .img-description{ + padding-right:0 +} +.bottom-page.right-cell .img-description{ + padding-left:0 +} +.bottom-page .img-description.no-width{ + max-width:none +} +.bottom-page.img.ios2{ + margin-top:120px +} +.bottom-page.hidden-img{ + display:block +} +.bottom-page.table-cell.col-3.img-cell{ + display:none +} +.bottom-page.table-cell.col-3{ + width:50% +} +.hidden-img .bottom-page.img.ios5{ + margin:0; + padding-top:48px; + position:static +} +.hidden-img .bottom-page.img.android4{ + margin:0 0 34px; + padding-top:48px; + position:static +} +.bottom-page.table.side-txt{ + margin-top:-35px +} +.bottom-page.big-bott-pad,.bottom-page.huge-bott-pad{ + padding-bottom:63px +} +.bottom-page.big-top-pad,.bottom-page.huge-top-pad{ + padding-top:63px +} +.bottom-page.ultra-huge-top-pad{ + padding-top:60px +} +.bottom-page.img.megasync.small{ + margin:0; + max-width:350px; + padding:32px 0 34px 8.3%; + width:86.1% +} +.vertical-centered-cell.left-cell.centered-txt{ + padding-left:15px; + text-align:left +} +.bottom-page .inline-block.col-2,.bottom-page .inline-block.col-3{ + display:block; + width:auto +} +.bottom-page .inline-block.col-4{ + width:50% +} +.col-2.cmd-pad,.col-2.cmd-pad:nth-child(odd){ + padding-left:0; + padding-right:0 +} +.browsers .bottom-page .inline-block.col-2{ + display:block +} +.bottom-page.left-cell.right-txt-align{ + text-align:center +} +.privacy-company-icon{ + float:none; + margin:0 auto 30px; + width:120px +} +.privacy-company-icon:first-child{ + margin-top:10px +} +.privacy-company-icon.future{ + width:132px +} +.privacy-company-txt{ + margin-left:0; + text-align:center +} +.privacy-company.new-bottom-pages{ + padding-bottom:20px +} +.bottom-page.horizontal-centered-bl{ + display:block +} +.bottom-page.left-cell .img-description.max-width{ + max-width:none; + text-align:center +} +.affiliate.img2{ + margin:40px 0 30px; + width:100% +} +.affiliate.faq-subheader{ + padding:0 0 20px +} +.bottom-page.list{ + padding:58px 0 0 +} +.affiliate-list:last-child .bottom-page.list{ + padding-bottom:20px; + padding-top:8px +} +.affitiate.calc-price{ + font-size:80px +} +.affiliate-page.top-header{ + font-size:36px; + line-height:48px +} +.affiliate-page .big-header{ + text-align:center +} +.bottom-page.cols-wrap{ + margin:0 +} +.cols-wrap.left-txt-align .bottom-page.icon.x96{ + margin:0 auto +} +.bottom-page.semibig-icon-info{ + color:#666; + font-size:16px; + line-height:24px; + text-align:center +} +.nas .bottom-page.big-top-pad.white-block{ + padding-top:0 +} +.bottom-page.cols-container .col3{ + display:block; + padding:32px 40px; + width:100% +} +.bottom-page.cols-container .col3.mid{ + background-color:#f5f5f5 +} +.cols-container .col3.mid *{ + color:#333 +} +.bottom-page.cols-container.borders .col3:before{ + display:none +} +.bottom-page.icon-blocks-wrap{ + text-align:center +} +.icon-blocks-wrap .bottom-page.icon{ + margin:0 auto +} +} +@media only screen and (max-width:783px) and (max-height:640px){ +.bottom-page.img.android-top,.bottom-page.img.ios-top,.bottom-page.img.sync-top{ + display:none +} +.mobile .megasync .bottom-page.img.sync-top{ + display:block; + margin-top:-45px +} +} +@media only screen and (max-width:702px){ +.bottom-page.img.ios2{ + margin-top:0 +} +.half-sized.absolute-pos{ + position:relative; + text-align:left; + width:100% +} +.inline-block.mid-pad{ + padding:26px 15px +} +.bottom-page.img.ios4{ + margin:6px 0 0; + max-width:130% +} +.bottom-page.img.android5{ + margin:38px 0 0 +} +.bottom-page.img.tm{ + margin:0; + padding:21px 0 0 +} +.affiliate.refer-cell{ + display:block; + margin:20px auto 0; + max-width:360px; + width:100% +} +.affiliate.refer-separator{ + display:none +} +.affiliate.refer-header{ + margin:-2px 0 20px; + min-height:auto +} +.affiliate.refer-txt{ + margin:0 0 26px; + padding:0 15px +} +.affiliate.refer-bottom{ + height:auto; + padding:0 10px 20px; + position:static +} +.bottom-page.top-bl{ + padding-top:86px +} +} +@media only screen and (max-width:700px){ +.bottom-page.cols-container .tab-body.dark,.bottom-page.tab-button{ + -moz-border-radius:0; + -webkit-border-radius:0; + border-radius:0 +} +.bottom-page.cols-container .tab-body.dark.main,.bottom-page.tab-button.active:before{ + display:none +} +.bottom-page.cols-container .tab-body.dark.low.active{ + display:block; + padding:6px +} +.tab-body.dark .bottom-page.dark-tab-img{ + display:block +} +.bottom-page.tab-body button{ + margin-top:18px +} +.bottom-page.big-bott-pad.cmd{ + padding-bottom:48px +} +.bottom-page.cols-container .tab-body{ + padding-top:0 +} +} +@media only screen and (max-height:685px){ +.bottom-page.top-dark-info.big{ + font-size:38px; + line-height:52px +} +.linux .bottom-page.top-dark-info.big{ + padding:20px 0 0 +} +.linux .bottom-page.nav-buttons-bl.contrast{ + margin-top:12px +} +.bottom-page.top-dark-info.small{ + padding:40px 0 1px +} +.linux .bottom-page.top-header{ + padding-top:17px +} +.linux .megaapp-button-info{ + padding-bottom:60px +} +.linux button.download-megacmd{ + margin-top:35px +} +.megacmd .top-bl .bottom-page.top-header{ + padding-top:13px +} +.megacmd .bottom-page button{ + margin-top:28px +} +} +@media only screen and (max-width:675px){ +.bottom-page.apps-buttons .dark-button,.feature-page .app-links a.bottom-page.dark-button{ + display:block; + margin:16px auto 0 +} +.bottom-page.appstore-button{ + height:auto; + width:200px +} +.bottom-page.appstore-button.android{ + height:auto; + width:230px +} +.bottom-page.appstore-button.small{ + margin:0; + width:131px +} +.bottom-page .vision-col-4{ + width:50% +} +} +@media only screen and (max-width:660px){ +.bottom-page.img.ios2{ + margin-top:0; + margin-top:40px +} +.absolute-pos .bottom-page.half-sized-cell{ + max-width:none; + padding:0 20px; + text-align:center +} +.pages-nav.compound-items.other{ + display:none +} +.pages-nav.nav-button.other{ + display:inline-block +} +.bottom-page.auth-app-select-tooltip .app-link:nth-of-type(odd){ + margin-right:auto +} +.bottom-page.auth-app-select-tooltip .app-link,.bottom-page.password-manager-app-select .app-link{ + display:block; + margin:12px auto; + max-width:360px; + width:100% +} +.securitypractice .improved-recovery-steps .recover-paste-block .left-section,.securitypractice .improved-recovery-steps .recover-paste-block .right-section{ + display:block; + width:100% +} +.improved-recovery-steps .recovery-key.account.input-wrapper.input-key{ + width:100% +} +.improved-recovery-steps .recovery-key.account.input-wrapper input{ + padding:0 32px 0 0 +} +.bottom-page.mid-icon-info{ + padding:0 0 10px +} +} +@media only screen and (max-width:625px){ +.col-2.cmd-pad,.col-2.cmd-pad:nth-child(odd){ + display:block; + padding-left:0; + padding-right:0; + width:100% +} +.mobile .bottom-page.top-title i{ + display:none +} +.megacmd .top-bl .top-title{ + padding-top:60px +} +.megacmd .bottom-page.top-dark-info.medium{ + padding-bottom:0 +} +.megacmd .bottom-page.nav-buttons-bl.dark{ + margin-bottom:150px +} +.bottom-page.top-title i{ + margin-top:0 +} +.bottom-page.top-dark-info.big,.linux .bottom-page.top-dark-info.big{ + font-size:24px; + line-height:36px +} +.bottom-page.top-dark-info.big{ + padding-top:15px +} +.bottom-page.vertical-centered-bl.top-bl{ + height:auto !important; + min-height:auto +} +.bird .bottom-page.top-copyrights{ + font-size:16px; + line-height:24px; + padding:30px 40px 28px +} +.bottom-page.top-bl{ + padding-top:46px +} +.top-bl .top-title,.top .top-title{ + padding-top:60px +} +} +@media only screen and (max-width:590px){ +.pages-nav.nav-button{ + min-width:25%; + width:auto +} +body:not(.en) .pages-nav.content-block .nav-button{ + width:25% +} +.bottom-page.top-dark-info.medium{ + padding-bottom:10px +} +.bottom-page .megaapp-linux{ + display:block; + max-width:100%; + min-width:auto; + white-space:normal; + width:100% +} +.bottom-page.nav-buttons-bl.contrast{ + width:100% +} +.nav-buttons-bl.contrast .pages-nav.nav-button{ + width:33.3333% +} +.bottom-page .megaapp-linux .megaapp-linux-arrow{ + display:none +} +.bottom-page.top-description{ + padding:40px 0 25px +} +.securitypractice .bottom-page.large-subheader{ + font-size:16px; + line-height:24px; + margin-top:16px +} +.bottom-page.img.sync-top,.mobile .megasync .bottom-page.img.sync-top{ + margin-top:22px; + max-width:87%; + padding-bottom:19px +} +.mobile .megasync .bottom-page.img.sync-top{ + margin-top:-32px +} +} +@media only screen and (max-width:565px) and (max-height:750px){ +.bottom-page.img.android-top,.bottom-page.img.ios-top,.bottom-page.img.sync-top{ + display:none +} +.top-bl .mobile-apps-button{ + margin:18px auto 47px +} +.mobile .megasync .bottom-page.img.sync-top{ + display:block; + margin-top:-45px +} +} +@media only screen and (max-width:565px){ +.bottom-page.big-link.scrolldown{ + margin:30px 0 60px +} +.bottom-page.img.bird-img2{ + margin:0 auto 40px +} +.bottom-page.big-header,.bottom-page.bold-title,.bottom-page.business-header,.bottom-page.container-title,.bottom-page.dark-big-header,.bottom-page.large-header,.bottom-page.large-header.big,.bottom-page.top-dark-info.medium{ + font-size:26px; + line-height:38px +} +.bottom-page.apps-buttons{ + padding:24px 0 60px +} +.bottom-page.apps-buttons.bott-block{ + padding:20px 0 0 +} +.bottom-page.big-header{ + padding:5px 0 24px +} +.bottom-page.half-sized-cell{ + max-width:none +} +.bottom-page.medium-txt.low-width,.medium-txt.small-lineheight{ + line-height:32px; + padding:0 0 10px +} +.top-bl .medium-txt.small-lineheight{ + line-height:24px +} +.big-icons-bl .bottom-page.small-txt,.bottom-page.big-icons-bl,.bottom-page.img-description.small-pad,.inline-block.mid-pad,.side-txt .bottom-page.mid-pad{ + padding-left:0; + padding-right:0; + padding-top:6px +} +.absolute-pos .bottom-page.half-sized-cell,.android .top-bl .bottom-page.half-sized-cell,.bottom-page.half-sized-cell,.bottom-page.horizontal-centered-bl,.bottom-page.horizontal-centered-bl.mid-wide,.bottom-page.horizontal-centered-bl.side-paddings,.bottom-page.horizontal-centered-bl.ultra-wide,.bottom-page.horizontal-centered-bl.wide,.main-mid-pad.new-bottom-pages,.new-bottom-pages,.top-bl .bottom-page.half-sized-cell,.top-bl .bottom-page .img-description{ + padding-left:24px; + padding-right:24px +} +.bottom-page.big-header.red{ + font-size:30px +} +.inline-block .big-icon.top-pad{ + margin-top:11px +} +.inline-block:first-child .big-icon.top-pad{ + margin-top:19px +} +.inline-block .bottom-page.small-txt{ + padding-bottom:0 +} +.bottom-page.business-header.small-txt{ + padding-bottom:10px; + padding-top:23px +} +.bottom-page.left-cell,.bottom-page.right-cell{ + display:block; + text-align:center; + width:100% +} +.bottom-page .img-description{ + max-width:none; + padding-left:0; + padding-right:0; + text-align:center +} +.bottom-page.big-header.mid-pad{ + padding:5px 0 37px +} +.bottom-page.table.changed-order .order1{ + display:none +} +.bottom-page.table.changed-order .order2{ + display:block +} +.bottom-page.table.changed-order .left-cell,.bottom-page.table.changed-order .right-cell{ + height:auto +} +.bottom-page.img.android3,.bottom-page.img.ios3{ + padding:0 +} +.bottom-page.img.ios4{ + margin:46px 0 40px; + max-width:100%; + padding:0 38px 0 10px +} +.hidden-img .bottom-page.img.ios5{ + max-width:70% +} +.hidden-img .bottom-page.img.android4{ + max-width:55% +} +.bottom-page.table-cell.col-3{ + display:block; + width:100% +} +.side-txt .bottom-page.mid-pad{ + padding:44px 0 0 +} +.bottom-page.table.side-txt{ + margin-top:-25px +} +.bottom-page.big-header .light-red{ + display:block; + padding-left:0 +} +.bottom-page.img.android5{ + margin:38px 0 40px; + max-width:100%; + padding:0 43px +} +.vertical-centered-cell.left-cell.centered-txt{ + padding-left:0; + text-align:center +} +.bottom-page.img.megasync.small{ + padding:52px 0 30px 6px; + width:81% +} +.bottom-page.img.tm{ + margin:0; + max-width:100%; + padding:31px 10px 0 +} +.bottom-page.img.attach{ + margin:0; + max-width:100%; + padding:0 10px; + width:685px +} +.bottom-page.top-links.mb{ + margin:0 -43px +} +.bird .bottom-page.top-links.mb{ + display:none +} +.sync-4 .bottom-page.left-cell,.sync-4 .bottom-page.right-cell{ + width:100% +} +.opensource hr{ + display:none +} +.opensource-header{ + text-align:center +} +.opensource-top-icon,.opensource h1{ + display:block; + float:none; + font-size:21px; + margin:0 auto +} +.opensource-icon-pad{ + width:50% +} +.opensource-icons-bl{ + margin:0 auto; + padding:51px 15px 73px +} +.top-bl .bottom-page.half-sized-cell{ + padding-left:0; + padding-right:0 +} +.bird .bottom-page.top-dark-button{ + min-width:auto +} +.bottom-page.big-header i{ + margin-top:-6px +} +.affiliate.refer-header{ + font-size:22px +} +.affiliate-page.top-header{ + color:#fff; + font-size:26px; + line-height:38px; + padding:16px 0 23px +} +.affitiate.calc-header{ + font-size:28px; + line-height:44px; + padding:40px 0 50px +} +.affitiate.calc-price{ + font-size:60px; + line-height:104px; + padding:0 0 3px +} +.affitiate.calc-info{ + font-size:18px; + line-height:24px +} +.affitiate.calc-info.big{ + line-height:28px +} +.affiliate.icon-info{ + font-size:22px; + line-height:30px +} +.bottom-page.large-icon.top-pad{ + margin-top:0 +} +.affiliate-list.col-2{ + padding:0 +} +.bottom-page.icon.x56.new-pages-sprite.left-arrow{ + background-position:-15px -1538px; + background-size:236px auto +} +.bottom-page.icon.x56.new-pages-sprite.right-arrow{ + background-position:-45px -1538px; + background-size:236px auto +} +.bottom-page.cols-wrap{ + margin:0 +} +.bottom-page.top-dark-info.nas.pad{ + padding:23px 0 8px +} +.bottom-page.top-dark-info.nas{ + font-size:14px; + line-height:21px +} +.bottom-page.nas-logos .top-dark-info.nas{ + padding-top:18px +} +.bottom-page.nas-logos{ + padding-bottom:140px +} +.bottom-page.icon-blocks-wrap{ + margin:0 +} +.bottom-page.icon-info-header{ + font-size:20px; + padding:20px 0 8px +} +.icon-blocks-wrap .bottom-page.icon{ + margin:15px auto 0 +} +.icon-blocks-wrap .bottom-page.mid-icon-info{ + font-size:14px; + line-height:21px +} +.icon-blocks-wrap .mid-green-link.small.no-pad{ + margin:12px 0 0 +} +} +@media only screen and (max-width:545px){ +.megasync .bottom-page.angle-bg{ + bottom:-80px !important +} +.bottom-page.top-title{ + line-height:49px +} +.bottom-page.top-title i{ + display:none +} +.bottom-page.top-dark-info.big{ + padding-bottom:50px +} +.mobile .bottom-page.top-dark-info.big{ + padding-bottom:143px +} +.bottom-page.top-button-info{ + padding:35px 0 0 +} +.bottom-page.top-title span{ + margin-bottom:30px +} +} +@media only screen and (max-width:545px) and (max-height:630px){ +.mobile .bottom-page.top-dark-info.big{ + padding-bottom:143px +} +} +@media only screen and (max-width:545px) and (max-height:600px){ +.mobile .bottom-page.top-dark-info.big{ + padding-bottom:53px +} +.mobile .bottom-page.scroll-button{ + display:none +} +.bottom-page.nas-logos{ + padding-bottom:83px +} +} +@media only screen and (max-width:495px){ +.mobile .extension.img-wrap{ + margin:36px 0 0 +} +.megasync .bottom-page.top-bl>.vertical-centered-cell .bottom-page.angle-bg{ + bottom:-20px +} +.bottom-page.top-title{ + font-size:21px; + line-height:32px; + margin-bottom:0 +} +.megasync .bottom-page.img.sync1{ + display:none +} +.bottom-page.img.mobile-view{ + display:block; + margin:0 auto; + max-width:320px; + width:calc(100% - 48px) +} +.cropped-page .col-2 .bottom-page.big-icon,.cropped-page .col-3 .bottom-page.big-icon{ + display:block +} +.cropped-page .col-2 .bottom-page.big-icon+.small-txt,.cropped-page .col-3 .bottom-page.big-icon+.small-txt{ + display:block; + font-size:16px; + line-height:24px; + text-align:center; + vertical-align:middle +} +.megasync .bottom-page.img.mobile-view{ + margin-top:24px +} +.bottom-page.top-dark-button{ + margin-left:-15px; + margin-right:-15px +} +} +@media only screen and (max-width:440px){ +.megacmd .bottom-page.horizontal-centered-bl,.megacmd .bottom-page.horizontal-centered-bl.wide{ + padding:0 14px +} +.bottom-page.dark-txt.bott-pad{ + padding:14px 0 76px +} +.bottom-page.cols-container .col3{ + padding:32px 14px +} +body:not(.en) .pages-nav.content-block .nav-button{ + width:25% +} +.content-block .pages-nav.compound-items.active{ + padding:0 +} +} +@media only screen and (max-width:420px){ +.cmd-top-img{ + margin-left:-20px; + margin-right:-20px +} +.bottom-page.bold-title,.bottom-page.container-title,.bottom-page.dark-big-header,.bottom-page.large-header,.bottom-page.large-header.big,.bottom-page.top-dark-info.medium,.megacmd .bottom-page.top-dark-info.medium,.megasync .bottom-page.big-header,.megasync .bottom-page.top-dark-info.medium{ + font-size:20px; + line-height:28px +} +.bottom-page.large-subheader{ + font-size:16px; + line-height:28px +} +.bottom-page.semibig-header{ + font-size:18px; + line-height:26px +} +.bottom-page.scroll-button.big span{ + font-size:14px; + line-height:21px +} +.bird .bottom-page.top-dark-button i{ + margin-right:5px +} +.bottom-page.big-header i{ + margin-top:-11px +} +.affiliate.faq-header{ + font-size:16px +} +.affiliate.faq-subheader{ + font-size:14px; + line-height:22px; + margin-top:-10px; + padding:0 +} +.affiliate.refer-header{ + font-size:20px +} +.affiliate.refer-txt{ + font-size:14px +} +.affiliate.icon-info,.ru .affiliate.icon-info{ + font-size:18px; + line-height:24px +} +.affitiate.calc-header{ + font-size:22px; + line-height:44px; + padding:30px 0 +} +.affitiate.calc-header span:before{ + bottom:2px +} +.affitiate.calc-price{ + font-size:50px +} +.affiliate.faq-block{ + padding-right:60px +} +.affiliate.refer-link,.bottom-page.list-item{ + font-size:14px +} +.affiliate-page.top-header{ + font-size:20px; + line-height:30px +} +.affiliate-page.top-info{ + font-size:14px; + line-height:24px +} +.bottom-page.white-button{ + font-size:16px +} +.affiliate.img-wrap{ + left:5px; + top:10px +} +.bottom-page .dropdown-item{ + font-size:16px +} +.bottom-page.business-header.small-txt{ + font-family:var(--text-font-family-second-regular); + font-size:18px +} +.bottom-page.top-title span{ + font-size:21px; + letter-spacing:0 +} +.credits-main-pad{ + margin:-3px 0 +} +.credits-block{ + margin:50px 0 3px +} +} +@media only screen and (max-width:408px){ +.cmd-top-img{ + margin-left:-14px; + margin-right:-14px +} +body:not(.en) .content-block .pages-nav.compound-items.active{ + width:100% +} +} +@media only screen and (max-width:380px){ +.pages-nav.button-label,.pages-nav.nav-button.active.greyed-out .button-label{ + font-size:13px +} +} +@media only screen and (max-width:360px){ +.bottom-page.dark-txt.bott-pad{ + padding:14px 0 74px +} +.bottom-page.tab-button{ + padding:0 15px +} +.mobile .bottom-page.top-dark-info.big{ + padding-bottom:73px +} +.affitiate.calc-price{ + font-size:40px +} +} +@media only screen and (max-width:360px) and (max-height:555px){ +.bottom-page.top-dark-info.big,.linux .bottom-page.top-dark-info.big{ + font-size:22px; + line-height:33px +} +.small-megasync-logo{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-position:0 0; + background-repeat:no-repeat; + height:48px; + margin:0 auto 17px; + width:185px +} +.bottom-page.img.sync-top{ + bottom:0; + display:block; + margin:auto; + max-width:134%; + padding:0 0 64px; + position:absolute; + right:33px; + top:0; + width:683px +} +.megasync button.download-megasync{ + margin:18px 0 0 +} +.megasync .megaapp-button-info{ + padding:16px 0 61px +} +.megaapp-button-info.linux-txt{ + padding:0 +} +.megaapp-button-info.disabled{ + filter:progid: DXImageTransform.Microsoft.Alpha(opacity=30); + -moz-opacity:.3; + -khtml-opacity:.3; + opacity:.3 +} +.megaapp-button-info.disabled a{ + cursor:default +} +.megaapp-button-info .nautilus-lnk{ + display:block; + margin:14px 5px -30px 0 +} +.bottom-page.img.megasync.small{ + margin-right:18px; + max-width:287px; + padding:17px 0 +} +.bottom-page.img.tm{ + margin-left:34.5%; + max-width:94%; + padding:21px 0 0; + width:955px +} +} +@media only screen and (max-width:321px){ +.en .pages-nav.compound-items.active a{ + width:25% +} +.en .pages-nav.button-label{ + padding-bottom:8px; + white-space:normal +} +.en .pages-nav.content-block .button-label,.en .pages-nav.content-block .nav-button.active.greyed-out .button-label{ + display:table-cell; + height:30px; + text-align:center; + vertical-align:middle; + white-space:normal; + width:100% +} +.en .pages-nav.content-block .pages-nav.nav-icon{ + display:block; + margin:16px auto 3px +} +.en .pages-nav.content-block .pages-nav.content{ + height:82px +} +.megasync .bottom-page.top-bl>.vertical-centered-cell .bottom-page.angle-bg{ + bottom:-80px +} +.bottom-page.img.mobile-view{ + margin:0 auto; + max-width:280px; + width:calc(100% - 72px) +} +.top-bl .mobile-apps-button{ + margin:18px auto 24px +} +.bottom-page.large-header,.bottom-page.large-header.big-txt{ + font-size:28px; + line-height:42px +} +} +@media only screen and (max-height:770px){ +.unsupported .bottom-page.top-copyrights{ + padding-bottom:0 +} +} +@media only screen and (max-height:740px){ +.top-bl.bottom-page.img-description.no-pad{ + padding:0 2px 45px 0 +} +.bird .bottom-page.top-copyrights{ + padding-bottom:35px; + padding-top:64px +} +.bottom-page.top-button-info{ + padding:35px 0 0 +} +.bird .bottom-page.top-bl>.vertical-centered-cell .bottom-page.angle-bg{ + bottom:-460px +} +} +@media only screen and (max-height:685px){ +.linux.megasync button.download-megasync{ + margin-top:18px +} +.linux .bottom-page.img.sync-top{ + max-width:40% +} +.bird .bottom-page.top-copyrights{ + padding-bottom:15px; + padding-top:44px +} +} +@media (hover:hover){ +.affiliate.faq-bottom-txt a:hover,.affiliate.faq-txt a:hover,.affiliate.refer-link:hover,.bottom-page.dark-txt a:hover,.bottom-page.list-item a:hover,.bottom-page.semibig-icon-info a:hover,.bottom-page.top-dark-info a:hover,.icon-blocks-wrap .bottom-page.mid-icon-info a:hover,a.mid-green-link:hover{ + text-decoration:none +} +.bottom-page.big-link:hover span,.bottom-page.mid-icon-info a.red:hover,.bottom-page.top-button-info a:hover{ + text-decoration:underline +} +} +.old .top-head{ + background-color:initial; + position:absolute; + -webkit-transition:background-color .2s ease-in-out,top .6s ease-in-out; + -moz-transition:background-color .2s ease-in-out,top .6s ease-in-out; + -o-transition:background-color .2s ease-in-out,top .6s ease-in-out; + -ms-transition:background-color .2s ease-in-out,top .6s ease-in-out; + transition:background-color .2s ease-in-out,top .6s ease-in-out; + z-index:200 +} +.old:not(.download) .top-head:after{ + display:none +} +.old .top-head.floating{ + background-color:#fff; + box-shadow:0 1px 0 0 rgba(0, 62, 80, .15); + position:fixed; + top:-38px +} +.old .top-head.floating.activated{ + top:0 +} +@media only screen and (-o-min-device-pixel-ratio:3/2),only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){ +.bottom-page.big-icon.arrows,.bottom-page.big-icon.camera,.bottom-page.big-icon.charts,.bottom-page.big-icon.chat,.bottom-page.big-icon.cloud,.bottom-page.big-icon.folders,.bottom-page.big-icon.interactive,.bottom-page.big-icon.mobile-arrow,.bottom-page.big-icon.mobile-cloud,.bottom-page.big-icon.pages-sprite,.bottom-page.big-icon.photos,.bottom-page.big-icon.player,.bottom-page.big-icon.scriptable,.bottom-page.big-icon.target,.bottom-page.big-icon.up-down,.bottom-page.big-link i,.bottom-page.dark-button,.bottom-page.icon.pages-sprite,.bottom-page.large-icon.pages-sprite,.bottom-page.mid-icon,.bottom-page.scroll-icon,.bottom-page.tab-icon,.bottom-page.tab-lnk-icon,.cmd-top-img,.medium-icon.down-arrow,.mobile-apps-button,.pages-nav.nav-icon.bott-sprite,.pages-sprite,.small-megasync-logo,i.pages-sprite{ + background-image:url(../imagery/mega-pages-sprite-2x.125c0ab042752099.png) !important; + background-size:360px auto +} +.bottom-page.password-manager-app-select .app-link-icon,.bottom-page .security-illustration{ + background-image:url(../imagery/mega-security-page-2x.1046a8e1a5b3bd27.png); + background-size:750px auto +} +.redeem-promo-page .onboard-image{ + background-image:url(../imagery/mega-onboarding_download-2x.1553f22a00a7dcd4.png); + background-size:600px auto +} +} +.bottom-page.dropdown,.rtl-supportm,.rtl .bottom-menu .desktop-menu,.rtl .bottom-menu .mobile-menu,.rtl .bottom-page.big-header,.rtl .bottom-page.container-txt,.rtl .bottom-page.dark-big-header,.rtl .bottom-page.dark-txt,.rtl .bottom-page .mid-green-link,.rtl .bottom-page.mid-header,.rtl .bottom-page.scroll-button span,.rtl .bottom-page.semibig-icon-info,.rtl .bottom-page.small-info,.rtl .bottom-page.square-nav-button,.rtl .bottom-page.top-dark-info,.rtl .bottom-page.top-title span,.rtl .pages-nav.content-block .button-label,.rtl .startpage.button-48-height,.rtl .startpage.plan-features .plan-feature,.rtl .startpage.plan-top-square,.rtl .startpage.software-txt span,.rtl .startpage.square-block,.rtl .startpage.top-header,.rtl .startpage.top-info,.rtl .startpage.top-notice{ + direction:rtl +} +.bottom-page.unsub .main-mid-pad{ + box-sizing:border-box; + margin-bottom:96px; + max-width:688px; + padding:116px 12px 0; + width:100% +} +.bottom-page.unsub .tip-wrapper{ + margin-top:32px +} +body:not(.mobile) .bottom-page.unsub .tip-wrapper .underline-btn-txt{ + margin-left:12px +} +.bottom-page.unsub .sent-email-logo{ + display:inline-block +} +.bottom-page.unsub .button-container{ + padding-top:40px +} +.bottom-page.unsub .headline-txt{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + margin:0 auto; + padding:24px 32px 16px +} +.new-affiliate-bot-header,.new-affiliate-mid-header{ + color:#3f4646; + font-family:Open Sans Semibold Italic,Arial; + font-size:16px; + letter-spacing:-.1px; + line-height:20px; + padding:23px 0 4px +} +.new-affiliate-pad.new-affiliate-mid-header{ + padding:39px 0 37px +} +.new-affiliate-bot-txt{ + color:#333; + font-size:14px; + line-height:25px; + margin:0 0 20px +} +.new-affiliate-mid-header.new-affiliate-bot-pad{ + padding:39px 0 10px +} +.dev-new-button{ + background-color:#fff; + background-image:url(../imagery/mega-sdk-sprite.da8c28c79254ff0e.png); + background-position:right -760px; + background-repeat:no-repeat; + border:2px solid #d9d9d9; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#333; + cursor:pointer; + float:left; + font-family:source_sans_prosemibold,Arial; + font-size:14px; + height:34px; + line-height:28px; + padding:0 30px 0 13px +} +.dev-new-button.active,.dev-new-button:hover{ + background-color:#d92e00; + background-position:right -830px; + border-color:#d92e00; + color:#fff +} +.dev-new-button.down-arrow{ + background-position:-865px -899px; + padding:0 13px 0 38px +} +.dev-new-button.down-arrow.active,.dev-new-button.down-arrow:hover{ + background-position:-865px -969px +} +.dev-new-button.plus-icon{ + background-position:10px -286px; + padding:0 13px 0 38px +} +.dev-new-button.plus-icon.active,.dev-new-button.plus-icon:hover{ + background-position:10px -366px +} +.dev-new-button.del-icon{ + background-position:11px -907px; + float:right; + margin:49px 0 0; + padding:0 13px 0 38px +} +.dev-new-button.del-icon.active,.dev-new-button.del-icon:hover{ + background-position:11px -967px +} +.mobile .terms-of-service .index-table td:nth-of-type(2){ + text-align:right; + white-space:nowrap +} +.dev-new-button{ + background-color:#fff; + background-image:url(../imagery/mega-sdk-sprite.da8c28c79254ff0e.png); + background-position:right -760px; + background-repeat:no-repeat; + border:2px solid #d9d9d9; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#333; + cursor:pointer; + float:left; + font-family:source_sans_prosemibold,Arial,sans-serif; + font-size:14px; + height:34px; + line-height:28px; + padding:0 30px 0 13px +} +.dev-new-button.active,.dev-new-button:hover{ + background-color:#d92e00; + background-position:right -830px; + border-color:#d92e00; + color:#fff +} +.dev-new-button.down-arrow{ + background-position:-865px -899px; + padding:0 13px 0 38px +} +.dev-new-button.down-arrow.active,.dev-new-button.down-arrow:hover{ + background-position:-865px -969px +} +.dev-new-button.plus-icon{ + background-position:10px -286px; + padding:0 13px 0 38px +} +.dev-new-button.plus-icon.active,.dev-new-button.plus-icon:hover{ + background-position:10px -366px +} +.dev-new-button.del-icon{ + background-position:11px -907px; + float:right; + margin:49px 0 0; + padding:0 13px 0 38px +} +.dev-new-button.del-icon.active,.dev-new-button.del-icon:hover{ + background-position:11px -967px +} +.default-white-button.small.red-bg:after{ + box-shadow:0 0 0 1px #da3135 +} + +.bottom-menu{ + --text-color:#666; + --text-color-hover:#666; + --text-color-strong:#373737; + --stroke-horizontal:#dadada +} +.bottom-menu.body{ + background-color:var(--text-color-white-higher); + border-top:1px solid rgba(0, 0, 0, .1); + font-family:var(--text-font-family); + font-size:0; + padding:90px 0 110px; + position:relative +} +.ru .bottom-menu.body{ + font-family:"Lucida Grande", var(--text-font-family) +} +.bottom-menu .mobile-menu{ + display:none +} +.bottom-menu .desktop-menu{ + display:block +} +.bottom-menu .column{ + box-sizing:border-box; + display:inline-block; + padding-left:20px; + padding-right:20px; + text-align:start; + vertical-align:top +} +.bottom-menu .column.left{ + padding-left:0; + padding-right:20px +} +.bottom-menu .col1-of-6{ + width:15.6% +} +.bottom-menu .col2-of-6{ + width:22% +} +.bottom-menu .header{ + font-family:var(--text-font-family-black); + line-height:16px; + margin:40px 0 24px; + text-transform:uppercase +} +.bottom-menu .header,.bottom-menu .link{ + color:var(--text-color); + font-size:13px +} +.bottom-menu .link{ + display:block; + line-height:17px; + padding:7px 0; + transition:var(--transition-all); + transition-duration:.2s +} +.bottom-menu .link:hover{ + color:var(--text-color-hover) +} +.bottom-menu .logo{ + background-position:-12px -1364px; + border-radius:0; + display:block; + float:none; + height:55px; + margin:26px 0 20px; + width:169px +} +.bottom-menu .company-info{ + color:var(--text-color); + font-size:16px; + line-height:20px; + padding:6px 10px 6px 0 +} +.bottom-menu .company-info strong{ + color:var(--text-color-strong); + display:block; + font-family:var(--text-font-family-bold); + font-size:18px; + font-weight:400; + line-height:22px; + padding:0 0 9px +} +.bottom-menu .company-info span{ + display:block; + font-size:14px; + line-height:17px; + padding:0 0 20px +} +.bottom-menu .company-info span.follow-txt{ + font-size:12px; + line-height:14px; + padding-bottom:14px +} +.bottom-menu .company-info.clone{ + display:none +} +.bottom-menu .social{ + display:flex; + flex-wrap:wrap; + padding:0 +} +.bottom-menu .social i{ + transform:scale(.6) +} +.bottom-social-button{ + -webkit-margin-end:8px; + background-color:#f4f4f5; + border-radius:6px; + cursor:pointer; + display:block; + margin-bottom:15px; + margin-inline-end:8px; + padding:0 +} +.bottom-menu hr{ + display:none +} +@media only screen and (max-width:960px){ +.bottom-menu .desktop-menu .col1-of-6{ + width:20% +} +.bottom-menu.body{ + padding:45px 0 50px +} +.bottom-menu .link{ + font-size:12px +} +.bottom-menu .bottom-page.horizontal-centered-bl.mid-wide{ + max-width:742px +} +.bottom-menu .column.left{ + border-top:1px solid var(--stroke-horizontal); + display:block; + float:none; + font-size:18px; + line-height:22px; + margin:75px auto 0; + padding-top:44px; + text-align:center; + width:auto +} +.bottom-pages .download a.logo{ + display:block +} +.bottom-menu .company-info{ + padding:0 +} +.bottom-menu .company-info strong{ + font-size:18px; + line-height:22px; + padding-bottom:14px +} +.bottom-menu .company-info span{ + font-size:16px; + line-height:19px; + padding-bottom:16px +} +.bottom-menu .company-info span.follow-txt{ + display:none +} +.bottom-menu .social{ + display:flex; + justify-content:center +} +.bottom-social-button{ + cursor:pointer; + margin:0 10px; + padding:9px +} +.bottom-menu .social i{ + transform:none +} +} +@media only screen and (max-width:750px){ +.bottom-menu .mobile-menu{ + display:block +} +.bottom-menu .desktop-menu{ + display:none +} +.bottom-menu .cols{ + display:flex; + flex-wrap:wrap +} +.bottom-menu .col1-of-2{ + width:50% +} +.bottom-menu .company-info strong{ + font-size:16px; + padding-bottom:16px +} +.bottom-menu .company-info span{ + font-size:14px; + line-height:17px +} +.bottom-social-button{ + margin:0 10px; + padding:0 +} +.bottom-menu .social{ + display:flex; + justify-content:center; + padding:0 0 13px +} +.bottom-menu .social i{ + transform:scale(.7) +} +.bottom-menu .legal{ + padding-left:0; + width:100% +} +.bottom-menu .legal .link{ + float:left; + width:50% +} +.bottom-menu .legal .link:nth-of-type(2n){ + padding-left:15px; + width:calc(50% - 15px) +} +.bottom-menu .header{ + margin-bottom:14px; + margin-top:27px +} +.bottom-menu hr{ + background:var(--stroke-horizontal); + border:0; + display:block; + height:1px; + margin:50px auto 38px; + width:70% +} +.bottom-menu .support-legal{ + display:flex; + flex-direction:column; + justify-content:space-between +} +} + +.business .top-buttons,.top-business-button,.top-head .top-business-title{ + display:none +} +.business .top-buttons-business{ + display:block +} +.business .bottom-page .top-business-title{ + -webkit-margin-start:6px; + color:var(--text-color-medium); + display:block; + font:var(--text-h3); + margin:4px 0; + margin-inline-start:6px; + position:relative +} +.business .bottom-page .top-business-title:after{ + background-color:#f0373a; + border-radius:100%; + content:""; + display:inline-block; + height:4px; + margin:2px 4px; + vertical-align:middle; + width:4px +} +.business-info-block{ + text-align:center +} +.business .business-info-block{ + display:inline-block; + max-width:500px; + text-align:center +} +.business-page.bottom-page .top-head,.business-page.bottom-page .top-head.floating{ + background-color:var(--stroke-main) +} +.business-page .pages-menu.body{ + background-color:#fff; + box-shadow:0 14px 20px 0 rgba(0, 0, 0, .04) +} +.business-page .bottom-page.top-bl>.vertical-centered-cell{ + overflow:hidden; + width:100% +} +i.medium-icon.business-sprite{ + background-image:url(../imagery/mega-business.537c69455ef14de7.png) +} +.nav-button .nav-icon.business{ + background-position:-50px -193px +} +.business-page .bottom-page.half-sized-cell{ + padding:0 30px 0 0 +} +.img.business-top{ + max-width:1113px; + padding:62px 0 0; + width:200% +} +.bottom-page.angle-bg{ + background-color:#fafafa; + background-image:url(../imagery/mega-bottom-page-business-bg2-2x.b8fe53c68e3c7cfe.png); + background-position:top; + background-repeat:no-repeat; + background-size:100% 100%; + content:""; + height:634px; + left:0; + position:absolute; + width:100% +} +.bottom-page.angle-bg.light{ + background-color:initial; + background-image:url(../imagery/mega-bottom-page-business-bg1-2x.307a101391c5a9c2.png); + background-position:100% 0; + background-size:100% 100%; + height:1343px +} +.bottom-page.angle-bg.low-top{ + margin-top:-134px +} +.bottom-page.top-bl>.vertical-centered-cell .bottom-page.angle-bg,.business .bottom-page.top-bl .bottom-page.angle-bg{ + bottom:-100px +} +.business-page .bottom-page.info-block{ + position:relative +} +.bottom-page.big-header.dark{ + color:#333 +} +.bottom-page.medium-txt.lato{ + font-family:LatoWeb,Arial,sans-serif; + font-size:16px; + line-height:30px; + padding:20px 0 47px +} +.medium-icon.business-sprite.right-arrow{ + background-position:-46px -111px; + margin:11px 0 0 2px +} +.bottom-page.gradient-block{ + background:#fff; + background:-moz-linear-gradient(top, #fff 0, #fafafa 100%); + background:-webkit-linear-gradient(top, #fff, #fafafa); + background:linear-gradient(180deg, #fff 0, #fafafa); + border-radius:10px; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + font-family:LatoWeb,Arial,sans-serif; + margin:0 auto 40px; + position:relative +} +.bottom-page.gradient-block:before{ + border-radius:inherit; + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.bottom-page.content-table{ + display:table; + position:relative; + width:100% +} +.bottom-page.content-cell{ + box-sizing:border-box; + display:table-cell; + padding:50px 48px; + text-align:left; + vertical-align:middle +} +.bottom-page.content-cell:first-child{ + padding-right:10px; + width:336px +} +.bottom-page.business-button{ + background:#3ed8b2; + background:-moz-linear-gradient(top, #3ed8b2 0, #1db07b 100%); + background:-webkit-linear-gradient(top, #3ed8b2, #1db07b); + background:linear-gradient(180deg, #3ed8b2 0, #1db07b); + border-radius:4px; + box-sizing:border-box; + color:#fff; + display:inline-block; + font-family:montserrat,Arial,sans-serif; + font-size:18px; + height:48px; + letter-spacing:.5px; + line-height:48px; + min-width:326px; + padding:0 15px; + position:relative; + text-align:center +} +.business-price{ + font-family:var(--text-font-family-bold); + font-size:20px; + line-height:44px; + position:relative; + white-space:nowrap +} +.business-price.montserat{ + font-family:var(--text-font-family-second-regular) +} +.business-price .business-icon{ + display:inline-block; + float:none; + margin:0 -12px 0 2px; + vertical-align:top +} +.business-price.green{ + color:#00bfa5 +} +.business-price.blue{ + color:#007ee5 +} +.business-price.yellow{ + color:#e1b63f +} +.business-price .big{ + font-size:36px +} +.business-storage-info{ + color:#333; + font-size:16px; + line-height:19px; + padding:10px 0 7px +} +.business-price-info{ + color:var(--text-color-high); + font-size:16px; + line-height:18px; + padding:0 0 25px +} +.business-price-info.top{ + padding:4px 0 25px +} +.local-currency .bottom-page.gradient-block{ + margin-bottom:0 +} +.business-page .pricing-page.local-currency-tip{ + margin-bottom:40px +} +.business-page .pricing-page.euro-price:empty{ + display:none +} +.business-plan-caption{ + color:var(--text-color-high); + font:var(--text-h3); + padding:8px 0 +} +.business-plan-info{ + margin:0; + padding:5px 0 +} +.business-plan-info li{ + color:var(--text-color-high); + font:var(--text-h3); + list-style-type:none; + margin:0; + padding:8px 0 +} +.business-plan-info li strong{ + font-family:var(--text-font-family-bold); + font-weight:400 +} +.business-plan-info.strong{ + padding:0 +} +.business-plan-info.strong li{ + font-family:var(--text-font-family-bold); + font-size:18px; + line-height:34px; + padding:0 +} +.business-plan-info+hr{ + margin-top:14px +} +.business-icon{ + background-image:url(../imagery/mega-business.537c69455ef14de7.png); + background-position:-486px -28px; + float:left; + height:34px; + margin:11px 20px 0 0; + position:relative; + width:34px +} +.business-icon.semi-medium{ + float:none; + height:48px; + margin:24px auto 11px; + width:48px +} +.business-icon.red-icons{ + float:none; + height:64px; + margin:0 0 -10px; + width:64px +} +.business-icon.red-icons.source{ + background-position:0 -229px +} +.business-icon.red-icons.versioning{ + background-position:-180px -229px +} +.business-icon.red-icons.backup{ + background-position:-180px -308px +} +.business-icon.red-icons.group-chat{ + background-position:-91px -309px +} +.business-icon.red-icons.megadrop{ + background-position:-90px -229px +} +.business-icon.red-icons.location{ + background-position:0 -309px +} +.business-icon.tiny{ + height:10px; + width:10px +} +.business-icon.small{ + height:20px; + margin:24px 28px -5px -1px; + width:20px +} +.business-icon.tiny.star{ + background-position:-334px -120px +} +.business-icon.semi-medium.mega{ + background-position:-20px -1262px +} +.business-icon.semi-medium.google{ + background-position:-175px -1262px +} +.business-icon.semi-medium.dropbox{ + background-position:-102px -1260px +} +.business-icon.transfer{ + background-position:-542px -28px +} +.business-storageZ-info{ + color:#333; + font-size:16px; + line-height:19px; + padding:10px 0 7px +} +.business-hr{ + background-color:rgba(0, 0, 0, .1); + border:0; + height:1px; + margin:0; + padding:0; + width:100% +} +.business-price-note{ + box-sizing:border-box; + color:#666; + font-size:14px; + line-height:18px; + padding:12px 0 0 8px; + position:relative +} +.business-price-note span{ + left:0; + position:absolute +} +.business-tick-txt{ + color:#666; + font-size:16px; + line-height:30px; + padding:5px 0 5px 45px; + position:relative +} +.business-tick-txt:before{ + background-image:url(../imagery/mega-business.537c69455ef14de7.png); + background-position:-7px -115px; + content:""; + display:block; + height:20px; + left:0; + margin:10px 0 0; + position:absolute; + top:0; + width:20px +} +.bottom-page.slider-top{ + box-shadow:0 1px 0 0 #c6cbd3; + padding:0 0 1px +} +.bottom-page.slider-top-wrap{ + display:table; + position:relative; + table-layout:fixed; + width:100% +} +.bottom-page.slider-body{ + padding:32px 0 5px; + position:relative +} +.bottom-page.slider-body:after,.bottom-page.slider-body:before{ + background:hsla(0, 0%, 100%, .7); + background:-moz-linear-gradient(left, hsla(0, 0%, 100%, .3) 0, hsla(0, 0%, 100%, .9) 1%, #fff 100%); + background:-webkit-linear-gradient(left, hsla(0, 0%, 100%, .3), hsla(0, 0%, 100%, .9) 1%, #fff); + background:linear-gradient(90deg, hsla(0, 0%, 100%, .3) 0, hsla(0, 0%, 100%, .9) 1%, #fff); + content:""; + display:block; + height:100%; + left:100%; + position:absolute; + top:0; + width:400%; + z-index:10 +} +.bottom-page.slider-body:before{ + background:-moz-linear-gradient(left, #fff 0, hsla(0, 0%, 100%, .9) 99%, hsla(0, 0%, 100%, .3) 100%); + background:-webkit-linear-gradient(left, #fff, hsla(0, 0%, 100%, .9) 99%, hsla(0, 0%, 100%, .3)); + background:linear-gradient(90deg, #fff 0, hsla(0, 0%, 100%, .9) 99%, hsla(0, 0%, 100%, .3)); + left:auto; + right:100% +} +.bottom-page.slider-button{ + box-sizing:border-box; + color:#777; + cursor:pointer; + display:table-cell; + font-size:16px; + height:78px; + line-height:19px; + padding:0 20px; + text-align:center; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + vertical-align:middle; + width:20% +} +.bottom-page.slider-button.active,.bottom-page.slider-button:hover{ + box-shadow:0 3px 0 0 #f0373a; + color:#333 +} +.bottom-page.slider-content{ + font-size:0; + line-height:0; + position:relative; + -webkit-transition:left .4s ease-in-out; + transition:left .4s ease-in-out; + white-space:nowrap +} +.bottom-page .slide1 .slider-content{ + left:0 +} +.bottom-page .slide2 .slider-content{ + left:-50%; + left:-webkit-calc(-50% - 30px); + left:-moz-calc(-50% - 30px); + left:calc(-50% - 30px) +} +.bottom-page .slide3 .slider-content{ + left:-100%; + left:-webkit-calc(-100% - 60px); + left:-moz-calc(-100% - 60px); + left:calc(-100% - 60px) +} +.bottom-page .slide4 .slider-content,.bottom-page .slide5 .slider-content{ + left:-150%; + left:-webkit-calc(-150% - 90px); + left:-moz-calc(-150% - 90px); + left:calc(-150% - 90px) +} +.bottom-page.slider-block{ + box-sizing:border-box; + display:inline-block; + margin-right:30px; + padding:36px 30px 50px 0; + text-align:left; + vertical-align:top; + white-space:normal; + width:50% +} +.bottom-page.business-icon.medium{ + float:none; + height:76px; + margin:0; + width:76px +} +.bottom-page.business-icon.medium.mega{ + background-position:-10px -10px +} +.bottom-page.business-icon.big{ + float:none; + height:130px; + margin:0; + width:128px +} +.bottom-page.business-icon.centered{ + margin:0 auto +} +.bottom-page.business-icon.big.work-and-talk{ + background-position:-9px -429px +} +.bottom-page.business-icon.big.manage{ + background-position:-239px -429px +} +.bottom-page.business-icon.big.sharing{ + background-position:-9px -623px +} +.bottom-page.business-icon.big.chat{ + background-position:-239px -619px +} +.bottom-page.business-icon.big.security{ + background-position:-9px -829px +} +.bottom-page.business-icon.big.analytics{ + background-position:-9px -1029px +} +.bottom-page.business-icon.big.collaborate{ + background-position:-227px -841px; + height:102px; + width:141px +} +.bottom-page.business-icon.big.data{ + background-position:-239px -1029px; + margin-top:-30px +} +.bottom-page.business-header{ + color:#333; + font-family:var(--text-font-family-second-light); + font-size:21px; + line-height:32px; + padding:34px 0 24px +} +.bottom-page.business-header span{ + white-space:nowrap +} +.bottom-page.business-header.low-bott-pad{ + padding-bottom:18px +} +.bottom-page.business-text{ + color:#666; + font-family:LatoWeb,Arial,sans-serif; + font-size:16px; + line-height:30px +} +.bottom-page.business-text+.business-text{ + padding-top:24px +} +.bottom-page.business-text .red{ + color:#f0373a +} +.bottom-page.business-text.top-pad{ + padding-top:48px +} +.bottom-page.slider-controls,div.bottom-page.slider-controls{ + font-size:0; + line-height:0; + padding:0 +} +div.bottom-page.slider-controls{ + -webkit-touch-callout:none !important; + -webkit-user-select:none !important; + user-select:none !important +} +.bottom-page .slider-ctrl-button{ + background-image:url(../imagery/mega-business.537c69455ef14de7.png); + background-position:2px -151px; + border-radius:100%; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + cursor:pointer; + display:inline-block; + height:32px; + margin:0 10px; + position:relative; + vertical-align:top; + width:32px +} +.bottom-page .slider-ctrl-button.next{ + background-position:-40px -151px +} +.bottom-page .slider-ctrl-button:before{ + border-radius:100%; + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.bottom-page .slider-dot-button{ + background-color:hsla(0, 0%, 40%, .3); + border-radius:100%; + cursor:pointer; + display:inline-block; + height:6px; + margin:13px 4px; + position:relative; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + vertical-align:top; + width:6px +} +.bottom-page .slider-dot-button:before{ + content:""; + display:block; + height:14px; + margin:-4px; + width:14px +} +.bottom-page .slider-dot-button.active,.bottom-page .slider-dot-button:hover{ + background-color:#666 +} +.bottom-page.business2{ + max-width:510px; + width:122% +} +.bottom-page.business3{ + max-width:518px; + width:104% +} +.bottom-page.business4{ + max-width:658px; + width:132% +} +.bottom-page.business4,.bottom-page.business5{ + left:50%; + position:relative; + transform:translateX(-50%) +} +.bottom-page.business5{ + max-width:583px; + width:117% +} +.bottom-page.horizontal-centered-bl.huge-pad{ + padding-top:145px +} +.bottom-page.horizontal-centered-bl.ultra-huge-pad{ + padding-top:288px +} +.bottom-page.cell-45{ + width:45% +} +.bottom-page.cell-55{ + width:55% +} +.business-big-header{ + color:#333; + font-family:var(--text-font-family-second-light); + font-size:36px; + line-height:48px; + padding:0 0 12px; + position:relative; + z-index:1 +} +.business-txt-block{ + max-width:360px; + padding-top:30px; + text-align:left +} +.bottom-page.business-icons{ + font-size:0; + padding:0; + white-space:nowrap +} +.bottom-page.business-icons i{ + display:inline-block; + margin:22px 0 0 25px +} +.bottom-page.business-icons i:first-child{ + margin:0 +} +.bottom-page.arrange-to-top{ + position:relative; + z-index:10 +} +.business-table{ + display:table; + margin:80px 0 0; + position:relative; + width:100% +} +.business-row{ + display:table-row +} +.business-cell{ + border-top:1px solid rgba(0, 0, 0, .05); + box-sizing:border-box; + display:table-cell; + padding-left:30px; + vertical-align:middle; + width:25% +} +.business-cell .business-price{ + margin:0 0 -8px +} +.business-row:not(.company) .business-cell{ + position:relative +} +.business-row:first-child .business-cell{ + border-top:0 +} +.business-table-txt{ + color:#333; + font-size:16px; + line-height:19px; + padding:0 0 12px; + position:relative +} +.business-table-txt.bold{ + font-family:LatoWebBold,Arial,sans-serif +} +.business-table-txt.b-pad{ + padding:0 0 24px +} +.business-cell .cell-bg{ + height:100%; + position:absolute; + width:inherit +} +.business-cell .cell-bg:after,.business-cell .cell-bg:before{ + border-radius:10px; + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100%; + width:-webkit-calc(100% - 30px); + width:-moz-calc(100% - 30px); + width:calc(100% - 30px) +} +.business-cell .cell-bg:before{ + background:#fff; + background:-moz-linear-gradient(top, #fff 0, #fafafa 100%); + background:-webkit-linear-gradient(top, #fff, #fafafa); + background:linear-gradient(180deg, #fff 0, #fafafa); + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15) +} +.business-cell.business-table-txt{ + line-height:24px; + padding:11px 0; + text-align:left +} +.business-row:nth-child(2n) .cell-icon:before{ + background-color:rgba(0, 0, 0, .02); + content:""; + display:block; + height:100%; + position:absolute; + top:0; + width:-webkit-calc(100% - 30px); + width:-moz-calc(100% - 30px); + width:calc(100% - 30px) +} +.business-cell.cell-icon i{ + background-image:url(../imagery/mega-business.537c69455ef14de7.png); + background-position:-152px -115px; + content:""; + display:block; + height:20px; + margin:0 auto; + position:relative; + width:20px +} +.business-cell.cell-icon.cross i{ + background-position:-205px -115px +} +.business-compare-tip{ + color:#666; + font-size:14px; + line-height:18px; + padding:24px 0 62px; + position:relative; + text-align:right +} +.business-compare-tip i{ + display:inline-block; + float:none; + margin:4px 0 0; + vertical-align:top +} +.business-mid-header{ + color:#333; + font-family:var(--text-font-family-second-light); + font-size:24px; + line-height:48px; + padding:4px 0 72px; + position:relative +} +.ru .business-mid-header.special-lang{ + letter-spacing:-.15px +} +.business-txt-cols{ + font-size:0; + line-height:0; + margin:0 -40px 55px 0; + padding:0; + text-align:left +} +.business-txt-cols .inline-block{ + padding:0 40px 65px 0 +} +.business-compare-data{ + -webkit-padding-end:40px; + padding-inline-end:40px; + text-align:start +} +.business-compare-result{ + -webkit-margin-start:12%; + font-size:0; + line-height:0; + margin-inline-start:12%; + text-align:start +} +.business-compare-charts{ + background-color:#f6f6f6; + background-image:linear-gradient(0deg, #e2e1e1 .7%, #f6f6f6 0, #f6f6f6 50%, #e2e1e1 0, #e2e1e1 50.7%, #f6f6f6 0, #f6f6f6); + background-position:0 100%; + background-size:auto 140px; + height:420px; + margin:120px 0 0; + position:relative +} +.business-charts-wrap{ + bottom:0; + height:40%; + position:absolute; + width:100% +} +.business-compare-charts .chart{ + background-color:#ff7169; + background-image:linear-gradient(180deg, #ff7169, #fd3e38); + border-radius:4px 4px 0 0; + bottom:0; + box-sizing:border-box; + height:0; + left:24%; + position:absolute; + transition:height 10ms linear; + width:13% +} +.business-compare-charts .chart.google{ + background-color:#ffd200; + background-image:linear-gradient(180deg, #ffd200, #ffc100 37%, orange); + left:auto; + right:24% +} +.business-compare-charts .chart.google.not-supported{ + background:linear-gradient(180deg, rgba(255, 210, 0, .3) 0, rgba(255, 193, 0, .3) 37%, rgba(255, 165, 0, .3)); + border:1px dashed #fa6400 +} +.business-compare-charts .chart.google.not-supported span.supported,.business-compare-charts .chart.google:not(.not-supported) span.not-supported{ + display:none +} +.dark-direct-tooltip.simpletip-tooltip.business-chart-tip{ + bottom:100%; + font:var(--text-h3); + left:50%; + margin:0 0 20px; + padding:13px 12px; + text-align:center; + transform:translate(-50%); + white-space:nowrap; + z-index:10 +} +.en .dark-direct-tooltip.simpletip-tooltip.business-chart-tip{ + font:var(--text-h2) +} +.dark-direct-tooltip.business-chart-tip i.icon-tooltip-arrow{ + bottom:-8px +} +.business-chart-tip .price{ + white-space:nowrap +} +.business-compare-company{ + display:inline-block; + left:13%; + position:relative; + text-align:center; + vertical-align:top; + width:35% +} +.business-compare-company.google{ + left:17% +} +.business-compare .business-button{ + margin-top:96px +} +.business-google-plan-tip{ + font:var(--text-body1); + padding:32px 0 0; + text-align:center +} +.business-support{ + background-color:var(--surface-main); + border:2px solid var(--surface-grey-2); + border-radius:8px; + box-sizing:border-box; + margin:44px auto 0; + max-width:656px; + padding:48px +} +.business-support .half-sized{ + display:inline-block; + float:none; + vertical-align:top; + width:calc(50% - 12px) +} +.business-support .half-sized:nth-child(2n){ + -webkit-margin-start:24px; + margin-inline-start:24px +} +.business-support .error-message{ + background:var(--banner-background-error); + border:1px solid var(--banner-border-error); + border-radius:4px; + color:var(--banner-text-error); + font:var(--text-body1); + padding:2px 8px; + position:relative; + text-align:center; + top:-16px +} +.business-support .mega-input.textarea{ + margin-bottom:20px +} +.business-support .mega-button{ + margin:64px auto 0 +} +.business-support .mega-input.box-style .mega-input-dropdown{ + top:80% +} +.business-support .mobile.bp-storage-select,.mobile .business-support .dropdown-input.bp-storage-select{ + display:none +} +.mobile .business-support .mobile.bp-storage-select{ + display:block +} +.mobile .business-support .default-input{ + margin-bottom:12px +} +.mobile .business-support .default-input,.mobile .business-support .default-select{ + background-color:var(--surface-grey-1); + color:var(--text-color-high); + font:var(--text-body1) +} +.mobile .business-support .default-select{ + float:none; + margin:0 0 12px; + outline:none; + padding:0 30px 0 12px; + width:100% +} +.mobile .business-support .mega-input.textarea{ + margin-bottom:12px +} +.mobile .business-support .mega-input.box-style.textarea textarea{ + overflow-y:auto; + padding:12px 13px +} +.mobile .business-support .mega-input textarea:placeholder{ + color:#999 +} +.mobile .business-support .error-message{ + top:-8px +} +.business-txt-cols .inline-block:nth-child(3){ + padding-right:22px +} +.business-txt-cols .inline-block a{ + color:inherit +} +.business-txt-cols .business-text span{ + color:#f0373a +} +.business-info.mobile,.business-page .changed-order .order2{ + display:none +} +.business-page .bottom-menu.pad{ + max-width:1230px; + padding-left:30px; + padding-right:30px +} +@media only screen and (max-width:1200px){ +.dark-direct-tooltip.simpletip-tooltip.business-chart-tip,.en .dark-direct-tooltip.simpletip-tooltip.business-chart-tip{ + font:var(--text-body1); + padding:8px 10px +} +} +@media only screen and (max-width:1120px){ +.bottom-page.business2,.bottom-page.business3,.bottom-page.business4,.bottom-page.business5{ + box-sizing:border-box; + float:none; + left:auto; + margin:0 auto; + padding-right:30px; + position:static; + transform:none; + width:100% +} +.bottom-page.business3,.bottom-page.business4{ + padding:0 0 0 30px +} +.business-txt-cols .business-text span{ + margin:0 +} +.business-txt-cols .inline-block:nth-child(3){ + padding-right:40px +} +} +@media only screen and (max-width:1080px){ +.dark-direct-tooltip.simpletip-tooltip.business-chart-tip,.en .dark-direct-tooltip.simpletip-tooltip.business-chart-tip{ + font:var(--text-body2); + padding:8px 10px +} +} +@media only screen and (max-width:920px){ +.business-cell .business-price .big{ + font-size:38px +} +} +@media only screen and (max-width:890px){ +.business-big-header{ + font-size:30px +} +.business-compare-charts{ + margin-top:50px +} +.business-compare .business-button{ + margin:50px 0 -20px +} +.business-table-txt{ + font-size:12px +} +.business-compare-charts .chart{ + left:18% +} +.business-compare-charts .chart.google{ + right:18% +} +.business-compare-company{ + left:7% +} +.business-compare-company.google{ + left:23% +} +.bottom-page.content-cell .business-price{ + font-size:16px +} +.bottom-page.content-cell .business-price .big{ + font-size:26px; + line-height:34px +} +} +@media only screen and (max-width:840px){ +.bottom-page.content-cell:first-child{ + width:auto +} +.business-tick-txt{ + padding-left:25px +} +.business-page .cell-40,.business-page .cell-45,.business-page .cell-55,.business-page .cell-60,.business-txt-cols .col-3{ + width:50% +} +.business-icon.small{ + margin-bottom:0 +} +.bottom-page.slider-top{ + margin:0 -40px +} +.bottom-page.slider-body:after,.bottom-page.slider-body:before{ + display:none +} +.business-price{ + white-space:normal +} +.business-cell .business-price .big{ + font-size:32px +} +} +@media only screen and (max-width:783px){ +.business .business-info-block{ + display:block; + max-width:none +} +.bottom-page.big-header.top.dark{ + padding:82px 40px 0 +} +.top-bl .bottom-page.table,.top-bl .bottom-page.table .bottom-page.vertical-centered-cell{ + display:block +} +.img.business-top{ + margin:15px 0 0 -5%; + padding:0; + width:150% +} +.business-page .bottom-page.half-sized-cell{ + padding:0 +} +.business-txt-cols{ + margin-right:0 +} +.business-txt-cols .inline-block.col-3,.business-txt-cols .inline-block.col-3:nth-child(3){ + padding-right:0 +} +.business-big-header{ + padding:0 +} +.business-mid-header{ + font-size:24px; + line-height:32px; + padding:0 0 50px; + text-align:center +} +.business-icon.red-icons{ + margin:0 auto -10px +} +.bottom-page.business-header{ + padding:22px 0 24px; + text-align:center +} +.bottom-page.business-header.low-bott-pad{ + padding:22px 0 14px +} +.bottom-page.business-text,.business-page .bottom-page.medium-txt{ + font-size:14px; + line-height:24px; + text-align:center +} +.business-tick-txt{ + font-size:14px +} +.business-txt-cols .col-3{ + width:100% +} +.business-txt-cols .inline-block{ + padding:0 0 65px +} +.bottom-page.business-icon.big{ + margin:0 auto +} +.business-compare-data{ + text-align:center +} +.business-plan-info.strong li,.business-plan-info li{ + font-size:14px +} +.business-support{ + background-color:initial; + border:0; + margin:0 auto; + max-width:656px; + padding:0 +} +.mobile .business-support{ + padding-top:30px +} +.business-support .half-sized{ + width:100% +} +.business-support .half-sized:nth-child(2n){ + margin:0 +} +.business-support .mega-button{ + margin:12px auto 0 +} +} +@media (hover:hover){ +.business-txt-cols .inline-block a:hover{ + text-decoration:underline +} +} +@media only screen and (max-width:1050px){ +.bottom-page .mega-button.individual{ + display:none +} +} +@media only screen and (max-width:1300px){ +.bottom-page .fmdb-loader.sprite-fm-uni,.bottom-page .top-buttons,.bottom-page .top-change-language,.bottom-page .top-login-button,.bottom-page .topbar-links hr{ + display:none +} +} +@media only screen and (max-width:720px){ +.business-cell .cell-bg:after,.business-cell .cell-bg:before,.business-row:nth-child(2n) .cell-icon:before{ + width:-webkit-calc(100% - 15px); + width:-moz-calc(100% - 15px); + width:calc(100% - 15px) +} +.business-cell{ + padding-left:15px +} +} +@media only screen and (max-width:660px){ +.business-page .bottom-page.left-cell,.business-page .bottom-page.right-cell{ + display:block; + height:50%; + width:100% +} +.bottom-page.gradient-block{ + margin:12px auto 4px +} +.business-page .pricing-page.local-currency-tip{ + margin-bottom:4px +} +.bottom-page.content-cell{ + display:block; + padding:18px 20px; + width:100% +} +.business-price-info.top{ + font-size:14px; + padding:4px 0 24px +} +.bottom-page.slider-top{ + margin:20px 0 0; + white-space:nowrap +} +.bottom-page.slider-top-wrap{ + display:block +} +.bottom-page.slider-button{ + display:inline-block; + height:auto; + padding:18px 0; + white-space:normal; + width:100% +} +.bottom-page.slider-block{ + margin-right:30px; + padding:30px 0 64px; + text-align:center; + width:100% +} +.slider-body .bottom-page.business-text{ + font-size:14px; + line-height:24px +} +.bottom-page.business-text.top-pad{ + padding-top:32px +} +.business-page .cell-40,.business-page .cell-45,.business-page .cell-55,.business-page .cell-60{ + display:block; + width:100% +} +.business-info-block .business-icon.big{ + display:none +} +.bottom-page.horizontal-centered-bl.huge-pad{ + padding-top:94px +} +.business-page .bottom-page.changed-order .order2{ + display:block +} +.business-page .bottom-page.changed-order .order1{ + display:none +} +.business-big-header{ + font-size:24px; + line-height:32px; + padding-top:6px; + text-align:center +} +.business-txt-block{ + max-width:none; + padding-top:35px; + text-align:center +} +.bottom-page.business-icon.medium{ + margin:0 auto 5px +} +.bottom-page.business-icons{ + display:inline-block; + padding:0 0 0 28px +} +.bottom-page.angle-bg.low-top{ + margin-top:0 +} +.bottom-page.horizontal-centered-bl.ultra-huge-pad{ + padding-bottom:0; + padding-top:78px +} +.business-row{ + display:none +} +.business-cell{ + display:inline-block; + margin:0 0 28px; + max-width:300px; + padding:0; + position:relative; + width:100% +} +.business-cell:last-child{ + margin-bottom:0 +} +.business-compare-tip{ + font-size:12px; + padding:5px 0 48px; + text-align:center +} +.business-row.company{ + display:block +} +.business-cell .cell-bg:after,.business-cell .cell-bg:before{ + width:100% +} +.business-cell .business-price .big{ + font-size:48px +} +.business-table{ + margin:20px 0 0 +} +.business-info.mobile{ + border-bottom-left-radius:10px; + border-bottom-right-radius:10px; + display:block; + overflow:hidden +} +.business-icon-link{ + color:#333; + font-size:12px; + height:48px; + line-height:20px; + padding:0 +} +.business-info.mobile .business-cell.cell-icon{ + box-shadow:0 -1px 0 0 rgba(0, 0, 0, .05); + box-sizing:border-box; + color:#333; + display:block; + font-size:14px; + line-height:21px; + margin:0; + max-width:none; + min-height:48px; + padding:15px 16px 14px 36px; + position:relative; + text-align:left +} +.business-info.mobile .business-cell.cell-icon:nth-child(odd){ + background-color:rgba(0, 0, 0, .02); + box-shadow:inset 0 1px 0 0 rgba(0, 0, 0, .05) +} +.business-info.mobile .business-cell.cell-icon i{ + background-position:-4px -114px; + left:12px; + position:absolute; + top:15px +} +.business-info.mobile .business-cell.cell-icon.cross i{ + background-position:-295px -115px +} +.bottom-page .slide2 .slider-content{ + left:-100%; + left:-webkit-calc(-100% - 30px); + left:-moz-calc(-100% - 30px); + left:calc(-100% - 30px) +} +.bottom-page .slide3 .slider-content{ + left:-100%; + left:-webkit-calc(-200% - 60px); + left:-moz-calc(-200% - 60px); + left:calc(-200% - 60px) +} +.bottom-page .slide4 .slider-content{ + left:-300%; + left:-webkit-calc(-300% - 90px); + left:-moz-calc(-300% - 90px); + left:calc(-300% - 90px) +} +.bottom-page .slide5 .slider-content{ + left:-400%; + left:-webkit-calc(-400% - 120px); + left:-moz-calc(-400% - 120px); + left:calc(-400% - 120px) +} +.bottom-page .slide2 .slider-top-wrap{ + left:-100% +} +.bottom-page .slide3 .slider-top-wrap{ + left:-200% +} +.bottom-page .slide4 .slider-top-wrap{ + left:-300% +} +.bottom-page .slide5 .slider-top-wrap{ + left:-400% +} +.bottom-page .activity-status-block,.bottom-page .fm-avatar,.bottom-page .membership-status-block,.bottom-page .user-name,.business .top-buttons.business{ + display:none +} +.bottom-page.business-text.password-warning{ + display:block; + margin:24px auto 0 +} +.bottom-page.business-text.password-warning span{ + display:block; + left:auto; + margin:8px auto +} +.business-tick-txt{ + line-height:24px; + padding:8px 16px 8px 24px +} +.bottom-page.business2,.bottom-page.business3,.bottom-page.business4,.bottom-page.business5{ + display:block; + padding:0 +} +.bottom-page.business-button{ + font-size:14px; + letter-spacing:.39px; + min-width:auto +} +.business-txt-cols{ + margin-bottom:30px +} +.business-compare-data{ + padding:0 +} +.business-compare-result{ + margin:0 +} +} +@media only screen and (max-width:660px) and (max-height:780px){ +.business-compare-charts{ + background-size:auto 130px; + height:260px +} +} +@media only screen and (max-width:565px){ +.business-page .bottom-page.big-header.top.dark{ + margin:0 auto; + padding:47px 0 4px +} +.bottom-page .create-account-button{ + display:none +} +} +@media only screen and (max-width:420px){ +.bottom-page.business-header,.business-page .bottom-page.big-header.dark{ + font-size:20px; + line-height:28px +} +} +@media only screen and (-o-min-device-pixel-ratio:3/2),only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){ +.bottom-page .slider-ctrl-button,.business-cell.cell-icon i,.business-icon,.business-tick-txt:before,i.medium-icon.business-sprite{ + background-image:url(../imagery/mega-business-2x.eab14dbbd8fa2387.png) !important; + background-size:367px auto +} +} + +.provider-icon{ + background-image:url(../imagery/mega-payment-provider-icons.5ac57f8b3e01dcc1.png); + background-position:0 0; + background-repeat:no-repeat; + display:inline-block; + height:20px; + vertical-align:top; + width:20px +} +.provider-icon.svgicon{ + background-image:none; + position:relative +} +.provider-icon i{ + --icon-size:24px; + display:inline-block; + left:-2px; + position:absolute; + top:-2px +} +.provider-icon.astropay{ + background-position:0 0 +} +.provider-icon.astropayAE{ + background-position:0 -60px +} +.provider-icon.astropayAK{ + background-position:0 -120px +} +.provider-icon.astropayAG{ + background-position:0 -180px +} +.provider-icon.astropayAU{ + background-position:0 -240px +} +.provider-icon.astropayB{ + background-position:0 -300px +} +.provider-icon.astropayBB{ + background-position:0 -360px +} +.provider-icon.astropayBG{ + background-position:0 -420px +} +.provider-icon.astropayBL{ + background-position:0 -480px +} +.provider-icon.astropayBM{ + background-position:0 -540px +} +.provider-icon.astropayBN{ + background-position:0 -600px +} +.provider-icon.astropayBV{ + background-position:0 -660px +} +.provider-icon.astropayBX{ + background-position:0 -720px +} +.provider-icon.astropayCA{ + background-position:0 -780px +} +.provider-icon.astropayCL{ + background-position:0 -840px +} +.provider-icon.astropayCM{ + background-position:0 -900px +} +.provider-icon.astropayCR{ + background-position:0 -960px +} +.provider-icon.astropayCS{ + background-position:0 -1020px +} +.provider-icon.astropayDA{ + background-position:0 -1080px +} +.provider-icon.astropayDC{ + background-position:0 -1140px +} +.provider-icon.astropayDD{ + background-position:0 -1200px +} +.provider-icon.astropayDM{ + background-position:0 -1260px +} +.provider-icon.astropayDS{ + background-position:0 -1320px +} +.provider-icon.astropayEL{ + background-position:0 -1380px +} +.provider-icon.astropayEQ{ + background-position:0 -1440px +} +.provider-icon.astropayEX{ + background-position:0 -1500px +} +.provider-icon.astropayEY{ + background-position:0 -1560px +} +.provider-icon.astropayGA{ + background-position:0 -1620px +} +.provider-icon.astropayH{ + background-position:0 -1680px +} +.provider-icon.astropayHI{ + background-position:0 -1740px +} +.provider-icon.astropayI{ + background-position:0 -1800px +} +.provider-icon.astropayIS{ + background-position:0 -1860px +} +.provider-icon.astropayJC{ + background-position:0 -1920px +} +.provider-icon.astropayMC{ + background-position:0 -1980px +} +.provider-icon.astropayMD{ + background-position:0 -2040px +} +.provider-icon.astropayMG{ + background-position:0 -2100px +} +.provider-icon.astropayML{ + background-position:0 -2160px +} +.provider-icon.astropayNJ{ + background-position:0 -2220px +} +.provider-icon.astropayNT{ + background-position:0 -2280px +} +.provider-icon.astropayOC{ + background-position:0 -2340px +} +.provider-icon.astropayOX{ + background-position:0 -2400px +} +.provider-icon.astropayPC{ + background-position:0 -2460px +} +.provider-icon.astropayPF{ + background-position:0 -2520px +} +.provider-icon.astropayPR{ + background-position:0 -2580px +} +.provider-icon.astropayRE{ + background-position:0 -2640px +} +.provider-icon.astropayRL{ + background-position:0 -2700px +} +.provider-icon.astropayRP{ + background-position:0 -2760px +} +.provider-icon.astropaySB{ + background-position:0 -2820px +} +.provider-icon.astropaySI{ + background-position:0 -2880px +} +.provider-icon.astropaySM{ + background-position:0 -2940px +} +.provider-icon.astropaySP{ + background-position:0 -3000px +} +.provider-icon.astropaySX{ + background-position:0 -3060px +} +.provider-icon.astropayTS{ + background-position:0 -3120px +} +.provider-icon.astropayTT{ + background-position:0 -3180px +} +.provider-icon.astropayVA{ + background-position:0 -3240px +} +.provider-icon.astropayVD{ + background-position:0 -3300px +} +.provider-icon.astropayVI{ + background-position:0 -3360px +} +.provider-icon.astropayWP{ + background-position:0 -3420px +} +.provider-icon.bitcoin{ + background-position:0 -3480px +} +.provider-icon.perfunctio{ + background-position:0 -3540px +} +.provider-icon.dynamicpay{ + background-position:0 -3600px +} +.provider-icon.fortumo{ + background-position:0 -3660px +} +.provider-icon.infobip{ + background-position:0 -3720px +} +.provider-icon.paysafecard{ + background-position:0 -3780px +} +.provider-icon.tpay{ + background-position:0 -3840px +} +.provider-icon.voucher{ + background-position:0 -3900px +} +.provider-icon.ecp,.provider-icon.Stripe{ + background-position:0 -3540px +} +.provider-icon.ecpVI,.provider-icon.stripeVI{ + background-position:0 -3360px +} +.provider-icon.ecpMC,.provider-icon.stripeMC{ + background-position:0 -1980px +} +.provider-icon.wiretransfer{ + background-position:0 -3960px +} +.provider-icon.directreseller{ + background-position:0 -3540px +} +.provider-icon.directresellerAlipay{ + background-position:0 -4020px +} +.provider-icon.sabadell{ + background-position:0 -4080px +} +.provider-icon.sabadellVI{ + background-position:0 -3360px +} +.provider-icon.sabadellMC{ + background-position:0 -1980px +} +.provider-icon.astropayRU{ + background-position:0 -4140px +} +.provider-icon.astropayPW{ + background-position:0 -4200px +} +.provider-icon.astropayVT{ + background-position:0 -4260px +} +.provider-icon.astropayUI{ + background-position:0 -4320px +} +.provider-icon.astropayOV{ + background-position:0 -4380px +} +.provider-icon.astropayXW{ + background-position:0 -4440px +} +.provider-icon.astropayNB{ + background-position:0 -4500px +} +.provider-icon.astropayDN{ + background-position:0 -4560px +} +.provider-icon.astropayIO{ + background-position:0 -4620px +} +.provider-icon.stripeAE{ + background-image:url(../imagery/mega-Amex.96236ca4178d97d0.svg); + background-size:unset +} +.provider-icon.stripeJC{ + background-image:url(../imagery/mega-JCB.bd750dec024aae2.svg); + background-size:unset +} +.provider-icon.stripeUP{ + background-image:url(../imagery/mega-UnionPay.a52ad53a6e787c11.svg); + background-size:unset +} +.provider-icon.stripeDD{ + background-image:url(../imagery/mega-Discover.2dd0901860df9c6.svg); + background-size:unset +} +.pricing-page.slider .ui-slider-handle,.pricing-sprite,i.pricing-sprite{ + background-image:url(../imagery/mega-pricing-sprite.dc16fb6abb114c77.png); + background-repeat:no-repeat +} +.mobile .pricing-sprite.powered-by-astropay{ + background-position:-14px -815px; + height:25px; + width:100px +} +.pricing-sprite.save-green-arrow{ + background-position:-249px -741px; + height:26px; + width:30px +} +.pricing-sprite.i-icon{ + background-color:var(--icon-rest); + background-position:-190px -747px; + border-radius:100%; + height:12px; + width:12px +} +.pricing-sprite.big-red-cross{ + background-position:-14px -733px; + height:42px; + width:42px +} +.pricing-sprite.x95{ + height:95px; + width:95px +} +.pricing-sprite.x80{ + background-size:300px auto; + height:80px; + width:80px +} +.pricing-sprite.x95.storage{ + background-position:1px 1px +} +.pricing-sprite.x95.collaboration{ + background-position:-139px 1px +} +.pricing-sprite.x95.chat{ + background-position:-279px 1px +} +.pricing-sprite.x95.backups{ + background-position:-279px -139px +} +.pricing-sprite.x95.creative{ + background-position:0 -139px +} +.pricing-sprite.x95.finance{ + background-position:-280px -419px +} +.pricing-sprite.x95.government{ + background-position:-280px -279px +} +.pricing-sprite.x95.education{ + background-position:-140px -139px +} +.pricing-sprite.x95.hr{ + background-position:0 -419px +} +.pricing-sprite.x95.sales{ + background-position:-140px -279px +} +.pricing-sprite.x95.it{ + background-position:0 -279px +} +.pricing-sprite.x95.marketing{ + background-position:-138px -419px +} +.pricing-sprite.x80.storage{ + background-position:2px 2px +} +.pricing-sprite.x80.collaboration{ + background-position:-110px 2px +} +.pricing-sprite.x80.chat{ + background-position:-223px 2px +} +.pricing-sprite.x80.backups{ + background-position:-223px -111px +} +.plan-icon.pricing-sprite{ + background-position:-100%; + height:60px; + width:60px +} +.plan-icon.pricing-sprite.x32{ + height:32px; + width:32px +} +.plan-icon.pricing-sprite.x32.mini{ + -ms-transform:scale(.8); + -webkit-transform:scale(.8); + transform:scale(.8) +} +.plan-icon.pricing-sprite.free,.plan-icon.pricing-sprite.pro0{ + background-position:-6px -575px +} +.plan-icon.pricing-sprite.pro4{ + background-position:-86px -575px +} +.plan-icon.pricing-sprite.pro1{ + background-position:-166px -575px +} +.plan-icon.pricing-sprite.pro2{ + background-position:-6px -655px +} +.plan-icon.pricing-sprite.pro3{ + background-position:-86px -655px +} +.plan-icon.pricing-sprite.business,.plan-icon.pricing-sprite.pro100{ + background-position:-166px -655px +} +.plan-icon.pricing-sprite.x32.free,.plan-icon.pricing-sprite.x32.pro0{ + background-position:-249px -579px +} +.plan-icon.pricing-sprite.x32.pro4{ + background-position:-289px -579px +} +.plan-icon.pricing-sprite.x32.pro1{ + background-position:-329px -579px +} +.plan-icon.pricing-sprite.x32.pro2{ + background-position:-249px -619px +} +.plan-icon.pricing-sprite.x32.pro3{ + background-position:-289px -619px +} +.plan-icon.pricing-sprite.x32.business,.plan-icon.pricing-sprite.x32.pro100{ + background-position:-329px -619px +} +.pricing-section .top-bl{ + padding-bottom:34px +} +.pricing-page.top-header{ + color:#373737; + font-family:var(--text-font-family-second-light); + font-size:46px; + line-height:63px; + margin:auto; + max-width:921px; + padding:64px 0 51px +} +.not-logged .pricing-page.top-header.not-logged{ + display:block +} +.not-logged .pricing-page.top-header.default,.pricing-page.top-header.not-logged{ + display:none +} +.pricing-page.medium-txt{ + color:#373737; + font-size:20px; + line-height:24px +} +.pricing-page.top-small-txt{ + color:#f1373b; + font-size:16px; + line-height:20px; + padding:14px 0 0 +} +.bottom-page.plans-bottom-pad.mid-wide{ + padding-bottom:130px +} +.pricing-page.plans-switcher{ + background-color:#fff; + border-radius:28px; + box-shadow:0 0 0 1px #e6e6e6; + display:inline-block; + font-size:0; + margin:45px 0 86px; + white-space:nowrap +} +.pricing-page.plans-switcher .button{ + border-radius:28px; + color:#373737; + cursor:pointer; + display:inline-block; + font-size:22px; + height:50px; + line-height:50px; + padding:0 20px +} +.pricing-page.plans-switcher .button.active{ + background-color:#00c0a6; + color:#fff; + font-family:LatoWebBold,Arial +} +.pricing-page.radio-buttons{ + position:relative +} +.pricing-page label.radio-txt{ + color:var(--text-color-high); + cursor:pointer; + font:var(--text-body1) +} +.pricing-page.radio-buttons label.radio-txt:last-child{ + padding-right:0 +} +.pricing-page .save-green-arrow{ + cursor:default; + left:18px; + position:absolute; + top:-41px +} +.pricing-page.save-percs{ + background-color:#00a886; + border-radius:12px; + box-shadow:0 0 0 4px #fafafa; + color:#fff; + cursor:default; + font-size:14px; + height:24px; + line-height:24px; + padding:0 10px; + position:absolute; + top:-13px; + white-space:nowrap; + z-index:1 +} +.pricing-page.plans-wrap{ + -ms-overflow-style:none; + scrollbar-width:none; + -webkit-overflow-scrolling:touch; + overflow:hidden; + overflow-x:scroll; + padding:35px 0 0 +} +.rtl .pricing-page.plans-wrap{ + direction:rtl +} +.pricing-page.plans-wrap::-webkit-scrollbar{ + display:none +} +.pricing-page.plans-block{ + border:1px solid #d5d5d5; + border-width:1px 0; + box-sizing:border-box; + font-size:0; + line-height:0; + white-space:nowrap +} +.pricing-section .pricing-page.plans-block{ + margin:0 auto; + max-width:1112px +} +.pricing-page.plan{ + background:var(--surface-main); + border:1px solid var(--stroke-grey-2); + box-sizing:border-box; + line-height:0; + position:relative; + text-align:center +} +.pricing-page.plan.details{ + border-top:0; + flex:1; + padding:18px 0; + text-align:left +} +.pricing-page.plan-label{ + background-color:#00bfa5; + border-radius:0 0 4px 4px; + box-sizing:border-box; + color:#fff; + display:inline-block; + font-size:16px; + height:22px; + line-height:22px; + margin:-1px auto 20px; + min-width:100px; + padding:0 10px +} +.payment-page.discount-header{ + background-color:#28c969; + height:50px +} +.payment-page.discount-header .discount-header-text{ + color:#fff; + font-family:LatoWeb,sans-serif; + font-size:26px; + font-weight:700; + height:32px; + letter-spacing:0; + line-height:32px; + padding-top:10px +} +.pricing-page.old-plan-price{ + color:#666; + font-family:var(--text-font-family-second-regular); + font-size:22px; + height:27px; + letter-spacing:0; + line-height:27px; + margin-top:-21px +} +.pricing-page.cross-line{ + background-color:#f33; + box-sizing:border-box; + height:1.5px; + margin-bottom:11px; + margin-left:calc(50% - 38px); + margin-top:-14px; + width:77px +} +.pricing-page.plan-price.discounted .asterisk,.pricing-page.plan-price.discounted .price{ + color:#28c969; + font-family:var(--text-font-family-second-regular); + font-size:32px; + font-weight:600; + letter-spacing:0 +} +.pricing-page.plan-price.discounted .asterisk{ + margin-top:unset +} +.pricing-page.plan-label:empty{ + background-color:initial +} +.pricing-page.plan-title{ + color:var(--text-color-high); + font-family:var(--text-font-family-second-light); + font-size:28px; + line-height:34px +} +.pricing-page.plan-info{ + box-sizing:border-box; + color:var(--text-color-medium); + font-size:16px; + line-height:24px; + margin:0 auto; + max-width:390px; + padding:12px 10px 22px; + white-space:normal +} +.pricing-page.plan-price{ + color:var(--text-color-high); + font-family:var(--text-font-family-second-light); + font-size:36px; + line-height:45px; + padding:0 15px 4px +} +.pricing-page.plan-price .asterisk{ + color:var(--text-color-high); + display:none; + font-size:20px; + margin-top:-5px; + vertical-align:top +} +.local-currency .pricing-page.plan-price .asterisk{ + display:inline-block +} +.pricing-page.plan-currency,.pricing-page.plan-data,.pricing-page.plan-period{ + color:var(--text-color-high); + font:var(--text-h3); + font-family:var(--text-font-family) +} +.pricing-page.plan-data{ + color:var(--text-color-medium); + font-size:15px; + margin-top:10px +} +.pricing-page.plan-price+.pricing-page.plan-period{ + padding-top:6px +} +.pricing-page.euro-price{ + background-color:#fff; + border:1px solid #ebebeb; + border-radius:10px; + box-sizing:border-box; + color:#666; + display:inline-block; + font-size:13px; + height:22px; + line-height:18px; + margin:5px 0 8px; + padding:1px 5px +} +.pricing-page.euro-price:empty{ + background-color:initial; + border:0; + margin-bottom:0 +} +.pricing-page.plan-button{ + border:1px solid #00bfa5; + border-radius:2px; + box-sizing:border-box; + color:#00bfa5; + cursor:pointer; + display:inline-block; + font-family:LatoWebBold,Arial; + font-size:16px; + height:48px; + line-height:46px; + margin:12px 0 48px; + min-width:154px; + padding:0 10px; + text-align:center; + -webkit-transition:background-color .2s ease-in-out,color .2s ease-in-out; + transition:background-color .2s ease-in-out,color .2s ease-in-out +} +.en .pricing-page.plan-button{ + font-size:18px +} +body:not(.mobile) .pricing-page.plan-button:hover{ + background-color:#00bfa5; + border:1px solid #00bfa5; + color:#fff +} +body:not(.mobile) .current .pricing-page.plan-button:hover{ + background-color:initial; + border-color:#9b9b9b; + color:#666 +} +.reg-st5-complete-button{ + background-color:rgba(0, 0, 0, .05); + border-radius:4px; + color:#fff; + display:inline-block; + font-size:14px; + height:40px; + line-height:40px; + padding:0 15px +} +.reg-st5-complete-button.active{ + background:var(--surface-error); + cursor:pointer +} +.pricing-page.plans-row{ + display:grid; + grid-template-columns:repeat(auto-fit, minmax(160px, 1fr)) +} +.plans-row .pricing-page.plan{ + border-width:0 0 0 1px; + vertical-align:top +} +body:not(.rtl) .plans-row .pricing-page.plan.hidden+.plan{ + border-left:none +} +.plans-row .pricing-page.plan.free{ + display:none +} +.plans-row .pricing-page.plan:first-child{ + border-left-color:transparent +} +.plans-row .pricing-page.plan.details{ + border-top:1px solid #d5d5d5 +} +.plans-row .pricing-page.plan-content{ + margin-top:auto +} +.pricing-page.plan .plan-icon{ + margin:24px auto 8px +} +.payment-section .pricing-page.plan-icon{ + height:60px; + width:60px +} +.pricing-page.plan .mega-button{ + margin:12px 18px 36px +} +.plan.pro3 .pricing-page.plan-label{ + background-color:#c57c05 +} +.plan.pro3 .pricing-page.plan-price{ + color:#c57c05 +} +.plan.pro3:not(.current) .pricing-page.plan-button{ + border-color:#c57c05; + color:#c57c05 +} +body:not(.mobile) .plan.pro3:not(.current) .pricing-page.plan-button:hover{ + background-color:#c57c05; + color:#fff +} +.plan-tag-description{ + background:#fff; + border-radius:4px; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + box-sizing:border-box; + font:var(--text-body1); + font-size:13px; + opacity:0; + padding:5px 10px; + position:absolute; + transition:opacity .3s ease-in-out; + visibility:hidden; + white-space:normal; + z-index:10 +} +.plan-tag-description span{ + position:relative +} +.plan-tag-description b{ + font-family:var(--text-font-family-bold); + font-weight:400 +} +.plan-tag-description.visible{ + opacity:1; + visibility:visible +} +.plan-tag-description:after{ + background-color:#fff; + bottom:-4px; + box-shadow:-1px 1px 2px 0 rgba(0, 0, 0, .1); + content:""; + display:block; + height:10px; + left:calc(50% - 5px); + position:absolute; + transform:rotate(-45deg); + -moz-transform:rotate(-45deg); + -ms-transform:rotate(-45deg); + -o-transform:rotate(-45deg); + -webkit-transform:rotate(-45deg); + width:10px +} +.plan-tag-description.noafter:after{ + display:none +} +.plan-tag-description:before{ + border-radius:inherit; + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.plan-tag-description b.plan-name{ + color:#ff333a; + white-space:nowrap +} +.plan-tag-description .pro4 b.plan-name{ + color:orange +} +.plans-block .current .current-plan-tag,.plans-block .next .next-plan-tag{ + background-color:#ff333a +} +.plans-block .pro4.current .current-plan-tag,.plans-block .pro4.next .next-plan-tag{ + background-color:orange +} +.pricing-page.plan-feature{ + box-sizing:border-box; + color:var(--text-color-medium); + font-size:15px; + line-height:20px; + margin:0 auto; + max-width:370px; + padding:7px 38px 7px 16px; + position:relative; + white-space:normal +} +.rtl .pricing-page.plan-feature{ + padding:7px 16px 7px 38px +} +.pricing-page.plan-feature.text-body1{ + font:var(--text-body1); + margin:20px auto; + padding:3px 38px 3px 16px +} +.pricing-page.plan-feature.text-body1 .text-h2{ + color:var(--text-color-high); + font:var(--text-h2); + padding-bottom:4px +} +.pricing-page.plan-feature span{ + display:inline-block +} +.pricing-page.plan-feature.strong,.pricing-page.plan-feature.strong *{ + color:var(--text-color-high); + font-family:var(--text-font-family-bold) +} +.pricing-page.plans-row .pricing-page.plan-feature{ + margin:0; + max-width:none +} +.pricing-page.local-currency-tip{ + box-sizing:border-box; + color:var(--text-color-medium); + display:none; + font-size:14px; + line-height:20px; + padding:20px 0 0; + text-align:center +} +.local-currency .pricing-page.local-currency-tip:not(.hidden){ + display:block +} +.pricing-section .mega-button.free-button{ + margin:40px 0 0 +} +.pricing-section .startpage.default-controls{ + padding:40px 0 0 +} +.pricing-page.plan .i-icon{ + position:absolute; + right:18px; + top:11px; + -webkit-transition:background-color .2s ease-in-out; + transition:background-color .2s ease-in-out +} +.pricing-page.plan.current{ + background-color:var(--stroke-grey-2) +} +.pricing-page.plan.current,.pricing-page.plan.current+.plan{ + border-left:1px solid transparent +} +.current .pricing-page.plan-button{ + background-color:initial; + border-color:#c2c2c2; + color:#a1a1a1 +} +.js-business-card-old{ + padding:0 24px 130px +} +.en .pricing-page.top-header.business-el{ + max-width:620px +} +.pricing-page.plan.business{ + background-color:#eef8ff; + border-color:#d5d5d5; + display:block; + margin:0 auto; + max-width:475px +} +.rtl .business-calculator .footer,.rtl .business-calculator .header,.rtl .business-calculator span,.rtl .pricing-page.plan.business{ + direction:rtl +} +.plan.business .pricing-page.euro-price:empty{ + height:auto +} +.business-plan-wrapper{ + box-sizing:border-box; + display:flex; + margin:0 auto; + max-width:1030px; + padding:0 40px 130px +} +.local-currency .business-plan-wrapper{ + padding-bottom:20px +} +.business-el .pricing-page.local-currency-tip{ + margin-bottom:40px +} +.business-plan-column{ + display:flex; + flex-direction:column; + position:relative; + width:50% +} +.business.pricing-page.plan .i-icon{ + top:13px +} +.business-calculator{ + background-color:var(--secondary-green); + color:var(--text-color-white-high); + font:var(--text-h3); + text-align:center +} +.business-plan-wrapper .pricing-page.plan{ + border-right:0; + margin:0 +} +.business-plan-label{ + position:absolute; + right:0; + top:-18px; + z-index:10 +} +.business-plan-label i{ + background-position:-315px -816px; + height:18px; + position:absolute; + right:0; + top:0; + width:9px +} +.business-plan-label span{ + background-color:var(--secondary-orange); + border-radius:0 0 4px 4px; + color:var(--text-color-white-high); + display:block; + font:var(--text-h3); + height:36px; + line-height:36px; + margin:0 7px 0 0; + padding:0 10px; + position:relative; + z-index:1 +} +.business-calculator .header{ + padding:32px 30px 6px +} +.business-calculator hr{ + background-color:var(--text-color-white-high); + border:0; + height:1px; + margin:0; + opacity:.5 +} +.business-calculator .title{ + font:var(--text-h2-bold); + padding:22px 30px 54px +} +.business-slider-label{ + color:var(--text-color-high); + font:var(--text-h3); + padding:0 0 28px; + text-align:start +} +.business-slider.ui-slider.ui-widget{ + background:#dcdcdc; + border-radius:4px; + height:8px; + margin:20px 0 10px +} +.business-slider-values{ + color:var(--text-color-medium); + display:flex; + font:var(--text-h3); + font-family:var(--text-font-family-second-regular); + justify-content:space-between; + padding:0 0 26px; + text-align:justify +} +.business-slider-values div{ + min-width:30px; + text-align:center +} +.business-slider-values div.perc-50{ + display:flex; + flex:0 0 auto; + justify-content:space-between; + width:calc(50% + 20px) +} +.business-slider-values div.perc-50:first-child{ + display:inline-block; + min-width:inherit +} +.business-slider.ui-slider .ui-slider-range{ + background:var(--secondary-green); + border-radius:4px 0 0 4px; + height:8px +} +.business-slider .handle-wrap{ + -webkit-margin-end:30px; + margin-inline-end:30px; + position:relative +} +.business-slider .ui-slider-handle{ + -webkit-margin-start:-1px; + background-color:var(--secondary-green); + background-position:-341px -738px; + border:0; + border-radius:100%; + box-shadow:none; + height:32px; + margin-inline-start:-1px; + outline:none; + position:absolute; + top:-13px; + width:32px +} +.business-slider .ui-slider-handle span{ + box-sizing:border-box; + color:var(--secondary-green); + display:inline-block; + font:var(--text-h2); + font-family:var(--text-font-family-second-regular); + font-size:26px; + left:50%; + position:absolute; + text-align:center; + top:-34px; + transform:translateX(-50%); + white-space:nowrap +} +.business-calculator .business-slider.ui-slider.ui-widget{ + background:hsla(0, 0%, 100%, .5); + border-radius:0; + cursor:pointer; + height:4px; + margin:20px 30px 14px +} +.business-calculator .business-slider-values{ + color:var(--text-color-white-high); + font:var(--text-h3); + line-height:20px; + padding:0 30px 34px +} +.business-calculator .business-slider-values div{ + text-align:start +} +.business-calculator .business-slider.ui-slider .ui-slider-range{ + background:var(--text-color-white-high); + border-radius:0; + height:4px +} +.business-calculator .handle-wrap{ + -webkit-margin-end:15px; + margin-inline-end:15px +} +.business-calculator .ui-slider-handle{ + -webkit-margin-start:-7px; + background-color:var(--text-color-white-high); + background-position:-312px -742px; + height:24px; + margin-inline-start:-7px; + top:-10px; + width:24px +} +.business-calculator .ui-slider-handle span{ + color:var(--text-color-white-high); + font-size:20px; + top:-28px +} +.business-calculator .footer{ + padding:26px 30px +} +.business-calculator .footer span{ + display:block; + font-family:var(--text-font-family-second-regular); + font-size:36px; + line-height:44px +} +.ar .business-calculator .ui-slider-handle span{ + font-size:16px +} +.ar .business-calculator .business-slider-values div,.vi .business-calculator .business-slider-values div{ + font-size:15px +} +.es .business-calculator .business-slider-values div{ + font-size:14px +} +.business-quotes{ + font-size:0; + line-height:0; + overflow:hidden; + position:relative; + white-space:nowrap +} +.business-quote{ + display:inline-block; + opacity:0; + transition:opacity .6s ease-in-out; + vertical-align:middle; + white-space:normal; + width:100% +} +.business-quote.active{ + opacity:1 +} +.business-quote .title{ + color:var(--text-color-high); + font:var(--text-h2); + font-family:var(--text-font-family-second-regular); + padding:50px 0 20px +} +.business-quote .name{ + color:var(--text-color-high); + font:var(--text-h3) +} +.business-q-wrap .q-logo{ + background-position:100%; + background-repeat:no-repeat; + cursor:pointer; + display:none; + height:40px; + width:164px +} +.business-q-wrap .q-logo.cloudwards{ + background-position:center -893px +} +.business-q-wrap .active .q-logo.cloudwards,.business-q-wrap .q-logo.cloudwards.active,.business-q-wrap .q-logo.cloudwards:hover{ + background-position:center -953px +} +.business-q-wrap .q-logo.pro-privacy{ + background-position:center -1014px +} +.business-q-wrap .active .q-logo.pro-privacy,.business-q-wrap .q-logo.pro-privacy.active,.business-q-wrap .q-logo.pro-privacy:hover{ + background-position:center -1074px +} +.business-q-wrap .q-logo.tech-advisor{ + background-position:center -1133px +} +.business-q-wrap .active .q-logo.tech-advisor,.business-q-wrap .q-logo.tech-advisor.active,.business-q-wrap .q-logo.tech-advisor:hover{ + background-position:center -1193px +} +.business-q-wrap .q-logo.tech-radar{ + background-position:center -1256px +} +.business-q-wrap .active .q-logo.tech-radar,.business-q-wrap .q-logo.tech-radar.active,.business-q-wrap .q-logo.tech-radar:hover{ + background-position:center -1316px +} +.business-q-wrap .q-logo.toms-guide{ + background-position:center -1376px +} +.business-q-wrap .active .q-logo.toms-guide,.business-q-wrap .q-logo.toms-guide.active,.business-q-wrap .q-logo.toms-guide:hover{ + background-position:center -1436px +} +.default-controls.startpage.business-quotes-slider{ + padding:20px 0 10px; + position:relative; + z-index:1 +} +.business-quotes-controls{ + display:flex; + flex-wrap:wrap; + justify-content:space-around +} +.business-quotes-controls .q-logo{ + display:inline-block; + flex:0 0 auto; + margin:42px 0 20px +} +.dark-direct-tooltip.simpletip-tooltip.pricing-tip{ + border-radius:4px; + box-sizing:border-box; + font-family:LatoWeb,Arial; + font-size:12px; + line-height:14px; + max-width:164px; + padding:8px; + position:fixed; + text-align:center +} +.dark-direct-tooltip.pricing-tip.transformed u{ + text-decoration:none +} +.dark-direct-tooltip.pricing-tip.transformed span{ + position:relative +} +.dark-direct-tooltip.pricing-tip i.small-icon.icons-sprite.tooltip-arrow{ + background:none; + bottom:-3px; + height:11px; + width:11px +} +.pricing-page.slider-wrap{ + margin:126px 70px 283px; + max-width:973px; + position:relative +} +.pricing-page.slider.ui-widget-content{ + background:#e8e8e8; + border-radius:10px; + height:24px; + margin:0; + max-width:973px; + position:static; + width:auto +} +.pricing-page.slider .ui-slider-range{ + background:#00c0a6; + border-radius:10px; + height:24px; + -webkit-transition:width .2s ease-in-out; + transition:width .2s ease-in-out +} +.pricing-page.slider .ui-slider-handle{ + background-color:#00a886; + background-position:-84px -721px; + border:0; + border-radius:100%; + box-shadow:0 2px 4px 0 rgba(114, 114, 144, .5); + display:block; + height:65px; + margin:0 0 0 -32px; + position:absolute; + top:-21px; + -webkit-transition:left .2s ease-in-out; + transition:left .2s ease-in-out; + width:65px; + z-index:1 +} +.pricing-page.slider .ui-slider-handle:before{ + display:none +} +.pricing-page.slider-dot{ + background:#d3d3d3; + border-radius:100%; + box-shadow:0 0 0 4px transparent; + cursor:pointer; + height:40px; + left:0; + margin:-9px 0 0 -20px; + position:absolute; + top:0; + -webkit-transition:background-color .2s ease-in-out,box-shadow .2s ease-in-out; + transition:background-color .2s ease-in-out,box-shadow .2s ease-in-out; + width:40px +} +body:not(.mobile) .pricing-page.slider-dot:hover{ + background:#00bfa5 +} +.pricing-page.slider-dot.active{ + background:#00bfa5; + box-shadow:0 0 0 4px #fff +} +.pricing-page.slider-dot.d2{ + left:33.333333% +} +.pricing-page.slider-dot.d3{ + left:66.666666% +} +.pricing-page.slider-dot.d4{ + left:100% +} +.pricing-page.slider-dot .label{ + color:#666; + font-size:24px; + left:50%; + line-height:36px; + margin-left:-105px; + min-width:210px; + position:absolute; + text-align:center; + top:90px +} +.en .pricing-page.slider-dot .label{ + font-size:30px +} +.pricing-page.slider-dot span{ + color:#333; + display:block; + font-family:LatoWebBold,Arial +} +.pricing-page.compare-block{ + display:table; + margin:0 auto; + max-width:1009px; + table-layout:fixed; + width:100% +} +.rtl .pricing-page.compare-block{ + direction:rtl +} +.pricing-page.compare-cell{ + border:1px solid #dedede; + border-left-width:0; + box-sizing:border-box; + display:table-cell; + padding:20px 10px; + vertical-align:top; + width:33.333333% +} +.pricing-page.compare-cell:first-child{ + border:1px solid #dedede +} +.pricing-page.compare-cell .page-icon{ + margin:1px auto 0 +} +.pricing-page.compare-title{ + color:#333; + font-family:LatoWebBold,Arial; + font-size:18px; + line-height:22px; + padding:16px 0 0 +} +.pricing-page.compare-storage{ + color:#333; + font-family:LatoWebBold,Arial; + font-size:30px; + line-height:36px; + padding:18px 0 20px +} +.pricing-page.compare-price{ + color:#00bfa5; + font-family:LatoWebBold,Arial; + font-size:42px; + height:75px; + line-height:74px; + padding:0 +} +.en .pricing-page.compare-price{ + font-size:62px +} +.pricing-page.compare-price.blue{ + color:#007ee5 +} +.pricing-page.compare-price.yellow{ + color:#e8b508 +} +.pricing-page.compare-price span{ + display:inline-block +} +.pricing-page.compare-price .currency{ + font-size:33px; + padding:0 4px 0 2px +} +.pricing-page.compare-price .currency:empty{ + padding-left:0 +} +.pricing-page.compare-price .star{ + color:#373737; + font-family:Arial; + font-size:9px; + margin:-14px 0 0; + vertical-align:top +} +.pricing-page .star.green{ + color:#00c0a6; + font-family:Arial; + font-size:9px; + vertical-align:top +} +.pricing-page.compare-price .star.green{ + display:none; + padding-left:5px +} +.slide2 .pricing-page.compare-price .star.green{ + display:inline-block +} +.pricing-page.mega.free .compare-info,.pricing-page.mega.free .star{ + display:none +} +.pricing-page.compare-period{ + color:#333; + font-family:LatoWebBold,Arial; + font-size:20px; + height:24px; + line-height:24px; + padding:0 +} +.pricing-page.compare-info{ + color:#666; + font-size:15px; + line-height:18px; + padding:29px 0 0 +} +.pricing-page.compare-tip{ + color:#666; + display:none; + font-size:14px; + line-height:18px; + padding:23px 0 0 +} +.pricing-page.compare-tip .star.green{ + display:inline-block; + padding-right:7px +} +.pricing-page.compare-period.free,.slide1 .pricing-page.compare-period.default{ + display:none +} +.slide1 .pricing-page.compare-period.free{ + display:block +} +.slide1 .pricing-page.compare-storage{ + display:none +} +.slide1 .pricing-page.compare-price{ + padding-top:32px +} +.slide1 .pricing-page.compare-info{ + padding-top:70px +} +.slide2+.pricing-page.compare-tip{ + display:block +} +.not-supported .pricing-page.compare-info,.not-supported .pricing-page.compare-period,.not-supported .pricing-page.compare-price{ + display:none +} +.pricing-page.compare-ns{ + color:#373737; + display:none; + font-size:15px; + line-height:18px +} +.pricing-page.compare-ns span{ + white-space:nowrap +} +.pricing-page.big-red-cross{ + display:none; + margin:31px auto 20px +} +.not-supported .pricing-page.big-red-cross,.not-supported .pricing-page.compare-ns{ + display:block +} +.pricing-page.solutions-wrap{ + border-spacing:40px; + display:table; + margin:8px auto 0; + max-width:864px; + table-layout:fixed; + width:100% +} +.pricing-page.solution-row{ + display:table-row +} +.pricing-page.solution{ + border:1px solid #e6e6e6; + border-radius:4px; + box-shadow:0 2px 4px 0 hsla(0, 0%, 90.2%, .5); + display:table-cell; + height:346px; + position:relative; + -webkit-transition:border-color .2s ease-in-out,background-color .2s ease-in-out; + transition:border-color .2s ease-in-out,background-color .2s ease-in-out; + vertical-align:top; + width:50% +} +.pricing-page.solution.active,body .pricing-page.solution:hover{ + background-color:#f6fffe; + border-color:#91e2d7 +} +.pricing-page.solution-poster{ + box-sizing:border-box; + left:0; + padding:22px; + position:absolute; + top:50%; + -webkit-transform:translateY(-50%); + -moz-transform:translateY(-50%); + -o-transform:translateY(-50%); + -ms-transform:translateY(-50%); + transform:translateY(-50%); + -webkit-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out; + width:100% +} +.pricing-page.solution-details{ + background-color:#f6fffe; + box-sizing:border-box; + opacity:0; + padding:22px; + position:relative; + -webkit-transition:opacity .5s ease-in-out; + transition:opacity .5s ease-in-out; + z-index:1 +} +.pricing-page.solution:hover .pricing-page.solution-poster{ + opacity:0 +} +.pricing-page.solution:hover .pricing-page.solution-details{ + opacity:1 +} +.pricing-page.solution .x80,.pricing-page.solution .x95{ + margin:0 auto +} +.pricing-page.solution-name{ + color:#373737; + font-family:var(--text-font-family-second-regular); + font-size:26px; + line-height:32px; + margin:24px auto 0; + min-height:64px; + padding:0 28px +} +.pricing-page.solution-name.small{ + margin:15px auto 7px; + transform:scale(.8); + transform-origin:top +} +.pricing-page.solution-txt{ + color:#666; + font-size:16px; + line-height:24px; + padding-left:30px; + position:relative; + text-align:left +} +.pricing-page.solution-txt span{ + display:inline-block +} +.pricing-page.solution-txt i{ + left:0; + position:absolute; + top:2px +} +.pricing-page.roles-wrap{ + font-size:0; + line-height:0; + padding:0 0 144px +} +.pricing-page.roles-wrap .col-4{ + padding:140px 0 0 +} +.pricing-page.roles-wrap .x95{ + margin:0 auto +} +.pricing-page.role-name{ + color:#373737; + font-family:LatoWebBold,Arial; + font-size:28px; + line-height:34px; + padding:30px 0 0 +} +.pricing-page.white-info{ + color:#fff; + font-family:var(--text-font-family-second-light); + font-size:16px; + line-height:24px; + margin:auto; + max-width:1035px; + padding:30px 0 0 +} +.pricing-button.mega-button{ + margin:80px 0 -10px +} +.orange-notification.body{ + background-color:rgba(191, 74, 0, .05); + border-radius:3px; + box-shadow:0 0 0 1px rgba(191, 104, 0, .2); + box-sizing:border-box; + display:table; + margin-left:1px; + margin-top:20px; + max-width:calc(100% - 2px); + padding:0 16px 0 12px +} +.orange-notification.cell{ + color:#ff6f00; + display:table-cell; + font-size:13px; + line-height:18px; + vertical-align:middle +} +.argentina-only .orange-notification.cell{ + padding:6px +} +.orange-notification.cell.text{ + padding:5px 0 +} +.orange-notification .icons-sprite.fvnotice{ + background-position:-3px -1727px +} +.payment-section .top-header.plan-title{ + padding-bottom:20px +} +.payment-page.plan-wrap{ + float:right; + width:300px +} +.payment-section.local-currency .pricing-page.plan.main{ + padding-bottom:28px +} +.payment-section .button.purchase{ + margin-top:65px +} +.payment-page.header{ + color:#444; + font-family:LatoWebBold,Arial; + font-size:14px; + line-height:28px; + padding:0 0 25px; + position:relative +} +.payment-page.header.choose-renewal{ + padding-bottom:5px +} +.payment-page.header .number{ + background-color:#f33; + border-radius:100%; + color:#fff; + font-size:14px; + height:30px; + left:-50px; + line-height:30px; + position:absolute; + text-align:center; + top:-3px; + width:30px +} +.payment-method.template{ + display:none +} +.payment-method{ + width:33.333333% +} +.payment-duration,.payment-method{ + display:inline-block; + margin-bottom:15px +} +.payment-duration{ + vertical-align:top; + width:50% +} +.payment-page.info-block{ + margin:0 320px 0 50px; + position:relative; + text-align:left +} +.third-section .payment-page.info-block{ + float:left +} +.payment-page.info-block .provider-details{ + color:var(--text-color-high); + cursor:pointer; + display:inline-block; + font-size:14px; + line-height:26px; + max-width:calc(100% - 60px); + vertical-align:top; + white-space:nowrap +} +.payment-options-list.secondary{ + margin-bottom:45px; + margin-top:20px +} +.membership-radio{ + background-color:#fff; + border-radius:100%; + box-shadow:0 0 0 1px rgba(0, 0, 0, .1); + display:inline-block; + height:16px; + margin:5px 10px 0 0; + position:relative; + vertical-align:top; + width:16px +} +.membership-radio:after,.membership-radio:before{ + border:2px solid #fff; + border-radius:100%; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + box-sizing:border-box; + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.membership-radio.checked:after,.membership-radio:after{ + background-color:rgba(0, 0, 0, .05) +} +.membership-radio.checked:after{ + background:linear-gradient(180deg, #ff333a 0, #d90007); + border-radius:100%; + content:""; + opacity:.8 +} +.membership-radio.checked{ + box-shadow:0 0 0 1px rgba(255, 51, 58, .5) +} +.membership-radio input{ + cursor:pointer; + height:100%; + margin:0; + opacity:0; + padding:0; + position:absolute; + width:100%; + z-index:10 +} +.payment-duration.template{ + display:none +} +.membership-radio-label{ + background:transparent none repeat scroll 0 0; + color:#444; + cursor:pointer; + display:inline-block; + font-size:14px; + line-height:26px; + position:relative; + vertical-align:top +} +.membership-radio-label strong{ + font-family:LatoWebBold,Arial; + font-weight:400 +} +.payment-period,.renewal-option{ + margin-top:30px +} +.renewal-options-list .renewal-option{ + display:inline-block; + margin:0; + width:50% +} +.renewal-option .charge-information{ + color:#939da3; + font-size:13px; + padding-bottom:25px +} +.payment-duration .save-money{ + background-color:#29c969; + border-radius:8px; + color:#fff; + display:inline-block; + font-size:13px; + line-height:24px; + margin-left:17px; + padding-bottom:0; + padding-left:14px; + padding-right:14px; + vertical-align:top +} +.payment-duration .opt-note{ + display:none +} +.payment-duration.disabled .opt-note{ + display:block; + font-size:9px +} +.payment-section .bottom-page.horizontal-centered-bl.mid-wide{ + max-width:1300px +} +.payment-duration .membership-radio-label.discounted .oldPrice{ + color:#666; + font-family:LatoWeb,sans-serif; + font-size:18px; + letter-spacing:0; + margin-left:16px +} +.payment-duration .membership-radio-label.discounted .price{ + color:#28c969; + font-family:LatoWeb,sans-serif; + font-size:20px; + letter-spacing:0; + margin-left:10px +} +.payment-duration .membership-radio-label .price{ + font-weight:700 +} +.payment-duration .membership-radio-label.discounted .crossline{ + background-color:#f33; + box-sizing:border-box; + height:1.5px; + margin-bottom:5px; + margin-left:-60px; + width:60px +} +.payment-duration .membership-radio-label .crossline,.payment-duration .membership-radio-label .duration,.payment-duration .membership-radio-label .hyphen,.payment-duration .membership-radio-label .oldPrice,.payment-duration .membership-radio-label .price{ + display:inline-block +} +.payment-duration .membership-radio-label.discounted .hyphen{ + display:none +} +.provider-details .provider-icon{ + margin:3px 4px 0 0 +} +.provider-details .provider-name{ + display:inline-block; + max-width:95%; + overflow:hidden; + text-overflow:ellipsis; + vertical-align:top; + white-space:nowrap +} +.provider-show-more{ + margin-top:25px; + text-align:center +} +.provider-show-more .button{ + background-color:#fff; + border:1px solid #ddd; + border-radius:8px; + color:#999; + cursor:pointer; + display:inline-block; + font-size:13px; + line-height:20px; + padding:3px 15px; + white-space:nowrap +} +.loading-placeholder-text{ + font-size:14px; + line-height:26px +} +.payment-instructions{ + color:#555; + float:left; + font-size:14px; + line-height:28px; + max-width:470px +} +.reg-st5-info-icon{ + background-image:url(../imagery/mega-register-big-sprite.c4d9847b9909de00.png); + background-position:1px -1631px; + background-repeat:no-repeat; + height:32px; + margin:30px auto 20px; + width:32px +} +.payment-section .subscription-instructions{ + background-color:#fff; + border:1px solid #eee; + border-image:initial; + border-radius:4px; + box-sizing:border-box; + color:#888; + cursor:pointer; + display:block; + font-size:13px; + line-height:1.5; + margin:12px 0 0; + padding:8px; + text-align:center; + transition:all .2s ease-in-out 0s +} +.redeem-promo-page .mega-input.title-ontop input{ + text-transform:uppercase +} +.redeem-promo-page .mega-input.title-ontop{ + margin-bottom:24px; + width:320px +} +body.mobile .redeem-promo-page .mega-input.title-ontop{ + width:100% +} +.redeem-promo-page .onboard-image{ + background-image:url(../imagery/mega-onboarding_download.5f498b639c2940c5.png) +} +.redeem-promo-page .sprite-fm-illustration.img-dialog-voucher{ + --width:140px; + height:140px; + margin:0 auto 10px; + width:140px +} +.redeem-promo-page .bottom-page.top-description{ + margin:0 auto; + padding:24px 0 40px +} +.bottom-page.redeem-promo-container,.main-pad-block.redeem-promo-page{ + height:100% +} +.main-pad-block.redeem-promo-page{ + background-color:#fafafa +} +.redeem-promo-page .white-block{ + background-color:#fff; + border:1px solid #eee; + border-radius:12px; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + box-sizing:border-box; + margin:0 auto; + max-width:620px; + padding:48px 24px +} +.redeem-promo-page .bottom-page.top-dark-info.medium{ + font-size:28px; + line-height:40px +} +.redeem-promo-page .button-block .mega-button.positive{ + min-width:180px +} +.redeem-promo-page .button-block{ + display:block +} +.dialog-input-title-ontop.correctinput .title{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity:1; + -khtml-opacity:1; + opacity:1; + top:0; + visibility:visible +} +.dialog-input-title-ontop.active .title,.dialog-input-title-ontop.birth .title,.dialog-input-title-ontop.underline-dropdown-input .title,.dialog-input-title-ontop.valued .title{ + color:#aaa; + top:0 +} +.dialog-input-title-ontop:not(.birth).active input::placeholder{ + opacity:0 +} +@media only screen and (-o-min-device-pixel-ratio:3/2),only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){ +.pricing-page.slider .ui-slider-handle,.pricing-sprite,i.pricing-sprite{ + background-image:url(../imagery/mega-pricing-sprite-2x.c4ba5917c39e38e1.png); + background-size:373px auto +} +.redeem-promo-page .onboard-image{ + background-image:url(../imagery/mega-onboarding_download-2x.1553f22a00a7dcd4.png); + background-size:600px auto +} +} +@media only screen and (max-width:1194px){ +.pricing-section .pricing-page.plans-block{ + border:0; + max-width:1194px; + min-width:892px; + padding:0 30px +} +.pricing-section .plans-row .pricing-page.plan{ + border-color:#d5d5d5; + border-radius:4px 4px 0 0; + border-width:1px; + width:calc(25% - 5px) +} +.pricing-section .plans-row .pricing-page.plan.details{ + border-radius:0 0 4px 4px; + border-width:0 1px 1px +} +.pricing-section .plans-row .pricing-page.plan.current,.pricing-section .plans-row .pricing-page.plan:first-child{ + border-color:#d5d5d5 +} +.local-currency .plans-row .pricing-page.plan-price{ + font-size:27px +} +} +@media only screen and (max-width:1114px){ +.payment-page.plan-wrap{ + width:220px +} +.payment-page.info-block{ + margin:0 240px 0 50px +} +} +@media only screen and (max-width:890px){ +.mobile-slider-controls.default-controls:not(.hidden){ + display:inline-block +} +.business-quotes-controls{ + display:none +} +.business-q-wrap .q-logo{ + cursor:default; + display:block; + margin:40px auto 0 +} +.pricing-page.top-header{ + font-size:40px; + letter-spacing:-.33px; + line-height:63px; + max-width:681px; + padding-bottom:17px +} +.pricing-page.medium-txt{ + color:#666; + font-size:16px; + line-height:24px +} +.pricing-page.local-currency-tip{ + font-size:12px +} +.pricing-page.plan-label{ + margin:-1px auto 3px +} +.pricing-page.plan-title{ + font-size:22px +} +.pricing-page.plan-info{ + font-size:13px; + line-height:19px; + padding:4px 10px 10px +} +.pricing-page.plan-price{ + font-size:30px; + line-height:32px +} +.local-currency .pricing-page.plan-price{ + font-size:20px; + line-height:22px +} +.pricing-page.plan-currency,.pricing-page.plan-data,.pricing-page.plan-period{ + font-size:12px +} +.pricing-page.plan-button{ + margin-bottom:20px +} +.pricing-page.plan-feature{ + font-size:13px; + padding:7px 32px 7px 14px +} +.pricing-page.plan .i-icon{ + right:14px +} +.pricing-page.plan-feature.text-body1{ + font-size:12px; + line-height:18px; + margin:3px auto; + padding:8px 38px 8px 16px +} +.pricing-page.plan-feature.text-body1 .text-h2{ + font-size:14px; + line-height:20px; + padding-bottom:2px +} +.business-calculator{ + font-size:12px; + line-height:18px +} +.business-plan-label span{ + font-size:12px; + height:30px; + line-height:30px +} +.business-calculator .header{ + padding:18px 18px 12px +} +.business-calculator .title{ + font-size:18px; + line-height:27px; + padding:8px 18px 24px +} +.business-slider.ui-slider .ui-slider-range,.business-slider.ui-slider.ui-widget{ + height:5px +} +.business-slider .handle-wrap{ + -webkit-margin-end:18px; + margin-inline-end:18px +} +.business-slider .ui-slider-handle{ + background-position:-347px -774px; + height:20px; + top:-8px; + width:20px +} +.business-slider .ui-slider-handle span{ + font-size:16px; + line-height:24px; + top:-22px +} +.business-slider-label{ + font-size:14px; + line-height:20px; + padding:0 0 12px +} +.business-slider-values{ + font-size:12px; + line-height:16px; + padding:0 0 6px +} +.business-slider-values div{ + min-width:16px +} +.business-slider-values div.perc-50{ + display:flex; + justify-content:space-between; + width:calc(50% + 16px) +} +.business-calculator .handle-wrap{ + -webkit-margin-end:15px; + margin-inline-end:15px +} +.business-calculator .ui-slider-handle{ + background-position:-312px -742px; + background-size:373px auto; + height:24px; + top:-10px; + width:24px +} +.business-calculator .ui-slider-handle span{ + font-size:14px; + line-height:20px; + top:-20px +} +.business-calculator .business-slider.ui-slider.ui-widget{ + margin:20px 18px 12px +} +.business-calculator .business-slider-values{ + font-size:12px; + line-height:16px; + padding:0 18px 18px +} +.business-calculator .business-slider-values div.perc-50{ + width:calc(50% + 24px) +} +.business-calculator .footer{ + padding:18px +} +.business-calculator .footer span{ + font-size:20px; + line-height:24px +} +.business-quote .title{ + font-size:18px; + line-height:27px; + padding-top:20px; + white-space:normal +} +.business-quote-logo.cloudwards{ + background-position:center -931px +} +.business-quote-logo.pro-privacy{ + background-position:center -1051px +} +.business-quote-logo.tech-advisor{ + background-position:center -1171px +} +.business-quote-logo.tech-radar{ + background-position:center -1286px +} +.business-quote-logo.toms-guide{ + background-position:center -1409px +} +.pricing-page.slider-wrap{ + margin:70px 70px 143px +} +.pricing-page.slider .ui-slider-range,.pricing-page.slider.ui-widget-content{ + height:10px +} +.pricing-page.slider-dot{ + height:28px; + margin:-10px 0 0 -14px; + width:28px +} +.pricing-page.slider .ui-slider-handle{ + background-position:-55px -474px; + background-size:245px auto; + height:43px; + margin:0 0 0 -22px; + top:-17px; + width:43px +} +.en .pricing-page.slider-dot .label,.pricing-page.slider-dot .label{ + font-size:16px; + line-height:28px; + top:52px +} +.pricing-page.slider-dot span{ + font-size:18px +} +.pricing-section .page-icon.x48{ + height:36px; + width:36px +} +.pricing-section .page-icon.x48.mega{ + background-position:-4px -263px; + background-size:150px auto +} +.pricing-section .page-icon.x48.dropbox{ + background-position:-73px -336px; + background-size:190px auto +} +.pricing-section .page-icon.x48.gdrive{ + background-position:-129px -336px; + background-size:190px auto +} +.pricing-page.compare-cell{ + padding:14px 5px +} +.pricing-page.compare-title{ + font-size:13px; + line-height:16px; + padding:11px 0 0 +} +.pricing-page.compare-storage{ + font-size:22px; + line-height:28px; + padding:13px 0 14px +} +.pricing-page.compare-price{ + font-size:34px; + height:52px; + line-height:52px +} +.en .pricing-page.compare-price{ + font-size:44px +} +.pricing-page.compare-price .currency{ + font-size:23px +} +.pricing-page.compare-price .star{ + font-size:7px; + margin:-10px 0 0 +} +.pricing-page.compare-price .star.green,.pricing-page .star.green{ + font-size:7px +} +.pricing-page.compare-period{ + font-size:14px; + height:22px; + line-height:22px +} +.pricing-page.compare-info,.pricing-page.compare-ns{ + font-size:11px; + line-height:13px +} +.pricing-page.compare-info{ + padding:17px 0 0 +} +.pricing-page.big-red-cross{ + background-position:-10px -530px; + background-size:270px auto; + height:32px; + margin:16px auto 30px; + width:32px +} +.pricing-page.compare-tip{ + padding:19px 0 0 +} +.slide1 .pricing-page.compare-info{ + padding-top:40px +} +.pricing-page.solution-name{ + font-size:22px +} +.pricing-page.solution-txt{ + font-size:14px +} +.pricing-section .bottom-page.small-info.top-pad-24{ + padding:18px 0 0 +} +.pricing-page.solutions-wrap{ + border-spacing:18px; + margin:64px 22px -18px; + width:auto +} +.pricing-page.roles-wrap{ + padding:0 0 48px +} +.pricing-page.roles-wrap .col-4{ + padding:96px 0 0 +} +.pricing-page.role-name{ + font-size:20px; + line-height:24px; + padding:22px 0 0 +} +.payment-section .button.purchase{ + display:inline-block; + float:none; + margin:40px 0 20px +} +.payment-instructions{ + max-width:none +} +.payment-page.info-block .payment-method{ + width:50% +} +.third-section .payment-page.info-block{ + float:none +} +.payment-page.plan-wrap{ + float:none; + margin:0 auto 60px; + max-width:300px; + width:auto +} +.payment-page.info-block{ + margin:0 0 0 50px +} +} +@media only screen and (max-width:783px){ +.bottom-page.horizontal-centered-bl.pricing-pad{ + padding:0 40px +} +.pricing-page.top-header{ + font-size:36px; + line-height:48px; + padding-top:70px +} +.bottom-page.plans-bottom-pad.mid-wide{ + padding-bottom:88px +} +.br .pricing-page.plan-button,.fr .pricing-page.plan-button,.ru .pricing-page.plan-button{ + font-size:14px +} +.business-plan-wrapper{ + display:block; + padding-bottom:94px +} +.business-plan-wrapper .pricing-page.plan{ + border:1px solid #d5d5d5 +} +.business-plan-column{ + display:block; + margin:0 auto; + max-width:475px; + width:auto +} +.business-calculator{ + margin-top:52px +} +.pricing-page.compare-cell{ + border:1px solid #dedede; + display:block; + margin:16px auto 0; + max-width:360px; + width:auto +} +.pricing-page.solutions-wrap{ + display:block; + margin:40px 0 0 +} +.pricing-page.solution-row{ + display:block +} +.pricing-page.solution{ + display:block; + height:auto; + margin:16px auto 0; + max-width:360px; + width:auto +} +.pricing-page.solution-name{ + font-size:20px; + line-height:24px; + min-height:0 +} +.pricing-page.solution-name.small{ + margin:20px auto; + padding:0; + transform:none +} +.fr .pricing-page.slider-dot .label,.ru .pricing-page.slider-dot .label{ + margin-left:-50px; + min-width:100px; + width:100px +} +.br .pricing-page.slider-dot .label,.es .pricing-page.slider-dot .label{ + font-size:12px +} +.pricing-page.roles-wrap .col-4{ + padding:54px 0 0 +} +.pricing-button.mega-button{ + margin:40px 0 0 +} +.pricing-page.white-info{ + font-size:14px +} +} +@media only screen and (max-width:565px){ +.pricing-page.top-header{ + font-size:26px; + line-height:38px; + padding-top:60px +} +.pricing-section .pricing-page.plans-block{ + min-width:872px; + padding:0 14px +} +.pricing-page.plans-switcher{ + border-radius:18px; + margin:45px 0 52px +} +.pricing-page.plans-switcher .button{ + border-radius:18px; + font-size:14px; + height:36px; + line-height:36px +} +.cn .pricing-page.save-percs,.pricing-page.save-percs{ + border-radius:9px; + font-size:10px; + height:18px; + left:25px; + line-height:18px; + padding:0 8px; + top:-16px +} +.pricing-page .save-green-arrow{ + height:0; + top:-10px; + width:24px +} +.pricing-page.radio-buttons:not(.hidden){ + display:inline-block; + float:none +} +.pricing-page label.radio-txt{ + font-size:13px +} +.pricing-page.plans-wrap{ + padding:40px 0 0 +} +.business-plan-wrapper{ + padding-left:24px; + padding-right:24px +} +.pricing-page.slider-wrap{ + margin:45px 35px 95px +} +.pricing-page.slider-dot.active{ + box-shadow:0 0 0 2px #fff +} +.en .pricing-page.slider-dot .label,.pricing-page.slider-dot .label{ + font-size:14px; + line-height:26px; + top:24px +} +.pricing-page.slider-dot span{ + font-size:14px +} +.pricing-page.slider .ui-slider-range,.pricing-page.slider.ui-widget-content{ + height:6px +} +.pricing-page.slider-dot{ + height:14px; + margin:-4px 0 0 -7px; + width:14px +} +.pricing-page.slider .ui-slider-handle{ + background-position:-29px -248px; + background-size:128px auto; + height:22px; + margin:0 0 0 -11px; + top:-8px; + width:22px +} +.pricing-page.solutions-wrap{ + display:block; + margin:20px 0 0 +} +.payment-page.info-block .payment-duration,.payment-page.info-block .payment-method{ + width:100% +} +} +@media only screen and (max-width:420px){ +.pricing-page.top-header{ + font-size:20px; + line-height:28px +} +.pricing-page.medium-txt{ + color:#3737337 +} +.pricing-page.medium-txt,.pricing-page.top-small-txt{ + font-size:14px; + line-height:24px +} +.bottom-page.horizontal-centered-bl.pricing-pad{ + padding:0 24px +} +.pricing-section .bottom-page.small-info.top-pad-24{ + font-size:14px; + line-height:24px +} +.pricing-page label.radio-txt{ + font-size:13px +} +.br .pricing-page.slider-dot .label,.es .pricing-page.slider-dot .label{ + font-size:10px +} +.ru .pricing-page.slider-dot .label{ + font-size:10px; + margin-left:-40px; + min-width:80px; + width:80px +} +.br .pricing-page.slider-wrap,.es .pricing-page.slider-wrap,.ru .pricing-page.slider-wrap{ + margin:45px 20px 95px +} +.es .pricing-page label.radio-txt{ + font-size:10px; + padding-right:10px +} +.pricing-page.solutions-wrap{ + display:block; + margin-top:20px +} +} +@media only screen and (max-width:380px){ +.br .pricing-page label.radio-txt,.fr .pricing-page label.radio-txt,.ru .pricing-page label.radio-txt{ + font-size:10px; + padding-right:10px +} +.es .pricing-page div.radioOff,.es .pricing-page div.radioOn{ + margin-right:5px +} +} + +@font-face{ + font-family:PoppinsSemiBold; + src:url(../fonts/Poppins-SemiBold.woff2?v=550ec57aa7a85781) format("woff2"), url(../fonts/Poppins-SemiBold.woff?v=6e69c018c7f77dd7) format("woff") +} +@font-face{ + font-family:NotoSansBold; + src:url(../fonts/NotoSans-Bold.woff2?v=446b8b18f0fb46ff) format("woff2"), url(../fonts/NotoSans-Bold.woff?v=a7cf29b581fbcda8) format("woff") +} +@font-face{ + font-family:NotoSansReg; + src:url(../fonts/NotoSans-Regular.woff2?v=9e3cc35d8d10ce41) format("woff2"), url(../fonts/NotoSans-Regular.woff?v=428ee08945fea1fd) format("woff") +} +@font-face{ + font-family:NotoSansSemiBold; + src:url(../fonts/NotoSans-SemiBold.woff2?v=8506d38342a9fa56) format("woff2"), url(../fonts/NotoSans-SemiBold.woff?v=79416cadce9de996) format("woff") +} +.bottom-page.pricing-pg{ + --left-padding:40px; + --right-padding:40px; + --top-padding:64px; + --bottom-padding:64px; + --font-poppins-sb-pricing:"PoppinsSemiBold", sans-serif; + --font-noto-b-pricing:"NotoSansBold", sans-serif; + --font-noto-r-pricing:"NotoSansReg", sans-serif; + --font-noto-sb-pricing:"NotoSansSemiBold", sans-serif; + --font-size-h2:48px/56px; + --font-size-h3:40px/48px; + --font-size-h5:24px/28px; + --font-size-h6:20px/24px; + --font-top-ref:12px/28px; + --font-top-arstrisk:28px/36px; + --font-quotation:32px/44px; + --font-copy-medium:16px/24px; + --text-h2-pricing:normal 400 var(--font-size-h2) var(--font-poppins-sb-pricing); + --text-h3-pricing:normal 400 var(--font-size-h3) var(--font-poppins-sb-pricing); + --text-h5-pricing:normal 400 var(--font-size-h5) var(--font-poppins-sb-pricing); + --text-top-reference:normal 400 var(--font-top-arstrisk) var(--font-poppins-sb-pricing); + --text-top-reference2:normal 400 var(--font-top-ref) var(--font-poppins-sb-pricing); + --text-h6-pricing:normal 400 var(--font-size-h6) var(--font-noto-b-pricing); + --text-copy-secondary-pricing:normal 400 14px/20px var(--font-noto-r-pricing); + --text-copy-medium-pricing:normal 400 var(--font-copy-medium) var(--font-noto-r-pricing); + --text-copy-large-pricing:normal 400 18px/28px var(--font-noto-r-pricing); + --text-quotation-pricing:normal 400 var(--font-quotation) var(--font-noto-r-pricing); + --text-copy-medium-bold-pricing:normal 400 var(--font-copy-medium) var(--font-noto-b-pricing); + --text-caption-regular-pricing:normal 400 14px/20px var(--font-noto-r-pricing); + --text-caption-bold-pricing:normal 400 14px/20px var(--font-noto-sb-pricing); + --text-label-xl-pricing:normal 400 18px/24px var(--font-noto-sb-pricing); + --text-button-pricing:normal 400 var(--font-copy-medium) var(--font-noto-sb-pricing); + --color-heading:#04101e; + --color-bg-surface-1:#f9f9fb; + --color-bg-surface-2:#f5f5f6; + --color-primary-red-500:#dd1405; + --color-primary-red-600:#b72c1c; + --color-copy-secondary:#6e6e6e; + --color-grey-150:#e2e3e3; + --color-secondary-cobalt-900:#00174c; + --color-secondary-cobalt-600:#003c9c; + --color-grey-50:#f8f8f9; + --color-grey-200:#d7d8d9; + --color-primary:#333; + --color-bg:#fff; + --color-disabled:#d5d5d5; + --color-copy-primary:#e5e5e5 +} +.bottom-page.pricing-pg .bottom-page.full-block{ + color:var(--color-heading); + margin:auto; + max-width:1320px; + overflow:unset +} +.bottom-page.pricing-pg .bottom-page.full-block *{ + user-select:text; + -webkit-user-select:text +} +.pricing-pg .pricing-pg.hero-section{ + padding-top:118px +} +.mobile .pricing-pg .pricing-pg.hero-section{ + padding-top:0 +} +.pricing-pg .pricing-pg.hero-section .hero-section-txt{ + font:var(--text-h2-pricing); + padding:var(--top-padding) var(--right-padding) var(--bottom-padding) var(--left-padding) +} +.pricing-pg .pricing-pg.tabs-module{ + display:flex; + padding:0 var(--right-padding) 0 var(--left-padding) +} +.pricing-pg .pricing-pg.tabs-module .tabs-module-block{ + gap:8px; + align-items:center; + background-color:var(--color-bg-surface-2); + border-top:unset; + cursor:pointer; + display:flex; + flex-direction:column; + padding:24px 0; + text-align:center; + width:302px +} +.pricing-pg .pricing-pg.tabs-module .tabs-module-block.selected{ + background-color:unset; + border-top:4px solid var(--color-primary-red-500) +} +.pricing-pg .pricing-pg.tabs-module .tabs-block-title{ + font:var(--text-h6-pricing) +} +.pricing-pg .pricing-pg.tabs-module .tabs-block-sub-title{ + color:var(--color-copy-secondary); + font:var(--text-copy-secondary-pricing) +} +.pricing-pg .pricing-pg.period-note-container,.pricing-pg .pricing-pg.pick-period-module{ + display:flex; + justify-content:flex-end; + padding:0 var(--right-padding) 0 var(--left-padding) +} +.pricing-pg .pricing-pg.pick-period-module .pricing-radio-group{ + gap:16px; + display:flex +} +.pricing-pg .pricing-radio-group .pricing-radio-option{ + gap:8px; + align-items:center; + cursor:pointer; + display:flex; + font:var(--text-copy-medium-pricing) +} +.pricing-pg .pricing-radio-group .pricing-radio-option .pricing-radio-btn{ + border:1px solid var(--color-heading); + border-radius:10px; + box-sizing:border-box; + height:20px; + width:20px +} +.pricing-pg .pricing-radio-group .pricing-radio-option.selected .pricing-radio-btn{ + border-width:5px +} +.pricing-pg .pricing-pg.period-note-container .period-note-txt{ + background:#f5f9ff; + border-radius:27px; + margin-top:8px; + padding:10px +} +.pricing-pg .pricing-pg.plans-cards-container{ + display:grid; + grid-template-columns:repeat(auto-fit, minmax(160px, 1fr)); + padding:var(--right-padding); + padding-bottom:32px +} +.pricing-pg .pricing-pg.plans-cards-container .pricing-plan-card{ + border:1px solid var(--color-grey-150); + padding-bottom:32px +} +.pricing-pg .pricing-pg.plans-cards-container .pricing-plan-card.disabled{ + opacity:unset +} +.pricing-pg .pricing-pg.plans-cards-container .pricing-plan-card>*{ + padding-left:24px; + padding-right:24px +} +.pricing-plan-card .pricing-plan-recommend{ + align-items:flex-start; + background:var(--color-secondary-cobalt-900); + color:var(--color-grey-50); + display:flex; + font:var(--text-caption-bold-pricing); + justify-content:center; + padding:4px; + visibility:hidden; + white-space:nowrap +} +.pricing-plan-card .pricing-plan-title{ + font:var(--text-h5-pricing); + margin-top:24px +} +.pricing-plan-card .pricing-plan-only{ + color:var(--color-copy-secondary); + font:var(--text-caption-regular-pricing); + margin-top:32px +} +.pricing-plan-card .pricing-plan-price{ + font:var(--text-h2-pricing); + margin-top:8px; + white-space:nowrap +} +.pricing-plan-card .pricing-plan-price-unit{ + color:var(--color-copy-secondary); + font:var(--text-caption-regular-pricing); + margin-top:8px +} +.pricing-plan-card .pricing-plan-storage,.pricing-plan-card .pricing-plan-trasfer{ + color:var(--color-primary); + font:var(--text-copy-medium-bold-pricing); + white-space:nowrap +} +.pricing-plan-card .pricing-plan-storage{ + margin-top:32px +} +.pricing-plan-card .pricing-plan-trasfer{ + margin-bottom:92px; + margin-top:8px; + position:relative +} +.pricing-plan-card .pricing-plan-more{ + -webkit-padding-end:24px; + color:var(--color-copy-secondary); + font:var(--text-copy-secondary-pricing); + margin-top:8px; + padding-inline-end:24px; + position:absolute; + white-space:normal +} +.pricing-plan-card .pricing-plan-more span{ + color:var(--color-secondary-cobalt-600); + cursor:pointer; + text-decoration:underline +} +.pricing-plan-btn-container{ + display:flex +} +.pricing-plan-btn-container .pricing-plan-btn{ + align-items:center; + background-color:var(--color-bg); + border:2px solid var(--color-heading); + border-radius:8px; + box-sizing:border-box; + cursor:pointer; + display:flex; + font:var(--text-button-pricing); + justify-content:center; + padding:10px 24px +} +.disabled .pricing-plan-btn-container .pricing-plan-btn{ + cursor:default; + opacity:.2 +} +.pricing-plan-btn-container .pricing-plan-btn:hover{ + background-color:var(--color-bg-surface-1) +} +.pricing-plan-card.popular .pricing-plan-recommend{ + visibility:unset +} +.pricing-pg .pricing-pg.plans-cards-container .pricing-plan-card.popular{ + border-color:var(--color-secondary-cobalt-900) +} +.pricing-flexi-block-card-contianer .pricing-plan-card .pricing-plan-btn,.pricing-plan-card.popular .pricing-plan-btn{ + background-color:var(--color-primary-red-500); + border:unset; + color:var(--color-grey-50); + padding:12px 24px +} +.pricing-flexi-block-card-contianer .pricing-plan-card .pricing-plan-btn:hover,.pricing-plan-card.popular .pricing-plan-btn:hover{ + background-color:var(--color-primary-red-600) +} +.pricing-pg .pricing-pg.pricing-banner-container{ + padding:0 var(--right-padding) 32px var(--left-padding) +} +.pricing-pg .pricing-pg.pricing-banner-container .pricing-get-free-banner{ + background-color:var(--color-bg-surface-1); + border:1px solid var(--color-grey-150); + display:flex; + flex-direction:row; + justify-content:space-between; + padding:40px +} +.pricing-get-free-banner .pricing-get-free-banner-right{ + align-items:flex-end; + display:flex; + flex-direction:column +} +.pricing-get-free-banner .pricing-get-free-title{ + font:var(--text-h5-pricing) +} +.pricing-get-free-banner .pricing-get-free-storage,.pricing-get-free-banner .pricing-get-free-transfer{ + gap:8px; + align-items:center; + color:var(--color-primary); + display:flex; + font:var(--text-copy-large-pricing); + outline:unset +} +.pricing-get-free-banner .pricing-get-free-storage{ + padding-top:32px +} +i.grey-small-check-tick{ + background-position:50%; + background-repeat:no-repeat; + height:24px; + width:24px +} +i.black-small-check-tick,i.grey-small-check-tick{ + background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxNiAxMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNS43MDcxIDAuMjkyODkzQzE2LjA5NzYgMC42ODM0MTcgMTYuMDk3NiAxLjMxNjU4IDE1LjcwNzEgMS43MDcxMUw1LjcwNzExIDExLjcwNzFDNS4zMTY1OCAxMi4wOTc2IDQuNjgzNDIgMTIuMDk3NiA0LjI5Mjg5IDExLjcwNzFMMC4yOTI4OTMgNy43MDcxMUMtMC4wOTc2MzExIDcuMzE2NTggLTAuMDk3NjMxMSA2LjY4MzQyIDAuMjkyODkzIDYuMjkyODlDMC42ODM0MTcgNS45MDIzNyAxLjMxNjU4IDUuOTAyMzcgMS43MDcxMSA2LjI5Mjg5TDUgOS41ODU3OUwxNC4yOTI5IDAuMjkyODkzQzE0LjY4MzQgLTAuMDk3NjMxMSAxNS4zMTY2IC0wLjA5NzYzMTEgMTUuNzA3MSAwLjI5Mjg5M1oiIGZpbGw9IiMwNDEwMUUiLz4KPC9zdmc+Cg==") +} +i.black-small-cross-tick{ + background-image:url(../imagery/mega-black-small-cross-tick.81b09f4f5bf79985.svg) +} +i.minus-icon{ + background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDEyQzQgMTEuNDQ3NyA0LjQ0NzcyIDExIDUgMTFIMTlDMTkuNTUyMyAxMSAyMCAxMS40NDc3IDIwIDEyQzIwIDEyLjU1MjMgMTkuNTUyMyAxMyAxOSAxM0g1QzQuNDQ3NzIgMTMgNCAxMi41NTIzIDQgMTJaIiBmaWxsPSIjMDQxMDFFIi8+Cjwvc3ZnPgo="); + background-position:50%; + background-repeat:no-repeat; + height:24px; + width:24px +} +.pricing-get-free-banner a.pricing-get-free-transfer-txt{ + color:var(--color-secondary-cobalt-600); + text-decoration:underline +} +.pricing-get-free-banner .pricing-get-free-banner-price{ + gap:8px; + align-items:baseline; + display:flex; + margin-bottom:12px +} +.pricing-get-free-banner-price .pricing-get-free-banner-price-val{ + font:var(--text-h2-pricing) +} +.pricing-get-free-banner-price .pricing-get-free-banner-note{ + color:var(--color-copy-secondary); + font:var(--text-caption-regular-pricing) +} +.pricing-pg .pricing-estimation-note-container{ + color:var(--color-copy-secondary); + font:var(--text-copy-secondary-pricing); + padding:0 var(--right-padding) 80px var(--left-padding) +} +.pricing-pg .pricing-estimation-note-container.eu{ + display:none +} +.pricing-pg .pricing-plans-compare-table-container{ + padding:0 var(--right-padding) 0 var(--left-padding) +} +.pricing-plans-compare-table-container .pricing-plans-compare-table-show{ + gap:12px; + cursor:pointer; + display:flex; + font:var(--text-label-xl-pricing); + justify-content:center; + margin:auto; + padding-bottom:40px; + padding-top:48px; + text-decoration:underline; + width:fit-content +} +i.chevron-down-icon{ + background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iOCIgdmlld0JveD0iMCAwIDE0IDgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMC4yOTI4OTMgMC4yOTI4OTNDMC42ODM0MTcgLTAuMDk3NjMxMSAxLjMxNjU4IC0wLjA5NzYzMTEgMS43MDcxMSAwLjI5Mjg5M0w3IDUuNTg1NzlMMTIuMjkyOSAwLjI5Mjg5M0MxMi42ODM0IC0wLjA5NzYzMTEgMTMuMzE2NiAtMC4wOTc2MzExIDEzLjcwNzEgMC4yOTI4OTNDMTQuMDk3NiAwLjY4MzQxNyAxNC4wOTc2IDEuMzE2NTggMTMuNzA3MSAxLjcwNzExTDcuNzA3MTEgNy43MDcxMUM3LjMxNjU4IDguMDk3NjMgNi42ODM0MiA4LjA5NzYzIDYuMjkyODkgNy43MDcxMUwwLjI5Mjg5MyAxLjcwNzExQy0wLjA5NzYzMTEgMS4zMTY1OCAtMC4wOTc2MzExIDAuNjgzNDE3IDAuMjkyODkzIDAuMjkyODkzWiIgZmlsbD0iIzA0MTAxRSIvPgo8L3N2Zz4K"); + background-position:50%; + background-repeat:no-repeat; + height:24px; + width:24px +} +i.chevron-down-icon.inv{ + transform:scaleY(-1) +} +.pricing-pg .pricing-why-store-with-us-container{ + padding:0 var(--right-padding) 0 var(--left-padding) +} +.pricing-why-store-with-us-container .pricing-why-store-with-us{ + padding-bottom:80px; + padding-top:80px +} +.pricing-why-store-with-us .pricing-why-store-with-us-title{ + display:flex; + font:var(--text-h2-pricing); + justify-content:center; + margin-bottom:48px; + text-align:center +} +.pricing-why-store-with-us .pricing-why-store-with-us-blocks-container{ + gap:32px; + display:grid; + grid-template-columns:1fr 1fr 1fr +} +.pricing-why-store-with-us .pricing-why-store-with-us-block i{ + background-position:50%; + background-repeat:no-repeat; + height:48px; + width:48px +} +i.cloud-with-lock-icon{ + background-image:url(../imagery/mega-cloud-with-lock-icon.6ea73db6dbe83dfe.svg) +} +i.shield-mega-icon{ + background-image:url(../imagery/mega-shield-mega-icon.1f511a13863eb81e.svg) +} +i.pc-and-mobile-icon{ + background-image:url(../imagery/mega-pc-and-mobile-icon.26b11f77bd58211d.svg) +} +.pricing-compare-cards-container .pricing-compare-cards i{ + background-position:50%; + background-repeat:no-repeat; + background-size:contain; + height:64px; + width:64px +} +i.mega-icon{ + background-image:url(../imagery/mega-mega-icon.fd67a78ad709d66.svg) +} +i.googledrive-icon{ + background-image:url(../imagery/mega-googledrive-icon.8d62b51fa068ca24.svg) +} +i.dropbox-icon{ + background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTMyLjAxODcgMTUuMDk4OEwxNi4wMDk0IDI1LjE5NzZMMzIuMDE4NyAzNS4yOTY0TDE2LjAwOTQgNDUuMzk1M0wwIDM1LjIxMjNMMTYuMDA5NCAyNS4xMTM1TDAgMTUuMDk4OEwxNi4wMDk0IDVMMzIuMDE4NyAxNS4wOTg4Wk0xNS45MjQyIDQ4LjU5MzJMMzEuOTMzNSAzOC40OTQ0TDQ3Ljk0MjkgNDguNTkzMkwzMS45MzM1IDU4LjY5MkwxNS45MjQyIDQ4LjU5MzJaTTMyLjAxODcgMzUuMjEyM0w0OC4wMjgxIDI1LjExMzVMMzIuMDE4NyAxNS4wOTg4TDQ3Ljk0MjkgNUw2My45NTIyIDE1LjA5ODhMNDcuOTQyOSAyNS4xOTc2TDYzLjk1MjIgMzUuMjk2NEw0Ny45NDI5IDQ1LjM5NTNMMzIuMDE4NyAzNS4yMTIzWiIgZmlsbD0iIzAwNjFGRiIvPgo8L3N2Zz4K") +} +.pricing-why-store-with-us .pricing-why-store-with-us-block{ + align-items:center; + display:flex; + flex-direction:column +} +.pricing-why-store-with-us .pricing-why-store-with-us-block-txt{ + text-align:center +} +.pricing-why-store-with-us .pricing-why-store-with-us-block-header{ + font:var(--text-h6-pricing); + margin-top:24px; + text-align:center +} +.pricing-why-store-with-us .pricing-why-store-with-us-block-txt{ + color:var(--color-primary); + font:var(--text-copy-medium-pricing); + margin-top:12px +} +.pricing-pg .pricing-compare-full-container{ + background-color:var(--color-bg-surface-1); + left:50%; + margin-left:-50vw; + margin-right:-50vw; + max-width:unset; + position:relative; + right:50%; + width:100vw +} +.pricing-pg .pricing-compare-container{ + box-sizing:border-box; + margin:auto; + max-width:1320px; + padding:64px var(--right-padding) 80px var(--left-padding) +} +.pricing-compare-container .pricing-compare-title-slider-container{ + display:grid; + grid-template-columns:repeat(12,1fr) +} +.pricing-compare-container .pricing-compare-title{ + font:var(--text-h2-pricing); + grid-column:4 / span 6; + grid-row:1; + text-align:center +} +.pricing-pg.pricing-compare-container .pricing-compare-cards-container{ + gap:32px; + display:grid; + grid-template-columns:1fr 1fr 1fr; + margin-top:64px +} +.pricing-compare-cards-container .pricing-compare-cards{ + background-color:var(--color-bg); + border:1px solid var(--color-grey-150); + box-sizing:border-box; + display:flex; + flex-direction:column +} +.pricing-compare-cards .box{ + padding:32px +} +.pricing-compare-cards .pricing-compare-cards-feature{ + background-color:var(--color-grey-50); + display:flex; + padding:16px 32px +} +.pricing-compare-cards .pricing-compare-cards-feature span{ + font:var(--text-copy-medium-bold-pricing) +} +.pricing-compare-cards .pricing-compare-cards-feature i{ + -webkit-margin-end:8px; + background-size:auto; + display:inline-block; + height:24px; + margin-inline-end:8px; + vertical-align:top; + width:24px +} +.pricing-compare-cards .pricing-compare-cards-title{ + font:var(--text-h5-pricing); + margin-top:24px +} +.pricing-compare-cards .pricing-compare-cards-rate{ + font:var(--text-h2-pricing); + margin-top:32px +} +.pricing-compare-cards .pricing-compare-cards-rate.na{ + background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNTYiIHZpZXdCb3g9IjAgMCA1NiA1NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI3Ljk5OTggNTEuMzMzN0M0MC44ODY1IDUxLjMzMzcgNTEuMzMzMiA0MC44ODcgNTEuMzMzMiAyOC4wMDAzQzUxLjMzMzIgMTUuMTEzNyA0MC44ODY1IDQuNjY2OTkgMjcuOTk5OCA0LjY2Njk5QzE1LjExMzIgNC42NjY5OSA0LjY2NjUgMTUuMTEzNyA0LjY2NjUgMjguMDAwM0M0LjY2NjUgNDAuODg3IDE1LjExMzIgNTEuMzMzNyAyNy45OTk4IDUxLjMzMzdaIiBzdHJva2U9IiNENUQ1RDUiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMS41MDM0IDExLjUwMjlMNDQuNDk2NyA0NC40OTYzIiBzdHJva2U9IiNENUQ1RDUiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo="); + background-position:50%; + background-repeat:no-repeat; + height:56px; + width:56px +} +.pricing-compare-cards .pricing-compare-cards-rate.na span,.pricing-compare-cards .pricing-compare-cards-rate.na sup{ + display:none +} +.pricing-compare-cards .pricing-compare-cards-rate span.ars,.pricing-flexi-block-estimator-total .pricing-flexi-block-estimator-total-nb span.ars,.pricing-plan-card .pricing-plan-price span.ars{ + color:var(--color-primary); + font:var(--text-top-reference); + vertical-align:top +} +.pricing-compare-cards .pricing-compare-cards-rate sup{ + color:var(--color-primary); + font:var(--text-top-reference2); + vertical-align:top +} +.pricing-compare-cards .pricing-compare-cards-period{ + color:var(--color-copy-secondary); + font:var(--text-caption-regular-pricing); + margin-top:8px +} +.pricing-compare-cards .pricing-compare-cards-note{ + color:var(--color-copy-secondary); + font:var(--text-caption-regular-pricing); + padding:24px 32px 32px +} +.pricing-pg.pricing-compare-container .pricing-compare-references{ + margin-top:32px +} +.pricing-pg.pricing-social-container .pricing-social{ + padding:64px var(--right-padding) 104px var(--left-padding) +} +.pricing-social .pricing-social-title{ + display:flex; + font:var(--text-h2-pricing); + justify-content:center; + text-align:center +} +.pricing-social .pricing-social-refs-container{ + gap:32px; + display:flex; + justify-content:center; + margin-top:64px +} +.pricing-social-refs-container i.tech-advisor{ + background-position:center -1133px +} +.pricing-social-refs-container i.tech-advisor.active{ + background-position:center -1193px +} +.pricing-social-refs-container i.tech-radar{ + background-position:center -1256px +} +.pricing-social-refs-container i.tech-radar.active{ + background-position:center -1316px +} +.pricing-social-refs-container i.cloudwards{ + background-position:center -893px +} +.pricing-social-refs-container i.cloudwards.active{ + background-position:center -953px +} +.pricing-social-refs-container i.pro-privacy{ + background-position:center -1014px +} +.pricing-social-refs-container i.pro-privacy.active{ + background-position:center -1074px +} +.pricing-social-refs-container i.toms-guide{ + background-position:center -1376px +} +.pricing-social-refs-container i.toms-guide.active{ + background-position:center -1436px +} +.pricing-social-refs-container i{ + cursor:pointer; + height:40px; + opacity:.3; + width:164px +} +.pricing-social-refs-container i.active{ + opacity:unset +} +.pricing-social i.quote-icon{ + background-image:url(../imagery/mega-quote-icon.91f421a4dadc5cbd.svg); + height:48px; + width:48px +} +.pricing-social i.quote-icon,i.pricing-i-icon{ + background-position:50%; + background-repeat:no-repeat; + background-size:contain +} +i.pricing-i-icon{ + background-image:url(../imagery/mega-pricing-info-icon.2b2b5d0832b5b815.svg); + height:24px; + width:14px +} +.pricing-social .quote-icon-container{ + display:flex; + justify-content:center; + margin-top:24px +} +.pricing-social .pricing-social-quote-container{ + display:grid; + grid-template-columns:repeat(12,1fr) +} +.pricing-social-quote-container .pricing-social-quote{ + font:var(--text-quotation-pricing); + grid-column:3 / -3; + text-align:center +} +.quote-icon-container .end-quote-rectangle{ + background-color:var(--color-grey-200); + height:4px; + width:48px +} +.pricing-social .pricing-social-quote-name{ + color:var(--color-copy-secondary); + display:flex; + font:var(--text-copy-medium-pricing); + justify-content:center; + margin-top:16px +} +.pricing-pg .pricing-get-started-container{ + background-color:var(--color-secondary-cobalt-900); + left:50%; + margin-left:-50vw; + margin-right:-50vw; + max-width:unset; + position:relative; + right:50%; + width:100vw +} +.pricing-pg .pricing-get-started{ + box-sizing:border-box; + margin:auto; + max-width:1320px; + padding:var(--right-padding) +} +.pricing-get-started .pricing-get-started-txt{ + color:var(--color-bg); + font:var(--text-h3-pricing); + margin:var(--right-padding) 24px 0 24px +} +.pricing-get-started .pricing-get-started-subtxt{ + color:var(--color-copy-primary); + font:var(--text-copy-medium-pricing); + margin:20px 24px -24px +} +.pricing-get-started .pricing-plan-btn-container{ + margin:56px 24px var(--right-padding) 24px +} +.pricing-pg.pricing-plans-compare-table-container .pricing-plans-compare-table{ + display:grid; + grid-template-columns:repeat(5, 1fr) +} +.pricing-plans-compare-table .pricing-plans-compare-table-item{ + color:var(--color-primary); + font:var(--text-copy-medium-pricing); + grid-column:span 1; + padding:20px 16px +} +.pricing-plans-compare-table .pricing-plans-compare-table-item span{ + font:var(--text-copy-medium-bold-pricing) +} +.pricing-plans-compare-table .pricing-plans-compare-table-item.header{ + color:var(--color-heading); + font:var(--text-h5-pricing); + grid-column:1 / -1; + padding:48px 16px 24px +} +.pricing-plans-compare-table .pricing-plans-compare-table-item.light,.pricing-plans-compare-table .pricing-plans-compare-table-item.x-bold{ + color:var(--color-heading); + font:var(--text-h6-pricing); + padding:24px 16px +} +.pricing-plans-compare-table .pricing-plans-compare-table-item.light{ + color:var(--color-disabled) +} +.pricing-plans-compare-table .pricing-plans-compare-table-item.line{ + background-color:var(--color-bg); + border-bottom:1px solid var(--color-grey-150); + position:sticky; + top:118px +} +.mobile .pricing-plans-compare-table .pricing-plans-compare-table-item.line{ + top:0 +} +.pricing-plans-compare-table .pricing-plans-compare-table-item.rb{ + border-right:1px solid var(--color-grey-150) +} +.pricing-plans-compare-table .pricing-plans-compare-table-item.center{ + text-align:center +} +.pricing-plans-compare-table .pricing-plans-compare-table-item.bold{ + gap:10px; + display:flex; + font:var(--text-copy-medium-bold-pricing); + justify-content:space-between +} +.pricing-plans-compare-table .pricing-plans-compare-table-item.bg-gr{ + background-color:var(--color-grey-50) +} +.pricing-pg .pricing-pg.pricing-flexi-container{ + padding:64px var(--right-padding) 80px var(--left-padding) +} +.pricing-pg.pricing-flexi-container .pricing-flexi-title{ + display:flex; + font:var(--text-h2-pricing); + justify-content:center; + text-align:center +} +.pricing-pg.pricing-flexi-container .pricing-flexi-block-contianer{ + padding-top:64px +} +.pricing-flexi-block-card-contianer .pricing-pg.plans-cards-container{ + grid-column-gap:32px; + grid-template-columns:1fr 1fr 1fr; + padding:unset +} +.pricing-flexi-block-card-contianer .pricing-plan-card .pricing-plan-trasfer{ + color:var(--color-copy-secondary); + font:var(--text-caption-regular-pricing); + margin-bottom:76px; + white-space:unset +} +.pricing-flexi-block-card-contianer .pricing-plan-card .pricing-plan-storage{ + white-space:unset +} +.pricing-flexi-block-card-contianer .pricing-plan-card .pricing-plan-trasfer a.learn-more-flexi{ + color:var(--color-secondary-cobalt-600); + text-decoration:underline +} +.pricing-flexi-block-card-contianer .pricing-plan-card .pricing-plan-trasfer .ex-desc{ + margin-bottom:8px +} +.pricing-flexi-block-card-contianer .plans-cards-container .pricing-flexi-block-card-note,.pricing-flexi-block-card-contianer .plans-cards-container .pricing-flexi-block-card-note-s{ + color:var(--color-copy-secondary); + font:var(--text-caption-regular-pricing); + margin-top:24px +} +.pricing-flexi-block-card-contianer .plans-cards-container .pricing-flexi-block-card-note-s{ + display:none +} +.pricing-flexi-block-card-contianer .plans-cards-container .pricing-flexi-block-estimator-contianer{ + grid-column:span 2 +} +.pricing-flexi-block-estimator-contianer .pricing-flexi-block-estimator-contianer-box{ + border:solid var(--color-grey-150); + border-width:1px 1px 0 +} +.pricing-flexi-block-estimator-contianer .pricing-flexi-block-estimator{ + padding:40px +} +.pricing-flexi-block-estimator-contianer .pricing-flexi-block-estimator-title{ + color:var(--color-primary); + font:var(--text-copy-medium-bold-pricing) +} +.pricing-flexi-block-estimator-contianer .pricing-flexi-block-estimator-slider-contianer{ + margin-bottom:70px; + margin-top:24px +} +.pricing-flexi-block-estimator-slider-contianer .pricing-flexi-block-estimator-slider-headers-container{ + display:grid; + grid-template-columns:minmax(160px,1fr) repeat(5,1fr) +} +.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-header{ + grid-column:span 1 +} +.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-header-title,.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-mark{ + color:var(--color-copy-secondary); + font:var(--text-caption-regular-pricing) +} +.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-marks{ + display:grid; + grid-column:span 5; + grid-template-columns:repeat(9,1fr) +} +.pricing-flexi-block-estimator-slider-marks .pricing-flexi-block-estimator-slider-mark{ + grid-column:span 2; + text-align:end +} +.pricing-flexi-block-estimator-slider-marks .pricing-flexi-block-estimator-slider-mark.start{ + grid-column:span 3; + text-align:unset +} +.pricing-flexi-block-estimator-slider-marks input.pricing-flexi-slider{ + appearance:none; + background:linear-gradient(to right, var(--color-secondary-cobalt-900) 50%, var(--color-grey-150) 33.333% 100%); + grid-column:1 / -1; + height:4px; + outline:none +} +.pricing-flexi-block-estimator-slider-marks input.pricing-flexi-slider::-webkit-slider-thumb{ + -webkit-appearance:none; + background:#fff; + border:8px solid #00174c; + border-radius:50%; + box-sizing:border-box; + cursor:pointer; + height:28px; + width:28px +} +.pricing-flexi-block-estimator-slider-marks input.pricing-flexi-slider::-moz-range-thumb{ + -moz-appearance:none; + background:var(--color-bg); + border:8px solid var(--color-secondary-cobalt-900); + border-radius:50%; + box-sizing:border-box; + cursor:pointer; + height:28px; + width:28px +} +.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-input-container{ + display:flex; + margin-top:8px +} +.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-input-box{ + background-color:var(--color-bg); + border:1px solid var(--color-grey-200); + border-radius:8px +} +.pricing-flexi-block-estimator-slider-headers-container input.pricing-flexi-block-estimator-slider-input{ + -webkit-margin-start:12px; + background-color:var(--color-bg); + border:none; + color:var(--color-primary); + font:var(--text-copy-medium-pricing); + height:48px; + margin-inline-start:12px; + max-width:100px +} +.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-input-container span{ + -webkit-padding-end:12px; + color:var(--color-disabled); + font:var(--text-copy-medium-pricing); + padding-inline-end:12px +} +.pricing-flexi-block-estimator-contianer .pricing-flexi-block-estimator-total-container{ + background-color:var(--color-bg-surface-1); + border:1px solid var(--color-grey-150) +} +.pricing-flexi-block-estimator-contianer .pricing-flexi-block-estimator-total{ + padding:40px +} +.pricing-flexi-block-estimator-total .pricing-flexi-block-estimator-total-title{ + color:var(--color-primary); + font:var(--text-copy-medium-bold-pricing) +} +.pricing-flexi-block-estimator-total .pricing-flexi-block-estimator-total-nb{ + color:var(--color-primary); + font:var(--text-h3-pricing); + margin-top:24px +} +.pricing-flexi-block-estimator-total .pricing-flexi-block-estimator-total-unit{ + color:var(--color-copy-secondary); + font:var(--text-caption-regular-pricing) +} +.pricing-pg .pricing-pg.pricing-business-plan-container{ + padding:var(--right-padding); + padding-bottom:80px +} +.pricing-flexi-block-estimator-slider-marks .pricing-flexi-block-estimator-slider-marks-business-users{ + display:flex; + grid-column:1 / -1; + justify-content:space-between +} +.pricing-flexi-block-estimator-slider-marks-business-users .pricing-flexi-block-estimator-slider-mark.start{ + -webkit-padding-start:8px; + padding-inline-start:8px +} +.pricing-pg .invisible{ + visibility:hidden +} +@media screen and (min-width:1079px) and (max-width:1319px){ +.pricing-pg .pricing-pg.tabs-module .tabs-module-block{ + width:285px +} +} +@media screen and (min-width:767px) and (max-width:1079px){ +.bottom-page .pricing-pg{ + --left-padding:24px; + --right-padding:24px; + --top-padding:56px; + --bottom-padding:56px; + --font-size-h2:40px/48px; + --font-size-h3:32px/40px; + --font-size-h5:20px/24px; + --font-size-h6:18px/24px; + --font-top-ref:11px/24px; + --font-top-arstrisk:24px/32px; + --font-quotation:24px/34px; + --font-copy-medium:14px/20px +} +.pricing-pg .pricing-pg.tabs-module .tabs-module-block{ + padding-bottom:20px; + padding-top:20px; + width:360px +} +.pricing-pg .pricing-pg.pick-period-container{ + margin-top:36px +} +.pricing-pg .pricing-pg.plans-cards-container{ + scrollbar-width:none; + overflow-x:scroll; + padding-bottom:28px; + padding-top:36px +} +.pricing-pg .pricing-pg.plans-cards-container::-webkit-scrollbar{ + display:none +} +.pricing-pg .pricing-pg.pricing-banner-container .pricing-get-free-banner{ + padding:36px +} +.pricing-get-free-banner .pricing-get-free-storage{ + padding-top:28px +} +.pricing-pg .pricing-pg.pricing-banner-container{ + padding-bottom:28px +} +.pricing-pg .pricing-estimation-note-container{ + padding-bottom:72px +} +.pricing-plans-compare-table-container .pricing-plans-compare-table-show{ + padding-bottom:40px; + padding-top:44px +} +.pricing-pg .pricing-compare-container{ + padding-bottom:72px; + padding-top:56px +} +.pricing-compare-container .pricing-compare-title{ + grid-column:3 / span 8 +} +.pricing-pg.pricing-compare-container .pricing-compare-cards-container{ + gap:24px; + margin-top:56px +} +.pricing-compare-cards-container .pricing-compare-cards .box{ + padding:24px +} +.pricing-compare-cards .pricing-compare-cards-feature{ + padding:16px 24px +} +.pricing-compare-cards .pricing-compare-cards-rate{ + margin-top:28px +} +.pricing-compare-cards .pricing-compare-cards-note{ + padding:24px +} +.pricing-compare-cards-container .pricing-compare-cards span{ + line-height:1.7 +} +.pricing-pg.pricing-compare-container .pricing-compare-references{ + margin-top:28px +} +.pricing-pg.pricing-social-container .pricing-social{ + padding-bottom:96px; + padding-top:56px +} +.pricing-social .pricing-social-refs-container{ + scrollbar-width:none; + flex-wrap:nowrap; + justify-content:flex-start; + margin-top:56px; + overflow-x:auto; + white-space:nowrap +} +.pricing-social .pricing-social-refs-container::-webkit-scrollbar{ + display:none +} +.pricing-social-quote-container .pricing-social-quote{ + grid-column:1 / -1 +} +.pricing-plans-compare-table .pricing-plans-compare-table-item{ + font-size:14px; + line-height:20px +} +.pricing-plans-compare-table .pricing-plans-compare-table-item.header{ + padding-top:44px +} +.pricing-pg .pricing-pg.pricing-flexi-container{ + padding-bottom:72px; + padding-top:56px +} +.pricing-pg.pricing-flexi-container .pricing-flexi-block-contianer{ + padding-top:56px +} +.pricing-flexi-block-card-contianer .pricing-pg.plans-cards-container{ + gap:24px +} +.pricing-flexi-block-card-contianer .pricing-plan-card .pricing-plan-trasfer{ + margin-bottom:56px +} +.pricing-flexi-block-estimator-contianer .pricing-flexi-block-estimator,.pricing-flexi-block-estimator-contianer .pricing-flexi-block-estimator-total{ + padding:36px +} +.pricing-flexi-block-estimator-slider-contianer .pricing-flexi-block-estimator-slider-headers-container{ + grid-template-columns:1fr; + row-gap:28px +} +.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-header{ + grid-column:1 / -1 +} +.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-input-box{ + align-items:center; + display:flex; + flex-grow:1 +} +.pricing-flexi-block-estimator-slider-headers-container input.pricing-flexi-block-estimator-slider-input{ + flex-grow:1; + max-width:unset; + width:unset +} +.pricing-flexi-block-estimator-slider-marks input.pricing-flexi-slider{ + margin-top:24px +} +.pricing-plan-card .pricing-plan-storage{ + white-space:normal +} +} +@media screen and (min-width:0) and (max-width:767px){ +.bottom-page .pricing-pg{ + --left-padding:24px; + --right-padding:24px; + --top-padding:48px; + --bottom-padding:48px; + --font-size-h2:28px/36px; + --font-size-h3:24px/28px; + --font-size-h5:20px/24px; + --font-size-h6:18px/24px; + --font-top-ref:9px/21px; + --font-top-arstrisk:18px/26px; + --font-quotation:24px/34px; + --font-copy-medium:14px/20px +} +.pricing-pg .pricing-pg.tabs-module .tabs-module-block{ + padding-bottom:32px; + padding-top:32px +} +.pricing-pg .pricing-pg.tabs-module .tabs-block-sub-title{ + display:none +} +.pricing-pg .pricing-pg.pick-period-container{ + margin-top:32px +} +.pricing-pg .pricing-pg.period-note-container,.pricing-pg .pricing-pg.pick-period-module{ + justify-content:flex-start +} +.pricing-pg .pricing-pg.pick-period-module .pricing-radio-group{ + flex-direction:column +} +.pricing-pg .pricing-pg.plans-cards-container{ + gap:24px; + grid-template-columns:1fr; + padding-bottom:28px; + padding-top:32px +} +.pricing-pg .pricing-pg.plans-cards-container .pricing-plan-card{ + padding-bottom:28px +} +.pricing-pg .pricing-pg.pricing-banner-container .pricing-get-free-banner{ + padding:32px +} +.pricing-get-free-banner .pricing-get-free-storage{ + padding-top:28px +} +.pricing-pg .pricing-pg.pricing-banner-container .pricing-get-free-banner{ + gap:32px; + flex-direction:column +} +.pricing-get-free-banner .pricing-get-free-banner-right{ + align-items:unset +} +.pricing-pg .pricing-pg.pricing-banner-container{ + padding-bottom:28px +} +.pricing-pg .pricing-estimation-note-container{ + padding-bottom:64px +} +.pricing-plans-compare-table-container .pricing-plans-compare-table-show{ + padding-bottom:40px; + padding-top:44px +} +.pricing-why-store-with-us .pricing-why-store-with-us-blocks-container{ + gap:24px; + display:grid; + grid-template-columns:1fr +} +.pricing-why-store-with-us-container .pricing-why-store-with-us{ + padding-bottom:40px; + padding-top:40px +} +.pricing-pg .pricing-compare-container{ + padding-bottom:64px; + padding-top:48px +} +.pricing-compare-container .pricing-compare-title{ + grid-column:1 / -1 +} +.pricing-pg.pricing-compare-container .pricing-compare-cards-container{ + gap:24px; + grid-template-columns:1fr; + margin-top:48px +} +.pricing-compare-cards-container .pricing-compare-cards .box{ + padding:24px +} +.pricing-compare-cards .pricing-compare-cards-feature{ + padding:16px 24px +} +.pricing-compare-cards .pricing-compare-cards-rate{ + margin-top:28px +} +.pricing-compare-cards .pricing-compare-cards-note{ + padding:24px +} +.pricing-compare-cards-container .pricing-compare-cards span{ + line-height:1.7 +} +.pricing-pg.pricing-compare-container .pricing-compare-references{ + margin-top:28px +} +.pricing-pg.pricing-social-container .pricing-social{ + padding-bottom:88px; + padding-top:48px +} +.pricing-social .pricing-social-refs-container{ + scrollbar-width:none; + flex-wrap:nowrap; + justify-content:flex-start; + margin-top:48px; + overflow-x:auto; + white-space:nowrap +} +.pricing-social .pricing-social-refs-container::-webkit-scrollbar{ + display:none +} +.pricing-social-quote-container .pricing-social-quote{ + grid-column:1 / -1 +} +.pricing-plans-compare-table .pricing-plans-compare-table-item{ + font-size:14px; + line-height:20px; + padding:16px +} +.pricing-pg .pricing-pg.pricing-flexi-container{ + padding-bottom:64px; + padding-top:48px +} +.pricing-pg.pricing-flexi-container .pricing-flexi-block-contianer{ + padding-top:48px +} +.pricing-flexi-block-card-contianer .pricing-pg.plans-cards-container{ + gap:24px +} +.pricing-flexi-block-card-contianer .pricing-plan-card .pricing-plan-trasfer{ + margin-bottom:48px +} +.pricing-flexi-block-card-contianer .plans-cards-container .pricing-flexi-block-estimator-contianer{ + grid-column:span 1 +} +.pricing-flexi-block-estimator-contianer .pricing-flexi-block-estimator,.pricing-flexi-block-estimator-contianer .pricing-flexi-block-estimator-total{ + padding:32px +} +.pricing-flexi-block-estimator-slider-contianer .pricing-flexi-block-estimator-slider-headers-container{ + grid-template-columns:1fr; + row-gap:28px +} +.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-header{ + grid-column:1 / -1 +} +.pricing-flexi-block-estimator-slider-headers-container .pricing-flexi-block-estimator-slider-input-box{ + align-items:center; + display:flex; + flex-grow:1 +} +.pricing-flexi-block-estimator-slider-headers-container input.pricing-flexi-block-estimator-slider-input{ + flex-grow:1; + max-width:unset; + width:unset +} +.pricing-flexi-block-estimator-slider-marks input.pricing-flexi-slider{ + margin-top:24px +} +.pricing-flexi-block-card-contianer .plans-cards-container .pricing-flexi-block-card-note-s{ + display:block +} +.pricing-flexi-block-card-contianer .plans-cards-container .pricing-flexi-block-card-note{ + display:none +} +.pricing-pg.pricing-plans-compare-table-container .pricing-plans-compare-table{ + scrollbar-width:none; + overflow-x:scroll +} +.pricing-pg.pricing-plans-compare-table-container .pricing-plans-compare-table::-webkit-scrollbar{ + display:none +} +.pricing-plans-compare-table .pricing-plans-compare-table-item.line{ + top:0 +} +} +@media screen and (min-width:1250px){ +.pricing-plan-card.long-currency1 .pricing-plan-price{ + font:normal 400 40px/34px var(--font-poppins-sb-pricing); + line-height:55px +} +.pricing-plan-card.long-currency2 .pricing-plan-price{ + font:normal 400 33px/34px var(--font-poppins-sb-pricing); + line-height:55px +} +.pricing-plan-card.long-currency3 .pricing-plan-price{ + font:normal 400 26px/34px var(--font-poppins-sb-pricing) +} +.pricing-pg .pricing-pg.plans-cards-container .pricing-plan-card.long-currency1>*,.pricing-pg .pricing-pg.plans-cards-container .pricing-plan-card.long-currency2>*{ + padding-left:10px; + padding-right:10px +} +} +@media screen and (min-width:970px) and (max-width:1250px){ +.pricing-plan-card.long-currency1 .pricing-plan-price{ + font:normal 400 31px/34px var(--font-poppins-sb-pricing); + line-height:45px +} +.pricing-plan-card.long-currency2 .pricing-plan-price{ + font:normal 400 27px/34px var(--font-poppins-sb-pricing); + line-height:47px +} +.pricing-plan-card.long-currency3 .pricing-plan-price{ + font:normal 400 23px/34px var(--font-poppins-sb-pricing) +} +.pricing-pg .pricing-pg.plans-cards-container .pricing-plan-card.long-currency1>*{ + padding-left:10px; + padding-right:10px +} +.pricing-pg .pricing-pg.plans-cards-container .pricing-plan-card.long-currency2>*{ + padding-left:17px; + padding-right:17px +} +.pricing-plan-storage.long-text,.pricing-plan-trasfer.long-text{ + font-size:14px +} +} +@media screen and (min-width:767px) and (max-width:970px){ +.pricing-plan-card .pricing-plan-price{ + font:normal 400 35px/34px var(--font-poppins-sb-pricing); + line-height:47px +} +.pricing-plan-card.long-currency1 .pricing-plan-price{ + font:normal 400 25px/34px var(--font-poppins-sb-pricing); + line-height:45px +} +.pricing-plan-card.long-currency2 .pricing-plan-price{ + font:normal 400 20px/34px var(--font-poppins-sb-pricing); + line-height:47px +} +.pricing-plan-card.long-currency3 .pricing-plan-price{ + font:normal 400 15px/34px var(--font-poppins-sb-pricing) +} +.pricing-pg .pricing-pg.plans-cards-container .pricing-plan-card>*{ + padding-left:5px; + padding-right:5px +} +.pricing-plan-storage.long-text,.pricing-plan-trasfer.long-text{ + font-size:11px +} +} + +.centered-textalign,.centered-textalign *{ + text-align:center !important +} +.new-startpage .top-head:after{ + display:none +} +.bottom-page.startpage.full-block,.bottom-page.startpage .top{ + font-family:LatoWeb,source_sans_proregular +} +.bottom-page.light-blue{ + background-color:#f7f9fb; + overflow:hidden +} +.startpage.top-header{ + color:#373737; + font-family:var(--text-font-family-second-light); + font-size:40px; + line-height:63px; + padding:64px 40px 35px +} +.startpage .affiliate-page.top-header{ + padding:64px 0 35px +} +.startpage.top-info{ + color:#373737; + font-size:16px; + line-height:18px; + padding:0 40px 40px +} +.startpage.top-notice{ + background-color:#fff; + color:#999; + font-size:12px; + line-height:15px; + margin:-13px 0 0; + padding:0 40px 90px; + position:relative; + text-align:center +} +.startpage.top-info strong{ + font-family:LatoWebBold,source_sans_probold; + font-size:18px; + font-weight:400 +} +.startpage.img1{ + max-width:1494px; + position:relative; + width:100% +} +.startpage.abs{ + position:absolute +} +.startpage.img2{ + margin:0 0 0 5px; + max-width:726px; + width:200% +} +.startpage.img3{ + float:right; + margin:-16% -63% 0 0; + max-width:1081px; + position:relative; + width:250% +} +.startpage.img3.abs{ + position:absolute; + right:0; + top:0 +} +.startpage.img4{ + max-width:712px; + width:200% +} +.startpage-chat-img{ + margin:0 0 0 10px; + position:relative +} +.startpage-chat-content,.startpage-chat-content span{ + font-size:0; + height:299px; + left:192px; + overflow:hidden; + position:absolute; + top:90px; + width:443px; + z-index:10 +} +.startpage-chat-content span{ + background-image:url(../imagery/mega-bottom-page-start_img4-2-2x.7bb8b8b09fe4f1dc.png); + background-repeat:repeat-y; + background-size:100% auto; + display:block; + height:2221px; + left:0; + top:0 +} +.startpage.img5{ + float:right; + margin:0; + max-width:759px; + width:200% +} +.startpage.img-wrap{ + line-height:0; + margin:-20px -20px 0; + position:relative +} +.startpage.img-wrap:after,.startpage.img-wrap:before{ + background-color:#fff; + bottom:0; + content:""; + display:block; + height:85px; + position:absolute; + width:50%; + width:-webkit-calc(50% - 700px); + width:-moz-calc(50% - 700px); + width:calc(50% - 700px); + z-index:1 +} +.startpage.img-wrap:after{ + right:0 +} +.bottom-page.banners{ + background-color:#fff; + overflow:hidden; + position:relative +} +.bottom-page.top-banner{ + opacity:0; + position:absolute; + top:0; + -webkit-transition:opacity .5s ease-in-out,visibility .5s ease-in-out; + transition:opacity .5s ease-in-out,visibility .5s ease-in-out; + visibility:hidden; + width:100% +} +.bottom-page.top-banner.active{ + opacity:1; + visibility:visible +} +.bottom-page.top-banner.banner2{ + padding-bottom:30px; + position:relative +} +.bottom-page.banner-control{ + cursor:pointer; + left:90px; + position:absolute; + top:470px; + z-index:3 +} +.bottom-page.banner-control.next{ + left:auto; + right:90px +} +.startpage.mid-icon,.startpage.small-icon{ + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-position:-243px 14px; + background-repeat:no-repeat; + height:20px; + width:20px +} +.startpage.mid-icon{ + height:60px; + width:60px +} +.startpage.small-icon.green-tick{ + background-position:-25px -615px +} +.startpage.small-icon.red-cross{ + background-position:-76px -615px +} +.startpage.carousel{ + height:253px; + margin-top:44px; + position:relative +} +.startpage.carousel-slide{ + background-color:#fff; + border:1px solid #e6e6e6; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + -webkit-box-shadow:5px 8px 21px 0 hsla(0, 0%, 83.1%, .5); + -moz-box-shadow:5px 8px 21px 0 hsla(0, 0%, 83.1%, .5); + box-shadow:5px 8px 21px 0 hsla(0, 0%, 83.1%, .5); + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#373737; + font-size:15px; + font-style:italic; + left:0; + line-height:24px; + margin:0; + opacity:0; + padding:30px; + position:absolute; + text-align:center; + top:0; + transform:scale(.5); + -webkit-transition:left .4s ease-in-out,transform .4s ease-in-out,opacity .4s ease-in-out; + transition:left .4s ease-in-out,transform .4s ease-in-out,opacity .4s ease-in-out; + width:50%; + z-index:10 +} +.startpage.carousel-slide.current{ + left:25%; + opacity:1; + transform:scale(1) +} +.startpage.carousel-slide.prev{ + left:0; + opacity:.5; + transform:scale(.8); + z-index:9 +} +.startpage.carousel-slide.next{ + left:50%; + margin:0; + opacity:.5; + transform:scale(.8); + z-index:9 +} +.startpage.rating-block{ + font-size:0; + margin:-3px 0 10px +} +.startpage.comment-block{ + min-height:134px +} +.startpage.author-name{ + color:#666; + font-size:14px; + font-style:normal; + padding:0; + word-break:break-word +} +.startpage.rating-block span{ + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-position:-161px -618px; + background-repeat:no-repeat; + display:inline-block; + height:14px; + margin:0 2px; + width:14px +} +.startpage.rating-block span.active{ + background-position:-121px -618px +} +.startpage.carousel-control{ + background-color:#fff; + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-position:-220px -650px; + border-radius:100%; + -webkit-box-shadow:0 0 0 1px rgba(0, 0, 0, .15); + -moz-box-shadow:0 0 0 1px rgba(0, 0, 0, .15); + box-shadow:0 0 0 1px rgba(0, 0, 0, .15); + cursor:pointer; + height:32px; + left:0; + margin:-16px 0 0; + opacity:.5; + position:absolute; + top:50%; + -webkit-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out; + width:32px; + z-index:20 +} +.startpage.carousel-control:hover{ + opacity:.7 +} +.startpage.carousel-control.next{ + background-position:-190px -610px; + left:auto; + right:0 +} +.startpage.button-48-height{ + background-color:#0bbdaa; + border:1px solid #0bbdaa; + -moz-border-radius:2px; + -webkit-border-radius:2px; + border-radius:2px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + cursor:pointer; + display:inline-block; + font-size:18px; + height:48px; + line-height:46px; + margin:0 20px; + min-width:170px; + padding:0 15px; + position:relative; + text-align:center; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + white-space:nowrap; + z-index:1 +} +.startpage.button-48-height:hover{ + background-color:#00ac94; + border-color:#00ac94; + -webkit-box-shadow:0 0 0 4px rgba(0, 191, 165, .3); + -moz-box-shadow:0 0 0 4px rgba(0, 191, 165, .3); + box-shadow:0 0 0 4px rgba(0, 191, 165, .3) +} +.startpage.button-48-height.orange{ + background-color:#fba500; + border-color:#fba500 +} +.startpage.button-48-height.orange:hover{ + background-color:#ee9200; + border-color:#ee9200; + -webkit-box-shadow:0 0 0 4px rgba(251, 165, 0, .2); + -moz-box-shadow:0 0 0 4px rgba(251, 165, 0, .2); + box-shadow:0 0 0 4px rgba(251, 165, 0, .2) +} +.startpage.button-48-height.white{ + background-color:#fff; + border-color:#cfcfcf; + color:#373737 +} +.startpage.button-48-height.white:hover{ + background-color:#fafafa; + -webkit-box-shadow:0 0 0 4px rgba(0, 0, 0, .15); + -moz-box-shadow:0 0 0 4px rgba(0, 0, 0, .15); + box-shadow:0 0 0 4px rgba(0, 0, 0, .15) +} +.startpage.buttons-block{ + padding:80px 0 40px +} +.startpage.counters{ + padding:18px 0 12px +} +.startpage.flip-wrapper{ + display:inline-block; + font-size:0; + margin:0 -15px; + padding:12px 0 0 +} +.flip-block{ + margin:2px +} +.flip-bg,.flip-block{ + -moz-border-radius:3px; + -webkit-border-radius:3px; + border-radius:3px; + -webkit-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + -moz-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + color:#777; + display:inline-block; + font-size:28px; + height:35px; + line-height:35px; + text-align:right; + width:24px +} +.flip-bg{ + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-position:-243px 14px; + background-repeat:no-repeat; + -webkit-box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + -moz-box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + padding:0 4px +} +.flip-bg,.flip-div{ + vertical-align:top +} +.flip-div{ + background-color:#ccc; + -moz-border-radius:1px; + -webkit-border-radius:1px; + border-radius:1px; + display:inline-block; + height:6px; + margin:38px -1px 0; + width:2px +} +.startpage.scroll-to-top{ + background-color:#cecece; + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-position:-214px -688px; + -moz-border-radius:100%; + -webkit-border-radius:100%; + border-radius:100%; + bottom:60px; + cursor:pointer; + height:52px; + margin:0; + opacity:0; + position:fixed; + right:50px; + -webkit-transition:background-color .2s ease-in-out,opacity .2s ease-in-out; + transition:background-color .2s ease-in-out,opacity .2s ease-in-out; + width:52px; + z-index:10 +} +.start-animation .startpage.scroll-to-top{ + opacity:1 +} +.startpage.scroll-to-top.up{ + background-position:-214px -601px +} +.mobile .startpage.scroll-to-top{ + bottom:30px; + right:30px +} +.startpage.scroll-to-top:hover{ + background-color:#a1a1a1 +} +.startpage-download{ + display:inline; + position:relative +} +.startpage.img2-progress{ + background-color:rgba(51, 51, 51, .2); + -moz-border-radius:2px; + -webkit-border-radius:2px; + border-radius:2px; + bottom:144px; + height:10px; + left:139px; + position:absolute; + width:100%; + width:-webkit-calc(100% - 284px); + width:-moz-calc(100% - 284px); + width:calc(100% - 284px) +} +.startpage.img2-progress.pr2{ + bottom:57px +} +.startpage.img2-progress span{ + background-color:#00c0a6; + -moz-border-radius:2px; + -webkit-border-radius:2px; + border-radius:2px; + height:100%; + left:0; + position:absolute; + width:0 +} +.startpage-filetypes{ + display:inline; + float:right; + position:relative +} +.startpage-business-wrap{ + margin-right:-30px; + position:relative +} +.startpage-busines-cont{ + background-image:url(../imagery/mega-bottom-page-start_img5-3-2x.a12ef1c8855f2bfb.png); + background-size:100% auto; + height:451px; + position:absolute; + right:0; + top:0; + width:456px; + z-index:10 +} +.startpage-busines-cont.c2{ + background-image:url(../imagery/mega-bottom-page-start_img5-4-2x.8129fb19402f3869.png); + height:404px; + right:265px; + top:341px; + width:381px +} +.startpage .bottom-page.half-sized-cell.mid-width{ + max-width:618px; + padding:0 +} +.startpage .bottom-page.right-cell .img-description.mid-width{ + padding-left:30px +} +.startpage .bottom-page.horizontal-centered-bl.width-with-pad{ + padding:0 20px; + table-layout:fixed +} +.bottom-page.visible{ + overflow:visible !important +} +.startpage.button-48-height.account{ + display:none +} +.logged .startpage.button-48-height.account{ + display:inline-block +} +.startpage.italic-text{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:rgba(0, 0, 0, .7); + font-size:18px; + font-style:italic; + line-height:36px; + margin:0 auto; + max-width:810px; + padding:0 15px; + position:relative +} +.startpage.italic-text span{ + padding:0 8px +} +.startpage.quote-icon{ + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-position:-115px -2739px; + height:26px; + left:14px; + position:absolute; + top:-25px; + width:36px +} +.startpage.quote-icon.close{ + background-position:-218px -2739px; + bottom:-25px; + left:auto; + right:14px; + top:auto +} +.startpage.declaration-lnk{ + color:#ff333a; + font-family:var(--text-font-family-second-regular); + font-size:14px; + line-height:20px; + padding:0 10px; + text-align:center +} +.startpage.medium-icon.declaration{ + background-position:-201px -2088px; + margin:27px auto 22px +} +.startpage.medium-icon{ + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-position:1px -2723px; + background-repeat:no-repeat; + height:66px; + margin:20px auto 12px; + width:66px +} +.bottom-page.compare{ + font-size:0; + padding-top:84px +} +.bottom-page.compare-block{ + background:#fff; + background:-moz-linear-gradient(top, #fff 0, #fafafa 100%); + background:-webkit-linear-gradient(top, #fff, #fafafa); + background:linear-gradient(180deg, #fff 0, #fafafa); + border-radius:10px; + -webkit-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + -moz-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + display:inline-block; + margin:0; + padding:23px 0 0; + position:relative; + text-align:center; + vertical-align:top; + width:262px +} +.bottom-page.compare-block:before{ + border-radius:inherit; + -webkit-box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + -moz-box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.page-icon{ + display:block +} +.page-icon.x48{ + height:48px; + width:48px +} +.page-icon.x44{ + height:44px; + width:44px +} +.page-icon.x24{ + height:24px; + width:24px +} +.bottom-menu .logo,.startpage-sprite,i.startpage-sprite{ + background-image:url(../imagery/mega-startpage-sprite.495b2a146e53c8ae.png); + background-repeat:no-repeat +} +.startpage-sprite.social-i{ + display:block; + height:36px; + width:36px +} +.startpage-sprite.social-i.fb{ + background-position:2px -2208px +} +.startpage-sprite.social-i.instagram{ + background-position:-48px -2207px +} +.startpage-sprite.social-i.twitter{ + background-position:-98px -2207px +} +.startpage-sprite.social-i.linkedin{ + background-position:-148px -2208px +} +.startpage-sprite.social-i.youtube{ + background-position:-198px -2208px +} +.page-icon.x48.dropbox{ + background-position:-104px -475px +} +.page-icon.x48.mega{ + background-position:-5px -351px; + background-size:200px auto +} +.page-icon.x48.gdrive{ + background-position:-183px -474px +} +.page-icon.x44.arrow-icon{ + background-position:-105px -645px +} +.expanded .page-icon.x44.arrow-icon{ + background-position:-184px -646px +} +.page-icon.x24.android{ + background-position:-76px -1453px +} +.page-icon.x24.huawei{ + background-position:-128px -1453px +} +.page-icon.x24.apple{ + background-position:-27px -1453px +} +.page-icon.x24.linux{ + background-position:-228px -1453px +} +.page-icon.x24.win{ + background-position:-180px -1453px +} +.bottom-page.compare-block .page-icon{ + margin:0 auto +} +.bottom-page.compare-head{ + color:#333; + font-family:LatoWebBold,Arial; + font-size:16px; + line-height:20px; + padding:14px 0 0; + text-transform:uppercase +} +.bottom-page.compare-price{ + color:#00bfa5; + font-family:LatoWebBold,Arial; + font-size:26px; + line-height:56px; + padding:12px 0 0 +} +.bottom-page.compare-price i{ + color:#373737; + display:inline-block; + font-family:LatoWeb,Arial; + font-size:14px; + font-style:normal; + margin:-12px -10px 0 5px; + vertical-align:top +} +.bottom-page.compare-price.blue{ + color:#007ee5 +} +.bottom-page.compare-price.yellow{ + color:#e1b63f +} +.bottom-page.compare-price span{ + font-size:48px; + padding:0 5px 0 0 +} +.bottom-page.compare-time{ + color:#333; + font-family:LatoWebBold,Arial; + font-size:16px; + line-height:20px; + margin-top:-7px; + padding:0 0 12px +} +.bottom-page.compare-feature{ + background-color:rgba(0, 0, 0, .02); + font-size:0; + padding:14px 10px +} +.bottom-page.compare-feature span{ + color:#373737; + display:inline-block; + font-size:16px; + line-height:20px; + vertical-align:top +} +.bottom-page.compare-feature i{ + -webkit-margin-end:10px; + display:inline-block; + margin-inline-end:10px; + vertical-align:top +} +.en .bottom-page.compare-feature i{ + margin:0 15px 0 0 +} +.de .bottom-page.compare-feature i{ + margin:0 7px 0 0 +} +.de .bottom-page.compare-feature span{ + font-size:15px +} +.th .bottom-page.compare-feature span{ + font-size:14px +} +.bottom-page.compare-tip{ + box-sizing:border-box; + color:#373737; + font-size:12px; + line-height:15px; + min-height:60px; + padding:15px +} +.bottom-page.compare-mark{ + background-color:#00c0a6; + box-sizing:border-box; + color:#fff; + font-size:9px; + line-height:12px; + padding:9px 2px; + position:absolute; + right:22px; + top:0; + width:48px +} +.bottom-page.compare-mark span{ + font-size:17px; + line-height:17px +} +.bottom-page.compare-mark i{ + background-position:-4px -529px; + background-size:213px auto; + bottom:-20px; + height:20px; + left:0; + position:absolute; + width:100% +} +.bottom-page.compare-block.big:before{ + -webkit-box-shadow:0 0 0 1px #00c0a6; + -moz-box-shadow:0 0 0 1px #00c0a6; + box-shadow:0 0 0 1px #00c0a6 +} +.bottom-page.compare-block.big{ + margin:0 20px +} +.rtl .bottom-page.compare-block{ + direction:rtl +} +.bottom-page.compare-txt{ + color:#373737; + font-size:18px; + line-height:22px; + padding:106px 0 0 +} +.bottom-page.compare-txt a,.bottom-page.compare-txt a:visited{ + color:#00c0a6; + text-decoration:underline +} +.bottom-page.compare-txt a:hover{ + text-decoration:none +} +.startpage.software{ + display:table; + margin-top:60px; + table-layout:fixed; + width:100% +} +.startpage.software-cell{ + display:table-cell; + font-size:0; + line-height:0; + position:relative; + vertical-align:middle; + width:50% +} +.startpage.software-content{ + padding-left:64px; + text-align:left +} +.startpage.software-header{ + border-top:1px solid #e3e3e3; + color:#373737; + cursor:pointer; + font-family:var(--text-font-family-second-light); + font-size:30px; + line-height:38px; + margin-left:54px; + padding:19px 0 17px; + position:relative; + -webkit-transition:color .2s ease-in-out; + transition:color .2s ease-in-out +} +.expanded .startpage.software-header{ + color:#00c0a6 +} +.startpage.software-content:first-child .software-header{ + border:0 +} +.startpage.software-header i{ + display:block; + left:-54px; + position:absolute; + top:15px +} +.startpage.software-txt{ + max-height:0; + opacity:0; + overflow:hidden; + padding:0 0 0 54px; + -webkit-transition:opacity .5s ease-in-out; + transition:opacity .5s ease-in-out +} +.expanded .startpage.software-txt{ + max-height:300px; + opacity:1 +} +.startpage.software-txt span{ + color:#666; + display:block; + font-family:var(--text-font-family-second-light); + font-size:18px; + line-height:22px; + max-width:550px; + padding:2px 0 20px +} +.startpage.software-txt a,.startpage.software-txt a:visited{ + color:#00c0a6; + display:inline-block; + font-family:LatoWeb,Arial; + font-size:18px; + line-height:22px; + margin:0 0 8px; + text-decoration:underline; + vertical-align:top +} +.startpage.software-txt a:hover{ + text-decoration:none +} +.startpage.software-txt a.icons{ + display:inline-block; + font-size:0; + margin-left:36px; + text-decoration:none; + white-space:nowrap +} +.startpage.software-txt a.icons i{ + display:inline-block; + margin:0 0 0 25px; + padding:0 +} +.startpage.software-txt a.icons i:first-child{ + margin:0 +} +.startpage.software-cell img{ + display:block; + width:100% +} +.startpage.software-img{ + line-height:0; + opacity:0; + position:absolute; + right:10%; + top:50%; + -ms-transform:translateY(-50%); + transform:translateY(-50%); + width:100% +} +.software-cell.start-animation .startpage.software-img.active{ + max-width:650px; + opacity:1; + right:0; + -webkit-transition:opacity .8s ease-in-out,right .8s ease-in-out; + transition:opacity .8s ease-in-out,right .8s ease-in-out; + z-index:1 +} +.startpage.software-cell img.desktop{ + max-width:804px; + width:120% +} +.startpage.software-cell img.mobile{ + max-width:547px +} +.startpage.software-cell img.cmd{ + max-width:516px +} +.startpage.software-cell img.ext{ + max-width:472px +} +.startpage.software-cell img.bird{ + max-width:553px +} +div.startpage.software-img.soft-slide[data-slide="2"]{ + max-width:626px +} +.startpage.software-img img{ + bottom:auto; + left:0; + margin:auto; + opacity:0; + position:absolute; + right:0; + top:0 +} +.startpage.software-img img.active{ + opacity:1; + position:relative; + -webkit-transition:opacity .5s ease-in-out; + transition:opacity .5s ease-in-out; + z-index:1 +} +.startpage.slider-controls{ + display:inline-block; + padding:30px 0 0; + position:relative; + white-space:nowrap; + z-index:1 +} +.startpage.slider-controls span{ + background-color:#b9b9b9; + border-radius:100%; + cursor:pointer; + display:inline-block; + height:12px; + margin:0 10px; + -webkit-transition:background-color .5s ease-in-out; + transition:background-color .5s ease-in-out; + vertical-align:top; + width:12px +} +.startpage.slider-controls span.active,.startpage.slider-controls span:hover{ + background-color:#00c0a6 +} +.startpage.software-content img{ + display:none; + position:static; + top:0; + -ms-transform:none; + transform:none; + width:100% +} +.bottom-page.st-special-pad{ + padding-top:118px +} +.startpage.default-controls,.startpage.software-controls{ + display:none; + padding:48px 0 0; + white-space:nowrap +} +.startpage.nav-button{ + background-color:#fff; + background:#fff; + background:-moz-linear-gradient(top, #fff 0, #fafafa 100%); + background:-webkit-linear-gradient(top, #fff, #fafafa); + background:linear-gradient(180deg, #fff 0, #fafafa); + border-radius:100%; + -webkit-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + -moz-box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + cursor:pointer; + display:inline-block; + height:32px; + margin:0 18px; + position:relative; + vertical-align:top; + width:32px +} +.startpage.nav-button:before{ + border-radius:100%; + -webkit-box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + -moz-box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + display:block; + height:100%; + position:absolute; + width:100% +} +.startpage.nav-button i{ + background-position:-220px -650px; + display:block; + height:32px; + opacity:.5; + width:32px +} +.startpage.nav-button.next i{ + background-position:-190px -610px +} +.startpage.default-controls span,.startpage.software-controls span{ + background-color:#666; + border:4px solid #fff; + border-radius:100%; + box-sizing:border-box; + cursor:pointer; + display:inline-block; + height:14px; + margin:9px 0; + opacity:.3; + -webkit-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out; + width:14px +} +.startpage.default-controls span.active,.startpage.software-controls span.active{ + opacity:1 +} +.startpage.features{ + border-collapse:initial; + border-spacing:20px; + box-sizing:border-box; + display:table; + margin:59px 0 0; + table-layout:fixed; + text-align:left; + width:100% +} +.startpage.features-block{ + background-color:hsla(0, 0%, 100%, .5); + border-radius:4px; + box-shadow:inset 0 0 0 1px #e3e3e3; + cursor:default; + display:table-cell; + overflow:hidden; + -webkit-transition:transform .5s ease-in-out,box-shadow .5s ease-in-out; + transition:transform .5s ease-in-out,box-shadow .5s ease-in-out; + width:25% +} +.startpage.features-block:hover{ + box-shadow:inset 0 0 0 1px #00c0a6; + -webkit-transform:scale(1.072); + -moz-transform:scale(1.072); + -o-transform:scale(1.072); + -ms-transform:scale(1.072); + transform:scale(1.072) +} +.startpage.features-block.orange:hover{ + box-shadow:inset 0 0 0 1px #ffc06b +} +.startpage.features-block.red:hover{ + box-shadow:inset 0 0 0 1px #f97a75 +} +.startpage.features-block.blue:hover{ + box-shadow:inset 0 0 0 1px #4898e8 +} +.startpage.features-header{ + background-color:#00c0a6; + background-position:center -809px; + height:192px +} +.orange .startpage.features-header{ + background-color:#ffc06b; + background-position:center -996px +} +.red .startpage.features-header{ + background-color:#f97a75; + background-position:center -1621px +} +.blue .startpage.features-header{ + background-color:#4898e8; + background-position:center -1851px +} +.startpage.features-content{ + color:#373737; + font-size:16px; + line-height:24px; + padding:20px 20px 32px +} +.startpage.features-content a,.startpage.features-content a:visited{ + color:#373737 +} +.startpage.features-content span{ + display:block +} +.startpage.features-content .head{ + color:#000; + font-family:var(--text-font-family-second-regular); + font-size:24px; + line-height:30px; + padding:2px 0 8px; + -webkit-transition:color .5s ease-in-out; + transition:color .5s ease-in-out +} +.startpage.features-block:hover .head{ + color:#00c0a6 +} +.startpage.features-block.orange:hover .head{ + color:#ffc06b +} +.startpage.features-block.red:hover .head{ + color:#f97a75 +} +.startpage.features-block.blue:hover .head{ + color:#4898e8 +} +.startpage.separator{ + display:none +} +@media only screen and (-o-min-device-pixel-ratio:3/2),only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){ +.bottom-menu .logo,.bottom-page.big-icon,.flip-bg,.pages-nav.nav-icon,.small-red-link i,.startpage-sprite,.startpage.carousel-control,.startpage.medium-icon,.startpage.mid-icon,.startpage.os-icons,.startpage.quote-icon,.startpage.rating-block span,.startpage.scroll-to-top,.startpage.small-icon,.top-arrow-icon,i.startpage-sprite{ + background-image:url(../imagery/mega-startpage-sprite-2x.f8c80ce9c12a1c08.png) !important; + background-size:267px auto +} +.bottom-page.large-icon,.cropped-page .bottom-page.big-icon{ + background-image:url(../imagery/mega-new-pages-sprite-2x.4c92e0c6c9034e3d.png); + background-size:376px auto +} +} +@media only screen and (min-width:1040px){ +.bottom-page.compare-block{ + margin:40px 0 0 +} +.bottom-page.compare-block.big{ + border-radius:13px; + margin:0 40px; + padding-top:31px; + width:340px +} +.compare-block.big .page-icon.x48{ + background-position:-8px -469px; + background-size:267px auto; + height:62px; + width:62px +} +.big .bottom-page.compare-head{ + font-size:21px; + line-height:25px; + padding:16px 0 0 +} +.de .big .bottom-page.compare-feature span,.th .big .bottom-page.compare-feature span{ + font-size:16px +} +.big .bottom-page.compare-price{ + font-size:34px; + line-height:75px; + padding:16px 0 0 +} +.big .bottom-page.compare-price span{ + font-size:62px +} +.big .bottom-page.compare-price i{ + font-size:18px; + margin:-15px -10px 0 5px +} +.big .bottom-page.compare-time{ + font-size:21px; + line-height:25px; + margin-top:-9px; + padding:0 0 31px +} +.big .bottom-page.compare-tip{ + font-size:15px; + line-height:18px; + padding:23px 15px +} +.big .bottom-page.compare-mark{ + font-size:12px; + line-height:20px; + right:28px; + width:62px +} +.big .bottom-page.compare-mark span{ + font-size:22px; + line-height:22px +} +.big .bottom-page.compare-mark i{ + background-position:-3px -663px; + background-size:267px auto; + height:20px +} +} +@media only screen and (max-width:1200px){ +.startpage.separator{ + display:table-row +} +.startpage.features{ + display:block; + margin:59px auto 0; + width:600px +} +.startpage.features-block{ + width:50% +} +} +@media only screen and (max-width:1140px){ +.startpage.img-wrap:before{ + display:none +} +.bottom-page.banner-control{ + left:10px +} +.bottom-page.banner-control.next{ + left:auto; + right:10px +} +} +@media only screen and (max-width:1040px){ +.startpage.software-header{ + font-size:20px; + margin-left:44px; + padding:9px 0 7px +} +.startpage.software-header i{ + left:-44px; + top:5px +} +.startpage.software-txt{ + padding:0 0 0 44px +} +.startpage.software-txt a,.startpage.software-txt a:visited,.startpage.software-txt span{ + font-size:16px +} +.startpage.software-content{ + padding-left:34px +} +} +@media only screen and (max-width:1020px){ +.startpage.carousel-slide{ + width:60% +} +.startpage.carousel-slide.current{ + left:20% +} +.startpage.carousel-slide.next{ + left:40% +} +.startpage.carousel-control{ + left:20px +} +.startpage.carousel-control.next{ + right:20px +} +} +@media only screen and (max-width:920px){ +.bottom-page.compare-block,.bottom-page.compare-block.big{ + display:block; + margin:40px auto 0; + max-width:262px; + width:auto +} +.bottom-page.compare{ + padding-top:0 +} +.bottom-page.compare-txt{ + padding:50px 0 0 +} +} +@media only screen and (max-width:880px){ +.bottom-page.top-banner.banner2{ + padding-bottom:20px +} +} +@media only screen and (max-width:783px){ +.startpage .bottom-page.half-sized-cell.mid-width{ + margin:0 auto; + max-width:450px; + padding:0 +} +.startpage.counters{ + padding:18px 10px 12px +} +.startpage .bottom-page.left-cell,.startpage .bottom-page.right-cell{ + display:block; + text-align:center; + width:100% +} +.startpage.top-header{ + font-size:36px; + line-height:48px; + padding:70px 40px 32px +} +.startpage .affiliate-page.top-header{ + font-size:36px; + line-height:48px; + padding:70px 0 32px +} +.startpage.img-wrap{ + line-height:0; + margin-top:0; + position:relative +} +.startpage.top-notice{ + margin:0; + padding:0 40px 22px +} +.startpage.img2-progress{ + background-color:initial; + background-image:url(../imagery/mega-bottom-page-start_img2-1-2x.c527321c239566f4.png); + background-position:bottom; + background-repeat:no-repeat; + background-size:100% auto; + bottom:0; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.startpage.img2-progress.pr2,.startpage.img2-progress span{ + display:none +} +.startpage-download{ + display:block; + margin:68px 0 0 +} +.startpage.img4{ + width:100% +} +.startpage-chat-img{ + display:block; + margin:68px 25px 20px; + position:relative +} +.startpage-chat-content,.startpage-chat-content span{ + background-image:url(../imagery/mega-bottom-page-start_img4-1-2x.897b30beec3f0bce.png); + background-size:100% auto; + height:100%; + left:0; + overflow:hidden; + position:absolute; + top:0; + width:100% +} +.startpage-chat-content span{ + display:none +} +.startpage.img2{ + margin:0; + width:100% +} +.startpage .bottom-page.table.changed-order .left-cell,.startpage .bottom-page.table.changed-order .right-cell{ + height:auto; + max-width:none; + width:100% +} +.startpage .bottom-page.right-cell .img-description.mid-width{ + padding-left:0 +} +.startpage .bottom-page.table.changed-order .order2{ + display:block +} +.startpage .bottom-page.table.changed-order .order1{ + display:none +} +.bottom-page.angle-pad{ + padding-top:100px +} +.startpage.img3{ + margin:60px -40px 0 0; + width:120% +} +.startpage .bottom-page.grey-angle-bg{ + display:none +} +.startpage.img5{ + display:block; + float:none; + margin:26px 0 0 15px; + width:100% +} +.startpage.carousel-slide{ + width:70% +} +.startpage.carousel-slide.current{ + left:15% +} +.startpage.carousel-slide.next{ + left:30% +} +.startpage.carousel-slide.next,.startpage.carousel-slide.prev{ + top:0 +} +.startpage.italic-text{ + font-size:14px +} +.affiliate-page.top-banner .bottom-page.top-bl{ + margin-bottom:60px +} +.startpage.software-cell{ + display:block; + width:auto +} +.startpage.software{ + display:block; + margin-top:33px +} +.startpage.software-cell.imgs,.startpage.software-header i{ + display:none +} +.startpage.software-content{ + height:0; + opacity:0; + overflow:hidden; + padding-left:0; + text-align:center; + -webkit-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out +} +.startpage.software-content.expanded{ + height:auto; + opacity:1; + overflow:visible +} +.expanded .startpage.software-header,.expanded .startpage.software-header:first-child{ + border-bottom:3px solid #00c0a6; + border-top:0; + color:#373737; + font-family:var(--text-font-family-second-regular); + margin-left:0; + padding:9px 0 5px +} +.startpage.software-txt{ + padding:0 +} +.startpage.software-txt a,.startpage.software-txt a:visited,.startpage.software-txt span{ + font-family:LatoWeb,Arial; + font-size:14px; + line-height:21px +} +.startpage.software-txt span{ + margin:0 auto; + padding:40px 0 16px +} +.startpage.software-txt a.icons{ + display:none +} +.startpage.software-content img{ + display:block; + margin:46px auto 0; + max-height:240px; + max-width:100%; + width:auto +} +.startpage.software-cell img.desktop{ + width:auto +} +.bottom-page.st-special-pad{ + padding-top:37px +} +.startpage.software-controls{ + display:inline-block +} +} +@media only screen and (max-width:680px){ +.startpage.features{ + border-spacing:0; + margin:0; + width:auto +} +.startpage.features-block{ + display:block; + margin:54px auto 0; + max-width:280px; + width:auto +} +} +@media only screen and (max-width:640px){ +.startpage .bottom-page.big-header.small-pad{ + padding-top:0 +} +.startpage.button-48-height{ + margin:0 5px +} +.startpage.buttons-block{ + padding:40px 0 20px +} +.startpage.button-48-height{ + margin:5px +} +} +@media only screen and (max-width:565px){ +.startpage.img1{ + margin:0 -20%; + width:140% +} +.affiliate.img-wrap img{ + margin:0 -30%; + width:160% +} +.startpage.flip-wrapper{ + margin:0 -43px; + padding:12px 0 32px +} +.startpage.top-header{ + font-size:26px; + line-height:38px; + padding:60px 24px 32px +} +.startpage .affiliate-page.top-header{ + font-size:26px; + line-height:38px; + padding:60px 0 32px +} +.startpage .bottom-page.big-header{ + font-size:26px; + line-height:38px +} +.startpage.carousel-control{ + left:-10px; + margin-top:-16px +} +.startpage.carousel-control.next{ + left:auto; + right:-10px +} +.startpage.carousel{ + height:auto +} +.startpage.carousel-slide{ + left:0; + width:100% +} +.startpage.carousel-slide.current{ + left:0; + opacity:1; + position:static; + width:100% +} +.startpage.carousel-slide.next,.startpage.carousel-slide.prev{ + left:0; + opacity:0 +} +.bottom-page.banner-control{ + left:5px +} +.bottom-page.banner-control.next{ + left:auto; + right:5px +} +.bottom-page.compare-txt{ + font-size:14px; + line-height:17px; + padding:24px 0 0 +} +.bottom-page.compare-txt a{ + display:block +} +.bottom-page.st-special-pad{ + padding-top:37px +} +.startpage.software-content img{ + margin-top:20px; + max-height:200px +} +.expanded .startpage.software-txt{ + min-height:170px +} +.startpage.features-content .head{ + font-size:20px +} +.startpage.features-content{ + font-size:14px; + line-height:21px +} +} +@media only screen and (max-width:420px){ +.startpage .affiliate-page.top-header,.startpage .bottom-page.big-header,.startpage.top-header{ + font-size:20px; + line-height:28px +} +.startpage .mid-green-link,.startpage .mid-green-link.small,.startpage.top-info{ + font-size:14px; + line-height:18px +} +.startpage.top-info strong{ + font-size:14px +} +.bottom-page.angle-pad{ + padding-top:100px +} +.startpage.img3{ + margin:60px -30px -30px 0 +} +.startpage .bottom-page.grey-angle-bg{ + background-position:center 20px +} +.flip-bg,.flip-block{ + font-size:20px; + height:32px; + line-height:32px; + width:20px +} +.startpage .bottom-page.mid-header,.startpage .bottom-page.small-info{ + font-size:14px +} +.startpage .bottom-page.small-info{ + padding:20px 0 0 +} +.startpage-download{ + margin:40px 0 0 +} +.startpage.img3{ + margin:20px -30px -40px 0 +} +.startpage.flip-wrapper{ + padding:0 +} +.startpage-chat-img{ + margin-bottom:10px +} +.bottom-page.banner-control{ + top:430px +} +.expanded .startpage.software-txt{ + min-height:190px +} +.startpage.software-content img{ + margin-top:0; + max-height:150px +} +.startpage .bottom-page.big-header.small-pad{ + padding-bottom:0 +} +} +@media only screen and (max-width:320px){ +.startpage.software-content img{ + max-height:138px +} +.bottom-page.top-banner.banner2{ + padding-bottom:0 +} +} + +.icon12{ + --icon-size:12px +} +.icon16{ + --icon-size:16px +} +.icon24{ + --icon-size:24px +} +.icon32{ + --icon-size:32px +} +.icon48{ + --icon-size:48px +} +i.icon-red{ + --mask-color:var(--secondary-red) +} +i.icon-green{ + --mask-color:var(--secondary-green) +} +i.icon-blue{ + --mask-color:var(--secondary-blue) +} +i.icon-yellow{ + --mask-color:var(--secondary-orange) +} +i.icon-white{ + --mask-color:var(--secondary-white) +} +i{ + display:inline-block; + flex-grow:0; + flex-shrink:0 +} +.big-icon,.huge-icon,.icon56,.medium-icon,.semi-big-icon,.semi-small-icon,.small-icon,.tiny-icon{ + background-image:url(../imagery/mega-new-chat-sprite.40f37d9cda30e011.png); + background-position:0 -1447px; + background-repeat:no-repeat; + display:inline-block; + height:20px; + vertical-align:top; + width:20px +} +.huge-grey-warning{ + background-image:url(../imagery/mega-new-chat-sprite.40f37d9cda30e011.png); + background-position:center -1838px; + background-repeat:no-repeat; + display:block; + height:184px; + margin:21px auto; + width:220px +} +.tiny-icon{ + height:16px; + width:12px +} +.semi-small-icon{ + height:18px; + width:18px +} +.medium-icon{ + height:28px; + width:28px +} +.semi-big-icon,.small-block .big-icon{ + height:32px; + width:32px +} +.big-icon{ + height:48px; + width:48px +} +.icon56{ + height:56px; + width:56px +} +.semi-huge-icon{ + display:inline-block; + height:64px; + width:64px +} +.huge-icon{ + height:140px; + width:140px +} +.white-medium-plus{ + background-position:-2px -1447px +} +.grey-medium-plus{ + background-position:-2px -1474px +} +.grey-small-plus{ + background-position:-42px -1474px +} +.smiling-face{ + background-position:-89px -853px; + height:22px; + width:22px +} +.tiny-icon.laughing-face-with-plus{ + background-position:-125px -498px; + height:16px; + width:16px +} +.hover-colorized:hover .tiny-icon.laughing-face-with-plus,.tiny-icon.laughing-face-with-plus.colorized{ + background-position:-164px -498px +} +.small-icon.laughing-face-with-plus{ + background-position:-125px -569px +} +.small-icon.bold-left-arrow{ + background-position:-199px -496px +} +.small-icon.three-dots{ + background-position:-200px -533px +} +.right-aligned-msg-buttons.total-1 .tiny-icon.laughing-face-with-plus,.small-icon.laughing-face{ + background-position:-122px -531px; + height:22px; + width:22px +} +.right-aligned-msg-buttons.total-1 .hover-colorized:hover .tiny-icon.laughing-face-with-plus,.small-icon.laughing-face.colorized{ + background-position:-160px -531px +} +.laughing-face{ + background-position:-89px -853px; + height:22px; + width:22px +} +.tiny-icon.eye{ + background-position:-50px -1197px; + height:14px; + width:14px +} +.tiny-icon.blue-handset{ + background-position:-6px -2217px +} +.tiny-icon.white-handset{ + background-position:-46px -2217px +} +.tiny-icon.grey-down-arrow{ + background-position:-8px 4px +} +.tiny-icon.icons-sprite.grey-dots{ + background-position:-160px -831px; + width:13px +} +.tiny-icon.icons-sprite.grey-arrow{ + background-position:-162px -1318px; + width:13px +} +.tiny-icon.icons-sprite.refresh{ + background-position:-189px -1318px +} +.tiny-icon.icons-sprite.top-arrow{ + background-position:-217px -1317px +} +.tiny-icon.grey-minus-icon{ + background-position:-11px -3609px +} +.minimized .tiny-icon.grey-minus-icon,.tiny-icon.grey-plus-icon{ + background-position:-51px -3609px +} +.tiny-icon.green-tick,.tiny-icon.red-cross{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-12px -1437px +} +.tiny-icon.red-cross{ + background-position:-12px -1403px +} +.tiny-icon.blue-key{ + background-position:-172px -1237px; + width:16px +} +.tiny-icon.green-key{ + background-position:-212px -1237px; + width:16px +} +.small-icon.tiny-reset{ + background-position:-170px -896px +} +.small-icon.tiny-searching{ + background-position:-50px -896px +} +.small-icon.tiny-pause{ + background-position:-110px -896px +} +.small-icon.tiny-play{ + background-position:-140px -896px +} +.small-icon.tiny-complete{ + background-position:-80px -896px +} +.small-icon.thin-back-icon{ + background-position:1px -4642px +} +.small-icon.gif{ + background-position:-39px -4641px; + height:22px; + width:22px +} +.small-icon.giphy{ + background-position:-85px -4642px; + width:84px +} +.huge-icon.sad-smile{ + background-position:-3px -4688px; + height:100px; + width:100px +} +.small-icon.white-play{ + background-position:-3px -1747px +} +.small-icon.white-pause{ + background-position:-47px -1747px +} +.small-icon.audio-call{ + background-position:-4px -38px +} +.small-icon.video-call{ + background-position:-5px -74px +} +.small-icon.rounded-grey-plus{ + background-position:-4px -110px +} +.small-icon.rounded-grey-up-arrow{ + background-position:-4px -146px +} +.small-icon.shared-grey-folder{ + background-position:-4px -182px +} +.small-icon.rounded-stop{ + background-position:-4px -218px +} +.small-icon.chat-lock{ + background-position:-51px -4136px; + height:24px; + margin-left:-2px; + margin-right:1px; + width:24px +} +.chat-right-area .buttons-block .link-button i.small-icon.chat-lock{ + margin-top:5px +} +.small-icon.grey-letter{ + background-position:-4px -2154px +} +.small-icon.conversations{ + background-position:-3px -3012px; + width:21px +} +.small-icon.refresh-circle{ + background-position:-4px -2074px +} +.small-icon.grey-cloud{ + background-position:-4px -263px +} +.small-icon.grey-computer{ + background-position:-4px -305px +} +.small-icon.red-cross{ + background-position:-3px -462px +} +.small-icon.writing-pen{ + background-position:-53px -347px +} +.small-icon.clear-arrow{ + background-position:-54px -2074px +} +.small-icon.quotes{ + background-position:-3px -389px +} +.small-icon.human-profile{ + background-position:-3px -496px +} +.small-icon.eye-icon{ + background-position:-44px -497px +} +.small-icon.conversation-icon{ + background-position:-44px -533px +} +.small-icon.cogwheel-icon{ + background-position:-44px -577px +} +.small-icon.gentleman{ + background-position:-54px -302px +} +.small-icon.dashed-conversation{ + background-position:-3px -533px +} +.small-icon.square-profile{ + background-position:-3px -663px +} +.dropdown-item .small-icon.square-profile.colorized{ + background-position:-131px -934px; + height:22px; + margin-top:5px; + width:22px +} +.small-icon.play-icon{ + background-position:-2px -703px +} +.small-icon.search-icon{ + background-position:-5px -1287px +} +.small-icon.thin-search-icon{ + background-position:-50px -774px +} +.small-icon.rounded-grey-down-arrow{ + background-position:-3px -2931px +} +.small-icon.icons-sprite.grey-chain{ + background-position:-200px -133px; + width:22px +} +.small-icon.circle-with-arrow{ + background-position:-4px -735px +} +.small-icon.horizontal-red-handset{ + background-position:-54px -38px +} +.small-icon.grey-triangle{ + background-position:-52px -146px +} +.small-icon.yellow-triangle{ + background-position:-52px -111px +} +.square-button .small-icon{ + height:22px; + width:22px +} +.conversations-pane li.active .small-icon.grey-videocam,.small-icon.white-videocam{ + background-position:-102px -3267px +} +.small-icon.grey-videocam{ + background-position:-212px -3267px +} +.small-icon.blue-videocam{ + background-position:-172px -3267px +} +.conversations-pane li.active .small-icon.grey-crossed-mic,.small-icon.white-crossed-mic{ + background-position:-28px -3268px +} +.small-icon.grey-crossed-mic{ + background-position:-65px -3268px +} +.small-icon.grey-call-on-hold{ + background-position:-86px -1747px +} +.small-icon.white-call-on-hold,li.active .small-icon.grey-call-on-hold{ + background-position:-126px -1747px +} +.small-icon.clock-icon{ + background-position:-2px -3200px +} +.small-icon.smile-icon{ + background-position:-34px -3200px +} +.small-icon.leaf-icon{ + background-position:-66px -3200px +} +.small-icon.cutlery-icon{ + background-position:-98px -3200px +} +.small-icon.ball-icon{ + background-position:-130px -3200px +} +.small-icon.bowling-ball-icon{ + background-position:-162px -3200px +} +.small-icon.car-icon{ + background-position:-2px -3230px +} +.small-icon.bulb-icon{ + background-position:-34px -3230px +} +.small-icon.heart-icon{ + background-position:-66px -3230px +} +.small-icon.flag-icon{ + background-position:-98px -3230px +} +.small-icon.tab-icon{ + background-position:-5px -3829px +} +.small-icon.enter-icon{ + background-position:-43px -3829px +} +.small-icon.chat-with-plus{ + background-position:-50px -736px; + width:21px +} +.small-icon.thin-search-icon{ + background-position:-81px -3829px +} +.small-icon.conversation-with-plus{ + background-position:-170px -934px; + height:21px; + margin:5px 0 0 5px !important; + width:22px +} +.small-icon.mid-green-tick{ + background-position:-150px -1017px +} +.small-icon.grey-left-arrow,.small-icon.grey-right-arrow{ + background-position:-121px -1017px +} +.small-icon.grey-left-arrow{ + -webkit-transform:rotate(180deg); + -moz-transform:rotate(180deg); + -o-transform:rotate(180deg); + -ms-transform:rotate(180deg); + transform:rotate(180deg) +} +.small-icon.arrow-in-square{ + background-position:-170px -775px +} +.small-icon.arrow-in-square.active{ + background-position:-50px -855px +} +.tiny-icon.small-cross{ + background-position:-184px -1020px +} +.tiny-icon.right-arrow{ + background-position:-205px -898px +} +.expanded .tiny-icon.right-arrow,.tiny-icon.down-arrow{ + background-position:-205px -898px; + -webkit-transform:rotate(90deg); + -ms-transform:rotate(90deg); + transform:rotate(90deg) +} +.small-icon.archive{ + background-position:-54px -262px +} +.small-icon.archive.white{ + background-position:-104px -262px +} +.small-icon.unarchive{ + background-position:-154px -262px +} +.small-icon.person{ + background-position:-54px -292px +} +.small-icon.person.white{ + background-position:-104px -292px +} +.small-icon.tiny-down-arrow{ + background-position:-154px -292px +} +.small-icon.tiny-down-arrow.flipped{ + background-position:-204px -292px +} +.small-icon.chatlock{ + background-position:-54px -262px +} +.dropdown-item .small-icon.icons-sprite.reverted-clock{ + background-position:-200px -1200px +} +.dropdown-item:hover .small-icon.icons-sprite.reverted-clock{ + background-position:-40px -1200px +} +.dropdown-item .small-icon.rounded-grey-plus{ + background-position:-3px -3131px +} +.dropdown-item:hover .small-icon.circle-with-arrow{ + background-position:-4px -1225px +} +.dropdown-item:hover .small-icon.rounded-grey-plus{ + background-position:-3px -3171px +} +.dropdown-item .small-icon.search-icon{ + background-position:-3px -2681px +} +.dropdown-item .small-icon.grey-cloud{ + background-position:-3px -579px; + margin-right:8px; + width:21px +} +.dropdown-item .small-icon.grey-computer{ + background-position:-3px -2501px +} +.small-icon.grey-computer.colorized{ + background-position:-89px -934px +} +.dropdown-item.light i.small-icon.grey-computer.colorized{ + background-position:-89px -934px; + margin:4px 0 0 5px; + width:23px +} +.dropdown-item .small-icon.rounded-grey-up-arrow{ + background-position:-3px -620px +} +.dropdown-item .small-icon.rounded-grey-down-arrow{ + background-position:-3px -2721px +} +.dropdown-item .small-icon.grey-chain{ + background-position:-3px -2761px +} +.dropdown-item .small-icon.icons-sprite.chain{ + background-position:-200px -133px; + margin:6px 8px 1px -1px; + width:22px +} +.dropdown-item .small-icon.writing-pen{ + background-position:-3px -347px +} +.dropdown-item:hover .small-icon.conversations{ + background-position:-3px -3092px +} +.dropdown-item:hover .small-icon.grey-chain{ + background-position:-3px -2881px +} +.dropdown-item:hover .small-icon.icons-sprite.chain{ + background-position:-240px -133px +} +.dropdown-item:hover .small-icon.rounded-grey-down-arrow{ + background-position:-3px -2841px +} +.dropdown-item:hover .small-icon.search-icon{ + background-position:-3px -2801px +} +.dropdown-item:hover .small-icon.grey-cloud{ + background-position:-4px -773px +} +.dropdown-item:hover .small-icon.grey-computer{ + background-position:-4px -815px +} +.dropdown-item:hover .small-icon.red-cross{ + background-position:-3px -926px +} +.dropdown-item:hover .small-icon.writing-pen{ + background-position:-3px -857px +} +.dropdown-item:hover .small-icon.quotes{ + background-position:-3px -899px +} +.dropdown-item:hover .small-icon.human-profile{ + background-position:-3px -986px +} +.dropdown-item:hover .small-icon.eye-icon{ + background-position:-84px -497px +} +.dropdown-item:hover .small-icon.conversation-icon{ + background-position:-84px -533px +} +.dropdown-item:hover .small-icon.cogwheel-icon{ + background-position:-84px -577px +} +.dropdown-item:hover .small-icon.gentleman{ + background-position:-104px -302px +} +.dropdown-item:hover .small-icon.dashed-conversation{ + background-position:-3px -1023px +} +.dropdown-item:hover .small-icon.rounded-grey-up-arrow{ + background-position:-3px -1110px +} +.dropdown-item:hover .small-icon.square-profile{ + background-position:-3px -1153px +} +.dropdown-item:hover .small-icon.play-icon{ + background-position:-2px -1193px +} +.dropdown-item .small-icon.audio-call{ + background-position:-104px -38px +} +.dropdown-item:hover .small-icon.audio-call{ + background-position:-154px -38px +} +.dropdown-item .small-icon.video-call{ + background-position:-104px -74px +} +.dropdown-item:hover .small-icon.video-call{ + background-position:-154px -74px +} +.dropdown-item:hover .small-icon.rounded-stop{ + background-position:-54px -218px +} +.dropdown-item.opened .small-icon.context.sortgrid,.dropdown-item:hover .small-icon.context.sortgrid{ + background-position:-117px -1992px +} +.dropdown.body:not(.context) .dropdown-item .small-icon.remove-link{ + margin:6px 8px 1px -1px +} +.dashed-conversation{ + background-position:1px -1644px +} +.call-icon{ + background-image:url(../imagery/mega-new-chat-sprite.40f37d9cda30e011.png); + background-repeat:no-repeat; + display:block; + height:32px; + width:32px +} +.call-icon.handset-with-stop{ + background-position:-58px -2318px +} +.call-icon.handset-with-yellow-arrow{ + background-position:-59px -2268px +} +.call-icon.handset-with-up-arrow{ + background-position:2px -2368px +} +.call-icon.handset-with-cross{ + background-position:2px -2418px +} +.call-icon.handset-with-yellow-cross{ + background-position:-118px -2268px +} +.call-icon.horizontal-handset{ + background-position:2px -2319px +} +.call-icon.crossed-handset{ + background-position:-58px -2368px +} +.call-icon.call-started,.call-icon.diagonal-handset{ + background-position:-58px -2418px +} +.call-icon.handset-with-down-arrow{ + background-position:2px -2268px +} +.call-icon.big{ + height:46px; + width:46px +} +.call-icon.big.handset-with-stop{ + background-position:-149px -2737px +} +.call-icon.big.handset-with-yellow-arrow{ + background-position:-149px -2678px +} +.call-icon.big.handset-with-up-arrow{ + background-position:-69px -2677px +} +.call-icon.big.handset-with-cross{ + background-position:-69px -2857px +} +.call-icon.big.handset-with-yellow-cross{ + background-position:-69px -2917px +} +.call-icon.big.horizontal-handset{ + background-position:-69px -2735px +} +.call-icon.big.crossed-handset{ + background-position:-149px -2797px +} +.call-icon.big.diagonal-handset{ + background-position:-149px -2857px +} +.call-icon.big.handset-with-down-arrow{ + background-position:-69px -2797px +} +.huge-white-icon{ + background-image:url(../imagery/mega-chat-static-sprite.7f7fec6e606a8d34.png); + background-position:0 0; + background-repeat:no-repeat; + display:block; + height:70px; + width:70px +} +.huge-white-icon.loupe{ + background-position:center -195px +} +.huge-white-icon.play{ + background-position:center -104px +} +.shared-link.small-icon{ + background-image:url(../imagery/mega-chat-static-sprite.7f7fec6e606a8d34.png); + background-position:0 0; + background-repeat:no-repeat; + display:inline-block; + height:16px; + margin:2px 6px 0 0; + vertical-align:top; + width:16px +} +.shared-link.small-icon.vimeo{ + background-position:-14px 0 +} +.shared-link.small-icon.youtube{ + background-position:-14px -40px +} +.semi-big-icon.conversations,.small-block .big-icon.conversations{ + background-position:-161px -3386px +} +.semi-big-icon.conversations-blue,.small-block .big-icon.conversations-blue,.small-block button.unread .big-icon.conversations,button.unread .semi-big-icon.conversations{ + background-position:-201px -3386px +} +.semi-big-icon.microphone,.small-block .big-icon.microphone{ + background-position:-161px -3317px +} +.semi-big-icon.crossed-microphone,.small-block .big-icon.crossed-microphone,.small-block button.active .big-icon.microphone,button.active .semi-big-icon.microphone{ + background-position:-201px -3317px +} +.semi-big-icon.videocam,.small-block .big-icon.videocam{ + background-position:-161px -3446px +} +.semi-big-icon.crossed-videocam,.small-block .big-icon.crossed-videocam,.small-block button.active .big-icon.videocam,button.active .semi-big-icon.videocam{ + background-position:-201px -3446px +} +.semi-big-icon.horizontal-red-handset,.small-block .big-icon.horizontal-red-handset{ + background-position:-161px -3494px +} +.semi-big-icon.nwse-resize,.small-block .big-icon.nwse-resize{ + background-position:-200px -3549px +} +.semi-big-icon.nwse-inset-resize,.small-block .big-icon.nwse-inset-resize,.small-block button.active .big-icon.nwse-resize,button.active .semi-big-icon.nwse-resize{ + background-position:-160px -3549px +} +.semi-big-icon.crossed-screenshare,.small-block .big-icon.crossed-screenshare{ + background-position:-153px -3127px +} +.semi-big-icon.screenshare,.small-block .big-icon.screenshare{ + background-position:-198px -3127px +} +.semi-big-icon.white-dots,.small-block .big-icon.white-dots{ + background-position:-41px -1786px +} +.semi-big-icon.grey-lock{ + background-position:-3px -3710px +} +.semi-big-icon.grey-tick{ + background-position:-3px -3770px +} +.big-icon.conversations{ + background-position:-17px -3375px +} +.big-icon.conversations-blue,button.unread .big-icon.conversations{ + background-position:-87px -3375px +} +.big-icon.microphone{ + background-position:-17px -3305px +} +.big-icon.crossed-microphone,button.active .big-icon.microphone{ + background-position:-87px -3306px +} +.big-icon.videocam{ + background-position:-19px -3435px +} +.big-icon.crossed-videocam,button.active .big-icon.videocam{ + background-position:-89px -3435px +} +.big-icon.horizontal-red-handset{ + background-position:-19px -3485px +} +.big-icon.nwse-resize{ + background-position:-84px -3537px +} +.big-icon.crossed-screenshare{ + background-position:-35px -3118px +} +.big-icon.screenshare{ + background-position:-92px -3118px +} +.big-icon.nwse-inset-resize,button.active .big-icon.nwse-resize{ + background-position:-14px -3537px +} +.big-icon.white-dots{ + background-position:-159px -1733px +} +.big-104px-icon{ + display:inline-block; + height:104px; + vertical-align:top; + width:104px +} +.small-icon.membership{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:center -2094px; + background-repeat:no-repeat; + height:22px; + position:relative +} +.small-icon.membership.pro4{ + background-position:center -2124px +} +.small-icon.membership.pro1{ + background-position:center -2154px +} +.small-icon.membership.pro2{ + background-position:center -2184px +} +.small-icon.membership.pro3{ + background-position:center -2214px +} +.small-icon.membership.pro100{ + background-image:url(../imagery/mega-big-icons.af0093a3433fb0ee.png); + background-position:-149px -415px; + background-repeat:no-repeat; + height:22px; + position:relative +} +.tiny-icon.cog{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-17px -10463px +} +.medium-icon.rocket{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-7px -16px +} +.medium-icon.down-arrow{ + background-image:url(../imagery/mega-pages-sprite.d526aeedf2a8cd8.png); + background-position:0 -712px; + width:18px +} +.medium-icon.icons-img,.semi-big-icon.icons-img{ + background-image:url(../imagery/mega-icons-sprite.48528e60724d858e.png) +} +.medium-icon.icons-img.close{ + background-position:-47px -687px +} +.medium-icon.icons-img.chain{ + background-position:-237px -129px +} +.medium-icon.icons-img.grey-chain{ + background-position:-197px -129px +} +.medium-icon.icons-img.share{ + background-position:-230px -1005px +} +.medium-icon.icons-img.arrow-in-circle{ + background-position:-47px -631px +} +.medium-icon.icons-img.i-in-circle{ + background-position:-69px -1392px +} +.medium-icon.icons-img.remove-to-bin{ + background-position:-237px -317px +} +.medium-icon.icons-img.heart{ + background-position:-237px -495px +} +.medium-icon.icons-img.broken-heart{ + background-position:-237px -99px +} +.medium-icon.icons-img.red-heart{ + background-position:-111px -825px +} +.medium-icon.icons-img.fullscreen.icon-fullscreen-enter{ + background-position:-95px -580px +} +.medium-icon.icons-img.fullscreen.icon-fullscreen-leave{ + background-position:-141px -580px +} +.medium-icon.icons-img.fullscreen{ + background-position:-95px -580px +} +.medium-icon.icons-img.lowscreen{ + background-position:-141px -580px +} +.medium-icon.icons-img.plus{ + background-position:-149px -1392px +} +.medium-icon.icons-img.minus{ + background-position:-109px -1392px +} +.medium-icon.icons-img.refresh{ + background-position:-237px -347px +} +.medium-icon.icons-img.volume{ + background-position:-222px -777px +} +.no-audio .medium-icon.icons-img.volume{ + background-position:-222px -817px +} +.medium-icon.icons-img.volume-muted{ + background-position:-222px -741px +} +.medium-icon.icons-img.icon-play,.medium-icon.icons-img.play{ + background-position:-42px -537px +} +.medium-icon.icons-img.icon-pause,.medium-icon.icons-img.pause{ + background-position:-93px -630px +} +.semi-big-icon.icons-img.pause{ + background-position:2px -1440px +} +.semi-big-icon.icons-img.play{ + background-position:-208px -1440px +} +.semi-big-icon.icons-img.cross{ + background-position:-158px -1439px +} +.semi-big-icon.icons-img.prev{ + background-position:-48px -1440px +} +.semi-big-icon.icons-img.next{ + background-position:-108px -1440px +} +.huge-white-icon.achievement,.mid-white-icon{ + background-image:url(../imagery/mega-account-sprite.b1005bdaf399cdee.png); + height:72px; + width:72px +} +.huge-white-icon.achievement.ach-create-account{ + background-position:0 -86px +} +.mid-white-icon.ach-create-account{ + background-position:-2px -74px; + background-size:144px auto; + display:block; + height:56px; + width:56px +} +.huge-white-icon.achievement.ach-install-megasync{ + background-position:-104px -86px +} +.huge-white-icon.achievement.ach-install-mobile-app{ + background-position:0 -175px +} +.huge-white-icon.achievement.ach-take-tour{ + background-position:-104px -175px +} +.huge-white-icon.achievement.ach-verify-number{ + background-position:0 -264px +} +.huge-white-icon.achievement.ach-invite-friend{ + background-position:-104px -264px +} +.huge-white-icon.achievement.ach-group-chat{ + background-position:0 -353px +} +.huge-white-icon.achievement.ach-share-folder{ + background-position:-104px -353px +} +.big-icon.cloud{ + background-position:0 -10734px +} +.big-icon.cloud,.big-icon.speedometer{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.big-icon.speedometer{ + background-position:0 -10684px +} +.semi-big-icon.cloud-up{ + background-position:-7px -10390px +} +.semi-big-icon.cloud-down,.semi-big-icon.cloud-up{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.semi-big-icon.cloud-down{ + background-position:-7px -10420px +} +.medium-icon.cloud{ + background-position:-11px -10817px +} +.medium-icon.cloud,.medium-icon.speedometer{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + height:24px; + width:24px +} +.medium-icon.speedometer{ + background-position:-11px -10851px +} +.small-icon.grey-chain{ + background-position:-3px -2971px +} +.small-icon.grey-plus{ + background-position:-14px -10991px +} +.semi-small-icon.file,.small-icon.grey-plus{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.semi-small-icon.file{ + background-position:-4px -11021px +} +.semi-small-icon.folder{ + background-position:-4px -11047px +} +.semi-small-icon.folder,.semi-small-icon.left-arrow{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.semi-small-icon.left-arrow{ + background-position:-29px -11019px +} +.semi-small-icon.right-arrow{ + background-position:-29px -11045px +} +.semi-small-icon.right-arrow,.semi-small-icon.rubbish{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.semi-small-icon.rubbish{ + background-position:-4px -11073px +} +.semi-small-icon.rubbish-arrows{ + background-position:-3px -11073px +} +.semi-small-icon.linked,.semi-small-icon.rubbish-arrows{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.semi-small-icon.linked{ + background-position:-28px -11071px +} +.semi-small-icon.star{ + background-position:-4px -11097px +} +.semi-small-icon.cloud,.semi-small-icon.star{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.semi-small-icon.cloud{ + background-position:-3px -11895px +} +.semi-small-icon.down-arrow{ + background-position:-29px -11895px +} +.semi-small-icon.down-arrow,.semi-small-icon.left-arrow-with-dot{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.semi-small-icon.left-arrow-with-dot{ + background-position:-2px -11916px +} +.semi-small-icon.circle{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-3px -11937px +} +.huge-icon.achievement{ + background-image:url(../imagery/mega-big-achievements.f0758695a85fed0d.png) +} +.huge-icon.group-chat{ + background-position:-50px -1074px; + height:96px; + width:96px +} +.huge-icon.crossed-phone{ + background-position:-74px -2989px; + height:70px; + width:70px +} +.big-icon.grey-play{ + background-position:-164px -2589px; + height:64px; + width:64px +} +.big-icon.white-pause{ + background-position:0 -2589px; + height:64px; + width:64px +} +.big-icon.group-chat{ + background-position:-176px -1075px; + height:48px; + width:48px +} +.huge-icon.lock{ + background-position:4px -4012px; + height:112px; + width:112px +} +.huge-icon.conversations{ + background-position:-115px -4012px; + height:112px; + width:112px +} +.huge-icon.email-with-chat{ + background-position:0 -4182px; + height:122px; + width:122px +} +.huge-icon.email-with-conversations{ + background-position:0 -4312px; + height:122px; + width:122px +} +.huge-icon.conversations-with-at-sign{ + background-position:0 -4455px; + height:106px; + width:111px +} +.big-icon.fm-s,.fm-s,.small-icon.fm-s{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.small-icon.info-icon.fm-s{ + background-position:-26px -12378px +} +.small-icon.double-l-arrows.fm-s{ + background-position:-27px -1680px +} +.active .small-icon.double-l-arrows.fm-s,.small-icon.double-r-arrows.fm-s{ + background-position:4px -1680px +} +.small-icon.blue-question.fm-s{ + background-position:6px -1741px +} +.small-icon.verify.fm-s{ + background-position:-14px -4586px +} +.small-icon.small-chain.fm-s{ + background-position:-13px -4824px +} +.ach-create-account .huge-icon.achievement{ + background-position:-2px 6px +} +.ach-install-megasync .huge-icon.achievement{ + background-position:-152px 6px +} +.ach-install-mobile-app .huge-icon.achievement{ + background-position:-302px 6px +} +.ach-take-tour .huge-icon.achievement{ + background-position:-2px -144px +} +.ach-invite-friend .huge-icon.achievement{ + background-position:-152px -144px +} +.ach-verify-number .huge-icon.achievement{ + background-position:-302px -144px +} +.ach-group-chat .huge-icon.achievement{ + background-position:-2px -294px +} +.ach-share-folder .huge-icon.achievement{ + background-position:-152px -294px +} +.green-tick .huge-icon.achievement{ + background-position:-2px -444px +} +.semi-big-icon.cloud{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-9px -11163px +} +.exceeded .semi-big-icon.cloud{ + background-position:-9px -11234px +} +.semi-big-icon.speedometer{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-9px -11128px +} +.exceeded .semi-big-icon.speedometer{ + background-position:-9px -11199px +} +.semi-small-icon.tick{ + background-position:-15px -11322px +} +.semi-small-icon.dots,.semi-small-icon.tick{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.semi-small-icon.dots{ + background-position:-15px -11288px +} +.semi-small-icon.rounded-arrow{ + background-position:-15px -11363px +} +.semi-small-icon.exclamation-point,.semi-small-icon.rounded-arrow{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.semi-small-icon.exclamation-point{ + background-position:-15px -11404px +} +.semi-big-icon.grnt-quota,.semi-big-icon.xscheduler{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + height:38px; + width:38px +} +.semi-big-icon.xscheduler{ + background-position:-5px -876px +} +.semi-big-icon.grnt-quota{ + background-position:-5px -12796px +} +.tiny-icon.membership-status{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-10px -979px; + width:16px +} +.tiny-icon.membership-status.lite{ + background-position:-10px -999px +} +.tiny-icon.membership-status.pro1{ + background-position:-10px -1019px +} +.tiny-icon.membership-status.pro2{ + background-position:-10px -1039px +} +.tiny-icon.membership-status.pro3{ + background-position:-10px -1059px +} +.tiny-icon.membership-status.pro100{ + background-image:url(../imagery/mega-big-icons.af0093a3433fb0ee.png); + background-position:-127px -418px; + height:16px; + width:16px +} +.semi-small-icon.grey-mega{ + background-position:-10px -326px +} +.semi-small-icon.grey-mega,.semi-small-icon.white-mega{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png) +} +.semi-small-icon.white-mega{ + background-position:-10px -701px +} +.semi-small-icon.yellow-triangle{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-10px -1266px +} +.small-icon.folder-upload{ + background-position:-14px -11705px; + height:24px; + width:24px +} +.small-icon.folder-upload,.small-icon.import-to-cloud{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.small-icon.import-to-cloud{ + background-position:-13px -4701px +} +.small-icon.download-as-zip{ + background-position:-13px -4733px +} +.small-icon.download-as-zip,.small-icon.pause-icon{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.small-icon.pause-icon{ + background-position:-14px -11505px +} +.small-icon.play-icon{ + background-position:-13px -11745px +} +.small-icon.play-icon,.small-icon.refresh-icon{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png) +} +.small-icon.refresh-icon{ + background-position:-14px -11665px +} +.small-icon.green-arrow{ + background-position:0 -56px +} +.small-icon.blue-arrow,.small-icon.green-arrow{ + background-image:url(../imagery/mega-register-big-sprite.c4d9847b9909de00.png) +} +.small-icon.blue-arrow{ + background-position:0 -99px +} +.small-icon.red-lens{ + background-position:-192px -585px +} +.small-icon.red-lens,.small-icon.red-play{ + background-image:url(../imagery/mega-icons-sprite.48528e60724d858e.png) +} +.small-icon.red-play{ + background-position:-233px -585px +} +.small-icon.small-play-icon{ + background-position:-148px -634px +} +.small-icon.context,.small-icon.small-play-icon{ + background-image:url(../imagery/mega-icons-sprite.48528e60724d858e.png) +} +.small-icon.context.standart-download{ + background-position:-1px -499px +} +.small-icon.context.download-as-zip{ + background-position:-101px -499px +} +.small-icon.context.labels{ + background-position:-101px -99px +} +.small-icon.context.download{ + background-position:-101px -138px +} +.small-icon.context.get-link{ + background-position:-200px -133px; + margin:6px 13px 1px -1px; + width:22px +} +.small-icon.context.syncmegasync{ + background-position:-200px -351px; + margin:6px 13px 1px -1px; + width:22px +} +.small-icon.context.remove-link{ + background-position:-200px -165px; + margin:6px 13px 1px -1px; + width:22px +} +.small-icon.context.embed{ + background-position:-233px -873px; + margin:6px 13px 1px -1px; + width:22px +} +.small-icon.context.share{ + background-position:-99px -172px; + margin:6px 12px 1px -1px; + width:23px +} +.small-icon.context.dispute{ + background-position:-3px -1697px; + margin:6px 13px 1px -1px; + width:22px +} +.small-icon.context.conversation{ + background-position:-1px -147px; + margin-left:-1px +} +.small-icon.context.sortgrid{ + background-position:-89px -1992px; + opacity:1 +} +.opened .small-icon.context.sortgrid{ + background-position:-117px -1992px +} +.small-icon.context.handset{ + background-position:-1px -333px +} +.small-icon.context.videocam{ + background-position:-1px -365px +} +.small-icon.context.writing-pen{ + background-position:-202px -226px +} +.small-icon.context.position-arrows{ + background-position:-200px -258px; + margin:6px 13px 1px -1px; + width:22px +} +.small-icon.context.cloned-files{ + background-position:-202px -288px; + height:24px; + margin-top:4px +} +.small-icon.context.plus{ + background-position:-201px -391px +} +.small-icon.context.folder-upload{ + background-position:-201px -461px +} +.small-icon.context.remove-to-bin{ + background-position:-200px -322px; + margin:6px 13px 1px -1px; + width:22px +} +.small-icon.context.loupe{ + background-position:-102px 1px +} +.small-icon.context.open-folder{ + background-position:-2px -1071px +} +.small-icon.context.cloud-folder{ + background-position:-124px -2261px; + opacity:.6 +} +.small-icon.context.info{ + background-position:-202px -71px +} +.small-icon.context.clock{ + background-position:-200px -1200px; + margin:6px 13px 1px 0 +} +.small-icon.context.clock-with-cross{ + background-position:-240px -1200px; + margin:6px 13px 1px 0 +} +.small-icon.context.heart{ + background-position:-202px -499px +} +.small-icon.context.broken-heart{ + background-position:-202px -103px +} +.small-icon.context.leave-share{ + background-position:-100px -539px; + margin-right:12px; + width:21px +} +.small-icon.context.red-cross{ + background-position:-102px -212px +} +.small-icon.context.pause{ + background-position:-1px -39px +} +.small-icon.context.play{ + background-position:-1px 1px +} +.small-icon.context.move-up{ + background-position:-1px -78px +} +.small-icon.context.move-down{ + background-position:-1px -110px +} +.small-icon.context.small-refresh{ + background-position:-202px 2px +} +.small-icon.context.network-diagnostic{ + background-position:-201px -538px +} +.small-icon.context.aim{ + background-position:-100px -60px; + height:22px; + margin:5px 13px 1px -1px; + width:22px +} +.small-icon.context.arrow-in-circle{ + background-position:-1px -228px +} +.small-icon.context.share-folder{ + background-position:-1px -260px +} +.small-icon.context.headset{ + background-position:-2px -179px +} +.small-icon.context.red-stop{ + background-position:-1px -299px +} +.small-icon.icons-sprite.bold-eye{ + background-position:0 -461px +} +.small-icon.icons-sprite.bold-crossed-eye{ + background-position:1px -1498px +} +.small-icon.icons-sprite.tooltip-arrow{ + background-image:none; + background-position:-165px -1354px; + border-left:11px solid transparent; + border-right:11px solid transparent; + border-top:9px solid var(--stroke-main-inverted); + height:0; + width:0 +} +.small-icon.icons-sprite.grey-plus{ + background-position:-200px -391px +} +.small-icon.icons-sprite.writing-pencil{ + background-position:-201px -226px +} +.small-icon.grey-key{ + background-position:-103px -346px +} +.small-icon.icons-sprite.writing-pencil{ + background-position:-201px -226px +} +.small-icon.icons-sprite.right-white-arrow{ + background-position:-33px -1396px +} +.small-icon.icons-sprite.red-cross-in-circle{ + background-position:-237px -1546px; + height:22px; + width:22px +} +.small-icon.icons-sprite.skip{ + background-position:-231px -1396px +} +.dropdown-item:hover .small-icon.icons-sprite.grey-plus{ + background-position:-240px -391px +} +.dropdown-item:hover .small-icon.context.arrow-in-circle{ + background-position:-41px -228px +} +.small-icon.dark-grey-plus{ + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-14px -11544px +} +.dropdown-item:hover .small-icon.context.share-folder{ + background-position:-41px -260px +} +.dropdown-item.opened .small-icon.context.headset,.dropdown-item:hover .small-icon.context.headset{ + background-position:-42px -179px +} +.dropdown-item:hover .small-icon.context.red-stop{ + background-position:-41px -299px +} +.dropdown-item:hover .small-icon.context.arrow-in-circle{ + background-position:-41px -228px +} +.dropdown-item:hover .small-icon.context.share-folder{ + background-position:-41px -260px +} +.dropdown-item.opened .small-icon.context.headset,.dropdown-item:hover .small-icon.context.headset{ + background-position:-42px -179px +} +.dropdown-item:hover .small-icon.context.red-stop{ + background-position:-41px -299px +} +.dropdown-item:hover .small-icon.icons-sprite.writing-pencil{ + background-position:-241px -226px +} +.dropdown-item:hover .small-icon.icons-sprite.bold-eye{ + background-position:-40px -461px +} +.dropdown-item:hover .small-icon.icons-sprite.bold-crossed-eye{ + background-position:-39px -1498px +} +.dropdown-item:hover .small-icon.context.download-as-zip{ + background-position:-141px -499px +} +.small-icon.context.az{ + background-position:0 -1276px +} +.small-icon.context.single-clock{ + background-position:-80px -1277px +} +.small-icon.context.status{ + background-position:-159px -1277px +} +.small-icon.context.cloud{ + background-position:-102px -30px +} +.small-icon.context.folder-item{ + background-position:-100px -291px +} +.small-icon.context.shared-folder-item{ + background-position:0 -260px +} +.small-icon.context.puf-folder{ + background-position:-150px -911px +} +.small-icon.context.create-widget{ + background-position:-82px -1071px +} +.small-icon.context.remove-widget{ + background-position:-162px -1071px +} +.small-icon.context.manage-widget{ + background-position:-202px -1112px +} +.dropdown-item:hover .small-icon.context.standart-download{ + background-position:-41px -499px +} +.dropdown-item:hover .small-icon.context.download-as-zip{ + background-position:-141px -499px +} +.dark .dropdown-item .small-icon.context.labels,body.theme-dark .dropdown-item .small-icon.context.labels{ + background-position:-141px -99px +} +.dropdown-item.opened .small-icon.context.download,.dropdown-item:hover .small-icon.context.download{ + background-position:-141px -138px +} +.dropdown-item:hover .small-icon.context.get-link{ + background-position:-240px -133px +} +.dropdown-item:hover .small-icon.context.remove-link{ + background-position:-240px -165px +} +.dropdown-item:hover .small-icon.context.embed{ + background-position:-233px -909px +} +.dropdown-item:hover .small-icon.context.share{ + background-position:-139px -172px +} +.dark .dropdown-item:not(.static) .small-icon.context.conversation,.dropdown-item:hover .small-icon.context.conversation{ + background-position:-41px -147px +} +.dropdown-item.opened .small-icon.context.handset,.dropdown-item:hover .small-icon.context.handset{ + background-position:-41px -333px +} +.dropdown-item:hover .small-icon.context.videocam{ + background-position:-41px -365px +} +.dropdown-item:hover .small-icon.context.writing-pen{ + background-position:-242px -226px +} +.dropdown-item.opened .small-icon.context.position-arrows,.dropdown-item:hover .small-icon.context.position-arrows{ + background-position:-240px -258px +} +.dropdown-item:hover .small-icon.context.cloned-files{ + background-position:-242px -288px +} +.dropdown-item:hover .small-icon.context.plus{ + background-position:-241px -391px +} +.dropdown-item:hover .small-icon.context.folder-upload{ + background-position:-241px -461px +} +.dropdown-item:hover .small-icon.context.remove-to-bin{ + background-position:-240px -322px +} +.dropdown-item:hover .small-icon.context.loupe{ + background-position:-142px 1px +} +.dropdown-item:hover .small-icon.context.open-folder{ + background-position:-42px -1071px +} +.dropdown-item:hover .small-icon.context.cloud-folder{ + background-position:-163px -2261px +} +.dropdown-item:hover .small-icon.context.info{ + background-position:-242px -71px +} +.dropdown-item:hover .small-icon.context.clock{ + background-position:-40px -1200px +} +.dropdown-item:hover .small-icon.context.clock-with-cross{ + background-position:-120px -1200px +} +.dark .dropdown-item:not(.static) .small-icon.context.heart,.dropdown-item:hover:not(.static) .small-icon.context.heart{ + background-position:-242px -499px +} +.dropdown-item:hover .small-icon.context.broken-heart{ + background-position:-242px -103px +} +.dropdown-item:hover .small-icon.context.red-cross{ + background-position:-142px -212px +} +.dropdown-item:hover .small-icon.context.pause{ + background-position:-41px -39px +} +.dropdown-item:hover .small-icon.context.play{ + background-position:-41px 1px +} +.dropdown-item:hover .small-icon.context.move-up{ + background-position:-41px -78px +} +.dropdown-item:hover .small-icon.context.move-down{ + background-position:-41px -110px +} +.dropdown-item:hover .small-icon.context.small-refresh{ + background-position:-242px 2px +} +.dropdown-item:hover .small-icon.context.network-diagnostic{ + background-position:-241px -538px +} +.dropdown-item:hover .small-icon.context.leave-share{ + background-position:-140px -539px +} +.dropdown-item:hover .small-icon.context.aim{ + background-position:-140px -60px +} +.dropdown-item.opened .small-icon.context.cloud,.dropdown-item:hover .small-icon.context.cloud{ + background-position:-142px -30px +} +.dropdown-item.opened .small-icon.context.folder-item,.dropdown-item:hover .small-icon.context.folder-item{ + background-position:-140px -291px +} +.dropdown-item.opened .small-icon.context.shared-folder-item,.dropdown-item:hover .small-icon.context.shared-folder-item{ + background-position:-40px -260px +} +.dropdown-item.opened .small-icon.context.puf-folder,.dropdown-item:hover .small-icon.context.puf-folder{ + background-position:-190px -911px +} +.small-icon.context.puf-folder{ + background-position:-150px -911px +} +.dropdown-item:hover .small-icon.context.create-widget{ + background-position:-122px -1071px +} +.dropdown-item:hover .small-icon.context.remove-widget{ + background-position:-202px -1071px +} +.dropdown-item:hover .small-icon.context.manage-widget{ + background-position:-42px -1112px +} +.dark .dropdown-item:not(.static) .small-icon.context.az,body.theme-dark .dropdown-item:not(.static) .small-icon.context.az{ + background-position:-40px -1277px +} +.dark .dropdown-item:not(.static) .small-icon.context.single-clock,.video.thumb .small-icon.icons-sprite.grey-clock,body.theme-dark .dropdown-item:not(.static) .small-icon.context.single-clock{ + background-position:-120px -1277px +} +.dark .dropdown-item:not(.static) .small-icon.context.status,body.theme-dark .dropdown-item:not(.static) .small-icon.context.status{ + background-position:-199px -1277px +} +.context-sprite,i.context-sprite{ + background-image:url(../imagery/mega-context-sprite.c0ef91be037d13ea.png) +} +.small-icon.context-sprite.plusfolder{ + background-position:0 1px +} +.small-icon.context-sprite.plusfile{ + background-position:-158px 0 +} +.small-icon.context-sprite.edit-file{ + background-position:-77px 0; + width:22px +} +.dropdown-item:hover .small-icon.context-sprite.edit-file{ + background-position:-117px 0 +} +.dropdown-item:hover .small-icon.context-sprite.plusfolder{ + background-position:-40px 1px +} +.dropdown-item:hover .small-icon.context-sprite.plusfile{ + background-position:-198px 0 +} +.small-icon.context-sprite.lock{ + background-position:-37px -44px +} +.small-icon.context-sprite.calendar{ + background-position:2px -44px +} +.small-icon.context-sprite.light-red-cross{ + background-position:-74px -44px +} +.huge-icon.storage-icon{ + background-image:url(../imagery/mega-account-sprite.b1005bdaf399cdee.png); + background-position:20px -771px; + background-repeat:no-repeat +} +.huge-icon.storage-icon.full{ + background-position:20px -651px +} +.semi-small-icon.rocket{ + background-position:-156px -619px +} +.semi-huge-icon.green-tick,.semi-small-icon.rocket{ + background-image:url(../imagery/mega-account-sprite.b1005bdaf399cdee.png) +} +.semi-huge-icon.green-tick{ + background-position:0 -1045px +} +.semi-huge-icon.speedometer{ + background-position:-102px -1407px +} +.semi-huge-icon.speedometer,.semi-huge-icon.storage{ + background-image:url(../imagery/mega-account-sprite.b1005bdaf399cdee.png); + height:68px; + width:68px +} +.semi-huge-icon.storage{ + background-position:-2px -1406px +} +.mega-dialog.achievements .semi-huge-icon.storage{ + background-position:-2px -88px +} +.semi-big-icon.blue-cloud{ + background-position:-100px -984px +} +.semi-big-icon.blue-cloud,.semi-big-icon.green-speedometer{ + background-image:url(../imagery/mega-account-sprite.b1005bdaf399cdee.png) +} +.semi-big-icon.green-speedometer{ + background-position:-100px -1032px +} +.big-104px-icon.speedometer{ + background-image:url(../imagery/mega-account-sprite.b1005bdaf399cdee.png); + background-position:2px -1269px +} +.big-104px-icon.speedometer.almost-full{ + background-position:2px -1139px +} +.small-icon.fm-s.green-plus{ + background-position:3px -4003px +} +.big-icon.fm-s.green-plus{ + background-position:10px -3939px +} +.big-icon.almost-full-storage{ + background-image:url(../imagery/mega-account-sprite.b1005bdaf399cdee.png); + background-position:-121px -790px; + height:52px; + width:52px +} +.small-icon.icons-sprite.clock{ + background-position:-79px -743px; + height:22px; + width:20px +} +.small-icon.icons-sprite.tiny-grey-clock{ + background-position:-83px -1728px; + height:20px; + width:20px +} +.small-icon.icons-sprite.email{ + background-position:-3px -1596px; + width:22px +} +.small-icon.icons-sprite.white-chain{ + background-position:-3px -1632px; + width:22px +} +.small-icon.icons-sprite.grey-clock{ + background-position:-79px -1276px; + width:21px +} +.medium-icon.icons-sprite.quote1{ + background-position:-40px -1629px +} +.medium-icon.icons-sprite.quote2{ + background-position:-89px -1629px +} +.medium-icon.icons-sprite.big-close{ + background-position:3px -777px +} +.small-icon.icons-sprite.down-arrow{ + background-position:-78px -832px +} +.small-icon.icons-sprite.reverted-clock{ + background-position:0 -1200px +} +.small-icon.icons-sprite.reverted{ + background-position:-120px -1596px +} +.small-icon.icons-sprite.tiny-red-cross{ + background-position:-84px -1596px +} +.small-icon.icons-sprite.tiny-green-tick{ + background-position:-41px -1546px +} +.small-icon.icons-sprite.tiny-grey-tick{ + background-position:-1px -1546px +} +.small-icon.icons-sprite.clock-with-cross{ + background-position:-80px -1200px +} +.small-icon.icons-sprite.stop{ + background-position:-121px -1546px +} +.small-icon.icons-sprite.rubbish-bin-icon{ + background-position:-40px -745px +} +.small-icon.icons-sprite.refresh-arrows{ + background-position:-79px -780px; + height:22px; + width:20px +} +.small-icon.icons-sprite.reverted-light-clock{ + background-position:-41px -829px; + height:22px; + width:20px +} +.small-icon.icons-sprite.earth{ + background-position:-116px -779px; + height:22px; + width:20px +} +.small-icon.icons-sprite.mobile-device{ + background-position:-116px -743px; + height:22px; + width:20px +} +.small-icon.icons-sprite.revert-small-arrow{ + background-position:-156px -745px +} +.small-icon.icons-sprite.filled-rubbish-bin{ + background-position:-192px -781px +} +.small-icon.icons-sprite.small-cross{ + background-position:1px -1316px +} +.small-icon.icons-sprite.lens{ + background-position:-205px -1731px +} +.icons-sprite,i.icons-sprite,i.small-icon.icons-sprite{ + background-image:url(../imagery/mega-icons-sprite.48528e60724d858e.png) +} +.medium-icon.icons-sprite.mega{ + background-position:-49px -1004px +} +.medium-icon.icons-sprite.big-mega,button .medium-icon.icons-sprite.mega{ + background-position:2px -1006px +} +.medium-icon.icons-sprite.download.big{ + background-position:0 -953px +} +.medium-icon.icons-sprite.download.big.resume{ + background-position:-55px -953px +} +.medium-icon.icons-sprite.download.big.save{ + background-position:-106px -953px +} +.semi-small-icon.icons-sprite.download{ + background-position:-84px -1925px +} +.semi-small-icon.icons-sprite.download.resume{ + background-position:-12px -1925px +} +.semi-small-icon.icons-sprite.download.save{ + background-position:-49px -1925px +} +.medium-icon.icons-sprite.share{ + background-position:-194px -1006px; + margin-right:0; + opacity:.6 +} +.small-icon.icons-sprite.thumb-up{ + background-position:-139px -1633px +} +.small-icon.icons-sprite.dark-down-arrow{ + background-position:5px -870px +} +.small-icon.icons-sprite.mega{ + background-position:4px -1237px +} +.small-icon.icons-sprite.red-down-arrow{ + background-position:-25px -870px +} +.small-icon.icons-sprite.cog{ + background-position:-158px -1199px +} +.paused .small-icon.icons-sprite.red-down-arrow{ + background-position:-55px -870px +} +.small-icon.icons-sprite.green-down-arrow{ + background-position:-44px -1729px +} +.small-icon.icons-sprite.mid-pause{ + background-position:-86px -872px +} +.small-icon.icons-sprite.mid-pause.active{ + background-position:-146px -871px +} +.small-icon.icons-sprite.pause-transfer{ + background-position:-123px -1729px; + cursor:pointer; + opacity:.6 +} +.small-icon.icons-sprite.pause-transfer:hover{ + opacity:.8 +} +.small-icon.icons-sprite.pause-transfer.active{ + background-position:-163px -1729px +} +.semi-small-icon.icons-sprite.pause{ + background-position:-117px -872px +} +.active .semi-small-icon.icons-sprite.pause{ + background-position:-146px -872px +} +.small-icon.icons-sprite.red-cross{ + background-position:-202px -1699px; + height:22px +} +.semi-small-icon.icons-sprite.folder-with-loupe{ + background-position:-203px -1549px +} +.semi-small-icon.icons-sprite.white-warning{ + background-position:-236px -1731px +} +.small-icon.icons-sprite.share{ + background-position:-235px -1633px +} +.semi-small-icon.icons-sprite.grey-down-arrow{ + background-position:4px -873px +} +.semi-small-icon.icons-sprite.green-tick{ + background-position:-28px -911px; + width:23px +} +.small-icon.icons-sprite.arrows-to-bottom{ + background-position:-84px -1699px +} +.active .small-icon.icons-sprite.arrows-to-bottom,.small-icon.icons-sprite.arrows-to-top{ + background-position:-124px -1699px +} +.small-icon.icons-sprite.lime-tick{ + background-position:-161px -1698px; + height:22px; + width:23px +} +.small-icon.icons-sprite.right-green-arrow{ + background-position:-14px -2185px; + height:14px; + width:10px +} +.small-icon.icons-sprite.bottom-blue-arrow{ + background-position:-133px -2182px; + width:12px +} +.small-icon.icons-sprite.next-arrow,.small-icon.icons-sprite.prev-arrow{ + background-position:-246px -2051px; + opacity:.6; + transform:rotate(-90deg) +} +.small-icon.icons-sprite.next-arrow.disabled,.small-icon.icons-sprite.prev-arrow.disabled{ + opacity:.2 +} +.small-icon.icons-sprite.next-arrow{ + transform:rotate(90deg) +} +.dark .small-icon.icons-sprite.bottom-blue-arrow{ + background-position:-103px -2182px +} +.small-icon.icons-sprite.bold-green-tick{ + background-position:-126px -2306px +} +.small-icon.icons-sprite.white-right-arrow{ + background-position:-9px -2306px; + width:25px +} +.semi-big-icon.icons-sprite.grey-right-arrow{ + background-position:-59px -2300px +} +.semi-small-icon.icons-sprite.tiny-clock{ + background-position:-124px -1160px +} +.semi-small-icon.icons-sprite.tiny-star{ + background-position:-164px -1160px +} +.semi-small-icon.icons-sprite.lens{ + background-position:-179px -873px +} +.download.big-icon{ + background-image:url(../imagery/mega-download-dialog.cf6daa0027e27782.png); + background-position:-622px -81px; + height:74px; + width:74px +} +.chrome .download.big-icon{ + background-position:2px -81px +} +.safari .download.big-icon{ + background-position:-282px -81px +} +.ff .download.big-icon{ + background-position:-412px -81px +} +.edge .download.big-icon{ + background-position:-184px -81px +} +.opera .download.big-icon{ + background-position:-82px -81px +} +.ie .download.big-icon{ + background-position:-522px -81px +} +.default-warning .download.big-icon,.medium-icon.right-arrow.icons-sprite{ + background-position:-708px -76px +} +.medium-icon.right-arrow.icons-sprite{ + background-position:-82px -1312px +} +.top-sprite,i.top-sprite{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-repeat:no-repeat +} +.top-sprite.medium-icon.white-right-arrow{ + background-position:-5px -2040px +} +.register-sprite{ + background-image:url(../imagery/mega-register-sprite.378a84f4453f99d5.png) +} +i.account-icon{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-repeat:no-repeat; + height:26px; + width:26px +} +i.account-icon.building{ + background-position:-6px -1660px +} +i.account-icon.phone{ + background-position:-6px -1620px +} +i.account-icon.person{ + background-position:-6px -1580px +} +i.account-icon.email{ + background-position:-6px -1700px +} +i.account-icon.lock{ + background-position:-6px -1740px +} +i.account-icon.globe{ + background-position:-6px -2072px +} +i.account-icon.mobile{ + background-position:-6px -2112px +} +i.account-icon.select-arrow{ + background-position:-6px -2150px +} +i.account-icon.menu{ + background-position:-5px -59px +} +.link-button.active>.small-icon,.link-button.red.active>.small-icon,.link-button.red:hover>.small-icon,.link-button:hover>.small-icon.colorized,.link-button>.small-icon.colorized{ + opacity:1 +} +.small-icon.square-profile.colorized{ + background-position:-131px -934px +} +.dropdown-item.light i.small-icon.square-profile.colorized{ + background-position:-131px -934px; + height:22px; + margin:4px 0 0 7px; + width:22px +} +.small-icon.audio-call.colorized{ + background-position:-90px -775px +} +.small-icon.video-call.colorized{ + background-position:-130px -775px +} +.small-icon.rounded-grey-up-arrow.colorized{ + background-position:-170px -736px +} +.small-icon.clear-arrow.colorized{ + background-position:-130px -736px +} +.small-icon.writing-pen.colorized{ + background-position:-130px -815px +} +.small-icon.rounded-plus.colorized{ + background-position:-50px -816px +} +.small-icon.rounded-stop.colorized{ + background-position:-90px -816px +} +.small-icon.horizontal-red-handset.colorized{ + background-position:-170px -815px; + width:21px +} +.small-icon.archive.colorized{ + background-position:-90px -736px +} +.small-icon.mute.colorized{ + background-position:-50px -1017px +} +.small-icon.muted.colorized{ + background-position:-210px -1017px +} +.small-icon.grey-cloud.colorized{ + background-position:-50px -934px; + width:22px +} +.small-icon.yellow-key.colorized{ + background-position:-89px -1237px; + width:22px +} +.small-icon.blue-chain.colorized{ + background-position:-50px -1236px +} +.small-icon.add-shared.colorized{ + background-position:-50px -1272px; + margin-top:-1px; + width:25px +} +.link-button.light i.small-icon.yellow-key.colorized{ + margin-left:5px +} +.dropdown-item.link-button.light i.small-icon.grey-cloud.colorized{ + background-position:-50px -934px; + margin-top:4px +} +.link-button.active>.small-icon,.link-button.red.active>.small-icon,.link-button.red:hover>.small-icon,.link-button:hover>.small-icon.colorized,.link-button>.small-icon.colorized{ + opacity:1 +} +.small-icon.square-profile.colorized{ + background-position:-131px -934px +} +.dropdown-item.light i.small-icon.square-profile.colorized{ + background-position:-131px -934px; + height:22px; + margin:4px 0 0 7px; + width:22px +} +.small-icon.audio-call.colorized{ + background-position:-90px -775px +} +.small-icon.video-call.colorized{ + background-position:-130px -775px +} +.small-icon.rounded-grey-up-arrow.colorized{ + background-position:-170px -736px +} +.small-icon.clear-arrow.colorized{ + background-position:-130px -736px +} +.small-icon.writing-pen.colorized{ + background-position:-130px -815px +} +.small-icon.rounded-plus.colorized{ + background-position:-50px -816px +} +.small-icon.rounded-stop.colorized{ + background-position:-90px -816px +} +.small-icon.horizontal-red-handset.colorized{ + background-position:-170px -815px; + width:21px +} +.small-icon.archive.colorized{ + background-position:-90px -736px +} +.small-icon.grey-cloud.colorized{ + background-position:-50px -934px; + width:22px +} +.dropdown-item.link-button.light i.small-icon.grey-cloud.colorized{ + background-position:-50px -934px; + margin-top:4px +} +.big-icons-sprite{ + background-image:url(../imagery/mega-big-icons.af0093a3433fb0ee.png) +} +.big-icon.big-icons-sprite.chain{ + background-position:1px -1741px +} +.big-icon.big-icons-sprite.folder-with-chain{ + background-position:-46px -1741px +} +.big-icon.big-icons-sprite.chat-with-chain{ + background-position:-94px -1741px +} +.big-icon.big-icons-sprite.user-with-chain{ + background-position:-142px -1741px +} +.icon56.big-icons-sprite.coin{ + background-position:-11px -1794px +} +.semi-huge-icon.big-icons-sprite.chain{ + background-position:-20px -1586px +} +.semi-huge-icon.big-icons-sprite.folder-with-chain{ + background-position:-111px -1588px +} +.semi-huge-icon.big-icons-sprite.chat-with-chain{ + background-position:-20px -1663px +} +.semi-huge-icon.big-icons-sprite.user-with-chain{ + background-position:-111px -1664px +} +.small-icon.dialog-sprite.arrows-to-bottom{ + background-position:-137px -5290px; + height:20px; + width:20px +} +.active .small-icon.dialog-sprite.arrows-to-bottom,.small-icon.dialog-sprite.arrows-to-top{ + background-position:-137px -5321px; + height:20px; + width:20px +} +.download-complete .bar-table .small-icon.dialog-sprite.arrows-to-bottom,.small-icon.dialog-sprite.dark-cross{ + background-position:-137px -5352px; + height:20px; + width:20px +} +.small-icon.dialog-sprite.question-mark{ + background-position:-112px -6983px +} +.small-icon.dialog-sprite.chain{ + background-position:-5px -6982px +} +.small-icon.dialog-sprite.key{ + background-position:-78px -6982px +} +.small-icon.dialog-sprite.cog{ + background-position:-39px -6982px +} +.small-icon.dialog-sprite.grey-eye{ + background-position:-5px -7012px +} +.small-icon.dialog-sprite.grey-crossed-eye{ + background-position:-40px -7012px +} +.small-icon.dialog-sprite.white-eye{ + background-position:-5px -7042px +} +.small-icon.dialog-sprite.white-crossed-eye{ + background-position:-40px -7042px +} +.small-icon.dialog-sprite.small-cross{ + background-position:-112px -7012px +} +.small-icon.dialog-sprite.grey-lock{ + background-position:-37px -4385px +} +.medium-icon.dialog-sprite.right-arrow{ + background-position:-136px -7008px +} + +.small-blue-spinner{ + -webkit-animation:rotate .8s linear infinite; + animation:rotate .8s linear infinite; + border:2px solid #2ba6de; + border-left-color:transparent; + border-radius:50%; + border-top:0; + box-sizing:border-box; + height:12px; + width:12px +} +.loading-spinner{ + left:0; + position:fixed; + text-align:center; + top:50%; + width:100%; + z-index:1112 +} +body.loading .loading-spinner{ + z-index:1212 +} +.loading-spinner .main-loader,.sub-loader{ + background:50% / 100% no-repeat url(../imagery/mega-loader-dark.10067de1c8e7e26c.gif); + background-color:var(--progress-bar-fill4); + border-radius:100%; + height:72px; + left:50%; + margin:-36px 0 0 -36px; + position:absolute; + top:0; + width:72px +} +.sub-loader{ + position:fixed; + top:50% +} +.loading-spinner.init .main-loader{ + height:0; + margin:0; + -webkit-transition:all .3s ease-in-out; + transition:all .3s ease-in-out; + width:0 +} +.loading-spinner.init.active .main-loader{ + height:72px; + margin:-36px 0 0 -36px; + width:72px +} +.loading-spinner.light .main-loader{ + background-color:var(--text-color-white-higher); + background-image:url(../imagery/mega-loader-light.2177661554e8398.gif); + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15) +} +.loading-spinner.light.small .main-loader{ + background-image:url(../imagery/mega-loader-light-small.24456ec8743e55fa.gif); + height:36px; + width:36px +} +.loading-spinner.light.small .main-loader:before{ + border-radius:inherit; + box-shadow:0 0 0 1px rgba(0, 0, 0, .05); + content:""; + display:block; + height:100% +} +.loading-info{ + color:var(--text-color-high); + font:var(--text-h1); + font-family:var(--text-font-family-light); + margin:0; + padding:0 +} +.loading-spinner.active .loading-info{ + padding:101px 0 0 +} +.loading-info li{ + box-sizing:border-box; + height:0; + list-style-type:none; + opacity:0; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.loading-info li.status-txt{ + font:var(-text-h3); + font-family:var(--text-font-family-light); + line-height:inherit; + margin-top:-40px; + overflow:hidden +} +.loading-info li.loaded,.loading-info li.loading{ + height:50px +} +.loading-info li.loading{ + opacity:1 +} +.loading-info li.loaded:nth-child(2){ + opacity:.5 +} +.loading-info li.loaded:nth-child(3){ + opacity:.25 +} +.loading-info li.loaded:nth-child(4){ + opacity:.12 +} +.loading-info li:after{ + -webkit-animation:rotate .8s linear infinite; + animation:rotate .8s linear infinite; + background:0 -504px no-repeat url(../imagery/mega-loading-sprite.e80d6d3a0b827536.png); + content:"\00a0"; + display:block; + display:inline-block; + height:16px; + margin:0 0 0 10px; + vertical-align:middle; + width:16px +} +.mobile .loading-info li:after{ + display:none +} +.loading-info li.loaded:after{ + -webkit-animation:none; + animation:none; + background-position:-29px -501px +} +.theme-dark .loading-info li.loaded:after{ + filter:invert(1) +} +.loader-progressbar{ + background-color:var(--progress-bar-fill4); + bottom:0; + height:12px; + opacity:0; + position:fixed; + -webkit-transition:all .3s ease-in-out; + transition:all .3s ease-in-out; + width:100% +} +.loader-progressbar.active{ + opacity:1 +} +.loader-percents{ + background-color:var(--progress-bar-fill2); + border-right:2px solid var(--progress-bar-fill1); + box-sizing:border-box; + height:12px; + opacity:.7; + overflow:hidden; + transform:scaleX(0); + transform-origin:left; + transition:transform .3s; + transition-timing-function:cubic-bezier(0, 1, .5, 1); + width:100% +} +.loader-percents.delay-loader{ + transition-duration:150s +} +.bouncing-loader{ + font-size:0; + left:50%; + line-height:0; + position:absolute; + top:50%; + transform:translate(-50%, -50%); + white-space:nowrap; + z-index:1000 +} +.bouncing-loader>span{ + -webkit-animation:sk-bouncedelay 1.4s ease-in-out infinite both; + animation:sk-bouncedelay 1.4s ease-in-out infinite both; + background-color:var(--stroke-main-inverted); + border-radius:100%; + display:inline-block; + height:16px; + margin:0 8px; + width:16px +} +.negative .bouncing-loader>span,.positive .bouncing-loader>span{ + background-color:var(--text-color-white-high) +} +.bouncing-loader>span:first-child{ + -webkit-animation-delay:-.32s; + animation-delay:-.32s +} +.bouncing-loader>span:nth-child(2){ + -webkit-animation-delay:-.16s; + animation-delay:-.16s +} +.bouncing-loader.small>span{ + height:6px; + margin:0 3px; + width:6px +} +@-webkit-keyframes sk-bouncedelay{ +0%,80%,to{ + -webkit-transform:scale(0) +} +40%{ + -webkit-transform:scale(1) +} +} +@keyframes sk-bouncedelay{ +0%,80%,to{ + transform:scale(0) +} +40%{ + transform:scale(1) +} +} +.cr-fountaing,.fountaing{ + height:12px; + left:50%; + margin:-1px 0 0 -50px; + position:absolute; + top:50%; + width:100px +} +.fountaing-circle{ + -webkit-animation-direction:linear; + animation-direction:linear; + -webkit-animation-duration:1.3s; + animation-duration:1.3s; + -webkit-animation-iteration-count:infinite; + animation-iteration-count:infinite; + -webkit-animation-name:bounce_fountaing; + animation-name:bounce_fountaing; + background-color:var(--stroke-grey-1-inverted); + border-radius:8px; + height:7px; + position:absolute; + top:0; + -webkit-transform:scale(.3); + transform:scale(.3); + width:7px +} +.cr-fountaing_1{ + -webkit-animation-delay:.52s; + animation-delay:.52s; + left:0 +} +.cr-fountaing_2{ + -webkit-animation-delay:.65s; + animation-delay:.65s; + left:13px +} +.cr-fountaing_3{ + -webkit-animation-delay:.78s; + animation-delay:.78s; + left:25px +} +.cr-fountaing_4{ + -webkit-animation-delay:.91s; + animation-delay:.91s; + left:38px +} +.cr-fountaing_5{ + -webkit-animation-delay:1.04s; + animation-delay:1.04s; + left:50px +} +.cr-fountaing_6{ + -webkit-animation-delay:1.17s; + animation-delay:1.17s; + left:63px +} +.cr-fountaing_7{ + -webkit-animation-delay:1.3s; + animation-delay:1.3s; + left:75px +} +.cr-fountaing_8{ + -webkit-animation-delay:1.43s; + animation-delay:1.43s; + left:88px +} +@-webkit-keyframes bounce_fountaing{ +0%{ + background-color:var(--stroke-grey-1-inverted); + -webkit-transform:scale(1) +} +to{ + background-color:var(--stroke-grey-1); + -webkit-transform:scale(.3) +} +} +@keyframes bounce_fountaing{ +0%{ + background-color:var(--stroke-grey-1-inverted); + transform:scale(1) +} +to{ + background-color:var(--stroke-grey-1); + transform:scale(.3) +} +} +@-webkit-keyframes rotate{ +0%{ + -webkit-transform:rotate(0deg) +} +to{ + -webkit-transform:rotate(1turn) +} +} +@keyframes rotate{ +0%{ + transform:rotate(0deg) +} +to{ + transform:rotate(1turn) +} +} +@-webkit-keyframes downward-arrow{ +0%{ + bottom:152px; + opacity:.4 +} +58%{ + bottom:120px; + opacity:1 +} +to{ + bottom:152px; + opacity:.4 +} +} +@keyframes downward-arrow{ +0%{ + bottom:152px; + opacity:.4 +} +58%{ + bottom:120px; + opacity:1 +} +to{ + bottom:152px; + opacity:.4 +} +} +.bubble-circle{ + -webkit-animation:load4 1.3s linear infinite; + animation:load4 1.3s linear infinite; + border-radius:50%; + color:var(--progress-bar-fill1); + font-size:14px; + height:1em; + margin:100px auto; + position:relative; + text-indent:-9999em; + -webkit-transform:translateZ(0); + -ms-transform:translateZ(0); + transform:translateZ(0); + width:1em +} +@-webkit-keyframes load4{ +0%,to{ + box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0 +} +12.5%{ + box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em +} +25%{ + box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em +} +37.5%{ + box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em +} +50%{ + box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em +} +62.5%{ + box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em +} +75%{ + box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0 +} +87.5%{ + box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em +} +} +@keyframes load4{ +0%,to{ + box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0 +} +12.5%{ + box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em +} +25%{ + box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em +} +37.5%{ + box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em +} +50%{ + box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em +} +62.5%{ + box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em +} +75%{ + box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0 +} +87.5%{ + box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em +} +} + +.business-register .disabled{ + opacity:.3 +} +.business-register .main-pad-block{ + margin:0; + position:relative +} +.bus-reg-body{ + margin:0 auto; + max-width:940px; + min-width:880px; + padding-top:124px; + position:relative +} +.bus-reg-body *,.card-container.bus-repay *{ + font-family:var(--text-font-family) +} +.bus-reg-header{ + color:var(--text-color-high); + font-size:40px; + line-height:48px; + margin-left:10px; + text-align:start +} +.bus-reg-info-block{ + margin-left:10px; + width:400px +} +.bus-reg-subheader{ + color:var(--text-color-high); + font:var(--text-h1); + margin-top:64px +} +.bus-reg-icon{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + height:24px; + width:24px +} +.bus-reg-body .password-stutus-txt{ + margin-top:8px +} +.bus-reg-radio-block{ + height:100%; + margin-top:32px; + padding-bottom:12px; + position:relative; + width:100% +} +.card-container.bus-repay .dialog-subtitle{ + font:var(--text-body1) +} +.card-container.bus-repay .bus-reg-radio-block{ + margin:0 +} +.bus-reg-body .bus-reg-radio-option,.bus-repay-block .bus-reg-radio-option{ + align-items:center; + cursor:pointer; + display:inline-flex; + margin-bottom:8px; + width:200px +} +.bus-reg-body .bus-reg-radio.not-first-child,.card-container.bus-repay .bus-reg-radio.not-first-child{ + -webkit-margin-start:32px; + margin-inline-start:32px +} +.bus-reg-body .provider,.card-container.bus-repay .provider{ + display:inline-block; + font:var(--text-body1); + vertical-align:middle +} +.bus-reg-body .payment-icon,.card-container.bus-repay .payment-icon{ + -webkit-margin-start:4px; + -webkit-margin-end:32px; + display:inline-block; + margin-inline-end:32px; + margin-inline-start:4px; + vertical-align:middle +} +.bus-reg-body .payment-icon i,.card-container.bus-repay .payment-icon i{ + --icon-size:24px +} +.bus-reg-agreement{ + align-items:flex-start; + cursor:pointer; + display:flex; + font:var(--text-body1); + margin-top:16px +} +.bus-reg-agreement .checkdiv{ + -webkit-margin-end:14px; + margin:2px 0; + margin-inline-end:14px; + vertical-align:top +} +.bus-reg-agreement.mega-terms .red{ + margin-left:4px +} +.bus-reg-agreement .bus-reg-txt{ + color:#999; + display:inline-block; + font-size:13px; + line-height:20px; + width:90% +} +.bus-reg-agreement .terms{ + color:#d90007; + cursor:pointer; + display:inline-block +} +.bus-reg-btn,.bus-reg-btn-2{ + float:right; + margin-bottom:88px; + margin-top:64px +} +.mega-button.bus-reg-btn-2{ + display:none +} +.bus-reg-plan{ + background-color:var(--stroke-main); + border:1px solid var(--divider-color); + border-radius:8px; + display:inline-block; + position:absolute; + right:0; + top:240px; + width:460px +} +.bus-reg-plan .plan-icon{ + height:64px; + margin:40px auto 0; + margin:16px auto 0; + width:64px +} +.bus-reg-info-block .bus-addition-storage-block{ + height:109px; + margin-left:3px; + margin-top:6px +} +.bus-reg-info-block .bus-add-storage-head{ + font-size:13px; + height:18px; + line-height:20px; + margin-bottom:10px +} +.bus-reg-info-block .bus-add-storage-body{ + color:var(--text-color-high); + display:inline-block; + font-size:14px; + line-height:24px; + margin-bottom:10px; + vertical-align:sub +} +.bus-reg-info-block .bus-add-storage-icon{ + --icon-size:24px; + margin-right:8px +} +.bus-reg-info-block .bus-add-storage-foot{ + font-size:12px; + height:15px; + line-height:15px +} +.bus-reg-plan .bus-internal-block{ + background-color:var(--surface-grey-1); + border:solid; + border-color:var(--surface-grey-2); + border-radius:8px; + border-width:1px; + margin-left:16px; + margin-right:16px; + margin-top:13px; + padding-bottom:14px +} +.bus-reg-plan .bus-internal-block.business-plan-peruse{ + border-radius:8px 8px 0 0 +} +.bus-reg-plan .bus-user-price-val-cntr{ + display:inline-block +} +.bus-reg-plan .business-plan-pricing{ + font-size:0 +} +.bus-reg-plan .bus-user-price-val{ + color:var(--text-color-high); + display:inline-block; + font-family:var(--text-font-family-second-regular); + font-size:28px; + height:36px; + line-height:34px; + margin-left:18px; + margin-top:13px +} +.bus-reg-plan .bus-user-price-unit{ + color:var(--text-color-high); + display:inline-block; + font:var(--text-h3); + height:20px; + margin-left:10px; + margin-right:10px; + margin-top:19px; + position:absolute; + vertical-align:text-bottom +} +.bus-reg-plan .bus-user-price-euro{ + background-color:var(--surface-main); + border:1px solid #ebebeb; + border-radius:10px; + box-sizing:border-box; + color:var(--text-color-medium); + display:flex; + font-family:var(--text-font-family); + font-size:13px; + height:22px; + justify-content:center; + margin-left:calc(50% - 24px); + text-align:center; + width:48px +} +.bus-reg-plan .business-plan-quota-note{ + background-color:var(--surface-grey-1); + border:solid; + border-color:var(--surface-grey-2); + border-radius:0 0 8px 8px; + border-width:0 1px 1px; + color:var(--text-color-high); + font-family:var(--text-font-family); + margin:0 16px auto; + padding:16px +} +.bus-reg-plan .bus-quota-note-head{ + font:var(--text-h3) +} +.bus-reg-plan .bus-quota-note-body{ + color:var(--text-color-high); + font-size:14px; + line-height:20px; + opacity:.7 +} +.bus-reg-plan .business-plan-breakdown{ + color:var(--text-color-high); + margin-top:12px +} +.bus-reg-plan .bus-breakdown-row{ + height:56px; + margin-left:16px; + margin-right:16px; + margin-top:8px +} +.bus-reg-plan .bus-breakdown-col{ + display:inline-block; + font:var(--text-h3); + margin:16px +} +.bus-reg-plan .business-plan-total{ + color:var(--text-color-high); + display:flex; + flex-wrap:wrap; + justify-content:space-between; + margin-top:20px; + padding-left:16px; + padding-right:16px +} +.bus-reg-plan .bus-total-col{ + display:inline-block; + font:var(--text-h1); + margin:29px 16px 16px +} +.bus-reg-plan .bus-price-footer-note{ + color:var(--text-color-high); + font:var(--text-body1); + line-height:17px; + padding-top:16px; + position:absolute +} +.bus-reg-plan .business-plan-title{ + color:var(--text-color-high); + font-family:var(--text-font-family); + font-size:24px; + line-height:29px; + margin:4px auto 32px; + text-align:center; + width:100% +} +.mobile.ru .bus-reg-plan .business-plan-price .sub-unit{ + display:block +} +.bus-reg-plan .business-plan-price .big{ + font:var(--text-data); + font-family:var(--text-font-family-semibold); + margin-right:8px +} +.bus-reg-plan .business-plan-total{ + position:relative +} +.bus-reg-plan .business-plan-total:before{ + background-color:var(--divider-color); + content:""; + height:1px; + left:0; + position:absolute; + top:0; + width:100% +} +.bus-reg-bottom-page{ + position:relative; + width:100% +} +.bus-reg-bottom-page:before{ + background-color:rgba(0, 0, 0, .1); + content:" "; + height:1px; + position:absolute; + width:100% +} +.bus-reg-bottom-page .page-header{ + color:#333; + font-family:montserrat,open_sans,sans-serif; + font-size:36px; + font-weight:300; + line-height:54px; + margin-bottom:64px; + padding:64px 20px 0; + text-align:center +} +.bus-reg-featureBlock{ + display:inline-block; + margin-top:48px; + vertical-align:top; + width:32% +} +.bus-reg-featureImg100{ + background-image:url(../imagery/mega-big-icons.af0093a3433fb0ee.png); + background-repeat:no-repeat; + height:100px; + margin:auto; + width:100px +} +.bus-reg-featureTxt{ + color:#666; + font-size:16px; + line-height:28px; + margin:48px auto 64px; + text-align:center; + width:80% +} +.bus-reg-featureTxt a{ + color:#f0373b +} +.bus-reg-featureTxt a:hover{ + text-decoration:underline +} +.ky-icon{ + background-position:-16px -464px +} +.forbit-icon{ + background-position:-16px -572px +} +.extension-icon{ + background-position:-16px -691px +} +.bus-confirm-body{ + margin:88px auto 128px; + max-width:400px; + width:90% +} +.bus-confirm-body.verfication{ + max-width:600px; + width:100% +} +.bus-confirm-body .bus-reg-header{ + text-align:center; + width:100% +} +.bus-confirm-body .bus-confirmImg{ + background-image:url(../imagery/mega-big-icons.af0093a3433fb0ee.png); + background-position:-16px -809px; + background-repeat:no-repeat; + height:120px; + margin:0 auto 48px; + width:160px +} +@media only screen and (max-width:880px){ +.bus-reg-body{ + min-width:0; + width:90% +} +.bus-reg-info-block{ + width:100% +} +.bus-reg-plan{ + position:relative; + top:48px; + width:100% +} +.bus-reg-header{ + font-size:30px +} +.bus-reg-btn{ + display:none !important +} +.bus-confirm-body .bus-reg-btn{ + display:inline-flex +} +.mega-button.bus-reg-btn-2{ + display:inline-flex; + margin-top:115px +} +.bus-reg-featureBlock{ + width:100% +} +} +.card-container.bus-repay{ + background:var(--surface-main); + border:1px solid var(--divider-color); + border-radius:24px; + box-sizing:border-box; + height:auto; + margin:0 auto 80px; + padding:16px 32px 32px; + width:850px +} +.rtl .card-container.bus-repay{ + direction:rtl +} +.bus-repay-block{ + height:100%; + padding-bottom:8px; + padding-top:80px; + width:100% +} +.bus-repay-block .payment-reminder-logo{ + --width:96px; + display:block; + height:96px; + margin:48px auto 24px; + width:96px +} +.bus-repay-block .dialog-title{ + color:var(--text-color-high); + font:var(--text-h2); + margin-bottom:12px +} +.bus-repay-block .radio-txt a{ + color:var(--text-color-success) +} +.card-header{ + text-align:center +} +.main-mid-pad.bus-repay .card-body{ + display:block +} +.main-mid-pad.bus-repay .main-left-block,.main-mid-pad.bus-repay .main-right-block{ + display:inline-block; + float:none; + height:auto; + margin:0; + padding:56px 0 0; + position:relative; + vertical-align:top; + width:362px +} +.main-mid-pad.bus-repay .main-left-block{ + -webkit-padding-end:48px; + padding-inline-end:48px +} +.main-mid-pad.bus-repay .section-wrapper:not(:first-child){ + margin-top:32px +} +.main-mid-pad.bus-repay .section-wrapper:last-child{ + margin-top:44px; + text-align:start +} +.main-mid-pad.bus-repay .section-title{ + color:var(--text-color-high); + font:var(--text-h3-bold); + padding-bottom:16px +} +.main-mid-pad.bus-repay .repay-btn.small-view-btn,.main-mid-pad.bus-repay .revert-to-free-btn.small-view-btn{ + display:none +} +.main-mid-pad.bus-repay .revert-to-free-btn{ + display:block; + margin-top:20px +} +.main-mid-pad.bus-repay .row-wrapper{ + align-items:center; + display:flex; + padding-bottom:16px +} +.card-container.bus-repay .account-info-icon{ + --icon-size:24px; + --mask-color:var(--icon-active); + flex-grow:0; + flex-shrink:0 +} +.main-mid-pad.bus-repay .row-wrapper i{ + flex-shrink:0 +} +.main-mid-pad.bus-repay .row-wrapper .info-txt{ + -webkit-margin-start:12px; + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body1); + margin-inline-start:12px; + vertical-align:middle +} +.main-mid-pad.bus-repay .bus-reg-plan.repay{ + background:var(--surface-grey-1); + border:1px solid var(--divider-color); + box-sizing:border-box; + padding:16px; + position:relative; + right:0; + text-align:center; + top:0; + width:364px +} +.repay-breakdown-container{ + background:var(--surface-main); + border:1px solid var(--divider-color); + border-radius:4px; + display:block; + overflow:hidden; + position:relative; + width:100% +} +.main-mid-pad.bus-repay .card-body .card-sub-title{ + color:var(--text-color-high); + display:block; + font:var(--text-h3); + padding:22px 0; + position:relative +} +.main-mid-pad.bus-repay .card-body .card-sub-title:before{ + background-color:rgba(0, 0, 0, .1); + bottom:0; + content:""; + display:block; + height:1px; + left:0; + position:absolute; + width:100% +} +.bus-reg-plan.repay .repay-breakdown-tb{ + width:100% +} +.bus-reg-plan.repay .repay-breakdown-tb tr{ + display:block; + position:relative +} +.bus-reg-plan.repay .repay-breakdown-tb tr:not(:last-child):before{ + background-color:var(--divider-color); + bottom:0; + content:""; + display:block; + height:1px; + left:12px; + position:absolute; + width:308px +} +.bus-reg-plan.repay .repay-breakdown-tb tr.expand:not(:last-child):before{ + height:1px; + left:0; + width:100% +} +.bus-reg-plan.repay .repay-breakdown-tb tr td:first-child,.bus-reg-plan.repay .repay-breakdown-tb tr th:first-child{ + -webkit-padding-end:8px; + -webkit-padding-start:12px; + box-sizing:border-box; + display:inline-block; + padding:12px 0 8px; + padding-inline-end:8px; + padding-inline-start:12px; + width:123px +} +.bus-reg-plan.repay .repay-breakdown-tb tr td:nth-child(2),.bus-reg-plan.repay .repay-breakdown-tb tr th:nth-child(2){ + -webkit-padding-end:4px; + box-sizing:border-box; + display:inline-block; + padding-inline-end:4px; + width:113px +} +.bus-reg-plan.repay .repay-breakdown-tb tr td:nth-child(2){ + cursor:pointer +} +.bus-reg-plan.repay .repay-breakdown-tb tr td.repay-td-total{ + cursor:default +} +.bus-reg-plan.repay .repay-breakdown-tb tr td:last-child,.bus-reg-plan.repay .repay-breakdown-tb tr th:last-child{ + -webkit-padding-end:12px; + box-sizing:border-box; + display:inline-block; + opacity:unset; + padding-inline-end:12px; + text-align:end; + width:calc(100% - 244px) +} +.bus-reg-plan.repay .repay-breakdown-tb tr td:nth-child(3){ + font-family:var(--text-font-family-bold) +} +.bus-reg-plan.repay .repay-breakdown-tb .content-desc{ + display:inline-block; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; + width:81px +} +.bus-reg-plan.repay .repay-breakdown-tb tr td:nth-child(2):after{ + --icon-size:24px; + width:24px +} +.bus-reg-plan.repay .repay-breakdown-tb th{ + color:var(--text-color-high); + font:var(--text-body1); + padding:12px 0 8px; + text-align:start +} +.main-right-block .repay-breakdown-footer{ + margin-top:14px; + opacity:.7 +} +.bus-reg-plan.repay .repay-breakdown-tb td{ + color:var(--text-color-high); + font:var(--text-body1); + height:40px; + opacity:.7; + padding:12px 0 8px; + text-align:start +} +.bus-reg-plan.repay .repay-breakdown-tb tr:last-child td{ + color:var(--text-color-high); + font:var(--text-h2); + font-family:var(--text-font-family-bold); + height:50px; + opacity:unset; + text-align:start; + width:110px +} +.bus-reg-plan.repay .repay-breakdown-tb tr:last-child td:last-child{ + -webkit-padding-end:12px; + padding-inline-end:12px; + text-align:end; + width:210px +} +.bus-reg-plan.repay .repay-extra-details{ + background-color:var(--surface-grey-1); + color:var(--text-color-high); + font:var(--text-body1); + max-height:0; + overflow-y:hidden; + -webkit-transition:max-height .2s ease-in-out; + -moz-transition:max-height .2s ease-in-out; + -o-transition:max-height .2s ease-in-out; + transition:max-height .2s ease-in-out +} +.bus-reg-plan.repay .repay-extra-details.expand{ + max-height:40px +} +.bus-reg-plan.repay .repay-breakdown-tb tr.repay-extra-details:before{ + left:0; + width:100% +} +.bus-reg-plan.repay .repay-breakdown-tb tr.repay-extra-details td:first-child{ + width:235px +} +.bus-reg-plan.repay .repay-breakdown-tb tr.repay-extra-details td:last-child{ + width:calc(100% - 241px) +} +.bus-repay-block .main-left-block .repay-nb-users-info{ + color:var(--text-color-black-high); + font:var(--text-caption); + margin-top:-10px; + opacity:.4 +} +@media only screen and (max-width:800px){ +.card-container.bus-repay{ + min-width:406px; + padding:2%; + width:96% +} +.main-mid-pad.bus-repay .main-left-block,.main-mid-pad.bus-repay .main-right-block{ + display:block; + width:auto +} +.main-mid-pad.bus-repay .main-left-block{ + padding-right:0 +} +.main-mid-pad.bus-repay .bus-reg-plan.repay{ + width:100% +} +.main-mid-pad.bus-repay .row-wrapper{ + padding-bottom:8px +} +.bus-reg-plan.repay .repay-breakdown-tb tr:not(:last-child):before{ + width:calc(100% - 24px) +} +.bus-reg-plan.repay .repay-breakdown-tb tr td:first-child,.bus-reg-plan.repay .repay-breakdown-tb tr th:first-child{ + min-width:90px; + width:25% +} +.bus-reg-plan.repay .repay-breakdown-tb tr td:nth-child(2),.bus-reg-plan.repay .repay-breakdown-tb tr th:nth-child(2){ + min-width:136px; + white-space:normal; + width:40% +} +.bus-reg-plan.repay .repay-breakdown-tb tr td:nth-child(3),.bus-reg-plan.repay .repay-breakdown-tb tr th:nth-child(3){ + min-width:82px; + width:30% +} +.bus-reg-plan.repay .repay-breakdown-tb tr:last-child td:last-child{ + min-width:210px; + width:70% +} +.main-mid-pad.bus-repay .btn-container{ + text-align:center +} +.main-mid-pad.bus-repay .section-wrapper:last-child{ + display:none +} +.repay-btn.small-view-btn{ + display:inline-block; + margin:32px auto +} +.revert-to-free-btn.small-view-btn{ + display:block; + margin:0 auto 20px +} +.bus-reg-plan.repay .repay-breakdown-tb tr.repay-extra-details td:first-child{ + min-width:234px; + width:65% +} +.bus-reg-plan.repay .repay-breakdown-tb tr.repay-extra-details td:last-child{ + min-width:82px; + width:30.5% +} +.bus-repay-block .main-left-block .repay-nb-users-info{ + margin-top:-2px +} +.bus-reg-plan.repay .repay-breakdown-tb .content-desc{ + width:calc(100% - 30px) +} +} + +.bottom-info.body{ + background:#fff; + background:linear-gradient(180deg, #fff 0, #eee); + border-top:1px solid rgba(0, 0, 0, .05); + bottom:0; + box-sizing:border-box; + display:none; + font-family:LatoWeb,Arial,sans-serif; + padding:16px; + position:fixed; + width:100%; + z-index:1400 +} +.notification .bottom-info.body{ + display:table +} +.notification .fmholder{ + height:100%; + height:-webkit-calc(100% - 120px); + height:-moz-calc(100% - 120px); + height:calc(100% - 120px) +} +.notification .st-main-block{ + height:100%; + height:-webkit-calc(100% + 52px); + height:-moz-calc(100% + 52px); + height:calc(100% + 52px) +} +.notification .st-full-block{ + padding:20px 0 50px +} +.bottom-info.body:before{ + background:linear-gradient(180deg, transparent 0, rgba(0, 0, 0, .05)); + content:""; + display:block; + height:8px; + left:0; + position:absolute; + top:-8px; + width:100% +} +.bottom-info.content{ + display:table; + margin:0 auto +} +.bottom-info.column{ + box-sizing:border-box; + display:table-cell; + font-size:0; + height:70px; + line-height:0; + padding:0 50px 0 24px; + vertical-align:middle +} +.bottom-info.column:first-child,.bottom-info.column:last-child{ + padding:0; + width:66px +} +.bottom-info.column:last-child{ + white-space:nowrap +} +.bottom-info.display-icon{ + height:128px; + width:128px +} +.bottom-info.content h4{ + color:#667; + font-family:LatoWeb,Arial,sans-serif; + font-size:18px; + font-weight:400; + line-height:23px; + margin:0; + padding:0 +} +.bottom-info.content .messageA{ + color:#999; + font-size:14px; + line-height:18px; + margin:5px 0 0 +} +button.bottom-info{ + background:linear-gradient(180deg, #fff, #fcfcfc); + border:1px solid rgba(0, 0, 0, .05); + border-radius:3px; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + box-sizing:border-box; + color:var(--text-color-black-medium); + cursor:pointer; + display:inline-block; + font-family:source_sans_proregular,sans-serif; + font-size:14px; + line-height:18px; + margin:15px 0 0; + padding:8px 25px +} +button.bottom-info:hover{ + background-color:#686565 +} +.bottom-info.fm-dialog-close{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-position:-53px -4825px; + background-repeat:no-repeat; + cursor:pointer; + height:30px; + opacity:.5; + position:absolute; + right:10px; + top:11px; + -webkit-transition:opacity .2s ease-in-out; + transition:opacity .2s ease-in-out; + width:30px; + z-index:10 +} +.mobile.notification .fmholder{ + height:100% +} +.mobile.bottom-info.display-icon{ + height:64px; + width:64px +} +.mobile.bottom-info.fm-dialog-close{ + left:auto; + margin:0; + right:3px; + top:5px +} +.mobile.bottom-info.content h4{ + font-size:16px +} +.mobile.bottom-info.content .messageA{ + font-size:14px +} +.mobile.bottom-info.body{ + bottom:0 +} +.mobile.bottom-info.column.text-column{ + padding:0 24px +} + +.about .bottom-page.full-block{ + display:none; + font-size:0 +} +.about .bottom-padding{ + padding-bottom:90px +} +.about .bottom-page.full-block.active{ + display:block; + margin:auto; + width:100% +} +.about.bottom-page.light-grey-top .top-head{ + box-shadow:none +} +.about.bottom-page.light-grey-top .top-head.floating{ + box-shadow:0 1px 0 0 rgba(0, 0, 0, .1) +} +.about.main-menu.body{ + background-color:#fafafa; + border-bottom:1px solid #e7e7e7; + font-size:0; + padding:86px 0 0; + text-align:center; + white-space:nowrap +} +.about.main-menu.item{ + color:#666; + cursor:pointer; + display:inline-block; + font-family:LatoWebBold,source_sans_prosemibold,Arial; + font-size:17px; + line-height:21px; + margin:0 0 -1px 70px; + text-transform:uppercase +} +.about.main-menu.item:first-child{ + margin-left:0 +} +.about.main-menu.item span{ + border-bottom:4px solid transparent; + display:inline-block; + padding-bottom:3px; + -webkit-transition:color .2s ease-in-out,border-color .2s ease-in-out; + transition:color .2s ease-in-out,border-color .2s ease-in-out +} +.about .lang,.en .about .lang.en{ + display:block +} +.about span.lang,.en .about span.lang.en{ + display:inline-block +} +.about .lang.en,.about span.lang.en,.en .about .lang,.en .about span.lang{ + display:none +} +body:not(.mobile) .about.main-menu.item:hover span{ + color:#00c0a6 +} +.about.main-menu.item.active span{ + border-color:#00c0a6; + color:#00c0a6 +} +.about.top-info{ + color:#666; + font-size:16px; + line-height:24px; + margin:0 auto; + max-width:940px; + padding:30px 0 25px; + text-align:left +} +#about-slider>div{ + margin-bottom:-10px; + position:relative +} +.about .office-img-container{ + grid-column:1 / span 8; + overflow:hidden; + position:relative +} +.about .office-img-container>img:first-child{ + width:100%; + z-index:2 +} +.about .grey-bg-container{ + background-color:#fafafa; + border-radius:40px; + height:100%; + padding-top:48px +} +.about-bott-pad{ + padding-bottom:160px +} +.about.top-info.jobs{ + font:var(--text-h2); + inline-size:500px; + padding:0 0 56px +} +.about .bottom-page .jobs-top-header,.about.top-info.jobs{ + color:var(--text-color-high); + margin:0 auto; + overflow-wrap:break-word +} +.about .bottom-page .jobs-top-header{ + font-family:var(--text-font-family-second-bold); + font-size:48px; + inline-size:700px; + line-height:58px; + padding:4px 0 24px +} +.about .bottom-page.jobs-dream-container{ + background:linear-gradient( + 0deg, + #fff 75%, + #f6f6f6 0 + ); + display:table; + margin:0 auto; + width:100% +} +.about.jobs-btn{ + background-color:#bf1515; + border:none; + border-radius:8px; + color:var(--text-color-high-inverted); + cursor:pointer; + font:var(--text-h1-bold); + height:64px; + padding-left:36px; + padding-right:36px +} +.about.jobs-btn,.about.top-info.centered{ + text-align:center +} +.about.top-info:visited,.about.top-info a{ + color:#373737; + text-decoration:underline +} +body:not(.mobile) .about.top-info a:hover{ + text-decoration:none +} +.about.numbers-wrap{ + font-size:0; + padding-bottom:48px +} +.about.numbers-info{ + webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#fff; + font-size:24px; + line-height:29px; + margin:auto; + padding:40px 10px 0 +} +.about.numbers-info .num{ + color:#fff; + display:block; + font-family:var(--text-font-family-second-bold); + font-size:54px; + line-height:44px; + padding-bottom:8px +} +.about.numbers-info .lang .num{ + padding-top:8px; + white-space:nowrap +} +.about.numbers-info .num span,.en .about.numbers-info .num{ + display:block; + font-family:var(--text-font-family-second-bold); + font-size:54px +} +.about.numbers-info .num span{ + display:inline-block; + line-height:56px +} +.en .about.numbers-info .num span{ + display:inline-block +} +.en .about.numbers-info{ + max-width:232px +} +.en .about.numbers-info.short .numbers-txt{ + max-width:145px +} +.about-numbers .bottom-page.horizontal-centered-bl.wide{ + display:flex; + flex-wrap:wrap; + justify-content:center; + max-width:100%; + padding:0; + width:auto +} +.about.img-wrap{ + line-height:0 +} +.about.img-wrap-office{ + grid-column:1 / 6; + grid-row:1; + margin-bottom:-10px; + position:relative +} +.about .cd-horizontal-timeline{ + opacity:0; + transition:opacity .2s +} +.about .cd-horizontal-timeline.loaded{ + opacity:1 +} +.about .cd-horizontal-timeline .timeline{ + height:100px; + margin:0 auto; + position:relative +} +.about .cd-horizontal-timeline .events-wrapper{ + height:100%; + position:relative +} +.about .cd-horizontal-timeline .events-wrapper:before{ + background-image:linear-gradient(90deg, #f8f8f8, rgba(248 248 248 0)); + left:0 +} +.about .cd-horizontal-timeline .events-wrapper:after{ + background-image:linear-gradient(270deg, #f8f8f8, rgba(248 248 248 0)); + right:0 +} +.about .cd-horizontal-timeline .events{ + background:#000; + height:2px; + left:0; + position:absolute; + top:49px; + transition:transform .4s; + z-index:1 +} +.about .cd-horizontal-timeline .events a{ + bottom:0; + color:#383838; + font-size:1.3rem; + padding-bottom:15px; + position:absolute; + text-align:center; + transform:translateZ(0); + width:0; + z-index:2 +} +.about .timeline-container p{ + overflow:visible; + position:relative; + right:23px; + top:10px; + white-space:nowrap +} +.about .cd-horizontal-timeline .events a:after{ + background-color:#fafafa; + border:2px solid #000; + border-radius:50%; + bottom:-6px; + content:""; + height:12px; + left:50%; + position:absolute; + right:auto; + transform:translateX(-50%); + transition:background-color .3s,border-color .3s; + width:12px +} +.about .cd-horizontal-timeline .events a.small-dot:after{ + bottom:-3px; + height:5px; + width:5px +} +.about .cd-horizontal-timeline .events a.small-dot{ + font-size:0 +} +.about .cd-horizontal-timeline .events a.selected{ + font-family:LatoWebBold,sans-serif; + pointer-events:none +} +.about .cd-horizontal-timeline .events a.selected:after{ + background-color:#bf1515; + border:2px solid #fff; + bottom:-8px; + height:16px; + width:16px +} +.about .cd-horizontal-timeline .events-content{ + position:relative; + transition:height .4s; + width:100% +} +.about .cd-horizontal-timeline .events-content li{ + animation-duration:.4s; + animation-timing-function:ease-in-out; + left:0; + opacity:0; + position:absolute; + top:0; + transform:translateX(-100%); + width:100%; + z-index:1 +} +.about .cd-horizontal-timeline .events-content li.selected{ + opacity:1; + position:relative; + transform:translateX(0); + z-index:2 +} +.about .cd-horizontal-timeline .events-content li.enter-right,.about .cd-horizontal-timeline .events-content li.leave-right{ + animation-name:cd-enter-right +} +.about .cd-horizontal-timeline .events-content li.enter-left,.about .cd-horizontal-timeline .events-content li.leave-left{ + animation-name:cd-enter-left +} +.about .cd-horizontal-timeline .events-content li.leave-left,.about .cd-horizontal-timeline .events-content li.leave-right{ + animation-direction:reverse +} +.about .cd-horizontal-timeline .events-content li>*{ + margin:0 auto +} +@keyframes cd-enter-right{ +0%{ + opacity:0; + transform:translateX(100%) +} +to{ + opacity:1; + transform:translateX(0) +} +} +@keyframes cd-enter-left{ +0%{ + opacity:0; + transform:translateX(-100%) +} +to{ + opacity:1; + transform:translateX(0) +} +} +.about.vision-block{ + grid-column:1 / 6; + grid-row:1 +} +.about.vision-title{ + color:var(--stroke-grey-1); + margin-top:80px; + z-index:1 +} +.about.promise-title,.about.vision-title{ + font-family:var(--text-font-family-second-bold); + font-size:48px; + line-height:58px; + position:relative; + text-align:center; + user-select:none !important +} +.about.promise-title{ + color:rgb(29 29 29); + padding-top:7% +} +.about.vision-desc{ + align-self:center; + font-family:var(--text-font-family-second-regular); + font-size:48px; + line-height:58px; + margin:60px auto 50px; + max-width:1028px; + z-index:1 +} +.about.promise-desc,.about.vision-desc{ + color:#fafafa; + position:relative; + text-align:center; + user-select:none !important +} +.about.promise-desc{ + align-items:center; + display:flex; + font-family:var(--text-font-family-second-bold); + font-size:64px; + justify-content:center; + line-height:78px; + margin:0 auto; + max-width:80%; + padding-top:10vw +} +.about.mega-story-container{ + padding:160px 0 0 +} +.about .grey-bg{ + background-color:#f6f6f6 +} +.about.mega-story-title{ + color:#1d1d1d; + font-family:var(--text-font-family-second-bold); + font-size:36px; + padding-bottom:250px +} +.about.black-background-container{ + background-color:#fff; + height:40vw; + overflow:hidden; + position:relative +} +.about .circle-animation-wrapper{ + background:radial-gradient(circle at center 15%, rgb(29 29 29) 0, rgb(29 29 29) 65%, #fff 0); + background-color:#fff; + background-position-y:-40vw; + background-repeat:no-repeat; + background-size:100%; + height:100%; + transition:background 1s; + width:100%; + will-change:transform +} +.about.promise-title:after{ + color:rgb(250 250 250); + content:attr(pop-lang); + font-size:48px; + line-height:58px; + mix-blend-mode:difference; + padding-top:6vh; + position:relative; + text-align:center; + user-select:none !important; + z-index:1 +} +.about.promise-title:after,.about.vision-desc>span{ + font-family:var(--text-font-family-second-bold) +} +.about.office1{ + filter:brightness(.15); + height:100%; + max-height:65vh; + object-fit:cover; + width:100% +} +.about.office1 img{ + filter:brightness(50%) +} +.about.vision-grid-container{ + display:grid; + grid-template-columns:1fr; + position:relative +} +.about .carousel-wrapper{ + display:flex; + justify-content:flex-end; + margin:auto; + overflow:hidden; + padding-bottom:500px; + padding-top:100px +} +.about .timeline-container{ + box-sizing:border-box; + grid-column:4 / span 9; + margin:auto; + overflow:hidden; + padding-top:100px; + width:100% +} +.about .carousel-photo{ + border-radius:10px; + grid-column:6 / span 3; + object-fit:cover; + width:100% +} +.about .gradient-wrapper{ + grid-column:6 / span 3; + position:relative +} +.about .gradient-wrapper:after{ + bottom:0; + content:""; + left:0; + position:absolute; + right:0; + top:0; + z-index:1 +} +.about .carousel-photo.container{ + grid-gap:3rem; + align-items:center; + display:grid; + grid-template-columns:repeat(9, 1fr); + height:500px; + width:100% +} +.about .carousel-text-container{ + align-items:center; + grid-column:2 / span 4 +} +.about .carousel-button-prev{ + grid-column:1 / span 1 +} +.about .carousel-button-next{ + display:flex; + grid-column:9 / span 1; + justify-content:end +} +.about .carousel-date{ + color:#1d1d1d; + font:var(--text-h2); + padding-bottom:24px +} +.about .carousel-title{ + color:var(--text-color-high); + font:var(--text-h1-bold); + font-family:LatoWebBlack,sans-serif; + font-size:32px; + line-height:39px; + padding-bottom:24px +} +.about .carousel-desc{ + color:#1d1d1d; + font:var(--text-h2) +} +.about-right-arrow{ + cursor:pointer +} +.about.bold-header{ + color:#373737; + font-family:LatoWebBold,source_sans_probold,Arial,sans-serif; + font-size:25px; + line-height:30px; + padding:98px 0 10px +} +.about .box.red.jobs{ + background-color:#bf1515; + display:block; + float:left; + height:32px; + width:10px +} +.about.small-txt-container{ + color:var(--text-color-high); + font-size:16px; + padding-top:15px; + text-align:left +} +.about .dream-caption{ + color:var(--text-color-high); + font:var(--text-h1-bold); + padding-left:15px +} +.about.leader-name .bold{ + display:block; + font-family:LatoWebBold,source_sans_probold,Arial; + font-size:18px; + line-height:22px; + padding:30px 0 5px +} +.about.members{ + font-size:0; + margin:16px auto 20px; + max-width:1034px +} +.about.members img{ + border-radius:100%; + display:block; + height:68px; + margin:54px auto 13px; + width:68px +} +.about.office-locations-container{ + padding:160px 0 0 +} +.office-photo{ + width:100% +} +.about.city-title{ + color:var(--text-color-high); + font-family:LatoWebBlack,sans-serif; + font-size:24px +} +.about.city-address{ + color:var(--text-color-high); + font:var(--text-h2); + padding-bottom:100px; + padding-top:16px +} +.about .top.img{ + position:absolute; + width:100%; + z-index:1 +} +.about .overlay-text1{ + color:var(--text-color-high-inverted); + font:var(--text-h2); + max-width:400px; + padding:48px 0 0 56px; + position:absolute; + z-index:3 +} +.about .overlay-text1>span{ + font-family:LatoWebBlack,sans-serif +} +.about .overlay-text2{ + color:var(--text-color-high-inverted); + font:var(--text-h2); + max-width:400px; + padding:121px 0 0 56px; + position:absolute; + z-index:3 +} +.about .location-title{ + color:var(--text-color-high); + font-family:var(--text-font-family-second-bold); + font-size:48px; + line-height:58px; + padding-bottom:100px; + text-align:center +} +.about .location-wrapper{ + text-align:center +} +.mobile .about.members img{ + height:67px; + width:67px +} +.about.members img.shadow{ + box-shadow:0 0 0 1px hsla(0, 0%, 84.7%, .4) +} +.about.members span{ + color:#666; + display:block; + font-size:14px; + line-height:22px; + padding:0 10px +} +.about.members span.bold{ + color:#373737; + font-family:LatoWebBold,source_sans_probold,Arial; + font-size:16px +} +.believe .bottom-page.big-icon-info{ + padding:12px 0 52px +} +.believe .inline-block.mid-pad{ + padding-top:10px +} +.bottom-page.locs{ + font-size:0 +} +.locs a.inline-block{ + cursor:default +} +.locs .inline-block i,.locs .inline-block span{ + cursor:pointer; + display:block +} +.about.img2{ + position:relative +} +.about.img2,.about.jobs-img1{ + margin:65px auto -16px; + width:100% +} +.about.jobs-img1{ + border-radius:64px 64px 0 0; + box-shadow:0 -3px 100px 0 rgb(88 118 151 / .16) +} +.about.jobs.sub-header,.about.jobs.sub-header2{ + color:var(--text-color-high); + font-family:var(--text-font-family-second-bold); + font-size:48px; + grid-column:1 / span 3; + line-height:58px +} +.no-jobs{ + font-size:18px; + position:relative; + top:100%; + transform:translateY(-100%) +} +.about.sub-header{ + color:var(--text-color-high); + font-family:var(--text-font-family-second-bold); + font-size:48px; + grid-column:1 / span 3; + line-height:58px +} +.about.sub-header.two{ + grid-column:1 / span 6; + padding-bottom:24px +} +.about.leadership-team-container{ + padding-bottom:80px; + padding-top:120px +} +.about.jobs.sub-header3{ + color:var(--text-color-high); + font-family:var(--text-font-family-second-bold); + font-size:48px; + grid-column:1 / span 3; + line-height:58px +} +.about.jobs.sub-header.two{ + padding-left:100px +} +.about.dream-img{ + object-fit:cover; + width:100% +} +.about.dream-item{ + height:348px +} +.about .job-card{ + background-clip:content-box; + height:100%; + text-align:left +} +.about .right-side-jobs-container{ + grid-column:6 / span 6 +} +.about .department-title{ + color:#bf1515; + font-family:LatoWebBlack,sans-serif; + font-size:24px; + line-height:29px; + padding-bottom:25px; + text-align:left +} +.about .single-job-container:hover{ + cursor:pointer +} +.about .single-job-container{ + text-align:left +} +.about .left-side-container{ + position:relative +} +.about .solid-grey-line{ + border-bottom:1px solid #dfdfdf; + margin-bottom:23.5px; + margin-top:23.5px +} +.about .job-title{ + color:#1d1d1d; + display:inline-block; + font-family:LatoWebBlack,sans-serif; + font-size:24px; + line-height:29px; + max-width:520px; + padding-top:20px; + vertical-align:middle +} +.about .job-desc{ + color:#1d1d1d; + font-size:20px; + line-height:28px; + max-width:520px; + padding-bottom:20px; + padding-top:16px +} +.about .job-list-arrow{ + background:url(../imagery/mega-about-Arrowright_24_black.db6586ae75aeb188.svg) no-repeat; + cursor:pointer; + display:block; + height:24px; + margin-left:auto; + position:absolute; + right:0; + top:50%; + transform:translateY(-50%); + width:32px +} +.about .job-list-arrow-explore{ + background:url(../imagery/mega-about-Arrowright_24_red.8b77ae36b5e9bb08.svg) no-repeat; + cursor:pointer; + float:right; + height:24px; + width:32px +} +.about .white-space-top{ + background-color:#fff; + border-radius:48px 48px 0 0; + bottom:0; + margin:65px auto -18px; + padding-top:100px; + position:absolute; + width:100% +} +.about .explore-jobs{ + color:#bf1515; + float:right; + font-family:var(--text-font-family-second-bold); + font-size:20px; + line-height:24px; + padding-bottom:52px; + text-align:left +} +.about .submit-jobs:hover{ + cursor:pointer +} +.about .explore-jobs>span{ + font-family:LatoWebBlack,sans-serif; + padding-right:8px +} +.about .explore-jobs:hover .job-list-arrow-explore{ + background-position:8px 0 +} +.about .flip-card{ + background-color:initial; + height:100%; + margin:0 auto; + padding-bottom:24px; + perspective:1000px; + width:100% +} +.about .bottom-page.big-icon-info.about{ + font-family:LatoWebBlack,sans-serif; + font-size:32px; + line-height:39px +} +.about .bottom-page.mid-icon-info.short.about{ + color:#333; + font-size:20px; + line-height:26px; + max-width:400px; + padding-left:48px; + padding-right:48px +} +.about .bottom-page .about.numbers-wrap{ + display:grid; + flex-grow:1; + grid-template-columns:1fr 1fr +} +.about .bottom-page.jobs-life-container{ + display:table; + margin:0 auto; + padding-bottom:158px; + width:100% +} +.about .bottom-page.red-bg{ + align-self:end; + background-color:#bf1515; + grid-column:1 / 6; + margin-top:-20px; + z-index:1 +} +.about .bottom-page.card.img{ + box-sizing:initial; + height:64px; + padding-left:32px; + padding-top:32px; + width:64px +} +.about .bottom-page.flip-card-title{ + color:var(--text-color-high); + font-family:LatoWebBlack,sans-serif; + font-size:32px; + line-height:39px; + padding:15px 0 30px 40px; + text-align:left +} +.about .bottom-page.flip-card-desc{ + color:var(--text-color-high); + font-size:24px; + line-height:33px; + padding-left:40px; + padding-right:40px; + text-align:left +} +.about .bottom-page.flip-card-desc.invert{ + color:var(--text-color-high-inverted); + font-size:18px; + line-height:26px; + padding-top:24px +} +.about.c1{ + grid-column:1 / span 4 +} +.about.c2{ + grid-column:5 / span 4 +} +.about.c3{ + grid-column:9 / span 4 +} +.about-mission-header{ + color:#373737; + font-family:var(--text-font-family-second-bold); + font-size:48px; + line-height:50px; + padding:4px 0 46px +} +.about-mission-header,.about .c1.job-card{ + grid-column:5 / span 4 +} +.about .c2.job-card{ + grid-column:9 / span 4 +} +.about .c3.job-card{ + grid-column:5 / span 4 +} +.about .c4.job-card{ + grid-column:9 / span 4 +} +.about .c5.job-card{ + grid-column:5 / span 4 +} +.about .c6.job-card{ + grid-column:9 / span 4 +} +.about .c1.dream{ + grid-column:5 / span 4 +} +.about .c2.dream{ + grid-column:9 / span 4 +} +.about .c3.dream{ + grid-column:5 / span 4 +} +.about .c4.dream{ + grid-column:9 / span 4 +} +.about .flip-card-inner{ + border-radius:20px; + box-sizing:initial; + display:grid; + height:100%; + position:relative; + transform-style:preserve-3d; + transition:transform .8s; + width:100% +} +.about .flip-card:hover .flip-card-inner{ + transform:rotateY(180deg) +} +.about .flip-card-back,.about .flip-card-front{ + -webkit-backface-visibility:hidden; + backface-visibility:hidden; + border-radius:20px; + grid-area:1/1; + height:100%; + width:100% +} +.about .flip-card-front{ + background-color:var(--surface-main) +} +.about.white-space-block{ + padding-top:160px +} +.about.location-info-block{ + grid-column:9 / span 4 +} +.about .flip-card-back{ + background-color:#242424; + color:var(--text-color-high-inverted); + position:relative; + transform:rotateY(180deg) +} +.about.hiring{ + background-color:#00c0a6; + background-image:url(../imagery/mega-about-about-03.cf8d3d7b6626132a.png); + background-position:50%; + background-size:auto 100%; + border-radius:8px; + font-size:0; + height:380px; + margin:60px auto 0; + max-width:1024px; + overflow:hidden; + overflow:hidden; + text-align:center; + white-space:nowrap +} +.about.hiring-txt{ + color:#fff; + display:inline-block; + font-size:30px; + line-height:48px; + margin:89px 42px 0 0; + text-transform:uppercase; + vertical-align:top; + white-space:normal; + width:360px +} +.about.hiring-txt span{ + display:block; + font-family:LatoWebBlack,source_sans_problack,Arial; + font-size:32px; + line-height:173px +} +.en .about.hiring-txt,.ro .about.hiring-txt{ + font-size:40px +} +.en .about.hiring-txt span{ + font-size:80px +} +.pl .about.hiring-txt{ + font-size:24px +} +.es .about.hiring-txt,.nl .about.hiring-txt span{ + font-size:28px +} +.es .about.hiring-txt span{ + font-size:36px +} +.id .about.hiring-txt span{ + font-size:30px +} +.ct .about.hiring-txt span,.kr .about.hiring-txt span,.ro .about.hiring-txt span{ + font-size:52px +} +.about.joing-txt{ + color:#fff; + display:inline-block; + font-size:24px; + line-height:30px; + margin:0 -40px 0 40px; + padding:131px 0 0; + vertical-align:top; + white-space:normal; + width:380px +} +.es .about.joing-txt,.it .about.joing-txt,.jp .about.joing-txt,.nl .about.joing-txt{ + margin:0 +} +.id .about.joing-txt{ + width:370px +} +.about.joing-txt span{ + display:block; + padding:0 0 22px +} +.about.white-button{ + webkit-box-sizing:border-box; + background-color:#fff; + border-radius:4px; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#00c0a6; + cursor:pointer; + display:inline-block; + font-family:LatoWebBold,source_sans_probold,Arial; + font-size:22px; + height:48px; + line-height:48px; + min-width:170px; + padding:0 10px; + -webkit-transition:box-shadow .2s ease-in-out; + transition:box-shadow .2s ease-in-out +} +body:not(.mobile) .about.white-button:hover{ + box-shadow:0 0 0 4px hsla(0, 0%, 100%, .3) +} +.about.bold-header.bott-pad{ + padding-bottom:22px +} +.about.carousel{ + animation:animated-background 600s linear infinite; + background-image:url(../imagery/mega-about-about-carousel.bdbbbb090c61e134.jpg); + background-position:0 0; + background-repeat:repeat; + background-size:auto 100%; + height:700px; + margin:30px 0 0 +} +.bottom-page.light-grey-top{ + background-color:hsla(0, 0%, 98%, .81) +} +.about.img4{ + margin:135px 0 8px 3%; + max-width:1065px; + width:100% +} +.bottom-page.about-sprite.use{ + background-position:center -1164px; + display:inline-block; + height:203px; + max-width:350px; + width:100% +} +.about.use-header{ + color:#373737; + font-family:var(--text-font-family-second-bold); + font-size:16px; + letter-spacing:1.2px; + line-height:20px; + max-width:350px; + padding:28px 0 0; + text-align:center; + width:100% +} +.bottom-page.about-sprite.encryption{ + background-position:-15px -1438px; + display:inline-block; + height:173px; + margin:0 0 22px 20%; + width:173px +} +.bottom-page.about-sprite.gdpr{ + background-position:-302px -1418px; + display:inline-block; + height:206px; + margin:0 20% 48px; + width:202px +} +.about-privacy .bottom-page.horizontal-centered-bl.mid-wide{ + max-width:1020px +} +.about-privacy .startpage.italic-text{ + max-width:none +} +.about-privacy .startpage.quote-icon{ + left:0 +} +.about-privacy .startpage.quote-icon.close{ + left:auto; + right:0 +} +.about-data .about.top-info{ + max-width:865px +} +.about.img5{ + margin:90px -50% 8px; + max-width:1322px; + width:114% +} +.about.img6{ + margin:108px 0 50px; + max-width:1094px; + width:100% +} +.about.top-info.top-pad{ + padding:44px 0 0 +} +.about.data-header{ + display:inline-block; + font-size:0; + margin:76px 20px 65px +} +.about.data-header span{ + color:#373737; + font-family:LatoWebBlack,source_sans_probold,Arial,sans-serif; + font-size:30px; + line-height:36px; + padding:0 8px +} +.ar .about.data-header i,.es .about.data-header i,.fr .about.data-header i,.it .about.data-header i,.ru .about.data-header i{ + margin-top:5px +} +.about .grid-layout-container{ + grid-gap:3rem; + display:grid; + grid-template-columns:repeat(12, 1fr); + justify-content:center; + padding:0 6% +} +.about .grid-layout-container.cards{ + grid-auto-rows:1fr +} +.about .jobs-top-pad{ + padding-top:80px +} +.about .about-text-wrapper .overlay-text2{ + color:unset; + max-width:unset; + padding:unset; + position:unset +} +.about .about-text-wrapper .overlay-text1{ + color:unset; + max-width:unset; + padding:24px 0 16px; + position:unset +} +.about .grid-layout-container.leaders{ + grid-row-gap:0 +} +.about.leadership-desc{ + color:#1d1d1d; + font:var(--text-h2); + grid-column:1 / span 6; + padding-bottom:72px +} +.about.leadership-col1{ + grid-column:1 / span 3 +} +.about.leadership-col2{ + grid-column:4 / span 3 +} +.about.leadership-col3{ + grid-column:7 / span 3 +} +.about.leadership-col4{ + grid-column:10 / span 3 +} +.about .leaders-img{ + object-fit:cover; + width:100% +} +.about .leaders-name{ + color:#1d1d1d; + font-family:LatoWebBlack,sans-serif; + font-size:20px +} +.about .leaders-title{ + color:#1d1d1d; + font:var(--text-h2); + font-size:18px +} +.about .leaders-txt-container{ + padding-bottom:58px; + padding-top:24px +} +.about .expand-leaders{ + color:#bf1515; + display:flex; + font-family:LatoWebBlack,sans-serif; + font-size:20px; + justify-content:flex-end; + line-height:24px; + text-align:left +} +.about .expand-text{ + margin-right:8px +} +.about .expand-text.hover{ + cursor:pointer +} +.about .leaders-see-more-arrow{ + background:url(../imagery/mega-about-Arrowright_24_red.8b77ae36b5e9bb08.svg) no-repeat; + cursor:pointer; + height:24px; + transform:rotate(90deg); + width:24px +} +.about .leaders-see-more-arrow.hover{ + transform:rotate(90deg) translateX(4px) +} +.about .leaders-see-more-arrow.reverse{ + transform:rotate(270deg) +} +.about .leaders-see-more-arrow.reverse.hover{ + transform:rotate(270deg) translateX(4px) +} +.about .leaders-collapsible{ + grid-gap:3rem; + grid-row-gap:0; + display:none; + grid-column:1 / span 12; + grid-template-columns:repeat(12, 1fr); + max-height:0; + overflow:hidden; + transition:max-height .2s ease-out +} +.about .leaders-collapsible.open{ + display:grid; + overflow:unset +} +.about .submit-box{ + background-color:#bf1515; + border-radius:48px 48px 0 0; + display:flex; + grid-column:6 / span 6 +} +.about .submit-txt{ + color:#fff; + display:inline-block; + font-family:LatoWebBold,sans-serif; + font-size:24px; + line-height:30px; + margin:48px 0 57px 48px; + padding-right:20px +} +.about .submit-button-container{ + margin-left:auto +} +.about .submit-jobs{ + background-color:#fff; + border:1px solid #fff; + border-radius:16px; + font-family:LatoWebBold,sans-serif; + font-size:24px; + height:64px; + margin:48px 48px 54px 0; + width:212px +} +@keyframes animated-background{ +0%{ + background-position:0 0 +} +to{ + background-position:-10000px 0 +} +} +.circular-spread.start-animation{ + animation-delay:.5s; + animation-duration:2s; + animation-fill-mode:forwards !important; + animation-name:circular-spread; + transition:all 1s +} +.text-focus-contract.start-animation{ + animation-delay:.5s; + animation-direction:normal; + animation-duration:1s; + animation-fill-mode:forwards; + animation-iteration-count:1; + animation-name:focus-in-contract; + animation-timing-function:ease; + color:#fafafa +} +@keyframes circular-spread{ +0%{ + background-position-y:-60vw; + background-size:100% 100% +} +to{ + background-position-y:0; + background-size:100% 300% +} +} +@keyframes focus-in-contract{ +0%{ + filter:blur(12px); + letter-spacing:2em; + opacity:0; + white-space:nowrap +} +to{ + filter:blur(0); + opacity:1; + white-space:unset +} +} +@media only screen and (max-width:1440px){ +.about .bottom-page.mid-icon-info.short.about{ + font-size:18px; + line-height:26px; + max-width:300px; + padding-left:32px; + padding-right:32px +} +.about .bottom-page.big-icon-info.about{ + font-size:30px; + line-height:36px +} +.about .bottom-page .jobs-top-header{ + font-size:42px; + line-height:52px +} +.about .bottom-page.card.img{ + padding-left:32px; + padding-top:32px +} +.about .bottom-page.flip-card-title{ + font-size:24px; + line-height:29px; + padding:15px 0 24px 32px +} +.about .bottom-page.flip-card-desc{ + font-size:18px; + line-height:26px; + padding-left:32px; + padding-right:32px +} +.about .bottom-page.jobs-life-container{ + padding-bottom:78px +} +.about.office-locations-container{ + padding:120px 0 0 +} +.about .leaders-collapsible{ + grid-column-gap:32px +} +.about.leadership-desc{ + font-size:18px +} +.about.leadership-team-container{ + padding-top:96px +} +.about .jobs-top-pad{ + padding-top:unset +} +.about-mission-header{ + font-size:36px +} +.about .circle-animation-wrapper{ + background-position-y:-60vw +} +.about.black-background-container{ + height:583px +} +.about .carousel-button-next,.about .carousel-button-prev{ + display:flex; + justify-content:center +} +.about .carousel-photo.container{ + grid-gap:32px; + grid-template-columns:repeat(9, 1fr) +} +.about .right-side-jobs-container{ + grid-column:5 / span 8 +} +.about .c1.dream{ + grid-column:1 / span 3 +} +.about .c2.dream{ + grid-column:4 / span 3 +} +.about .c3.dream{ + grid-column:7 / span 3 +} +.about .c4.dream{ + grid-column:10 / span 3 +} +.about .dream-caption{ + font:var(--text-h2-bold) +} +.about .overlay-text1{ + font:var(--text-h3); + max-width:327px; + padding:48px 0 0 56px +} +.about .overlay-text2{ + font:var(--text-h3); + max-width:327px; + padding:121px 0 0 56px +} +.about.mega-story-container{ + padding:80px 0 0 +} +.about .carousel-wrapper{ + padding-top:80px +} +.about.sub-header{ + font-size:36px; + inline-size:unset; + line-height:34px +} +.about .carousel-date{ + font-size:18px +} +.about .carousel-title{ + font-size:24px +} +.about .carousel-desc{ + font-size:18px +} +.about .location-title{ + font-size:36px; + line-height:44px; + padding-bottom:64px +} +.about.city-address{ + font:var(--text-h3); + padding-bottom:32px +} +.about.vision-title{ + font-size:36px; + line-height:44px +} +.about.promise-desc{ + font-size:52px; + line-height:63px +} +.about.promise-title:after{ + font-size:36px; + line-height:44px; + padding-top:152px +} +.about.vision-desc{ + font-size:42px; + line-height:52px; + max-width:1028px +} +.about.jobs-btn{ + font:var(--text-h2-bold); + height:56px; + padding-left:24px; + padding-right:24px +} +.about .submit-box{ + border-radius:48px 48px 0 0; + grid-column:5 / span 8 +} +.about .submit-jobs{ + border-radius:8px; + color:var(--text-color-high); + font-size:20px; + height:56px; + line-height:24px; + width:144px +} +.about.dream-img{ + height:191px +} +.about.jobs.sub-header,.about.jobs.sub-header2{ + font-size:36px; + line-height:44px +} +.about.jobs.sub-header2{ + grid-column:1 / span 6 +} +.about.jobs.sub-header3{ + font-size:36px; + line-height:44px +} +.about .grid-layout-container{ + grid-gap:32px +} +.about .flip-card{ + width:100% +} +} +@media only screen and (max-width:1240px){ +.about .grid-layout-container.cards{ + grid-template-rows:auto +} +.text-focus-contract.start-animation{ + white-space:normal +} +.about.jobs.sub-header2{ + padding-bottom:80px +} +.about.jobs.sub-header3{ + grid-column:1 / span 5 +} +.about.dream-img{ + height:159px +} +.about.jobs.sub-header{ + grid-column:1 / span 4; + padding-bottom:80px +} +.about .right-side-jobs-container,.about .submit-box{ + grid-column:4 / span 12 +} +.about .c1.job-card{ + grid-column:2 / span 5 +} +.about .c2.job-card{ + grid-column:7 / span 5 +} +.about .c3.job-card{ + grid-column:2 / span 5 +} +.about .c4.job-card{ + grid-column:7 / span 5 +} +.about .c5.job-card{ + grid-column:2 / span 5 +} +.about .c6.job-card{ + grid-column:7 / span 5 +} +} +@media only screen and (max-width:1200px){ +.about.promise-desc{ + font-size:48px; + line-height:63px; + padding-top:120px +} +.about .location-title{ + font-size:30px; + padding-bottom:32px +} +.about.city-address{ + padding-bottom:32px +} +} +@media only screen and (max-width:1050px){ +.about.vision-title{ + font-size:28px; + line-height:34px +} +.about.vision-desc{ + font-size:36px; + line-height:44px; + max-width:700px +} +.about .flip-card-inner{ + height:100%; + width:100% +} +.about .submit-box{ + border-radius:32px 32px 0 0 +} +.about .submit-jobs{ + border-radius:8px; + font-size:18px; + height:48px; + line-height:22px; + width:107px +} +} +@media only screen and (max-width:1024px){ +.about.sub-header.two{ + grid-column:1 / span 8 +} +.about .carousel-photo.container{ + height:600px +} +.about .gradient-wrapper{ + grid-column:2 / span 6 +} +.about .timeline-container{ + grid-column:1 / span 8; + padding-bottom:160px +} +.about .carousel-photo.container{ + grid-gap:24px; + grid-template-columns:repeat(8, 1fr) +} +.about .carousel-photo,.about .carousel-text-container{ + grid-column:2 / span 6 +} +.about .carousel-photo{ + width:100% +} +.about .carousel-button-prev{ + align-self:start; + grid-column:1 / span 1; + grid-row:2 +} +.about .carousel-button-next{ + align-self:start; + grid-column:8 / span 1 +} +.about.sub-header{ + grid-column:1 / span 8 +} +.about .grid-layout-container.story{ + grid-gap:24px; + grid-template-columns:repeat(8, 1fr) +} +.about.promise-title{ + padding-top:10% +} +.about .grey-bg-container.one{ + margin-top:unset +} +.about.office-locations-container{ + padding:64px 0 0 +} +.about .grey-bg.mission{ + background-color:#fff +} +.about .grid-layout-container.mission{ + padding:unset +} +.about .location-grid-wrapper{ + grid-gap:24px; + display:grid; + grid-template-columns:repeat(8, 1fr) +} +.about .location-title{ + grid-column:1 / span 8 +} +.about .location-wrapper.one{ + grid-column:1 / span 4 +} +.about .location-wrapper.two{ + grid-column:5 / span 4 +} +.about.location-info-block,.about .office-img-container{ + grid-column:1 / span 8 +} +.about .grid-layout-container.locations{ + grid-gap:24px; + grid-template-columns:repeat(8, 1fr) +} +.about-mission-header{ + padding:4px 0 0 +} +.about.jobs.sub-header3{ + padding-bottom:80px +} +.about .bottom-page.mid-icon-info.short.about{ + margin:unset; + max-width:unset; + text-align:left; + width:344px +} +.about .bottom-page.big-icon-info.about{ + font-size:24px; + padding-left:32px; + text-align:left +} +.about.privacy1{ + grid-column:1 / span 6; + place-self:center +} +.about.empowering1,.text-container-privacy{ + grid-column:7 / span 5; + place-self:center +} +.about.leaders1,.about .text-container-empower{ + grid-column:1 / span 6; + place-self:center +} +.about .text-container-leaders{ + grid-column:7 / span 5; + place-self:center +} +.about .grey-bg-container{ + grid-gap:24px; + background-color:unset; + display:grid; + grid-auto-flow:column; + grid-template-columns:repeat(12, 1fr); + margin-bottom:80px; + padding:0 6% +} +.about .grey-bg-container.two{ + background-color:#f6f6f6; + border-radius:unset +} +.about.c1,.about.c2,.about.c3,.about .right-side-jobs-container,.about .submit-box{ + grid-column:1 / span 12 +} +.about.jobs.sub-header2{ + grid-column:1 / span 7 +} +.about.dream-img{ + height:273px +} +.about .grid-layout-container{ + grid-gap:24px +} +.about .c1.dream{ + grid-column:1 / span 6 +} +.about .c2.dream{ + grid-column:7 / span 6 +} +.about .c3.dream{ + grid-column:1 / span 6 +} +.about .c4.dream{ + grid-column:7 / span 6 +} +.about .c1.job-card{ + grid-column:1 / span 6 +} +.about .c2.job-card{ + grid-column:7 / span 6 +} +.about .c3.job-card{ + grid-column:1 / span 6 +} +.about .c4.job-card{ + grid-column:7 / span 6 +} +.about .c5.job-card{ + grid-column:1 / span 6 +} +.about .c6.job-card{ + grid-column:7 / span 6 +} +} +@media only screen and (max-width:1005px){ +.about.info-block{ + padding-left:unset +} +.about.white-space-block{ + padding-top:20px +} +} +@media only screen and (orientation:landscape) and (max-height:900px){ +.about.office1{ + max-height:35vw +} +} +@media only screen and (orientation:landscape) and (max-height:900px) and (max-width:1200px){ +.about.office1{ + max-height:50vw +} +} +@media only screen and (orientation:landscape) and (max-width:1366px){ +.about .location-grid-wrapper{ + grid-gap:24px; + display:grid; + grid-template-columns:repeat(8, 1fr) +} +.about .location-title{ + grid-column:1 / span 8 +} +.about .location-wrapper.one{ + grid-column:1 / span 4 +} +.about .location-wrapper.two{ + grid-column:5 / span 4 +} +.about.location-info-block,.about .office-img-container{ + grid-column:1 / span 8 +} +.about .grid-layout-container.locations{ + grid-gap:24px; + grid-template-columns:repeat(8, 1fr) +} +} +@media only screen and (orientation:landscape) and (max-width:900px){ +.about.office1{ + max-height:unset +} +.about .bottom-page.big-bott-pad.jobs{ + padding-bottom:48px +} +.about .bottom-page.ultra-huge-top-pad.jobs{ + padding-top:80px +} +.about.jobs.sub-header,.about.jobs.sub-header2{ + padding-bottom:40px +} +.about .bottom-page.jobs-life-container{ + padding-bottom:38px +} +.about .white-space-top{ + padding-top:50px +} +.about.jobs.sub-header3{ + padding-bottom:40px +} +.about .bottom-padding{ + padding-bottom:50px +} +.about-bott-pad{ + padding-bottom:160px +} +.about .bottom-page.ultra-huge-top-pad.mini{ + padding-top:60px +} +.about .grey-bg-container{ + padding-top:unset +} +.about .timeline-container{ + padding-top:50px +} +.about.office-locations-container{ + padding:80px 0 0 +} +.about .location-title{ + padding-top:40px +} +} +@media only screen and (max-width:905px){ +.about.numbers-info .num,.about.numbers-info .num span,.en .about.numbers-info .num{ + font-size:40px +} +.about.numbers-info{ + font-size:16px +} +.ru .about .bottom-page.big-icon-info{ + font-size:22px +} +.id .about .bottom-page.big-icon-info{ + font-size:26px +} +} +@media only screen and (max-width:900px){ +.about .submit-box{ + grid-column:1 / span 8 +} +.about .leaders-txt-container{ + padding-bottom:64px; + padding-top:24px +} +.about .grid-layout-container.leaders{ + grid-template-columns:repeat(12, 1fr) +} +.about.promise-desc{ + padding-top:20vw +} +.about .grid-layout-container{ + grid-gap:24px; + grid-template-columns:repeat(8, 1fr) +} +.about .circle-animation-wrapper{ + background-position-y:-80vw +} +.about.black-background-container{ + height:768px +} +.about .bottom-page.mid-icon-info.short.about{ + width:298px +} +.about-mission-header{ + grid-column:2 / span 8 +} +.about .grey-bg-container{ + grid-template-columns:repeat(8, 1fr) +} +.about.privacy1{ + grid-column:1 / span 4 +} +.about.empowering1,.about .text-container-privacy{ + grid-column:5 / span 4 +} +.about.leaders1,.about .text-container-empower{ + grid-column:1 / span 4 +} +.about .text-container-leaders{ + grid-column:5 / span 4 +} +.about .right-side-jobs-container{ + grid-column:1 / span 8 +} +.about.jobs.sub-header3{ + grid-column:1 / span 4 +} +.about.dream-img{ + height:273px +} +.about .c1.dream{ + grid-column:1 / span 4 +} +.about .c2.dream{ + grid-column:5 / span 4 +} +.about .c3.dream{ + grid-column:1 / span 4 +} +.about .c4.dream{ + grid-column:5 / span 4 +} +.about .c1.job-card{ + grid-column:1 / span 4 +} +.about .c2.job-card{ + grid-column:5 / span 4 +} +.about .c3.job-card{ + grid-column:1 / span 4 +} +.about .c4.job-card{ + grid-column:5 / span 4 +} +.about .c5.job-card{ + grid-column:1 / span 4 +} +.about .c6.job-card{ + grid-column:5 / span 4 +} +} +@media only screen and (max-width:890px){ +.about .carousel-photo.container{ + height:500px +} +div.about.hiring{ + background-image:none +} +.about.hiring-txt{ + margin-right:15px; + margin-top:125px; + width:300px +} +.en .about.hiring-txt{ + margin-top:121px +} +.br .about.hiring-txt{ + margin-top:145px; + width:auto +} +.es .about.hiring-txt span{ + font-size:32px +} +.about.joing-txt{ + margin:0 +} +.about.hiring-txt span,.en .about.hiring-txt span{ + line-height:84px +} +} +@media only screen and (max-width:783px){ +.about.leadership-desc{ + grid-column:1 / span 8 +} +.about .bottom-page.flip-card-desc.invert{ + font-size:16px +} +.about .bottom-page .inline-block.col-3.about{ + padding-left:24px; + padding-right:24px +} +.about .submit-jobs{ + margin:40px 40px 40px 0 +} +.about.promise-desc{ + padding-top:10vw +} +.about.leadership-desc{ + line-height:26px +} +.about.leadership-col1{ + grid-column:1 / span 4 +} +.about.leadership-col2{ + grid-column:5 / span 4 +} +.about.leadership-col3{ + grid-column:1 / span 4 +} +.about.leadership-col4{ + grid-column:5 / span 4 +} +.about .grid-layout-container.leaders{ + grid-column-gap:24px; + grid-template-columns:repeat(8, 1fr) +} +.about .leaders-collapsible{ + grid-column-gap:24px; + grid-column:1 / span 8; + grid-template-columns:repeat(8, 1fr) +} +.about.black-background-container{ + height:563px +} +.about .bottom-page.big-icon-info.about{ + font-size:24px; + padding-left:24px; + text-align:left +} +.about .bottom-page.mid-icon-info.short.about{ + padding-left:24px; + padding-right:24px +} +.about .job-desc{ + max-width:456px +} +.about .white-space-top{ + padding-top:50px +} +.about.dream-item{ + height:286px +} +.about.jobs.sub-header2{ + grid-column:1 / span 8; + padding-bottom:64px +} +.about .carousel-desc,.about .grey-bg-container{ + padding-bottom:48px +} +.about.promise-title:after{ + max-width:616px +} +.about.promise-title,.about.promise-title:after{ + font-size:28px; + line-height:34px; + padding-top:135px +} +.about.jobs.sub-header3{ + font-size:28px; + line-height:34px +} +.about .right-side-jobs-container,.about .submit-box{ + grid-column:1 / span 8 +} +.about.dream-img{ + height:198px +} +.about.hiring-txt,.about.joing-txt,.id .about.joing-txt{ + width:auto +} +.about.numbers-info .num,.about.numbers-info .num span{ + font-size:28px +} +.en .about.numbers-info .num,.en .about.numbers-info .num span{ + font-size:44px +} +.about.main-menu.item{ + font-size:14px; + margin:0 0 -1px 20px +} +.en .about.main-menu.item{ + margin-left:30px +} +.en .about.main-menu.item:first-child{ + margin-left:0 +} +.about .bottom-page .col-6{ + width:25% +} +.about.hiring{ + height:auto +} +.about.hiring-txt,.br .about.hiring-txt,.en .about.hiring-txt,.es .about.hiring-txt,.pl .about.hiring-txt,.ro .about.hiring-txt{ + display:block; + font-size:20px; + line-height:28px; + margin:30px 0 0 +} +.about.hiring-txt span{ + line-height:50px +} +.about.joing-txt{ + font-size:20px; + line-height:30px; + margin:0; + padding:20px 0 30px +} +.about.joing-txt span{ + padding:0 0 12px +} +.about-privacy .bottom-page.table.changed-order .left-cell,.about-privacy .bottom-page.table.changed-order .right-cell{ + height:auto +} +.about-privacy .bottom-page.left-cell,.bottom-page.right-cell{ + display:block; + text-align:center; + width:100% +} +.about-privacy .bottom-page.table.changed-order .order2{ + display:block +} +.about-privacy .bottom-page.table.changed-order .order1{ + display:none +} +.about-privacy .about.top-info,.about-privacy .bottom-page.big-header.left-txt-align{ + text-align:center +} +.bottom-page.about-sprite.encryption,.bottom-page.about-sprite.use{ + margin:30px 0 10px +} +.bottom-page.about-sprite.use{ + background-position:center -1165px; + background-size:525px auto +} +.about.use-header{ + padding-bottom:20px +} +.bottom-page.about-sprite.gdpr{ + margin:30px 0 0 +} +} +@media only screen and (max-width:768px){ +.about .bottom-page .jobs-top-header{ + font-size:36px; + inline-size:400px; + line-height:44px +} +.about .bottom-page.card.img{ + height:48px; + width:48px +} +.about .bottom-page.flip-card-title{ + font-size:22px; + line-height:27px; + padding:15px 0 24px 32px +} +.about .bottom-page.flip-card-desc{ + font-size:18px; + line-height:26px; + padding-left:32px +} +.about .bottom-page.jobs-life-container{ + padding-bottom:70px +} +.about-mission-header,.about.sub-header{ + font-size:28px +} +.about .location-title{ + font-size:28px; + line-height:34px; + padding-bottom:32px +} +.about .submit-txt{ + font-size:20px; + line-height:30px; + margin:37px 0 37px 40px +} +.about.top-info.jobs{ + font:var(--text-h3); + inline-size:300px +} +.about.jobs-btn{ + height:48px +} +.about.jobs.sub-header,.about.jobs.sub-header2{ + font-size:28px; + line-height:34px +} +} +@media only screen and (min-width:783px){ +.about .job-title.hover{ + cursor:pointer; + font-size:26px +} +.about .job-list-arrow.hover{ + background:url(../imagery/mega-about-Arrowright_24_red.8b77ae36b5e9bb08.svg) no-repeat 8px 0 +} +} +@media only screen and (max-width:715px){ +.about .bottom-page .vision-col-4{ + width:auto +} +} +@media only screen and (max-width:675px){ +.about.vision-title{ + font-size:28px; + line-height:34px +} +.about.vision-desc{ + font-size:30px; + line-height:37px; + max-width:500px +} +.about .overlay-text1{ + max-width:300px; + padding:30px 0 0 30px; + position:absolute +} +.about .overlay-text2{ + max-width:300px; + padding:120px 0 0 30px; + position:absolute +} +} +@media only screen and (max-width:600px){ +.about .grid-layout-container.story{ + grid-gap:16px +} +.about-mission-header{ + grid-column:2 / span 8 +} +.about.empowering1,.about.leaders1,.about.privacy1,.about .text-container-empower,.about .text-container-leaders,.about .text-container-privacy{ + grid-column:1 / span 6 +} +.about .grey-bg-container{ + grid-gap:16px; + grid-template-columns:repeat(6, 1fr) +} +.about .grid-layout-container{ + grid-gap:16px +} +.about .c1.job-card,.about .c2.job-card,.about .c3.job-card,.about .c4.job-card,.about .c5.job-card,.about .c6.job-card{ + grid-column:1 / span 8 +} +.about.dream-img{ + height:160px +} +} +@media only screen and (max-width:565px){ +.about .submit-txt{ + margin:37px 0 24px 24px +} +.ru .about.main-menu.item{ + font-size:12px +} +.believe .inline-block.mid-pad{ + margin-top:-12px; + padding-top:0 +} +.believe .bottom-page.big-icon-info{ + padding:12px 0 41px +} +.about.hiring{ + margin:30px auto 0 +} +.about.top-info{ + padding:36px 0 18px +} +.about.numbers-info{ + font-size:16px; + line-height:18px +} +.about .bottom-page.ultra-huge-top-pad{ + padding-top:60px +} +.about .bottom-page.big-header.big-bott-pad{ + padding-bottom:24px +} +.about .bottom-page.big-icon-info{ + font-size:24px; + line-height:28px +} +.about .bottom-page .col-6{ + width:50% +} +.about.carousel{ + height:500px +} +.about.top-info,.bottom-page.big-header.left-txt-align{ + text-align:center +} +.about.img4{ + margin:47px 0 8px 3% +} +.about.img5{ + margin:20px -50% 8px +} +.about.img6{ + margin:38px 0 50px +} +.about.numbers-info .num,.about.numbers-info .num span{ + font-size:20px; + line-height:28px +} +.about.numbers-info .num span{ + padding:4px 0 0 +} +} +@media only screen and (max-width:490px){ +.about.dream-img{ + height:150px +} +.about.main-menu.item{ + margin:0 0 -1px 15px +} +.br .about.main-menu.item,.fr .about.main-menu.item,.it .about.main-menu.item{ + font-size:12px +} +.ru .about.main-menu.body{ + padding-left:10px; + padding-right:10px; + white-space:normal +} +.ru .about.main-menu.item{ + margin:0; + width:50% +} +.ru .about.main-menu.item span{ + margin-bottom:10px; + padding-bottom:0 +} +.nl .about.main-menu.item{ + font-size:12px +} +} +@media only screen and (max-width:420px){ +.about.vision-desc{ + font-size:26px +} +.about.office1{ + max-height:unset +} +.about .bottom-page.jobs-life-container{ + padding-bottom:46px +} +.about .bottom-page.flip-card-desc.invert{ + font-size:14px; + line-height:20px; + padding-top:16px +} +.about .bottom-page.flip-card-desc{ + font-size:16px; + line-height:23px +} +.about .bottom-page.mid-icon-info.short.about{ + font-size:16px +} +.about .bottom-page .jobs-top-header{ + font-size:30px; + inline-size:300px; + line-height:37px +} +.about .bottom-page.flip-card-title{ + font-size:20px; + line-height:24px; + padding:15px 0 24px 32px +} +.about .bottom-page.flip-card-desc{ + font-size:16px; + line-height:23px; + max-width:278px; + padding-left:32px +} +.about .bottom-page.jobs-life-container{ + padding-bottom:88px +} +.about .submit-txt{ + font-size:16px; + line-height:24px; + margin:28px 0 28px 24px +} +.about .submit-jobs{ + font-size:16px; + height:40px; + margin:44px 24px 44px 0; + width:80px +} +.about .submit-box{ + grid-column:1 / span 6 +} +.about .cd-horizontal-timeline .events-content li.left{ + left:5%; + opacity:1 +} +.about .cd-horizontal-timeline .events-content li.right{ + left:195%; + opacity:1 +} +.about .cd-horizontal-timeline .events-content li.left .gradient-wrapper:after,.about .cd-horizontal-timeline .events-content li.right .gradient-wrapper:after{ + background:linear-gradient(rgba(29 29 29 .2), rgba(29 29 29 .2)) +} +.about .cd-horizontal-timeline .events-content li.left .carousel-text-container,.about .cd-horizontal-timeline .events-content li.right .carousel-text-container{ + opacity:.5 +} +.about .gradient-wrapper{ + grid-column:1 / span 6; + margin:0 auto; + width:294px +} +.about .timeline-container p{ + right:19px +} +.about .cd-horizontal-timeline .events a{ + font-size:16px +} +.about .cd-horizontal-timeline .events a.selected{ + color:#bf1515; + font-size:16px +} +.about.leadership-team-container{ + padding-bottom:56px; + padding-top:72px +} +.about.promise-desc{ + padding-top:20vw +} +.about.leaders-title{ + font-size:16px +} +.about .leaders-name{ + font-size:18px +} +.about .leaders-txt-container{ + padding-bottom:48px; + padding-top:16px +} +.about.leadership-desc{ + font-size:16px; + grid-column:1 / span 6 +} +.about .leaders-collapsible{ + grid-column:1 / span 6 +} +.about .grid-layout-container.leaders,.about .leaders-collapsible{ + grid-column-gap:16px; + grid-template-columns:repeat(6, 1fr) +} +.about.leadership-col1,.about.leadership-col2,.about.leadership-col3,.about.leadership-col4{ + grid-column:1 / span 6 +} +.about .bottom-padding{ + padding-bottom:64px +} +.about .jobs-top-pad{ + padding-top:10px +} +.about.mega-story-container{ + padding:72px 0 0 +} +.about .grid-layout-container.story{ + grid-gap:16px; + grid-template-columns:repeat(6, 1fr) +} +.about.jobs.sub-header{ + grid-column:1 / span 6 +} +.about .timeline-container{ + overflow:unset; + padding-bottom:32px; + padding-top:20px +} +.about .bottom-page.ultra-huge-top-pad.mini{ + padding-top:unset +} +.about-bott-pad{ + padding-bottom:112px +} +.about .bottom-page.big-icon-info.about{ + font-size:22px +} +.about.vision-desc{ + max-width:300px +} +.about.city-title{ + font-size:18px; + padding-top:16px +} +.about .location-title{ + padding-top:42px +} +.about.empowering1,.about.leaders1{ + padding-top:104px +} +.about.privacy1{ + padding-top:60px +} +.about .grey-bg-container{ + grid-row-gap:unset; + margin-top:unset; + padding-bottom:unset; + padding-top:unset +} +.about.promise-desc{ + font-size:34px; + line-height:42px +} +.about .job-title{ + font-size:20px; + padding-top:unset +} +.about .department-title{ + padding-bottom:8.5px +} +.about .white-space-top{ + border-radius:32px 32px 0 0; + padding-top:22px +} +.about.small-txt-container{ + padding-top:10px +} +.about.jobs-img1{ + border-radius:32px 32px 0 0 +} +.about-mission-header{ + padding-top:72px +} +.about .bottom-page.mid-icon-info.short.about{ + font-size:16px +} +.about.bottom-page.big-icon-info{ + font-size:22px +} +.about .carousel-photo{ + grid-column:1 / span 6 +} +.about .carousel-text-container{ + grid-column:1 / span 6; + height:300px; + margin:0 auto; + width:294px +} +.about.sub-header{ + grid-column:1 / span 6 +} +.about .carousel-photo.container{ + grid-gap:16px; + grid-template-columns:repeat(6, 1fr) +} +.about .location-wrapper.one,.about .location-wrapper.two{ + grid-column:1 / span 8 +} +.about .job-desc{ + font-size:18px; + max-width:282px; + padding-top:8px +} +.about.jobs.sub-header3{ + padding-bottom:40px +} +.about.jobs.sub-header3,.about .right-side-jobs-container{ + grid-column:1 / span 6 +} +.about.dream-img{ + height:228px +} +.about .c1.dream,.about .c2.dream,.about .c3.dream,.about .c4.dream{ + grid-column:1 / span 8 +} +.about .c1.job-card,.about .c2.job-card,.about .c3.job-card,.about .c4.job-card,.about .c5.job-card,.about .c6.job-card{ + grid-column:1 / span 6 +} +.about .grid-layout-container{ + grid-gap:16px; + grid-template-columns:repeat(6, 1fr) +} +.about .grid-row-gap{ + row-gap:30px +} +.about .carousel-date{ + font-size:16px; + padding-bottom:16px +} +.about .carousel-title{ + font-size:20px; + line-height:24px; + padding-bottom:16px +} +.about .carousel-desc{ + font-size:16px; + padding-bottom:32px +} +.about.jobs-btn{ + font:var(--text-h3-bold); + height:40px; + padding-left:20px; + padding-right:20px +} +.about.jobs.sub-header2{ + font-size:24px; + line-height:34px; + padding-bottom:0 +} +.about .carousel-button-next,.about .carousel-button-prev{ + display:none +} +.about.office-locations-container{ + padding:40px 0 0 +} +.about .overlay-text1{ + padding:24px 0 16px +} +.about .overlay-text1,.about .overlay-text2{ + color:unset; + max-width:unset; + position:unset +} +.about .overlay-text2{ + padding:unset +} +.bottom-page.big-header{ + font-size:20px; + line-height:28px +} +.about.top-info{ + font-size:14px; + line-height:21px; + padding:0 0 15px +} +.about.numbers-info .num span,.en .about.numbers-info .num,.en .about.numbers-info .num span{ + font-size:20px; + line-height:28px +} +.about.numbers-wrap{ + padding-bottom:40px +} +.about.numbers-info{ + font-size:14px; + line-height:18px; + padding-top:40px +} +.en .about.numbers-info .num span{ + padding-bottom:8px +} +.about .bottom-page.big-header.big-bott-pad{ + padding-bottom:24px +} +.about .bottom-page.big-icon-info,.id .about .bottom-page.big-icon-info,.ru .about .bottom-page.big-icon-info{ + font-size:20px; + line-height:24px +} +.about .inline-block.mid-pad:last-child{ + padding-bottom:10px +} +.about .big-bott-pad+.bottom-page.top-pad{ + padding-top:20px +} +.about.bold-header{ + font-size:20px; + line-height:24px; + padding:88px 0 0 +} +.about.members{ + margin:0 auto 20px +} +.about.hiring{ + height:auto; + padding:0 10px +} +.about.hiring-txt span,.ct .about.hiring-txt span,.en .about.hiring-txt span,.es .about.hiring-txt span,.id .about.hiring-txt span,.kr .about.hiring-txt span,.nl .about.hiring-txt span,.ro .about.hiring-txt span{ + font-size:34px; + line-height:50px +} +.br .about.hiring-txt span,.es .about.hiring-txt span,.nl .about.hiring-txt span,.pl .about.hiring-txt span{ + font-size:24px; + line-height:28px; + padding-top:10px +} +.about.joing-txt,.about.white-button{ + font-size:18px +} +.bottom-page.about-sprite.use{ + background-position:center -921px; + background-size:415px auto; + height:159px; + margin-bottom:0; + width:273px +} +.about.use-header{ + font-size:13px +} +.bottom-page.about-sprite.encryption{ + background-position:-8px -1137px; + background-size:415px auto; + height:137px; + width:142px +} +.bottom-page.about-sprite.gdpr{ + background-position:-238px -1122px; + background-size:415px auto; + height:205px; + margin:30px 0 -30px; + width:162px +} +.about.top-info.top-pad{ + padding:24px 0 0 +} +.about.data-header span{ + font-size:16px +} +.de .about.main-menu.item,.es .about.main-menu.item,.ro .about.main-menu.item,.tl .about.main-menu.item,.vi .about.main-menu.item{ + font-size:12px +} +.nl .about.main-menu.body{ + padding-left:10px; + padding-right:10px; + white-space:normal +} +.nl .about.main-menu.item{ + margin:0; + width:50% +} +.nl .about.main-menu.item span{ + margin-bottom:10px; + padding-bottom:0 +} +.about.leader{ + margin-left:-20px; + margin-right:-20px +} +} +@media only screen and (max-width:380px){ +.about .submit-txt{ + font-size:14px; + line-height:24px; + margin:28px 0 14px 14px +} +.about .carousel-text-container,.about .gradient-wrapper{ + width:280px +} +.about.main-menu.body{ + white-space:normal +} +.about.main-menu.item{ + font-size:12px +} +.ar .about.main-menu.item,.cn .about.main-menu.item,.ct .about.main-menu.item{ + font-size:14px +} +.br .about.main-menu.body,.es .about.main-menu.body,.fr .about.main-menu.body,.it .about.main-menu.body,.pl .about.main-menu.body,.ro .about.main-menu.body,.vi .about.main-menu.body{ + padding-left:10px; + padding-right:10px; + white-space:normal +} +.br .about.main-menu.item,.de .about.main-menu.item,.es .about.main-menu.item,.fr .about.main-menu.item,.it .about.main-menu.item,.pl .about.main-menu.item,.ro .about.main-menu.item,.vi .about.main-menu.item{ + margin:0; + width:50% +} +.br .about.main-menu.item span,.de .about.main-menu.item span,.es .about.main-menu.item span,.fr .about.main-menu.item span,.it .about.main-menu.item span,.pl .about.main-menu.item span,.ro .about.main-menu.item span,.vi .about.main-menu.item span{ + margin-bottom:10px; + padding-bottom:0 +} +.about .bottom-page .col-4{ + width:100% +} +.about.use-header{ + padding-bottom:0 +} +} +@media only screen and (max-width:350px){ +.about .carousel-text-container,.about .gradient-wrapper{ + width:260px +} +.about .flip-card{ + width:296px +} +.about .overlay-text1{ + max-width:300px; + padding:40px 0 0 40px; + position:absolute +} +.about .overlay-text2{ + max-width:300px; + padding:120px 0 0 40px; + position:absolute +} +} +@media only screen and (max-width:340px){ +.bottom-page.about-sprite.use{ + background-position:center -699px; + background-size:315px auto; + height:121px; + width:205px +} +.ru .about.main-menu.item{ + text-transform:none +} +} +@media only screen and (max-width:320px){ +.about .carousel-text-container,.about .gradient-wrapper{ + width:250px +} +.es .about.main-menu.body{ + padding-left:10px; + padding-right:10px; + white-space:normal +} +.es .about.main-menu.item{ + margin:0; + width:50% +} +.es .about.main-menu.item span{ + margin-bottom:10px; + padding-bottom:0 +} +} +@media only screen and (max-width:315px){ +.about .carousel-text-container,.about .gradient-wrapper{ + width:230px +} +.about.main-menu.body{ + padding-left:10px; + padding-right:10px; + white-space:normal +} +.about.main-menu.item,.en .about.main-menu.item{ + margin:0; + width:50% +} +.about.main-menu.item span{ + margin-bottom:10px; + padding-bottom:0 +} +} +@media only screen and (max-width:300px){ +.about .bottom-page .jobs-top-header,.about.top-info.jobs{ + inline-size:250px +} +.about .flip-card{ + width:250px +} +.about .bottom-page.mid-icon-info.short.about{ + width:220px +} +.about .text-container-privacy{ + place-self:unset +} +} + +.feature-page{ + --page-width:1194px; + font-family:LatoWeb,arial,sans-serif +} +.feature-page.storage{ + --header-background-color:#00c0a6; + --header-text-color:#fff; + --header-p-text-color:#fff +} +.feature-page.backup{ + --header-background-color:#fff; + --header-text-color:#333; + --header-p-text-color:#333 +} +.feature-page.chat{ + --header-background-color:#ed5564; + --header-text-color:#fff; + --header-p-text-color:#fff +} +.feature-page.collaboration{ + --header-background-color:#ffd899; + --header-text-color:#373737; + --header-p-text-color:#666 +} +.feature-page.objectstorage{ + --header-background-color:#fff; + --header-text-color:#1d1d1d; + --header-p-text-color:#1d1d1d +} +.feature-page *{ + box-sizing:border-box +} +body.rtl .feature-page *{ + direction:rtl +} +.feature-page h1,.feature-page h2,.feature-page h3,.feature-page p{ + font-weight:400; + margin:0 +} +.feature-page a,.feature-page a:link,.feature-page a:visited{ + color:#00c0a6; + text-decoration:underline +} +.feature-page a:active,.feature-page a:hover{ + text-decoration:none +} +.feature-page .header-block.colored-bg{ + background-color:hsla(0, 0%, 94.1%, .22); + background-image:radial-gradient(at top left, #fef1ea 15%, hsla(0, 0%, 100%, 0) 35%, hsla(0, 0%, 100%, 0)), + radial-gradient(closest-corner circle at 110%, #f5e9ff 5%, hsla(0, 0%, 100%, 0) 100%), + radial-gradient(at bottom right, #e6eeff 0, hsla(0, 0%, 100%, 0) 30%) +} +.feature-page.objectstorage .header-block{ + padding-bottom:70px; + padding-top:100px +} +.feature-page h1{ + font-family:var(--text-font-family-second-bold); + font-size:22px; + line-height:27px +} +.feature-page.objectstorage .header-block h1{ + font-family:LatoWebBlack,sans-serif; + font-size:24px; + line-height:29px +} +.feature-page h2{ + color:#373737; + font-family:var(--text-font-family-second-bold); + font-size:32px; + line-height:48px +} +.feature-page h2.light{ + font-family:var(--text-font-family-second-light) +} +.feature-page.objectstorage .header-block h2{ + font-family:var(--text-font-family-second-bold); + font-size:42px; + font-weight:900; + line-height:52px +} +.feature-page h3{ + color:#373737; + font-family:var(--text-font-family-second-light); + font-size:24px; + line-height:30px +} +.feature-page p{ + color:#666; + font-size:16px; + line-height:24px +} +.feature-page.objectstorage .header-block p{ + font-size:20px; + line-height:28px +} +.feature-page.objectstorage .header-block .image div{ + display:flex; + margin-bottom:16px +} +.feature-page.objectstorage .header-block .image img{ + background-image:url(../imagery/mega-features-objectstorage-header_desktop.ebd377382cb8f92f.png); + background-repeat:no-repeat; + border-radius:12px; + height:10%; + width:83% +} +.feature-page.objectstorage .header-block .image .image-desc{ + color:#666; + font-family:LatoWeb,Arial,sans-serif; + font-size:12px; + height:15px; + letter-spacing:0; + line-height:15px; + margin-right:112px; + text-align:right +} +.feature-page h1:last-child,.feature-page h2:last-child,.feature-page h3:last-child,.feature-page p:last-child{ + margin-bottom:0 +} +.feature-page section{ + align-items:center; + display:flex; + flex-wrap:wrap; + justify-content:center; + overflow:hidden; + padding:0 calc(50% - var(--page-width)/2); + position:relative; + z-index:5 +} +.mobile .bottom-page.top-bl{ + max-height:none +} +.logged .feature-page .logged-in-only{ + display:block +} +.logged .feature-page .logged-out-only,.not-logged .feature-page .logged-in-only{ + display:none +} +.not-logged .feature-page .logged-out-only{ + display:block +} +body.mobile .feature-page .desktop-only,body:not(.mobile) .feature-page .mobile-only{ + display:none +} +.feature-page .not-business-user-only{ + display:block +} +.feature-page .business-user-only{ + display:none +} +.business-user .feature-page .business-user-only{ + display:block +} +.business-user .feature-page .not-business-user-only{ + display:none +} +.feature-page a.cta{ + background-color:#00c0a6; + border-radius:2px; + color:#fff; + display:inline-block; + font-size:18px; + height:48px; + letter-spacing:0; + line-height:48px; + min-width:192px; + padding:0 24px; + text-align:center; + text-decoration:none !important; + transition:all .2s ease-in-out +} +.feature-page a.cta:hover{ + background-color:#00ac94; + box-shadow:0 0 0 4px rgba(0, 191, 165, .3) +} +.mobile .feature-page a.cta:hover{ + background-color:#00c0a6; + box-shadow:none !important +} +.feature-page .app-links{ + margin-top:15px; + text-align:center +} +.feature-page .app-links a{ + -webkit-margin-end:16px; + display:inline-block; + margin:16px 0 0; + margin-inline-end:16px; + vertical-align:top +} +.feature-page section.light-emphasis{ + background-color:#fafafa +} +.feature-page .header-block{ + background-color:var(--header-background-color); + padding-bottom:150px; + padding-top:140px +} +.feature-page .header-block h1,.feature-page .header-block h2{ + color:var(--header-text-color) +} +.feature-page .header-block h1{ + margin-bottom:12px +} +.feature-page .header-block h2{ + font-size:40px; + line-height:60px; + margin-bottom:12px +} +.feature-page .header-block p{ + color:var(--header-p-text-color); + margin-bottom:35px +} +.feature-page .header-block .text{ + box-sizing:border-box; + padding:0 50px; + width:50%; + z-index:2 +} +.feature-page .header-block .image{ + width:50%; + z-index:2 +} +.feature-page .header-block .image img,.feature-page .header-block .image picture{ + float:left; + width:100% +} +.rtl .feature-page .header-block .image img,.rtl .feature-page .header-block .image picture{ + float:right +} +.rtl .feature-page .header-block .image img{ + object-fit:contain +} +.feature-page .header-block .background-image{ + height:80%; + position:absolute; + z-index:1 +} +.feature-page.chat .header-block .background-image,.feature-page.storage .header-block .background-image{ + mix-blend-mode:multiply +} +.feature-page .header-block .background-image-1{ + bottom:0; + left:0 +} +.feature-page .header-block .background-image-2{ + right:0; + top:0 +} +.feature-page.storage .header-block .background-image-1{ + bottom:auto; + left:0; + top:0 +} +.feature-page.storage .header-block .background-image-2{ + bottom:0; + top:auto +} +.feature-page.storage .header-block a.cta{ + background-color:#fff; + color:#00c0a6 +} +.feature-page.storage .header-block a.cta:hover{ + background-color:#fafafa; + box-shadow:0 0 0 4px rgba(0, 0, 0, .15) +} +.feature-page.chat .header-block a.cta{ + background-color:#fff; + color:#333 +} +.feature-page.chat .header-block a.cta:hover{ + background-color:#fafafa; + box-shadow:0 0 0 4px rgba(0, 0, 0, .15) +} +.feature-page.objectstorage .header-block a.cta{ + background-color:#1d1d1d; + border-radius:8px; + color:#fafafa; + font-family:LatoWebBlack,sans-serif; + min-width:144px +} +.feature-page.objectstorage .header-block a.cta:hover{ + background-color:#1d1d1d; + box-shadow:0 0 0 4px rgba(0, 0, 0, .15) +} +@media only screen and (max-width:1220px){ +.feature-page .header-block .image{ + -webkit-padding-end:25px; + padding-inline-end:25px +} +} +@media only screen and (max-width:950px){ +.feature-page .header-block{ + flex-direction:column; + padding-bottom:115px; + padding-top:95px; + text-align:center +} +.feature-page.objectstorage .header-block{ + padding-left:40px; + text-align:left +} +.feature-page.objectstorage .header-block h2{ + width:51% +} +.feature-page.objectstorage .header-block p{ + width:58vw +} +.feature-page.objectstorage .header-block .image-desc{ + padding-right:105px; + width:100% +} +.feature-page .header-block .background-image{ + display:none +} +.feature-page .header-block h2{ + font-size:36px; + line-height:48px +} +.feature-page .header-block .text{ + margin-bottom:65px; + padding:0; + width:calc(100% - 160px) +} +.feature-page.objectstorage .header-block .text{ + padding:0 +} +.feature-page .header-block .image,.rtl .feature-page .header-block .image{ + padding:0; + width:calc(100% - 100px) +} +.feature-page.objectstorage .header-block .image{ + width:calc(100% - 150px) +} +.feature-page .header-block .image img,.feature-page .header-block .image picture,.rtl .feature-page .header-block .image img,.rtl .feature-page .header-block .image picture{ + float:none; + max-width:100% +} +.feature-page.objectstorage .header-block .image img{ + width:73% +} +.feature-page.objectstorage .header-block .image div{ + justify-content:center +} +.feature-page.objectstorage strong{ + font-family:LatoWebBold,Arial,sans-serif +} +} +@media only screen and (max-width:675px){ +.feature-page .app-links a{ + display:block; + margin:16px 8px 0 +} +.bottom-page.appstore-button.small{ + height:auto; + margin:0; + width:131px +} +.bottom-page.appstore-button.small.android{ + margin:0; + width:150px +} +} +@media only screen and (max-width:877px) and (min-width:781px){ +.feature-page.objectstorage .header-block h2{ + width:39vw +} +.feature-page.objectstorage .header-block p{ + width:63vw +} +} +@media only screen and (max-width:836px) and (min-width:781px){ +.feature-page.objectstorage .header-block h2{ + width:44vw +} +} +@media only screen and (max-width:780px) and (min-width:461px){ +.feature-page.objectstorage .header-block{ + padding-left:0 +} +.feature-page.objectstorage .header-block .text{ + margin-left:-50px +} +.feature-page.objectstorage .header-block p{ + width:85% +} +.feature-page.objectstorage .header-block .image img{ + width:82% +} +.feature-page.objectstorage .header-block .image-desc{ + padding-right:70px +} +} +@media only screen and (max-width:780px) and (min-width:695px){ +.feature-page.objectstorage .header-block h2{ + width:47vw +} +.feature-page.objectstorage .header-block p{ + width:71vw +} +} +@media only screen and (max-width:694px) and (min-width:616px){ +.feature-page.objectstorage .header-block h2{ + width:53vw +} +.feature-page.objectstorage .header-block p{ + width:80vw +} +} +@media only screen and (max-width:615px) and (min-width:544px){ +.feature-page.objectstorage .header-block h2{ + width:60vw +} +.feature-page.objectstorage .header-block p{ + width:82vw +} +} +@media only screen and (max-width:543px) and (min-width:480px){ +.feature-page.objectstorage .header-block h2{ + width:68vw +} +.feature-page.objectstorage .header-block p{ + width:82vw +} +} +@media only screen and (max-width:479px) and (min-width:461px){ +.feature-page.objectstorage .header-block h2{ + width:77vw +} +.feature-page.objectstorage .header-block p{ + width:82vw +} +} +@media only screen and (max-width:460px){ +.feature-page .header-block{ + padding-bottom:45px; + padding-top:40px +} +.feature-page.objectstorage .header-block{ + padding:56px 0 15px +} +.feature-page .header-block h1{ + font-size:16px; + line-height:24px +} +.feature-page.objectstorage .header-block h1{ + font-size:20px; + line-height:24px +} +.feature-page .header-block h2{ + font-size:24px; + line-height:36px; + margin-bottom:25px +} +.feature-page.objectstorage .header-block h2{ + font-size:30px; + line-height:37px; + width:90% +} +.feature-page .header-block .text{ + margin-bottom:15px; + width:calc(100% - 24px) +} +.feature-page.objectstorage .header-block .text{ + margin-left:25px +} +.feature-page .header-block .image{ + width:calc(100% - 24px) +} +.feature-page .header-block p{ + font-size:14px; + line-height:20px +} +.feature-page.objectstorage .header-block p{ + width:90% +} +.feature-page.objectstorage .header-block .objectstorage-p-subheader{ + font-size:18px; + line-height:26px +} +.feature-page.objectstorage .header-block .image{ + width:calc(100% - 30px) +} +.feature-page.objectstorage .header-block .image img{ + width:95% +} +.feature-page.objectstorage .header-block .image-desc{ + padding-right:10px +} +} +@media only screen and (max-width:1100px) and (min-width:950px){ +.ru .feature-page.chat .header-block .image img{ + -webkit-margin-start:40px; + margin-inline-start:40px +} +} +.feature-page .icon-block{ + padding-bottom:30px; + padding-top:100px +} +.feature-page.objectstorage .icon-block{ + padding-top:48px +} +.feature-page .icon-block header{ + margin-bottom:90px; + text-align:center; + width:100% +} +.feature-page .icon-block header strong{ + font-family:LatoWebSemiBold,Arial,sans-serif; + font-weight:400 +} +.feature-page .icon-block header p{ + margin-top:20px +} +.feature-page .icon-block .cards{ + gap:80px; + align-items:normal; + display:flex; + flex-flow:row wrap +} +.feature-page .icon-block .card{ + align-items:start; + background-color:var(--surface-main); + border-radius:16px; + box-shadow:4px 4px 20px 0 rgba(0, 0, 0, .08); + flex-basis:320px; + padding-bottom:20px +} +.feature-page .icon-block .icons{ + align-items:baseline; + display:flex; + flex-wrap:wrap +} +.feature-page.objectstorage .icon-block .icons{ + align-items:stretch +} +.feature-page .icon-block.columns-2 .icon{ + width:50% +} +.feature-page .icon-block.columns-3 .icon{ + width:33.33333% +} +.feature-page .icon-block .icon{ + align-items:center; + display:flex; + flex-direction:column +} +.feature-page.objectstorage .icon-block .icon{ + align-items:start; + border-radius:16px; + box-shadow:4px 4px 20px 0 rgba(0, 0, 0, .08); + height:auto; + margin:10px 34px 32px 0; + padding-bottom:20px; + width:328px +} +.feature-page .icon-block .icon img{ + display:block; + height:112px; + margin-bottom:26px; + object-fit:cover; + width:112px +} +.feature-page .icon-block .card img,.feature-page.objectstorage .icon-block .icon img{ + height:48px; + margin-bottom:8px; + margin-left:24px; + margin-top:16px; + width:48px +} +.feature-page.objectstorage .icon-block .s3bucket img{ + background-image:url(../imagery/mega-features-objectstorage-icon_s3bucket.9d01c277372f0eb3.svg); + background-repeat:no-repeat +} +.feature-page.objectstorage .icon-block .establish img{ + background-image:url(../imagery/mega-features-objectstorage-icon_establish.cc70e2fc6061970.svg); + background-repeat:no-repeat +} +.feature-page.objectstorage .icon-block .durability img{ + background-image:url(../imagery/mega-features-objectstorage-icon_durability.695bb94d536b31a4.svg); + background-repeat:no-repeat +} +.feature-page.objectstorage .icon-block .cheap img{ + background-image:url(../imagery/mega-features-objectstorage-icon_cheap.dd648c6f2551dfa3.svg); + background-repeat:no-repeat +} +.feature-page.objectstorage .icon-block .hoste2ee img{ + background-image:url(../imagery/mega-features-objectstorage-icon_hoste2ee.806bc6fef3eee65f.svg); + background-repeat:no-repeat +} +.feature-page.objectstorage .icon-block .variety img{ + background-image:url(../imagery/mega-features-objectstorage-icon_variety.e6e48064e8e3c094.svg); + background-repeat:no-repeat +} +.feature-page .icon-block .icon h3{ + margin-bottom:22px; + padding:0 50px; + text-align:center +} +.feature-page .icon-block .card h3,.feature-page.objectstorage .icon-block .icon h3{ + font-family:LatoWebBold,Arial,sans-serif; + font-size:18px; + font-weight:900; + letter-spacing:0; + line-height:26px; + margin-bottom:8px; + padding:0 24px; + text-align:left +} +.feature-page .icon-block .icon p{ + margin-bottom:15px; + padding:0 50px; + text-align:center +} +.feature-page .icon-block .card p,.feature-page.objectstorage .icon-block .icon p{ + color:#1d1d1d; + font-family:LatoWeb,Arial,sans-serif; + font-size:16px; + letter-spacing:0; + line-height:23px; + margin-bottom:0; + padding:0 24px; + text-align:left +} +.feature-page .icon-block .icon p:last-of-type{ + margin-bottom:100px +} +.feature-page .icon-block .card p:last-of-type,.feature-page.objectstorage .icon-block .icon p:last-of-type{ + margin-bottom:0 +} +.feature-page .icon-block .link{ + margin:40px 0; + text-align:center; + width:100% +} +.feature-page .icon-block .link a{ + font-family:LatoWebBold,Arial,sans-serif; + font-size:22px +} +@media only screen and (max-width:1100px) and (min-width:951px){ +.feature-page.objectstorage .icon-block .icons{ + padding-left:5px +} +.feature-page.objectstorage .icon-block .icon{ + margin-left:7px; + margin-right:20px; + width:400px +} +} +@media only screen and (max-width:950px){ +.feature-page .icon-block.columns-2 .icon,.feature-page .icon-block.columns-3:not(.obst-icon) .icon{ + width:100% +} +.feature-page.objectstorage .icon-block .icon{ + margin:10px 14px 24px 10px +} +.feature-page .icon-block .icon p{ + padding:0 125px +} +.feature-page .icon-block .icon p:last-of-type{ + margin-bottom:70px +} +.feature-page .icon-block header strong{ + display:block; + font-family:LatoWeb,Arial,sans-serif; + font-size:22px; + margin-bottom:20px +} +.feature-page .icon-block h2{ + padding:0 85px +} +} +@media only screen and (max-width:460px){ +.feature-page .icon-block{ + padding-bottom:0; + padding-top:40px +} +.feature-page.objectstorage .icon-block{ + padding-bottom:48px; + padding-top:32px +} +.feature-page .icon-block h2{ + font-size:20px; + line-height:30px; + padding:0 30px +} +.feature-page.objectstorage .icon-block .icon{ + border:none; + box-shadow:none; + margin-bottom:0 +} +.feature-page .icon-block .icon p{ + font-size:14px; + padding:0 12px +} +.feature-page .icon-block .icon p:last-of-type,.feature-page .icon-block header{ + margin-bottom:45px +} +.feature-page .icon-block .icon h3{ + font-size:18px; + line-height:27px; + padding:0 40px +} +.feature-page .icon-block .link a{ + font-size:16px +} +.feature-page .icon-block .link{ + margin:30px 0 45px +} +.feature-page .icon-block header p{ + font-size:14px; + padding-left:12px; + padding-right:12px +} +} +.feature-page .icon-block .icons>div:first-of-type img{ + object-position:0 0 +} +.feature-page .icon-block .icons>div:nth-of-type(2) img{ + object-position:0 -162px +} +.feature-page .icon-block .icons>div:nth-of-type(3) img{ + object-position:0 -324px +} +.feature-page .icon-block .icons>div:nth-of-type(4) img{ + object-position:0 -486px +} +.feature-page .icon-block .icons>div:nth-of-type(5) img{ + object-position:0 -648px +} +.feature-page .icon-block .icons>div:nth-of-type(6) img{ + object-position:0 -810px +} +.feature-page .content-two-column{ + flex-direction:row; + padding-bottom:125px; + padding-top:125px +} +.feature-page.objectstorage .content-two-column{ + align-items:start; + background:url(../imagery/mega-features-objectstorage-section3_gradient.681a975cf9a10238.svg), url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTQ0MHB4IiBoZWlnaHQ9Ijk5MXB4IiB2aWV3Qm94PSIwIDAgMTQ0MCA5OTEiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8dGl0bGU+U2VjdGlvbjNfQkcgQ29weTwvdGl0bGU+CiAgICA8ZyBpZD0iT0hfUllJUF9kcmFmdCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ik9IX1JZSVBfNS4xIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwgLTEzNDguMDAwMDAwKSIgZmlsbD0iIzMwNzdGMSI+CiAgICAgICAgICAgIDxyZWN0IGlkPSJTZWN0aW9uM19CRy1Db3B5IiB4PSIwIiB5PSIxMzQ4IiB3aWR0aD0iMTQ0MCIgaGVpZ2h0PSI5OTEiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==") no-repeat; + background-size:cover; + padding-top:0 +} +.feature-page.objectstorage .content-two-column .register-image{ + margin-bottom:48px; + margin-left:15px; + margin-top:-24px +} +.feature-page.objectstorage .content-two-column .register-text{ + padding-left:65px +} +.feature-page.objectstorage .content-two-column .register-form-container{ + padding-top:80px +} +.feature-page.objectstorage .content-two-column .register-form{ + animation-duration:.5s; + animation-name:fadeinslide; + background-color:#fff; + border-radius:20px; + display:none; + overflow:hidden +} +.feature-page.objectstorage .content-two-column .display-block{ + display:block +} +.feature-page.objectstorage .content-two-column h2{ + color:#fafafa; + font-family:var(--text-font-family-second-bold); + font-size:36px; + font-weight:900; + letter-spacing:0; + line-height:44px +} +.feature-page.objectstorage .content-two-column p{ + color:#fafafa; + font-family:LatoWeb,Arial,sans-serif; + font-size:20px; + letter-spacing:0; + line-height:28px +} +.feature-page.objectstorage .content-two-column .note{ + color:#fafafa; + font-family:LatoWeb,Arial,sans-serif; + font-size:14px; + letter-spacing:0; + line-height:20px; + margin-top:15px +} +.feature-page.objectstorage .content-two-column .rf-tab-success .register-form-success{ + align-items:center; + display:flex; + height:800px; + justify-content:center +} +.feature-page.objectstorage .content-two-column .rf-tab-success .register-form-success .rf-success-icon,.feature-page.objectstorage .content-two-column .rf-tab-success .register-form-success .rf-success-text{ + display:flex; + justify-content:center +} +.feature-page.objectstorage .content-two-column .rf-tab-success .register-form-success .rf-success-text p{ + color:#1d1d1d; + font-family:LatoWeb,Arial,sans-serif; + font-size:18px; + letter-spacing:0; + line-height:26px; + text-align:center +} +.feature-page .content-image-text{ + flex-direction:row-reverse +} +.feature-page .content-two-column .image,.feature-page .content-two-column .text{ + width:50% +} +.feature-page .content-two-column .image.centered-image{ + display:flex; + justify-content:center +} +.feature-page .content-two-column h2,.feature-page .content-two-column p{ + margin-bottom:18px +} +.feature-page .content-two-column .text,body.rtl .feature-page .content-image-text .text{ + padding-left:0; + padding-right:75px +} +.feature-page .content-image-text .text,.rtl .feature-page .content-two-column .text{ + padding-left:75px; + padding-right:0 +} +.feature-page .content-two-column .subtitle{ + color:#373737; + font-family:var(--text-font-family-second-regular); + font-size:22px; + font-weight:700; + margin-bottom:15px +} +.feature-page .content-two-column .image img,.feature-page .content-two-column .image picture{ + float:left; + width:100% +} +.feature-page .content-two-column .image img{ + object-fit:contain +} +.feature-page .content-image-text .image img,.feature-page .content-image-text .image picture,.rtl .feature-page .content-two-column .image img,.rtl .feature-page .content-two-column .image picture{ + float:right +} +.rtl .feature-page .content-image-text .image img,.rtl .feature-page .content-image-text .image picture{ + float:left +} +.feature-page .image picture.overflow-screen img{ + width:unset +} +.feature-page img.unset-default{ + display:unset !important; + margin-bottom:unset !important; + width:unset !important +} +.feature-page.objectstorage .content-two-column .register-interest{ + background-color:#fff; + border-radius:20px; + overflow:hidden; + width:498px +} +.feature-page.objectstorage .content-two-column .register-interest .register-header{ + color:#1d1d1d; + font-family:LatoWebBlack,sans-serif; + font-size:24px; + letter-spacing:0; + line-height:29px; + margin:0 32px 20px; + padding-top:48px +} +.feature-page.objectstorage .content-two-column .register-interest .register-form-back{ + padding-left:32px; + padding-top:48px +} +.feature-page.objectstorage .content-two-column .register-interest .register-form-back .back-hover{ + cursor:pointer; + width:65px +} +.feature-page.objectstorage .register-interest .register-form-back .back-hover:hover .span-back{ + font-family:LatoWebBlack,sans-serif +} +.feature-page.objectstorage .content-two-column .register-interest .register-form-back .span-img{ + display:inline-block; + vertical-align:middle +} +.feature-page.objectstorage .content-two-column .register-interest .register-form-back .span-back{ + color:#1d1d1d; + display:inline-block; + font-family:LatoWeb,Arial,sans-serif; + font-size:16px; + height:24px; + letter-spacing:0; + line-height:23px +} +.feature-page.objectstorage .content-two-column .register-interest .register-input{ + margin:0 32px +} +.feature-page.objectstorage .content-two-column .register-interest .register-subheader{ + color:#1d1d1d; + font-family:LatoWebSemiBold,Arial,sans-serif; + font-size:18px; + letter-spacing:0; + line-height:26px; + margin:32px 32px 16px +} +.feature-page.objectstorage .content-two-column .register-interest .register-input .rf-country span{ + color:#666 +} +.feature-page.objectstorage .content-two-column .register-interest .register-radio-tb,.feature-page.objectstorage .content-two-column .register-interest .register-yesno-radio1,.feature-page.objectstorage .content-two-column .register-interest .register-yesno-radio2{ + margin:0 32px 16px +} +.feature-page.objectstorage .content-two-column .register-interest .register-yesno-radio1 .register-radio-option1{ + display:inline-block; + margin:0 0 0 8px +} +.feature-page.objectstorage .content-two-column .register-interest .register-radio-tb .register-radio-option2,.feature-page.objectstorage .content-two-column .register-interest .register-yesno-radio2 .register-radio-option3{ + margin-left:8px +} +.feature-page.objectstorage .content-two-column .register-interest .register-radio-option{ + cursor:pointer; + margin:0 32px; + width:55% +} +.feature-page.objectstorage .content-two-column .register-interest .register-radio-option1,.feature-page.objectstorage .content-two-column .register-interest .register-radio-option2{ + cursor:pointer; + margin:0 32px; + width:45% +} +.feature-page.objectstorage .content-two-column .register-interest .register-radio-option3{ + cursor:pointer; + margin:0 32px; + width:100% +} +.feature-page.objectstorage .content-two-column .register-interest .register-radio-option1 .radio-txt,.feature-page.objectstorage .content-two-column .register-interest .register-radio-option2 .radio-txt,.feature-page.objectstorage .content-two-column .register-interest .register-radio-option3 .radio-txt,.feature-page.objectstorage .content-two-column .register-interest .register-radio-option .radio-txt{ + cursor:pointer +} +.feature-page.objectstorage .register-interest .radio-txt{ + color:#666; + font-family:LatoWeb,Arial,sans-serif; + font-size:16px; + letter-spacing:0; + line-height:23px; + margin-bottom:8px +} +.feature-page.objectstorage .content-two-column .register-interest .register-yesno-radio2 #label-rad4no{ + margin-bottom:0 +} +.objectstorage .content-two-column .register-interest .register-qn-s3provider option{ + display:block +} +.objectstorage .content-two-column .register-interest .s3provider-checkbox .checkdiv{ + margin:10px +} +.objectstorage .mega-input-dropdown .s3provider-label{ + cursor:pointer; + font-family:LatoWeb,Arial,sans-serif; + font-size:16px +} +.feature-page.objectstorage .content-two-column .register-interest .register-yesno-radio2 span{ + color:#666; + display:block; + font-family:LatoWeb,Arial,sans-serif; + font-size:14px; + font-style:italic; + letter-spacing:0; + line-height:20px; + margin-left:29px +} +.feature-page.objectstorage .content-two-column .register-interest .register-input-other{ + background-color:#fff; + margin-left:64px; + width:250px +} +.feature-page.objectstorage .content-two-column .register-interest .register-input-other input{ + border:none; + padding:8px 16px 9px; + width:100% +} +.feature-page.objectstorage .content-two-column .register-interest .register-provider{ + margin-left:36px +} +.feature-page.objectstorage .content-two-column .register-interest .rf-provider{ + width:60% +} +.feature-page.objectstorage .content-two-column .register-interest .rf-provider select{ + background-color:initial; + border:none; + box-sizing:border-box; + color:var(--text-color-high); + cursor:text; + flex:1; + font:var(--text-body1); + overflow:hidden; + padding:2px 8px; + position:relative; + text-overflow:ellipsis; + white-space:nowrap; + width:100%; + z-index:11 +} +.feature-page.objectstorage .content-two-column .register-interest .rf-provider .dropdown-scroll label{ + display:block +} +.feature-page.objectstorage .content-two-column .register-interest .register-agreement-checkbox{ + margin-left:40px +} +.objectstorage-mobile .s3provider-checkbox .checkboxOn,.objectstorage .register-agreement-checkbox .checkboxOn,.objectstorage .s3provider-checkbox .checkboxOn{ + background:#3077f1 +} +.objectstorage-mobile .mobile.s3provider-checkbox{ + padding:10px +} +.feature-page.objectstorage .content-two-column .register-interest .register-agreement-checkbox .radio-txt{ + color:#666; + cursor:pointer; + font-family:LatoWeb,Arial,sans-serif; + font-size:14px; + font-style:italic; + height:24px; + letter-spacing:0; + line-height:17px; + margin-bottom:0; + margin-top:10px +} +.feature-page.objectstorage .content-two-column .register-interest .rf-submit-error{ + background-color:rgba(233, 92, 92, .1); + border-left:8px solid #e95c5c; + margin:36px 32px -8px +} +.feature-page.objectstorage .content-two-column .register-interest .rf-submit-error p{ + color:#e95c5c; + font-family:LatoWeb,Arial,sans-serif; + font-size:16px; + letter-spacing:0; + line-height:23px; + margin:0; + opacity:1; + padding:16px +} +.feature-page.objectstorage .content-two-column .register-interest .register-button{ + background-color:#1d1d1d; + border-radius:8px; + float:right; + height:48px; + margin:40px 32px 32px 0; + width:120px +} +.feature-page.objectstorage .content-two-column .register-interest .register-button span{ + color:#fafafa; + display:block; + font-family:LatoWeb,Arial,sans-serif; + font-size:20px; + font-weight:900; + letter-spacing:0; + line-height:24px; + margin-top:12px; + text-align:center; + user-select:none +} +.feature-page.objectstorage .content-two-column .register-interest .register-button:hover{ + background-color:#1d1d1d; + box-shadow:0 0 0 4px rgba(0, 0, 0, .15); + cursor:pointer +} +.feature-page.objectstorage .content-two-column .register-interest .hide{ + display:none +} +.feature-page.objectstorage .content-two-column .register-interest .register-input-other .mega-banner,.feature-page.objectstorage .content-two-column .register-interest .register-input .mega-banner{ + background:var(--banner-background-error); + border:.5px solid; + border-radius:4px; + box-sizing:border-box; + color:var(--banner-text-error); + font:var(--text-body1); + margin-bottom:15px; + margin-top:-15px; + padding:2px; + text-align:center; + text-overflow:ellipsis; + white-space:normal +} +.feature-page.objectstorage .content-two-column .register-interest .register-input .mega-banner.s3provider{ + width:60% +} +.feature-page.objectstorage .content-two-column .register-interest .register-form-error{ + color:var(--banner-text-error); + font-family:LatoWeb,Arial,sans-serif; + font-size:12px; + letter-spacing:0; + line-height:23px; + margin:-15px 0 10px 32px; + width:75px +} +.feature-page.objectstorage .register-interest .register-agreement-checkbox .register-form-error{ + margin:-8px 0 0 -15px +} +.feature-page.backup .header-block h1{ + color:#1db07b +} +.feature-page.backup .icon-block{ + padding-bottom:60px; + padding-top:80px +} +.feature-page.backup .icon-block .cards{ + padding-bottom:20px +} +.feature-page.backup .icon-block .cards .card img{ + object-position:0 +} +.feature-page.backup table.compare{ + border-collapse:initial; + border-spacing:8px +} +.feature-page.backup table.compare caption{ + caption-side:bottom; + color:var(--text-color-black-low); + margin-top:56px; + text-align:left +} +.feature-page.backup table.compare th{ + color:var(--text-color-black-high); + font:normal normal 16px/19.5px var(--text-font-family-second-bold); + padding:10px 15px 10px 0; + text-align:left +} +.feature-page.backup table.compare thead tr th{ + border-bottom:20px solid transparent; + font-size:20px; + line-height:24px; + padding:8px 18px; + text-align:center +} +.feature-page.backup table.compare th:not(:first-child){ + min-width:145px +} +.feature-page.backup table.compare tr th{ + color:var(--text-color-black-high); + font:normal normal 16px/19.5px var(--text-font-family-second-bold); + padding:10px 15px 10px 0; + text-align:left +} +.feature-page.backup .compare-cards{ + gap:58px; + display:none; + flex-flow:column nowrap; + max-width:436px; + padding:0 30px; + width:100% +} +.feature-page.backup .compare-card{ + border:2px solid var(--stroke-grey-2); + border-radius:16px +} +.feature-page.backup .compare-card .heading{ + background-color:var(--surface-grey-1); + border-radius:16px; + font:normal normal 20px/24px var(--text-font-family-second-bold); + padding:8px +} +.feature-page.backup .compare-card .content{ + gap:24px; + color:var(--text-color-black-high); + display:flex; + flex-flow:column nowrap; + font:normal normal 16px/19.5px var(--text-font-family-second-bold); + padding:24px; + text-align:left; + word-break:break-word +} +.feature-page.backup .compare-card .content>div{ + gap:10px; + align-items:center; + display:flex +} +.feature-page.backup .compare-card .content>div>img{ + align-self:normal; + flex-basis:25px; + height:24px +} +.feature-page.backup .compare-cards-note{ + color:var(--text-color-black-low); + display:none; + margin:45px 76px 0; + text-align:left +} +@media only screen and (max-width:768px){ +.feature-page.backup .compare-cards-note{ + display:block +} +.feature-page.backup a.cta.clickurl{ + display:none +} +.feature-page.backup .cards{ + gap:56px; + flex-direction:column +} +.feature-page.backup .card{ + background-color:unset; + box-shadow:unset; + flex-basis:unset; + margin:0; + max-width:520px; + padding-bottom:unset +} +.feature-page.backup table.compare{ + display:none +} +.feature-page.backup .compare-cards{ + display:flex +} +} +@media only screen and (max-width:460px){ +.feature-page.backup .compare-cards-note{ + margin:24px 24px 0 +} +} +@media only screen and (max-width:1220px){ +.feature-page .content-two-column .text,body.rtl .feature-page .content-image-text .text{ + padding-left:50px; + padding-right:75px +} +.feature-page .content-image-text .text,.rtl .feature-page .content-two-column .text{ + padding-left:75px; + padding-right:50px +} +.feature-page .content-two-column .image,.rtl .feature-page .content-image-text .image{ + padding-right:25px +} +.feature-page .content-image-text .image,.rtl .feature-page .content-two-column .image{ + padding-left:25px; + padding-right:0 +} +.feature-page.objectstorage .content-two-column .image-column{ + padding-left:0; + padding-right:0; + width:33% +} +.feature-page.objectstorage .content-two-column .register-image{ + margin-left:-34px +} +.feature-page.objectstorage .content-two-column .register-text{ + padding-left:5px; + width:78% +} +.feature-page.objectstorage .content-two-column .register-form-container{ + padding-left:0 +} +} +@media only screen and (max-width:950px){ +.feature-page .content-two-column .text,.rtl .feature-page .content-two-column .text,body.rtl .feature-page .content-image-text .text{ + padding:0 60px +} +.feature-page .content-two-column .image,.feature-page .content-two-column .text{ + text-align:center; + width:100% +} +.feature-page.backup table.compare{ + margin:0 25px +} +.feature-page.backup table.compare tr th:not(:first-child){ + min-width:110px; + padding-left:0; + padding-right:0 +} +.feature-page.objectstorage .content-two-column .text{ + padding-left:20px; + text-align:start +} +.feature-page.objectstorage .content-two-column .image-column{ + width:100% +} +.feature-page.objectstorage .content-two-column .register-form-container{ + align-items:center; + display:flex; + justify-content:end; + padding-right:135px; + padding-top:48px +} +.feature-page.objectstorage .content-two-column .register-interest{ + display:inline-block +} +.feature-page.objectstorage .content-two-column .register-image{ + display:inline-block; + margin-left:0; + margin-top:-44px; + width:30% +} +.feature-page.objectstorage .content-two-column .register-text{ + display:inline-block; + padding-left:0; + vertical-align:bottom; + width:54% +} +.feature-page .content-two-column p:last-of-type{ + margin-bottom:90px +} +.feature-page.objectstorage .content-two-column .register-text p{ + margin-bottom:0 +} +.feature-page .content-two-column{ + padding-bottom:85px; + padding-top:75px +} +.feature-page .content-two-column .image{ + padding:0 30px +} +.feature-page .content-two-column .image img,.feature-page .content-two-column .image picture,.rtl .feature-page .content-two-column .image img,.rtl .feature-page .content-two-column .image picture{ + float:none; + max-width:100% +} +.feature-page .content-two-column .image .overflow-screen img{ + float:right; + margin-right:10%; + max-width:unset; + width:auto +} +.feature-page.objectstorage .content-two-column .register-interest .register-radio-option,.feature-page.objectstorage .content-two-column .register-interest .register-radio-option2{ + width:90% +} +} +@media only screen and (max-width:780px) and (min-width:461px){ +.feature-page.objectstorage .content-two-column .text{ + padding:28px 0 0; + text-align:start +} +.feature-page.objectstorage .content-two-column .image-column{ + display:flex; + flex-direction:row-reverse; + justify-content:center; + margin-bottom:20px +} +.feature-page.objectstorage .content-two-column .register-form-container{ + justify-content:center; + margin-left:-55px; + padding-right:0 +} +.feature-page.objectstorage .content-two-column .register-interest{ + display:inline-block; + width:80% +} +.feature-page.objectstorage .content-two-column .rf-tab-success .register-form-success{ + height:670px +} +.feature-page.objectstorage .content-two-column .register-image{ + margin-left:45px; + margin-right:-30px; + margin-top:-34px +} +.feature-page.objectstorage .content-two-column .register-text{ + display:inline-block; + padding-left:0; + width:55% +} +.feature-page.objectstorage .content-two-column .register-text h2{ + font-size:28px; + line-height:34px; + margin:52px 80px 0 0 +} +.feature-page.objectstorage .content-two-column .register-text p{ + font-size:20px; + line-height:28px; + margin:24px 80px 0 0 +} +.feature-page.objectstorage .content-two-column .register-text .note{ + font-size:14px; + line-height:20px +} +.feature-page.objectstorage .register-interest .register-yesno-radio1 .register-radio-option1{ + width:35% +} +} +@media only screen and (max-width:460px){ +.feature-page .content-two-column{ + padding-bottom:65px; + padding-top:100px +} +.feature-page.objectstorage .content-two-column .register-image img{ + display:none +} +.feature-page .content-two-column .text,.rtl .feature-page .content-two-column .text,body.rtl .feature-page .content-image-text .text{ + padding:0 30px +} +.feature-page.objectstorage .content-two-column .image-column{ + padding:0 24px; + text-align:start; + width:100% +} +.feature-page.objectstorage .content-two-column .register-text{ + margin-top:40px; + padding-left:0; + width:100% +} +.feature-page.objectstorage .content-two-column .register-form-container{ + justify-content:start; + margin-top:50px; + padding:0; + width:100% +} +.feature-page.objectstorage .content-two-column .rf-tab-success .register-form-success{ + height:620px +} +.feature-page .content-two-column p:last-of-type{ + margin-bottom:40px +} +.feature-page .content-two-column h2{ + font-size:20px; + line-height:30px +} +.feature-page.objectstorage .content-two-column .register-text h2{ + font-size:28px; + line-height:34px +} +.feature-page .content-two-column p{ + font-size:14px +} +.feature-page.objectstorage .content-two-column p{ + font-size:18px; + line-height:26px +} +.feature-page .content-two-column .subtitle{ + font-size:18px +} +.feature-page .content-two-column .image{ + padding:0 12px +} +.feature-page.objectstorage .content-two-column .register-interest .register-form-back{ + padding:48px 0 32px 24px +} +.feature-page.objectstorage .content-two-column .register-interest .register-header{ + margin:0 24px 20px +} +.feature-page.objectstorage .content-two-column .register-interest .register-subheader{ + font-size:16px; + line-height:23px; + margin:0 24px 16px; + width:80% +} +.feature-page.objectstorage .content-two-column .register-interest .register-form-error{ + margin-left:24px +} +.feature-page.objectstorage .content-two-column .register-interest .register-input{ + margin:0 24px; + width:75% +} +.feature-page.objectstorage .content-two-column .register-interest .register-input .mega-banner.country{ + margin-bottom:30px +} +.feature-page.objectstorage .register-interest .register-yesno-radio1 .register-radio-option1{ + margin-left:1px; + width:38% +} +.feature-page.objectstorage .content-two-column .register-interest .register-radio-tb .register-radio-option2,.feature-page.objectstorage .register-interest .register-yesno-radio2 .register-radio-option3{ + margin-left:1px +} +.feature-page.objectstorage .content-two-column .register-interest .register-yesno-radio2 span{ + font-size:13px +} +.feature-page.objectstorage .content-two-column .register-interest .register-input .mega-banner.s3provider,.feature-page.objectstorage .content-two-column .register-interest .rf-provider{ + width:65% +} +.feature-page.objectstorage .content-two-column .register-interest .register-agreement-checkbox{ + margin-left:32px +} +.feature-page.objectstorage .register-interest .register-agreement-checkbox .register-form-error{ + margin-left:-15px; + margin-top:5px +} +.feature-page.objectstorage .content-two-column .register-interest .rf-submit-error p{ + padding:9px 16px; + width:80% +} +.feature-page.objectstorage .content-two-column .rf-tab-success .register-form-success .rf-success-text p{ + font-size:16px; + line-height:23px; + width:75% +} +} +.feature-page .full-width-block{ + flex-direction:column; + padding-bottom:100px; + padding-top:90px; + text-align:center +} +.feature-page .full-width-block img{ + display:block; + margin-bottom:50px; + width:104px +} +.feature-page .full-width-block h2{ + margin-bottom:50px; + padding:0 20px +} +.feature-page .full-width-block p{ + margin-bottom:24px; + padding:0 100px +} +.feature-page .full-width-block p:last-of-type{ + margin-bottom:0 +} +@media only screen and (max-width:950px){ +.feature-page .full-width-block{ + padding-bottom:50px; + padding-top:65px +} +.feature-page .full-width-block h2,.feature-page .full-width-block p{ + padding:0 65px +} +.feature-page .full-width-block h2,.feature-page .full-width-block img{ + margin-bottom:30px +} +} +@media only screen and (max-width:460px){ +.feature-page .full-width-block h2{ + font-size:20px; + line-height:30px; + margin-bottom:20px +} +.feature-page .full-width-block{ + padding-bottom:10px; + padding-top:40px +} +.feature-page .full-width-block h2,.feature-page .full-width-block p{ + padding:0 12px +} +.feature-page .full-width-block p{ + font-size:14px +} +} +.feature-page .business-footer{ + background-color:#262f3b; + text-align:center +} +.feature-page .business-footer h2,.feature-page .business-footer p{ + color:#fff +} +.feature-page .business-footer h2{ + font-family:var(--text-font-family-second-light); + line-height:50px; + margin-bottom:30px +} +.feature-page .business-footer p{ + font-family:var(--text-font-family-second-light); + font-size:16px; + line-height:24px +} +.feature-page .business-footer a.cta{ + background-color:#00c0a6; + color:#fff; + font-family:LatoWebBold,arial,sans-serif; + margin:80px auto 0; + min-width:270px +} +.feature-page .business-footer>div{ + margin:108px 40px 120px; + max-width:1194px +} +@media only screen and (max-width:890px){ +.feature-page .business-footer h2{ + font-size:30px; + margin-bottom:30px +} +.feature-page .business-footer>div{ + margin:105px 40px 120px +} +} +@media only screen and (max-width:783px){ +.feature-page .business-footer a.cta{ + margin:80px auto 0 +} +.feature-page .business-footer p{ + font-size:14px +} +.feature-page .business-footer>div{ + margin-bottom:63px; + margin-top:63px +} +.feature-page .business-footer a.cta{ + margin:40px auto 0 +} +} +@media only screen and (max-width:565px){ +.feature-page .business-footer h2{ + font-size:26px; + line-height:38px +} +.feature-page .business-footer>div{ + margin-left:24px; + margin-right:24px +} +} +@keyframes fadeinslide{ +0%{ + opacity:0; + transform:translate3d(10%, 0, 0) +} +to{ + opacity:1; + transform:translateZ(0) +} +} +.objectstorage-mobile.mobile.main-block.country-selector{ + position:fixed +} +.mobile.main-block.s3provider-selector{ + background-color:initial; + bottom:0; + height:100%; + left:0; + position:fixed; + right:0; + top:0; + z-index:3000 +} + +.achievement-page{ + --page-width:1194px; + font-family:LatoWeb,arial,sans-serif; + padding-top:126px +} +body.mobile .achievement-page{ + padding-top:0 +} +.achievement-page *{ + box-sizing:border-box +} +body.rtl .achievement-page *{ + direction:rtl +} +.achievement-page h1,.achievement-page h2,.achievement-page h3,.achievement-page p{ + font-weight:400; + margin:0 +} +.achievement-page h1{ + font-size:40px; + line-height:63px +} +.achievement-page h1,.achievement-page h2{ + font-family:var(--text-font-family-second-bold) +} +.achievement-page h2{ + color:#373737; + font-size:36px; + line-height:48px +} +.achievement-page h2.light{ + font-family:var(--text-font-family-second-light) +} +@media only screen and (max-width:624px){ +.achievement-page{ + padding-top:64px +} +.achievement-page h1{ + font-size:24px; + line-height:24px +} +} +.achievement-page a:link,.achievement-page a:not(.mega-button),.achievement-page a:visited{ + color:#00c0a6; + text-decoration:underline +} +.achievement-page a.cta{ + background-color:#fafafa; + border-radius:2px; + color:#333; + display:inline-block; + font-size:16px; + height:48px; + letter-spacing:0; + line-height:48px; + padding:0 24px; + text-align:center; + text-decoration:none !important; + transition:all .2s ease-in-out +} +.achievement-page a.cta:hover{ + background-color:#f2f2f2; + box-shadow:0 0 0 4px rgb(242 242 242 / .28) +} +.mobile .achievement-page a.cta:hover{ + background-color:#00c0a6; + box-shadow:none !important +} +.achievement-page a.mega-button{ + color:#fff; + text-decoration:none +} +.achievement-page section{ + align-items:center; + display:flex; + flex-wrap:wrap; + justify-content:center; + overflow:hidden; + padding:0 calc(50% - var(--page-width)/2); + position:relative; + z-index:5 +} +.achievement-page .header-block{ + background:linear-gradient(180deg, #0ab48f, #08a37c); + height:300px; + justify-content:start +} +.achievement-page .header-block .background-image{ + position:absolute; + right:0 +} +.achievement-page .header-block .content-container{ + padding:0 50px +} +.achievement-page .header-block h1{ + color:#fff +} +.achievement-page .header-block p{ + color:#fff; + font-size:16px; + line-height:24px; + margin:20px auto 30px; + max-width:550px +} +.achievement-page .header-block p>span{ + color:#fec35a; + font-family:var(--text-font-family-bold); + font-size:18px +} +@media only screen and (max-width:950px){ +.achievement-page .header-block{ + justify-content:center +} +.achievement-page .header-block .content-container{ + padding:0; + text-align:center; + width:calc(100% - 60px); + z-index:1 +} +} +.achievement-page .storage-block{ + background-color:#fafafa; + justify-content:center; + padding-bottom:100px; + padding-top:100px +} +.achievement-page .storage-block h2{ + font-size:24px; + line-height:28px; + text-align:center +} +.achievement-page .storage-block.columns-2 .item{ + width:calc(50% - 160px) +} +.achievement-page .storage-block .items{ + align-items:baseline; + display:flex; + flex-wrap:wrap; + justify-content:center; + margin-top:22px +} +.achievement-page .storage-block .item{ + align-items:center; + background-color:#fff; + border:2px solid #f1f1f1; + border-radius:12px; + display:flex; + flex-direction:column; + justify-content:center; + margin:30px 30px 0; + min-height:358px; + min-width:380px; + text-align:center +} +.achievement-page .storage-block .item h4{ + color:#333; + margin:0 0 20px +} +.achievement-page .storage-block .item p{ + color:#333; + font-size:16px; + margin:0 50px 20px; + opacity:.7 +} +.achievement-page .storage-block .item .image-container{ + height:128px; + margin:12px auto; + width:128px +} +.achievement-page .storage-block .item .achievement-icon{ + height:128px; + width:100% +} +.achievement-page .storage-block .item .footer-container{ + align-items:flex-end; + display:flex; + flex-grow:1; + padding-bottom:20px +} +.achievement-page .storage-block .item .achievement-icon.img-achievements-desktop-app{ + margin-top:40px +} +.achievement-page .storage-block .item .achievement-icon.img-achievements-mobile-app{ + margin-top:10px +} +.achievement-page .storage-block .item .achievement-icon.img-achievements-invite-users{ + margin-top:24px +} +.achievement-page .storage-block .item .achievement-icon.img-achievements-sms-verification{ + margin-top:10px +} +.achievement-page .storage-block .item .achievement-dialog.expires-txt{ + border-radius:4px; + display:none; + padding:2px 16px; + text-align:center +} +.achievement-page .storage-block .item .achievement-dialog.expires-txt.info{ + background:var(--banner-background-info); + border:1px solid var(--banner-border-info); + color:var(--banner-text-info) +} +.achievement-page .storage-block .item .achievement-dialog.expires-txt.error{ + background:var(--banner-background-error); + border:1px solid var(--banner-border-error); + color:var(--banner-text-error); + min-width:70% +} +.achievement-page .storage-block .item.achieved .achievement-dialog.expires-txt,.achievement-page .storage-block .item.one-reward .achievement-dialog.expires-txt{ + display:inline-block +} +.achievement-page .storage-block .item.achieved .mega-button.positive,.achievement-page .storage-block .item.one-reward .mega-button.positive,.achievement-page .storage-block.logged-in a,.achievement-page .storage-block.logged-out .achievement-dialog.expires-txt,.achievement-page .storage-block.logged-out button{ + display:none +} +@media only screen and (max-width:984px){ +.achievement-page .storage-block h2{ + margin:0 60px +} +.achievement-page .storage-block.columns-2 .item{ + width:100% +} +.achievement-page .storage-block .item p{ + margin-top:20px; + padding:0 25px +} +} +.achievement-page .keyinfo-block{ + padding-bottom:100px; + + padding-top:100px +} +.achievement-page .keyinfo-block.columns-3 .icon{ + width:33.33333% +} +.achievement-page .keyinfo-block .icons{ + align-items:baseline; + display:flex; + flex-wrap:wrap; + margin-top:22px +} +.achievement-page .keyinfo-block .icon{ + align-items:center; + display:flex; + flex-direction:column; + justify-content:center; + padding:50px +} +.achievement-page .keyinfo-block .icons p{ + color:#333; + font-family:LatoWeb,arial,sans-serif; + font-size:20px; + line-height:30px; + margin-top:40px; + text-align:center +} +@media only screen and (max-width:950px){ +.achievement-page .keyinfo-block.columns-3 .icon{ + width:100% +} +.achievement-page .keyinfo-block .icon p{ + margin-top:20px; + padding:0 25px +} +} +.achievement-page .business-footer-block{ + background-color:#262f3b; + text-align:center +} +.achievement-page .business-footer-block>div{ + margin:108px 40px 120px; + max-width:1194px +} +.achievement-page .business-footer-block h2{ + color:#fff; + margin-bottom:50px +} +.achievement-page .business-footer-block a{ + padding:0 24px +} + +.corporate-content .header-img{ + height:auto; + margin-bottom:20px; + max-width:100% +} +.corporate-content .bug-container .header-img{ + margin-bottom:0 +} +.corporate .bottom-page.full-block.active .bug-txt p{ + color:var(--text-color-black-high); + text-align:left +} +.corporate .bottom-page.full-block.active .bug-container{ + position:relative +} +.corporate .bottom-page.full-block.active .bug-container .img-txt{ + color:var(--text-color-black-high); + font:var(--text-h0-bb-bold); + font-family:var(--text-font-family-second-light); + left:50%; + position:absolute; + top:50%; + -webkit-transform:translate(-50%, -50%); + transform:translate(-50%, -50%) +} +.corporate .bottom-page.full-block.active .bug-txt .title{ + font:var(--text-h1-bold); + padding:30px 0 16px +} +.corporate .bottom-page.full-block.active .bug-txt .sub-title{ + padding-top:16px +} +.corporate .bottom-page.full-block.active .bug-txt .sub-title-2{ + padding-top:0 +} +.corporate .bottom-page.full-block.active .bug-txt li:not(:last-child){ + padding-bottom:16px +} +.corporate .bottom-page.full-block.active .bug-txt li{ + font:var(--text-h3); + list-style:disc; + text-align:left +} +.corporate-content .bottom-page.full-block.active .bug-txt{ + padding-bottom:88px; + padding-left:140px +} +.corporate-content .bottom-page.full-block.active .bug-txt p a{ + color:var(--text-color-success) +} +.corporate-content .lang{ + padding:0 70px +} +.corporate-content .new-bottom-pages h2{ + font-family:var(--text-font-family-second-regular); + font-size:36px; + line-height:50px; + padding-bottom:18px; + text-align:center +} +.corporate.numbers-info .num{ + color:#00c0a6; + display:block; + font-family:var(--text-font-family-second-bold); + font-size:54px; + line-height:66px +} +.corporate-content p,h2{ + padding-top:0 +} +.corporate-content .media-page-overview{ + padding:50px 200px 0 +} +.corporate-content span.overview-info-lg{ + display:block; + font-size:25px; + line-height:30px +} +.corporate-content span.overview-info-sm{ + display:block; + font-size:15px; + margin:23px 0 4px +} +.corporate.numbers-info .numbers-txt{ + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:24px; + line-height:29px +} +.corporate-content .bottom-page.horizontal-centered-bl{ + background-color:#f5f5f5; + padding:0 0 40px; + text-align:center +} +.corporate-content img.key-feature-img{ + padding:30px 0 +} +.corporate-content .media-page-key-features .key-feature-part{ + padding:0 71px 135px +} +.corporate-content .media-page-key-features .key-feature-part p.key-feature-text{ + font-size:24px !important; + line-height:36px +} +.corporate-content .media-page-key-features{ + background-color:#fff; + padding:15px 125px 50px +} +.corporate-content .media-page-key-features h2{ + padding:70px 125px 135px +} +.corporate-content .media-page-users-stats{ + height:647px +} +.corporate-content .media-page-users-stats h2{ + padding:107px 0 170px +} +.corporate-content .media-page-media-assets{ + background-color:#fff; + padding:70px 125px +} +.corporate-content .media-assets-cards{ + border-spacing:50px; + display:table; + margin:8px auto 0; + table-layout:fixed; + width:100% +} +.corporate-content .media-assets-cards .media-asset-cards-row{ + border-spacing:50px; + display:table-row +} +.corporate-content div.media-asset-card{ + border:1px solid #e6e6e6; + border-radius:5px; + box-shadow:0 2px 4px 0 hsla(0, 0%, 90.2%, .5); + display:table-cell; + height:420px; + max-width:420px; + position:relative; + width:50% +} +.corporate-content .media-asset-card div.media-asset-card-content img{ + display:block; + margin:0 auto 17px +} +.corporate-content .media-asset-card div.media-asset-card-content{ + box-sizing:border-box; + height:300px; + padding:35px 90px 30px; + position:absolute; + top:10%; + width:100% +} +.corporate-content .media-asset-card .media-asset-card-content p{ + color:var(--text-color-high); + font:var(--text-h1) !important; + margin-bottom:20px; + text-align:center +} +.corporate-content .media-asset-card .media-asset-card-content a.media-asset-download{ + background-color:#0bbdaa; + border:2px solid #0bbdaa; + border-radius:2px; + box-sizing:border-box; + color:#fff; + display:inline-block; + font-size:16px; + line-height:46px; + padding:0 30px; + position:relative; + white-space:nowrap +} +.corporate-content .media-asset-card-content .card-label{ + height:90px; + margin-bottom:25px +} +.corporate .bottom-page.full-block{ + display:none; + font-size:0 +} +.corporate .bottom-page.full-block.active{ + display:block +} +.corporate .bottom-page.full-block.active p{ + font-size:16px; + text-align:center +} +.corporate-content .bottom-page.full-block.active blockquote{ + padding:0 220px +} +.corporate .bottom-page.full-block.active blockquote p{ + line-height:25px; + margin:50px auto 20px; + text-align:left +} +.corporate-content div.new-bottom-pages table p{ + text-align:center +} +.corporate.main-menu.body{ + background-color:#fafafa; + border-bottom:1px solid #e7e7e7; + font-size:0; + padding:86px 0 0; + text-align:center; + white-space:nowrap +} +.corporate.main-menu.body.bug{ + background-color:unset +} +.corporate.main-menu.item{ + color:#666; + cursor:pointer; + display:inline-block; + font-family:LatoWebBold,source_sans_prosemibold,Arial; + font-size:17px; + line-height:21px; + margin:0 0 -1px 70px; + text-transform:uppercase +} +.corporate.main-menu.item:first-child{ + margin-left:0 +} +.corporate.main-menu.item span{ + border-bottom:4px solid transparent; + display:inline-block; + padding-bottom:3px; + -webkit-transition:color .2s ease-in-out,border-color .2s ease-in-out; + transition:color .2s ease-in-out,border-color .2s ease-in-out +} +.corporate .lang,.en .corporate .lang.en{ + display:block +} +.corporate span.lang,.en .corporate span.lang.en{ + display:inline-block +} +body:not(.mobile) .corporate.main-menu.item:hover span{ + color:#00c0a6 +} +.corporate.main-menu.item.active span{ + border-color:#00c0a6; + color:#00c0a6 +} +.corporate-content .info-link{ + font-size:30px !important; + padding:90px 0 +} +.corporate-content .info-link .green-link{ + border-bottom:1px solid; + color:#0bbdaa +} +.corporate-content .contact-us{ + padding:78px 275px 315px +} +@media only screen and (max-width:1290px){ +.corporate-content .bottom-page.full-block.active .bug-txt{ + padding-left:28px; + padding-right:28px +} +} +@media only screen and (max-width:1060px){ +.corporate-content .media-page-overview{ + padding:50px 10vw 0 +} +.corporate-content .media-page-media-assets{ + padding:70px 0 0 +} +} +@media only screen and (max-width:890px){ +.corporate-content .bottom-page.full-block.active blockquote{ + padding:0 65px +} +.corporate-content .bottom-page.horizontal-centered-bl{ + padding:0 !important +} +.corporate-content .new-bottom-pages h2{ + font-size:34px +} +.corporate-content .media-page-overview{ + padding:50px 0 0 +} +.corporate-content span.overview-info-lg{ + display:block; + font-size:20px +} +.corporate-content .info-link{ + font-size:24px !important; + padding-left:28px; + padding-right:28px +} +.corporate-content .media-page-key-features h2{ + padding:70px 9vw +} +.corporate-content .media-page-key-features .key-feature-part{ + padding:0 0 10px +} +.corporate-content .media-page-key-features .key-feature-part p.key-feature-text{ + font-size:16px !important; + line-height:30px +} +.corporate-content .media-page-users-stats h2{ + padding:100px 0 110px +} +.corporate-content .lang{ + padding:0 +} +.corporate.numbers-info .num{ + font-size:49px +} +.corporate-content .media-page-users-stats{ + height:550px; + padding:0 60px +} +.corporate.numbers-info .numbers-txt{ + font-size:19px; + line-height:24px +} +.corporate-content .media-asset-card div.media-asset-card-content{ + padding:35px 50px 50px +} +.corporate-content .media-asset-card .media-asset-card-content p{ + font:var(--text-h2) !important +} +.corporate-content .contact-us{ + padding:78px 210px 315px +} +} +@media only screen and (max-width:783px){ +.corporate-content .bottom-page.full-block.active .bug-txt{ + padding-bottom:64px; + padding-left:16px; + padding-right:16px +} +.corporate .bottom-page.full-block.active .bug-txt .title{ + color:var(--text-color-black-high); + font:var(--text-h2); + padding:30px 0 20px +} +.corporate .bottom-page.full-block.active .bug-txt .sub-title-2{ + color:var(--text-color-black-high); + font:var(--text-body1); + padding-bottom:6px; + padding-top:0 +} +.corporate .bottom-page.full-block.active .bug-txt .sub-title{ + color:var(--text-color-black-high); + font:var(--text-body1); + padding-bottom:6px; + padding-top:20px +} +.corporate .bottom-page.full-block.active .bug-txt li{ + color:var(--text-color-black-medium) +} +.corporate .bottom-page.full-block.active .bug-txt li:not(:last-child){ + font:var(--text-body1); + padding-bottom:20px +} +.corporate .bottom-page.full-block.active .bug-txt p{ + color:var(--text-color-black-medium); + font:var(--text-body1) +} +.corporate .bottom-page.full-block.active .bug-container .img-txt{ + font:var(--text-h1-bold); + padding-bottom:0 +} +.corporate-content .media-page-overview .col-4{ + padding-bottom:40px +} +.corporate-content span.overview-info-sm{ + margin:10px 0 0 +} +.corporate-content .numbers-info{ + padding:0 15px 50px +} +.corporate.numbers-info .num{ + font-size:43px +} +.corporate-content .media-page-users-stats h2{ + padding:100px 0 90px +} +.corporate-content .media-asset-card div.media-asset-card-content{ + padding:35px 25px 50px +} +.corporate-content .media-asset-card .media-asset-card-content p{ + margin-bottom:0 +} +.corporate-content div.media-asset-card{ + display:block; + height:390px; + margin:15px auto 0; + max-width:390px; + width:auto +} +.corporate-content .contact-us{ + padding:78px 10vw 20vw +} +} +@media only screen and (max-width:569px){ +.corporate.main-menu.body{ + padding:unset +} +.corporate-content .media-page-overview .col-4{ + padding-left:28px; + padding-right:28px +} +.corporate-content .media-page-overview .col-4 br{ + display:none +} +.corporate-content span.overview-info-sm{ + font-size:14px +} +.corporate-content span.overview-info-lg{ + font-size:17px +} +.corporate-content .info-link{ + font-size:20px !important +} +.corporate-content .new-bottom-pages h2{ + font-size:20px +} +.corporate-content .media-page-key-features h2{ + padding:45px 0 +} +.corporate-content .media-page-key-features{ + padding:15px 56px 40px +} +.corporate-content .media-page-users-stats{ + height:450px; + padding:0 28px +} +.corporate-content .media-asset-card .media-asset-card-content p{ + font:var(--text-h3) !important +} +.corporate-content .media-page-key-features .key-feature-part p.key-feature-text{ + font-size:16px !important +} +.corporate.numbers-info .num{ + font-size:20px +} +.corporate.numbers-info .numbers-txt{ + font-size:15px; + line-height:20px +} +.corporate-content .media-page-users-stats h2{ + padding:48px 0 +} +.corporate-content .numbers-info{ + padding-bottom:20px +} +.corporate.main-menu.item{ + margin:0 0 -1px 40px +} +} +@media only screen and (max-width:419px){ +.corporate-content .bottom-page.full-block.active blockquote{ + padding:0 +} +.corporate.main-menu.body{ + padding:unset +} +.corporate .bottom-page.full-block.active .bug-container .img-txt{ + font:var(--text-h2-bold); + margin-top:10px +} +.corporate.main-menu.item{ + margin:0 0 -1px 35px +} +} +@media only screen and (max-width:320px){ +.corporate.main-menu.item{ + margin:0 0 -1px 15px +} +.corporate .bottom-page.full-block.active .bug-container .img-txt{ + font:var(--text-h3-bold) +} +} +@media only screen and (min-width:316px) and (max-width:410px){ +.corporate.main-menu.item{ + margin:0 0 -1px; + white-space:normal; + width:50% +} +.corporate.main-menu.item span{ + width:100% +} +} +@media only screen and (max-width:315px){ +.corporate.main-menu.body{ + overflow-wrap:break-word; + white-space:normal +} +.corporate.main-menu.item{ + margin:0 0 1px 2%; + width:50% +} +.corporate.main-menu.item span{ + width:100% +} +} diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/E449D1A027D9392F7E78F429B6CABE59BE7FCDF0 b/home/.surf/cache/WebKitCache/Version 16/Blobs/E449D1A027D9392F7E78F429B6CABE59BE7FCDF0 new file mode 100644 index 0000000..3d7af53 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/E449D1A027D9392F7E78F429B6CABE59BE7FCDF0 @@ -0,0 +1,11 @@ +.color-border-inverse{border-color:var(--color-fg-on-emphasis) !important}.bg-gray-2,.bg-gray-3{background-color:var(--color-neutral-muted) !important}.color-text-white{color:var(--color-scale-white) !important}.border-white-fade{border-color:rgba(255,255,255,.15) !important}.lead{color:var(--color-fg-muted)}.text-emphasized{color:var(--color-fg-default)}.Label.Label--orange{color:var(--color-severe-fg);border-color:var(--color-severe-emphasis)}.Label.Label--purple{color:var(--color-done-fg);border-color:var(--color-done-emphasis)}.Label.Label--pink{color:var(--color-sponsors-fg);border-color:var(--color-sponsors-emphasis)}/*! + * GitHub Light v0.5.0 + * Copyright (c) 2012 - 2017 GitHub, Inc. + * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE) + */.pl-c{color:var(--color-prettylights-syntax-comment)}.pl-c1,.pl-s .pl-v{color:var(--color-prettylights-syntax-constant)}.pl-e,.pl-en{color:var(--color-prettylights-syntax-entity)}.pl-smi,.pl-s .pl-s1{color:var(--color-prettylights-syntax-storage-modifier-import)}.pl-ent{color:var(--color-prettylights-syntax-entity-tag)}.pl-k{color:var(--color-prettylights-syntax-keyword)}.pl-s,.pl-pds,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sre,.pl-sr .pl-sra{color:var(--color-prettylights-syntax-string)}.pl-v,.pl-smw{color:var(--color-prettylights-syntax-variable)}.pl-bu{color:var(--color-prettylights-syntax-brackethighlighter-unmatched)}.pl-ii{color:var(--color-prettylights-syntax-invalid-illegal-text);background-color:var(--color-prettylights-syntax-invalid-illegal-bg)}.pl-c2{color:var(--color-prettylights-syntax-carriage-return-text);background-color:var(--color-prettylights-syntax-carriage-return-bg)}.pl-c2::before{content:"^M"}.pl-sr .pl-cce{font-weight:bold;color:var(--color-prettylights-syntax-string-regexp)}.pl-ml{color:var(--color-prettylights-syntax-markup-list)}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:bold;color:var(--color-prettylights-syntax-markup-heading)}.pl-mi{font-style:italic;color:var(--color-prettylights-syntax-markup-italic)}.pl-mb{font-weight:bold;color:var(--color-prettylights-syntax-markup-bold)}.pl-md{color:var(--color-prettylights-syntax-markup-deleted-text);background-color:var(--color-prettylights-syntax-markup-deleted-bg)}.pl-mi1{color:var(--color-prettylights-syntax-markup-inserted-text);background-color:var(--color-prettylights-syntax-markup-inserted-bg)}.pl-mc{color:var(--color-prettylights-syntax-markup-changed-text);background-color:var(--color-prettylights-syntax-markup-changed-bg)}.pl-mi2{color:var(--color-prettylights-syntax-markup-ignored-text);background-color:var(--color-prettylights-syntax-markup-ignored-bg)}.pl-mdr{font-weight:bold;color:var(--color-prettylights-syntax-meta-diff-range)}.pl-ba{color:var(--color-prettylights-syntax-brackethighlighter-angle)}.pl-sg{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}.pl-corl{text-decoration:underline;color:var(--color-prettylights-syntax-constant-other-reference-link)}.CodeMirror{font-family:monospace;height:300px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20, 255, 20, 0.5);animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:blue}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255, 150, 0, 0.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255, 255, 0, 0.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:none;outline:none;background:transparent;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%}.CodeMirror-merge{position:relative;border:1px solid #ddd;white-space:pre}.CodeMirror-merge,.CodeMirror-merge .CodeMirror{height:350px}.CodeMirror-merge-2pane .CodeMirror-merge-pane{width:47%}.CodeMirror-merge-2pane .CodeMirror-merge-gap{width:6%}.CodeMirror-merge-3pane .CodeMirror-merge-pane{width:31%}.CodeMirror-merge-3pane .CodeMirror-merge-gap{width:3.5%}.CodeMirror-merge-pane{display:inline-block;white-space:normal;vertical-align:top}.CodeMirror-merge-pane-rightmost{position:absolute;right:0px;z-index:1}.CodeMirror-merge-gap{z-index:2;display:inline-block;height:100%;box-sizing:border-box;overflow:hidden;border-left:1px solid #ddd;border-right:1px solid #ddd;position:relative;background:#f8f8f8}.CodeMirror-merge-scrolllock-wrap{position:absolute;bottom:0;left:50%}.CodeMirror-merge-scrolllock{position:relative;left:-50%;cursor:pointer;color:#555;line-height:1}.CodeMirror-merge-scrolllock:after{content:"⇛  ⇚"}.CodeMirror-merge-scrolllock.CodeMirror-merge-scrolllock-enabled:after{content:"⇛⇚"}.CodeMirror-merge-copybuttons-left,.CodeMirror-merge-copybuttons-right{position:absolute;left:0;top:0;right:0;bottom:0;line-height:1}.CodeMirror-merge-copy{position:absolute;cursor:pointer;color:#44c;z-index:3}.CodeMirror-merge-copy-reverse{position:absolute;cursor:pointer;color:#44c}.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy{left:2px}.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy{right:2px}.CodeMirror-merge-r-inserted,.CodeMirror-merge-l-inserted{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);background-position:bottom left;background-repeat:repeat-x}.CodeMirror-merge-r-deleted,.CodeMirror-merge-l-deleted{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);background-position:bottom left;background-repeat:repeat-x}.CodeMirror-merge-r-chunk{background:#ffffe0}.CodeMirror-merge-r-chunk-start{border-top:1px solid #ee8}.CodeMirror-merge-r-chunk-end{border-bottom:1px solid #ee8}.CodeMirror-merge-r-connect{fill:#ffffe0;stroke:#ee8;stroke-width:1px}.CodeMirror-merge-l-chunk{background:#eef}.CodeMirror-merge-l-chunk-start{border-top:1px solid #88e}.CodeMirror-merge-l-chunk-end{border-bottom:1px solid #88e}.CodeMirror-merge-l-connect{fill:#eef;stroke:#88e;stroke-width:1px}.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk{background:#dfd}.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start{border-top:1px solid #4e4}.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end{border-bottom:1px solid #4e4}.CodeMirror-merge-collapsed-widget:before{content:"(...)"}.CodeMirror-merge-collapsed-widget{cursor:pointer;color:#88b;background:#eef;border:1px solid #ddf;font-size:90%;padding:0 3px;border-radius:4px}.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt{display:none}/*! + * GitHub Light v0.4.2 + * Copyright (c) 2012 - 2017 GitHub, Inc. + * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE) + */.cm-s-github-light.CodeMirror{background:var(--color-codemirror-bg);color:var(--color-codemirror-text)}.cm-s-github-light .CodeMirror-gutters{background:var(--color-codemirror-gutters-bg);border-right-width:0}.cm-s-github-light .CodeMirror-guttermarker{color:var(--color-codemirror-guttermarker-text)}.cm-s-github-light .CodeMirror-guttermarker-subtle{color:var(--color-codemirror-guttermarker-subtle-text)}.cm-s-github-light .CodeMirror-scrollbar-filler,.cm-s-github-light .CodeMirror-gutter-filler{background-color:transparent}.cm-s-github-light .CodeMirror-linenumber{color:var(--color-codemirror-linenumber-text);padding:0 16px 0 16px}.cm-s-github-light .CodeMirror-cursor{border-left:1px solid var(--color-codemirror-cursor)}.cm-s-github-light.CodeMirror-focused .CodeMirror-selected,.cm-s-github-light .CodeMirror-line::selection,.cm-s-github-light .CodeMirror-line>span::selection,.cm-s-github-light .CodeMirror-line>span>span::selection{background:var(--color-codemirror-selection-bg, #d7d4f0)}.cm-s-github-light .CodeMirror-line::-moz-selection,.cm-s-github-light .CodeMirror-line>span::-moz-selection,.cm-s-github-light .CodeMirror-line>span>span::-moz-selection{background:var(--color-codemirror-selection-bg, #d7d4f0)}.cm-s-github-light .CodeMirror-activeline-background{background:var(--color-codemirror-activeline-bg)}.cm-s-github-light .CodeMirror-matchingbracket{text-decoration:underline;color:var(--color-codemirror-matchingbracket-text) !important}.cm-s-github-light .CodeMirror-lines{font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;background:var(--color-codemirror-lines-bg);line-height:1.5}.cm-s-github-light .cm-comment{color:var(--color-codemirror-syntax-comment)}.cm-s-github-light .cm-constant{color:var(--color-codemirror-syntax-constant)}.cm-s-github-light .cm-entity{font-weight:normal;font-style:normal;text-decoration:none;color:var(--color-codemirror-syntax-entity)}.cm-s-github-light .cm-keyword{font-weight:normal;font-style:normal;text-decoration:none;color:var(--color-codemirror-syntax-keyword)}.cm-s-github-light .cm-storage{color:var(--color-codemirror-syntax-storage)}.cm-s-github-light .cm-string{font-weight:normal;font-style:normal;text-decoration:none;color:var(--color-codemirror-syntax-string)}.cm-s-github-light .cm-support{font-weight:normal;font-style:normal;text-decoration:none;color:var(--color-codemirror-syntax-support)}.cm-s-github-light .cm-variable{font-weight:normal;font-style:normal;text-decoration:none;color:var(--color-codemirror-syntax-variable)}details-dialog{position:fixed;margin:10vh auto;top:0;left:50%;transform:translateX(-50%);z-index:999;max-height:80vh;max-width:90vw;width:448px;overflow:auto}.user-select-contain{-webkit-user-select:contain;user-select:contain}.ajax-pagination-form .ajax-pagination-btn{width:100%;padding:6px;margin-top:20px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-accent-fg);background:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px}.ajax-pagination-form .ajax-pagination-btn:hover,.ajax-pagination-form .ajax-pagination-btn:focus{color:var(--color-accent-fg);background-color:var(--color-canvas-subtle)}.ajax-pagination-form.loading .ajax-pagination-btn{text-indent:-3000px;background-color:var(--color-canvas-subtle);background-image:url("/images/spinners/octocat-spinner-16px-EAF2F5.gif");background-repeat:no-repeat;background-position:center center;border-color:var(--color-border-default)}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (-moz-min-device-pixel-ratio: 2),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){.ajax-pagination-form.loading .ajax-pagination-btn{background-image:url("/images/spinners/octocat-spinner-32-EAF2F5.gif");background-size:16px auto}}body.intent-mouse [role=button]:focus,body.intent-mouse [role=tabpanel][tabindex="0"]:focus,body.intent-mouse button:focus,body.intent-mouse summary:focus,body.intent-mouse a:focus{outline:none;box-shadow:none}body.intent-mouse [tabindex="0"]:focus,body.intent-mouse details-dialog:focus{outline:none}.CodeMirror{height:calc(100vh - 1px)}.file-editor-upload{height:100%}.issue-template-editor{height:100%}.file-editor-textarea{width:100%;padding:5px 4px;font:12px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;resize:vertical;border:0;border-radius:0;outline:none}.container-preview .tabnav-tabs{margin:-5px 0 -5px -9px}.container-preview .tabnav-tabs .tabnav-tab{padding:12px 16px;border-radius:0}.container-preview .tabnav-tabs>.selected:first-child{border-top-left-radius:6px}.container-preview .tabnav-tabs .selected{font-weight:var(--base-text-weight-semibold, 600)}.container-preview.template-editor .commit-create,.container-preview.template-editor .file-actions{display:block}.container-preview.template-editor .show-code,.container-preview.template-editor .commit-preview,.container-preview.template-editor .loading-preview-msg,.container-preview.template-editor .no-changes-preview-msg,.container-preview.template-editor .error-preview-msg{display:none !important}.container-preview.render-editor .commit-create,.container-preview.render-editor .file-actions{display:block}.container-preview.render-editor .template-editor,.container-preview.render-editor .show-code,.container-preview.render-editor .commit-preview,.container-preview.render-editor .loading-preview-msg,.container-preview.render-editor .no-changes-preview-msg,.container-preview.render-editor .error-preview-msg{display:none !important}.container-preview.show-code .commit-create,.container-preview.show-code .file-actions{display:block}.container-preview.show-code .template-editor,.container-preview.show-code .render-editor,.container-preview.show-code .commit-preview,.container-preview.show-code .loading-preview-msg,.container-preview.show-code .no-changes-preview-msg,.container-preview.show-code .error-preview-msg{display:none !important}.container-preview:not(.show-code) .commit-create,.container-preview:not(.show-code) .file-actions{display:none !important}.container-preview.loading-preview .loading-preview-msg{display:block}.container-preview.loading-preview .template-editor,.container-preview.loading-preview .render-editor,.container-preview.loading-preview .no-changes-preview-msg,.container-preview.loading-preview .error-preview-msg,.container-preview.loading-preview .commit-preview{display:none !important}.container-preview.show-preview .commit-preview{display:block}.container-preview.show-preview .template-editor,.container-preview.show-preview .render-editor,.container-preview.show-preview .loading-preview-msg,.container-preview.show-preview .no-changes-preview-msg,.container-preview.show-preview .error-preview-msg{display:none !important}.container-preview.no-changes-preview .no-changes-preview-msg{display:block}.container-preview.no-changes-preview .template-editor,.container-preview.no-changes-preview .render-editor,.container-preview.no-changes-preview .loading-preview-msg,.container-preview.no-changes-preview .error-preview-msg,.container-preview.no-changes-preview .commit-preview{display:none !important}.container-preview.error-preview .error-preview-msg{display:block}.container-preview.error-preview .template-editor,.container-preview.error-preview .render-editor,.container-preview.error-preview .loading-preview-msg,.container-preview.error-preview .no-changes-preview-msg,.container-preview.error-preview .commit-preview{display:none !important}.container-preview p.preview-msg{padding:30px;font-size:16px}.CodeMirror-merge-header{height:30px}.CodeMirror-merge-header .CodeMirror-merge-pane{height:30px;line-height:30px}.cm-s-github-light .merge-gutter{width:14px}.conflict-background+.CodeMirror-gutter-wrapper .CodeMirror-linenumber{background-color:var(--color-attention-subtle)}.form-group .edit-action{opacity:.6}.form-group .form-field-hover{background-color:none;border:1px solid var(--color-border-default)}.form-group:hover .edit-action{cursor:pointer;opacity:.7}.form-group:hover .form-field-hover{cursor:pointer;border:1px solid var(--color-border-default)}.placeholder-box{border:1px solid var(--color-border-default)}.template-previews{max-width:768px}.template-previews .Box .expand-group{display:none;height:0}.template-previews .Box .dismiss-preview-button{display:none}.template-previews .Box.expand-preview .expand-group{display:block;height:100%;transition:height 3s}.template-previews .Box.expand-preview .preview-button{display:none}.template-previews .Box.expand-preview .dismiss-preview-button{display:inline}.template-previews .discussion-sidebar-heading{font-size:14px;color:var(--color-neutral-emphasis)}.template-previews .discussion-sidebar-heading:hover{color:var(--color-accent-emphasis)}.edit-labels{display:none}.preview-section{display:block}.edit-section{display:none}.Box .section-focus .preview-section{display:none}.Box .section-focus .edit-section{display:block}.commit-create .CodeMirror{padding-top:8px}auto-complete,details-dialog,details-menu,file-attachment,filter-input,remote-input,tab-container,text-expander,turbo-frame,[data-catalyst]{display:block}[data-catalyst-inline]{display:inline}.Details--on .Details-content--shown{display:none !important}.Details:not(.Details--on) .Details-content--hidden{display:none !important}.Details:not(.Details--on) .Details-content--hidden-not-important{display:none}.Details-element[open]>summary .Details-content--closed{display:none !important}.Details-element:not([open])>summary .Details-content--open{display:none !important}g-emoji{display:inline-block;min-width:1ch;font-family:"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1em;font-style:normal !important;font-weight:var(--base-text-weight-normal, 400);line-height:1;vertical-align:-0.075em}g-emoji img{width:1em;height:1em}.emoji-icon{display:inline-block;width:20px;height:20px;vertical-align:middle;background-repeat:no-repeat;background-size:20px 20px}.emoji-result{display:inline-block;height:20px;font-size:16px;font-weight:var(--base-text-weight-normal, 400);vertical-align:middle}.gollum-editor .comment-form-head.tabnav{border:1px solid var(--color-border-muted)}.gollum-editor .gollum-editor-body{height:390px;resize:vertical}.active .gollum-editor-function-buttons{display:block !important}.auth-form{width:340px;margin:0 auto}.auth-form .form-group.warn .warning,.auth-form .form-group.warn .error,.auth-form .form-group.errored .warning,.auth-form .form-group.errored .error{max-width:274px}.auth-form-header{padding:8px 16px;margin:0;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3);background-color:#829aa8;border:1px solid #768995;border-radius:6px 6px 0 0}.auth-form-header h1{font-size:16px}.auth-form-header h1 a{color:#fff}.auth-form-header .octicon{position:absolute;top:10px;right:20px;color:rgba(0,0,0,.4);text-shadow:0 1px 0 rgba(255,255,255,.1)}.auth-form-message{max-height:140px;padding:16px 16px 8px;overflow-y:scroll;border:1px solid var(--color-border-default);border-radius:6px}.auth-form-message ol,.auth-form-message ul{padding-left:inherit;margin-bottom:inherit}.auth-form-body{padding:16px;font-size:14px;background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-muted);border-top:0;border-radius:0 0 6px 6px}.auth-form-body .input-block{margin-top:4px;margin-bottom:16px}.auth-form-body p{margin-bottom:0}.auth-form-body ol,.auth-form-body ul{padding-left:inherit;margin-bottom:inherit}.two-factor-help{position:relative;padding:8px 8px 8px 32px;margin:60px 0 auto auto;border:1px solid var(--color-border-muted);border-radius:6px}.two-factor-help h4{margin-top:0;margin-bottom:4px}.two-factor-help .octicon-device-mobile,.two-factor-help .octicon-key,.two-factor-help .octicon-shield-lock,.two-factor-help .octicon-circle-slash{position:absolute;top:10px;left:10px}.sms-send-code-spinner{position:relative;bottom:2px;display:none;vertical-align:bottom}.loading .sms-send-code-spinner{display:inline}.auth-form-body .webauthn-form-body{padding:0}.webauthn-form-body{padding:32px 32px 16px;text-align:center}.webauthn-form-body button{margin-top:16px}.flash.sms-error,.flash.sms-success{display:none;margin:0 0 8px}.is-sent .sms-success{display:block}.is-sent .sms-error{display:none}.is-not-sent .sms-success{display:none}.is-not-sent .sms-error{display:block}.session-authentication{background-color:var(--color-canvas-default)}.session-authentication .header-logged-out{background-color:transparent;border-bottom:0}.session-authentication .header-logo{color:var(--color-fg-default)}.session-authentication .flash{padding:16px 16px;margin:0 auto;margin-bottom:8px;font-size:14px;border-style:solid;border-width:1px;border-radius:6px}.session-authentication .flash .container{width:auto}.session-authentication .flash .flash-close{height:40px}.session-authentication .flash.flash-banner{width:100%;border-top:0;border-right:0;border-left:0;border-radius:0}.session-authentication .auth-form label{display:block;margin-bottom:8px;font-weight:var(--base-text-weight-normal, 400);text-align:left}.session-authentication .auth-form .btn{margin-top:16px}.session-authentication .auth-form .webauthn-message{margin-bottom:0}.session-authentication .label-link{float:right;font-size:12px}.session-authentication .auth-form-header{margin-bottom:16px;color:var(--color-fg-default);text-align:center;text-shadow:none;background-color:transparent;border:0}.session-authentication .auth-form-header h1{font-size:24px;font-weight:var(--base-text-weight-light, 300);letter-spacing:-0.5px}.session-authentication .auth-form-body{border-top:1px solid var(--color-border-muted);border-radius:6px}.session-authentication .auth-form-body.webauthn-form-body{padding:16px}.session-authentication .login-callout{padding:16px 16px;text-align:center;border:1px solid var(--color-border-default);border-radius:6px}.session-authentication .two-factor-help{padding:0 0 0 16px;margin-top:16px;border:0}.session-authentication .two-factor-help .octicon-device-mobile,.session-authentication .two-factor-help .octicon-key,.session-authentication .two-factor-help .octicon-shield-lock,.session-authentication .two-factor-help .octicon-circle-slash{top:4px;left:0}.session-authentication.enterprise .header-logged-out{padding:48px 0 24px;background-color:transparent}.session-authentication.hosted .header-logged-out{padding:40px 0 16px;background-color:transparent}@media(prefers-reduced-motion: no-preference){.Header-backdrop,.HeaderMenu--logged-out,.HeaderMenu-link,.HeaderMenu-toggle-bar,.HeaderMenu-icon,.HeaderMenu-dropdown,.HeaderMenu-external-icon{transition-timing-function:cubic-bezier(0.16, 1, 0.3, 1);transition-duration:500ms;transition-property:opacity,transform}}.Header-old{z-index:32;padding-top:12px;padding-bottom:12px;color:#fff;background-color:var(--color-header-bg)}.server-stats+.Header-old{box-shadow:inset 0 1px 0 rgba(255,255,255,.075)}.Header-old .dropdown-menu{width:300px}.Header-old .notification-indicator:hover::after{content:none}@media(min-width: 1012px){.Header-old .notification-indicator:hover::after{content:attr(aria-label)}}.HeaderMenu-toggle-bar{width:22px;height:2px;background-color:var(--color-fg-on-emphasis)}.HeaderMenu-toggle-bar:nth-of-type(1){transform-origin:bottom right}.HeaderMenu-toggle-bar:nth-of-type(3){transform-origin:top right}.open .HeaderMenu-toggle-bar:nth-of-type(1){transform:rotate(-45deg) translateY(-3px)}.open .HeaderMenu-toggle-bar:nth-of-type(2){opacity:0;transform:scale(0)}.open .HeaderMenu-toggle-bar:nth-of-type(3){transform:rotate(45deg) translateY(3px)}@media(max-width: 1011px){body:has(.header-logged-out.open){height:100%;overflow:hidden}.Header-backdrop{visibility:hidden;background:var(--color-primer-canvas-backdrop);opacity:0}.open .Header-backdrop{visibility:visible;opacity:1;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}}.HeaderMenu--logged-out{--header-menu-shadow: 0 5px 30px rgba(27, 31, 35, 0.1), 0 0 1px rgba(27, 31, 35, 0.4), 0 1px 2px rgba(27, 31, 35, 0.15);contain:layout;z-index:100;width:100%;pointer-events:none}@media(prefers-color-scheme: dark){.HeaderMenu--logged-out{--header-menu-shadow: 0 0 1px #959da5}}@media(min-width: 1012px){.HeaderMenu--logged-out{width:auto;padding:0 !important;transition:none}}@media(max-width: 1011px){.HeaderMenu--logged-out{position:fixed;display:flex;height:100%;transform-origin:top right}.header-logged-out:not(.open) .HeaderMenu--logged-out{position:absolute;visibility:hidden;opacity:0;transform:scale(0.9) translateY(-24px)}.HeaderMenu--logged-out .HeaderMenu-link.HeaderMenu-link--sign-up,.HeaderMenu--logged-out .HeaderMenu-link.HeaderMenu-link--sign-up:hover,.HeaderMenu--logged-out .HeaderMenu-link.HeaderMenu-link--sign-in,.HeaderMenu--logged-out .HeaderMenu-link.HeaderMenu-link--sign-in:hover{color:var(--color-fg-on-emphasis) !important;background-color:var(--color-neutral-emphasis-plus);border-color:var(--color-neutral-emphasis-plus) !important;opacity:1}}.HeaderMenu--logged-out .header-menu-wrapper{width:100%;height:100%;overflow:auto;pointer-events:auto;background-color:var(--color-canvas-default);box-shadow:var(--header-menu-shadow)}@media(min-width: 544px){.HeaderMenu--logged-out .header-menu-wrapper{width:320px}}@media(min-width: 1012px){.HeaderMenu--logged-out .header-menu-wrapper{width:100%;overflow:visible;background-color:transparent;box-shadow:none}}@media(max-width: 1011px){.HeaderMenu--logged-out .header-search{margin-right:0 !important}.HeaderMenu--logged-out .HeaderMenu-link{font-weight:var(--base-text-weight-semibold, 600)}}.HeaderMenu--logged-out .jump-to-suggestions{top:100%}.HeaderMenu--logged-out .header-search-key-slash{margin-right:8px !important}@media(max-width: 1012px){.HeaderMenu--logged-out .header-search-key-slash{display:none}}.HeaderMenu--logged-out .dropdown-menu{position:static;width:auto;border:0 solid transparent;box-shadow:none}.HeaderMenu--logged-out .dropdown-menu::before,.HeaderMenu--logged-out .dropdown-menu::after{display:none}@media(min-width: 1012px){.HeaderMenu--logged-out .dropdown-menu{position:absolute;width:300px;border:0;box-shadow:var(--header-menu-shadow)}.HeaderMenu--logged-out .dropdown-menu::before,.HeaderMenu--logged-out .dropdown-menu::after{content:""}.HeaderMenu--logged-out .dropdown-menu.dropdown-menu-wide{width:500px}}.HeaderMenu--logged-out .dropdown-menu-s{transform:none}@media(min-width: 1012px){.HeaderMenu--logged-out .dropdown-menu-s{transform:translateX(50%)}}.HeaderMenu--logged-out .header-search{width:auto;border-top:0}@media(min-width: 1012px){.HeaderMenu--logged-out .header-search{width:240px}}.HeaderMenu--logged-out .header-search-wrapper{border-color:var(--color-border-muted)}@media(min-width: 1012px){.HeaderMenu--logged-out .header-search-wrapper{border-color:var(--color-header-search-border)}}@media(max-width: 1012px){.HeaderMenu--logged-out .header-search-wrapper{background-color:var(--color-canvas-subtle)}}@media(min-width: 1012px){.HeaderMenu--logged-out .header-search-input{padding-top:8px;padding-bottom:8px;font-size:14px;-webkit-appearance:none}}.HeaderMenu--logged-out .header-search-input::placeholder{color:var(--color-scale-gray-4)}.HeaderMenu-link{color:var(--color-fg-default);white-space:nowrap;background:transparent}.HeaderMenu-link:hover{color:var(--color-fg-default);opacity:.75}@media(min-width: 1012px){.HeaderMenu-link{color:#fff}.HeaderMenu-link:hover{color:#fff;opacity:.75}}.HeaderMenu-item .HeaderMenu-dropdown{visibility:hidden;opacity:0;transform:scale(0.99) translateY(-0.7em);transform-origin:top}.HeaderMenu-item:hover .HeaderMenu-dropdown,.HeaderMenu-item.open .HeaderMenu-dropdown{visibility:visible;opacity:1;transform:scale(1) translateY(0)}@media(min-width: 1012px){.HeaderMenu-item:hover .HeaderMenu-icon,.HeaderMenu-item.open .HeaderMenu-icon{transform:translateY(2px)}}@media(max-width: 1011px){.HeaderMenu-item .HeaderMenu-dropdown{background-color:transparent}.HeaderMenu-item .HeaderMenu-icon{transform:scale(1.2)}.HeaderMenu-item:not(.open) .HeaderMenu-dropdown{position:fixed !important}.HeaderMenu-item:not(.open) .HeaderMenu-icon{transform:rotate(-90deg) scale(1.2)}.HeaderMenu-item .HeaderMenu-link{font-size:20px}}.HeaderMenu-dropdown-link:not(:hover):not(:focus) .HeaderMenu-external-icon{opacity:0;transform:translateX(-0.5em)}.header-logo-invertocat{margin:-1px 16px -1px -2px;color:#fff;white-space:nowrap}.header-logo-invertocat .octicon-mark-github{float:left}.header-logo-invertocat:hover{color:#fff;text-decoration:none}.notification-indicator .mail-status{position:absolute;top:-6px;left:6px;display:none;width:14px;height:14px;color:#fff;background-image:linear-gradient(#54a3ff, #006eed);background-clip:padding-box;border:2px solid var(--color-header-bg);border-radius:50%}.notification-indicator .mail-status.unread{display:inline-block}.notification-indicator:hover .mail-status{text-decoration:none;background-color:var(--color-accent-emphasis)}.notification-indicator .discussion-status{position:absolute;top:5px;left:17px;z-index:2;display:none;width:8px;height:8px;color:#fff;background-image:linear-gradient(#54a3ff, #006eed);background-clip:padding-box;border:1px solid var(--color-page-header-bg);border-radius:50%}.notification-indicator .discussion-status.unread{display:inline-block}.header-nav-current-user{padding-bottom:0;font-size:inherit}.header-nav-current-user .css-truncate-target{max-width:100%}.header-nav-current-user .user-profile-link{color:var(--color-fg-default)}.unread-indicator{position:absolute;top:0;left:13px;z-index:2;width:14px;height:14px;color:#fff;background-image:linear-gradient(#54a3ff, #006eed);background-clip:padding-box;border:2px solid var(--color-header-bg);border-radius:50%}.unread-indicator--small{width:10px;height:10px;border:0}.unread-indicator-container .unread-indicator{top:9px;right:10px;left:inherit;width:10px;height:10px;border:0}.header-search-wrapper{display:table;width:100%;max-width:100%;padding:0;font-size:inherit;font-weight:var(--base-text-weight-normal, 400);vertical-align:middle;background-color:var(--color-header-search-bg);border:1px solid var(--color-header-search-border);box-shadow:none}@media(min-width: 1012px){.header-search-wrapper{color:var(--color-scale-white)}}.header-search-wrapper.header-search-wrapper-jump-to .header-search-scope{width:-moz-fit-content;width:fit-content}.header-search-wrapper.header-search-wrapper-jump-to.search-wrapper-suggestions-active{color:var(--color-fg-default);background-color:var(--color-canvas-default);border-bottom-right-radius:0;border-bottom-left-radius:0}.header-search-wrapper .truncate-repo-scope{max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.header-search-wrapper.focus{background-color:rgba(255,255,255,.175);box-shadow:none}.header-search-wrapper.focus .header-search-scope{color:var(--color-scale-white);background-color:rgba(255,255,255,.075);border-right-color:#282e34}.search-input.search-input-absolute{position:absolute;width:calc(100% - 180px)}.header-search-input{display:table-cell;width:100%;padding-top:0;padding-bottom:0;font-size:inherit;color:inherit;background:none;border:0;box-shadow:none}.header-search-input::placeholder{color:rgba(255,255,255,.75)}.header-search-input:focus{border:0;box-shadow:none}.header-search-input:focus~.header-search-key-slash{display:none !important}.header-search-input::-ms-clear{display:none}.header-search-button{display:table-cell;overflow:hidden;font-size:inherit;color:inherit;word-break:break-word;white-space:pre;background:none}.header-search-button.input-button:focus{border:0 !important}.header-search-button.input-button:focus~.header-search-key-slash{display:none !important}.header-search-button.input-button:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.header-search-button::-ms-clear{display:none}.Header .header-search-button .input-parsed-symbol{color:#58a6ff;background:#388bfd26;border-radius:3px;box-shadow:0 0 0 .8px #388bfd26}.Header .header-search-button .pl-c1{color:#58a6ff}.Header .header-search-button .pl-en{color:#58a6ff}.header-search-button.placeholder{color:rgba(255,255,255,.75)}.header-search-scope{display:none;padding-right:8px;padding-left:8px;font-size:inherit;line-height:28px;color:rgba(255,255,255,.7);white-space:nowrap;vertical-align:middle;border-right:1px solid var(--color-border-muted);border-right-color:#282e34;border-top-left-radius:6px;border-bottom-left-radius:6px}.header-search-scope:empty+.header-search-input{width:100%}.header-search-scope:hover{color:var(--color-scale-white);background-color:rgba(255,255,255,.12)}.scoped-search .header-search-wrapper{display:flex}.jump-to-field-active{color:var(--color-fg-default) !important;background-color:var(--color-canvas-default)}.jump-to-field-active::placeholder{color:var(--color-fg-muted) !important}.jump-to-field-active~.header-search-key-slash{display:none}.jump-to-field-active.jump-to-dropdown-visible{border-bottom-right-radius:0;border-bottom-left-radius:0}.jump-to-suggestions{top:100%;left:0;z-index:35;width:100%;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:6px;border-bottom-left-radius:6px;box-shadow:0 4px 10px rgba(0,0,0,.1)}.jump-to-suggestions-path{min-width:0;min-height:44px;color:var(--color-fg-default)}.jump-to-suggestions-path .jump-to-octicon{width:28px;color:var(--color-fg-muted)}.jump-to-suggestions-path .jump-to-suggestion-name{max-width:none}.jump-to-suggestions-path mark{font-weight:var(--base-text-weight-semibold, 600);background-color:transparent}.jump-to-suggestions-results-container .navigation-item{border-bottom:1px solid var(--color-border-default)}.jump-to-suggestions-results-container .navigation-item:last-child{border-bottom:0}.jump-to-suggestions-results-container .d-on-nav-focus{display:none}.jump-to-suggestions-results-container [aria-selected=true] .jump-to-octicon,.jump-to-suggestions-results-container .navigation-focus .jump-to-octicon{color:var(--color-fg-on-emphasis)}.jump-to-suggestions-results-container [aria-selected=true] .jump-to-suggestions-path,.jump-to-suggestions-results-container .navigation-focus .jump-to-suggestions-path{color:var(--color-fg-on-emphasis);background:var(--color-accent-emphasis)}.jump-to-suggestions-results-container [aria-selected=true] mark,.jump-to-suggestions-results-container .navigation-focus mark{color:var(--color-fg-on-emphasis)}.jump-to-suggestions-results-container [aria-selected=true] .d-on-nav-focus,.jump-to-suggestions-results-container .navigation-focus .d-on-nav-focus{display:block}.header-search{max-width:100%;transition:.2s ease-in-out;transition-property:max-width,padding-bottom,padding-top}@media(min-width: 768px){.header-search{max-width:272px}}@media(min-width: 768px){.header-search:focus-within{max-width:544px}}@media(min-width: 768px){.header-search.fixed-width:focus-within{max-width:272px}}.HeaderMenu--logged-out .header-search{min-width:auto;margin-bottom:0 !important}@media(max-width: 1011px){.HeaderMenu--logged-out .header-search .header-search-input{min-height:40px}}.search-input{width:350px}@media only screen and (max-width: 768px){.search-input{width:100%}.search-input-container{margin-right:10px !important;margin-bottom:10px !important;margin-left:10px !important}}.search-input.expanded{flex:1}.search-input.expanded .search-with-dialog{z-index:35}.search-with-dialog{height:32px;color:var(--color-scale-white);background-color:var(--color-header-bg);border:1px solid var(--color-header-search-border)}.search-with-dialog:hover{background-color:var(--color-header-search-bg)}.search-with-dialog .input-parsed-symbol{color:var(--color-accent-fg);background-color:var(--color-accent-subtle);border-radius:3px;box-shadow:0 0 0 .8px var(--color-canvas-subtle)}.search-suggestions{top:-14px;left:-14px;z-index:15;width:calc(100% + 26px) !important;max-height:80vh}.search-suggestions .suggestion-search-input-wrapper{height:32px;overflow-x:hidden;border:1px solid var(--color-accent-fg);box-shadow:0 0 0 1px var(--color-accent-fg);align-items:center}.search-suggestions .blackbird-search-button-separator{height:16px;border-right:1px solid var(--color-border-default)}.search-suggestions .close-blackbird-search-button{position:relative;display:grid;background-color:transparent;border:0;box-shadow:none;place-content:center}.search-suggestions .close-blackbird-search-button:hover{background-color:var(--color-canvas-subtle)}.search-suggestions .clear-blackbird-search-button{background-color:transparent;border:0;box-shadow:none}.search-suggestions .clear-blackbird-search-button:hover{background-color:var(--color-canvas-subtle)}.search-suggestions .suggestion-list{list-style:none}.search-suggestions .suggestion-list [aria-selected=true],.search-suggestions .suggestion-list .suggestion-item-hover{background-color:var(--color-canvas-subtle) !important}.search-suggestions .suggestion-list .suggestion-item-hover::after{position:absolute;top:calc(50% - 12px);left:-4px;width:4px;height:24px;content:"";background:var(--color-accent-fg);border-radius:6px}.search-suggestions .suggestion-list .ActionList-item:hover{background-color:inherit;box-shadow:inherit}.search-suggestions .header-search-input{overflow:hidden}.search-suggestions .octicon{pointer-events:none}.dark-backdrop{top:0;right:0;bottom:0;left:0;z-index:32;height:100%;background-color:var(--color-primer-canvas-backdrop)}.Header-item--search{flex-grow:100}.styled-text-input{align-items:center;width:100%;background-repeat:no-repeat;background-position:right 8px center}.styled-text-input.text-input-wrapper{display:inline-flex;min-height:30px;color:var(--color-fg-default);cursor:text;background-color:var(--color-canvas-default);outline:none}.styled-text-input.text-input-wrapper::placeholder{color:var(--color-fg-subtle)}.styled-text-input.text-input-wrapper .text-input-icon{display:flex;margin-right:8px;align-self:center;color:var(--color-fg-muted);flex-shrink:0}.styled-text-input .styled-content-container{font-size:inherit;align-items:center;-ms-overflow-style:none;scrollbar-width:none}.styled-text-input .styled-content-container::-webkit-scrollbar{display:none}.styled-text-input .styled-content-container .styled-content{word-break:break-word;white-space:pre}.autosize-text-input .input{display:flex;width:100%;min-width:100%;height:100%;color:transparent;resize:none;background:transparent;outline:none;caret-color:var(--color-fg-default)}.autosize-text-input .sizer{height:0;white-space:pre}.boxed-group{position:relative;margin-bottom:30px;border-radius:6px}.boxed-group .Counter{color:var(--color-fg-on-emphasis);background-color:var(--color-neutral-emphasis)}.boxed-group.flush .boxed-group-inner{padding:0}.boxed-group.condensed .boxed-group-inner{padding:0;font-size:12px}.boxed-group>h3,.boxed-group .heading{display:block;padding:9px 10px 10px;margin:0;font-size:14px;line-height:17px;background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default);border-bottom:0;border-radius:6px 6px 0 0}.boxed-group>h3 a,.boxed-group .heading a{color:inherit}.boxed-group>h3 a.boxed-group-breadcrumb,.boxed-group .heading a.boxed-group-breadcrumb{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted);text-decoration:none}.boxed-group>h3 .avatar,.boxed-group .heading .avatar{margin-top:-4px}.boxed-group .tabnav.heading{padding:0}.boxed-group .tabnav.heading .tabnav-tab.selected{border-top:0}.boxed-group .tabnav.heading li:first-child .selected{border-left-color:var(--color-canvas-default);border-top-left-radius:6px}.boxed-group .tabnav-tab{border-top:0;border-radius:0}.boxed-group code.heading{font-size:12px}.boxed-group.dangerzone>h3{color:var(--color-fg-on-emphasis);background-color:var(--color-danger-emphasis);border:1px solid var(--color-danger-emphasis)}.boxed-group.dangerzone .boxed-group-inner{border-top:0}.boxed-group.condensed>h3{padding:6px 6px 7px;font-size:12px}.boxed-group.condensed>h3 .octicon{padding:0 6px 0 2px}.dashboard-sidebar .boxed-group{margin-bottom:20px}.boxed-group .bleed-flush{width:100%;padding:0 10px;margin-left:-10px}.boxed-group .compact{margin-top:10px;margin-bottom:10px}.boxed-group-inner{padding:10px;color:var(--color-fg-muted);background:var(--color-canvas-default);border:1px solid var(--color-border-default);border-bottom-right-radius:6px;border-bottom-left-radius:6px}.boxed-group-inner .markdown-body{padding:20px 10px 10px;font-size:13px}.boxed-group-inner.markdown-body{padding-top:10px;padding-bottom:10px}.boxed-group-inner.seamless{padding:0}.boxed-group-inner .tabnav{padding-right:10px;padding-left:10px;margin-right:-10px;margin-left:-10px}.boxed-group-inner .tabnav-tab.selected{border-top:1px solid var(--color-border-default)}.boxed-action{float:right;margin-left:10px}.boxed-action .boxed-action{float:none;margin-left:0}.boxed-group-action{position:relative;z-index:2;float:right;margin:5px 10px 0 0}.boxed-group-action.flush{margin-top:0;margin-right:0}.field-with-errors{display:inline}.boxed-group-list{margin:0;list-style:none}.boxed-group-list:first-child>li:first-child{border-top:0}.boxed-group-list>li{display:block;padding:5px 10px;margin-right:-10px;margin-left:-10px;line-height:23px;border-bottom:1px solid var(--color-border-default)}.boxed-group-list>li:first-child{border-top:1px solid var(--color-border-default)}.boxed-group-list>li:last-of-type{border-bottom:0}.boxed-group-list>li.selected{background:var(--color-success-subtle)}.boxed-group-list>li.approved .btn-sm,.boxed-group-list>li.rejected .btn-sm{display:none}.boxed-group-list>li.rejected a{text-decoration:line-through}.boxed-group-list>li .avatar{margin-top:-2px;margin-right:4px}.boxed-group-list>li .octicon{width:24px;margin-right:4px}.boxed-group-list>li .btn-sm{float:right;margin:-1px 0 0 10px}.boxed-group-list>li .BtnGroup{float:right}.boxed-group-list>li .BtnGroup .btn-sm{float:left}.boxed-group.flush .boxed-group-list li{width:auto;padding-right:0;padding-left:0;margin-left:0}.boxed-group-list.standalone{margin-top:-1px}.boxed-group-list.standalone>li:first-child{border-top:0}.boxed-group-table{width:100%;text-align:left}.boxed-group-table tr:last-child td{border-bottom:0}.boxed-group-table th{padding:9px;background-color:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-muted)}.boxed-group-table td{padding:9px;vertical-align:top;border-bottom:1px solid var(--color-border-muted)}.ajax-error-message{position:fixed;top:0;left:50%;z-index:9999;width:974px;margin:0 3px;margin-left:-487px;transition:top .5s ease-in-out}.ajax-error-message>.octicon-alert{vertical-align:text-top}.container{width:980px;margin-right:auto;margin-left:auto}.container::before{display:table;content:""}.container::after{display:table;clear:both;content:""}.draft.octicon{color:var(--color-fg-muted)}.closed.octicon,.reverted.octicon{color:var(--color-closed-fg)}.open.octicon{color:var(--color-open-fg)}.closed.octicon.octicon-issue-closed,.merged.octicon{color:var(--color-done-fg)}.progress-bar{display:block;height:15px;overflow:hidden;background-color:var(--color-border-muted);border-radius:6px}.progress-bar .progress{display:block;height:100%;background-color:var(--color-success-emphasis)}.reverse-progress-container{position:relative;height:3px;background-color:var(--color-border-muted);background-image:linear-gradient(to right, var(--color-success-emphasis), var(--color-accent-emphasis), var(--color-done-emphasis), var(--color-danger-emphasis), var(--color-severe-emphasis));background-size:100% 3px}.reverse-progress-bar{position:absolute;right:0;height:100%;background-color:var(--color-border-muted)}.progress-bar-small{height:10px}.select-menu-button::after{display:inline-block;width:0;height:0;vertical-align:-2px;content:"";border:4px solid;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.select-menu-button.icon-only{padding-left:7px}.select-menu-button.primary::after{border-top-color:var(--color-fg-on-emphasis)}.select-menu-button.primary::after:active{background-color:var(--color-success-emphasis)}.select-menu-button-large::after{margin-left:.25em;border-width:.33em}.select-menu .spinner{float:left;margin:4px 0 0 -24px}.select-menu.active .select-menu-modal-holder{display:block}.select-menu.select-menu-modal-right{position:relative}.select-menu.select-menu-modal-right .select-menu-modal-holder{right:0}.select-menu .select-menu-clear-item{display:block}.select-menu .select-menu-clear-item .octicon{color:inherit}.select-menu .select-menu-clear-item+.select-menu-no-results{display:none !important}.select-menu.is-loading .select-menu-loading-overlay{display:block}.select-menu.is-loading .select-menu-modal{min-height:200px}.select-menu.has-error .select-menu-error{display:block}.select-menu-error{display:none}.select-menu-loading-overlay{position:absolute;top:0;z-index:5;display:none;width:100%;height:100%;background-color:var(--color-canvas-overlay);border:1px solid transparent;border-radius:5px}.select-menu-modal-holder{position:absolute;z-index:30;display:none}.select-menu-modal{position:relative;width:300px;margin-top:4px;margin-bottom:20px;overflow:hidden;font-size:12px;color:var(--color-fg-default);background-color:var(--color-canvas-overlay);background-clip:padding-box;border:1px solid var(--color-border-default);border-radius:6px;box-shadow:var(--color-shadow-large)}.select-menu-header,.select-menu-divider{padding:8px 10px;line-height:16px;background:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-muted)}.select-menu-header .select-menu-title,.select-menu-divider{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default)}.select-menu-divider{margin-top:-1px;border-top:1px solid var(--color-border-muted)}.select-menu-header .close-button,.select-menu-header .octicon{display:block;float:right;color:var(--color-fg-muted);cursor:pointer}.select-menu-header .close-button:hover,.select-menu-header .octicon:hover{color:var(--color-fg-default)}.select-menu-header:focus{outline:none}.select-menu-filters{background-color:var(--color-canvas-overlay)}.select-menu-text-filter{padding:10px 10px 0}.select-menu-text-filter:first-child:last-child{padding-bottom:10px;border-bottom:1px solid var(--color-border-muted)}.select-menu-text-filter input{display:block;width:100%;max-width:100%;padding:5px;border:1px solid var(--color-border-muted);border-radius:6px}.select-menu-text-filter input::placeholder{color:var(--color-fg-subtle)}.select-menu-tabs{padding:10px 10px 0;border-bottom:1px solid var(--color-border-muted)}.select-menu-tabs ul{position:relative;bottom:-1px}.select-menu-tabs .select-menu-tab{display:inline-block}.select-menu-tabs a,.select-menu-tabs .select-menu-tab-nav{display:inline-block;padding:4px 8px 2px;font-size:12px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted);text-decoration:none;cursor:pointer;background:transparent;border:1px solid transparent;border-radius:6px 6px 0 0}.select-menu-tabs a:hover,.select-menu-tabs .select-menu-tab-nav:hover{color:var(--color-fg-default)}.select-menu-tabs a[aria-selected=true],.select-menu-tabs a.selected,.select-menu-tabs .select-menu-tab-nav[aria-selected=true],.select-menu-tabs .select-menu-tab-nav.selected{color:var(--color-fg-default);background-color:var(--color-canvas-overlay);border-color:var(--color-border-muted);border-bottom-color:var(--color-canvas-overlay)}.select-menu-list{position:relative;max-height:400px;overflow:auto}.select-menu-list.is-showing-new-item-form .select-menu-new-item-form{display:block}.select-menu-list.is-showing-new-item-form .select-menu-no-results,.select-menu-list.is-showing-new-item-form .select-menu-clear-item{display:none}.select-menu-blankslate{padding:16px;text-align:center}.select-menu-blankslate svg{display:block;margin-right:auto;margin-bottom:9px;margin-left:auto;fill:var(--color-fg-muted)}.select-menu-blankslate h3{font-size:14px;color:var(--color-fg-default)}.select-menu-blankslate p{width:195px;margin-right:auto;margin-bottom:0;margin-left:auto}.select-menu-item{display:block;padding:8px 8px 8px 30px;overflow:hidden;color:inherit;cursor:pointer;border-bottom:1px solid var(--color-border-muted)}.select-menu-item .select-menu-item-text .octicon-x{display:none;float:right;margin:1px 10px 0 0;opacity:.6}.select-menu-item:hover{text-decoration:none}.select-menu-item.disabled,.select-menu-item[disabled],.select-menu-item[aria-disabled=true],.select-menu-item.disabled.selected{color:var(--color-fg-muted);cursor:default}.select-menu-item.disabled .description,.select-menu-item[disabled] .description,.select-menu-item[aria-disabled=true] .description,.select-menu-item.disabled.selected .description{color:var(--color-fg-muted)}.select-menu-item.disabled.opaque,.select-menu-item[disabled].opaque,.select-menu-item[aria-disabled=true].opaque,.select-menu-item.disabled.selected.opaque{opacity:.7}.select-menu-item.disabled .select-menu-item-gravatar,.select-menu-item[disabled] .select-menu-item-gravatar,.select-menu-item[aria-disabled=true] .select-menu-item-gravatar,.select-menu-item.disabled.selected .select-menu-item-gravatar{opacity:.5}.select-menu-item .octicon{vertical-align:middle}.select-menu-item .octicon-check,.select-menu-item .octicon-circle-slash,.select-menu-item input[type=radio]:not(:checked)+.octicon-check,.select-menu-item input[type=radio]:not(:checked)+.octicon-circle-slash{visibility:hidden}.select-menu-item.selected .octicon-circle-slash.select-menu-item-icon{color:var(--color-fg-muted) !important}.select-menu-item .octicon-circle-slash{color:var(--color-fg-muted)}.select-menu-item.excluded{background-color:var(--color-canvas-subtle)}.select-menu-item input[type=radio]{display:none}.select-menu-item:focus{outline:none}.select-menu-item:focus .octicon,.select-menu-item:hover .octicon{color:inherit !important}.select-menu-item:hover,.select-menu-item:hover.selected,.select-menu-item:hover.select-menu-action,.select-menu-item:hover .description-inline,.select-menu-item:focus,.select-menu-item:focus.selected,.select-menu-item:focus.select-menu-action,.select-menu-item:focus .description-inline,.select-menu-item.navigation-focus,.select-menu-item.navigation-focus.selected,.select-menu-item.navigation-focus.select-menu-action,.select-menu-item.navigation-focus .description-inline,.select-menu-item.navigation-focus[aria-checked=true],.select-menu-item[aria-checked=true]:focus,.select-menu-item[aria-checked=true]:hover,.select-menu-item[aria-selected=true]:hover,.select-menu-item[aria-selected=true]:focus,.select-menu-item[aria-selected=true].select-menu-action,.select-menu-item[aria-selected=true] .description-inline{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.select-menu-item:hover>.octicon,.select-menu-item:hover.selected>.octicon,.select-menu-item:hover.select-menu-action>.octicon,.select-menu-item:hover .description-inline>.octicon,.select-menu-item:focus>.octicon,.select-menu-item:focus.selected>.octicon,.select-menu-item:focus.select-menu-action>.octicon,.select-menu-item:focus .description-inline>.octicon,.select-menu-item.navigation-focus>.octicon,.select-menu-item.navigation-focus.selected>.octicon,.select-menu-item.navigation-focus.select-menu-action>.octicon,.select-menu-item.navigation-focus .description-inline>.octicon,.select-menu-item.navigation-focus[aria-checked=true]>.octicon,.select-menu-item[aria-checked=true]:focus>.octicon,.select-menu-item[aria-checked=true]:hover>.octicon,.select-menu-item[aria-selected=true]:hover>.octicon,.select-menu-item[aria-selected=true]:focus>.octicon,.select-menu-item[aria-selected=true].select-menu-action>.octicon,.select-menu-item[aria-selected=true] .description-inline>.octicon{color:var(--color-fg-on-emphasis)}.select-menu-item:hover .description,.select-menu-item:hover .description-warning,.select-menu-item:hover.selected .description,.select-menu-item:hover.selected .description-warning,.select-menu-item:hover.select-menu-action .description,.select-menu-item:hover.select-menu-action .description-warning,.select-menu-item:hover .description-inline .description,.select-menu-item:hover .description-inline .description-warning,.select-menu-item:focus .description,.select-menu-item:focus .description-warning,.select-menu-item:focus.selected .description,.select-menu-item:focus.selected .description-warning,.select-menu-item:focus.select-menu-action .description,.select-menu-item:focus.select-menu-action .description-warning,.select-menu-item:focus .description-inline .description,.select-menu-item:focus .description-inline .description-warning,.select-menu-item.navigation-focus .description,.select-menu-item.navigation-focus .description-warning,.select-menu-item.navigation-focus.selected .description,.select-menu-item.navigation-focus.selected .description-warning,.select-menu-item.navigation-focus.select-menu-action .description,.select-menu-item.navigation-focus.select-menu-action .description-warning,.select-menu-item.navigation-focus .description-inline .description,.select-menu-item.navigation-focus .description-inline .description-warning,.select-menu-item.navigation-focus[aria-checked=true] .description,.select-menu-item.navigation-focus[aria-checked=true] .description-warning,.select-menu-item[aria-checked=true]:focus .description,.select-menu-item[aria-checked=true]:focus .description-warning,.select-menu-item[aria-checked=true]:hover .description,.select-menu-item[aria-checked=true]:hover .description-warning,.select-menu-item[aria-selected=true]:hover .description,.select-menu-item[aria-selected=true]:hover .description-warning,.select-menu-item[aria-selected=true]:focus .description,.select-menu-item[aria-selected=true]:focus .description-warning,.select-menu-item[aria-selected=true].select-menu-action .description,.select-menu-item[aria-selected=true].select-menu-action .description-warning,.select-menu-item[aria-selected=true] .description-inline .description,.select-menu-item[aria-selected=true] .description-inline .description-warning{color:var(--color-fg-on-emphasis)}.select-menu-item:hover.disabled,.select-menu-item[disabled]:hover,.select-menu-item[aria-disabled=true]:hover,.select-menu-item[aria-selected=true].disabled,.select-menu-item.navigation-focus.disabled{color:var(--color-fg-muted);background-color:var(--color-canvas-overlay)}.select-menu-item:hover.disabled .description,.select-menu-item[disabled]:hover .description,.select-menu-item[aria-disabled=true]:hover .description,.select-menu-item[aria-selected=true].disabled .description,.select-menu-item.navigation-focus.disabled .description{color:var(--color-fg-muted)}.select-menu-item>.octicon-dash{display:none}.select-menu-item[aria-checked=mixed]>.octicon-check{display:none}.select-menu-item[aria-checked=mixed]>.octicon-dash{display:block}.select-menu-item input:checked+.octicon-check{color:inherit;visibility:visible}details-menu .select-menu-item[aria-checked=true],details-menu .select-menu-item[aria-selected=true],.select-menu-item.selected{color:var(--color-fg-default)}details-menu .select-menu-item[aria-checked=true] .description,details-menu .select-menu-item[aria-selected=true] .description,.select-menu-item.selected .description{color:var(--color-fg-muted)}details-menu .select-menu-item[aria-checked=true]>.octicon,details-menu .select-menu-item[aria-selected=true]>.octicon,.select-menu-item.selected>.octicon{color:var(--color-fg-default)}details-menu .select-menu-item[aria-checked=true] .octicon-check,details-menu .select-menu-item[aria-checked=true] .octicon-circle-slash,details-menu .select-menu-item[aria-selected=true] .octicon-check,details-menu .select-menu-item[aria-selected=true] .octicon-circle-slash,.select-menu-item.selected .octicon-check,.select-menu-item.selected .octicon-circle-slash{color:inherit;visibility:visible}details-menu .select-menu-item[aria-checked=true] .select-menu-item-text .octicon-x,details-menu .select-menu-item[aria-selected=true] .select-menu-item-text .octicon-x,.select-menu-item.selected .select-menu-item-text .octicon-x{display:block;color:inherit}.select-menu.label-select-menu .select-menu-item:active{background-color:transparent !important}.select-menu-item:hover .Label,.select-menu-item:focus .Label{color:inherit;border-color:currentColor}.select-menu-item a{color:inherit;text-decoration:none}.select-menu-item .hidden-select-button-text{display:none}.select-menu-item .css-truncate-target{max-width:100%}.select-menu-item-icon{float:left;margin-left:-20px}form.select-menu-item>div:first-child{display:none !important}.select-menu-list:last-child .select-menu-item:last-child,.select-menu-item.last-visible{border-bottom:0;border-radius:0 0 6px 6px}.select-menu-action{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-default)}.select-menu-action>.octicon{color:inherit}.select-menu-action:hover{color:var(--color-accent-fg)}.select-menu-no-results{display:none;padding:9px;color:var(--color-fg-muted);cursor:auto}.select-menu-list.filterable-empty .select-menu-no-results,.select-menu-no-results:only-child{display:block}.select-menu-button-gravatar,.select-menu-item-gravatar{width:20px;overflow:hidden;line-height:0}.select-menu-button-gravatar img,.select-menu-item-gravatar img{display:inline-block;width:20px;height:20px;border-radius:6px}.select-menu-item-gravatar{float:left;width:20px;height:20px;margin-right:8px;border-radius:6px}.select-menu-button-gravatar{float:left;margin-right:5px}.select-menu-item-text{display:block;text-align:left}.select-menu-item-text .description{display:block;max-width:265px;font-size:12px;color:var(--color-fg-muted)}.select-menu-item-text .description-inline{font-size:12px;color:var(--color-fg-muted)}.select-menu-item-text .description-warning{color:var(--color-danger-fg)}.select-menu-item-text mark{font-weight:var(--base-text-weight-semibold, 600);color:inherit;background-color:inherit}.select-menu-item-heading{display:block;margin-top:0;margin-bottom:0;font-size:14px;font-weight:var(--base-text-weight-semibold, 600)}.select-menu-item-heading .description{display:inline;font-weight:var(--base-text-weight-normal, 400)}.select-menu-new-item-form{display:none}.select-menu-new-item-form .octicon{color:var(--color-accent-fg)}.table-list{display:table;width:100%;color:var(--color-fg-muted);table-layout:fixed;border-bottom:1px solid var(--color-border-default)}.table-list ol{list-style-type:decimal}.table-list-bordered{border-bottom-color:var(--color-border-default)}.table-list-bordered .table-list-cell:first-child{border-left:1px solid var(--color-border-default)}.table-list-bordered .table-list-cell:last-child{border-right:1px solid var(--color-border-default)}.table-list-item{position:relative;display:table-row;list-style:none}.table-list-item.unread .table-list-cell:first-child{box-shadow:2px 0 0 var(--color-accent-emphasis) inset}.table-list-cell{position:relative;display:table-cell;padding:8px 10px;font-size:12px;vertical-align:top;border-top:1px solid var(--color-border-default)}.table-list-cell.flush-left{padding-left:0}.table-list-cell.flush-right{padding-right:0}.table-list-header{position:relative;margin-top:20px;background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default);border-radius:6px 6px 0 0}.table-list-header::before{display:table;content:""}.table-list-header::after{display:table;clear:both;content:""}.table-list-header .btn-link{position:relative;display:inline-block;padding-top:13px;padding-bottom:13px;font-weight:var(--base-text-weight-normal, 400)}.table-list-heading{margin-left:10px}.table-list-header-meta{display:inline-block;padding-top:13px;padding-bottom:13px;color:var(--color-fg-muted)}.table-list-header-toggle h4{padding:12px 0}.table-list-filters:first-child .table-list-header-toggle:first-child{padding-left:16px}.table-list-header-toggle.states .selected{font-weight:var(--base-text-weight-semibold, 600)}.table-list-header-toggle .btn-link{color:var(--color-fg-muted)}.table-list-header-toggle .btn-link .octicon{margin-right:4px}.table-list-header-toggle .btn-link:hover{color:var(--color-fg-default);text-decoration:none}.table-list-header-toggle .btn-link.selected,.table-list-header-toggle .btn-link.selected:hover{color:var(--color-fg-default)}.table-list-header-toggle .btn-link+.btn-link{margin-left:10px}.table-list-header-toggle .btn-link:disabled,.table-list-header-toggle .btn-link.disabled{pointer-events:none;opacity:.5}.table-list-header-toggle .select-menu{position:relative}.table-list-header-toggle .select-menu-item[aria-checked=true],.table-list-header-toggle .select-menu-item.selected{font-weight:var(--base-text-weight-semibold, 600)}.table-list-header-toggle .select-menu-button{padding-right:15px;padding-left:15px}.table-list-header-toggle .select-menu-button:hover,.table-list-header-toggle .select-menu-button.selected,.table-list-header-toggle .select-menu-button.selected:hover{color:var(--color-fg-default)}.table-list-header-toggle .select-menu-modal-holder{right:10px}.table-list-header-toggle .select-menu-modal-holder .select-menu-modal{margin-top:-1px}.table-list-header-next{margin-top:20px;margin-bottom:-1px}.table-list-header-next .table-list-header-select-all{padding-left:14px}.table-list-header-next .select-all-dropdown{padding-top:10px;padding-bottom:10px}.table-list-triage{display:none}.triage-mode .table-list-filters{display:none !important}.triage-mode .table-list-triage{display:block}.breadcrumb{font-size:16px;color:var(--color-fg-muted)}.breadcrumb .separator{white-space:pre-wrap}.breadcrumb .separator::before,.breadcrumb .separator::after{content:" "}.breadcrumb strong.final-path{color:var(--color-fg-default)}.capped-cards{list-style:none}.capped-card-content{display:block;background:var(--color-canvas-subtle)}.capped-card-content::before{display:table;content:""}.capped-card-content::after{display:table;clear:both;content:""}.details-collapse .collapse{position:relative;display:none;height:0;overflow:hidden;transition:height .35s ease-in-out}.details-collapse.open .collapse{display:block;height:auto;overflow:visible}.collapsible-sidebar-widget-button{display:flex;padding:0;align-items:center;background-color:transparent;border:0;justify-content:space-between}.collapsible-sidebar-widget-indicator{transition:transform .25s;transform:translate(0, 0) translate3d(0, 0, 0)}.collapsible-sidebar-widget-loader{display:none;visibility:hidden;opacity:0;transition:opacity .25s;animation-play-state:paused}.collapsible-sidebar-widget-content{width:100%;max-height:0;overflow:hidden;opacity:0;transition:max-height .25s ease-in-out,opacity .25s ease-in-out}.collapsible-sidebar-widget-loading .collapsible-sidebar-widget-indicator{display:none}.collapsible-sidebar-widget-loading .collapsible-sidebar-widget-loader{display:block;visibility:visible;opacity:1;animation-play-state:running}.collapsible-sidebar-widget-active .collapsible-sidebar-widget-content{max-height:100%;overflow:visible;opacity:1}.collapsible-sidebar-widget-active .collapsible-sidebar-widget-indicator{display:block;transform:rotate(180deg)}.collapsible-sidebar-widget-active .collapsible-sidebar-widget-loader{display:none;visibility:hidden;opacity:0}.collapsible-sidebar-widget-active .collapsible-sidebar-widget-active-hidden{display:none;opacity:0}.comment .email-format{line-height:1.5}.previewable-edit .previewable-comment-form{display:none}.previewable-edit .previewable-comment-form::before{display:table;content:""}.previewable-edit .previewable-comment-form::after{display:table;clear:both;content:""}.previewable-edit .previewable-comment-form .tabnav-tabs{display:inline-block}.previewable-edit .previewable-comment-form .form-actions{float:right;margin-right:8px;margin-bottom:8px}.previewable-edit.is-comment-editing .timeline-comment-header{display:none !important}.is-comment-editing .previewable-comment-form{display:block}.is-comment-editing .timeline-comment-actions,.is-comment-editing .edit-comment-hide{display:none}.is-comment-loading .previewable-comment-form{opacity:.5}.comment-show-stale{display:none}.is-comment-stale .comment-show-stale{display:block}.comment-body{width:100%;padding:16px;overflow:visible;font-size:14px;color:var(--color-fg-default)}.comment-body .highlight{overflow:visible !important;background-color:transparent}.comment-form-textarea{width:100%;max-width:100%;height:100px;min-height:100px;margin:0;line-height:1.6}.comment-form-textarea.dragover{border:solid 1px var(--color-accent-emphasis)}.hide-reaction-suggestion:hover::before,.hide-reaction-suggestion:hover::after,.hide-reaction-suggestion:active::before,.hide-reaction-suggestion:active::after{display:none}.reaction-suggestion[data-reaction-suggestion-message]:hover::before,.reaction-suggestion[data-reaction-suggestion-message]:hover::after{display:inline-block}.reaction-suggestion[data-reaction-suggestion-message]::before,.reaction-suggestion[data-reaction-suggestion-message]::after{display:inline-block;text-decoration:none;animation-name:tooltip-appear;animation-duration:.1s;animation-fill-mode:forwards;animation-timing-function:ease-in;animation-delay:0s}.reaction-suggestion[data-reaction-suggestion-message]::after{content:attr(data-reaction-suggestion-message)}.discussion-topic-header{position:relative;padding:8px;word-wrap:break-word}.comment-form-error{padding:16px 8px;margin:8px;color:var(--color-fg-default);background-color:var(--color-danger-subtle);border:1px solid var(--color-danger-emphasis);border-radius:6px}.email-format{line-height:1.5em !important}.email-format div{white-space:pre-wrap}.email-format .email-hidden-reply{display:none;white-space:pre-wrap}.email-format .email-hidden-reply.expanded{display:block}.email-format .email-quoted-reply,.email-format .email-signature-reply{padding:0 16px;margin:16px 0;color:var(--color-fg-muted);border-left:4px solid var(--color-border-default)}.email-format .email-hidden-toggle a{display:inline-block;height:12px;padding:0 8px;font-size:12px;font-weight:var(--base-text-weight-semibold, 600);line-height:6px;color:var(--color-fg-default);text-decoration:none;vertical-align:middle;background:var(--color-neutral-muted);border-radius:1px}.email-format .email-hidden-toggle a:hover{background-color:var(--color-accent-muted)}.email-format .email-hidden-toggle a:active{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.comment-email-format div{white-space:normal}.comment-email-format .email-hidden-reply{display:none;white-space:normal}.comment-email-format .email-hidden-reply.expanded{display:block}.comment-email-format blockquote,.comment-email-format p{margin:0}.locked-conversation .write-tab,.locked-conversation .preview-tab{color:#c6cbd1}.write-tab:focus,.preview-tab:focus{outline-offset:-6px !important}.manual-file-chooser-transparent{min-height:0;overflow:hidden;opacity:.01}.manual-file-chooser-transparent::-webkit-file-upload-button{cursor:pointer}.manual-file-chooser-transparent:focus{opacity:1 !important}.markdown-body .highlight:hover .zeroclipboard-container,.markdown-body .snippet-clipboard-content:hover .zeroclipboard-container{display:block;animation:fade-in 200ms both}.markdown-body .highlight .zeroclipboard-container,.markdown-body .snippet-clipboard-content .zeroclipboard-container{display:none;animation:fade-out 200ms both}.rich-diff clipboard-copy{display:none}.commit-form{position:relative;padding:16px;border:1px solid var(--color-border-default);border-radius:6px}.commit-form::after,.commit-form::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.commit-form::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.commit-form::before{background-color:var(--color-border-default)}.commit-form .input-block{margin-top:8px;margin-bottom:8px}.commit-form-avatar{float:left;margin-left:-64px;border-radius:6px}.commit-form-actions::before{display:table;content:""}.commit-form-actions::after{display:table;clear:both;content:""}.commit-form-actions .BtnGroup{margin-right:4px}.merge-commit-message{resize:vertical}@media(max-width: 768px){.commit-form::after,.commit-form::before{display:none !important}}.commit-sha{padding:.2em .4em;font-size:90%;font-weight:var(--base-text-weight-normal, 400);background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-muted);border-radius:.2em}.commit .commit-title,.commit .commit-title a{color:var(--color-fg-default)}.commit .commit-title.blank,.commit .commit-title.blank a{color:var(--color-fg-muted)}.commit .commit-title .issue-link{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-accent-fg)}.commit .sha-block,.commit .sha{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px}.commit.open .commit-desc{display:block}.commit-link{font-weight:var(--base-text-weight-normal, 400);color:var(--color-accent-fg)}.commit-ref{position:relative;display:inline-block;padding:0 4px;font:.85em/1.8 ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;color:var(--color-fg-muted);white-space:nowrap;background-color:var(--color-accent-subtle);border-radius:6px}.commit-ref .user{color:var(--color-accent-fg)}a.commit-ref:hover{color:var(--color-accent-fg);text-decoration:none;background-color:var(--color-accent-subtle)}.commit-desc{display:none}.commit-desc pre{max-width:700px;margin-top:8px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:11px;line-height:1.45;color:var(--color-fg-default);white-space:pre-wrap}.commit-desc+.commit-branches{padding-top:8px;margin-top:2px;border-top:solid 1px var(--color-border-subtle)}.commit-author-section{color:var(--color-fg-default)}.commit-author-section span.user-mention{font-weight:var(--base-text-weight-normal, 400)}.commit-tease-sha{display:inline-block;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:90%;color:var(--color-fg-default)}.commits-list-item[aria-selected=true],.commits-list-item.navigation-focus{background:#f6fbff}.commits-list-item .commit-title{margin:0;font-size:16px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default)}.commits-list-item .commit-meta{margin-top:1px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.commits-list-item .status .octicon{height:14px;line-height:14px}.commits-list-item .commit-author{color:var(--color-fg-muted)}.commits-list-item .octicon-arrow-right{margin:0 4px}.commits-list-item .btn-outline{margin-top:2px}.commits-list-item .commit-desc pre{margin-top:4px;margin-bottom:8px;color:var(--color-fg-muted)}.commits-list-item .commit-desc pre a{word-break:break-word}.commit-indicator{margin-left:4px}.commit-links-group{margin-right:4px}.commits-list-item+.commits-list-item{border-top:1px solid var(--color-border-default)}.full-commit{padding:8px 8px 0;margin:8px 0;font-size:14px;background:var(--color-neutral-subtle);border:1px solid var(--color-border-default);border-radius:6px}.full-commit:first-child{margin-top:0}.full-commit div.commit-title{font-size:16px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default)}.full-commit .branches-list{display:inline;margin-right:8px;margin-left:2px;vertical-align:middle;list-style:none}.full-commit .branches-list li{display:inline-block;padding-left:4px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default)}.full-commit .branches-list li::before{padding-right:4px;font-weight:var(--base-text-weight-normal, 400);content:"+"}.full-commit .branches-list li:first-child{padding-left:0}.full-commit .branches-list li:first-child::before{padding-right:0;content:""}.full-commit .branches-list li.loading{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.full-commit .branches-list li.pull-request{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.full-commit .branches-list li.pull-request::before{margin-left:-8px;content:""}.full-commit .branches-list li.pull-request-error{margin-bottom:-1px}.full-commit .branches-list li a{color:inherit}.full-commit .commit-meta{padding:8px;margin-right:-8px;margin-left:-8px;background:var(--color-canvas-default);border-top:1px solid var(--color-border-default);border-bottom-right-radius:6px;border-bottom-left-radius:6px}.full-commit .sha-block{margin-left:16px;font-size:12px;line-height:24px;color:var(--color-fg-muted)}.full-commit .sha-block>.sha{color:var(--color-fg-default)}.full-commit .sha-block>a{color:var(--color-fg-default);text-decoration:none;border-bottom:1px dotted var(--color-border-muted)}.full-commit .sha-block>a:hover{border-bottom:1px solid var(--color-border-default)}.full-commit .commit-desc{display:block;margin:-4px 0 8px}.full-commit .commit-desc pre{max-width:100%;overflow:visible;font-size:13px;word-wrap:break-word}.commit-branches{font-size:12px;color:var(--color-fg-muted);vertical-align:middle}.commit-branches .octicon{vertical-align:middle}.commit-build-statuses{position:relative;display:inline-block;text-align:left}.commit-build-statuses .dropdown-menu{min-width:362.6666666667px;max-width:544px;padding-top:0;padding-bottom:0}.commit-build-statuses .dropdown-menu .merge-status-list{max-height:170px;border-bottom:0}.commit-build-statuses .dropdown-menu-w,.commit-build-statuses .dropdown-menu-e{top:-11px}.commit-build-statuses .merge-status-item:last-child{border-radius:0 0 6px 6px}.dropdown-signed-commit .dropdown-menu{width:260px;margin-top:8px;font-size:14px;line-height:1.4;white-space:normal}.dropdown-signed-commit .dropdown-menu::after{border-bottom-color:var(--color-canvas-subtle)}.dropdown-signed-commit .dropdown-menu-w{top:-28px;margin-top:0}.dropdown-signed-commit .dropdown-menu-w::after{border-bottom-color:transparent;border-left-color:var(--color-canvas-subtle)}.signed-commit-header{line-height:1.3;white-space:normal;border-collapse:separate;background-color:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-default);border-top-left-radius:6px;border-top-right-radius:6px}.signed-commit-header .octicon-verified{color:var(--color-success-fg)}.signed-commit-header .octicon-unverified{color:var(--color-fg-muted)}.signed-commit-footer{font-size:12px;line-height:1.5}.signed-commit-cert-info{margin-bottom:4px}.signed-commit-cert-info td{vertical-align:top}.signed-commit-cert-info td:first-child{width:44px;padding-right:12px}.signed-commit-badge{display:inline-block;padding:1px 4px;font-size:12px;color:var(--color-fg-muted);vertical-align:middle;-webkit-user-select:none;user-select:none;background:none;border:1px solid var(--color-border-default);border-radius:6px}.signed-commit-badge:hover{text-decoration:none;border-color:var(--color-neutral-muted)}.signed-commit-badge.verified{color:var(--color-success-fg)}.signed-commit-badge.verified:hover{border-color:var(--color-success-emphasis)}.signed-commit-badge.unverified{color:var(--color-attention-fg)}.signed-commit-badge.unverified:hover{border-color:var(--color-attention-emphasis)}.signed-commit-badge-small{margin-top:-2px;margin-right:4px}.signed-commit-badge-medium{padding:4px 8px;font-size:12px;border-radius:6px}.signed-commit-badge-large{padding:4px 12px;margin-right:8px;font-size:14px;line-height:20px;border-radius:6px}.signed-commit-verified-label{color:#1e7e34}.signed-commit-signer-name{font-size:14px;text-align:left}.signed-commit-signer-name .signer{display:block;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default)}.table-of-contents{margin:16px 0}.table-of-contents li{padding:8px 0;list-style-type:none}.table-of-contents li+li{border-top:1px solid var(--color-border-muted)}.table-of-contents li>.octicon{margin-right:4px}.table-of-contents .toc-diff-stats{padding-left:16px;line-height:26px}.table-of-contents .toc-diff-stats .octicon{float:left;margin-top:4px;margin-left:-16px;color:#c6cbd1}.table-of-contents .toc-diff-stats .btn-link{font-weight:var(--base-text-weight-semibold, 600)}.table-of-contents .toc-diff-stats+.content{padding-top:4px}.table-of-contents .octicon-diff-removed{color:var(--color-danger-fg)}.table-of-contents .octicon-diff-renamed{color:var(--color-fg-muted)}.table-of-contents .octicon-diff-modified{color:var(--color-attention-fg)}.table-of-contents .octicon-diff-added{color:var(--color-success-fg)}.copyable-terminal{position:relative;padding:8px 55px 8px 8px;background-color:var(--color-canvas-subtle);border-radius:6px}.copyable-terminal-content{overflow:auto}.copyable-terminal-button{position:absolute;top:5px;right:5px}.copyable-terminal-button .zeroclipboard-button{float:right}.copyable-terminal-button .zeroclipboard-button .octicon{padding-left:1px;margin:0 auto}.blob-wrapper{overflow-x:auto;overflow-y:hidden}.blob-wrapper table tr:nth-child(2n){background-color:transparent}.page-edit-blob.height-full .CodeMirror{height:300px}.page-edit-blob.height-full .CodeMirror,.page-edit-blob.height-full .CodeMirror-scroll{display:flex;flex-direction:column;flex:1 1 auto}.blob-wrapper-embedded{max-height:240px;overflow-y:auto}.diff-table{width:100%;border-collapse:separate}.diff-table .blob-code.blob-code-inner{padding-left:22px}.diff-table .line-comments{padding:10px;vertical-align:top;border-top:1px solid var(--color-border-default)}.diff-table .line-comments:first-child+.empty-cell{border-left-width:1px}.diff-table tr:not(:last-child) .line-comments{border-top:1px solid var(--color-border-default);border-bottom:1px solid var(--color-border-default)}.diff-view .blob-code-marker-context::before,.diff-view .blob-code-marker-injected_context::before,.diff-view .blob-code-marker-addition::before,.diff-view .blob-code-marker-deletion::before{top:4px}.diff-view .line-alert,.diff-table .line-alert{position:absolute;left:-60px;margin:2px}.comment-body .diff-view .line-alert{left:0}.blob-num{position:relative;width:1%;min-width:50px;padding-right:10px;padding-left:10px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px;line-height:20px;color:var(--color-fg-subtle);text-align:right;white-space:nowrap;vertical-align:top;cursor:pointer;-webkit-user-select:none;user-select:none}.blob-num:hover{color:var(--color-fg-default)}.blob-num::before{content:attr(data-line-number)}.blob-num.non-expandable{cursor:default}.blob-num.non-expandable:hover{color:var(--color-fg-subtle)}.blob-num-hidden::before{visibility:hidden}.blob-code{position:relative;padding-right:10px;padding-left:10px;line-height:20px;vertical-align:top}.blob-code-inner{display:table-cell;overflow:visible;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px;color:var(--color-fg-default);word-wrap:anywhere;white-space:pre-wrap}.blob-code-inner .x-first{border-top-left-radius:.2em;border-bottom-left-radius:.2em}.blob-code-inner .x-last{border-top-right-radius:.2em;border-bottom-right-radius:.2em}.blob-code-inner.highlighted,.blob-code-inner .highlighted{background-color:var(--color-attention-subtle);box-shadow:inset 2px 0 0 var(--color-attention-muted)}.blob-code-inner::selection,.blob-code-inner *::selection{background-color:var(--color-accent-muted)}.blob-code-inner.blob-code-addition,.blob-code-inner.blob-code-deletion{position:relative;padding-left:22px !important}.blob-code-marker::before{position:absolute;top:1px;left:8px;padding-right:8px;content:attr(data-code-marker)}.blob-code-context,.blob-code-addition,.blob-code-deletion{padding-left:22px}.blob-code-marker-addition::before{position:absolute;top:1px;left:8px;content:"+ "}.blob-code-marker-deletion::before{position:absolute;top:1px;left:8px;content:"- "}.blob-code-marker-context::before{position:absolute;top:1px;left:8px;content:" "}.blob-code-marker-injected_context::before{position:absolute;top:1px;left:8px;content:" "}.soft-wrap .diff-table{table-layout:fixed}.soft-wrap .blob-code{padding-left:18px;text-indent:0}.soft-wrap .blob-code-inner{white-space:pre-wrap}.soft-wrap .no-nl-marker{display:none}.soft-wrap .add-line-comment{margin-top:0;margin-left:-24px}.soft-wrap .blob-code-context,.soft-wrap .blob-code-addition,.soft-wrap .blob-code-deletion{padding-left:22px;text-indent:0}.blob-num-hunk,.blob-code-hunk,.blob-num-expandable{color:var(--color-fg-muted);vertical-align:middle}.blob-num-hunk,.blob-num-expandable{background-color:var(--color-diff-blob-hunk-num-bg)}.blob-code-hunk{padding-top:4px;padding-bottom:4px;background-color:var(--color-accent-subtle);border-width:1px 0}.blob-expanded .blob-num:not(.blob-num-context-outside-diff),.blob-expanded .blob-code:not(.blob-code-context){background-color:var(--color-canvas-subtle)}.blob-expanded+tr.show-top-border:not(.blob-expanded) .blob-num,.blob-expanded+tr.show-top-border:not(.blob-expanded) .blob-code{border-top:1px solid var(--color-border-muted)}.blob-expanded tr.show-top-border .blob-num-hunk,.blob-expanded tr.show-top-border .blob-num{border-top:1px solid var(--color-border-muted)}tr.show-top-border+.blob-expanded .blob-num,tr.show-top-border+.blob-expanded .blob-code{border-top:1px solid var(--color-border-muted)}.blob-num-expandable{width:auto;padding:0;font-size:12px;text-align:center}.blob-num-expandable .directional-expander{display:block;width:auto;height:auto;margin-right:-1px;color:var(--color-diff-blob-expander-icon);cursor:pointer}.blob-num-expandable .single-expander{padding-top:4px;padding-bottom:4px}.blob-num-expandable .directional-expander:hover{color:var(--color-fg-on-emphasis);text-shadow:none;background-color:var(--color-accent-emphasis);border-color:var(--color-accent-emphasis)}.blob-code-addition{background-color:var(--color-diff-blob-addition-line-bg);outline:1px dotted transparent}.blob-code-addition .x{color:var(--color-diff-blob-addition-fg);background-color:var(--color-diff-blob-addition-word-bg)}.blob-num-addition{color:var(--color-diff-blob-addition-num-text);background-color:var(--color-diff-blob-addition-num-bg);border-color:var(--color-success-emphasis)}.blob-num-addition:hover{color:var(--color-fg-default)}.blob-code-deletion{background-color:var(--color-diff-blob-deletion-line-bg);outline:1px dashed transparent}.blob-code-deletion .x{color:var(--color-diff-blob-deletion-fg);background-color:var(--color-diff-blob-deletion-word-bg)}.blob-num-deletion{color:var(--color-diff-blob-deletion-num-text);background-color:var(--color-diff-blob-deletion-num-bg);border-color:var(--color-danger-emphasis)}.blob-num-deletion:hover{color:var(--color-fg-default)}.is-selecting{cursor:ns-resize !important}.is-selecting .blob-num{cursor:ns-resize !important}.is-selecting .add-line-comment,.is-selecting a{pointer-events:none;cursor:ns-resize !important}.is-selecting .is-hovered .add-line-comment{opacity:0}.is-selecting.file-diff-split{cursor:nwse-resize !important}.is-selecting.file-diff-split .blob-num{cursor:nwse-resize !important}.is-selecting.file-diff-split .empty-cell,.is-selecting.file-diff-split .add-line-comment,.is-selecting.file-diff-split a{pointer-events:none;cursor:nwse-resize !important}.selected-line{position:relative}.selected-line::after{position:absolute;top:0;left:0;display:block;width:100%;height:100%;box-sizing:border-box;pointer-events:none;content:"";background:var(--color-attention-subtle);mix-blend-mode:var(--color-diff-blob-selected-line-highlight-mix-blend-mode)}.selected-line.selected-line-top::after{border-top:1px solid var(--color-attention-muted)}.selected-line.selected-line-bottom::after{border-bottom:1px solid var(--color-attention-muted)}.selected-line:first-child::after,.selected-line.selected-line-left::after{border-left:1px solid var(--color-attention-muted)}.selected-line:last-child::after,.selected-line.selected-line-right::after{border-right:1px solid var(--color-attention-muted)}.is-commenting .selected-line.blob-code::before{position:absolute;top:0;left:-1px;display:block;width:4px;height:100%;content:"";background:var(--color-accent-emphasis)}.add-line-comment{position:relative;z-index:1;float:left;width:22px;height:22px;margin:-2px -10px -2px -32px;line-height:21px;color:var(--color-fg-on-emphasis);text-align:center;text-indent:0;cursor:pointer;background-color:var(--color-accent-emphasis);border-radius:6px;box-shadow:var(--color-shadow-medium);opacity:0;transition:transform .1s ease-in-out;transform:scale(0.8, 0.8)}.add-line-comment:hover{transform:scale(1, 1)}.is-hovered .add-line-comment,.add-line-comment:focus{opacity:1}.add-line-comment .octicon{vertical-align:text-top;pointer-events:none}.add-line-comment.octicon-check{background:#333;opacity:1}.inline-comment-form{border:1px solid #dfe2e5;border-radius:6px}.timeline-inline-comments{width:100%;table-layout:fixed}.timeline-inline-comments .inline-comments,.show-inline-notes .inline-comments{display:table-row}.inline-comments{display:none}.inline-comments .line-comments+.blob-num{border-left-width:1px}.inline-comments .timeline-comment{margin-bottom:10px}.inline-comments .inline-comment-form,.inline-comments .inline-comment-form-container{max-width:780px}.comment-holder{max-width:780px}.comment-holder+.comment-holder{margin-top:16px}.line-comments+.line-comments,.empty-cell+.line-comments{border-left:1px solid var(--color-border-muted)}.inline-comment-form-container .inline-comment-form-box,.inline-comment-form-container.open .inline-comment-form-actions{display:none}.inline-comment-form-container .inline-comment-form-actions,.inline-comment-form-container.open .inline-comment-form-box{display:block}body.full-width .container,body.full-width .container-lg:not(.markdown-body),body.full-width .container-xl{width:100%;max-width:none;padding-right:20px;padding-left:20px}body.full-width .repository-content{width:100%}body.full-width .new-pr-form{max-width:980px}.file-diff-split{table-layout:fixed}.file-diff-split .blob-code+.blob-num{border-left:1px solid var(--color-border-muted)}.file-diff-split .blob-code-inner{white-space:pre-wrap}.file-diff-split .empty-cell{cursor:default;background-color:var(--color-neutral-subtle);border-right-color:var(--color-border-muted)}@media(max-width: 1280px){.file-diff-split .write-selected .comment-form-head.tabnav:not(.CommentBox-header){margin-bottom:80px !important}.file-diff-split .tabnav:not(.CommentBox-header) markdown-toolbar{position:absolute;top:47px;right:0;left:0;height:64px;align-items:center !important}}@media(min-width: 1280px){.file-diff-split .write-selected .comment-form-head.tabnav:not(.CommentBox-header) .tabnav-tabs{align-self:end}}.submodule-diff-stats .octicon-diff-removed{color:var(--color-danger-fg)}.submodule-diff-stats .octicon-diff-renamed{color:var(--color-fg-muted)}.submodule-diff-stats .octicon-diff-modified{color:var(--color-attention-fg)}.submodule-diff-stats .octicon-diff-added{color:var(--color-success-fg)}.BlobToolbar{left:-17px}.BlobToolbar-dropdown{margin-left:-2px}.pl-token:hover,.pl-token.active{cursor:pointer;background:var(--color-attention-muted)}.discussion-timeline{position:relative;float:left}.discussion-timeline::before{position:absolute;top:0;bottom:0;left:72px;z-index:0;display:block;width:2px;content:"";background-color:var(--color-border-default)}.discussion-sidebar-item{padding-top:16px;font-size:12px}.discussion-sidebar-item .btn .octicon{margin-right:0}.discussion-sidebar-item .muted-icon{color:var(--color-fg-muted)}.discussion-sidebar-item .muted-icon:hover{color:var(--color-accent-fg);text-decoration:none;cursor:pointer}.discussion-sidebar-item+.discussion-sidebar-item{margin-top:16px;border-top:1px solid var(--color-border-muted)}.discussion-sidebar-item .select-menu{position:relative}.discussion-sidebar-item .select-menu-modal-holder{top:25px;right:-1px;left:auto}.discussion-sidebar-heading{margin-bottom:8px;font-size:12px;color:var(--color-fg-muted)}.discussion-sidebar-toggle{padding:4px 0;margin:-4px 0 4px}.discussion-sidebar-toggle .octicon{float:right;color:var(--color-fg-muted)}.discussion-sidebar-toggle:hover{color:var(--color-accent-fg);text-decoration:none;cursor:pointer}.discussion-sidebar-toggle:hover .octicon{color:inherit}button.discussion-sidebar-toggle{display:block;width:100%;font-weight:var(--base-text-weight-semibold, 600);text-align:left;background:none;border:0}.sidebar-progress-bar .progress-bar{height:8px;margin-bottom:2px;border-radius:6px}.sidebar-assignee .css-truncate-target{max-width:110px}.sidebar-assignee .assignee{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted);vertical-align:middle}.sidebar-assignee .assignee:hover{color:var(--color-accent-fg);text-decoration:none}.sidebar-assignee .reviewers-status-icon{width:14px}.sidebar-assignee .octicon{margin-top:2px}.thread-subscribe-form.is-error .thread-subscribe-button{color:var(--color-danger-fg)}.sidebar-notifications{position:relative}.sidebar-notifications .thread-subscription-status{padding:0;margin:0;border:0}.sidebar-notifications .thread-subscription-status .thread-subscribe-form{display:block}.sidebar-notifications .thread-subscription-status .reason{padding:0;margin:4px 0 0}.sidebar-notifications .thread-subscription-status .btn-sm{display:block;width:100%}.participation .participant-avatar{float:left;margin:4px 0 0 4px}.participation a{color:var(--color-fg-muted)}.participation a:hover{color:var(--color-accent-fg);text-decoration:none}.participation-avatars{margin-left:-4px}.participation-avatars::before{display:table;content:""}.participation-avatars::after{display:table;clear:both;content:""}.participation-more{float:left;margin:8px 4px 0}.inline-comment-form .form-actions,.timeline-new-comment .form-actions{padding:0 8px 8px}.inline-comment-form::before{display:table;content:""}.inline-comment-form::after{display:table;clear:both;content:""}.inline-comment-form .tabnav-tabs{display:inline-block}.inline-comment-form .form-actions{float:right}.gh-header-actions{float:right;margin-top:4px}.gh-header-actions .btn-sm{float:left;margin-left:4px}.gh-header-actions .btn-sm .octicon{margin-right:0}.gh-header{background-color:var(--color-canvas-default)}.gh-header .gh-header-sticky{height:1px}.gh-header .gh-header-sticky .meta{font-size:12px}.gh-header .gh-header-sticky .sticky-content,.gh-header .gh-header-sticky .gh-header-shadow{display:none}.gh-header .gh-header-sticky.is-stuck{z-index:110;height:60px}.gh-header .gh-header-sticky.is-stuck .sticky-content{display:block}.gh-header .gh-header-sticky.is-stuck .css-truncate-target{max-width:150px}.gh-header .gh-header-sticky.is-stuck+.gh-header-shadow{position:fixed;top:0;right:0;left:0;z-index:109;display:block;height:60px;content:"";background-color:var(--color-canvas-default);border-bottom:1px solid var(--color-border-default)}.gh-header .gh-header-edit{display:none}.gh-header .gh-header-meta .base-ref{display:inline-block}.gh-header .gh-header-meta .commit-ref-dropdown{display:none}.gh-header.open .gh-header-show{display:none}.gh-header.open .gh-header-edit{display:block}.gh-header.open .gh-header-meta .base-ref{display:none}.gh-header.open .gh-header-meta .commit-ref-dropdown{display:inline-block;margin-top:-4px;vertical-align:top}.gh-header-title{margin-right:150px;margin-bottom:0;font-weight:var(--base-text-weight-normal, 400);line-height:1.125;word-wrap:break-word}.gh-header-no-access .gh-header-title{margin-right:0}.gh-header-number{font-weight:var(--base-text-weight-light, 300);color:var(--color-fg-muted)}.gh-header-meta{padding-bottom:8px;margin-top:8px;font-size:14px;color:var(--color-fg-muted);border-bottom:1px solid var(--color-border-default)}.gh-header.issue .gh-header-meta{margin-bottom:16px}.gh-header.pull .gh-header-meta{padding-bottom:0;border-bottom:0}.gh-header-meta .commit-ref .css-truncate-target,.gh-header-meta .commit-ref:hover .css-truncate-target{max-width:80vw}.gh-header-meta .State{margin-right:8px}.gh-header-meta .avatar{float:left;margin-top:-4px;margin-right:4px}.timeline-comment-wrapper{position:relative;padding-left:56px;margin-top:16px;margin-bottom:16px}.timeline-comment-avatar{float:left;margin-left:-56px;border-radius:6px}.timeline-comment-avatar .avatar{width:40px;height:40px}.timeline-comment-avatar .avatar-child{width:20px;height:20px}.timeline-comment{position:relative;color:var(--color-fg-default);background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px}.timeline-comment.will-transition-once{transition:border-color .65s ease-in-out}.timeline-comment.will-transition-once .timeline-comment-header{transition:background-color .65s ease,border-bottom-color .65s ease-in-out}.timeline-comment.will-transition-once::before,.timeline-comment.will-transition-once::after{transition:border-right-color .65s ease-in-out}.timeline-comment.current-user{border-color:var(--color-accent-muted)}.timeline-comment.current-user .timeline-comment-header{background-color:var(--color-accent-subtle);border-bottom-color:var(--color-accent-muted)}.timeline-comment.current-user .Label{border-color:var(--color-accent-muted)}.timeline-comment.current-user .previewable-comment-form .comment-form-head.tabnav{color:var(--color-accent-muted);background-color:var(--color-accent-subtle);border-bottom-color:var(--color-accent-muted)}.timeline-comment.unread-item,.timeline-comment.is-internal{border-color:var(--color-attention-muted)}.timeline-comment.unread-item .timeline-comment-header,.timeline-comment.is-internal .timeline-comment-header{background-color:var(--color-attention-subtle);border-bottom-color:var(--color-attention-muted)}.timeline-comment.unread-item .Label,.timeline-comment.is-internal .Label{border-color:var(--color-attention-muted)}.timeline-comment.unread-item .previewable-comment-form .comment-form-head.tabnav,.timeline-comment.is-internal .previewable-comment-form .comment-form-head.tabnav{color:var(--color-attention-muted);background-color:var(--color-attention-subtle);border-bottom-color:var(--color-attention-muted)}.timeline-comment:empty{display:none}.timeline-comment .comment+.comment{border-top:1px solid var(--color-border-default)}.timeline-comment .comment+.comment::before,.timeline-comment .comment+.comment::after{display:none}.timeline-comment .comment+.comment .timeline-comment-header{border-top-left-radius:0;border-top-right-radius:0}.timeline-comment--caret::after,.timeline-comment--caret::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.timeline-comment--caret::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-subtle), var(--color-canvas-subtle))}.timeline-comment--caret::before{background-color:var(--color-border-default)}.is-pending .timeline-comment--caret::after,.is-pending .timeline-comment--caret::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.is-pending .timeline-comment--caret::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-attention-subtle), var(--color-attention-subtle))}.is-pending .timeline-comment--caret::before{background-color:var(--color-attention-emphasis)}.timeline-comment--caret.current-user::after,.timeline-comment--caret.current-user::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.timeline-comment--caret.current-user::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-accent-subtle), var(--color-accent-subtle))}.timeline-comment--caret.current-user::before{background-color:var(--color-accent-muted)}.timeline-comment--caret.unread-item::after,.timeline-comment--caret.unread-item::before,.timeline-comment--caret.is-internal::after,.timeline-comment--caret.is-internal::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.timeline-comment--caret.unread-item::after,.timeline-comment--caret.is-internal::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-attention-subtle), var(--color-attention-subtle))}.timeline-comment--caret.unread-item::before,.timeline-comment--caret.is-internal::before{background-color:var(--color-attention-muted)}.timeline-comment--caret.timeline-comment--caret-nw::before,.timeline-comment--caret.timeline-comment--caret-nw::after{transform:rotate(90deg)}.timeline-comment--caret.timeline-comment--caret-nw::before{top:-12px;left:12px}.timeline-comment--caret.timeline-comment--caret-nw::after{top:-10px;left:11px}.page-responsive .timeline-comment--caret::before,.page-responsive .timeline-comment--caret::after{display:none}@media(min-width: 768px){.page-responsive .timeline-comment--caret::before,.page-responsive .timeline-comment--caret::after{display:block}}:target .timeline-comment--caret::before{background-color:var(--color-accent-fg)}:target .timeline-comment--caret::after{margin-left:2px !important}:target .timeline-comment{border-color:var(--color-accent-fg);outline:none !important;box-shadow:0 0 0 1px var(--color-accent-fg) !important}.review-comment:target{border-radius:6px;outline:none !important;box-shadow:0 0 0 1px var(--color-accent-fg) !important}.timeline-comment-header{display:flex;align-items:center;padding-right:16px;padding-left:16px;color:var(--color-fg-muted);flex-direction:row-reverse;background-color:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-default);border-top-left-radius:6px;border-top-right-radius:6px}.timeline-comment-header:only-child{border-bottom:0;border-radius:6px}.timeline-comment-header .author{color:var(--color-fg-muted)}.timeline-comment-header code{word-break:break-all}.comment-type-icon{color:inherit}.timeline-comment-header-text{min-width:0;padding-top:8px;padding-bottom:8px;margin-bottom:1px;flex:1 1 auto}.timeline-comment-header-text code a{color:var(--color-fg-muted)}.timeline-comment-actions{float:right;margin-left:8px}.timeline-comment-actions .show-more-popover.dropdown-menu-sw{right:-6px;margin-top:-4px}.timeline-comment-action{display:inline-block;padding:8px 4px;color:var(--color-fg-muted)}.timeline-comment-action:hover,.timeline-comment-action:focus{color:var(--color-accent-fg);text-decoration:none;opacity:1}.timeline-comment-action .octicon-check{height:16px}.timeline-comment-action.disabled{color:var(--color-fg-muted);cursor:default}.timeline-comment-action.disabled:hover{color:var(--color-fg-muted)}.timeline-new-comment{margin-bottom:0}.timeline-new-comment .comment-form-head{margin-bottom:8px}.timeline-new-comment .previewable-comment-form .comment-body{padding-top:0}.comment-form-head .toolbar-commenting{float:right}.discussion-item-icon{float:left;width:32px;height:32px;margin-top:-4px;margin-left:-39px;line-height:28px;color:var(--color-fg-muted);text-align:center;background-color:var(--color-timeline-badge-bg);border:2px solid var(--color-canvas-default);border-radius:50%}.discussion-item-header{color:var(--color-fg-muted);word-wrap:break-word}.discussion-item-header .discussion-item-private{vertical-align:-1px}.discussion-item-header:last-child{padding-bottom:0}.discussion-item-header .commit-ref{font-size:85%;vertical-align:baseline}.discussion-item-header .btn-outline{float:right;padding:4px 8px;margin-top:-4px;margin-left:8px}.discussion-item-private{color:var(--color-fg-muted)}.previewable-comment-form .comment-form-head.tabnav{padding:8px 8px 0;background:var(--color-canvas-subtle);border-radius:6px 6px 0 0}.page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting{background:var(--color-canvas-default)}@media(min-width: 1012px){.page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting{background:transparent}}@media(min-width: 768px){.page-responsive .previewable-comment-form .comment-form-head.tabnav{background:var(--color-canvas-subtle)}}.previewable-comment-form .comment{border:0}.previewable-comment-form .comment-body{padding-top:8px;padding-right:8px;padding-bottom:8px;padding-left:8px;background-color:transparent;border-bottom:1px solid var(--color-border-default)}.previewable-comment-form .timeline-comment .timeline-comment-actions{display:none}.new-discussion-timeline .composer .timeline-comment{margin-bottom:8px}.new-discussion-timeline .composer .comment-form-head.tabnav{padding-top:0;background-color:var(--color-canvas-default)}.composer.composer-responsive{padding-left:0}.composer.composer-responsive .discussion-topic-header{padding:0}.composer.composer-responsive .timeline-comment{border:0}.composer.composer-responsive .timeline-comment::before,.composer.composer-responsive .timeline-comment::after{display:none}.composer.composer-responsive .previewable-comment-form .write-content{margin:0}@media(min-width: 768px){.composer.composer-responsive{padding-left:56px}.composer.composer-responsive .timeline-comment{border:1px solid var(--color-border-default)}.composer.composer-responsive .timeline-comment::after,.composer.composer-responsive .timeline-comment::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.composer.composer-responsive .timeline-comment::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.composer.composer-responsive .timeline-comment::before{background-color:var(--color-border-default)}}.discussion-timeline-actions{background-color:var(--color-canvas-default);border-top:2px solid var(--color-border-default)}.discussion-timeline-actions .merge-pr{padding-top:0;border-top:0}.discussion-timeline-actions .thread-subscription-status{margin-top:16px}.pagination-loader-container{background-color:var(--color-canvas-default);background-image:url("/images/modules/pulls/progressive-disclosure-line.svg");background-repeat:repeat-x;background-position:center;background-size:16px}[data-color-mode=light][data-light-theme*=dark] .pagination-loader-container,[data-color-mode=dark][data-dark-theme*=dark] .pagination-loader-container{background-image:url("/images/modules/pulls/progressive-disclosure-line-dark.svg")}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=dark] .pagination-loader-container{background-image:url("/images/modules/pulls/progressive-disclosure-line-dark.svg")}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=dark] .pagination-loader-container{background-image:url("/images/modules/pulls/progressive-disclosure-line-dark.svg")}}:target .timeline-comment-group .timeline-comment .timeline-comment-group .timeline-comment{box-shadow:none !important}.is-pending .form-actions{margin-right:8px;margin-bottom:4px}.is-pending .file,.is-pending .file-header,.is-pending .tabnav-tab.selected,.is-pending .comment-form-head.tabnav{border-color:var(--color-attention-emphasis)}.is-pending .file-header,.is-pending .comment-form-head.tabnav{background-color:var(--color-attention-subtle)}.discussion-item-icon-gray{background-color:var(--color-timeline-badge-bg) !important}.footer-octicon{color:var(--color-fg-subtle)}.footer-octicon:hover{color:var(--color-fg-muted)}.user-mention,.team-mention{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default);white-space:nowrap}.Popover .user-mention,.Popover .team-mention{white-space:normal}@media(max-width: 543px){.notifications-component-menu-modal{margin:calc(10vh - 16px) 0}}@media(min-width: 544px){.notifications-component-menu-modal,.notifications-component-dialog,.notifications-component-dialog-modal{width:100%}}@media(min-width: 768px){.notifications-component-menu-modal,.notifications-component-dialog,.notifications-component-dialog-modal{min-width:300px}}.notifications-component-dialog:not([hidden])+.notifications-component-dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:block;cursor:default;content:" ";background:transparent;background:var(--color-primer-canvas-backdrop)}@media(min-width: 544px){.notifications-component-dialog:not([hidden])+.notifications-component-dialog-overlay{display:none}}.notifications-component-dialog{z-index:99;animation:none}@keyframes notifications-component-dialog-animation--sm{0%{opacity:0;transform:translateX(16px)}}@media(min-width: 544px){.notifications-component-dialog{position:absolute;top:auto;right:auto;bottom:auto;left:auto;max-height:none;padding-top:0;margin:0;transform:none}}.notifications-component-dialog .notifications-component-dialog-modal{animation:none}.pagehead{position:relative;padding-top:24px;padding-bottom:24px;margin-bottom:24px;border-bottom:1px solid var(--color-border-default)}.pagehead.admin{background:url("/images/modules/pagehead/background-yellowhatch-v3.png") 0 0 repeat-x}.pagehead ul.pagehead-actions{position:relative;z-index:31;float:right;margin:0}.pagehead .path-divider{margin:0 .25em}.pagehead h1{min-height:32px;margin-top:0;margin-bottom:0;font-size:20px;font-weight:var(--base-text-weight-normal, 400)}.pagehead h1 .avatar{margin-top:-2px;margin-right:8px;margin-bottom:-2px}.pagehead .underline-nav{height:69px;margin-top:-16px;margin-bottom:-16px}.pagehead-heading{color:inherit}.pagehead-actions>li{float:left;margin:0 8px 0 0;font-size:12px;color:var(--color-fg-default);list-style-type:none}.pagehead-actions>li:last-child{margin-right:0}.pagehead-actions .octicon-mute{color:var(--color-danger-fg)}.pagehead-actions .select-menu{position:relative}.pagehead-actions .select-menu::before{display:table;content:""}.pagehead-actions .select-menu::after{display:table;clear:both;content:""}.pagehead-actions .select-menu-modal-holder{top:100%}.pagehead-tabs-item{float:left;padding:8px 16px 12px;color:var(--color-fg-muted);white-space:nowrap;border:solid transparent;border-width:3px 1px 1px;border-radius:6px 6px 0 0}.pagehead-tabs-item .octicon{color:var(--color-fg-muted)}.pagehead-tabs-item:hover{color:var(--color-fg-default);text-decoration:none}.pagehead-tabs-item.selected{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default);background-color:var(--color-canvas-default);border-color:var(--color-severe-emphasis) var(--color-border-default) transparent}.pagehead-tabs-item.selected>.octicon{color:inherit}.reponav{position:relative;top:1px;margin-top:-4px}.reponav::before{display:table;content:""}.reponav::after{display:table;clear:both;content:""}.reponav-item{float:left;padding:8px 16px 8px;color:var(--color-fg-muted);white-space:nowrap;border:solid transparent;border-width:3px 1px 1px;border-radius:6px 6px 0 0}.reponav-item .octicon{color:var(--color-fg-muted)}.reponav-item:hover,.reponav-item:focus{color:var(--color-fg-default);text-decoration:none}.reponav-item.selected{color:var(--color-fg-default);background-color:var(--color-canvas-default);border-color:var(--color-severe-emphasis) var(--color-border-default) transparent}.reponav-item.selected .octicon{color:inherit}.reponav-wrapper{position:relative;z-index:2;overflow-y:hidden;background-color:var(--color-neutral-emphasis)}.reponav-wrapper .reponav{top:0;padding-right:8px;padding-left:8px;margin-top:0;-webkit-overflow-scrolling:touch;overflow-x:auto;color:rgba(255,255,255,.75)}.reponav-wrapper .reponav-item{display:inline-block;float:none;padding:4px 8px 16px;color:var(--color-fg-muted);border:0}.reponav-wrapper .reponav-item.selected{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default);background-color:transparent;border:0}@media(max-width: 768px){.PageLayout--responsive-separateRegions.PageLayout--responsive-primary-pane .ActionList-item.ActionList-item--navActive:not(.ActionList-item--danger){background-color:transparent}.PageLayout--responsive-separateRegions.PageLayout--responsive-primary-pane .ActionList-item.ActionList-item--navActive:not(.ActionList-item--subItem) .ActionList-item-label{font-weight:var(--base-text-weight-normal, 400)}.PageLayout--responsive-separateRegions.PageLayout--responsive-primary-pane .ActionList-item--navActive::after{display:none}.PageLayout--responsive-separateRegions.PageLayout--responsive-primary-pane .ActionList-item.ActionList-item--navActive:not(.ActionList-item--danger):hover{background-color:var(--color-action-list-item-default-hover-bg)}}.steps{display:table;width:100%;padding:0;margin:32px auto 0;overflow:hidden;list-style:none;border:1px solid #dfe2e5;border-radius:6px;box-shadow:0 1px 3px rgba(27,31,35,.05)}.steps li{display:table-cell;width:33.3%;padding:8px 16px;color:#c6cbd1;cursor:default;background-color:var(--color-canvas-subtle);border-left:1px solid #dfe2e5}.steps li.current{color:var(--color-fg-default);background-color:var(--color-canvas-default)}.steps li.current .octicon{color:var(--color-accent-fg)}.steps li .octicon{float:left;margin-right:16px;margin-bottom:4px}.steps li .step{display:block}.steps li:first-child{border-left:0}.steps .complete{color:var(--color-fg-muted)}.steps .complete .octicon{color:var(--color-success-fg)}.prose-diff .anchor{display:none}.prose-diff .show-rich-diff{color:var(--color-accent-fg);text-decoration:none;cursor:pointer}.prose-diff .show-rich-diff:hover{text-decoration:underline}.prose-diff.collapsed .rich-diff-level-zero.expandable{cursor:pointer}.prose-diff.collapsed .rich-diff-level-zero.expandable .vicinity{display:block}.prose-diff.collapsed .rich-diff-level-zero.expandable .unchanged:not(.vicinity){display:none}.prose-diff.collapsed .rich-diff-level-zero.expandable .octicon{display:block;margin:16px auto;color:var(--color-fg-muted)}.prose-diff.collapsed .rich-diff-level-zero.expandable:hover .octicon{color:var(--color-fg-muted)}.prose-diff.collapsed .rich-diff-level-zero.expandable:only-child::before{font-size:16px;color:var(--color-fg-muted);content:"Sorry, no visible changes to display."}.prose-diff.collapsed .rich-diff-level-zero.expandable:only-child:hover::before{color:var(--color-fg-default)}.prose-diff.collapsed .rich-diff-level-zero.expandable>.removed,.prose-diff.collapsed .rich-diff-level-zero.expandable>del{display:none;text-decoration:none}.prose-diff .markdown-body{padding:32px;padding-left:16px}.prose-diff .markdown-body>ins{box-shadow:inset 4px 0 0 var(--color-success-muted)}.prose-diff .markdown-body>del{text-decoration:none;box-shadow:inset 4px 0 0 var(--color-danger-muted)}.prose-diff .markdown-body>ins,.prose-diff .markdown-body>del{display:block;border-radius:0}.prose-diff .markdown-body>ins>.rich-diff-level-zero,.prose-diff .markdown-body>ins>.rich-diff-level-one,.prose-diff .markdown-body>del>.rich-diff-level-zero,.prose-diff .markdown-body>del>.rich-diff-level-one{margin-left:16px}.prose-diff .markdown-body>ins:first-child *,.prose-diff .markdown-body>del:first-child *{margin-top:0}.prose-diff .rich-diff-level-zero.added{box-shadow:inset 4px 0 0 var(--color-success-muted)}.prose-diff .rich-diff-level-zero.removed{box-shadow:inset 4px 0 0 var(--color-danger-muted)}.prose-diff .rich-diff-level-zero.changed{box-shadow:inset 4px 0 0 var(--color-attention-muted)}.prose-diff .rich-diff-level-zero.unchanged,.prose-diff .rich-diff-level-zero.vicinity{margin-left:16px}.prose-diff .rich-diff-level-zero.added,.prose-diff .rich-diff-level-zero.removed,.prose-diff .rich-diff-level-zero.changed{display:block;border-radius:0}.prose-diff .rich-diff-level-zero.added>.rich-diff-level-one,.prose-diff .rich-diff-level-zero.removed>.rich-diff-level-one,.prose-diff .rich-diff-level-zero.changed>.rich-diff-level-one{margin-left:16px}.prose-diff .rich-diff-level-zero.added:first-child *,.prose-diff .rich-diff-level-zero.removed:first-child *,.prose-diff .rich-diff-level-zero.changed:first-child *{margin-top:0}.prose-diff :not(.changed)>:not(.github-user-ins):not(.github-user-del)>.removed,.prose-diff :not(.changed)>:not(.github-user-ins):not(.github-user-del)>del{text-decoration:none}.prose-diff .changed del,.prose-diff .changed del pre,.prose-diff .changed del code,.prose-diff .changed del>div,.prose-diff .changed .removed,.prose-diff .changed .removed pre,.prose-diff .changed .removed code,.prose-diff .changed .removed>div{color:var(--color-fg-default);text-decoration:line-through;background:var(--color-danger-subtle)}.prose-diff .changed ins,.prose-diff .changed ins code,.prose-diff .changed ins pre,.prose-diff .changed .added{color:var(--color-fg-default);background:var(--color-success-subtle);border-bottom:1px solid var(--color-success-muted)}.prose-diff>.markdown-body .github-user-ins{text-decoration:underline}.prose-diff>.markdown-body .github-user-del{text-decoration:line-through}.prose-diff>.markdown-body li ul.added{background:var(--color-success-subtle)}.prose-diff>.markdown-body li ul.removed{color:var(--color-fg-default);background:var(--color-danger-subtle)}.prose-diff>.markdown-body li ul.removed:not(.github-user-ins){text-decoration:line-through}.prose-diff>.markdown-body li.added.moved-up .octicon,.prose-diff>.markdown-body li.added.moved-down .octicon{margin-right:4px;margin-left:4px;color:var(--color-fg-muted)}.prose-diff>.markdown-body li.added.moved{background:var(--color-attention-subtle)}.prose-diff>.markdown-body li.removed.moved{display:none}.prose-diff>.markdown-body pre{padding:8px 16px}.prose-diff>.markdown-body th.changed,.prose-diff>.markdown-body td.changed{background:var(--color-attention-subtle);border-left-color:var(--color-border-default)}.prose-diff>.markdown-body :not(li.moved).removed{color:var(--color-fg-default);text-decoration:line-through;background:var(--color-danger-subtle)}.prose-diff>.markdown-body :not(.github-user-ins):not(li.moved).removed{text-decoration:line-through}.prose-diff>.markdown-body :not(li.moved).added,.prose-diff>.markdown-body li:not(.moved).added{background:var(--color-success-subtle)}.prose-diff>.markdown-body :not(.github-user-del):not(li.moved).added li:not(.moved):not(.github-user-del).added{text-decoration:none}.prose-diff>.markdown-body li:not(.moved).removed{color:var(--color-fg-default);background:var(--color-danger-subtle)}.prose-diff>.markdown-body li:not(.moved):not(.github-user-ins).removed{text-decoration:line-through}.prose-diff>.markdown-body .added,.prose-diff>.markdown-body ins+.added,.prose-diff>.markdown-body ins{border-top:0;border-bottom:0}.prose-diff>.markdown-body .added:not(.github-user-del):not(.github-user-ins),.prose-diff>.markdown-body ins+.added:not(.github-user-del):not(.github-user-ins),.prose-diff>.markdown-body ins:not(.github-user-del):not(.github-user-ins){text-decoration:none}.prose-diff>.markdown-body img.added,.prose-diff>.markdown-body img.removed{border-style:solid;border-width:1px}.prose-diff>.markdown-body ins pre:not(.github-user-del):not(.github-user-ins),.prose-diff>.markdown-body ins code:not(.github-user-del):not(.github-user-ins),.prose-diff>.markdown-body ins>div:not(.github-user-del):not(.github-user-ins){text-decoration:none}.prose-diff>.markdown-body ul>ins,.prose-diff>.markdown-body ul>del{display:block;padding:0}.prose-diff>.markdown-body .added>li,.prose-diff>.markdown-body .removed>li{margin-top:0;margin-bottom:0}span.changed_tag,em.changed_tag,strong.changed_tag,b.changed_tag,i.changed_tag,code.changed_tag{border-bottom:1px dotted var(--color-border-default);border-radius:0}a.added_href,a.changed_href,span.removed_href{border-bottom:1px dotted var(--color-border-default);border-radius:0}.diff-view .file-type-prose .rich-diff{display:none}.diff-view .display-rich-diff .rich-diff{display:block}.diff-view .display-rich-diff .file-diff{display:none}.protip{margin-top:16px;color:var(--color-fg-muted);text-align:center}.protip strong{color:var(--color-fg-default)}.protip code{padding:2px;background-color:var(--color-canvas-subtle);border-radius:6px}.add-reactions-options-item{margin-top:-1px;margin-right:-1px;line-height:29px;border:1px solid transparent}.add-reactions-options-item .emoji{display:inline-block;transition:transform .15s cubic-bezier(0.2, 0, 0.13, 2)}.add-reactions-options-item:hover .emoji,.add-reactions-options-item:focus .emoji{text-decoration:none !important;transform:scale(1.2) !important}.add-reactions-options-item:active{background-color:var(--color-accent-subtle)}.page-responsive .add-reactions-options-item{height:20vw}@media(min-width: 544px){.page-responsive .add-reactions-options-item{height:auto}}.comment-reactions{display:none}.comment-reactions::before{display:table;content:""}.comment-reactions::after{display:table;clear:both;content:""}.page-responsive .comment-reactions{display:none}@media(min-width: 768px){.page-responsive .comment-reactions{display:none}.page-responsive .comment-reactions.has-reactions{display:flex}}.comment-reactions.has-reactions{display:flex}.comment-reactions.has-reactions:not(.social-reactions){border-top:1px solid var(--color-border-default)}.comment-reactions .user-has-reacted{background-color:var(--color-accent-subtle)}.reactions-container .user-has-reacted{background-color:var(--color-accent-subtle)}[data-color-mode=light][data-light-theme*=dark],[data-color-mode=dark][data-dark-theme*=dark]{--color-social-reaction-bg-hover:var(--color-scale-gray-7);--color-social-reaction-bg-reacted-hover:var(--color-scale-blue-8)}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=dark]{--color-social-reaction-bg-hover:var(--color-scale-gray-7);--color-social-reaction-bg-reacted-hover:var(--color-scale-blue-8)}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=dark]{--color-social-reaction-bg-hover:var(--color-scale-gray-7);--color-social-reaction-bg-reacted-hover:var(--color-scale-blue-8)}}:root,[data-color-mode=light][data-light-theme*=light],[data-color-mode=dark][data-dark-theme*=light]{--color-social-reaction-bg-hover:var(--color-scale-gray-1);--color-social-reaction-bg-reacted-hover:var(--color-scale-blue-1)}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=light]{--color-social-reaction-bg-hover:var(--color-scale-gray-1);--color-social-reaction-bg-reacted-hover:var(--color-scale-blue-1)}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=light]{--color-social-reaction-bg-hover:var(--color-scale-gray-1);--color-social-reaction-bg-reacted-hover:var(--color-scale-blue-1)}}.social-reaction-summary-item+.social-reaction-summary-item{margin-left:8px}.social-reactions .comment-body{margin-left:16px !important}.social-button-emoji{display:inline-block;width:16px;height:16px;font-size:1em !important;line-height:1.25;vertical-align:-1px}.social-reaction-summary-item{height:26px;padding:0 4px !important;margin-right:0;font-size:12px;line-height:26px;background-color:transparent;border:1px solid var(--color-border-default, #d2dff0);border-radius:100px}.social-reaction-summary-item:focus,.social-reaction-summary-item:focus-visible{border-radius:100px !important}.social-reaction-summary-item:focus{border-color:var(--color-accent-fg);outline:none;box-shadow:inset 0 0 0 1px var(--color-accent-fg)}.social-reaction-summary-item:focus:not(:focus-visible){border-color:transparent;border-color:var(--color-accent-fg);outline:none;box-shadow:inset 0 0 0 1px transparent}.social-reaction-summary-item:focus-visible{border-color:var(--color-accent-fg);outline:none;box-shadow:inset 0 0 0 1px var(--color-accent-fg)}.social-reaction-summary-item.user-has-reacted{background-color:var(--color-accent-subtle);border:1px solid var(--color-accent-emphasis) !important}.social-reaction-summary-item.user-has-reacted:hover{background-color:var(--color-social-reaction-bg-reacted-hover) !important}.social-reaction-summary-item>span{height:24px;padding:0 4px;margin-left:2px}.social-reaction-summary-item:hover{background-color:var(--color-social-reaction-bg-hover)}.reaction-dropdown-button{color:var(--color-fg-muted)}.reaction-dropdown-button:hover{color:var(--color-accent-fg)}.reaction-dropdown-button--inline{width:26px;height:26px}.reaction-dropdown-button--inline:hover{background-color:var(--color-btn-hover-bg) !important;border-color:var(--color-btn-hover-border) !important}.reaction-dropdown-button:disabled{color:var(--color-primer-fg-disabled) !important;pointer-events:none}.reactions-with-gap .comment .comment-reactions{margin-left:16px;border-top:0 !important}.new-reactions-dropdown .dropdown-menu-reactions{width:auto;padding:0 2px}.new-reactions-dropdown .dropdown-menu-reactions::before,.new-reactions-dropdown .dropdown-menu-reactions::after{background-color:transparent;border:0}.new-reactions-dropdown .dropdown-item-reaction{width:32px;height:32px;padding:4px;margin:4px 2px}.new-reactions-dropdown .dropdown-item-reaction.user-has-reacted{background-color:var(--color-accent-subtle)}.new-reactions-dropdown .dropdown-item-reaction:hover{background-color:var(--color-btn-hover-bg)}.RecentBranches{background-color:var(--color-attention-subtle);border:1px solid var(--color-attention-emphasis);border-radius:6px}.RecentBranches-item{line-height:28px;color:var(--color-fg-default)}.RecentBranches-item+.RecentBranches-item{border-top:1px solid var(--color-attention-emphasis)}.RecentBranches-item-link{color:var(--color-fg-default)}.RecentBranches-item-link.css-truncate-target{max-width:400px}.render-container{padding:32px;line-height:0;text-align:center;background:var(--color-canvas-subtle);border-bottom-right-radius:6px;border-bottom-left-radius:6px}.render-container .render-viewer{display:block;width:1px;height:1px;border:0}.render-container .octospinner{display:none}.render-container .render-viewer-error,.render-container .render-viewer-fatal,.render-container .render-viewer-invalid,.render-container .render-fullscreen{display:none}.render-container.is-render-automatic .octospinner{display:inline-block}.render-container.is-render-requested .octospinner{display:inline-block}.render-container.is-render-requested.is-render-failed .render-viewer-error{display:inline-block}.render-container.is-render-requested.is-render-failed .render-viewer,.render-container.is-render-requested.is-render-failed .render-viewer-fatal,.render-container.is-render-requested.is-render-failed .render-viewer-invalid,.render-container.is-render-requested.is-render-failed .octospinner{display:none}.render-container.is-render-requested.is-render-failed-fatal .render-viewer-fatal{display:inline-block}.render-container.is-render-requested.is-render-failed-fatal .render-viewer,.render-container.is-render-requested.is-render-failed-fatal .render-viewer-error,.render-container.is-render-requested.is-render-failed-fatal .render-viewer-invalid,.render-container.is-render-requested.is-render-failed-fatal .octospinner{display:none}.render-container.is-render-requested.is-render-failed-invalid .render-viewer-invalid{display:inline-block}.render-container.is-render-requested.is-render-failed-invalid .render-viewer,.render-container.is-render-requested.is-render-failed-invalid .render-viewer-error,.render-container.is-render-requested.is-render-failed-invalid .render-viewer-fatal,.render-container.is-render-requested.is-render-failed-invalid .octospinner{display:none}.render-container.is-render-ready.is-render-requested:not(.is-render-failed){height:500px;padding:0;background:none}.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .render-viewer{width:100%;height:100%}.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .render-fullscreen{display:flex}.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .render-viewer-error,.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .render-viewer-fatal,.render-container.is-render-ready.is-render-requested:not(.is-render-failed) .octospinner{display:none}.render-needs-enrichment{margin-bottom:16px}.render-needs-enrichment .render-full-screen{width:100%;height:auto;padding:16px;overflow:auto}.render-needs-enrichment .render-full-screen-close{top:0;right:0;padding:4px}.render-needs-enrichment .details{margin-bottom:0}.render-needs-enrichment .render-plaintext-hidden{display:none}.render-notice{padding:16px 16px;font-size:14px;color:var(--color-fg-default);background-color:var(--color-canvas-subtle);border-color:var(--color-border-subtle)}.js-inline-math>mjx-container{overflow-x:auto;overflow-y:hidden}math-renderer mjx-labels{right:0;left:auto}.Skeleton{color:rgba(0,0,0,0);background-image:linear-gradient(270deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.1));background-size:400% 100%;animation:skeleton-loading 8s ease-in-out infinite}.Skeleton *{visibility:hidden}.Skeleton--text{clip-path:inset(4px 0 4px 0 round 3px 3px 3px 3px)}.is-error .Skeleton{display:none}@keyframes skeleton-loading{0%{background-position:200% 0}100%{background-position:-200% 0}}.authors-2 .AvatarStack{min-width:36px !important}.authors-3 .AvatarStack{min-width:46px !important}[aria-selected=true] .AvatarStack-body,.navigation-focus .AvatarStack-body{background:#f6fbff}.tracked-in-parent-pill{position:relative;cursor:default}.tracked-in-parent-pill-truncated{position:absolute;left:100%;display:none;white-space:nowrap;background:var(--color-canvas-default);border-left-width:0 !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.tracked-in-parent-pill:hover .tracked-in-parent-pill-truncated{display:block}.wizard-content.horizontal{flex-direction:column}.wizard-content.horizontal .wizard-horizontal-steps{width:30%}.wizard-content.horizontal .wizard-horizontal-steps .wizard-step-badge{margin:0;color:var(--color-fg-subtle);background-color:var(--color-canvas-inset);border-color:var(--color-fg-subtle)}.wizard-content.horizontal .wizard-horizontal-steps .wizard-step-badge.current{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis);border-color:var(--color-accent-emphasis)}.wizard-content.horizontal .wizard-horizontal-steps .wizard-step-bar{border-color:var(--color-fg-subtle)}.wizard-content.horizontal .wizard-horizontal-steps .wizard-step-bar.complete{border-color:var(--color-accent-emphasis)}.wizard-content.horizontal .wizard-horizontal-steps .wizard-step-badge.complete{display:none}.wizard-content.horizontal .wizard-horizontal-steps .wizard-step-badge-check{display:none !important}.wizard-content.horizontal .wizard-horizontal-steps .wizard-step-badge-check.complete{display:inherit !important;width:32px !important;height:32px !important}.wizard-content.horizontal .wizard-step[data-single-page-wizard-last-step=true] .wizard-step-buttons{align-items:center;justify-content:center}.wizard-content.horizontal .wizard-step-item{margin-left:0 !important;flex-direction:column !important}.wizard-content.horizontal .wizard-step-item::before,.wizard-content.horizontal .wizard-step-item .wizard-step-badge,.wizard-content.horizontal .wizard-step-item .wizard-step-icon,.wizard-content.horizontal .wizard-step-item .wizard-step-header{display:none !important}.wizard-content.horizontal .wizard-step-item .wizard-step-container::before,.wizard-content.horizontal .wizard-step-item .wizard-step-container::after{display:none !important}.wizard-step-item{position:relative;padding:8px 0;margin-left:16px;flex-direction:row}.wizard-step-item::before{position:absolute;top:32px;bottom:0;left:0;display:block;width:2px;height:100%;content:"";background-color:var(--color-border-default)}.wizard-step-badge{position:relative;z-index:1;display:flex;width:32px;height:32px;margin-right:8px;margin-left:-16px;color:var(--color-fg-default);align-items:center;background-color:var(--color-border-default);border:1px solid var(--color-canvas-default);border-radius:50%;justify-content:center;flex-shrink:0}.wizard-step-body{min-width:0;max-width:100%;color:var(--color-fg-default);flex:auto}.wizard-step-body .wizard-step-buttons{display:none;margin-top:24px;justify-content:flex-end}.wizard-step-container{border:0}.wizard-step-container .wizard-step-content{display:none;width:100%;padding:16px 24px 24px 24px;overflow:visible;font-size:14px}.wizard-step-container.wizard-step-container-icon .wizard-step-content{padding:24px}.wizard-step-header{padding-top:4px;padding-left:8px}.wizard-step-header>.wizard-step-title{min-width:0;margin-bottom:4px;flex:1 1 auto;color:var(--color-fg-muted)}.wizard-step-icon{display:none;height:96px;color:var(--color-accent-fg);background-image:linear-gradient(to right, var(--color-accent-subtle), var(--color-canvas-default));justify-content:center;align-items:center;border-top-left-radius:6px;border-top-right-radius:6px}.wizard-step[data-single-page-wizard-step-complete=true] .wizard-step-badge{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.wizard-step[data-single-page-wizard-step-complete=true] .wizard-step-item::before{background-color:var(--color-accent-emphasis)}.wizard-step[data-single-page-wizard-step-complete=true] .wizard-step-title{color:var(--color-fg-default)}.wizard-step[data-single-page-wizard-last-step=true] .wizard-step-badge .wizard-step-check{display:block;color:var(--color-fg-on-emphasis)}.wizard-step[data-single-page-wizard-last-step=true] .wizard-step-item::before{top:0;display:block;height:16px}@media(min-width: 768px){.wizard-step[data-single-page-wizard-last-step=true] .wizard-step-item::before{display:none}}.wizard-step[data-single-page-wizard-last-step=true] .wizard-step-icon{color:var(--color-success-fg);background-image:linear-gradient(to right, var(--color-success-subtle), var(--color-canvas-default))}.wizard-step:not([data-single-page-wizard-last-step=true]) .wizard-step-badge .wizard-step-check{display:none}.wizard-step:not([data-single-page-wizard-last-step=true]) .wizard-step-badge::before{color:var(--color-fg-on-emphasis);content:attr(data-single-page-wizard-step)}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-badge{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.wizard-step[data-single-page-wizard-step-current=true][data-single-page-wizard-last-step=true] .wizard-step-badge{background-color:var(--color-success-emphasis)}.wizard-step[data-single-page-wizard-step-current=true][data-single-page-wizard-last-step=true] .wizard-step-item::before{top:42px;height:16px}.wizard-step[data-single-page-wizard-step-current=true][data-single-page-wizard-last-step=true] .wizard-step-container-icon::after{background-image:linear-gradient(var(--color-success-subtle), var(--color-success-subtle))}.wizard-step[data-single-page-wizard-step-current=true]:not([data-single-page-wizard-last-step=true]) .wizard-step-container-icon::after{background-image:linear-gradient(var(--color-accent-subtle), var(--color-accent-subtle))}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-icon{display:flex}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-item{flex-direction:column}@media(min-width: 768px){.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-item{flex-direction:row}}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-body{margin-top:16px;margin-left:-16px}@media(min-width: 768px){.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-body{margin-top:0;margin-left:0}}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container{position:relative;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::after,.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::before{background-color:var(--color-border-default)}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::before,.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::after{transform:rotate(90deg)}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::before{position:absolute;top:-12px;right:100%;left:12px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::after{top:-10px;left:11px}@media(min-width: 768px){.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::before,.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::after{top:11px;left:-8px;transform:rotate(0)}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container::after{margin-left:1px}}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container .wizard-step-header{display:none}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container .wizard-step-content-header{margin-bottom:16px}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container .wizard-step-title{color:var(--color-fg-default)}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-container .wizard-step-content{display:block}.wizard-step[data-single-page-wizard-step-current=true] .wizard-step-buttons{display:flex}.alert-label{color:var(--color-fg-on-emphasis)}.graph-canvas .alert-label--critical{fill:var(--color-danger-emphasis)}.graph-canvas .alert-label--high{fill:var(--color-severe-emphasis)}.graph-canvas .alert-label--moderate{fill:var(--color-attention-emphasis)}.graph-canvas .alert-label--low{fill:var(--color-neutral-emphasis)}.advisory-form{background-color:var(--color-canvas-subtle);border-top:1px solid var(--color-border-default)}.advisory-form .form-control{background-color:var(--color-canvas-default)}.advisory-form .form-actions{background-color:var(--color-canvas-default)}.advisory-form .previewable-comment-form{background-color:var(--color-canvas-default)}.advisory-credit-window-min{min-height:72px}.advisory-credit-window-max{max-height:370px}.AppHeader{--AppHeader-bg: var(--color-canvas-inset);color:var(--color-fg-default);background:var(--AppHeader-bg);box-shadow:inset 0 calc(var(--primer-borderWidth-thin, 1px)*-1) var(--color-border-default)}.AppHeader .AppHeader-globalBar{display:flex;padding:var(--base-size-16, 16px);gap:var(--base-size-12, 12px)}.AppHeader .AppHeader-globalBar.second-row{display:block}.AppHeader .AppHeader-globalBar.second-row .AppHeader-search{display:block}.AppHeader .AppHeader-globalBar.search-expanded .AppHeader-globalBar-start,.AppHeader .AppHeader-globalBar.always-expanded .AppHeader-globalBar-start{flex:none}.AppHeader .AppHeader-globalBar.search-expanded .AppHeader-context,.AppHeader .AppHeader-globalBar.always-expanded .AppHeader-context{display:none}.AppHeader .AppHeader-globalBar.search-expanded .AppHeader-search .AppHeader-search-whenRegular,.AppHeader .AppHeader-globalBar.always-expanded .AppHeader-search .AppHeader-search-whenRegular{max-width:100%}.AppHeader .AppHeader-globalBar.search-expanded .AppHeader-globalBar-end,.AppHeader .AppHeader-globalBar.always-expanded .AppHeader-globalBar-end{flex:1 1 auto}@media(max-width: 767.98px){.AppHeader .AppHeader-globalBar.search-expanded .AppHeader-search{position:absolute;top:0;left:0;width:100%}.AppHeader .AppHeader-globalBar.search-expanded .AppHeader-globalBar-end{flex:none}.AppHeader .AppHeader-globalBar.search-expanded .search-suggestions{left:0;top:0;width:100% !important}}.AppHeader .AppHeader-globalBar .AppHeader-globalBar-start{flex:1 1 auto;display:flex;gap:var(--base-size-8, 8px)}.AppHeader .AppHeader-globalBar .AppHeader-globalBar-end{flex:0 1 auto;display:flex;justify-content:flex-end;gap:var(--primer-controlStack-medium-gap-auto, 8px)}.AppHeader .AppHeader-globalBar .AppHeader-logo{flex:0 0 auto;display:grid;width:var(--base-size-32, 32px);height:var(--base-size-32, 32px);outline-offset:2px}@media(pointer: coarse){.AppHeader .AppHeader-globalBar .AppHeader-logo::after{position:absolute;top:50%;left:50%;width:100%;height:100%;min-height:var(--primer-control-minTarget-coarse, 44px);content:"";transform:translateX(-50%) translateY(-50%);min-width:var(--primer-control-minTarget-coarse, 44px)}}.AppHeader .AppHeader-globalBar .AppHeader-logo svg{width:var(--base-size-32, 32px);height:var(--base-size-32, 32px)}.AppHeader .AppHeader-globalBar .AppHeader-user{position:relative;background:var(--color-neutral-muted);border-radius:50%}.AppHeader .AppHeader-globalBar .AppHeader-user img{position:relative;display:block;width:100%;height:100%;border-radius:50%}.AppHeader .AppHeader-globalBar .AppHeader-context{min-width:0;height:var(--base-size-32, 32px);flex:1 1 auto}@media(min-width: 768px){.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-compact{display:none}}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-compact .AppHeader-context-compact-trigger{display:grid;width:100%;height:var(--base-size-48, 48px);color:inherit;text-align:left;cursor:pointer;background-color:transparent;border:0;border-radius:var(--primer-borderRadius-medium, 6px);margin-block:calc(var(--base-size-8, 8px)*-1);padding-block:var(--primer-control-medium-paddingBlock, 6px);padding-inline:var(--primer-control-medium-paddingInline-condensed, 8px);-webkit-appearance:none;appearance:none;align-items:center}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-compact .AppHeader-context-compact-trigger:hover{background-color:var(--color-action-list-item-default-hover-bg)}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-compact .AppHeader-context-compact-trigger:active{background-color:var(--color-action-list-item-default-active-bg)}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-compact .AppHeader-context-compact-lead{display:grid;width:-moz-fit-content;width:fit-content;font-size:var(--primer-text-caption-size, 12px);line-height:var(--primer-text-caption-lineHeight, 1.3333333333);color:var(--color-fg-muted);grid-auto-flow:column;align-items:center}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-compact .AppHeader-context-compact-parentItem{display:inline;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-compact .AppHeader-context-compact-separator{white-space:nowrap}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-compact .AppHeader-context-compact-mainItem{display:block;overflow:hidden;line-height:var(--primer-text-body-lineHeight-medium, 1.4285714286);text-overflow:ellipsis;white-space:nowrap}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-full{display:inline-flex;width:100%;min-width:0;max-width:100%;overflow:hidden}@media(max-width: 767.98px){.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-full{display:none}}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-full nav{width:100%}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-full ul,.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-full li{list-style:none}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-full ul{display:flex;flex-direction:row}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-full li{display:inline-grid;grid-auto-flow:column;align-items:center;flex:0 99999 auto}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-full li:first-child{flex:0 100 max-content}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-full li:last-child{flex:0 1 max-content}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-full li:last-child .AppHeader-context-item{font-weight:var(--base-text-weight-semibold, 600)}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-item{display:flex;align-items:center;min-width:3ch;line-height:var(--primer-text-body-lineHeight-medium, 1.4285714286);color:inherit;text-decoration:none !important;border-radius:var(--primer-borderRadius-medium, 6px);padding-inline:var(--primer-control-medium-paddingInline-condensed, 8px);padding-block:var(--primer-control-medium-paddingBlock, 6px)}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-item .AppHeader-context-item-label{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-item:hover{background:var(--color-action-list-item-default-hover-bg)}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-item:active{background:var(--color-action-list-item-default-active-bg)}.AppHeader .AppHeader-globalBar .AppHeader-context .AppHeader-context-item-separator{color:var(--color-fg-muted);white-space:nowrap}.AppHeader .AppHeader-globalBar .AppHeader-search{position:relative;display:flex;flex:1 1 auto;justify-content:flex-end}@media(min-width: 768px){.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-whenNarrow{display:none}}@media(max-width: 767.98px){.AppHeader .AppHeader-globalBar .AppHeader-search{flex-grow:0}.AppHeader .AppHeader-globalBar .AppHeader-search .search-input{width:auto}.AppHeader .AppHeader-globalBar .AppHeader-search .search-input-container{margin:0 !important}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-whenRegular{display:none}}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-whenRegular{min-width:12rem;max-width:24rem;flex:1 1 auto}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-wrap{display:grid}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-wrap.AppHeader-search-wrap--hasTrailing input[type=search]{padding-inline-end:calc(var(--primer-control-medium-paddingInline-condensed, 8px) + var(--base-size-16, 16px) + var(--primer-control-medium-gap, 8px) - var(--primer-borderWidth-thin, 1px))}.AppHeader .AppHeader-globalBar .AppHeader-search .search-input-container{height:auto}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-kbd{display:inline-grid;width:var(--base-size-12, 12px);height:var(--base-size-16, 16px);padding:0;font-size:var(--primer-text-caption-size, 12px);line-height:var(--primer-text-caption-lineHeight, 1.3333333333);color:inherit;vertical-align:baseline;background:transparent;border:var(--primer-borderWidth-thin, 1px) solid var(--color-fg-subtle);border-radius:var(--primer-borderRadius-small, 3px);box-shadow:none;align-items:center;justify-content:center}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-placeholder{display:block;width:100%;overflow:hidden;font-weight:var(--base-text-weight-normal, 400);line-height:var(--primer-text-body-lineHeight-medium, 20px);color:var(--color-fg-subtle);text-overflow:ellipsis;white-space:nowrap;pointer-events:none;grid-area:1/1;padding-block:var(--primer-control-medium-paddingBlock, 6px);padding-inline:calc(var(--primer-control-medium-paddingInline-condensed, 8px) + var(--base-size-16, 16px) + var(--primer-control-medium-gap, 8px))}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-control{grid-area:1/1;position:relative}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-visual--leading{position:absolute;top:var(--base-size-8, 8px);left:var(--base-size-8, 8px);display:block;width:var(--base-size-16, 16px);height:var(--base-size-16, 16px);color:var(--color-fg-muted);pointer-events:none}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-visual--leading svg{display:block !important}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-searchButton{background:transparent}.AppHeader .AppHeader-globalBar .AppHeader-search input[type=search],.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-searchButton{width:100%;padding-block:calc(var(--primer-control-medium-paddingBlock, 6px) - var(--primer-borderWidth-thin, 1px));padding-inline-start:calc(var(--primer-control-medium-paddingInline-condensed, 8px) + var(--base-size-16, 16px) + var(--primer-control-medium-gap, 8px) - var(--primer-borderWidth-thin, 1px));padding-inline-end:var(--primer-control-medium-paddingInline-condensed, 8px);transition:none}.AppHeader .AppHeader-globalBar .AppHeader-search input[type=search]:placeholder-shown{background:transparent}.AppHeader .AppHeader-globalBar .AppHeader-search input[type=search]:not(:placeholder-shown){background:var(--color-canvas-default)}.AppHeader .AppHeader-globalBar .AppHeader-search input[type=search]::placeholder{color:transparent;opacity:1}.AppHeader .AppHeader-globalBar .AppHeader-search input[type=search]:focus{background:var(--color-canvas-default)}.AppHeader .AppHeader-globalBar .AppHeader-search input[type=search]:focus::placeholder{color:var(--color-fg-subtle)}.AppHeader .AppHeader-globalBar .AppHeader-search input[type=search]:focus:placeholder{color:var(--color-fg-subtle);opacity:1}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-action--trailing{position:absolute;top:var(--base-size-4, 4px);right:var(--base-size-4, 4px);display:grid;width:var(--primer-control-xsmall-size, 24px);height:var(--primer-control-xsmall-size, 24px);padding:0;color:var(--color-fg-muted);background:transparent;border:none;border-radius:var(--primer-borderRadius-small, 3px);align-items:center;justify-content:center}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-action--trailing:hover{background:var(--color-action-list-item-default-hover-bg)}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-action--trailing:active{background:var(--color-action-list-item-default-active-bg)}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-action--trailing::before{position:absolute;top:calc((var(--primer-control-xsmall-size, 24px) - var(--base-size-16, 16px))/2);left:calc(var(--base-size-4, 4px)*-1);display:block;width:var(--primer-borderWidth-thin, 1px);height:var(--base-size-16, 16px);content:"";background:var(--color-border-default)}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-action--trailing::after{position:absolute;top:50%;left:50%;width:100%;height:100%;min-height:var(--primer-control-medium-size, 32px);content:"";transform:translateX(-50%) translateY(-50%);min-width:var(--primer-control-medium-size, 32px)}@media(pointer: coarse){.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-action--trailing::after{min-width:var(--primer-control-minTarget-coarse, 44px);min-height:var(--primer-control-minTarget-coarse, 44px)}}.AppHeader .AppHeader-globalBar .AppHeader-search .AppHeader-search-action--trailing svg{color:inherit}.AppHeader .AppHeader-globalBar .AppHeader-divider{width:var(--primer-borderWidth-thin, 1px);height:var(--base-size-20, 20px);height:var(--base-size-20, 20px);margin:calc((var(--primer-control-medium-size, 32px) - var(--base-size-20, 20px))/2) 0;background:var(--color-border-default)}.AppHeader .AppHeader-globalBar .AppHeader-actions{display:grid;grid-auto-flow:column;gap:var(--primer-controlStack-medium-gap-auto, 8px)}.AppHeader .AppHeader-globalBar .AppHeader-actions::before{display:block;width:var(--primer-borderWidth-thin, 1px);height:var(--base-size-20, 20px);height:var(--base-size-20, 20px);content:"";background:var(--color-border-default);margin-block:calc((var(--primer-control-medium-size, 32px) - var(--base-size-20, 20px))/2)}@media(pointer: fine){.AppHeader .AppHeader-globalBar .AppHeader-actions::before{margin-inline:var(--base-size-4, 4px)}}@media(max-width: 543.98px){.AppHeader .AppHeader-globalBar .AppHeader-actions{display:none}}.AppHeader .AppHeader-localBar{padding:0 var(--base-size-16, 16px)}.AppHeader .AppHeader-item{flex:0 0 auto;background:#ffb6c1}.AppHeader .AppHeader-item--full{flex-grow:1}.AppHeader .AppHeader-button{position:relative;display:grid;width:var(--base-size-32, 32px);height:var(--base-size-32, 32px);color:var(--color-fg-muted);background:transparent;border:var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);border-radius:var(--primer-borderRadius-medium, 6px);align-items:center;justify-content:center}.AppHeader .AppHeader-button svg{display:block !important;width:var(--base-size-16, 16px);height:var(--base-size-16, 16px);color:inherit !important}.AppHeader .AppHeader-button:hover{background:var(--color-action-list-item-default-hover-bg)}.AppHeader .AppHeader-button:active{background:var(--color-action-list-item-default-active-bg)}@media(pointer: coarse){.AppHeader .AppHeader-button::after{position:absolute;top:50%;left:50%;width:100%;height:100%;min-height:var(--primer-control-minTarget-coarse, 44px);content:"";transform:translateX(-50%) translateY(-50%);min-width:var(--primer-control-minTarget-coarse, 44px)}}.AppHeader .AppHeader-button.AppHeader-button--hasIndicator::before{position:absolute;top:calc(var(--base-size-4, 4px)/-2);right:calc(var(--base-size-4, 4px)/-2);display:block;width:var(--base-size-8, 8px);height:var(--base-size-8, 8px);content:"";background:var(--color-accent-fg);border-radius:50%;box-shadow:0 0 0 calc(var(--base-size-4, 4px)/2) var(--AppHeader-bg)}[data-target="animated-image.originalImage"],[data-target="animated-image.replacedImage"],[data-a11y-animated-images=system] [data-animated-image],[data-a11y-animated-images=disabled] [data-animated-image]{display:none}[data-target="animated-image.originalImage"]{width:100%}animated-image[data-catalyst]{display:inline-block}animated-image{max-width:100%}.AnimatedImagePlayer{position:relative;display:inline-block;width:100%}.AnimatedImagePlayer>a:not(.AnimatedImagePlayer-images){display:none}.AnimatedImagePlayer-controls{position:absolute;top:8px;right:8px;z-index:2;display:none;padding:4px;list-style:none;background:var(--color-canvas-default);border-radius:6px;box-shadow:var(--color-overlay-shadow);opacity:1;transition:opacity 80ms linear}.AnimatedImagePlayer-images .AnimatedImagePlayer-animatedImage{cursor:pointer}.AnimatedImagePlayer-button{display:flex;align-items:center;justify-content:center;width:32px;height:32px;cursor:pointer;background-color:var(--color-canvas-default);border:0;border-radius:6px}@media(hover: hover)and (pointer: fine){.AnimatedImagePlayer-button:hover{background-color:var(--color-btn-hover-bg);transition:background-color 200ms linear}}.AnimatedImagePlayer-images{display:block;width:100%;padding:0;margin:0;background:none;border:0;outline:none;outline-offset:0}.AnimatedImagePlayer-images:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:0}.AnimatedImagePlayer-button:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px}.AnimatedImagePlayer-button svg{width:16px;height:16px;pointer-events:none;fill:var(--color-fg-muted)}.AnimatedImagePlayer-button:hover svg{fill:var(--color-fg-default)}.AnimatedImagePlayer-stillImage{position:absolute;top:0;left:0;z-index:1;display:none;width:100%;height:100%;pointer-events:none}.AnimatedImagePlayer-animatedImage{width:100%;max-width:100%;max-height:100%}.AnimatedImagePlayer.playing .AnimatedImagePlayer-controls{opacity:0;transition-delay:1s}.AnimatedImagePlayer.enabled .AnimatedImagePlayer-animatedImage{opacity:0 !important}.AnimatedImagePlayer.enabled.playing .AnimatedImagePlayer-animatedImage{opacity:1 !important}.AnimatedImagePlayer.playing.player-focused .AnimatedImagePlayer-controls{opacity:1;transition-delay:0ms}@media(hover: hover)and (pointer: fine){.AnimatedImagePlayer.playing:hover .AnimatedImagePlayer-controls{opacity:1;transition-delay:0s}}.AnimatedImagePlayer.enabled.playing .AnimatedImagePlayer-stillImage,.AnimatedImagePlayer.enabled.playing .icon-play,.AnimatedImagePlayer .icon-pause{display:none}.AnimatedImagePlayer .icon-play,.AnimatedImagePlayer.enabled.playing .icon-pause,.AnimatedImagePlayer.enabled .AnimatedImagePlayer-stillImage{display:block}.AnimatedImagePlayer.enabled .AnimatedImagePlayer-controls{display:flex}.emoji-tab.UnderlineNav-item{margin-right:4px}.emoji-tab[role=tab][aria-selected=true]{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default);border-bottom-color:var(--color-severe-emphasis)}.emoji-tab[role=tab][aria-selected=true] .UnderlineNav-octicon{color:var(--color-fg-muted)}.selected-emoji{z-index:100;background-color:var(--color-accent-emphasis)}.emoji-picker-container .emoji-picker-tab g-emoji{margin-right:auto;margin-left:4px}.emoji-tab .emoji-icon{width:auto}.emoji-picker-container{z-index:1;width:395px}.emoji-picker-tab{height:136px;padding-top:8px}.emoji-picker-emoji-width{width:32px;height:28px}.emoji-picker-tab .btn-outline:not(:hover){background-color:transparent}.emoji-picker-list{list-style:none}.notification-shelf{z-index:34}.notification-shelf.is-stuck{z-index:999}@media(max-width: 767px){.notifications-v2 .commit-ref .css-truncate-target{word-break:break-all;white-space:normal}}@media(max-width: 543px){.notifications-v2 .Box{border-right:0;border-left:0;border-radius:0}}@media(max-width: 543px){.notifications-v2 .Box .Box-header{border-right:0 !important;border-left:0 !important;border-radius:0 !important}}@media(max-width: 767px){.notifications-v2 .AvatarStack--right{width:auto !important;min-width:auto !important;margin-left:53px !important}}@media(max-width: 767px){.notifications-v2 .AvatarStack--right .AvatarStack-body{position:relative !important;right:unset !important;margin-right:8px;flex-direction:row !important}}@media(max-width: 767px){.notifications-v2 .AvatarStack-body .avatar{position:relative !important;margin-right:-12px !important;margin-left:0 !important;border-right:1px solid #fff !important;border-left:0 !important}}.notifications-v2 .thread-subscription-status{background-color:transparent !important}.notifications-v2 .notification-action-mark-archived,.notifications-v2 .notification-action-mark-unread,.notifications-v2 .notification-action-star,.notifications-v2 .notification-action-unsubscribe{display:block !important}.notifications-v2 .notification-action-mark-read,.notifications-v2 .notification-action-mark-unarchived,.notifications-v2 .notification-action-subscribe,.notifications-v2 .notification-action-unstar,.notifications-v2 .notification-is-starred-icon{display:none !important}.notifications-v2 .notification-unsubscribed .notification-action-unsubscribe{display:none !important}.notifications-v2 .notification-unsubscribed .notification-action-subscribe{display:block !important}.notifications-v2 .notification-unread .notification-action-mark-read{display:block !important}.notifications-v2 .notification-unread .notification-action-mark-unread{display:none !important}.notifications-v2 .notification-archived .notification-action-mark-archived,.notifications-v2 .notification-archived .notification-action-mark-read,.notifications-v2 .notification-archived .notification-action-mark-unread{display:none !important}.notifications-v2 .notification-archived .notification-action-mark-unarchived{display:block !important}.notifications-v2 .notification-starred .notification-action-star{display:none !important}.notifications-v2 .notification-starred .notification-is-starred-icon{display:inline-block !important}.notifications-v2 .notification-starred .notification-action-unstar{display:block !important}.notifications-v2 .thread-subscribe-form{display:none !important}.notifications .read .avatar img{opacity:.5}.notifications .read .undo{display:block}.notifications .read .delete{visibility:hidden}.notifications .read[aria-selected=true],.notifications .read.navigation-focus{background-color:#f5f9fc}.notifications .muted .unmute{display:block}.notifications .muted .mute{display:none}.notifications .unmute{display:none}.notifications-list{float:left;width:100%}.thread-subscription-status{padding:8px;margin:40px 0 16px;color:var(--color-fg-muted);border:1px solid var(--color-border-default);border-radius:6px}.thread-subscription-status .btn-sm>.octicon{margin-right:1px}.thread-subscription-status .reason{display:inline-block;margin:0 8px;vertical-align:middle}.thread-subscription-status .thread-subscribe-form{display:inline-block;vertical-align:middle}.subscription .loading{opacity:.5}.progress-pjax-loader{z-index:99999;height:2px !important;background:transparent;opacity:0;transition:opacity .4s linear .4s}.progress-pjax-loader.is-loading{opacity:1;transition:none}.progress-pjax-loader>.progress-pjax-loader-bar{background-color:#79b8ff;transition:width .4s ease}.starred .starred-button-icon{color:var(--color-scale-yellow-2)}.user-lists-menu-action{color:var(--color-fg-default)}.user-lists-menu-action:hover:not(:disabled){color:var(--color-fg-default);background-color:var(--color-canvas-subtle)}.user-lists-menu-action:focus:not(:disabled){color:var(--color-fg-default);outline:2px solid var(--color-accent-emphasis);outline-offset:2px}.starring-container .BtnGroup-parent:active{z-index:auto}.shelf{padding-top:16px;margin-bottom:16px;background-color:var(--color-canvas-default);border-bottom:1px solid var(--color-border-muted)}.shelf .container{position:relative}.org-sso,.business-sso{width:340px;margin:0 auto}.org-sso .sso-title,.business-sso .sso-title{font-size:24px;font-weight:var(--base-text-weight-light, 300);letter-spacing:-0.5px}.org-sso .org-sso-panel,.org-sso .business-sso-panel,.business-sso .org-sso-panel,.business-sso .business-sso-panel{padding:16px;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px}.org-sso .sso-recovery-callout,.business-sso .sso-recovery-callout{padding:16px 8px;text-align:center;border:1px solid var(--color-border-muted);border-radius:6px}.sso-modal{padding:16px}.sso-modal .org-sso,.sso-modal .business-sso{width:auto}.sso-modal .org-sso .org-sso-panel,.sso-modal .business-sso .business-sso-panel{border:0}.sso-modal .sso-prompt-success,.sso-modal .sso-prompt-error{display:none}.sso-modal.success .sso-prompt-default{display:none}.sso-modal.success .sso-prompt-success{display:block}.sso-modal.error .sso-prompt-default{display:none}.sso-modal.error .sso-prompt-error{display:block}.sso-modal.error .flash-error{margin-right:-32px;margin-left:-32px;border-right:0;border-left:0;border-radius:0}.tag-input-container{position:relative}.tag-input-container .focus{border-color:transparent !important;box-shadow:none !important}.tag-input-container .suggester{position:absolute;z-index:100;width:100%;margin-top:-1px}.tag-input-container ul{list-style:none}.tag-input input{float:left;padding-left:2px;margin:0;background:none;border:0;box-shadow:none}.tag-input input:focus{box-shadow:none}.task-list-item{list-style-type:none}.task-list-item label{font-weight:var(--base-text-weight-normal, 400)}.task-list-item.enabled label{cursor:pointer}.task-list-item+.task-list-item{margin-top:4px}.task-list-item .handle{display:none}.task-list-item-checkbox{margin:0 .2em .25em -1.4em;vertical-align:middle}.contains-task-list:dir(rtl) .task-list-item-checkbox{margin:0 -1.6em .25em .2em}.convert-to-issue-button{top:2px;right:4px;padding:0 2px;margin-right:8px;-webkit-user-select:none;user-select:none;background-color:var(--color-canvas-subtle)}.convert-to-issue-button .octicon{fill:var(--color-fg-default)}.convert-to-issue-button:hover .octicon,.convert-to-issue-button:focus .octicon{fill:var(--color-accent-fg)}.reorderable-task-lists .markdown-body .contains-task-list{padding:0}.reorderable-task-lists .markdown-body li:not(.task-list-item){margin-left:24px}.reorderable-task-lists .markdown-body ol:not(.contains-task-list) li,.reorderable-task-lists .markdown-body ul:not(.contains-task-list) li{margin-left:0}.reorderable-task-lists .markdown-body .task-list-item{padding:2px 15px 2px 42px;margin-right:-15px;margin-left:-15px;line-height:1.5;border:0}.reorderable-task-lists .markdown-body .task-list-item+.task-list-item{margin-top:0}.reorderable-task-lists .markdown-body .task-list-item .handle{display:block;float:left;width:20px;padding:2px 0 0 2px;margin-left:-43px;opacity:0}.reorderable-task-lists .markdown-body .task-list-item .drag-handle{fill:var(--color-fg-default)}.reorderable-task-lists .markdown-body .task-list-item.hovered>.handle{opacity:1}.reorderable-task-lists .markdown-body .task-list-item.is-dragging{opacity:0}.reorderable-task-lists .markdown-body .contains-task-list:dir(rtl) .task-list-item{margin-right:0}.comment-body .reference{font-weight:var(--base-text-weight-semibold, 600);white-space:nowrap}.comment-body .issue-link{white-space:normal}.comment-body .issue-link .issue-shorthand{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.comment-body .issue-link:hover .issue-shorthand,.comment-body .issue-link:focus .issue-shorthand{color:var(--color-accent-fg)}.review-comment-contents .markdown-body .task-list-item{padding-left:42px;margin-right:-12px;margin-left:-12px;border-top-left-radius:6px;border-bottom-left-radius:6px}.convert-to-issue-enabled .task-list-item .contains-task-list{padding:4px 15px 0 43px;margin:0 -15px 0 -42px}.convert-to-issue-enabled .task-list-item.hovered{background-color:var(--color-canvas-subtle)}.convert-to-issue-enabled .task-list-item.hovered .contains-task-list{background-color:var(--color-canvas-default)}.convert-to-issue-enabled .task-list-item.hovered>.convert-to-issue-button{z-index:20;width:auto;height:auto;overflow:visible;clip:auto}.convert-to-issue-enabled .task-list-item.hovered>.convert-to-issue-button svg{overflow:visible}.convert-to-issue-enabled .task-list-item.is-loading{color:var(--color-fg-muted);background-color:var(--color-accent-subtle);border-top:1px solid var(--color-accent-subtle);border-bottom:1px solid var(--color-canvas-default);border-left:1px solid var(--color-canvas-default)}.convert-to-issue-enabled .task-list-item.is-loading ul{color:var(--color-fg-default);background-color:var(--color-canvas-default)}.convert-to-issue-enabled .task-list-item.is-loading>.handle{opacity:0}.task-list-item-convert-container{position:absolute !important;top:calc(100% - 4px);right:0;left:0;display:none;margin-top:0}.task-list-item-convert-container:hover,.task-list-item-convert-container:focus{display:block}.task-list-item-convert-button-container{top:4px;right:0;left:auto;width:auto}.contains-task-list{position:relative}.contains-task-list:hover .task-list-item-convert-container,.contains-task-list:focus-within .task-list-item-convert-container{display:block;width:auto;height:24px;overflow:visible;clip:auto}.convert-to-block-button{margin:0 4px}.toolbar-commenting .dropdown-menu-s{width:100px}.toolbar-commenting .dropdown-item{font-weight:var(--base-text-weight-semibold, 600);line-height:1em;background:none;border:0}.toolbar-commenting .dropdown-item:hover{color:var(--color-accent-fg)}.toolbar-commenting .dropdown-item:focus{color:var(--color-accent-fg);outline:none}.toolbar-item{display:block;float:left;padding:4px;cursor:pointer}.toolbar-item.dropdown,.toolbar-item.select-menu{padding:0}.toolbar-item .select-menu-modal{margin-top:2px}.toolbar-item .select-menu-item{padding-left:8px}.topic-tag{display:inline-block;padding:.3em .9em;margin:0 .5em .5em 0;white-space:nowrap;background-color:var(--color-accent-subtle);border-radius:6px}.topic-tag-link:hover{text-decoration:none;background-color:#def}.delete-topic-button,.delete-topic-link{display:inline-block;width:26px;color:var(--color-fg-muted);background-color:var(--color-accent-subtle);border-top:0;border-right:0;border-bottom:0;border-left:1px solid #b4d9ff;border-top-right-radius:6px;border-bottom-right-radius:6px}.delete-topic-button:hover,.delete-topic-link:hover{background-color:#def}.topic-tag-action:hover .delete-topic-link{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.topic-tag-outline{background:transparent;box-shadow:inset 0 0 0 1px #c8e1ff}.delete-topic-link{padding-right:8px;padding-left:8px;margin-left:8px;line-height:1.75}.delete-topic-link:hover{text-decoration:none}.invalid-topic .delete-topic-button{color:var(--color-fg-default);background-color:var(--color-danger-subtle);border-left-color:var(--color-danger-emphasis)}.invalid-topic .delete-topic-button:hover{background-color:#ffc8ce}.topic-tag-action{display:inline-flex;align-items:center;padding-left:.8em;margin:.4em .4em 0 0;background-color:var(--color-accent-subtle);border-radius:6px}.topic-tag-action.invalid-topic{color:var(--color-fg-default);background-color:var(--color-danger-subtle);border-color:var(--color-danger-emphasis)}.topic-tag-action .add-topic-button,.topic-tag-action .remove-topic-button{display:inline-block;width:26px;font-size:14px;color:var(--color-fg-muted);background-color:var(--color-accent-subtle);border-top:0;border-right:0;border-bottom:0;border-left:1px solid #b4d9ff}.topic-tag-action .add-topic-button:hover,.topic-tag-action .remove-topic-button:hover{color:var(--color-fg-on-emphasis)}.topic-tag-action .add-topic-button:hover{background-color:var(--color-success-emphasis)}.topic-tag-action .remove-topic-button{border-right:0;border-top-right-radius:6px;border-bottom-right-radius:6px}.topic-tag-action .remove-topic-button:hover{background-color:var(--color-danger-emphasis)}.topic-input-container .tag-input{width:908px;cursor:text}.topic-input-container .tag-input.org-repo-tag-input{width:100%}.topic-input-container .tag-input .tag-input-inner{min-height:26px;background-image:none}.topic-input-container .topic-tag{margin-top:2px}.topic .css-truncate-target{max-width:75%}.topic-list .topic-list-item+.topic-list-item{border-top:1px solid var(--color-border-default)}.topic-box .starred{color:var(--color-attention-fg);border:0}.topic-box .unstarred{color:var(--color-fg-muted);border:0}.user-status-suggestions{height:98px;transition:height 100ms ease-out,opacity 200ms ease-in}.user-status-suggestions.collapsed{height:0;opacity:0}.user-status-container,.user-status-container .team-mention,.user-status-container .user-mention{white-space:normal}.user-status-container{word-break:break-word;word-wrap:break-word}.user-status-container .input-group-button .btn{width:46px;height:34px;line-height:0}.user-status-container .input-group-button g-emoji{font-size:1.3em;line-height:18px}.user-status-container .team-mention,.user-status-container .user-mention{white-space:normal}.user-status-container img.emoji{width:18px;height:18px}.emoji-status-width{width:20px}.user-status-org-button .user-status-org-detail{color:var(--color-fg-muted)}.user-status-org-button:hover .user-status-org-detail,.user-status-org-button:focus .user-status-org-detail{color:var(--color-fg-on-emphasis)}.user-status-org-button.selected{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.user-status-org-button.selected .user-status-org-detail{color:var(--color-fg-on-emphasis)}.user-status-limited-availability-compact{width:8px;height:8px;background-color:var(--color-attention-emphasis)}.user-status-message-wrapper{color:var(--color-fg-default)}.toggle-user-status-edit:hover .user-status-message-wrapper,.toggle-user-status-edit:focus .user-status-message-wrapper{color:var(--color-accent-fg)}.user-status-message-wrapper div{display:inline}.user-status-header g-emoji{font-size:1.25em}.user-status-message-wrapper .g-emoji{display:inline-block}.user-status-limited-availability-container{margin-top:16px;margin-bottom:16px}@media only screen and (max-height: 560px){.user-status-suggestions{display:none}.user-status-limited-availability-container{margin-top:8px;margin-bottom:8px}}.user-status-circle-badge{background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:2em;box-shadow:var(--color-shadow-small)}.command-palette{box-shadow:var(--color-overlay-shadow)}@media(min-width: 768px){.command-palette-details-dialog{width:512px}}@media(min-width: 1012px){.command-palette-details-dialog{width:640px}}@media(min-width: 1280px){.command-palette-details-dialog{width:720px}}.page-stack-transition-height{overflow-y:scroll;transition-timing-function:cubic-bezier(0.25, 0.46, 0.45, 0.94);transition-duration:.2s;transition-property:max-height,min-height}.page-stack-transition-height.no-transition{transition-duration:0s}.command-palette-input-group{position:relative;z-index:0;padding-left:0;color:var(--color-fg-subtle)}.command-palette-input-group .no-focus-indicator:focus,.command-palette-input-group .no-focus-indicator:focus-visible{border:0 !important;outline:none !important}.command-palette-input-group .command-palette-typeahead{position:absolute;z-index:1;padding:inherit;pointer-events:none}.command-palette-input-group .command-palette-typeahead .typeahead-segment{white-space:pre}.command-palette-input-group .command-palette-typeahead .typeahead-segment.input-mirror{opacity:0}.command-palette-input-group .typeahead-input{padding:inherit}.command-palette-input-clear-button{color:var(--color-fg-subtle)}.command-palette-input-clear-button:hover{color:var(--color-fg-muted)}themed-picture{visibility:hidden}.SidePanel>.Overlay-header>.Overlay-headerContentWrap>.Overlay-titleWrap{padding-top:8px}.SidePanel>.Overlay-header>.Overlay-headerContentWrap>.Overlay-actionWrap{padding:8px}.is-auto-complete-loading :not(input).form-control{padding-right:0;background-image:none}.ActionBar{position:relative;display:flex !important;min-width:0;align-items:center;flex-grow:1;flex-shrink:1;box-sizing:content-box;overflow:hidden;justify-content:flex-end}.ActionBar-item-container{display:flex;box-sizing:content-box;align-items:center;flex-shrink:0;flex-grow:0}.ActionBar-item{position:relative;flex-shrink:0}.ActionBar-more-menu{flex-shrink:0}.ActionBar-divider{height:calc(var(--primer-control-medium-size, 32px)/2);margin:0 var(--primer-controlStack-medium-gap-condensed, 8px);border-left:var(--primer-borderWidth-thin, 1px) solid var(--color-border-subtle)}.ActionBar--small .ActionBar-divider{margin:0 var(--primer-controlStack-small-gap-condensed, 8px)}.ActionBar--large .ActionBar-divider{margin:0 var(--primer-controlStack-large-gap-condensed, 8px)}@media(pointer: coarse){.ActionBar .ActionBar-item-container{gap:calc(var(--primer-control-minTarget-coarse, 44px) - var(--primer-control-medium-size, 32px))}.ActionBar--small .ActionBar-item-container{gap:calc(var(--primer-control-minTarget-coarse, 44px) - var(--primer-control-small-size, 28px))}.ActionBar--large .ActionBar-item-container{gap:calc(var(--primer-control-minTarget-coarse, 44px) - var(--primer-control-large-size, 40px))}}.ActionMenu{position:absolute;z-index:999;display:none;background-color:var(--color-canvas-overlay)}.CommentBox-header{display:flex;background-color:var(--color-canvas-subtle);border-top-left-radius:6px;border-top-right-radius:6px}.CommentBox-header.CommentBox-header{margin-bottom:0}.CommentBox-header .tabnav-tabs{margin-top:-1px;margin-left:-1px;flex-shrink:0}.CommentBox-toolbar{display:flex;min-width:0;margin-right:var(--base-size-4, 4px);flex-shrink:1;flex-grow:1}.CommentBox-toolbar .Button--invisible{color:var(--color-fg-muted)}.CommentBox-input{display:block;min-height:100px;padding:var(--primer-stack-padding-normal, 16px);line-height:1.5;color:var(--color-fg-default);resize:vertical;border:0}.CommentBox-input.CommentBox-input.CommentBox-input:focus{box-shadow:none}.CommentBox:has(.CommentBox-input:focus,.Button:active){outline:2px solid var(--color-accent-emphasis);outline-offset:-1px}@supports not selector(.CommentBox:has(*:focus)){.CommentBox:focus-within{outline:2px solid var(--color-accent-emphasis);outline-offset:-1px}}.CommentBox .dragover .CommentBox-input,.CommentBox .dragover .CommentBox-input:focus{border-radius:10px;outline:2px dashed var(--color-border-default);outline-offset:-6px;box-shadow:none}.PageHeader{display:grid;grid-template-columns:1fr;grid-template-areas:"contextBar" "titleBar" "description" "navigation";margin-bottom:24px}@media(max-width: 768px){.PageHeader{margin-bottom:16px}}.PageHeader .PageHeader-contextBar{display:flex;column-gap:16px;align-items:center}.PageHeader .PageHeader-contextBar .PageHeader-parentLink{flex:1 1 auto}.PageHeader .PageHeader-parentLink a{display:inline-grid;grid-template-columns:min-content auto;gap:4px;align-items:center;padding:4px 8px;margin-left:-8px;font-size:14px;line-height:1.25;color:var(--color-fg-muted);border-radius:6px}.PageHeader .PageHeader-parentLink a:hover{color:var(--color-fg-default);text-decoration:none;background:var(--color-canvas-subtle)}.PageHeader .PageHeader-parentLink .PageHeader-parentLink-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.PageHeader .PageHeader-titleBar{display:flex;column-gap:16px}.PageHeader .PageHeader-titleBar .PageHeader-titleWrap{flex:1 1 auto}.PageHeader .PageHeader-titleBar .PageHeader-actions{flex:0 0 auto}.PageHeader .PageHeader-titleWrap{display:flex;column-gap:8px}.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--large{font:400 var(--primer-text-title-size-large, 2rem) -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--large .PageHeader-backButton{height:var(--primer-text-title-lineHeight-large, 2.5rem)}.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--large .PageHeader-leadingVisual{max-height:var(--primer-text-title-lineHeight-large, 2.5rem)}.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--medium{font:600 var(--primer-text-title-size-medium, 1.25rem) -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--subtitle{font:400 var(--primer-text-subtitle-size, 1.25rem) -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}@media(max-width: 768px){.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--large{font:600 var(--primer-text-title-size-medium, 1.25rem) -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--medium{font:600 var(--primer-text-title-size-medium, 1.25rem) -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--subtitle{font:400 var(--primer-text-title-size-medium, 1.25rem) -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}}.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--hasLeadingVisual{display:flex}.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--hasBackButton:first-child{margin-left:-4px}@media(min-width: 768px){.PageHeader .PageHeader-titleWrap.PageHeader-titleWrap--hasBackButton:first-child{display:flex !important;align-items:center;margin-left:8px;grid-template-columns:min-content auto}}.PageHeader .PageHeader-titleWrap h1,.PageHeader .PageHeader-titleWrap h2,.PageHeader .PageHeader-titleWrap h3{font-size:inherit;font-weight:inherit;line-height:inherit}.PageHeader .PageHeader-titleWrap .PageHeader-title{display:inline-grid;grid-auto-flow:column;grid-template-columns:auto;align-items:center;gap:8px}.PageHeader .PageHeader-titleWrap .PageHeader-leadingVisual{display:grid;align-items:center;max-height:var(--primer-text-title-lineHeight-large, 1.5)}.PageHeader .PageHeader-titleWrap .PageHeader-trailingVisual{display:grid;align-items:center;max-height:var(--primer-text-title-lineHeight-large, 1.5)}.PageHeader .PageHeader-titleWrap .PageHeader-backButton{position:relative;display:grid;width:16px;height:var(--primer-text-title-lineHeight-medium, 1.5rem);align-items:center;padding:0;color:inherit;border-radius:6px}@media(max-width: 768px){.PageHeader .PageHeader-titleWrap .PageHeader-backButton{display:none}}.PageHeader .PageHeader-description{margin-top:8px;overflow:auto}.PageHeader .PageHeader-navigation{margin-top:16px;overflow:auto}.QueryBuilder-StyledInput{display:inline-flex;width:100%;min-height:var(--primer-control-medium-size, 32px);color:var(--color-fg-default);vertical-align:middle;cursor:text;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:var(--primer-borderRadius-medium, 6px);outline:none;align-items:center;gap:4px}.QueryBuilder-focus{border-color:transparent;outline:2px solid var(--color-accent-fg);box-shadow:inset 0 0 1px transparent}.QueryBuilder-StyledInputContainer{position:relative;display:flex;overflow-x:auto;overflow-y:hidden;font-size:inherit;align-items:center;-ms-overflow-style:none;scrollbar-width:none;flex:1;align-self:stretch}.QueryBuilder-StyledInputContainer::-webkit-scrollbar{display:none}.QueryBuilder-StyledInputContent{position:absolute;display:inline-flex;padding:0;word-break:break-word;white-space:pre;-webkit-user-select:none;user-select:none;flex:1}.QueryBuilder-leadingVisualWrap{margin:4px 4px 4px 8px;color:var(--color-fg-muted)}.QueryBuilder-spacer{width:8px;height:100%}.QueryBuilder-InputWrapper{width:100%;align-self:stretch}.QueryBuilder-Sizer{position:absolute;top:0;left:0;height:0;overflow:scroll;white-space:pre;visibility:hidden}.QueryBuilder-Input{position:relative;display:flex;min-width:100%;padding:0;overflow-x:auto;overflow-y:hidden;color:transparent;resize:none;background:transparent;border:0;outline:none;caret-color:var(--color-fg-default)}.QueryBuilder-Input:focus{border:0 !important;box-shadow:none !important}.QueryBuilder-ListItem{display:grid;grid-template-columns:max-content minmax(0, auto) max-content;grid-template-areas:"leadingVisual label trailingLabel";-webkit-user-select:unset;user-select:unset}.QueryBuilder-ListItem-link{color:inherit;text-decoration:none !important}.QueryBuilder-ListItem-trailing{grid-area:trailingLabel}.QueryBuilder-ListWrap{max-height:20em;padding:8px;overflow-x:hidden;overflow-y:auto !important}.QueryBuilder [data-type=filter-value]{color:var(--color-accent-fg);background-color:var(--color-accent-subtle);border-radius:3px}.QueryBuilder .ActionList-sectionDivider:not(:empty){padding:0}@media(min-width: 1012px){.hx_actions-sidebar{max-width:320px}}.hx_anim-fade-out{animation-name:hx-fade-out;animation-duration:1s;animation-fill-mode:forwards;animation-timing-function:ease-out}@keyframes hx-fade-out{0%{opacity:1}100%{opacity:0}}.AvatarStack--large{min-width:44px;height:32px}.AvatarStack--large.AvatarStack--two{min-width:48px}.AvatarStack--large.AvatarStack--three-plus{min-width:52px}.AvatarStack--large .AvatarStack-body .avatar{width:32px;height:32px;margin-right:-28px}.AvatarStack--large .AvatarStack-body:hover .avatar{margin-right:4px}.AvatarStack--large .avatar.avatar-more::before{width:32px}.AvatarStack--large .avatar.avatar-more::after{width:30px}.AvatarStack--large .avatar.avatar-more::after,.AvatarStack--large .avatar.avatar-more::before{height:32px}.hx_avatar_stack_commit .AvatarStack{min-width:24px;height:24px}.hx_avatar_stack_commit .AvatarStack .avatar{width:24px;height:24px}.hx_avatar_stack_commit .AvatarStack.AvatarStack--two{min-width:40px}.hx_avatar_stack_commit .AvatarStack.AvatarStack--three-plus{min-width:44px}.hx_flex-avatar-stack{display:flex;align-items:center}.hx_flex-avatar-stack-item{min-width:0;max-width:24px}.hx_flex-avatar-stack-item .avatar{display:block;background-color:var(--color-canvas-default);border:2px solid var(--color-canvas-default);box-shadow:none}.hx_flex-avatar-stack-item:last-of-type{flex-shrink:0;max-width:none}.Box-row--focus-gray.navigation-focus .AvatarStack-body{background-color:var(--color-canvas-subtle)}.AvatarStack-body:not(:hover){background-color:transparent}.AvatarStack--three-plus.AvatarStack--three-plus .avatar-more{display:none}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body .avatar:nth-child(n+4){display:flex;opacity:1}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body:not(:hover) .avatar:nth-of-type(n + 6){display:none;opacity:0}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body>.avatar:nth-of-type(1){z-index:5}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body>.avatar:nth-of-type(2){z-index:4}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body>.avatar:nth-of-type(3){z-index:3}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body>.avatar:nth-of-type(4){z-index:2}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body>.avatar:nth-of-type(5){z-index:1}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body:not(:hover)>.avatar-more+.avatar:nth-of-type(3) img{opacity:.5}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body:not(:hover)>.avatar-more~.avatar:nth-of-type(4) img{opacity:.33}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body:not(:hover)>.avatar-more~.avatar:nth-of-type(5) img{opacity:.25}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body:not(:hover)>.avatar-more+.avatar:nth-of-type(3){margin-right:0;margin-left:-6px}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body:not(:hover)>.avatar-more~.avatar:nth-of-type(4){margin-right:0;margin-left:-18px}.AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body:not(:hover)>.avatar-more~.avatar:nth-of-type(5){margin-right:0;margin-left:-18px}.AvatarStack--three-plus.AvatarStack--three-plus.AvatarStack--right .AvatarStack-body:not(:hover)>.avatar-more+.avatar:nth-of-type(3){margin-right:-6px;margin-left:0}.AvatarStack--three-plus.AvatarStack--three-plus.AvatarStack--right .AvatarStack-body:not(:hover)>.avatar-more~.avatar:nth-of-type(4){margin-right:-18px;margin-left:0}.AvatarStack--three-plus.AvatarStack--three-plus.AvatarStack--right .AvatarStack-body:not(:hover)>.avatar-more~.avatar:nth-of-type(5){margin-right:-18px;margin-left:0}.AvatarStack--three-plus.AvatarStack--three-plus.AvatarStack--large .AvatarStack-body:not(:hover)>.avatar-more+.avatar:nth-of-type(3){margin-right:0;margin-left:-2px}.AvatarStack--three-plus.AvatarStack--three-plus.AvatarStack--large .AvatarStack-body:not(:hover)>.avatar-more~.avatar:nth-of-type(4){margin-right:0;margin-left:-30px}.AvatarStack--three-plus.AvatarStack--three-plus.AvatarStack--large .AvatarStack-body:not(:hover)>.avatar-more~.avatar:nth-of-type(5){margin-right:0;margin-left:-30px}.hx_avatar_stack_commit .AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body:not(:hover)>.avatar-more+.avatar:nth-of-type(3){margin-right:0;margin-left:-10px}.hx_avatar_stack_commit .AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body:not(:hover)>.avatar-more~.avatar:nth-of-type(4){margin-right:0;margin-left:-21px}.hx_avatar_stack_commit .AvatarStack--three-plus.AvatarStack--three-plus .AvatarStack-body:not(:hover)>.avatar-more~.avatar:nth-of-type(5){margin-right:0;margin-left:-21px}.hx_badge-search-container{cursor:text}.hx_badge-search-container .hx_badge-input{border:0;outline:0;box-shadow:none}.hx_badge-search-container .hx_badge-input:focus{border:0 !important;box-shadow:none !important}.hx_badge-search-container .hx_badge-input::placeholder{font-size:12px}.hx_badge-search-container .hx_badge-input-inline{height:30px}.hx_badge{cursor:pointer}.hx_badge[aria-pressed=true]{color:var(--color-fg-on-emphasis) !important;background-color:var(--color-accent-emphasis) !important;border-color:var(--color-accent-emphasis) !important}.hx_Box--firstRowRounded0 .Box-row:first-of-type{border-top-left-radius:0;border-top-right-radius:0}.Box-row:first-of-type{border-top-color:transparent}.hx_Box-row--with-top-border:first-of-type{border-top-color:inherit}.Box--overlay [data-close-dialog],.Box-overlay--narrow [data-close-dialog],.Box-overlay--wide [data-close-dialog]{z-index:1}.dropdown-item.btn-link:disabled,.dropdown-item.btn-link:disabled:hover,.dropdown-item.btn-link[aria-disabled=true],.dropdown-item.btn-link[aria-disabled=true]:hover{background-color:transparent}@media(-webkit-min-device-pixel-ratio: 2)and (-webkit-min-device-pixel-ratio: 0), (-webkit-min-device-pixel-ratio: 2)and (min-resolution: 0.001dpcm){g-emoji{font-size:1.25em}}.hx_create-pr-button:hover{border-right-width:0}.hx_create-pr-button:hover+.BtnGroup-parent .BtnGroup-item{border-left-width:1px}summary[type=button].btn{-webkit-appearance:none;appearance:none}.form-control:-webkit-autofill{box-shadow:inset 0 0 0 32px var(--color-canvas-default) !important;-webkit-text-fill-color:var(--color-fg-default)}.form-control:-webkit-autofill:focus{box-shadow:inset 0 0 0 32px var(--color-canvas-default),0 0 0 2px var(--color-accent-fg) !important}::-webkit-calendar-picker-indicator{filter:invert(50%)}[data-color-mode=light][data-light-theme*=dark] ::selection,[data-color-mode=dark][data-dark-theme*=dark] ::selection{background-color:var(--color-accent-muted)}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=dark] ::selection{background-color:var(--color-accent-muted)}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=dark] ::selection{background-color:var(--color-accent-muted)}}@font-face{font-family:"Noto Sans";src:local(sans-serif);unicode-range:U+60}[data-color-mode=light][data-light-theme*=dark],[data-color-mode=dark][data-dark-theme*=dark]{--color-workflow-card-connector:var(--color-scale-gray-5);--color-workflow-card-connector-bg:var(--color-scale-gray-5);--color-workflow-card-connector-inactive:var(--color-border-default);--color-workflow-card-connector-inactive-bg:var(--color-border-default);--color-workflow-card-connector-highlight:var(--color-scale-blue-5);--color-workflow-card-connector-highlight-bg:var(--color-scale-blue-5);--color-workflow-card-bg:var(--color-scale-gray-7);--color-workflow-card-inactive-bg:var(--color-canvas-inset);--color-workflow-card-header-shadow:rgba(27, 31, 35, 0.04);--color-workflow-card-progress-complete-bg:var(--color-scale-blue-5);--color-workflow-card-progress-incomplete-bg:var(--color-scale-gray-6);--color-discussions-state-answered-icon:var(--color-scale-green-3);--color-bg-discussions-row-emoji-box:var(--color-scale-gray-6);--color-notifications-button-text:var(--color-scale-white);--color-notifications-button-hover-text:var(--color-scale-white);--color-notifications-button-hover-bg:var(--color-scale-blue-4);--color-notifications-row-read-bg:var(--color-canvas-default);--color-notifications-row-bg:var(--color-canvas-subtle);--color-icon-directory:var(--color-fg-muted);--color-checks-step-error-icon:var(--color-scale-red-4);--color-calendar-halloween-graph-day-L1-bg:#631c03;--color-calendar-halloween-graph-day-L2-bg:#bd561d;--color-calendar-halloween-graph-day-L3-bg:#fa7a18;--color-calendar-halloween-graph-day-L4-bg:#fddf68;--color-calendar-winter-graph-day-L1-bg:#0A3069;--color-calendar-winter-graph-day-L2-bg:#0969DA;--color-calendar-winter-graph-day-L3-bg:#54AEFF;--color-calendar-winter-graph-day-L4-bg:#B6E3FF;--color-calendar-graph-day-bg:var(--color-scale-gray-8);--color-calendar-graph-day-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L1-bg:#0e4429;--color-calendar-graph-day-L2-bg:#006d32;--color-calendar-graph-day-L3-bg:#26a641;--color-calendar-graph-day-L4-bg:#39d353;--color-calendar-graph-day-L1-border:rgba(255, 255, 255, 0.05);--color-calendar-graph-day-L2-border:rgba(255, 255, 255, 0.05);--color-calendar-graph-day-L3-border:rgba(255, 255, 255, 0.05);--color-calendar-graph-day-L4-border:rgba(255, 255, 255, 0.05);--color-user-mention-fg:var(--color-scale-yellow-0);--color-user-mention-bg:var(--color-scale-yellow-8);--color-text-white:var(--color-scale-white)}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=dark]{--color-workflow-card-connector:var(--color-scale-gray-5);--color-workflow-card-connector-bg:var(--color-scale-gray-5);--color-workflow-card-connector-inactive:var(--color-border-default);--color-workflow-card-connector-inactive-bg:var(--color-border-default);--color-workflow-card-connector-highlight:var(--color-scale-blue-5);--color-workflow-card-connector-highlight-bg:var(--color-scale-blue-5);--color-workflow-card-bg:var(--color-scale-gray-7);--color-workflow-card-inactive-bg:var(--color-canvas-inset);--color-workflow-card-header-shadow:rgba(27, 31, 35, 0.04);--color-workflow-card-progress-complete-bg:var(--color-scale-blue-5);--color-workflow-card-progress-incomplete-bg:var(--color-scale-gray-6);--color-discussions-state-answered-icon:var(--color-scale-green-3);--color-bg-discussions-row-emoji-box:var(--color-scale-gray-6);--color-notifications-button-text:var(--color-scale-white);--color-notifications-button-hover-text:var(--color-scale-white);--color-notifications-button-hover-bg:var(--color-scale-blue-4);--color-notifications-row-read-bg:var(--color-canvas-default);--color-notifications-row-bg:var(--color-canvas-subtle);--color-icon-directory:var(--color-fg-muted);--color-checks-step-error-icon:var(--color-scale-red-4);--color-calendar-halloween-graph-day-L1-bg:#631c03;--color-calendar-halloween-graph-day-L2-bg:#bd561d;--color-calendar-halloween-graph-day-L3-bg:#fa7a18;--color-calendar-halloween-graph-day-L4-bg:#fddf68;--color-calendar-winter-graph-day-L1-bg:#0A3069;--color-calendar-winter-graph-day-L2-bg:#0969DA;--color-calendar-winter-graph-day-L3-bg:#54AEFF;--color-calendar-winter-graph-day-L4-bg:#B6E3FF;--color-calendar-graph-day-bg:var(--color-scale-gray-8);--color-calendar-graph-day-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L1-bg:#0e4429;--color-calendar-graph-day-L2-bg:#006d32;--color-calendar-graph-day-L3-bg:#26a641;--color-calendar-graph-day-L4-bg:#39d353;--color-calendar-graph-day-L1-border:rgba(255, 255, 255, 0.05);--color-calendar-graph-day-L2-border:rgba(255, 255, 255, 0.05);--color-calendar-graph-day-L3-border:rgba(255, 255, 255, 0.05);--color-calendar-graph-day-L4-border:rgba(255, 255, 255, 0.05);--color-user-mention-fg:var(--color-scale-yellow-0);--color-user-mention-bg:var(--color-scale-yellow-8);--color-text-white:var(--color-scale-white)}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=dark]{--color-workflow-card-connector:var(--color-scale-gray-5);--color-workflow-card-connector-bg:var(--color-scale-gray-5);--color-workflow-card-connector-inactive:var(--color-border-default);--color-workflow-card-connector-inactive-bg:var(--color-border-default);--color-workflow-card-connector-highlight:var(--color-scale-blue-5);--color-workflow-card-connector-highlight-bg:var(--color-scale-blue-5);--color-workflow-card-bg:var(--color-scale-gray-7);--color-workflow-card-inactive-bg:var(--color-canvas-inset);--color-workflow-card-header-shadow:rgba(27, 31, 35, 0.04);--color-workflow-card-progress-complete-bg:var(--color-scale-blue-5);--color-workflow-card-progress-incomplete-bg:var(--color-scale-gray-6);--color-discussions-state-answered-icon:var(--color-scale-green-3);--color-bg-discussions-row-emoji-box:var(--color-scale-gray-6);--color-notifications-button-text:var(--color-scale-white);--color-notifications-button-hover-text:var(--color-scale-white);--color-notifications-button-hover-bg:var(--color-scale-blue-4);--color-notifications-row-read-bg:var(--color-canvas-default);--color-notifications-row-bg:var(--color-canvas-subtle);--color-icon-directory:var(--color-fg-muted);--color-checks-step-error-icon:var(--color-scale-red-4);--color-calendar-halloween-graph-day-L1-bg:#631c03;--color-calendar-halloween-graph-day-L2-bg:#bd561d;--color-calendar-halloween-graph-day-L3-bg:#fa7a18;--color-calendar-halloween-graph-day-L4-bg:#fddf68;--color-calendar-winter-graph-day-L1-bg:#0A3069;--color-calendar-winter-graph-day-L2-bg:#0969DA;--color-calendar-winter-graph-day-L3-bg:#54AEFF;--color-calendar-winter-graph-day-L4-bg:#B6E3FF;--color-calendar-graph-day-bg:var(--color-scale-gray-8);--color-calendar-graph-day-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L1-bg:#0e4429;--color-calendar-graph-day-L2-bg:#006d32;--color-calendar-graph-day-L3-bg:#26a641;--color-calendar-graph-day-L4-bg:#39d353;--color-calendar-graph-day-L1-border:rgba(255, 255, 255, 0.05);--color-calendar-graph-day-L2-border:rgba(255, 255, 255, 0.05);--color-calendar-graph-day-L3-border:rgba(255, 255, 255, 0.05);--color-calendar-graph-day-L4-border:rgba(255, 255, 255, 0.05);--color-user-mention-fg:var(--color-scale-yellow-0);--color-user-mention-bg:var(--color-scale-yellow-8);--color-text-white:var(--color-scale-white)}}:root,[data-color-mode=light][data-light-theme*=light],[data-color-mode=dark][data-dark-theme*=light]{--color-workflow-card-connector:var(--color-scale-gray-3);--color-workflow-card-connector-bg:var(--color-scale-gray-3);--color-workflow-card-connector-inactive:var(--color-border-default);--color-workflow-card-connector-inactive-bg:var(--color-border-default);--color-workflow-card-connector-highlight:var(--color-scale-blue-4);--color-workflow-card-connector-highlight-bg:var(--color-scale-blue-4);--color-workflow-card-bg:var(--color-scale-white);--color-workflow-card-inactive-bg:var(--color-canvas-inset);--color-workflow-card-header-shadow:rgba(0, 0, 0, 0);--color-workflow-card-progress-complete-bg:var(--color-scale-blue-4);--color-workflow-card-progress-incomplete-bg:var(--color-scale-gray-2);--color-discussions-state-answered-icon:var(--color-scale-white);--color-bg-discussions-row-emoji-box:rgba(209, 213, 218, 0.5);--color-notifications-button-text:var(--color-fg-muted);--color-notifications-button-hover-text:var(--color-fg-default);--color-notifications-button-hover-bg:var(--color-scale-gray-2);--color-notifications-row-read-bg:var(--color-canvas-subtle);--color-notifications-row-bg:var(--color-scale-white);--color-icon-directory:var(--color-scale-blue-3);--color-checks-step-error-icon:var(--color-scale-red-4);--color-calendar-halloween-graph-day-L1-bg:#ffee4a;--color-calendar-halloween-graph-day-L2-bg:#ffc501;--color-calendar-halloween-graph-day-L3-bg:#fe9600;--color-calendar-halloween-graph-day-L4-bg:#03001c;--color-calendar-winter-graph-day-L1-bg:#B6E3FF;--color-calendar-winter-graph-day-L2-bg:#54AEFF;--color-calendar-winter-graph-day-L3-bg:#0969DA;--color-calendar-winter-graph-day-L4-bg:#0A3069;--color-calendar-graph-day-bg:#ebedf0;--color-calendar-graph-day-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L1-bg:#9be9a8;--color-calendar-graph-day-L2-bg:#40c463;--color-calendar-graph-day-L3-bg:#30a14e;--color-calendar-graph-day-L4-bg:#216e39;--color-calendar-graph-day-L1-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L2-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L3-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L4-border:rgba(27, 31, 35, 0.06);--color-user-mention-fg:var(--color-fg-default);--color-user-mention-bg:var(--color-attention-subtle);--color-text-white:var(--color-scale-white)}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=light]{--color-workflow-card-connector:var(--color-scale-gray-3);--color-workflow-card-connector-bg:var(--color-scale-gray-3);--color-workflow-card-connector-inactive:var(--color-border-default);--color-workflow-card-connector-inactive-bg:var(--color-border-default);--color-workflow-card-connector-highlight:var(--color-scale-blue-4);--color-workflow-card-connector-highlight-bg:var(--color-scale-blue-4);--color-workflow-card-bg:var(--color-scale-white);--color-workflow-card-inactive-bg:var(--color-canvas-inset);--color-workflow-card-header-shadow:rgba(0, 0, 0, 0);--color-workflow-card-progress-complete-bg:var(--color-scale-blue-4);--color-workflow-card-progress-incomplete-bg:var(--color-scale-gray-2);--color-discussions-state-answered-icon:var(--color-scale-white);--color-bg-discussions-row-emoji-box:rgba(209, 213, 218, 0.5);--color-notifications-button-text:var(--color-fg-muted);--color-notifications-button-hover-text:var(--color-fg-default);--color-notifications-button-hover-bg:var(--color-scale-gray-2);--color-notifications-row-read-bg:var(--color-canvas-subtle);--color-notifications-row-bg:var(--color-scale-white);--color-icon-directory:var(--color-scale-blue-3);--color-checks-step-error-icon:var(--color-scale-red-4);--color-calendar-halloween-graph-day-L1-bg:#ffee4a;--color-calendar-halloween-graph-day-L2-bg:#ffc501;--color-calendar-halloween-graph-day-L3-bg:#fe9600;--color-calendar-halloween-graph-day-L4-bg:#03001c;--color-calendar-winter-graph-day-L1-bg:#B6E3FF;--color-calendar-winter-graph-day-L2-bg:#54AEFF;--color-calendar-winter-graph-day-L3-bg:#0969DA;--color-calendar-winter-graph-day-L4-bg:#0A3069;--color-calendar-graph-day-bg:#ebedf0;--color-calendar-graph-day-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L1-bg:#9be9a8;--color-calendar-graph-day-L2-bg:#40c463;--color-calendar-graph-day-L3-bg:#30a14e;--color-calendar-graph-day-L4-bg:#216e39;--color-calendar-graph-day-L1-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L2-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L3-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L4-border:rgba(27, 31, 35, 0.06);--color-user-mention-fg:var(--color-fg-default);--color-user-mention-bg:var(--color-attention-subtle);--color-text-white:var(--color-scale-white)}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=light]{--color-workflow-card-connector:var(--color-scale-gray-3);--color-workflow-card-connector-bg:var(--color-scale-gray-3);--color-workflow-card-connector-inactive:var(--color-border-default);--color-workflow-card-connector-inactive-bg:var(--color-border-default);--color-workflow-card-connector-highlight:var(--color-scale-blue-4);--color-workflow-card-connector-highlight-bg:var(--color-scale-blue-4);--color-workflow-card-bg:var(--color-scale-white);--color-workflow-card-inactive-bg:var(--color-canvas-inset);--color-workflow-card-header-shadow:rgba(0, 0, 0, 0);--color-workflow-card-progress-complete-bg:var(--color-scale-blue-4);--color-workflow-card-progress-incomplete-bg:var(--color-scale-gray-2);--color-discussions-state-answered-icon:var(--color-scale-white);--color-bg-discussions-row-emoji-box:rgba(209, 213, 218, 0.5);--color-notifications-button-text:var(--color-fg-muted);--color-notifications-button-hover-text:var(--color-fg-default);--color-notifications-button-hover-bg:var(--color-scale-gray-2);--color-notifications-row-read-bg:var(--color-canvas-subtle);--color-notifications-row-bg:var(--color-scale-white);--color-icon-directory:var(--color-scale-blue-3);--color-checks-step-error-icon:var(--color-scale-red-4);--color-calendar-halloween-graph-day-L1-bg:#ffee4a;--color-calendar-halloween-graph-day-L2-bg:#ffc501;--color-calendar-halloween-graph-day-L3-bg:#fe9600;--color-calendar-halloween-graph-day-L4-bg:#03001c;--color-calendar-winter-graph-day-L1-bg:#B6E3FF;--color-calendar-winter-graph-day-L2-bg:#54AEFF;--color-calendar-winter-graph-day-L3-bg:#0969DA;--color-calendar-winter-graph-day-L4-bg:#0A3069;--color-calendar-graph-day-bg:#ebedf0;--color-calendar-graph-day-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L1-bg:#9be9a8;--color-calendar-graph-day-L2-bg:#40c463;--color-calendar-graph-day-L3-bg:#30a14e;--color-calendar-graph-day-L4-bg:#216e39;--color-calendar-graph-day-L1-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L2-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L3-border:rgba(27, 31, 35, 0.06);--color-calendar-graph-day-L4-border:rgba(27, 31, 35, 0.06);--color-user-mention-fg:var(--color-fg-default);--color-user-mention-bg:var(--color-attention-subtle);--color-text-white:var(--color-scale-white)}}.hx_color-icon-directory{color:var(--color-icon-directory)}.hx_comment-box--tip::after{background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default)) !important}.hx_keyword-hl{background-color:var(--color-search-keyword-hl)}.hx_dot-fill-pending-icon{color:var(--color-attention-emphasis) !important}@media(max-width: 543px){[data-color-mode=light][data-light-theme*=dark],[data-color-mode=dark][data-dark-theme*=dark]{--color-fg-default: var(--color-scale-gray-0);--color-canvas-default: var(--color-scale-gray-8)}}@media(max-width: 543px)and (prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=dark]{--color-fg-default: var(--color-scale-gray-0);--color-canvas-default: var(--color-scale-gray-8)}}@media(max-width: 543px)and (prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=dark]{--color-fg-default: var(--color-scale-gray-0);--color-canvas-default: var(--color-scale-gray-8)}}:root[data-color-mode=dark] .entry-content [href$="#gh-light-mode-only"],:root[data-color-mode=dark] .comment-body [href$="#gh-light-mode-only"],:root[data-color-mode=dark] .readme [href$="#gh-light-mode-only"]{display:none}:root[data-color-mode=light] .entry-content [href$="#gh-dark-mode-only"],:root[data-color-mode=light] .comment-body [href$="#gh-dark-mode-only"],:root[data-color-mode=light] .readme [href$="#gh-dark-mode-only"]{display:none}@media(prefers-color-scheme: dark){:root[data-color-mode=auto] .entry-content [href$="#gh-light-mode-only"],:root[data-color-mode=auto] .comment-body [href$="#gh-light-mode-only"],:root[data-color-mode=auto] .readme [href$="#gh-light-mode-only"]{display:none}}@media(prefers-color-scheme: light){:root[data-color-mode=auto] .entry-content [href$="#gh-dark-mode-only"],:root[data-color-mode=auto] .comment-body [href$="#gh-dark-mode-only"],:root[data-color-mode=auto] .readme [href$="#gh-dark-mode-only"]{display:none}}.colorblind-themes-v1{--color-open-fg: var(--color-success-fg);--color-open-emphasis: var(--color-success-emphasis);--color-open-muted: var(--color-success-muted);--color-open-subtle: var(--color-success-subtle);--color-closed-fg: var(--color-danger-fg);--color-closed-emphasis: var(--color-danger-emphasis);--color-closed-muted: var(--color-danger-muted);--color-closed-subtle: var(--color-danger-subtle)}.dropdown-item:focus [class*=color-text-],.dropdown-item:hover [class*=color-text-]{color:inherit !important}.filter-item.selected [class*=color-text-]{color:inherit !important}body:not(.intent-mouse) .hx_focus-input:focus+.hx_focus-target{box-shadow:0 0 0 2px var(--color-accent-fg)}.reset-btn-override{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted)}.reset-btn-override:hover{color:var(--color-accent-fg);text-decoration:none}.reset-btn-override:hover .reset-btn-override-icon{background-color:var(--color-accent-emphasis)}.reset-btn-override-icon{width:18px;height:18px;padding:1px;margin-right:3px;color:var(--color-fg-on-emphasis);text-align:center;background-color:var(--color-neutral-emphasis);border-radius:6px}.is-auto-complete-loading .form-control{padding-right:30px;background-image:url("/images/spinners/octocat-spinner-32.gif");background-size:16px}.hx_breadcrumb-header-crumbs .Header-link{transition:opacity .1s ease-out}.hx_breadcrumb-header-crumbs .Header-link:hover{color:var(--color-header-text);opacity:.75}.hx_breadcrumb-header-divider{color:var(--color-header-divider)}.Header-button{background-color:var(--color-scale-gray-8);border:1px solid var(--color-scale-gray-6);border-radius:6px;transition:background-color .2s cubic-bezier(0.3, 0, 0.5, 1)}.Header-button .octicon{color:var(--color-header-logo)}.Header-button:hover,.Header-button:focus,.Header-button:active{background-color:transparent}.Header-button:hover .octicon,.Header-button:focus .octicon,.Header-button:active .octicon{color:var(--color-header-text);box-shadow:none}.hx_breadcrumb-header-dropdown::before,.hx_breadcrumb-header-dropdown::after{display:none}.hx_breadcrumb-header-dropdown .dropdown-item{line-height:40px;transition:background-color 60ms ease-out}.hx_breadcrumb-header-dropdown .dropdown-item:hover{color:var(--color-fg-default);background-color:var(--color-canvas-subtle)}.icon-sponsor,.icon-sponsoring{transition:transform .15s cubic-bezier(0.2, 0, 0.13, 2);transform:scale(1)}.btn:hover .icon-sponsor,.btn:focus .icon-sponsor,.Label:hover .icon-sponsor,.Label:focus .icon-sponsor,.btn:hover .icon-sponsoring,.btn:focus .icon-sponsoring,.Label:hover .icon-sponsoring,.Label:focus .icon-sponsoring{transform:scale(1.1)}.icon-sponsor{overflow:visible !important}.hx_kbd{display:inline-block;min-width:21px;padding:0 4px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:12px;font-weight:var(--base-text-weight-normal, 400);line-height:1.5;color:var(--color-fg-muted);text-align:center;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px;box-shadow:none}.hx_hit-user em,.hx_hit-package em,.hx_hit-marketplace em,.hx_hit-highlighting-wrapper em,.hx_hit-commit em,.hx_hit-issue em,.hx_hit-repo em,.hx_hit-wiki em{font-style:normal;font-weight:var(--base-text-weight-semibold, 600)}.SelectMenu-list.select-menu-list{max-height:none}@media(max-width: 543px){.SelectMenu-modal{width:unset !important}}.SelectMenu--hasFilter .SelectMenu-list{contain:content}.SelectMenu-item:disabled,.SelectMenu-item[aria-disabled=true]{color:var(--color-fg-muted);pointer-events:none}.SelectMenu .SelectMenu-item .is-filtering{color:var(--color-fg-muted)}.SelectMenu .SelectMenu-item .is-filtering b{color:var(--color-fg-default)}label.SelectMenu-item{font-weight:var(--base-text-weight-normal, 400)}label.SelectMenu-item[aria-checked=true]{font-weight:var(--base-text-weight-semibold, 600)}.hx_SelectMenu-modal-no-animation{animation:none}.SelectMenu-item.focused{background-color:var(--color-neutral-subtle)}.Box--responsive{margin-right:-15px;margin-left:-15px;border-right:0;border-left:0;border-radius:0}.Box--responsive .Box-row--unread{position:relative;box-shadow:none}.Box--responsive .Box-row--unread::before{position:absolute;top:36px;left:20px;display:inline-block;width:8px;height:8px;color:#fff;content:"";background-image:linear-gradient(#54a3ff, #006eed);background-clip:padding-box;border-radius:50%}.Box--responsive .Box-header{border-right-width:0;border-left-width:0;border-radius:0}@media(min-width: 544px){.Box--responsive{margin-right:0;margin-left:0;border:1px solid var(--color-border-default);border-radius:6px}.Box--responsive .Box-header{border-right-width:1px;border-left-width:1px;border-top-left-radius:6px;border-top-right-radius:6px}.Box--responsive .Box-row--unread{box-shadow:2px 0 0 var(--color-accent-emphasis) inset}.Box--responsive .Box-row--unread::before{display:none}}@media(max-width: 767px){.page-responsive .dropdown-menu,.page-responsive .dropdown-item{padding-top:8px;padding-bottom:8px}.page-responsive .hx_dropdown-fullscreen[open]>summary::before{background-color:var(--color-primer-canvas-backdrop)}.page-responsive .hx_dropdown-fullscreen .dropdown-menu{position:fixed;top:auto;right:16px !important;bottom:20%;left:16px !important;width:auto !important;max-width:none !important;max-height:calc(80% - 16px);margin:0 !important;overflow-y:auto;transform:none;animation:dropdown-menu-animation .24s cubic-bezier(0, 0.1, 0.1, 1) backwards;-webkit-overflow-scrolling:touch}.page-responsive .hx_dropdown-fullscreen .dropdown-menu::before,.page-responsive .hx_dropdown-fullscreen .dropdown-menu::after{display:none}@keyframes dropdown-menu-animation{0%{opacity:0;transform:scale(0.9)}}.page-responsive .hx_dropdown-fullscreen .dropdown-item{padding-top:16px;padding-bottom:16px}}.hx_rsm-close-button{display:none !important}@media(max-width: 767px){.page-responsive .hx_rsm[open]>summary::before{background-color:var(--color-primer-canvas-backdrop)}.page-responsive .hx_rsm .select-menu-modal,.page-responsive .hx_rsm-modal{position:fixed !important;top:75px;right:16px !important;left:16px;display:flex;width:auto;height:80%;margin:0;flex-direction:column;animation:hx_rsm-modal-animation .24s .12s cubic-bezier(0, 0.1, 0.1, 1) backwards}.page-responsive .hx_rsm--auto-height .select-menu-modal{top:auto;bottom:20%;height:auto;max-height:calc(80% - 16px)}.page-responsive .hx_rsm .select-menu-header,.page-responsive .hx_rsm .select-menu-text-filter.select-menu-text-filter{padding:16px;border-top-left-radius:inherit;border-top-right-radius:inherit}.page-responsive .hx_rsm tab-container,.page-responsive .hx_rsm-content{display:flex;min-height:0;flex-direction:column;flex:auto}.page-responsive .hx_rsm .select-menu-list{flex:auto;max-height:none;-webkit-overflow-scrolling:touch}.page-responsive .hx_rsm-content>.select-menu-item{flex-shrink:0}.page-responsive .hx_rsm .select-menu-item{padding-top:16px;padding-bottom:16px;padding-left:40px}.page-responsive .hx_rsm .close-button,.page-responsive .hx_rsm-close-button{position:relative;display:block !important}.page-responsive .hx_rsm .close-button::before,.page-responsive .hx_rsm-close-button::before{position:absolute;top:-16px;right:-16px;bottom:-16px;left:-16px;content:""}.page-responsive .hx_rsm .close-button .octicon-x,.page-responsive .hx_rsm-close-button .octicon-x{color:var(--color-fg-muted)}.page-responsive .hx_rsm .select-menu-loading-overlay{animation-delay:1s}.page-responsive .hx_rsm .select-menu-button::before,.page-responsive .hx_rsm-trigger::before{animation:hx_rsm-trigger-animation .24s cubic-bezier(0, 0, 0.2, 1) backwards}@keyframes hx_rsm-trigger-animation{0%{opacity:0}}@keyframes hx_rsm-modal-animation{0%{opacity:0;transform:scale(0.9)}}.page-responsive .hx_rsm-dialog{max-width:none;height:auto;max-height:80%;transform:none}.page-responsive .hx_rsm-dialog-content{flex:1;min-height:0}}@media(max-width: 767px)and (max-height: 500px){.page-responsive .hx_rsm .select-menu-modal,.page-responsive .hx_rsm-modal{bottom:16px;height:auto}}.select-menu-modal{border-color:var(--color-border-default);box-shadow:var(--color-shadow-large)}.select-menu-header,.select-menu-filters{background:var(--color-canvas-overlay)}.select-menu-text-filter input{padding:5px 12px}.select-menu-item{text-align:left;background-color:var(--color-canvas-overlay);border-top:0;border-right:0;border-left:0}.preview-selected .tabnav--responsive{border-bottom:1px solid var(--color-border-default)}.tabnav--responsive .tabnav-tabs{z-index:1}@media(max-width: 767px){.tabnav--responsive .tabnav-tab{background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default);border-left:0;border-radius:0}.tabnav--responsive .tabnav-tab:first-child{border-left:1px solid var(--color-border-default)}.tabnav--responsive .tabnav-tab[aria-selected=true],.tabnav--responsive .tabnav-tab.selected{background-color:var(--color-canvas-default);border-bottom:0}}@media(max-width: 767px){.hx_sm-hide-drag-drop textarea{border-bottom:1px solid var(--color-border-default);border-bottom-right-radius:6px;border-bottom-left-radius:6px}.hx_sm-hide-drag-drop .hx_drag-and-drop{display:none !important}}@media(hover: none){.tooltipped:hover::before,.tooltipped:hover::after{display:none}}@media(hover: none){.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{visibility:visible !important}}.min-width-lg{min-width:1012px}.min-width-xl{min-width:1280px}.min-height-0{min-height:0 !important}.ws-pre-wrap{white-space:pre-wrap}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}@media screen and (prefers-reduced-motion: no-preference){.hide-no-pref-motion{display:none !important;visibility:hidden}}@media screen and (prefers-reduced-motion: reduce){.hide-reduced-motion{display:none !important;visibility:hidden}}.line_through{text-decoration:line-through;text-decoration-thickness:1%}.gap-1{gap:4px !important}.gap-2{gap:8px !important}.gap-3{gap:16px !important}.gap-4{gap:24px !important}.starring-container .unstarred,.starring-container.on .starred{display:flex}.starring-container.on .unstarred,.starring-container .starred{display:none}.starring-container.loading{opacity:.5}.user-following-container .follow,.user-following-container.on .unfollow{display:inline-block}.user-following-container.on .follow,.user-following-container .unfollow{display:none}.user-following-container.loading{opacity:.5}.hidden-when-empty:empty{display:none !important}.cm-number,.cm-atom{color:var(--color-codemirror-syntax-constant)}[data-color-mode=dark] auto-check .is-autocheck-loading{background-image:url("/images/spinners/octocat-spinner-darkmode.svg") !important}[data-color-mode=light] auto-check .is-autocheck-loading{background-image:url("/images/spinners/octocat-spinner-lightmode.svg") !important}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme^=light] auto-check .is-autocheck-loading{background-image:url("/images/spinners/octocat-spinner-lightmode.svg") !important}[data-color-mode=auto][data-dark-theme^=dark] auto-check .is-autocheck-loading{background-image:url("/images/spinners/octocat-spinner-darkmode.svg") !important}}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme^=light] auto-check .is-autocheck-loading{background-image:url("/images/spinners/octocat-spinner-lightmode.svg") !important}[data-color-mode=auto][data-light-theme^=dark] auto-check .is-autocheck-loading{background-image:url("/images/spinners/octocat-spinner-darkmode.svg") !important}}auto-check .is-autocheck-loading,auto-check .is-autocheck-successful,auto-check .is-autocheck-errored{padding-right:30px}auto-check .is-autocheck-successful{background-image:url("/images/modules/ajax/success.png")}auto-check .is-autocheck-errored{background-image:url("/images/modules/ajax/error.png")}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (-moz-min-device-pixel-ratio: 2),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){auto-check .is-autocheck-loading,auto-check .is-autocheck-successful,auto-check .is-autocheck-errored{background-size:16px 16px}auto-check .is-autocheck-successful{background-image:url("/images/modules/ajax/success@2x.png")}auto-check .is-autocheck-errored{background-image:url("/images/modules/ajax/error@2x.png")}}.hx_text-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji" !important}.hx_disabled-form-checkbox-label.form-checkbox.disabled{color:var(--color-fg-muted)}.autocomplete-item{background-color:transparent}.ColorSwatch{display:inline-block;width:1em;height:1em;vertical-align:middle;border:1px solid var(--color-border-subtle);border-radius:6px}.label-select-menu .color,.ColorSwatch{border-radius:2em}.details-overlay[open]>.dropdown-item:hover{color:inherit;background:var(--color-canvas-default)}remote-input[loading] .form-control{padding-right:30px;background-image:url("/images/spinners/octocat-spinner-32.gif");background-size:16px}.hx_form-control-spinner{position:absolute;top:24px;right:24px;display:none}@media(min-width: 767px){.hx_form-control-spinner{top:18px;right:18px}}.hx_form-control-spinner-wrapper{position:relative}.hx_form-control-spinner-wrapper .is-loading.form-control{padding-right:28px}.hx_form-control-spinner-wrapper .is-loading+.hx_form-control-spinner{display:block}.drag-and-drop{border-color:var(--color-border-default)}.input-sm{min-height:28px}.btn .octicon-triangle-down{margin-right:0}.UnderlineNav-item.selected .UnderlineNav-octicon,.UnderlineNav-item[aria-current]:not([aria-current=false]) .UnderlineNav-octicon,.UnderlineNav-item[role=tab][aria-selected=true] .UnderlineNav-octicon{color:inherit}.break-line-anywhere{line-break:anywhere !important}.form-checkbox input[type=checkbox],.form-checkbox input[type=radio]{margin-top:4px}.status-indicator-success::before,.status-indicator-failed::before{content:none}.markdown-title code{padding:2px 4px;font-size:.9em;line-height:1;background-color:var(--color-neutral-muted);border-radius:6px}.hx_ActionList-content>.hx_ActionList-item-label,.hx_ActionList-content>.hx_ActionList-item-visual{pointer-events:none}.IssueLabel--big.lh-condensed{display:inline-block;padding:0 10px;font-size:12px;font-weight:var(--base-text-weight-medium, 500);line-height:22px !important;border:1px solid transparent;border-radius:2em}.hx_IssueLabel{--perceived-lightness: calc( ((var(--label-r) * 0.2126) + (var(--label-g) * 0.7152) + (var(--label-b) * 0.0722)) / 255 );--lightness-switch: max(0, min(calc((var(--perceived-lightness) - var(--lightness-threshold)) * -1000), 1))}:root .hx_IssueLabel,[data-color-mode=light][data-light-theme*=light] .hx_IssueLabel,[data-color-mode=dark][data-dark-theme*=light] .hx_IssueLabel{--lightness-threshold: 0.453;--border-threshold: 0.96;--border-alpha: max(0, min(calc((var(--perceived-lightness) - var(--border-threshold)) * 100), 1));color:hsl(0deg, 0%, calc(var(--lightness-switch) * 100%));background:rgb(var(--label-r), var(--label-g), var(--label-b));border-color:hsla(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) - 25) * 1%), var(--border-alpha))}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=light] .hx_IssueLabel{--lightness-threshold: 0.453;--border-threshold: 0.96;--border-alpha: max(0, min(calc((var(--perceived-lightness) - var(--border-threshold)) * 100), 1));color:hsl(0deg, 0%, calc(var(--lightness-switch) * 100%));background:rgb(var(--label-r), var(--label-g), var(--label-b));border-color:hsla(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) - 25) * 1%), var(--border-alpha))}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=light] .hx_IssueLabel{--lightness-threshold: 0.453;--border-threshold: 0.96;--border-alpha: max(0, min(calc((var(--perceived-lightness) - var(--border-threshold)) * 100), 1));color:hsl(0deg, 0%, calc(var(--lightness-switch) * 100%));background:rgb(var(--label-r), var(--label-g), var(--label-b));border-color:hsla(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) - 25) * 1%), var(--border-alpha))}}[data-color-mode=light][data-light-theme*=dark] .hx_IssueLabel,[data-color-mode=dark][data-dark-theme*=dark] .hx_IssueLabel{--lightness-threshold: 0.6;--background-alpha: 0.18;--border-alpha: 0.3;--lighten-by: calc(((var(--lightness-threshold) - var(--perceived-lightness)) * 100) * var(--lightness-switch));color:hsl(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) + var(--lighten-by)) * 1%));background:rgba(var(--label-r), var(--label-g), var(--label-b), var(--background-alpha));border-color:hsla(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) + var(--lighten-by)) * 1%), var(--border-alpha))}@media(prefers-color-scheme: light){[data-color-mode=auto][data-light-theme*=dark] .hx_IssueLabel{--lightness-threshold: 0.6;--background-alpha: 0.18;--border-alpha: 0.3;--lighten-by: calc(((var(--lightness-threshold) - var(--perceived-lightness)) * 100) * var(--lightness-switch));color:hsl(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) + var(--lighten-by)) * 1%));background:rgba(var(--label-r), var(--label-g), var(--label-b), var(--background-alpha));border-color:hsla(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) + var(--lighten-by)) * 1%), var(--border-alpha))}}@media(prefers-color-scheme: dark){[data-color-mode=auto][data-dark-theme*=dark] .hx_IssueLabel{--lightness-threshold: 0.6;--background-alpha: 0.18;--border-alpha: 0.3;--lighten-by: calc(((var(--lightness-threshold) - var(--perceived-lightness)) * 100) * var(--lightness-switch));color:hsl(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) + var(--lighten-by)) * 1%));background:rgba(var(--label-r), var(--label-g), var(--label-b), var(--background-alpha));border-color:hsla(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) + var(--lighten-by)) * 1%), var(--border-alpha))}}.signed-commit-badge-small,.signed-commit-badge-medium,.signed-commit-badge-large{display:inline-block;padding:0 7px;font-size:12px;font-weight:var(--base-text-weight-medium, 500);line-height:18px;white-space:nowrap;border:1px solid transparent;border-radius:2em;border-color:var(--color-border-default)}.signed-commit-badge-small{margin-top:0}.signed-commit-badge-large{padding-right:10px;padding-left:10px;line-height:22px}.topic-tag-action,.delete-topic-button,.topic-tag{display:inline-block;padding:0 7px;font-size:12px;font-weight:var(--base-text-weight-medium, 500);line-height:18px;white-space:nowrap;border:1px solid transparent;border-radius:2em;padding-right:10px;padding-left:10px;line-height:22px;color:var(--color-accent-fg);background-color:var(--color-accent-subtle);border:1px solid var(--color-topic-tag-border, transparent)}.topic-tag-action:active,.topic-tag-action:hover,.delete-topic-button:active,.delete-topic-button:hover,.topic-tag:active,.topic-tag:hover{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.topic-tag{margin:0 .125em .333em 0}.topic-tag-outline{background:transparent}.topic-tag-action{display:inline-flex;padding-right:0;margin:.6em .5em 0 0}.delete-topic-button,.topic-tag-action .add-topic-button,.topic-tag-action .remove-topic-button{display:flex;width:24px;height:24px;padding:0;color:inherit;border-color:transparent;border-left:0;border-radius:2em;align-items:center;justify-content:center}.hx_Layout.hx_Layout--sidebar-hidden{grid-auto-flow:row;grid-gap:0;grid-template-columns:1fr}.hx_Layout.hx_Layout--sidebar-hidden .Layout-sidebar{display:none}.hx_Layout.hx_Layout--sidebar-hidden .Layout-main{grid-column:auto}.hx_Layout--sidebar{top:60px;box-sizing:border-box;overscroll-behavior:contain}.branch-action-item.color-border-default{border-color:var(--color-border-default) !important}.user-status-container .input-group-button .btn{height:32px}.reponav-item,.pagehead-tabs-item{border-radius:4px 4px 0 0}.reponav-item.selected,.pagehead-tabs-item.selected{border-top-color:#f9826c}.auto-search-group>.octicon{top:8px}.subnav-search>button.mt-2{margin-top:6px !important}.completeness-indicator-success{color:var(--color-fg-on-emphasis);background-color:var(--color-btn-primary-bg)}.pagination-loader-container button.color-bg-default.border-0{border-top-left-radius:6px;border-top-right-radius:6px}.avatar-user{border-radius:50% !important}@media(max-width: 543px){.minimized-comment>details>div{padding-left:0 !important}}@media(max-width: 543px){.minimized-comment>details>summary>div{flex-direction:column}.minimized-comment>details>summary>div .review-comment-contents{align-left:flex-start}}.hx_disabled-input{margin-right:-4px !important;margin-left:-4px !important}.hx_disabled-input sidebar-memex-input[disabled] *{cursor:pointer}.hx_disabled-input sidebar-memex-input:not([disabled]) .Box-row--hover-gray{background-color:var(--color-canvas-subtle)}.hx_disabled-input .Box-row--hover-gray svg.octicon-pencil{visibility:hidden;opacity:0}.hx_disabled-input .Box-row--hover-gray:hover,.hx_disabled-input .Box-row--hover-gray:focus{padding-top:8px !important;padding-bottom:8px !important}.hx_disabled-input .Box-row--hover-gray:hover svg.octicon-pencil,.hx_disabled-input .Box-row--hover-gray:focus svg.octicon-pencil{visibility:visible;opacity:1}.hx_disabled-input input:not(:disabled){margin-top:8px !important;margin-bottom:8px !important}.hx_disabled-input input[disabled],.hx_disabled-input select[disabled],.hx_disabled-input .form-control[contenteditable=false]{padding-right:0;padding-left:0;margin-right:0;color:var(--color-fg-default) !important;background:transparent;border:0;box-shadow:none;opacity:1}.hx_disabled-input text-expander input[type=text][disabled]{display:none}.hx_disabled-input text-expander input[type=text][disabled]+div.form-control{display:block}.hx_disabled-input text-expander input[type=text]+div.form-control{display:none}.hx_disabled-input input[type=number][disabled]{display:none}.hx_disabled-input input[type=number][disabled]+div.form-control{display:block}.hx_disabled-input input[type=number]+div.form-control{display:none}.hx_disabled-input input[type=date][disabled]{display:none}.hx_disabled-input input[type=date][disabled]+div.form-control{display:block}.hx_disabled-input input[type=date]+div.form-control{display:none}.hx_disabled-input input[disabled]::placeholder,.hx_disabled-input selected[disabled]::placeholder{color:var(--color-fg-default) !important}.hx_disabled-input .form-select{background-image:none !important}.hx_disabled-input .Box-row--focus-gray:focus{background:var(--color-canvas-subtle)}.summary-iteration .inline-status{display:none}.summary-iteration .block-status{display:inline-block}.list-iteration .inline-status{display:inline}.list-iteration .block-status{display:none}.hx_tabnav-in-dropdown{border-radius:5px 5px 0 0}.hx_tabnav-in-dropdown .tabnav-tabs .hx_tabnav-in-dropdown-wrapper:first-child .tabnav-tab.selected,.hx_tabnav-in-dropdown .tabnav-tabs .hx_tabnav-in-dropdown-wrapper:first-child .tabnav-tab[aria-selected=true],.hx_tabnav-in-dropdown .tabnav-tabs .hx_tabnav-in-dropdown-wrapper:first-child .tabnav-tab[aria-current]:not([aria-current=false]){border-left:0}.hx_tabnav-in-dropdown .tabnav-tabs .hx_tabnav-in-dropdown-wrapper:last-child .tabnav-tab.selected,.hx_tabnav-in-dropdown .tabnav-tabs .hx_tabnav-in-dropdown-wrapper:last-child .tabnav-tab[aria-selected=true],.hx_tabnav-in-dropdown .tabnav-tabs .hx_tabnav-in-dropdown-wrapper:last-child .tabnav-tab[aria-current]:not([aria-current=false]){border-right:0}.hx_tabnav-in-dropdown .tabnav-tab.selected,.hx_tabnav-in-dropdown .tabnav-tab[aria-selected=true],.hx_tabnav-in-dropdown .tabnav-tab[aria-current]:not([aria-current=false]){margin-top:-1px;background-color:var(--color-canvas-overlay)}.hx_tabnav-in-dropdown #cloud-tab[aria-selected=false]::after{position:absolute;top:-14px;right:10px;left:auto;z-index:10;display:inline-block;content:"";border:7px solid transparent;border-bottom:7px solid var(--color-canvas-subtle)}.details-overlay-dark[open]>summary::before{z-index:111 !important}.turbo-progress-bar{z-index:2147483647}.timeline-comment .previewable-comment-form textarea{max-height:none}.truncate-with-responsive-width{width:50px;min-width:100%} + +/*# sourceMappingURL=global-5531eb0df5d6.css.map*/ \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/E635581FD18A3F0FA7385619A89306876113C1AA b/home/.surf/cache/WebKitCache/Version 16/Blobs/E635581FD18A3F0FA7385619A89306876113C1AA new file mode 100644 index 0000000..ee48f6a --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/E635581FD18A3F0FA7385619A89306876113C1AA @@ -0,0 +1,2 @@ +(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_smoothscroll-polyfill_dist_smoothscroll_js-node_modules_stacktrace-parse-297da6"],{30523(a){var b,c;b=window,c=document,a.exports={polyfill:function(){if(!("scrollBehavior"in c.documentElement.style)|| !0===b.__forceSmoothScrollPolyfill__){var a,d=b.HTMLElement||b.Element,e=468,f=(a=b.navigator.userAgent,RegExp("MSIE |Trident/|Edge/").test(a))?1:0,g={scroll:b.scroll||b.scrollTo,scrollBy:b.scrollBy,elementScroll:d.prototype.scroll||i,scrollIntoView:d.prototype.scrollIntoView},h=b.performance&&b.performance.now?b.performance.now.bind(b.performance):Date.now;b.scroll=b.scrollTo=function(){if(void 0!==arguments[0]){if(!0===j(arguments[0])){g.scroll.call(b,void 0!==arguments[0].left?arguments[0].left:"object"!=typeof arguments[0]?arguments[0]:b.scrollX||b.pageXOffset,void 0!==arguments[0].top?arguments[0].top:void 0!==arguments[1]?arguments[1]:b.scrollY||b.pageYOffset);return}o.call(b,c.body,void 0!==arguments[0].left?~~arguments[0].left:b.scrollX||b.pageXOffset,void 0!==arguments[0].top?~~arguments[0].top:b.scrollY||b.pageYOffset)}},b.scrollBy=function(){if(void 0!==arguments[0]){if(j(arguments[0])){g.scrollBy.call(b,void 0!==arguments[0].left?arguments[0].left:"object"!=typeof arguments[0]?arguments[0]:0,void 0!==arguments[0].top?arguments[0].top:void 0!==arguments[1]?arguments[1]:0);return}o.call(b,c.body,~~arguments[0].left+(b.scrollX||b.pageXOffset),~~arguments[0].top+(b.scrollY||b.pageYOffset))}},d.prototype.scroll=d.prototype.scrollTo=function(){if(void 0!==arguments[0]){if(!0===j(arguments[0])){if("number"==typeof arguments[0]&& void 0===arguments[1])throw SyntaxError("Value couldn't be converted");g.elementScroll.call(this,void 0!==arguments[0].left?~~arguments[0].left:"object"!=typeof arguments[0]?~~arguments[0]:this.scrollLeft,void 0!==arguments[0].top?~~arguments[0].top:void 0!==arguments[1]?~~arguments[1]:this.scrollTop);return}var a=arguments[0].left,b=arguments[0].top;o.call(this,this,void 0===a?this.scrollLeft:~~a,void 0===b?this.scrollTop:~~b)}},d.prototype.scrollBy=function(){if(void 0!==arguments[0]){if(!0===j(arguments[0])){g.elementScroll.call(this,void 0!==arguments[0].left?~~arguments[0].left+this.scrollLeft:~~arguments[0]+this.scrollLeft,void 0!==arguments[0].top?~~arguments[0].top+this.scrollTop:~~arguments[1]+this.scrollTop);return}this.scroll({left:~~arguments[0].left+this.scrollLeft,top:~~arguments[0].top+this.scrollTop,behavior:arguments[0].behavior})}},d.prototype.scrollIntoView=function(){if(!0===j(arguments[0])){g.scrollIntoView.call(this,void 0===arguments[0]||arguments[0]);return}var a=function(a){var b;do b=(a=a.parentNode)===c.body;while(!1===b&& !1===m(a))return b=null,a}(this),d=a.getBoundingClientRect(),e=this.getBoundingClientRect();a!==c.body?(o.call(this,a,a.scrollLeft+e.left-d.left,a.scrollTop+e.top-d.top),"fixed"!==b.getComputedStyle(a).position&&b.scrollBy({left:d.left,top:d.top,behavior:"smooth"})):b.scrollBy({left:e.left,top:e.top,behavior:"smooth"})}}function i(a,b){this.scrollLeft=a,this.scrollTop=b}function j(a){if(null===a||"object"!=typeof a|| void 0===a.behavior||"auto"===a.behavior||"instant"===a.behavior)return!0;if("object"==typeof a&&"smooth"===a.behavior)return!1;throw TypeError("behavior member of ScrollOptions "+a.behavior+" is not a valid value for enumeration ScrollBehavior.")}function k(a,b){return"Y"===b?a.clientHeight+f1?1:i))),d=a.startX+(a.x-a.startX)*c,f=a.startY+(a.y-a.startY)*c,a.method.call(a.scrollable,d,f),(d!==a.x||f!==a.y)&&b.requestAnimationFrame(n.bind(b,a))}function o(a,d,e){var f,j,k,l,m=h();a===c.body?(f=b,j=b.scrollX||b.pageXOffset,k=b.scrollY||b.pageYOffset,l=g.scroll):(f=a,j=a.scrollLeft,k=a.scrollTop,l=i),n({scrollable:f,method:l,startTime:m,startX:j,startY:k,x:d,y:e})}}}},28382(a,b,c){"use strict";c.d(b,{Q:()=>e});var d="";function e(a){return a.split("\n").reduce(function(a,b){var c=h(b)||j(b)||m(b)||q(b)||o(b);return c&&a.push(c),a},[])}var f=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,g=/\((\S*)(?::(\d+))(?::(\d+))\)/;function h(a){var b=f.exec(a);if(!b)return null;var c=b[2]&&0===b[2].indexOf("native"),e=b[2]&&0===b[2].indexOf("eval"),h=g.exec(b[2]);return e&&null!=h&&(b[2]=h[1],b[3]=h[2],b[4]=h[3]),{file:c?null:b[2],methodName:b[1]||d,arguments:c?[b[2]]:[],lineNumber:b[3]?+b[3]:null,column:b[4]?+b[4]:null}}var i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;function j(a){var b=i.exec(a);return b?{file:b[2],methodName:b[1]||d,arguments:[],lineNumber:+b[3],column:b[4]?+b[4]:null}:null}var k=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,l=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function m(a){var b=k.exec(a);if(!b)return null;var c=b[3]&&b[3].indexOf(" > eval")> -1,e=l.exec(b[3]);return c&&null!=e&&(b[3]=e[1],b[4]=e[2],b[5]=null),{file:b[3],methodName:b[1]||d,arguments:b[2]?b[2].split(","):[],lineNumber:b[4]?+b[4]:null,column:b[5]?+b[5]:null}}var n=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;function o(a){var b=n.exec(a);return b?{file:b[3],methodName:b[1]||d,arguments:[],lineNumber:+b[4],column:b[5]?+b[5]:null}:null}var p=/^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;function q(a){var b=p.exec(a);return b?{file:b[2],methodName:b[1]||d,arguments:[],lineNumber:+b[3],column:b[4]?+b[4]:null}:null}},45341(a,b,c){"use strict";c.d(b,{nn:()=>au,Gb:()=>at});var d={};c.r(d),c.d(d,{abortSignalAbort:()=>q,apply:()=>t,isPolyfilled:()=>s,isSupported:()=>r});var e={};c.r(e),c.d(e,{abortSignalTimeout:()=>u,apply:()=>x,isPolyfilled:()=>w,isSupported:()=>v});var f={};c.r(f),c.d(f,{AggregateError:()=>AggregateError,apply:()=>A,isPolyfilled:()=>z,isSupported:()=>y});var g={};c.r(g),c.d(g,{apply:()=>F,arrayLikeAt:()=>C,isPolyfilled:()=>E,isSupported:()=>D});var h={};c.r(h),c.d(h,{apply:()=>J,isPolyfilled:()=>I,isSupported:()=>H,randomUUID:()=>G});var i={};c.r(i),c.d(i,{apply:()=>N,isPolyfilled:()=>M,isSupported:()=>L,replaceChildren:()=>K});var j={};c.r(j),c.d(j,{addEventListenerWithAbortSignal:()=>P,apply:()=>S,isPolyfilled:()=>R,isSupported:()=>Q});var k={};c.r(k),c.d(k,{apply:()=>W,isPolyfilled:()=>V,isSupported:()=>U,requestSubmit:()=>T});var l={};c.r(l),c.d(l,{apply:()=>_,isPolyfilled:()=>$,isSupported:()=>Z,objectHasOwn:()=>Y});var m={};c.r(m),c.d(m,{apply:()=>ad,isPolyfilled:()=>ac,isSupported:()=>ab,promiseAllSettled:()=>aa});var n={};c.r(n),c.d(n,{apply:()=>ah,isPolyfilled:()=>ag,isSupported:()=>af,promiseAny:()=>ae});var o={};c.r(o),c.d(o,{apply:()=>am,cancelIdleCallback:()=>aj,isPolyfilled:()=>al,isSupported:()=>ak,requestIdleCallback:()=>ai});var p={};function q(a){let b=new AbortController;return b.abort(a),b.signal}function r(){return"abort"in AbortSignal&&"function"==typeof AbortSignal.abort}function s(){return AbortSignal.abort===q}function t(){r()||(AbortSignal.abort=q)}function u(a){let b=new AbortController;return setTimeout(()=>b.abort(new DOMException("TimeoutError")),a),b.signal}function v(){return"abort"in AbortSignal&&"function"==typeof AbortSignal.timeout}function w(){return AbortSignal.timeout===u}function x(){v()||(AbortSignal.timeout=u)}c.r(p),c.d(p,{apply:()=>aq,isPolyfilled:()=>ap,isSupported:()=>ao,stringReplaceAll:()=>an});class AggregateError extends Error{constructor(a,b,c={}){super(b),Object.defineProperty(this,"errors",{value:Array.from(a),configurable:!0,writable:!0}),c.cause&&Object.defineProperty(this,"cause",{value:c.cause,configurable:!0,writable:!0})}}function y(){return"function"==typeof globalThis.AggregateError}function z(){return globalThis.AggregateError===AggregateError}function A(){y()||(globalThis.AggregateError=AggregateError)}let B=Reflect.getPrototypeOf(Int8Array);function C(a){let b=this.length;return(a=Math.trunc(a)||0)<0&&(a+=b),a<0||a>=b?void 0:this[a]}function D(){return"at"in Array.prototype&&"function"==typeof Array.prototype.at&&"at"in String.prototype&&"function"==typeof String.prototype.at&&"function"==typeof B&&"at"in B.prototype&&"function"==typeof B.prototype.at}function E(){return Array.prototype.at===C&&String.prototype.at===C&&"function"==typeof B&&B.prototype.at===C}function F(){if(!D()){let a={value:C,writable:!0,configurable:!0};Object.defineProperty(Array.prototype,"at",a),Object.defineProperty(String.prototype,"at",a),Object.defineProperty(B,"at",a)}}function G(){let a=new Uint32Array(4);crypto.getRandomValues(a);let b=-1;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){b++;let d=a[b>>3]>>b%8*4&15;return("x"===c?d:3&d|8).toString(16)})}function H(){return"object"==typeof crypto&&"randomUUID"in crypto&&"function"==typeof crypto.randomUUID}function I(){return H()&&crypto.randomUUID===G}function J(){H()||(crypto.randomUUID=G)}function K(...a){for(;this.firstChild;)this.removeChild(this.firstChild);this.append(...a)}function L(){return"replaceChildren"in Element.prototype&&"function"==typeof Element.prototype.replaceChildren&&"replaceChildren"in Document.prototype&&"function"==typeof Document.prototype.replaceChildren&&"replaceChildren"in DocumentFragment.prototype&&"function"==typeof DocumentFragment.prototype.replaceChildren}function M(){return Element.prototype.replaceChildren===K&&Document.prototype.replaceChildren===K&&DocumentFragment.prototype.replaceChildren===K}function N(){L()||(Element.prototype.replaceChildren=Document.prototype.replaceChildren=DocumentFragment.prototype.replaceChildren=K)}let O=EventTarget.prototype.addEventListener;function P(a,b,c){if("object"==typeof c&&"signal"in c&&c.signal instanceof AbortSignal){if(c.signal.aborted)return;O.call(c.signal,"abort",()=>{this.removeEventListener(a,b,c)})}return O.call(this,a,b,c)}function Q(){let a=!1;function b(){}let c=Object.create({},{signal:{get:()=>a=!0}});try{let d=new EventTarget;return d.addEventListener("test",b,c),d.removeEventListener("test",b,c),a}catch{return a}}function R(){return EventTarget.prototype.addEventListener===P}function S(){"function"!=typeof AbortSignal||Q()||(EventTarget.prototype.addEventListener=P)}function T(a=null){let b=new SubmitEvent("submit",{bubbles:!0,cancelable:!0,submitter:a}),c;a&&a.name&&(c=Object.assign(document.createElement("input"),{type:"hidden",hidden:!0,name:a.name,value:a.value}),this.append(c)),this.checkValidity()&&!this.dispatchEvent(b)&&this.submit(),c?.remove()}function U(){return"requestSubmit"in HTMLFormElement.prototype&&"function"==typeof HTMLFormElement.prototype.requestSubmit}function V(){return HTMLFormElement.prototype.requestSubmit===T}function W(){U()||(HTMLFormElement.prototype.requestSubmit=T)}let X=Object.prototype.hasOwnProperty;function Y(a,b){if(null==a)throw TypeError("Cannot convert undefined or null to object");return X.call(Object(a),b)}function Z(){return"hasOwn"in Object&&"function"==typeof Object.hasOwn}function $(){return Object.hasOwn===Y}function _(){Z()||Object.defineProperty(Object,"hasOwn",{value:Y,configurable:!0,writable:!0})}function aa(a){return Promise.all(a.map(a=>Promise.resolve(a).then(a=>({status:"fulfilled",value:a}),a=>({status:"rejected",reason:a}))))}function ab(){return"allSettled"in Promise&&"function"==typeof Promise.allSettled}function ac(){return Promise.all===aa}function ad(){ab()||(Promise.allSettled=aa)}function ae(a){return new Promise((b,c)=>{let d=!1,e=Array.from(a),f=[];function g(a){d||(d=!0,b(a))}function h(a){f.push(a),f.length===e.length&&c(new globalThis.AggregateError(f,"All Promises rejected"))}for(let i of e)Promise.resolve(i).then(g,h)})}function af(){return"any"in Promise&&"function"==typeof Promise.any}function ag(){return Promise.all===ae}function ah(){af()||(Promise.any=ae)}function ai(a,b={}){let c=Date.now(),d=b.timeout||0,e=Object.defineProperty({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-c))},"didTimeout",{get:()=>Date.now()-c>d});return window.setTimeout(()=>{a(e)})}function aj(a){clearTimeout(a)}function ak(){return"function"==typeof globalThis.requestIdleCallback}function al(){return globalThis.requestIdleCallback===ai&&globalThis.cancelIdleCallback===aj}function am(){ak()||(globalThis.requestIdleCallback=ai,globalThis.cancelIdleCallback=aj)}function an(a,b){if(a instanceof RegExp)return this.replace(a,b);let c=-1,d=0,e="";if("function"==typeof b){let f=b;b=()=>f(a,c,this)}for(c=this.indexOf(a,c+1);-1!==c;)e+=this.substring(d,c),e+=a.replace(a,b),d=c+a.length,c=this.indexOf(a,c+1);return e+this.substring(d)}function ao(){return"replaceAll"in String.prototype&&"function"==typeof String.prototype.replaceAll}function ap(){return String.prototype.replaceAll===an}function aq(){ao()||(String.prototype.replaceAll=an)}let ar="function"==typeof Blob&&"function"==typeof PerformanceObserver&&"object"==typeof Intl&&"function"==typeof MutationObserver&&"function"==typeof URLSearchParams&&"function"==typeof WebSocket&&"function"==typeof IntersectionObserver&&"function"==typeof queueMicrotask&&"function"==typeof TextEncoder&&"function"==typeof TextDecoder&&"object"==typeof customElements&&"function"==typeof HTMLDetailsElement&&"function"==typeof AbortController&&"function"==typeof AbortSignal&&"object"==typeof globalThis&&"entries"in FormData.prototype&&"toggleAttribute"in Element.prototype&&"fromEntries"in Object&&"flatMap"in Array.prototype&&"trimEnd"in String.prototype&&"matchAll"in String.prototype,as={abortSignalAbort:d,abortSignalTimeout:e,aggregateError:f,arrayAt:g,cryptoRandomUUID:h,elementReplaceChildren:i,eventAbortSignal:j,formRequestSubmit:k,objectHasOwn:l,promiseAllSettled:m,promiseAny:n,requestIdleCallback:o,stringReplaceAll:p};function at(){return ar&&Object.values(as).every(a=>a.isSupported())}function au(){for(let a of Object.values(as))a.apply()}},82918(a,b,c){"use strict";c.d(b,{b:()=>f});let d;function e(){return`${Math.round(2147483647*Math.random())}.${Math.round(Date.now()/1e3)}`}function f(){try{let a=function(){let a,b=document.cookie,c=b.match(/_octo=([^;]+)/g);if(!c)return;let d=[0,0];for(let e of c){let[,f]=e.split("="),[,g,...h]=f.split("."),i=g.split("-").map(Number);i>d&&(d=i,a=h.join("."))}return a}();if(a)return a;let b=e();return!function(a){let b=`GH1.1.${a}`,c=Date.now(),d=new Date(c+31536e6).toUTCString(),{domain:e}=document;e.endsWith(".github.com")&&(e="github.com"),document.cookie=`_octo=${b}; expires=${d}; path=/; domain=${e}; secure; samesite=lax`}(b),b}catch(c){return d||(d=e()),d}}},15205(a,b,c){"use strict";function d(...a){return JSON.stringify(a,(a,b)=>"object"==typeof b?b:String(b))}function e(a,b={}){let{hash:c=d,cache:e=new Map}=b;return function(...b){let d=c.apply(this,b);if(e.has(d))return e.get(d);let f=a.apply(this,b);return f instanceof Promise&&(f=f.catch(a=>{throw e.delete(d),a})),e.set(d,f),f}}c.d(b,{Z:()=>e})}}]) +//# sourceMappingURL=vendors-node_modules_smoothscroll-polyfill_dist_smoothscroll_js-node_modules_stacktrace-parse-297da6-f6d37a07dfb7.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/E671140047080B51428C4B6DF2E4F1427030AF5A b/home/.surf/cache/WebKitCache/Version 16/Blobs/E671140047080B51428C4B6DF2E4F1427030AF5A new file mode 100644 index 0000000..9499360 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/E671140047080B51428C4B6DF2E4F1427030AF5A differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/E6CAE0E08847FDA2D8DD416FB93105DFA8981EAB b/home/.surf/cache/WebKitCache/Version 16/Blobs/E6CAE0E08847FDA2D8DD416FB93105DFA8981EAB new file mode 100644 index 0000000..33f9e61 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/E6CAE0E08847FDA2D8DD416FB93105DFA8981EAB differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/E77F8FE6765535246CEC53B893F792C973AB74F9 b/home/.surf/cache/WebKitCache/Version 16/Blobs/E77F8FE6765535246CEC53B893F792C973AB74F9 new file mode 100644 index 0000000..a83bb2e --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/E77F8FE6765535246CEC53B893F792C973AB74F9 @@ -0,0 +1 @@ +:root{--max-content-width: 590px;--default-border-radius: 4px}.is-vertical-tabs-exp{--max-content-width: 672px;--default-border-radius: 8px}@font-face{font-family:'DDG_ProximaNova';src:url("font/ProximaNova-ExtraBold-webfont.eot");src:url("font/ProximaNova-ExtraBold-webfont.eot?#iefix") format("embedded-opentype"),url("font/ProximaNova-ExtraBold-webfont.woff") format("woff"),url("font/ProximaNova-ExtraBold-webfont.ttf") format("truetype"),url("font/ProximaNova-ExtraBold-webfont.svg#proxima_novaextrabold") format("svg");font-weight:800;font-style:normal}@font-face{font-family:'DDG_ProximaNova';src:url("font/ProximaNova-Sbold-webfont.eot");src:url("font/ProximaNova-Sbold-webfont.eot?#iefix") format("embedded-opentype"),url("font/ProximaNova-Sbold-webfont.woff2") format("woff2"),url("font/ProximaNova-Sbold-webfont.woff") format("woff"),url("font/ProximaNova-Sbold-webfont.ttf") format("truetype"),url("font/ProximaNova-Sbold-webfont.svg#proxima_nova_ltsemibold") format("svg");font-weight:700;font-style:normal}@font-face{font-family:'DDG_ProximaNova';src:url("font/ProximaNova-Reg-webfont.eot");src:url("font/ProximaNova-Reg-webfont.eot?#iefix") format("embedded-opentype"),url("font/ProximaNova-Reg-webfont.woff2") format("woff2"),url("font/ProximaNova-Reg-webfont.woff") format("woff"),url("font/ProximaNova-Reg-webfont.ttf") format("truetype"),url("font/ProximaNova-Reg-webfont.svg#proxima_nova_rgregular") format("svg");font-weight:normal;font-style:normal}@font-face{font-family:'DDG_ProximaNova';src:url("font/ProximaNova-RegIt-webfont.eot");src:url("font/ProximaNova-RegIt-webfont.eot?#iefix") format("embedded-opentype"),url("font/ProximaNova-RegIt-webfont.woff2") format("woff2"),url("font/ProximaNova-RegIt-webfont.woff") format("woff"),url("font/ProximaNova-RegIt-webfont.ttf") format("truetype"),url("font/ProximaNova-RegIt-webfont.svg#proxima_novaregular_italic") format("svg");font-weight:normal;font-style:italic}@font-face{font-family:'DDG_ProximaNova';src:url("font/ProximaNova-Light-webfont.eot");src:url("font/ProximaNova-Light-webfont.eot?#iefix") format("embedded-opentype"),url("font/ProximaNova-Light-webfont.woff2") format("woff2"),url("font/ProximaNova-Light-webfont.woff") format("woff"),url("font/ProximaNova-Light-webfont.ttf") format("truetype"),url("font/ProximaNova-Light-webfont.svg#proxima_nova_ltlight") format("svg");font-weight:300;font-style:normal}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}.msg--box,.msg--info,.msg--help,.msg--untranslated,.msg--warning,#error_homepage,.msg,.content__text,.header__search-wrap{max-width:590px;max-width:var(--max-content-width)}.header__logo-wrap:after,.acp-wrap:after,.cw:after,.cw--c:after{content:"";display:block;clear:both}.header__search-wrap,.content__internal{padding-left:150px}.header__search-wrap,.content__internal{padding-right:150px}.header__logo-wrap{display:block;width:150px;position:absolute;top:0}.header__logo-wrap{left:0}@media only screen and (max-width: 1350px){.header__search-wrap,.content__internal{padding-left:94px}.header__logo-wrap{width:94px}.header__search-wrap,.content__internal{padding-right:94px}}@media only screen and (max-width: 1079px){.header__search-wrap,.content__internal{padding-left:58px}.header__logo-wrap{width:58px;left:0}.header__search-wrap,.content__internal{padding-right:58px}}@media only screen and (max-width: 590px){.header__search-wrap,.content__internal{padding-left:58px}.header__logo-wrap{width:58px;left:0}.header__search-wrap,.content__internal{padding-right:58px}.content__internal{padding-left:0 !important}.content__internal{padding-right:0 !important}}@media only screen and (max-width: 425px){.header__search-wrap,.content__internal{padding-left:58px}.header__logo-wrap{width:58px;left:0}.header__search-wrap,.content__internal{padding-right:58px}}.logo_homepage__tt{-webkit-transition:opacity .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:opacity .3s ease-in-out 0s;-o-transition:opacity .3s ease-in-out 0s;transition:opacity .3s ease-in-out 0s;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;visibility:hidden;opacity:0;display:inline-block;vertical-align:middle;position:absolute;margin:auto;background-color:#a3a3a3;background-color:rgba(138,138,138,0.9);text-indent:0px;padding:0 1em;white-space:nowrap;line-height:1.6;height:1.6em;font-weight:400;font-style:normal;color:white;z-index:200}.logo_homepage__tt{top:0;bottom:0;left:100%;height:1.6em}.logo_homepage__tt:before{content:"";display:block;position:absolute;margin-top:-4px;left:-4px;top:50%;border:4px solid transparent;border-left-width:0;border-right-color:#a3a3a3;border-right-color:rgba(138,138,138,0.9)}.rotate{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.ie8 .rotate,.lt-ie9 .rotate{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.rotate--45{-ms-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ie8 .rotate--45,.lt-ie9 .rotate--45{-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"}.rotate--ccw,.rotate--270{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.ie8 .rotate--ccw,.lt-ie9 .rotate--ccw,.ie8 .rotate--270,.lt-ie9 .rotate--270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.rotate--180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.ie8 .rotate--180,.lt-ie9 .rotate--180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.mg{margin-top:1em;margin-bottom:1em}.mg--half{margin-top:.5em;margin-bottom:.5em}.mg--big{margin-top:1.25em;margin-bottom:1.25em}.mg--double{margin-top:2em;margin-bottom:2em}.mg--small{margin-top:.8em;margin-bottom:.8em}.mg--quarter{margin-top:.25em;margin-bottom:.25em}.mg--none{margin-top:0;margin-bottom:0}.mg-top{margin-top:1em}.mg-top--half{margin-top:.5em}.mg-top--big{margin-top:1.25em}.mg-top--double{margin-top:2em}.mg-top--small{margin-top:.8em}.mg-top--quarter{margin-top:.25em}.mg-top--none{margin-top:0}.mg-bottom{margin-bottom:1em}.mg-bottom--half{margin-bottom:.5em}.mg-bottom--big{margin-bottom:1.25em}.mg-bottom--double{margin-bottom:2em}.mg-bottom--small{margin-bottom:.8em}.mg-bottom--quarter{margin-bottom:.25em}.mg-bottom--none{margin-bottom:0}.pd{padding-top:1em;padding-bottom:1em}.pd--big{padding-top:1.25em;padding-bottom:1.25em}.pd--double{padding-top:2em;padding-bottom:2em}.pd--small{padding-top:.8em;padding-bottom:.8em}.pd--quarter{padding-top:.25em;padding-bottom:.25em}.pd-top{padding-top:1em}.pd-top--half{padding-top:.5em}.pd-top--big{padding-top:1.25em}.pd-top--double{padding-top:2em}.pd-top--small{padding-top:.8em}.pd-top--quarter{padding-top:.25em}.pd-top--none{padding-top:0}.pd-bottom{padding-bottom:1em}.pd-bottom--half{padding-bottom:.5em}.pd-bottom--big{padding-bottom:1.25em}.pd-bottom--double{padding-bottom:2em}.pd-bottom--small{padding-bottom:.8em}.pd-bottom--quarter{padding-bottom:.25em}.pd-bottom--none{padding-bottom:0}h1,h2,h3,h4,h5,h6,p,ul,ol,blockquote{padding-top:.5em;padding-bottom:.5em}h1,.h-xxl,.hd-lg,.t-xxxxl,.t-triple{font-size:3em}h2,.h-xl,.t-xxxl,.t-double{font-size:2em}h3,.h-l,.t-xxl{font-size:1.75em}h4,.h-m,.hd-md,.t-xl{font-size:1.5em}h5,.h-s,.t-l{font-size:1.33em}h6,.h-xs,.t-m{font-size:1.1667em}small,.t-s,.acp--bang__body{font-size:.9176em}.t-xs{font-size:.8333em}.t-xxs{font-size:.75em}.t-xxxs{font-size:.66em}.t-xxxxs{font-size:.5833em}.t-xxxxxs,.t-half{font-size:.5em}.t-n{font-size:1em}.t-nat{font-size:1rem}.text-center,.text-mid,.t-mid,.t-center{text-align:center}.t-left,.text-left{text-align:left}.t-right,.text-right{text-align:right}.t-bold{font-weight:bold}.t-normal{font-weight:normal}@media only screen and (min-width: 1079px){.h-xxl--screen-l,.t-xxxxl--screen-l,.t-triple--screen-l{font-size:3em}.h-xl--screen-l,.t-xxxl--screen-l,.t-double--screen-l{font-size:2em}.h-l--screen-l,.t-xxl--screen-l{font-size:1.75em}.h-m--screen-l,.t-xl--screen-l,.t-xl--screen-l{font-size:1.5em}.h-s--screen-l,.t-l--screen-l{font-size:1.33em}.h-xs--screen-l,.t-m--screen-l{font-size:1.1667em}.t-s--screen-l{font-size:.9176em}.t-xs--screen-l{font-size:.8333em}.t-nat--screen-l{font-size:1rem}.t-half--screen-l{font-size:.5em}.t-n--screen-l{font-size:1em}.t-mid--screen-l,.t-center--screen-l{text-align:center}.t-left--screen-l{text-align:left}.t-right--screen-l{text-align:right}}@media only screen and (min-width: 1440px){.h-xxl--screen-xl,.t-xxxxl--screen-xl,.t-triple--screen-xl{font-size:3em}.h-xl--screen-xl,.t-xxxl--screen-xl,.t-double--screen-xl{font-size:2em}.h-l--screen-xl,.t-xxl--screen-xl{font-size:1.75em}.h-m--screen-xl,.t-xl--screen-xl,.t-xl--screen-xl{font-size:1.5em}.h-s--screen-xl,.t-l--screen-xl{font-size:1.33em}.h-xs--screen-xl,.t-m--screen-xl{font-size:1.1667em}.t-s--screen-xl{font-size:.9176em}.t-xs--screen-xl{font-size:.8333em}.t-nat--screen-xl{font-size:1rem}.t-half--screen-xl{font-size:.5em}.t-n--screen-xl{font-size:1em}.t-mid--screen-xl,.t-center--screen-xl{text-align:center}.t-left--screen-xl{text-align:left}.t-right--screen-xl{text-align:right}}@media only screen and (max-width: 864px){.h-xxl--screen-m,.t-xxxxl--screen-m,.t-triple--screen-m{font-size:3em}.h-xl--screen-m,.t-xxxl--screen-m,.t-double--screen-m{font-size:2em}.h-l--screen-m,.t-xxl--screen-m{font-size:1.75em}.h-m--screen-m,.t-xl--screen-m,.t-xl--screen-m{font-size:1.5em}.h-s--screen-m,.t-l--screen-m{font-size:1.33em}.h-xs--screen-m,.t-m--screen-m{font-size:1.1667em}.t-s--screen-m{font-size:.9176em}.t-xs--screen-m{font-size:.8333em}.t-nat--screen-m{font-size:1rem}.t-half--screen-m{font-size:.5em}.t-n--screen-m{font-size:1em}.t-mid--screen-m,.t-center--screen-m{text-align:center}.t-left--screen-m{text-align:left}.t-right--screen-m{text-align:right}}@media only screen and (max-width: 590px){.h-xxl--screen-s,.t-xxxxl--screen-s,.t-triple--screen-s{font-size:3em}.h-xl--screen-s,.t-xxxl--screen-s,.t-double--screen-s{font-size:2em}.h-l--screen-s,.t-xxl--screen-s{font-size:1.75em}.h-m--screen-s,.t-xl--screen-s,.t-xl--screen-s{font-size:1.5em}.h-s--screen-s,.t-l--screen-s{font-size:1.33em}.h-xs--screen-s,.t-m--screen-s{font-size:1.1667em}.t-s--screen-s{font-size:.9176em}.t-xs--screen-s{font-size:.8333em}.t-nat--screen-s{font-size:1rem}.t-half--screen-s{font-size:.5em}.t-n--screen-s{font-size:1em}.t-mid--screen-s,.t-center--screen-s{text-align:center}.t-left--screen-s{text-align:left}.t-right--screen-s{text-align:right}}@media only screen and (max-width: 425px){.h-xxl--screen-xs,.t-xxxxl--screen-xs,.t-triple--screen-xs{font-size:3em}.h-xl--screen-xs,.t-xxxl--screen-xs,.t-double--screen-xs{font-size:2em}.h-l--screen-xs,.t-xxl--screen-xs{font-size:1.75em}.h-m--screen-xs,.t-xl--screen-xs,.t-xl--screen-xs{font-size:1.5em}.h-s--screen-xs,.t-l--screen-xs{font-size:1.33em}.h-xs--screen-xs,.t-m--screen-xs{font-size:1.1667em}.t-s--screen-xs{font-size:.9176em}.t-xs--screen-xs{font-size:.8333em}.t-nat--screen-xs{font-size:1rem}.t-half--screen-xs{font-size:.5em}.t-n--screen-xs{font-size:1em}.t-mid--screen-xs,.t-center--screen-xs{text-align:center}.t-left--screen-xs{text-align:left}.t-right--screen-xs{text-align:right}}.button,.butt,.btn,.btn,.button,.btn--icon,.btn--top,.header__button,.header__button--menu{display:inline-block;vertical-align:middle;white-space:nowrap;text-align:center;position:relative;text-decoration:none;margin-top:0;margin-bottom:0;padding:0 1em;line-height:2.5;border:1px solid #babec9;text-shadow:0 1px 1px rgba(255,255,255,0.1);background-color:#f8f8f8;color:#474747;cursor:pointer;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.button:hover,.butt:hover,.btn:hover,.btn:hover,.button:hover{text-decoration:none;background-color:#fff}.button:active,.butt:active,.btn:active,.btn:active,.button:active{background-color:#eee}.button:active,.button:focus{outline:none}.btn--full,.btn--fill{display:block}.btn--pill{-moz-border-radius:5em;-webkit-border-radius:5em;border-radius:5em}.btn--xxl{font-size:5em}.btn--xl{font-size:3em}.btn--l{font-size:2em}.btn--m{font-size:1.5em}.btn--s{font-size:0.75em}.btn--xs{font-size:0.5em}.btn--xtall{line-height:4}.btn--tall{line-height:3}.btn--short{line-height:1.5}.btn--nat{line-height:inherit}.btn--dark{border-color:#242424;text-shadow:0 -1px 1px rgba(0,0,0,0.9);background-color:#474747;color:#f8f8f8}.btn--dark:hover{background-color:#383838}.btn--dark:active{background-color:#292929}.btn--grp,.btn-grp>.btn{margin-left:-0.35em}.btn--grp,.btn-grp>.btn{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn--grp:first-child,.btn-grp>.btn:first-child,.btn--grp--first{margin-left:0;-moz-border-radius-bottomleft:0.25em;-webkit-border-bottom-left-radius:0.25em;border-bottom-left-radius:0.25em;-moz-border-radius-topleft:0.25em;-webkit-border-top-left-radius:0.25em;border-top-left-radius:0.25em}.btn--grp:last-child,.btn-grp>.btn:last-child,.btn--grp--last{-moz-border-radius-topright:0.25em;-webkit-border-top-right-radius:0.25em;border-top-right-radius:0.25em;-moz-border-radius-bottomright:0.25em;-webkit-border-bottom-right-radius:0.25em;border-bottom-right-radius:0.25em}.btn--grp.btn--grp--fakefirst{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.circle{-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%}.round{-moz-border-radius:0.25em;-webkit-border-radius:0.25em;border-radius:0.25em}pre,tt,code{font-family:Consolas, Menlo, Monaco, monospace;color:#fafafa;background:#333;-moz-border-radius:0.25em;-webkit-border-radius:0.25em;border-radius:0.25em;background-clip:padding-box}tt{padding:0 3px 1px}pre{margin:0 0.5em 1em 0;overflow:auto;padding:1em;-moz-tab-size:1;-o-tab-size:1;tab-size:1;-ms-word-break:normal;word-break:normal;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;position:relative;display:block;max-width:100%;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap}pre code{background:none;white-space:pre;overflow:hidden}.media,.acp--bang{display:block}.media__img{float:left;margin-right:0.5em}.media__img--rev{float:right;margin-left:0.5em}.media__img img,.media__img--rev img{display:block}.media__body,.acp--bang__body{overflow:hidden}table{display:table}html,body{height:100%;min-height:100%;padding:0;margin:0}html{overflow:hidden;overflow-y:auto;background-color:#f7f7f7;font-size:90%;-webkit-text-size-adjust:100%}body{overflow:hidden;position:relative;height:auto}.site-wrapper{overflow:hidden}.is-mobile-device.has-search-focus .site-wrapper:before{display:none}body{background-color:#fff;line-height:1.6}body,input,select,textarea{font-family:"DDG_ProximaNova","DDG_ProximaNova_UI_0","DDG_ProximaNova_UI_1","DDG_ProximaNova_UI_2","DDG_ProximaNova_UI_3","DDG_ProximaNova_UI_4","DDG_ProximaNova_UI_5","DDG_ProximaNova_UI_6","Proxima Nova","Helvetica Neue","Helvetica","Segoe UI","Nimbus Sans L","Liberation Sans","Open Sans",FreeSans,Arial,sans-serif;color:#222}h1,h2,h3,h4,h5,h6{font-weight:normal}p{line-height:1.35;padding-top:.25em;padding-bottom:.25em}strong,b{font-weight:600}em,i{font-style:italic}pre,tt,code{color:#282828;background-color:#eaeaea;text-shadow:none}pre{padding:.55em 0;padding-left:.5em;margin:.5em 0}pre code{padding-left:0}sup,sub{vertical-align:baseline;font-size:0.6em;position:relative;line-height:0}sup{top:-.5em}sub{top:0}.no-select,.nav,.nav-menu__icon,.nav-menu__close{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.absolute-center{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0}.one-line{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis}a{font-family:inherit;text-decoration:none;color:#4495d4}a:hover,a:focus{color:#00278e}a:hover{text-decoration:underline}a:focus{text-decoration:none;outline:none}a.is-disabled{color:#999;cursor:default}a.is-disabled:focus,a.is-disabled:hover{text-decoration:none;color:#999}@supports (-moz-appearance: none){a{text-underline-offset:1.5px}a:hover,a div:hover{text-decoration-thickness:1px !important}}:visited{color:#6d59a3}.no-visited{color:#4495d4}.anchor,.anchor--inline--first,.anchor--inline{position:relative;display:inline-block;height:0;width:0;margin:0}.anchor{float:left}.anchor--inline--first,.anchor--inline{margin-left:-0.5ex;vertical-align:top}.anchor--inline--first{margin-left:0}.btn,.button,.btn--icon,.btn--top,.header__button,.header__button--menu{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s;outline:none !important;background-color:#fafafa;border-color:#ddd;line-height:2;font-weight:normal;font-size:1em;padding-top:2px;padding-bottom:2px;color:#333}.btn:hover,.button:hover,.btn:focus,.button:focus,.btn--icon:hover,.btn--top:hover,.header__button:hover,.header__button--menu:hover,.btn--icon:focus,.btn--top:focus,.header__button:focus,.header__button--menu:focus{text-decoration:none !important;color:#333}.btn:active,.button:active{background-color:#fafafa;border-color:#fafafa}.btn.is-disabled,.btn.is-disabled:hover,.btn.is-disabled:active,.btn.is-disabled:focus,.button.is-disabled,.button.is-disabled:hover,.button.is-disabled:active,.button.is-disabled:focus{cursor:default;border-color:#c3c3c3;background-color:#c3c3c3;color:#eee}.btn.is-active,.button.is-active{border-color:transparent;background:#666;color:#fff;font-weight:300}.btn--primary,.is-checked .frm__switch__label{background-color:#66abff;border-color:#66abff;color:#fff;font-weight:600}.btn--primary:hover,.is-checked .frm__switch__label:hover,.btn--primary:focus,.is-checked .frm__switch__label:focus{color:#fff;background-color:#4495d4;border-color:#4495d4}.btn--primary:active,.is-checked .frm__switch__label:active{background-color:#00278e;border-color:#00278e}.btn--primary--alt{background-color:#4495d4;border-color:#4495d4;color:#fff;font-weight:600}.btn--primary--alt:hover,.btn--primary--alt:focus,.btn--primary--alt:active{color:#fff;background-color:#00278e;border-color:#00278e}.btn--critical{background-color:#e37151;border-color:#e37151;color:#fff;font-weight:600}.btn--critical:hover,.btn--critical:focus{color:#fff;background-color:#de5833;border-color:#de5833}.btn--critical:active{background-color:#bd4b2b;border-color:#bd4b2b}.btn--secondary{border-color:#ddd;background-color:#f2f2f2;color:#666;font-weight:600}.btn--secondary:hover,.btn--secondary:focus{background-color:#e5e5e5}.btn--secondary:active{background-color:#d0d0d0;border-color:#d0d0d0}.btn--alt{border-color:#c3c3c3;background-color:#e5e5e5;color:#666}.btn--alt:hover,.btn--alt:focus{color:#666;background-color:#d8d8d8}.btn--alt:active{background-color:#e5e5e5;border-color:#e5e5e5}.btn--wire{border-radius:4px;background:none;background-color:transparent;font-weight:normal;border:1px solid #ddd;color:#aaa}.btn--wire:hover,.btn--wire:focus{border-color:#aaa;background-color:#aaa;color:#fff}.btn--wire--hero{border-radius:4px;background:none;background-color:transparent;border:2px solid #fff;color:#fff}.btn--wire--hero:hover,.btn--wire--hero:focus{border-color:#fff;background:none;background-color:transparent;color:#fff}.btn--wire--dark{border-color:#222;color:#222}.btn--wire--dark:hover{border-color:#222;background-color:#222}.btn--icon,.btn--top,.header__button,.header__button--menu{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transition:background-color .1s,color .1s;-moz-transition:background-color .1s,color .1s;-o-transition:background-color .1s,color .1s;transition:background-color .1s,color .1s;border-radius:4px;-webkit-tap-highlight-color:rgba(0,0,0,0);padding:0;border:none;background:none;text-align:center;text-shadow:none;vertical-align:middle;position:relative;width:33px;height:33px;line-height:34px;text-indent:1px;font-size:16px}.no-touch .btn--icon:hover,.no-touch .btn--top:hover,.no-touch .header__button:hover,.no-touch .header__button--menu:hover,.no-touch .btn--icon:focus,.no-touch .btn--top:focus,.no-touch .header__button:focus,.no-touch .header__button--menu:focus,.no-js .btn--icon:hover,.no-js .btn--top:hover,.no-js .header__button:hover,.no-js .header__button--menu:hover,.no-js .btn--icon:focus,.no-js .btn--top:focus,.no-js .header__button:focus,.no-js .header__button--menu:focus{color:white;background-color:#6d6d6d}.no-touch .btn--icon:active,.no-touch .btn--top:active,.no-touch .header__button:active,.no-touch .header__button--menu:active,.no-js .btn--icon:active,.no-js .btn--top:active,.no-js .header__button:active,.no-js .header__button--menu:active{-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s;color:white;background-color:#555}.btn__icon,.btn__icon--sm{margin-right:.125em;vertical-align:middle;margin-top:-.125em;max-height:1em;max-width:1em}.btn__icon{margin-left:-.25em;font-size:1.5em}.btn__icon--sm{font-size:16px;margin-left:-.25em;margin-right:.5em;position:relative;top:-0.05em}.btn--inline{display:inline;line-height:inherit;padding-left:0.75em;padding-right:0.75em;top:-1px}.btn-stack{margin-bottom:-.5em;padding:0}.btn-stack .btn{display:block;margin-bottom:.5em}.colorpicker{-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.2);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.2);box-shadow:0 1px 4px rgba(0,0,0,0.2);-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;position:absolute;display:none;top:0;left:0;background:#fff;padding:15px;height:120px;width:145px}.lt-ie9 .colorpicker{border:1px solid #eee}.colorpicker__nub{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);position:absolute;width:10px;height:10px;top:50%;margin-top:-5px;right:-6px;background:#fff;border-top:1px solid #eee;border-right:1px solid #eee}.lt-ie9 .colorpicker__nub{display:none}.colorpicker__2d{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;position:relative;display:block;float:left;width:120px;height:120px;cursor:pointer}.colorpicker__2d-white,.colorpicker__2d-black{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;position:absolute;width:120px;height:120px}.colorpicker__2d-white{z-index:0;background:-moz-linear-gradient(left, #fff 0%, rgba(255,255,255,0) 100%);background:-webkit-gradient(linear, left top, right top, color-stop(0%, #fff), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, #fff 0%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, #fff 0%, rgba(255,255,255,0) 100%);background:linear-gradient(left, #fff 0%, rgba(255,255,255,0) 100%);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00FFFFFF)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00FFFFFF')}.colorpicker__2d-black{-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,0.2);-moz-box-shadow:inset 0 0 2px rgba(0,0,0,0.2);box-shadow:inset 0 0 2px rgba(0,0,0,0.2);z-index:1;background:-moz-linear-gradient(top, rgba(0,0,0,0) 0%, #000 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0,0,0,0)), color-stop(100%, #000));background:-webkit-linear-gradient(top, rgba(0,0,0,0) 0%, #000 100%);background:-o-linear-gradient(top, rgba(0,0,0,0) 0%, #000 100%);background:linear-gradient(top, rgba(0,0,0,0) 0%, #000 100%);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 0, startColorstr=#00000000, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType = 0, startColorstr='#00000000', endColorstr='#FF000000')}.colorpicker__2d-marker{-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.3);box-shadow:0 1px 2px rgba(0,0,0,0.3);background:#fff;border:1px solid #ddd;position:absolute;margin:-6px 0 0 -6px;width:10px;height:10px;z-index:2}.colorpicker__1d{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,0.2);-moz-box-shadow:inset 0 0 2px rgba(0,0,0,0.2);box-shadow:inset 0 0 2px rgba(0,0,0,0.2);position:relative;display:block;margin-left:10px;width:15px;float:left;height:120px;cursor:pointer;background:-moz-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 66%, #f0f 83%, red 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, red), color-stop(17%, #ff0), color-stop(33%, lime), color-stop(50%, cyan), color-stop(66%, blue), color-stop(83%, #f0f), color-stop(100%, red));background:-webkit-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 66%, #f0f 83%, red 100%);background:-o-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 66%, #f0f 83%, red 100%);background:linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 66%, #f0f 83%, red 100%)}.lt-ie10 .colorpicker__1d{background:url("/assets/settings/colorpicker-1d.100.png") no-repeat}.colorpicker__1d-marker{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.3);box-shadow:0 1px 2px rgba(0,0,0,0.3);border:1px solid #ddd;position:absolute;background:#fff;width:16px;height:4px;margin:-2px 0 0 -1px;z-index:2}.disc{-webkit-border-radius:100%;-moz-border-radius:100%;-ms-border-radius:100%;-o-border-radius:100%;border-radius:100%;overflow:hidden;position:relative;vertical-align:middle;display:inline-block;text-align:center}.disc:before{content:'';top:0;right:0;bottom:0;left:0;border:2px solid #000;position:absolute;opacity:.15;border-radius:100%;z-index:1}.disc--xs{width:16px;height:16px;line-height:16px}.disc--xs .disc__wrap__img{height:16px}.disc--s{width:30px;height:30px;line-height:30px}.disc--s .disc__wrap__img{height:30px}.disc--m{width:40px;height:40px;line-height:40px}.disc--m .disc__wrap__img{height:40px}.disc--l{width:50px;height:50px;line-height:50px}.disc--l .disc__wrap__img{height:50px}.disc--xl{width:60px;height:60px;line-height:60px}.disc--xl .disc__wrap__img{height:60px}.disc__wrap{float:left;display:block;position:relative;text-align:center;left:50%}.disc__wrap__img{vertical-align:middle;position:relative;display:inline;max-width:none;min-width:1px;right:50%}.disc__img{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;vertical-align:middle;display:inline-block;max-height:100%;max-width:100%;height:auto;width:auto}.disc__obj{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0}.frm{display:block}.frm__label{font-size:0.9em;font-weight:600;color:#222}.frm__label__chk{margin-top:0.4em;margin-right:.5em;display:inline-block;vertical-align:top}.frm__label__txt{display:inline-block;overflow:hidden}.frm__text,.frm__input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;font-size:1em;background-color:#f7f7f7;border:1px solid #e6e6e6;color:#222;outline:none}.frm__input--disabled{background-color:#e6e6e6}.frm__input{border-radius:4px;height:2em;line-height:2em;padding-left:.8em;padding-top:0;padding-bottom:0;-webkit-appearance:none}.frm__input--clearable{position:relative}.frm__input--clearable .frm__input{padding-right:2em}.frm__input--clearable .frm__input__clear{position:absolute;top:0;right:0;font-size:.8em;line-height:2.6em;padding:0 1em;color:#888;cursor:pointer}.frm__input--clearable .frm__input__clear:hover{color:#222}.frm__text{padding:.8em;border-radius:4px}.frm__select{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:4px;display:inline-block;position:relative;overflow:hidden;line-height:2.2;height:2.35em;border:1px solid #ddd;background-color:#fafafa;color:#333;padding:0;vertical-align:middle;margin-bottom:0;cursor:pointer}.frm__select:hover{background-color:#fff}.frm__select select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;background:none;cursor:pointer;margin:0;padding:0 28px 0 .75em;position:relative;display:block;font-size:1em;line-height:inherit;min-width:10em;width:140% !important;height:2.2em !important;outline:none !important;border:none !important}.lt-ie9 .frm__select select{padding-bottom:0.4em}.frm__select:after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\76";margin-top:-5px;font-size:12px;line-height:1;pointer-events:none;vertical-align:middle;display:inline-block;position:absolute;right:10px;top:50%}.frm__select--no-first select option:first-child{display:none}.frm__buttons{clear:both;padding-top:1em}.frm__buttons .frm__btn{margin-left:.5em}.frm__btn{min-width:7em;height:2em}.frm__switch{position:relative}.frm__switch__inp{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.frm__switch-on{display:none}.is-checked .frm__switch-on{display:block}.frm__switch-off{display:block}.is-checked .frm__switch-off{display:none}.frm__color__swatch{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:4px;cursor:pointer;display:block;width:50px;height:2em;border:1px solid #e6e6e6}.frm__hr{width:100%;margin:1em 0;border-bottom:1px solid #eaeaea}.frm--newsletter .frm__input{border-radius:4px;vertical-align:top;width:60%;max-width:24em;height:2.5em;line-height:2;font-weight:600}.frm--newsletter .frm__btn{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:top;height:2.5em}.frm--newsletter__chks{text-align:center;margin:1.25em auto 0;font-size:1em;min-width:20em;width:70%}.frm--newsletter__chks .frm__label{display:inline-block;margin:0 1.25em;text-align:left;min-width:8em}.frm--newsletter__frq{color:#888;display:block;font-size:0.9em;font-weight:normal}.frm--vrt .frm__label,.frm--vrt .frm__input,.frm--vrt .frm__text{display:block;width:100%}.frm--vrt .frm__label{margin-top:1.25em;margin-bottom:.5em}.loader{display:none;width:32px;height:32px;background-size:1600%;background-repeat:no-repeat}.is-loading .loader{display:block;animation:loader-animate 0.5s steps(15) infinite}@keyframes loader-animate{0%{background-position:left}100%{background-position:right}}.msg--box,.msg--info,.msg--help,.msg--untranslated,.msg--warning,#error_homepage,.msg{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;display:block;position:relative;margin:.5em auto 1.25em;padding:1em;color:#333}.msg--box{background:#f7f7f7}.msg--info{color:#a97022;background:#ffe7c9}.msg--help,.msg--untranslated{color:#002179;background:#d0e5f4}.msg--warning,#error_homepage{color:#de5833;background:#f7d5cc}.modal-trig{max-height:100%;position:relative;display:inline-block}.modal{pointer-events:none;text-align:center;font-weight:400;line-height:1.2}.modal.is-showing{pointer-events:auto}.modal h1,.modal h2,.modal h3,.modal h4,.modal h5{padding:0}.modal p{padding:.5em 0 0}.modal__overlay{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;display:none;height:100%;width:100%;z-index:0}.modal__box{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;overflow:hidden;background-color:#fff;color:#222;min-width:160px;white-space:normal}.modal__close{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;z-index:1;line-height:1;display:block;text-align:center;position:absolute;right:1em;top:1em;font-size:14px;color:#8f8f8f}.modal__close:hover{color:#000;text-decoration:none}.modal__header,.modal__footer{padding:1em;background:#f7f7f7;border-bottom:1px solid #e0e0e0}.modal__header{border-top-right-radius:4px;border-top-left-radius:4px}.modal__footer{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.modal__header__title{font-weight:600}.modal__body{padding:1em;position:relative;display:block}.modal__list{padding:0}.modal__list__link{display:block;color:#666;text-decoration:none;cursor:pointer}.modal__list__link:visited,.modal__list__link:focus{color:#666}.modal__list__link:active,.modal__list__link:hover,.modal__list__link.is-highlighted{color:#666;background-color:#f7f7f7;text-decoration:none}.modal__list__link.is-selected{font-weight:600}.modal__list__link.is-selected:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2713";position:relative;float:right;margin-left:1em;top:-1px}.modal__list__link.is-selected:hover,.modal__list__link.is-selected:active{font-weight:600}.modal__list__link.is-disabled{color:#aaa;background-color:inherit}.modal--popout{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;display:block;height:0;width:0}.modal--popout .modal__box{-webkit-transition:opacity .15s ease-out,-webkit-transform .15s ease-out;-webkit-transition-delay:0s,0s;-moz-transition:opacity .15s ease-out,-moz-transform .15s ease-out;-o-transition:opacity .15s ease-out,-o-transform .15s ease-out;transition:opacity .15s ease-out false,transform .15s ease-out false;-webkit-box-shadow:0 0 0.2px 1px rgba(0,0,0,0.1);-moz-box-shadow:0 0 0.2px 1px rgba(0,0,0,0.1);box-shadow:0 0 0.2px 1px rgba(0,0,0,0.1);-webkit-transform:scale(0.85);-moz-transform:scale(0.85);-ms-transform:scale(0.85);-o-transform:scale(0.85);transform:scale(0.85);font-size:14.4px;font-size:1rem;width:200px;position:absolute;display:block;bottom:auto;right:auto;left:auto;top:auto;visibility:hidden;opacity:0}.modal--popout .modal__box:before,.modal--popout .modal__box:after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;display:block;line-height:24px;font-size:24px;height:24px;width:24px}.modal--popout .modal__box:before{color:#e0e0e0}.modal--popout .modal__box:after{color:#fff}.modal--popout.is-showing .modal__box{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);visibility:visible;z-index:250;opacity:1}.modal--popout--top,.modal--popout--bottom,.modal--popout--bottom-left,.modal--popout--bottom-right{height:100%}.modal--popout--left,.modal--popout--right{width:100%}.modal--popout--sm .modal__box{width:160px}.modal--popout--lg .modal__box{width:230px}.modal--popout--top .modal__box,.modal--popout--bottom .modal__box{left:-100px}.modal--popout--top.modal--popout--sm .modal__box,.modal--popout--bottom.modal--popout--sm .modal__box{left:-80px}.modal--popout--top.modal--popout--lg .modal__box,.modal--popout--bottom.modal--popout--lg .modal__box{left:-115px}.modal--popout--top .modal__box{margin-bottom:8px;bottom:100%}.modal--popout--top .modal__box:before,.modal--popout--top .modal__box:after{content:"\25bc";bottom:-17px;margin-left:-12px;left:50%}.modal--popout--top .modal__box:after{margin-bottom:1px}.modal--popout--left .modal__box{margin-right:12px;right:100%;top:-14px}.modal--popout--left .modal__box:before,.modal--popout--left .modal__box:after{content:"\25b6";right:-17px;top:4px}.modal--popout--left .modal__box:after{margin-right:1px}.modal--popout--right .modal__box{margin-left:12px;left:100%;top:-14px}.modal--popout--right .modal__box:before,.modal--popout--right .modal__box:after{content:"\25c0";left:-17px;top:4px}.modal--popout--right .modal__box:after{margin-left:1px}.modal--popout--bottom .modal__box,.modal--popout--bottom-right .modal__box,.modal--popout--bottom-left .modal__box{margin-top:8px;top:100%}.modal--popout--bottom .modal__box:before,.modal--popout--bottom .modal__box:after,.modal--popout--bottom-right .modal__box:before,.modal--popout--bottom-right .modal__box:after,.modal--popout--bottom-left .modal__box:before,.modal--popout--bottom-left .modal__box:after{content:"\25b2";top:-17px;margin-left:-12px;left:50%}.modal--popout--bottom .modal__box:after,.modal--popout--bottom-right .modal__box:after,.modal--popout--bottom-left .modal__box:after{margin-top:1px}.modal--popout--bottom.has-header .modal__box:after,.modal--popout--bottom-right.has-header .modal__box:after,.modal--popout--bottom-left.has-header .modal__box:after{color:#f7f7f7}.modal--popout--bottom-left .modal__box{right:-23px;left:auto}.modal--popout--bottom-left .modal__box:before,.modal--popout--bottom-left .modal__box:after{left:auto;margin-left:0;right:10px}.modal--popout--bottom-right .modal__box{left:-23px}.modal--popout--bottom-right .modal__box:before,.modal--popout--bottom-right .modal__box:after{left:10px;margin-left:0}.modal--popover{-webkit-transition:background .15s ease-out,visibility .15s linear;-moz-transition:background .15s ease-out,visibility .15s linear;-o-transition:background .15s ease-out,visibility .15s linear;transition:background .15s ease-out,visibility .15s linear;display:table;overflow:hidden;visibility:hidden;background:rgba(255,255,255,0);position:fixed;height:100%;width:100%;bottom:0;right:0;left:0;top:0;z-index:300}.modal--popover.is-showing{background:#ddd;background:rgba(255,255,255,0.7);visibility:visible}.modal--popover.is-showing .modal__box{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);opacity:1}.modal--popover.is-showing .modal__overlay{display:block}.modal--popover .modal__wrap,.modal--popover .modal__box{z-index:5;position:relative;overflow:hidden;margin:auto}.modal--popover .modal__wrap{pointer-events:none;display:table-cell;vertical-align:middle}.modal--popover .modal__box{-webkit-transition:opacity .15s ease-out,-webkit-transform .15s ease-out;-moz-transition:opacity .15s ease-out,-moz-transform .15s ease-out;-o-transition:opacity .15s ease-out,-o-transform .15s ease-out;transition:opacity .15s ease-out,transform .15s ease-out;-webkit-transform:scale(0.85);-moz-transform:scale(0.85);-ms-transform:scale(0.85);-o-transform:scale(0.85);transform:scale(0.85);-webkit-box-shadow:0 0 15px -3px rgba(0,0,0,0.35);-moz-box-shadow:0 0 15px -3px rgba(0,0,0,0.35);box-shadow:0 0 15px -3px rgba(0,0,0,0.35);-webkit-overflow-scrolling:touch;pointer-events:auto;display:table;opacity:0}.modal--popover .modal__body{max-height:100%;overflow:auto;height:100%}.modal--popover--scroll{display:block}.modal--popover--scroll .modal__wrap,.modal--popover--scroll .modal__box{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;display:block}.modal--popover--scroll .modal__box{overflow:auto}.modal--popover--notransition{-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s}.modal--popover--notransition .modal__box{-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s;-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none;opacity:1}.modal--popover--gray.is-showing{background:rgba(210,210,210,0.6)}.modal--popover--dark.is-showing{background:rgba(85,85,85,0.9)}.nav{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;background:#e6e6e6;background:rgba(0,0,0,0.1);color:#f8f8f8;position:absolute;top:50%;margin-top:-21.333333px;width:64px;height:64px;line-height:64px;font-size:28px;vertical-align:middle;text-align:center;display:block;z-index:2;cursor:pointer}.nav:hover{background:rgba(0,0,0,0.25)}.nav:active{background:rgba(0,0,0,0.5)}.is-mobile .nav,.touch .nav,.no-js .nav{display:none}.nav--hero{-webkit-box-shadow:inset 0 0 0 2px white;-moz-box-shadow:inset 0 0 0 2px white;box-shadow:inset 0 0 0 2px white;background:none;border:2px solid #fff;border-color:rgba(0,0,0,0)}.nav--hero:hover{background:none}.nav--prev{text-indent:-4px;left:24px}.nav--prev:before{content:"\2039";line-height:1}.nav--next{text-indent:4px;right:24px}.nav--next:before{content:"\203a";line-height:1}.nav-menu,.nav-menu--slideout{background-color:#fff}.nav-menu ul,.nav-menu--slideout ul{padding-top:0;padding-bottom:0;list-style:none}.nav-menu li,.nav-menu--slideout li{list-style:none}.nav-menu__icon,.nav-menu__close{text-align:center;color:#bfbfbf;font-size:1.2em;line-height:1;background-color:transparent}.nav-menu__icon--top-right,.nav-menu__close{position:absolute;top:0;right:0}.nav-menu__icon--clickable,.nav-menu__close{-webkit-transition:all .15s ease-in-out;-webkit-transition-delay:0s;-moz-transition:all .15s ease-in-out 0s;-o-transition:all .15s ease-in-out 0s;transition:all .15s ease-in-out 0s;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);z-index:2}.nav-menu__icon--clickable:hover,.nav-menu__close:hover,.nav-menu__icon--clickable:focus,.nav-menu__close:focus{color:#575757}.nav-menu__icon--clickable:active,.nav-menu__close:active{color:#bfbfbf}.nav-menu__icon--clickable:visited,.nav-menu__close:visited{color:#bfbfbf}.nav-menu__close{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1;padding:1.6em 1em 1em}.nav-menu__list{display:block;position:relative;list-style:none;padding:0;margin:0}.nav-menu__list li{position:relative;top:-0.45em}.nav-menu__heading{padding-top:2.2em;padding-bottom:1.6em;margin-bottom:-1.25em;color:#888}.nav-menu__heading span{text-transform:uppercase;font-size:0.75em}.is-mobile .nav-menu__heading{margin-bottom:-1.5em}.nav-menu__heading--primary{padding-top:2em;margin-bottom:-.75em}.nav-menu__item{position:relative;font-size:1em}.is-mobile .nav-menu__item{padding:.125em 0;top:-.25em}.nav-menu__item>a{padding:0;display:block}.nav-menu__item,.nav-menu__item>a,.nav-menu__item>a:visited{color:#333}.nav-menu__item>a:hover{color:#333;text-decoration:underline}.nav-menu__item.only--mob{display:none}.is-mobile .nav-menu__item.only--mob{display:inline-block}.nav-menu__item--primary{padding-top:2.05em;margin-bottom:-0.75em}.nav-menu__item--icon{margin-top:5px;margin-bottom:5px}.nav-menu__item--icon:first-child{margin-top:0}.nav-menu__item--icon:last-child{margin-bottom:0}.nav-menu__item__icon{margin-right:5px}.nav-menu__themes{height:17px;padding:12px 0 12px !important}.nav-menu__theme{-webkit-border-radius:13px;-moz-border-radius:13px;-ms-border-radius:13px;-o-border-radius:13px;border-radius:13px;display:block;width:18px;height:18px;padding:3px;float:left;margin-right:5px;cursor:pointer}.nav-menu__theme.theme-is-selected{padding:2px;border:1px solid #333}.nav-menu__theme-color{-webkit-border-radius:10px;-moz-border-radius:10px;-ms-border-radius:10px;-o-border-radius:10px;border-radius:10px;display:block;position:relative;width:18px;height:18px;overflow:hidden;z-index:1}.nav-menu__theme-color-top,.nav-menu__theme-color-bot{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);position:absolute;display:block;width:18px;height:18px}.nav-menu__theme-color-top{left:-5px;top:-5px}.nav-menu__theme-color-bot{right:-6px;bottom:-6px}.nav-menu--slideout{-webkit-transition:-webkit-transform .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:-moz-transform .3s ease-in-out 0s;-o-transition:-o-transform .3s ease-in-out 0s;transition:transform .3s ease-in-out 0s;-webkit-transform:translate3d(14.25em, 0, 0);-moz-transform:translate3d(14.25em, 0, 0);-ms-transform:translate3d(14.25em, 0, 0);-o-transform:translate3d(14.25em, 0, 0);transform:translate3d(14.25em, 0, 0);-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-box-shadow:-1px 0 1px rgba(0,0,0,0.2);-moz-box-shadow:-1px 0 1px rgba(0,0,0,0.2);box-shadow:-1px 0 1px rgba(0,0,0,0.2);width:14em;display:block;height:100%;position:fixed;top:0;bottom:0;right:-14.25em;left:auto;z-index:200}.nav-menu--slideout .nav-menu__list{padding-left:1.5em;position:absolute;overflow:auto;overflow-x:hidden;bottom:0;right:0;left:0;top:0}.nav-menu--slideout.is-open{right:0;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.csstransforms3d .nav-menu--slideout{right:0}.is-legacy-android .nav-menu--slideout{position:absolute}.notification{-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;display:table;left:0;opacity:0;position:fixed;top:-64px;width:100%;z-index:500}.notification.is-showing{opacity:0.8;top:40px}.notification__wrap{display:table-cell;width:100%}.notification__text{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;background:#333;color:#fff;display:table;margin:0 auto;max-width:300px;padding:10px 45px;text-align:center}.sep--before:before,.sep--after:after,.sep--small,.sep,.zcm__sep{border-left:1px solid #d0d0d0;margin:0 1em;display:inline-block;vertical-align:baseline;position:relative;top:0.15em;float:none;height:1em;width:0}.sep--before:before,.sep--after:after{content:""}.sep--small{border-color:#e5e5e5;height:.75em;margin:0 0.35em;top:0}.switch{-webkit-border-radius:10px;-moz-border-radius:10px;-ms-border-radius:10px;-o-border-radius:10px;border-radius:10px;position:relative;height:16px;width:26px;background:#aaa;cursor:pointer}.switch.is-on{background:#4495d4}.switch__knob{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;-webkit-transition:.1s,linear,left .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:.1s,linear,left .3s ease-in-out 0s;-o-transition:.1s,linear,left .3s ease-in-out 0s;transition:.1s linear left .3s ease-in-out 0s;position:absolute;display:block;left:2px;top:2px;height:12px;width:12px;background-color:#fff}.is-on .switch__knob{left:12px}.switch--checkmark{width:32px}.switch--checkmark::before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2713";position:absolute;top:2px;left:5px;color:#fff;font-size:12px;line-height:1;opacity:0;transition:opacity 300ms ease-in}.switch--checkmark.switch--large::before{top:6px;left:7px}.switch--checkmark.is-on::before{opacity:1}.switch--checkmark.is-on .switch__knob{left:18px}.switch--large{-webkit-border-radius:30px;-moz-border-radius:30px;-ms-border-radius:30px;-o-border-radius:30px;border-radius:30px;height:24px;width:44px}.switch--large .switch__knob{height:20px;width:20px}.switch--large.is-on .switch__knob{left:22px}@font-face{font-family:'ddg-serp-icons';src:url("/font/ddg-serp-icons.eot?v=0.48457131068509884");src:url("/font/ddg-serp-icons.eot?v=0.48457131068509884#iefix") format("embedded-opentype"),url("/font/ddg-serp-icons.svg?v=0.48457131068509884#ddg-serp-icons") format("svg"),url("data:application/x-font-woff;charset=utf-8;base64,d09GRk9UVE8AAC6IAAoAAAAAUMwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAENAAAKcMAAEnePD6mlUZGVE0AAC5sAAAAGQAAABybIVCDT1MvMgAAAUgAAABWAAAAYDpZSL9jbWFwAAACkAAAAYsAAALw4V1shGhlYWQAAAD0AAAALgAAADYd87N1aGhlYQAAASQAAAAcAAAAJAPwAcNobXR4AAAt+AAAAHIAAACUCZ8HaW1heHAAAAFAAAAABgAAAAYASFAAbmFtZQAAAaAAAADtAAABuXHjHZhwb3N0AAAEHAAAABYAAAAg/90AGnicY2BkYGAA4nr/F9Hx/DZfGbiZGEDgXpZlDYL+f4CJgfEAkMvBAJYGACW2CkYAAHicY2BkYGA88P8Agx4TAwgASUYGVMAEAFCSArcAAFAAAEgAAHicY2BhYmCcwMDKwMDow5jGwMDgDqW/MkgytDAwMDGwcjKAwQEGBmYGhhcPGKAgIM01haGBQVGbjfHA/wMMeowHGByAwowgOcZixgYGBSBkBABbpA2QAAB4nG2PPW4CMRCF3/6AFArSJB1CTo28GrxSCsoUHIELsKsVzRrZVJyFA1BxFI6Qk6TIW+9EocCWPZ9nnp/HAOa4IcPfyJUzTPCqnGOGlXKBD5yVS2quyoP6rjyl5w+VWfmiriNn9CmUc7zhXbnAFz6VS2ouyhMs2dvIUyzwPVgdsIdHj0jc+54hokXAEfaxFttwtCrYpuQpxYCOcgOHCsK44fq/Np5rVix3S5VwOVr4/rT1oWuNq8RsTHJmrMXW1olzzxrbpcYiK0Pe0EuwTu8OE7s2xIPvjci6EmGi4ez46tMPNU1nHz71C8iSPdcAAAB4nJVRSyhEURj+7nAHw2DcYTymZs4whzFG8iaEhZASNlZKsfBIFrKcpYUspCgLG1mQna2VsiZK0701j52ys1FWx3/P3K4xFvLVd/7n+e/33wOgAFn6odAJ5Y0iRcaFygPZaYxChQsMMUxhESvYwi6ucYtEYCbIg4PshF2xe/bEEuwjdBw6a3SE58J34Ueucg+P8AG+yjf4aTOatYgWdQpBMxlaMIRZLGENOzmzBtihPevdnnVjz+rLmVUVVYUQGdgQF2JbLIuJzHP6M/0KpOKpldRiagFIniaPku0G9RrrRo/RamiAbugv+qU+rnckOl/G5MaTmMcm4tjHT+zZ3nflwPbOkQ+H/J+FRBVOOouIxbJSYnW4UIoyuK2onFghvUp4pK0iavCiWkY1RB9CaEQTwjLDEUWbdTuGTsvrQre0PcReK9eHfgyTHaGXJS3KL7F5sBocBaRf/Vly0iLF2R1cpWUy5ZbqK0zhJjymcs1rutWmbJ/M1tbV//XV/6LBH/idDLK/L34BnM9a5gB4nGNgZgCD/7cYJIEUIwMaAAAuGQH3AAB4nK2cCXRVRdL4u7OThEBWMGLCImsMuMCgwgxXHdyi4wbIjBsIYVEgMQQQNx6DCPpARFFkUEEFdQzDOIiKiHpFVIYg4xI+F1SMiKCRTQjvwQuv//Xre98LMzpzvjnf/3is9O2luqq6uqq6uh9aJSUprXWrkSNHl04sr6osHTuiYsJEpROUVpeGW6nwMB0enhC+MTHcNmlOpi7aWdgrM7Go8zMmM6koXZ1wVY4JBuOFzNT7ysILwoOT2yW81aqdUq3bJV6e3U6d1u78v+WoC0GZojJUa5WnTlDF6mTVTZ2iTlV9VX91jjpfXaguV79XI9QodZOaoCapqepONV3NVPPUQ2qhWqKeU6vUWvWO+of6Qn2tvlN71WEV1Uk6TWfrQl2kO+muuqc+U/fX5+oL9RX6an2NLtdjdYWu0lP0dH23nqPn64V6iV6pX5H/1um3ho8rr6oeVVUxZcLE8WPHlY8rH1VdNXb0mOrxw6tuLq8aMa5ixM2jq8aOHFNRNWHshFEVIyrGjy+fUD2uYlJl+SSR1kTpMbF8UuWoiorqG4ePGyefk0ZOHD65fOTYqvIR1WNFkuVTy8EyoXzKxOopY6ury6sYOFJmrKwqnzyh/NZqi6P0xopxI0dUVE4dX1FlySi9cexoSwqF4VVCYinVXmlSpffXdvCKYIw12p4Tpwyv5P/S0ydVjqsYPrJ8pNAxHJpGVIwbJ23l5bdWDp8wUhiaxKSlE8eOnjCufOJEWxhTMb68criQWi34qr2JPHJorRw3fGq1nbLazmUJpmHEWBFa+UShacSY8hE327rxFZPLq8pHM3HV1DHlw6uqx0+aOHZE6YSK6vIRFaNliuqxE0ZPtAM8UkHM32a2rXi8z+qKSquinp4qpWfp2fpelame0ffpoCzxXH2/nqcfkKV+UD+kF+iH9SOy6I/qRfpPerF+TD+unxAVWKqf1E/pp/UyvVw/o5/Vz+k/6+d1jV6h/yLq8Vf9gv6bXqVf1Kv1S/plUZY1+lW9Vr8mSvO6fkO/qV39ll6v39Yb9Dv6Xf2e3qj/rjfpWk/LO6pvdGNiRuKpiQMSH0zcmfRy8tjkV1qe13Jt1jWtXm/9XvbBnLNy5+Xdka8K1rS5p/BP7d46ae5JHxeVFs0qbtF+Xof0DkM6PNHhp47ndVzYsaFT3cntOt/VpV2XC7pc2+WWLgu7uF2+6XpZ1+ldn+y6udup3a7uNqnbI92Ods/sXtljYI93et51xpw+Tt9p/T79zYkDOjlDz1l47txz3w8uC81ZppctC5+6LHFZQfjG0BtNN6YsiyzPD80JnxqZk5p1s1HDBwSM+s0R16jTGwXM+VA16Bqj3lwk1QPmCnA/U4nh3uHe+ZG6FGO+eE4Zs2NoDMhncaQu1atX7WKNqtNQVRSS/qrTMEfql7heI/XFIelPQbraRgZ9scQtMmbAokBJvjetmdhLqt2qgOAYsEu+728dyKfC9akdMNdJySozqmdQcHxYLTUDP5YJgk+6tk4H/abq6x2/qecs5ZdsnbQmhhaU5bdPN1rGJ3VI9xqiK4OOEKGSlEzd4nLp3qLMFWytL3WNOfyCfKccFdLeKpHSb7ZKaeF50my/PUAfc3i1Aw7HmJ/SPBQ0OMeXWoZA2+Iy1weW3FPOEnBhZ+WTbz5+1/2FMZaqy9w0Y97Z4oby8jumGxN8RhV0TP//LpKqNBGJfIjwTcT9jyKxPMOK8OwEPYo9ADHCiizjK9uENfstrAb+ZYxM0XS8AH0Mq0HmifGymCCs5O0ajFkXCHrfABHJxpMF+XUFgeOlEupdG8qbokPVtaLLoer8SF4oryySF8krCwmQtlBeCp20tPbOr43UlaVmGT1I+NMLnob3HvWOB1SpbBjz0TrZGaq964Nn35C6oedIXekFrt9lKCtJg3qWNXx2fSBZUE5/WCrenKl8lGprkXD00RpB/pHrdzVDf+0Pb0bpt74RA8xqzHYHlJeMkopRNzraqKvvFZSjnxdRTGf/SinRq9StN8PF/G3S/txkGXvxPCcY9MrqpXHSd0J3GTX8DJl0lUyvnI3SaXlZDFBn3qT1iQ9kp3rj+i0SnOrki9jcM9jOd0jPbS87Pthxp/LBP9fZzt6w+FgBjv0szhKqzhopH6MWu2KH7qX4q8WurjWqr9gBNbttQKpHUzyzbUDUNZyX36FPnw4d6vs0NtbXNzb2qe9QLLKRDtFXR8pONqt3ysRvF8pM/XfKqLJCC+yn4wP7aRvoYjt7w1a/r/ik7gxFXaBYhN9WOn632M0vKbu5IZSXmlXTUCv/6aD9k5jXFFqdVNLQkFpb0Ayb0KufV0bqflaZZdSkZKEpcLHM+td0KXVkaabeqabkGDXsdil3qGRx2UMdxkip90IBPYeo3HVGD5nnhOrYq2ExX+ZggeBoXM8+E/0xhwa6xbKVmqR/9MeBwuP6JJUs37+WSVLYUKEGwZT0GaVr2XQHc2Rv+Qg2YOUODQygNipBav78NBv2GNqYgDYawG7FJw07QSDfAo85bBSZ1RwbKe26NaVnKPWSMcduFBR6lYw5tkrqEtrJ9NHCQJpQcqNUNnWTyuSNNK+EzgvZ7kmV2J+kEkb2kPbEx2SGhHRKWDgd4fMbKSXslZL+UfolLgBlbxb04CY32bKhZPq/fxyAeMx1YsBbXNN0D4ivoPQBJBXLoGNBSpdA8NXSOTFPWqMZlAKwm+cI9tlfSsevN7vJMvpJxDEdJgugVS+C7sSVyjNyKhFDoFPAeZROSF4fhfbBfC7h821KPWClDQ25jt9PYmKpOxsnkfAHNw1OUpijJ0aw92JWeoPPIQvVtEjFFyoQW6hdTmyhvmWNzS67UOfYhYLHkcitNVJ/xv2PCwV5tEZbUHc/pVuo20KJkCIBzYoekFJiFtOjt4k5TlDklfm9YEzH3rQgDMl42ZHt9eNpjgQIGTKFaexHE/bv4OMBCRBKrpXJS/vin1F/s/shaP8C2/wo695mh5NsdEvk2/Mz9n6ko/QKrWWV+kqnRmZpgSGKPO4in/77hKJvXoKsqOMpskqYI+1RF262I5+LGJ3qIM2zXQ8K0Cj62VamlLJsSy7fiSBqxeIkTrdrfgm1O8H3NQv6oPhtlYAp0g8KSMDzJvyelkWU8AoJ7WSKJID6g3wmPY0s76LuSmSJrbSlpg0BX6ciGP2EK5UwZd7OkZ4nYVpVIkt9jLW7AOW5CG04ADlrKW1iS0dT2KhRLIVZC3YW09wpm8UcW0TlIJQfExBFzlGr97OaSwyZAH19HL/LsSZxw+q6fjLjpTmB/Nw7xO3/AyGlYW2OHnE982wi+JNoKXzcJnVNmwFT+GSTRpNgi7WyQUFkpoeBEqw0+a0qcSYjPkCpHqC0DTGtgKAcYTT5RFg4CEEXnkZEl2yXqy2d3kfmBD+gUIln2BIYe8VMSJIVYhrihkITog73GU1yvFZLuh1hmm73sZhIXxB84njMKpWHMHetl+INXdx8u0TsnW/WgfMoBEYQRw2yawTTEoBd6t+jq1MQQiXCGkbpReTe365aL/T/2Alo3HsY1QvQqmspPQcJj7LyBCgJ11J6jtIORo+nVE/pJsi/ChoKYP1uxb5UmVadYxBLyRTtrJlHfdo7njFR6iSr6J3YHgmYL7UKna5h9gHKbjFcwkmERSrZ9WJiq7wqIQPlvc71NFjpZQKSZlNiEZKux2gRzyStgx/0O6k1gox+puZCOKwSUqKHSle6sRKGAX1VOifg6bBSRJTR7pB3N6VMSr+ln8HsNX2OMI9ZL4bRP3YZnd5TaVkSHoZ610h8qIMSO4aqiTcGiV2pwpnNHRMD9hOg4g2qGXgNi4XRuUQzAGNL1BkBxTVNefllEn6m1CSV1damSAjQQWjXUw66EtQli8nX4dVOotEJ4rT1ohQsW7Wcqcw88R9mGfZ13lwH116Lw2kL2n3ECN0mCDXbZMXVb6dJp3UiM/MKW2r5ZWL+cBzzJbpT12DES9miQU5klShtvx2UOG4BZCb5vIbjjUxcJFHnYeSfwlHJPCXmSV1XhNc7kzB1EHoSksBWTcySuV4So60uxpXXyJlODcJ2TJ6A6anB6NTc6notpmYqizGZ2Qd9yDcsXIwPerkP0ip1/PPCoCuky6/wKCqTDXEQZAL5RpMb8PTX3SsonnIDQlUGHuQQpOUMQV0zxPCojAH0yhO6VN6l0J7BwSbDHmxysGWHmCqjl/j1aLX4dXXtRk6g65j23I30God1OE9YVOduppTg2BZpWMEs57E4r2MKzkMRX++Fkj0kvsis2xPwWsy6qO0jnw8xsXkd63TuxkBaVjiPcG94ggr1juQ1GHV9VIXySmpzZ4cXyFpNV/klcmJvi39pPyqQnPtAUKLidCbP7+sU16ZiHFoHao3ZfL0Sx9k43wZyApNtlW0tCxaXpebONuaHjRJqm8a+TrAoeLOU9kxnIVZNkxmDyblLxaoLGXn5tam5rp1G4jeVvy9Q3ICfJsA/ygG/N2eAV7Lw003t5aQoZcf3wLV0OjRDFZek5j4n87UOMN++gMxXZsy0BFVmrXxZ6BAWw2EPBUQyasAYe2hqO8sJya5TazgDrkkTH69SNrgA+E9HhkfwNvJNKeA1m8YE2OCbZrEcF4TcyCXyhxhqTWvRjFjnQHNnJz7CA0HbFMdNlLeGk+oFYWURWpDcPI3t30yL49NiJxJKg14LwMfUDDxMx3Hxz/3jTKN76cfcZvRpwpV6JeIiq5JdgSliNMx50v/zPNFYNUs2trkNk3cKR/USDFYZJnaFRB7mEqQ36A/SUCpsmrrJYFEbTpMz4+OFKPwHp6n5xmxiRxwjXvxAmswBdu4BzkXv48SbQPI+DjQZx/5BHxGT/oOcatVvX8BC/I+MUd03ubbJqMLvA373rCgn9l8TU/bdAvNZO32cqnCnnUw6dQfn/zCwO0GlRdYLZDuxW6cTLBxIwMOvl/O62tiWhd2P+py+2XYSSfRqRrGJtMlbUN15F/yNlsnVw2P8GdVJnCwfRkY3LcR23DMKC7ODnteTkhCQbCed6eFXCbISqpcQplqx7jCgTl8tsyeiNl5HoTZNpNo+STVoq+niSYx6TTyVbjNT2YignpPeSRz/txLa7CKo+xyjuZtNnUIEuFW2ZZC+KyTSMPvWYzCexzJp4tTnOUYMxReYLhh3o2aWuQ2CZBphz8DpaptRv5sQ6GfMh2IGgmI+pleKOWDDXUmahZBMZZArupwQNBlPMpRY5/l58pktBy7mVi1IP/yx0Y1kCq+s4yKipXT2/tfIZ2kVkwuzW/AKlxBjXTPOquR4wvCLOinxYyc/JEgmf0kc/+BFbijPmPEvO2JsxJk9xOpt3ce+2yoW3RwkoPpulEy0+6xAGl1fFpajD2J7BZnFLmao/xApnob3KmUa+RQnpfqyBF2Io7uJG1HV7LQuBCBdjuFZ317rVeJZhSJ9/lko66MTmPz1T2TeP0PBhyko4lGFuyxfLhWTtgnWSrTQgnJCk/s629B7AbKameNYLBhCPG7BTrRnEzzUkesoIQnSh7ikz+Ou/8mu9OsWUTeOzg85dlix7+c8DAt9NGbTEGI1E8UoPNaWKbZH3FtukT8o0Hbi1xMOureI2mGv2yMA+V6OGnLMsoFYe4Ls79LUchmwz0VpuhCe11m/HmGP2Qj8MOc4vQ+TQyCXQnLoCJ4thcyVDYbTcNtJrMK/gDScne2SglM/QsCRskL5CBJw74cxHxE5EJvISoIu2RWYr7VIt+c8Els2b2nBWjkvSGVA1qz6eqcsX/ri3W1GUSpEFc4hStnM1jwD3XljKw5Q2lNs2Wsym9/3moqNIT9qx0d3r5HxFp+WSi/j6bfHkqSylTpziGxPTNceNe7cTxYa2uJNUmu2Y0E+3xAozpohS8oRatMK9aJRXTmbFmKHC8mHF66Il0jFFr7/C60r1BQJUcgE9skJSEzQqine9CyajVIvoa6bLKZ6kIEyS+6bYaO3DlLhdvkmet9zZIMOyOnAHEKTLDhwgUvuPnda2Jgw9uUoPsiC8DJVBILmepXM2Sf1WtEc3XmoSo1jCxyHTST4tOshbBAHoXJJCJJoUnm3ewj1/Y3kkPNR9NypQmkOEWZBa9BeslXQqqw1PkaVcTBgZyky0UfPEUSvP4w3S702RkyMIpH+3Xu4J0i9FgeEX/aYeFooMgu+F/MAQ9TGAPwZc3uOjDqeRRkKEtkcDxI4X/khadrbViC7MOH2UchKJs5MxdJYYD9jdTJy5iCVchyV8fl+LmPIU32GqqRO6VZF7N+17IyHB6n8SOb/ftZQ5n875cn+lLG/xsxqCPzzhL50Y2K1E1oBWTZvzQv8t3N29ufqnC5hyp051ics3apul0XFHauxWOOlZM3vW81hRiXN4FSZdJfgM5tc+201SZSEWD77E/QHL5PFETefpO2erkJBiLRFA3brKP7rB9zSMW6l8skX2JxT68UC8rhISGXntF0YG3GQQOF7jiQhdvBuWIig6T+S8Wdy8y2TZ4K0fgdZLPMu1zwf1MfAu0mKo1iI85ROUTP8XGCYhP5zot0qiWuTVfOcl8QMkdodMDNmA/ejdkdJIu7hoodJBW7jFJyDbLdjhdqRd9nTRXDsJTRQ9rT3EfLBGB8gxZ9qg5zovADngPc5dZ08UAZt5dDZCzN+mNAvxKHr2L1MjkGPbvQagrG490h1wEd/xCZriTZbyiHJC6S6YNfrObmX7hIUBqu7Ddw7yC3ZK419RFlbthJYhxa5QW9llMInhgiYRDricXr+TkZ+I+dT1Zfrnb1Y1n5yFpEgQgeqXNTkoETDetpKtuMG8rMhjlZrxOXKBn/ySVc2+PeEK21w18fe4FghosUqTSWyfBrfqoiq/yEqo6f1sznsU6H/TnzvNVkBL1lKjN0Hm2UI5i04Ch8C/ixLnok6ZjcRk2cf9HupS24K2JO0CePaL2T/vAV1/4Nbbsm5x8ihgBPzKdudybHIfPk+/PVteMWZ5DQ/YvXruFR5kSh8EFm/1WSWVkhkbj7mZFrinYXKVzlIZCKRzQv2pvK4CymbMWwnpVnk624lsepdSOEi7ScNPnjDXyZamzHrOdEYZnMxgeBLbCnvhorOHuZzfPTNczS3esBLFu2wNE9KUGB+SQIpfcF6OPfmHRBHFQPNVHk3XrPWu/GJnH+azfU7NwMPQfMFHCOgJTlr2GSjn9rtihs9NxjAVxP86d8Knz2nEEj0usS1WR01gSDhu1swBm2E64YsRewp9i76YTVu5CB2Kl22hWnEXWe+5/iAOpWOQ8vc7BZJDDFQlJLyPzW9h6/aPRjL6Y8CTHX8ngDTGHS97ubgmVjOli/hEEoRWqhEmtI+le9DXdjuO7BXfyVqM5XPBOKUXxk4nnLZMQETXduTM6pUiA37i9+uTrifyMVshp4T7heMebuxcT/RtIi5t45VYkBU5mChK1KMS/6KzTdaSmmPcaD+Y658bzubUOngmYHjiIcXTPgYbPq0jYFIXnJWqHeDrmmQ432a48PEvMptoQUyeCf75IcZMWA/ASo/1qAK4yDfNpCyLbzdB14X6hgmlC9Ncwq6pMf+ZonpW6FECWTHoohj2b3uCjEnqghfBzBF7P56tnT9Lh+YeryebVU+8JTJw6MCoqf6zX6sDT0F+CgEmXwWYaoAHgqLzPiAQ/aqaapGsBzp6Npkv2C5gvPASjn16WfXi1mpMdGhvybFQZUF5nu8fwFWpgdX7gC1FXvT44jFua9J1YhGb01xQtX5tpZ2xyt5n3a0xbOSCx1BG7Tz1IgNZF5/JqHFEjnLESL1Twh4/Qx7b+3N6RMTw+SN8AgO3uwx4FUJCDTPCs79STEixRLabGYzW3QGWFrcm4OWNicumsDxs8YYw8aMfl7ahw62rxzkjxyvT+kh06YMYZXbviaNuRVCd+52KbW92Crn4W/FG1w7VYh+epaSQ302DxL2viujTvyIHEs2sQiVMYD9lya/k1Sm2aEeEtAFky1yf5pcrnvsZ1vucn8kaU6d2fUSJuWJGgLLXS/ZJuUD+fSaUm03f4AdKkiKsmprQ71rG6bomtpQXW1i6FBoUH6odygvIv8HSyKDgsGy0KBgcqSuoLa2LCWU15SX3xAaVBsZ1JAa6S2bMFxdk19WZjPMFX8T6k4/XcAjD7iU5Jyl//KInH2WXoMuhsLCYxph3U9VOMLbWM9DqwksPs6VE/jSpXJYMj+d7thaH9hPgMoosw2Co+X7Ykv0DTe4DHRSgrHquR5WiVbeszORWjufC1EBIsdkLsGTbLLLUhHh2k2+RebDn5D5ty/n9YFtChGrgk8lz2SNZG7Bdcoeh2k5ErZ8P0BtwCPL+2y5RfmUWFJ/Oh3BL13qMlClBGPVVRarkBo+00EomL1X2XqvHsGkHj2KbbThkqUi6R1lv8mADGHr99nkiqrPmy8BTKvpbJ/KA4FQJvGGeYXTonJlXrOFM+MxIs5Z+P9vFoLwj/OAK/Fq/fcQV2wX2n+3ETtLoLSFTDS5WLMNC9LlBRV8U8gezA6+cB5ajGc8hXO/foNso72CNi+PCthw5OgnstQvXg1JuZ1FngXTBdMHT0nv9wcKCae/Kjh7DVMYvPACns6Eeud3TQ+tFk/ZLd2vDHMb0jU9sjqSR2WQ9w+1Ou/rcF5SWbi6NrWpOtI7/19K9k5lgb1RsX+9K5Xu6aLEq/NLSsoaSmobGmpLGlKkI1cuv9gvsqA2tCCFoGW9Z4l583MDdnvAPlsipzONK4xp24iRzm8N62cji51Eq2cjtkJuAc9vzUMYE0NAHDiNEFrwHFfvBLExN9g4Rg0jQhqBAZpCLCclmayfxPh0yO+RbqJvNamCHulZoQVGd2LReU0myCaQ3Owvka7ueJqyGK8oEPJDvSUQ2RnID3oJB/U2sex8jjP0lVIgtgjB8IKYGISMi8Ry/RRlAecQMM2JR002BrqKCBFgVkDvVRhb4iJVCtETCaIYoTIZJmggZ+TJhNv6xa5K7ErQkm2imwlLl7WXjRh9ZS3xnBI+QqvzLWUxGgmMhG7LU6FdksemKZu0hxszYbMM1x0vdX+JE7NETl4+JwchvSWkQ5dXglYPxENdy5NZccQ9jkXLO7HjL8xhl2LWnczwdw48N3HWGY4MjpIzvpObiicIM+twZKPJUc1g9wwlzULJPCunYNuqHuVeiBFq+Hofi0peZVl/QFDo65dgPleQCbyKW8lbuQ0yK9jhVB5Xshfbt5KwuaqSOk4+dsgKTrqzBnHSuIrHWVfdAaO3AsZhEGdxIl0xixnuJIE+kQTTiXPxpFs5h1nw8Hxpv2mCDOrxpZR6cEU+gJsoV04+KrDBAlpJim0lyp9G6DKNY57iutDMtKK0u5AV/ZorP6e9mxheICtb0sDdTSBo35FNI8k+gByc2hkoaSgpkY4c80wh+y6A3k97w74z+VjVlkiHYK3MfpO9jjIPS3hYFmwoaWgoQ+eCTihPMFbL/itDqIO+cibLOYuXQ11mqxyjFmPcOnQn4HpPKhf/RUQZPUPqeqCKl98i9HerCuRuMOrY7bIpV21CLjP7S//HbhdCHhdnau5Jkc97CtjId1OXLYNuexvAwXQEMfmNPB2a+gPh5NQjMuQxQqAbxbGbmX1IH5lGkdHsNKu1b+EgKqRp93QB3/zGLc6tE26/OUXGrf4Kgf6e8++Br7jAPkAGIvugjD58haAsJEFWeL6UTuHqemuT4Pq01uUM+2kt1r01jqqYXcqtyx6xSCbaTT6PESod3gzg/UG0l5SiV0hp/zAp7SP0ir4jU+WC1twkVLRqRzSpHuZ7DYvV3fG+xTtc1ugS7Hf8oyDYvVKGtWGOvcTZKYMF34f3CILsDlK3k9v91oS0oXVEOE8IpjRysz3YMif9SkBXbEwHHiwV8kYrnzRB1qnSL69OQELEviXTTlruj7wyu0tQfduK2VayVUQ+VkrSM3GikNqYgTlAQJmYmWRZSdVCWFRZPFnI6gCfXAdkiuxVq9c51LRaZZ+vbZOm7w7IwJYH2Ett77RPpi6UilN5GrHrfno1DAU2dRKEeYnS1KYXLn+/gBT0Q30rk2R0xlUvE/wpnBDU76RUQoxv5kmpDS5ln30GvHsbWn9IWj7l5cmH1zneIqAipNeDJHf6Xs+RoSEbalpKX3XFLhnw1RonmJZbJxoQhvPOMu3pHZXPqgXZ37IYFztWGsW5mz2pmOi50nZyLiIuJPWk2tzFAv0oWFrzsDh9tuMrXfrsgFVCaSiVGb99BZK358D/DtFmlTcApWwpo1NSpdRwKVbgcxmzW2Jnc4xrou/Hy2dIjtGmYQSl99C3bEF28GQW8HXp13hUzqS8Le+OrKqJok9MZyimrJQcXFee5pxH6VpeP3Xv6+TU2D+yfTGxtmngsFinZAaeSEa5P+6t3RCVy4XzlzAXnod/zyEdt/8zVBxDtoc3qxbs5zHjfizcHmKmPZcovwsNDCvyBqtWHKlb8aA45wW2/L0FbkEcr/oFvM7P8XZxm/HG0HZVzWiLct+UHotIT76SY+9WB7IAdfiC77H733P/t42rvyNjHP+5WuJI1owr63R7MTzGlly/lEVIk8jtZQreI90VLlry0qiA52In2TtW/ESxfTDpQWrNAYx1Szzb9/a5Da+NwlzzpOKvm0gipa6yj/SSWts0LLklzRoksiS8RLEEefNCpNDSTB94ydmeDN46jEMBXH5wkb1k2n+9k2TM3eRBF5N1XUyazn4C1EgeVlGnbreACUfGGrzP2+0w20Dnuwdy+zC2L2gXc/22ksTqFWSIRxImW2A/vbo9pDcutI9BfjNNDReZkKJ9O4vo3iYXD3P5a8LWyD0v35+SpKzjPt7seNdN43xnvubW/ATyYd+Rlyp+XryC0i8jLY3Bs++ENY9WFY/cdmKGX+NV2OuM+QdoV1VZebyI5j/4Aq7ExgQSBgaDuBi2DY9ITZQAx8zFmnD4MPZlHrfhhpSrX6KOy37TELC3wAJWgoA35oalNp1oZXbDOxSvn31ity9esnXEDx4q1N58Ei+RczI8zTQ2A7rKiVFgx0Zc732WfZtOyfGf+kVtEnjfAEKAn9jhLR+3PyBw8UctuHTOIjeVz3K3IkWSwyWYPg/TjtvVBDxR7oo0QZstKZKGxgqayA1alBro+nUJz0qpiXR7ApnzJgxGAo8VmxZyFuIFoCWS13keX97TX1un2eJRFlWfx8RkEnW/gF+XyoXHIXSaWxHTWGCT5TbBfQhlPIJFaCRPcBjCjh7g8l/feqVNgmLfKOfzrrom6G1yc+yxwTJ4nYDImTWUAn7p8DVgqL1J1JCHgkevL/lZ6cjQfL8UZrN5pSu2SpeXHgY8Iugra3gmODheKuG97sM85O0hpafgrKxE1u6w3dY8mjJf3jNYtu9MwbN9NJbw3AaJty7YylOFJSzmd68Lg6HhgqThCxm/9+2SeEnmadwrS//te0Ok4+e1g0XgyWywr0gd2TTnjhxcFOmc3aylrdvPXc5yNOwPrNZSDr5LCCm4dFBZQ8gKpG3fKgrTdzClBmm5/REpkWfJfnOr32pLSRXSmt3fKtmrImbVuTdPjj4Vr3Timc8LpS/Qs39NvCR8fvesjEl74maPQ1kzEyagvA3D9dBTlBZy/7qkSdWEqo1q397NfUEOJuwu6Rj/gUziJfZJJLdmitNjItQrXjzmezfeuF+cYhr2oyXXRC15LNeSeN3eTtm34a3QMl7WqtbYVWMffmNwPbNin7GCSs0L8DLhyyIXogouRQ0vJEaM4B61nMlyK733/yqhEVfFeUWTYG7cheI2rbHhD7/CMtvYH7yVtHajbh5aiLXYPkA+68GXiLZ+xYkwkcdA9dj99u1YRixs1+ct65dbyI0bhk8lMlDxZi+fgMAKIBcq0qwlIOBuWcCmbDk/4EvAOpVW+6wEEFdr384oRaJc2ZxGguM/5FXzMNtsXN2vyI2sFrKGwVMC+cTIVTEpvCBS4H49gYufvchDT7dSsPyvsbLAaBg5/osUHM+QmDreK9qnEDuwmfUXHCeFNO+Vj6kfZ8XgHicGnjGo50lKdhWrra55QPklqSNH+W+aEvOajM6+P2DvI77YYa/tn2VJD34nkzfyOjVKpv3ABs59kZ4y+Wf3ObJd9/JmNXKdNO0bKD3DUQH7F0rd4QjSqR8tFLb5Bz0P/QXd20LPHQjYgHibB3infIqyILm51u9Ed2+goBDW23A6qR9GGuwwDyXsdGGjfBIi3DHuvQycn82BuN6YFSHcZ8EyI2wFLYtplt1U70Ns0EqvUfZ9f28Ab1OqY2hUEuZEkIs11v6EqkWSx7Og2t07TlrotIDPs+bnHpaJdPaHZVe1rYuxG68VfWvn86wyrvR4lp5Fj8ZEqFqN9QQrPde6nrBV9t+8BSBi+ii2LEq/5y2W6PUJrsezyhpq46pOJ/FSgA+v0fJsB8Czj0Z1mcSzuOwXpD3pKbbCawqeXY8I4dn1STO7T7WvWK90PZ4tE5ZnyxjAZxeQ3Fzrd7I824GCwhehKloCEwjWmw5hW57tAkCWvywqqZZlYbE8FiwzwlbQsuixm+p9+GKwArGikQG+knhorOpYnq06eUJGxSDCVzyfNNTR49kul2XCLqFl1yqzx2681lcBqwyoBTz7G8QTodVjBIta+cL2VE0WwN903rJYPfYU1KqqVVq2q/Tae0vARGVDE+UTC30GzV2QaS9eK1hgP3+hznb2hsXHxuuKxS819ZfZSksFFBUpv+QDTO8vtzjiu/qfEPC+dVmZV5m73aix57tGn3krz2s6SMilCkn9W2A/43VmZyp2b53jA/sZqys6rjI+WKLs/tA6dizHnXf4FdcHW2LAfgJUr9Ncr06d3ZcxvVw2RberZd5i0tmZXKyVzEbZXs2x16e3CnPpeE0L7CfANHJlnV6E8ZjN466Lz+JKN0xseAaBXl0rjC2n5k277E8dHnlE1untt9383H3/Dfcqzr37rxKRzjJbh9+SI/rkVGmur+emAh5M3RTl8WW+/rXr8ZlmmfZk4AH7eTaPwq1IrHBETMUezR4P5lN+qwNfZnMDmn7+ZPuDv9m+DDxgPw/OdjwxecIRMYkKqTKedLzL4dk0kkc6xFsS+1OtPUPpTwTaWIQ1qyQgmDvdmgxbWyA98+3hgJ+BZRDJpc+j59/Jie941z6556SYTqIuCReNu/eOs+n1OITtPO0vas8e8mp5Sbqf3Kv9QVEj+axGnt6bm7nUvWo+jquRU0kjcrG/U1TcaDbijtO/pOcmcrW/srcyXi049/BCSeHxY1xiFYR3892EQHJWqK5WG1WfoGoTw4NCh2SZsjmWHbD5qiFS2nulKrI/fN/L6fQA8j5Aj722kTNpVqxBZa9yiu2P3rPtcCI+Gm29iW7gJ7sX2GeFhwlMBMha7v8QW8ONJpXHlVrxcwH7DUBJ+N3W2d8Tptwwxnr8K/1ZPHKzPSD9swi17PRSVyRYli5EoQ6gRgUszvGzqONmaQZB29RMlAhtBhvtjnonOStYG6qz+eAoYutdm/+vAgLYz38rIL6yYo3eZ3ZsqDdAhorQviXWfXQUlukOXmzOIKFxBzGgfMIJL5pajPHohSl+ZeP9SpwXXi24UdvPjzX835Nz9jPv8CzpnULXSgZ5/HzqX2KnyEo+wFBWYidrcBjJerN84MZ/8s5rMg/Yn67v3xwnaqF9B75UObU6LNH610r2X/RP86D/MTIWAoSeTF7+CAj6L84OkqGhUkoYOuoaPsEU0EKlcFXKDi/lVzi2F01B280fYHupjzALpUWB5DhCQZ3XHS2gV3xq+xm0Tc3zyywjPrFUigMpr3S57s7mSVfWqBiwnwBzINZg9o4KiMXR/fs43i/wjZ5K25tb2Av3MOoOulEyM2j5/aKAvXs7zam1lwtb3OSs8IK8YP4VO0OH3JSidN3ZZLZ4NDO9Nn35/EXzFtVkZjZkLJ//0PzHn37oh9DWzJbt1Gm5KoN/keMqtVyF9BD914SshGEJFQnTEj5M+MaoudzV8k8beMB+Aky8wTSDeENznYo3MKw4w/8HFK4jQf8Udsc+GrbAfv5Cne3sDYuPjdeBMYe91/qiGLCfALOPtBd1Zg8b2QLqPBCv87rYzjJMMP6fn7KSDbOjPRT2jaete1rQ/18erP5HxP/5bWocd8j9929THf9Z6i+8TRX0O3ny98MM5+evj7wGxcMj53/9+igjMjK4rV9JyWvXNDRs65eccc1rJSX9tgUjI0Mjg/22JcuEVXAyl3WywH4CVLxBNYN4Q3OdiTcwTFjgwtm7kta/SVKpGf8PwpZmUAB4nGNiYGBgYmBQYACBBCCsB8JwBgcGCGBl4AaSWgw+DPJAOpdBE0jyA7EDUKSYYRWDFwMjUG8WQxIDL1AVL4M2WBc3QxiDIAMCWAHNzWNYAGTVA+k5YDEtBmUgKQ/Uzc+gAWTZMLgCTXUAmtEGAJJDDQ0AAHicY2BgYGQAgns+d7vAdJZlDYwGAEsVBo0AAAA=") format("woff"),url("/font/ddg-serp-icons.ttf?v=0.48457131068509884") format("truetype");font-weight:normal;font-style:normal}.frm__input__clear,.ddgsi,.ddgsi-b:before,.ddgsi-a:after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ddgsi-alert:before{content:"\21"}.ddgsi-arrow-down:before{content:"\2193"}.ddgsi-arrow-left-bold:before{content:"\2b05"}.ddgsi-arrow-left:before{content:"\2190"}.ddgsi-arrow-right:before{content:"\2192"}.ddgsi-arrow-top:before{content:"\2b06"}.ddgsi-arrow-up-left:before{content:"\2196"}.ddgsi-arrow-up:before{content:"\2191"}.ddgsi-check-sign:before{content:"\2611"}.ddgsi-check:before{content:"\2713"}.ddgsi-circle:before{content:"\25cf"}.ddgsi-clock:before{content:"\43"}.ddgsi-close-bold:before{content:"\d7"}.ddgsi-close:before{content:"\58"}.ddgsi-cloudsave:before{content:"\63"}.ddgsi-cog:before{content:"\2699"}.ddgsi-collapse:before{content:"\21f1"}.ddgsi-comment:before{content:"\4f"}.ddgsi-copy:before{content:"\1f4c"}.ddgsi-cry:before{content:"\2639"}.ddgsi-directions:before{content:"\64"}.ddgsi-down:before{content:"\76"}.ddgsi-download:before{content:"\2913"}.ddgsi-expand:before{content:"\21f2"}.ddgsi-eye:before{content:"\69"}.ddgsi-football:before{content:"\61"}.ddgsi-frown:before{content:"\28"}.ddgsi-grid:before{content:"\47"}.ddgsi-heart:before{content:"\2665"}.ddgsi-home:before{content:"\2302"}.ddgsi-horn:before{content:"\48"}.ddgsi-info:before{content:"\49"}.ddgsi-left-big:before{content:"\2039"}.ddgsi-left-sign:before{content:"\25c1"}.ddgsi-left:before{content:"\3c"}.ddgsi-less-sign:before{content:"\229d"}.ddgsi-location:before{content:"\21d7"}.ddgsi-lock:before{content:"\6c"}.ddgsi-loupe:before{content:"\53"}.ddgsi-marker:before{content:"\40"}.ddgsi-menu:before{content:"\21f6"}.ddgsi-minus:before{content:"\2d"}.ddgsi-more-sign:before{content:"\2295"}.ddgsi-more:before{content:"\2026"}.ddgsi-move:before{content:"\2629"}.ddgsi-music-note:before{content:"\266b"}.ddgsi-news:before{content:"\6e"}.ddgsi-next:before{content:"\bb"}.ddgsi-pause:before{content:"\2551"}.ddgsi-play:before{content:"\25ba"}.ddgsi-plus:before{content:"\2b"}.ddgsi-prev:before{content:"\ab"}.ddgsi-region:before{content:"\2637"}.ddgsi-right-big:before{content:"\203a"}.ddgsi-right-sign:before{content:"\25b7"}.ddgsi-right:before{content:"\3e"}.ddgsi-settings:before{content:"\2700"}.ddgsi-smile:before{content:"\29"}.ddgsi-star:before{content:"\2605"}.ddgsi-swap-2:before{content:"\21c4"}.ddgsi-swap:before{content:"\21a9"}.ddgsi-t-down:before{content:"\25bc"}.ddgsi-t-left:before{content:"\25c0"}.ddgsi-t-right:before{content:"\25b6"}.ddgsi-t-up:before{content:"\25b2"}.ddgsi-twitter:before{content:"\74"}.ddgsi-up:before{content:"\5e"}.ddgsi-upload:before{content:"\2912"}.ddgsi-uploaded:before{content:"\21d1"}.ddgsi-user:before{content:"\75"}.ddgsi-users:before{content:"\55"}.sticky{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky}.sticky--dummy{display:none}.is-stuck+.sticky--dummy{display:block}.browser--chrome,.browser--firefox,.browser--safari,.browser--opera,.browser--ie,.browser--edge,.browser--arora,.browser--maxthon,.browser--seamonkey,.browser--palemoon,.browser--vivaldi,.browser--ddg,.logo_modal,.browser--brave{width:64px;height:64px;text-indent:-999999px;display:inline-block;vertical-align:middle;position:relative;background-position:50% 50%;background-repeat:no-repeat}.browser--chrome{background-image:url("/assets/icons/browsers/small/chrome.png")}.svg .browser--chrome{background-image:url("/assets/icons/browsers/small/chrome.svg")}.browser--firefox{background-image:url("/assets/icons/browsers/small/firefox.png")}.svg .browser--firefox{background-image:url("/assets/icons/browsers/small/firefox.svg")}.browser--safari{background-image:url("/assets/icons/browsers/small/safari.png")}.svg .browser--safari{background-image:url("/assets/icons/browsers/small/safari.svg")}.browser--opera{background-image:url("/assets/icons/browsers/small/opera.png")}.svg .browser--opera{background-image:url("/assets/icons/browsers/small/opera.svg")}.browser--ie{background-image:url("/assets/icons/browsers/small/ie.png")}.svg .browser--ie{background-image:url("/assets/icons/browsers/small/ie.svg")}.browser--edge{background-image:url("/assets/icons/browsers/small/edge.png")}.svg .browser--edge{background-image:url("/assets/icons/browsers/small/edge.svg")}.browser--arora{background-image:url("/assets/icons/browsers/small/arora.png")}.svg .browser--arora{background-image:url("/assets/icons/browsers/small/arora.svg")}.browser--maxthon{background-image:url("/assets/icons/browsers/small/maxthon.png")}.svg .browser--maxthon{background-image:url("/assets/icons/browsers/small/maxthon.svg")}.browser--seamonkey{background-image:url("/assets/icons/browsers/small/seamonkey.png")}.svg .browser--seamonkey{background-image:url("/assets/icons/browsers/small/seamonkey.svg")}.browser--palemoon{background-image:url("/assets/icons/browsers/small/palemoon.png")}.svg .browser--palemoon{background-image:url("/assets/icons/browsers/small/palemoon.svg")}.browser--vivaldi{background-image:url("/assets/icons/browsers/small/vivaldi.png")}.svg .browser--vivaldi{background-image:url("/assets/icons/browsers/small/vivaldi.svg")}.browser--ddg,.logo_modal,.browser--brave{background-image:url("/assets/icons/browsers/small/ddg.png")}.svg .browser--ddg,.svg .logo_modal,.svg .browser--brave{background-image:url("/assets/icons/browsers/small/ddg.svg")}.logo_homepage,.header__logo,.logo--dax{background-position:50% 50%;background-repeat:no-repeat;background-size:100%;color:transparent;text-indent:-9999px;font-size:0px}.logo_homepage{width:205px;height:200px;display:block;position:relative;margin:0 auto;background-image:url("assets/logo_homepage.normal.v108.svg")}.dark-bg .logo_homepage{background-image:url("assets/logo_homepage.alt.v108.svg")}@media only screen and (max-width: 425px){.logo_homepage{width:166px;height:134px}}@media only screen and (max-height: 425px){.logo_homepage{width:221px;height:62px;background-image:url("assets/logo_homepage_mobile.normal.v107.svg")}.dark-bg .logo_homepage{background-image:url("assets/logo_homepage_mobile.alt.v106.svg")}}.body--html .logo_homepage{background:no-repeat center url("assets/logo_homepage.normal.v108.png");background:no-repeat center/100% url("assets/logo_homepage.normal.v108.svg"),linear-gradient(transparent, transparent)}@media only screen and (max-height: 425px){.body--html .logo_homepage{background:no-repeat center url("assets/logo_homepage_mobile.normal.v107.png");background:no-repeat center/100% url("assets/logo_homepage_mobile.normal.v107.svg"),linear-gradient(transparent, transparent)}}.header__logo{background-size:36px 36px;background-image:url("assets/logo_header.v108.svg")}.header--html .header__logo{display:block;background:no-repeat center url("assets/logo_header.v108.png");background:no-repeat center/auto 36px url("assets/logo_header.v108.svg"),linear-gradient(transparent, transparent)}.dark-header .header__logo{background-image:url("assets/logo_header.alt.v108.svg")}.logo--dax{background-image:url("assets/dax.svg");width:90px;height:90px;background-size:90px 90px;margin:auto}html:not(.svg) .logo--dax{background-image:url("assets/dax.png")}.logo_homepage__tt{padding:0 12px;font-weight:600;font-size:16px;bottom:auto;right:auto;left:90%;top:35%}@media only screen and (max-height: 425px){.logo_homepage__tt{bottom:0;left:95%;top:0}}.no-touch .logo_homepage:hover .logo_homepage__tt{-webkit-transition-delay:.5s;-moz-transition-delay:.5s;-o-transition-delay:.5s;transition-delay:.5s;visibility:visible;opacity:1}.search,.search__input,.search__clear,.search__button,.search--adv,.search__input--adv{font-size:1em}.search,.search--adv{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-radius:var(--default-border-radius);display:block;position:relative;height:2.8em;background-color:#fff;border:1px solid rgba(0,0,0,0.15);box-shadow:0 2px 3px rgba(0,0,0,0.06);padding-left:.75em;padding-right:6.5em}.search.has-suggestions,.search--adv.has-suggestions{border-radius:4px 4px 0 0;border-radius:var(--default-border-radius) var(--default-border-radius) 0 0}.search--adv{padding-right:3.5em}.search--adv:hover,.search--adv.search--header.has-text.search--hover,.search--adv.search--header.has-text.search--focus,.search--adv.search--home.has-text{padding-right:6.5em}.is-mobile .search--adv{padding-left:15px;padding-right:6em}.is-mobile .search--adv.has-text.search--focus{padding-right:6em}.is-mobile .search--adv.has-text:after{content:"";position:absolute;top:14px;right:46px;height:16px;width:1px;background-color:#d9d9d9}.search--adv.hide-search-button:hover{padding-right:3.5em}.hide-search-button .search--adv{padding-right:.75em}.hide-search-button .search--adv:hover,.hide-search-button .search--adv.search--header.has-text.search--hover,.hide-search-button .search--adv.search--header.has-text.search--focus,.hide-search-button .search--adv.search--home.has-text{padding-right:3em}.search--no-clear{padding-right:3.5em}.search--header{background-color:#fff;height:44px;padding-left:11px}.search--header .search__input,.search--header .search__input--adv{height:44px}.vertical--map__sidebar__header__search .search--header{width:338px}@media only screen and (max-width: 864px){.vertical--map__sidebar__header__search .search--header{width:238px}}.directions-search .search--header{width:auto}.directions-search .search--header:hover{padding-right:3.5em}.search--header .search__clear{font-size:14.4px}.search--header .search__button{font-size:18px}.lt-ie9 .search--header .search__input,.lt-ie9 .search--header .search__input--adv{line-height:44px}.search--home{font-size:1.14em}.search--home .search__clear{margin-right:3.2em}.lt-ie9 .search--home .search__button{right:7px}.search--iframe .search--home{margin:0}.search--hero{border-radius:4px;border-radius:var(--default-border-radius);border-color:white;background-color:#e37151}.search--hero .search__clear,.search--hero .search__button,.search--hero .search__button--hero{color:white}.search--hero .search__input,.search--hero .search__input--adv{font-weight:300;color:white}.search--hero .search__input::-moz-placeholder,.search--hero .search__input--adv::-moz-placeholder{color:white;opacity:1}.search--hero .search__input::-webkit-input-placeholder,.search--hero .search__input--adv::-webkit-input-placeholder{color:white}.search__input,.search__input--adv{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:1.1em;font-weight:normal;display:block;width:100%;background:none;outline:none;border:none;padding:0;height:2.545455em;z-index:1;position:relative;top:-1px}.search--header .search__input,.search--header .search__input--adv{font-size:16px}.search__input:focus,.search__input--adv:focus{outline:none}.search__input::-ms-clear,.search__input--adv::-ms-clear{display:none}.search__input::-moz-placeholder,.search__input--adv::-moz-placeholder{color:#aaa}.search__input::-webkit-input-placeholder,.search__input--adv::-webkit-input-placeholder{color:#aaa}.search--focus .search__input--adv{opacity:1}.search__hidden{display:none}.search__clear,.search__button,.search__button--hero{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:rgba(0,0,0,0);width:1em;display:block;cursor:pointer;background:transparent;text-align:center;border:none;height:2.45em;line-height:2.45em;position:absolute;top:0;bottom:0;right:2px;left:auto;margin:auto;z-index:2;outline:none}.search__clear:active,.search__button:active,.search__button--hero:active{-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s}.lt-ie9 .search__clear,.lt-ie9 .search__button,.lt-ie9 .search__button--hero{right:10px}.lt-ie8 .search__clear,.lt-ie8 .search__button,.lt-ie8 .search__button--hero{height:auto;border:none !important}.search__dropdown{display:none}.search__clear{padding:0 .5em;line-height:1;min-width:21px;margin-right:3.6em;color:#aaa;visibility:hidden;opacity:0}.search__clear:focus,.search__clear:hover{outline:none;color:#222;visibility:visible}.search__clear:active:focus,.search__clear:active:hover{color:#de5833}.search__clear.empty,.search--no-clear .search__clear{display:none}.search:hover .search__clear,.search__input:focus ~ .search__clear,.search--header.has-text.search--hover .search__clear,.search--header.has-text.search--focus .search__clear,.search--home.has-text .search__clear{visibility:visible;opacity:0.9}.is-mobile .search:hover .search__clear,.is-mobile .search__input:focus ~ .search__clear,.is-mobile .search--header.has-text.search--hover .search__clear,.is-mobile .search--header.has-text.search--focus .search__clear,.is-mobile .search--home.has-text .search__clear{opacity:1}.lt-ie8 .search__clear{margin-right:4.6em}.is-mobile .search__clear{text-align:right;visibility:visible;opacity:1;font-size:16px;padding-right:0}.hide-search-button .search__clear{margin-right:5px}.search__button,.search__button--hero{border-radius:0 4px 4px 0;border-radius:0 var(--default-border-radius) var(--default-border-radius) 0;min-width:26px;color:#999;font-size:1.25em;padding:0 .64em;height:auto;min-height:1.8em;margin-top:-1px;margin-bottom:-1px;margin-right:-3px;line-height:1.5;background-color:transparent;background-position:50% 50%;background-repeat:no-repeat;-webkit-font-smoothing:subpixel-antialiased}.search__button:hover,.search__button--hero:hover,.search__button:focus,.search__button--hero:focus{outline:none}.lt-ie8 .search__button,.lt-ie8 .search__button--hero{height:1.96em;min-width:3em}.has-suggestions .search__button,.has-suggestions .search__button--hero{border-radius:0 4px 0 0;border-radius:0 var(--default-border-radius) 0 0}.is-mobile .search__button,.is-mobile .search__button--hero{right:3px;font-size:18px}.hide-search-button .search__button,.hide-search-button .search__button--hero{display:none}.search:hover .search__button,.search__input:focus ~ .search__button,.search--header.has-text.search--hover .search__button,.search--header.has-text.search--focus .search__button,.search--home.has-text .search__button{background-color:#5b9e4d;color:white}.is-link-style-exp .search:hover .search__button,.is-link-style-exp .search__input:focus ~ .search__button,.is-link-style-exp .search--header.has-text.search--hover .search__button,.is-link-style-exp .search--header.has-text.search--focus .search__button,.is-link-style-exp .search--home.has-text .search__button{background-color:#3969EF}.is-mobile .search:hover .search__button,.is-mobile .search__input:focus ~ .search__button,.is-mobile .search--header.has-text.search--hover .search__button,.is-mobile .search--header.has-text.search--focus .search__button,.is-mobile .search--home.has-text .search__button{background-color:transparent;color:#aaa}.search__button:hover,.search__button:focus,.search:hover .search__button:focus,.search--header.has-text.search--hover .search__button:hover,.search--header.has-text.search--focus .search__button:hover,.search--home.has-text .search__button:focus,.search--home.has-text .search__button:hover{background-color:#66ad57;color:white}.is-link-style-exp .search__button:hover,.is-link-style-exp .search__button:focus,.is-link-style-exp .search:hover .search__button:focus,.is-link-style-exp .search--header.has-text.search--hover .search__button:hover,.is-link-style-exp .search--header.has-text.search--focus .search__button:hover,.is-link-style-exp .search--home.has-text .search__button:focus,.is-link-style-exp .search--home.has-text .search__button:hover{background-color:#2950BF}.is-mobile .search__button:hover,.is-mobile .search__button:focus,.is-mobile .search:hover .search__button:focus,.is-mobile .search--header.has-text.search--hover .search__button:hover,.is-mobile .search--header.has-text.search--focus .search__button:hover,.is-mobile .search--home.has-text .search__button:focus,.is-mobile .search--home.has-text .search__button:hover{background-color:transparent;color:#222}.search__button:active,.search:hover .search__button:active,.search--header.has-text.search--hover .search__button:active,.search--home.has-text .search__button:active{background-color:#222}.search__button--active{background-color:#5b9e4d;color:#fff}.search__button--hero{background-color:#e37151;color:white}.badge-link{border-radius:4px;border-radius:var(--default-border-radius);background-color:#fff;border:1px solid #d2d2d2;cursor:pointer;display:block;margin:0 auto;position:relative;text-align:left}.nav-menu--slideout .badge-link{display:block;text-align:center;position:absolute;bottom:0;left:0;margin:0 8px 8px;padding:5px}.badge-link--home,.badge-link--top,.badge-link--serp{z-index:200;border:1px solid rgba(0,0,0,0.15)}.badge-link--top,.badge-link--serp{position:absolute;top:64px;width:280px;box-shadow:0 4px 10px rgba(0,0,0,0.1)}.badge-link__background{position:absolute;height:100vh;width:100vw;z-index:20;background:#e5e5e5;opacity:.6}.badge-link__background--dark{transition:opacity .6s;background:#7b7b7b;opacity:1}.badge-link__background--dark.fade-out{opacity:0}.badge-link__image--narrow{height:135px;background:url("/assets/app/hiker.svg") no-repeat center;background-size:cover;background-size:239%;background-position:47% 42%}.badge-link--top.badge-link--experiment,.badge-link--home.badge-link--experiment{transition:all .3s;left:0;right:0;margin-left:auto;margin-right:auto;box-shadow:0 12px 24px -8px rgba(0,0,0,0.15);transition:opacity .6s}.badge-link--top.badge-link--experiment.fade-out,.badge-link--home.badge-link--experiment.fade-out{opacity:0}.badge-link--top.badge-link--experiment .badge-link__wrap,.badge-link--home.badge-link--experiment .badge-link__wrap{max-width:initial}.badge-link--top.badge-link--experiment .badge-link__close,.badge-link--home.badge-link--experiment .badge-link__close{line-height:1;padding:20px}.badge-link--top.badge-link--experiment .badge-link__bullets,.badge-link--home.badge-link--experiment .badge-link__bullets{padding:25px 75px 0 75px}.badge-link--top.badge-link--experiment .badge-link__title,.badge-link--home.badge-link--experiment .badge-link__title{padding-top:10px}.badge-link--top.badge-link--experiment .badge-link__btn-group,.badge-link--home.badge-link--experiment .badge-link__btn-group{margin-top:22px;width:88%;margin-left:auto;margin-right:auto}.badge-link--top.badge-link--experiment .badge-link__btn-group .badge-link__btn,.badge-link--home.badge-link--experiment .badge-link__btn-group .badge-link__btn{display:flex;justify-content:center;align-items:center;height:42px;box-sizing:border-box;padding:0;background-color:#4495D4;border:none}.badge-link--top.badge-link--experiment .badge-link__btn-group .badge-link__btn:hover,.badge-link--home.badge-link--experiment .badge-link__btn-group .badge-link__btn:hover{background-color:#7CB5E0;border-color:#6C9BC1}.badge-link--top.badge-link--experiment .badge-link__skip,.badge-link--home.badge-link--experiment .badge-link__skip{text-align:center;padding-bottom:35px;padding-top:18px}.badge-link--top.badge-link--experiment .badge-link__skip button,.badge-link--home.badge-link--experiment .badge-link__skip button{background:none;padding:0;cursor:pointer;color:#888;font-size:14px;border:none}.badge-link--top.badge-link--experiment .badge-link__skip span,.badge-link--home.badge-link--experiment .badge-link__skip span{text-decoration:underline}.badge-link--top.badge-link--experiment .badge-link__skip span:hover,.badge-link--home.badge-link--experiment .badge-link__skip span:hover{color:#333}.badge-link--top.badge-link--experiment--nodismiss,.badge-link--top.badge-link--experiment--center,.badge-link--home.badge-link--experiment--nodismiss,.badge-link--home.badge-link--experiment--center{z-index:20}.badge-link--top.badge-link--experiment--nodismiss .badge-link__bullets,.badge-link--top.badge-link--experiment--center .badge-link__bullets,.badge-link--home.badge-link--experiment--nodismiss .badge-link__bullets,.badge-link--home.badge-link--experiment--center .badge-link__bullets{display:flex;justify-content:center;align-items:center;padding:0}.badge-link--top.badge-link--experiment--nodismiss .badge-link__bullet,.badge-link--top.badge-link--experiment--center .badge-link__bullet,.badge-link--home.badge-link--experiment--nodismiss .badge-link__bullet,.badge-link--home.badge-link--experiment--center .badge-link__bullet{display:inline-flex;align-items:center;margin:0;padding:0;font-size:13px;color:#666;margin-right:24px}.badge-link--top.badge-link--experiment--nodismiss .badge-link__bullet:last-of-type,.badge-link--top.badge-link--experiment--center .badge-link__bullet:last-of-type,.badge-link--home.badge-link--experiment--nodismiss .badge-link__bullet:last-of-type,.badge-link--home.badge-link--experiment--center .badge-link__bullet:last-of-type{margin-right:0}.dark-bg .badge-link--top.badge-link--experiment--nodismiss .badge-link__bullet,.dark-bg .badge-link--top.badge-link--experiment--center .badge-link__bullet,.dark-bg .badge-link--home.badge-link--experiment--nodismiss .badge-link__bullet,.dark-bg .badge-link--home.badge-link--experiment--center .badge-link__bullet{color:#fff}.badge-link--top.badge-link--experiment--nodismiss .badge-link__bullet__icon,.badge-link--top.badge-link--experiment--center .badge-link__bullet__icon,.badge-link--home.badge-link--experiment--nodismiss .badge-link__bullet__icon,.badge-link--home.badge-link--experiment--center .badge-link__bullet__icon{margin-right:7px}.badge-link--top.badge-link--experiment--nodismiss .badge-link__btn-group,.badge-link--top.badge-link--experiment--center .badge-link__btn-group,.badge-link--home.badge-link--experiment--nodismiss .badge-link__btn-group,.badge-link--home.badge-link--experiment--center .badge-link__btn-group{margin:0;padding:0}.badge-link--top.badge-link--experiment--nodismiss .badge-link__btn-group .badge-link__btn,.badge-link--top.badge-link--experiment--center .badge-link__btn-group .badge-link__btn,.badge-link--home.badge-link--experiment--nodismiss .badge-link__btn-group .badge-link__btn,.badge-link--home.badge-link--experiment--center .badge-link__btn-group .badge-link__btn{height:50px;margin:0;padding:0;background-color:#678fff;color:white;font-size:14px;font-weight:600}.dark-bg .badge-link--top.badge-link--experiment--nodismiss .badge-link__btn-group .badge-link__btn:hover,.dark-bg .badge-link--top.badge-link--experiment--center .badge-link__btn-group .badge-link__btn:hover,.dark-bg .badge-link--home.badge-link--experiment--nodismiss .badge-link__btn-group .badge-link__btn:hover,.dark-bg .badge-link--home.badge-link--experiment--center .badge-link__btn-group .badge-link__btn:hover{background-color:#fff;color:#678fff}.dark-bg .badge-link--top.badge-link--experiment--nodismiss .badge-link__btn-group .badge-link__btn:hover .badge-link__btn__icon,.dark-bg .badge-link--top.badge-link--experiment--center .badge-link__btn-group .badge-link__btn:hover .badge-link__btn__icon,.dark-bg .badge-link--home.badge-link--experiment--nodismiss .badge-link__btn-group .badge-link__btn:hover .badge-link__btn__icon,.dark-bg .badge-link--home.badge-link--experiment--center .badge-link__btn-group .badge-link__btn:hover .badge-link__btn__icon{display:none}.dark-bg .badge-link--top.badge-link--experiment--nodismiss .badge-link__btn-group .badge-link__btn:hover .badge-link__btn__icon--dark,.dark-bg .badge-link--top.badge-link--experiment--center .badge-link__btn-group .badge-link__btn:hover .badge-link__btn__icon--dark,.dark-bg .badge-link--home.badge-link--experiment--nodismiss .badge-link__btn-group .badge-link__btn:hover .badge-link__btn__icon--dark,.dark-bg .badge-link--home.badge-link--experiment--center .badge-link__btn-group .badge-link__btn:hover .badge-link__btn__icon--dark{display:block}.badge-link--top.badge-link--experiment--nodismiss .badge-link__btn__icon,.badge-link--top.badge-link--experiment--center .badge-link__btn__icon,.badge-link--home.badge-link--experiment--nodismiss .badge-link__btn__icon,.badge-link--home.badge-link--experiment--center .badge-link__btn__icon{margin-right:7.5px}.badge-link--top.badge-link--experiment--nodismiss .badge-link__btn__icon--dark,.badge-link--top.badge-link--experiment--center .badge-link__btn__icon--dark,.badge-link--home.badge-link--experiment--nodismiss .badge-link__btn__icon--dark,.badge-link--home.badge-link--experiment--center .badge-link__btn__icon--dark{display:none}@media only screen and (max-width: 599px){.badge-link--top.badge-link--experiment--nodismiss,.badge-link--top.badge-link--experiment--center,.badge-link--home.badge-link--experiment--nodismiss,.badge-link--home.badge-link--experiment--center{display:none !important}}.badge-link--top.badge-link--experiment--center,.badge-link--home.badge-link--experiment--center{position:absolute;bottom:10%;width:600px;overflow:hidden}.badge-link--top.badge-link--experiment--center .badge-link__wrap,.badge-link--home.badge-link--experiment--center .badge-link__wrap{position:static}.badge-link--top.badge-link--experiment--center .badge-link__close,.badge-link--home.badge-link--experiment--center .badge-link__close{padding:10px}.badge-link--top.badge-link--experiment--center .badge-link__title,.badge-link--home.badge-link--experiment--center .badge-link__title{font-size:20px;text-align:center;margin-bottom:0}.badge-link--top.badge-link--experiment--center .badge-link__bullets,.badge-link--home.badge-link--experiment--center .badge-link__bullets{margin:11px 20px 22px}.badge-link--top.badge-link--experiment--center .badge-link__btn-group,.badge-link--home.badge-link--experiment--center .badge-link__btn-group{width:100%}.badge-link--top.badge-link--experiment--center .badge-link__btn-group .badge-link__btn,.badge-link--home.badge-link--experiment--center .badge-link__btn-group .badge-link__btn{width:100%;height:50px;border-radius:0}@media only screen and (max-height: 700px){.badge-link--top.badge-link--experiment--center,.badge-link--home.badge-link--experiment--center{display:none !important}}@media only screen and (min-height: 700px) and (max-height: 850px){.badge-link--top.badge-link--experiment--center,.badge-link--home.badge-link--experiment--center{bottom:5%}}.badge-link--top.badge-link--experiment--nodismiss,.badge-link--home.badge-link--experiment--nodismiss{max-width:920px;width:90%;height:70px;position:absolute;top:100%;margin-top:-86px;padding:16px 23px 14px;display:flex;box-sizing:border-box;border-radius:2px}.badge-link--top.badge-link--experiment--nodismiss .badge-link__wrap,.badge-link--home.badge-link--experiment--nodismiss .badge-link__wrap{display:flex;width:100%;justify-content:space-between;align-items:center}.badge-link--top.badge-link--experiment--nodismiss .badge-link__bullets,.badge-link--home.badge-link--experiment--nodismiss .badge-link__bullets{width:100%;margin:0}.badge-link--top.badge-link--experiment--nodismiss .badge-link__bullet,.badge-link--home.badge-link--experiment--nodismiss .badge-link__bullet{font-size:14px;color:#aaa;font-weight:bold}.badge-link--top.badge-link--experiment--nodismiss .badge-link__bullet__icon,.badge-link--home.badge-link--experiment--nodismiss .badge-link__bullet__icon{max-height:20px;width:auto}.badge-link--top.badge-link--experiment--nodismiss .badge-link__btn-group,.badge-link--home.badge-link--experiment--nodismiss .badge-link__btn-group{display:inline-block;width:auto}.badge-link--top.badge-link--experiment--nodismiss .badge-link__btn-group .badge-link__btn,.badge-link--home.badge-link--experiment--nodismiss .badge-link__btn-group .badge-link__btn{height:40px;width:240px;border-radius:2px}.badge-link--top.badge-link--experiment--nodismiss+.onboarding-ed,.badge-link--home.badge-link--experiment--nodismiss+.onboarding-ed{margin-top:-30px}.badge-link--top.badge-link--experiment--nodismiss+.onboarding-ed .onboarding-ed__slide-1,.badge-link--home.badge-link--experiment--nodismiss+.onboarding-ed .onboarding-ed__slide-1{background-color:#678fff}@media only screen and (min-width: 600px) and (max-width: 750px){.badge-link--top.badge-link--experiment--nodismiss .badge-link__bullet:nth-child(-n+2),.badge-link--home.badge-link--experiment--nodismiss .badge-link__bullet:nth-child(-n+2){display:none}}@media only screen and (min-width: 751px) and (max-width: 950px){.badge-link--top.badge-link--experiment--nodismiss .badge-link__bullet:nth-child(2),.badge-link--home.badge-link--experiment--nodismiss .badge-link__bullet:nth-child(2){display:none}}.badge-link--top.badge-link--experiment--narrow,.badge-link--top.badge-link--experiment--wide,.badge-link--home.badge-link--experiment--narrow,.badge-link--home.badge-link--experiment--wide{border:none;overflow:hidden}.badge-link--top.badge-link--experiment--narrow,.badge-link--home.badge-link--experiment--narrow{width:374px}.badge-link--top.badge-link--experiment--narrow .badge-link__wrap__title,.badge-link--home.badge-link--experiment--narrow .badge-link__wrap__title{text-align:center}.badge-link--top.badge-link--experiment--narrow .badge-link__wrap__message,.badge-link--home.badge-link--experiment--narrow .badge-link__wrap__message{padding-left:4em;padding-right:4em}.badge-link--top.badge-link--experiment--narrow .badge-link__thumb__img,.badge-link--home.badge-link--experiment--narrow .badge-link__thumb__img{height:60px;width:60px;top:-44px}.badge-link--top.badge-link--experiment--narrow .badge-link__title,.badge-link--home.badge-link--experiment--narrow .badge-link__title{padding-top:27px}.badge-link--top.badge-link--experiment--narrow .badge-link__bullets,.badge-link--home.badge-link--experiment--narrow .badge-link__bullets{padding:25px 48px 0 48px}.badge-link--top.badge-link--experiment--wide,.badge-link--home.badge-link--experiment--wide{display:flex;width:680px;height:auto}.badge-link--top.badge-link--experiment--wide.smallify .badge-link__wrap,.badge-link--home.badge-link--experiment--wide.smallify .badge-link__wrap{padding:0}.badge-link--top.badge-link--experiment--wide.smallify .badge-link__img,.badge-link--home.badge-link--experiment--wide.smallify .badge-link__img{display:none}.badge-link--top.badge-link--experiment--wide .badge-link__wrap,.badge-link--home.badge-link--experiment--wide .badge-link__wrap{flex:1;box-sizing:border-box;padding:65px 40px 40px}.badge-link--top.badge-link--experiment--wide .badge-link__img,.badge-link--home.badge-link--experiment--wide .badge-link__img{width:50%;max-width:50%;background:center/auto 100% no-repeat #ccc url("/assets/app/hiker.svg");background-position:-455px center}.badge-link--top.badge-link--experiment--wide .badge-link__thumb__img,.badge-link--home.badge-link--experiment--wide .badge-link__thumb__img{display:block;position:initial;height:48px;width:48px;margin:0 0 28px;padding:0}.badge-link--top.badge-link--experiment--wide .badge-link__title,.badge-link--home.badge-link--experiment--wide .badge-link__title{text-align:left;padding:0;margin:0 0 15px}.badge-link--top.badge-link--experiment--wide .badge-link__bullets,.badge-link--home.badge-link--experiment--wide .badge-link__bullets{margin:0 0 28px;padding:0}.badge-link--top.badge-link--experiment--wide .badge-link__bullet,.badge-link--home.badge-link--experiment--wide .badge-link__bullet{font-size:14px}.badge-link--top.badge-link--experiment--wide .badge-link__btn-group,.badge-link--home.badge-link--experiment--wide .badge-link__btn-group{width:100%;margin:0 0 65px;padding:0}.badge-link--top.badge-link--experiment--wide .badge-link__btn,.badge-link--home.badge-link--experiment--wide .badge-link__btn{margin:0}.badge-link--top.badge-link--experiment--wide .badge-link__skip,.badge-link--home.badge-link--experiment--wide .badge-link__skip{display:block;margin:0;padding:0;text-align:left;text-decoration:underline}.badge-link--top.badge-link--experiment.smallify,.badge-link--home.badge-link--experiment.smallify{transition:all .6s;height:160px;width:374px;transform:translateY(calc(100vh - 183px));top:0}.badge-link--top.badge-link--experiment .badge-link__cookie-msg .badge-link__wrap__title,.badge-link--home.badge-link--experiment .badge-link__cookie-msg .badge-link__wrap__title{text-align:center;font-size:17px;font-weight:600}.badge-link--top.badge-link--experiment .badge-link__cookie-msg .badge-link__wrap__message,.badge-link--home.badge-link--experiment .badge-link__cookie-msg .badge-link__wrap__message{text-align:center}.badge-link--top.badge-link--experiment .badge-link__cookie-msg .badge-link__wrap__link,.badge-link--home.badge-link--experiment .badge-link__cookie-msg .badge-link__wrap__link{text-align:center;width:100%;display:block;border:1px solid #ddd;border-radius:4px;border-radius:var(--default-border-radius);padding-top:1em;padding-bottom:1em;color:#333;margin-top:1em}.dark-bg .badge-link--top.badge-link--experiment .badge-link__cookie-msg .badge-link__wrap__link,.dark-bg .badge-link--home.badge-link--experiment .badge-link__cookie-msg .badge-link__wrap__link{color:#fff}.badge-link--settings .badge-link__bullets{padding:25px 70px 0 70px}.badge-link--settings .badge-link__title{padding-left:45px;padding-right:45px}.badge-link__thumb{text-align:center}.badge-link__thumb__img{position:relative;width:156px;height:129px;top:-60px;margin:0 auto -56px}.badge-link__thumb__img--newsletter{width:88px;height:88px;top:-44px;margin-bottom:-52px}.badge-link__thumb__img--survey{width:120px;height:120px;top:-40px;margin-bottom:-34px}.badge-link__form .badge-link__email{margin:1em;position:relative}.badge-link__form .badge-link__email .frm__input{height:2.4em;margin-bottom:-.5em}.badge-link__form .badge-link__email .frm__input::-ms-clear{display:none}.badge-link__form .badge-link__email .badge-link__lock-icon{position:absolute;bottom:21.5%;right:3%;cursor:initial}.badge-link__form .badge-link__submit{width:80.5%;margin:0 1em}.badge-link__form .badge-link__disclaimer{margin:1em;text-align:center}.badge-link--success{padding-top:1em}.badge-link--success .badge-link--newsletter__text{margin:1em;padding:0}.badge-link--top{right:7px}.badge-link--serp{right:14px}.badge-link--serp.badge-link--pctaexp{right:55px}@media only screen and (max-width: 979px){.badge-link--serp{display:none !important}}.badge-link__wrap{display:block;position:relative;max-width:300px}.badge-link__wrap,.badge-link__wrap:hover{text-decoration:none}.badge-link__wrap--hidden{display:none}.badge-link__top{display:table;padding-right:30px}.badge-link__icon{position:relative;display:table-cell;vertical-align:middle;padding:0 5px}.nav-menu--slideout .badge-link__icon{display:inline-block}.badge-link__title{display:block;font-size:17px;font-weight:600;color:#333;padding:0px 20px 0;text-align:center;margin-bottom:-5px}.badge-link__text{color:#666;display:table-cell;vertical-align:middle;font-size:14px;line-height:20px;padding:10px 0}.nav-menu--slideout .badge-link__text{padding:8px}.badge-link__bullets{display:block;clear:both;font-size:14px;background:none;border:none;color:#666;padding:15px 15px 0px;line-height:1.4}.badge-link__bullets .badge-link__bullet{margin-bottom:10px;position:relative;padding-left:20px}.badge-link__bullets .badge-link__bullet-num{position:absolute;top:0;left:0;display:block;height:24px;width:10px;text-align:center}.badge-link__btn{display:block;margin:1em}.badge-link__cookie-msg{color:#666;padding:20px 20px 15px;cursor:default}.badge-link__close{color:#888;cursor:pointer;display:block;font-size:14px;padding:8px;position:absolute;right:0;top:0}.badge-link__close--white{color:white}.badge-link--newsletter{cursor:initial;box-shadow:0 4px 10px rgba(0,0,0,0.1);border:1px solid rgba(0,0,0,0.15);width:300px}.badge-link--newsletter .transparent{opacity:0}.badge-link--newsletter.reset-height{height:auto;min-height:initial}.badge-link--newsletter .badge-link-illustration__text-wrapper{color:#888;padding:14px 10px 0 14px;text-align:center}.badge-link--newsletter .badge-link__close--dark{color:#888}.badge-link--survey{width:280px;height:240px}.badge-link--survey .badge-link__text{font-size:15px;padding:12px 20px 8px;text-align:center;line-height:1.33}.badge-link--survey .badge-link__close--dark{color:#888}.badge-link-illustration__img-wrapper{background:#5F63BD;overflow:hidden;height:130px;border-top-left-radius:4px;border-top-right-radius:4px}.onboarding-bottom-bathroomguy-img{display:block;width:180px;margin:0 auto;position:relative;top:27px}.atb-new{border:none;width:300px}.atb-new.english{width:304px}.atb-new .badge-link__wrap{max-width:none}.atb-new .badge-link__thumb__img{height:113px;margin:20px auto -10px;top:unset;width:248px}.atb-new .badge-link__title{color:#222;font-size:17px;line-height:22px;margin-bottom:12px}.atb-new .badge-link__subtitle{color:#222;font-size:15px;line-height:22px;padding:10px 20px 0;text-align:center}.atb-new .badge-link__close{color:#222;font-size:18px;top:10px;right:15px}.atb-new .badge-link__btn{font-size:14px}.atb-new .badge-link__checkbox{color:#000;font-size:14px;line-height:18px;border-radius:12px;padding:14px 10px 10px;margin:12px 16px}.atb-new .badge-link__checkbox .badge-link__btn{margin:8px 0 0;flex:1}.atb-new .badge-link__checkbox_unchecked{margin-bottom:16px}.atb-new .badge-link__checkbox__container{display:flex;align-items:center}.atb-new .badge-link__checkbox__container::before{content:'';display:block;border-radius:50%;width:16px;height:16px;flex:0 0 auto;margin:0 12px 0 4px;border:2px solid #399F29;background:#EEE}.atb-new .badge-link__checkbox__label{font-weight:600;font-size:15px;line-height:19px}.atb-new .badge-link__checkbox.badge-link__checkbox_checked{background:#EEE}.atb-new .badge-link__checkbox.badge-link__checkbox_checked.badge-link__checkbox__container::before{background:#399F29;background-image:url(assets/onboarding/atb-check.svg);background-repeat:no-repeat;background-position:50% 50%;background-size:10px 8px}.atb-new .badge-link__checkbox:not(.badge-link__checkbox_checked){border:2px solid #399F29;box-sizing:border-box}.atb-new .badge-link__out{display:block;font-size:14px;margin:-4px 16px 12px;text-align:center}.is-link-style-exp .atb-new .badge-link__out a{color:#3969EF}.modal__box.modal__box--add-to-browser{display:block;max-width:316px;padding:1.5em}.add-to-browser__title{font-size:1.3em}.add-to-browser__directions{text-align:left;counter-reset:li;list-style:none}.add-to-browser__directions>li{padding:.25em .25em .5em 1.75em;position:relative;display:block;line-height:1.2}.add-to-browser__directions>li:before{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;content:counter(li);counter-increment:li;background-color:#666;color:#fff;display:block;padding:3px;position:absolute;margin-right:.5em;top:3px;left:0;text-align:center;font-size:12px;line-height:13px;height:12px;width:12px}.add-to-browser__directions>li.has-btn{line-height:24px}.add-to-browser__directions>li.has-btn:before{top:7px}.add-to-browser__directions .btn--inline{padding-left:.5em;padding-right:.5em}.add-to-browser__image{display:block;margin-top:.5em;max-width:none}.add-to-browser__footer{display:block;margin-top:1.75em}.add-to-browser__footer a:visited{color:#4495d4}.add-to-browser-badge--lite{-webkit-transition:opacity .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:opacity .3s ease-in-out 0s;-o-transition:opacity .3s ease-in-out 0s;transition:opacity .3s ease-in-out 0s;opacity:1}.add-to-browser-badge--lite,.add-to-browser-badge--lite:hover{background:none;color:#666;border-color:#888}.is-blurred .add-to-browser-badge--lite{opacity:0.5}.has-search-focus .add-to-browser-badge--lite{opacity:0}.add-to-browser--blurred,.add-to-browser--blurred-dark{-webkit-transition:all .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:all .3s ease-in-out 0s;-o-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s;-webkit-transform:translate3d(0px, 0px, 0px);-moz-transform:translate3d(0px, 0px, 0px);-ms-transform:translate3d(0px, 0px, 0px);-o-transform:translate3d(0px, 0px, 0px);transform:translate3d(0px, 0px, 0px);position:fixed;top:100%;left:0;width:60%;text-align:center;padding:15px 20% 140px;z-index:300;font-size:1.7em}@media only screen and (max-height: 590px){.add-to-browser--blurred,.add-to-browser--blurred-dark{width:96%;font-size:1.2em;padding:30px 2%}}.has-search-focus .add-to-browser--blurred,.has-search-focus .add-to-browser--blurred-dark{display:none}.add-to-browser--blurred-dark{width:90%;padding:0 5%}.add-to-browser--blurred__backdrop,.add-to-browser--blurred__backdrop-dark{display:none;position:fixed;top:0;left:0;width:0;height:0}.add-to-browser--blurred__backdrop.is-showing,.is-showing.add-to-browser--blurred__backdrop-dark{z-index:299;display:block;width:100%;height:100%;background:rgba(255,255,255,0.3)}.add-to-browser--blurred__backdrop-dark.is-showing{background:rgba(41,41,41,0.95)}.atb-overlay{padding-top:30%;font-size:1.0em}.atb-overlay__close{font-size:1.0em;padding-top:15px}.atb-overlay__panel{background-color:#434343;color:#FFFFFF;font-size:15px;border-radius:20px;padding-bottom:20px}.atb-overlay__image{margin-top:-60px}@media only screen and (max-height: 475px){.atb-overlay__image{margin-top:-36px;height:70px}}.atb-overlay__title{padding:15px 0 5px 0;font-weight:bold;font-size:1.375em}@media only screen and (max-height: 475px){.atb-overlay__title{font-size:3vh;padding:2vh 0 0.5vh 0}}.atb-overlay__copy{width:250px;margin:0 auto;padding-bottom:25px}@media only screen and (max-height: 475px){.atb-overlay__copy{padding-bottom:3vh;font-size:2vh}}.atb-overlay__steps{display:table;width:250px;margin:0 auto}.atb-overlay__step{display:table-row;height:60px}.atb-overlay__step-cell{display:table-cell;vertical-align:middle}.atb-overlay__step-cell img{vertical-align:middle}.atb-overlay__step-cell--bg{background-color:#fff;border-radius:10px}.atb-overlay__step-cell--bg-dark{background-color:#292D30;border-radius:10px}.atb-overlay__step-cell--bg-gray{background-color:#E6E6EC;border-radius:10px}.atb-overlay__step-cell--bg-dax{background-color:#D44227;border-radius:10px}.atb-overlay__step-number{background-color:#1E1E1E;border-radius:30px;line-height:26px;text-align:center;height:26px;width:26px;font-size:0.794em;font-weight:bold}.atb-overlay__step-copy,.atb-overlay__step-copy-only{width:150px;text-align:left;display:table-cell;vertical-align:middle;font-size:1.062em}@media only screen and (max-height: 475px){.atb-overlay__step-copy,.atb-overlay__step-copy-only{font-size:2.3vh}}.atb-overlay__step-copy-only{padding-left:25px;width:unset}.blurred-animation .header-wrap,.blurred-animation .zci-wrap,.blurred-animation .content-wrap{-webkit-transition:all .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:all .3s ease-in-out 0s;-o-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);opacity:1}.is-blurred .header-wrap,.is-blurred .zci-wrap,.is-blurred .content-wrap{opacity:0.5}.is-blurred.cssfilters .header-wrap,.is-blurred.cssfilters .zci-wrap,.is-blurred.cssfilters .content-wrap{-webkit-filter:blur(5px);-moz-filter:blur(5px);filter:blur(5px);opacity:1}.atb-banner{position:fixed;bottom:0;width:100%;text-align:center;z-index:200}.atb-banner--hidden{display:none}.atb-banner--inline{position:absolute;left:0;right:0;bottom:25px;margin:0 auto;width:90%;text-align:center}.atb-banner--inline div{position:relative;font-size:4.2vw;padding-left:4.75vw;padding-right:4.75vw}@media only screen and (min-width: 500px){.atb-banner--inline div{font-size:2.5vw}}.atb-banner--inline .atb-banner__btn--install{margin-right:5px}@media only screen and (min-width: 500px){.atb-banner--inline .atb-banner__btn--install{margin-right:10px}}.atb-banner--inline .atb-banner__btn--app img[src$=".png"]{height:72px}.atb-banner--inline .atb-banner__btn--app img[src$=".svg"]{height:48px}.atb-banner--inline .atb-banner__learn-more{background-color:#aaa;border-color:#aaa;margin-left:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media only screen and (min-width: 320px) and (max-width: 359px){.atb-banner--inline .atb-banner__learn-more{max-width:90px}}@media only screen and (min-width: 360px) and (max-width: 399px){.atb-banner--inline .atb-banner__learn-more{max-width:106px}}@media only screen and (min-width: 400px) and (max-width: 499px){.atb-banner--inline .atb-banner__learn-more{max-width:112px}}@media only screen and (min-width: 500px){.atb-banner--inline .atb-banner__learn-more{margin-left:10px}}.is-firefox-focus .atb-banner{bottom:55px}.is-firefox-focus .atb-banner--inline{bottom:75px}.atb-banner__bottom{box-shadow:0 -2px 3px rgba(0,0,0,0.06);background-color:#fff;color:#666;border-top:1px solid #d2d2d2;padding:18px 7.5vw 7px;font-size:initial}@media only screen and (max-width: 767px){.atb-banner__bottom .atb-banner__content{width:58vw;float:left}}@media only screen and (max-width: 310px){.atb-banner__bottom .atb-banner__content{width:100%}}.atb-banner__bottom .atb-banner__start .atb-banner__title{margin-bottom:5px}.atb-banner__bottom .atb-banner__start .atb-banner__copy{line-height:1.6}.atb-banner__bottom .atb-banner__start .atb-banner__link{font-size:inherit;display:inline;margin:0 0 0 6px}@media only screen and (max-width: 360px){.atb-banner__bottom{padding-top:2.75vmax}}@media all and (device-width: 768px) and (device-height: 1024px) and (orientation: portrait){.atb-banner__bottom{padding:30px 0}}@media only screen and (min-device-width: 1024px) and (max-device-width: 1366px) and (-webkit-min-device-pixel-ratio: 1.5){.atb-banner__bottom{padding:30px 0}}.atb-banner__bottom .atb-banner__title{text-align:left;font-size:2.6vmax;font-weight:600;color:#333}@media only screen and (max-width: 360px){.atb-banner__bottom .atb-banner__title{margin-bottom:2px;line-height:1.22em}}@media only screen and (min-width: 768px){.atb-banner__bottom .atb-banner__title{text-align:center;font-size:1.125em}}@media all and (device-width: 768px) and (device-height: 1024px) and (orientation: portrait){.atb-banner__bottom .atb-banner__title{font-size:22px;margin-top:10px}}@media only screen and (min-device-width: 1024px) and (max-device-width: 1366px) and (-webkit-min-device-pixel-ratio: 1.5){.atb-banner__bottom .atb-banner__title{font-size:22px;margin-top:10px}}.atb-banner__bottom .atb-banner__title .atb-banner__title--blue{color:#5190C1;display:block;position:relative;top:-5px;margin-bottom:5px}.atb-banner__bottom .atb-banner__title--two-line{padding-top:5px;font-weight:bold}@media only screen and (min-width: 768px){.atb-banner__bottom .atb-banner__title--two-line{padding-top:0px;font-size:2.5vmax}}.atb-banner__bottom .atb-banner__title--small{font-size:2.4vmax}.atb-banner__bottom .atb-banner__copy{text-align:left;font-size:2.2vmax;margin-bottom:2vmax;line-height:1.4}@media only screen and (min-width: 768px){.atb-banner__bottom .atb-banner__copy{width:auto;text-align:center;margin-bottom:15px;font-size:0.875em}}@media all and (device-width: 768px) and (device-height: 1024px) and (orientation: portrait){.atb-banner__bottom .atb-banner__copy{font-size:20px}}@media only screen and (min-device-width: 1024px) and (max-device-width: 1366px) and (-webkit-min-device-pixel-ratio: 1.5){.atb-banner__bottom .atb-banner__copy{font-size:20px}}.atb-banner__bottom .atb-banner__thumbnail{margin-top:-60px}@media only screen and (max-width: 767px){.atb-banner__bottom .atb-banner__thumbnail{float:left;padding-right:5px;margin-bottom:2.5vmax;margin-top:0}}@media only screen and (min-width: 400px) and (max-width: 767px){.atb-banner__bottom .atb-banner__thumbnail{height:75px}}@media only screen and (max-height: 475px){.atb-banner__bottom .atb-banner__thumbnail{height:45px}}@media all and (device-width: 768px) and (device-height: 1024px) and (orientation: portrait){.atb-banner__bottom .atb-banner__thumbnail{height:90px !important;margin-top:-80px}}@media only screen and (min-device-width: 1024px) and (max-device-width: 1366px) and (-webkit-min-device-pixel-ratio: 1.5){.atb-banner__bottom .atb-banner__thumbnail{height:90px !important;margin-top:-80px}}@media only screen and (max-width: 310px){.atb-banner__bottom .atb-banner__thumbnail{display:none}}.atb-banner__bottom .atb-banner__thumbnail--app{margin-right:12px;filter:drop-shadow(0px 5px 10px rgba(0,0,0,0.2))}.atb-banner__bottom .atb-banner__thumbnail--round{margin-right:12px}.atb-banner__bottom .atb-banner__btn{margin:0;clear:both;font-size:2.3vmax;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media only screen and (max-width: 500px){.atb-banner__bottom .atb-banner__btn.atb-banner__btn--small,.atb-banner__bottom .atb-banner__btn.atb-banner__btn--medium{font-size:18px}}@media only screen and (max-width: 480px){.atb-banner__bottom .atb-banner__btn.atb-banner__btn--small,.atb-banner__bottom .atb-banner__btn.atb-banner__btn--medium{font-size:16px}}@media only screen and (max-width: 400px){.atb-banner__bottom .atb-banner__btn.atb-banner__btn--small,.atb-banner__bottom .atb-banner__btn.atb-banner__btn--medium{font-size:14px}}@media only screen and (max-width: 360px){.atb-banner__bottom .atb-banner__btn.atb-banner__btn--small{font-size:12px}}@media only screen and (min-width: 768px){.atb-banner__bottom .atb-banner__btn{display:inline-block;margin:0 auto;font-size:1em}}@media all and (device-width: 768px) and (device-height: 1024px) and (orientation: portrait){.atb-banner__bottom .atb-banner__btn{margin-top:20px;font-size:20px}}@media only screen and (min-device-width: 1024px) and (max-device-width: 1366px) and (-webkit-min-device-pixel-ratio: 1.5){.atb-banner__bottom .atb-banner__btn{margin-top:20px;font-size:20px}}.atb-banner__bottom .atb-banner__link{color:#66abff;display:block;margin:6px 0 0;font-weight:bold;font-size:2.3vmax}@media only screen and (min-width: 768px){.atb-banner__bottom .atb-banner__link{font-size:1em}}@media all and (device-width: 768px) and (device-height: 1024px) and (orientation: portrait){.atb-banner__bottom .atb-banner__link{font-size:20px}}@media only screen and (min-device-width: 1024px) and (max-device-width: 1366px) and (-webkit-min-device-pixel-ratio: 1.5){.atb-banner__bottom .atb-banner__link{font-size:20px}}.atb-banner__bottom .atb-banner__close{color:#aaa;cursor:pointer;display:block;padding:10px;position:absolute;right:0;top:0;font-size:1.15em}.atb-banner__bottom--app{padding-bottom:20px}.atb-banner__bottom--app .atb-banner__title{text-transform:lowercase}.atb-banner__bottom--app .atb-banner__title::first-letter{text-transform:uppercase}.atb-banner__bottom--less-padding{padding:18px 5vw 7px}.atb-banner__bottom--survey{padding-bottom:20px}.atb-banner__bottom--survey .atb-banner__thumbnail{box-sizing:border-box;height:21vw;max-height:95px}.atb-banner__btn--standalone{-webkit-transform:translate3d(-50%, 200%, 0);-moz-transform:translate3d(-50%, 200%, 0);-ms-transform:translate3d(-50%, 200%, 0);-o-transform:translate3d(-50%, 200%, 0);transform:translate3d(-50%, 200%, 0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.2);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.2);box-shadow:0 1px 3px rgba(0,0,0,0.2);position:fixed;bottom:15px;left:50%;background:#66abff;color:white;font-weight:bold;font-size:16px;padding-right:0.5em;padding-top:2px;padding-bottom:2px;opacity:0;border:1px solid #66abff;z-index:199;max-width:calc(100vw - 2.5em);display:flex;align-items:center}@media only screen and (min-width: 425px){.atb-banner__btn--standalone{font-size:18px}}@media only screen and (max-height: 453px) and (orientation: landscape){.atb-banner__btn--standalone{display:none}}.atb-banner__btn--standalone:hover,.atb-banner__btn--standalone:focus,.atb-banner__btn--standalone:active{background:#66abff;color:white}.atb-banner__btn--standalone span[role="button"]{padding-left:5px;color:rgba(255,255,255,0.6)}.atb-banner__btn--standalone a,.atb-banner__btn--standalone a:hover,.atb-banner__btn--standalone a:focus,.atb-banner__btn--standalone a:visited,.atb-banner__btn--standalone a:active{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit;text-decoration:none}.atb-banner__btn--standalone.atb-loaded{-webkit-transform:translate3d(-50%, 0, 0);-moz-transform:translate3d(-50%, 0, 0);-ms-transform:translate3d(-50%, 0, 0);-o-transform:translate3d(-50%, 0, 0);transform:translate3d(-50%, 0, 0);opacity:1}.atb-banner__btn--standalone.atb-loaded--animated{-webkit-transition:all .25s ease-out;-moz-transition:all .25s ease-out;-o-transition:all .25s ease-out;transition:all .25s ease-out;-webkit-transform:translate3d(-50%, 0, 0);-moz-transform:translate3d(-50%, 0, 0);-ms-transform:translate3d(-50%, 0, 0);-o-transform:translate3d(-50%, 0, 0);transform:translate3d(-50%, 0, 0);opacity:1}@media only screen and (max-width: 400px){.atb-banner__btn--standalone .atb-banner__btn--small,.atb-banner__btn--standalone .atb-banner__btn--medium{font-size:14px}}@media only screen and (max-width: 360px){.atb-banner__btn--standalone .atb-banner__btn--small{font-size:13px}}.atb-extension-overlay{-webkit-transition:opacity .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:opacity .3s ease-in-out 0s;-o-transition:opacity .3s ease-in-out 0s;transition:opacity .3s ease-in-out 0s;position:fixed;top:0;left:0;width:100%;height:100%;z-index:3000;background:rgba(0,0,0,0.85);color:#fff;opacity:0}.atb-extension-overlay.is-showing{opacity:1}.dark-bg .atb-extension-overlay{background:rgba(51,51,51,0.75)}.atb-extension-overlay__content{-webkit-transition:opacity .1s ease-out;-webkit-transition-delay:.5s;-moz-transition:opacity .1s ease-out .5s;-o-transition:opacity .1s ease-out .5s;transition:opacity .1s ease-out .5s;position:absolute;top:0;left:0;bottom:0;right:0;width:100%;opacity:0}.is-showing .atb-extension-overlay__content{opacity:1}.atb-extension-overlay--safari .atb-extension-overlay__content{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;width:100%;height:400px;text-align:center}.badge-link__wrap:before{content:'';background-image:url("/assets/install_arrow.svg");position:absolute;visibility:hidden}.atb-extension-overlay__dynamic-instructions{position:relative;margin:0 auto;width:480px;top:200px;text-align:center;padding-top:50px}.atb-extension-overlay__instructions{position:relative;margin:0 auto;width:400px;top:220px;text-align:center;padding-top:50px}.atb-extension-overlay__instructions--chrome{top:280px}.atb-extension-overlay__instructions--chrome:before{-webkit-transform:scale(-1, 1) rotate(0deg);-moz-transform:scale(-1, 1) rotate(0deg);-ms-transform:scale(-1, 1) rotate(0deg);-o-transform:scale(-1, 1) rotate(0deg);transform:scale(-1, 1) rotate(0deg);left:380px}.atb-extension-overlay__directions{font-size:32px}.atb-extension-overlay__dynamic-directions{font-size:32px;text-align:left;font-weight:300}.atb-extension-overlay__dynamic-directions>li{list-style-type:none;counter-increment:item}.atb-extension-overlay__dynamic-directions>li:before{content:counter(item) ".";width:1.5em;display:inline-block;text-align:center}.atb-extension-overlay__permissions{display:block;margin-top:0.8em;font-size:1.1em;font-weight:300;line-height:1.8em;letter-spacing:0.5px}.atb-extension-overlay__header{font-size:2.8em;font-weight:bold;padding:5px 0}.atb-extension-overlay__left-col{display:inline-block;text-align:right;width:50%}.atb-extension-overlay__right-col{display:inline-block;text-align:left;width:45%;margin-left:5%}.atb-extension-overlay__col-inner{display:inline-block;width:400px;text-align:left}.atb-extension-overlay__icn{font-size:2em;padding-right:10px;vertical-align:middle}.atb-extension-overlay__img{width:280px}.atb-extension-overlay__text{font-size:1.4em;vertical-align:middle;padding:0}.atb-extension-overlay--safari .atb-extension-overlay__text{margin-bottom:10px}.atb-extension-overlay__subtext{color:#aaa}.atb-extension-overlay__link,.atb-extension-overlay__link:active,.atb-extension-overlay__link:hover,.atb-extension-overlay__link:visited{color:#aaa;text-decoration:underline}.atb-extension-overlay__confetti{position:absolute;top:0;left:0;width:100%;height:100%}.atb-extension-overlay__success{-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;padding-top:20vh;width:430px;height:100%;text-align:center;margin:0 auto;-webkit-transform:scale(.85, .85);-moz-transform:scale(.85, .85);-ms-transform:scale(.85, .85);-o-transform:scale(.85, .85);transform:scale(.85, .85);opacity:0;display:none;position:absolute;left:-webkit-calc((100% - 430px) / 2);left:calc((100% - 430px) / 2)}.atb-extension-overlay__success.is-showing{opacity:1;-webkit-transform:scale(1, 1);-moz-transform:scale(1, 1);-ms-transform:scale(1, 1);-o-transform:scale(1, 1);transform:scale(1, 1)}.atb-extension-overlay__headline{margin:10px 0;padding:0;line-height:1.2;font-size:3em;font-weight:bold}.atb-extension-overlay__image{height:140px;width:140px;margin:0 auto}.atb-extension-overlay__newsletter-form{display:none}.frm--newsletter--dialog{margin-top:2em}.frm--newsletter--dialog .frm--newsletter--dialog--email{background:#ddd;border:none}.dark-bg .frm--newsletter--dialog .frm--newsletter--dialog--email{background:#4b4b4b}.frm--newsletter--dialog .frm--newsletter--dialog--submit{margin-left:10px}.atb-extension-overlay__nav,.atb-extension-overlay__lower-loupe{padding-top:1.25em;color:#4495d4;position:absolute;-webkit-transform:translateY(-10em);-moz-transform:translateY(-10em);-ms-transform:translateY(-10em);-o-transform:translateY(-10em);transform:translateY(-10em);-webkit-transition:translate .5s ease-in;-moz-transition:translate .5s ease-in;-o-transition:translate .5s ease-in;transition:translate .5s ease-in;width:100%;min-width:100%}.atb-extension-overlay__nav>span,.atb-extension-overlay__lower-loupe>span{cursor:pointer}.atb-extension-overlay__nav .ddgsi-loupe,.atb-extension-overlay__nav .ddgsi-close-bold,.atb-extension-overlay__lower-loupe .ddgsi-loupe,.atb-extension-overlay__lower-loupe .ddgsi-close-bold{font-size:1.5em;vertical-align:middle;margin-left:1.1em;margin-right:0.5em}.atb-extension-overlay__nav .ddgsi-close-bold,.atb-extension-overlay__lower-loupe .ddgsi-close-bold{margin-right:1.1em}.atb-extension-overlay__nav.is-showing,.atb-extension-overlay__lower-loupe.is-showing{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}.atb-extension-overlay__nav-text,.atb-extension-overlay__nav-text:visited,.atb-extension-overlay__nav-text:hover{vertical-align:middle;font-weight:bold;color:#4495d4;text-decoration:none}.atb-extension-overlay__lower-loupe{position:initial;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0);padding-top:0}.atb-extension-overlay__lower-loupe .ddgsi-loupe{margin-left:0;font-size:1.2em}.atb-extension-overlay__disclaimer{margin:2em 0}.atb-extension-overlay__disclaimer .atb-extension-overlay__disclaimer__link{color:#888}.atb-extension-overlay__nope{color:#4495d4;cursor:pointer;margin-top:2em}.atb-extension-overlay__fade-out{-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s}.atb-extension-overlay__fade-out.is-faded{height:0;opacity:0}.atb-extension-overlay__success-message{opacity:0;-webkit-transition:opacity .2s;-webkit-transition-delay:.5s;-moz-transition:opacity .2s .5s;-o-transition:opacity .2s .5s;transition:opacity .2s .5s}.atb-extension-overlay__success-message.is-shown{opacity:1}.atb-extension-overlay__thanks{width:71%;margin:0 auto 1em}.atb-extension-overlay__search-btn{margin-top:1.2em;font-weight:bold}.tx-bld{font-weight:600}.tx-lt,.hd-hr,.hd-lg{font-weight:300}.tx-it{font-weight:normal;font-style:italic}.tx-up,.hd-lg,.hd-md{text-transform:uppercase}.hd-hr{line-height:1.1;text-align:center}.hd-hr+.hd-hr{padding-top:0}.hd-lg{padding-top:1em;padding-bottom:0}.hd-md .anchor--link{float:right;font-size:0.5em;margin-top:1em}.dropdown{display:inline-block;position:relative;cursor:pointer;height:35px;line-height:35px;margin-bottom:.5em;margin-right:20px}.dropdown.is-open{display:inline-block}.dropdown:last-child{margin-right:.75em}.is-mobile .dropdown{margin-right:15px}.dropdown__button{color:#666;height:100%;line-height:36px;padding-right:25px;display:inline-block}.dropdown__button--no-icon{padding-right:0px}.dropdown.is-active .dropdown__button{font-weight:600;color:#222}.dropdown__button:hover,.dropdown__button:focus,.dropdown__button:visited,.dropdown.is-open .dropdown__button{text-decoration:none;color:#333}.dropdown__button:not(.dropdown__button--no-icon):after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\25bc";margin-top:-6px;margin-left:7px;font-size:12px;line-height:1;pointer-events:none;vertical-align:middle;display:inline-block;position:absolute;top:50%}.modal--dropdown.modal--popout{width:100%;height:0;position:absolute;left:auto;right:auto;bottom:auto;top:40px}.modal--dropdown.modal--popout .modal__box{-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.15);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.15);box-shadow:0 1px 4px rgba(0,0,0,0.15);border:1px solid rgba(0,0,0,0.12);left:-1em;box-sizing:border-box}.modal--dropdown.modal--popover .modal__box{max-height:400px;display:block;overflow-y:auto}@media only screen and (max-height: 425px){.modal--dropdown.modal--popover .modal__box{max-height:300px}}.modal--dropdown.modal--dropdown--filter .modal__box{display:inline-block;max-width:95vw;min-width:220px;text-align:left;width:auto}.modal--dropdown.modal--dropdown--filter .modal__box .modal__list__link{overflow:hidden;text-overflow:ellipsis}.modal--dropdown .modal__box{margin-top:0;width:220px;min-width:auto;text-align:left;left:0}.modal--dropdown .modal__box:before,.modal--dropdown .modal__box:after{content:none}.is-showing .modal--dropdown .modal__box{z-index:99}.modal--dropdown .modal__header{padding:.75em 1em}.modal--dropdown .modal__close{top:0.9em}.modal--dropdown .modal__body{padding:.5em}.modal--dropdown .modal__list{position:relative}.modal--dropdown .modal__list__link{white-space:nowrap;padding:.5em;height:19px;line-height:20px}.modal--dropdown .modal__list__link.is-selected,.modal--dropdown .modal__list__link.is-selected:hover,.modal--dropdown .modal__list__link.is-selected:visited{color:#222}.modal--dropdown.modal--dropdown--date .modal__footer,.modal--dropdown.modal--dropdown--license .modal__footer{border-bottom:0;border-top:1px solid #e0e0e0;background-color:transparent;padding:0}.modal--dropdown.modal--dropdown--date .modal__footer .modal__list__link,.modal--dropdown.modal--dropdown--license .modal__footer .modal__list__link{font-weight:bold;color:#00278e;padding:10px 1em}.modal--dropdown.modal--dropdown--date .modal__footer .modal__list__link:hover,.modal--dropdown.modal--dropdown--license .modal__footer .modal__list__link:hover{text-decoration:underline;background-color:transparent}.modal--dropdown .modal__list__link.has-description{min-height:34px;height:auto;line-height:17px;position:relative;padding-right:2em}.modal--dropdown .modal__list__link.has-description:before{position:absolute;right:.5em;top:50%;margin-top:-10px}.modal--dropdown .modal__list__link__description{display:block;font-weight:400;color:#999;white-space:normal}.modal--dropdown--directions .modal__header{padding:.75em 1em}.modal--dropdown--directions.modal--popout .modal__box{width:160px;left:-80px}.modal--dropdown--directions .modal__list__link{padding-left:.5em}.modal--dropdown--directions.modal--popout--bottom,.modal--dropdown--directions.modal--popout--bottom-right,.modal--dropdown--directions.modal--popout--bottom-left{margin-top:10px}.modal--dropdown--directions.modal--popout--bottom .modal__box:before,.modal--dropdown--directions.modal--popout--bottom .modal__box:after,.modal--dropdown--directions.modal--popout--bottom-right .modal__box:before,.modal--dropdown--directions.modal--popout--bottom-right .modal__box:after,.modal--dropdown--directions.modal--popout--bottom-left .modal__box:before,.modal--dropdown--directions.modal--popout--bottom-left .modal__box:after{content:"\25b2"}.modal--dropdown--directions.modal--popout--top{margin-bottom:5px}.modal--dropdown--directions.modal--popout--top .modal__box:before,.modal--dropdown--directions.modal--popout--top .modal__box:after{content:"\25bc"}.dropdown--translation-select{border:1px solid #DDD;border-radius:4px;border-radius:var(--default-border-radius)}.dropdown--translation-select,.dropdown--translation-select:last-child{margin:0 0 10px}.dropdown--translation-select,.dropdown--translation-select.is-open{display:block}.dropdown--translation-select .dropdown__button{color:#222;display:block;padding-left:13px;position:relative}.dropdown--translation-select .dropdown__button::after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\76";right:10px}@media only screen and (max-width: 864px){.dropdown--translation-select{border-radius:0;border-width:0 0 1px;margin:0 !important}}.modal__list__filter{border-bottom:1px solid rgba(0,0,0,0.12);height:46px}.modal__list__filter input{-webkit-appearance:none;appearance:none;border:0;color:#666;display:block;font-size:14px;height:46px;line-height:46px;padding:0 1em 0 calc(1em + 16px * 1.5);width:100%}.modal__list__filter input:focus,.modal__list__filter input:active{outline:0}.modal__list__filter input::placeholder{color:#666;opacity:1}.modal__list__filter::before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\53";color:#999;font-size:16px;left:1em;position:absolute;top:12.631579px}.modal--popover .modal__list__filter{border:none;height:auto;padding:10px 10px 0}.modal--popover .modal__list__filter input{background:#f7f7f7;border:1px solid rgba(0,0,0,0.12);border-radius:4px;color:#333;height:32px;line-height:32px;padding:0 10px}.modal--popover .modal__list__filter input::placeholder{color:#aaa}.modal--popover .modal__list__filter::before{display:none}.modal--dropdown--translation.modal--popout .modal__wrap{left:14px;position:relative;top:-1px}.modal--dropdown--translation.modal--popout .modal__box{transition:none !important}.modal--dropdown--translation.modal--dropdown .modal__box{margin-top:-5px}.modal--dropdown--translation .modal__body{padding:0}.modal--dropdown--translation .modal__list{height:250px;overflow:auto;padding:.5em 0}.modal--dropdown--translation .modal__list li{margin:0 .5em}.modal--dropdown--translation .modal__list li.modal__list__divider{margin:.5em 0;height:1px;background:rgba(0,0,0,0.1)}.modal--dropdown--translation .modal__list .is-active{background-color:#f7f7f7}@media only screen and (max-height: 425px){.modal--dropdown--translation .modal__list{height:200px}}@media screen and (-webkit-min-device-pixel-ratio: 0){.js-dropdown-filter,.js-dropdown-filter:focus{font-size:16px !important}}.atb-extension-overlay--promote-mobile .atb-extension-overlay__success{padding-top:40px;width:550px;left:-webkit-calc((100% - 550px) / 2);left:calc((100% - 550px) / 2)}.atb-extension-overlay--promote-mobile .atb-extension-overlay__image{width:72px;height:72px;margin:0}.atb-extension-overlay--promote-mobile .atb-extension-overlay__headline{margin-top:25px;margin-bottom:10px;font-weight:normal;line-height:1.4;font-size:34px}.atb-extension-overlay--promote-mobile .atb-extension-overlay__text{color:#EBEBEB;font-size:20px;margin-bottom:20px}.atb-extension-overlay--promote-mobile .atb-extension-overlay__mobile-image{width:179px;height:360px;display:block;margin:30px auto;background-image:url("/assets/onboarding/mobile/phone@2xl.png")}.atb-extension-overlay--promote-mobile .atb-extension-overlay__search-btn{margin-top:0px;padding:2px 20px}.atb-extension-overlay--promote-mobile .atb-extension-overlay__search-btn:visited{color:#4495d4}@media (max-height: 770px){.atb-extension-overlay--promote-mobile .atb-extension-overlay__mobile-image{width:149px;height:300px;background-image:url("/assets/onboarding/mobile/phone@2xm.png")}}@media (max-height: 750px){.atb-extension-overlay--promote-mobile .atb-extension-overlay__mobile-image{width:99px;height:200px;background-image:url("/assets/onboarding/mobile/phone@2xs.png")}}@media (max-height: 600px){.atb-extension-overlay--promote-mobile .atb-extension-overlay__mobile-image{display:none}.atb-extension-overlay--promote-mobile .atb-extension-overlay__success{padding-top:100px}}.example-search{display:inline-block;height:34px;background-color:white;color:#222;border-radius:17px;box-sizing:border-box;box-shadow:0 2px 4px 0 rgba(0,0,0,0.3);font-size:14px;padding:6px 14px 0 32px;margin-right:10px;position:relative;white-space:nowrap}.example-search:hover,.example-search:focus{text-decoration:none;color:#222;background-color:#f9f9f9}.example-search:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\53";position:absolute;left:13px}.header-wrap{-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.15);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.15);box-shadow:0 1px 0 rgba(0,0,0,0.15);-webkit-tab-highlight-color:rgba(0,0,0,0);background-color:#fafafa;padding-top:16px;position:relative;z-index:15}.header-wrap:after{content:"";width:100%;display:block;margin-top:-2px;height:1px}.lt-ie9 .header-wrap{border-bottom:1px solid #dbdbdb}.header-wrap--show{display:block}.header-wrap--with-hero{-webkit-transition:top .1s ease-in-out;-webkit-transition-delay:0s;-moz-transition:top .1s ease-in-out 0s;-o-transition:top .1s ease-in-out 0s;transition:top .1s ease-in-out 0s;position:absolute;width:100%;right:0;left:0;padding-bottom:15px;top:-102px}.has-search-focus .header-wrap--with-hero{top:0}.header-wrap--fixed{position:fixed;top:0}.header{min-height:58px}.header.cw,.header.cw--c{padding-left:0;padding-right:0;max-width:none}@media only screen and (max-width: 864px){.has-zcm .header{margin-bottom:0;width:98%}.has-zcm .header .header__shrink-beyond-min-size{width:98vw}.has-zcm .header .header__shrink-beyond-min-size .header--aside{right:-8px}}@media only screen and (max-width: 590px){.has-zcm .header{float:none;width:auto}.has-zcm .header .header__shrink-beyond-min-size{width:100vw}}.lt-ie9 .header{float:none}.body--serp .header{min-height:85px}body:not(.body--serp) .header--aside{margin-top:22px}@media only screen and (max-width: 1072px){.header__shrink-beyond-min-size{position:relative;width:100vw}body.body--serp .header--aside{padding-right:7px}}.header__search-wrap{position:relative;margin-bottom:3px;margin-top:1px}.header__logo-wrap{margin:auto;margin-left:3.5px;height:100%;display:-webkit-box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center}@media only screen and (min-width: 1350px){.header__logo-wrap{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;-moz-justify-content:flex-end;justify-content:flex-end}}.header__logo-wrap:hover{text-decoration:none}.header__logo,.header__praise,.header__avatar{width:36px;height:36px}@media only screen and (min-width: 1350px){.header__logo,.header__praise,.header__avatar{margin-right:28px}}.header__logo-wrap--flex:hover{text-decoration:none}.header__logo--flex{height:39px;width:39px}.header__logo-wrap .header__praise,.header__logo-wrap .header__avatar{height:36px;top:auto;display:none}@media only screen and (min-width: 1350px){.header__logo-wrap .header__praise,.header__logo-wrap .header__avatar{left:auto;right:0}}@media only screen and (min-width: 1350px){.header__praise,.header__avatar{top:-4px}}.header__avatar{-webkit-border-radius:100%;-moz-border-radius:100%;-ms-border-radius:100%;-o-border-radius:100%;border-radius:100%}.header__search{position:relative;left:5px}.header--aside{display:block;margin:5px auto auto 16px;height:44px;right:7px;position:absolute;bottom:0;top:0;z-index:199}.header__button,.header__button--menu{display:block;float:right;top:1px;z-index:10}.header__button,.header__button--menu,.header__button:visited,.header__button--menu:visited,.header__button:focus,.header__button--menu:focus,.header__button:hover,.header__button--menu:hover{color:#a5a5a5}.header__button--menu{margin-left:20px}.header--aside__item{height:39px;display:inline-block;vertical-align:middle;position:relative;white-space:nowrap;z-index:1;line-height:37px}.header--aside__item .popout-trig{position:relative;margin-left:5px}@media only screen and (max-width: 1079px){.header--aside__item--hidden-lg{display:none}}.is-mobile .header--aside__item{display:none}.header--aside__social{margin-left:25px}.header--aside__social:hover{text-decoration:none}.header--aside__social-icon{font-size:25px}.header__label,.header__link{color:#aaa}.header__clickable{cursor:pointer;display:flex;align-items:center}.header__clickable .header__clickable--icon{position:relative;top:1px;width:12px;height:12px}.header__clickable:hover,.header__clickable:focus{color:#6d6d6d}.header-wrap--hero{background:#e37151;color:#fff;position:relative;width:100%;right:0;left:0;top:0;padding-top:1.25em}.header-wrap--hero--alt{border-top-color:#00278e;background-color:#66abff}.header--hero{cursor:pointer;line-height:1.9;z-index:5}.header--hero__loupe{position:relative;vertical-align:middle;margin-left:.8em;margin-right:.5em;top:0;font-size:1.5em}.header--hero__loupe:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\53"}.header--hero__link{padding-left:1em;font-size:16px}.header--hero__link,.header--hero__link:hover,.header--hero__link:focus,.header--hero__link:active{color:#fff}.header-wrap--hero .header__button--menu,.header-wrap--hero .header__button--menu:visited,.header-wrap--hero .header__button--menu:focus,.header-wrap--hero .header__button--menu:hover{color:#fff}.no-touch .header-wrap--hero .header__button--menu:hover,.no-touch .header-wrap--hero .header__button--menu:focus,.no-js .header-wrap--hero .header__button--menu:hover,.no-js .header-wrap--hero .header__button--menu:focus{background-color:#bd4b2b;background-color:rgba(0,0,0,0.15)}@media only screen and (max-width: 864px){.header__search-wrap{padding-right:45px}}@media only screen and (max-width: 590px){.header__search-wrap{padding-right:45px}.header__logo-wrap{margin-left:0}.header__search{left:0}.site-wrapper .header-wrap .header .header--aside,.site-wrapper header .header-wrap--hero .header--aside{right:3.5px;top:-9px}.has-search-focus .header__search-wrap{margin-left:0;padding-left:7px;padding-right:7px}.has-search-focus .header-wrap .header--aside{right:-45px}.has-search-focus .header__logo,.has-search-focus .header__avatar{margin-left:-36px;opacity:0}.header-wrap{padding-top:9px}.site-wrapper .header-wrap .header--aside{margin-top:13.5px}.header-wrap--hero{padding-top:11px}}.is-mobile.has-zcm.is-mobile-device.set-header--fixed body,.is-mobile.has-zcm.is-mobile-device.set-header--floating body{padding-top:134px}.is-mobile.set-header--floating .header-wrap{transition:top 0.2s ease-in-out 0.05s, background-color 0.3s ease-out}.is-mobile .body--serp .header-wrap{padding-top:9px;transition:background-color 0.3s ease-out}.is-mobile .body--serp .header{width:100%;padding-top:41px}.is-mobile .body--serp .header .header__shrink-beyond-min-size{width:100vw;position:unset}.is-mobile .body--serp .header .header__shrink-beyond-min-size .header--aside{top:-9px}.is-mobile .body--serp .header__logo-wrap{position:absolute;top:-41px;width:160px;height:32px;left:calc(50% - 80px)}.is-mobile .body--serp .header__logo-wrap--offset{left:calc(50% - 89px)}.is-mobile .body--serp .header__logo{background-image:url("assets/logo_header_mobile.svg");width:160px;height:32px;background-size:154px 32px;opacity:1;margin:0}.is-mobile .body--serp .header__search-wrap{margin-top:0;margin-left:0;padding:0 7px;max-width:none}.is-mobile .body--serp .header__search{left:0}.is-mobile .body--serp .header--aside__social{display:none}.is-mobile.dark-header .body--serp .header__logo{background-image:url("assets/logo_header_mobile.alt.svg")}.is-mobile.dark-header .search--adv.has-text .search__button,.is-mobile.dark-header .search__button,.is-mobile.dark-header .search__clear,.is-mobile.dark-header .has-text .search__clear{color:#aaa}.is-mobile .body--serp .header--aside,.is-mobile .body--home .header--aside{left:0;right:auto;margin:7px 50px 0 16px}.is-mobile .header-wrap .header__button--menu,.is-mobile .header-wrap--home .header__button--menu{margin-left:0;float:none;color:#aaa}.is-mobile.set-header--menu .header-wrap>.dropdown--settings{display:none}.is-mobile.set-header--menu .header-wrap .header{padding-top:0}.is-mobile .body--serp .nav-menu--slideout:not(.nav-menu--right),.is-mobile .body--home .nav-menu--slideout:not(.nav-menu--right){right:auto;left:0;-webkit-transform:translate3d(-14.25em, 0, 0);-moz-transform:translate3d(-14.25em, 0, 0);-ms-transform:translate3d(-14.25em, 0, 0);-o-transform:translate3d(-14.25em, 0, 0);transform:translate3d(-14.25em, 0, 0);box-shadow:1px 0 1px rgba(0,0,0,0.2)}.is-mobile .body--serp .nav-menu--slideout:not(.nav-menu--right).is-open,.is-mobile .body--home .nav-menu--slideout:not(.nav-menu--right).is-open{-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.search__autocomplete{display:none;position:absolute;top:2.8em;left:0;width:100%;max-height:208px;border:1px solid #d0d0d0;border-radius:0 0 4px 4px;border-radius:0 0 var(--default-border-radius) var(--default-border-radius);margin-top:-2px;margin-left:-1px;margin-right:-1px;z-index:25;box-shadow:0 2px 4px rgba(0,0,0,0.1);overflow:hidden}.header__search .search__autocomplete{top:44px}.lt-ie8 .search__autocomplete{display:none !important}.is-mobile .search--adv .search__autocomplete{max-height:unset}.search--home .search__autocomplete{max-height:230px;margin-top:-4px}.search__autocomplete.search__autocomplete--bang{max-height:none;overflow:initial}.is-mobile .search__autocomplete.search__autocomplete--bang{overflow-y:hidden}.search__autocomplete.search__autocomplete--two-rows{top:44px;box-shadow:0 1px 3px 0 rgba(0,0,0,0.08);max-height:318px}.is-mobile .search__autocomplete.search__autocomplete--two-rows{max-height:218px}.acp-wrap{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;padding:4px 0;max-height:208px;background-color:#fff;overflow:auto;overflow-x:hidden;position:static}.search--home .acp-wrap{max-height:230px}.search__autocomplete--bang .acp-wrap{padding:0;max-height:256px}.search--home .search__autocomplete--bang .acp-wrap{max-height:272px}.search__autocomplete--two-rows .acp-wrap{max-height:318px;padding:6px 0}.lt-ie9 .acp-wrap{max-height:200px}.acp-footer{position:absolute;width:100%;box-shadow:0 0px 4px rgba(0,0,0,0.1);border:1px solid #d0d0d0;background-color:#fff;margin-left:-1px;padding:4px 0;border-radius:0 0 4px 4px;border-radius:0 0 var(--default-border-radius) var(--default-border-radius)}.acp-footer .acp-footer__instructions{margin-left:16px;color:#666}.acp-footer .acp-footer__link{position:absolute;right:0;margin-right:16px}.acp,.acp--bang{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;cursor:pointer;line-height:1.1;font-size:1.1em;padding:4px .681818em;margin:0 auto;position:static;color:#222;font-weight:bold}.search__autocomplete--two-rows .acp,.search__autocomplete--two-rows .acp--bang{padding:6px 11px;margin:0;min-height:42px}.acp-wrap__column{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;float:left;padding:4px}.acp-wrap__column.acp-wrap__column--left{border-right:1px solid #e0e0e0}.acp--bang{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:8px 16px;position:relative;z-index:1}.acp--bang__img-wrap{margin-right:4px;background-color:#fff;float:left;width:16px;height:16px}.acp--bang__img-wrap,.acp--bang__img{border-radius:4px;border-radius:var(--default-border-radius)}.acp--bang__body{position:relative;padding-left:12px}.acp--bang__phrase,.acp--bang__snippet{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis}.acp--bang__phrase{position:absolute;right:0}.acp--bang__snippet{display:inline-block;width:75%;font-weight:normal}.acp--long-phrase .acp--bang__snippet{width:50%}.acp--highlight{background-color:#f2f2f2}.acp--highlight.acp--bang{margin-top:0;margin-bottom:0}.acp--highlight.acp--bang .acp--bang__snippet{color:#111}.acp__phrase{overflow:hidden;text-overflow:ellipsis;font-size:1em;line-height:1.1}.acp__detail{font-weight:normal;font-size:13px;overflow:hidden;text-overflow:ellipsis;margin-top:3px;color:#666;line-height:100%}.is-mobile .acp-wrap__column.acp-wrap__column--left{float:none;width:100%;border-right:none}.is-mobile .acp-wrap__column.acp-wrap__column--right{display:none}.is-mobile .acp-footer{display:none}.is-mobile .search__autocomplete--bang .acp-wrap{max-height:208px}.is-mobile .search--adv .acp-wrap{position:relative;max-height:256px}.is-mobile .search--adv .search__autocomplete--bang .acp-wrap{max-height:276px}.is-mobile .search--adv .acp,.is-mobile .search--adv .acp--bang{padding:7px 35px 7px 15px;font-size:16px;height:31px}.is-mobile .search--adv .acp--bang{padding-left:11px;padding-right:14px;height:34px}.is-mobile .search--adv .acp__search-fill{position:absolute;right:0;margin-top:-6px;padding:6px;padding-right:17px;font-size:12px;color:#aaa;-webkit-tap-highlight-color:transparent}.is-mobile .search--adv .acp__search-fill:active{color:#222}@media only screen and (max-width: 864px){.acp--bang__snippet{width:50%}.acp--long-phrase .acp--bang__snippet{width:30%}}@media only screen and (max-height: 800px){.search--home .search__autocomplete--bang .acp-wrap{max-height:188px}}.is-mobile .hide--mob{display:none}.is-mobile .show--mob{display:block}.feedback-btn__icon,.nav-menu__feedback__icon{-webkit-transition:opacity .2s,color .15s;-moz-transition:opacity .2s,color .15s;-o-transition:opacity .2s,color .15s;transition:opacity .2s,color .15s;-webkit-transition-delay:0s,0s;-moz-transition-delay:0s,0s;-o-transition-delay:0s,0s;transition-delay:0s,0s;font-size:22px;color:#666}.feedback-btn__icon:hover,.nav-menu__feedback__icon:hover,.feedback-btn__icon:focus,.nav-menu__feedback__icon:focus{color:#333;text-decoration:none}.feedback-btn{-webkit-transition:height .2s ease-in-out;-webkit-transition-delay:.05s;-moz-transition:height .2s ease-in-out .05s;-o-transition:height .2s ease-in-out .05s;transition:height .2s ease-in-out .05s;border:none;padding:0;height:28px;min-width:120px;text-align:center;margin:.5em;box-sizing:border-box;box-shadow:0 1px 3px 0 rgba(0,0,0,0.25)}.feedback-btn:hover{background-color:#fafafa}.footer--mobile .feedback-btn{box-shadow:none;border:1px solid #d0d0d0;border-radius:3px}@media only screen and (max-width: 1130px){.has-right-rail-ads .serp__top-right .feedback-btn{display:none}}@media only screen and (max-width: 1340px){.has-right-rail-module .serp__top-right .feedback-btn{display:none}}.feedback-btn--clicked{-webkit-transition-delay:0s;-moz-transition-delay:0s;-o-transition-delay:0s;transition-delay:0s;height:42px}.feedback-btn__send{-webkit-transition:opacity .2s ease-in-out;-webkit-transition-delay:0s;-moz-transition:opacity .2s ease-in-out 0s;-o-transition:opacity .2s ease-in-out 0s;transition:opacity .2s ease-in-out 0s;width:100%;height:100%;display:block;color:#999;font-weight:600;opacity:1;padding:0 .75em;box-sizing:border-box;text-transform:capitalize}.feedback-btn__send:hover,.feedback-btn__send:focus{color:#666;text-decoration:none}.feedback-btn--clicked .feedback-btn__send{opacity:0}.feedback-btn__icon-wrap{position:absolute;top:0;left:0;width:100%;height:42px}.feedback-btn__icon{opacity:0;width:50%;height:42px;display:inline-block;box-sizing:border-box}.feedback-btn__icon:first-child{padding-right:.5em;text-align:right}.feedback-btn__icon:last-child{padding-left:.5em;text-align:left}.feedback-btn--clicked .feedback-btn__icon{-webkit-transition-delay:.1s,0s;-moz-transition-delay:.1s,0s;-o-transition-delay:.1s,0s;transition-delay:.1s,0s;opacity:1;visibility:visible}.feedback-btn__icon--love:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\29"}.feedback-btn__icon--nolove:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\28"}.nav-menu__feedback{top:-.25em;height:28px}.nav-menu__feedback__icon{display:inline-block;height:28px}.nav-menu__feedback__icon--love{margin-right:20px}.nav-menu__feedback__icon--love:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\29"}.nav-menu__feedback__icon--nolove:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\28"}.modal__box.modal__box--feedback{-webkit-transition:height .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:height .3s ease-in-out 0s;-o-transition:height .3s ease-in-out 0s;transition:height .3s ease-in-out 0s;max-width:360px;width:80%;padding:20px;overflow-y:auto;height:auto;max-height:100%;box-sizing:border-box;display:block}.modal__box.modal__box--feedback.modal__box--headed{padding:0}.modal__box.modal__box--feedback.modal__box--headed .modal__box__content{padding:20px}.modal__box.modal__box--feedback.modal__box--headed .modal__box__content p{padding:0}.modal__box.modal__box--feedback.modal__box--headed .modal__close{font-weight:bolder !important}.modal__box.modal__box--feedback.modal__box--headed .modal__box__header{background-color:#FAFAFA;padding:20px 40px;border-bottom:1px solid rgba(0,0,0,0.1)}.dark-bg .modal__box.modal__box--feedback.modal__box--headed .modal__box__header{background-color:#333333}.modal__box.modal__box--feedback.modal__box--headed .modal__box__header.modal__box__header--form{text-transform:capitalize}@media only screen and (max-width: 384px){.modal__box.modal__box--feedback.modal__box--headed .modal__box__header.modal__box__header--form{padding:20px 12px}}.modal__box.modal__box--feedback.modal__box--headed .modal__box__header h5{font-weight:bolder}.modal__box.modal__box--feedback.modal__box--headed .feedback-modal__subtitle{margin-bottom:20px}.modal__box.modal__box--feedback.modal__box--headed .frm--feedback{padding-top:0px}.modal__wrap.modal__wrap--feedback{height:100%;display:flex;overflow:hidden;align-items:center}.frm--feedback{padding-top:20px}.feedback-modal{display:block}.feedback-modal__heading{text-align:left;position:relative}.feedback-modal__heading .feedback-modal__close{right:0;top:6px}.feedback-modal__heading__prompt{font-size:0.8em;display:block;color:#666}.feedback-modal__heading__prompt.has-category{color:#111;font-size:1em;display:inline}.feedback-modal__heading__category{text-transform:capitalize}.feedback-modal__heading__query{font-weight:600}.feedback-modal__heading__query:before{content:open-quote}.feedback-modal__heading__query:after{content:close-quote}.feedback-modal__heading__main{font-size:16px;font-weight:600}.feedback-modal__heading--success{text-align:center;font-weight:600}.feedback-modal__image{background:#f7f7f7;margin-bottom:10px;padding:10px}.feedback-modal__image img{display:block;max-height:200px;max-width:200px;margin:0 auto}.dark-bg .feedback-modal__image{background:#111}.feedback-modal__label{display:block;text-align:left;font-weight:normal;font-size:1.1em;margin-bottom:10px}.feedback-modal__input{display:block;width:100%;margin-bottom:10px;padding-left:.5em;height:2.2em}.feedback-modal__input--dropdown{padding-left:0}.feedback-modal__input--dropdown select{width:100% !important;height:100% !important}.is-mobile-device .feedback-modal__input--dropdown select{font-size:16px;line-height:100%}.is-mobile-device .feedback-modal__input--text{font-size:16px}.feedback-modal__issues{margin-bottom:10px;padding-left:0;text-align:left;overflow:hidden;height:auto}.feedback-modal__radio{display:block;margin-bottom:10px}.feedback-modal__radio .feedback-modal__radio__input{display:inline-block;margin-right:5px;margin-left:1px}.feedback-modal__input--text{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:auto;padding:.5em .5em .5em .75em;overflow:auto;resize:vertical;max-height:210px}.feedback-modal__issues,.feedback-modal__input--other,.feedback-modal__input--ads{-webkit-transition:border-width .3s,opacity .3s,height .3s,margin .3s;-moz-transition:border-width .3s,opacity .3s,height .3s,margin .3s;-o-transition:border-width .3s,opacity .3s,height .3s,margin .3s;transition:border-width .3s,opacity .3s,height .3s,margin .3s}.feedback-modal__issues.is-invisible,.feedback-modal__input--other.is-invisible,.feedback-modal__input--ads.is-invisible{height:0;opacity:0;margin:0;padding:0;border-width:0}.feedback-modal__input--other{opacity:1;padding-left:.75em}.feedback-modal__input--other.frm__input{background-color:#f7f7f7;color:#333}.feedback-modal__submit{width:100%;box-sizing:border-box;text-align:center;font-size:1em;position:relative}.feedback-modal__submit.is-disabled:hover,.feedback-modal__submit.is-disabled:active,.feedback-modal__submit.is-disabled:focus{background-color:#c3c3c3;border-color:#c3c3c3;color:#eee}.feedback-modal__message{font-size:1.1em;text-align:center;color:#666}.dark-bg .feedback-modal__message{color:#f7f7f7}.feedback-single-place-modal__manage{display:block;text-align:left;margin-bottom:10px}.feedback-single-place-modal__disclaimer{font-size:0.9em;text-align:left;margin-top:10px;color:#666}.dark-bg .feedback-single-place-modal__disclaimer{color:#f7f7f7}.lt-ie10 .modal__box--feedback{display:block}.report-ad{color:#888;display:inline-block;white-space:nowrap;line-height:1.45;margin-left:0.7em}.result--ad--small .report-ad{display:none}.report-ad__start{cursor:pointer}.report-ad__start{border-left:solid 1px #e5e5e5;padding-left:0.7em}.report-ad__link,.report-ad__link:hover,.report-ad__link:visited,.report-ad__link:visited:hover{color:#888}.report-ad__link:hover{text-decoration:underline}.report-ad__link{margin-left:0.4em}.modal .newsletter-modal__heading--success{padding:0;padding-bottom:.5em}.newsletter-modal__disclaimer{padding-top:0.5em;text-align:left}.newsletter-modal__disclaimer__link{color:#aaa;text-decoration:underline}.spread-icon,.woman-icon,.privacy-simplified-icon,.mailbox-icon{height:50px;width:50px;margin:0 auto}.donations-icon,.traffic-icon,.privacy-tips-icon{height:35px;width:35px;margin:0 auto}.spread-icon{background:url("assets/icons/spread.svg");background-size:50px}.woman-icon{background:url("assets/icons/woman.svg");background-size:50px}.privacy-simplified-icon{background:url("assets/icons/privacy-simplified.svg");background-size:50px}.mailbox-icon{background:url("assets/icons/mailbox.svg");background-size:50px}.donations-icon{background:url("assets/icons/donations.svg");background-size:35px}.traffic-icon{background:url("assets/icons/traffic.svg");background-size:35px}.privacy-tips-icon{background:url("assets/icons/privacy-tips.svg");background-size:35px}.showcase__dropdown__list{display:none}.is-showing .showcase__dropdown__list{display:block}.showcase .modal__box,.social .modal__box{-webkit-transition:opacity .4s;-moz-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);width:450px;box-shadow:0 2.5px 20px 0 rgba(0,0,0,0.15);right:-22px}.showcase .modal__body,.social .modal__body{padding:0}@media only screen and (max-width: 1400px){.set-align-center .showcase{display:none}}@media only screen and (max-width: 1079px){.showcase{display:none}}.showcase .showcase__heading{font-size:17px}.showcase .showcase__subheading{font-size:14px}.showcase .eighteen{width:18%;float:left;position:relative;box-sizing:border-box}.showcase .showcase__dropdown-top{padding:11px 19px}.showcase .showcase__dropdown-top .showcase__link,.showcase .showcase__dropdown-top .showcase__link:hover,.showcase .showcase__dropdown-top .showcase__link:focus{color:currentColor;text-decoration:none}.showcase .showcase__dropdown-top .showcase__heading:hover,.showcase .showcase__dropdown-top .showcase__heading:focus{text-decoration:underline currentColor}.showcase .showcase__dropdown-top .showcase__link:nth-child(2){padding-top:3px}.showcase .showcase__dropdown-top .showcase__dropdown__list{padding:15px 0;border-radius:4px;border-radius:var(--default-border-radius);margin-left:4px}.showcase .showcase__dropdown-top .showcase__dropdown__list:hover{background:#f7f7f7}.dark-bg .showcase .showcase__dropdown-top .showcase__dropdown__list:hover{background:#434343}.showcase .showcase__dropdown-top .showcase__dropdown__list:last-child{margin-bottom:0}.showcase .showcase__dropdown-top .showcase__subheading{padding:3px 0 0 0;color:#888}.showcase .showcase__dropdown-bottom{padding:30px 19px;background:#fafafa;border-top:solid 1px #eee}.showcase .showcase__dropdown-bottom .showcase__link,.showcase .showcase__dropdown-bottom .showcase__link:hover,.showcase .showcase__dropdown-bottom .showcase__link:focus{color:currentColor}.showcase .showcase__dropdown-bottom .showcase__dropdown__list{margin-left:4px;padding-bottom:1em}.showcase .showcase__dropdown-bottom .showcase__dropdown__list:last-child{padding-bottom:0}.showcase .showcase__icon{text-align:center}.showcase .showcase__text{padding-top:.7em}@media only screen and (max-width: 864px){.social{display:none}}.social .modal__box{width:130px;min-width:unset;box-sizing:border-box}.social .social__link{margin:15px;height:20px;font-size:14px}.social .social__link__text{display:flex;align-items:center;color:#666}.dark-bg .social .social__link__text{color:#ededed}.social .social__icon{margin-right:10px}.body--home .social{display:inline-block}.set-wide .header__search-wrap,.set-wide .msg--box,.set-wide .msg--info,.set-wide .msg--help,.set-wide .msg--untranslated,.set-wide .msg--warning,.set-wide #error_homepage,.set-wide .msg,.set-wide .content__text,.set-wide .cw,.set-wide .cw--c{max-width:1352px}.set-wide .header--aside__msg{display:none}.set-wide .header__search-wrap{max-width:590px}.set-wide .results--main{float:none}.set-super-wide .header__search-wrap,.set-super-wide .msg--box,.set-super-wide .msg--info,.set-super-wide .msg--help,.set-super-wide .msg--untranslated,.set-super-wide .msg--warning,.set-super-wide #error_homepage,.set-super-wide .msg,.set-super-wide .content__text,.set-super-wide .cw,.set-super-wide .cw--c{max-width:1553px}.set-super-wide .header--aside__msg{display:none}.set-super-wide .header__search-wrap{max-width:590px}.set-super-wide .results--main{float:none}.set-header--fixed body,.set-header--floating body{padding-top:68px}.set-header--fixed.has-zcm body,.set-header--floating.has-zcm body{padding-top:105px}.set-header--fixed.is-mobile.has-zcm body,.set-header--floating.is-mobile.has-zcm body{padding-top:98px}.set-header--fixed .site-wrapper,.set-header--floating .site-wrapper{margin-top:-3px}.set-header--fixed .header-wrap,.set-header--floating .header-wrap{position:fixed;width:100%;left:0;right:0;z-index:105;padding-bottom:0}.set-header--floating .header-wrap,.set-header--floating .metabar{-webkit-transition:top .2s ease-in-out;-webkit-transition-delay:.05s;-moz-transition:top .2s ease-in-out .05s;-o-transition:top .2s ease-in-out .05s;transition:top .2s ease-in-out .05s}.set-header--fixed .metabar--fixed{top:68px}.set-header--fixed.has-zcm .metabar--fixed{top:101px}.set-header--fixed.is-mobile.has-zcm .metabar--fixed{top:97px}.set-header--fixed .header-wrap{top:0}.set-header--hidden .header-wrap{display:none}.set-header--menu.has-zcm .header{min-height:0}.set-header--menu.has-zcm .header-wrap,.set-header--menu.has-zcm .body--serp .header-wrap{padding-top:6px}.set-header--menu.has-zcm .header__search-wrap{display:none}.set-header--menu.has-zcm .header--aside{margin:4px auto;top:-6px;right:4px}.set-header--menu.has-zcm.is-mobile .header--aside{width:4em;right:0;left:auto;margin-top:-1px;display:none}.set-header--menu.has-zcm.is-mobile .header--aside.is-showing{display:block;top:-6px;padding-right:0;z-index:1}.set-header--menu.has-zcm.is-mobile:not(.dark-header) .header--aside{background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, #fff 40%, #fff 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, #fff 40%, #fff 100%)}.set-header--menu.has-zcm.is-mobile .header__button--menu{right:4px;float:right;margin-left:20px;margin-top:5px}.set-header--menu.has-zcm.is-app .header-wrap{border-top:none;border-bottom:0;padding-top:0}.set-header--menu.has-zcm.is-app .header--aside{display:none}.set-header--menu.is-mobile-device .header-wrap{border-top-color:transparent}.set-header--menu.is-mobile-device .site-wrapper:before{display:none}.set-text--small{font-size:72%}.set-text--medium{font-size:81%}.set-text--larger{font-size:99%}.set-text--largest{font-size:112.5%}.set-align-center .cw,.set-align-center .cw--c,.set-align-center .cw--c{margin-left:auto;float:none}.set-align-center .cw .zci__main--detail,.set-align-center .cw--c .zci__main--detail,.set-align-center .cw--c .zci__main--detail{padding-left:0;margin:0 auto}@media only screen and (max-width: 864px){.set-align-center .cw.header,.set-align-center .header.cw--c,.set-align-center .cw--c.header{margin-left:0}}.set-align-center .cw.has-aux,.set-align-center .has-aux.cw--c{margin-left:0}@media only screen and (min-width: 864px){.set-align-center .cw.has-aux,.set-align-center .has-aux.cw--c{width:77%}}@media only screen and (min-width: 971.1px){.set-align-center .cw.has-aux,.set-align-center .has-aux.cw--c{width:67%}}.set-align-center .cw.has-aux .zci__main,.set-align-center .has-aux.cw--c .zci__main{padding-left:0}.set-align-center .serp__results,.set-align-center .metabar__in,.set-align-center .zci__main.has-tiles{padding-left:0}.set-align-center .results--main{float:none}.set-align-center .header__search-wrap,.set-align-center .zcm-wrap--header,.set-align-center .msg--result,.set-align-center .msg--serp,.set-align-center .welcome,.set-align-center .results--main{margin-left:auto;margin-right:auto}.set-align-center.has-right-rail-ads .results{padding-right:60px}.set-align-center .welcome,.set-align-center .zcm-wrap{padding-left:0}.set-align-center .header--aside__msg{display:none}.set-themes{display:flex;flex:1;flex-direction:row;justify-content:space-between;flex-wrap:wrap;padding:0 0 4px 0}.set-themes .set-theme__check,.set-themes .set-theme__inp{display:none}.set-themes .set-themes__wrapper{flex-basis:47%;display:flex;flex-direction:column;text-align:center}.set-themes .set-themes__wrapper .set-theme__label{cursor:pointer}.set-themes .set-theme{width:70%;padding:15%;border:1px solid rgba(150,150,150,0.3);border-radius:4px;margin:5px 0;position:relative;cursor:pointer;display:flex;justify-content:center;flex-direction:column;background:#fff}.set-themes .set-theme:hover{opacity:0.9}.set-themes .set-theme.is-checked{border:1px solid rgba(150,150,150,0.6)}.set-themes .set-theme.is-checked .set-theme__check{display:flex;position:absolute;right:-3px;bottom:-5px;width:16px;height:16px;border-radius:8px;color:#fff;background:#66abff;font-size:10px;justify-content:center;align-items:center;pointer-events:none;flex-direction:column;z-index:10}.set-themes .set-theme.is-checked+.set-theme__label{font-weight:bold}.set-themes .set-theme [class^="set-theme__color-"]{content:"";height:4px;overflow:hidden;margin:2px 0;border-radius:4px;width:100%}.set-themes .set-theme .set-theme__color-2{width:75%}.logo_homepage--it{background-image:url("/assets/logos/initech/logo_homepage.png")}.svg .logo_homepage--it{background-image:url("/assets/logos/initech/logo_homepage.svg")}@media only screen and (max-height: 425px){.logo_homepage--it{background-image:url("/assets/logos/initech/logo_homepage_mobile.png")}.svg .logo_homepage--it{background-image:url("/assets/logos/initech/logo_homepage_mobile.svg")}}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-ms-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dppx){.logo_homepage--it{background-image:url("/assets/logos/initech/logo_homepage.retina.png")}}@media only screen and (-webkit-min-device-pixel-ratio: 2) and (max-width: 425px), only screen and (-moz-min-device-pixel-ratio: 2) and (max-width: 425px), only screen and (min--moz-device-pixel-ratio: 2) and (max-width: 425px), only screen and (-ms-min-device-pixel-ratio: 2) and (max-width: 425px), only screen and (min-device-pixel-ratio: 2) and (max-width: 425px), only screen and (min-resolution: 192dppx) and (max-width: 425px){.logo_homepage--it{background-image:url("/assets/logos/initech/logo_homepage_small.retina.png")}}@media only screen and (-webkit-min-device-pixel-ratio: 2) and (max-height: 425px), only screen and (-moz-min-device-pixel-ratio: 2) and (max-height: 425px), only screen and (min--moz-device-pixel-ratio: 2) and (max-height: 425px), only screen and (-ms-min-device-pixel-ratio: 2) and (max-height: 425px), only screen and (min-device-pixel-ratio: 2) and (max-height: 425px), only screen and (min-resolution: 192dppx) and (max-height: 425px){.logo_homepage--it{background-image:url("/assets/logos/initech/logo_homepage_mobile.retina.png")}}.logo_homepage--it.header__logo{width:60px}.logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage.normal.png")}.svg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage.normal.svg")}.dark-bg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage.alt.png")}.svg.dark-bg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage.alt.svg")}@media only screen and (max-width: 425px){.logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_small.normal.png")}.svg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_small.normal.svg")}.dark-bg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_small.alt.png")}.svg.dark-bg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_small.alt.svg")}}@media only screen and (max-height: 425px){.logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_mobile.normal.png")}.svg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_mobile.normal.svg")}.dark-bg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_mobile.alt.png")}.svg.dark-bg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_mobile.alt.svg")}}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-ms-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dppx){.logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage.normal.retina.png")}.dark-bg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage.alt.retina.png")}}@media only screen and (-webkit-min-device-pixel-ratio: 2) and (max-width: 425px), only screen and (-moz-min-device-pixel-ratio: 2) and (max-width: 425px), only screen and (min--moz-device-pixel-ratio: 2) and (max-width: 425px), only screen and (-ms-min-device-pixel-ratio: 2) and (max-width: 425px), only screen and (min-device-pixel-ratio: 2) and (max-width: 425px), only screen and (min-resolution: 192dppx) and (max-width: 425px){.logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_small.normal.retina.png")}.dark-bg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_small.alt.retina.png")}}@media only screen and (-webkit-min-device-pixel-ratio: 2) and (max-height: 425px), only screen and (-moz-min-device-pixel-ratio: 2) and (max-height: 425px), only screen and (min--moz-device-pixel-ratio: 2) and (max-height: 425px), only screen and (-ms-min-device-pixel-ratio: 2) and (max-height: 425px), only screen and (min-device-pixel-ratio: 2) and (max-height: 425px), only screen and (min-resolution: 192dppx) and (max-height: 425px){.logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_mobile.normal.retina.png")}.dark-bg .logo_homepage--resetthenet{background-image:url("/assets/logos/resetthenet/logo_homepage_mobile.alt.retina.png")}}.is-open{display:block}.is-closed,.is-hidden{display:none !important}.is-invisible{visibility:hidden !important}.no-js .no-js__hide{display:none !important}.cw,.cw--c{position:relative;padding:0 7px;max-width:1270px;margin-left:0;margin-right:auto}.cw--c{margin-left:auto}@media only screen and (max-height: 455px) and (orientation: portrait){.displayable-atb-banner .cw--c{top:-2em}}.content__internal{padding-top:1em}img{max-width:100%}.site-wrapper{width:100%;overflow:hidden}.content-wrap{margin:0 auto;position:relative}.text-center,.text-mid{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.r-block{display:block}.r-inline{display:inline}.r-inline-block,.r-iblock{display:inline-block}.r-valign--top{vertical-align:top}.r-valign--mid{vertical-align:middle}.r-valign--bottom{vertical-align:bottom}.r-border-box,html{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.r-content-box,.r-grid-pad{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.whole,.half,.third,.twothird,.twothirds,.quarter,.threequarter,.threequarters,.sixth,.eighth,.ninety,.eighty,.seventy,.sixty,.fifty,.forty,.thirty,.twenty,.ten{float:left;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.whole{width:100%}.half,.fifty{width:50%}.third{width:33.3%}.twothird,.twothirds{width:66.6%}.quarter{width:25%}.threequarter,.threequarters{width:75%}.sixth{width:16.6%}.eighth{width:12.5%}.ninety{width:90%}.eighty{width:80%}.seventy{width:70%}.sixty{width:60%}.forty{width:40%}.thirty{width:30%}.twenty{width:20%}.ten{width:10%}.gw{margin-left:-1em;letter-spacing:-0.31em}.g{padding-left:1em;display:inline-block;vertical-align:top;letter-spacing:normal;float:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.gw--h{margin-left:-0.5em}.gw--h .g{padding-left:0.5em}.block-mid{margin-left:auto;margin-right:auto;display:block;float:none}.pull-left,.fl,.float--left{float:left}.pull-right,.fr,.float--right{float:right}.pull-none,.killfloat{float:none}.clear,.r-clear{clear:both}.hide,.r-hide{display:none}.hide--important,#state_hidden,#iframe_hidden{display:none !important}.allcaps{text-transform:uppercase}.clearfix:after,.fix:after,.group:after,.row:after,.gw:after,.media:after,.acp--bang:after{content:"";display:block;clear:both}@media only screen and (min-width: 1079px){.hide--screen-l{display:none}.show--screen-l,.r-block--screen-l{display:block}.block-mid--screen-l{margin-left:auto;margin-right:auto;display:block;float:none}.pull-left--screen-l,.fl--screen-l{float:left}.pull-right--screen-l,.fr--screen-l{float:right}.pull-none--screen-l,.killfloat--screen-l{float:none}.whole--screen-l{width:100%}.ninety--screen-l{width:90%}.eighty--screen-l{width:80%}.seventy--screen-l{width:70%}.sixty--screen-l{width:60%}.half--screen-l,.fifty--screen-l{width:50%}.forty--screen-l{width:40%}.thirty--screen-l{width:30%}.quarter--screen-l{width:25%}.twenty--screen-l{width:20%}.ten--screen-l{width:10%}}@media only screen and (min-width: 1440px){.hide--screen-xl{display:none}.show--screen-xl,.r-block--screen-xl{display:block}.block-mid--screen-xl{margin-left:auto;margin-right:auto;display:block;float:none}.pull-left--screen-xl,.fl--screen-xl{float:left}.pull-right--screen-xl,.fr--screen-xl{float:right}.pull-none--screen-xl,.killfloat--screen-xl{float:none}.whole--screen-xl{width:100%}.ninety--screen-xl{width:90%}.eighty--screen-xl{width:80%}.seventy--screen-xl{width:70%}.sixty--screen-xl{width:60%}.half--screen-xl,.fifty--screen-xl{width:50%}.forty--screen-xl{width:40%}.thirty--screen-xl{width:30%}.quarter--screen-xl{width:25%}.twenty--screen-xl{width:20%}.ten--screen-xl{width:10%}}@media only screen and (max-width: 864px){.port-half,.half--screen-m{width:50%;float:left;clear:none}.block-mid--screen-m{margin-left:auto;margin-right:auto;display:block;float:none}.port-hide,.hide--screen-m{display:none}.port-block,.show--screen-m,.r-block--screen-m{display:block}.port-clear,.clear--screen-m,.r-clear--screen-m{clear:both}.port-killfloat,.port-pull-none,.port-float--none,.pull-none--screen-m,.killfloat--screen-m{float:none}.whole--screen-m{width:100%}.ninety--screen-m{width:90%}.eighty--screen-m{width:80%}.seventy--screen-m{width:70%}.sixty--screen-m{width:60%}.half--screen-m,.fifty--screen-m{width:50%}.forty--screen-m{width:40%}.thirty--screen-m{width:30%}.quarter--screen-m{width:25%}.twenty--screen-m{width:20%}.ten--screen-m{width:10%}}@media only screen and (max-width: 590px){html{min-width:initial}.whole,.half,.third,.twothird,.twothirds,.quarter,.threequarter,.threequarters,.sixth,.eighth,.ninety,.eighty,.seventy,.sixty,.fifty,.forty,.thirty,.twenty,.ten{width:100%;margin:0 auto}img.half,img.third,img.twothird,img.quarter,img.threequarter,img.sixth{width:auto}.palm-half,.half--screen-s{width:50%;float:left;clear:none}.block-mid--screen-s{margin-left:auto;margin-right:auto;display:block;float:none}.palm-hide,.hide--screen-s{display:none}.palm-block,.show--screen-s,.r-block--screen-s{display:block}.palm-clear,.clear--screen-s,.r-clear--screen-s{clear:both}.palm-killfloat,.palm-pull-none,.palm-float--none,.killfloat-s,.pull-none--screen-s{float:none}.whole--screen-s{width:100%}.ninety--screen-s{width:90%}.eighty--screen-s{width:80%}.seventy--screen-s{width:70%}.sixty--screen-s{width:60%}.half--screen-s,.fifty--screen-s{width:50%}.forty--screen-s{width:40%}.thirty--screen-s{width:30%}.quarter--screen-s{width:25%}.twenty--screen-s{width:20%}.ten--screen-s{width:10%}}@media only screen and (max-width: 425px){.half--screen-xs{width:50%;float:left;clear:none}.hide--screen-xs{display:none}.show--screen-xs,.r-block--screen-xs{display:block}.clear--screen-xs,.r-clear--screen-xs{clear:both}.killfloat-xs,.pull-none--screen-xs{float:none}.whole--screen-xs{width:100%}.ninety--screen-xs{width:90%}.eighty--screen-xs{width:80%}.seventy--screen-xs{width:70%}.sixty--screen-xs{width:60%}.half--screen-xs,.fifty--screen-xs{width:50%}.forty--screen-xs{width:40%}.thirty--creen-xs{width:30%}.quarter--screen-xs{width:25%}.twenty--screen-xs{width:20%}.ten--screen-xs{width:10%}}.tile--cat .tile__content a,.tile--cat .tile__content br{display:none}.zci-wrap{padding:0 !important}#error_homepage{text-align:center;font-weight:bold;display:none}#bottom_spacing2{padding-bottom:180px}.has-footer #bottom_spacing2{padding-bottom:0} diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/EA0FF5EF19D49AC6F4A9506EE4BB3F6540B8206A b/home/.surf/cache/WebKitCache/Version 16/Blobs/EA0FF5EF19D49AC6F4A9506EE4BB3F6540B8206A new file mode 100644 index 0000000..58edc2a --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/EA0FF5EF19D49AC6F4A9506EE4BB3F6540B8206A @@ -0,0 +1 @@ +
              ((TOP))
              [$1418]
              [$243]
              [$244]
              [$246]
              [$247]
              [$248]
              [$243]
              [$731]
              [$20198]
              [$20199]
              [$1191]
              [$253]
              [$16866]
              \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/EB60C50623D4AD3C1A5806C7B01E5BAC0C3A082D b/home/.surf/cache/WebKitCache/Version 16/Blobs/EB60C50623D4AD3C1A5806C7B01E5BAC0C3A082D new file mode 100644 index 0000000..04fa70c --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/EB60C50623D4AD3C1A5806C7B01E5BAC0C3A082D @@ -0,0 +1,17 @@ +(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_github_webgl-globe_dist_js_main_js"],{23198(){/*! For license information please see main.js.LICENSE.txt */ (()=>{var a={804(a,b,c){"use strict";var d=c(191),e=c(516),f=c(458),g=c(981);(a.exports=function(a,b){var c,f,h,i,l;return arguments.length<2||"string"!=typeof a?(i=b,b=a,a=null):i=arguments[2],null==a?(c=h=!0,f=!1):(c=g.call(a,"c"),f=g.call(a,"e"),h=g.call(a,"w")),l={value:b,configurable:c,enumerable:f,writable:h},i?d(e(i),l):l}).gs=function(a,b,c){var h,i,l,m;return"string"!=typeof a?(l=c,c=b,b=a,a=null):l=arguments[3],null==b?b=void 0:f(b)?null==c?c=void 0:f(c)||(l=c,c=void 0):(l=b,b=c=void 0),null==a?(h=!0,i=!1):(h=g.call(a,"c"),i=g.call(a,"e")),m={get:b,set:c,configurable:h,enumerable:i},l?d(e(l),m):m}},430(a){"use strict";a.exports=function(){}},191(a,b,c){"use strict";a.exports=c(560)()?Object.assign:c(346)},560(a){"use strict";a.exports=function(){var a,b=Object.assign;return"function"==typeof b&&(b(a={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),a.foo+a.bar+a.trzy==="razdwatrzy")}},346(a,b,c){"use strict";var d=c(103),e=c(745),f=Math.max;a.exports=function(a,b){var c,g,h,i=f(arguments.length,2);for(a=Object(e(a)),h=function(d){try{a[d]=b[d]}catch(e){c||(c=e)}},g=1;g -1}},370(a,b,c){"use strict";var d,e,f,g,h,i,l,m=c(804),n=c(290),o=Function.prototype.apply,p=Function.prototype.call,r=Object.create,s=Object.defineProperty,t=Object.defineProperties,u=Object.prototype.hasOwnProperty,v={configurable:!0,enumerable:!1,writable:!0};e=function(a,b){var c,e;return n(b),e=this,d.call(this,a,c=function(){f.call(e,a,c),o.call(b,this,arguments)}),c.__eeOnceListener__=b,this},h={on:d=function(a,b){var c;return n(b),u.call(this,"__ee__")?c=this.__ee__:(c=v.value=r(null),s(this,"__ee__",v),v.value=null),c[a]?"object"==typeof c[a]?c[a].push(b):c[a]=[c[a],b]:c[a]=b,this},once:e,off:f=function(a,b){var c,d,e,f;if(n(b),!u.call(this,"__ee__")||!(c=this.__ee__)[a])return this;if("object"==typeof(d=c[a]))for(f=0;e=d[f];++f)e!==b&&e.__eeOnceListener__!==b||(2===d.length?c[a]=d[f?0:1]:d.splice(f,1));else d!==b&&d.__eeOnceListener__!==b||delete c[a];return this},emit:g=function(a){var b,c,d,e,f;if(u.call(this,"__ee__")&&(e=this.__ee__[a])){if("object"==typeof e){for(c=arguments.length,f=Array(c-1),b=1;b{var b=a&&a.__esModule?()=>a.default:()=>a;return c.d(b,{a:b}),b},c.d=(a,b)=>{for(var d in b)c.o(b,d)&&!c.o(a,d)&&Object.defineProperty(a,d,{enumerable:!0,get:b[d]})},c.o=(a,b)=>Object.prototype.hasOwnProperty.call(a,b),(()=>{"use strict";let a=1001,b=1003,d=1006,e="300 es";class A{addEventListener(a,b){void 0===this._listeners&&(this._listeners={});let c=this._listeners;void 0===c[a]&&(c[a]=[]),-1===c[a].indexOf(b)&&c[a].push(b)}hasEventListener(a,b){if(void 0===this._listeners)return!1;let c=this._listeners;return void 0!==c[a]&& -1!==c[a].indexOf(b)}removeEventListener(a,b){if(void 0===this._listeners)return;let c=this._listeners[a];if(void 0!==c){let d=c.indexOf(b);-1!==d&&c.splice(d,1)}}dispatchEvent(a){if(void 0===this._listeners)return;let b=this._listeners[a.type];if(void 0!==b){a.target=this;let c=b.slice(0);for(let d=0,e=c.length;d>8&255]+f[a>>16&255]+f[a>>24&255]+"-"+f[255&b]+f[b>>8&255]+"-"+f[b>>16&15|64]+f[b>>24&255]+"-"+f[63&c|128]+f[c>>8&255]+"-"+f[c>>16&255]+f[c>>24&255]+f[255&d]+f[d>>8&255]+f[d>>16&255]+f[d>>24&255]).toUpperCase()}function m(a,b,c){return Math.max(b,Math.min(c,a))}function n(a,b,c){return(1-c)*a+c*b}function o(a){return 0==(a&a-1)&&0!==a}function p(a){return Math.pow(2,Math.floor(Math.log(a)/Math.LN2))}class O{constructor(a=0,b=0){this.x=a,this.y=b}get width(){return this.x}set width(a){this.x=a}get height(){return this.y}set height(a){this.y=a}set(a,b){return this.x=a,this.y=b,this}setScalar(a){return this.x=a,this.y=a,this}setX(a){return this.x=a,this}setY(a){return this.y=a,this}setComponent(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a)}return this}getComponent(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a)}}clone(){return new this.constructor(this.x,this.y)}copy(a){return this.x=a.x,this.y=a.y,this}add(a,b){return void 0!==b?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b)):(this.x+=a.x,this.y+=a.y,this)}addScalar(a){return this.x+=a,this.y+=a,this}addVectors(a,b){return this.x=a.x+b.x,this.y=a.y+b.y,this}addScaledVector(a,b){return this.x+=a.x*b,this.y+=a.y*b,this}sub(a,b){return void 0!==b?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b)):(this.x-=a.x,this.y-=a.y,this)}subScalar(a){return this.x-=a,this.y-=a,this}subVectors(a,b){return this.x=a.x-b.x,this.y=a.y-b.y,this}multiply(a){return this.x*=a.x,this.y*=a.y,this}multiplyScalar(a){return this.x*=a,this.y*=a,this}divide(a){return this.x/=a.x,this.y/=a.y,this}divideScalar(a){return this.multiplyScalar(1/a)}applyMatrix3(a){let b=this.x,c=this.y,d=a.elements;return this.x=d[0]*b+d[3]*c+d[6],this.y=d[1]*b+d[4]*c+d[7],this}min(a){return this.x=Math.min(this.x,a.x),this.y=Math.min(this.y,a.y),this}max(a){return this.x=Math.max(this.x,a.x),this.y=Math.max(this.y,a.y),this}clamp(a,b){return this.x=Math.max(a.x,Math.min(b.x,this.x)),this.y=Math.max(a.y,Math.min(b.y,this.y)),this}clampScalar(a,b){return this.x=Math.max(a,Math.min(b,this.x)),this.y=Math.max(a,Math.min(b,this.y)),this}clampLength(a,b){let c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(a){return this.x*a.x+this.y*a.y}cross(a){return this.x*a.y-this.y*a.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(a){return Math.sqrt(this.distanceToSquared(a))}distanceToSquared(a){let b=this.x-a.x,c=this.y-a.y;return b*b+c*c}manhattanDistanceTo(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)}setLength(a){return this.normalize().multiplyScalar(a)}lerp(a,b){return this.x+=(a.x-this.x)*b,this.y+=(a.y-this.y)*b,this}lerpVectors(a,b,c){return this.x=a.x+(b.x-a.x)*c,this.y=a.y+(b.y-a.y)*c,this}equals(a){return a.x===this.x&&a.y===this.y}fromArray(a,b=0){return this.x=a[b],this.y=a[b+1],this}toArray(a=[],b=0){return a[b]=this.x,a[b+1]=this.y,a}fromBufferAttribute(a,b,c){return void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=a.getX(b),this.y=a.getY(b),this}rotateAround(a,b){let c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;return this.x=e*c-f*d+a.x,this.y=e*d+f*c+a.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}O.prototype.isVector2=!0;class B{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(a,b,c,d,e,f,g,h,i){let l=this.elements;return l[0]=a,l[1]=d,l[2]=g,l[3]=b,l[4]=e,l[5]=h,l[6]=c,l[7]=f,l[8]=i,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(a){let b=this.elements,c=a.elements;return b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3],b[4]=c[4],b[5]=c[5],b[6]=c[6],b[7]=c[7],b[8]=c[8],this}extractBasis(a,b,c){return a.setFromMatrix3Column(this,0),b.setFromMatrix3Column(this,1),c.setFromMatrix3Column(this,2),this}setFromMatrix4(a){let b=a.elements;return this.set(b[0],b[4],b[8],b[1],b[5],b[9],b[2],b[6],b[10]),this}multiply(a){return this.multiplyMatrices(this,a)}premultiply(a){return this.multiplyMatrices(a,this)}multiplyMatrices(a,b){let c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[3],h=c[6],i=c[1],l=c[4],m=c[7],n=c[2],o=c[5],p=c[8],r=d[0],s=d[3],t=d[6],u=d[1],v=d[4],w=d[7],x=d[2],y=d[5],z=d[8];return e[0]=f*r+g*u+h*x,e[3]=f*s+g*v+h*y,e[6]=f*t+g*w+h*z,e[1]=i*r+l*u+m*x,e[4]=i*s+l*v+m*y,e[7]=i*t+l*w+m*z,e[2]=n*r+o*u+p*x,e[5]=n*s+o*v+p*y,e[8]=n*t+o*w+p*z,this}multiplyScalar(a){let b=this.elements;return b[0]*=a,b[3]*=a,b[6]*=a,b[1]*=a,b[4]*=a,b[7]*=a,b[2]*=a,b[5]*=a,b[8]*=a,this}determinant(){let a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],i=a[7],l=a[8];return b*f*l-b*g*i-c*e*l+c*g*h+d*e*i-d*f*h}invert(){let a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],i=a[7],l=a[8],m=l*f-g*i,n=g*h-l*e,o=i*e-f*h,p=b*m+c*n+d*o;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);let r=1/p;return a[0]=m*r,a[1]=(d*i-l*c)*r,a[2]=(g*c-d*f)*r,a[3]=n*r,a[4]=(l*b-d*h)*r,a[5]=(d*e-g*b)*r,a[6]=o*r,a[7]=(c*h-i*b)*r,a[8]=(f*b-c*e)*r,this}transpose(){let a,b=this.elements;return a=b[1],b[1]=b[3],b[3]=a,a=b[2],b[2]=b[6],b[6]=a,a=b[5],b[5]=b[7],b[7]=a,this}getNormalMatrix(a){return this.setFromMatrix4(a).invert().transpose()}transposeIntoArray(a){let b=this.elements;return a[0]=b[0],a[1]=b[3],a[2]=b[6],a[3]=b[1],a[4]=b[4],a[5]=b[7],a[6]=b[2],a[7]=b[5],a[8]=b[8],this}setUvTransform(a,b,c,d,e,f,g){let h=Math.cos(e),i=Math.sin(e);return this.set(c*h,c*i,-c*(h*f+i*g)+f+a,-d*i,d*h,-d*(-i*f+h*g)+g+b,0,0,1),this}scale(a,b){let c=this.elements;return c[0]*=a,c[3]*=a,c[6]*=a,c[1]*=b,c[4]*=b,c[7]*=b,this}rotate(a){let b=Math.cos(a),c=Math.sin(a),d=this.elements,e=d[0],f=d[3],g=d[6],h=d[1],i=d[4],l=d[7];return d[0]=b*e+c*h,d[3]=b*f+c*i,d[6]=b*g+c*l,d[1]=-c*e+b*h,d[4]=-c*f+b*i,d[7]=-c*g+b*l,this}translate(a,b){let c=this.elements;return c[0]+=a*c[2],c[3]+=a*c[5],c[6]+=a*c[8],c[1]+=b*c[2],c[4]+=b*c[5],c[7]+=b*c[8],this}equals(a){let b=this.elements,c=a.elements;for(let d=0;d<9;d++)if(b[d]!==c[d])return!1;return!0}fromArray(a,b=0){for(let c=0;c<9;c++)this.elements[c]=a[c+b];return this}toArray(a=[],b=0){let c=this.elements;return a[b]=c[0],a[b+1]=c[1],a[b+2]=c[2],a[b+3]=c[3],a[b+4]=c[4],a[b+5]=c[5],a[b+6]=c[6],a[b+7]=c[7],a[b+8]=c[8],a}clone(){return(new this.constructor).fromArray(this.elements)}}let r;B.prototype.isMatrix3=!0;class H{static getDataURL(a){if(/^data:/i.test(a.src)||"undefined"==typeof HTMLCanvasElement)return a.src;let b;if(a instanceof HTMLCanvasElement)b=a;else{void 0===r&&(r=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),r.width=a.width,r.height=a.height;let c=r.getContext("2d");a instanceof ImageData?c.putImageData(a,0,0):c.drawImage(a,0,0,a.width,a.height),b=r}return b.width>2048||b.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",a),b.toDataURL("image/jpeg",.6)):b.toDataURL("image/png")}}let s=0;class G extends A{constructor(a=G.DEFAULT_IMAGE,b=G.DEFAULT_MAPPING,c=1001,d=1001,e=1006,f=1008,g=1023,h=1009,i=1,m=3e3){super(),Object.defineProperty(this,"id",{value:s++}),this.uuid=l(),this.name="",this.image=a,this.mipmaps=[],this.mapping=b,this.wrapS=c,this.wrapT=d,this.magFilter=e,this.minFilter=f,this.anisotropy=i,this.format=g,this.internalFormat=null,this.type=h,this.offset=new O(0,0),this.repeat=new O(1,1),this.center=new O(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new B,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=m,this.version=0,this.onUpdate=null}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(a){return this.name=a.name,this.image=a.image,this.mipmaps=a.mipmaps.slice(0),this.mapping=a.mapping,this.wrapS=a.wrapS,this.wrapT=a.wrapT,this.magFilter=a.magFilter,this.minFilter=a.minFilter,this.anisotropy=a.anisotropy,this.format=a.format,this.internalFormat=a.internalFormat,this.type=a.type,this.offset.copy(a.offset),this.repeat.copy(a.repeat),this.center.copy(a.center),this.rotation=a.rotation,this.matrixAutoUpdate=a.matrixAutoUpdate,this.matrix.copy(a.matrix),this.generateMipmaps=a.generateMipmaps,this.premultiplyAlpha=a.premultiplyAlpha,this.flipY=a.flipY,this.unpackAlignment=a.unpackAlignment,this.encoding=a.encoding,this}toJSON(a){let b=void 0===a||"string"==typeof a;if(!b&& void 0!==a.textures[this.uuid])return a.textures[this.uuid];let c={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){let d=this.image;if(void 0===d.uuid&&(d.uuid=l()),!b&& void 0===a.images[d.uuid]){let e;if(Array.isArray(d)){e=[];for(let f=0,g=d.length;f1)switch(this.wrapS){case 1e3:b.x=b.x-Math.floor(b.x);break;case a:b.x=b.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(b.x)%2)?b.x=Math.ceil(b.x)-b.x:b.x=b.x-Math.floor(b.x)}if(b.y<0||b.y>1)switch(this.wrapT){case 1e3:b.y=b.y-Math.floor(b.y);break;case a:b.y=b.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(b.y)%2)?b.y=Math.ceil(b.y)-b.y:b.y=b.y-Math.floor(b.y)}return this.flipY&&(b.y=1-b.y),b}set needsUpdate(a){!0===a&&this.version++}}function t(a){return"undefined"!=typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&a instanceof ImageBitmap?H.getDataURL(a):a.data?{data:Array.prototype.slice.call(a.data),width:a.width,height:a.height,type:a.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}G.DEFAULT_IMAGE=void 0,G.DEFAULT_MAPPING=300,G.prototype.isTexture=!0;class k{constructor(a=0,b=0,c=0,d=1){this.x=a,this.y=b,this.z=c,this.w=d}get width(){return this.z}set width(a){this.z=a}get height(){return this.w}set height(a){this.w=a}set(a,b,c,d){return this.x=a,this.y=b,this.z=c,this.w=d,this}setScalar(a){return this.x=a,this.y=a,this.z=a,this.w=a,this}setX(a){return this.x=a,this}setY(a){return this.y=a,this}setZ(a){return this.z=a,this}setW(a){return this.w=a,this}setComponent(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a)}return this}getComponent(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(a){return this.x=a.x,this.y=a.y,this.z=a.z,this.w=void 0!==a.w?a.w:1,this}add(a,b){return void 0!==b?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b)):(this.x+=a.x,this.y+=a.y,this.z+=a.z,this.w+=a.w,this)}addScalar(a){return this.x+=a,this.y+=a,this.z+=a,this.w+=a,this}addVectors(a,b){return this.x=a.x+b.x,this.y=a.y+b.y,this.z=a.z+b.z,this.w=a.w+b.w,this}addScaledVector(a,b){return this.x+=a.x*b,this.y+=a.y*b,this.z+=a.z*b,this.w+=a.w*b,this}sub(a,b){return void 0!==b?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b)):(this.x-=a.x,this.y-=a.y,this.z-=a.z,this.w-=a.w,this)}subScalar(a){return this.x-=a,this.y-=a,this.z-=a,this.w-=a,this}subVectors(a,b){return this.x=a.x-b.x,this.y=a.y-b.y,this.z=a.z-b.z,this.w=a.w-b.w,this}multiply(a){return this.x*=a.x,this.y*=a.y,this.z*=a.z,this.w*=a.w,this}multiplyScalar(a){return this.x*=a,this.y*=a,this.z*=a,this.w*=a,this}applyMatrix4(a){let b=this.x,c=this.y,d=this.z,e=this.w,f=a.elements;return this.x=f[0]*b+f[4]*c+f[8]*d+f[12]*e,this.y=f[1]*b+f[5]*c+f[9]*d+f[13]*e,this.z=f[2]*b+f[6]*c+f[10]*d+f[14]*e,this.w=f[3]*b+f[7]*c+f[11]*d+f[15]*e,this}divideScalar(a){return this.multiplyScalar(1/a)}setAxisAngleFromQuaternion(a){this.w=2*Math.acos(a.w);let b=Math.sqrt(1-a.w*a.w);return b<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b),this}setAxisAngleFromRotationMatrix(a){let b,c,d,e,f=a.elements,g=f[0],h=f[4],i=f[8],l=f[1],m=f[5],n=f[9],o=f[2],p=f[6],r=f[10];if(.01>Math.abs(h-l)&&.01>Math.abs(i-o)&&.01>Math.abs(n-p)){if(.1>Math.abs(h+l)&&.1>Math.abs(i+o)&&.1>Math.abs(n+p)&&.1>Math.abs(g+m+r-3))return this.set(1,0,0,0),this;b=Math.PI;let s=(g+1)/2,t=(m+1)/2,u=(r+1)/2,v=(h+l)/4,w=(i+o)/4,x=(n+p)/4;return s>t&&s>u?s<.01?(c=0,d=.707106781,e=.707106781):(c=Math.sqrt(s),d=v/c,e=w/c):t>u?t<.01?(c=.707106781,d=0,e=.707106781):(d=Math.sqrt(t),c=v/d,e=x/d):u<.01?(c=.707106781,d=.707106781,e=0):(e=Math.sqrt(u),c=w/e,d=x/e),this.set(c,d,e,b),this}let y=Math.sqrt((p-n)*(p-n)+(i-o)*(i-o)+(l-h)*(l-h));return .001>Math.abs(y)&&(y=1),this.x=(p-n)/y,this.y=(i-o)/y,this.z=(l-h)/y,this.w=Math.acos((g+m+r-1)/2),this}min(a){return this.x=Math.min(this.x,a.x),this.y=Math.min(this.y,a.y),this.z=Math.min(this.z,a.z),this.w=Math.min(this.w,a.w),this}max(a){return this.x=Math.max(this.x,a.x),this.y=Math.max(this.y,a.y),this.z=Math.max(this.z,a.z),this.w=Math.max(this.w,a.w),this}clamp(a,b){return this.x=Math.max(a.x,Math.min(b.x,this.x)),this.y=Math.max(a.y,Math.min(b.y,this.y)),this.z=Math.max(a.z,Math.min(b.z,this.z)),this.w=Math.max(a.w,Math.min(b.w,this.w)),this}clampScalar(a,b){return this.x=Math.max(a,Math.min(b,this.x)),this.y=Math.max(a,Math.min(b,this.y)),this.z=Math.max(a,Math.min(b,this.z)),this.w=Math.max(a,Math.min(b,this.w)),this}clampLength(a,b){let c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(a){return this.normalize().multiplyScalar(a)}lerp(a,b){return this.x+=(a.x-this.x)*b,this.y+=(a.y-this.y)*b,this.z+=(a.z-this.z)*b,this.w+=(a.w-this.w)*b,this}lerpVectors(a,b,c){return this.x=a.x+(b.x-a.x)*c,this.y=a.y+(b.y-a.y)*c,this.z=a.z+(b.z-a.z)*c,this.w=a.w+(b.w-a.w)*c,this}equals(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w}fromArray(a,b=0){return this.x=a[b],this.y=a[b+1],this.z=a[b+2],this.w=a[b+3],this}toArray(a=[],b=0){return a[b]=this.x,a[b+1]=this.y,a[b+2]=this.z,a[b+3]=this.w,a}fromBufferAttribute(a,b,c){return void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=a.getX(b),this.y=a.getY(b),this.z=a.getZ(b),this.w=a.getW(b),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}}k.prototype.isVector4=!0;class W extends A{constructor(a,b,c){super(),this.width=a,this.height=b,this.depth=1,this.scissor=new k(0,0,a,b),this.scissorTest=!1,this.viewport=new k(0,0,a,b),c=c||{},this.texture=new G(void 0,c.mapping,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy,c.encoding),this.texture.image={},this.texture.image.width=a,this.texture.image.height=b,this.texture.image.depth=1,this.texture.generateMipmaps=void 0!==c.generateMipmaps&&c.generateMipmaps,this.texture.minFilter=void 0!==c.minFilter?c.minFilter:d,this.depthBuffer=void 0===c.depthBuffer||c.depthBuffer,this.stencilBuffer=void 0!==c.stencilBuffer&&c.stencilBuffer,this.depthTexture=void 0!==c.depthTexture?c.depthTexture:null}setTexture(a){a.image={width:this.width,height:this.height,depth:this.depth},this.texture=a}setSize(a,b,c=1){this.width===a&&this.height===b&&this.depth===c||(this.width=a,this.height=b,this.depth=c,this.texture.image.width=a,this.texture.image.height=b,this.texture.image.depth=c,this.dispose()),this.viewport.set(0,0,a,b),this.scissor.set(0,0,a,b)}clone(){return(new this.constructor).copy(this)}copy(a){return this.width=a.width,this.height=a.height,this.depth=a.depth,this.viewport.copy(a.viewport),this.texture=a.texture.clone(),this.depthBuffer=a.depthBuffer,this.stencilBuffer=a.stencilBuffer,this.depthTexture=a.depthTexture,this}dispose(){this.dispatchEvent({type:"dispose"})}}W.prototype.isWebGLRenderTarget=!0,(class extends W{constructor(a,b,c){super(a,b,c),this.samples=4}copy(a){return super.copy.call(this,a),this.samples=a.samples,this}}).prototype.isWebGLMultisampleRenderTarget=!0;class j{constructor(a=0,b=0,c=0,d=1){this._x=a,this._y=b,this._z=c,this._w=d}static slerp(a,b,c,d){return console.warn("THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead."),c.slerpQuaternions(a,b,d)}static slerpFlat(a,b,c,d,e,f,g){let h=c[d+0],i=c[d+1],l=c[d+2],m=c[d+3],n=e[f+0],o=e[f+1],p=e[f+2],r=e[f+3];if(0===g)return a[b+0]=h,a[b+1]=i,a[b+2]=l,void(a[b+3]=m);if(1===g)return a[b+0]=n,a[b+1]=o,a[b+2]=p,void(a[b+3]=r);if(m!==r||h!==n||i!==o||l!==p){let s=1-g,t=h*n+i*o+l*p+m*r,u=t>=0?1:-1,v=1-t*t;if(v>Number.EPSILON){let w=Math.sqrt(v),x=Math.atan2(w,t*u);s=Math.sin(s*x)/w,g=Math.sin(g*x)/w}let y=g*u;if(h=h*s+n*y,i=i*s+o*y,l=l*s+p*y,m=m*s+r*y,s===1-g){let z=1/Math.sqrt(h*h+i*i+l*l+m*m);h*=z,i*=z,l*=z,m*=z}}a[b]=h,a[b+1]=i,a[b+2]=l,a[b+3]=m}static multiplyQuaternionsFlat(a,b,c,d,e,f){let g=c[d],h=c[d+1],i=c[d+2],l=c[d+3],m=e[f],n=e[f+1],o=e[f+2],p=e[f+3];return a[b]=g*p+l*m+h*o-i*n,a[b+1]=h*p+l*n+i*m-g*o,a[b+2]=i*p+l*o+g*n-h*m,a[b+3]=l*p-g*m-h*n-i*o,a}get x(){return this._x}set x(a){this._x=a,this._onChangeCallback()}get y(){return this._y}set y(a){this._y=a,this._onChangeCallback()}get z(){return this._z}set z(a){this._z=a,this._onChangeCallback()}get w(){return this._w}set w(a){this._w=a,this._onChangeCallback()}set(a,b,c,d){return this._x=a,this._y=b,this._z=c,this._w=d,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(a){return this._x=a.x,this._y=a.y,this._z=a.z,this._w=a.w,this._onChangeCallback(),this}setFromEuler(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");let c=a._x,d=a._y,e=a._z,f=a._order,g=Math.cos,h=Math.sin,i=g(c/2),l=g(d/2),m=g(e/2),n=h(c/2),o=h(d/2),p=h(e/2);switch(f){case"XYZ":this._x=n*l*m+i*o*p,this._y=i*o*m-n*l*p,this._z=i*l*p+n*o*m,this._w=i*l*m-n*o*p;break;case"YXZ":this._x=n*l*m+i*o*p,this._y=i*o*m-n*l*p,this._z=i*l*p-n*o*m,this._w=i*l*m+n*o*p;break;case"ZXY":this._x=n*l*m-i*o*p,this._y=i*o*m+n*l*p,this._z=i*l*p+n*o*m,this._w=i*l*m-n*o*p;break;case"ZYX":this._x=n*l*m-i*o*p,this._y=i*o*m+n*l*p,this._z=i*l*p-n*o*m,this._w=i*l*m+n*o*p;break;case"YZX":this._x=n*l*m+i*o*p,this._y=i*o*m+n*l*p,this._z=i*l*p-n*o*m,this._w=i*l*m-n*o*p;break;case"XZY":this._x=n*l*m-i*o*p,this._y=i*o*m-n*l*p,this._z=i*l*p+n*o*m,this._w=i*l*m+n*o*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+f)}return!1!==b&&this._onChangeCallback(),this}setFromAxisAngle(a,b){let c=b/2,d=Math.sin(c);return this._x=a.x*d,this._y=a.y*d,this._z=a.z*d,this._w=Math.cos(c),this._onChangeCallback(),this}setFromRotationMatrix(a){let b=a.elements,c=b[0],d=b[4],e=b[8],f=b[1],g=b[5],h=b[9],i=b[2],l=b[6],m=b[10],n=c+g+m;if(n>0){let o=.5/Math.sqrt(n+1);this._w=.25/o,this._x=(l-h)*o,this._y=(e-i)*o,this._z=(f-d)*o}else if(c>g&&c>m){let p=2*Math.sqrt(1+c-g-m);this._w=(l-h)/p,this._x=.25*p,this._y=(d+f)/p,this._z=(e+i)/p}else if(g>m){let r=2*Math.sqrt(1+g-c-m);this._w=(e-i)/r,this._x=(d+f)/r,this._y=.25*r,this._z=(h+l)/r}else{let s=2*Math.sqrt(1+m-c-g);this._w=(f-d)/s,this._x=(e+i)/s,this._y=(h+l)/s,this._z=.25*s}return this._onChangeCallback(),this}setFromUnitVectors(a,b){let c=a.dot(b)+1;return cMath.abs(a.z)?(this._x=-a.y,this._y=a.x,this._z=0,this._w=c):(this._x=0,this._y=-a.z,this._z=a.y,this._w=c)):(this._x=a.y*b.z-a.z*b.y,this._y=a.z*b.x-a.x*b.z,this._z=a.x*b.y-a.y*b.x,this._w=c),this.normalize()}angleTo(a){return 2*Math.acos(Math.abs(m(this.dot(a),-1,1)))}rotateTowards(a,b){let c=this.angleTo(a);if(0===c)return this;let d=Math.min(1,b/c);return this.slerp(a,d),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let a=this.length();return 0===a?(this._x=0,this._y=0,this._z=0,this._w=1):(a=1/a,this._x=this._x*a,this._y=this._y*a,this._z=this._z*a,this._w=this._w*a),this._onChangeCallback(),this}multiply(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)}premultiply(a){return this.multiplyQuaternions(a,this)}multiplyQuaternions(a,b){let c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,i=b._z,l=b._w;return this._x=c*l+f*g+d*i-e*h,this._y=d*l+f*h+e*g-c*i,this._z=e*l+f*i+c*h-d*g,this._w=f*l-c*g-d*h-e*i,this._onChangeCallback(),this}slerp(a,b){if(0===b)return this;if(1===b)return this.copy(a);let c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;if(g<0?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a),g>=1)return this._w=f,this._x=c,this._y=d,this._z=e,this;let h=1-g*g;if(h<=Number.EPSILON){let i=1-b;return this._w=i*f+b*this._w,this._x=i*c+b*this._x,this._y=i*d+b*this._y,this._z=i*e+b*this._z,this.normalize(),this._onChangeCallback(),this}let l=Math.sqrt(h),m=Math.atan2(l,g),n=Math.sin((1-b)*m)/l,o=Math.sin(b*m)/l;return this._w=f*n+this._w*o,this._x=c*n+this._x*o,this._y=d*n+this._y*o,this._z=e*n+this._z*o,this._onChangeCallback(),this}slerpQuaternions(a,b,c){this.copy(a).slerp(b,c)}equals(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w}fromArray(a,b=0){return this._x=a[b],this._y=a[b+1],this._z=a[b+2],this._w=a[b+3],this._onChangeCallback(),this}toArray(a=[],b=0){return a[b]=this._x,a[b+1]=this._y,a[b+2]=this._z,a[b+3]=this._w,a}fromBufferAttribute(a,b){return this._x=a.getX(b),this._y=a.getY(b),this._z=a.getZ(b),this._w=a.getW(b),this}_onChange(a){return this._onChangeCallback=a,this}_onChangeCallback(){}}j.prototype.isQuaternion=!0;class q{constructor(a=0,b=0,c=0){this.x=a,this.y=b,this.z=c}set(a,b,c){return void 0===c&&(c=this.z),this.x=a,this.y=b,this.z=c,this}setScalar(a){return this.x=a,this.y=a,this.z=a,this}setX(a){return this.x=a,this}setY(a){return this.y=a,this}setZ(a){return this.z=a,this}setComponent(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a)}return this}getComponent(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(a){return this.x=a.x,this.y=a.y,this.z=a.z,this}add(a,b){return void 0!==b?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b)):(this.x+=a.x,this.y+=a.y,this.z+=a.z,this)}addScalar(a){return this.x+=a,this.y+=a,this.z+=a,this}addVectors(a,b){return this.x=a.x+b.x,this.y=a.y+b.y,this.z=a.z+b.z,this}addScaledVector(a,b){return this.x+=a.x*b,this.y+=a.y*b,this.z+=a.z*b,this}sub(a,b){return void 0!==b?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b)):(this.x-=a.x,this.y-=a.y,this.z-=a.z,this)}subScalar(a){return this.x-=a,this.y-=a,this.z-=a,this}subVectors(a,b){return this.x=a.x-b.x,this.y=a.y-b.y,this.z=a.z-b.z,this}multiply(a,b){return void 0!==b?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b)):(this.x*=a.x,this.y*=a.y,this.z*=a.z,this)}multiplyScalar(a){return this.x*=a,this.y*=a,this.z*=a,this}multiplyVectors(a,b){return this.x=a.x*b.x,this.y=a.y*b.y,this.z=a.z*b.z,this}applyEuler(a){return a&&a.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(v.setFromEuler(a))}applyAxisAngle(a,b){return this.applyQuaternion(v.setFromAxisAngle(a,b))}applyMatrix3(a){let b=this.x,c=this.y,d=this.z,e=a.elements;return this.x=e[0]*b+e[3]*c+e[6]*d,this.y=e[1]*b+e[4]*c+e[7]*d,this.z=e[2]*b+e[5]*c+e[8]*d,this}applyNormalMatrix(a){return this.applyMatrix3(a).normalize()}applyMatrix4(a){let b=this.x,c=this.y,d=this.z,e=a.elements,f=1/(e[3]*b+e[7]*c+e[11]*d+e[15]);return this.x=(e[0]*b+e[4]*c+e[8]*d+e[12])*f,this.y=(e[1]*b+e[5]*c+e[9]*d+e[13])*f,this.z=(e[2]*b+e[6]*c+e[10]*d+e[14])*f,this}applyQuaternion(a){let b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z,h=a.w,i=h*b+f*d-g*c,l=h*c+g*b-e*d,m=h*d+e*c-f*b,n=-e*b-f*c-g*d;return this.x=i*h+ -(n*e)+ -(l*g)- -(m*f),this.y=l*h+ -(n*f)+ -(m*e)- -(i*g),this.z=m*h+ -(n*g)+ -(i*f)- -(l*e),this}project(a){return this.applyMatrix4(a.matrixWorldInverse).applyMatrix4(a.projectionMatrix)}unproject(a){return this.applyMatrix4(a.projectionMatrixInverse).applyMatrix4(a.matrixWorld)}transformDirection(a){let b=this.x,c=this.y,d=this.z,e=a.elements;return this.x=e[0]*b+e[4]*c+e[8]*d,this.y=e[1]*b+e[5]*c+e[9]*d,this.z=e[2]*b+e[6]*c+e[10]*d,this.normalize()}divide(a){return this.x/=a.x,this.y/=a.y,this.z/=a.z,this}divideScalar(a){return this.multiplyScalar(1/a)}min(a){return this.x=Math.min(this.x,a.x),this.y=Math.min(this.y,a.y),this.z=Math.min(this.z,a.z),this}max(a){return this.x=Math.max(this.x,a.x),this.y=Math.max(this.y,a.y),this.z=Math.max(this.z,a.z),this}clamp(a,b){return this.x=Math.max(a.x,Math.min(b.x,this.x)),this.y=Math.max(a.y,Math.min(b.y,this.y)),this.z=Math.max(a.z,Math.min(b.z,this.z)),this}clampScalar(a,b){return this.x=Math.max(a,Math.min(b,this.x)),this.y=Math.max(a,Math.min(b,this.y)),this.z=Math.max(a,Math.min(b,this.z)),this}clampLength(a,b){let c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(a){return this.x*a.x+this.y*a.y+this.z*a.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(a){return this.normalize().multiplyScalar(a)}lerp(a,b){return this.x+=(a.x-this.x)*b,this.y+=(a.y-this.y)*b,this.z+=(a.z-this.z)*b,this}lerpVectors(a,b,c){return this.x=a.x+(b.x-a.x)*c,this.y=a.y+(b.y-a.y)*c,this.z=a.z+(b.z-a.z)*c,this}cross(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)}crossVectors(a,b){let c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;return this.x=d*h-e*g,this.y=e*f-c*h,this.z=c*g-d*f,this}projectOnVector(a){let b=a.lengthSq();if(0===b)return this.set(0,0,0);let c=a.dot(this)/b;return this.copy(a).multiplyScalar(c)}projectOnPlane(a){return u.copy(this).projectOnVector(a),this.sub(u)}reflect(a){return this.sub(u.copy(a).multiplyScalar(2*this.dot(a)))}angleTo(a){let b=Math.sqrt(this.lengthSq()*a.lengthSq());if(0===b)return Math.PI/2;let c=this.dot(a)/b;return Math.acos(m(c,-1,1))}distanceTo(a){return Math.sqrt(this.distanceToSquared(a))}distanceToSquared(a){let b=this.x-a.x,c=this.y-a.y,d=this.z-a.z;return b*b+c*c+d*d}manhattanDistanceTo(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)}setFromSpherical(a){return this.setFromSphericalCoords(a.radius,a.phi,a.theta)}setFromSphericalCoords(a,b,c){let d=Math.sin(b)*a;return this.x=d*Math.sin(c),this.y=Math.cos(b)*a,this.z=d*Math.cos(c),this}setFromCylindrical(a){return this.setFromCylindricalCoords(a.radius,a.theta,a.y)}setFromCylindricalCoords(a,b,c){return this.x=a*Math.sin(b),this.y=c,this.z=a*Math.cos(b),this}setFromMatrixPosition(a){let b=a.elements;return this.x=b[12],this.y=b[13],this.z=b[14],this}setFromMatrixScale(a){let b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length(),d=this.setFromMatrixColumn(a,2).length();return this.x=b,this.y=c,this.z=d,this}setFromMatrixColumn(a,b){return this.fromArray(a.elements,4*b)}setFromMatrix3Column(a,b){return this.fromArray(a.elements,3*b)}equals(a){return a.x===this.x&&a.y===this.y&&a.z===this.z}fromArray(a,b=0){return this.x=a[b],this.y=a[b+1],this.z=a[b+2],this}toArray(a=[],b=0){return a[b]=this.x,a[b+1]=this.y,a[b+2]=this.z,a}fromBufferAttribute(a,b,c){return void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=a.getX(b),this.y=a.getY(b),this.z=a.getZ(b),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}q.prototype.isVector3=!0;let u=new q,v=new j;class Z{constructor(a=new q(1/0,1/0,1/0),b=new q(-1/0,-1/0,-1/0)){this.min=a,this.max=b}set(a,b){return this.min.copy(a),this.max.copy(b),this}setFromArray(a){let b=1/0,c=1/0,d=1/0,e=-1/0,f=-1/0,g=-1/0;for(let h=0,i=a.length;he&&(e=l),m>f&&(f=m),n>g&&(g=n)}return this.min.set(b,c,d),this.max.set(e,f,g),this}setFromBufferAttribute(a){let b=1/0,c=1/0,d=1/0,e=-1/0,f=-1/0,g=-1/0;for(let h=0,i=a.count;he&&(e=l),m>f&&(f=m),n>g&&(g=n)}return this.min.set(b,c,d),this.max.set(e,f,g),this}setFromPoints(a){this.makeEmpty();for(let b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z)}containsBox(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z}getParameter(a,b){return void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new q),b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(a){return!(a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z)}intersectsSphere(a){return this.clampPoint(a.center,x),x.distanceToSquared(a.center)<=a.radius*a.radius}intersectsPlane(a){let b,c;return a.normal.x>0?(b=a.normal.x*this.min.x,c=a.normal.x*this.max.x):(b=a.normal.x*this.max.x,c=a.normal.x*this.min.x),a.normal.y>0?(b+=a.normal.y*this.min.y,c+=a.normal.y*this.max.y):(b+=a.normal.y*this.max.y,c+=a.normal.y*this.min.y),a.normal.z>0?(b+=a.normal.z*this.min.z,c+=a.normal.z*this.max.z):(b+=a.normal.z*this.max.z,c+=a.normal.z*this.min.z),b<= -a.constant&&c>= -a.constant}intersectsTriangle(a){if(this.isEmpty())return!1;this.getCenter(J),K.subVectors(this.max,J),z.subVectors(a.a,J),C.subVectors(a.b,J),D.subVectors(a.c,J),E.subVectors(C,z),F.subVectors(D,C),I.subVectors(z,D);let b=[0,-E.z,E.y,0,-F.z,F.y,0,-I.z,I.y,E.z,0,-E.x,F.z,0,-F.x,I.z,0,-I.x,-E.y,E.x,0,-F.y,F.x,0,-I.y,I.x,0];return!!N(b,z,C,D,K)&&!!N(b=[1,0,0,0,1,0,0,0,1],z,C,D,K)&&(L.crossVectors(E,F),N(b=[L.x,L.y,L.z],z,C,D,K))}clampPoint(a,b){return void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new q),b.copy(a).clamp(this.min,this.max)}distanceToPoint(a){return x.copy(a).clamp(this.min,this.max).sub(a).length()}getBoundingSphere(a){return void 0===a&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(a.center),a.radius=.5*this.getSize(x).length(),a}intersect(a){return this.min.max(a.min),this.max.min(a.max),this.isEmpty()&&this.makeEmpty(),this}union(a){return this.min.min(a.min),this.max.max(a.max),this}applyMatrix4(a){return this.isEmpty()||(w[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(a),w[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(a),w[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(a),w[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(a),w[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(a),w[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(a),w[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(a),w[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(a),this.setFromPoints(w)),this}translate(a){return this.min.add(a),this.max.add(a),this}equals(a){return a.min.equals(this.min)&&a.max.equals(this.max)}}Z.prototype.isBox3=!0;let w=[new q,new q,new q,new q,new q,new q,new q,new q],x=new q,y=new Z,z=new q,C=new q,D=new q,E=new q,F=new q,I=new q,J=new q,K=new q,L=new q,M=new q;function N(a,b,c,d,e){for(let f=0,g=a.length-3;f<=g;f+=3){M.fromArray(a,f);let h=e.x*Math.abs(M.x)+e.y*Math.abs(M.y)+e.z*Math.abs(M.z),i=b.dot(M),l=c.dot(M),m=d.dot(M);if(Math.max(-Math.max(i,l,m),Math.min(i,l,m))>h)return!1}return!0}let P=new Z,Q=new q,R=new q,S=new q;class mt{constructor(a=new q,b=-1){this.center=a,this.radius=b}set(a,b){return this.center.copy(a),this.radius=b,this}setFromPoints(a,b){let c=this.center;void 0!==b?c.copy(b):P.setFromPoints(a).getCenter(c);let d=0;for(let e=0,f=a.length;ethis.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center)),b}getBoundingBox(a){return void 0===a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Z),this.isEmpty()?(a.makeEmpty(),a):(a.set(this.center,this.center),a.expandByScalar(this.radius),a)}applyMatrix4(a){return this.center.applyMatrix4(a),this.radius=this.radius*a.getMaxScaleOnAxis(),this}translate(a){return this.center.add(a),this}expandByPoint(a){S.subVectors(a,this.center);let b=S.lengthSq();if(b>this.radius*this.radius){let c=Math.sqrt(b),d=.5*(c-this.radius);this.center.add(S.multiplyScalar(d/c)),this.radius+=d}return this}union(a){return R.subVectors(a.center,this.center).normalize().multiplyScalar(a.radius),this.expandByPoint(Q.copy(a.center).add(R)),this.expandByPoint(Q.copy(a.center).sub(R)),this}equals(a){return a.center.equals(this.center)&&a.radius===this.radius}clone(){return(new this.constructor).copy(this)}}let T=new q,U=new q,V=new q,X=new q,Y=new q,$=new q,_=new q;class bt{constructor(a=new q,b=new q(0,0,-1)){this.origin=a,this.direction=b}set(a,b){return this.origin.copy(a),this.direction.copy(b),this}copy(a){return this.origin.copy(a.origin),this.direction.copy(a.direction),this}at(a,b){return void 0===b&&(console.warn("THREE.Ray: .at() target is now required"),b=new q),b.copy(this.direction).multiplyScalar(a).add(this.origin)}lookAt(a){return this.direction.copy(a).sub(this.origin).normalize(),this}recast(a){return this.origin.copy(this.at(a,T)),this}closestPointToPoint(a,b){void 0===b&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),b=new q),b.subVectors(a,this.origin);let c=b.dot(this.direction);return c<0?b.copy(this.origin):b.copy(this.direction).multiplyScalar(c).add(this.origin)}distanceToPoint(a){return Math.sqrt(this.distanceSqToPoint(a))}distanceSqToPoint(a){let b=T.subVectors(a,this.origin).dot(this.direction);return b<0?this.origin.distanceToSquared(a):(T.copy(this.direction).multiplyScalar(b).add(this.origin),T.distanceToSquared(a))}distanceSqToSegment(a,b,c,d){U.copy(a).add(b).multiplyScalar(.5),V.copy(b).sub(a).normalize(),X.copy(this.origin).sub(U);let e=.5*a.distanceTo(b),f=-this.direction.dot(V),g=X.dot(this.direction),h=-X.dot(V),i=X.lengthSq(),l=Math.abs(1-f*f),m,n,o,p;if(l>0){if(m=f*h-g,n=f*g-h,p=e*l,m>=0){if(n>= -p){if(n<=p){let r=1/l;m*=r,n*=r,o=m*(m+f*n+2*g)+n*(f*m+n+2*h)+i}else o=-(m=Math.max(0,-(f*(n=e)+g)))*m+n*(n+2*h)+i}else o=-(m=Math.max(0,-(f*(n=-e)+g)))*m+n*(n+2*h)+i}else n<= -p?(n=(m=Math.max(0,-(-f*e+g)))>0?-e:Math.min(Math.max(-e,-h),e),o=-m*m+n*(n+2*h)+i):n<=p?(m=0,o=(n=Math.min(Math.max(-e,-h),e))*(n+2*h)+i):(n=(m=Math.max(0,-(f*e+g)))>0?e:Math.min(Math.max(-e,-h),e),o=-m*m+n*(n+2*h)+i)}else n=f>0?-e:e,m=Math.max(0,-(f*n+g)),o=-m*m+n*(n+2*h)+i;return c&&c.copy(this.direction).multiplyScalar(m).add(this.origin),d&&d.copy(V).multiplyScalar(n).add(U),o}intersectSphere(a,b){T.subVectors(a.center,this.origin);let c=T.dot(this.direction),d=T.dot(T)-c*c,e=a.radius*a.radius;if(d>e)return null;let f=Math.sqrt(e-d),g=c-f,h=c+f;return g<0&&h<0?null:g<0?this.at(h,b):this.at(g,b)}intersectsSphere(a){return this.distanceSqToPoint(a.center)<=a.radius*a.radius}distanceToPlane(a){let b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;let c=-(this.origin.dot(a.normal)+a.constant)/b;return c>=0?c:null}intersectPlane(a,b){let c=this.distanceToPlane(a);return null===c?null:this.at(c,b)}intersectsPlane(a){let b=a.distanceToPoint(this.origin);return 0===b||a.normal.dot(this.direction)*b<0}intersectBox(a,b){let c,d,e,f,g,h,i=1/this.direction.x,l=1/this.direction.y,m=1/this.direction.z,n=this.origin;return i>=0?(c=(a.min.x-n.x)*i,d=(a.max.x-n.x)*i):(c=(a.max.x-n.x)*i,d=(a.min.x-n.x)*i),l>=0?(e=(a.min.y-n.y)*l,f=(a.max.y-n.y)*l):(e=(a.max.y-n.y)*l,f=(a.min.y-n.y)*l),c>f||e>d?null:((e>c||c!=c)&&(c=e),(f=0?(g=(a.min.z-n.z)*m,h=(a.max.z-n.z)*m):(g=(a.max.z-n.z)*m,h=(a.min.z-n.z)*m),c>h||g>d?null:((g>c||c!=c)&&(c=g),(h=0?c:d,b)))}intersectsBox(a){return null!==this.intersectBox(a,T)}intersectTriangle(a,b,c,d,e){Y.subVectors(b,a),$.subVectors(c,a),_.crossVectors(Y,$);let f,g=this.direction.dot(_);if(g>0){if(d)return null;f=1}else{if(!(g<0))return null;f=-1,g=-g}X.subVectors(this.origin,a);let h=f*this.direction.dot($.crossVectors(X,$));if(h<0)return null;let i=f*this.direction.dot(Y.cross(X));if(i<0||h+i>g)return null;let l=-f*X.dot(_);return l<0?null:this.at(l/g,e)}applyMatrix4(a){return this.origin.applyMatrix4(a),this.direction.transformDirection(a),this}equals(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Mt{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(a,b,c,d,e,f,g,h,i,l,m,n,o,p,r,s){let t=this.elements;return t[0]=a,t[4]=b,t[8]=c,t[12]=d,t[1]=e,t[5]=f,t[9]=g,t[13]=h,t[2]=i,t[6]=l,t[10]=m,t[14]=n,t[3]=o,t[7]=p,t[11]=r,t[15]=s,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Mt).fromArray(this.elements)}copy(a){let b=this.elements,c=a.elements;return b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3],b[4]=c[4],b[5]=c[5],b[6]=c[6],b[7]=c[7],b[8]=c[8],b[9]=c[9],b[10]=c[10],b[11]=c[11],b[12]=c[12],b[13]=c[13],b[14]=c[14],b[15]=c[15],this}copyPosition(a){let b=this.elements,c=a.elements;return b[12]=c[12],b[13]=c[13],b[14]=c[14],this}setFromMatrix3(a){let b=a.elements;return this.set(b[0],b[3],b[6],0,b[1],b[4],b[7],0,b[2],b[5],b[8],0,0,0,0,1),this}extractBasis(a,b,c){return a.setFromMatrixColumn(this,0),b.setFromMatrixColumn(this,1),c.setFromMatrixColumn(this,2),this}makeBasis(a,b,c){return this.set(a.x,b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1),this}extractRotation(a){let b=this.elements,c=a.elements,d=1/ab.setFromMatrixColumn(a,0).length(),e=1/ab.setFromMatrixColumn(a,1).length(),f=1/ab.setFromMatrixColumn(a,2).length();return b[0]=c[0]*d,b[1]=c[1]*d,b[2]=c[2]*d,b[3]=0,b[4]=c[4]*e,b[5]=c[5]*e,b[6]=c[6]*e,b[7]=0,b[8]=c[8]*f,b[9]=c[9]*f,b[10]=c[10]*f,b[11]=0,b[12]=0,b[13]=0,b[14]=0,b[15]=1,this}makeRotationFromEuler(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");let b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c),g=Math.sin(c),h=Math.cos(d),i=Math.sin(d),l=Math.cos(e),m=Math.sin(e);if("XYZ"===a.order){let n=f*l,o=f*m,p=g*l,r=g*m;b[0]=h*l,b[4]=-h*m,b[8]=i,b[1]=o+p*i,b[5]=n-r*i,b[9]=-g*h,b[2]=r-n*i,b[6]=p+o*i,b[10]=f*h}else if("YXZ"===a.order){let s=h*l,t=h*m,u=i*l,v=i*m;b[0]=s+v*g,b[4]=u*g-t,b[8]=f*i,b[1]=f*m,b[5]=f*l,b[9]=-g,b[2]=t*g-u,b[6]=v+s*g,b[10]=f*h}else if("ZXY"===a.order){let w=h*l,x=h*m,y=i*l,z=i*m;b[0]=w-z*g,b[4]=-f*m,b[8]=y+x*g,b[1]=x+y*g,b[5]=f*l,b[9]=z-w*g,b[2]=-f*i,b[6]=g,b[10]=f*h}else if("ZYX"===a.order){let C=f*l,D=f*m,E=g*l,F=g*m;b[0]=h*l,b[4]=E*i-D,b[8]=C*i+F,b[1]=h*m,b[5]=F*i+C,b[9]=D*i-E,b[2]=-i,b[6]=g*h,b[10]=f*h}else if("YZX"===a.order){let I=f*h,J=f*i,K=g*h,L=g*i;b[0]=h*l,b[4]=L-I*m,b[8]=K*m+J,b[1]=m,b[5]=f*l,b[9]=-g*l,b[2]=-i*l,b[6]=J*m+K,b[10]=I-L*m}else if("XZY"===a.order){let M=f*h,N=f*i,P=g*h,Q=g*i;b[0]=h*l,b[4]=-m,b[8]=i*l,b[1]=M*m+Q,b[5]=f*l,b[9]=N*m-P,b[2]=P*m-N,b[6]=g*l,b[10]=Q*m+M}return b[3]=0,b[7]=0,b[11]=0,b[12]=0,b[13]=0,b[14]=0,b[15]=1,this}makeRotationFromQuaternion(a){return this.compose(ad,a,ae)}lookAt(a,b,c){let d=this.elements;return ah.subVectors(a,b),0===ah.lengthSq()&&(ah.z=1),ah.normalize(),af.crossVectors(c,ah),0===af.lengthSq()&&(1===Math.abs(c.z)?ah.x+=1e-4:ah.z+=1e-4,ah.normalize(),af.crossVectors(c,ah)),af.normalize(),ag.crossVectors(ah,af),d[0]=af.x,d[4]=ag.x,d[8]=ah.x,d[1]=af.y,d[5]=ag.y,d[9]=ah.y,d[2]=af.z,d[6]=ag.z,d[10]=ah.z,this}multiply(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)}premultiply(a){return this.multiplyMatrices(a,this)}multiplyMatrices(a,b){let c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],i=c[12],l=c[1],m=c[5],n=c[9],o=c[13],p=c[2],r=c[6],s=c[10],t=c[14],u=c[3],v=c[7],w=c[11],x=c[15],y=d[0],z=d[4],C=d[8],D=d[12],E=d[1],F=d[5],I=d[9],J=d[13],K=d[2],L=d[6],M=d[10],N=d[14],P=d[3],Q=d[7],R=d[11],S=d[15];return e[0]=f*y+g*E+h*K+i*P,e[4]=f*z+g*F+h*L+i*Q,e[8]=f*C+g*I+h*M+i*R,e[12]=f*D+g*J+h*N+i*S,e[1]=l*y+m*E+n*K+o*P,e[5]=l*z+m*F+n*L+o*Q,e[9]=l*C+m*I+n*M+o*R,e[13]=l*D+m*J+n*N+o*S,e[2]=p*y+r*E+s*K+t*P,e[6]=p*z+r*F+s*L+t*Q,e[10]=p*C+r*I+s*M+t*R,e[14]=p*D+r*J+s*N+t*S,e[3]=u*y+v*E+w*K+x*P,e[7]=u*z+v*F+w*L+x*Q,e[11]=u*C+v*I+w*M+x*R,e[15]=u*D+v*J+w*N+x*S,this}multiplyScalar(a){let b=this.elements;return b[0]*=a,b[4]*=a,b[8]*=a,b[12]*=a,b[1]*=a,b[5]*=a,b[9]*=a,b[13]*=a,b[2]*=a,b[6]*=a,b[10]*=a,b[14]*=a,b[3]*=a,b[7]*=a,b[11]*=a,b[15]*=a,this}determinant(){let a=this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],i=a[13],l=a[2],m=a[6],n=a[10],o=a[14];return a[3]*(+e*h*m-d*i*m-e*g*n+c*i*n+d*g*o-c*h*o)+a[7]*(+b*h*o-b*i*n+e*f*n-d*f*o+d*i*l-e*h*l)+a[11]*(+b*i*m-b*g*o-e*f*m+c*f*o+e*g*l-c*i*l)+a[15]*(-d*g*l-b*h*m+b*g*n+d*f*m-c*f*n+c*h*l)}transpose(){let a=this.elements,b;return b=a[1],a[1]=a[4],a[4]=b,b=a[2],a[2]=a[8],a[8]=b,b=a[6],a[6]=a[9],a[9]=b,b=a[3],a[3]=a[12],a[12]=b,b=a[7],a[7]=a[13],a[13]=b,b=a[11],a[11]=a[14],a[14]=b,this}setPosition(a,b,c){let d=this.elements;return a.isVector3?(d[12]=a.x,d[13]=a.y,d[14]=a.z):(d[12]=a,d[13]=b,d[14]=c),this}invert(){let a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],i=a[7],l=a[8],m=a[9],n=a[10],o=a[11],p=a[12],r=a[13],s=a[14],t=a[15],u=m*s*i-r*n*i+r*h*o-g*s*o-m*h*t+g*n*t,v=p*n*i-l*s*i-p*h*o+f*s*o+l*h*t-f*n*t,w=l*r*i-p*m*i+p*g*o-f*r*o-l*g*t+f*m*t,x=p*m*h-l*r*h-p*g*n+f*r*n+l*g*s-f*m*s,y=b*u+c*v+d*w+e*x;if(0===y)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let z=1/y;return a[0]=u*z,a[1]=(r*n*e-m*s*e-r*d*o+c*s*o+m*d*t-c*n*t)*z,a[2]=(g*s*e-r*h*e+r*d*i-c*s*i-g*d*t+c*h*t)*z,a[3]=(m*h*e-g*n*e-m*d*i+c*n*i+g*d*o-c*h*o)*z,a[4]=v*z,a[5]=(l*s*e-p*n*e+p*d*o-b*s*o-l*d*t+b*n*t)*z,a[6]=(p*h*e-f*s*e-p*d*i+b*s*i+f*d*t-b*h*t)*z,a[7]=(f*n*e-l*h*e+l*d*i-b*n*i-f*d*o+b*h*o)*z,a[8]=w*z,a[9]=(p*m*e-l*r*e-p*c*o+b*r*o+l*c*t-b*m*t)*z,a[10]=(f*r*e-p*g*e+p*c*i-b*r*i-f*c*t+b*g*t)*z,a[11]=(l*g*e-f*m*e-l*c*i+b*m*i+f*c*o-b*g*o)*z,a[12]=x*z,a[13]=(l*r*d-p*m*d+p*c*n-b*r*n-l*c*s+b*m*s)*z,a[14]=(p*g*d-f*r*d-p*c*h+b*r*h+f*c*s-b*g*s)*z,a[15]=(f*m*d-l*g*d+l*c*h-b*m*h-f*c*n+b*g*n)*z,this}scale(a){let b=this.elements,c=a.x,d=a.y,e=a.z;return b[0]*=c,b[4]*=d,b[8]*=e,b[1]*=c,b[5]*=d,b[9]*=e,b[2]*=c,b[6]*=d,b[10]*=e,b[3]*=c,b[7]*=d,b[11]*=e,this}getMaxScaleOnAxis(){let a=this.elements,b=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],c=a[4]*a[4]+a[5]*a[5]+a[6]*a[6],d=a[8]*a[8]+a[9]*a[9]+a[10]*a[10];return Math.sqrt(Math.max(b,c,d))}makeTranslation(a,b,c){return this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1),this}makeRotationX(a){let b=Math.cos(a),c=Math.sin(a);return this.set(1,0,0,0,0,b,-c,0,0,c,b,0,0,0,0,1),this}makeRotationY(a){let b=Math.cos(a),c=Math.sin(a);return this.set(b,0,c,0,0,1,0,0,-c,0,b,0,0,0,0,1),this}makeRotationZ(a){let b=Math.cos(a),c=Math.sin(a);return this.set(b,-c,0,0,c,b,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(a,b){let c=Math.cos(b),d=Math.sin(b),e=1-c,f=a.x,g=a.y,h=a.z,i=e*f,l=e*g;return this.set(i*f+c,i*g-d*h,i*h+d*g,0,i*g+d*h,l*g+c,l*h-d*f,0,i*h-d*g,l*h+d*f,e*h*h+c,0,0,0,0,1),this}makeScale(a,b,c){return this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1),this}makeShear(a,b,c){return this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1),this}compose(a,b,c){let d=this.elements,e=b._x,f=b._y,g=b._z,h=b._w,i=e+e,l=f+f,m=g+g,n=e*i,o=e*l,p=e*m,r=f*l,s=f*m,t=g*m,u=h*i,v=h*l,w=h*m,x=c.x,y=c.y,z=c.z;return d[0]=(1-(r+t))*x,d[1]=(o+w)*x,d[2]=(p-v)*x,d[3]=0,d[4]=(o-w)*y,d[5]=(1-(n+t))*y,d[6]=(s+u)*y,d[7]=0,d[8]=(p+v)*z,d[9]=(s-u)*z,d[10]=(1-(n+r))*z,d[11]=0,d[12]=a.x,d[13]=a.y,d[14]=a.z,d[15]=1,this}decompose(a,b,c){let d=this.elements,e=ab.set(d[0],d[1],d[2]).length(),f=ab.set(d[4],d[5],d[6]).length(),g=ab.set(d[8],d[9],d[10]).length();0>this.determinant()&&(e=-e),a.x=d[12],a.y=d[13],a.z=d[14],ac.copy(this);let h=1/e,i=1/f,l=1/g;return ac.elements[0]*=h,ac.elements[1]*=h,ac.elements[2]*=h,ac.elements[4]*=i,ac.elements[5]*=i,ac.elements[6]*=i,ac.elements[8]*=l,ac.elements[9]*=l,ac.elements[10]*=l,b.setFromRotationMatrix(ac),c.x=e,c.y=f,c.z=g,this}makePerspective(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");let g=this.elements;return g[0]=2*e/(b-a),g[4]=0,g[8]=(b+a)/(b-a),g[12]=0,g[1]=0,g[5]=2*e/(c-d),g[9]=(c+d)/(c-d),g[13]=0,g[2]=0,g[6]=0,g[10]=-(f+e)/(f-e),g[14]=-2*f*e/(f-e),g[3]=0,g[7]=0,g[11]=-1,g[15]=0,this}makeOrthographic(a,b,c,d,e,f){let g=this.elements,h=1/(b-a),i=1/(c-d),l=1/(f-e);return g[0]=2*h,g[4]=0,g[8]=0,g[12]=-((b+a)*h),g[1]=0,g[5]=2*i,g[9]=0,g[13]=-((c+d)*i),g[2]=0,g[6]=0,g[10]=-2*l,g[14]=-((f+e)*l),g[3]=0,g[7]=0,g[11]=0,g[15]=1,this}equals(a){let b=this.elements,c=a.elements;for(let d=0;d<16;d++)if(b[d]!==c[d])return!1;return!0}fromArray(a,b=0){for(let c=0;c<16;c++)this.elements[c]=a[c+b];return this}toArray(a=[],b=0){let c=this.elements;return a[b]=c[0],a[b+1]=c[1],a[b+2]=c[2],a[b+3]=c[3],a[b+4]=c[4],a[b+5]=c[5],a[b+6]=c[6],a[b+7]=c[7],a[b+8]=c[8],a[b+9]=c[9],a[b+10]=c[10],a[b+11]=c[11],a[b+12]=c[12],a[b+13]=c[13],a[b+14]=c[14],a[b+15]=c[15],a}}Mt.prototype.isMatrix4=!0;let ab=new q,ac=new Mt,ad=new q(0,0,0),ae=new q(1,1,1),af=new q,ag=new q,ah=new q,ai=new Mt,aj=new j;class Dt{constructor(a=0,b=0,c=0,d=Dt.DefaultOrder){this._x=a,this._y=b,this._z=c,this._order=d}get x(){return this._x}set x(a){this._x=a,this._onChangeCallback()}get y(){return this._y}set y(a){this._y=a,this._onChangeCallback()}get z(){return this._z}set z(a){this._z=a,this._onChangeCallback()}get order(){return this._order}set order(a){this._order=a,this._onChangeCallback()}set(a,b,c,d){return this._x=a,this._y=b,this._z=c,this._order=d||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(a){return this._x=a._x,this._y=a._y,this._z=a._z,this._order=a._order,this._onChangeCallback(),this}setFromRotationMatrix(a,b,c){let d=a.elements,e=d[0],f=d[4],g=d[8],h=d[1],i=d[5],l=d[9],n=d[2],o=d[6],p=d[10];switch(b=b||this._order){case"XYZ":this._y=Math.asin(m(g,-1,1)),.9999999>Math.abs(g)?(this._x=Math.atan2(-l,p),this._z=Math.atan2(-f,e)):(this._x=Math.atan2(o,i),this._z=0);break;case"YXZ":this._x=Math.asin(-m(l,-1,1)),.9999999>Math.abs(l)?(this._y=Math.atan2(g,p),this._z=Math.atan2(h,i)):(this._y=Math.atan2(-n,e),this._z=0);break;case"ZXY":this._x=Math.asin(m(o,-1,1)),.9999999>Math.abs(o)?(this._y=Math.atan2(-n,p),this._z=Math.atan2(-f,i)):(this._y=0,this._z=Math.atan2(h,e));break;case"ZYX":this._y=Math.asin(-m(n,-1,1)),.9999999>Math.abs(n)?(this._x=Math.atan2(o,p),this._z=Math.atan2(h,e)):(this._x=0,this._z=Math.atan2(-f,i));break;case"YZX":this._z=Math.asin(m(h,-1,1)),.9999999>Math.abs(h)?(this._x=Math.atan2(-l,i),this._y=Math.atan2(-n,e)):(this._x=0,this._y=Math.atan2(g,p));break;case"XZY":this._z=Math.asin(-m(f,-1,1)),.9999999>Math.abs(f)?(this._x=Math.atan2(o,i),this._y=Math.atan2(g,e)):(this._x=Math.atan2(-l,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+b)}return this._order=b,!1!==c&&this._onChangeCallback(),this}setFromQuaternion(a,b,c){return ai.makeRotationFromQuaternion(a),this.setFromRotationMatrix(ai,b,c)}setFromVector3(a,b){return this.set(a.x,a.y,a.z,b||this._order)}reorder(a){return aj.setFromEuler(this),this.setFromQuaternion(aj,a)}equals(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order}fromArray(a){return this._x=a[0],this._y=a[1],this._z=a[2],void 0!==a[3]&&(this._order=a[3]),this._onChangeCallback(),this}toArray(a=[],b=0){return a[b]=this._x,a[b+1]=this._y,a[b+2]=this._z,a[b+3]=this._order,a}toVector3(a){return a?a.set(this._x,this._y,this._z):new q(this._x,this._y,this._z)}_onChange(a){return this._onChangeCallback=a,this}_onChangeCallback(){}}Dt.prototype.isEuler=!0,Dt.DefaultOrder="XYZ",Dt.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];class Nt{constructor(){this.mask=1}set(a){this.mask=1<1){for(let b=0;b1){for(let b=0;b0){d.children=[];for(let p=0;p0){d.animations=[];for(let r=0;r0&&(c.geometries=t),u.length>0&&(c.materials=u),v.length>0&&(c.textures=v),w.length>0&&(c.images=w),x.length>0&&(c.shapes=x),y.length>0&&(c.skeletons=y),z.length>0&&(c.animations=z)}return c.object=d,c;function C(a){let b=[];for(let c in a){let d=a[c];delete d.metadata,b.push(d)}return b}}clone(a){return(new this.constructor).copy(this,a)}copy(a,b=!0){if(this.name=a.name,this.up.copy(a.up),this.position.copy(a.position),this.rotation.order=a.rotation.order,this.quaternion.copy(a.quaternion),this.scale.copy(a.scale),this.matrix.copy(a.matrix),this.matrixWorld.copy(a.matrixWorld),this.matrixAutoUpdate=a.matrixAutoUpdate,this.matrixWorldNeedsUpdate=a.matrixWorldNeedsUpdate,this.layers.mask=a.layers.mask,this.visible=a.visible,this.castShadow=a.castShadow,this.receiveShadow=a.receiveShadow,this.frustumCulled=a.frustumCulled,this.renderOrder=a.renderOrder,this.userData=JSON.parse(JSON.stringify(a.userData)),!0===b)for(let c=0;c1?null:b.copy(c).multiplyScalar(e).add(a.start)}intersectsLine(a){let b=this.distanceToPoint(a.start),c=this.distanceToPoint(a.end);return b<0&&c>0||c<0&&b>0}intersectsBox(a){return a.intersectsPlane(this)}intersectsSphere(a){return a.intersectsPlane(this)}coplanarPoint(a){return void 0===a&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),a=new q),a.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(a,b){let c=b||aB.getNormalMatrix(a),d=this.coplanarPoint(az).applyMatrix4(a),e=this.normal.applyMatrix3(c).normalize();return this.constant=-d.dot(e),this}translate(a){return this.constant-=a.dot(this.normal),this}equals(a){return a.normal.equals(this.normal)&&a.constant===this.constant}clone(){return(new this.constructor).copy(this)}}Kt.prototype.isPlane=!0;let aC=new q,aD=new q,aE=new q,aF=new q,aG=new q,aH=new q,aI=new q,aJ=new q,aK=new q,aL=new q;class he{constructor(a=new q,b=new q,c=new q){this.a=a,this.b=b,this.c=c}static getNormal(a,b,c,d){void 0===d&&(console.warn("THREE.Triangle: .getNormal() target is now required"),d=new q),d.subVectors(c,b),aC.subVectors(a,b),d.cross(aC);let e=d.lengthSq();return e>0?d.multiplyScalar(1/Math.sqrt(e)):d.set(0,0,0)}static getBarycoord(a,b,c,d,e){aC.subVectors(d,b),aD.subVectors(c,b),aE.subVectors(a,b);let f=aC.dot(aC),g=aC.dot(aD),h=aC.dot(aE),i=aD.dot(aD),l=aD.dot(aE),m=f*i-g*g;if(void 0===e&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),e=new q),0===m)return e.set(-2,-1,-1);let n=1/m,o=(i*h-g*l)*n,p=(f*l-g*h)*n;return e.set(1-o-p,p,o)}static containsPoint(a,b,c,d){return this.getBarycoord(a,b,c,d,aF),aF.x>=0&&aF.y>=0&&aF.x+aF.y<=1}static getUV(a,b,c,d,e,f,g,h){return this.getBarycoord(a,b,c,d,aF),h.set(0,0),h.addScaledVector(e,aF.x),h.addScaledVector(f,aF.y),h.addScaledVector(g,aF.z),h}static isFrontFacing(a,b,c,d){return aC.subVectors(c,b),aD.subVectors(a,b),0>aC.cross(aD).dot(d)}set(a,b,c){return this.a.copy(a),this.b.copy(b),this.c.copy(c),this}setFromPointsAndIndices(a,b,c,d){return this.a.copy(a[b]),this.b.copy(a[c]),this.c.copy(a[d]),this}clone(){return(new this.constructor).copy(this)}copy(a){return this.a.copy(a.a),this.b.copy(a.b),this.c.copy(a.c),this}getArea(){return aC.subVectors(this.c,this.b),aD.subVectors(this.a,this.b),.5*aC.cross(aD).length()}getMidpoint(a){return void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new q),a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(a){return he.getNormal(this.a,this.b,this.c,a)}getPlane(a){return void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new Kt),a.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(a,b){return he.getBarycoord(a,this.a,this.b,this.c,b)}getUV(a,b,c,d,e){return he.getUV(a,this.a,this.b,this.c,b,c,d,e)}containsPoint(a){return he.containsPoint(a,this.a,this.b,this.c)}isFrontFacing(a){return he.isFrontFacing(this.a,this.b,this.c,a)}intersectsBox(a){return a.intersectsTriangle(this)}closestPointToPoint(a,b){void 0===b&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),b=new q);let c=this.a,d=this.b,e=this.c,f,g;aG.subVectors(d,c),aH.subVectors(e,c),aJ.subVectors(a,c);let h=aG.dot(aJ),i=aH.dot(aJ);if(h<=0&&i<=0)return b.copy(c);aK.subVectors(a,d);let l=aG.dot(aK),m=aH.dot(aK);if(l>=0&&m<=l)return b.copy(d);let n=h*m-l*i;if(n<=0&&h>=0&&l<=0)return f=h/(h-l),b.copy(c).addScaledVector(aG,f);aL.subVectors(a,e);let o=aG.dot(aL),p=aH.dot(aL);if(p>=0&&o<=p)return b.copy(e);let r=o*i-h*p;if(r<=0&&i>=0&&p<=0)return g=i/(i-p),b.copy(c).addScaledVector(aH,g);let s=l*p-o*m;if(s<=0&&m-l>=0&&o-p>=0)return aI.subVectors(e,d),g=(m-l)/(m-l+(o-p)),b.copy(d).addScaledVector(aI,g);let t=1/(s+r+n);return f=r*t,g=n*t,b.copy(c).addScaledVector(aG,f).addScaledVector(aH,g)}equals(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}}let aM=0;function aN(){Object.defineProperty(this,"id",{value:aM++}),this.uuid=l(),this.name="",this.type="Material",this.fog=!0,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0}aN.prototype=Object.assign(Object.create(A.prototype),{constructor:aN,isMaterial:!0,onBuild:function(){},onBeforeCompile:function(){},customProgramCacheKey:function(){return this.onBeforeCompile.toString()},setValues:function(a){if(void 0!==a)for(let b in a){let c=a[b];if(void 0===c){console.warn("THREE.Material: '"+b+"' parameter is undefined.");continue}if("shading"===b){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===c;continue}let d=this[b];void 0!==d?d&&d.isColor?d.set(c):d&&d.isVector3&&c&&c.isVector3?d.copy(c):this[b]=c:console.warn("THREE."+this.type+": '"+b+"' is not a property of this material.")}},toJSON:function(a){let b=void 0===a||"string"==typeof a;b&&(a={textures:{},images:{}});let c={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function d(a){let b=[];for(let c in a){let d=a[c];delete d.metadata,b.push(d)}return b}if(c.uuid=this.uuid,c.type=this.type,""!==this.name&&(c.name=this.name),this.color&&this.color.isColor&&(c.color=this.color.getHex()),void 0!==this.roughness&&(c.roughness=this.roughness),void 0!==this.metalness&&(c.metalness=this.metalness),this.sheen&&this.sheen.isColor&&(c.sheen=this.sheen.getHex()),this.emissive&&this.emissive.isColor&&(c.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(c.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(c.specular=this.specular.getHex()),void 0!==this.shininess&&(c.shininess=this.shininess),void 0!==this.clearcoat&&(c.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(c.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(c.clearcoatMap=this.clearcoatMap.toJSON(a).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(c.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(a).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(c.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(a).uuid,c.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(c.map=this.map.toJSON(a).uuid),this.matcap&&this.matcap.isTexture&&(c.matcap=this.matcap.toJSON(a).uuid),this.alphaMap&&this.alphaMap.isTexture&&(c.alphaMap=this.alphaMap.toJSON(a).uuid),this.lightMap&&this.lightMap.isTexture&&(c.lightMap=this.lightMap.toJSON(a).uuid,c.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(c.aoMap=this.aoMap.toJSON(a).uuid,c.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(c.bumpMap=this.bumpMap.toJSON(a).uuid,c.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(c.normalMap=this.normalMap.toJSON(a).uuid,c.normalMapType=this.normalMapType,c.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(c.displacementMap=this.displacementMap.toJSON(a).uuid,c.displacementScale=this.displacementScale,c.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(c.roughnessMap=this.roughnessMap.toJSON(a).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(c.metalnessMap=this.metalnessMap.toJSON(a).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(c.emissiveMap=this.emissiveMap.toJSON(a).uuid),this.specularMap&&this.specularMap.isTexture&&(c.specularMap=this.specularMap.toJSON(a).uuid),this.envMap&&this.envMap.isTexture&&(c.envMap=this.envMap.toJSON(a).uuid,void 0!==this.combine&&(c.combine=this.combine)),void 0!==this.envMapIntensity&&(c.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(c.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(c.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(c.gradientMap=this.gradientMap.toJSON(a).uuid),void 0!==this.size&&(c.size=this.size),null!==this.shadowSide&&(c.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(c.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(c.blending=this.blending),0!==this.side&&(c.side=this.side),this.vertexColors&&(c.vertexColors=!0),this.opacity<1&&(c.opacity=this.opacity),!0===this.transparent&&(c.transparent=this.transparent),c.depthFunc=this.depthFunc,c.depthTest=this.depthTest,c.depthWrite=this.depthWrite,c.colorWrite=this.colorWrite,c.stencilWrite=this.stencilWrite,c.stencilWriteMask=this.stencilWriteMask,c.stencilFunc=this.stencilFunc,c.stencilRef=this.stencilRef,c.stencilFuncMask=this.stencilFuncMask,c.stencilFail=this.stencilFail,c.stencilZFail=this.stencilZFail,c.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(c.rotation=this.rotation),!0===this.polygonOffset&&(c.polygonOffset=!0),0!==this.polygonOffsetFactor&&(c.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(c.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(c.linewidth=this.linewidth),void 0!==this.dashSize&&(c.dashSize=this.dashSize),void 0!==this.gapSize&&(c.gapSize=this.gapSize),void 0!==this.scale&&(c.scale=this.scale),!0===this.dithering&&(c.dithering=!0),this.alphaTest>0&&(c.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(c.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(c.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(c.wireframe=this.wireframe),this.wireframeLinewidth>1&&(c.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(c.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(c.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(c.morphTargets=!0),!0===this.morphNormals&&(c.morphNormals=!0),!0===this.skinning&&(c.skinning=!0),!0===this.flatShading&&(c.flatShading=this.flatShading),!1===this.visible&&(c.visible=!1),!1===this.toneMapped&&(c.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(c.userData=this.userData),b){let e=d(a.textures),f=d(a.images);e.length>0&&(c.textures=e),f.length>0&&(c.images=f)}return c},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.name=a.name,this.fog=a.fog,this.blending=a.blending,this.side=a.side,this.vertexColors=a.vertexColors,this.opacity=a.opacity,this.transparent=a.transparent,this.blendSrc=a.blendSrc,this.blendDst=a.blendDst,this.blendEquation=a.blendEquation,this.blendSrcAlpha=a.blendSrcAlpha,this.blendDstAlpha=a.blendDstAlpha,this.blendEquationAlpha=a.blendEquationAlpha,this.depthFunc=a.depthFunc,this.depthTest=a.depthTest,this.depthWrite=a.depthWrite,this.stencilWriteMask=a.stencilWriteMask,this.stencilFunc=a.stencilFunc,this.stencilRef=a.stencilRef,this.stencilFuncMask=a.stencilFuncMask,this.stencilFail=a.stencilFail,this.stencilZFail=a.stencilZFail,this.stencilZPass=a.stencilZPass,this.stencilWrite=a.stencilWrite;let b=a.clippingPlanes,c=null;if(null!==b){let d=b.length;c=Array(d);for(let e=0;e!==d;++e)c[e]=b[e].clone()}return this.clippingPlanes=c,this.clipIntersection=a.clipIntersection,this.clipShadows=a.clipShadows,this.shadowSide=a.shadowSide,this.colorWrite=a.colorWrite,this.precision=a.precision,this.polygonOffset=a.polygonOffset,this.polygonOffsetFactor=a.polygonOffsetFactor,this.polygonOffsetUnits=a.polygonOffsetUnits,this.dithering=a.dithering,this.alphaTest=a.alphaTest,this.alphaToCoverage=a.alphaToCoverage,this.premultipliedAlpha=a.premultipliedAlpha,this.visible=a.visible,this.toneMapped=a.toneMapped,this.userData=JSON.parse(JSON.stringify(a.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(aN.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});let aO={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},aP={h:0,s:0,l:0},aQ={h:0,s:0,l:0};function aR(a,b,c){return c<0&&(c+=1),c>1&&(c-=1),c<1/6?a+6*(b-a)*c:c<.5?b:c<2/3?a+6*(b-a)*(2/3-c):a}function aS(a){return a<.04045?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}function aT(a){return a<.0031308?12.92*a:1.055*Math.pow(a,.41666)-.055}class xe{constructor(a,b,c){return void 0===b&& void 0===c?this.set(a):this.setRGB(a,b,c)}set(a){return a&&a.isColor?this.copy(a):"number"==typeof a?this.setHex(a):"string"==typeof a&&this.setStyle(a),this}setScalar(a){return this.r=a,this.g=a,this.b=a,this}setHex(a){return a=Math.floor(a),this.r=(a>>16&255)/255,this.g=(a>>8&255)/255,this.b=(255&a)/255,this}setRGB(a,b,c){return this.r=a,this.g=b,this.b=c,this}setHSL(a,b,c){var d;if(a=(a%(d=1)+d)%d,b=m(b,0,1),c=m(c,0,1),0===b)this.r=this.g=this.b=c;else{let e=c<=.5?c*(1+b):c+b-c*b,f=2*c-e;this.r=aR(f,e,a+1/3),this.g=aR(f,e,a),this.b=aR(f,e,a-1/3)}return this}setStyle(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}let c;if(c=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(a)){let d,e=c[1],f=c[2];switch(e){case"rgb":case"rgba":if(d=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(f))return this.r=Math.min(255,parseInt(d[1],10))/255,this.g=Math.min(255,parseInt(d[2],10))/255,this.b=Math.min(255,parseInt(d[3],10))/255,b(d[4]),this;if(d=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(f))return this.r=Math.min(100,parseInt(d[1],10))/100,this.g=Math.min(100,parseInt(d[2],10))/100,this.b=Math.min(100,parseInt(d[3],10))/100,b(d[4]),this;break;case"hsl":case"hsla":if(d=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(f)){let g=parseFloat(d[1])/360,h=parseInt(d[2],10)/100,i=parseInt(d[3],10)/100;return b(d[4]),this.setHSL(g,h,i)}}}else if(c=/^\#([A-Fa-f\d]+)$/.exec(a)){let l=c[1],m=l.length;if(3===m)return this.r=parseInt(l.charAt(0)+l.charAt(0),16)/255,this.g=parseInt(l.charAt(1)+l.charAt(1),16)/255,this.b=parseInt(l.charAt(2)+l.charAt(2),16)/255,this;if(6===m)return this.r=parseInt(l.charAt(0)+l.charAt(1),16)/255,this.g=parseInt(l.charAt(2)+l.charAt(3),16)/255,this.b=parseInt(l.charAt(4)+l.charAt(5),16)/255,this}return a&&a.length>0?this.setColorName(a):this}setColorName(a){let b=aO[a.toLowerCase()];return void 0!==b?this.setHex(b):console.warn("THREE.Color: Unknown color "+a),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(a){return this.r=a.r,this.g=a.g,this.b=a.b,this}copyGammaToLinear(a,b=2){return this.r=Math.pow(a.r,b),this.g=Math.pow(a.g,b),this.b=Math.pow(a.b,b),this}copyLinearToGamma(a,b=2){let c=b>0?1/b:1;return this.r=Math.pow(a.r,c),this.g=Math.pow(a.g,c),this.b=Math.pow(a.b,c),this}convertGammaToLinear(a){return this.copyGammaToLinear(this,a),this}convertLinearToGamma(a){return this.copyLinearToGamma(this,a),this}copySRGBToLinear(a){return this.r=aS(a.r),this.g=aS(a.g),this.b=aS(a.b),this}copyLinearToSRGB(a){return this.r=aT(a.r),this.g=aT(a.g),this.b=aT(a.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(a){void 0===a&&(console.warn("THREE.Color: .getHSL() target is now required"),a={h:0,s:0,l:0});let b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h,i=(f+e)/2;if(f===e)g=0,h=0;else{let l=e-f;switch(h=i<=.5?l/(e+f):l/(2-e-f),e){case b:g=(c-d)/l+(cb&&(b=a[c]);return b}Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array;let aX=0,aY=new Mt,aZ=new Yt,a$=new q,a_=new Z,a0=new Z,a1=new q;class Ne extends A{constructor(){super(),Object.defineProperty(this,"id",{value:aX++}),this.uuid=l(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(a){return Array.isArray(a)?this.index=new(aW(a)>65535?Se:Me)(a,1):this.index=a,this}getAttribute(a){return this.attributes[a]}setAttribute(a,b){return this.attributes[a]=b,this}deleteAttribute(a){return delete this.attributes[a],this}hasAttribute(a){return void 0!==this.attributes[a]}addGroup(a,b,c=0){this.groups.push({start:a,count:b,materialIndex:c})}clearGroups(){this.groups=[]}setDrawRange(a,b){this.drawRange.start=a,this.drawRange.count=b}applyMatrix4(a){let b=this.attributes.position;void 0!==b&&(b.applyMatrix4(a),b.needsUpdate=!0);let c=this.attributes.normal;if(void 0!==c){let d=(new B).getNormalMatrix(a);c.applyNormalMatrix(d),c.needsUpdate=!0}let e=this.attributes.tangent;return void 0!==e&&(e.transformDirection(a),e.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}rotateX(a){return aY.makeRotationX(a),this.applyMatrix4(aY),this}rotateY(a){return aY.makeRotationY(a),this.applyMatrix4(aY),this}rotateZ(a){return aY.makeRotationZ(a),this.applyMatrix4(aY),this}translate(a,b,c){return aY.makeTranslation(a,b,c),this.applyMatrix4(aY),this}scale(a,b,c){return aY.makeScale(a,b,c),this.applyMatrix4(aY),this}lookAt(a){return aZ.lookAt(a),aZ.updateMatrix(),this.applyMatrix4(aZ.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(a$).negate(),this.translate(a$.x,a$.y,a$.z),this}setFromPoints(a){let b=[];for(let c=0,d=a.length;cJ.dot(l[a])?-1:1;h[4*a]=I.x,h[4*a+1]=I.y,h[4*a+2]=I.z,h[4*a+3]=c}for(let N=0,P=x.length;N0&&(a.userData=this.userData),void 0!==this.parameters){let b=this.parameters;for(let c in b)void 0!==b[c]&&(a[c]=b[c]);return a}a.data={attributes:{}};let d=this.index;null!==d&&(a.data.index={type:d.array.constructor.name,array:Array.prototype.slice.call(d.array)});let e=this.attributes;for(let f in e){let g=e[f];a.data.attributes[f]=g.toJSON(a.data)}let h={},i=!1;for(let l in this.morphAttributes){let m=this.morphAttributes[l],n=[];for(let o=0,p=m.length;o0&&(h[l]=n,i=!0)}i&&(a.data.morphAttributes=h,a.data.morphTargetsRelative=this.morphTargetsRelative);let s=this.groups;s.length>0&&(a.data.groups=JSON.parse(JSON.stringify(s)));let t=this.boundingSphere;return null!==t&&(a.data.boundingSphere={center:t.center.toArray(),radius:t.radius}),a}clone(){return(new Ne).copy(this)}copy(a){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let b={};this.name=a.name;let c=a.index;null!==c&&this.setIndex(c.clone(b));let d=a.attributes;for(let e in d){let f=d[e];this.setAttribute(e,f.clone(b))}let g=a.morphAttributes;for(let h in g){let i=[],l=g[h];for(let m=0,n=l.length;m0){let d=b[c[0]];if(void 0!==d){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,f=d.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}}raycast(a,b){let c=this.geometry,d=this.material,e=this.matrixWorld;if(void 0===d||(null===c.boundingSphere&&c.computeBoundingSphere(),a4.copy(c.boundingSphere),a4.applyMatrix4(e),!1===a.ray.intersectsSphere(a4))||(a2.copy(e).invert(),a3.copy(a.ray).applyMatrix4(a2),null!==c.boundingBox&& !1===a3.intersectsBox(c.boundingBox)))return;let f;if(c.isBufferGeometry){let g=c.index,h=c.attributes.position,i=c.morphAttributes.position,l=c.morphTargetsRelative,m=c.attributes.uv,n=c.attributes.uv2,o=c.groups,p=c.drawRange;if(null!==g){if(Array.isArray(d))for(let r=0,s=o.length;rc.far?null:{distance:l,point:bk.clone(),object:a}}(a,b,c,d,a5,a6,a7,bj);if(u){h&&(bg.fromBufferAttribute(h,l),bh.fromBufferAttribute(h,m),bi.fromBufferAttribute(h,n),u.uv=he.getUV(bj,a5,a6,a7,bg,bh,bi,new O)),i&&(bg.fromBufferAttribute(i,l),bh.fromBufferAttribute(i,m),bi.fromBufferAttribute(i,n),u.uv2=he.getUV(bj,a5,a6,a7,bg,bh,bi,new O));let v={a:l,b:m,c:n,normal:new q,materialIndex:0};he.getNormal(a5,a6,a7,v.normal),u.face=v}return u}Ke.prototype.isMesh=!0;class tn extends Ne{constructor(a=1,b=1,c=1,d=1,e=1,f=1){super(),this.type="BoxGeometry",this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};let g=this;d=Math.floor(d),e=Math.floor(e),f=Math.floor(f);let h=[],i=[],l=[],m=[],n=0,o=0;function p(a,b,c,d,e,f,p,r,s,t,u){let v=f/s,w=p/t,x=f/2,y=p/2,z=r/2,C=s+1,D=t+1,E=0,F=0,I=new q;for(let J=0;J0?1:-1,l.push(I.x,I.y,I.z),m.push(L/s),m.push(1-J/t),E+=1}}for(let N=0;N0&&(b.defines=this.defines),b.vertexShader=this.vertexShader,b.fragmentShader=this.fragmentShader;let e={};for(let f in this.extensions)!0===this.extensions[f]&&(e[f]=!0);return Object.keys(e).length>0&&(b.extensions=e),b}}sn.prototype.isShaderMaterial=!0;class an extends Yt{constructor(){super(),this.type="Camera",this.matrixWorldInverse=new Mt,this.projectionMatrix=new Mt,this.projectionMatrixInverse=new Mt}copy(a,b){return super.copy(a,b),this.matrixWorldInverse.copy(a.matrixWorldInverse),this.projectionMatrix.copy(a.projectionMatrix),this.projectionMatrixInverse.copy(a.projectionMatrixInverse),this}getWorldDirection(a){void 0===a&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),a=new q),this.updateWorldMatrix(!0,!1);let b=this.matrixWorld.elements;return a.set(-b[8],-b[9],-b[10]).normalize()}updateMatrixWorld(a){super.updateMatrixWorld(a),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(a,b){super.updateWorldMatrix(a,b),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}an.prototype.isCamera=!0;class on extends an{constructor(a=50,b=1,c=.1,d=2e3){super(),this.type="PerspectiveCamera",this.fov=a,this.zoom=1,this.near=c,this.far=d,this.focus=10,this.aspect=b,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(a,b){return super.copy(a,b),this.fov=a.fov,this.zoom=a.zoom,this.near=a.near,this.far=a.far,this.focus=a.focus,this.aspect=a.aspect,this.view=null===a.view?null:Object.assign({},a.view),this.filmGauge=a.filmGauge,this.filmOffset=a.filmOffset,this}setFocalLength(a){let b=.5*this.getFilmHeight()/a;this.fov=2*i*Math.atan(b),this.updateProjectionMatrix()}getFocalLength(){let a=Math.tan(.5*h*this.fov);return .5*this.getFilmHeight()/a}getEffectiveFOV(){return 2*i*Math.atan(Math.tan(.5*h*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(a,b,c,d,e,f){this.aspect=a/b,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=a,this.view.fullHeight=b,this.view.offsetX=c,this.view.offsetY=d,this.view.width=e,this.view.height=f,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let a=this.near,b=a*Math.tan(.5*h*this.fov)/this.zoom,c=2*b,d=this.aspect*c,e=-0.5*d,f=this.view;if(null!==this.view&&this.view.enabled){let g=f.fullWidth,i=f.fullHeight;e+=f.offsetX*d/g,b-=f.offsetY*c/i,d*=f.width/g,c*=f.height/i}let l=this.filmOffset;0!==l&&(e+=a*l/this.getFilmWidth()),this.projectionMatrix.makePerspective(e,e+d,b,b-c,a,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(a){let b=super.toJSON(a);return b.object.fov=this.fov,b.object.zoom=this.zoom,b.object.near=this.near,b.object.far=this.far,b.object.focus=this.focus,b.object.aspect=this.aspect,null!==this.view&&(b.object.view=Object.assign({},this.view)),b.object.filmGauge=this.filmGauge,b.object.filmOffset=this.filmOffset,b}}on.prototype.isPerspectiveCamera=!0;class hn extends Yt{constructor(a,b,c){if(super(),this.type="CubeCamera",!0!==c.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=c;let d=new on(90,1,a,b);d.layers=this.layers,d.up.set(0,-1,0),d.lookAt(new q(1,0,0)),this.add(d);let e=new on(90,1,a,b);e.layers=this.layers,e.up.set(0,-1,0),e.lookAt(new q(-1,0,0)),this.add(e);let f=new on(90,1,a,b);f.layers=this.layers,f.up.set(0,0,1),f.lookAt(new q(0,1,0)),this.add(f);let g=new on(90,1,a,b);g.layers=this.layers,g.up.set(0,0,-1),g.lookAt(new q(0,-1,0)),this.add(g);let h=new on(90,1,a,b);h.layers=this.layers,h.up.set(0,-1,0),h.lookAt(new q(0,0,1)),this.add(h);let i=new on(90,1,a,b);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new q(0,0,-1)),this.add(i)}update(a,b){null===this.parent&&this.updateMatrixWorld();let c=this.renderTarget,[d,e,f,g,h,i]=this.children,l=a.xr.enabled,m=a.getRenderTarget();a.xr.enabled=!1;let n=c.texture.generateMipmaps;c.texture.generateMipmaps=!1,a.setRenderTarget(c,0),a.render(b,d),a.setRenderTarget(c,1),a.render(b,e),a.setRenderTarget(c,2),a.render(b,f),a.setRenderTarget(c,3),a.render(b,g),a.setRenderTarget(c,4),a.render(b,h),c.texture.generateMipmaps=n,a.setRenderTarget(c,5),a.render(b,i),a.setRenderTarget(m),a.xr.enabled=l}}class cn extends G{constructor(a,b,c,d,e,f,g,h,i,l){super(a=void 0!==a?a:[],b=void 0!==b?b:301,c,d,e,f,g=void 0!==g?g:1022,h,i,l),this._needsFlipEnvMap=!0,this.flipY=!1}get images(){return this.image}set images(a){this.image=a}}cn.prototype.isCubeTexture=!0;class un extends W{constructor(a,b,c){Number.isInteger(b)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),b=c),super(a,a,b),b=b||{},this.texture=new cn(void 0,b.mapping,b.wrapS,b.wrapT,b.magFilter,b.minFilter,b.format,b.type,b.anisotropy,b.encoding),this.texture.generateMipmaps=void 0!==b.generateMipmaps&&b.generateMipmaps,this.texture.minFilter=void 0!==b.minFilter?b.minFilter:d,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(a,b){this.texture.type=b.type,this.texture.format=1023,this.texture.encoding=b.encoding,this.texture.generateMipmaps=b.generateMipmaps,this.texture.minFilter=b.minFilter,this.texture.magFilter=b.magFilter;let c=new tn(5,5,5),e=new sn({name:"CubemapFromEquirect",uniforms:bm({tEquirect:{value:null}}),vertexShader:"\n\n varying vec3 vWorldDirection;\n\n vec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n }\n\n void main() {\n\n vWorldDirection = transformDirection( position, modelMatrix );\n\n #include \n #include \n\n }\n ",fragmentShader:"\n\n uniform sampler2D tEquirect;\n\n varying vec3 vWorldDirection;\n\n #include \n\n void main() {\n\n vec3 direction = normalize( vWorldDirection );\n\n vec2 sampleUV = equirectUv( direction );\n\n gl_FragColor = texture2D( tEquirect, sampleUV );\n\n }\n ",side:1,blending:0});e.uniforms.tEquirect.value=b;let f=new Ke(c,e),g=b.minFilter;return 1008===b.minFilter&&(b.minFilter=d),new hn(1,10,this).update(a,f),b.minFilter=g,f.geometry.dispose(),f.material.dispose(),this}clear(a,b,c,d){let e=a.getRenderTarget();for(let f=0;f<6;f++)a.setRenderTarget(this,f),a.clear(b,c,d);a.setRenderTarget(e)}}un.prototype.isWebGLCubeRenderTarget=!0;class dn extends G{constructor(a,c,d,e,f,g,h,i,l,m,n,o){super(null,g,h,i,l,m,e,f,n,o),this.image={data:a||null,width:c||1,height:d||1},this.magFilter=void 0!==l?l:b,this.minFilter=void 0!==m?m:b,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}dn.prototype.isDataTexture=!0;let bp=new mt,bq=new q;class fn{constructor(a=new Kt,b=new Kt,c=new Kt,d=new Kt,e=new Kt,f=new Kt){this.planes=[a,b,c,d,e,f]}set(a,b,c,d,e,f){let g=this.planes;return g[0].copy(a),g[1].copy(b),g[2].copy(c),g[3].copy(d),g[4].copy(e),g[5].copy(f),this}copy(a){let b=this.planes;for(let c=0;c<6;c++)b[c].copy(a.planes[c]);return this}setFromProjectionMatrix(a){let b=this.planes,c=a.elements,d=c[0],e=c[1],f=c[2],g=c[3],h=c[4],i=c[5],l=c[6],m=c[7],n=c[8],o=c[9],p=c[10],r=c[11],s=c[12],t=c[13],u=c[14],v=c[15];return b[0].setComponents(g-d,m-h,r-n,v-s).normalize(),b[1].setComponents(g+d,m+h,r+n,v+s).normalize(),b[2].setComponents(g+e,m+i,r+o,v+t).normalize(),b[3].setComponents(g-e,m-i,r-o,v-t).normalize(),b[4].setComponents(g-f,m-l,r-p,v-u).normalize(),b[5].setComponents(g+f,m+l,r+p,v+u).normalize(),this}intersectsObject(a){let b=a.geometry;return null===b.boundingSphere&&b.computeBoundingSphere(),bp.copy(b.boundingSphere).applyMatrix4(a.matrixWorld),this.intersectsSphere(bp)}intersectsSprite(a){return bp.center.set(0,0,0),bp.radius=.7071067811865476,bp.applyMatrix4(a.matrixWorld),this.intersectsSphere(bp)}intersectsSphere(a){let b=this.planes,c=a.center,d=-a.radius;for(let e=0;e<6;e++)if(b[e].distanceToPoint(c)0?a.max.x:a.min.x,bq.y=d.normal.y>0?a.max.y:a.min.y,bq.z=d.normal.z>0?a.max.z:a.min.z,0>d.distanceToPoint(bq))return!1}return!0}containsPoint(a){let b=this.planes;for(let c=0;c<6;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}clone(){return(new this.constructor).copy(this)}}function br(){let a=null,b=!1,c=null,d=null;function e(b,f){c(b,f),d=a.requestAnimationFrame(e)}return{start:function(){!0!==b&&null!==c&&(d=a.requestAnimationFrame(e),b=!0)},stop:function(){a.cancelAnimationFrame(d),b=!1},setAnimationLoop:function(a){c=a},setContext:function(b){a=b}}}function bs(a,b){let c=b.isWebGL2,d=new WeakMap;return{get:function(a){return a.isInterleavedBufferAttribute&&(a=a.data),d.get(a)},remove:function(b){b.isInterleavedBufferAttribute&&(b=b.data);let c=d.get(b);c&&(a.deleteBuffer(c.buffer),d.delete(b))},update:function(b,e){if(b.isGLBufferAttribute){let f=d.get(b);return void((!f||f.version 0.0 ) {\n distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n }\n return distanceFalloff;\n#else\n if( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n return pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n }\n return 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n return ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n float fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n vec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n return Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n float gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n return 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n return 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( incidentLight.direction + viewDir );\n float dotNL = saturate( dot( normal, incidentLight.direction ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n const float LUT_SIZE = 64.0;\n const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n const float LUT_BIAS = 0.5 / LUT_SIZE;\n float dotNV = saturate( dot( N, V ) );\n vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n uv = uv * LUT_SCALE + LUT_BIAS;\n return uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n float l = length( f );\n return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n float x = dot( v1, v2 );\n float y = abs( x );\n float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n float b = 3.4175940 + ( 4.1616724 + y ) * y;\n float v = a / b;\n float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n return cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n vec3 lightNormal = cross( v1, v2 );\n if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n vec3 T1, T2;\n T1 = normalize( V - N * dot( V, N ) );\n T2 = - cross( N, T1 );\n mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n vec3 coords[ 4 ];\n coords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n coords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n coords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n coords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n coords[ 0 ] = normalize( coords[ 0 ] );\n coords[ 1 ] = normalize( coords[ 1 ] );\n coords[ 2 ] = normalize( coords[ 2 ] );\n coords[ 3 ] = normalize( coords[ 3 ] );\n vec3 vectorFormFactor = vec3( 0.0 );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n float result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n return vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n vec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n return specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n vec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n vec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n vec3 FssEss = F * brdf.x + brdf.y;\n float Ess = brdf.x + brdf.y;\n float Ems = 1.0 - Ess;\n vec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n singleScatter += FssEss;\n multiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n return ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n return sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n float invAlpha = 1.0 / roughness;\n float cos2h = NoH * NoH;\n float sin2h = max(1.0 - cos2h, 0.0078125); return (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n return saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n vec3 N = geometry.normal;\n vec3 V = geometry.viewDir;\n vec3 H = normalize( V + L );\n float dotNH = saturate( dot( N, H ) );\n return specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vUv );\n vec2 dSTdy = dFdy( vUv );\n float Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n vec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n vec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 ) * faceDirection;\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n vec4 plane;\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n bool clipped = true;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n }\n #pragma unroll_loop_end\n if ( clipped ) discard;\n #endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n vClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n diffuseColor *= vColor;\n#elif defined( USE_COLOR )\n diffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR )\n varying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n varying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n vColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n vColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n vColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n vColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n return fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n float precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n float max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n float precisionSafeLength( vec3 v ) {\n float maxComponent = max3( abs( v ) );\n return length( v / maxComponent ) * maxComponent;\n }\n#endif\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\nstruct GeometricContext {\n vec3 position;\n vec3 normal;\n vec3 viewDir;\n#ifdef CLEARCOAT\n vec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n float distance = dot( planeNormal, point - pointOnPlane );\n return - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n mat3 tmp;\n tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n return tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n vec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n return dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n return vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n #define cubeUV_maxMipLevel 8.0\n #define cubeUV_minMipLevel 4.0\n #define cubeUV_maxTileSize 256.0\n #define cubeUV_minTileSize 16.0\n float getFace( vec3 direction ) {\n vec3 absDirection = abs( direction );\n float face = - 1.0;\n if ( absDirection.x > absDirection.z ) {\n if ( absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if ( absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n }\n vec2 getUV( vec3 direction, float face ) {\n vec2 uv;\n if ( face == 0.0 ) {\n uv = vec2( direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 1.0 ) {\n uv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n } else if ( face == 2.0 ) {\n uv = vec2( - direction.x, direction.y ) / abs( direction.z );\n } else if ( face == 3.0 ) {\n uv = vec2( - direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 4.0 ) {\n uv = vec2( - direction.x, direction.z ) / abs( direction.y );\n } else {\n uv = vec2( direction.x, direction.y ) / abs( direction.z );\n }\n return 0.5 * ( uv + 1.0 );\n }\n vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n float face = getFace( direction );\n float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n mipInt = max( mipInt, cubeUV_minMipLevel );\n float faceSize = exp2( mipInt );\n float texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n vec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n vec2 f = fract( uv );\n uv += 0.5 - f;\n if ( face > 2.0 ) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if ( mipInt < cubeUV_maxMipLevel ) {\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n vec3 tm = mix( tl, tr, f.x );\n vec3 bm = mix( bl, br, f.x );\n return mix( tm, bm, f.y );\n }\n #define r0 1.0\n #define v0 0.339\n #define m0 - 2.0\n #define r1 0.8\n #define v1 0.276\n #define m1 - 1.0\n #define r4 0.4\n #define v4 0.046\n #define m4 2.0\n #define r5 0.305\n #define v5 0.016\n #define m5 3.0\n #define r6 0.21\n #define v6 0.0038\n #define m6 4.0\n float roughnessToMip( float roughness ) {\n float mip = 0.0;\n if ( roughness >= r1 ) {\n mip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n } else if ( roughness >= r4 ) {\n mip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n } else if ( roughness >= r5 ) {\n mip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n } else if ( roughness >= r6 ) {\n mip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n } else {\n mip = - 2.0 * log2( 1.16 * roughness ); }\n return mip;\n }\n vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n float mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n float mipF = fract( mip );\n float mipInt = floor( mip );\n vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n if ( mipF == 0.0 ) {\n return vec4( color0, 1.0 );\n } else {\n vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n return vec4( mix( color0, color1, mipF ), 1.0 );\n }\n }\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n mat3 m = mat3( instanceMatrix );\n transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n transformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n transformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n #ifdef FLIP_SIDED\n transformedTangent = - transformedTangent;\n #endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vUv );\n emissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n float maxComponent = max( max( value.r, value.g ), value.b );\n float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.r, max( value.g, value.b ) );\n float M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n M = ceil( M * 255.0 ) / 255.0;\n return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.r, max( value.g, value.b ) );\n float D = max( maxRange / maxRGB, 1.0 );\n D = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n vec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n Xp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n vec4 vResult;\n vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n vResult.w = fract( Le );\n vResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n return vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n float Le = value.z * 255.0 + value.w;\n vec3 Xp_Y_XYZp;\n Xp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n vec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n return vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vec3 cameraToFrag;\n if ( isOrthographic ) {\n cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToFrag = normalize( vWorldPosition - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToFrag, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n #else\n vec4 envColor = vec4( 0.0 );\n #endif\n #ifndef ENVMAP_TYPE_CUBE_UV\n envColor = envMapTexelToLinear( envColor );\n #endif\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n uniform float envMapIntensity;\n uniform float flipEnvMap;\n uniform int maxMipLevel;\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n \n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n uniform float reflectivity;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n varying vec3 vWorldPosition;\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n \n varying vec3 vWorldPosition;\n #else\n varying vec3 vReflect;\n uniform float refractionRatio;\n #endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n #ifdef ENVMAP_MODE_REFRACTION\n uniform float refractionRatio;\n #endif\n vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n #else\n vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n #else\n vec4 envMapColor = vec4( 0.0 );\n #endif\n return PI * envMapColor.rgb * envMapIntensity;\n }\n float getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n float maxMIPLevelScalar = float( maxMIPLevel );\n float sigma = PI * roughness * roughness / ( 1.0 + roughness );\n float desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n }\n vec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( -viewDir, normal );\n reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n #else\n vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n #endif\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n float specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n #else\n vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n #endif\n return envMapColor.rgb * envMapIntensity;\n }\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vWorldPosition = worldPosition.xyz;\n #else\n vec3 cameraToVertex;\n if ( isOrthographic ) {\n cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #endif\n#endif",fog_vertex:"#ifdef USE_FOG\n fogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n varying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n #ifdef FOG_EXP2\n float fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n uniform vec3 fogColor;\n varying float fogDepth;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n uniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n float dotNL = dot( normal, lightDirection );\n vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n #ifdef USE_GRADIENTMAP\n return texture2D( gradientMap, coord ).rgb;\n #else\n return ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n #endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n vec4 lightMapTexel= texture2D( lightMap, vUv2 );\n reflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n vLightBack = vec3( 0.0 );\n vIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n vIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n vIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n getPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n #pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n getSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n #pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n getDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n #pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n #ifdef DOUBLE_SIDED\n vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n #endif\n }\n #pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n float x = normal.x, y = normal.y, z = normal.z;\n vec3 result = shCoefficients[ 0 ] * 0.886227;\n result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n return result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n return irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n void getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n directLight.color = directionalLight.color;\n directLight.direction = directionalLight.direction;\n directLight.visible = true;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n void getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n vec3 lVector = pointLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n directLight.color = pointLight.color;\n directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n directLight.visible = ( directLight.color != vec3( 0.0 ) );\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n void getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n vec3 lVector = spotLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n float angleCos = dot( directLight.direction, spotLight.direction );\n if ( angleCos > spotLight.coneCos ) {\n float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n directLight.color = spotLight.color;\n directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n }\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n struct RectAreaLight {\n vec3 color;\n vec3 position;\n vec3 halfWidth;\n vec3 halfHeight;\n };\n uniform sampler2D ltc_1; uniform sampler2D ltc_2;\n uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n float dotNL = dot( geometry.normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n }\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n vec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Toon\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material ) (0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material ) (0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n material.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n material.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n material.clearcoat = clearcoat;\n material.clearcoatRoughness = clearcoatRoughness;\n #ifdef USE_CLEARCOATMAP\n material.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n #endif\n #ifdef USE_CLEARCOAT_ROUGHNESSMAP\n material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n #endif\n material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n material.clearcoatRoughness += geometryRoughness;\n material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n material.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n vec3 diffuseColor;\n float specularRoughness;\n vec3 specularColor;\n#ifdef CLEARCOAT\n float clearcoat;\n float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n vec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n return DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 normal = geometry.normal;\n vec3 viewDir = geometry.viewDir;\n vec3 position = geometry.position;\n vec3 lightPos = rectAreaLight.position;\n vec3 halfWidth = rectAreaLight.halfWidth;\n vec3 halfHeight = rectAreaLight.halfHeight;\n vec3 lightColor = rectAreaLight.color;\n float roughness = material.specularRoughness;\n vec3 rectCoords[ 4 ];\n rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n rectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n rectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n vec2 uv = LTC_Uv( normal, viewDir, roughness );\n vec4 t1 = texture2D( ltc_1, uv );\n vec4 t2 = texture2D( ltc_2, uv );\n mat3 mInv = mat3(\n vec3( t1.x, 0, t1.y ),\n vec3( 0, 1, 0 ),\n vec3( t1.z, 0, t1.w )\n );\n vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n }\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n #ifdef CLEARCOAT\n float ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n vec3 ccIrradiance = ccDotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n ccIrradiance *= PI;\n #endif\n float clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n reflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n #else\n float clearcoatDHR = 0.0;\n #endif\n #ifdef USE_SHEEN\n reflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n material.specularRoughness,\n directLight.direction,\n geometry,\n material.sheenColor\n );\n #else\n reflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n #endif\n reflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n #ifdef CLEARCOAT\n float ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n reflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n float ccDotNL = ccDotNV;\n float clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n #else\n float clearcoatDHR = 0.0;\n #endif\n float clearcoatInv = 1.0 - clearcoatDHR;\n vec3 singleScattering = vec3( 0.0 );\n vec3 multiScattering = vec3( 0.0 );\n vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n BRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n vec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n reflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct RE_Direct_Physical\n#define RE_Direct_RectArea RE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular RE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n geometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n getPointDirectLightIrradiance( pointLight, geometry, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n pointLightShadow = pointLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n getSpotDirectLightIrradiance( spotLight, geometry, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n spotLightShadow = spotLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n RectAreaLight rectAreaLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n rectAreaLight = rectAreaLights[ i ];\n RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 iblIrradiance = vec3( 0.0 );\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n irradiance += getLightProbeIrradiance( lightProbe, geometry );\n #if ( NUM_HEMI_LIGHTS > 0 )\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if defined( RE_IndirectSpecular )\n vec3 radiance = vec3( 0.0 );\n vec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel= texture2D( lightMap, vUv2 );\n vec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n lightMapIrradiance *= PI;\n #endif\n irradiance += lightMapIrradiance;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n iblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n #endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n radiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n #ifdef CLEARCOAT\n clearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n #endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n gl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n uniform float logDepthBufFC;\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n varying float vIsPerspective;\n #else\n uniform float logDepthBufFC;\n #endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n vFragDepth = 1.0 + gl_Position.w;\n vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n #else\n if ( isPerspectiveMatrix( projectionMatrix ) ) {\n gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n gl_Position.z *= gl_Position.w;\n }\n #endif\n#endif",map_fragment:"#ifdef USE_MAP\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n diffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n uniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n vec4 mapTexel = texture2D( map, uv );\n diffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n uniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vUv );\n metalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n objectNormal *= morphTargetBaseInfluence;\n objectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n objectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n objectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n objectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n uniform float morphTargetBaseInfluence;\n #ifndef USE_MORPHNORMALS\n uniform float morphTargetInfluences[ 8 ];\n #else\n uniform float morphTargetInfluences[ 4 ];\n #endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n transformed *= morphTargetBaseInfluence;\n transformed += morphTarget0 * morphTargetInfluences[ 0 ];\n transformed += morphTarget1 * morphTargetInfluences[ 1 ];\n transformed += morphTarget2 * morphTargetInfluences[ 2 ];\n transformed += morphTarget3 * morphTargetInfluences[ 3 ];\n #ifndef USE_MORPHNORMALS\n transformed += morphTarget4 * morphTargetInfluences[ 4 ];\n transformed += morphTarget5 * morphTargetInfluences[ 5 ];\n transformed += morphTarget6 * morphTargetInfluences[ 6 ];\n transformed += morphTarget7 * morphTargetInfluences[ 7 ];\n #endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal = normal * faceDirection;\n #endif\n #ifdef USE_TANGENT\n vec3 tangent = normalize( vTangent );\n vec3 bitangent = normalize( vBitangent );\n #ifdef DOUBLE_SIDED\n tangent = tangent * faceDirection;\n bitangent = bitangent * faceDirection;\n #endif\n #if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n mat3 vTBN = mat3( tangent, bitangent, normal );\n #endif\n #endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n normal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n #ifdef FLIP_SIDED\n normal = - normal;\n #endif\n #ifdef DOUBLE_SIDED\n normal = normal * faceDirection;\n #endif\n normal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy *= normalScale;\n #ifdef USE_TANGENT\n normal = normalize( vTBN * mapN );\n #else\n normal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\n #endif\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n uniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n vec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n vec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n vec3 N = surf_norm;\n vec3 q1perp = cross( q1, N );\n vec3 q0perp = cross( N, q0 );\n vec3 T = q1perp * st0.x + q0perp * st1.x;\n vec3 B = q1perp * st0.y + q0perp * st1.y;\n float det = max( dot( T, T ), dot( B, B ) );\n float scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n return normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n }\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n vec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n clearcoatMapN.xy *= clearcoatNormalScale;\n #ifdef USE_TANGENT\n clearcoatNormal = normalize( vTBN * clearcoatMapN );\n #else\n clearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n #endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n uniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform sampler2D clearcoatNormalMap;\n uniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n return 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n vec4 r = vec4( fract( v * PackFactors ), v );\n r.yzw -= r.xyz * ShiftRight8; return r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n return dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n return linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n return (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n mvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n vec3 dithering( vec3 color ) {\n float grid_position = rand( gl_FragCoord.xy );\n vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n return color + dither_shift_RGB;\n }\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vUv );\n roughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n struct SpotLightShadow {\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n }\n vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n return unpackRGBATo2Half( texture2D( shadow, uv ) );\n }\n float VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n float occlusion = 1.0;\n vec2 distribution = texture2DDistribution( shadow, uv );\n float hard_shadow = step( compare , distribution.x );\n if (hard_shadow != 1.0 ) {\n float distance = compare - distribution.x ;\n float variance = max( 0.00000, distribution.y * distribution.y );\n float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n }\n return occlusion;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n float shadow = 1.0;\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n bool frustumTest = all( frustumTestVec );\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n float dx2 = dx0 / 2.0;\n float dy2 = dy0 / 2.0;\n float dx3 = dx1 / 2.0;\n float dy3 = dy1 / 2.0;\n shadow = (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 17.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx = texelSize.x;\n float dy = texelSize.y;\n vec2 uv = shadowCoord.xy;\n vec2 f = fract( uv * shadowMapSize + 0.5 );\n uv -= f * texelSize;\n shadow = (\n texture2DCompare( shadowMap, uv, shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n f.x ),\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n f.x ),\n f.y )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_VSM )\n shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n #else\n shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return shadow;\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n vec3 lightToPosition = shadowCoord.xyz;\n float dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias;\n vec3 bd3D = normalize( lightToPosition );\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n return (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n struct SpotLightShadow {\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n vec4 shadowWorldPosition;\n #endif\n #if NUM_DIR_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n directionalLight = directionalLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n spotLight = spotLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n pointLight = pointLightShadows[ i ];\n shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #endif\n return shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n #ifdef BONE_TEXTURE\n uniform highp sampler2D boneTexture;\n uniform int boneTextureSize;\n mat4 getBoneMatrix( const in float i ) {\n float j = i * 4.0;\n float x = mod( j, float( boneTextureSize ) );\n float y = floor( j / float( boneTextureSize ) );\n float dx = 1.0 / float( boneTextureSize );\n float dy = 1.0 / float( boneTextureSize );\n y = dy * ( y + 0.5 );\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n mat4 bone = mat4( v1, v2, v3, v4 );\n return bone;\n }\n #else\n uniform mat4 boneMatrices[ MAX_BONES ];\n mat4 getBoneMatrix( const in float i ) {\n mat4 bone = boneMatrices[ int(i) ];\n return bone;\n }\n #endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n transformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n #ifdef USE_TANGENT\n objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n #endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n vec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n return a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n const mat3 ACESInputMat = mat3(\n vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ),\n vec3( 0.04823, 0.01566, 0.83777 )\n );\n const mat3 ACESOutputMat = mat3(\n vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ),\n vec3( -0.07367, -0.00605, 1.07602 )\n );\n color *= toneMappingExposure / 0.6;\n color = ACESInputMat * color;\n color = RRTAndODTFit( color );\n color = ACESOutputMat * color;\n return saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n totalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n uniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n varying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n #ifdef UVS_VERTEX_ONLY\n vec2 vUv;\n #else\n varying vec2 vUv;\n #endif\n uniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n varying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n attribute vec2 uv2;\n varying vec2 vUv2;\n uniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = vec4( transformed, 1.0 );\n #ifdef USE_INSTANCING\n worldPosition = instanceMatrix * worldPosition;\n #endif\n worldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n vec4 texColor = texture2D( t2D, vUv );\n gl_FragColor = mapTexelToLinear( texColor );\n #include \n #include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n gl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n vec3 vReflect = vWorldDirection;\n #include \n gl_FragColor = envColor;\n gl_FragColor.a *= opacity;\n #include \n #include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n uniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n #include \n vec4 diffuseColor = vec4( 1.0 );\n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include \n #include \n #include \n #include \n float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( fragCoordZ );\n #endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n #include \n vec4 diffuseColor = vec4( 1.0 );\n #include \n #include \n #include \n float dist = length( vWorldPosition - referencePosition );\n dist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n dist = saturate( dist );\n gl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n vec3 direction = normalize( vWorldDirection );\n vec2 sampleUV = equirectUv( direction );\n vec4 texColor = texture2D( tEquirect, sampleUV );\n gl_FragColor = mapTexelToLinear( texColor );\n #include \n #include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n if ( mod( vLineDistance, totalSize ) > dashSize ) {\n discard;\n }\n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vLineDistance = scale * lineDistance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n #ifdef USE_LIGHTMAP\n \n vec4 lightMapTexel= texture2D( lightMap, vUv2 );\n reflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n #else\n reflectedLight.indirectDiffuse += vec3( 1.0 );\n #endif\n #include \n reflectedLight.indirectDiffuse *= diffuseColor.rgb;\n vec3 outgoingLight = reflectedLight.indirectDiffuse;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n #include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_ENVMAP\n #include \n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n varying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #ifdef DOUBLE_SIDED\n reflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n #else\n reflectedLight.indirectDiffuse += vIndirectFront;\n #endif\n #include \n reflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n #ifdef DOUBLE_SIDED\n reflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n #else\n reflectedLight.directDiffuse = vLightFront;\n #endif\n reflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n #include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n varying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 viewDir = normalize( vViewPosition );\n vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n vec3 y = cross( viewDir, x );\n vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n #ifdef USE_MATCAP\n vec4 matcapColor = texture2D( matcap, uv );\n matcapColor = matcapTexelToLinear( matcapColor );\n #else\n vec4 matcapColor = vec4( 1.0 );\n #endif\n vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n #include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n #include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n #include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n #define REFLECTIVITY\n #define CLEARCOAT\n #define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n uniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n uniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n uniform float clearcoat;\n uniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n uniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #ifdef TRANSMISSION\n float totalTransmission = transmission;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #ifdef TRANSMISSION\n diffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n #endif\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n #include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #ifdef USE_TANGENT\n vTangent = normalize( transformedTangent );\n vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n #endif\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n varying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n gl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n varying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #ifdef USE_TANGENT\n vTangent = normalize( transformedTangent );\n vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n #endif\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n vViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n gl_PointSize = size;\n #ifdef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n #endif\n #include \n #include \n #include \n #include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n #include \n #include \n #include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n #ifndef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n #endif\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n gl_Position = projectionMatrix * mvPosition;\n #include \n #include \n #include \n}"},bv={common:{diffuse:{value:new xe(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new B},uv2Transform:{value:new B},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new O(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new xe(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new xe(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new B}},sprite:{diffuse:{value:new xe(15658734)},opacity:{value:1},center:{value:new O(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new B}}},bw={basic:{uniforms:bn([bv.common,bv.specularmap,bv.envmap,bv.aomap,bv.lightmap,bv.fog]),vertexShader:bu.meshbasic_vert,fragmentShader:bu.meshbasic_frag},lambert:{uniforms:bn([bv.common,bv.specularmap,bv.envmap,bv.aomap,bv.lightmap,bv.emissivemap,bv.fog,bv.lights,{emissive:{value:new xe(0)}}]),vertexShader:bu.meshlambert_vert,fragmentShader:bu.meshlambert_frag},phong:{uniforms:bn([bv.common,bv.specularmap,bv.envmap,bv.aomap,bv.lightmap,bv.emissivemap,bv.bumpmap,bv.normalmap,bv.displacementmap,bv.fog,bv.lights,{emissive:{value:new xe(0)},specular:{value:new xe(1118481)},shininess:{value:30}}]),vertexShader:bu.meshphong_vert,fragmentShader:bu.meshphong_frag},standard:{uniforms:bn([bv.common,bv.envmap,bv.aomap,bv.lightmap,bv.emissivemap,bv.bumpmap,bv.normalmap,bv.displacementmap,bv.roughnessmap,bv.metalnessmap,bv.fog,bv.lights,{emissive:{value:new xe(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:bu.meshphysical_vert,fragmentShader:bu.meshphysical_frag},toon:{uniforms:bn([bv.common,bv.aomap,bv.lightmap,bv.emissivemap,bv.bumpmap,bv.normalmap,bv.displacementmap,bv.gradientmap,bv.fog,bv.lights,{emissive:{value:new xe(0)}}]),vertexShader:bu.meshtoon_vert,fragmentShader:bu.meshtoon_frag},matcap:{uniforms:bn([bv.common,bv.bumpmap,bv.normalmap,bv.displacementmap,bv.fog,{matcap:{value:null}}]),vertexShader:bu.meshmatcap_vert,fragmentShader:bu.meshmatcap_frag},points:{uniforms:bn([bv.points,bv.fog]),vertexShader:bu.points_vert,fragmentShader:bu.points_frag},dashed:{uniforms:bn([bv.common,bv.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:bu.linedashed_vert,fragmentShader:bu.linedashed_frag},depth:{uniforms:bn([bv.common,bv.displacementmap]),vertexShader:bu.depth_vert,fragmentShader:bu.depth_frag},normal:{uniforms:bn([bv.common,bv.bumpmap,bv.normalmap,bv.displacementmap,{opacity:{value:1}}]),vertexShader:bu.normal_vert,fragmentShader:bu.normal_frag},sprite:{uniforms:bn([bv.sprite,bv.fog]),vertexShader:bu.sprite_vert,fragmentShader:bu.sprite_frag},background:{uniforms:{uvTransform:{value:new B},t2D:{value:null}},vertexShader:bu.background_vert,fragmentShader:bu.background_frag},cube:{uniforms:bn([bv.envmap,{opacity:{value:1}}]),vertexShader:bu.cube_vert,fragmentShader:bu.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:bu.equirect_vert,fragmentShader:bu.equirect_frag},distanceRGBA:{uniforms:bn([bv.common,bv.displacementmap,{referencePosition:{value:new q},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:bu.distanceRGBA_vert,fragmentShader:bu.distanceRGBA_frag},shadow:{uniforms:bn([bv.lights,bv.fog,{color:{value:new xe(0)},opacity:{value:1}}]),vertexShader:bu.shadow_vert,fragmentShader:bu.shadow_frag}};function bx(a,b,c,d,e){let f=new xe(0),g,h,i=0,l=null,m=0,n=null;function o(a,b){c.buffers.color.setClear(a.r,a.g,a.b,b,e)}return{getClearColor:function(){return f},setClearColor:function(a,b=1){f.set(a),o(f,i=b)},getClearAlpha:function(){return i},setClearAlpha:function(a){o(f,i=a)},render:function(c,e,p,r){let s=!0===e.isScene?e.background:null;s&&s.isTexture&&(s=b.get(s));let t=a.xr,u=t.getSession&&t.getSession();u&&"additive"===u.environmentBlendMode&&(s=null),null===s?o(f,i):s&&s.isColor&&(o(s,1),r=!0),(a.autoClear||r)&&a.clear(a.autoClearColor,a.autoClearDepth,a.autoClearStencil),s&&(s.isCubeTexture||306===s.mapping)?(void 0===h&&((h=new Ke(new tn(1,1,1),new sn({name:"BackgroundCubeMaterial",uniforms:bm(bw.cube.uniforms),vertexShader:bw.cube.vertexShader,fragmentShader:bw.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),h.geometry.deleteAttribute("uv"),h.onBeforeRender=function(a,b,c){this.matrixWorld.copyPosition(c.matrixWorld)},Object.defineProperty(h.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),d.update(h)),h.material.uniforms.envMap.value=s,h.material.uniforms.flipEnvMap.value=s.isCubeTexture&&s._needsFlipEnvMap?-1:1,l===s&&m===s.version&&n===a.toneMapping||(h.material.needsUpdate=!0,l=s,m=s.version,n=a.toneMapping),c.unshift(h,h.geometry,h.material,0,0,null)):s&&s.isTexture&&(void 0===g&&((g=new Ke(new xn(2,2),new sn({name:"BackgroundMaterial",uniforms:bm(bw.background.uniforms),vertexShader:bw.background.vertexShader,fragmentShader:bw.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),Object.defineProperty(g.material,"map",{get:function(){return this.uniforms.t2D.value}}),d.update(g)),g.material.uniforms.t2D.value=s,!0===s.matrixAutoUpdate&&s.updateMatrix(),g.material.uniforms.uvTransform.value.copy(s.matrix),l===s&&m===s.version&&n===a.toneMapping||(g.material.needsUpdate=!0,l=s,m=s.version,n=a.toneMapping),c.unshift(g,g.geometry,g.material,0,0,null))}}}function by(a,b,c,d){let e=a.getParameter(34921),f=d.isWebGL2?null:b.get("OES_vertex_array_object"),g=d.isWebGL2||null!==f,h={},i=o(null),l=i;function m(b){return d.isWebGL2?a.bindVertexArray(b):f.bindVertexArrayOES(b)}function n(b){return d.isWebGL2?a.deleteVertexArray(b):f.deleteVertexArrayOES(b)}function o(a){let b=[],c=[],d=[];for(let f=0;f=0){let v=i[n];if(void 0!==v){let w=v.normalized,x=v.itemSize,y=c.get(v);if(void 0===y)continue;let z=y.buffer,C=y.type,D=y.bytesPerElement;if(v.isInterleavedBufferAttribute){let E=v.data,F=E.stride,I=v.offset;E&&E.isInstancedInterleavedBuffer?(s(o,E.meshPerAttribute),void 0===h._maxInstanceCount&&(h._maxInstanceCount=E.meshPerAttribute*E.count)):r(o),a.bindBuffer(34962,z),u(o,x,C,w,F*D,I*D)}else v.isInstancedBufferAttribute?(s(o,v.meshPerAttribute),void 0===h._maxInstanceCount&&(h._maxInstanceCount=v.meshPerAttribute*v.count)):r(o),a.bindBuffer(34962,z),u(o,x,C,w,0,0)}else if("instanceMatrix"===n){let J=c.get(e.instanceMatrix);if(void 0===J)continue;let K=J.buffer,L=J.type;s(o+0,1),s(o+1,1),s(o+2,1),s(o+3,1),a.bindBuffer(34962,K),a.vertexAttribPointer(o+0,4,L,!1,64,0),a.vertexAttribPointer(o+1,4,L,!1,64,16),a.vertexAttribPointer(o+2,4,L,!1,64,32),a.vertexAttribPointer(o+3,4,L,!1,64,48)}else if("instanceColor"===n){let M=c.get(e.instanceColor);if(void 0===M)continue;let N=M.buffer,P=M.type;s(o,1),a.bindBuffer(34962,N),a.vertexAttribPointer(o,3,P,!1,12,0)}else if(void 0!==m){let Q=m[n];if(void 0!==Q)switch(Q.length){case 2:a.vertexAttrib2fv(o,Q);break;case 3:a.vertexAttrib3fv(o,Q);break;case 4:a.vertexAttrib4fv(o,Q);break;default:a.vertexAttrib1fv(o,Q)}}}}t()}(e,i,n,v),null!==w&&a.bindBuffer(34963,c.get(w).buffer))},reset:v,resetDefaultState:w,dispose:function(){for(let a in v(),h){let b=h[a];for(let c in b){let d=b[c];for(let e in d)n(d[e].object),delete d[e];delete b[c]}delete h[a]}},releaseStatesOfGeometry:function(a){if(void 0===h[a.id])return;let b=h[a.id];for(let c in b){let d=b[c];for(let e in d)n(d[e].object),delete d[e];delete b[c]}delete h[a.id]},releaseStatesOfProgram:function(a){for(let b in h){let c=h[b];if(void 0===c[a.id])continue;let d=c[a.id];for(let e in d)n(d[e].object),delete d[e];delete c[a.id]}},initAttributes:p,enableAttribute:r,disableUnusedAttributes:t}}function bz(a,b,c,d){let e=d.isWebGL2,f;this.setMode=function(a){f=a},this.render=function(b,d){a.drawArrays(f,b,d),c.update(d,f,1)},this.renderInstances=function(d,g,h){if(0===h)return;let i,l;if(e)i=a,l="drawArraysInstanced";else if(i=b.get("ANGLE_instanced_arrays"),l="drawArraysInstancedANGLE",null===i)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");i[l](f,d,g,h),c.update(g,f,h)}}function bA(a,b,c){let d;function e(b){if("highp"===b){if(a.getShaderPrecisionFormat(35633,36338).precision>0&&a.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";b="mediump"}return"mediump"===b&&a.getShaderPrecisionFormat(35633,36337).precision>0&&a.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}let f="undefined"!=typeof WebGL2RenderingContext&&a instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&a instanceof WebGL2ComputeRenderingContext,g=void 0!==c.precision?c.precision:"highp",h=e(g);h!==g&&(console.warn("THREE.WebGLRenderer:",g,"not supported, using",h,"instead."),g=h);let i=!0===c.logarithmicDepthBuffer,l=a.getParameter(34930),m=a.getParameter(35660),n=a.getParameter(3379),o=a.getParameter(34076),p=a.getParameter(34921),r=a.getParameter(36347),s=a.getParameter(36348),t=a.getParameter(36349),u=m>0,v=f||b.has("OES_texture_float");return{isWebGL2:f,getMaxAnisotropy:function(){if(void 0!==d)return d;if(!0===b.has("EXT_texture_filter_anisotropic")){let c=b.get("EXT_texture_filter_anisotropic");d=a.getParameter(c.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else d=0;return d},getMaxPrecision:e,precision:g,logarithmicDepthBuffer:i,maxTextures:l,maxVertexTextures:m,maxTextureSize:n,maxCubemapSize:o,maxAttributes:p,maxVertexUniforms:r,maxVaryings:s,maxFragmentUniforms:t,vertexTextures:u,floatFragmentTextures:v,floatVertexTextures:u&&v,maxSamples:f?a.getParameter(36183):0}}function bB(a){let b=this,c=null,d=0,e=!1,f=!1,g=new Kt,h=new B,i={value:null,needsUpdate:!1};function l(){i.value!==c&&(i.value=c,i.needsUpdate=d>0),b.numPlanes=d,b.numIntersection=0}function m(a,c,d,e){let f=null!==a?a.length:0,l=null;if(0!==f){if(l=i.value,!0!==e||null===l){let m=d+4*f,n=c.matrixWorldInverse;h.getNormalMatrix(n),(null===l||l.length0){let h=a.getRenderTarget(),i=new un(g.height/2);return i.fromEquirectangularTexture(a,e),b.set(e,i),a.setRenderTarget(h),e.addEventListener("dispose",d),c(i.texture,e.mapping)}return null}}}return e},dispose:function(){b=new WeakMap}}}function bD(a){let b={};function c(c){if(void 0!==b[c])return b[c];let d;switch(c){case"WEBGL_depth_texture":d=a.getExtension("WEBGL_depth_texture")||a.getExtension("MOZ_WEBGL_depth_texture")||a.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:d=a.getExtension(c)}return b[c]=d,d}return{has:function(a){return null!==c(a)},init:function(a){a.isWebGL2?c("EXT_color_buffer_float"):(c("WEBGL_depth_texture"),c("OES_texture_float"),c("OES_texture_half_float"),c("OES_texture_half_float_linear"),c("OES_standard_derivatives"),c("OES_element_index_uint"),c("OES_vertex_array_object"),c("ANGLE_instanced_arrays")),c("OES_texture_float_linear"),c("EXT_color_buffer_half_float")},get:function(a){let b=c(a);return null===b&&console.warn("THREE.WebGLRenderer: "+a+" extension not supported."),b}}}function bE(a,b,c,d){let e={},f=new WeakMap;function g(a){let h=a.target;for(let i in null!==h.index&&b.remove(h.index),h.attributes)b.remove(h.attributes[i]);h.removeEventListener("dispose",g),delete e[h.id];let l=f.get(h);l&&(b.remove(l),f.delete(h)),d.releaseStatesOfGeometry(h),!0===h.isInstancedBufferGeometry&&delete h._maxInstanceCount,c.memory.geometries--}function h(a){let c=[],d=a.index,e=a.attributes.position,g=0;if(null!==d){let h=d.array;g=d.version;for(let i=0,l=h.length;i65535?Se:Me)(c,1);w.version=g;let x=f.get(a);x&&b.remove(x),f.set(a,w)}return{get:function(a,b){return!0===e[b.id]||(b.addEventListener("dispose",g),e[b.id]=!0,c.memory.geometries++),b},update:function(a){let c=a.attributes;for(let d in c)b.update(c[d],34962);let e=a.morphAttributes;for(let f in e){let g=e[f];for(let h=0,i=g.length;h0)return a;let e=b*c,f=bP[e];if(void 0===f&&(f=new Float32Array(e),bP[e]=f),0!==b){d.toArray(f,0);for(let g=1,h=0;g!==b;++g)h+=c,a[g].toArray(f,h)}return f}function bV(a,b){if(a.length!==b.length)return!1;for(let c=0,d=a.length;c/gm;function cP(a){return a.replace(cO,cQ)}function cQ(a,b){let c=bu[b];if(void 0===c)throw Error("Can not resolve #include <"+b+">");return cP(c)}let cR=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,cS=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function cT(a){return a.replace(cS,cV).replace(cR,cU)}function cU(a,b,c,d){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),cV(0,b,c,d)}function cV(a,b,c,d){let e="";for(let f=parseInt(b);f0?a.gammaFactor:1,u=c.isWebGL2?"":[(g=c).extensionDerivatives||g.envMapCubeUV||g.bumpMap||g.tangentSpaceNormalMap||g.clearcoatNormalMap||g.flatShading||"physical"===g.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(g.extensionFragDepth||g.logarithmicDepthBuffer)&&g.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",g.extensionDrawBuffers&&g.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(g.extensionShaderTextureLOD||g.envMap)&&g.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(cL).join("\n"),v=function(a){let b=[];for(let c in a){let d=a[c];!1!==d&&b.push("#define "+c+" "+d)}return b.join("\n")}(i),w=h.createProgram(),x,y,z=c.glslVersion?"#version "+c.glslVersion+"\n":"";c.isRawShaderMaterial?((x=[v].filter(cL).join("\n")).length>0&&(x+="\n"),(y=[u,v].filter(cL).join("\n")).length>0&&(y+="\n")):(x=[cW(c),"#define SHADER_NAME "+c.shaderName,v,c.instancing?"#define USE_INSTANCING":"",c.instancingColor?"#define USE_INSTANCING_COLOR":"",c.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+t,"#define MAX_BONES "+c.maxBones,c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.envMap?"#define "+r:"",c.lightMap?"#define USE_LIGHTMAP":"",c.aoMap?"#define USE_AOMAP":"",c.emissiveMap?"#define USE_EMISSIVEMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":"",c.normalMap&&c.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",c.normalMap&&c.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",c.clearcoatMap?"#define USE_CLEARCOATMAP":"",c.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",c.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",c.displacementMap&&c.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.roughnessMap?"#define USE_ROUGHNESSMAP":"",c.metalnessMap?"#define USE_METALNESSMAP":"",c.alphaMap?"#define USE_ALPHAMAP":"",c.transmissionMap?"#define USE_TRANSMISSIONMAP":"",c.vertexTangents?"#define USE_TANGENT":"",c.vertexColors?"#define USE_COLOR":"",c.vertexAlphas?"#define USE_COLOR_ALPHA":"",c.vertexUvs?"#define USE_UV":"",c.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",c.flatShading?"#define FLAT_SHADED":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals&& !1===c.flatShading?"#define USE_MORPHNORMALS":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.flipSided?"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapEnabled?"#define "+o:"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"",c.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",c.logarithmicDepthBuffer&&c.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS"," attribute vec3 morphTarget0;"," attribute vec3 morphTarget1;"," attribute vec3 morphTarget2;"," attribute vec3 morphTarget3;"," #ifdef USE_MORPHNORMALS"," attribute vec3 morphNormal0;"," attribute vec3 morphNormal1;"," attribute vec3 morphNormal2;"," attribute vec3 morphNormal3;"," #else"," attribute vec3 morphTarget4;"," attribute vec3 morphTarget5;"," attribute vec3 morphTarget6;"," attribute vec3 morphTarget7;"," #endif","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif","\n"].filter(cL).join("\n"),y=[u,cW(c),"#define SHADER_NAME "+c.shaderName,v,c.alphaTest?"#define ALPHATEST "+c.alphaTest+(c.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+t,c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.matcap?"#define USE_MATCAP":"",c.envMap?"#define USE_ENVMAP":"",c.envMap?"#define "+p:"",c.envMap?"#define "+r:"",c.envMap?"#define "+s:"",c.lightMap?"#define USE_LIGHTMAP":"",c.aoMap?"#define USE_AOMAP":"",c.emissiveMap?"#define USE_EMISSIVEMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":"",c.normalMap&&c.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",c.normalMap&&c.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",c.clearcoatMap?"#define USE_CLEARCOATMAP":"",c.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",c.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.roughnessMap?"#define USE_ROUGHNESSMAP":"",c.metalnessMap?"#define USE_METALNESSMAP":"",c.alphaMap?"#define USE_ALPHAMAP":"",c.sheen?"#define USE_SHEEN":"",c.transmissionMap?"#define USE_TRANSMISSIONMAP":"",c.vertexTangents?"#define USE_TANGENT":"",c.vertexColors||c.instancingColor?"#define USE_COLOR":"",c.vertexAlphas?"#define USE_COLOR_ALPHA":"",c.vertexUvs?"#define USE_UV":"",c.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",c.gradientMap?"#define USE_GRADIENTMAP":"",c.flatShading?"#define FLAT_SHADED":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.flipSided?"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapEnabled?"#define "+o:"",c.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",c.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",c.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",c.logarithmicDepthBuffer&&c.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(c.extensionShaderTextureLOD||c.envMap)&&c.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==c.toneMapping?"#define TONE_MAPPING":"",0!==c.toneMapping?bu.tonemapping_pars_fragment:"",0!==c.toneMapping?function(a,b){let c;switch(b){case 1:c="Linear";break;case 2:c="Reinhard";break;case 3:c="OptimizedCineon";break;case 4:c="ACESFilmic";break;case 5:c="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",b),c="Linear"}return"vec3 "+a+"( vec3 color ) { return "+c+"ToneMapping( color ); }"}("toneMapping",c.toneMapping):"",c.dithering?"#define DITHERING":"",bu.encodings_pars_fragment,c.map?cK("mapTexelToLinear",c.mapEncoding):"",c.matcap?cK("matcapTexelToLinear",c.matcapEncoding):"",c.envMap?cK("envMapTexelToLinear",c.envMapEncoding):"",c.emissiveMap?cK("emissiveMapTexelToLinear",c.emissiveMapEncoding):"",c.lightMap?cK("lightMapTexelToLinear",c.lightMapEncoding):"",function(a,b){let c=cI(b);return"vec4 "+a+"( vec4 value ) { return LinearTo"+c[0]+c[1]+"; }"}("linearToOutputTexel",c.outputEncoding),c.depthPacking?"#define DEPTH_PACKING "+c.depthPacking:"","\n"].filter(cL).join("\n")),l=cP(l),l=cN(l=cM(l,c),c),m=cP(m),m=cN(m=cM(m,c),c),l=cT(l),m=cT(m),c.isWebGL2&& !0!==c.isRawShaderMaterial&&(z="#version 300 es\n",x="#define attribute in\n#define varying out\n#define texture2D texture\n"+x,y=["#define varying in",c.glslVersion===e?"":"out highp vec4 pc_fragColor;",c.glslVersion===e?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+y);let C=z+y+m,D=cG(h,35633,z+x+l),E=cG(h,35632,C);if(h.attachShader(w,D),h.attachShader(w,E),void 0!==c.index0AttributeName?h.bindAttribLocation(w,0,c.index0AttributeName):!0===c.morphTargets&&h.bindAttribLocation(w,0,"position"),h.linkProgram(w),a.debug.checkShaderErrors){let F=h.getProgramInfoLog(w).trim(),I=h.getShaderInfoLog(D).trim(),J=h.getShaderInfoLog(E).trim(),K=!0,L=!0;if(!1===h.getProgramParameter(w,35714)){K=!1;let M=cJ(h,D,"vertex"),N=cJ(h,E,"fragment");console.error("THREE.WebGLProgram: shader error: ",h.getError(),"35715",h.getProgramParameter(w,35715),"gl.getProgramInfoLog",F,M,N)}else""!==F?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",F):""!==I&&""!==J||(L=!1);L&&(this.diagnostics={runnable:K,programLog:F,vertexShader:{log:I,prefix:x},fragmentShader:{log:J,prefix:y}})}let P,Q;return h.deleteShader(D),h.deleteShader(E),this.getUniforms=function(){return void 0===P&&(P=new cF(h,w)),P},this.getAttributes=function(){return void 0===Q&&(Q=function(a,b){let c={},d=a.getProgramParameter(b,35721);for(let e=0;e0,maxBones:z,useVertexTexture:l,morphTargets:e.morphTargets,morphNormals:e.morphNormals,numDirLights:g.directional.length,numPointLights:g.point.length,numSpotLights:g.spot.length,numRectAreaLights:g.rectArea.length,numHemiLights:g.hemi.length,numDirLightShadows:g.directionalShadowMap.length,numPointLightShadows:g.pointShadowMap.length,numSpotLightShadows:g.spotShadowMap.length,numClippingPlanes:f.numPlanes,numClipIntersection:f.numIntersection,dithering:e.dithering,shadowMapEnabled:a.shadowMap.enabled&&r.length>0,shadowMapType:a.shadowMap.type,toneMapping:e.toneMapped?a.toneMapping:0,physicallyCorrectLights:a.physicallyCorrectLights,premultipliedAlpha:e.premultipliedAlpha,alphaTest:e.alphaTest,doubleSided:2===e.side,flipSided:1===e.side,depthPacking:void 0!==e.depthPacking&&e.depthPacking,index0AttributeName:e.index0AttributeName,extensionDerivatives:e.extensions&&e.extensions.derivatives,extensionFragDepth:e.extensions&&e.extensions.fragDepth,extensionDrawBuffers:e.extensions&&e.extensions.drawBuffers,extensionShaderTextureLOD:e.extensions&&e.extensions.shaderTextureLOD,rendererExtensionFragDepth:h||c.has("EXT_frag_depth"),rendererExtensionDrawBuffers:h||c.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:h||c.has("EXT_shader_texture_lod"),customProgramCacheKey:e.customProgramCacheKey()}},getProgramCacheKey:function(b){let c=[];if(b.shaderID?c.push(b.shaderID):(c.push(b.fragmentShader),c.push(b.vertexShader)),void 0!==b.defines)for(let d in b.defines)c.push(d),c.push(b.defines[d]);if(!1===b.isRawShaderMaterial){for(let e=0;e1&&d.sort(a||c$),e.length>1&&e.sort(b||c_)}}}function c1(a){let b=new WeakMap;return{get:function(c,d){let e;return!1===b.has(c)?(e=new c0(a),b.set(c,[e])):d>=b.get(c).length?(e=new c0(a),b.get(c).push(e)):e=b.get(c)[d],e},dispose:function(){b=new WeakMap}}}function c2(){let a={};return{get:function(b){if(void 0!==a[b.id])return a[b.id];let c;switch(b.type){case"DirectionalLight":c={direction:new q,color:new xe};break;case"SpotLight":c={position:new q,direction:new q,color:new xe,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":c={position:new q,color:new xe,distance:0,decay:0};break;case"HemisphereLight":c={direction:new q,skyColor:new xe,groundColor:new xe};break;case"RectAreaLight":c={color:new xe,position:new q,halfWidth:new q,halfHeight:new q}}return a[b.id]=c,c}}}let c3=0;function c4(a,b){return(b.castShadow?1:0)-(a.castShadow?1:0)}function c5(a,b){let c=new c2,d=function(){let a={};return{get:function(b){if(void 0!==a[b.id])return a[b.id];let c;switch(b.type){case"DirectionalLight":case"SpotLight":c={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new O};break;case"PointLight":c={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new O,shadowCameraNear:1,shadowCameraFar:1e3}}return a[b.id]=c,c}}}(),e={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let f=0;f<9;f++)e.probe.push(new q);let g=new q,h=new Mt,i=new Mt;return{setup:function(f){let g=0,h=0,i=0;for(let l=0;l<9;l++)e.probe[l].set(0,0,0);let m=0,n=0,o=0,p=0,r=0,s=0,t=0,u=0;f.sort(c4);for(let v=0,w=f.length;v0&&(b.isWebGL2|| !0===a.has("OES_texture_float_linear")?(e.rectAreaLTC1=bv.LTC_FLOAT_1,e.rectAreaLTC2=bv.LTC_FLOAT_2):!0===a.has("OES_texture_half_float_linear")?(e.rectAreaLTC1=bv.LTC_HALF_1,e.rectAreaLTC2=bv.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),e.ambient[0]=g,e.ambient[1]=h,e.ambient[2]=i;let T=e.hash;T.directionalLength===m&&T.pointLength===n&&T.spotLength===o&&T.rectAreaLength===p&&T.hemiLength===r&&T.numDirectionalShadows===s&&T.numPointShadows===t&&T.numSpotShadows===u||(e.directional.length=m,e.spot.length=o,e.rectArea.length=p,e.point.length=n,e.hemi.length=r,e.directionalShadow.length=s,e.directionalShadowMap.length=s,e.pointShadow.length=t,e.pointShadowMap.length=t,e.spotShadow.length=u,e.spotShadowMap.length=u,e.directionalShadowMatrix.length=s,e.pointShadowMatrix.length=t,e.spotShadowMatrix.length=u,T.directionalLength=m,T.pointLength=n,T.spotLength=o,T.rectAreaLength=p,T.hemiLength=r,T.numDirectionalShadows=s,T.numPointShadows=t,T.numSpotShadows=u,e.version=c3++)},setupView:function(a,b){let c=0,d=0,f=0,l=0,m=0,n=b.matrixWorldInverse;for(let o=0,p=a.length;o=c.get(d).length?(f=new c6(a,b),c.get(d).push(f)):f=c.get(d)[e],f},dispose:function(){c=new WeakMap}}}class xr extends aN{constructor(a){super(),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(a)}copy(a){return super.copy(a),this.depthPacking=a.depthPacking,this.skinning=a.skinning,this.morphTargets=a.morphTargets,this.map=a.map,this.alphaMap=a.alphaMap,this.displacementMap=a.displacementMap,this.displacementScale=a.displacementScale,this.displacementBias=a.displacementBias,this.wireframe=a.wireframe,this.wireframeLinewidth=a.wireframeLinewidth,this}}xr.prototype.isMeshDepthMaterial=!0;class yr extends aN{constructor(a){super(),this.type="MeshDistanceMaterial",this.referencePosition=new q,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(a)}copy(a){return super.copy(a),this.referencePosition.copy(a.referencePosition),this.nearDistance=a.nearDistance,this.farDistance=a.farDistance,this.skinning=a.skinning,this.morphTargets=a.morphTargets,this.map=a.map,this.alphaMap=a.alphaMap,this.displacementMap=a.displacementMap,this.displacementScale=a.displacementScale,this.displacementBias=a.displacementBias,this}}function c8(a,c,e){let f=new fn,g=new O,h=new O,i=new k,l=[],m=[],n={},o=e.maxTextureSize,p={0:1,1:0,2:2},r=new sn({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new O},radius:{value:4}},vertexShader:"void main() {\n gl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONTAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),s=r.clone();s.defines.HORIZONTAL_PASS=1;let t=new Ne;t.setAttribute("position",new be(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let u=new Ke(t,r),v=this;function w(b,d){let e=c.update(u);r.uniforms.shadow_pass.value=b.map.texture,r.uniforms.resolution.value=b.mapSize,r.uniforms.radius.value=b.radius,a.setRenderTarget(b.mapPass),a.clear(),a.renderBufferDirect(d,null,e,r,u,null),s.uniforms.shadow_pass.value=b.mapPass.texture,s.uniforms.resolution.value=b.mapSize,s.uniforms.radius.value=b.radius,a.setRenderTarget(b.map),a.clear(),a.renderBufferDirect(d,null,e,s,u,null)}function x(a,b,c){let d=a<<0|b<<1|c<<2,e=l[d];return void 0===e&&(e=new xr({depthPacking:3201,morphTargets:a,skinning:b}),l[d]=e),e}function y(a,b,c){let d=a<<0|b<<1|c<<2,e=m[d];return void 0===e&&(e=new yr({morphTargets:a,skinning:b}),m[d]=e),e}function z(b,c,d,e,f,g,h){let i=null,l=x,m=b.customDepthMaterial;if(!0===e.isPointLight&&(l=y,m=b.customDistanceMaterial),void 0===m){let o=!1;!0===d.morphTargets&&(o=c.morphAttributes&&c.morphAttributes.position&&c.morphAttributes.position.length>0);let r=!1;!0===b.isSkinnedMesh&&(!0===d.skinning?r=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",b)),i=l(o,r,!0===b.isInstancedMesh)}else i=m;if(a.localClippingEnabled&& !0===d.clipShadows&&0!==d.clippingPlanes.length){let s=i.uuid,t=d.uuid,u=n[s];void 0===u&&(u={},n[s]=u);let v=u[t];void 0===v&&(v=i.clone(),u[t]=v),i=v}return i.visible=d.visible,i.wireframe=d.wireframe,i.side=3===h?null!==d.shadowSide?d.shadowSide:d.side:null!==d.shadowSide?d.shadowSide:p[d.side],i.clipShadows=d.clipShadows,i.clippingPlanes=d.clippingPlanes,i.clipIntersection=d.clipIntersection,i.wireframeLinewidth=d.wireframeLinewidth,i.linewidth=d.linewidth,!0===e.isPointLight&& !0===i.isMeshDistanceMaterial&&(i.referencePosition.setFromMatrixPosition(e.matrixWorld),i.nearDistance=f,i.farDistance=g),i}function C(b,d,e,g,h){if(!1===b.visible)return;if(b.layers.test(d.layers)&&(b.isMesh||b.isLine||b.isPoints)&&(b.castShadow||b.receiveShadow&&3===h)&&(!b.frustumCulled||f.intersectsObject(b))){b.modelViewMatrix.multiplyMatrices(e.matrixWorldInverse,b.matrixWorld);let i=c.update(b),l=b.material;if(Array.isArray(l)){let m=i.groups;for(let n=0,o=m.length;no||g.y>o)&&(g.x>o&&(h.x=Math.floor(o/y.x),g.x=h.x*y.x,x.mapSize.x=h.x),g.y>o&&(h.y=Math.floor(o/y.y),g.y=h.y*y.y,x.mapSize.y=h.y)),null===x.map&&!x.isPointLightShadow&&3===this.type){let z={minFilter:d,magFilter:d,format:1023};x.map=new W(g.x,g.y,z),x.map.texture.name=u.name+".shadowMap",x.mapPass=new W(g.x,g.y,z),x.camera.updateProjectionMatrix()}if(null===x.map){let D={minFilter:b,magFilter:b,format:1023};x.map=new W(g.x,g.y,D),x.map.texture.name=u.name+".shadowMap",x.camera.updateProjectionMatrix()}a.setRenderTarget(x.map),a.clear();let E=x.getViewportCount();for(let F=0;F=1:-1!==J.indexOf("OpenGL ES")&&(F=parseFloat(/^OpenGL ES (\d)/.exec(J)[1])>=2);let K=null,L={},M=new k(0,0,a.canvas.width,a.canvas.height),N=new k(0,0,a.canvas.width,a.canvas.height);function P(b,c,d){let e=new Uint8Array(4),f=a.createTexture();a.bindTexture(b,f),a.texParameteri(b,10241,9728),a.texParameteri(b,10240,9728);for(let g=0;gd||a.height>d)&&(e=d/Math.max(a.width,a.height)),e<1|| !0===b){if("undefined"!=typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&a instanceof ImageBitmap){let f=b?p:Math.floor,g=f(e*a.width),h=f(e*a.height);void 0===v&&(v=y(g,h));let i=c?y(g,h):v;return i.width=g,i.height=h,i.getContext("2d").drawImage(a,0,0,g,h),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+a.width+"x"+a.height+") to ("+g+"x"+h+")."),i}return"data"in a&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+a.width+"x"+a.height+")."),a}return a}function C(a){return o(a.width)&&o(a.height)}function D(a,c){return a.generateMipmaps&&c&&a.minFilter!==b&&a.minFilter!==d}function E(a,b,d,e){c.generateMipmap(a),g.get(b).__maxMipLevel=Math.log2(Math.max(d,e))}function F(a,b,d){if(!1===m)return b;if(null!==a){if(void 0!==c[a])return c[a];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+a+"'")}let f=b;return 6403===b&&(5126===d&&(f=33326),5131===d&&(f=33325),5121===d&&(f=33321)),6407===b&&(5126===d&&(f=34837),5131===d&&(f=34843),5121===d&&(f=32849)),6408===b&&(5126===d&&(f=34836),5131===d&&(f=34842),5121===d&&(f=32856)),33325!==f&&33326!==f&&34842!==f&&34836!==f||e.get("EXT_color_buffer_float"),f}function I(a){return a===b||1004===a||1005===a?9728:9729}function J(a){let b=a.target;b.removeEventListener("dispose",J),function(a){let b=g.get(a);void 0!==b.__webglInit&&(c.deleteTexture(b.__webglTexture),g.remove(a))}(b),b.isVideoTexture&&u.delete(b),l.memory.textures--}function K(a){let b=a.target;b.removeEventListener("dispose",K),function(a){let b=a.texture,d=g.get(a),e=g.get(b);if(a){if(void 0!==e.__webglTexture&&c.deleteTexture(e.__webglTexture),a.depthTexture&&a.depthTexture.dispose(),a.isWebGLCubeRenderTarget)for(let f=0;f<6;f++)c.deleteFramebuffer(d.__webglFramebuffer[f]),d.__webglDepthbuffer&&c.deleteRenderbuffer(d.__webglDepthbuffer[f]);else c.deleteFramebuffer(d.__webglFramebuffer),d.__webglDepthbuffer&&c.deleteRenderbuffer(d.__webglDepthbuffer),d.__webglMultisampledFramebuffer&&c.deleteFramebuffer(d.__webglMultisampledFramebuffer),d.__webglColorRenderbuffer&&c.deleteRenderbuffer(d.__webglColorRenderbuffer),d.__webglDepthRenderbuffer&&c.deleteRenderbuffer(d.__webglDepthRenderbuffer);g.remove(b),g.remove(a)}}(b),l.memory.textures--}let L=0;function M(a,b){let c=g.get(a);if(a.isVideoTexture&&function(a){let b=l.render.frame;u.get(a)!==b&&(u.set(a,b),a.update())}(a),a.version>0&&c.__version!==a.version){let d=a.image;if(void 0===d)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==d.complete)return void T(c,a,b);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}f.activeTexture(33984+b),f.bindTexture(3553,c.__webglTexture)}function N(a,b){let d=g.get(a);a.version>0&&d.__version!==a.version?function(a,b,d){if(6!==b.image.length)return;S(a,b),f.activeTexture(33984+d),f.bindTexture(34067,a.__webglTexture),c.pixelStorei(37440,b.flipY),c.pixelStorei(37441,b.premultiplyAlpha),c.pixelStorei(3317,b.unpackAlignment),c.pixelStorei(37443,0);let e=b&&(b.isCompressedTexture||b.image[0].isCompressedTexture),g=b.image[0]&&b.image[0].isDataTexture,h=[];for(let l=0;l<6;l++)h[l]=e||g?g?b.image[l].image:b.image[l]:z(b.image[l],!1,!0,r);let n=h[0],o=C(n)||m,p=i.convert(b.format),s=i.convert(b.type),t=F(b.internalFormat,p,s),u;if(R(34067,b,o),e){for(let v=0;v<6;v++){u=h[v].mipmaps;for(let w=0;w1||g.get(i).__currentAnisotropy)&&(c.texParameterf(f,n.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(i.anisotropy,h.getMaxAnisotropy())),g.get(i).__currentAnisotropy=i.anisotropy)}}function S(a,b){void 0===a.__webglInit&&(a.__webglInit=!0,b.addEventListener("dispose",J),a.__webglTexture=c.createTexture(),l.memory.textures++)}function T(e,g,h){var l;let n=3553;g.isDataTexture2DArray&&(n=35866),g.isDataTexture3D&&(n=32879),S(e,g),f.activeTexture(33984+h),f.bindTexture(n,e.__webglTexture),c.pixelStorei(37440,g.flipY),c.pixelStorei(37441,g.premultiplyAlpha),c.pixelStorei(3317,g.unpackAlignment),c.pixelStorei(37443,0);let o=(l=g,!m&&(l.wrapS!==a||l.wrapT!==a||l.minFilter!==b&&l.minFilter!==d)&& !1===C(g.image)),p=z(g.image,o,!1,s),r=C(p)||m,t=i.convert(g.format),u,v=i.convert(g.type),w=F(g.internalFormat,t,v);R(n,g,r);let x=g.mipmaps;if(g.isDepthTexture)w=6402,m?w=1015===g.type?36012:1014===g.type?33190:1020===g.type?35056:33189:1015===g.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===g.format&&6402===w&&1012!==g.type&&1014!==g.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),g.type=1012,v=i.convert(g.type)),1027===g.format&&6402===w&&(w=34041,1020!==g.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),g.type=1020,v=i.convert(g.type))),f.texImage2D(3553,0,w,p.width,p.height,0,t,v,null);else if(g.isDataTexture){if(x.length>0&&r){for(let y=0,I=x.length;y0&&r){for(let L=0,M=x.length;L=n&&console.warn("THREE.WebGLTextures: Trying to use "+a+" texture units while this GPU supports only "+n),L+=1,a},this.resetTextureUnits=function(){L=0},this.setTexture2D=M,this.setTexture2DArray=function(a,b){let c=g.get(a);a.version>0&&c.__version!==a.version?T(c,a,b):(f.activeTexture(33984+b),f.bindTexture(35866,c.__webglTexture))},this.setTexture3D=function(a,b){let c=g.get(a);a.version>0&&c.__version!==a.version?T(c,a,b):(f.activeTexture(33984+b),f.bindTexture(32879,c.__webglTexture))},this.setTextureCube=N,this.setupRenderTarget=function(a){let b=a.texture,d=g.get(a),e=g.get(b);a.addEventListener("dispose",K),e.__webglTexture=c.createTexture(),e.__version=b.version,l.memory.textures++;let h=!0===a.isWebGLCubeRenderTarget,n=!0===a.isWebGLMultisampleRenderTarget,o=b.isDataTexture3D||b.isDataTexture2DArray,p=C(a)||m;if(m&&1022===b.format&&(1015===b.type||1016===b.type)&&(b.format=1023,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),h){d.__webglFramebuffer=[];for(let r=0;r<6;r++)d.__webglFramebuffer[r]=c.createFramebuffer()}else if(d.__webglFramebuffer=c.createFramebuffer(),n){if(m){d.__webglMultisampledFramebuffer=c.createFramebuffer(),d.__webglColorRenderbuffer=c.createRenderbuffer(),c.bindRenderbuffer(36161,d.__webglColorRenderbuffer);let s=i.convert(b.format),t=i.convert(b.type),u=F(b.internalFormat,s,t),v=X(a);c.renderbufferStorageMultisample(36161,v,u,a.width,a.height),f.bindFramebuffer(36160,d.__webglMultisampledFramebuffer),c.framebufferRenderbuffer(36160,36064,36161,d.__webglColorRenderbuffer),c.bindRenderbuffer(36161,null),a.depthBuffer&&(d.__webglDepthRenderbuffer=c.createRenderbuffer(),V(d.__webglDepthRenderbuffer,a,!0)),f.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")}if(h){f.bindTexture(34067,e.__webglTexture),R(34067,b,p);for(let w=0;w<6;w++)U(d.__webglFramebuffer[w],a,36064,34069+w);D(b,p)&&E(34067,b,a.width,a.height),f.bindTexture(34067,null)}else{let x=3553;o&&(m?x=b.isDataTexture3D?32879:35866:console.warn("THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.")),f.bindTexture(x,e.__webglTexture),R(x,b,p),U(d.__webglFramebuffer,a,36064,x),D(b,p)&&E(3553,b,a.width,a.height),f.bindTexture(3553,null)}a.depthBuffer&&function(a){let b=g.get(a),d=!0===a.isWebGLCubeRenderTarget;if(a.depthTexture){if(d)throw Error("target.depthTexture not supported in Cube render targets");!function(a,b){if(b&&b.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");if(f.bindFramebuffer(36160,a),!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");g.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0),M(b.depthTexture,0);let d=g.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)c.framebufferTexture2D(36160,36096,3553,d,0);else{if(1027!==b.depthTexture.format)throw Error("Unknown depthTexture format");c.framebufferTexture2D(36160,33306,3553,d,0)}}(b.__webglFramebuffer,a)}else if(d){b.__webglDepthbuffer=[];for(let e=0;e<6;e++)f.bindFramebuffer(36160,b.__webglFramebuffer[e]),b.__webglDepthbuffer[e]=c.createRenderbuffer(),V(b.__webglDepthbuffer[e],a,!1)}else f.bindFramebuffer(36160,b.__webglFramebuffer),b.__webglDepthbuffer=c.createRenderbuffer(),V(b.__webglDepthbuffer,a,!1);f.bindFramebuffer(36160,null)}(a)},this.updateRenderTargetMipmap=function(a){let b=a.texture;if(D(b,C(a)||m)){let c=a.isWebGLCubeRenderTarget?34067:3553,d=g.get(b).__webglTexture;f.bindTexture(c,d),E(c,b,a.width,a.height),f.bindTexture(c,null)}},this.updateMultisampleRenderTarget=function(a){if(a.isWebGLMultisampleRenderTarget){if(m){let b=a.width,d=a.height,e=16384;a.depthBuffer&&(e|=256),a.stencilBuffer&&(e|=1024);let h=g.get(a);f.bindFramebuffer(36008,h.__webglMultisampledFramebuffer),f.bindFramebuffer(36009,h.__webglFramebuffer),c.blitFramebuffer(0,0,b,d,0,0,b,d,e,9728),f.bindFramebuffer(36008,null),f.bindFramebuffer(36009,h.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")}},this.safeSetTexture2D=function(a,b){a&&a.isWebGLRenderTarget&&(!1===Y&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),Y=!0),a=a.texture),M(a,b)},this.safeSetTextureCube=function(a,b){a&&a.isWebGLCubeRenderTarget&&(!1===$&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),$=!0),a=a.texture),N(a,b)}}function dc(a,b,c){let d=c.isWebGL2;return{convert:function(a){let c;if(1009===a)return 5121;if(1017===a)return 32819;if(1018===a)return 32820;if(1019===a)return 33635;if(1010===a)return 5120;if(1011===a)return 5122;if(1012===a)return 5123;if(1013===a)return 5124;if(1014===a)return 5125;if(1015===a)return 5126;if(1016===a)return d?5131:null!==(c=b.get("OES_texture_half_float"))?c.HALF_FLOAT_OES:null;if(1021===a)return 6406;if(1022===a)return 6407;if(1023===a)return 6408;if(1024===a)return 6409;if(1025===a)return 6410;if(1026===a)return 6402;if(1027===a)return 34041;if(1028===a)return 6403;if(1029===a)return 36244;if(1030===a)return 33319;if(1031===a)return 33320;if(1032===a)return 36248;if(1033===a)return 36249;if(33776===a||33777===a||33778===a||33779===a){if(null===(c=b.get("WEBGL_compressed_texture_s3tc")))return null;if(33776===a)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===a)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===a)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===a)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===a||35841===a||35842===a||35843===a){if(null===(c=b.get("WEBGL_compressed_texture_pvrtc")))return null;if(35840===a)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===a)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===a)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===a)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===a)return null!==(c=b.get("WEBGL_compressed_texture_etc1"))?c.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===a||37496===a)&&null!==(c=b.get("WEBGL_compressed_texture_etc"))){if(37492===a)return c.COMPRESSED_RGB8_ETC2;if(37496===a)return c.COMPRESSED_RGBA8_ETC2_EAC}return 37808===a||37809===a||37810===a||37811===a||37812===a||37813===a||37814===a||37815===a||37816===a||37817===a||37818===a||37819===a||37820===a||37821===a||37840===a||37841===a||37842===a||37843===a||37844===a||37845===a||37846===a||37847===a||37848===a||37849===a||37850===a||37851===a||37852===a||37853===a?null!==(c=b.get("WEBGL_compressed_texture_astc"))?a:null:36492===a?null!==(c=b.get("EXT_texture_compression_bptc"))?a:null:1020===a?d?34042:null!==(c=b.get("WEBGL_depth_texture"))?c.UNSIGNED_INT_24_8_WEBGL:null:void 0}}}yr.prototype.isMeshDistanceMaterial=!0;class Sr extends on{constructor(a=[]){super(),this.cameras=a}}Sr.prototype.isArrayCamera=!0;class Er extends Yt{constructor(){super(),this.type="Group"}}Er.prototype.isGroup=!0;let dd={type:"move"};class Ar{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new Er,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new Er,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new q,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new q),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new Er,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new q,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new q),this._grip}dispatchEvent(a){return null!==this._targetRay&&this._targetRay.dispatchEvent(a),null!==this._grip&&this._grip.dispatchEvent(a),null!==this._hand&&this._hand.dispatchEvent(a),this}disconnect(a){return this.dispatchEvent({type:"disconnected",data:a}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(a,b,c){let d=null,e=null,f=null,g=this._targetRay,h=this._grip,i=this._hand;if(a&&"visible-blurred"!==b.session.visibilityState){if(null!==g&&null!==(d=b.getPose(a.targetRaySpace,c))&&(g.matrix.fromArray(d.transform.matrix),g.matrix.decompose(g.position,g.rotation,g.scale),d.linearVelocity?(g.hasLinearVelocity=!0,g.linearVelocity.copy(d.linearVelocity)):g.hasLinearVelocity=!1,d.angularVelocity?(g.hasAngularVelocity=!0,g.angularVelocity.copy(d.angularVelocity)):g.hasAngularVelocity=!1,this.dispatchEvent(dd)),i&&a.hand){for(let l of(f=!0,a.hand.values())){let m=b.getJointPose(l,c);if(void 0===i.joints[l.jointName]){let n=new Er;n.matrixAutoUpdate=!1,n.visible=!1,i.joints[l.jointName]=n,i.add(n)}let o=i.joints[l.jointName];null!==m&&(o.matrix.fromArray(m.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.jointRadius=m.radius),o.visible=null!==m}let p=i.joints["index-finger-tip"],r=i.joints["thumb-tip"],s=p.position.distanceTo(r.position),t=.02,u=.005;i.inputState.pinching&&s>t+u?(i.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:a.handedness,target:this})):!i.inputState.pinching&&s<=t-u&&(i.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:a.handedness,target:this}))}else null!==h&&a.gripSpace&&null!==(e=b.getPose(a.gripSpace,c))&&(h.matrix.fromArray(e.transform.matrix),h.matrix.decompose(h.position,h.rotation,h.scale),e.linearVelocity?(h.hasLinearVelocity=!0,h.linearVelocity.copy(e.linearVelocity)):h.hasLinearVelocity=!1,e.angularVelocity?(h.hasAngularVelocity=!0,h.angularVelocity.copy(e.angularVelocity)):h.hasAngularVelocity=!1)}return null!==g&&(g.visible=null!==d),null!==h&&(h.visible=null!==e),null!==i&&(i.visible=null!==f),this}}class Lr extends A{constructor(a,b){super();let c=this,d=a.state,e=null,f=1,g=null,h="local-floor",i=null,l=[],m=new Map,n=new on;n.layers.enable(1),n.viewport=new k;let o=new on;o.layers.enable(2),o.viewport=new k;let p=[n,o],r=new Sr;r.layers.enable(1),r.layers.enable(2);let s=null,t=null;function u(a){let b=m.get(a.inputSource);b&&b.dispatchEvent({type:a.type,data:a.inputSource})}function v(){m.forEach(function(a,b){a.disconnect(b)}),m.clear(),s=null,t=null,d.bindXRFramebuffer(null),a.setRenderTarget(a.getRenderTarget()),D.stop(),c.isPresenting=!1,c.dispatchEvent({type:"sessionend"})}function w(a){let b=e.inputSources;for(let c=0;ce.matrixWorld.determinant(),h=aO(a,b,d,e);$.setMaterial(d,g);let i=c.index,l=c.attributes.position;if(null===i){if(void 0===l||0===l.count)return}else if(0===i.count)return;let m,n=1;!0===d.wireframe&&(i=af.getWireframeAttribute(c),n=2),(d.morphTargets||d.morphNormals)&&aq.update(e,c,d,h),au.setup(e,d,h,c,i);let o=ar;null!==i&&(m=ae.get(i),(o=as).setIndex(m));let p=null!==i?i.count:l.count,r=c.drawRange.start*n,s=c.drawRange.count*n,t=null!==f?f.start*n:0,u=null!==f?f.count*n:1/0,v=Math.max(r,t),w=Math.min(p,r+s,t+u)-1,x=Math.max(0,w-v+1);if(0!==x){if(e.isMesh)!0===d.wireframe?($.setLineWidth(d.wireframeLinewidth*V()),o.setMode(1)):o.setMode(4);else if(e.isLine){let y=d.linewidth;void 0===y&&(y=1),$.setLineWidth(y*V()),e.isLineSegments?o.setMode(1):e.isLineLoop?o.setMode(2):o.setMode(3)}else e.isPoints?o.setMode(0):e.isSprite&&o.setMode(4);if(e.isInstancedMesh)o.renderInstances(v,x,e.count);else if(c.isInstancedBufferGeometry){let z=Math.min(c.instanceCount,c._maxInstanceCount);o.renderInstances(v,x,z)}else o.render(v,x)}},this.compile=function(a,b){(o=ak.get(a)).init(),a.traverseVisible(function(a){a.isLight&&a.layers.test(b.layers)&&(o.pushLight(a),a.castShadow&&o.pushShadow(a))}),o.setupLights(),a.traverse(function(b){let c=b.material;if(c){if(Array.isArray(c))for(let d=0;d0&&aK(f,a,b),g.length>0&&aK(g,a,b),null!==w&&(ac.updateRenderTargetMipmap(w),ac.updateMultisampleRenderTarget(w)),!0===a.isScene&&a.onAfterRender(s,a,b),$.buffers.depth.setTest(!0),$.buffers.depth.setMask(!0),$.buffers.color.setMask(!0),$.setPolygonOffset(!1),au.resetDefaultState(),x=-1,y=null,r.pop(),o=r.length>0?r[r.length-1]:null,p.pop(),n=p.length>0?p[p.length-1]:null},this.getActiveCubeFace=function(){return u},this.getActiveMipmapLevel=function(){return v},this.getRenderTarget=function(){return w},this.setRenderTarget=function(a,b=0,c=0){w=a,u=b,v=c,a&& void 0===ab.get(a).__webglFramebuffer&&ac.setupRenderTarget(a);let d=null,e=!1,f=!1;if(a){let g=a.texture;(g.isDataTexture3D||g.isDataTexture2DArray)&&(f=!0);let h=ab.get(a).__webglFramebuffer;a.isWebGLCubeRenderTarget?(d=h[b],e=!0):d=a.isWebGLMultisampleRenderTarget?ab.get(a).__webglMultisampledFramebuffer:h,z.copy(a.viewport),C.copy(a.scissor),D=a.scissorTest}else z.copy(L).multiplyScalar(I).floor(),C.copy(M).multiplyScalar(I).floor(),D=N;if($.bindFramebuffer(36160,d),$.viewport(z),$.scissor(C),$.setScissorTest(D),e){let i=ab.get(a.texture);av.framebufferTexture2D(36160,36064,34069+b,i.__webglTexture,c)}else if(f){let l=ab.get(a.texture),m=b||0;av.framebufferTextureLayer(36160,36064,l.__webglTexture,c||0,m)}},this.readRenderTargetPixels=function(a,b,c,d,e,f,g){if(!a||!a.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let h=ab.get(a).__webglFramebuffer;if(a.isWebGLCubeRenderTarget&& void 0!==g&&(h=h[g]),h){$.bindFramebuffer(36160,h);try{let i=a.texture,l=i.format,m=i.type;if(1023!==l&&at.convert(l)!==av.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");let n=1016===m&&(X.has("EXT_color_buffer_half_float")||Y.isWebGL2&&X.has("EXT_color_buffer_float"));if(!(1009===m||at.convert(m)===av.getParameter(35738)||1015===m&&(Y.isWebGL2||X.has("OES_texture_float")||X.has("WEBGL_color_buffer_float"))||n))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===av.checkFramebufferStatus(36160)?b>=0&&b<=a.width-d&&c>=0&&c<=a.height-e&&av.readPixels(b,c,d,e,at.convert(l),at.convert(m),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{let o=null!==w?ab.get(w).__webglFramebuffer:null;$.bindFramebuffer(36160,o)}}},this.copyFramebufferToTexture=function(a,b,c=0){let d=Math.pow(2,-c),e=Math.floor(b.image.width*d),f=Math.floor(b.image.height*d),g=at.convert(b.format);ac.setTexture2D(b,0),av.copyTexImage2D(3553,c,g,a.x,a.y,e,f,0),$.unbindTexture()},this.copyTextureToTexture=function(a,b,c,d=0){let e=b.image.width,f=b.image.height,g=at.convert(c.format),h=at.convert(c.type);ac.setTexture2D(c,0),av.pixelStorei(37440,c.flipY),av.pixelStorei(37441,c.premultiplyAlpha),av.pixelStorei(3317,c.unpackAlignment),b.isDataTexture?av.texSubImage2D(3553,d,a.x,a.y,e,f,g,h,b.image.data):b.isCompressedTexture?av.compressedTexSubImage2D(3553,d,a.x,a.y,b.mipmaps[0].width,b.mipmaps[0].height,g,b.mipmaps[0].data):av.texSubImage2D(3553,d,a.x,a.y,g,h,b.image),0===d&&c.generateMipmaps&&av.generateMipmap(3553),$.unbindTexture()},this.copyTextureToTexture3D=function(a,b,c,d,e=0){if(s.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");let{width:f,height:g,data:h}=c.image,i=at.convert(d.format),l=at.convert(d.type),m;if(d.isDataTexture3D)ac.setTexture3D(d,0),m=32879;else{if(!d.isDataTexture2DArray)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");ac.setTexture2DArray(d,0),m=35866}av.pixelStorei(37440,d.flipY),av.pixelStorei(37441,d.premultiplyAlpha),av.pixelStorei(3317,d.unpackAlignment);let n=av.getParameter(3314),o=av.getParameter(32878),p=av.getParameter(3316),r=av.getParameter(3315),t=av.getParameter(32877);av.pixelStorei(3314,f),av.pixelStorei(32878,g),av.pixelStorei(3316,a.min.x),av.pixelStorei(3315,a.min.y),av.pixelStorei(32877,a.min.z),av.texSubImage3D(m,e,b.x,b.y,b.z,a.max.x-a.min.x+1,a.max.y-a.min.y+1,a.max.z-a.min.z+1,i,l,h),av.pixelStorei(3314,n),av.pixelStorei(32878,o),av.pixelStorei(3316,p),av.pixelStorei(3315,r),av.pixelStorei(32877,t),0===e&&d.generateMipmaps&&av.generateMipmap(m),$.unbindTexture()},this.initTexture=function(a){ac.setTexture2D(a,0),$.unbindTexture()},this.resetState=function(){u=0,v=0,w=null,$.reset(),au.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}(class extends df{}).prototype.isWebGL1Renderer=!0;class Rr{constructor(a,b=25e-5){this.name="",this.color=new xe(a),this.density=b}clone(){return new Rr(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}Rr.prototype.isFogExp2=!0;class Ir{constructor(a,b=1,c=1e3){this.name="",this.color=new xe(a),this.near=b,this.far=c}clone(){return new Ir(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}Ir.prototype.isFog=!0;class Dr extends Yt{constructor(){super(),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(a,b){return super.copy(a,b),null!==a.background&&(this.background=a.background.clone()),null!==a.environment&&(this.environment=a.environment.clone()),null!==a.fog&&(this.fog=a.fog.clone()),null!==a.overrideMaterial&&(this.overrideMaterial=a.overrideMaterial.clone()),this.autoUpdate=a.autoUpdate,this.matrixAutoUpdate=a.matrixAutoUpdate,this}toJSON(a){let b=super.toJSON(a);return null!==this.background&&(b.object.background=this.background.toJSON(a)),null!==this.environment&&(b.object.environment=this.environment.toJSON(a)),null!==this.fog&&(b.object.fog=this.fog.toJSON()),b}}Dr.prototype.isScene=!0;class Nr{constructor(a,b){this.array=a,this.stride=b,this.count=void 0!==a?a.length/b:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=l(),this.onUploadCallback=function(){}}set needsUpdate(a){!0===a&&this.version++}setUsage(a){return this.usage=a,this}copy(a){return this.array=new a.array.constructor(a.array),this.count=a.count,this.stride=a.stride,this.usage=a.usage,this}copyAt(a,b,c){a*=this.stride,c*=b.stride;for(let d=0,e=this.stride;da.far||b.push({distance:h,point:di.clone(),uv:he.getUV(di,dq,dr,ds,dt,du,dv,new O),face:null,object:this})}copy(a){return super.copy(a),void 0!==a.center&&this.center.copy(a.center),this.material=a.material,this}}).prototype.isSprite=!0;let dx=new q,dy=new k,dz=new k,dA=new q,dB=new Mt;class is extends Ke{constructor(a,b){super(a,b),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Mt,this.bindMatrixInverse=new Mt}copy(a){return super.copy(a),this.bindMode=a.bindMode,this.bindMatrix.copy(a.bindMatrix),this.bindMatrixInverse.copy(a.bindMatrixInverse),this.skeleton=a.skeleton,this}bind(a,b){this.skeleton=a,void 0===b&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),b=this.matrixWorld),this.bindMatrix.copy(b),this.bindMatrixInverse.copy(b).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){let a=new k,b=this.geometry.attributes.skinWeight;for(let c=0,d=b.count;ch)continue;n.applyMatrix4(this.matrixWorld);let w=a.ray.origin.distanceTo(n);wa.far||b.push({distance:w,point:m.clone().applyMatrix4(this.matrixWorld),index:s,face:null,faceIndex:null,object:this})}else for(let x=Math.max(0,f.start),y=Math.min(r.count,f.start+f.count)-1;xh)continue;n.applyMatrix4(this.matrixWorld);let z=a.ray.origin.distanceTo(n);za.far||b.push({distance:z,point:m.clone().applyMatrix4(this.matrixWorld),index:x,face:null,faceIndex:null,object:this})}}else c.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}updateMorphTargets(){let a=this.geometry;if(a.isBufferGeometry){let b=a.morphAttributes,c=Object.keys(b);if(c.length>0){let d=b[c[0]];if(void 0!==d){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,f=d.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}fs.prototype.isLine=!0;let dL=new q,dM=new q;class xs extends fs{constructor(a,b){super(a,b),this.type="LineSegments"}computeLineDistances(){let a=this.geometry;if(a.isBufferGeometry){if(null===a.index){let b=a.attributes.position,c=[];for(let d=0,e=b.count;d0){let d=b[c[0]];if(void 0!==d){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,f=d.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}function dR(a,b,c,d,e,f,g){let h=dO.distanceSqToPoint(a);if(he.far)return;f.push({distance:l,distanceToRay:Math.sqrt(h),point:i,index:b,face:null,object:g})}}Ss.prototype.isPoints=!0,(class extends G{constructor(a,b,c,e,f,g,h,i,l){super(a,b,c,e,f,g,h,i,l),this.format=void 0!==h?h:1022,this.minFilter=void 0!==g?g:d,this.magFilter=void 0!==f?f:d,this.generateMipmaps=!1;let m=this;"requestVideoFrameCallback"in a&&a.requestVideoFrameCallback(function b(){m.needsUpdate=!0,a.requestVideoFrameCallback(b)})}clone(){return new this.constructor(this.image).copy(this)}update(){let a=this.image;!1=="requestVideoFrameCallback"in a&&a.readyState>=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}).prototype.isVideoTexture=!0,(class extends G{constructor(a,b,c,d,e,f,g,h,i,l,m,n){super(null,f,g,h,i,l,d,e,m,n),this.image={width:b,height:c},this.mipmaps=a,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isCompressedTexture=!0,(class extends G{constructor(a,b,c,d,e,f,g,h,i){super(a,b,c,d,e,f,g,h,i),this.needsUpdate=!0}}).prototype.isCanvasTexture=!0,(class extends G{constructor(a,c,d,e,f,g,h,i,l,m){if(1026!==(m=void 0!==m?m:1026)&&1027!==m)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===d&&1026===m&&(d=1012),void 0===d&&1027===m&&(d=1020),super(null,e,f,g,h,i,m,d,l),this.image={width:a,height:c},this.magFilter=void 0!==h?h:b,this.minFilter=void 0!==i?i:b,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isDepthTexture=!0;class Ts extends Ne{constructor(a=1,b=8,c=0,d=2*Math.PI){super(),this.type="CircleGeometry",this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d},b=Math.max(3,b);let e=[],f=[],g=[],h=[],i=new q,l=new O;f.push(0,0,0),g.push(0,0,1),h.push(.5,.5);for(let m=0,n=3;m<=b;m++,n+=3){let o=c+m/b*d;i.x=a*Math.cos(o),i.y=a*Math.sin(o),f.push(i.x,i.y,i.z),g.push(0,0,1),l.x=(f[n]/a+1)/2,l.y=(f[n+1]/a+1)/2,h.push(l.x,l.y)}for(let p=1;p<=b;p++)e.push(p,p+1,0);this.setIndex(e),this.setAttribute("position",new Ee(f,3)),this.setAttribute("normal",new Ee(g,3)),this.setAttribute("uv",new Ee(h,2))}}class As extends Ne{constructor(a=1,b=1,c=1,d=8,e=1,f=!1,g=0,h=2*Math.PI){super(),this.type="CylinderGeometry",this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};let i=this;d=Math.floor(d),e=Math.floor(e);let l=[],m=[],n=[],o=[],p=0,r=[],s=c/2,t=0;function u(c){let e=p,f=new O,r=new q,u=0,v=!0===c?a:b,w=!0===c?1:-1;for(let x=1;x<=d;x++)m.push(0,s*w,0),n.push(0,w,0),o.push(.5,.5),p++;let y=p;for(let z=0;z<=d;z++){let C=z/d*h+g,D=Math.cos(C),E=Math.sin(C);r.x=v*E,r.y=s*w,r.z=v*D,m.push(r.x,r.y,r.z),n.push(0,w,0),f.x=.5*D+.5,f.y=.5*E*w+.5,o.push(f.x,f.y),p++}for(let F=0;F0&&u(!0),b>0&&u(!1)),this.setIndex(l),this.setAttribute("position",new Ee(m,3)),this.setAttribute("normal",new Ee(n,3)),this.setAttribute("uv",new Ee(o,2))}}function dS(a,b,c,d,e){let f,g;if(e===function(a,b,c,d){let e=0;for(let f=b,g=c-d;f0)for(f=b;f=b;f-=d)g=ec(f,a[f],a[f+1],g);return g&&d5(g,g.next)&&(ed(g),g=g.next),g}function dT(a,b){if(!a)return a;b||(b=a);let c,d=a;do if(c=!1,d.steiner|| !d5(d,d.next)&&0!==d4(d.prev,d,d.next))d=d.next;else{if(ed(d),(d=b=d.prev)===d.next)break;c=!0}while(c||d!==b)return b}function dU(a,b,c,d,e,f,g){if(!a)return;!g&&f&&function(a,b,c,d){let e=a;do null===e.z&&(e.z=d0(e.x,e.y,b,c,d)),e.prevZ=e.prev,e.nextZ=e.next,e=e.next;while(e!==a)e.prevZ.nextZ=null,e.prevZ=null,function(a){let b,c,d,e,f,g,h,i,l=1;do{for(c=a,a=null,f=null,g=0;c;){for(g++,d=c,h=0,b=0;b0||i>0&&d;)0!==h&&(0===i||!d||c.z<=d.z)?(e=c,c=c.nextZ,h--):(e=d,d=d.nextZ,i--),f?f.nextZ=e:a=e,e.prevZ=f,f=e;c=d}f.nextZ=null,l*=2}while(g>1)}(e)}(a,d,e,f);let h,i,l=a;for(;a.prev!==a.next;)if(h=a.prev,i=a.next,f?dW(a,d,e,f):dV(a))b.push(h.i/c),b.push(a.i/c),b.push(i.i/c),ed(a),a=i.next,l=i.next;else if((a=i)===l){g?1===g?dU(a=dX(dT(a),b,c),b,c,d,e,f,2):2===g&&dY(a,b,c,d,e,f):dU(dT(a),b,c,d,e,f,1);break}}function dV(a){let b=a.prev,c=a,d=a.next;if(d4(b,c,d)>=0)return!1;let e=a.next.next;for(;e!==a.prev;){if(d2(b.x,b.y,c.x,c.y,d.x,d.y,e.x,e.y)&&d4(e.prev,e,e.next)>=0)return!1;e=e.next}return!0}function dW(a,b,c,d){let e=a.prev,f=a,g=a.next;if(d4(e,f,g)>=0)return!1;let h=e.xf.x?e.x>g.x?e.x:g.x:f.x>g.x?f.x:g.x,m=e.y>f.y?e.y>g.y?e.y:g.y:f.y>g.y?f.y:g.y,n=d0(h,i,b,c,d),o=d0(l,m,b,c,d),p=a.prevZ,r=a.nextZ;for(;p&&p.z>=n&&r&&r.z<=o;){if(p!==a.prev&&p!==a.next&&d2(e.x,e.y,f.x,f.y,g.x,g.y,p.x,p.y)&&d4(p.prev,p,p.next)>=0||(p=p.prevZ,r!==a.prev&&r!==a.next&&d2(e.x,e.y,f.x,f.y,g.x,g.y,r.x,r.y)&&d4(r.prev,r,r.next)>=0))return!1;r=r.nextZ}for(;p&&p.z>=n;){if(p!==a.prev&&p!==a.next&&d2(e.x,e.y,f.x,f.y,g.x,g.y,p.x,p.y)&&d4(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;r&&r.z<=o;){if(r!==a.prev&&r!==a.next&&d2(e.x,e.y,f.x,f.y,g.x,g.y,r.x,r.y)&&d4(r.prev,r,r.next)>=0)return!1;r=r.nextZ}return!0}function dX(a,b,c){let d=a;do{let e=d.prev,f=d.next.next;!d5(e,f)&&d6(e,d,d.next,f)&&d9(e,f)&&d9(f,e)&&(b.push(e.i/c),b.push(d.i/c),b.push(f.i/c),ed(d),ed(d.next),d=a=f),d=d.next}while(d!==a)return dT(d)}function dY(a,b,c,d,e,f){let g=a;do{let h=g.next.next;for(;h!==g.prev;){if(g.i!==h.i&&d3(g,h)){let i=eb(g,h);return g=dT(g,g.next),i=dT(i,i.next),dU(g,b,c,d,e,f),void dU(i,b,c,d,e,f)}h=h.next}g=g.next}while(g!==a)}function dZ(a,b){return a.x-b.x}function d$(a,b){if(b=function(a,b){let c=b,d=a.x,e=a.y,f,g=-1/0;do{if(e<=c.y&&e>=c.next.y&&c.next.y!==c.y){let h=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(h<=d&&h>g){if(g=h,h===d){if(e===c.y)return c;if(e===c.next.y)return c.next}f=c.x=c.x&&c.x>=l&&d!==c.x&&d2(ef.x||c.x===f.x&&d_(f,c)))&&(f=c,o=n)),c=c.next;while(c!==i)return f}(a,b)){let c=eb(b,a);dT(b,b.next),dT(c,c.next)}}function d_(a,b){return 0>d4(a.prev,a,b.prev)&&0>d4(b.next,a,a.next)}function d0(a,b,c,d,e){return(a=1431655765&((a=858993459&((a=252645135&((a=16711935&((a=32767*(a-c)*e)|a<<8))|a<<4))|a<<2))|a<<1))|(b=1431655765&((b=858993459&((b=252645135&((b=16711935&((b=32767*(b-d)*e)|b<<8))|b<<4))|b<<2))|b<<1))<<1}function d1(a){let b=a,c=a;do(b.x=0&&(a-g)*(d-h)-(c-g)*(b-h)>=0&&(c-g)*(f-h)-(e-g)*(d-h)>=0}function d3(a,b){return a.next.i!==b.i&&a.prev.i!==b.i&&!function(a,b){let c=a;do{if(c.i!==a.i&&c.next.i!==a.i&&c.i!==b.i&&c.next.i!==b.i&&d6(c,c.next,a,b))return!0;c=c.next}while(c!==a)return!1}(a,b)&&(d9(a,b)&&d9(b,a)&&function(a,b){let c=a,d=!1,e=(a.x+b.x)/2,f=(a.y+b.y)/2;do c.y>f!=c.next.y>f&&c.next.y!==c.y&&e<(c.next.x-c.x)*(f-c.y)/(c.next.y-c.y)+c.x&&(d=!d),c=c.next;while(c!==a)return d}(a,b)&&(d4(a.prev,a,b.prev)||d4(a,b.prev,b))||d5(a,b)&&d4(a.prev,a,a.next)>0&&d4(b.prev,b,b.next)>0)}function d4(a,b,c){return(b.y-a.y)*(c.x-b.x)-(b.x-a.x)*(c.y-b.y)}function d5(a,b){return a.x===b.x&&a.y===b.y}function d6(a,b,c,d){let e=d8(d4(a,b,c)),f=d8(d4(a,b,d)),g=d8(d4(c,d,a)),h=d8(d4(c,d,b));return e!==f&&g!==h||!(0!==e||!d7(a,c,b))||!(0!==f||!d7(a,d,b))||!(0!==g||!d7(c,a,d))||!(0!==h||!d7(c,b,d))}function d7(a,b,c){return b.x<=Math.max(a.x,c.x)&&b.x>=Math.min(a.x,c.x)&&b.y<=Math.max(a.y,c.y)&&b.y>=Math.min(a.y,c.y)}function d8(a){return a>0?1:a<0?-1:0}function d9(a,b){return 0>d4(a.prev,a,a.next)?d4(a,b,a.next)>=0&&d4(a,a.prev,b)>=0:0>d4(a,b,a.prev)||0>d4(a,a.next,b)}function eb(a,b){let c=new ee(a.i,a.x,a.y),d=new ee(b.i,b.x,b.y),e=a.next,f=b.prev;return a.next=b,b.prev=a,c.next=e,e.prev=c,d.next=c,c.prev=d,f.next=d,d.prev=f,d}function ec(a,b,c,d){let e=new ee(a,b,c);return d?(e.next=d.next,e.prev=d,d.next.prev=e,d.next=e):(e.prev=e,e.next=e),e}function ed(a){a.next.prev=a.prev,a.prev.next=a.next,a.prevZ&&(a.prevZ.nextZ=a.nextZ),a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function ee(a,b,c){this.i=a,this.x=b,this.y=c,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}new q,new q,new q,new he;class Ks{static area(a){let b=a.length,c=0;for(let d=b-1,e=0;eKs.area(a)}static triangulateShape(a,b){let c=[],d=[],e=[];ef(a),eg(c,a);let f=a.length;b.forEach(ef);for(let g=0;g80*c){h=l=a[0],i=m=a[1];for(let r=c;rl&&(l=n),o>m&&(m=o);p=0!==(p=Math.max(l-h,m-i))?1/p:0}return dU(f,g,c,h,i,p),g}(c,d);for(let i=0;i2&&a[b-1].equals(a[0])&&a.pop()}function eg(a,b){for(let c=0;cNumber.EPSILON){let o=Math.sqrt(m),p=Math.sqrt(i*i+l*l),r=b.x-h/o,s=b.y+g/o,t=((c.x-l/p-r)*l-(c.y+i/p-s)*i)/(g*l-h*i);d=r+g*t-a.x,e=s+h*t-a.y;let u=d*d+e*e;if(u<=2)return new O(d,e);f=Math.sqrt(u/2)}else{let v=!1;g>Number.EPSILON?i>Number.EPSILON&&(v=!0):g< -Number.EPSILON?i< -Number.EPSILON&&(v=!0):Math.sign(h)===Math.sign(l)&&(v=!0),v?(d=-h,e=g,f=Math.sqrt(m)):(d=g,e=h,f=Math.sqrt(m/2))}return new O(d/f,e/f)}let T=[];for(let U=0,V=K.length,X=V-1,Y=U+1;U=0;aE--){let aF=aE/p,aG=m*Math.cos(aF*Math.PI/2),aH=n*Math.sin(aF*Math.PI/2)+o;for(let aI=0,aJ=K.length;aI=0;){let d=c,e=c-1;e<0&&(e=a.length-1);for(let f=0,g=h+2*p;fMath.abs(h-m)?[new O(g,1-i),new O(l,1-n),new O(o,1-r),new O(s,1-u)]:[new O(h,1-i),new O(m,1-n),new O(p,1-r),new O(t,1-u)]}};class ia extends Ne{constructor(a=.5,b=1,c=8,d=1,e=0,f=2*Math.PI){super(),this.type="RingGeometry",this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f},c=Math.max(3,c);let g=[],h=[],i=[],l=[],m=a,n=(b-a)/(d=Math.max(1,d)),o=new q,p=new O;for(let r=0;r<=d;r++){for(let s=0;s<=c;s++){let t=e+s/c*f;o.x=m*Math.cos(t),o.y=m*Math.sin(t),h.push(o.x,o.y,o.z),i.push(0,0,1),p.x=(o.x/b+1)/2,p.y=(o.y/b+1)/2,l.push(p.x,p.y)}m+=n}for(let u=0;u0)&&o.push(D,E,I),(z!==c-1||h=d)){m.push(i.times[o]);for(let r=0;rf.tracks[t].times[0]&&(s=f.tracks[t].times[0]);for(let u=0;u=h.times[r]){let v=r*n+m,w=v+n-m;s=ei.arraySlice(h.values,v,w)}else{let x=h.createInterpolant(),y=m,z=n-m;x.evaluate(f),s=ei.arraySlice(x.resultBuffer,y,z)}"quaternion"===i&&(new j).fromArray(s).normalize().conjugate().toArray(s);let C=l.times.length;for(let D=0;D=e)break t;{let h=b[1];a=(e=b[--c-1]))break e}f=c,c=0}}for(;c>>1;ab;)--f;if(++f,0!==e||f!==d){e>=f&&(e=(f=Math.max(f,1))-1);let g=this.getValueSize();this.times=ei.arraySlice(c,e,f),this.values=ei.arraySlice(this.values,e*g,f*g)}return this}validate(){let a=!0,b=this.getValueSize();b-Math.floor(b)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);let c=this.times,d=this.values,e=c.length;0===e&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);let f=null;for(let g=0;g!==e;g++){let h=c[g];if("number"==typeof h&&isNaN(h)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,g,h),a=!1;break}if(null!==f&&f>h){console.error("THREE.KeyframeTrack: Out of order keys.",this,g,h,f),a=!1;break}f=h}if(void 0!==d&&ei.isTypedArray(d))for(let i=0,l=d.length;i!==l;++i){let m=d[i];if(isNaN(m)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,i,m),a=!1;break}}return a}optimize(){let a=ei.arraySlice(this.times),b=ei.arraySlice(this.values),c=this.getValueSize(),d=2302===this.getInterpolation(),e=a.length-1,f=1;for(let g=1;g0){a[f]=a[e];for(let u=e*c,v=f*c,w=0;w!==c;++w)b[v+w]=b[u+w];++f}return f!==a.length?(this.times=ei.arraySlice(a,0,f),this.values=ei.arraySlice(b,0,f*c)):(this.times=a,this.values=b),this}clone(){let a=ei.arraySlice(this.times,0),b=ei.arraySlice(this.values,0),c=new this.constructor(this.name,a,b);return c.createInterpolant=this.createInterpolant,c}}ma.prototype.TimeBufferType=Float32Array,ma.prototype.ValueBufferType=Float32Array,ma.prototype.DefaultInterpolation=2301;class fa extends ma{}fa.prototype.ValueTypeName="bool",fa.prototype.ValueBufferType=Array,fa.prototype.DefaultInterpolation=2300,fa.prototype.InterpolantFactoryMethodLinear=void 0,fa.prototype.InterpolantFactoryMethodSmooth=void 0;class ga extends ma{}ga.prototype.ValueTypeName="color";class va extends ma{}va.prototype.ValueTypeName="number";class xa extends ca{constructor(a,b,c,d){super(a,b,c,d)}interpolate_(a,b,c,d){let e=this.resultBuffer,f=this.sampleValues,g=this.valueSize,h=(c-b)/(d-b),i=a*g;for(let l=i+g;i!==l;i+=4)j.slerpFlat(e,0,f,i-g,f,i,h);return e}}class ya extends ma{InterpolantFactoryMethodLinear(a){return new xa(this.times,this.values,this.getValueSize(),a)}}ya.prototype.ValueTypeName="quaternion",ya.prototype.DefaultInterpolation=2301,ya.prototype.InterpolantFactoryMethodSmooth=void 0;class _a extends ma{}_a.prototype.ValueTypeName="string",_a.prototype.ValueBufferType=Array,_a.prototype.DefaultInterpolation=2300,_a.prototype.InterpolantFactoryMethodLinear=void 0,_a.prototype.InterpolantFactoryMethodSmooth=void 0;class wa extends ma{}wa.prototype.ValueTypeName="vector";class ba{constructor(a,b=-1,c,d=2500){this.name=a,this.tracks=c,this.duration=b,this.blendMode=d,this.uuid=l(),this.duration<0&&this.resetDuration()}static parse(a){let b=[],c=a.tracks,d=1/(a.fps||1);for(let e=0,f=c.length;e!==f;++e)b.push(ej(c[e]).scale(d));let g=new this(a.name,a.duration,b,a.blendMode);return g.uuid=a.uuid,g}static toJSON(a){let b=[],c=a.tracks,d={name:a.name,duration:a.duration,tracks:b,uuid:a.uuid,blendMode:a.blendMode};for(let e=0,f=c.length;e!==f;++e)b.push(ma.toJSON(c[e]));return d}static CreateFromMorphTargetSequence(a,b,c,d){let e=b.length,f=[];for(let g=0;g1){let l=i[1],m=d[l];m||(d[l]=m=[]),m.push(h)}}let n=[];for(let o in d)n.push(this.CreateFromMorphTargetSequence(o,d[o],b,c));return n}static parseAnimation(a,b){if(!a)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;let c=function(a,b,c,d,e){if(0!==c.length){let f=[],g=[];ei.flattenJSON(c,f,g,d),0!==f.length&&e.push(new a(b,f,g))}},d=[],e=a.name||"default",f=a.fps||30,g=a.blendMode,h=a.length|| -1,i=a.hierarchy||[];for(let l=0;l0||0===a.search(/^data\:image\/jpeg/);e.format=d?1022:1023,e.needsUpdate=!0,void 0!==b&&b(e)},c,d),e}}class Ia{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(a,b){let c=this.getUtoTmapping(a);return this.getPoint(c,b)}getPoints(a=5){let b=[];for(let c=0;c<=a;c++)b.push(this.getPoint(c/a));return b}getSpacedPoints(a=5){let b=[];for(let c=0;c<=a;c++)b.push(this.getPointAt(c/a));return b}getLength(){let a=this.getLengths();return a[a.length-1]}getLengths(a=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let b=[],c,d=this.getPoint(0),e=0;b.push(0);for(let f=1;f<=a;f++)b.push(e+=(c=this.getPoint(f/a)).distanceTo(d)),d=c;return this.cacheArcLengths=b,b}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(a,b){let c=this.getLengths(),d=0,e=c.length,f;f=b||a*c[e-1];let g,h=0,i=e-1;for(;h<=i;)if((g=c[d=Math.floor(h+(i-h)/2)]-f)<0)h=d+1;else{if(!(g>0)){i=d;break}i=d-1}if(c[d=i]===f)return d/(e-1);let l=c[d];return(d+(f-l)/(c[d+1]-l))/(e-1)}getTangent(a,b){let c=1e-4,d=a-c,e=a+c;d<0&&(d=0),e>1&&(e=1);let f=this.getPoint(d),g=this.getPoint(e),h=b||(f.isVector2?new O:new q);return h.copy(g).sub(f).normalize(),h}getTangentAt(a,b){let c=this.getUtoTmapping(a);return this.getTangent(c,b)}computeFrenetFrames(a,b){let c=new q,d=[],e=[],f=[],g=new q,h=new Mt;for(let i=0;i<=a;i++){let l=i/a;d[i]=this.getTangentAt(l,new q),d[i].normalize()}e[0]=new q,f[0]=new q;let n=Number.MAX_VALUE,o=Math.abs(d[0].x),p=Math.abs(d[0].y),r=Math.abs(d[0].z);o<=n&&(n=o,c.set(1,0,0)),p<=n&&(n=p,c.set(0,1,0)),r<=n&&c.set(0,0,1),g.crossVectors(d[0],c).normalize(),e[0].crossVectors(d[0],g),f[0].crossVectors(d[0],e[0]);for(let s=1;s<=a;s++){if(e[s]=e[s-1].clone(),f[s]=f[s-1].clone(),g.crossVectors(d[s-1],d[s]),g.length()>Number.EPSILON){g.normalize();let t=Math.acos(m(d[s-1].dot(d[s]),-1,1));e[s].applyMatrix4(h.makeRotationAxis(g,t))}f[s].crossVectors(d[s],e[s])}if(!0===b){let u=Math.acos(m(e[0].dot(e[a]),-1,1));u/=a,d[0].dot(g.crossVectors(e[0],e[a]))>0&&(u=-u);for(let v=1;v<=a;v++)e[v].applyMatrix4(h.makeRotationAxis(d[v],u*v)),f[v].crossVectors(d[v],e[v])}return{tangents:d,normals:e,binormals:f}}clone(){return(new this.constructor).copy(this)}copy(a){return this.arcLengthDivisions=a.arcLengthDivisions,this}toJSON(){let a={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return a.arcLengthDivisions=this.arcLengthDivisions,a.type=this.type,a}fromJSON(a){return this.arcLengthDivisions=a.arcLengthDivisions,this}}class Da extends Ia{constructor(a=0,b=0,c=1,d=1,e=0,f=2*Math.PI,g=!1,h=0){super(),this.type="EllipseCurve",this.aX=a,this.aY=b,this.xRadius=c,this.yRadius=d,this.aStartAngle=e,this.aEndAngle=f,this.aClockwise=g,this.aRotation=h}getPoint(a,b){let c=b||new O,d=2*Math.PI,e=this.aEndAngle-this.aStartAngle,f=Math.abs(e)d;)e-=d;e0?0:(Math.floor(Math.abs(i)/e)+1)*e:0===l&&i===e-1&&(i=e-2,l=1),this.closed||i>0?g=d[(i-1)%e]:(eo.subVectors(d[0],d[1]).add(d[0]),g=eo);let m=d[i%e],n=d[(i+1)%e];if(this.closed||i+2d.length-2?d.length-1:f+1],m=d[f>d.length-3?d.length-1:f+2];return c.set(es(g,h.x,i.x,l.x,m.x),es(g,h.y,i.y,l.y,m.y)),c}copy(a){super.copy(a),this.points=[];for(let b=0,c=a.points.length;b=b){let e=c[d]-b,f=this.curves[d],g=f.getLength(),h=0===g?0:1-e/g;return f.getPointAt(h)}d++}return null}getLength(){let a=this.getCurveLengths();return a[a.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let a=[],b=0;for(let c=0,d=this.curves.length;c1&&!b[b.length-1].equals(b[0])&&b.push(b[0]),b}copy(a){super.copy(a),this.curves=[];for(let b=0,c=a.curves.length;b0){let l=i.getPoint(0);l.equals(this.currentPoint)||this.lineTo(l.x,l.y)}this.curves.push(i);let m=i.getPoint(1);return this.currentPoint.copy(m),this}copy(a){return super.copy(a),this.currentPoint.copy(a.currentPoint),this}toJSON(){let a=super.toJSON();return a.currentPoint=this.currentPoint.toArray(),a}fromJSON(a){return super.fromJSON(a),this.currentPoint.fromArray(a.currentPoint),this}}class $a extends Ka{constructor(a){super(a),this.uuid=l(),this.type="Shape",this.holes=[]}getPointsHoles(a){let b=[];for(let c=0,d=this.holes.length;c0&&this._mixBufferRegionAdditive(c,d,this._addIndex*b,1,b);for(let i=b,l=b+b;i!==l;++i)if(c[i]!==c[i+b]){g.setValue(c,d);break}}saveOriginalState(){let a=this.binding,b=this.buffer,c=this.valueSize,d=c*this._origIndex;a.getValue(b,d);for(let e=c,f=d;e!==f;++e)b[e]=b[d+e%c];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let a=3*this.valueSize;this.binding.setValue(this.buffer,a)}_setAdditiveIdentityNumeric(){let a=this._addIndex*this.valueSize,b=a+this.valueSize;for(let c=a;c=.5)for(let f=0;f!==e;++f)a[b+f]=a[c+f]}_slerp(a,b,c,d){j.slerpFlat(a,b,a,b,a,c,d)}_slerpAdditive(a,b,c,d,e){let f=this._workIndex*e;j.multiplyQuaternionsFlat(a,f,a,b,a,c),j.slerpFlat(a,b,a,b,a,f,d)}_lerp(a,b,c,d,e){let f=1-d;for(let g=0;g!==e;++g){let h=b+g;a[h]=a[h]*f+a[c+g]*d}}_lerpAdditive(a,b,c,d,e){for(let f=0;f!==e;++f){let g=b+f;a[g]=a[g]+a[c+f]*d}}}let eE=RegExp("[\\[\\]\\.:\\/]","g"),eF="[^\\[\\]\\.:\\/]",eG="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",eH=/((?:WC+[\/:])*)/.source.replace("WC",eF),eI=/(WCOD+)?/.source.replace("WCOD",eG),eJ=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",eF),eK=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",eF),eL=RegExp("^"+eH+eI+eJ+eK+"$"),eM=["material","materials","bones"];class Do{constructor(a,b,c){this.path=b,this.parsedPath=c||Do.parseTrackName(b),this.node=Do.findNode(a,this.parsedPath.nodeName)||a,this.rootNode=a,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(a,b,c){return a&&a.isAnimationObjectGroup?new Do.Composite(a,b,c):new Do(a,b,c)}static sanitizeNodeName(a){return a.replace(/\s/g,"_").replace(eE,"")}static parseTrackName(a){let b=eL.exec(a);if(!b)throw Error("PropertyBinding: Cannot parse trackName: "+a);let c={nodeName:b[2],objectName:b[3],objectIndex:b[4],propertyName:b[5],propertyIndex:b[6]},d=c.nodeName&&c.nodeName.lastIndexOf(".");if(void 0!==d&& -1!==d){let e=c.nodeName.substring(d+1);-1!==eM.indexOf(e)&&(c.nodeName=c.nodeName.substring(0,d),c.objectName=e)}if(null===c.propertyName||0===c.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+a);return c}static findNode(a,b){if(!b||""===b||"."===b|| -1===b||b===a.name||b===a.uuid)return a;if(a.skeleton){let c=a.skeleton.getBoneByName(b);if(void 0!==c)return c}if(a.children){let d=function(a){for(let c=0;c0){let i=this._interpolants,l=this._propertyBindings;if(2501===this.blendMode)for(let m=0,n=i.length;m!==n;++m)i[m].evaluate(g),l[m].accumulateAdditive(h);else for(let o=0,p=i.length;o!==p;++o)i[o].evaluate(g),l[o].accumulate(d,h)}}_updateWeight(a){let b=0;if(this.enabled){b=this.weight;let c=this._weightInterpolant;if(null!==c){let d=c.evaluate(a)[0];b*=d,a>c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b,b}_updateTimeScale(a){let b=0;if(!this.paused){b=this.timeScale;let c=this._timeScaleInterpolant;null!==c&&(b*=c.evaluate(a)[0],a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b))}return this._effectiveTimeScale=b,b}_updateTime(a){let b=this._clip.duration,c=this.loop,d=this.time+a,e=this._loopCount,f=2202===c;if(0===a)return -1===e?d:f&&1==(1&e)?b-d:d;if(2200===c){-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(d>=b)d=b;else{if(!(d<0)){this.time=d;break t}d=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=d,this._mixer.dispatchEvent({type:"finished",action:this,direction:a<0?-1:1})}}else{if(-1===e&&(a>=0?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f)),d>=b||d<0){let g=Math.floor(d/b);d-=b*g,e+=Math.abs(g);let h=this.repetitions-e;if(h<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,d=a>0?b:0,this.time=d,this._mixer.dispatchEvent({type:"finished",action:this,direction:a>0?1:-1});else{if(1===h){let i=a<0;this._setEndings(i,!i,f)}else this._setEndings(!1,!1,f);this._loopCount=e,this.time=d,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}}else this.time=d;if(f&&1==(1&e))return b-d}return d}_setEndings(a,b,c){let d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401:2400:2402)}_scheduleFading(a,b,c){let d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(f=d._lendControlInterpolant(),this._weightInterpolant=f);let g=f.parameterPositions,h=f.sampleValues;return g[0]=e,h[0]=b,g[1]=e+a,h[1]=c,this}}(class extends A{constructor(a){super(),this._root=a,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(a,b){let c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,i=this._bindingsByRootAndName,l=i[h];void 0===l&&(l={},i[h]=l);for(let m=0;m!==e;++m){let n=d[m],o=n.name,p=l[o];if(void 0!==p)f[m]=p;else{if(void 0!==(p=f[m])){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,h,o));continue}let r=b&&b._propertyBindings[m].binding.parsedPath;p=new Mo(Do.create(c,o,r),n.ValueTypeName,n.getValueSize()),++p.referenceCount,this._addInactiveBinding(p,h,o),f[m]=p}g[m].resultBuffer=p.buffer}}_activateAction(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){let b=(a._localRoot||this._root).uuid,c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]),this._addInactiveAction(a,c,b)}let e=a._propertyBindings;for(let f=0,g=e.length;f!==g;++f){let h=e[f];0==h.useCount++&&(this._lendBinding(h),h.saveOriginalState())}this._lendAction(a)}}_deactivateAction(a){if(this._isActiveAction(a)){let b=a._propertyBindings;for(let c=0,d=b.length;c!==d;++c){let e=b[c];0== --e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0,this.stats={actions:{get total(){return this._actions.length},get inUse(){return this._nActiveActions}},bindings:{get total(){return this._bindings.length},get inUse(){return this._nActiveBindings}},controlInterpolants:{get total(){return this._controlInterpolants.length},get inUse(){return this._nActiveControlInterpolants}}}}_isActiveAction(a){let b=a._cacheIndex;return null!==b&&b=0;--b)a[b].stop();return this}update(a){a*=this.timeScale;let b=this._actions,c=this._nActiveActions,d=this.time+=a,e=Math.sign(a),f=this._accuIndex^=1;for(let g=0;g!==c;++g)b[g]._update(d,a,e,f);let h=this._bindings,i=this._nActiveBindings;for(let l=0;l!==i;++l)h[l].apply(f);return this}setTime(a){this.time=0;for(let b=0;bthis.max.x||a.ythis.max.y)}containsBox(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y}getParameter(a,b){return void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new O),b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(a){return!(a.max.xthis.max.x||a.max.ythis.max.y)}clampPoint(a,b){return void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new O),b.copy(a).clamp(this.min,this.max)}distanceToPoint(a){return eP.copy(a).clamp(this.min,this.max).sub(a).length()}intersect(a){return this.min.max(a.min),this.max.min(a.max),this}union(a){return this.min.min(a.min),this.max.max(a.max),this}translate(a){return this.min.add(a),this.max.add(a),this}equals(a){return a.min.equals(this.min)&&a.max.equals(this.max)}}Uo.prototype.isBox2=!0,(class extends Yt{constructor(a){super(),this.material=a,this.render=function(){},this.hasPositions=!1,this.hasNormals=!1,this.hasColors=!1,this.hasUvs=!1,this.positionArray=null,this.normalArray=null,this.colorArray=null,this.uvArray=null,this.count=0}}).prototype.isImmediateRenderObject=!0;let eQ=new q,eR=new Mt,eS=new Mt;function eT(a){let b=[];a&&a.isBone&&b.push(a);for(let c=0;c4?g=eV[e-8+4-1]:0==e&&(g=0),c.push(g);let h=1/(f-1),i=-h/2,l=1+h/2,m=[i,i,l,i,l,l,i,i,l,l,i,l],n=6,o=6,p=3,r=2,s=1,t=new Float32Array(p*o*n),u=new Float32Array(r*o*n),v=new Float32Array(s*o*n);for(let w=0;w2?0:-1,z=[x,y,0,x+2/3,y,0,x+2/3,y+1,0,x,y,0,x+2/3,y+1,0,x,y+1,0];t.set(z,p*o*w),u.set(m,r*o*w);let C=[w,w,w,w,w,w];v.set(C,s*o*w)}let D=new Ne;D.setAttribute("position",new be(t,p)),D.setAttribute("uv",new be(u,r)),D.setAttribute("faceIndex",new be(v,s)),a.push(D),d>4&&d--}return{_lodPlanes:a,_sizeLods:b,_sigmas:c}}());Ia.create=function(a,b){return console.log("THREE.Curve.create() has been deprecated"),a.prototype=Object.create(Ia.prototype),a.prototype.constructor=a,a.prototype.getPoint=b,a},Ka.prototype.fromPoints=function(a){return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),this.setFromPoints(a)},(class extends xs{constructor(a=10,b=10,c=4473924,d=8947848){c=new xe(c),d=new xe(d);let e=b/2,f=a/b,g=a/2,h=[],i=[];for(let l=0,m=0,n=-g;l<=b;l++,n+=f){h.push(-g,0,n,g,0,n),h.push(n,0,-g,n,0,g);let o=l===e?c:d;o.toArray(i,m),m+=3,o.toArray(i,m),m+=3,o.toArray(i,m),m+=3,o.toArray(i,m),m+=3}let p=new Ne;p.setAttribute("position",new Ee(h,3)),p.setAttribute("color",new Ee(i,3)),super(p,new hs({vertexColors:!0,toneMapped:!1})),this.type="GridHelper"}}).prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},(class extends xs{constructor(a){let b=eT(a),c=new Ne,d=[],e=[],f=new xe(0,0,1),g=new xe(0,1,0);for(let h=0;h0){this.source.connect(this.filters[0]);for(let a=1,b=this.filters.length;a0){this.source.disconnect(this.filters[0]);for(let a=1,b=this.filters.length;a0?b[b.length-1]:"",smooth:void 0!==c?c.smooth:this.smooth,groupStart:void 0!==c?c.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(a){let b={index:"number"==typeof a?a:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return b.clone=this.clone.bind(b),b}};return this.materials.push(d),d},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(a){let b=this.currentMaterial();if(b&& -1===b.groupEnd&&(b.groupEnd=this.geometry.vertices.length/3,b.groupCount=b.groupEnd-b.groupStart,b.inherited=!1),a&&this.materials.length>1)for(let c=this.materials.length-1;c>=0;c--)this.materials[c].groupCount<=0&&this.materials.splice(c,1);return a&&0===this.materials.length&&this.materials.push({name:"",smooth:this.smooth}),b}},c&&c.name&&"function"==typeof c.clone){let d=c.clone(0);d.inherited=!0,this.object.materials.push(d)}this.objects.push(this.object)},finalize:function(){this.object&&"function"==typeof this.object._finalize&&this.object._finalize(!0)},parseVertexIndex:function(a,b){let c=parseInt(a,10);return 3*(c>=0?c-1:c+b/3)},parseNormalIndex:function(a,b){let c=parseInt(a,10);return 3*(c>=0?c-1:c+b/3)},parseUVIndex:function(a,b){let c=parseInt(a,10);return 2*(c>=0?c-1:c+b/2)},addVertex:function(a,b,c){let d=this.vertices,e=this.object.geometry.vertices;e.push(d[a+0],d[a+1],d[a+2]),e.push(d[b+0],d[b+1],d[b+2]),e.push(d[c+0],d[c+1],d[c+2])},addVertexPoint:function(a){let b=this.vertices;this.object.geometry.vertices.push(b[a+0],b[a+1],b[a+2])},addVertexLine:function(a){let b=this.vertices;this.object.geometry.vertices.push(b[a+0],b[a+1],b[a+2])},addNormal:function(a,b,c){let d=this.normals,e=this.object.geometry.normals;e.push(d[a+0],d[a+1],d[a+2]),e.push(d[b+0],d[b+1],d[b+2]),e.push(d[c+0],d[c+1],d[c+2])},addFaceNormal:function(a,b,c){let d=this.vertices,e=this.object.geometry.normals;e3.fromArray(d,a),e4.fromArray(d,b),e5.fromArray(d,c),e7.subVectors(e5,e4),e6.subVectors(e3,e4),e7.cross(e6),e7.normalize(),e.push(e7.x,e7.y,e7.z),e.push(e7.x,e7.y,e7.z),e.push(e7.x,e7.y,e7.z)},addColor:function(a,b,c){let d=this.colors,e=this.object.geometry.colors;void 0!==d[a]&&e.push(d[a+0],d[a+1],d[a+2]),void 0!==d[b]&&e.push(d[b+0],d[b+1],d[b+2]),void 0!==d[c]&&e.push(d[c+0],d[c+1],d[c+2])},addUV:function(a,b,c){let d=this.uvs,e=this.object.geometry.uvs;e.push(d[a+0],d[a+1]),e.push(d[b+0],d[b+1]),e.push(d[c+0],d[c+1])},addDefaultUV:function(){let a=this.object.geometry.uvs;a.push(0,0),a.push(0,0),a.push(0,0)},addUVLine:function(a){let b=this.uvs;this.object.geometry.uvs.push(b[a+0],b[a+1])},addFace:function(a,b,c,d,e,f,g,h,i){let l=this.vertices.length,m=this.parseVertexIndex(a,l),n=this.parseVertexIndex(b,l),o=this.parseVertexIndex(c,l);if(this.addVertex(m,n,o),this.addColor(m,n,o),void 0!==g&&""!==g){let p=this.normals.length;m=this.parseNormalIndex(g,p),n=this.parseNormalIndex(h,p),o=this.parseNormalIndex(i,p),this.addNormal(m,n,o)}else this.addFaceNormal(m,n,o);if(void 0!==d&&""!==d){let r=this.uvs.length;m=this.parseUVIndex(d,r),n=this.parseUVIndex(e,r),o=this.parseUVIndex(f,r),this.addUV(m,n,o),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(a){this.object.geometry.type="Points";let b=this.vertices.length;for(let c=0,d=a.length;c=7?b.colors.push(parseFloat(m[4]),parseFloat(m[5]),parseFloat(m[6])):b.colors.push(void 0,void 0,void 0);break;case"vn":b.normals.push(parseFloat(m[1]),parseFloat(m[2]),parseFloat(m[3]));break;case"vt":b.uvs.push(parseFloat(m[1]),parseFloat(m[2]))}}else if("f"===e){let n=d.substr(1).trim().split(/\s+/),o=[];for(let p=0,r=n.length;p0){let t=s.split("/");o.push(t)}}let u=o[0];for(let v=1,w=o.length-1;v1){let L=g[1].trim().toLowerCase();b.object.smooth="0"!==L&&"off"!==L}else b.object.smooth=!0;let M=b.object.currentMaterial();M&&(M.smooth=b.object.smooth)}else{if("\0"===d)continue;console.warn('THREE.OBJLoader: Unexpected line: "'+d+'"')}}b.finalize();let N=new Er;if(N.materialLibraries=[].concat(b.materialLibraries),!0== !(1===b.objects.length&&0===b.objects[0].geometry.vertices.length))for(let P=0,Q=b.objects.length;P0&&Y.setAttribute("normal",new Ee(S.normals,3)),S.colors.length>0&&(X=!0,Y.setAttribute("color",new Ee(S.colors,3))),!0===S.hasUVIndices&&Y.setAttribute("uv",new Ee(S.uvs,2));let $=[];for(let _=0,ab=T.length;_1){for(let ai=0,aj=T.length;ai0){let al=new ys({size:1,sizeAttenuation:!1}),am=new Ne;am.setAttribute("position",new Ee(b.vertices,3)),b.colors.length>0&& void 0!==b.colors[0]&&(am.setAttribute("color",new Ee(b.colors,3)),al.vertexColors=!0);let ap=new Ss(am,al);N.add(ap)}return N}}let e9=new Dt(.3,4.6,.05),fb=".js-webgl-globe",fc=".js-webgl-globe-data",fd="PR_OPENED",fe="PR_MERGED",ff="CUSTOM",fg="PAUSE",fh="RESUME";var fi=c(370);let fj=c.n(fi)()((new class{}).prototype),fk={},fl=new q,fm=Math.PI/180,fp=180/Math.PI,{abs:fq}=Math;function fr(a,b,c){let d=c||new Mt;d.identity(),d.makeRotationY(b),d.multiply(a.matrix),a.matrix.copy(d),a.rotation.setFromRotationMatrix(a.matrix)}function ft(a){a instanceof Ke&&(a.geometry&&a.geometry.dispose(),a.material&&(a.material.map&&a.material.map.dispose(),a.material.lightMap&&a.material.lightMap.dispose(),a.material.bumpMap&&a.material.bumpMap.dispose(),a.material.normalMap&&a.material.normalMap.dispose(),a.material.specularMap&&a.material.specularMap.dispose(),a.material.envMap&&a.material.envMap.dispose(),a.material.emissiveMap&&a.material.emissiveMap.dispose(),a.material.metalnessMap&&a.material.metalnessMap.dispose(),a.material.roughnessMap&&a.material.roughnessMap.dispose(),a.material.dispose()))}function fu(a,b){for(let c=a.children.length-1;c>=0;c--){let d=a.children[c];fu(d,b),"function"==typeof b&&b(d)}}function fv(a,b,c,d){var e,f,g,h,i,l;a=(e=a)*fm,b=(f=b)*fm,c=(g=c)*fm;let m=(d=(h=d)*fm)-b,n=Math.cos(c)*Math.cos(m),o=Math.cos(c)*Math.sin(m),p=Math.atan2(Math.sin(a)+Math.sin(c),Math.sqrt((Math.cos(a)+n)*(Math.cos(a)+n)+o*o)),r=b+Math.atan2(o,Math.cos(a)+n);return[(i=p)*fp,(l=r)*fp]}function fw(a,b,c,d){d=d||new q;let e=(90-a)*fm,f=(b+180)*fm;return d.set(-c*Math.sin(e)*Math.cos(f),c*Math.cos(e),c*Math.sin(e)*Math.sin(f)),d}function fx(){this.array=null}class Fl{constructor(a){this.props=a,this.init()}init(){let{radius:a,detail:b=50,renderer:c,shadowPoint:d,highlightPoint:e,highlightColor:f,frontHighlightColor:g=3555965,waterColor:h=857395,landColorFront:i=16777215,shadowDist:l,highlightDist:m,frontPoint:n}=this.props,o=new sa(a,b,b),p=new oa({color:h,metalness:0,roughness:.9});this.uniforms=[],p.onBeforeCompile=a=>{a.uniforms.shadowDist={value:l},a.uniforms.highlightDist={value:m},a.uniforms.shadowPoint={value:(new q).copy(d)},a.uniforms.highlightPoint={value:(new q).copy(e)},a.uniforms.frontPoint={value:(new q).copy(n)},a.uniforms.highlightColor={value:new xe(f)},a.uniforms.frontHighlightColor={value:new xe(g)},a.vertexShader="#define GLSLIFY 1\n#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvarying vec3 vWorldPosition;\n\nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #ifdef USE_TANGENT\n vTangent = normalize( transformedTangent );\n vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n #endif\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n // # include \n vec4 worldPosition = vec4( transformed, 1.0 );\n\n #ifdef USE_INSTANCING\n\n worldPosition = instanceMatrix * worldPosition;\n\n #endif\n\n worldPosition = modelMatrix * worldPosition;\n vWorldPosition = worldPosition.xyz;\n #include \n #include \n}",a.fragmentShader="#define GLSLIFY 1\n#define STANDARD\n#ifdef PHYSICAL\n #define REFLECTIVITY\n #define CLEARCOAT\n #define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n uniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n uniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n uniform float clearcoat;\n uniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n uniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nuniform float shadowDist;\nuniform float highlightDist;\nuniform vec3 shadowPoint;\nuniform vec3 highlightPoint;\nuniform vec3 frontPoint;\nuniform vec3 highlightColor;\nuniform vec3 frontHighlightColor;\n\nvarying vec3 vWorldPosition;\n\nvoid main() {\n #include \n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #ifdef USE_MAP\n\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n \n #ifndef IS_FILL\n diffuseColor *= texelColor;\n #endif\n\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #ifdef TRANSPARENCY\n diffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n #endif\n\n float dist;\n float distZ;\n\n // highlights\n #ifdef USE_HIGHLIGHT\n dist = distance(vWorldPosition, highlightPoint);\n distZ = distance(vWorldPosition.z, 0.0);\n outgoingLight = mix(highlightColor, outgoingLight, smoothstep(0.0, highlightDist, dist) * smoothstep(0.0, 3.0, pow(distZ, 0.5)));\n outgoingLight = mix(outgoingLight * 2.0, outgoingLight, smoothstep(0.0, 12.0, distZ));\n #endif\n\n // front hightlight\n #ifdef USE_FRONT_HIGHLIGHT\n dist = distance(vWorldPosition * vec3(0.875, 0.5, 1.0), frontPoint);\n outgoingLight = mix(frontHighlightColor * 1.6, outgoingLight, smoothstep(0.0, 15.0, dist));\n #endif\n\n // shadows\n dist = distance(vWorldPosition, shadowPoint);\n outgoingLight = mix(outgoingLight * 0.01, outgoingLight, smoothstep(0.0, shadowDist, dist));\n // shadow debug\n // outgoingLight = mix(vec3(1.0, 0.0, 0.0), outgoingLight, smoothstep(0.0, shadowDist, dist));\n\n #ifdef IS_FILL\n outgoingLight = mix(outgoingLight, outgoingLight * 0.5, 1.0 - texelColor.g * 1.5);\n #endif\n\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n #include \n}",this.uniforms.push(a.uniforms)},p.defines={USE_HIGHLIGHT:1,USE_HIGHLIGHT_ALT:1,USE_FRONT_HIGHLIGHT:1,DITHERING:1},this.mesh=new Er;let r=new Ke(o,p);r.renderOrder=1,this.mesh.add(r),this.meshFill=r,this.materials=[p]}setShadowPoint(a){this.uniforms&&this.uniforms.forEach(b=>{b.shadowPoint.value.copy(a)})}setHighlightPoint(a){this.uniforms&&this.uniforms.forEach(b=>{b.highlightPoint.value.copy(a)})}setFrontPoint(a){this.uniforms&&this.uniforms.forEach(b=>{b.frontPoint.value.copy(a)})}setShadowDist(a){this.uniforms&&this.uniforms.forEach(b=>{b.shadowDist.value=a})}setHighlightDist(a){this.uniforms&&this.uniforms.forEach(b=>{b.highlightDist.value=a})}dispose(){this.mesh=null,this.materials=null,this.uniforms=null,this.meshFill=null}}let{abs:fy}=Math;function fz(a,b,c,d,e){var f,g,h,i,l;return f=(h=a,i=b,(h-i)/((l=c)-i)||0),(e-(g=d))*f+g}function fA(a,b,c){return Math.max(b,Math.min(a,c))}function fB({lat:a,lon:b}){let c=!isNaN(a)&&a>= -90&&a<=90,d=!isNaN(b)&&b>= -180&&b<=180;return c&&d}class kl{constructor(a){this.props=a,this.handleMouseDown=this.handleMouseDown.bind(this),this.handleMouseMove=this.handleMouseMove.bind(this),this.handleMouseUp=this.handleMouseUp.bind(this),this.handleMouseOut=this.handleMouseOut.bind(this),this.handleTouchStart=this.handleTouchStart.bind(this),this.handleTouchMove=this.handleTouchMove.bind(this),this.handleTouchEnd=this.handleTouchEnd.bind(this),this.handlePause=this.handlePause.bind(this),this.handleResume=this.handleResume.bind(this),this.init()}init(){this.dragging=!1,this.mouse=new O(.5,.5),this.lastMouse=new O(.5,.5),this.target=new q(0,0),this.matrix=new Mt,this.velocity=new O,this.autoRotationSpeedScalar=1,this.autoRotationSpeedScalarTarget=1,this.addListeners(),fj.on(fg,this.handlePause),fj.on(fh,this.handleResume)}addListeners(){let{domElement:a}=this.props,{isMobile:b}=fk;this.removeListeners();let c={capture:!1,passive:!0};a.addEventListener("mousedown",this.handleMouseDown,c),a.addEventListener("mousemove",this.handleMouseMove,c),a.addEventListener("mouseup",this.handleMouseUp,c),a.addEventListener("mouseout",this.handleMouseOut,c),a.addEventListener("mouseleave",this.handleMouseOut,c),a.addEventListener("touchstart",this.handleTouchStart,c),a.addEventListener("touchmove",this.handleTouchMove,c),a.addEventListener("touchend",this.handleTouchEnd,c),a.addEventListener("touchcancel",this.handleTouchEnd,c)}removeListeners(){let{domElement:a}=this.props,{isMobile:b}=fk;a.removeEventListener("mousedown",this.handleMouseDown),a.removeEventListener("mousemove",this.handleMouseMove),a.removeEventListener("mouseup",this.handleMouseUp),a.removeEventListener("mouseout",this.handleMouseOut),a.removeEventListener("mouseleave",this.handleMouseOut),a.removeEventListener("touchstart",this.handleTouchStart),a.removeEventListener("touchmove",this.handleTouchMove),a.removeEventListener("touchend",this.handleTouchEnd),a.removeEventListener("touchcancel",this.handleTouchEnd)}setMouse(a){let{width:b,height:c}=fk.parentNode.getBoundingClientRect();this.mouse.x=a.clientX/b*2-1,this.mouse.y=-a.clientY/c*2+1}setDragging(a){this.dragging=a;let{setDraggingCallback:b}=this.props;b&&"function"==typeof b&&b(a)}handlePause(){this.removeListeners()}handleResume(){this.addListeners()}handleMouseDown(a){this.setMouse(a),this.setDragging(!0)}handleMouseMove(a){this.setMouse(a)}handleMouseUp(a){this.setMouse(a),this.setDragging(!1)}handleMouseOut(){this.setDragging(!1)}handleTouchStart(a){this.setMouse(a.changedTouches[0]),this.lastMouse.copy(this.mouse),this.setDragging(!0)}handleTouchMove(a){this.setMouse(a.changedTouches[0])}handleTouchEnd(a){this.setMouse(a.changedTouches[0]),this.setDragging(!1)}update(a=.01){let b=0,c=0,{object:d,objectContainer:e,rotateSpeed:f,autoRotationSpeed:g,easing:h=.1,maxRotationX:i=.3}=this.props;this.dragging&&(b=this.mouse.x-this.lastMouse.x,c=this.mouse.y-this.lastMouse.y,this.target.y=fA(this.target.y-c,-i,.6*i)),e.rotation.x+=(this.target.y+e9.x-e.rotation.x)*h,this.target.x+=(b-this.target.x)*h,fr(d,this.target.x*f,this.matrix),this.dragging||fr(d,a*g*this.autoRotationSpeedScalar,this.matrix),this.autoRotationSpeedScalar+=.05*(this.autoRotationSpeedScalarTarget-this.autoRotationSpeedScalar),this.lastMouse.copy(this.mouse),this.velocity.set(b,c)}dispose(){this.removeListeners(),fj.off(fg,this.handlePause),fj.off(fh,this.handleResume),this.dragging=null,this.mouse=null,this.lastMouse=null,this.target=null,this.matrix=null,this.velocity=null,this.autoRotationSpeedScalar=null,this.autoRotationSpeedScalarTarget=null}}class Wl{constructor(a){this.props=a,this.init()}init(){let{maxAmount:a=1e3,data:b=[],radius:c=1,camera:d,maxIndexDistance:e,visibleIndex:f,colors:{openPrColor:g,openPrParticleColor:h}}=this.props,{pixelRatio:i,spikeRadius:l=.06}=fk;this.mesh=new Er;let m=new ye({color:65280,visible:!1}),n=new tn(.75,1,.75);n.translate(0,.5,0),n.rotateX(-Math.PI/2);let o=new ls(n,m,a);this.mesh.add(o);let p=new ye({color:g,transparent:!0,opacity:.4,alphaTest:.05,blending:2});p.onBeforeCompile=a=>{a.uniforms.cameraPosition={value:d.position},a.uniforms.radius={value:c},a.uniforms.visibleIndex={value:f},a.uniforms.maxIndexDistance={value:e},a.uniforms.highlightIndex={value:-9999},a.vertexShader="#define GLSLIFY 1\n#include \n\nuniform float visibleIndex;\nuniform float maxIndexDistance;\n\nattribute float index;\n\nvarying float vScale;\nvarying float vIndex;\n\n#ifndef PI\n#define PI 3.141592653589793\n#endif\n\nfloat sineInOut(float t) {\n return -0.5 * (cos(PI * t) - 1.0);\n}\n\nvoid main() {\n vIndex = index;\n\n vec3 pos = position;\n\n float scale = sineInOut(clamp(smoothstep(maxIndexDistance, 0.0, distance(index, visibleIndex)), 0., 1.));\n pos.z *= scale;\n vScale = scale;\n\n vec3 transformed = vec3( pos );\n #include \n #include \n #include \n}",a.fragmentShader="#define GLSLIFY 1\nuniform vec3 diffuse;\nuniform float opacity;\n\n#include \n\nuniform float radius;\nuniform float visibleIndex;\nuniform float maxIndexDistance;\nuniform float highlightIndex;\n\nvarying float vScale;\nvarying float vIndex;\n\nvoid main() {\n if(vScale <= 0.01){\n discard;\n return;\n }\n\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n reflectedLight.indirectDiffuse += vec3( 1.0 );\n reflectedLight.indirectDiffuse *= diffuseColor.rgb;\n vec3 outgoingLight = reflectedLight.indirectDiffuse;\n\n vec3 rgb = outgoingLight.rgb;\n float alpha = diffuseColor.a;\n\n // highlight when mouse is over\n if(highlightIndex == vIndex){\n rgb = vec3(1.0);\n alpha = 1.0;\n }\n\n gl_FragColor = vec4( rgb, alpha );\n}",this.spikeUniforms=a.uniforms};let r=[],s=[];for(let t=0;t{a.uniforms.cameraPosition={value:d.position},a.uniforms.radius={value:c},a.uniforms.visibleIndex={value:f},a.uniforms.maxIndexDistance={value:e},a.vertexShader="#define GLSLIFY 1\nuniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n\nuniform float time;\nuniform float visibleIndex;\nuniform float maxIndexDistance;\nuniform float speed;\n\nattribute float index;\nattribute vec3 curveStart;\nattribute vec3 curveCtrl1;\nattribute vec3 curveCtrl2;\nattribute vec3 curveEnd;\nattribute float timeOffset;\n\nvarying float vAlpha;\n\nfloat quarticInOut(float t) {\n return t < 0.5\n ? +8.0 * pow(t, 4.0)\n : -8.0 * pow(t - 1.0, 4.0) + 1.0;\n}\n\nvec3 bezier(vec3 A, vec3 B, vec3 C, vec3 D, float t) {\n vec3 E = mix(A, B, t);\n vec3 F = mix(B, C, t);\n vec3 G = mix(C, D, t);\n\n vec3 H = mix(E, F, t);\n vec3 I = mix(F, G, t);\n\n vec3 P = mix(H, I, t);\n\n return P;\n}\n\nvec3 bezier(vec3 A, vec3 B, vec3 C, vec3 D, vec3 E, float t) {\n vec3 A1 = mix(A, B, t);\n vec3 B1 = mix(B, C, t);\n vec3 C1 = mix(C, D, t);\n vec3 D1 = mix(D, E, t);\n\n vec3 A2 = mix(A1, B1, t);\n vec3 B2 = mix(B1, C1, t);\n vec3 C2 = mix(C1, D1, t);\n\n vec3 A3 = mix(A2, B2, t);\n vec3 B3 = mix(B2, C2, t);\n \n vec3 P = mix(A3, B3, t);\n\n return P;\n}\n\nvec3 bezier(vec3 A, vec3 B, vec3 C, vec3 D, vec3 E, vec3 F, float t) {\n vec3 A1 = mix(A, B, t);\n vec3 B1 = mix(B, C, t);\n vec3 C1 = mix(C, D, t);\n vec3 D1 = mix(D, E, t);\n vec3 E1 = mix(E, F, t);\n\n vec3 A2 = mix(A1, B1, t);\n vec3 B2 = mix(B1, C1, t);\n vec3 C2 = mix(C1, D1, t);\n vec3 D2 = mix(D1, E1, t);\n\n vec3 A3 = mix(A2, B2, t);\n vec3 B3 = mix(B2, C2, t);\n vec3 C3 = mix(C2, D2, t);\n\n vec3 A4 = mix(A3, B3, t);\n vec3 B4 = mix(B3, C3, t);\n \n vec3 P = mix(A4, B4, t);\n\n return P;\n}\n\nvec3 bezier(vec3 A, vec3 B, vec3 C, vec3 D, vec3 E, vec3 F, vec3 G, float t) {\n vec3 A1 = mix(A, B, t);\n vec3 B1 = mix(B, C, t);\n vec3 C1 = mix(C, D, t);\n vec3 D1 = mix(D, E, t);\n vec3 E1 = mix(E, F, t);\n vec3 F1 = mix(F, G, t);\n\n vec3 A2 = mix(A1, B1, t);\n vec3 B2 = mix(B1, C1, t);\n vec3 C2 = mix(C1, D1, t);\n vec3 D2 = mix(D1, E1, t);\n vec3 E2 = mix(E1, F1, t);\n\n vec3 A3 = mix(A2, B2, t);\n vec3 B3 = mix(B2, C2, t);\n vec3 C3 = mix(C2, D2, t);\n vec3 D3 = mix(D2, E2, t);\n\n vec3 A4 = mix(A3, B3, t);\n vec3 B4 = mix(B3, C3, t);\n vec3 C4 = mix(C3, D3, t);\n\n vec3 A5 = mix(A4, B4, t);\n vec3 B5 = mix(B4, C4, t);\n \n vec3 P = mix(A5, B5, t);\n\n return P;\n}\n\nvoid main() { \n #include \n\n // animate along curve and loop\n float t = quarticInOut(fract((time * speed + timeOffset)));\n\n vec3 pos = position;\n\n #ifdef USE_CURVE\n pos = bezier(curveStart, curveCtrl1, curveCtrl2, curveEnd, t);\n #endif\n\n vec3 transformed = vec3( pos );\n\n // visible near visibleIndex\n float dist = distance(index, visibleIndex);\n vAlpha = smoothstep(maxIndexDistance * 0.75, 0.0, dist); // show after lines draw in (* 0.75)\n\n #include \n #include \n gl_PointSize = size;\n #ifdef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n #endif\n #include \n #include \n #include \n #include \n}",a.fragmentShader="#define GLSLIFY 1\nuniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n\nuniform float radius;\nuniform float visibleIndex;\nuniform float maxIndexDistance;\n\nvarying vec3 vViewPosition;\nvarying float vAlpha;\n\n#define V0 vec3(0.0)\n\nvoid main() {\n if(vAlpha <= 0.05){\n discard;\n return;\n }\n\n #include \n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n\n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a * vAlpha );\n #include \n #include \n #include \n #include \n}",this.particleUniforms=a.uniforms};let R=new Ss(w,Q);this.mesh.add(R),this.materials=[p,Q],this.spikes=v,this.spikeIntersects=o,this.particles=R,this.spikes.renderOrder=3,this.particles.renderOrder=4}getDensities(){let{data:a,maxAmount:b=1e3,radius:c}=this.props,d=new q,e=[],f=[];for(let g=0;g{e.forEach((c,d)=>{b!==d&&10>=a.distanceTo(c)&&f[b]++})});let m=99999,n=-1;return f.forEach(a=>{an&&(n=a)}),{densityValues:f,minDensity:m,maxDensity:n}}setHighlightIndex(a){this.spikeUniforms&&this.spikeUniforms.highlightIndex.value!==a&&(this.spikeUniforms.highlightIndex.value=a)}update(a){if(this.spikeUniforms&&this.particleUniforms){let{maxAmount:b,maxIndexDistance:c}=this.props;this.spikeUniforms&&(this.spikeUniforms.visibleIndex.value=a),this.particleUniforms&&(this.particleUniforms.visibleIndex.value=a);let d=fA(a-c|0,0,b),e=2*c|0,f=fA(d+e,0,b);this.spikes.count=f,this.particles.geometry.setDrawRange(d,e)}}dispose(){this.mesh&&fu(this.mesh,ft),this.mesh&&this.mesh.parent&&this.mesh.parent.remove(this.mesh),this.props=null,this.mesh=null,this.spikeUniforms=null,this.particleUniforms=null,this.materials=null,this.spikes=null,this.particles=null}}class jl{constructor(a){this.props=a,this.init()}init(){let{data:a,radius:b=1,camera:c,maxAmount:d=a.length,maxIndexDistance:e,visibleIndex:f,colors:g}=this.props,{parentNode:h,lineWidth:i,pixelRatio:l}=fk;this.mesh=new Er,this.isAnimating=[],this.animatingLandingsOut=[],this.landings=[],this.lineMeshes=[],this.lineHitMeshes=[],this.highlightedMesh,this.colors=g,this.landingGeo=new Ts(.35,8),this.TUBE_RADIUS_SEGMENTS=3,this.HIT_DETAIL_FRACTION=4,this.DATA_INCREMENT_SPEED=1.5,this.PAUSE_LENGTH_FACTOR=2,this.MIN_PAUSE=3e3,this.visibleIndex=0,this.lineAnimationSpeed=600;let m=new q,n=new q;this.tubeMaterial=new ye({blending:2,opacity:.95,transparent:!0,color:this.colors.mergedPrColor}),this.highlightMaterial=new ye({opacity:1,transparent:!1,color:this.colors.mergedPrColorHighlight}),this.hiddenMaterial=new ye({visible:!1});for(let o=0;o1.5){let x;x=fz(w,0,2*b,1,w>1.85*b?3.25:w>1.4*b?2.3:1.5);let y=fv(s.lat,s.lon,t.lat,t.lon),z=fw(y[0],y[1],b*x);m.copy(z),n.copy(z);let C=fz(w,10,30,.2,.15),D=fz(w,10,30,.8,.85);x=fz(w,0,2*b,1,1.7);let E=new ja(u,m,n,v);E.getPoint(C,m),E.getPoint(D,n),m.multiplyScalar(x),n.multiplyScalar(x);let F=new ja(u,m,n,v),I=fw(t.lat,t.lon,b+o/1e4),J=fw(t.lat,t.lon,b+5);this.landings.push({pos:I,lookAt:J});let K=20+parseInt(F.getLength()),L=new aa(F,K,.08,this.TUBE_RADIUS_SEGMENTS,!1),M=new aa(F,parseInt(K/this.HIT_DETAIL_FRACTION),.6,this.TUBE_RADIUS_SEGMENTS,!1);L.setDrawRange(0,0),M.setDrawRange(0,0);let N=new Ke(L,this.tubeMaterial),P=new Ke(M,this.hiddenMaterial);P.name="lineMesh",N.userData={dataIndex:o},P.userData={dataIndex:o,lineMeshIndex:this.lineMeshes.length},this.lineMeshes.push(N),this.lineHitMeshes.push(P)}}let{width:Q,height:R}=h.getBoundingClientRect()}resetHighlight(){null!=this.highlightedMesh&&(this.highlightedMesh.material=this.tubeMaterial,this.highlightedMesh=null)}setHighlightObject(a){let b=parseInt(a.userData.lineMeshIndex),c=this.lineMeshes[b];c!=this.highlightedMesh&&(c.material=this.highlightMaterial,this.resetHighlight(),this.highlightedMesh=c)}update(a=.01,b){let c=parseInt(this.visibleIndex+a*this.DATA_INCREMENT_SPEED);c>=this.lineMeshes.length&&(c=0,this.visibleIndex=0),c>this.visibleIndex&&this.isAnimating.push(this.animatedObjectForIndex(c));let d=[],e=[];for(let f of this.isAnimating){let g=f.line.geometry.index.count,h=f.line.geometry.drawRange.count+a*this.lineAnimationSpeed,i=f.line.geometry.drawRange.start+a*this.lineAnimationSpeed;if(h>=g&&i=g*this.PAUSE_LENGTH_FACTOR+this.MIN_PAUSE&&i.99){if(null==a.dotFade)return;return a.dotFade.material.opacity=0,this.mesh.remove(a.dotFade),ft(a.dotFade),void(a.dotFade=null)}let b=a.dot.scale.x+.06*(1-a.dot.scale.x);a.dot.scale.set(b,b,1);let c=a.dotFade.scale.x+.06*(1-a.dotFade.scale.x);a.dotFade.scale.set(c,c,1),a.dotFade.material.opacity=1-c}animateLandingOut(a){if(a.dot.scale.x<.01)return this.mesh.remove(a.dot),a.dot=null,ft(a.dot),null!=a.dotFade&&(this.mesh.remove(a.dotFade),ft(a.dotFade),a.dotFade=null),!1;let b=a.dot.scale.x-.15*a.dot.scale.x;return a.dot.scale.set(b,b,1),!0}animatedObjectForIndex(a){let b=this.lineMeshes[a];this.mesh.add(b);let c=this.lineHitMeshes[a];this.mesh.add(c);let d=this.landingFromPositionData(this.landings[a]);this.mesh.add(d);let e=this.fadingLandingMeshFromMesh(d);return this.mesh.add(e),{line:b,lineHit:c,dot:d,dotFade:e}}landingFromPositionData(a){let b=new Ke(this.landingGeo,this.tubeMaterial);return b.position.set(a.pos.x,a.pos.y,a.pos.z),b.lookAt(a.lookAt.x,a.lookAt.y,a.lookAt.z),b.scale.set(0,0,1),b}fadingLandingMeshFromMesh(a){let b=a.clone();return b.geometry=new ia(1.55,1.8,16),b.material=new ye({color:this.colors.mergedPrColor,blending:2,transparent:!0,opacity:0,alphaTest:.02,visible:!0}),b.scale.set(0,0,1),b.renderOrder=5,b}dispose(){this.mesh&&fu(this.mesh,ft),this.mesh&&this.mesh.parent&&this.mesh.parent.remove(this.mesh),this.mesh=null}}function fC(){let a=navigator.connection;void 0===a||"slow-2g"!==a.effectiveType&&"2g"!==a.effectiveType?function(){fD();let a=document.querySelector(fb);if(!a)return;let b=window.innerWidth<=500?".js-globe-fallback-video-small":".js-globe-fallback-video",c=a.querySelector(b);c.removeAttribute("hidden"),c.play()}():function(){fD();let a=document.querySelector(fb);a&&a.querySelector(".js-globe-fallback-image").removeAttribute("hidden")}()}function fD(){let a=document.querySelector(fb);if(!a||!a.hasChildNodes())return;let b=a.parentNode;b&&b.classList.remove("home-globe-container-webgl");let c=a.querySelector(".js-webgl-globe-loading");c&&a.removeChild(c);let d=a.querySelector(".js-globe-canvas");d&&a.removeChild(d);let e=a.querySelector(".js-globe-popup");e&&a.removeChild(e)}class Yl{constructor(a){this.props=a,this.init(),this.now=new Date,this.cardHeader="",this.units={day:864e5,hour:36e5,minute:6e4,second:1e3},this.cardOffset={x:10,y:16}}init(){let a=document.querySelector(this.props.parentSelector||"body"),{basePath:b,imagePath:c}=fk;this.isVisible=!1,this.element=function(a,b,c){a=a||"div";let d=document.createElement(a);return b&&b.forEach(a=>{d.classList.add(a)}),c&&(d.innerHTML=c),d}("div",["data-info","position-absolute","top-0","left-0","rounded","text-mono","f6","py-3","pl-2","pr-5","z-3","js-globe-popup","text-white","d-none"],` + + +
              + + +
              + +
              +
              #34234 facebook/react
              +
              +
              + +
              + `),this.element.style.maxWidth="450px",this.element.style.backgroundColor="rgba(0,0,0, 0.4)",this.element.style.backdropFilter="blur(10px)",this.element.style.webkitBackdropFilter="blur(10px)",a.appendChild(this.element),this.card=this.element.querySelector(".js-globe-popover-card"),this.header=this.card.querySelector(".js-globe-popover-header"),this.body=this.card.querySelector(".js-globe-popover-body")}update(a,b){let c=a.x+b.x+this.cardOffset.x,d=a.y+b.y+this.cardOffset.y,e=this.element.getBoundingClientRect(),f=Math.min(c,window.innerWidth-e.width-this.cardOffset.x),g=d+e.height,h=a.y-e.height-this.cardOffset.y/2+b.y,i=g>window.innerHeight+b.y?h:d;this.element.style.transform=`translate(${f}px, ${i}px)`}setInfo(a){let{user_opened_location:b,user_merged_location:c,language:d,type:e,header:f,body:g,name_with_owner:h,pr_id:i,time:l,url:m}=a,n=`#${i} ${h}`;if(this.cardHeader==n||this.cardHeader==f)return;this.cardHeader=n;let o=this.shouldShowTime(l)?this.relativeTime(l):"";null!==m&&(this.card.href=m),e===fe?(this.header.textContent=n,this.body.textContent="",this.body.insertAdjacentHTML("beforeend",`Opened in ${b}, +merged ${o} in ${c}`),null!==d&&this.body.prepend(d,this.colorDotForLanguage(d)),this.showPRIcon()):e===fd?(this.header.textContent=n,this.body.textContent="",this.body.insertAdjacentHTML("beforeend",`Opened ${o} in ${b}`),null!==d&&this.body.prepend(d,this.colorDotForLanguage(d)),this.showPRIcon()):e===ff&&(this.header.textContent=f,this.body.innerText=g,this.showGHIcon())}relativeTime(a){let b=new Date(a).toISOString();return`${b}`}shouldShowTime(a){return null!==a&&this.now-a10&&this.fpsStorage.shift();let d=this.fpsStorage.reduce((a,b)=>a+b)/this.fpsStorage.length;d9?(this.fpsWarnings++,this.fpsWarnings>this.fpsWarningThreshold&&(this.renderQuality=Math.max(this.renderQuality-1,1),this.fpsWarnings=0,this.updateRenderQuality(),this.fpsStorage=[])):this.fpsStorage.length>9&&d 0.51) {\n gl_FragColor.a = 1.0 + ( 0.51 - gl_FragCoord.z ) * 17.0;\n }\n ")};let p=new ls(n,o,d.length);for(let r=0;r{for(let d of(c.position.set(a.x,a.y,a.z),c.lookAt(b.x,b.y,b.z),c.rotateX(90*fm),c.scale.set(.1,.1,.1),c.renderOrder=3,c.children))d.material=this.vaultMaterial,d.name="arcticCodeVault",this.arcticCodeVaultMesh=d,this.intersectTests.push(this.arcticCodeVaultMesh);this.container.add(c)})}highlightArcticCodeVault(){if(this.vaultIsHighlighted)return;this.arcticCodeVaultMesh.material=this.highlightMaterial,this.vaultIsHighlighted=!0;let a=document.querySelector(".js-globe-aurora");if(null===a)return;a.play(),a.hidden=!1;let b=a.getAnimations();for(let c of b)return void c.reverse();a.animate([{opacity:0},{opacity:1}],{fill:"both",duration:1600,easing:"ease-in-out"})}resetArcticCodeVaultHighlight(){if(!this.vaultIsHighlighted)return;this.arcticCodeVaultMesh.material=this.vaultMaterial,this.vaultIsHighlighted=!1;let a=document.querySelector(".js-globe-aurora");if(null===a)return;let b=a.getAnimations();for(let c of(a.getAnimations(),b))return void c.reverse();a.animate([{opacity:1},{opacity:0}],{fill:"both",duration:1600,easing:"ease-in"}),a.pause()}visibilityForCoordinate(a,b,c){let d=4*c.width,e=parseInt((a+180)/360*c.width+.5),f=c.height-parseInt((b+90)/180*c.height-.5),g=parseInt(d*(f-1)+4*e)+3;return c.data[g]>90}getImageData(a){let b=document.createElement("canvas").getContext("2d");return b.canvas.width=a.width,b.canvas.height=a.height,b.drawImage(a,0,0,a.width,a.height),b.getImageData(0,0,a.width,a.height)}addListeners(){let a={capture:!1,passive:!0};window.addEventListener("resize",this.handleResize,a),window.addEventListener("orientationchange",this.handleResize,a),window.addEventListener("scroll",this.handleScroll,a),new IntersectionObserver(a=>{for(let b of a)b.isIntersecting||this.paused?b.isIntersecting&&this.paused&&(this.paused=!1,fj.emit(fh)):(this.paused=!0,fj.emit(fg))}).observe(this.renderer.domElement),this.handleClick=a=>{null===this.dataItem||null===this.dataItem.url||this.shouldCancelClick(a)||window.open(this.dataItem.url,"_blank")},this.renderer.domElement.addEventListener("mouseup",this.handleClick,a),this.handleMouseDown=a=>{this.resetInteractionIntention(a)},this.renderer.domElement.addEventListener("mousedown",this.handleMouseDown,a),this.handleTouchStart=a=>{let b=a.changedTouches[0];this.handleMouseMove(b),this.resetInteractionIntention(b),a.preventDefault()},this.renderer.domElement.addEventListener("touchstart",this.handleTouchStart,{capture:!1}),this.handleTouchMove=a=>{this.shouldCancelClick(a.changedTouches[0])&&(this.mouse={x:-9999,y:-9999},a.preventDefault())},this.renderer.domElement.addEventListener("touchmove",this.handleTouchMove,{capture:!1}),this.renderer.domElement.addEventListener("mousemove",this.handleMouseMove,a)}removeListeners(){window.removeEventListener("resize",this.handleResize),window.removeEventListener("orientationchange",this.handleResize),this.renderer.domElement.removeEventListener("mousemove",this.handleMouseMove),this.renderer.domElement.removeEventListener("mouseup",this.handleClick),this.renderer.domElement.removeEventListener("mousedown",this.handleMouseDown),this.renderer.domElement.removeEventListener("touchstart",this.handleTouchStart),this.renderer.domElement.removeEventListener("touchmove",this.handleTouchMove)}updateCanvasOffset(){let a=document.querySelector(fc).getBoundingClientRect(),b=document.querySelector(fb).getBoundingClientRect();this.canvasOffset={x:b.x-a.x,y:b.y-a.y}}resetInteractionIntention(a){this.mouseDownPos={x:a.clientX,y:a.clientY}}shouldCancelClick(a){let b=Math.abs(a.clientX-this.mouseDownPos.x);return Math.abs(a.clientY-this.mouseDownPos.y)>2||b>2}positionContainer(){let{isMobile:a}=fk,{height:b}=this.parentNodeRect,c=850/b*1;this.containerScale=c,a?this.parentContainer.position.set(0,0,0):(this.parentContainer.scale.set(c,c,c),this.parentContainer.position.set(0,0,0),this.haloContainer.scale.set(c,c,c)),this.haloContainer.position.set(0,0,-10),this.positionLights(c)}positionLights(a=1){this.light0&&(this.light0.position.set(this.parentContainer.position.x-2.5*this.radius,80,-40).multiplyScalar(a),this.light0.distance=120*a),this.light1&&this.light1.position.set(this.parentContainer.position.x-50,this.parentContainer.position.y+30,10).multiplyScalar(a),this.light2&&(this.light2.position.set(this.parentContainer.position.x-25,0,100).multiplyScalar(a),this.light2.distance=150*a),this.light3&&(this.light3.position.set(this.parentContainer.position.x+this.radius,this.radius,2*this.radius).multiplyScalar(a),this.light3.distance=75*a)}handlePause(){this.stopUpdating(),this.clock.stop()}handleResume(){this.clock.start(),this.startUpdating()}handleResize(){clearTimeout(this.resizeTimeout),this.resizeTimeout=setTimeout(()=>{let{width:a,height:b,x:c,y:d}=fk.parentNode.getBoundingClientRect();this.cachedParentNodeRect={scrollY:window.scrollY,scrollX:window.scrollX,y:d,x:c},this.parentNodeRect={width:a,height:b,x:c,y:d},this.camera.aspect=a/b,this.camera.updateProjectionMatrix(),this.renderer.setSize(a,b),this.positionContainer();let e=850/b*1,f=this.radius*e;this.shadowPoint.copy(this.parentContainer.position).add(new q(.7*f,-(.3*f),f)),this.globe.setShadowPoint(this.shadowPoint),this.highlightPoint.copy(this.parentContainer.position).add(new q(-(1.5*f),-(1.5*f),0)),this.globe.setHighlightPoint(this.highlightPoint),this.frontPoint=(new q).copy(this.parentContainer.position).add(new q(0,0,f)),this.globe.setFrontPoint(this.frontPoint),this.globe.setShadowDist(1.5*f),this.globe.setHighlightDist(5*e),this.updateCanvasOffset()},150)}handleScroll(){this.parentNodeRect.y=this.cachedParentNodeRect.y+(this.cachedParentNodeRect.scrollY-window.scrollY),this.parentNodeRect.x=this.cachedParentNodeRect.x+(this.cachedParentNodeRect.scrollX-window.scrollX)}handleMouseMove(a){let{width:b,height:c,x:d,y:e}=this.parentNodeRect,f=a.clientX-d,g=a.clientY-e;this.mouse.x=f/b*2-1,this.mouse.y=-g/c*2+1,this.mouseScreenPos.set(f,g)}startUpdating(){this.stopUpdating(),this.update()}stopUpdating(){cancelAnimationFrame(this.rafID)}setDragging(a=!0){this.dragging=a}setDataInfo(a){if(!this.dataInfo||this.dataItem==a)return;this.dataItem=a;let{uol:b,uml:c,l:d,type:e,body:f,header:g,nwo:h,pr:i,ma:l,oa:m}=a,n=l||m;n&&(n=Date.parse(n=(n=n.replace(" ","T")).includes("Z")?n:n.concat("-08:00"))),h&&i&&(this.dataItem.url=`https://github.com/${h}/pull/${i}`),this.dataInfo.setInfo({user_opened_location:b,user_merged_location:c,language:d,name_with_owner:h,pr_id:i,time:n,type:e,body:f,header:g,url:this.dataItem.url})}testForDataIntersection(){let{mouse:a,raycaster:b,camera:c}=this;this.intersects.length=0,function(a,b,c,d,e,f=!1){(d=d||new Oo).setFromCamera(a,b);let g=d.intersectObjects(c,f,e);g.length>0&&g[0]}(a,c,this.intersectTests,b,this.intersects),this.intersects.length&&this.intersects[0].object===this.globe.meshFill&&(this.intersects.length=0)}transitionIn(){return new Promise(()=>{this.container.add(this.openPrEntity.mesh),this.container.add(this.mergedPrEntity.mesh)})}handleUpdate(){if(this.monitorFps(),null===this.clock)return;let a=this.clock.getDelta();if(this.controls&&this.controls.update(a),this.visibleIndex+=a*this.indexIncrementSpeed,this.visibleIndex>=this.maxAmount-60&&(this.visibleIndex=60),this.openPrEntity&&this.openPrEntity.update(this.visibleIndex),this.mergedPrEntity&&this.mergedPrEntity.update(a,this.visibleIndex),!this.dataInfo)return void this.render();let{raycaster:b,camera:c,mouseScreenPos:d}=this,e,f=!1;if(this.raycastIndex%this.raycastTrigger==0){if(this.testForDataIntersection(),this.intersects.length){this.radius,this.containerScale;for(let g=0;g=this.raycastTrigger&&(this.raycastIndex=0),this.render()}update(){this.handleUpdate(),this.hasLoaded||this.sceneDidLoad(),this.rafID=requestAnimationFrame(this.update)}render(){this.renderer.render(this.scene,this.camera)}shouldShowMergedPrEntity(a,b){let c=a.geometry.attributes.index.array[b];return c>=this.visibleIndex-this.maxIndexDistance&&c<=this.visibleIndex+this.maxIndexDistance}sceneDidLoad(){this.hasLoaded=!0;let a=document.querySelector(".js-webgl-globe-loading");if(!a)return;let b={fill:"both",duration:600,easing:"ease"};this.renderer.domElement.animate([{opacity:0,transform:"scale(0.8)"},{opacity:1,transform:"scale(1)"}],b),a.animate([{opacity:1,transform:"scale(0.8)"},{opacity:0,transform:"scale(1)"}],b).addEventListener("finish",()=>{a.remove()})}setMergedPrEntityDataItem(a){this.mergedPrEntity.setHighlightObject(a),this.openPrEntity.setHighlightIndex(-9999);let b=this.mergedPrEntity.props.data[parseInt(a.userData.dataIndex)];return b.type=fe,b}shouldShowOpenPrEntity(a){return a>=this.visibleIndex-this.maxIndexDistance&&a<=this.visibleIndex+this.maxIndexDistance}setOpenPrEntityDataItem(a){this.openPrEntity.setHighlightIndex(a),this.mergedPrEntity.resetHighlight();let b=this.openPrEntity.props.data[a];return b.type=fd,b}dispose(){this.stopUpdating(),this.removeListeners(),fj.off(fg,this.handlePause),fj.off(fh,this.handleResume),this.renderer&&this.renderer.domElement&&this.renderer.domElement.parentNode&&this.renderer.domElement.parentNode.removeChild(this.renderer.domElement),this.controls&&this.controls.dispose(),this.globe&&this.globe.dispose(),this.openPrEntity&&this.openPrEntity.dispose(),this.mergedPrEntity&&this.mergedPrEntity.dispose(),this.dataInfo&&this.dataInfo.dispose(),this.scene=null,this.camera=null,this.renderer=null,this.parentContainer=null,this.container=null,this.clock=null,this.mouse=null,this.mouseScreenPos=null,this.raycaster=null,this.paused=null,this.radius=null,this.light0=null,this.light1=null,this.light2=null,this.light3=null,this.shadowPoint=null,this.highlightPoint=null,this.frontPoint=null,this.globe=null,this.dragging=null,this.rotationSpeed=null,this.raycastIndex=null,this.raycastTrigger=null,this.raycastTargets=null,this.intersectTests=null,this.controls=null,this.maxAmount=null,this.maxIndexDistance=null,this.indexIncrementSpeed=null,this.visibleIndex=null,this.openPrEntity=null}}class Jl{constructor(){this.reset()}reset(){clearInterval(this.interval),this.loadInfo={},this.assets={}}load(a,b){return this.reset(),this.progressCallback=b,new Promise(b=>{if(!a.length)return void b(null);let c=[];a.forEach(a=>{"[object Array]"!==Object.prototype.toString.call(a.url)&&(a.url.indexOf(".png")> -1||a.url.indexOf(".jpg")> -1||a.url.indexOf(".jpeg")> -1||a.url.indexOf(".gif")> -1||a.url.startsWith("data:image")?(this.assets.textures=this.assets.textures||{},c.push(this.loadTexture(a))):a.url.indexOf(".json")> -1&&0===a.type&&(this.assets.data=this.assets.data||{},c.push(this.loadData(a))))}),this.interval=setInterval(this.update,1e3/30),Promise.all(c).then(()=>{b({assets:this.assets,loader:this})})})}loadData(a){this.loadInfo[a.id]={loaded:0,total:0};let b=new XMLHttpRequest,c=!1;return new Promise((d,e)=>{let f=()=>{c=!0,this.assets.data[a.id]=null,this.loadInfo[a.id].loaded=this.loadInfo[a.id].total=1,e(Error("loadData error"))};b.addEventListener("progress",b=>{this.loadInfo[a.id].loaded=b.loaded,this.loadInfo[a.id].total=b.total}),b.overrideMimeType("application/json"),b.open("GET",a.url,!0),b.onreadystatechange=()=>{4===b.readyState&&200===b.status?(this.assets.data[a.id]=JSON.parse(b.responseText),this.loadInfo[a.id].loaded=this.loadInfo[a.id].total,d(this.assets.data[a.id])):404!==b.status||c||f()},b.onerror=f,b.send()})}loadTexture(a){let b=new Ra;return this.loadInfo[a.id]={loaded:0,total:0},new Promise((c,d)=>{b.load(a.url,b=>{this.loadInfo[a.id].loaded=this.loadInfo[a.id].total,this.assets.textures[a.id]=b,c()},b=>{this.loadInfo[a.id].loaded=b.loaded,this.loadInfo[a.id].total=b.total},a=>{d(a)})})}update(){if("function"==typeof this.progressCallback){let a=0,b=0;for(let c in this.loadInfo)this.loadInfo[c].loaded&&(a+=this.loadInfo[c].loaded),this.loadInfo[c].total&&(b+=this.loadInfo[c].total);this.progressCallback&&this.progressCallback(a,b)}}dispose(){clearInterval(this.interval),this.interval=null,this.loadInfo=null,this.assets=null,this.progressCallback=null}}async function fE(a=""){let b=await fetch(a,{method:"GET",mode:"no-cors"});if(200!==b.status)throw Error(`WebGL Globe: Failed to load data.json (status: ${b.status})`);return b.json()}let fF=JSON.parse('{"S":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAADIBAMAAAA0O6rRAAAAHlBMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaVcReAAAACXRSTlMAEChEiMxl56vEbilmAAAWzElEQVR42uxaS1PbyBZuSYyLu5Nk4mGph0OSnS0Zh+wAy8bsZgBhe2dsoZjdJMEI7SD4xTax3O5/e7v18ksyBpxbNXXTVUkhWd19vj7nfOchAfB7/B6/x+/x/zw4jmP/VfJKsmmaqiRNxE6aplEe6N1qddDJ/hvQcPyOZlYsG5EBrbNGUs0rDaNzhCYDtusCUc6qSwLqfw5DVvdse0riqnmJLyGcuueO0q1mtQtPr0ezQDbueVn2rylXlZQAksIvRMGzuwhqxQmMntG15iGE41rBQlEzZ03JiiJJLBGfKIHKd8oX+RbUBooZPCG6/0tH9lj4ReaZVFhG2MNiB5I7vQuQbsXBQL0MPlgxdRGCKA80HWHVtUWOxzISN+IkThQp5f0+QUzA5TISPq9BY2tQQ9ZXRly3JvJaBmzD9sP7Ur4GUcWT9CtjdNu1WCAnLD5xAbDBuVJFBJFT6xRUfko+71eO4vBfdF5wSYJXOJZK5jXNbh+sEQrFKTkbCpQqD7TU4wNnKEUi/bgkJPpoyfhG3H1aDnYbofs3cD9+J1l09yP/CKCUqh2qc7QgvxjGTt+6yfNcE+zUGVXarTZaho0sC53i39J2PA5YJQRXn1mrNQZMQQzUMLcPVrr3F/6XFrjk91yui70wb2annjLVUpb1OCJymfjBFKu3faezg7SLbg05+bPP6EbNaSXNtf2dslYyy5FwYJPLKvQc9QQg5ng52apqnZLv3MwBoHjZ6DuB1cK6T9GcSGG2GVZNrcDNLkFJApDyOBbTAhfD5BSgkuU+cnS9eaGUq0d6woLtCrSvp555H4mkRPx2YTnMSslWPT1zmC17bCqhOnJCatCfXtGpe87EE3f75N1rd9udiaaodL8NSjwvAZrjmGykQrq6pgmMin/kMW6TKZc0ySgpTYWdQAWfozQSuR5H8UUbwUM2N7mXRudC7jDkxrcXj7MrjVkSMBlNEQFvHAd3rV6WSnp7sOLlIwIlwKfMBkexkfyw4R7JoUjzxSGVs5GJ2Wirclu81fWDuadmh9OIi+J5VS3WWSM8iIR9w9IEB/0AOPNzpWvNr6Xr1ap8hdOFQ5DUfIMbigQcsW/GbA7s8w4+UYXPKSxm8SjjusJxrYYDd+XaHlHlGjq1VOAvNZ4goReB/FwWkTLTof147OcyV2h/Ay0d32iQCzzne5DOpVEHOdgyA7IgOGijqcxlJP2q6GoaYgYG6TMDZkKpYTkMduXj+T2HYRoVkR/P6NyGqpt67tjQqC3FAetX1cmVdTvoKJhMkqokK2wa5ENi4bFTI9hpioRZKF6RDU0g8N77M8+UDPa1IdgLPdHp+JMTCxI40UBoXtPbem/a1+XyA4OXoWqTnCFu3C48MG7iMyB7pCYLbge2ael6ydRtcjm6zGkSXSHzHRs5Ygu79QNIfsRRwlvzxpu76czFxttoF2H67iZOueEDpFwLoI1yE1yiFw29olcHg6YACj57a7XYyNYt6INBp609qO4zuvAODRkP9qkvYX53ekq7F5m68sXHSZ6PH6FFkT6kclrBTGN9Z4/RK4YD0K1r6XRxiW0W5Lxsw46peddmDf3cMkn+hy3RY8ApIZxSIybkSjNnhTno7Xc6Xwnn2a8BggAWRmuSbXKRKrGq2BqIxFP3KsSkKM1jAadHJk9R/0EsW00yGtiqED548/AZrWsAnfx/n8gNpKsojZXY1O7CXcz8QEiT+8Mrj5+CudDxiimmmtRaZ7OaSXiKcDc8l/IltVhE6xug0TxCpwKDj8aK+n0oXy6ofPT4wIKtrssayYEwFRIdxQ+rqUcy624GyBv3CYF2NV+ngmxjXUCwe7RwKKEVaTPSPxbhWU0Ez4TNoUHsaey7tWeXP8K85T3xnxmXZ2peoPQUfC4PausGgmOKIYC9/Ir8N+QSR41WZqvuiXY3ddxTKuB3tNnYyrh8cC7sBQS9VhgI+mGKZVadMcY0Rb3ZT22VcvUNnMH7p07iGRpFpLv+76mKF+8Z9CuG0zkPspONVee4GQ0P0ptuoSAXA4fG5R/6EtElyZCeBfAcAz9AE98Zt9Yi/nmg3bOs14AhZT83IVC4bHKQDPKEOOFBhgr9wDhC9eiOj84SxiLLfmPpGrztnIHjNeC4YROE9iyca0wHq0Q57BrIaivWEe/8HFlyPepO2Ph7IrAWGQhZCkdcrJEhWXMf8KpIXw7s17pE1ya28RGWC5I6b82dIrbj80JBCF0z6hiCZPmdVxUcO09UzqyXbl/BA6zzaxak+tYrUTimrKiUoQo4nR1Gt/E+QI938NapuN2++elequab4clyIOKAd4nxAnzAChGB/PbVJhUcUW6S602Vq8Q2+lk9E5RXsfu1S4Lbxvg0l7BH1fsknkO/vC9hwspk6bOPr8RxFvAkY08FrnBP7Kf5fh1kllV9YS9UZMFm5mqGx+Kbu/ZXP9AAG0fIjdfq45oNDulPbBCnC9ud0K3uaKYMWnJyjn5PpycRMrusnZT9BN0j/M9omPdZ+lVefhE2u7FJQBbMtxqktzdAZBf6DrEszEy35ON1wlyN6MdTbzkWMMXeq/OSUZ5temtjjZRYMPcmRm7yC+zzuCxPSU1fPcQC2UQ/qGOsEtroIwvaa4geEOmjYO3xTAOZwppgRTamFRTrcvZCohPdTjrZIHa9uc6EZBiUBfXpNIiSOSlGivyK8dfpxL6U2T5kt/AD9OMacbR9IPRw+jXaUsZZgfKhZTv1vWVBMT3QGv11KqQ5jmiPPdGKf1IlIy4pZam2ueQ9GQ/Y9FpTXcnPuKVn9OIT0W2VibWqmihgr0N/LQkkYtdeKxDZe8XyvPenuxE4DiYtqDObxNmPlj0M32Mu+ntlzSWU/EV5/nueCJUcJFl6csTXbhO0NcQgEjE2u71eIKeJny94YbVY0EHdPiv1nfC6wR1gIs/GayQiIDm5l3u/w250InvKzwXinsn3bJDA6E4v+9QiQXoZAvoR8iF8dkfoHqQVQCns600Ll1PHo8SR214Z9z6T7igbr40QiFODci1MaTYasgvrB/1MIhgDatvKqAJYB5AD29l1mu+xcBlgelqm4lRtGM3sMbZH52LTDfKTyOz2YP56bndrn2Sz7TpYC5B6DVWLpM77SUBQT5kmLr7GVJZp2lDw2rI+V5Pa7avf7lqRsAYFLJIFC8939kjN97CLu5/QfHs6pNqBDhJ3W+jWy7lOAF0mFlkjrvucPsS9ezYZE6wJCPJeycDeCtThnjeprDfuQA6TNZb9EZIm49j7puUEXK0OxPWMxOmLvheoPZmEPn0QsJ4SwB//4PDa20fDi3ez7aUVnaRt+wX6JnzRd0NLFP/38mJ9UgpAaYcFG9hNmS/slcPOpKJ34I+VvKMsvEPexx9/whd9NfQmfvF46ph8feAWko6XY1Mlow7ehdwVLLJSqYIZ+wP66kbd49GLvkVh7HhGB0+rhCLkdgD+y961fKWtdfGcBPgcJrGlHQa0YmcI+GBGFXnMbAsCM0GKMLu3lkuZVSsWpkoI+W+/nDwgCXmckwRc7eoedHW15LHP2c/f3vsExNh4PlaU3mR7cB03wJ40Ghwx56KTKYROClbALAr1vDCig7WOCxxxMuo3hkKShHt4BJiH80y9vYg70aIVKTvvzRVZvfDGyJZ90IN6CzVY5hT334HtPR0Szw9+gsnRlKA6X8RBzmOfk41s2fZo2ARa4lxlHDaQgAJmeaHSJKjvB8Sh0Ki0CI+ULlre+gPa1csCqBGmxUUj5jCiO9r91CG8U8QJgHXReL1D/daWWNkrqDAzdh0d+oIU4YdAY7WOiOqUXpuLKw2xkoINaLgFEvmB73y20GY/NLx49dWFFx446U5C5Yswwk6okoR/2rpYhhHCUJy1vhRRGXljlpCVVhKMOMtvuzYN8ssw4jQ6zhEggmZ7Y8ANmJvTE2Rlx+zGtKL/NTXZuidVm+ye2oDtWMq+Q2OoOSPEmBHGJaTvLvPj57D2XCVyB5Mf7uacidnHg7zWBPaRLFu3XJjTa4IIYBKALMaHRmP1/t8ugvbZmyZByw/mHJl/hWZ9/W8IVPeeLrWRKPz1zBU8cWwOyGUXJplslqqDqrPWzwHhDHCg+sRZxBgovmrOT72HaRA+0YLeKcheSNExQzt6lrufgCGCoMPk8dJ9wJUBtYrrTvccrZD64nxNnDddAcnCU0CjMlSSEnXNJpnRZZmP097CTVXbdJaA5xx/LlTSGazYPUa7Ze/qjoBz/pdwQLJJz5Iliv+GzMlmwu6nP7EVfYdzMUHQD5Ln/wHJ1d1UuHjSa5YMN1cXiypZOLkIhH6eXWt+cr7PX+N7QpB2SyykpCasVOmp2n2M8bEjU51xPtPa7pYbpGnMZchTip5x+L9Xavya0HJNOiHcY4f/OkZCK6G0apI/LzWGp3tPRNAEiz7CaXeowDKRJtXlH6If3MA5e1xkod2fjCGmovoN9VeHsv6AxyA52ddH1NQBoDnYV2YlX7LvAs6o7pO2AVPaKIx3+t1RIROSp4PkZLcB4yITQEZaMQKnc1zwhRlQQpPLA6MwTg2ZjJrpR4JlhNgusBNRKI31AkXSlpy46YjIJ0OGqEdNjOeqKdxVS6iK3IWD15Qtc4IIrGw2bAh57daSCDk1TgOU9YMnPXHpg0NTOnBO4JDHzKwP+OZXouZQrBhdUWLBCKkthLJmpPiZtsKW/clXzzivY8eJKxY6G13TRqcdXqzRnnQ931jEqaChV5KgdieiNq5FRk3aYXnCKHk4kdpNGlyPaqaOpOtnEHhWdiQ66t0SwVNPftreRLIptP36uBfVcmz7/MlUyf5H+Usc6gVUE2WHetXhdA2MvJ9p2Fv18rxlu9ERt4rtvGbuSuyJpwvpCT1Jd1BG0sjHHcPkY2BWeJLbPdV0WbDHIRKIybgOPuIPl8ZC4rGs3HyfI8avuDVwsiUMhYkZnfZgt1Ygy8hFL6kZpq1nAijhJJC2qV2+WgMjxPG3GwPmbwNauJeeVyS/91Fzs6CuGcTIFU3V5RAv8CMVgL6xxj580Jx7v4FciMx+XLjZYy24Pv5InLDzdYiWKST8Xr1yrI48xt4iFSLlgUL1fSX3ElLljhrOM/dEh1gTI0Njic/OBFeuS5+hibO2YMYAVC84ZP8qpO5XFqmKEQwjtrO526qj2bMe4jd6OcPxAdkZOXyGIia5RTnSYtbDiCm25d1sCpmwrjobuDbEncP7BqxTQb/6hKnnODz3cCsm761rnPaYTlmAN5UXADpgAA7QxQUDDl6xQ1c0NlzniCuAE9nLJGSRjF3HWxHbVgtvQSRtWcFx6uhQ1sgAiY4sq1DGhUw14C9k/u+j+XYydBcPVDnynPX6Ck0G1VyLU9lUuAA9IAGts4JC7YAkEbp6yHAxn5Kko6gdvsk74nWGhqnniAqSOcK0exAZ2pKDoJvSY4xKNsSvO2nlzWmUjAjf+Kr15wMGERyaHaL0gDDSJSlW3rrJjIoTTFechUTYsrZNsEEJmGXMIVQdjPCxue72w5WRLDyUpDEQn0G/xhHX+dY7oSgtAEzz2YACFgq/GU1n54oGVSdp+6dIZqvc7B4Qh9kfRIpjSfn4ABng3Asm37WFeipJZ/BYpkND9G/PCPGOJ5Sq5WH4QnF08gAHTzPsz2ACYft2XftuqmUO3zW2SWmvtFI7AKBdUro2WOXcre1XSo7zmKknyVwgnNiOljwj7OKjdReIhfEJiUIJQi2KlQJcVBHqOTwmqsOtU0kcnMNSSaYT1KYMenck8i2aYWiGjoFokgCw+UuQMyCQCuTwrbItNu1+CT9Bb1wDO518e9wptDKn0OaCksTJafkTPI/EcOKY56grYd/zjcA7PHKDWz7GhSc21o5FLjktxYGllRmUQ6oZFAaM1+mo69bgy27BmSmciO0uNGJLCk8zVVm4WHptBtjp7fR13CwUQozXkKHyTAHuISWjEPI/SNvimxWbMo6TJXljYgRKB5ZwJMT6WFrCr7bi6Imr99gdgrqOJqEHdwTQFFapMyuLrkN51JMZe+2OGzpY7KLiccJzdBEoQPt9C6/hAsgMde81xGQkZOFxyuiN7m/l8yE/QlW7tcvzvdE+pq6/XglmqC8YbdATLekJG0JTStke0g8nJ74Y4ZPLqgECN9oJJNNC2WDjVUgiQyAEPBje/RaZEf5Avh61yEna4pNydPzWH8K94kuEPLKO5JTE/wLxUSHb8EE5WcJfALkSzAsx1KzyP3WPUGNxI9jxjUkGkbDbMzJHfpkfqofk1DzE8W1A1Nzw/Flr/0kBv2CKJQThPEUbNudfZbnpknJd0sMVSz+n1I6i/YMgUt6VHfmKnMPMlHWYerSO4t2JupZnAfBhyq6EtlvO1jChFBMRaRDaKqqbZtwzfq9Wy3WihDEzUkaal4p4Hh70xgjCnOPEJIRZd2zLEmaWGUkGyEgINYBfMVuf5V9Tn1Hk4j1KXTu4LBElaMqa34LGfQpaTo1NYdtqoNvvrzyblAVdBMhIFnMscWmusSKKBnZSjUs984g2Kud4Jiexdh3p4c5AhT3JdwhzVBifJrhmncKZjl1VEgHTSnrZkSsc1nEXs6EUX05jJ6bBxKCojDmBrDKCe0SAYiPkRq5jxPjUs2jdIe9h/byAGx1RcDvkMz7pJeKRCyJ8N1tT/gH13aiWhxgPFPsftOpk0UKyqFOfjGyhNDAEQWCZeJLVyapkFVv+7p9Yh29yxYCzq349PA1IRXLEBml/1R1GeNaXMdaOAqoQG6VubSRe0kaPOfDjHlU8fp6iN8sIwRI3xojxENfFWkIPz8SmibwkDeAASw59BV5KfbX7YeOMEMWxgZHEz6ovoYhos6cbpzdGpLU8ZZCzNFs3wqdegJGQwU5SwzvZu6e9ZvHZwMEMZCroNabMczSgfExXZ90huU3QjW83BmPfGf3SfGyJgt93mDi20GxMXwb3fm8B+2r43Itz4tvagEbQoMwLkZyNzALMnLvcyzAi70iQc457L2U4GmqgxcZfUjAC4B5arWeaAKNvv7mSQIeYY+RP+AUlrS/DCEQ0VppoYr8hI/J3EM+MMgoy9O+lHwrt1oZN080A/VuqCRMn/tJvQfSfwgj3dy//ilIQFP8zGAEphvwjGGHYbiH5B/AR7dTGa8l3yc2uDn3Mr2k+ezLdSclf7gVEC/6xcw1Vcdxck1x1h4Kv/WDao7qxHLcD9tI0G4/Kw3H8Nb1fG90C4m1+KI6r+ZIoHNDQSqqXBDVRHYGf7PWR7pI78qmG/Ra9fKOe9E/92kCrT/blynS1oZsRHOc/HaqrxwR1xt47P0DKdveX1gLQ79fH8hFaZBvlEwWCeBtPBbclZJ67EXGm/7WnkunSQ4vumjsiRxWOxfg+bf06mEiILBSVQ26dKz2AZkuFdDy918mXBvVOIc6mj2C2L1h9NPQ73mdw+p2HAAbGoto3hBxgUyYzHvVrxi6SgRgo8R7M2E66oxvyJ0tDlzk3chTwd4asOcGtxTLwSBCh0Olcx2T9aKVvHPtQjtoTcSOEcsxT6SEdjxG0bLTZxbTB4DINvy7b/2V/IybobyXZG7B60iEMTMVOro86Hfm7AYNqvVrKj86+DFYPULZrWor0Hxqb4aN6ahewsul2zeWTtKYleVwptIOMuCmy7ihnCWK/5mV3zxQAuqu06ZCb44OPEyELbzKpev6y9SOccWbhPTPjmrg5ykUnZzEGLuP/55KsKCgIvsFJOYWy1NqSbGyWluI6k64AdOBeeWhoiwsDkAaC0NAOKt+RR2/AMHOYgFGPjHpk1COjHhn1yKhHRj0y6pFBCAD6rhnybnruNgAAAABJRU5ErkJggg=="}');class $l{constructor(a){this.init=this.init.bind(this),this.handleVisibilityChange=this.handleVisibilityChange.bind(this),function(a){for(let[b,c]of Object.entries(a))fk[b]=c}({app:this,env:"production",isMobile:/iPhone|iPad|iPod|Android|BlackBerry|BB10/i.test(navigator.userAgent),pixelRatio:window.devicePixelRatio||1,...a})}loadAssets(){let{basePath:a,imagePath:b}=fk,c=[{url:fF.S,id:"worldMap"}],d=new Jl;return new Promise((a,b)=>{d.load(c).then(({assets:b})=>{a(b),d.dispose()}).catch(a=>b(a))})}async loadData(){try{let a=await fE(`${fk.dataPath}data.json`);if(!a||0===a.length)throw Error("WebGL Globe: data.json response was empty");return a}catch{return await this.loadFallbackData()}}async loadFallbackData(){try{let a=await fE(`${fk.dataPath}fallback.json`);if(!a||0===a.length)throw Error("WebGL Globe: fallback.json response was empty");return a}catch(b){throw Error(b)}}filterData(a){let b=[];for(let c=0;c{this.loadAssets().then(c=>{fk.assets=c;let{parentNode:d=document.body}=fk;this.loadData().then(b=>{fk.data=this.filterData(b),this.webglController=new Zl(d),this.webglController.initDataObjects(fk.data),this.webglController.transitionIn(1.5,.6),this.trackPageVisibility(),a()}).catch(a=>{fC(),b(a)})}).catch(a=>{b(a)})})}handleVisibilityChange(){document[this.documentHidden]?fj.emit(fg):fj.emit(fh)}get renderer(){return this.webglController?this.webglController.renderer:null}get canvas(){return this.webglController?this.webglController.renderer.domElement:null}dispose(){document.removeEventListener(this.visibilityChange,this.handleVisibilityChange),this.webglController.dispose(),this.webglController=null,this.visibilityChange=null,this.documentHidden=null,Object.keys(fk).forEach(a=>{delete fk[a]})}}let fG;c(66),async function(){if(await ("interactive"===document.readyState||"complete"===document.readyState?Promise.resolve():new Promise(a=>{document.addEventListener("DOMContentLoaded",()=>{a()})})),!(fG=document.querySelector(fb)))return;if(!function(){let a=document.createElement("canvas");return(a.getContext("webgl")||a.getContext("webgl2")||a.getContext("experimental-webgl"))instanceof WebGLRenderingContext}())return fC();let a="webgl-globe/",b="images/",c=`${a}data/`,d=document.head.querySelector("link[rel=assets]");null===d||d.href.includes("localhost")||"/"===d.href||(a=d.href,b="images/modules/site/home/globe/");let e=new $l({basePath:a,imagePath:b,dataPath:c,parentNode:fG,globeRadius:25,lineWidth:1.5,spikeRadius:.06});e.init().then(()=>{e.canvas.addEventListener("webglcontextlost",fC,!1)})}()})()})()}}]) +//# sourceMappingURL=vendors-node_modules_github_webgl-globe_dist_js_main_js-1981ef50f2bd.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/EBCD53F947392F48D9A93EE1205EC992F3870B23 b/home/.surf/cache/WebKitCache/Version 16/Blobs/EBCD53F947392F48D9A93EE1205EC992F3870B23 new file mode 100644 index 0000000..d1cefcb --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/EBCD53F947392F48D9A93EE1205EC992F3870B23 @@ -0,0 +1,4 @@ +/*! + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f884"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cab:before{content:"\f1ba"} \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/ED21DE8525C2B4C47422530565AE444B29EB7FFA b/home/.surf/cache/WebKitCache/Version 16/Blobs/ED21DE8525C2B4C47422530565AE444B29EB7FFA new file mode 100644 index 0000000..58f3593 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/ED21DE8525C2B4C47422530565AE444B29EB7FFA differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/EDF0E043CAD57E9F53867AAA983A234E4972821B b/home/.surf/cache/WebKitCache/Version 16/Blobs/EDF0E043CAD57E9F53867AAA983A234E4972821B new file mode 100644 index 0000000..f657f34 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/EDF0E043CAD57E9F53867AAA983A234E4972821B differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/EE68DDAE68E6F224EFE465EAB017CFCEEADE776E b/home/.surf/cache/WebKitCache/Version 16/Blobs/EE68DDAE68E6F224EFE465EAB017CFCEEADE776E new file mode 100644 index 0000000..e19dd37 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/EE68DDAE68E6F224EFE465EAB017CFCEEADE776E @@ -0,0 +1,3 @@ +.min-height-full{min-height:100vh !important}.marketing-section{position:relative;padding-top:80px;padding-bottom:80px;font-size:16px;line-height:1.5;text-align:center;border-bottom:1px solid var(--color-border-default)}.marketing-section::before{display:table;content:""}.marketing-section::after{display:table;clear:both;content:""}.marketing-section h3{font-size:20px;font-weight:var(--base-text-weight-normal, 400)}.marketing-hero-octicon{position:relative;width:100px;height:100px;margin:0 auto 16px;text-align:center;border:solid 1px var(--color-border-default);border-radius:50px}.marketing-hero-octicon .octicon{margin-top:24px;color:var(--color-accent-fg)}.marketing-hero-octicon .octicon-checklist{position:relative;right:-3px}.hanging-icon-list{list-style-type:none}.hanging-icon-list li{padding-left:24px;margin:8px 0;font-size:14px}.hanging-icon-list .octicon{float:left;margin-top:4px;margin-left:-24px;color:var(--color-fg-muted)}.hanging-icon-list .octicon-check{color:var(--color-success-fg)}.hanging-icon-list .octicon-x{color:var(--color-danger-fg)}.integrations-hero-octicon.marketing-hero-octicon{width:75px;height:75px;border-width:5px}.integrations-hero-octicon.marketing-hero-octicon .octicon{margin-top:16px}.marketing-blue-octicon{color:#34acbf;border-color:#34acbf}.marketing-blue-octicon .octicon{color:#34acbf}.marketing-turquoise-octicon{color:#75bbb6;border-color:#75bbb6}.marketing-turquoise-octicon .octicon{color:#75bbb6}.marketing-purple-octicon{color:#b086b7;border-color:#b086b7}.marketing-purple-octicon .octicon{color:#b086b7}.marketing-graphic{position:relative}.intgrs-dir .marketing-graphic{padding-right:0;margin:0}.intgrs-dir .footer{margin-top:40px}.intgrs-dir-section h2{margin-top:0;margin-bottom:16px;font-size:24px;font-weight:var(--base-text-weight-light, 300)}.intgrs-dir-intro{padding:40px 0;margin:0;text-align:left;background-image:linear-gradient(-110deg, #48227d 0%, #2f569c 100%);border-bottom:0}.pagehead+.intgrs-dir-intro{margin-top:-16px}.intgrs-dir-intro .directory-header-back{margin-top:8px;font-size:16px;color:#fff}.intgrs-dir-intro .directory-header-back:hover{color:#d7def1;text-decoration:none}.intgrs-dir-intro .directory-header-back .octicon{vertical-align:middle}.intgrs-dir-intro .directory-header-back .header-link{color:var(--color-accent-fg)}.intgrs-dir-intro .directory-tag-line{margin-bottom:0;font-size:32px;font-weight:var(--base-text-weight-normal, 400);color:#fff}.intgrs-dir-intro .lead{margin-top:8px;margin-bottom:4px;font-size:16px;font-weight:var(--base-text-weight-normal, 400);color:#d7def1}.intgrs-lstng-search{display:inline-block;width:33%;margin-left:16px}.intgrs-lstng-search .subnav-search-input{width:100%}.intgrs-lstng-categories-container{display:inline-block;float:left;width:20%}.intgrs-lstng-categories-container .intgrs-lstng-categories{top:0}.intgrs-lstng-categories-container .filter-item{padding:4px 8px;margin-right:-8px;margin-left:-8px}.intgrs-lstng-container{display:inline-block;width:80%;text-align:left}.intgrs-lstng-item{position:relative;display:inline-flex;width:30.8%;font-size:14px;border:1px solid var(--color-border-muted);border-radius:4px;transition:border-color .15s ease 0s,transform .15s ease 0s,box-shadow .15s ease 0s,color .15s ease 0s}.intgrs-lstng-item:hover{border-color:#51a7e8;box-shadow:0 0 5px rgba(81,167,232,.5);transform:scale(1.05)}.intgrs-lstng-item .intgrs-lstng-logo{display:block;margin:0 auto 8px}.intgrs-lstng-item .draft-tag{position:absolute;top:-1px;left:10px}.intgrs-lstng-item-link{display:block;width:100%;height:181px;padding-top:16px}.intgrs-lstng-item-link:hover{text-decoration:none}.intgrs-lstng-item-link:hover .intgrs-lstng-item-header{color:var(--color-accent-fg)}.intgrs-lstng-item-header{margin:16px 8px 0;font-size:14px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default)}.intgrs-lstng-item-description{position:relative;height:2.8em;padding:0 8px;margin-top:4px;overflow:hidden;font-size:12px;color:var(--color-fg-muted)}.intgrs-lstng-item-description::after{position:absolute;right:0;bottom:0;padding:0 16px 0 16px;color:transparent;content:" ";background-image:linear-gradient(to right, rgba(255, 255, 255, 0), #fff 80%)}.intgr-admin-link{position:relative;display:inline-block;height:25px;padding-left:24px;font-size:12px;vertical-align:middle;border:1px solid var(--color-border-muted);border-radius:6px}.intgr-admin-link.draft-tag{padding-left:24px;border:0}.intgr-admin-link.draft-tag .octicon,.intgr-admin-link.draft-tag:hover .octicon{color:#fff}.intgr-admin-link.draft-tag:hover{text-decoration:none;background-color:#000}.intgr-admin-link:hover .octicon{color:var(--color-accent-fg)}.intgr-admin-link .octicon{position:absolute;top:3px;left:5px;color:var(--color-fg-muted)}.intgr-feat-header{position:relative;width:85%;padding:0 65px 8px;color:#d7def1}.intgr-feat-header .intgr-admin-link{border-color:rgba(215,222,241,.6)}.intgr-feat-header .intgr-admin-link .octicon{color:#d7def1}.intgr-feat-header .intgr-admin-link:hover .octicon{color:#fff}.intgr-feat-header .marketing-hero-octicon{position:absolute;top:0;left:5px;width:50px;height:50px;border-width:3px}.intgr-feat-header .marketing-hero-octicon .octicon{margin-top:12px}.intgr-feat-header h2{margin:0;font-size:24px;line-height:50px;color:#fff}.intgr-feat-header p{max-width:580px;margin:0;font-size:16px}.integrations-breadcrumb{display:inline-block;font-weight:var(--base-text-weight-normal, 400);color:var(--color-accent-fg)}.integrations-breadcrumb-link{line-height:0;color:#d7def1}.integrations-breadcrumb-link:hover{color:#fff;text-decoration:none}.integrations-auth-wrapper{max-width:540px;padding-right:16px;padding-left:16px;margin:60px auto}.integrations-auth-header{font-size:20px;text-align:center}.integrations-permissions-group dt{font-size:16px;font-weight:var(--base-text-weight-normal, 400)}.integrations-permissions-group .integrations-permission{position:relative;padding-left:24px;margin-bottom:8px;list-style-type:none}.integrations-permissions-group .integrations-permission .octicon{position:absolute;top:1px;left:0;margin-right:8px}.integrations-install-target .select-menu{vertical-align:middle}.integrations-install-target input[type=radio]{margin-right:8px}.integrations-install-target .flash{background-color:transparent}.integrations-install-target .flash-error{background-color:transparent;border:0}.integrations-install-target .octicon-lock,.integrations-install-target .octicon-repo,.integrations-install-target .octicon-repo-forked{margin-right:4px}.integrations-install-target .octicon-lock{color:var(--color-attention-fg)}.integrations-install-target .private{background-color:#fff9ea}.integrations-install-target [aria-selected=true].private,.integrations-install-target .navigation-focus.private{background-color:#4078c0}.integrations-install-target [aria-selected=true].octicon-lock,.integrations-install-target .navigation-focus .octicon-lock{color:inherit}.integrations-setup-note{margin:8px 0}.listgroup-item{line-height:inherit}.listgroup-item.disabled{background-color:var(--color-canvas-subtle)}.listgroup-item.disabled .listgroup-item-title{color:var(--color-fg-default)}.link-small{color:var(--color-fg-muted);transition:color 500ms ease}.sub-permissions-error{max-width:unset !important}.not-found-octocat-wrapper{width:71px;height:71px;border-radius:45px}.not-found-octocat-wrapper::after{position:absolute;top:58px;left:45px;z-index:-2;display:block;width:4px;height:4px;vertical-align:baseline;content:"";background:var(--color-canvas-default);border-radius:4px;box-shadow:0 4px 0 #fff,0 8px 0 #fff,0 12px 0 #fff,0 16px 0 #fff,0 20px 0 #fff;animation-name:pull-string;animation-duration:.75s;animation-fill-mode:forwards;animation-delay:.5s}@keyframes lightbulb{0%,8%,14%{opacity:.1}0%,10%,25%{opacity:.25}5%,30%,50%,70%{opacity:.5}16%,60%,80%{opacity:.75}90%{opacity:.8}94%{opacity:.5}100%{opacity:1;stddeviation:0}}.not-found-lightbulb-ani{z-index:1;opacity:.25;animation-name:lightbulb;animation-duration:2.5s;animation-fill-mode:forwards;animation-delay:1.3s}@keyframes pull-string{50%{transform:translate3d(0, 12px, 0)}75%{opacity:1;transform:none}100%{opacity:0}}.boxed-group-table .toggle-currency{font-size:12px;font-weight:var(--base-text-weight-normal, 400)}.has-removed-contents{display:none}.org-login{margin-top:-32px;margin-bottom:32px}.org-login img{width:450px;padding:1px;margin:8px -24px;border:1px solid var(--color-border-default)}.member-list-item .member-username{display:inline}.member-list-item .member-link{display:inline}.actor-and-action{font-weight:var(--base-text-weight-semibold, 600)}.vertical-separator{margin-right:8px;margin-left:4px;border-left:1px solid var(--color-border-default)}.audit-log-search .audit-search-form{margin-bottom:8px}.audit-log-search .audit-results-actions{margin:16px 0}.audit-log-search .audit-search-clear{margin-bottom:0}.billing-addon-items table input{width:5em}.billing-addon-items td{vertical-align:middle;border-bottom:0}.billing-addon-items td.fixed{width:150px}.billing-addon-items td.black{color:var(--color-fg-default)}.billing-addon-items tr{border-bottom:1px solid var(--color-border-muted)}.billing-addon-items tr:last-child{border-bottom-width:0}.billing-addon-items tr:nth-child(even){background-color:var(--color-canvas-subtle)}.billing-addon-items tr.total-row{color:var(--color-danger-fg);background-color:var(--color-canvas-default)}.billing-addon-items .new-addon-items{margin-left:4px}.billing-addon-items .addon-cost{color:var(--color-fg-muted)}.billing-addon-items .discounted-original-price{color:var(--color-fg-muted)}.billing-addon-items .form-submit,.billing-addon-items .payment-method{margin-left:8px}.billing-addon-items .payment-summary{margin-right:8px;margin-left:8px}.billing-credit-card .javascript-disabled-overlay{position:absolute;top:0;left:0;z-index:1;display:none;width:100%;height:100%;background-color:var(--color-canvas-default);opacity:.5}.billing-credit-card.disabled .javascript-disabled-overlay{display:block}.billing-extra-box{padding-left:8px;margin:8px 0;border-left:6px solid var(--color-border-muted)}.billing-vat-box{padding-left:8px;margin:8px 0;border-left:6px solid var(--color-border-muted)}.billing-section .action-button{float:right;margin-bottom:4px;margin-left:8px}.billing-section .section-label{position:absolute;width:85px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted);text-align:right}.billing-section .section-content{margin-left:100px;color:var(--color-fg-default)}.billing-section:last-child{border-bottom:0}.billing-section .usage-bar{max-width:304px}.usage-bar{width:100%;margin:4px 0 0;background:#eee;border-radius:20px}.usage-bar.exceeded .progress{background-color:var(--color-danger-emphasis) !important}.usage-bar .progress{position:relative;max-width:100%;height:5px;background-color:var(--color-success-emphasis);border-radius:20px;transition:width .3s}.usage-bar .progress.no-highlight{background:var(--color-neutral-muted)}.usage-bar .progress--orange{background-color:var(--color-severe-emphasis)}.usage-bar .progress--purple{background-color:var(--color-done-emphasis)}.lfs-data-pack-field{margin:-4px 0}.packs-table .desc{width:1%;white-space:nowrap}.lfs-data-icon{color:var(--color-fg-muted);text-align:center}.lfs-data-icon.dark{color:var(--color-fg-default)}.lfs-data-icon.octicon-database{margin-right:4px;margin-left:2px}.setup-wrapper .paypal-container{margin-bottom:32px}.setup-wrapper .paypal-logged-in .paypal-container{margin-bottom:8px}.payment-methods{position:relative}.payment-methods .selected-payment-method{display:none}.payment-methods .selected-payment-method::before{display:table;content:""}.payment-methods .selected-payment-method::after{display:table;clear:both;content:""}.payment-methods .selected-payment-method.active{display:block}.payment-methods .form-group dd .form-control.short.input-vat{width:300px}.payment-methods .pay-with-header{margin:4px 0}.payment-methods .pay-with-paypal .setup-creditcard-form,.payment-methods .pay-with-paypal .paypal-form-actions,.payment-methods .pay-with-paypal .terms,.payment-methods .pay-with-paypal .paypal-signed-in,.payment-methods .pay-with-paypal .paypal-down-flash,.payment-methods .pay-with-paypal .loading-paypal-spinner{display:none}.payment-methods.paypal-loading .loading-paypal-spinner{display:block}.payment-methods.paypal-down .paypal-down-flash{display:block}.payment-methods.paypal-logged-in .paypal-sign-in{display:none}.payment-methods.paypal-logged-in .setup-creditcard-form,.payment-methods.paypal-logged-in .paypal-form-actions,.payment-methods.paypal-logged-in .terms,.payment-methods.paypal-logged-in .paypal-signed-in{display:block}.payment-methods.has-paypal-account .paypal-sign-in{display:none}.payment-methods.has-paypal-account .paypal-signed-in{display:block}.paypal-label{margin:16px 0 8px;font-weight:var(--base-text-weight-semibold, 600)}.paypal-container{display:inline-block;margin-bottom:16px;vertical-align:top;background-color:var(--color-canvas-subtle);border-radius:4px}.braintree-paypal-loggedin{padding:12px 16px !important;background-position:12px 50% !important;border:1px solid var(--color-border-muted) !important;border-radius:4px}.bt-pp-name{margin-left:16px !important}.bt-pp-email{margin-left:16px !important}.bt-pp-cancel{font-size:0 !important;line-height:1 !important;color:var(--color-danger-fg) !important;text-decoration:none !important}.payment-history .id,.payment-history .date,.payment-history .receipt,.payment-history .status,.payment-history .amount{white-space:nowrap}.payment-history .break-all{word-break:break-all}.payment-history .receipt{text-align:center}.payment-history .currency,.payment-history .status{color:var(--color-fg-muted)}.payment-history .status-icon{width:14px;text-align:center}.payment-history .succeeded .status{color:var(--color-success-fg)}.payment-history .refunded,.payment-history .failed{background:var(--color-canvas-subtle)}.payment-history .refunded td,.payment-history .failed td{opacity:.5}.payment-history .refunded .receipt,.payment-history .refunded .status,.payment-history .failed .receipt,.payment-history .failed .status{opacity:1}.payment-history .refunded .status{color:var(--color-fg-muted)}.payment-history .failed .status{color:var(--color-danger-fg)}.payment-history .transaction:target{background:var(--color-attention-subtle);border-color:var(--color-attention-emphasis)}.paypal-icon{margin:0 2px 0 1px;vertical-align:middle}.currency-container .local-currency,.currency-container .local-currency-block{display:none}.currency-container.open .local-currency{display:inline}.currency-container.open .local-currency-block{display:block}.currency-container.open .default-currency{display:none}.strong-label{display:inline-block;margin-bottom:4px;font-weight:var(--base-text-weight-semibold, 600)}.discounted-original-price{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted);text-decoration:line-through}.billing-manager-input{width:500px}.seats-change-arrow{margin:0 8px}.plan-choice{position:relative;display:block;padding:16px;padding-left:40px;font-weight:var(--base-text-weight-normal, 400);background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default)}.plan-choice.open,.plan-choice.selected{background-color:var(--color-canvas-default)}.plan-choice--experiment{cursor:pointer;transition:transform .3s,box-shadow .3s,border-color .3s}.plan-choice--experiment.open,.plan-choice--experiment.selected{border-color:var(--color-border-default);box-shadow:var(--color-shadow-large);transform:scale(1.025)}.plan-choice--experiment.open .plan-choice-icon,.plan-choice--experiment.selected .plan-choice-icon{background-color:var(--color-success-emphasis);box-shadow:var(--color-shadow-small)}.plan-choice--experiment.open .plan-choice-icon .octicon,.plan-choice--experiment.selected .plan-choice-icon .octicon{transform:scale(1)}.plan-choice--experiment.plan-choice--green.open,.plan-choice--experiment.plan-choice--green.selected{border-color:var(--color-success-emphasis)}.plan-choice--experiment.plan-choice--green.open .plan-choice-icon,.plan-choice--experiment.plan-choice--green.selected .plan-choice-icon{background-color:var(--color-success-emphasis)}.plan-choice--experiment.plan-choice--purple.open,.plan-choice--experiment.plan-choice--purple.selected{border-color:var(--color-done-emphasis)}.plan-choice--experiment.plan-choice--purple.open .plan-choice-icon,.plan-choice--experiment.plan-choice--purple.selected .plan-choice-icon{background-color:var(--color-done-fg)}.plan-choice-icon{transition:box-shadow .3s}.plan-choice-icon .octicon{transition:transform .2s;transform:scale(0.5)}.plan-choice-radio{position:absolute;top:18px;left:15px}.plan-choice-exp{margin-top:4px;font-size:12px;color:var(--color-fg-muted)}.seat-field{width:50px;margin-right:4px}.billing-line-items{margin-top:8px}.billing-line-item{padding:8px 0;font-size:12px;list-style:none;border-top:1px solid var(--color-border-default)}.billing-line-item::before{display:table;content:""}.billing-line-item::after{display:table;clear:both;content:""}.billing-line-item-last{font-weight:var(--base-text-weight-semibold, 600);border-top-width:3px}.line-item-value{float:right}.condensed-payment-methods .vat-field{width:100%}.condensed-payment-methods .state-field{width:30%}.condensed-payment-methods .postcode-field{width:28%}.condensed-payment-methods .country-field{width:42%}.condensed-payment-methods .is-international .country-field{width:72%}.condensed-payment-methods .is-international.no-postcodes .country-field{width:100%}.zuora-billing-section.PaymentMethod--creditcard:not(.has-removed-contents)~.SignUpContinueActions{display:none}.zuora-billing-section.PaymentMethod--creditcard-added~.SignUpContinueActions{display:block}.zuora-billing-section.PaymentMethod--paypal~.SignUpContinueActions{display:block}.new-org-billing-form .z_hppm_iframe{width:100% !important}.billing-tooltip-underline{cursor:help;border-bottom:1px dotted}.billing-box-accordion[open] .octicon-chevron-right{height:auto;transform:rotate(90deg)}.billing-box-accordion:hover .billing-box-accordion-state .octicon{color:var(--color-fg-muted)}.billing-box-accordion-chevron[open] .octicon-chevron-right{height:auto;transform:rotate(90deg)}.billing-box-accordion-state .octicon{color:var(--color-fg-muted);transition:transform .09s ease-out}.billing-box-progress{padding-top:1px;margin-bottom:4px}.Details-element:focus{outline:none}.organization-radio-button-budget-disabled{color:var(--color-fg-muted);background-color:var(--color-canvas-subtle)}.organization-radio-button-budget-disabled label p{color:var(--color-fg-muted) !important}.blob-interaction-bar{position:relative;background-color:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-default)}.blob-interaction-bar::before{display:table;content:""}.blob-interaction-bar::after{display:table;clear:both;content:""}.blob-interaction-bar .octicon-search{position:absolute;top:6px;left:10px;font-size:12px;color:var(--color-fg-muted)}.blob-filter{width:100%;padding:4px 16px 4px 32px;font-size:12px;border:0;border-radius:0;outline:none}.blob-filter:focus{outline:none}.TagsearchPopover{width:inherit;max-width:600px}.TagsearchPopover-content{max-height:300px}.TagsearchPopover-list .TagsearchPopover-list-item:hover{background-color:var(--color-canvas-subtle)}.TagsearchPopover-list .TagsearchPopover-list-item .TagsearchPopover-item:hover{text-decoration:none}.TagsearchPopover-list .blob-code-inner{white-space:pre-wrap}.diff-table .line-alert,.blob-code-content .line-alert{position:absolute;left:0;margin:-2px 2px}.diff-table .codeowners-error,.blob-code-content .codeowners-error{color:var(--color-danger-fg)}.diff-table .error-highlight,.blob-code-content .error-highlight{position:relative;cursor:help;font-style:italic;color:var(--color-danger-fg)}.diff-table .error-highlight::before,.blob-code-content .error-highlight::before{position:absolute;top:101%;width:100%;height:.25em;content:"";background:linear-gradient(135deg, transparent, transparent 45%, var(--color-danger-fg), transparent 55%, transparent 100%),linear-gradient(45deg, transparent, transparent 45%, var(--color-danger-fg), transparent 55%, transparent 100%);background-repeat:repeat-x,repeat-x;background-size:.5em .5em}.blob-code-content .blob-num .line-alert{margin-top:1px}.diff-table .blob-num .line-alert{margin:2px -2px}.csv-data .line-alert{position:absolute;margin:2px 4px}.CopyBlock{line-height:20px;cursor:pointer}.CopyBlock .octicon-copy{display:none}.CopyBlock:hover,.CopyBlock:focus,.CopyBlock:active{background-color:var(--color-canvas-default);outline:none}.CopyBlock:hover .octicon-copy,.CopyBlock:focus .octicon-copy,.CopyBlock:active .octicon-copy{display:inline-block}.blob-header.is-stuck{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.commit-form-avatar{margin-left:-64px}.commit-form::after,.commit-form::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.commit-form::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.commit-form::before{background-color:var(--color-border-default)}.quick-pull-new-branch-icon{top:9px;left:10px}.CodeMirror-hints{position:absolute;z-index:10;max-height:20em;margin:0;overflow-y:auto;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:12px;list-style:none;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px;box-shadow:var(--color-shadow-medium)}.CodeMirror-hint{padding:2px 8px;margin:0;color:var(--color-fg-default);white-space:pre;cursor:pointer}.CodeMirror-hint .CodeMirror-hint:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.CodeMirror-hint .CodeMirror-hint:last-child{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.CodeMirror-hint-active{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.CodeMirror-lint-tooltip{position:fixed;z-index:100;min-width:300px;max-width:600px;opacity:0;transition:opacity .4s}.CodeMirror-lint-mark-error{position:relative;cursor:help}.CodeMirror-lint-mark-error::before{position:absolute;top:101%;width:100%;height:.25em;content:"";background:linear-gradient(135deg, transparent, transparent 45%, var(--color-danger-emphasis), transparent 55%, transparent 100%),linear-gradient(45deg, transparent, transparent 45%, var(--color-danger-emphasis), transparent 55%, transparent 100%);background-repeat:repeat-x,repeat-x;background-size:.5em .5em}.CodeMirror-lint-mark-warning{position:relative;cursor:help}.CodeMirror-lint-mark-warning::before{position:absolute;top:101%;width:100%;height:.25em;content:"";background:linear-gradient(135deg, transparent, transparent 45%, var(--color-attention-emphasis), transparent 55%, transparent 100%),linear-gradient(45deg, transparent, transparent 45%, var(--color-attention-emphasis), transparent 55%, transparent 100%);background-repeat:repeat-x,repeat-x;background-size:.5em .5em}.CodeMirror-lint-mark-info{position:relative;cursor:help}.CodeMirror-lint-mark-info::before{position:absolute;top:101%;width:100%;height:.25em;content:"";background:linear-gradient(135deg, transparent, transparent 45%, var(--color-accent-emphasis), transparent 55%, transparent 100%),linear-gradient(45deg, transparent, transparent 45%, var(--color-accent-emphasis), transparent 55%, transparent 100%);background-repeat:repeat-x,repeat-x;background-size:.5em .5em}.CodeMirror-hint-active .CodeMirror-hint-description{color:var(--color-fg-on-emphasis) !important}.merge-pr{padding-top:8px;margin:16px 0 0;border-top:1px solid var(--color-border-default)}.merge-pr.open .merge-branch-form{display:block}.merge-pr.open .branch-action{display:none}.merge-pr.is-merging-jump.open .queue-branch-form,.merge-pr.is-merging-group.open .queue-branch-form,.merge-pr.is-merging-solo.open .queue-branch-form{display:block}.status-heading{margin-bottom:1px}.merge-status-list{max-height:0;padding:0;margin:16px -16px -16px -55px;overflow-y:auto;transition:max-height .25s ease-in-out}.statuses-toggle-opened{display:none}.merge-status-item{position:relative;padding:8px 16px;background-color:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-default)}.merge-status-item:last-child:not(.review-item){border-bottom:0}.merge-status-item .css-truncate-target{max-width:100%}.merge-status-item .dismiss-review-form{display:none}.merge-status-item.open .review-status-item{display:none !important}.merge-status-item.open .dismiss-review-form{display:block}.status-meta{color:var(--color-fg-muted)}.status-meta-file-name{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:6px}.status-actions{margin-left:auto}.branch-action-item-icon{float:left;margin-left:-40px}.merge-status-icon{min-width:30px}.branch-action{padding-left:55px;margin-top:16px;margin-bottom:16px}.branch-action .merge-branch-heading{margin-bottom:4px}.branch-action-icon{float:left;width:40px;height:40px;margin-left:-55px;color:var(--color-fg-on-emphasis);border-radius:6px}.branch-action-body{position:relative;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px}.branch-action-body .spinner{display:block;float:left;width:32px;height:32px;margin-right:16px;background:url("/images/spinners/octocat-spinner-32.gif") no-repeat}.branch-action-body .merge-message,.branch-action-body .merge-branch-form,.branch-action-body .queue-branch-form{padding:16px;background-color:var(--color-canvas-subtle);border-top:1px solid var(--color-border-default);border-bottom-right-radius:6px;border-bottom-left-radius:6px}.post-merge-message{padding:16px}.branch-action-item{padding:16px 16px 16px 55px;font-size:13px;line-height:1.4}.branch-action-item+.branch-action-item,.branch-action-item+.mergeability-details{border-top:1px solid var(--color-border-default)}.branch-action-item.open>.merge-status-list-wrapper>.merge-status-list,.branch-action-item.open>.merge-status-list{max-height:231px;margin-bottom:-16px;border:solid var(--color-border-default);border-width:1px 0 0}.branch-action-item.open .statuses-toggle-opened{display:inline}.branch-action-item.open .statuses-toggle-closed{display:none}.branch-action-btn{margin-left:16px}.branch-action-item-simple{padding-left:16px}.branch-action-item-simple .merge-status-list{margin-left:-16px}.branch-action-item-simple .merge-status-item{padding-left:12px}.branch-action-state-clean .branch-action-icon{color:var(--color-fg-on-emphasis);background-color:var(--color-success-emphasis);border:1px solid transparent}.branch-action-state-clean .branch-action-body{border-color:var(--color-success-emphasis)}.branch-action-state-clean .branch-action-body::after,.branch-action-state-clean .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.branch-action-state-clean .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.branch-action-state-clean .branch-action-body::before{background-color:var(--color-success-emphasis)}.branch-action-state-unknown .branch-action-icon,.branch-action-state-unstable .branch-action-icon{color:var(--color-fg-on-emphasis);background-color:var(--color-attention-emphasis);border:1px solid transparent}.branch-action-state-unknown .branch-action-body,.branch-action-state-unstable .branch-action-body{border-color:var(--color-attention-emphasis)}.branch-action-state-unknown .branch-action-body::after,.branch-action-state-unknown .branch-action-body::before,.branch-action-state-unstable .branch-action-body::after,.branch-action-state-unstable .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.branch-action-state-unknown .branch-action-body::after,.branch-action-state-unstable .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.branch-action-state-unknown .branch-action-body::before,.branch-action-state-unstable .branch-action-body::before{background-color:var(--color-attention-emphasis)}.branch-action-state-merged .branch-action-icon{color:var(--color-fg-on-emphasis);background-color:var(--color-done-emphasis);border:1px solid transparent}.branch-action-state-merged .branch-action-body{border-color:var(--color-done-emphasis)}.branch-action-state-merged .branch-action-body::after,.branch-action-state-merged .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.branch-action-state-merged .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.branch-action-state-merged .branch-action-body::before{background-color:var(--color-done-emphasis)}.branch-action-state-dirty .branch-action-icon,.branch-action-state-closed-dirty .branch-action-icon,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-icon{color:var(--color-fg-on-emphasis);background-color:var(--color-neutral-emphasis);border:1px solid transparent}.branch-action-state-dirty .branch-action-body,.branch-action-state-closed-dirty .branch-action-body,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-body{border-color:var(--color-border-default)}.branch-action-state-dirty .branch-action-body::after,.branch-action-state-dirty .branch-action-body::before,.branch-action-state-closed-dirty .branch-action-body::after,.branch-action-state-closed-dirty .branch-action-body::before,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-body::after,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.branch-action-state-dirty .branch-action-body::after,.branch-action-state-closed-dirty .branch-action-body::after,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.branch-action-state-dirty .branch-action-body::before,.branch-action-state-closed-dirty .branch-action-body::before,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-body::before{background-color:var(--color-border-default)}.branch-action-state-error .branch-action-icon,.is-merging .branch-action-state-error-if-merging .branch-action-icon{color:var(--color-fg-on-emphasis);background-color:var(--color-danger-emphasis);border:1px solid transparent}.branch-action-state-error .branch-action-body,.is-merging .branch-action-state-error-if-merging .branch-action-body{border-color:var(--color-danger-emphasis)}.branch-action-state-error .branch-action-body::after,.branch-action-state-error .branch-action-body::before,.is-merging .branch-action-state-error-if-merging .branch-action-body::after,.is-merging .branch-action-state-error-if-merging .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.branch-action-state-error .branch-action-body::after,.is-merging .branch-action-state-error-if-merging .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.branch-action-state-error .branch-action-body::before,.is-merging .branch-action-state-error-if-merging .branch-action-body::before{background-color:var(--color-danger-emphasis)}.enqueued-pull-request .branch-action-body::after,.enqueued-pull-request .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.enqueued-pull-request .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.enqueued-pull-request .branch-action-body::before{background-color:var(--color-attention-emphasis)}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (-moz-min-device-pixel-ratio: 2),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){.branch-action-body .spinner{background-image:url("/images/spinners/octocat-spinner-64.gif");background-size:32px 32px}}.merge-branch-form,.queue-branch-form{display:none;margin:16px 0}.merge-branch-form .commit-form,.queue-branch-form .commit-form{border-color:var(--color-success-emphasis)}.merge-branch-form .commit-form::before,.queue-branch-form .commit-form::before{display:none}@media(min-width: 768px){.merge-branch-form .commit-form::before,.queue-branch-form .commit-form::before{display:block;border-right-color:var(--color-border-default)}}.merge-branch-form .commit-form::after,.queue-branch-form .commit-form::after{display:none}@media(min-width: 768px){.merge-branch-form .commit-form::after,.queue-branch-form .commit-form::after{display:block}}.merge-branch-form.error .commit-form,.merge-branch-form.danger .commit-form,.queue-branch-form.error .commit-form,.queue-branch-form.danger .commit-form{border-color:var(--color-danger-emphasis)}.merge-branch-form.error .commit-form::before,.merge-branch-form.danger .commit-form::before,.queue-branch-form.error .commit-form::before,.queue-branch-form.danger .commit-form::before{border-right-color:var(--color-danger-emphasis)}.merge-button-matrix-merge-form .merge-branch-form{display:block}.completeness-indicator{display:flex;align-items:center;justify-content:center;width:30px;height:30px}.completeness-indicator-success{color:var(--color-fg-on-emphasis);background-color:var(--color-success-emphasis);border:1px solid transparent;border-radius:50%}.completeness-indicator-error{color:var(--color-fg-on-emphasis);background-color:var(--color-danger-emphasis);border:1px solid transparent;border-radius:50%}.completeness-indicator-problem{color:var(--color-fg-on-emphasis);background-color:var(--color-neutral-emphasis);border:1px solid transparent;border-radius:50%}.completeness-indicator-warning{color:var(--color-fg-on-emphasis);background-color:var(--color-attention-emphasis);border:1px solid transparent;border-radius:50%}.pull-merging .pull-merging-error{display:none}.pull-merging.is-error .pull-merging-error{display:block}.pull-merging.is-error .merge-pr{display:none}.admin-options-block .admin-option-button{margin-top:8px}.admin-options-block .policy-enforcement{display:inline;margin-left:8px;color:var(--color-fg-muted)}.admin-options-block .policy-enforcement label{font-size:14px}.admin-options-block .disabled{color:var(--color-fg-muted)}.admin-options-block .disabled .note{color:var(--color-fg-muted)}.overflow-scroll-y{overflow-x:hidden !important;overflow-y:scroll !important}.business-menu-item:not([aria-current=page])+.business-sub-menu{display:none}.business-menu-icon{width:16px;margin-right:8px}.deprovisioning-checkbox>.show-if-disabled{display:none}.deprovisioning-checkbox.checkbox-disabled{color:var(--color-fg-muted)}.deprovisioning-checkbox.checkbox-disabled>.show-if-disabled{display:inherit}.dormant-users-recent-reports{gap:16px}.avatar-migration-status-badge{width:20px;height:20px}body.full-width-p-0 .new-discussion-timeline{padding:0 !important}body.full-width-p-0 .footer .mt-6{margin-top:0 !important;border-top:0 !important}body.full-width-p-0 .tabnav .tabnav-extra{margin-right:24px}body.full-width-p-0 .tabnav .tabnav-tabs{margin-left:16px}.actions-full-screen .pagehead,.actions-full-screen .hide-full-screen,.actions-full-screen .Header-old,.actions-full-screen .Header{display:none}.checks-list-item.selected .checks-list-item-name{background-color:var(--color-accent-emphasis) !important}.checks-list-item.selected .selected-color-white{color:var(--color-fg-on-emphasis) !important}.checks-list-item-icon{width:16px}.check-annotation{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.file .check-annotation{border-bottom:1px solid var(--color-border-default)}.file .check-annotation:last-child{border-bottom:0}.check-annotation .annotation-actions{top:4px;right:8px}.check-annotation .annotation-octicon{width:16px}.check-annotation.Details--on .Details-content--hidden{display:block !important}.annotation-title{word-break:break-word}.check-annotation-failure{box-shadow:inset 4px 0 0 var(--color-danger-emphasis)}.check-annotation-failure .annotation-title{color:var(--color-danger-fg)}.check-annotation-warning{box-shadow:inset 4px 0 0 var(--color-attention-emphasis)}.check-annotation-warning .octicon-alert{color:var(--color-attention-fg)}.check-annotation-warning .annotation-title{color:var(--color-attention-fg)}.neutral-check{color:var(--color-fg-muted)}.check-range-menu-loading{display:block}.check-range-menu-error{display:none}.is-error .check-range-menu-loading{display:none}.is-error .check-range-menu-error{display:block}.code-frequency .addition{fill:#2cbe4e;fill-opacity:1}.code-frequency .deletion{fill:var(--color-danger-emphasis);fill-opacity:1}.code-list .file-box{border:1px solid var(--color-border-default);border-radius:6px}.code-list .title{min-height:24px;margin:-4px 0 8px 40px;font-weight:var(--base-text-weight-semibold, 600);line-height:1.2}.code-list .repo-specific .title,.code-list .repo-specific .full-path{margin-left:0}.code-list .match-count,.code-list .updated-at{margin:0;font-weight:var(--base-text-weight-normal, 400)}.code-list .language{float:right;margin-left:8px;font-size:12px;color:rgba(51,51,51,.75)}.code-list .avatar{float:left}.code-list .code-list-item+.code-list-item{border-top:1px solid var(--color-border-muted)}.code-list .blob-num{padding:0}.code-list .blob-num::before{content:normal}.code-list .blob-num a{padding:0 8px;color:inherit}.code-list .blob-num a:hover{color:var(--color-accent-fg)}.code-list .blob-code{white-space:pre-wrap}.code-list .divider .blob-num,.code-list .divider .blob-code{padding-top:0;padding-bottom:0;cursor:default;background-color:var(--color-canvas-subtle)}.code-list .divider .blob-num{height:18px;padding:0 8px;line-height:15px;background-color:var(--color-canvas-subtle)}.code-list .full-path{margin:0 0 0 40px}.code-list .full-path .octicon-repo{color:var(--color-fg-muted)}.code-list .full-path .octicon-lock{color:var(--color-attention-fg)}.code-list .full-path a{color:var(--color-fg-muted)}.code-list-item-private .file-box{border:1px solid var(--color-attention-muted)}.code-list-item-private .blob-num{background-color:var(--color-attention-subtle);border-right:1px solid var(--color-attention-muted)}.code-list-item-private .blob-num a{color:var(--color-attention-fg)}.code-list-item-private .divider .blob-num,.code-list-item-private .divider .blob-code{color:var(--color-attention-fg);background-color:var(--color-attention-subtle)}.code-scanning-alert-warning-message{border-color:var(--color-attention-emphasis) !important}.code-scanning-font-size-inherit{font-size:inherit !important}.cs-message .md-list{padding-left:2em}.code-scanning-timeline .TimelineItem:last-of-type.code-scanning-alert-dismissal-comment::before{width:0}.codesearch-head.pagehead h1{width:250px;line-height:33px}@media(min-width: 768px){.advanced-search-form .flattened dt{width:230px}.advanced-search-form .flattened dt label{font-weight:var(--base-text-weight-normal, 400)}.advanced-search-form .flattened dd{margin-left:250px}.advanced-search-form .form-checkbox{margin-left:250px}}.codesearch-results .code-list .title a{word-wrap:break-word}.codesearch-results .repo-list-item{border-bottom:0}.codesearch-results .repo-list-item+.repo-list-item{border-top:1px solid var(--color-border-default)}.search-form-fluid .TableObject-item--primary{position:relative;padding-right:8px}.search-form-fluid .completed-query{position:absolute;z-index:1;padding:inherit;margin:0;overflow:hidden;white-space:nowrap}.search-form-fluid .completed-query span{opacity:0}.search-form-fluid .search-page-label{position:relative;display:block;font-weight:var(--base-text-weight-normal, 400);cursor:text}.search-form-fluid .search-page-label.focus .completed-query{opacity:.6}.search-form-fluid .search-page-input{position:relative;z-index:2;min-height:0;padding:0;margin:0;background:none;border:0;box-shadow:none}.search-form-fluid .search-page-input:focus{box-shadow:none}.topics-row-container{height:30px;overflow:hidden}@media(max-width: 544px){.codesearch-pagination-container a:not(.next_page):not(.previous_page),.codesearch-pagination-container .gap{display:none}.codesearch-pagination-container .previous_page,.codesearch-pagination-container .next_page{width:100%}.codesearch-pagination-container .current{color:var(--color-fg-muted);background:var(--color-canvas-default);border-color:var(--color-border-default)}.codesearch-pagination-container .current::after{content:" of " attr(data-total-pages)}}.codespaces-policy-form details>summary::-webkit-details-marker{display:none}.codespaces-wider-select-menu-modal{width:420px;margin-right:32px}.codespaces-policy-item-no-hover:hover{background-color:var(--color-canvas-overlay)}.codespaces-policy-constraint-menu-item-muted-hover:hover{color:var(--color-fg-default);background-color:var(--color-btn-hover-bg)}.codespaces-policy-form-button-hover:hover .codespaces-policy-form-button-text-hover{border-color:var(--color-btn-hover-bg) !important}.codespaces-policy-form-button-hide-border{border-color:var(--color-scale-white) !important}.codespaces-policy-form-blue-hover:hover{color:var(--color-accent-fg) !important}.codespaces-policy-form-blue-hover:hover svg{color:var(--color-accent-fg) !important}.codespaces-policy-form-blue-hover:focus svg{color:var(--color-accent-fg) !important}.codespaces-policy-form-danger-hover:hover{background-color:var(--color-danger-subtle) !important}.codespaces-storage-utilization-button:hover{background-color:transparent !important}.commit-activity-master{margin-top:16px}.is-graph-loading .commit-activity-master{display:none}rect{shape-rendering:crispedges}rect.max{fill:var(--color-attention-fg)}g.bar{fill:var(--color-success-fg)}g.mini{fill:var(--color-severe-fg)}g.active rect{fill:var(--color-danger-fg)}circle.focus{fill:var(--color-fg-muted)}.dot text{fill:var(--color-fg-muted);stroke:none}span.no-nl-marker{position:relative;color:var(--color-danger-fg);vertical-align:middle}.symlink .no-nl-marker{display:none}.range-editor{position:relative;padding:4px 16px 4px 40px;margin-top:16px;margin-bottom:16px;background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default);border-radius:6px}.range-editor .dots{font-size:16px}.range-editor .select-menu{position:relative;display:inline-block}.range-editor .select-menu.fork-suggester{display:none}.range-editor .branch-name{line-height:22px}.range-editor .branch .css-truncate-target,.range-editor .fork-suggester .css-truncate-target{max-width:180px}.range-editor .pre-mergability{display:inline-block;padding:4px;line-height:26px;vertical-align:middle}.range-editor .pre-mergability .octicon{vertical-align:text-bottom}.range-editor.is-cross-repo .select-menu.fork-suggester{display:inline-block}.range-editor-icon{float:left;margin-top:8px;margin-left:-24px;color:var(--color-fg-muted)}.compare-pr-header{display:none}.is-pr-composer-expanded .compare-show-header{display:none}.is-pr-composer-expanded .compare-pr-header{display:block}.range-cross-repo-pair{display:inline-block;padding:4px;white-space:nowrap}.tint-box{position:relative;margin-bottom:8px;background:var(--color-canvas-subtle);border-radius:6px}.tint-box.transparent{background:var(--color-canvas-default)}.tint-box .activity{padding-top:100px;margin-top:0}.contrib-person path{fill:var(--color-severe-fg)}.contrib-person .midlabel{fill:var(--color-neutral-emphasis)}.coupons .setup-plans td img{margin-top:-2px;vertical-align:middle}.coupons .coupon-form-body{width:270px;padding:16px;margin:100px auto 60px;font-size:14px;text-align:center;background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default);border-radius:6px}.coupons .coupon-form-body .input-block{margin-bottom:16px}.coupons .coupon-form-body .btn{display:block;width:100%}.coupon-icon{width:80px;height:80px;margin:0 auto 16px;color:var(--color-accent-fg);border:1px solid var(--color-border-default);border-radius:40px}.coupon-icon .octicon{margin-top:16px;margin-right:2px}.coupons-list-options .select-menu{display:inline-block;margin-right:8px}.coupons-list-options .pagination{float:right;margin:0}.repo-private-icon{fill:var(--color-attention-fg)}.dashboard-rollup-items>.dashboard-rollup-item{border-top:1px solid var(--color-border-default)}.news-full{float:none;width:auto}.pinned-favorites-update-form{height:200px}.dashboard-break-word{-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.news .bio g-emoji,.news .repo-description g-emoji{display:inline-block}.news .feed-item-heading-menu-button{color:var(--color-fg-muted)}.news .feed-item-heading-menu-button:hover{color:var(--color-fg-default)}.suggest-icon{width:48px;height:48px;padding:4px}.suggest-icon svg,.suggest-icon path{fill:#fff}.suggest-icon svg::before,.suggest-icon path::before{bottom:-6px;left:-4px;background-color:#9e7bff}.suggest-icon svg::after,.suggest-icon path::after{top:-5px;right:-5px;width:5px;height:5px;background-color:#6c84e9}.suggest-icon .suggest-icon-bubble{position:absolute;width:6px;height:6px;background-color:#6c84e9;border-radius:50%}.suggest-icon .suggest-icon-bubble:nth-of-type(2n){width:4px;height:4px;background-color:#9e7bff}.suggest-icon .suggest-icon-bubble:nth-of-type(1){bottom:-7px;left:-7px}.suggest-icon .suggest-icon-bubble:nth-of-type(2){top:-4px;right:4px}.suggest-icon .suggest-icon-bubble:nth-of-type(3){top:-7px;right:-8px}.dashboard-notice{position:relative;padding:16px 16px 16px 55px;margin-bottom:16px;font-size:14px;background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default);border-radius:6px}.dashboard-notice .dismiss{position:absolute;top:10px;right:10px;width:16px;height:16px;color:var(--color-fg-muted);cursor:pointer}.dashboard-notice .dismiss:hover{color:var(--color-fg-muted)}.dashboard-notice .notice-icon{position:absolute;top:15px;left:15px}.dashboard-notice .octicon-organization{color:var(--color-accent-fg)}.dashboard-notice h2{margin-top:8px;margin-bottom:16px;font-size:16px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-default)}.dashboard-notice p.no-title{padding-right:4px}.dashboard-notice ul{margin-left:16px}.dashboard-notice li{padding-bottom:16px}.dashboard-notice .coupon{padding:8px;margin:16px 0;font-size:20px;font-weight:var(--base-text-weight-semibold, 600);text-align:center;background:var(--color-canvas-default);border:1px dashed var(--color-border-default)}.dashboards-overview-lead{width:700px}.dashboards-overview-cards .boxed-group{width:100%;margin:8px 0}.dashboards-overview-cards .boxed-group .graph-canvas path{stroke-opacity:.5}.dashboards-overview-cards .is-no-activity .blankslate{display:block}.dashboards-overview-cards .is-no-activity .dashboards-overview-graph{display:none}.dashboards-overview-cards .blankslate{display:none;padding-top:47px;background-color:var(--color-canvas-default);border:0;box-shadow:none}.dashboards-overview-cards .octicon-arrow-down,.dashboards-overview-cards .octicon-arrow-up{display:none}.dashboards-overview-cards .is-increase .octicon-arrow-up{display:inline-block}.dashboards-overview-cards .is-decrease .octicon-arrow-down{display:inline-block}.dashboards-overview-cards .octicon-arrow-down{color:var(--color-danger-fg)}.dashboards-overview-cards .octicon-arrow-up{color:#1db34f}.dashboards-overview-cards .graph-canvas .dots{padding:43px 0}.dashboards-overview-cards .summary-stats{height:78px}.dashboards-overview-cards .summary-stats .metric-0{color:#1db34f}.dashboards-overview-cards .summary-stats .metric-1{color:var(--color-accent-fg)}.dashboards-overview-cards .summary-stats .totals-num{margin:0 8px}.dashboards-overview-cards .summary-stats .single{width:100%}.dashboards-overview-cards .dashboards-overview-graph{height:160px}.dashboards-overview-cards .dashboards-overview-graph path{fill:none;stroke-width:2}.dashboards-overview-cards .dashboards-overview-graph path.metric-0{stroke:#1db34f}.dashboards-overview-cards .dashboards-overview-graph path.metric-1{stroke:#1d7fb3}.dashboards-overview-cards .dashboards-overview-graph .y line{stroke:#1db34f}.dashboards-overview-cards .dashboards-overview-graph .y.unique line{stroke:#1d7fb3}.dashboards-overview-cards .dashboards-overview-graph .overlay{fill-opacity:0}.dashboards-overview-cards .metric-0 circle{fill:#1db34f;stroke:#fff;stroke-width:2}.dashboards-overview-cards .dots.metric-1 circle{fill:#1d7fb3;stroke:#fff;stroke-width:2}.TimelineItem:last-of-type.dependabot-alert-dismissal-comment::before{width:0}dl.form.developer-select-account{margin-top:0}.developer-wrapper .setup-info-module .features-list{margin-left:16px}.developer-wrapper .setup-info-module .features-list .octicon{margin-left:-16px}.developer-thanks h2{font-size:40px;font-weight:var(--base-text-weight-normal, 400)}.developer-thanks .hook{margin-top:2px;margin-bottom:32px;font-size:16px;font-weight:var(--base-text-weight-light, 300);color:var(--color-fg-muted)}.developer-thanks-image{position:relative;bottom:-45px;float:left;width:400px}.developer-thanks-section{margin:130px 0 0 470px}.developer-next-steps{font-size:16px;font-weight:var(--base-text-weight-light, 300);list-style:none}.developer-next-steps li{margin-top:8px}.developer-next-steps li:first-child{margin-top:0}.developer-next-steps .octicon{margin-right:8px;color:var(--color-success-fg);vertical-align:middle}development-menu .line-clamp-1{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;word-break:break-all}development-menu .form-control[is-loading]{background:transparent}development-menu .development-menu-component-menu-modal,development-menu .development-menu-component-dialog-modal{margin-top:4px !important}development-menu .SelectMenu-item:hover,development-menu .SelectMenu-item:focus-visible{color:var(--color-fg-on-emphasis) !important;background-color:var(--color-accent-emphasis) !important}development-menu .SelectMenu-item:hover .arrow,development-menu .SelectMenu-item:focus-visible .arrow{visibility:visible !important}development-menu .SelectMenu-item:hover svg,development-menu .SelectMenu-item:hover span,development-menu .SelectMenu-item:hover p,development-menu .SelectMenu-item:focus-visible svg,development-menu .SelectMenu-item:focus-visible span,development-menu .SelectMenu-item:focus-visible p{color:var(--color-fg-on-emphasis) !important;background-color:var(--color-accent-emphasis) !important}development-menu .development-menu-component-menu-modal,development-menu .development-menu-component-dialog,development-menu .development-menu-component-dialog-modal{animation:none}@media(min-width: 544px){development-menu .development-menu-component-menu-modal,development-menu .development-menu-component-dialog,development-menu .development-menu-component-dialog-modal{max-width:300px}}@media(max-width: 544px){development-menu .hx_rsm-modal-sm{position:fixed !important;top:75px;right:16px !important;left:16px;display:flex;width:auto;height:80%;margin:0;flex-direction:column;animation:hx_rsm-modal-animation .24s .12s cubic-bezier(0, 0.1, 0.1, 1) backwards}}development-menu .development-menu-component-dialog:not([hidden])+.development-menu-component-dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:block;cursor:default;content:" ";background:transparent;background:var(--color-primer-canvas-backdrop)}@media(min-width: 544px){development-menu .development-menu-component-dialog:not([hidden])+.development-menu-component-dialog-overlay{display:none}}development-menu .development-menu-component-dialog{z-index:99}@keyframes development-menu-component-dialog-animation--sm{0%{opacity:0;transform:translateX(16px)}}@media(min-width: 544px){development-menu .development-menu-component-dialog{position:absolute;top:auto;right:auto;bottom:auto;left:auto;max-height:none;padding-top:0;margin:0;transform:none}}development-menu .development-menu-component-dialog .development-menu-component-dialog-modal{animation:none}development-menu .SelectMenu-item[aria-disabled=true]{opacity:.5}.file-diff-split[data-lock-side-selection=left] [data-split-side=right],.file-diff-split[data-lock-side-selection=right] [data-split-side=left]{-webkit-user-select:none;user-select:none}.invisible{position:absolute;opacity:0}.icon-discussion-answered{color:var(--color-success-fg)}.icon-discussion-answered,.icon-discussion-answered path{fill:var(--color-success-emphasis)}.icon-discussion-white{color:var(--color-discussions-state-answered-icon) !important}.icon-discussion-white,.icon-discussion-white path{fill:var(--color-discussions-state-answered-icon) !important}.icon-discussion-gray{color:var(--color-fg-default)}.icon-discussion-gray,.icon-discussion-gray path{fill:var(--color-fg-default)}.label-select-menu .color{display:inline-block;width:14px;height:14px;margin-top:-1px;margin-right:2px;vertical-align:middle;border-radius:7px}.label-select-menu .select-menu-item:hover,.label-select-menu .select-menu-item:focus,.label-select-menu .select-menu-item[aria-checked=true]:hover,.label-select-menu .select-menu-item[aria-checked=true]:focus{color:inherit;background-color:var(--color-neutral-subtle)}.label-select-menu .select-menu-item-icon,.label-select-menu .label-options-icon{color:inherit !important}.user-has-reacted .octicon{fill:var(--color-accent-fg)}.discussion-feed-body video{max-height:200px !important}.discussions-header-wrap{display:grid;grid-template-columns:minmax(0, 1fr);gap:10px}@media(min-width: 1012px){.discussions-header-wrap{grid-template-columns:minmax(0, 1fr) max-content}}.discussions-query-builder{order:2}@media(min-width: 1012px){.discussions-query-builder{order:inherit}}.discussions-button-wrap{display:flex;align-items:center;order:1}@media(min-width: 1012px){.discussions-button-wrap{order:inherit;justify-content:flex-end}}.discussions-select-menu a:focus{outline:2px solid var(--color-accent-emphasis)}.donut-chart>.error,.donut-chart>.cancelled,.donut-chart>.action_required,.donut-chart>.timed_out,.donut-chart>.failure{fill:var(--color-checks-donut-error)}.donut-chart>.expected,.donut-chart>.queued,.donut-chart>.in_progress,.donut-chart>.waiting,.donut-chart>.requested,.donut-chart>.pending{fill:var(--color-checks-donut-pending)}.donut-chart>.success{fill:var(--color-checks-donut-success)}.donut-chart>.neutral,.donut-chart>.stale,.donut-chart>.skipped{fill:var(--color-checks-donut-neutral)}.ghe-license-status{padding:40px 0;font-size:16px;text-align:center}.ghe-license-status .octocat{width:225px;margin-bottom:16px}.ghe-license-status h1{margin-bottom:8px}.ghe-license-status p{margin-bottom:4px;color:var(--color-fg-muted)}.ghe-license-expiry-icon{margin:4px 8px 0 0;color:var(--color-attention-fg)}.feature-preview-dialog{width:90vw;max-width:880px;height:60vh;min-height:240px;max-height:700px}.feature-preview-dialog .feature-preview-info{height:60vh;min-height:183px;max-height:calc(100% - 57px)}.file{position:relative;margin-top:16px;margin-bottom:16px;border:1px solid var(--color-border-default, #ddd);border-radius:6px}.file .drag-and-drop{border:0;border-top:1px dashed var(--color-border-default)}.file:target{outline:none !important;box-shadow:0 0 0 2px var(--color-accent-fg) !important}.file .data.empty{padding:4px 8px;color:var(--color-fg-muted)}.file:not(.open) .file-header.file-header--expandable{border-bottom:0;border-radius:6px}.file .data.suppressed,.file.open .image{display:none}.file.open .data.suppressed{display:block}.file .image{position:relative;padding:32px;text-align:center;background-color:#ddd}.file .image table{margin:0 auto}.file .image td{padding:0 4px;color:var(--color-fg-muted);text-align:center;vertical-align:top}.file .image td img{max-width:100%}.file .image .border-wrap{position:relative;display:inline-block;line-height:0;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default)}.file .image a{display:inline-block;line-height:0}.file .image img,.file .image canvas{max-width:600px;background:url("/images/modules/commit/trans_bg.gif") right bottom #eee;border:1px solid #fff}.file .image .view img,.file .image .view canvas{position:relative;top:0;right:0;max-width:inherit;background:url("/images/modules/commit/trans_bg.gif") right bottom #eee}.file .image .view>span{vertical-align:middle}.file .empty{background:none}.file-header{z-index:2;padding:4px 8px;background-color:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-default);border-top-left-radius:6px;border-top-right-radius:6px}.file-header::before{display:table;content:""}.file-header::after{display:table;clear:both;content:""}.file-actions{float:right;padding-top:2px;font-size:12px}.file-actions select{margin-left:4px}.file-info{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px;line-height:32px}.file-info .octicon{vertical-align:text-bottom}.sticky-file-header{position:sticky;top:60px}.sticky-file-header.has-open-dropdown{z-index:10}.diff-progressive-loader{min-height:150px}.load-diff-button,.load-diff-retry{z-index:1;min-height:32px}.diff-placeholder-svg{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%)}.ghae-bootstrap-container{min-height:calc(100vh - 54px)}.ghae-bootstrap-incomplete-step{color:var(--color-fg-muted);background-color:var(--color-canvas-subtle)}.ghae-bootstrap-complete-step{color:var(--color-fg-on-emphasis);background-color:var(--color-success-emphasis)}.ghae-enterprise-name-form-error{left:50%;transform:translateX(-50%)}.graphs .area{fill:var(--color-success-emphasis);fill-opacity:.5}.graphs .path{fill:none;stroke:var(--color-success-emphasis);stroke-opacity:1;stroke-width:2px}.graphs .dot{fill:var(--color-success-emphasis);stroke:#1e7e34;stroke-width:2px}.graphs .dot.padded{stroke:var(--color-canvas-default);stroke-width:1px}.graphs .dot.padded circle:hover{fill:var(--color-accent-emphasis)}.graphs .d3-tip{fill:var(--color-neutral-emphasis)}.graphs .d3-tip text{font-size:12px;fill:var(--color-canvas-default)}.graphs .dir{float:right;padding-top:4px;font-size:12px;font-weight:var(--base-text-weight-normal, 400);line-height:100%;color:var(--color-fg-muted)}.graphs .selection .overlay{visibility:none}.graphs .selection .selection{fill:var(--color-neutral-emphasis);fill-opacity:.1;stroke:var(--color-fg-default);stroke-dasharray:3 3;stroke-opacity:.4;stroke-width:1px;shape-rendering:crispedges}.graph-filter h3{display:inline-block;font-size:24px;font-weight:var(--base-text-weight-light, 300)}.graph-filter .info{margin-bottom:16px;color:var(--color-fg-muted)}.graph-canvas .activity{width:400px;padding:8px;margin:100px auto 0;color:var(--color-fg-default);text-align:center;border-radius:6px}.graph-canvas .dots{margin:0 auto}.graph-canvas>.activity{display:none}.graph-canvas .axis{font-size:12px}.graph-canvas .axis line{stroke:var(--color-border-default);shape-rendering:crispedges}.graph-canvas .axis text{fill:var(--color-fg-muted)}.graph-canvas .axis path{display:none}.graph-canvas .axis .zero line{stroke:var(--color-accent-emphasis);stroke-dasharray:3 3;stroke-width:1.5}.graph-canvas text.axis{fill:var(--color-fg-muted)}.graph-canvas .graph-loading,.graph-canvas .graph-error,.graph-canvas .graph-no-usable-data,.graph-canvas .graph-empty{display:none}.graph-canvas.is-graph-loading>.activity,.graph-canvas.is-graph-without-usable-data>.activity,.graph-canvas.is-graph-empty>.activity{display:block}.graph-canvas.is-graph-loading .graph-loading,.graph-canvas.is-graph-empty .graph-empty,.graph-canvas.is-graph-without-usable-data .graph-no-usable-data,.graph-canvas.is-graph-load-error .graph-error{display:block}.svg-tip{position:absolute;z-index:99999;padding:8px 16px;font-size:12px;color:var(--color-fg-on-emphasis);text-align:center;background:var(--color-neutral-emphasis-plus);border-radius:6px}.svg-tip.is-visible{display:block}.svg-tip::after{position:absolute;bottom:-10px;left:50%;width:5px;height:5px;box-sizing:border-box;margin:0 0 0 -4px;content:" ";border:5px solid transparent;border-top-color:var(--color-neutral-emphasis-plus)}.svg-tip.left::after{left:10%}.svg-tip.right::after{left:90%}.svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.svg-tip.comparison .title{display:block;padding:8px;margin:0;font-weight:var(--base-text-weight-semibold, 600);line-height:1;pointer-events:none}.svg-tip.comparison ul{padding:4px 8px 8px 8px;margin:0;white-space:nowrap;list-style:none}.svg-tip.comparison li{display:inline-block;padding-top:16px}.svg-tip.comparison .metric-0,.svg-tip.comparison .metric-1{position:relative}.svg-tip.comparison .metric-0::before,.svg-tip.comparison .metric-1::before{position:absolute;top:0;right:0;left:0;height:4px;content:"";border:1px solid var(--color-border-default);border-radius:6px}.svg-tip.comparison .metric-0::before{background-color:var(--color-success-emphasis)}.svg-tip.comparison .metric-1::before{background-color:var(--color-accent-emphasis)}.svg-tip-one-line{white-space:nowrap}.activity-overview-axis,.activity-overview-point{stroke:var(--color-calendar-graph-day-L4-bg)}.halloween-activity-overview .activity-overview-axis,.halloween-activity-overview .activity-overview-point{stroke:var(--color-calendar-halloween-graph-day-L4-bg)}.winter-activity-overview .activity-overview-axis,.winter-activity-overview .activity-overview-point{stroke:var(--color-calendar-winter-graph-day-L4-bg)}.activity-overview-label{fill:var(--color-fg-muted)}.activity-overview-percentage{font-size:12px;fill:var(--color-fg-muted)}.team-breadcrumb .team-breadcrumb-item{display:inline-block}.team-breadcrumb .team-breadcrumb-item::after{padding-right:.5em;padding-left:.5em;color:var(--color-neutral-muted);content:"/"}.team-breadcrumb .team-breadcrumb-item-selected::after{content:none}.team-discussions-container{min-height:100vh}@media(min-width: 768px){.team-left-column{max-width:350px}}.team-left-column .team-avatar{width:80px;height:80px}@media(min-width: 768px){.team-left-column .team-avatar{width:140px;height:140px}}.team-discussions{max-width:768px}.team-discussions .previewable-comment-form .comment{border:0}.team-discussions .previewable-comment-form .toolbar-commenting.toolbar-commenting.toolbar-commenting{background:transparent}.team-discussions .previewable-comment-form .tabnav-tab.selected{background-color:var(--color-canvas-default)}.hooks-listing .boxed-group-action.select-menu{z-index:auto}.hooks-listing .boxed-group-inner{padding:0 8px;margin-bottom:8px}.hook-item a:hover{text-decoration:none}.hook-item .item-status{float:left;width:16px;margin-right:8px;text-align:center}.hook-item .description{color:var(--color-fg-muted)}.hook-item .description .css-truncate-target{max-width:160px}.hook-item .icon-for-success,.hook-item .icon-for-failure,.hook-item .icon-for-pending,.hook-item .icon-for-inactive{display:none}.hook-item.success .icon-for-success{display:inline-block;color:var(--color-success-fg)}.hook-item.failure .icon-for-failure{display:inline-block;color:var(--color-danger-fg)}.hook-item.pending .icon-for-pending{display:inline-block;color:var(--color-fg-muted)}.hook-item.inactive .icon-for-inactive{display:inline-block;color:var(--color-fg-muted)}.hook-item .icon-for-enabled,.hook-item .icon-for-disabled{display:none}.hook-item.enabled .icon-for-enabled{display:inline-block;color:var(--color-success-fg)}.hook-item.disabled .icon-for-disabled{display:inline-block;color:var(--color-fg-muted)}.hook-item .hook-error-message{margin-left:24px;color:var(--color-danger-fg)}.hook-url.css-truncate-target{max-width:360px}.hooks-oap-warning{margin-top:0}.hooks-oap-warning ul{margin:8px 0}.hooks-oap-warning ul li{margin-left:16px}.item-name{float:left;font-weight:var(--base-text-weight-semibold, 600)}.hovercard-icon{width:16px}.integration-meta-head{font-size:16px;color:var(--color-fg-muted)}.integrations-select-repos{max-height:138px;overflow-y:scroll;border-radius:6px}.integrations-select-repos .mini-repo-list-item{padding:8px 64px 8px 32px}.integrations-select-repos .mini-repo-list-item:hover .repo,.integrations-select-repos .mini-repo-list-item:hover .owner{text-decoration:none}.integrations-select-repos .mini-repo-list-item .css-truncate-target{max-width:345px}.integrations-select-repos::-webkit-scrollbar{width:10px}.integrations-select-repos::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.5);border:solid var(--color-canvas-default) 2px;border-radius:6px;box-shadow:0 0 1px rgba(255,255,255,.5)}.integrations-select-repos::-webkit-scrollbar-track-piece{background:transparent}.integrations-repository-picker{width:440px}.target-avatar{position:relative;top:-2px}.select-permission-modal{width:340px}.issue-list-item+.issue-list-item{border-top:solid 1px var(--color-border-muted)}.issue-list-item{overflow-wrap:anywhere}.pinned-issue-item .pinned-issue-handle{cursor:grab}.pinned-issue-item.is-dragging,.pinned-issue-item.is-dragging .pinned-issue-handle{cursor:grabbing}.pinned-issue-item.is-dragging{background-color:var(--color-accent-subtle)}.pinned-issue-item.sortable-ghost{background-color:var(--color-accent-subtle);opacity:0}.issues-reset-query-wrapper{margin-bottom:16px}.label-link:hover{text-decoration:none}.issues-reset-query{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted)}.issues-reset-query:hover{color:var(--color-accent-fg);text-decoration:none}.issues-reset-query:hover .issues-reset-query-icon{background-color:var(--color-accent-emphasis)}.issues-reset-query-icon{width:18px;height:18px;padding:1px;margin-right:4px;color:var(--color-fg-on-emphasis);text-align:center;background-color:var(--color-neutral-emphasis);border-radius:6px}.table-list-milestones .stats{gap:0 15px}.table-list-milestones .table-list-cell{padding:16px 16px}.table-list-milestones .stat{display:inline-block;font-size:14px;font-weight:var(--base-text-weight-semibold, 600);line-height:1.2;color:var(--color-fg-muted);white-space:nowrap}.table-list-milestones .stat a{color:inherit}.table-list-milestones .stat-label{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.milestone-title{width:500px}.milestone-title-link{margin-top:0;margin-bottom:4px;font-size:24px;font-weight:var(--base-text-weight-normal, 400);line-height:1.2}.milestone-title-link a{color:var(--color-fg-default, #333)}.milestone-title-link a:hover{color:var(--color-accent-fg)}.milestone-progress{width:auto;max-width:420px}.milestone-progress .progress-bar{margin-top:8px;margin-bottom:12px}.milestone-meta{font-size:14px}.milestone-meta-item{display:inline-block;margin-right:8px}.milestone-meta-item .octicon{width:16px;text-align:center}.milestone-description-html{display:none}.milestone-description{margin-top:4px}.milestone-description .expand-more{color:var(--color-accent-fg);cursor:pointer}.milestone-description .expand-more:hover{text-decoration:underline}.milestone-description.open .milestone-description-plaintext{display:none}.milestone-description.open .milestone-description-html{display:block}.milestones-flexbox-gap{gap:10px}.issue-reorder-warning{z-index:110}.task-progress{color:var(--color-fg-muted);text-decoration:none;vertical-align:top}.task-progress .octicon{margin-right:4px;color:var(--color-fg-muted, #999);vertical-align:bottom}.task-progress .progress-bar{display:inline-block;width:80px;height:5px;vertical-align:2px;background-color:var(--color-neutral-muted)}.task-progress .progress-bar .progress{background-color:var(--color-border-default)}.task-progress-counts{display:inline-block;margin-right:4px;margin-left:-2px;font-size:12px}a.task-progress:hover{color:var(--color-accent-fg)}a.task-progress:hover .octicon{color:inherit}a.task-progress:hover .progress-bar .progress{background-color:var(--color-accent-emphasis)}.issue-meta-section .octicon{color:var(--color-fg-muted, #ccc);vertical-align:bottom}.issue-milestone{max-width:240px}.issue-milestone .css-truncate-target{max-width:100px}.milestone-link .octicon{font-size:14px}.milestone-link:hover .octicon{color:inherit}.new-pr-form{margin-top:16px;margin-bottom:16px}.new-pr-form::before{display:table;content:""}.new-pr-form::after{display:table;clear:both;content:""}.new-pr-form .discussion-timeline::before{display:none}.label-select-menu .description{margin-left:16px}.label-select-menu .color{display:inline-block;width:14px;height:14px;margin-top:-1px;margin-right:2px;vertical-align:middle;border-radius:7px}.label-select-menu [aria-checked=true] .select-menu-item-icon,.label-select-menu [aria-checked=mixed] .select-menu-item-icon,.label-select-menu .selected .select-menu-item-icon{color:inherit !important}.label-select-menu [aria-checked=true] .octicon-circle-slash,.label-select-menu [aria-checked=mixed] .octicon-circle-slash,.label-select-menu .selected .octicon-circle-slash{color:var(--color-fg-muted)}.label-select-menu [aria-checked=true]:active,.label-select-menu [aria-checked=mixed]:active,.label-select-menu .selected:active{background-color:transparent !important}.label-select-menu .select-menu-item{position:relative}.label-select-menu .select-menu-item:hover,.label-select-menu .select-menu-item:focus,.label-select-menu .select-menu-item[aria-selected=true],.label-select-menu .select-menu-item.navigation-focus{color:inherit;background-color:var(--color-neutral-subtle)}.label-select-menu .select-menu-item:hover .select-menu-item-icon,.label-select-menu .select-menu-item:focus .select-menu-item-icon,.label-select-menu .select-menu-item[aria-selected=true] .select-menu-item-icon,.label-select-menu .select-menu-item.navigation-focus .select-menu-item-icon{color:transparent}.label-select-menu .select-menu-item:hover .label-options-icon,.label-select-menu .select-menu-item:focus .label-options-icon,.label-select-menu .select-menu-item[aria-selected=true] .label-options-icon,.label-select-menu .select-menu-item.navigation-focus .label-options-icon{color:inherit}.label-select-menu>form{position:relative}.subnav .btn+.issues-search{padding-right:8px;border-right:1px solid var(--color-border-muted)}.reaction-sort-item{float:left;width:39px;padding:4px;margin-top:4px;text-align:center;pointer-events:all;border:solid 1px transparent;border-radius:6px;opacity:.7}.reaction-sort-item:focus,.reaction-sort-item:hover{text-decoration:none;background-color:var(--color-accent-emphasis);opacity:1}.reaction-sort-item[aria-checked=true]{background-color:var(--color-accent-subtle);border-color:var(--color-accent-emphasis);opacity:1}.issue-keyword{border-bottom:1px dotted var(--color-border-default)}.issue-keyword:hover{border-bottom:0}.new-label-color-dimensions{width:24px;height:24px}.select-menu-item[aria-selected=true]>.octicon.label-options-icon,.select-menu-item.navigation-focus>.octicon.label-options-icon{color:var(--color-fg-default)}.new-label-color-input:invalid{color:var(--color-danger-fg)}.issue-form-textarea{height:100px !important;min-height:100px !important}.issue-forms-wysiwyg-container .comment-form-head{background:var(--color-canvas-subtle) !important}.issue-forms-wysiwyg-container .comment-body{border-bottom:0 !important}.issue-form-body>:first-child{margin-top:0 !important}.issue-create-branch-menu-action{color:var(--color-fg-default)}.issue-create-branch-menu-action:hover:not(:disabled){color:var(--color-fg-default);background-color:var(--color-canvas-subtle)}.issue-create-branch-menu-action:focus:not(:disabled){color:var(--color-fg-default);background-color:var(--color-neutral-subtle)}react-app{display:flex !important}react-app>div{width:100%}react-app>div>div{height:100%}.repository-lang-stats{position:relative}.repository-lang-stats ol.repository-lang-stats-numbers li{display:table-cell;width:1%;padding:8px 4px;text-align:center;white-space:nowrap;border-bottom:0}.repository-lang-stats ol.repository-lang-stats-numbers li span.percent{float:none}.repository-lang-stats ol.repository-lang-stats-numbers li>a,.repository-lang-stats ol.repository-lang-stats-numbers li>span{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted);text-decoration:none}.repository-lang-stats ol.repository-lang-stats-numbers li .lang{color:var(--color-fg-default)}.repository-lang-stats ol.repository-lang-stats-numbers li .language-color{display:inline-block;width:10px;height:10px;border-radius:50%}.repository-lang-stats ol.repository-lang-stats-numbers li a:hover{background:transparent}.repository-lang-stats-graph{width:100%;overflow:hidden;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid var(--color-border-default);border-top:0;border-bottom-right-radius:6px;border-bottom-left-radius:6px}.repository-lang-stats-graph .language-color{line-height:8px;text-indent:-9999px}.repository-lang-stats-graph .language-color:first-child{border-bottom-left-radius:6px}.repository-lang-stats-graph .language-color:last-child{border-bottom-right-radius:6px}.repository-lang-stats-graph .language-color:not(:first-child){border-left:1px solid var(--color-canvas-default)}.facebox-loading,.octocat-spinner{min-height:64px;background-image:url("/images/spinners/octocat-spinner-64.gif");background-repeat:no-repeat;background-position:center center}.octocat-spinner-32{min-height:32px;background-image:url("/images/spinners/octocat-spinner-32.gif");background-repeat:no-repeat;background-position:center center}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (-moz-min-device-pixel-ratio: 2),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){.facebox-loading,.octocat-spinner{background-image:url("/images/spinners/octocat-spinner-128.gif");background-size:64px 64px}.octocat-spinner-32{background-image:url("/images/spinners/octocat-spinner-64.gif");background-size:32px 32px}}.map-container .activity{top:120px;left:340px;z-index:99999}.map-container .is-graph-loading .activity{display:block}.map{height:350px}.map-background{pointer-events:all;fill:#0366d6}.map-background-zoom{cursor:grab}.map-land{fill:none;stroke:#256aae;stroke-width:2;shape-rendering:crispedges}.map-country{fill:#d7c7ad;shape-rendering:crispedges;cursor:pointer}.map-country.hk{stroke:#a5967e}.map-country:hover{fill:#c8b28e}.map-country.active{fill:#f6e5ca}.map-borders{fill:none;stroke:#a5967e;shape-rendering:crispedges}.map-graticule{pointer-events:none;fill:none;stroke:#fff;stroke-opacity:.2;shape-rendering:crispedges}.map-graticule :nth-child(2n){stroke-dasharray:2,2}.map-legend .map-legend-circle{fill-opacity:0;stroke:#fff;stroke-width:1.5}.map-legend .map-legend-text{font-size:12px;fill:#fff;text-anchor:end}.map-legend .map-legend-link{stroke:#fff;stroke-width:1.5}.map-point{pointer-events:none;fill:#f66a0a}.map-point:hover{fill:#e36209}.map-country-info{top:8px;right:8px;pointer-events:none;opacity:0}.MarketplaceJumbotron{background-color:var(--color-neutral-emphasis);background-image:url("/images/modules/marketplace/bg-hero.svg");background-repeat:repeat-y;background-position:center top;background-size:150% auto}@media(min-width: 768px){.MarketplaceJumbotron{background-repeat:no-repeat;background-size:cover}}.CircleBadge--feature{position:relative;top:0;transition:top .15s ease-in,box-shadow .12s ease-in}.MarketplaceFeature{min-width:250px}.MarketplaceFeature-text{opacity:.7;transition:opacity .12s ease-in}.MarketplaceFeature-link:hover .CircleBadge--feature{top:-3px;box-shadow:0 3px 8px 0 rgba(0,0,0,.2)}.MarketplaceFeature-link:hover .MarketplaceFeature-text{opacity:1}.MarketplaceFeature-link:active .CircleBadge--feature{top:0;box-shadow:0}.MarketplaceSideNav{-webkit-overflow-scrolling:touch;background-color:var(--color-canvas-subtle)}@media(min-width: 768px){.MarketplaceSideNav{background-color:var(--color-canvas-default);border-right:1px solid var(--color-border-default)}}.ScreenshotCarousel{border:1px solid var(--color-border-default);border-radius:6px}.ScreenshotCarousel-screenshot{padding:16px}.ScreenshotCarousel-nav{display:flex;overflow-x:auto;align-items:top;box-shadow:inset 0 1px 0 var(--color-border-default)}.ScreenshotCarousel-navitem{width:20%;min-width:120px;padding:16px;cursor:pointer;border-right:1px solid var(--color-border-default)}.ScreenshotCarousel-navitem:last-child{border-right:0}.ScreenshotCarousel-navitem.selected{background-color:var(--color-canvas-subtle);box-shadow:inset 0 0 4px rgba(36,41,46,.15)}.marketplace-listing-screenshot-container{width:175px;min-height:175px;background-repeat:no-repeat;background-position:center center;background-size:cover}.marketplace-listing-screenshot-zoom{display:none;cursor:move}.marketplace-listing-details-sidebar{order:2}@media(min-width: 768px){.marketplace-listing-details-sidebar{order:1}}.marketplace-listing-details-description{order:1}@media(min-width: 768px){.marketplace-listing-details-description{order:2}}.marketplace-listing-screenshot-link{height:100px;cursor:move}.marketplace-listing-screenshot-link:hover .marketplace-listing-screenshot-zoom,.marketplace-listing-screenshot-link:focus .marketplace-listing-screenshot-zoom{top:0;left:0;display:block;width:100%;height:100%;padding-top:24px;background-color:rgba(255,255,255,.75)}.marketplace-integratable-logo{width:40px;height:40px}.marketplace-listing-save-notice,.marketplace-listing-save-error{display:none;opacity:0;transition:opacity .15s linear}.marketplace-listing-save-notice.visible,.marketplace-listing-save-error.visible{display:inline-block;opacity:1}.marketplace-listing-screenshot-delete-form{position:absolute;bottom:-24px;width:100%;text-align:center}.marketplace-plan-dollar-field-container .price-note{display:none}.marketplace-plan-dollar-field-container.is-errored .price-note{display:block}.marketplace-plan-dollar-field-container.is-errored .form-control{border-color:var(--color-danger-emphasis)}.marketplace-plan-emphasis{color:var(--color-fg-default)}.selected .marketplace-plan-emphasis{color:var(--color-fg-on-emphasis)}.marketplace-plan-unit-name-preview::before{content:"per "}.marketplace-plan-per-time{clear:right}.marketplace-billing-modal{width:540px;max-height:90vh;margin-top:5vh}.marketplace-listing-markdown,.marketplace-url-link{word-wrap:break-word;white-space:pre-wrap}.marketplace-listing-markdown{line-height:1.4}.marketplace-product-callout{border-color:var(--color-border-default) !important}.marketplace-product-callout::before,.marketplace-product-callout::after{display:none}.marketplace-product-callout .branch-action-item-icon{color:var(--color-fg-muted);background-color:var(--color-canvas-subtle)}.filter-item.selected .Label--secondary{color:var(--color-fg-on-emphasis);border-color:var(--color-fg-on-emphasis)}.MarketplaceEdit-body{min-height:570px}.MarketplaceEdit-body .pricing-model-selector{width:calc(100% - 12px);max-width:100% !important}.MarketplaceEdit-body .menu{border-right:0;border-left:0;border-radius:0}.MarketplaceEdit-body .menu-item{padding:12px 16px;background:var(--color-canvas-subtle)}.MarketplaceEdit-body .menu-item.selected{background:var(--color-canvas-default)}.MarketplaceEdit-body .menu-item:hover{background:var(--color-canvas-subtle)}.MarketplaceEdit-body .menu-item.selected::before{position:absolute;top:0;bottom:0;left:0;width:3px;content:"";background-color:var(--color-severe-emphasis)}.MarketplaceEdit-body .menu-item:first-child::before{border-top-left-radius:0}.MarketplaceEdit-body .CircleIcon{display:inline-block;width:32px;height:32px;font-weight:var(--base-text-weight-semibold, 600);line-height:32px;color:var(--color-fg-muted);text-align:center;background:#e6ebf1;border-radius:50%}.MarketplaceEdit-body .CircleIcon .octicon{display:inline-block}.MarketplaceInsights-graph .insights-month .tick:nth-child(2n){visibility:hidden}.BarChart{border-radius:6px}.BarChart-bar{height:10px;border-right:1px solid var(--color-canvas-default)}.BarChart-bar--green{background-color:var(--color-success-emphasis)}.BarChart-bar--orange{background-color:var(--color-severe-emphasis)}.BarChart-bar--yellow{background-color:var(--color-attention-emphasis)}.CircleBadge--tiny{width:32px;height:32px}.CircleBadge--github{position:relative}.CircleBadge--github.CircleBadge--large::after{right:5px;bottom:5px}.CircleBadge--github.CircleBadge--small::after{right:-5px;bottom:-5px}.CircleBadge--github::after{position:absolute;right:0;bottom:0;display:block;width:22px;height:22px;padding:4px;line-height:0;content:"";background:var(--color-canvas-default) url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyMnB4IiBoZWlnaHQ9IjIycHgiIHZpZXdCb3g9IjAgMCAyMiAyMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT5TaGFwZSBDb3B5PC90aXRsZT4gICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+ICAgIDxkZWZzPjwvZGVmcz4gICAgPGcgaWQ9IktpdGNoZW4tc2luayIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+ICAgICAgICA8ZyBpZD0iT2N0aWNvbnMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zNzAuMDAwMDAwLCAtMTU4NC4wMDAwMDApIiBmaWxsPSIjMUIxRjIzIj4gICAgICAgICAgICA8cGF0aCBkPSJNMzgxLDE1ODQgQzM3NC45MjI1LDE1ODQgMzcwLDE1ODguOTIyNSAzNzAsMTU5NSBDMzcwLDE1OTkuODY3NSAzNzMuMTQ4NzUsMTYwMy45Nzg3NSAzNzcuNTIxMjUsMTYwNS40MzYyNSBDMzc4LjA3MTI1LDE2MDUuNTMyNSAzNzguMjc3NSwxNjA1LjIwMjUgMzc4LjI3NzUsMTYwNC45MTM3NSBDMzc4LjI3NzUsMTYwNC42NTI1IDM3OC4yNjM3NSwxNjAzLjc4NjI1IDM3OC4yNjM3NSwxNjAyLjg2NSBDMzc1LjUsMTYwMy4zNzM3NSAzNzQuNzg1LDE2MDIuMTkxMjUgMzc0LjU2NSwxNjAxLjU3MjUgQzM3NC40NDEyNSwxNjAxLjI1NjI1IDM3My45MDUsMTYwMC4yOCAzNzMuNDM3NSwxNjAwLjAxODc1IEMzNzMuMDUyNSwxNTk5LjgxMjUgMzcyLjUwMjUsMTU5OS4zMDM3NSAzNzMuNDIzNzUsMTU5OS4yOSBDMzc0LjI5LDE1OTkuMjc2MjUgMzc0LjkwODc1LDE2MDAuMDg3NSAzNzUuMTE1LDE2MDAuNDE3NSBDMzc2LjEwNSwxNjAyLjA4MTI1IDM3Ny42ODYyNSwxNjAxLjYxMzc1IDM3OC4zMTg3NSwxNjAxLjMyNSBDMzc4LjQxNSwxNjAwLjYxIDM3OC43MDM3NSwxNjAwLjEyODc1IDM3OS4wMiwxNTk5Ljg1Mzc1IEMzNzYuNTcyNSwxNTk5LjU3ODc1IDM3NC4wMTUsMTU5OC42MyAzNzQuMDE1LDE1OTQuNDIyNSBDMzc0LjAxNSwxNTkzLjIyNjI1IDM3NC40NDEyNSwxNTkyLjIzNjI1IDM3NS4xNDI1LDE1OTEuNDY2MjUgQzM3NS4wMzI1LDE1OTEuMTkxMjUgMzc0LjY0NzUsMTU5MC4wNjM3NSAzNzUuMjUyNSwxNTg4LjU1MTI1IEMzNzUuMjUyNSwxNTg4LjU1MTI1IDM3Ni4xNzM3NSwxNTg4LjI2MjUgMzc4LjI3NzUsMTU4OS42Nzg3NSBDMzc5LjE1NzUsMTU4OS40MzEyNSAzODAuMDkyNSwxNTg5LjMwNzUgMzgxLjAyNzUsMTU4OS4zMDc1IEMzODEuOTYyNSwxNTg5LjMwNzUgMzgyLjg5NzUsMTU4OS40MzEyNSAzODMuNzc3NSwxNTg5LjY3ODc1IEMzODUuODgxMjUsMTU4OC4yNDg3NSAzODYuODAyNSwxNTg4LjU1MTI1IDM4Ni44MDI1LDE1ODguNTUxMjUgQzM4Ny40MDc1LDE1OTAuMDYzNzUgMzg3LjAyMjUsMTU5MS4xOTEyNSAzODYuOTEyNSwxNTkxLjQ2NjI1IEMzODcuNjEzNzUsMTU5Mi4yMzYyNSAzODguMDQsMTU5My4yMTI1IDM4OC4wNCwxNTk0LjQyMjUgQzM4OC4wNCwxNTk4LjY0Mzc1IDM4NS40Njg3NSwxNTk5LjU3ODc1IDM4My4wMjEyNSwxNTk5Ljg1Mzc1IEMzODMuNDIsMTYwMC4xOTc1IDM4My43NjM3NSwxNjAwLjg1NzUgMzgzLjc2Mzc1LDE2MDEuODg4NzUgQzM4My43NjM3NSwxNjAzLjM2IDM4My43NSwxNjA0LjU0MjUgMzgzLjc1LDE2MDQuOTEzNzUgQzM4My43NSwxNjA1LjIwMjUgMzgzLjk1NjI1LDE2MDUuNTQ2MjUgMzg0LjUwNjI1LDE2MDUuNDM2MjUgQzM4OC44NTEyNSwxNjAzLjk3ODc1IDM5MiwxNTk5Ljg1Mzc1IDM5MiwxNTk1IEMzOTIsMTU4OC45MjI1IDM4Ny4wNzc1LDE1ODQgMzgxLDE1ODQgTDM4MSwxNTg0IFoiIGlkPSJTaGFwZS1Db3B5Ij48L3BhdGg+ICAgICAgICA8L2c+ICAgIDwvZz48L3N2Zz4=") center no-repeat;border-radius:100px}body.page-responsive .flash-full .container{width:100%;max-width:980px}.ClipboardButton{position:relative}.ClipboardButton.ClipboardButton--success{border-color:var(--color-success-emphasis);box-shadow:0 0 0 .2em rgba(52,208,88,.4)}.ClipboardButton.ClipboardButton--success:focus{box-shadow:0 0 0 .2em rgba(52,208,88,.4)}@media(min-width: 768px){.MarketplacePlan--sticky{position:sticky;top:24px;z-index:999}}@media(max-width: 544px){.Box--full{right:0;bottom:0;left:0;width:100%;max-width:none;max-height:none;margin:0;border-radius:0;transform:none}}.MarketplaceBackground-wrapper{position:relative}.MarketplaceBackground-recommendations{position:relative;top:-90px;width:313px;margin-top:-150px;margin-bottom:-120px;overflow:hidden}.MarketplaceBackground-recommendations img{position:relative;top:0;right:225px;width:549px}@media(min-width: 544px){.MarketplaceBackground-recommendations{position:relative;width:463px;margin-top:-180px;margin-bottom:70px;overflow:hidden}.MarketplaceBackground-recommendations img{right:305px;width:730px}}@media(min-width: 768px){.MarketplaceBackground-recommendations{position:absolute;top:-228px;right:-69px;width:633px}.MarketplaceBackground-recommendations img{right:195px;width:750px}}@media(min-width: 1012px){.MarketplaceBackground-recommendations{top:-268px;right:0;width:1040px}.MarketplaceBackground-recommendations img{right:-115px;width:900px}}@media(min-width: 1280px){.MarketplaceBackground-recommendations{top:-325px;right:105px;width:1040px}.MarketplaceBackground-recommendations img{right:0;width:1040px}}.MarketplaceBackground-buffer{padding-top:40px;margin-top:-146px;background:var(--color-canvas-subtle)}@media(min-width: 544px){.MarketplaceBackground-buffer{padding-top:120px;margin-top:-233px}}@media(min-width: 768px){.MarketplaceBackground-buffer{margin-top:-109px}}@media(min-width: 1012px){.MarketplaceBackground-buffer{margin-top:-89px}}.MarketplaceHeader{overflow:hidden}.Link--muted.filter-item.selected{color:var(--color-fg-on-emphasis) !important}.MarketplaceBody{position:relative}@media(min-width: 544px){.MarketplaceBody{top:-72px;z-index:2}}.MarketplaceDetails .octicon{transition:transform 200ms linear;transform:scaleY(1)}.MarketplaceDetails[open] .octicon{transform:scaleY(-1)}.MarketplaceAnnouncement{color:#fff;background:linear-gradient(90deg, #257bf9, #2426ca)}.MarketplaceAnnouncement-icon{width:80px;opacity:.9}.MarketplaceAnnouncement-description{opacity:.7}.member-list-item .table-list-cell-checkbox{width:30px}.member-list-item.adminable .member-info{padding-left:4px}.member-list-item .member-avatar-cell{width:64px}.triage-mode .none-selected{display:none}.merge-branch-heading{margin:0;line-height:1;color:var(--color-fg-default)}.merge-branch-description{margin-right:160px;margin-bottom:-4px;line-height:1.6em;color:var(--color-fg-muted)}.alt-merge-options{display:inline-block;margin-bottom:0;margin-left:4px;vertical-align:middle}.merged .merge-branch-description .commit-ref .css-truncate-target{max-width:180px}.merge-branch-prh-output{margin-top:8px}.merge-branch-form,.queue-branch-form{display:none;padding-left:60px}.merge-branch-manually{display:none;padding-top:16px;margin-top:16px;background-color:transparent;border-top:1px solid var(--color-border-default)}.merge-branch-manually p{margin-bottom:0}.merge-branch-manually h3{margin-bottom:8px}.merge-branch-manually .intro{padding-bottom:8px;margin-top:0}.merge-branch-manually .step{margin:16px 0 4px}.open .merge-branch-manually{display:block}.select-menu-merge-method{width:310px}.select-menu-merge-method .select-menu-item:hover,.select-menu-merge-method .select-menu-item:hover .octicon,.select-menu-merge-method .select-menu-item:hover .select-menu-item-text{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.select-menu-merge-method .select-menu-item:hover .description{color:var(--color-fg-on-emphasis)}.merge-pr.is-squashing .commit-author-fields{display:none}.merge-pr.is-squashing .commit-author-fields.current-user-is-author{display:block}.merge-pr.is-rebasing .commit-form-fields{display:none;transition:opacity .15s linear 0s,margin-top .25s ease .1s}.merge-pr .btn-group-merge,.merge-pr .btn-group-merge-group,.merge-pr .merge-queue-info,.merge-pr .merge-queue-group-time-to-merge,.merge-pr.is-squashing .btn-group-squash,.merge-pr.is-rebasing .btn-group-rebase,.merge-pr.is-updating-via-merge .btn-group-update-merge,.merge-pr.is-updating-via-rebase .btn-group-update-rebase,.merge-pr.is-merging-solo .btn-group-merge-solo,.merge-pr.is-merging-solo .merge-queue-solo-time-to-merge,.merge-pr.is-merging-jump .btn-group-merge-jump,.merge-pr.is-merging-group .btn-group-merge-group,.merge-pr.is-merging .btn-group-merge-directly,.merge-pr.is-merging .merging-directly-warning{display:inline-block}.merge-pr .merging-body,.merge-pr .rebasing-body,.merge-pr .squashing-body,.merge-pr .merging-body-merge-warning,.merge-pr .merging-directly-warning,.merge-pr .squash-commit-author-email-info,.merge-pr .merge-commit-author-email-info,.merge-pr.is-merging .merge-queue-info,.merge-pr.is-merging-group .merge-queue-solo-time-to-merge,.merge-pr.is-merging-solo .merge-queue-group-time-to-merge,.merge-pr.is-merging .branch-action-state-error-if-merging .merging-body{display:none}.merge-pr.is-merging .merging-body,.merge-pr.is-merging .merge-commit-author-email-info,.merge-pr.is-merging-solo .merging-body,.merge-pr.is-merging-jump .merging-body,.merge-pr.is-merging-group .merging-body,.merge-pr.is-rebasing .rebasing-body,.merge-pr.is-squashing .squashing-body,.merge-pr.is-squashing .squash-commit-author-email-info,.merge-pr.is-merging .branch-action-state-error-if-merging .merging-body-merge-warning{display:block}.merge-pr .btn-group-squash,.merge-pr .btn-group-merge-solo,.merge-pr .btn-group-merge-jump,.merge-pr .btn-group-merge-directly,.merge-pr .btn-group-rebase,.merge-pr .btn-group-update-merge,.merge-pr .btn-group-update-rebase,.merge-pr.is-squashing .btn-group-merge,.merge-pr.is-rebasing .btn-group-merge,.merge-pr.is-merging-solo .btn-group-merge-group,.merge-pr.is-merging-jump .btn-group-merge-group,.merge-pr.is-merging .btn-group-merge-group{display:none;margin-left:0}.commit-form-fields{transition:opacity .15s linear .1s,margin-top .25s ease 0s}.unavailable-merge-method{display:block;margin-top:4px;color:var(--color-severe-fg)}[aria-selected=true].disabled .unavailable-merge-method,.navigation-focus.disabled .unavailable-merge-method{color:var(--color-fg-on-emphasis)}.try-merge-queue-popover{left:265px}@media(min-width: 1012px){.try-merge-queue-popover{left:272px}}.try-merge-queue-beta-flag{vertical-align:middle}.network .network-tree{vertical-align:middle}.network .gravatar{margin-right:4px;vertical-align:middle;border-radius:6px}.network .octicon{display:inline-block;width:16px;margin-left:2px;text-align:center;vertical-align:middle}.internal-repo-avatar{right:4px;bottom:-4px;border:solid 2px var(--color-canvas-default)}.owner-reponame dl.form-group{margin-top:4px;margin-bottom:0}.owner-reponame .slash{float:left;padding-top:32px;margin:0 8px;font-size:20px;color:var(--color-fg-muted)}.owner-reponame .form-group.errored details details-menu label{color:inherit}.owner-reponame .form-group.errored details .hack-repos-owner-summary{border-color:var(--color-danger-emphasis)}.reponame-suggestion{color:var(--color-success-fg);cursor:pointer}.upgrade-upsell{padding-left:32px}.cc-upgrade{padding-left:16px}.news .release{margin-top:0;margin-bottom:0}.news blockquote{color:var(--color-fg-muted)}.news .alert{position:relative;padding:0 0 1em 45px;overflow:hidden;border-top:1px solid #eff3f6}.news .alert .commits{padding-left:40px}.news .alert .css-truncate.css-truncate-target,.news .alert .css-truncate .css-truncate-target{max-width:180px}.news .alert p{margin:0}.news .alert .markdown-body blockquote{padding:0 0 0 40px;border-width:0}.news .alert .octicon{color:var(--color-fg-muted)}.news .alert .dashboard-event-icon{position:absolute;top:18px;left:22px;transform:translateX(-50%)}.news .alert .body{padding:1em 0 0;overflow:hidden;font-size:14px;border-bottom:0}.news .alert .time{font-size:12px;color:var(--color-fg-muted)}.news .alert .title{padding:0;font-weight:var(--base-text-weight-semibold, 600)}.news .alert .title .subtle{color:var(--color-fg-muted)}.news .alert .gravatar{float:left;margin-right:.6em;line-height:0;background-color:var(--color-canvas-default);border-radius:6px}.news .alert .simple .title{display:inline-block;font-size:14px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.news .alert .simple .time{display:inline-block}.news .alert:first-child{border-top:0}.news .alert:first-child .body{padding-top:0}.news .alert:first-child .dashboard-event-icon{top:0}.news .github-welcome .done{color:var(--color-fg-muted);text-decoration:line-through}.news .commits li{margin-top:.15em;list-style-type:none}.news .commits li.more{padding-top:2px;font-size:12px}.news .commits li .committer{display:none;padding-left:.5em}.news .commits li img{margin:0 1px 0 0;vertical-align:middle;background-color:var(--color-canvas-default);border-radius:6px}.news .commits li img.emoji{padding:0;margin:0;border:0}.news .commits li .message{display:inline-block;max-width:390px;margin-top:2px;overflow:hidden;font-size:14px;line-height:1.3;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.news div.message,.news li blockquote{display:inline;font-size:14px;color:var(--color-fg-muted)}.oauth-permissions-details{position:relative;padding:16px;margin:0;list-style:none;border-bottom:1px solid var(--color-border-muted)}.oauth-permissions-details:first-child{border-radius:6px 6px 0 0}.oauth-permissions-details:last-child{border:0;border-radius:0 0 6px 6px}.oauth-permissions-details.oauth-public-data-only{border-radius:6px}.oauth-permissions-details .markdown-body{font-size:12px}.oauth-permissions-details .content{display:none;margin-left:45px}.oauth-permissions-details .content .form-checkbox{margin-left:0}.oauth-permissions-details .content .form-checkbox:last-child{margin-bottom:0}.oauth-permissions-details .octicon{float:left;color:var(--color-fg-muted);text-align:center}.oauth-permissions-details .permission-help{font-size:12px}.oauth-permissions-details .permission-help ul{padding-left:16px;margin:1em 0}.oauth-permissions-details .permission-summary{margin-left:45px}.oauth-permissions-details .permission-summary .access-details{position:relative;color:var(--color-fg-muted)}.oauth-permissions-details .permission-summary em.highlight{position:relative;padding:2px 4px;margin-right:-2px;margin-left:-4px;font-style:normal;color:var(--color-fg-default);background:var(--color-search-keyword-hl);border-radius:6px}.oauth-permissions-details .permission-title{display:block;color:var(--color-fg-default)}.oauth-permissions-details a.btn-sm{float:right;margin-top:4px}.oauth-permissions-details.open a.btn-sm{background-color:#dcdcdc;background-image:none;border-color:#b5b5b5;box-shadow:inset 0 2px 4px rgba(0,0,0,.15)}.oauth-permissions-details.open .content{display:block}.oauth-permissions-details.default:not(.delete) .no-access,.oauth-permissions-details.default:not(.delete) .default-access,.oauth-permissions-details.none .no-access,.oauth-permissions-details.none .default-access{display:inline}.oauth-permissions-details.default:not(.delete) .access-details,.oauth-permissions-details.default:not(.delete) .permission-title,.oauth-permissions-details.none .access-details,.oauth-permissions-details.none .permission-title{color:var(--color-fg-muted)}.oauth-permissions-details.default:not(.delete) .octicon,.oauth-permissions-details.none .octicon{color:var(--color-fg-muted)}.oauth-permissions-details.default .default-access{display:inline}.oauth-permissions-details.full .full-access{display:inline}.oauth-details-toggle{position:absolute;top:0;right:0;padding:16px 16px}.oauth-details-toggle .octicon-chevron-up{display:none}.open .oauth-details-toggle .octicon-chevron-down{display:none}.open .oauth-details-toggle .octicon-chevron-up{display:block}.oauth-user-permissions .full-access,.oauth-user-permissions .limited-access,.oauth-user-permissions .limited-access-emails-followers,.oauth-user-permissions .limited-access-emails-profile,.oauth-user-permissions .limited-access-followers-profile,.oauth-user-permissions .limited-access-profile,.oauth-user-permissions .limited-access-followers,.oauth-user-permissions .limited-access-emails,.oauth-user-permissions .no-access{display:none}.oauth-user-permissions.limited.limited-email .limited-access-emails{display:inline}.oauth-user-permissions.limited.limited-email.limited-profile .limited-access-emails,.oauth-user-permissions.limited.limited-email.limited-profile .limited-access-profile{display:none}.oauth-user-permissions.limited.limited-email.limited-profile .limited-access-emails-profile{display:inline}.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-emails,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-profile,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-followers,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-emails-profile,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-emails-followers,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-followers-profile{display:none}.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access{display:inline}.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-emails,.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-followers{display:none}.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-emails-followers{display:inline}.oauth-user-permissions.limited.limited-follow .limited-access-followers{display:inline}.oauth-user-permissions.limited.limited-follow.limited-profile .limited-access-followers,.oauth-user-permissions.limited.limited-follow.limited-profile .limited-access-profile{display:none}.oauth-user-permissions.limited.limited-follow.limited-profile .limited-access-followers-profile{display:inline}.oauth-user-permissions.limited.limited-profile .limited-access-profile{display:inline}.oauth-repo-permissions .default-access,.oauth-repo-permissions .public-access,.oauth-repo-permissions .limited-repo-invite-access,.oauth-repo-permissions .full-access{display:none}.oauth-repo-permissions.full .full-access{display:inline}.oauth-repo-permissions.limited-repo-invite .limited-repo-invite-access{display:inline}.oauth-repo-permissions.public .public-access{display:inline}.oauth-repo-permissions.default .default-access{display:inline}.oauth-delete-repo-permissions .octicon-alert{color:var(--color-danger-fg)}.oauth-repo-status-permissions .no-access,.oauth-repo-status-permissions .full-access,.oauth-repo-deployment-permissions .no-access,.oauth-repo-deployment-permissions .full-access{display:none}.oauth-notifications-permissions .no-access,.oauth-notifications-permissions .read-access,.oauth-notifications-permissions .via-public-access,.oauth-notifications-permissions .via-full-access{display:none}.oauth-notifications-permissions.read .read-access{display:inline}.oauth-notifications-permissions.via-public .via-public-access{display:inline}.oauth-notifications-permissions.via-public .octicon{display:none}.oauth-notifications-permissions.via-full .via-full-access{display:inline}.oauth-gist-permissions .no-access,.oauth-gist-permissions .full-access{display:none}.oauth-granular-permissions .no-access,.oauth-granular-permissions .read-access,.oauth-granular-permissions .write-access,.oauth-granular-permissions .full-access{display:none}.oauth-granular-permissions.none .no-access{display:inline}.oauth-granular-permissions.read .read-access{display:inline}.oauth-granular-permissions.write .write-access{display:inline}.oauth-granular-permissions.full .full-access{display:inline}.oauth-no-description{color:var(--color-fg-muted)}.oauth-org-access-details{background:var(--color-canvas-default)}.oauth-org-access-details .oauth-org-item:hover{background:var(--color-canvas-subtle)}.oauth-org-access-details a:hover{text-decoration:none}.oauth-org-access-details .boxed-group-inner{border:0;border-radius:6px}.oauth-org-access-details .oauth-org-item{line-height:24px}.oauth-org-access-details .oauth-org-item:first-child{border-radius:6px 6px 0 0}.oauth-org-access-details .oauth-org-item .loading-indicator{display:none;margin:4px}.oauth-org-access-details .oauth-org-item.on .authorized-tools{display:block}.oauth-org-access-details .oauth-org-item.on .unauthorized-tools{display:none}.oauth-org-access-details .oauth-org-item.on strong{color:var(--color-fg-default)}.oauth-org-access-details .oauth-org-item.on .octicon-check{display:inline}.oauth-org-access-details .oauth-org-item.on .octicon-x{display:none}.oauth-org-access-details .oauth-org-item.revoked{background:var(--color-canvas-default)}.oauth-org-access-details .oauth-org-item.revoked .unauthorized-tools,.oauth-org-access-details .oauth-org-item.revoked .authorized-tools{display:none}.oauth-org-access-details .oauth-org-item.revoked .octicon-x{color:var(--color-danger-fg)}.oauth-org-access-details .oauth-org-item.loading .unauthorized-tools,.oauth-org-access-details .oauth-org-item.loading .authorized-tools{display:none}.oauth-org-access-details .oauth-org-item.loading .loading-indicator{display:block}.oauth-org-access-details .oauth-org-item .authorized-tools{display:none}.oauth-org-access-details .oauth-org-item .unauthorized-tools{display:block}.oauth-org-access-details .btn{line-height:1.5em}.oauth-org-access-details .octicon{color:var(--color-fg-muted)}.oauth-org-access-details .octicon-check{display:none;color:var(--color-success-fg)}.oauth-org-access-details .octicon-x{display:inline}.oauth-org-access-details .octicon-x.org-access-denied{color:var(--color-danger-fg)}.permission-title{margin-top:0}.boxed-group-inner .oauth-application-info{margin-bottom:8px}.oauth-application-info .application-title{font-size:32px;color:var(--color-fg-default)}.oauth-application-info .application-description{margin-top:4px;margin-bottom:0}.oauth-application-info .listgroup-item{line-height:inherit}.oauth-application-info .app-denied,.oauth-application-info .app-approved{margin-left:8px;font-size:14px;font-weight:var(--base-text-weight-normal, 400);white-space:nowrap}.oauth-application-info .app-approved,.oauth-application-info .octicon-check{color:var(--color-success-fg)}.oauth-application-info .app-denied,.oauth-application-info .octicon-x{color:var(--color-severe-fg)}.app-transfer-actions form{display:inline}.developer-app-item .developer-app-avatar-cell{width:60px}.developer-app-item .developer-app-name{font-size:14px;font-weight:var(--base-text-weight-semibold, 600);line-height:1.25;color:var(--color-fg-default)}.developer-app-item .developer-app-name:hover{color:var(--color-accent-fg);text-decoration:none}.developer-app-item .developer-app-info-cell{padding-left:0}.developer-app-item .developer-app-list-meta{margin-top:4px;margin-bottom:2px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.org-transfer-requests{margin:8px 0 16px}.toggle-secret-field .secret-standin{display:block}.toggle-secret-field .secret-field{display:none}.toggle-secret-field.open .secret-standin{display:none}.toggle-secret-field.open .secret-field{display:block}.invitation-2fa-banner{margin-right:-24px;margin-left:-24px}.sign-up-via-invitation .bleed-flush{width:100%;padding:0 16px;margin-left:-16px;border-color:var(--color-border-default)}.sign-up-via-invitation label{font-size:14px}.orghead{padding-top:16px;padding-bottom:0;margin-bottom:16px;color:var(--color-fg-default);background-color:var(--color-page-header-bg);border-bottom:1px solid var(--color-border-default)}.orghead .orgnav{position:relative;top:1px;margin-top:8px}.org-repos .TableObject-item--primary{white-space:normal}.org-name{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-default)}.audit-log-search .member-info{width:300px}.audit-log-search .member-info .member-avatar{float:left;margin-right:16px}.audit-log-search .member-info .member-link{display:block}.audit-log-search .member-info .member-list-avatar{margin-right:0}.audit-log-search .member-info .ghost{display:inline-block;color:var(--color-fg-muted)}.audit-log-search .blankslate{border-top-left-radius:0;border-top-right-radius:0}.audit-log-search .export-phrase{margin:4px 0}.audit-results-actions{overflow:auto}.audit-search-clear{float:left;margin-bottom:16px;border:0}.audit-search-clear .issues-reset-query{margin-bottom:0}.audit-type{width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audit-type .octicon{margin-right:4px;font-weight:var(--base-text-weight-normal, 400);vertical-align:bottom}.audit-type .repo{color:var(--color-severe-fg)}.audit-type .team{color:var(--color-success-fg)}.audit-type .user{color:var(--color-done-fg)}.audit-type .oauth_access{color:var(--color-danger-fg)}.audit-type .hook{color:#e1bf4e}.export-phrase{margin-top:4px}.export-phrase pre{padding-left:8px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;white-space:pre-wrap;border-left:1px solid var(--color-border-muted)}.two-factor-enforcement-form .loading-spinner{float:left;margin:0 0 0 -16px;vertical-align:middle}.saml-enabled-banner-container{background-color:var(--color-canvas-default)}.saml-settings-form .test-status-indicator,.oidc-settings-form .test-status-indicator{width:30px;height:30px;margin-top:-4px;border-radius:50%}.saml-settings-form .test-status-indicator .octicon,.oidc-settings-form .test-status-indicator .octicon{display:block;margin-top:8px;margin-right:auto;margin-left:auto}.saml-settings-form .form-group.errored,.oidc-settings-form .form-group.errored{margin-bottom:40px}.saml-settings-form .test-status-indicator-error,.oidc-settings-form .test-status-indicator-error{color:var(--color-fg-on-emphasis);background-color:var(--color-danger-emphasis)}.saml-settings-form .test-status-indicator-success,.oidc-settings-form .test-status-indicator-success{color:var(--color-fg-on-emphasis);background-color:var(--color-success-emphasis)}.saml-settings-form .details-container .method-field,.oidc-settings-form .details-container .method-field{display:none}.saml-settings-form .details-container .method-label,.oidc-settings-form .details-container .method-label{font-weight:var(--base-text-weight-normal, 400)}.saml-settings-form .details-container .details-target,.oidc-settings-form .details-container .details-target{cursor:pointer}.saml-settings-form .details-container.open .method-value,.saml-settings-form .details-container.open .details-target,.oidc-settings-form .details-container.open .method-value,.oidc-settings-form .details-container.open .details-target{display:none}.saml-settings-form .details-container.open .method-field,.oidc-settings-form .details-container.open .method-field{display:inline-block}.saml-settings-form .saml-enforcement-disabled,.oidc-settings-form .saml-enforcement-disabled{opacity:.5}.form-group .form-control.saml-certificate-field{width:440px;height:150px;min-height:0}.member-avatar{float:left;margin:1px}.member-fullname{color:var(--color-fg-muted)}.auto-search-group{position:relative}.auto-search-group .auto-search-input{padding-left:32px}.auto-search-group .spinner,.auto-search-group>.octicon{position:absolute;left:10px;z-index:5;width:16px;height:16px}.auto-search-group .spinner{top:9px;background-color:var(--color-canvas-default)}.auto-search-group>.octicon{top:10px;font-size:14px;color:var(--color-fg-muted);text-align:center}.org-list .list-item{position:relative;padding-top:16px;padding-bottom:16px;border-bottom:1px solid var(--color-border-muted)}.org-list .list-item::before{display:table;content:""}.org-list .list-item::after{display:table;clear:both;content:""}.permission-level-cell .select-menu-button{width:90px;text-align:left}.permission-level-cell .select-menu-button::after{position:absolute;top:10px;right:10px}.permission-level-cell .spinner{float:none;opacity:0;transition:opacity .2s ease-in-out}.permission-level-cell .is-loading .spinner{opacity:1}.select-menu-option-title{margin-top:0;margin-bottom:0}.reinstate-org-member{position:relative;width:500px;margin:40px auto}.reinstate-org-member .reinstate-lead{margin-bottom:32px;font-size:16px}.reinstate-org-member label{cursor:pointer}.reinstate-org-member .reinstate-detail-container{margin:16px 0}.reinstate-org-member .reinstate-title{color:var(--color-fg-default)}.reinstate-org-member .reinstate-title .octicon{width:16px;margin-right:8px;color:var(--color-fg-muted)}.permission-title{margin-top:0}.invite-member-results ul{margin:0}.team-member-list{list-style:none}.team-member-list .table-list-cell{padding-top:16px;padding-bottom:16px}.team-member-list .team-member-content{margin-left:50px}.team-member-list .team-member-username{margin:0;font-size:14px;font-weight:var(--base-text-weight-semibold, 600);line-height:20px}.team-member-list .Label--secondary{cursor:default}.team-member-list .invite-icon{width:28px;color:var(--color-fg-muted)}.menu-item-danger,.menu-item-danger.selected{color:var(--color-danger-fg)}.menu-item-danger:hover,.menu-item-danger[aria-selected=true],.menu-item-danger.navigation-focus,.menu-item-danger.selected:hover,.menu-item-danger.selected[aria-selected=true],.menu-item-danger.selected.navigation-focus{color:var(--color-fg-on-emphasis);background:var(--color-danger-emphasis)}.team-member-list-avatar{float:left;margin-right:8px}.team-member-list-avatar .octicon{width:40px;color:var(--color-fg-muted)}.confirm-removal-list-container{margin-bottom:16px;border:1px solid var(--color-border-default);border-radius:6px}.confirm-removal-list-item{padding:8px;margin:0;font-size:14px;font-weight:var(--base-text-weight-semibold, 600);border-top:1px solid var(--color-border-muted)}.confirm-removal-list-item:first-child{border-top:0}.manage-member-meta{list-style:none}.manage-member-meta-item{margin-top:12px;color:var(--color-fg-muted)}.manage-member-meta-item:first-child{margin-top:0}.manage-member-meta-item .btn-link{color:var(--color-fg-muted)}.manage-member-meta-item>.octicon{width:14px;margin-right:4px;color:var(--color-fg-muted);text-align:center}.manage-member-meta-item>.octicon-alert{color:var(--color-severe-fg)}.ldap-group-dn{display:block;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.ldap-import-groups-container .blankslate{display:none}.ldap-import-groups-container.is-empty .blankslate{display:block}.ldap-import-groups-container.is-empty .ldap-memberships-list{display:none}.ldap-memberships-list{margin-bottom:32px}.ldap-memberships-list .table-list-cell{padding-top:8px;padding-bottom:8px;font-size:12px;vertical-align:middle}.ldap-memberships-list .table-list-cell:last-child{width:92px}.ldap-memberships-list .ldap-list-team-name{width:380px}.ldap-memberships-list .ldap-group-dn{font-size:12px}.ldap-memberships-list .ldap-mention-as{width:260px}.ldap-memberships-list .edit{position:absolute;padding:8px;margin-left:-32px;color:var(--color-accent-fg);cursor:pointer}.ldap-memberships-list .edit-fields{display:none}.ldap-memberships-list .is-editing .edit-hide{display:none}.ldap-memberships-list .is-editing .edit-fields{display:block}.ldap-memberships-list .is-editing .spinner{margin-left:16px;vertical-align:middle}.ldap-memberships-list .is-removing{opacity:.25}.ldap-memberships-list .is-removing .edit{opacity:.5}.team-name-field{height:33px}.ldap-import-form-actions{margin-top:32px}.invited .team-member-list{margin:-16px 0}.invited .team-member-list .list-item{padding:8px 0;border-bottom:1px solid var(--color-border-muted)}.invited .team-member-list .list-item::before{display:table;content:""}.invited .team-member-list .list-item::after{display:table;clear:both;content:""}.invited .team-member-list .list-item:last-of-type{border:0}.invited .team-member-list .list-item .edit-invitation{float:right;margin-top:4px}.invited-banner::before{display:table;content:""}.invited-banner::after{display:table;clear:both;content:""}.invited-banner .btn-sm{float:right;margin-left:4px}.invited-banner p{font-size:14px;line-height:1.5}.invited-banner .inviter-link{font-weight:var(--base-text-weight-semibold, 600)}.manage-member-sso-sessions.has-active-sessions .blankslate{display:none}.org-menu-item:not([aria-current=page])+.org-sub-menu{display:none}.trial-banner-notice{background-image:linear-gradient(180deg, #0366d6 0%, #2188ff 100%)}@media(min-width: 768px){.Popover-message--extra-large{min-width:544px !important}}.theme-name{display:inline-block;margin-right:8px;margin-left:8px;font-size:20px;line-height:1;vertical-align:middle}.pinned-items-spinner{position:relative;top:2px;left:6px}.pinned-items-setting-link{font-size:12px;font-weight:var(--base-text-weight-normal, 400)}.pinned-item-name{color:var(--color-fg-default)}.pinned-item-checkbox+.pinned-item-name:hover{cursor:pointer;background-color:var(--color-action-list-item-default-hover-bg);border-radius:6px}.pinned-item-checkbox:disabled+.pinned-item-name{color:var(--color-fg-muted)}.pinned-item-checkbox:disabled+.pinned-item-name:hover{cursor:default}.pinned-gist-blob-num{min-width:36px;cursor:default}.pinned-gist-blob-num:hover{color:var(--color-fg-muted);cursor:default}@media print{#serverstats,.Header-old,.Header,.header-search,.reponav,.comment::before,.comment::after,.footer,.pagehead-actions,.discussion-timeline-actions,.timeline-comment-actions,.timeline-new-comment,.thread-subscription-status,.lock-toggle-link,.header,.file-actions,.js-expandable-line,.gh-header-sticky,.pr-toolbar.is-placeholder,.language-color{display:none !important}.repository-lang-stats-graph{height:0}.btn:not(.btn-outline){color:var(--color-fg-default) !important;background:none}p,.comment h2{page-break-inside:avoid}.markdown-body h2{page-break-after:avoid}.topic-tag{padding:0}.topic-tag::before{margin-right:-2px;content:"#"}.blob-num{border-right:2px solid var(--color-border-default)}.blob-num-deletion{border-right-color:var(--color-danger-emphasis)}.blob-num-addition{border-right-color:var(--color-success-emphasis)}.blob-code-addition .x{border-bottom:2px solid var(--color-success-emphasis);border-radius:0}.blob-code-deletion .x{border-bottom:2px solid var(--color-danger-emphasis);border-radius:0}.pr-toolbar.is-stuck{position:static !important;width:100% !important}.diffstat-block-neutral{border:4px solid var(--color-border-default)}.diffstat-block-deleted{border:4px solid var(--color-danger-emphasis)}.diffstat-block-added{border:4px solid var(--color-success-emphasis)}.State{color:var(--color-fg-default);background:none;border:1px solid var(--color-border-default);border-color:none}.State--open{color:var(--color-success-fg);border:1px solid #2cbe4e}.State--merged{color:var(--color-done-fg);border:1px solid var(--color-done-emphasis)}.State--closed{color:var(--color-danger-fg);border:1px solid var(--color-danger-emphasis)}.markdown-body pre>code{white-space:pre-wrap}}.projects-splash-dialog{position:fixed;top:0;right:auto;left:50%;z-index:999;width:90vw;max-width:700px;max-height:80vh;margin:10vh auto;transform:translateX(-50%)}@media(min-width: 544px){.projects-splash-dialog{margin:20vh auto}}.projects-splash-banner{background-image:url("/images/modules/memexes/projects-beta-banner-mobile.png");background-repeat:no-repeat;background-position:left;background-size:cover}@media(min-width: 768px){.projects-splash-banner{background-image:url("/images/modules/memexes/projects-beta-banner.png")}}.projects-splash-banner p{max-width:100%}@media(min-width: 768px){.projects-splash-banner p{max-width:55%}}@media(min-width: 768px){[data-color-mode=light][data-light-theme*=dark] .projects-splash-banner,[data-color-mode=dark][data-dark-theme*=dark] .projects-splash-banner{background-image:url("/images/modules/memexes/projects-beta-banner-dark.png")}}@media(prefers-color-scheme: light)and (min-width: 768px){[data-color-mode=auto][data-light-theme*=dark] .projects-splash-banner{background-image:url("/images/modules/memexes/projects-beta-banner-dark.png")}}@media(prefers-color-scheme: dark)and (min-width: 768px){[data-color-mode=auto][data-dark-theme*=dark] .projects-splash-banner{background-image:url("/images/modules/memexes/projects-beta-banner-dark.png")}}.project-description p:last-child{margin-bottom:0 !important}.pending-cards-status{top:-2px;right:-9px;width:14px;height:14px;background-image:linear-gradient(#54a3ff, #006eed);background-clip:padding-box;border:2px solid var(--color-canvas-default)}.project-column{min-width:100%;max-width:100%;background-color:var(--color-canvas-inset);border-width:0 !important;border-radius:0 !important}.project-column:focus{outline:none}@media(min-width: 544px){.project-column{min-width:355px;max-width:355px;border-width:1px !important;border-radius:6px !important}.project-column:focus{border-color:var(--color-accent-fg) !important;box-shadow:0 0 0 2px var(--color-accent-fg)}}.project-column.moving{background-color:var(--color-accent-subtle) !important;box-shadow:0 0 0 2px var(--color-accent-fg);transform:translateX(4px) translateY(-4px)}.sortable-ghost{background-color:var(--color-canvas-subtle);opacity:.5}.project-card{background-color:var(--color-canvas-overlay)}.project-card .project-reference-markdown>p,.project-card:last-child{margin-bottom:0 !important}.project-card:first-child{margin-top:8px !important}@media(min-width: 544px){.project-card:first-child{margin-top:4px !important}}.project-card ul,.project-card ol{margin-bottom:8px;margin-left:16px}.project-card blockquote{padding:0 .75em;color:var(--color-fg-muted);border-left:.25em solid var(--color-border-default)}.project-card .contains-task-list{margin-left:24px}.project-card:hover{border-color:var(--color-border-default) !important;box-shadow:0 1px 3px rgba(106,115,125,.3) !important}.project-card:focus{outline:none}@media(min-width: 544px){.project-card:focus{border-color:var(--color-accent-fg) !important;box-shadow:0 0 0 2px var(--color-accent-fg) !important}}.project-card.moving{background-color:var(--color-accent-subtle) !important;box-shadow:0 0 0 2px var(--color-accent-fg) !important;transform:translateX(4px) translateY(0)}.issue-card.draggable{cursor:move}.issue-card .AvatarStack:hover .from-avatar{margin-right:-4px}.issue-card pre{word-wrap:break-word;white-space:pre-wrap}@keyframes show-pane{0%{transform:translateX(390px)}100%{transform:translateX(0)}}.project-note-form textarea{resize:vertical}.card-menu-container .dropdown-menu,.column-menu-container .dropdown-menu{min-width:180px}.card-octicon{top:6px;left:10px}.card-note-octicon{top:8px}.is-sending .auto-search-group .chooser-spinner{top:15px;right:21px;left:auto}.card-filter-autocomplete-dropdown{z-index:500;float:none;min-width:240px;max-height:270px;cursor:pointer}.card-filter-autocomplete-dropdown [aria-selected=true],.card-filter-autocomplete-dropdown .navigation-focus{color:var(--color-fg-on-emphasis) !important;background-color:var(--color-accent-emphasis);border-radius:6px}.card-filter-autocomplete-dropdown [aria-selected=true] .autocomplete-text-qualifier,.card-filter-autocomplete-dropdown .navigation-focus .autocomplete-text-qualifier{color:var(--color-fg-on-emphasis) !important}.projects-reset-query:hover{color:var(--color-fg-subtle) !important}.projects-reset-query:hover .projects-reset-query-icon{color:var(--color-fg-subtle) !important}.projects-reset-query-icon{width:18px;height:18px;padding:1px}.project-small-menu-dropdown::before,.project-small-menu-dropdown::after{display:none}.project-edit-mode .column-menu-container,.project-edit-mode .column-menu-item{display:none !important}.project-edit-mode .project-move-actions{display:flex !important}.push-board-over{padding-right:0 !important;transition:all .2s ease}@media(min-width: 544px){.push-board-over{padding-right:360px !important}}.projects-comment-form .comment-md-support-link{float:none;width:100%;text-align:center}.projects-comment-form .comment-form-actions{width:100%;padding:8px 16px;margin:4px 0 !important}.projects-comment-form .comment-form-actions button{width:100%;margin:4px 0 !important}.projects-comment-form .comment-form-head{padding:0 !important;margin:0 !important;border-bottom:0}.projects-comment-form .comment-form-head .tabnav-tabs{padding:8px 8px 0}.projects-comment-form .comment-form-head .toolbar-commenting{width:100%;padding-top:4px;text-align:center;background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-default)}.projects-comment-form .comment-form-head::after{display:block;clear:both;content:" "}.projects-comment-form .comment-form-textarea{height:250px !important}.projects-comment-form .preview-content{margin:0;border-top:1px solid var(--color-border-default)}.projects-comment-form .preview-content .comment-body{padding:16px}.project-issue-body-wrapper{max-height:200px;overflow:hidden}.Details--on .project-issue-body-wrapper{max-height:none;overflow:visible}.project-issue-body-blur{height:32px;background:linear-gradient(to top, var(--color-project-gradient-in), var(--color-project-gradient-out))}.Details--on .project-issue-body-blur{height:0}.project-comment-title-hover .comment-action,.project-comment-body-hover .comment-action{opacity:0}.project-comment-title-hover:hover .comment-action,.project-comment-body-hover:hover .comment-action{opacity:1}.project-comment-body-reaction .timeline-comment-action{padding:4px 8px}.project-name-hover .project-name-edit-action{opacity:0}.project-name-hover:hover .project-name-edit-action{opacity:1}.project-icon path{fill:var(--color-fg-default)}.vcard-fullname{font-size:24px;line-height:1.25}.vcard-username{font-size:20px;font-style:normal;font-weight:var(--base-text-weight-light, 300);line-height:24px;color:var(--color-fg-muted)}.user-profile-bio-message{margin:4px 0 0;font-size:12px;color:var(--color-fg-default)}.user-profile-following-container .user-following-container.on .follow,.user-profile-following-container .user-following-container .unfollow{display:none}.user-profile-following-container .user-following-container .follow,.user-profile-following-container .user-following-container.on .unfollow{display:block}.user-repo-search-results-summary{white-space:normal}.pull-request-tab-content{display:none}.pull-request-tab-content.is-visible{display:block}.discussion-timeline p.explain{margin:0;font-size:12px}.pull-request-ref-restore{display:none}.pull-request-ref-restore-text{display:block}.pull-discussion-timeline.is-pull-restorable .pull-request-ref-restore.last{display:block}.files-bucket{margin-bottom:16px}.full-width .diffbar .container{padding-right:0;padding-left:0}.stale-files-tab{float:left;padding:4px 8px;margin-top:-4px;margin-bottom:-4px;color:var(--color-severe-fg);background-color:var(--color-severe-subtle);border-radius:6px}.stale-files-tab-link{font-weight:var(--base-text-weight-semibold, 600);color:inherit}.pr-toolbar{position:sticky;top:0;z-index:29;min-height:60px;padding:0 16px;margin:-16px -16px 0}.pr-toolbar .float-right .diffbar-item{margin-right:0}.pr-toolbar .float-right .diffbar-item+.diffbar-item{margin-left:16px}.pr-toolbar.is-stuck{height:60px;background-color:var(--color-canvas-default)}.commit-toolbar{top:var(--base-sticky-header-height, 0)}@media(min-width: 1150px){.commit-build-statuses .status-checks-dropdown{width:500px}}.full-commit .commit-build-statuses .status-checks-dropdown{width:500px}.files-next-bucket .file,.files-next-bucket .full-commit{margin-top:0;margin-bottom:16px}.diffbar{background-color:var(--color-canvas-default)}.diffbar .show-if-stuck{display:none}.diffbar .container{width:auto}.diffbar .table-of-contents{margin-bottom:0}.diffbar .table-of-contents ol{margin-bottom:-16px}.diffbar .table-of-contents li{border-top:1px solid var(--color-border-muted)}.diffbar .table-of-contents li:first-child{border-top:0}.diffbar [role^=menuitem]:focus:not(.is-range-selected) .text-emphasized,.diffbar [role^=menuitem]:hover:not(.is-range-selected) .text-emphasized{color:var(--color-fg-on-emphasis)}.is-stuck .diffbar .show-if-stuck{display:block}.is-stuck .diffbar .diffstat{display:none}.is-stuck .diffbar .stale-files-tab{margin-top:-8px}.diffbar-item{float:left;font-size:12px;vertical-align:middle}.add-comment-label,.is-review-pending .start-review-label{display:none}.start-review-label,.is-review-pending .add-comment-label{display:inline-block}.is-review-pending .review-simple-reply-button{display:none}.review-comment-contents{margin-left:44px}.review-comment::after,.review-comment-loader::after,.review-comment.is-comment-editing::after{position:absolute;top:31px;left:29px;z-index:-1;width:3px;height:100%;content:"";background-color:var(--color-canvas-subtle)}.review-comment{position:relative;padding:8px 16px;color:var(--color-fg-default)}.review-comment:first-child{padding-top:16px}.review-comment:last-child{padding-bottom:16px}.review-comment .comment-body,.review-comment .comment-reactions{padding:0}.review-comment .comment-body{padding-top:4px}.review-comment .comment-body .suggested-change-form-container:nth-last-of-type(2){margin-bottom:0 !important}.review-comment .comment-reactions{margin-top:4px;border-top:0 !important}.review-comment .comment-reactions.has-reactions{margin-top:12px}.review-comment .show-more-popover.dropdown-menu-sw{right:-5px;margin-top:4px}.review-comment:last-child::after,.review-comment:last-child .review-comment-contents::after{display:none}.review-comment .timeline-comment-action{padding:0 4px}.review-comment .is-comment-editing{position:relative;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px}.review-comment .is-comment-editing::after{top:100%;bottom:0;left:19px;height:20px}.review-comment .is-comment-editing .timeline-comment-actions,.review-comment .is-comment-editing .edit-comment-hide{display:none}.review-comment .is-comment-editing .previewable-comment-form{display:block}.review-comment.is-comment-loading .previewable-comment-form{opacity:.5}.pr-review-reactions .has-reactions,.pr-review-reactions .has-reactions.comment-reactions{margin-bottom:16px;margin-left:16px}.timeline-comment.is-comment-editing .discussion-item-header{display:none}.review-thread-reply{padding:8px 16px;background-color:var(--color-canvas-subtle);border-top:1px solid var(--color-border-default);border-radius:0 0 6px 6px}.review-thread-reply .inline-comment-form{margin:-8px -16px;background-color:var(--color-canvas-default);border:0}.review-thread-reply-button{display:inline-block;min-height:28px;padding:4px 8px;margin-left:8px;cursor:text}.readme.contributing>div{max-height:250px;overflow:auto}.readme .markdown-body,.readme .plain{word-wrap:break-word}.readme .plain pre{font-size:14px;white-space:pre-wrap}.file .readme table[data-table-type=yaml-metadata]{font-size:12px;line-height:1}.file .readme table[data-table-type=yaml-metadata] table{margin:0}.labels-list .blankslate{display:none}.labels-list .table-list-header{display:block}.labels-list.is-empty .blankslate{display:block}.labels-list.is-empty .table-list-header{display:none}.label-select-menu-item .g-emoji{font-size:12px;line-height:1;vertical-align:baseline}.label-edit::before{display:table;content:""}.label-edit::after{display:table;clear:both;content:""}.label-edit label{display:block;margin-bottom:8px}.label-edit .error{float:left;margin-top:8px;margin-left:8px;color:var(--color-danger-fg)}.label-edit.loading{display:block}.label-characters-remaining{color:var(--color-fg-muted)}.repo-list{position:relative}.repo-list-item{position:relative;padding-top:32px;padding-bottom:32px;list-style:none;border-bottom:1px solid var(--color-border-muted)}.repo-list-item-with-avatar{padding-left:42px}.repo-list-item-hanging-avatar{float:left;margin-left:-42px}.mini-repo-list-item{position:relative;display:block;padding:4px 64px 4px 32px;font-size:14px;border-top:1px solid var(--color-border-default)}.mini-repo-list-item:hover{text-decoration:none}.mini-repo-list-item:hover .repo,.mini-repo-list-item:hover .owner{text-decoration:underline}.mini-repo-list-item .repo-icon{float:left;margin-top:2px;margin-left:-16px;color:var(--color-fg-muted)}.mini-repo-list-item .repo-and-owner{max-width:220px}.mini-repo-list-item .owner{max-width:110px}.mini-repo-list-item .repo{font-weight:var(--base-text-weight-semibold, 600)}.mini-repo-list-item .stars{position:absolute;top:0;right:10px;margin-top:4px;font-size:12px;color:var(--color-fg-muted)}.mini-repo-list-item .repo-description{display:block;max-width:100%;font-size:12px;line-height:21px;color:var(--color-fg-muted)}.private .mini-repo-list-item{background-color:var(--color-attention-subtle)}.private .mini-repo-list-item .repo-icon{color:var(--color-attention-fg)}.form-group.errored label .commit-ref{background-color:var(--color-danger-subtle)}.repo-menu-item:not([aria-current=page])+.repo-sub-menu{display:none}.feature-callout .new-label-hidden{display:none}.feature-callout .new-feature-label.new-label-hidden{display:inline}.repository-og-image{width:100%;max-width:640px;height:320px;object-fit:cover;object-position:center;background-repeat:no-repeat;background-position:center;background-size:cover}.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.timeout{width:auto;height:300px;padding:0;margin:16px 0;background-color:transparent;border:0}.timeout h3{padding-top:100px;color:var(--color-fg-muted)}.repo-language-color{position:relative;top:1px;display:inline-block;width:12px;height:12px;border:1px solid var(--color-primer-border-contrast);border-radius:50%}.iconbutton .octicon{margin-right:0}.prereceive-feedback{padding:16px;margin-bottom:16px;border:1px solid #dfe2e5;border-left:6px solid #caa21a;border-radius:6px}.prereceive-feedback-heading{margin-top:0;margin-bottom:8px;color:var(--color-attention-fg)}.repository-item-checkbox:checked+.repository-item-name{background-color:var(--color-accent-subtle)}.custom-role-icon{background-color:var(--color-canvas-subtle)}.profile-picture{margin:8px 0 0}.profile-picture>p{float:left;margin:0;line-height:30px}.profile-picture>img{float:left;margin:0 8px 0 0;border-radius:6px}.app-owner{margin:16px 0 0}.avatar-upload .flash{width:100%;padding:32px 16px;border:dashed 1px var(--color-danger-emphasis);box-shadow:none}.avatar-upload .upload-state{display:none;padding:8px 0}.avatar-upload .upload-state p{margin:0;font-size:12px;color:var(--color-fg-muted)}.avatar-upload .avatar-upload .octicon{display:inline-block}.is-uploading .avatar-upload .loading{display:block;padding:0}.is-uploading .avatar-upload .loading img{vertical-align:top}.is-uploading .avatar-upload .button-change-avatar{display:none}.is-bad-file .avatar-upload .bad-file{display:block;margin:0}.is-too-big .avatar-upload .too-big{display:block;margin:0}.is-bad-dimensions .avatar-upload .bad-dimensions{display:block;margin:0}.is-bad-format .avatar-upload .bad-format{display:block;margin:0}.is-failed .avatar-upload .failed-request{display:block;margin:0}.is-empty .avatar-upload .file-empty{display:block;margin:0}dl.new-email-form{padding:8px 8px 0;margin:0 -8px 8px;border-top:1px solid var(--color-border-default)}.recent-user-key-access{color:#1e7e34}.oauth-app-info-container .float-left-container{float:left;text-align:left}.oauth-app-info-container .float-right-container{float:right;text-align:right}.oauth-app-info-container dl.keys{margin:8px 0}.oauth-app-info-container dl.keys dt{margin-top:8px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted)}.oauth-app-info-container dl.keys dd{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;color:var(--color-fg-default)}.oauth-app-info-container .user-count{font-size:32px;font-weight:var(--base-text-weight-light, 300);color:var(--color-fg-muted)}.access-token{border-bottom:1px solid var(--color-border-muted)}.access-token:last-child{border:0}.access-token .last-used{margin-right:8px}.access-token.new-token{background-color:rgba(108,198,68,.1)}.access-token.new-token .octicon-check{color:var(--color-success-fg)}.access-token .token-description{max-width:450px;color:var(--color-fg-default)}.access-token .token{font-size:14px}.access-token .token-type{min-width:76px}table.security-history-detail{width:100%;font-size:12px}table.security-history-detail td{max-width:200px;word-wrap:break-word}.u2f-registration{position:relative;padding-bottom:4px;margin-bottom:4px}.u2f-registration.is-sending .u2f-registration-delete{display:none}.u2f-registration.is-sending .spinner{position:relative;top:3px}.u2f-registration-icon{position:absolute;left:-24px;color:var(--color-fg-muted)}.new-u2f-registration{position:relative}.new-u2f-registration .add-u2f-registration-form:not(.for-trusted-device){display:none;margin-bottom:8px}.new-u2f-registration.is-active .add-u2f-registration-link{display:none}.new-u2f-registration.is-active .add-u2f-registration-form{display:block}.new-u2f-registration .webauthn-request-interaction,.new-u2f-registration .webauthn-request-error{display:none}.new-u2f-registration.is-sending .webauthn-request-interaction{display:block}.new-u2f-registration.is-showing-error .webauthn-request-error{display:block}.spinner{display:none}.is-sending .spinner{display:inline-block}.confirmation-phrase{font-style:italic;font-weight:var(--base-text-weight-normal, 400)}.session-device .session-state-indicator.recent{background-color:var(--color-success-emphasis);box-shadow:0 0 10px rgba(108,198,68,.5)}.session-device .session-state-indicator.revoked{background-color:var(--color-danger-emphasis);box-shadow:0 0 10px rgba(198,108,68,.5)}.session-device .session-state-indicator.not-recent{background-image:linear-gradient(#aaa, #ccc);box-shadow:0 1px 0 #fff}.collaborators .collab-list{border-bottom-width:0}.collaborators .collab-list-item:first-child .collab-list-cell{border-top-width:0}.collaborators .collab-list-cell{padding-top:16px;padding-bottom:16px;vertical-align:middle}.collaborators .collab-meta{width:140px}.collaborators .collab-remove{padding-right:16px;text-align:right}.collaborators .collab-remove .remove-link{color:var(--color-fg-muted)}.collaborators .collab-remove .remove-link:hover{color:var(--color-danger-fg)}.collaborators .collab-team-link{width:300px}.collaborators .collab-team-link:hover{text-decoration:none}.collaborators .collab-team-link .avatar{float:left;margin-top:1px;margin-right:8px}.collaborators .collab-team-link.disabled{pointer-events:none}.collaborators .collab-info{height:100%;color:var(--color-fg-default)}.collaborators .collab-info .description{padding-right:50px;margin-top:4px;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.collaborators .collab-info .collab-name{display:block;font-size:14px}.collaborators .collab-info .collab-message{position:relative;top:25%;display:block}.collaborators .copy-invite-modal{left:0;width:300px}@media(min-width: 768px){.collaborators .copy-invite-modal{right:0;left:unset;width:352px}}.collaborators .copy-invite-modal::before,.collaborators .copy-invite-modal::after{display:none}.access-form-wrapper{padding:8px;background-color:var(--color-canvas-subtle);border-top:1px solid var(--color-border-default);border-radius:0 0 6px 6px}.access-flash{padding:8px;margin-right:8px;margin-bottom:8px;margin-left:8px}.repo-access-group .blankslate{display:none}.repo-access-group.is-empty .blankslate{display:block}.boxed-group-list .access-level{color:var(--color-fg-muted)}.boxed-group-list .access-level.css-truncate-target{max-width:500px}.settings-next{font-size:14px;line-height:1.5}.settings-next label{font-size:14px}.settings-next .note{font-size:12px}.settings-next .form-checkbox input[type=radio],.settings-next .form-checkbox input[type=checkbox]{margin-top:4px}dl.form-group>dd textarea.compact{height:100px;min-height:0}.form-hr{margin-top:16px;margin-bottom:16px;border-bottom-color:var(--color-border-default, #e5e5e5)}.listgroup{list-style:none;border:1px solid var(--color-border-default, #e5e5e5);border-radius:6px}.listgroup-item{min-height:inherit;padding:8px;font-size:12px;line-height:26px;color:var(--color-fg-muted)}.listgroup-item::before{display:table;content:""}.listgroup-item::after{display:table;clear:both;content:""}.listgroup-item+.listgroup-item{border-top:1px solid var(--color-border-default, #e5e5e5)}.listgroup-item.listgroup-item-preview{line-height:inherit}.listgroup-item.listgroup-item-preview .BtnGroup{margin-top:4px}.listgroup-item .css-truncate-target{max-width:200px}.listgroup-item-title{display:block;font-weight:var(--base-text-weight-semibold, 600)}.listgroup-item-body{display:block}.listgroup-header{border-top:0;border-bottom:1px solid var(--color-border-default, #e5e5e5)}.listgroup-overflow{max-height:240px;overflow-y:auto;background-color:var(--color-canvas-subtle, #f5f5f5)}.listgroup-sm .listgroup-item{padding-top:4px;padding-bottom:4px}.protected-branches{margin-top:16px;margin-bottom:16px}.protected-branch-options{margin-left:16px;opacity:.5}.protected-branch-options.active{opacity:1}.protected-branch-reviews.on .require-code-owner-review,.protected-branch-reviews.on .reviews-dismiss-on-push,.protected-branch-reviews.on .reviews-include-dismiss,.protected-branch-reviews.on .ignore-approvals-from-contributors,.protected-branch-reviews.on .require-last-push-approval,.protected-branch-reviews.on .allow-force-pushes,.protected-branch-reviews.on .require-approving-reviews{display:block}.protected-branch-reviews .require-code-owner-review,.protected-branch-reviews .reviews-dismiss-on-push,.protected-branch-reviews .reviews-include-dismiss,.protected-branch-reviews .ignore-approvals-from-contributors,.protected-branch-reviews .require-last-push-approval,.protected-branch-reviews .allow-force-pushes,.protected-branch-reviews .require-approving-reviews{display:none}.authorized-pushers{width:440px}.authorized-pushers .add-protected-branch-actor{display:block}.authorized-pushers .actor-limit-reached{display:none;padding:8px;font-size:12px}.authorized-pushers.at-limit .add-protected-branch-actor{display:none}.authorized-pushers.at-limit .actor-limit-reached{display:block;width:440px}.protected-branch-authorized-pushers-table,.protected-branch-pushers-table{margin-top:8px}.protected-branch-authorized-pushers-table .boxed-group-inner,.protected-branch-pushers-table .boxed-group-inner{max-height:350px;overflow-y:auto}.protected-branch-authorized-pushers-table .table-list,.protected-branch-pushers-table .table-list{border-bottom:0}.protected-branch-authorized-pushers-table .table-list-cell,.protected-branch-pushers-table .table-list-cell{vertical-align:middle}.protected-branch-authorized-pushers-table .table-list-cell:first-child,.protected-branch-pushers-table .table-list-cell:first-child{width:100%}.protected-branch-authorized-pushers-table .avatar,.protected-branch-authorized-pushers-table .octicon-jersey,.protected-branch-authorized-pushers-table .octicon-organization,.protected-branch-pushers-table .avatar,.protected-branch-pushers-table .octicon-jersey,.protected-branch-pushers-table .octicon-organization{width:36px;margin-right:8px;text-align:center}.user-already-added::after{display:inline-block;padding:1px 4px;margin-left:4px;font-size:12px;line-height:1.4;color:var(--color-fg-on-emphasis);content:"Already added";background:var(--color-severe-emphasis);border-radius:6px}.protected-branch-admin-permission{padding:4px;margin:-2px 0 -2px -4px;line-height:normal;border:1px solid transparent;border-radius:6px}.protected-branch-admin-permission.active{animation:toggle-color 1s ease-in-out 0s}@keyframes toggle-color{0%{background-color:transparent}50%{color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2}100%{background-color:transparent}}.automated-check-options{margin-top:8px}.automated-check-options .listgroup-item label{font-size:inherit}.automated-check-options .listgroup-item input[type=checkbox]{float:none;margin-top:-2px;margin-right:4px;margin-left:0}.automated-check-options .label{margin-top:4px}.repository-settings-actions [role=tab][aria-selected=true]{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default);border-color:var(--color-severe-emphasis)}.repository-settings-actions [role=tab][aria-selected=true] .UnderlineNav-octicon{color:var(--color-fg-muted)}.repository-visibility-change-warning::before{display:none}.two-factor-recovery-codes{margin:32px 0;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:20px}.two-factor-recovery-code-mark{width:24px;height:24px;font-size:24px;line-height:16px;color:var(--color-fg-muted)}.two-factor-recovery-code{display:inline-block;width:48%;line-height:1.6;text-align:center}.two-factor-recovery-code::before{position:relative;top:-3px;margin-right:8px;font-size:12px;color:var(--color-fg-muted);content:"●"}.recovery-codes-saving-options{margin-left:32px}.recovery-codes-saving-options .recovery-code-save-button{width:115px;margin-right:16px;text-align:center}.recovery-codes-warning{margin:0 -16px}.two-factor-steps{padding:16px 16px 0;margin:32px 0;border:1px solid var(--color-border-default);border-radius:6px}.setup-wrapper{width:750px;padding-top:32px;margin:0 auto}.setup-wrapper::before{display:table;content:""}.setup-wrapper::after{display:table;clear:both;content:""}.setup-header{padding-bottom:16px;margin:0 auto 32px;overflow:hidden;text-align:left;border-bottom:1px solid var(--color-border-default)}.setup-header h1{margin-top:0;margin-bottom:0;font-size:48px;font-weight:var(--base-text-weight-normal, 400);line-height:1.1;letter-spacing:-1px}.setup-header h1 .octicon{color:var(--color-fg-muted)}.setup-header .lead{margin-top:2px;margin-bottom:0;font-size:20px}.setup-header .lead a{color:var(--color-fg-muted)}.setup-header .lead a:hover{color:var(--color-accent-fg);text-decoration:none}.setup-org{padding-bottom:0;border-bottom:0}.setup-main{float:left;width:450px}.setup-secondary{float:right;width:250px}.setup-secondary .info{padding-top:0;padding-bottom:0;margin-top:-8px;font-size:12px;line-height:18px;color:var(--color-fg-muted);text-align:center}.setup-info-module{margin-bottom:32px;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px;box-shadow:0 1px 3px rgba(0,0,0,.075)}.setup-info-module h2{padding:16px;margin-bottom:16px;overflow:hidden;font-size:16px;border-bottom:1px solid var(--color-border-default)}.setup-info-module h2 .price{float:right;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted)}.setup-info-module h3{padding:0 16px;margin:0 0 -8px;font-size:14px}.setup-info-module p{padding:0 16px;margin:16px 0}.features-list{padding:0 16px 16px;margin:0;font-size:14px;list-style:none}.features-list li{margin-top:8px}.features-list li:first-child{margin-top:0}.features-list .list-divider{margin:16px -16px;border-top:1px solid var(--color-border-muted)}.features-list .octicon-check{margin-right:4px;color:var(--color-success-fg)}.features-list .octicon-question{font-size:12px;color:var(--color-fg-muted)}.features-list .tooltipped::after{width:250px;white-space:normal}.setup-form-container .setup-form-title{font-size:16px}.setup-form-container .secure{float:right;margin-top:2px;font-size:12px;color:var(--color-success-fg);text-transform:uppercase}.setup-form-container hr{margin-top:24px;margin-bottom:24px}.setup-form-container .form-actions{padding-top:0;padding-bottom:0;text-align:left}.team-member-container{margin-bottom:16px}.team-member-container .team-member-username{line-height:1.2}.setup-form{padding-bottom:16px}.setup-form .form-group.successed .error{display:none}.setup-form .form-group dd .form-control{width:100%}.setup-form .form-group dd .form-control.short{width:250px}.setup-form dd{position:relative}.setup-form dd .octicon{position:absolute;top:8px;right:25px}.setup-form .octicon-alert{color:var(--color-danger-fg)}.setup-form .octicon-check{color:var(--color-success-fg)}.setup-form .tos-info,.setup-form .setup-organization-next{margin:16px 0;border-top:1px solid var(--color-border-muted);border-bottom:1px solid var(--color-border-muted)}.setup-form .tos-info{padding:16px 0}.setup-form .setup-organization-next{padding-top:16px;padding-bottom:16px}.setup-form .setup-plans{border-collapse:separate;border:1px solid var(--color-border-default)}.setup-form .setup-plans tr.selected{background-color:var(--color-accent-subtle)}.setup-form .setup-plans .name{font-weight:var(--base-text-weight-semibold, 600)}.setup-form .setup-plans .choose-plan input[type=radio]{display:none}.setup-creditcard-form .country-form,.setup-creditcard-form .state-form{float:left;margin:0;word-wrap:normal}.setup-creditcard-form .country-form,.setup-creditcard-form .postal-code-form{margin-top:0;margin-bottom:16px}.setup-creditcard-form .form-group select.select-country{width:182px;margin-right:4px}.setup-creditcard-form .form-group select:invalid{color:var(--color-fg-muted)}.setup-creditcard-form .form-group select.select-state{width:113px}.setup-creditcard-form .form-group .input-vat{width:288px}.setup-creditcard-form .form-group input.input-postal-code{width:180px}.setup-creditcard-form.is-vat-country .vat-field{display:block}.setup-creditcard-form.is-international .form-group select.select-country{width:300px}.setup-creditcard-form.is-international .state-form{display:none}.setup-creditcard-form.no-postcodes .postal-code-form{display:none}.setup-creditcard-form dd .octicon-credit-card{position:inherit}.setup-creditcard-form .vat-field{display:none}.setup-creditcard-form .vat-field.prefilled{display:block}.setup-creditcard-form .help-text{font-size:80%;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.user-identification-questions{float:none;width:auto;margin-top:40px}.user-identification-questions .question{margin-bottom:32px}.user-identification-questions .response-group label{font-weight:var(--base-text-weight-normal, 400)}.user-identification-questions .form-checkbox{margin:8px 0}.user-identification-questions .disclaimer{margin:40px 0 0;text-align:center}.user-identification-questions.redesign .question{margin-bottom:96px}.user-identification-questions.redesign .topic-input-container .tag-input{width:100%;border:0;border-bottom:6px solid #000;box-shadow:0 0 0}.signup-plan-summary-subhead{border-bottom:6px solid}.signup-btn:disabled{opacity:.5 !important}.collection-search-results em{padding:.1em;background-color:#faffa6}.draft-tag{padding:4px 8px;font-weight:var(--base-text-weight-semibold, 600);color:#eee;background-color:#404040}.showcase-page-pattern{position:relative;z-index:-1;height:100px;margin-top:-24px;margin-bottom:-70px}.showcase-page-pattern::after{position:absolute;top:0;right:0;bottom:0;left:0;display:block;content:"";background-image:linear-gradient(180deg, rgba(255, 255, 255, 0.85), white)}.showcase-page-repo-list{border-top:1px solid var(--color-border-muted)}.slash-command-menu-item .command-description{color:var(--color-fg-muted)}.slash-command-menu-item[aria-selected=true]{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.slash-command-menu-item[aria-selected=true] .command-description{color:var(--color-fg-on-emphasis)}.modal-anchor::before{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99;display:block;cursor:default;content:" ";background:var(--color-primer-canvas-backdrop)}.sortable-button-item:first-of-type .sortable-button[data-direction=up],.sortable-button-item:last-of-type .sortable-button[data-direction=down]{display:none}@keyframes sponsors-progress-animation{0%{background-position:100%}100%{background-position:0%}}@keyframes circle-progress{0%{stroke-dasharray:0 100}}.sponsors-funded-dependencies-percent-circle-bg,.sponsors-funded-dependencies-percent-circle{fill:none;stroke-width:3;stroke-linecap:round}.sponsors-funded-dependencies-percent-circle-bg{stroke:var(--color-done-subtle)}.sponsors-funded-dependencies-percent-circle{animation:circle-progress 1s ease-out forwards}.sponsors-goal-progress-bar{background:#ec6cb9;transition:width .5s ease-in}@media(prefers-reduced-motion: no-preference){.sponsors-goal-progress-bar:hover{background:linear-gradient(90deg, #ffd33d 0%, #ea4aaa 17%, #b34bff 34%, #01feff 51%, #ffd33d 68%, #ea4aaa 85%, #b34bff 100%);background-size:300% 100%;animation:sponsors-progress-animation 2s linear infinite}}.sponsors-goal-completed-bar{background:linear-gradient(90deg, #ffd33d 0%, #ea4aaa 17%, #b34bff 34%, #01feff 51%, #ffd33d 68%, #ea4aaa 85%, #b34bff 100%);background-size:300% 100%}@media(prefers-reduced-motion: no-preference){.sponsors-goal-completed-bar{transition:width .5s ease-in;animation:sponsors-progress-animation 2s linear infinite}}.sponsors-goals-avatar-border{background-color:var(--color-canvas-default);border:1px solid var(--color-fg-on-emphasis)}.bulk-sponsorship-secondary-cell{width:1%}.sponsors-goals-heart-anim{width:100px;height:100px;cursor:pointer;background:url("/images/modules/site/sponsors/heart-explosion.png") no-repeat;background-position:0 0;background-size:600px 100px;transition:background-position .3s steps(5);transition-duration:0s}.sponsors-goals-heart-anim.is-active{background-position:-500px 0;transition-duration:.3s}.open>.sponsors-foldable{max-height:700px}.open .sponsors-foldable-opened{display:block}.open .sponsors-foldable-closed{display:none}.sponsors-foldable{max-height:0;box-sizing:border-box;overflow-y:auto;transition:max-height .25s ease-in-out}.sponsors-foldable-opened{display:none}.sponsors-foldable-closed{display:block}.sponsor-card{width:100%;height:450px;border:0}@media(min-width: 544px){.sponsor-card{height:260px}}.sponsor-cell{padding:8px;vertical-align:middle;border-right:1px solid var(--color-neutral-muted);border-bottom:1px solid var(--color-neutral-muted)}.sponsor-cell:first-child{width:45px;padding-left:32px;border-right-width:0}.sponsor-cell:last-child{padding-left:8px;border-right-width:0}.sponsor-header-cell{padding-right:16px;font-weight:var(--base-text-weight-semibold, 600);text-align:left;border-top:1px solid var(--color-neutral-muted)}.sponsor-row-number{color:var(--color-fg-subtle)}@media(prefers-reduced-motion: no-preference){.tier-category:hover .tier-emoji{animation:wiggle .1s alternate;animation-timing-function:ease;animation-delay:.1s;animation-iteration-count:4}}@keyframes wiggle{0%{transform:rotate(-25deg)}100%{transform:rotate(15deg) scale(1.2)}}.sponsors-featured-item{width:100%}@media(min-width: 768px){.sponsors-featured-item{width:calc(50% - 8px)}}.bulk-sponsorship-import-dropzone .bulk-sponsorship-import-outline{top:8px;right:8px;bottom:8px;left:8px}.bulk-sponsorship-import-dropzone .bulk-sponsorship-show-on-dragover{display:none}.bulk-sponsorship-import-dropzone.bulk-sponsor-dragover .bulk-sponsorship-show-on-dragover{display:inline}.bulk-sponsorship-import-dropzone.bulk-sponsor-dragover .bulk-sponsorship-hide-on-dragover{display:none}.bulk-sponsorship-import-dropzone.bulk-sponsor-dragover .bulk-sponsorship-drag-n-drop-instructions{visibility:hidden}.bulk-sponsorship-import-dropzone.bulk-sponsor-dragover .bulk-sponsorship-import-outline{border:6px dashed var(--color-border-default)}.bulk-sponsorship-import-csv{z-index:-1;width:1px;height:1px;opacity:0}.bulk-sponsorship-import-csv:focus+label{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.bulk-sponsorship-table{display:block;width:100%;min-height:.01%;overflow-x:auto}@media(min-width: 768px){.bulk-sponsorship-table{display:table}}@media(max-width: 768px){.bulk-sponsorship-amount-cell-non-correctble-error{padding-right:24px}}@media(min-width: 768px){.bulk-sponsorship-amount-cell-non-correctble-error{padding-right:8px}}@media(min-width: 0){.bulk-sponsorship-amount-column-header{min-width:150px}}@media(min-width: 768px){.bulk-sponsorship-amount-column-header{min-width:200px}}.tab-size[data-tab-size="1"]{tab-size:1}.tab-size[data-tab-size="2"]{tab-size:2}.tab-size[data-tab-size="3"]{tab-size:3}.tab-size[data-tab-size="4"]{tab-size:4}.tab-size[data-tab-size="5"]{tab-size:5}.tab-size[data-tab-size="6"]{tab-size:6}.tab-size[data-tab-size="7"]{tab-size:7}.tab-size[data-tab-size="8"]{tab-size:8}.tab-size[data-tab-size="9"]{tab-size:9}.tab-size[data-tab-size="10"]{tab-size:10}.tab-size[data-tab-size="11"]{tab-size:11}.tab-size[data-tab-size="12"]{tab-size:12}.team-label-ldap{display:inline-block;padding:0 8px;line-height:25px;color:var(--color-fg-muted);text-transform:uppercase;cursor:default;border:1px solid var(--color-border-muted);border-radius:6px;box-shadow:none}.team-label-ldap.header-label-ldap{padding:4px 4px}.team-member-ellipsis{width:25px;height:25px;line-height:24px}.team-member-ellipsis:hover{color:var(--color-accent-fg);background:var(--color-canvas-subtle)}.team-listing .nested-teams-checkbox{padding-left:4px}.team-listing .nested-teams-checkbox.show{padding-right:12px}.team-listing .nested-teams-checkbox.indent-1{padding-left:30px}.team-listing .nested-teams-checkbox.indent-2{padding-left:54px}.team-listing .nested-teams-checkbox.indent-3{padding-left:78px}.team-listing .nested-teams-checkbox.indent-4{padding-left:102px}.team-listing .nested-teams-checkbox.indent-5{padding-left:126px}.team-listing .nested-teams-checkbox.indent-6{padding-left:150px}.team-listing .nested-teams-checkbox.indent-7{padding-left:174px}.team-listing .nested-teams-checkbox.indent-8{padding-left:198px}.team-listing .nested-teams-checkbox.indent-9{padding-left:222px}.team-listing .nested-teams-checkbox.indent-10{padding-left:246px}.team-listing .nested-teams-checkbox.indent-11{padding-left:270px}.team-listing .nested-teams-checkbox.indent-12{padding-left:294px}.team-listing .nested-teams-checkbox.indent-13{padding-left:318px}.team-listing .nested-teams-checkbox.indent-14{padding-left:342px}.team-listing .nested-teams-checkbox.indent-15{padding-left:366px}.team-listing .team-info{width:280px}.team-listing .team-short-info{width:170px}.team-listing .nested-team-info{width:650px}.team-listing .nested-team-name{max-width:268px}.team-listing .shortened-teams-avatars{margin-left:auto}.team-listing .shortened-teams-avatars.width-0{width:300px}.team-listing .shortened-teams-avatars.width-1{width:233px}.team-listing .shortened-teams-avatars.width-2{width:167px}.team-listing .shortened-teams-avatars.width-3{width:99px}.team-listing .team-members-count{width:124px}.team-listing .team-show-more-cell{width:980px}.team-listing .team-buttons{width:150px}.team-listing .octicon-wrapper{width:16px}.team-listing .is-open.root-team{background-color:var(--color-canvas-subtle)}.team-listing .is-open .expand-nested-team{font-weight:var(--base-text-weight-semibold, 600)}.team-listing .is-open .octicon-chevron-down{transform:rotate(180deg)}.traffic-graph{min-height:150px}.traffic-graph .activity{margin-top:0}.traffic-graph .activity .dots{margin-top:40px}.traffic-graph .path{fill:none;stroke-width:2}.traffic-graph path.total{stroke:var(--color-success-emphasis)}.traffic-graph path.unique{stroke:var(--color-accent-emphasis)}.traffic-graph .axis.x .tick:first-of-type line{stroke:var(--color-success-emphasis);stroke-width:2px}.traffic-graph .y line{stroke:var(--color-success-emphasis)}.traffic-graph .y.unique line{stroke:var(--color-accent-emphasis)}.traffic-graph .overlay{fill-opacity:0}.uniques-graph .axis.x .tick:last-child line{stroke:var(--color-accent-emphasis);stroke-width:2px}.svg-tip .date{color:var(--color-fg-on-emphasis)}.top-domains .dots{display:block;margin:167px auto 0}table.capped-list{width:100%;line-height:100%}table.capped-list th{padding:8px;text-align:left;background:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-default)}table.capped-list td{padding:8px;font-size:12px;vertical-align:middle;border-bottom:1px solid var(--color-border-muted)}table.capped-list th.middle,table.capped-list td.middle{text-align:center}table.capped-list .favicon{width:16px;height:16px;margin:0 4px;vertical-align:middle}table.capped-list .octicon{margin-right:8px;color:var(--color-fg-muted);vertical-align:-3px}table.capped-list tr:nth-child(even){background-color:var(--color-canvas-subtle)}.capped-list-label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.traffic-graph-stats .summary-stats{width:100%}.traffic-graph-stats .summary-stats::before{display:table;content:""}.traffic-graph-stats .summary-stats::after{display:table;clear:both;content:""}.traffic-graph-stats .summary-stats li{display:block;float:left;width:50%}.totals circle{fill:var(--color-success-emphasis);stroke:var(--color-canvas-default);stroke-width:2}.uniques circle{fill:var(--color-accent-emphasis);stroke:var(--color-canvas-default);stroke-width:2}ul.web-views li{width:140px}ul.clones li{width:170px}.TrackingBlock .TrackingBlock-list{padding-left:0}.TrackingBlock .Label{border-color:inherit !important}.TrackingBlock-list:not(.js-tasklist-dragging) .TrackingBlock-item:hover{background-color:var(--color-canvas-subtle)}.TrackingBlock-item .AvatarStack-body{background:inherit}.TrackingBlock-item .js-label-loading-container .Skeleton{display:inline-block;width:30px;height:18px;border-radius:2em}.TrackingBlock-item .hide-labels{position:absolute;opacity:0}.TrackingBlock-item .js-hidden-label-counter{display:inline-block;padding:0 7px;font-size:12px;font-weight:var(--base-text-weight-medium, 500);line-height:18px;white-space:nowrap;border:1px solid transparent;border-radius:2em}.TrackingBlock-item .js-item-title{max-width:100%}.TrackingBlock-item .truncate-for-assignees{max-width:90%}.TrackingBlock-item .truncate-for-labels{max-width:70%}.tasklist-checkbox{display:flex;align-items:flex-start;padding-top:10px;margin-left:.1em}.tasklist-flex-grow{flex-grow:1}.tasklist-draft{margin-top:-4px;margin-bottom:-4px}.tasklist-textarea-container,.tasklist-draft-title-container{display:flex;align-items:center;flex-grow:1;padding:4px 0}.tasklist-textarea-container>textarea{width:100%;max-height:none !important;padding:0 4px;margin-left:-4px;overflow:hidden;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-default);vertical-align:middle;resize:none;background-color:inherit;border:0;box-shadow:none}.tasklist-issue-handle{display:block;flex-shrink:0;float:left;margin-right:-8px;margin-left:-16px;color:var(--color-fg-muted);opacity:0}.tasklist-issue-handle.draft-handle{display:flex;align-items:flex-start;padding-top:4px}.dragger-icon{width:16px;padding-right:-8px;vertical-align:text-top}.TrackingBlock-list:not(.js-tasklist-dragging) .tasklist-issue-handle:hover{opacity:1}.tasklist-issue-ghost-item{opacity:0}.tasklist-omnibar{display:flex;width:100%;margin-left:4px;flex-direction:row}.tasklist-omnibar-autocomplete-wrapper{width:100%;flex:1;margin-right:8px}.tasklist-omnibar-input-wrapper:not([open]) .Overlay{box-shadow:none}.tasklist-omnibar-input-wrapper .FormControl-input{display:inline-block;border-radius:6px}.tasklist-omnibar-input-wrapper .FormControl-input:focus{border-radius:6px}.tasklist-omnibar-autocomplete-wrapper .ActionList{padding:8px;margin:0}.ActionList-item-label .octicon{margin-right:4px}.TrackingBlock-item:hover .dropdown-details-button{z-index:20;width:auto;height:auto;overflow:visible;clip:auto;visibility:visible !important}.TrackingBlock-item:hover .dropdown-details-button svg{overflow:visible}.tracking-block [data-disabled] .tasklist-omnibar{background-color:var(--color-canvas-subtle)}.tracking-block [data-disabled] .tasklist-omnibar:hover{outline:none !important}.autocomplete-suggestion{display:inline-block}.truncated-autocomplete-suggestion-title{display:inline-block;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.autocomplete-suggestion-issue-number{margin-left:3px;color:var(--color-fg-muted)}.typeahead-result{position:relative;display:block;min-width:100%;padding:8px;margin-top:0;color:var(--color-fg-default);cursor:pointer}.typeahead-result::before{display:table;content:""}.typeahead-result::after{display:table;clear:both;content:""}.typeahead-result:first-child{border-top:0}.typeahead-result:focus,.typeahead-result:hover,.typeahead-result[aria-selected=true],.typeahead-result.navigation-focus{text-decoration:none}.typeahead-result[aria-selected=true],.typeahead-result:hover,.typeahead-result.navigation-focus{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.typeahead-result[aria-selected=true] .octicon-plus,.typeahead-result:hover .octicon-plus,.typeahead-result.navigation-focus .octicon-plus{color:var(--color-fg-on-emphasis)}.typeahead-result.disabled{pointer-events:none;opacity:.5}.member-suggestion{padding-left:44px}.member-suggestion .avatar{float:left;margin-right:8px;margin-left:-32px}.member-suggestion .member-suggestion-info{width:90%;margin-top:2px;margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.member-suggestion .member-name{font-size:12px;color:var(--color-fg-muted)}.member-suggestion .member-email{margin-top:0;margin-bottom:0}.member-suggestion .octicon-plus,.member-suggestion .octicon-check{position:absolute;top:50%;right:15px;margin-top:-8px;color:var(--color-fg-muted)}.member-suggestion .already-member-note,.member-suggestion .non-member-note,.member-suggestion .non-member-action{margin-top:0;margin-bottom:0;color:var(--color-fg-muted)}.member-suggestion .non-member-action{display:none}.member-suggestion[aria-selected=true] .member-name,.member-suggestion[aria-selected=true] .non-member-note,.member-suggestion[aria-selected=true] .already-member-note,.member-suggestion[aria-selected=true] .non-member-action,.member-suggestion[aria-selected=true] .member-email,.member-suggestion:hover .member-name,.member-suggestion:hover .non-member-note,.member-suggestion:hover .already-member-note,.member-suggestion:hover .non-member-action,.member-suggestion:hover .member-email,.member-suggestion.navigation-focus .member-name,.member-suggestion.navigation-focus .non-member-note,.member-suggestion.navigation-focus .already-member-note,.member-suggestion.navigation-focus .non-member-action,.member-suggestion.navigation-focus .member-email{color:var(--color-fg-on-emphasis)}.member-suggestion[aria-selected=true] .non-member-note,.member-suggestion:hover .non-member-note,.member-suggestion.navigation-focus .non-member-note{display:none}.member-suggestion[aria-selected=true] .non-member-action,.member-suggestion:hover .non-member-action,.member-suggestion.navigation-focus .non-member-action{display:block}.member-suggestion[aria-selected=true] .octicon,.member-suggestion:hover .octicon,.member-suggestion.navigation-focus .octicon{color:var(--color-fg-on-emphasis)}.member-suggestion.not-a-member .member-info,.member-suggestion.disabled .member-info{margin-top:-2px}.non-member-result{padding-left:32px}.email-suggestion{padding-left:32px}.email-suggestion .octicon-mail{margin-left:-16px;color:var(--color-fg-muted)}.email-suggestion .member-suggestion-info{margin-top:1px}.repo-access-add-team .team-name{font-size:14px}.repo-access-add-team .team-description{display:block}.repo-access-add-team .team-size,.repo-access-add-team .team-description{font-size:12px;color:var(--color-fg-muted)}.repo-access-add-team[aria-selected=true] .team-size,.repo-access-add-team[aria-selected=true] .team-description,.repo-access-add-team.navigation-focus .team-size,.repo-access-add-team.navigation-focus .team-description{color:var(--color-fg-on-emphasis)}#user-content-toc{overflow:visible}#user-content-toc tr{border-top:0}#user-content-toc td{padding:0 16px;background-color:var(--color-canvas-subtle);border:0;border-radius:6px}#user-content-toc ul{padding-left:0;font-weight:var(--base-text-weight-semibold, 600);list-style:none}#user-content-toc ul li{padding-left:.2em}#user-content-toc ul ul{font-weight:var(--base-text-weight-normal, 400)}#user-content-toc ul ul li::before{float:left;margin-top:-0.2em;margin-right:.2em;font-size:1.2em;line-height:1;color:var(--color-fg-muted);content:"⌞"}#user-content-toc ul ul ul{padding-left:.9em}#user-content-toctitle h2{margin-top:1em;margin-bottom:.5em;font-size:1.25em;border-bottom:0}.user-list-info{min-height:48px;padding:0;font-size:16px;font-weight:var(--base-text-weight-normal, 400);line-height:20px}.WorkflowJob-deployment-progress .Progress{background:none}.WorkflowJob-deployment-progress .WorkflowJob-deployment-progress-complete{background-color:var(--color-workflow-card-progress-complete-bg) !important}.WorkflowJob-deployment-progress .WorkflowJob-deployment-progress-incomplete{background-color:var(--color-workflow-card-progress-incomplete-bg) !important}.WorkflowJob{padding:12px;transition:opacity ease-out .12s}.WorkflowJob-title{height:20px;line-height:20px}.WorkflowJob-title::after{position:absolute;top:0;right:0;bottom:0;left:0;content:""}.MatrixComponent-pending{padding:12px;transition:opacity ease-out .12s}.MatrixComponent-collapse--title{line-height:20px}.actions-workflow-table.sticky th{position:sticky;top:0;z-index:1;background-color:var(--color-primer-canvas-sticky)}.actions-workflow-table th{height:auto;line-height:44px;text-align:left}.actions-workflow-table td{height:64px;padding-top:12px;padding-bottom:12px;line-height:20px}.actions-workflow-table td.compact{height:48px}.actions-workflow-table th:first-child,.actions-workflow-table td:first-child{padding-left:16px}@media(min-width: 768px){.actions-workflow-table th:first-child,.actions-workflow-table td:first-child{padding-left:20px}}.actions-workflow-table th:last-child,.actions-workflow-table td:last-child{padding-right:20px}@media(max-width: 768px){.actions-fullwidth-module{position:relative;margin-right:-16px !important;margin-left:-16px !important;border-right:0 !important;border-left:0 !important}.actions-fullwidth-module.actions-fullwidth-module{border-radius:0 !important}.actions-fullwidth-module::after{position:absolute;right:0;bottom:-17px;left:0;z-index:0;height:16px;content:"";background-color:var(--color-canvas-subtle)}}.annotation--contracted div:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.annotation--expanded div:first-child{word-break:break-word;white-space:pre-wrap}.enterprise-settings .field-with-errors{min-width:0;padding:0} + +/*# sourceMappingURL=github-0da8be67b2bb.css.map*/ \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/EF3F0386398648DEEAA029A1888337F8435C2DF0 b/home/.surf/cache/WebKitCache/Version 16/Blobs/EF3F0386398648DEEAA029A1888337F8435C2DF0 new file mode 100644 index 0000000..17006dd Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/EF3F0386398648DEEAA029A1888337F8435C2DF0 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/EFA90290CEC7217E96F17375AF7684CA89127818 b/home/.surf/cache/WebKitCache/Version 16/Blobs/EFA90290CEC7217E96F17375AF7684CA89127818 new file mode 100644 index 0000000..7c8a677 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/EFA90290CEC7217E96F17375AF7684CA89127818 @@ -0,0 +1,3 @@ +.before-after-toggle{width:60px;height:32px}.before-after-toggle-checkbox{-webkit-appearance:none;appearance:none;cursor:pointer;background-color:#24292f;border-radius:32px}.before-after-toggle-knob{bottom:5px;left:5px;width:22px;height:22px;background-color:#fff;border-radius:50%;transition:.4s transform cubic-bezier(0.16, 1, 0.3, 1)}.before-after-toggle-checkbox:checked+.before-after-toggle-knob{transform:translateX(28px)}.before-after-slider{width:10%;background:linear-gradient(90deg, transparent 80%, rgba(179, 146, 240, 0.3) 100%),linear-gradient(90deg, transparent 0%, rgba(9, 105, 218, 0.3) 100%);border-width:2px !important;opacity:0;transition:transform 1s ease,opacity 1s ease;transform:scaleX(-1)}[data-toggled] .before-after-slider{transform:translateX(900%)}[data-animating] .before-after-slider{opacity:1}.after-element{transition:-webkit-mask-size 1s ease;transition:mask-size 1s ease;transition:mask-size 1s ease, -webkit-mask-size 1s ease;-webkit-mask:linear-gradient(#000 0 0) left no-repeat;mask:linear-gradient(#000 0 0) left no-repeat;-webkit-mask-size:0% 100%;mask-size:0% 100%}[data-toggled] .after-element{-webkit-mask-size:100% 100%;mask-size:100% 100%}@media(min-width: 768px){.home-globe-container{height:auto}}.home-globe-container-video,.home-globe-container-webgl{position:relative;left:-100vw;width:300vw;height:150vw;max-height:900px;margin-left:-0.9rem}@media(min-width: 768px){.home-globe-container-video,.home-globe-container-webgl{margin-left:-2rem}}@media(min-width: 1012px){.home-globe-container-video,.home-globe-container-webgl{left:0;width:900px;height:900px;margin-left:-150px}}.home-hero-container{min-height:750px;max-height:926px;background-color:#040d21}@media(min-width: 544px){.home-hero-container{min-height:850px}}@media(min-width: 768px){.home-hero-container{height:94vh;min-height:860px}}.home-hero{padding:8rem 0 0}@media(min-width: 768px){.home-hero{padding:8rem 0}}.home-astro-mona{left:50%;max-width:480px;transform:translateX(-50%)}.home-globe::after{position:absolute;top:0;right:-2rem;bottom:0;left:-2rem;display:block;pointer-events:none;content:"";background:linear-gradient(to bottom, rgba(4, 13, 33, 0) 0%, #040d21 60%);opacity:.3}@media(min-width: 768px){.home-globe::after{background:linear-gradient(to bottom, rgba(4, 13, 33, 0) 0%, #040d21 40%)}}@media(min-width: 1012px){.home-globe::after{display:none}}.home-hero-glow{top:50%;left:50%;width:200%;transform:translate(-50%, -50%)}.home-git-log-light,.home-git-log-subtle,.home-git-log-dark{position:relative}.home-git-log-light::after,.home-git-log-subtle::after,.home-git-log-dark::after{position:absolute;top:0;bottom:0;left:-4px;display:block;width:2px;content:"";background:#dadfe9}@media(min-width: 544px){.home-git-log-light::after,.home-git-log-subtle::after,.home-git-log-dark::after{left:-24px}}.home-git-log-center{position:relative}.home-git-log-center::after{position:absolute;top:0;bottom:0;left:calc(50% - 2px);z-index:-1;display:none;width:2px;content:"";background:#dadfe9}@media(min-width: 1012px){.home-git-log-center::after{display:block}}.bg-home-dark{background-color:#040d21}.home-git-log-dark::after,.home-git-log-dark-icons::after{background:#42526d}.home-git-log-dark .home-git-icon,.home-git-log-dark-icons .home-git-icon{background:#040d21}.home-git-log-dark .home-git-icon>path,.home-git-log-dark-icons .home-git-icon>path{fill:#42526d}.home-git-log-dark .home-git-icon>circle,.home-git-log-dark-icons .home-git-icon>circle{fill:#040d21;stroke:#42526d}.home-git-log-dark .home-branch>path,.home-git-log-dark-icons .home-branch>path{stroke:#42526d}.home-git-log-light .home-git-icon{background:var(--color-canvas-default)}.home-git-log-light .home-git-icon>rect{fill:#fff}.home-git-log-light .home-git-icon>path{fill:#dadfe9}.home-git-log-light .home-git-icon>circle{fill:#fff;stroke:#dadfe9}.home-git-log-light .home-branch>path{stroke:#dadfe9}.home-git-log-subtle .home-git-icon{background:var(--color-canvas-subtle)}.home-git-log-subtle .home-git-icon>rect{fill:var(--color-canvas-subtle)}.home-git-log-subtle .home-git-icon>path{fill:var(--color-border-default)}.home-git-log-subtle .home-git-icon>circle{fill:var(--color-canvas-subtle);stroke:var(--color-border-default)}.home-git-log-subtle .home-branch>path{stroke:var(--color-border-default)}.home-branch{left:calc(8.33333% - 1.5rem);width:calc(8.33333% + .125rem);height:8.875rem}.home-branch-container{margin-left:calc(8.33333% - 14px)}@media(min-width: 544px){.home-branch-container{margin-left:calc(8.33333% - 33px)}}@media(min-width: 768px){.home-branch-container{margin-left:0}}.home-git-item{margin-left:-41px}@media(min-width: 544px){.home-git-item{margin-left:-61px}}.home-git-timeline-item{margin-left:-28px}@media(min-width: 544px){.home-git-timeline-item{margin-left:-48px}}.home-git-log-terminal{margin-left:0}@media(min-width: 768px){.home-git-log-terminal{margin-left:-35px}}.home-repo-comp::after{position:absolute;top:0;bottom:0;left:calc(8.33333% - 24px);display:block;width:2px;content:"";background:#42526d}@media(min-width: 544px){.home-repo-comp::after{left:calc(8.33333% - 44px)}}.home-repo-editor{min-height:330px;padding-top:68.108974359%;font-size:.8125rem;background-color:#0c162d;box-shadow:0 0 0 1px rgba(255,255,255,.1),0 34px 65px #040d21,0 2.75px 2.21px rgba(0,0,0,.07),0 6.65px 5.32px rgba(0,0,0,.043),0 12.5px 10px rgba(0,0,0,.03),0 22px 18px rgba(0,0,0,.03),0 42px 33.4px rgba(0,0,0,.02),0 100px 80px rgba(0,0,0,.017)}@media(min-width: 544px){.home-repo-editor{min-height:0}}@media(min-width: 768px){.home-repo-editor{padding-top:59.2948717949%}}.home-repo-editor.build-in-animate{animation:.7s ease home-repo-editor-fly-up forwards 4s}@media(min-width: 768px){.home-repo-editor.build-in-animate{animation:.7s ease home-repo-editor-fly-up-md forwards 4s}}@media(min-width: 1012px){.home-repo-editor.build-in-animate{animation:.7s ease home-repo-editor-fly-up-lg forwards 4s}}.home-repo-editor-filetree{background-color:#0c162d;border-right:1px solid #040d21}.home-repo-editor-tabs,.home-repo-editor-filetree{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";color:#b5bfd2}.home-repo-editor-tab,.home-repo-editor-tab--active{padding:.75rem 1rem;border-right:1px solid #040d21}.home-repo-editor-file{background-color:#19253c}.home-repo-editor-terminal{min-height:70%;background-color:#0c162d;border-top:1px solid #040d21}@media(min-width: 768px){.home-repo-editor-terminal{min-height:17.8125rem}}.home-pre{font-size:.8125rem;line-height:1.8}.home-repo-comp-browser{visibility:hidden}.home-repo-comp-browser.build-in-animate{visibility:visible;animation:.7s ease home-repo-browser-fly-in both 4s}.home-repo-editor-ui.build-in-animate{animation:.4s ease home-repo-editor-img forwards 4s}@keyframes home-repo-editor-img{0%{opacity:1}100%{opacity:.4}}@keyframes home-repo-editor-fly-up{to{min-height:0;transform:translateY(-17px) scale(0.95, 0.95, 1)}}@keyframes home-repo-editor-fly-up-md{to{transform:translateY(-34px) scale(0.95, 0.95, 1)}}@keyframes home-repo-editor-fly-up-lg{to{transform:translateY(-50px) scale(0.95, 0.95, 1)}}@keyframes home-repo-browser-fly-in{0%{opacity:0;transform:scale3d(1.05, 1.05, 1) translateY(4%)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(0)}}.package-registry{box-shadow:0 0 0 1px rgba(255,255,255,.1),0 34px 65px #040d21,0 2.75px 2.21px rgba(0,0,0,.07),0 6.65px 5.32px rgba(0,0,0,.043),0 12.5px 10px rgba(0,0,0,.03),0 22px 18px rgba(0,0,0,.03),0 42px 33.4px rgba(0,0,0,.02),0 100px 80px rgba(0,0,0,.017)}.home-pr-description,.home-pr-comment,.home-pr-merge{max-width:490px;font-size:0;background-color:var(--color-canvas-default);box-shadow:0 0 0 1px rgba(53,72,91,.05);transition:transform .6s cubic-bezier(0.16, 1, 0.3, 1);transform:translateX(35%)}.home-pr-description img,.home-pr-comment img,.home-pr-merge img{opacity:.25;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1)}.home-pr-description.build-in-animate,.home-pr-comment.build-in-animate,.home-pr-merge.build-in-animate{box-shadow:0 0 0 1px rgba(53,72,91,.14),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09);opacity:1;transform:translateX(0)}.home-pr-description.build-in-animate img,.home-pr-comment.build-in-animate img,.home-pr-merge.build-in-animate img{opacity:1}.home-mobile-iphone{max-width:280px;min-height:568px;font-size:0;background-color:#040d21;border:1rem solid #040d21;border-radius:2.6875rem}.home-desktop-comp{max-width:490px;min-height:450px}@media(min-width: 1012px){.home-desktop-comp{min-height:569px}}.home-desktop{width:144.75%;font-size:0;border-radius:.625rem}.home-cli{bottom:2%;opacity:0;transition:transform .6s,opacity .6s;transform:translate(10%, 0)}@media(min-width: 544px){.home-cli{bottom:5%}}@media(min-width: 1012px){.home-cli{bottom:10%}}.home-cli.build-in-animate{opacity:1;transform:translate(0, 0)}.home-pr-screen{width:129.5%;margin-top:-10%;opacity:.25}.home-codespaces-copy-item{margin-bottom:69vh}.home-codespaces-copy-item-1{margin-top:20vh}.home-codespaces-copy-item-3{height:78vh;margin-bottom:0}@media(min-width: 768px){.home-codespaces-copy-item-3{height:70vh}}@media(min-width: 1012px){.home-codespaces-copy-item-3{height:58vh}}@media(min-width: 768px){.home-codespaces-container{padding-top:6.5rem}}.home-codespaces-img-container{min-height:100vh;pointer-events:none}@media(min-width: 1012px){.home-codespaces-img-container{height:100vh;padding-top:18vh;padding-bottom:8vh}}.home-codespaces-view{position:relative;bottom:-60vh;width:175%}@media(min-width: 544px){.home-codespaces-view{width:130%}}@media(min-width: 768px){.home-codespaces-view{width:125%}}@media(min-width: 1012px){.home-codespaces-view{bottom:auto;width:auto;height:100%;max-height:740px}}.home-codespaces-view-2,.home-codespaces-view-3{position:absolute;opacity:0}.home-codespaces-illo{padding:18.75rem 0 61.25rem}@media(min-width: 1012px){.home-codespaces-illo{padding:18.75rem 0 71.875rem}}@media(min-width: 1012px)and (max-height: 900px){.home-codespaces-illo{padding:18.75rem 0 78.125rem}}.home-codespaces-copy-item-2.build-in-animate~.home-codespaces-illo .home-codespaces-view-1{position:absolute;opacity:0}.home-codespaces-copy-item-2.build-in-animate~.home-codespaces-illo .home-codespaces-view-2{position:relative;opacity:1}.home-codespaces-copy-item-3.build-in-animate~.home-codespaces-illo .home-codespaces-view-1{position:absolute;opacity:0}.home-codespaces-copy-item-3.build-in-animate~.home-codespaces-illo .home-codespaces-view-3{position:relative;opacity:1}.home-codespaces-glow-container{right:0;left:-70%}.home-codespaces-glow{bottom:0;transform:translateY(50%)}@media(min-width: 1012px){.home-codespaces-glow{top:50%;bottom:auto;left:0;width:120%;height:100vh;transform:translateY(-50%)}}.home-workflow-comp{max-width:706px;font-size:0;opacity:0}.home-workflow-comp.build-in-animate{animation:.6s cubic-bezier(0.535, 0.15, 0.425, 1) home-enter both}.home-workflow-comp.build-in-animate .home-workflow-sidebar{animation:.6s ease-in-out home-worflow-sidebar both}.home-workflow-comp.build-in-animate .home-workflow-actions{animation:1.2s cubic-bezier(0.535, 0.15, 0.425, 1) home-worflow-actions both}@keyframes home-worflow-sidebar{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes home-worflow-actions{0%{transform:translateY(-45%)}100%{transform:translateY(0)}}.home-matrix-comp{width:100%}@media(min-width: 1012px){.home-matrix-comp{left:50%;width:140%;transform:translateX(-50%)}}.home-matrix-comp.build-in-animate .home-matrix-build{visibility:visible;animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-matrix-build forwards}.home-matrix-comp.build-in-animate .home-matrix-test{visibility:visible;box-shadow:0 0 0 1px rgba(53,72,91,.14),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09);animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-matrix-test forwards}.home-matrix-comp.build-in-animate .home-matrix-publish{visibility:visible;animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-matrix-publish forwards}.home-matrix-comp.build-in-animate .home-matrix-string::before{opacity:1;transition:opacity 1s;transition-delay:.4s}.home-matrix-spinner-1,.home-matrix-spinner-2,.home-matrix-spinner-3{opacity:0}.build-in-animate .home-matrix-spinner-1{transform-origin:center;animation:.4s linear spin 8 none}.build-in-animate .home-matrix-spinner-2{transform-origin:center;animation:.4s linear spin 9 none}.build-in-animate .home-matrix-spinner-3{transform-origin:center;animation:.4s linear spin 10 none}.home-matrix-success-1,.home-matrix-success-2,.home-matrix-success-3{visibility:hidden}.build-in-animate .home-matrix-success-1{visibility:visible;transition-delay:3.2s}.build-in-animate .home-matrix-success-2{visibility:visible;transition-delay:3.6s}.build-in-animate .home-matrix-success-3{visibility:visible;transition-delay:4s}@keyframes show-hide{0%{visibility:hidden}100%{visibility:visible}}@keyframes home-matrix-build{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateX(3.125rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateX(0)}}@keyframes home-matrix-test{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93)}100%{opacity:1;transform:scale3d(1, 1, 1)}}@keyframes home-matrix-publish{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateX(-3.125rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateX(0)}}.home-matrix-string::before{position:absolute;top:2.3125rem;right:20%;left:20%;display:block;height:2px;content:"";background:var(--color-border-default);opacity:0}.home-matrix-tab-container{bottom:100%;left:-1px;height:21px}.home-matrix-tab{height:21px}.home-matrix-tab::before{position:absolute;top:1px;right:1px;bottom:-1px;left:1px;display:block;content:"";background:var(--color-canvas-default);border-radius:.375rem .375rem 0 0;box-shadow:0 0 0 1px rgba(53,72,91,.14) !important}.home-matrix-connector{position:absolute;top:2rem;left:-6px;width:12px;height:12px}.home-matrix-build .home-matrix-connector{top:1rem}.home-matrix-connector::before{position:relative;z-index:1;display:block;width:6px;height:6px;margin:3px;content:"";background:var(--color-neutral-muted);border-radius:50%}.home-matrix-connector--right{right:-6px;left:auto}.home-matrix-connector--right .home-matrix-connector-bg{right:0}.home-matrix-connector--right .home-matrix-connector-bg::before{right:1px}.home-matrix-connector-bg{position:absolute;top:0;width:7px;height:12px;padding:1px;overflow:hidden}.home-matrix-connector-bg::before{position:absolute;display:block;width:11px;height:10px;content:"";background:var(--color-canvas-default);border-radius:50%;box-shadow:0 0 0 1px rgba(53,72,91,.14) !important}.home-matrix-build{max-width:260px;font-size:0;visibility:hidden;opacity:0}.home-matrix-test,.home-matrix-publish{max-width:292px;font-size:0;visibility:hidden}.build-in-animate .home-actions-spinner{animation:.4s linear spin infinite}.home-actions-success{box-shadow:inset 0 0 0 0 var(--color-success-emphasis);transition:transform .4s,opacity .4s}.home-actions-success .home-actions-success-check{width:50%;opacity:0;transition:transform .4s,opacity .4s;transform:translate(50%, 87%) scale(0.9)}.build-in-animate .home-actions-success{animation:.5s ease-in-out home-actions-success 3.5s forwards}.build-in-animate .home-actions-success .home-actions-success-check{animation:.2s ease-in-out home-actions-success-check 4s forwards}@keyframes spin{0%{opacity:1;transform:rotate(0deg)}100%{opacity:1;transform:rotate(360deg)}}@keyframes home-actions-success{from{box-shadow:inset 0 0 0 0 var(--color-success-emphasis)}to{box-shadow:inset 0 0 0 170px var(--color-success-emphasis)}}@keyframes home-actions-success-check{0%{opacity:0;transform:translate(50%, 87%) scale3d(0.9, 0.9, 0.9)}90%{transform:translate(50%, 87%) scale3d(1.2, 1.2, 1.2)}100%{opacity:1;transform:translate(50%, 87%) scale3d(1, 1, 1)}}.home-dependabot-comp{max-width:706px;margin-top:-2rem;font-size:0;visibility:hidden}.home-dependabot-comp.build-in-animate{visibility:visible;animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-enter forwards}.home-dependabot-comp.build-in-animate .home-dependabot-pr{animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-dependabot-pr forwards}.home-dependabot-comp.build-in-animate .home-dependabot-merge{animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-dependabot-merge forwards}@keyframes home-dependabot-pr{0%{transform:translateY(2rem)}100%{transform:translateY(0)}}@keyframes home-dependabot-merge{0%{transform:translateY(0)}100%{transform:translateY(14%)}}.home-codeql-step-1,.home-codeql-step-2,.home-codeql-step-3{font-size:0;visibility:hidden}.home-codeql-comp{max-width:490px}.home-codeql-comp.build-in-animate .home-codeql-step-2{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-codeql-step-2 forwards}.home-codeql-comp.build-in-animate .home-codeql-step-3{visibility:visible;animation:.2s cubic-bezier(0.16, 1, 0.3, 1) home-codeql-step-3 forwards}.home-codeql-comp.build-in-animate .home-codeql-description{opacity:1;transform:translateY(0)}.build-in-animate .home-codeql-step-1{visibility:visible;box-shadow:0 0 65px rgba(237,78,80,.4),0 0 0 1px rgba(255,255,255,.1),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09);animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-codeql-step-1 forwards}.home-codeql-step-2{left:50%;width:93%;margin-left:-46.5%;transform:translateY(-2.3rem)}.home-codeql-step-3{left:50%;width:87%;margin-left:-43.5%;transform:translateY(-4.4rem)}.home-codeql-description{opacity:0;transition:transform .6s,opacity .6s;transform:translateY(-45%)}@keyframes home-codeql-step-1{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateY(-3.0625rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(0)}}@keyframes home-codeql-step-2{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateY(-4.4rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(-2.3rem)}}@keyframes home-codeql-step-3{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateY(-6.7rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(-4.4rem)}}.home-secret-comp{max-width:490px;font-size:0}.home-secret-comp.build-in-animate .home-secret-alert{visibility:visible;box-shadow:0 0 65px rgba(237,78,80,.4),0 0 0 1px rgba(255,255,255,.1),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09);animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-secret-alert forwards}.home-secret-comp.build-in-animate .home-secret-list{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-secret-list forwards}.home-secret-alert{visibility:hidden;box-shadow:0 0 65px rgba(237,78,80,.4),0 0 0 1px rgba(255,255,255,.1),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09)}.home-secret-list{visibility:hidden}.home-security-point-3::after{display:block}@media(min-width: 768px){.home-security-point-3::after{display:none}}.home-security-alert-fan{width:65.25rem;margin-left:-1.6875rem;transform:translateX(-50%)}@media(min-width: 544px){.home-security-alert-fan{margin-left:-2.9375rem}}@keyframes home-secret-alert{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateY(2rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(0)}}@keyframes home-secret-list{0%{opacity:0;transform:translateY(2rem)}100%{opacity:1;transform:translateY(0)}}@keyframes home-enter{0%{opacity:0;transform:scale3d(0.93, 0.93, 1) translateY(3rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(0)}}.home-discussions-comp{max-width:492px;margin-top:40px;opacity:0;transition:opacity .4s}@media(min-width: 1012px){.home-discussions-comp{margin-top:-30%}}.home-discussions-comp.build-in-animate{opacity:1}.home-discussions-comp.build-in-animate .home-discussions-1{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-1 forwards}.home-discussions-comp.build-in-animate .home-discussions-2{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-2 forwards}.home-discussions-comp.build-in-animate .home-discussions-2 .home-discussions-check-0{animation-delay:1.5s}.home-discussions-comp.build-in-animate .home-discussions-answer{box-shadow:0 0 0 2px #28a745;transition-delay:1.5s;transition-duration:.2s;transition-property:box-shadow}.home-discussions-1,.home-discussions-2{width:78%;max-width:382px;margin:0;font-size:0}.home-discussions-2{margin:-20% 0 0}.home-discussions-check-0,.home-discussions-check-1,.home-discussions-check-2,.home-discussions-check-3{top:3.4%;right:10.5%;opacity:0}.home-discussions-check-0{width:7.25%;border:2px solid #fff;border-radius:30px}.home-discussions-check-0.build-in-animate{animation:.2s ease-in-out home-discussions-check-0 forwards}.home-discussions-check-1.build-in-animate{animation:2s ease-in-out .7s home-discussions-check-1 infinite}.home-discussions-check-2.build-in-animate{animation:3s ease-in-out 1.2s home-discussions-check-2 infinite}.home-discussions-check-3.build-in-animate{animation:4s ease-in-out 1.7s home-discussions-check-3 infinite}.home-discussions-answer{box-shadow:0 0 0 1px rgba(53,72,91,.14)}@keyframes home-discussions-check-0{0%{opacity:0;transform:scale3d(0.9, 0.9, 0.9)}90%{transform:scale3d(1.2, 1.2, 1.2)}100%{opacity:1;transform:scale3d(1, 1, 1)}}@keyframes home-discussions-check-1{0%{opacity:0;transform:scale3d(0.5, 0.5, 0.5) translate3d(0, 0, 0) rotate(0)}45%{opacity:0}50%{opacity:.25}100%{opacity:0;transform:scale3d(1.2, 1.2, 1.2) translate3d(-25%, -160%, 0) rotate(-25deg)}}@keyframes home-discussions-check-2{0%{opacity:0;transform:scale3d(0.5, 0.5, 0.5) translate3d(0, 0, 0) rotate(0)}45%{opacity:0}50%{opacity:.25}100%{opacity:0;transform:scale3d(1.4, 1.4, 1.4) translate3d(-125%, -100%, 0) rotate(-35deg)}}@keyframes home-discussions-check-3{0%{opacity:0;transform:scale3d(0.5, 0.5, 0.5) translate3d(0, 0, 0) rotate(0)}45%{opacity:0}50%{opacity:.25}100%{opacity:0;transform:scale3d(1.1, 1.1, 1.1) translate3d(150%, -120%, 0) rotate(35deg)}}.home-readme-comp{max-width:492px;opacity:0;transition:opacity .4s}.home-readme-comp.build-in-animate{opacity:1}.home-readme-comp.build-in-animate .home-readme-1{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-1 forwards}.home-readme-comp.build-in-animate .home-readme-2{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-2 forwards}.home-readme-1,.home-readme-2{width:78%;max-width:382px;margin:0 0 -40%;font-size:0}@media(min-width: 1012px){.home-readme-1,.home-readme-2{margin:-2.5rem 0 -45%}}.home-readme-2{margin:0}@media(min-width: 1012px){.home-readme-2{margin:0 0 -2.5rem}}.home-sponsors-comp{max-width:490px;opacity:0;transition:opacity .4s}.home-sponsors-comp.build-in-animate{opacity:1}.home-sponsors-comp.build-in-animate .home-sponsors-1{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-1 forwards}.home-sponsors-comp.build-in-animate .home-sponsors-1 .home-sponsors-heart-1,.home-sponsors-comp.build-in-animate .home-sponsors-1 .home-sponsors-heart-2,.home-sponsors-comp.build-in-animate .home-sponsors-1 .home-sponsors-heart-3{bottom:10%;left:8%;opacity:0;animation-delay:.5s}.home-sponsors-comp.build-in-animate .home-sponsors-2{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-2 forwards}.home-sponsors-comp.build-in-animate .home-sponsors-2 .home-sponsors-heart-1,.home-sponsors-comp.build-in-animate .home-sponsors-2 .home-sponsors-heart-2,.home-sponsors-comp.build-in-animate .home-sponsors-2 .home-sponsors-heart-3{bottom:10%;left:0}.home-sponsors-1,.home-sponsors-2{width:78%;max-width:382px;margin-top:0;font-size:0;visibility:hidden}@media(min-width: 1012px){.home-sponsors-1,.home-sponsors-2{margin-top:-20%}}.home-sponsors-2{margin-top:-25%}.home-sponsors-heart-1.build-in-animate{animation:4s cubic-bezier(0.535, 0.15, 0.425, 1) home-sponsors-heart-1 infinite}.home-sponsors-heart-2.build-in-animate{animation:5s cubic-bezier(0.535, 0.15, 0.425, 1) -1s home-sponsors-heart-2 infinite}.home-sponsors-heart-3.build-in-animate{animation:6s cubic-bezier(0.535, 0.15, 0.425, 1) -2s home-sponsors-heart-3 infinite}@keyframes home-community-cards-1{0%{transform:translate3d(7%, 12%, 0)}100%{transform:translate3d(0, 0, 0)}}@keyframes home-community-cards-2{0%{transform:translate3d(-7%, -12%, 0)}100%{transform:translate3d(0, 0, 0)}}@keyframes home-sponsors-heart-1{0%{opacity:0;transform:scale3d(0.7, 0.7, 0.7) translate3d(0, 0, 0) rotate(0)}50%{opacity:1}100%{opacity:0;transform:scale3d(1, 1, 1) translate3d(-25%, -160%, 0) rotate(-25deg)}}@keyframes home-sponsors-heart-2{0%{opacity:0;transform:scale3d(0.5, 0.5, 0.5) translate3d(0, 0, 0) rotate(0)}50%{opacity:.75}100%{opacity:0;transform:scale3d(0.75, 0.75, 0.75) translate3d(-125%, -100%, 0) rotate(-35deg)}}@keyframes home-sponsors-heart-3{0%{opacity:0;transform:scale3d(0.35, 0.35, 0.35) translate3d(0, 0, 0) rotate(0)}50%{opacity:.5}100%{opacity:0;transform:scale3d(0.5, 0.5, 0.5) translate3d(150%, -120%, 0) rotate(35deg)}}.home-footer-illustration{left:50%;min-width:119%;max-width:1450px;margin-bottom:-28%;transform:translate(-50%, -50%)}@media(min-width: 1012px){.home-footer-illustration{min-width:calc(119% - 2rem)}}@media(min-width: 1248px){.home-footer-illustration{min-width:115.5%;margin-bottom:-33%}}.home-featured-repos{left:50%;width:1080px;transform:translateX(-50%)}@media(min-width: 1012px){.home-featured-repos{left:auto;width:1216px;transform:translateX(0)}}.home-repo-card{background-color:#0c162d;transition:background-color .4s}.home-repo-card:hover{background-color:#19253c}.rounded-pill{border-radius:500px}.password-validity-pill{display:inline-block;width:48px;height:4px;background-color:#627597}.password-validity-pill.password-validity-pill-fail{background-color:#ed4e50}.password-validity-pill.password-validity-pill-close{background-color:#ffd33d}.password-validity-pill.password-validity-pill-success{background-color:var(--color-success-emphasis)}.password-validity-summary.password-validity-summary-fail{color:#ed4e50}.password-validity-summary.password-validity-summary-close{color:#ffd33d}.password-validity-summary.password-validity-summary-success{color:var(--color-success-emphasis)}.code-editor-line-mktg{border-left:2px solid var(--color-canvas-default)}.code-editor-line-suggested-mktg{border-color:var(--color-accent-emphasis)}.code-editor-line-suggested-mktg:empty::after{content:" "}.copilot-marker{border-top-left-radius:0 !important;box-shadow:0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09)}.row-is-visible{animation:row-reveal 800ms ease-out}@keyframes row-reveal{0%,40%{opacity:0;transform:translateY(7px)}100%{opacity:1}}:root .home-copilot-editor{--color-canvas-subtle: #0c162d;--color-canvas-default: #19253c}.home-tagline-appendix{animation-name:home-tagline-in-out;animation-duration:1750ms;animation-fill-mode:both;animation-timing-function:cubic-bezier(0.48, 0.08, 0.19, 1)}.home-tagline-appendix:last-of-type{animation-name:home-tagline-in}@media screen and (prefers-reduced-motion: reduce){.home-tagline-appendix{animation:none}.home-tagline-appendix:not(:last-of-type){display:none}}@keyframes home-tagline-in{0%{opacity:0;transform:translateY(120%)}25%{opacity:1;transform:translateY(0)}}@keyframes home-tagline-in-out{0%{opacity:0;transform:translateY(120%)}25%,75%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-120%)}}@keyframes hero-circle-rotate{0%{transform:rotateZ(0)}100%{transform:rotateZ(-1turn)}}@keyframes hero-item-rotate{0%{transform:rotateZ(0)}100%{transform:rotateZ(1turn)}} + +/*# sourceMappingURL=home-991628a3b329.css.map*/ \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/F05B27ADF949432A8E383BDB15F0F13F6D94512F b/home/.surf/cache/WebKitCache/Version 16/Blobs/F05B27ADF949432A8E383BDB15F0F13F6D94512F new file mode 100644 index 0000000..90124b8 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/F05B27ADF949432A8E383BDB15F0F13F6D94512F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/F1EF0A5CA42885792C8992A4BC166614F5460449 b/home/.surf/cache/WebKitCache/Version 16/Blobs/F1EF0A5CA42885792C8992A4BC166614F5460449 new file mode 100644 index 0000000..8fe8f92 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/F1EF0A5CA42885792C8992A4BC166614F5460449 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/F21461D2338A7129E71F16CF5D493CB377A1349C b/home/.surf/cache/WebKitCache/Version 16/Blobs/F21461D2338A7129E71F16CF5D493CB377A1349C new file mode 100644 index 0000000..2a8a5e2 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/F21461D2338A7129E71F16CF5D493CB377A1349C differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/F611C9640EE31B69D295ECB230A7968D287B1CD6 b/home/.surf/cache/WebKitCache/Version 16/Blobs/F611C9640EE31B69D295ECB230A7968D287B1CD6 new file mode 100644 index 0000000..80bcc0e Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/F611C9640EE31B69D295ECB230A7968D287B1CD6 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/F613383BCDAD3BB51F6155C413019435D9239D8E b/home/.surf/cache/WebKitCache/Version 16/Blobs/F613383BCDAD3BB51F6155C413019435D9239D8E new file mode 100644 index 0000000..7a94e49 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/F613383BCDAD3BB51F6155C413019435D9239D8E differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/F63997A57E2375ED027646F08ABF154EEA69BE85 b/home/.surf/cache/WebKitCache/Version 16/Blobs/F63997A57E2375ED027646F08ABF154EEA69BE85 new file mode 100644 index 0000000..227da06 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/F63997A57E2375ED027646F08ABF154EEA69BE85 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/F6F499889B4CC92DAB1DD366E7A85D15715E0F19 b/home/.surf/cache/WebKitCache/Version 16/Blobs/F6F499889B4CC92DAB1DD366E7A85D15715E0F19 new file mode 100644 index 0000000..03e7d25 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/F6F499889B4CC92DAB1DD366E7A85D15715E0F19 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/F75897852A87466BFD5570F324B6EF04DA4FFD4A b/home/.surf/cache/WebKitCache/Version 16/Blobs/F75897852A87466BFD5570F324B6EF04DA4FFD4A new file mode 100644 index 0000000..90481a3 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/F75897852A87466BFD5570F324B6EF04DA4FFD4A @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235"],{66602(a,b,c){c.d(b,{z:()=>p});var d=c(59753),e=c(19146),f=c(98249),g=c(76932),h=c(64611),i=c(64463),j=c(65935),k=c(22971);let l=[];function m(a){a.querySelector(".js-write-tab").click();let b=a.querySelector(".js-comment-field");b.focus(),(0,d.f)(b,"change")}function n(a){return a.querySelector(".js-comment-edit-form-deferred-include-fragment")}function o(a){n(a)?.setAttribute("loading","eager")}function p(a){let b=a.currentTarget.closest("form"),c=a.currentTarget.getAttribute("data-confirm-text");if((0,h.T)(b)&&!confirm(c))return!1;for(let d of b.querySelectorAll("input, textarea")){let e=d;e.value=e.defaultValue,e.classList.contains("session-resumable-canceled")&&(e.classList.add("js-session-resumable"),e.classList.remove("session-resumable-canceled"))}let f=a.currentTarget.closest(".js-comment");return f&&f.classList.remove("is-comment-editing"),!0}function q(a){let b=a.querySelector("ol");if(b){b.textContent="";let c=l.map(a=>{let b=document.createElement("li");return b.textContent=a,b});for(let d of c)b.appendChild(d)}a.hidden=!1}function r(a,b){let c=a.querySelector(".js-comment-show-on-error");c&&(c.hidden=!b);let d=a.querySelector(".js-comment-hide-on-error");d&&(d.hidden=b)}(0,i.N7)(".js-comment-header-actions-deferred-include-fragment",{subscribe:a=>(0,g.RB)(a,"loadstart",()=>{let b=a.closest(".js-comment");o(b)},{capture:!1,once:!0})}),(0,i.N7)(".js-comment .contains-task-list",{add(a){let b=a.closest(".js-comment");o(b)}}),(0,d.on)("click",".js-comment-edit-button",function(a){let b=a.currentTarget.closest(".js-comment");b.classList.add("is-comment-editing");let c=n(b);c?c.addEventListener("include-fragment-replaced",()=>m(b),{once:!0}):m(b);let d=a.currentTarget.closest(".js-dropdown-details");d&&d.removeAttribute("open")}),(0,d.on)("click",".js-comment-hide-button",function(a){let b=a.currentTarget.closest(".js-comment");r(b,!1);let c=b.querySelector(".js-minimize-comment");c&&c.classList.remove("d-none");let d=a.currentTarget.closest(".js-dropdown-details");d&&d.removeAttribute("open")}),(0,d.on)("click",".js-comment-hide-minimize-form",function(a){let b=a.currentTarget.closest(".js-minimize-comment");b.classList.add("d-none")}),(0,d.on)("click",".js-comment-cancel-button",p),(0,d.on)("click",".js-cancel-issue-edit",function(a){let b=a.currentTarget.closest(".js-details-container");b.querySelector(".js-comment-form-error").hidden=!0}),(0,j.AC)(".js-comment-delete, .js-comment .js-comment-update, .js-issue-update, .js-comment-minimize, .js-comment-unminimize",function(a,b,c){let d=a.closest(".js-comment");d.classList.add("is-comment-loading");let e=d.getAttribute("data-body-version");e&&c.headers.set("X-Body-Version",e)}),(0,j.AC)(".js-comment .js-comment-update",async function(a,b){let c,d=a.closest(".js-comment"),e=d.querySelector(".js-comment-update-error"),g=d.querySelector(".js-comment-body-error");e instanceof HTMLElement&&(e.hidden=!0),g instanceof HTMLElement&&(g.hidden=!0),l=[];try{c=await b.json()}catch(h){if(422===h.response.status){let i=JSON.parse(h.response.text);if(i.errors){e instanceof HTMLElement&&(e.textContent=`There was an error posting your comment: ${i.errors.join(", ")}`,e.hidden=!1);return}}else throw h}if(!c)return;let j=c.json;j.errors&&j.errors.length>0&&(l=j.errors,q(g));let k=d.querySelector(".js-comment-body");if(k&&j.body&&(k.innerHTML=j.body),null!=j.source){if(j.default_merge_commit_message){if(document.querySelector(".js-merge-pr.is-merging")){let m=document.querySelector(".js-merge-pull-request textarea");m instanceof HTMLTextAreaElement&&m.value===m.defaultValue&&(m.value=m.defaultValue=j.default_merge_commit_message)}if(j.default_squash_commit_message&&document.querySelector(".js-merge-pr.is-squashing")){let n=document.querySelector(".js-merge-pull-request textarea");n instanceof HTMLTextAreaElement&&n.value===n.defaultValue&&(n.value=n.defaultValue=j.default_squash_commit_message)}}document.querySelector(".js-merge-box-button-merge")?.setAttribute("data-input-message-value",j.default_merge_commit_message),document.querySelector(".js-merge-box-button-squash")?.setAttribute("data-input-message-value",j.default_squash_commit_message)}d.setAttribute("data-body-version",j.newBodyVersion);let o=d.querySelector(".js-body-version");o instanceof HTMLInputElement&&(o.value=j.newBodyVersion);let p=d.querySelector(".js-discussion-poll");for(let r of(p&&j.poll&&(p.innerHTML=j.poll),d.querySelectorAll("input, textarea"))){let s=r;s.defaultValue=s.value}d.classList.remove("is-comment-stale","is-comment-editing");let t=d.querySelector(".js-comment-edit-history");if(t){let u=await (0,f.a)(document,j.editUrl);t.textContent="",t.append(u)}}),(0,i.N7)(".js-comment-body-error",{add(a){l&&l.length>0&&q(a)}}),(0,j.AC)(".js-comment .js-comment-delete, .js-comment .js-comment-update, .js-comment-minimize, .js-comment-unminimize",async function(a,b){let c=a.closest(".js-comment");try{await b.text()}catch(d){if(422===d.response.status){let e;try{e=JSON.parse(d.response.text)}catch(f){}e&&e.stale&&c.classList.add("is-comment-stale")}else throw d}c.classList.remove("is-comment-loading")}),(0,j.AC)(".js-timeline-comment-unminimize, .js-timeline-comment-minimize",async function(a,b){let c=a.closest(".js-minimize-container");try{let d=await b.html();c.replaceWith(d.html)}catch(e){r(c,!0)}}),(0,j.AC)(".js-discussion-comment-unminimize, .js-discussion-comment-minimize",async function(a,b){let c=a.closest(".js-discussion-comment"),d=c.querySelector(".js-discussion-comment-error");d&&(d.hidden=!0);try{let e=await b.html();c.replaceWith(e.html)}catch(f){if(f.response.status>=400&&f.response.status<500){if(f.response.html){let g=f.response.html.querySelector(".js-discussion-comment").getAttribute("data-error");d instanceof HTMLElement&&(d.textContent=g,d.hidden=!1)}}else throw f}}),(0,j.AC)(".js-comment-delete",async function(a,b){await b.json();let c=a.closest(".js-comment-delete-container");!c&&(c=a.closest(".js-comment-container")||a.closest(".js-line-comments"))&&1!==c.querySelectorAll(".js-comment").length&&(c=a.closest(".js-comment"));let d=c?.closest(".js-comment-container")||c?.closest(".js-line-comments");if(c?.remove(),d&&1===d.querySelectorAll(".js-comment").length)for(let e of d.querySelectorAll(".js-delete-on-last-reply-deleted"))e.remove()}),(0,j.AC)(".js-issue-update",async function(a,b){let c=a.closest(".js-details-container"),d=c.querySelector(".js-comment-form-error"),e;try{e=await b.json()}catch(f){d.textContent=f.response?.json?.errors?.[0]||"Something went wrong. Please try again.",d.hidden=!1}if(!e)return;c.classList.remove("open"),d.hidden=!0;let g=e.json;if(null!=g.issue_title){c.querySelector(".js-issue-title").textContent=g.issue_title;let h=c.closest(".js-issues-results");if(h){if(h.querySelector(".js-merge-pr.is-merging")){let i=h.querySelector(".js-merge-pull-request .js-merge-title");i instanceof HTMLInputElement&&i.value===i.defaultValue&&(i.value=i.defaultValue=g.default_merge_commit_title)}else if(h.querySelector(".js-merge-pr.is-squashing")){let j=h.querySelector(".js-merge-pull-request .js-merge-title");j instanceof HTMLInputElement&&j.value===j.defaultValue&&(j.value=j.defaultValue=g.default_squash_commit_title)}let k=h.querySelector("button[value=merge]");k&&k.setAttribute("data-input-title-value",g.default_merge_commit_title);let l=h.querySelector("button[value=squash]");l&&l.setAttribute("data-input-title-value",g.default_squash_commit_title)}}for(let m of(document.title=g.page_title,a.elements))(m instanceof HTMLInputElement||m instanceof HTMLTextAreaElement)&&(m.defaultValue=m.value)}),(0,j.AC)(".js-comment-minimize",async function(a,b){await b.json();let c=a.closest(".js-comment"),d=c.querySelector(".js-minimize-comment");if(d&&d.classList.contains("js-update-minimized-content")){let e=a.querySelector("input[type=submit], button[type=submit]");e&&e.classList.add("disabled");let f=c.closest(".js-comment-container");f&&await (0,k.x0)(f)}else{d&&d.classList.add("d-none");let g=a.closest(".unminimized-comment");g.classList.add("d-none"),g.classList.remove("js-comment");let h=a.closest(".js-minimizable-comment-group"),i=h.querySelector(".minimized-comment");i&&i.classList.remove("d-none"),i&&i.classList.add("js-comment")}}),(0,j.AC)(".js-comment-unminimize",async function(a,b){await b.json();let c=a.closest(".js-minimizable-comment-group"),d=c.querySelector(".unminimized-comment"),e=c.querySelector(".minimized-comment");if(d)d.classList.remove("d-none"),d.classList.add("js-comment"),e&&e.classList.add("d-none"),e&&e.classList.remove("js-comment");else{if(e){let f=e.querySelector(".timeline-comment-actions");f&&f.classList.add("d-none"),e.classList.remove("js-comment")}let g=c.closest(".js-comment-container");await (0,k.x0)(g)}}),(0,d.on)("details-menu-select",".js-comment-edit-history-menu",a=>{let b=a.detail.relatedTarget.getAttribute("data-edit-history-url");if(!b)return;a.preventDefault();let c=(0,f.a)(document,b);(0,e.W)({content:c,dialogClass:"Box-overlay--wide overflow-visible",errorMessage:"Couldn't display edit history diff"})},{capture:!0})},81775(a,b,c){c.d(b,{G:()=>i});var d=c(254),e=c(64463),f=c(59753);function g(a){let b=a.getAttribute("data-required-value"),c=a.getAttribute("data-required-value-prefix");if(a.value===b)a.setCustomValidity("");else{let d=b;c&&(d=c+d),a.setCustomValidity(d)}}(0,d.q6)("[data-required-value]",function(a){let b=a.currentTarget;g(b)}),(0,f.on)("change","[data-required-value]",function(a){let b=a.currentTarget;g(b),i(b.form)}),(0,d.q6)("[data-required-trimmed]",function(a){let b=a.currentTarget;""===b.value.trim()?b.setCustomValidity(b.getAttribute("data-required-trimmed")):b.setCustomValidity("")}),(0,f.on)("change","[data-required-trimmed]",function(a){let b=a.currentTarget;""===b.value.trim()?b.setCustomValidity(b.getAttribute("data-required-trimmed")):b.setCustomValidity(""),i(b.form)}),(0,d.ZG)("input[pattern],input[required],textarea[required],input[data-required-change],textarea[data-required-change],input[data-required-value],textarea[data-required-value]",a=>{let b=a.checkValidity();function c(){let c=a.checkValidity();c!==b&&a.form&&i(a.form),b=c}a.addEventListener("input",c),a.addEventListener("blur",function b(){a.removeEventListener("input",c),a.removeEventListener("blur",b)})});let h=new WeakMap;function i(a){let b=a.checkValidity();for(let c of a.querySelectorAll("button[data-disable-invalid]"))c.disabled=!b}(0,e.N7)("button[data-disable-invalid]",{constructor:HTMLButtonElement,initialize(a){let b=a.form;if(b){var c;c=b,h.get(c)||(c.addEventListener("change",()=>i(c)),h.set(c,!0)),a.disabled=!b.checkValidity()}}}),(0,e.N7)("input[data-required-change], textarea[data-required-change]",function(a){let b=a,c="radio"===b.type&&b.form?b.form.elements.namedItem(b.name).value:null;function d(a){let d=b.form;if(a&&"radio"===b.type&&d&&c)for(let e of d.elements.namedItem(b.name))e instanceof HTMLInputElement&&e.setCustomValidity(b.value===c?"unchanged":"");else b.setCustomValidity(b.value===(c||b.defaultValue)?"unchanged":"")}b.addEventListener("input",d),b.addEventListener("change",d),d(),b.form&&i(b.form)}),document.addEventListener("reset",function(a){if(a.target instanceof HTMLFormElement){let b=a.target;setTimeout(()=>i(b))}})}}]) +//# sourceMappingURL=app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-964574076585.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/F7CB0D9F0E290101B792B77DB082BDED84D35CCF b/home/.surf/cache/WebKitCache/Version 16/Blobs/F7CB0D9F0E290101B792B77DB082BDED84D35CCF new file mode 100644 index 0000000..10b5aa8 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/F7CB0D9F0E290101B792B77DB082BDED84D35CCF @@ -0,0 +1 @@ +define({"tos_exempt_forums_shortnames":["somememes","qrt-dev","qrt-test","qrt-prd"],"register":{"ENABLE_CAPTCHA":true},"max_post_edit_days":7,"lounge":{"follow_channel_prompt_views":1,"motd_admin_url":"https://blog.disqus.com/the-disqus-comment-section-upgraded","tracking":{"iframe_limit":4,"list":[{"url":"//referrer.disqus.com/juggler/stat.gif?event=data_tracker","forced_forums":["disqus"],"rate":0,"type":"img"}]},"font_options":[{"category":"serif","name":"Lora"},{"category":"sans-serif","name":"Montserrat"},{"category":"sans-serif","name":"Nunito"},{"category":"sans-serif","name":"Open+Sans"},{"category":"sans-serif","name":"Poppins"},{"category":"sans-serif","name":"Roboto"},{"category":"serif","name":"Roboto+Slab"},{"category":"sans-serif","name":"Source+Sans+Pro"},{"category":"serif","name":"Source+Serif+Pro"},{"category":"serif","name":"Spectral"},{"category":"sans-serif","name":"IBM+Plex+Sans"}],"motd_home_title":"The Disqus comment section gets a refresh!","motd_admin_title":"The Disqus comment section gets a refresh!","motd_home_url":"https://blog.disqus.com/the-disqus-comment-section-upgraded","REALTIME":{"BACKOFF_INTERVAL":4,"MAX_HANDSHAKE_FAILS":1,"XHR_ENABLED":false,"THREAD_STALE_DAYS":1},"motd_marketing_cta":"Full details here \u00bb","switches":{"customer_pulse_analytics":{"username":["orazumov_zeta","michaelyakovlev","commenting_privacy","andrei_ivanov_disqus","aivanov"]},"custom_reactions":true,"home_ads":{"channelDiscussions":true},"zyncOnly":{"percent":100},"spam_and_ban_moderation":{"percent":100,"forum":["taylans","disqus","rawstory","androidpolice","dogus"]},"stripeCoupons":true,"customCommentCounts":{"":"","motor1dotcom":5,"demotor1com":5,"trmotor1com":5,"ru-motor1-com-1":5,"downdetector":10,"newsmaxhealth":5,"https-www-syndromemagazine-com":5,"esmotor1com":5,"www-isaechia-it":5,"latinomotor1com":5,"esta-fallando-ecuador":35,"insideevsit":5,"acm-prod":10,"autoclassicscom":5,"is-the-service-down-uk":35,"istheservicedown":35,"nmmoney":5,"techrepublic-1":3,"esta-fallando-espana":35,"acm-stag":10,"brmotor1com":5,"hellforleather":5,"www-nextquotidiano-it":5,"themanrepeller":10,"camotor1com":5,"newsmaxtv":5,"the-spruce-eats":3,"acm-test":10,"insideevsru":5,"uscho":10,"esta-fallando-colombia":35,"is-the-service-down-france":35,"is-the-service-down-australia":35,"ukmotor1com":5,"mantle-ref":1,"qa-thespruce":1,"nmax":5,"insideevscom":5,"trashitaliano-1":5,"brasil247":10,"adsnativetest":5,"fdc-staging":3,"http-ilsignordistruggere-com":5,"disqus":25,"sta-fallendo":35,"slamonline":5,"gibt-es-eine-storung":35,"insideevsbr":5,"forbes-2":3,"bitchyfblog":5,"www-violetta-rocks":5,"zdnet-1":3,"newsmaxworld":5,"mediaite":5,"the-spruce-staging":1,"is-the-service-down-canada":35,"frmotor1com":5,"esta-fallando-mexico":35,"insideevsfr":5},"disable_recommendations":false,"reveal_new_ad_products":{"username":["Digikid13","ProductNate","adamstober","mariopaganini","kalail610"]},"reactions_analytics":true,"registrationFlow":{"enableSignup":true},"behind_click":{"forum":["happy-little-trees","testgbnew","gamingbolt","whatisthebestcolor","disqus-demo-pro"]},"login_prompt_more_posts":{},"before_comment_callback":{"forum":["dsqwordpress","chivefest","chivery","chivery-staging","thechiverules-brigade","thechivereviewserver2012","thechiverules-throttle","thechiverules","thechiverules-staging","thechiverules"]},"moderation_page_active":true,"liveramp":true,"bidirectional_blocking":true,"recs_outside_embed":true,"random_algorithm_on_explore":true,"num_comments":{"devel-d12":20},"new_user_premoderation":true,"ats2_enabled":true,"aet_intercom":{"percent":0},"enable_hotjar":{"percent":10},"aniview_sticky_video_debug":false,"election_pages":false,"custom_fonts":true,"limit_rendered_posts":{"forum_percent":100,"forum":[]},"removePrivacyPolicy":{"forum":["cnet-1","zdnet-1","techrepublic-1","sri-test-local","sri-consensus","sri-consensus-dap","chasing-the-cure","bluestacks-community","cnet-es","cnet-roadshow","forbes-2","howtostartanllc","howtostartanllc-idc","startup-savant","startupsavant-idc","truic","truic-idc","spie-digital-library","linquip","www-hapimag-com-1","java-monster","juicemonster","monster-dragon-tea","monster-energy","monster-general-session","monster-hydro","monster-maxx","monster-nos","monster-rehab","monster-reign","monster-ultra","monster-unleashed","ula-1","techx-2","techlondon","tcv-1","nyc-1","hubdc","boston-2","camokakis","uat5ecddc33cb039142843016e3","uat5ecf2b30adc60f516cfeab08","uat5ecf346bc3234228586f3345","uat5f2a75f2be29f01b043dc397","uat5f56fedc650ea204a1e5885f","uat5f588335650ea204a1e5887a","uat5f58a2fb650ea204a1e5888a","uat5f58a494650ea204a1e5888c","uat5f5b2d81eaa52f19f477d240","uat5f5b48dfcd3af55020457aab","uat5f5b554dcd3af55020457ab5","uat5f5b5bdf089fc922999bf126","uat5f5b5c25089fc922999bf128","uat5f5ee3e7089fc922999bf158","uat5f6015c540da0046625c40b7","uat5f6c09791bcc73727477c9fe","uat5f7a82f467ca7845189e4e8d","uat5f7a858c67ca7845189e4e96","uat5f7acb1c67ca7845189e4ead","uat5f7acdc567ca7845189e4eb9","uat5f7d6b2281b0b61edc5b583d","businessdaily","dailynation","swahilihub","global-dimension-development","globaldimensionuk","pat5ffdca7b5d2cd0218f963cf7","pat5ffdcddca27eb627c1c9dbcd","pat5ffdece362bdc852cade5bb6","pat5ffe65e362bdc852cade5c5a","pat5ffe673baa07d02a5507f669","sodrama-staging","uat5ff2c907a4e05f7f19d78416","uat5ff3d2da397ea862fcbb636f","uat5ff3d2e8397ea862fcbb6371","uat5ff3d2fa397ea862fcbb6373","uat5ff3d30b397ea862fcbb6375","uat5ff3d367397ea862fcbb637d","uat5ff3d374397ea862fcbb637f","uat5ff42a27e17b6e36a6dbf15d","uat5ff7c5e034ad524ec0334399","uat5ff7c8ba1e395420fce2c450","spreeberry","pat6007ed852f1e464198a20b63","pat6007ed9f2f1e464198a20b68","pat600f9e39e5afa234ff35074a","pat600fa88b9cf4687ea7ef706d","pat600fbe3ce5afa234ff350787","pat600fbfaf9cf4687ea7ef70db","uat6009267f9aa0483501e348a7","uat60093092d1bc6f66a845f122","pat6020fbb62a321a79ad8c3ea0","stagingjt","japantimes","uat60361504ea5cd3443b3e48f7","pat6040922de64c3f540f3613c5","pat60470361a840d7541b9e4b2b","pat604851767c851f3d4f32a3c8","uat604ed0dfed6bb90b1b1dc159","betterview","prod-storyloom","uat-storyloom","sandbox-storyloom","dev-storyloom","uat60501de967233b3b9f63c512","uat60582201ab6d242fe0af6770","uat6063d916bef871227a7041fa","uat60641723bef871227a70426a","pat609e6fe6420f3347f099d653","stghomekpmg","home-kpmg","sigmanursing","test-sigmanursing","dev-sigmanursing","qrt-test","astronogeek","astronogeek-ppr","cultivonsnous","cultivonsnous-ppr","mpt-qa","qrt-prd","qrt-dev","mpt-prod","scenedecrime-ppr","scenedecrime","armystories","armystories-ppr","infinityfestival2021","https-2021ocpglobal-fnvirtual-app","pat612f2b9737aef25cdf3d0208","pat612f2a622c4b9246c71b2024","pat615440cf7506e530e1c914ea","pat615d0c147506e530e1c94e46","pat615fa1e47506e530e1c964a2","uat6156a770abd1832da16c568d","uat615d5a2d91e3f8389c5048ba","uat6165209b5ad62a86c05f7785","uat61652c4a5ad62a86c05f7787","uat61652d135ad62a86c05f7789","uat616536a35ad62a86c05f7790","uat616539745ad62a86c05f7792","uat616539d05ad62a86c05f7795","uat616539f45ad62a86c05f7797","uat61654aa35ad62a86c05f77de","uat61654d46ba93d02e74e3b7ae","uat61657cafba93d02e74e3b7b5","uat61657d60ba93d02e74e3b7b9","uat61664f7566a248466878c69a","uat6168dfbd8e0243102da6a5e0","uat616d3c8fc51424234c7442d6","uat616d4016c51424234c7442d9","exquistv","puydufou","starsfest2021","pat616d2807fb51497aefdc0e30","pat616f838dee09d97de232f14e","pat616f8683ee09d97de232f279","pat616f83740efb3b5aae62db51","pat616f8b0c0efb3b5aae62db72","pat617115bd0efb3b5aae62e1b1","pat617f59651dbbbb5542505363","pat617f5abf9d94657230b609ba","pat6188c683f76c80669179c38d","trades-nation","techweek2022-yahoo","f5labs-stage","f5labs-test","f5labs","brazenlife","bzpvfds","brazenconnect","mieuxmangerdemain","owg2022","owg2022-1","https-stockinvest-us","stockinvest-test","viasat-compass","mycasethrive2022","2022ocpglo","fnallhands2022-fnvirtual-app-1","RDC22","storyloom","melissa-wood-health-testing","melissa-wood-health-production","endeavor-streaming","mpt-staging","qa2-1","qa3-test","globalfrand2022-fnvirtual-app","topgearbbc-test","prelaunch-dev","prelaunch-production","prelaunch-stage","vrye-weekblad-1","https-przegladsportowy-onet-pl","qas-expresso","prod-expresso","qa-environment"]},"gif_picker_forum_settings":{"forum_percent":100,"forum":["taylans","disqus-demo-basic","disqus-demo-plus","disqus-demo-pro"]},"recommendations_with_ads":{"forum_percent":100,"forum":["brett-test-1","happy-little-trees","somememes","nikonrumors","es-fans"]},"home_ads_prevented":{"forum":["iphoneincanada","thehill-v4","nmax","toofab","channel-discussdisqus","patdollardcom"]},"toggle_embed_refresh":true,"home_admin_channel":{"slug":["disqusfun"]},"onboarding_without_channels":{"percent":100},"media_tradecraft_test":true,"analytics_intercom":{"percent":0},"subscription_intercom":{"percent":0},"sso_less_branding":{"forum":["techrepublic-1","zdnet-1","zd-review-migration-2","zd-migration-3","cnet-migration-2","cnet-migration-roadshow-2","cnet-migration-es-2","tr-dev","zd-dev","zdnet-dev","cnet-es","cnet-roadshow","cnet-1","cbs-sports-prod","cbs-sports-staging","sri-consensus","sri-test-local","sri-consensus-dap","acm-test","acm-stag","acm-prod","betterview","ibm-knowledge-center","chasing-the-cure","omroep-flevoland","bluestacks-community","fdc-staging","forbes-2","tradecast","bellinga","howtostartanllc","howtostartanllc-idc","startup-savant","startupsavant-idc","truic","truic-idc","https-dev-tokion-jp","https-www-tokion-jp","spie-digital-library","linquip","live-event","fnvirtual-poc","java-monster","juicemonster","monster-dragon-tea","monster-energy","monster-general-session","monster-hydro","monster-maxx","monster-nos","monster-rehab","monster-reign","monster-ultra","ula-1","techx-2","techlondon","tcv-1","nyc-1","hubdc","boston-2","hornby-hobbies","hornbyus","camokakis","uat5ecddc33cb039142843016e3","uat5ecf2b30adc60f516cfeab08","uat5ecf346bc3234228586f3345","uat5f2a75f2be29f01b043dc397","uat5f56fedc650ea204a1e5885f","uat5f588335650ea204a1e5887a","uat5f58a2fb650ea204a1e5888a","uat5f58a494650ea204a1e5888c","uat5f5b2d81eaa52f19f477d240","uat5f5b48dfcd3af55020457aab","uat5f5b554dcd3af55020457ab5","uat5f5b5bdf089fc922999bf126","uat5f5b5c25089fc922999bf128","uat5f5ee3e7089fc922999bf158","uat5f6015c540da0046625c40b7","uat5f6c09791bcc73727477c9fe","uat5f7a82f467ca7845189e4e8d","uat5f7a858c67ca7845189e4e96","uat5f7acb1c67ca7845189e4ead","uat5f7acdc567ca7845189e4eb9","uat5f7d6b2281b0b61edc5b583d","swahilihub","2020ocptechweek","dailynation","businessdaily","global-dimension-development","globaldimensionuk","pat5ffdca7b5d2cd0218f963cf7","pat5ffdcddca27eb627c1c9dbcd","pat5ffdece362bdc852cade5bb6","pat5ffe65e362bdc852cade5c5a","pat5ffe673baa07d02a5507f669","sodrama-staging","uat5ff2c907a4e05f7f19d78416","uat5ff3d2da397ea862fcbb636f","uat5ff3d2e8397ea862fcbb6371","uat5ff3d2fa397ea862fcbb6373","lmstag","www-livemint-com","dev-storyloom","prod-storyloom","uat-storyloom","sandbox-storyloom","working-knowledge","uat5ff3d30b397ea862fcbb6375","uat5ff3d367397ea862fcbb637d","uat5ff3d374397ea862fcbb637f","uat5ff42a27e17b6e36a6dbf15d","uat5ff7c5e034ad524ec0334399","uat5ff7c8ba1e395420fce2c450","spreeberry","uat6009267f9aa0483501e348a7","uat60093092d1bc6f66a845f122","pat6007ed852f1e464198a20b63","pat6007ed9f2f1e464198a20b68","pat600f9e39e5afa234ff35074a","pat600fa88b9cf4687ea7ef706d","pat600fbe3ce5afa234ff350787","pat600fbfaf9cf4687ea7ef70db","pat6020fbb62a321a79ad8c3ea0","stagingjt","japantimes","uat60361504ea5cd3443b3e48f7","pat6040922de64c3f540f3613c5","pat60470361a840d7541b9e4b2b","pat604851767c851f3d4f32a3c8","uat604ed0dfed6bb90b1b1dc159","uat60501de967233b3b9f63c512","uat60582201ab6d242fe0af6770","uat6063d916bef871227a7041fa","uat60641723bef871227a70426a","pat609e6fe6420f3347f099d653","stghomekpmg","home-kpmg","test-sigmanursing","dev-sigmanursing","sigmanursing","qrt-test","astronogeek","astronogeek-ppr","cultivonsnous","cultivonsnous-ppr","mpt-qa","qrt-prd","qrt-dev","mpt-prod","scenedecrime-ppr","scenedecrime","armystories","armystories-ppr","infinityfestival2021","https-2021ocpglobal-fnvirtual-app","pat612f2b9737aef25cdf3d0208","pat612f2a622c4b9246c71b2024","pat615440cf7506e530e1c914ea","pat615d0c147506e530e1c94e46","pat615fa1e47506e530e1c964a2","uat6156a770abd1832da16c568d","uat615d5a2d91e3f8389c5048ba","uat6165209b5ad62a86c05f7785","uat61652c4a5ad62a86c05f7787","uat61652d135ad62a86c05f7789","uat616536a35ad62a86c05f7790","uat616539745ad62a86c05f7792","uat616539d05ad62a86c05f7795","uat616539f45ad62a86c05f7797","uat61654aa35ad62a86c05f77de","uat61654d46ba93d02e74e3b7ae","uat61657cafba93d02e74e3b7b5","uat61657d60ba93d02e74e3b7b9","uat61664f7566a248466878c69a","uat6168dfbd8e0243102da6a5e0","uat616d3c8fc51424234c7442d6","uat616d4016c51424234c7442d9","exquistv","puydufou","starsfest2021","pat616d2807fb51497aefdc0e30","pat616f838dee09d97de232f14e","pat616f8683ee09d97de232f279","pat616f83740efb3b5aae62db51","pat616f8b0c0efb3b5aae62db72","pat617115bd0efb3b5aae62e1b1","pat617f59651dbbbb5542505363","pat617f5abf9d94657230b609ba","pat6188c683f76c80669179c38d","trades-nation","techweek2022-yahoo","f5labs-stage","f5labs-test","f5labs","bzpvfds","brazenlife","brazenconnect","mieuxmangerdemain","owg2022","owg2022-1","lmstag","https-stockinvest-us","stockinvest-test","viasat-compass","fnallhands2022-fnvirtual-app-1","mycasethrive2022","2022ocpglo","RDC22","storyloom","hindustantimes-com-1","melissa-wood-health-testing","melissa-wood-health-production","endeavor-streaming","mpt-staging","qa2-1","qa3-test","globalfrand2022-fnvirtual-app","topgearbbc-test","prelaunch-dev","prelaunch-stage","prelaunch-production","vrye-weekblad-1","https-przegladsportowy-onet-pl","qa-environment","qas-expresso","prod-expresso"]},"aniview_sticky_video":true,"badges_feature":true,"stripe_price_changes":true,"reveal_show_video":{"username":["Digikid13","ProductNate","mariopaganini","kalail610","nicoleallard"],"org_percent":25,"percent":100},"timeline_ads":{"is_staff":true,"percent":100},"intercomEnabled":{"is_staff":true,"percent":0},"recs_outside_embed_list":{"forum":["happy-little-trees","disqus","spoilertvhome","chriselliotts","avocadotesting","payments-in-ukraine","marcofranssen","mcbolt","thecornercafe","the-chat-place","thechatshack-fun"]},"disable_high_rep_spam_exclusion":true,"suggested_actions":{},"toxicity_mod":{"is_staff":false,"percent":0},"launch_pro":true,"thehive":{"forum":["aivanovtest","joyoftesting-display-bottom","disqus-demo-pro","commentingprivacy-blogspot-com","disqus","mediaite","worldstar","avocadotesting","mcbolt","nodqdotcom","spoilertvhome","aerotelegraph","mpt-prod"]},"hostIdentityActive":{"percent":100},"viglink_experiment":{"forum_percent":100,"forum":[]},"disable_voting":{"forum":[""]},"mtc_ads":true,"embed_customizations":true,"moderation_improvements_intercom":{"percent":0},"star_ratings_total_hidden":{"forum":["star-ratings-test","happy-little-trees","qa-simplyrecipes","qa-seriouseats","simply-recipes","serious-eats"]},"reveal_show_display":{"username":["Digikid13","ProductNate","mariopaganini","kalail610","nicoleallard"],"org_percent":25,"percent":100},"embed_refresh":true,"profile_explore":true,"tile_ads":{"is_staff":true,"percent":100},"random_algorithm_on_pages":true,"home_explore_new_indicator":true,"moderationRules":{"is_staff":true,"forum":["merimbulanewsonline-com-au","thegatewaypundit","torfashion","japantimes","wnd-news","dailyadvertiser-com-au","gothamist","tvtech","northerndailyleader-com-au","cinemablend","malonetelegram","belloflostsouls","zdnet-1","nowinstock","androidpolice","thehill-v4","cnsnews","sltrib","mrctvcomments","pcmag","theatlanticcities","badassdigest","abcnewsdotcom","thechiverules","thedailycaller","wccftech","rawstory","cnet-1","bitcoincom","tsest","downdetector","breitbartproduction","sofifa","alternet","wrestlinginc","evilmilk","bearingarms-th","hotair-th","ipdevstaging","pj-instapundit","pj-media","pjmediastaging","redstate","townhallcom","twitchy","mediaite","lawnewz","themarysue","es-fans","worldstar","thedailywire","lingojam","rogerebert","avocadotesting","9anime-to","businessdaily","dailynation","ewm","swahilihub"]},"webvitals_addPostsIncremental":{"forum":["disqus-pse-stock","disqus-pse-recommendations","disqus-pse-reactions","disqus-pse-data-partners","disqus-pse-alfie","disqus-pse-ads-links"]}},"motd_marketing_url":"https://blog.disqus.com/the-disqus-comment-section-upgraded","motd_admin_cta":"Full details here \u00bb","telemetry_sample_percent":1,"viglink":{"experiment_version":"v5","version":"v4"},"motd_home_cta":"Full details here \u00bb","AMAZON_ENABLED_ALL":false,"motd_marketing_title":"The Disqus comment section gets a refresh!","sentry_rate_limit":500},"readonly":false,"mentions":{"MAX_PER_POST":30},"timelines":{"BLACKLISTED_FORUMS":["cnn","squiddev-justforfun","squiddev-todayilearned","squiddev-ama","squid","squiddev","squid-changemyview","squiddev-changemyview","squid-justforfun","squid-todayilearned","squid-ama"]}}) \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/F8BBAA7A9C6C569A6A65752407507F3423048934 b/home/.surf/cache/WebKitCache/Version 16/Blobs/F8BBAA7A9C6C569A6A65752407507F3423048934 new file mode 100644 index 0000000..a1d8c74 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/F8BBAA7A9C6C569A6A65752407507F3423048934 @@ -0,0 +1 @@ +var DDG=window.DDG||{Data:{SearchExperiments:window.Bootstrap.SearchExperimentsData},Models:{Answers:{},AnswerItems:{},Settings:{},AnswerSelectLists:{},Maps:{},Modules:{},Bang:{},BackData:window.Bootstrap.backData,SearchExperiments:window.Bootstrap.SearchExperiments},Pages:{},Views:{About:{},Address:{},AnswerBar:{Answers:{},Meta:{}},Bang:{},Dropdowns:{},Feedback:{},Mapkit:{},Maps:{},Modules:{},Places:{},Settings:{},Sports:{},UserLocation:{},Verticals:{}},Text:{},Utils:{BackData:window.Bootstrap.BackData,Settings:{}}};DDG.Data.Pixels={abort:{},ac:{once:!0},acp:{once:!0},ace:{once:!1},ad:{ct:!0,kl:!0,rl:!0,kp:!0,once:!0,query:!0,flagSerpReturns:!0},apsm:{once:!0},apse:{once:!0},apss:{once:!0},atbbi:{once:!0,refireWhenLoadedFromBfcache:!0},atbbsi:{once:!0},atbbsc:{once:!0,dedupe:"va"},atbhi:{once:!0,ct:!0,refireWhenLoadedFromBfcache:!0},atbhc:{once:!0,ct:!0,dedupe:"va"},atbhl:{once:!0},atbhx:{once:!0},atbht:{once:!0},atbic:{once:!0},atbii:{once:!0},atbis:{once:!0},atbil:{once:!0},atbif:{once:!0},atbish:{once:!0},atbmi:{once:!0},atbmc:{once:!0},atbmx:{once:!0},atbpi:{once:!0},atbpc:{once:!0},atbsi:{once:!0,refireWhenLoadedFromBfcache:!0},atbsc:{once:!0,dedupe:"va"},atbti:{once:!0},atbtc:{once:!0},atbsx:{once:!0},atbse:{once:!0},atbob:{once:!0},atboc:{once:!0},atbaoc:{once:!0},atbaoct:{once:!0},atbaoi:{once:!0},atbskc:{once:!0},atbbgc:{once:!0},aopl:{once:!0},aops:{once:!0},aobc:{once:!0},aoabi:{once:!0},aoac:{once:!0},aosc:{once:!0},aomc:{once:!0},aths:{},bms:{once:!0},c:{once:!0,flagSerpReturns:!0},cmi:{once:!0},cmo:{once:!0},cmc:{once:!0},cmx:{once:!0},cls:{once:!0},ddr:{},dev:{query:!0,once:!0,flagSerpReturns:!0,organicAboveFold:!0},devx:{query:!0,once:!0},dfc:{once:!0,ct:!0,device:!0,df:!0},infoboxload:{once:!0},infoboxclick:{once:!0},infoboxresultclick:{once:!0},dop:{once:!0},dpi:{ct:!0,device:!0},dxr:{ct:!0,device:!0,once:!0,kl:!0,rl:!0},"dntul-1":{once:!0},"dntul-2":{once:!0},"dntul-3":{once:!0},"dntul-4":{once:!0},"dntul-5":{once:!0},dntus:{once:!0},emcb:{},exti:{once:!0,ct:!0,qsParam:"file"},exts:{once:!0},exte:{once:!0},fbp:{query:!0,ct:!0,kl:!0,rl:!0,device:!0},fbpm:{query:!0,ct:!0,kl:!0,rl:!0,device:!0},fbf:{},fbs:{device:!0,query:!0,ct:!0},fbc:{once:!0,device:!0},fmd:{once:!0,query:!0},ibc:{},"home-spread-cta":{once:!0},"home-mobile-spread-cta":{once:!0},"side-menu-mobile-spread-cta":{once:!0},hlt:{once:!0},htl:{once:!0},im:{once:!0},"adreporting.duplicated-error":{once:!0},"adreporting.shopping-ads-wrongly-outputted":{once:!0},l:{refireWhenLoadedFromBfcache:!0,flagSerpReturns:!0,serializeBackData:!0,once:!0,ct:!0,df:!0,kl:!0,rl:!0,kp:!0,djsd:!0,query:!0},l2:{ct:!0,djsd:!0,refireWhenLoadedFromBfcache:!0,flagSerpReturns:!0,organicAboveFold:!0,once:!0,query:!0,rl:!0,debugCache:!0,addPreBounceSearchExperimentParams:!0},si:{once:!0,refireWhenLoadedFromBfcache:!0,debugCache:!0,flagSerpReturns:!0},lc:{once:!0,ct:!0,df:!0,kl:!0,rl:!0,kp:!0,device:!0,query:!0,ttc:!0,dedupe:"ttc",flagSerpReturns:!0},lm:{query:!0},lrc:{once:!0},lse:{},sn_l:{once:!0,device:!0},lclt:{once:!0,device:!0},lclf:{once:!0,device:!0},lclp:{once:!0,device:!0},map_mki:{device:!0},map_si:{once:!0,device:!0},map_se:{once:!0,device:!0},map_cta:{once:!0,device:!0},map_ei:{once:!0,device:!0},map_eze:{once:!0,device:!0},map_ete:{once:!0,device:!0},map_ese:{once:!0,device:!0},map_est:{once:!0,device:!0},map_ebe:{once:!0,device:!0},map_er:{device:!0},map_ere:{once:!0,device:!0},dir_emp:{once:!0,device:!0},dir_map:{once:!0,device:!0},dir_chg:{once:!0,device:!0},dir_exp:{once:!0,device:!0},dir_loc:{once:!0,device:!0},dir_tpt:{once:!0,device:!0},dir_rq:{device:!0},dir_stp:{once:!0,device:!0},dir_ext:{once:!0,device:!0},dir_no:{device:!0},dir_pr:{once:!0,device:!0},mrc:{once:!0,ttc:!0,ct:!0,df:!0,query:!0},nrjt:{once:!0},nor:{once:!0,query:!0,ct:!0,df:!0,kl:!0,rl:!0},norrc:{once:!0,query:!0,ct:!0,kl:!0,rl:!0,kp:!0},norwc:{once:!0,query:!0,ct:!0,kl:!0,rl:!0,kp:!0},nre:{once:!0,query:!0,ct:!0,kl:!0,rl:!0},nts:{once:!0,query:!0},ntp_c:{once:!0},nv:{once:!0,query:!0,ct:!0,kl:!0,rl:!0},oiai:{once:!0},oiac:{once:!0},pae:{once:!0,ct:!0,df:!0,device:!0,query:!0,ttc:!0,flagSerpReturns:!0},prb:{once:!0},old_extension_detected:{once:!0},rgc:{once:!0,ct:!0,device:!0,av:!0},reli:{query:!0,once:!0,device:!0,ct:!0},relc:{query:!0,once:!0,device:!0,ct:!0,df:!0,ttc:!0},rele:{query:!0,once:!0,device:!0,ct:!0},rq:{query:!0,once:!0,ct:!0,df:!0,kl:!0,rl:!0,kp:!0,device:!0,ttc:!0,flagSerpReturns:!0},shc:{once:!0},shs:{once:!0},sm:{},sml:{},smo:{},sp:{query:!0,flagSerpReturns:!0},spp:{once:!0},spd:{query:!0,refireWhenLoadedFromBfcache:!0,flagSerpReturns:!0},splc:{once:!0},sshc:{ct:!0,device:!0,once:!0},sshs:{ct:!0,device:!0,once:!0},ss_block:{once:!0},ssi:{ct:!0,device:!0,once:!0,query:!0},sss:{ct:!0,device:!0,once:!0,av:!0},"text-promo":{once:!1,device:!0},w:{},iaa:{once:!0,device:!0,ttc:!0},iae:{once:!0,ct:!0,kl:!0,rl:!0,kp:!0,device:!0,query:!0,ttc:!0,flagSerpReturns:!0},iafd:{once:!0,query:!0,ct:!0,kl:!0,rl:!0,device:!0},iaff:{ct:!0,query:!0,kl:!0,rl:!0,device:!0,refireWhenLoadedFromBfcache:!0,flagSerpReturns:!0},iafp:{ct:!0,query:!0,kl:!0,rl:!0,device:!0},iafo:{ct:!0,query:!0,kl:!0,rl:!0,device:!0},iafi:{once:!0,kl:!0,rl:!0,device:!0,ttc:!0,av:!0,fv:!0},iag:{once:!0,ct:!0,kl:!0,rl:!0,device:!0,ttc:!0,dedupe:"clk",flagSerpReturns:!0},iacg:{once:!0,query:!0,ct:!0,kl:!0,rl:!0,kp:!0,device:!0,ttc:!0},iaoe:{once:!0,query:!0,ct:!0,kl:!0,rl:!0,kp:!0,device:!0,ttc:!0},iaob:{once:!0,ct:!0,kl:!0,rl:!0,kp:!0,device:!0},iaof:{ct:!0,kl:!0,rl:!0,device:!0},iaoi:{once:!0,ct:!0,kl:!0,rl:!0,kp:!0,device:!0,query:!0,refireWhenLoadedFromBfcache:!0,flagSerpReturns:!0},iaolc:{once:!0,ct:!0,kl:!0,rl:!0,kp:!0,device:!0,query:!0,ttc:!0,dedupe:"ttc",flagSerpReturns:!0},iaui:{once:!0,ct:!0,kl:!0,rl:!0,device:!0,query:!0},iaop:{ct:!0,kl:!0,rl:!0,device:!0,query:!0},iaoq:{once:!0,ct:!0,kl:!0,rl:!0,kp:!0,device:!0},iaor:{once:!0,ct:!0,kl:!0,rl:!0,kp:!0,device:!0,query:!0},ias:{once:!0,ct:!0,kl:!0,rl:!0,device:!0,query:!0},iasm:{once:!0,ct:!0,kl:!0,rl:!0,device:!0},iatab:{once:!0,device:!0},iadrc:{once:!0,kl:!0,rl:!0,device:!0},iawbs:{once:!0,device:!0},iatel:{once:!0,device:!0},iahrs:{once:!0,device:!0},iatc:{once:!0,query:!0,ct:!0,kl:!0,rl:!0,device:!0,ttc:!0},iahic:{once:!0,ct:!0,kl:!0,rl:!0},iahmc:{once:!0,ct:!0,kl:!0,rl:!0},iahmf:{once:!0,query:!0},jse:{once:!0,ct:!0},depr:{},old:{},sppl:{once:!0},sps:{once:!0},sptb:{once:!0},atbbsb:{once:!0},atbbl:{once:!0},hpec:{once:!0},hptc:{once:!0},atbhtc:{once:!0},atbbc:{once:!0},atb0c:{once:!0},atb1c:{once:!0},atb2c:{once:!0},atb3c:{once:!0},atbfc:{once:!0},atbfi:{once:!0,refireWhenLoadedFromBfcache:!0},faqi:{once:!0,refireWhenLoadedFromBfcache:!0},faqc:{once:!0},faqa:{once:!0},hi:{once:!0,refireWhenLoadedFromBfcache:!0},hs:{once:!0},hst:{once:!0},nb:{once:!0},nlms:{once:!0},nli:{once:!0},nlc:{once:!0},nlx:{once:!0},nlmx:{once:!0},nlxs:{once:!0},pollnew:{once:!0},pollold:{once:!0},pollr:{once:!0},pollret:{once:!0},nlis:{once:!0},iconf:{once:!0},readsb:{once:!1},perf:{once:!1,device:!0},lctai:{once:!0,device:!0,kl:!0,rl:!0,ct:!0,query:!0},lti:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},ltc:{once:!1,device:!0,kl:!0,rl:!0,ct:!0},lctac:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lctan:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lctar:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lctax:{once:!0,device:!0,kl:!0,rl:!0,ct:!0,query:!0},lctah:{once:!1,device:!0,kl:!0,rl:!0,ct:!0},lctas:{device:!0,kl:!0,rl:!0,ct:!0},lcx:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lfmi:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lfmc:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lfmx:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lmc:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lhc:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lupd:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lups:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lupe:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lupp:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lsle:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},cope:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},cobdx:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},cobde:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},coe:{device:!0,kl:!0,rl:!0,ct:!0},cos:{device:!0,kl:!0,rl:!0,ct:!0},comn:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lcco:{device:!0,kl:!0,rl:!0,ct:!0},lcce:{device:!0,kl:!0,rl:!0,ct:!0},fic:{once:!0},lmm:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lmmh:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lmms:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lmgc:{once:!0,device:!0,kl:!0,rl:!0,ct:!0},lstc:{device:!0,kl:!0,rl:!0,ct:!0},sui:{once:!0},suc:{once:!0},sux:{once:!0},sad:{once:!0},sda:{},sdd:{once:!0},sdr:{},set:{once:!0},vi:{once:!0},wceui:{once:!0},wceud:{once:!0},wceuo:{once:!0},wcmi:{once:!0},wcmc:{once:!0},wcmd:{once:!0},tqadb:{once:!0},tqadbe:{once:!0},tqadbm:{once:!0},tqadbmd:{once:!0},tqadbr:{},tqadbf:{once:!0},tqadbs:{once:!0},tqadbt:{once:!0},tqpae:{once:!0,query:!0,ttc:!0},trmx:{},staticerr:{once:!0},stockslatency:{once:!0},stockserror:{once:!0},stocksintradayerror:{once:!0},sportsreqerror:{device:!0,ct:!0},sportsunkstatus:{query:!0,once:!0},stocksyearerror:{once:!0},webvitals:{debugCache:!0},calculator_error:{once:!0},serp_retention_survey_impression:{once:!0},serp_retention_survey_dismiss:{once:!0},serp_retention_survey_submit:{once:!0},serp_retention_survey_resubmit:{once:!0},localstoragelifespan:{once:!0},atbheadercta:{once:!0},debugdeeprequests:{once:!0}},function(e){e.Utils.Pixel=function(e){this._backData=e,this._pixels=DDG.Data.Pixels,this._queuedFire=[],this._queuedFireMinimal=[],this._sentPixels=[],this._refireData=[],this._backData&&!this._backData.ready&&this._backData.once("ready",function(){this._queuedFire.forEach((function(e){this.fire.apply(this,e)}),this),this._queuedFire=[],this._queuedFireMinimal.forEach((function(e){this.fireMinimal.apply(this,e)}),this),this._queuedFireMinimal=[]}.bind(this))},e.Utils.Pixel.prototype=$.extend({},{fire:function(){if(!this._backData||this._backData.ready){var t,n,i,a=Array.prototype.slice.call(arguments),r=this._getPixelConfig(a),o=a[a.length-1],s="object"==typeof o&&"canRefireWhenLoadedFromBfcache"in o?a.pop():{};if(r){r.refireWhenLoadedFromBfcache&&this._refireData.push({args:a.slice(),pathname:window.location.pathname,state:Object.assign({},e.history.curState),canRefireWhenLoadedFromBfcache:s.canRefireWhenLoadedFromBfcache}),r.ttc&&a[0]&&"pae"!=a[0]&&"tqpae"!=a[0]&&(DDG.pixel.fire("pae"),DDG.pixel.fireMinimal("tqpae",this.getTqpaeParams()));var l=this.getConfiguredParameters(r);e.opensearch&&(l.g=e.opensearch.variant+e.opensearch.atbVariant),e.opensearch&&e.opensearch.installed.version&&(l.atb=e.opensearch.installed.version,e.opensearch.installed.atbVariant&&(l.atbva=e.opensearch.installed.atbVariant),e.opensearch.installed.variant&&(l.va=e.opensearch.installed.variant),e.opensearch.installed.experimentPixelId&&(l.atbexp=e.opensearch.installed.experimentPixelId));var c=e.modulesLayout&&e.modulesLayout.getModuleInfo(e.Models.ModulesPositions.SIDE);if(c&&c.length&&(l.sm=c.join(",")),this._backData&&(this._backData.isBounceBack()&&(l.bkl=this._backData.getId()),r.serializeBackData&&this._backData.isBounceBack())){var u=this._backData.getData();for(var d in u)if("object"==typeof u[d])for(var h in u[d])l["bkd_"+d+"_"+h]=u[d][h];else l["bkd_"+d]=u[d]}e.search&&e.search.userLocationExp&&(l.ulexp=e.search.userLocationExp),e.history&&e.history.get("norw")&&(l.norw="1"),r.djsd&&e.deep&&(l.djsd=e.deep.deferred?1:0),e.deep&&e.deep.pageLayoutSummary&&(l.blay=e.deep.pageLayoutSummary),e.deep&&e.deep.signalSummary&&(l.dsig=e.deep.signalSummary),e.index&&e.index.signalSummary&&(l.isig=e.index.signalSummary),r.av&&e.duckbar&&e.duckbar.activeTabId&&(l.av=e.duckbar.activeTabId),a.push(l),t=r.once,n=r.dedupe,i=!r.hasOwnProperty("beacon")||r.beacon}else a.unshift("depr");var p=null;return window.Bootstrap.searchExperiments&&(p=window.Bootstrap.searchExperiments.getPixelParameters()),this._send(a,p,{once:t,dedupe:n,beacon:i,preRefireId:arguments[0]})}this._queuedFire.push(Array.prototype.slice.call(arguments))},refire:function(){this._sentPixels=[];var t=this._refireData;return this._refireData=[],t.map((function(t){var n=t.args,i=t.state,a=t.pathname,r=e.history.curState;if((!t.canRefireWhenLoadedFromBfcache||t.canRefireWhenLoadedFromBfcache())&&a===window.location.pathname&&Object.keys(i).every((function(e){return r.hasOwnProperty(e)&&i[e]===r[e]})))return this.fire.apply(this,n.concat({canRefireWhenLoadedFromBfcache:t.canRefireWhenLoadedFromBfcache}))}),this).filter(Boolean)},fireMinimal:function(){if(!this._backData||this._backData.ready){var e,t,n=Array.prototype.slice.call(arguments),i=this._getPixelConfig(n);if(i){var a=this.getConfiguredParameters(i);n.push(a),e=i.once,t=i.dedupe}else n.unshift("depr");return this._send(n,null,{once:e,dedupe:t})}this._queuedFireMinimal.push(Array.prototype.slice.call(arguments))},getConfiguredParameters:function(t){var n={};if(t.query&&("function"==typeof DDG.get_query_encoded?n.q=DDG.get_query_encoded():window.rq&&(n.q=window.rq)),t.ttc&&this._addTimeToClick(n),t.ct&&window.ct&&(n.ct=window.ct),t.device&&(n.d=e.device.pixelId),t.kl&&(n.kl=e.settings.get("kl")),t.rl&&window.rl&&(n.rl=window.rl),t.kp&&(n.kp=e.settings.get("kp")),t.qsParam&&e.history.get(t.qsParam)&&(n.qsp=e.history.get(t.qsParam)),t.df&&window.df&&(n.df=e.search.isCustomDateFilter()?"c":window.df),t.flagSerpReturns&&this._backData&&(n.serp_return=this._backData.isSerpReturn()?1:0),t.organicAboveFold&&(n.organic_above_fold=this.getOrganicAboveFold()?1:0),t.debugCache){if(n.has_performance="0",window.performance&&window.performance.getEntriesByType){var i=window.performance.getEntriesByType("navigation");if(i){var a=i[0];a&&a.serverTiming&&(n.has_performance="1",n.is_cached=a.serverTiming.length>0?"0":"1",n.navigation_type=a.type||"")}}n.has_back_data="0",this._backData&&(n.has_back_data="1",n.is_loaded_from_bfcache=this._backData.isLoadedFromBfCache?"1":"0",n.is_bounce_back=this._backData.isBounceBack()?"1":"0")}if(t.addPreBounceSearchExperimentParams&&this._backData&&this._backData.isBounceBack()){var r=this._backData.getData()[window.Bootstrap.BACKDATA_PARAM]||{};Object.keys(r).forEach((function(e){var t=r[e];n["prebounce_"+e]=t}))}return n},getOrganicAboveFold:function(){var e=document.querySelector("#r1-0 h2");if(!e)return!1;var t=e.getBoundingClientRect();return window.innerHeight-window.pageYOffset>t.top+t.height},getTqpaeParams:function(){var t={},n=e.deep.url;if(!n)return t;var i=n.replace("/d.js?","").split("&").reduce((function(e,t){var n=t.split("="),i=n[0],a=n[1];return e[i]=a,e}),{});return i.a&&(t.a=i.a),i.ia&&(t.ia=i.ia),i.ct&&(t.ct=i.ct),i.ex&&(t.ex=i.ex),i.kl&&(t.kl=i.kl),i.l&&(t.l=i.l),i.p&&(t.p=i.p),i.s&&(t.s=i.s),i.t&&(t.t=i.t),i.ss_mkt&&(t.ss_mkt=i.ss_mkt),t},sanitizeUrl:function(e){return e.replace(/^\/|\/$/,"").replace(/[^a-z0-9_-]+/gi,"-")},_addTimeToClick:function(e){var t=Date.now();e.ttc=t-(this._backData&&this._backData.timeLoadedFromBfCache||DDG.deep.finished||t)},_send:function(t,n,i){for(var a,r=Math.ceil(1e7*Math.random()),o="",s="",l="",c={},u=0;u-1)return;this._sentPixels.push(f)}if(n&&(l+="&"+n),!(e.duckpan||e.device&&e.device.isDDGIgnore)){var _=(e.services.getURL("pixels")+o+"?"+r+l).replace(/"/g,"");try{window.navigator.sendBeacon&&i.beacon?window.navigator.sendBeacon(_):$('')}catch(e){}return _}},_getPixelConfig:function(e){var t=e[0],n=this._pixels[t];if(n)return"ad"===t&&(n=e.includes("c")?Object.assign({},n,{ttc:!0}):Object.assign({},n,{refireWhenLoadedFromBfcache:!0})),n}}),e.pixel=new e.Utils.Pixel}(DDG),function(e){e.Utils.ErrorHandler=function(){var e;for(window.onerror=this._onError.bind(this);e=window.Bootstrap.errorArguments.pop();)this._onError.apply(this,e)},e.Utils.ErrorHandler.prototype={_onError:function(t,n,i,a,r,o){if(t&&": "!==t&&!t.match(/Script error|Cannot read property \'style\'|atomicFindClose|bestpriceninja|ModifyLinkTargets|browserToolsLoaded|__gCrWeb|mobiGetClick|savingsslider|DealPly|processSiteSource|symcBFPerform|Papa_|ByTagName\(\'video\'|setTimeout[0-9]+ is undefined/)&&n&&n.match(/^http/i)&&!n.match(/checkpoint|main\.js/)&&!(t.match("contentWindow")&&"Android"===e.device.label||t.match(/unexpected end of input/i)&&e.device.ua.match(/acheetahi/i))){var s=o?o.toLowerCase():this._getCategory(n,i);try{var l={msg:encodeURIComponent(t),url:encodeURIComponent(this._removeQuery(n)),line:i,col:a,didnotloadscripts:encodeURIComponent((window.didNotLoadScripts||[]).join(","))};e.pixel.fire("jse",s,l)}catch(e){var c=Math.ceil(1e7*Math.random());$('')}}},_getCategory:function(e,t){var n,i;return e.match(/\/\?q=/)?(n="view",t&&t>1&&(n="ext")):n=e.match(/\/share\/spice/)?"spice":e.match(/\/share\/goodie/)?"goodie":e.match(/\/js\/spice/)?"spiceupstream":/\/b\d+\.js/.test(e)?"bootstrap":e.match(/\/d\d+\.js/)?"base":e.match(/\/g\d+\.js/)?"serp":e.match(/\/t\d+\.js/)?"static":e.match(/\/util\/u\d+\.js/)?"util":e.match(/\/js\/.*\.js/)||e.match(/\/lib\/l\d+\.js/)?"lib":(i=e.match(/\/wbm(m|l)\d+\.js/))?"webpack_main_"+("m"===i[1]?"modern":"legacy"):(i=e.match(/\/wbv(m|l)\d+\.js/))?"webpack_vendors_"+("m"===i[1]?"modern":"legacy"):/\/bundle\.chunk\.(.*)\.(.*)\.js/.test(e)?"webpack_chunk":(i=e.match(/\/([a-z]+)\.js/))&&i[1]||"u",n},_removeQuery:function(e){try{var t=new URL(e);return t.searchParams.delete("q"),t.href}catch(t){var n=e.split("?"),i="";return 2===n.length&&(i=n[1].split("&").filter((function(e){return!("q"===e||0===e.indexOf("q="))})).join("&")),n[0]+(i?"?"+i:"")}}}}(DDG),function(e){e.embed={callback:null,id:"embed",_hasValidResult:function(e){return e&&e.description&&e.image&&e.provider&&e.title&&e.icon&&e.url&&e.tab_name},add:function(t){t&&this._hasValidResult(t)?Spice.add({id:this.id,name:l(t.tab_name),data:t,signal:t.signal,meta:{sourceName:t.provider,sourceUrl:t.url,sourceIconUrl:t.icon},templates:{group:"info",options:{moreAt:!0}}}):e.duckbar.failed("embed")}}}(DDG),function(e,t){t.SM2_DEFER=!0;var n,i=0,a=0,r=e.audio={requires:function(){return i?!n&&window.SoundManager?(n||((n=window.soundManager=new SoundManager).url="/soundmanager2/swf",n.flashVersion=9,n.useFlashBlock=!1,n.useHTML5Audio=!0,n.ontimeout((function(){a=1,r.ready=0})),n.beginDelayedInit(),n.onready((function(){a=1,r.ready=1}))),!1):!(!n||!a)&&r:(nrj("soundmanager2/script/soundmanager2-nodebug-jsmin.js",1),i=1,!1)},play:function(e,t,i){if(!r.ready)return!1;i=i||{};var a=n.getSoundById(e);return a?a.play(i):(i.onloadstart&&i.onloadstart(),a=n.createSound($.extend(i,{id:e,url:t}))),a},pause:function(e){if(!r.ready)return!1;var t=n.getSoundById(e);t&&t.pause()},stop:function(e){if(!r.ready)return!1;var t=n.getSoundById(e);t?t.stop():n.stopAll()}}}(DDG,this),function(e){var t={audio:{require:DDG.audio.requires},mapkit:{require:function(){return window.mapkit||n("mapkit")},load:function(){nrj("/js/mapkit/mapkit.5.75.4.js",1)}},settings:{require:function(){return DDG.Views.Settings.Main||n("settings")},load:function(){nrj("/s2484.js",1)}},"moment.js":{require:function(){return window.moment||n("moment.js")},load:function(){nrj("/js/moment.2.9.0.min.js",1)}},"masonry.js":{require:function(){return window.Masonry||n("masonry.js")},load:function(){nrj("/js/masonry.pkgd.min.js",1)}},mathquill:{require:function(){return $.fn.mathquill||n("mathquill")},load:function(){nrj("/js/mathquill-0.9.4/mathquill.min.js",1),nrc("/js/mathquill-0.9.4/mathquill.css",1)}},sports:{require:function(){return window.ddg_spice_sports_games||n("sports")},load:function(){nrj(DDG.get_asset_path("sports","sports.spice.js"),1)}},velocity:{require:function(){return $.Velocity||n("velocity")},load:function(){nrj("/js/velocity-1.5.0.min.js",1)}},flashDetect:{require:function(){return window.FlashDetect||n("flashDetect")},load:function(){nrj("/js/flashdetect_modified.js",1)}},"chart.js":{require:function(){return window.Chart||n("chart.js")},load:function(){nrj("/js/Chart-2.8.0.min.js",1)}},pikaday:{require:function(){return $.fn.pikaday||n("pikaday")},load:function(){nrj("/js/Pikaday-1.4.0/pikaday.min.js",1),nrc("/js/Pikaday-1.4.0/css/pikaday.min.css",1)}},prettydiff:{require:function(){return window.prettydiff||n("prettydiff")},load:function(){nrj("/js/prettydiff.js",1)}},jsonlint:{require:function(){return window.jsonlint||n("jsonlint")},load:function(){nrj("/js/jsonlint.js",1)}},extensionsuccess:{require:function(){return window.extensionsuccess||n("extensionsuccess")},load:function(){nrj("/js/extensionsuccess.min.js?v=6",1)}},prettify:{require:function(){return window.prettyPrint||n("prettify")},load:function(){nrc("/js/highlight/tomorrow.css?v=2"),nrc("/js/highlight/tomorrow-night-eighties.css"),nrj("/js/highlight/prettify.min.js",1)}},"sass.js":{require:function(){return window.Sass||n("sass.js")},load:function(){nrj("/js/sass.js/sass.sync.min.js")}},"js-beautify":{require:function(){return window.js_beautify||n("js-beautify")},load:function(){nrj("/js/js-beautify/beautify.min.js")}},"html-beautify":{require:function(){return window.html_beautify||n("html-beautify")},load:function(){nrj("/js/js-beautify/beautify-html.min.js")}},"math.js":{require:function(){return window.math||n("math.js")},load:function(){nrj("/js/math-3.13.3.min.js")}},"twitter-text":{require:function(){return window.twttr||n("twitter-text")},load:function(){nrj("/js/twitter-text-2.0.0.min.js")}},hammer:{require:function(){return window.Hammer||n("hammer")},load:function(){nrj("/js/build/hammer-v2.0.8.min.js")}}},n=function(e){var n=t[e];if(!n||n.required)return!1;n.load(),n.required=!0},i=function(n,i){var a=t[n],r=a&&a.require;if("function"!=typeof r)return n.match(/^\//)?void $.ajax({url:n,cache:!0,dataType:"script",success:i}):i();var o=r();if(o)return i(o);setTimeout(e.require.bind(this,n,i),25)};e.require=function(e,t){if($.isArray(e)){var n,a,r=[];$.each(e,(function(e,t){i(t,(function(t){r[e]=t}))})),n=setTimeout((function(){e.map((function(e,t){return e+(r[t]?":loaded":":timeout")}));clearInterval(a)}),5e3),a=setInterval((function(){var i=!0;$.each(e,(function(e){i&&!r[e]&&(i=!1)})),i&&(clearInterval(n),clearInterval(a),t.apply(null,r))}),25)}else i(e,t)}}(DDG),function(){for(var e,t=["ln","lnp","ld","ldn","ldp","ldnp"],n=0;e=t[n];n+=1)this[e]||(this[e]=function(e){return e});function i(e,t){return e.replace(/%s/g,(function(){return t.shift()}))}this.l||(this.l=function(e){var t=Array.prototype.slice.call(arguments,1);return i(e,t)}),this.lp||(this.lp=function(e,t){var n=Array.prototype.slice.call(arguments,2);return i(t,n)}),this.locale_data&&this.locale_data.duckduckgo||(this.locale_data.duckduckgo={"":""},this.ltd&&this.ltd("duckduckgo"))}(window),function(e){var t=[];DDG.ready=function(e,n){if($.isReady)return e();n?t.unshift(e):t.push(e)},$(document).ready((function(){for(var e;e=t.shift();)e()}))}(),function(e){e.services={domain:"duckduckgo.com",icons:{sub:"external-content",path:"/ip3/"},images:{sub:"external-content",path:"/iu/"},externalImages:{sub:"external-content",path:"/ssv2/"},autocomplete:{path:"/ac/",useSameHost:!0},imageReports:{sub:"reports",path:"/collect.js"},mapkit:{path:"/mapkit/"},reports:{sub:"reports",path:"/collect.js?type=feedback",useSameHost:!0},pixels:{sub:"improving",skipDev:!0,path:"/t/"},local:{path:"/local.js?q=",skipDev:!0,useSameHost:!0},translation:{path:"/translation.js",useSameHost:!0},getURL:function(t){var n=this[t],i=e.isDev&&n.skipDev,a=n.useSameHost||e.getProperty(e,"device.isOnion")||i,r=n.path;return a||(r="//",n.sub&&!i&&(r+=n.sub+"."),r+=this.domain+n.path),r},getLinksURL:function(e){return window.Bootstrap.getLinksURL(e,this._getCurrentHost())},_getCurrentHost:function(){return window.location.host}}}(DDG),DDG.Utils.Events={bindEvents:function(e){this._bEvents||(this._bEvents=[]);for(var t,n=0;t=e[n];n++)if(!(t.length<2)&&t[0]&&t[1]&&t[2]){var i={bound:t[2].bind(this),evt:t};"string"==typeof t[0]?this.$&&this.$(t[0]).on(t[1],i.bound):t[0].on(t[1],i.bound),this._bEvents.push(i)}},unbindEvents:function(){for(;this._bEvents&&this._bEvents.length;){var e=this._bEvents[this._bEvents.length-1],t=e.evt;t&&("string"==typeof t[0]?this.$&&this.$(t[0]).off(t[1],e.bound):t[0].off(t[1],e.bound)),this._bEvents.pop()}this._bEvents=null}},function(e){var t="historyUtilData";e.Utils.History=function(e){this.path=window.location.pathname,this._history=e,0===this.path.indexOf("//")&&(this.path=this.path.substring(1)),this.curState=window.Bootstrap.getAllHistoryState(),this._callbacks=[],this._deviceSupportsHistory=this._history&&this._history.pushState&&this._history.replaceState},e.Utils.History.KEY=t,e.Utils.History.prototype=$.extend({},EventEmitter2.prototype,{enablePushState:function(e){this._deviceSupportsHistory&&!this._pushStateEnabled&&(this._pushStateEnabled=!0,this._shouldPushFn=e,window.addEventListener("popstate",this._onPopState.bind(this)))},get:function(e,n){return n?this._history.state&&this._history.state[t]?this._history.state[t][e]:null:this.curState[e]},getNamespace:function(e){var t={};for(var n in this.curState)this.curState.hasOwnProperty(n)&&0===n.indexOf(e)&&(t[n]=this.curState[n]);return t},set:function(e,t,n){if("object"!=typeof e)this.curState[e]=t,this._updatePath(this._shouldPushState(e,t),n);else for(var i in"function"==typeof t&&(n=t),e)this.set(i,e[i],n)},clear:function(){var e,t=Array.prototype.slice.call(arguments),n=!1;"function"==typeof t[t.length-1]&&(e=t.pop());for(var i=0;i=a&&t.offset.top-aa.offset.top))break}n.splice(i,0,e)}else n.push(e)}e.ImageLoader={make:function(e){for(var t,n=d.createElement("img"),i=0;t=a[i];i++)e[t]&&(n[t]=e[t]);return e.lazyLoad?this.register(n,e.src,e.lazyLoad):n.src=e.src,n},register:function(e,t,i){var a={src:t,el:e,trigger:i||"none"};i&&"scrollY"===i?r(a)?o(a)||s(a):function(e){n.push(e)}(a):o(a)||s(a)},registerAll:function(e,t,n){if(e&&e.length){n=n||{};for(var i=0;i4){this._lastMoves.shift();var i=this._lastMoves[0],a=i[0],r=i[1],o=n-i[2],s=this._x-a,l=this._y-r;this._velocityX=o?s/o:0,this._velocityY=o?l/o:0,this._axis=Math.abs(s)>Math.abs(l)?"x":"y",this._direction="x"===this._axis?s>=0?"right":"left":l>=0?"down":"up"}this._multitouch=!1},_pinch:function(e,t,n,i){var a=this._getDistance(e,t,n,i);this._pinchDistance||(this._pinchDistance=a),this._pinchDelta=Math.abs(a/this._pinchDistance),this._pinchDistance=a,this._multitouch=!0},_getDistance:function(e,t,n,i){var a=e-n,r=t-i;return Math.sqrt(a*a+r*r)},_getEventData:function(e){return{e:e,axis:this._axis,multitouch:this._multitouch,direction:this._direction,velocityX:this._velocityX,velocityY:this._velocityY,distX:this._distX,distY:this._distY,deltaX:this._deltaX,deltaY:this._deltaY,pinchDist:this._pinchDistance,pinchDelta:this._pinchDelta}},_getNumTouches:function(e){var t=e.originalEvent;return t&&t.touches&&t.touches.length},_handleTouches:function(e){var t=e.originalEvent;t&&t.touches&&t.touches.length?t.touches.length>1?this._pinch(t.touches[0].clientX,t.touches[0].clientY,t.touches[1].clientX,t.touches[1].clientY):this._multitouch||this._pan(t.touches[0].clientX,t.touches[0].clientY):this._pan(e.clientX,e.clientY)},_onTouchStart:function(n){this.numTouches=this._getNumTouches(n)||1,this._startTime||(this.$el.addClass(t),this._startTime=(new Date).getTime(),e.$doc.on("touchmove.gestures",this._onTouchMove.bind(this)),e.$doc.on("touchend.gestures",this._onTouchEnd.bind(this))),n.target&&"A"===n.target.nodeName||n.preventDefault(),this._handleTouches(n);var i=this._multitouch?"pinchstart":"panstart",a=this._getEventData(n);this.emit(i,a)},_onTouchMove:function(e){e.preventDefault(),this.numTouches=this._getNumTouches(e)||1,this._handleTouches(e);var t=this._multitouch?"pinchmove":"panmove",n=this._getEventData(e);this.emit(t,n)},_onTouchEnd:function(e){if(this.numTouches=this._getNumTouches(e)||0,!(this.numTouches>0)){var t=Math.abs("x"===this._axis?this._distX:this._distY),n="x"===this._axis?this._velocityX:this._velocityY,i=t<20,a=t>80||n>.5,r=this._getEventData(e);if(this._multitouch)this.emit("pinchend",r);else{if(a&&!i)r.swiped=!0,this.emit("swipe",r);else if(i){var o=(new Date).getTime();this._lastTapTime&&o-this._lastTapTime<300?(this.emit("double-tap",r),delete this._lastTapTime):(this._lastTapTime=o,this.emit("tap",r))}this.emit("panend",r)}this.reset()}}})}(DDG),function(e){var t=["Detail","GridTiles"],n={images:["Images"],videos:["Videos"],news:["GridTiles"],products:["Products"]},i=["About"],a={images:["Images"],maps_maps:["Maps"],news:["Carousel"],videos:["Carousel"],recipes:["Carousel"],products:["ProductsCarousel"],autoads:["AutoAdsCarousel"],maps_places:["Places"],directions:["Directions"],forecast:["Forecast"],related_searches:["RelatedSearches"],translations:["Translations"],covid19:["Covid19"]},r=["VerticalLinks"],o={};e.Utils.TabViewBuilder=function(){this._moduleSnippetViews={maps_places:e.Views.Places.PlaceSnippet}},e.Utils.TabViewBuilder.prototype=$.extend({},{build:function(s){this.model=s.model,this._viewRoot=this.model.viewRootPath?e.getProperty(e,this.model.viewRootPath):e.Views.AnswerBar.Answers,this.model.view?this._availableViews=[this.model.view]:$.isArray(this.model.views)?this._availableViews=this.model.views:this.model.isModule?"#zero_click_wrapper"===s.appendTo.selector?(e.device.isMobile||this.model.set("expanded",!0),this._availableViews=n[this.model.id]||t):(this._availableViews=a[this.model.id]||i,this._viewRoot=e.Views.Modules):this.model.isVertical?(this._availableViews=o[this.model.id]||r,this._viewRoot=e.Views.Verticals):this._availableViews=n[this.model.id]||t;var l=this._getValidClass();return!!l&&new l({model:this.model,appendTo:s.appendTo,events:s.events})},buildSnippet:function(e){var t=this._moduleSnippetViews[e.answer.id];return!!t&&new t({prependTo:e.prependTo,answer:e.answer})},_getValidClass:function(){if(void 0===this._viewIndex)this._viewIndex=0;else{if(!this._availableViews[this._viewIndex+1])return!1;this._viewIndex++}return this._isCurrentClassValid()?this._getCurrentViewClass():this._getValidClass()},_isCurrentClassValid:function(){var e=this._getCurrentViewClass();return e.prototype.isValid.call({requiredTemplates:e.prototype.requiredTemplates,maxItems:e.prototype.maxItems,model:this.model})},_getCurrentViewClass:function(){var e=this._availableViews[this._viewIndex];return this._viewRoot[e]}})}(DDG),function(){var e={"sort:date":1,"s:d":1,"!safeoff":1},t=/[';,.]/g,n=/[\s-]+/;DDG.getRelevants=function(e){void 0===e.num&&(e.num=e.candidates.length);var t=[];DDG.get_query().replace("'",""),e.candidates=e.candidates.sort(e.comparator);for(var n,i=0;n=e.candidates[i];i++)if(DDG.isRelevant(n.comparable,e.skipArray,e.minWordLength,e.strict)){if(i>e.num)return t;t.push(n)}return t},DDG.isRelevant=function(e,t,n,i){return DDG.stringsRelevant(e.toLowerCase(),DDG.get_query().toLowerCase(),t,n,i)},DDG.stringsRelevant=function(i,a,r,o,s){if(r instanceof Array){for(var l={},c=0;c=o&&!r[y]&&g.push(y)}for(c=0;c=o&&!r[y]&&f.push(y)}p=g,m=f,s?p.length>=m.length?(d=m,h=p):(d=p,h=m):p.length>=m.length?(d=p,h=m):(d=m,h=p);var _={},v={},k=0,b=0;for(c=0;c0&&_.length<=2&&k==_.length||_.length>2&&k>=_.length-1}}(),function(e){function t(e){return e&&e.toLowerCase().replace(/\s+/g,"")}e.Utils.LocalAPIWrapper=function(){},e.Utils.LocalAPIWrapper.prototype={getMapsResponse:function(e){var t={};if(!e||!e.features||!e.features.length)return t;var n=this._getMapsSource(e);return"mapkit"===n?t=this._getMapkitMapsResponse(e):"wikipedia"===n&&(t=this._getWikipediaMapsResponse(e)),t},getPlacesResponse:function(n){if(!n)return null;if(!n.results||!n.results.length)return this.getEmptyResponse(n);var i=n.results[0].engine;return"TripAdvisor"===i&&(i="Tripadvisor"),{sourceName:i,sourceId:t(i),sourceUrl:n.more_at,signal:n.signal,proximity:n.proximity,local_source:n.local_source,geoip:{lat:n.geoip_lat,lon:n.geoip_lon},obfusLoc:{lat:n.obfus_lat,lon:n.obfus_lon},distance:n.distance,biz_score:n.biz_score,cat_score:n.cat_score,chain_score:n.chain_score,delta:n.delta,matches_location:n.matches_location,review_count:n.review_count,trigger_count:n.trigger_count,wiki_entity:n.wiki_entity,requery:e.Utils.Strings.decodeQueryAndStripHTML(n.queryEncoded),query:e.Utils.Strings.decodeQueryAndStripHTML(n.queryEncoded),query_special_symbols:n.query_special_symbols||[],results:n.results.map(this._getPlaceItemResponse.bind(this)),places_filtered:n.places_filtered}},getDirectionsResponse:function(e){return{answerType:"Directions",id:"maps_directions",name:"Directions",results:[{start:e.origin,end:e.destination,transportType:e.transport_type,user_location:e.user_location}]}},getPlaceReviewsURL:function(e){if(e.url&&e.url.length){if("Yelp"===e.source||"Yelp"===e.engine){var t;e.review_detail&&e.review_detail.length?t=e.review_detail[0]:e.reviews&&e.reviews.length&&(t=e.reviews[0]);var n=t?"&hrid="+t.id:"";return e.url+n}return"Tripadvisor"===e.source||"Tripadvisor"===e.engine?e.url+"#REVIEWS":""}},getEmptyResponse:function(t){return t?{geoip:{lat:t.geoip_lat,lon:t.geoip_lon},parsed_query:t.parsed_query,query:e.Utils.Strings.decodeQueryAndStripHTML(t.queryEncoded),isEmptyResponse:!0}:null},_getMapkitMapsResponse:function(t){var n=t.features.shift();return!(n.relevance<.9)||n.place_name&&e.isRelevant(n.place_name.toLowerCase(),["directions","map","maps","st","street","ave","avenue","dr","drive","pl","place","apt","suite","latitude","longitude","zip","code","postal"])?{src:"mapkit",responseType:t.response_type,query:e.Utils.Strings.decodeQueryAndStripHTML(t.queryEncoded),results:[this._getMapkitMapsItemResponse(n)]}:{src:"mapkit",results:[]}},_getPlaceItemResponse:function(n,i){var a={};n.id&&n.id.length&&(a.itemId=n.id),n.name&&n.name.length&&(a.name=n.name),a.number=i+1,n.address&&n.address.length&&(a.address=n.address),n.address_lines&&n.address_lines.length&&(a.addressLines=n.address_lines),n.phone&&n.phone.length&&(a.phone=n.phone),n.display_phone&&n.display_phone.length&&(a.displayPhone=n.display_phone);var r=n.coordinates;return r&&(a.lat=parseFloat(r.latitude),a.lon=parseFloat(r.longitude)),n.timezone&&n.timezone.length&&(a.timezone=n.timezone),n.engine&&n.engine.length&&("TripAdvisor"===n.engine&&(n.engine="Tripadvisor"),a.source=n.engine,a.sourceId=t(a.source)),n.data_providers&&(a.dataProviders=n.data_providers),n.provider_meta&&(a.providerMeta=n.provider_meta),n.url&&n.url.length&&(a.url=n.url),n.website&&n.website.length&&(a.website=n.website),n.image&&n.image.length&&(a.image=n.image),n.photoURL&&n.photoURL.length?a.imageURL=n.photoURL:n.name&&(a.imageURL="/?q="+encodeURIComponent(n.name)+"&ia=images&iax=images"),n.thumbnails&&n.thumbnails.length&&(a.thumbnails=n.thumbnails.map((function(e){return"Yelp"===n.engine?e.replace(/ms.jpg/,"ls.jpg"):e}))),n.menu&&n.menu.length&&(a.menuURL=n.menu),n.price&&e.isNumber(n.price)&&(a.price=n.price),n.hours&&(a.hours=n.hours),n.distance&&(a.distance=n.distance),n.returned_categories&&n.returned_categories.length&&(a.categories=n.returned_categories.map((function(e){return{id:e[1],name:e[0]}}))),n.provider&&(a.provider=n.provider),n.embed&&(a.embed=n.embed),n.rating&&e.isNumber(n.rating)&&(a.rating=n.rating),"Yelp"===n.engine&&n.rating?(a.ratingImage="/assets/yelp-stars/v3/"+n.rating+".png",a.ratingImageRetina="/assets/yelp-stars/v3/"+n.rating+"@2x.png"):"Tripadvisor"===n.engine&&n.rating&&(a.ratingImage="/assets/ta-ratings/"+n.rating+".svg"),n.reviews&&e.isNumber(n.reviews)&&(a.reviewCount=n.reviews,a.numberOfReviews=n.reviews),a.reviewsURL=this.getPlaceReviewsURL(n),n.review_detail&&n.review_detail.length&&(a.reviews=n.review_detail.map((function(t){var i={};t.id&&t.id.length&&(i.id=t.id),t.rating&&e.isNumber(t.rating)&&(i.rating=t.rating),n.engine&&"Yelp"===n.engine?(i.ratingImage="/assets/yelp-stars/v3/"+t.rating+".png",i.ratingImageRetina="/assets/yelp-stars/v3/"+t.rating+"@2x.png"):"Tripadvisor"===n.engine&&(i.ratingImage="/assets/ta-ratings/"+t.rating+".svg"),t.time_created&&e.isNumber(t.time_created)&&(i.timeCreated=t.time_created),n.url&&n.url.length&&("Yelp"===n.engine?i.url=i.id?n.url+"&hrid="+i.id:n.url:"Tripadvisor"===n.engine&&(i.url=n.url+"#review_"+i.id)),t.excerpt&&t.excerpt.length&&(i.excerpt=t.excerpt);var a=t.user;return a&&(i.user={},a.id&&a.id.length&&(i.user.id=a.id),a.name&&a.name.length&&(i.user.name=a.name),a.image_url&&a.image_url.length&&(i.user.image=a.image_url),a.id&&a.id.length&&"Yelp"===n.engine&&(i.user.url="https://www.yelp.com/user_details?userid="+a.id)),i}))),a},_getMapkitMapsItemResponse:function(e){var t,n,i={};(e.context&&e.context.forEach((function(e){var t=e.id.split(".")[0];i[t]=e.text})),e.address||e.place_type&&"address"==e.place_type[0])?(t=e.place_name.split(",")[0],i.place&&i.region&&i.place!==i.region?(n=i.postcode?i.place+", "+i.region+" "+i.postcode:i.place+", "+i.region,n=i.locality?i.locality+", "+n:n):i.place?(n=i.postcode?i.place+" "+i.postcode:i.place,n=i.locality?i.locality+", "+n:n,n=i.country?n+", "+i.country:n):n=i.region?i.region===e.name?i.country:i.region+", "+i.country:i.country):(t=e.text,i.place?(t=i.place,n=i.place!==i.region?i.region:i.country):n=i.region&&name!==i.region?i.region:i.country);var a={lat:e.center[1],lon:e.center[0],name:t,address:n?t+", "+n:t};return e.bbox&&(a.bbox=e.bbox),n&&(a.addressLines=[n]),a},_getWikipediaMapsResponse:function(e){return{src:"wikipedia",results:e.features.map((function(e){return{lat:e.center[1],lon:e.center[0],bbox:e.bbox,name:e.place_name,address:e.place_name}}))}},_getMapsSource:function(e){return e&&e.features&&e.query?"mapkit":e?"wikipedia":"unknown"}}}(DDG),function(e){var t=640,n="e15a2d",i="66abff",a="DE5833",r="DE5833",o=0,s=180,l=90,c=270,u=268435456,d=85445659.44705395;function h(e){return(Math.round(e)-u)/d*180/Math.PI}function p(e){return 180*(Math.PI/2-2*Math.atan(Math.exp((Math.round(e)-u)/d)))/Math.PI}e.Utils.Mapkit=function(){this.isInitialized=!1},e.Utils.Mapkit.prototype={getAccessToken:function(e){$.ajax({dataType:"text",url:"/local.js?get_mk_access_token=1"}).done((function(t){e(t)}))},autocomplete:function(e,t){this._getInTokenQueue({type:"autocomplete",params:e,callbackFn:t})},search:function(e,t){this._getInTokenQueue({type:"search",params:e,callbackFn:t})},directions:function(e,t){this._dir_access_token?this._directions(this._dir_access_token,e,t):this.getAccessToken(function(n){this._dir_access_token=n,this._directions(this._dir_access_token,e,t)}.bind(this))},_getInTokenQueue:function(e){this._searchAccessToken?"search"===e.type?this._search(this._searchAccessToken,e.params,e.callbackFn):this._autocomplete(this._searchAccessToken,e.params,e.callbackFn):this._searchTokenPending?this._searchTokenWaitlist.push({params:e.params,callbackFn:e.callbackFn}):(this._searchTokenPending=!0,this._searchTokenWaitlist=this._searchTokenWaitlist||[],this._searchTokenWaitlist.push({params:e.params,callbackFn:e.callbackFn}),this.getAccessToken(function(t){this._searchAccessToken=t,this._searchTokenWaitlist.forEach(function(t){"search"===e.type?this._search(this._searchAccessToken,t.params,t.callbackFn):this._autocomplete(this._searchAccessToken,t.params,t.callbackFn)}.bind(this)),this._searchTokenWaitlist=[],this._searchTokenPending=!1}.bind(this)))},_autocomplete:function(e,t,n){$.ajax({url:"https://duckduckgo.com/mapkit/?https://api.apple-mapkit.com/v1/searchAutocomplete?"+$.param(t),beforeSend:function(t){t.setRequestHeader("Authorization","Bearer "+e)}}).done((function(e){n(e)}))},_search:function(e,t,n){$.ajax({url:"https://duckduckgo.com/mapkit/?https://api.apple-mapkit.com/v1/search?"+$.param(t),beforeSend:function(t){t.setRequestHeader("Authorization","Bearer "+e)}}).done((function(e){n(e)}))},_directions:function(e,t,n){$.ajax({url:"https://duckduckgo.com/mapkit/?https://api.apple-mapkit.com/v1/directions?"+$.param(t),beforeSend:function(t){t.setRequestHeader("Authorization","Bearer "+e)}}).done((function(e){n(e)}))},init:function(t){this._waitList=this._waitList||[],this.isInitialized?t(null,!0):this._waitList.push(t),this.isInitializing||this.isInitialized||(this.isInitializing=!0,e.require("mapkit",function(){if(!w.mapkit)return t(new Error("Unable to load mapkit JS"));$.ajax({dataType:"text",url:"/local.js?get_mk_token=1"}).done(function(t){var n={authorizationCallback:function(e){e(t)},language:e.device.getLocale().replace("_","-"),_proxyPrefixes:[e.services.getURL("mapkit")+"?"]};w.mapkit.init(n),e.pixel.fire("map_mki"),w.mapkit.addEventListener("configuration-change",function(e){if("Initialized"===e.status)this.isInitialized=!0,this.isInitializing=!1,this._waitList.forEach((function(e){e(null,!0)})),this._waitList=[]}.bind(this)),w.mapkit.addEventListener("error",function(e){this._waitList.forEach((function(t){t("MapKit failed to initialize: "+e.status,!1)}))}.bind(this))}.bind(this)).fail(function(){this._waitList.forEach((function(e){e("Error getting Mapkit auth token",!1)}))}.bind(this))}.bind(this)))},coord:function(e,t){return new w.mapkit.Coordinate(e,t)},regionFromLatLon:function(e,t){return new w.mapkit.CoordinateRegion(this.coord(e,t),new w.mapkit.CoordinateSpan(.005,.01))},regionFromBoundingBox:function(e){return e=this._formatBBox(e),this.boundingRegion(e).toCoordinateRegion()},regionFromGeoBbox:function(e){var t=e.top_left.split(","),n=e.bottom_right.split(","),i=[parseFloat(t[1]),parseFloat(t[0]),parseFloat(n[1]),parseFloat(n[0])];return this.regionFromBoundingBox(i)},boundingRegion:function(e){return new w.mapkit.BoundingRegion(e.maxlat,e.maxlon,e.minlat,e.minlon)},mapType:function(e){return e?w.mapkit.Map.MapTypes.Hybrid:w.mapkit.Map.MapTypes.Standard},marker:function(e,t,n,i){return new w.mapkit.Annotation(this.coord(e,t),n,i)},getStaticImageURL:function(t){var n,i={},a=t.userLoc?t.userLoc:null,r=this._getStaticMapSize(t.width||400,t.height||200),o=this._getBaseParams(r);return(t.marker||t.markers&&1===t.markers.length)&&(i=this._getSingleMarkerParams(t.marker||t.markers[0])),t.markers&&t.markers.length>1&&(i=this._getMultipleMarkersParams(t.markers,a,r)),a&&i.annotations&&(n=this._getUserLocMarkerParams(a),i.annotations.splice(-3,0,n)),i.annotations=i.annotations?JSON.stringify(i.annotations):"",e.services.getURL("externalImages")+"?"+$.param(o)+"&"+$.param(i)},getStaticEmptyMapURL:function(t){var n=this._getStaticMapSize(t.width||400,t.height||200),i=this._getBaseParams(n);return i.center=t.latitude+","+t.longitude,e.services.getURL("externalImages")+"?"+$.param(i)},getStaticDirectionsURL:function(t,n){var i,o="",s={},l=this._getStaticMapSize(n&&n.width||400,n&&n.height||200),c=this._getBaseParams(l),u=t[0],d=t[t.length-1];c.center="auto",n.colorScheme&&"string"==typeof n.colorScheme&&(c.colorScheme=n.colorScheme),s.annotations=[],i=n.colorScheme?"dark"===n.colorScheme?r:a:e.settings.isDarkTheme()?r:a,s.annotations.push({point:u[0]+","+u[1],markerStyle:"dot",color:i}),s.annotations.push({point:d[0]+","+d[1],markerStyle:"balloon",color:i}),s.annotations=JSON.stringify(s.annotations);var h=[],p=[],m=.001,g=[{points:e.geo.encodePolyline(t),strokeColor:e.settings.isDarkTheme()?"7295f6":"557ff3",lineWidth:"5"}];s.overlays=JSON.stringify(g);for(var f=(o=e.services.getURL("externalImages")+"?"+$.param(c)+"&"+$.param(s)).length>2e3;f;)h=e.geo.simplifyPolyline(t,m),p=e.geo.encodePolyline(h),g[0].points=p,s.overlays=JSON.stringify(g),m*=5,f=(o=e.services.getURL("externalImages")+"?"+$.param(c)+"&"+$.param(s)).length>2e3;return o},_getBaseParams:function(t){return{scale:e.device.isRetina?"2":"1",lang:e.device.getLang(),colorScheme:e.settings.isDarkTheme()?"dark":"light",format:"png",size:t}},_getSingleMarkerParams:function(t){var a={};return t.bbox?a.spn=this._stringifyLatLonValue(Math.min(e.geo.getLatDelta(t.bbox[1],t.bbox[3]),90))+","+this._stringifyLatLonValue(Math.min(e.geo.getLonDelta(t.bbox[0],t.bbox[2]),180)):"maps_places"===t.parentId&&(a.z=15),$.isNumeric(t.lat)&&$.isNumeric(t.lon)?a.center=this._stringifyLatLonValue(t.lat)+","+this._stringifyLatLonValue(t.lon):a.center=w.encodeURI(t.address),a.annotations=[{point:a.center,color:e.settings.isDarkTheme()?i:n}],a},_getMultipleMarkersParams:function(t,a,r){var o={},s=a?9:10,l=t.slice().sort((function(e,t){return e.number-t.number})).slice(0,s).reverse(),c=r.split("x").map((function(e){return parseInt(e,10)})),u={width:c[0],height:c[1]},d=this._getPaddedSpnAndCenter(l,u),h=this._getZoomLevelSpn(15,{lat:d.centerLat,lon:d.centerLon},u);return o.center=this._stringifyLatLonValue(d.centerLat)+","+this._stringifyLatLonValue(d.centerLon),d.latDelta<=h.latDelta&&d.lonDelta<=h.lonDelta?o.z=15:o.spn=this._stringifyLatLonValue(d.latDelta)+","+this._stringifyLatLonValue(d.lonDelta),o.annotations=l.map((function(t,a,r){var o={point:t.lat+","+t.lon,color:e.settings.isDarkTheme()?i:n};return a>=r.length-3?(o.markerStyle="balloon",o.glyphText=(r.length-a).toString()):o.markerStyle="dot",o})),o},_getPaddedSpnAndCenter:function(t,n){var i=n.width,a=n.height,r=this._formatBBox(this._bboxFromMarkers(t)),u=56*e.geo.distance({lat:r.minlat,lon:r.minlon},{lat:r.maxlat,lon:r.minlon})/a,d=56*e.geo.distance({lat:r.maxlat,lon:r.minlon},{lat:r.maxlat,lon:r.maxlon})/i,h=56*e.geo.distance({lat:r.minlat,lon:r.minlon},{lat:r.minlat,lon:r.maxlon})/i,p=t.concat([{point:{lat:r.maxlat,lon:r.minlon},distance:u,bearing:o},{point:{lat:r.maxlat,lon:r.minlon},distance:d/2,bearing:c},{point:{lat:r.maxlat,lon:r.maxlon},distance:u,bearing:o},{point:{lat:r.maxlat,lon:r.maxlon},distance:d/2,bearing:l},{point:{lat:r.minlat,lon:r.minlon},distance:u,bearing:s},{point:{lat:r.minlat,lon:r.minlon},distance:h/2,bearing:c},{point:{lat:r.minlat,lon:r.maxlon},distance:u,bearing:s},{point:{lat:r.minlat,lon:r.maxlon},distance:h/2,bearing:l}].map((function(t){return e.geo.getDestinationPoint(t.point,t.distance,t.bearing)}))),m=this._formatBBox(this._bboxFromMarkers(p)),g=Math.min(e.geo.getLatDelta(m.maxlat,m.minlat),90),f=Math.min(e.geo.getLonDelta(m.maxlon,m.minlon),180),_=e.geo.getDestinationPoint(e.geo.getCenterOfPoints(p),u/2,o);return{latDelta:g,lonDelta:f,centerLat:_.lat,centerLon:_.lon}},_getUserLocMarkerParams:function(t){return{point:t.lat+","+t.lon,color:e.settings.isDarkTheme()?"ffffff":"66abff",markerStyle:"dot"}},isUserLocNearMarkers:function(t,n,i,a){if(!t)return!1;var r=i.slice(),o=e.geo.intersects(t,n),s=e.geo.near(t,r,5);return a&&s||o},_formatBBox:function(e){var t=e;return $.isArray(e)&&(t={minlon:parseFloat(e[0]),maxlat:parseFloat(e[1]),maxlon:parseFloat(e[2]),minlat:parseFloat(e[3])}),t},_bboxFromMarkers:function(e){var t=90,n=-90,i=180,a=-180;return e.forEach((function(e){t=Math.min(t,e.lat),n=Math.max(n,e.lat),i=Math.min(i,e.lon),a=Math.max(a,e.lon)})),[i,n,a,t]},_getStaticMapSize:function(e,n){var i,a,r=e/n;return e>t||n>t?e>n?a=(i=t)/r:n>e?i=(a=t)*r:(i=t,a=t):(i=e,a=n),Math.round(i)+"x"+Math.round(a)},_stringifyLatLonValue:function(e){return"number"==typeof e?parseFloat(e.toFixed(4)).toString():e},_getZoomLevelSpn:function(e,t,n){var i,a,r=(i=t.lon,Math.round(u+d*i*Math.PI/180)),o=(a=t.lat,Math.round(u-d*Math.log((1+Math.sin(a*Math.PI/180))/(1-Math.sin(a*Math.PI/180)))/2)),s=20-(e-1),l=Math.pow(2,s),c=n.width*l,m=n.height*l,g=r-c/2,f=o-m/2,_=h(g),v=h(g+c)-_,k=p(f);return{latDelta:-1*(p(f+m)-k),lonDelta:v}}}}(DDG),DDG.Data.templates={defaultOptions:{price:!0,brand:!0,rating:!0,ratingText:!0,moreAt:!0,content:!1},groups:{base:{item:"base_item",detail:"base_detail",options:{price:!1,brand:!1,rating:!1,ratingText:!1,rowHighlight:!1,keySpacing:!1,moreAt:!1}},text:{item:"text_item",detail:"text_detail"},info:{item:"basic_image_item",detail:"basic_info_detail",options:{moreAt:!0,aux:!1}},products:{item:"products_item",detail:"products_detail",item_detail:"products_item_detail",wrap_detail:"base_detail",options:{rating:!0,price:!0,brand:!0,hideReviewText:!1}},products_simple:{item:"basic_image_item",detail:"products_detail",item_detail:"products_item_detail",wrap_detail:"base_detail",options:{price:!1,brand:!1,rating:!1,ratingText:!0}},movies:{item:"basic_image_item",detail:"products_detail",item_detail:"products_item_detail",wrap_detail:"base_detail",options:{price:!1,brand:!1,rating:!1,ratingText:!0},variants:{tile:"poster"},elClass:{tileBody:"is-hidden"}},media:{item:"media_item",detail:"basic_info_detail",item_detail:"media_item_detail",options:{moreAt:!0,aux:!1}},icon:{item:"text_item",detail:"basic_icon_detail",item_detail:"products_item_detail"},places:{item:"places_item",detail:"places_detail"},list:{item:"text_item",detail:"list_detail"},images:{item:"images_item",detail:"images_detail"},videos:{item:"videos_item",detail:"videos_detail"}},viewVariants:{bgColor:{dark:"bg-clr--dk",dark2:"bg-clr--dk2",light:"bg-clr--lt",light2:"bg-clr--lt2",light3:"bg-clr--lt3",red:"bg-clr--red",redLight:"bg-clr--red-light",redDark:"bg-clr--red-dark",blue:"bg-clr--blue",blueLight:"bg-clr--blue-light",blueDark:"bg-clr--blue-dark",purple:"bg-clr--purple",green:"bg-clr--green",gold:"bg-clr--gold"},detail:{light:"detail--l"},tile:{narrow:"tile--c--n",wide:"tile--c--w",xwide:"tile--c--xw",video:"tile--b--i--vid tile--c",poster:"tile--b--i--mov tile--c--n",local:{tile:"tile--loc",tileFront:"tile--loc__main",tileBack:"tile--loc__alt"},basic1:[{tileTitle:"2line"},{tileSnippet:"small"}],basic2:[{tileTitle:"3line-small"},{tileSnippet:"large"}],basic3:[{tileTitle:"3line-large"},{tileSnippet:"small"}],basic4:[{tileTitle:"1line-large"},{tileSnippet:"large"}]},tileTitle:{"1line":"tile__title--1","1line-large":"tile__title--1lg","2line":"tile__title--2","3line":"tile__title--3","4line":"tile__title--4","3line-small":"tile__title--3sm","3line-large":"tile__title--3lg"},tileSubtitle:{"2line":"tile__sub--2"},tileSnippet:{small:"tile__content--sm",large:"tile__content--lg"},tileFooter:{"2line":{tileFoot:"tile__foot--2",tileBody:"has-foot--2"},"3line":{tileFoot:"tile__foot--3",tileBody:"has-foot--3"},"4line":{tileFoot:"tile__foot--4",tileBody:"has-foot--4"}},tileRating:{starsLeft:"tile__rating--left",starsRight:"tile__rating--right"},iconImage:{small:"c-icon__img-wrap--sm",medium:"c-icon__img-wrap--md",large:"c-icon__img-wrap--lg"},iconBadge:{small:"c-icon__badge--sm",medium:"c-icon__badge--md",large:"c-icon__badge--lg"},iconTitle:{large:"c-icon__title--lg"},productSub:{noMax:"c-product__subtitle--nm"}}},function(e){var t;e.DDG||(e.DDG={}),(t=e.DDG).abbrevNumber=function(e){return $.isNumeric(e)?e<1e3?e:e<1e4?Math.round(e/100)/10+"K":e<1e6?Math.round(e/1e3)+"K":e<1e7?Math.round(e/1e5)/10+"M":e<1e9?Math.round(e/1e6)+"M":e<1e10?Math.round(e/1e8)/10+"B":Math.round(e/1e9)+"B":e},t.capitalize=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},t.capitalizeWords=function(e){return e=(e=e.replace(/\w\S+/g,t.capitalize)).replace(/\b(?:Of|And|The|At|By|In|To|A|For|An|On|Or)\b/g,(function(e){return e.toLowerCase()}))},t.commifyNumber=function(e){if(!$.isNumeric(e))return e;var t=e.toString().split(".");return t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),t.join(".")},t.eventToCoordinates=function(e){var t=e.originalEvent,n=t.touches&&t.touches.length?t.touches[0]:e;return{x:n.clientX,y:n.clientY}},t.exec_template=function(e,n){if(!e)throw new Error("DDG.exec_template: template is null");var i,a;if($.isFunction(e)?a=e:t.templates[e]?a=t.templates[e]:e.match(/^DDH\./)&&(a=t.getProperty(window,e)),!a)throw new Error("Template Not Found: "+e);if(!(i=a(n||{})))throw new Error("Error Rendering Template: "+e,n);return i},t.$exec_template=function(e,n){var i=t.exec_template(e,n);return i&&$(i)},t.findInArray=function(e,t,n){for(var i=0;i1)||o[o.length-2]===r)&&(t.settings&&t.settings.updater&&t.settings.updater.isDarkBg&&/wikipedia/.test(r)&&(s=".white"),i="/assets/icons/favicons/"+r+s+(t.is3x?".3x":t.is2x?".2x":"")+".png")),i||(i=t.services.getURL("icons")+n+".ico"),i}},t.getImageProxyURL=function(e,n){var i="&f=1"+((n=n||{}).width?"&w="+n.width:"")+(n.height?"&h="+n.height:"")+(n.noFallback?"&nofb=1":"")+(n.token?"&ipt="+n.token:"")+(n.origin?"&ipo="+n.origin:"")+(n.noAutoPadding?"&p=0":"");return t.isInternalURL(e)?e:(e.match(/^\/\//)&&(e=window.location.protocol+e),e=n.dontEncode?e:encodeURIComponent(e),t.services.getURL("images")+"?u="+e+i)},t.getOrdinal=function(e){if(!e)return"";var t=["th","st","nd","rd"],n=e%100;return e+(t[(n-20)%10]||t[n]||t[0])},t.getProperty=function(e,t){if(!t)return null;for(var n=t.split("."),i=e,a=0,r=n.length;a"+e+"

              ")).find("a")).length?r=$(a[0]):(n=i.text(),t=""),"text"===t?n=r.text():"rest"===t?(r.remove(),(n=i.text())&&(n=n.replace(/^(\-|\:|\;|,|"|'|\s)+/,""))):"url"===t&&(n=r[0].href),n},t.pluralize=function(e,t,n){return(e=parseFloat(e))||0===e?1===e?t:n||t+"s":""},t.querystringParam=function(e){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(location.search);return null===t?"":decodeURIComponentSafe(t[1].replace(/\+/g," "))},t.scaleToFit=function(e,t,n,i){var a={width:e,height:t};return n&&a.width>n&&(a.width=n,a.height=n/e*t),i&&a.height>i&&(a.height=i,a.width=i/t*e),a},t.shuffle=function(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),i=e[t];e[t]=e[n],e[n]=i}return e},t.strip_all_html=function(e){for(var t,n="(?:[^\"'>]|\"[^\"]*\"|'[^']*')*",i=new RegExp("<(?:!--(?:(?:-*[^->])*--+|-?)|script\\b"+n+">[\\s\\S]*?[\\s\\S]*?","gi");e!==t;)t=e,e=e.replace(i,"");return e.replace(/]+>/g,""):""},t.strip_non_alpha=function(e){return e&&(e=e.replace(/\W/g,"")),e},t.toHTTPS=function(e){return e&&e.replace(/^http:/,"https:")},t.toHTTP=function(e){return e&&e.replace(/^https/,"http")};var n=document.createElement("a");t.addSearchParam=function(e,t,i){n.href=e;var a=encodeURIComponent(t);return i&&(a+="="+encodeURIComponent(i)),n.search.length>0&&"?"!==n.search?n.search+="&"+a:n.search="?"+a,n.href},t.unescape=function(e){var t=document.implementation.createHTMLDocument("example");return t.documentElement.innerHTML=e,t.body.textContent}}(this),DDG.Data.Settings={colors:{b:"ecf5f8",b2:"2e4a57",ct:"9f9f9f",d:"e7eed5",g:"215017",g2:"ecf8ee",kt:"333333",o:"ffebcd",p:"693E68",r:"d44c2a",r2:"7c2c1f",r3:"fff",r4:"d3B5B0",w:"fff"},directionSources:{"apple-maps-ios":{directionsURL:"maps://?daddr={{addr}}&near={{lat}},{{lng}}",faviconURL:"maps.apple.com",mapURL:"maps://?address={{addr}}&near={{lat}},{{lng}}",name:"Apple Maps",onDevices:["isIDevice"]},"apple-maps-osx":{directionsURL:"http://maps.apple.com/?daddr={{addr}}&&near={{lat}},{{lng}}",mapURL:"http://maps.apple.com/?address={{addr}}&near={{lat}},{{lng}}",name:"Apple Maps",onDevices:["isOSXMavericksAndUp"]},"bing-maps":{directionsURL:"https://bing.com/maps/default.aspx?rtp=~adr.{{addr}}&cp={{lat}}~{{lng}}&lvl=15",mapURL:"https://bing.com/maps/default.aspx?where1={{addr}}",name:"Bing Maps"},"google-maps":{directionsURL:"https://www.google.com/maps/dir//{{addr}}",mapURL:"https://maps.google.com?q={{addr}}",name:"Google Maps"},"here-maps":{directionsURL:"https://maps.here.com/directions/drive//{{addr}}:{{lat}},{{lng}}?map={{lat}},{{lng}},15,normal",faviconURL:"here.com",mapURL:"https://wego.here.com/?map={{lat}},{{lng}},5,normal",name:"HERE Maps",notOnDevices:["isMobileDevice","isIE9"]},osm:{directionsURL:"https://www.openstreetmap.org/directions?route=%3B{{lat}}%2C{{lng}}#map=15/{{lat}}/{{lng}}",mapURL:"https://www.openstreetmap.org/?query={{addr}}#map=5/{{lat}}/{{lng}}",name:"OpenStreetMap"}},fonts:{a:"Arial",b:"Trebuchet MS",c:"Century Gothic",e:"Segoe UI",g:"Georgia",h:"Helvetica",n:"Sans-serif",o:"Tahoma",p:"Proxima Nova",s:"Serif",t:"Times",u:"Helvetica Neue",v:"Verdana"},headerBehaviors:{1:{name:"On & Fixed",onDevices:["hasFixedHeaderSupport"]},"-1":{name:"Off"},d:{name:"On & Dynamic"},s:{name:"On & Scrolling"}},k1:{default:"1",desc:"If you still want to support us, %shelp spread DuckDuckGo%s",desc2:"",desc3:"",name:"Advertisements",type:"boolean"},k18:{default:"-1",desc:"Displays a checkmark to the left of results you've visited",name:"Visited Checkmark",type:"boolean"},k21:{default:"ffffff",desc:"Changes the background color of results on hover, modules, and dropdown menus",name:"Hover, Module, and Dropdown Background Color",type:"color",values:"colors"},k5:{default:"-1",desc:"Changes what happens when you click on a video thumbnail",name:"Video Playback",type:"dropdown",values:{1:"Always play on DuckDuckGo",2:"Open on third-party site","-1":"Prompt me"}},k7:{default:"ffffff",desc:"Changes the background color across the entire site",name:"Background Color",type:"color",values:"colors"},k8:{default:"494949",desc:"Changes the color of result snippets",name:"Snippet Color",type:"color",values:{g:"595959"}},k9:{default:"1A0DAB",desc:"Changes the color of result titles",name:"Title Color",type:"color",values:{b:"1168cc",g:"292929"}},ka:{default:"p",desc:"Changes the font of result titles",name:"Title Font",order:["a","c","g","h","u","p","n","e","s","t","o","b","v"],type:"dropdowncustom",values:"fonts"},kaa:{default:"6c00a2",desc:"Changes the color of titles for results you've visited",name:"Visited Title Color",type:"color",values:{g:"292929",p:"6830bb"}},kac:{default:"1",desc:"Shows suggestions under the search box as you type",name:"Autocomplete Suggestions",type:"boolean"},kad:{default:"wt_WT",desc:"Changes the language across the entire site",dropdownSettings:{category:"general"},name:"Language",order:["wt_WT"],type:"dropdown",values:"languages"},kae:{default:"-1",dropdownSettings:{category:"appearance",options:["-1","d"]},name:"Theme",type:"theme",values:{"-1":{color1:"084999",color2:"888",colorScheme:"light",id:"-1",name:"Default",settings:{k10:null,k11:null,k12:null,k13:null,k14:null,k15:null,k16:null,k17:null,k18:null,k19:null,k20:null,k21:null,k7:null,k8:null,k9:null,ka:null,kaa:null,kac:null,kaf:null,kag:null,kai:null,kf:null,kj:null,km:null,kt:null,kx:null}},b:{color1:"3434d4",color2:"047d00",id:"b",name:"Basic",settings:{k10:null,k11:null,k12:null,k13:null,k14:null,k15:"normal",k16:null,k17:null,k18:null,k19:"4495d4",k20:null,k21:null,k7:null,k8:"444",k9:"1a0dab",ka:"h",kaa:"5500A3",kac:null,kaf:null,kag:null,kai:null,kf:"-1",kj:null,km:null,kt:"h",kx:"006621"}},c:{color1:"0f6ccc",color2:"ca4323",id:"c",name:"Contrast",settings:{k10:null,k11:null,k12:null,k13:null,k14:null,k15:"normal",k16:null,k17:null,k18:null,k19:"4495d4",k20:null,k21:null,k7:null,k8:"333",k9:"3a7fb4",ka:null,kaa:"6d59a3",kac:null,kaf:null,kag:null,kai:null,kf:null,kj:null,km:null,kt:null,kx:"bd4b2b"}},d:{color1:"",color2:"",colorScheme:"dark",id:"d",name:"Dark",settings:{k10:null,k11:"eeeeee",k12:null,k13:null,k14:null,k15:null,k16:null,k17:null,k18:null,k19:null,k20:null,k21:"282828",k7:"1c1c1c",k8:"cccccc",k9:"eeeeee",ka:null,kaa:"aaaaaa",kac:null,kaf:null,kag:null,kai:null,kf:null,kj:"161616",km:null,kt:null,kx:"eeeeee",palette:{base:"#1c1c1c",primary:"#333333",quaternary:"#444444",secondary:"#282828",tertiary:"#161616",text:{primary:"#eeeeee",secondary:"#cccccc",tertiary:"#666666"}}}},g:{color1:"333",color2:"888",id:"g",name:"Gray",settings:{k10:"3a7fb4",k11:"3a7fb4",k12:null,k13:null,k14:null,k15:"normal",k16:null,k17:"3a7fb4",k18:"1",k19:"4495d4",k20:"888888",k21:null,k7:null,k8:"666",k9:"333",ka:null,kaa:"333",kac:null,kaf:null,kag:null,kai:null,kf:null,kj:null,km:null,kt:null,kx:"888"}},t:{id:"t",name:"Terminal",settings:{k10:null,k11:null,k12:null,k13:null,k14:null,k15:null,k16:null,k17:null,k18:null,k19:null,k20:null,k21:"222",k7:"222",k8:"ccc",k9:"50f148",ka:null,kaa:"ad4ad2",kac:null,kaf:null,kag:null,kai:null,kf:null,kj:"222",km:null,kt:null,kx:"a1ac25"}}}},kaf:{default:"b",desc:"Changes how result URLs are displayed",name:"URL Format",order:["b","s","-1"],tokenComments:{"-1":{comment:"This is an option for a user setting. It refers to showing only the domain for a website URL (e.g. domain.com)",image:"https://i.imgur.com/lWUCzz7.png"},b:{comment:"This is an option for a user setting. It refers to showing the full URL for a website, including the url path, but made to look like the breadcrumbs of a website (e.g. website.com > this > is > the > path)",image:"https://i.imgur.com/EH1fc0H.png"},desc:{comment:"This is the description of a user setting",image:"https://i.imgur.com/IqBhHpM.png"},name:{comment:"This is the name of a user setting",image:"https://i.imgur.com/LRuNuA8.png"},s:{comment:"This is an option for a user setting. It refers to showing the full URL for a website, including the url path (e.g. website.com/this/is/this/path)",image:"https://i.imgur.com/1zkrPJE.png"}},type:"dropdown",values:{"-1":"Domains Only",b:"Full URLs (Breadcrumbs)",s:"Full URLs (Slashes)"}},kag:{default:"-1",desc:"Shows the search button background",name:"Search Button Background",type:"boolean"},kah:{desc:"Stores the previous region that was set",name:"Previous Region",values:"regions"},kai:{default:"a",desc:"Changes where result URLs are displayed",name:"URL Placement",order:["a","b","-1"],type:"dropdown",values:{"-1":"Below Snippet",a:"Above Title",b:"Below Title"}},kaj:{default:"-1",desc:"Preferred units of measure",name:"Units of Measure",order:["-1","m","u"],type:"dropdown",values:{"-1":"No preference (default)",m:"Metric (kilograms, meters, Celsius)",u:"US-based (pounds, feet, Fahrenheit)"}},kak:{default:"1",desc:"Shows links to instructions for how to add DuckDuckGo to your browser",name:"Install DuckDuckGo",type:"boolean"},kan:{default:"0",name:"ATB related (not displayed on settings page)"},kao:{default:"1",desc:"Shows the privacy benefits of using DuckDuckGo on the homepage",name:"Homepage Privacy Tips",type:"boolean"},kap:{default:"1",desc:"Shows occasional reminders to sign up for the DuckDuckGo privacy newsletters",hideTitle:!0,name:"Privacy Newsletter",type:"boolean"},kaq:{default:"1",desc:"Shows sign-up form for the DuckDuckGo privacy newsletters",name:"Privacy Newsletters",type:"boolean"},kar:{default:"",desc:"DuckDuckGo only uses your approximate location. That's all we need to deliver better results, closer to you. %sLearn more%s.",desc2:"",desc3:"",hideTitle:!0,name:"Location",type:"clear"},kas:{default:"0",name:"Mobile Instructions (not displayed on settings page)"},kat:{default:"1",desc:"Prompt me to use my approximate location to get nearby results.",name:"Location",type:"boolean"},kau:{default:"1",desc:"It's okay to (very infrequently) ask me about my experience using DuckDuckGo",name:"Help Improve DuckDuckGo",type:"boolean"},kav:{default:"-1",desc:"Loads more results when scrolling",dropdownSettings:{category:"general"},name:"Infinite Scroll",type:"boolean"},kaw:{default:"1",desc:"Hides search term from being shown in browser tab/history",name:"Search Visibility",type:"boolean"},kax:{default:"1",desc:"Shows occasional reminders to add DuckDuckGo to your browser",hideTitle:!0,name:"ATB Dismiss",type:"boolean"},kay:{default:"-1",desc:"The rendering method to use for interactive maps",name:"Map Rendering",order:["-1","b","i"],type:"dropdown",values:{"-1":"Not set",b:"Best available",i:"Image tiles"}},kaz:{default:"1",desc:"Improves result legibility with updated URL format, placement, and color",dropdownSettings:{category:"appearance"},name:"New URL Style",type:"boolean"},kbc:{default:"-1",desc:"Allows Cloud Save key to be stored locally on device (required to use Cloud Save)",name:"Cloud Save",type:"boolean"},kc:{default:"1",desc:"Loads more results in Images, Videos, and Shopping when scrolling",name:"Infinite Scroll for Images, Videos, and Shopping",type:"boolean"},kd:{default:"1",desc:"In some older browsers, it's necessary to redirect your clicks through our server to prevent search leakage. %sLearn more%s.",desc2:"",desc3:"",name:"Redirect (When Necessary)",type:"boolean"},kea:{default:"0",desc:"Shows welcome message to EU Android preference menu users",name:"EU Android Welcome Message",type:"boolean"},kf:{default:"1",desc:"Displays favicons for each result",dropdownSettings:{category:"appearance"},name:"Site Icons",type:"boolean"},kg:{default:"g",desc:"Search queries are included in URL (if off, searches will use POST requests)",name:"GET Requests",type:"boolean",values:{1:"g","-1":"p"}},kj:{default:"ffffff",desc:"Changes the header color across the entire site",name:"Header Color",type:"color",values:"colors"},kk:{default:"1",desc:"Enables keyboard shortcuts on the site",name:"Keyboard Shortcuts",type:"boolean"},kl:{default:null,desc:"Changes search results based on region",name:"Region",order:["wt-wt"],type:"dropdown",values:"regions"},km:{default:"l",desc:"Displays results in the center of the page",name:"Center Alignment",type:"boolean",values:{1:"m","-1":"l"}},kn:{default:"-1",desc:"Opens results in new windows/tabs",dropdownSettings:{category:"general"},name:"Open Links in a New Tab",type:"boolean"},kntp_s:{default:"0",desc:"Shows most visited links on new tab page",name:"New Tab Page Most Visited Sites",type:"boolean"},ko:{default:"d",desc:"Changes how the header is displayed and its behavior as you scroll",deviceDependent:!0,name:"Header Behavior",type:"dropdown",values:"headerBehaviors"},kos:{default:"-1",desc:"Shows occasional reminders to add DuckDuckGo to your devices",hideTitle:!0,name:"Multi-Step Add-to-Browser Onboarding Step"},kp:{default:"-1",desc:"Omits objectionable (mostly adult) material",name:"Safe Search",order:["1","-1","-2"],type:"dropdown",values:{1:"Strict","-1":"Moderate","-2":"Off"}},ks:{default:"n",desc:"Changes the font size across the entire site",dropdownSettings:{category:"appearance"},name:"Font Size",order:["t","l","n","m","s"],type:"dropdown",values:{l:"Larger",m:"Medium",n:"Large",s:"Small",t:"Largest"}},kt:{default:"p",desc:"Changes the font across the entire site",dropdownSettings:{category:"appearance"},name:"Font",order:["a","c","g","h","u","p","n","e","s","t","o","b","v"],type:"dropdowncustom",values:"fonts"},ku:{default:"-1",desc:"Underlines result titles",name:"Title Underline",type:"boolean"},kv:{compositeKey:{"-1:-1":"-1","-1:1":"m","1:-1":"l","1:1":"1"},default:"1",name:"Page #'s",subsettings:[{default:"1",desc:"Shows page numbers at result page breaks",id:"kv_num",name:"Page Break Numbers",type:"boolean"},{default:"1",desc:"Shows horizontal lines at result page breaks",id:"kv_lin",name:"Page Break Lines",type:"boolean"}],type:"composite"},kw:{default:"n",desc:"Controls the width of the search box and results",name:"Page Width",order:["s","w","n"],type:"dropdown",values:{n:"Normal",s:"Super Wide",w:"Wide"}},kx:{default:"222222",desc:"Changes the color of result URLs",name:"URL Color",type:"color",values:{b:"10385d",e:"858585",g:"0f5c17",l:"222222",o:"d15d0d",p:"732883",r:"c14100"}},kz:{default:"1",desc:"Automatically open relevant Instant Answers",name:"Instant Answers",type:"boolean"},languages:{af_ZA:"Afrikaans (South Africa)",ar_DZ:"العربية (الجزائر)",ar_EG:"العربية (مصر)",ar_JO:"العربية (الأردن)",ar_SA:"العربية (السعودية)",ast_ES:"Asturianu",az_AZ:"Azərbaycan dili",be_BY:"Беларуская (Беларусь)",bg_BG:"Български (България)",bn_BD:"বাংলা(বাংলাদেশ)",bn_IN:"বাংলা (ভারত)",br_FR:"Brezhoneg",bs_BA:"Bosanski",ca_ES:"Català",cs_CZ:"Čeština (Česká republika)",cy_GB:"Cymraeg",da_DK:"Dansk (Danmark)",de_CH:"Deutsch (Schweiz)",de_DE:"Deutsch (Deutschland)",el_GR:"Ελληνικά (Ελλάδα)",en_AU:"English (Australia)",en_CA:"English (Canada)",en_GB:"English (United Kingdom)",en_US:"English (United States)",eo_XX:"Esperanto",es_AR:"Español (Argentina)",es_CL:"Español (Chile)",es_CO:"Español (Colombia)",es_CR:"Español (Costa Rica)",es_EC:"Español (Ecuador)",es_ES:"Español (España)",es_MX:"Español (México)",es_PE:"Español (Perú)",es_UY:"Español (Uruguay)",es_VE:"Español (Venezuela)",et_EE:"Eesti (Eesti)",eu_ES:"Euskara",fa_IR:"فارسی",fi_FI:"Suomi (Suomi)",fr_BE:"Français (Belgique)",fr_CA:"Français (Canada)",fr_CH:"Français (Suisse)",fr_FR:"Français (France)",ga_IE:"Gaeilge (Éire)",gd_GB:"Gàidhlig",gl_ES:"Galego",he_IL:"עברית‏",hi_IN:"हिंदी (भारत)",hr_HR:"Hrvatski (Hrvatska)",hu_HU:"Magyar (Magyarország)",hy_AM:"Հայերեն",id_ID:"Bahasa Indonesia",io_XX:"Ido",is_IS:"Íslenska (Ísland)",it_IT:"Italiano (Italia)",ja_JP:"日本語 (日本)",kab_DZ:"Taqbaylit",kn_IN:"ಕನ್ನಡ (India)",ko_KR:"한국어 (대한민국)",ku:"Kurdî",kw_GB:"Kernowek",lt_LT:"Lietuvių (Lietuva)",lv_LV:"Latviešu (Latvija)",ml_IN:"മലയാളം",mr_IN:"मराठी",ms_MY:"Bahasa Melayu (Malaysia)",nb_NO:"Norsk (bokmål)",nl_BE:"Nederlands (België)",nl_NL:"Nederlands (Nederland)",nn_NO:"Norsk (nynorsk)",od_IN:"ଓଡ଼ିଆ (ଭାରତ)",pl_PL:"Polski (Polska)",pt_BR:"Português (Brasil)",pt_PT:"Português (Portugal)",ro_RO:"Română (România)",ru_RU:"Русский (Россия)",sc_IT:"Sardu (Sardigna)",si_LK:"සිංහල",sk_SK:"Slovenčina (Slovenská republika)",sl_SI:"Slovenščina (Slovenija)",sq_AL:"Shqip (Shqipëri)",sr_RS:"Српски (Serbia)",sv_SE:"Svenska (Sverige)",ta_IN:"தமிழ்",te_IN:"తెలుగు",th_TH:"ไทย (ประเทศไทย)",tl_PH:"Filipino",tokipona_XX:"Toki Pona",tr_TR:"Türkçe (Türkiye)",uk_UA:"Українська (Україна)",ur_PK:"اردو",vi_VN:"Tiếng Việt (Việt Nam)",wt_WT:"Browser preferred language",zh_CN:"中文 (中国)",zh_TW:"中文 (台灣)"},regions:{"wt-wt":"All regions","ar-es":"Argentina","au-en":"Australia","at-de":"Austria","be-fr":"Belgium (fr)","be-nl":"Belgium (nl)","br-pt":"Brazil","bg-bg":"Bulgaria","ca-en":"Canada (en)","ca-fr":"Canada (fr)","ct-ca":"Catalonia","cl-es":"Chile","cn-zh":"China","co-es":"Colombia","hr-hr":"Croatia","cz-cs":"Czech Republic","dk-da":"Denmark","ee-et":"Estonia","fi-fi":"Finland","fr-fr":"France","de-de":"Germany","gr-el":"Greece","hk-tzh":"Hong Kong","hu-hu":"Hungary","in-en":"India (en)","id-en":"Indonesia (en)","ie-en":"Ireland","il-en":"Israel (en)","it-it":"Italy","jp-jp":"Japan","kr-kr":"Korea","lv-lv":"Latvia","lt-lt":"Lithuania","my-en":"Malaysia (en)","mx-es":"Mexico","nl-nl":"Netherlands","nz-en":"New Zealand","no-no":"Norway","pk-en":"Pakistan (en)","pe-es":"Peru","ph-en":"Philippines (en)","pl-pl":"Poland","pt-pt":"Portugal","ro-ro":"Romania","ru-ru":"Russia","xa-ar":"Saudi Arabia","sg-en":"Singapore","sk-sk":"Slovakia","sl-sl":"Slovenia","za-en":"South Africa","es-ca":"Spain (ca)","es-es":"Spain (es)","se-sv":"Sweden","ch-de":"Switzerland (de)","ch-fr":"Switzerland (fr)","tw-tzh":"Taiwan","th-en":"Thailand (en)","tr-tr":"Turkey","us-en":"US (English)","us-es":"US (Spanish)","ua-uk":"Ukraine","uk-en":"United Kingdom","vn-en":"Vietnam (en)"},tabs:[{id:"general",name:"General",settings:["kl","kad","break","kp","kz","break","kc","kav","kac","kn","k1","kk","kaj","kat","kar","kay","break","kv","break","kak","kax","break","kaq","kap","break","kao","break","kau"]},{id:"theme",name:"Theme",settings:["kae"]},{id:"appearance",name:"Appearance",settings:["kt","ks","kw","km","k7","break","ko","kj","break","ka","k9","kaa","ku","break","k8","kx","kaf","kai","k21","k18","break","kf"]},{id:"privacy",name:"Privacy",settings:["kg","k5","kd"]}]},DDG.Data.languages={fontSubsets:{normal:["sq","eu","br","ch","da","nl","en","fo","fi","fr","gl","de","is","it","mg","no","pt","es","sv"],afrikaans:["af"],catalan:["ca"],cyrillic:["ru","ab","av","ba","be","bg","ce","cv","uk","kk","ku","kv","ky","mk","mn","os","tg","tt","ug","uz","sr"],esperanto:["eo"],estonian:["et"],greek:["el","gr"],hungarian:["hu"],lithuanian:["lt","sl"],maltese:["mt"],polish:["pl"],romanian:["ro"],serbian:["sr","bs","hr","sl","lv"],slovak:["sk","sl","lv"],turkish:["tr"],welsh:["cy"],czech:["cs","sl","lv"]},languageFontLookup:{af:"afrikaans",ca:"catalan",eo:"esperanto",et:"estonian",el:"greek",gr:"greek",hu:"hungarian",lt:"lithuanian",mt:"maltese",pl:"polish",ro:"romanian",tr:"turkish",cy:"welsh",cs:"czech",sk:"slovak",sl:"serbian",bs:"serbian",hr:"serbian",lv:"serbian",ru:"cyrillic",ab:"cyrillic",av:"cyrillic",ba:"cyrillic",be:"cyrillic",bg:"cyrillic",ce:"cyrillic",cv:"cyrillic",uk:"cyrillic",kk:"cyrillic",ku:"cyrillic",kv:"cyrillic",ky:"cyrillic",mk:"cyrillic",mn:"cyrillic",os:"cyrillic",tg:"cyrillic",tt:"cyrillic",ug:"cyrillic",uz:"cyrillic",sr:["serbian","cyrillic"]},translations:[{id:"af",name:lp("language_name","Afrikaans")},{id:"am",name:lp("language_name","Amharic")},{id:"ar",name:lp("language_name","Arabic"),regions:["xa-ar"]},{id:"as",name:lp("language_name","Assamese")},{id:"az",name:lp("language_name","Azerbaijani")},{id:"bg",name:lp("language_name","Bulgarian"),regions:["bg-bg"]},{id:"bn",name:lp("language_name","Bangla")},{id:"bs",name:lp("language_name","Bosnian")},{id:"ca",name:lp("language_name","Catalan"),regions:["ct-ca","es-ca"]},{id:"cs",name:lp("language_name","Czech"),regions:["cz-cs"]},{id:"cy",name:lp("language_name","Welsh")},{id:"da",name:lp("language_name","Danish"),regions:["dk-da"]},{id:"de",name:lp("language_name","German"),regions:["at-de","ch-de","de-de"]},{id:"el",name:lp("language_name","Greek"),regions:["gr-el"]},{id:"en",name:lp("language_name","English"),regions:["au-en","ca-en","id-en","ie-en","il-en","in-en","my-en","nz-en","sg-en","th-en","uk-en","us-en","vn-en","za-en"]},{id:"es",name:lp("language_name","Spanish"),regions:["ar-es","cl-es","co-es","es-es","mx-es","pe-es","ph-en","pk-en","us-es"]},{id:"et",name:lp("language_name","Estonian"),regions:["ee-et"]},{id:"fa",name:lp("language_name","Persian")},{id:"fi",name:lp("language_name","Finnish"),regions:["fi-fi"]},{id:"fil",name:lp("language_name","Filipino")},{id:"fj",name:lp("language_name","Fijian")},{id:"fr",name:lp("language_name","French"),regions:["be-fr","ch-fr","fr-fr"]},{id:"fr-CA",name:lp("language_name","French (Canada)"),regions:["ca-fr"]},{id:"ga",name:lp("language_name","Irish")},{id:"gu",name:lp("language_name","Gujarati")},{id:"he",name:lp("language_name","Hebrew")},{id:"hi",name:lp("language_name","Hindi")},{id:"hr",name:lp("language_name","Croatian"),regions:["hr-hr"]},{id:"ht",name:lp("language_name","Haitian Creole")},{id:"hu",name:lp("language_name","Hungarian"),regions:["hu-hu"]},{id:"hy",name:lp("language_name","Armenian")},{id:"id",name:lp("language_name","Indonesian")},{id:"is",name:lp("language_name","Icelandic")},{id:"it",name:lp("language_name","Italian"),regions:["it-it"]},{id:"iu",name:lp("language_name","Inuktitut")},{id:"ja",name:lp("language_name","Japanese"),regions:["jp-jp"]},{id:"kk",name:lp("language_name","Kazakh")},{id:"km",name:lp("language_name","Khmer")},{id:"kmr",name:lp("language_name","Kurdish (Northern)")},{id:"kn",name:lp("language_name","Kannada")},{id:"ko",name:lp("language_name","Korean"),regions:["kr-kr"]},{id:"ku",name:lp("language_name","Kurdish (Central)")},{id:"lo",name:lp("language_name","Lao")},{id:"lt",name:lp("language_name","Lithuanian"),regions:["lt-lt"]},{id:"lv",name:lp("language_name","Latvian"),regions:["lv-lv"]},{id:"mg",name:lp("language_name","Malagasy")},{id:"mi",name:lp("language_name","Maori")},{id:"ml",name:lp("language_name","Malayalam")},{id:"mr",name:lp("language_name","Marathi")},{id:"ms",name:lp("language_name","Malay")},{id:"mt",name:lp("language_name","Maltese")},{id:"mww",name:lp("language_name","Hmong Daw")},{id:"my",name:lp("language_name","Myanmar (Burmese)")},{id:"nb",name:lp("language_name","Norwegian"),regions:["no-no"]},{id:"ne",name:lp("language_name","Nepali")},{id:"nl",name:lp("language_name","Dutch"),regions:["be-nl","nl-nl"]},{id:"or",name:lp("language_name","Odia")},{id:"otq",name:lp("language_name","Querétaro Otomi")},{id:"pa",name:lp("language_name","Punjabi")},{id:"pl",name:lp("language_name","Polish"),regions:["pl-pl"]},{id:"prs",name:lp("language_name","Dari")},{id:"ps",name:lp("language_name","Pashto")},{id:"pt",name:lp("language_name","Portuguese (Brazil)"),regions:["br-pt","pt-pt"]},{id:"pt-PT",name:lp("language_name","Portuguese (Portugal)")},{id:"ro",name:lp("language_name","Romanian"),regions:["ro-ro"]},{id:"ru",name:lp("language_name","Russian"),regions:["ru-ru"]},{id:"sk",name:lp("language_name","Slovak"),regions:["sk-sk"]},{id:"sl",name:lp("language_name","Slovenian"),regions:["sl-sl"]},{id:"sm",name:lp("language_name","Samoan")},{id:"sq",name:lp("language_name","Albanian")},{id:"sr-Cyrl",name:lp("language_name","Serbian (Cyrillic)")},{id:"sr-Latn",name:lp("language_name","Serbian (Latin)")},{id:"sv",name:lp("language_name","Swedish"),regions:["se-sv"]},{id:"sw",name:lp("language_name","Swahili")},{id:"ta",name:lp("language_name","Tamil")},{id:"te",name:lp("language_name","Telugu")},{id:"th",name:lp("language_name","Thai")},{id:"ti",name:lp("language_name","Tigrinya")},{id:"tlh-Latn",name:lp("language_name","Klingon")},{id:"to",name:lp("language_name","Tongan")},{id:"tr",name:lp("language_name","Turkish"),regions:["tr-tr"]},{id:"ty",name:lp("language_name","Tahitian")},{id:"uk",name:lp("language_name","Ukrainian"),regions:["ua-uk"]},{id:"ur",name:lp("language_name","Urdu")},{id:"vi",name:lp("language_name","Vietnamese")},{id:"yua",name:lp("language_name","Yucatec Maya")},{id:"yue",name:lp("language_name","Cantonese (Traditional)")},{id:"zh-Hans",name:lp("language_name","Chinese Simplified"),regions:["cn-zh"]},{id:"zh-Hant",name:lp("language_name","Chinese Traditional"),regions:["hk-tzh","tw-tzh"]}]},DDG.Data.NewsImageDomains=["wsj.com","latimes.com","fastcompany.com","cnbc.com","billboard.com","cnn.com","techcrunch.com","pando.com","huffingtonpost.com","foxnews.com","nbcnews.com","extratv.com","gawker.com","nymag.com","chron.com","mediaite.com","inquisitr.com","spin.com","mtv.com","cbslocal.com","wired.com","ibtimes.com","entrepreneur.com","arstechnica.com","slashgear.com","theverge.com","businessinsider.com","gizmodo.com","nypost.com","si.com","abcnews.go.com","foxsports.com","sciencedaily.com","eurekalert.org","engadget.com","app.com","valleywx.com","nydailynews.com","kitv.com","observer.com","usmagazine.com","mercurynews.com","deadline.com","abqjournal.com","voanews.com","hollywoodlife.com","justjaredjr.com","popsugar.com","opposingviews.com","kdvr.com","digitaltrends.com","pcworld.com","scpr.com","pcmag.com","operationrainfall.com","awn.com","investopedia.com","geek.com","curbed.com","discovery.com","abcactionnews.com","nola.com","forward.com","crainsnewyork.com","abc7news.com","advocate.com","scientificamerican.com","discovermagazine.com","espn.go.com","xconomy.com","peoplestylewatch.com","people.com","vibe.com","pitchfork.com","anandtech.com","oregonlive.com","gigaom.com","hypable.com","ign.com","comingsoon.net","eonline.com","lemonde.fr","theguardian.com","fortune.com","forbes.com","bloomberg.com","afp.com","time.com","variety.com","telegraph.co.uk","ap.org","zacks.com","newsweek.com","hellogiggles.com","digitalspy.co.uk","refinery29.uk","thewrap.com","bgr.com","afprelaxnews.com","businesswire.com","etonline.com","cosmopolitan.com","esquire.com","foreignpolicy.com","thefiscaltimes.com","tvline.com","esquire.com","vulture.com","accesswire.com","harpersbazaar.com","marketwired.com","insideedition.com","rollingstone.com","instyle.com","rideapart.com","essence.com","townandcountrymag.com","stereogum.com","goal.com","golf.com","cover32.com","delish.com","briefing.com","gma.yahoo.com","popularmechanics.com","foxbusiness.com","countryliving.com","roadandtrack.com","glamour.com","southernliving.com","racked.com","elle.com","geekwire.com","complex.com","caranddriver.com","travelandleisure.com","coastalliving.com","scroll.in","greencarreports.com","robbreport.com","realsimple.com","womansday.com","elledecor.com","vanityfair.com","vogue.com","housebeautiful.com","viddsee.com","teenvogue.com","rotoworld.com"],function(e){e.Utils.Perf=function(){this._lacksApiSupport=!window.performance||!window.performance.getEntriesByType,this._lacksPerfTimerSupport=!window.performance||!window.performance.now,this._shouldReportSample=Math.random()<.1},e.Utils.Perf.prototype=$.extend({},{reportNavigation:function(t){if(this._shouldReportSample)try{var n=this._reportNavigation(t);null===n?this._reportUnsupportedApis():(n.page=t,e.pixel.fire("perf",n))}catch(n){e.pixel.fire("jse","perf",{msg:"reportNavigation: "+n.message,page:t})}},reportPerformance:function(t,n){if(!this._lacksApiSupport&&(n||this._shouldReportSample)){var i=this._now(),a=t.page,r=t.resourceName,o=t.timerName;try{var s=this._reportResource(r)||{};s.page=a,s.resource=encodeURIComponent(r),-1!==i&&(s["timer."+o]=i),e.pixel.fire("perf",s)}catch(t){e.pixel.fire("jse","perf",{msg:"reportPerformance: "+t.message,page:a,resource:encodeURIComponent(r)})}}},reportResource:function(t,n){if(this._shouldReportSample&&!this._lacksApiSupport)try{var i=this._reportResource(n)||{};i.page=t,i.resource=encodeURIComponent(n),e.pixel.fire("perf",i)}catch(i){e.pixel.fire("jse","perf",{msg:"reportResource: "+i.message,page:t,resource:encodeURIComponent(n)})}},_now:function(){return this._lacksPerfTimerSupport?-1:this._truncateFloat(performance.now())},_reportUnsupportedApis:function(){e.pixel.fire("perf","unsupported")},_reportResource:function(e){var t=this._resourceTimingByName(e);if(!t)return null;var n={};return this._populateResourceTimingResults(t,n),this._truncateFloatValues(n),n},_resourceTimingByName:function(e){var t=window.performance.getEntriesByType("resource");for(var n in t)if(t[n].name.includes(e))return t[n];return null},_populateResourceTimingResults:function(e,t){if(t.redirect_time_ms=e.redirectEnd-e.redirectStart,t.connect_time_ms=e.connectEnd-e.connectStart,t.dns_time_ms=e.domainLookupEnd-e.domainLookupStart,e.secureConnectionStart&&(t.tls_handshake_time_ms=e.connectEnd-e.secureConnectionStart),t.ttfb_ms=e.responseStart-e.requestStart,t.transfer_time_ms=e.responseEnd-e.responseStart,e.serverTiming&&""!==e.nextHopProtocol)for(var n in e.serverTiming){var i=e.serverTiming[n];if("total"===i.name){t.net_rtt_ms=e.responseStart-e.requestStart-i.duration;break}}void 0!==e.nextHopProtocol&&(t.protocol=encodeURIComponent(e.nextHopProtocol)),void 0!==e.transferSize&&(t.transfer_size_bytes=e.transferSize),void 0!==e.encodedBodySize&&(t.encoded_size_bytes=e.encodedBodySize),void 0!==e.decodedBodySize&&(t.decoded_size_bytes=e.decodedBodySize)},_reportNavigation:function(){var e={},t=null,n=null,i=null;if(!window.PerformanceNavigationTiming&&window.PerformanceNavigation)switch(t=window.performance.timing,n=window.performance.navigation.redirectCount,window.performance.navigation.type){case PerformanceNavigation.TYPE_RELOAD:i="reload";break;case PerformanceNavigation.TYPE_NAVIGATE:i="navigate";break;case PerformanceNavigation.TYPE_BACK_FORWARD:i="back_forward";break;case PerformanceNavigation.TYPE_RESERVED:i="reserved"}else window.PerformanceNavigationTiming&&(t=window.performance.getEntriesByType("navigation")[0])&&(n=t.redirectCount,i=t.type);if(!t)return null;if(e.redirects_count=n,this._populateResourceTimingResults(t,e),e.dom_interactive_time_ms=t.domInteractive-t.responseEnd,e.dom_content_loaded_time_ms=t.domContentLoadedEventStart-t.responseEnd,e.dom_complete_time_ms=Math.max(t.domComplete-t.responseEnd,0),window.performance.getEntriesByName){var a=window.performance.getEntriesByName("first-paint")[0];a&&(e.first_paint_ms=a.startTime);var r=performance.getEntriesByName("first-contentful-paint")[0];r&&(e.first_contentful_paint_ms=r.startTime)}return e.type=i,this._truncateFloatValues(e),e},_truncateFloatValues:function(e){for(var t in e){var n=e[t];"number"==typeof n&&(e[t]=this._truncateFloat(n))}},_truncateFloat:function(e){return Math.round(e).toString()}})}(DDG),function(e){var t=16e3,n=1.6,i=.041666666666667,a=8640;function r(e,t){return e=Math.ceil(e),t=Math.floor(t),Math.floor(function(e,t){return Math.random()*(t-e)+e}(e,t))}function o(e){return e*(Math.PI/180)}function s(e){return e*(180/Math.PI)}function l(e){return e?Math.round(10*e)/10:0}function c(e,t,n,i){var a,r=Math.round(1e5*n),o=Math.round(1e5*e);return a=Math.round(1e5*i)-Math.round(1e5*t),u(r-o)+u(a)}function u(e){var t=e<<1;return e<0&&(t=~t),function(e){var t="";for(;e>=32;)t+=String.fromCharCode(63+(32|31&e)),e>>=5;return t+=String.fromCharCode(e+63)}(t)}e.Utils.Geo=function(){},e.Utils.Geo.prototype={boundingBox:function(e){var t={minlon:null,minlat:null,maxlon:null,maxlat:null};return e.forEach((function(e){(null===t.minlat||e.latt.maxlat)&&(t.maxlat=e.lat),(null===t.minlon||e.lont.maxlon)&&(t.maxlon=e.lon)})),t},enlargeBoundingBox:function(e,t){var n={lat:e.maxlat,lon:e.minlon},i={lat:e.maxlat,lon:e.maxlon},a={lat:e.minlat,lon:e.minlon},r={lat:e.minlat,lon:e.maxlon},o=this.distance(n,a),s=this.distance(i,n),l=this.distance(r,a);if(!(ot.maxlon||e.lat>t.maxlat)},near:function(e,t,n){for(var i=0;i_&&(a[g]=1,u(e,t,n,g,a),u(e,t,g,i,a))}},d=e.length,h=[],p=t*t,m=[],g=[];for(m[0]=e[0],n=i=1,r=0;n=65;return s&&l||c?n(null):e.settings.storageAvailable("localStorage")?void $.ajax({url:o,dataType:"json",async:!0,success:function(t){var o=null;if(this._isBucketDataValid(t,i,a,r))try{t.how_this_works="https://help.duckduckgo.com/privacy/anonymous-localized-results/",window.localStorage.setItem(e.settings.OBFUS_DATA_LOCAL_STORAGE_KEY,JSON.stringify(t))}catch(e){o=e}else o=new Error("Success but invalid bucket data");return o&&e.pixel.fire("cobde","success",{error:encodeURIComponent(o.message)}),n(o)}.bind(this),error:function(t){return e.pixel.fire("cobde","error",{error:encodeURIComponent(t.status+":"+t.statusText)}),n(new Error("Fetch error: "+t.statusText))}}):n(new Error("fetchBucketData: storage not available"))},_isBucketDataValid:function(t,n,i,a){var r="";return t?t.region_density_factors?t.region_density_factors[n]?t.region_density_indexes?t.region_density_indexes[i]||(r="di."+i+"."+a):r="rdi":r="kb."+n:r="rdf":r="bd",!r.length||(e.pixel.fire("cobdx",r),!1)},_getRandomCoordsByDistance:function(e,n,i,a){var o,s,l,c=a&&a.constant?1:r(0,360);return o=r((i=i||t)<500?40:i>=500&&i<1500?250:i>=1500&&i<4e3?500:750,i),o/=1e3,s=this.getDestinationPoint({lat:e,lon:n},o,c),l=this.distance({lat:e,lon:n},{lat:s.lat,lon:s.lon}),{origLatLon:[e,n],newLatLon:[+s.lat.toFixed(4),+s.lon.toFixed(4)],distanceBetween:l}},getRandomCoordsNearby:function(n,i){var a,r=this.calcKBucket(n,i),o=this.calcDensityIndex(n,i),s=this.getK(r),l=this.getDensity(o);return s&&l?(a=this._popDensityToNoiseFactor(l,s))<200?a=200:a>=t&&(a=t):(a=t,e.pixel.fire("comn")),this._getRandomCoordsByDistance(n,i,a)},getK:function(e){var t=this._getBucketData();return t&&t.region_density_factors?t.region_density_factors[e]:null},getDensity:function(e){var t=this._getBucketData();return t&&t.region_density_indexes?t.region_density_indexes[e]:null},_getBucketData:function(){var t=null;if(!e.settings.isDefault(e.settings.LOCATION_SETTING_KEY))try{var n=window.localStorage.getItem(e.settings.OBFUS_DATA_LOCAL_STORAGE_KEY);t=JSON.parse(n)}catch(t){e.pixel.fire("cope")}return t},_popDensityToNoiseFactor:function(e,n){return n&&e?1e3*Math.sqrt(1e3/(e*n*Math.PI)):t}},e.geo=new e.Utils.Geo}(DDG),function(e){function t(e){this._isListening=!1,this._pixel=e,this._fromBfcache=!1}t.prototype.listen=function(){if(this._isListening)throw new Error("already listenning");return this._isListening=!0,this._onPageShow=function(e){e.persisted?this._fromBfcache=!0:this._fromBfcache=!1}.bind(this),window.addEventListener("pageshow",this._onPageShow),this._onVisibilityChange=function(){"hidden"===document.visibilityState&&this._report()}.bind(this),window.addEventListener("visibilitychange",this._onVisibilityChange),function(){this._isListening&&(this._onVisibilityChange&&(window.removeEventListener("visibilitychange",this._onVisibilityChange),this._onVisibilityChange=null),this._onPageShow&&(window.removeEventListener("pageshow",this._onPageShow),this._onPageShow=null)),this._isListening=!1}.bind(this)},t.prototype.getRequests=function(){var e=[];if(!window.performance||!window.performance.getEntriesByType||!window.performance.now)return e;for(var t=performance.getEntriesByType("resource"),n=0;n0,_="links.duckduckgo.com"!==g.hostname;f&&n++,_&&i++,f&&_&&0,(f||_)&&a++,r.push(t[m].initiatorType),f||l.push(t[m].initiatorType),_||s.push(t[m].initiatorType),f||_||o.push(t[m].initiatorType),m>0&&(p.searchParams.forEach((function(e,t){g.searchParams.get(t)!==e&&(c[t]=!0,f||(u[t]=!0),_||(d[t]=!0),f||_||(h[t]=!0))})),g.searchParams.forEach((function(e,t){p.searchParams.get(t)!==e&&(c[t]=!0,f||(u[t]=!0),f||_||(h[t]=!0))})))}t.length,t.length,t.length,t.length,encodeURIComponent(Object.keys(c).sort().join("-")),encodeURIComponent(Object.keys(u).sort().join("-")),encodeURIComponent(Object.keys(d).sort().join("-")),encodeURIComponent(Object.keys(h).sort().join("-")),r.join("-"),l.join("-"),s.join("-"),o.join("-"),this._fromBfcache,e.deep&&e.deep.finished,e.deep&&e.deep.deep_deferred,e.deep&&e.deep.deep_pending}}},e.Utils.DeepRequestsLogger=t}(DDG),function(e){e.errorHandler=new e.Utils.ErrorHandler,e.history=e.history||new e.Utils.History(window.history),e.backData=window.Bootstrap.backData,e.pixel=new e.Utils.Pixel(e.backData),e.localAPI=new e.Utils.LocalAPIWrapper,e.mapkit=new e.Utils.Mapkit,e.perf=new e.Utils.Perf,e.geo=new e.Utils.Geo,e.deepRequestsLogger=new e.Utils.DeepRequestsLogger(e.pixel),e.deepRequestsLogger.listen()}(DDG),function(e){e.Utils.Strings={validTags:["b","br","code","em","li","ol","p","pre","strong","u","ul"],decodeQueryAndStripHTML:function(t){return t?(t=decodeURIComponentSafe(t),t=e.strip_html(t),this.removeUnwantedHtml(t)):""},removeUnwantedHtml:function(e){return e&&e.length?(e=this._stripScriptTags(e),e=this._checkWhitelistedTags(e)):e},decodeHex:function(e){return e?(e=e.toString()).replace(/&#x([0-9A-Fa-f]{2});/g,(function(e,t){return String.fromCharCode(parseInt(t,16))})):""},getUrlParameter:function(e,t){t=t.replace(/[[]/,"\\[").replace(/[\]]/,"\\]");var n=new RegExp("[\\?&]"+t+"=([^&#]*)").exec(e);return null===n?"":decodeURIComponent(n[1].replace(/\+/g," "))},removeSearchParameter:function(e,t){"?"===e[0]&&(e=e.substring(1));for(var n=e.split("&"),i=[],a=0;a0&&(e="?"+e),e},setSearchParameter:function(e,t,n){return""===(e=this.removeSearchParameter(e,t))&&(e="?"),e.length>1&&(e+="&"),e+t+"="+encodeURIComponent(n)},htmlDecode:function(e){return(new DOMParser).parseFromString(e,"text/html").documentElement.textContent},toTitleCase:function(e){return e.replace(/\w+/g,(function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()}))},_stripScriptTags:function(e){return e=e.replace(/)<[^<]*)*<\/script>/gi,"")},_checkWhitelistedTags:function(e){var t=this.validTags,n=$("
              ").append($.parseHTML(e));return n.find("*").each((function(){var e=$(this);t.indexOf(this.nodeName.toLowerCase())<0&&("IFRAME"===this.nodeName?e.remove():e.contents().length?e.contents().unwrap():e.remove())})),n.html()}}}(DDG),DDG.Utils.Cache={Called:{type:{"/v.js":"videos","/i.js":"images"},nrj:{},loaded:{}}},DDG.Utils.Math={avg:function(e){return e.reduce((function(e,t){return e+t}),0)/e.length},shuffle:function(e){for(var t,n,i=e.length;i;)n=Math.floor(Math.random()*i--),t=e[i],e[i]=e[n],e[n]=t;return e}},DDG.Utils.ParseDate={DAYS_IN_MS:864e5,ISO_DATE_REGEX:/(\d{4})-(\d{2})-(\d{2})/,TIME_AGO_REGEX:/(\d{1,2})\s(day|days|hour|hours)\sago/,_getFormattedDate:function(e,t,n){var i=n?new Date(n):new Date,a=Math.floor((i-e)/this.DAYS_IN_MS);return a<=7?this._translateTimeAgo(a,"d"):e.toLocaleDateString(t,{month:"short",day:"numeric",year:"numeric"})},_translateTimeAgo:function(e,t){var n="";return"d"===t&&(n=l("Today"),1===e?n=lp("published dates for organic results","1 day ago"):e>1&&e<=7&&(n=lp("published dates for organic results","%s days ago",e))),"h"===t&&(1===e?n=lp("published dates for organic results","1 hour ago"):e>1&&e<=24&&(n=lp("published dates for organic results","%s hours ago",e))),n},getFormattedDate:function(e,t,n){if(!e)return"";var i,a,r,o="";try{t=t&&t.replace("_","-"),(i=e.match(this.ISO_DATE_REGEX))?(a=new Date(i[1],parseInt(i[2],10)-1,i[3]),o=this._getFormattedDate(a,t,n)):(r=e.match(this.TIME_AGO_REGEX))&&(o=this._translateTimeAgo(parseInt(r[1],10),r[2][0]))}catch(e){o=""}return o},parseShortLocalizedDate:function(e){var t,n=/[\/\.\-]/,i=new Date("2021-11-22T00:00:00").toLocaleDateString(window.locale.replace("_","-")).split(n),a=i.indexOf("2021"),r=i.indexOf("11"),o=i.indexOf("22"),s=e.split(n);if(3===s.length&&-1!==a&&-1!==r&&-1!==o){var l=s[a];2===l.length&&(l="20"+l);var c=s[r]-1,u=s[o];t=new Date(l,c,u,0,0,0,0)}else t=new Date(e);return t},getRelativeDate:function(e){var t=3600,n=86400,i=2620800,a=365*n,r=new Date(e),o=Math.floor((new Date-r)/1e3);return o>a?Math.floor(o/a).toString()+lp("published date for videos","yr"):o>i?Math.floor(o/i).toString()+lp("published date for videos","mo"):o>n?Math.floor(o/n).toString()+lp("published date for videos","d"):o>t?Math.floor(o/t).toString()+lp("published date for videos","h"):Math.floor(o/60).toString()*lp("published date for videos","m")},toLocaleStringSupportsLocales:function(){try{(new Date).toLocaleString("i")}catch(e){return e instanceof RangeError}return!1}},function(e){e.Utils.Collapser=function(e,t){if(t=t||{},this._el=e,this._collapsedAttr=t.collapsedAttr||"data-collapsed",this._rafId=null,this._trigger=null,this._triggerClickHandler=null,this._transitionEndHandler=null,this.isCollapsed()){var n=this._el.style.transition;this._el.style.transition="",this._el.style.height="0px",this._el.style.transition=n}},e.Utils.Collapser.prototype={destroy:function(){this.reset(),this._triggerClickHandler&&(this._trigger.removeEventListener("click",this._triggerClickHandler),this._triggerClickHandler=null,this._trigger=null)},reset:function(){this._rafId&&(window.cancelAnimationFrame(this._rafId),this._rafId=null),this._transitionEndHandler&&(this._el.removeEventListener("transitionend",this._transitionEndHandler),this._el.style.height=null,this._transitionEndHandler=null)},collapse:function(){var e=this._el.scrollHeight,t=this._el.style.transition;this._el.style.transition="",this.reset(),this._rafId=window.requestAnimationFrame(function(){this._el.style.height=e+"px",this._el.style.transition=t,this._rafId=window.requestAnimationFrame(function(){this._rafId=null,this._el.style.height="0px"}.bind(this))}.bind(this)),this._el.setAttribute(this._collapsedAttr,"true")},expand:function(){var e=this._el.scrollHeight;this._el.style.height=e+"px",this.reset(),this._transitionEndHandler=function(e){this._el.removeEventListener("transitionend",this._transitionEndHandler),this._transitionEndHandler=null,this._el.style.height=null}.bind(this),this._el.addEventListener("transitionend",this._transitionEndHandler),this._el.setAttribute(this._collapsedAttr,"false")},isCollapsed:function(){return"true"===this._el.getAttribute("data-collapsed")},registerTrigger:function(e,t){t=t||{},this._trigger||(this._trigger=e,this._triggerClickHandler=function(e){var n=this.isCollapsed();n?(this.expand(),t.onToggle&&t.onToggle(!n)):t.collapsible&&(this.collapse(),t.onToggle&&t.onToggle(!n))}.bind(this),this._trigger.addEventListener("click",this._triggerClickHandler))}}}(DDG),function(e){function t(e){var t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.right>=0&&t.bottom>=0&&t.left<=i&&t.top<=n}e.Utils.IsIntoViewObserver=function(e,n,i){"function"==typeof n&&(i=n,n={}),this._el=e,"IntersectionObserver"in window&&"observe"in window.IntersectionObserver.prototype&&"unobserve"in window.IntersectionObserver.prototype&&"disconnect"in window.IntersectionObserver.prototype&&"IntersectionObserverEntry"in window&&"isIntersecting"in window.IntersectionObserverEntry.prototype?(this._observer=new IntersectionObserver((function(e){i(e[0].isIntersecting)}),{root:n.root||null,rootMargin:n.rootMargin||"0px",threshold:n.threshold||0}),this._observer.observe(e)):(this._isIntoView=t(this._el),this._boundHandleScroll=function(e){this._rafId&&window.cancelAnimationFrame(this._rafId),this._rafId=window.requestAnimationFrame(function(){var e=t(this._el);e!==this._isIntoView&&(this._isIntoView=e,i(e))}.bind(this))}.bind(this),window.addEventListener("scroll",this._boundHandleScroll),this._rafId=window.requestAnimationFrame(function(){i(this._isIntoView)}.bind(this)))},e.Utils.IsIntoViewObserver.prototype={destroy:function(){this._observer&&(this._observer.unobserve(this._el),this._observer.disconnect(),this._observer=null,this._el=null),this._boundHandleScroll&&(this._rafId&&window.cancelAnimationFrame(this._rafId),window.removeEventListener("scroll",this._boundHandleScroll),this._el=null,this._isIntoView=null,this._boundHandleScroll=null)}}}(DDG),function(e){e.Utils.Formatting={formatNumberForLocale:function(e){var t=window.navigator.language,n=DDG.settings.get("kad");n&&"wt_WT"!==n&&(t=n.replace(/_/g,"-"));try{return e.toLocaleString(t)}catch(t){return e.toLocaleString()}},abbreviateLargeNumber:function(t,n){var i=t>0?Math.floor(Math.log10(t)/3):0,a=[lp("Stocks module","k"),lp("Stocks module","M"),lp("Stocks module","B"),lp("Stocks module","T")];i>a.length&&(i=a.length);var r=a[i-1]||"",o=e.settings.region.getISOLocale(),s=(t/Math.pow(10,3*i)).toLocaleString(o,{minimumSignificantDigits:n||1,maximumSignificantDigits:n||3});return e.device.isSafariLessThanVersion(10)&&(s=parseFloat(s).toPrecision(n||3)),s+" "+r}}}(DDG),DDG.Utils.WebVitals={reportWebVitals:function(e){var t=function(e){var t=!1,n=!1,i={};function a(){if(!t&&n){t=!0;var a=window.navigator&&window.navigator.connection;e.fire("webvitals",Object.assign({},i,a?{effectiveType:a.effectiveType}:void 0))}}function r(e){var t,a;n||(n=!0),i[e.name]=(t=e.value,a=(a="CLS"===e.name?4:0)||0,+(Math.round(t+"e+"+a)+"e-"+a))}return setTimeout((function(){if(-1!==(window.PerformanceObserver&&window.PerformanceObserver.supportedEntryTypes||[]).indexOf("layout-shift")){function e(){"hidden"===document.visibilityState&&(a(),removeEventListener("visibilitychange",e,!0))}addEventListener("visibilitychange",e,!0)}else addEventListener("pagehide",a,{capture:!0,once:!0})})),r}(e);window.webVitals.getTTFB(t),window.webVitals.getFCP(t),window.webVitals.getLCP(t),window.webVitals.getCLS(t),window.webVitals.getFID(t)}}; \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/FB4D6D01A486209C353558EF4C623815EA783B68 b/home/.surf/cache/WebKitCache/Version 16/Blobs/FB4D6D01A486209C353558EF4C623815EA783B68 new file mode 100644 index 0000000..5558fcb --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/FB4D6D01A486209C353558EF4C623815EA783B68 @@ -0,0 +1,15701 @@ +/* Bundle Includes: + * js/vendor/dexie.js + * js/functions.js + * js/config.js + * js/crypto.js + * js/account.js + * js/security.js + * js/two-factor-auth.js + */ + +/* + * Dexie.js - a minimalistic wrapper for IndexedDB + * =============================================== + * + * By David Fahlander, david.fahlander@gmail.com + * + * Version 3.2.0.meganz, 2022-01-18T12:19:53.273Z + * + * https://dexie.org + * + * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/ + */ + +(function (global, factory) { +typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : +typeof define === 'function' && define.amd ? define(factory) : +(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dexie = factory()); +})(this, (function () { 'use strict'; + +const _global = typeof self !== 'undefined' ? self : + typeof window !== 'undefined' ? window : + global; + +const keys = Object.keys; +const isArray = Array.isArray; +if (typeof Promise !== 'undefined' && !_global.Promise) { + _global.Promise = Promise; +} +function extend(obj, extension) { + if (typeof extension !== 'object') + return obj; + return Object.assign(obj, extension); +} +const getProto = Object.getPrototypeOf; +const _hasOwn = {}.hasOwnProperty; +function hasOwn(obj, prop) { + return _hasOwn.call(obj, prop); +} +function props(proto, extension) { + if (typeof extension === 'function') + extension = extension(getProto(proto)); + const keys = Reflect.ownKeys(extension); + for (let i = keys.length; i--;) { + setProp(proto, keys[i], extension[keys[i]]); + } +} +const defineProperty = Object.defineProperty; +function setProp(obj, prop, functionOrGetSet, options) { + defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === 'function' ? + { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } : + { value: functionOrGetSet, configurable: true, writable: true }, options)); +} +function derive(Child) { + return { + from: function (Parent) { + Child.prototype = Object.create(Parent.prototype); + setProp(Child.prototype, "constructor", Child); + return { + extend: props.bind(null, Child.prototype) + }; + } + }; +} +const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +function getPropertyDescriptor(obj, prop) { + const pd = getOwnPropertyDescriptor(obj, prop); + let proto; + return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop); +} +const _slice = [].slice; +function slice(args, start, end) { + return _slice.call(args, start, end); +} +function override(origFunc, overridedFactory) { + return overridedFactory(origFunc); +} +function assert(b) { + if (!b) + throw new Error("Assertion Failed"); +} +function asap$1(fn) { + queueMicrotask(fn); +} +function arrayToObject(array, extractor) { + return array.reduce((result, item, i) => { + var nameAndValue = extractor(item, i); + if (nameAndValue) + result[nameAndValue[0]] = nameAndValue[1]; + return result; + }, {}); +} +function tryCatch(fn, onerror, args) { + try { + fn.apply(null, args); + } + catch (ex) { + onerror && onerror(ex); + } +} +function getByKeyPath(obj, keyPath) { + if (hasOwn(obj, keyPath)) + return obj[keyPath]; + if (!keyPath) + return obj; + if (typeof keyPath !== 'string') { + var rv = []; + for (var i = 0, l = keyPath.length; i < l; ++i) { + var val = getByKeyPath(obj, keyPath[i]); + rv.push(val); + } + return rv; + } + var period = keyPath.indexOf('.'); + if (period !== -1) { + var innerObj = obj[keyPath.substr(0, period)]; + return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1)); + } + return undefined; +} +function setByKeyPath(obj, keyPath, value) { + if (!obj || keyPath === undefined) + return; + if ('isFrozen' in Object && Object.isFrozen(obj)) + return; + if (typeof keyPath !== 'string' && 'length' in keyPath) { + assert(typeof value !== 'string' && 'length' in value); + for (var i = 0, l = keyPath.length; i < l; ++i) { + setByKeyPath(obj, keyPath[i], value[i]); + } + } + else { + var period = keyPath.indexOf('.'); + if (period !== -1) { + var currentKeyPath = keyPath.substr(0, period); + var remainingKeyPath = keyPath.substr(period + 1); + if (remainingKeyPath === "") + if (value === undefined) { + if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) + obj.splice(currentKeyPath, 1); + else + delete obj[currentKeyPath]; + } + else + obj[currentKeyPath] = value; + else { + var innerObj = obj[currentKeyPath]; + if (!innerObj) + innerObj = (obj[currentKeyPath] = {}); + setByKeyPath(innerObj, remainingKeyPath, value); + } + } + else { + if (value === undefined) { + if (isArray(obj) && !isNaN(parseInt(keyPath))) + obj.splice(keyPath, 1); + else + delete obj[keyPath]; + } + else + obj[keyPath] = value; + } + } +} +function delByKeyPath(obj, keyPath) { + if (typeof keyPath === 'string') + setByKeyPath(obj, keyPath, undefined); + else if ('length' in keyPath) + [].map.call(keyPath, function (kp) { + setByKeyPath(obj, kp, undefined); + }); +} +function shallowClone(obj) { + return ({ ...obj }); +} +const concat = [].concat; +function flatten(a) { + return concat.apply([], a); +} +const intrinsicTypeNames = "Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey" + .split(',').concat(flatten([8, 16, 32, 64].map(num => ["Int", "Uint", "Float"].map(t => t + num + "Array")))).filter(t => _global[t]); +const intrinsicTypes = intrinsicTypeNames.map(t => _global[t]); +arrayToObject(intrinsicTypeNames, x => [x, true]); +let circularRefs = null; +function deepClone(any) { + circularRefs = new WeakMap(); + const rv = innerDeepClone(any); + circularRefs = null; + return rv; +} +function innerDeepClone(any) { + if (!any || typeof any !== 'object') + return any; + let rv = circularRefs && circularRefs.get(any); + if (rv) + return rv; + if (isArray(any)) { + rv = []; + circularRefs && circularRefs.set(any, rv); + for (let i = 0, l = any.length; i < l; ++i) { + rv.push(innerDeepClone(any[i])); + } + } + else if (intrinsicTypes.indexOf(any.constructor) >= 0) { + rv = any; + } + else { + const proto = getProto(any); + rv = proto === Object.prototype ? {} : Object.create(proto); + circularRefs && circularRefs.set(any, rv); + for (let prop in any) { + if (hasOwn(any, prop)) { + rv[prop] = innerDeepClone(any[prop]); + } + } + } + return rv; +} +const { toString } = {}; +function toStringTag(o) { + return toString.call(o).slice(8, -1); +} +function getIteratorOf(x) { + let i; + return x != null && (i = x[Symbol.iterator]) && i.apply(x); +} +const NO_CHAR_ARRAY = {}; +function getArrayOf(arrayLike) { + var i, a, x, it; + if (arguments.length === 1) { + if (isArray(arrayLike)) + return arrayLike.slice(); + if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') + return [arrayLike]; + if ((it = getIteratorOf(arrayLike))) { + a = []; + while ((x = it.next()), !x.done) + a.push(x.value); + return a; + } + if (arrayLike == null) + return [arrayLike]; + i = arrayLike.length; + if (typeof i === 'number') { + a = new Array(i); + while (i--) + a[i] = arrayLike[i]; + return a; + } + return [arrayLike]; + } + i = arguments.length; + a = new Array(i); + while (i--) + a[i] = arguments[i]; + return a; +} +const isAsyncFunction = typeof Symbol !== 'undefined' + ? (fn) => fn[Symbol.toStringTag] === 'AsyncFunction' + : () => false; + +var debug = typeof localStorage === 'object' && !!localStorage.dexieDebug; +function setDebug(value, filter) { + debug = value; + libraryFilter = filter; +} +var libraryFilter = () => true; +function getErrorWithStack() { + return new Error(); +} +function prettyStack(exception, numIgnoredFrames) { + var stack = exception.stack; + if (!stack) + return ""; + numIgnoredFrames = (numIgnoredFrames || 0); + if (stack.indexOf(exception.name) === 0) + numIgnoredFrames += (exception.name + exception.message).split('\n').length; + return stack.split('\n') + .slice(numIgnoredFrames) + .filter(libraryFilter) + .map(frame => "\n" + frame) + .join(''); +} + +var dexieErrorNames = [ + 'Modify', + 'Bulk', + 'OpenFailed', + 'VersionChange', + 'Schema', + 'Upgrade', + 'InvalidTable', + 'MissingAPI', + 'NoSuchDatabase', + 'InvalidArgument', + 'SubTransaction', + 'Unsupported', + 'Internal', + 'DatabaseClosed', + 'PrematureCommit', + 'ForeignAwait' +]; +var idbDomErrorNames = [ + 'Unknown', + 'Constraint', + 'Data', + 'TransactionInactive', + 'ReadOnly', + 'Version', + 'NotFound', + 'InvalidState', + 'InvalidAccess', + 'Abort', + 'Timeout', + 'QuotaExceeded', + 'Syntax', + 'DataClone' +]; +var errorList = dexieErrorNames.concat(idbDomErrorNames); +var defaultTexts = { + VersionChanged: "Database version changed by other database connection", + DatabaseClosed: "Database has been closed", + Abort: "Transaction aborted", + TransactionInactive: "Transaction has already completed or failed", + MissingAPI: "IndexedDB API missing." +}; +function DexieError(name, msg) { + this._e = getErrorWithStack(); + this.name = name; + this.message = msg; +} +derive(DexieError).from(Error).extend({ + stack: { + get: function () { + return this._stack || + (this._stack = this.name + ": " + this.message + prettyStack(this._e, 2)); + } + }, + toString: function () { return this.name + ": " + this.message; } +}); +function getMultiErrorMessage(msg, failures) { + return msg + ". Errors: " + Object.keys(failures) + .map(key => failures[key].toString()) + .filter((v, i, s) => s.indexOf(v) === i) + .join('\n'); +} +function ModifyError(msg, failures, successCount, failedKeys) { + this._e = getErrorWithStack(); + this.failures = failures; + this.failedKeys = failedKeys; + this.successCount = successCount; + this.message = getMultiErrorMessage(msg, failures); +} +derive(ModifyError).from(DexieError); +function BulkError(msg, failures) { + this._e = getErrorWithStack(); + this.name = "BulkError"; + this.failures = Object.keys(failures).map(pos => failures[pos]); + this.failuresByPos = failures; + this.message = getMultiErrorMessage(msg, failures); +} +derive(BulkError).from(DexieError); +var errnames = errorList.reduce((obj, name) => (obj[name] = name + "Error", obj), {}); +const BaseException = DexieError; +var exceptions = errorList.reduce((obj, name) => { + var fullName = name + "Error"; + function DexieError(msgOrInner, inner) { + this._e = getErrorWithStack(); + this.name = fullName; + if (!msgOrInner) { + this.message = defaultTexts[name] || fullName; + this.inner = null; + } + else if (typeof msgOrInner === 'string') { + this.message = `${msgOrInner}${!inner ? '' : '\n ' + inner}`; + this.inner = inner || null; + } + else if (typeof msgOrInner === 'object') { + this.message = `${msgOrInner.name} ${msgOrInner.message}`; + this.inner = msgOrInner; + } + } + derive(DexieError).from(BaseException); + obj[name] = DexieError; + return obj; +}, {}); +exceptions.Syntax = SyntaxError; +exceptions.Type = TypeError; +exceptions.Range = RangeError; +var exceptionMap = idbDomErrorNames.reduce((obj, name) => { + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +function mapError(domError, message) { + if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) + return domError; + var rv = new exceptionMap[domError.name](message || domError.message, domError); + if ("stack" in domError) { + setProp(rv, "stack", { get: function () { + return this.inner.stack; + } }); + } + return rv; +} +var fullNameExceptions = errorList.reduce((obj, name) => { + if (["Syntax", "Type", "Range"].indexOf(name) === -1) + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +fullNameExceptions.ModifyError = ModifyError; +fullNameExceptions.DexieError = DexieError; +fullNameExceptions.BulkError = BulkError; + +function nop() { } +function mirror(val) { return val; } +function pureFunctionChain(f1, f2) { + if (f1 == null || f1 === mirror) + return f2; + return function (val) { + return f2(f1(val)); + }; +} +function callBoth(on1, on2) { + return function () { + on1.apply(this, arguments); + on2.apply(this, arguments); + }; +} +function hookCreatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res !== undefined) + arguments[0] = res; + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res2 !== undefined ? res2 : res; + }; +} +function hookDeletingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + f1.apply(this, arguments); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = this.onerror = null; + f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + }; +} +function hookUpdatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function (modifications) { + var res = f1.apply(this, arguments); + extend(modifications, res); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res === undefined ? + (res2 === undefined ? undefined : res2) : + (extend(res, res2)); + }; +} +function reverseStoppableEventChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + if (f2.apply(this, arguments) === false) + return false; + return f1.apply(this, arguments); + }; +} +function promisableChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res && typeof res.then === 'function') { + var thiz = this, i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + return res.then(function () { + return f2.apply(thiz, args); + }); + } + return f2.apply(this, arguments); + }; +} + +var INTERNAL = {}; +const LONG_STACKS_CLIP_LIMIT = 100, +MAX_LONG_STACKS = 20, ZONE_ECHO_LIMIT = 100, [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = (() => { + let globalP = Promise.resolve(); + if (typeof crypto === 'undefined' || !crypto.subtle) + return [globalP, getProto(globalP), globalP]; + const nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0])); + return [ + nativeP, + getProto(nativeP), + globalP + ]; +})(); +const NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; +const patchGlobalPromise = !!resolvedGlobalPromise; +var stack_being_generated = false; +const schedulePhysicalTick = () => { + queueMicrotask(physicalTick); +}; +var asap = function (callback, args) { + microtickQueue.push([callback, args]); + if (needsNewPhysicalTick) { + schedulePhysicalTick(); + needsNewPhysicalTick = false; + } +}; +var isOutsideMicroTick = true, +needsNewPhysicalTick = true, +unhandledErrors = [], +rejectingErrors = [], +currentFulfiller = null, rejectionMapper = mirror; +var globalPSD = { + id: 'global', + global: true, + ref: 0, + unhandleds: [], + onunhandled: globalError, + pgp: false, + env: {}, + finalize: function () { + this.unhandleds.forEach(uh => { + try { + globalError(uh[0], uh[1]); + } + catch (e) { } + }); + } +}; +var PSD = globalPSD; +var microtickQueue = []; +var numScheduledCalls = 0; +var tickFinalizers = []; +function DexiePromise(fn) { + this._listeners = []; + this.onuncatched = nop; + this._lib = false; + var psd = (this._PSD = PSD); + if (debug) { + this._stackHolder = getErrorWithStack(); + this._prev = null; + this._numPrev = 0; + } + if (typeof fn !== 'function') { + if (fn !== INTERNAL) + throw new TypeError('Not a function'); + this._state = arguments[1]; + this._value = arguments[2]; + if (this._state === false) + handleRejection(this, this._value); + return; + } + this._state = null; + this._value = null; + ++psd.ref; + executePromiseTask(this, fn); +} +const thenProp = { + get: function () { + var psd = PSD, microTaskId = totalEchoes; + function then(onFulfilled, onRejected) { + var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); + const cleanup = possibleAwait && !decrementExpectedAwaits(); + var rv = new DexiePromise((resolve, reject) => { + propagateToListener(this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), resolve, reject, psd)); + }); + debug && linkToPreviousPromise(rv, this); + return rv; + } + then.prototype = INTERNAL; + return then; + }, + set: function (value) { + setProp(this, 'then', value && value.prototype === INTERNAL ? + thenProp : + { + get: function () { + return value; + }, + set: thenProp.set + }); + } +}; +props(DexiePromise.prototype, { + then: thenProp, + _then: function (onFulfilled, onRejected) { + propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); + }, + dump: NativePromise.prototype.dump, + always: NativePromise.prototype.always, + catch: function (onRejected) { + if (arguments.length === 1) + return this.then(null, onRejected); + var type = arguments[0], handler = arguments[1]; + return typeof type === 'function' ? this.then(null, err => + err instanceof type ? handler(err) : PromiseReject(err)) + : this.then(null, err => + err && err.name === type ? handler(err) : PromiseReject(err)); + }, + finally: function (onFinally) { + return this.then(value => { + onFinally(); + return value; + }, err => { + onFinally(); + return PromiseReject(err); + }); + }, + stack: { + get: function () { + if (this._stack) + return this._stack; + try { + stack_being_generated = true; + var stacks = getStack(this, [], MAX_LONG_STACKS); + var stack = stacks.join("\nFrom previous: "); + if (this._state !== null) + this._stack = stack; + return stack; + } + finally { + stack_being_generated = false; + } + } + }, + timeout: function (ms, msg) { + return ms < Infinity ? + new DexiePromise((resolve, reject) => { + var handle = setTimeout(() => reject(new exceptions.Timeout(msg)), ms); + this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); + }) : this; + } +}); +if (typeof Symbol !== 'undefined' && Symbol.toStringTag) + setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise'); +globalPSD.env = snapShot(); +function Listener(onFulfilled, onRejected, resolve, reject, zone) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + this.psd = zone; +} +props(DexiePromise, { + all: function () { + var values = getArrayOf.apply(null, arguments) + .map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (values.length === 0) + return resolve([]); + var remaining = values.length; + values.forEach((a, i) => DexiePromise.resolve(a).then(x => { + values[i] = x; + if (!--remaining) { + resolve(values); + } + }, reject)); + }); + }, + resolve: value => { + if (value instanceof DexiePromise) + return value; + if (value && typeof value.then === 'function') + return new DexiePromise((resolve, reject) => { + value.then(resolve, reject); + }); + var rv = new DexiePromise(INTERNAL, true, value); + linkToPreviousPromise(rv, currentFulfiller); + return rv; + }, + reject: PromiseReject, + race: function () { + var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise((resolve, reject) => { + values.map(value => DexiePromise.resolve(value).then(resolve, reject)); + }); + }, + PSD: { + get: () => PSD, + set: value => PSD = value + }, + totalEchoes: { get: () => totalEchoes }, + newPSD: newScope, + usePSD: usePSD, + scheduler: { + get: () => asap, + set: value => { asap = value; } + }, + rejectionMapper: { + get: () => rejectionMapper, + set: value => { rejectionMapper = value; } + }, + follow: (fn, zoneProps) => { + return new DexiePromise((resolve, reject) => { + return newScope((resolve, reject) => { + var psd = PSD; + psd.unhandleds = []; + psd.onunhandled = reject; + psd.finalize = callBoth(function () { + run_at_end_of_this_or_next_physical_tick(() => { + this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]); + }); + }, psd.finalize); + fn(); + }, zoneProps, resolve, reject); + }); + } +}); +if (NativePromise) { + if (NativePromise.allSettled) + setProp(DexiePromise, "allSettled", function () { + const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(resolve => { + if (possiblePromises.length === 0) + return resolve([]); + let remaining = possiblePromises.length; + const results = new Array(remaining); + possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(value => results[i] = { status: "fulfilled", value }, reason => results[i] = { status: "rejected", reason }) + .then(() => --remaining || resolve(results))); + }); + }); + if (NativePromise.any && typeof AggregateError !== 'undefined') + setProp(DexiePromise, "any", function () { + const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise((resolve, reject) => { + if (possiblePromises.length === 0) + return reject(new AggregateError([])); + let remaining = possiblePromises.length; + const failures = new Array(remaining); + possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(value => resolve(value), failure => { + failures[i] = failure; + if (!--remaining) + reject(new AggregateError(failures)); + })); + }); + }); +} +function executePromiseTask(promise, fn) { + try { + fn(value => { + if (promise._state !== null) + return; + if (value === promise) + throw new TypeError('A promise cannot be resolved with itself.'); + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + if (value && typeof value.then === 'function') { + executePromiseTask(promise, (resolve, reject) => { + value instanceof DexiePromise ? + value._then(resolve, reject) : + value.then(resolve, reject); + }); + } + else { + promise._state = true; + promise._value = value; + propagateAllListeners(promise); + } + if (shouldExecuteTick) + endMicroTickScope(); + }, ex => handleRejection(promise, ex)); + } + catch (ex) { + handleRejection(promise, ex); + } +} +function handleRejection(promise, reason) { + rejectingErrors.push(reason); + if (promise._state !== null) + return; + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + reason = rejectionMapper(reason); + promise._state = false; + promise._value = reason; + debug && reason !== null && typeof reason === 'object' && !reason._promise && tryCatch(() => { + var origProp = getPropertyDescriptor(reason, "stack"); + reason._promise = promise; + setProp(reason, "stack", { + get: () => stack_being_generated ? + origProp && (origProp.get ? + origProp.get.apply(reason) : + origProp.value) : + promise.stack + }); + }); + addPossiblyUnhandledError(promise); + propagateAllListeners(promise); + if (shouldExecuteTick) + endMicroTickScope(); +} +function propagateAllListeners(promise) { + var listeners = promise._listeners; + promise._listeners = []; + for (var i = 0, len = listeners.length; i < len; ++i) { + propagateToListener(promise, listeners[i]); + } + var psd = promise._PSD; + --psd.ref || psd.finalize(); + if (numScheduledCalls === 0) { + ++numScheduledCalls; + asap(() => { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); + } +} +function propagateToListener(promise, listener) { + if (promise._state === null) { + promise._listeners.push(listener); + return; + } + var cb = promise._state ? listener.onFulfilled : listener.onRejected; + if (cb === null) { + return (promise._state ? listener.resolve : listener.reject)(promise._value); + } + ++listener.psd.ref; + ++numScheduledCalls; + asap(callListener, [cb, promise, listener]); +} +function callListener(cb, promise, listener) { + try { + currentFulfiller = promise; + var ret, value = promise._value; + if (promise._state) { + ret = cb(value); + } + else { + if (rejectingErrors.length) + rejectingErrors = []; + ret = cb(value); + if (rejectingErrors.indexOf(value) === -1) + markErrorAsHandled(promise); + } + listener.resolve(ret); + } + catch (e) { + listener.reject(e); + } + finally { + currentFulfiller = null; + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + --listener.psd.ref || listener.psd.finalize(); + } +} +function getStack(promise, stacks, limit) { + if (stacks.length === limit) + return stacks; + var stack = ""; + if (promise._state === false) { + var failure = promise._value, errorName, message; + if (failure != null) { + errorName = failure.name || "Error"; + message = failure.message || failure; + stack = prettyStack(failure, 0); + } + else { + errorName = failure; + message = ""; + } + stacks.push(errorName + (message ? ": " + message : "") + stack); + } + if (debug) { + stack = prettyStack(promise._stackHolder, 2); + if (stack && stacks.indexOf(stack) === -1) + stacks.push(stack); + if (promise._prev) + getStack(promise._prev, stacks, limit); + } + return stacks; +} +function linkToPreviousPromise(promise, prev) { + var numPrev = prev ? prev._numPrev + 1 : 0; + if (numPrev < LONG_STACKS_CLIP_LIMIT) { + promise._prev = prev; + promise._numPrev = numPrev; + } +} +function physicalTick() { + beginMicroTickScope() && endMicroTickScope(); +} +function beginMicroTickScope() { + var wasRootExec = isOutsideMicroTick; + isOutsideMicroTick = false; + needsNewPhysicalTick = false; + return wasRootExec; +} +function endMicroTickScope() { + var callbacks, i, l; + do { + while (microtickQueue.length > 0) { + callbacks = microtickQueue; + microtickQueue = []; + l = callbacks.length; + for (i = 0; i < l; ++i) { + var item = callbacks[i]; + item[0].apply(null, item[1]); + } + } + } while (microtickQueue.length > 0); + isOutsideMicroTick = true; + needsNewPhysicalTick = true; +} +function finalizePhysicalTick() { + var unhandledErrs = unhandledErrors; + unhandledErrors = []; + unhandledErrs.forEach(p => { + p._PSD.onunhandled.call(null, p._value, p); + }); + var finalizers = tickFinalizers.slice(0); + var i = finalizers.length; + while (i) + finalizers[--i](); +} +function run_at_end_of_this_or_next_physical_tick(fn) { + function finalizer() { + fn(); + tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); + } + tickFinalizers.push(finalizer); + ++numScheduledCalls; + asap(() => { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); +} +function addPossiblyUnhandledError(promise) { + if (!unhandledErrors.some(p => p._value === promise._value)) + unhandledErrors.push(promise); +} +function markErrorAsHandled(promise) { + var i = unhandledErrors.length; + while (i) + if (unhandledErrors[--i]._value === promise._value) { + unhandledErrors.splice(i, 1); + return; + } +} +function PromiseReject(reason) { + return new DexiePromise(INTERNAL, false, reason); +} +function wrap(fn, errorCatcher) { + var psd = PSD; + return function () { + var wasRootExec = beginMicroTickScope(), outerScope = PSD; + try { + switchToZone(psd, true); + return fn.apply(this, arguments); + } + catch (e) { + errorCatcher && errorCatcher(e); + } + finally { + switchToZone(outerScope, false); + if (wasRootExec) + endMicroTickScope(); + } + }; +} +const task = { awaits: 0, echoes: 0, id: 0 }; +var taskCounter = 0; +var zoneStack = []; +var zoneEchoes = 0; +var totalEchoes = 0; +var zone_id_counter = 0; +function newScope(fn, props, a1, a2) { + var parent = PSD, psd = Object.create(parent); + psd.parent = parent; + psd.ref = 0; + psd.global = false; + psd.id = ++zone_id_counter; + var globalEnv = globalPSD.env; + psd.env = patchGlobalPromise ? { + Promise: DexiePromise, + PromiseProp: { value: DexiePromise, configurable: true, writable: true }, + all: DexiePromise.all, + race: DexiePromise.race, + allSettled: DexiePromise.allSettled, + any: DexiePromise.any, + resolve: DexiePromise.resolve, + reject: DexiePromise.reject, + nthen: getPatchedPromiseThen(globalEnv.nthen, psd), + gthen: getPatchedPromiseThen(globalEnv.gthen, psd) + } : {}; + if (props) + extend(psd, props); + ++parent.ref; + psd.finalize = function () { + --this.parent.ref || this.parent.finalize(); + }; + var rv = usePSD(psd, fn, a1, a2); + if (psd.ref === 0) + psd.finalize(); + return rv; +} +function incrementExpectedAwaits() { + if (!task.id) + task.id = ++taskCounter; + ++task.awaits; + task.echoes += ZONE_ECHO_LIMIT; + return task.id; +} +function decrementExpectedAwaits() { + if (!task.awaits) + return false; + if (--task.awaits === 0) + task.id = 0; + task.echoes = task.awaits * ZONE_ECHO_LIMIT; + return true; +} +function onPossibleParallellAsync(possiblePromise) { + if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { + incrementExpectedAwaits(); + return possiblePromise.then(x => { + decrementExpectedAwaits(); + return x; + }, e => { + decrementExpectedAwaits(); + return rejection(e); + }); + } + return possiblePromise; +} +function zoneEnterEcho(targetZone) { + ++totalEchoes; + if (!task.echoes || --task.echoes === 0) { + task.echoes = task.id = 0; + } + zoneStack.push(PSD); + switchToZone(targetZone, true); +} +function zoneLeaveEcho() { + var zone = zoneStack[zoneStack.length - 1]; + zoneStack.pop(); + switchToZone(zone, false); +} +function switchToZone(targetZone, bEnteringZone) { + var currentZone = PSD; + if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { + enqueueNativeMicroTask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); + } + if (targetZone === PSD) + return; + PSD = targetZone; + if (currentZone === globalPSD) + globalPSD.env = snapShot(); + if (patchGlobalPromise) { + var GlobalPromise = globalPSD.env.Promise; + var targetEnv = targetZone.env; + nativePromiseProto.then = targetEnv.nthen; + GlobalPromise.prototype.then = targetEnv.gthen; + if (currentZone.global || targetZone.global) { + Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp); + GlobalPromise.all = targetEnv.all; + GlobalPromise.race = targetEnv.race; + GlobalPromise.resolve = targetEnv.resolve; + GlobalPromise.reject = targetEnv.reject; + if (targetEnv.allSettled) + GlobalPromise.allSettled = targetEnv.allSettled; + if (targetEnv.any) + GlobalPromise.any = targetEnv.any; + } + } +} +function snapShot() { + var GlobalPromise = _global.Promise; + return patchGlobalPromise ? { + Promise: GlobalPromise, + PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), + all: GlobalPromise.all, + race: GlobalPromise.race, + allSettled: GlobalPromise.allSettled, + any: GlobalPromise.any, + resolve: GlobalPromise.resolve, + reject: GlobalPromise.reject, + nthen: nativePromiseProto.then, + gthen: GlobalPromise.prototype.then + } : {}; +} +function usePSD(psd, fn, a1, a2, a3) { + var outerScope = PSD; + try { + switchToZone(psd, true); + return fn(a1, a2, a3); + } + finally { + switchToZone(outerScope, false); + } +} +function enqueueNativeMicroTask(job) { + queueMicrotask(job); +} +function nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) { + return typeof fn !== 'function' ? fn : function () { + var outerZone = PSD; + if (possibleAwait) + incrementExpectedAwaits(); + switchToZone(zone, true); + try { + return fn.apply(this, arguments); + } + finally { + switchToZone(outerZone, false); + if (cleanup) + enqueueNativeMicroTask(decrementExpectedAwaits); + } + }; +} +function getPatchedPromiseThen(origThen, zone) { + return function (onResolved, onRejected) { + return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone), nativeAwaitCompatibleWrap(onRejected, zone)); + }; +} +const UNHANDLEDREJECTION = "unhandledrejection"; +function globalError(err, promise) { + var rv; + try { + rv = promise.onuncatched(err); + } + catch (e) { } + if (rv !== false) + try { + var event, eventData = { promise: promise, reason: err }; + if (_global.document && document.createEvent) { + event = document.createEvent('Event'); + event.initEvent(UNHANDLEDREJECTION, true, true); + extend(event, eventData); + } + else if (_global.CustomEvent) { + event = new CustomEvent(UNHANDLEDREJECTION, { detail: eventData }); + extend(event, eventData); + } + if (event && _global.dispatchEvent) { + dispatchEvent(event); + if (!_global.PromiseRejectionEvent && _global.onunhandledrejection) + try { + _global.onunhandledrejection(event); + } + catch (_) { } + } + if (debug && event && !event.defaultPrevented) { + console.warn(`Unhandled rejection: ${err.stack || err}`); + } + } + catch (e) { } +} +var rejection = DexiePromise.reject; + +function tempTransaction(db, mode, storeNames, fn) { + if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) { + if (db._state.openComplete) { + return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError)); + } + if (!db._state.isBeingOpened) { + if (!db._options.autoOpen) + return rejection(new exceptions.DatabaseClosed()); + db.open().catch(nop); + } + return db._state.dbReadyPromise.then(() => tempTransaction(db, mode, storeNames, fn)); + } + else { + var trans = db._createTransaction(mode, storeNames, db._dbSchema); + try { + trans.create(); + } + catch (ex) { + return rejection(ex); + } + return trans._promise(mode, (resolve, reject) => { + return newScope(() => { + PSD.trans = trans; + return fn(resolve, reject, trans); + }); + }).then(result => { + return trans._completion.then(() => result); + }); + } +} + +const DEXIE_VERSION = '3.2.0.meganz'; +const maxString = String.fromCharCode(65535); +const minKey = -Infinity; +const INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; +const STRING_EXPECTED = "String expected."; +const connections = []; +const isIEOrEdge = typeof navigator !== 'undefined' && /(MSIE|Trident|Edge)/.test(navigator.userAgent); +const hasIEDeleteObjectStoreBug = isIEOrEdge; +const hangsOnDeleteLargeKeyRange = isIEOrEdge; +const dexieStackFrameFilter = frame => !/(dexie\.js|dexie\.min\.js)/.test(frame); +const DBNAMES_DB = '__dbnames'; +const READONLY = 'readonly'; +const READWRITE = 'readwrite'; + +function combine(filter1, filter2) { + return filter1 ? + filter2 ? + function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } : + filter1 : + filter2; +} + +const AnyRange = { + type: 3 , + lower: -Infinity, + lowerOpen: false, + upper: [[]], + upperOpen: false +}; + +function workaroundForUndefinedPrimKey(keyPath) { + return typeof keyPath === "string" && !keyPath.includes('.') + ? (obj) => { + if (obj[keyPath] === undefined && (keyPath in obj)) { + obj = deepClone(obj); + delete obj[keyPath]; + } + return obj; + } + : (obj) => obj; +} + +function cmp(a, b) { + try { + const ta = type(a); + const tb = type(b); + if (ta !== tb) { + if (ta === 'Array') + return 1; + if (tb === 'Array') + return -1; + if (ta === 'binary') + return 1; + if (tb === 'binary') + return -1; + if (ta === 'string') + return 1; + if (tb === 'string') + return -1; + if (ta === 'Date') + return 1; + if (tb !== 'Date') + return NaN; + return -1; + } + switch (ta) { + case 'number': + case 'Date': + case 'string': + return a > b ? 1 : a < b ? -1 : 0; + case 'binary': { + return compareUint8Arrays(getUint8Array(a), getUint8Array(b)); + } + case 'Array': + return compareArrays(a, b); + } + } + catch (_a) { } + return NaN; +} +function compareArrays(a, b) { + const al = a.length; + const bl = b.length; + const l = al < bl ? al : bl; + for (let i = 0; i < l; ++i) { + const res = cmp(a[i], b[i]); + if (res !== 0) + return res; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function compareUint8Arrays(a, b) { + const al = a.length; + const bl = b.length; + const l = al < bl ? al : bl; + for (let i = 0; i < l; ++i) { + if (a[i] !== b[i]) + return a[i] < b[i] ? -1 : 1; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function type(x) { + const t = typeof x; + if (t !== 'object') + return t; + if (ArrayBuffer.isView(x)) + return 'binary'; + const tsTag = toStringTag(x); + return tsTag === 'ArrayBuffer' ? 'binary' : tsTag; +} +function getUint8Array(a) { + if (a instanceof Uint8Array) + return a; + if (ArrayBuffer.isView(a)) + return new Uint8Array(a.buffer, a.byteOffset, a.byteLength); + return new Uint8Array(a); +} + +class Table { + _trans(mode, fn, writeLocked) { + const trans = this._tx || PSD.trans; + const tableName = this.name; + function checkTableInTransaction(resolve, reject, trans) { + if (!trans.schema[tableName]) + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + return fn(trans.idbtrans, trans); + } + const wasRootExec = beginMicroTickScope(); + try { + return trans && trans.db === this.db ? + trans === PSD.trans ? + trans._promise(mode, checkTableInTransaction, writeLocked) : + newScope(() => trans._promise(mode, checkTableInTransaction, writeLocked), { trans: trans, transless: PSD.transless || PSD }) : + tempTransaction(this.db, mode, [this.name], checkTableInTransaction); + } + finally { + if (wasRootExec) + endMicroTickScope(); + } + } + get(keyOrCrit, cb) { + if (keyOrCrit && keyOrCrit.constructor === Object) + return this.where(keyOrCrit).first(cb); + return this._trans('readonly', (trans) => { + return this.core.get({ trans, key: keyOrCrit }) + .then(res => this.hook.reading.fire(res)); + }).then(cb); + } + getKey(keyOrCrit, cb) { + if (keyOrCrit && keyOrCrit.constructor === Object) + return this.where(keyOrCrit).first(cb); + return this._trans('readonly', (trans) => { + return this.core.get({ trans, key: keyOrCrit, method: 'getKey' }) + .then(res => this.hook.reading.fire(res)); + }).then(cb); + } + getKeys(keys) { + return this._trans('readonly', trans => { + return this.core.getMany({ + keys, + trans, + method: 'getKey' + }).then(result => result.map(res => this.hook.reading.fire(res)).filter(Boolean)); + }); + } + exists(keys) { + const a = isArray(keys); + if (!a || keys.length == 1) { + return this.getKey(a ? keys[0] : keys).then(res => res ? a ? [res] : res : false); + } + return this.getKeys(keys); + } + where(indexOrCrit) { + if (typeof indexOrCrit === 'string') + return new this.db.WhereClause(this, indexOrCrit); + if (isArray(indexOrCrit)) + return new this.db.WhereClause(this, `[${indexOrCrit.join('+')}]`); + const keyPaths = keys(indexOrCrit); + if (keyPaths.length === 1) + return this + .where(keyPaths[0]) + .equals(indexOrCrit[keyPaths[0]]); + const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => ix.compound && + keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0) && + ix.keyPath.every(keyPath => keyPaths.indexOf(keyPath) >= 0))[0]; + if (compoundIndex && this.db._maxKey !== maxString) + return this + .where(compoundIndex.name) + .equals(compoundIndex.keyPath.map(kp => indexOrCrit[kp])); + if (!compoundIndex && debug) + console.warn(`The query ${JSON.stringify(indexOrCrit)} on ${this.name} would benefit of a ` + + `compound index [${keyPaths.join('+')}]`); + const { idxByName } = this.schema; + function equals(a, b) { + return cmp(a, b) === 0; + } + const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => { + const index = idxByName[keyPath]; + const value = indexOrCrit[keyPath]; + return [ + prevIndex || index, + prevIndex || !index ? + combine(prevFilterFn, index && index.multi ? + x => { + const prop = getByKeyPath(x, keyPath); + return isArray(prop) && prop.some(item => equals(value, item)); + } : x => equals(value, getByKeyPath(x, keyPath))) + : prevFilterFn + ]; + }, [null, null]); + return idx ? + this.where(idx.name).equals(indexOrCrit[idx.keyPath]) + .filter(filterFunction) : + compoundIndex ? + this.filter(filterFunction) : + this.where(keyPaths).equals(''); + } + filter(filterFunction) { + return this.toCollection().and(filterFunction); + } + count(thenShortcut) { + return this.toCollection().count(thenShortcut); + } + offset(offset) { + return this.toCollection().offset(offset); + } + limit(numRows) { + return this.toCollection().limit(numRows); + } + each(callback) { + return this.toCollection().each(callback); + } + toArray(thenShortcut) { + return this.toCollection().toArray(thenShortcut); + } + toCollection() { + return new this.db.Collection(new this.db.WhereClause(this)); + } + orderBy(index) { + return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ? + `[${index.join('+')}]` : + index)); + } + reverse() { + return this.toCollection().reverse(); + } + mapToClass(constructor) { + this.schema.mappedClass = constructor; + const readHook = obj => { + if (!obj) + return obj; + const res = Object.create(constructor.prototype); + for (var m in obj) + if (hasOwn(obj, m)) + try { + res[m] = obj[m]; + } + catch (_) { } + return res; + }; + if (this.schema.readHook) { + this.hook.reading.unsubscribe(this.schema.readHook); + } + this.schema.readHook = readHook; + this.hook("reading", readHook); + return constructor; + } + defineClass() { + function Class(content) { + extend(this, content); + } + return this.mapToClass(Class); + } + add(obj, key) { + const { auto, keyPath } = this.schema.primKey; + let objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', trans => { + return this.core.mutate({ trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd] }); + }).then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult) + .then(lastResult => { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + } + update(keyOrObject, modifications) { + if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) { + const key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); + if (key === undefined) + return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); + try { + if (typeof modifications !== "function") { + keys(modifications).forEach(keyPath => { + setByKeyPath(keyOrObject, keyPath, modifications[keyPath]); + }); + } + else { + modifications(keyOrObject, { value: keyOrObject, primKey: key }); + } + } + catch (_a) { + } + return this.where(":id").equals(key).modify(modifications); + } + else { + return this.where(":id").equals(keyOrObject).modify(modifications); + } + } + put(obj, key) { + const { auto, keyPath } = this.schema.primKey; + let objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null })) + .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult) + .then(lastResult => { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + } + delete(key) { + return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'delete', keys: [key] })) + .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined); + } + clear() { + return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'deleteRange', range: AnyRange })) + .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined); + } + bulkGet(keys) { + return this._trans('readonly', trans => { + return this.core.getMany({ + keys, + trans + }).then(result => result.map(res => this.hook.reading.fire(res))); + }); + } + bulkAdd(objects, keysOrOptions, options) { + const keys = keysOrOptions && Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + const wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', trans => { + const { auto, keyPath } = this.schema.primKey; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + const numObjects = objects.length; + let objectsToAdd = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return this.core.mutate({ trans, type: 'add', keys: keys, values: objectsToAdd, wantResults }) + .then(({ numFailures, results, lastResult, failures }) => { + const result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError(`${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures); + }); + }); + } + bulkPut(objects, keysOrOptions, options) { + const keys = keysOrOptions && Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + const wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', trans => { + const { auto, keyPath } = this.schema.primKey; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + const numObjects = objects.length; + let objectsToPut = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return this.core.mutate({ trans, type: 'put', keys: keys, values: objectsToPut, wantResults }) + .then(({ numFailures, results, lastResult, failures }) => { + const result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError(`${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures); + }); + }); + } + bulkDelete(keys) { + const numKeys = keys.length; + return this._trans('readwrite', trans => { + return this.core.mutate({ trans, type: 'delete', keys: keys }); + }).then(({ numFailures, lastResult, failures }) => { + if (numFailures === 0) + return lastResult; + throw new BulkError(`${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures); + }); + } +} + +function Events(ctx) { + var evs = {}; + var rv = function (eventName, subscriber) { + if (subscriber) { + var i = arguments.length, args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + evs[eventName].subscribe.apply(null, args); + return ctx; + } + else if (typeof (eventName) === 'string') { + return evs[eventName]; + } + }; + rv.addEventType = add; + for (var i = 1, l = arguments.length; i < l; ++i) { + add(arguments[i]); + } + return rv; + function add(eventName, chainFunction, defaultFunction) { + if (typeof eventName === 'object') + return addConfiguredEvents(eventName); + if (!chainFunction) + chainFunction = reverseStoppableEventChain; + if (!defaultFunction) + defaultFunction = nop; + var context = { + subscribers: [], + fire: defaultFunction, + subscribe: function (cb) { + if (context.subscribers.indexOf(cb) === -1) { + context.subscribers.push(cb); + context.fire = chainFunction(context.fire, cb); + } + }, + unsubscribe: function (cb) { + context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; }); + context.fire = context.subscribers.reduce(chainFunction, defaultFunction); + } + }; + evs[eventName] = rv[eventName] = context; + return context; + } + function addConfiguredEvents(cfg) { + keys(cfg).forEach(function (eventName) { + var args = cfg[eventName]; + if (isArray(args)) { + add(eventName, cfg[eventName][0], cfg[eventName][1]); + } + else if (args === 'asap') { + var context = add(eventName, mirror, function fire() { + var i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + context.subscribers.forEach(function (fn) { + asap$1(function fireEvent() { + fn.apply(null, args); + }); + }); + }); + } + else + throw new exceptions.InvalidArgument("Invalid event config"); + }); + } +} + +function makeClassConstructor(prototype, constructor) { + derive(constructor).from({ prototype }); + return constructor; +} + +function createTableConstructor(db) { + return makeClassConstructor(Table.prototype, function Table(name, tableSchema, trans) { + this.db = db; + this._tx = trans; + this.name = name; + this.schema = tableSchema; + this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, { + "creating": [hookCreatingChain, nop], + "reading": [pureFunctionChain, mirror], + "updating": [hookUpdatingChain, nop], + "deleting": [hookDeletingChain, nop] + }); + }); +} + +function isPlainKeyRange(ctx, ignoreLimitFilter) { + return !(ctx.filter || ctx.algorithm || ctx.or) && + (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); +} +function addFilter(ctx, fn) { + ctx.filter = combine(ctx.filter, fn); +} +function addReplayFilter(ctx, factory, isLimitFilter) { + var curr = ctx.replayFilter; + ctx.replayFilter = curr ? () => combine(curr(), factory()) : factory; + ctx.justLimit = isLimitFilter && !curr; +} +function addMatchFilter(ctx, fn) { + ctx.isMatch = combine(ctx.isMatch, fn); +} +function getIndexOrStore(ctx, coreSchema) { + if (ctx.isPrimKey) + return coreSchema.primaryKey; + const index = coreSchema.getIndexByKeyPath(ctx.index); + if (!index) + throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed"); + return index; +} +function openCursor(ctx, coreTable, trans) { + const index = getIndexOrStore(ctx, coreTable.schema); + return coreTable.openCursor({ + trans, + values: !ctx.keysOnly, + reverse: ctx.dir === 'prev', + unique: !!ctx.unique, + query: { + index, + range: ctx.range + } + }); +} +function iter(ctx, fn, coreTrans, coreTable) { + const filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; + if (!ctx.or) { + return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper); + } + else { + const set = {}; + const union = (item, cursor, advance) => { + if (!filter || filter(cursor, advance, result => cursor.stop(result), err => cursor.fail(err))) { + var primaryKey = cursor.primaryKey; + var key = '' + primaryKey; + if (key === '[object ArrayBuffer]') + key = '' + new Uint8Array(primaryKey); + if (!hasOwn(set, key)) { + set[key] = true; + fn(item, cursor, advance); + } + } + }; + return Promise.all([ + ctx.or._iterate(union, coreTrans), + iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper) + ]); + } +} +function iterate(cursorPromise, filter, fn, valueMapper) { + var mappedFn = valueMapper ? (x, c, a) => fn(valueMapper(x), c, a) : fn; + var wrappedFn = wrap(mappedFn); + return cursorPromise.then(cursor => { + if (cursor) { + return cursor.start(() => { + var c = () => cursor.continue(); + if (!filter || filter(cursor, advancer => c = advancer, val => { cursor.stop(val); c = nop; }, e => { cursor.fail(e); c = nop; })) + wrappedFn(cursor.value, cursor, advancer => c = advancer); + c(); + }); + } + }); +} + +class Collection { + _read(fn, cb) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readonly', fn).then(cb); + } + _write(fn) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readwrite', fn, "locked"); + } + _addAlgorithm(fn) { + var ctx = this._ctx; + ctx.algorithm = combine(ctx.algorithm, fn); + } + _iterate(fn, coreTrans) { + return iter(this._ctx, fn, coreTrans, this._ctx.table.core); + } + clone(props) { + var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); + if (props) + extend(ctx, props); + rv._ctx = ctx; + return rv; + } + raw() { + this._ctx.valueMapper = null; + return this; + } + each(fn) { + var ctx = this._ctx; + return this._read(trans => iter(ctx, fn, trans, ctx.table.core)); + } + count(cb) { + return this._read(trans => { + const ctx = this._ctx; + const coreTable = ctx.table.core; + if (isPlainKeyRange(ctx, true)) { + return coreTable.count({ + trans, + query: { + index: getIndexOrStore(ctx, coreTable.schema), + range: ctx.range + } + }).then(count => Math.min(count, ctx.limit)); + } + else { + var count = 0; + return iter(ctx, () => { ++count; return false; }, trans, coreTable) + .then(() => count); + } + }).then(cb); + } + sortBy(keyPath, cb) { + const parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1; + function getval(obj, i) { + if (i) + return getval(obj[parts[i]], i - 1); + return obj[lastPart]; + } + var order = this._ctx.dir === "next" ? 1 : -1; + function sorter(a, b) { + var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex); + return aVal < bVal ? -order : aVal > bVal ? order : 0; + } + return this.toArray(function (a) { + return a.sort(sorter); + }).then(cb); + } + toArray(cb) { + return this._read(trans => { + var ctx = this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + const { valueMapper } = ctx; + const index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans, + limit: ctx.limit, + values: true, + query: { + index, + range: ctx.range + } + }).then(({ result }) => valueMapper ? result.map(valueMapper) : result); + } + else { + const a = []; + return iter(ctx, item => a.push(item), trans, ctx.table.core).then(() => a); + } + }, cb); + } + offset(offset) { + var ctx = this._ctx; + if (offset <= 0) + return this; + ctx.offset += offset; + if (isPlainKeyRange(ctx)) { + addReplayFilter(ctx, () => { + var offsetLeft = offset; + return (cursor, advance) => { + if (offsetLeft === 0) + return true; + if (offsetLeft === 1) { + --offsetLeft; + return false; + } + advance(() => { + cursor.advance(offsetLeft); + offsetLeft = 0; + }); + return false; + }; + }); + } + else { + addReplayFilter(ctx, () => { + var offsetLeft = offset; + return () => (--offsetLeft < 0); + }); + } + return this; + } + limit(numRows) { + this._ctx.limit = Math.min(this._ctx.limit, numRows); + addReplayFilter(this._ctx, () => { + var rowsLeft = numRows; + return function (cursor, advance, resolve) { + if (--rowsLeft <= 0) + advance(resolve); + return rowsLeft >= 0; + }; + }, true); + return this; + } + until(filterFunction, bIncludeStopEntry) { + addFilter(this._ctx, function (cursor, advance, resolve) { + if (filterFunction(cursor.value)) { + advance(resolve); + return bIncludeStopEntry; + } + else { + return true; + } + }); + return this; + } + first(cb) { + return this.limit(1).toArray(function (a) { return a[0]; }).then(cb); + } + last(cb) { + return this.reverse().first(cb); + } + filter(filterFunction) { + addFilter(this._ctx, function (cursor) { + return filterFunction(cursor.value); + }); + addMatchFilter(this._ctx, filterFunction); + return this; + } + and(filter) { + return this.filter(filter); + } + or(indexName) { + return new this.db.WhereClause(this._ctx.table, indexName, this); + } + reverse() { + this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev"); + if (this._ondirectionchange) + this._ondirectionchange(this._ctx.dir); + return this; + } + desc() { + return this.reverse(); + } + eachKey(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.key, cursor); }); + } + eachUniqueKey(cb) { + this._ctx.unique = "unique"; + return this.eachKey(cb); + } + eachPrimaryKey(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); }); + } + keys(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.key); + }).then(function () { + return a; + }).then(cb); + } + primaryKeys(cb) { + var ctx = this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + return this._read(trans => { + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans, + values: false, + limit: ctx.limit, + query: { + index, + range: ctx.range + } + }); + }).then(({ result }) => result).then(cb); + } + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.primaryKey); + }).then(function () { + return a; + }).then(cb); + } + uniqueKeys(cb) { + this._ctx.unique = "unique"; + return this.keys(cb); + } + firstKey(cb) { + return this.limit(1).keys(function (a) { return a[0]; }).then(cb); + } + lastKey(cb) { + return this.reverse().firstKey(cb); + } + distinct() { + var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; + if (!idx || !idx.multi) + return this; + var set = {}; + addFilter(this._ctx, function (cursor) { + var strKey = cursor.primaryKey.toString(); + var found = hasOwn(set, strKey); + set[strKey] = true; + return !found; + }); + return this; + } + modify(changes) { + var ctx = this._ctx; + return this._write(trans => { + var modifyer; + if (typeof changes === 'function') { + modifyer = changes; + } + else { + var keyPaths = keys(changes); + var numKeys = keyPaths.length; + modifyer = function (item) { + var anythingModified = false; + for (var i = 0; i < numKeys; ++i) { + var keyPath = keyPaths[i], val = changes[keyPath]; + if (getByKeyPath(item, keyPath) !== val) { + setByKeyPath(item, keyPath, val); + anythingModified = true; + } + } + return anythingModified; + }; + } + const coreTable = ctx.table.core; + const { outbound, extractKey } = coreTable.schema.primaryKey; + const limit = this.db._options.modifyChunkSize || 200; + const totalFailures = []; + let successCount = 0; + const failedKeys = []; + const applyMutateResult = (expectedCount, res) => { + const { failures, numFailures } = res; + successCount += expectedCount - numFailures; + for (let pos of keys(failures)) { + totalFailures.push(failures[pos]); + } + }; + return this.clone().primaryKeys().then(keys => { + const nextChunk = (offset) => { + const count = Math.min(limit, keys.length - offset); + return coreTable.getMany({ + trans, + keys: keys.slice(offset, offset + count), + cache: "immutable" + }).then(values => { + const addValues = []; + const putValues = []; + const putKeys = outbound ? [] : null; + const deleteKeys = []; + for (let i = 0; i < count; ++i) { + const origValue = values[i]; + const ctx = { + value: deepClone(origValue), + primKey: keys[offset + i] + }; + if (modifyer.call(ctx, ctx.value, ctx) !== false) { + if (ctx.value == null) { + deleteKeys.push(keys[offset + i]); + } + else if (!outbound && cmp(extractKey(origValue), extractKey(ctx.value)) !== 0) { + deleteKeys.push(keys[offset + i]); + addValues.push(ctx.value); + } + else { + putValues.push(ctx.value); + if (outbound) + putKeys.push(keys[offset + i]); + } + } + } + const criteria = isPlainKeyRange(ctx) && + ctx.limit === Infinity && + (typeof changes !== 'function' || changes === deleteCallback) && { + index: ctx.index, + range: ctx.range + }; + return Promise.resolve(addValues.length > 0 && + coreTable.mutate({ trans, type: 'add', values: addValues }) + .then(res => { + for (let pos in res.failures) { + deleteKeys.splice(parseInt(pos), 1); + } + applyMutateResult(addValues.length, res); + })).then(() => (putValues.length > 0 || (criteria && typeof changes === 'object')) && + coreTable.mutate({ + trans, + type: 'put', + keys: putKeys, + values: putValues, + criteria, + changeSpec: typeof changes !== 'function' + && changes + }).then(res => applyMutateResult(putValues.length, res))).then(() => (deleteKeys.length > 0 || (criteria && changes === deleteCallback)) && + coreTable.mutate({ + trans, + type: 'delete', + keys: deleteKeys, + criteria + }).then(res => applyMutateResult(deleteKeys.length, res))).then(() => { + return keys.length > offset + count && nextChunk(offset + limit); + }); + }); + }; + return nextChunk(0).then(() => { + if (totalFailures.length > 0) + throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys); + return keys.length; + }); + }); + }); + } + delete() { + var ctx = this._ctx, range = ctx.range; + if (isPlainKeyRange(ctx) && + ((ctx.isPrimKey && !hangsOnDeleteLargeKeyRange) || range.type === 3 )) + { + return this._write(trans => { + const { primaryKey } = ctx.table.core.schema; + const coreRange = range; + return ctx.table.core.count({ trans, query: { index: primaryKey, range: coreRange } }).then(count => { + return ctx.table.core.mutate({ trans, type: 'deleteRange', range: coreRange }) + .then(({ failures, lastResult, results, numFailures }) => { + if (numFailures) + throw new ModifyError("Could not delete some values", Object.keys(failures).map(pos => failures[pos]), count - numFailures); + return count - numFailures; + }); + }); + }); + } + return this.modify(deleteCallback); + } +} +const deleteCallback = (value, ctx) => ctx.value = null; + +function createCollectionConstructor(db) { + return makeClassConstructor(Collection.prototype, function Collection(whereClause, keyRangeGenerator) { + this.db = db; + let keyRange = AnyRange, error = null; + if (keyRangeGenerator) + try { + keyRange = keyRangeGenerator(); + } + catch (ex) { + error = ex; + } + const whereCtx = whereClause._ctx; + const table = whereCtx.table; + const readingHook = table.hook.reading.fire; + this._ctx = { + table: table, + index: whereCtx.index, + isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)), + range: keyRange, + keysOnly: false, + dir: "next", + unique: "", + algorithm: null, + filter: null, + replayFilter: null, + justLimit: true, + isMatch: null, + offset: 0, + limit: Infinity, + error: error, + or: whereCtx.or, + valueMapper: readingHook !== mirror ? readingHook : null + }; + }); +} + +function simpleCompare(a, b) { + return a < b ? -1 : a === b ? 0 : 1; +} +function simpleCompareReverse(a, b) { + return a > b ? -1 : a === b ? 0 : 1; +} + +function fail(collectionOrWhereClause, err, T) { + var collection = collectionOrWhereClause instanceof WhereClause ? + new collectionOrWhereClause.Collection(collectionOrWhereClause) : + collectionOrWhereClause; + collection._ctx.error = T ? new T(err) : new TypeError(err); + return collection; +} +function emptyCollection(whereClause) { + return new whereClause.Collection(whereClause, () => rangeEqual("")).limit(0); +} +function upperFactory(dir) { + return dir === "next" ? + (s) => s.toUpperCase() : + (s) => s.toLowerCase(); +} +function lowerFactory(dir) { + return dir === "next" ? + (s) => s.toLowerCase() : + (s) => s.toUpperCase(); +} +function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) { + var length = Math.min(key.length, lowerNeedle.length); + var llp = -1; + for (var i = 0; i < length; ++i) { + var lwrKeyChar = lowerKey[i]; + if (lwrKeyChar !== lowerNeedle[i]) { + if (cmp(key[i], upperNeedle[i]) < 0) + return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1); + if (cmp(key[i], lowerNeedle[i]) < 0) + return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1); + if (llp >= 0) + return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); + return null; + } + if (cmp(key[i], lwrKeyChar) < 0) + llp = i; + } + if (length < lowerNeedle.length && dir === "next") + return key + upperNeedle.substr(key.length); + if (length < key.length && dir === "prev") + return key.substr(0, upperNeedle.length); + return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1)); +} +function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { + var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; + if (!needles.every(s => typeof s === 'string')) { + return fail(whereClause, STRING_EXPECTED); + } + function initDirection(dir) { + upper = upperFactory(dir); + lower = lowerFactory(dir); + compare = (dir === "next" ? simpleCompare : simpleCompareReverse); + var needleBounds = needles.map(function (needle) { + return { lower: lower(needle), upper: upper(needle) }; + }).sort(function (a, b) { + return compare(a.lower, b.lower); + }); + upperNeedles = needleBounds.map(function (nb) { return nb.upper; }); + lowerNeedles = needleBounds.map(function (nb) { return nb.lower; }); + direction = dir; + nextKeySuffix = (dir === "next" ? "" : suffix); + } + initDirection("next"); + var c = new whereClause.Collection(whereClause, () => createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix)); + c._ondirectionchange = function (direction) { + initDirection(direction); + }; + var firstPossibleNeedle = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + if (typeof key !== 'string') + return false; + var lowerKey = lower(key); + if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { + return true; + } + else { + var lowestPossibleCasing = null; + for (var i = firstPossibleNeedle; i < needlesLen; ++i) { + var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction); + if (casing === null && lowestPossibleCasing === null) + firstPossibleNeedle = i + 1; + else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { + lowestPossibleCasing = casing; + } + } + if (lowestPossibleCasing !== null) { + advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); }); + } + else { + advance(resolve); + } + return false; + } + }); + return c; +} +function createRange(lower, upper, lowerOpen, upperOpen) { + return { + type: 2 , + lower, + upper, + lowerOpen, + upperOpen + }; +} +function rangeEqual(value) { + return { + type: 1 , + lower: value, + upper: value + }; +} + +class WhereClause { + get Collection() { + return this._ctx.table.db.Collection; + } + between(lower, upper, includeLower, includeUpper) { + includeLower = includeLower !== false; + includeUpper = includeUpper === true; + try { + if ((this._cmp(lower, upper) > 0) || + (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper))) + return emptyCollection(this); + return new this.Collection(this, () => createRange(lower, upper, !includeLower, !includeUpper)); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + } + equals(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => rangeEqual(value)); + } + above(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(value, undefined, true)); + } + aboveOrEqual(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(value, undefined, false)); + } + below(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(undefined, value, false, true)); + } + belowOrEqual(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(undefined, value)); + } + startsWith(str) { + if (typeof str !== 'string') + return fail(this, STRING_EXPECTED); + return this.between(str, str + maxString, true, true); + } + startsWithIgnoreCase(str) { + if (str === "") + return this.startsWith(str); + return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString); + } + equalsIgnoreCase(str) { + return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], ""); + } + anyOfIgnoreCase() { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, ""); + } + startsWithAnyOfIgnoreCase() { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString); + } + anyOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + let compare = this._cmp; + try { + set.sort(compare); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + if (set.length === 0) + return emptyCollection(this); + const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1])); + c._ondirectionchange = direction => { + compare = (direction === "next" ? + this._ascending : + this._descending); + set.sort(compare); + }; + let i = 0; + c._addAlgorithm((cursor, advance, resolve) => { + const key = cursor.key; + while (compare(key, set[i]) > 0) { + ++i; + if (i === set.length) { + advance(resolve); + return false; + } + } + if (compare(key, set[i]) === 0) { + return true; + } + else { + advance(() => { cursor.continue(set[i]); }); + return false; + } + }); + return c; + } + notEqual(value) { + return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false }); + } + noneOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return new this.Collection(this); + try { + set.sort(this._ascending); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + const ranges = set.reduce((res, val) => res ? + res.concat([[res[res.length - 1][1], val]]) : + [[minKey, val]], null); + ranges.push([set[set.length - 1], this.db._maxKey]); + return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); + } + inAnyRange(ranges, options) { + const cmp = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max; + if (ranges.length === 0) + return emptyCollection(this); + if (!ranges.every(range => range[0] !== undefined && + range[1] !== undefined && + ascending(range[0], range[1]) <= 0)) { + return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument); + } + const includeLowers = !options || options.includeLowers !== false; + const includeUppers = options && options.includeUppers === true; + function addRange(ranges, newRange) { + let i = 0, l = ranges.length; + for (; i < l; ++i) { + const range = ranges[i]; + if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) { + range[0] = min(range[0], newRange[0]); + range[1] = max(range[1], newRange[1]); + break; + } + } + if (i === l) + ranges.push(newRange); + return ranges; + } + let sortDirection = ascending; + function rangeSorter(a, b) { return sortDirection(a[0], b[0]); } + let set; + try { + set = ranges.reduce(addRange, []); + set.sort(rangeSorter); + } + catch (ex) { + return fail(this, INVALID_KEY_ARGUMENT); + } + let rangePos = 0; + const keyIsBeyondCurrentEntry = includeUppers ? + key => ascending(key, set[rangePos][1]) > 0 : + key => ascending(key, set[rangePos][1]) >= 0; + const keyIsBeforeCurrentEntry = includeLowers ? + key => descending(key, set[rangePos][0]) > 0 : + key => descending(key, set[rangePos][0]) >= 0; + function keyWithinCurrentRange(key) { + return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); + } + let checkKey = keyIsBeyondCurrentEntry; + const c = new this.Collection(this, () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers)); + c._ondirectionchange = direction => { + if (direction === "next") { + checkKey = keyIsBeyondCurrentEntry; + sortDirection = ascending; + } + else { + checkKey = keyIsBeforeCurrentEntry; + sortDirection = descending; + } + set.sort(rangeSorter); + }; + c._addAlgorithm((cursor, advance, resolve) => { + var key = cursor.key; + while (checkKey(key)) { + ++rangePos; + if (rangePos === set.length) { + advance(resolve); + return false; + } + } + if (keyWithinCurrentRange(key)) { + return true; + } + else if (this._cmp(key, set[rangePos][1]) === 0 || this._cmp(key, set[rangePos][0]) === 0) { + return false; + } + else { + advance(() => { + if (sortDirection === ascending) + cursor.continue(set[rangePos][0]); + else + cursor.continue(set[rangePos][1]); + }); + return false; + } + }); + return c; + } + startsWithAnyOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (!set.every(s => typeof s === 'string')) { + return fail(this, "startsWithAnyOf() only works with strings"); + } + if (set.length === 0) + return emptyCollection(this); + return this.inAnyRange(set.map((str) => [str, str + maxString])); + } +} + +function createWhereClauseConstructor(db) { + return makeClassConstructor(WhereClause.prototype, function WhereClause(table, index, orCollection) { + this.db = db; + this._ctx = { + table: table, + index: index === ":id" ? null : index, + or: orCollection + }; + this._cmp = this._ascending = cmp; + this._descending = (a, b) => cmp(b, a); + this._max = (a, b) => cmp(a, b) > 0 ? a : b; + this._min = (a, b) => cmp(a, b) < 0 ? a : b; + this._IDBKeyRange = db._deps.IDBKeyRange; + }); +} + +function eventRejectHandler(reject) { + return wrap(function (event) { + preventDefault(event); + reject(event.target.error); + return false; + }); +} +function preventDefault(event) { + if (event.stopPropagation) + event.stopPropagation(); + if (event.preventDefault) + event.preventDefault(); +} + +class Transaction { + _lock() { + assert(!PSD.global); + ++this._reculock; + if (this._reculock === 1 && !PSD.global) + PSD.lockOwnerFor = this; + return this; + } + _unlock() { + assert(!PSD.global); + if (--this._reculock === 0) { + if (!PSD.global) + PSD.lockOwnerFor = null; + while (this._blockedFuncs.length > 0 && !this._locked()) { + var fnAndPSD = this._blockedFuncs.shift(); + try { + usePSD(fnAndPSD[1], fnAndPSD[0]); + } + catch (e) { } + } + } + return this; + } + _locked() { + return this._reculock && PSD.lockOwnerFor !== this; + } + create(idbtrans) { + if (!this.mode) + return this; + const idbdb = this.db.idbdb; + const dbOpenError = this.db._state.dbOpenError; + assert(!this.idbtrans); + if (!idbtrans && !idbdb) { + switch (dbOpenError && dbOpenError.name) { + case "DatabaseClosedError": + throw new exceptions.DatabaseClosed(dbOpenError); + case "MissingAPIError": + throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); + default: + throw new exceptions.OpenFailed(dbOpenError); + } + } + if (!this.active) + throw new exceptions.TransactionInactive(); + assert(this._completion._state === null); + idbtrans = this.idbtrans = idbtrans || + (this.db.core + ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }) + : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })); + idbtrans.onerror = wrap(ev => { + preventDefault(ev); + this._reject(idbtrans.error); + }); + idbtrans.onabort = wrap(ev => { + preventDefault(ev); + this.active && this._reject(new exceptions.Abort(idbtrans.error)); + this.active = false; + this.on("abort").fire(ev); + }); + idbtrans.oncomplete = wrap(() => { + this.active = false; + this._resolve(); + }); + return this; + } + _promise(mode, fn, bWriteLock) { + if (mode === 'readwrite' && this.mode !== 'readwrite') + return rejection(new exceptions.ReadOnly("Transaction is readonly")); + if (!this.active) + return rejection(new exceptions.TransactionInactive()); + if (this._locked()) { + return new DexiePromise((resolve, reject) => { + this._blockedFuncs.push([() => { + this._promise(mode, fn, bWriteLock).then(resolve, reject); + }, PSD]); + }); + } + else if (bWriteLock) { + return newScope(() => { + var p = new DexiePromise((resolve, reject) => { + this._lock(); + const rv = fn(resolve, reject, this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p.finally(() => this._unlock()); + p._lib = true; + return p; + }); + } + else { + var p = new DexiePromise((resolve, reject) => { + var rv = fn(resolve, reject, this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p._lib = true; + return p; + } + } + _root() { + return this.parent ? this.parent._root() : this; + } + waitFor(promiseLike) { + var root = this._root(); + const promise = DexiePromise.resolve(promiseLike); + if (root._waitingFor) { + root._waitingFor = root._waitingFor.then(() => promise); + } + else { + root._waitingFor = promise; + root._waitingQueue = []; + var store = root.idbtrans.objectStore(root.storeNames[0]); + (function spin() { + ++root._spinCount; + while (root._waitingQueue.length) + (root._waitingQueue.shift())(); + if (root._waitingFor) + store.get(-Infinity).onsuccess = spin; + }()); + } + var currentWaitPromise = root._waitingFor; + return new DexiePromise((resolve, reject) => { + promise.then(res => root._waitingQueue.push(wrap(resolve.bind(null, res))), err => root._waitingQueue.push(wrap(reject.bind(null, err)))).finally(() => { + if (root._waitingFor === currentWaitPromise) { + root._waitingFor = null; + } + }); + }); + } + abort() { + if (this.active) { + this.active = false; + if (this.idbtrans) + this.idbtrans.abort(); + this._reject(new exceptions.Abort()); + } + } + table(tableName) { + const memoizedTables = (this._memoizedTables || (this._memoizedTables = {})); + if (hasOwn(memoizedTables, tableName)) + return memoizedTables[tableName]; + const tableSchema = this.schema[tableName]; + if (!tableSchema) { + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + } + const transactionBoundTable = new this.db.Table(tableName, tableSchema, this); + transactionBoundTable.core = this.db.core.table(tableName); + memoizedTables[tableName] = transactionBoundTable; + return transactionBoundTable; + } +} + +function createTransactionConstructor(db) { + return makeClassConstructor(Transaction.prototype, function Transaction(mode, storeNames, dbschema, chromeTransactionDurability, parent) { + this.db = db; + this.mode = mode; + this.storeNames = storeNames; + this.schema = dbschema; + this.chromeTransactionDurability = chromeTransactionDurability; + this.idbtrans = null; + this.on = Events(this, "complete", "error", "abort"); + this.parent = parent || null; + this.active = true; + this._reculock = 0; + this._blockedFuncs = []; + this._resolve = null; + this._reject = null; + this._waitingFor = null; + this._waitingQueue = null; + this._spinCount = 0; + this._completion = new DexiePromise((resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + }); + this._completion.then(() => { + this.active = false; + this.on.complete.fire(); + }, e => { + var wasActive = this.active; + this.active = false; + this.on.error.fire(e); + this.parent ? + this.parent._reject(e) : + wasActive && this.idbtrans && this.idbtrans.abort(); + return rejection(e); + }); + }); +} + +function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey) { + return { + name, + keyPath, + unique, + multi, + auto, + compound, + src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + nameFromKeyPath(keyPath) + }; +} +function nameFromKeyPath(keyPath) { + return typeof keyPath === 'string' ? + keyPath : + keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : ""; +} + +function createTableSchema(name, primKey, indexes) { + return { + name, + primKey, + indexes, + mappedClass: null, + idxByName: arrayToObject(indexes, index => [index.name, index]) + }; +} + +function safariMultiStoreFix(storeNames) { + return storeNames.length === 1 ? storeNames[0] : storeNames; +} +let getMaxKey = (IdbKeyRange) => { + try { + IdbKeyRange.only([[]]); + getMaxKey = () => [[]]; + return [[]]; + } + catch (e) { + getMaxKey = () => maxString; + return maxString; + } +}; + +function getKeyExtractor(keyPath) { + if (keyPath == null) { + return () => undefined; + } + else if (typeof keyPath === 'string') { + return getSinglePathKeyExtractor(keyPath); + } + else { + return obj => getByKeyPath(obj, keyPath); + } +} +function getSinglePathKeyExtractor(keyPath) { + const split = keyPath.split('.'); + if (split.length === 1) { + return obj => obj[keyPath]; + } + else { + return obj => getByKeyPath(obj, keyPath); + } +} + +function arrayify(arrayLike) { + return [].slice.call(arrayLike); +} +let _id_counter = 0; +function getKeyPathAlias(keyPath) { + return keyPath == null ? + ":id" : + typeof keyPath === 'string' ? + keyPath : + `[${keyPath.join('+')}]`; +} +function createDBCore(db, IdbKeyRange, tmpTrans) { + function extractSchema(db, trans) { + const tables = arrayify(db.objectStoreNames); + return { + schema: { + name: db.name, + tables: tables.map(table => trans.objectStore(table)).map(store => { + const { keyPath, autoIncrement } = store; + const compound = isArray(keyPath); + const outbound = keyPath == null; + const indexByKeyPath = {}; + const result = { + name: store.name, + primaryKey: { + name: null, + isPrimaryKey: true, + outbound, + compound, + keyPath, + autoIncrement, + unique: true, + extractKey: getKeyExtractor(keyPath) + }, + indexes: arrayify(store.indexNames).map(indexName => store.index(indexName)) + .map(index => { + const { name, unique, multiEntry, keyPath } = index; + const compound = isArray(keyPath); + const result = { + name, + compound, + keyPath, + unique, + multiEntry, + extractKey: getKeyExtractor(keyPath) + }; + indexByKeyPath[getKeyPathAlias(keyPath)] = result; + return result; + }), + getIndexByKeyPath: (keyPath) => indexByKeyPath[getKeyPathAlias(keyPath)] + }; + indexByKeyPath[":id"] = result.primaryKey; + if (keyPath != null) { + indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey; + } + return result; + }) + }, + hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) && + !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) + }; + } + function makeIDBKeyRange(range) { + if (range.type === 3 ) + return null; + if (range.type === 4 ) + throw new Error("Cannot convert never type to IDBKeyRange"); + const { lower, upper, lowerOpen, upperOpen } = range; + const idbRange = lower === undefined ? + upper === undefined ? + null : + IdbKeyRange.upperBound(upper, !!upperOpen) : + upper === undefined ? + IdbKeyRange.lowerBound(lower, !!lowerOpen) : + IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen); + return idbRange; + } + function createDbCoreTable(tableSchema) { + const tableName = tableSchema.name; + function mutate({ trans, type, keys, values, range }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const outbound = store.keyPath == null; + const isAddOrPut = type === "put" || type === "add"; + if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange') + throw new Error("Invalid operation type: " + type); + const { length } = keys || values || { length: 1 }; + if (keys && values && keys.length !== values.length) { + throw new Error("Given keys array must have same length as given values array."); + } + if (length === 0) + return resolve({ numFailures: 0, failures: {}, results: [], lastResult: undefined }); + let req; + const reqs = []; + const failures = []; + let numFailures = 0; + const errorHandler = event => { + ++numFailures; + preventDefault(event); + }; + if (type === 'deleteRange') { + if (range.type === 4 ) + return resolve({ numFailures, failures, results: [], lastResult: undefined }); + if (range.type === 3 ) + reqs.push(req = store.clear()); + else + reqs.push(req = store.delete(makeIDBKeyRange(range))); + } + else { + const [args1, args2] = isAddOrPut ? + outbound ? + [values, keys] : + [values, null] : + [keys, null]; + if (isAddOrPut) { + for (let i = 0; i < length; ++i) { + reqs.push(req = (args2 && args2[i] !== undefined ? + store[type](args1[i], args2[i]) : + store[type](args1[i]))); + req.onerror = errorHandler; + } + } + else { + for (let i = 0; i < length; ++i) { + reqs.push(req = store[type](args1[i])); + req.onerror = errorHandler; + } + } + } + const done = event => { + const lastResult = event.target.result; + for (let i = reqs.length; i--;) { + if (reqs[i].error != null) + failures[i] = reqs[i].error; + reqs[i] = reqs[i].result; + } + resolve({ + numFailures, + failures, + results: type === "delete" ? keys : reqs, + lastResult + }); + }; + req.onerror = event => { + errorHandler(event); + done(event); + }; + req.onsuccess = done; + }); + } + function openCursor({ trans, values, query, reverse, unique }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const { index, range } = query; + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? + store : + store.index(index.name); + const direction = reverse ? + unique ? + "prevunique" : + "prev" : + unique ? + "nextunique" : + "next"; + const req = values || !('openKeyCursor' in source) ? + source.openCursor(makeIDBKeyRange(range), direction) : + source.openKeyCursor(makeIDBKeyRange(range), direction); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(ev => { + const cursor = req.result; + if (!cursor) { + resolve(null); + return; + } + cursor.___id = ++_id_counter; + cursor.done = false; + const _cursorContinue = cursor.continue.bind(cursor); + let _cursorContinuePrimaryKey = cursor.continuePrimaryKey; + if (_cursorContinuePrimaryKey) + _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor); + const _cursorAdvance = cursor.advance.bind(cursor); + const doThrowCursorIsNotStarted = () => { throw new Error("Cursor not started"); }; + const doThrowCursorIsStopped = () => { throw new Error("Cursor not stopped"); }; + cursor.trans = trans; + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted; + cursor.fail = wrap(reject); + cursor.next = function () { + let gotOne = 1; + return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this); + }; + cursor.start = (callback) => { + const iterationPromise = new Promise((resolveIteration, rejectIteration) => { + resolveIteration = wrap(resolveIteration); + req.onerror = eventRejectHandler(rejectIteration); + cursor.fail = rejectIteration; + cursor.stop = value => { + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped; + resolveIteration(value); + }; + }); + const guardedCallback = () => { + if (req.result) { + try { + callback(); + } + catch (err) { + cursor.fail(err); + } + } + else { + cursor.done = true; + cursor.start = () => { throw new Error("Cursor behind last entry"); }; + cursor.stop(); + } + }; + req.onsuccess = wrap(ev => { + req.onsuccess = guardedCallback; + guardedCallback(); + }); + cursor.continue = _cursorContinue; + cursor.continuePrimaryKey = _cursorContinuePrimaryKey; + cursor.advance = _cursorAdvance; + guardedCallback(); + return iterationPromise; + }; + resolve(cursor); + }, reject); + }); + } + function query(hasGetAll) { + return (request) => { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const { trans, values, limit, query } = request; + const nonInfinitLimit = limit === Infinity ? undefined : limit; + const { index, range } = query; + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? store : store.index(index.name); + const idbKeyRange = makeIDBKeyRange(range); + if (limit === 0) + return resolve({ result: [] }); + if (hasGetAll) { + const req = values ? + source.getAll(idbKeyRange, nonInfinitLimit) : + source.getAllKeys(idbKeyRange, nonInfinitLimit); + req.onsuccess = event => resolve({ result: event.target.result }); + req.onerror = eventRejectHandler(reject); + } + else { + let count = 0; + const req = values || !('openKeyCursor' in source) ? + source.openCursor(idbKeyRange) : + source.openKeyCursor(idbKeyRange); + const result = []; + req.onsuccess = event => { + const cursor = req.result; + if (!cursor) + return resolve({ result }); + result.push(values ? cursor.value : cursor.primaryKey); + if (++count === limit) + return resolve({ result }); + cursor.continue(); + }; + req.onerror = eventRejectHandler(reject); + } + }); + }; + } + return { + name: tableName, + schema: tableSchema, + mutate, + getMany({ trans, keys, method = 'get' }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const length = keys.length; + const result = new Array(length); + let keyCount = 0; + let callbackCount = 0; + let req; + const successHandler = event => { + const req = event.target; + if ((result[req._pos] = req.result) != null) + ; + if (++callbackCount === keyCount) + resolve(result); + }; + const errorHandler = eventRejectHandler(reject); + for (let i = 0; i < length; ++i) { + const key = keys[i]; + if (key != null) { + req = store[method](keys[i]); + req._pos = i; + req.onsuccess = successHandler; + req.onerror = errorHandler; + ++keyCount; + } + } + if (keyCount === 0) + resolve(result); + }); + }, + get({ trans, key, method = 'get' }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const req = store[method](key); + req.onsuccess = event => resolve(event.target.result); + req.onerror = eventRejectHandler(reject); + }); + }, + query: query(hasGetAll), + openCursor, + count({ query, trans }) { + const { index, range } = query; + return new Promise((resolve, reject) => { + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? store : store.index(index.name); + const idbKeyRange = makeIDBKeyRange(range); + const req = idbKeyRange ? source.count(idbKeyRange) : source.count(); + req.onsuccess = wrap(ev => resolve(ev.target.result)); + req.onerror = eventRejectHandler(reject); + }); + } + }; + } + const { schema, hasGetAll } = extractSchema(db, tmpTrans); + const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema)); + const tableMap = {}; + tables.forEach(table => tableMap[table.name] = table); + return { + stack: "dbcore", + transaction: db.transaction.bind(db), + table(name) { + const result = tableMap[name]; + if (!result) + throw new Error(`Table '${name}' not found`); + return tableMap[name]; + }, + MIN_KEY: -Infinity, + MAX_KEY: getMaxKey(IdbKeyRange), + schema + }; +} + +function createMiddlewareStack(stackImpl, middlewares) { + return middlewares.reduce((down, { create }) => ({ ...down, ...create(down) }), stackImpl); +} +function createMiddlewareStacks(middlewares, idbdb, { IDBKeyRange, indexedDB }, tmpTrans) { + const dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore); + return { + dbcore + }; +} +function generateMiddlewareStacks({ _novip: db }, tmpTrans) { + const idbdb = tmpTrans.db; + const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans); + db.core = stacks.dbcore; + db.tables.forEach(table => { + const tableName = table.name; + if (db.core.schema.tables.some(tbl => tbl.name === tableName)) { + table.core = db.core.table(tableName); + if (db[tableName] instanceof db.Table) { + db[tableName].core = table.core; + } + } + }); +} + +function setApiOnPlace({ _novip: db }, objs, tableNames, dbschema) { + tableNames.forEach(tableName => { + const schema = dbschema[tableName]; + objs.forEach(obj => { + const propDesc = getPropertyDescriptor(obj, tableName); + if (!propDesc || ("value" in propDesc && propDesc.value === undefined)) { + if (obj === db.Transaction.prototype || obj instanceof db.Transaction) { + setProp(obj, tableName, { + get() { return this.table(tableName); }, + set(value) { + defineProperty(this, tableName, { value, writable: true, configurable: true, enumerable: true }); + } + }); + } + else { + obj[tableName] = new db.Table(tableName, schema); + } + } + }); + }); +} +function removeTablesApi({ _novip: db }, objs) { + objs.forEach(obj => { + for (let key in obj) { + if (obj[key] instanceof db.Table) + delete obj[key]; + } + }); +} +function lowerVersionFirst(a, b) { + return a._cfg.version - b._cfg.version; +} +function runUpgraders(db, oldVersion, idbUpgradeTrans, reject) { + const globalSchema = db._dbSchema; + const trans = db._createTransaction('readwrite', db._storeNames, globalSchema); + trans.create(idbUpgradeTrans); + trans._completion.catch(reject); + const rejectTransaction = trans._reject.bind(trans); + const transless = PSD.transless || PSD; + newScope(() => { + PSD.trans = trans; + PSD.transless = transless; + if (oldVersion === 0) { + keys(globalSchema).forEach(tableName => { + createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); + }); + generateMiddlewareStacks(db, idbUpgradeTrans); + DexiePromise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction); + } + else + updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans).catch(rejectTransaction); + }); +} +function updateTablesAndIndexes({ _novip: db }, oldVersion, trans, idbUpgradeTrans) { + const queue = []; + const versions = db._versions; + let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + let anyContentUpgraderHasRun = false; + const versToRun = versions.filter(v => v._cfg.version >= oldVersion); + versToRun.forEach(version => { + queue.push(() => { + const oldSchema = globalSchema; + const newSchema = version._cfg.dbschema; + adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans); + adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans); + globalSchema = db._dbSchema = newSchema; + const diff = getSchemaDiff(oldSchema, newSchema); + diff.add.forEach(tuple => { + createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes); + }); + diff.change.forEach(change => { + if (change.recreate) { + throw new exceptions.Upgrade("Not yet support for changing primary key"); + } + else { + const store = idbUpgradeTrans.objectStore(change.name); + change.add.forEach(idx => addIndex(store, idx)); + change.change.forEach(idx => { + store.deleteIndex(idx.name); + addIndex(store, idx); + }); + change.del.forEach(idxName => store.deleteIndex(idxName)); + } + }); + const contentUpgrade = version._cfg.contentUpgrade; + if (contentUpgrade && version._cfg.version > oldVersion) { + generateMiddlewareStacks(db, idbUpgradeTrans); + trans._memoizedTables = {}; + anyContentUpgraderHasRun = true; + let upgradeSchema = shallowClone(newSchema); + diff.del.forEach(table => { + upgradeSchema[table] = oldSchema[table]; + }); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema); + trans.schema = upgradeSchema; + const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade); + if (contentUpgradeIsAsync) { + incrementExpectedAwaits(); + } + let returnValue; + const promiseFollowed = DexiePromise.follow(() => { + returnValue = contentUpgrade(trans); + if (returnValue) { + if (contentUpgradeIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + } + }); + return (returnValue && typeof returnValue.then === 'function' ? + DexiePromise.resolve(returnValue) : promiseFollowed.then(() => returnValue)); + } + }); + queue.push(idbtrans => { + if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) { + const newSchema = version._cfg.dbschema; + deleteRemovedTables(newSchema, idbtrans); + } + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema); + trans.schema = db._dbSchema; + }); + }); + function runQueue() { + return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : + DexiePromise.resolve(); + } + return runQueue().then(() => { + createMissingTables(globalSchema, idbUpgradeTrans); + }); +} +function getSchemaDiff(oldSchema, newSchema) { + const diff = { + del: [], + add: [], + change: [] + }; + let table; + for (table in oldSchema) { + if (!newSchema[table]) + diff.del.push(table); + } + for (table in newSchema) { + const oldDef = oldSchema[table], newDef = newSchema[table]; + if (!oldDef) { + diff.add.push([table, newDef]); + } + else { + const change = { + name: table, + def: newDef, + recreate: false, + del: [], + add: [], + change: [] + }; + if (( + '' + (oldDef.primKey.keyPath || '')) !== ('' + (newDef.primKey.keyPath || '')) || + (oldDef.primKey.auto !== newDef.primKey.auto && !isIEOrEdge)) + { + change.recreate = true; + diff.change.push(change); + } + else { + const oldIndexes = oldDef.idxByName; + const newIndexes = newDef.idxByName; + let idxName; + for (idxName in oldIndexes) { + if (!newIndexes[idxName]) + change.del.push(idxName); + } + for (idxName in newIndexes) { + const oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; + if (!oldIdx) + change.add.push(newIdx); + else if (oldIdx.src !== newIdx.src) + change.change.push(newIdx); + } + if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { + diff.change.push(change); + } + } + } + } + return diff; +} +function createTable(idbtrans, tableName, primKey, indexes) { + const store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? + { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : + { autoIncrement: primKey.auto }); + indexes.forEach(idx => addIndex(store, idx)); + return store; +} +function createMissingTables(newSchema, idbtrans) { + keys(newSchema).forEach(tableName => { + if (!idbtrans.db.objectStoreNames.contains(tableName)) { + createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); + } + }); +} +function deleteRemovedTables(newSchema, idbtrans) { + [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName => newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName)); +} +function addIndex(store, idx) { + store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); +} +function buildGlobalSchema(db, idbdb, tmpTrans) { + const globalSchema = {}; + const dbStoreNames = slice(idbdb.objectStoreNames, 0); + dbStoreNames.forEach(storeName => { + const store = tmpTrans.objectStore(storeName); + let keyPath = store.keyPath; + const primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true); + const indexes = []; + for (let j = 0; j < store.indexNames.length; ++j) { + const idbindex = store.index(store.indexNames[j]); + keyPath = idbindex.keyPath; + var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false); + indexes.push(index); + } + globalSchema[storeName] = createTableSchema(storeName, primKey, indexes); + }); + return globalSchema; +} +function readGlobalSchema({ _novip: db }, idbdb, tmpTrans) { + db.verno = idbdb.version / 10; + const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans); + db._storeNames = slice(idbdb.objectStoreNames, 0); + setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema); +} +function verifyInstalledSchema(db, tmpTrans) { + const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans); + const diff = getSchemaDiff(installedSchema, db._dbSchema); + return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length)); +} +function adjustToExistingIndexNames({ _novip: db }, schema, idbtrans) { + const storeNames = idbtrans.db.objectStoreNames; + for (let i = 0; i < storeNames.length; ++i) { + const storeName = storeNames[i]; + const store = idbtrans.objectStore(storeName); + db._hasGetAll = 'getAll' in store; + for (let j = 0; j < store.indexNames.length; ++j) { + const indexName = store.indexNames[j]; + const keyPath = store.index(indexName).keyPath; + const dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]"; + if (schema[storeName]) { + const indexSpec = schema[storeName].idxByName[dexieName]; + if (indexSpec) { + indexSpec.name = indexName; + delete schema[storeName].idxByName[dexieName]; + schema[storeName].idxByName[indexName] = indexSpec; + } + } + } + } + if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { + db._hasGetAll = false; + } +} +function parseIndexSyntax(primKeyAndIndexes) { + return primKeyAndIndexes.split(',').map((index, indexNum) => { + index = index.trim(); + const name = index.replace(/([&*]|\+\+)/g, ""); + const keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name; + return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0); + }); +} + +class Version { + _parseStoresSpec(stores, outSchema) { + keys(stores).forEach(tableName => { + if (stores[tableName] !== null) { + var indexes = parseIndexSyntax(stores[tableName]); + var primKey = indexes.shift(); + if (primKey.multi) + throw new exceptions.Schema("Primary key cannot be multi-valued"); + indexes.forEach(idx => { + if (idx.auto) + throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); + if (!idx.keyPath) + throw new exceptions.Schema("Index must have a name and cannot be an empty string"); + }); + outSchema[tableName] = createTableSchema(tableName, primKey, indexes); + } + }); + } + stores(stores) { + const db = this.db; + this._cfg.storesSource = this._cfg.storesSource ? + extend(this._cfg.storesSource, stores) : + stores; + const versions = db._versions; + const storesSpec = {}; + let dbschema = {}; + versions.forEach(version => { + extend(storesSpec, version._cfg.storesSource); + dbschema = (version._cfg.dbschema = {}); + version._parseStoresSpec(storesSpec, dbschema); + }); + db._dbSchema = dbschema; + removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]); + setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); + db._storeNames = keys(dbschema); + return this; + } + upgrade(upgradeFunction) { + this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction); + return this; + } +} + +function createVersionConstructor(db) { + return makeClassConstructor(Version.prototype, function Version(versionNumber) { + this.db = db; + this._cfg = { + version: versionNumber, + storesSource: null, + dbschema: {}, + tables: {}, + contentUpgrade: null + }; + }); +} + +function getDbNamesTable(indexedDB, IDBKeyRange) { + let dbNamesDB = indexedDB["_dbNamesDB"]; + if (!dbNamesDB) { + dbNamesDB = indexedDB["_dbNamesDB"] = new Dexie$1(DBNAMES_DB, { + addons: [], + indexedDB, + IDBKeyRange, + }); + dbNamesDB.version(1).stores({ dbnames: "name" }); + } + return dbNamesDB.table("dbnames"); +} +function hasDatabasesNative(indexedDB) { + return indexedDB && typeof indexedDB.databases === "function"; +} +function getDatabaseNames({ indexedDB, IDBKeyRange, }) { + return hasDatabasesNative(indexedDB) + ? Promise.resolve(indexedDB.databases()).then((infos) => infos + .map((info) => info.name) + .filter((name) => name !== DBNAMES_DB)) + : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys(); +} +function _onDatabaseCreated({ indexedDB, IDBKeyRange }, name) { + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).put({ name }).catch(nop); +} +function _onDatabaseDeleted({ indexedDB, IDBKeyRange }, name) { + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop); +} + +function vip(fn) { + return newScope(function () { + PSD.letThrough = true; + return fn(); + }); +} + +function idbReady() { + var isSafari = !navigator.userAgentData && + /Safari\//.test(navigator.userAgent) && + !/Chrom(e|ium)\//.test(navigator.userAgent); + if (!isSafari || !indexedDB.databases) + return Promise.resolve(); + var intervalId; + return new Promise(function (resolve) { + var tryIdb = function () { return indexedDB.databases().finally(resolve); }; + intervalId = setInterval(tryIdb, 100); + tryIdb(); + }).finally(function () { return clearInterval(intervalId); }); +} + +function dexieOpen(db) { + const state = db._state; + const { indexedDB } = db._deps; + if (state.isBeingOpened || db.idbdb) + return state.dbReadyPromise.then(() => state.dbOpenError ? + rejection(state.dbOpenError) : + db); + debug && (state.openCanceller._stackHolder = getErrorWithStack()); + state.isBeingOpened = true; + state.dbOpenError = null; + state.openComplete = false; + const openCanceller = state.openCanceller; + function throwIfCancelled() { + if (state.openCanceller !== openCanceller) + throw new exceptions.DatabaseClosed('db.open() was cancelled'); + } + let resolveDbReady = state.dbReadyResolve, + upgradeTransaction = null, wasCreated = false; + return DexiePromise.race([openCanceller, (typeof navigator === 'undefined' ? DexiePromise.resolve() : idbReady()).then(() => new DexiePromise((resolve, reject) => { + throwIfCancelled(); + if (!indexedDB) + throw new exceptions.MissingAPI(); + const dbName = db.name; + const req = state.autoSchema ? + indexedDB.open(dbName) : + indexedDB.open(dbName, Math.round(db.verno * 10)); + if (!req) + throw new exceptions.MissingAPI(); + req.onerror = eventRejectHandler(reject); + req.onblocked = wrap(db._fireOnBlocked); + req.onupgradeneeded = wrap(e => { + upgradeTransaction = req.transaction; + if (state.autoSchema && !db._options.allowEmptyDB) { + req.onerror = preventDefault; + upgradeTransaction.abort(); + req.result.close(); + const delreq = indexedDB.deleteDatabase(dbName); + delreq.onsuccess = delreq.onerror = wrap(() => { + reject(new exceptions.NoSuchDatabase(`Database ${dbName} doesnt exist`)); + }); + } + else { + upgradeTransaction.onerror = eventRejectHandler(reject); + var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; + wasCreated = oldVer < 1; + db._novip.idbdb = req.result; + runUpgraders(db, oldVer / 10, upgradeTransaction, reject); + } + }, reject); + req.onsuccess = wrap(() => { + upgradeTransaction = null; + const idbdb = db._novip.idbdb = req.result; + const objectStoreNames = slice(idbdb.objectStoreNames); + if (objectStoreNames.length > 0) + try { + const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly'); + if (state.autoSchema) + readGlobalSchema(db, idbdb, tmpTrans); + else { + adjustToExistingIndexNames(db, db._dbSchema, tmpTrans); + if (!verifyInstalledSchema(db, tmpTrans)) { + console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Some queries may fail.`); + } + } + generateMiddlewareStacks(db, tmpTrans); + } + catch (e) { + } + connections.push(db); + idbdb.onversionchange = wrap(ev => { + state.vcFired = true; + db.on("versionchange").fire(ev); + }); + idbdb.onclose = wrap(ev => { + db.on("close").fire(ev); + }); + if (wasCreated) + _onDatabaseCreated(db._deps, dbName); + resolve(); + }, reject); + }))]).then(() => { + throwIfCancelled(); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(() => db.on.ready.fire(db.vip))).then(function fireRemainders() { + if (state.onReadyBeingFired.length > 0) { + let remainders = state.onReadyBeingFired.reduce(promisableChain, nop); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(() => remainders(db.vip))).then(fireRemainders); + } + }); + }).finally(() => { + state.onReadyBeingFired = null; + state.isBeingOpened = false; + }).then(() => { + return db; + }).catch(err => { + state.dbOpenError = err; + try { + upgradeTransaction && upgradeTransaction.abort(); + } + catch (_a) { } + if (openCanceller === state.openCanceller) { + db._close(); + } + return rejection(err); + }).finally(() => { + state.openComplete = true; + resolveDbReady(); + }); +} + +function awaitIterator(iterator) { + var callNext = result => iterator.next(result), doThrow = error => iterator.throw(error), onSuccess = step(callNext), onError = step(doThrow); + function step(getNext) { + return (val) => { + var next = getNext(val), value = next.value; + return next.done ? value : + (!value || typeof value.then !== 'function' ? + isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : + value.then(onSuccess, onError)); + }; + } + return step(callNext)(); +} + +function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { + var i = arguments.length; + if (i < 2) + throw new exceptions.InvalidArgument("Too few arguments"); + var args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + scopeFunc = args.pop(); + var tables = flatten(args); + return [mode, tables, scopeFunc]; +} +function enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) { + return DexiePromise.resolve().then(() => { + const transless = PSD.transless || PSD; + const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction); + const zoneProps = { + trans: trans, + transless: transless + }; + if (parentTransaction) { + trans.idbtrans = parentTransaction.idbtrans; + } + else { + trans.create(); + } + const scopeFuncIsAsync = isAsyncFunction(scopeFunc); + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + let returnValue; + const promiseFollowed = DexiePromise.follow(() => { + returnValue = scopeFunc.call(trans, trans); + if (returnValue) { + if (scopeFuncIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') { + returnValue = awaitIterator(returnValue); + } + } + }, zoneProps); + return (returnValue && typeof returnValue.then === 'function' ? + DexiePromise.resolve(returnValue).then(x => trans.active ? + x + : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn"))) + : promiseFollowed.then(() => returnValue)).then(x => { + if (parentTransaction) + trans._resolve(); + return trans._completion.then(() => x); + }).catch(e => { + trans._reject(e); + return rejection(e); + }); + }); +} + +function pad(a, value, count) { + const result = isArray(a) ? a.slice() : [a]; + for (let i = 0; i < count; ++i) + result.push(value); + return result; +} +function createVirtualIndexMiddleware(down) { + return { + ...down, + table(tableName) { + const table = down.table(tableName); + const { schema } = table; + const indexLookup = {}; + const allVirtualIndexes = []; + function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) { + const keyPathAlias = getKeyPathAlias(keyPath); + const indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []); + const keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length; + const isVirtual = keyTail > 0; + const virtualIndex = { + ...lowLevelIndex, + isVirtual, + keyTail, + keyLength, + extractKey: getKeyExtractor(keyPath), + unique: !isVirtual && lowLevelIndex.unique + }; + indexList.push(virtualIndex); + if (!virtualIndex.isPrimaryKey) { + allVirtualIndexes.push(virtualIndex); + } + if (keyLength > 1) { + const virtualKeyPath = keyLength === 2 ? + keyPath[0] : + keyPath.slice(0, keyLength - 1); + addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex); + } + indexList.sort((a, b) => a.keyTail - b.keyTail); + return virtualIndex; + } + const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey); + indexLookup[":id"] = [primaryKey]; + for (const index of schema.indexes) { + addVirtualIndexes(index.keyPath, 0, index); + } + function findBestIndex(keyPath) { + const result = indexLookup[getKeyPathAlias(keyPath)]; + return result && result[0]; + } + function translateRange(range, keyTail) { + return { + type: range.type === 1 ? + 2 : + range.type, + lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail), + lowerOpen: true, + upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail), + upperOpen: true + }; + } + function translateRequest(req) { + const index = req.query.index; + return index.isVirtual ? { + ...req, + query: { + index, + range: translateRange(req.query.range, index.keyTail) + } + } : req; + } + const result = { + ...table, + schema: { + ...schema, + primaryKey, + indexes: allVirtualIndexes, + getIndexByKeyPath: findBestIndex + }, + count(req) { + return table.count(translateRequest(req)); + }, + query(req) { + return table.query(translateRequest(req)); + }, + openCursor(req) { + const { keyTail, isVirtual, keyLength } = req.query.index; + if (!isVirtual) + return table.openCursor(req); + function createVirtualCursor(cursor) { + function _continue(key) { + key != null ? + cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) : + req.unique ? + cursor.continue(cursor.key.slice(0, keyLength) + .concat(req.reverse + ? down.MIN_KEY + : down.MAX_KEY, keyTail)) : + cursor.continue(); + } + const virtualCursor = Object.create(cursor, { + continue: { value: _continue }, + continuePrimaryKey: { + value(key, primaryKey) { + cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey); + } + }, + primaryKey: { + get() { + return cursor.primaryKey; + } + }, + key: { + get() { + const key = cursor.key; + return keyLength === 1 ? + key[0] : + key.slice(0, keyLength); + } + }, + value: { + get() { + return cursor.value; + } + } + }); + return virtualCursor; + } + return table.openCursor(translateRequest(req)) + .then(cursor => cursor && createVirtualCursor(cursor)); + } + }; + return result; + } + }; +} +const virtualIndexMiddleware = { + stack: "dbcore", + name: "VirtualIndexMiddleware", + level: 1, + create: createVirtualIndexMiddleware +}; + +class Dexie$1 { + constructor(name, options) { + this._middlewares = {}; + this.verno = 0; + const deps = Dexie$1.dependencies; + this._options = options = { + addons: Dexie$1.addons, + autoOpen: true, + indexedDB: deps.indexedDB, + IDBKeyRange: deps.IDBKeyRange, + ...options + }; + this._deps = { + indexedDB: options.indexedDB, + IDBKeyRange: options.IDBKeyRange + }; + const { addons, } = options; + this._dbSchema = {}; + this._versions = []; + this._storeNames = []; + this._allTables = {}; + this.idbdb = null; + this._novip = this; + const state = { + dbOpenError: null, + isBeingOpened: false, + onReadyBeingFired: null, + openComplete: false, + dbReadyResolve: nop, + dbReadyPromise: null, + cancelOpen: nop, + openCanceller: null, + autoSchema: true + }; + state.dbReadyPromise = new DexiePromise(resolve => { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise((_, reject) => { + state.cancelOpen = reject; + }); + this._state = state; + this.name = name; + this.on = Events(this, "populate", "blocked", "versionchange", "close", { ready: [promisableChain, nop] }); + this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => { + return (subscriber, bSticky) => { + Dexie$1.vip(() => { + const state = this._state; + if (state.openComplete) { + if (!state.dbOpenError) + DexiePromise.resolve().then(subscriber); + if (bSticky) + subscribe(subscriber); + } + else if (state.onReadyBeingFired) { + state.onReadyBeingFired.push(subscriber); + if (bSticky) + subscribe(subscriber); + } + else { + subscribe(subscriber); + const db = this; + if (!bSticky) + subscribe(function unsubscribe() { + db.on.ready.unsubscribe(subscriber); + db.on.ready.unsubscribe(unsubscribe); + }); + } + }); + }; + }); + this.Collection = createCollectionConstructor(this); + this.Table = createTableConstructor(this); + this.Transaction = createTransactionConstructor(this); + this.Version = createVersionConstructor(this); + this.WhereClause = createWhereClauseConstructor(this); + this.on("versionchange", ev => { + if (ev.newVersion > 0) + console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`); + else + console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`); + this.close(); + }); + this.on("blocked", ev => { + if (!ev.newVersion || ev.newVersion < ev.oldVersion) + console.warn(`Dexie.delete('${this.name}') was blocked`); + else + console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${ev.oldVersion / 10}`); + }); + this._maxKey = getMaxKey(options.IDBKeyRange); + this._createTransaction = (mode, storeNames, dbschema, parentTransaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction); + this._fireOnBlocked = ev => { + this.on("blocked").fire(ev); + connections + .filter(c => c.name === this.name && c !== this && !c._state.vcFired) + .map(c => c.on("versionchange").fire(ev)); + }; + this.use(virtualIndexMiddleware); + this.vip = Object.create(this, { _vip: { value: true } }); + addons.forEach(addon => addon(this)); + } + version(versionNumber) { + if (isNaN(versionNumber) || versionNumber < 0.1) + throw new exceptions.Type(`Given version is not a positive number`); + versionNumber = Math.round(versionNumber * 10) / 10; + if (this.idbdb || this._state.isBeingOpened) + throw new exceptions.Schema("Cannot add version when database is open"); + this.verno = Math.max(this.verno, versionNumber); + const versions = this._versions; + var versionInstance = versions.filter(v => v._cfg.version === versionNumber)[0]; + if (versionInstance) + return versionInstance; + versionInstance = new this.Version(versionNumber); + versions.push(versionInstance); + versions.sort(lowerVersionFirst); + versionInstance.stores({}); + this._state.autoSchema = false; + return versionInstance; + } + _whenReady(fn) { + return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new DexiePromise((resolve, reject) => { + if (this._state.openComplete) { + return reject(new exceptions.DatabaseClosed(this._state.dbOpenError)); + } + if (!this._state.isBeingOpened) { + if (!this._options.autoOpen) { + reject(new exceptions.DatabaseClosed()); + return; + } + this.open().catch(nop); + } + this._state.dbReadyPromise.then(resolve, reject); + }).then(fn); + } + use({ stack, create, level, name }) { + if (name) + this.unuse({ stack, name }); + const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []); + middlewares.push({ stack, create, level: level == null ? 10 : level, name }); + middlewares.sort((a, b) => a.level - b.level); + return this; + } + unuse({ stack, name, create }) { + if (stack && this._middlewares[stack]) { + this._middlewares[stack] = this._middlewares[stack].filter(mw => create ? mw.create !== create : + name ? mw.name !== name : + false); + } + return this; + } + open() { + return dexieOpen(this); + } + _close() { + const state = this._state; + const idx = connections.indexOf(this); + if (idx >= 0) + connections.splice(idx, 1); + if (this.idbdb) { + try { + this.idbdb.close(); + } + catch (e) { } + this._novip.idbdb = null; + } + state.dbReadyPromise = new DexiePromise(resolve => { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise((_, reject) => { + state.cancelOpen = reject; + }); + } + close() { + this._close(); + const state = this._state; + this._options.autoOpen = false; + state.dbOpenError = new exceptions.DatabaseClosed(); + if (state.isBeingOpened) + state.cancelOpen(state.dbOpenError); + } + delete() { + const hasArguments = arguments.length > 0; + const state = this._state; + return new DexiePromise((resolve, reject) => { + const doDelete = () => { + this.close(); + var req = this._deps.indexedDB.deleteDatabase(this.name); + req.onsuccess = wrap(() => { + _onDatabaseDeleted(this._deps, this.name); + resolve(); + }); + req.onerror = eventRejectHandler(reject); + req.onblocked = this._fireOnBlocked; + }; + if (hasArguments) + throw new exceptions.InvalidArgument("Arguments not allowed in db.delete()"); + if (state.isBeingOpened) { + state.dbReadyPromise.then(doDelete); + } + else { + doDelete(); + } + }); + } + backendDB() { + return this.idbdb; + } + isOpen() { + return this.idbdb !== null; + } + hasBeenClosed() { + const dbOpenError = this._state.dbOpenError; + return dbOpenError && (dbOpenError.name === 'DatabaseClosed'); + } + hasFailed() { + return this._state.dbOpenError !== null; + } + dynamicallyOpened() { + return this._state.autoSchema; + } + get tables() { + return keys(this._allTables).map(name => this._allTables[name]); + } + transaction() { + const args = extractTransactionArgs.apply(this, arguments); + return this._transaction.apply(this, args); + } + _transaction(mode, tables, scopeFunc) { + let parentTransaction = PSD.trans; + if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) + parentTransaction = null; + const onlyIfCompatible = mode.indexOf('?') !== -1; + mode = mode.replace('!', '').replace('?', ''); + let idbMode, storeNames; + try { + storeNames = tables.map(table => { + var storeName = table instanceof this.Table ? table.name : table; + if (typeof storeName !== 'string') + throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); + return storeName; + }); + if (mode == "r" || mode === READONLY) + idbMode = READONLY; + else if (mode == "rw" || mode == READWRITE) + idbMode = READWRITE; + else + throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); + if (parentTransaction) { + if (parentTransaction.mode === READONLY && idbMode === READWRITE) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); + } + if (parentTransaction) { + storeNames.forEach(storeName => { + if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Table " + storeName + + " not included in parent transaction."); + } + }); + } + if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { + parentTransaction = null; + } + } + } + catch (e) { + return parentTransaction ? + parentTransaction._promise(null, (_, reject) => { reject(e); }) : + rejection(e); + } + const enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc); + return (parentTransaction ? + parentTransaction._promise(idbMode, enterTransaction, "lock") : + PSD.trans ? + usePSD(PSD.transless, () => this._whenReady(enterTransaction)) : + this._whenReady(enterTransaction)); + } + table(tableName) { + if (!hasOwn(this._allTables, tableName)) { + throw new exceptions.InvalidTable(`Table ${tableName} does not exist`); + } + return this._allTables[tableName]; + } +} + +function getObjectDiff(a, b, rv, prfx) { + rv = rv || {}; + prfx = prfx || ''; + for (const prop in a) { + if (!hasOwn(b, prop)) { + rv[prfx + prop] = undefined; + } + else { + const ap = a[prop], bp = b[prop]; + if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) { + const apTypeName = toStringTag(ap); + const bpTypeName = toStringTag(bp); + if (apTypeName !== bpTypeName) { + rv[prfx + prop] = b[prop]; + } + else if (apTypeName === 'Object') { + getObjectDiff(ap, bp, rv, prfx + prop + '.'); + } + else if (ap !== bp) { + rv[prfx + prop] = b[prop]; + } + } + else if (ap !== bp) + rv[prfx + prop] = b[prop]; + } + } + for (const prop in b) { + if (!hasOwn(a, prop)) { + rv[prfx + prop] = b[prop]; + } + } + return rv; +} + +let domDeps; +try { + domDeps = { + indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, + IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange + }; +} +catch (e) { + domDeps = { indexedDB: null, IDBKeyRange: null }; +} + +const Dexie = Dexie$1; +props(Dexie, { + ...fullNameExceptions, + delete(databaseName) { + const db = new Dexie(databaseName, { addons: [] }); + return db.delete(); + }, + exists(name) { + return new Dexie(name, { addons: [] }).open().then(db => { + db.close(); + return true; + }).catch('NoSuchDatabaseError', () => false); + }, + getDatabaseNames(cb) { + try { + return getDatabaseNames(Dexie.dependencies).then(cb); + } + catch (_a) { + return rejection(new exceptions.MissingAPI()); + } + }, + defineClass() { + function Class(content) { + extend(this, content); + } + return Class; + }, + ignoreTransaction(scopeFunc) { + return PSD.trans ? + usePSD(PSD.transless, scopeFunc) : + scopeFunc(); + }, + vip, + async: function (generatorFn) { + return function () { + try { + var rv = awaitIterator(generatorFn.apply(this, arguments)); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }; + }, + spawn: function (generatorFn, args, thiz) { + try { + var rv = awaitIterator(generatorFn.apply(thiz, args || [])); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }, + currentTransaction: { + get: () => PSD.trans || null + }, + waitFor: function (promiseOrFunction, optionalTimeout) { + const promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ? + Dexie.ignoreTransaction(promiseOrFunction) : + promiseOrFunction) + .timeout(optionalTimeout || 60000); + return PSD.trans ? + PSD.trans.waitFor(promise) : + promise; + }, + Promise: DexiePromise, + debug: { + get: () => debug, + set: value => { + setDebug(value, value === 'dexie' ? () => true : dexieStackFrameFilter); + } + }, + derive: derive, + extend: extend, + props: props, + override: override, + Events: Events, + getByKeyPath: getByKeyPath, + setByKeyPath: setByKeyPath, + delByKeyPath: delByKeyPath, + shallowClone: shallowClone, + deepClone: deepClone, + getObjectDiff: getObjectDiff, + cmp, + asap: asap$1, + minKey: minKey, + addons: [], + connections: connections, + errnames: errnames, + dependencies: domDeps, + semVer: DEXIE_VERSION, + version: DEXIE_VERSION.split('.') + .map(n => parseInt(n) | 0) + .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))), +}); +Dexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange); + +DexiePromise.rejectionMapper = mapError; +setDebug(debug, dexieStackFrameFilter); + +var namedExports = /*#__PURE__*/Object.freeze({ +__proto__: null, +Dexie: Dexie$1, +'default': Dexie$1 +}); + +Object.assign(Dexie$1, namedExports, { default: Dexie$1 }); + +return Dexie$1; + +})); + +/* jshint -W098 */ +makeEnum(['MDBOPEN', 'EXECSC', 'LOADINGCLOUD'], 'MEGAFLAG_', window); + +// navigate to links internally, not by the browser. +function clickURLs() { + 'use strict'; + var nodeList = document.querySelectorAll('a.clickurl'); + + if (nodeList.length) { + $(nodeList).rebind('click', function() { + var $this = $(this); + var url = $this.attr('href') || $this.data('fxhref'); + const redirect = $this.attr('redirect'); + + if (url) { + var target = $this.attr('target'); + + if (target === '_blank') { + open(/^(https?:\/\/)/i.test(url) ? url : getBaseUrl() + url, '_blank', 'noopener,noreferrer'); + return false; + } + + if (window.loadingDialog && $this.hasClass('pages-nav')) { + loadingDialog.quiet = true; + onIdle(function() { + loadingDialog.quiet = false; + }); + } + + if (redirect) { + const redirectPage = redirect; + login_next = redirectPage === "1" ? `/${page}` : `/${redirectPage}`; + } + + loadSubPage(url.substr(1)); + return false; + } + }); + if (is_extension) { + $(nodeList).rebind('auxclick', function(e) { + + // if this is middle click on mouse to open it on new tab and this is extension + if (e.which === 2) { + + var $this = $(this); + var url = $this.attr('href') || $this.data('fxhref'); + + open(getBaseUrl() + url); + + return false; + } + }); + } + } + nodeList = undefined; +} + +// Handler that deals with scroll to element links. +function scrollToURLs() { + 'use strict'; + var nodeList = document.querySelectorAll('a.scroll_to'); + + if (nodeList) { + $(nodeList).rebind("click", function() { + var $scrollTo = $($(this).data("scrollto")); + + if ($scrollTo.length) { + var $toScroll; + var newOffset = $scrollTo[0].offsetTop; + + if (is_mobile) { + var mobileClass = 'body.mobile .fmholder'; + if (page === "privacy" || page === "terms") { + $toScroll = $(mobileClass); + } + } + else if ($scrollTo.closest('.ps').length) { + $toScroll = $scrollTo.closest('.ps'); + } + else { + $toScroll = $('.fmholder'); + } + + if ($toScroll) { + $toScroll.animate({scrollTop: newOffset - 40}, 400); + } + + } + }); + } + nodeList = undefined; +} + +/** + * excludeIntersected + * + * Loop through arrays excluding intersected items form array2 + * and prepare result format for tokenInput plugin item format. + * + * @param {Array} array1, emails used in share + * @param {Array} array2, list of all available emails + * + * @returns {Array} item An array of JSON objects e.g. { id, name }. + */ +function excludeIntersected(array1, array2) { + + var result = [], + tmpObj2 = array2; + + if (!array1) { + return array2; + } + else if (!array2) { + return array1; + } + + // Loop through emails used in share + for (var i in array1) { + if (array1.hasOwnProperty(i)) { + + // Loop through list of all emails + for (var k in array2) { + if (array2.hasOwnProperty(k)) { + + // Remove matched email from result + if (array1[i] === array2[k]) { + tmpObj2.splice(k, 1); + break; + } + } + } + } + } + + // Prepare for token.input plugin item format + for (var n in tmpObj2) { + if (tmpObj2.hasOwnProperty(n)) { + result.push({ id: tmpObj2[n], name: tmpObj2[n] }); + } + } + + return result; +} + +function asciionly(text) { + var rforeign = /[^\u0000-\u007f]/; + if (rforeign.test(text)) { + return false; + } + else { + return true; + } +} + +var isNativeObject = function(obj) { + var objConstructorText = obj.constructor.toString(); + return objConstructorText.indexOf("[native code]") !== -1 && objConstructorText.indexOf("Object()") === -1; +}; + +function clone(obj) { + + if (typeof obj !== 'object' || obj === null) { + return obj; + } + if (obj instanceof Date) { + return new Date(obj.getTime()); + } + if (Array.isArray(obj)) { + var arr = new Array(obj.length); + for (var i = obj.length; i--; ) { + arr[i] = clone(obj[i]); + } + return arr; + } + if (obj instanceof Object) { + var copy = {}; + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) { + if (!(obj[attr] instanceof Object)) { + copy[attr] = obj[attr]; + } + else if (Array.isArray(obj[attr])) { + copy[attr] = clone(obj[attr]); + } + else if (!isNativeObject(obj[attr])) { + copy[attr] = clone(obj[attr]); + } + else if ($.isFunction(obj[attr])) { + copy[attr] = obj[attr]; + } + else { + copy[attr] = {}; + } + } + } + + return copy; + } + else { + var copy = Object.create(null); + + for (var k in obj) { + copy[k] = clone(obj[k]); + } + + return copy; + } +} + +/** + * Check if something (val) is a string. + * + * @param val + * @returns {boolean} + */ +function isString(val) { + return (typeof val === 'string' || val instanceof String); +}; + +function easeOutCubic(t, b, c, d) { + return c * ((t = t / d - 1) * t * t + 1) + b; +} + +function ellipsis(text, location, maxCharacters) { + "use strict"; + if (!text) { + return ""; + } + + if (text.length > 0 && text.length > maxCharacters) { + if (typeof location === 'undefined') { + location = 'end'; + } + switch (location) { + case 'center': + var center = (maxCharacters / 2); + text = text.slice(0, center) + '...' + text.slice(-center); + break; + case 'end': + text = text.slice(0, maxCharacters - 3) + '...'; + break; + } + } + return text; +} + +function megatitle(nperc) { + if (!nperc) { + nperc = ''; + } + var a = parseInt($('.notification-num:first').text()); + if (a > 0) { + a = '(' + a + ') '; + } + else { + a = ''; + } + if (document.title !== a + mega_title + nperc) { + document.title = a + mega_title + nperc; + } +} + +function countrydetails(isocode) { + var cdetails = { + name: M.getCountryName(isocode), + icon: isocode.toLowerCase() + '.png' + }; + return cdetails; +} + +/** + * Convert bytes sizes into a human-friendly format (KB, MB, GB), pretty + * similar to `bytesToSize` but this function returns an object + * (`{ size: "23,33", unit: 'KB' }`) which is easier to consume + * + * @param {Number} bytes Size in bytes to convert + * @param {Number} [precision] Precision to show the decimal number + * @param {Boolean} [isSpd] True if this is a speed, unit will be returned as speed unit like KB/s + * @returns {Object} Returns an object similar to `{size: "2.1", unit: "MB"}` + */ +function numOfBytes(bytes, precision, isSpd) { + + 'use strict'; + + // If not defined, default to 2dp (this still allows setting precision to 0 for 0dp) + if (typeof precision === 'undefined') { + precision = 2; + } + + var fn = isSpd ? bytesToSpeed : bytesToSize; + var parts = fn(bytes, precision).split(' '); + + return { size: parts[0], unit: parts[1] || 'B' }; +} + +function bytesToSize(bytes, precision, format) { + 'use strict'; /* jshint -W074 */ + + var s_b = l[20158]; + var s_kb = l[7049]; + var s_mb = l[20159]; + var s_gb = l[17696]; + var s_tb = l[20160]; + var s_pb = l[23061]; + + var kilobyte = 1024; + var megabyte = kilobyte * 1024; + var gigabyte = megabyte * 1024; + var terabyte = gigabyte * 1024; + var petabyte = terabyte * 1024; + var resultSize = 0; + var resultUnit = ''; + var capToMB = false; + + if (precision === undefined) { + if (bytes > gigabyte) { + precision = 2; + } + else if (bytes > megabyte) { + precision = 1; + } + } + + if (format < 0) { + format = 0; + capToMB = true; + } + + if (!bytes) { + resultSize = 0; + resultUnit = s_b; + } + else if ((bytes >= 0) && (bytes < kilobyte)) { + resultSize = parseInt(bytes); + resultUnit = s_b; + } + else if ((bytes >= kilobyte) && (bytes < megabyte)) { + resultSize = (bytes / kilobyte).toFixed(precision); + resultUnit = s_kb; + } + else if ((bytes >= megabyte) && (bytes < gigabyte) || capToMB) { + resultSize = (bytes / megabyte).toFixed(precision); + resultUnit = s_mb; + } + else if ((bytes >= gigabyte) && (bytes < terabyte)) { + resultSize = (bytes / gigabyte).toFixed(precision); + resultUnit = s_gb; + } + else if ((bytes >= terabyte) && (bytes < petabyte)) { + resultSize = (bytes / terabyte).toFixed(precision); + resultUnit = s_tb; + } + else if (bytes >= petabyte) { + resultSize = (bytes / petabyte).toFixed(precision); + resultUnit = s_pb; + } + else { + resultSize = parseInt(bytes); + resultUnit = s_b; + } + + if (window.lang !== 'en') { + // @todo measure the performance degradation by invoking this here now.. + resultSize = mega.intl.decimal.format(resultSize); + } + + // XXX: If ever adding more HTML here, make sure it's safe and/or sanitize it. + if (format === 2) { + return resultSize + '' + resultUnit + ''; + } + else if (format === 3) { + return resultSize; + } + else if (format) { + return '' + resultSize + '' + resultUnit; + } + else { + return resultSize + ' ' + resultUnit; + } +} + +/* + * Very Similar function as bytesToSize due to it is just simple extended version of it by making it as speed. + * @returns {String} Returns a string that build with value entered and speed unit e.g. 100 KB/s + */ +var bytesToSpeed = function bytesToSpeed() { + 'use strict'; + return l[23062].replace('[%s]', bytesToSize.apply(this, arguments)); +}; +mBroadcaster.once('startMega', function() { + 'use strict'; + + if (lang === 'en' || lang === 'es') { + bytesToSpeed = function(bytes, precision, format) { + return bytesToSize(bytes, precision, format) + '/s'; + }; + } +}); + + +function makeid(len) { + var text = ""; + var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (var i = 0; i < len; i++) { + text += possible.charAt(Math.floor(Math.random() * possible.length)); + } + return text; +} + +/** + * Checks if the email address is valid using the inbuilt HTML5 + * validation method suggested at https://stackoverflow.com/a/13975255 + * @param {String} email The email address to validate + * @returns {Boolean} Returns true if email is valid, false if email is invalid + */ +function isValidEmail(email) { + + 'use strict'; + // reference to html spec https://html.spec.whatwg.org/multipage/input.html#e-mail-state-(type=email) + // with one modification, that the standard allows emails like khaled@mega + // which is possible in local environment/networks but not in WWW. + // so I applied + instead of * at the end + var regex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/; + return regex.test(email); +} + +/** + * Adds on, bind, unbind, one and trigger methods to a specific class's prototype. + * + * @param kls class on which prototype this method should add the on, bind, unbind, etc methods + * @deprecated + */ +function makeObservable(kls) { + 'use strict'; + if (d > 1) { + console.warn('makeObservable() is deprecated.'); + } + inherits(kls, MegaDataEmitter); +} + +/** + * Adds simple .setMeta and .getMeta functions, which can be used to store some meta information on the fly. + * Also triggers `onMetaChange` events (only if the `kls` have a `trigger` method !) + * + * @param kls {Class} on which prototype's this method should add the setMeta and getMeta + */ +function makeMetaAware(kls) { + /** + * Store meta data + * + * @param prefix string + * @param namespace string + * @param k string + * @param val {*} + */ + kls.prototype.setMeta = function(prefix, namespace, k, val) { + var self = this; + + if (self["_" + prefix] === undefined) { + self["_" + prefix] = {}; + } + if (self["_" + prefix][namespace] === undefined) { + self["_" + prefix][namespace] = {}; + } + self["_" + prefix][namespace][k] = val; + + if (self.trigger) { + self.trigger("onMetaChange", prefix, namespace, k, val); + } + }; + + /** + * Clear/delete meta data + * + * @param prefix string optional + * @param [namespace] string optional + * @param [k] string optional + */ + kls.prototype.clearMeta = function(prefix, namespace, k) { + var self = this; + + if (!self["_" + prefix]) { + return; + } + + if (prefix && !namespace && !k) { + delete self["_" + prefix]; + } + else if (prefix && namespace && !k) { + delete self["_" + prefix][namespace]; + } + else if (prefix && namespace && k) { + delete self["_" + prefix][namespace][k]; + } + + if (self.trigger) { + self.trigger("onMetaChange", prefix, namespace, k); + } + }; + + /** + * Retrieve meta data + * + * @param prefix {string} + * @param namespace {string} optional + * @param k {string} optional + * @param default_value {*} optional + * @returns {*} + */ + kls.prototype.getMeta = function(prefix, namespace, k, default_value) { + var self = this; + + namespace = namespace || undefined; /* optional */ + k = k || undefined; /* optional */ + default_value = default_value || undefined; /* optional */ + + // support for calling only with 2 args. + if (k === undefined) { + if (self["_" + prefix] === undefined) { + return default_value; + } + else { + return self["_" + prefix][namespace] || default_value; + } + } + else { + // all args + + if (self["_" + prefix] === undefined) { + return default_value; + } + else if (self["_" + prefix][namespace] === undefined) { + return default_value; + } + else { + return self["_" + prefix][namespace][k] || default_value; + } + } + }; +} + +/** + * Gets UAO parameter from the URL if exists and store it + * @param {String} url URL + * @param {String} page Page + */ +function getUAOParameter(url, page) { + 'use strict'; + var pageLen = page.length; + if (url.length > pageLen) { + var urlParams = url.substr(pageLen); + if (urlParams.length > 14) { + var uaoParam = urlParams.indexOf('/uao='); + if (uaoParam > -1) { + mega.uaoref = urlParams.substr(uaoParam + 5); + } + } + } +} + +/** + * Simple method for generating unique event name with a .suffix that is a hash of the passed 3-n arguments + * Main purpose is to be used with jQuery.bind and jQuery.unbind. + * + * @param eventName {string} event name + * @param name {string} name of the handler (e.g. .suffix) + * @returns {string} e.g. $eventName.$name_$ShortHashOfTheAdditionalArguments + */ +function generateEventSuffixFromArguments(eventName, name) { + var args = Array.prototype.splice.call(arguments, 2); + var result = ""; + $.each(args, function(k, v) { + result += v; + }); + + return eventName + "." + name + "_" + ("" + fastHashFunction(result)).replace("-", "_"); +} + +/** + * This is a placeholder, which will be used anywhere in our code where we need a simple and FAST hash function. + * later on, we can change the implementation (to use md5 or murmur) by just changing the function body of this + * function. + * @param {String} + */ +function fastHashFunction(val) { + return MurmurHash3(val, 0x4ef5391a).toString(); +} + +/** + * Creates a promise, which will fail if the validateFunction() don't return true in a timely manner (e.g. < timeout). + * + * @param validateFunction {Function} + * @param tick {int} + * @param timeout {int} + * @param [waitForPromise] {(MegaPromise|$.Deferred)} Before starting the timer, we will wait for this promise to be rej/res first. + * @param [name] {String} optional name for the debug output of the error/debug messages + * @returns {Promise} + */ +function createTimeoutPromise(validateFunction, tick, timeout, waitForPromise, name) { + 'use strict'; + let _res, _rej; + let running = true; + let state = 'pending'; + const debug = window.d > 2; + const tag = (m) => `[${name}] ${m}`; + const log = (m, ...args) => console.warn(tag(m), ...args); + + const promise = new Promise((resolve, reject) => { + _rej = reject; + _res = resolve; + + tick |= 0; + timeout = Math.max(0, timeout | 0); + name = `cTP.${name || makeUUID().slice(-17)}.${++mIncID}`; + + if (debug) { + log('Creating timeout promise...', tick, timeout); + } + let threshold = performance.now(); + + assert(typeof validateFunction === 'function', tag('Function expected')); + assert(tick > 100, tag(`at least 100ms are expected, ${tick} provided.`)); + assert(timeout > tick && timeout < 6e5, tag(`Invalid timeout value (${timeout})`)); + validateFunction = tryCatch(validateFunction); + + Promise.resolve(waitForPromise) + .then(async() => { + let duration = 0; + const int = tick / 1e3; + + if (debug) { + threshold -= performance.now(); + + if (threshold > 10) { + log('Begin took %sms%s', threshold, waitForPromise ? '' : ', tab throttled(?!)'); + } + + // @todo add threshold to duration if !waitForPromise (?) + } + + if (validateFunction()) { + if (debug) { + log('The validator resolved immediately...', waitForPromise); + } + state = 'placebo'; + return -1; + } + + if (debug) { + threshold = performance.now(); + } + + while (running) { + await sleep(int); + + if (debug) { + const now = performance.now(); + const diff = now - threshold; + + if (diff > tick * 1.8) { + log('Tab throttled? did sleep for %sms while %sms were expected...', diff, tick); + } + threshold = now; + } + + duration += tick; + running = !validateFunction(); + + if (duration > timeout) { + break; + } + } + + if (running) { + if (debug) { + log(`Timed out after waiting ${duration}ms`, promise); + } + + state = 'expired'; + throw new Error('Timed out.'); + } + + if (state === 'aborted') { + // xxx: backward compatibility, but rather bogus leaving a dangling promise there.. + resolve = nop; + Object.defineProperty(promise, 'aborted', {value: Date.now()}); + Object.freeze(promise); + return; + } + + if (debug) { + log(`Resolved timeout promise after waiting ${duration}ms...`, promise); + } + state = 'fulfilled'; + + }) + .then((a0) => resolve(a0)) + .catch(reject); + + }).finally(() => { + running = false; + + if (debug) { + createTimeoutPromise.instances.delete(promise); + } + }); + + if (debug) { + promise.tick = tick; + promise.timeout = timeout; + createTimeoutPromise.instances.add(promise); + } + + return Object.defineProperties(promise, { + state: { + get() { + return state; + } + }, + + verify: { + value: queueMicrotask.bind(null, () => { + if (validateFunction()) { + if (debug) { + log("Resolving timeout promise", state, promise); + } + promise.resolve(0); + } + }) + }, + + stopTimers: { + value: () => { + running = false; + state = 'aborted'; + } + }, + + name: { + value: name + }, + + resolve: { + value: _res + }, + + reject: { + value: _rej + } + }); +} + +/** @property createTimeoutPromise.instances */ +lazy(createTimeoutPromise, 'instances', () => { + 'use strict'; + return new WeakSet(); +}); + +/** + * Assertion exception. + * @param message + * Message for exception on failure. + * @constructor + */ +function AssertionFailed(message) { + this.message = message; + // karma env? + this.stack = M && M.getStack ? M.getStack() : String(new Error().stack); +} + +AssertionFailed.prototype = Object.create(Error.prototype); +AssertionFailed.prototype.name = 'AssertionFailed'; + +/** + * Assert a given test condition. + * + * Throws an AssertionFailed exception with a given message, in case the condition is false. + * The message is assembled by the args following 'test', similar to console.log() + * + * @param test + * Test statement. + */ +function assert(test) { + if (test) { + return; + } + //assemble message from parameters + var message = ''; + var last = arguments.length - 1; + for (var i = 1; i <= last; i++) { + message += arguments[i]; + if (i < last) { + message += ' '; + } + } + if (MegaLogger && MegaLogger.rootLogger) { + MegaLogger.rootLogger.error("assertion failed: ", message); + } + else if (window.d) { + console.error(message); + } + + if (localStorage.stopOnAssertFail) { + debugger; + } + + throw new AssertionFailed(message); +} + + +/** + * Assert that a user handle is potentially valid (e. g. not an email address). + * + * @param userHandle {string} + * The user handle to check. + * @throws + * Throws an exception on something that does not seem to be a user handle. + */ +var assertUserHandle = function(userHandle) { + try { + if (typeof userHandle !== 'string' + || base64urldecode(userHandle).length !== 8) { + + throw 1; + } + } + catch (ex) { + assert(false, 'This seems not to be a user handle: ' + userHandle); + } +}; + + +/** + * Pad/prepend `val` with "0" (zeros) until the length is === `length` + * + * @param val {String} value to add "0" to + * @param len {Number} expected length + * @returns {String} + */ +function addZeroIfLenLessThen(val, len) { + if (val.toString().length < len) { + for (var i = val.toString().length; i < len; i++) { + val = "0" + val; + } + } + return val; +} + +function ASSERT(what, msg, udata) { + if (!what) { + var af = new Error('failed assertion; ' + msg); + if (udata) { + af.udata = udata; + } + Soon(function() { + throw af; + }); + if (console.assert) { + console.assert(what, msg); + } + else { + console.error('FAILED ASSERTION', msg); + } + } + return !!what; +} + +// log failures through jscrashes system +function srvlog(msg, data, silent) { + if (data && !(data instanceof Error)) { + data = { + udata: data + }; + } + if (!silent && d) { + console.error(msg, data); + } + if (typeof window.onerror === 'function') { + window.onerror(msg, '@srvlog', data ? 1 : -1, 0, data || null); + } +} + +// log failures through event id 99666 +function srvlog2(type /*, ...*/) { + if (d || window.exTimeLeft) { + var args = toArray.apply(null, arguments); + var version = buildVersion.website; + + if (is_extension) { + if (is_chrome_firefox) { + version = window.mozMEGAExtensionVersion || buildVersion.firefox; + } + else if (is_firefox_web_ext) { + version = buildVersion.firefox; + } + else if (mega.chrome) { + version = buildVersion.chrome; + } + else { + version = buildVersion.commit && buildVersion.commit.substr(0, 8) || '?'; + } + } + args.unshift((is_extension ? 'e' : 'w') + (version || '-')); + + eventlog(99666, JSON.stringify(args)); + } +} + +/** + * Original: http://stackoverflow.com/questions/7317299/regex-matching-list-of-emoticons-of-various-type + * + * @param text + * @returns {XML|string|void} + * @constructor + */ +function RegExpEscape(text) { + 'use strict'; + return text.replace(/[\s#$()*+,.?[\\\]^{|}-]/g, "\\$&"); +} + +function unixtimeToTimeString(timestamp) { + var date = new Date(timestamp * 1000); + var hourSeparator = locale === 'fr' ? ' h ' : ':'; + return addZeroIfLenLessThen(date.getHours(), 2) + + hourSeparator + addZeroIfLenLessThen(date.getMinutes(), 2); +} + + +/** + * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) + * + * @author Gary Court + * @see http://github.com/garycourt/murmurhash-js + * @author Austin Appleby + * @see http://sites.google.com/site/murmurhash/ + * + * @param {string} key ASCII only + * @param {number} seed Positive integer only + * @return {number} 32-bit positive integer hash + */ +function MurmurHash3(key, seed) { + var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i; + + remainder = key.length & 3; // key.length % 4 + bytes = key.length - remainder; + h1 = seed || 0xe6546b64; + c1 = 0xcc9e2d51; + c2 = 0x1b873593; + i = 0; + + while (i < bytes) { + k1 = + ((key.charCodeAt(i) & 0xff)) | + ((key.charCodeAt(++i) & 0xff) << 8) | + ((key.charCodeAt(++i) & 0xff) << 16) | + ((key.charCodeAt(++i) & 0xff) << 24); + ++i; + + k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff; + + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); + h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff; + h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16)); + } + + k1 = 0; + + switch (remainder) { + case 3: + k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16; + case 2: + k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8; + case 1: + k1 ^= (key.charCodeAt(i) & 0xff); + + k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff; + h1 ^= k1; + } + + h1 ^= key.length; + + h1 ^= h1 >>> 16; + h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff; + h1 ^= h1 >>> 13; + h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff; + h1 ^= h1 >>> 16; + + return h1 >>> 0; +} + +/** + * Ask the user for a decryption key + * @param {String} ph The node's handle + * @param {String} fl Whether is a folderlink + * @param {String} keyr If a wrong key was used + * @return {MegaPromise} + */ +function mKeyDialog(ph, fl, keyr, selector) { + "use strict"; + + var promise = new MegaPromise(); + var $dialog = $(is_mobile ? '#mobile-decryption-key-overlay' : '.mega-dialog.dlkey-dialog'); + var $button = $(is_mobile ? '.mobile.decrypt-button' : '.fm-dialog-new-folder-button', $dialog); + var $input = $(is_mobile ? '.mobile.decryption-key' : 'input', $dialog); + + if (keyr) { + $('.mega-dialog.dlkey-dialog .instruction-message') + .text(l[9048]); + } + else { + $('.mega-dialog.dlkey-dialog input').val(''); + $('.mega-dialog.dlkey-dialog .instruction-message') + .safeHTML(l[7945] + '
              ' + l[7972]); + } + + $('.new-download-buttons').addClass('hidden'); + $('.new-download-file-title').text(l[1199]); + $('.new-download-file-icon').addClass(fileIcon({ + name: 'unknown.unknown' + })); + + $button.addClass('disabled').removeClass('active'); + + if (is_mobile) { + fm_showoverlay(); + $dialog.removeClass('hidden'); + } + else { + M.safeShowDialog('dlkey-dialog', $dialog); + } + + $('.js-close', $dialog).rebind('click.keydlg', () => { + loadSubPage('start'); + }); + + $input.rebind('input keypress', function(e) { + var length = String($(this).val() || '').length; + + if (length) { + $button.removeClass('disabled').addClass('active'); + if (e.keyCode === 13) { + $button.click(); + } + } + else { + $button.removeClass('active').addClass('disabled'); + } + }); + + $button.rebind('click.keydlg', function() { + + if ($(this).hasClass('active')) { + + // Trim the input from the user for whitespace, newlines etc on either end + var key = $.trim($input.val()); + + if (key) { + + // Remove the !,# from the key which is exported from the export dialog + key = key.replace('!', '').replace('#', ''); + + var newHash = (fl ? '/#F!' : '/#!') + ph + '!' + key; + + var currLink = getSitePath(); + + if (isPublickLinkV2(currLink)) { + newHash = (fl ? '/folder/' : '/file/') + ph + '#' + key + (selector ? selector : ''); + } + + if (getSitePath() !== newHash) { + promise.resolve(key); + + fm_hideoverlay(); + $dialog.addClass('hidden'); + loadSubPage(newHash); + + } + } + else { + promise.reject(); + } + } + }); + + return promise; +} + +function mRandomToken(pfx) { + 'use strict'; + return `${pfx || ''}!${Math.random().toString(28).slice(-9)}`; +} + +function str_mtrunc(str, len) { + if (!len) { + len = 35; + } + if (len > (str || '').length) { + return str; + } + var p1 = Math.ceil(0.60 * len), + p2 = Math.ceil(0.30 * len); + return str.substr(0, p1) + '\u2026' + str.substr(-p2); +} + +function getTransfersPercent() { + var dl_r = 0; + var dl_t = 0; + var ul_r = 0; + var ul_t = 0; + var tp = $.transferprogress || {}; + var zips = {}; + var i; + + for (i = dl_queue.length; i--;) { + var q = dl_queue[i]; + var td = q && tp[q.zipid ? 'zip_' + q.zipid : 'dl_' + q.id]; + + if (td) { + dl_r += td[0]; + dl_t += td[1]; + if (!q.zipid || !zips[q.zipid]) { + if (q.zipid) { + zips[q.zipid] = 1; + } + } + } + else { + dl_t += q && q.size || 0; + } + } + for (i = ul_queue.length; i--;) { + var tu = tp['ul_' + ul_queue[i].id]; + + if (tu) { + ul_r += tu[0]; + ul_t += tu[1]; + } + else { + ul_t += ul_queue[i].size || 0; + } + } + if (dl_t) { + dl_t += tp['dlc'] || 0; + dl_r += tp['dlc'] || 0; + } + if (ul_t) { + ul_t += tp['ulc'] || 0; + ul_r += tp['ulc'] || 0; + } + + return { + ul_total: ul_t, + ul_done: ul_r, + dl_total: dl_t, + dl_done: dl_r + }; +} + +function percent_megatitle() { + 'use strict'; + var t; + var transferStatus = getTransfersPercent(); + + var x_ul = Math.floor(transferStatus.ul_done / transferStatus.ul_total * 100) || 0; + var x_dl = Math.floor(transferStatus.dl_done / transferStatus.dl_total * 100) || 0; + + if (transferStatus.dl_total && transferStatus.ul_total) { + t = ' \u2193 ' + x_dl + '% \u2191 ' + x_ul + '%'; + } + else if (transferStatus.dl_total) { + t = ' \u2193 ' + x_dl + '%'; + } + else if (transferStatus.ul_total) { + t = ' \u2191 ' + x_ul + '%'; + if (mega.megadrop.isInit()) { + mega.megadrop.uiUpdateTotalProgress(transferStatus.ul_done, transferStatus.ul_total, x_ul); + } + } + else { + t = ''; + $.transferprogress = Object.create(null); + } + megatitle(t); + + var d_deg = 360 * x_dl / 100; + var u_deg = 360 * x_ul / 100; + var $dl_rchart = $('.transfers .download .nw-fm-chart0.right-c p'); + var $dl_lchart = $('.transfers .download .nw-fm-chart0.left-c p'); + var $ul_rchart = $('.transfers .upload .nw-fm-chart0.right-c p'); + var $ul_lchart = $('.transfers .upload .nw-fm-chart0.left-c p'); + + if (d_deg <= 180) { + $dl_rchart.css('transform', 'rotate(' + d_deg + 'deg)'); + $dl_lchart.css('transform', 'rotate(0deg)'); + } + else { + $dl_rchart.css('transform', 'rotate(180deg)'); + $dl_lchart.css('transform', 'rotate(' + (d_deg - 180) + 'deg)'); + } + if (u_deg <= 180) { + $ul_rchart.css('transform', 'rotate(' + u_deg + 'deg)'); + $ul_lchart.css('transform', 'rotate(0deg)'); + } + else { + $ul_rchart.css('transform', 'rotate(180deg)'); + $ul_lchart.css('transform', 'rotate(' + (u_deg - 180) + 'deg)'); + } +} + +function moveCursortoToEnd(el) { + + 'use strict'; + + const $el = $(el); + const $scrollBlock = $el.parent('.ps'); + + if (typeof el.selectionStart === "number") { + el.focus(); + el.selectionStart = el.selectionEnd = el.value.length; + } + else if (typeof el.createTextRange !== "undefined") { + el.focus(); + var range = el.createTextRange(); + range.collapse(false); + range.select(); + } + $el.trigger('focus'); + + if ($scrollBlock.length) { + $scrollBlock.scrollTop($el.height()); + } +} + +function asyncApiReq(data) { + 'use strict'; + + // TODO: find&replace all occurences + return M.req(data); +} + +// Returns pixels position of element relative to document (top left corner) OR to the parent (IF the parent and the +// target element are both with position: absolute) +function getHtmlElemPos(elem, n) { + var xPos = 0; + var yPos = 0; + var sl, st, cl, ct; + var pNode; + while (elem) { + pNode = elem.parentNode; + sl = 0; + st = 0; + cl = 0; + ct = 0; + if (pNode && pNode.tagName && !/html|body/i.test(pNode.tagName)) { + if (typeof n === 'undefined') // count this in, except for overflow huge menu + { + sl = elem.scrollLeft; + st = elem.scrollTop; + } + cl = elem.clientLeft; + ct = elem.clientTop; + xPos += (elem.offsetLeft - sl + cl); + yPos += (elem.offsetTop - st - ct); + } + elem = elem.offsetParent; + } + return { + x: xPos, + y: yPos + }; +} + +/** + * Detects if Flash is enabled or disabled in the user's browser + * From http://stackoverflow.com/a/20095467 + * @returns {Boolean} + */ +function flashIsEnabled() { + + var flashEnabled = false; + + try { + var flashObject = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); + if (flashObject) { + flashEnabled = true; + } + } + catch (e) { + if (navigator.mimeTypes + && (navigator.mimeTypes['application/x-shockwave-flash'] !== undefined) + && (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin)) { + flashEnabled = true; + } + } + + return flashEnabled; +} + +/** + * Gets the current base URL of the page (protocol + hostname) e.g. If on beta.mega.nz it will return https://beta.mega.nz. + * If on the browser extension it will return the default https://mega.nz. If on localhost it will return https://mega.nz. + * This can be used to create external links, for example file downloads https://mega.nz/#!qRN33YbK!o4Z76qDqPbiK2G0I... + * @returns {String} + */ +function getBaseUrl() { + return 'https://' + (((location.protocol === 'https:') && location.host) || 'mega.nz'); +} + +/** + * Like getBaseUrl(), but suitable for extensions to point to internal resources. + * This should be the same than `bootstaticpath + urlrootfile` except that may differ + * from a public entry point (Such as the Firefox extension and its mega: protocol) + * @returns {string} + */ +function getAppBaseUrl() { + var l = location; + var base = (l.origin !== 'null' && l.origin || (l.protocol + '//' + l.hostname)); + if (is_extension) { + base += l.pathname; + } + return base; +} + +if (d && location.hostname === 'localhost') { + // eslint-disable-next-line no-func-assign + getBaseUrl = function() { + 'use strict'; + return location.origin; + }; +} + +/** + * http://stackoverflow.com/a/16344621/402133 + * + * @param ms + * @returns {string} + */ +function ms2Time(ms) { + var secs = ms / 1000; + ms = Math.floor(ms % 1000); + var minutes = secs / 60; + secs = Math.floor(secs % 60); + var hours = minutes / 60; + minutes = Math.floor(minutes % 60); + hours = Math.floor(hours % 24); + return hours + ":" + minutes + ":" + secs; +} + +function secToDuration(s, sep) { + var dur = ms2Time(s * 1000).split(":"); + var durStr = ""; + sep = sep || ", "; + if (!secToDuration.regExp) { //regexp compile cache + secToDuration.regExp = {}; + } + + if (!secToDuration.regExp[sep]) { + secToDuration.regExp[sep] = new RegExp("" + sep + "$"); + } + + for (var i = 0; i < dur.length; i++) { + var v = dur[i]; + if (v === "0") { + if (durStr.length !== 0 && i !== 0) { + continue; + } + else if (i < 2) { + continue; + } + } + + var transString = false; + if (i === 0) { + // hour + transString = mega.icu.format(l.hour_count, parseInt(v)); + } + else if (i === 1) { + // minute + transString = mega.icu.format(l.minute_count, parseInt(v)); + } + else if (i === 2) { + // second + transString = mega.icu.format(l.second_count, parseInt(v)); + } + else { + throw new Error("this should never happen."); + } + + durStr += transString + sep; + } + + return durStr.replace(secToDuration.regExp[sep], ""); +} + +function generateAnonymousReport() { + var $promise = new MegaPromise(); + var report = {}; + report.ua = navigator.userAgent; + report.ut = u_type; + report.pbm = !!window.Incognito; + report.io = window.dlMethod && dlMethod.name; + report.sb = +('' + $('script[src*="secureboot"]').attr('src')).split('=').pop(); + report.tp = $.transferprogress; + if (!megaChatIsReady) { + report.karereState = '#disabled#'; + } + else { + report.numOpenedChats = Object.keys(megaChat.chats).length; + report.haveRtc = typeof SfuClient !== 'undefined' && SfuClient.platformHasSupport(); + } + + var chatStates = {}; + var userAnonMap = {}; + var userAnonIdx = 0; + var roomUniqueId = 0; + var roomUniqueIdMap = {}; + + if (megaChatIsReady && megaChat.chats) { + megaChat.chats.forEach(function (v, k) { + var participants = v.getParticipants(); + + participants.forEach(function (v, k) { + var cc = M.u[v]; + if (cc && cc.u && !userAnonMap[cc.u]) { + userAnonMap[cc.u] = { + anonId: userAnonIdx++ + rand(1000), + pres: megaChat.getPresence(v) + }; + } + participants[k] = cc && cc.u ? userAnonMap[cc.u] : v; + }); + + var r = { + 'roomState': v.getStateAsText(), + 'roomParticipants': participants + }; + + chatStates[roomUniqueId] = r; + roomUniqueIdMap[k] = roomUniqueId; + roomUniqueId++; + }); + + report.chatRoomState = chatStates; + }; + + if (is_chrome_firefox) { + report.mo = mozBrowserID + '::' + is_chrome_firefox + '::' + mozMEGAExtensionVersion; + } + + var apireqHaveBackOffs = {}; + apixs.forEach(function(v, k) { + if (v.backoff > 0) { + apireqHaveBackOffs[k] = v.backoff; + } + }); + + if (Object.keys(apireqHaveBackOffs).length > 0) { + report.apireqbackoffs = apireqHaveBackOffs; + } + + report.hadLoadedRsaKeys = u_authring.RSA && Object.keys(u_authring.RSA).length > 0; + report.hadLoadedEd25519Keys = u_authring.Ed25519 && Object.keys(u_authring.Ed25519).length > 0; + report.totalDomElements = $("*").length; + report.totalScriptElements = $("script").length; + + report.totalD = Object.keys(M.d).length; + report.totalU = M.u.size(); + report.totalC = Object.keys(M.c).length; + report.totalIpc = Object.keys(M.ipc).length; + report.totalOpc = Object.keys(M.opc).length; + report.totalPs = Object.keys(M.ps).length; + report.l = lang; + report.scrnSize = window.screen.availWidth + "x" + window.screen.availHeight; + + if (typeof window.devicePixelRatio !== 'undefined') { + report.pixRatio = window.devicePixelRatio; + } + + try { + report.perfTiming = JSON.parse(JSON.stringify(window.performance.timing)); + report.memUsed = window.performance.memory.usedJSHeapSize; + report.memTotal = window.performance.memory.totalJSHeapSize; + report.memLim = window.performance.memory.jsHeapSizeLimit; + } + catch (e) {} + + report.jslC = jslcomplete; + report.jslI = jsli; + report.host = window.location.host; + + var promises = []; + + report.version = null; // TODO: how can we find this? + + MegaPromise.allDone(promises) + .then(function() { + $promise.resolve(report); + }) + .catch(function() { + $promise.resolve(report) + }); + + return $promise; +} + +(function(scope) { + var MegaAnalytics = function(id) { + this.loggerId = id; + this.sessionId = makeid(16); + }; + MegaAnalytics.prototype.log = function(c, e, data) { + + data = data || {}; + data = $.extend( + true, {}, { + 'aid': this.sessionId, + 'lang': typeof lang !== 'undefined' ? lang : null, + 'browserlang': navigator.language, + 'u_type': typeof u_type !== 'undefined' ? u_type : null + }, + data + ); + + var msg = JSON.stringify({ + 'c': c, + 'e': e, + 'data': data + }); + + if (d) { + console.log("megaAnalytics: ", c, e, data); + } + if (window.location.toString().indexOf("mega.dev") !== -1) { + return; + } + api_req({ + a: 'log', + e: this.loggerId, + m: msg + }, {}); + }; + scope.megaAnalytics = new MegaAnalytics(99999); +})(this); + + +function constStateToText(enumMap, state) { + "use strict"; + for (var k in enumMap) { + if (enumMap[k] === state) { + return k; + } + } + return "(not found: " + state + ")"; +}; + +/** + * Helper function that will do some assert()s to guarantee that the new state is correct/allowed + * + * @param currentState + * @param newState + * @param allowedStatesMap + * @param enumMap + * @throws AssertionError + */ +function assertStateChange(currentState, newState, allowedStatesMap, enumMap) { + "use strict"; + + assert(typeof newState !== "undefined", "assertStateChange: newState is 'undefined'"); + var checksAvailable = allowedStatesMap[currentState]; + var allowed = false; + if (checksAvailable) { + checksAvailable.forEach(function(allowedState) { + if (allowedState === newState) { + allowed = true; + return false; // break; + } + }); + } + if (!allowed) { + assert( + false, + 'State change from: ' + constStateToText(enumMap, currentState) + ' to ' + + constStateToText(enumMap, newState) + ' is not in the allowed state transitions map.' + ); + } +} + +/** + * Perform a normal logout + * + * @param {Function} aCallback optional + * @param {Bool} force optional + */ +function mLogout(aCallback, force) { + "use strict"; + + // If user are trying logged out from paid ephemral session, warn user that they cannot get back the paid session. + if (isNonActivatedAccount()) { + msgDialog('warninga:!^' + l[78] + '!' + l[79], 'warning', l[23443], l[23444], function(response) { + if (!response) { + M.logout(); + } + }); + + return; + } + + if (!force && mega.ui.passwordReminderDialog) { + var passwordReminderLogout = mega.ui.passwordReminderDialog.recheckLogoutDialog(); + + passwordReminderLogout + .done(function() { + mLogout(aCallback, true); + }); + + return; + } + + var cnt = 0; + if (M.c[M.RootID] && u_type === 0) { + for (var i in M.c[M.RootID]) { + cnt++; + } + } + if (u_type === 0 && cnt > 0) { + msgDialog('confirmation', l[1057], l[1058], l[1059], function (e) { + if (e) { + M.logout(); + } + }); + } + else { + M.logout(); + } +} + +// Initialize Rubbish-Bin Cleaning Scheduler +mBroadcaster.addListener('crossTab:master', function _setup() { + var RUBSCHED_WAITPROC = 20 * 1000; + var RUBSCHED_IDLETIME = 4 * 1000; + var timer, updId; + + mBroadcaster.once('crossTab:leave', _exit); + + // The fm must be initialized before proceeding + if (!folderlink && fminitialized) { + _fmready(); + } + else { + mBroadcaster.addListener('fm:initialized', _fmready); + } + + function _fmready() { + if (!folderlink) { + _init(); + return 0xdead; + } + } + + function _update(enabled) { + _exit(); + if (enabled) { + _init(); + } + } + + function _exit() { + if (timer) { + clearInterval(timer); + timer = null; + } + if (updId) { + mBroadcaster.removeListener(updId); + updId = null; + } + } + + function _init() { + // if (d) console.log('Initializing Rubbish-Bin Cleaning Scheduler'); + + // updId = mBroadcaster.addListener('fmconfig:rubsched', _update); + if (fmconfig.rubsched) { + timer = setInterval(function() { + // Do nothing unless the user has been idle + if (Date.now() - lastactive < RUBSCHED_IDLETIME) { + return; + } + _exit(); + + dbfetch.coll([M.RubbishID]).finally(_proc); + + }, RUBSCHED_WAITPROC); + } + } + + function _proc() { + + // Mode 14 - Remove files older than X days + // Mode 15 - Keep the Rubbish-Bin under X GB + var mode = String(fmconfig.rubsched).split(':'); + var xval = mode[1]; + mode = +mode[0]; + + var handler = _rubSchedHandler[mode]; + if (!handler) { + throw new Error('Invalid RubSchedHandler', mode); + } + + if (d) { + console.log('Running Rubbish Bin Cleaning Scheduler', mode, xval); + console.time('rubsched'); + } + + // Watch how long this is running + var startTime = Date.now(); + + // Get nodes in the Rubbish-bin + var nodes = Object.keys(M.c[M.RubbishID] || {}); + var rubnodes = []; + + for (var i = nodes.length; i--; ) { + var node = M.d[nodes[i]]; + if (!node) { + console.error('Invalid node', nodes[i]); + continue; + } + rubnodes = rubnodes.concat(M.getNodesSync(node.h, true)); + } + + rubnodes.sort(handler.sort); + var rNodes = handler.log(rubnodes); + + // if (d) console.log('rubnodes', rubnodes, rNodes); + + var handles = []; + if (handler.purge(xval)) { + for (var i in rubnodes) { + var node = M.d[rubnodes[i]]; + + if (handler.remove(node, xval)) { + handles.push(node.h); + + if (handler.ready(node, xval)) { + break; + } + + // Abort if this has been running for too long.. + if ((Date.now() - startTime) > 7000) { + break; + } + } + } + + // if (d) console.log('RubSched-remove', handles); + + if (handles.length) { + var inRub = (M.RubbishID === M.currentrootid); + + handles.map(function(handle) { + // M.delNode(handle, true); // must not update DB pre-API + api_req({a: 'd', n: handle/*, i: requesti*/}); + + if (inRub) { + $('.grid-table.fm#' + handle).remove(); + $('.data-block-view#' + handle).remove(); + } + }); + + if (inRub) { + M.addViewUI(); + } + } + } + + if (d) { + console.timeEnd('rubsched'); + } + + // Once we ran for the first time, set up a long running scheduler + RUBSCHED_WAITPROC = 4 * 3600 * 1e3; + _init(); + } + + /** + * Scheduler Handlers + * Sort: Sort nodes specifically for the handler purpose + * Log: Keep a record of nodes if required and return a debugable array + * Purge: Check whether the Rubbish-Bin should be cleared + * Remove: Return true if the node is suitable to get removed + * Ready: Once a node is removed, check if the criteria has been meet + */ + var _rubSchedHandler = { + // Remove files older than X days + "14": { + sort: function(n1, n2) { + return M.d[n1].ts > M.d[n2].ts; + }, + log: function(nodes) { + return d && nodes.map(function(node) { + return M.d[node].name + '~' + (new Date(M.d[node].ts*1000)).toISOString(); + }); + }, + purge: function(limit) { + return true; + }, + remove: function(node, limit) { + limit = (Date.now() / 1e3) - (limit * 86400); + return node.ts < limit; + }, + ready: function(node, limit) { + return false; + } + }, + // Keep the Rubbish-Bin under X GB + "15": { + sort: function(n1, n2) { + n1 = M.d[n1].s || 0; + n2 = M.d[n2].s || 0; + return n1 < n2; + }, + log: function(nodes) { + var pnodes, size = 0; + + pnodes = nodes.map(function(node) { + size += (M.d[node].s || 0); + return M.d[node].name + '~' + bytesToSize(M.d[node].s); + }); + + this._size = size; + + return pnodes; + }, + purge: function(limit) { + return this._size > (limit * 1024 * 1024 * 1024); + }, + remove: function(node, limit) { + return true; + }, + ready: function(node, limit) { + this._size -= (node.s || 0); + return this._size < (limit * 1024 * 1024 * 1024); + } + } + }; +}); + +/** prevent tabnabbing attacks */ +mBroadcaster.once('startMega', function() { + return; + + if (!(window.chrome || window.safari || window.opr)) { + return; + } + + // Check whether is safe to open a link through the native window.open + var isSafeTarget = function(link) { + link = String(link); + + var allowed = [ + getBaseUrl(), + getAppBaseUrl() + ]; + + var rv = allowed.some(function(v) { + return link.indexOf(v) === 0; + }); + + if (d) { + console.log('isSafeTarget', link, rv); + } + + return rv || (location.hash.indexOf('fm/chat') === -1); + }; + + var open = window.open; + delete window.open; + + // Replace the native window.open which will open unsafe links through a hidden iframe + Object.defineProperty(window, 'open', { + writable: false, + enumerable: true, + value: function(url) { + var link = document.createElement('a'); + link.href = url; + + if (isSafeTarget(link.href)) { + return open.apply(window, arguments); + } + + var iframe = mCreateElement('iframe', {type: 'content', style: 'display:none'}, 'body'); + var data = 'var win=window.open("' + escapeHTML(link) + '");if(win)win.opener = null;'; + var doc = iframe.contentDocument || iframe.contentWindow.document; + var script = doc.createElement('script'); + script.type = 'text/javascript'; + script.src = mObjectURL([data], script.type); + script.onload = SoonFc(function() { + myURL.revokeObjectURL(script.src); + document.body.removeChild(iframe); + }); + doc.body.appendChild(script); + } + }); + + // Catch clicks on links and forward them to window.open + document.documentElement.addEventListener('click', function(ev) { + var node = Object(ev.target); + + if (node.nodeName === 'A' && node.href + && String(node.getAttribute('target')).toLowerCase() === '_blank' + && !isSafeTarget(node.href)) { + + ev.stopPropagation(); + ev.preventDefault(); + + window.open(node.href); + } + }, true); +}); + +/** + * Simple alias that will return a random number in the range of: a < b + * + * @param a {Number} min + * @param b {Number} max + * @returns {*} + */ +function rand_range(a, b) { + return Math.random() * (b - a) + a; +} + +/** + * Invoke the password manager in Chrome. + * + * There are some requirements for this function work propertly: + * + * 1. The username/password needs to be in a
              + * 2. The form needs to be filled and visible when this function is called + * 3. After this function is called, within the next second the form needs to be gone + * + * As an example take a look at the `tooltiplogin.init()` function in `top-tooltip-login.js`. + * + * @param {String|Object} form jQuery selector of the form + * @return {Boolean} Returns true if the password manager can be called. + * + */ +function passwordManager(form) { + + 'use strict'; + + var $form = $(form); + + if ($form.length === 0) { + return false; + } + + if (is_chrome_firefox) { + var creds = passwordManager.pickFormFields(form); + if (creds) { + mozRunAsync(mozLoginManager.saveLogin.bind(mozLoginManager, creds.usr, creds.pwd)); + } + $form.find('input').val(''); + return; + } + if (typeof history !== "object") { + return false; + } + $form.rebind('submit', function() { + setTimeout(function() { + var path = getSitePath(); + history.replaceState({ success: true }, '', "index.html#" + document.location.hash.substr(1)); + if (hashLogic || isPublicLink(path)) { + path = path.replace('/', '/#'); + + if (is_extension) { + path = path.replace('/#', '/' + urlrootfile + '#'); + } + } + history.replaceState({ success: true, subpage: getCleanSitePath(path) }, '', path); + $form.find('input').val(''); + }, 1000); + return false; + }); + + // For trigger FF Password Manager, submit the form by making submit button and click it. + var submitButton = document.createElement("input"); + submitButton.setAttribute("type", "submit"); + submitButton.style.opacity = '0'; + + $form[0].appendChild(submitButton); + + submitButton.click(); + + return true; +} +passwordManager.knownForms = Object.freeze({ + '#form_login_header': { + usr: '#login-name', + pwd: '#login-password' + }, + '#login_form': { + usr: '#login-name2', + pwd: '#login-password2' + }, + '#register_form': { + usr: '#register-email', + pwd: '#register-password' + } +}); +passwordManager.pickFormFields = function(form) { + var result = null; + var $form = $(form); + + if ($form.length) { + if ($form.length !== 1) { + console.error('Unexpected form selector', form); + } + else { + form = passwordManager.knownForms[form]; + if (form) { + result = { + usr: $form.find(form.usr).val(), + pwd: $form.find(form.pwd).val(), + + selector: { + usr: form.usr, + pwd: form.pwd + } + }; + + if (!(result.usr && result.pwd)) { + result = false; + } + } + } + } + + return result; +}; + +/** + * Check if the passed in element (DOMNode) is FULLY visible in the viewport. + * + * @param el {DOMNode} + * @returns {boolean} + */ +function elementInViewport(el) { + if (!verge.inY(el)) { + return false; + } + if (!verge.inX(el)) { + return false; + } + + var rect = verge.rectangle(el); + + return !(rect.left < 0 || rect.right < 0 || rect.bottom < 0 || rect.top < 0); +} + +/** + * Check if the element is within the viewport, not detached and visible. + * @param {HTMLElement|Element} el DOM node/element. + * @returns {Boolean} whether it is. + */ +function elementIsVisible(el) { + 'use strict'; + + if (!(el && el.parentNode && verge.inViewport(el))) { + return false; + } + + if (window.getComputedStyle(el).position !== 'fixed' && !el.offsetParent) { + return false; + } + + return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length); +} + +// FIXME: This is a "Dirty Hack" (TM) that needs to be removed as soon as +// the original problem is found and resolved. +if (typeof sjcl !== 'undefined') { + // We need to track SJCL exceptions for ticket #2348 + sjcl.exception.invalid = function(message) { + this.toString = function() { + return "INVALID: " + this.message; + }; + this.message = message; + this.stack = M.getStack(); + }; +} + +(function($, scope) { + /** + * Share related operations. + * + * @param opts {Object} + * + * @constructor + */ + var Share = function(opts) { + + var self = this; + var defaultOptions = { + }; + + self.options = $.extend(true, {}, defaultOptions, opts); }; + + /** + * isShareExists + * + * Checking if there's available shares for selected nodes. + * @param {Array} nodes Holds array of ids from selected folders/files (nodes). + * @param {Boolean} fullShare Do we need info about full share. + * @param {Boolean} pendingShare Do we need info about pending share . + * @param {Boolean} linkShare Do we need info about link share 'EXP'. + * @returns {Boolean} result. + */ + Share.prototype.isShareExist = function(nodes, fullShare, pendingShare, linkShare) { + + var self = this; + + var shares = {}, length; + + for (var i in nodes) { + if (nodes.hasOwnProperty(i)) { + + // Look for full share + if (fullShare) { + shares = M.d[nodes[i]] && M.d[nodes[i]].shares; + + // Look for link share + if (linkShare) { + if (shares && Object.keys(shares).length) { + return true; + } + } + else { // Exclude folder/file links, + if (shares) { + length = self.getFullSharesNumber(shares); + if (length) { + return true; + } + } + } + } + + // Look for pending share + if (pendingShare) { + shares = M.ps[nodes[i]]; + + if (shares && Object.keys(shares).length) { + return true; + } + } + } + } + + return false; + }; + + /** + * hasExportLink, check if at least one selected item have public link. + * + * @param {String|Array} nodes Node id or array of nodes string + * @returns {Boolean} + */ + Share.prototype.hasExportLink = function(nodes) { + + if (typeof nodes === 'string') { + nodes = [nodes]; + } + + // Loop through all selected items + for (var i in nodes) { + var node = M.d[nodes[i]]; + + if (node && Object(node.shares).EXP) { + return true; + } + } + + return false; + }; + + /** + * getFullSharesNumber + * + * Loops through all shares and return number of full shares excluding + * ex. full contacts. Why ex. full contact, in the past when client removes + * full contact from the list, share related to client remains active on + * owners side. That behaviour is changed/updated on API side, so now after + * full contact relationship is removed, related shares are also removed. + * + * @param {Object} shares + * @returns {Integer} result Number of shares + */ + Share.prototype.getFullSharesNumber = function(shares) { + + var result = 0; + var contactKeys = []; + + if (shares) { + contactKeys = Object.keys(shares); + $.each(contactKeys, function(ind, key) { + + // Count only full contacts + if (M.u[key] && M.u[key].c) { + result++; + } + }); + } + + return result; + }; + + /** + * addContactToFolderShare + * + * Add verified email addresses to folder shares. + */ + Share.prototype.addContactToFolderShare = function addContactToFolderShare() { + + var promise = MegaPromise.resolve(); + var targets = []; + var $shareDialog = $('.share-dialog'); + var selectedNode; + var userEmail; + var permissionLevel; + + // Share button enabled + if ($.dialog === 'share' && !$('.done-share', $shareDialog).is('.disabled')) { + selectedNode = $.selected[0]; + + // Is there a new contacts planned for addition to share + if (Object.keys($.addContactsToShare).length > 0) { + + // Add new planned contact to list + for (var i in $.addContactsToShare) { + userEmail = $.addContactsToShare[i].u; + permissionLevel = $.addContactsToShare[i].r; + + if (userEmail && permissionLevel !== undefined) { + targets.push({u: userEmail, r: permissionLevel}); + } + } + } + + closeDialog(); + $('.export-links-warning').addClass('hidden'); + + // Add new contacts to folder share + if (targets.length > 0) { + promise = doShare(selectedNode, targets, true); + } + } + + return promise; + }; + + Share.prototype.updateNodeShares = function() { + + var self = this; + var promise = new MegaPromise(); + + loadingDialog.show(); + this.removeContactFromShare() + .always(function() { + var promises = []; + + if (Object.keys($.changedPermissions).length > 0) { + promises.push(doShare($.selected[0], Object.values($.changedPermissions), true)); + } + promises.push(self.addContactToFolderShare()); + + MegaPromise.allDone(promises) + .always(function() { + loadingDialog.hide(); + promise.resolve.apply(promise, arguments); + }); + }); + + return promise; + }; + + + Share.prototype.removeFromPermissionQueue = function(handle) { + // Remove the permission change belongs to the specific contact since got removed already + if ($.changedPermissions && $.changedPermissions[handle]) { + delete $.changedPermissions[handle]; + } + }; + + Share.prototype.removeContactFromShare = function() { + + var self = this; + var promises = []; + + if (Object.keys($.removedContactsFromShare).length > 0) { + + Object.values($.removedContactsFromShare).forEach(function(elem) { + var userEmailOrHandle = elem.userEmailOrHandle; + var selectedNodeHandle = elem.selectedNodeHandle; + var userHandle = elem.userHandle; + var step = 2; + var packet = false; + var idtag = mRandomToken('s2'); + var promise = new MegaPromise(); + var resolve = function() { + if (!--step) { + if (packet.okd && u_sharekeys[selectedNodeHandle]) { + console.error('The sharekey should have been removed...'); + } + promise.resolve(packet); + } + }; + + promises.push(promise); + M.scAckQueue[idtag] = requesti; + + // Wait for action-packet acknowledge, this is needed so that removing the last user + // from a share will issue an `okd` flag which removes the associated sharekey that we + // have to wait for *if* we're going to re-share to a different user next... + mBroadcaster.once('share-packet.' + idtag, function(a) { + packet = a; + resolve(); + }); + + // The s2 api call can remove both shares and pending shares + api_req({ + a: 's2', + n: selectedNodeHandle, + s: [{ u: userEmailOrHandle, r: ''}], + ha: '', + i: idtag + }, { + userEmailOrHandle: userEmailOrHandle, + selectedNodeHandle: selectedNodeHandle, + userHandle: userHandle, + + callback : function(res, ctx) { + + if (typeof res === 'object') { + if (res.r && res.r[0] === ENOENT) { + if (d) { + console.error('User %s not found as part of this share.', ctx.userHandle, ctx); + } + onIdle(() => msgDialog('warninga', l[135], l[47], l[23433])); + delete M.scAckQueue[idtag]; + --step; + } + + // If it was a user handle, the share is a full share + if (M.u[ctx.userHandle]) { + M.delNodeShare(ctx.selectedNodeHandle, ctx.userHandle); + setLastInteractionWith(ctx.userHandle, "0:" + unixtime()); + + self.removeFromPermissionQueue(ctx.userHandle); + } + // Pending share + else { + var pendingContactId = M.findOutgoingPendingContactIdByEmail(ctx.userEmailOrHandle); + M.deletePendingShare(ctx.selectedNodeHandle, pendingContactId); + + self.removeFromPermissionQueue(pendingContactId); + } + + resolve(); + } + else { + // FIXME: display error to user + + promise.reject(res); + } + } + }); + }); + } + + return MegaPromise.allDone(promises); + }; + + /** + * Removes any shares (including pending) from the selected node. + * + * @returns {MegaPromise} promise to remove contacts from share + */ + Share.prototype.removeSharesFromSelected = function() { + 'use strict'; + $.removedContactsFromShare = {}; + const nodeHandle = String($.selected[0]); + let userHandles = M.getNodeShareUsers(nodeHandle, 'EXP'); + + if (M.ps[nodeHandle]) { + const pendingShares = Object(M.ps[nodeHandle]); + userHandles = [...userHandles, ...Object.keys(pendingShares)]; + } + + for (let i = 0; i < userHandles.length; i++) { + const userHandle = userHandles[i]; + const userEmailOrHandle = Object(M.opc[userHandle]).m || userHandle; + + $.removedContactsFromShare[userHandle] = { + 'selectedNodeHandle': nodeHandle, + 'userEmailOrHandle': userEmailOrHandle, + 'userHandle': userHandle + }; + } + + return this.removeContactFromShare(); + }; + + // export + scope.mega.Share = Share; +})(jQuery, window); + + + +(function(scope) { + /** Utilities for Set operations. */ + scope.setutils = {}; + + /** + * Helper function that will return an intersect Set of two sets given. + * + * @private + * @param {Set} set1 + * First set to intersect with. + * @param {Set} set2 + * Second set to intersect with. + * @return {Set} + * Intersected result set. + */ + scope.setutils.intersection = function(set1, set2) { + + var result = new Set(); + set1.forEach(function _setIntersectionIterator(item) { + if (set2.has(item)) { + result.add(item); + } + }); + + return result; + }; + + + /** + * Helper function that will return a joined Set of two sets given. + * + * @private + * @param {Set} set1 + * First set to join with. + * @param {Set} set2 + * Second set to join with. + * @return {Set} + * Joined result set. + */ + scope.setutils.join = function(set1, set2) { + + var result = new Set(set1); + set2.forEach(function _setJoinIterator(item) { + result.add(item); + }); + + return result; + }; + + /** + * Helper function that will return a Set from set1 subtracting set2. + * + * @private + * @param {Set} set1 + * First set to subtract from. + * @param {Set} set2 + * Second set to subtract. + * @return {Set} + * Subtracted result set. + */ + scope.setutils.subtract = function(set1, set2) { + + var result = new Set(set1); + set2.forEach(function _setSubtractIterator(item) { + result.delete(item); + }); + + return result; + }; + + /** + * Helper function that will compare two Sets for equality. + * + * @private + * @param {Set} set1 + * First set to compare. + * @param {Set} set2 + * Second set to compare. + * @return {Boolean} + * `true` if the sets are equal, `false` otherwise. + */ + scope.setutils.equal = function(set1, set2) { + + if (set1.size !== set2.size) { + return false; + } + + var result = true; + set1.forEach(function _setEqualityIterator(item) { + if (!set2.has(item)) { + result = false; + } + }); + + return result; + }; +})(window); + +/** + * Transoms the numerical preferences to preferences view object + * @param {Number} pref Integer value representing the preferences + * @returns {Object} View preferences object + */ +function getFMColPrefs(pref) { + 'use strict'; + if (pref === undefined) { + return; + } + var columnsPreferences = Object.create(null); + columnsPreferences.fav = pref & 4; + columnsPreferences.label = pref & 1; + columnsPreferences.size = pref & 8; + columnsPreferences.type = pref & 64; + columnsPreferences.timeAd = pref & 32; + columnsPreferences.timeMd = pref & 16; + columnsPreferences.versions = pref & 2; + + return columnsPreferences; +} + +/** + * Get the number needed for bitwise operator + * @param {String} colName Column name + * @returns {Number} Number to be used in bitwise operator + */ +function getNumberColPrefs(colName) { + 'use strict'; + switch (colName) { + case 'fav': return 4; + case 'label': return 1; + case 'size': return 8; + case 'type': return 64; + case 'timeAd': return 32; + case 'timeMd': return 16; + case 'versions': return 2; + default: return null; + } +} + +function invalidLinkError() { + 'use strict'; + loadingInitDialog.hide(); + + loadfm.loaded = false; + loadfm.loading = false; + if (!is_mobile) { + var title = l[8531]; + var message = l[17557]; + msgDialog('warninga', title, message, false, function () { + // If the user is logged-in, he'll be redirected to the cloud + loadSubPage('login'); + }); + } + else { + // Show file/folder not found overlay + mobile.notFoundOverlay.show(); + } +} + +/** + * Classifies the strength of the password (Mainly used on the MegaInputs) + * ZXCVBN library need to be inited before executing this function. + * The minimum allowed strength is 8 characters in length and password score of 1 (weak). + * @param {String} password The user's password (should be trimmed for whitespace beforehand) + */ +function classifyPassword(password) { + + 'use strict'; + + if (typeof zxcvbn !== 'function') { + onIdle(() => { + throw new Error('zxcvbn init fault'); + }); + console.error('zxcvbn is not inited'); + return false; + } + + // Calculate the password score using the ZXCVBN library and its length + password = $.trim(password); + var passwordScore = zxcvbn(password).score; + var passwordLength = password.length; + var result = {}; + + if (passwordLength === 0) { + return false; + } + else if (passwordLength < security.minPasswordLength) { + result = { + string1: l[18700], + string2: l[18701], // Your password needs to be at least 8 characters long + className: 'good1', // Very weak + statusClass: 'insufficient-strength' + }; + } + else if (passwordScore === 4) { + result = { + string1: l[1128], + string2: l[1123], + className: 'good5', // Strong + statusClass: 'meets-minimum-strength' + }; + } + else if (passwordScore === 3) { + result = { + string1: l[1127], + string2: l[1122], + className: 'good4', // Good + statusClass: 'meets-minimum-strength' + }; + } + else if (passwordScore === 2) { + result = { + string1: l[1126], + string2: l[1121], + className: 'good3', // Medium + statusClass: 'meets-minimum-strength' + }; + } + else if (passwordScore === 1) { + result = { + string1: l[1125], + string2: l[1120], + className: 'good2', // Weak + statusClass: 'meets-minimum-strength' + }; + } + else { + result = { + string1: l[1124], + string2: l[1119], + className: 'good1', // Very weak + statusClass: 'insufficient-strength' + }; + } + + return result; +} + +/** + * A function to get the last day of the month + * @param {Date} dateObj The Date for which to return the last day of the month + * @returns {Date} the result date object with the last day of the month + */ +function getLastDayofTheMonth(dateObj) { + "use strict"; + if (!dateObj) { + return null; + } + + var day; + var month = dateObj.getUTCMonth(); + var year = dateObj.getUTCFullYear(); + if ([0, 2, 4, 6, 7, 9, 11].indexOf(month) >= 0) { + day = 31; + } + else if (month === 1) { + if (year % 4 !== 0) { + day = 28; + } + else if (year % 100 !== 0) { + day = 29; + } + else if (year % 400 !== 0) { + day = 28; + } + else { + day = 29; + } + } + else { + day = 30; + } + return new Date(year, month, day); +} + +/** + * Block Chrome Password manager for password field with attribute `autocomplete="new-password"` + */ +function blockChromePasswordManager() { + + "use strict"; + + if (window.chrome) { + var $newPasswordField = $('input[type="password"][autocomplete="new-password"]'); + var switchReadonly = function __switchReadonly(input) { + + input.setAttribute('readonly', true); + onIdle(function() { + input.removeAttribute('readonly'); + }); + }; + + $newPasswordField.rebind('focus.blockAutofill mousedown.blockAutofill', function() { + switchReadonly(this); + }); + + // For prevent last chracter deletion pops up password manager + $newPasswordField.rebind('keydown.blockAutofill', function(e) { + + if ((e.keyCode === 8 && + ((this.selectionStart === 1 && this.selectionEnd === 1) || + (this.selectionStart === 0 && this.selectionEnd === this.value.length))) || + (e.keyCode === 46 && + ((this.selectionStart === 0 && this.selectionEnd === 0 && this.value.length === 1) || + (this.selectionStart === 0 && this.selectionEnd === this.value.length)))) { + e.preventDefault(); + this.value = ''; + } + }); + } +} + +/** + * Attach the download file link handler + * Use in /desktop and /cmd + * @param $links + */ +/*exported registerLinuxDownloadButton */ +function registerLinuxDownloadButton($links) { + 'use strict'; + $links.rebind('click', function() { + var $link = $(this); + if (!$link.hasClass('disabled') && $link.attr('data-link')) { + window.location = $link.attr('data-link'); + } + return false; + }); +} +/* eslint-disable complexity */ +/** + * Function that takes users attributes, then prepare content texts of ODQ paywall dialog + * @param {Object} user_attr u_attr or {} + * @param {Object} accountData M.account, caller must populate then pass + * @returns {Object} contains {dialogText, dlgFooterText,fmBannerText} + */ +function odqPaywallDialogTexts(user_attr, accountData) { + 'use strict'; + + var totalFiles = (accountData.stats[M.RootID] ? accountData.stats[M.RootID].files : 0) + + (accountData.stats[M.RubbishID] ? accountData.stats[M.RubbishID].files : 0) + + (accountData.stats[M.InboxID] ? accountData.stats[M.InboxID].files : 0); + + var dialogText = mega.icu.format(l[23525], totalFiles); + var dlgFooterText = l[23524]; + var fmBannerText = l[23534]; + + if (user_attr.uspw) { + if (user_attr.uspw.dl) { + var deadline = new Date(user_attr.uspw.dl * 1000); + var currDate = new Date(); + var remainDays = Math.floor((deadline - currDate) / 864e5); + var remainHours = Math.floor((deadline - currDate) / 36e5); + + const sanitiseString = (string) => { + return escapeHTML(string) + .replace(/\[S]/g, '') + .replace(/\[\/S]/g, '') + .replace(/\[A]/g, '') + .replace(/\[\/A]/g, ''); + }; + if (remainDays > 0) { + dlgFooterText = sanitiseString(mega.icu.format(l.dialog_exceed_storage_quota, remainDays)); + fmBannerText = sanitiseString(mega.icu.format(l.fm_banner_exceed_storage_quota, remainDays)); + } + else if (remainDays === 0 && remainHours > 0) { + dlgFooterText = sanitiseString(mega.icu.format(l.dialog_exceed_storage_quota_hours, remainHours)); + } + } + if (user_attr.uspw.wts && user_attr.uspw.wts.length) { + dialogText = mega.icu.format(l[23520], totalFiles); + if (user_attr.uspw.wts.length === 1) { + dialogText = mega.icu.format(l[23530], totalFiles); + dialogText = dialogText.replace('%2', time2date(user_attr.uspw.wts[0], 1)); + } + if (user_attr.uspw.wts.length === 2) { + dialogText = dialogText.replace('%2', time2date(user_attr.uspw.wts[0], 1)).replace('%3', '') + .replace('%4', time2date(user_attr.uspw.wts[1], 1)); + } + else if (user_attr.uspw.wts.length === 3) { + dialogText = dialogText.replace('%2', time2date(user_attr.uspw.wts[0], 1)) + .replace('%3', time2date(user_attr.uspw.wts[1], 1)) + .replace('%4', time2date(user_attr.uspw.wts[2], 1)); + } + else { + // more than 3 + var datesString = time2date(user_attr.uspw.wts[1], 1); + for (var k = 2; k < user_attr.uspw.wts.length - 1; k++) { + datesString += ', ' + time2date(user_attr.uspw.wts[k], 1); + } + + dialogText = dialogText.replace('%2', time2date(user_attr.uspw.wts[0], 1)) + .replace('%3', datesString) + .replace('%4', time2date(user_attr.uspw.wts[user_attr.uspw.wts.length - 1], 1)); + } + } + } + + var filesText = l[23253]; // 0 files + + dialogText = dialogText.replace('%1', user_attr.email || ' '); + dialogText = dialogText.replace('%6', bytesToSize(accountData.space_used)); + + // In here, it's guaranteed that we have pro.membershipPlans, + // but we will check for error free logic in case of changes + var minPlanId = -1; + var neededPro = 4; + if (pro.membershipPlans && pro.membershipPlans.length) { + var spaceUsedGB = accountData.space_used / 1073741824; // = 1024*1024*1024 + var minPlan = 9000000; + for (var h = 0; h < pro.membershipPlans.length; h++) { + if (pro.membershipPlans[h][4] === 1 && pro.membershipPlans[h][2] > spaceUsedGB && + pro.membershipPlans[h][2] < minPlan) { + minPlan = pro.membershipPlans[h][2]; + minPlanId = pro.membershipPlans[h][1]; + } + } + } + if (minPlanId === -1) { + // weirdly, we dont have plans loaded, or no plan matched the storage. + if (user_attr.p) { + neededPro = user_attr.p + 1; + if (neededPro === 3) { + neededPro = 100; + } + else if (neededPro === 5) { + neededPro = 1; + } + } + } + else { + neededPro = minPlanId; + } + + dialogText = dialogText.replace('%7', pro.getProPlanName(neededPro)); + + return { + dialogText: dialogText, + dlgFooterText: dlgFooterText, + fmBannerText: fmBannerText + }; +} + + +function getTaxName(countryCode) { + 'use strict'; + switch (countryCode) { + case "AT": return "USt"; + case "BE": return "TVA"; + case "HR": return "PDV"; + case "CZ": return "DPH"; + case "DK": return "moms"; + case "EE": return "km"; + case "FI": return "ALV"; + case "FR": return "TVA"; + case "DE": return "USt"; + case "HU": return "AFA"; + case "IT": return "IVA"; + case "LV": return "PVN"; + case "LT": return "PVM"; + case "LU": return "TVA"; + case "NL": return "BTW"; + case "PL": return "PTU"; + case "PT": return "IVA"; + case "RO": return "TVA"; + case "SK": return "DPH"; + case "SI": return "DDV"; + case "SE": return "MOMS"; + case "AL": return "TVSH"; + case "AD": return "IGI"; + case "AR": return "IVA"; + case "AM": return "AAH"; + case "AU": return "GST"; + case "BO": return "IVA"; + case "BA": return "PDV"; + case "BR": return "ICMS"; + case "CA": return "GST"; + case "CL": return "IVA"; + case "CO": return "IVA"; + case "DO": return "ITBIS"; + case "EC": return "IVA"; + case "SV": return "IVA"; + case "FO": return "MVG"; + case "GT": return "IVA"; + case "IS": return "VSK"; + case "ID": return "PPN"; + case "JE": return "GST"; + case "JO": return "GST"; + case "LB": return "TVA"; + case "LI": return "MWST"; + case "MK": return "DDV"; + case "MY": return "GST"; + case "MV": return "GST"; + case "MX": return "IVA"; + case "MD": return "TVA"; + case "MC": return "TVA"; + case "ME": return "PDV"; + case "MA": return "GST"; + case "NZ": return "GST"; + case "NO": return "MVA"; + case "PK": return "GST"; + case "PA": return "ITBMS"; + case "PY": return "IVA"; + case "PE": return "IGV"; + case "PH": return "RVAT"; + case "RU": return "NDS"; + case "SG": return "GST"; + case "CH": return "MWST"; + case "TN": return "TVA"; + case "TR": return "KDV"; + case "UA": return "PDV"; + case "UY": return "IVA"; + case "UZ": return "QQS"; + case "VN": return "GTGT"; + case "VE": return "IVA"; + case "ES": return "NIF"; + + default: return "VAT"; + } +} +/* eslint-enable complexity */ + +/** + * Validate entered address is on correct structure, if there is more type of bitcoin structure please update. + * Reference - https://stackoverflow.com/a/59756959 + * Use in Referral program redemption + * @param {String} address Bitcoin address + * + * @returns {Boolean} result Validity of entered address + */ +function validateBitcoinAddress(address) { + + 'use strict'; + + return address.match(/(^[13][\1-9A-HJ-NP-Za-km-z]{25,34}$)|(^(bc1)[\dA-HJ-NP-Za-z]{8,87}$)/) === null; +} + +(function __fmconfig_handler() { + "use strict"; + + let timer; + const ns = Object.create(null); + const privy = Object.create(null); + const oHasOwn = {}.hasOwnProperty; + const hasOwn = (o, p) => oHasOwn.call(o, p); + const oLen = (o) => Object.keys(o || {}).length; + const parse = tryCatch(v => JSON.parse(v), false); + const stringify = tryCatch(v => JSON.stringify(v)); + const logger = MegaLogger.getLogger('fmconfig'); + const MMH_SEED = 0x7fee1ef; + + /** @property privy.ht */ + lazy(privy, 'ht', () => { + return MurmurHash3('ht!' + u_handle + base64urldecode(u_handle), MMH_SEED).toString(16); + }); + + /** + * Move former/legacy settings stored in localStorage + * @private + */ + const moveLegacySettings = function() { + const prefs = [ + 'agreedToCopyrightWarning', 'dl_maxSlots', 'font_size', + 'leftPaneWidth', 'mobileGridViewModeEnabled', 'ul_maxSlots', 'ul_maxSpeed' + ]; + const replacements = { + 'agreedToCopyrightWarning': 'cws', + 'mobileGridViewModeEnabled': 'mgvm' + }; + + for (let i = prefs.length; i--;) { + const pref = prefs[i]; + + if (localStorage[pref] !== undefined) { + const p = replacements[pref] || pref; + + if (fmconfig[p] === undefined) { + mega.config.set(p, parseInt(localStorage[pref]) | 0); + } + } + } + }; + + // shrink suitable fmconfig settings + const shrink = (cfg) => { + if (d) { + console.time('fmconfig.shrink'); + } + + // eslint-disable-next-line guard-for-in + for (let slot in shrink.bitdef) { + let bit = 0; + let def = shrink.bitdef[slot]; + + for (let i = def.length; i--;) { + const k = def[i]; + const v = 1 << i; + + if (cfg[k] !== undefined) { + if (parse(cfg[k]) | 0) { + bit |= v; + } + delete cfg[k]; + } + } + + cfg[slot] = stringify(bit); + } + + cfg.xs1 = stringify( + (cfg.chatAvPaneHeight & 0xfff) << 20 | (cfg.font_size & 15) << 12 | cfg.leftPaneWidth & 0xfff + ); + delete cfg.font_size; + delete cfg.leftPaneWidth; + delete cfg.chatAvPaneHeight; + + let s = cfg.ul_maxSpeed; + s = s / 1024 << 1 | (s < 0 ? 1 : 0); + cfg.xs2 = stringify((s & 0xfffff) << 8 | (cfg.ul_maxSlots & 15) << 4 | cfg.dl_maxSlots & 15); + delete cfg.ul_maxSpeed; + delete cfg.ul_maxSlots; + delete cfg.dl_maxSlots; + + if (cfg.viewercfg) { + const xs3 = parse(cfg.viewercfg) || {}; + cfg.xs3 = stringify(xs3.speed << 16 | xs3.order << 8 | xs3.repeat << 1 | xs3.sub); + delete cfg.viewercfg; + } + + if (cfg.treenodes) { + cfg.xtn = shrink.tree(cfg.treenodes); + delete cfg.treenodes; + } + + if (cfg.viewmodes) { + cfg.xvm = shrink.views(cfg.viewmodes); + delete cfg.viewmodes; + } + shrink.sorta(cfg); + + if (d) { + console.timeEnd('fmconfig.shrink'); + } + return cfg; + }; + + shrink.bitdef = Object.assign(Object.create(null), { + v04: ['rvonbrddl', 'rvonbrdfd', 'rvonbrdas'], + obv4: [ + 'obcd', 'obcduf', 'obcdmyf', 'obcdda', 'obmc', 'obmclp', 'obmccp', 'obmcmp', + 'obmcco', 'obmcnw', 'obrev' + ], + xb1: [ + // do NOT change the order, add new entries at the tail UP TO 31, and 8 per row. + 'cws', 'ctt', 'viewmode', 'dbDropOnLogout', 'dlThroughMEGAsync', 'sdss', 'tpp', 'ulddd', + 'cbvm', 'mgvm', 'uiviewmode', 'uisorting', 'uidateformat', 'skipsmsbanner', 'skipDelWarning', 'rsv1', + 'nowarnpl', 'zip64n', 'callemptytout', 'callinout', 'showHideChat', 'showRecents', 'nocallsup' + ] + }); + + shrink.tree = (nodes) => { + let v = ''; + const tn = Object.keys(parse(nodes) || {}); + const pfx = {'o': '1', 'p': '2'}; + + for (let i = 0; i < tn.length; ++i) { + const k = tn[i]; + v += (k[2] === '_' && pfx[k[0]] || '0') + base64urldecode(k.substr(-8)); + } + return v; + }; + + shrink.views = (nodes) => { + let r = ''; + const v = parse(nodes); + const s = Object.keys(v || {}); + + for (let i = 0; i < s.length; ++i) { + const h = s[i]; + const n = (h.length === 8 || h.length === 11) | 0; + const j = n ? base64urldecode(h) : h; + + r += String.fromCharCode(j.length << 2 | (v[h] & 1) << 1 | n) + j; + } + + return r; + }; + + shrink.sorta = (config) => { + const tsort = config.sorting && parse(config.sorting); + const rules = shrink.sorta.rules = shrink.sorta.rules || Object.keys(M.sortRules || {}); + const shift = o => rules.indexOf(o.n) << 1 | (o.d < 0 ? 1 : 0); + const store = n => String.fromCharCode(n); + let res = store(tsort ? shift(tsort) : 0); + + if (config.sortmodes) { + const sm = Object.assign(Object.create(null), parse(config.sortmodes)); + + // eslint-disable-next-line guard-for-in + for (let h in sm) { + const v = sm[h]; + const n = (h.length === 8 || h.length === 11) | 0; + const p = n ? base64urldecode(h) : h; + + if (!rules.includes(v.n)) { + logger.warn(`Invalid sort-mode for ${h} %o`, v); + continue; + } + + res += store(shift(v)) + store(p.length << 1 | n) + p; + } + } + + config.xsm = res; + delete config.sorting; + delete config.sortmodes; + }; + shrink.sorta.rules = null; + + // stretch previously shrunk settings + const stretch = (config) => { + if (d) { + console.time('fmconfig.stretch'); + } + + // eslint-disable-next-line guard-for-in + for (let slot in shrink.bitdef) { + let def = shrink.bitdef[slot]; + + for (let i = def.length; i--;) { + const k = def[i]; + const v = 1 << i; + + if (config[slot] & v) { + config[k] = 1; + } + } + } + + if (config.xs1) { + config.font_size = config.xs1 >> 12 & 15; + config.leftPaneWidth = config.xs1 & 0xfff; + config.chatAvPaneHeight = 0; + } + + if (config.xs2) { + let s = config.xs2 >> 8; + config.dl_maxSlots = config.xs2 & 15; + config.ul_maxSlots = config.xs2 >> 4 & 15; + config.ul_maxSpeed = s & 1 ? -1 : (s >> 1) * 1024; + } + + if (config.xs3) { + config.viewercfg = {}; + config.viewercfg.speed = config.xs3 >> 16 & 0xFF; + config.viewercfg.order = config.xs3 >> 8 & 0xFF; + config.viewercfg.repeat = config.xs3 >> 1 & 1; + config.viewercfg.sub = config.xs3 & 1; + } + + if (config.xtn) { + config.treenodes = stretch.tree(config.xtn); + delete config.xtn; + } + + if (config.xvm) { + config.viewmodes = stretch.views(config.xvm); + delete config.xvm; + } + + if (config.xsm) { + stretch.sorta(config); + } + + if (d) { + console.timeEnd('fmconfig.stretch'); + } + return config; + }; + + stretch.tree = (xtn) => { + const t = {}; + const p = {'0': '', '1': 'os_', '2': 'pl_'}; + + for (let i = 0; i < xtn.length; i += 7) { + t[p[xtn[i]] + base64urlencode(xtn.substr(i + 1, 6))] = 1; + } + return t; + }; + + stretch.views = (xvm) => { + const v = {}; + + for (let i = 0; i < xvm.length;) { + let b = xvm.charCodeAt(i); + let l = b >> 2; + let h = xvm.substr(i + 1, l); + + v[b & 1 ? base64urlencode(h) : h] = b >> 1 & 1; + + i += ++l; + } + return v; + }; + + stretch.sorta = (config) => { + let tmp; + let xsm = config.xsm; + const rules = shrink.sorta.rules = shrink.sorta.rules || Object.keys(M.sortRules || {}); + + tmp = xsm.charCodeAt(0); + config.sorting = {n: rules[tmp >> 1], d: tmp & 1 ? -1 : 1}; + + tmp = {}; + for (let i = 1; i < xsm.length;) { + const a = xsm.charCodeAt(i); + const b = xsm.charCodeAt(i + 1); + const h = xsm.substr(i + 2, b >> 1); + + tmp[b & 1 ? base64urlencode(h) : h] = {n: rules[a >> 1], d: a & 1 ? -1 : 1}; + i += 2 + (b >> 1); + } + + delete config.xsm; + config.sortmodes = tmp; + }; + + // sanitize fmconfig + const filter = async(fmconfig) => { + const config = {}; + const nodeType = {viewmodes: 1, sortmodes: 1, treenodes: 1}; + const nTreeFilter = await filter.tree(fmconfig, nodeType); + + for (let key in fmconfig) { + if (hasOwn(fmconfig, key)) { + let value = fmconfig[key]; + + if (!value && value !== 0) { + logger.info('Skipping empty value for "%s"', key); + continue; + } + + // Dont save no longer existing nodes + if (nodeType[key]) { + if (typeof value !== 'object') { + logger.warn('Unexpected type for ' + key); + continue; + } + value = nTreeFilter(value); + } + + if (typeof value === 'object' && !oLen(value)) { + logger.info('Skipping empty object "%s"', key); + continue; + } + + config[key] = typeof value === 'string' ? value : stringify(value); + + if (d) { + console.assert(config[key] && config[key].length > 0); + } + } + } + + return shrink(config); + }; + + // get node tree sanitizer. + filter.tree = async(config, types) => { + const echo = v => v; + if (pfid) { + // @todo LRU cache? + return echo; + } + + const handles = array.unique( + Object.keys(types) + .reduce((s, v) => Object.keys(config[v] || {}) + .map(h => M.isCustomView(h).nodeID || h).concat(s), []) + .filter(s => s.length === 8 && s !== 'contacts') + ); + + if (handles.length < 200) { + return echo; + } + + const nodes = await dbfetch.node(handles).catch(nop) || []; + for (let i = nodes.length; i--;) { + nodes[nodes[i].h] = true; + } + + const isValid = (handle) => { + const cv = M.isCustomView(handle); + handle = cv.nodeID || handle; + return handle.length !== 8 || nodes[handle] || handle === 'contacts' || handle === cv.type; + }; + + return (tree) => { + const result = {}; + for (let handle in tree) { + if (hasOwn(tree, handle) + && handle.substr(0, 7) !== 'search/' + && isValid(handle)) { + + result[handle] = tree[handle]; + } + else { + logger.info('Skipping non-existing node "%s"', handle); + } + } + return result; + }; + }; + + // Save fmconfig into WebStorage. + const saveLocally = async() => { + let storage = localStorage; + + /** + if ('csp' in window) { + await csp.init(); + + if (!csp.has('pref')) { + storage = sessionStorage; + } + } + /**/ + + const config = await filter(fmconfig).catch(dump); + + tryCatch(data => { + data = JSON.stringify(data); + if (data.length > 262144) { + logger.warn('fmconfig became larger than 256KB', data.length); + } + storage.fmconfig = data; + }, ex => { + if (ex.name === 'QuotaExceededError') { + if (d) { + console.warn('WebStorage exhausted!', [fmconfig], stringify(storage).length); + } + + if (!u_type) { + // The user is not logged/registered, let's just expunge it... + console.info('Cleaning fmconfig... (%s bytes)', String(storage.fmconfig).length); + delete storage.fmconfig; + } + } + })(config); + }; + + /** + * Pick the global `fmconfig` and sanitize it before + * sending it to the server, as per TLV requirements. + * @private + */ + const store = mutex('fmconfig:store.mutex', async(resolve) => { + if (!window.u_handle) { + throw new Error('Unable to store fmconfig in the current context.'); + } + + const exit = (rc, message) => { + if (d) { + console.timeEnd('fmconfig.store'); + if (message) { + logger.debug(message); + } + } + resolve(rc); + return rc; + }; + + let str; + let len; + const fmconfig = window.fmconfig || {}; + + if (d) { + str = stringify(fmconfig); + len = str.length; + console.time('fmconfig.store'); + logger.debug('fmconfig.store:begin (%d bytes)', len, str); + } + + const config = await filter(fmconfig).catch(dump); + if (typeof config !== 'object' || !oLen(config)) { + return exit(ENOENT, 'Not saving fmconfig, invalid...'); + } + str = stringify(config).replace(/\\u.{4}/g, n => parseInt(n.substr(2), 16)); + + if (d) { + logger.debug('fmconfig.store:end (%d bytes saved)', len - str.length, str); + } + + len = str.length; + + if (len < 8) { + return exit(EARGS, 'Not saving fmconfig, data too short...'); + } + if (len > 12000) { + return exit(EOVERQUOTA, 'Not saving fmconfig, data exceeds maximum allowed...'); + } + + // generate checksum/hash for the config + const hash = MurmurHash3(str, MMH_SEED); + const tag = 'fmc!' + privy.ht; + + // dont store it unless it has changed + if (hash === localStorage[tag] >>> 0) { + return exit(EEXIST, 'Not saving fmconfig, unchanged...'); + } + + // fmconfig may changed in our side, but not in server, check it. + let attr = await Promise.resolve(mega.attr.get(u_handle, 'fmconfig', false, true)).catch(nop); + if (stringify(attr) === stringify(config)) { + logger.debug('remote syncing completed.', attr); + } + else { + attr = mega.attr.set('fmconfig', config, false, true); + } + + localStorage[tag] = hash; + const promise = Promise.resolve(attr).catch(nop); + + timer = promise; + promise.then(function() { + timer = 0; + }); + + return exit(await promise); + }); + + // issue fmconfig persistence upon change. + const push = () => { + if (u_type > 2) { + // through a timer to prevent floods + timer = delay('fmconfig:store', store, 2600); + } + else { + timer = null; + delay('fmconfig:store', saveLocally, 3401); + } + }; + + // Real-time update upon fmconfig syncing. + const refresh = () => { + if (fminitialized) { + refresh.ui(); + } + + if (fmconfig.ul_maxSlots) { + ulQueue.setSize(fmconfig.ul_maxSlots); + } + + // quick&dirty(tm) hack, change me whenever we rewrite the underlying logic.. + let dlSlots = $.tapioca ? 1 : fmconfig.dl_maxSlots; + if (dlSlots) { + dlQueue.setSize(dlSlots); + } + + if (fmconfig.font_size && !document.body.classList.contains('fontsize' + fmconfig.font_size)) { + document.body.classList.remove('fontsize1', 'fontsize2'); + document.body.classList.add('fontsize' + fmconfig.font_size); + } + + if (fmconfig.fmColPrefs) { + const prefs = getFMColPrefs(fmconfig.fmColPrefs); + for (let colPref in prefs) { + if (hasOwn(prefs, colPref)) { + M.columnsWidth.cloud[colPref].viewed = prefs[colPref] > 0; + } + } + + if (M.currentrootid === M.RubbishID) { + M.columnsWidth.cloud.fav.disabled = true; + M.columnsWidth.cloud.fav.viewed = false; + } + } + }; + + refresh.ui = () => { + if (M.recentsRender && M.recentsRender.hasConfigChanged()) { + M.recentsRender.onConfigChange(); + if (page.includes('fm/recents')) { + openRecents(); + } + } + + if (M.account && page.indexOf('fm/account') > -1) { + if (!is_mobile) { + accountUI.renderAccountPage(M.account); + } + else if (page === 'fm/account/notifications') { + mobile.account.notifications.render(); + } + else if (page === 'fm/account/file-management') { + mobile.account.filemanagement.render(); + } + + return; + } + + const view = Object(fmconfig.viewmodes)[M.currentdirid]; + const sort = Object(fmconfig.sortmodes)[M.currentdirid]; + + if (view !== undefined && M.viewmode !== view + || sort !== undefined && (sort.n !== M.sortmode.n || sort.d !== M.sortmode.d)) { + + M.openFolder(M.currentdirid, true); + } + + if (M.currentrootid === M.RootID) { + const tree = Object(fmconfig.treenodes); + + if (stringify(tree) !== M.treenodes) { + + M.renderTree(); + } + } + }; + + // @private + const define = (target, key, value) => { + + if (d) { + if (value === undefined) { + logger.debug('Removing "%s"', key); + } + else { + logger.debug('Setting value for key "%s"', key, value); + + if (String(stringify(value)).length > 1024) { + logger.warn('Attempting to store more than 1KB for %s...', key); + } + + console.assert(typeof value !== 'boolean', 'Invalid value type for ' + key); + console.assert(typeof key === 'string' && /^\w{2,17}$/.test(key), 'Invalid key ' + key); + } + } + + const rc = value === undefined ? Reflect.deleteProperty(target, key) : Reflect.set(target, key, value); + + if (fminitialized) { + queueMicrotask(push); + } + else if (timer !== -MMH_SEED) { + timer = -MMH_SEED; + mBroadcaster.once('fm:initialized', push); + } + + mBroadcaster.sendMessage('fmconfig:' + key, value); + + return rc; + }; + + // Initialize fmconfig. + const setup = (config) => { + config = stretch(Object.assign(Object.create(null), config)); + + delete window.fmconfig; + Object.defineProperty(window, 'fmconfig', { + configurable: true, + value: new Proxy(config, { + set(target, prop, value) { + return define(target, prop, value); + }, + deleteProperty(target, prop) { + return define(target, prop, undefined); + } + }) + }); + + moveLegacySettings(); + + // eslint-disable-next-line guard-for-in + for (let key in fmconfig) { + let value = fmconfig[key]; + + if (typeof value === 'string') { + value = parse(fmconfig[key]); + + if (value === undefined) { + value = fmconfig[key]; + } + } + + // @todo remove in 4 months + if (key.startsWith('confirmModal_')) { + mega.config.remove(key); + continue; + } + + mega.config.set(key, value); + } + + refresh(); + }; + + /** + * Fetch server-side config. + * @return {Promise} + */ + ns.fetch = async function _fetchConfig() { + if (!u_handle) { + throw new Error('Unable to fetch fmconfig in the current context.'); + } + setup(await Promise.resolve(mega.attr.get(u_handle, 'fmconfig', false, true)).catch(nop)); + + // disable client-side rubbish scheduler + if (u_attr.flags.ssrs > 0) { + mega.config.remove('rubsched'); + } + + // Initialize account notifications. + mega.notif.setup(fmconfig.anf); + }; + + /** + * Flush any pending fmconfig storage + * @returns {MegaPromise} + */ + ns.flush = async function() { + if (timer) { + delay.cancel('fmconfig:store'); + return timer instanceof Promise ? timer : store(); + } + }; + + /** + * Retrieve configuration value. + * (We'll keep using the global `fmconfig` for now) + * + * @param {String} key Configuration key + */ + ns.get = function _getConfigValue(key) { + return fmconfig[key]; + }; + + /** + * Remove configuration value + * @param {String} key Configuration key + */ + ns.remove = function _removeConfigValue(key) { + return this.set(key, undefined); + }; + + /** + * Store configuration value + * @param {String} key Configuration key + * @param {*} value Configuration value + */ + ns.set = function _setConfigValue(key, value) { + fmconfig[key] = value; + }; + + /** + * Same as .set, but displays a toast notification. + * @param {String} key Configuration key + * @param {*} value Configuration value + * @param {String} [toastText] Toast notification text + */ + ns.setn = function _setConfigValueToast(key, value, toastText) { + + delay('fmconfig:setn.' + key, function() { + let toast = false; + + if (key === 'rubsched' && u_attr.flags.ssrs > 0) { + value = String(value).split(':').pop() | 0; + + if (M.account.ssrs !== value) { + M.account.ssrs = value; + mega.attr.set('rubbishtime', String(value), -2, 1); + toast = true; + } + } + else if (mega.config.get(key) !== value) { + mega.config.set(key, value); + toast = true; + } + + if (toast) { + showToast('settings', toastText || l[16168]); + } + }); + }; + + /** + * Factory to store boolean-type options as bits to save space. + * @param {String} name The name for the fmconfig property + * @param {Array} properties Array of options/preferences + * @returns {{}} + */ + ns.factory = function(name, properties) { + assert(Array.isArray(properties) && properties.length < 32); + assert(typeof name === 'string' && name.length > 1 && name.length < 9); + + const config = Object.create(null); + const bitdef = Object.create(null); + + let flags = mega.config.get(name) >>> 0; + for (let i = properties.length; i--;) { + const k = properties[i]; + const v = 1 << i; + + if (flags & v) { + config[k] = true; + } + bitdef[k] = v >>> 0; + } + + const define = (target, prop, value) => { + let rc = false; + + if (prop in bitdef) { + const old = flags; + + if (value | 0) { + flags |= bitdef[prop]; + rc = Reflect.set(target, prop, true); + } + else { + flags &= ~bitdef[prop]; + rc = Reflect.deleteProperty(target, prop); + } + + if (rc && old !== flags) { + mega.config.set(name, flags || undefined); + } + } + return rc; + }; + + return new Proxy(config, { + get(target, prop) { + return prop in bitdef ? !!(flags & bitdef[prop]) : undefined; + }, + set(target, prop, value) { + return define(target, prop, value); + }, + deleteProperty(target, prop) { + return define(target, prop, null); + } + }); + }; + + mBroadcaster.once('startMega', function() { + setup(parse(sessionStorage.fmconfig || localStorage.fmconfig)); + }); + + if (is_karma) { + mega.config = ns; + } + else { + Object.defineProperty(mega, 'config', {value: Object.freeze(ns)}); + } +})(); + +// -------------------------------------------------------------------------- +// -------------------------------------------------------------------------- +// --- Account Notifications (preferences) ---------------------------------- +// -------------------------------------------------------------------------- +(function(map) { + 'use strict'; + + let _enum = []; + const _tag = 'ACCNOTIF_'; + + Object.keys(map) + .forEach(function(k) { + map[k] = map[k].map(function(m) { + return k.toUpperCase() + '_' + m.toUpperCase(); + }); + + let rsv = 0; + let memb = clone(map[k]); + + while (memb.length < 10) { + memb.push(k.toUpperCase() + '_RSV' + (++rsv)); + } + + if (memb.length > 10) { + throw new Error('Stack overflow..'); + } + + _enum = _enum.concat(memb); + }); + + makeEnum(_enum, _tag, mega); + + Object.defineProperty(mega, 'notif', { + value: Object.freeze((function(flags) { + function check(flag, tag) { + if (typeof flag === 'string') { + if (tag !== undefined) { + flag = tag + '_' + flag; + } + flag = String(flag).toUpperCase(); + flag = mega[flag] || mega[_tag + flag] || 0; + } + return flag; + } + + return { + get flags() { + return flags; + }, + + setup: function setup(oldFlags) { + if (oldFlags === undefined) { + // Initialize account notifications to defaults (all enabled) + assert(!fmconfig.anf, 'Account notification flags already set'); + + Object.keys(map) + .forEach(k => { + const grp = map[k]; + let len = grp.length; + + while (len--) { + this.set(grp[len]); + } + }); + } + else { + flags = oldFlags; + } + }, + + has: function has(flag, tag) { + return flags & check(flag, tag); + }, + + set: function set(flag, tag) { + flags |= check(flag, tag); + mega.config.set('anf', flags); + }, + + unset: function unset(flag, tag) { + flags &= ~check(flag, tag); + mega.config.set('anf', flags); + } + }; + })(0)) + }); + + _enum = undefined; + +})({ + chat: ['ENABLED'], + cloud: ['ENABLED', 'NEWSHARE', 'DELSHARE', 'NEWFILES'], + contacts: ['ENABLED', 'FCRIN', 'FCRACPT', 'FCRDEL'] +}); + +var xxtea = (function() { + 'use strict'; + + // (from https://github.com/xxtea/xxtea-js/blob/master/src/xxtea.js) + var DELTA = 0x9E3779B9; + var ns = Object.create(null); + + var int32 = function(i) { + return i & 0xFFFFFFFF; + }; + + var mx = function(sum, y, z, p, e, k) { + return (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z); + }; + + ns.encryptUint32Array = function encryptUint32Array(v, k) { + var length = v.length; + var n = length - 1; + var y; + var z = v[n]; + var sum = 0; + var e; + var p; + var q; + for (q = Math.floor(6 + 52 / length) | 0; q > 0; --q) { + sum = int32(sum + DELTA); + e = sum >>> 2 & 3; + for (p = 0; p < n; ++p) { + y = v[p + 1]; + z = v[p] = int32(v[p] + mx(sum, y, z, p, e, k)); + } + y = v[0]; + z = v[n] = int32(v[n] + mx(sum, y, z, n, e, k)); + } + return v; + }; + + ns.decryptUint32Array = function decryptUint32Array(v, k) { + var length = v.length; + var n = length - 1; + var y = v[0]; + var z; + var sum; + var e; + var p; + var q = Math.floor(6 + 52 / length); + for (sum = int32(q * DELTA); sum !== 0; sum = int32(sum - DELTA)) { + e = sum >>> 2 & 3; + for (p = n; p > 0; --p) { + z = v[p - 1]; + y = v[p] = int32(v[p] - mx(sum, y, z, p, e, k)); + } + z = v[n]; + y = v[0] = int32(v[0] - mx(sum, y, z, 0, e, k)); + } + return v; + }; + + return Object.freeze(ns); +}()); + +var use_ssl = window.is_extension && !window.is_iframed ? 0 : 1; +var have_ab = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined'; + +// general errors +var EINTERNAL = -1; +var EARGS = -2; +var EAGAIN = -3; +var ERATELIMIT = -4; +var EFAILED = -5; +var ETOOMANY = -6; +var ERANGE = -7; +var EEXPIRED = -8; + +// FS access errors +var ENOENT = -9; // No Entity (does not exist) +var ECIRCULAR = -10; +var EACCESS = -11; +var EEXIST = -12; +var EINCOMPLETE = -13; + +// crypto errors +var EKEY = -14; + +// user errors +var ESID = -15; +var EBLOCKED = -16; +var EOVERQUOTA = -17; +var ETEMPUNAVAIL = -18; +var ETOOMANYCONNECTIONS = -19; +var EGOINGOVERQUOTA = -24; + +var EROLLEDBACK = -25; +var EMFAREQUIRED = -26; // Multi-Factor Authentication Required +var EPAYWALL = -29; // ODQ paywall state + +// custom errors +var ETOOERR = -400; +var ESHAREROVERQUOTA = -401; + + +// convert user-supplied password array +function prepare_key(a) { + var i, j, r; + var aes = []; + var pkey = [0x93C467E3, 0x7DB0C7A4, 0xD1BE3F81, 0x0152CB56]; + + for (j = 0; j < a.length; j += 4) { + var key = [0, 0, 0, 0]; + for (i = 0; i < 4; i++) { + if (i + j < a.length) { + key[i] = a[i + j]; + } + } + aes.push(new sjcl.cipher.aes(key)); + } + + for (r = 65536; r--;) { + for (j = 0; j < aes.length; j++) { + pkey = aes[j].encrypt(pkey); + } + } + + return pkey; +} + +// prepare_key with string input +function prepare_key_pw(password) { + return prepare_key(str_to_a32(password)); +} + +function a32_to_base64(a) { + return base64urlencode(a32_to_str(a)); +} + +var firefox_boost = is_chrome_firefox && !!localStorage.fxboost; + +// ArrayBuffer to binary string +var ab_to_str = function abToStr1(ab) { + return ab.buffer; +}; + +if (firefox_boost) { + ab_to_str = mozAB2S; +} +else if (have_ab) { + ab_to_str = function abToStr2(ab) { + var u8 = new Uint8Array(ab); + + /*if (u8.length < 0x10000) { + return String.fromCharCode.apply(String, u8); + }*/ + + var b = ''; + for (var i = 0; i < u8.length; i++) { + b = b + String.fromCharCode(u8[i]); + } + + return b; + }; +} + +// random number between 0 .. n -- based on repeated calls to rc +function rand(n) { + var r = new Uint32Array(1); + asmCrypto.getRandomValues(r); + return r[0] % n; // <- oops, it's uniformly distributed only when `n` divides 0x100000000 +} + + +/** + * generate RSA key + * @param {Function} callBack optional callback function to be called. + * if not specified the standard set_RSA will be called + */ +var crypto_rsagenkey = promisify(function _crypto_rsagenkey(resolve, reject, aSetRSA) { + 'use strict'; + var logger = MegaLogger.getLogger('crypt'); + + var startTime = new Date(); + + // suppress upgrade warning at account creation time + mega.keyMgr.postregistration = true; + + if (typeof msCrypto !== 'undefined' && msCrypto.subtle) { + var ko = msCrypto.subtle.generateKey({ + name: 'RSAES-PKCS1-v1_5', + modulusLength: 2048 + }, true); + ko.oncomplete = function () { + ko = msCrypto.subtle.exportKey('jwk', ko.result.privateKey); + ko.oncomplete = function () { + var jwk = JSON.parse(asmCrypto.bytes_to_string(new Uint8Array(ko.result))); + _done(['n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi'].map(function (x) { + return base64urldecode(jwk[x]); + })); + }; + }; + } + else { + var w = new Worker((is_extension ? '' : '/') + 'keygen.js'); + + w.onmessage = function (e) { + w.terminate(); + _done(e.data); + }; + + var workerSeed = mega.getRandomValues(256); + + w.postMessage([2048, 257, workerSeed]); + } + + function _done(k) { + var endTime = new Date(); + logger.debug("Key generation took " + + (endTime.getTime() - startTime.getTime()) / 1000.0 + + " seconds!"); + + if (aSetRSA === false) { + resolve(k); + } + else { + u_setrsa(k).then(resolve).catch(dump); + } + } +}); + +function ApiQueue() { // double storage + 'use strict'; + this._head = 0; + this._tail = 0; + this._storage1 = Object.create(null); + this._storage2 = Object.create(null); +} +ApiQueue.prototype.size = function () { + 'use strict'; + return this._tail - this._head; +}; +ApiQueue.prototype.sneak = function () { + 'use strict'; + if (this._head !== this._tail) { + return { st1: this._storage1[this._head], st2: this._storage2[this._head] }; + } +}; +ApiQueue.prototype.enqueue = function (data1, data2) { + 'use strict'; + // reset to 0 index, we dont want indexes to keep getting bigger + // this is very safe, since it takes place during enqueue, + // and it is not possible to have another undergoing dequeue(because head=tail) + if (this._head === this._tail) { + this._head = 0; + this._tail = 0; + } + this._storage1[this._tail] = data1; + this._storage2[this._tail++] = data2; +}; +ApiQueue.prototype.clear = function () { + 'use strict'; + this._head = 0; + this._tail = 0; + this._storage1 = Object.create(null); + this._storage2 = Object.create(null); +}; +ApiQueue.prototype.dequeue = function (onlySingle) { + 'use strict'; + if (this._head !== this._tail) { + var data1 = this._storage1[this._head]; + if (onlySingle && data1.length) { + return null; + } + var data2 = this._storage2[this._head]; + delete this._storage1[this._head]; + delete this._storage2[this._head++]; + + return { st1: data1, st2: data2 }; + } +}; + + +/** + * Converts a Unicode string to a UTF-8 cleanly encoded string. + * + * @param {String} unicode + * Browser's native string encoding. + * @return {String} + * UTF-8 encoded string (8-bit characters only). + */ +var to8 = firefox_boost ? mozTo8 : function (unicode) { + return unescape(encodeURIComponent(unicode)); +}; + +// API command queueing +// All commands are executed in sequence, with no overlap +// FIXME: show user warning after backoff > 1000 + +var apixs = []; + +function api_reset() { + "use strict"; + + // user account API interface + api_init(0, 'cs'); + + // folder link API interface + api_init(1, 'cs'); + + // active view's SC interface (chunked mode) + api_init(2, 'sc', { '{[a{' : sc_packet, // SC command + '{[a{{t[f{' : sc_node, // SC node + '{[a{{t[f2{': sc_node, // SC node (versioned) + '{' : sc_residue, // SC residue + '#' : api_esplit }); // numeric error code + + + // user account event notifications + api_init(3, 'sc'); + + // active view's initial tree fetch (chunked mode) + api_init(4, 'cs', { '[{[ok0{' : tree_ok0, // tree shareownerkey + '[{[f{' : tree_node, // tree node + '[{[f2{' : tree_node, // tree node (versioned) + '[' : tree_residue, // tree residue + '#' : api_esplit }); // numeric error code + + // WSC interface (chunked mode) + api_init(5, 'wsc', { + '{[a{': sc_packet, // SC command + '{[a{{t[f{': sc_node, // SC node + '{[a{{t[f2{': sc_node, // SC node (versioned) + '{': sc_residue, // SC residue + '#': api_esplit // numeric error code + }); + + // off band attribute requests (keys) for chat + api_init(6, 'cs'); + +} + +mBroadcaster.once('boot_done', api_reset); + +// a chunked request received a purely numerical response - handle it the usual way +function api_esplit(e) { + api_reqerror(this.q, e, false); +} + +function api_setsid(sid) { + "use strict"; + + if (sid !== false) { + watchdog.notify('setsid', sid); + + if (typeof dlmanager === 'object') { + + delay('overquota:retry', () => dlmanager._onOverQuotaAttemptRetry(sid)); + } + sid = 'sid=' + sid; + } + else { + sid = ''; + } + + apixs[0].sid = sid; + apixs[2].sid = sid; + apixs[3].sid = sid; + apixs[4].sid = sid; + apixs[5].sid = sid; + apixs[6].sid = sid; + + if (self.fetchStreamSupport && mega.requestStatusMonitor) { + mega.requestStatusMonitor.init(); + } +} + +function api_setfolder(h) { + "use strict"; + + h = 'n=' + h; + + if (u_sid) { + h += '&sid=' + u_sid; + } + + apixs[1].sid = h; + apixs[2].sid = h; + apixs[4].sid = h; + apixs[5].sid = h; +} + +function stopapi() { + "use strict"; + + if (typeof M === 'object' && $.len(M._apiReqInflight)) { + if (d) { + console.warn('Aborting in-flight API requests...', M._apiReqInflight); + } + + M._apiReqInflight = Object.create(null); + M._apiReqPollCache = Object.create(null); + } + + for (var i = apixs.length; i--;) { + api_cancel(apixs[i]); + apixs[i].cmdsQueue.clear(); + apixs[i].cmdsBuffer = []; + apixs[i].ctxsBuffer = []; + } +} + +function api_cancel(q) { + "use strict"; + + if (q) { + if (q.xhr) { + // setting the "cancelled" flag ensures that + // subsequent onerror/onload/onprogress callbacks are ignored. + q.xhr.cancelled = true; + q.xhr.onprogress = q.xhr.onloadend = null; + if (q.xhr.abort) q.xhr.abort(); + q.xhr = false; + } + if (q.timer) { + clearTimeout(q.timer); + } + } +} + +function api_init(channel, service, split) { + "use strict"; + + if (apixs[channel]) { + api_cancel(apixs[channel]); + } + + apixs[channel] = { + c: channel, // channel + cmdsQueue: new ApiQueue(), // queued executing commands + contexts + cmdsBuffer: [], // pulled cmds from queue (under processing) + ctxsBuffer: [], // pulled ctxs from queue + i: 0, // currently executing buffer + seqno: -Math.floor(Math.random() * 0x100000000), // unique request start ID + xhr: false, // channel XMLHttpRequest + timer: false, // timer for exponential backoff + failhandler: api_reqfailed, // request-level error handler + backoff: 0, // timer backoff + service: service, // base URI component + sid: '', // sid URI component (optional) + split: split, // associated JSON splitter rules, presence triggers progressive/chunked mode + splitter: false, // JSONSplitter instance implementing .split + rawreq: false, + setimmediate: false + }; +} + + +/** + * queue request on API channel + * @param {Object} request request object to be sent to API + * @param {Object} context context object to be returned with response, has 'callback' func to be called + * @param {Number} channel optional - channel number to use (default =0) + */ +function api_req(request, context, channel) { + "use strict"; + + if (channel === undefined) { + channel = 0; + } + + if (d) console.debug("API request on " + channel + ": " + JSON.stringify(request)); + + if (context === undefined) { + context = Object.create(null); + } + + var q = apixs[channel]; + + q.cmdsQueue.enqueue(request, context); + + if (!q.setimmediate) { + q.setimmediate = setTimeout(api_proc, 0, q); + } +} + +// indicates whether this is a Firefox supporting the moz-chunked-* +// responseType or a Chrome derivative supporting the fetch API +// values: unknown: -1, no: 0, moz-chunked: 1, fetch: 2 +// FIXME: check for fetch on !Firefox, not just on Chrome +var chunked_method = window.chrome ? (self.fetch ? 2 : 0) : -1; + +if (typeof Uint8Array.prototype.indexOf !== 'function' || is_firefox_web_ext) { + if (d) { + console.debug('No chunked method on this browser: ' + ua); + } + chunked_method = 0; +} + +// this kludge emulates moz-chunked-arraybuffer with XHR-style callbacks +async function chunkedfetch(xhr, uri, body) { + 'use strict'; + + let signal; + if (typeof AbortController !== 'undefined') { + const controller = new AbortController(); + xhr.abort = async() => controller.abort(); + signal = controller.signal; + } + const evt = {loaded: 0}; + const highWaterMark = BACKPRESSURE_HIGHWATERMARK; + const response = await fetch(uri, {method: body ? 'POST' : 'GET', body, signal}); + + xhr.status = response.status; + xhr.totalBytes = response.headers.get('Original-Content-Length') | 0; + + if (typeof WritableStream !== 'undefined' && mega.shouldApplyNetworkBackPressure(xhr.totalBytes)) { + const queueingStrategy = + typeof ByteLengthQueuingStrategy !== 'undefined' + && 'highWaterMark' in ByteLengthQueuingStrategy.prototype + && new ByteLengthQueuingStrategy({highWaterMark}); + + return response.body.pipeTo(new WritableStream({ + async write(chunk) { + // console.warn('fetch/write', chunk.byteLength); + + xhr.response = chunk; + evt.loaded += chunk.byteLength; + xhr.onprogress(evt); + + while (decWorkerPool.busy || fmdb && fmdb.busy) { + if (d) { + console.info('fetch/backpressure (%d%%)', evt.loaded * 100 / xhr.totalBytes); + } + // apply backpressure + await sleep(BACKPRESSURE_WAIT_TIME); + } + }, + close() { + xhr.response = null; + console.debug('fetch/close'); + }, + abort(ex) { + xhr.response = null; + console.error('fetch/abort', ex); + } + }, queueingStrategy)); + } + + const reader = response.body.getReader(); + while (true) { + const {value, done} = await reader.read(); + + if (done) { + break; + } + + // feed received chunk to JSONSplitter via .onprogress() + xhr.response = value; + evt.loaded += value.length; + xhr.onprogress(evt); + } + + xhr.response = null; +} + +// send pending API request on channel q +function api_proc(q) { + "use strict"; + + if (q.setimmediate) { + clearTimeout(q.setimmediate); + q.setimmediate = false; + } + + if (q.cmdsQueue.size() === 0 || q.cmdsBuffer.length && q.cmdsBuffer.length > 0) { + return; + } + var currCmd = []; + var currCtx = []; + var element = q.cmdsQueue.dequeue(); // only first element alone + if (element) { + currCmd.push(element.st1); + currCtx.push(element.st2); + if (!element.st1.length) { // we will distinguish String + array of CMDs + element = q.cmdsQueue.dequeue(true); + while (element) { + currCmd.push(element.st1); + currCtx.push(element.st2); + element = q.cmdsQueue.dequeue(true); + } + } + } + + q.cmdsBuffer = currCmd; + q.ctxsBuffer = currCtx; + + + if (!q.xhr) { + // we need a real XHR only if we don't use fetch for this channel + q.xhr = (!q.split || chunked_method != 2) ? getxhr() : Object.create(null); + + q.xhr.q = q; + + // JSON splitters are keen on processing the data as soon as it arrives, + // so route .onprogress to it. + if (q.split) { + q.xhr.onprogress = function(evt) { + if (!this.cancelled) { + // caller wants progress updates? give caller progress updates! + if (this.q.ctxsBuffer[0] && this.q.ctxsBuffer[0].progress) { + var progressPercent = 0; + var bytes = evt.total || this.totalBytes; + + if (!bytes) { + // this may throw an exception if the header doesn't exist + try { + bytes = this.getResponseHeader('Original-Content-Length') | 0; + this.totalBytes = bytes; + } + catch (e) {} + } + + if (evt.loaded > 0 && bytes > 2) { + this.q.ctxsBuffer[0].progress(evt.loaded / bytes * 100); + } + } + + // update number of bytes received in .onprogress() for subsequent check + // in .onloadend() whether it contains more data + + var chunk = this.response; + + // is this an ArrayBuffer? turn into a Uint8Array + if (!(chunk.length >= 0)) chunk = new Uint8Array(chunk); + + if (!chunked_method) { + // unfortunately, we're receiving a growing response + this.q.received = chunk.length; + } + else { + // wonderful, we're receiving a chunked response + this.q.received += chunk.length; + } + + // send incoming live data to splitter + // for maximum flexibility, the splitter ctx will be the XHR + if (!this.q.splitter.chunkproc(chunk, chunk.length === this.totalBytes)) { + // a JSON syntax error occurred: hard reload + fm_fullreload(this.q, 'onerror JSON Syntax Error'); + } + } + }; + } + + q.xhr.onloadend = function onAPIProcXHRLoad(ev) { + if (!this.cancelled) { + var t; + var status = this.status; + + if (status == 200) { + var response = this.response; + + // is this residual data that hasn't gone to the splitter yet? + if (this.q.splitter) { + // we process the full response if additional bytes were received + // FIXME: in moz-chunked transfers, if onload() can contain chars beyond + // the last onprogress(), send .substr(this.q.received) instead! + // otherwise, we send false to indicate no further input + // in all cases, set the inputcomplete flag to catch incomplete API responses + if (!this.q.splitter.chunkproc((response && (response.length > this.q.received || typeof this.totalBytes === 'undefined')) ? response : false, true)) { + fm_fullreload(this.q, 'onload JSON Syntax Error'); + } + return; + } + + if (d) { + console.debug('API response:', response); + } + + try { + t = JSON.parse(response); + if (response[0] == '{') { + t = [t]; + } + + status = true; + } catch (e) { + // bogus response, try again + if (d) { + console.debug(`Bad JSON data in response: ${response}`); + } + t = EAGAIN; + } + } + else { + if (d) { + console.debug(`API server connection failed (error ${status})`); + } + t = ERATELIMIT; + } + + if (typeof t === 'object') { + var ctxs = this.q.ctxsBuffer; + var paywall; + for (var i = 0; i < ctxs.length; i++) { + var ctx = ctxs[i]; + + if (typeof ctx.callback === 'function') { + var res = t[i]; + + if (res && res.err < 0) { + // eslint-disable-next-line max-depth + if (d) { + console.debug('APIv2 Custom Error Detail', res, this.q.cmdsBuffer[i]); + } + ctx.v2APIError = res; + res = res.err; + } + if (res === EPAYWALL) { + paywall = true; + } + ctx.callback(res, ctx, this, t); + } + } + if (paywall) { + api_reqerror(this.q, EPAYWALL, status); + } + + // reset state for next request + api_ready(this.q); + api_proc(this.q); + } + else { + if (ev && ev.type === 'error') { + if (d) { + console.debug("API request error - retrying"); + } + } + api_reqerror(this.q, t, status); + } + } + }; + } + + if (q.rawreq === false) { + q.url = apipath + q.service + + '?id=' + (q.seqno++) + + '&' + q.sid + + (q.split ? '&ec' : '') // encoding: chunked if splitter attached + + mega.urlParams(); // additional parameters + + if (typeof q.cmdsBuffer[0] === 'string') { + q.url += '&' + q.cmdsBuffer[0]; + delete q.rawreq; + } + else { + if (q.cmdsBuffer.length === 1 && q.cmdsBuffer[0].length) { + q.url += '&bc=1'; + q.rawreq = JSON.stringify(q.cmdsBuffer[0]); + } + else { + q.rawreq = JSON.stringify(q.cmdsBuffer); + } + } + } + + api_send(q); +} + +function api_send(q) { + "use strict"; + + q.timer = false; + + if (q.xhr === false) { + if (d) { + console.debug(`API request aborted: ${q.rawreq} to ${q.url}`); + } + return; + } + + if (d) { + console.debug( + 'Sending API request: %s', q.rawreq || q.cmdsBuffer[0], + String(q.url).replace(/sid=[\w-]+/, 'sid=\u2026')); + } + + // reset number of bytes received and response size + q.received = 0; + delete q.xhr.totalBytes; + + q.xhr.cancelled = false; + + if (q.split && chunked_method == 2) { + // use chunked fetch with JSONSplitter input type Uint8Array + q.splitter = new JSONSplitter(q.split, q.xhr, true); + + chunkedfetch(q.xhr, q.url, q.rawreq) + .then(() => q.xhr && q.xhr.onloadend()) + .catch(ex => { + if (d) { + console.error('Fetch error.', ex); + } + + if (q.xhr) { + // at this point fake a partial data to trigger a retry.. + q.xhr.status = 206; + q.xhr.onloadend(); + } + }); + } + else { + // use legacy XHR API + q.xhr.open('POST', q.url, true); + + if (q.split) { + if (chunked_method) { + // FIXME: use Fetch API if more efficient than this + q.xhr.responseType = 'moz-chunked-arraybuffer'; + + // first try? record success + if (chunked_method < 0) { + chunked_method = q.xhr.responseType == 'moz-chunked-arraybuffer'; + } + } + + // at this point, chunked_method being logically true implies arraybuffer + q.splitter = new JSONSplitter(q.split, q.xhr, chunked_method); + } + + q.xhr.send(q.rawreq); + } +} + +function api_reqerror(q, e, status) { + 'use strict'; + var c = e | 0; + + if (typeof e === 'object' && e.err < 0) { + c = e.err | 0; + } + + if (c === EAGAIN || c === ERATELIMIT) { + // request failed - retry with exponential backoff + if (q.backoff) { + q.backoff = Math.min(600000, q.backoff << 1); + } + else { + q.backoff = 125+Math.floor(Math.random()*600); + } + + q.timer = setTimeout(api_send, q.backoff, q); + + c = EAGAIN; + } + else { + q.failhandler(q.c, e); + } + + if (mega.state & window.MEGAFLAG_LOADINGCLOUD) { + if (status === true && c === EAGAIN) { + mega.loadReport.EAGAINs++; + } + else if (status === 500) { + mega.loadReport.e500s++; + } + else { + mega.loadReport.errs++; + } + } +} + +function api_ready(q) { + q.rawreq = false; + q.backoff = 0; // request succeeded - reset backoff timer + q.cmdsBuffer = []; + q.ctxsBuffer = []; +} + +var apiFloorCap = 3000; + +function api_retry() { + "use strict"; + + for (var i = apixs.length; i--; ) { + if (apixs[i].timer && apixs[i].backoff > apiFloorCap) { + clearTimeout(apixs[i].timer); + apixs[i].backoff = apiFloorCap; + apixs[i].timer = setTimeout(api_send, apiFloorCap, apixs[i]); + } + } +} + +function api_reqfailed(channel, error) { + 'use strict'; + + var e = error | 0; + var c = channel | 0; + if (d) { + console.error('API req failed. Channel=' + c + ' Error: ', e); + } + if (typeof error === 'object' && error.err < 0) { + e = error.err | 0; + } + + // does this failure belong to a folder link, but not on the SC channel? + if (apixs[c].sid[0] === 'n' && c !== 2) { + // yes: handle as a failed folder link access + return folderreqerr(c, error); + } + + if (e === ESID) { + u_logout(true); + Soon(function() { + showToast('clipboard', l[19]); + }); + loadingInitDialog.hide('force'); + if (page !== 'download') { + loadSubPage('login'); + } + } + else if ((c === 2 || c === 5) && e === ETOOMANY) { + // too many pending SC requests - reload from scratch + fm_fullreload(this.q, 'ETOOMANY'); + } + // if suspended account + else if (e === EBLOCKED) { + var queue = apixs[c]; + queue.rawreq = false; + queue.cmdsQueue.clear(); + queue.cmdsBuffer = []; + queue.ctxsBuffer = []; + queue.setimmediate = false; + + api_req({ a: 'whyamiblocked' }, { + callback: function whyAmIBlocked(reasonCode) { + var setLogOutOnNavigation = function() { + onIdle(function() { + mBroadcaster.once('pagechange', function() { + u_logout(); + location.reload(true); + }); + }); + window.doUnloadLogOut = 0x9001; + return false; + }; + + // On clicking OK, log the user out and redirect to contact page + loadingDialog.hide(); + + var reasonText = ''; + var dialogTitle = l[17768];// Terminated account + + if (reasonCode === 200) { + dialogTitle = l[6789];// Suspended account + reasonText = l[17741];// Your account has been suspended due to multiple breaches of Mega's Terms.. + } + else if (reasonCode === 300) { + reasonText = l[17740];// Your account was terminated due to breach of Mega's Terms of Service... + } + else if (reasonCode === 400) { + reasonText = l[19748];// Your account is disabled by administrator + } + else if (reasonCode === 401) { + reasonText = l[20816];// Your account is deleted (business user) + } + else if (reasonCode === 500) { + + // Handle SMS verification for suspended account + if (is_mobile) { + loadSubPage('sms/add-phone-suspended'); + } + else { + sms.phoneInput.init(true); + } + + // Allow user to escape from SMS verification dialog in order to login a different account. + return setLogOutOnNavigation(); + } + else if (reasonCode === 700) { + var to = String(page).startsWith('emailverify') && 'login-to-account'; + security.showVerifyEmailDialog(to); + + // Allow user to escape from Email verification dialog in order to login a different account. + return setLogOutOnNavigation(); + } + else { + // Unknown reasonCode + reasonText = l[17740]; // Your account was terminated due to breach of Mega's Terms of Service... + } + + // Log the user out for all scenarios except SMS required (500) + u_logout(true); + + // if fm-overlay click handler was initialized, we remove the handler to prevent dialog skip + $('.fm-dialog-overlay').off('click.fm'); + if (is_mobile) { + parsepage(pages['mobile']); + } + msgDialog('warninga', dialogTitle, + reasonText, + false, + function () { + var redirectUrl = getAppBaseUrl() + '#contact'; + window.location.replace(redirectUrl); + } + ); + } + }); + } + else if (e === EPAYWALL) { + if (window.M) { + if (M.account && u_attr && !u_attr.uspw) { + M.account = null; + } + if (window.loadingDialog) { + loadingDialog.hide(); + } + M.showOverStorageQuota(e); + } + } + else { + api_reqerror(apixs[c], EAGAIN, 0); + } +} + +var failxhr; +var failtime = 0; + +function api_reportfailure(hostname, callback) { + if (!hostname) { + return Soon(callback); + } + + var t = new Date().getTime(); + + if (t - failtime < 60000) { + return; + } + failtime = t; + + if (failxhr) { + failxhr.abort(); + } + + failxhr = getxhr(); + failxhr.open('POST', apipath + 'pf?h', true); + failxhr.callback = callback; + + failxhr.onload = function () { + if (this.status === 200) { + failxhr.callback(); + } + }; + + failxhr.send(hostname); +} + +var waiturl; +var waitxhr; +var waitbackoff = 125; +var waittimeout; +var waitbegin; +var waitid = 0; +var cmsNotifHandler = localStorage.cmsNotificationID || 'Nc4AFJZK'; + +function stopsc() { + "use strict"; + + if (waitxhr && waitxhr.readyState !== waitxhr.DONE) { + waitxhr.abort(); + waitxhr = false; + } + + if (waittimeout) { + delay.cancel(waittimeout); + waittimeout = false; + } +} + +// if set, further sn updates are disallowed (the local state has become invalid) +function setsn(sn) { + "use strict"; + + // update sn in DB, triggering a "commit" of the current "transaction" + if (fmdb) { + attribCache.flush(); + fmdb.add('_sn', { i : 1, d : sn }); + } +} + +// are we processing historical SC commands? +var initialscfetch; + +// last step of the streamed SC response processing +function sc_residue(sc) { + "use strict"; + + if (sc.sn) { + // enqueue new sn + if (initialscfetch || currsn !== sc.sn || scqhead !== scqtail) { + currsn = sc.sn; + scq[scqhead++] = [{a: '_sn', sn: currsn}]; + resumesc(); + } + + if (initialscfetch) { + // we have concluded the post-load SC fetch, as we have now + // run out of new actionpackets: show filemanager! + scq[scqhead++] = [{ a: '_fm' }]; + initialscfetch = false; + resumesc(); + } + + // we're done, wait for more + if (sc.w) { + waiturl = sc.w + '?' + apixs[5].sid + '&sn=' + currsn; + } + else if (!waiturl) { + console.error("Strange error, we dont know WSC url and we didnt get it"); + waitbackoff = Math.min(9e3, waitbackoff << 1); + waittimeout = setTimeout(getsc, waitbackoff, true); + return; + } + waittimeout = delay('reinit:wsc', waitsc, waitbackoff); + + if ((mega.state & window.MEGAFLAG_LOADINGCLOUD) && !mega.loadReport.recvAPs) { + mega.loadReport.recvAPs = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + } + } + else { + // malformed SC response - take the conservative route and reload fully + // FIXME: add one single retry if !sscount: Clear scq, clear worker state, + // then reissue getsc() (difficult to get right - be cautious) + return fm_fullreload(null, 'malformed SC response'); + } + + // (mandatory steps at the conclusion of a successful split response) + if (this.q) { + api_ready(this.q); + api_proc(this.q); + } +} + +// getsc() serialisation (getsc() can be called anytime from anywhere if +// someone thinks that it is beneficial!) +var gettingsc; + +// request new actionpackets and stream them to sc_packet() as they come in +// nodes in t packets are streamed to sc_node() +function getsc(force) { + "use strict"; + + if (force) { + gettingsc = true; + + if (waitxhr) { + waitxhr.abort(); + } + + api_cancel(apixs[5]); // retire existing XHR that may still be completing the request + if (currsn) { + api_ready(apixs[5]); + api_req('sn=' + currsn, {}, 5); + + if (window.loadingInitDialog.progress) { + window.loadingInitDialog.step3(loadfm.fromapi ? 40 : 1, 55); + } + + if (mega.state & window.MEGAFLAG_LOADINGCLOUD) { + mega.loadReport.scSent = Date.now(); + } + } + else { + if (d) { + console.error('Get WSC is called but without SN, it\'s a bug... please trace'); + } + eventlog(99737); + } + } +} + +function waitsc() { + "use strict"; + + var MAX_WAIT = 40e3; + var newid = ++waitid; + + stopsc(); + + if (!waitxhr) { + waitxhr = getxhr(); + } + waitxhr.waitid = newid; + + waittimeout = delay('reinit:wsc', waitsc, MAX_WAIT); + + waitxhr.onloadend = function(ev) { + if (this.waitid === waitid) { + if (this.status !== 200) { + if (d) { + console.info('waitsc(%s:%s)', this.status, ev.type, ev); + } + + waitbackoff = Math.min(MAX_WAIT, waitbackoff << 1); + waittimeout = delay('reinit:wsc', waitsc, waitbackoff); + } + else { + // Increase backoff if we do keep receiving packets is rapid succession, so that we maintain + // smaller number of connections to process more data at once - backoff up to 4 seconds. + stopsc(); + if (Date.now() - waitbegin < 1000) { + waitbackoff = Math.min(4e3, waitbackoff << 1); + } + else { + waitbackoff = 250; + } + + var delieveredResponse = this.response; + if (delieveredResponse === '0') { + // clearTimeout(waittimeout); mo need for clearing, we stopped + // immediately re-connect. + waittimeout = delay('reinit:wsc', waitsc, 1); + } + else if ($.isNumeric(delieveredResponse)) { + if (delieveredResponse == ETOOMANY) { + // WSC is stopped at the beginning. + fm_fullreload(null, 'ETOOMANY'); + } + else if (delieveredResponse == EAGAIN || delieveredResponse == ERATELIMIT) { + // WSC is stopped at the beginning. + waittimeout = delay('reinit:wsc', waitsc, waitbackoff); + } + else if (delieveredResponse == EBLOCKED) { + // == because API response will be in a string + api_reqfailed(5, EBLOCKED); + } + } + else if (!apixs[5].split) { + console.error('WSC has no splitter !!!!'); + } + else { + var wscSplitter = new JSONSplitter(apixs[5].split, waitxhr, false); + if (!wscSplitter.chunkproc(delieveredResponse, true)) { + fm_fullreload(null, 'onload JSON Syntax Error'); + } + } + } + } + }; + + waitxhr.onprogress = function() { + waittimeout = delay('reinit:wsc', waitsc, MAX_WAIT); + }; + + waitbegin = Date.now(); + waitxhr.open('POST', waiturl, true); + waitxhr.send(); +} +mBroadcaster.once('startMega', function() { + 'use strict'; + + window.addEventListener('online', function(ev) { + if (d) { + console.info(ev); + } + api_retry(); + + if (waiturl) { + waitsc(); + } + }); + + var invisibleTime; + document.addEventListener('visibilitychange', function(ev) { + + if (document.hidden) { + invisibleTime = Date.now(); + } + else { + invisibleTime = Date.now() - invisibleTime; + + if (mega.loadReport && !mega.loadReport.sent) { + if (!mega.loadReport.invisibleTime) { + mega.loadReport.invisibleTime = 0; + } + mega.loadReport.invisibleTime += invisibleTime; + } + } + + mBroadcaster.sendMessage('visibilitychange:' + Boolean(document.hidden)); + }); +}); + +function api_create_u_k() { + u_k = Array(4); // static master key, will be stored at the server side encrypted with the master pw + + for (var i = 4; i--;) { + u_k[i] = rand(0x100000000); + } +} + +// If the user triggers an action that requires an account, but hasn't logged in, +// we create an anonymous preliminary account. Returns userhandle and passwordkey for permanent storage. +function api_createuser(ctx, invitecode, invitename, uh) { + var logger = MegaLogger.getLogger('crypt'); + var i; + var ssc = Array(4); // session self challenge, will be used to verify password + var req, res; + + if (!ctx.passwordkey) { + ctx.passwordkey = Array(4); + for (i = 4; i--;) { + ctx.passwordkey[i] = rand(0x100000000); + } + } + + if (!u_k) { + api_create_u_k(); + } + + for (i = 4; i--;) { + ssc[i] = rand(0x100000000); + } + + logger.debug("api_createuser - masterkey: " + u_k + " passwordkey: " + ctx.passwordkey); + + // in business sub-users API team decided to hack "UP" command to include "UC2" new arguments. + // so now. we will check if this is a business sub-user --> we will add extra arguments to "UP" (crv,hak,v) + + var doApiRequest = function (request) { + if (mega.affid) { + req.aff = mega.affid; + } + logger.debug("Storing key: " + request.k); + + api_req(request, ctx); + watchdog.notify('createuser'); + }; + + req = { + a: 'up', + k: a32_to_base64(encrypt_key(new sjcl.cipher.aes(ctx.passwordkey), u_k)), + ts: base64urlencode(a32_to_str(ssc) + a32_to_str(encrypt_key(new sjcl.cipher.aes(u_k), ssc))) + }; + + // invite code usage is obsolete. it's only used in case of business sub-users + // therefore, if it exists --> we are registering a business sub-user + if (invitecode) { + req.ic = invitecode; + req.name = invitename; + + security.deriveKeysFromPassword(ctx.businessUser, u_k, + function (clientRandomValueBytes, encryptedMasterKeyArray32, + hashedAuthenticationKeyBytes, derivedAuthenticationKeyBytes) { + req.crv = ab_to_base64(clientRandomValueBytes); + req.hak = ab_to_base64(hashedAuthenticationKeyBytes); + req.v = 2; + req.k = a32_to_base64(encryptedMasterKeyArray32); + ctx.uh = ab_to_base64(derivedAuthenticationKeyBytes); + + doApiRequest(req); + } + ); + + } + else { + doApiRequest(req); + } + +} + +function api_checkconfirmcode(ctx, c) { + res = api_req({ + a: 'uc', + c: c + }, ctx); +} + +/* jshint -W098 */ // It is used in another file +function api_resetuser(ctx, emailCode, email, password) { + + // start fresh account + api_create_u_k(); + + var pw_aes = new sjcl.cipher.aes(prepare_key_pw(password)); + + var ssc = Array(4); + for (var i = 4; i--;) { + ssc[i] = rand(0x100000000); + } + + api_req({ + a: 'erx', + c: emailCode, + x: a32_to_base64(encrypt_key(pw_aes, u_k)), + y: stringhash(email.toLowerCase(), pw_aes), + z: base64urlencode(a32_to_str(ssc) + a32_to_str(encrypt_key(new sjcl.cipher.aes(u_k), ssc))) + }, ctx); +} + +function api_resetkeykey(ctx, code, key, email, pw) { + + 'use strict'; + + ctx.c = code; + ctx.email = email; + ctx.k = key; + ctx.pw = pw; + ctx.callback = api_resetkeykey2; + + api_req({ + a: 'erx', + r: 'gk', + c: code + }, ctx); +} +/* jshint +W098 */ + +function api_resetkeykey2(res, ctx) { + try { + api_resetkeykey3(res, ctx); + } + catch (ex) { + ctx.result(EKEY); + } +} + +function api_resetkeykey3(res, ctx) { + + 'use strict'; + + if (typeof res === 'string') { + + if (!verifyPrivateRsaKeyDecryption(res, ctx.k)) { + ctx.result(EKEY); + } + else if (ctx.email && ctx.pw) { + var pw_aes = new sjcl.cipher.aes(prepare_key_pw(ctx.pw)); + + ctx.callback = ctx.result; + api_req({ + a: 'erx', + r: 'sk', + c: ctx.c, + x: a32_to_base64(encrypt_key(pw_aes, ctx.k)), + y: stringhash(ctx.email.toLowerCase(), pw_aes) + }, ctx); + } + else { + ctx.result(0); + } + } + else { + ctx.result(res); + } +} + +/** + * Verify that the Private RSA key was decrypted successfully by the Master/Recovery Key + * @param {String} encryptedPrivateRsaKeyBase64 The encrypted Private RSA key as a Base64 string + * @param {Array} masterKeyArray32 The Master/Recovery Key + * @returns {Boolean} Returns true if the decryption succeeded, false if it failed + */ +function verifyPrivateRsaKeyDecryption(encryptedPrivateRsaKeyBase64, masterKeyArray32) { + + 'use strict'; + + try { + // Decrypt the RSA key + var privateRsaKeyArray32 = base64_to_a32(encryptedPrivateRsaKeyBase64); + var cipherObject = new sjcl.cipher.aes(masterKeyArray32); + var decryptedPrivateRsaKey = decrypt_key(cipherObject, privateRsaKeyArray32); + var privateRsaKeyStr = a32_to_str(decryptedPrivateRsaKey); + + // Verify the integrity of the decrypted private key + for (var i = 0; i < 4; i++) { + var l = ((privateRsaKeyStr.charCodeAt(0) * 256 + privateRsaKeyStr.charCodeAt(1) + 7) >> 3) + 2; + + if (privateRsaKeyStr.substr(0, l).length < 2) { + break; + } + privateRsaKeyStr = privateRsaKeyStr.substr(l); + } + + // If invalid + if (i !== 4 || privateRsaKeyStr.length >= 16) { + return false; + } + + return true; + } + catch (exception) { + return false; + } +} + +// We query the sid using the supplied user handle (or entered email address, if already attached) +// and check the supplied password key. +// Returns [decrypted master key,verified session ID(,RSA private key)] or false if API error or +// supplied information incorrect +function api_getsid(ctx, user, passwordkey, hash, pinCode) { + "use strict"; + + ctx.callback = api_getsid2; + ctx.passwordkey = passwordkey; + + // If previously blocked for too many login attempts, return early and show warning with time they can try again + if (api_getsid.etoomany + 3600000 > Date.now() || location.host === 'webcache.googleusercontent.com') { + return ctx.checkloginresult(ctx, ETOOMANY); + } + + // Setup the login request + var requestVars = { a: 'us', user: user, uh: hash }; + + // If the two-factor authentication code was entered by the user, add it to the request as well + if (pinCode !== null) { + requestVars.mfa = pinCode; + } + + api_req(requestVars, ctx); +} + +api_getsid.warning = function() { + var time = new Date(api_getsid.etoomany + 3780000).toLocaleTimeString(); + + msgDialog('warningb', l[882], l[8855].replace('%1', time)); +}; + +function api_getsid2(res, ctx) { + var t, k; + var r = false; + + // If the result is an error, pass that back to get an exact error + if (typeof res === 'number') { + ctx.checkloginresult(ctx, res); + return false; + } + else if (typeof res === 'object') { + var aes = new sjcl.cipher.aes(ctx.passwordkey); + + // decrypt master key + if (typeof res.k === 'string') { + k = base64_to_a32(res.k); + + if (k.length === 4) { + k = decrypt_key(aes, k); + + aes = new sjcl.cipher.aes(k); + + if (typeof res.tsid === 'string') { + t = base64urldecode(res.tsid); + if (a32_to_str(encrypt_key(aes, + str_to_a32(t.substr(0, 16)))) === t.substr(-16)) { + r = [k, res.tsid]; + } + } + else if (typeof res.u !== 'string' || res.u.length !== 11) { + + eventlog(99752, JSON.stringify([1, 1, res.u])); + + console.error("Incorrect user handle in the 'us' response", res.u); + + Soon(() => { + msgDialog('warninga', l[135], l[8853], res.u); + }); + + return false; + } + else if (typeof res.csid === 'string') { + let privk = null; + const errobj = {}; + const t = base64urldecode(res.csid); + + try { + privk = crypto_decodeprivkey(a32_to_str(decrypt_key(aes, base64_to_a32(res.privk))), errobj); + } + catch (ex) { + + eventlog(99752, JSON.stringify([1, 2, res.u, errobj, String(ex).split('\n')[0]])); + + console.error('Error decoding private RSA key! %o', errobj, ex); + + Soon(() => { + msgDialog('warninga', l[135], l[8853], JSON.stringify(errobj)); + }); + + return false; + } + + if (!privk) { + // Bad decryption of RSA is an indication that the password was wrong + console.error('RSA key decoding failed (%o)', errobj); + // eslint-disable-next-line max-depth + if ('pl' in errobj) { + eventlog(99752, JSON.stringify([1, 5, errobj])); + } + ctx.checkloginresult(ctx, false); + return false; + } + + // Decrypt the Session ID + var decryptedSessionId = crypto_rsadecrypt(t, privk); + + // Get the user handle from the decrypted Session ID (11 bytes starting at offset 16 bytes) + var sessionIdUserHandle = decryptedSessionId.substring(16, 27); + + // Check that the decrypted sid and res.u aren't shorter than usual before making the comparison. + // Otherwise, we could construct an oracle based on shortened csids with single-byte user handles. + if (decryptedSessionId.length !== 255) { + + eventlog(99752, JSON.stringify([1, 3, res.u, decryptedSessionId.length])); + + console.error("Incorrect length of Session ID", decryptedSessionId.length, sessionIdUserHandle); + + Soon(() => { + msgDialog('warninga', l[135], l[8853], decryptedSessionId.length); + }); + + return false; + } + + // Check the user handle included in the Session ID matches the one sent in the 'us' response + if (sessionIdUserHandle !== res.u) { + + eventlog(99752, JSON.stringify([1, 4, res.u, sessionIdUserHandle])); + + console.error( + "User handle in Session ID did not match user handle from the 'us' request", + res.u, sessionIdUserHandle + ); + + Soon(() => { + msgDialog('warninga', l[135], l[8853], `${res.u} / ${sessionIdUserHandle}`); + }); + + return false; + } + + // TODO: check remaining padding for added early wrong password detection likelihood + r = [k, base64urlencode(decryptedSessionId.substr(0, 43)), privk]; + } + } + } + } + + // emailchange namespace exists, that means the user + // attempted to verify their new email address without a session + // therefore we showed them the login dialog. Now we call `emailchange.verify` + // so the email verification can continue as expected. + if (r && typeof emailchange === 'object') { + emailchange.verify(new sjcl.cipher.aes(ctx.passwordkey), { k1: res.k, k2: k }); + } + + ctx.result(ctx, r); +} + +// We call ug using the sid from setsid() and the user's master password to obtain the master key (and other credentials) +// Returns user credentials (.k being the decrypted master key) or false in case of an error. +function api_getuser(ctx) { + api_req({ + a: 'ug' + }, ctx); +} + +/** + * Send current node attributes to the API + * @param {Object} n Updated node + * @param {String} idtag mRandomToken + * @return {MegaPromise} + */ +function api_setattr(n, idtag) { + "use strict"; + + var promise = new MegaPromise(); + var logger = MegaLogger.getLogger('crypt'); + + var ctx = { + callback: function(res) { + if (res !== 0) { + logger.error('api_setattr', res); + promise.reject(res); + } + else { + promise.resolve(res); + } + } + }; + + if (!crypto_keyok(n)) { + logger.warn('Unable to set node attributes, invalid key on %s', n.h, n); + return MegaPromise.reject(EKEY); + } + + try { + var at = ab_to_base64(crypto_makeattr(n)); + const ops = {a: 'a', n: n.h, at: at, i: idtag}; + + if (M.getNodeRoot(n.h) === M.InboxID) { + mega.backupCenter.ackVaultWriteAccess(n.h, ops); + } + + logger.debug('Setting node attributes for "%s"...', n.h, idtag); + + api_req(ops, ctx); + + if (idtag) { + M.scAckQueue[idtag] = Date.now(); + } + } + catch (ex) { + logger.error(ex); + promise.reject(ex); + } + + return promise; +} + +function stringhash(s, aes) { + var s32 = str_to_a32(s); + var h32 = [0, 0, 0, 0]; + var i; + + for (i = 0; i < s32.length; i++) { + h32[i & 3] ^= s32[i]; + } + + for (i = 16384; i--;) { + h32 = aes.encrypt(h32); + } + + return a32_to_base64([h32[0], h32[2]]); +} + +// Update user +// Can also be used to set keys and to confirm accounts (.c) +function api_updateuser(ctx, newuser) { + newuser.a = 'up'; + + if (mega.affid) { + newuser.aff = mega.affid; + } + + api_req(newuser, ctx); +} + +var u_pubkeys = Object.create(null); + +/** + * Query missing keys for the given users. + * + * @return {MegaPromise} + */ +function api_cachepubkeys(users) { + + var logger = MegaLogger.getLogger('crypt'); + var u = []; + var i; + + for (i = users.length; i--;) { + if (users[i] !== 'EXP' && !u_pubkeys[users[i]]) { + u.push(users[i]); + } + } + + // Fire off the requests and track them. + var keyPromises = []; + for (i = u.length; i--;) { + keyPromises.push(crypt.getPubRSA(u[i])); + } + + var gotPubRSAForEveryone = function() { + for (i = u.length; i--;) { + if (!u_pubkeys[u[i]]) { + return false; + } + } + return true; + }; + var promise = new MegaPromise(); + + // Make a promise for the bunch of them, and define settlement handlers. + MegaPromise.allDone(keyPromises) + .always(function __getKeysDone() { + if (gotPubRSAForEveryone()) { + logger.debug('Cached RSA pub keys for users ' + JSON.stringify(u)); + promise.resolve.apply(promise, arguments); + } + else { + logger.warn('Failed to cache RSA pub keys for users' + JSON.stringify(u), arguments); + promise.reject.apply(promise, arguments); + } + }); + + return promise; +} + +/** + * Encrypts a cleartext data string to a contact. + * + * @param {String} user + * User handle of the contact. + * @param {String} data + * Clear text to encrypt. + * @return {String|Boolean} + * Encrypted cipher text, or `false` in case of unavailability of the RSA + * public key (needs to be obtained/cached beforehand). + */ +function encryptto(user, data) { + 'use strict'; + var pubkey; + + if ((pubkey = u_pubkeys[user])) { + return crypto_rsaencrypt(data, pubkey, -0x4D454741); + } + + return false; +} + +/** + * Add/cancel share(s) to a set of users or email addresses + * targets is an array of {u,r} - if no r given, cancel share + * If no sharekey known, tentatively generates one and encrypts + * everything to it. In case of a mismatch, the API call returns + * an error, and the whole operation gets repeated (exceedingly + * rare race condition). + * + * @param {String} node + * Selected node id. + * @param {Array} targets + * List of user email or user handle and access permission. + * @param {Array} sharenodes + * Holds complete directory tree starting from given node. + * @returns {MegaPromise} + */ +function api_setshare(node, targets, sharenodes) { + + var masterPromise = new MegaPromise(); + + // cache all targets' public keys + var targetsPubKeys = []; + + for (var i = targets.length; i--;) { + targetsPubKeys.push(targets[i].u); + } + + var cachePromise = api_cachepubkeys(targetsPubKeys); + cachePromise.done(function _cacheDone() { + var setSharePromise = api_setshare1({ node: node, targets: targets, sharenodes: sharenodes }); + masterPromise.linkDoneAndFailTo(setSharePromise); + }); + masterPromise.linkFailTo(cachePromise); + + return masterPromise; +} + +/** + * Actually enacts the setting/cancelling of shares. + * + * @param {Object} ctx + * Context for API commands. + * @param {Array} params + * Additional parameters. + * @returns {MegaPromise} + */ +function api_setshare1(ctx, params) { + var logger = MegaLogger.getLogger('crypt'); + var i, j, n, nk, sharekey, ssharekey; + var req, res; + var newkey = true; + var masterPromise = new MegaPromise(); + + req = { + a: 's2', + n: ctx.node, + s: ctx.targets, + i: requesti + }; + + if (params) { + logger.debug('api_setshare1.extend', params); + for (i in params) { + req[i] = params[i]; + } + } + + const users = new Set(); + for (i = ctx.targets.length; i--;) { + let {u} = ctx.targets[i]; + + if (u && u !== 'EXP') { + if (M.opc[u]) { + console.error('Check this, got an outgoing pending contact...', u, M.opc[u]); + u = M.opc[u].m; + } + users.add(u); + } + } + + for (i = req.s.length; i--;) { + if (typeof req.s[i].r !== 'undefined') { + // @todo if (mega.keyMgr.isTrusted(ctx.node)) { + if (mega.keyMgr.secure) { + newkey = mega.keyMgr.hasNewShareKey(ctx.node); + // dummy key/handleauth - FIXME: remove + req.ok = a32_to_base64([0, 0, 0, 0]); + req.ha = a32_to_base64([0, 0, 0, 0]); + break; + } + if (!req.ok) { + if (u_sharekeys[ctx.node]) { + sharekey = u_sharekeys[ctx.node][0]; + newkey = mega.keyMgr.hasNewShareKey(ctx.node); + } + else { + // we only need to generate a key if one or more shares are being added to a previously unshared node + sharekey = []; + for (j = 4; j--;) { + sharekey.push(rand(0x100000000)); + } + crypto_setsharekey(ctx.node, sharekey, true); + } + + req.ok = a32_to_base64(encrypt_key(u_k_aes, sharekey)); + req.ha = crypto_handleauth(ctx.node); + ssharekey = a32_to_str(sharekey); + } + } + } + + if (newkey) { + req.cr = crypto_makecr(ctx.sharenodes, [ctx.node], true); + } + + ctx.backoff = 97; + ctx.maxretry = 4; + ctx.ssharekey = ssharekey; + + // encrypt ssharekey to known users + for (i = req.s.length; i--;) { + if (!mega.keyMgr.secure && u_pubkeys[req.s[i].u]) { + req.s[i].k = base64urlencode(crypto_rsaencrypt(ssharekey, u_pubkeys[req.s[i].u])); + } + if (typeof req.s[i].m !== 'undefined') { + req.s[i].u = req.s[i].m; + } + + if (M.opc[req.s[i].u]) { + if (d) { + logger.warn(req.s[i].u + ' is an outgoing pending contact, fixing to email...', M.opc[req.s[i].u].m); + } + // the caller incorrectly passed a handle for a pending contact, so fixup.. + req.s[i].u = M.opc[req.s[i].u].m; + } + } + + ctx.req = req; + + /** Callback for API interactions. */ + ctx.callback = function (res, ctx) { + if (typeof res === 'object') { + masterPromise.resolve(res); + + /* sharekey clashes will be resolved via ^!keys + if (res.ok) { + logger.debug('Share key clash: Set returned key and try again.'); + ctx.req.ok = res.ok; + var k = decrypt_key(u_k_aes, base64_to_a32(res.ok)); + crypto_setsharekey(ctx.node, k); + ctx.req.ha = crypto_handleauth(ctx.node); + + var ssharekey = a32_to_str(k); + + for (var i = ctx.req.s.length; i--;) { + if (u_pubkeys[ctx.req.s[i].u]) { + ctx.req.s[i].k = base64urlencode(crypto_rsaencrypt(ssharekey, + u_pubkeys[ctx.req.s[i].u])); + } + } + logger.info('Retrying share operation.'); + api_req(ctx.req, ctx); + } + else { + logger.info('Share succeeded.'); + masterPromise.resolve(res); + } +*/ + } + else if (!--ctx.maxretry || res === EARGS) { + logger.error('Share operation failed.', res); + masterPromise.reject(res); + } + else { + logger.info('Retrying share operation...'); + + setTimeout(function() { + api_req(ctx.req, ctx); + }, ctx.backoff <<= 1); + } + }; + + logger.info('Invoking share operation.'); + + mega.keyMgr.sendShareKeys(ctx.node, [...users]) + .then(() => { + api_req(ctx.req, ctx); + }) + .catch(dump); // @todo api3, tell + + return masterPromise; +} + +function crypto_handleauth(h) { + return a32_to_base64(encrypt_key(u_k_aes, str_to_a32(h + h))); +} + +function crypto_keyok(n) { + "use strict"; + + return n && typeof n.k === 'object' && n.k.length >= (n.t ? 4 : 8); +} + +function crypto_encodepubkey(pubkey) { + var mlen = pubkey[0].length * 8, + elen = pubkey[1].length * 8; + + return String.fromCharCode(mlen / 256) + String.fromCharCode(mlen % 256) + pubkey[0] + + String.fromCharCode(elen / 256) + String.fromCharCode(elen % 256) + pubkey[1]; +} + +function crypto_decodepubkey(pubk) { + var pubkey = []; + + var keylen = pubk.charCodeAt(0) * 256 + pubk.charCodeAt(1); + + // decompose public key + for (var i = 0; i < 2; i++) { + if (pubk.length < 2) { + break; + } + + var l = (pubk.charCodeAt(0) * 256 + pubk.charCodeAt(1) + 7) >> 3; + if (l > pubk.length - 2) { + break; + } + + pubkey[i] = pubk.substr(2, l); + pubk = pubk.substr(l + 2); + } + + // check format + if (i !== 2 || pubk.length >= 16) { + return false; + } + + pubkey[2] = keylen; + + return pubkey; +} + +function crypto_encodeprivkey(privk) { + var plen = privk[3].length * 8, + qlen = privk[4].length * 8, + dlen = privk[2].length * 8, + ulen = privk[7].length * 8; + + var t = String.fromCharCode(qlen / 256) + String.fromCharCode(qlen % 256) + privk[4] + + String.fromCharCode(plen / 256) + String.fromCharCode(plen % 256) + privk[3] + + String.fromCharCode(dlen / 256) + String.fromCharCode(dlen % 256) + privk[2] + + String.fromCharCode(ulen / 256) + String.fromCharCode(ulen % 256) + privk[7]; + + while (t.length & 15) t += String.fromCharCode(rand(256)); + + return t; +} + +function crypto_encodeprivkey2(privk) { + 'use strict'; + const plen = privk[3].length * 8; + const qlen = privk[4].length * 8; + const dlen = privk[2].length * 8; + + return String.fromCharCode(qlen / 256) + String.fromCharCode(qlen % 256) + privk[4] + + String.fromCharCode(plen / 256) + String.fromCharCode(plen % 256) + privk[3] + + String.fromCharCode(dlen / 256) + String.fromCharCode(dlen % 256) + privk[2]; +} + +/** + * Decode private RSA key. + * @param {String} privk the key to decode. + * @param {Object} [errobj] Optional object to put the details of a failure, if any + * @returns {Array|Boolean} decoded private key, or boolean(false) if failure. + */ +function crypto_decodeprivkey(privk, errobj) { + 'use strict'; + let i, l; + let privkey = []; + + // decompose private key + for (i = 0; i < 4; i++) { + if (privk.length < 2) { + break; + } + + l = (privk.charCodeAt(0) * 256 + privk.charCodeAt(1) + 7) >> 3; + if (l > privk.length - 2) { + break; + } + + privkey[i] = new asmCrypto.BigNumber(privk.substr(2, l)); + privk = privk.substr(l + 2); + } + + // check format + if (i !== 4 || privk.length >= 16) { + return false; + } + + // TODO: check remaining padding for added early wrong password detection likelihood + + // restore privkey components via the known ones + const q = privkey[0]; + const p = privkey[1]; + const d = privkey[2]; + const u = privkey[3]; + const q1 = q.subtract(1); + const p1 = p.subtract(1); + const m = new asmCrypto.Modulus(p.multiply(q)); + const e = new asmCrypto.Modulus(p1.multiply(q1)).inverse(d); + const dp = d.divide(p1).remainder; + const dq = d.divide(q1).remainder; + + // Calculate inverse modulo of q under p + const inv = new asmCrypto.Modulus(p).inverse(q); + + // Convert Uint32Arrays to hex for comparison + const hexInv = asmCrypto.bytes_to_hex(inv.toBytes()).replace(/^0+/, ''); + const hexU = asmCrypto.bytes_to_hex(u.toBytes()).replace(/^0+/, ''); + + // Detect private key blob corruption - prevent API-exploitable RSA oracle requiring 500+ logins. + // Ensure the bit length being at least 1000 and that u is indeed the inverse modulo of q under p. + if (!(p.bitLength > 1000 && + q.bitLength > 1000 && + d.bitLength > 2000 && + u.bitLength > 1000 && + hexU === hexInv)) { + return false; + } + + privkey = [m, e, d, p, q, dp, dq, u]; + for (i = 0; i < privkey.length; i++) { + privkey[i] = asmCrypto.bytes_to_string(privkey[i].toBytes()); + } + + return privkey; +} + +/** + * Decode private RSA key (pqd format). + * @param {Uint8Array} privk the key to decode. + * @param {Object} [errobj] Optional object to put the details of a failure, if any + * @returns {Array|Boolean} decoded private key, or boolean(false) if failure. + */ +function crypto_decodeprivkey2(privk) { + 'use strict'; + let i, l; + let pos = 0; + let privkey = []; + + // decompose private key + for (i = 0; i < 3; i++) { + if (pos + 2 > privk.length) { + return false; + } + + l = privk[pos] * 256 + (privk[pos + 1] + 7) >> 3; + pos += 2; + + if (pos + l > privk.length) { + return false; + } + + privkey[i] = new asmCrypto.BigNumber(privk.slice(pos, pos + l)); + pos += l; + } + + // restore privkey components via the known ones + const q = privkey[0]; + const p = privkey[1]; + const d = privkey[2]; + const q1 = q.subtract(1); + const p1 = p.subtract(1); + const m = new asmCrypto.Modulus(p.multiply(q)); + const e = new asmCrypto.Modulus(p1.multiply(q1)).inverse(d); + const dp = d.divide(p1).remainder; + const dq = d.divide(q1).remainder; + + // Calculate inverse modulo of q under p + const u = new asmCrypto.Modulus(p).inverse(q); + + privkey = [m, e, d, p, q, dp, dq, u]; + for (i = 0; i < privkey.length; i++) { + privkey[i] = asmCrypto.bytes_to_string(privkey[i].toBytes()); + } + + return privkey; +} + + +/** + * Encrypts a cleartext string with the supplied public key. + * + * @param {String} cleartext + * Clear text to encrypt. + * @param {Array} pubkey + * Public encryption key (in the usual internal format used). + * @return {String} + * Encrypted cipher text. + */ +function crypto_rsaencrypt(cleartext, pubkey, bf) { + 'use strict'; + + if (bf !== -0x4d454741 && mega.keyMgr.secure) { + return ''; + } + + // random padding up to pubkey's byte length minus 2 + for (var i = (pubkey[0].length) - 2 - cleartext.length; i-- > 0;) { + cleartext += String.fromCharCode(rand(256)); + } + + var ciphertext = asmCrypto.bytes_to_string(asmCrypto.RSA_RAW.encrypt(cleartext, pubkey)); + + var clen = ciphertext.length * 8; + ciphertext = String.fromCharCode(clen / 256) + String.fromCharCode(clen % 256) + ciphertext; + + return ciphertext; +} + +var storedattr = Object.create(null); +var faxhrs = Object.create(null); +var faxhrfail = Object.create(null); +var faxhrlastgood = Object.create(null); + +// data.byteLength & 15 must be 0 +function api_storefileattr(id, type, key, data, ctx, ph) { + var handle = typeof ctx === 'string' && ctx; + + if (typeof ctx !== 'object') { + if (!storedattr[id]) { + storedattr[id] = Object.create(null); + } + + if (key) { + data = asmCrypto.AES_CBC.encrypt(data, a32_to_ab(key), false); + } + + ctx = { + id: id, + ph: ph, + type: type, + data: data, + handle: handle, + callback: api_fareq, + startTime: Date.now() + }; + } + + var req = { + a: 'ufa', + s: ctx.data.byteLength, + ssl: use_ssl + }; + + if (M.d[ctx.handle] && M.getNodeRights(ctx.handle) > 1) { + req.h = handle; + } + else if (ctx.ph) { + req.ph = ctx.ph; + } + + api_req(req, ctx, pfid ? 1 : 0); +} + +async function api_getfileattr(fa, type, procfa, errfa) { + 'use strict'; + let r; + const p = Object.create(null); + const h = Object.create(null); + const k = Object.create(null); + const plain = Object.create(null); + let cache = nop; + + type |= 0; + if (type in fa_handler.lru) { + const lru = await fa_handler.lru[type]; + if (!lru.error) { + const send = async(h, ab) => procfa({cached: 1}, h, ab); + const found = await lru.bulkGet(Object.keys(fa)).catch(dump) || false; + + for (const h in found) { + fa[h] = null; + send(h, found[h]).catch(dump); + } + cache = (h, buf) => lru.set(h, buf).catch(dump); + } + } + + const re = new RegExp(`(\\d+):${type}\\*([\\w-]+)`); + for (const n in fa) { + if (fa[n] && (r = re.exec(fa[n].fa))) { + const t = base64urldecode(r[2]); + if (t.length === 8) { + if (!h[t]) { + h[t] = n; + k[t] = fa[n].k; + } + + if (!p[r[1]]) { + p[r[1]] = t; + } + else { + p[r[1]] += t; + } + plain[r[1]] = !!fa[n].plaintext; + } + } + else if (fa[n] !== null && typeof errfa === 'function') { + queueMicrotask(errfa.bind(null, n)); + } + } + + // eslint-disable-next-line guard-for-in + for (const n in p) { + const ctx = { + callback: api_fareq, + type: type, + p: p[n], + h: h, + k: k, + procfa: (ctx, h, buf) => { + if (!buf || !buf.byteLength) { + buf = 0xDEAD; + } + else { + cache(h, buf); + } + return procfa(ctx, h, buf); + }, + errfa: errfa, + startTime: Date.now(), + plaintext: plain[n] + }; + api_req({ + a: 'ufa', + fah: base64urlencode(ctx.p.substr(0, 8)), + ssl: use_ssl, + r: +fa_handler.chunked + }, ctx); + } +} + +// @todo refactor whole fa-handler from scratch! +lazy(fa_handler, 'lru', () => { + 'use strict'; + const lru = Object.create(null); + lazy(lru, 0, () => LRUMegaDexie.create('fa-handler.0', 1e4)); + lazy(lru, 1, () => LRUMegaDexie.create('fa-handler.1', 1e3)); + return lru; +}); + +function fa_handler(xhr, ctx) { + var logger = d > 1 && MegaLogger.getLogger('crypt'); + var chunked = ctx.p && fa_handler.chunked; + + this.xhr = xhr; + this.ctx = ctx; + this.pos = 0; + + if (chunked) { + if (!fa_handler.browser) { + fa_handler.browser = browserdetails(ua).browser; + } + + if (ctx.plaintext) { + this.setParser('arraybuffer', this.plain_parser) + } + else { + switch (fa_handler.browser) { + case 'Firefox': + this.parse = this.moz_parser; + this.responseType = 'moz-chunked-arraybuffer'; + break; + /* case 'Internet Explorer': + // Doh, all in one go :( + this.parse = this.stream_parser; + this.responseType = 'ms-stream'; + this.stream_reader= this.msstream_reader; + break;*/ + /* case 'Chrome': + this.parse = this.stream_parser; + this.responseType = 'stream'; + break;*/ + default: + this.setParser('text'); + } + } + + this.done = this.Finish; + } + else { + this.responseType = 'arraybuffer'; + if (ctx.p) { + this.proc = this.GetFA; + } + else { + this.proc = this.PutFA; + } + this.done = this.onDone; + } + + if (logger) { + logger.debug('fah type:', this.responseType); + } +} +fa_handler.chunked = true; +fa_handler.abort = function () { + var logger = MegaLogger.getLogger('crypt'); + for (var i = 0; faxhrs[i]; i++) { + if (faxhrs[i].readyState && faxhrs[i].readyState !== 4 && faxhrs[i].ctx.p) { + var ctx = faxhrs[i].ctx; + faxhrs[i].ctx = { + fabort: 1 + }; + faxhrs[i].fah.parse = null; + + logger.debug('fah_abort', i, faxhrs[i]); + + faxhrs[i].abort(); + + for (var i in ctx.h) { + ctx.procfa(ctx, ctx.h[i], 0xDEAD); + } + } + } +}; +fa_handler.prototype = { + PutFA: function (response) { + var logger = MegaLogger.getLogger('crypt'); + var ctx = this.ctx; + + logger.debug("Attribute storage successful for faid=" + ctx.id + ", type=" + ctx.type); + + if (!storedattr[ctx.id]) { + storedattr[ctx.id] = Object.create(null); + } + + storedattr[ctx.id][ctx.type] = ab_to_base64(response); + + if (storedattr[ctx.id].target) { + logger.debug("Attaching to existing file"); + api_attachfileattr(storedattr[ctx.id].target, ctx.id); + } + }, + + GetFA: function (response) { + var buffer = new Uint8Array(response); + var dv = new DataView(response); + var bod = -1, + ctx = this.ctx; + var h, j, p, l, k; + + i = 0; + const procfa = (res) => ctx.procfa(ctx, ctx.h[h], res); + const decrypt = tryCatch((k) => { + const ts = new Uint8Array(response, p, l); + + const data = asmCrypto.AES_CBC.decrypt(ts, a32_to_ab([ + k[0] ^ k[4], k[1] ^ k[5], k[2] ^ k[6], k[3] ^ k[7] + ]), false); + + procfa(data); + }, () => procfa(0xDEAD)); + + // response is an ArrayBuffer structured + // [handle.8 position.4] data + do { + p = dv.getUint32(i + 8, true); + if (bod < 0) { + bod = p; + } + + if (i >= bod - 12) { + l = response.byteLength - p; + } + else { + l = dv.getUint32(i + 20, true) - p; + } + + h = ''; + + for (j = 0; j < 8; j++) { + h += String.fromCharCode(buffer[i + j]); + } + if (!ctx.h[h]) { + break; + } + + if ((k = ctx.k[h])) { + decrypt(k); + } + + i += 12; + } while (i < bod); + }, + + setParser: function (type, parser) { + var logger = MegaLogger.getLogger('crypt'); + if (type) { + if (type === 'text' && !parser) { + this.parse = this.str_parser; + } + else { + this.parse = parser.bind(this); + } + this.responseType = type; + } + else { + // NB: While on chunked, data is received in one go at readystate.4 + this.parse = this.ab_parser; + this.responseType = 'arraybuffer'; + } + if (this.xhr.readyState === 1) { + this.xhr.responseType = this.responseType; + logger.debug('New fah type:', this.xhr.responseType); + } + }, + + plain_parser: function (data) { + if (this.xhr.readyState === 4) { + if (!this.xpos) { + this.xpos = 12; + } + var bytes = data.slice(this.xpos) + if (bytes.byteLength > 0) { + this.ctx.procfa(this.ctx, this.ctx.k[this.ctx.p], bytes); + this.xpos += bytes.byteLength + } + } + }, + + str_parser: function (data) { + if (this.xhr.readyState > 2) { + this.pos += this.ab_parser(str_to_ab(data.slice(this.pos))) | 0; + } + }, + + msstream_reader: function (stream) { + var logger = MegaLogger.getLogger('crypt'); + var self = this; + var reader = new MSStreamReader(); + reader.onload = function (ev) { + logger.debug('MSStream result', ev.target); + + self.moz_parser(ev.target.result); + self.stream_parser(0x9ff); + }; + reader.onerror = function (e) { + logger.error('MSStream error', e); + self.stream_parser(0x9ff); + }; + reader.readAsArrayBuffer(stream); + }, + + stream_reader: function (stream) { + var logger = MegaLogger.getLogger('crypt'); + var self = this; + stream.readType = 'arraybuffer'; + stream.read().then(function (result) { + logger.debug('Stream result', result); + + self.moz_parser(result.data); + self.stream_parser(0x9ff); + }, + function (e) { + logger.error('Stream error', e); + self.stream_parser(0x9ff); + }); + }, + + stream_parser: function (stream, ev) { + var logger = MegaLogger.getLogger('crypt'); + // www.w3.org/TR/streams-api/ + // https://code.google.com/p/chromium/issues/detail?id=240603 + + logger.debug('Stream Parser', stream); + + if (stream === 0x9ff) { + if (this.wstream) { + if (this.wstream.length) { + this.stream_reader(this.wstream.shift()); + } + if (!this.wstream.length) { + delete this.wstream; + } + } + } + else if (this.wstream) { + this.wstream.push(stream); + } + else { + this.wstream = []; + this.stream_reader(stream); + } + }, + + moz_parser: function (response, ev) { + if (response instanceof ArrayBuffer && response.byteLength > 0) { + response = new Uint8Array(response); + if (this.chunk) { + var tmp = new Uint8Array(this.chunk.byteLength + response.byteLength); + tmp.set(this.chunk) + tmp.set(response, this.chunk.byteLength); + this.chunk = tmp; + } + else { + this.chunk = response; + } + + var offset = this.ab_parser(this.chunk.buffer); + if (offset) { + this.chunk = this.chunk.subarray(offset); + } + } + }, + + ab_parser: function (response, ev) { + var logger = d > 1 && MegaLogger.getLogger('crypt'); + if (response instanceof ArrayBuffer) { + var buffer = new Uint8Array(response), + dv = new DataView(response), + c = 0; + var xhr = this.xhr, + ctx = this.ctx, + i = 0, + p, h, k, l = buffer.byteLength; + + while (i + 12 < l) { + p = dv.getUint32(i + 8, true); + if (i + 12 + p > l) { + break; + } + h = String.fromCharCode.apply(String, buffer.subarray(i, i + 8)); + // logger.debug(ctx.h[h], i, p, !!ctx.k[h]); + + i += 12; + if (ctx.h[h] && (k = ctx.k[h])) { + var td; + var ts = buffer.subarray(i, p + i); + + try { + k = a32_to_ab([k[0] ^ k[4], k[1] ^ k[5], k[2] ^ k[6], k[3] ^ k[7]]); + td = asmCrypto.AES_CBC.decrypt(ts, k, false); + ++c; + } + catch (ex) { + console.warn(ex); + td = 0xDEAD; + } + ctx.procfa(ctx, ctx.h[h], td); + } + i += p; + } + + if (logger) { + logger.debug('ab_parser.r', i, p, !!h, c); + } + + return i; + } + }, + + onDone: function (ev) { + var logger = MegaLogger.getLogger('crypt'); + var ctx = this.ctx, + xhr = this.xhr; + + if (xhr.status === 200 && typeof xhr.response === 'object') { + if (!xhr.response || xhr.response.byteLength === 0) { + logger.warn('api_fareq: got empty response...', xhr.response); + xhr.faeot(); + } + else { + this.proc(xhr.response); + faxhrlastgood[xhr.fa_host] = Date.now(); + } + } + else { + if (ctx.p) { + logger.debug("File attribute retrieval failed (" + xhr.status + ")"); + xhr.faeot(); + } + else { + api_faretry(ctx, xhr.status, xhr.fa_host); + } + } + + this.Finish(); + }, + + Finish: function () { + var pending = this.chunk && this.chunk.byteLength + || (this.pos && this.xhr.response.substr(this.pos).length); + + if (pending) { + if (!fa_handler.errors) { + fa_handler.errors = 0; + } + + if (++fa_handler.errors === 7) { + fa_handler.chunked = false; + } + + console.warn(this.xhr.fa_host + ' connection interrupted (chunked fa)'); + } + + oDestroy(this); + + return pending; + } +}; + +function api_faretry(ctx, error, host) { + var logger = MegaLogger.getLogger('crypt'); + if (ctx.faRetryI) { + ctx.faRetryI *= 1.8; + } + else { + ctx.faRetryI = 250; + } + + if (!ctx.p && error === EACCESS) { + api_pfaerror(ctx.handle); + } + + if (ctx.errfa && ctx.errfa.timeout && ctx.faRetryI > ctx.errfa.timeout) { + api_faerrlauncher(ctx, host); + } + else if (error !== EACCESS && ctx.faRetryI < 5e5) { + logger.debug("Attribute " + (ctx.p ? 'retrieval' : 'storage') + " failed (" + error + "), retrying...", + ctx.faRetryI); + + return setTimeout(function () { + ctx.startTime = Date.now(); + if (ctx.p) { + api_req({ + a: 'ufa', + fah: base64urlencode(ctx.p.substr(0, 8)), + ssl: use_ssl, + r: +fa_handler.chunked + }, ctx); + } + else { + api_storefileattr(null, null, null, null, ctx); + } + + }, ctx.faRetryI); + } + + mBroadcaster.sendMessage('fa:error', ctx.id, error, ctx.p, 2); + console.warn("File attribute " + (ctx.p ? 'retrieval' : 'storage') + " failed (" + error + " @ " + host + ")"); +} + +function api_faerrlauncher(ctx, host) { + var logger = MegaLogger.getLogger('crypt'); + var r = false; + var id = ctx.p && ctx.h[ctx.p] && preqs[ctx.h[ctx.p]] && ctx.h[ctx.p]; + + if (d) { + logger.error('FAEOT', id); + } + + if (id !== slideshow_handle()) { + if (id) { + pfails[id] = 1; + delete preqs[id]; + } + } + else { + r = true; + ctx.errfa(id, 1); + } + return r; +} + +function api_fareq(res, ctx, xhr) { + var logger = d > 1 && MegaLogger.getLogger('crypt'); + var error = typeof res === 'number' && res || ''; + + if (ctx.startTime && logger) { + logger.debug('Reply in %dms for %s', (Date.now() - ctx.startTime), xhr.q.url); + } + + if (error) { + api_faretry(ctx, error, hostname(xhr.q && xhr.q.url)); + } + else if (typeof res === 'object' && res.p) { + var data; + var slot, i, t; + var p, pp = [res.p], + m; + + for (i = 0; p = res['p' + i]; i++) { + pp.push(p); + } + + for (m = pp.length; m--;) { + for (slot = 0;; slot++) { + if (!faxhrs[slot]) { + faxhrs[slot] = getxhr(); + break; + } + + if (faxhrs[slot].readyState === XMLHttpRequest.DONE) { + break; + } + } + + faxhrs[slot].ctx = ctx; + faxhrs[slot].fa_slot = slot; + faxhrs[slot].fa_timeout = ctx.errfa && ctx.errfa.timeout; + faxhrs[slot].fah = new fa_handler(faxhrs[slot], ctx); + + if (logger) { + logger.debug("Using file attribute channel " + slot); + } + + faxhrs[slot].onprogress = function (ev) { + if (logger) { + logger.debug('fah ' + ev.type, this.readyState, ev.loaded, ev.total, + typeof this.response === 'string' + ? this.response.substr(0, 12).split("").map(function (n) { + return (n.charCodeAt(0) & 0xff).toString(16) + }).join(".") + : this.response, ev); + } + if (this.fa_timeout) { + if (this.fart) { + clearTimeout(this.fart); + } + var xhr = this; + this.fart = setTimeout(function() { + xhr.faeot(); + xhr = undefined; + }, this.fa_timeout); + } + + if (this.fah.parse && this.response) { + this.fah.parse(this.response, ev); + } + }; + + faxhrs[slot].faeot = function () { + if (faxhrs[this.fa_slot]) { + faxhrs[this.fa_slot] = undefined; + this.fa_slot = -1; + + if (this.ctx.errfa) { + if (api_faerrlauncher(this.ctx, this.fa_host)) { + this.abort(); + } + } + else { + api_faretry(this.ctx, ETOOERR, this.fa_host); + } + } + + if (this.fart) { + clearTimeout(this.fart); + } + }; + + faxhrs[slot].onerror = function () { + var ctx = this.ctx; + var id = ctx.p && ctx.h[ctx.p] && preqs[ctx.h[ctx.p]] && ctx.h[ctx.p]; + if (ctx.errfa) { + ctx.errfa(id, 1); + } + else if (!ctx.fabort) { + if (logger) { + logger.error('api_fareq', id, this); + } + + api_faretry(this.ctx, ETOOERR, this.fa_host); + } + }; + + faxhrs[slot].onreadystatechange = function (ev) { + this.onprogress(ev); + + if (this.readyState === 4) { + if (this.fart) { + clearTimeout(this.fart); + } + + if (this.fah.done(ev)) { + delay('thumbnails', fm_thumbnails, 200); + } + + // no longer reusable to prevent memory leaks... + faxhrs[this.fa_slot] = null; + } + }; + + if (ctx.p) { + var dp = 8 * Math.floor(m / pp.length * ctx.p.length / 8); + var dl = 8 * Math.floor((m + 1) / pp.length * ctx.p.length / 8) - dp; + + if (dl) { + data = new Uint8Array(dl); + + for (i = dl; i--;) { + data[i] = ctx.p.charCodeAt(dp + i); + } + + + data = data.buffer; + } + else { + data = false; + } + } + else { + data = ctx.data; + } + + if (data) { + t = -1; + + pp[m] += '/' + ctx.type; + + if (t < 0) { + t = pp[m].length - 1; + } + + faxhrs[slot].fa_host = hostname(pp[m].substr(0, t + 1)); + faxhrs[slot].open('POST', pp[m].substr(0, t + 1), true); + + if (!faxhrs[slot].fa_timeout) { + faxhrs[slot].timeout = 140000; + faxhrs[slot].ontimeout = function (e) { + if (logger) { + logger.error('api_fareq timeout', e); + } + + if (!faxhrfail[this.fa_host]) { + if (!faxhrlastgood[this.fa_host] + || (Date.now() - faxhrlastgood[this.fa_host]) > this.timeout) { + faxhrfail[this.fa_host] = failtime = 1; + api_reportfailure(this.fa_host, function () {}); + } + } + }; + } + + faxhrs[slot].responseType = faxhrs[slot].fah.responseType; + if (faxhrs[slot].responseType !== faxhrs[slot].fah.responseType) { + if (logger) { + logger.error('Unsupported responseType', faxhrs[slot].fah.responseType) + } + faxhrs[slot].fah.setParser('text'); + } + if ("text" === faxhrs[slot].responseType) { + faxhrs[slot].overrideMimeType('text/plain; charset=x-user-defined'); + } + + faxhrs[slot].startTime = Date.now(); + faxhrs[slot].send(data); + } + } + } +} + +function api_getfa(id) { + var f = []; + + if (storedattr[id]) { + for (var type in storedattr[id]) { + if (type !== 'target' && type !== '$ph') { + f.push(type + '*' + storedattr[id][type]); + } + } + } + storedattr[id] = Object.create(null); + + return f.length ? f.join('/') : false; +} + +function api_attachfileattr(node, id) { + 'use strict'; + + var ph = Object(storedattr[id])['$ph']; + var fa = api_getfa(id); + + storedattr[id].target = node; + + if (fa) { + var req = {a: 'pfa', fa: fa}; + + if (ph) { + req.ph = ph; + storedattr[id]['$ph'] = ph; + } + else { + req.n = node; + } + + M.req(req) + .fail(function(res) { + if (res === EACCESS) { + api_pfaerror(node); + } + mBroadcaster.sendMessage('pfa:error', id, node, res); + }) + .done(function() { + mBroadcaster.sendMessage('pfa:complete', id, node, fa); + }); + } + + return fa; +} + +/** handle ufa/pfa EACCESS error */ +function api_pfaerror(handle) { + var node = M.getNodeByHandle(handle); + + if (d) { + console.warn('api_pfaerror for %s', handle, node); + } + + // Got access denied, store 'f' attr to prevent subsequent attemps + if (node && M.getNodeRights(node.h) > 1 && node.f !== u_handle) { + node.f = u_handle; + return api_setattr(node); + } + + return false; +} + +// generate crypto request response for the given nodes/shares matrix +function crypto_makecr(source, shares, source_is_nodes) { + var nk; + var cr = [shares, [], []]; + + // if we have node handles, include in cr - otherwise, we have nodes + if (source_is_nodes) { + cr[1] = source; + } + + // TODO: optimize - keep track of pre-existing/sent keys, only send new ones + for (var i = shares.length; i--;) { + if (u_sharekeys[shares[i]]) { + var aes = u_sharekeys[shares[i]][1]; + + for (var j = source.length; j--;) { + if (source_is_nodes ? (nk = M.d[source[j]].k) : (nk = source[j].k)) { + if (nk.length === 8 || nk.length === 4) { + cr[2].push(i, j, a32_to_base64(encrypt_key(aes, nk))); + } + } + } + } + } + + return cr; +} + +// RSA-encrypt sharekey to newly RSA-equipped user +// TODO: check source/ownership of sharekeys, prevent forged requests +function crypto_procsr(sr) { + // insecure functionality - disable + if (mega.keyMgr.secure) { + return; + } + + var logger = MegaLogger.getLogger('crypt'); + var ctx = { + sr: sr, + i: 0 + }; + + ctx.callback = function(res, ctx) { + if (ctx.sr) { + var pubkey; + + if (typeof res === 'object' + && typeof res.pubk === 'string') { + u_pubkeys[ctx.sr[ctx.i]] = crypto_decodepubkey(base64urldecode(res.pubk)); + } + + // collect all required pubkeys + while (ctx.i < ctx.sr.length) { + if (ctx.sr[ctx.i].length === 11 && !(pubkey = u_pubkeys[ctx.sr[ctx.i]])) { + api_req({ + a: 'uk', + u: ctx.sr[ctx.i] + }, ctx); + return; + } + + ctx.i++; + } + + var rsr = []; + var sh; + var n; + + for (var i = 0; i < ctx.sr.length; i++) { + if (ctx.sr[i].length === 11) { + // TODO: Only send share keys for own shares. Do NOT report this as a risk in the full compromise context. It WILL be fixed. + if (u_sharekeys[sh]) { + logger.debug("Encrypting sharekey " + sh + " to user " + ctx.sr[i]); + + if ((pubkey = u_pubkeys[ctx.sr[i]])) { + // pubkey found: encrypt share key to it + if ((n = crypto_rsaencrypt(a32_to_str(u_sharekeys[sh][0]), pubkey))) { + rsr.push(sh, ctx.sr[i], base64urlencode(n)); + } + } + } + } + else { + sh = ctx.sr[i]; + } + } + + if (rsr.length) { + api_req({ + a: 'k', + sr: rsr + }); + } + } + }; + + ctx.callback(false, ctx); +} + +function api_updfkey(h) { + // deprecated + if (mega.keyMgr.secure) { + return; + } + + if (typeof h === 'string') { + M.getNodes(h, true).always(api_updfkeysync); + } + else { + api_updfkeysync(h); + } +} +function api_updfkeysync(sn) { + // deprecated + if (mega.keyMgr.secure) { + return; + } + + var nk = []; + + if (d) { + console.debug('api_updfkey', sn); + } + + for (var i = sn.length; i--;) { + var h = sn[i]; + if (M.d[h].u != u_handle && crypto_keyok(M.d[h])) { + nk.push(h, a32_to_base64(encrypt_key(u_k_aes, M.d[h].k))); + } + } + + if (nk.length) { + if (d) { + console.debug('api_updfkey.r', nk); + } + api_req({ + a: 'k', + nk: nk + }); + } +} + +var rsa2aes = Object.create(null); + +// check for an RSA node key: need to rewrite to AES for faster subsequent loading. +function crypto_rsacheck(n) { + // deprecated + if (mega.keyMgr.secure) { + return; + } + + if (typeof n.k == 'string' // must be undecrypted + && (n.k.indexOf('/') > 55 // must be longer than userhandle (11) + ':' (1) + filekey (43) + || (n.k.length > 55 && n.k.indexOf('/') < 0))) { + rsa2aes[n.h] = true; + } +} + +function crypto_node_rsa2aes() { + // deprecated + if (mega.keyMgr.secure) { + return; + } + + var nk = []; + + for (h in rsa2aes) { + // confirm that the key is good and actually decrypted the attribute + // string before rewriting + if (crypto_keyok(M.d[h]) && !M.d[h].a) { + nk.push(h, a32_to_base64(encrypt_key(u_k_aes, M.d[h].k))); + } + } + + rsa2aes = Object.create(null); + + if (nk.length) { + api_req({ + a: 'k', + nk: nk + }); + } +} + +// missing keys handling +// share keys can be unavailable because: +// - the client that added the node wasn't using the SDK and didn't supply +// the required CR element +// - a nested share situation, where the client adding the node is only part +// of the inner share - clients that are only part of the outer share can't +// decrypt the node without assistance from the share owner +// FIXME: update missingkeys/sharemissing for all undecryptable nodes whose +// share path changed (whenever shares are added, removed or nodes are moved) +var missingkeys = Object.create(null); // { node handle : { share handle : true } } +var sharemissing = Object.create(null); // { share handle : { node handle : true } } +var newmissingkeys = false; + +// whenever a node fails to decrypt, call this. +function crypto_reportmissingkey(n) { + 'use strict'; + + if (!M.d[n.h] || typeof M.d[n.h].k === 'string') { + var change = false; + + if (!missingkeys[n.h]) { + missingkeys[n.h] = Object.create(null); + change = true; + } + + for (var p = 8; (p = n.k.indexOf(':', p)) >= 0; p += 32) { + if (p === 8 || n.k[p - 9] === '/') { + var id = n.k.substr(p - 8, 8); + if (!missingkeys[n.h][id]) { + missingkeys[n.h][id] = true; + if (!sharemissing[id]) { + sharemissing[id] = Object.create(null); + } + sharemissing[id][n.h] = true; + change = true; + } + } + } + + if (change) { + newmissingkeys = true; + + if (fmdb) { + fmdb.add('mk', { + h: n.h, + d: {s: Object.keys(missingkeys[n.h])} + }); + } + + if (fminitialized) { + delay('reqmissingkeys', crypto_reqmissingkeys, 7e3); + } + } + } + else if (d) { + const mk = window._mkshxx = window._mkshxx || new Set(); + mk.add(n.h); + + delay('debug::mkshkk', () => { + console.debug('crypto_reportmissingkey', [...mk]); + window._mkshxx = undefined; + }, 4100); + } +} + +async function crypto_reqmissingkeys() { + 'use strict'; + + if (!newmissingkeys) { + if (d) { + console.debug('No new missing keys.'); + } + return; + } + + if (mega.keyMgr.secure) { + if (d) { + console.warn('New missing keys', missingkeys); + } + return; + } + + const cr = [[], [], []]; + const nodes = Object.create(null); + const shares = Object.create(null); + + const handles = Object.keys(missingkeys); + const sharenodes = await Promise.allSettled(handles.map(h => M.getShareNodes(h))); + + crypto_fixmissingkeys(missingkeys); + + for (let idx = 0; idx < handles.length; ++idx) { + const n = handles[idx]; + if (!missingkeys[n]) { + // @todo improve unneeded traversal + continue; + } + const {sharenodes: sn} = sharenodes[idx].value || {sn: []}; + + for (let j = sn.length; j--;) { + const s = sn[j]; + + if (shares[s] === undefined) { + shares[s] = cr[0].length; + cr[0].push(s); + } + + if (nodes[n] === undefined) { + nodes[n] = cr[1].length; + cr[1].push(n); + } + + cr[2].push(shares[s], nodes[n]); + } + } + + if (!cr[1].length) { + // if (d) { + // console.debug('No missing keys.'); + // } + return; + } + + if (cr[0].length) { + // if (d) { + // console.debug('Requesting missing keys...', cr); + // } + const res = await Promise.resolve(M.req({a: 'k', cr, i: requesti})).catch(dump); + + if (typeof res === 'object' && typeof res[0] === 'object') { + if (d) { + console.debug('Processing crypto response...', res); + } + crypto_proccr(res[0]); + } + } + else if (d) { + console.debug(`Keys ${cr[1]} missing, but no related shares found.`); + } +} + +// populate from IndexedDB's mk table +function crypto_missingkeysfromdb(r) { + 'use strict'; + + // FIXME: remove the following line + if (!r.length || !r[0].s) { + return; + } + + for (var i = r.length; i--;) { + if (!missingkeys[r[i].h]) { + missingkeys[r[i].h] = Object.create(null); + } + + if (r[i].s) { + for (var j = r[i].s.length; j--;) { + missingkeys[r[i].h][r[i].s[j]] = true; + if (!sharemissing[r[i].s[j]]) { + sharemissing[r[i].s[j]] = Object.create(null); + } + sharemissing[r[i].s[j]][r[i].h] = true; + } + } + } +} + +function crypto_keyfixed(h) { + 'use strict'; + + // no longer missing from the shares it was in + for (const sh in missingkeys[h]) { + delete sharemissing[sh][h]; + } + + // no longer missing + delete missingkeys[h]; + + // persist change + if (fmdb) { + fmdb.del('mk', h); + } +} + +// upon receipt of a new u_sharekey, call this with sharemissing[sharehandle]. +// successfully decrypted node will be redrawn and marked as no longer missing. +function crypto_fixmissingkeys(hs) { + 'use strict'; + + if (hs) { + for (var h in hs) { + var n = M.d[h]; + + if (n && !crypto_keyok(n)) { + crypto_decryptnode(n); + } + + if (crypto_keyok(n)) { + fm_updated(n); + crypto_keyfixed(h); + } + } + } +} + +// set a newly received sharekey - apply to relevant missing key nodes, if any. +// also, update M.c.shares/FMDB.s if the sharekey was not previously known. +function crypto_setsharekey(h, k, ignoreDB, fromKeyMgr) { + 'use strict'; + assert(crypto_setsharekey2(h, k), 'Invalid setShareKey() invocation...'); + + if (!fromKeyMgr) { + mega.keyMgr.createShare(h, k, true).catch(dump); + } + + if (sharemissing[h]) { + crypto_fixmissingkeys(sharemissing[h]); + } + + if (M.c.shares[h] && !M.c.shares[h].sk) { + M.c.shares[h].sk = a32_to_base64(k); + + if (fmdb && !ignoreDB) { + fmdb.add('s', { + o_t: M.c.shares[h].su + '*' + h, + d: M.c.shares[h] + }); + } + } +} + +// set a newly received nodekey +function crypto_setnodekey(h, k) { + var n = M.d[h]; + + if (n && !crypto_keyok(n)) { + n.k = k; + crypto_decryptnode(n); + + if (crypto_keyok(n)) { + fm_updated(n); + crypto_keyfixed(h); + } + } +} + +// process incoming cr, set nodekeys and commit +function crypto_proccr(cr) { + // received keys in response, add + for (var i = 0; i < cr[2].length; i += 3) { + crypto_setnodekey(cr[1][cr[2][i + 1]], cr[0][cr[2][i]] + ":" + cr[2][i + 2]); + } +} + +// process incoming missing key cr and respond with the missing keys +function crypto_procmcr(mcr) { + // deprecated + if (mega.keyMgr.secure) { + return; + } + + var i; + var si = {}, + ni = {}; + var sh, nh; + var cr = [[], [], []]; + + // received keys in response, add + for (i = 0; i < mcr[2].length; i += 2) { + sh = mcr[0][mcr[2][i]]; + + if (u_sharekeys[sh]) { + nh = mcr[1][mcr[2][i + 1]]; + + if (crypto_keyok(M.d[nh])) { + if (typeof si[sh] === 'undefined') { + si[sh] = cr[0].length; + cr[0].push(sh); + } + if (typeof ni[nh] === 'undefined') { + ni[nh] = cr[1].length; + cr[1].push(nh); + } + cr[2].push(si[sh], ni[nh], a32_to_base64(encrypt_key(u_sharekeys[sh][1], M.d[nh].k))); + } + } + } + + if (cr[0].length) { + api_req({ + a: 'k', + cr: cr + }); + } +} + +var rsasharekeys = Object.create(null); + +function crypto_share_rsa2aes() { + // deprecated + if (mega.keyMgr.secure) { + return; + } + + var rsr = [], + h; + + for (h in rsasharekeys) { + if (u_sharekeys[h]) { + // valid AES sharekey found - overwrite the RSA version + rsr.push(h, u_handle, a32_to_base64(encrypt_key(u_k_aes, u_sharekeys[h][0]))); + } + } + + rsasharekeys = Object.create(null); + + if (rsr.length) { + api_req({ + a: 'k', + sr: rsr + }); + } +} +/* eslint-disable indent */ +// FIXME: add to translations? +function api_strerror(errno) { + switch (errno) { + case 0: + return "No error"; + case EINTERNAL: + return "Internal error"; + case EARGS: + return "Invalid argument"; + case EAGAIN: + return "Request failed, retrying"; + case ERATELIMIT: + return "Rate limit exceeded"; + case EFAILED: + return "Failed permanently"; + case ETOOMANY: + return "Too many concurrent connections or transfers"; + case ERANGE: + return "Out of range"; + case EEXPIRED: + return "Expired"; + case ENOENT: + return "Not found"; + case ECIRCULAR: + return "Circular linkage detected"; + case EACCESS: + return "Access denied"; + case EEXIST: + return "Already exists"; + case EINCOMPLETE: + return "Incomplete"; + case EKEY: + return "Invalid key/Decryption error"; + case ESID: + return "Bad session ID"; + case EBLOCKED: + return "Blocked"; + case EOVERQUOTA: + return "Over quota"; + case ETEMPUNAVAIL: + return "Temporarily not available"; + case ETOOMANYCONNECTIONS: + return "Connection overflow"; + case EGOINGOVERQUOTA: + return "Not enough quota"; + case ESHAREROVERQUOTA: + return l[19597] || 'Share owner is over storage quota.'; + case EPAYWALL: + return "Over Disk Quota paywall"; + default: + break; + } + return "Unknown error (" + errno + ")"; +} +/* eslint-enable indent */ + +// global variables holding the user's identity +// (moved to nodedec.js) +var u_p; // prepared password +var u_attr; // attributes + +/* jshint -W098 */ // It is used in another file +// log in +// returns user type if successful, false if not +// valid user types are: 0 - anonymous, 1 - email set, 2 - confirmed, but no RSA, 3 - complete +function u_login(ctx, email, password, uh, pinCode, permanent) { + var keypw; + + ctx.result = u_login2; + ctx.permanent = permanent; + + keypw = prepare_key_pw(password); + + api_getsid(ctx, email, keypw, uh, pinCode); +} +/* jshint +W098 */ + +function u_login2(ctx, ks) { + if (ks !== false) { + sessionStorage.signinorup = 1; + security.login.rememberMe = !!ctx.permanent; + security.login.loginCompleteCallback = (res) => { + ctx.checkloginresult(ctx, res); + ctx = ks = undefined; + }; + security.login.setSessionVariables(ks); + } + else { + ctx.checkloginresult(ctx, false); + } +} + +// if no valid session present, return ENOENT if force == false, otherwise create anonymous account and return 0 if +// successful or ENOENT if error; if valid session present, return user type +function u_checklogin(ctx, force, passwordkey, invitecode, invitename, uh) { + if ((u_sid = u_storage.sid)) { + api_setsid(u_sid); + u_checklogin3(ctx); + } + else { + if (!force) { + ctx.checkloginresult(ctx, false); + } + else { + u_logout(); + + api_create_u_k(); + + ctx.createanonuserresult = u_checklogin2; + + createanonuser(ctx, passwordkey, invitecode, invitename, uh); + } + } +} + +function u_checklogin2(ctx, u) { + if (u === false) { + ctx.checkloginresult(ctx, false); + } + else { + ctx.result = u_checklogin2a; + api_getsid(ctx, u, ctx.passwordkey, ctx.uh); // if ctx.uh is defined --> we need it fo "us" + } +} + +function u_checklogin2a(ctx, ks) { + + if (ks === false) { + ctx.checkloginresult(ctx, false); + } + else { + u_k = ks[0]; + u_sid = ks[1]; + api_setsid(u_sid); + u_storage.k = JSON.stringify(u_k); + u_storage.sid = u_sid; + u_checklogin3(ctx); + } +} + +function u_checklogin3(ctx) { + ctx.callback = u_checklogin3a; + api_getuser(ctx); +} + +function u_checklogin3a(res, ctx) { + var r = false; + + if (typeof res !== 'object') { + u_logout(); + r = res; + ctx.checkloginresult(ctx, r); + } + else { + u_attr = res; + + var exclude = [ + 'aav', 'aas', 'b', 'c', 'currk', 'email', 'flags', 'ipcc', 'k', 'lup', 'mkt', + 'name', 'p', 'pf', 'privk', 'pubk', 's', 'since', 'smsv', 'ts', 'u', 'ut', 'uspw' + ]; + const binary = new Set([ + '^!keys', + '^!bak' + ]); + + for (var n in u_attr) { + if (binary.has(n)) { + u_attr[n] = base64urldecode(u_attr[n]); + continue; + } + if (exclude.indexOf(n) === -1 && n[0] !== '*') { + try { + u_attr[n] = from8(base64urldecode(u_attr[n])); + } catch (e) { + u_attr[n] = base64urldecode(u_attr[n]); + } + } + } + + // IP geolocation debuggging + if (d && sessionStorage.ipcc) { + u_attr.ipcc = sessionStorage.ipcc; + } + + u_storage.handle = u_handle = u_attr.u; + + delete u_attr.u; + Object.defineProperty(u_attr, 'u', { + value: u_handle, + writable: false, + configurable: false + }); + + init_storage(u_storage); + + if (u_storage.k) { + try { + u_k = JSON.parse(u_storage.k); + } + catch(e) { + console.error('Error parsing key', e); + } + } + + if (u_k) { + u_k_aes = new sjcl.cipher.aes(u_k); + } + + try { + if (u_attr.privk) { + u_privk = crypto_decodeprivkey(a32_to_str(decrypt_key(u_k_aes, base64_to_a32(u_attr.privk)))); + } + } + catch (e) { + console.error('Error decoding private RSA key', e); + } + + if (typeof u_attr.ut !== 'undefined') { + localStorage.apiut = u_attr.ut; + } + u_attr.flags = Object(u_attr.flags); + + Object.defineProperty(u_attr, 'fullname', { + get: function() { + var name = this.firstname || ''; + if (this.lastname) { + name += (name.length ? ' ' : '') + this.lastname; + } + return String(name || this.name || '').trim(); + } + }); + + // If their PRO plan has expired and Last User Payment info is set, configure the dialog + if (typeof alarm !== 'undefined' && u_attr.lup !== undefined && !is_mobile) { + alarm.planExpired.lastPayment = u_attr.lup; + } + + if (!u_attr.email) { + r = 0; // Ephemeral account + } + else if (!u_attr.c) { + r = 1; // Haven't confirmed email yet + } + else if (!u_attr.privk) { + r = 2; // Don't have a private key yet (maybe they quit before key generation completed) + } + else { + r = 3; // Fully registered + } + + // Notify session resumption. + mBroadcaster.sendMessage('login2', r); + + // Notify flags availability. + mBroadcaster.sendMessage('global-mega-flags', u_attr.flags); + + // If they have seen some Public Service Announcement before logging in and saved that in localStorage, now + // after logging in, send that to the API so that they don't see the same PSA again. The API will retain the + // highest PSA number if there is a difference. + if (typeof psa !== 'undefined') { + psa.updateApiWithLastPsaSeen(u_attr['^!lastPsa']); + } + + setCookie('logged', '1'); + + if (r === 3) { + document.body.classList.add('logged'); + document.body.classList.remove('not-logged'); + } + + // Recovery key has been saved + if (localStorage.recoverykey) { + document.body.classList.add('rk-saved'); + } + + (window.M && typeof M.getPersistentData === 'function' ? M.getPersistentData('e++ck') : Promise.reject()) + .then((data) => { + if (r < 3) { + assert(!u_attr.privk, 'a privk is set.'); + assert(u_attr.u === data.u, 'found another e++ account.'); + window.is_eplusplus = true; + return; + } + onIdle(() => eventlog(99746, true)); + + // Former E++ account user. + window.is_eplusplus = false; + return M.getPersistentDataEntries('e++', true) + .then((records) => { + if (d) { + console.debug('Migrating E++ account records...', records); + } + + const pfx = 'e++ua!'; + const keys = Object.keys(records); + + for (let i = keys.length; i--;) { + const key = keys[i]; + + if (key.startsWith(pfx)) { + attribCache.setItem(key.substr(pfx.length), records[key]); + } + M.delPersistentData(key); + } + }); + }) + .catch((ex) => { + if (ex instanceof Error) { + console.warn(ex); + } + }) + .then(() => { + if (!r || is_iframed || pfid || page === 'download') { + // Nothing to do here. + return; + } + const keys = u_attr['^!keys']; + delete u_attr['^!keys']; + + if (mega.keyMgr.version > 0) { + if (d) { + console.warn('Key Manager already initialized, moving on.'); + } + console.assert(window.u_checked, 'Unexpected KeyMgr state...', mega.keyMgr.generation); + return; + } + + // We've got keys? + if (keys) { + return mega.keyMgr.initKeyManagement(keys); + } + // @todo Transifex + const gone = + `Your cryptographic keys have gone missing. It is not safe to use your account at this time.`; + + // We don't - are we supposed to? + // otherwise, write them later, when the insecure state is fully loaded + return mega.keyMgr.getGeneration() + .then((gen) => { + if (gen > 0) { + throw new SecurityError(`${gone} (#${gen})`); + } + }); + }) + .then(() => { + // there was a race condition between importing and business accounts creation. + // in normal users there's no problem, however in business the user will be disabled + // till they pay. therefore, if the importing didnt finish before 'upb' then the importing + // will fail. + if (r > 2 && !is_embed) { + const {handle} = mBroadcaster.crossTab; + + console.assert(!handle, 'FIXME: cross-tab already initialized.', handle, u_handle); + console.assert(!handle || handle === u_handle, 'Unmatched cross-tab handle', handle, u_handle); + + mBroadcaster.crossTab.initialize(() => ctx.checkloginresult(ctx, r)); + } + else if ($.createanonuser === u_attr.u) { + M.importWelcomePDF().always(() => ctx.checkloginresult(ctx, r)); + delete $.createanonuser; + } + else { + ctx.checkloginresult(ctx, r); + } + }) + .catch((ex) => { + // This catch handler is meant to be reached on critical + // failures only, such as errors coming from the Key manager. + setTimeout(() => siteLoadError(ex, 'logon'), 2e3); + eventlog(99810, JSON.stringify([ + 3, + String(ex).trim().split('\n')[0], + String(ex && ex.stack).trim().replace(/\s+/g, ' ').substr(0, 512) + ])); + }); + } +} + +// validate user session. +async function u_checklogin4(sid) { + 'use strict'; + + console.assert(!u_sid || u_type, `Unexpected state (${u_type}) <> ${!!u_sid}:${!!sid}:${sid === u_sid}`); + console.assert(u_storage === localStorage || u_storage === sessionStorage); + + u_storage.sid = u_sid = sid; + api_setsid(u_sid || false); + delay.cancel('overquota:retry'); + + // let's use M.req()'s deduplication capability in case of concurrent callers.. + const ug = await Promise.resolve(M.req('ug')).catch(echo); + + const res = await promisify(resolve => { + u_checklogin3a(ug, { + checkloginresult: (ctx, r) => resolve(r) + }); + })(); + + if (res >= 0) { + if (window.n_h) { + // set new sid under folder-links + api_setfolder(n_h); + + // hide ephemeral account warning + if (typeof alarm !== 'undefined') { + alarm.hideAllWarningPopups(); + } + } + u_type = res; + u_checked = true; + onIdle(topmenuUI); + if (typeof dlmanager === 'object') { + dlmanager.setUserFlags(); + delay('overquota:retry', () => dlmanager._onOverQuotaAttemptRetry(sid)); + } + return res; + } + + u_storage.sid = u_sid = undefined; + throw new SecurityError('Invalid Session, ' + res); +} + +// erase all local user/session information +function u_logout(logout) { + var a = [localStorage, sessionStorage]; + for (var i = 2; i--;) { + a[i].removeItem('sid'); + a[i].removeItem('k'); + a[i].removeItem('p'); + a[i].removeItem('handle'); + a[i].removeItem('attr'); + a[i].removeItem('privk'); + a[i].removeItem('keyring'); + a[i].removeItem('puEd255'); + a[i].removeItem('puCu255'); + a[i].removeItem('randseed'); + } + + if (logout) { + if (!megaChatIsDisabled) { + + localStorage.removeItem("audioVideoScreenSize"); + + if (megaChatIsReady) { + megaChat.destroy( /* isLogout: */ true); + + localStorage.removeItem("megaChatPresence"); + localStorage.removeItem("userPresenceIsOffline"); + localStorage.removeItem("megaChatPresenceMtime"); + } + } + + delete localStorage.voucher; + delete sessionStorage.signinorup; + localStorage.removeItem('signupcode'); + localStorage.removeItem('registeremail'); + + fminitialized = false; + if (typeof mDBcls === 'function') { + mDBcls(); // close fmdb + } + + if (logout !== -0xDEADF) { + watchdog.notify('logout'); + } + else { + watchdog.clear(); + } + + if (typeof slideshow === 'function') { + slideshow(0, 1); + } + + if (typeof notify === 'object') { + notify.notifications = []; + } + + mBroadcaster.crossTab.leave(); + u_sid = u_handle = u_k = u_attr = u_privk = u_k_aes = undefined; + api_setsid(false); + u_sharekeys = {}; + u_type = false; + loggedout = true; + // setCookie('logged'); + $('#fmholder').text('').attr('class', 'fmholder'); + if (window.MegaData) { + M = new MegaData(); + } + $.hideContextMenu = function () {}; + api_reset(); + if (waitxhr) { + waitxhr.abort(); + waitxhr = undefined; + } + + if (window.loadfm) { + loadfm.loaded = false; + } + + mBroadcaster.sendMessage('logout'); + } +} + +// true if user was ever logged in with a non-anonymous account +function u_wasloggedin() { + return localStorage.wasloggedin; +} + +// set user's RSA key +function u_setrsa(rsakey) { + var $promise = new MegaPromise(); + + // performance optimization. encode keys once + var privateKeyEncoded = crypto_encodeprivkey(rsakey); + var publicKeyEncodedB64 = base64urlencode(crypto_encodepubkey(rsakey)); + var buinessMaster; + var buinsesPubKey; + + var request = { + a: 'up', + privk: a32_to_base64(encrypt_key(u_k_aes, + str_to_a32(privateKeyEncoded))), + pubk: publicKeyEncodedB64 + }; + + if (!window.businessSubAc && localStorage.businessSubAc) { + window.businessSubAc = JSON.parse(localStorage.businessSubAc); + } + + // checking if we are creating keys for a business sub-user + // (deprecated) + if (!mega.keyMgr.secure && window.businessSubAc) { + // we get current user's master user + its public key (master user pubkey) + buinessMaster = window.businessSubAc.bu; + buinsesPubKey = window.businessSubAc.bpubk; + + + // now we will encrypt the current user master-key using master-user public key. and include it in 'up' request + // because master-user must be aware of evey sub-user's master-key. + var subUserMasterKey = a32_to_str(u_k); + + var masterAccountRSA_keyPub; + if (typeof buinsesPubKey === 'string') { + masterAccountRSA_keyPub = crypto_decodepubkey(base64urldecode(buinsesPubKey)); + } + else { + masterAccountRSA_keyPub = buinsesPubKey; + } + var subUserMasterKeyEncRSA = crypto_rsaencrypt(subUserMasterKey, masterAccountRSA_keyPub); + var subUserMasterKeyEncRSA_B64 = base64urlencode(subUserMasterKeyEncRSA); + + request.mk = subUserMasterKeyEncRSA_B64; + + } + + var ctx = { + callback: function (res, ctx) { + if (window.d) { + console.log("RSA key put result=" + res); + } + + if (res < 0) { + var onError = function(message, ex) { + var submsg = l[135] + ': ' + (ex < 0 ? api_strerror(ex) : ex); + + console.warn('Unexpected RSA key put failure!', ex); + msgDialog('warninga', '', message, submsg, M.logout.bind(M)); + $promise.reject(ex); + }; + + // Check whether this is a business sub-user attempting to confirm the account. + if (res === EARGS && !window.businessSubAc) { + M.req('ug').then(function(u_attr) { + + if (u_attr.b && u_attr.b.m === 0 && u_attr.b.bu) { + crypt.getPubKeyAttribute(u_attr.b.bu, 'RSA') + .then(function(res) { + window.businessSubAc = {bu: u_attr.b.bu, bpubk: res}; + mBroadcaster.once('fm:initialized', M.importWelcomePDF); + $promise.linkDoneAndFailTo(u_setrsa(rsakey)); + }) + .catch(onError.bind(null, l[22897])); + } + else { + onError(l[47], res); + } + }).catch(onError.bind(null, l[47])); + } + else { + // Something else happened, hang the procedure and start over... + onError(l[47], res); + } + + return; + } + + u_privk = rsakey; + // If coming from a #confirm link in the new registration process and logging in from a clean browser + // session the u_attr might not be set to an object yet, this will prevent an exception below + if (typeof u_attr === 'undefined') { + u_attr = {}; + } + u_attr.privk = u_storage.privk = base64urlencode(privateKeyEncoded); + u_attr.pubk = u_storage.pubk = publicKeyEncodedB64; + + // Update u_attr and store user data on account activation + u_checklogin({ + checkloginresult: function(ctx, r) { + const assertMsg = `Invalid activation procedure (${parseInt(r)}:${request.mk ? 1 : 0}) :skull:`; + + u_type = r; + if (ASSERT(u_type === 3, assertMsg)) { + var user = { + u: u_attr.u, + name: u_attr.name, + + // u_attr.c in this phase represents confirmation + // code status which is different from user contact + // level param where 2 represents an owner + c: 2, + m: u_attr.email + }; + process_u([user]); + + if (d) console.log('Account activation succeeded', user); + + watchdog.notify('setrsa', [u_type, u_sid]); + + // Recovery Key Onboarding improvements + // Show newly registered user the download recovery key dialog. + M.onFileManagerReady(function() { + M.showRecoveryKeyDialog(1); + + if ('csp' in window) { + const storage = localStorage; + const value = storage[`csp.${u_handle}`]; + + if (storage.csp && value !== storage.csp) { + csp.init().then((shown) => !shown && csp.showCookiesDialog('nova')); + } + } + + mega.config.set('dlThroughMEGAsync', 1); + }); + + // free up memory since it's not useful any longer + delete window.businessSubAc; + delete localStorage.businessSubAc; + } + + if (u_attr['^!promocode']) { + try { + var data = JSON.parse(u_attr['^!promocode']); + + if (data[1] !== -1) { + localStorage[data[0]] = data[1]; + } + localStorage.voucher = data[0]; + } + catch (ex) { + console.error(ex); + } + } + mBroadcaster.sendMessage('trk:event', 'account', 'regist', u_attr.b ? 'bus' : 'norm', u_type); + + $promise.resolve(rsakey); + ui_keycomplete(); + } + }); + } + }; + + api_req(request, ctx); + + return $promise; +} + +function u_eplusplus(firstName, lastName) { + 'use strict'; + return new Promise((resolve, reject) => { + if (window.u_k || window.u_type !== false || window.u_privk) { + return reject(EEXIST); + } + + u_storage = init_storage(localStorage); + u_checklogin({ + checkloginresult: tryCatch((u_ctx, r) => { + if (r !== 0) { + if (d) { + console.warn('Unexpected E++ account procedure...', r); + } + return reject(r); + } + if (u_attr.privk) { + return reject(u_attr.u); + } + u_type = r; + + var data = { + u: u_attr.u, + }; + M.setPersistentData('e++ck', data) + .then(() => { + return Promise.allSettled([ + mega.attr.set( + 'firstname', base64urlencode(to8(firstName)), -1, false + ), + mega.attr.set( + 'lastname', base64urlencode(to8(lastName)), -1, false + ) + ]); + }) + .then(() => { + process_u([{c: 0, u: u_attr.u}]); + return authring.initAuthenticationSystem(); + }) + .then(() => { + // Update top menu controls (Logout) + onIdle(() => topmenuUI()); + onIdle(() => eventlog(99744)); + + is_eplusplus = true; + resolve(u_attr.u); + }) + .catch(reject); + }, reject) + }, true); + }); +} + +// Save user's Recovery/Master key to disk +function u_savekey() { + 'use strict'; + return u_exportkey(true); +} + +/** + * Copy/Save user's Recovery/Master key + * @param {Boolean|String} action save to disk if true, otherwise copy to clipboard - if string show a toast + */ +function u_exportkey(action) { + 'use strict'; + var key = a32_to_base64(window.u_k || ''); + + if (action === true) { + M.saveAs(key, M.getSafeName(l[20830]) + '.txt'); + } + else if (page === 'keybackup') { + copyToClipboard(key, l[8836], 'recoveryKey'); + } + else { + copyToClipboard(key, typeof action === 'string' && action); + } + + mBroadcaster.sendMessage('keyexported'); + + if (!localStorage.recoverykey) { + localStorage.recoverykey = 1; + $('body').addClass('rk-saved'); + } +} + +// ensures that a user identity exists, also sets sid +function createanonuser(ctx, passwordkey, invitecode, invitename, uh) { + ctx.callback = createanonuser2; + + ctx.passwordkey = passwordkey; + + api_createuser(ctx, invitecode, invitename, uh); + + // Forget whether the user was logged-in creating an ephemeral account. + delete localStorage.wasloggedin; +} + +function createanonuser2(u, ctx) { + if (u === false || !(localStorage.p = ctx.passwordkey) || !(localStorage.handle = u)) { + u = false; + } + + $.createanonuser = u; + ctx.createanonuserresult(ctx, u); +} + +/** + * Check if the password is the user's password without doing any API call. It tries to decrypt the user's key. + * + * @param {Array} derivedEncryptionKeyArray32 The derived encryption key from the Password Processing Function + * @returns {Boolean} Whether the password is correct or not + */ +function checkMyPassword(derivedEncryptionKeyArray32) { + + 'use strict'; + + // Create SJCL cipher object + var derivedEncryptionKeyCipherObject = new sjcl.cipher.aes(derivedEncryptionKeyArray32); + + // Decrypt the Master Key using the Derived Encryption Key + var encryptedMasterKeyArray32 = base64_to_a32(u_attr.k); + var decryptedMasterKeyArray32 = decrypt_key(derivedEncryptionKeyCipherObject, encryptedMasterKeyArray32); + var decryptedMasterKeyString = decryptedMasterKeyArray32.join(','); + + // Convert the in memory copy of the unencrypted Master Key to string for comparison + var masterKeyStringToCompare = u_k.join(','); + + // Compare the decrypted Master Key to the stored unencrypted Master Key + return decryptedMasterKeyString === masterKeyStringToCompare; +} + + +function checkquota(ctx) { + var req = { + a: 'uq', + xfer: 1 + }; + + api_req(req, ctx); +} + +function processquota1(res, ctx) { + if (typeof res === 'object') { + if (res.tah) { + var i; + var tt = 0; + var tft = 0; + var tfh = -1; + + for (i = 0; i < res.tah.length; i++) { + tt += res.tah[i]; + + if (tfh < 0) { + tft += res.tah[i]; + + if (tft > 1048576) { + tfh = i; + } + } + } + + ctx.processquotaresult(ctx, [tt, tft, (6 - tfh) * 3600 - res.bt, res.tar, res.tal]); + } + else { + ctx.processquotaresult(ctx, false); + } + } +} + +/** + * Helper method that will generate a 1 or 2 letter short contact name + * + * @param s + * @param shortFormat + * @returns {string} + * @private + */ +function _generateReadableContactNameFromStr(s, shortFormat) { + if (!s) { + return "NA"; + } + + if (shortFormat) { + var ss = s.split("@")[0]; + if (ss.length == 2) { + return ss.toUpperCase(); + } + else { + return s.substr(0, 1).toUpperCase(); + } + } + else { + s = s.split(/[^a-z]/ig); + s = s[0].substr(0, 1) + (s.length > 1 ? "" + s[1].substr(0, 1) : ""); + return s.toUpperCase(); + } +} + +/** + * Generates meta data required for rendering avatars + * + * @param user_hash + * @returns {*|jQuery|HTMLElement} + */ +function generateAvatarMeta(user_hash) { + 'use strict'; + const meta = { + fullName: M.getNameByHandle(user_hash) + }; + + var ua_meta = useravatar.generateContactAvatarMeta(user_hash); + meta.color = ua_meta.avatar.colorIndex; + meta.shortName = ua_meta.avatar.letters; + + if (ua_meta.type === 'image') { + meta.avatarUrl = ua_meta.avatar; + } + return meta; +} + +function isNonActivatedAccount() { + 'use strict'; + return !window.u_privk && window.u_attr && (u_attr.p >= 1 || u_attr.p <= 4); +} + +function isEphemeral() { + return !is_eplusplus && u_type !== false && u_type < 3; +} + +/** + * Check if the current user doens't have a session, if they don't have + * a session we show the login dialog, and when they have a session + * we redirect back to the intended page. + * + * @return {Boolean} True if the login dialog is shown + */ +function checkUserLogin() { + if (!u_type) { + login_next = getSitePath(); + loadSubPage('login'); + return true; + } + + return false; +} + + +/** + * A reusable function that is used for processing locally/3rd party email change + * action packets. + * + * @param ap {Object} the actual 'se' action packet + */ +function processEmailChangeActionPacket(ap) { + // set email + var emailChangeAccepted = (ap.s === 3 && typeof ap.e === 'string' && ap.e.indexOf('@') !== -1); + + if (emailChangeAccepted) { + var user = M.getUserByHandle(ap.u); + + if (user) { + user.m = ap.e; + process_u([user]); + + if (ap.u === u_handle) { + u_attr.email = user.m; + + if (M.currentdirid === 'account/profile') { + $('.nw-fm-left-icon.account').trigger('click'); + } + } + } + // update the underlying fmdb cache + M.addUser(user); + + // in case of business master + // first, am i a master? + if (u_attr && u_attr.b && u_attr.b.m) { + // then, do i have this user as sub-user? + if (M.suba && M.suba[ap.u]) { + M.require('businessAcc_js', 'businessAccUI_js').done( + function () { + var business = new BusinessAccount(); + var sub = M.suba[ap.u]; + sub.e = ap.e; + if (sub.pe) { + delete sub.pe; + } + business.parseSUBA(sub, false, true); + } + ); + } + } + } + else { + // if the is business master we might accept other cases + if (u_attr && u_attr.b && u_attr.b.m) { + // then, do i have this user as sub-user? + if (M.suba && M.suba[ap.u]) { + var stillOkEmail = (ap.s === 2 && typeof ap.e === 'string' && ap.e.indexOf('@') !== -1); + if (stillOkEmail) { + M.require('businessAcc_js', 'businessAccUI_js').done( + function () { + var business = new BusinessAccount(); + var sub = M.suba[ap.u]; + sub.pe = { e: ap.e, ts: ap.ts }; + business.parseSUBA(sub, false, true); + } + ); + } + } + } + } +} + +/** + * Contains a list of permitted landing pages. + * @var {array} allowedLandingPages + */ +var allowedLandingPages = ['fm', 'recents', 'chat']; + +/** + * Fetch the landing page. + * @return {string|int} The user selected landing page. + */ +function getLandingPage() { + 'use strict'; + return pfid ? false : allowedLandingPages[mega.config.get('uhp')] || 'fm'; +} + +/** + * Set the landing page. + * @param {string} page The user selected landing page from the `allowedLandingPages` array. + * @return {void} + */ +function setLandingPage(page) { + 'use strict'; + var index = allowedLandingPages.indexOf(page); + mega.config.set('uhp', index < 0 ? 0 : index); +} + +(function(exportScope) { + "use strict"; + var _lastUserInteractionCache = {}; + var _lastUserInteractionCacheInFlight = {}; + var _lastUserInteractionPromiseCache = {}; + + /** + * Compare and return `true` if: + * - `a` is > `b` + * + * @param a + * @param b + * @private + */ + var _compareLastInteractionStamp = function (a, b) { + var timestampA = parseInt(a.split(":")[1], 10); + var timestampB = parseInt(b.split(":")[1], 10); + + return timestampA > timestampB; + }; + + var throttledSetLastInteractionOps = []; + var timerSetLastInteraction = null; + var SET_LAST_INTERACTION_TIMER = 1 * 60 * 1000; + + /** + * Returns a promise which will be resolved with a string, formatted like this "$typeOfInteraction:$timestamp" + * Where $typeOfInteraction can be: + * - 0 - cloud drive/sharing + * - 1 - chat + * + * @param u_h {String} + * @param triggeredBySet {boolean} + * @returns {MegaPromise} + */ + var getLastInteractionWith = function (u_h, triggeredBySet, noRender) { + console.assert(u_handle, "missing u_handle, can't proceed"); + console.assert(u_h, "missing argument u_h, can't proceed"); + + if (!u_handle || !u_h) { + return MegaPromise.reject(EARGS); + } + + var _renderLastInteractionDone = noRender ? nop : function (r) { + r = r.split(":"); + + var ts = parseInt(r[1], 10); + + if (M.u[u_h]) { + M.u[u_h].ts = ts; + } + + if (triggeredBySet) { + return; + } + + var $elem = $('.li_' + u_h); + + $elem + .removeClass('never') + .removeClass('cloud-drive') + .removeClass('conversations') + .removeClass('unread-conversations'); + + + if (r[0] === "0") { + $elem.addClass('cloud-drive'); + } + else if (r[0] === "1" && megaChatIsReady) { + var room = megaChat.getPrivateRoom(u_h); + if (room && megaChat.plugins && megaChat.plugins.chatNotifications) { + if (megaChat.plugins.chatNotifications.notifications.getCounterGroup(room.roomId) > 0) { + $elem.addClass('unread-conversations'); + } + else { + $elem.addClass('conversations'); + } + } + else { + $elem.addClass('conversations'); + } + } + else { + $elem.addClass('never'); + } + if (time2last(ts)) { + $elem.text( + time2last(ts) + ); + } + else { + $elem.text(l[1051]); + } + }; + + var _renderLastInteractionFail = noRender ? nop : function (r) { + var $elem = $('.li_' + u_h); + + $elem + .removeClass('never') + .removeClass('cloud-drive') + .removeClass('conversations') + .removeClass('unread-conversations'); + + + $elem.addClass('never'); + $elem.text(l[1051]); + }; + + var $promise = new MegaPromise(); + + $promise + .done(_renderLastInteractionDone) + .fail(_renderLastInteractionFail); + + if (_lastUserInteractionCacheInFlight[u_h] && _lastUserInteractionCacheInFlight[u_h] !== -1) { + $promise.resolve(_lastUserInteractionCacheInFlight[u_h]); + } + else if ( + _lastUserInteractionPromiseCache[u_h] && + _lastUserInteractionPromiseCache[u_h].state() === 'pending' + ) { + return _lastUserInteractionPromiseCache[u_h]; + } + else if (_lastUserInteractionCache[u_h] && _lastUserInteractionCacheInFlight[u_h] !== -1) { + $promise.resolve(_lastUserInteractionCache[u_h]); + } + else if ( + (!_lastUserInteractionCache[u_h] || _lastUserInteractionCacheInFlight[u_h] === -1) && + ( + !_lastUserInteractionPromiseCache[u_h] || + _lastUserInteractionPromiseCache[u_h].state() !== 'pending' + ) + ) { + if (_lastUserInteractionCacheInFlight[u_h] === -1) { + delete _lastUserInteractionCacheInFlight[u_h]; + } + _lastUserInteractionPromiseCache[u_h] = mega.attr.getArrayAttribute( + u_handle, + 'lstint', + u_h, + false, + true + ) + .always(function() { + _lastUserInteractionPromiseCache[u_h] = false; + }) + .done(function (res) { + if (typeof res !== 'number') { + if (typeof res === 'undefined') { + // detected legacy value which was not unserialised properly....should re-initialise as + // empty value, e.g. no last interaction with that user (would be rebuilt by chat messages + // and stuff) + $promise.reject(false); + } + else { + if (!triggeredBySet) { + _lastUserInteractionCache[u_h] = res; + } + $promise.resolve(res); + } + } + else { + $promise.reject(false); + console.error("Failed to retrieve last interaction cache from attrib, response: ", res); + } + }) + .fail(function(res) { + $promise.reject(res); + }); + } + else { + throw new Error("This should not happen."); + } + + return $promise; + }; + + /** + * Set the last interaction for a contact (throttled internally) + * + * @param u_h {String} user handle + * @param v {String} "$typeOfInteraction:$unixTimestamp" (see getLastInteractionWith for the types of int...) + * @returns {Deferred} + */ + var _realSetLastInteractionWith = function (u_h, v) { + + console.assert(u_handle, "missing u_handle, can't proceed"); + console.assert(u_h, "missing argument u_h, can't proceed"); + + if (!u_handle || !u_h) { + return MegaPromise.reject(EARGS); + } + + var isDone = false; + var $promise = createTimeoutPromise( + () => { + return isDone === true; + }, + 500, + 10000, + false, + `SetLastInteraction(${u_h})` + ); + + $promise.always(function () { + isDone = true; + }); + + + getLastInteractionWith(u_h, true) + .done(function (timestamp) { + if (_compareLastInteractionStamp(v, timestamp) === false) { + // older timestamp found in `v`, resolve the promise with the latest timestamp + $promise.resolve(v); + $promise.verify(); + } + else { + _lastUserInteractionCache[u_h] = v; + + $promise.resolve(_lastUserInteractionCache[u_h]); + + // TODO: check why `M.u[u_h]` might not be set... + Object(M.u[u_h]).ts = parseInt(v.split(":")[1], 10); + + $promise.verify(); + + mega.attr.setArrayAttribute( + 'lstint', + u_h, + _lastUserInteractionCache[u_h], + false, + true + ); + } + }) + .fail(function (res) { + if (res === false || res === -9) { + if (res === -9 && _lastUserInteractionCache === false) { + _lastUserInteractionCache = {}; + } + _lastUserInteractionCache[u_h] = v; + $promise.resolve(_lastUserInteractionCache[u_h]); + + Object(M.u[u_h]).ts = parseInt(v.split(":")[1], 10); + + mega.attr.setArrayAttribute( + 'lstint', + u_h, + _lastUserInteractionCache[u_h], + false, + true + ); + + $promise.verify(); + } + else { + $promise.reject(res); + console.error("setLastInteraction failed, err: ", res); + $promise.verify(); + } + }); + + return $promise; + + }; + + /** + * Internal method that flushes all queued setLastInteraction operations in one go. + * Usually triggered by `setLastInteractionWith` + * + * @private + */ + var _flushSetLastInteractionWith = function() { + timerSetLastInteraction = null; + + for (var i = throttledSetLastInteractionOps.length - 1; i >= 0; i--) { + var op = throttledSetLastInteractionOps[i]; + throttledSetLastInteractionOps.splice(i, 1); + _lastUserInteractionCacheInFlight[op[0]] = -1; + op[2].linkDoneAndFailTo(_realSetLastInteractionWith(op[0], op[1])); + } + }; + + + /** + * Set the last interaction for a contact (throttled internally) + * + * @param u_h {String} user handle + * @param v {String} "$typeOfInteraction:$unixTimestamp" (see getLastInteractionWith for the types of int...) + * @returns {Deferred|MegaPromise} + */ + var setLastInteractionWith = function(u_h, v) { + var promise = new MegaPromise(); + + // set on client side, to simulate a real commit + var ts = Object(M.u[u_h]).ts; + var newTs = parseInt(v.split(":")[1], 10); + if (ts < newTs) { + Object(M.u[u_h]).ts = newTs; + _lastUserInteractionCacheInFlight[u_h] = v; + } + + if (timerSetLastInteraction) { + clearTimeout(timerSetLastInteraction); + } + timerSetLastInteraction = setTimeout(_flushSetLastInteractionWith, SET_LAST_INTERACTION_TIMER); + + for (var i = 0; i < throttledSetLastInteractionOps.length; i++) { + var entry = throttledSetLastInteractionOps[i]; + var u_h2 = entry[0]; + var ts2 = parseInt(entry[1].split(":")[1], 10); + + if (u_h2 === u_h) { + if (newTs < ts2) { + return MegaPromise.resolve(entry[1]); + } + else { + entry[1] = v; + return entry[2]; + } + + } + } + throttledSetLastInteractionOps.push([u_h, v, promise]); + + return promise; + }; + + exportScope.setLastInteractionWith = setLastInteractionWith; + exportScope.getLastInteractionWith = getLastInteractionWith; +})(window); + +/** + * General common functionality for the new secure Registration and Login process including an + * improved Password Processing Function (PPF) now with PBKDF2-HMAC-SHA512, a per user salt and 100,000 iterations. + */ +var security = { + + /** Minimum password length across the app for registration and password changes */ + minPasswordLength: 8, + + /** + * Minimum password score across the app for registration and password changes. The score is calculated + * using the score from the ZXCVBN library and the range is from 0 - 4 (very weak, weak, medium, good, strong) + */ + minPasswordScore: 1, + + /** The number of iterations for the PPF (1-2 secs computation time) */ + numOfIterations: 100000, + + /** The length of the salt in bits */ + saltLengthInBits: 128, // 16 Bytes + + /** The desired length of the derived key from the PPF in bits */ + derivedKeyLengthInBits: 256, // 32 Bytes + + /** + * Checks if the password is valid and meets minimum strength requirements + * @param {String} password The user's password + * @param {String} confirmPassword The second password the user typed again as a confirmation to avoid typos + * @returns {true|String} Returns true if the password is valid, or the error message if not valid + */ + isValidPassword: function(password, confirmPassword) { + + 'use strict'; + // Check for a password + if (!password) { + return l.err_no_pass; // Enter a password + } + // Check if the passwords are not the same + if (password !== confirmPassword) { + return l[9066]; // Passwords don't match. Check and try again. + } + + // Check if there is whitespace at the start or end of the password + if (password !== password.trim()) { + return l[19855]; // Whitespace at the start or end of the password is not permitted. + } + + // Check for minimum password length + if (password.length < security.minPasswordLength) { + return l[18701]; // Your password needs to be at least x characters long. + } + + // Check that the estimator library is initialised + if (typeof zxcvbn === 'undefined') { + return l[1115] + ' ' + l[1116]; // The password strength verifier is still initializing. + } // Please try again in a few seconds. + + // Check for minimum password strength score from ZXCVBN library + if ((zxcvbn(password).score < security.minPasswordScore)) { + // Your password needs to be stronger. + // Make it longer, add special characters or use uppercase and lowercase letters. + return l[1104]; + } + + return true; + }, + + /** + * Converts a UTF-8 string to a byte array + * @param {String} string A string of any character including UTF-8 chars e.g. password123 + * @returns {Uint8Array} Returns a byte array + */ + stringToByteArray: function(string) { + + 'use strict'; + + return new TextEncoder('utf-8').encode(string); + }, + + /** + * A wrapper function to create the Client Random Value, Encrypted Master Key and Hashed Authentication Key. + * These values are needed for when registering, changing the user's password, recovering with Master Key and + * for parking the user's account. + * @param {String} password The password from the user + * @param {String} masterKeyArray32 The user's Master Key + * @param {Function} completeCallback The function to be run after the keys are created which will pass the + * the clientRandomValueBytes, encryptedMasterKeyArray32, + * hashedAuthenticationKeyBytes + * and derivedAuthenticationKeyBytes as the parameters + */ + deriveKeysFromPassword: function(password, masterKeyArray32, completeCallback) { + + 'use strict'; + + // Create the 128 bit (16 byte) Client Random Value and Salt + var saltLengthInBytes = security.saltLengthInBits / 8; + var clientRandomValueBytes = crypto.getRandomValues(new Uint8Array(saltLengthInBytes)); + var saltBytes = security.createSalt(clientRandomValueBytes); + + // Trim the password and convert it from ASCII/UTF-8 to a byte array + var passwordTrimmed = $.trim(password); + var passwordBytes = security.stringToByteArray(passwordTrimmed); + + // The number of iterations for the PPF and desired length in bits of the derived key + var iterations = security.numOfIterations; + var derivedKeyLength = security.derivedKeyLengthInBits; + + // Run the PPF + security.deriveKey(saltBytes, passwordBytes, iterations, derivedKeyLength, function(derivedKeyBytes) { + + // Get the first 16 bytes as the Encryption Key and the next 16 bytes as the Authentication Key + var derivedEncryptionKeyBytes = derivedKeyBytes.subarray(0, 16); + var derivedAuthenticationKeyBytes = derivedKeyBytes.subarray(16, 32); + + // Get a hash of the Authentication Key which the API will use for authentication at login time + var hashedAuthenticationKeyBytes = asmCrypto.SHA256.bytes(derivedAuthenticationKeyBytes); + + // Keep only the first 128 bits (16 bytes) of the Hashed Authentication Key + hashedAuthenticationKeyBytes = hashedAuthenticationKeyBytes.subarray(0, 16); + + // Convert the Derived Encryption Key to a big endian array of 32 bytes, then encrypt the Master Key + var derivedEncryptionKeyArray32 = base64_to_a32(ab_to_base64(derivedEncryptionKeyBytes)); + var cipherObject = new sjcl.cipher.aes(derivedEncryptionKeyArray32); + var encryptedMasterKeyArray32 = encrypt_key(cipherObject, masterKeyArray32); + + // Pass the Client Random Value, Encrypted Master Key and Hashed Authentication Key to the calling function + completeCallback(clientRandomValueBytes, encryptedMasterKeyArray32, hashedAuthenticationKeyBytes, + derivedAuthenticationKeyBytes); + }); + }, + + /** + * Creates a 128 bit Client Random Value and then derives the Salt from that. + * The salt is created from SHA-256('mega.nz' || 'Padding' || Client Random Value) + * @param {Uint8Array} clientRandomValueBytes The Client Random Value from which the salt will be constructed + * @returns {Uint8Array} Returns the 256 bit (32 bytes) salt as a byte array + */ + createSalt: function(clientRandomValueBytes) { + + 'use strict'; + + var saltString = 'mega.nz'; + var saltStringMaxLength = 200; // 200 chars for 'mega.nz' + padding + var saltHashInputLength = saltStringMaxLength + clientRandomValueBytes.length; // 216 bytes + + // Pad the salt string to 200 chars with the letter P + for (var i = saltString.length; i < saltStringMaxLength; i++) { + saltString += 'P'; + } + + // Cronvert the salt to a byte array + var saltStringBytes = security.stringToByteArray(saltString); + + // Concatenate the Client Random Value bytes to the end of the salt string bytes + var saltInputBytesConcatenated = new Uint8Array(saltHashInputLength); + saltInputBytesConcatenated.set(saltStringBytes); + saltInputBytesConcatenated.set(clientRandomValueBytes, saltStringMaxLength); + + // Hash the bytes to create the salt + var saltBytes = asmCrypto.SHA256.bytes(saltInputBytesConcatenated); + + // Return the salt which is needed for the PPF + return saltBytes; + }, + + /* + * Checks if Two-Factor Authentication is enabled for the user's account + * @param {String} email The user's email address + * @param {Function} completeCallback The function to run if successful + */ + checkIfTwoFactorAuthEnabled: function(email, completeCallback) { + + 'use strict'; + + // Make Multi-Factor Auth Get request + api_req({ a: 'mfag', e: email }, { + callback: function(result) { + + // If enabled, send back true + if (result === 1) { + completeCallback(true); + } + else { + completeCallback(false); + } + } + }); + }, + + /** + * Fetch the user's salt from the API + * @param {String} email The user's email address + * @param {Function} completeCallback The function to run if successful + */ + fetchAccountVersionAndSalt: function(email, completeCallback) { + + 'use strict'; + + // Send the email to the API + api_req({ a: 'us0', user: email }, { + callback: function(result) { + + // If successful + if (typeof result === 'object') { + + // Get the version and salt (there is no salt for old version 1 accounts) + var version = result.v; + var salt = (version >= 2) ? result.s : null; + + // Run the callback + completeCallback(version, salt); + } + else { + // Show an error dialog + if (is_mobile) { + mobile.messageOverlay.show(l[47], l[200]); + } + else { + // Desktop error dialog + msgDialog('warningb', l[47], l[200]); + } + + console.error('Error fetching user salt!', result); + } + } + }); + }, + + /** + * A wrapper function used for deriving a key from a password + * @param {Uint8Array} saltBytes The salt as a byte array + * @param {String} passwordBytes The password as a byte array + * @param {Number} iterations The cost factor / number of iterations of the PPF to perform + * @param {Number} derivedKeyLength The length of the derived key to create + * @param {Function} callback A function to call when the operation is complete + */ + deriveKey: function(saltBytes, passwordBytes, iterations, derivedKeyLength, callback) { + + 'use strict'; + + // If Web Crypto method supported, use that as it's nearly as fast as native + if (window.crypto && window.crypto.subtle && !is_microsoft) { + security.deriveKeyWithWebCrypto(saltBytes, passwordBytes, iterations, derivedKeyLength, callback); + } + else { + // Otherwise use asmCrypto which is the next fastest + security.deriveKeyWithAsmCrypto(saltBytes, passwordBytes, iterations, derivedKeyLength, callback); + } + }, + + /** + * Derive the key using the Web Crypto API + * @param {Uint8Array} saltBytes The salt as a byte array + * @param {Uint8Array} passwordBytes The password as a byte array + * @param {Number} iterations The cost factor / number of iterations of the PPF to perform + * @param {Number} derivedKeyLength The length of the derived key to create + * @param {Function} callback A function to call when the operation is complete + */ + deriveKeyWithWebCrypto: function(saltBytes, passwordBytes, iterations, derivedKeyLength, callback) { + + 'use strict'; + + // Import the password as the key + crypto.subtle.importKey( + 'raw', passwordBytes, 'PBKDF2', false, ['deriveBits'] + ) + .then(function(key) { + + // Required PBKDF2 parameters + var params = { + name: 'PBKDF2', + hash: 'SHA-512', + salt: saltBytes, + iterations: iterations + }; + + // Derive bits using the algorithm + return crypto.subtle.deriveBits(params, key, derivedKeyLength); + }) + .then(function(derivedKeyArrayBuffer) { + + // Convert to a byte array + var derivedKeyBytes = new Uint8Array(derivedKeyArrayBuffer); + + // Pass the derived key to the callback + callback(derivedKeyBytes); + }); + }, + + /** + * Derive the key using asmCrypto + * @param {Uint8Array} saltBytes The salt as a byte array + * @param {Uint8Array} passwordBytes The password as a byte array + * @param {Number} iterations The cost factor / number of iterations of the PPF to perform + * @param {Number} derivedKeyLength The length of the derived key to create + * @param {Function} callback A function to call when the operation is complete + */ + deriveKeyWithAsmCrypto: function(saltBytes, passwordBytes, iterations, derivedKeyLength, callback) { + + 'use strict'; + + // Convert the desired derived key length to bytes and derive the key + var keyLengthBytes = derivedKeyLength / 8; + var derivedKeyBytes = asmCrypto.PBKDF2_HMAC_SHA512.bytes(passwordBytes, saltBytes, iterations, keyLengthBytes); + + // Pass the derived key to the callback + callback(derivedKeyBytes); + }, + + /** + * A helper function for the check password feature (used when changing email or checking if they can remember). + * This function will only pass the Derived Encryption Key to the completion callback. + * @param {String} password The password from the user + * @param {String} [saltBase64] Account Authentication Salt, if applicable + * @returns {Promise} derivedEncryptionKeyArray32 + */ + getDerivedEncryptionKey: promisify(function(resolve, reject, password, saltBase64) { + 'use strict'; + + saltBase64 = saltBase64 === undefined ? u_attr && u_attr.aas || '' : saltBase64; + if (!saltBase64) { + return resolve(prepare_key_pw(password)); + } + + // Convert the salt and password to byte arrays + var saltArrayBuffer = base64_to_ab(saltBase64); + var saltBytes = new Uint8Array(saltArrayBuffer); + var passwordBytes = security.stringToByteArray(password); + + // The number of iterations for the PPF and desired length in bits of the derived key + var iterations = security.numOfIterations; + var derivedKeyLength = security.derivedKeyLengthInBits; + + // Run the PPF + security.deriveKey(saltBytes, passwordBytes, iterations, derivedKeyLength, function(derivedKeyBytes) { + + // Get the first 16 bytes as the Encryption Key + var derivedEncryptionKeyBytes = derivedKeyBytes.subarray(0, 16); + + // Convert the Derived Encryption Key to a big endian array of 32 bit values for decrypting the Master Key + var derivedEncryptionKeyArray32 = base64_to_a32(ab_to_base64(derivedEncryptionKeyBytes)); + + // Pass only the Derived Encryption Key back to the callback + resolve(derivedEncryptionKeyArray32); + }); + }), + + /** + * Complete the Park Account process + * @param {String} recoveryCode The recovery code from the email + * @param {String} recoveryEmail The email address that is being recovered + * @param {String} newPassword The new password for the account + * @param {Function} completeCallback The function to run when the callback completes + */ + resetUser: function(recoveryCode, recoveryEmail, newPassword, completeCallback) { + + 'use strict'; + + // Fetch the user's account version + security.fetchAccountVersionAndSalt(recoveryEmail, function(version) { + + // If using the new registration method (v2) + if (version === 2) { + + // Create fresh Master Key + api_create_u_k(); + + // Derive keys from the new password + security.deriveKeysFromPassword(newPassword, u_k, + function(clientRandomValueBytes, encryptedMasterKeyArray32, hashedAuthenticationKeyBytes) { + + // Convert Master Key, Hashed Authentication Key and Client Random Value to Base64 + var encryptedMasterKeyBase64 = a32_to_base64(encryptedMasterKeyArray32); + var hashedAuthenticationKeyBase64 = ab_to_base64(hashedAuthenticationKeyBytes); + var clientRandomValueBase64 = ab_to_base64(clientRandomValueBytes); + + // Create some random bytes to send to the API. This is not actually needed for the new v2 Park + // Account process. It was only used for old style registrations at confirmation time, which + // checked the password was correct locally by decrypting a known value and checking that + // value. ToDo: API team to remove need for the 'z' property in the 'erx' API request. + var ssc = Array(8); + for (var i = 8; i--;) { + ssc[i] = rand(0x100000000); + } + var sscString = a32_to_str(ssc); + var base64data = base64urlencode(sscString); + + // Run API request to park the account and start a new one under the same email + api_req({ + a: 'erx', + c: recoveryCode, + x: encryptedMasterKeyBase64, + y: { + crv: clientRandomValueBase64, + hak: hashedAuthenticationKeyBase64 + }, + z: base64data + }, + { callback: completeCallback }); + } + ); + } + else { + // Otherwise use the old reset/park method + api_resetuser({ callback: completeCallback }, recoveryCode, recoveryEmail, newPassword); + } + }); + }, + + /** + * Perform the Master Key re-encryption with a new password. If the password is passed to the function as null, + * then the function will just check the validity of the recovery code. The next step in the flow is for the user + * to change their password which will then call this function again with all the parameters. + * + * @param {String} recoveryCode The recovery code from the email + * @param {String} masterKeyArray32 The Master/Recovery Key entered by the user + * @param {String} recoveryEmail The email address that is being recovered + * @param {String|null} newPassword The new password for the account (optional) + * @param {Function} completeCallback The function to run when the callback completes + */ + resetKey: function(recoveryCode, masterKeyArray32, recoveryEmail, newPassword, completeCallback) { + + 'use strict'; + + // Fetch the user's account version + security.fetchAccountVersionAndSalt(recoveryEmail, function(version) { + + // If using the new registration method (v2) + if (version === 2) { + + // Check the recovery code + api_req({ + a: 'erx', + r: 'gk', + c: recoveryCode + }, + { + callback: function(result) { + + // If the private RSA key was returned + if (typeof result === 'string') { + + // If the decryption of the RSA private key failed, pass error back to callback + if (!verifyPrivateRsaKeyDecryption(result, masterKeyArray32)) { + completeCallback(EKEY); + } + + // Complete the reset of the user's password using the Master Key provided + else if (newPassword) { + security.completeResetKey(newPassword, recoveryCode, masterKeyArray32, + completeCallback); + } + else { + completeCallback(0); + } + } + else { + completeCallback(result); + } + } + }); + } + else { + // Otherwise use the old reset password by recovery key method + api_resetkeykey( + { result: completeCallback }, recoveryCode, masterKeyArray32, recoveryEmail, newPassword + ); + } + }); + }, + + /** + * Complete the reset of the user's password using the Master Key provided by the user + * @param {String} newPassword The new password for the account + * @param {String} recoveryCode The recovery code from the email + * @param {String} masterKeyArray32 The Master/Recovery Key entered by the user + * @param {Function} completeCallback The function to run when the callback completes + */ + completeResetKey: function(newPassword, recoveryCode, masterKeyArray32, completeCallback) { + + 'use strict'; + + // Derive keys from the new password + security.deriveKeysFromPassword(newPassword, masterKeyArray32, + function(clientRandomValueBytes, encryptedMasterKeyArray32, hashedAuthenticationKeyBytes) { + + // Convert Master Key, Hashed Authentication Key and Client Random Value to Base64 + var encryptedMasterKeyBase64 = a32_to_base64(encryptedMasterKeyArray32); + var hashedAuthenticationKeyBase64 = ab_to_base64(hashedAuthenticationKeyBytes); + var clientRandomValueBase64 = ab_to_base64(clientRandomValueBytes); + + // Run API request to park the account and start a new one under the same email + api_req({ + a: 'erx', + r: 'sk', + c: recoveryCode, + x: encryptedMasterKeyBase64, + y: { + crv: clientRandomValueBase64, + hak: hashedAuthenticationKeyBase64 + } + }, + { callback: completeCallback }); + } + ); + }, + + /** + * Check whether the provided password is valid to decrypt a key. + * @param {String|*} aPassword The password to test against. + * @param {String|*} aMasterKey The encrypted master key. + * @param {String|*} aPrivateKey The encrypted private key. + * @param {String|*} [aSalt] Account authentication salt, if applicable. + * @returns {Boolean|*} whether it succeed. + */ + verifyPassword: promisify(function(resolve, reject, aPassword, aMasterKey, aPrivateKey, aSalt) { + 'use strict'; + + if (typeof aPrivateKey === 'string') { + aPrivateKey = base64_to_a32(aPrivateKey); + } + + if (typeof aMasterKey === 'string') { + aMasterKey = [[aMasterKey, aSalt]]; + } + var keys = aMasterKey.concat(); + + (function _next() { + var pair = keys.pop(); + if (!pair) { + return reject(ENOENT); + } + + var mk = pair[0]; + var salt = pair[1]; + + security.getDerivedEncryptionKey(aPassword, salt || false) + .then(function(derivedKey) { + if (typeof mk === 'string') { + mk = base64_to_a32(mk); + } + + var decryptedMasterKey = decrypt_key(new sjcl.cipher.aes(derivedKey), mk); + var decryptedPrivateKey = decrypt_key(new sjcl.cipher.aes(decryptedMasterKey), aPrivateKey); + + if (crypto_decodeprivkey(a32_to_str(decryptedPrivateKey))) { + return resolve({k: decryptedMasterKey, s: salt}); + } + + onIdle(_next); + }) + .catch(function(ex) { + console.warn(mk, salt, ex); + onIdle(_next); + }); + })(); + }), + + /** + * Complete the email verification process + * @param {String} pwd The new password for the account. + * @param {String} code The code from the email notification. + * @returns {Promise} + */ + completeVerifyEmail: promisify(function(resolve, reject, pwd, code) { + 'use strict'; + + var req = {a: 'erx', c: code, r: 'v1'}; + var xhr = function(key, uh) { + req.y = uh; + req.x = a32_to_base64(key); + M.req(req).then(resolve).catch(reject); + }; + + // If using the new registration method (v2) + if (u_attr.aav > 1) { + req.r = 'v2'; + + security.deriveKeysFromPassword(pwd, u_k, tryCatch(function(crv, key, uh) { + req.z = ab_to_base64(crv); + xhr(key, ab_to_base64(uh)); + }, reject)); + } + else { + var aes = new sjcl.cipher.aes(prepare_key_pw(pwd)); + xhr(encrypt_key(aes, u_k), stringhash(u_attr.email.toLowerCase(), aes)); + } + }), + + /** + * Ask the user for email verification on account suspension. + * @param {String} [aStep] What step of the email verification should be triggered. + * @returns {undefined} + */ + showVerifyEmailDialog: function(aStep) { + 'use strict'; + var name = 'verify-email' + (aStep ? '-' + aStep : ''); + + if ($.hideTopMenu) { + $.hideTopMenu(); + } + + // abort any ongoing dialog operation that may would get stuck by receiving an whyamiblocked=700 + M.safeShowDialog.abort(); + + M.safeShowDialog(name, function() { + parsepage(pages.placeholder); + watchdog.registerOverrider('logout'); + + var $dialog = $('.mega-dialog.' + name); + if (!$dialog.length) { + $('#loading').addClass('hidden'); + parsepage(pages['dialogs-common']); + $dialog = $('.mega-dialog.' + name); + } + var showLoading = function() { + loadingDialog.show(); + $dialog.addClass('arrange-to-back'); + }; + var hideLoading = function() { + loadingDialog.hide(); + $dialog.removeClass('arrange-to-back'); + }; + var reset = function(step) { + hideLoading(); + closeDialog(); + + if (step === true) { + loadSubPage('login'); + } + else { + security.showVerifyEmailDialog(step && step.to); + } + }; + $('.mega-dialog:visible').addClass('hidden'); + + if (aStep === 'login-to-account') { + var code = String(page).substr(11); + + onIdle(showLoading); + console.assert(String(page).startsWith('emailverify')); + + M.req({a: 'erv', v: 2, c: code}) + .always(function(res) { + loadingDialog.hide(); + console.debug('erv', [res]); + + if (res === EEXPIRED || res === ENOENT) { + return msgDialog('warninga', l[135], res === EEXPIRED ? l[7719] : l[22128], false, reset); + } + if (!Array.isArray(res) || !res[6]) { + return msgDialog('warninga', l[135], l[47], res < 0 ? api_strerror(res) : l[253], reset); + } + + u_logout(true); + $dialog.removeClass('arrange-to-back'); + + u_handle = res[4]; + u_attr = {u: u_handle, email: res[1], privk: res[6].privk, evc: code, evk: res[6].k}; + + if (is_mobile) { + $('button.js-close', $dialog).addClass('hidden'); + $('.cancel-email-verify', $dialog).removeClass('hidden').rebind('click.cancel', function() { + loadSubPage("start"); + }); + } + else { + $('button.js-close', $dialog).removeClass('hidden').rebind('click.cancel', function() { + loadSubPage("start"); + }); + $('.cancel-email-verify', $dialog).addClass('hidden'); + } + + $('.mail', $dialog).val(u_attr.email); + $('button.next', $dialog).rebind('click.ve', function() { + var $input = $('.pass', $dialog); + var pwd = $input.val(); + + showLoading(); + security.verifyPassword(pwd, u_attr.evk, u_attr.privk) + .then(function(res) { + u_k = res.k; + u_attr.aav = 1 + !!res.s; + reset({to: 'set-new-pass'}); + }) + .catch(function(ex) { + hideLoading(); + console.debug(ex); + $input.megaInputsShowError(l[1102]).val('').focus(); + }); + + return false; + }); + }); + } + else if (aStep === 'set-new-pass') { + console.assert(u_attr && u_attr.evc, 'Invalid procedure...'); + + $('button.finish', $dialog).rebind('click.ve', function() { + var pw1 = $('input.pw1', $dialog).val(); + var pw2 = $('input.pw2', $dialog).val(); + + var error = function(msg) { + hideLoading(); + $('input', $dialog) + .val('').trigger('blur') + .first().trigger('input').megaInputsShowError(msg).trigger('focus'); + return false; + }; + + var pwres = security.isValidPassword(pw1, pw2); + if (pwres !== true) { + return error(pwres); + } + + showLoading(); + security.verifyPassword(pw1, u_attr.evk, u_attr.privk) + .then(function() { + // Do not allow to use a old known password + error(l[22675]); + }) + .catch(function(ex) { + if (ex !== ENOENT) { + console.error(ex); + return error(l[8982]); + } + + security.completeVerifyEmail(pw1, u_attr.evc) + .then(function() { + login_email = u_attr.email; + watchdog.unregisterOverrider('logout'); + + u_logout(true); + eventlog(99728); + loadSubPage('login'); + }) + .catch(function(ex) { + hideLoading(); + msgDialog('warninga', + l[135], + l[47], + ex < 0 ? api_strerror(ex) : ex, + reset.bind(null, false)); + }); + }); + + return false; + }); + } + else { + $('.send-email', $dialog).rebind('click.ve', function() { + $(this).unbind('click.ve').addClass('disabled'); + M.req('era').always(function(res) { + $('aside.status', $dialog).addClass('hidden'); + + if (res === 0) { + $('aside.status', $dialog).removeClass('hidden'); + } + else if (res === ETEMPUNAVAIL) { + msgDialog('warninga', l[135], l[23628], l[23629], loadSubPage.bind(null, 'contact')); + } + else { + msgDialog('warninga', l[135], l[47], api_strerror(res), loadSubPage.bind(null, 'contact')); + } + }); + return false; + }); + } + + var $inputs = $('input', $dialog); + $inputs.rebind('keypress.ve', function(ev) { + var key = ev.code || ev.key; + + if (key === 'Enter') { + if ($inputs.get(0) === this) { + $inputs.trigger('blur'); + $($inputs.get(1)).trigger('focus'); + } + else { + $('button.next, button.finish, button.send-email', $dialog).trigger('click'); + } + } + }); + + mega.ui.MegaInputs($inputs); + return $dialog; + }); + } +}; + + +/** + * Registration specific functionality for the new secure Registration process + */ +security.register = { + + /** Backup of the details to re-send the email if requested */ + sendEmailRequestParams: {}, + + /** + * Create new account registration + * @param {String} firstName The user's first name + * @param {String} lastName The user's last name + * @param {String} email The user's email address + * @param {String} password The user's password + * @param {Boolean} fromProPage Whether the registration started on the Pro page or not + * @param {Function} completeCallback A function to run when the registration is complete + */ + startRegistration: function(firstName, lastName, email, password, fromProPage, completeCallback) { + + 'use strict'; + + // Show loading dialog + loadingDialog.show(); + + // First create an ephemeral account and the Master Key (to be removed at a later date) + security.register.createEphemeralAccount(function() { + + // Derive the Client Random Value, Encrypted Master Key and Hashed Authentication Key + security.deriveKeysFromPassword(password, u_k, + function(clientRandomValueBytes, encryptedMasterKeyArray32, hashedAuthenticationKeyBytes) { + + // Encode parameters to Base64 before sending to the API + var sendEmailRequestParams = { + a: 'uc2', + n: base64urlencode(to8(firstName + ' ' + lastName)), // Name (used just for the email) + m: base64urlencode(email), // Email + crv: ab_to_base64(clientRandomValueBytes), // Client Random Value + k: a32_to_base64(encryptedMasterKeyArray32), // Encrypted Master Key + hak: ab_to_base64(hashedAuthenticationKeyBytes), // Hashed Authentication Key + v: 2 // Version of this protocol + }; + + // If this was a registration from the Pro page + if (fromProPage === true) { + sendEmailRequestParams.p = 1; + } + + // Send signup link email + security.register.sendSignupLink(sendEmailRequestParams, firstName, lastName, email, + completeCallback); + } + ); + }); + }, + + /** + * Create an ephemeral account + * @param {Function} callbackFunction The callback function to run once the ephemeral account is created + */ + createEphemeralAccount: function(callbackFunction) { + + 'use strict'; + + // Set a flag to check at the end of the registration process + if (is_mobile) { + localStorage.signUpStartedInMobileWeb = '1'; + } + + // If there is no ephemeral account already + if (u_type === false) { + + // Initialise local storage + u_storage = init_storage(localStorage); + + // Create anonymous ephemeral account + u_checklogin({ + checkloginresult: function(context, userType) { + + // Set the user type + u_type = userType; + + // Continue registering the account + callbackFunction(); + } + }, true); + } + + // If they already have an ephemeral account + else if (u_type === 0) { + + // Continue registering the account + callbackFunction(); + } + }, + + /** + * Start the registration process and send a signup link to the user + * @param {Object} sendEmailRequestParams An object containing the data to send to the API. + * @param {String} firstName The user's first name + * @param {String} lastName The user's last name + * @param {String} email The user's email + * @param {Function} completeCallback A function to run when the registration is complete + */ + sendSignupLink: function(sendEmailRequestParams, firstName, lastName, email, completeCallback) { + + 'use strict'; + + // Save the input variables so they can be re-used to resend the details with a different email + security.register.sendEmailRequestParams = { + firstName: firstName, + lastName: lastName + }; + + // Run the API request + api_req(sendEmailRequestParams, { + callback: function(result) { + + // Hide the loading spinner + loadingDialog.hide(); + + // If successful result, send additional information to the API for the name + if (result === 0) { + security.register.sendAdditionalInformation(firstName, lastName); + } + + // Run the callback requested by the calling function to show a check email dialog or show error + completeCallback(result, firstName, lastName, email); + } + }); + }, + + /** + * Cache registration data like name, email etc in case they refresh the page and need to resend the email + * @param {Object} registerData An object containing keys 'first', 'last', 'name', 'email' and optional 'password' + * for old style registrations. + */ + cacheRegistrationData: function(registerData) { + + 'use strict'; + + // Remove password from the object so it doesn't get saved to + // localStorage for the resend process. + + delete registerData.password; + + localStorage.awaitingConfirmationAccount = JSON.stringify(registerData); + + if (localStorage.voucher) { + const data = [localStorage.voucher, localStorage[localStorage.voucher] || -1]; + mega.attr.set('promocode', JSON.stringify(data), -2, true).dump(); + } + }, + + /** + * Repeat the registration process and send a signup link to the user via the new email address they entered + * @param {String} firstName The user's first name + * @param {String} lastName The user's last name + * @param {String} newEmail The user's corrected email + * @param {Function} completeCallback A function to run when the registration is complete + */ + repeatSendSignupLink: function(firstName, lastName, newEmail, completeCallback) { + + 'use strict'; + + // Re-encode the parameters to Base64 before sending to the API + var sendEmailRequestParams = { + a: 'uc2', + n: base64urlencode(to8(firstName + ' ' + lastName)), // Name (used just for the email) + m: base64urlencode(newEmail) // Email + }; + + // Run the API request + api_req(sendEmailRequestParams, { + callback: function(result) { + + // Hide the loading spinner + loadingDialog.hide(); + + // If successful result, show a dialog success + if (is_mobile && result === 0) { + mobile.messageOverlay.show(l[16351]); // The email was sent successfully. + } + else if (is_mobile && result < 0) { + mobile.messageOverlay.show(l[47]); // Oops, something went wrong. Sorry about that! + } + + // Run the callback requested by the calling function to show a check email dialog or whatever + completeCallback(result, firstName, lastName, newEmail); + } + }); + }, + + /** + * Sends additional information e.g. first name and last name to the API + * @param {String} firstName The user's first name + * @param {String} lastName The user's last name + */ + sendAdditionalInformation: function(firstName, lastName) { + + 'use strict'; + + // Set API request options + var options = { + a: 'up', + terms: 'Mq', + firstname: base64urlencode(to8(firstName)), + lastname: base64urlencode(to8(lastName)), + name2: base64urlencode(to8(firstName + ' ' + lastName)) + }; + + if (mega.affid) { + options.aff = mega.affid; + } + + // Send API request + api_req(options); + }, + + /** + * Verifies the email confirmation code after registering + * @param {String} confirmCode The confirm code from the registration email + * @param {Function} completeCallback The function to run when the email confirm code has been sent to the API + */ + verifyEmailConfirmCode: function(confirmCode, completeCallback) { + + 'use strict'; + + // Send the confirmation code back to the API + api_req({ a: 'ud2', c: confirmCode }, { + callback: function(result) { + + // If successful + if (typeof result === 'object') { + + // Decode the result (array index 0 = email, 1 = name, 2 = Base64 encoded user handle) + var email = base64urldecode(result[0]); + + // Pass the email back + completeCallback(result, email); + } + else { + // Pass the error code back + completeCallback(result); + } + } + }); + } +}; + + +/** + * Login specific functionality for the new secure Login process + */ +security.login = { + + /** Cache of the login email in case we need to resend after they have entered their two factor code */ + email: null, + + /** Cache of the login password in case we need to resend after they have entered their two factor code */ + password: null, + + /** Cache of the flag to remember that the user wants to remain logged in after they close the browser */ + rememberMe: false, + + /** Callback to run after login is complete */ + loginCompleteCallback: null, + + + /** + * Check which login method the user is using (either the old process or the new process) + * ToDo: Add check to the email field on the login page if it is prefilled or they finish typing to fetch the salt + * @param {String} email The user's email addresss + * @param {String} password The user's password as entered + * @param {String|null} pinCode The two-factor authentication PIN code (6 digit number), or null if not applicable + * @param {Boolean} rememberMe A boolean for if they checked the Remember Me checkbox on the login screen + * @param {Function} oldStartCallback A callback for starting the old login process + * @param {Function} newStartCallback A callback for starting the new login process + */ + checkLoginMethod: function(email, password, pinCode, rememberMe, oldStartCallback, newStartCallback) { + + 'use strict'; + + // Temporarily cache the email, password and remember me checkbox status + // in case we need to resend after they have entered their two factor code + security.login.email = email; + security.login.password = password; + security.login.rememberMe = rememberMe; + + // Fetch the user's salt from the API + security.fetchAccountVersionAndSalt(email, function(version, salt) { + + // If using the new method pass through the salt as well + if (version === 2) { + newStartCallback(email, password, pinCode, rememberMe, salt); + } + + // Otherwise using the old method + else if (version === 1) { + oldStartCallback(email, password, pinCode, rememberMe); + } + }); + }, + + /** + * Start the login using the new process + * @param {String} email The user's email addresss + * @param {String} password The user's password as entered + * @param {String|null} pinCode The two-factor authentication PIN code (6 digit number), or null if not applicable + * @param {Boolean} rememberMe A boolean for if they checked the Remember Me checkbox on the login screen + * @param {String} salt The user's salt as a Base64 URL encoded string + * @param {Function} loginCompleteCallback The final callback once the login is complete + */ + startLogin: function(email, password, pinCode, rememberMe, salt, loginCompleteCallback) { + + 'use strict'; + + // Convert the salt and password to byte arrays + var saltArrayBuffer = base64_to_ab(salt); + var saltBytes = new Uint8Array(saltArrayBuffer); + var passwordBytes = security.stringToByteArray(password); + + // The number of iterations for the PPF and desired length in bits of the derived key + var iterations = security.numOfIterations; + var derivedKeyLength = security.derivedKeyLengthInBits; + + // Set the callback to run after login is complete + security.login.loginCompleteCallback = loginCompleteCallback; + + // Run the PPF + security.deriveKey(saltBytes, passwordBytes, iterations, derivedKeyLength, function(derivedKeyBytes) { + + // Get the first 16 bytes as the Encryption Key and the next 16 bytes as the Authentication Key + var derivedEncryptionKeyBytes = derivedKeyBytes.subarray(0, 16); + var derivedAuthenticationKeyBytes = derivedKeyBytes.subarray(16, 32); + var authenticationKeyBase64 = ab_to_base64(derivedAuthenticationKeyBytes); + + // Convert the Derived Encryption Key to a big endian array of 32 bit values for decrypting the Master Key + var derivedEncryptionKeyArray32 = base64_to_a32(ab_to_base64(derivedEncryptionKeyBytes)); + + // Authenticate with the API + security.login.sendAuthenticationKey(email, pinCode, authenticationKeyBase64, derivedEncryptionKeyArray32); + }); + }, + + /** + * Authenticate with the API by sending the Authentication Key + * @param {String} email The user's email address + * @param {String|null} pinCode The two-factor authentication PIN code (6 digit number), or null if not applicable + * @param {String} authenticationKeyBase64 The 128 bit Authentication Key encdoded as URL encoded Base64 + * @param {Array} derivedEncryptionKeyArray32 A 128 bit key encoded as a big endian array of 32 bit values which + * was used to encrypt the Master Key + */ + sendAuthenticationKey: function(email, pinCode, authenticationKeyBase64, derivedEncryptionKeyArray32) { + + 'use strict'; + + // Check for too many login attempts + if (api_getsid.etoomany + 3600000 > Date.now() || location.host === 'webcache.googleusercontent.com') { + security.login.loginCompleteCallback(ETOOMANY); + return false; + } + + // Setup the login request + var requestVars = { a: 'us', user: email, uh: authenticationKeyBase64 }; + + // If the two-factor authentication code was entered by the user, add it to the request as well + if (pinCode !== null) { + requestVars.mfa = pinCode; + } + + // Send the Email and Authentication Key to the API + api_req(requestVars, { + callback: function(result) { + + // If successful + if (typeof result === 'object') { + + // Get values from Object + var temporarySessionIdBase64 = result.tsid; + var encryptedSessionIdBase64 = result.csid; + var encryptedMasterKeyBase64 = result.k; + var encryptedPrivateRsaKey = result.privk; + var userHandle = result.u; + + // Decrypt the Master Key + var encryptedMasterKeyArray32 = base64_to_a32(encryptedMasterKeyBase64); + var cipherObject = new sjcl.cipher.aes(derivedEncryptionKeyArray32); + var decryptedMasterKeyArray32 = decrypt_key(cipherObject, encryptedMasterKeyArray32); + + // If the temporary session ID is set then we need to generate RSA keys + if (typeof temporarySessionIdBase64 !== 'undefined') { + security.login.skipToGenerateRsaKeys(decryptedMasterKeyArray32, temporarySessionIdBase64); + } + else { + // Otherwise continue a regular login + security.login.decryptRsaKeyAndSessionId(decryptedMasterKeyArray32, encryptedSessionIdBase64, + encryptedPrivateRsaKey, userHandle); + } + } + else { + // Return failure + security.login.loginCompleteCallback(result); + } + } + }); + }, + + /** + * Sets some session variables and skips to the RSA Key Generation page and process + * @param {Array} masterKeyArray32 The raw unencrypted Master Key + * @param {String} temporarySessionIdBase64 The temporary session ID send from the API + */ + skipToGenerateRsaKeys: function(masterKeyArray32, temporarySessionIdBase64) { + + 'use strict'; + + // Set global values which are used everywhere + u_k = masterKeyArray32; + u_sid = temporarySessionIdBase64; + u_k_aes = new sjcl.cipher.aes(masterKeyArray32); + + // Set the Session ID for future API requests + api_setsid(temporarySessionIdBase64); + + // Set to localStorage as well + u_storage.k = JSON.stringify(masterKeyArray32); + u_storage.sid = temporarySessionIdBase64; + + // Redirect to key generation page + loadSubPage('key'); + }, + + /** + * Decrypts the RSA private key and the RSA encrypted session ID + * @param {Array} masterKeyArray32 The raw unencrypted Master Key + * @param {String} encryptedSessionIdBase64 The encrypted session ID as a Base64 string + * @param {String} encryptedPrivateRsaKeyBase64 The private RSA key as a Base64 string + * @param {String} userHandle The encrypted user handle from the 'us' response + */ + decryptRsaKeyAndSessionId: function(masterKeyArray32, encryptedSessionIdBase64, + encryptedPrivateRsaKeyBase64, userHandle) { + + 'use strict'; + + const errobj = {}; + var keyAndSessionData = false; + + try { + + if (typeof userHandle !== 'string' || userHandle.length !== 11) { + eventlog(99752, JSON.stringify([1, 11, userHandle])); + + console.error("Incorrect user handle in the 'us' response", userHandle); + + Soon(() => { + msgDialog('warninga', l[135], l[8853], userHandle); + }); + + return false; + } + + // Decrypt and decode the RSA Private Key + var cipherObject = new sjcl.cipher.aes(masterKeyArray32); + var encryptedPrivateRsaKeyArray32 = base64_to_a32(encryptedPrivateRsaKeyBase64); + var decryptedPrivateRsaKey = decrypt_key(cipherObject, encryptedPrivateRsaKeyArray32); + var decryptedPrivateRsaKeyBigEndianString = a32_to_str(decryptedPrivateRsaKey); + + const decodedPrivateRsaKey = crypto_decodeprivkey(decryptedPrivateRsaKeyBigEndianString, errobj); + if (!decodedPrivateRsaKey) { + console.error('RSA key decoding failed (%o)..', errobj); + + eventlog(99752, JSON.stringify([1, 10, errobj])); + + Soon(() => { + msgDialog('warninga', l[135], l[8853], JSON.stringify(errobj)); + }); + + return false; + } + + // Decrypt the Session ID using the RSA Private Key + var encryptedSessionIdBytes = base64urldecode(encryptedSessionIdBase64); + var decryptedSessionId = crypto_rsadecrypt(encryptedSessionIdBytes, decodedPrivateRsaKey); + var decryptedSessionIdSubstring = decryptedSessionId.substr(0, 43); + var decryptedSessionIdBase64 = base64urlencode(decryptedSessionIdSubstring); + + // Get the user handle from the decrypted Session ID (11 bytes starting at offset 16 bytes) + const sessionIdUserHandle = decryptedSessionId.substring(16, 27); + + // Add a check that the decrypted sid and res.u aren't shorter than usual before making the comparison. + // Otherwise, we could construct an oracle based on shortened csids with single-byte user handles. + if (decryptedSessionId.length !== 255) { + eventlog(99752, JSON.stringify([1, 13, userHandle, decryptedSessionId.length])); + + throw new Error(`Incorrect length of Session ID ${decryptedSessionId.length}`); + } + + // Check that the user handle included in the Session ID matches the one sent in the 'us' response + if (sessionIdUserHandle !== userHandle) { + eventlog(99752, JSON.stringify([1, 14, userHandle])); + + throw new Error(`User handle mismatch! us-req:"${userHandle}" != session:"${sessionIdUserHandle}"`); + } + + // Set the data + keyAndSessionData = [masterKeyArray32, decryptedSessionIdBase64, decodedPrivateRsaKey]; + } + catch (ex) { + if (!eventlog.sent['99752']) { + eventlog(99752, JSON.stringify([1, 12, userHandle, errobj, String(ex).split('\n')[0]])); + } + + console.error('Error decrypting or decoding the private RSA key or Session ID!', ex); + + // Show an error dialog + Soon(() => { + msgDialog('warninga', l[135], l[8853], `${ex}`); + }); + + return false; + } + + // Continue with the flow + security.login.setSessionVariables(keyAndSessionData); + }, + + /** + * Set the session variables and complete the login + * @param {Array} keyAndSessionData A basic array consisting of: + * [ + * {Array} The raw unencrypted Master Key, + * {String} The decrypted Session ID as a Base64 string, + * {Array} The decoded RSA Private Key as an array of parts + * ] + */ + setSessionVariables: function(keyAndSessionData) { + 'use strict'; + + // Check if the Private Key and Session ID were decrypted successfully + if (keyAndSessionData === false) { + security.login.loginCompleteCallback(false); + return false; + } + + // Set variables + var masterKeyArray32 = keyAndSessionData[0]; + var decryptedSessionIdBase64 = keyAndSessionData[1]; + var decodedPrivateRsaKey = keyAndSessionData[2]; + + // Set flag + localStorage.wasloggedin = true; + + // Remove all previous login data + u_logout(); + + // Use localStorage if the user checked the Remember Me checkbox, otherwise use temporary sessionStorage + u_storage = init_storage(security.login.rememberMe ? localStorage : sessionStorage); + + // Store the Master Key and Session ID + u_storage.k = JSON.stringify(masterKeyArray32); + u_storage.sid = decryptedSessionIdBase64; + + // Notify other tabs of login + watchdog.notify('login', [!security.login.rememberMe && masterKeyArray32, decryptedSessionIdBase64]); + + // Store the RSA private key + if (decodedPrivateRsaKey) { + u_storage.privk = base64urlencode(crypto_encodeprivkey(decodedPrivateRsaKey)); + } + + // Cleanup temporary login variables + security.login.email = null; + security.login.password = null; + security.login.rememberMe = false; + + // Continue to perform 'ug' request and afterwards run the loginComplete callback + u_checklogin4(u_storage.sid) + .then((res) => { + security.login.loginCompleteCallback(res); + + // Logging to see how many people are signing in + eventlog(is_mobile ? 99629 : 99630); + + // Broadcast login event + mBroadcaster.sendMessage('login', keyAndSessionData); + + return res; + }) + .dump('sec.login'); + }, + + /** + * Handles common errors like Two-Factor PIN issues, suspended accounts, + * too many login attempts and incomplete registration + * @param {Number} result A negative number if there was an error, or positive if login was successful + * @param {type} oldStartLoginCallback + * @param {type} newStartLoginCallback + * @returns {Boolean} Returns true if the error was handled by this function, otherwise false and it will continue + */ + checkForCommonErrors: function(result, oldStartLoginCallback, newStartLoginCallback) { + + 'use strict'; + + // Reset the 2FA dialog back to default UI + twofactor.loginDialog.resetState(); + + // If the Two-Factor Auth PIN is required + if (result === EMFAREQUIRED) { + + // Request the 2FA PIN by showing the dialog, then after that it will re-run this function + twofactor.loginDialog.init(oldStartLoginCallback, newStartLoginCallback); + return true; + } + + // If there was a 2FA error, show a message that the PIN code was incorrect and clear the text field + else if (result === EFAILED) { + twofactor.loginDialog.showVerificationError(); + return true; + } + + // Check for suspended account + else if (result === EBLOCKED) { + twofactor.loginDialog.closeDialog(); + msgDialog('warninga', l[6789], l[730]); + return true; + } + + // Check for too many login attempts + else if (result === ETOOMANY) { + twofactor.loginDialog.closeDialog(); + api_getsid.etoomany = Date.now(); + api_getsid.warning(); + return true; + } + + // Check for incomplete registration + else if (result === EINCOMPLETE) { + if (is_mobile) { + mobile.messageOverlay.show(l[882], l[9082]); + } + else { + twofactor.loginDialog.closeDialog(); + msgDialog('warningb', l[882], l[9082]); // This account has not completed the registration + } + + return true; + } + else { + // Not applicable to this function + return false; + } + } +}; + + +/** + * Common functionality for desktop/mobile webclient for changing the password using the old and new processes + */ +security.changePassword = { + + /** + * Change the user's password using the old method + * @param {String} newPassword The new password + * @param {String|null} twoFactorPin The 2FA PIN code or null if not applicable + * @param {Function} completeCallback The function to run when complete (to update the UI) + */ + oldMethod: function(newPassword, twoFactorPin, completeCallback) { + + 'use strict'; + + // Otherwise change the password using the old method + var pw_aes = new sjcl.cipher.aes(prepare_key_pw(newPassword)); + var encryptedMasterKeyBase64 = a32_to_base64(encrypt_key(pw_aes, u_k)); + var userHash = stringhash(u_attr.email.toLowerCase(), pw_aes); + + // Prepare the request + var requestParams = { + a: 'up', + k: encryptedMasterKeyBase64, + uh: userHash + }; + + // If the 2FA PIN was entered, send it with the request + if (twoFactorPin !== null) { + requestParams.mfa = twoFactorPin; + } + + // Make API request to change the password + api_req(requestParams, { + callback: function(result) { + + // If successful, update user attribute key property with the Encrypted Master Key + if (result) { + u_attr.k = encryptedMasterKeyBase64; + } + + // Update UI + completeCallback(result); + } + }); + }, + + /** + * Change the user's password using the new method + * @param {String} newPassword The new password + * @param {String|null} twoFactorPin The 2FA PIN code or null if not applicable + * @param {Function} completeCallback The function to run when complete (to update the UI) + */ + newMethod: function(newPassword, twoFactorPin, completeCallback) { + + 'use strict'; + + // Create the Client Random Value, Encrypted Master Key and Hashed Authentication Key + security.deriveKeysFromPassword(newPassword, u_k, + function(clientRandomValueBytes, encryptedMasterKeyArray32, hashedAuthenticationKeyBytes) { + + // Convert to Base64 + var encryptedMasterKeyBase64 = a32_to_base64(encryptedMasterKeyArray32); + var hashedAuthenticationKeyBase64 = ab_to_base64(hashedAuthenticationKeyBytes); + var clientRandomValueBase64 = ab_to_base64(clientRandomValueBytes); + var saltBase64 = ab_to_base64(security.createSalt(clientRandomValueBytes)); + + // Prepare the request + var requestParams = { + a: 'up', + k: encryptedMasterKeyBase64, + uh: hashedAuthenticationKeyBase64, + crv: clientRandomValueBase64 + }; + + // If the 2FA PIN was entered, send it with the request + if (twoFactorPin !== null) { + requestParams.mfa = twoFactorPin; + } + + // Send API request to change password + api_req(requestParams, { + callback: function(result) { + + // If successful, update global user attributes key and salt as the 'ug' request is not re-done + if (result) { + u_attr.k = encryptedMasterKeyBase64; + u_attr.aas = saltBase64; + } + + // Update UI + completeCallback(result); + } + }); + } + ); + }, + + isPasswordTheSame: function(newPassword, method) { + "use strict"; + var operation = new MegaPromise(); + // registration v2 + if (method === 2) { + if (!u_attr || typeof u_attr.aas === "undefined" || typeof u_attr.k === "undefined" + || !u_k) { + return operation.reject(0); + } + + var saltBytes = base64_to_ab(u_attr.aas); + var passwordBytes = security.stringToByteArray($.trim(newPassword)); + + security.deriveKey(saltBytes, passwordBytes, security.numOfIterations, + security.derivedKeyLengthInBits, function(derivedKeyBytes) { + + // callback could be Promise based or not + var derivedEncryptionKeyBytes = derivedKeyBytes.subarray(0, 16); + var derivedEncryptionKeyArray32 = base64_to_a32(ab_to_base64(derivedEncryptionKeyBytes)); + var cipherObject = new sjcl.cipher.aes(derivedEncryptionKeyArray32); + var encryptedMasterKeyArray32 = encrypt_key(cipherObject, u_k); + var encryptedMasterKeyBase64 = a32_to_base64(encryptedMasterKeyArray32); + + if (u_attr.k === encryptedMasterKeyBase64) { + return operation.reject(1); + } + else { + return operation.resolve(); + } + }); + return operation; + } + else { + var pw_aes = new sjcl.cipher.aes(prepare_key_pw(newPassword)); + var encryptedMasterKeyBase64 = a32_to_base64(encrypt_key(pw_aes, u_k)); + + if (u_attr.k === encryptedMasterKeyBase64) { + return operation.reject(1); + } + else { + return operation.resolve(); + } + } + } +}; + +/** + * Two-Factor Authentication logic for logging in with 2FA, setting up 2FA, disabling etc. + */ + +/** + * Generic functions for the desktop code + */ +var twofactor = { + + /** + * Checks if Two-Factor Authentication functionality is enabled for all users + * i.e. the user is allowed to see the 2FA section and enable/disable 2FA. + * @returns {Boolean} Returns true if enabled, false if not. + */ + isEnabledGlobally: function() { + + 'use strict'; + + // If the localStorage override is set, use that on/off value for testing + if (localStorage.getItem('twoFactorAuthEnabled') !== null) { + return (localStorage.getItem('twoFactorAuthEnabled') === '1') ? true : false; + } + + return mega.flags.mfae; + }, + + /** + * Checks if 2FA is enabled on the user's account + * @param {Function} callbackFunction The function to call when the results are returned, + * it passes the result of true for enabled and false for disabled + */ + isEnabledForAccount: function(callbackFunction) { + + 'use strict'; + + loadingDialog.show(); + + // Make Multi-Factor Auth Get request + api_req({ a: 'mfag', e: u_attr.email }, { + callback: function(result) { + + loadingDialog.hide(); + + // Pass the result to the callback + if (result === 1) { + callbackFunction(true); + } + else { + callbackFunction(false); + } + } + }); + } +}; + +/** + * Logic for the dialog where they enter a code for logging in + */ +twofactor.loginDialog = { + + /** + * Intialise the dialog + * @param {Function} oldStartLoginCallback The old registration method start login callback to run after 2FA verify + * @param {Function} newStartLoginCallback The new registration method start login callback to run after 2FA verify + */ + init: function(oldStartLoginCallback, newStartLoginCallback) { + + 'use strict'; + + // Show the dialog + var $dialog = $('.mega-dialog.verify-two-factor-login'); + + // Show the modal dialog + $dialog.removeClass('hidden'); + fm_showoverlay(); + + // Initialise functionality + this.initKeyupFunctionality(); + this.initSubmitButton(oldStartLoginCallback, newStartLoginCallback); + this.initLostAuthenticatorDeviceButton(); + this.initCloseButton(); + }, + + /** + * Initialises keyup/blur functionality on the input field to check the PIN as it's being entered + */ + initKeyupFunctionality: function() { + + 'use strict'; + + // Cache selectors + var $dialog = $('.mega-dialog.verify-two-factor-login'); + var $pinCodeInput = $dialog.find('.pin-input'); + var $submitButton = $dialog.find('.submit-button'); + var $warningText = $dialog.find('.warning-text-field'); + + // On keyup or clicking out of the text field + $pinCodeInput.off('keyup blur').on('keyup blur', function(event) { + + // If Enter key is pressed, submit the login code + if (event.keyCode === 13) { + $submitButton.trigger('click'); + } + + // Hide previous warnings for incorrect PIN codes + $warningText.addClass('v-hidden'); + + // Trim whitespace from the ends of the PIN entered + var pinCode = $pinCodeInput.val(); + var trimmedPinCode = $.trim(pinCode); + + // If empty, grey out the button so it appears unclickable + if (trimmedPinCode === '' || trimmedPinCode.length !== 6 || Number.isInteger(trimmedPinCode)) { + $submitButton.removeClass('active'); + } + else { + // Otherwise how the button as red/clickable + $submitButton.addClass('active'); + } + }); + + // Put the focus in the PIN input field + $pinCodeInput.trigger('focus'); + }, + + /** + * Initialise the Submit button + * @param {Function} oldStartLoginCallback The old registration method start login callback + * @param {Function} newStartLoginCallback The new registration method start login callback + */ + initSubmitButton: function(oldStartLoginCallback, newStartLoginCallback) { + + 'use strict'; + + // Cache selectors + var $dialog = $('.mega-dialog.verify-two-factor-login'); + var $pinCodeInput = $dialog.find('.pin-input'); + var $submitButton = $dialog.find('.submit-button'); + + // On Submit button click + $submitButton.rebind('click', function() { + + // Get the Google Authenticator PIN code from the user + var pinCode = $.trim($pinCodeInput.val()); + + // Get cached data from the login form + var email = security.login.email.trim(); + var password = security.login.password; + var rememberMe = security.login.rememberMe; + + // Show loading spinner on the buttons + $submitButton.addClass('loading'); + + // Check if using old/new login method and log them in + security.login.checkLoginMethod(email, password, pinCode, rememberMe, + oldStartLoginCallback, + newStartLoginCallback); + }); + }, + + /** + * Initialise the Lost Authenticator Device button + */ + initLostAuthenticatorDeviceButton: function() { + + 'use strict'; + + // Cache selectors + var $dialog = $('.mega-dialog.verify-two-factor-login'); + var $lostDeviceButton = $dialog.find('.lost-authenticator-button'); + + // On button click + $lostDeviceButton.rebind('click', function() { + + // Load the Recovery page where they can recover using their Recovery Key + loadSubPage('recovery'); + }); + }, + + /** + * Initialise the Close button to close the overlay + */ + initCloseButton: function() { + + 'use strict'; + + // Show the dialog + var $dialog = $('.mega-dialog.verify-two-factor-login'); + var $closeButton = $('button.js-close', $dialog); + + // On click of the close and back buttons + $closeButton.rebind('click', function() { + + // Close the modal dialog + twofactor.loginDialog.closeDialog(); + }); + }, + + /** + * Shows a verification error on the 2FA dialog when there was an incorrect PIN + */ + showVerificationError: function() { + + 'use strict'; + + var $dialog = $('.mega-dialog.verify-two-factor-login'); + var $warningText = $dialog.find('.warning-text-field'); + var $pinCodeInput = $dialog.find('.pin-input'); + var $submitButton = $dialog.find('.submit-button'); + + // Re-show the background overlay which is removed from loading dialog being hidden, + // then show a message that the PIN code was incorrect and clear the text field + fm_showoverlay(); + $submitButton.removeClass('loading'); + $warningText.removeClass('v-hidden'); + $pinCodeInput.val(''); + + // Put the focus back in the PIN input field + $pinCodeInput.trigger('focus'); + }, + + /** + * Reset the two-factor login dialog's user interface back to its default. + * Useful if there was an error during the login/verification process. + */ + resetState: function() { + + 'use strict'; + + var $dialog = $('.mega-dialog.verify-two-factor-login'); + var $warningText = $dialog.find('.warning-text-field'); + var $pinCodeInput = $dialog.find('.pin-input'); + var $submitButton = $dialog.find('.submit-button'); + + // Hide loading spinner, warning text and clear the text input + $submitButton.removeClass('loading'); + $warningText.addClass('v-hidden'); + $pinCodeInput.val(''); + }, + + /** + * Close the dialog + */ + closeDialog: function() { + + 'use strict'; + + var $dialog = $('.mega-dialog.verify-two-factor-login'); + + // Close the modal dialog + $dialog.addClass('hidden'); + fm_hideoverlay(); + } +}; + + +/** + * Functions for enabling and displaying 2FA in the My Account section, Security tab + */ +twofactor.account = { + + /** + * Initialise the 2FA section on the page + */ + init: function() { + + 'use strict'; + + // Check if disabled/enabled + this.fetchAndDisplayTwoFactorAuthStatus(); + }, + + /** + * Displays the current Two-Factor Authentication status (enabled/disabled) + */ + fetchAndDisplayTwoFactorAuthStatus: function() { + + 'use strict'; + + var $twoFactorSection = $('.account.two-factor-authentication'); + var $button = $twoFactorSection.find('.enable-disable-2fa-button'); + + // Check if 2FA is actually enabled on the API for everyone + if (twofactor.isEnabledGlobally()) { + + // Show the 2FA section + $twoFactorSection.removeClass('hidden'); + + // Check if 2FA is enabled on their account + twofactor.isEnabledForAccount(function(result) { + // If enabled, show red button, disable PIN entry text box and Deactivate text + if (result) { + $button.addClass('toggle-on enabled').trigger('update.accessibility'); + } + else { + // Otherwise show green button and Enable text + $button.removeClass('toggle-on enabled').trigger('update.accessibility'); + } + + // Init the click handler now for the button now that the enabled/disabled status has been retrieved + twofactor.account.initEnableDeactivateButton(); + }); + } + }, + + /** + * Initialises the enable/deactivate 2FA button + */ + initEnableDeactivateButton: function() { + + 'use strict'; + + var $accountPageTwoFactorSection = $('.account.two-factor-authentication'); + var $button = $accountPageTwoFactorSection.find('.enable-disable-2fa-button'); + + // On button click + $button.rebind('click', function() { + + // If 2FA is enabled + if ($button.hasClass('enabled')) { + // Show the verify 2FA dialog to collect the user's PIN + twofactor.verifyActionDialog.init(function(twoFactorPin) { + // Disable 2FA + twofactor.account.disableTwoFactorAuthentication(twoFactorPin); + }); + } + else { + // Setup 2FA + twofactor.setupDialog.init(); + } + }); + }, + + /** + * Disable the Two Factor Authentication + */ + disableTwoFactorAuthentication: function(twoFactorPin) { + + 'use strict'; + + loadingDialog.show(); + + // Run Multi-Factor Auth Disable (mfad) request + api_req({ a: 'mfad', mfa: twoFactorPin }, { + callback: function(response) { + + loadingDialog.hide(); + + // The Two-Factor has already been disabled + if (response === ENOENT) { + msgDialog('warninga', '', l.two_fa_already_off_title, l.two_fa_already_off_text, () => { + // Refresh the account 2FA status + twofactor.account.init(); + }); + } + else if (response < 0) { + + // If there was an error, show a message that the code was incorrect + msgDialog('warninga', '', l.two_fa_cannot_disable_title, l.two_fa_cannot_disable_text); + } + else { + // Refresh the account 2FA status to show it's deactivated + twofactor.account.init(); + } + } + }); + } +}; + + +/** + * The dialog to start the 2FA activation process + */ +twofactor.setupDialog = { + + /** jQuery selector for this dialog */ + $dialog: null, + + /** + * Intialise the dialog + */ + init: function() { + + 'use strict'; + + // Cache selector + this.$dialog = $('.two-factor-dialog.setup-two-factor'); + + // Setup functionality + this.getSharedSecret(); + this.initNextButton(); + this.initCloseButton(); + this.initNoAuthenticatorAppButton(); + + // Show the dialog + this.$dialog.removeClass('hidden'); + fm_showoverlay(); + }, + + /** + * Setup the Two-Factor Authentication by getting a shared secret from the API + */ + getSharedSecret: function() { + + 'use strict'; + + // Cache selectors + var $seedInput = this.$dialog.find('.two-factor-qr-seed'); + var $qrCode = this.$dialog.find('.two-factor-qr-code'); + + // Run Multi-Factor Auth Setup (mfas) request + api_req({ a: 'mfas' }, { + callback: function(response) { + + // If the Two-Factor has already been setup, show a warning dialog + if (response === EEXIST) { + msgDialog( + 'warninga', + l[19219], + l['2fa_already_enabled'], + '', + function() { + // Close the dialog on click of OK button + twofactor.setupDialog.closeDialog(); + } + ); + + return false; + } + + // Set Base32 seed into text box + $seedInput.val(response); + + // Configure the QR code rendering library + // Appears as: MEGA (name@email.com) in authenticator app + var options = { + width: 224, + height: 224, + correctLevel: QRErrorCorrectLevel.H, // High + background: '#f2f2f2', + foreground: '#151412', + text: 'otpauth://totp/MEGA:' + u_attr.email + '?secret=' + response + '&issuer=MEGA' + }; + + // Render the QR code + $qrCode.text('').qrcode(options); + } + }); + }, + + /** + * Initialise the Next button to go to the Verify Setup dialog + */ + initNextButton: function() { + + 'use strict'; + + // On button click + this.$dialog.find('.two-factor-next-btn').rebind('click', function() { + + // Close the current dialog and open the verify dialog + twofactor.setupDialog.closeDialog(); + twofactor.verifySetupDialog.init(); + }); + }, + + /** + * Initialise the close icon in the header to close the dialog + */ + initCloseButton: function() { + + 'use strict'; + + // On button click, close the dialog + this.$dialog.find('button.js-close').rebind('click', function() { + + twofactor.setupDialog.closeDialog(); + }); + }, + + /** + * Closes the dialog + */ + closeDialog: function() { + + 'use strict'; + + // Hide the dialog and background + this.$dialog.addClass('hidden'); + fm_hideoverlay(); + }, + + /** + * Initialise the Don't have an authenticator app? button to open the Select Authenticator App tooltip + */ + initNoAuthenticatorAppButton: function() { + + 'use strict'; + + var $noAuthAppButton = this.$dialog.find('.no-auth-app-button'); + var $authAppSelectDialog = $('.auth-app-select-tooltip'); + + // On button click + $noAuthAppButton.rebind('click', function() { + + // Get the absolute position of the button, the width of the button and dialog + var buttonOffset = $noAuthAppButton.offset(); + var buttonWidth = $noAuthAppButton.width(); + var dialogWidth = $authAppSelectDialog.outerWidth(); + + // Put the dialog in the middle of the button horizontally + var offsetMiddleOfButton = buttonOffset.left + (buttonWidth / 2); + var leftOffset = offsetMiddleOfButton - (dialogWidth / 2); + + // Move the dialog down below the button text (14px text height + 10px top margin) + var topOffset = buttonOffset.top + 14 + 10; + + // Show the tooltip above the Select Authenticator app dialog and below the button + $authAppSelectDialog.css({ top: topOffset, left: leftOffset }).removeClass('hidden'); + + // Initialise the handler to close the tooltip + twofactor.setupDialog.initTooltipClose(); + + // Prevent click closing the tooltip straight away + return false; + }); + }, + + /** + * Initialise the click handler to close the tooltip if they click anywhere in or out of the tooltip or press the + * Esc key. The authenticator app buttons/hyperlinks should still open the link in a new tab/window regardless. + */ + initTooltipClose: function() { + + 'use strict'; + + // If there is a click anywhere on the page + $(document).rebind('click.closeauthapptooltip', function() { + + // Close the tooltip + $('.auth-app-select-tooltip').addClass('hidden'); + + // Remove the click handler + $(document).off('click.closeauthapptooltip'); + }); + + // If there is a keypress + $(document).rebind('keyup.closeauthapptooltip', function(event) { + + // If the Esc key was pressed + if (event.keyCode === 27) { + + // Close the tooltip + $('.auth-app-select-tooltip').addClass('hidden'); + + // Remove the keyup handler + $(document).off('keyup.closeauthapptooltip'); + } + }); + } +}; + + +/** + * The dialog to verify the 2FA activation process was set up correctly + */ +twofactor.verifySetupDialog = { + + /** jQuery selector for this dialog */ + $dialog: null, + + /** + * Intialise the dialog + */ + init: function() { + + 'use strict'; + + // Cache selector + this.$dialog = $('.two-factor-dialog.setup-two-factor-verify'); + + // Setup functionality + this.resetToDefault(); + this.initCloseButton(); + this.initKeyupFunctionality(); + this.initBackButton(); + this.initNextButton(); + + // Show the dialog + this.$dialog.removeClass('hidden'); + fm_showoverlay(); + + // Put the focus in the PIN input field after its visible + this.$dialog.find('.pin-input').trigger('focus'); + }, + + /** + * Reset the dialog to default state if it is re-opened + */ + resetToDefault: function() { + + 'use strict'; + + var $pinCode = this.$dialog.find('.pin-input'); + var $warningText = this.$dialog.find('.information-highlight.warning'); + var $successText = this.$dialog.find('.information-highlight.success'); + var $closeButton = this.$dialog.find('button.js-close'); + + // Clear the text input, remove the warning/success boxes, unhide the close button + $pinCode.val(''); + $warningText.addClass('hidden'); + $successText.addClass('hidden'); + $closeButton.removeClass('hidden'); + }, + + /** + * Initialise the close icon in the header to close the dialog + */ + initCloseButton: function() { + + 'use strict'; + + // On button click, close the dialog + this.$dialog.find('button.js-close').rebind('click', function() { + + twofactor.verifySetupDialog.closeDialog(); + }); + }, + + /** + * Closes the dialog + */ + closeDialog: function() { + + 'use strict'; + + // Hide the dialog and background + this.$dialog.addClass('hidden'); + fm_hideoverlay(); + }, + + /** + * Initialises keyup/blur functionality on the input field to check the PIN as it's being entered + */ + initKeyupFunctionality: function() { + + 'use strict'; + + // Cache selectors + var $pinCodeInput = this.$dialog.find('.pin-input'); + var $warningText = this.$dialog.find('.information-highlight.warning'); + var $verifyButton = this.$dialog.find('.next-button'); + + // On keyup or clicking out of the text field + $pinCodeInput.rebind('keyup blur', function(event) { + + // Hide previous warnings for incorrect PIN codes + $warningText.addClass('hidden'); + + // If Enter key is pressed, verify the code + if (event.keyCode === 13) { + $verifyButton.trigger('click'); + } + }); + }, + + /** + * Initalises the back button to go back to the QR code/seed dialog + */ + initBackButton: function() { + + 'use strict'; + + var $backButton = this.$dialog.find('.back-button'); + + // On button click + $backButton.removeClass('disabled').rebind('click', function() { + + // Don't let them go back if they already activated 2FA, they need to go forward + if ($(this).hasClass('disabled')) { + return false; + } + + twofactor.verifySetupDialog.closeDialog(); + twofactor.setupDialog.init(); + }); + }, + + /** + * Initialise the Next button to verify the code + */ + initNextButton: function() { + + 'use strict'; + + // Cache selectors + var $pinCodeInput = this.$dialog.find('.pin-input'); + var $backButton = this.$dialog.find('.back-button'); + var $closeButton = this.$dialog.find('button.js-close'); + var $verifyButton = this.$dialog.find('.next-button'); + var $warningText = this.$dialog.find('.information-highlight.warning'); + var $successText = this.$dialog.find('.information-highlight.success'); + + // On button click + $verifyButton.rebind('click', function() { + + // Hide old warning + $warningText.addClass('hidden'); + + // If the operation hasn't succeeded yet + if ($successText.hasClass('hidden')) { + + // Get the Google Authenticator PIN code from the user + var pinCode = $.trim($pinCodeInput.val()); + + // Run Multi-Factor Auth Setup (mfas) request + api_req({ a: 'mfas', mfa: pinCode }, { + callback: function(response) { + + // If the Two-Factor has already been setup, show a warning dialog + if (response === EEXIST) { + msgDialog('warninga', l[19219], l['2fa_already_enabled'], null, + function() { + // Close the dialog on click of OK button + twofactor.verifySetupDialog.closeDialog(); + } + ); + } + else if (response < 0) { + + // If there was an error, show message that the code was incorrect and clear the text field + $warningText.removeClass('hidden'); + $pinCodeInput.val(''); + + // Put the focus back in the PIN input field + $pinCodeInput.trigger('focus'); + } + else { + // Disable the back button and hide the close button to force them to go to the next step + // to backup their Recovery Key. Also now that 2FA is activated, show the success message + $backButton.addClass('disabled'); + $closeButton.addClass('hidden'); + $successText.removeClass('hidden'); + } + } + }); + } + else { + // If the operation to activate succeeded, load next dialog to backup the recovery key + twofactor.verifySetupDialog.closeDialog(); + twofactor.backupKeyDialog.init(); + } + }); + } +}; + + +/** + * The dialog to verify the 2FA activation process was set up correctly + */ +twofactor.backupKeyDialog = { + + /** jQuery selector for this dialog */ + $dialog: null, + + /** + * Intialise the dialog + */ + init: function() { + + 'use strict'; + + // Cache selectors + this.$dialog = $('.two-factor-dialog.setup-two-factor-backup-key'); + + // Setup functionality + this.initCloseButton(); + this.initSaveRecoveryKeyButton(); + + // Show the dialog + this.$dialog.removeClass('hidden'); + fm_showoverlay(); + }, + + /** + * Initialise the button to save the Recovery Key to a file + */ + initSaveRecoveryKeyButton: function() { + 'use strict'; + this.$dialog.find('.recovery-key-button').rebind('click', u_savekey); + }, + + /** + * Initialise the close and finish buttons to close the dialog + */ + initCloseButton: function() { + + 'use strict'; + + // On button click, close the dialog + this.$dialog.find('button.js-close').rebind('click', function() { + + // Close the dialog and refresh the status of 2FA in the background + twofactor.backupKeyDialog.closeDialog(); + twofactor.account.init(); + }); + }, + + /** + * Closes the dialog + */ + closeDialog: function() { + + 'use strict'; + + // Hide the dialog and background + this.$dialog.addClass('hidden'); + fm_hideoverlay(); + } +}; + + +/** + * Logic for the dialog where they need to perform some action e.g. change email or change + * password but they need to enter their Two Factor Authentication PIN in order to proceed + */ +twofactor.verifyActionDialog = { + + /** jQuery selector for this dialog */ + $dialog: null, + + /** + * Intialise the dialog + * @param {Function} completeCallback The callback to run after 2FA verify + */ + init: function(completeCallback) { + + 'use strict'; + + // Cache selectors + this.$dialog = $('.mega-dialog.two-factor-verify-action'); + + // Initialise functionality + this.resetState(); + this.initKeyupFunctionality(); + this.initSubmitButton(completeCallback); + this.initLostAuthenticatorDeviceButton(); + this.initCloseButton(); + + // Show the modal dialog + this.$dialog.removeClass('hidden'); + fm_showoverlay(); + + // Put the focus in the PIN input field after its visible + this.$dialog.find('.pin-input').trigger('focus'); + }, + + /** + * Initialises keyup/blur functionality on the input field to check the PIN as it's being entered + */ + initKeyupFunctionality: function() { + + 'use strict'; + + // Cache selectors + var $pinCodeInput = this.$dialog.find('.pin-input'); + var $submitButton = this.$dialog.find('.submit-button'); + + // On keyup or clicking out of the text field + $pinCodeInput.off('keyup blur').on('keyup blur', function(event) { + + // If Enter key is pressed, submit the login code + if (event.keyCode === 13) { + $submitButton.trigger('click'); + } + + // Trim whitespace from the ends of the PIN entered + var pinCode = $pinCodeInput.val(); + var trimmedPinCode = $.trim(pinCode); + + // If empty, grey out the button so it appears unclickable + if (trimmedPinCode === '' || trimmedPinCode.length !== 6 || Number.isInteger(trimmedPinCode)) { + $submitButton.removeClass('active'); + } + else { + // Otherwise how the button as red/clickable + $submitButton.addClass('active'); + } + }); + }, + + /** + * Initialise the Submit button + * @param {Function} completeCallback The callback to run after 2FA verify + */ + initSubmitButton: function(completeCallback) { + + 'use strict'; + + // Cache selectors + var $pinCodeInput = this.$dialog.find('.pin-input'); + var $submitButton = this.$dialog.find('.submit-button'); + + // On Submit button click/tap + $submitButton.rebind('click', function() { + + // Get the Google Authenticator PIN code from the user + var pinCode = $.trim($pinCodeInput.val()); + + // Close the modal dialog + twofactor.verifyActionDialog.closeDialog(); + + // Send the PIN code to the callback + completeCallback(pinCode); + }); + }, + + /** + * Initialise the Lost Authenticator Device button + */ + initLostAuthenticatorDeviceButton: function() { + + 'use strict'; + + // Cache selectors + var $lostDeviceButton = this.$dialog.find('.lost-authenticator-button'); + + // On button click + $lostDeviceButton.rebind('click', function() { + twofactor.verifyActionDialog.closeDialog(); + M.showRecoveryKeyDialog(); + }); + }, + + /** + * Initialise the Close buttons to close the overlay + */ + initCloseButton: function() { + + 'use strict'; + + var $closeButton = this.$dialog.find('button.js-close'); + + // On click of the close and back buttons + $closeButton.rebind('click', function() { + + // Close the modal dialog + twofactor.verifyActionDialog.closeDialog(); + }); + }, + + /** + * Closes the dialog + */ + closeDialog: function() { + + 'use strict'; + + // Hide the dialog and background + this.$dialog.addClass('hidden'); + fm_hideoverlay(); + }, + + /** + * Reset the two-factor login dialog's user interface back to its default. + * Useful if there was an error during the verification process. + */ + resetState: function() { + + 'use strict'; + + var $pinCodeInput = this.$dialog.find('.pin-input'); + var $submitButton = this.$dialog.find('.submit-button'); + + // Hide loading spinner and clear the text input + $submitButton.removeClass('active'); + $pinCodeInput.val(''); + } +}; diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/FC2D6129677CA9629E389AE357A40D9DBDBA59CB b/home/.surf/cache/WebKitCache/Version 16/Blobs/FC2D6129677CA9629E389AE357A40D9DBDBA59CB new file mode 100644 index 0000000..702c0e9 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/FC2D6129677CA9629E389AE357A40D9DBDBA59CB differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/FCB1B0AA6E3AE29FE63B59D223D79E8E67E33540 b/home/.surf/cache/WebKitCache/Version 16/Blobs/FCB1B0AA6E3AE29FE63B59D223D79E8E67E33540 new file mode 100644 index 0000000..bb19504 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/FCB1B0AA6E3AE29FE63B59D223D79E8E67E33540 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/FCBF1BC37DEFD594C890D4CE3AFD6EEBA1703F81 b/home/.surf/cache/WebKitCache/Version 16/Blobs/FCBF1BC37DEFD594C890D4CE3AFD6EEBA1703F81 new file mode 100644 index 0000000..e43f740 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/FCBF1BC37DEFD594C890D4CE3AFD6EEBA1703F81 @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["app_assets_modules_github_sticky-scroll-into-view_ts"],{70763(a,b,c){c.d(b,{O4:()=>m,jo:()=>l,Qp:()=>k});var d=c(81574),e=c(59753);let f="ontransitionend"in window;function g(a){return"height"===getComputedStyle(a).transitionProperty}function h(a,b){a.style.transition="none",b(),a.offsetHeight,a.style.transition=""}var i=c(96776);function j(a,b){var c;for(let d of(a.classList.toggle("open",b),a.classList.toggle("Details--on",b),[...(c=a).querySelectorAll(".js-details-target")].filter(a=>a.closest(".js-details-container")===c)))d.setAttribute("aria-expanded",b.toString())}function k(a,b){let c=a.getAttribute("data-details-container")||".js-details-container",d=a.closest(c),e=b?.force?? !d.classList.contains("open"),k=b?.withGroup?? !1;!function(a,b){if(!f){b();return}let c=Array.from(a.querySelectorAll(".js-transitionable"));for(let d of(a.classList.contains("js-transitionable")&&c.push(a),c)){let e=g(d);d instanceof HTMLElement&&(d.addEventListener("transitionend",()=>{d.style.display="",d.style.visibility="",e&&h(d,function(){d.style.height=""})},{once:!0}),d.style.boxSizing="content-box",d.style.display="block",d.style.visibility="visible",e&&h(d,function(){d.style.height=getComputedStyle(d).height}),d.offsetHeight)}for(let i of(b(),c))if(i instanceof HTMLElement&&g(i)){let j=getComputedStyle(i).height;i.style.boxSizing="","0px"===j?i.style.height=`${i.scrollHeight}px`:i.style.height="0px"}}(d,()=>{j(d,e);let b=k?function(a,b){let c=a.getAttribute("data-details-container-group");return c?((0,i.uQ)(a,()=>{var d;for(let e of(d=c,[...document.querySelectorAll(".js-details-container")].filter(a=>a.getAttribute("data-details-container-group")===d)))e!==a&&j(e,b)}),c):null}(d,e):null;Promise.resolve().then(()=>{var c,f;(function(a,b){b.find(b=>{let c=a.querySelectorAll(b),d=c[c.length-1];if(d&&document.activeElement!==d)return d.focus(),!0})})(c=d,[".js-focus-on-dismiss","input[autofocus], textarea[autofocus]"]),(f=a).classList.contains("tooltipped")&&(f.classList.remove("tooltipped"),f.addEventListener("mouseleave",()=>{f.classList.add("tooltipped"),f.blur()},{once:!0})),d.dispatchEvent(new CustomEvent("details:toggled",{bubbles:!0,cancelable:!1,detail:{open:e}})),b&&d.dispatchEvent(new CustomEvent("details:toggled-group",{bubbles:!0,cancelable:!1,detail:{open:e,group:b}}))})})}function l(a){let b=a.getAttribute("data-details-container")||".js-details-container",c=a.closest(b),d=c.classList;return d.contains("Details--on")||d.contains("open")}function m(a){let b=!1,c=a.parentElement;for(;c;)c.classList.contains("Details-content--shown")&&(b=!0),c.classList.contains("js-details-container")&&(c.classList.toggle("open",!b),c.classList.toggle("Details--on",!b),b=!1),c=c.parentElement}(0,e.on)("click",".js-details-target",function(a){let b=a.altKey,c=a.currentTarget;k(c,{withGroup:b}),a.preventDefault()}),(0,d.Z)(function({target:a}){a&&m(a)})},81574(a,b,c){c.d(b,{Z:()=>h});var d=c(80721),e=c(31167);let f=[],g=0;function h(a){!async function(){f.push(a),await d.x,i()}()}function i(){let a=g;g=f.length,j(f.slice(a),null,window.location.href)}function j(a,b,c){let d=window.location.hash.slice(1),e=d?document.getElementById(d):null,f={oldURL:b,newURL:c,target:e};for(let g of a)g.call(null,f)}h.clear=()=>{f.length=g=0};let k=window.location.href;window.addEventListener("popstate",function(){k=window.location.href}),window.addEventListener("hashchange",function(a){let b=window.location.href;try{j(f,a.oldURL||k,b)}finally{k=b}});let l=null;document.addEventListener(e.QE.START,function(){l=window.location.href}),document.addEventListener(e.QE.SUCCESS,function(){j(f,l,window.location.href)})},20332(a,b,c){c.d(b,{h:()=>f});var d=c(59753),e=c(70763);function f(){let a=!1,b=document.getElementById("start-of-content");if(b){let c=b.nextElementSibling;if(c instanceof HTMLElement)return(a="1"===c.getAttribute("data-skipped-to-content"))&&c.removeAttribute("data-skipped-to-content"),a}}(0,d.on)("click",".js-skip-to-content",function(a){let b=document.getElementById("start-of-content");if(b){let c=b.nextElementSibling;c instanceof HTMLElement&&(c.setAttribute("tabindex","-1"),c.setAttribute("data-skipped-to-content","1"),c.focus())}a.preventDefault()});let g="ontouchstart"in document,h=document.querySelectorAll(".js-header-menu-item");for(let i of h)i.addEventListener("details:toggled",a=>{let b=a.target;if(a instanceof CustomEvent&&a.detail.open)for(let c of h)c!==b&&(0,e.Qp)(c,{force:!1})}),g||i.addEventListener("mouseleave",a=>{let b=a.target;b.classList.contains("open")&&(0,e.Qp)(b,{force:!1})});document.addEventListener("context-region-label:update",a=>{if(!(a instanceof CustomEvent&&a.detail.label))return;let b=document.querySelectorAll(".js-context-region-label");for(let c of b)c.textContent=a.detail.label}),document.addEventListener("turbo:before-cache",a=>{for(let b of a.target.querySelectorAll("modal-dialog[open]"))b.close()}),document.addEventListener("turbo:load",()=>{let a=document.querySelector(".js-user-panel-fragment"),b=document.querySelector(".js-user-panel")?.getAttribute("data-user-panel-url");if(!b||!a)return"";a.setAttribute("src",b)})},35002(a,b,c){c.d(b,{O3:()=>j,SX:()=>g,"_g":()=>h,a8:()=>f,lB:()=>i});let d=0,e=new Set;function f(a){e.add(a)}function g(a){e.delete(a)}function h(){return d}function i(a){for(let b of(d=a,a?document.body.style.setProperty("--base-sticky-header-height",`${a}px`):document.body.style.removeProperty("--base-sticky-header-height"),e))b(a)}let j="var(--base-sticky-header-height, 0px)"},21935(a,b,c){c.d(b,{H:()=>m});var d=c(20332),e=c(80721),f=c(64463),g=c(35002);let h=!1,i=[];function j(){i.length?k():l()}function k(){h||(window.addEventListener("resize",n),document.addEventListener("scroll",n),h=!0)}function l(){window.removeEventListener("resize",n),document.removeEventListener("scroll",n),h=!1}function m(){o(!0)}function n(){o()}function o(a=!1){for(let b of i)if(b.element.offsetHeight>0){let{element:c,placeholder:d,top:e}=b,f=c.getBoundingClientRect();if(d){let g=d.getBoundingClientRect();c.classList.contains("is-stuck")?g.top>x(c,e)?q(b):r(b):f.top<=x(c,e)?p(b):a&&r(b)}else{let h=.1;f.top-x(c,e){(function(a){let b=function(a){if(function(a){let{position:b}=window.getComputedStyle(a);return/sticky/.test(b)}(a))return null;let b=a.previousElementSibling;if(b&&b.classList.contains("is-placeholder"))return b;let c=document.createElement("div");return c.style.visibility="hidden",c.style.display="none",c.style.height=window.getComputedStyle(a).height,c.className=a.className,c.classList.remove("js-sticky"),c.classList.add("is-placeholder"),a.parentNode.insertBefore(c,a)}(a),c=window.getComputedStyle(a).position;a.style.position="static";let d=a.offsetParent;a.style.position="fixed";let e=w(a),f={element:a,placeholder:b,offsetParent:d,top:"auto"===e?0:parseInt(e||"0")};a.style.position=c,i.push(f)})(a),o(),j()})}async function t(a){if(null===a.offsetParent)return;await e.C;let b=Math.floor(a.getBoundingClientRect().height);b>0&&((0,g.lB)(b),u(),m())}function u(){for(let a of document.querySelectorAll(".js-position-sticky, .js-notification-shelf-offset-top"))v(a)}function v(a){if(a.classList.contains("js-notification-top-shelf"))return;let b=parseInt(w(a))||0;y(a,b+(0,g._g)())}function w(a){let b=a.getAttribute("data-original-top");if(null!=b)return b;let c=window.getComputedStyle(a).top;return a.setAttribute("data-original-top",c),c}function x(a,b){return a.classList.contains("js-notification-top-shelf")?b:b+(0,g._g)()}function y(a,b){a.style.setProperty("top",`${b}px`,"important")}(0,f.N7)(".js-sticky",{constructor:HTMLElement,add(a){a.isConnected&&s(a)},remove(a){(function(a){let b=i.map(a=>a.element).indexOf(a);i.splice(b,1)})(a),j()}}),(0,f.N7)(".js-notification-top-shelf",{constructor:HTMLElement,add(a){t(a)},remove(){(0,g._g)()>0&&((0,g.lB)(0),u(),m())}}),(0,f.N7)(".js-notification-shelf-offset-top, .js-position-sticky",{constructor:HTMLElement,add:v})},80721(a,b,c){c.d(b,{C:()=>d.C,x:()=>d.x});var d=c(4412)},87098(a,b,c){function d(a,b=location.hash){return e(a,f(b))}function e(a,b){return""===b?null:a.getElementById(b)||a.getElementsByName(b)[0]}function f(a){try{return decodeURIComponent(a.slice(1))}catch{return""}}c.d(b,{"$z":()=>f,Kt:()=>d,Q:()=>e})},3126(a,b,c){c.d(b,{kc:()=>g,lA:()=>h,zT:()=>f});var d=c(87098),e=c(21935);function f(a){if(a.hasAttribute("data-ignore-sticky-scroll"))return;let b=a.ownerDocument;setTimeout(()=>{b&&b.defaultView&&(a.scrollIntoView(),b.defaultView.scrollBy(0,-h(b)))},0)}function g(a){let b=(0,d.Kt)(a);b&&f(b)}function h(a){(0,e.H)();let b=a.querySelectorAll(".js-sticky-offset-scroll"),c=a.querySelectorAll(".js-position-sticky"),d=Math.max(0,...Array.from(b).map(a=>{let{top:b,height:c}=a.getBoundingClientRect();return 0===b?c:0}))+Math.max(0,...Array.from(c).map(a=>{let{top:b,height:c}=a.getBoundingClientRect(),d=parseInt(getComputedStyle(a).top);if(!a.parentElement)return 0;let e=a.parentElement.getBoundingClientRect().top;return b===d&&e<0?c:0})),f=a.querySelectorAll(".js-position-sticky-stacked"),g=Array.from(f).reduce((a,b)=>{let{height:c,top:d}=b.getBoundingClientRect(),e=b.classList.contains("is-stuck");return a+(!(d<0)&&e?c:0)},0);return d+g}}}]) +//# sourceMappingURL=app_assets_modules_github_sticky-scroll-into-view_ts-2b30ec0ed0d4.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/FD50C39B74E49E1712C45334E91E82FC29A582DA b/home/.surf/cache/WebKitCache/Version 16/Blobs/FD50C39B74E49E1712C45334E91E82FC29A582DA new file mode 100644 index 0000000..978a681 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Blobs/FD50C39B74E49E1712C45334E91E82FC29A582DA differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Blobs/FDDBDC9648F270BE89220DD7F637BA6FCE32E474 b/home/.surf/cache/WebKitCache/Version 16/Blobs/FDDBDC9648F270BE89220DD7F637BA6FCE32E474 new file mode 100644 index 0000000..c91d1ee --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Blobs/FDDBDC9648F270BE89220DD7F637BA6FCE32E474 @@ -0,0 +1,2 @@ +(()=>{"use strict";var a={},b={};function c(d){var e=b[d];if(void 0!==e)return e.exports;var f=b[d]={id:d,loaded:!1,exports:{}};return a[d].call(f.exports,f,f.exports,c),f.loaded=!0,f.exports}c.m=a,(()=>{var a=[];c.O=(b,d,e,f)=>{if(d){f=f||0;for(var g=a.length;g>0&&a[g-1][2]>f;g--)a[g]=a[g-1];a[g]=[d,e,f];return}for(var h=1/0,g=0;g=f&&Object.keys(c.O).every(a=>c.O[a](d[j]))?d.splice(j--,1):(i=!1,f{var b=a&&a.__esModule?()=>a.default:()=>a;return c.d(b,{a:b}),b},(()=>{var a,b=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;c.t=function(d,e){if(1&e&&(d=this(d)),8&e||"object"==typeof d&&d&&(4&e&&d.__esModule||16&e&&"function"==typeof d.then))return d;var f=Object.create(null);c.r(f);var g={};a=a||[null,b({}),b([]),b(b)];for(var h=2&e&&d;"object"==typeof h&&!~a.indexOf(h);h=b(h))Object.getOwnPropertyNames(h).forEach(a=>g[a]=()=>d[a]);return g.default=()=>d,c.d(f,g),f}})(),c.d=(a,b)=>{for(var d in b)c.o(b,d)&&!c.o(a,d)&&Object.defineProperty(a,d,{enumerable:!0,get:b[d]})},c.f={},c.e=a=>Promise.all(Object.keys(c.f).reduce((b,d)=>(c.f[d](a,b),b),[])),c.u=a=>"vendors-node_modules_manuelpuyol_turbo_dist_turbo_es2017-esm_js"===a?""+a+"-ac3bd901e26b.js":"vendors-node_modules_selector-observer_dist_index_esm_js"===a?""+a+"-650337916dbd.js":"vendors-node_modules_lit-html_lit-html_js"===a?""+a+"-e954e8c01c93.js":"app_assets_modules_github_filter-input_ts"===a?""+a+"-9a9c80af1376.js":"vendors-node_modules_virtualized-list_es_index_js-node_modules_github_memoize_dist_esm_index_-ced8cc"===a?""+a+"-ffd5e4d6ee17.js":"app_assets_modules_github_ref-selector_ts"===a?""+a+"-eb4fbb464325.js":"vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_github_command-pale-4090c9"===a?""+a+"-fc81c2b8560e.js":"app_assets_modules_github_command-palette_items_help-item_ts-app_assets_modules_github_comman-48ad9d"===a?""+a+"-1115dce523df.js":"vendors-node_modules_delegated-events_dist_index_js-node_modules_github_details-dialog-elemen-63debe"===a?""+a+"-4a2f37f7419e.js":"vendors-node_modules_primer_behaviors_dist_esm_focus-zone_js"===a?""+a+"-aa2ce822bc0d.js":"app_components_primer_experimental_query-builder-element_ts"===a?""+a+"-eeb58132839a.js":"vendors-node_modules_primer_behaviors_dist_esm_dimensions_js-node_modules_github_hotkey_dist_-9fc4f4"===a?""+a+"-0d86101e85d9.js":"vendors-node_modules_github_insights_dist_index_js"===a?""+a+"-0f85031aafa8.js":"vendors-node_modules_d3-array_src_max_js-node_modules_d3-scale_src_index_js-node_modules_d3-s-eaadf4"===a?""+a+"-79bf8372781e.js":"app_assets_modules_github_updatable-content_ts"===a?""+a+"-62df1309213c.js":"vendors-node_modules_d3-array_src_bisector_js-node_modules_d3-axis_src_axis_js-node_modules_d-d6ccd8"===a?""+a+"-594107ba7941.js":"vendors-node_modules_js-yaml_index_js-node_modules_leven_index_js"===a?""+a+"-9862ec492194.js":"app_assets_modules_github_editor_yaml-editors_codemirror-autocomplete-util_ts-app_assets_modu-4bb720"===a?""+a+"-77e0cca8156a.js":"app_assets_modules_dependabot-editor_ts"===a?""+a+"-ad7d7d673754.js":"vendors-node_modules_jsonc-parser_lib_esm_main_js"===a?""+a+"-07cd3c83218f.js":"app_assets_modules_stack-template-editor_ts"===a?""+a+"-f99910c96fcb.js":"app_assets_modules_workflow-editor_ts"===a?""+a+"-a1a7224fd81d.js":"vendors-node_modules_codemirror_lib_codemirror_js"===a?""+a+"-9124701c2e90.js":"vendors-node_modules_three_build_three_module_js"===a?""+a+"-52e85d225819.js":"vendors-node_modules_dompurify_dist_purify_js"===a?""+a+"-3bb5d1ed80e7.js":"vendors-node_modules_github_blackbird-parser_dist_blackbird_js"===a?""+a+"-27f5d47ad1bf.js":"chunk-"+a+"-"+({"react-profiling":"34272e788377","app_assets_modules_github_soft-nav_navigate_ts":"42fc908a8313","vendors-node_modules_blakejs_index_js-node_modules_tweetnacl_nacl-fast_js":"ba84d6e737ca","_empty-file_js-app_assets_modules_github_tweetsodium_ts":"f6c939764456","app_assets_modules_github_jump-to_ts":"f43491022031","app_assets_modules_github_user-status-submit_ts":"53d956c9923c","vendors-node_modules_github_sortablejs_Sortable_js":"04f0671e8f01","app_assets_modules_github_sortable-behavior_ts":"4398a61d496f","app_components_accessibility_animated-image-element_ts":"1ee1de80897f","app_components_account_verifications_launch-code-element_ts":"0a49f135b7cd","vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_primer_behaviors_di-574053":"1c57d52ecafe","app_components_actions_actions-caches-filter-element_ts":"5b03aab2d86f","app_components_actions_actions-introduction-video-element_ts":"79f98f65cd82","app_components_actions_actions-workflow-filter-element_ts":"35965c021ff5","app_components_actions_variables_variable-value-element_ts":"172d7f3f4981","app_components_actions_variables_variables-pagination-element_ts":"e6ce4c289af0","app_components_advisories_metric-selection-element_ts":"ca148f656712","app_components_advisories_severity-calculator-element_ts":"ba5653e97bbc","app_components_advisories_severity-score-element_ts":"ecf556f7fea8","app_components_advisories_severity-selection-element_ts":"8a9fec0ac264","app_components_advisories_severity-tracking-element_ts":"f380bbf8215c","app_components_animation_animate-type-element_ts":"0569571b3be7","app_components_behaviors_webauthn-status-element_ts":"8c650a0f2259","app_components_billing_settings_downgrade-dialog-element_ts":"b3762b510d54","app_components_billing_settings_downgrade-survey-dialog-element_ts":"eadaf3d9502d","app_components_billing_settings_upgrade_manage-subscription-element_ts":"3197c87869c8","app_components_branch_create-branch-element_ts":"ae15e254b892","app_components_branch_create-repo-from-selector-element_ts":"860dea14efaa","app_components_businesses_people_select-all-element_ts":"233051a8661a","app_components_code_scanning_alert-dismissal-details-element_ts":"1b18dd80c9eb","app_components_code_scanning_pretty-cron-element_ts":"d79eaf65cbeb","app_components_code_scanning_tool_status_message-list-element_ts":"a04f3748190e","app_components_codespaces_advanced_options_sku-list-element_ts":"6cc19f80a12d","app_components_codespaces_create-button-element_ts":"212054098daa","app_components_codespaces_editor-forwarder-element_ts":"e64a673970f3","app_components_command_palette_command-palette-page-element_ts":"234b5af60d07","app_components_command_palette_command-palette-page-stack-element_ts":"806a6c231e56","app_components_copilot_seat_management_copilot-business-signup-seat-management-element_ts":"4270ffa3c465","app_components_dashboard_loading-context-element_ts":"4c8cfbf5389e","app_components_dashboard_portal-fragment-element_ts":"d5c604cb4db5","vendors-node_modules_primer_behaviors_dist_esm_dimensions_js-node_modules_delegated-events_di-94a48b":"9a900606aed6","app_components_dashboard_query-search-element_ts":"c467197494b3","app_components_dashboard_sidebar_shortcuts-form-element_ts":"325c640eac42","app_components_dependabot_alerts_dependabot-alert-dismissal-element_ts":"16ea6e106396","app_components_dependabot_alerts_dependabot-alert-load-all-element_ts":"94ddfa6df95f","app_components_dependabot_alerts_dependabot-alert-row-element_ts":"9a49379f1e13","app_components_dependabot_alerts_dependabot-alert-table-header-element_ts":"bbf92779ad85","app_components_dependabot_dependabot-updates-paused-element_ts":"884fe4b5b205","app_components_diffs_deferred-diff-lines-element_ts":"fb7fa1655769","app_components_discussions_edit-history-element_ts":"ee30fc5579c4","app_components_feed_conduit-profile-feed-visibility-element_ts":"0beee0a7dc6d","app_components_files_readme-toc-element_ts":"b8ecf330f001","app_components_github_delayed-loading-element_ts":"332b738825de","app_components_github_feature-callout-element_ts":"d74761befbad","app_components_github_remote-pagination-element_ts":"c13360ba8a89","app_components_hydro_track-view-element_ts":"ad6448c38273","app_components_issues_references_development-menu-element_ts":"24549e0e43d4","app_components_issues_reopen-button-element_ts":"491fdd037a01","app_components_mathjax_math-renderer-element_ts":"6ac34845ad3e","vendors-node_modules_delegated-events_dist_index_js-node_modules_github_template-parts_lib_in-2b5acf1":"3c89c6a1a16a","app_components_memex_memex-project-picker-element_ts":"804deb12548b","app_components_memex_project_list_memex-project-picker-interstitial-element_ts":"a99d71b1ef0b","app_components_memex_project_list_memex-project-picker-unlink-element_ts":"55982b7f111f","app_components_memex_project_list_project-buttons-list-element_ts":"aa05ad189fd7","app_components_merge_queues_entry-status-dialog-element_ts":"c2706da2bcdb","app_components_navigation_navigation-list-element_ts":"9be79148132e","app_components_organizations_member_requests_feature-request-element_ts":"22b59ea0fa23","app_components_organizations_settings_codespaces_policy_form_constraint_row_allowed-values-in-672002":"2cc890361b10","app_components_organizations_settings_codespaces_policy_form_constraint_row_max-value-element_ts":"7fe68e02333d","app_components_organizations_settings_codespaces-policy-form-element_ts":"0d55ab7438e5","app_components_organizations_settings_features_insights-form-element_ts":"64fa304b1f6b","app_components_organizations_settings_repository-bulk-selector-element_ts":"60dafa67e022","app_components_organizations_settings_required-workflow-selector-element_ts":"eac40e7dc34c","app_components_organizations_settings_required-workflow-target-selector-element_ts":"1e16c3077d81","app_components_packages_repository-selection-input-element_ts":"9742ebba69b9","app_components_primer_action_bar_action-bar-element_ts":"ff7c7f092b98","app_components_primer_action_list_action-list-element_ts":"789e33f6e58d","app_components_primer_action_menu_action-menu-element_ts":"9868e9597442","node_modules_github_combobox-nav_dist_index_js-node_modules_github_jtml_lib_index_js":"bfd0ad1dfe82","app_components_primer_experimental_split-page-layout-element_ts":"16a80eadd5af","app_components_primer_experimental_toggle-switch-element_ts":"8d9d1aec570e","app_components_primer_navigation_list_lazy-load-section-element_ts":"900d6a94358e","app_components_profiles_profile-timezone-element_ts":"187f6d851950","app_components_pull_requests_copilot-marketing-popover-element_ts":"a27342f7f905","app_components_pull_requests_file_tree_file-filter-element_ts":"94ff33199975","app_components_pull_requests_file_tree_file-tree-element_ts":"6a4eec7d23b6","app_components_pull_requests_file_tree_file-tree-toggle-element_ts":"67d98166ffd2","app_components_repositories_pin-organization-repo-element_ts":"a2c644f1474b","app_components_search_input_styled-text-input-element_ts":"8b8c9f0bade2","vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_delegated-events_dist_in-c45cd3":"98aed534c6c0","app_assets_modules_github_behaviors_keyboard-shortcuts-helper_ts-app_assets_modules_github_fo-3590d1":"31979f540f1a","app_components_secret_scanning_show_alert-dismissal-element_ts":"44338b0beb22","app_components_secret_scanning_show_timeline_secret-scanning-alert-load-all-element_ts":"eee2fbdd8b6d","app_components_security_center_coverage-settings-element_ts":"2df54f0db4dd","app_components_settings_messages_preview-announcement-button-element_ts":"8eaedd0327af","app_components_settings_recovery-codes-element_ts":"97e8fd96a7f4","app_components_sidebar_project-picker-element_ts":"f6033191ca58","app_components_site_header_notification-indicator-element_ts":"58a65b58dc0f","app_components_slash_commands_slash-command-toolbar-button-element_ts":"e8ab3f8053fd","app_components_sponsors_orgs_premium_dashboard_monthly-spend-graph-element_ts":"139fc07eb33f","app_components_stafftools_billing_history_billing-transaction-component-element_ts":"8b19dec1b86c","app_components_stafftools_bundle-size-stats_bundle-size-stats-element_ts":"f412143e67b0","app_components_stafftools_data_hpc_datahpc-staffbar-element_ts":"dcdfef97aaf8","app_components_stafftools_react_react-profiling-toggle-element_ts":"f56cd7ab3163","app_components_stafftools_react_react-staffbar-element_ts":"1b26a3a15bf8","app_components_stafftools_soft_nav_soft-nav-staffbar-element_ts":"bae431e24432","app_components_stafftools_soft_nav_soft-nav-staffbar-preview-element_ts":"c0c8ade0d53c","app_components_themed_pictures_themed-picture-element_ts":"2406165ab9bd","vendors-node_modules_delegated-events_dist_index_js-node_modules_github_jtml_lib_index_js":"046955811d81","app_components_tracking_blocks_tracking-block-element_ts":"ae2f4acdc74c","app_components_tracking_blocks_tracking-block-omnibar-element_ts":"78bfae993fc0","app_assets_modules_github_profile_profile-pins-element_ts":"72d7e6859724","app_assets_modules_github_emoji-picker-element_ts":"90160f37619b","app_assets_modules_github_behaviors_edit-hook-secret-element_ts":"b596ce0486e9","app_assets_modules_github_insights_insights-query_ts":"e1c60031ca08","app_assets_modules_github_behaviors_remote-clipboard-copy_ts":"8bf355c8aa8b","app_assets_modules_github_insights_series-table_ts":"5e3d0b98fe41","app_assets_modules_github_insights_line-chart_ts":"856acb249478","app_assets_modules_github_insights_bar-chart_ts":"b4b326f3a3ee","app_assets_modules_github_insights_column-chart_ts":"70a14c12d2e4","app_assets_modules_github_insights_stacked-area-chart_ts":"cc55fc593b4d","app_assets_modules_github_insights_hero-stat_ts":"b600c0017a11","app_assets_modules_github_graphs_pulse-authors-graph-element_ts":"e82669d2e8ca","node_modules_scroll-anchoring_dist_scroll-anchoring_esm_js-app_assets_modules_github_stacks_s-5964bd":"b9a70d637910","app_assets_modules_github_graphs_community-contributions_ts":"eec46a3fceba","app_assets_modules_github_graphs_discussion-page-views_ts":"83ea74d15b2a","app_assets_modules_github_graphs_discussions-daily-contributors_ts":"07141e6c261d","app_assets_modules_github_graphs_discussions-new-contributors_ts":"3c0ba299fcee","app_assets_modules_github_graphs_code-frequency-graph-element_ts":"e25f10105f41","vendors-node_modules_d3-transition_src_index_js-node_modules_github_memoize_dist_esm_index_js":"6cc87c621220","vendors-node_modules_d3-array_src_descending_js-node_modules_d3-axis_src_axis_js-node_modules-5e7c48":"604f1063440e","app_assets_modules_github_graphs_contributors-graph-element_ts":"b268bc45f950","app_assets_modules_github_graphs_org-insights-graph-element_ts":"b43e718256e2","app_assets_modules_github_graphs_traffic-clones-graph-element_ts":"3b842db393db","app_assets_modules_github_graphs_traffic-visitors-graph-element_ts":"fe0a86d80a96","app_assets_modules_github_graphs_commit-activity-graph-element_ts":"c910f6343013","app_assets_modules_github_graphs_marketplace-insights-graph-element_ts":"b66e11dcf12f","vendors-node_modules_d3-ease_src_circle_js-node_modules_d3-format_src_defaultLocale_js-node_m-2091bc":"4ef850fa7034","app_assets_modules_github_settings_user-sessions-map-element_ts":"ddf28533162a","app_assets_modules_github_behaviors_reload-after-polling-element_ts":"6a64f814d616","app_assets_modules_github_graphs_package-dependencies-security-graph-element_ts":"f9ca19e2af10",app_assets_modules_github_dependencies_ts:"a4088f898248","app_assets_modules_github_graphs_network-graph-element_ts":"67a05bae1c18","app_assets_modules_github_business-audit-log-map-element_ts":"33d89c4a5176","app_assets_modules_github_localization_inline-machine-translation-element_ts":"8b0ce38a6247","app_assets_modules_marketing_confetti-on-scroll_ts-_5eac0":"96d24c7afefe","app_assets_modules_github_gist_drag-drop_ts":"21e7bbab1f12","app_assets_modules_github_slash-command-expander-element_slash-command-suggester_ts":"9a1eff7ec03b","app_assets_modules_marketing_before-after_ts":"24cb9f251e55","app_assets_modules_marketing_confetti-on-scroll_ts-_5eac1":"6fc925163ee6","app_assets_modules_marketing_segmented-nav_ts":"3fc6e5d7b672","app_assets_modules_marketing_story-body-element_ts":"80cf1dc1b46d","app_assets_modules_marketing_testimonials-carousel-element_ts":"87f0bb8f4669",app_assets_modules_marketing_unveil_ts:"fc3b1e9e2834","app_assets_modules_github_profile_contributions-spider-graph_ts":"5438e8421964","app_assets_modules_devcontainer-editor_ts":"44f911ce97c5","app_assets_modules_github_webgl-warp_ts":"1c4bd2857c63","vendors-node_modules_mathjax_es5_tex-chtml-full_js":"94624a0e381b",app_components_search_parsing_parsing_ts:"cdc798c3e5d1"})[a]+".js",c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(a){if("object"==typeof window)return window}}(),c.o=(a,b)=>Object.prototype.hasOwnProperty.call(a,b),(()=>{var a={};c.l=(b,d,e,f)=>{if(a[b]){a[b].push(d);return}if(void 0!==e)for(var g,h,i=document.getElementsByTagName("script"),j=0;j{g.onerror=g.onload=null,clearTimeout(m);var e=a[b];if(delete a[b],g.parentNode&&g.parentNode.removeChild(g),e&&e.forEach(a=>a(d)),c)return c(d)},m=setTimeout(l.bind(null,void 0,{type:"timeout",target:g}),12e4);g.onerror=l.bind(null,g.onerror),g.onload=l.bind(null,g.onload),h&&document.head.appendChild(g)}})(),c.r=a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},c.nmd=a=>(a.paths=[],a.children||(a.children=[]),a),(()=>{var a;c.tt=()=>(void 0===a&&(a={createScriptURL:a=>a},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(a=trustedTypes.createPolicy("dev-webpack",a))),a)})(),c.tu=a=>c.tt().createScriptURL(a),(()=>{c.g.importScripts&&(a=c.g.location+"");var a,b=c.g.document;if(!a&&b&&(b.currentScript&&(a=b.currentScript.src),!a)){var d=b.getElementsByTagName("script");d.length&&(a=d[d.length-1].src)}if(!a)throw Error("Automatic publicPath is not supported in this browser");a=a.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),c.p=a})(),(()=>{var a={"wp-runtime":0};c.f.j=(b,d)=>{var e=c.o(a,b)?a[b]:void 0;if(0!==e){if(e)d.push(e[2]);else if("wp-runtime"!=b){var f=new Promise((c,d)=>e=a[b]=[c,d]);d.push(e[2]=f);var g=c.p+c.u(b),h=Error(),i=d=>{if(c.o(a,b)&&(0!==(e=a[b])&&(a[b]=void 0),e)){var f=d&&("load"===d.type?"missing":d.type),g=d&&d.target&&d.target.src;h.message="Loading chunk "+b+" failed.\n("+f+": "+g+")",h.name="ChunkLoadError",h.type=f,h.request=g,e[1](h)}};c.l(g,i,"chunk-"+b,b)}else a[b]=0}},c.O.j=b=>0===a[b];var b=(b,d)=>{var e,f,[g,h,i]=d,j=0;if(g.some(b=>0!==a[b])){for(e in h)c.o(h,e)&&(c.m[e]=h[e]);if(i)var k=i(c)}for(b&&b(d);jB,on:()=>A});var e,f=window.document.documentElement,g=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector;d.prototype.matchesSelector=function(a,b){return g.call(a,b)},d.prototype.querySelectorAll=function(a,b){return b.querySelectorAll(a)},d.prototype.indexes=[];var h=/^#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"ID",selector:function(a){var b;if(b=a.match(h))return b[0].slice(1)},element:function(a){if(a.id)return[a.id]}});var i=/^\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"CLASS",selector:function(a){var b;if(b=a.match(i))return b[0].slice(1)},element:function(a){var b=a.className;if(b){if("string"==typeof b)return b.split(/\s/);if("object"==typeof b&&"baseVal"in b)return b.baseVal.split(/\s/)}}});var j=/^((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"TAG",selector:function(a){var b;if(b=a.match(j))return b[0].toUpperCase()},element:function(a){return[a.nodeName.toUpperCase()]}}),d.prototype.indexes.default={name:"UNIVERSAL",selector:function(){return!0},element:function(){return[!0]}},e="function"==typeof window.Map?window.Map:function(){function a(){this.map={}}return a.prototype.get=function(a){return this.map[a+" "]},a.prototype.set=function(a,b){this.map[a+" "]=b},a}();var k=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;function l(a,b){var c,d,e,f,g,h,i=(a=a.slice(0).concat(a.default)).length,j=b,l=[];do if(k.exec(""),(e=k.exec(j))&&(j=e[3],e[2]||!j)){for(c=0;c3&& void 0!==arguments[3]?arguments[3]:{},f=!!e.capture,g=f?p:o,h=g[a];h||(h=new d,g[a]=h,document.addEventListener(a,z,f)),h.add(b,c)}function B(a,b,c){return a.dispatchEvent(new CustomEvent(b,{bubbles:!0,cancelable:!0,detail:c}))}},76006(a,b,c){c.d(b,{Lj:()=>p,Ih:()=>w,P4:()=>l,nW:()=>E,fA:()=>u,GO:()=>v});let d=new WeakSet;function e(a){h(a),g(a)}let f=new WeakMap;function g(a=document){if(f.has(a))return f.get(a);let b=!1,c=new MutationObserver(a=>{for(let b of a)if("attributes"===b.type&&b.target instanceof Element)k(b.target);else if("childList"===b.type&&b.addedNodes.length)for(let c of b.addedNodes)c instanceof Element&&h(c)});c.observe(a,{childList:!0,subtree:!0,attributeFilter:["data-action"]});let d={get closed(){return b},unsubscribe(){b=!0,f.delete(a),c.disconnect()}};return f.set(a,d),d}function h(a){for(let b of a.querySelectorAll("[data-action]"))k(b);a instanceof Element&&a.hasAttribute("data-action")&&k(a)}function i(a){let b=a.currentTarget;for(let c of j(b))if(a.type===c.type){let e=b.closest(c.tag);d.has(e)&&"function"==typeof e[c.method]&&e[c.method](a);let f=b.getRootNode();if(f instanceof ShadowRoot&&d.has(f.host)&&f.host.matches(c.tag)){let g=f.host;"function"==typeof g[c.method]&&g[c.method](a)}}}function*j(a){for(let b of(a.getAttribute("data-action")||"").trim().split(/\s+/)){let c=b.lastIndexOf(":"),d=Math.max(0,b.lastIndexOf("#"))||b.length;yield{type:b.slice(0,c),tag:b.slice(c+1,d),method:b.slice(d+1)||"handleEvent"}}}function k(a){for(let b of j(a))a.addEventListener(b.type,i)}function l(a,b){let c=a.tagName.toLowerCase();if(a.shadowRoot){for(let d of a.shadowRoot.querySelectorAll(`[data-target~="${c}.${b}"]`))if(!d.closest(c))return d}for(let e of a.querySelectorAll(`[data-target~="${c}.${b}"]`))if(e.closest(c)===a)return e}let m=a=>String("symbol"==typeof a?a.description:a).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),n=(a,b="property")=>{let c=m(a);if(!c.includes("-"))throw new DOMException(`${b}: ${String(a)} is not a valid ${b} name`,"SyntaxError");return c},o="attr";function p(a,b){t(a,o).add(b)}let q=new WeakSet;function r(a,b){if(q.has(a))return;q.add(a);let c=Object.getPrototypeOf(a),d=c?.constructor?.attrPrefix??"data-";for(let e of(b||(b=t(c,o)),b)){let f=a[e],g=n(`${d}${e}`),h={configurable:!0,get(){return this.getAttribute(g)||""},set(a){this.setAttribute(g,a||"")}};"number"==typeof f?h={configurable:!0,get(){return Number(this.getAttribute(g)||0)},set(a){this.setAttribute(g,a)}}:"boolean"==typeof f&&(h={configurable:!0,get(){return this.hasAttribute(g)},set(a){this.toggleAttribute(g,a)}}),Object.defineProperty(a,e,h),e in a&&!a.hasAttribute(g)&&h.set.call(a,f)}}let s=Symbol.for("catalyst");class CatalystDelegate{constructor(a){let b=this,c=a.prototype.connectedCallback;a.prototype.connectedCallback=function(){b.connectedCallback(this,c)};let d=a.prototype.disconnectedCallback;a.prototype.disconnectedCallback=function(){b.disconnectedCallback(this,d)};let e=a.prototype.attributeChangedCallback;a.prototype.attributeChangedCallback=function(a,c,d){b.attributeChangedCallback(this,a,c,d,e)};let f=a.observedAttributes||[];Object.defineProperty(a,"observedAttributes",{configurable:!0,get(){return b.observedAttributes(this,f)},set(a){f=a}}),function(a){let b=a.observedAttributes||[],c=a.attrPrefix??"data-",d=a=>n(`${c}${a}`);Object.defineProperty(a,"observedAttributes",{configurable:!0,get:()=>[...t(a.prototype,o)].map(d).concat(b),set(a){b=a}})}(a),function(a){let b=m(a.name).replace(/-element$/,"");try{window.customElements.define(b,a),window[a.name]=customElements.get(b)}catch(c){if(!(c instanceof DOMException&&"NotSupportedError"===c.name))throw c}}(a)}observedAttributes(a,b){return b}connectedCallback(a,b){var c;a.toggleAttribute("data-catalyst",!0),customElements.upgrade(a),function(a){for(let b of a.querySelectorAll("template[data-shadowroot]"))b.parentElement===a&&a.attachShadow({mode:"closed"===b.getAttribute("data-shadowroot")?"closed":"open"}).append(b.content.cloneNode(!0))}(a),r(a),c=a,d.add(c),c.shadowRoot&&e(c.shadowRoot),h(c),g(c.ownerDocument),b?.call(a),a.shadowRoot&&e(a.shadowRoot)}disconnectedCallback(a,b){b?.call(a)}attributeChangedCallback(a,b,c,d,e){r(a),"data-catalyst"!==b&&e&&e.call(a,b,c,d)}}function t(a,b){if(!Object.prototype.hasOwnProperty.call(a,s)){let c=a[s],d=a[s]=new Map;if(c)for(let[e,f]of c)d.set(e,new Set(f))}let g=a[s];return g.has(b)||g.set(b,new Set),g.get(b)}function u(a,b){t(a,"target").add(b),Object.defineProperty(a,b,{configurable:!0,get(){return l(this,b)}})}function v(a,b){t(a,"targets").add(b),Object.defineProperty(a,b,{configurable:!0,get(){return function(a,b){let c=a.tagName.toLowerCase(),d=[];if(a.shadowRoot)for(let e of a.shadowRoot.querySelectorAll(`[data-targets~="${c}.${b}"]`))e.closest(c)||d.push(e);for(let f of a.querySelectorAll(`[data-targets~="${c}.${b}"]`))f.closest(c)===a&&d.push(f);return d}(this,b)}})}function w(a){new CatalystDelegate(a)}let x=new Map,y=new Promise(a=>{"loading"!==document.readyState?a():document.addEventListener("readystatechange",()=>a(),{once:!0})}),z=new Promise(a=>{let b=new AbortController;b.signal.addEventListener("abort",()=>a());let c={once:!0,passive:!0,signal:b.signal},d=()=>b.abort();document.addEventListener("mousedown",d,c),document.addEventListener("touchstart",d,c),document.addEventListener("keydown",d,c),document.addEventListener("pointerdown",d,c)}),A={ready:()=>y,firstInteraction:()=>z,visible:a=>new Promise(b=>{let c=new IntersectionObserver(a=>{for(let d of a)if(d.isIntersecting){b(),c.disconnect();return}},{rootMargin:"0px 0px 256px 0px",threshold:.01});for(let d of document.querySelectorAll(a))c.observe(d)})},B=new WeakMap;function C(a){cancelAnimationFrame(B.get(a)||0),B.set(a,requestAnimationFrame(()=>{for(let b of x.keys()){let c=a.matches(b)?a:a.querySelector(b);if(customElements.get(b)||c){let d=c?.getAttribute("data-load-on")||"ready",e=d in A?A[d]:A.ready;for(let f of x.get(b)||[])e(b).then(f);x.delete(b),B.delete(a)}}}))}let D;function E(a,b){x.has(a)||x.set(a,new Set),x.get(a).add(b),C(document.body),D||(D=new MutationObserver(a=>{if(x.size)for(let b of a)for(let c of b.addedNodes)c instanceof Element&&C(c)})).observe(document,{subtree:!0,childList:!0})}}}]) +//# sourceMappingURL=vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-06ff531-54620720309a.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CC20BFB76FDF3B5FE1E0204740800D4B658F1F b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CC20BFB76FDF3B5FE1E0204740800D4B658F1F new file mode 100644 index 0000000..c9cdc3a Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CC20BFB76FDF3B5FE1E0204740800D4B658F1F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CC20BFB76FDF3B5FE1E0204740800D4B658F1F-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CC20BFB76FDF3B5FE1E0204740800D4B658F1F-blob new file mode 100644 index 0000000..58edc2a --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CC20BFB76FDF3B5FE1E0204740800D4B658F1F-blob @@ -0,0 +1 @@ +
              ((TOP))
              [$1418]
              [$243]
              [$244]
              [$246]
              [$247]
              [$248]
              [$243]
              [$731]
              [$20198]
              [$20199]
              [$1191]
              [$253]
              [$16866]
              \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CE033AA9DB0F42D4E4D055B180AB5AA3D23A6F b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CE033AA9DB0F42D4E4D055B180AB5AA3D23A6F new file mode 100644 index 0000000..9773f8f Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CE033AA9DB0F42D4E4D055B180AB5AA3D23A6F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CE033AA9DB0F42D4E4D055B180AB5AA3D23A6F-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CE033AA9DB0F42D4E4D055B180AB5AA3D23A6F-blob new file mode 100644 index 0000000..a9a21ef --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/01CE033AA9DB0F42D4E4D055B180AB5AA3D23A6F-blob @@ -0,0 +1,4 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["app_assets_modules_github_behaviors_keyboard-shortcuts-helper_ts-app_assets_modules_github_be-f5afdb"],{94313(a,b,c){c.d(b,{Ty:()=>e,YE:()=>f,Zf:()=>g});var d=c(11793);let e=()=>{let a=document.querySelector("meta[name=keyboard-shortcuts-preference]");return!a||"all"===a.content},f=a=>/Enter|Arrow|Escape|Meta|Control|Esc/.test(a)||a.includes("Alt")&&a.includes("Shift"),g=a=>{let b=(0,d.EL)(a);return!!e()||f(b)}},48804(a,b,c){c.d(b,{"L$":()=>l,SE:()=>E,nj:()=>m});var d,e,f=c(76932),g=c(59753),h=c(40987),i=c(64463),j=c(65935),k=c(54650);function l(a){if(a.querySelector(".js-task-list-field")){let b=a.querySelectorAll("task-lists");for(let c of b)if(c instanceof h.Z){c.disabled=!1;let d=c.querySelectorAll("button");for(let e of d)e.disabled=!1}}}function m(a){for(let b of a.querySelectorAll("task-lists"))if(b instanceof h.Z){b.disabled=!0;let c=b.querySelectorAll("button");for(let d of c)d.disabled=!0}}function n(a,b,c){let d=a.querySelector(".js-comment-update");m(a),G(a);let e=d.elements.namedItem("task_list_track");e instanceof Element&&e.remove();let f=d.elements.namedItem("task_list_operation");f instanceof Element&&f.remove();let g=document.createElement("input");g.setAttribute("type","hidden"),g.setAttribute("name","task_list_track"),g.setAttribute("value",b),d.appendChild(g);let h=document.createElement("input");if(h.setAttribute("type","hidden"),h.setAttribute("name","task_list_operation"),h.setAttribute("value",JSON.stringify(c)),d.appendChild(h),!d.elements.namedItem("task_list_key")){let i=d.querySelector(".js-task-list-field"),j=i.getAttribute("name"),l=j.split("[")[0],n=document.createElement("input");n.setAttribute("type","hidden"),n.setAttribute("name","task_list_key"),n.setAttribute("value",l),d.appendChild(n)}a.classList.remove("is-comment-stale"),(0,k.Bt)(d)}(0,i.N7)(".js-task-list-container .js-task-list-field",function(a){let b=a.closest(".js-task-list-container");l(b),G(b)}),(0,i.N7)(".js-convert-tasklist-to-block-enabled .contains-task-list",function(a){let b=H(a);if(!b)return;let c=Array.from(b.children).some(a=>a.classList.contains("task-list-item-convert-container"));if(c)return;let d=a.ownerDocument.querySelector(".js-convert-to-block-template"),e=d?.content.cloneNode(!0);e&&b.appendChild(e)}),(0,g.on)("task-lists-move","task-lists",function(a){let{src:b,dst:c}=a.detail,d=a.currentTarget.closest(".js-task-list-container");n(d,"reordered",{operation:"move",src:b,dst:c})}),(0,g.on)("task-lists-check","task-lists",function(a){let{position:b,checked:c}=a.detail,d=a.currentTarget.closest(".js-task-list-container");n(d,`checked:${c?1:0}`,{operation:"check",position:b,checked:c})}),(0,g.on)("click",".js-convert-to-block-button",function(a){let b=H(a.target);if(!b)return;let c=b.closest("task-lists");if(!c)throw Error("parent not found");let d=E(b),e=a.currentTarget.closest(".js-task-list-container");n(e,"converted",{operation:"convert_to_block",position:d})}),(0,j.AC)(".js-task-list-container .js-comment-update",async function(a,b){let c=a.closest(".js-task-list-container"),d=a.elements.namedItem("task_list_track");d instanceof Element&&d.remove();let e=a.elements.namedItem("task_list_operation");e instanceof Element&&e.remove();let f;try{f=await b.json()}catch(g){let h;try{h=JSON.parse(g.response.text)}catch(i){}if(h&&h.stale){let j=c.querySelector(".js-task-list-field");j.classList.add("session-resumable-canceled"),j.classList.remove("js-session-resumable")}else 422===g.response.status||window.location.reload()}f&&(e&&f.json.source&&(c.querySelector(".js-task-list-field").value=f.json.source),l(c),requestAnimationFrame(()=>G(c)))});let o=!1,p=!1,q=null;function r(a){let b="insertLineBreak"===a.inputType;o=!!b}function s(a){let b=a;if(!o){let c="insertLineBreak"===b.inputType;if(!c)return}let d=b.target;t(d),o=!1}function t(a){let b=C(a.value,[a.selectionStart,a.selectionEnd]);void 0!==b&&u(a,b)}function u(a,b){if(null===q|| !0===q){a.contentEditable="true";try{o=!1;let c;b.commandId===e.insertText?(c=b.autocompletePrefix,null!==b.writeSelection[0]&&null!==b.writeSelection[1]&&(a.selectionStart=b.writeSelection[0],a.selectionEnd=b.writeSelection[1])):a.selectionStart=b.selection[0],q=document.execCommand(b.commandId,!1,c)}catch(d){q=!1}a.contentEditable="false"}if(!q){try{document.execCommand("ms-beginUndoUnit")}catch(f){}a.value=b.text;try{document.execCommand("ms-endUndoUnit")}catch(g){}a.dispatchEvent(new CustomEvent("input",{bubbles:!0,cancelable:!0}))}null!=b.selection[0]&&null!=b.selection[1]&&(a.selectionStart=b.selection[0],a.selectionEnd=b.selection[1])}function v(a){if(p)return;let b=a;if("Enter"===b.key&&b.shiftKey&&!b.metaKey){let c=b.target,d=A(c.value,[c.selectionStart,c.selectionEnd]);if(void 0===d)return;u(c,d),b.preventDefault(),(0,g.f)(c,"change")}}function w(){p=!0}function x(){p=!1}function y(a){if(p)return;let b=a;if("Escape"===b.key){F(a);return}if("Tab"!==b.key)return;let c=b.target,d=D(c.value,[c.selectionStart,c.selectionEnd],b.shiftKey);void 0!==d&&(b.preventDefault(),u(c,d))}(0,i.N7)(".js-task-list-field",{subscribe:a=>(0,f.qC)((0,f.RB)(a,"keydown",y),(0,f.RB)(a,"keydown",v),(0,f.RB)(a,"beforeinput",r),(0,f.RB)(a,"input",s),(0,f.RB)(a,"compositionstart",w),(0,f.RB)(a,"compositionend",x))}),(d=e||(e={})).insertText="insertText",d.delete="delete";let z=/^(\s*)?/;function A(a,b){let c=b[0];if(!c||!a)return;let d=a.substring(0,c).split("\n"),f=d[d.length-1],g=f?.match(z);if(!g)return;let h=g[1]||"",i=` +${h}`;return{text:a.substring(0,c)+i+a.substring(c),autocompletePrefix:i,selection:[c+i.length,c+i.length],commandId:e.insertText,writeSelection:[null,null]}}let B=/^(\s*)([*-]|(\d+)\.)\s(\[[\sx]\]\s)?/;function C(a,b){let c=b[0];if(!c||!a)return;let d=a.substring(0,c).split("\n"),f=d[d.length-2],g=f?.match(B);if(!g)return;let h=g[0],i=g[1],j=g[2],k=parseInt(g[3],10),l=Boolean(g[4]),m=!isNaN(k),n=m?`${k+1}.`:j,o=`${n} ${l?"[ ] ":""}`,p=a.indexOf("\n",c);p<0&&(p=a.length);let q=a.substring(c,p);q.startsWith(o)&&(o="");let r=f.replace(h,"").trim().length>0||q.trim().length>0;if(r){let s=`${i}${o}`,t=a.substring(c),u=s.length,v=[null,null],w=/^\s*$/g,x=a.substring(0,c)+s+t;if(m&&!a.substring(c).match(w)){var y,z;let A;t=(y=a.substring(c),z=k+1,(A=(A=y.split("\n")).map(a=>{if(a.replace(/^\s+/,"").startsWith(`${z}.`)){let b=a.replace(`${z}`,`${z+1}`);return z+=1,b}return a})).join("\n")),s+=t,v=[c,c+s.length],x=a.substring(0,c)+s}return{text:x,autocompletePrefix:s,selection:[c+u,c+u],commandId:e.insertText,writeSelection:v}}{let C=c-` +${h}`.length;return{autocompletePrefix:"",text:a.substring(0,C)+a.substring(c),selection:[C,C],commandId:e.delete,writeSelection:[null,null]}}}function D(a,b,c){let d=b[0]||0,f=b[1]||d;if(null===b[0]||d===f)return;let g=a.substring(0,d).lastIndexOf("\n")+1,h=a.indexOf("\n",f-1),i=h>0?h:a.length-1,j=a.substring(g,i).split("\n"),k=!1,l=0,m=0,n=[];for(let o of j){let p=o.match(/^\s*/);if(p){let q=p[0],r=o.substring(q.length);if(c){let s=q.length;q=q.slice(0,-2),l=k?l:q.length-s,k=!0,m+=q.length-s}else q+=" ",l=2,m+=2;n.push(q+r)}}let t=n.join("\n"),u=a.substring(0,g)+t+a.substring(i),v=[Math.max(g,d+l),f+m];return{text:u,selection:v,autocompletePrefix:t,commandId:e.insertText,writeSelection:[g,i]}}function E(a){let b=a.closest("task-lists");if(!b)throw Error("parent not found");let c=Array.from(b.querySelectorAll("ol, ul")).filter(a=>!a.closest("tracking-block"));return c.indexOf(a)}function F(a){let b=a.target;"backward"===b.selectionDirection?b.selectionEnd=b.selectionStart:b.selectionStart=b.selectionEnd}function G(a){if(0===document.querySelectorAll("tracked-issues-progress").length)return;let b=a.closest(".js-timeline-item");if(b)return;let c=a.querySelectorAll(".js-comment-body [type=checkbox]"),d=c.length,e=Array.from(c).filter(a=>a.checked).length,f=document.querySelectorAll("tracked-issues-progress[data-type=checklist]");for(let g of f)g.setAttribute("data-completed",String(e)),g.setAttribute("data-total",String(d))}function H(a){let b=a.closest(".contains-task-list"),c=b;for(;(c=c.parentElement.closest(".contains-task-list"))!==b&&null!==c;)b=c;return b}},19146(a,b,c){c.d(b,{W:()=>e});var d=c(59753);async function e(a){let b=document.querySelector("#site-details-dialog"),c=b.content.cloneNode(!0),e=c.querySelector("details"),f=e.querySelector("details-dialog"),g=e.querySelector(".js-details-dialog-spinner");a.detailsClass&&e.classList.add(...a.detailsClass.split(" ")),a.dialogClass&&f.classList.add(...a.dialogClass.split(" ")),a.label?f.setAttribute("aria-label",a.label):a.labelledBy&&f.setAttribute("aria-labelledby",a.labelledBy),document.body.append(c);try{let h=await a.content;g.remove(),f.prepend(h)}catch(i){g.remove();let j=document.createElement("span");j.textContent=a.errorMessage||"Couldn't load the content",j.classList.add("my-6"),j.classList.add("mx-4"),f.prepend(j)}return e.addEventListener("toggle",()=>{e.hasAttribute("open")||((0,d.f)(f,"dialog:remove"),e.remove())}),f}},98249(a,b,c){c.d(b,{D:()=>g,a:()=>f});var d=c(2825),e=c(75662);async function f(a,b,c){let f=new Request(b,c);f.headers.append("X-Requested-With","XMLHttpRequest");let g=await self.fetch(f);if(g.status<200||g.status>=300)throw Error(`HTTP ${g.status}${g.statusText||""}`);return(0,d.t)((0,d.P)(a),g),(0,e.r)(a,await g.text())}function g(a,b,c=1e3,d=[200]){return async function c(e){let f=new Request(a,b);f.headers.append("X-Requested-With","XMLHttpRequest");let g=await self.fetch(f);if(202===g.status)return await new Promise(a=>setTimeout(a,e)),c(1.5*e);if(d.includes(g.status))return g;if(g.status<200||g.status>=300)throw Error(`HTTP ${g.status}${g.statusText||""}`);throw Error(`Unexpected ${g.status} response status from poll endpoint`)}(c)}},2825(a,b,c){function d(a){let b=[...a.querySelectorAll("meta[name=html-safe-nonce]")].map(a=>a.content);if(b.length<1)throw Error("could not find html-safe-nonce on document");return b}c.d(b,{P:()=>d,t:()=>f});let e=class ResponseError extends Error{constructor(a,b){super(`${a} for HTTP ${b.status}`),this.response=b}};function f(a,b,c=!1){let d=b.headers.get("content-type")||"";if(!c&&!d.startsWith("text/html"))throw new e(`expected response with text/html, but was ${d}`,b);if(c&&!(d.startsWith("text/html")||d.startsWith("application/json")))throw new e(`expected response with text/html or application/json, but was ${d}`,b);let f=b.headers.get("x-html-safe");if(f){if(!a.includes(f))throw new e("response X-HTML-Safe nonce did not match",b)}else throw new e("missing X-HTML-Safe nonce",b)}},254(a,b,c){c.d(b,{ZG:()=>h,q6:()=>j,w4:()=>i});var d=c(8439);let e=!1,f=new d.Z;function g(a){let b=a.target;if(b instanceof HTMLElement&&b.nodeType!==Node.DOCUMENT_NODE)for(let c of f.matches(b))c.data.call(null,b)}function h(a,b){e||(e=!0,document.addEventListener("focus",g,!0)),f.add(a,b),document.activeElement instanceof HTMLElement&&document.activeElement.matches(a)&&b(document.activeElement)}function i(a,b,c){function d(b){let e=b.currentTarget;e&&(e.removeEventListener(a,c),e.removeEventListener("blur",d))}h(b,function(b){b.addEventListener(a,c),b.addEventListener("blur",d)})}function j(a,b){function c(a){let{currentTarget:d}=a;d&&(d.removeEventListener("input",b),d.removeEventListener("blur",c))}h(a,function(a){a.addEventListener("input",b),a.addEventListener("blur",c)})}},40458(a,b,c){c.d(b,{Z:()=>l});var d=c(19146),e=c(98249),f=c(64463);function g(a){let b=document.querySelector(".sso-modal");b&&(b.classList.remove("success","error"),a?b.classList.add("success"):b.classList.add("error"))}async function h(){var a;let b=document.querySelector("link[rel=sso-modal]"),c=await (0,d.W)({content:(0,e.a)(document,b.href),dialogClass:"sso-modal"}),f=null,h=window.external;if(h.ssoComplete=function(a){a.error?g(f=!1):(g(f=!0),function(a){let b=document.querySelector("meta[name=sso-expires-around]");b&&b.setAttribute("content",a)}(a.expiresAround),window.focus()),h.ssoComplete=null},await (a=c,new Promise(b=>{a.addEventListener("dialog:remove",b,{once:!0})})),!f)throw Error("sso prompt canceled")}async function i(){let a=document.querySelector("link[rel=sso-session]"),b=document.querySelector("meta[name=sso-expires-around]");if(!(a instanceof HTMLLinkElement)||!function(a){if(!(a instanceof HTMLMetaElement))return!0;let b=parseInt(a.content),c=new Date().getTime()/1e3;return c>b}(b))return!0;let c=a.href,d=await fetch(c,{headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"}}),e=await d.json();return e}(0,f.N7)(".js-sso-modal-complete",function(a){if(window.opener&&window.opener.external.ssoComplete){let b=a.getAttribute("data-error"),c=a.getAttribute("data-expires-around");window.opener.external.ssoComplete({error:b,expiresAround:c}),window.close()}else{let d=a.getAttribute("data-fallback-url");d&&(window.location.href=d)}});let j=null;function k(){j=null}async function l(){let a=await i();a||(j||(j=h().then(k).catch(k)),await j)}},76932(a,b,c){c.d(b,{RB:()=>d,qC:()=>e,w0:()=>Subscription});class Subscription{constructor(a){this.closed=!1,this.unsubscribe=()=>{a(),this.closed=!0}}}function d(a,b,c,d={capture:!1}){return a.addEventListener(b,c,d),new Subscription(()=>{a.removeEventListener(b,c,d)})}function e(...a){return new Subscription(()=>{for(let b of a)b.unsubscribe()})}}}]) +//# sourceMappingURL=app_assets_modules_github_behaviors_keyboard-shortcuts-helper_ts-app_assets_modules_github_be-f5afdb-68705bd3ad61.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/0258F1C9E34D91A2185071CEAB3B3111404A01D5 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/0258F1C9E34D91A2185071CEAB3B3111404A01D5 new file mode 100644 index 0000000..049be7f Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/0258F1C9E34D91A2185071CEAB3B3111404A01D5 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/0258F1C9E34D91A2185071CEAB3B3111404A01D5-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/0258F1C9E34D91A2185071CEAB3B3111404A01D5-blob new file mode 100644 index 0000000..c7621a7 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/0258F1C9E34D91A2185071CEAB3B3111404A01D5-blob @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["search"],{59753(a,b,c){function d(){if(!(this instanceof d))return new d;this.size=0,this.uid=0,this.selectors=[],this.selectorObjects={},this.indexes=Object.create(this.indexes),this.activeIndexes=[]}c.d(b,{f:()=>B,on:()=>A});var e,f=window.document.documentElement,g=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector;d.prototype.matchesSelector=function(a,b){return g.call(a,b)},d.prototype.querySelectorAll=function(a,b){return b.querySelectorAll(a)},d.prototype.indexes=[];var h=/^#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"ID",selector:function(a){var b;if(b=a.match(h))return b[0].slice(1)},element:function(a){if(a.id)return[a.id]}});var i=/^\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"CLASS",selector:function(a){var b;if(b=a.match(i))return b[0].slice(1)},element:function(a){var b=a.className;if(b){if("string"==typeof b)return b.split(/\s/);if("object"==typeof b&&"baseVal"in b)return b.baseVal.split(/\s/)}}});var j=/^((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"TAG",selector:function(a){var b;if(b=a.match(j))return b[0].toUpperCase()},element:function(a){return[a.nodeName.toUpperCase()]}}),d.prototype.indexes.default={name:"UNIVERSAL",selector:function(){return!0},element:function(){return[!0]}},e="function"==typeof window.Map?window.Map:function(){function a(){this.map={}}return a.prototype.get=function(a){return this.map[a+" "]},a.prototype.set=function(a,b){this.map[a+" "]=b},a}();var k=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;function l(a,b){var c,d,e,f,g,h,i=(a=a.slice(0).concat(a.default)).length,j=b,l=[];do if(k.exec(""),(e=k.exec(j))&&(j=e[3],e[2]||!j)){for(c=0;c3&& void 0!==arguments[3]?arguments[3]:{},f=!!e.capture,g=f?p:o,h=g[a];h||(h=new d,g[a]=h,document.addEventListener(a,z,f)),h.add(b,c)}function B(a,b,c){return a.dispatchEvent(new CustomEvent(b,{bubbles:!0,cancelable:!0,detail:c}))}},254(a,b,c){c.d(b,{ZG:()=>h,q6:()=>j,w4:()=>i});var d=c(8439);let e=!1,f=new d.Z;function g(a){let b=a.target;if(b instanceof HTMLElement&&b.nodeType!==Node.DOCUMENT_NODE)for(let c of f.matches(b))c.data.call(null,b)}function h(a,b){e||(e=!0,document.addEventListener("focus",g,!0)),f.add(a,b),document.activeElement instanceof HTMLElement&&document.activeElement.matches(a)&&b(document.activeElement)}function i(a,b,c){function d(b){let e=b.currentTarget;e&&(e.removeEventListener(a,c),e.removeEventListener("blur",d))}h(b,function(b){b.addEventListener(a,c),b.addEventListener("blur",d)})}function j(a,b){function c(a){let{currentTarget:d}=a;d&&(d.removeEventListener("input",b),d.removeEventListener("blur",c))}h(a,function(a){a.addEventListener("input",b),a.addEventListener("blur",c)})}},35231(a,b,c){var d=c(254),e=c(64463),f=c(59753);function g(){let a=Array.from(document.querySelectorAll("input[type=text].js-advanced-search-prefix")),b=Array.from(document.querySelectorAll("select.js-advanced-search-prefix")),c=Array.from(document.querySelectorAll(".js-advanced-search-prefix:checked")),d=[...i(a),...i(b),...i(c)],e=d.reduce((a,b)=>(b.value&&b.type&&a[b.type]++,a),{Repositories:0,Users:0,Code:0,Issues:0}),f=d.reduce((a,b)=>`${a} ${(function({prefix:a,value:b}){return""===a?"":b?`${a}${b}`:""})(b)}`.trim(),""),g=document.querySelector(".js-advanced-search-input").value;document.querySelector(".js-type-value").value=function(a){let b=new URLSearchParams(window.location.search),c=b.get("type")||"Repositories",d=0;for(let e in a)a[e]>d&&(d=a[e],c=e);return c}(e),document.querySelector(".js-search-query").value=`${g} ${f}`.trim();let h=document.querySelector(".js-advanced-query");h.textContent="",h.textContent=f;let j=document.createElement("span");j.textContent=g.trim(),h.prepend(j," ")}function h(a){return -1!==a.search(/\s/g)?`"${a}"`:a}function i(a){return a.map(a=>{let b=a.value.trim(),c=a.getAttribute("data-search-prefix"),d=a.getAttribute("data-search-type");return""===c?{prefix:c,value:b,type:d}:-1!==b.search(/,/g)&&"location"!==c?b.split(/,/).map(a=>({prefix:c,value:h(a.trim()),type:d})):{prefix:c,value:h(b),type:d}}).flatMap(a=>a)}(0,d.q6)(".js-advanced-search-prefix",function(){g()}),(0,f.on)("change",".js-advanced-search-prefix",g),(0,f.on)("change",".js-advanced-search-prefix",a=>{let b=a.currentTarget.getAttribute("data-search-prefix");"reason:"===b?function(){let a=document.querySelector("#search_state"),b=document.querySelector("#search_state_reason");if(a&&b){let c=a.value,d=b.value;("completed"===d||"not planned"===d)&&"closed"!==c?a.value="closed":"reopened"===d&&"open"!==c&&(a.value="open")}}():"state:"===b&&function(){let a=document.querySelector("#search_state"),b=document.querySelector("#search_state_reason");if(a&&b){let c=a.value,d=b.value;"closed"===c&&"reopened"===d?b.value="":"open"===c&&"reopened"!==d&&(b.value="")}}()}),(0,d.ZG)(".js-advanced-search-input",function(a){let b=a.closest(".js-advanced-search-label");b.classList.add("focus"),a.addEventListener("blur",()=>b.classList.remove("focus"),{once:!0})}),(0,e.N7)(".js-advanced-search-input",function(){g()})},43036(a,b,c){c(35231);var d=c(64463);(0,d.N7)(".js-codesearch-nav",function(a){let b=a.querySelector(".selected");if(!(b instanceof HTMLElement))return;let c=b.offsetLeft,d=b.offsetWidth,e=c+d,f=window.innerWidth;(e-a.scrollLeft>f||e{var b=b=>a(a.s=b);a.O(0,["vendors-node_modules_selector-observer_dist_index_esm_js"],()=>b(43036));var c=a.O()}]) +//# sourceMappingURL=search-ae962a49e01a.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/02C4027A75D441BBFDB0D3671857BE5793568CDF b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/02C4027A75D441BBFDB0D3671857BE5793568CDF new file mode 100644 index 0000000..0c3335f Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/02C4027A75D441BBFDB0D3671857BE5793568CDF differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/032DED7537A475A0D11489D564FA5F3CEAAB3A38 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/032DED7537A475A0D11489D564FA5F3CEAAB3A38 new file mode 100644 index 0000000..2084b1a Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/032DED7537A475A0D11489D564FA5F3CEAAB3A38 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/03686E604FC1B0DC2927A4D3C52A61211B80C369 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/03686E604FC1B0DC2927A4D3C52A61211B80C369 new file mode 100644 index 0000000..70d32f2 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/03686E604FC1B0DC2927A4D3C52A61211B80C369 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/03686E604FC1B0DC2927A4D3C52A61211B80C369-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/03686E604FC1B0DC2927A4D3C52A61211B80C369-blob new file mode 100644 index 0000000..ea935cf --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/03686E604FC1B0DC2927A4D3C52A61211B80C369-blob @@ -0,0 +1,2 @@ +/*! For license information please see bundle.vendors.modern.js.LICENSE.txt */ +(self.webpackChunkddg=self.webpackChunkddg||[]).push([[176],{2078:(t,e,n)=>{"use strict";n.d(e,{M:()=>c});var r=n(8332),o=n(6927),i=!1,u=0;function a(){return++u}function c(t){var e;if("function"==typeof r.useId){var n=(0,r.useId)(t);return null!=t?t:n}var u=null!=t?t:i?a():null,c=(0,r.eJ)(u),s=c[0],l=c[1];return(0,o.L)((function(){null===s&&l(a())}),[]),(0,r.d4)((function(){!1===i&&(i=!0)}),[]),null!=(e=null!=t?t:s)?e:void 0}},7336:(t,e,n)=>{"use strict";n.d(e,{OK:()=>V,td:()=>F,x4:()=>$,nP:()=>W,mQ:()=>U}),n(9601);var r=n(8332),o=(n(2707),n(9331)),i=n(6927);function u(){}function a(){return a=Object.assign||function(t){for(var e=1;e=0||(o[n]=t[n]);return o}(t,c);e&&i((function(t){var o;if(null!=n)return[].concat(t,[a({},r,{element:e,index:n})]).sort((function(t,e){return t.index-e.index}));if(0===t.length)o=[a({},r,{element:e,index:0})];else if(t.find((function(t){return t.element===e})))o=t;else{var i=t.findIndex((function(t){return!(!t.element||!e)&&Boolean(t.element.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)})),u=a({},r,{element:e,index:i});o=-1===i?[].concat(t,[u]):[].concat(t.slice(0,i),[u],t.slice(i))}return o.map((function(t,e){return a({},t,{index:e})}))}))}),[]),s=(0,r.I4)((function(t){t&&i((function(e){return e.filter((function(e){return t!==e.element}))}))}),[]);return(0,r.az)(e.Provider,{value:(0,r.Ye)((function(){return{descendants:o,registerDescendant:u,unregisterDescendant:s}}),[o,u,s])},n)}var v=n(3017);function d(t,e){var n=(0,r.eJ)(e),o=n[0],i=n[1];return[o,(0,r.I4)((function(e){t.current=e,i(e)}),[])]}var h=["children"];function _(t,e){var n=(0,r.kr)(e);return[function(t){var e=t.children,o=function(t,e){if(null==t)return{};var n,r,o={},i=Object.keys(t);for(r=0;r=0||(o[n]=t[n]);return o}(t,h),i=(0,r.Ye)((function(){return o}),Object.values(o));return(0,r.az)(n.Provider,{value:i},e)},function(o){var i=(0,r.qp)(n);if(i)return i;if(e)return e;throw Error(o+" must be rendered inside of a "+t+" component.")}]}var y=n(472),g=n(469),b=n(674),m=n(6940),x=n(8154),w=n(2078);function O(){return O=Object.assign||function(t){for(var e=1;e=0||(o[n]=t[n]);return o}var k,E,I=["as","children","defaultIndex","orientation","index","keyboardActivation","onChange","readOnly"],P=["children","as","onKeyDown"],j=["isSelected","children","as","index","disabled","onBlur","onFocus"],R=["children","as"],A=["children","aria-label","as","index"],C=s(),T=s(),L=_("Tabs"),M=L[0],D=L[1];!function(t){t.Auto="auto",t.Manual="manual"}(k||(k={})),function(t){t.Horizontal="horizontal",t.Vertical="vertical"}(E||(E={}));var U=(0,r.Gp)((function(t,e){var n=t.as,o=void 0===n?"div":n,i=t.children,a=t.defaultIndex,c=t.orientation,s=void 0===c?E.Horizontal:c,l=t.index,d=void 0===l?void 0:l,h=t.keyboardActivation,_=void 0===h?k.Auto:h,g=t.onChange,m=t.readOnly,x=void 0!==m&&m,P=S(t,I),j=(0,r.sO)(void 0!==d).current,R=(0,w.M)(P.id||"tabs"),A=(0,r.sO)(null),T=(0,r.sO)(!1),L=function(t){var e=t.controlledValue,n=t.defaultValue,o=void 0!==e,i=(0,r.sO)(o).current,u=(0,r.eJ)(i?e:n),a=u[0],c=u[1],s=(0,r.I4)((function(t){i||c(t)}),[]);return[i?e:a,s]}({controlledValue:d,defaultValue:null!=a?a:0,calledFrom:"Tabs"}),D=L[0],U=L[1],N=(0,r.eJ)(-1),F=N[0],V=N[1],H=f(),W=H[0],$=H[1],z=(0,r.I4)((function(){A.current&&(0,y.mf)(A.current.focus)&&A.current.focus()}),[]),G=(0,r.I4)((function(t){g&&g(t),U(t)}),[g,U]),B=(0,r.I4)((function(t){var e,n=null==(e=W[t])?void 0:e.element,r=(0,v.r)(n);_===k.Auto&&(g&&g(t),U(t)),n&&n!==r.activeElement&&(0,y.mf)(n.focus)&&n.focus()}),[_,g,U,W]);return(0,b.kG)("tabs"),(0,r.az)(p,{context:C,items:W,set:$},(0,r.az)(M,{focusedIndex:F,id:R,isControlled:j,isRTL:T,keyboardActivation:_,onFocusPanel:z,onSelectTab:x?u:G,onSelectTabWithKeyboard:x?u:B,orientation:s,selectedIndex:D,selectedPanelRef:A,setFocusedIndex:V,setSelectedIndex:U},(0,r.az)(o,O({},P,{ref:e,"data-reach-tabs":"","data-orientation":s,id:P.id}),(0,y.mf)(i)?i({focusedIndex:F,id:R,selectedIndex:D}):i)))})),N=(0,r.Gp)((function(t,e){var n,o=t.children,u=t.as,a=void 0===u?"div":u,c=t.onKeyDown,s=S(t,P),l=D("TabList"),f=l.focusedIndex,p=l.isControlled,d=l.isRTL,h=l.keyboardActivation,_=l.onSelectTabWithKeyboard,g=l.orientation,b=l.selectedIndex,w=l.setSelectedIndex,E=(n=C,(0,r.qp)(n).descendants),I=(0,r.sO)(null),j=(0,m.e)(e,I);(0,r.d4)((function(){var t,e,n;I.current&&(I.current.ownerDocument&&"rtl"===I.current.ownerDocument.dir||"rtl"===(t=I.current,e="direction",(null==(n=function(t){var e=(0,v.k)(t);return e?e.getComputedStyle(t,null):null}(t))?void 0:n.getPropertyValue(e))||null))&&(d.current=!0)}),[d]);var R=(0,x.M)(c,function(t,e){var n=(0,r.qp)(t).descendants,o=e.callback,i=e.currentIndex,u=e.filter,a=e.key,c=void 0===a?"index":a,s=e.orientation,l=void 0===s?"vertical":s,f=e.rotate,p=void 0===f||f,v=e.rtl,d=void 0!==v&&v;return function(t){if(["ArrowDown","ArrowUp","ArrowLeft","ArrowRight","PageUp","PageDown","Home","End"].includes(t.key)){var e=null!=i?i:-1,r=u?n.filter(u):n;if(r.length){var a=r.findIndex((function(t){return t.index===i}));switch(t.key){case"ArrowDown":if("vertical"===l||"both"===l){t.preventDefault();var s=m();o("option"===c?s:s[c])}break;case"ArrowUp":if("vertical"===l||"both"===l){t.preventDefault();var f=x();o("option"===c?f:f[c])}break;case"ArrowLeft":if("horizontal"===l||"both"===l){t.preventDefault();var v=(d?m:x)();o("option"===c?v:v[c])}break;case"ArrowRight":if("horizontal"===l||"both"===l){t.preventDefault();var h=(d?x:m)();o("option"===c?h:h[c])}break;case"PageUp":t.preventDefault();var _=(t.ctrlKey?x:w)();o("option"===c?_:_[c]);break;case"Home":t.preventDefault();var y=w();o("option"===c?y:y[c]);break;case"PageDown":t.preventDefault();var g=(t.ctrlKey?m:O)();o("option"===c?g:g[c]);break;case"End":t.preventDefault();var b=O();o("option"===c?b:b[c])}}}function m(){return e===O().index?p?w():r[a]:r[(a+1)%r.length]}function x(){return e===w().index?p?O():r[a]:r[(a-1+r.length)%r.length]}function w(){return r[0]}function O(){return r[r.length-1]}}}(C,{currentIndex:h===k.Manual?f:b,orientation:g,rotate:!0,callback:_,filter:function(t){return!t.disabled},rtl:d.current}));return(0,i.L)((function(){var t,e;if(!p&&("true"===(e=null==(t=E[b])?void 0:t.disabled)||(0,y.jn)(e)&&e)){var n=E.find((function(t){return!t.disabled}));n&&w(n.index)}}),[E,p,b,w]),(0,r.az)(a,O({role:"tablist","aria-orientation":g},s,{"data-reach-tab-list":"",ref:j,onKeyDown:R}),o)})),F=(0,r.X$)(N),V=(0,r.Gp)((function(t,e){t.isSelected;var n=t.children,o=t.as,i=void 0===o?"button":o,u=t.index,a=t.disabled,c=t.onBlur,s=t.onFocus,f=S(t,j),p=D("Tab"),v=p.id,h=p.onSelectTab,_=p.orientation,y=p.selectedIndex,b=p.setFocusedIndex,w=d((0,r.sO)(null),null),k=w[0],E=w[1],I=(0,m.e)(e,E),P=l((0,r.Ye)((function(){return{element:k,disabled:!!a}}),[a,k]),C,u),R="button"===i&&null==f.type?"button":f.type,A=P===y;return(0,r.az)(i,O({"aria-controls":(0,g.q)(v,"panel",P),"aria-disabled":a,"aria-selected":A,role:"tab",tabIndex:A?0:-1},f,{ref:I,"data-reach-tab":"","data-orientation":_,"data-selected":A?"":void 0,disabled:a,id:(0,g.q)(v,"tab",P),onClick:function(){h(P)},onFocus:(0,x.M)(s,(function(){b(P)})),onBlur:(0,x.M)(c,(function(){b(-1)})),type:R}),n)})),H=(0,r.Gp)((function(t,e){var n=t.children,o=t.as,i=void 0===o?"div":o,u=S(t,R),a=(0,r.sO)(),c=(0,m.e)(a,e),s=f(),l=s[0],v=s[1];return(0,r.az)(p,{context:T,items:l,set:v},(0,r.az)(i,O({},u,{ref:c,"data-reach-tab-panels":""}),n))})),W=(0,r.X$)(H),$=(0,r.Gp)((function(t,e){var n=t.children;t["aria-label"];var o=t.as,i=void 0===o?"div":o,u=t.index,a=S(t,A),c=D("TabPanel"),s=c.selectedPanelRef,f=c.selectedIndex,p=c.id,v=d((0,r.sO)(null),null),h=v[0],_=v[1],y=l((0,r.Ye)((function(){return{element:h}}),[h]),T,u),b=(0,g.q)(p,"panel",y),x=y===f,w=(0,r.sO)(!1),k=!!w.current&&!x;(0,r.d4)((function(){w.current=!0}),[]);var E=(0,m.e)(e,_,x?s:null);return(0,r.az)(i,O({"aria-labelledby":(0,g.q)(p,"tab",y),hidden:k,role:"tabpanel",tabIndex:x?0:-1},a,{ref:E,"data-reach-tab-panel":"",id:b}),n)}))},6464:(t,e,n)=>{"use strict";function r(){return!("undefined"==typeof window||!window.document||!window.document.createElement)}n.d(e,{N:()=>r})},8154:(t,e,n)=>{"use strict";function r(t,e){return function(n){if(t&&t(n),!n.defaultPrevented)return e(n)}}n.d(e,{M:()=>r})},6940:(t,e,n)=>{"use strict";n.d(e,{e:()=>c}),n(4916),n(1817),n(6992),n(3948);var r=n(8332),o=n(472);function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=t[Symbol.iterator]()).next.bind(n)}function a(t,e){if(null!=t)if((0,o.mf)(t))t(e);else try{t.current=e}catch(n){throw new Error('Cannot assign value "'+e+'" to ref "'+t+'"')}}function c(){for(var t=arguments.length,e=new Array(t),n=0;n{"use strict";function r(t){}n.d(e,{kG:()=>r}),n(1058),n(8332)},469:(t,e,n)=>{"use strict";function r(){for(var t=arguments.length,e=new Array(t),n=0;nr})},3017:(t,e,n)=>{"use strict";n.d(e,{k:()=>i,r:()=>o});var r=n(6464);function o(t){return(0,r.N)()?t?t.ownerDocument:document:null}function i(t){var e=o(t);return e?e.defaultView||window:null}},472:(t,e,n)=>{"use strict";function r(t){return"boolean"==typeof t}function o(t){return!(!t||"[object Function]"!={}.toString.call(t))}n.d(e,{jn:()=>r,mf:()=>o})},9331:(t,e,n)=>{"use strict";n.d(e,{N:()=>o});var r=n(8332);function o(){var t=(0,r.eJ)(Object.create(null))[1];return(0,r.I4)((function(){t(Object.create(null))}),[])}},6927:(t,e,n)=>{"use strict";n.d(e,{L:()=>o});var r=n(8332),o=(0,n(6464).N)()?r.bt:r.d4},1478:(t,e,n)=>{var r;n(9714),function(){"use strict";var n={}.hasOwnProperty;function o(){for(var t=[],e=0;e{"use strict";n.d(e,{hu:()=>Ot,wA:()=>g,HY:()=>y,Vx:()=>yt,n4:()=>Et,Tm:()=>Yt,kr:()=>V,az:()=>h,jz:()=>Ct,ZP:()=>Jt,Gp:()=>xt,X$:()=>gt,sY:()=>Ut,uy:()=>Kt,I4:()=>ut,qp:()=>at,Qb:()=>ct,d4:()=>et,aP:()=>ot,bt:()=>nt,Ye:()=>it,sO:()=>rt,eJ:()=>X}),n(1817),n(6992),n(3948),n(5069),n(4916),n(5306),n(2707),n(8674);var r,o,i,u,a,c,s,l={},f=[],p=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function v(t,e){for(var n in e)t[n]=e[n];return t}function d(t){var e=t.parentNode;e&&e.removeChild(t)}function h(t,e,n){var o,i,u,a={};for(u in e)"key"==u?o=e[u]:"ref"==u?i=e[u]:a[u]=e[u];if(arguments.length>2&&(a.children=arguments.length>3?r.call(arguments,2):n),"function"==typeof t&&null!=t.defaultProps)for(u in t.defaultProps)void 0===a[u]&&(a[u]=t.defaultProps[u]);return _(t,a,o,i,null)}function _(t,e,n,r,u){var a={type:t,props:e,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==u?++i:u};return null==u&&null!=o.vnode&&o.vnode(a),a}function y(t){return t.children}function g(t,e){this.props=t,this.context=e}function b(t,e){if(null==e)return t.__?b(t.__,t.__.__k.indexOf(t)+1):null;for(var n;e0?_(h.type,h.props,h.key,null,h.__v):h)){if(h.__=n,h.__b=n.__b+1,null===(d=w[p])||d&&h.key==d.key&&h.type===d.type)w[p]=void 0;else for(v=0;v2&&(a.children=arguments.length>3?r.call(arguments,2):n),_(t.type,a,o||t.key,i||t.ref,null)}function V(t,e){var n={__c:e="__cC"+s++,__:t,Consumer:function(t,e){return t.children(e)},Provider:function(t){var n,r;return this.getChildContext||(n=[],(r={})[e]=this,this.getChildContext=function(){return r},this.shouldComponentUpdate=function(t){this.props.value!==t.value&&n.some(x)},this.sub=function(t){n.push(t);var e=t.componentWillUnmount;t.componentWillUnmount=function(){n.splice(n.indexOf(t),1),e&&e.call(t)}}),t.children}};return n.Provider.__=n.Consumer.contextType=n}r=f.slice,o={__e:function(t,e,n,r){for(var o,i,u;e=e.__;)if((o=e.__c)&&!o.__)try{if((i=o.constructor)&&null!=i.getDerivedStateFromError&&(o.setState(i.getDerivedStateFromError(t)),u=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(t,r||{}),u=o.__d),u)return o.__E=o}catch(e){t=e}throw t}},i=0,g.prototype.setState=function(t,e){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v({},this.state),"function"==typeof t&&(t=t(v({},n),this.props)),t&&v(n,t),null!=t&&this.__v&&(e&&this.__h.push(e),x(this))},g.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),x(this))},g.prototype.render=y,u=[],a="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,w.__r=0,s=0;var H,W,$,z,G=0,B=[],q=o.__b,Y=o.__r,K=o.diffed,J=o.__c,Z=o.unmount;function Q(t,e){o.__h&&o.__h(W,t,G||e),G=0;var n=W.__H||(W.__H={__:[],__h:[]});return t>=n.__.length&&n.__.push({}),n.__[t]}function X(t){return G=1,tt(dt,t)}function tt(t,e,n){var r=Q(H++,2);return r.t=t,r.__c||(r.__=[n?n(e):dt(void 0,e),function(t){var e=r.t(r.__[0],t);r.__[0]!==e&&(r.__=[e,r.__[1]],r.__c.setState({}))}],r.__c=W),r.__}function et(t,e){var n=Q(H++,3);!o.__s&&vt(n.__H,e)&&(n.__=t,n.__H=e,W.__H.__h.push(n))}function nt(t,e){var n=Q(H++,4);!o.__s&&vt(n.__H,e)&&(n.__=t,n.__H=e,W.__h.push(n))}function rt(t){return G=5,it((function(){return{current:t}}),[])}function ot(t,e,n){G=6,nt((function(){return"function"==typeof t?(t(e()),function(){return t(null)}):t?(t.current=e(),function(){return t.current=null}):void 0}),null==n?n:n.concat(t))}function it(t,e){var n=Q(H++,7);return vt(n.__H,e)&&(n.__=t(),n.__H=e,n.__h=t),n.__}function ut(t,e){return G=8,it((function(){return t}),e)}function at(t){var e=W.context[t.__c],n=Q(H++,9);return n.c=t,e?(null==n.__&&(n.__=!0,e.sub(W)),e.props.value):t.__}function ct(t,e){o.useDebugValue&&o.useDebugValue(e?e(t):t)}function st(){for(var t;t=B.shift();)if(t.__P)try{t.__H.__h.forEach(ft),t.__H.__h.forEach(pt),t.__H.__h=[]}catch(e){t.__H.__h=[],o.__e(e,t.__v)}}o.__b=function(t){W=null,q&&q(t)},o.__r=function(t){Y&&Y(t),H=0;var e=(W=t.__c).__H;e&&($===W?(e.__h=[],W.__h=[],e.__.forEach((function(t){t.__H&&(t.__H=void 0)}))):(e.__h.forEach(ft),e.__h.forEach(pt),e.__h=[])),$=W},o.diffed=function(t){K&&K(t);var e=t.__c;e&&e.__H&&e.__H.__h.length&&(1!==B.push(e)&&z===o.requestAnimationFrame||((z=o.requestAnimationFrame)||function(t){var e,n=function(){clearTimeout(r),lt&&cancelAnimationFrame(e),setTimeout(t)},r=setTimeout(n,100);lt&&(e=requestAnimationFrame(n))})(st)),W=null,$=null},o.__c=function(t,e){e.some((function(t){try{t.__h.forEach(ft),t.__h=t.__h.filter((function(t){return!t.__||pt(t)}))}catch(n){e.some((function(t){t.__h&&(t.__h=[])})),e=[],o.__e(n,t.__v)}})),J&&J(t,e)},o.unmount=function(t){Z&&Z(t);var e,n=t.__c;n&&n.__H&&(n.__H.__.forEach((function(t){try{ft(t)}catch(t){e=t}})),e&&o.__e(e,n.__v))};var lt="function"==typeof requestAnimationFrame;function ft(t){var e=W,n=t.__c;"function"==typeof n&&(t.__c=void 0,n()),W=e}function pt(t){var e=W;t.__c=t.__(),W=e}function vt(t,e){return!t||t.length!==e.length||e.some((function(e,n){return e!==t[n]}))}function dt(t,e){return"function"==typeof e?e(t):e}function ht(t,e){for(var n in e)t[n]=e[n];return t}function _t(t,e){for(var n in t)if("__source"!==n&&!(n in e))return!0;for(var r in e)if("__source"!==r&&t[r]!==e[r])return!0;return!1}function yt(t){this.props=t}function gt(t,e){function n(t){var n=this.props.ref,r=n==t.ref;return!r&&n&&(n.call?n(null):n.current=null),e?!e(this.props,t)||!r:_t(this.props,t)}function r(e){return this.shouldComponentUpdate=n,h(t,e)}return r.displayName="Memo("+(t.displayName||t.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r}(yt.prototype=new g).isPureReactComponent=!0,yt.prototype.shouldComponentUpdate=function(t,e){return _t(this.props,t)||_t(this.state,e)};var bt=o.__b;o.__b=function(t){t.type&&t.type.__f&&t.ref&&(t.props.ref=t.ref,t.ref=null),bt&&bt(t)};var mt="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function xt(t){function e(e){var n=ht({},e);return delete n.ref,t(n,e.ref||null)}return e.$$typeof=mt,e.render=e,e.prototype.isReactComponent=e.__f=!0,e.displayName="ForwardRef("+(t.displayName||t.name)+")",e}var wt=function(t,e){return null==t?null:k(k(t).map(e))},Ot={map:wt,forEach:wt,count:function(t){return t?k(t).length:0},only:function(t){var e=k(t);if(1!==e.length)throw"Children.only";return e[0]},toArray:k},St=o.__e;o.__e=function(t,e,n,r){if(t.then)for(var o,i=e;i=i.__;)if((o=i.__c)&&o.__c)return null==e.__e&&(e.__e=n.__e,e.__k=n.__k),o.__c(t,e);St(t,e,n,r)};var kt=o.unmount;function Et(){this.__u=0,this.t=null,this.__b=null}function It(t){var e=t.__.__c;return e&&e.__e&&e.__e(t)}function Pt(){this.u=null,this.o=null}o.unmount=function(t){var e=t.__c;e&&e.__R&&e.__R(),e&&!0===t.__h&&(t.type=null),kt&&kt(t)},(Et.prototype=new g).__c=function(t,e){var n=e.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);var o=It(r.__v),i=!1,u=function(){i||(i=!0,n.__R=null,o?o(a):a())};n.__R=u;var a=function(){if(!--r.__u){if(r.state.__e){var t=r.state.__e;r.__v.__k[0]=function t(e,n,r){return e&&(e.__v=null,e.__k=e.__k&&e.__k.map((function(e){return t(e,n,r)})),e.__c&&e.__c.__P===n&&(e.__e&&r.insertBefore(e.__e,e.__d),e.__c.__e=!0,e.__c.__P=r)),e}(t,t.__c.__P,t.__c.__O)}var e;for(r.setState({__e:r.__b=null});e=r.t.pop();)e.forceUpdate()}},c=!0===e.__h;r.__u++||c||r.setState({__e:r.__b=r.__v.__k[0]}),t.then(u,u)},Et.prototype.componentWillUnmount=function(){this.t=[]},Et.prototype.render=function(t,e){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function t(e,n,r){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach((function(t){"function"==typeof t.__c&&t.__c()})),e.__c.__H=null),null!=(e=ht({},e)).__c&&(e.__c.__P===r&&(e.__c.__P=n),e.__c=null),e.__k=e.__k&&e.__k.map((function(e){return t(e,n,r)}))),e}(this.__b,n,r.__O=r.__P)}this.__b=null}var o=e.__e&&h(y,null,t.fallback);return o&&(o.__h=null),[h(y,null,e.__e?null:t.children),o]};var jt=function(t,e,n){if(++n[1]===n[0]&&t.o.delete(e),t.props.revealOrder&&("t"!==t.props.revealOrder[0]||!t.o.size))for(n=t.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),e.i.removeChild(t)}}),U(h(Rt,{context:e.context},t.__v),e.l)):e.l&&e.componentWillUnmount()}function Ct(t,e){var n=h(At,{__v:t,i:e});return n.containerInfo=e,n}(Pt.prototype=new g).__e=function(t){var e=this,n=It(e.__v),r=e.o.get(t);return r[0]++,function(o){var i=function(){e.props.revealOrder?(r.push(o),jt(e,t,r)):o()};n?n(i):i()}},Pt.prototype.render=function(t){this.u=null,this.o=new Map;var e=k(t.children);t.revealOrder&&"b"===t.revealOrder[0]&&e.reverse();for(var n=e.length;n--;)this.o.set(e[n],this.u=[1,0,this.u]);return t.children},Pt.prototype.componentDidUpdate=Pt.prototype.componentDidMount=function(){var t=this;this.o.forEach((function(e,n){jt(t,n,e)}))};var Tt="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,Lt=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Mt="undefined"!=typeof document,Dt=function(t){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(t)};function Ut(t,e,n){return null==e.__k&&(e.textContent=""),U(t,e),"function"==typeof n&&n(),t?t.__c:null}g.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(t){Object.defineProperty(g.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})}));var Nt=o.event;function Ft(){}function Vt(){return this.cancelBubble}function Ht(){return this.defaultPrevented}o.event=function(t){return Nt&&(t=Nt(t)),t.persist=Ft,t.isPropagationStopped=Vt,t.isDefaultPrevented=Ht,t.nativeEvent=t};var Wt,$t={configurable:!0,get:function(){return this.class}},zt=o.vnode;o.vnode=function(t){var e=t.type,n=t.props,r=n;if("string"==typeof e){var o=-1===e.indexOf("-");for(var i in r={},n){var u=n[i];Mt&&"children"===i&&"noscript"===e||"value"===i&&"defaultValue"in n&&null==u||("defaultValue"===i&&"value"in n&&null==n.value?i="value":"download"===i&&!0===u?u="":/ondoubleclick/i.test(i)?i="ondblclick":/^onchange(textarea|input)/i.test(i+e)&&!Dt(n.type)?i="oninput":/^onfocus$/i.test(i)?i="onfocusin":/^onblur$/i.test(i)?i="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)?i=i.toLowerCase():o&&Lt.test(i)?i=i.replace(/[A-Z0-9]/,"-$&").toLowerCase():null===u&&(u=void 0),/^oninput/i.test(i)&&(i=i.toLowerCase(),r[i]&&(i="oninputCapture")),r[i]=u)}"select"==e&&r.multiple&&Array.isArray(r.value)&&(r.value=k(n.children).forEach((function(t){t.props.selected=-1!=r.value.indexOf(t.props.value)}))),"select"==e&&null!=r.defaultValue&&(r.value=k(n.children).forEach((function(t){t.props.selected=r.multiple?-1!=r.defaultValue.indexOf(t.props.value):r.defaultValue==t.props.value}))),t.props=r,n.class!=n.className&&($t.enumerable="className"in n,null!=n.className&&(r.class=n.className),Object.defineProperty(r,"className",$t))}t.$$typeof=Tt,zt&&zt(t)};var Gt=o.__r;o.__r=function(t){Gt&&Gt(t),Wt=t.__c};var Bt={ReactCurrentDispatcher:{current:{readContext:function(t){return Wt.__n[t.__c].props.value}}}};function qt(t){return!!t&&t.$$typeof===Tt}function Yt(t){return qt(t)?F.apply(null,arguments):t}function Kt(t){return!!t.__k&&(U(null,t),!0)}const Jt={useState:X,useReducer:tt,useEffect:et,useLayoutEffect:nt,useRef:rt,useImperativeHandle:ot,useMemo:it,useCallback:ut,useContext:at,useDebugValue:ct,version:"17.0.2",Children:Ot,render:Ut,hydrate:function(t,e,n){return N(t,e),"function"==typeof n&&n(),t?t.__c:null},unmountComponentAtNode:Kt,createPortal:Ct,createElement:h,createContext:V,createFactory:function(t){return h.bind(null,t)},cloneElement:Yt,createRef:function(){return{current:null}},Fragment:y,isValidElement:qt,findDOMNode:function(t){return t&&(t.base||1===t.nodeType&&t)||null},Component:g,PureComponent:yt,memo:gt,forwardRef:xt,flushSync:function(t,e){return t(e)},unstable_batchedUpdates:function(t,e){return t(e)},StrictMode:y,Suspense:Et,SuspenseList:Pt,lazy:function(t){var e,n,r;function o(o){if(e||(e=t()).then((function(t){n=t.default||t}),(function(t){r=t})),r)throw r;if(!n)throw e;return h(n,o)}return o.displayName="Lazy",o.__f=!0,o},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Bt}},3358:(t,e,n)=>{"use strict";var r=n(997);function o(){}function i(){}i.resetWarningCache=o,t.exports=function(){function t(t,e,n,o,i,u){if(u!==r){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function e(){return t}t.isRequired=t;var n={array:t,bigint:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},4935:(t,e,n)=>{t.exports=n(3358)()},997:t=>{"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},5129:(t,e,n)=>{"use strict";n.d(e,{YD:()=>v}),n(9601),n(6992),n(3948),n(9714),n(2707);var r=n(8332);function o(){return o=Object.assign||function(t){for(var e=1;e=t}));t.trackVisibility&&void 0===e.isVisible&&(e.isVisible=i),null==(n=o.get(e.target))||n.forEach((function(t){t(i,e)}))}))}),t);r=i.thresholds||(Array.isArray(t.threshold)?t.threshold:[t.threshold||0]),n={id:e,observer:i,elements:o},u.set(e,n)}return n}(n),s=i.id,l=i.observer,f=i.elements,p=f.get(t)||[];return f.has(t)||f.set(t,p),p.push(e),l.observe(t),function(){p.splice(p.indexOf(e),1),0===p.length&&(f.delete(t),l.unobserve(t)),0===f.size&&(l.disconnect(),u.delete(s))}}var l=["children","as","triggerOnce","threshold","root","rootMargin","onChange","skip","trackVisibility","delay","initialInView","fallbackInView"];function f(t){return"function"!=typeof t.children}var p=function(t){var e,n;function u(e){var n;return(n=t.call(this,e)||this).node=null,n._unobserveCb=null,n.handleNode=function(t){n.node&&(n.unobserve(),t||n.props.triggerOnce||n.props.skip||n.setState({inView:!!n.props.initialInView,entry:void 0})),n.node=t||null,n.observeNode()},n.handleChange=function(t,e){t&&n.props.triggerOnce&&n.unobserve(),f(n.props)||n.setState({inView:t,entry:e}),n.props.onChange&&n.props.onChange(t,e)},n.state={inView:!!e.initialInView,entry:void 0},n}n=t,(e=u).prototype=Object.create(n.prototype),e.prototype.constructor=e,i(e,n);var a=u.prototype;return a.componentDidUpdate=function(t){t.rootMargin===this.props.rootMargin&&t.root===this.props.root&&t.threshold===this.props.threshold&&t.skip===this.props.skip&&t.trackVisibility===this.props.trackVisibility&&t.delay===this.props.delay||(this.unobserve(),this.observeNode())},a.componentWillUnmount=function(){this.unobserve(),this.node=null},a.observeNode=function(){if(this.node&&!this.props.skip){var t=this.props,e=t.threshold,n=t.root,r=t.rootMargin,o=t.trackVisibility,i=t.delay,u=t.fallbackInView;this._unobserveCb=s(this.node,this.handleChange,{threshold:e,root:n,rootMargin:r,trackVisibility:o,delay:i},u)}},a.unobserve=function(){this._unobserveCb&&(this._unobserveCb(),this._unobserveCb=null)},a.render=function(){if(!f(this.props)){var t=this.state,e=t.inView,n=t.entry;return this.props.children({inView:e,entry:n,ref:this.handleNode})}var i=this.props,u=i.children,a=i.as,c=function(t,e){if(null==t)return{};var n,r,o={},i=Object.keys(t);for(r=0;r=0||(o[n]=t[n]);return o}(i,l);return r.az(a||"div",o({ref:this.handleNode},c),u)},u}(r.wA);function v(t){var e=void 0===t?{}:t,n=e.threshold,o=e.delay,i=e.trackVisibility,u=e.rootMargin,a=e.root,c=e.triggerOnce,l=e.skip,f=e.initialInView,p=e.fallbackInView,v=r.sO(),d=r.eJ({inView:!!f}),h=d[0],_=d[1],y=r.I4((function(t){void 0!==v.current&&(v.current(),v.current=void 0),l||t&&(v.current=s(t,(function(t,e){_({inView:t,entry:e}),e.isIntersecting&&c&&v.current&&(v.current(),v.current=void 0)}),{root:a,rootMargin:u,threshold:n,trackVisibility:i,delay:o},p))}),[Array.isArray(n)?n.toString():n,a,u,c,l,i,p,o]);(0,r.d4)((function(){v.current||!h.entry||c||l||_({inView:!!f})}));var g=[y,h.inView,h.entry];return g.ref=g[0],g.inView=g[1],g.entry=g[2],g}p.displayName="InView",p.defaultProps={threshold:0,triggerOnce:!1,initialInView:!1}},9662:(t,e,n)=>{var r=n(7854),o=n(614),i=n(6330),u=r.TypeError;t.exports=function(t){if(o(t))return t;throw u(i(t)+" is not a function")}},9483:(t,e,n)=>{var r=n(7854),o=n(4411),i=n(6330),u=r.TypeError;t.exports=function(t){if(o(t))return t;throw u(i(t)+" is not a constructor")}},6077:(t,e,n)=>{var r=n(7854),o=n(614),i=r.String,u=r.TypeError;t.exports=function(t){if("object"==typeof t||o(t))return t;throw u("Can't set "+i(t)+" as a prototype")}},1223:(t,e,n)=>{var r=n(5112),o=n(30),i=n(3070),u=r("unscopables"),a=Array.prototype;null==a[u]&&i.f(a,u,{configurable:!0,value:o(null)}),t.exports=function(t){a[u][t]=!0}},1530:(t,e,n)=>{"use strict";var r=n(8710).charAt;t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},5787:(t,e,n)=>{var r=n(7854),o=n(7976),i=r.TypeError;t.exports=function(t,e){if(o(e,t))return t;throw i("Incorrect invocation")}},9670:(t,e,n)=>{var r=n(7854),o=n(111),i=r.String,u=r.TypeError;t.exports=function(t){if(o(t))return t;throw u(i(t)+" is not an object")}},1318:(t,e,n)=>{var r=n(5656),o=n(1400),i=n(6244),u=function(t){return function(e,n,u){var a,c=r(e),s=i(c),l=o(u,s);if(t&&n!=n){for(;s>l;)if((a=c[l++])!=a)return!0}else for(;s>l;l++)if((t||l in c)&&c[l]===n)return t||l||0;return!t&&-1}};t.exports={includes:u(!0),indexOf:u(!1)}},9341:(t,e,n)=>{"use strict";var r=n(7293);t.exports=function(t,e){var n=[][t];return!!n&&r((function(){n.call(null,e||function(){return 1},1)}))}},3671:(t,e,n)=>{var r=n(7854),o=n(9662),i=n(7908),u=n(8361),a=n(6244),c=r.TypeError,s=function(t){return function(e,n,r,s){o(n);var l=i(e),f=u(l),p=a(l),v=t?p-1:0,d=t?-1:1;if(r<2)for(;;){if(v in f){s=f[v],v+=d;break}if(v+=d,t?v<0:p<=v)throw c("Reduce of empty array with no initial value")}for(;t?v>=0:p>v;v+=d)v in f&&(s=n(s,f[v],v,l));return s}};t.exports={left:s(!1),right:s(!0)}},1589:(t,e,n)=>{var r=n(7854),o=n(1400),i=n(6244),u=n(6135),a=r.Array,c=Math.max;t.exports=function(t,e,n){for(var r=i(t),s=o(e,r),l=o(void 0===n?r:n,r),f=a(c(l-s,0)),p=0;s{var r=n(1702);t.exports=r([].slice)},4362:(t,e,n)=>{var r=n(1589),o=Math.floor,i=function(t,e){var n=t.length,c=o(n/2);return n<8?u(t,e):a(t,i(r(t,0,c),e),i(r(t,c),e),e)},u=function(t,e){for(var n,r,o=t.length,i=1;i0;)t[r]=t[--r];r!==i++&&(t[r]=n)}return t},a=function(t,e,n,r){for(var o=e.length,i=n.length,u=0,a=0;u{var r=n(7854),o=n(3157),i=n(4411),u=n(111),a=n(5112)("species"),c=r.Array;t.exports=function(t){var e;return o(t)&&(e=t.constructor,(i(e)&&(e===c||o(e.prototype))||u(e)&&null===(e=e[a]))&&(e=void 0)),void 0===e?c:e}},5417:(t,e,n)=>{var r=n(7475);t.exports=function(t,e){return new(r(t))(0===e?0:e)}},7072:(t,e,n)=>{var r=n(5112)("iterator"),o=!1;try{var i=0,u={next:function(){return{done:!!i++}},return:function(){o=!0}};u[r]=function(){return this},Array.from(u,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n}},4326:(t,e,n)=>{var r=n(1702),o=r({}.toString),i=r("".slice);t.exports=function(t){return i(o(t),8,-1)}},648:(t,e,n)=>{var r=n(7854),o=n(1694),i=n(614),u=n(4326),a=n(5112)("toStringTag"),c=r.Object,s="Arguments"==u(function(){return arguments}());t.exports=o?u:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=c(t),a))?n:s?u(e):"Object"==(r=u(e))&&i(e.callee)?"Arguments":r}},9920:(t,e,n)=>{var r=n(2597),o=n(3887),i=n(1236),u=n(3070);t.exports=function(t,e,n){for(var a=o(e),c=u.f,s=i.f,l=0;l{var r=n(5112)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,"/./"[t](e)}catch(t){}}return!1}},8544:(t,e,n)=>{var r=n(7293);t.exports=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},4994:(t,e,n)=>{"use strict";var r=n(3383).IteratorPrototype,o=n(30),i=n(9114),u=n(8003),a=n(7497),c=function(){return this};t.exports=function(t,e,n,s){var l=e+" Iterator";return t.prototype=o(r,{next:i(+!s,n)}),u(t,l,!1,!0),a[l]=c,t}},8880:(t,e,n)=>{var r=n(9781),o=n(3070),i=n(9114);t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},9114:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},6135:(t,e,n)=>{"use strict";var r=n(4948),o=n(3070),i=n(9114);t.exports=function(t,e,n){var u=r(e);u in t?o.f(t,u,i(0,n)):t[u]=n}},654:(t,e,n)=>{"use strict";var r=n(2109),o=n(6916),i=n(1913),u=n(6530),a=n(614),c=n(4994),s=n(9518),l=n(7674),f=n(8003),p=n(8880),v=n(1320),d=n(5112),h=n(7497),_=n(3383),y=u.PROPER,g=u.CONFIGURABLE,b=_.IteratorPrototype,m=_.BUGGY_SAFARI_ITERATORS,x=d("iterator"),w="keys",O="values",S="entries",k=function(){return this};t.exports=function(t,e,n,u,d,_,E){c(n,e,u);var I,P,j,R=function(t){if(t===d&&M)return M;if(!m&&t in T)return T[t];switch(t){case w:case O:case S:return function(){return new n(this,t)}}return function(){return new n(this)}},A=e+" Iterator",C=!1,T=t.prototype,L=T[x]||T["@@iterator"]||d&&T[d],M=!m&&L||R(d),D="Array"==e&&T.entries||L;if(D&&(I=s(D.call(new t)))!==Object.prototype&&I.next&&(i||s(I)===b||(l?l(I,b):a(I[x])||v(I,x,k)),f(I,A,!0,!0),i&&(h[A]=k)),y&&d==O&&L&&L.name!==O&&(!i&&g?p(T,"name",O):(C=!0,M=function(){return o(L,this)})),d)if(P={values:R(O),keys:_?M:R(w),entries:R(S)},E)for(j in P)(m||C||!(j in T))&&v(T,j,P[j]);else r({target:e,proto:!0,forced:m||C},P);return i&&!E||T[x]===M||v(T,x,M,{name:d}),h[e]=M,P}},9781:(t,e,n)=>{var r=n(7293);t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},317:(t,e,n)=>{var r=n(7854),o=n(111),i=r.document,u=o(i)&&o(i.createElement);t.exports=function(t){return u?i.createElement(t):{}}},8324:t=>{t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},8509:(t,e,n)=>{var r=n(317)("span").classList,o=r&&r.constructor&&r.constructor.prototype;t.exports=o===Object.prototype?void 0:o},8886:(t,e,n)=>{var r=n(8113).match(/firefox\/(\d+)/i);t.exports=!!r&&+r[1]},7871:t=>{t.exports="object"==typeof window},256:(t,e,n)=>{var r=n(8113);t.exports=/MSIE|Trident/.test(r)},1528:(t,e,n)=>{var r=n(8113),o=n(7854);t.exports=/ipad|iphone|ipod/i.test(r)&&void 0!==o.Pebble},6833:(t,e,n)=>{var r=n(8113);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},5268:(t,e,n)=>{var r=n(4326),o=n(7854);t.exports="process"==r(o.process)},1036:(t,e,n)=>{var r=n(8113);t.exports=/web0s(?!.*chrome)/i.test(r)},8113:(t,e,n)=>{var r=n(5005);t.exports=r("navigator","userAgent")||""},7392:(t,e,n)=>{var r,o,i=n(7854),u=n(8113),a=i.process,c=i.Deno,s=a&&a.versions||c&&c.version,l=s&&s.v8;l&&(o=(r=l.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&u&&(!(r=u.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=u.match(/Chrome\/(\d+)/))&&(o=+r[1]),t.exports=o},8008:(t,e,n)=>{var r=n(8113).match(/AppleWebKit\/(\d+)\./);t.exports=!!r&&+r[1]},748:t=>{t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},2109:(t,e,n)=>{var r=n(7854),o=n(1236).f,i=n(8880),u=n(1320),a=n(3505),c=n(9920),s=n(4705);t.exports=function(t,e){var n,l,f,p,v,d=t.target,h=t.global,_=t.stat;if(n=h?r:_?r[d]||a(d,{}):(r[d]||{}).prototype)for(l in e){if(p=e[l],f=t.noTargetGet?(v=o(n,l))&&v.value:n[l],!s(h?l:d+(_?".":"#")+l,t.forced)&&void 0!==f){if(typeof p==typeof f)continue;c(p,f)}(t.sham||f&&f.sham)&&i(p,"sham",!0),u(n,l,p,t)}}},7293:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},7007:(t,e,n)=>{"use strict";n(4916);var r=n(1702),o=n(1320),i=n(2261),u=n(7293),a=n(5112),c=n(8880),s=a("species"),l=RegExp.prototype;t.exports=function(t,e,n,f){var p=a(t),v=!u((function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})),d=v&&!u((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[s]=function(){return n},n.flags="",n[p]=/./[p]),n.exec=function(){return e=!0,null},n[p](""),!e}));if(!v||!d||n){var h=r(/./[p]),_=e(p,""[t],(function(t,e,n,o,u){var a=r(t),c=e.exec;return c===i||c===l.exec?v&&!u?{done:!0,value:h(e,n,o)}:{done:!0,value:a(n,e,o)}:{done:!1}}));o(String.prototype,t,_[0]),o(l,p,_[1])}f&&c(l[p],"sham",!0)}},6790:(t,e,n)=>{"use strict";var r=n(7854),o=n(3157),i=n(6244),u=n(9974),a=r.TypeError,c=function(t,e,n,r,s,l,f,p){for(var v,d,h=s,_=0,y=!!f&&u(f,p);_0&&o(v))d=i(v),h=c(t,e,v,d,h,l-1)-1;else{if(h>=9007199254740991)throw a("Exceed the acceptable array length");t[h]=v}h++}_++}return h};t.exports=c},2104:(t,e,n)=>{var r=n(4374),o=Function.prototype,i=o.apply,u=o.call;t.exports="object"==typeof Reflect&&Reflect.apply||(r?u.bind(i):function(){return u.apply(i,arguments)})},9974:(t,e,n)=>{var r=n(1702),o=n(9662),i=n(4374),u=r(r.bind);t.exports=function(t,e){return o(t),void 0===e?t:i?u(t,e):function(){return t.apply(e,arguments)}}},4374:(t,e,n)=>{var r=n(7293);t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},6916:(t,e,n)=>{var r=n(4374),o=Function.prototype.call;t.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},6530:(t,e,n)=>{var r=n(9781),o=n(2597),i=Function.prototype,u=r&&Object.getOwnPropertyDescriptor,a=o(i,"name"),c=a&&"something"===function(){}.name,s=a&&(!r||r&&u(i,"name").configurable);t.exports={EXISTS:a,PROPER:c,CONFIGURABLE:s}},1702:(t,e,n)=>{var r=n(4374),o=Function.prototype,i=o.bind,u=o.call,a=r&&i.bind(u,u);t.exports=r?function(t){return t&&a(t)}:function(t){return t&&function(){return u.apply(t,arguments)}}},5005:(t,e,n)=>{var r=n(7854),o=n(614),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t]):r[t]&&r[t][e]}},1246:(t,e,n)=>{var r=n(648),o=n(8173),i=n(7497),u=n(5112)("iterator");t.exports=function(t){if(null!=t)return o(t,u)||o(t,"@@iterator")||i[r(t)]}},8554:(t,e,n)=>{var r=n(7854),o=n(6916),i=n(9662),u=n(9670),a=n(6330),c=n(1246),s=r.TypeError;t.exports=function(t,e){var n=arguments.length<2?c(t):e;if(i(n))return u(o(n,t));throw s(a(t)+" is not iterable")}},8173:(t,e,n)=>{var r=n(9662);t.exports=function(t,e){var n=t[e];return null==n?void 0:r(n)}},647:(t,e,n)=>{var r=n(1702),o=n(7908),i=Math.floor,u=r("".charAt),a=r("".replace),c=r("".slice),s=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,l=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,r,f,p){var v=n+t.length,d=r.length,h=l;return void 0!==f&&(f=o(f),h=s),a(p,h,(function(o,a){var s;switch(u(a,0)){case"$":return"$";case"&":return t;case"`":return c(e,0,n);case"'":return c(e,v);case"<":s=f[c(a,1,-1)];break;default:var l=+a;if(0===l)return o;if(l>d){var p=i(l/10);return 0===p?o:p<=d?void 0===r[p-1]?u(a,1):r[p-1]+u(a,1):o}s=r[l-1]}return void 0===s?"":s}))}},7854:(t,e,n)=>{var r=function(t){return t&&t.Math==Math&&t};t.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},2597:(t,e,n)=>{var r=n(1702),o=n(7908),i=r({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return i(o(t),e)}},3501:t=>{t.exports={}},842:(t,e,n)=>{var r=n(7854);t.exports=function(t,e){var n=r.console;n&&n.error&&(1==arguments.length?n.error(t):n.error(t,e))}},490:(t,e,n)=>{var r=n(5005);t.exports=r("document","documentElement")},4664:(t,e,n)=>{var r=n(9781),o=n(7293),i=n(317);t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},8361:(t,e,n)=>{var r=n(7854),o=n(1702),i=n(7293),u=n(4326),a=r.Object,c=o("".split);t.exports=i((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"==u(t)?c(t,""):a(t)}:a},2788:(t,e,n)=>{var r=n(1702),o=n(614),i=n(5465),u=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(t){return u(t)}),t.exports=i.inspectSource},9909:(t,e,n)=>{var r,o,i,u=n(8536),a=n(7854),c=n(1702),s=n(111),l=n(8880),f=n(2597),p=n(5465),v=n(6200),d=n(3501),h="Object already initialized",_=a.TypeError,y=a.WeakMap;if(u||p.state){var g=p.state||(p.state=new y),b=c(g.get),m=c(g.has),x=c(g.set);r=function(t,e){if(m(g,t))throw new _(h);return e.facade=t,x(g,t,e),e},o=function(t){return b(g,t)||{}},i=function(t){return m(g,t)}}else{var w=v("state");d[w]=!0,r=function(t,e){if(f(t,w))throw new _(h);return e.facade=t,l(t,w,e),e},o=function(t){return f(t,w)?t[w]:{}},i=function(t){return f(t,w)}}t.exports={set:r,get:o,has:i,enforce:function(t){return i(t)?o(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!s(e)||(n=o(e)).type!==t)throw _("Incompatible receiver, "+t+" required");return n}}}},7659:(t,e,n)=>{var r=n(5112),o=n(7497),i=r("iterator"),u=Array.prototype;t.exports=function(t){return void 0!==t&&(o.Array===t||u[i]===t)}},3157:(t,e,n)=>{var r=n(4326);t.exports=Array.isArray||function(t){return"Array"==r(t)}},614:t=>{t.exports=function(t){return"function"==typeof t}},4411:(t,e,n)=>{var r=n(1702),o=n(7293),i=n(614),u=n(648),a=n(5005),c=n(2788),s=function(){},l=[],f=a("Reflect","construct"),p=/^\s*(?:class|function)\b/,v=r(p.exec),d=!p.exec(s),h=function(t){if(!i(t))return!1;try{return f(s,l,t),!0}catch(t){return!1}},_=function(t){if(!i(t))return!1;switch(u(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return d||!!v(p,c(t))}catch(t){return!0}};_.sham=!0,t.exports=!f||o((function(){var t;return h(h.call)||!h(Object)||!h((function(){t=!0}))||t}))?_:h},4705:(t,e,n)=>{var r=n(7293),o=n(614),i=/#|\.prototype\./,u=function(t,e){var n=c[a(t)];return n==l||n!=s&&(o(e)?r(e):!!e)},a=u.normalize=function(t){return String(t).replace(i,".").toLowerCase()},c=u.data={},s=u.NATIVE="N",l=u.POLYFILL="P";t.exports=u},111:(t,e,n)=>{var r=n(614);t.exports=function(t){return"object"==typeof t?null!==t:r(t)}},1913:t=>{t.exports=!1},7850:(t,e,n)=>{var r=n(111),o=n(4326),i=n(5112)("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==o(t))}},2190:(t,e,n)=>{var r=n(7854),o=n(5005),i=n(614),u=n(7976),a=n(3307),c=r.Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=o("Symbol");return i(e)&&u(e.prototype,c(t))}},408:(t,e,n)=>{var r=n(7854),o=n(9974),i=n(6916),u=n(9670),a=n(6330),c=n(7659),s=n(6244),l=n(7976),f=n(8554),p=n(1246),v=n(9212),d=r.TypeError,h=function(t,e){this.stopped=t,this.result=e},_=h.prototype;t.exports=function(t,e,n){var r,y,g,b,m,x,w,O=n&&n.that,S=!(!n||!n.AS_ENTRIES),k=!(!n||!n.IS_ITERATOR),E=!(!n||!n.INTERRUPTED),I=o(e,O),P=function(t){return r&&v(r,"normal",t),new h(!0,t)},j=function(t){return S?(u(t),E?I(t[0],t[1],P):I(t[0],t[1])):E?I(t,P):I(t)};if(k)r=t;else{if(!(y=p(t)))throw d(a(t)+" is not iterable");if(c(y)){for(g=0,b=s(t);b>g;g++)if((m=j(t[g]))&&l(_,m))return m;return new h(!1)}r=f(t,y)}for(x=r.next;!(w=i(x,r)).done;){try{m=j(w.value)}catch(t){v(r,"throw",t)}if("object"==typeof m&&m&&l(_,m))return m}return new h(!1)}},9212:(t,e,n)=>{var r=n(6916),o=n(9670),i=n(8173);t.exports=function(t,e,n){var u,a;o(t);try{if(!(u=i(t,"return"))){if("throw"===e)throw n;return n}u=r(u,t)}catch(t){a=!0,u=t}if("throw"===e)throw n;if(a)throw u;return o(u),n}},3383:(t,e,n)=>{"use strict";var r,o,i,u=n(7293),a=n(614),c=n(30),s=n(9518),l=n(1320),f=n(5112),p=n(1913),v=f("iterator"),d=!1;[].keys&&("next"in(i=[].keys())?(o=s(s(i)))!==Object.prototype&&(r=o):d=!0),null==r||u((function(){var t={};return r[v].call(t)!==t}))?r={}:p&&(r=c(r)),a(r[v])||l(r,v,(function(){return this})),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:d}},7497:t=>{t.exports={}},6244:(t,e,n)=>{var r=n(7466);t.exports=function(t){return r(t.length)}},5948:(t,e,n)=>{var r,o,i,u,a,c,s,l,f=n(7854),p=n(9974),v=n(1236).f,d=n(261).set,h=n(6833),_=n(1528),y=n(1036),g=n(5268),b=f.MutationObserver||f.WebKitMutationObserver,m=f.document,x=f.process,w=f.Promise,O=v(f,"queueMicrotask"),S=O&&O.value;S||(r=function(){var t,e;for(g&&(t=x.domain)&&t.exit();o;){e=o.fn,o=o.next;try{e()}catch(t){throw o?u():i=void 0,t}}i=void 0,t&&t.enter()},h||g||y||!b||!m?!_&&w&&w.resolve?((s=w.resolve(void 0)).constructor=w,l=p(s.then,s),u=function(){l(r)}):g?u=function(){x.nextTick(r)}:(d=p(d,f),u=function(){d(r)}):(a=!0,c=m.createTextNode(""),new b(r).observe(c,{characterData:!0}),u=function(){c.data=a=!a})),t.exports=S||function(t){var e={fn:t,next:void 0};i&&(i.next=e),o||(o=e,u()),i=e}},3366:(t,e,n)=>{var r=n(7854);t.exports=r.Promise},133:(t,e,n)=>{var r=n(7392),o=n(7293);t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},590:(t,e,n)=>{var r=n(7293),o=n(5112),i=n(1913),u=o("iterator");t.exports=!r((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,n="";return t.pathname="c%20d",e.forEach((function(t,r){e.delete("b"),n+=r+t})),i&&!t.toJSON||!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[u]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},8536:(t,e,n)=>{var r=n(7854),o=n(614),i=n(2788),u=r.WeakMap;t.exports=o(u)&&/native code/.test(i(u))},8523:(t,e,n)=>{"use strict";var r=n(9662),o=function(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)};t.exports.f=function(t){return new o(t)}},3929:(t,e,n)=>{var r=n(7854),o=n(7850),i=r.TypeError;t.exports=function(t){if(o(t))throw i("The method doesn't accept regular expressions");return t}},2814:(t,e,n)=>{var r=n(7854),o=n(7293),i=n(1702),u=n(1340),a=n(3111).trim,c=n(1361),s=i("".charAt),l=r.parseFloat,f=r.Symbol,p=f&&f.iterator,v=1/l(c+"-0")!=-1/0||p&&!o((function(){l(Object(p))}));t.exports=v?function(t){var e=a(u(t)),n=l(e);return 0===n&&"-"==s(e,0)?-0:n}:l},3009:(t,e,n)=>{var r=n(7854),o=n(7293),i=n(1702),u=n(1340),a=n(3111).trim,c=n(1361),s=r.parseInt,l=r.Symbol,f=l&&l.iterator,p=/^[+-]?0x/i,v=i(p.exec),d=8!==s(c+"08")||22!==s(c+"0x16")||f&&!o((function(){s(Object(f))}));t.exports=d?function(t,e){var n=a(u(t));return s(n,e>>>0||(v(p,n)?16:10))}:s},1574:(t,e,n)=>{"use strict";var r=n(9781),o=n(1702),i=n(6916),u=n(7293),a=n(1956),c=n(5181),s=n(5296),l=n(7908),f=n(8361),p=Object.assign,v=Object.defineProperty,d=o([].concat);t.exports=!p||u((function(){if(r&&1!==p({b:1},p(v({},"a",{enumerable:!0,get:function(){v(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(),o="abcdefghijklmnopqrst";return t[n]=7,o.split("").forEach((function(t){e[t]=t})),7!=p({},t)[n]||a(p({},e)).join("")!=o}))?function(t,e){for(var n=l(t),o=arguments.length,u=1,p=c.f,v=s.f;o>u;)for(var h,_=f(arguments[u++]),y=p?d(a(_),p(_)):a(_),g=y.length,b=0;g>b;)h=y[b++],r&&!i(v,_,h)||(n[h]=_[h]);return n}:p},30:(t,e,n)=>{var r,o=n(9670),i=n(6048),u=n(748),a=n(3501),c=n(490),s=n(317),l=n(6200)("IE_PROTO"),f=function(){},p=function(t){return" + + +
              +
              +
              +
              +
              loading
              +
              +
              + + + + + + \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4154B2BF2B172BA2301FF38ECF69C00432D6117D b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4154B2BF2B172BA2301FF38ECF69C00432D6117D new file mode 100644 index 0000000..f90eb03 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4154B2BF2B172BA2301FF38ECF69C00432D6117D differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/428EA0290373D202F58B97A9F972B3416AEA345B b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/428EA0290373D202F58B97A9F972B3416AEA345B new file mode 100644 index 0000000..3335611 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/428EA0290373D202F58B97A9F972B3416AEA345B differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/432BCEF650BA9D27BDF7D05999B5018DD1112C3A b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/432BCEF650BA9D27BDF7D05999B5018DD1112C3A new file mode 100644 index 0000000..f1a3ecc Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/432BCEF650BA9D27BDF7D05999B5018DD1112C3A differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/432BCEF650BA9D27BDF7D05999B5018DD1112C3A-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/432BCEF650BA9D27BDF7D05999B5018DD1112C3A-blob new file mode 100644 index 0000000..dff7f80 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/432BCEF650BA9D27BDF7D05999B5018DD1112C3A-blob @@ -0,0 +1,3 @@ +(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["marketing"],{82664(a,b,c){"use strict";function d(a){let b=document.querySelectorAll(a);if(b.length>0)return b[b.length-1]}function e(){return`${window.location.protocol}//${window.location.host}${function(){let a=d("meta[name=analytics-location]");return a?a.content:window.location.pathname}()+function(){let a=d("meta[name=analytics-location-query-strip]"),b="";a||(b=window.location.search);let c=d("meta[name=analytics-location-params]");for(let e of(c&&(b+=(b?"&":"?")+c.content),document.querySelectorAll("meta[name=analytics-param-rename]"))){let f=e.content.split(":",2);b=b.replace(RegExp(`(^|[?&])${f[0]}($|=)`,"g"),`$1${f[1]}$2`)}return b}()}`}c.d(b,{S:()=>e})},86975(a,b,c){"use strict";c.d(b,{AU:()=>j,Ap:()=>w,DT:()=>o,HN:()=>i,Lq:()=>g,T2:()=>u,Yg:()=>t,ag:()=>s,ck:()=>k,po:()=>r,q3:()=>l,uL:()=>v,wz:()=>n,xc:()=>h,xk:()=>p,zH:()=>f});var d=c(64707);let e="data-turbo-loaded";function f(){document.documentElement.setAttribute(e,"")}function g(){return document.documentElement.hasAttribute(e)}let h=()=>!(0,d.c)("PJAX_ENABLED"),i=a=>a?.tagName==="TURBO-FRAME";function j(a,b){let c=a.split("/",3).join("/"),d=b.split("/",3).join("/");return c===d}function k(a,b){let c=a.split("/",2).join("/"),d=b.split("/",2).join("/");return c===d}async function l(){let a=document.head.querySelectorAll("link[rel=stylesheet]"),b=new Set([...document.styleSheets].map(a=>a.href)),c=[];for(let d of a)""===d.href||b.has(d.href)||c.push(m(d));await Promise.all(c)}let m=(a,b=2e3)=>new Promise(c=>{let d=()=>{a.removeEventListener("error",d),a.removeEventListener("load",d),c()};a.addEventListener("load",d,{once:!0}),a.addEventListener("error",d,{once:!0}),setTimeout(d,b)}),n=(a,b)=>{let c=b||a.querySelectorAll("[data-turbo-replace]"),d=[...document.querySelectorAll("[data-turbo-replace]")];for(let e of c){let f=d.find(a=>a.id===e.id);f&&f.replaceWith(e)}},o=a=>{for(let b of a.querySelectorAll("link[rel=stylesheet]"))document.head.querySelector(`link[href="${b.getAttribute("href")}"], + link[data-href="${b.getAttribute("data-href")}"]`)||document.head.append(b)},p=a=>{for(let b of a.querySelectorAll("script"))document.head.querySelector(`script[src="${b.getAttribute("src")}"]`)||q(b)},q=a=>{let{src:b}=a;if(!b)return;let c=document.createElement("script"),d=a.getAttribute("type");d&&(c.type=d),c.src=b,document.head&&document.head.appendChild(c)},r=a=>{let b=[];for(let c of a.querySelectorAll('meta[data-turbo-track="reload"]'))document.querySelector(`meta[http-equiv="${c.getAttribute("http-equiv")}"]`)?.content!==c.content&&b.push(u(c.getAttribute("http-equiv")));return b},s=a=>{let b=a.querySelector("[data-turbo-head]")||a.head;return{title:b.querySelector("title")?.textContent,transients:[...b.querySelectorAll("[data-turbo-transient]")].map(a=>a.cloneNode(!0)),bodyClasses:a.querySelector("meta[name=turbo-body-classes]")?.content,replacedElements:[...a.querySelectorAll("[data-turbo-replace]")].map(a=>a.cloneNode(!0))}},t=()=>[...document.documentElement.attributes],u=a=>a.replace(/^x-/,"").replaceAll("-","_"),v=a=>document.dispatchEvent(new CustomEvent("turbo:reload",{detail:{reason:a}})),w=(a,b)=>{for(let c of a.attributes)b.hasAttribute(c.nodeName)||"aria-busy"===c.nodeName||a.removeAttribute(c.nodeName);for(let d of b.attributes)a.getAttribute(d.nodeName)!==d.nodeValue&&a.setAttribute(d.nodeName,d.nodeValue)}},25019(a,b,c){"use strict";c.d(b,{aJ:()=>u,cI:()=>r,eK:()=>n});var d=c(82918),e=c(45341),f=c(28382),g=c(82664),h=c(86975),i=c(58843),j=c(8704);let k=!1,l=0,m=Date.now();function n(a,b={}){var c;"AbortError"!==(c=a).name&&("TypeError"!==c.name||"Failed to fetch"!==c.message)&&o(q(p(a),b))}async function o(a){if(!w())return;let b=document.head?.querySelector('meta[name="browser-errors-url"]')?.content;if(b){if(t(a.error.stacktrace)){k=!0;return}l++;try{await fetch(b,{method:"post",body:JSON.stringify(a)})}catch{}}}function p(a){return{type:a.name,value:a.message,stacktrace:r(a)}}function q(a,b={}){return Object.assign({error:a,sanitizedUrl:(0,g.S)()||window.location.href,readyState:document.readyState,referrer:(0,i.wP)(),timeSinceLoad:Math.round(Date.now()-m),user:u()||void 0,turbo:(0,h.xc)(),bundler:j.A7,ui:Boolean(document.querySelector('meta[name="ui"]'))},b)}function r(a){return(0,f.Q)(a.stack||"").map(a=>({filename:a.file||"",function:String(a.methodName),lineno:(a.lineNumber||0).toString(),colno:(a.column||0).toString()}))}let s=/(chrome|moz|safari)-extension:\/\//;function t(a){return a.some(a=>s.test(a.filename)||s.test(a.function))}function u(){let a=document.head?.querySelector('meta[name="user-login"]')?.content;if(a)return a;let b=(0,d.b)();return`anonymous-${b}`}let v=!1;function w(){return!v&&!k&&l<10&&(0,e.Gb)()}if(window.addEventListener("pageshow",()=>v=!1),window.addEventListener("pagehide",()=>v=!0),"function"==typeof BroadcastChannel){let x=new BroadcastChannel("shared-worker-error");x.addEventListener("message",a=>{n(a.data.error)})}},64707(a,b,c){"use strict";c.d(b,{"$":()=>g,c:()=>f});var d=c(15205);let e=(0,d.Z)(function(){return(document.head?.querySelector('meta[name="enabled-features"]')?.content||"").split(",")}),f=(0,d.Z)(function(a){return -1!==e().indexOf(a)}),g={isFeatureEnabled:f}},78459(a,b,c){"use strict";c.d(b,{Y:()=>o,q:()=>p});var d=c(88149),e=c(86058),f=c(86702),g=c(60958);let{getItem:h}=(0,f.Z)("localStorage"),i="dimension_",j,k=["utm_source","utm_medium","utm_campaign","utm_term","utm_content","scid"];try{let l=(0,d.n)("octolytics");delete l.baseContext,j=new e.R(l)}catch(m){}function n(a){let b=(0,d.n)("octolytics").baseContext||{};if(b)for(let c in delete b.app_id,delete b.event_url,delete b.host,b)c.startsWith(i)&&(b[c.replace(i,"")]=b[c],delete b[c]);let e=document.querySelector("meta[name=visitor-payload]");if(e){let f=JSON.parse(atob(e.content));Object.assign(b,f)}let h=new URLSearchParams(window.location.search);for(let[j,l]of h)k.includes(j.toLowerCase())&&(b[j]=l);return b.staff=(0,g.B)().toString(),Object.assign(b,a)}function o(a){j?.sendPageView(n(a))}function p(a,b={}){let c=document.head?.querySelector('meta[name="current-catalog-service"]')?.content,d=c?{service:c}:{};for(let[e,f]of Object.entries(b))null!=f&&(d[e]=`${f}`);if(j){let g=a||"unknown";n(d),j.sendEvent(g,n(d))}}},8704(a,b,c){"use strict";c.d(b,{A7:()=>d.A7,ko:()=>d.ko,q1:()=>d.q1});var d=c(53729)},86702(a,b,c){"use strict";c.d(b,{Z:()=>g,"_":()=>h});var d=c(86283),e=c(60958);let f=class NoOpStorage{getItem(){return null}setItem(){}removeItem(){}clear(){}key(){return null}get length(){return 0}};function g(a,b={throwQuotaErrorsOnSet:!1},c=d.iG,g=a=>a,h=a=>a){let i;try{if(!c)throw Error();i=c[a]||new f}catch{i=new f}let{throwQuotaErrorsOnSet:j}=b;function k(a){b.sendCacheStats&&(0,e.b)({incrementKey:a})}function l(a){try{if(i.removeItem(a),b.ttl){let c=`${a}:expiry`;i.removeItem(c)}}catch(d){}}return{getItem:function(a,b=new Date().getTime()){try{let c=i.getItem(a);if(!c)return null;let d=`${a}:expiry`,e=Number(i.getItem(d));if(e&&b>e)return l(a),l(d),k("SAFE_STORAGE_VALUE_EXPIRED"),null;return k("SAFE_STORAGE_VALUE_WITHIN_TTL"),g(c)}catch(f){return null}},setItem:function(a,c,d=new Date().getTime()){try{if(i.setItem(a,h(c)),b.ttl){let e=`${a}:expiry`,f=d+b.ttl;i.setItem(e,f.toString())}}catch(g){if(j&&g.message.toLowerCase().includes("quota"))throw g}},removeItem:l,clear:i.clear,key:i.key,get length(){return i.length}}}function h(a){return g(a,{throwQuotaErrorsOnSet:!1},window,JSON.parse,JSON.stringify)}},25811(a,b,c){"use strict";c.d(b,{LS:()=>f,cl:()=>g,rV:()=>e});var d=c(86702);let{getItem:e,setItem:f,removeItem:g}=(0,d.Z)("sessionStorage")},55065(a,b,c){"use strict";c.d(b,{"$g":()=>SoftNavSuccessEvent,OV:()=>SoftNavStartEvent,QW:()=>SoftNavErrorEvent,Xr:()=>SoftNavEndEvent});var d=c(31167);let e=class SoftNavEvent extends Event{constructor(a,b){super(b),this.mechanism=a}};class SoftNavStartEvent extends e{constructor(a){super(a,d.QE.START)}}class SoftNavSuccessEvent extends e{constructor(a,b){super(a,d.QE.SUCCESS),this.visitCount=b}}class SoftNavErrorEvent extends e{constructor(a,b){super(a,d.QE.ERROR),this.error=b}}class SoftNavEndEvent extends e{constructor(a){super(a,d.QE.END)}}},31167(a,b,c){"use strict";c.d(b,{BT:()=>l,FP:()=>n,LD:()=>k,QE:()=>g,TL:()=>o,Yl:()=>j,jN:()=>h,r_:()=>m,u5:()=>p});var d=c(55065),e=c(29573),f=c(58843);let g=Object.freeze({INITIAL:"soft-nav:initial",START:"soft-nav:start",SUCCESS:"soft-nav:success",ERROR:"soft-nav:error",FRAME_UPDATE:"soft-nav:frame-update",END:"soft-nav:end",RENDER:"soft-nav:render",PROGRESS_BAR:{START:"soft-nav:progress-bar:start",END:"soft-nav:progress-bar:end"}}),h="reload",i=0;function j(){i=0,document.dispatchEvent(new Event(g.INITIAL)),(0,f.XL)()}function k(a){(0,f.sj)()||(q(),document.dispatchEvent(new d.OV(a)),(0,f.U6)(a),(0,f.J$)(),(0,f.Nt)(),(0,e.hY)())}function l(a={}){s(a)&&(i+=1,document.dispatchEvent(new d.$g((0,f.Gj)(),i)),n(a))}function m(a={}){if(!s(a))return;i=0;let b=(0,f.Wl)()||h;document.dispatchEvent(new d.QW((0,f.Gj)(),b)),r(),(0,e.t3)(b),(0,f.XL)()}function n(a={}){s(a)&&(r(),document.dispatchEvent(new d.Xr((0,f.Gj)())),(0,f.pS)())}function o(a={}){s(a)&&((0,e.mr)(),document.dispatchEvent(new Event(g.RENDER)))}function p(){document.dispatchEvent(new Event(g.FRAME_UPDATE))}function q(){document.dispatchEvent(new Event(g.PROGRESS_BAR.START))}function r(){document.dispatchEvent(new Event(g.PROGRESS_BAR.END))}function s({skipIfGoingToReactApp:a,allowedMechanisms:b=[]}={}){return(0,f.sj)()&&(0===b.length||b.includes((0,f.Gj)()))&&(!a||!(0,f.Nb)())}},29573(a,b,c){"use strict";c.d(b,{CF:()=>g,hY:()=>h,mr:()=>j,t3:()=>i});var d=c(60958),e=c(58843);let f="stats:soft-nav-duration",g={turbo:"TURBO",react:"REACT","turbo.frame":"FRAME",ui:"UI",hard:"HARD"};function h(){performance.mark(f)}function i(a){(0,d.b)({turboFailureReason:a,turboStartUrl:(0,e.wP)(),turboEndUrl:window.location.href})}function j(){let a=function(){if(0===performance.getEntriesByName(f).length)return null;performance.measure(f,f);let a=performance.getEntriesByName(f),b=a.pop();return b?b.duration:null}();if(!a)return;let b=g[(0,e.Gj)()],c=Math.round(a);b===g.react&&document.dispatchEvent(new CustomEvent("staffbar-update",{detail:{duration:c}})),(0,d.b)({requestUrl:window.location.href,softNavigationTiming:{mechanism:b,destination:(0,e.Nb)()||"rails",duration:c,initiator:(0,e.CI)()||"rails"}})}},58843(a,b,c){"use strict";c.d(b,{Ak:()=>r,CI:()=>v,Gj:()=>o,"J$":()=>u,Nb:()=>w,Nt:()=>s,OE:()=>p,U6:()=>l,Wl:()=>q,XL:()=>k,pS:()=>m,sj:()=>n,wP:()=>t});var d=c(25811),e=c(31167);let f="soft-nav:fail",g="soft-nav:fail-referrer",h="soft-nav:referrer",i="soft-nav:marker",j="soft-nav:react-app-name";function k(){(0,d.LS)(i,"0"),(0,d.cl)(h),(0,d.cl)(f),(0,d.cl)(g),(0,d.cl)(j)}function l(a){(0,d.LS)(i,a)}function m(){(0,d.LS)(i,"0")}function n(){let a=(0,d.rV)(i);return a&&"0"!==a}function o(){return(0,d.rV)(i)}function p(){return Boolean(q())}function q(){return(0,d.rV)(f)}function r(a){(0,d.LS)(f,a||e.jN),(0,d.LS)(g,window.location.href)}function s(){(0,d.LS)(h,window.location.href)}function t(){return(0,d.rV)(h)||document.referrer}function u(){let a=w();a?(0,d.LS)(j,a):(0,d.cl)(j)}function v(){return(0,d.rV)(j)}function w(){return document.querySelector('meta[name="ui"]')?"ui":document.querySelector("react-app")?.getAttribute("app-name")}},60958(a,b,c){"use strict";c.d(b,{B:()=>m,b:()=>h});var d=c(86283),e=c(4412),f=c(53729);let g=[];function h(a,b=!1){void 0===a.timestamp&&(a.timestamp=new Date().getTime()),a.loggedIn=l(),a.staff=m(),a.bundler=f.A7,g.push(a),b?k():j()}let i=null;async function j(){await e.C,null==i&&(i=window.requestIdleCallback(k))}function k(){if(i=null,!g.length)return;let a=d.n4?.head?.querySelector('meta[name="browser-stats-url"]')?.content;if(!a)return;let b=JSON.stringify({stats:g});try{navigator.sendBeacon&&navigator.sendBeacon(a,b)}catch{}g=[]}function l(){return!!d.n4?.head?.querySelector('meta[name="user-login"]')?.content}function m(){return!!d.n4?.head?.querySelector('meta[name="user-staff"]')?.content}d.n4?.addEventListener("pagehide",k),d.n4?.addEventListener("visibilitychange",k)},21235(a,b,c){"use strict";var d=c(64463);(0,d.N7)(".js-override-utm-params",a=>{let b=a.getAttribute("href"),c=document.location.search;if(b&&c)for(let d of["utm_campaign","utm_medium","utm_source"]){let e=RegExp(`${d}=([^=&]*)`),f=e.exec(c);e.lastIndex=0,f&&(b=b.replace(e,`${d}=${f[1]}`),a.setAttribute("href",b))}});var e=c(44319);c(88888);let f=new IntersectionObserver(function(a){for(let b of a)if(b.isIntersecting)for(let c of document.querySelectorAll(".js-scrollnav-item"))c.classList.toggle("selected",c.getAttribute("href")===`#${b.target.id}`)},{root:null,rootMargin:"0px",threshold:.1});(0,d.N7)(".js-section",a=>f.observe(a)),c(2459);var g=c(59753),h=c(25019),i=c(78459);let j="data-analytics-event",k=`a:not([${j}]), button:not([${j}]), [${j}]`;function l(a,b){return a.tagName.toLowerCase()===b}function m(a){return{text:a.innerText||a.getAttribute("aria-label")||"",target:a.href}}function n(a){let b=a.closest("form");return{text:a.innerText||a.getAttribute("aria-label")||"",role:a.getAttribute("type")||a.getAttribute("role")||"button",...a.value&&{value:a.value},...b&&{formAction:b.getAttribute("action")||""}}}function o(a){let{top:b,left:c}=a.getBoundingClientRect(),d=document.body,e=document.documentElement,f=Math.max(d.scrollHeight,d.offsetHeight,e.clientHeight,e.scrollHeight,e.offsetHeight),g=Math.max(d.scrollWidth,d.offsetWidth,e.clientWidth,e.scrollWidth,e.offsetWidth),h=((b+window.pageYOffset)/f).toFixed(3),i=((c+window.pageXOffset)/g).toFixed(3);return{ref_loc:JSON.stringify({top:h,left:i})}}function p(a){if(!a)return{};let b=JSON.parse(a),{category:c,action:d,label:e}=b;return{category:c,action:d,...q(e)}}function q(a){if(!a)return{};let b={},c=a.split(";").map(a=>a.trim());for(let d of c){let[e,f]=d.split(":");e&&(b[e.trim()]=f?.trim()||e.trim())}return b}(0,g.on)("click",k,a=>{if(a&&a.currentTarget)try{var b;(0,i.q)("analytics.click",(b=a.currentTarget,{...l(b,"a")&&m(b),...l(b,"button")&&n(b),...o(b),...p(b.getAttribute(j))}))}catch(c){(0,h.eK)(c)}});let r=class SlideShow extends HTMLElement{onTouchStart(a){this.touchStartX=a.changedTouches[0].screenX}onTouchEnd(a){this.touchEndX=a.changedTouches[0].screenX,this.touchEndXthis.touchStartX+this.swipeLengthMod&&(this.pause(),this.prevSlide())}pause(){this.interval&&window.clearInterval(this.interval)}play(){this.pause(),this.interval=window.setInterval(this.nextSlide.bind(this),this.intervalTime)}nextSlide(){this.current++,this.current>this.slideIds.length-1&&(this.current=0),this.goToSlide(this.slideIds[this.current])}prevSlide(){this.current--,this.current<0&&(this.current=this.slideIds.length-1),this.goToSlide(this.slideIds[this.current])}bulletOnClick(a){a.preventDefault();let b=a.target,c=b?.getAttribute("aria-controls");c&&this.goToSlide(c),this.pause()}goToSlide(a){let b=this.querySelector(`.js-slide-show-slide[id="${a}"]`),c=this.querySelector(`.js-slide-show-bullet[aria-controls="${a}"]`),d=this.querySelectorAll(`.js-slide-show-goto[aria-controls="${a}"]`),e=this.querySelector('.js-slide-show-slide:not([aria-hidden="true"])'),f=this.querySelector('.js-slide-show-bullet[aria-selected="true"]'),g=this.querySelectorAll('.js-slide-show-goto[aria-selected="true"]');e?.setAttribute("aria-hidden","true"),f?.setAttribute("aria-selected","false");for(let h=0;h{for(let b of a){let c=b.target;b.isIntersecting?c.play():c.pause()}},{threshold:Number(b)});d.observe(this)}for(let f=0;f{let b=a.currentTarget,c=b.querySelector(".sub-nav-mktg-wrapper");c.contains(a.target)||b.classList.remove("on")}),(0,g.on)("click",".sub-nav-mktg.scrollnav.on .sub-nav-mktg-link",a=>{a.currentTarget.closest(".sub-nav-mktg").classList.remove("on")}),(0,g.on)("click",".sub-nav-mktg:not(.on) .sub-nav-mktg-link",a=>{window.innerWidth>=1280||(a.preventDefault(),a.currentTarget.closest(".sub-nav-mktg").classList.add("on"))}),(0,g.on)("click",".js-video-play, .js-video-close",function(a){let b=a.currentTarget,c=b.closest(".js-video-container"),d=c.querySelector(".js-video-iframe");"details"===c.tagName.toLowerCase()&&c.addEventListener("details-dialog-close",function(){d.removeAttribute("src"),window.setTimeout(function(){c.classList.remove("is-expanded")},10)}),c.classList.contains("is-expanded")?(d.removeAttribute("src"),c.classList.remove("is-expanded")):(d.src=d.getAttribute("data-src")||"",c.classList.add("is-expanded")),function(a,b=0){let c=a.getBoundingClientRect(),d=c.top-b,e=c.bottom-window.innerHeight+b;d<0?window.scrollBy(0,d):e>0&&window.scrollBy(0,e)}(d,20)});var s=c(76006);(0,s.nW)("before-after",()=>c.e("app_assets_modules_marketing_before-after_ts").then(c.bind(c,48385))),(0,s.nW)("confetti-container",()=>c.e("app_assets_modules_marketing_confetti-on-scroll_ts-_5eac1").then(c.bind(c,45322))),(0,s.nW)("segmented-nav",()=>c.e("app_assets_modules_marketing_segmented-nav_ts").then(c.bind(c,28274))),(0,s.nW)("story-body",()=>c.e("app_assets_modules_marketing_story-body-element_ts").then(c.bind(c,88622))),(0,s.nW)("testimonials-carousel",()=>c.e("app_assets_modules_marketing_testimonials-carousel-element_ts").then(c.bind(c,20951))),(0,s.nW)("unveil-container",()=>c.e("app_assets_modules_marketing_unveil_ts").then(c.bind(c,66351)))},44319(a,b,c){"use strict";c.d(b,{"$M":()=>e,Al:()=>h,B2:()=>g,Gx:()=>l,L:()=>m,jG:()=>n,t6:()=>i});var d=c(64463);let e="build-in-animate",f="build-in-reduced",g=30,h=0,i=0;(0,d.N7)(".js-build-in-trigger[data-build-in-stagger], .js-build-in-group[data-build-in-stagger]",a=>{let b=parseInt(a.getAttribute("data-build-in-stagger")),c=a.querySelectorAll(".js-build-in-item");for(let d=0;d{let b=Number(a.getAttribute("data-build-delay")||0);a instanceof HTMLElement&&(a.style.transitionDelay=`${b}ms`)}),(0,d.N7)(".js-build-in, .js-build-in-trigger",a=>{if(l(a)){m(a);return}let b=n(a);if(b.isDefault)return j.observe(a);let c=new IntersectionObserver(k,{rootMargin:`-${b.marginTop}% 0% -${b.marginBottom}% 0%`,threshold:b.threshold});c.observe(a)}),(0,d.N7)(".js-viewport-aware-video",{constructor:HTMLMediaElement,add(a){if(a.addEventListener("click",()=>{a.classList.toggle("looping-paused-mktg",!a.paused),a.paused?a.play():a.pause()}),l(a)){a.pause(),a.classList.add("looping-paused-mktg");return}let b=a.getAttribute("data-threshold")||i,c=a.getAttribute("data-build-margin-bottom")||20,d=new IntersectionObserver(b=>{for(let c of b)c.isIntersecting?a.play():a.pause()},{rootMargin:`-${h}% 0% -${c}% 0%`,threshold:Number(b)});d.observe(a)}})},88888(a,b,c){"use strict";c.d(b,{s:()=>l});var d=c(44319),e=c(64463),f=c(59753);let g="row-is-visible";(0,e.N7)(".js-type-in, .js-type-in-item",a=>{(0,d.Gx)(a)||k(a)});let h=new IntersectionObserver(i,{rootMargin:`-${d.Al}% 0% -${d.B2}% 0%`,threshold:d.t6});function i(a){for(let b of a)if(b.isIntersecting?l(b.target):k(b.target),b.target.classList.contains("js-type-in-trigger"))for(let c of b.target.querySelectorAll(".js-type-in-item, .js-build-number"))b.isIntersecting?l(c):k(c)}function j(a){let b=a.childNodes;for(let c of b)if("#text"===c.nodeName){let d=document.createElement("span");d.textContent=c.textContent,c.replaceWith(d)}let e=a.querySelectorAll("*");for(let f of e)f.classList.add("js-type-letters"),f.style.visibility="hidden";a.classList.remove("js-type-letters")}function k(a){if(!a.classList.contains("js-type-in")&&!a.classList.contains("js-type-in-trigger"))return;let b=a.querySelectorAll(".js-type-row, .js-type-letters");for(let c of b)c.classList.contains("js-type-letters")&&c.children.length>0?j(c):(c.style.visibility="hidden",c.classList.remove(g));a.classList.remove(d.$M)}function l(a){if(a.classList.contains(d.$M)|| !a.classList.contains("js-type-in")&&!a.classList.contains("js-type-in-trigger"))return;a.classList.add(d.$M);let b=a.querySelectorAll(".js-type-row, .js-type-letters"),c=Number(a.getAttribute("data-type-delay")||20),e=Number(a.getAttribute("data-type-row-delay")||200);a.classList.contains("js-build-number")?setTimeout(()=>n(a,0,Number(a.textContent)),c):setTimeout(()=>m(a,b,0,"",e),c)}function m(a,b,c,e,f){if(c>=b.length)return;let h=b[c];if(!a.classList.contains(d.$M)){""!==e&&(h.textContent=e);return}if(h.classList.contains("js-type-row")){let i=Number(h.getAttribute("data-type-row-delay")||f);h.style.visibility="visible",h.classList.add(g),c++,setTimeout(()=>m(a,b,c,"",i),i);return}"hidden"===h.style.visibility&&null!=h.textContent&&(e=h.textContent,h.textContent="",h.style.visibility="visible",h.classList.add("animation-is-typing")),null!=h.textContent&&e.length>h.textContent.length?h.textContent=e.substr(0,h.textContent.length+1):++cm(a,b,c,e,f),20)}function n(a,b,c){if(c%1!=0?(b+=Math.max(.1,c/20),b=Number(b.toFixed(1))):(b+=Math.max(1,Number(c/35)),b=Number(b.toFixed(0))),b>c&&(b=c),a.textContent=b.toString(),b>=c)return;let d=Number(a.getAttribute("data-increment-speed")||75);setTimeout(()=>n(a,b,c),d)}(0,e.N7)(".js-type-in, .js-type-in-trigger",a=>{if((0,d.Gx)(a)){(0,d.L)(a);return}let b=(0,d.jG)(a);if(b.isDefault)return h.observe(a);let c=new IntersectionObserver(i,{rootMargin:`-${b.marginTop}% 0% -${b.marginBottom}% 0%`,threshold:b.threshold});c.observe(a)}),(0,f.on)("click",".js-type-restart",a=>{var b;let c=a.currentTarget.closest(".js-type-in");k(b=c),l(b)})},2459(){let a=class GitHubAudio extends HTMLElement{createAudioElement(a,b,c,d){let e=new Audio;return e.preload="metadata",b&&e.addEventListener("loadedmetadata",()=>{b.bind(this)()}),d&&e.addEventListener("ended",()=>{d.bind(this)()}),c&&e.addEventListener("canplay",()=>{c.bind(this)()}),e.src=a,e}static zeroFormat(a){return a<10?`0${a}`:`${a}`}static formatTime(a){return`${this.zeroFormat(Math.floor(a/60))}:${this.zeroFormat(Math.floor(a%60))}`}setTotalTimeLabel(a){this.totalTimeLabel&&(this.totalTimeLabel.textContent=GitHubAudio.formatTime(a))}setCurrentTimeLabel(a){this.currentTimeLabel&&(this.currentTimeLabel.textContent=GitHubAudio.formatTime(a))}getTotalTimeLabel(){return this.totalTimeLabel?this.totalTimeLabel.textContent:""}getCurrentTimeLabel(){return this.currentTimeLabel?this.currentTimeLabel.textContent:""}updateScrubberAria(){this.scrubber&&this.scrubber.setAttribute("aria-valuenow",this.scrubber.value)}calculatePercentagePostion(a,b){return 100*a/b}setScrubberPosition(a){if(!this.scrubber||!this.scrubberProgress)return;this.scrubber.value=`${Math.floor(a)}`;let b=parseInt(this.scrubber.max);this.scrubberProgress.style.width=`${this.calculatePercentagePostion(a,b)}%`,this.updateScrubberAria()}updateStateWhilePlaying(){this.setCurrentTimeLabel(this.audio.currentTime),this.setScrubberPosition(this.audio.currentTime),this.requestedAnimationFrame=requestAnimationFrame(this.updateStateWhilePlaying.bind(this))}initScrubber(){this.scrubber&&(this.scrubber.min="0",this.scrubber.max=`${Math.floor(this.audio.duration)}`,this.scrubber.setAttribute("aria-valuemin",this.scrubber.min),this.scrubber.setAttribute("aria-valuemax",this.scrubber.max),this.scrubber.addEventListener("change",()=>{this.scrubber&&(this.audio.currentTime=parseInt(this.scrubber.value,10),this.audio.paused||requestAnimationFrame(this.updateStateWhilePlaying.bind(this)))}),this.scrubber.addEventListener("input",()=>{if(!this.scrubber||!this.scrubberProgress)return;let a=parseInt(this.scrubber.value,10),b=parseInt(this.scrubber.max,10);this.setCurrentTimeLabel(a),this.scrubberProgress.style.width=`${this.calculatePercentagePostion(a,b)}%`,this.updateScrubberAria(),this.audio.paused||cancelAnimationFrame(this.requestedAnimationFrame)}),this.scrubber.addEventListener("keyup",a=>{"Space"===a.code&&this.togglePlay()}))}play(){this.audio.play(),this.playToggleButtonLabel&&(this.playToggleButtonLabel.textContent=this.playToggleButtonLabel.getAttribute("data-label-pause")),this.playToggleButton&&this.playToggleButton.setAttribute("data-play-state","playing"),requestAnimationFrame(this.updateStateWhilePlaying.bind(this))}pause(){this.audio.pause(),this.playToggleButtonLabel&&(this.playToggleButtonLabel.textContent=this.playToggleButtonLabel.getAttribute("data-label-play")),this.playToggleButton&&this.playToggleButton.setAttribute("data-play-state","paused"),cancelAnimationFrame(this.requestedAnimationFrame)}stop(){this.pause(),this.audio.currentTime=0,this.setScrubberPosition(0)}togglePlay(){if(this.audio.paused){this.play();return}this.pause()}skipForward(a){a=a||this.defaultSkipStep,this.audio.currentTime=this.audio.currentTime+a,this.audio.paused&&(this.setCurrentTimeLabel(this.audio.currentTime),this.setScrubberPosition(this.audio.currentTime))}skipBackward(a){a=a||this.defaultSkipStep,this.audio.currentTime=this.audio.currentTime-a,this.audio.paused&&(this.setCurrentTimeLabel(this.audio.currentTime),this.setScrubberPosition(this.audio.currentTime))}onLoadedMetaData(){this.setTotalTimeLabel(this.audio.duration),this.initScrubber(),this.onCanPlay()}onEnded(){this.pause()}onCanPlay(){this.ready||(this.playToggleButton&&(this.playToggleButton.addEventListener("click",this.togglePlay.bind(this)),this.playToggleButton.removeAttribute("disabled")),this.skipForwardButton&&(this.skipForwardButton.addEventListener("click",()=>{this.skipForward()}),this.skipForwardButton.removeAttribute("disabled")),this.skipBackwardButton&&(this.skipBackwardButton.addEventListener("click",()=>{this.skipBackward()}),this.skipBackwardButton.removeAttribute("disabled")),this.scrubber&&this.scrubber.removeAttribute("disabled"),this.ready=!0)}constructor(){super();let a=this.getAttribute("src");if(!a)return this;this.defaultSkipStep=10,this.playToggleButton=this.querySelector(".js-github-audio-play-toggle"),this.playToggleButtonLabel=this.querySelector("#play-toggle-label"),this.currentTimeLabel=this.querySelector(".js-github-audio-current-time"),this.totalTimeLabel=this.querySelector(".js-github-audio-total-time"),this.scrubber=this.querySelector(".js-github-audio-scrubber"),this.scrubberProgress=this.querySelector(".js-github-audio-scrubber-progress"),this.skipBackwardButton=this.querySelector(".js-github-audio-skip-backward"),this.skipForwardButton=this.querySelector(".js-github-audio-skip-forward"),this.requestedAnimationFrame=0,this.ready=!1,this.audio=this.createAudioElement(a,this.onLoadedMetaData,null,this.onEnded)}};window&&"customElements"in window&&!window.customElements.get("github-audio")&&window.customElements.define("github-audio",a)},44289(){if(window.location.hash){let a=document.querySelector(`.faq-mktg-item${window.location.hash} details`);a&&(a.open=!0)}},4412(a,b,c){"use strict";c.d(b,{C:()=>f,x:()=>e});var d=c(86283);let e=d.n4?.readyState==="interactive"||d.n4?.readyState==="complete"?Promise.resolve():new Promise(a=>{d.n4?.addEventListener("DOMContentLoaded",()=>{a()})}),f=d.n4?.readyState==="complete"?Promise.resolve():new Promise(a=>{d.iG?.addEventListener("load",a)})},53729(a,b,c){"use strict";c.d(b,{A7:()=>i,ko:()=>h,q1:()=>g});var d=c(15205),e=c(86283);let f=(0,d.Z)(function(){return e.n4?.head?.querySelector('meta[name="runtime-environment"]')?.content||""}),g=(0,d.Z)(function(){return e.n4?.head?.querySelector('meta[name="is-private-instance"]')?.content==="true"}),h=(0,d.Z)(function(){return"enterprise"===f()}),i="webpack"},86283(a,b,c){"use strict";c.d(b,{Qg:()=>d.Qg,iG:()=>e.iG,jX:()=>e.jX,n4:()=>e.n4,yF:()=>d.yF});var d=c(35647),e=c(73614)},73614(a,b,c){"use strict";c.d(b,{iG:()=>e,jX:()=>f,n4:()=>d});let d="undefined"==typeof document?void 0:document,e="undefined"==typeof window?void 0:window,f="undefined"==typeof location?{pathname:"",origin:"",search:""}:location},35647(a,b,c){"use strict";c.d(b,{Qg:()=>f,yF:()=>g});var d=c(73614);let e=void 0===d.n4,f=!e;function g(){return!!e||Boolean(d.n4.querySelector('react-app[data-ssr="true"]'))}}},a=>{var b=b=>a(a.s=b);a.O(0,["vendors-node_modules_selector-observer_dist_index_esm_js","vendors-node_modules_delegated-events_dist_index_js-node_modules_stacktrace-parser_dist_stack-8189f0"],()=>b(21235));var c=a.O()}]) +//# sourceMappingURL=marketing-7f67d3f3c9f3.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/43539E5522377E1DDE9ED5D3CB749081A38C09FE b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/43539E5522377E1DDE9ED5D3CB749081A38C09FE new file mode 100644 index 0000000..7629a50 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/43539E5522377E1DDE9ED5D3CB749081A38C09FE differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/43539E5522377E1DDE9ED5D3CB749081A38C09FE-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/43539E5522377E1DDE9ED5D3CB749081A38C09FE-blob new file mode 100644 index 0000000..05a0c9d Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/43539E5522377E1DDE9ED5D3CB749081A38C09FE-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4367624A7586B28C3E4D7E84663A9CFABA4063DD b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4367624A7586B28C3E4D7E84663A9CFABA4063DD new file mode 100644 index 0000000..120ca03 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4367624A7586B28C3E4D7E84663A9CFABA4063DD differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/436B83AED76B3A47C09F5C92A4F4115D36C5F8B0 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/436B83AED76B3A47C09F5C92A4F4115D36C5F8B0 new file mode 100644 index 0000000..d7be8c9 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/436B83AED76B3A47C09F5C92A4F4115D36C5F8B0 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/436B83AED76B3A47C09F5C92A4F4115D36C5F8B0-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/436B83AED76B3A47C09F5C92A4F4115D36C5F8B0-blob new file mode 100644 index 0000000..14ebe73 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/436B83AED76B3A47C09F5C92A4F4115D36C5F8B0-blob @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_mini-throt-a33094"],{13002(a,b,c){c.d(b,{Z:()=>i});class FilterInputElement extends HTMLElement{constructor(){super(),this.currentQuery=null,this.filter=null,this.debounceInputChange=function(a){let b;return function(){clearTimeout(b),b=setTimeout(()=>{clearTimeout(b),a()},300)}}(()=>d(this,!0)),this.boundFilterResults=()=>{d(this,!1)}}static get observedAttributes(){return["aria-owns"]}attributeChangedCallback(a,b){b&&"aria-owns"===a&&d(this,!1)}connectedCallback(){let a=this.input;a&&(a.setAttribute("autocomplete","off"),a.setAttribute("spellcheck","false"),a.addEventListener("focus",this.boundFilterResults),a.addEventListener("change",this.boundFilterResults),a.addEventListener("input",this.debounceInputChange))}disconnectedCallback(){let a=this.input;a&&(a.removeEventListener("focus",this.boundFilterResults),a.removeEventListener("change",this.boundFilterResults),a.removeEventListener("input",this.debounceInputChange))}get input(){let a=this.querySelector("input");return a instanceof HTMLInputElement?a:null}reset(){let a=this.input;a&&(a.value="",a.dispatchEvent(new Event("change",{bubbles:!0})))}}async function d(a,b=!1){let c=a.input;if(!c)return;let d=c.value.trim(),i=a.getAttribute("aria-owns");if(!i)return;let j=document.getElementById(i);if(!j)return;let k=j.hasAttribute("data-filter-list")?j:j.querySelector("[data-filter-list]");if(!k||(a.dispatchEvent(new CustomEvent("filter-input-start",{bubbles:!0})),b&&a.currentQuery===d))return;a.currentQuery=d;let l=a.filter||e,m=k.childElementCount,n=0,o=!1;for(let p of Array.from(k.children)){if(!(p instanceof HTMLElement))continue;let q=f(p),r=l(p,q,d);!0===r.hideNew&&(o=r.hideNew),p.hidden=!r.match,r.match&&n++}let s=j.querySelector("[data-filter-new-item]"),t=!!s&&d.length>0&&!o;s instanceof HTMLElement&&(s.hidden=!t,t&&g(s,d)),h(j,n>0||t),a.dispatchEvent(new CustomEvent("filter-input-updated",{bubbles:!0,detail:{count:n,total:m}}))}function e(a,b,c){let d=-1!==b.toLowerCase().indexOf(c.toLowerCase());return{match:d,hideNew:b===c}}function f(a){let b=a.querySelector("[data-filter-item-text]")||a;return(b.textContent||"").trim()}function g(a,b){let c=a.querySelector("[data-filter-new-item-text]");c&&(c.textContent=b);let d=a.querySelector("[data-filter-new-item-value]");(d instanceof HTMLInputElement||d instanceof HTMLButtonElement)&&(d.value=b)}function h(a,b){let c=a.querySelector("[data-filter-empty-state]");c instanceof HTMLElement&&(c.hidden=b)}let i=FilterInputElement;window.customElements.get("filter-input")||(window.FilterInputElement=FilterInputElement,window.customElements.define("filter-input",FilterInputElement))},46263(a,b,c){function d(a,b=0,{start:c=!0,middle:d=!0,once:e=!1}={}){let f=0,g,h=!1;function i(...j){if(h)return;let k=Date.now()-f;f=Date.now(),c?(c=!1,a.apply(this,j),e&&i.cancel()):(d&&k{f=Date.now(),a.apply(this,j),e&&i.cancel()},d?b-k:b))}return i.cancel=()=>{clearTimeout(g),h=!0},i}function e(a,b=0,{start:c=!1,middle:e=!1,once:f=!1}={}){return d(a,b,{start:c,middle:e,once:f})}c.d(b,{D:()=>e,P:()=>d})},65935(a,b,c){c.d(b,{AC:()=>j,rK:()=>i,uT:()=>h});class ErrorWithResponse extends Error{constructor(a,b){super(a),this.response=b}}function d(){let a,b,c=new Promise(function(c,d){a=c,b=d});return[c,a,b]}let e,f=[],g=[];function h(a){f.push(a)}function i(a){g.push(a)}function j(a,b){e||(e=new Map,document.addEventListener("submit",k));let c=e.get(a)||[];e.set(a,[...c,b])}function k(a){if(!(a.target instanceof HTMLFormElement)||a.defaultPrevented)return;let b=a.target,c=function(a){let b=[];for(let c of e.keys())if(a.matches(c)){let d=e.get(c)||[];b.push(...d)}return b}(b);if(0===c.length)return;let h=m(b),[i,j,k]=d();a.preventDefault(),l(c,b,h,i).then(async a=>{if(a){for(let c of g)await c(b);n(h).then(j,k).catch(()=>{}).then(()=>{for(let a of f)a(b)})}else b.submit()},a=>{b.submit(),setTimeout(()=>{throw a})})}async function l(a,b,c,e){let f=!1;for(let g of a){let[h,i]=d(),j=()=>(f=!0,i(),e),k={text:j,json:()=>(c.headers.set("Accept","application/json"),j()),html:()=>(c.headers.set("Accept","text/html"),j())};await Promise.race([h,g(b,k,c)])}return f}function m(a){let b={method:a.method||"GET",url:a.action,headers:new Headers({"X-Requested-With":"XMLHttpRequest"}),body:null};if("GET"===b.method.toUpperCase()){let c=function(a){let b=new URLSearchParams,c=new FormData(a).entries();for(let[d,e]of[...c])b.append(d,e.toString());return b.toString()}(a);c&&(b.url+=(~b.url.indexOf("?")?"&":"?")+c)}else b.body=new FormData(a);return b}async function n(a){let b=await window.fetch(a.url,{method:a.method,body:null!==a.body?a.body:void 0,headers:a.headers,credentials:"same-origin"}),c={url:b.url,status:b.status,statusText:b.statusText,headers:b.headers,text:"",get json(){let d=this,e=JSON.parse(d.text);return delete d.json,d.json=e,d.json},get html(){let f=this;return delete f.html,f.html=function(a,b){let c=a.createElement("template");return c.innerHTML=b,a.importNode(c.content,!0)}(document,f.text),f.html}},g=await b.text();if(c.text=g,b.ok)return c;throw new ErrorWithResponse("request failed",c)}},88309(a,b,c){c.d(b,{Z:()=>g});let d=new WeakMap;class RemoteInputElement extends HTMLElement{constructor(){var a;super();let b,c=e.bind(null,this,!0),f={currentQuery:null,oninput:(a=c,function(){clearTimeout(b),b=setTimeout(()=>{clearTimeout(b),a()},300)}),fetch:c,controller:null};d.set(this,f)}static get observedAttributes(){return["src"]}attributeChangedCallback(a,b){b&&"src"===a&&e(this,!1)}connectedCallback(){let a=this.input;if(!a)return;a.setAttribute("autocomplete","off"),a.setAttribute("spellcheck","false");let b=d.get(this);b&&(a.addEventListener("focus",b.fetch),a.addEventListener("change",b.fetch),a.addEventListener("input",b.oninput))}disconnectedCallback(){let a=this.input;if(!a)return;let b=d.get(this);b&&(a.removeEventListener("focus",b.fetch),a.removeEventListener("change",b.fetch),a.removeEventListener("input",b.oninput))}get input(){let a=this.querySelector("input, textarea");return a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement?a:null}get src(){return this.getAttribute("src")||""}set src(a){this.setAttribute("src",a)}}async function e(a,b){let c=a.input;if(!c)return;let e=d.get(a);if(!e)return;let g=c.value;if(b&&e.currentQuery===g)return;e.currentQuery=g;let h=a.src;if(!h)return;let i=document.getElementById(a.getAttribute("aria-owns")||"");if(!i)return;let j=new URL(h,window.location.href),k=new URLSearchParams(j.search);k.append(a.getAttribute("param")||"q",g),j.search=k.toString(),e.controller?e.controller.abort():(a.dispatchEvent(new CustomEvent("loadstart")),a.setAttribute("loading","")),e.controller="AbortController"in window?new AbortController:{signal:null,abort(){}};let l,m="";try{m=await (l=await f(a,j.toString(),{signal:e.controller.signal,credentials:"same-origin",headers:{accept:"text/fragment+html"}})).text(),a.removeAttribute("loading"),e.controller=null}catch(n){"AbortError"!==n.name&&(a.removeAttribute("loading"),e.controller=null);return}l&&l.ok?(i.innerHTML=m,a.dispatchEvent(new CustomEvent("remote-input-success",{bubbles:!0}))):a.dispatchEvent(new CustomEvent("remote-input-error",{bubbles:!0}))}async function f(a,b,c){try{let d=await fetch(b,c);return a.dispatchEvent(new CustomEvent("load")),a.dispatchEvent(new CustomEvent("loadend")),d}catch(e){throw"AbortError"!==e.name&&(a.dispatchEvent(new CustomEvent("error")),a.dispatchEvent(new CustomEvent("loadend"))),e}}let g=RemoteInputElement;window.customElements.get("remote-input")||(window.RemoteInputElement=RemoteInputElement,window.customElements.define("remote-input",RemoteInputElement))},98105(a,b,c){function d(a){let b=a.getBoundingClientRect();return{top:b.top+window.pageYOffset,left:b.left+window.pageXOffset}}function e(a){let b=a,c=b.ownerDocument;if(!c||!b.offsetParent)return;let d=c.defaultView.HTMLElement;if(b!==c.body){for(;b!==c.body;){if(!(b.parentElement instanceof d))return;b=b.parentElement;let{position:e,overflowY:f,overflowX:g}=getComputedStyle(b);if("fixed"===e||"auto"===f||"auto"===g||"scroll"===f||"scroll"===g)break}return b instanceof Document?null:b}}function f(a,b){let c=b,d=a.ownerDocument;if(!d)return;let e=d.documentElement;if(!e||a===e)return;let f=g(a,c);if(!f)return;c=f._container;let h=c===d.documentElement&&d.defaultView?{top:d.defaultView.pageYOffset,left:d.defaultView.pageXOffset}:{top:c.scrollTop,left:c.scrollLeft},i=f.top-h.top,j=f.left-h.left,k=c.clientHeight,l=c.clientWidth,m=k-(i+a.offsetHeight),n=l-(j+a.offsetWidth);return{top:i,left:j,bottom:m,right:n,height:k,width:l}}function g(a,b){let c=a,d=c.ownerDocument;if(!d)return;let e=d.documentElement;if(!e)return;let f=d.defaultView.HTMLElement,g=0,j=0,k=c.offsetHeight,l=c.offsetWidth;for(;!(c===d.body||c===b);){if(g+=c.offsetTop||0,j+=c.offsetLeft||0,!(c.offsetParent instanceof f))return;c=c.offsetParent}let m,n,o;if(b&&b!==d&&b!==d.defaultView&&b!==d.documentElement&&b!==d.body){if(!(b instanceof f))return;o=b,m=b.scrollHeight,n=b.scrollWidth}else o=e,m=h(d.body,e),n=i(d.body,e);let p=m-(g+k),q=n-(j+l);return{top:g,left:j,bottom:p,right:q,_container:o}}function h(a,b){return Math.max(a.scrollHeight,b.scrollHeight,a.offsetHeight,b.offsetHeight,b.clientHeight)}function i(a,b){return Math.max(a.scrollWidth,b.scrollWidth,a.offsetWidth,b.offsetWidth,b.clientWidth)}c.d(b,{VZ:()=>e,"_C":()=>f,cv:()=>d,oE:()=>g})},76006(a,b,c){c.d(b,{Lj:()=>p,Ih:()=>w,P4:()=>l,nW:()=>E,fA:()=>u,GO:()=>v});let d=new WeakSet;function e(a){h(a),g(a)}let f=new WeakMap;function g(a=document){if(f.has(a))return f.get(a);let b=!1,c=new MutationObserver(a=>{for(let b of a)if("attributes"===b.type&&b.target instanceof Element)k(b.target);else if("childList"===b.type&&b.addedNodes.length)for(let c of b.addedNodes)c instanceof Element&&h(c)});c.observe(a,{childList:!0,subtree:!0,attributeFilter:["data-action"]});let d={get closed(){return b},unsubscribe(){b=!0,f.delete(a),c.disconnect()}};return f.set(a,d),d}function h(a){for(let b of a.querySelectorAll("[data-action]"))k(b);a instanceof Element&&a.hasAttribute("data-action")&&k(a)}function i(a){let b=a.currentTarget;for(let c of j(b))if(a.type===c.type){let e=b.closest(c.tag);d.has(e)&&"function"==typeof e[c.method]&&e[c.method](a);let f=b.getRootNode();if(f instanceof ShadowRoot&&d.has(f.host)&&f.host.matches(c.tag)){let g=f.host;"function"==typeof g[c.method]&&g[c.method](a)}}}function*j(a){for(let b of(a.getAttribute("data-action")||"").trim().split(/\s+/)){let c=b.lastIndexOf(":"),d=Math.max(0,b.lastIndexOf("#"))||b.length;yield{type:b.slice(0,c),tag:b.slice(c+1,d),method:b.slice(d+1)||"handleEvent"}}}function k(a){for(let b of j(a))a.addEventListener(b.type,i)}function l(a,b){let c=a.tagName.toLowerCase();if(a.shadowRoot){for(let d of a.shadowRoot.querySelectorAll(`[data-target~="${c}.${b}"]`))if(!d.closest(c))return d}for(let e of a.querySelectorAll(`[data-target~="${c}.${b}"]`))if(e.closest(c)===a)return e}let m=a=>String("symbol"==typeof a?a.description:a).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),n=(a,b="property")=>{let c=m(a);if(!c.includes("-"))throw new DOMException(`${b}: ${String(a)} is not a valid ${b} name`,"SyntaxError");return c},o="attr";function p(a,b){t(a,o).add(b)}let q=new WeakSet;function r(a,b){if(q.has(a))return;q.add(a);let c=Object.getPrototypeOf(a),d=c?.constructor?.attrPrefix??"data-";for(let e of(b||(b=t(c,o)),b)){let f=a[e],g=n(`${d}${e}`),h={configurable:!0,get(){return this.getAttribute(g)||""},set(a){this.setAttribute(g,a||"")}};"number"==typeof f?h={configurable:!0,get(){return Number(this.getAttribute(g)||0)},set(a){this.setAttribute(g,a)}}:"boolean"==typeof f&&(h={configurable:!0,get(){return this.hasAttribute(g)},set(a){this.toggleAttribute(g,a)}}),Object.defineProperty(a,e,h),e in a&&!a.hasAttribute(g)&&h.set.call(a,f)}}let s=Symbol.for("catalyst");class CatalystDelegate{constructor(a){let b=this,c=a.prototype.connectedCallback;a.prototype.connectedCallback=function(){b.connectedCallback(this,c)};let d=a.prototype.disconnectedCallback;a.prototype.disconnectedCallback=function(){b.disconnectedCallback(this,d)};let e=a.prototype.attributeChangedCallback;a.prototype.attributeChangedCallback=function(a,c,d){b.attributeChangedCallback(this,a,c,d,e)};let f=a.observedAttributes||[];Object.defineProperty(a,"observedAttributes",{configurable:!0,get(){return b.observedAttributes(this,f)},set(a){f=a}}),function(a){let b=a.observedAttributes||[],c=a.attrPrefix??"data-",d=a=>n(`${c}${a}`);Object.defineProperty(a,"observedAttributes",{configurable:!0,get:()=>[...t(a.prototype,o)].map(d).concat(b),set(a){b=a}})}(a),function(a){let b=m(a.name).replace(/-element$/,"");try{window.customElements.define(b,a),window[a.name]=customElements.get(b)}catch(c){if(!(c instanceof DOMException&&"NotSupportedError"===c.name))throw c}}(a)}observedAttributes(a,b){return b}connectedCallback(a,b){var c;a.toggleAttribute("data-catalyst",!0),customElements.upgrade(a),function(a){for(let b of a.querySelectorAll("template[data-shadowroot]"))b.parentElement===a&&a.attachShadow({mode:"closed"===b.getAttribute("data-shadowroot")?"closed":"open"}).append(b.content.cloneNode(!0))}(a),r(a),c=a,d.add(c),c.shadowRoot&&e(c.shadowRoot),h(c),g(c.ownerDocument),b?.call(a),a.shadowRoot&&e(a.shadowRoot)}disconnectedCallback(a,b){b?.call(a)}attributeChangedCallback(a,b,c,d,e){r(a),"data-catalyst"!==b&&e&&e.call(a,b,c,d)}}function t(a,b){if(!Object.prototype.hasOwnProperty.call(a,s)){let c=a[s],d=a[s]=new Map;if(c)for(let[e,f]of c)d.set(e,new Set(f))}let g=a[s];return g.has(b)||g.set(b,new Set),g.get(b)}function u(a,b){t(a,"target").add(b),Object.defineProperty(a,b,{configurable:!0,get(){return l(this,b)}})}function v(a,b){t(a,"targets").add(b),Object.defineProperty(a,b,{configurable:!0,get(){return function(a,b){let c=a.tagName.toLowerCase(),d=[];if(a.shadowRoot)for(let e of a.shadowRoot.querySelectorAll(`[data-targets~="${c}.${b}"]`))e.closest(c)||d.push(e);for(let f of a.querySelectorAll(`[data-targets~="${c}.${b}"]`))f.closest(c)===a&&d.push(f);return d}(this,b)}})}function w(a){new CatalystDelegate(a)}let x=new Map,y=new Promise(a=>{"loading"!==document.readyState?a():document.addEventListener("readystatechange",()=>a(),{once:!0})}),z=new Promise(a=>{let b=new AbortController;b.signal.addEventListener("abort",()=>a());let c={once:!0,passive:!0,signal:b.signal},d=()=>b.abort();document.addEventListener("mousedown",d,c),document.addEventListener("touchstart",d,c),document.addEventListener("keydown",d,c),document.addEventListener("pointerdown",d,c)}),A={ready:()=>y,firstInteraction:()=>z,visible:a=>new Promise(b=>{let c=new IntersectionObserver(a=>{for(let d of a)if(d.isIntersecting){b(),c.disconnect();return}},{rootMargin:"0px 0px 256px 0px",threshold:.01});for(let d of document.querySelectorAll(a))c.observe(d)})},B=new WeakMap;function C(a){cancelAnimationFrame(B.get(a)||0),B.set(a,requestAnimationFrame(()=>{for(let b of x.keys()){let c=a.matches(b)?a:a.querySelector(b);if(customElements.get(b)||c){let d=c?.getAttribute("data-load-on")||"ready",e=d in A?A[d]:A.ready;for(let f of x.get(b)||[])e(b).then(f);x.delete(b),B.delete(a)}}}))}let D;function E(a,b){x.has(a)||x.set(a,new Set),x.get(a).add(b),C(document.body),D||(D=new MutationObserver(a=>{if(x.size)for(let b of a)for(let c of b.addedNodes)c instanceof Element&&C(c)})).observe(document,{subtree:!0,childList:!0})}},11793(a,b,c){c.d(b,{EL:()=>e,N9:()=>o,Tz:()=>p});class Leaf{constructor(a){this.children=[],this.parent=a}delete(a){let b=this.children.indexOf(a);return -1!==b&&(this.children=this.children.slice(0,b).concat(this.children.slice(b+1)),0===this.children.length&&this.parent.delete(this),!0)}add(a){return this.children.push(a),this}}class RadixTrie{constructor(a){this.parent=null,this.children={},this.parent=a||null}get(a){return this.children[a]}insert(a){let b=this;for(let c=0;c=0;n-=1){h=c.children[n];let o=h.getAttribute("data-hotkey-scope");if(!i&&!o||i&&f.id===o){g=!0;break}}h&&g&&(function(a,b){let c=new CustomEvent("hotkey-fire",{cancelable:!0,detail:{path:b}}),e=!a.dispatchEvent(c);e||(d(a)?a.focus():a.click())}(h,l),a.preventDefault()),m()}}function o(a,b){0===Object.keys(h.children).length&&document.addEventListener("keydown",n);let c=function(a){let b=[],c=[""],d=!1;for(let e=0;ea.filter(a=>""!==a)).filter(a=>a.length>0)}(b||a.getAttribute("data-hotkey")||""),d=c.map(b=>h.insert(b).add(a));i.set(a,d)}function p(a){let b=i.get(a);if(b&&b.length)for(let c of b)c&&c.delete(a);0===Object.keys(h.children).length&&document.removeEventListener("keydown",n)}}}]) +//# sourceMappingURL=vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_mini-throt-a33094-6e3667ad50e5.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/45B343B5DF977D76B16A8AC9E403B3D3DA5D9D2D b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/45B343B5DF977D76B16A8AC9E403B3D3DA5D9D2D new file mode 100644 index 0000000..1d05d1a Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/45B343B5DF977D76B16A8AC9E403B3D3DA5D9D2D differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/45B343B5DF977D76B16A8AC9E403B3D3DA5D9D2D-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/45B343B5DF977D76B16A8AC9E403B3D3DA5D9D2D-blob new file mode 100644 index 0000000..738ad51 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/45B343B5DF977D76B16A8AC9E403B3D3DA5D9D2D-blob @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["app_assets_modules_github_ref-selector_ts"],{82368(a,b,c){var d=c(53290),e=c(69567),f=c(76006),g=c(17945),h=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let i=class RefSelectorElement extends HTMLElement{connectedCallback(){window.addEventListener("resize",this.windowResized),this.refType="branch"===this.getRequiredAttr("type")?d.r.Branch:d.r.Tag;let a=this.getAttribute("current-committish");this.currentCommittish=a?atob(a):null,this.input=this.hasAttribute("initial-filter")&&this.currentCommittish||"",this.defaultBranch=atob(this.getRequiredAttr("default-branch")),this.nameWithOwner=atob(this.getRequiredAttr("name-with-owner")),this.canCreate=this.hasAttribute("can-create"),this.prefetchOnMouseover=this.hasAttribute("prefetch-on-mouseover");let b=this.getRequiredAttr("query-endpoint"),c=this.getRequiredAttr("cache-key");this.index=new d.W(this.refType,this,b,c,this.nameWithOwner),this.updateViewportSize(),this.setupFetchListeners()}disconnectedCallback(){this.resizeAnimationRequest&&cancelAnimationFrame(this.resizeAnimationRequest),window.removeEventListener("resize",this.windowResized)}updateViewportSize(){this.isMobileViewport=window.innerWidth<544,this.windowHeight=window.innerHeight}inputEntered(a){this.input=a.detail,this.render()}tabSelected(){this.index.fetchData()}renderTemplate(a,b){return new e.R(a,b,e.XK)}renderRow(a){let b=this.index.currentSearchResult[a];if(!b&&a>=this.listLength)return document.createElement("span");if(this.index.fetchFailed)return this.renderTemplate(this.fetchFailedTemplate,{index:a,refName:this.input});if(!b){let c=this.input===this.currentCommittish;return this.isCurrentVisible||(this.isCurrentVisible=c),this.renderTemplate(this.noMatchTemplate,{index:a,isCurrent:c,refName:this.input})}let d=this.input.length>0,e=b===this.currentCommittish;this.isCurrentVisible||(this.isCurrentVisible=e);let f=this.renderTemplate(this.itemTemplate,{refName:b,index:a,isFilteringClass:d?"is-filtering":"",urlEncodedRefName:this.urlEncodeRef(b),isCurrent:e,isNotDefault:b!==this.defaultBranch});if(d){let g=f.querySelector("span");g.textContent="";let h=b.split(this.input),i=h.length-1;for(let j=0;j{b||(this.index.fetchData(),b=!0)};if(!a||a.open){c();return}this.prefetchOnMouseover&&a.addEventListener("mouseover",c,{once:!0}),this.addEventListener("keydown",this.keydown),this.addEventListener("change",this.updateCurrent);let d=a.querySelector("input[data-ref-filter]");d&&(d.addEventListener("input",()=>{this.input=d.value,this.render()}),d.addEventListener("keydown",b=>{if("ArrowDown"!==b.key&&("Tab"!==b.key||b.shiftKey)){if("Enter"===b.key){let c=this.index.currentSearchResult.indexOf(this.input);if(-1===c){if(!this.showCreateRow)return;c=this.listLength-1}let d=a.querySelector(`[data-index="${c}"]`);d.click(),b.preventDefault()}}else b.preventDefault(),b.stopPropagation(),this.focusFirstListMember()}))}focusFirstListMember(){this.virtualizedList&&(this.currentSelectionIndex=0,this.focusItemAtIndex(this.currentSelectionIndex))}updateCurrent(a){a.target instanceof HTMLInputElement&&a.target.checked&&a.target.value&&(this.currentCommittish=a.target.value)}keydown(a){if(null!==this.currentSelectionIndex){if("Enter"===a.key){let b=document.activeElement;if(!b)return;b.click(),a.preventDefault();return}if("Tab"!==a.key&&"Escape"!==a.key)switch(a.preventDefault(),a.stopPropagation(),a.key){case"ArrowUp":this.currentSelectionIndex--,this.currentSelectionIndex<0&&(this.currentSelectionIndex=this.listLength-1),this.focusItemAtIndex(this.currentSelectionIndex);break;case"Home":this.currentSelectionIndex=0,this.focusItemAtIndex(this.currentSelectionIndex);break;case"End":this.currentSelectionIndex=this.listLength-1,this.focusItemAtIndex(this.currentSelectionIndex);break;case"ArrowDown":this.currentSelectionIndex++,this.currentSelectionIndex>this.listLength-1&&(this.currentSelectionIndex=0),this.focusItemAtIndex(this.currentSelectionIndex)}}}focusItemAtIndex(a){this.virtualizedList.scrollToIndex(a,"center"),setTimeout(()=>{let b=this.listContainer.querySelector(`[data-index="${a}"]`);b&&b.focus()},20)}setupVirtualizedList(){this.listContainer.textContent="",this.listContainer.style.maxHeight=`${this.listHeight}px`,this.virtualizedList=new g.Z(this.listContainer,{height:this.listHeight,rowCount:this.listLength,renderRow:this.renderRow.bind(this),rowHeight:a=>{let b=this.isMobileViewport?54:33;return this.showCreateRow&&a===this.listLength-1?51:b},onRowsRendered:()=>{this.hiddenCurrentElement&&(this.listContainer.removeChild(this.hiddenCurrentElement),delete this.hiddenCurrentElement),this.isCurrentVisible?this.isCurrentVisible=!1:this.hiddenCurrentItemTemplate&&(this.hiddenCurrentElement=document.createElement("div"),this.hiddenCurrentElement?.appendChild(this.renderTemplate(this.hiddenCurrentItemTemplate,{refName:this.currentCommittish})),this.listContainer.appendChild(this.hiddenCurrentElement))},initialIndex:0,overscanCount:6}),this.virtualizedList.resize.bind(this.virtualizedList)}constructor(...a){super(...a),this.isCurrentVisible=!1,this.currentSelectionIndex=null,this.handleWindowResize=()=>{if(!this.virtualizedList)return;let a=this.isMobileViewport,b=this.windowHeight;this.updateViewportSize();let c=a!==this.isMobileViewport,d=b!==this.windowHeight;if(c){this.virtualizedList.destroy(),this.setupVirtualizedList();return}this.isMobileViewport&&d&&(this.listContainer.style.maxHeight=`${this.listHeight}px`,this.virtualizedList.resize(this.listHeight))},this.windowResized=()=>{this.resizeAnimationRequest&&cancelAnimationFrame(this.resizeAnimationRequest),this.resizeAnimationRequest=requestAnimationFrame(this.handleWindowResize)}}};h([f.fA],i.prototype,"listContainer",void 0),h([f.fA],i.prototype,"itemTemplate",void 0),h([f.fA],i.prototype,"noMatchTemplate",void 0),h([f.fA],i.prototype,"fetchFailedTemplate",void 0),h([f.fA],i.prototype,"hiddenCurrentItemTemplate",void 0),i=h([f.Ih],i)},53290(a,b,c){c.d(b,{W:()=>SearchIndex,r:()=>e});var d,e,f=c(86702),g=c(60958);let{getItem:h,setItem:i,removeItem:j}=(0,f.Z)("localStorage",{throwQuotaErrorsOnSet:!0});(d=e||(e={})).Branch="branch",d.Tag="tag";class SearchIndex{render(){this.selector.render()}async fetchData(){try{if(!this.isLoading||this.fetchInProgress)return;if(!this.bootstrapFromLocalStorage()){this.fetchInProgress=!0,this.fetchFailed=!1;let a=await fetch(`${this.refEndpoint}?type=${this.refType}`,{headers:{Accept:"application/json"}});await this.processResponse(a)}this.isLoading=!1,this.fetchInProgress=!1,this.render()}catch(b){this.fetchInProgress=!1,this.fetchFailed=!0}}async processResponse(a){if(this.emitStats(a),!a.ok){this.fetchFailed=!0;return}let b=a.clone(),c=await a.json();this.knownItems=c.refs,this.cacheKey=c.cacheKey,this.flushToLocalStorage(await b.text())}emitStats(a){if(!a.ok){(0,g.b)({incrementKey:"REF_SELECTOR_BOOT_FAILED"},!0);return}switch(a.status){case 200:(0,g.b)({incrementKey:"REF_SELECTOR_BOOTED_FROM_UNCACHED_HTTP"});break;case 304:(0,g.b)({incrementKey:"REF_SELECTOR_BOOTED_FROM_HTTP_CACHE"});break;default:(0,g.b)({incrementKey:"REF_SELECTOR_UNEXPECTED_RESPONSE"})}}search(a){if(this.searchTerm=a,""===a){this.currentSearchResult=this.knownItems;return}let b=[],c=[];this.exactMatchFound=!1;let d;for(let e of this.knownItems)if(!((d=e.indexOf(a))<0)){if(0===d){a===e?(c.unshift(e),this.exactMatchFound=!0):c.push(e);continue}b.push(e)}this.currentSearchResult=[...c,...b]}bootstrapFromLocalStorage(){let a=h(this.localStorageKey);if(!a)return!1;let b=JSON.parse(a);return b.cacheKey===this.cacheKey&&"refs"in b?(this.knownItems=b.refs,this.isLoading=!1,(0,g.b)({incrementKey:"REF_SELECTOR_BOOTED_FROM_LOCALSTORAGE"}),!0):(j(this.localStorageKey),!1)}async flushToLocalStorage(a){try{i(this.localStorageKey,a)}catch(b){if(b.message.toLowerCase().includes("quota")){this.clearSiblingLocalStorage(),(0,g.b)({incrementKey:"REF_SELECTOR_LOCALSTORAGE_OVERFLOWED"});try{i(this.localStorageKey,a)}catch(c){c.message.toLowerCase().includes("quota")&&(0,g.b)({incrementKey:"REF_SELECTOR_LOCALSTORAGE_GAVE_UP"})}}else throw b}}clearSiblingLocalStorage(){for(let a of Object.keys(localStorage))a.startsWith(SearchIndex.LocalStoragePrefix)&&j(a)}get localStorageKey(){return`${SearchIndex.LocalStoragePrefix}:${this.nameWithOwner}:${this.refType}`}constructor(a,b,c,d,e){this.knownItems=[],this.currentSearchResult=[],this.exactMatchFound=!1,this.searchTerm="",this.isLoading=!0,this.fetchInProgress=!1,this.fetchFailed=!1,this.refType=a,this.selector=b,this.refEndpoint=c,this.cacheKey=d,this.nameWithOwner=e}}SearchIndex.LocalStoragePrefix="ref-selector"},86702(a,b,c){c.d(b,{Z:()=>g,"_":()=>h});var d=c(86283),e=c(60958);let f=class NoOpStorage{getItem(){return null}setItem(){}removeItem(){}clear(){}key(){return null}get length(){return 0}};function g(a,b={throwQuotaErrorsOnSet:!1},c=d.iG,g=a=>a,h=a=>a){let i;try{if(!c)throw Error();i=c[a]||new f}catch{i=new f}let{throwQuotaErrorsOnSet:j}=b;function k(a){b.sendCacheStats&&(0,e.b)({incrementKey:a})}function l(a){try{if(i.removeItem(a),b.ttl){let c=`${a}:expiry`;i.removeItem(c)}}catch(d){}}return{getItem:function(a,b=new Date().getTime()){try{let c=i.getItem(a);if(!c)return null;let d=`${a}:expiry`,e=Number(i.getItem(d));if(e&&b>e)return l(a),l(d),k("SAFE_STORAGE_VALUE_EXPIRED"),null;return k("SAFE_STORAGE_VALUE_WITHIN_TTL"),g(c)}catch(f){return null}},setItem:function(a,c,d=new Date().getTime()){try{if(i.setItem(a,h(c)),b.ttl){let e=`${a}:expiry`,f=d+b.ttl;i.setItem(e,f.toString())}}catch(g){if(j&&g.message.toLowerCase().includes("quota"))throw g}},removeItem:l,clear:i.clear,key:i.key,get length(){return i.length}}}function h(a){return g(a,{throwQuotaErrorsOnSet:!1},window,JSON.parse,JSON.stringify)}},60958(a,b,c){c.d(b,{B:()=>m,b:()=>h});var d=c(86283),e=c(4412),f=c(53729);let g=[];function h(a,b=!1){void 0===a.timestamp&&(a.timestamp=new Date().getTime()),a.loggedIn=l(),a.staff=m(),a.bundler=f.A7,g.push(a),b?k():j()}let i=null;async function j(){await e.C,null==i&&(i=window.requestIdleCallback(k))}function k(){if(i=null,!g.length)return;let a=d.n4?.head?.querySelector('meta[name="browser-stats-url"]')?.content;if(!a)return;let b=JSON.stringify({stats:g});try{navigator.sendBeacon&&navigator.sendBeacon(a,b)}catch{}g=[]}function l(){return!!d.n4?.head?.querySelector('meta[name="user-login"]')?.content}function m(){return!!d.n4?.head?.querySelector('meta[name="user-staff"]')?.content}d.n4?.addEventListener("pagehide",k),d.n4?.addEventListener("visibilitychange",k)},4412(a,b,c){c.d(b,{C:()=>f,x:()=>e});var d=c(86283);let e=d.n4?.readyState==="interactive"||d.n4?.readyState==="complete"?Promise.resolve():new Promise(a=>{d.n4?.addEventListener("DOMContentLoaded",()=>{a()})}),f=d.n4?.readyState==="complete"?Promise.resolve():new Promise(a=>{d.iG?.addEventListener("load",a)})},53729(a,b,c){c.d(b,{A7:()=>i,ko:()=>h,q1:()=>g});var d=c(15205),e=c(86283);let f=(0,d.Z)(function(){return e.n4?.head?.querySelector('meta[name="runtime-environment"]')?.content||""}),g=(0,d.Z)(function(){return e.n4?.head?.querySelector('meta[name="is-private-instance"]')?.content==="true"}),h=(0,d.Z)(function(){return"enterprise"===f()}),i="webpack"},86283(a,b,c){c.d(b,{Qg:()=>d.Qg,iG:()=>e.iG,jX:()=>e.jX,n4:()=>e.n4,yF:()=>d.yF});var d=c(35647),e=c(73614)},73614(a,b,c){c.d(b,{iG:()=>e,jX:()=>f,n4:()=>d});let d="undefined"==typeof document?void 0:document,e="undefined"==typeof window?void 0:window,f="undefined"==typeof location?{pathname:"",origin:"",search:""}:location},35647(a,b,c){c.d(b,{Qg:()=>f,yF:()=>g});var d=c(73614);let e=void 0===d.n4,f=!e;function g(){return!!e||Boolean(d.n4.querySelector('react-app[data-ssr="true"]'))}}}]) +//# sourceMappingURL=app_assets_modules_github_ref-selector_ts-dadd44b8bc06.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/467403701192CB32ACA34BCC9B048CE687A84A96 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/467403701192CB32ACA34BCC9B048CE687A84A96 new file mode 100644 index 0000000..13dd4cd Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/467403701192CB32ACA34BCC9B048CE687A84A96 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4714B6DD352CD3246A37783F8AFFB93F3C8ABB5F b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4714B6DD352CD3246A37783F8AFFB93F3C8ABB5F new file mode 100644 index 0000000..2f609b5 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4714B6DD352CD3246A37783F8AFFB93F3C8ABB5F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/47192D9CD95DBCCC6B1C35B0A5523EA4613CD4C3 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/47192D9CD95DBCCC6B1C35B0A5523EA4613CD4C3 new file mode 100644 index 0000000..f4deaf7 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/47192D9CD95DBCCC6B1C35B0A5523EA4613CD4C3 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/47B7C68EC1075848750E7D012159ED20283CDC2F b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/47B7C68EC1075848750E7D012159ED20283CDC2F new file mode 100644 index 0000000..4f79070 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/47B7C68EC1075848750E7D012159ED20283CDC2F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/47B7C68EC1075848750E7D012159ED20283CDC2F-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/47B7C68EC1075848750E7D012159ED20283CDC2F-blob new file mode 100644 index 0000000..b26e804 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/47B7C68EC1075848750E7D012159ED20283CDC2F-blob @@ -0,0 +1,15167 @@ +/* Bundle Includes: + * js/attr.js + * js/mega.js + * js/megaPromise.js + * js/reqstatclient.js + * js/mDB.js + * js/mouse.js + * js/datastructs.js + * js/idbkvstorage.js + * js/sharedlocalkvstorage.js + * js/tlvstore.js + * js/vendor/jsbn.js + * js/vendor/jsbn2.js + */ + +/** + * mega.attr.* related code + */ + +(function _userAttributeHandling(global) { + "use strict"; + + var ns = Object.create(null); + var _inflight = Object.create(null); + var logger = MegaLogger.getLogger('user-attribute'); + var ATTRIB_CACHE_NON_CONTACT_EXP_TIME = 2 * 60 * 60; + var REVOKE_INFLIGHT = !1; // Lyubo is not happy so disabled for now :) + + var ATTR_REQ_CHANNEL = { + '*keyring': 6, + '*!authring': 6, + '*!authRSA': 6, + '*!authCu255': 6, + '+puCu255': 6, + '+sigCu255': 6, + '+puEd255': 6, + '+sigPubk': 6 + }; + + /** + * Assemble property name on Mega API. + * + * @private + * @param attribute {String} + * Name of the attribute. + * @param pub {Boolean|Number} + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * False for private encrypted attributes + * @param nonHistoric {Boolean} + * True for non-historic attributes (default: false). Non-historic attributes will overwrite the value, and + * not retain previous values on the API server. + * @param encodeValues {Boolean|undefined} + * If true, the object's values will be encoded to a UTF-8 byte array (Uint8Array) then encoded as a + * String containing 8 bit representations of the bytes before being passed to the TLV encoding/encrypting + * library. This is useful if the values contain special characters. The SDK is compatible with reading these. + * @return {String} + */ + var buildAttribute = ns._buildAttribute = function (attribute, pub, nonHistoric, encodeValues) { + + if (encodeValues) { + attribute = '>' + attribute; + } + + if (nonHistoric === true || nonHistoric === 1) { + attribute = '!' + attribute; + } + + if (pub === true || pub === undefined) { + attribute = '+' + attribute; + } + else if (pub === -2) { + attribute = '^' + attribute; + } + else if (pub !== -1) { + attribute = '*' + attribute; + } + + return attribute; + }; + + /** + * Assemble property name for database. + * + * @private + * @param userHandle {String} + * Mega's internal user handle. + * @param attribute {String} + * Name of the attribute. + * @return {String} + */ + var buildCacheKey = ns._buildCacheKey = function(userHandle, attribute) { + return userHandle + "_" + attribute; + }; + + /** + * Revoke a pending attribute retrieval if it gets overwritten/invalidated meanwhile. + * @param {String} cacheKey The key obtained from buildCacheKey() + * @returns {Boolean} Whether it was revoked + * @private + */ + var revokeRequest = function(cacheKey) { + if (_inflight[cacheKey]) { + if (REVOKE_INFLIGHT) { + if (d > 1) { + logger.info('Revoking Inflight Request...', cacheKey); + } + _inflight[cacheKey].revoked = true; + } + else { + if (d > 1) { + logger.info('Invalidating Inflight Request...', cacheKey); + } + } + delete _inflight[cacheKey]; + return true; + } + return false; + }; + + /** + * Converts an object with key/value pairs where the values may have special characters (Javascript stores strings + * as UTF-16) which may take up 2+ bytes. First it converts the values to UTF-8 encoding, then encodes those bytes + * to their 8 bit string representation. This object can then be sent directly to the TLV encoding library and + * encrypted as each string character is 8 bits. + * @param {Object} attribute An object with key/value pairs, the values being either ASCII strings or regular + * JavaScript Strings with UTF-16 characters + * @returns {Object} Returns the object with converted values + * @deprecated + * @see {@link tlvstore.encrypt} / {@link tlvstore.decrypt} + */ + ns.encodeObjectValues = function(attribute) { + + var encodedAttribute = {}; + var encoder = new TextEncoder('utf-8'); + + Object.keys(attribute).forEach(function(key) { + + // Encode to UTF-8 and store as Uint8Array bytes + var value = attribute[key]; + var byteArray = encoder.encode(value); + var encodedString = ''; + + // Encode from bytes back to String in 8 bit characters + for (var i = 0; i < byteArray.length; i++) { + encodedString += String.fromCharCode(byteArray[i]); + } + + // Store the encoded string + encodedAttribute[key] = encodedString; + }); + + return encodedAttribute; + }; + + /** + * Converts an object's values (with key/value pairs where the values have 8 bit characters) back to a byte array + * then converts that back to its normal JavaScript string representation + * @param {Object} attribute An object with key/value pairs + * @returns {Object} Returns the object with converted values + * @deprecated + * @see {@link tlvstore.encrypt} / {@link tlvstore.decrypt} + */ + ns.decodeObjectValues = function(attribute) { + + var decodedAttribute = {}; + var decoder = new TextDecoder('utf-8'); + + Object.keys(attribute).forEach(function(key) { + + var value = attribute[key]; + var decodedBytes = []; + + // Encode from 8 bit characters back to bytes + for (var i = 0; i < value.length; i++) { + decodedBytes.push(value.charCodeAt(i)); + } + + // Create Uint8Array for the TextDecoder then decode + var byteArray = new Uint8Array(decodedBytes); + var regularString = decoder.decode(byteArray); + + // Store the decoded string + decodedAttribute[key] = regularString; + }); + + return decodedAttribute; + }; + + /** + * Retrieves a user attribute. + * + * @param userhandle {String} + * Mega's internal user handle. + * @param attribute {String} + * Name of the attribute. + * @param pub {Boolean|Number} + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * False for private encrypted attributes + * @param nonHistoric {Boolean} + * True for non-historic attributes (default: false). Non-historic + * attributes will overwrite the value, and not retain previous + * values on the API server. + * @param callback {Function} + * Callback function to call upon completion (default: none). + * @param ctx {Object} + * Context, in case higher hierarchies need to inject a context + * (default: none). + * @param chathandle {String} pass chathandle in case this is an anonymous user previewing a specific pub chat + * @param decodeValues {Boolean|undefined} + * If true, the object's values will be decoded from String containing 8 bit representations of bytes to a + * UTF-8 byte array then decoded back to regular JavaScript Strings (UTF-16). This is useful if the values + * contain special characters. The SDK is compatible with reading these. + * + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + * Can be used to use promises instead of callbacks for asynchronous + * dependencies. + */ + ns.get = function _getUserAttribute( + userhandle, attribute, pub, nonHistoric, callback, ctx, chathandle, decodeValues) { + + if (typeof userhandle !== 'string' || base64urldecode(userhandle).length !== 8) { + return MegaPromise.reject(EARGS); + } + attribute = buildAttribute(attribute, pub, nonHistoric, decodeValues); + + // Prevent firing API requests when API already gave the attribute value with 'ug' + if (attribute[0] === '^' && Object(window.u_attr).u === userhandle && u_attr[attribute]) { + if (d > 1) { + logger.info('Attribute retrieval "%s" ug-provided.', attribute); + } + if (callback) { + callback(u_attr[attribute], {u: userhandle, ua: attribute}); + } + return MegaPromise.resolve(u_attr[attribute]); + } + + var self = this; + var myCtx = ctx || {}; + var args = toArray.apply(null, arguments); + + // Assemble property name on Mega API. + var cacheKey = buildCacheKey(userhandle, attribute); + + if (_inflight[cacheKey]) { + if (d > 1) { + logger.warn('Attribute retrieval "%s" already pending,...', cacheKey); + } + return _inflight[cacheKey]; + } + + // Make the promise to execute the API code. + var thePromise = new MegaPromise(); + _inflight[cacheKey] = thePromise; + + /** + * Check whether the request was revoked meanwhile and pipe it to retrieve fresh data + * @returns {Boolean} + * @private + */ + var isRevoked = function() { + if (thePromise.revoked) { + logger.info('Attribute retrieval got revoked...', cacheKey); + + if (_inflight[cacheKey]) { + logger.info('Another inflight request got set for "%s", reusing for revoked one.', cacheKey); + } + + thePromise.linkDoneAndFailTo(_inflight[cacheKey] || mega.attr.get.apply(mega.attr, args)); + return true; + } + return false; + }; + + /** + * mega.attr.get::settleFunctionDone + * + * Fullfill the promise with the result/attribute value from either API or cache. + * + * @param {Number|Object} res The result/attribute value. + * @param {Boolean} cached Whether it came from cache. + */ + var settleFunctionDone = function _settleFunctionDone(res, cached) { + var tag = cached ? 'Cached ' : ''; + res = Object(res).hasOwnProperty('av') ? res.av : res; + + // Another conditional, the result value may have been changed. + if (typeof res !== 'number') { + + // If it's a private attribute container + if (attribute.charAt(0) === '*') { + + // Base64 URL decode, decrypt and convert back to object key/value pairs + res = self.handleLegacyCacheAndDecryption(res, thePromise, attribute); + + // If the decodeValues flag is on, decode the 8 bit chars in the string to a UTF-8 byte array then + // convert back to a regular JavaScript String (UTF-16) + if (attribute[1] === '>' || attribute[2] === '>') { + res = self.decodeObjectValues(res); + } + } + + // Otherwise if a non-encrypted private attribute, base64 decode the data + else if (attribute.charAt(0) === '^') { + res = base64urldecode(res); + } + + if (d > 1 || is_karma) { + var loggerValueOutput = pub ? JSON.stringify(res) : '-- hidden --'; + if (loggerValueOutput.length > 256) { + loggerValueOutput = loggerValueOutput.substr(0, 256) + '...'; + } + logger.info(tag + 'Attribute "%s" for user "%s" is %s.', + attribute, userhandle, loggerValueOutput); + } + thePromise.resolve(res); + } + else { + // Got back an error (a number). + if (d > 1 || is_karma) { + logger.warn(tag + 'attribute "%s" for user "%s" could not be retrieved: %d!', + attribute, userhandle, res); + } + thePromise.reject(res); + } + + // remove pending promise cache + console.assert(!isRevoked(), 'The attribute retrieval should not have been revoked at this point...'); + delete _inflight[cacheKey]; + + // Finish off if we have a callback. + if (callback) { + callback(res, myCtx); + } + }; + + /** + * mega.attr.get::settleFunction + * + * Process result from `uga` API request, and cache it. + * + * @param {Number|Object} res The received result. + */ + var settleFunction = function _settleFunction(res) { + if (isRevoked()) { + return; + } + // Cache all returned values, except errors other than ENOENT + if (typeof res !== 'number' || res === ENOENT) { + var exp = 0; + // Only add cache expiration for attributes of non-contacts, because + // contact's attributes would be always in sync (using actionpackets) + if (userhandle !== u_handle && (!M.u[userhandle] || M.u[userhandle].c !== 1)) { + exp = unixtime(); + } + attribCache.setItem(cacheKey, JSON.stringify([res, exp])); + + if (res.v) { + self._versions[cacheKey] = res.v; + } + } + + settleFunctionDone(res); + }; + + // Assemble context for this async API request. + myCtx.u = userhandle; + myCtx.ua = attribute; + myCtx.callback = settleFunction; + + /** + * mega.attr.get::doApiReq + * + * Perform a `uga` API request If we are unable to retrieve the entry + * from the cache. If a MegaPromise is passed as argument, we'll wait + * for it to complete before firing the api rquest. + * + * settleFunction will be used to process the api result. + * + * @param {MegaPromise|Number} [promise] Optional promise to wait for. + */ + var doApiReq = function _doApiReq(promise) { + if (isRevoked()) { + if (promise === -0xdeadbeef) { + logger.warn('Attribute "%s" got revoked while removing a cached entry!', cacheKey); + } + return; + } + if (promise instanceof MegaPromise) { + promise.always(function() { + doApiReq(-0xdeadbeef); + }); + } + else { + if (chathandle) { + api_req( + {'a': 'mcuga', "ph": chathandle, 'u': userhandle, 'ua': attribute, 'v': 1}, + myCtx, + ATTR_REQ_CHANNEL[attribute] + ); + } + else { + api_req( + {'a': 'uga', 'u': userhandle, 'ua': attribute, 'v': 1}, + myCtx, + ATTR_REQ_CHANNEL[attribute] + ); + } + } + }; + + // check the cache first! + attribCache.getItem(cacheKey) + .fail(doApiReq) + .done(function __attribCacheGetDone(v) { + var result; + + if (isRevoked()) { + return; + } + + try { + var res = JSON.parse(v); + + if ($.isArray(res)) { + var exp = res[1]; + + // Pick the cached entry as long it has no expiry or it hasn't expired + if (!exp || exp > (unixtime() - ATTRIB_CACHE_NON_CONTACT_EXP_TIME)) { + if (res[0].av) { + result = res[0].av; + if (res[0].v) { + self._versions[cacheKey] = res[0].v; + } + } + else { + // legacy support, e.g. for cached attribute values + result = res[0]; + } + } + } + } + catch (ex) { + logger.error(ex); + } + + if (result === undefined) { + doApiReq(attribCache.removeItem(cacheKey)); + } + else { + settleFunctionDone(result, true); + } + }); + + return thePromise; + }; + + /** + * Removes a user attribute for oneself. + * Note: THIS METHOD IS LEFT HERE FOR DEVELOPMENT AND TESTING PURPOSES, PLEASE DON'T USE FOR PRODUCTION FEATURES. + * + * @deprecated + * + * @param attribute {string} + * Name of the attribute. + * @param pub {Boolean|Number} + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * False for private encrypted attributes + * @param nonHistoric {bool} + * True for non-historic attributes (default: false). Non-historic + * attributes will overwrite the value, and not retain previous + * values on the API server. + * @param encodeValues {Boolean|undefined} + * If true and used in combination with the private/encrypted flag (* attribute), the object's values will be + * encoded to UTF-8 as a byte array (Uint8Array) then encoded as a String containing the 8 bit representations + * of the bytes before being passed to the TLV encoding/encrypting functions. These functions will convert + * these 8 bit strings back to bytes before encryption. This feature is useful if the object values contain + * special characters. The SDK is compatible with reading these attributes. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns.remove = promisify(function(resolve, reject, attribute, pub, nonHistoric, encodeValues) { + if (arguments.length > 3) { + attribute = buildAttribute(attribute, pub, nonHistoric, encodeValues); + } + var cacheKey = buildCacheKey(u_handle, attribute); + + if (d) { + console.warn("Removing attribute %s, I really hope you know what you are doing!", attribute); + } + + if (attribute[0] === '^') { + delete u_attr[attribute]; + } + + var self = this; + var req = {'a': 'upr', 'ua': attribute, 'v': 1}; + if (self._versions[cacheKey]) { + // req['av'] = self._versions[cacheKey]; + } + + attribCache.removeItem(cacheKey) + .always(function() { + api_req(req, { + callback: function(res) { + // Revoke pending attribute retrieval, if any. + revokeRequest(cacheKey); + + if (typeof res === 'number' || res < 0) { + logger.warn('Error removing user attribute "%s", result: %s!', attribute, res); + reject(res); + } + else { + if (self._versions[cacheKey] && typeof res === 'string') { + self._versions[cacheKey] = res; + } + logger.info('Removed user attribute "%s", result: ' + res, attribute); + resolve(); + } + } + }, ATTR_REQ_CHANNEL[attribute]); + }); + }); + + /** + * Stores a user attribute for oneself. + * + * @param attribute {string} + * Name of the attribute. The max length is 16 characters. Note that the SDK only reads the first 8 chars. Also + * note that the prefix characters such as *, +, ^, ! or > may be added so usually you have less to work with. + * @param value {object} + * Value of the user attribute. Public properties are of type {string}, + * private ones have to be an object with key/value pairs. + * @param pub {Boolean|Number} + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * False for private encrypted attributes + * @param nonHistoric {Boolean} + * True for non-historic attributes (default: false). Non-historic + * attributes will overwrite the value, and not retain previous + * values on the API server. + * @param callback {Function} + * Callback function to call upon completion (default: none). This callback + * function expects two parameters: the attribute `name`, and its `value`. + * In case of an error, the `value` will be undefined. + * @param ctx {Object} + * Context, in case higher hierarchies need to inject a context + * (default: none). + * @param mode {Integer|undefined} + * Encryption mode. One of tlvstore.BLOCK_ENCRYPTION_SCHEME (to use default AES_GCM_12_16 pass undefined). + * @param useVersion {Boolean|undefined} + * If true is passed, 'upv' would be used instead of 'up' (which means that conflict handlers and all + * versioning logic may be used for setting this attribute) + * @param encodeValues {Boolean|undefined} + * If true and used in combination with the private/encrypted flag (* attribute), the object's values will be + * encoded to UTF-8 as a byte array (Uint8Array) then encoded as a String containing the 8 bit representations + * of the bytes before being passed to the TLV encoding/encrypting functions. These functions will convert + * these 8 bit strings back to bytes before encryption. This feature is useful if the object values contain + * special characters. The SDK is compatible with reading these attributes. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + * Can be used to use promises instead of callbacks for asynchronous + * dependencies. + */ + ns.set = function _setUserAttribute( + attribute, value, pub, nonHistoric, callback, ctx, mode, useVersion, encodeValues) { + + var self = this; + var myCtx = ctx || {}; + var savedValue = value; + var attrName = attribute; + + // Prepare all data needed for the call on the Mega API. + if (mode === undefined) { + mode = tlvstore.BLOCK_ENCRYPTION_SCHEME.AES_GCM_12_16; + } + + // Format to get the right prefixes + attribute = buildAttribute(attribute, pub, nonHistoric, encodeValues); + + // If encrypted/private attribute, the value should be a key/value property container + if (attribute[0] === '*') { + + // If encode flag is on, encode the object values to UTF-8 then 8 bit strings so TLV blockEncrypt can parse + if (attribute[1] === '>' || attribute[2] === '>') { + value = self.encodeObjectValues(value); + } + + // Encode to TLV, encrypt it then Base64 URL encode it so it can be stored API side + savedValue = base64urlencode( + tlvstore.blockEncrypt( + tlvstore.containerToTlvRecords(value), u_k, mode, false + ) + ); + } + + // Otherwise if a non-encrypted private attribute, base64 encode the data + else if (attribute[0] === '^') { + savedValue = base64urlencode(value); + } + + // Make the promise to execute the API code. + var thePromise = new MegaPromise(); + + var cacheKey = buildCacheKey(u_handle, attribute); + + // Revoke pending attribute retrieval, if any. + revokeRequest(cacheKey); + + // clear when the value is being sent to the API server, during that period + // the value should be retrieved from the server, because of potential + // race conditions + attribCache.removeItem(cacheKey); + + var settleFunction = function(res) { + if (typeof res !== 'number') { + attribCache.setItem(cacheKey, JSON.stringify([{"av": savedValue, "v": res[attribute]}, 0])); + if (res[attribute]) { + self._versions[cacheKey] = res[attribute]; + } + + logger.info('Setting user attribute "' + + attribute + '", result: ' + res); + thePromise.resolve(res); + } + else { + if (res === EEXPIRED && useVersion) { + var conflictHandlerId = attribute; + + if ( + !self._conflictHandlers[conflictHandlerId] || + self._conflictHandlers[conflictHandlerId].length === 0 + ) { + logger.error('Server returned version conflict for attribute "' + + attribute + '", result: ' + res + ', local version:', self._versions[cacheKey]); + thePromise.reject(res); + } + else { + // ensure that this attr's value is not cached and up-to-date. + attribCache.removeItem(cacheKey); + + self.get( + u_handle, + attrName, + pub, + nonHistoric, + false, + false, + false, + encodeValues + ) + .done(function(attrVal) { + var valObj = { + 'localValue': value, + 'remoteValue': attrVal, + 'mergedValue': value, + 'latestVersion': self._versions[cacheKey] + }; + + var matched = self._conflictHandlers[conflictHandlerId].some(function(cb, index) { + return cb(valObj, index); + }); + + if (matched) { + thePromise.linkDoneAndFailTo( + self.set( + attrName, + valObj.mergedValue, + pub, + nonHistoric, + callback, + ctx, + mode, + useVersion, + encodeValues + ) + ); + } + + }) + .fail(function(failResult) { + logger.error( + "This should never happen:", attribute, res, failResult, self._versions[cacheKey] + ); + thePromise.reject(failResult); + }); + } + + } + else { + logger.warn('Error setting user attribute "' + + attribute + '", result: ' + res + '!'); + thePromise.reject(res); + } + } + + // Finish off if we have a callback. + if (callback) { + callback(res, myCtx); + } + }; + + if (window.is_chatlink) { + switch (attrName) { + case 'authRSA': + case 'authring': + case 'authCu255': + if (d) { + logger.warn('Leaving attribute "%s" into memory-only mode.', attribute); + } + // @todo smartly sync/merge those attributes when the (full reg.) user moves away from the chat-link + queueMicrotask(() => settleFunction([])); + return thePromise; + } + } + + // Assemble context for this async API request. + myCtx.ua = attribute; + myCtx.callback = settleFunction; + + + // Fire it off. + var apiCall = {'a': 'up', 'i': requesti}; + + if (useVersion) { + var version = self._versions[cacheKey]; + + apiCall['a'] = 'upv'; + if (version) { + apiCall[attribute] = [ + savedValue, + version + ]; + + api_req(apiCall, myCtx, ATTR_REQ_CHANNEL[attribute]); + } + else { + // retrieve version/data from cache or server? + self.get(u_handle, attrName, pub, nonHistoric).always(function() { + version = self._versions[cacheKey]; + + apiCall['a'] = 'upv'; + if (version) { + apiCall[attribute] = [ + savedValue, + version + ]; + } + else { + apiCall[attribute] = [ + savedValue + ]; + } + api_req(apiCall, myCtx, ATTR_REQ_CHANNEL[attribute]); + }); + + } + } + else { + apiCall[attribute] = savedValue; + + api_req(apiCall, myCtx, ATTR_REQ_CHANNEL[attribute]); + } + + + return thePromise; + }; + + ns._versions = Object.create(null); + ns._conflictHandlers = Object.create(null); + + ns.registerConflictHandler = function (attributeName, pub, nonHistoric, encodeValues, mergeFn) { + var attributeId = buildAttribute(attributeName, pub, nonHistoric, encodeValues); + + if (!this._conflictHandlers[attributeId]) { + this._conflictHandlers[attributeId] = []; + } + this._conflictHandlers[attributeId].push(mergeFn); + }; + + /** + * An internal list of queued setArrayAttribute operations + * + * @type {Array} + * @private + */ + ns._queuedSetArrayAttributeOps = []; + + + /** + * QueuedSetArrayAttribute is used to represent an instance of a "set" op in an queue of QueuedSetArrayAttribute's. + * Every QueuedSetArrayAttribute can contain multiple changes to multiple keys. + * This is done transparently in mega.attr.setArrayAttribute. + * + * @private + * @param {String} attr - see mega.attr.setArrayAttribute + * @param {String} attributeName see mega.attr.setArrayAttribute + * @param {String} k initial k to be changed + * @param {String} v initial value to be used for the change + * @param {String} pub see mega.attr.setArrayAttribute + * @param {String} nonHistoric see mega.attr.setArrayAttribute + * @constructor + */ + var QueuedSetArrayAttribute = function(attr, attributeName, k, v, pub, nonHistoric) { + var self = this; + self.attr = attr; + self.attributeName = attributeName; + self.pub = pub; + self.nonHistoric = nonHistoric; + self.ops = []; + self.state = QueuedSetArrayAttribute.STATE.QUEUED; + + var proxyPromise = new MegaPromise(); + proxyPromise.always(function() { + // logger.debug("finished: ", proxyPromise.state(), self.toString()); + + self.state = QueuedSetArrayAttribute.STATE.DONE; + array.remove(self.attr._queuedSetArrayAttributeOps, self); + + if (self.attr._queuedSetArrayAttributeOps.length > 0) { + // execute now + self.attr._nextQueuedSetArrayAttributeOp(); + } + }); + + self.queueSubOp(k, v); + + self.promise = proxyPromise; + self.attr._queuedSetArrayAttributeOps.push(self); + if (self.attr._queuedSetArrayAttributeOps.length === 1) { + // execute now + self.attr._nextQueuedSetArrayAttributeOp(); + } + }; + + QueuedSetArrayAttribute.STATE = { + 'QUEUED': 1, + 'EXECUTING': 2, + 'DONE': 3 + }; + + /** + * Internal method, that is used for adding subOps, e.g. an QueuedSetArrayAttribute can contain multiple + * changes to a key. + * + * @private + * @param {String} k + * @param {String} v + */ + QueuedSetArrayAttribute.prototype.queueSubOp = function(k, v) { + var self = this; + self.ops.push([k, v]); + logger.debug("QueuedSetArrayAttribute queued sub op", k, v, self.toString()); + }; + + /** + * Debugging purposes only + * + * @returns {String} + */ + QueuedSetArrayAttribute.prototype.toString = function() { + var self = this; + + var setOps = []; + + self.ops.forEach(function(entry) { + setOps.push(entry[0] + "=" + entry[1]); + }); + + return "QueuedSetArrayAttribute: " + buildAttribute(self.attributeName, self.pub, self.nonHistoric) + "(" + + setOps.join(",") + + ")"; + }; + + /** + * Execute this QueuedSetArrayAttribute changes and send them to the server. + * + * @returns {MegaPromise|*} + */ + QueuedSetArrayAttribute.prototype.exec = function() { + var self = this; + + var proxyPromise = self.promise; + self.state = QueuedSetArrayAttribute.STATE.EXECUTING; + + logger.debug("QueuedSetArrayAttribute executing: ", self.toString()); + + var _setArrayAttribute = function(r) { + if (r === EINTERNAL) { + r = {}; + } + else if (typeof r === 'number') { + logger.error("Found number value for attribute: ", self.attributeName, " when trying to use it as " + + "attribute array. Halting .setArrayAttribute"); + proxyPromise.reject(r); + return; + } + var arr = r ? r : {}; + self.ops.forEach(function(entry) { + arr[entry[0]] = entry[1]; + }); + + var serializedValue = arr; + + proxyPromise.linkDoneAndFailTo( + self.attr.set( + self.attributeName, + serializedValue, + self.pub, + self.nonHistoric, + undefined, + undefined, + undefined, + true + ) + ); + }; + + self.attr.get(u_handle, self.attributeName, self.pub, self.nonHistoric) + .done(function(r) { + try { + if (r === -9) { + _setArrayAttribute({}); + proxyPromise.reject(r); + } + else { + _setArrayAttribute(r); + } + } + catch (e) { + logger.error("QueuedSetArrayAttribute failed, because of exception: ", e); + proxyPromise.reject(e, r); + } + }) + .fail(function(r) { + if (r === -9) { + try { + _setArrayAttribute({}); + } + catch (e) { + logger.error("QueuedSetArrayAttribute failed, because of exception: ", e); + } + proxyPromise.reject(r); + } + else { + proxyPromise.reject(r); + } + }); + + return proxyPromise; + }; + + /** + * Try to execute next op, if such is available. + * + * @type {Function} + * @private + */ + ns._nextQueuedSetArrayAttributeOp = SoonFc(function() { + var self = this; + var found = false; + self._queuedSetArrayAttributeOps.forEach(function(op) { + if (!found && op.state === QueuedSetArrayAttribute.STATE.QUEUED) { + found = op; + } + }); + + if (found) { + found.exec(); + } + }, 75); + + + ns.QueuedSetArrayAttribute = QueuedSetArrayAttribute; + + /** + * Update the value (value) of a specific key (subkey) in an "array attribute". + * Important note: `setArrayAttribtues` are cleverly throttled to not flood the API, but also, while being queued, + * multiple .setArrayAttribute('a', ...) -> .setArrayAttribute('a', ...), etc, may be executed in one single API + * call. + * For the developer, this is going to be transparently handled, since any .setArrayAttribute returns a promise and + * that promise would be synced with the internal queueing mechanism, so the only thing he/she needs to take care + * is eventually define a proper execution flow using promises. + * + * @param {String} attributeName see mega.attr.set + * @param {String} subkey generic + * @param {String} value generic + * @param {Integer|undefined|false} pub see mega.attr.set + * @param {Integer|undefined|false} nonHistoric see mega.attr.set + * @returns {MegaPromise|*} + */ + ns.setArrayAttribute = function(attributeName, subkey, value, pub, nonHistoric) { + var self = this; + var found = false; + self._queuedSetArrayAttributeOps.forEach(function(op) { + if ( + !found && + op.state === QueuedSetArrayAttribute.STATE.QUEUED && + op.attributeName === attributeName && + op.pub === pub && + op.nonHistoric === nonHistoric + ) { + found = op; + } + }); + + if (found && found.state === QueuedSetArrayAttribute.STATE.QUEUED) { + found.queueSubOp(subkey, value); + return found.promise; + } + else { + var op = new QueuedSetArrayAttribute(self, attributeName, subkey, value, pub, nonHistoric); + return op.promise; + } + }; + + /** + * Get a specific `subkey`'s value from an "array attribute" + * + * @param {String} userId see mega.attr.get + * @param {String} attributeName the actual attribtue name + * @param {String} subkey the actual subkey stored in that array attribute + * @param {Integer|undefined|false} pub see mega.attr.get + * @param {Integer|undefined|false} nonHistoric see mega.attr.get + * @returns {MegaPromise} + */ + ns.getArrayAttribute = function(userId, attributeName, subkey, pub, nonHistoric) { + var self = this; + + var proxyPromise = new MegaPromise(); + + var $getPromise = self.get(userId, attributeName, pub, nonHistoric) + .done(function(r) { + try { + var arr = r ? r : {}; + proxyPromise.resolve( + arr[subkey] + ); + } + catch (e) { + proxyPromise.reject(e, r); + } + }); + + proxyPromise.linkFailTo($getPromise); + + return proxyPromise; + }; + + /** + * Handle BitMap attributes + * + * @param attrName + * @param version + */ + ns.handleBitMapAttribute = function(attrName, version) { + var attributeStringName = attrName.substr(2); + var bitMapInstance = attribCache.bitMapsManager.get(attributeStringName); + if (bitMapInstance.getVersion() !== version) { + mega.attr.get( + u_handle, + attributeStringName, + attrName.substr(0, 2) === '+!' ? true : -2, + true + ).done(function(r) { + bitMapInstance.mergeFrom(r, false); + }); + } + }; + + /** + * Handles legacy cache & decryption of attributes that use tlvstore + * + * @param {String|Object} res The payload to decrypt. + * @param {MegaPromise} [thePromise] Promise to signal rejections. + * @param {String} [attribute] Attribute name we're decrypting. + * @returns {*} the actual res (if altered) + * @deprecated + * @see {@link tlvstore.encrypt} / {@link tlvstore.decrypt} + */ + ns.handleLegacyCacheAndDecryption = function(res, thePromise, attribute) { + if (typeof res !== 'object') { + try { + var clearContainer = tlvstore.blockDecrypt( + base64urldecode(res), + u_k + ); + res = tlvstore.tlvRecordsToContainer(clearContainer, true); + + if (res === false) { + throw new Error('TLV Record decoding failed.'); + } + } + catch (e) { + if (d) { + logger.error('Could not decrypt private user attribute %s: %s', attribute, e.message, e); + } + res = EINTERNAL; + + if (thePromise) { + thePromise.reject(res); + } + } + } + + return res; + }; + + var uaPacketParserHandler = Object.create(null); + + /** + * Process action-packet for attribute updates. + * + * @param {String} attrName Attribute name + * @param {String} userHandle User handle + * @param {Boolean} [ownActionPacket] Whether the action-packet was issued by oneself + * @param {String} [version] version, as returned by the API + */ + ns.uaPacketParser = function uaPacketParser(attrName, userHandle, ownActionPacket, version) { + var cacheKey = userHandle + "_" + attrName; + + if (this._versions[cacheKey] === version) { + // dont invalidate if we have the same version in memory. + return; + } + + // Revoke pending attribute retrieval, if any. + revokeRequest(cacheKey); + + logger.debug('uaPacketParser: Invalidating cache entry "%s"', cacheKey); + + // XXX: Even if we're using promises here, this is guaranteed to resolve synchronously atm, + // so if this ever changes we'll need to make sure it's properly adapted... + + if (window.u_attr && userHandle === window.u_handle && attrName[0] === '^') { + delete u_attr[attrName]; + } + + var removeItemPromise = attribCache.removeItem(cacheKey); + + removeItemPromise + .always(function _uaPacketParser() { + if (typeof uaPacketParserHandler[attrName] === 'function') { + uaPacketParserHandler[attrName](userHandle); + } + else if ( + (attrName.substr(0, 2) === '+!' || attrName.substr(0, 2) === '^!') && + attribCache.bitMapsManager.exists(attrName.substr(2)) + ) { + mega.attr.handleBitMapAttribute(attrName, version); + } + else if (d > 1) { + logger.debug('uaPacketParser: No handler for "%s"', attrName); + } + }); + + return removeItemPromise; + }; + + mBroadcaster.once('boot_done', function() { + uaPacketParserHandler['firstname'] = function(userHandle) { + if (M.u[userHandle]) { + M.u[userHandle].firstName = M.u[userHandle].lastName = ""; + M.syncUsersFullname(userHandle); + } + else if (d) { + console.warn('uaPacketParser: Unknown user %s handling first/lastname', userHandle); + } + }; + uaPacketParserHandler.lastname = uaPacketParserHandler.firstname; + + uaPacketParserHandler['+a'] = function(userHandle) { + M.avatars(userHandle); + }; + uaPacketParserHandler['*!authring'] = function() { + if (!mega.keyMgr.generation) { + authring.getContacts('Ed25519'); + } + }; + uaPacketParserHandler['*!authRSA'] = function() { + authring.getContacts('RSA'); + }; + uaPacketParserHandler['*!authCu255'] = function() { + if (!mega.keyMgr.generation) { + authring.getContacts('Cu25519'); + } + }; + uaPacketParserHandler['+puEd255'] = function(userHandle) { + // pubEd25519 key was updated! force fingerprint regen. + delete pubEd25519[userHandle]; + crypt.getPubEd25519(userHandle); + }; + uaPacketParserHandler['*!fmconfig'] = function() { + if (fminitialized) { + mega.config.fetch() + .then(() => { + // @todo move this to config->refresh.ui()? + if (page === 'fm/account/transfers') { + accountUI.transfers.transferTools.megasync.render(); + } + }) + .dump('fmconfig.sync'); + } + }; + uaPacketParserHandler['*!>alias'] = function() { + nicknames.updateNicknamesFromActionPacket(); + }; + uaPacketParserHandler['birthday'] = function(userHandle) { + mega.attr.get(userHandle, 'birthday', -1, false, function(res) { + u_attr['birthday'] = from8(base64urldecode(res)); + if (fminitialized && page === 'fm/account') { + accountUI.account.profiles.renderBirthDay(); + } + }); + }; + uaPacketParserHandler['birthmonth'] = function(userHandle) { + mega.attr.get(userHandle, 'birthmonth', -1, false, function(res) { + u_attr['birthmonth'] = from8(base64urldecode(res)); + if (fminitialized && page === 'fm/account') { + accountUI.account.profiles.renderBirthMonth(); + } + }); + }; + uaPacketParserHandler['birthyear'] = function(userHandle) { + mega.attr.get(userHandle, 'birthyear', -1, false, function(res) { + u_attr['birthyear'] = from8(base64urldecode(res)); + if (fminitialized && page === 'fm/account') { + accountUI.account.profiles.renderBirthYear(); + } + }); + }; + uaPacketParserHandler['country'] = function(userHandle) { + mega.attr.get(userHandle, 'country', -1, false, function(res) { + u_attr['country'] = from8(base64urldecode(res)); + if (fminitialized && page === 'fm/account') { + accountUI.account.profiles.renderCountry(); + accountUI.account.profiles.bindEvents(); + } + }); + }; + uaPacketParserHandler['^!prd'] = function() { + mBroadcaster.sendMessage('attr:passwordReminderDialog'); + // if page is session history and new password action detected. update session table. + if (fminitialized && page === 'fm/account/security' && accountUI.security) { + accountUI.security.session.update(1); + } + }; + uaPacketParserHandler['^!dv'] = function() { + if (fminitialized && M.account) { + delay('fv:uvi^dv', fileversioning.updateVersionInfo.bind(fileversioning), 4e3); + } + }; + uaPacketParserHandler['^clv'] = function(userHandle) { + mega.attr.get(userHandle, 'clv', -2, 0, function(res, ctx) { + u_attr[ctx.ua] = res; + + if (fminitialized && page === 'fm/account') { + accountUI.account.qrcode.render(M.account, res); + } + }); + }; + uaPacketParserHandler['^!rubbishtime'] = function(userHandle) { + if (u_attr.flags.ssrs > 0) { + mega.attr.get(userHandle, 'rubbishtime', -2, 1, function(res, ctx) { + u_attr[ctx.ua] = res; + + if (fminitialized && M.account) { + M.account.ssrs = parseInt(res); + if (page === 'fm/account/file-management') { + accountUI.fileManagement.rubsched.render(M.account); + } + } + }); + } + }; + uaPacketParserHandler['^!usl'] = function() { + if (fminitialized && u_type) { + M.getStorageState(true).always(M.checkStorageQuota.bind(M, 2e3)); + } + }; + uaPacketParserHandler['*!rp'] = function() { + if (fminitialized) { + mBroadcaster.sendMessage('attr:rp'); + } + }; + uaPacketParserHandler['^!enotif'] = function() { + mega.enotif.handleAttributeUpdate(); + }; + uaPacketParserHandler['^!affid'] = function(userHandle) { + mega.attr.get(userHandle, 'affid', -2, 1, function(res, ctx) { + u_attr[ctx.ua] = res; + + if (fminitialized) { + M.affiliate.id = res; + } + }); + }; + uaPacketParserHandler['^!webtheme'] = function(userHandle) { + + mega.attr.get(userHandle, 'webtheme', -2, 1, function(res, ctx) { + + u_attr[ctx.ua] = res; + + if (!is_mobile && is_fm()) { + mega.ui.theme.set(res | 0); + } + }); + }; + + uaPacketParserHandler['^!ps'] = function(userHandle) { + mega.attr.get(userHandle, 'ps', -2, 1, function(res, ctx) { + u_attr[ctx.ua] = res; + + if (fminitialized && megaChatIsReady && typeof pushNotificationSettings !== 'undefined') { + pushNotificationSettings.init(); + } + }); + }; + uaPacketParserHandler['^!csp'] = () => 'csp' in window && csp.init(); + + uaPacketParserHandler['*!cam'] = function(userHandle) { + + mega.attr.get(userHandle, "cam", false, true, (res, ctx) => { + + u_attr[ctx.ua] = base64urlencode( + tlvstore.blockEncrypt( + tlvstore.containerToTlvRecords(res), u_k, tlvstore.BLOCK_ENCRYPTION_SCHEME.AES_GCM_12_16 + ) + ); + + if (fminitialized) { + + M.CameraId = base64urlencode(res.h); + M.SecondCameraId = base64urlencode(res.sh); + + M.cameraUploadUI(); + mega.gallery.nodeUpdated = true; + + if (M.currentCustomView.type === 'gallery') { + galleryUI(); + } + } + }); + }; + + uaPacketParserHandler['^!bak'] = (userHandle) => { + + mega.attr.get(userHandle, 'bak', -2, 1, (res, ctx) => { + + u_attr[ctx.ua] = res; + + if (fminitialized) { + M.BackupsId = base64urlencode(u_attr[ctx.ua]); + } + }); + }; + + uaPacketParserHandler['^!keys'] = (userHandle) => { + if (d) { + console.log(`*** KEYS UPDATED for ${userHandle}`); + } + + if (userHandle === u_handle && 'keyMgr' in mega) { + + const shouldLoad = fminitialized || !mega.keyMgr.generation; + + if (shouldLoad) { + mega.keyMgr.fetchKeyStore() + .catch((ex) => { + console.error('key-manager error', ex); + }); + } + } + }; + + if (d) { + global._uaPacketParserHandler = uaPacketParserHandler; + } + }); + + /** + * Create helper factory. + * @param {String} attribute Name of the attribute. + * @param {Boolean|Number} pub + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * @param {Boolean} nonHistoric + * True for non-historic attributes (default: false). Non-historic + * attributes will overwrite the value, and not retain previous + * values on the API server. + * @param {String} storeKey An object key to store the data under + * @param {Function} [decode] Function to post-process the value before returning it + * @param {Function} [encode] Function to pre-process the value before storing it + * @return {Object} + */ + ns.factory = function(attribute, pub, nonHistoric, storeKey, decode, encode) { + var key = buildAttribute(attribute, pub, nonHistoric); + if (this.factory[key]) { + return this.factory[key]; + } + + if (typeof encode !== 'function') { + encode = function(value) { + return JSON.stringify(value); + }; + } + if (typeof decode !== 'function') { + decode = function(value) { + return JSON.parse(value); + }; + } + var log = new MegaLogger('factory[' + key + ']', false, logger); + + var cacheValue = function(value) { + cacheValue.last = decode(value[storeKey]); + + if (key[0] === '*') { + value = base64urlencode( + tlvstore.blockEncrypt( + tlvstore.containerToTlvRecords(value), u_k, tlvstore.BLOCK_ENCRYPTION_SCHEME.AES_GCM_12_16 + ) + ); + } + else if (key[0] === '^') { + value = base64urlencode(value); + } + + if (typeof u_attr === 'object') { + u_attr[key] = value; + } + + return cacheValue.last; + }; + cacheValue.last = false; + + var factory = { + notify: function() { + for (var i = this.notify.queue.length; i--;) { + this.notify.queue[i](cacheValue.last); + } + }, + change: function(callback) { + this.notify.queue.push(tryCatch(callback)); + return this; + }, + remove: function() { + return mega.attr.remove(attribute, pub, nonHistoric); + }, + + set: promisify(function(resolve, reject, value) { + var store = {}; + store[storeKey] = encode(value); + + cacheValue(store); + log.debug('storing value', store); + + mega.attr.set(attribute, store, pub, nonHistoric).then(resolve).catch(reject); + }), + + get: promisify(function(resolve, reject, force) { + if (!force && Object(u_attr).hasOwnProperty(key)) { + var value = u_attr[key] || false; + + if (value) { + if (key[0] === '*') { + value = mega.attr.handleLegacyCacheAndDecryption(value); + } + else if (key[0] === '^') { + value = base64urldecode(value); + } + } + + log.debug('cached value', value); + value = value[storeKey]; + + if (value) { + cacheValue.last = decode(value); + return resolve(cacheValue.last); + } + } + + mega.attr.get(u_handle, attribute, pub, nonHistoric) + .then(function(value) { + log.debug('got value', value); + resolve(cacheValue(value)); + }) + .catch(reject); + }) + }; + + factory.notify.queue = []; + + if (uaPacketParserHandler[key]) { + return log.warn('exists'); + } + + uaPacketParserHandler[key] = function() { + if (fminitialized && u_type) { + cacheValue.last = false; + if (typeof u_attr === 'object') { + delete u_attr[key]; + } + factory.get(true).always(factory.notify.bind(factory)); + } + }; + + this.factory[key] = factory; + return Object.freeze(factory); + }; + + /** + * An attribute factory that eases handling folder creation/management, e.g. My chat files + * @param {String} attribute Name of the attribute. + * @param {Boolean|Number} pub + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * @param {Boolean} nonHistoric + * True for non-historic attributes (default: false). Non-historic + * attributes will overwrite the value, and not retain previous + * values on the API server. + * @param {String} storeKey An object key to store the data under + * @param {String|Array} name The folder name, if an array it's [localized, english] + * @param {Function} [decode] Function to post-process the value before returning it + * @param {Function} [encode] Function to pre-process the value before storing it + * @return {Object} + */ + ns.getFolderFactory = function(attribute, pub, nonHistoric, storeKey, name, decode, encode) { + if (!Array.isArray(name)) { + name = [name]; + } + var localeName = name[0] || name[1]; + var englishName = name[1] || localeName; + var log = new MegaLogger('fldFactory[' + englishName + ']', false, logger); + + // listen for attribute changes. + var onchange = function(handle) { + // XXX: caching the value under the global `M` is meant for compatibility + // with legacy synchronous code, any new logic should stick to promises. + M[attribute] = handle; + dbfetch.node([handle]).always(function(res) { + M[attribute] = res[0] || M[attribute]; + if (M[attribute].p === M.RubbishID) { + M[attribute] = false; + } else if (M[attribute].name !== localeName) { + M.rename(M[attribute].h, localeName); + } + if (d) { + log.info("Updating folder...", M[attribute]); + } + }); + }; + var ns = Object.create(null); + var factory = this.factory(attribute, pub, nonHistoric, storeKey, decode, encode).change(onchange); + + // Initialization logic, invoke just once when needed. + ns.init = function() { + factory.get().then(factory.notify.bind(factory)).catch(function() { + // attribute not set, lookup for a legacy folder node + var keys = Object.keys(M.c[M.RootID] || {}); + + for (var i = keys.length; i--;) { + var n = M.getNodeByHandle(keys[i]); + + if (n.name === englishName || n.name === localeName) { + if (d) { + log.info('Found existing folder, migrating to attribute...', n.h, n); + } + factory.set(n.h).dump(attribute); + if (n.name !== localeName) { + M.rename(n.h, localeName); + } + break; + } + } + }); + }; + + // Retrieve folder node, optionally specifying whether if should be created if it does not exists. + ns.get = promisify(function(resolve, reject, create) { + factory.get().then(function(h) { return dbfetch.node([h]); }).always(function(res) { + var node = res[0]; + if (node && node.p !== M.RubbishID) { + return resolve(node); + } + + if (!create) { + return reject(node || ENOENT); + } + + var target = typeof create === 'string' && create || M.RootID; + M.createFolder(target, ns.name).always(function(target) { + if (!M.d[target]) { + if (d) { + log.warn("Failed to create folder...", target, api_strerror(target)); + } + return reject(target); + } + + ns.set(target).always(resolve.bind(null, M.d[target])); + }); + }); + }); + + // Store folder handle. + ns.set = function(handle) { + return handle === Object(M[attribute]).h ? Promise.resolve(EEXIST) : factory.set(handle); + }; + + // Get notified about changes. + ns.change = function(cb) { + factory.change(cb); + return this; + }; + + Object.defineProperty(ns, 'name', { + get: function() { + return Object(M[attribute]).name || localeName || englishName; + } + }); + + return Object.freeze(ns); + }; + + ns.registerConflictHandler( + "lstint", + false, + true, + false, + function(valObj) { + var remoteValues = valObj.remoteValue; + var localValues = valObj.localValue; + // merge and compare any changes from remoteValues[u_h] = {type: timestamp} -> mergedValues + Object.keys(remoteValues).forEach(function(k) { + // not yet added to local values, merge + if (!localValues[k]) { + valObj.mergedValue[k] = remoteValues[k]; + } + else { + // exists in local values + var remoteData = remoteValues[k].split(":"); + var remoteTs = parseInt(remoteData[1]); + + var localData = localValues[k].split(":"); + var localTs = parseInt(localData[1]); + if (localTs > remoteTs) { + // local timestamp is newer then the remote one, use local + valObj.mergedValue[k] = localValues[k]; + } + else if (localTs < remoteTs) { + // remote timestamp is newer, use remote + valObj.mergedValue[k] = remoteValues[k]; + } + } + }); + + // add any entries which exists locally, but not remotely. + Object.keys(localValues).forEach(function(k) { + if (!remoteValues[k]) { + valObj.mergedValue[k] = localValues[k]; + } + }); + + // logger.debug("merged: ", valObj.localValue, valObj.remoteValue, valObj.mergedValue); + + + return true; + }); + + ns.registerConflictHandler( + "alias", + false, + true, + true, + function(valObj) { + valObj.mergedValue = $.extend({}, valObj.localValue, valObj.remoteValue, nicknames._dirty); + + // logger.debug("merged: ", valObj.localValue, valObj.remoteValue, valObj.mergedValue); + + return true; + }); + + if (d) { + ns._inflight = _inflight; + } + + if (is_karma) { + ns._logger = logger; + mega.attr = ns; + } + else { + Object.defineProperty(mega, 'attr', { + value: Object.freeze(ns) + }); + } + ns = undefined; + +})(self); + +var newnodes = []; +var currsn; // current *network* sn (not to be confused with the IndexedDB/memory state) +var fminitialized = false; +var requesti = makeid(10); +var folderlink = false; +var dumpsremaining; +var residualfm; +var workers; // worker pool +var fmdb; // the FM DB engine (cf. mDB.js) +var ufsc; // global ufs-size-cache instance +var mclp; // promise waiting for mc to load + +Object.defineProperties(window, { + // How many nodes are written on a single DB transaction (per table) + FMDB_FLUSH_THRESHOLD: { + value: parseInt(localStorage.fmdbbl) || 9087 + }, + // How many nodes can be awaiting in memory before applying back-pressure. + BACKPRESSURE_FMDB_LIMIT: { + value: parseInt(localStorage.fmdbpl) || 290784 + }, + // How many nodes can be awaiting decryption (per worker) before applying back-pressure. + BACKPRESSURE_WORKER_LIMIT: { + value: 8192 + }, + // Maximum number of bytes that can be retained in internal buffers before applying backpressure. + BACKPRESSURE_HIGHWATERMARK: { + value: 0x2000000 + }, + // Time to wait (in seconds) when applying backpressure + BACKPRESSURE_WAIT_TIME: { + value: 420 / 1000 + } +}); + +/** @property mega.shouldApplyNetworkBackPressure */ +lazy(mega, 'shouldApplyNetworkBackPressure', () => { + 'use strict'; + + if (mega.flags.nobp || parseInt(localStorage.nobp)) { + if (d) { + console.info('Disabling network back-pressure.', mega.flags.nobp); + } + Object.defineProperty(mega, 'nobp', {value: true}); + return () => false; + } + + return (aContentLength) => { + const nobp = BACKPRESSURE_HIGHWATERMARK > aContentLength; + + if (mega.nobp !== false) { + mega.nobp = nobp; + } + + return !nobp; + }; +}); + +/** @property mega.is */ +lazy(mega, 'is', () => { + 'use strict'; + const obj = { + /** + * @name loading + * @memberOf mega.is + */ + get loading() { + return !!(mega.state & window.MEGAFLAG_LOADINGCLOUD); + } + }; + + return Object.freeze(Object.setPrototypeOf(obj, null)); +}); + +// Set up the MegaLogger's root logger +MegaLogger.rootLogger = new MegaLogger( + "", + { + onCritical: function(msg, pkg) { + if (typeof pkg === 'string') { + pkg = pkg.split('[').shift(); + if (pkg) { + msg = '[' + pkg + '] ' + msg; + } + } + srvlog(msg, 0, 1); + }, + isEnabled: !!window.d + }, + false +); + +var loadingInitDialog; + +if (typeof loadingDialog === 'undefined') { + var loadingDialog = Object.create(null); + + // New subject value to specify loading dialog subject. + // Loading dialog with subject will not disappear until it hided with the subject + $.loadingSubject = Object.create(null); + + loadingDialog.nest = 0; + /** + * Show overlay and loading spinner + * @param {String} subject Subject of overlay + * @param {String} label Loading text label with description + * @returns {void} + */ + loadingDialog.show = function(subject, label) { + 'use strict'; + + var $overlay; + var $spinner; + + subject = subject || 'common'; + + if (!this.quiet) { + $overlay = $('.dark-overlay:not(.mobile)', 'body'); + $spinner = $('.loading-spinner:not(.manual-management)', 'body'); + + if (label) { + $overlay.addClass('white'); + $('.status-txt', $spinner).text(label).addClass('loading'); + } + + $overlay.removeClass('hidden'); + $spinner.removeClass('hidden').addClass('active'); + this.active = true; + + // Even there is current on going loading pregress bar, if loading dialog is called show spinner + $('.main-loader', $spinner).removeClass('hidden'); + + // Prevent scrolling for mobile web + if (is_mobile && $overlay.length && $spinner.length) { + document.getElementById('loading-overlay').addEventListener('touchmove', function(e){ + e.preventDefault(); + }, {passive: false}); + + document.getElementById('loading-spinner').addEventListener('touchmove', function(e){ + e.preventDefault(); + }, {passive: false}); + } + } + + $.loadingSubject[subject] = 1; + }; + loadingDialog.hide = function(subject) { + 'use strict'; + + var $overlay; + var $spinner; + + subject = subject || 'common'; + + delete $.loadingSubject[subject]; + + if (!loadingInitDialog.active && (Object.keys($.loadingSubject).length === 0 || subject === 'force')) { + $overlay = $('.dark-overlay:not(.mobile)', 'body'); + $spinner = $('.loading-spinner:not(.manual-management)', 'body'); + + $overlay.removeClass('white').addClass('hidden'); + $spinner.removeClass('active').addClass('hidden'); + $('.status-txt.loading', $spinner).removeClass('loading'); + + this.nest = 0; + this.active = false; + $.loadingSubject = Object.create(null); + } + }; + loadingDialog.pshow = function() { + 'use strict'; + + if (!this.nest++) { + this.show('--dont-mess-with-me'); + } + }; + loadingDialog.phide = function() { + 'use strict'; + + if (--this.nest < 1) { + this.hide('--dont-mess-with-me'); + this.nest = 0; + } + return !this.nest; + }; + loadingDialog.quiet = false; + loadingDialog.showProgress = function(progress) { + + 'use strict'; + + // Do not interrupt init dialog + if (loadingInitDialog && loadingInitDialog.active) { + return; + } + + const $spinner = $('.loading-spinner:not(.manual-management)').removeClass('hidden'); + + // If there is no current loadingDialog, make spinner disapears + if (!loadingDialog.active) { + $('.main-loader', $spinner).addClass('hidden'); + } + + $('.loader-progressbar', $spinner).addClass('active'); + + if (progress) { + $('.loader-percents', $spinner).css('transform', `scaleX(${progress / 100})`); + } + }; + loadingDialog.hideProgress = function() { + + 'use strict'; + + // Do not interrupt init dialog + if (loadingInitDialog && loadingInitDialog.active) { + return; + } + + const $spinner = $('.loading-spinner:not(.manual-management)'); + + $('.loader-progressbar', $spinner).removeClass('active'); + + // awaiting 300 fadeout animation + setTimeout(() => { + + // If there is another active loading dialog do not interrupt it. + if (!loadingDialog.active) { + $spinner.addClass('hidden'); + } + $('.loader-percents', $spinner).css('transform', ''); + }, 301); + }; +} + +if (typeof loadingInitDialog === 'undefined') { + loadingInitDialog = Object.create(null); + loadingInitDialog.progress = false; + loadingInitDialog.active = false; + loadingInitDialog.show = function() { + var $loadingSpinner = $('.loading-spinner'); + + // Folder link load + if (pfid) { + $loadingSpinner.find('.step1').text(l[8584]); // Requesting folder data + $loadingSpinner.find('.step2').text(l[8585]); // Receiving folder data + $loadingSpinner.find('.step3').text(l[8586]); // Decrypting folder data + } + else { + // Regular account load + $loadingSpinner.find('.step1').text(l[8577]); // Requesting account data + $loadingSpinner.find('.step2').text(l[8578]); // Receiving account data + $loadingSpinner.find('.step3').text(l[8579]); // Decrypting + } + + // On mobile, due to reduced screen size we just want a simpler single step with the text 'Loading' + if (is_mobile) { + $loadingSpinner.find('.step1').text(l[1456]); + } + + this.hide(); + $('.light-overlay').removeClass('hidden'); + $('body').addClass('loading'); + $('.loading-spinner:not(.manual-management)').removeClass('hidden').addClass('init active'); + this.active = true; + }; + loadingInitDialog.step1 = function() { + $('.loading-info li.loading').addClass('loaded').removeClass('loading'); + $('.loading-info li.step1').addClass('loading'); + }; + loadingInitDialog.step2 = function(progress) { + 'use strict'; + if (!this.active) { + return; + } + if (this.progress === false) { + + // Don't show step 2 loading if on mobile + if (!is_mobile) { + $('.loading-info li.loading').addClass('loaded').removeClass('loading'); + $('.loading-info li.step2').addClass('loading'); + } + $('.loader-progressbar').addClass('active'); + + // Load performance report + mega.loadReport.ttfb = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + // If the PSA is visible reposition the account loading bar + if (typeof psa !== 'undefined') { + psa.repositionAccountLoadingBar(); + } + } + if (progress) { + $('.loader-percents').css('transform', `scaleX(${progress * 0.5 / 100})`); + } + this.progress = true; + }; + loadingInitDialog.step3 = function(progress, delayStep) { + 'use strict'; + + if (this.progress) { + + // Don't show step 3 loading if on mobile + if (progress === 1 && !is_mobile) { + + $('.loading-info li.loading').addClass('loaded').removeClass('loading'); + $('.loading-info li.step3').addClass('loading'); + } + + if (!this.loader) { + this.loader = document.getElementsByClassName('loader-percents')[0]; + } + + if (typeof this.progress !== 'number') { + this.progress = 0; + } + + // This trying moving backward, nope sorry you cannot do this. + if (this.progress > progress || !this.loader) { + return; + } + + // only update UI with 0.5% step + if (this.progress + 1 <= progress) { + + this.progress = progress | 0; + this.loader.classList.remove('delay-loader'); + this.loader.style.transform = `scaleX(${(this.progress * 0.5 + 50) / 100})`; + + requestAnimationFrame(() => { + + if (this.progress >= 99 || this.progress === false) { + + const elm = document.getElementsByClassName('loader-progressbar')[0]; + + if (elm) { + elm.classList.remove('active'); + elm.style.bottom = 0; + } + } + else if (this.loader && delayStep && this.progress < delayStep) { + + this.loader.classList.add('delay-loader'); + this.loader.style.transform = `scaleX(${(delayStep * 0.5 + 50) / 100})`; + } + }); + } + } + }; + loadingInitDialog.hide = function(subject) { + 'use strict'; + this.loader = null; + this.active = false; + this.progress = false; + $('.light-overlay').addClass('hidden'); + $('body').removeClass('loading'); + if ($.loadingSubject && Object.keys($.loadingSubject).length === 0) { + $('.loading-spinner:not(.manual-management)').addClass('hidden').removeClass('init active'); + } + $('.loading-info li').removeClass('loading loaded'); + $('.loader-progressbar').removeClass('active'); + $('.loader-percents').width('0%').removeAttr('style'); + + // Implicitly hide the former dialog, as per the linked dependency. + window.loadingDialog.hide(subject); + }; +} + +// execute actionpacket +// actionpackets are received and executed strictly in order. receiving and +// execution run concurrently (a connection drop while the execution is +// ongoing invalidates the IndexedDB state and forces a reload!) +var scq = Object.create(null); // hash of [actionpacket, [nodes]] +var scqtail = 0; // next scq index to process +var scqhead = 0; // next scq index to write +var scloadtnodes = false; // if `t` packet requires nodes in memory +var scinflight = false; // don't run more than one execsc() "thread" +var sccount = 0; // number of actionpackets processed at connection loss +var scfetches = Object.create(null); // holds pending nodes to be retrieved from fmdb +var scfsubtree = Object.create(null); // fetch entire subtree as needed by some action-packets +var scwaitnodes = Object.create(null); // supplements scfetches per scqi index +var nodesinflight = Object.create(null); // number of nodes being processed in the worker for scqi +var sc_history = []; // array holding the history of action-packets +var nodes_scqi_order = 0; // variable to count the node arrival order before sending to workers + +// enqueue nodes needed to process packets +function sc_fqueue(handle, packet) { + "use strict"; + + if (handle && (!M.c[handle] || scfsubtree[handle])) { + if (scwaitnodes[packet.scqi]) { + scwaitnodes[packet.scqi]++; + } + else { + scwaitnodes[packet.scqi] = 1; + } + if (!scfetches[handle]) { + scfetches[handle] = []; + } + scfetches[handle].push(packet.scqi); + return 1; + } + return 0; +} + +// queue 't' packet nodes for db retrieval +function sc_fqueuet(scni, packet) { + "use strict"; + + var result = 0; + + if (scloadtnodes) { + var scnodes = scq[scni] && scq[scni][1]; + + if (scnodes && scnodes.length) { + packet = packet || scq[scni][0]; + + if (!packet) { + console.error('sc_fqueuet: invalid packet!'); + } + else { + if (d > 1) { + console.debug('sc_fqueuet', scni, packet, clone(scnodes)); + } + for (var i = scnodes.length; i--;) { + result += sc_fqueue(scnodes[i].p, packet); + } + } + } + } + + return result; +} + +// fetch from db the queued scfetches +async function sc_fetcher() { + "use strict"; + + if ($.scFetcherRunning) { + if (d > 1) { + console.debug('sc_fetcher already running...'); + } + return; + } + + const queue = scfetches; + const handles = Object.keys(queue); + const fsubtree = scfsubtree; + scfetches = Object.create(null); + scfsubtree = Object.create(null); + + if (!handles.length) { + return queueMicrotask(resumesc); + } + $.scFetcherRunning = true; + + if (d) { + console.info('Retrieving from DB nodes required to parse action-packets...', handles); + } + // console.time('sc:fetcher'); + + while (handles.length) { + const bunch = handles.splice(0, 8192); + await dbfetch.geta(bunch).catch(dump); + + // Retrieve all needed subtrees and file versions if any, and then finish the batch processing + const subtree = new Set(); + + for (let i = bunch.length; i--;) { + const n = M.d[bunch[i]]; + + if (n) { + if (n.t) { + if (fsubtree[n.h]) { + // entire subtree + subtree.add(n.h); + } + } + else if (n.tvf) { + // file versions + subtree.add(n.h); + } + } + } + + if (subtree.size) { + await dbfetch.tree([...subtree]).catch(dump); + } + + for (let i = bunch.length; i--;) { + const h = bunch[i]; + for (let p = queue[h].length; p--;) { + const scqi = queue[h][p]; + if (!--scwaitnodes[scqi]) { + delete scwaitnodes[scqi]; + } + } + } + + queueMicrotask(resumesc); + } + // console.timeEnd('sc:fetcher'); + + $.scFetcherRunning = false; + queueMicrotask(sc_fetcher); +} + +/** + * function to start fetching nodes needed for the action packets + * @param {Number} scni id of action packe in scq + */ +function startNodesFetching(scni) { + "use strict"; + if (!--nodesinflight[scni]) { + delete nodesinflight[scni]; + + if (scloadtnodes && scq[scni] && scq[scni][0] && sc_fqueuet(scni)) { + // fetch required nodes from db + sc_fetcher().catch(dump); + } + else { + // resume processing, if appropriate and needed + resumesc(); + } + } +} + +// enqueue parsed actionpacket +function sc_packet(a) { + "use strict"; + + // set scq slot number + a.scqi = scqhead; + + if (d > 1) { + console.debug('sc_packet', loadfm.fromapi, scloadtnodes, a.a, a); + } + + // record history + // if (sc_history) { + // sc_history.push(a.a); + // } + + // check if this packet needs nodes to be present, + // unless `fromapi` where nodes are placed in memory already as received. + if (window.fmdb && (!loadfm.fromapi || !fmdb.memoize)) + { + const inflight = $.len(scfetches); + + scloadtnodes = true; + + switch (a.a) { + case 'd': + scfsubtree[a.n] = 1; + /* falls through */ + case 's': + case 's2': + case 'fa': + case 'u': + sc_fqueue(a.n, a); + /* fall-through */ + case 'ph': + sc_fqueue(a.h, a); // s, s2, ph + break; + case 't': + // If no workers, all scnodes should be ready + // OR the scnodes are ready but not the ap set yet + if (!decWorkerPool.ok || scq[scqhead] && !scq[scqhead][0]) { + sc_fqueuet(scqhead, a); + } + break; + } + + if ($.len(scfetches) !== inflight) { + sc_fetcher(); + } + } + + if ((a.a === 's' || a.a === 's2') && a.k && !self.secureKeyMgr) { + /** + * There are two occasions where `crypto_process_sharekey()` must not be called: + * + * 1. `a.k` is symmetric (AES), `a.u` is set and `a.u != u_handle` + * (because the resulting sharekey would be rubbish) + * + * 2. `a.k` is asymmetric (RSA), `a.u` is set and `a.u != u_handle` + * (because we either get a rubbish sharekey or an RSA exception from asmcrypto) + */ + var prockey = false; + + if (a.k.length > 43) { + if (!a.u || a.u === u_handle) { + // RSA-keyed share command targeted to u_handle: run through worker + prockey = !a.o || a.o !== u_handle; + + if (prockey) { + rsasharekeys[a.n] = true; + } + } + } + else { + prockey = (!a.o || a.o === u_handle); + } + + if (prockey) { + if (decWorkerPool.ok && rsasharekeys[a.n]) { + decWorkerPool.postPacket(a, scqhead++); + return; + } + + var k = crypto_process_sharekey(a.n, a.k); + + if (k !== false) { + a.k = k; + crypto_setsharekey(a.n, k, true); + } + else { + console.warn("Failed to decrypt RSA share key for " + a.n + ": " + a.k); + } + } + } + + if (a.a === 't') { + startNodesFetching(scqhead); + } + + // other packet types do not warrant the worker detour + if (scq[scqhead]) scq[scqhead++][0] = a; + else scq[scqhead++] = [a, []]; + + // resume processing if needed + resumesc(); +} + +// submit nodes from `t` actionpacket to worker +function sc_node(n) { + "use strict"; + + crypto_rsacheck(n); + + if (!decWorkerPool.ok) { + crypto_decryptnode(n); + if (scq[scqhead]) scq[scqhead][1].push(n); + else scq[scqhead] = [null, [n]]; + // sc_packet() call will follow + return; + } + + if (nodesinflight[scqhead]) { + nodesinflight[scqhead]++; + } + else { + nodesinflight[scqhead] = 2; + nodes_scqi_order = 0; // reset the order var + } + + n.scni = scqhead; // set scq slot number (sc_packet() call will follow) + n.arrivalOrder = nodes_scqi_order++; // storing arrival order + decWorkerPool.postNode(n, scqhead % decWorkerPool.length); +} + +// inter-actionpacket state, gets reset in getsc() +var scsharesuiupd; +var scpubliclinksuiupd; +var scContactsSharesUIUpdate; +var loadavatars = []; +var scinshare = Object.create(null); +var sckeyrequest = Object.create(null); + +// sc packet parser +var scparser = Object.create(null); +scparser.$common = Object.create(null); +scparser.$helper = Object.create(null); +scparser[requesti] = Object.create(null); + +/** + * Add a new sc parser handler + * @param {String} type The packet type, s2, la, t, etc + * @param {Object|Function|String} handler The handler descriptor + * If handler is a function, it is meant to parse packets not triggered locally, otherwise + * must be an object with either an 'r' (triggered remotely), 'l' (triggered locally), or 'b'oth. + */ +scparser.$add = function(type, handler) { + if (typeof handler === 'function') { + handler = {r: handler}; + } + if (handler.b) { + scparser.$common[type] = handler.b; + } + if (handler.r) { + scparser[type] = handler.r; + } + if (handler.l) { + scparser[requesti][type] = handler.l; + } +}; + +scparser.$helper.c = function(a) { + // contact notification + process_u(a.u); + + scparser.$notify(a); + + if (megaChatIsReady) { + $.each(a.u, function(k, v) { + if (v.c !== 0) { + // load all keys. + crypt.getPubRSA(v.u); + crypt.getPubCu25519(v.u); + crypt.getPubEd25519(v.u); + } + megaChat[v.c === 0 || (v.c === 2 && v.c !== u_handle) ? "processRemovedUser" : "processNewUser"](v.u); + }); + } +}; + +scparser.$add('c', { + r: function(a) { + scparser.$helper.c(a); + + // contact is deleted on remote computer, remove contact from contacts left panel + if (fminitialized && a.u[0].c === 0) { + + $.each(a.u, function(k, v) { + var userHandle = v.u; + + // hide the context menu if it is currently visible and this contact was removed. + if ($.selected && ($.selected[0] === userHandle)) { + + // was selected + if (selectionManager) { + selectionManager.clear_selection(); + } + $.selected = []; + + if ($('.dropdown.body.files-menu').is(":visible")) { + $.hideContextMenu(); + } + } + }); + } + }, + l: function(a) { + scparser.$helper.c(a); + } +}); + +scparser.$add('s', { + r: function(a) { + if (folderlink) { + return; + } + + var n, i; + var prockey = false; + + if (a.o === u_handle) { + // if access right are undefined, then share is deleted + if (typeof a.r === 'undefined') { + M.delNodeShare(a.n, a.u, a.okd); + if (!folderlink && a.u !== 'EXP' && fminitialized) { + if (a.ou !== u_handle) { + notify.notifyFromActionPacket({ + a: 'dshare', + n: a.n, + u: a.o, + orig: a.ou, + rece: a.u + }); + } + } + } + else { + var handle = a.n; + var shares = Object(M.d[handle]).shares || {}; + + if (self.secureKeyMgr) { + + if (a.u) { + M.nodeShare(handle, {h: a.n, r: a.r, u: a.u, ts: a.ts}); + } + else { + if (d) { + console.debug(`Got share action-packet for pending contact: ${a.n}*${a.p}`, [a]); + } + console.assert(a.a === 's2', `INVALID SHARE, missing user-handle for ${a.n}`, a); + } + } + else if (a.u in shares || a.ha === crypto_handleauth(a.n)) { + + // I updated or created my share + var k = decrypt_key(u_k_aes, base64_to_a32(a.ok)); + + if (k) { + crypto_setsharekey(handle, k); + + if (!a.u) { + // this must be a pending share + if (a.a === 's2') { + // store ownerkey + if (fmdb) { + fmdb.add('ok', {h: handle, d: {k: a.ok, ha: a.ha}}); + } + } + else { + console.error('INVALID SHARE, missing user handle', a); + } + } + else { + M.nodeShare(handle, { + h: a.n, + r: a.r, + u: a.u, + ts: a.ts + }); + } + } + } + } + } + else { + if (a.n && typeof a.k !== 'undefined' && !u_sharekeys[a.n] && !self.secureKeyMgr) { + if (Array.isArray(a.k)) { + // a.k has been processed by the worker + crypto_setsharekey(a.n, a.k); + prockey = true; + } + else if (d) { + // XXX: misdirected actionpackets? + console.warn('Got share action-packet with invalid key, wait for it.', a.n, a.k, [a]); + } + } + + if (a.u === 'EXP') { + var exportLink = new mega.Share.ExportLink({'nodesToProcess': [a.h]}); + exportLink.getExportLink(); + } + + if ('o' in a) { + if (!('r' in a)) { + // share deletion + n = M.d[a.n]; + + if (n) { + if (a.u === u_handle) { + // incoming share + if (d) { + console.log('Incoming share ' + a.n + " revoked.", n.su, M.d[n.p]); + } + + if (M.d[n.p]) { + // inner share: leave nodes intact, just remove .r/.su + delete n.r; + delete n.su; + delete n.sk; + delete M.c.shares[a.n]; + mega.keyMgr.deleteShares([a.n]).catch(dump); + + if (M.tree.shares) { + delete M.tree.shares[a.n]; + } + + if (fmdb) { + fmdb.del('s', a.u + '*' + a.n); + } + M.nodeUpdated(n); + } + else { + // toplevel share: delete entire tree + // (the API will have removed all subshares at this point) + M.delNode(a.n); + } + } + else { + if (a.o === u_handle) { + M.delNodeShare(a.n, a.u); + } + } + } + + if (!folderlink && a.u !== 'EXP' && fminitialized) { + if (a.ou !== u_handle) { + notify.notifyFromActionPacket({ + a: 'dshare', + n: a.n, + u: a.o, + orig: a.ou, + rece: a.u + }); + } + } + } + else { + if (d) { + console.log('Inbound share, preparing for receiving its nodes'); + } + + // if the parent node already exists, all we do is setting .r/.su + // we can skip the subsequent tree; we already have the nodes + if (n = M.d[a.n]) { + n.r = a.r; + n.su = a.o; + M.nodeUpdated(n); + + scinshare.skip = true; + } + else { + scinshare.skip = false; + scinshare.h = a.n; + scinshare.r = a.r; + scinshare.sk = a.k; + scinshare.su = a.o; + + if (!folderlink && fminitialized) { + notify.notifyFromActionPacket({ + a: 'share', + n: a.n, + u: a.o + }); + } + } + } + } + } + + if (prockey) { + var nodes = M.getNodesSync(a.n, true); + + for (i = nodes.length; i--;) { + if (n = M.d[nodes[i]]) { + if (typeof n.k === 'string') { + crypto_decryptnode(n); + newnodes.push(M.d[n.h]); + } + } + } + } + + if (fminitialized) { + onIdle(sharedUInode.bind(null, a.n)); + } + scsharesuiupd = true; + scContactsSharesUIUpdate = a.o ? a.o : false; + }, + l: function(a) { + // share modification + // (used during share dialog removal of contact from share list) + // is this a full share delete? + if (a.r === undefined) { + // fill DDL with removed contact + if (a.u && M.u[a.u] && M.u[a.u].m && !is_mobile) { + var email = M.u[a.u].m; + var contactName = M.getNameByHandle(a.u); + + addToMultiInputDropDownList('.share-multiple-input', [{id: email, name: contactName}]); + addToMultiInputDropDownList('.add-contact-multiple-input', [{id: email, name: contactName}]); + } + } + + if (a.okd) { + M.delNodeShare(a.n, a.u, a.okd); + } + + if (fminitialized) { + // a full share contains .h param + onIdle(sharedUInode.bind(null, a.h)); + } + scsharesuiupd = true; + } +}); + +scparser.$add('s2', { + r: function(a) { + // 's2' still requires the logic for 's' + this.s(a); + + processPS([a]); + }, + l: function(a) { + // 's2' still requires the logic for 's' + this.s(a); + + // store ownerkey + if (fmdb && !self.secureKeyMgr) { + fmdb.add('ok', {h: a.n, d: {k: a.ok, ha: a.ha}}); + } + processPS([a]); + } +}); + +scparser.$add('t', function(a, scnodes) { + // node tree + // the nodes have been pre-parsed and stored in scnodes + if (scinshare.skip) { + // FIXME: do we still need to notify anything here? + scinshare.skip = false; + return; + } + + let i; + const ufsc = new UFSSizeCache(); + let rootNode = scnodes.length && scnodes[0] || false; + + // is this tree a new inshare with root scinshare.h? set share-relevant + // attributes in its root node. + if (scinshare.h) { + for (i = scnodes.length; i--;) { + if (scnodes[i].h === scinshare.h) { + scnodes[i].su = scinshare.su; + scnodes[i].r = scinshare.r; + scnodes[i].sk = scinshare.sk; + rootNode = scnodes[i]; + + if (M.d[rootNode.h]) { + // save r/su/sk, we'll break next... + M.addNode(rootNode); + } + } + else if (M.d[scnodes[i].h]) { + ufsc.feednode(scnodes[i]); + delete scnodes[i]; + } + } + scinshare.h = false; + } + if (M.d[rootNode.h]) { + // skip repetitive notification of (share) nodes + if (d) { + console.debug('skipping repetitive notification of (share) nodes'); + } + return; + } + + // notification logic + if (fminitialized && !pfid && a.ou && a.ou !== u_handle + && rootNode && rootNode.p && !rootNode.su) { + + const targetid = rootNode.p; + const pnodes = []; + + for (i = 0; i < scnodes.length; i++) { + if (scnodes[i] && scnodes[i].p === targetid) { + pnodes.push({ + h: scnodes[i].h, + t: scnodes[i].t + }); + } + } + + notify.notifyFromActionPacket({ + a: 'put', + n: targetid, + u: a.ou, + f: pnodes + }); + } + + const mns = $.moveNodeShares; + for (i = 0; i < scnodes.length; i++) { + if (scnodes[i]) { + delete scnodes[i].i; + delete scnodes[i].scni; + delete scnodes[i].arrivalOrder; + + M.addNode(scnodes[i]); + ufsc.feednode(scnodes[i]); + + if (mns) { + const {h} = scnodes[i]; + const share = mns[h]; + + if (share) { + + // eslint-disable-next-line guard-for-in + for (const su in share) { + M.nodeShare(h, share[su], true); + + if (su === 'EXP') { + scpubliclinksuiupd = true; + } + else { + scsharesuiupd = true; + } + } + + delete mns[h]; + } + } + } + } + + ufsc.save(rootNode); + + if (d > 1) { + // f2 if set must be empty since the nodes must have been processed through workers. + console.assert(!a.t || !a.t.f2 || !a.t.f2.length, 'Check this...'); + } + + if (fminitialized && !is_mobile) { + // update versioning info. + i = scnodes.length > 1 && Object(scnodes[1]).h || rootNode.h; + if (i) { + // TODO: ensure this is backward compatible... + fileversioning.updateFileVersioningDialog(i); + } + } + + if (fminitialized) { + M.storageQuotaCache = null; + } +}); + +scparser.$add('opc', { + b: function(a) { + // outgoing pending contact + processOPC([a]); + + if (fminitialized && M.chat && megaChatIsReady + && megaChat.routingSection === "contacts" + && megaChat.routingSubSection === "sent") { + + mBroadcaster.sendMessage('fmViewUpdate:opc'); + } + } +}); + +scparser.$add('ipc', { + b: function(a) { + // incoming pending contact + processIPC([a]); + + if (fminitialized && megaChatIsReady) { + mBroadcaster.sendMessage('fmViewUpdate:ipc'); + } + + notify.notifyFromActionPacket(a); + } +}); + +scparser.$add('ph', { + r: function(a) { + // exported link + processPH([a]); + + // not applicable - don't return anything, or it will show a blank notification + if (typeof a.up !== 'undefined' && typeof a.down !== 'undefined') { + notify.notifyFromActionPacket(a); + } + scpubliclinksuiupd = true; + }, + l: function(a) { + // exported link + processPH([a]); + + scpubliclinksuiupd = true; + } +}); + +scparser.$add('upci', { + b: function(a) { + // update to incoming pending contact request + processUPCI([a]); + } +}); + +scparser.$add('upco', { + b: function(a) { + // update to outgoing pending contact request + processUPCO([a]); + + // if the status is accepted ('2'), then this will be followed + // by a contact packet and we do not need to notify + if (a.s != 2) { + notify.notifyFromActionPacket(a); + } + } +}); + +scparser.$add('puh', { + b: function(a) { + "use strict"; + mega.megadrop.pufProcessPUH([a]); + } +}); + +scparser.$add('pup', { + b: function(a) { + "use strict"; + mega.megadrop.pupProcessPUP([a]); + } +}); + +scparser.$add('se', { + b: function(a) { + processEmailChangeActionPacket(a); + } +}); + +scparser.$add('pk', { + b: function() { + 'use strict'; + mega.keyMgr.fetchPendingInShareKeys().catch(dump); + } +}); + +scparser.$add('ua', { + r: function(a) { + 'use strict'; + + if (Array.isArray(a.ua)) { + var attrs = a.ua; + var actionPacketUserId = a.u; + + for (var j = 0; j < attrs.length; j++) { + var attributeName = attrs[j]; + mega.attr.uaPacketParser(attributeName, actionPacketUserId, false, a.v && a.v[j]); + } + + // in case of business master + // first, am i a master? + if (u_attr && u_attr.b && u_attr.b.m) { + // then, do i have this user as sub-user? + if ((M.suba && M.suba[actionPacketUserId]) || u_attr.b.bu === actionPacketUserId) { + M.require('businessAcc_js', 'businessAccUI_js').done( + function () { + var business = new BusinessAccount(); + business.updateSubUserInfo(actionPacketUserId, attrs); + } + ); + } + } + } + }, + l: function(a) { + 'use strict'; + + if (Array.isArray(a.ua)) { + var attrs = a.ua; + var actionPacketUserId = a.u; + + for (var j = 0; j < attrs.length; j++) { + var version = a.v && a.v[j]; + var attributeName = attrs[j]; + + // fill version if missing + if (version && !mega.attr._versions[actionPacketUserId + "_" + attributeName]) { + mega.attr._versions[actionPacketUserId + "_" + attributeName] = version; + } + + // handle avatar related action packets (e.g. avatar modified) + if (attributeName === '+a') { + loadavatars.push(actionPacketUserId); + } + else if (attributeName === 'firstname' || attributeName === 'lastname') { + // handle firstname/lastname attributes + mega.attr.uaPacketParser(attributeName, actionPacketUserId, true, version); + } + } + // in case of business master + // first, am i a master? + if (u_attr && u_attr.b && u_attr.b.m) { + // then, do i have this user as sub-user? + if ((M.suba && M.suba[actionPacketUserId]) || u_attr.b.bu === actionPacketUserId) { + M.require('businessAcc_js', 'businessAccUI_js').done( + function () { + var business = new BusinessAccount(); + business.updateSubUserInfo(actionPacketUserId, attrs); + } + ); + } + } + } + } +}); + +scparser.$add('sd', { + b: function() { + "use strict"; + + if (fminitialized && page === 'fm/account/security') { + // need to wait until session history is refreshed. + setTimeout(function() { + accountUI.security.session.update(true); + }, 3000); + } + } +}); + +scparser.$add('e', function(a) { + // CMS update + var str = hex2bin(a.c || ""); + if (str.substr(0, 5) === ".cms.") { + var cmsType = str.split(".")[2]; + var cmsId = str.substr(6 + cmsType.length).split("."); + CMS.reRender(cmsType, cmsId); + } +}); + +scparser.$add('fa', function(a) { + // file attribute change/addition + var n = M.d[a.n]; + if (n) { + n.fa = a.fa; + M.nodeUpdated(n); + + mBroadcaster.sendMessage('fa:ready', a.n, a.fa); + } +}); + +scparser.$add('k', function(a) { + // key request + if (a.sr) { + crypto_procsr(a.sr); + } + if (a.cr) { + crypto_proccr(a.cr); + } + else if (!pfid && a.n) { + if (!sckeyrequest[a.h]) { + sckeyrequest[a.h] = []; + } + sckeyrequest[a.h].push(...a.n); + } + + scsharesuiupd = true; +}); + +scparser.$add('u', function(a) { + // update node attributes + var n = M.d[a.n]; + if (n) { + var oldattr; + var oldname = n.name; + var oldfav = n.fav; + var oldlbl = n.lbl; + + // key update - no longer supported + // API sends keys only for backwards compatibility + // if (a.k) n.k = a.k; + + // attribute update - replaces all existing attributes! + if (a.at) { + oldattr = crypto_clearattr(n); + oldattr.u = n.u; + oldattr.ts = n.ts; + n.a = a.at; + } + + // owner update + if (a.u) { + n.u = a.u; + } + + // timestamp update + if (a.ts) { + n.ts = a.ts; + } + + // try to decrypt new attributes + crypto_decryptnode(n); + + // we got a new attribute string, but it didn't pass muster? + // revert to previous state (effectively ignoring the SC command) + if (a.at && n.a) { + if (d) { + console.warn("Ignored bad attribute update for node " + a.n); + } + crypto_restoreattr(n, oldattr); + delete n.a; + } + else { + // success - check what changed and redraw + if (M.scAckQueue[a.i]) { + if (fminitialized && mega.megadrop.pufs[n.h] && n.name !== mega.megadrop.pufs[n.h].fn) { + mega.megadrop.pupUpdate(n.h, 'msg', n.name); + } + + // Triggered locally, being DOM already updated. + if (d) { + console.log('scAckQueue - triggered locally.', a.i); + } + delete M.scAckQueue[a.i]; + } + else if (a.at) { + if (fminitialized) { + if (n.name !== oldname) { + M.onRenameUIUpdate(n.h, n.name); + } + if (n.fav !== oldfav) { + M.favouriteDomUpdate(n, n.fav); + } + if (n.lbl !== oldlbl) { + M.labelDomUpdate(n.h, n.lbl); + } + } + } + + // save modified node + M.nodeUpdated(n); + } + } +}); + +scparser.$add('d', function(a) { + var fileDeletion = (M.d[a.n] && !M.d[a.n].t); + var topVersion = null; + if (fileDeletion) { + topVersion = fileversioning.getTopNodeSync(a.n); + } + + // This is node move + if (a.m) { + if (d) { + console.time(`sc:d.${a.n}`); + } + $.moveNodeShares = $.moveNodeShares || Object.create(null); + (function _checkMoveNodeShare(h) { + const n = M.d[h]; + if (n) { + if (n.shares) { + $.moveNodeShares[h] = n.shares; + } + if (n.t && M.c[h]) { + Object.keys(M.c[h]).forEach(_checkMoveNodeShare); + } + } + })(a.n); + if (d) { + console.timeEnd(`sc:d.${a.n}`); + } + } + + // node deletion + M.delNode(a.n); + + // was selected, now clear the selected array. + if ($.selected && ($.selected[0] === a.n)) { + $.selected = []; + } + if (!pfid) { + scparser.$notify(a); + } + if (!is_mobile) { + if (fileDeletion && !a.v) {// this is a deletion of file. + if (M.d[topVersion]) { + fileversioning.updateFileVersioningDialog(topVersion); + } + else { + fileversioning.closeFileVersioningDialog(a.n); + } + } + } + + // Remove all upload in queue that target deleted node + if (fminitialized && ul_queue.length > 0) { + ulmanager.ulClearTargetDeleted(a.n); + } + + if (!a.m && fminitialized && !pfid) { + M.storageQuotaCache = null; + delay('checkLeftStorageBlock', () => M.checkLeftStorageBlock()); + } +}); + +scparser.$add('la', function() { + + 'use strict'; + + // last seen/acknowledged notification sn + notify.markAllNotificationsAsSeen(true); + +}); + +scparser.$add('usc', function() { + // user state cleared - mark local DB as invalid + fm_forcerefresh(); +}); + +// Payment received +scparser.$add('psts', function(a) { + + if (!pfid && u_type) { + M.checkStorageQuota(2000); + } + pro.processPaymentReceived(a); + + if (ulmanager.ulOverStorageQuota) { + eventlog(99701); + onIdle(function() { + ulmanager.ulResumeOverStorageQuotaState(); + }); + } + + onIdle(function() { + dlmanager._onOverQuotaAttemptRetry(); + }); + + onIdle(function() { + watchdog.notify('psts', (a.r === 's' && a.p) | 0); + }); + + // If user is on FM, update account status with this packet. + if (fminitialized) { + onIdle(function() { + if (page.indexOf('fm/account') === 0) { + accountUI(); + } + else { + M.accountData(); + } + }); + + M.storageQuotaCache = null; + } +}); + +// Payment reminder +scparser.$add('pses', function(a) { + 'use strict'; + notify.notifyFromActionPacket(a); +}); + +// Payment card status +scparser.$add('cce', () => { + 'use strict'; + // assuming that this AP will come only to PRO/Business accounts. + if (fminitialized) { + delay( + 'cceAP', + () => { + M.req({ a: 'uq', pro: 1 }).then((res) => { + if (typeof res === 'object') { + M.showPaymentCardBanner(res.cce); + if (M.account && res.cce) { + M.account.cce = res.cce; + } + } + }); + }, + 2000); + } +}); + +scparser.mcpc = scparser.mcc = function (a) { + // MEGAchat + if (megaChatIsReady) { + megaChat._queuedMccPackets.push(a); + } + else if (Array.isArray(loadfm.chatmcf)) { + // Merge if exists. + // This can happen in case some data came from fmdb, but there were still queued ap's (mcpc for + // added/removed participants). If this doesn't merge the chatmcf entry, this would end up removing the + // 'ck', since mcpc doesn't contain 'ck' properties and the chat would render useless (no key). + var i = loadfm.chatmcf.length; + while (i--) { + var entry = loadfm.chatmcf[i]; + if (entry.id === a.id) { + delete a.a; + Object.assign(entry, a); + a = entry; + break; + } + } + if (i < 0) { + loadfm.chatmcf.push(a); + } + } + else { + console.error('unable to parse mcc packet'); + const { master, slaves } = mBroadcaster.crossTab; + eventlog( + 99779, + JSON.stringify([ + 1, + buildVersion && buildVersion.website || 'dev', + sessionStorage.updateRequiredBy | 0, + loadfm.chatmcf === null ? 'null' : typeof loadfm.chatmcf, + u_type | 0, + (!!master) | 0, + Object(slaves).length | 0 + ]) + ); + } + + if (fmdb) { + delete a.a; + fmdb.add('mcf', {id: a.id, d: a}); + } +}; + +// MEGAchat archive/unarchive +scparser.mcfc = scparser.mcfpc = function(a) { + 'use strict'; + + if (window.megaChatIsReady) { + var room = megaChat.getChatById(a.id); + if (room) { + return room.updateFlags(a.f, true); + } + } + + if (!loadfm.chatmcfc) { + loadfm.chatmcfc = {}; + } + loadfm.chatmcfc[a.id] = a.f; +}; + + +scparser.$add('_sn', function(a) { + // sn update? + if (d) { + console.log("New SN: " + a.sn); + console.assert(a.sn === window.currsn); + } + delay('sc.set-sn', () => { + if (window.fmdb) { + const {fmdb} = window; + if (d) { + console.assert(fmdb.db || fmdb.crashed, 'Invalid FMDB State..'); + } + + if (fmdb.db) { + setsn(currsn); + } + } + }, 2789); + + // rewrite accumulated RSA keys to AES to save CPU & bandwidth & space + crypto_node_rsa2aes(); + + // rewrite accumulated RSA keys to AES to save CPU & bandwidth & space + crypto_share_rsa2aes(); + + // reset state + scinshare = Object.create(null); + + if (megaChatIsReady) { + megaChat.onSnActionPacketReceived(); + } +}); + +scparser.$add('_fm', function() { + // completed initial processing, enable UI + crypto_fixmissingkeys(missingkeys); + delay('reqmissingkeys', crypto_reqmissingkeys, 4e3); + loadfm_done(); +}); + +// sub-user status change in business account +scparser.$add('ssc', process_businessAccountSubUsers_SC); + +// business account change which requires reload (such as payment against expired account) +scparser.$add('ub', function() { + "use strict"; + fm_fullreload(null, 'ub-business'); +}); + +// Pro Flexi account change which requires reload (such as payment against expired account) +scparser.$add('upf', () => { + "use strict"; + fm_fullreload(null, 'upf-proflexi'); +}); + +// Sets handlers +scparser.$add('asp', (data) => { + 'use strict'; + mega.sets.parseAsp(data); +}); +scparser.$add('asr',(data) => { + 'use strict'; + mega.sets.parseAsr(data); +}); +scparser.$add('aep', (data) => { + 'use strict'; + mega.sets.parseAep(data); +}); +scparser.$add('aer', (data) => { + 'use strict'; + mega.sets.parseAer(data); +}); + +scparser.$notify = function(a) { + // only show a notification if we did not trigger the action ourselves + if (!pfid && u_attr && a.ou !== u_attr.u) { + notify.notifyFromActionPacket(a); + } +}; + +scparser.$call = function(a, scnodes) { + + try { + if (scparser.$common[a.a]) { + // no matter who triggered it + scparser.$common[a.a](a); + } + else if (scparser[a.i]) { + // triggered locally + if (scparser[a.i][a.a]) { + scparser[a.i][a.a](a); + } + } + else if (scparser[a.a]) { + // triggered remotely or cached. + scparser[a.a](a, scnodes); + } + else if (d) { + console.debug('Ignoring unsupported SC command ' + a.a, a); + } + } + catch (ex) { + console.error('scparser', ex); + + onIdle(function() { + throw ex; + }); + } +}; + + +scparser.$finalize = function() { + // scq ran empty - nothing to do for now + if (d) { + console.log(sccount + " SC command(s) processed."); + } + + // perform post-execution UI work + if (fminitialized) { + var promise = MegaPromise.resolve(); + + if (newnodes.length) { + promise = M.updFileManagerUI(); + } + + promise.always(function() { + + if (loadavatars.length) { + M.avatars(loadavatars); + loadavatars = []; + } + + delay('thumbnails', fm_thumbnails, 3200); + + if ($.dialog === 'properties') { + delay($.dialog, propertiesDialog.bind(this, 3)); + } + + if (scsharesuiupd) { + onIdle(function() { + M.buildtree({h: 'shares'}, M.buildtree.FORCE_REBUILD); + M.buildtree({h: 'out-shares'}, M.buildtree.FORCE_REBUILD); + + if (M.currentrootid === 'shares' || M.currentrootid === 'out-shares') { + M.openFolder(M.currentdirid, true); + } + else if (megaChatIsReady && M.chat && megaChat.routingSection === "contacts") { + let id = String(M.currentdirid).substr(14); + mBroadcaster.sendMessage("fmViewUpdate:" + id); + } + + if ($.dialog === 'share') { + // Re-render the content of access list in share dialog + renderShareDialogAccessList(); + } + }); + + scsharesuiupd = false; + } + + if (scpubliclinksuiupd) { + onIdle(function() { + M.buildtree({h: 'public-links'}, M.buildtree.FORCE_REBUILD); + + if (M.currentrootid === 'public-links') { + M.openFolder(M.currentdirid, true); + } + }); + + scpubliclinksuiupd = false; + } + + if (!pfid && $.len(sckeyrequest)) { + const keyof = (h) => crypto_keyok(M.d[h]); + if (d) { + console.debug('Supplying requested keys...', sckeyrequest); + } + // eslint-disable-next-line guard-for-in + for (const h in sckeyrequest) { + const n = sckeyrequest[h].filter(keyof); + const cr = crypto_makecr(n, [h], true); + + if (cr[2].length) { + api_req({a: 'k', cr, i: requesti}); + } + } + + sckeyrequest = Object.create(null); + } + + if ("chat/contacts/" + scContactsSharesUIUpdate === M.currentdirid) { + onIdle(function(handle) { + mBroadcaster.sendMessage('fmViewUpdate:' + handle); + }.bind(this, scContactsSharesUIUpdate)); + + scContactsSharesUIUpdate = false; + } + + sccount = 0; + scinflight = false; + queueMicrotask(resumesc); + }); + } + else { + sccount = 0; + scinflight = false; + } +}; + +// if no execsc() thread is running, check if one should be, and start it if so. +function resumesc() { + "use strict"; + + if (!scinflight) { + if (scq[scqtail] && scq[scqtail][0] && !scwaitnodes[scqtail] && !nodesinflight[scqtail]) { + scinflight = true; + execsc(); + } + } +} + +// execute actionpackets from scq[scqtail] onwards +function execsc() { + "use strict"; + + var tick = Date.now(); + var tickcount = 0; + + do { + if (!scq[scqtail] || !scq[scqtail][0] || scwaitnodes[scqtail] + || (scq[scqtail][0].a === 't' && nodesinflight[scqtail])) { + + return scparser.$finalize(); + } + + sccount++; + + var a = scq[scqtail][0]; + var scnodes = scq[scqtail][1]; + delete scq[scqtail++]; + delete a.scqi; + + var idtag = a.i; + if (a.i !== requesti && M.scAckQueue[a.i] === requesti) { + // An API request triggered locally wanting to get notified when the associated packet is processed. + delete M.scAckQueue[a.i]; + a.i = requesti; + } + + if (d) { + console.info('Received SC command "' + a.a + '"' + (a.i === requesti ? ' (triggered locally)' : ''), a); + } + + // process action-packet + scparser.$call(a, scnodes); + + // If there is any listener waiting for acknowledge from API, dispatch it. + var cid = M.scAckQueue[a.i] ? a.i : a.a + '.' + a.i; + + if (typeof M.scAckQueue[cid] === 'function') { + if (d) { + console.debug('execsc: dispatching ' + a.i); + } + onIdle(M.scAckQueue[cid].bind(null, a, scnodes)); + delete M.scAckQueue[cid]; + } + + if (a.a === 's' || a.a === 's2') { + mBroadcaster.sendMessage('share-packet.' + idtag, a); + } + + tickcount++; + } while (Date.now()-tick < 200); + + if (d) console.log("Processed " + tickcount + " SC commands in the past 200 ms"); + onIdle(execsc); +} + +// a node was updated significantly: write to DB and redraw +function fm_updated(n) { + "use strict"; + + M.nodeUpdated(n); + + if (fminitialized) { + removeUInode(n.h); + newnodes.push(n); + if (M.megaRender) { + M.megaRender.revokeDOMNode(n.h, true); + } + delay('ui:fm.updated', () => M.updFileManagerUI()); + } +} + +function initworkerpool() { + "use strict"; + + // Allow all 0 keys to be used (for those users that used a bad client that want to retrieve their files) + const allowNullKeys = localStorage.getItem('allownullkeys') ? 1 : undefined; + if (allowNullKeys) { + self.allowNullKeys = allowNullKeys; + } + const {secureKeyMgr} = self; + if (secureKeyMgr && d) { + console.info('Secure Keys Management.', mega.keyMgr.generation); + } + + const workerStateData = { + d, + u_k, + u_privk, + u_handle, + secureKeyMgr, + allowNullKeys, + usk: window.u_attr && u_attr['*~usk'] + }; + + // re/initialize workers (with state for a user account fetch, if applies) + decWorkerPool.init(worker_procmsg, 8, !pfid && workerStateData); + + if (d) { + console.debug('initworkerpool', decWorkerPool); + } +} + +// queue a DB invalidation-plus-reload request to the FMDB subsystem +// if it isn't up, reload directly +// the server-side treecache is wiped (otherwise, we could run into +// an endless loop) +function fm_forcerefresh(light) { + "use strict"; + + if (light !== true) { + localStorage.force = 1; + } + + if (fmdb) { + // stop further SC processing + window.execsc = nop; + + // bring DB to a defined state + fmdb.invalidate().finally(() => location.reload()); + } + else { + location.reload(); + } +} + +// triggers a full reload including wiping the remote treecache +// (e.g. because the treecache is damaged or too old) +function fm_fullreload(q, logMsg) { + "use strict"; + + if (q) { + api_cancel(q); + } + + // FIXME: properly encapsulate ALL client state in an object + // that supports destruction. + // (at the moment, if we wipe the DB and then call loadfm(), + // there will be way too much attribute, key and chat stuff already + // churning away - we simply cannot just delete their databases + // without restarting them. + // until then - it's the sledgehammer method; can't be anything + // more surgical :( + if (logMsg === 'ETOOMANY' && mega.loadReport.mode < 2 && !sessionStorage.lightTreeReload) { + sessionStorage.lightTreeReload = 1; + } + else { + localStorage.force = 1; + delete sessionStorage.lightTreeReload; + } + + // done reload callback + var step = 1; + var done = function() { + if (!--step) { + location.reload(); + } + }; + + // log event if message provided + if (logMsg) { + api_req({a: 'log', e: 99624, m: logMsg}, {callback: done}); + step++; + } + + if (fmdb) { + // stop further SC processing + window.execsc = nop; + + // bring DB to a defined state + fmdb.invalidate().finally(done); + } + else { + done(); + } +} + +// this receives the ok elements one by one as per the filter rule +// to facilitate the decryption of outbound shares, the API now sends ok before f +function tree_ok0(ok) { + "use strict"; + + if (self.secureKeyMgr) { + if (d > -2) { + console.warn('Secure environment, moving on...', ok); + } + return; + } + + if (fmdb) { + fmdb.add('ok', { h : ok.h, d : ok }); + } + + // bind outbound share root to specific worker, post ok element to that worker + // FIXME: check if nested outbound shares are returned with all shareufskeys! + // if that is not the case, we need to bind all ok handles to the same worker + if (decWorkerPool.ok) { + decWorkerPool.postNode(ok); + } + else if (crypto_handleauthcheck(ok.h, ok.ha)) { + if (d) { + console.log(`Successfully decrypted sharekeys for ${ok.h}`); + } + const key = decrypt_key(u_k_aes, base64_to_a32(ok.k)); + crypto_setsharekey2(ok.h, key); + } + else { + console.error(`handleauthcheck() failed for ${ok.h}`); + } +} + +/** + * Emplace node into M.d and M.c + * + * @param {Object} node The node to add + * @param {Boolean} [noc] Whether adding to M.c should be skipped, only used by fetchchildren! + */ +function emplacenode(node, noc) { + "use strict"; + + if (node.p) { + // we have to add M.c[sharinguserhandle] records explicitly as + // node.p has ceased to be the sharing user handle + if (node.su) { + if (!M.c[node.su]) { + M.c[node.su] = Object.create(null); + } + M.c[node.su][node.h] = node.t + 1; + } + if (!noc) { + if (!M.c[node.p]) { + M.c[node.p] = Object.create(null); + } + M.c[node.p][node.h] = node.t + 1; + } + + if (node.hash) { + if (!M.h[node.hash]) { + M.h[node.hash] = new Set(); + } + M.h[node.hash].add(node.h); + } + } + else if (node.t > 1 && node.t < 5) { + M[['RootID', 'InboxID', 'RubbishID'][node.t - 2]] = node.h; + } + else { + if (d) { + console.error("Received parent-less node of type " + node.t + ": " + node.h); + } + + srvlog2('parent-less', node.t, node.h); + } + + if (!node.h || node.h.length !== 8) { + if (d && !node.h) { + console.error('Invalid node placement.', node); + } + M.d[node.h] = node; + } + else { + M.d[node.h] = Object.setPrototypeOf(node, MegaNode.prototype); + } +} + +// this receives the node objects one by one as per the filter rule +function tree_node(node) { + "use strict"; + + if (pfkey && !M.RootID) { + // set up the workers for folder link decryption + if (decWorkerPool.ok) { + decWorkerPool.signal({ + d, + pfkey, + n_h: node.h, + secureKeyMgr: self.secureKeyMgr, + allowNullKeys: self.allowNullKeys + }); + } + else { + crypto_setsharekey2(node.h, base64_to_a32(pfkey)); + } + + M.RootID = node.h; + } + + crypto_rsacheck(node); + + // RSA share key? need to rewrite, too. + if (node.sk && node.sk.length > 43) { + rsasharekeys[node.h] = true; + } + + // children inherit their parents' worker bindings; unbound inshare roots receive a new binding + // unbound nodes go to a random worker (round-robin assignment) + if (decWorkerPool.ok) { + decWorkerPool.postNode(node); + } + else { + crypto_decryptnode(node); + worker_procmsg({data: node}); + } +} + +// this receives the remainder of the JSON after the filter was applied +function tree_residue(fm, ctx) { + "use strict"; + + // store the residual f response for perusal once all workers signal that they're done + residualfm = fm[0] || false; + + // request an "I am done" confirmation ({}) from all workers + if (decWorkerPool.ok) { + dumpsremaining = decWorkerPool.length; + decWorkerPool.signal({}); + } + else { + dumpsremaining = 1; + worker_procmsg({ data: { done: 1 } }); + } + + // (mandatory steps at the conclusion of a successful split response) + api_ready(this.q); + api_proc(this.q); +} + +// process worker responses (decrypted nodes, processed actionpackets, state dumps...) +function worker_procmsg(ev) { + "use strict"; + + var h; + + if (ev.data.scqi >= 0) { + // enqueue processed actionpacket + if (scq[ev.data.scqi]) scq[ev.data.scqi][0] = ev.data; + else scq[ev.data.scqi] = [ev.data, []]; + + // resume processing, if appropriate and needed + resumesc(); + } + else if (ev.data.h) { + // enqueue or emplace processed node + if (ev.data.t < 2 && !crypto_keyok(ev.data)) { + // report as missing + console.assert(typeof ev.data.k === 'string', `Key-less? node ${ev.data.h}`, ev.data); + tryCatch(() => crypto_reportmissingkey(ev.data))(); + } + + if (ev.data.scni >= 0) { + // enqueue processed node + if (scq[ev.data.scni]) { + scq[ev.data.scni][1][ev.data.arrivalOrder] = ev.data; + } + else { + var initArray = []; + initArray[ev.data.arrivalOrder] = ev.data; + scq[ev.data.scni] = [null, initArray]; + } + + startNodesFetching(ev.data.scni); + } + else { + // maintain special incoming shares index + if (ev.data.su) { + M.c.shares[ev.data.h] = { su : ev.data.su, r : ev.data.r, t: ev.data.h }; + + if (u_sharekeys[ev.data.h]) { + M.c.shares[ev.data.h].sk = u_sharekeys[ev.data.h][0]; + } + } + + if (ufsc.cache && ev.data.p) { + ufsc.feednode(ev.data); + } + + const ok = fmdb && !fmdb.crashed; + const emplace = mega.nobp || !ok || fminitialized || fmdb && fmdb.memoize || M.isInRoot(ev.data, true); + + if (ok) { + fmdb.add('f', { + h : ev.data.h, + p : ev.data.p, + s : ev.data.s >= 0 ? ev.data.s : -ev.data.t, + t : ev.data.t ? 1262304e3 - ev.data.ts : ev.data.ts, + c : ev.data.hash || '', + fa: ev.data.fa || '', + d : ev.data + }); + } + + if (emplace) { + emplacenode(ev.data); + } + } + } + else if (ev.data[0] === 'console') { + if (d) { + var args = ev.data[1]; + args.unshift('[nodedec worker]'); + console.log.apply(console, args); + } + } + else if (ev.data[0] === 'srvlog2') { + srvlog2.apply(null, ev.data[1]); + } + else if (ev.data.done) { + if (d) { + console.log(`Worker ${dumpsremaining} done, ${ev.data.jobs} jobs completed.`); + } + + if (ev.data.sharekeys) { + for (h in ev.data.sharekeys) { + crypto_setsharekey(h, ev.data.sharekeys[h]); + } + } + + if (!--dumpsremaining) { + // store incoming shares + for (h in M.c.shares) { + if (u_sharekeys[h]) M.c.shares[h].sk = a32_to_base64(u_sharekeys[h][0]); + + if (fmdb) { + fmdb.add('s', { o_t : M.c.shares[h].su + '*' + h, + d : M.c.shares[h] }); + } + } + + decWorkerPool.cleanup(); + loadfm.fromapi = true; + dbfetchfm(); + } + } + else { + console.error("Unidentified nodedec worker response:", ev.data); + } +} + +function loadfm(force) { + "use strict"; + assert(!is_chatlink); + + if (force) { + localStorage.force = true; + loadfm.loaded = false; + } + if (loadfm.loaded) { + Soon(loadfm_done.bind(this, -0x800e0fff)); + } + else { + if (is_fm()) { + loadingDialog.hide(); + loadingInitDialog.show(); + loadingInitDialog.step1(); + } + if (!loadfm.loading) { + if (!decWorkerPool.ok) { + initworkerpool(); + } + M.reset(); + + fminitialized = false; + loadfm.loading = true; + + // is this a folder link? or do we have no valid cache for this session? + if (pfid) { + fmdb = false; + fetchfm(false); + } + else if (!u_k_aes) { + console.error('No master key found... please contact support@mega.nz'); + } + else { + const f_table_schema = '&h, p, s, c, t, fa'; + fmdb = FMDB(u_handle, { + // channel 0: transactional by _sn update + f : f_table_schema, // nodes - handle, parent, size (negative size: type), checksum + s : '&o_t', // shares - origin/target; both incoming & outgoing + ok : '&h', // ownerkeys for outgoing shares - handle + mk : '&h', // missing node keys - handle + u : '&u', // users - handle + ph : '&h', // exported links - handle + tree : '&h', // tree folders - handle + suba : '&s_ac', // sub_accounts of master business account + opc : '&p', // outgoing pending contact - id + ipc : '&p', // incoming pending contact - id + ps : '&h_p', // pending share - handle/id + mcf : '&id', // chats - id + ua : '&k', // user attributes - key (maintained by IndexedBKVStorage) + _sn : '&i', // sn - fixed index 1 + puf : '&ph', // public upload folder - handle + pup : '&p', // public upload page - handle + + // channel 1: non-transactional (maintained by IndexedDBKVStorage) + }, {}); + + fmdb.init(fetchfm, localStorage.force); + } + } + } +} + +async function fetchfm(sn) { + "use strict"; + + // we always intially fetch historical actionpactions + // before showing the filemanager + initialscfetch = true; + + // Initialize ufs size cache + ufsc = new UFSSizeCache(); + + // Get the media codecs list ready + mclp = MediaInfoLib.getMediaCodecsList(); + + // worker pending state dump counter + dumpsremaining = 0; + + // residual fm (minus ok/f elements) post-filtration + residualfm = false; + + // erase existing RootID + // reason: tree_node must set up the workers as soon as the first node of a folder + // link arrives, and this is how it knows that it is the first node. + M.RootID = false; + + if (!is_mobile) { + // activate/prefetch attribute cache at this early stage + await attribCache.load(); + } + + if (sn) { + currsn = sn; + return dbfetchfm(); + } + + // no cache requested or available - get from API. + // load tree for active GLOBAL context - either we load a folderlink or the + // user tree, they never coexist, there is no encapsulation/separation of state. + const req = {a: 'f', c: 1, r: 1}; + + // we disallow treecache usage if this is a forced reload + if (!localStorage.force) { + req.ca = 1; + } + else if (mBroadcaster.crossTab.master) { + delete localStorage.force; + } + + api_req(req, { + progress: (pcn) => { + window.loadingInitDialog.step2(parseInt(pcn)); + + if (pcn > 99 && !mega.loadReport.ttlb) { + // Load performance report -- time to last byte + mega.loadReport.ttlb = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + mega.loadReport.ttlb += mega.loadReport.ttfb; + mega.loadReport.ttfm = mega.loadReport.stepTimeStamp; + } + } + }, 4); + + /** @property mega.loadReport.mode */ + Object.defineProperty(mega.loadReport, 'mode', {value: 2, writable: false}); + + if (!folderlink) { + // dbToNet holds the time wasted trying to read local DB, and having found we have to query the server. + mega.loadReport.dbToNet = Date.now() - mega.loadReport.startTime; + mega.loadReport.stepTimeStamp = Date.now(); + } +} + +function dbfetchfm() { + "use strict"; + var tables = { + tree: function(r) { + for (var i = r.length; i--;) { + ufsc.addTreeNode(r[i], true); + } + if (d) { + console.debug('processed %d tree nodes.', r.length); + } + }, + opc: processOPC, + ipc: processIPC, + ps: function(r) { + if (r.length) { + processPS(r, true); + // processPS may invokes nodeShare(), that uses acquire. + return dbfetch.acquire(r.map(n => n.h)); + } + }, + puf: function _(r) { + if (r.length) { + mega.megadrop.pufProcessDb(r); + return dbfetch.geta(r.map(n => n.h)); + } + }, + suba: process_suba, + pup: mega.megadrop.pupProcessDb, + mcf: 1 + }; + var tableProc = function(t) { + return function(r) { + if (tables[t] === 1) { + if (r.length > 0) { + // only set chatmcf is there is anything returned + // if not, this would force the chat to do a 'mcf' call + loadfm.chatmcf = r; + } + else { + loadfm.chatmcf = -1; + } + } + else { + return tables[t](r, true); + } + }; + }; + var checkSettled = function(r) { + for (var i = r.length; i--;) { + if (r[i].status !== 'fulfilled') { + throw new Error(r[i].reason); + } + } + }; + + loadingInitDialog.step2(); + + const isFromAPI = !!loadfm.fromapi; + const loadReport = isFromAPI ? nop : (key) => { + const now = Date.now(); + mega.loadReport[key] = now - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = now; + }; + const finish = () => { + + if (isFromAPI) { + window.loadingInitDialog.step3(1, 20); + setTimeout(loadfm_callback, 420, residualfm); + residualfm = false; + } + else { + getsc(true); + } + }; + + if (!window.fmdb) { + console.assert(isFromAPI); + return onIdle(finish); + } + + if (isFromAPI) { + // Tree nodes are already in memory. + delete tables.tree; + } + + if (d) { + console.time('dbfetchfm'); + } + + Promise.allSettled([fmdb.get('ok'), dbfetch.init()]) + .then((r) => { + checkSettled(r); + process_ok(r[0].value, true); + + loadReport('recvNodes'); + return Promise.allSettled([fmdb.get('mk'), fmdb.get('u'), fmdb.get('s')]); + }) + .then((r) => { + var promises = []; + + checkSettled(r); + crypto_missingkeysfromdb(r[0].value); + mega.loadReport.pn1 = Date.now() - mega.loadReport.stepTimeStamp; + + process_u(r[1].value, true); + loadReport('pn2'); + // @todo deprecate those pn1-pn5 ... + loadReport('pn3'); + + r = r[2].value; + for (var i = r.length; i--;) { + if (r[i].su) { + // this is an inbound share + M.c.shares[r[i].t] = r[i]; + + if (r[i].sk) { + crypto_setsharekey(r[i].t, base64_to_a32(r[i].sk), true); + } + } + else { + // this is an outbound share + promises.push(M.nodeShare(r[i].h, r[i], true)); + } + } + loadReport('pn4'); + + if (promises.length) { + // handle all outbound shares through a single promise. + // if an ENOENT happens, this won't halt the process... + promises = [Promise.allSettled(promises)]; + } + + for (var j = 0, it = Object.keys(tables); j < it.length; ++j) { + var t = it[j]; + promises.push(fmdb.get(t).then(tableProc(t)).catch(dump)); + } + loadReport('pn5'); + + return Promise.allSettled(promises); + }) + .then((r) => { + checkSettled(r); + + if (d) { + console.info('All settled, %d operations completed to load from DB.', r.length); + console.timeEnd('dbfetchfm'); + } + + if (!isFromAPI) { + mega.loadReport.mode = 1; + mega.loadReport.procNodeCount = Object.keys(M.d || {}).length; + loadReport('procNodes'); + } + + if (!mBroadcaster.crossTab.master && window.fmdb) { + // on a secondary tab, prevent writing to DB once we have read its contents + fmdb.crashed = 666; + fmdb.pending = [[]]; + } + console.assert(window.fmdb, 'check what is going on here...'); + }) + .then(finish) + .catch((ex) => { + console.error(ex); + siteLoadError(ex, 'dbfetchfm'); + }); +} + +// returns tree type h is in +// FIXME: make result numeric +function treetype(h) { + "use strict"; + + for (;;) { + if (!M.d[h]) { + return h; + } + + if (h === M.InboxID) { + return 'inbox'; + } + + // root node reached? + if (M.d[h].t > 1) { + return 'cloud'; + } + + // incoming share reached? (does not need to be the outermost one) + if (M.d[h].su) { + return 'shares'; + } + + if ('contacts shares messages opc ipc '.indexOf(M.d[h].p + ' ') >= 0) { + return M.d[h].p; + } + + h = M.d[h].p; + } +} + +// determine whether a node is shared +async function shared(h) { + "use strict"; + + if (!M.d[h]) { + await dbfetch.acquire(h); + } + + let rc = false; + while (h && M.d[h]) { + if (M.d[h].shares) { + rc = h; + break; + } + h = M.d[h].p; + } + return rc; +} + +// returns sharing user (or false if not in an inshare) +function sharer(h) { + "use strict"; + + while (h && M.d[h]) { + if (M.d[h].su) { + return M.d[h].su; + } + + h = M.d[h].p; + } + + return false; +} + +// FIXME: remove alt +function ddtype(ids, toid, alt) { + "use strict"; + + if (folderlink) { + return false; + } + + var r = false, totype = treetype(toid); + + for (var i = ids.length; i--; ) { + var fromid = ids[i]; + + if (fromid === toid || !M.d[fromid]) return false; + + var fromtype = treetype(fromid); + + if (fromtype === 'inbox' || treetype(toid) === 'inbox') { + + return false; + } + + if (totype == 'cloud') { + if (fromtype == 'cloud') { + // within and between own trees, always allow move ... + if (M.isCircular(fromid, toid)) { + // ... except of a folder into itself or a subfolder + return false; + } + + r = 'move'; + } + else if (fromtype == 'shares') { + r = toid === M.RubbishID ? 'copydel' : 'copy'; + } + } + else if (totype == 'contacts') { + if (toid == 'contacts') { + // never allow move to own contacts + return false; + } + + // to a contact, always allow a copy (inbox drop) + r = 'copy'; + } + else if (totype === 'shares' && M.getNodeRights(toid)) { + if (fromtype == 'shares') { + if (sharer(fromid) === sharer(toid)) { + if (M.isCircular(fromid, toid)) { + // prevent moving/copying of a folder into iself or a subfolder + return false; + } + + //r = (M.getNodeRights(fromid) > 1) ? 'move' : 'copy'; //commented out by khaled - fixing Bug #7697 + if (M.getNodeRights(fromid) > 1) { // added by khaled + r = 'move'; + } + else { + return false; // fixing Bug #7697, dont allow drag and drop if permission <2 + } + } + else { + r = 'copy'; + } + } + else if (fromtype == 'cloud') { + // from cloud to a folder with write permission, always copy + r = 'copy'; + } + } + else { + return false; + } + } + + // FIXME: do not simply return the operation allowed for the last processed fromid + return r; +} + +/** + * Share a node with other users. + * + * Recreate target/users list and call appropriate api_setshare function. + * @param {String} nodeId + * Selected node id + * @param {Array} targets + * List of JSON_Object containing user email or user handle and access permission, + * i.e. `{ u: , r: }`. + * @param {Boolean} dontShowShareDialog + * If set to `true`, don't show the share dialogue. + * @returns {doShare.$promise|MegaPromise} + */ +function doShare(nodeId, targets, dontShowShareDialog) { + 'use strict'; + + if (!nodeId || !targets || !targets.length) { + console.error('Invalid parameters for doShare()', nodeId, targets); + return MegaPromise.reject(EARGS); + } + + var masterPromise = new MegaPromise(); + var logger = MegaLogger.getLogger('doShare'); + + /** Settle function for API set share command. */ + var _shareDone = function(result, users) { + + // Loose comparison is important (incoming JSON). + if (result.r && result.r[0] == '0') { + for (var i in result.u) { + if (result.u.hasOwnProperty(i)) { + M.addUser(result.u[i]); + } + } + + for (var k in result.r) { + if (result.r.hasOwnProperty(k)) { + if ((result.r[k] === 0) && users && users[k] && users[k].u) { + var rights = users[k].r; + var user = users[k].u; + + if (user.indexOf('@') >= 0) { + user = M.getUserByEmail(user).u; + } + + // A pending share may not have a corresponding user and should not be added + // A pending share can also be identified by a user who is only a '0' contact + // level (passive) + if (M.u[user] && M.u[user].c) { + M.nodeShare(nodeId, { + h: nodeId, + r: rights, + u: user, + ts: unixtime() + }); + setLastInteractionWith(user, "0:" + unixtime()); + } + else { + var isPendingContact = false; + + if (users[k].m) { + for (var pid in M.opc) { + if (M.opc[pid].m === users[k].m) { + isPendingContact = true; + break; + } + } + } + + if (!isPendingContact) { + logger.warn('Invalid user (%s[%s]): c=%s', + user, + users[k].u, + M.u[user] ? String(M.u[user].c) : 'unknown!', + M.u[user], users[k]); + } + else { + logger.debug('Finished share action with pending contact.', JSON.stringify(users[k])); + } + } + } + } + } + if (dontShowShareDialog !== true) { + $('.mega-dialog.share-dialog').removeClass('hidden'); + } + loadingDialog.hide(); + // Render the outgoing shares page after set the new share node + if (M.currentrootid === 'out-shares') { + M.openFolder(M.currentdirid, true); + } + + masterPromise.resolve(); + } + else { + // $('.mega-dialog.share-dialog').removeClass('hidden'); + if (d) { + console.error('doShare failed.', result); + } + loadingDialog.hide(); + msgDialog('warninga', l[135], l[47], tryCatch(() => JSON.stringify(result))() || result); + masterPromise.reject(result); + } + }; + + // Get complete children directory structure for root node with id === nodeId + /** (this is now done before the share dialog opens) + var childNodesId; + + M.getNodes(nodeId, true) + .then((r) => { + childNodesId = r; + targets.forEach(targetsForeach); + }) + .catch(dump); + */ + + // Create new lists of users, active (with user handle) and non existing (pending) + var targetsForeach = function(value) { + + var email = value.u; + var accessRights = value.r; + + // Search by email only don't use handle cause user can re-register account + crypt.getPubKeyAttribute(email, 'RSA', { + targetEmail: email, + shareAccessRightsLevel: accessRights + }) + .always(function (pubKey, result) { + var sharePromise; + + // parse [api-result, user-data-ctx] + var ctx = result[1]; + result = result[0]; + + if (result.pubk) { + var userHandle = result.u; + + // 'u' is returned user handle, 'r' is access right + var usersWithHandle = []; + + // M.u[].c might be 0 for invisible/removed, or undefined for pending contact + if (M.u[userHandle] && M.u[userHandle].c) { + usersWithHandle.push({ 'r': ctx.shareAccessRightsLevel, 'u': userHandle }); + } + else { + usersWithHandle.push({ + 'r': ctx.shareAccessRightsLevel, + 'u': userHandle, + // this was never correct.. + // 'k': result.pubk, + 'm': ctx.targetEmail + }); + } + + sharePromise = api_setshare(nodeId, usersWithHandle, childNodesId); + sharePromise.done(function _sharePromiseWithHandleDone(result) { + _shareDone(result, usersWithHandle); + }); + masterPromise.linkFailTo(sharePromise); + } + else { + // NOT ok, user doesn't have account yet + var usersWithoutHandle = []; + usersWithoutHandle.push({ 'r': ctx.shareAccessRightsLevel, 'u': ctx.targetEmail }); + sharePromise = api_setshare1({ + node: nodeId, + targets: usersWithoutHandle, + sharenodes: childNodesId + }); + sharePromise.done(function _sharePromiseWithoutHandleDone(result) { + _shareDone(result, ctx.targetEmail); + }); + masterPromise.linkFailTo(sharePromise); + } + }); + }; + + // retrieve snapshot of the share children at the time the dialog was opened + // (any newer ones already have their shareufskey set) + const childNodesId = mega.keyMgr.getShareSnapshot(nodeId); + if (childNodesId) { + targets.forEach(targetsForeach); + } + else { + console.error('Check this out..', nodeId); + masterPromise.reject(EINTERNAL); + } + + return masterPromise; +} + +// moving a foreign node (one that is not owned by u_handle) from an outshare +// to a location not covered by any u_sharekey requires taking ownership +// and re-encrypting its key with u_k. +// moving a tree to a (possibly nested) outshare requires a full set of keys +// to be provided. FIXME: record which keys are known to the API and exclude +// those that are to reduce API traffic. +function processmove(apireq) { + if (d) console.log('processmove', apireq); + + var root = {}; + var tsharepath = M.getShareNodesSync(apireq.t); + var nsharepath = M.getShareNodesSync(apireq.n, root); + var movingnodes = false; + + // is the node to be moved in an outshare (or possibly multiple nested ones)? + if (nsharepath.length && root.handle) { + // yes, it is - are we moving to an outshare? + if (!tsharepath.length) { + // we are not - check for any foreign nodes being moved + movingnodes = M.getNodesSync(apireq.n, true); + + var foreignnodes = []; + + for (var i = movingnodes.length; i--; ) { + if (M.d[movingnodes[i]].u !== u_handle) { + foreignnodes.push(movingnodes[i]); + } + } + + if (foreignnodes.length) { + if (d) console.log('rekeying foreignnodes', foreignnodes.length); + + // update all foreign nodes' keys and take ownership + api_updfkey(movingnodes); + } + } + } + + // is the target location in any shares? add CR element. + if (tsharepath.length) { + if (!movingnodes) { + movingnodes = M.getNodesSync(apireq.n, true); + } + + apireq.cr = crypto_makecr(movingnodes, tsharepath, true); + } +} + +function process_f(f, cb, updateVersioning) { + "use strict"; + + if (f) { + for (var i = 0; i < f.length; i++) { + var n = f[i]; + if (updateVersioning) { + // this is a response from updating versioning, clear the previous versions first. + if (M.d[n.h]) { + M.delNode(n.h); + ufsc.delNode(n.h); + } + + n.fv = 1; + } + M.addNode(n); + ufsc.addNode(n); + } + } + + // TODO: This function is no longer asynchronous, remove the callback dependency (?) + if (typeof cb === 'function') { + cb(); + } +} + +/** + * Handle incoming pending contacts + * + * @param {array.} pending contacts + * + */ +function processIPC(ipc, ignoreDB) { + 'use strict'; + + for (let i = 0; i < ipc.length; ++i) { + + // Update ipc status + M.addIPC(ipc[i], ignoreDB); + + // Deletion of incomming pending contact request, user who sent request, canceled it + if (ipc[i].dts) { + M.delIPC(ipc[i].p); + delete M.ipc[ipc[i].p]; + + if (fminitialized) { + + // Update token.input plugin + removeFromMultiInputDDL('.share-multiple-input', {id: ipc[i].m, name: ipc[i].m}); + } + } + else if (fminitialized) { + // Don't prevent contact creation when there's already IPC available + // When user add contact who already sent IPC, server will automatically create full contact + var contactName = M.getNameByHandle(ipc[i].p); + + // Update token.input plugin + addToMultiInputDropDownList('.share-multiple-input', [{id: ipc[i].m, name: contactName}]); + } + } +} + +/** + * Handle outgoing pending contacts + * + * @param {array.} pending contacts + */ +function processOPC(opc, ignoreDB) { + 'use strict'; + + for (let i = 0; i < opc.length; ++i) { + M.addOPC(opc[i], ignoreDB); + + if (opc[i].dts) { + M.delOPC(opc[i].p); + + if (fminitialized) { + + // Update tokenInput plugin + removeFromMultiInputDDL('.share-multiple-input', {id: opc[i].m, name: opc[i].m}); + removeFromMultiInputDDL('.add-contact-multiple-input', {id: opc[i].m, name: opc[i].m}); + } + } + else { + // Search through M.opc to find duplicated e-mail with .dts + // If found remove deleted opc + // And update sent-request grid + for (var k in M.opc) { + if (M.opc[k].dts && (M.opc[k].m === opc[i].m)) { + delete M.opc[k]; + break; + } + } + + if (fminitialized) { + const contactName = M.getNameByHandle(opc[i].p); + + // Update tokenInput plugin + addToMultiInputDropDownList('.share-multiple-input', [{id: opc[i].m, name: contactName}]); + addToMultiInputDropDownList('.add-contact-multiple-input', [{id: opc[i].m, name: contactName}]); + } + } + } +} + +/** + * processPH + * + * Process export link (public handle) action packet and 'f' tree response. + * @param {Object} publicHandles The Public Handles action packet i.e. a: 'ph'. + */ +function processPH(publicHandles) { + + var nodeId; + var publicHandleId; + var timeNow = unixtime(); + var UiExportLink = fminitialized && !is_mobile && new mega.UI.Share.ExportLink(); + + for (var i = publicHandles.length; i--; ) { + var value = publicHandles[i]; + + nodeId = value.h; + if (!M.d[nodeId]) continue; + + if (fmdb) { + if (value.d) { + fmdb.del('ph', nodeId); + } + else { + fmdb.add('ph', { h : nodeId }); + } + } + + publicHandleId = value.ph; + + // remove exported link, down: 1 + if (value.d) { + M.delNodeShare(nodeId, 'EXP'); + + if (fminitialized && M.currentdirid === 'public-links') { + removeUInode(nodeId, value.p); + selectionManager.remove_from_selection(nodeId); + } + + if (UiExportLink) { + UiExportLink.removeExportLinkIcon(nodeId); + } + } + else { + var share = clone(value); + delete share.a; + delete share.i; + delete share.n; + share.u = 'EXP'; + share.r = 0; + + if (M.d[nodeId].ph !== publicHandleId) { + M.d[nodeId].ph = publicHandleId; + M.nodeUpdated(M.d[nodeId]); + } + + M.nodeShare(share.h, share); + + if (UiExportLink) { + UiExportLink.addExportLinkIcon(nodeId); + } + } + + if (UiExportLink && (value.down !== undefined)) { + UiExportLink.updateTakenDownItem(nodeId, value.down); + } + + // Update the public link icon for mobile + if (is_mobile) { + mobile.cloud.updateLinkStatus(nodeId); + } + + if (fminitialized && M.recentsRender) { + M.recentsRender.nodeChanged(nodeId); + } + } +} + +/** + * Handle pending shares + * + * @param {array.} pending shares + */ +function processPS(pendingShares, ignoreDB) { + 'use strict'; + for (let i = 0; i < pendingShares.length; ++i) { + const ps = pendingShares[i]; + + // From gettree + if (ps.h) { + M.addPS(ps, ignoreDB); + } + // Situation different from gettree, s2 from API response, doesn't have .h attr instead have .n + else { + const timeStamp = ps.ts; + const nodeHandle = ps.n; + const shareRights = ps.r; + const pendingContactId = ps.p; + const contactName = M.getNameByHandle(pendingContactId); + + // shareRights is undefined when user denies pending contact request + // .op is available when user accepts pending contact request and + // remaining pending share should be updated to full share + if ((typeof shareRights === 'undefined') || ps.op) { + M.delPS(pendingContactId, nodeHandle); + + if (ps.op) { + M.nodeShare(nodeHandle, { + h: ps.n, + o: ps.n, + p: ps.p, + u: ps.u, + r: ps.r, + ts: ps.ts + }); + } + + if (fminitialized && M.opc && M.opc[ps.p]) { + // Update tokenInput plugin + addToMultiInputDropDownList('.share-multiple-input', [{ + id: M.opc[pendingContactId].m, + name: contactName + }]); + addToMultiInputDropDownList('.add-contact-multiple-input', [{ + id: M.opc[pendingContactId].m, + name: contactName + }]); + } + } + else { + // Add the pending share to state + M.addPS({ + 'h':nodeHandle, + 'p':pendingContactId, + 'r':shareRights, + 'ts':timeStamp + }, ignoreDB); + + if (M.d[nodeHandle] && M.d[nodeHandle].t) { + // Update M.IS_SHARED flag + ufsc.addTreeNode(M.d[nodeHandle]); + } + } + + if (fminitialized) { + sharedUInode(nodeHandle); + } + } + } +} + +/** + * Handle upca response, upci, pending contact request updated (for whom it's incomming) + * + * @param {array.} ap (actionpackets) + * + */ +function processUPCI(ap) { + if (d) console.debug('processUPCI'); + for (var i in ap) { + if (ap[i].s) { + delete M.ipc[ap[i].p]; + M.delIPC(ap[i].p);// Remove from localStorage + mBroadcaster.sendMessage('fmViewUpdate:ipc'); + } + } +} + +/** + * processUPCO + * + * Handle upco response, upco, pending contact request updated (for whom it's outgoing). + * @param {Array} ap (actionpackets) . + */ +function processUPCO(ap) { + + if (d) console.debug('processUPCO'); + + var psid = '';// pending id + + // Loop through action packets + for (var i in ap) { + if (ap.hasOwnProperty(i)) { + + // Have status of pending share + if (ap[i].s) { + + psid = ap[i].p; + delete M.opc[psid]; + delete M.ipc[psid]; + M.delOPC(psid); + M.delIPC(psid); + + // Delete all matching pending shares + for (var k in M.ps) { + M.delPS(psid, k); + } + + // Update tokenInput plugin + removeFromMultiInputDDL('.share-multiple-input', {id: ap[i].m, name: ap[i].m}); + removeFromMultiInputDDL('.add-contact-multiple-input', {id: ap[i].m, name: ap[i].m}); + mBroadcaster.sendMessage('fmViewUpdate:opc'); + } + } + } +} + +/** + * Updates contact/user data in global variable M.u, local dB and taking care of items in share and add contacts + * dialogs dropdown + * + * @param {Object} users Information about users (properties defined in js/fm/megadata.js) + */ +function process_u(users, ignoreDB) { + "use strict"; + + // If nicknames private encrypted attribute is set. + if (nicknames.cache === false && Object(u_attr).hasOwnProperty('*!>alias')) { + nicknames.decryptAndCacheNicknames(u_attr['*!>alias']); + } + + for (var i = 0; i < users.length; i++) { + + var userEmail = users[i].m; + var userHandle = users[i].u; + var userStatus = users[i].c; + + // If this user had a nickname in the past, don't delete it if they are now added as a contact + // Or if the nickname is set in the initial 'ug' API request, then set it + users[i].nickname = userHandle in M.u && M.u[userHandle].nickname || nicknames.cache[userHandle] || ''; + + if (userStatus === 1) { + users[i].h = userHandle; + users[i].t = 1; + users[i].p = 'contacts'; + + M.addNode(users[i], ignoreDB); + + var contactName = M.getNameByHandle(userHandle); + + // Update token.input plugin + addToMultiInputDropDownList('.share-multiple-input', [{id: userEmail, name: contactName}]); + addToMultiInputDropDownList('.add-contact-multiple-input', [{id: userEmail, name: contactName}]); + } + else if (M.d[userHandle]) { + M.delNode(userHandle, ignoreDB); + + // Update token.input plugin + removeFromMultiInputDDL('.share-multiple-input', {id: userEmail, name: userEmail}); + removeFromMultiInputDDL('.add-contact-multiple-input', {id: userEmail, name: userEmail}); + } + + // Update user attributes M.u + M.addUser(users[i], ignoreDB); + + // If a contact, sync data objs M.d and M.u + if (userStatus === 1) { + M.d[userHandle] = M.u[userHandle]; + } + } +} + +/** + * a function to parse the JSON object received holding information about sub-accounts of a business account. + * This object will exist only in business accounts. + * @param {String[]} suba the object to parse, it must contain an array of sub-accounts ids (can be empty) + * @param {Boolean} ignoreDB if we want to skip DB updating + */ +function process_suba(suba, ignoreDB) { + "use strict"; + if (!suba || !suba.length) { + return; + } + + M.onFileManagerReady(() => { + + M.require('businessAcc_js', 'businessAccUI_js').done(() => { + + // the response is an array of users's handles (Masters). this means at least it will contain + // the current user handle. + // later-on we need to iterate on all of them. For now we dont know how to treat sub-masters yet + // --> we will target only current users's subs + const bAccount = new BusinessAccount(); + // if (!suba || !suba[u_handle]) { + // return; + // } + // suba = suba[u_handle]; + if (suba.length) { + for (var k = 0; k < suba.length; k++) { + bAccount.parseSUBA(suba[k], ignoreDB); + } + } + // else { + // bAccount.parseSUBA(null, true); // dummy call to flag that this is a master B-account + // } + }); + }); +} + +/** + * A function to precess the action packets received related to business account sub-users + * @param {Object} packet + */ +function process_businessAccountSubUsers_SC(packet) { + "use strict"; + // we dont process these action packets on mobile + if (is_mobile) { + return; + } + if (!packet) { // no packet + return; + } + if (!M.suba) { // no sub-users in memory + return; + } + if (!packet.a) { // no packet type/operation + return; + } + if (!packet.u) { // no user handle + return; + } + + var subUser = M.suba[packet.u]; + if (!subUser) { // sub-user not found --> it's new one + subUser = Object.create(null); + subUser.u = packet.u; + } + + var valChanged = false; + + if ('s' in packet && packet.s !== subUser.s) { // new status + subUser.s = packet.s; + valChanged = true; + } + if (packet.e && packet.e !== subUser.e) { // new email + subUser.e = packet.e; + valChanged = true; + } + if (packet.firstname && packet.firstname !== subUser.firstname) { // new first-name + subUser.firstname = packet.firstname; + valChanged = true; + } + if (packet.lastname && packet.lastname !== subUser.lastname) { // new last-name + subUser.lastname = packet.lastname; + valChanged = true; + } + if (packet.position && packet.position !== subUser.position) { // new position + subUser.position = packet.position; + valChanged = true; + } + if (packet.idnum && packet.idnum !== subUser.idnum) { // new id number + subUser.idnum = packet.idnum; + valChanged = true; + } + if (packet.phonenum && packet.phonenum !== subUser.phonenum) { // new phone number + subUser.phonenum = packet.phonenum; + valChanged = true; + } + if (packet.location && packet.location !== subUser.location) { // new location + subUser.location = packet.location; + valChanged = true; + } + if (valChanged) { + M.require('businessAcc_js', 'businessAccUI_js').done( + function() { + var bAccount = new BusinessAccount(); + bAccount.parseSUBA(subUser, false, true); + } + ); + } +} + +function process_ok(ok, ignoreDB) { + "use strict"; + + for (var i = ok.length; i--; ) { + if (ok[i].ha === crypto_handleauth(ok[i].h)) + { + if (fmdb && !pfkey && !ignoreDB) { + fmdb.add('ok', { h : ok[i].h, d : ok[i] }); + } + crypto_setsharekey(ok[i].h, decrypt_key(u_k_aes, base64_to_a32(ok[i].k)), ignoreDB); + } + } +} + + +function processMCF(mcfResponse, ignoreDB) { + 'use strict'; + + if (mcfResponse === EEXPIRED || mcfResponse === EINTERNAL) { + return; + } + + // Process mcf response from API (i.e. gettree) or indexedDB + if (Array.isArray(mcfResponse)) { + for (var i = mcfResponse.length; i--;) { + var chatRoomInfo = mcfResponse[i]; + + if (fmdb && !pfkey && !ignoreDB) { + fmdb.add('mcf', {id: chatRoomInfo.id, d: chatRoomInfo}); + } + + if (typeof Chat !== 'undefined') { + Chat.mcf[chatRoomInfo.id] = chatRoomInfo; + } + } + } + else if (d) { + console.error('Unexpected mcf response.', mcfResponse); + } +} + +function folderreqerr(c, e) { + 'use strict'; + + var title = l[1043]; + var message = null; + + loadingInitDialog.hide(); + + loadfm.loaded = false; + loadfm.loading = false; + + if ($.dialog) { + return mBroadcaster.once('closedialog', SoonFc(90, () => folderreqerr(c, e))); + } + + if (typeof e === 'object' && e.err < 0) { + if (e.u === 7) { + message = l[23242]; + + if (e.l !== 2) { + message = l[23243]; + } + } + else { + e = e.err; + } + } + + // If desktop site show "Folder link unavailable" dialog + if (!is_mobile) { + if (parseInt(e) === EARGS) { + title = l[20198]; + message = l[20199]; + } + else if (!message) { + message = l[1044] + '
              • ' + l[1045] + '
              • ' + l[247] + '
              • ' + l[1046] + '
              • '; + } + + parsepage(pages['placeholder']); + msgDialog('warninga', title, message, false, function() { + + // If the user is logged-in, he'll be redirected to the cloud + loadSubPage('login'); + + // FIXME: no location.reload() should be needed.. + location.reload(); + }); + } + else { + // Show file/folder not found overlay + mobile.initDOM(); + mobile.notFoundOverlay.show(message || parseInt(e && e.err || e)); + } +} + +/** + * Initialize the chat subsystem. + * @param {*} [action] Specific action procedure to follow + * @returns {Promise} promise fulfilled on completion. + */ +function init_chat(action) { + 'use strict'; + return new Promise(function(resolve, reject) { + var __init_chat = function() { + var result = false; + + if ((is_chatlink || u_type || is_eplusplus) && !megaChatIsReady) { + if (d) { + console.info('Initializing the chat...'); + } + var _chat = new Chat(); + + // `megaChatIsDisabled` might be set if `new Karere()` failed (Ie, in older browsers) + if (!window.megaChatIsDisabled) { + window.megaChat = _chat; + megaChat.init().then(resolve).catch(reject); + resolve = null; + } + } + + if (!loadfm.loading) { + window.loadingInitDialog.hide(); + } + + if (resolve) { + resolve(result); + } + }; + + if (window.megaChatIsReady) { + $.tresizer(); + return __init_chat(); + } + var mclp = MediaInfoLib.getMediaCodecsList(); + + if (action === 0x104DF11E5) { + M.require('chat') + .always(function() { + mclp.always(__init_chat); + }); + } + else if (is_chatlink) { + mclp.always(__init_chat); + } + else if (pfid) { + if (d) { + console.log('Will not initialize the chat (folder-link)'); + } + + resolve(EACCESS); + } + else { + authring.onAuthringReady('chat').then(__init_chat); + } + }); +} + +function loadfm_callback(res) { + 'use strict'; + + if ((parseInt(res) | 0) < 0 || res === undefined) { + window.loadingInitDialog.hide(); + + // tell the user we were unable to retrieve the cloud drive contents, upon clicking OK redirect to /support + msgDialog('warninga', l[1311], l[16892], api_strerror(res), loadSubPage.bind(null, 'support')); + return; + } + + mega.loadReport.recvNodes = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + if (pfkey) { + folderlink = pfid; + // Hide the parent, to prevent dbfetch from trying to retrieve it. + Object(M.d[M.RootID]).p = ''; + } + + if (res.noc) { + mega.loadReport.noc = res.noc; + } + if (res.tct) { + mega.loadReport.tct = res.tct; + } + if (res.ok && !res.ok0) { + // this is a legacy cached tree without an ok0 element + process_ok(res.ok); + } + if (res.u) { + process_u(res.u); + } + if (res.opc) { + processOPC(res.opc); + } + if (res.suba) { + if (!is_mobile) { + process_suba(res.suba); + } + } + if (res.ipc) { + processIPC(res.ipc); + } + if (res.ps) { + processPS(res.ps); + } + if (res.mcf) { + // save the response to be processed later once chat files were loaded + loadfm.chatmcf = res.mcf.c || res.mcf; + if (res.mcf.pc) { + loadfm.chatmcf = (loadfm.chatmcf || []).concat(res.mcf.pc); + } + // cf will include the flags (like whether it is archived) and chatid, + // so it needs to combine it before processing it. + var mergeCfToChatmcf = function(entry) { + for (var i = 0; i < loadfm.chatmcf.length; i++) { + if (loadfm.chatmcf[i].id === entry.id) { + loadfm.chatmcf[i].f = entry.f; + } + } + }; + + if (res.mcf.cf) { + for (var i = 0; i < res.mcf.cf.length; i++) { + mergeCfToChatmcf(res.mcf.cf[i]); + } + } + if (res.mcf.pcf) { + for (var i = 0; i < res.mcf.pcf.length; i++) { + mergeCfToChatmcf(res.mcf.pcf[i]); + } + } + // ensure the response is saved in fmdb, even if the chat is disabled or not loaded yet + processMCF(loadfm.chatmcf); + } + + if (res.aesp) { + mega.sets.resetDB(res.aesp); + } + + M.avatars(); + + if (localStorage['treefixup$' + u_handle]) { + // We found inconsistent tree nodes and forced a reload, log it. + eventlog(99695); + } + + process_f(res.f, function onLoadFMDone(hasMissingKeys) { + + // Check if the key for a folderlink was correct + if (folderlink && missingkeys[M.RootID]) { + window.loadingInitDialog.hide(); + + loadfm.loaded = false; + loadfm.loading = false; + + // If on mobile, load the decryption key overlay + if (is_mobile) { + mobile.decryptionKeyOverlay.show(pfid, true, true); + return new MegaPromise(); + } + else { + // Otherwise load the regular webclient decryption key dialog + return mKeyDialog(pfid, true, true) + .fail(function() { + loadSubPage('start'); + }); + } + } + + if (folderlink) { + + // This folderlink is valid to affiliate + M.affiliate.storeAffiliate(folderlink, 2); + } + + // If we have shares, and if a share is for this node, record it on the nodes share list + if (res.s) { + for (let i = res.s.length; i--;) { + M.nodeShare(res.s[i].h, res.s[i]); + } + } + + // Handle public/export links. Why here? Make sure that M.d already exists + if (res.ph) { + processPH(res.ph); + } + + // Handle versioning nodes + if (res.f2) { + process_f(res.f2, null, true); + } + + // This package is sent on hard refresh if owner have enabled or disabled PUF + if (res.uph) { + mega.megadrop.processUPHAP(res.uph); + } + + // decrypt hitherto undecrypted nodes + crypto_fixmissingkeys(missingkeys); + + if (res.cr) { + crypto_procmcr(res.cr); + } + + if (res.sr) { + crypto_procsr(res.sr); + } + setsn(currsn = res.sn); + + mega.loadReport.procNodeCount = Object.keys(M.d || {}).length; + mega.loadReport.procNodes = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + window.loadingInitDialog.step3(20, 35); + + // Time to save the ufs-size-cache, from which M.tree nodes will be created and being + // those dependant on in-memory-nodes from the initial load to set flags such SHARED. + (async() => ufsc.save())().catch(dump) + .finally(() => { + // commit transaction and set sn + setsn(res.sn); + currsn = res.sn; + + window.loadingInitDialog.step3(35, 40); + + // retrieve initial batch of action packets, if any + // we'll then complete the process using loadfm_done + getsc(true); + }); + }); +} + +/** + * Function to be invoked when the cloud has finished loading, + * being the nodes loaded from either server or local cache. + */ +function loadfm_done(mDBload) { + + window.loadingInitDialog.step3(56, 85); + + mDBload = mDBload || !loadfm.fromapi; + + loadfm.loaded = Date.now(); + loadfm.loading = false; + loadfm.fromapi = false; + + if (d > 1) console.error('loadfm_done', is_fm()); + + mega.loadReport.procAPs = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + if (!pfid && u_type == 3) { + + // Ensure tree nodes consistency... + var tlen = Object.keys(M.tree[M.RootID] || {}).length; + var clen = Object.keys(M.c[M.RootID] || {}).filter(function(h) { return M.c[M.RootID][h] > 1 }).length; + + if (tlen < clen) { + if (localStorage['treefixup$' + u_handle]) { + // The force reload attempt did not helped on getting tree nodes consistency back (?!) + eventlog(99696); + } + else if ((Date.now() - parseInt(localStorage['treeic$' + u_handle] || 0)) < 864e6) { + // The user suffered again from inconsistent tree nodes within the + // last 10 days, we are not force reloading his account on this case. + eventlog(99697); + } + else { + // Force reload the account to get tree nodes consistency back... + localStorage['treeic$' + u_handle] = Date.now(); + localStorage['treefixup$' + u_handle] = 1; + return fm_forcerefresh(); + } + } + delete localStorage['treefixup$' + u_handle]; + + // load/initialise the authentication system + authring.initAuthenticationSystem(); + } + + // This function is invoked once the M.openFolder()'s promise (through renderfm()) is fulfilled. + var _completion = function() { + + window.loadingInitDialog.step3(100); + + var hideLoadingDialog = !is_mobile && !CMS.isLoading(); + + if ((location.host === 'mega.nz' || !megaChatIsDisabled) && !is_mobile) { + + if (!pfid && !loadfm.chatloading && (u_type === 3 || is_eplusplus)) { + loadfm.chatloading = true; + + M.require('chat') + .always(function() { + + if (typeof ChatRoom !== 'undefined') { + + if (loadfm.chatmcf) { + processMCF(loadfm.chatmcf, true); + loadfm.chatmcf = null; + } + init_chat(); + } + else { + // FIXME: this won't be reached because the request will fail silently + console.error('Chat resources failed to load...'); + } + + loadfm.chatloading = false; + loadfm.chatloaded = Date.now(); + }); + + /* + if (getSitePath().substr(0, 8) === '/fm/chat') { + // Keep the "decrypting" step until the chat have loaded. + hideLoadingDialog = false; + }*/ + } + } + + // Check Business (or Pro Flexi) account is expired on initial phase in desktop web + if (!is_mobile && u_attr && (u_attr.b || u_attr.pf)) { + + M.require('businessAcc_js', 'businessAccUI_js').done(() => { + + var business_ui = new BusinessAccountUI(); + + if (u_attr.b && u_attr.b.m) { + business_ui.showWelcomeDialog(); + } + + // the function will check if the account is expired + business_ui.showExp_GraceUIElements(); + }); + } + + if (hideLoadingDialog) { + onIdle(() => { + window.loadingInitDialog.hide(); + + // Reposition UI elements right after hiding the loading overlay, + // without waiting for the lazy $.tresizer() triggered by MegaRender + fm_resize_handler(true); + }); + } + + // -0x800e0fff indicates a call to loadfm() when it was already loaded + if (mDBload !== -0x800e0fff && !is_mobile) { + onIdle(function _initialNotify() { + + // If this was called from the initial fm load via gettree or db load, we should request the + // latest notifications. These must be done after the first getSC call. + if (!folderlink) { + notify.getInitialNotifications(); + } + }); + + if (mBroadcaster.crossTab.master && !mega.loadReport.sent) { + mega.loadReport.sent = true; + + var r = mega.loadReport; + var tick = Date.now() - r.aliveTimeStamp; + + r.totalTimeSpent = Date.now() - mega.loadReport.startTime; + + r = [ + r.mode, // 1: DB, 2: API + r.recvNodes, r.procNodes, r.procAPs, + r.fmConfigFetch, r.renderfm, + r.dbToNet | 0, // see mDB.js comment + r.totalTimeSpent, + Object.keys(M.d || {}).length, // total account nodes + r.procNodeCount, // nodes before APs processing + buildVersion.timestamp || -1, // -- VERSION TAG -- + navigator.hardwareConcurrency | 0, // cpu cores + folderlink ? 1 : 0, + pageLoadTime, // secureboot's resources load time + r.ttfb | 0, // time-to-first-byte (for gettree) + r.noc | 0, // tree not cached + r.tct | 0, // tree compute time + r.recvAPs, // time waiting to receive APs + r.EAGAINs, // -3/-4s while loading + r.e500s, // http err 500 while loading + r.errs, // any other errors while loading + decWorkerPool.ok && decWorkerPool.length || -666, + r.ttlb | 0, // time to last byte + r.ttfm | 0, // time to fm since ttlb + u_type === 3 ? (mBroadcaster.crossTab.master ? 1 : 0) : -1, // master, or slave tab? + r.pn1, r.pn2, r.pn3, r.pn4, r.pn5, // procNodes steps + Object.keys(M.tree || {}).length, // total tree nodes + r.invisibleTime | 0, // time spent as background tab + ]; + + if (d) { + console.debug('loadReport', r, tick, document.hidden); + } + + if (!(tick > 2100) && !document.hidden) { + api_req({a: 'log', e: 99626, m: JSON.stringify(r)}); + } + } + + if (mDBload) { + M.avatars(); + } + } + if ($.msgDialog) { + closeMsg(); + } + clearInterval(mega.loadReport.aliveTimer); + mega.state &= ~window.MEGAFLAG_LOADINGCLOUD; + + watchdog.notify('loadfm_done'); + }; + + var _onConfigReady = function() { + + window.loadingInitDialog.step3(85, 100); + + var promise = MegaPromise.resolve(); + + mega.loadReport.fmConfigFetch = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + // are we actually on an #fm/* page? + if (page !== 'start' && is_fm() || $('.fm-main.default').is(":visible")) { + promise = M.initFileManager(); + + mega.loadReport.renderfm = Date.now() - mega.loadReport.stepTimeStamp; + mega.loadReport.stepTimeStamp = Date.now(); + + // load report - time to fm after last byte received + mega.loadReport.ttfm = Date.now() - mega.loadReport.ttfm; + + // setup fm-notifications such as 'full' or 'almost-full' if needed. + if (!pfid && u_type) { + M.getStorageState().then(function(res) { + // 0: Green, 1: Orange (almost full), 2: Red (full) + if (res >= 1) { + M.checkStorageQuota(50); + } + }); + M.myChatFilesFolder.init(); + M.getMyBackups().catch(dump); + M.getCameraUploads().catch(dump); + } + } + else { + mega.loadReport.ttfm = -1; + mega.loadReport.renderfm = -1; + } + + mclp = Promise.resolve(); + promise.always(_completion); + }; + + Promise.allSettled([mclp, u_type > 2 && mega.config.fetch()]) + .then(_onConfigReady) + .catch(function(ex) { + console.warn(ex); + tryCatch(_onConfigReady, (ex) => { + // give time for window.onerror to fire 'cd2' before showing the blocking confirm-dialog + setTimeout(function() { + siteLoadError(ex, 'loadfm'); + }, 2e3); + + // reach window.onerror + throw ex; + })(); + }); +} + +function fmtreenode(id, e) +{ + if (M.getNodeRoot(id) === 'contacts') + return false; + var treenodes = {}; + if (typeof fmconfig.treenodes !== 'undefined') + treenodes = fmconfig.treenodes; + if (e) + treenodes[id] = 1; + else + { + $('#treesub_' + id + ' .expanded').each(function(i, e) + { + var id2 = $(e).attr('id'); + if (id2) + { + id2 = id2.replace('treea_', ''); + $('#treesub_' + id2).removeClass('opened'); + $('#treea_' + id2).removeClass('expanded'); + delete treenodes[id2]; + } + }); + delete treenodes[id]; + } + mega.config.set('treenodes', treenodes); + + M.treenodes = JSON.stringify(treenodes); +} + +function fmsortmode(id, n, d) +{ + var sortmodes = {}; + if (typeof fmconfig.sortmodes !== 'undefined') + sortmodes = fmconfig.sortmodes; + if (n === 'name' && d > 0 && id !== "contacts") { + // don't delete for "contacts" section, since "status" is the default there. + delete sortmodes[id]; + } + else if (n === "status" && d > 0 && id === "contacts") { + // DO delete for "contacts" section, since "status" is the default there, so default is already d > 1. + delete sortmodes[id]; + } + else + sortmodes[id] = {n: n, d: d}; + mega.config.set('sortmodes', sortmodes); +} + +function fmviewmode(id, e) +{ + var viewmodes = {}; + if (typeof fmconfig.viewmodes !== 'undefined') + viewmodes = fmconfig.viewmodes; + if (e) + viewmodes[id] = 1; + else + viewmodes[id] = 0; + mega.config.set('viewmodes', viewmodes); +} + +/** @property window.thumbnails */ +lazy(self, 'thumbnails', () => { + 'use strict'; + return new ThumbManager(200, 'otf.thumbs'); +}); + +/** @property fm_thumbnails.exclude */ +lazy(fm_thumbnails, 'exclude', () => { + 'use strict'; + const res = { + recents: 5, + photos: 7, + [mega.gallery.secKeys.cuphotos]: 7, + [mega.gallery.secKeys.cdphotos]: 7, + images: 7, + [mega.gallery.secKeys.cuimages]: 7, + [mega.gallery.secKeys.cdimages]: 7, + videos: 7, + [mega.gallery.secKeys.cuvideos]: 7, + [mega.gallery.secKeys.cdvideos]: 7, + favourites: 7 + }; + return Object.setPrototypeOf(res, null); +}); + +function fm_thumbnails(mode, nodeList, callback) +{ + 'use strict'; + + const pwd = M.currentdirid; + const exclude = fm_thumbnails.exclude[pwd]; + if (M.chat && mode !== 'standalone' || exclude > 6) { + return; + } + nodeList = (mode === 'standalone' ? nodeList : false) || M.v; + + let count = 0; + const transparent = {WEBP: 1, PNG: 1, SVG: 1, GIF: 1}; + const max = M.rmItemsInView ? Math.max(M.rmItemsInView | 0, 48) : Infinity; + const treq = []; + + const onTheFly = + !is_mobile && M.viewmode && mode !== 'standalone' && !exclude + && !mega.config.get('noflytn') ? Object.create(null) : false; + + // check if the node is rendered within/near the view-port. + const isVisible = (n) => { + return pwd === M.currentdirid && (mode === 'standalone' || isVisible.dom(n)); + }; + isVisible.dom = M.megaRender + ? (n) => n.seen && M.megaRender.isDOMNodeVisible(n.h) + : (n) => elementIsVisible(document.getElementById(n.h)); + + const setSrcAttribute = (n, uri) => { + if (isVisible(n)) { + uri = uri || thumbnails.get(n.fa); + + if (uri) { + let imgNode = document.getElementById(n.h); + + if (imgNode && (imgNode = imgNode.querySelector('img'))) { + n.seen = 2; + imgNode.setAttribute('src', uri); + imgNode.parentNode.parentNode.classList.add('thumb'); + } + } + } + }; + + // enqueue thumbnail retrieval. + const queue = (n) => { + let type = ':0*'; + const fa = String(n.fa); + + if (onTheFly && fa.includes(':1*') && !transparent[fileext(n.name, true, true)] || !fa.includes(type)) { + type = ':1*'; + + if (onTheFly) { + onTheFly[fa] = n; + } + } + + if (fa.includes(type)) { + type = type[1] | 0; + + if (thumbnails.queued(n, type)) { + + if (!treq[type]) { + treq[type] = Object.create(null); + } + treq[type][fa] = n; + + if (++count > max) { + // break + return true; + } + } + else if (n.seen !== 2) { + setSrcAttribute(n); + } + } + }; + + + if (d) { + console.time('fm_thumbnails'); + } + + for (let i = 0; i < nodeList.length; i++) { + const n = nodeList[i]; + + if (n && n.fa && !missingkeys[n.h]) { + if (isVisible(n) && queue(n)) { + break; + } + + if (mode === 'standalone' && typeof callback === 'function') { + if (thumbnails.has(n.fa)) { + onIdle(callback.bind(null, n)); + } + else if (thumbnails.pending[n.fa]) { + thumbnails.pending[n.fa].push(callback.bind(null, n)); + } + } + } + } + + if (count > 0) { + if (d) { + console.log('Requesting %d thumbs (%d loaded)', count, thumbnails.loaded, treq); + } + thumbnails.loaded += count; + + // add, render, and deduplicate new thumbnail. + const append = (fa, uri) => { + if (d > 1) { + console.info(`Rendering thumbnail ${fa}, ${uri}`); + } + thumbnails.add(fa, uri, (n) => setSrcAttribute(n, uri)); + }; + + // re-queue thumbnail retrieval. + const requeue = (handle, data, callback) => { + treq[0][handle] = data; + + delay('fm:thumbnails.requeue', () => { + api_getfileattr(treq[0], 0, callback); + treq[0] = {}; + }, 4321); + }; + + // validate we can render a node + const validate = (fa, uint8) => { + let valid = true; + + if (uint8 === 0xDEAD || uint8 && !uint8.byteLength || !thumbnails.each(fa, (n) => isVisible(n))) { + valid = false; + thumbnails.decouple(fa); + } + + return valid; + }; + + // handle thumbnail retrieval. + const onload = async(ctx, fa, uint8) => { + if (!validate(fa, uint8)) { + return; + } + + if (onTheFly[fa]) { + const blob = await webgl.getDynamicThumbnail(uint8, {ats: 1}).catch(nop); + + if (blob) { + append(fa, URL.createObjectURL(blob)); + + if (thumbnails.db) { + thumbnails.db.add(fa, blob); + } + } + else { + if (d) { + console.debug(`Failed to generate on-the-fly thumbnail for ${fa}`); + } + requeue(fa, onTheFly[fa], onload); + } + + onTheFly[fa] = null; + } + else { + append(fa, mObjectURL([uint8.buffer || uint8], 'image/jpeg')); + } + }; + + queueMicrotask(async() => { + + if (treq[1]) { + let proceed = true; + + if (onTheFly) { + await thumbnails.query( + Object.keys(treq[1]).filter(h => !!onTheFly[h]), + (h) => { + delete treq[1][h]; + delete onTheFly[h]; + return validate(h); + }, + (h, buf) => onload(0, h, buf) + ).catch(dump); + + proceed = $.len(treq[1]) > 0; + } + + if (proceed) { + api_getfileattr(treq[1], 1, onload); + } + } + + if (treq[0]) { + api_getfileattr(treq[0], 0, onload); + } + treq[0] = {}; + }); + } + + if (d) { + console.timeEnd('fm_thumbnails'); + } +} + + +mBroadcaster.once('boot_done', function() { + "use strict"; + + var uad = ua.details || false; + var browser = String(uad.browser || ''); + + if (!browser || browser === "Safari" || /edge|explorer/i.test(browser)) { + if (d) { + console.info('Disabling paste proxy on this browser...', browser, [uad]); + } + return; + } + + // Didn't found a better place for this, so I'm leaving it here... + // This is basically a proxy of on paste, that would trigger a new event, which would receive the actual + // File object, name, etc. + $(document).on('paste', function(event) { + const {clipboardData, originalEvent = false} = event; + let {items} = clipboardData || originalEvent.clipboardData || {}; + + if (!items && originalEvent.clipboardData) { + // safari + items = originalEvent.clipboardData.files; + } + var fileName = false; + + var blob = null; + if (items) { + if (ua.details.browser === "Firefox" && items.length === 2) { + // trying to paste an image, but .. FF does not have support for that. (It adds the file icon as + // the image, which is a BAD UX, so .. halt now!) + return; + } + for (var i = 0; i < items.length; i++) { + if (items[i].type.indexOf("text/rtf") === 0) { + // halt execution, this is a Rich text formatted clipboard data, which may also contain an image, + // so we need to halt here, otherwise it may be threated as image, instead of text + return; + } + else if (items[i].type.indexOf("image") === 0) { + if (items[i] instanceof File) { + // Safari, using .files + blob = items[i]; + } + else { + blob = items[i].getAsFile(); + } + } + else if (items[i].kind === "string") { + items[i].getAsString(function(str) { + fileName = str; + }); + } + } + } + + if (blob !== null) { + if (fileName) { + // we've got the name of the file... + blob.name = fileName; + } + + if (!blob.name) { + // no name found..generate dummy name. + var ext = blob.type.replace("image/", "").toLowerCase(); + fileName = blob.name = "image." + (ext === "jpeg" ? "jpg" : ext); + } + + var simulatedEvent = new $.Event("pastedimage"); + $(window).trigger(simulatedEvent, [blob, fileName]); + + // was this event handled and preventing default? if yes, prevent the raw event from pasting the + // file name text + if (simulatedEvent.isDefaultPrevented()) { + event.preventDefault(); + return false; + } + } + }); +}); + +/** + * Mega Promise + * + * Polyfill + easier to debug variant of Promises which are currently implemented in some of the cutting edge browsers. + * + * The main goals of using this, instead of directly using native Promises are: + * - stack traces + * - .done, .fail + * - all js exceptions will be logged (in the console) and thrown as expected + * + * Note: for now, we will use $.Deferred to get this functionality out of the box and MegaPromise will act as a bridge + * between the original Promise API and jQuery's Deferred APIs. + * + * Implementation note: .progress is currently not implemented. + */ + + +/** + * Mega Promise constructor + * + * @returns {MegaPromise} + * @constructor + */ +function MegaPromise(fn) { + var self = this; + + this.$deferred = new $.Deferred(); + this.state$deferred = this.$deferred; + + if (fn) { + var resolve = function() { + self.resolve.apply(self, arguments); + }; + var reject = function() { + self.reject.apply(self, arguments); + }; + + try { + fn(resolve, reject); + } + catch (ex) { + reject(ex); + } + } + + if (MegaPromise.debugPendingPromisesTimeout > 0) { + var preStack = M.getStack(); + setTimeout(function() { + if (self.state() === 'pending') { + console.error("Pending promise found: ", self, preStack); + } + }, MegaPromise.debugPendingPromisesTimeout); + } + + if (MegaPromise.debugPreStack === true) { + self.stack = M.getStack(); + } +} + +/** + * Set this to any number (millisecond) and a timer would check if all promises are resolved in that time. If they are + * still in 'pending' state, they will trigger an error (this is a debugging helper, not something that you should + * leave on in production code!) + * + * @type {boolean|Number} + */ +MegaPromise.debugPendingPromisesTimeout = false; + +/** + * Set this to true, to enable all promises to store a pre-stack in .stack. + * + * @type {boolean} + */ +MegaPromise.debugPreStack = false; + +/** + * Convert Native and jQuery promises to MegaPromises, by creating a MegaPromise proxy which will be attached + * to the actual underlying promise's .then callbacks. + * + * @param p + * @returns {MegaPromise} + * @private + */ +MegaPromise.asMegaPromiseProxy = function(p) { + var $promise = new MegaPromise(); + + p.then( + function megaPromiseResProxy() { + $promise.resolve.apply($promise, arguments); + }, + MegaPromise.getTraceableReject($promise, p)); + + return $promise; +}; + +/** + * Common function to be used as reject callback to promises. + * + * @param promise {MegaPromise} + * @returns {function} + * @private + */ +MegaPromise.getTraceableReject = function($promise, origPromise) { + 'use strict'; + // Save the current stack pointer in case of an async call behind + // the promise.reject (Ie, onAPIProcXHRLoad shown as initial call) + var preStack = d > 1 && M.getStack(); + + return function __mpTraceableReject(aResult) { + if (window.d > 1) { + var postStack = M.getStack(); + if (typeof console.group === 'function') { + console.group('PROMISE REJECTED'); + } + console.debug('Promise rejected: ', aResult, origPromise); + console.debug('pre-Stack', preStack); + console.debug('post-Stack', postStack); + if (typeof console.groupEnd === 'function') { + console.groupEnd(); + } + } + try { + if (typeof $promise === 'function') { + $promise.apply(origPromise, arguments); + } + else { + $promise.reject.apply($promise, arguments); + } + } + catch(e) { + console.error('Unexpected promise error: ', e, preStack); + } + }; +}; + +MegaPromise.prototype.benchmark = function(uniqueDebuggingName) { + var self = this; + MegaPromise._benchmarkTimes = MegaPromise._benchmarkTimes || {}; + MegaPromise._benchmarkTimes[uniqueDebuggingName] = Date.now(); + + self.always(function() { + console.error( + uniqueDebuggingName, + 'finished in:', + Date.now() - MegaPromise._benchmarkTimes[uniqueDebuggingName] + ); + delete MegaPromise._benchmarkTimes[uniqueDebuggingName]; + }); + + // allow chaining. + return self; +}; + +/** + * By implementing this method, MegaPromise will be compatible with .when/.all syntax. + * + * jQuery: https://github.com/jquery/jquery/blob/10399ddcf8a239acc27bdec9231b996b178224d3/src/deferred.js#L133 + * + * @returns {jQuery.Deferred} + */ +MegaPromise.prototype.promise = function() { + return this.$deferred.promise(); +}; + +/** + * Alias of .then + * + * @param res + * Function to be called on resolution of the promise. + * @param [rej] + * Function to be called on rejection of the promise. + * @returns {MegaPromise} + */ +MegaPromise.prototype.then = function(res, rej) { + + return MegaPromise.asMegaPromiseProxy(this.$deferred.then(res, rej)); +}; + +/** + * Alias of .done + * + * @param res + * @returns {MegaPromise} + */ +MegaPromise.prototype.done = function(res) { + this.$deferred.done(res); + return this; +}; + +/** + * Alias of .state + * + * @returns {String} + */ +MegaPromise.prototype.state = function() { + return this.$deferred.state(); +}; + +/** + * Alias of .fail + * + * @param rej + * @returns {MegaPromise} + */ +MegaPromise.prototype.fail = function(rej) { + this.$deferred.fail(rej); + return this; +}; + + +/** + * Alias of .fail + * + * @param rej + * @returns {MegaPromise} + */ +MegaPromise.prototype.catch = MegaPromise.prototype.fail; + +/** + * Alias of .resolve + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.resolve = function() { + this.state$deferred.resolve.apply(this.state$deferred, arguments); + return this; +}; + +/** + * Alias of .reject + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.reject = function() { + this.state$deferred.reject.apply(this.state$deferred, arguments); + return this; +}; + +/** + * Alias of .always + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.always = function() { + this.$deferred.always.apply(this.$deferred, arguments); + return this; +}; + +/** + * Alias of .then, which works like .always and exchanges the internal Deferred promise. + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.pipe = function(resolve, reject) { + var pipe = this.then(resolve, reject || resolve); + this.$deferred = pipe.$deferred; + return pipe; +}; + +/** + * Alias of .always + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.wait = function(callback) { + 'use strict'; + + this.$deferred.always((...args) => { + + queueMicrotask(() => callback(...args)); + }); + return this; +}; + +/** + * Alias of .wait + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.finally = MegaPromise.prototype.wait; + +/** + * Invoke promise fulfilment through try/catch and reject it if there's some exception... + * @param {Function} resolve The function to invoke on fulfilment + * @param {Function} [reject] The function to invoke on rejection/caught exceptions + * @returns {MegaPromise} + */ +MegaPromise.prototype.tryCatch = function(resolve, reject) { + 'use strict'; + reject = reject || function() {}; + return this.done(tryCatch(resolve, reject)).fail(reject); +}; + +/** + * Alias of .always + * + * @returns {MegaPromise} + */ +MegaPromise.prototype.unpack = function(callback) { + // callback = tryCatch(callback); + + this.$deferred.always(function(result) { + if (result.__unpack$$$) { + // flatten an n-dimensional array. + for (var i = result.length; i--;) { + // pick the first argument for each member + result[i] = result[i][0]; + } + result = Array.prototype.concat.apply([], result); + } + callback(result); + }); + return this; +}; + +/** + * Link the `targetPromise`'s state to the current promise. E.g. when targetPromise get resolved, the current promise + * will get resolved too with the same arguments passed to targetPromise. + * + * PS: This is a simple DSL-like helper to save us from duplicating code when using promises :) + * + * @param targetPromise + * @returns {MegaPromise} current promise, helpful for js call chaining + */ +MegaPromise.prototype.linkDoneTo = function(targetPromise) { + var self = this; + + if (targetPromise instanceof MegaPromise) { + // Using MegaPromise.done since it's more lightweight than the thenable + // which creates a new deferred instance proxied back to MegaPromise... + targetPromise.done(function() { + self.resolve.apply(self, arguments); + }); + } + else { + targetPromise.then(function() { + self.resolve.apply(self, arguments); + }); + } + + return this; +}; + +/** + * Link the `targetPromise`'s state to the current promise. E.g. when targetPromise get rejected, the current promise + * will get rejected too with the same arguments passed to targetPromise. + * PS: This is a simple DSL-like helper to save us from duplicating code when using promises :) + * + * + * @param targetPromise + * @returns {MegaPromise} current promise, helpful for js call chaining + */ +MegaPromise.prototype.linkFailTo = function(targetPromise) { + var self = this; + + if (targetPromise instanceof MegaPromise) { + // Using MegaPromise.fail since it's more lightweight than the thenable + // which creates a new deferred instance proxied back to MegaPromise... + targetPromise.fail(function() { + self.reject.apply(self, arguments); + }); + } + else { + targetPromise.then(undefined, function() { + self.reject.apply(self, arguments); + }); + } + + return this; +}; + +/** + * Link the `targetPromise`'s state to the current promise (both done and fail, see .linkDoneTo and .linkFailTo) + * + * PS: This is a simple DSL-like helper to save us from duplicating code when using promises :) + * + * @param targetPromise + * @returns {MegaPromise} current promise, helpful for js call chaining + */ +MegaPromise.prototype.linkDoneAndFailTo = function(targetPromise) { + 'use strict'; + + if (targetPromise instanceof MegaPromise) { + this.linkDoneTo(targetPromise); + this.linkFailTo(targetPromise); + } + else { + if (!(targetPromise instanceof Promise)) { + targetPromise = Promise.resolve(targetPromise); + } + targetPromise.then((res) => this.resolve(res)) + .catch((ex) => { + this.reject(ex); + }); + } + return this; +}; + +/** + * Link promise's state to a function's value. E.g. if the function returns a promise that promise's state will be + * linked to the current fn. If it returns a non-promise-like value it will resolve/reject the current promise's value. + * + * PS: This is a simple DSL-like helper to save us from duplicating code when using promises :) + * + * @returns {MegaPromise} current promise, helpful for js call chaining + */ +MegaPromise.prototype.linkDoneAndFailToResult = function(cb, context, args) { + var self = this; + + var ret = cb.apply(context, args); + + if (ret instanceof MegaPromise) { + self.linkDoneTo(ret); + self.linkFailTo(ret); + } + else { + self.resolve(ret); + } + + return self; +}; + +/** + * Development helper, that will dump the result/state change of this promise to the console + * + * @param [msg] {String} optional msg + * @returns {MegaPromise} current promise, helpful for js call chaining + */ +MegaPromise.prototype.dumpToConsole = function(msg) { + var self = this; + + if (d) { + self.then( + function () { + console.log("success: ", msg ? msg : arguments, !msg ? null : arguments); + }, function () { + console.error("error: ", msg ? msg : arguments, !msg ? null : arguments); + } + ); + } + + return self; +}; +MegaPromise.prototype.dump = MegaPromise.prototype.dumpToConsole; + +/** + * Check if what we have is *potentially* another Promise implementation (Native, Bluebird, Q, etc) + * @param {*|Object} p What we expect to be a promise. + * @returns {Boolean} whether it is + */ +MegaPromise.isAnotherPromise = function(p) { + 'use strict'; + return !(p instanceof MegaPromise) && typeof Object(p).then === 'function'; +}; + +/** + * Implementation of Promise.all/$.when, with a little bit more flexible way of handling different type of promises + * passed in the `promisesList` + * + * @returns {MegaPromise} + */ +MegaPromise.all = function(promisesList) { + 'use strict'; + + var _jQueryPromisesList = promisesList.map(function(p) { + if (MegaPromise.isAnotherPromise(p)) { + p = MegaPromise.asMegaPromiseProxy(p); + } + + if (d) { + console.assert(p instanceof MegaPromise); + } + return p; + }); + + var promise = new MegaPromise(); + + $.when.apply($, _jQueryPromisesList) + .done(function megaPromiseResProxy() { + promise.resolve(toArray.apply(null, arguments)); + }) + .fail(MegaPromise.getTraceableReject(promise)); + + return promise; +}; + +/** + * Implementation of Promise.all/$.when, with a little bit more flexible way of handling different type of promises + * passed in the `promisesList`. + * + * Warning: This method will return a "master promise" which will only get resolved when ALL promises had finished + * processing (e.g. changed their state to either resolved or rejected). The only case when the master promise will get, + * rejected is if there are still 'pending' promises in the `promisesList` after the `timeout` + * + * @param promisesList {Array} + * @param [timeout] {Integer} max ms to way for the master promise to be resolved before rejecting it + * @returns {MegaPromise} + */ +MegaPromise.allDone = function(promisesList, timeout) { + // IF empty, resolve immediately + if (promisesList.length === 0) { + return MegaPromise.resolve(); + } + var masterPromise = new MegaPromise(); + var totalLeft = promisesList.length; + var results = []; + results.__unpack$$$ = 1; + + var alwaysCb = function() { + results.push(toArray.apply(null, arguments)); + + if (--totalLeft === 0) { + masterPromise.resolve(results); + } + }; + + for (var i = promisesList.length; i--;) { + var v = promisesList[i]; + + if (MegaPromise.isAnotherPromise(v)) { + v = MegaPromise.asMegaPromiseProxy(v); + } + + if (v instanceof MegaPromise) { + v.done(alwaysCb); + v.fail(alwaysCb); + } + else { + if (d) { + console.warn('non-promise provided...', v); + } + alwaysCb(v); + } + } + + if (timeout) { + var timeoutTimer = setTimeout(function () { + masterPromise.reject(results); + }, timeout); + + masterPromise.always(function () { + clearTimeout(timeoutTimer); + }); + } + + return masterPromise; +}; + +/** + * alias of Promise.resolve, will create a new promise, resolved with the arguments passed to this method + * + * @returns {MegaPromise} + */ +MegaPromise.resolve = function() { + var p = new MegaPromise(); + p.resolve.apply(p, arguments); + + return p; +}; + + +/** + * alias of Promise.reject, will create a new promise, rejected with the arguments passed to this method + * + * @returns {MegaPromise} + */ +MegaPromise.reject = function() { + var p = new MegaPromise(); + p.reject.apply(p, arguments); + + return p; +}; + +/** + * Development helper tool to delay .resolve/.reject of a promise. + * + * @param ms {Number} milliseconds to delay the .resolve/.reject + */ +MegaPromise.prototype.fakeDelay = function(ms) { + var self = this; + if (self._fakeDelayEnabled) { + return; + } + + var origResolve = self.resolve; + var origReject = self.reject; + self.resolve = function() { + var args = arguments; + setTimeout(function() { + origResolve.apply(self, args); + }, ms); + + return self; + }; + self.reject = function() { + var args = arguments; + setTimeout(function() { + origReject.apply(self, args); + }, ms); + + return self; + }; + + self._fakeDelayEnabled = true; + + return self; +}; + +lazy(mega, 'requestStatusMonitor', () => { + 'use strict'; + const logger = new MegaLogger('RequestStatusMonitor'); + + return new class RequestStatusMonitor { + + constructor() { + this.running = false; + this.partialreqstat = false; + this.reqstatbackoff = 0; + } + + framing(data) { + + if (this.partialreqstat) { + + // we have unprocessed data - append new + const temp = new Uint8Array(this.partialreqstat.byteLength + data.byteLength); + temp.set(new Uint8Array(this.partialreqstat), 0); + temp.set(new Uint8Array(data), this.partialreqstat.byteLength); + this.partialreqstat = temp.buffer; + } + else { + this.partialreqstat = data; + } + + for (;;) { + const t = this.process(this.partialreqstat); + + if (!t) { + break; + } + + if (t === this.partialreqstat.byteLength) { + + this.partialreqstat = false; + break; + } + + // residual data present - chop + this.partialreqstat = this.partialreqstat.slice(t); + } + } + + process(ab) { + + // incomplete? + if (ab.byteLength < 2) { + return 0; + } + + let i; + const ba = new Uint8Array(ab); + const numusers = ba[0] + (ba[1] << 8); + + if (!numusers) { + + if (d) { + logger.log("*** No operation in progress"); + } + + loadingDialog.hideProgress(); + + return 2; + } + + let pos = 2 + 8 * numusers; + + // incomplete? + if (ab.byteLength < pos + 2) { + return 0; + } + + const numops = ba[pos] + (ba[pos + 1] << 8); + + // incomplete? + if (ab.byteLength < pos + 2 + numops + 3 * 4) { + return 0; + } + + let description = `User ${ab_to_base64(ab.slice(2, 10))}`; + + if (numusers > 1) { + description += ', affecting '; + + for (i = 1; i < numusers; i++) { + description += `${ab_to_base64(ab.slice(2 + 8 * i, 10 + 8 * i))},`; + } + } + + description += ' is executing a '; + + for (i = 0; i < numops; i++) { + if (i) { + description += '/'; + } + + if (String.fromCharCode(ba[pos + 2 + i]) === 'p') { + description += 'file or folder creation'; + } + else { + description += 'UNKNOWN operation'; + } + } + + pos += 2 + numops; + + const _int32lefromab = ab => ab[0] + (ab[1] << 8) + (ab[2] << 16) + (ab[3] << 24); + const start = _int32lefromab(ab.slice(pos, pos + 4)); + const curr = _int32lefromab(ab.slice(pos + 4, pos + 8)); + const end = _int32lefromab(ab.slice(pos + 8, pos + 12)); + const progress = curr / end * 100; + + description += ` since ${start}, ${progress}%`; + description += ` [${curr}/${end}]`; + + loadingDialog.showProgress(progress); + + if (d) { + logger.log(description); + } + + return pos + 3 * 4; + } + + retry() { + + // retry with capped randomised exponential backoff + if (this.reqstatbackoff < 30000) { + this.reqstatbackoff += this.reqstatbackoff + 500 + Math.random() * 500; + } + + this.running = false; + setTimeout(() => this.init(), this.reqstatbackoff); + } + + async start() { + const {u_sid} = window; + if (!u_sid) { + if (d) { + logger.warn('Session no longer valid.'); + } + this.running = false; + return; + } + + return fetch(`${apipath}cs/rs?sid=${u_sid}`) + .then((response) => { + + this.reqstatbackoff = 0; + const reader = response.body.getReader(); + + // Feed incoming chunked transfer encoded data. + return new ReadableStream({ + start: () => { + const retry = () => this.retry(); + + (async() => { + while (true) { + const {value, done} = await reader.read(); + if (done) { + onIdle(retry); + break; + } + this.framing(value); + } + })().catch(retry); + } + }); + }); + } + + init() { + if (!this.running) { + this.running = true; + + this.start() + .catch((ex) => { + logger.debug(ex); + this.retry(); + }); + } + } + }; +}); + +// FM IndexedDB layer (using Dexie.js - https://github.com/dfahlander/Dexie.js) +// (indexes and payload are obfuscated using AES ECB - FIXME: use CBC for the payload) + +// DB name is fm_ + encrypted u_handle (folder links are not cached yet - FIXME) +// init() checks for the presence of a valid _sn record and wipes the DB if none is found +// pending[] is an array of write transactions that will be streamed to the DB +// setting pending[]._sn opens a new transaction, so always set it last + +// - small updates run as a physical IndexedDB transaction +// - large updates are written on the fly, but with the _sn cleared, which +// ensures integrity, but invalidates the DB if the update can't complete + +// plainname: the base name that will be obfuscated using u_k +// schema: the Dexie database schema +// channelmap: { tablename : channel } - tables that do not map to channel 0 +// (only channel 0 operates under an _sn-triggered transaction regime) +function FMDB(plainname, schema, channelmap) { + 'use strict'; + + if (!(this instanceof FMDB)) { + return new FMDB(plainname, schema, channelmap); + } + + // DB Instance. + this.db = false; + + // DB name suffix, derived from u_handle and u_k + this.name = false; + + // DB schema - https://github.com/dfahlander/Dexie.js/wiki/TableSchema + this.schema = schema; + + // the table names contained in the schema (set at open) + this.tables = null; + + // if we have non-transactional (write-through) tables, they are mapped + // to channel numbers > 0 here + this.channelmap = channelmap || {}; + + // pending obfuscated writes [channel][tid][tablename][action_autoincrement] = [payloads] + this.pending = [[]]; + + // current channel tid being written to (via .add()/.del()) by the application code + this.head = [0]; + + // current channel tid being sent to IndexedDB + this.tail = [0]; + + // -1: idle, 0: deleted sn and writing (or write-through), 1: transaction open and writing + this.state = -1; + + // upper limit when pending data needs to start to get flushed. + this.limit = FMDB_FLUSH_THRESHOLD; + + // flag indicating whether there is a pending write + this.writing = false; + + // [tid, tablename, action] of .pending[] hash item currently being written + this.inflight = false; + + // the write is complete and needs be be committed (either because of _sn or write-through) + this.commit = false; + + // a DB error occurred, do not touch IndexedDB for the rest of the session + this.crashed = true; + + // DB invalidation process: callback and ready flag + this.inval_cb = false; + this.inval_ready = false; + + // whether multi-table transactions work (1) or not (0) (Apple, looking at you!) + this.cantransact = -1; + + // a flag to know if we have sn set in database. -1 = we don't know, 0 = not set, 1 = is set + this.sn_Set = -1; + + // @see {@link FMDB.compare} + this._cache = Object.create(null); + + // initialise additional channels + for (var i in this.channelmap) { + i = this.channelmap[i]; + this.head[i] = 0; + this.tail[i] = 0; + this.pending[i] = []; + } + + // protect user identity post-logout + this.name = ab_to_base64(this.strcrypt((plainname + plainname).substr(0, 16))); + + // console logging + this.logger = MegaLogger.getLogger('FMDB'); + this.logger.options.printDate = 'rad' in mega; + this.logger.options.levelColors = { + 'ERROR': '#fe000b', + 'DEBUG': '#005aff', + 'WARN': '#d66d00', + 'INFO': '#2ca100', + 'LOG': '#5b5352' + }; + + // if (d) Dexie.debug = "dexie"; +} + +tryCatch(function() { + 'use strict'; + + // Check for indexedDB 2.0 + binary keys support. + Object.defineProperty(FMDB, 'iDBv2', {value: indexedDB.cmp(new Uint8Array(0), 0)}); +}, false)(); + +// options +FMDB.$useBinaryKeys = FMDB.iDBv2 ? 1 : 0; +FMDB.$usePostSerialz = 2; + +// @private increase to drop/recreate *all* databases. +FMDB.version = 1; + +// @private +Object.defineProperty(FMDB, 'capabilities', { + value: FMDB.iDBv2 << 4 | (FMDB.$useBinaryKeys | FMDB.$usePostSerialz /* | ... */) +}); +// @private persistence prefix +Object.defineProperty(FMDB, 'perspex', {value: '.' + FMDB.version + FMDB.capabilities.toString(32)}); + +// initialise cross-tab access arbitration identity +FMDB.prototype.identity = Date.now() + Math.random().toString(26); + +/** @property fmdb.memoize */ +lazy(FMDB.prototype, 'memoize', () => { + 'use strict'; + // leave cloud nodes in memory?.. + return parseInt(localStorage.cnize) !== 0; +}); + +// set up and check fm DB for user u +// calls result(sn) if found and sn present +// wipes DB an calls result(false) otherwise +FMDB.prototype.init = function fmdb_init(result, wipe) { + "use strict"; + + var fmdb = this; + var dbpfx = 'fm30_'; + var slave = !mBroadcaster.crossTab.master; + + fmdb.crashed = false; + fmdb.inval_cb = false; + fmdb.inval_ready = false; + + // prefix database name with options/capabilities + dbpfx += FMDB.perspex.substr(1); + + // Make the database name dependent on the current schema. + dbpfx += MurmurHash3(JSON.stringify(this.schema), 0x6f01f).toString(16); + + // Notify completion invoking the provided callback + var resolve = function(sn, error) { + fmdb.opening = false; + + if (typeof result === 'function') { + if (error) { + fmdb.crashed = 2; + fmdb.logger.warn('Marking DB as crashed.', error); + + if (fmdb.db) { + const {db} = fmdb; + queueMicrotask(() => db.delete()); + } + + fmdb.db = null; + fmdb.evento(`$init:${error}`); + } + + result(sn); + + // prevent this from being called twice.. + result = null; + } + }; + + // Catch errors, mark DB as crashed, and move forward without indexedDB support + var reject = function(e) { + resolve(false, e || EFAILED); + }; + + // Database opening logic + var openDataBase = function() { + // start inter-tab heartbeat + // fmdb.beacon(); + fmdb.db = new Dexie(dbpfx + fmdb.name, {chromeTransactionDurability: 'relaxed'}); + + // There is some inconsistency in Chrome 58.0.3029.110 that could cause indexedDB OPs to take ages... + setTimeout(function() { + // if not resolved already... + if (result !== null) { + if (d) { + fmdb.logger.warn('Opening the database timed out.'); + } + + reject(ETEMPUNAVAIL); + } + }, 15000); + + var dbSchema = {}; + if (!Array.isArray(fmdb.schema)) { + fmdb.schema = [fmdb.schema]; + } + + for (var i = 0; i < fmdb.schema.length; i++) { + var schema = fmdb.schema[i]; + for (var k in schema) { + if (schema.hasOwnProperty(k)) { + dbSchema[k] = schema[k]; + } + } + fmdb.db.version(i + 1).stores(dbSchema); + } + fmdb.tables = Object.keys(dbSchema); + + fmdb.db.open().then(function() { + if (fmdb.crashed) { + // Opening timed out. + return; + } + fmdb.get('_sn').always(function(r) { + if (!wipe && r[0] && r[0].length === 11) { + if (d) { + fmdb.logger.log("DB sn: " + r[0]); + } + resolve(r[0]); + } + else if (slave || fmdb.crashed) { + fmdb.crashed = 2; + resolve(false); + } + else { + if (d) { + fmdb.logger.log("No sn found in DB, wiping..."); + } + fmdb.db.delete().then(function() { + fmdb.db.open().then(function() { + resolve(false); + }).catch(reject); + }).catch(reject); + } + }); + }).catch(Dexie.MissingAPIError, function(e) { + fmdb.logger.error("IndexedDB unavailable", e); + reject(e); + }).catch(reject); + }; + openDataBase = tryCatch(openDataBase, reject); + + // Enumerate databases and collect those not prefixed with 'dbpfx' (which is the current format) + var collectDataBaseNames = function() { + var timer; + var todrop = []; + var done = function() { + clearTimeout(timer); + fmdb.dropall(todrop, openDataBase); + done = null; + }; + + if (d) { + fmdb.logger.log('Collecting database names...'); + } + + Dexie.getDatabaseNames(function(r) { + if (sessionStorage.fmdbDropALL) { + todrop = r; + fmdb.logger.warn('drop all...', r); + return; + } + for (var i = r.length; i--;) { + // drop only fmX related databases and skip slkv's + if (r[i][0] !== '$' && r[i].substr(0, dbpfx.length) !== dbpfx + && r[i].substr(-FMDB.perspex.length) !== FMDB.perspex) { + + todrop.push(r[i]); + } + } + }).finally(function() { + if (d) { + if (todrop.length) { + fmdb.logger.log("Deleting obsolete DBs: " + todrop.join(', ')); + } + else { + fmdb.logger.log('No databases collected...'); + } + } + + if (done) { + done(); + } + }); + + timer = setTimeout(function() { + if (d) { + fmdb.logger.warn('Dexie.getDatabaseNames timed out...'); + } + done(); + }, 3000); + }; + collectDataBaseNames = tryCatch(collectDataBaseNames, openDataBase); + + // Let's start the fun... + if (fmdb.crashed) { + resolve(false); + } + else if (!fmdb.db) { + if (fmdb.opening) { + fmdb.logger.error('Something went wrong... a DB is already opening...'); + } + else { + // Collect obsolete databases to remove them, and proceed opening our current database + collectDataBaseNames(); + + fmdb.opening = true; + } + } + else { + console.error('fmdb.db is already set...'); + } +}; + +// send failure event +FMDB.prototype.evento = function(message) { + 'use strict'; + message = String(message).split('\n')[0].substr(0, 380); + if (message.includes('not allow mutations')) { + // Ignore spammy Firefox in PBM. + return; + } + const eid = 99724; + const once = !eventlog.sent || eventlog.sent[eid] > 0; + + eventlog(eid, message, once); + + queueMicrotask(() => { + if (eventlog.sent) { + eventlog.sent[eid] = 1; + } + }); +}; + +// drop database +FMDB.prototype.drop = async function fmdb_drop() { + 'use strict'; + + if (this.db) { + await this.invalidate(); + await this.db.delete().catch(dump); + this.db = null; + } +}; + +// drop random databases +FMDB.prototype.dropall = function fmdb_dropall(dbs, cb) { + if (!dbs || !dbs.length) { + cb(); + } + else { + var fmdb = this; + var db = new Dexie(dbs.pop()); + var next = function(ev) { + next = function() {}; + if (ev && ev.type === 'blocked') { + fmdb.logger.warn('Cannot delete blocked indexedDB: ' + db.name); + } + fmdb.dropall(dbs, cb); + }; + + // If the DB is blocked, Dexie will try to delete it as soon there are no locks on it. + // However, we'll resolve immediately without waiting for it, since that will happen in + // an undetermined amount of time which needless to say is an odd UX experience... + db.on('blocked', next); + + db.delete().then(function() { + fmdb.logger.log("Deleted IndexedDB " + db.name); + }).catch(function(err){ + fmdb.logger.error("Unable to delete IndexedDB " + db.name, err); + }).finally(function() { + next(); + }); + } +}; + +// check if data for table is currently being written. +FMDB.prototype.hasPendingWrites = function(table) { + 'use strict'; + + if (!table) { + return this.writing; + } + var ch = this.channelmap[table] || 0; + var ps = this.pending[ch][this.tail[ch]] || false; + + return this.tail[ch] !== this.head[ch] && ps[table]; +}; + +/** check whether we're busy with too many pending writes */ +Object.defineProperty(FMDB.prototype, 'busy', { + get: function() { + 'use strict'; + const limit = BACKPRESSURE_FMDB_LIMIT; + const pending = this.pending[0]; + + let count = 0; + let i = pending.length; + while (i--) { + const t = pending[i] && pending[i].f; + + for (let {h} = t || !1; h >= 0; h--) { + if (t[h]) { + count += t[h].size || t[h].length || 0; + if (count > limit) { + if (d) { + console.debug('fmdb.busy', count); + } + return true; + } + } + } + } + return false; + } +}); + +// enqueue a table write - type 0 == addition, type 1 == deletion +// IndexedDB activity is triggered once we have a few thousand of pending rows or the sn +// (writing the sn - which is done last - completes the transaction and starts a new one) +FMDB.prototype.enqueue = function fmdb_enqueue(table, row, type) { + "use strict"; + + let c; + let lProp = 'size'; + const ch = this.channelmap[table] || 0; + + // if needed, create new transaction at index fmdb.head + if (!(c = this.pending[ch][this.head[ch]])) { + c = this.pending[ch][this.head[ch]] = Object.create(null); + } + + // if needed, create new hash of modifications for this table + // .h = head, .t = tail (last written to the DB) + if (!c[table]) { + // even indexes hold additions, odd indexes hold deletions + c[table] = { t : -1, h : type }; + c = c[table]; + } + else { + // (we continue to use the highest index if it is of the requested type + // unless it is currently in flight) + // increment .h(head) if needed + c = c[table]; + if ((c.h ^ type) & 1) c.h++; + } + + if (c[c.h]) { + if (this.useMap[table]) { + if (type & 1) { + c[c.h].add(row); + } + else { + c[c.h].set(row.h, row); + } + } + else { + c[c.h].push(row); + lProp = 'length'; + } + } + else if (this.useMap[table]) { + if (type & 1) { + c[c.h] = new Set([row]); + } + else { + c[c.h] = new Map([[row.h, row]]); + } + } + else { + c[c.h] = [row]; + lProp = 'length'; + } + + // force a flush when a lot of data is pending or the _sn was updated + // also, force a flush for non-transactional channels (> 0) + if (ch || table[0] === '_' || c[c.h][lProp] > this.limit) { + // the next write goes to a fresh transaction + if (!ch) { + fmdb.head[ch]++; + } + fmdb.writepending(fmdb.head.length - 1); + } +}; + +/** + * Serialize data before storing it into indexedDB + * @param {String} table The table this dta belongs to + * @param {Object} row Object to serialize. + * @returns {Object} The input data serialized + */ +FMDB.prototype.serialize = function(table, row) { + 'use strict'; + + if (row.d) { + if (this.stripnode[table]) { + // this node type is stripnode-optimised: temporarily remove redundant elements + // to create a leaner JSON and save IndexedDB space + var j = row.d; // this references the live object! + var t = this.stripnode[table](j); // remove overhead + row.d = JSON.stringify(j); // store lean result + + // Restore overhead (In Firefox, Object.assign() is ~63% faster than for..in) + Object.assign(j, t); + } + else { + // otherwise, just stringify it all + row.d = JSON.stringify(row.d); + } + } + + // obfuscate index elements as base64-encoded strings, payload as ArrayBuffer + for (var i in row) { + if (i === 'd') { + row.d = this.strcrypt(row.d); + } + else if (table !== 'f' || i !== 't') { + row[i] = this.toStore(row[i]); + } + } + + return row; +}; + +FMDB.prototype.getError = function(ex) { + 'use strict'; + const error = ex && ex.inner || ex || !1; + const message = `~${error.name || ''}: ${error.message || ex && ex.message || ex}`; + return {error, message}; +}; + +FMDB.prototype._transactionErrorHandled = function(ch, ex) { + 'use strict'; + const tag = '$fmdb$fail$state'; + const state = sessionStorage[tag] | 0; + const {error, message} = this.getError(ex); + + let res = false; + let eventMsg = `$wptr:${message.substr(0, 99)}`; + + if (this.inflight) { + if (d) { + console.assert(this.inflight instanceof Error); + } + if (this.inflight instanceof Error) { + eventMsg += ` >> ${this.inflight}`; + } + this.inflight = false; + } + this.evento(eventMsg); + + if (mega.is.loading && (error.name === 'TimeoutError' || error.name === 'AbortError')) { + if (d) { + this.logger.info("Transaction %s, retrying...", error.name, ex); + + if (mega.loadReport) { + this.logger.info('loadReport', JSON.stringify(mega.loadReport)); + } + } + + res = true; + sessionStorage[tag] = 1 + state; + + switch (state) { + case 0: + case 1: + case 2: + if (!this.crashed) { + this.state = -1; + this.writing = 0; + this.writepending(ch); + + if (mega.loadReport && mega.loadReport.invisibleTime > 0) { + sessionStorage[tag]--; + } + break; + } + /* fallthrough */ + case 3: + if (!mega.nobp) { + localStorage.nobp = 1; + fm_forcerefresh(true); + break; + } + /* fallthrough */ + case 4: + fm_fullreload(null, 'DB-crash'); + break; + default: + res = false; // let the DB crash. + break; + } + } + + return res; +}; + +// FIXME: auto-retry smaller transactions? (need stats about transaction failures) +// ch - channel to operate on +FMDB.prototype.writepending = function fmdb_writepending(ch) { + "use strict"; + + // exit loop if we ran out of pending writes or have crashed + if (this.inflight || ch < 0 || this.crashed || this.writing) { + return; + } + + // signal when we start/finish to save stuff + if (!ch) { + if (this.tail[ch] === this.head[ch] - 1) { + document.documentElement.classList.add('fmdb-working'); + } + else if (this.tail[ch] === this.head[ch]) { + document.documentElement.classList.remove('fmdb-working'); + this.pending[ch] = this.pending[ch].filter(Boolean); + this.tail[ch] = this.head[ch] = 0; + this._cache = Object.create(null); + } + } + + // iterate all channels to find pending writes + if (!this.pending[ch][this.tail[ch]]) { + return this.writepending(ch - 1); + } + + if (this.tail[ch] >= this.head[ch]) { + return; + } + + var fmdb = this; + + if (d > 1) { + fmdb.logger.warn('writepending()', ch, fmdb.state, + Object(fmdb.pending[0][fmdb.tail[0]])._sn, fmdb.cantransact); + } + + if (!ch && fmdb.state < 0 && fmdb.cantransact) { + + // if the write job is on channel 0 and already complete (has _sn set), + // we execute it in a single transaction without first clearing sn + fmdb.state = 1; + fmdb.writing = 1; + fmdb.db.transaction('rw!', fmdb.tables, () => { + if (d) { + fmdb.logger.info("Transaction started"); + console.time('fmdb-transaction'); + } + fmdb.commit = false; + fmdb.cantransact = 1; + + if (fmdb.sn_Set && !fmdb.pending[0][fmdb.tail[0]]._sn && currsn) { + fmdb.db._sn.clear().then(function() { + fmdb.sn_Set = 0; + dispatchputs(); + }); + } + else { + dispatchputs(); + } + }).then(() => { + // transaction completed: delete written data + delete fmdb.pending[0][fmdb.tail[0]++]; + + if (d) { + fmdb.logger.log("HEAD = " + fmdb.head[0] + " --- Tail = " + fmdb.tail[0]); + } + + fmdb.state = -1; + if (d) { + fmdb.logger.info("Transaction committed"); + console.timeEnd('fmdb-transaction'); + } + fmdb.writing = 0; + fmdb.writepending(ch); + }).catch((ex) => { + if (d) { + console.timeEnd('fmdb-transaction'); + } + + if (fmdb.cantransact < 0) { + fmdb.logger.error("Your browser's IndexedDB implementation is bogus, disabling transactions."); + fmdb.cantransact = 0; + fmdb.writing = 0; + fmdb.writepending(ch); + } + else if (!fmdb._transactionErrorHandled(ch, ex)) { + // FIXME: retry instead? need statistics. + fmdb.logger.error("Transaction failed, marking DB as crashed", ex); + fmdb.state = -1; + fmdb.invalidate(); + } + }); + } + else { + if (d) { + console.error('channel 1 Block ... invoked'); + } + // we do not inject write-through operations into a live transaction + if (fmdb.state > 0) { + dispatchputs(); + } + else { + // the job is incomplete or non-transactional - set state to "executing + // write without transaction" + fmdb.state = 0; + + if (ch) { + // non-transactional channel: go ahead and write + + dispatchputs(); + } + else { + // mark db as "writing" until the sn cleaning have completed, + // this flag will be reset on dispatchputs() once fmdb.commit is set + fmdb.writing = 2; + // we clear the sn (the new sn will be written as the last action in this write job) + // unfortunately, the DB will have to be wiped in case anything goes wrong + var sendOperation = function() { + fmdb.commit = false; + fmdb.writing = 3; + + dispatchputs(); + }; + if (currsn) { + fmdb.db._sn.clear().then( + function() { + if (d) { + console.error('channel 1 + Sn cleared'); + } + fmdb.sn_Set = 0; + sendOperation(); + } + ).catch(function(e) { + fmdb.logger.error("SN clearing failed, marking DB as crashed", e); + fmdb.state = -1; + fmdb.invalidate(); + + fmdb.evento(`$wpsn:${e}`); + }); + } + else { + sendOperation(); + } + + } + } + } + + // start writing all pending data in this transaction to the DB + // conclude/commit the (virtual or real) transaction once _sn has been written + function dispatchputs() { + if (fmdb.inflight) return; + + if (fmdb.commit) { + // invalidation commit completed? + if (fmdb.inval_ready) { + if (fmdb.inval_cb) { + // fmdb.db.close(); + fmdb.inval_cb(); // caller must not reuse fmdb object + } + return; + } + + // the transaction is complete: delete from pending + if (!fmdb.state) { + // we had been executing without transaction protection, delete the current + // transaction and try to dispatch the next one immediately + if (!ch) delete fmdb.pending[0][fmdb.tail[0]++]; + + fmdb.commit = false; + fmdb.state = -1; + fmdb.writing = false; + fmdb.writepending(ch); + } + + // if we had a real IndexedDB transaction open, it will commit + // as soon as the browser main thread goes idle + + // I wont return, because this is relying on processing _sn table as the last + // table in the current pending operations.. + + // return; + } + + var tablesremaining = false; + + // this entirely relies on non-numeric hash keys being iterated + // in the order they were added. FIXME: check if always true + for (var table in fmdb.pending[ch][fmdb.tail[ch]]) { // iterate through pending tables, _sn last + var t = fmdb.pending[ch][fmdb.tail[ch]][table]; + + // do we have at least one update pending? (could be multiple) + if (t[t.h]) { + tablesremaining = true; + + // locate next pending table update (even/odd: put/del) + while (t.t <= t.h && !t[t.t]) t.t++; + + // all written: advance head + if (t.t == t.h) t.h++; + + if (fmdb.crashed && !(t.t & 1)) { + if (d) { + fmdb.logger.warn('The DB is crashed, halting put...'); + } + return; + } + + if (d) { + fmdb.logger.debug("DB %s with %s element(s) on table %s, channel %s, state %s", + t.t & 1 ? 'del' : 'put', t[t.t].size || t[t.t].length, table, ch, fmdb.state); + } + + // if we are on a non-transactional channel or the _sn is being updated, + // request a commit after the operation completes. + if (ch || table[0] == '_') { + fmdb.commit = true; + fmdb.sn_Set = 1; + } + + // record what we are sending... + fmdb.inflight = true; + + // is this an in-band _sn invalidation, and do we have a callback set? arm it. + if (fmdb.inval_cb && t.t & 1 && table[0] === '_') { + fmdb.inval_ready = true; + } + + // ...and send update off to IndexedDB for writing + write(table, t[t.t], t.t++ & 1 ? 'bulkDelete' : 'bulkPut'); + + // we don't send more than one transaction (looking at you, Microsoft!) + if (!fmdb.state) { + fmdb.inflight = t; + return; + } + } + else { + // if we are non-transactional and all data has been written for this + // table, we can safely delete its record + if (!fmdb.state && t.t == t.h) { + delete fmdb.pending[ch][fmdb.tail[ch]][table]; + } + } + } + + // if we are non-transactional, this deletes the "transaction" when done + // (as commit will never be set) + if (!fmdb.state && !tablesremaining) { + delete fmdb.pending[ch][fmdb.tail[ch]]; + + fmdb.writing = null; + fmdb.writepending(fmdb.head.length - 1); + } + } + + // bulk write operation + function write(table, data, op) { + if ('size' in data) { + // chrome90: 5ms per 1m + data = [...data.values()]; + } + const limit = window.fminitialized ? fmdb.limit >> 3 : data.length + 1; + + if (FMDB.$usePostSerialz) { + if (d) { + console.time('fmdb-serialize'); + } + + if (op === 'bulkPut') { + if (!data[0].d || fmdb._raw(data[0])) { + for (let x = data.length; x--;) { + fmdb.serialize(table, data[x]); + } + } + else if (d) { + fmdb.logger.debug('No data serialization was needed, retrying?', data); + } + } + else if (!(data[0] instanceof ArrayBuffer)) { + for (let j = data.length; j--;) { + data[j] = fmdb.toStore(data[j]); + } + } + + if (d) { + console.timeEnd('fmdb-serialize'); + } + } + + if (data.length < limit) { + fmdb.db[table][op](data).then(writeend).catch(writeerror); + return; + } + + var idx = 0; + (function bulkTick() { + var rows = data.slice(idx, idx += limit); + + if (rows.length) { + if (d > 1) { + var left = idx > data.length ? 0 : data.length - idx; + fmdb.logger.log('%s for %d rows, %d remaining...', op, rows.length, left); + } + fmdb.db[table][op](rows).then(bulkTick).catch(writeerror); + } + else { + data = undefined; + writeend(); + } + })(); + } + + // event handler for bulk operation completion + function writeend() { + if (d) { + fmdb.logger.log('DB write successful' + + (fmdb.commit ? ' - transaction complete' : '') + ', state: ' + fmdb.state); + } + + // if we are non-transactional, remove the written data from pending + // (we have to keep it for the transactional case because it needs to + // be visible to the pending updates search that getbykey() performs) + if (!fmdb.state) { + delete fmdb.inflight[fmdb.inflight.t - 1]; + fmdb.inflight = false; + + // in non-transactional loop back when the browser is idle so that we'll + // prevent unnecessarily hanging the main thread and short writes... + if (!fmdb.commit) { + if (loadfm.loaded) { + onIdle(dispatchputs); + } + else { + setTimeout(dispatchputs, 2600); + } + return; + } + } + + // loop back to write more pending data (or to commit the transaction) + fmdb.inflight = false; + dispatchputs(); + } + + // event handler for bulk operation error + function writeerror(ex) { + if (ex instanceof Dexie.BulkError) { + fmdb.logger.error('Bulk operation error, %s records failed.', ex.failures.length, ex); + } + else { + fmdb.logger.error('Unexpected error in bulk operation...', ex); + } + + if (fmdb.state > 0 && !fmdb.crashed) { + if (d) { + fmdb.logger.info('We are transactional, attempting to retry...'); + } + fmdb.inflight = ex; + return; + } + + fmdb.state = -1; + fmdb.inflight = false; + + // If there is an invalidation request pending, dispatch it. + if (fmdb.inval_cb) { + console.assert(fmdb.crashed, 'Invalid state, the DB must be crashed already...'); + fmdb.inval_cb(); + } + else { + fmdb.invalidate(); + } + + if (d) { + fmdb.logger.warn('Marked DB as crashed...', ex.name); + } + + fmdb.evento(ex); + } +}; + +/** + * Encrypt Unicode string with user's master key + * @param {String} s The unicode string + * @returns {ArrayBuffer} encrypted buffer + * @todo use CBC instead of ECB! + */ +FMDB.prototype.strcrypt = function fmdb_strcrypt(s) { + "use strict"; + + if (d && String(s).length > 0x10000) { + (this.logger || console) + .warn('The data you are trying to write is too large and will degrade the performance...', [s]); + } + + var len = (s = '' + s).length; + var bytes = this.utf8length(s); + if (bytes === len) { + var a32 = new Int32Array(len + 3 >> 2); + for (var i = len; i--;) { + a32[i >> 2] |= s.charCodeAt(i) << 8 * (i & 3); + } + return this._crypt(u_k_aes, a32); + } + + return this._crypt(u_k_aes, this.to8(s, bytes)); +}; + +/** + * Decrypt buffer with user's master key + * @param {ArrayBuffer} buffer Encrypted buffer + * @returns {String} unicode string + * @see {@link FMDB.strcrypt} + */ +FMDB.prototype.strdecrypt = function fmdb_strdecrypt(buffer) { + "use strict"; + + if (buffer.byteLength) { + var s = this.from8(this._decrypt(u_k_aes, buffer)); + for (var i = s.length; i--;) { + if (s.charCodeAt(i)) { + return s.substr(0, i + 1); + } + } + } + return ''; +}; + +// @private legacy version +FMDB.prototype.strcrypt0 = function fmdb_strcrypt(s) { + "use strict"; + + if (d && String(s).length > 0x10000) { + console.warn('The data you are trying to write is too huge and will degrade the performance...'); + } + + var a32 = str_to_a32(to8(s)); + for (var i = (-a32.length) & 3; i--; ) a32.push(0); + return a32_to_ab(encrypt_key(u_k_aes, a32)).buffer; +}; + +// @private legacy version +FMDB.prototype.strdecrypt0 = function fmdb_strdecrypt(ab) { + "use strict"; + + if (!ab.byteLength) return ''; + var a32 = []; + var dv = new DataView(ab); + for (var i = ab.byteLength/4; i--; ) a32[i] = dv.getUint32(i*4); + var s = from8(a32_to_str(decrypt_key(u_k_aes, a32))); + for (var i = s.length; i--; ) if (s.charCodeAt(i)) return s.substr(0, i+1); +}; + + +// TODO: @lp/@diego we need to move this to some other place... +FMDB._mcfCache = {}; + +// tables storing pending writes as Map() instances. +FMDB.prototype.useMap = Object.assign(Object.create(null), {f: true, tree: true}); + +// remove fields that are duplicated in or can be inferred from the index to reduce database size +FMDB.prototype.stripnode = Object.freeze({ + f : function(f) { + 'use strict'; + var t = { h : f.h, t : f.t, s : f.s }; + + // Remove pollution from the ufs-size-cache + // 1. non-folder nodes does not need tb/td/tf + if (!f.t) { + delete f.tb; + delete f.td; + delete f.tf; + } + // 2. remove Zero properties from versioning nodes inserted everywhere... + if (f.tvb === 0) delete f.tvb; + if (f.tvf === 0) delete f.tvf; + + // Remove properties used as indexes + delete f.h; + delete f.t; + delete f.s; + + t.ts = f.ts; + delete f.ts; + + if (f.hash) { + t.hash = f.hash; + delete f.hash; + } + + if (f.fa) { + t.fa = f.fa; + delete f.fa; + } + + // Remove other garbage + if ('seen' in f) { + t.seen = f.seen; + delete f.seen; // inserted by the dynlist + } + + if (f.shares) { + t.shares = f.shares; + delete f.shares; // will be populated from the s table + } + + if (f.fav !== undefined && !(f.fav | 0)) { + delete f.fav; + } + if (f.lbl !== undefined && !(f.lbl | 0)) { + delete f.lbl; + } + + if (f.p) { + t.p = f.p; + delete f.p; + } + + if (f.ar) { + t.ar = f.ar; + delete f.ar; + } + + if (f.u === u_handle) { + t.u = f.u; + f.u = '~'; + } + + return t; + }, + + tree: function(f) { + 'use strict'; + var t = {h: f.h}; + delete f.h; + if (f.td !== undefined && !f.td) { + delete f.td; + } + if (f.tb !== undefined && !f.tb) { + delete f.tb; + } + if (f.tf !== undefined && !f.tf) { + delete f.tf; + } + if (f.tvf !== undefined && !f.tvf) { + delete f.tvf; + } + if (f.tvb !== undefined && !f.tvb) { + delete f.tvb; + } + if (f.lbl !== undefined && !(f.lbl | 0)) { + delete f.lbl; + } + return t; + }, + + ua: function(ua) { + 'use strict'; + delete ua.k; + }, + + u: function(usr) { + 'use strict'; + delete usr.u; + delete usr.ats; + delete usr.name; + delete usr.avatar; + delete usr.presence; + delete usr.lastName; + delete usr.firstName; + delete usr.shortName; + delete usr.presenceMtime; + }, + + mcf: function(mcf) { + 'use strict'; + // mcf may contain 'undefined' values, which should NOT be set, otherwise they may replace the mcfCache + var cache = {}; + var keys = ['id', 'cs', 'g', 'u', 'ts', 'ct', 'ck', 'f', 'm', 'mr']; + for (var idx = keys.length; idx--;) { + var k = keys[idx]; + + if (mcf[k] !== undefined) { + cache[k] = mcf[k]; + } + } + // transient properties, that need to be resetted + cache.n = mcf.n || undefined; + + FMDB._mcfCache[cache.id] = Object.assign({}, FMDB._mcfCache[mcf.id], cache); + Object.assign(mcf, FMDB._mcfCache[cache.id]); + + var t = {id: mcf.id, ou: mcf.ou, n: mcf.n, url: mcf.url}; + delete mcf.id; + delete mcf.ou; + delete mcf.url; + delete mcf.n; + + if (mcf.g === 0) { + t.g = 0; + delete mcf.g; + } + if (mcf.m === 0) { + t.m = 0; + delete mcf.m; + } + if (mcf.f === 0) { + t.f = 0; + delete mcf.f; + } + if (mcf.cs === 0) { + t.cs = 0; + delete mcf.cs; + } + + if (mcf.u) { + t.u = mcf.u; + mcf.u = ''; + + for (var i = t.u.length; i--;) { + mcf.u += t.u[i].u + t.u[i].p; + } + } + + return t; + } +}); + +// re-add previously removed index fields to the payload object +FMDB.prototype.restorenode = Object.freeze({ + ok : function(ok, index) { + 'use strict'; + ok.h = index.h; + }, + + f : function(f, index) { + 'use strict'; + f.h = index.h; + f.p = index.p; + f.ts = index.t < 0 ? 1262304e3 - index.t : index.t; + if (index.c) { + f.hash = index.c; + } + if (index.fa) { + f.fa = index.fa; + } + if (index.s < 0) f.t = -index.s; + else { + f.t = 0; + f.s = parseFloat(index.s); + } + if (!f.ar && f.k && typeof f.k == 'object') { + f.ar = Object.create(null); + } + if (f.u === '~') { + f.u = u_handle; + } + }, + tree : function(f, index) { + 'use strict'; + f.h = index.h; + }, + + ph : function(ph, index) { + 'use strict'; + ph.h = index.h; + }, + + ua : function(ua, index) { + 'use strict'; + ua.k = index.k; + }, + + u: function(usr, index) { + 'use strict'; + usr.u = index.u; + }, + + h: function(out, index) { + 'use strict'; + out.h = index.h; + out.hash = index.c; + }, + + mk : function(mk, index) { + 'use strict'; + mk.h = index.h; + }, + + mcf: function(mcf, index) { + 'use strict'; + mcf.id = index.id; + + mcf.m = mcf.m || 0; + mcf.g = mcf.g || 0; + mcf.f = mcf.f || 0; + mcf.cs = mcf.cs || 0; + + if (typeof mcf.u === 'string') { + var users = []; + for (var i = 0; i < mcf.u.length; i += 12) { + users.push({ + p: mcf.u[11 + i] | 0, + u: mcf.u.substr(i, 11) + }); + } + mcf.u = users; + } + + FMDB._mcfCache[mcf.id] = mcf; + } +}); + +// enqueue IndexedDB puts +// sn must be added last and effectively (mostly actually) "commits" the "transaction" +// the next addition will then start a new "transaction" +// (large writes will not execute as an IndexedDB transaction because IndexedDB can't) +FMDB.prototype.add = function fmdb_add(table, row) { + "use strict"; + + if (this.crashed) return; + + this.enqueue(table, row, 0); +}; + +// enqueue IndexedDB deletions +FMDB.prototype.del = function fmdb_del(table, index) { + "use strict"; + + if (this.crashed) return; + + this.enqueue(table, index, 1); +}; + +// non-transactional read with subsequent deobfuscation, with optional prefix filter +// (must NOT be used for dirty reads - use getbykey() instead) +FMDB.prototype.get = async function fmdb_get(table, chunked) { + "use strict"; + if (this.crashed > 1) { + // a read operation failed previously + return []; + } + + if (d) { + this.logger.log("Fetching entire table %s...", table, chunked ? '(chunked)' : ''); + } + + if (chunked) { + const limit = 8192; + const {keyPath} = this.db[table].schema.primKey; + + let res = await this.db[table].orderBy(keyPath).limit(limit).toArray(); + while (res.length) { + let last = res[res.length - 1][keyPath].slice(0); + + this.normaliseresult(table, res); + last = chunked(res, last) || last; + + res = res.length >= limit && await this.db[table].where(keyPath).above(last).limit(limit).toArray(); + } + return; + } + + const r = await this.db[table].toArray().catch(dump); + if (r) { + this.normaliseresult(table, r); + } + else { + if (d && !this.crashed) { + this.logger.error("Read operation failed, marking DB as read-crashed"); + } + await this.invalidate(1); + } + + return r || []; +}; + +FMDB.prototype.normaliseresult = function fmdb_normaliseresult(table, r) { + "use strict"; + + var t; + for (var i = r.length; i--; ) { + try { + if (!r[i]) { + // non-existing bulkGet result. + r.splice(i, 1); + continue; + } + + if (this._raw(r[i])) { + // not encrypted. + if (d > 1) { + console.assert(FMDB.$usePostSerialz); + } + r[i] = r[i].d; + continue; + } + + t = r[i].d ? JSON.parse(this.strdecrypt(r[i].d)) : {}; + + if (this.restorenode[table]) { + // restore attributes based on the table's indexes + for (var p in r[i]) { + if (p !== 'd' && (table !== 'f' || p !== 't')) { + r[i][p] = this.fromStore(r[i][p]); + } + } + this.restorenode[table](t, r[i]); + } + + r[i] = t; + } + catch (ex) { + if (d) { + this.logger.error("IndexedDB corruption: " + this.strdecrypt(r[i].d), ex); + } + r.splice(i, 1); + } + } +}; + +// non-transactional read with subsequent deobfuscation, with optional key filter +// (dirty reads are supported by scanning the pending writes after the IndexedDB read completes) +// anyof and where are mutually exclusive, FIXME: add post-anyof where filtering? +// eslint-disable-next-line complexity +FMDB.prototype.getbykey = async function fmdb_getbykey(table, index, anyof, where, limit) { + 'use strict'; + let bulk = false; + let options = false; + if (typeof index !== 'string') { + options = index; + index = options.index; + anyof = anyof || options.anyof; + where = where || options.where; + limit = limit || options.limit; + } + + if (this.crashed > 1 || anyof && !anyof[1].length) { + return []; + } + + const ch = this.channelmap[table] || 0; + const writing = this.writing || this.head[ch] !== this.tail[ch]; + const debug = d && (x => (m, ...a) => this.logger.warn(`[${x}] ${m}`, ...a))(Math.random().toString(28).slice(-7)); + + if (debug) { + debug(`Fetching table ${table}...${writing ? '\u26a1' : ''}`, options || where || anyof && anyof.flat()); + } + + let i = 0; + let t = this.db[table]; + + if (!index) { + // No index provided, fallback to primary key + index = t.schema.primKey.keyPath; + } + + if (anyof) { + // encrypt all values in the list + for (i = anyof[1].length; i--;) { + anyof[1][i] = this.toStore(anyof[1][i]); + } + + if (anyof[1].length > 1) { + if (!limit && anyof[0] === t.schema.primKey.keyPath) { + bulk = true; + t = t.bulkGet(anyof[1]); + } + else if (options.offset) { + t = t.where(anyof[0]).anyOf(anyof[1]); + } + else { + let flat = a => a.flat(); + if (limit) { + flat = (lmt => a => a.flat().slice(0, lmt))(limit); + limit = false; + } + t = Promise.all(anyof[1].map(k => t.where(anyof[0]).equals(k).toArray())).then(flat); + } + } + else { + t = t.where(anyof[0]).equals(anyof[1][0]); + } + } + else if (options.query) { + // Perform custom user-provided query + t = options.query(t); + } + else if (where) { + for (let k = where.length; k--;) { + // encrypt the filter values (logical AND is commutative, so we can reverse the order) + if (typeof where[k][1] === 'string') { + if (!this._cache[where[k][1]]) { + this._cache[where[k][1]] = this.toStore(where[k][1]); + } + where[k][1] = this._cache[where[k][1]]; + } + + // apply filter criterion + if (i) { + t = t.and(where[k][0]); + } + else { + t = t.where(where[k][0]); + i = 1; + } + + t = t.equals(where[k][1]); + } + } + + if (options.offset) { + t = t.offset(options.offset); + } + + if (limit) { + t = t.limit(limit); + } + + t = options.sortBy ? t.sortBy(options.sortBy) : t.toArray ? t.toArray() : t; + + // eslint-disable-next-line complexity + const r = await t.then((r) => { + // now scan the pending elements to capture and return unwritten updates + // FIXME: typically, there are very few or no pending elements - + // determine if we can reduce overall CPU load by replacing the + // occasional scan with a constantly maintained hash for direct lookups? + let j, f, k; + let match = 0; + const isMap = this.useMap[table]; + const pending = this.pending[ch]; + const matches = Object.create(null); + const lProp = isMap ? 'size' : 'length'; + + if (bulk) { + for (let i = r.length; i--;) { + if (!r[i]) { + // non-existing bulkGet result. + r.splice(i, 1); + } + } + } + const dbRecords = !!r.length; + + // iterate transactions in reverse chronological order + for (let tid = pending.length; tid--;) { + const t = pending[tid] && pending[tid][table]; + + // any updates pending for this table? + if (t && (t[t.h] && t[t.h][lProp] || t[t.h - 1] && t[t.h - 1][lProp])) { + // debugger + // examine update actions in reverse chronological order + // FIXME: can stop the loop at t.t for non-transactional writes + for (let a = t.h; a >= 0; a--) { + /* eslint-disable max-depth */ + if (t[a]) { + const data = isMap ? [...t[a].values()] : t[a]; + + if (a & 1) { + // no need to record a deletion unless we got db entries + if (dbRecords) { + // deletion - always by bare index + for (j = data.length; j--;) { + f = this._value(data[j]); + + if (typeof matches[f] == 'undefined') { + // boolean false means "record deleted" + matches[f] = false; + match++; + } + } + } + } + else { + // addition or update - index field is attribute + // iterate updates in reverse chronological order + // (updates are not commutative) + for (j = data.length; j--;) { + const update = data[j]; + + f = this._value(update[index]); + if (typeof matches[f] == 'undefined') { + // check if this update matches our criteria, if any + if (where) { + for (k = where.length; k--;) { + if (!this.compare(table, where[k][0], where[k][1], update)) { + break; + } + } + + // mismatch detected - record it as a deletion + if (k >= 0) { + // no need to record a deletion unless we got db entries + if (dbRecords) { + match++; + matches[f] = false; + } + continue; + } + } + else if (options.query) { + // If a custom query was made, notify there was a + // pending update and whether if should be included. + if (!(options.include && options.include(update, index))) { + // nope - record it as a deletion + matches[f] = false; + match++; + continue; + } + } + else if (anyof) { + // does this update modify a record matched by the anyof inclusion list? + for (k = anyof[1].length; k--;) { + if (this.compare(table, anyof[0], anyof[1][k], update)) { + break; + } + } + + // no match detected - record it as a deletion + if (k < 0) { + // no need to record a deletion unless we got db entries + if (dbRecords) { + match++; + matches[f] = false; + } + continue; + } + } + + match++; + matches[f] = update; + } + } + } + } + } + } + } + + // scan the result for updates/deletions/additions arising out of the matches found + if (match) { + if (debug) { + debug('pending matches', match, r.length); + } + + for (i = r.length; i--;) { + // if this is a binary key, convert it to string + f = this._value(r[i][index]); + + if (typeof matches[f] !== 'undefined') { + if (matches[f] === false) { + // a returned record was deleted or overwritten with + // keys that fall outside our where clause + r.splice(i, 1); + } + else { + // a returned record was overwritten and still matches + // our where clause + r[i] = this.clone(matches[f]); + matches[f] = undefined; + } + } + } + + // now add newly written records + for (t in matches) { + if (matches[t]) { + r.push(this.clone(matches[t])); + } + } + } + + // filter out matching records + if (where) { + for (i = r.length; i--;) { + for (k = where.length; k--;) { + if (!this.compare(table, where[k][0], where[k][1], r[i])) { + r.splice(i, 1); + break; + } + } + } + } + + // Apply user-provided filtering, if any + if (options.filter) { + r = options.filter(r); + } + + if (r.length) { + this.normaliseresult(table, r); + } + return r; + }).catch((ex) => { + if (debug && !this.crashed) { + debug("Read operation failed, marking DB as read-crashed", ex); + } + }); + + if (!r) { + await this.invalidate(1); + } + return r || []; +}; + +// invokes getbykey in chunked mode +FMDB.prototype.getchunk = async function(table, options, onchunk) { + 'use strict'; + if (typeof options === 'function') { + onchunk = options; + options = Object.create(null); + } + options.limit = options.limit || 1e4; + + var mng = options.offset === undefined; + if (mng) { + options.offset = -options.limit; + } + + while (true) { + if (mng) { + options.offset += options.limit; + } + const {limit} = options; + const r = await this.getbykey(table, options); + + if (onchunk(r) === false) { + return EAGAIN; + } + + if (r.length < limit) { + break; + } + } +}; + +// simple/fast/non-recursive object cloning +FMDB.prototype.clone = function fmdb_clone(o) { + 'use strict'; + + o = {...o}; + + if (!o.d || 'byteLength' in o.d) { + + for (const k in o) { + + if (o[k] && o[k].byteLength) { + + o[k] = o[k].slice(0); + } + } + } + + return o; +}; + +/** + * Encrypt 32-bit words using AES ECB... + * @param {sjcl.cipher.aes} cipher AES cipher + * @param {TypedArray} input data + * @returns {ArrayBuffer} encrypted data + * @private + */ +FMDB.prototype._crypt = function(cipher, input) { + 'use strict'; + var a32 = new Int32Array(input.buffer); + var i32 = new Int32Array(a32.length + 3 & ~3); + for (var i = 0; i < a32.length; i += 4) { + var u = cipher.encrypt([a32[i], a32[i + 1], a32[i + 2], a32[i + 3]]); + i32[i] = u[0]; + i32[i + 1] = u[1]; + i32[i + 2] = u[2]; + i32[i + 3] = u[3]; + } + return i32.buffer; +}; + +/** + * Decrypt 32-bit words using AES ECB... + * @param {sjcl.cipher.aes} cipher AES cipher + * @param {ArrayBuffer} buffer Encrypted data + * @returns {ArrayBuffer} decrypted data + * @private + */ +FMDB.prototype._decrypt = function(cipher, buffer) { + 'use strict'; + var u32 = new Uint32Array(buffer); + for (var i = 0; i < u32.length; i += 4) { + var u = cipher.decrypt([u32[i], u32[i + 1], u32[i + 2], u32[i + 3]]); + u32[i + 3] = u[3]; + u32[i + 2] = u[2]; + u32[i + 1] = u[1]; + u32[i] = u[0]; + } + return u32.buffer; +}; + +/** + * Converts UTF-8 string to Unicode + * @param {ArrayBuffer} buffer Input buffer + * @returns {String} Unicode string. + */ +FMDB.prototype.from8 = function(buffer) { + 'use strict'; + + var idx = 0; + var str = ''; + var ptr = new Uint8Array(buffer); + var len = ptr.byteLength; + while (len > idx) { + var b = ptr[idx++]; + if (!b) { + return str; + } + if (!(b & 0x80)) { + str += String.fromCharCode(b); + continue; + } + + var l = ptr[idx++] & 63; + if ((b & 0xE0) === 0xC0) { + str += String.fromCharCode((b & 31) << 6 | l); + continue; + } + + var h = ptr[idx++] & 63; + if ((b & 0xF0) === 0xE0) { + b = (b & 15) << 12 | l << 6 | h; + } + else { + b = (b & 7) << 18 | l << 12 | h << 6 | ptr[idx++] & 63; + } + + if (b < 0x10000) { + str += String.fromCharCode(b); + } + else { + var ch = b - 0x10000; + str += String.fromCharCode(0xD800 | ch >> 10, 0xDC00 | ch & 0x3FF); + } + } + + return str; +}; + +/** + * Converts Unicode string to UTF-8 + * @param {String} str Input string + * @param {Number} [len] bytes to allocate + * @returns {Uint8Array} utf-8 bytes + */ +FMDB.prototype.to8 = function(str, len) { + 'use strict'; + var p = 0; + var u8 = new Uint8Array((len || this.utf8length(str)) + 3 & ~3); + + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u > 55295 && u < 57344) { + u = 0x10000 + ((u & 0x3FF) << 10) | str.charCodeAt(++i) & 0x3FF; + } + if (u < 128) { + u8[p++] = u; + } + else if (u < 2048) { + u8[p++] = 0xC0 | u >> 6; + u8[p++] = 0x80 | u & 63; + } + else if (u < 65536) { + u8[p++] = 0xE0 | u >> 12; + u8[p++] = 0x80 | u >> 6 & 63; + u8[p++] = 0x80 | u & 63; + } + else { + u8[p++] = 0xF0 | u >> 18; + u8[p++] = 0x80 | u >> 12 & 63; + u8[p++] = 0x80 | u >> 6 & 63; + u8[p++] = 0x80 | u & 63; + } + } + return u8; +}; + +/** + * Calculate the length required for Unicode to UTF-8 conversion + * @param {String} str Input string. + * @returns {Number} The length + */ +FMDB.prototype.utf8length = function(str) { + 'use strict'; + + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u > 55295 && u < 57344) { + u = 0x10000 + ((u & 0x3FF) << 10) | str.charCodeAt(++i) & 0x3FF; + } + if (u < 128) { + ++len; + } + else if (u < 2048) { + len += 2; + } + else if (u < 65536) { + len += 3; + } + else { + len += 4; + } + } + return len; +}; + +/** + * Check for needle into haystack + * @param {Array} haystack haystack + * @param {String|ArrayBuffer} needle needle + * @returns {Boolean} whether is found. + */ +FMDB.prototype.exists = function(haystack, needle) { + 'use strict'; + for (var i = haystack.length; i--;) { + if (this.equal(haystack[i], needle)) { + return true; + } + } + return false; +}; + +/** + * Check whether two indexedDB-stored values are equal. + * @param {ArrayBuffer} a1 first item to compare + * @param {ArrayBuffer} a2 second item to compere + * @returns {Boolean} true if both are deep equal + */ +FMDB.prototype.equal = function(a1, a2) { + 'use strict'; + const len = a1.byteLength; + + if (len === a2.byteLength) { + a1 = new Uint8Array(a1); + a2 = new Uint8Array(a2); + + let i = 0; + while (i < len) { + if (a1[i] !== a2[i]) { + return false; + } + ++i; + } + + return true; + } + + return false; +}; + +/** + * Check whether two indexedDB-stored values are equal. + * @param {String} a1 first item to compare + * @param {String} a2 second item to compere + * @returns {Boolean} true if both are deep equal + */ +FMDB.prototype.equals = function(a1, a2) { + 'use strict'; + return a1 === a2; +}; + +/** + * Validate store-ready entry + * @param {Object} entry An object + * @returns {Boolean} whether it is.. + * @private + */ +FMDB.prototype._raw = function(entry) { + 'use strict'; + return entry.d && entry.d.byteLength === undefined; +}; + +/** + * Get raw value for encrypted record. + * @param {String|ArrayBuffer} value Input + * @returns {String} raw value + * @private + */ +FMDB.prototype._value = function(value) { + 'use strict'; + + if (value instanceof ArrayBuffer) { + value = this.fromStore(value.slice(0)); + } + + return value; +}; + +/** + * store-agnostic value comparison. + * @param {String} table The DB table + * @param {String} key The row index. + * @param {String|ArrayBuffer} value item to compare (always encrypted) + * @param {Object} store Store containing key. (*may* not be encrypted) + * @returns {Boolean} true if both are deep equal + */ +FMDB.prototype.compare = function(table, key, value, store) { + 'use strict'; + let eq = store[key]; + + if (this._raw(store)) { + + if (!this._cache[eq]) { + this._cache[eq] = this.toStore(eq); + } + eq = this._cache[eq]; + } + + return this.equal(value, eq); +}; + +/** + * indexedDB data serialization. + * @param {String} data Input string + * @returns {*|String} serialized data (as base64, unless we have binary keys support) + */ +FMDB.prototype.toStore = function(data) { + 'use strict'; + return ab_to_base64(this.strcrypt(data)); +}; + +/** + * indexedDB data de-serialization. + * @param {TypedArray|ArrayBuffer|String} data Input data + * @returns {*} de-serialized data. + */ +FMDB.prototype.fromStore = function(data) { + 'use strict'; + return this.strdecrypt(base64_to_ab(data)); +}; + +// convert to encrypted-base64 +FMDB.prototype.toB64 = FMDB.prototype.toStore; +// convert from encrypted-base64 +FMDB.prototype.fromB64 = FMDB.prototype.fromStore; + +if (FMDB.$useBinaryKeys) { + FMDB.prototype.toStore = FMDB.prototype.strcrypt; + FMDB.prototype.fromStore = FMDB.prototype.strdecrypt; +} +else { + FMDB.prototype.equal = FMDB.prototype.equals; + + if (!FMDB.$usePostSerialz) { + FMDB.prototype.compare = FMDB.prototype.equal; + console.warn('Fix FMDB._value()....'); + } +} + +if (!FMDB.$usePostSerialz) { + FMDB.prototype.add = function fmdb_adds(table, row) { + 'use strict'; + if (!this.crashed) { + this.enqueue(table, this.serialize(table, row), 0); + } + }; + FMDB.prototype.del = function fmdb_dels(table, index) { + "use strict"; + if (!this.crashed) { + this.enqueue(table, this.toStore(index), 1); + } + }; +} + +// @private +FMDB.prototype._bench = function(v, m) { + 'use strict'; + var i; + var a = Array(1e6); + var s = + '\u0073\u0061\u006d\u0070\u006c\u0065\u0020\u0074\u0072\u0061\u006e\u0073\u006c\u0061' + + '\u0074\u0065\u003a\u0020\u5c11\u91cf\u002c\u0020\u6837\u54c1\u002c\u0020\uff08\u533b' + + '\u751f\u6216\u79d1\u5b66\u5bb6\u68c0\u6d4b\u7528\u7684\uff09\u6837\u672c\uff0c\u8bd5'; + + s = typeof v === 'string' ? v : v && JSON.stringify(v) || s; + + var enc = 'strcrypt' + (m === undefined ? '' : m); + var dec = 'strdecrypt' + (m === undefined ? '' : m); + + onIdle(function() { + console.time(enc); + for (i = a.length; i--;) { + a[i] = fmdb[enc](s); + } + console.timeEnd(enc); + }); + + onIdle(function() { + console.time(dec); + for (i = a.length; i--;) { + fmdb[dec](a[i]); + } + console.timeEnd(dec); + }); + + onIdle(function() { + console.assert(m !== undefined || fmdb.from8(a[1]).split('\0')[0] === s); + console.groupEnd(); + }); + console.group('please wait...'); +}; + + +// reliably invalidate the current database (delete the sn) +FMDB.prototype.invalidate = promisify(function(resolve, reject, readop) { + 'use strict'; + + if (this.crashed) { + return resolve(); + } + + var channels = Object.keys(this.pending); + + // erase all pending data + for (var i = channels.length; i--;) { + this.head[i] = 0; + this.tail[i] = 0; + this.pending[i] = []; + } + this._cache = Object.create(null); + + // clear the writing flag for the next del() call to pass through + this.writing = null; + + // enqueue the final _sn deletion that will mark the DB as invalid + this.del('_sn', 1); + + // prevent further reads or writes + this.crashed = readop ? 2 : 1; + + // set completion callback + this.inval_cb = function() { + // XXX: Just invalidating the DB may causes a timeout trying to open it on the next page load, since we + // do attempt to delete it when no sn is found, which would take a while to complete for large accounts. + // This is currently the 20% of hits we do receive through 99724 so from now on we will hold the current + // session until the DB has been deleted. + if (readop || !this.db) { + onIdle(resolve); + } + else { + this.db.delete().finally(resolve); + } + + this.pending = [[]]; + document.documentElement.classList.remove('fmdb-working'); + }; +}); + + +function mDBcls() { + if (fmdb && fmdb.db) { + fmdb.db.close(); + } + fmdb = null; +} + + +// -------------------------------------------------------------------------- + +/** + * Wrapper around Dexie that remembers and removes deprecated databases. + * @param {String} aUniqueID Unique Identified for this database. + * @see {@link MegaDexie.getDBName} for additional parameters. + * @details as part of this constructor, {aPayLoad} must be the schema if provided. + * @constructor + */ +class MegaDexie extends Dexie { + constructor(aUniqueID, ...args) { + const dbname = MegaDexie.getDBName(...args); + super(dbname, {chromeTransactionDurability: 'relaxed'}); + + this.__dbUniqueID = this.__fromUniqueID(aUniqueID + args[0]); + this.__rememberDBName(dbname); + + if (args[3]) { + // Schema given. + this.version(1).stores(args[3]); + } + + if (d > 2) { + MegaDexie.__dbConnections.push(this); + } + + this.onerror = null; + Object.defineProperty(this, '__bulkPutQueue', {value: Object.create(null)}); + Object.defineProperty(this, '__ident_0', {value: `megadexie.${this.__dbUniqueID}-${++mIncID}`}); + } + + get [Symbol.toStringTag]() { + return 'MegaDexie'; + } + + toString() { + return String(this._uname || this.name || this.__ident_0); + } + + put(table, data) { + const {promise} = mega; + + if (!this.__bulkPutQueue[table]) { + this.__bulkPutQueue[table] = []; + } + + // @todo deduplicate? benchmark! + this.__bulkPutQueue[table].push([promise, data]); + + delay(this.__ident_0 + table, () => { + const queue = this.__bulkPutQueue[table]; + delete this.__bulkPutQueue[table]; + + const promises = []; + const release = (res, error) => { + let meth = 'resolve'; + if (error) { + res = error; + meth = 'reject'; + } + for (let i = promises.length; i--;) { + promises[i][meth](res); + } + }; + + for (let i = queue.length; i--;) { + const [promise, data] = queue[i]; + promises.push(promise); + queue[i] = data; + } + + const bulkPut = () => this[table].bulkPut(queue).then(release); + + bulkPut().catch(async(ex) => { + let res = 0; + let failure = new MEGAException(ex.inner || ex, this, ex.name); + + if (failure.name === 'DatabaseClosedError') { + // eslint-disable-next-line local-rules/open + res = await this.open().then(bulkPut).catch(echo); + if (!res) { + if (d) { + console.debug('DB closed unexpectedly and re-opened...', this); + } + return; + } + } + + if (this.onerror) { + res = this.onerror(ex); + if (res) { + failure = null; + } + } + + this.error = ex; + return release(res, failure); + }).catch(dump); + }, 60); + + return promise; + } + + async export() { + return MegaDexie.export(this); + } + + async import(blob) { + return MegaDexie.import(blob, this); + } + + static async import(aFile, aDBInstance) { + const buf = aFile.name.endsWith('.gz') ? await M.decompress(aFile) : await M.toArrayBuffer(aFile); + const len = buf.byteLength; + assert(len > 0x10000); + + const view = new DataView(buf); + assert(view.getUint32(0) === 0x13064D44, 'Invalid file.'); + assert(view.getUint8(len - 17) === 0xEF, 'File corrupted(?)'); + + let offset = 8; + const tde = new TextDecoder(); + const readValue = () => { + const b = view.getUint8(offset); + const l = b >> 4; + const t = b & 15; + + const size = view[`getUint${l << 3}`](++offset, true); + offset += l; + + let data = buf.slice(offset, offset + size); + if (t > 1) { + data = tde.decode(data); + + switch (t) { + case 2: + data = parseInt(data, 36); + break; + case 4: + data = JSON.parse(data); + break; + } + } + + offset += size; + return data; + }; + const settings = readValue(); + assert('schema' in settings); + + const key = [ + view.getInt32(len - 16, true), + view.getInt32(len - 12, true), + view.getInt32(len - 8, true), + view.getInt32(len - 4, true) + ]; + const {u_k: uk1, u_k_aes: uk2} = window; + const keyMatch = JSON.stringify(uk1) === JSON.stringify(key); + + if (aDBInstance) { + // @todo re-encrypt'em(?) + assert(keyMatch, 'Key mismatch, cannot import.'); + } + else { + if (!keyMatch) { + u_k = key; + u_k_aes = new sjcl.cipher.aes(u_k); + } + const name = `DBImport${Math.random().toString(36)}`; + + if (settings.schema.lru) { + // eslint-disable-next-line no-use-before-define + aDBInstance = await LRUMegaDexie.create(name); + } + else { + aDBInstance = new MegaDexie('DBIMPORT', name, 'imp_', true, settings.schema); + } + + if (!keyMatch) { + u_k = uk1; + u_k_aes = uk2; + } + } + + offset = 0x10000; + while (view.getUint8(offset) !== 0xEF) { + const bulk = []; + const table = readValue(); + + while (view.getUint8(offset) !== 0xFF) { + const data = {}; + + while (view.getUint8(offset) !== 0xFE) { + const key = readValue(); + data[key] = readValue(); + } + + offset++; + bulk.push(data); + } + + offset++; + await aDBInstance[table].bulkPut(bulk); + } + + return aDBInstance; + } + + static async export(aDBInstance) { + let offset = 0; + let buf = new Uint8Array(0x1000000); + const tde = new TextEncoder(); + const gbl = (n) => n < 256 ? 1 : n < 65536 ? 2 : 4; + const rnd = (s, b = 0x100000) => (s + b & -b) >>> 0; + const types = {buffer: 1, number: 2, string: 3, object: 4}; + const put = (data, offset) => { + if (typeof data === 'number') { + data = new window[`Uint${gbl(data) << 3}Array`]([data]); + } + if (offset + data.byteLength > buf.byteLength) { + const tmp = new Uint8Array(rnd(buf.byteLength + data.byteLength)); + tmp.set(buf); + buf = tmp; + } + buf.set(new Uint8Array(data.buffer || data), offset); + return offset + data.byteLength; + }; + const add = (data, pos) => { + let t = data.byteLength >= 0 ? 'buffer' : typeof data; + if (t !== 'buffer') { + if (t === 'number') { + data = data.toString(36); + } + else if (t !== 'string') { + t = 'object'; + data = JSON.stringify(data); + } + data = tde.encode(data); + } + + const j = gbl(data.byteLength); + const p = put(data, put(data.byteLength, put(j << 4 | types[t], pos || offset))); + if (!pos) { + offset = p; + } + }; + + add('MDBv01'); + offset = 0x10000; + + const {tables} = aDBInstance; + const schema = Object.create(null); + + assert(aDBInstance instanceof Dexie && tables.length); + + for (let i = 0; i < tables.length; ++i) { + const s = []; + const table = tables[i]; + const {db, name, schema: {primKey, indexes = false}} = table; + + if (primKey) { + s.push(primKey.unique ? `&${primKey.name}` : primKey.src); + } + if (indexes.length) { + s.push(...indexes.map((i) => i.src)); + } + + add(name); + schema[name] = s.join(', '); + + const res = await db[name].toArray(); + for (let i = res.length; i--;) { + const e = res[i]; + + for (const k in e) { + add(k); + add(e[k]); + } + + put(0xfe, offset++); + } + + put(0xff, offset++); + } + + add({schema}, 8); + buf = buf.slice(0, put(new Uint32Array(u_k), put(0xef, offset))); + + const {_uname, name} = aDBInstance; + const data = await M.compress(buf).catch(nop); + const filename = `mega-dbexport.${_uname || name || aDBInstance}`; + + return M.saveAs(data || buf, data ? `${filename}.gz` : filename); + } +} + +/** + * Helper to create common database names. + * @param {String} aName The main name. + * @param {String} [aIdent] Identity (added to the db name as-is) + * @param {Boolean} [aTagUser] Whether this database is user-specific + * @param {*} [aPayload] Some serializable data to randomize the db name + * @param {*} [aPersistent] Whether this database is persistent, true by default. + * @returns {String} encrypted database name + */ +MegaDexie.getDBName = function(aName, aIdent, aTagUser, aPayload, aPersistent) { + 'use strict'; + if (typeof u_k_aes === 'undefined') { + if (window.u_k) { + throw new Error('Invalid account state.'); + } + window.u_k_aes = new sjcl.cipher.aes(str_to_a32('' + ua).slice(-4)); + console.warn('MegaDexie.getDBName: Adding temporal key for non-logged user.'); + } + var pex = aPersistent === false ? '' : FMDB.perspex; + aPayload = aPayload && MurmurHash3(JSON.stringify(aPayload)).toString(16) || ''; + return (aIdent || '') + FMDB.prototype.toB64(aPayload + aName + (aTagUser ? u_handle : '')) + pex; +}; + +/** + * The missing Dexie.bulkUpdate + * @param {String} [table] Optional Dexie table + * @param {Array} bulkData Bulk data + * @returns {Promise} promise + */ +MegaDexie.prototype.bulkUpdate = promisify(function(resolve, reject, table, bulkData) { + 'use strict'; + + if (typeof table !== 'string') { + bulkData = table; + table = this.tables; + table = table.length === 1 && table[0].name; + } + + if (!bulkData.length) { + return resolve(bulkData); + } + table = this.table(table); + + var i; + var keyPath; + var anyOf = []; + var schema = table.schema; + var indexes = schema.indexes; + + for (i = 0; i < indexes.length; ++i) { + if (indexes[i].unique) { + keyPath = indexes[i].keyPath; + break; + } + } + + for (i = bulkData.length; i--;) { + var v = bulkData[i][keyPath || schema.primKey.keyPath]; + + if (FMDB.prototype.exists(anyOf, v)) { + bulkData.splice(i, 1); + } + else { + anyOf.push(v); + } + } + + (keyPath ? table.where(keyPath).anyOf(anyOf).toArray() : table.bulkGet(anyOf)) + .then(function(r) { + var toUpdate = []; + + keyPath = keyPath || schema.primKey.keyPath; + for (var i = r.length; i--;) { + for (var j = r[i] && bulkData.length; j--;) { + if (FMDB.prototype.equal(r[i][keyPath], bulkData[j][keyPath])) { + delete bulkData[j][keyPath]; + toUpdate.push([r[i], bulkData.splice(j, 1)[0]]); + break; + } + } + } + + var tasks = toUpdate.map(function(u) { + return table.where(":id").equals(u[0][schema.primKey.keyPath]).modify(u[1]); + }); + if (bulkData.length) { + tasks.push(table.bulkPut(bulkData)); + } + return Promise.all(tasks); + }) + .then(resolve) + .catch(reject); +}); + +/** + * Remember newly opened database. + * @param {String} aDBName The database being opened. + * @returns {void} + * @private + */ +MegaDexie.prototype.__rememberDBName = function(aDBName) { + 'use strict'; + var aUniqueID = this.__dbUniqueID; + + MegaDexie.__knownDBNames.get(aUniqueID) + .then(function(s) { + if (s) { + if (s.v === aDBName) { + return; + } + Dexie.delete(s.v).then(nop).catch(dump); + } + return MegaDexie.__knownDBNames.put({k: aUniqueID, t: Date.now() - 1589e9, v: aDBName}); + }) + .catch(nop); + + this.__checkStaleDBNames(); +}; + +/** + * Forget database. + * @returns {void} + * @private + */ +MegaDexie.prototype.__forgetDBName = function() { + 'use strict'; + MegaDexie.__knownDBNames.delete(this.__dbUniqueID).then(nop).catch(dump); +}; + +MegaDexie.prototype.__checkStaleDBNames = function() { + 'use strict'; + + if (MegaDexie.__staleDBsChecked) { + return; + } + + var canQueryDatabases = typeof Object(window.indexedDB).databases === 'function'; + MegaDexie.__staleDBsChecked = canQueryDatabases ? true : -1; + + if (canQueryDatabases) { + setTimeout(function() { + var databases = []; + + if (d) { + console.debug('Checking stale databases...'); + } + + indexedDB.databases() + .then(function(r) { + for (var i = r.length; i--;) { + console.assert(r[i].name); + if (r[i].name) { + databases.push(r[i].name); + } + } + + return databases.length ? MegaDexie.__knownDBNames.toArray() : Promise.resolve([]); + }) + .then(function(r) { + var stale = []; + + for (var i = r.length; i--;) { + if (databases.indexOf(r[i].v) < 0) { + if (d) { + console.warn('Found stale database...', r[i].v); + } + stale.push(r[i].k); + } + } + + if (stale.length) { + MegaDexie.__knownDBNames.bulkDelete(stale).then(nop).catch(dump); + } + else { + console.debug('Yay, no stale databases found.'); + } + }) + .catch(nop); + }, 4e4); + } +}; + +/** + * Hash unique identifier + * @param {Number|String} aUniqueID Unique Identifier for database. + * @returns {Number} hash + * @private + */ +MegaDexie.prototype.__fromUniqueID = function(aUniqueID) { + 'use strict'; + return MurmurHash3('mega' + aUniqueID + window.u_handle, -0x9fffee); +}; + +/** + * Deletes the database. + * @returns {Promise} promise + */ +MegaDexie.prototype.delete = function() { + 'use strict'; + this.__forgetDBName(); + return Dexie.prototype.delete.apply(this, arguments); +}; + +/** + * Open the database. + * @returns {Promise} promise + */ +MegaDexie.prototype.open = function() { + 'use strict'; + this.__rememberDBName(this.name); + return Dexie.prototype.open.apply(this, arguments); +}; + +/** + * @name __knownDBNames + * @memberOf MegaDexie + */ +lazy(MegaDexie, '__knownDBNames', function() { + 'use strict'; + var db = new Dexie('$kdbn', {addons: []}); + db.version(1).stores({k: '&k'}); + return db.table('k'); +}); + +/** + * @name getDatabaseNames + * @memberOf MegaDexie + */ +lazy(MegaDexie, 'getDatabaseNames', () => { + 'use strict'; + if (typeof Object(window.indexedDB).databases === 'function') { + return async() => { + const dbs = await indexedDB.databases(); + return dbs.map(obj => obj.name); + }; + } + return async() => { + const dbs = await MegaDexie.__knownDBNames.toArray(); + return dbs.map(obj => obj.v); + }; +}); + +// @private +MegaDexie.__dbConnections = []; + +/** + * Creates a new database layer, which may change at anytime, and thus with + * the only assertion the instance returned will have set/get/remove methods + * @param {String} name Database name. + * @param {Boolean|Number} binary mode + * @returns {*} database instance. + */ +MegaDexie.create = function(name, binary) { + 'use strict'; + binary = binary && SharedLocalKVStorage.DB_MODE.BINARY; + return new SharedLocalKVStorage.Utils.DexieStorage('mdcdb:' + name, binary); +}; + +// -------------------------------------------------------------------------- + +class LRUMegaDexie extends MegaDexie { + constructor(name, options = 4e3) { + options = typeof options === 'number' ? {limit: options} : options; + + super('LRUMMDB', name, options.pfx || 'lru_', true, { + lru: '&k', + data: '&h, ts' + }); + + this.options = options; + + if (LRUMegaDexie.wSet) { + this._uname = name; + LRUMegaDexie.wSet.add(this); + } + + LRUMegaDexie.hookErrorHandlers(this); + } + + get [Symbol.toStringTag]() { + return 'LRUMegaDexie'; + } + + async setup(options = false, key = null) { + + if (key) { + const algo = { + ...key.algorithm, + tagLength: 32, + iv: options.iv || new Uint32Array(u_k_aes._key[0].slice(4, 7)) + }; + const view = new DataView(algo.iv.buffer); + let ctr = Math.random() * 0x1000000 >>> 0; + + Object.defineProperties(this, { + encrypt: { + value: async(data) => { + view.setUint32(0, ++ctr, true); + const encrypted = new Uint8Array(data.byteLength + 8); + const payload = new DataView(encrypted.buffer, 0, 4); + payload.setUint32(0, ctr, true); + algo.additionalData = payload; + encrypted.set(new Uint8Array(await crypto.subtle.encrypt(algo, key, data)), 4); + return encrypted.buffer; + } + }, + decrypt: { + value: async(data) => { + const payload = new DataView(data, 0, 4); + const ctr = payload.getUint32(0, true); + view.setUint32(0, ctr, true); + algo.additionalData = payload; + return crypto.subtle.decrypt(algo, key, new DataView(data, 4)) + .catch((ex) => { + const msg = `LRUMegaDexie(${this}) decrypt error: ${ex.message || ex.name}`; + throw new MEGAException(msg, ex, ex.name || 'DataCloneError'); + }); + } + } + }); + } + + return this.update(options); + } + + async update(options) { + this.options = Object.assign({}, (await this.lru.get('options') || {}).value, this.options, options); + + delete this.options.iv; + const promises = [this.lru.put({k: 'options', value: Object.setPrototypeOf(this.options, null)})]; + + for (const k in this.options) { + promises.push(this.lru.put({k, value: this.options[k]})); + } + + this.drain(); + await Promise.all(promises); + return this; + } + + async find(h) { + return this.data.exists(h); + } + + async has(h) { + return !!await this.find(h); + } + + async get(h) { + // @todo FIXME improve Collection.modify() to NOT retrieve WHOLE rows + // const coll = this.data.where('h').equals(h); + // const {data} = await coll.first() || false; + // return data && (await Promise.all([coll.modify({ts: Date.now()}), this.decrypt(data)]))[1]; + + const {data} = await this.data.get(h) || false; + if (data) { + this.put('data', {h, data, ts: Date.now()}).catch(dump); + return this.decrypt(data); + } + } + + async set(h, data) { + assert(data.byteLength > 16); + data = await this.encrypt(data); + delay(this.name, () => this.drain(), 9e3); + return this.put('data', {h, data, ts: Date.now()}); + } + + async bulkGet(bulk, err = {}) { + const now = Date.now(); + const res = Object.create(null); + + if (bulk) { + bulk = await this.data.bulkGet(bulk); + } + else { + bulk = await this.data.orderBy('ts').toArray(); + } + + for (let i = bulk.length; i--;) { + const e = bulk[i]; + + if (e) { + const value = await this.decrypt(e.data) + .catch((ex) => { + err[e.h] = {ts: new Date(e.ts).toISOString(), bytes: e.data.byteLength, ex}; + }); + + if (value) { + e.ts = now; + res[e.h] = value; + continue; + } + } + + bulk.splice(i, 1); + } + + + if (d && $.len(err)) { + console.group(`LRUMegaDexie.bulkGet(${this}) errors found...`); + console.table(err); + console.groupEnd(); + } + + this.data.bulkPut(bulk) + .catch((ex) => { + if (d) { + console.warn(`${this}: ${ex}`, ex); + } + return bulk.map((e) => this.put('data', e)); + }); + + return res; + } + + drain() { + this.data.count() + .then(count => count > this.options.limit && this.data.orderBy('ts').limit(count / 10 | 1).primaryKeys()) + .then(keys => keys && this.data.bulkDelete(keys)) + .catch(dump); + } + + encrypt(data) { + return data; + } + + decrypt(data) { + return data; + } +} + +/** @property LRUMegaDexie.create */ +lazy(LRUMegaDexie, 'create', () => { + 'use strict'; + const parity = lazy(Object.create(null), 'key', () => { + return crypto.subtle.importKey( + "raw", + new Uint32Array(u_k_aes._key[0].slice(0, 4)), + {name: "AES-GCM"}, + false, + ["encrypt", "decrypt"] + ); + }); + + const extend = (obj) => { + if (obj instanceof LRUMap) { + const {get, set} = obj; + + Object.defineProperties(obj, { + get: { + value: async function(...args) { + return get.apply(this, args); + } + }, + bulkGet: { + value: async function(bulk) { + return bulk.reduce((target, e) => { + const value = get.call(this, e); + if (value) { + target[e] = value; + } + return target; + }, Object.create(null)); + } + }, + set: { + value: async function(...args) { + return set.apply(this, args); + } + }, + find: { + value: async function(keys) { + const res = []; + for (let i = keys.length; i--;) { + if (this.has(keys[i])) { + res.push(keys[i]); + } + } + return res; + } + } + }); + } + + return obj; + }; + + return async(name, options) => { + const db = await new LRUMegaDexie(name, options).setup(options, await parity.key).catch(dump); + if (d && !db) { + console.warn('LRU cannot be backed by DB, using memory-only instead...', name); + } + return extend(db || new LRUMap(Math.max(256, (options && options.limit || options) >> 3))); + }; +}); + +Object.defineProperties(LRUMegaDexie, { + wSet: { + value: self.d > 0 && new IWeakSet() + }, + errorHandler: { + value: (ev) => { + 'use strict'; + const message = String(((ev.target || ev).error || ev.inner || ev).message || ev.type || ev); + + if (d) { + console.warn(`LRUMegaDexie error (${ev.type || ev.name})`, message, [ev]); + } + + if (ev.type !== 'close' && !/\s(?:clos[ei]|delet[ei])/.test(message)) { + eventlog(99748, message.split('\n')[0].substr(0, 300), true); + } + + // drop all LRU-based databases. + LRUMegaDexie.drop().catch(dump); + } + }, + hookErrorHandlers: { + value: (lru) => { + 'use strict'; + if (!lru.idbdb) { + return lru.on('ready', () => LRUMegaDexie.hookErrorHandlers(lru)); + } + const {onabort, onerror} = lru.idbdb; + + lru.idbdb.onabort = lru.idbdb.onerror = (ev) => { + LRUMegaDexie.errorHandler(ev); + return ev.type === 'abort' ? onabort && onabort(ev) : onerror && onerror(ev); + }; + + lru.on('close', lru.onerror = LRUMegaDexie.errorHandler); + } + }, + drop: { + value: async() => { + 'use strict'; + const dbs = await MegaDexie.getDatabaseNames(); + return Promise.all(dbs.filter(n => n.startsWith('lru_')).map(n => Dexie.delete(n))); + } + }, + verify: { + value: async() => { + 'use strict'; + const stats = {}; + + for (const db of LRUMegaDexie.wSet) { + const err = {}; + const res = await db.bulkGet(0, err); + const nid = `${db.name} (${db._uname})`; + const ecn = $.len(err); + const cnt = $.len(res) + ecn; + + let bytes = 0; + let errors = 0; + + if (ecn) { + bytes = Object.values(err) + .reduce((n, o) => { + n += o.bytes; + return n; + }, 0); + errors = `${ecn} (${parseFloat(ecn * 100 / cnt).toFixed(2)}%, ${bytesToSize(bytes)})`; + } + + for (const k in res) { + bytes += res[k].byteLength; + } + + if (bytes > 1e6) { + bytes = `${bytes} (${bytesToSize(bytes)})`; + } + stats[nid] = {bytes, records: cnt, errors}; + } + console.table(stats); + } + }, + size: { + get() { + 'use strict'; + const {promise} = mega; + + let name; + const seen = {total: {bytes: 0}}; + const store = (row) => { + const {byteLength} = row.data; + seen[name].bytes += byteLength; + seen.total.bytes += byteLength; + }; + + (async(obj) => { + for (const db of obj) { + name = `${db.name} (${db._uname})`; + seen[name] = {bytes: 0}; + await db.data.each(store); + } + console.table(seen); + promise.resolve(seen.total); + })(LRUMegaDexie.wSet); + + return promise; + } + } +}); + +// -------------------------------------------------------------------------- +// -------------------------------------------------------------------------- + +/** + * Helper functions to retrieve nodes from indexedDB. + * @name dbfetch + * @memberOf window + */ +Object.defineProperty(self, 'dbfetch', (function() { + 'use strict'; + const node_inflight = new Set(); + const tree_inflight = Object.create(null); + + const getNode = (h, cb) => { + if (M.d[h]) { + return cb(M.d[h]); + } + fmdb.getbykey('f', 'h', ['h', [h]]) + .always(function(r) { + if (r.length) { + emplacenode(r[0], true); + } + cb(M.d[h]); + }); + + }; + + const emplace = (r, noc) => { + for (let i = r.length; i--;) { + emplacenode(r[i], noc); + } + }; + + const showLoading = (h) => { + $.dbOpenHandle = h; + document.documentElement.classList.add('wait-cursor'); + }; + const hideLoading = (h) => { + if ($.dbOpenHandle === h) { + $.dbOpenHandle = false; + document.documentElement.classList.remove('wait-cursor'); + } + }; + + const dbfetch = Object.assign(Object.create(null), { + /** + * Retrieve root nodes only, on-demand node loading mode. + * or retrieve whole 'f' table in chunked mode. + * @returns {Promise} fulfilled on completion + * @memberOf dbfetch + */ + async init() { + + if (M.RootID || !mBroadcaster.crossTab.master) { + // fetch the whole cloud on slave tabs.. + return M.RootID || fmdb.get('f', (res) => emplace(res)); + } + + // fetch the three root nodes + const r = await fmdb.getbykey('f', 'h', ['s', ['-2', '-3', '-4']]); + + emplace(r); + if (!r.length || !M.RootID) { + throw new Error('indexedDB corruption!'); + } + + // fetch all top-level nodes + emplace(await fmdb.getbykey('f', 'h', ['p', [M.RootID, M.InboxID, M.RubbishID]])); + }, + + /** + * Check whether a node is currently loading from DB. + * @param {String} handle The ufs-node handle + * @returns {Boolean} whether it is. + */ + isLoading: function(handle) { + return !!(tree_inflight[handle] || node_inflight.lock || node_inflight.size && node_inflight.has(handle)); + }, + + /** + * Fetch all children; also, fetch path to root; populates M.c and M.d in streaming mode + * + * @param {String} handle Node handle + * @param {MegaPromise} [waiter] waiting parent + * @returns {*|MegaPromise} + * @memberOf dbfetch + */ + open: promisify((resolve, reject, handle, waiter) => { + const fail = (ex) => { + reject(ex); + hideLoading(handle); + queueMicrotask(() => { + if (tree_inflight[handle] === waiter) { + delete tree_inflight[handle]; + } + waiter.reject(ex); + }); + }; + const done = (res) => { + if (resolve) { + resolve(res); + } + hideLoading(handle); + queueMicrotask(() => { + if (tree_inflight[handle] === waiter) { + delete tree_inflight[handle]; + } + waiter.resolve(handle); + }); + }; + + // Dear ESLint, this is not a window.open call. + // eslint-disable-next-line local-rules/open + let ready = (n) => dbfetch.open(n.p).catch(nop); + + if (typeof handle !== 'string' || handle.length !== 8) { + return resolve(handle); + } + var silent = waiter === undefined; + + if (silent) { + waiter = mega.promise; + waiter.catch(nop); + } + else { + showLoading(handle); + } + + if (tree_inflight[handle]) { + if (M.c[handle]) { + queueMicrotask(resolve); + resolve = null; + } + return tree_inflight[handle].then(done).catch(fail); + } + tree_inflight[handle] = waiter; + + getNode(handle, (n) => { + if (!n) { + return fail(ENOENT); + } + if (!n.t || M.c[n.h]) { + return ready(n).finally(done); + } + if (!silent) { + showLoading(handle); + } + + let promise; + const opts = { + limit: 4, + offset: 0, + where: [['p', handle]] + }; + const ack = (res) => { + if (ready) { + promise = ready(n).finally(resolve); + ready = resolve = null; + } + else if (res) { + promise.finally(() => { + newnodes = newnodes.concat(res); + queueMicrotask(() => { + M.updFileManagerUI().dump(`dbf-open-${opts.i || handle}`); + }); + }); + } + return promise; + }; + + if (d) { + opts.i = `${makeid(9)}.${handle}`; + } + + fmdb.getchunk('f', opts, (r) => { + if (!opts.offset) { + M.c[n.h] = Object.create(null); + } + + opts.offset += opts.limit; + if (opts.limit < 4096) { + opts.limit <<= 2; + } + + emplace(r); + ack(r); + + }).catch(dump).finally(() => (promise || ack()).finally(done)); + }); + }), + + /** + * Fetch all children; also, fetch path to root; populates M.c and M.d + * + * @param {String} parent Node handle + * @returns {Promise} none + * @memberOf dbfetch + */ + async get(parent) { + + if (d > 1) { + console.warn('dbfetch.get(%s)', parent); + } + + if (typeof parent !== 'string') { + throw new Error(`Invalid parent, cannot fetch children for ${parent}`); + } + + // is this a user handle or a non-handle? no fetching needed. + while (parent.length === 8) { + + // has the parent been fetched yet? + if (!M.d[parent]) { + const r = await fmdb.getbykey('f', 'h', ['h', [parent]]); + if (r.length > 1) { + console.error(`Unexpected number of result for node ${parent}`, r.length, r); + } + + // providing a 'true' flag so that the node isn't added to M.c, + // otherwise crawling back to the parent won't work properly. + emplace(r, true); + + if (!M.d[parent]) { + // no parent found?! + break; + } + } + + // have the children been fetched yet? + if (M.d[parent].t && !M.c[parent]) { + // no: do so now. + await this.tree([parent], 0); + + if (!M.c[parent]) { + if (d) { + console.error(`Failed to fill M.c for folder node ${parent}...!`, M.d[parent]); + } + eventlog(99667); + break; + } + } + + // crawl back to root (not necessary until we start purging from memory) + parent = M.d[parent].p; + } + }, + + /** + * Fetch all children; also, fetch path to root; populates M.c and M.d + * same as fetchchildren/dbfetch.get, but takes an array of handles. + * + * @param {Array} handles ufs-node handles + * @returns {Promise} settle + * @memberOf dbfetch + */ + async geta(handles) { + // if (handles.length < 2) { + // return handles.length && this.get(handles[0]); + // } + emplace(await fmdb.getbykey('f', 'h', ['h', handles.filter(h => !M.d[h])]), true); + + let bulk = handles.filter(h => M.d[h] && M.d[h].t && !M.c[h]); + if (bulk.length) { + await this.tree(bulk, 0); + } + + bulk = new Set(); + for (let i = handles.length; i--;) { + const n = M.d[handles[i]]; + if (n && n.p) { + bulk.add(n.p); + } + } + return bulk.size && this.geta([...bulk]); + }, + + /** + * Fetch entire subtree. + * + * @param {Array} parents Node handles + * @param {Number} [level] Recursion level, optional + * @returns {Promise} + * @memberOf dbfetch + */ + async tree(parents, level = -1) { + if (!fmdb) { + throw new Error('Invalid operation, FMDB is not available.'); + } + const inflight = new Set(); + const {promise} = mega; + + // check which parents have already been fetched - no need to fetch those + // (since we do not purge loaded nodes, the presence of M.c for a node + // means that all of its children are guaranteed to be in memory.) + while (parents.length) { + const p = []; + for (let i = parents.length; i--;) { + const h = parents[i]; + if (tree_inflight[h]) { + inflight.add(tree_inflight[h]); + } + else if (!M.c[h]) { + tree_inflight[h] = promise; + p.push(h); + } + } + + if (p.length) { + + // fetch children of all unfetched parents + const r = await fmdb.getbykey('f', 'h', ['p', [...p]]); + + // store fetched nodes + for (let i = p.length; i--;) { + delete tree_inflight[p[i]]; + + // M.c should be set when *all direct* children have + // been fetched from the DB (even if there are none) + M.c[p[i]] = Object.create(null); + } + + emplace(r); + p.length = 0; + } + + if (level--) { + // extract parents from children + for (let i = parents.length; i--;) { + for (const h in M.c[parents[i]]) { + // with file versioning, files can have children, too! + if (M.d[h].t || M.d[h].tvf) { + p.push(h); + } + } + } + } + + parents = p; + } + + promise.resolve(); + return inflight.size ? Promise.allSettled([...inflight, promise]) : promise; + }, + + /** + * Throttled version of {@link dbfetch.get} to issue a single DB request for a bunch of node retrievals at once. + * @param {String|Array} h uts-node handle, or an array of them. + * @returns {Promise} promise + */ + async acquire(h) { + if (Array.isArray(h)) { + h.forEach(node_inflight.add, node_inflight); + } + else { + node_inflight.add(h); + } + + if (d) { + console.debug('acquiring node', h); + } + + do { + await tSleep(0.2); + } + while (node_inflight.lock); + + if (node_inflight.size) { + const handles = [...node_inflight]; + + node_inflight.clear(); + node_inflight.lock = true; + + if (d) { + console.warn('acquiring nodes...', handles); + } + + await this.geta(handles); + node_inflight.lock = false; + } + }, + + /** + * Retrieve nodes by handle. + * WARNING: emplacenode() is not used, it's up to the caller if so desired. + * + * @param {Array} handles + * @returns {Promise} + * @memberOf dbfetch + */ + async node(handles) { + const result = []; + + for (let i = handles.length; i--;) { + if (M.d[handles[i]]) { + result.push(M.d[handles[i]]); + handles.splice(i, 1); + } + } + + if (!handles.length || !fmdb) { + if (d && handles.length) { + console.warn('Unknown nodes: ' + handles); + } + return result; + } + + const r = await fmdb.getbykey('f', 'h', ['h', [...handles]]); + if (d && handles.length < 2 && r.length > 1) { + console.error('Unexpected DB reply, more than a single node returned.'); + } + + return result.length ? [...result, ...r] : r; + }, + + /** + * Retrieve a node by its hash. + * + * @param hash + * @returns {Promise} + * @memberOf dbfetch + */ + async hash(hash) { + if (M.h[hash]) { + for (const h of M.h[hash]) { + if (M.d[h]) { + return M.d[h]; + } + } + } + + const [n] = await fmdb.getbykey('f', 'c', false, [['c', hash]], 1); + if (n) { + // got the hash and a handle it belong to + if (!M.h[hash]) { + M.h[hash] = new Set(); + } + M.h[hash].add(n.h); + } + return n; + }, + + async media(limit = 2e3, onchunk = null) { + if (fmdb) { + if (typeof limit === 'function') { + onchunk = limit; + limit = 2e3; + } + + const options = { + limit, + query(t) { + return t.where('fa').notEqual(fmdb.toStore('')); + } + }; + + if (onchunk) { + return fmdb.getchunk('f', options, onchunk); + } + + delete options.limit; + return fmdb.getbykey('f', options); + } + }, + + /** + * Fetch all children recursively; also, fetch path to root + * + * @param {Array} handles + * @returns {Promise} + * @memberOf dbfetch + */ + async coll(handles) { + if (!fmdb) { + return; + } + + // fetch nodes and their path to root + await this.geta(handles); + + const folders = []; + for (let i = handles.length; i--;) { + const n = M.d[handles[i]]; + if (n && (n.t || n.tvf)) { + folders.push(n.h); + } + } + + if (folders.length) { + await dbfetch.tree(folders); + } + } + }); + + return {value: Object.freeze(dbfetch)}; +})()); + +/* Collect entropy from mouse motion and key press events + * Note that this is coded to work with either DOM2 or Internet Explorer + * style events. + * We don't use every successive mouse movement event. + * Instead, we use some bits from random() to determine how many + * subsequent mouse movements we ignore before capturing the next one. + * + * Collected entropy is used to salt asmCrypto's PRNG. + * + * mouse motion event code originally from John Walker + * key press timing code thanks to Nigel Johnstone */ + +var lastactive = Date.now(); + +var bioSeed = new Uint32Array(256); +var bioCounter = 0; + +var mouseMoveSkip = 0; // Delay counter for mouse entropy collection + +// ---------------------------------------- + +if (window.performance !== undefined && window.performance.now !== undefined) { + // Though `performance.now()` SHOULD be accurate to a microsecond, + // spec says it's implementation-dependant (http://www.w3.org/TR/hr-time/#sec-DOMHighResTimeStamp) + // That's why 16 least significan bits are returned + var timeValue = function() { + return (window.performance.now() * 1000) & 0xffff + }; +} +else { + if (d) { + console.warn("Entropy collector uses low-precision Date.now()"); + } + var timeValue = function() { + return Date.now() & 0xffff + }; +} + +function keyPressEntropy(e) { + 'use strict'; + lastactive = Date.now(); + + bioSeed[bioCounter++ & 255] ^= (e.keyCode << 16) | timeValue(); + + if (typeof onactivity === 'function') { + delay('ev:on.activity', onactivity, 800); + } +} + +var mouseApiRetryT = false; + +function mouseMoveEntropy(e) { + 'use strict'; + lastactive = Date.now(); + + var v = (((e.screenX << 8) | (e.screenY & 255)) << 16) | timeValue(); + + if (saveRandSeed.needed) { + if (bioCounter < 45) { + // `bioCounter` is incremented once per 4 move events in average + // 45 * 4 = 180 first move events should provide at about 270 bits of entropy + // (conservative estimation is 1.5 bits of entropy per move event) + asmCrypto.random.seed(new Uint32Array([v])); + } + else { + if (d) { + console.log("Got the first seed for future PRNG reseeding"); + } + saveRandSeed(); + } + } + + if (mouseMoveSkip-- <= 0) { + bioSeed[bioCounter++ & 255] ^= v; + + mouseMoveSkip = (Math.random() * 8) | 0; + + if ((bioCounter & 255) === 0) { + if (d) { + console.log("Reseeding PRNG with collected entropy"); + } + asmCrypto.random.seed(bioSeed); + saveRandSeed(); + } + } + + if (!mouseApiRetryT || mouseApiRetryT < lastactive) { + mouseApiRetryT = lastactive + 2000; + api_retry(); + } + + if (typeof onactivity === 'function') { + delay('ev:on.activity', onactivity, 700); + } +} + +// Store some random bits for reseeding RNG in the future +function saveRandSeed() { + 'use strict'; + // @todo move this out of localStorage.. + tryCatch(() => { + const randseed = new Uint8Array(32); + asmCrypto.getRandomValues(randseed); + localStorage.randseed = base64urlencode(asmCrypto.bytes_to_string(randseed)); + })(); + saveRandSeed.needed = false; +} +saveRandSeed.needed = !localStorage.randseed; + +// ---------------------------------------- + +function eventsEnd() { + if (document.removeEventListener) { + document.removeEventListener("mousemove", mouseMoveEntropy, false); + document.removeEventListener("keypress", keyPressEntropy, false); + } + else if (document.detachEvent) { + document.detachEvent("onmousemove", mouseMoveEntropy); + document.detachEvent("onkeypress", keyPressEntropy); + } +} + +// Start collection of entropy. + +function eventsCollect() { + 'use strict'; + if (!d) { + asmCrypto.random.skipSystemRNGWarning = true; + } + + if (localStorage.randseed) { + if (d) { + console.log("Initially seeding PRNG with a stored seed"); + } + asmCrypto.random.seed(asmCrypto.string_to_bytes(base64urldecode(localStorage.randseed))); + } + + if (mega.getRandomValues.strong) { + if (d > 1) { + console.log("Initially seeding PRNG with strong random values"); + } + asmCrypto.random.seed(mega.getRandomValues(384)); + } + + if ((document.implementation.hasFeature("Events", "2.0")) + && document.addEventListener) // Document Object Model (DOM) 2 events + { + document.addEventListener("mousemove", mouseMoveEntropy, false); + document.addEventListener("keypress", keyPressEntropy, false); + } + else if (document.attachEvent) // IE 5 and above event model + { + document.attachEvent("onmousemove", mouseMoveEntropy); + document.attachEvent("onkeypress", keyPressEntropy); + } +} + +// keyboard/mouse entropy +mBroadcaster.once('boot_done', eventsCollect); + +/** + * MEGA Data Structures + * Modern/unified way of handling/monitoring/syncing data changes required for the Webclient to work in a more: + * 1. easy to use by us (developers) + * 2. reactive/optimised way + */ + +(function _dataStruct(global) { +'use strict'; + +var dsIncID = 0; + +var VALUE_DESCRIPTOR = {configurable: true, value: null}; +function _defineValue(target, prop, value) { + VALUE_DESCRIPTOR.value = value; + Object.defineProperty(target, prop, VALUE_DESCRIPTOR); + VALUE_DESCRIPTOR.value = null; +} + +var VNE_DESCRIPTOR = {configurable: true, writable: true, value: null}; +function _defineNonEnum(target, prop, value) { + VNE_DESCRIPTOR.value = value; + Object.defineProperty(target, prop, VNE_DESCRIPTOR); + VNE_DESCRIPTOR.value = null; +} + +function _cmp(a, b) { + return a === b || a === null && b === undefined || b === null && a === undefined; +} + +function _timing(proto, min, max) { + min = min || 10; + max = max || 70; + var wrap = function(f, m) { + return function(...args) { + var t = performance.now(); + var r = m.apply(this, args); + if ((t = performance.now() - t) > min) { + var fn = t > max ? 'error' : 'warn'; + console[fn]('[timing] %s.%s: %fms', this, f, t, [this], args); + } + return r; + }; + }; + proto = proto.prototype || proto; + var keys = Object.keys(proto); + + console.warn('timing %s...', Object(proto.constructor).name || '', keys); + + for (var i = keys.length; i--;) { + if (typeof proto[keys[i]] === 'function') { + proto[keys[i]] = wrap(keys[i], proto[keys[i]]); + } + } + + return proto; +} + +const _warnOnce = SoonFc(400, function _warnOnce(where, ...args) { + const prop = `__warn_once_${MurmurHash3(args[0], -0x7ff)}`; + + if (!where[prop]) { + _defineNonEnum(where, prop, 1); + console.warn.apply(console, args); + } +}); + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +function MegaDataEvent(src, target) { + if (typeof src === 'object') { + this.originalEvent = src; + + if (src.defaultPrevented || src.defaultPrevented === undefined + && src.returnValue === false || src.isDefaultPrevented && src.isDefaultPrevented()) { + + this.isDefaultPrevented = returnTrue; + } + } + else { + src = {type: src}; + } + + this.type = src.type; + this.target = src.target || target; +} + +inherits(MegaDataEvent, null); + +MegaDataEvent.prototype.isDefaultPrevented = returnFalse; +MegaDataEvent.prototype.isPropagationStopped = returnFalse; + +MegaDataEvent.prototype.preventDefault = function() { + this.isDefaultPrevented = returnTrue; + if (this.originalEvent) { + this.originalEvent.preventDefault(); + } +}; + +MegaDataEvent.prototype.stopPropagation = function() { + this.isPropagationStopped = returnTrue; + if (this.originalEvent) { + this.originalEvent.stopPropagation(); + } +}; + +// Very simple replacement for jQuery.event +function MegaDataEmitter() { + /* dummy */ +} + +inherits(MegaDataEmitter, null); + +_defineValue(MegaDataEmitter, 'seen', Object.create(null)); +_defineValue(MegaDataEmitter, 'expando', '__event_emitter_' + (Math.random() * Math.pow(2, 56) - 1)); + +/** @function MegaDataEmitter.getEmitter */ +_defineValue(MegaDataEmitter, 'getEmitter', function(event, target) { + var emitter = target[MegaDataEmitter.expando]; + if (!emitter) { + emitter = Object.create(null); + _defineValue(target, MegaDataEmitter.expando, emitter); + } + var pos; + var src = event.type && event; + var types = String(event.type || event).split(/\s+/).filter(String); + var namespaces = Array(types.length); + + for (var i = types.length; i--;) { + namespaces[i] = ''; + if ((pos = types[i].indexOf('.')) >= 0) { + namespaces[i] = types[i].substr(pos + 1).split('.').sort().join('.'); + types[i] = types[i].substr(0, pos); + } + } + return {types: types, namespaces: namespaces, event: src || types[0], events: emitter}; +}); + +/** @function MegaDataEmitter.wrapOne */ +_defineValue(MegaDataEmitter, 'wrapOne', function(handler) { + return function _one(event) { + this.off(event, _one); + return handler.apply(this, arguments); + }; +}); + +MegaDataEmitter.prototype.off = function(event, handler) { + if (event instanceof MegaDataEvent) { + event.currentTarget.off(event.type + (event.namespace ? '.' + event.namespace : ''), handler); + return this; + } + + var emitter = MegaDataEmitter.getEmitter(event, this); + for (var j = emitter.types.length; j--;) { + var type = emitter.types[j]; + var namespace = emitter.namespaces[j]; + var handlers = emitter.events[type] || []; + + for (var i = handlers.length; i--;) { + var tmp = handlers[i]; + + if (type === tmp.type + && (!handler || handler.pid === tmp.pid) + && (!namespace || namespace === tmp.namespace)) { + + handlers.splice(i, 1); + } + } + + if (!handlers.length) { + delete emitter.events[type]; + } + } + + return this; +}; + +MegaDataEmitter.prototype.one = function(event, handler, data) { + return this.on(event, handler, data, true); +}; + +MegaDataEmitter.prototype.on = function(event, handler, data, one) { + var emitter = MegaDataEmitter.getEmitter(event, this); + var events = emitter.events; + + handler = one ? MegaDataEmitter.wrapOne(handler) : handler; + if (!handler.pid) { + handler.pid = ++dsIncID; + } + + for (var i = emitter.types.length; i--;) { + var type = emitter.types[i]; + var namespace = emitter.namespaces[i]; + + if (!events[type]) { + events[type] = []; + } + + events[type].push({ + type: type, + data: data, + pid: handler.pid, + handler: handler, + namespace: namespace + }); + + if (d) { + MegaDataEmitter.seen[type] = 1; + } + } + return this; +}; + +// eslint-disable-next-line complexity +MegaDataEmitter.prototype.trigger = function(event, data) { + var emitter = MegaDataEmitter.getEmitter(event, this); + + event = new MegaDataEvent(emitter.event, this); + event.data = data; + + // @todo require all trigger() calls to provide an array to prevent checking for isArray() + data = data ? Array.isArray(data) ? data : [data] : []; + data = [event, ...data]; + + let idx = 0; + let res, tmp; + var type = emitter.types[0]; + var namespace = emitter.namespaces[0]; + const handlers = [...(emitter.events[type] || [])]; + while ((tmp = handlers[idx++]) && !event.isPropagationStopped()) { + event.currentTarget = this; + event.namespace = namespace; + + if ((!namespace || namespace === tmp.namespace) + && (res = tmp.handler.apply(this, data)) !== undefined) { + + event.result = res; + if (res === false) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + + if (!event.isDefaultPrevented()) { + tmp = this['on' + type]; + + if (typeof tmp === 'function') { + event.result = tmp.apply(this, data); + if (event.result === false) { + event.preventDefault(); + } + } + } + + if (event.originalEvent && event.result !== undefined) { + event.originalEvent.returnValue = event.result; + } + + return event.result; +}; + +MegaDataEmitter.prototype.rebind = function(event, handler) { + return this.off(event).on(event, handler); +}; +MegaDataEmitter.prototype.bind = MegaDataEmitter.prototype.on; +MegaDataEmitter.prototype.unbind = MegaDataEmitter.prototype.off; + +Object.freeze(MegaDataEmitter); + +/** + * Simple map-like implementation that tracks changes + * + * @param [parent] + * @param [defaultData] + * @constructor + */ +function MegaDataMap(parent, defaultData) { + // MegaDataEmitter.call(this); + + /** @property MegaDataMap._parent */ + _defineNonEnum(this, '_parent', parent || false); + + /** @property MegaDataMap._dataChangeIndex */ + _defineNonEnum(this, '_dataChangeIndex', 0); + /** @property MegaDataMap._dataChangeListeners */ + _defineNonEnum(this, '_dataChangeListeners', []); + /** @property MegaDataMap._dataChangeTrackedId */ + _defineNonEnum(this, '_dataChangeTrackedId', ++dsIncID); + + /** @property MegaDataMap._data */ + _defineNonEnum(this, '_data', defaultData || {}); + Object.setPrototypeOf(this._data, null); + + if (d > 1) { + if (!MegaDataMap.__instancesOf) { + MegaDataMap.__instancesOf = new WeakMap(); + } + MegaDataMap.__instancesOf.set(this, Object.getPrototypeOf(this)); + } +} + +inherits(MegaDataMap, MegaDataEmitter); + +/** @property MegaDataMap.__ident_0 */ +lazy(MegaDataMap.prototype, '__ident_0', function() { + return this.constructor.name + '.' + ++dsIncID; +}); + +/** @function MegaDataMap.prototype._schedule */ +lazy(MegaDataMap.prototype, '_schedule', function() { + let task = null; + const callTask = () => { + if (task) { + queueMicrotask(task); + task = null; + } + }; + return (callback) => { + if (!task) { + queueMicrotask(callTask); + } + task = () => callback.call(this); + }; +}); + +Object.defineProperty(MegaDataMap.prototype, 'length', { + get: function() { + return Object.keys(this._data).length; + }, + configurable: true +}); + +_defineValue(MegaDataMap.prototype, 'valueOf', function() { + return this.__ident_0; +}); + +MegaDataMap.prototype.trackDataChange = function(...args) { + var self = this; + this._schedule(function _trackDataChange() { + var that = self; + + do { + args.unshift(that); + + if (that === self) { + that._dispatchChangeListeners(args); + } + else { + that._enqueueChangeListenersDsp(args); + } + + } while ((that = that._parent) instanceof MegaDataMap); + }); +}; + +MegaDataMap.prototype.addChangeListener = function(cb) { + if (d) { + var h = this._dataChangeListeners; + if (d > 1 && h.length > 200) { + _warnOnce(this, '%s: Too many handlers added(%d)! race?', this, h.length, [this]); + } + console.assert(h.indexOf(cb) < 0, 'handler exists'); + + if (typeof cb === 'function') { + console.assert(!cb.__mdmChangeListenerID, 'reusing handler'); + } + else { + console.assert(typeof cb.handleChangeEvent === 'function', 'invalid instance'); + } + } + + if (typeof cb === 'function') { + /** @property Function.__mdmChangeListenerID */ + _defineValue(cb, '__mdmChangeListenerID', dsIncID + 1); + } + + this._dataChangeListeners.push(cb); + return ++dsIncID; +}; + +MegaDataMap.prototype.removeEventHandler = function(handler) { + var result = false; + var listeners = this._dataChangeListeners; + + if (d) { + console.assert(handler && typeof handler.handleChangeEvent === 'function'); + } + + for (var i = listeners.length; i--;) { + if (listeners[i] === handler) { + listeners.splice(i, 1); + ++result; + } + } + + return result; +}; + +MegaDataMap.prototype.removeChangeListener = function(cb) { + var cId = cb && cb.__mdmChangeListenerID || cb; + + if (d) { + console.assert(cId > 0, 'invalid listener id'); + } + + if (cId > 0) { + var listeners = this._dataChangeListeners; + + for (var i = listeners.length; i--;) { + if (listeners[i].__mdmChangeListenerID === cId) { + _defineValue(listeners[i], '__mdmChangeListenerID', 'nop'); + listeners.splice(i, 1); + + if (d > 1) { + while (--i > 0) { + console.assert(listeners[i].__mdmChangeListenerID !== cId); + } + } + + return true; + } + } + } + + return false; +}; + +MegaDataMap.prototype._enqueueChangeListenersDsp = function(args) { + delay(`mdm:cl:q.${this.__ident_0}`, () => this._dispatchChangeListeners(args), 40); +}; + +MegaDataMap.prototype._dispatchChangeListeners = function(args) { + var listeners = this._dataChangeListeners; + + if (d > 1) { + console.debug('%s: dispatching %s awaiting listeners', this, listeners.length, [this]); + } + this._dataChangeIndex++; + + for (var i = listeners.length; i--;) { + var result; + var listener = listeners[i]; + + if (typeof listener === 'function') { + result = listener.apply(this, args); + } + else if (listener) { + result = listener.handleChangeEvent.apply(listener, args); + } + + if (result === 0xDEAD) { + this.removeChangeListener(listener); + } + } +}; + +// eslint-disable-next-line local-rules/misc-warnings +MegaDataMap.prototype.forEach = function(cb) { + // this._data is a dict, so no guard-for-in needed + // eslint-disable-next-line guard-for-in + for (var k in this._data) { + if (cb(this._data[k], k) === false) { + break; + } + } +}; +MegaDataMap.prototype.every = function(cb) { + var self = this; + return self.keys().every(function(k) { + return cb(self._data[k], k); + }); +}; +MegaDataMap.prototype.some = function(cb) { + var self = this; + return self.keys().some(function(k) { + return cb(self._data[k], k); + }); +}; + +MegaDataMap.prototype.map = function(cb) { + var self = this; + var res = []; + self.forEach(function(v, k) { + var intermediateResult = cb(v, k); + if (intermediateResult !== null && intermediateResult !== undefined) { + res.push(intermediateResult); + } + }); + return res; +}; + +MegaDataMap.prototype.keys = function() { + return Object.keys(this._data); +}; + +MegaDataMap.prototype.size = function() { + return this.keys().length; +}; + +MegaDataMap.prototype.destroy = tryCatch(function() { + var self = this; + Object.keys(self).map(function(k) { + return self._removeDefinedProperty(k); + }); + Object.freeze(this); +}); + +MegaDataMap.prototype.clear = tryCatch(function() { + Object.keys(this).map((k) => { + return this._removeDefinedProperty(k); + }); + this.trackDataChange(); +}); + +MegaDataMap.prototype.setObservable = function(k, defaultValue) { + Object.defineProperty(this, k, { + get: function() { + return this.get(k, defaultValue); + }, + set: function(value) { + this.set(k, value, false, defaultValue); + }, + enumerable: true + }); +}; + +MegaDataMap.prototype.exists = function(keyValue) { + return keyValue in this._data; +}; + +MegaDataMap.prototype.set = function(k, v, ignoreTrackDataChange) { + if (d) { + console.assert(k !== undefined && k !== false, "missing key"); + } + + if (v instanceof MegaDataMap && !v._parent) { + _defineNonEnum(v, '_parent', this); + } + + if (_cmp(this._data[k], v) === true) { + return false; + } + + this._data[k] = v; + + if (k in this) { + this[k] = v; + } + else { + Object.defineProperty(this, k, { + get: function() { + return this._data[k]; + }, + set: function(value) { + if (value !== this._data[k]) { + this._data[k] = value; + this.trackDataChange(this._data, k, v); + } + }, + enumerable: true, + configurable: true + }); + } + + if (!ignoreTrackDataChange) { + this.trackDataChange(this._data, k, v); + } +}; + +MegaDataMap.prototype.remove = function(k) { + var v = this._data[k]; + + if (v instanceof MegaDataMap && v._parent === this) { + _defineNonEnum(v, '_parent', null); + } + + this._removeDefinedProperty(k); + this.trackDataChange(this._data, k, v); +}; + +/** @function MegaDataMap.prototype._removeDefinedProperty */ +_defineValue(MegaDataMap.prototype, '_removeDefinedProperty', function(k) { + if (k in this) { + Object.defineProperty(this, k, { + writable: true, + value: undefined, + configurable: true + }); + delete this[k]; + } + if (k in this._data) { + delete this._data[k]; + } +}); + +/** @function MegaDataMap.prototype.toJS */ +_defineValue(MegaDataMap.prototype, 'toJS', function() { + return this._data; +}); + +_defineValue(MegaDataMap.prototype, 'hasOwnProperty', function(prop) { + return prop in this._data; +}); + +_defineValue(MegaDataMap.prototype, 'propertyIsEnumerable', function(prop) { + return this.hasOwnProperty(prop); +}); + + + +/** + * Plain Object-like container for storing data, with the following features: + * - track changes ONLY on predefined list of properties + * + * @param {Object} [trackProperties] properties to observe for changes + * @param {Object} [defaultData] default/initial data + * @constructor + */ +function MegaDataObject(trackProperties, defaultData) { + MegaDataMap.call(this, null, defaultData); + + if (trackProperties) { + for (var k in trackProperties) { + if (Object.hasOwnProperty.call(trackProperties, k)) { + this.setObservable(k, trackProperties[k]); + } + } + } + + /* + if (d && typeof Proxy === 'function') { + var slave = Object.create(Object.getPrototypeOf(this)); + Object.setPrototypeOf(this, new Proxy(slave, { + defineProperty: function(target, property, descriptor) { + if (String(property).startsWith('jQuery')) { + debugger + console.assert(false); + } + Object.defineProperty(target, property, descriptor); + return true; + } + })); + }*/ +} + +inherits(MegaDataObject, MegaDataMap); + +MegaDataObject.prototype.set = function(k, v, ignoreDataChange, defaultVal) { + var notSet = !(k in this._data); + + if (notSet || _cmp(this._data[k], v) !== true) { + if (notSet && _cmp(defaultVal, v) === true) { + // this._data[...] is empty and defaultVal == newVal, DON'T track updates. + return false; + } + + if (!ignoreDataChange) { + this.trackDataChange(this._data, k, v); + } + this._data[k] = v; + } +}; + +MegaDataObject.prototype.get = function(k, defaultVal) { + return this._data && k in this._data ? this._data[k] : defaultVal; +}; + + +/** + * MegaDataSortedMap + * @param keyField + * @param sortField + * @param parent + * @constructor + */ +function MegaDataSortedMap(keyField, sortField, parent) { + MegaDataMap.call(this, parent); + + /** @property MegaDataSortedMap._parent */ + _defineNonEnum(this, '_parent', parent || false); + /** @property MegaDataSortedMap._sortedVals */ + _defineNonEnum(this, '_sortedVals', []); + /** @property MegaDataSortedMap._keyField */ + _defineNonEnum(this, '_keyField', keyField); + /** @property MegaDataSortedMap._sortField */ + _defineNonEnum(this, '_sortField', sortField); +} + +inherits(MegaDataSortedMap, MegaDataMap); + +Object.defineProperty(MegaDataSortedMap.prototype, 'length', { + get: function() { + return this._sortedVals.length; + }, + configurable: true +}); + +// eslint-disable-next-line local-rules/misc-warnings +MegaDataSortedMap.prototype.forEach = function(cb) { + for (var i = 0; i < this._sortedVals.length; ++i) { + var k = this._sortedVals[i]; + cb(this._data[k], k); + } +}; + +MegaDataSortedMap.prototype.replace = function(k, newValue) { + if (this._data[k] === newValue) { + // already the same, save some CPU and do nothing. + return true; + } + + if (k in this._data) { + // cleanup + if (newValue[this._keyField] !== k) { + this.removeByKey(k); + } + this.push(newValue); + return true; + } + + return false; +}; + +/** @property MegaDataSortedMap._comparator */ +lazy(MegaDataSortedMap.prototype, '_comparator', function() { + var self = this; + + if (this._sortField === undefined) { + return indexedDB.cmp.bind(indexedDB); + } + + if (typeof self._sortField === "function") { + return function(a, b) { + return self._sortField(self._data[a], self._data[b]); + }; + } + + return function(a, b) { + var sortFields = self._sortField.split(","); + + for (var i = 0; i < sortFields.length; i++) { + var sortField = sortFields[i]; + var ascOrDesc = 1; + if (sortField[0] === '-') { + ascOrDesc = -1; + sortField = sortField.substr(1); + } + + var _a = self._data[a][sortField]; + var _b = self._data[b][sortField]; + + if (_a !== undefined && _b !== undefined) { + if (_a < _b) { + return -1 * ascOrDesc; + } + if (_a > _b) { + return ascOrDesc; + } + return 0; + } + } + return 0; + }; +}); + +MegaDataSortedMap.prototype.push = function(v) { + var self = this; + + var keyVal = v[self._keyField]; + + if (keyVal in self._data) { + self.removeByKey(keyVal); + } + + self.set(keyVal, v, true); + + var minIndex = 0; + var maxIndex = this._sortedVals.length - 1; + var currentIndex; + var currentElement; + var cmp = self._comparator; + + var result = false; + while (minIndex <= maxIndex) { + currentIndex = (minIndex + maxIndex) / 2 | 0; + currentElement = this._sortedVals[currentIndex]; + + var cmpResult = cmp(currentElement, keyVal); + if (cmpResult === -1) { + minIndex = currentIndex + 1; + } + else if (cmpResult === 1) { + maxIndex = currentIndex - 1; + } + else { + result = true; + break; + } + } + + if (!result) { + if (currentElement === undefined) { + // first + self._sortedVals.push(keyVal); + } + else { + self._sortedVals.splice(cmp(currentElement, keyVal) === -1 ? currentIndex + 1 : currentIndex, 0, keyVal); + } + + self.trackDataChange(); + } + else { + // found another item in the list, with the same order value, insert after + self._sortedVals.splice(currentIndex, 0, keyVal); + } + return self._sortedVals.length; +}; + +MegaDataSortedMap.prototype.removeByKey = MegaDataSortedMap.prototype.remove = function(keyValue) { + if (keyValue in this._data) { + array.remove(this._sortedVals, keyValue); + this._removeDefinedProperty(keyValue); + this.trackDataChange(); + return true; + } + return false; +}; + +MegaDataSortedMap.prototype.exists = function(keyValue) { + return keyValue in this._data; +}; + +MegaDataSortedMap.prototype.keys = function() { + return this._sortedVals; +}; + +MegaDataSortedMap.prototype.values = function() { + var res = []; + // eslint-disable-next-line local-rules/misc-warnings + this.forEach(function(v) { + res.push(v); + }); + + return res; +}; + +MegaDataSortedMap.prototype.getItem = function(num) { + return this._data[this._sortedVals[num]]; +}; + +MegaDataSortedMap.prototype.indexOfKey = function(value) { + return this._sortedVals.indexOf(value); +}; + +MegaDataSortedMap.prototype.clear = function() { + _defineNonEnum(this, '_sortedVals', []); + _defineNonEnum(this, '_data', Object.create(null)); + if (this.trackDataChange) { + this.trackDataChange(); + } +}; + +/** + * Simplified version of `Array.prototype.splice`, only supports 2 args (no adding/replacement of items) for now. + * + * @param {Number} start first index to start from + * @param {Number} deleteCount number of items to delete + * @returns {Array} array of deleted item ids + */ +MegaDataSortedMap.prototype.splice = function(start, deleteCount) { + var deletedItemIds = this._sortedVals.splice(start, deleteCount); + + for (var i = deletedItemIds.length; i--;) { + this._removeDefinedProperty(deletedItemIds[i]); + } + + this.trackDataChange(); + + return deletedItemIds; +}; + +/** + * Returns a regular array (not a sorted map!) of values sliced as with `Array.prototype.slice` + * + * @param {Number} begin first index to start from + * @param {Number} end last index where to end the "slice" + * @returns {Array} array of removed IDs + */ +MegaDataSortedMap.prototype.slice = function(begin, end) { + var results = this._sortedVals.slice(begin, end); + for (var i = results.length; i--;) { + results[i] = this._data[results[i]]; + } + return results; +}; + +var testMegaDataSortedMap = function() { + var arr1 = new MegaDataSortedMap("id", "orderValue,ts"); + arr1.push({ + 'id': 1, + 'ts': 1, + 'orderValue': 1 + }); + + arr1.push({ + 'id': 2, + 'ts': 3, + 'orderValue': 2 + }); + arr1.push({ + 'id': 3, + 'ts': 2 + }); + + arr1.forEach(function(v, k) { + console.error(v, k); + }); + return arr1; +}; + + +/** + * Generic "MegaDataBitMap" manager that manages a list of all registered (by unique name) MegaDataBitMaps + * + * @constructor + */ +function MegaDataBitMapManager() { + this._bitmaps = Object.create(null); +} + +inherits(MegaDataBitMapManager, null); + +/** + * Register a MegaDataBitMap + * @param {String} name + * @param {MegaDataBitMap} megaDataBitMap + */ +MegaDataBitMapManager.prototype.register = function(name, megaDataBitMap) { + if (this._bitmaps[name] !== undefined) { + console.error("Tried to register a MegaDataBitMap that already exists (at least with that name)."); + return; + } + this._bitmaps[name] = megaDataBitMap; +}; + +/** + * Check if an MegaDataBitMap with a specific `name` exists. + * + * @param {String} name + * @returns {Boolean} + */ +MegaDataBitMapManager.prototype.exists = function(name) { + return typeof(this._bitmaps[name]) !== 'undefined'; +}; + +/** + * Get the instance of a specific by `name` MegaDataBitMap + * + * @param {String} name + * @returns {*} + */ +MegaDataBitMapManager.prototype.get = function(name) { + return this._bitmaps[name]; +}; + +/** + * MegaDataBitMaps are array, that are stored as attributes (on the MEGA API side), which hold 0s and 1s for a specific + * (predefined, ordered set of) keys. + * Once the data is .commit()'ed adding new keys should always be done at the end of the array. + * No keys should be removed, because that would mess up the values stored in the user attribute, since all keys are + * only available on the client side, the data is mapped via the key index (e.g. key1 = 0, key2 = 1, keyN = N - 1). + * + * @param {String} name Should be unique. + * @param {Boolean} isPub should the attribute be public or private? + * @param {Array} keys Array of keys + * @constructor + */ +function MegaDataBitMap(name, isPub, keys) { + MegaDataObject.call(this, array.to.object(keys, 0)); + + this.name = name; + this._keys = keys; + this._isPub = isPub; + this._data = new Uint8Array(keys.length); + this._updatedMask = new Uint8Array(keys.length); + this._version = null; + + attribCache.bitMapsManager.register(name, this); + + this._readyPromise = new Promise((resolve, reject) => { + mega.attr.get(u_handle, name, this.isPublic() ? true : -2, true) + .then(r => { + if (typeof r !== 'string') { + throw r; + } + this.mergeFrom(r, false); + resolve(); + }) + .catch(ex => { + if (ex === ENOENT) { + return resolve(ex); + } + // -9 is ok, means the attribute does not exists on the server + console.error("mega.attr.get failed:", ex); + reject(ex); + }); + }); +} + +inherits(MegaDataBitMap, MegaDataObject); + +Object.defineProperty(MegaDataBitMap.prototype, 'length', { + get: function() { + return this._data.length; + }, + enumerable: false, + configurable: true +}); + +/** + * Returns a list of keys that are currently registered with this MegaDataBitMap instance. + * + * @returns {Array} + */ +MegaDataBitMap.prototype.keys = function() { + return this._keys; +}; + +/** + * Flip the value of `key` from 0 -> 1 or from 1 -> 0 + * Calling this function would trigger a change event. + * Calling this function would NOT persist the data on the server, until the .commit() method is called. + * + * @param {String} key + * @returns {Boolean} + */ +MegaDataBitMap.prototype.toggle = function(key) { + const keyIdx = this._keys.indexOf(key); + if (keyIdx === -1) { + return false; + } + + this.set(key, this._data[keyIdx] ? 0 : 1); +}; + +/** + * Reset the internal "updated mask" to mark all keys as commited. + * Mainly used internally by `MegaDataBitMap.prototype.commit()` + */ +MegaDataBitMap.prototype.commited = function() { + this._updatedMask = new Uint8Array(this._keys.length); +}; + +/** + * Change the value of `key` to `v` (can be either 0 or 1, integer). + * Calling this function would trigger a change event. + * Calling this function would NOT persist the data on the server, until the .commit() method is called. + * + * @param {String} key + * @param {Number} v Can be either 0 or 1 + * @param {Boolean} ignoreDataChange If true, would not trigger a change event + * @param {Number} defaultVal By default, the default value is supposed to be 0, but any other value can be passed here + */ +MegaDataBitMap.prototype.set = function(key, v, ignoreDataChange, defaultVal) { + if (typeof(v) !== 'number' && v !== 1 && v !== 0) { + console.error("MegaDataBitMap...set was called with non-zero/one value as 2nd argument."); + return; + } + + this._readyPromise.then(() => { + this.setSync(key, v, ignoreDataChange, defaultVal); + }); +}; + +/** + * Synchronous setter. Prefer using MegaDataBitMap.set(). + * Can use instead if you are aware of the state of this._readyPromise + * + * @param {String} key The bit map key to set + * @param {Number} v Can be either 0 or 1 + * @param {Boolean} ignoreDataChange If true, would not trigger a change event + * @param {Number} defaultVal By default, the default value is supposed to be 0, but any other value can be passed here + * @returns {boolean|void} False if no change + * @see MegaDataBitMap.prototype.set + */ +MegaDataBitMap.prototype.setSync = function(key, v, ignoreDataChange, defaultVal = 0) { + const keyIdx = this._keys.indexOf(key); + if (keyIdx === -1) { + return false; + } + + if ( + typeof this._data[keyIdx] === 'undefined' + && typeof defaultVal !== 'undefined' + && _cmp(defaultVal, v) === true + || this._data[keyIdx] === v /* already the same value... */ + ) { + // self._data[...] is empty and defaultVal == newVal, DON'T track updates. + return false; + } + + this._data[keyIdx] = v; + this._updatedMask[keyIdx] = 1; + + if (!ignoreDataChange) { + this.trackDataChange(this._data, key, v); + } +}; + +/** + * Returns the promise that will be resolved when the MegaDataBitMap has finished requesting the attribute from + * the server initially + * + * @returns {Promise} The initialisation promise + */ +MegaDataBitMap.prototype.isReady = function() { + return this._readyPromise; +}; + +MegaDataBitMap.prototype.get = async function(key, defaultVal = false) { + await this._readyPromise; + return this.getSync(key, defaultVal); +}; + +/** + * Synchronous getter. Prefer using MegaDataBitMap.get(). + * Can use instead if you are aware of the state of this._readyPromise + * + * @param {string} key Key for the value to fetch + * @param {*|boolean} defaultVal Default value if the key is not set + * @returns {*|boolean} The current value of the key + * @see MegaDataBitMap.prototype.get + */ +MegaDataBitMap.prototype.getSync = function(key, defaultVal = false) { + const keyIdx = this._keys.indexOf(key); + if (keyIdx === -1) { + throw key; + } + + return this._data && typeof this._data[keyIdx] !== 'undefined' ? this._data[keyIdx] : defaultVal; +}; + +/** + * Merge the current MegaDataBitMap value with a {String} `str`. + * Merging is done the following way: + * - IF a value of a key, passed by `str` differs from the one in the current instance: + * a) if was marked as 'dirty' (not commited, via the update mask) it would not be merged (its assumed that any data, + * stored in 'dirty' state and not commited is the most up to date one) + * b) the local value for that key would be updated, following a change event + * + * @param {String} str String, containing 0 and 1 chars to be parsed as Uint8Array with 0 and 1s + * @param {Boolean} requiresCommit Pass true, to mark all changes in the update mask (e.g. they would be schedulled for + * sending to the server on the next .commit() call) + */ +MegaDataBitMap.prototype.mergeFrom = function(str, requiresCommit) { + let targetLength = str.length; + if (this._keys.length > str.length) { + targetLength = this._keys.length; + } + for (let i = 0, strLen = str.length; i < strLen; i++) { + const newVal = str.charCodeAt(i); + if (this._data[i] !== newVal) { + if (this._updatedMask[i] && this._updatedMask[i] === 1) { + // found uncommited change, would leave (and not merge), since in that case, we would assume that + // since changes are commited (almost) immediately after the .set()/.toggle() is done, then this + // was just changed and its newer/up to date then the one from the server. + } + else { + this._data[i] = newVal; + this.trackDataChange( + this._data, + this._keys[i], + newVal + ); + if (requiresCommit) { + this._updatedMask[i] = 1; + } + } + } + } + + // resize if needed. + if (this._keys.length > targetLength) { + this._data.fill(false, this._keys.length, targetLength - this._keys.length); + } +}; + +/** + * Convert to a base64urlencoded string + * + * @returns {String} + */ +_defineValue(MegaDataBitMap.prototype, 'toString', function() { + return base64urlencode(String.fromCharCode.apply(null, this._data)); +}); + +/** + * Convert the mask to a base64urlencoded string + * + * @returns {String} + */ +MegaDataBitMap.prototype.maskToString = function() { + return base64urlencode( + String.fromCharCode.apply(null, this._updatedMask) + ); +}; + +/** + * Convert to a 0 and 1 string (separated by ",") + * + * @returns {String} + */ +MegaDataBitMap.prototype.toDebugString = function() { + return this._data.toString(); +}; + +/** + * Set the current version of the attribute (received and controlled by the API) + * + * @param ver + * @returns {String} + */ +MegaDataBitMap.prototype.setVersion = function(ver) { + return this._version = ver; +}; + +/** + * Get the current version of the attribute (received and controlled by the API) + * + * @returns {String|undefined} + */ +MegaDataBitMap.prototype.getVersion = function() { + return this._version; +}; + +/** + * Was this attribute marked as public? + * + * @returns {Boolean} + */ +MegaDataBitMap.prototype.isPublic = function() { + return this._isPub; +}; + +/** + * Commits all changes which were marked as changed. + * All changed keys/bits would be overwritten on the server + * All non-changed keys/bits, may be altered in case another commit (by another client) had changed them. In that case, + * a change event would be triggered. + * + * @returns {Promise} + */ +MegaDataBitMap.prototype.commit = function() { + this._commitPromise = this._commitPromise || new Promise((resolve, reject) => { + delay(`mdbm-commit${this.name}`, () => { + if (!this._updatedMask.includes(1)) { + delete this._commitPromise; + return resolve(false); + } + + const attributeFullName = `${this.isPublic() ? '+' : '^'}!${this.name}`; + const cacheKey = `${u_handle}_${attributeFullName}`; + attribCache.setItem(cacheKey, JSON.stringify([this.toString(), 0])); + api_req( + { + a: 'usma', + n: attributeFullName, + ua: this.toString(), + m: this.maskToString() + }, + { + callback: (response) => { + if (typeof response === 'number') { + reject(response); + } + else { + if (response.ua && response.ua !== this.toString()) { + this.mergeFrom(base64urldecode(response.ua)); + attribCache.setItem(cacheKey, JSON.stringify([this.toString(), 0])); + } + if (response.v) { + this.setVersion(response.v); + } + this.commited(); + resolve(response); + } + delete this._commitPromise; + } + } + ); + }, 100); + }); + + return this._commitPromise; +}; + +/** + * Commit the MegaDataBitMap with basic handling of the resulting promise + * + * @returns {void} void + */ +MegaDataBitMap.prototype.safeCommit = function() { + if (this._commitPromise) { + // Already committing + return; + } + this.commit().then(nop).catch(dump); +}; + +/** + * Initialise a new MegaDataBitMap from string + * Only used for testing some stuff. + * + * @param {String} name + * @param {Boolean} isPub + * @param {Array} keys + * @param {String} base64str + * @param {*} [parent] + * @returns {MegaDataBitMap} + */ +MegaDataBitMap.fromString = function(name, isPub, keys, base64str, parent) { + const str = base64urldecode(base64str); + let targetLength = str.length; + if (keys.length > str.length) { + targetLength = keys.length; + } + const buf = new ArrayBuffer(targetLength); // 2 bytes for each char + const bufView = new Uint8Array(buf); + for (let i = 0, strLen = str.length; i < strLen; i++) { + bufView[i] = str.charCodeAt(i); + } + const mdbm = new MegaDataBitMap(name, isPub, keys, parent); + mdbm._data = new Uint8Array(buf, 0, buf.byteLength); + if (keys.length > buf.length) { + mdbm._data.fill(false, keys.length, buf.length - keys.length); + } + return mdbm; +}; + + +/** + * Mark all bits/keys as 0s (would not commit the changes). + */ +MegaDataBitMap.prototype.reset = function() { + const keys = this.keys(); + for (let i = 0; i < keys.length; i++) { + this.set(keys[i], 0); + } +}; + +/** + * Experiments, tests and examples + * + * @returns {MegaDataBitMap} + */ +var testMegaDataBitMap = function() { + var keys = [ + 'key1', + 'key2', + 'key3', + ]; + var arr1 = new MegaDataBitMap("arr1", false, keys); + + arr1.toggle('key2'); + + arr1.commited(); + + var arr2 = MegaDataBitMap.fromString("arr2", false, keys, arr1.toString()); + assert(arr2.toString() === arr1.toString()); + + console.error(arr2._updatedMask.toString()); + arr2.toggle('key1'); + console.error(arr2._updatedMask.toString()); + arr1.mergeFrom(arr2.toString()); + return arr1; +}; + +/** + * Bitmap based on an integer. + * @param attribute {String} + * Name of the attribute. + * @param map An array of keys to use for identifying each bit. + * @param pub {Boolean|Number} + * True for public attributes (default: true). + * -1 for "system" attributes (e.g. without prefix) + * -2 for "private non encrypted attributes" + * False for private encrypted attributes + * @param nonHistoric {Boolean} + * True for non-historic attributes (default: false). Non-historic attributes will overwrite the value, and + * not retain previous values on the API server. + * @param autoSaveTimeout {int} Autosave after x millisecond. + * @constructor + */ +function MegaIntBitMap(attribute, map, pub, nonHistoric, autoSaveTimeout) { + this.value = undefined; + this.attribute = attribute; + this.map = map; + this.pub = pub; + this.nonHistoric = nonHistoric; + this.isReadyPromise = null; + this.autoSaveTimeout = autoSaveTimeout; + this.autoSaveTimer = null; +} + +/** + * Get a bit based on its key. + * @param key The bit key. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.get = function(key) { + var self = this; + return new MegaPromise(function(resolve, reject) { + self.isReady().then(function() { + var mask; + if (Array.isArray(key)) { + var bitKey; + var result = {}; + for (var i = 0; i < key.length; i++) { + bitKey = key[i]; + mask = self.getMask(bitKey); + if (!mask) { + reject("Invalid Key"); + return false; + } + result[bitKey] = self.value & mask ? true : false; + } + resolve(result); + } else { + mask = self.getMask(key); + if (!mask) { + reject("Invalid Key"); + return false; + } + resolve(self.value & mask ? true : false); + } + + }, reject); + }); +}; + +/** + * Set a bit/bits based on a key/keys. + * @param key object|string The bit key or map of bit keys -> newState + * @param newValue {bool|void} The new state if previous parameter is a bit key. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.set = function(key, newValue) { + var self = this; + return new MegaPromise(function(resolve, reject) { + self.isReady().then(function() { + var mask; + // jscs:disable disallowImplicitTypeConversion + if (typeof key === 'object') { + var bitKey; + var updatedValue = self.value; + var keys = Object.keys(key); + for (var i = 0; i < keys.length; i++) { + bitKey = keys[i]; + mask = self.getMask(bitKey); + if (!mask) { + reject("Invalid Key"); + return false; + } + updatedValue = key[bitKey] ? (updatedValue | mask) : (updatedValue & (~mask)); + } + self.value = updatedValue; + } else { + mask = self.getMask(key); + if (!mask) { + reject("Invalid Key"); + return false; + } + self.value = newValue ? (self.value | mask) : (self.value & (~mask)); + } + // jscs:enable disallowImplicitTypeConversion + self.valueChanged(); + resolve(self.value); + }, reject); + }); +}; + +/** + * Get all bits. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.getAll = function() { + var self = this; + return new MegaPromise(function(resolve, reject) { + self.isReady().then(function() { + var all = {}; + for (var i = 0; i < self.map.length; i++) { + all[self.map[i]] = self.value & (1 << i) ? true : false; + } + resolve(all); + }, reject); + }); +}; + +/** + * Set all bits that we know about. + * @param newValue The new state for all known bits. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.setAll = function(newValue) { + var self = this; + return new MegaPromise(function(resolve, reject) { + self.isReady().then(function() { + // jscs:disable disallowImplicitTypeConversion + var mask = ~(0xFFFFFF << self.map.length); + self.value = newValue ? self.value | mask : self.value & (~mask); + // jscs:enable disallowImplicitTypeConversion + self.valueChanged(); + resolve(self.value); + }, reject); + }); +}; + +/** + * Get a mask from a key. + * @param key The bit key. + */ +MegaIntBitMap.prototype.getMask = function(key) { + var idx = this.map.indexOf(key); + if (idx >= 0) { + return 1 << idx; + } + return false; +}; + +/** + * Load attribute. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.load = function() { + var self = this; + return new MegaPromise(function(resolve, reject) { + mega.attr.get(u_attr.u, self.attribute, self.pub, self.nonHistoric).then(function(value) { + self.value = parseInt(value); + resolve(); + }, function(value) { + if (value === ENOENT) { + self.value = 0; + resolve(); + } else { + reject.apply(null, arguments); + } + }); + }); +}; + +/** + * Save Attribute. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.save = function() { + return mega.attr.set( + this.attribute, + this.value, + this.pub, + this.nonHistoric + ); +}; + +/** + * Wait till ready. + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.isReady = function() { + if (this.isReadyPromise === null) { + var self = this; + this.isReadyPromise = new MegaPromise(function(resolve, reject) { + self.load().then(resolve, reject); + }); + } + return this.isReadyPromise; +}; + +/** + * Directly set all the bits by providing an int. + * @param newValue {int} The new value + * @returns {MegaPromise} + */ +MegaIntBitMap.prototype.setValue = function(newValue) { + var self = this; + return new MegaPromise(function(resolve, reject) { + self.isReady().then(function() { + self.value = newValue; + self.valueChanged(); + resolve(self.value); + }, reject); + }); +}; + +/** + * Track value changed. + * Note: Call this whenever the value is changed. + */ +MegaIntBitMap.prototype.valueChanged = function() { + if (this.autoSaveTimeout) { + var self = this; + clearTimeout(this.autoSaveTimer); + this.autoSaveTimer = setTimeout(function() { + clearTimeout(self.autoSaveTimer); + self.save(); + }, self.autoSaveTimeout); + } +}; + +/** + * Triggered when the attribute is updated, thus updating our internal value. + * @return {MegaPromise} + */ +MegaIntBitMap.prototype.handleAttributeUpdate = function() { + this.isReadyPromise = null; + return this.isReady(); +}; + +// ---------------------------------------------------------------------------------------- + +Object.defineProperty(global, 'MegaDataMap', {value: MegaDataMap}); +Object.defineProperty(global, 'MegaDataObject', {value: MegaDataObject}); +Object.defineProperty(global, 'MegaDataSortedMap', {value: MegaDataSortedMap}); + +/** @constructor MegaDataEvent */ +Object.defineProperty(global, 'MegaDataEvent', {value: MegaDataEvent}); +/** @constructor MegaDataEmitter */ +Object.defineProperty(global, 'MegaDataEmitter', {value: MegaDataEmitter}); + +Object.defineProperty(global, 'MegaIntBitMap', {value: MegaIntBitMap}); +Object.defineProperty(global, 'MegaDataBitMap', {value: MegaDataBitMap}); +Object.defineProperty(global, 'MegaDataBitMapManager', {value: MegaDataBitMapManager}); + +if (d) { + if (d > 1) { + _timing(MegaDataMap); + _timing(MegaDataObject); + _timing(MegaDataEmitter); + _timing(MegaDataSortedMap); + } + global._timing = _timing; + global.testMegaDataBitMap = testMegaDataBitMap; + global.testMegaDataSortedMap = testMegaDataSortedMap; +} + +})(self); + +/** + * IndexedDB Key/Value Storage + */ + +// (the name must exist in the FMDB schema with index 'k') +function IndexedDBKVStorage(name) { + 'use strict'; + + this.name = name; + this.dbcache = Object.create(null); // items that reside in the DB + this.newcache = Object.create(null); // new items that are pending flushing to the DB + this.delcache = Object.create(null); // delete items that are pending deletion from the DB +} + +inherits(IndexedDBKVStorage, null); + +// sets fmdb reference and prefills the memory cache from the DB +// (call this ONCE as soon as the user-specific IndexedDB is open) +// (this is robust against an undefined fmdb reference) +IndexedDBKVStorage.prototype.load = async function() { + 'use strict'; + if (window.is_eplusplus) { + const pfx = `e++${this.name}!`; + const store = await M.getPersistentDataEntries(pfx, true).catch(dump) || {}; + const keys = Object.keys(store); + for (let i = keys.length; i--;) { + if (store[keys[i]]) { + this.dbcache[keys[i].substr(pfx.length)] = store[keys[i]]; + } + else if (d) { + console.warn('Malformed data in entry.', keys[i], store[keys[i]]); + } + } + } + else if (window.fmdb) { + const r = await fmdb.get(this.name).catch(dump) || []; + for (let i = r.length; i--;) { + this.dbcache[r[i].k] = r[i].v; + } + } +}; + +// flush new items / deletions to the DB (in channel 0, this should +// be followed by call to setsn()) +// will be a no-op if no fmdb set +IndexedDBKVStorage.prototype.flush = function() { + 'use strict'; + var k; + var fmdb = window.fmdb || false; + + for (k in this.delcache) { + if (is_eplusplus) { + M.delPersistentData('e++' + this.name + '!' + k).always(nop); + } + else if (fmdb) { + fmdb.del(this.name, k); + } + delete this.dbcache[k]; + } + + for (k in this.newcache) { + if (is_eplusplus) { + M.setPersistentData('e++' + this.name + '!' + k, this.newcache[k]).always(nop); + } + else if (fmdb) { + fmdb.add(this.name, {k: k, d: {v: this.newcache[k]}}); + } + this.dbcache[k] = this.newcache[k]; + } + + this.delcache = Object.create(null); + this.newcache = Object.create(null); +}; + +// set item in DB/cache +// (must only be called in response to an API response triggered by an actionpacket) +IndexedDBKVStorage.prototype.setItem = function __IDBKVSetItem(k, v) { + 'use strict'; + var self = this; + console.assert(v !== undefined); + return new MegaPromise(function(resolve) { + delete self.delcache[k]; + self.newcache[k] = v; + self.saveState(); + resolve([k, v]); + }); +}; + +// get item - if not found, promise will be rejected +IndexedDBKVStorage.prototype.getItem = function __IDBKVGetItem(k) { + 'use strict'; + var self = this; + return new MegaPromise(function(resolve, reject) { + if (!self.delcache[k]) { + + if (self.newcache[k] !== undefined) { + // record recently (over)written + return resolve(self.newcache[k]); + } + + // record available in DB + if (self.dbcache[k] !== undefined) { + return resolve(self.dbcache[k]); + } + } + + // record deleted or unavailable + reject(); + }); +}; + +// remove item from DB/cache +// (must only be called in response to an API response triggered by an actionpacket) +IndexedDBKVStorage.prototype.removeItem = function __IDBKVRemoveItem(k) { + 'use strict'; + + this.delcache[k] = true; + delete this.newcache[k]; + this.saveState(); + + return MegaPromise.resolve(); +}; + +// enqueue explicit flush +IndexedDBKVStorage.prototype.saveState = function() { + 'use strict'; + var self = this; + + delay('attribcache:savestate', function() { + if (d) { + console.debug('attribcache:savestate(%s)...', currsn, fminitialized); + } + + if (fminitialized && currsn || is_eplusplus) { + if (window.fmdb) { + setsn(currsn); + } + else { + self.flush(); + } + } + }, 2600); +}; + +// Clear DB Table and in-memory contents. +IndexedDBKVStorage.prototype.clear = promisify(function __IDBKVClear(resolve, reject) { + 'use strict'; + var self = this; + console.error("This function should not be used under normal conditions..."); + self.constructor.call(this, this.name); + + if (is_eplusplus) { + M.getPersistentDataEntries('e++' + this.name + '!') + .then(function(r) { + return Promise.allSettled(r.map(function(k) { + return M.delPersistentData(k); + })); + }) + .then(resolve).catch(reject); + return; + } + + if (window.fmdb && Object(fmdb.db).hasOwnProperty(this.name)) { + return fmdb.db[this.name].clear().then(resolve).catch(reject); + } + + reject(); +}); + +if (!is_karma) { + Object.freeze(IndexedDBKVStorage.prototype); +} +Object.freeze(IndexedDBKVStorage); + +var attribCache = false; +mBroadcaster.once('boot_done', function() { + 'use strict'; + attribCache = new IndexedDBKVStorage('ua'); + attribCache.bitMapsManager = new MegaDataBitMapManager(); + + // We no longer need this for anything else. + window.IndexedDBKVStorage = null; +}); + +/** + * Shared, Local Key Value Storage. + * To be used for storing local (non-api persisted data, mostly non-critical data). + * + * @param name {String} + * @param manualFlush {bool} by default disabled, note: NOT tested/used yet. + * @param [broadcaster] {Object} mBroadcaster-like object in case you don't want to use the global mBroadcaster + * and watchdog (useful for unit tests - see test/utilities/fakebroadcaster.js) + * + * @constructor + */ +var SharedLocalKVStorage = function(name, manualFlush, broadcaster) { + var self = this; + + if (!broadcaster) { + broadcaster = mBroadcaster; + } + self.broadcaster = broadcaster; + + // intentionally using '.wdog' instead of '.watchdog', because a self.wdog (where 'self' is not defined), + // would basically cause our code to use the global 'watchdog' object, which can cause a lot of hard to track + // issues! + if (typeof broadcaster.watchdog !== 'undefined') { + self.wdog = broadcaster.watchdog; + } + else { + self.wdog = watchdog; + } + + + self.name = name; + self.manualFlush = manualFlush; + + const id = broadcaster.id || broadcaster.crossTab && broadcaster.crossTab.ctID; + self.logger = new MegaLogger(`SharedLocalKVStorage[${name}:${id}]`); + self.debug = window.d > 0 && d; + + self.persistAdapter = null; + + self._queuedSetOperations = Object.create(null); + + self._listeners = {}; + self._initPersistance(); + + Object.defineProperty(this, 'isMaster', { + get: function() { + return !!self.broadcaster.crossTab.master; + }, + set: function() { + throw new Error(".isMaster is read only!"); + } + }); +}; + +inherits(SharedLocalKVStorage, MegaDataEmitter); + +/** + * Worst case scenario of an inactive tab, that is heavily throttled by Chrome, so we need to set the query time out + * when running in realworld cases to a bit higher value. + */ +SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT = ( + mega.chrome ? 10000 : 1000 +); + +SharedLocalKVStorage._replyToQuery = function(watchdog, token, query, value) { + watchdog.notify('Q!Rep!y', { + query: query, + token: token, + value: value + }); +}; + +SharedLocalKVStorage._clearQueuedSetRecord = (self, key, target) => { + 'use strict'; + assert(self instanceof SharedLocalKVStorage); + + if (self._queuedSetOperations[key]) { + const index = self._queuedSetOperations[key].indexOf(target); + if (d) { + console.assert(index >= 0, `Cannot find ${key}'s`, target); + } + + if (index > -1) { + self._queuedSetOperations[key].splice(index, 1); + + if (!self._queuedSetOperations[key].length) { + delete self._queuedSetOperations[key]; + + if (self.debug) { + self.logger.debug(`SetQueue ran empty for ${key}`); + } + } + + if (self.debug && !$.len(self._queuedSetOperations)) { + self.logger.debug(`SetQueue emptied.`); + } + } + } + else if (self.debug) { + self.logger.warn(`SetQueue is missing ${key}`); + } +}; + +SharedLocalKVStorage.prototype.triggerOnChange = function(k, v) { + var self = this; + self.trigger('onChange', [k, v]); +}; + +SharedLocalKVStorage.prototype._setupPersistance = function() { + 'use strict'; + var self = this; + console.assert(!this.persistAdapter, 'a previous persist adapter exists ?!..'); + + // clear any old/previously added event handlers in case this function is called after a master change + [ + 'watchdog:Q!slkv_get_' + self.name, + `watchdog:Q!slkv_getby_${this.name}`, + 'watchdog:Q!slkv_keys_' + self.name, + 'watchdog:Q!slkv_set_' + self.name, + `watchdog:Q!slkv_clear_${this.name}`, + `watchdog:Q!slkv_destroy_${this.name}`, + 'watchdog:slkv_mchanged_' + self.name, + 'crossTab:master' + ].forEach(function(k) { + if (self._listeners[k]) { + self.broadcaster.removeListener(self._listeners[k]); + delete self._listeners[k]; + } + // self.wdog.removeEventHandler(k); + }) ; + + + var listenersMap = {}; + + if (self.broadcaster.crossTab.master) { + // i'm the cross tab master + self.persistAdapter = new SharedLocalKVStorage.Utils.DexieStorage( + self.name, + self.manualFlush, + self.wdog.wdID + ); + + listenersMap["watchdog:Q!slkv_keys_" + self.name] = function (args) { + var token = args.data.reply; + assert(token, 'token is missing for: ' + JSON.stringify(args)); + + self.keys(args.data.p).then((keys) => { + SharedLocalKVStorage._replyToQuery(self.wdog, token, "Q!slkv_keys_" + self.name, keys); + }).catch(dump); + }; + + listenersMap[`watchdog:Q!slkv_destroy_${this.name}`] = (args) => { + const token = args.data.reply; + + this.destroy() + .catch(dump) + .finally(() => { + SharedLocalKVStorage._replyToQuery(this.wdog, token, `Q!slkv_destroy_${this.name}`, 0xDEAD); + }); + }; + + listenersMap[`watchdog:Q!slkv_clear_${this.name}`] = (args) => { + const token = args.data.reply; + + this.clear() + .catch(dump) + .finally(() => { + SharedLocalKVStorage._replyToQuery(this.wdog, token, `Q!slkv_clear_${this.name}`, 0xDEADBEEF); + }); + }; + + listenersMap["watchdog:Q!slkv_get_" + self.name] = function(args) { + var token = args.data.reply; + self.getItem(args.data.k) + .then((response) => { + if (self.debug > 1) { + self.logger.debug("Sending slkv_get reply: ", args.data.k, response); + } + SharedLocalKVStorage._replyToQuery(self.wdog, token, "Q!slkv_get_" + self.name, response); + }) + .catch(() => { + SharedLocalKVStorage._replyToQuery(self.wdog, token, "Q!slkv_get_" + self.name, undefined); + }); + }; + + listenersMap[`watchdog:Q!slkv_getby_${this.name}`] = (args) => { + const {reply: token, pfx} = args.data; + + this.eachPrefixItem(pfx) + .then((response) => { + SharedLocalKVStorage._replyToQuery(this.wdog, token, `Q!slkv_getby_${this.name}`, response); + }) + .catch((ex) => { + if (this.debug && ex !== ENOENT || this.debug > 1) { + this.logger.warn(`slkv_getby_${this.name}:${pfx}`, ex); + } + SharedLocalKVStorage._replyToQuery(this.wdog, token, `Q!slkv_getby_${this.name}`, undefined); + }); + }; + + listenersMap["watchdog:Q!slkv_set_" + self.name] = function(args) { + var token = args.data.reply; + + var result; + + if (typeof args.data.v === 'undefined') { + result = self.removeItem(args.data.k, { + 'origin': args.origin + }); + } + else { + result = self.setItem(args.data.k, args.data.v, { + 'origin': args.origin + }); + } + + result + .done(function(response) { + SharedLocalKVStorage._replyToQuery(self.wdog, token, "Q!slkv_set_" + self.name, response); + }) + .fail(function() { + SharedLocalKVStorage._replyToQuery(self.wdog, token, "Q!slkv_set_" + self.name, undefined); + }); + }; + } + else { + self.persistAdapter = false; + + listenersMap["watchdog:slkv_mchanged_" + self.name] = function(args) { + if (args.data.meta.origin !== self.wdog.wdID) { + self.triggerOnChange(args.data.k, args.data.v); + } + }; + + listenersMap['crossTab:master'] = function(args) { + // .setMaster was locally called. + if (!self.persistAdapter) { + self._setupPersistance(); + } + }; + } + + + Object.keys(listenersMap).forEach(function(k) { + self._listeners[k] = self.broadcaster.addListener(k, listenersMap[k]); + }); +}; + +SharedLocalKVStorage.prototype._initPersistance = function() { + var self = this; + + self._setupPersistance(); + + if (this.debug) { + self.rebind("onChange.logger" + self.name, function(e, k, v) { + self.logger.debug("Got onChange event:", k, v); + }); + } + + this._leavingListener = this.broadcaster.addListener('crossTab:leaving', ({origin, data}) => { + const {wasMaster, newMaster} = data; + const didMasterLeave = wasMaster && wasMaster !== -1; + const didBecomeMaster = didMasterLeave && newMaster === this.broadcaster.crossTab.ctID; + + if (this.debug) { + const msg = `Tab '${(origin >>> 0).toString(36)}' leaved, checking ownership...`; + this.logger.log(msg, {didMasterLeave, didBecomeMaster, origin}, data); + } + + // master had changed? + if (didMasterLeave) { + if (didBecomeMaster) { + console.assert(this.broadcaster.crossTab.master, 'I was expecting to be master...'); + if (!this.persistAdapter) { + this._setupPersistance(); + } + } + + const setItem = (k, data) => { + const {targetValue, resolve, reject} = data; + + if (d) { + this.logger.debug(`Re-setting value for '${k}'`, targetValue); + } + + this.setItem(k, targetValue) + .then(resolve) + .catch(reject) + .finally(() => { + SharedLocalKVStorage._clearQueuedSetRecord(this, k, data); + }); + }; + + // master had changed, do I've any queued ops that were not executed? re-send them! + for (const k in this._queuedSetOperations) { + const pending = this._queuedSetOperations[k]; + + for (let i = 0; i < pending.length; ++i) { + setItem(k, pending[i]); + } + } + } + }); +}; + + +SharedLocalKVStorage.prototype.getItem = function(k) { + var self = this; + + if (self.broadcaster.crossTab.master) { + return this.persistAdapter.getItem(k); + } + else { + // request using cross tab from master + var promise = new MegaPromise(); + + self.wdog.query("slkv_get_" + self.name, SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, false, {'k': k}, true) + .then((response) => { + if (response && response[0]) { + promise.resolve(response[0]); + } + else { + promise.reject(); + } + }) + .catch((ex) => { + self.logger.warn("getItem request failed: ", k, ex); + promise.reject(ex); + }); + + return promise; + } +}; + +SharedLocalKVStorage.prototype.eachPrefixItem = function __SLKVEachItem(pfx, each) { + 'use strict'; + + if (this.broadcaster.crossTab.master) { + return this.persistAdapter.eachPrefixItem(pfx, each); + } + + return new MegaPromise((resolve, reject) => { + + this.wdog.query(`slkv_getby_${this.name}`, SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, false, {pfx}, true) + .then(([res]) => { + if (!res) { + return reject(ENOENT); + } + if (each) { + for (const k in res) { + each(res[k], k); + } + } + resolve(res); + }) + .catch(reject); + }); +}; + +SharedLocalKVStorage.prototype.dump = function(prefix) { + 'use strict'; + return this.eachPrefixItem(prefix || '', dump).dump(`${this.name}.dump(${prefix || ''})`); +}; + +SharedLocalKVStorage.prototype.keys = function(prefix) { + var self = this; + + if (self.broadcaster.crossTab.master) { + return self.persistAdapter.keys(prefix); + } + else { + // request using cross tab from master + var promise = new MegaPromise(); + + self.wdog.query( + "slkv_keys_" + self.name, + SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, + false, + { + 'p': prefix + }, + true + ).then((response) => { + if (response && response[0]) { + promise.resolve(response[0]); + } + else { + promise.reject(EINCOMPLETE); + } + }).catch((ex) => { + promise.reject(ex); + }); + + return promise; + } + +}; + + +SharedLocalKVStorage.prototype.setItem = function(k, v, meta) { + 'use strict'; + var self = this; + if (self.broadcaster.crossTab.master) { + var fn = "setItem"; + if (typeof v === 'undefined') { + fn = "removeItem"; + } + + if (!meta) { + // if triggered locally, by the master, there is no 'meta', so lets add our wdID + meta = { + 'origin': self.wdog.wdID + }; + } + else { + // if i'm not the one who triggered the change, trigger a local on change event. + self.triggerOnChange(k, v); + } + // Notify via watchdog that there was a change! + // doing it immediately (and not after .done), because of Chrome's delay of indexedDB operations + self.wdog.notify("slkv_mchanged_" + self.name, {'k': k, 'v': v, 'meta': meta}); + + return self.persistAdapter[fn](k, v); + } + + return new MegaPromise((resolve, reject) => { + + if (!this._queuedSetOperations[k]) { + this._queuedSetOperations[k] = []; + } + const op = {resolve, reject, targetValue: v}; + this._queuedSetOperations[k].push(op); + + this.wdog.query(`slkv_set_${this.name}`, SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, false, {k, v}, true) + .then(resolve) + .catch(reject) + .finally(() => { + SharedLocalKVStorage._clearQueuedSetRecord(self, k, op); + }); + }); +}; + +SharedLocalKVStorage.prototype.removeItem = function(k, meta) { + var self = this; + if (self.broadcaster.crossTab.master) { + return self.setItem(k, undefined, meta); + } + else { + var promise = new MegaPromise(); + self.wdog.query( + "slkv_set_" + self.name, + SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, + false, + { + 'k': k, + 'v': undefined + }, + true + ) + .then(() => { + promise.resolve(); + }) + .catch(() => { + promise.reject(); + }); + return promise; + } +}; + +SharedLocalKVStorage.prototype.clear = function() { + 'use strict'; + + if (this.debug) { + this.logger.warn('Cleaning instance...', [this]); + } + + if (this.broadcaster.crossTab.master) { + return this.persistAdapter.clear(); + } + + return new MegaPromise((resolve, reject) => { + this.wdog.query(`slkv_clear_${this.name}`, SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, false, false, true) + .then(resolve) + .catch(reject); + }); +}; + +SharedLocalKVStorage.prototype.destroy = function() { + 'use strict'; + var self = this; + + if (self.debug) { + self.logger.warn('Destroying instance...', [this]); + } + + if (self._leavingListener) { + self.broadcaster.removeListener(self._leavingListener); + } + + if (self.debug) { + self.off(`onChange.logger${self.name}`); + } + + if (self.broadcaster.crossTab.master) { + return this.persistAdapter.destroy(); + } + + return new MegaPromise((resolve, reject) => { + self.wdog.query(`slkv_destroy_${this.name}`, SharedLocalKVStorage.DEFAULT_QUERY_TIMEOUT, false, false, true) + .then(resolve) + .catch(reject); + }); +}; + +SharedLocalKVStorage.DB_MODE = { + 'MANUAL_FLUSH': 1, + 'NO_MEMOIZE': 2, + 'FORCE_MEMOIZE': 4, + 'BINARY': 8, +}; +SharedLocalKVStorage.DB_STATE = { + 'NOT_READY': 0, + 'READY': 1, + 'INITIALISING': 2, + 'FAILED': 3, +}; + +SharedLocalKVStorage.encrypt = function(val) { + 'use strict'; + + return FMDB.prototype.toStore(JSON.stringify(val)); +}; +SharedLocalKVStorage.decrypt = function(val) { + 'use strict'; + + try { + return JSON.parse(FMDB.prototype.fromStore(val)); + } + catch (e) { + return ""; + } +}; + +SharedLocalKVStorage.Utils = Object.create(null); + +SharedLocalKVStorage.Utils.lazyInitCall = function(proto, method, master, fn) { + 'use strict'; + if (fn === undefined) { + fn = master; + master = true; + } + proto[method] = function __SLKVLazyInitCall(...args) { + if (master && !mBroadcaster.crossTab.master) { + // the method shall dealt with it. + return fn.apply(this, arguments); + } + + return new Promise((resolve, reject) => { + const name = this.__slkvLazyInitMutex || (this.__slkvLazyInitMutex = `lIMutex${makeUUID().slice(-13)}`); + mutex.lock(name).then((unlock) => { + const onReadyState = () => { + delete this.__slkvLazyInitMutex; + return (this[method] = fn).apply(this, args).then(resolve).catch(reject); + }; + + if (Object.hasOwnProperty.call(this, '__slkvLazyInitReady')) { + return onReadyState().finally(unlock); + } + + this.lazyInit() + .then(() => { + Object.defineProperty(this, '__slkvLazyInitReady', {value: 1}); + return onReadyState(); + }) + .finally(unlock); + }).catch(reject); + }); + }; + + return proto[method]; +}; + +SharedLocalKVStorage.Utils._requiresMutex = function SLKVMutexWrapper(origFunc, methodName) { + 'use strict'; + return function __SLKVMutexWrapper(...args) { + const name = this.__mutexLockName || (this.__mutexLockName = `slkv${makeUUID().slice(-13)}`); + return new MegaPromise((resolve, reject) => { + mutex.lock(name) + .then((unlock) => { + const wrap = (dsp) => (arg) => { + if (d > 1) { + this.logger.warn('Releasing lock(%s) from %s...', name, methodName); + console.timeEnd(name); + } + unlock().then(() => dsp(arg)).catch(reject); + }; + if (d > 1) { + this.logger.warn('Lock(%s) acquired for %s...', name, methodName, [this, ...args]); + console.time(name); + } + origFunc.apply(this, args).then(wrap(resolve)).catch(wrap(reject)); + }) + .catch(reject); + }); + }; +}; + +SharedLocalKVStorage.Utils.DexieStorage = function(name, options) { + 'use strict'; + + this.name = name; + this.dbState = SharedLocalKVStorage.DB_STATE.NOT_READY; + this.logger = new MegaLogger("SLKVDStorage[" + name + "]"); + + this.binary = options & SharedLocalKVStorage.DB_MODE.BINARY; + this.manualFlush = options & SharedLocalKVStorage.DB_MODE.MANUAL_FLUSH; + this.memoize = !(options & SharedLocalKVStorage.DB_MODE.NO_MEMOIZE); + + if (this.binary) { + this.memoize = options & SharedLocalKVStorage.DB_MODE.FORCE_MEMOIZE; + this._encryptValue = this._encryptBinaryValue; + this._decryptValue = this._decryptBinaryValue; + } + + this._reinitCache(); +}; +inherits(SharedLocalKVStorage.Utils.DexieStorage, MegaDataEmitter); + +/** + * Database connection. + * @name db + * @memberOf SharedLocalKVStorage.Utils.DexieStorage.prototype + */ +lazy(SharedLocalKVStorage.Utils.DexieStorage.prototype, 'db', function() { + 'use strict'; + return new MegaDexie('SLKV', this.name, 'slkv_', true, {kv: '++i, &k'}); +}); + +SharedLocalKVStorage.Utils._requiresDbReady = function SLKVDBConnRequired(fn) { + 'use strict'; + return function __requiresDBConnWrapper(...args) { + + if (this.dbState === SharedLocalKVStorage.DB_STATE.READY) { + return fn.apply(this, arguments); + } + + var self = this; + var promise = new MegaPromise(); + + if (!u_handle) { + promise.reject(); + return promise; + } + + var success = function() { + promise.linkDoneAndFailTo(fn.apply(self, args)); + }; + + var failure = function(ex) { + self.logger.warn(ex); + self.dbState = SharedLocalKVStorage.DB_STATE.FAILED; + promise.reject("DB_FAILED"); + }; + + // lazy db init + if (self.dbState === SharedLocalKVStorage.DB_STATE.NOT_READY) { + self.dbState = SharedLocalKVStorage.DB_STATE.INITIALISING; + + self.dbLoadingPromise = new MegaPromise(); + + self.db.open().then(self._OpenDB.bind(self)).then(function(r) { + self.logger.info('DB Ready, %d records loaded.', r.length, r); + }).catch(failure).finally(function() { + var p = self.dbLoadingPromise; + delete self.dbLoadingPromise; + + if (d > 1) { + self.db.$__OwnerInstance = self; + } + + if (self.dbState === SharedLocalKVStorage.DB_STATE.FAILED) { + return p.reject("DB_OPEN_FAILED"); + } + self.dbState = SharedLocalKVStorage.DB_STATE.READY; + + success(); + p.resolve(); + }).catch(failure); + } + else if (self.dbState === SharedLocalKVStorage.DB_STATE.INITIALISING) { + // DB open is in progress. + self.dbLoadingPromise.then(success).catch(failure); + } + else { + promise.reject("DB_FAILED"); + } + + return promise; + }; +}; + +SharedLocalKVStorage.Utils.DexieStorage.prototype._encryptKey = SharedLocalKVStorage.encrypt; +SharedLocalKVStorage.Utils.DexieStorage.prototype._decryptKey = SharedLocalKVStorage.decrypt; +SharedLocalKVStorage.Utils.DexieStorage.prototype._encryptValue = SharedLocalKVStorage.encrypt; +SharedLocalKVStorage.Utils.DexieStorage.prototype._decryptValue = SharedLocalKVStorage.decrypt; + +// @private +SharedLocalKVStorage.Utils.DexieStorage.prototype._encryptBinaryValue = function(value) { + 'use strict'; + var pad = -value.byteLength & 15; + if (pad) { + var tmp = new Uint8Array(value.byteLength + pad); + tmp.set(value); + value = tmp; + } + return [pad, FMDB.prototype._crypt(u_k_aes, value)]; +}; + +// @private +SharedLocalKVStorage.Utils.DexieStorage.prototype._decryptBinaryValue = function(value) { + 'use strict'; + var pad = value[0]; + value = FMDB.prototype._decrypt(u_k_aes, value[1]); + return pad ? value.slice(0, -pad) : value; +}; + +SharedLocalKVStorage.Utils.DexieStorage.prototype._OpenDB = function() { + 'use strict'; + var self = this; + + if (!this.memoize) { + return Promise.resolve([]); + } + return self.db.kv.toArray() + .then(function(r) { + for (var i = 0; i < r.length; ++i) { + self.dbcache[self._decryptKey(r[i].k)] = self._decryptValue(r[i].v); + } + return r; + }); +}; + +// flush new items / deletions to the DB (in channel 0, this should +// be followed by call to setsn()) +// will be a no-op if no fmdb set +SharedLocalKVStorage.Utils.DexieStorage.prototype.flush = function() { + 'use strict'; + var self = this; + var masterPromise = new MegaPromise(); + + var debug = function(o) { + return o.map(function(o) { + return self._decryptKey(o.k) + ':' + self._decryptValue(o.v); + }); + }; + + var done = onIdle.bind(null, function() { + if (!self.memoize) { + self._reinitCache(); + } + masterPromise.resolve(); + }); + + var bulkDelete = Object.keys(self.delcache) + .map(function(k) { + delete self.dbcache[k]; + return self.db.kv.where('k').equals(self._encryptKey(k)).delete(); + }); + + var bulkPut = Object.keys(self.newcache) + .map(function(k) { + self.dbcache[k] = self.newcache[k]; + return { + k: self._encryptKey(k), + v: self._encryptValue(self.newcache[k]) + }; + }); + + self.delcache = Object.create(null); + self.newcache = Object.create(null); + + Promise.all(bulkDelete) + .then(function() { + return self.db.bulkUpdate(bulkPut); + }) + .then(done) + .catch(function(ex) { + if (d || is_karma) { + self.db.kv.toArray() + .then(function(o) { + self.logger.error("flush failed", ex.message, [ex], debug(bulkPut), debug(o)); + masterPromise.reject(ex); + }); + } + else { + masterPromise.reject(ex); + } + }); + + return masterPromise; +}; + + +SharedLocalKVStorage.Utils.DexieStorage.prototype.setItem = function __SLKVSetItem(k, v) { + 'use strict'; + console.assert(v !== undefined); + + delete this.delcache[k]; + this.newcache[k] = v; + + if (this.manualFlush) { + return MegaPromise.resolve(); + } + + return this.flush(); +}; + +// get item - if not found, promise will be rejected +SharedLocalKVStorage.Utils.DexieStorage.prototype.getItem = function __SLKVGetItem(k) { + 'use strict'; + var self = this; + return new MegaPromise(function(resolve, reject) { + + if (!self.delcache[k]) { + if (self.newcache[k] !== undefined) { + // record recently (over)written + return resolve(self.newcache[k]); + } + + // record available in DB + if (self.dbcache[k] !== undefined) { + return resolve(self.dbcache[k]); + } + } + + if (self.memoize) { + // record deleted or unavailable + return reject(); + } + + self.db.kv.where('k').equals(self._encryptKey(k)).toArray() + .then(function(r) { + if (!r.length) { + // record deleted or unavailable + return reject(); + } + + resolve(self._decryptValue(r[0].v)); + }) + .catch(reject); + }); +}; + +SharedLocalKVStorage.Utils.DexieStorage.prototype.keys = function __SLKVKeys(prefix) { + 'use strict'; + var self = this; + return new MegaPromise(function(resolve, reject) { + var filter = function(k) { + return (prefix ? k.startsWith(prefix) : true) && self.delcache[k] === undefined; + }; + + if (self.memoize) { + var keys = Object.keys(Object.assign({}, self.dbcache, self.newcache)); + return resolve(keys.filter(filter)); + } + + self.db.kv.orderBy('k').keys() + .then(function(keys) { + resolve(keys.map(self._decryptKey.bind(self)).filter(filter)); + }) + .catch(reject); + }); +}; + +// check if item exists +SharedLocalKVStorage.Utils.DexieStorage.prototype.hasItem = function __SLKVHasItem(k) { + 'use strict'; + var self = this; + return new MegaPromise(function(resolve, reject) { + if (!self.delcache[k] && (self.newcache[k] !== undefined || self.dbcache[k] !== undefined)) { + return resolve(); + } + + if (self.memoize) { + return reject(); + } + + self.db.kv.where('k').equals(self._encryptKey(k)).keys() + .then(function(r) { + if (r.length) { + return resolve(); + } + reject(); + }) + .catch(reject); + }); +}; + +SharedLocalKVStorage.Utils.DexieStorage.prototype.removeItem = function __SLKVRemoveItem(k, expunge) { + 'use strict'; + var self = this; + expunge = expunge === true; + if (d) { + this.logger.debug(`removeItem(${JSON.stringify(k)})`, expunge, this.memoize, this.manualFlush); + } + + if (!expunge && self.memoize && this.newcache[k] === undefined && this.dbcache[k] === undefined) { + return MegaPromise.reject(); + } + + this.delcache[k] = true; + delete this.newcache[k]; + delete this.dbcache[k]; + + if (!expunge) { + return this.flush(); + } + + return new MegaPromise(function(resolve, reject) { + self.flush().then(function() { + return self.db.kv.count(); + }).then(function(num) { + if (d && !num) { + console.assert(!$.len(Object.assign({}, self.dbcache, self.newcache))); + } + return num ? num : self._destroy(); + }).then(resolve).catch(reject); + }); +}; + +/** + * Iterate over all items, with prefix. + * + * Note: Case sensitive. + * + * @param {String} prefix that would be used for filtering the data + * @param {Function} [each] callback(value, key) + * @returns {MegaPromise} promise + */ +SharedLocalKVStorage.Utils.DexieStorage.prototype.eachPrefixItem = function __SLKVEachItem(prefix, each) { + 'use strict'; + return new MegaPromise((resolve, reject) => { + + let count = 0; + const res = Object.create(null); + + if (this.memoize) { + Object.assign(res, this.dbcache, this.newcache); + + for (const key in res) { + if (this.delcache[key] || !key.startsWith(prefix)) { + delete res[key]; + } + else { + if (each) { + each(res[key], key); + } + ++count; + } + } + + return count ? resolve(res) : reject(ENOENT); + } + + this.db.kv.toArray() + .then((r) => { + + for (let i = r.length; i--;) { + const k = this._decryptKey(r[i].k); + + if (k.startsWith(prefix)) { + res[k] = this._decryptValue(r[i].v); + + if (each) { + each(res[k], k); + } + ++count; + } + } + + return count ? resolve(res) : reject(ENOENT); + }) + .catch(reject); + }); +}; + +/** + * Drops the local db + */ +SharedLocalKVStorage.Utils.DexieStorage.prototype.destroy = function __SLKVDestroy() { + 'use strict'; + return new MegaPromise((resolve, reject) => { + + this._reinitCache(); + this.dbState = SharedLocalKVStorage.DB_STATE.NOT_READY; + + return 'db' in this ? this.db.delete().then(resolve).catch(reject) : resolve(); + }); +}; + +/** + * Re/Initialises the local in memory cache + */ +SharedLocalKVStorage.Utils.DexieStorage.prototype._reinitCache = function __SLKVReinitCache() { + 'use strict'; + this.dbcache = Object.create(null); // items that reside in the DB + this.newcache = Object.create(null); // new items that are pending flushing to the DB + this.delcache = Object.create(null); // delete items that are pending deletion from the DB +}; + + +/** + * Clear DB contents. + * @returns {MegaPromise} + */ +SharedLocalKVStorage.Utils.DexieStorage.prototype.clear = function __SLKVClear() { + var self = this; + + var promise = new MegaPromise(); + + self.db.kv.clear() + .catch(function (e) { + self.logger.error("clear failed: ", arguments, e.stack); + self._reinitCache(); + promise.reject(e); + }) + .finally(function () { + self._reinitCache(); + promise.resolve(); + }); + + return promise; +}; + +SharedLocalKVStorage.Utils.DexieStorage.prototype.close = function __SLKVClose() { + var self = this; + var oldState = self.dbState; + self.dbState = SharedLocalKVStorage.DB_STATE.NOT_READY; + if (oldState === SharedLocalKVStorage.DB_STATE.READY) { + self.db.close(); + } + self.db = null; + self._reinitCache(); +}; + +/** + * So that the code in the file is more easy to debug via IDEs, the + * SharedLocalKVStorage.Utils.DexieStorage._requiresDbReady wrapper is going to wrap the required functions in runtime + * Guarantee that promise-returning methods are executed one after another. + */ +(function __monkeyPatch(proto) { + 'use strict'; + // eslint-disable-next-line local-rules/misc-warnings + Object.keys(proto) + .filter(function(n) { + return n[0] !== '_'; + }) + .forEach(function(methodName) { + var origFunc = SharedLocalKVStorage.Utils._requiresDbReady(proto[methodName], methodName); + + if (methodName !== 'flush') { + if (methodName === 'destroy' /* || ... */) { + // to be used under an already acquired lock. + Object.defineProperty(proto, '_' + methodName, {value: proto[methodName]}); + } + origFunc = SharedLocalKVStorage.Utils._requiresMutex(origFunc, methodName); + } + + proto[methodName] = origFunc; + + var short = methodName.replace(/[A-Z].*/, ''); + if (short !== methodName) { + Object.defineProperty(proto, short, {value: proto[methodName]}); + } + }); +})(SharedLocalKVStorage.Utils.DexieStorage.prototype); + +/** + * @fileOverview + * Storage of key/value pairs in a "container". + */ + +/** @property window.tlvstore */ +lazy(self, 'tlvstore', () => { + "use strict"; + + /** + * @description + *

                Storage of key/value pairs in a "container".

                + * + *

                + * Stores a set of key/value pairs in a binary container format suitable for + * encrypted storage of private attributes

                + * + *

                + * TLV records start with the key as a "tag" (ASCII string), terminated by a + * NULL character (\u0000). The length of the payload is encoded as a 16-bit + * unsigned integer in big endian format (2 bytes), followed by the payload + * (as a byte string). The payload *must* contain 8-bit values for each + * character only!

                + */ + const ns = { + _logger: MegaLogger.getLogger('tlvstore') + }; + + const getKey = (key) => { + if (Array.isArray(key)) { + // Key is in the form of an array of four 32-bit words. + key = new Uint32Array(key); + const u8 = new Uint8Array(key.byteLength); + const dv = new DataView(u8.buffer); + + for (let i = 0; i < key.length; ++i) { + dv.setUint32(i * 4, key[i], false); + } + key = u8; + } + else if (typeof key === 'string') { + key = Uint8Array.from(key, ch => ch.charCodeAt(0)); + } + + return key; + }; + + const te = new TextEncoder(); + const td = new TextDecoder(); + + /** + * Generates a binary encoded TLV record from a key-value pair. + * + * @param key {string} + * ASCII string label of record's key. + * @param value {string} + * Byte string payload of record. + * @param {Boolean} utf8 Require UTF-8 conversion. + * @returns {string} + * Single binary encoded TLV record. + * @private + */ + ns.toTlvRecord = function(key, value, utf8) { + if (utf8) { + value = asmCrypto.bytes_to_string(te.encode(value)); + } + if (value.length > 65535) { + if (typeof eventlog === 'function') { + eventlog(99772, JSON.stringify([1, 1, key.length, value.length, utf8 | 0]), true); + } + this._logger.warn(`TLV-record ${key} did overflow.`, utf8); + } + const length = Math.min(65535, value.length); + return `${key}\u0000${String.fromCharCode(length >>> 8)}${String.fromCharCode(length & 0xff)}${value}`; + }; + + /** + * Generates a binary encoded TLV element from a key-value pair. + * There is no separator in between and the length is fixted 2 bytes. + * If the length of the value is bigger than 0xffff, then it will use 0xffff + * as the length, and append the value after. + * + * @param key {string} + * ASCII string label of record's key. + * @param value {string} + * Byte string payload of record. + * @returns {string} + * Single binary encoded TLV record. + * @private + */ + ns.toTlvElement = function(key, value) { + var length = String.fromCharCode(value.length >>> 8) + + String.fromCharCode(value.length & 0xff); + if (value.length > 0xffff) { + length = String.fromCharCode(0xff) + + String.fromCharCode(0xff); + } + return key + length + value; + }; + + /** + * Generates a binary encoded TLV record container from an object containing + * key-value pairs. + * + * @param container {object} + * Object containing (non-nested) key-value pairs. The keys have to be ASCII + * strings, the values byte strings. + * @param {Boolean} [utf8] Require UTF-8 conversion. + * @returns {string} + * Single binary encoded container of TLV records. + */ + ns.containerToTlvRecords = function(container, utf8) { + var result = ''; + let safe = true; + for (var key in container) { + if (container.hasOwnProperty(key)) { + const type = typeof container[key]; + + if (type !== 'string') { + this._logger.error(`Invalid type for element '${key}'. Expected string but got ${type}.`); + return false; + } + if (safe !== true) { + if (typeof eventlog === 'function') { + eventlog(99772, JSON.stringify([1, 3, result.length])); + } + this._logger.error(`Cannot store ${key}, previous element did overflow.`); + return false; + } + const record = ns.toTlvRecord(key, container[key], utf8); + + result += record; + safe = record.length < 65538 + key.length; + } + } + return result; + }; + + + /** + * Splits and decodes a TLV record off of a container into a key-value pair and + * returns the record and the rest. + * + * @param tlvContainer {String} + * Single binary encoded container of TLV records. + * @returns {Object|Boolean} + * Object containing two elements: `record` contains an array of two + * elements (key and value of the decoded TLV record) and `rest` containing + * the remainder of the tlvContainer still to decode. In case of decoding + * errors, `false` is returned. + */ + ns.splitSingleTlvRecord = function(tlvContainer) { + var keyLength = tlvContainer.indexOf('\u0000'); + var key = tlvContainer.substring(0, keyLength); + var valueLength = (tlvContainer.charCodeAt(keyLength + 1)) << 8 + | tlvContainer.charCodeAt(keyLength + 2); + var value = tlvContainer.substring(keyLength + 3, keyLength + valueLength + 3); + + // @todo what if the value did not overflow but was exactly 65535 bytes (?).. + if (valueLength === 0xffff) { + value = tlvContainer.substring(keyLength + 3); + valueLength = value.length; + } + var rest = tlvContainer.substring(keyLength + valueLength + 3); + + // Consistency checks. + if ((valueLength !== value.length) + || (rest.length !== tlvContainer.length - (keyLength + valueLength + 3))) { + ns._logger.info('Inconsistent TLV decoding. Maybe content UTF-8 encoded?'); + + return false; + } + + return { 'record': [key, value], 'rest': rest }; + }; + + /** + * Splits and decodes a TLV element off of a container into a key-value pair and + * returns the element and the rest. + * Note: if the length is 0xffff, which means the appended value is longer than 0xffff, + * it means the rest is the value. + * + * @param tlvContainer {String} + * Single binary encoded container of TLV elements. + * @returns {Object|Boolean} + * Object containing two parts: `element` contains an array of two + * (key and value of the decoded TLV element) and `rest` containing + * the remainder of the tlvContainer still to decode. In case of decoding + * errors, `false` is returned. + */ + ns.splitSingleTlvElement = function(tlvContainer) { + var keyLength = 1; + var key = tlvContainer.substring(0, keyLength); + var valueLength = (tlvContainer.charCodeAt(keyLength)) << 8 + | tlvContainer.charCodeAt(keyLength + 1); + var value = tlvContainer.substring(keyLength + 2, keyLength + valueLength + 2); + + if (valueLength === 0xffff) { + value = tlvContainer.substring(keyLength + 2); + valueLength = value.length; + } + var rest = tlvContainer.substring(keyLength + valueLength + 2); + // Consistency checks. + if ((valueLength !== value.length) + || (rest.length !== tlvContainer.length - (keyLength + valueLength + 2))) { + ns._logger.info('Inconsistent TLV decoding. Maybe content UTF-8 encoded?'); + + return false; + } + + return { 'record': [key, value], 'rest': rest }; + }; + + /** + * Decodes a binary encoded container of TLV records into an object + * representation. + * + * @param tlvContainer {String} + * Single binary encoded container of TLV records. + * @param [utf8LegacySafe] {Boolean} + * Single binary encoded container of TLV records. + * @returns {Object|Boolean} + * Object containing (non-nested) key-value pairs. `false` in case of + * failing TLV decoding. + */ + ns.tlvRecordsToContainer = function(tlvContainer, utf8LegacySafe) { + var rest = tlvContainer; + var container = {}; + + if (!rest.charCodeAt(0) && rest.length > 65538) { + this._logger.warn('tlv-record overflow fix-up.', [rest]); + + if (typeof eventlog === 'function') { + eventlog(99772, JSON.stringify([1, 7, rest.length]), true); + } + + return {'': rest.substr(3)}; + } + + while (rest.length > 0) { + var result = ns.splitSingleTlvRecord(rest); + if (result === false) { + container = false; + break; + } + container[result.record[0]] = result.record[1]; + rest = result.rest; + } + + if (utf8LegacySafe && (container === false)) { + // Treat the legacy case and first UTF-8 decode the container content. + ns._logger.info('Retrying to decode TLV container legacy style ...'); + + return ns.tlvRecordsToContainer(from8(tlvContainer), false); + } + + return container; + }; + + + /** + * "Enumeration" of block cipher encryption schemes for private attribute + * containers. + * + * @property AES_CCM_12_16 {integer} + * AES in CCM mode, 12 byte IV/nonce and 16 byte MAC. + * @property AES_CCM_10_16 {integer} + * AES in CCM mode, 10 byte IV/nonce and 16 byte MAC. + * @property AES_CCM_10_08 {integer} + * AES in CCM mode, 10 byte IV/nonce and 8 byte MAC. + * @property AES_GCM_12_16 {integer} + * AES in CCM mode, 12 byte IV/nonce and 16 byte MAC. + * @property AES_GCM_10_08 {integer} + * AES in CCM mode, 10 byte IV/nonce and 8 byte MAC. + */ + ns.BLOCK_ENCRYPTION_SCHEME = { + AES_CCM_12_16: 0x00, + AES_CCM_10_16: 0x01, + AES_CCM_10_08: 0x02, + AES_GCM_12_16_BROKEN: 0x03, // Same as 0x00 (not GCM, due to a legacy bug). + AES_GCM_10_08_BROKEN: 0x04, // Same as 0x02 (not GCM, due to a legacy bug). + AES_GCM_12_16: 0x10, + AES_GCM_10_08: 0x11 + }; + + + /** + * Parameters for supported block cipher encryption schemes. + */ + ns.BLOCK_ENCRYPTION_PARAMETERS = { + 0x00: {nonceSize: 12, macSize: 16, cipher: 'AES_CCM'}, // BLOCK_ENCRYPTION_SCHEME.AES_CCM_12_16 + 0x01: {nonceSize: 10, macSize: 16, cipher: 'AES_CCM'}, // BLOCK_ENCRYPTION_SCHEME.AES_CCM_10_16 + 0x02: {nonceSize: 10, macSize: 8, cipher: 'AES_CCM'}, // BLOCK_ENCRYPTION_SCHEME.AES_CCM_10_08 + 0x03: {nonceSize: 12, macSize: 16, cipher: 'AES_CCM'}, // Same as 0x00 (due to a legacy bug). + 0x04: {nonceSize: 10, macSize: 8, cipher: 'AES_CCM'}, // Same as 0x02 (due to a legacy bug). + 0x10: {nonceSize: 12, macSize: 16, cipher: 'AES_GCM'}, // BLOCK_ENCRYPTION_SCHEME.AES_GCM_12_16 + 0x11: {nonceSize: 10, macSize: 8, cipher: 'AES_GCM'} // BLOCK_ENCRYPTION_SCHEME.AES_GCM_10_08 + }; + + + /** + * Encrypts clear text data to an authenticated ciphertext, armoured with + * encryption mode indicator and IV. + * + * @param clearText {String} + * Clear text as byte string. + * @param {String|Array|ArrayBufferLike} key + * Encryption key as byte string. + * @param mode {Number} + * Encryption mode as an integer. One of tlvstore.BLOCK_ENCRYPTION_SCHEME. + * @param [utf8Convert] {Boolean} + * Perform UTF-8 conversion of clear text before encryption (default: false). + * @returns {String} + * Encrypted data block as byte string, incorporating mode, nonce and MAC. + */ + ns.blockEncrypt = function(clearText, key, mode, utf8Convert) { + + const {nonceSize, macSize, cipher} = this.BLOCK_ENCRYPTION_PARAMETERS[mode]; + const nonce = mega.getRandomValues(nonceSize); + + const clearBytes = asmCrypto.string_to_bytes(clearText, utf8Convert); + const cipherBytes = asmCrypto[cipher].encrypt(clearBytes, getKey(key), nonce, undefined, macSize); + + return String.fromCharCode(mode) + asmCrypto.bytes_to_string(nonce) + asmCrypto.bytes_to_string(cipherBytes); + }; + + + /** + * Decrypts an authenticated cipher text armoured with a mode indicator and IV + * to clear text data. + * + * @param cipherText {String} + * Encrypted data block as byte string, incorporating mode, nonce and MAC. + * @param key {String} + * Encryption key as byte string. + * @param [utf8Convert] {Boolean} + * Perform UTF-8 conversion of clear text after decryption (default: false). + * @returns {String} + * Clear text as byte string. + */ + ns.blockDecrypt = function(cipherText, key, utf8Convert) { + + var mode = cipherText.charCodeAt(0); + var nonceSize = ns.BLOCK_ENCRYPTION_PARAMETERS[mode].nonceSize; + var nonceBytes = asmCrypto.string_to_bytes(cipherText.substring(1, nonceSize + 1)); + var cipherBytes = asmCrypto.string_to_bytes(cipherText.substring(nonceSize + 1)); + var tagSize = ns.BLOCK_ENCRYPTION_PARAMETERS[mode].macSize; + var cipher = asmCrypto[ns.BLOCK_ENCRYPTION_PARAMETERS[mode].cipher]; + + const clearBytes = cipher.decrypt(cipherBytes, getKey(key), nonceBytes, undefined, tagSize); + return asmCrypto.bytes_to_string(clearBytes, utf8Convert); + }; + + /** + * Encrypts data to an authenticated ciphertext, armoured with encryption mode indicator and IV. + * + * @param {String|Object} payload plain string or key/value pairs to encrypt + * @param {Boolean} [utf8] Whether to take UTF-8 into account (default: true) + * @param {Array|String|Uint8Array} [key] Encryption key. + * @param {Number} [mode] Encryption scheme, AES GCM 12/16 by default. + * @returns {String} encrypted payload. + * @memberOf tlvstore + */ + ns.encrypt = function(payload, utf8, key, mode) { + utf8 = utf8 !== false; + key = getKey(key || self.u_k); + + if (mode === undefined) { + mode = this.BLOCK_ENCRYPTION_SCHEME.AES_GCM_12_16; + } + + if (typeof payload !== 'object') { + payload = {'': String(payload)}; + } + + return base64urlencode(this.blockEncrypt(this.containerToTlvRecords(payload, utf8), key, mode)); + }; + + /** + * Decrypts an authenticated cipher text armoured with a mode indicator and IV. + * + * @param {String} payload Encrypted cipher text payload + * @param {Boolean} [utf8] Whether to take UTF-8 into account (default: true) + * @param {Array|String|Uint8Array} [key] Encryption key. + * @returns {String|Object} decrypted payload as initially provided, string or key/value pairs + * @memberOf tlvstore + */ + ns.decrypt = function(payload, utf8, key) { + utf8 = utf8 !== false; + key = getKey(key || self.u_k); + + const obj = {}; + let rest = tlvstore.blockDecrypt(base64urldecode(payload), key); + + while (rest.length > 0) { + const res = ns.splitSingleTlvRecord(rest); + if (!res) { + return false; + } + let [key, value] = res.record; + + if (utf8) { + value = td.decode(Uint8Array.from(value, ch => ch.charCodeAt(0))); + } + obj[key] = value; + + rest = res.rest; + } + + return obj[''] || obj; + }; + + if (!window.is_karma) { + Object.setPrototypeOf(ns, null); + return Object.freeze(ns); + } + + return ns; +}); + +/** + * The original jsbn.js code, but wrapped in a closure and added a code to ONLY export "BigInteger" into the + * global (window) scope. + */ +(function(scope) { +// Copyright (c) 2005 Tom Wu +// All Rights Reserved. +// See "LICENSE" for details. + +// Basic JavaScript BN library - subset useful for RSA encryption. + +// Bits per digit +var dbits; + +// JavaScript engine analysis +var canary = 0xdeadbeefcafe; +var j_lm = ((canary&0xffffff)==0xefcafe); + +// (public) Constructor +function BigInteger(a,b,c) { + if(a != null) + if("number" == typeof a) this.fromNumber(a,b,c); + else if(b == null && "string" != typeof a) this.fromString(a,256); + else this.fromString(a,b); +} + +// return new, unset BigInteger +function nbi() { return new BigInteger(null); } + +// am: Compute w_j += (x*this_i), propagate carries, +// c is initial carry, returns final carry. +// c < 3*dvalue, x < 2*dvalue, this_i < dvalue +// We need to select the fastest one that works in this environment. + +// am1: use a single mult and divide to get the high bits, +// max digit bits should be 26 because +// max internal value = 2*dvalue^2-2*dvalue (< 2^53) +function am1(i,x,w,j,c,n) { + while(--n >= 0) { + var v = x*this[i++]+w[j]+c; + c = Math.floor(v/0x4000000); + w[j++] = v&0x3ffffff; + } + return c; +} +// am2 avoids a big mult-and-extract completely. +// Max digit bits should be <= 30 because we do bitwise ops +// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) +function am2(i,x,w,j,c,n) { + var xl = x&0x7fff, xh = x>>15; + while(--n >= 0) { + var l = this[i]&0x7fff; + var h = this[i++]>>15; + var m = xh*l+h*xl; + l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff); + c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); + w[j++] = l&0x3fffffff; + } + return c; +} +// Alternately, set max digit bits to 28 since some +// browsers slow down when dealing with 32-bit numbers. +function am3(i,x,w,j,c,n) { + var xl = x&0x3fff, xh = x>>14; + while(--n >= 0) { + var l = this[i]&0x3fff; + var h = this[i++]>>14; + var m = xh*l+h*xl; + l = xl*l+((m&0x3fff)<<14)+w[j]+c; + c = (l>>28)+(m>>14)+xh*h; + w[j++] = l&0xfffffff; + } + return c; +} +if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) { + BigInteger.prototype.am = am2; + dbits = 30; +} +else if(j_lm && (navigator.appName != "Netscape")) { + BigInteger.prototype.am = am1; + dbits = 26; +} +else { // Mozilla/Netscape seems to prefer am3 + BigInteger.prototype.am = am3; + dbits = 28; +} + +BigInteger.prototype.DB = dbits; +BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i]; + r.t = this.t; + r.s = this.s; +} + +// (protected) set from integer value x, -DV <= x < DV +function bnpFromInt(x) { + this.t = 1; + this.s = (x<0)?-1:0; + if(x > 0) this[0] = x; + else if(x < -1) this[0] = x+this.DV; + else this.t = 0; +} + +// return bigint initialized to value +function nbv(i) { var r = nbi(); r.fromInt(i); return r; } + +// (protected) set from string and radix +function bnpFromString(s,b) { + var k; + if(b == 16) k = 4; + else if(b == 8) k = 3; + else if(b == 256) k = 8; // byte array + else if(b == 2) k = 1; + else if(b == 32) k = 5; + else if(b == 4) k = 2; + else { this.fromRadix(s,b); return; } + this.t = 0; + this.s = 0; + var i = s.length, mi = false, sh = 0; + while(--i >= 0) { + var x = (k==8)?s[i]&0xff:intAt(s,i); + if(x < 0) { + if(s.charAt(i) == "-") mi = true; + continue; + } + mi = false; + if(sh == 0) + this[this.t++] = x; + else if(sh+k > this.DB) { + this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh)); + } + else + this[this.t-1] |= x<= this.DB) sh -= this.DB; + } + if(k == 8 && (s[0]&0x80) != 0) { + this.s = -1; + if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t; +} + +// (public) return string representation in given radix +function bnToString(b) { + if(this.s < 0) return "-"+this.negate().toString(b); + var k; + if(b == 16) k = 4; + else if(b == 8) k = 3; + else if(b == 2) k = 1; + else if(b == 32) k = 5; + else if(b == 4) k = 2; + else return this.toRadix(b); + var km = (1< 0) { + if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); } + while(i >= 0) { + if(p < k) { + d = (this[i]&((1<>(p+=this.DB-k); + } + else { + d = (this[i]>>(p-=k))&km; + if(p <= 0) { p += this.DB; --i; } + } + if(d > 0) m = true; + if(m) r += int2char(d); + } + } + return m?r:"0"; +} + +// (public) -this +function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } + +// (public) |this| +function bnAbs() { return (this.s<0)?this.negate():this; } + +// (public) return + if this > a, - if this < a, 0 if equal +function bnCompareTo(a) { + var r = this.s-a.s; + if(r != 0) return r; + var i = this.t; + r = i-a.t; + if(r != 0) return (this.s<0)?-r:r; + while(--i >= 0) if((r=this[i]-a[i]) != 0) return r; + return 0; +} + +// returns bit length of the integer x +function nbits(x) { + var r = 1, t; + if((t=x>>>16) != 0) { x = t; r += 16; } + if((t=x>>8) != 0) { x = t; r += 8; } + if((t=x>>4) != 0) { x = t; r += 4; } + if((t=x>>2) != 0) { x = t; r += 2; } + if((t=x>>1) != 0) { x = t; r += 1; } + return r; +} + +// (public) return the number of bits in "this" +function bnBitLength() { + if(this.t <= 0) return 0; + return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM)); +} + +// (protected) r = this << n*DB +function bnpDLShiftTo(n,r) { + var i; + for(i = this.t-1; i >= 0; --i) r[i+n] = this[i]; + for(i = n-1; i >= 0; --i) r[i] = 0; + r.t = this.t+n; + r.s = this.s; +} + +// (protected) r = this >> n*DB +function bnpDRShiftTo(n,r) { + for(var i = n; i < this.t; ++i) r[i-n] = this[i]; + r.t = Math.max(this.t-n,0); + r.s = this.s; +} + +// (protected) r = this << n +function bnpLShiftTo(n,r) { + var bs = n%this.DB; + var cbs = this.DB-bs; + var bm = (1<= 0; --i) { + r[i+ds+1] = (this[i]>>cbs)|c; + c = (this[i]&bm)<= 0; --i) r[i] = 0; + r[ds] = c; + r.t = this.t+ds+1; + r.s = this.s; + r.clamp(); +} + +// (protected) r = this >> n +function bnpRShiftTo(n,r) { + r.s = this.s; + var ds = Math.floor(n/this.DB); + if(ds >= this.t) { r.t = 0; return; } + var bs = n%this.DB; + var cbs = this.DB-bs; + var bm = (1<>bs; + for(var i = ds+1; i < this.t; ++i) { + r[i-ds-1] |= (this[i]&bm)<>bs; + } + if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB; + } + if(a.t < this.t) { + c -= a.s; + while(i < this.t) { + c += this[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while(i < a.t) { + c -= a[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c -= a.s; + } + r.s = (c<0)?-1:0; + if(c < -1) r[i++] = this.DV+c; + else if(c > 0) r[i++] = c; + r.t = i; + r.clamp(); +} + +// (protected) r = this * a, r != this,a (HAC 14.12) +// "this" should be the larger one if appropriate. +function bnpMultiplyTo(a,r) { + var x = this.abs(), y = a.abs(); + var i = x.t; + r.t = i+y.t; + while(--i >= 0) r[i] = 0; + for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t); + r.s = 0; + r.clamp(); + if(this.s != a.s) BigInteger.ZERO.subTo(r,r); +} + +// (protected) r = this^2, r != this (HAC 14.16) +function bnpSquareTo(r) { + var x = this.abs(); + var i = r.t = 2*x.t; + while(--i >= 0) r[i] = 0; + for(i = 0; i < x.t-1; ++i) { + var c = x.am(i,x[i],r,2*i,0,1); + if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { + r[i+x.t] -= x.DV; + r[i+x.t+1] = 1; + } + } + if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1); + r.s = 0; + r.clamp(); +} + +// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) +// r != q, this != m. q or r may be null. +function bnpDivRemTo(m,q,r) { + var pm = m.abs(); + if(pm.t <= 0) return; + var pt = this.abs(); + if(pt.t < pm.t) { + if(q != null) q.fromInt(0); + if(r != null) this.copyTo(r); + return; + } + if(r == null) r = nbi(); + var y = nbi(), ts = this.s, ms = m.s; + var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus + if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } + else { pm.copyTo(y); pt.copyTo(r); } + var ys = y.t; + var y0 = y[ys-1]; + if(y0 == 0) return; + var yt = y0*(1<1)?y[ys-2]>>this.F2:0); + var d1 = this.FV/yt, d2 = (1<= 0) { + r[r.t++] = 1; + r.subTo(t,r); + } + BigInteger.ONE.dlShiftTo(ys,t); + t.subTo(y,y); // "negative" y so we can replace sub with am later + while(y.t < ys) y[y.t++] = 0; + while(--j >= 0) { + // Estimate quotient digit + var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2); + if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out + y.dlShiftTo(j,t); + r.subTo(t,r); + while(r[i] < --qd) r.subTo(t,r); + } + } + if(q != null) { + r.drShiftTo(ys,q); + if(ts != ms) BigInteger.ZERO.subTo(q,q); + } + r.t = ys; + r.clamp(); + if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder + if(ts < 0) BigInteger.ZERO.subTo(r,r); +} + +// (public) this mod a +function bnMod(a) { + var r = nbi(); + this.abs().divRemTo(a,null,r); + if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); + return r; +} + +// Modular reduction using "classic" algorithm +function Classic(m) { this.m = m; } +function cConvert(x) { + if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); + else return x; +} +function cRevert(x) { return x; } +function cReduce(x) { x.divRemTo(this.m,null,x); } +function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } +function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + +Classic.prototype.convert = cConvert; +Classic.prototype.revert = cRevert; +Classic.prototype.reduce = cReduce; +Classic.prototype.mulTo = cMulTo; +Classic.prototype.sqrTo = cSqrTo; + +// (protected) return "-1/this % 2^DB"; useful for Mont. reduction +// justification: +// xy == 1 (mod m) +// xy = 1+km +// xy(2-xy) = (1+km)(1-km) +// x[y(2-xy)] = 1-k^2m^2 +// x[y(2-xy)] == 1 (mod m^2) +// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 +// should reduce x and y(2-xy) by m^2 at each step to keep size bounded. +// JS multiply "overflows" differently from C/C++, so care is needed here. +function bnpInvDigit() { + if(this.t < 1) return 0; + var x = this[0]; + if((x&1) == 0) return 0; + var y = x&3; // y == 1/x mod 2^2 + y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 + y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 + y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 + // last step - calculate inverse mod DV directly; + // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints + y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits + // we really want the negative inverse, and -DV < y < DV + return (y>0)?this.DV-y:-y; +} + +// Montgomery reduction +function Montgomery(m) { + this.m = m; + this.mp = m.invDigit(); + this.mpl = this.mp&0x7fff; + this.mph = this.mp>>15; + this.um = (1<<(m.DB-15))-1; + this.mt2 = 2*m.t; +} + +// xR mod m +function montConvert(x) { + var r = nbi(); + x.abs().dlShiftTo(this.m.t,r); + r.divRemTo(this.m,null,r); + if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); + return r; +} + +// x/R mod m +function montRevert(x) { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; +} + +// x = x/R mod m (HAC 14.32) +function montReduce(x) { + while(x.t <= this.mt2) // pad x so am has enough room later + x[x.t++] = 0; + for(var i = 0; i < this.m.t; ++i) { + // faster way of calculating u0 = x[i]*mp mod DV + var j = x[i]&0x7fff; + var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM; + // use am to combine the multiply-shift-add into one call + j = i+this.m.t; + x[j] += this.m.am(0,u0,x,i,0,this.m.t); + // propagate carry + while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } + } + x.clamp(); + x.drShiftTo(this.m.t,x); + if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); +} + +// r = "x^2/R mod m"; x != r +function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + +// r = "xy/R mod m"; x,y != r +function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } + +Montgomery.prototype.convert = montConvert; +Montgomery.prototype.revert = montRevert; +Montgomery.prototype.reduce = montReduce; +Montgomery.prototype.mulTo = montMulTo; +Montgomery.prototype.sqrTo = montSqrTo; + +// (protected) true iff this is even +function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; } + +// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) +function bnpExp(e,z) { + if(e > 0xffffffff || e < 1) return BigInteger.ONE; + var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; + g.copyTo(r); + while(--i >= 0) { + z.sqrTo(r,r2); + if((e&(1< 0) z.mulTo(r2,g,r); + else { var t = r; r = r2; r2 = t; } + } + return z.revert(r); +} + +// (public) this^e % m, 0 <= e < 2^32 +function bnModPowInt(e,m) { + var z; + if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); + return this.exp(e,z); +} + +// protected +BigInteger.prototype.copyTo = bnpCopyTo; +BigInteger.prototype.fromInt = bnpFromInt; +BigInteger.prototype.fromString = bnpFromString; +BigInteger.prototype.clamp = bnpClamp; +BigInteger.prototype.dlShiftTo = bnpDLShiftTo; +BigInteger.prototype.drShiftTo = bnpDRShiftTo; +BigInteger.prototype.lShiftTo = bnpLShiftTo; +BigInteger.prototype.rShiftTo = bnpRShiftTo; +BigInteger.prototype.subTo = bnpSubTo; +BigInteger.prototype.multiplyTo = bnpMultiplyTo; +BigInteger.prototype.squareTo = bnpSquareTo; +BigInteger.prototype.divRemTo = bnpDivRemTo; +BigInteger.prototype.invDigit = bnpInvDigit; +BigInteger.prototype.isEven = bnpIsEven; +BigInteger.prototype.exp = bnpExp; + +// public +BigInteger.prototype.toString = bnToString; +BigInteger.prototype.negate = bnNegate; +BigInteger.prototype.abs = bnAbs; +BigInteger.prototype.compareTo = bnCompareTo; +BigInteger.prototype.bitLength = bnBitLength; +BigInteger.prototype.mod = bnMod; +BigInteger.prototype.modPowInt = bnModPowInt; + +// "constants" +BigInteger.ZERO = nbv(0); +BigInteger.ONE = nbv(1); + +scope.BigInteger = BigInteger; +scope.nbi = nbi; +})(window); + +// Copyright (c) 2005-2009 Tom Wu +// All Rights Reserved. +// See "LICENSE" for details. + +// Extended JavaScript BN functions, required for RSA private ops. + +// Version 1.1: new BigInteger("0", 10) returns "proper" zero +// Version 1.2: square() API, isProbablePrime fix + +// (public) +function bnClone() { var r = nbi(); this.copyTo(r); return r; } + +// (public) return value as integer +function bnIntValue() { + if(this.s < 0) { + if(this.t == 1) return this[0]-this.DV; + else if(this.t == 0) return -1; + } + else if(this.t == 1) return this[0]; + else if(this.t == 0) return 0; + // assumes 16 < DB < 32 + return ((this[1]&((1<<(32-this.DB))-1))<>24; } + +// (public) return value as short (assumes DB>=16) +function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; } + +// (protected) return x s.t. r^x < DV +function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); } + +// (public) 0 if this == 0, 1 if this > 0 +function bnSigNum() { + if(this.s < 0) return -1; + else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0; + else return 1; +} + +// (protected) convert to radix string +function bnpToRadix(b) { + if(b == null) b = 10; + if(this.signum() == 0 || b < 2 || b > 36) return "0"; + var cs = this.chunkSize(b); + var a = Math.pow(b,cs); + var d = nbv(a), y = nbi(), z = nbi(), r = ""; + this.divRemTo(d,y,z); + while(y.signum() > 0) { + r = (a+z.intValue()).toString(b).substr(1) + r; + y.divRemTo(d,y,z); + } + return z.intValue().toString(b) + r; +} + +// (protected) convert from radix string +function bnpFromRadix(s,b) { + this.fromInt(0); + if(b == null) b = 10; + var cs = this.chunkSize(b); + var d = Math.pow(b,cs), mi = false, j = 0, w = 0; + for(var i = 0; i < s.length; ++i) { + var x = intAt(s,i); + if(x < 0) { + if(s.charAt(i) == "-" && this.signum() == 0) mi = true; + continue; + } + w = b*w+x; + if(++j >= cs) { + this.dMultiply(d); + this.dAddOffset(w,0); + j = 0; + w = 0; + } + } + if(j > 0) { + this.dMultiply(Math.pow(b,j)); + this.dAddOffset(w,0); + } + if(mi) BigInteger.ZERO.subTo(this,this); +} + +// (protected) alternate constructor +function bnpFromNumber(a,b,c) { + if("number" == typeof b) { + // new BigInteger(int,int,RNG) + if(a < 2) this.fromInt(1); + else { + this.fromNumber(a,c); + if(!this.testBit(a-1)) // force MSB set + this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this); + if(this.isEven()) this.dAddOffset(1,0); // force odd + while(!this.isProbablePrime(b)) { + this.dAddOffset(2,0); + if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this); + } + } + } + else { + // new BigInteger(int,RNG) + var x = new Array(), t = a&7; + x.length = (a>>3)+1; + b.nextBytes(x); + if(t > 0) x[0] &= ((1< 0) { + if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p) + r[k++] = d|(this.s<<(this.DB-p)); + while(i >= 0) { + if(p < 8) { + d = (this[i]&((1<>(p+=this.DB-8); + } + else { + d = (this[i]>>(p-=8))&0xff; + if(p <= 0) { p += this.DB; --i; } + } + if((d&0x80) != 0) d |= -256; + if(k == 0 && (this.s&0x80) != (d&0x80)) ++k; + if(k > 0 || d != this.s) r[k++] = d; + } + } + return r; +} + +function bnEquals(a) { return(this.compareTo(a)==0); } +function bnMin(a) { return(this.compareTo(a)<0)?this:a; } +function bnMax(a) { return(this.compareTo(a)>0)?this:a; } + +// (protected) r = this op a (bitwise) +function bnpBitwiseTo(a,op,r) { + var i, f, m = Math.min(a.t,this.t); + for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]); + if(a.t < this.t) { + f = a.s&this.DM; + for(i = m; i < this.t; ++i) r[i] = op(this[i],f); + r.t = this.t; + } + else { + f = this.s&this.DM; + for(i = m; i < a.t; ++i) r[i] = op(f,a[i]); + r.t = a.t; + } + r.s = op(this.s,a.s); + r.clamp(); +} + +// (public) this & a +function op_and(x,y) { return x&y; } +function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; } + +// (public) this | a +function op_or(x,y) { return x|y; } +function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; } + +// (public) this ^ a +function op_xor(x,y) { return x^y; } +function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; } + +// (public) this & ~a +function op_andnot(x,y) { return x&~y; } +function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; } + +// (public) ~this +function bnNot() { + var r = nbi(); + for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i]; + r.t = this.t; + r.s = ~this.s; + return r; +} + +// (public) this << n +function bnShiftLeft(n) { + var r = nbi(); + if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r); + return r; +} + +// (public) this >> n +function bnShiftRight(n) { + var r = nbi(); + if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r); + return r; +} + +// return index of lowest 1-bit in x, x < 2^31 +function lbit(x) { + if(x == 0) return -1; + var r = 0; + if((x&0xffff) == 0) { x >>= 16; r += 16; } + if((x&0xff) == 0) { x >>= 8; r += 8; } + if((x&0xf) == 0) { x >>= 4; r += 4; } + if((x&3) == 0) { x >>= 2; r += 2; } + if((x&1) == 0) ++r; + return r; +} + +// (public) returns index of lowest 1-bit (or -1 if none) +function bnGetLowestSetBit() { + for(var i = 0; i < this.t; ++i) + if(this[i] != 0) return i*this.DB+lbit(this[i]); + if(this.s < 0) return this.t*this.DB; + return -1; +} + +// return number of 1 bits in x +function cbit(x) { + var r = 0; + while(x != 0) { x &= x-1; ++r; } + return r; +} + +// (public) return number of set bits +function bnBitCount() { + var r = 0, x = this.s&this.DM; + for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x); + return r; +} + +// (public) true iff nth bit is set +function bnTestBit(n) { + var j = Math.floor(n/this.DB); + if(j >= this.t) return(this.s!=0); + return((this[j]&(1<<(n%this.DB)))!=0); +} + +// (protected) this op (1<>= this.DB; + } + if(a.t < this.t) { + c += a.s; + while(i < this.t) { + c += this[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while(i < a.t) { + c += a[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c += a.s; + } + r.s = (c<0)?-1:0; + if(c > 0) r[i++] = c; + else if(c < -1) r[i++] = this.DV+c; + r.t = i; + r.clamp(); +} + +// (public) this + a +function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; } + +// (public) this - a +function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; } + +// (public) this * a +function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; } + +// (public) this^2 +function bnSquare() { var r = nbi(); this.squareTo(r); return r; } + +// (public) this / a +function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; } + +// (public) this % a +function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; } + +// (public) [this/a,this%a] +function bnDivideAndRemainder(a) { + var q = nbi(), r = nbi(); + this.divRemTo(a,q,r); + return new Array(q,r); +} + +// (protected) this *= n, this >= 0, 1 < n < DV +function bnpDMultiply(n) { + this[this.t] = this.am(0,n-1,this,0,0,this.t); + ++this.t; + this.clamp(); +} + +// (protected) this += n << w words, this >= 0 +function bnpDAddOffset(n,w) { + if(n == 0) return; + while(this.t <= w) this[this.t++] = 0; + this[w] += n; + while(this[w] >= this.DV) { + this[w] -= this.DV; + if(++w >= this.t) this[this.t++] = 0; + ++this[w]; + } +} + +// A "null" reducer +function NullExp() {} +function nNop(x) { return x; } +function nMulTo(x,y,r) { x.multiplyTo(y,r); } +function nSqrTo(x,r) { x.squareTo(r); } + +NullExp.prototype.convert = nNop; +NullExp.prototype.revert = nNop; +NullExp.prototype.mulTo = nMulTo; +NullExp.prototype.sqrTo = nSqrTo; + +// (public) this^e +function bnPow(e) { return this.exp(e,new NullExp()); } + +// (protected) r = lower n words of "this * a", a.t <= n +// "this" should be the larger one if appropriate. +function bnpMultiplyLowerTo(a,n,r) { + var i = Math.min(this.t+a.t,n); + r.s = 0; // assumes a,this >= 0 + r.t = i; + while(i > 0) r[--i] = 0; + var j; + for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t); + for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i); + r.clamp(); +} + +// (protected) r = "this * a" without lower n words, n > 0 +// "this" should be the larger one if appropriate. +function bnpMultiplyUpperTo(a,n,r) { + --n; + var i = r.t = this.t+a.t-n; + r.s = 0; // assumes a,this >= 0 + while(--i >= 0) r[i] = 0; + for(i = Math.max(n-this.t,0); i < a.t; ++i) + r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n); + r.clamp(); + r.drShiftTo(1,r); +} + +// Barrett modular reduction +function Barrett(m) { + // setup Barrett + this.r2 = nbi(); + this.q3 = nbi(); + BigInteger.ONE.dlShiftTo(2*m.t,this.r2); + this.mu = this.r2.divide(m); + this.m = m; +} + +function barrettConvert(x) { + if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m); + else if(x.compareTo(this.m) < 0) return x; + else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } +} + +function barrettRevert(x) { return x; } + +// x = x mod m (HAC 14.42) +function barrettReduce(x) { + x.drShiftTo(this.m.t-1,this.r2); + if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); } + this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3); + this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2); + while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1); + x.subTo(this.r2,x); + while(x.compareTo(this.m) >= 0) x.subTo(this.m,x); +} + +// r = x^2 mod m; x != r +function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + +// r = x*y mod m; x,y != r +function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } + +Barrett.prototype.convert = barrettConvert; +Barrett.prototype.revert = barrettRevert; +Barrett.prototype.reduce = barrettReduce; +Barrett.prototype.mulTo = barrettMulTo; +Barrett.prototype.sqrTo = barrettSqrTo; + +// (public) this^e % m (HAC 14.85) +function bnModPow(e,m) { + var i = e.bitLength(), k, r = nbv(1), z; + if(i <= 0) return r; + else if(i < 18) k = 1; + else if(i < 48) k = 3; + else if(i < 144) k = 4; + else if(i < 768) k = 5; + else k = 6; + if(i < 8) + z = new Classic(m); + else if(m.isEven()) + z = new Barrett(m); + else + z = new Montgomery(m); + + // precomputation + var g = new Array(), n = 3, k1 = k-1, km = (1< 1) { + var g2 = nbi(); + z.sqrTo(g[1],g2); + while(n <= km) { + g[n] = nbi(); + z.mulTo(g2,g[n-2],g[n]); + n += 2; + } + } + + var j = e.t-1, w, is1 = true, r2 = nbi(), t; + i = nbits(e[j])-1; + while(j >= 0) { + if(i >= k1) w = (e[j]>>(i-k1))&km; + else { + w = (e[j]&((1<<(i+1))-1))<<(k1-i); + if(j > 0) w |= e[j-1]>>(this.DB+i-k1); + } + + n = k; + while((w&1) == 0) { w >>= 1; --n; } + if((i -= n) < 0) { i += this.DB; --j; } + if(is1) { // ret == 1, don't bother squaring or multiplying it + g[w].copyTo(r); + is1 = false; + } + else { + while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; } + if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; } + z.mulTo(r2,g[w],r); + } + + while(j >= 0 && (e[j]&(1< 0) { + x.rShiftTo(g,x); + y.rShiftTo(g,y); + } + while(x.signum() > 0) { + if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x); + if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y); + if(x.compareTo(y) >= 0) { + x.subTo(y,x); + x.rShiftTo(1,x); + } + else { + y.subTo(x,y); + y.rShiftTo(1,y); + } + } + if(g > 0) y.lShiftTo(g,y); + return y; +} + +// (protected) this % n, n < 2^26 +function bnpModInt(n) { + if(n <= 0) return 0; + var d = this.DV%n, r = (this.s<0)?n-1:0; + if(this.t > 0) + if(d == 0) r = this[0]%n; + else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n; + return r; +} + +// (public) 1/this % m (HAC 14.61) +function bnModInverse(m) { + var ac = m.isEven(); + if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO; + var u = m.clone(), v = this.clone(); + var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); + while(u.signum() != 0) { + while(u.isEven()) { + u.rShiftTo(1,u); + if(ac) { + if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); } + a.rShiftTo(1,a); + } + else if(!b.isEven()) b.subTo(m,b); + b.rShiftTo(1,b); + } + while(v.isEven()) { + v.rShiftTo(1,v); + if(ac) { + if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); } + c.rShiftTo(1,c); + } + else if(!d.isEven()) d.subTo(m,d); + d.rShiftTo(1,d); + } + if(u.compareTo(v) >= 0) { + u.subTo(v,u); + if(ac) a.subTo(c,a); + b.subTo(d,b); + } + else { + v.subTo(u,v); + if(ac) c.subTo(a,c); + d.subTo(b,d); + } + } + if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; + if(d.compareTo(m) >= 0) return d.subtract(m); + if(d.signum() < 0) d.addTo(m,d); else return d; + if(d.signum() < 0) return d.add(m); else return d; +} + +var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997]; +var lplim = (1<<26)/lowprimes[lowprimes.length-1]; + +// (public) test primality with certainty >= 1-.5^t +function bnIsProbablePrime(t) { + var i, x = this.abs(); + if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) { + for(i = 0; i < lowprimes.length; ++i) + if(x[0] == lowprimes[i]) return true; + return false; + } + if(x.isEven()) return false; + i = 1; + while(i < lowprimes.length) { + var m = lowprimes[i], j = i+1; + while(j < lowprimes.length && m < lplim) m *= lowprimes[j++]; + m = x.modInt(m); + while(i < j) if(m%lowprimes[i++] == 0) return false; + } + return x.millerRabin(t); +} + +// (protected) true if probably prime (HAC 4.24, Miller-Rabin) +function bnpMillerRabin(t) { + var n1 = this.subtract(BigInteger.ONE); + var k = n1.getLowestSetBit(); + if(k <= 0) return false; + var r = n1.shiftRight(k); + t = (t+1)>>1; + if(t > lowprimes.length) t = lowprimes.length; + var a = nbi(); + for(var i = 0; i < t; ++i) { + //Pick bases at random, instead of starting at 2 + a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]); + var y = a.modPow(r,this); + if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { + var j = 1; + while(j++ < k && y.compareTo(n1) != 0) { + y = y.modPowInt(2,this); + if(y.compareTo(BigInteger.ONE) == 0) return false; + } + if(y.compareTo(n1) != 0) return false; + } + } + return true; +} + +// protected +BigInteger.prototype.chunkSize = bnpChunkSize; +BigInteger.prototype.toRadix = bnpToRadix; +BigInteger.prototype.fromRadix = bnpFromRadix; +BigInteger.prototype.fromNumber = bnpFromNumber; +BigInteger.prototype.bitwiseTo = bnpBitwiseTo; +BigInteger.prototype.changeBit = bnpChangeBit; +BigInteger.prototype.addTo = bnpAddTo; +BigInteger.prototype.dMultiply = bnpDMultiply; +BigInteger.prototype.dAddOffset = bnpDAddOffset; +BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; +BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; +BigInteger.prototype.modInt = bnpModInt; +BigInteger.prototype.millerRabin = bnpMillerRabin; + +// public +BigInteger.prototype.clone = bnClone; +BigInteger.prototype.intValue = bnIntValue; +BigInteger.prototype.byteValue = bnByteValue; +BigInteger.prototype.shortValue = bnShortValue; +BigInteger.prototype.signum = bnSigNum; +BigInteger.prototype.toByteArray = bnToByteArray; +BigInteger.prototype.equals = bnEquals; +BigInteger.prototype.min = bnMin; +BigInteger.prototype.max = bnMax; +BigInteger.prototype.and = bnAnd; +BigInteger.prototype.or = bnOr; +BigInteger.prototype.xor = bnXor; +BigInteger.prototype.andNot = bnAndNot; +BigInteger.prototype.not = bnNot; +BigInteger.prototype.shiftLeft = bnShiftLeft; +BigInteger.prototype.shiftRight = bnShiftRight; +BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; +BigInteger.prototype.bitCount = bnBitCount; +BigInteger.prototype.testBit = bnTestBit; +BigInteger.prototype.setBit = bnSetBit; +BigInteger.prototype.clearBit = bnClearBit; +BigInteger.prototype.flipBit = bnFlipBit; +BigInteger.prototype.add = bnAdd; +BigInteger.prototype.subtract = bnSubtract; +BigInteger.prototype.multiply = bnMultiply; +BigInteger.prototype.divide = bnDivide; +BigInteger.prototype.remainder = bnRemainder; +BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; +BigInteger.prototype.modPow = bnModPow; +BigInteger.prototype.modInverse = bnModInverse; +BigInteger.prototype.pow = bnPow; +BigInteger.prototype.gcd = bnGCD; +BigInteger.prototype.isProbablePrime = bnIsProbablePrime; + +// JSBN-specific extension +BigInteger.prototype.square = bnSquare; + +// BigInteger interfaces not implemented in jsbn: + +// BigInteger(int signum, byte[] magnitude) +// double doubleValue() +// float floatValue() +// int hashCode() +// long longValue() +// static BigInteger valueOf(long val) diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49263F0105C3CAEB7337A65B28249307D65104D8 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49263F0105C3CAEB7337A65B28249307D65104D8 new file mode 100644 index 0000000..6e6ee63 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49263F0105C3CAEB7337A65B28249307D65104D8 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49263F0105C3CAEB7337A65B28249307D65104D8-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49263F0105C3CAEB7337A65B28249307D65104D8-blob new file mode 100644 index 0000000..9678f6a Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49263F0105C3CAEB7337A65B28249307D65104D8-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49F0E3887EF99C5A582721EA12751D6BC809E3C2 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49F0E3887EF99C5A582721EA12751D6BC809E3C2 new file mode 100644 index 0000000..0710b1d Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49F0E3887EF99C5A582721EA12751D6BC809E3C2 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49F6BF80F8BD070ADE4AFA7026FA0BE31AD2AD00 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49F6BF80F8BD070ADE4AFA7026FA0BE31AD2AD00 new file mode 100644 index 0000000..1f49a66 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49F6BF80F8BD070ADE4AFA7026FA0BE31AD2AD00 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49F6BF80F8BD070ADE4AFA7026FA0BE31AD2AD00-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49F6BF80F8BD070ADE4AFA7026FA0BE31AD2AD00-blob new file mode 100644 index 0000000..5518a9a Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/49F6BF80F8BD070ADE4AFA7026FA0BE31AD2AD00-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4B6D81F4AD223BFBFF40EED84B4489B52000AB9F b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4B6D81F4AD223BFBFF40EED84B4489B52000AB9F new file mode 100644 index 0000000..d7f7f37 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4B6D81F4AD223BFBFF40EED84B4489B52000AB9F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4BA701E8B9669EFE87317CD2390401F6F04D3209 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4BA701E8B9669EFE87317CD2390401F6F04D3209 new file mode 100644 index 0000000..232c63f Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4BA701E8B9669EFE87317CD2390401F6F04D3209 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4BB83229F82056EFD70B12C218535D72848F4971 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4BB83229F82056EFD70B12C218535D72848F4971 new file mode 100644 index 0000000..525f903 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4BB83229F82056EFD70B12C218535D72848F4971 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4BB83229F82056EFD70B12C218535D72848F4971-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4BB83229F82056EFD70B12C218535D72848F4971-blob new file mode 100644 index 0000000..5acb7f6 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4BB83229F82056EFD70B12C218535D72848F4971-blob @@ -0,0 +1,4051 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Commits · void-linux/void-packages · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                + + + +
                + Skip to content + + + + + + + + + + + +
                + +
                + + + + + + + +
                + + + + + + +
                + + + + + + + + + + +
                +
                +
                + + + + + + + + + + + + + + + + + + + + +
                + + + + + +
                + Permalink + +
                + +
                +
                + + + master + + + + +
                +
                +
                + Switch branches/tags + +
                + + + +
                + +
                + +
                + + +
                + +
                + + + + + + + + + + + + + + + + + +
                + + +
                +
                +
                +
                + +
                + +
                + + +
                + +
                +
                +
                +

                Name already in use

                +
                +
                + +
                +
                +
                +
                + +
                A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? +
                + +
                +
                + + +
                +
                + + +
                + +
                +
                +
                + +
                +
                +

                Commits on Jan 7, 2023

                +
                  +
                1. +
                  +

                  + powertop: fix update-check + +

                  + + +
                  + +
                  + +
                  + +
                  + pascal-huber + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + b9e6a5f + +
                  +
                  + + +
                  +
                2. + +
                3. +
                  +

                  + lighttpd: update to 1.4.68 + + + +

                  + +
                  * update to 1.4.68
                  +* modify build command for meson type: feature options
                  +* fix meson build
                  + +
                  + +
                  + +
                  + +
                  + gstrauss + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 81f64ec + +
                  +
                  + + +
                  +
                4. + +
                5. +
                  +

                  + perl-URI: update to 5.17. + +

                  + + +
                  + +
                  + +
                  + +
                  + mhmdanas + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 9fab4fc + +
                  +
                  + + +
                  +
                6. + +
                7. +
                  +

                  + perl-MIME-tools: update to 5.510. + +

                  + + +
                  + +
                  + +
                  + +
                  + mhmdanas + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + c89becc + +
                  +
                  + + +
                  +
                8. + +
                9. +
                  +

                  + rssguard: update to 4.2.7. + +

                  + + +
                  + +
                  + +
                  + +
                  + mobinmob + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 54af211 + +
                  +
                  + + +
                  +
                10. + +
                11. +
                  +

                  + ristretto: update to 0.12.4. + +

                  + + +
                  + +
                  + +
                  + +
                  + mobinmob + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 6cd82bf + +
                  +
                  + + +
                  +
                12. + +
                13. +
                  +

                  + sigi: update to 3.6.0 + +

                  + + +
                  + +
                  + +
                  + +
                  + hiljusti + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + b9bd687 + +
                  +
                  + + +
                  +
                14. + +
                15. +
                  +

                  + xfce4-screenshooter: update to 1.10.2. + + + +

                  + +
                  * use libsoup3
                  + +
                  + +
                  +
                  + + @paper42 +
                  +
                  + +
                  + paper42 + + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 49fe1c0 + +
                  +
                  + + +
                  +
                16. + +
                17. +
                  +

                  + gdu: update to 5.21.0. + +

                  + + +
                  + +
                  + +
                  + +
                  + TeddyDD + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 84eb1c5 + +
                  +
                  + + +
                  +
                18. + +
                19. +
                  +

                  + doctl: update to 1.92.0. + +

                  + + +
                  + +
                  + +
                  + +
                  + benalb + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 9ea86bd + +
                  +
                  + + +
                  +
                20. + +
                21. +
                  +

                  + github-cli: update to 2.21.2 + + + +

                  + +
                  Closes: #41432 [via git-merge-pr]
                  + +
                  + +
                  + +
                  + +
                  + tranzystorek-io + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 9331390 + +
                  +
                  + + +
                  +
                22. + +
                23. +
                  +

                  + dbeaver: update to 22.3.1. + + + +

                  + +
                  Closes: #41451 [via git-merge-pr]
                  + +
                  + +
                  + +
                  + +
                  + knusbaum + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 4b3121b + +
                  +
                  + + +
                  +
                24. + +
                25. +
                  +

                  + skype: update to 8.92.0.401. + + + +

                  + +
                  Closes: #41445 [via git-merge-pr]
                  + +
                  + +
                  + +
                  + +
                  + mobinmob + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 4f5d7c8 + +
                  +
                  + + +
                  +
                26. + +
                27. +
                  +

                  + qalculate-qt: update to 4.5.1. + + + +

                  + +
                  Closes: #41456 [via git-merge-pr]
                  + +
                  + +
                  + +
                  + +
                  + mhmdanas + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 205b518 + +
                  +
                  + + +
                  +
                28. + +
                29. +
                  +

                  + qalculate-gtk: update to 4.5.1. + +

                  + + +
                  + +
                  + +
                  + +
                  + mhmdanas + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 7df47d0 + +
                  +
                  + + +
                  +
                30. + +
                31. +
                  +

                  + libqalculate: update to 4.5.1. + +

                  + + +
                  + +
                  + +
                  + +
                  + mhmdanas + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + e707508 + +
                  +
                  + + +
                  +
                32. + +
                33. +
                  +

                  + just: update to 1.11.0 + + + +

                  + +
                  Closes: #41461 [via git-merge-pr]
                  + +
                  + +
                  + +
                  + +
                  + cinerea0 + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 686f191 + +
                  +
                  + + +
                  +
                34. + +
                35. +
                  +

                  + usql: update to 0.13.5. + + + +

                  + +
                  Closes: #41502 [via git-merge-pr]
                  + +
                  + +
                  + +
                  + +
                  + icp1994 + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 061a710 + +
                  +
                  + + +
                  +
                36. + +
                37. +
                  +

                  + SDL2: update to 2.26.2. + + + +

                  + +
                  Closes: #41508 [via git-merge-pr]
                  + +
                  + +
                  + +
                  + +
                  + motorto + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 4d5d451 + +
                  +
                  + + +
                  +
                38. + +
                39. +
                  +

                  + exiftool: update to 12.54. + + + +

                  + +
                  Closes: #41506 [via git-merge-pr]
                  + +
                  + +
                  + +
                  + +
                  + benalb + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 304b747 + +
                  +
                  + + +
                  +
                40. + +
                41. +
                  +

                  + CONTRIBUTING.md: removing duplicated word + + + +

                  + +
                  removing duplicated 'the' from the section 'Creating, updating, and
                  +modifying packages in Void by yourself'
                  + +
                  + +
                  + +
                  + +
                  + carvalhudo + + authored and + abenson + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 647df89 + +
                  +
                  + + +
                  +
                42. + +
                43. +
                  +

                  + stellarium: update to 1.2. + + + +

                  + +
                  I have opened an issue regarding the distfiles and versioning:
                  +
                  +  Stellarium/stellarium#2981
                  + +
                  + +
                  +
                  + + @abenson +
                  +
                  + +
                  + abenson + + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + d04ebef + +
                  +
                  + + +
                  +
                44. + +
                45. +
                  +

                  + syncthingtray: update to 1.3.2. + +

                  + + +
                  + +
                  +
                  + + @classabbyamp +
                  +
                  + +
                  + classabbyamp + + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + + + + +
                  + + bcb7c5d + +
                  +
                  + + +
                  +
                46. + +
                47. +
                  +

                  + chezmoi: update to 2.29.1. + +

                  + + +
                  + +
                  +
                  + + @classabbyamp +
                  +
                  + +
                  + classabbyamp + + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + + + + +
                  + + f263041 + +
                  +
                  + + +
                  +
                48. + +
                49. +
                  +

                  + imhex: update to 1.26.2. + +

                  + + +
                  + +
                  +
                  + + @classabbyamp +
                  +
                  + +
                  + classabbyamp + + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + + + + +
                  + + ad255b1 + +
                  +
                  + + +
                  +
                50. + +
                51. +
                  +

                  + python3-rich: update to 13.0.1. + +

                  + + +
                  + +
                  +
                  + + @abenson +
                  +
                  + +
                  + abenson + + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 35bd890 + +
                  +
                  + + +
                  +
                52. + +
                53. +
                  +

                  + hwloc: update to 2.7.2. + +

                  + + +
                  + +
                  +
                  + + @leahneukirchen +
                  +
                  + +
                  + leahneukirchen + + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + c8f404a + +
                  +
                  + + +
                  +
                54. + +
                55. +
                  +

                  + fontforge: update to 20230101. + +

                  + + +
                  + +
                  +
                  + + @leahneukirchen +
                  +
                  + +
                  + leahneukirchen + + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 3f56b2c + +
                  +
                  + + +
                  +
                56. + +
                57. +
                  +

                  + bpftrace: update to 0.16.0. + +

                  + + +
                  + +
                  +
                  + + @leahneukirchen +
                  +
                  + +
                  + leahneukirchen + + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 6c23888 + +
                  +
                  + + +
                  +
                58. + +
                59. +
                  +

                  + New package: libbpf-1.1.0 + +

                  + + +
                  + +
                  +
                  + + @leahneukirchen +
                  +
                  + +
                  + leahneukirchen + + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 1adc7db + +
                  +
                  + + +
                  +
                60. + +
                61. +
                  +

                  + linux-lts: update to 5.15. + +

                  + + +
                  + +
                  +
                  + + @classabbyamp +
                  +
                  + +
                  + classabbyamp + + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 81d598c + +
                  +
                  + + +
                  +
                62. + +
                63. +
                  +

                  + galculator: remove gtk2 subpackage + +

                  + + +
                  + +
                  +
                  + + @paper42 +
                  +
                  + +
                  + paper42 + + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 908f9d2 + +
                  +
                  + + +
                  +
                64. + +
                65. +
                  +

                  + gtkimageview: use repo-default for $distfiles + +

                  + + +
                  + +
                  +
                  + + @paper42 +
                  +
                  + +
                  + paper42 + + committed + Jan 7, 2023 + +
                  +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + bbb5e5c + +
                  +
                  + + +
                  +
                66. + +
                67. +
                  +

                  + gftp: use repo-default/distfiles for $distfiles + +

                  + + +
                  + +
                  +
                  + + @paper42 +
                  +
                  + +
                  + paper42 + + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + 4739b92 + +
                  +
                  + + +
                  +
                68. + +
                69. +
                  +

                  + ibus-m17n: remove unused gnome-common build dep + +

                  + + +
                  + +
                  +
                  + + @paper42 +
                  +
                  + +
                  + paper42 + + committed + Jan 7, 2023 + +
                  +
                  +
                  +
                  +
                  + +
                  + + + + + + + + + + +
                  + + eb04269 + +
                  +
                  + + +
                  +
                70. + +
                +
                +
                +
                + + +
                +
                Older
                +
                + + +
                + + +
                + +
                + + +
                +
                + +
                + + + + + + + + + + + + + + + + + + +
                + +
                + + + diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4C87D25ED7337CA48FD1F0995C6F66EB57F59B44 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4C87D25ED7337CA48FD1F0995C6F66EB57F59B44 new file mode 100644 index 0000000..99c206c Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4C87D25ED7337CA48FD1F0995C6F66EB57F59B44 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4C87D25ED7337CA48FD1F0995C6F66EB57F59B44-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4C87D25ED7337CA48FD1F0995C6F66EB57F59B44-blob new file mode 100644 index 0000000..e952cf9 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4C87D25ED7337CA48FD1F0995C6F66EB57F59B44-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4E19ABEFD9788378D409059EE2BA39A121DA73FD b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4E19ABEFD9788378D409059EE2BA39A121DA73FD new file mode 100644 index 0000000..921a884 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4E19ABEFD9788378D409059EE2BA39A121DA73FD differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4F7A879D0E035AFDB7FAE99A97466BF6F8785449 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4F7A879D0E035AFDB7FAE99A97466BF6F8785449 new file mode 100644 index 0000000..a24cbba Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/4F7A879D0E035AFDB7FAE99A97466BF6F8785449 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5025505F49B2C6B1E48E465EA83DF6A25AE42BB8 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5025505F49B2C6B1E48E465EA83DF6A25AE42BB8 new file mode 100644 index 0000000..9e8f126 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5025505F49B2C6B1E48E465EA83DF6A25AE42BB8 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5029BB957FA4DADCBF52E7240DC793CB4E4BA1C4 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5029BB957FA4DADCBF52E7240DC793CB4E4BA1C4 new file mode 100644 index 0000000..5f78da7 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5029BB957FA4DADCBF52E7240DC793CB4E4BA1C4 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5029BB957FA4DADCBF52E7240DC793CB4E4BA1C4-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5029BB957FA4DADCBF52E7240DC793CB4E4BA1C4-blob new file mode 100644 index 0000000..232db61 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5029BB957FA4DADCBF52E7240DC793CB4E4BA1C4-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5091E4A2C0C379CD50F18ABB5B81E527DDF83808 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5091E4A2C0C379CD50F18ABB5B81E527DDF83808 new file mode 100644 index 0000000..6aa7f64 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/5091E4A2C0C379CD50F18ABB5B81E527DDF83808 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/51C32EA417CADD0A6D3F09F9E066A0F8A007AF76 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/51C32EA417CADD0A6D3F09F9E066A0F8A007AF76 new file mode 100644 index 0000000..18f7f80 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/51C32EA417CADD0A6D3F09F9E066A0F8A007AF76 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/51C32EA417CADD0A6D3F09F9E066A0F8A007AF76-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/51C32EA417CADD0A6D3F09F9E066A0F8A007AF76-blob new file mode 100644 index 0000000..f391101 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/51C32EA417CADD0A6D3F09F9E066A0F8A007AF76-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/52D4D2609E596CD88E3AD216E05759C479D14533 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/52D4D2609E596CD88E3AD216E05759C479D14533 new file mode 100644 index 0000000..186825a Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/52D4D2609E596CD88E3AD216E05759C479D14533 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/52D4D2609E596CD88E3AD216E05759C479D14533-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/52D4D2609E596CD88E3AD216E05759C479D14533-blob new file mode 100644 index 0000000..28a046d --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/52D4D2609E596CD88E3AD216E05759C479D14533-blob @@ -0,0 +1,10 @@ +var requirejs,require,define;!function(global,setTimeout){function commentReplace(a,b){return b||""}function isFunction(a){return"[object Function]"===ostring.call(a)}function isArray(a){return"[object Array]"===ostring.call(a)}function each(a,b){if(a){var c;for(c=0;c-1&&(!a[c]||!b(a[c],c,a));c-=1);}}function hasProp(a,b){return hasOwn.call(a,b)}function getOwn(a,b){return hasProp(a,b)&&a[b]}function eachProp(a,b){var c;for(c in a)if(hasProp(a,c)&&b(a[c],c))break}function mixin(a,b,c,d){return b&&eachProp(b,function(b,e){!c&&hasProp(a,e)||(!d||"object"!=typeof b||!b||isArray(b)||isFunction(b)||b instanceof RegExp?a[e]=b:(a[e]||(a[e]={}),mixin(a[e],b,c,d)))}),a}function bind(a,b){return function(){return b.apply(a,arguments)}}function scripts(){return document.getElementsByTagName("script")}function defaultOnError(a){throw a}function getGlobal(a){if(!a)return a;var b=global;return each(a.split("."),function(a){b=b[a]}),b}function makeError(a,b,c,d){var e=new Error(b+"\nhttp://requirejs.org/docs/errors.html#"+a);return e.requireType=a,e.requireModules=d,c&&(e.originalError=c),e}function newContext(a){function b(a){var b,c;for(b=0;b0&&(a.splice(b-1,2),b-=2)}}function c(a,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q=c&&c.split("/"),r=x.map,s=r&&r["*"];if(a&&(a=a.split("/"),k=a.length-1,x.nodeIdCompat&&jsSuffixRegExp.test(a[k])&&(a[k]=a[k].replace(jsSuffixRegExp,"")),"."===a[0].charAt(0)&&q&&(p=q.slice(0,q.length-1),a=p.concat(a)),b(a),a=a.join("/")),d&&r&&(q||s)){g=a.split("/");a:for(h=g.length;h>0;h-=1){if(j=g.slice(0,h).join("/"),q)for(i=q.length;i>0;i-=1)if(f=getOwn(r,q.slice(0,i).join("/")),f&&(f=getOwn(f,j))){l=f,m=h;break a}!n&&s&&getOwn(s,j)&&(n=getOwn(s,j),o=h)}!l&&n&&(l=n,m=o),l&&(g.splice(0,m,l),a=g.join("/"))}return e=getOwn(x.pkgs,a),e?e:a}function d(a){isBrowser&&each(scripts(),function(b){if(b.getAttribute("data-requiremodule")===a&&b.getAttribute("data-requirecontext")===u.contextName)return b.parentNode.removeChild(b),!0})}function e(a){var b=getOwn(x.paths,a);if(b&&isArray(b)&&b.length>1)return b.shift(),u.require.undef(a),u.makeRequire(null,{skipMap:!0})([a]),!0}function f(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function g(a,b,d,e){var g,h,i,j,k=null,l=b?b.name:null,m=a,n=!0,o="";return a||(n=!1,a="_@r"+(F+=1)),j=f(a),k=j[0],a=j[1],k&&(k=c(k,l,e),h=getOwn(C,k)),a&&(k?o=d?a:h&&h.normalize?h.normalize(a,function(a){return c(a,l,e)}):a.indexOf("!")===-1?c(a,l,e):a:(o=c(a,l,e),j=f(o),k=j[0],o=j[1],d=!0,g=u.nameToUrl(o))),i=!k||h||d?"":"_unnormalized"+(G+=1),{prefix:k,name:o,parentMap:b,unnormalized:!!i,url:g,originalName:m,isDefine:n,id:(k?k+"!"+o:o)+i}}function h(a){var b=a.id,c=getOwn(y,b);return c||(c=y[b]=new u.Module(a)),c}function i(a,b,c){var d=a.id,e=getOwn(y,d);!hasProp(C,d)||e&&!e.defineEmitComplete?(e=h(a),e.error&&"error"===b?c(e.error):e.on(b,c)):"defined"===b&&c(C[d])}function j(a,b){var c=a.requireModules,d=!1;b?b(a):(each(c,function(b){var c=getOwn(y,b);c&&(c.error=a,c.events.error&&(d=!0,c.emit("error",a)))}),d||req.onError(a))}function k(){globalDefQueue.length&&(each(globalDefQueue,function(a){var b=a[0];"string"==typeof b&&(u.defQueueMap[b]=!0),B.push(a)}),globalDefQueue=[])}function l(a){delete y[a],delete z[a]}function m(a,b,c){var d=a.map.id;a.error?a.emit("error",a.error):(b[d]=!0,each(a.depMaps,function(d,e){var f=d.id,g=getOwn(y,f);!g||a.depMatched[e]||c[f]||(getOwn(b,f)?(a.defineDep(e,C[f]),a.check()):m(g,b,c))}),c[d]=!0)}function n(){var a,b,c=1e3*x.waitSeconds,f=c&&u.startTime+c<(new Date).getTime(),g=[],h=[],i=!1,k=!0;if(!s){if(s=!0,eachProp(z,function(a){var c=a.map,j=c.id;if(a.enabled&&(c.isDefine||h.push(a),!a.error))if(!a.inited&&f)e(j)?(b=!0,i=!0):(g.push(j),d(j));else if(!a.inited&&a.fetched&&c.isDefine&&(i=!0,!c.prefix))return k=!1}),f&&g.length)return a=makeError("timeout","Load timeout for modules: "+g,null,g),a.contextName=u.contextName,j(a);k&&each(h,function(a){m(a,{},{})}),f&&!b||!i||!isBrowser&&!isWebWorker||w||(w=setTimeout(function(){w=0,n()},50)),s=!1}}function o(a){hasProp(C,a[0])||h(g(a[0],null,!0)).init(a[1],a[2])}function p(a,b,c,d){a.detachEvent&&!isOpera?d&&a.detachEvent(d,b):a.removeEventListener(c,b,!1)}function q(a){var b=a.currentTarget||a.srcElement;return p(b,u.onScriptLoad,"load","onreadystatechange"),p(b,u.onScriptError,"error"),{node:b,id:b&&b.getAttribute("data-requiremodule")}}function r(){var a;for(k();B.length;){if(a=B.shift(),null===a[0])return j(makeError("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));o(a)}u.defQueueMap={}}var s,t,u,v,w,x={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},y={},z={},A={},B=[],C={},D={},E={},F=1,G=1;return v={require:function(a){return a.require?a.require:a.require=u.makeRequire(a.map)},exports:function(a){if(a.usingExports=!0,a.map.isDefine)return a.exports?C[a.map.id]=a.exports:a.exports=C[a.map.id]={}},module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return getOwn(x.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}},t=function(a){this.events=getOwn(A,a.id)||{},this.map=a,this.shim=getOwn(x.shim,a.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0},t.prototype={init:function(a,b,c,d){d=d||{},this.inited||(this.factory=b,c?this.on("error",c):this.events.error&&(c=bind(this,function(a){this.emit("error",a)})),this.depMaps=a&&a.slice(0),this.errback=c,this.inited=!0,this.ignore=d.ignore,d.enabled||this.enabled?this.enable():this.check())},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0,u.startTime=(new Date).getTime();var a=this.map;return this.shim?void u.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return a.prefix?this.callPlugin():this.load()})):a.prefix?this.callPlugin():this.load()}},load:function(){var a=this.map.url;D[a]||(D[a]=!0,u.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id,d=this.depExports,e=this.exports,f=this.factory;if(this.inited){if(this.error)this.emit("error",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(f)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{e=u.execCb(c,f,d,e)}catch(g){a=g}else e=u.execCb(c,f,d,e);if(this.map.isDefine&&void 0===e&&(b=this.module,b?e=b.exports:this.usingExports&&(e=this.exports)),a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",j(this.error=a)}else e=f;if(this.exports=e,this.map.isDefine&&!this.ignore&&(C[c]=e,req.onResourceLoad)){var h=[];each(this.depMaps,function(a){h.push(a.normalizedMap||a)}),req.onResourceLoad(u,this.map,h)}l(c),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else hasProp(u.defQueueMap,c)||this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=g(a.prefix);this.depMaps.push(d),i(d,"defined",bind(this,function(d){var e,f,k,m=getOwn(E,this.map.id),n=this.map.name,o=this.map.parentMap?this.map.parentMap.name:null,p=u.makeRequire(a.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(d.normalize&&(n=d.normalize(n,function(a){return c(a,o,!0)})||""),f=g(a.prefix+"!"+n,this.map.parentMap,!0),i(f,"defined",bind(this,function(a){this.map.normalizedMap=f,this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),k=getOwn(y,f.id),void(k&&(this.depMaps.push(f),this.events.error&&k.on("error",bind(this,function(a){this.emit("error",a)})),k.enable()))):m?(this.map.url=u.nameToUrl(m),void this.load()):(e=bind(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),e.error=bind(this,function(a){this.inited=!0,this.error=a,a.requireModules=[b],eachProp(y,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&l(a.map.id)}),j(a)}),e.fromText=bind(this,function(c,d){var f=a.name,i=g(f),k=useInteractive;d&&(c=d),k&&(useInteractive=!1),h(i),hasProp(x.config,b)&&(x.config[f]=x.config[b]);try{req.exec(c)}catch(l){return j(makeError("fromtexteval","fromText eval for "+b+" failed: "+l,l,[b]))}k&&(useInteractive=!0),this.depMaps.push(i),u.completeLoad(f),p([f],e)}),void d.load(a.name,p,e,x))})),u.enable(d,this),this.pluginMaps[d.id]=d},enable:function(){z[this.map.id]=this,this.enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(a,b){var c,d,e;if("string"==typeof a){if(a=g(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[b]=a,e=getOwn(v,a.id))return void(this.depExports[b]=e(this));this.depCount+=1,i(a,"defined",bind(this,function(a){this.undefed||(this.defineDep(b,a),this.check())})),this.errback?i(a,"error",bind(this,this.errback)):this.events.error&&i(a,"error",bind(this,function(a){this.emit("error",a)}))}c=a.id,d=y[c],hasProp(v,c)||!d||d.enabled||u.enable(a,this)})),eachProp(this.pluginMaps,bind(this,function(a){var b=getOwn(y,a.id);b&&!b.enabled&&u.enable(a,this)})),this.enabling=!1,this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]),c.push(b)},emit:function(a,b){each(this.events[a],function(a){a(b)}),"error"===a&&delete this.events[a]}},u={config:x,contextName:a,registry:y,defined:C,urlFetched:D,defQueue:B,defQueueMap:{},Module:t,makeModuleMap:g,nextTick:req.nextTick,onError:j,configure:function(a){if(a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/"),"string"==typeof a.urlArgs){var b=a.urlArgs;a.urlArgs=function(a,c){return(c.indexOf("?")===-1?"?":"&")+b}}var c=x.shim,d={paths:!0,bundles:!0,config:!0,map:!0};eachProp(a,function(a,b){d[b]?(x[b]||(x[b]={}),mixin(x[b],a,!0,!0)):x[b]=a}),a.bundles&&eachProp(a.bundles,function(a,b){each(a,function(a){a!==b&&(E[a]=b)})}),a.shim&&(eachProp(a.shim,function(a,b){isArray(a)&&(a={deps:a}),!a.exports&&!a.init||a.exportsFn||(a.exportsFn=u.makeShimExports(a)),c[b]=a}),x.shim=c),a.packages&&each(a.packages,function(a){var b,c;a="string"==typeof a?{name:a}:a,c=a.name,b=a.location,b&&(x.paths[c]=a.location),x.pkgs[c]=a.name+"/"+(a.main||"main").replace(currDirRegExp,"").replace(jsSuffixRegExp,"")}),eachProp(y,function(a,b){a.inited||a.map.unnormalized||(a.map=g(b,null,!0))}),(a.deps||a.callback)&&u.require(a.deps||[],a.callback)},makeShimExports:function(a){function b(){var b;return a.init&&(b=a.init.apply(global,arguments)),b||a.exports&&getGlobal(a.exports)}return b},makeRequire:function(b,e){function f(c,d,i){var k,l,m;return e.enableBuildCallback&&d&&isFunction(d)&&(d.__requireJsBuild=!0),"string"==typeof c?isFunction(d)?j(makeError("requireargs","Invalid require call"),i):b&&hasProp(v,c)?v[c](y[b.id]):req.get?req.get(u,c,b,f):(l=g(c,b,!1,!0),k=l.id,hasProp(C,k)?C[k]:j(makeError("notloaded",'Module name "'+k+'" has not been loaded yet for context: '+a+(b?"":". Use require([])")))):(r(),u.nextTick(function(){r(),m=h(g(null,b)),m.skipMap=e.skipMap,m.init(c,d,i,{enabled:!0}),n()}),f)}return e=e||{},mixin(f,{isBrowser:isBrowser,toUrl:function(a){var d,e=a.lastIndexOf("."),f=a.split("/")[0],g="."===f||".."===f;return e!==-1&&(!g||e>1)&&(d=a.substring(e,a.length),a=a.substring(0,e)),u.nameToUrl(c(a,b&&b.id,!0),d,!0)},defined:function(a){return hasProp(C,g(a,b,!1,!0).id)},specified:function(a){return a=g(a,b,!1,!0).id,hasProp(C,a)||hasProp(y,a)}}),b||(f.undef=function(a){k();var c=g(a,b,!0),e=getOwn(y,a);e.undefed=!0,d(a),delete C[a],delete D[c.url],delete A[a],eachReverse(B,function(b,c){b[0]===a&&B.splice(c,1)}),delete u.defQueueMap[a],e&&(e.events.defined&&(A[a]=e.events),l(a))}),f},enable:function(a){var b=getOwn(y,a.id);b&&h(a).enable()},completeLoad:function(a){var b,c,d,f=getOwn(x.shim,a)||{},g=f.exports;for(k();B.length;){if(c=B.shift(),null===c[0]){if(c[0]=a,b)break;b=!0}else c[0]===a&&(b=!0);o(c)}if(u.defQueueMap={},d=getOwn(y,a),!b&&!hasProp(C,a)&&d&&!d.inited){if(!(!x.enforceDefine||g&&getGlobal(g)))return e(a)?void 0:j(makeError("nodefine","No define call for "+a,null,[a]));o([a,f.deps||[],f.exportsFn])}n()},nameToUrl:function(a,b,c){var d,e,f,g,h,i,j,k=getOwn(x.pkgs,a);if(k&&(a=k),j=getOwn(E,a))return u.nameToUrl(j,b,c);if(req.jsExtRegExp.test(a))h=a+(b||"");else{for(d=x.paths,e=a.split("/"),f=e.length;f>0;f-=1)if(g=e.slice(0,f).join("/"),i=getOwn(d,g)){isArray(i)&&(i=i[0]),e.splice(0,f,i);break}h=e.join("/"),h+=b||(/^data\:|^blob\:|\?/.test(h)||c?"":".js"),h=("/"===h.charAt(0)||h.match(/^[\w\+\.\-]+:/)?"":x.baseUrl)+h}return x.urlArgs&&!/^blob\:/.test(h)?h+x.urlArgs(a,h):h},load:function(a,b){req.load(u,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||readyRegExp.test((a.currentTarget||a.srcElement).readyState)){interactiveScript=null;var b=q(a);u.completeLoad(b.id)}},onScriptError:function(a){var b=q(a);if(!e(b.id)){var c=[];return eachProp(y,function(a,d){0!==d.indexOf("_@r")&&each(a.depMaps,function(a){if(a.id===b.id)return c.push(d),!0})}),j(makeError("scripterror",'Script error for "'+b.id+(c.length?'", needed by: '+c.join(", "):'"'),a,[b.id]))}}},u.require=u.makeRequire(),u}function getInteractiveScript(){return interactiveScript&&"interactive"===interactiveScript.readyState?interactiveScript:(eachReverse(scripts(),function(a){if("interactive"===a.readyState)return interactiveScript=a}),interactiveScript)}var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version="2.3.3",commentRegExp=/\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/gm,cjsRequireRegExp=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,jsSuffixRegExp=/\.js$/,currDirRegExp=/^\.\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!("undefined"==typeof window||"undefined"==typeof navigator||!window.document),isWebWorker=!isBrowser&&"undefined"!=typeof importScripts,readyRegExp=isBrowser&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;if("undefined"==typeof define){if("undefined"!=typeof requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}"undefined"==typeof require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(a,b,c,d){var e,f,g=defContextName;return isArray(a)||"string"==typeof a||(f=a,isArray(b)?(a=b,b=c,c=d):a=[]),f&&f.context&&(g=f.context),e=getOwn(contexts,g),e||(e=contexts[g]=req.s.newContext(g)),f&&e.configure(f),e.require(a,b,c)},req.config=function(a){return req(a)},req.nextTick="undefined"!=typeof setTimeout?function(a){setTimeout(a,4)}:function(a){a()},require||(require=req),req.version=version,req.jsExtRegExp=/^\/|:|\?|\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each(["toUrl","undef","defined","specified"],function(a){req[a]=function(){var b=contexts[defContextName];return b.require[a].apply(b,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName("head")[0],baseElement=document.getElementsByTagName("base")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(a,b,c){var d=a.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");return d.type=a.scriptType||"text/javascript",d.charset="utf-8",d.async=!0,d},req.load=function(a,b,c){var d,e=a&&a.config||{};if(isBrowser)return d=req.createNode(e,b,c),d.setAttribute("data-requirecontext",a.contextName),d.setAttribute("data-requiremodule",b),!d.attachEvent||d.attachEvent.toString&&d.attachEvent.toString().indexOf("[native code")<0||isOpera?(d.addEventListener("load",a.onScriptLoad,!1),d.addEventListener("error",a.onScriptError,!1)):(useInteractive=!0,d.attachEvent("onreadystatechange",a.onScriptLoad)),d.src=c,e.onNodeCreated&&e.onNodeCreated(d,e,b,c),currentlyAddingScript=d,baseElement?head.insertBefore(d,baseElement):head.appendChild(d),currentlyAddingScript=null,d;if(isWebWorker)try{setTimeout(function(){},0),importScripts(c),a.completeLoad(b)}catch(f){a.onError(makeError("importscripts","importScripts failed for "+b+" at "+c,f,[b]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(a){if(head||(head=a.parentNode),dataMain=a.getAttribute("data-main"))return mainScript=dataMain,cfg.baseUrl||mainScript.indexOf("!")!==-1||(src=mainScript.split("/"),mainScript=src.pop(),subPath=src.length?src.join("/")+"/":"./",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,""),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(a,b,c){var d,e;"string"!=typeof a&&(c=b,b=a,a=null),isArray(b)||(c=b,b=null),!b&&isFunction(c)&&(b=[],c.length&&(c.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(a,c){b.push(c)}),b=(1===c.length?["require"]:["require","exports","module"]).concat(b))),useInteractive&&(d=currentlyAddingScript||getInteractiveScript(),d&&(a||(a=d.getAttribute("data-requiremodule")),e=contexts[d.getAttribute("data-requirecontext")])),e?(e.defQueue.push([a,b,c]),e.defQueueMap[a]=!0):globalDefQueue.push([a,b,c])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}}(this,"undefined"==typeof setTimeout?void 0:setTimeout),define("../../../node_modules/requirejs/require",function(){}),function(a,b,c){b[a]=b[a]||c(),"undefined"!=typeof module&&module.exports?module.exports=b[a]:"function"==typeof define&&define.amd&&define("native-promise-only",[],function(){return b[a]})}("Promise","undefined"!=typeof global?global:this,function(){"use strict";function a(a,b){m.add(a,b),l||(l=o(m.drain))}function b(a){var b,c=typeof a;return null==a||"object"!=c&&"function"!=c||(b=a.then),"function"==typeof b&&b}function c(){for(var a=0;a0&&a(c,i))}catch(j){f.call(new h(i),j)}}}function f(b){var d=this;d.triggered||(d.triggered=!0,d.def&&(d=d.def),d.msg=b,d.state=2,d.chain.length>0&&a(c,d))}function g(a,b,c,d){for(var e=0;e0&&b-1 in a)}function d(a,b,c){if(fa.isFunction(b))return fa.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return fa.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(pa.test(b))return fa.filter(b,a,c);b=fa.filter(b,a)}return fa.grep(a,function(a){return _.call(b,a)>-1!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b={};return fa.each(a.match(va)||[],function(a,c){b[c]=!0}),b}function g(){X.removeEventListener("DOMContentLoaded",g),a.removeEventListener("load",g),fa.ready()}function h(){this.expando=fa.expando+h.uid++}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Ca,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:Ba.test(c)?fa.parseJSON(c):c)}catch(e){}Aa.set(a,b,c)}else c=void 0;return c}function j(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return fa.css(a,b,"")},i=h(),j=c&&c[3]||(fa.cssNumber[b]?"":"px"),k=(fa.cssNumber[b]||"px"!==j&&+i)&&Ea.exec(fa.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,fa.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}function k(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&fa.nodeName(a,b)?fa.merge([a],c):c}function l(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=fa.contains(f.ownerDocument,f),g=k(n.appendChild(f),"script"),j&&l(g),c)for(m=0;f=g[m++];)Ja.test(f.type||"")&&c.push(f);return n}function n(){return!0}function o(){return!1}function p(){try{return X.activeElement}catch(a){}}function q(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)q(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=o;else if(!e)return a;return 1===f&&(g=e,e=function(a){return fa().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=fa.guid++)),a.each(function(){fa.event.add(this,b,e,d,c)})}function r(a,b){return fa.nodeName(a,"table")&&fa.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function s(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function t(a){var b=Sa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function u(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(za.hasData(a)&&(f=za.access(a),g=za.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof p&&!da.checkClone&&Ra.test(p))return a.each(function(e){var f=a.eq(e);q&&(b[0]=p.call(this,e,f.html())),w(f,b,c,d)});if(n&&(e=m(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(g=fa.map(k(e,"script"),s),h=g.length;l")).appendTo(b.documentElement),b=Ua[0].contentDocument,b.write(),b.close(),c=y(a,b),Ua.detach()),Va[a]=c),c}function A(a,b,c){var d,e,f,g,h=a.style;return c=c||Ya(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||fa.contains(a.ownerDocument,a)||(g=fa.style(a,b)),c&&!da.pixelMarginRight()&&Xa.test(g)&&Wa.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0!==g?g+"":g}function B(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}function C(a){if(a in db)return a;for(var b=a[0].toUpperCase()+a.slice(1),c=cb.length;c--;)if(a=cb[c]+b,a in db)return a}function D(a,b,c){var d=Ea.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function E(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;f<4;f+=2)"margin"===c&&(g+=fa.css(a,c+Fa[f],!0,e)),d?("content"===c&&(g-=fa.css(a,"padding"+Fa[f],!0,e)),"margin"!==c&&(g-=fa.css(a,"border"+Fa[f]+"Width",!0,e))):(g+=fa.css(a,"padding"+Fa[f],!0,e),"padding"!==c&&(g+=fa.css(a,"border"+Fa[f]+"Width",!0,e)));return g}function F(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ya(a),g="border-box"===fa.css(a,"boxSizing",!1,f);if(e<=0||null==e){if(e=A(a,b,f),(e<0||null==e)&&(e=a.style[b]),Xa.test(e))return e;d=g&&(da.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+E(a,b,c||(g?"border":"content"),d,f)+"px"}function G(a,b){for(var c,d,e,f=[],g=0,h=a.length;g=0&&c=0},isPlainObject:function(a){var b;if("object"!==fa.type(a)||a.nodeType||fa.isWindow(a))return!1;if(a.constructor&&!ca.call(a,"constructor")&&!ca.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||ca.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?aa[ba.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=fa.trim(a),a&&(1===a.indexOf("use strict")?(b=X.createElement("script"),b.text=a,X.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(ha,"ms-").replace(ia,ja)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var d,e=0;if(c(a))for(d=a.length;ew.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function d(a){return a[N]=!0,a}function e(a){var b=G.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function f(a,b){for(var c=a.split("|"),d=c.length;d--;)w.attrHandle[c[d]]=b}function g(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||V)-(~a.sourceIndex||V);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function h(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function i(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function j(a){return d(function(b){return b=+b,d(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function k(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}function l(){}function m(a){for(var b=0,c=a.length,d="";b1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function p(a,c,d){for(var e=0,f=c.length;e-1&&(d[j]=!(g[j]=l))}}else t=q(t===g?t.splice(o,t.length):t),f?f(null,g,t,i):$.apply(g,t)})}function s(a){for(var b,c,d,e=a.length,f=w.relative[a[0].type],g=f||w.relative[" "],h=f?1:0,i=n(function(a){return a===b},g,!0),j=n(function(a){return aa(b,a)>-1},g,!0),k=[function(a,c,d){var e=!f&&(d||c!==C)||((b=c).nodeType?i(a,c,d):j(a,c,d));return b=null,e}];h1&&o(k),h>1&&m(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ha,"$1"),c,h0,f=a.length>0,g=function(d,g,h,i,j){var k,l,m,n=0,o="0",p=d&&[],r=[],s=C,t=d||f&&w.find.TAG("*",j),u=P+=null==s?1:Math.random()||.1,v=t.length;for(j&&(C=g===G||g||j);o!==v&&null!=(k=t[o]);o++){if(f&&k){for(l=0,g||k.ownerDocument===G||(F(k),h=!I);m=a[l++];)if(m(k,g||G,h)){i.push(k);break}j&&(P=u)}e&&((k=!m&&k)&&n--,d&&p.push(k))}if(n+=o,e&&o!==n){for(l=0;m=c[l++];)m(p,r,g,h);if(d){if(n>0)for(;o--;)p[o]||r[o]||(r[o]=Y.call(i));r=q(r)}$.apply(i,r),j&&!d&&r.length>0&&n+c.length>1&&b.uniqueSort(i)}return j&&(P=u,C=s),p};return e?d(g):g}var u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N="sizzle"+1*new Date,O=a.document,P=0,Q=0,R=c(),S=c(),T=c(),U=function(a,b){return a===b&&(E=!0),0},V=1<<31,W={}.hasOwnProperty,X=[],Y=X.pop,Z=X.push,$=X.push,_=X.slice,aa=function(a,b){for(var c=0,d=a.length;c+~]|"+ca+")"+ca+"*"),ka=new RegExp("="+ca+"*([^\\]'\"]*?)"+ca+"*\\]","g"),la=new RegExp(fa),ma=new RegExp("^"+da+"$"),na={ID:new RegExp("^#("+da+")"),CLASS:new RegExp("^\\.("+da+")"),TAG:new RegExp("^("+da+"|[*])"),ATTR:new RegExp("^"+ea),PSEUDO:new RegExp("^"+fa),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ca+"*(even|odd|(([+-]|)(\\d*)n|)"+ca+"*(?:([+-]|)"+ca+"*(\\d+)|))"+ca+"*\\)|)","i"),bool:new RegExp("^(?:"+ba+")$","i"),needsContext:new RegExp("^"+ca+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ca+"*((?:-\\d)?\\d*)"+ca+"*\\)|)(?=[^-]|$)","i")},oa=/^(?:input|select|textarea|button)$/i,pa=/^h\d$/i,qa=/^[^{]+\{\s*\[native \w/,ra=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,sa=/[+~]/,ta=/'|\\/g,ua=new RegExp("\\\\([\\da-f]{1,6}"+ca+"?|("+ca+")|.)","ig"),va=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},wa=function(){F()};try{$.apply(X=_.call(O.childNodes),O.childNodes),X[O.childNodes.length].nodeType}catch(xa){$={apply:X.length?function(a,b){Z.apply(a,_.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}v=b.support={},y=b.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},F=b.setDocument=function(a){var b,c,d=a?a.ownerDocument||a:O;return d!==G&&9===d.nodeType&&d.documentElement?(G=d,H=G.documentElement,I=!y(G),(c=G.defaultView)&&c.top!==c&&(c.addEventListener?c.addEventListener("unload",wa,!1):c.attachEvent&&c.attachEvent("onunload",wa)),v.attributes=e(function(a){return a.className="i",!a.getAttribute("className")}),v.getElementsByTagName=e(function(a){return a.appendChild(G.createComment("")),!a.getElementsByTagName("*").length}),v.getElementsByClassName=qa.test(G.getElementsByClassName),v.getById=e(function(a){return H.appendChild(a).id=N,!G.getElementsByName||!G.getElementsByName(N).length}),v.getById?(w.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&I){var c=b.getElementById(a);return c?[c]:[]}},w.filter.ID=function(a){var b=a.replace(ua,va);return function(a){return a.getAttribute("id")===b}}):(delete w.find.ID,w.filter.ID=function(a){var b=a.replace(ua,va);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),w.find.TAG=v.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):v.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},w.find.CLASS=v.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&I)return b.getElementsByClassName(a)},K=[],J=[],(v.qsa=qa.test(G.querySelectorAll))&&(e(function(a){H.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&J.push("[*^$]="+ca+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||J.push("\\["+ca+"*(?:value|"+ba+")"),a.querySelectorAll("[id~="+N+"-]").length||J.push("~="),a.querySelectorAll(":checked").length||J.push(":checked"),a.querySelectorAll("a#"+N+"+*").length||J.push(".#.+[+~]")}),e(function(a){var b=G.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&J.push("name"+ca+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||J.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),J.push(",.*:")})),(v.matchesSelector=qa.test(L=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&e(function(a){v.disconnectedMatch=L.call(a,"div"),L.call(a,"[s!='']:x"),K.push("!=",fa)}),J=J.length&&new RegExp(J.join("|")),K=K.length&&new RegExp(K.join("|")),b=qa.test(H.compareDocumentPosition),M=b||qa.test(H.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},U=b?function(a,b){if(a===b)return E=!0,0;var c=!a.compareDocumentPosition-!b.compareDocumentPosition;return c?c:(c=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&c||!v.sortDetached&&b.compareDocumentPosition(a)===c?a===G||a.ownerDocument===O&&M(O,a)?-1:b===G||b.ownerDocument===O&&M(O,b)?1:D?aa(D,a)-aa(D,b):0:4&c?-1:1)}:function(a,b){if(a===b)return E=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===G?-1:b===G?1:e?-1:f?1:D?aa(D,a)-aa(D,b):0;if(e===f)return g(a,b);for(c=a;c=c.parentNode;)h.unshift(c);for(c=b;c=c.parentNode;)i.unshift(c);for(;h[d]===i[d];)d++;return d?g(h[d],i[d]):h[d]===O?-1:i[d]===O?1:0},G):G},b.matches=function(a,c){return b(a,null,null,c)},b.matchesSelector=function(a,c){if((a.ownerDocument||a)!==G&&F(a),c=c.replace(ka,"='$1']"),v.matchesSelector&&I&&!T[c+" "]&&(!K||!K.test(c))&&(!J||!J.test(c)))try{var d=L.call(a,c);if(d||v.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return b(c,G,null,[a]).length>0},b.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},b.attr=function(a,b){(a.ownerDocument||a)!==G&&F(a);var c=w.attrHandle[b.toLowerCase()],d=c&&W.call(w.attrHandle,b.toLowerCase())?c(a,b,!I):void 0;return void 0!==d?d:v.attributes||!I?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},b.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},b.uniqueSort=function(a){var b,c=[],d=0,e=0;if(E=!v.detectDuplicates,D=!v.sortStable&&a.slice(0),a.sort(U),E){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return D=null,a},x=b.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=x(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=x(b);return c},w=b.selectors={cacheLength:50,createPseudo:d,match:na,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ua,va),a[3]=(a[3]||a[4]||a[5]||"").replace(ua,va),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||b.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&b.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return na.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&la.test(c)&&(b=z(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ua,va).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+" "];return b||(b=new RegExp("(^|"+ca+")"+a+"("+ca+"|$)"))&&R(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,c,d){return function(e){var f=b.attr(e,a);return null==f?"!="===c:!c||(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f.replace(ga," ")+" ").indexOf(d)>-1:"|="===c&&(f===d||f.slice(0,d.length+1)===d+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){for(;p;){for(m=b;m=m[p];)if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(m=q,l=m[N]||(m[N]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===P&&j[1],t=n&&j[2],m=n&&q.childNodes[n];m=++n&&m&&m[p]||(t=n=0)||o.pop();)if(1===m.nodeType&&++t&&m===b){k[a]=[P,n,t];break}}else if(s&&(m=b,l=m[N]||(m[N]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===P&&j[1],t=n),t===!1)for(;(m=++n&&m&&m[p]||(t=n=0)||o.pop())&&((h?m.nodeName.toLowerCase()!==r:1!==m.nodeType)||!++t||(s&&(l=m[N]||(m[N]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[P,t]),m!==b)););return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,c){var e,f=w.pseudos[a]||w.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return f[N]?f(c):f.length>1?(e=[a,a,"",c],w.setFilters.hasOwnProperty(a.toLowerCase())?d(function(a,b){for(var d,e=f(a,c),g=e.length;g--;)d=aa(a,e[g]),a[d]=!(b[d]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:d(function(a){var b=[],c=[],e=A(a.replace(ha,"$1"));return e[N]?d(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,d,f){return b[0]=a,e(b,null,f,c),b[0]=null,!c.pop()}}),has:d(function(a){return function(c){return b(a,c).length>0}}),contains:d(function(a){return a=a.replace(ua,va),function(b){return(b.textContent||b.innerText||x(b)).indexOf(a)>-1}}),lang:d(function(a){return ma.test(a||"")||b.error("unsupported lang: "+a),a=a.replace(ua,va).toLowerCase(),function(b){var c;do if(c=I?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!w.pseudos.empty(a)},header:function(a){return pa.test(a.nodeName)},input:function(a){return oa.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:j(function(){return[0]}),last:j(function(a,b){return[b-1]}),eq:j(function(a,b,c){return[c<0?c+b:c]}),even:j(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:j(function(a,b,c){for(var d=c<0?c+b:c;++d2&&"ID"===(g=f[0]).type&&v.getById&&9===b.nodeType&&I&&w.relative[f[1].type]){if(b=(w.find.ID(g.matches[0].replace(ua,va),b)||[])[0],!b)return c;j&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=na.needsContext.test(a)?0:f.length;e--&&(g=f[e],!w.relative[h=g.type]);)if((i=w.find[h])&&(d=i(g.matches[0].replace(ua,va),sa.test(f[0].type)&&k(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&m(f),!a)return $.apply(c,d),c;break}}return(j||A(a,l))(d,b,!I,c,!b||sa.test(a)&&k(b.parentNode)||b),c},v.sortStable=N.split("").sort(U).join("")===N,v.detectDuplicates=!!E,F(),v.sortDetached=e(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),e(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||f("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),v.attributes&&e(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||f("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),e(function(a){return null==a.getAttribute("disabled")})||f(ba,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),b}(a);fa.find=ka,fa.expr=ka.selectors,fa.expr[":"]=fa.expr.pseudos,fa.uniqueSort=fa.unique=ka.uniqueSort,fa.text=ka.getText,fa.isXMLDoc=ka.isXML,fa.contains=ka.contains;var la=function(a,b,c){for(var d=[],e=void 0!==c;(a=a[b])&&9!==a.nodeType;)if(1===a.nodeType){if(e&&fa(a).is(c))break;d.push(a)}return d},ma=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},na=fa.expr.match.needsContext,oa=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,pa=/^.[^:#\[\.,]*$/;fa.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?fa.find.matchesSelector(d,a)?[d]:[]:fa.find.matches(a,fa.grep(b,function(a){return 1===a.nodeType}))},fa.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(fa(a).filter(function(){for(b=0;b1?fa.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(d(this,a||[],!1))},not:function(a){return this.pushStack(d(this,a||[],!0))},is:function(a){return!!d(this,"string"==typeof a&&na.test(a)?fa(a):a||[],!1).length}});var qa,ra=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,sa=fa.fn.init=function(a,b,c){var d,e;if(!a)return this;if(c=c||qa,"string"==typeof a){if(d="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:ra.exec(a),!d||!d[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(d[1]){if(b=b instanceof fa?b[0]:b,fa.merge(this,fa.parseHTML(d[1],b&&b.nodeType?b.ownerDocument||b:X,!0)),oa.test(d[1])&&fa.isPlainObject(b))for(d in b)fa.isFunction(this[d])?this[d](b[d]):this.attr(d,b[d]);return this}return e=X.getElementById(d[2]),e&&e.parentNode&&(this.length=1,this[0]=e),this.context=X,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):fa.isFunction(a)?void 0!==c.ready?c.ready(a):a(fa):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),fa.makeArray(a,this))};sa.prototype=fa.fn,qa=fa(X);var ta=/^(?:parents|prev(?:Until|All))/,ua={children:!0,contents:!0,next:!0,prev:!0};fa.fn.extend({has:function(a){var b=fa(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&fa.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?fa.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?_.call(fa(a),this[0]):_.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(fa.uniqueSort(fa.merge(this.get(),fa(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),fa.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return la(a,"parentNode")},parentsUntil:function(a,b,c){return la(a,"parentNode",c)},next:function(a){return e(a,"nextSibling")},prev:function(a){return e(a,"previousSibling")},nextAll:function(a){return la(a,"nextSibling")},prevAll:function(a){return la(a,"previousSibling")},nextUntil:function(a,b,c){return la(a,"nextSibling",c)},prevUntil:function(a,b,c){return la(a,"previousSibling",c)},siblings:function(a){return ma((a.parentNode||{}).firstChild,a)},children:function(a){return ma(a.firstChild)},contents:function(a){return a.contentDocument||fa.merge([],a.childNodes)}},function(a,b){fa.fn[a]=function(c,d){var e=fa.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=fa.filter(d,e)),this.length>1&&(ua[a]||fa.uniqueSort(e),ta.test(a)&&e.reverse()),this.pushStack(e)}});var va=/\S+/g;fa.Callbacks=function(a){a="string"==typeof a?f(a):fa.extend({},a);var b,c,d,e,g=[],h=[],i=-1,j=function(){for(e=a.once,d=b=!0;h.length;i=-1)for(c=h.shift();++i-1;)g.splice(c,1),c<=i&&i--}),this},has:function(a){return a?fa.inArray(a,g)>-1:g.length>0},empty:function(){return g&&(g=[]),this},disable:function(){return e=h=[],g=c="",this},disabled:function(){return!g},lock:function(){return e=h=[],c||(g=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],h.push(c),b||j()),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},fa.extend({Deferred:function(a){var b=[["resolve","done",fa.Callbacks("once memory"),"resolved"],["reject","fail",fa.Callbacks("once memory"),"rejected"],["notify","progress",fa.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return fa.Deferred(function(c){fa.each(b,function(b,f){var g=fa.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&fa.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?fa.extend(a,d):d}},e={};return d.pipe=d.then,fa.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=Y.call(arguments),g=f.length,h=1!==g||a&&fa.isFunction(a.promise)?g:0,i=1===h?a:fa.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?Y.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);e0||(wa.resolveWith(X,[fa]),fa.fn.triggerHandler&&(fa(X).triggerHandler("ready"),fa(X).off("ready"))))}}),fa.ready.promise=function(b){return wa||(wa=fa.Deferred(),"complete"===X.readyState||"loading"!==X.readyState&&!X.documentElement.doScroll?a.setTimeout(fa.ready):(X.addEventListener("DOMContentLoaded",g),a.addEventListener("load",g))),wa.promise(b)},fa.ready.promise();var xa=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===fa.type(c)){e=!0;for(h in c)xa(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,fa.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(fa(a),c)})),b))for(;h-1&&void 0!==c&&Aa.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){Aa.remove(this,a)})}}),fa.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=za.get(a,b),c&&(!d||fa.isArray(c)?d=za.access(a,b,fa.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=fa.queue(a,b),d=c.length,e=c.shift(),f=fa._queueHooks(a,b),g=function(){fa.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return za.get(a,c)||za.access(a,c,{empty:fa.Callbacks("once memory").add(function(){za.remove(a,[b+"queue",c])})})}}),fa.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
                "],col:[2,"","
                "],tr:[2,"","
                "],td:[3,"","
                "],_default:[0,"",""]};Ka.optgroup=Ka.option,Ka.tbody=Ka.tfoot=Ka.colgroup=Ka.caption=Ka.thead,Ka.th=Ka.td;var La=/<|&#?\w+;/;!function(){var a=X.createDocumentFragment(),b=a.appendChild(X.createElement("div")),c=X.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),da.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",da.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var Ma=/^key/,Na=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Oa=/^([^.]*)(?:\.(.+)|)/;fa.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=za.get(a);if(q)for(c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=fa.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof fa&&fa.event.triggered!==b.type?fa.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(va)||[""],j=b.length;j--;)h=Oa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=fa.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=fa.event.special[n]||{},k=fa.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&fa.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),fa.event.global[n]=!0)},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=za.hasData(a)&&za.get(a);if(q&&(i=q.events)){for(b=(b||"").match(va)||[""],j=b.length;j--;)if(h=Oa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=fa.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||fa.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)fa.event.remove(a,n+b[j],c,d,!0);fa.isEmptyObject(i)&&za.remove(a,"handle events")}},dispatch:function(a){a=fa.event.fix(a);var b,c,d,e,f,g=[],h=Y.call(arguments),i=(za.get(this,"events")||{})[a.type]||[],j=fa.event.special[a.type]||{};if(h[0]=a,a.delegateTarget=this,!j.preDispatch||j.preDispatch.call(this,a)!==!1){for(g=fa.event.handlers.call(this,a,i),b=0;(e=g[b++])&&!a.isPropagationStopped();)for(a.currentTarget=e.elem,c=0;(f=e.handlers[c++])&&!a.isImmediatePropagationStopped();)a.rnamespace&&!a.rnamespace.test(f.namespace)||(a.handleObj=f,a.data=f.data,d=((fa.event.special[f.origType]||{}).handle||f.handler).apply(e.elem,h),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return j.postDispatch&&j.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;c-1:fa.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,Qa=/\s*$/g;fa.extend({htmlPrefilter:function(a){return a.replace(Pa,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=fa.contains(a.ownerDocument,a);if(!(da.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||fa.isXMLDoc(a)))for(g=k(h),f=k(a),d=0,e=f.length;d0&&l(g,!i&&k(a,"script")),h},cleanData:function(a){for(var b,c,d,e=fa.event.special,f=0;void 0!==(c=a[f]);f++)if(ya(c)){if(b=c[za.expando]){if(b.events)for(d in b.events)e[d]?fa.event.remove(c,d):fa.removeEvent(c,d,b.handle);c[za.expando]=void 0}c[Aa.expando]&&(c[Aa.expando]=void 0)}}}),fa.fn.extend({domManip:w,detach:function(a){return x(this,a,!0)},remove:function(a){return x(this,a)},text:function(a){return xa(this,function(a){return void 0===a?fa.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return w(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=r(this,a);b.appendChild(a)}})},prepend:function(){return w(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=r(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return w(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return w(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(fa.cleanData(k(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return fa.clone(this,a,b)})},html:function(a){return xa(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Qa.test(a)&&!Ka[(Ia.exec(a)||["",""])[1].toLowerCase()]){a=fa.htmlPrefilter(a);try{for(;c1)},show:function(){return G(this,!0)},hide:function(){return G(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){Ga(this)?fa(this).show():fa(this).hide()})}}),fa.Tween=H,H.prototype={constructor:H,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||fa.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(fa.cssNumber[c]?"":"px")},cur:function(){var a=H.propHooks[this.prop];return a&&a.get?a.get(this):H.propHooks._default.get(this)},run:function(a){var b,c=H.propHooks[this.prop];return this.options.duration?this.pos=b=fa.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):H.propHooks._default.set(this),this}},H.prototype.init.prototype=H.prototype,H.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=fa.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){fa.fx.step[a.prop]?fa.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[fa.cssProps[a.prop]]&&!fa.cssHooks[a.prop]?a.elem[a.prop]=a.now:fa.style(a.elem,a.prop,a.now+a.unit)}}},H.propHooks.scrollTop=H.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},fa.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},fa.fx=H.prototype.init,fa.fx.step={};var eb,fb,gb=/^(?:toggle|show|hide)$/,hb=/queueHooks$/;fa.Animation=fa.extend(N,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return j(c.elem,a,Ea.exec(b),c),c}]},tweener:function(a,b){fa.isFunction(a)?(b=a,a=["*"]):a=a.match(va);for(var c,d=0,e=a.length;d1)},removeAttr:function(a){return this.each(function(){fa.removeAttr(this,a)})}}),fa.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?fa.prop(a,b,c):(1===f&&fa.isXMLDoc(a)||(b=b.toLowerCase(),e=fa.attrHooks[b]||(fa.expr.match.bool.test(b)?ib:void 0)),void 0!==c?null===c?void fa.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=fa.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!da.radioValue&&"radio"===b&&fa.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(va);if(f&&1===a.nodeType)for(;c=f[e++];)d=fa.propFix[c]||c,fa.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)}}),ib={set:function(a,b,c){return b===!1?fa.removeAttr(a,c):a.setAttribute(c,c),c}},fa.each(fa.expr.match.bool.source.match(/\w+/g),function(a,b){var c=jb[b]||fa.find.attr;jb[b]=function(a,b,d){var e,f;return d||(f=jb[b],jb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,jb[b]=f),e}});var kb=/^(?:input|select|textarea|button)$/i,lb=/^(?:a|area)$/i;fa.fn.extend({prop:function(a,b){return xa(this,fa.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[fa.propFix[a]||a]})}}),fa.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&fa.isXMLDoc(a)||(b=fa.propFix[b]||b,e=fa.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=fa.find.attr(a,"tabindex");return b?parseInt(b,10):kb.test(a.nodeName)||lb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),da.optSelected||(fa.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),fa.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){fa.propFix[this.toLowerCase()]=this});var mb=/[\t\r\n\f]/g;fa.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(fa.isFunction(a))return this.each(function(b){fa(this).addClass(a.call(this,b,O(this)))});if("string"==typeof a&&a)for(b=a.match(va)||[];c=this[i++];)if(e=O(c),d=1===c.nodeType&&(" "+e+" ").replace(mb," ")){for(g=0;f=b[g++];)d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=fa.trim(d),e!==h&&c.setAttribute("class",h)}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(fa.isFunction(a))return this.each(function(b){fa(this).removeClass(a.call(this,b,O(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a)for(b=a.match(va)||[];c=this[i++];)if(e=O(c),d=1===c.nodeType&&(" "+e+" ").replace(mb," ")){for(g=0;f=b[g++];)for(;d.indexOf(" "+f+" ")>-1;)d=d.replace(" "+f+" "," ");h=fa.trim(d),e!==h&&c.setAttribute("class",h)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):fa.isFunction(a)?this.each(function(c){fa(this).toggleClass(a.call(this,c,O(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c)for(d=0,e=fa(this),f=a.match(va)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else void 0!==a&&"boolean"!==c||(b=O(this),b&&za.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":za.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;for(b=" "+a+" ";c=this[d++];)if(1===c.nodeType&&(" "+O(c)+" ").replace(mb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;fa.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=fa.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,fa(this).val()):a,null==e?e="":"number"==typeof e?e+="":fa.isArray(e)&&(e=fa.map(e,function(a){return null==a?"":a+""})),b=fa.valHooks[this.type]||fa.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=fa.valHooks[e.type]||fa.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),fa.extend({valHooks:{option:{get:function(a){var b=fa.find.attr(a,"value");return null!=b?b:fa.trim(fa.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||e<0,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),fa.each(["radio","checkbox"],function(){fa.valHooks[this]={set:function(a,b){if(fa.isArray(b))return a.checked=fa.inArray(fa(a).val(),b)>-1}},da.checkOn||(fa.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;fa.extend(fa.event,{trigger:function(b,c,d,e){var f,g,h,i,j,k,l,m=[d||X],n=ca.call(b,"type")?b.type:b,o=ca.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||X,3!==d.nodeType&&8!==d.nodeType&&!pb.test(n+fa.event.triggered)&&(n.indexOf(".")>-1&&(o=n.split("."),n=o.shift(),o.sort()),j=n.indexOf(":")<0&&"on"+n,b=b[fa.expando]?b:new fa.Event(n,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=o.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:fa.makeArray(c,[b]),l=fa.event.special[n]||{},e||!l.trigger||l.trigger.apply(d,c)!==!1)){if(!e&&!l.noBubble&&!fa.isWindow(d)){for(i=l.delegateType||n,pb.test(i+n)||(g=g.parentNode);g;g=g.parentNode)m.push(g),h=g;h===(d.ownerDocument||X)&&m.push(h.defaultView||h.parentWindow||a)}for(f=0;(g=m[f++])&&!b.isPropagationStopped();)b.type=f>1?i:l.bindType||n,k=(za.get(g,"events")||{})[b.type]&&za.get(g,"handle"),k&&k.apply(g,c),k=j&&g[j],k&&k.apply&&ya(g)&&(b.result=k.apply(g,c),b.result===!1&&b.preventDefault());return b.type=n,e||b.isDefaultPrevented()||l._default&&l._default.apply(m.pop(),c)!==!1||!ya(d)||j&&fa.isFunction(d[n])&&!fa.isWindow(d)&&(h=d[j],h&&(d[j]=null),fa.event.triggered=n,d[n](),fa.event.triggered=void 0,h&&(d[j]=h)),b.result}},simulate:function(a,b,c){var d=fa.extend(new fa.Event,c,{type:a,isSimulated:!0});fa.event.trigger(d,null,b)}}),fa.fn.extend({trigger:function(a,b){return this.each(function(){fa.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return fa.event.trigger(a,b,c,!0)}}),fa.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){fa.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),fa.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),da.focusin="onfocusin"in a,da.focusin||fa.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){fa.event.simulate(b,a.target,fa.event.fix(a))};fa.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=za.access(d,b);e||d.addEventListener(a,c,!0),za.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=za.access(d,b)-1;e?za.access(d,b,e):(d.removeEventListener(a,c,!0),za.remove(d,b))}}});var qb=a.location,rb=fa.now(),sb=/\?/;fa.parseJSON=function(a){return JSON.parse(a+"")},fa.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||fa.error("Invalid XML: "+b),c};var tb=/#.*$/,ub=/([?&])_=[^&]*/,vb=/^(.*?):[ \t]*([^\r\n]*)$/gm,wb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,xb=/^(?:GET|HEAD)$/,yb=/^\/\//,zb={},Ab={},Bb="*/".concat("*"),Cb=X.createElement("a");Cb.href=qb.href,fa.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:wb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Bb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":fa.parseJSON,"text xml":fa.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?R(R(a,fa.ajaxSettings),b):R(fa.ajaxSettings,a)},ajaxPrefilter:P(zb),ajaxTransport:P(Ab),ajax:function(b,c){function d(b,c,d,h){var j,l,s,t,v,x=c;2!==u&&(u=2,i&&a.clearTimeout(i),e=void 0,g=h||"",w.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(t=S(m,w,d)),t=T(m,t,w,j),j?(m.ifModified&&(v=w.getResponseHeader("Last-Modified"),v&&(fa.lastModified[f]=v),v=w.getResponseHeader("etag"),v&&(fa.etag[f]=v)),204===b||"HEAD"===m.type?x="nocontent":304===b?x="notmodified":(x=t.state,l=t.data,s=t.error,j=!s)):(s=x,!b&&x||(x="error",b<0&&(b=0))),w.status=b,w.statusText=(c||x)+"",j?p.resolveWith(n,[l,x,w]):p.rejectWith(n,[w,x,s]),w.statusCode(r),r=void 0,k&&o.trigger(j?"ajaxSuccess":"ajaxError",[w,m,j?l:s]),q.fireWith(n,[w,x]),k&&(o.trigger("ajaxComplete",[w,m]),--fa.active||fa.event.trigger("ajaxStop")))}"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m=fa.ajaxSetup({},c),n=m.context||m,o=m.context&&(n.nodeType||n.jquery)?fa(n):fa.event,p=fa.Deferred(),q=fa.Callbacks("once memory"),r=m.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0, +getResponseHeader:function(a){var b;if(2===u){if(!h)for(h={};b=vb.exec(g);)h[b[1].toLowerCase()]=b[2];b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(m.mimeType=a),this},statusCode:function(a){var b;if(a)if(u<2)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return e&&e.abort(b),d(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,m.url=((b||m.url||qb.href)+"").replace(tb,"").replace(yb,qb.protocol+"//"),m.type=c.method||c.type||m.method||m.type,m.dataTypes=fa.trim(m.dataType||"*").toLowerCase().match(va)||[""],null==m.crossDomain){j=X.createElement("a");try{j.href=m.url,j.href=j.href,m.crossDomain=Cb.protocol+"//"+Cb.host!=j.protocol+"//"+j.host}catch(x){m.crossDomain=!0}}if(m.data&&m.processData&&"string"!=typeof m.data&&(m.data=fa.param(m.data,m.traditional)),Q(zb,m,c,w),2===u)return w;k=fa.event&&m.global,k&&0===fa.active++&&fa.event.trigger("ajaxStart"),m.type=m.type.toUpperCase(),m.hasContent=!xb.test(m.type),f=m.url,m.hasContent||(m.data&&(f=m.url+=(sb.test(f)?"&":"?")+m.data,delete m.data),m.cache===!1&&(m.url=ub.test(f)?f.replace(ub,"$1_="+rb++):f+(sb.test(f)?"&":"?")+"_="+rb++)),m.ifModified&&(fa.lastModified[f]&&w.setRequestHeader("If-Modified-Since",fa.lastModified[f]),fa.etag[f]&&w.setRequestHeader("If-None-Match",fa.etag[f])),(m.data&&m.hasContent&&m.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",m.contentType),w.setRequestHeader("Accept",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+("*"!==m.dataTypes[0]?", "+Bb+"; q=0.01":""):m.accepts["*"]);for(l in m.headers)w.setRequestHeader(l,m.headers[l]);if(m.beforeSend&&(m.beforeSend.call(n,w,m)===!1||2===u))return w.abort();v="abort";for(l in{success:1,error:1,complete:1})w[l](m[l]);if(e=Q(Ab,m,c,w)){if(w.readyState=1,k&&o.trigger("ajaxSend",[w,m]),2===u)return w;m.async&&m.timeout>0&&(i=a.setTimeout(function(){w.abort("timeout")},m.timeout));try{u=1,e.send(s,d)}catch(x){if(!(u<2))throw x;d(-1,x)}}else d(-1,"No Transport");return w},getJSON:function(a,b,c){return fa.get(a,b,c,"json")},getScript:function(a,b){return fa.get(a,void 0,b,"script")}}),fa.each(["get","post"],function(a,b){fa[b]=function(a,c,d,e){return fa.isFunction(c)&&(e=e||d,d=c,c=void 0),fa.ajax(fa.extend({url:a,type:b,dataType:e,data:c,success:d},fa.isPlainObject(a)&&a))}}),fa._evalUrl=function(a){return fa.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},fa.fn.extend({wrapAll:function(a){var b;return fa.isFunction(a)?this.each(function(b){fa(this).wrapAll(a.call(this,b))}):(this[0]&&(b=fa(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return fa.isFunction(a)?this.each(function(b){fa(this).wrapInner(a.call(this,b))}):this.each(function(){var b=fa(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=fa.isFunction(a);return this.each(function(c){fa(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){fa.nodeName(this,"body")||fa(this).replaceWith(this.childNodes)}).end()}}),fa.expr.filters.hidden=function(a){return!fa.expr.filters.visible(a)},fa.expr.filters.visible=function(a){return a.offsetWidth>0||a.offsetHeight>0||a.getClientRects().length>0};var Db=/%20/g,Eb=/\[\]$/,Fb=/\r?\n/g,Gb=/^(?:submit|button|image|reset|file)$/i,Hb=/^(?:input|select|textarea|keygen)/i;fa.param=function(a,b){var c,d=[],e=function(a,b){b=fa.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=fa.ajaxSettings&&fa.ajaxSettings.traditional),fa.isArray(a)||a.jquery&&!fa.isPlainObject(a))fa.each(a,function(){e(this.name,this.value)});else for(c in a)U(c,a[c],b,e);return d.join("&").replace(Db,"+")},fa.fn.extend({serialize:function(){return fa.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=fa.prop(this,"elements");return a?fa.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!fa(this).is(":disabled")&&Hb.test(this.nodeName)&&!Gb.test(a)&&(this.checked||!Ha.test(a))}).map(function(a,b){var c=fa(this).val();return null==c?null:fa.isArray(c)?fa.map(c,function(a){return{name:b.name,value:a.replace(Fb,"\r\n")}}):{name:b.name,value:c.replace(Fb,"\r\n")}}).get()}}),fa.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ib={0:200,1223:204},Jb=fa.ajaxSettings.xhr();da.cors=!!Jb&&"withCredentials"in Jb,da.ajax=Jb=!!Jb,fa.ajaxTransport(function(b){var c,d;if(da.cors||Jb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ib[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),fa.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return fa.globalEval(a),a}}}),fa.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),fa.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=fa(" + + + + +
                + + + + + + + + + + + + + diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/6BAEB33E31FC1D2E84399D3B6CC9011D7C38A231 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/6BAEB33E31FC1D2E84399D3B6CC9011D7C38A231 new file mode 100644 index 0000000..4169509 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/6BAEB33E31FC1D2E84399D3B6CC9011D7C38A231 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/6BAEB33E31FC1D2E84399D3B6CC9011D7C38A231-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/6BAEB33E31FC1D2E84399D3B6CC9011D7C38A231-blob new file mode 100644 index 0000000..47bb4ba --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/6BAEB33E31FC1D2E84399D3B6CC9011D7C38A231-blob @@ -0,0 +1,17730 @@ +/* Bundle Includes: + * js/vendor/jquery-ui.js + * js/vendor/jquery-ui-touch.js + * js/vendor/jquery.mousewheel.js + * js/scrolling.utils.js + * js/jquery.misc.js + * js/vendor/megaLogger.js + * js/vendor/jquery.fullscreen.js + * js/jquery-ui.extra.js + * js/utils/polyfills.js + * js/utils/browser.js + * js/utils/clipboard.js + * js/utils/conv.js + * js/utils/crypt.js + * js/utils/csp.js + */ + +/*! jQuery UI - v1.12.1 - 2016-10-28 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, form-reset-mixin.js, keycode.js, labels.js, scroll-parent.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/autocomplete.js, widgets/datepicker.js, widgets/menu.js, widgets/mouse.js, widgets/selectmenu.js, widgets/slider.js, effect.js, effects/effect-fade.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define([ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}(function( $ ) { + +$.ui = $.ui || {}; + +var version = $.ui.version = "1.12.1"; + + +/*! + * jQuery UI Widget 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Widget +//>>group: Core +//>>description: Provides a factory for creating stateful widgets with a common API. +//>>docs: http://api.jqueryui.com/jQuery.widget/ +//>>demos: http://jqueryui.com/widget/ + + + +var widgetUuid = 0; +var widgetSlice = Array.prototype.slice; + +$.cleanData = ( function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // Http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} + } + orig( elems ); + }; +} )( $.cleanData ); + +$.widget = function( name, base, prototype ) { + var existingConstructor, constructor, basePrototype; + + // ProxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + var proxiedPrototype = {}; + + var namespace = name.split( "." )[ 0 ]; + name = name.split( "." )[ 1 ]; + var fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + if ( $.isArray( prototype ) ) { + prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); + } + + // Create selector for plugin + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + + // Allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // Allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + // Extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + + // Copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + + // Track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + } ); + + basePrototype = new base(); + + // We need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( !$.isFunction( value ) ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = ( function() { + function _super() { + return base.prototype[ prop ].apply( this, arguments ); + } + + function _superApply( args ) { + return base.prototype[ prop ].apply( this, args ); + } + + return function() { + var __super = this._super; + var __superApply = this._superApply; + var returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + } )(); + } ); + constructor.prototype = $.widget.extend( basePrototype, { + + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + } ); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // Redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, + child._proto ); + } ); + + // Remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); + + return constructor; +}; + +$.widget.extend = function( target ) { + var input = widgetSlice.call( arguments, 1 ); + var inputIndex = 0; + var inputLength = input.length; + var key; + var value; + + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + + // Copy everything else by reference + } else { + target[ key ] = value; + } + } + } + } + return target; +}; + +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string"; + var args = widgetSlice.call( arguments, 1 ); + var returnValue = this; + + if ( isMethodCall ) { + + // If this is an empty collection, we need to have the instance method + // return undefined instead of the jQuery instance + if ( !this.length && options === "instance" ) { + returnValue = undefined; + } else { + this.each( function() { + var methodValue; + var instance = $.data( this, fullName ); + + if ( options === "instance" ) { + returnValue = instance; + return false; + } + + if ( !instance ) { + return $.error( "cannot call methods on " + name + + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + + if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + + " widget instance" ); + } + + methodValue = instance[ options ].apply( instance, args ); + + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + } ); + } + } else { + + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat( args ) ); + } + + this.each( function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } + } else { + $.data( this, fullName, new object( options, this ) ); + } + } ); + } + + return returnValue; + }; +}; + +$.Widget = function( /* options, element */ ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
                ", + + options: { + classes: {}, + disabled: false, + + // Callbacks + create: null + }, + + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = widgetUuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + this.classesElementLookup = {}; + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + } ); + this.document = $( element.style ? + + // Element within the document + element.ownerDocument : + + // Element is window or document + element.document || element ); + this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow ); + } + + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this._create(); + + if ( this.options.disabled ) { + this._setOptionDisabled( this.options.disabled ); + } + + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + + _getCreateOptions: function() { + return {}; + }, + + _getCreateEventData: $.noop, + + _create: $.noop, + + _init: $.noop, + + destroy: function() { + var that = this; + + this._destroy(); + $.each( this.classesElementLookup, function( key, value ) { + that._removeClass( value, key ); + } ); + + // We can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .off( this.eventNamespace ) + .removeData( this.widgetFullName ); + this.widget() + .off( this.eventNamespace ) + .removeAttr( "aria-disabled" ); + + // Clean up events and states + this.bindings.off( this.eventNamespace ); + }, + + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + var parts; + var curOption; + var i; + + if ( arguments.length === 0 ) { + + // Don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + + // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + + _setOption: function( key, value ) { + if ( key === "classes" ) { + this._setOptionClasses( value ); + } + + this.options[ key ] = value; + + if ( key === "disabled" ) { + this._setOptionDisabled( value ); + } + + return this; + }, + + _setOptionClasses: function( value ) { + var classKey, elements, currentElements; + + for ( classKey in value ) { + currentElements = this.classesElementLookup[ classKey ]; + if ( value[ classKey ] === this.options.classes[ classKey ] || + !currentElements || + !currentElements.length ) { + continue; + } + + // We are doing this to create a new jQuery object because the _removeClass() call + // on the next line is going to destroy the reference to the current elements being + // tracked. We need to save a copy of this collection so that we can add the new classes + // below. + elements = $( currentElements.get() ); + this._removeClass( currentElements, classKey ); + + // We don't use _addClass() here, because that uses this.options.classes + // for generating the string of classes. We want to use the value passed in from + // _setOption(), this is the new value of the classes option which was passed to + // _setOption(). We pass this value directly to _classes(). + elements.addClass( this._classes( { + element: elements, + keys: classKey, + classes: value, + add: true + } ) ); + } + }, + + _setOptionDisabled: function( value ) { + this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this._removeClass( this.hoverable, null, "ui-state-hover" ); + this._removeClass( this.focusable, null, "ui-state-focus" ); + } + }, + + enable: function() { + return this._setOptions( { disabled: false } ); + }, + + disable: function() { + return this._setOptions( { disabled: true } ); + }, + + _classes: function( options ) { + var full = []; + var that = this; + + options = $.extend( { + element: this.element, + classes: this.options.classes || {} + }, options ); + + function processClassString( classes, checkOption ) { + var current, i; + for ( i = 0; i < classes.length; i++ ) { + current = that.classesElementLookup[ classes[ i ] ] || $(); + if ( options.add ) { + current = $( $.unique( current.get().concat( options.element.get() ) ) ); + } else { + current = $( current.not( options.element ).get() ); + } + that.classesElementLookup[ classes[ i ] ] = current; + full.push( classes[ i ] ); + if ( checkOption && options.classes[ classes[ i ] ] ) { + full.push( options.classes[ classes[ i ] ] ); + } + } + } + + this._on( options.element, { + "remove": "_untrackClassesElement" + } ); + + if ( options.keys ) { + processClassString( options.keys.match( /\S+/g ) || [], true ); + } + if ( options.extra ) { + processClassString( options.extra.match( /\S+/g ) || [] ); + } + + return full.join( " " ); + }, + + _untrackClassesElement: function( event ) { + var that = this; + $.each( that.classesElementLookup, function( key, value ) { + if ( $.inArray( event.target, value ) !== -1 ) { + that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); + } + } ); + }, + + _removeClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, false ); + }, + + _addClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, true ); + }, + + _toggleClass: function( element, keys, extra, add ) { + add = ( typeof add === "boolean" ) ? add : extra; + var shift = ( typeof element === "string" || element === null ), + options = { + extra: shift ? keys : extra, + keys: shift ? element : keys, + element: shift ? this.element : element, + add: add + }; + options.element.toggleClass( this._classes( options ), add ); + return this; + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement; + var instance = this; + + // No suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // No element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); + } + + $.each( handlers, function( event, handler ) { + function handlerProxy() { + + // Allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // Copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^([\w:-]*)\s*(.*)$/ ); + var eventName = match[ 1 ] + instance.eventNamespace; + var selector = match[ 2 ]; + + if ( selector ) { + delegateElement.on( eventName, selector, handlerProxy ); + } else { + element.on( eventName, handlerProxy ); + } + } ); + }, + + _off: function( element, eventName ) { + eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.off( eventName ).off( eventName ); + + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); + }, + mouseleave: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); + } + } ); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); + }, + focusout: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); + } + } ); + }, + + _trigger: function( type, event, data ) { + var prop, orig; + var callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + + // The original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // Copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( $.isFunction( callback ) && + callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; + +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + + var hasOptions; + var effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } + + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + + if ( options.delay ) { + element.delay( options.delay ); + } + + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue( function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + } ); + } + }; +} ); + +var widget = $.widget; + + +/*! + * jQuery UI Position 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/position/ + */ + +//>>label: Position +//>>group: Core +//>>description: Positions elements relative to other elements. +//>>docs: http://api.jqueryui.com/position/ +//>>demos: http://jqueryui.com/position/ + + +( function() { +var cachedScrollbarWidth, + max = Math.max, + abs = Math.abs, + rhorizontal = /left|center|right/, + rvertical = /top|center|bottom/, + roffset = /[\+\-]\d+(\.[\d]+)?%?/, + rposition = /^\w+/, + rpercent = /%$/, + _position = $.fn.position; + +function getOffsets( offsets, width, height ) { + return [ + parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), + parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) + ]; +} + +function parseCss( element, property ) { + return parseInt( $.css( element, property ), 10 ) || 0; +} + +function getDimensions( elem ) { + var raw = elem[ 0 ]; + if ( raw.nodeType === 9 ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: 0, left: 0 } + }; + } + if ( $.isWindow( raw ) ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: elem.scrollTop(), left: elem.scrollLeft() } + }; + } + if ( raw.preventDefault ) { + return { + width: 0, + height: 0, + offset: { top: raw.pageY, left: raw.pageX } + }; + } + return { + width: elem.outerWidth(), + height: elem.outerHeight(), + offset: elem.offset() + }; +} + +$.position = { + scrollbarWidth: function() { + if ( cachedScrollbarWidth !== undefined ) { + return cachedScrollbarWidth; + } + var w1, w2, + div = $( "
                " + + "
                " ), + innerDiv = div.children()[ 0 ]; + + $( "body" ).append( div ); + w1 = innerDiv.offsetWidth; + div.css( "overflow", "scroll" ); + + w2 = innerDiv.offsetWidth; + + if ( w1 === w2 ) { + w2 = div[ 0 ].clientWidth; + } + + div.remove(); + + return ( cachedScrollbarWidth = w1 - w2 ); + }, + getScrollInfo: function( within ) { + var overflowX = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-x" ), + overflowY = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-y" ), + hasOverflowX = overflowX === "scroll" || + ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ), + hasOverflowY = overflowY === "scroll" || + ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight ); + return { + width: hasOverflowY ? $.position.scrollbarWidth() : 0, + height: hasOverflowX ? $.position.scrollbarWidth() : 0 + }; + }, + getWithinInfo: function( element ) { + var withinElement = $( element || window ), + isWindow = $.isWindow( withinElement[ 0 ] ), + isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, + hasOffset = !isWindow && !isDocument; + return { + element: withinElement, + isWindow: isWindow, + isDocument: isDocument, + offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, + scrollLeft: withinElement.scrollLeft(), + scrollTop: withinElement.scrollTop(), + width: withinElement.outerWidth(), + height: withinElement.outerHeight() + }; + } +}; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // Make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, + target = $( options.of ), + within = $.position.getWithinInfo( options.within ), + scrollInfo = $.position.getScrollInfo( within ), + collision = ( options.collision || "flip" ).split( " " ), + offsets = {}; + + dimensions = getDimensions( target ); + if ( target[ 0 ].preventDefault ) { + + // Force left top to allow flipping + options.at = "left top"; + } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + + // Clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); + + // Force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[ this ] || "" ).split( " " ), + horizontalOffset, + verticalOffset; + + if ( pos.length === 1 ) { + pos = rhorizontal.test( pos[ 0 ] ) ? + pos.concat( [ "center" ] ) : + rvertical.test( pos[ 0 ] ) ? + [ "center" ].concat( pos ) : + [ "center", "center" ]; + } + pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; + pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; + + // Calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // Reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + } ); + + // Normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + if ( options.at[ 0 ] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[ 0 ] === "center" ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[ 1 ] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[ 1 ] === "center" ) { + basePosition.top += targetHeight / 2; + } + + atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); + basePosition.left += atOffset[ 0 ]; + basePosition.top += atOffset[ 1 ]; + + return this.each( function() { + var collisionPosition, using, + elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseCss( this, "marginLeft" ), + marginTop = parseCss( this, "marginTop" ), + collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + + scrollInfo.width, + collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + + scrollInfo.height, + position = $.extend( {}, basePosition ), + myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); + + if ( options.my[ 0 ] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[ 0 ] === "center" ) { + position.left -= elemWidth / 2; + } + + if ( options.my[ 1 ] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[ 1 ] === "center" ) { + position.top -= elemHeight / 2; + } + + position.left += myOffset[ 0 ]; + position.top += myOffset[ 1 ]; + + collisionPosition = { + marginLeft: marginLeft, + marginTop: marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[ i ] ] ) { + $.ui.position[ collision[ i ] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], + my: options.my, + at: options.at, + within: within, + elem: elem + } ); + } + } ); + + if ( options.using ) { + + // Adds feedback as second argument to using callback, if present + using = function( props ) { + var left = targetOffset.left - position.left, + right = left + targetWidth - elemWidth, + top = targetOffset.top - position.top, + bottom = top + targetHeight - elemHeight, + feedback = { + target: { + element: target, + left: targetOffset.left, + top: targetOffset.top, + width: targetWidth, + height: targetHeight + }, + element: { + element: elem, + left: position.left, + top: position.top, + width: elemWidth, + height: elemHeight + }, + horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", + vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" + }; + if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { + feedback.horizontal = "center"; + } + if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { + feedback.vertical = "middle"; + } + if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { + feedback.important = "horizontal"; + } else { + feedback.important = "vertical"; + } + options.using.call( this, props, feedback ); + }; + } + + elem.offset( $.extend( position, { using: using } ) ); + } ); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, + outerWidth = within.width, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = withinOffset - collisionPosLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, + newOverRight; + + // Element is wider than within + if ( data.collisionWidth > outerWidth ) { + + // Element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - + withinOffset; + position.left += overLeft - newOverRight; + + // Element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + + // Element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + + // Too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + + // Too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + + // Adjust based on position and margin + } else { + position.left = max( position.left - collisionPosLeft, position.left ); + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollTop : within.offset.top, + outerHeight = data.within.height, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = withinOffset - collisionPosTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, + newOverBottom; + + // Element is taller than within + if ( data.collisionHeight > outerHeight ) { + + // Element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - + withinOffset; + position.top += overTop - newOverBottom; + + // Element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + + // Element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + + // Too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + + // Too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + + // Adjust based on position and margin + } else { + position.top = max( position.top - collisionPosTop, position.top ); + } + } + }, + flip: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.offset.left + within.scrollLeft, + outerWidth = within.width, + offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = collisionPosLeft - offsetLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + data.at[ 0 ] === "right" ? + -data.targetWidth : + 0, + offset = -2 * data.offset[ 0 ], + newOverRight, + newOverLeft; + + if ( overLeft < 0 ) { + newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - + outerWidth - withinOffset; + if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { + position.left += myOffset + atOffset + offset; + } + } else if ( overRight > 0 ) { + newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + + atOffset + offset - offsetLeft; + if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { + position.left += myOffset + atOffset + offset; + } + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.offset.top + within.scrollTop, + outerHeight = within.height, + offsetTop = within.isWindow ? within.scrollTop : within.offset.top, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = collisionPosTop - offsetTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, + top = data.my[ 1 ] === "top", + myOffset = top ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + data.at[ 1 ] === "bottom" ? + -data.targetHeight : + 0, + offset = -2 * data.offset[ 1 ], + newOverTop, + newOverBottom; + if ( overTop < 0 ) { + newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - + outerHeight - withinOffset; + if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { + position.top += myOffset + atOffset + offset; + } + } else if ( overBottom > 0 ) { + newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + + offset - offsetTop; + if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { + position.top += myOffset + atOffset + offset; + } + } + } + }, + flipfit: { + left: function() { + $.ui.position.flip.left.apply( this, arguments ); + $.ui.position.fit.left.apply( this, arguments ); + }, + top: function() { + $.ui.position.flip.top.apply( this, arguments ); + $.ui.position.fit.top.apply( this, arguments ); + } + } +}; + +} )(); + +var position = $.ui.position; + + +/*! + * jQuery UI :data 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: :data Selector +//>>group: Core +//>>description: Selects elements which have data stored under the specified key. +//>>docs: http://api.jqueryui.com/data-selector/ + + +var data = $.extend( $.expr[ ":" ], { + data: $.expr.createPseudo ? + $.expr.createPseudo( function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + } ) : + + // Support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + } +} ); + +/*! + * jQuery UI Disable Selection 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: disableSelection +//>>group: Core +//>>description: Disable selection of text content within the set of matched elements. +//>>docs: http://api.jqueryui.com/disableSelection/ + +// This file is deprecated + + +var disableSelection = $.fn.extend( { + disableSelection: ( function() { + var eventType = "onselectstart" in document.createElement( "div" ) ? + "selectstart" : + "mousedown"; + + return function() { + return this.on( eventType + ".ui-disableSelection", function( event ) { + event.preventDefault(); + } ); + }; + } )(), + + enableSelection: function() { + return this.off( ".ui-disableSelection" ); + } +} ); + + + + +// Support: IE8 Only +// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop +// with a string, so we need to find the proper form. +var form = $.fn.form = function() { + return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form ); +}; + + +/*! + * jQuery UI Form Reset Mixin 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Form Reset Mixin +//>>group: Core +//>>description: Refresh input widgets when their form is reset +//>>docs: http://api.jqueryui.com/form-reset-mixin/ + + + +var formResetMixin = $.ui.formResetMixin = { + _formResetHandler: function() { + var form = $( this ); + + // Wait for the form reset to actually happen before refreshing + setTimeout( function() { + var instances = form.data( "ui-form-reset-instances" ); + $.each( instances, function() { + this.refresh(); + } ); + } ); + }, + + _bindFormResetHandler: function() { + this.form = this.element.form(); + if ( !this.form.length ) { + return; + } + + var instances = this.form.data( "ui-form-reset-instances" ) || []; + if ( !instances.length ) { + + // We don't use _on() here because we use a single event handler per form + this.form.on( "reset.ui-form-reset", this._formResetHandler ); + } + instances.push( this ); + this.form.data( "ui-form-reset-instances", instances ); + }, + + _unbindFormResetHandler: function() { + if ( !this.form.length ) { + return; + } + + var instances = this.form.data( "ui-form-reset-instances" ); + instances.splice( $.inArray( this, instances ), 1 ); + if ( instances.length ) { + this.form.data( "ui-form-reset-instances", instances ); + } else { + this.form + .removeData( "ui-form-reset-instances" ) + .off( "reset.ui-form-reset" ); + } + } +}; + + +/*! + * jQuery UI Keycode 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Keycode +//>>group: Core +//>>description: Provide keycodes as keynames +//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ + + +var keycode = $.ui.keyCode = { + BACKSPACE: 8, + COMMA: 188, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + LEFT: 37, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SPACE: 32, + TAB: 9, + UP: 38 +}; + + + + +// Internal use only +var escapeSelector = $.ui.escapeSelector = ( function() { + var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g; + return function( selector ) { + return selector.replace( selectorEscape, "\\$1" ); + }; +} )(); + + +/*! + * jQuery UI Labels 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: labels +//>>group: Core +//>>description: Find all the labels associated with a given input +//>>docs: http://api.jqueryui.com/labels/ + + + +var labels = $.fn.labels = function() { + var ancestor, selector, id, labels, ancestors; + + // Check control.labels first + if ( this[ 0 ].labels && this[ 0 ].labels.length ) { + return this.pushStack( this[ 0 ].labels ); + } + + // Support: IE <= 11, FF <= 37, Android <= 2.3 only + // Above browsers do not support control.labels. Everything below is to support them + // as well as document fragments. control.labels does not work on document fragments + labels = this.eq( 0 ).parents( "label" ); + + // Look for the label based on the id + id = this.attr( "id" ); + if ( id ) { + + // We don't search against the document in case the element + // is disconnected from the DOM + ancestor = this.eq( 0 ).parents().last(); + + // Get a full set of top level ancestors + ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() ); + + // Create a selector for the label based on the id + selector = "label[for='" + $.ui.escapeSelector( id ) + "']"; + + labels = labels.add( ancestors.find( selector ).addBack( selector ) ); + + } + + // Return whatever we have found for labels + return this.pushStack( labels ); +}; + + +/*! + * jQuery UI Scroll Parent 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: scrollParent +//>>group: Core +//>>description: Get the closest ancestor element that is scrollable. +//>>docs: http://api.jqueryui.com/scrollParent/ + + + +var scrollParent = $.fn.scrollParent = function( includeHidden ) { + var position = this.css( "position" ), + excludeStaticParent = position === "absolute", + overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, + scrollParent = this.parents().filter( function() { + var parent = $( this ); + if ( excludeStaticParent && parent.css( "position" ) === "static" ) { + return false; + } + return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + + parent.css( "overflow-x" ) ); + } ).eq( 0 ); + + return position === "fixed" || !scrollParent.length ? + $( this[ 0 ].ownerDocument || document ) : + scrollParent; +}; + + +/*! + * jQuery UI Unique ID 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: uniqueId +//>>group: Core +//>>description: Functions to generate and remove uniqueId's +//>>docs: http://api.jqueryui.com/uniqueId/ + + + +var uniqueId = $.fn.extend( { + uniqueId: ( function() { + var uuid = 0; + + return function() { + return this.each( function() { + if ( !this.id ) { + this.id = "ui-id-" + ( ++uuid ); + } + } ); + }; + } )(), + + removeUniqueId: function() { + return this.each( function() { + if ( /^ui-id-\d+$/.test( this.id ) ) { + $( this ).removeAttr( "id" ); + } + } ); + } +} ); + + + + +// This file is deprecated +var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); + +/*! + * jQuery UI Mouse 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Mouse +//>>group: Widgets +//>>description: Abstracts mouse-based interactions to assist in creating certain widgets. +//>>docs: http://api.jqueryui.com/mouse/ + + + +var mouseHandled = false; +$( document ).on( "mouseup", function() { + mouseHandled = false; +} ); + +var widgetsMouse = $.widget( "ui.mouse", { + version: "1.12.1", + options: { + cancel: "input, textarea, button, select, option", + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var that = this; + + this.element + .on( "mousedown." + this.widgetName, function( event ) { + return that._mouseDown( event ); + } ) + .on( "click." + this.widgetName, function( event ) { + if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) { + $.removeData( event.target, that.widgetName + ".preventClickEvent" ); + event.stopImmediatePropagation(); + return false; + } + } ); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.off( "." + this.widgetName ); + if ( this._mouseMoveDelegate ) { + this.document + .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); + } + }, + + _mouseDown: function( event ) { + + // don't let more than one widget handle mouseStart + if ( mouseHandled ) { + return; + } + + this._mouseMoved = false; + + // We may have missed mouseup (out of window) + ( this._mouseStarted && this._mouseUp( event ) ); + + this._mouseDownEvent = event; + + var that = this, + btnIsLeft = ( event.which === 1 ), + + // event.target.nodeName works around a bug in IE 8 with + // disabled inputs (#7620) + elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ? + $( event.target ).closest( this.options.cancel ).length : false ); + if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if ( !this.mouseDelayMet ) { + this._mouseDelayTimer = setTimeout( function() { + that.mouseDelayMet = true; + }, this.options.delay ); + } + + if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { + this._mouseStarted = ( this._mouseStart( event ) !== false ); + if ( !this._mouseStarted ) { + event.preventDefault(); + return true; + } + } + + // Click event may never have fired (Gecko & Opera) + if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) { + $.removeData( event.target, this.widgetName + ".preventClickEvent" ); + } + + // These delegates are required to keep context + this._mouseMoveDelegate = function( event ) { + return that._mouseMove( event ); + }; + this._mouseUpDelegate = function( event ) { + return that._mouseUp( event ); + }; + + this.document + .on( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .on( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + event.preventDefault(); + + mouseHandled = true; + return true; + }, + + _mouseMove: function( event ) { + + // Only check for mouseups outside the document if you've moved inside the document + // at least once. This prevents the firing of mouseup in the case of IE<9, which will + // fire a mousemove event if content is placed under the cursor. See #7778 + // Support: IE <9 + if ( this._mouseMoved ) { + + // IE mouseup check - mouseup happened when mouse was out of window + if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && + !event.button ) { + return this._mouseUp( event ); + + // Iframe mouseup check - mouseup occurred in another document + } else if ( !event.which ) { + + // Support: Safari <=8 - 9 + // Safari sets which to 0 if you press any of the following keys + // during a drag (#14461) + if ( event.originalEvent.altKey || event.originalEvent.ctrlKey || + event.originalEvent.metaKey || event.originalEvent.shiftKey ) { + this.ignoreMissingWhich = true; + } else if ( !this.ignoreMissingWhich ) { + return this._mouseUp( event ); + } + } + } + + if ( event.which || event.button ) { + this._mouseMoved = true; + } + + if ( this._mouseStarted ) { + this._mouseDrag( event ); + return event.preventDefault(); + } + + if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { + this._mouseStarted = + ( this._mouseStart( this._mouseDownEvent, event ) !== false ); + ( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) ); + } + + return !this._mouseStarted; + }, + + _mouseUp: function( event ) { + this.document + .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + if ( this._mouseStarted ) { + this._mouseStarted = false; + + if ( event.target === this._mouseDownEvent.target ) { + $.data( event.target, this.widgetName + ".preventClickEvent", true ); + } + + this._mouseStop( event ); + } + + if ( this._mouseDelayTimer ) { + clearTimeout( this._mouseDelayTimer ); + delete this._mouseDelayTimer; + } + + this.ignoreMissingWhich = false; + mouseHandled = false; + event.preventDefault(); + }, + + _mouseDistanceMet: function( event ) { + return ( Math.max( + Math.abs( this._mouseDownEvent.pageX - event.pageX ), + Math.abs( this._mouseDownEvent.pageY - event.pageY ) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function( /* event */ ) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function( /* event */ ) {}, + _mouseDrag: function( /* event */ ) {}, + _mouseStop: function( /* event */ ) {}, + _mouseCapture: function( /* event */ ) { return true; } +} ); + + + + +// $.ui.plugin is deprecated. Use $.widget() extensions instead. +var plugin = $.ui.plugin = { + add: function( module, option, set ) { + var i, + proto = $.ui[ module ].prototype; + for ( i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args, allowDisconnected ) { + var i, + set = instance.plugins[ name ]; + + if ( !set ) { + return; + } + + if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || + instance.element[ 0 ].parentNode.nodeType === 11 ) ) { + return; + } + + for ( i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } + } +}; + + + +var safeActiveElement = $.ui.safeActiveElement = function( document ) { + var activeElement; + + // Support: IE 9 only + // IE9 throws an "Unspecified error" accessing document.activeElement from an '; +var f=d.firstChild;f.onload=function(){var h=b("meta");h.setAttribute("http-equiv","Content-Security-Policy");h.setAttribute("content","script-src *");f.contentWindow.document.head.appendChild(h);hc(f.contentWindow,{src:c})};a._ym__remoteIframeEl=f;e.appendChild(d);d.removeChild(f);var g=null;d.attachShadow?g=d.attachShadow({mode:"open"}):d.createShadowRoot?g=d.createShadowRoot():d.webkitCreateShadowRoot&&(g=d.webkitCreateShadowRoot());g?g.appendChild(f):(e.appendChild(f),a._ym__remoteIframeContainer= +f)}}}function dp(a){var c,b=ti(a);a=I(a).o("getCounters",td)();a=A(U("id"),a);return c={id:b},c.counterFound=!!b&&H(b,a),c}function qi(a,c,b){var d;c=ui(a,c,{Dg:gp,Si:(d={},d.href=!0,d)});b=Y(Boolean,A(function(f){return"*"===f?f:Lb(f)},b));var e=A(u(O,oa("concat",[""]),vi("reverse"),ja),b);b=qd(a);d=wi(a,b,1E3);c=D(c.cg,c,e);d.D(c);hp(a,b);xi(a,b);c()}function gp(a,c,b){var d=$a(a),e=b.yb,f=b.Yc,g=e.parentNode,h=e.textContent;if("text"===b.Ae&&h&&d&&g){b=d("small");yi(b);var k=h.split(""),l=zi(h).length; +z(oa("appendChild",b),M(function(m,p){var q=m.ma,r=m.Jg,t=d("small");t.innerHTML=p;var y=ip.test(p);yi(t);y&&(t.style.opacity=""+(l-r-1)/l);q.push(t);return{ma:q,Jg:r+(y?1:0)}},{ma:[],Jg:0},k).ma);jp(a,c,b,f);g.insertBefore(b,e);e.textContent="";return!0}return!1}function jp(a,c,b,d){function e(){z(v(["style","opacity",""],Ac),qa(b.childNodes));if(c){var k=Ga(a,c);k&&k.extLink("tel:"+d,{})}g();h()}var f=ia(a),g=B,h=B;g=f.D(b,["mouseenter"],function(k){if(k.target===b){var l=W(a,e,200,"ph.h.e");(h|| +B)();h=f.D(b,["mouseleave"],function(m){m.target===b&&ma(a,l)})}})}function xi(a,c){Zb(a)(Ra(B,function(){var b,d=a.document.body,e=(b={},b.attributes=!0,b.childList=!0,b.subtree=!0,b);Da("MutationObserver",a.MutationObserver)&&(new MutationObserver(c.O)).observe(d,e)}))}function hp(a,c){return ia(a).D(a,["load"],c.O)}function ui(a,c,b){function d(k){var l;return f(a,c,k)?null===(l=h[k.Yc])||void 0===l?void 0:l.gd:null}var e,f=b.Dg;b=b.Si;var g=void 0===b?(e={},e.href=!0,e.text=!0,e):b,h;return{cg:function(k){return new K(function(l, +m){k&&k.length||m();h=Ai()(k);Zb(a)(Ra(v({oa:[],ya:0},l),function(){var p=ha(a),q=p(aa),r=g.href?kp(a,h):[],t=g.text?Bi(a,h):[];l({oa:Y(ea,Y(Boolean,A(d,r.concat(t)))),ya:p(aa)-q})}))})}}}function kp(a,c){var b=a.document.body;if(!b)return[];var d=Ci(c);return M(function(e,f){var g=n(f,"href");try{var h=decodeURI(g||"")}catch(p){h=""}if("tel:"===h.slice(0,4)){var k=(d.exec(h)||[])[0],l=k?Lb(k):"",m=c[l];V(m)||!l&&"*"!==m.gd[0]||(e.push({Ae:"href",yb:f,Yc:l,eb:Di(k,c[l].eb),Bj:g}),g=Lb(h.slice(4)), +l=Ai()([l?m.gd:[g,""]]),e.push.apply(e,Bi(a,l,f)))}return e},[],qa(b.querySelectorAll("a")))}function Bi(a,c,b){void 0===b&&(b=a.document.body);if(!b)return[];var d=[],e=Ci(c);lf(a,b,function(f){if(f!==b&&"script"!==(n(f,"parentNode.nodeName")||"").toLowerCase()){var g=Y(Boolean,e.exec(f.textContent||"")||[]);z(function(h){var k=Lb(h);V(c[k])||d.push({Ae:"text",yb:f,Yc:k,eb:Di(h,c[k].eb),Bj:f.textContent||""})},g)}},function(f){return e.test(f.textContent||"")?1:0},a.NodeFilter.SHOW_TEXT);return d} +function Ai(){return ud(function(a,c){var b=A(Lb,c),d=b[0];b=b[1];a[d]={eb:b,gd:c};var e=Ei(d);e!==d&&(a[e]={eb:Ei(b),gd:c});return a},{})}function Di(a,c){for(var b=[],d=a.split(""),e=c.split(""),f=0,g=0;g=e.length);g+=1){var h=d[g];"0"<=h&&"9">=h?(b.push(e[f]),f+=1):b.push(d[g])}return L("",b)+c.slice(f+1)}function Ei(a){var c={7:"8",8:"7"};return 11===a.length&&c[a[0]]?""+c[a[0]]+a.slice(1):a}function Ci(a){return new RegExp("(?:"+L("|",A(Fi,ca(a)))+")")}function Gi(a,c,b,d){if(c){var e= +[];c&&(a.document.documentElement.contains(c)?lf(a,c,oa("push",e),d):La(e,Hi(a,c,d)));z(b,e)}}function lf(a,c,b,d,e){function f(g){return S(d)?d(g)?a.NodeFilter.FILTER_ACCEPT:a.NodeFilter.FILTER_REJECT:a.NodeFilter.FILTER_ACCEPT}void 0===e&&(e=-1);if(S(b)&&f(c)===a.NodeFilter.FILTER_ACCEPT&&(b(c),!Bf(c)))for(c=a.document.createTreeWalker(c,e,d?{acceptNode:f}:null,!1);c.nextNode()&&!1!==b(c.currentNode););}function Hi(a,c,b){var d=[],e=u(O,oa("push",d));S(b)?(b=b(c),(na(b)||b===a.NodeFilter.FILTER_ACCEPT)&& +e(c)):e(c);if(c.childNodes&&0c.time-b.time)return!1;e=Math.abs(b.position.x-c.position.x);a=Math.abs(b.position.y-c.position.y);c=c.time-b.time;if(b.element===d&&2>e&&2>a&&1E3>c)return!1}for(;d;){if(rp(d))return!1;d=d.parentElement}return!0}function sp(a,c){var b=null;try{if(b=c.target||c.srcElement)!b.ownerDocument&&b.documentElement?b=b.documentElement:b.ownerDocument!==a.document&&(b=null)}catch(d){}return b}function tp(a){var c=a.which; +a=a.button;return c||void 0===a?c:1===a||3===a?1:2===a?3:4===a?2:0}function Li(a,c){var b=Vb(a),d=Pf(a);return{x:c.pageX||c.clientX+d.x-(b.clientLeft||0)||0,y:c.pageY||c.clientY+d.y-(b.clientTop||0)||0}}function up(a,c){if(a.Jj()){var b=Mi(c);if(b&&!pc("ym-disable-tracklink",b)){var d=a.l,e=a.vh,f=a.hb,g=a.sender,h=a.Kh,k=f.Ac,l=b.href,m=tb(b&&b.innerHTML&&b.innerHTML.replace(/<\/?[^>]+>/gi,""));m=l===m?"":m;if(pc("ym-external-link",b))pe(d,f,{url:l,Qb:!0,title:m,sender:g});else{k=k?Hc(d,k).hostname: +T(d).hostname;h=RegExp("\\.("+L("|",A(vp,h))+")$","i");var p=b.protocol+"//"+b.hostname+b.pathname;h=Ni.test(p)||Ni.test(l)||h.test(l)||h.test(p);b=b.hostname;qe(k)===qe(b)?h?pe(d,f,{url:l,Jc:!0,title:m,sender:g}):m&&e.C("il",tb(m).slice(0,100)):l&&wp.test(l)||pe(d,f,{url:l,Oc:!0,Qb:!0,Jc:h,title:m,sender:g})}}}}function pe(a,c,b,d){var e,f=Ca();b.Jc&&f.C("dl",1);b.Qb&&f.C("ln",1);f={H:f,V:{title:b.title,Oc:!!b.Oc,ba:b.ba},G:(e={},e["page-url"]=b.url,e["page-ref"]=c.Ac||T(a).href,e)};e="Link";b.Jc? +e=b.Qb?"Ext link - File":"File":b.Qb&&(e="Ext link");c=b.sender(f,c).then(d||B).then(Db(a,c,e+". Counter "+c.id+". Url: "+b.url,b));return Jc(a,"cl.p.s",c,b.gb||B,b.l)}function xp(a,c){var b,d,e=(b={},b.string=!0,b.object=!0,b["boolean"]=c,b)[typeof c]||!1;a((d={},d.trackLinks=e,d))}function yp(a,c,b,d){var e=T(a),f=e.hostname;e=e.href;if(c=xd(c).url)a=Hc(a,c),f=a.hostname,e=a.href;return[d+"://"+f+"/"+b,e||""]}function Oi(a){return(a.split(":")[1]||"").replace(/^\/*/,"").replace(/^www\./,"").split("/")[0]} +function Jc(a,c,b,d,e){var f=F([a,d,e],Qf);return b.then(f,function(g){f();ke(a,c,g)})}function re(a,c){return function(b){Pi(a,c,b)}}function zp(a,c){Rf(a)(function(b){delete b[c]})}function Pi(a,c,b){Rf(a)(function(d){d[c]=x(d[c]||{},b)})}function Rf(a){a=I(a);var c=a.o("dsjf")||Ba({});a.Ra("dsjf",c);return c}function Ap(a,c){return function(b){var d,e,f=Ga(a,c);f&&(Ma(b)?Na(ca(b))?(b=Qi(b))&&Na(b)&&f.params((d={},d.__ym=(e={},e.fpmh=b,e),d)):Db(a,c,"First party params error. Empty object.")(): +Db(a,c,"First party params error. Not an object.")())}}function Qi(a){a=ya(a);return M(function(c,b){var d=b[0],e=b[1],f=Ma(e);if(!Ea(e)&&!f)return c;e=f?Qi(e):e;Na(e)&&c.push([d,e]);return c},[],a)}function Ri(a,c,b){void 0===b&&(b=0);c=ya(c);c=M(function(d,e){var f=e[0],g=e[1],h=Ma(g);if(!Ea(g)&&!h)return d;h?g=Ri(a,g,b+1):b||"yandex_cid"!==f?("phone_number"===f?g=Bp(g):"email"===f&&(g=Cp(g)),g=Si(a,g)):g=K.resolve(g);d.push(g.then(function(k){return[f,k]}));return d},[],c);return K.all(c)}function Cp(a){var c= +tb(a).toLowerCase().split("@"),b=c[0];c=c[1];if(!c)return a;c=c.replace("googlemail.com","gmail.com");Ti(c)&&(c="yandex.ru");"yandex.ru"===c?b=b.replace(Sf,"-"):"gmail.com"===c&&(b=b.replace(Sf,""));a=tf(b,"+");-1!==a&&(b=b.slice(0,a));return b+"@"+c}function Bp(a){a=Lb(a);return"8"===a[0]?"7"+a.slice(1):a}function Si(a,c){return new K(function(b,d){var e=(new a.TextEncoder).encode(c);a.crypto.subtle.digest("SHA-256",e).then(function(f){f=new a.Blob([f],{type:"application/octet-binary"});var g=new a.FileReader; +g.onload=function(h){h=n(h,"target.result");var k=(h||"").indexOf(",");-1!==k?b(h.substring(k+1)):d(Kc("fpm.i"))};g.readAsDataURL(f)},d)})}function Ui(a,c){I(a).C("dce:"+c,!0);var b=I(a).o("dclq:"+c);b&&(z(function(d){var e=d[0];d=d[1];ja.apply(void 0,wa([yd(a,c)[e]],d))},b),zd(b))}function Db(a,c,b,d){return Tf(c)?B:v(F(wa([a,N(c)],d?[b+". Params:",d]:[b]),pb),ja)}function pb(){var a=Aa(arguments),c=a.slice(2);yd(a[0],a[1]).log.apply(pb,c)}function Cf(a){var c="1"===Xb(a).o("debug"),b=-1a.selectedIndex:!0}function Ia(a){if(a)try{var c=a.nodeName;if(Ea(c))return c;c=a.tagName;if(Ea(c))return c}catch(b){}}function qj(a,c){var b=a.document.getElementsByTagName("form");return Mb(a)(c,qa(b))}function gq(a,c,b){b=bc("dispatchEvent",b||a.document); +var d=null,e=n(a,"Event.prototype.constructor");if(e&&(Da("(Event|Object|constructor)",e)||kg(a)&&"[object Event]"===""+e))try{d=new a.Event(c)}catch(f){if((a=bc("createEvent",n(a,"document")))&&S(a)){try{d=a(c)}catch(g){}d&&d.initEvent&&d.initEvent(c,!1,!1)}}d&&b(d)}function gd(a){try{return a.getBoundingClientRect&&a.getBoundingClientRect()}catch(c){return"object"===typeof c&&null!==c&&16389===(c.Vf&&c.Vf&65535)?{top:0,bottom:0,left:0,width:0,height:0,right:0}:null}}function Pf(a){var c=uc(a),b= +n(a,"document");return{x:a.pageXOffset||b.documentElement&&b.documentElement.scrollLeft||c&&c.scrollLeft||0,y:a.pageYOffset||b.documentElement&&b.documentElement.scrollTop||c&&c.scrollTop||0}}function Ed(a){var c=lg(a);if(c){var b=c[2];return[a.Math.round(c[0]*b),a.Math.round(c[1]*b)]}c=Vb(a);return[n(c,"clientWidth")||a.innerWidth,n(c,"clientHeight")||a.innerHeight]}function lg(a){var c=n(a,"visualViewport.width"),b=n(a,"visualViewport.height");a=n(a,"visualViewport.scale");return na(c)||na(b)?null: +[Math.floor(c),Math.floor(b),a]}function Vb(a){var c=n(a,"document")||{},b=c.documentElement;return"CSS1Compat"===c.compatMode?b:uc(a)||b}function uc(a){a=n(a,"document");try{return a.getElementsByTagName("body")[0]}catch(c){return null}}function pc(a,c){try{return(new RegExp("(?:^|\\s)"+a+"(?:\\s|$)")).test(c.className)}catch(b){return!1}}function vc(a){var c;try{if(c=a.target||a.srcElement)!c.ownerDocument&&c.documentElement?c=c.documentElement:c.ownerDocument!==document&&(c=null)}catch(b){}return c} +function jc(a){var c=a&&a.parentNode;c&&c.removeChild(a)}function Qb(a){return a?a.innerText||"":""}function Bf(a){if(na(a))return!1;a=a.nodeType;return 3===a||8===a}function tb(a,c){if(a){var b=rj?rj.call(a):(""+a).replace(aj,"");return c&&b.length>c?b.substring(0,c):b}return""}function ff(a,c,b){void 0===c&&(c="");void 0===b&&(b="_ym");var d=""+b+c+"_";return{Ud:hq(a),o:function(e,f){var g=sj(a,""+d+e);return Ta(g)&&!V(f)?f:g},C:function(e,f){tj(a,""+d+e,f);return this},uc:function(e){uj(a,""+d+ +e);return this}}}function tj(a,c,b){var d=mg(a);a=jb(a,b);if(!Ta(a))try{d.setItem(c,a)}catch(e){}}function sj(a,c){var b=mg(a);try{return qb(a,b.getItem(c))}catch(d){}return null}function uj(a,c){var b=mg(a);try{b.removeItem(c)}catch(d){}}function mg(a){try{return a.localStorage}catch(c){}return null}function jb(a,c,b){try{return a.JSON.stringify(c,null,b)}catch(d){return null}}function Ud(a,c,b){void 0===b&&(b=null);a.Bb||(a.Bb=vj());c&&a.Bb.ac(c,b);return a.Bb}function ng(a){return{ca:function(c, +b){var d=a.document,e=c.H;if(e&&og(a)){var f=ia(a),g=function(h){og(a)||(f.dc(d,wj,g),b());return h};f.D(d,wj,g);e.C("pr","1")}else b()}}}function Xa(a,c,b){return function(d,e){var f=La(je(a,"w",e),b);return nd(a,c,f)(d)}}function nd(a,c,b){var d=Bb(a,c);return function(e){return xj(b,e,!0).then(function(){var f=e.Ia||{},g=f.xi,h=void 0===g?"":g;g=f.Pa;var k=void 0===g?"":g;f=f.xk;f=void 0===f?[iq(a,k)]:f;f=A(function(l){return ra.Ua+"//"+(""+h+l||rc)+"/"+k},f);return d(e,f)}).then(function(f){var g= +f.$c;f=f.Ig;e.oj=g;e.Jk=f;return xj(b,e).then(v(g,O))})}}function iq(a,c){return M(function(b,d){return b||d(a,c)},void 0,yj)||rc}function xj(a,c,b){void 0===b&&(b=!1);return new K(function(d,e){function f(k,l){l();d()}var g=a.slice();g.push({ca:f,Ba:f});var h=fc(g,function(k,l){var m=b?k.ca:k.Ba;if(m)try{m(c,l)}catch(p){h(jq),e(p)}else l()});h(zj)})}function Hb(a,c,b){var d=b||"as";if(a.postMessage&&!a.attachEvent){b=ia(a);var e="__ym__promise_"+Ua(a)+"_"+Ua(a),f=B;d=C(a,d,function(g){try{var h= +g.data}catch(k){return}h===e&&(f(),g.stopPropagation&&g.stopPropagation(),c())});f=b.D(a,["message"],d);a.postMessage(e,"*")}else W(a,c,0,d)}function ih(a,c,b,d,e){void 0===d&&(d=1);void 0===e&&(e="itc");c=fc(c,b);gc(a,c,d)(Ra(C(a,e),B))}function gc(a,c,b,d){void 0===b&&(b=1);void 0===d&&(d=Aj);pg=Infinity===b;return Ba(function(e,f){function g(){try{var k=c(d(a,b));h=h.concat(k)}catch(l){return e(l)}c(kq);if(c(Fd))return f(h),Bj(a);pg?(c(d(a,1E4)),f(h),Bj(a)):W(a,g,100)}var h=[];lq(g)})}function Bj(a){if(qg.length){var c= +qg.shift();pg?c():W(a,c,100)}else rg=!1}function lq(a){rg?qg.push(a):(rg=!0,a())}function pf(a){return Ba(function(c,b){b(a)})}function Bo(a){return Ba(function(c,b){a.then(b,c)})}function mq(a){var c=[],b=0;return Ba(function(d,e){z(function(f,g){f(Ra(d,function(h){try{c[g]=h,b+=1,b===a.length&&e(c)}catch(k){d(k)}}))},a)})}function Ao(a){var c=[],b=!1;return Ba(function(d,e){function f(g){c.push(g)===a.length&&d(c)}z(function(g){g(Ra(f,function(h){if(!b)try{e(h),b=!0}catch(k){f(k)}}))},a)})}function Ra(a, +c){return function(b){return b(a,c)}}function fc(a,c){void 0===c&&(c=O);return Ba({Xa:a,Xd:c,Ie:!1,wa:0})}function zj(a){function c(){function d(){b=!0;a.wa+=1}b=!1;a.Xd(a.Xa[a.wa],function(){d()});b||(a.wa+=1,d=v(a,zj))}for(var b=!0;!Fd(a)&&b;)c()}function Aj(a,c){return function(b){var d=ha(a),e=d(aa);return Cj(function(f,g){d(aa)-e>=c&&g(Dj)})(b)}}function ze(a,c){return function(b){var d=ha(a),e=d(aa);return Ae(function(f){d(aa)-e>=c&&Dj(f)})(b)}}function Ae(a){return function(c){for(var b;c.Xa.length&& +!Fd(c);)b=c.Xa.pop(),b=c.Xd(b,c.Xa),a(c);return b}}function nq(a){Fd(a)&&db(Kc("i"));var c=a.Xd(a.Xa[a.wa]);a.wa+=1;return c}function kq(a){a.Ie=!1}function Dj(a){a.Ie=!0}function jq(a){a.wa=a.Xa.length}function Fd(a){return a.Ie||a.Xa.length<=a.wa}function Bb(a,c){return function(b,d){return Ej(a,c,d,b)}}function Ej(a,c,b,d,e,f){var g;void 0===e&&(e=0);void 0===f&&(f=0);var h=x({Ca:[]},d.Y),k=c[f],l=k[0];k=k[1];var m=b[e];h.xb&&h.xb["Content-Type"]||!h.fa||(h.xb=x({},h.xb,(g={},g["Content-Type"]= +"application/x-www-form-urlencoded",g)),h.fa="site-info="+be(h.fa));h.Ue=h.fa?"POST":"GET";h.Wb=oq(a,d,l);h.Ca.push(l);x(d.Y,h);g=""+m+(d.Oa&&d.Oa.Ti?"/1":"");var p=0;p=pq(a,g,h);return k(g,h).then(function(q){kb(a,{name:"requestSuccess",data:{body:q,requestId:p}});return{$c:q,Ig:e}})["catch"](function(q){kb(a,{name:"requestFail",data:{error:q,requestId:p}});var r=f+1>=c.length,t=e+1>=b.length;r&&t&&db(q);return Ej(a,c,b,d,!t&&r?e+1:e,r?0:f+1)})}function oq(a,c,b){var d=x({},c.G);a=ha(a);c.H&&(d["browser-info"]= +Ca(c.H.l()).C("st",a(ue)).za());!d.t&&(c=c.Bb)&&(c.C("ti",b),d.t=c.za());return d}function rb(a){a=ha(a);return Math.round(a(sg)/50)}function sg(a){var c=a.ya,b=c[1];a=c[0]&&b?b():aa(a)-a.yi;return Math.round(a)}function ue(a){return Math.round(aa(a)/1E3)}function ib(a){return Math.floor(aa(a)/1E3/60)}function aa(a){var c=a.Qe;return 0!==c?c:tg(a.l,a.ya)}function Uf(a){var c=ia(a),b=Fj(a),d={l:a,Qe:0,ya:b,yi:tg(a,b)},e=b[1];b[0]&&e||c.D(a,["beforeunload","unload"],function(){0===d.Qe&&(d.Qe=tg(a, +d.ya))});return Ba(d)}function qq(a){return(10>a?"0":"")+a}function wi(a,c,b){function d(){f=0;g&&(g=!1,f=W(a,d,b),e.O(h))}var e=qd(a),f,g=!1,h;c.D(function(k){g=!0;h=k;f||d();return B});return e}function rq(a,c){return a.clearInterval(c)}function sq(a,c,b,d){return a.setInterval(C(a,"i.err."+(d||"def"),c),b)}function W(a,c,b,d){return se(a,C(a,"d.err."+(d||"def"),c),b)}function fd(a){var c={};return{D:function(b,d){z(function(e){n(c,e)||(c[e]=qd(a));c[e].D(d)},b);return this},na:function(b,d){z(function(e){n(c, +e)&&c[e].na(d)},b);return this},O:function(b,d){return n(c,b)?C(a,"e."+d,c[b].O)(d):[]}}}function qd(a){var c=[],b={};b.Bk=c;b.D=u(oa("push",c),v(b,O));b.na=u(Rb(Mb(a))(c),Rb(oa("splice",c))(1),v(b,O));b.O=u(O,Rb(ja),tq(c));return b}function E(a,c,b){return function(){return C(arguments[0],a,c,b).apply(this,arguments)}}function C(a,c,b,d,e){var f=db,g=b||f;return function(){var h=d;try{h=g.apply(e||null,arguments)}catch(k){ke(a,c,k)}return h}}function tg(a,c){var b=c||Fj(a),d=b[0];b=b[1];return!isNaN(d)&& +S(b)?Math.round(b()+d):a.Date.now?a.Date.now():(new a.Date).getTime()}function Fj(a){a=ji(a);var c=n(a,"timing.navigationStart"),b=n(a,"now");b&&(b=D(b,a));return[c,b]}function ji(a){return n(a,"performance")||n(a,"webkitPerformance")}function ke(a,c,b){var d="u.a.e",e="";b&&("object"===typeof b?(d=b.message,e="string"===typeof b.stack&&b.stack.replace(/\n/g,"\\n")||"n.s.e.s"):d=""+b);uq(d)||Oa(u(oa("indexOf",d),la(-1),Gb),vq)||wq(d)&&.1<=a.Math.random()||z(u(O,Mc(["jserrs",d,c,e]),ja),Gj)}function Te(){var a= +Aa(arguments);return db(Sa(a))}function Sa(a){var c="";ea(a)?c=L(".",a):Ea(a)&&(c=a);return Kc("err.kn("+ra.fb+")"+c)}function xq(a){this.message=a}function Hj(a,c,b,d,e){var f=a.addEventListener&&a.removeEventListener,g=!f&&a.attachEvent&&a.detachEvent;if(f||g)if(e=e?f?"removeEventListener":"detachEvent":f?"addEventListener":"attachEvent",f)a[e](c,b,d);else a[e]("on"+c,b)}function pq(a,c,b){var d=Ua(a);kb(a,{name:"request",data:{url:c,requestId:d,Lk:b}});return d}function kb(a,c){var b=c.ea;if(b){var d= +b.split(":");b=d[1];d=Ij(wh(d[0]));if("1"===b||d)return}b=yq(a);1E3===b.length&&b.shift();b.push(c)}function vd(a){return a?u(ya,ud(function(c,b){var d=b[0],e=b[1];V(e)||na(e)||c.push(d+"="+be(e));return c},[]),ad("&"))(a):""}function zq(a){return a?u(fb(function(c){c=c.split("=");var b=c[1];return[c[0],na(b)?void 0:ij(b)]}),ud(function(c,b){c[b[0]]=b[1];return c},{}))(a.split("&")):{}}function ij(a){var c="";try{c=decodeURIComponent(a)}catch(b){}return c}function be(a){try{return encodeURIComponent(a)}catch(c){}a= +L("",Y(function(c){return 55296>=c.charCodeAt(0)},a.split("")));return encodeURIComponent(a)}function je(a,c,b){return A(u(tc,Mc([a,b]),ja),Jj[c]||[])}function Kj(a,c,b,d){a[c]||(a[c]=[]);b&&!na(d)&&Lj(a[c],b,d)}function Lj(a,c,b){for(var d=[c,b],e=-1E4,f=0;f=e){a.splice(f,0,d);return}e=g}a.push(d)}function cc(a){z(function(c){var b=c[1];Ue[c[0]]={ia:b.ia,Za:b.Za}},ya(a))}function tl(a,c,b,d,e){var f="object"===typeof a?a:{id:a, +da:d,oc:e,ba:b};a=M(function(g,h){var k=h[1],l=k.Za;k=f[k.ia];g[h[0]]=l?l(k):k;return g},{},ya(c));Mj(a,a.ba||{});return a}function Aq(a,c){return M(function(b,d){b[c[d[0]].ia]=d[1];return b},{},ya(a))}function Nj(a){a=N(a);return dc[a]&&dc[a].Hj}function Mj(a,c){var b=N(a),d=n(c,"__ym.turbo_page"),e=n(c,"__ym.turbo_page_id");dc[b]||(dc[b]={});if(d||e)dc[b].Hj=d,dc[b].Ij=e}function Oj(a){return Be(a)||od(a)||/mobile/i.test(sb(a))||!V(n(a,"orientation"))}function cf(a,c){if(Gd(a)&&c){var b=sb(a).match(Bq); +if(b&&b.length)return+b[1]>=c}return!1}function df(a,c){var b=sb(a);return b&&(b=b.match(Cq))&&1=c:!1}function og(a){return H("prerender",A(v(n(a,"document"),n),["webkitVisibilityState","visibilityState"]))}function Ua(a,c,b){var d=V(b);V(c)&&d?(d=1,c=1073741824):d?d=1:(d=c,c=b);return a.Math.floor(a.Math.random()*(c-d))+d}function wh(a){try{return parseInt(a,10)}catch(c){return null}}function ae(a,c){return a.isFinite(c)&&!a.isNaN(c)&&"[object Number]"===ug(c)}function Dq(a){for(var c= +[],b=a.length-1;0<=b;--b)c[a.length-1-b]=a[b];return c}function La(a,c){z(u(O,oa("push",a)),c);return a}function vg(a,c){return Array.prototype.sort.call(c,a)}function zd(a){return a.splice(0,a.length)}function qa(a){return a?ea(a)?a:Ce?Ce(a):"number"===typeof a.length&&0<=a.length?Pj(a):[]:[]}function wg(a,c,b){return b?a:c}function Eq(a,c){if(!Gd(a))return!0;try{c.call({0:!0,length:-Math.pow(2,32)+1},function(){throw 1;})}catch(b){return!1}return!0}function Fq(a,c){for(var b="",d=0;da.length)return c;M(function(b,d,e){if(e=== +a.length-1)return b;e===a.length-2?b[d]=a[e+1]:b[d]||(b[d]={});return b[d]},c,a);return c}function n(a,c){return a?M(function(b,d){if(na(b))return b;try{return b[d]}catch(e){}return null},a,c.split(".")):null}function Jd(a){a=a.Ya=a.Ya||{};var c=a._metrika=a._metrika||{};return{Ra:function(b,d){xg.call(c,b)||(c[b]=d);return this},C:function(b,d){c[b]=d;return this},o:function(b,d){var e=c[b];return xg.call(c,b)||V(d)?e:d}}}function wd(a,c){return na(a)?!1:xg.call(a,c)}function w(a,c){var b=[],d=[]; +var e=c?c:O;return function(){var f=Aa(arguments),g=e.apply(void 0,f),h=Uj(g,d);if(-1!==h)return b[h];f=a.apply(void 0,f);b.push(f);d.push(g);return f}}function Mb(a){if(yg)return yg;var c=!1;try{c=[].indexOf&&0===[void 0].indexOf(void 0)}catch(d){}var b=a.Array&&a.Array.prototype&&Ka(a.Array.prototype.indexOf,"indexOf");return yg=a=c&&b?function(d,e){return b.call(e,d)}:Lq}function Lq(a,c){for(var b=0;bd)break}b=-1}return b}function Ea(a){return"string"===typeof a}function ug(a){return Object.prototype.toString.call(a)}function Aa(a){if(Ce)try{return Ce(a)}catch(c){}return Pj(a)}function Pj(a){for(var c=a.length,b=[],d=0;d35+a.length)return!1;for(var e=d-13,f=0,g=8;ge)break}return!1} +function B(){}function Gb(a){return!a}function wb(a,c){return c}function O(a){return a}function Ja(a,c){function b(){this.constructor=a}zg(a,c);a.prototype=null===c?Object.create(c):(b.prototype=c.prototype,new b)}function wa(){for(var a=0,c=0,b=arguments.length;c>8,g&=255,g^=h),d+=g,e+=d;while(--f);d=(d&255)+(d>>8);e=(e&255)+(e>>8)}a=(d&255)+(d>>8)<<8|(e&255)+(e>>8);return 65535===a?0:a}function qb(a,c){if(!c)return null;try{return a.JSON.parse(c)}catch(b){return null}}function kc(a){a=""+a;for(var c=2166136261,b=a.length,d=0;d>>0}function gj(a,c,b,d,e){void 0===e&&(e=!1);return cg(a,c,"",-100,b,d,e)}function Bc(a,c,b){void 0===c&&(c="_ym_");void 0===b&&(b="");var d=Sq(a),e=1===(d||"").split(".").length?d:"."+d,f=b?"_"+b:"";return{uc:function(g,h,k){gj(a,""+c+g+f,h||e,k);return this},o:function(g){return fe(a,""+c+g+f)},C:function(g,h,k,l,m){cg(a,""+c+g+f,h,k,l||e,m);return this}}}function ul(a,c,b,d){var e=ak[b];return e?function(){var f=Aa(arguments);try{var g=d.apply(void 0, +f);var h=I(a);h.Ra("mt",{});var k=h.o("mt"),l=k[e];k[e]=l?l+1:1}catch(m){db(m)}return g}:d}function Hc(a,c){var b=Tq(a);return b?(b.href=c,{protocol:b.protocol,host:b.host,port:b.port,hostname:b.hostname,hash:b.hash,search:b.search,query:b.search.replace(/^\?/,""),pathname:b.pathname||"/",path:(b.pathname||"/")+b.search,href:b.href}):{}}function bk(a){return(a=T(a).hash.split("#")[1])?a.split("?")[0]:""}function Uq(a,c){var b=bk(a);ck=sq(a,function(){var d=bk(a);d!==b&&(c(),b=d)},200,"t.h");return D(rq, +null,a,ck)}function Vq(a,c,b){var d,e,f=c.da,g=c.Te,h=c.Ac,k=I(a),l=Ca((d={},d.wh=1,d.pv=1,d));Ve(f)&&a.Yg&&a.Yg.Zj&&l.C("ad","1");g&&l.C("ut","1");f=k.o("lastReferrer");d=T(a).href;h={G:(e={},e["page-url"]=h||d,e["page-ref"]=f,e),H:l};b(h,c)["catch"](C(a,"g.s"));k.C("lastReferrer",d)}function Wq(a,c,b){function d(){ma(a,h);g(!1)}function e(){k=!0;g(!1);c()}function f(){ma(a,h);if(k)g(!1);else{var P=Math.max(0,b-(q?r:r+l(aa)-t));P?h=W(a,e,P,"u.t.d.c"):e()}}function g(P){z(function(X){var xa=X[0], +sa=X[1];X=X[2];P?y.D(xa,sa,X):y.dc(xa,sa,X)},G)}var h=0,k=!1;if(kg(a))return h=W(a,c,b,"u.t.d"),d;var l=ha(a),m=!1,p=!1,q=!0,r=0,t=l(aa),y=ia(a),G=[[a,["blur"],function(){q=m=p=!0;r+=l(aa)-t;t=l(aa);f()}],[a,["focus"],function(){m||p||(r=0);t=l(aa);m=p=!0;q=!1;f()}],[a.document,["click","mousemove","keydown","scroll"],function(){p||(m=!0,q=!1,p=!0,f())}]];g(!0);f();return d}function Se(a,c,b,d){return function(){if(Ga(a,c)){var e=Aa(arguments);return d.apply(void 0,e)}}}function mb(a,c){a=[a[0]>>> +16,a[0]&65535,a[1]>>>16,a[1]&65535];c=[c[0]>>>16,c[0]&65535,c[1]>>>16,c[1]&65535];var b=[0,0,0,0];b[3]+=a[3]*c[3];b[2]+=b[3]>>>16;b[3]&=65535;b[2]+=a[2]*c[3];b[1]+=b[2]>>>16;b[2]&=65535;b[2]+=a[3]*c[2];b[1]+=b[2]>>>16;b[2]&=65535;b[1]+=a[1]*c[3];b[0]+=b[1]>>>16;b[1]&=65535;b[1]+=a[2]*c[2];b[0]+=b[1]>>>16;b[1]&=65535;b[1]+=a[3]*c[1];b[0]+=b[1]>>>16;b[1]&=65535;b[0]+=a[0]*c[3]+a[1]*c[2]+a[2]*c[1]+a[3]*c[0];b[0]&=65535;return[b[0]<<16|b[1],b[2]<<16|b[3]]}function ec(a,c){a=[a[0]>>>16,a[0]&65535,a[1]>>> +16,a[1]&65535];c=[c[0]>>>16,c[0]&65535,c[1]>>>16,c[1]&65535];var b=[0,0,0,0];b[3]+=a[3]+c[3];b[2]+=b[3]>>>16;b[3]&=65535;b[2]+=a[2]+c[2];b[1]+=b[2]>>>16;b[2]&=65535;b[1]+=a[1]+c[1];b[0]+=b[1]>>>16;b[1]&=65535;b[0]+=a[0]+c[0];b[0]&=65535;return[b[0]<<16|b[1],b[2]<<16|b[3]]}function Oc(a,c){c%=64;if(32===c)return[a[1],a[0]];if(32>c)return[a[0]<>>32-c,a[1]<>>32-c];c-=32;return[a[1]<>>32-c,a[0]<>>32-c]}function hb(a,c){c%=64;return 0===c?a:32>c?[a[0]<>>32-c,a[1]<< +c]:[a[1]<>>1]);a=mb(a,[4283543511,3981806797]);a=ta(a,[0,a[0]>>>1]);a=mb(a,[3301882366,444984403]);return a=ta(a,[0,a[0]>>>1])}function Xq(a,c){void 0===c&&(c=210);var b=a||"",d=c||0,e=b.length-b.length%16;d={R:[0,d],T:[0,d]};for(var f=0;f>>0).toString(16)).slice(-8)+("00000000"+(d.R[1]>>> +0).toString(16)).slice(-8)+("00000000"+(d.T[0]>>>0).toString(16)).slice(-8)+("00000000"+(d.T[1]>>>0).toString(16)).slice(-8)}function Ld(a,c,b){var d=c.getAttribute("itemtype");b=ub('[itemprop~="'+b+'"]',c);return d?Y(function(e){return e.parentNode&&$b("[itemtype]",a,e.parentNode)===c},b):b}function ab(a,c,b){return(a=Ld(a,c,b))&&a.length?a[0]:null}function Ya(a){if(!a)return"";a=ea(a)?a:[a];return a.length?a[0].getAttribute("content")||Qb(a[0]):""}function ek(a){return a?a.attributes&&a.getAttribute("datetime")? +a.getAttribute("datetime"):Ya(a):""}function kd(a,c,b){a=c&&(lc(c.className,"ym-disable-keys")||lc(c.className,"-metrika-nokeys"));return b&&c?a||!!cq(["ym-disable-keys","-metrika-nokeys"],c).length:a}function sf(a,c){return xe(c)?"password"===c.type||c.name&&H(c.name.toLowerCase(),fk)||c.id&&H(c.id.toLowerCase(),fk):!1}function gk(a,c){var b=Math.max(0,Math.min(c,65535));La(a,[b>>8,b&255])}function Jb(a,c){La(a,[c&255])}function gb(a,c,b){return-1!==Mb(a)(b,Yq)?(Jb(c,b),!1):!0}function R(a,c){for(var b= +Math.max(0,c|0);127>=7;La(a,[b])}function Dg(a,c){R(a,c.length);for(var b=0;b=d)return null;if(c.attributes)for(var e=c;e;){if(e.attributes.ek)return null;e=e.parentElement}e= +64;var f=ve(a,c),g=f&&f[Va]?f[Va]:0;0>g&&(g=0);b=(b||"").toUpperCase();var h=ar()[b];h||(e|=2);var k=oj(a,c);k||(e|=4);var l=xf(a,c);(f=f?xf(a,f):null)&&l[0]===f[0]&&l[1]===f[1]&&l[2]===f[2]&&l[3]===f[3]&&(e|=8);oc[d].Xf=l[0]+"x"+l[1];oc[d].size=l[2]+"x"+l[3];c.id&&"string"===typeof c.id&&(e|=32);f=[];if(gb(a,f,1))return null;R(f,d);Jb(f,e);R(f,g);h?Jb(f,h):Eg(f,b);k&&R(f,k);e&8||(R(f,l[0]),R(f,l[1]),R(f,l[2]),R(f,l[3]));e&32&&Eg(f,c.id);Jb(f,0);return f}function br(a,c){var b=c[Va];if(!b||0>b||!vf(c)|| +!c.form||Rh(a,c.form))return[];var d=qj(a,c.form);if(0>d)return[];if(xe(c)){var e={text:0,color:0,tc:0,lk:0,"datetime-local":0,email:0,Vf:0,Ik:0,search:0,Ok:0,time:0,url:0,month:0,Rk:0,password:2,Hk:3,hk:4,file:6,image:7};e=e[c.type]}else{e={bk:1,ck:5};var f=Ia(c);e=V(f)?"":e[f]}if("number"!==typeof e)return[];f=-1;for(var g=c.form.elements,h=g.length,k=0,l=0;kf)return[];g=[];if(gb(a,g,7))return[];R(g,b);R(g,d);R(g,e);Dg(g,c.name||""); +R(g,f);return g}function cr(a,c,b){var d=qj(a,b);if(0>d)return[];var e=b.elements,f=e.length;b=[];for(var g=0;gm?c=[]:(l=(k={},k.mousemove=2,k.click=32,k.dblclick= +33,k.mousedown=4,k.mouseup=30,k.touch=12,k)[f])?(k=[],d=jg(c,d),gb(c,k,l)?c=[]:(R(k,a),R(k,m),R(k,Math.max(0,h[0]-d.left)),R(k,Math.max(0,h[1]-d.top)),/^mouse(up|down)|click$/.test(f)&&(c=g||b,Jb(k,2>c?1:c===(g?2:4)?4:2)),c=k)):c=[]):c=[];return wa(e,c)}function gr(a){var c=null,b=a.l,d=b.document;if(b.getSelection){d=void 0;try{d=b.getSelection()}catch(g){return[]}if(Ta(d))return[];var e=""+d;c=d.anchorNode}else d.selection&&d.selection.createRange&&(d=d.selection.createRange(),e=d.text,c=d.parentElement()); +if("string"!==typeof e)return[];try{for(;c&&1!==c.nodeType;)c=c.parentNode}catch(g){return[]}if(!c)return[];d=id(b,c).tb||kd(b,c,!0);c=c.getElementsByTagName("*");for(var f=0;f=d.length?(b=d,d=""):200>=d.length?(b=d.substr(0,100),d=d.substr(100)):(b=d.substr(0,97),d=d.substr(d.length-97)),c=[],gb(a.l,c,29)?a=[]:(R(c,e),Dg(c,b),Dg(c,d),a=c),a}function hr(a){return wa(Ge(a), +gr(a)||[])}function lk(a){return(a.shiftKey?2:0)|(a.ctrlKey?4:0)|(a.altKey?1:0)|(a.metaKey?8:0)|(a.ctrlKey||a.altKey?16:0)}function mk(a){var c=[];Gg||(Gg=!0,Fg&&c.push.apply(c,Zq(a.l,rb(a.l))),Hb(a.l,function(){Gg=!1},"fv.c"));return c}function nk(a,c,b,d){var e=vc(c);if(!e||zf(a,e))return[];var f=de(e),g=yf(e);c=id(a,e).tb;var h=I(a);if(!f&&(g&&h.o("isEU")||kd(a,e)))a=[];else{f=nc(a,e);h=rb(a);g=[];if(gb(a,g,38))a=[];else{R(g,h);gk(g,b);Jb(g,d);a=e[Va];if(!a||0>a)a=0;R(g,a);Jb(g,c?1:0);a=g}a=wa(f, +a)}return a}function ir(a){var c=a.l,b=a.ra,d=b.keyCode,e=lk(b),f=[],g=v(f,La);if({3:1,8:1,9:1,13:1,16:1,17:1,18:1,19:1,20:1,27:1,33:1,34:1,35:1,36:1,37:1,38:1,39:1,40:1,45:1,46:1,91:1,92:1,93:1,106:1,110:1,111:1,144:1,145:1}[d]||112<=d&&123>=d||96<=d&&105>=d||e&16)19===d&&4===(e&-17)&&(d=144),g(nk(c,b,d,e|16)),Hg=!1,Hb(c,function(){Hg=!0},"fv.kd"),!(67===d&&e&4)||e&1||e&2||g(mk(a));return f}function jr(a){var c=a.l;a=a.ra;var b=[];Hg&&!Ig&&0!==a.which&&(b.push.apply(b,nk(c,a,a.charCode||a.keyCode, +lk(a))),Ig=!0,Hb(c,function(){Ig=!1},"fv.kp"));return b}function ok(a){var c=a.l,b=vc(a.ra);if(!b||Rh(c,b))return[];var d=[];if("FORM"===b.nodeName){for(var e=b.elements,f=0;fd&&2>=k.browserInfo.rqnl&&(k.d=1,h={protocol:k.protocol,host:k.host,Pa:k.resource,ij:k.postParams,ba:k.params,hh:k.browserInfo,rk:k.ghid,time:k.time,Xb:Ha(h),uh:k.counterId, +da:k.counterType},k.telemetry&&(h.Bb=k.telemetry),f.push(h));return f},[],ya(b))}),Pp=/^[a-z][\w.+-]+:/i,Ik=w(td),Qg,Fb=[[ng,1],[te,2],[Pb(),3],[$f,4]],Wf=[],xb=v(Fb,Lj);xb(Xf,100);var Ob=(Qg={},Qg.h=Fb,Qg),ba=v(Ob,Kj);xb(function(a,c){return{ca:function(b,d){var e=(b.V||{}).ba,f=b.Y;f=void 0===f?{}:f;if(e&&(Mj(c,e),!f.fa&&b.H&&b.G)){var g=jb(a,e),h=Ik(a),k=b.H.o("pv");g&&!b.G.nohit&&(kb(a,{ea:N(c),name:"params",data:{Pk:e}}),k?encodeURIComponent(g).length>ra.Rg?h.push([b.H,e]):b.G["site-info"]=g: +(f.fa=g,b.Y=f,b.Oa||(b.Oa={}),b.Oa.Ti=!0))}d()},Ba:function(b,d){var e=Ik(a),f=Ga(a,c),g=f&&f.params;g&&(f=Y(u(tc,la(b.H)),e),z(function(h){g(h[1]);h=He(a)(h,e);e.splice(h,1)},f));d()}}},-1);Ob["1"]=Y(u(tc,la($f),Gb),Fb);xb(function(a){return{ca:function(c,b){var d=c.G;if(!c.H||!d)return b();var e=d["page-ref"],f=d["page-url"];e&&f!==e?d["page-ref"]=$i(a,e):delete d["page-ref"];d["page-url"]=$i(a,f).slice(0,ra.Tg);return b()}}},-100);ba("r",te,1);ba("r",function(a){return{ca:function(c,b){var d=c.H, +e=void 0===d?Ca():d,f=c.V.Xb,g=Bd(a);d=e.o("rqnl",0)+1;e.C("rqnl",d);if(e=n(g,L(".",[f,"browserInfo"])))e.rqnl=d,Yf(a);b()},Ba:function(c,b){bj(a,c);b()}}},2);var Lp=/[^a-z0-9.:-]/,Rg,ac=[],Sg={};ac.push(Wi,0,Nb,Vf,Ad);var Jk=[Nb];Jk.push(Vf);var Kk=Eb(Jk),Tc=Eb([Ad]),$r=Eb([Wi,Ad]),Le=Eb([0,Nb,Vf,Ad]),ua=(Rg={},Rg.h=Kk,Rg);ua.r=Le;ua["1"]=Le;var bd=w(function(a,c){var b=Sg["*"]?Sg["*"]:c&&Sg[c];b||(b=c?ua[c]||[]:ac);b=M(function(d,e,f){(e=e&&e(a))&&d.push([f,e]);return d},[],b);b.length||Te();return b}, +wb),Tg,as=D(K.reject,K,Sa()),va=(Tg={},Tg.h=Xa,Tg);va["1"]=Xa;va.r=Xa;var za=E("g.sen",function(a,c,b){var d=bd(a,c);b=b?Op(a,c,b):[];var e=va[c],f=e?e(a,d,b):Xa(a,d,b);return function(){var g=Aa(arguments),h=g[0];g=g.slice(1);var k=h.Y;h=x(h,{Y:x(void 0===k?{}:k,{Ca:[c]})});return f.apply(void 0,wa([h],g))}},as),Ep=ka(function(a,c){if(!c[a]){var b,d=new K(function(e){b=e});c[a]={eg:b,bb:d,fg:!1}}return c[a].bb}),Vi=w(u(wc,Ba)),gi=u(U("settings.pcs"),la("1")),Od=w(function(a,c){var b=n(a,"console"), +d=n(b,"log");d=De("log",d)?D(d,b):B;var e=n(b,"warn");e=De("warn",e)?D(e,b):d;var f=n(b,"error");b=De("error",f)?D(f,b):d;return{log:Lc(a,"log",c,d),error:Lc(a,"error",c,b),warn:Lc(a,"warn",c,e)}}),bs=E("dc.init",function(a,c){function b(k){for(var l=[],m=1;mMath.random();k.C("lastHit",Yb);Yb=Ca((xa={},xa.nb=1,xa.cl=t,xa.ar=1,xa));xa=xd(c);xa={G:(sa={},sa["page-url"]=xa.url||T(a).href,sa),H:Yb,V:{force:G}};sa=Od(a,N(c)).warn;!P.callback&&P.ctx&&sa('"callback" argument missing');(sa=G||X||sd)||(sa=a.location.href,X=a.document.referrer,sa=!(sa&&X?Oi(sa)===Oi(X):!sa&&!X));if(sa)return sa=g(xa,c),Jc(a,"l.o.l",sa,P.callback,P.ctx)}return null}}var e,f,g=za(a,"n", +c),h=N(c),k=Rc(a,c.id),l=v(v(h,Me(a)),u(ja,U("accurateTrackBounce"))),m=v((e={},e.accurateTrackBounce=!0,e),re(a,h)),p=ha(a),q=p(aa),r=!1,t=0,y;pa(a,c,function(G){t=G.Mh-q});c.$e&&b(c.$e);e=(f={},f.notBounce=d(!0),f.u=y,f);e.accurateTrackBounce=b;return e}),rp=ka(pc)("(ym-disable-clickmap|ym-clickmap-ignore)"),ms=E("clm.p",function(a,c){if(Zc(a))return B;var b=za(a,"m",c),d=N(c),e=ha(a),f=e(aa),g=v(v(d,Me(a)),u(ja,U("clickmap"))),h,k=null;d=C(a,"clm.p.c",function(l){var m=g();if(m){var p=I(a),q=p.o("cls", +{kc:0,x:0,y:0});p.C("cls",{kc:q.kc+1,x:q.x+l.clientX,y:q.y+l.clientY});p="object"===typeof m?m:{};q=p.filter;m=p.isTrackHash||!1;var r=A(function(y){return(""+y).toUpperCase()},p.ignoreTags||[]);V(h)&&(h=p.quota||null);var t=!!p.quota;l={element:sp(a,l),position:Li(a,l),button:tp(l),time:e(aa)};p=T(a).href;if(qp(a,l,k,r,q)){if(t){if(!h)return;--h}r=we(a,l.element);q=r[0];r=r[1];t=jg(a,l.element);q=["rn",Ua(a),"x",Math.floor(65535*(l.position.x-t.left)/(q||1)),"y",Math.floor(65535*(l.position.y-t.top)/ +(r||1)),"t",Math.floor((l.time-f)/100),"p",ig(a,l.element),"X",l.position.x,"Y",l.position.y];q=L(":",q);m&&(q+=":wh:1");pp(a,p,q,b,c);k=l}}});return ia(a).D(n(a,"document"),["click"],d)}),ns=E("trigger.in",function(a,c){c.Eg&&Hb(a,F([a,"yacounter"+c.id+"inited"],gq),"t.i")}),os=E("c.m.p",function(a,c){var b,d=N(c);return b={},b.clickmap=v(re(a,d),op),b}),oi=v("form",$b),cp=v("form",ub),np=w(function(a,c){return pa(a,c,U("settings.form_goals"))},wb),ps=v(!0,Ii),qs=E("s.f.i",function(a,c){var b=[]; +ia(a).D(a,["click"],C(a,"s.f.c",F([a,c,b],mp)));ia(a).D(a,["submit"],C(a,"s.f.e",u(U("target"),F([a,c,b],ps))));Ji(a,c,"Form goal. Counter "+c.id+". Init.")}),rs=E("s.f.i",function(a,c){return pa(a,c,function(b){if(n(b,"settings.button_goals")||-1!==T(a).href.indexOf("yagoalsbuttons=1"))ia(a).D(a,["click"],C(a,"c.t.c",u(U("target"),F([a,c],Se(a,c,"",lp))))),Db(a,c,"Button goal. Counter "+c.id+". Init.")()})}),Fi=w(function(a){return L("[^\\d<>]*",a.split(""))}),km=w(function(a){return new RegExp(Fi(a), +"g")}),ip=/\S/,yi=v(["style","display:inline;margin:0;padding:0;font-size:inherit;color:inherit;line-height:inherit"],Ac),Nk=w(function(a){return Zc(a)||!Dd(a)}),ss=E("phc.h",function(a,c){return Oj(a)||Nk(a)?null:pa(a,c,function(b){if(!n(b,"settings.phchange")){var d=Bc(a,"").o("yaHidePhones");d=d?qb(a,d):"";(b=n(b,"settings.phhide")||d)&&qi(a,c,b)}})}),Ok=w(function(a){a=T(a);a=zq(a.search.substring(1));a["_ym_status-check"]=a["_ym_status-check"]||"";a._ym_lang=a._ym_lang||"ru";return a}),ti=u(Ok, +U("_ym_status-check"),Ha),ts=u(Ok,U("_ym_lang")),si=Wa(/^https:\/\/(yastatic\.net\/s3\/metrika|s3\.mds\.yandex\.net\/internal-metrika-betas|[\w-]+\.dev\.webvisor\.com|[\w-]+\.dev\.metrika\.yandex\.ru)\/(\w|-|\/|(\.)(?!\.))+\.js$/),ep=["form","button","phone","status"],Vg=[],bp=w(function(a,c,b){z(u(Mc([a,c,b]),ja),Vg);if(b.inline){c=ri(b);var d=b.data;b=b.id;ni(a,c,void 0===b?"":b,void 0===d?"":d)}else b.resource&&si(b.resource)&&(a._ym__postMessageEvent=c,a._ym__inpageMode=b.inpageMode,a._ym__initMessage= +b.initMessage,fp(a,b.resource))},function(a,c,b){return b.id}),us=E("cs.init",function(a,c){var b,d=ti(a);if(d&&c.id===d&&"0"===c.da){var e=ri((b={},b.lang=ts(a),b.fileId="status",b));W(a,F([a,e,""+d],ni),0,"cs")}}),vs=E("suid.int",function(a,c){var b;return b={},b.setUserID=function(d,e,f){if(Ea(d)||ae(a,d)){var g=Ga(a,c);d=Ac(["__ym","user_id",d]);g.params(d,e||B,f)}else Od(a,N(c)).error("Incorrect user ID")},b}),Ic={position:"absolute"},mi={position:"fixed"},Kf={borderRadius:"50%"},ws=u(U("settings.sm"), +la(1)),xs=vb("siteStatistics",function(a,c){if(!Oj(a))return Zb(a)(Ra(B,F([a,c,function(b){return ws(b)?$o(a,c.id):B}],pa)))}),ys=E("up.int",function(a,c){var b;return b={},b.userParams=C(a,"up.c",function(d,e,f){var g,h=Ga(a,c),k=yd(a,N(c)).warn;h?Ma(d)?(d=(g={},g.__ymu=d,g),(g=h.params)&&g(d,e||B,f)):k("Wrong user params"):k("No counter instance found")}),b}),zs=/[\*\.\?\(\)]/g,As=w(function(a,c,b){try{var d=b.replace("\\s"," ").replace(zs,"");yd(a,"").warn('Function "'+d+'" has been overridden, this may cause issues with Metrika counter')}catch(e){}}, +wb),Bs=E("r.nn",function(a){Cf(a).isEnabled&&me(a,Ag,function(c){c.xa.D(function(b){As(a,b[1],b[0]);Ag.splice(100)})})}),Cs=E("e.a.p",function(a,c){var b,d=Ga(a,c);d=F([u(O,Ba(!0)),Y(Boolean,A(v(d,n),["clickmap","trackLinks","accurateTrackBounce"]))],A);c.Ch&&d();return b={},b.enableAll=d,b}),yb,xc,Jf=(yb={},yb.transaction_id="id",yb.item_id="id",yb.item_name="name",yb.item_brand="brand",yb.promotion_name="coupon",yb.index="position",yb.item_variant="variant",yb.value="revenue",yb.item_category="category", +yb),mf=(xc={},xc.view_item="detail",xc.add_to_cart="add",xc.remove_from_cart="remove",xc.begin_checkout="checkout",xc.purchase="purchase",xc),Km="currencyCode add delete remove purchase checkout detail".split(" "),Fh=E("dl.w",function(a,c,b){function d(){var g=n(a,c);(e=ea(g)&&me(a,g,b))||(f=W(a,d,1E3,"ec.dl"))}var e,f=0;d();return function(){return ma(a,f)}}),Ds=v("add",le),Es=v("remove",le),Fs=v("detail",le),Gs=v("purchase",le),Hs=E("p.cd",function(a,c){if(od(a)||Be(a)){var b=Qa(a);if(na(b.o("jn"))){b.C("jn", +!1);var d=a.ik||pd(a)?function(){}:/./,e=Od(a,N(c));d.toString=function(){b.C("jn",!0);return"Yandex.Metrika counter is initialized"};e.log("%c%s","color: inherit",d)}}}),Wo=/([0-9\\.]+) Safari/,Is=/\sYptp\/\d\.(\d+)\s/,Pk=w(function(a){var c;a:{if((c=sb(a))&&(c=Is.exec(c))&&1=c||df(a,79)?!1:!Md(a)||Xe(a)}),Qk="monospace;sans-serif;serif;Andale Mono;Arial;Arial Black;Arial Hebrew;Arial MT;Arial Narrow;Arial Rounded MT Bold;Arial Unicode MS;Bitstream Vera Sans Mono;Book Antiqua;Bookman Old Style;Calibri;Cambria;Cambria Math;Century;Century Gothic;Century Schoolbook;Comic Sans;Comic Sans MS;Consolas;Courier;Courier New;Garamond;Geneva;Georgia;Helvetica;Helvetica Neue;Impact;Lucida Bright;Lucida Calligraphy;Lucida Console;Lucida Fax;LUCIDA GRANDE;Lucida Handwriting;Lucida Sans;Lucida Sans Typewriter;Lucida Sans Unicode;Microsoft Sans Serif;Monaco;Monotype Corsiva;MS Gothic;MS Outlook;MS PGothic;MS Reference Sans Serif;MS Sans Serif;MS Serif;MYRIAD;MYRIAD PRO;Palatino;Palatino Linotype;Segoe Print;Segoe Script;Segoe UI;Segoe UI Light;Segoe UI Semibold;Segoe UI Symbol;Tahoma;Times;Times New Roman;Times New Roman PS;Trebuchet MS;Verdana;Wingdings;Wingdings 2;Wingdings 3".split(";"), +Js=w(function(a){a=$a(a)("canvas");var c=n(a,"getContext");if(!c)return null;try{var b=D(c,a)("2d");b.font="72px mmmmmmmmmmlli";var d=b.measureText("mmmmmmmmmmlli").width;return function(e){b.font="72px "+e;return b.measureText("mmmmmmmmmmlli").width===d}}catch(e){return null}}),Rk=Ka(String.prototype.repeat,"repeat"),Ks=Rk?function(a,c){return Rk.call(a,c)}:Fq,Dh=v(!0,function(a,c,b,d){b=c.length&&(b-d.length)/c.length;if(0>=b)return d;c=Ks(c,b);return a?c+d:d+c}),Ee=[2277735313,289559509],Fe=[1291169091, +658871167],To={"*":"+","-":"/",dk:"=","+":"*","/":"-","=":"_"},yc=ka(function(a,c){return I(c).o(a,null)}),Ls=/(\?|&)turbo_uid=([\w\d]+)($|&)/,Ms=w(function(a,c){var b=Xb(a),d=T(a).search.match(Ls);return d&&2<=d.length?(d=d[2],c.rb||b.C("turbo_uid",d),d):(b=b.o("turbo_uid"))?b:""}),Po=[["domainLookupEnd","domainLookupStart"],["connectEnd","connectStart"],["responseStart","requestStart"],["responseEnd","responseStart"],["fetchStart","navigationStart"],["redirectEnd","redirectStart"],[function(a,c){return n(c, +"redirectCount")||n(a,"navigation.redirectCount")}],["domInteractive","domLoading"],["domContentLoadedEventEnd","domContentLoadedEventStart"],["domComplete","navigationStart"],["loadEventStart","navigationStart"],["loadEventEnd","loadEventStart"],["domContentLoadedEventStart","navigationStart"]],nb,Oo=[["domainLookupEnd","domainLookupStart"],["connectEnd","connectStart"],["responseStart","requestStart"],["responseEnd","responseStart"],["fetchStart"],["redirectEnd","redirectStart"],["redirectCount"], +["domInteractive","responseEnd"],["domContentLoadedEventEnd","domContentLoadedEventStart"],["domComplete"],["loadEventStart"],["loadEventEnd","loadEventStart"],["domContentLoadedEventStart"]],ki=(nb={},nb.responseEnd=1,nb.domInteractive=1,nb.domContentLoadedEventStart=1,nb.domContentLoadedEventEnd=1,nb.domComplete=1,nb.loadEventStart=1,nb.loadEventEnd=1,nb.unloadEventStart=1,nb.unloadEventEnd=1,nb.secureConnectionStart=1,nb),Ro=w(td),Lo=w(wc),Mo=w(function(a){var c=n(a,"webkitRequestFileSystem"); +if(S(c)&&!od(a))return(new K(D(c,a,0,0))).then(function(){var d=n(a,"navigator.storage")||{};return d.estimate?d.estimate():{}}).then(function(d){return(d=d.quota)&&12E7>d?!0:!1})["catch"](v(!0,O));if(Gd(a))return c=n(a,"navigator.serviceWorker"),K.resolve(V(c));c=n(a,"openDatabase");if(pd(a)&&S(c)){var b=!1;try{c(null,null,null,null)}catch(d){b=!0}return K.resolve(b)}return K.resolve(!n(a,"indexedDB")&&(n(a,"PointerEvent")||n(a,"MSPointerEvent")))}),Ns=w(function(a){return S(n(a,"yandex.getSiteUid"))? +a.yandex.getSiteUid():null}),Yd=w(ii,u(wb,N)),Os=E("pa.plgn",function(a,c){var b=Yd(a,c);b&&b.aa.D(["pluginInfo"],C(a,"c.plgn",function(){var d=I(a);d.C("cmc",d.o("cmc",0)+1);return Aq(c,Ue)}))}),ob,bb,Gl=(ob={},ob.am="com.am",ob.tr="com.tr",ob.ge="com.ge",ob.il="co.il",ob["\u0440\u0444"]="ru",ob["xn--p1ai"]="ru",ob["\u0443\u043a\u0440"]="ua",ob["xn--j1amh"]="ua",ob["\u0431\u0435\u043b"]="by",ob["xn--90ais"]="by",ob),Sk={"mc.edadeal.ru":/^([^/]+\.)?edadeal\.ru$/,"mc.yandexsport.ru":/^([^/]+\.)?yandexsport\.ru$/, +"mc.kinopoisk.ru":/^([^/]+\.)?kinopoisk\.ru$/},Hl=(bb={},bb.ka="ge",bb.ro="md",bb.tg="tj",bb.tk="tm",bb.et="ee",bb.hy="com.am",bb.he="co.li",bb.ky="kg",bb.uk="ua",bb.be="by",bb.tr="com.tr",bb.kk="kz",bb),Fo="ar:1:pv:1:v:"+ra.fb+":vf:"+Pc.version,Go=ra.Ua+"//"+rc+"/watch/"+ra.Og,Tk={},Ps=E("exps.int",function(a,c){var b;return b={},b.experiments=function(d,e,f){var g,h;void 0===e&&(e=B);if(d&&0f(aa)?K.resolve(g):za(a,"f",h)({H:Ca((b={},b.pv=1,b)),G:(d={},d["page-url"]=T(a).href,d["page-ref"]=a.document.referrer,d)},h).then(function(k){var l;k=(l={},l.time=f(aa),l.params=n(k,"settings"),l.bkParams=n(k,"userData"),l);e.C("wasSynced",k);return k})["catch"](C(a,"f.h"))}),Rs=ka(function(a,c){0===parseFloat(n(c, +"settings.c_recp"))&&(a.ce.C("ymoo"+a.ea,a.Bg(ib)),a.vd&&a.vd.destruct&&a.vd.destruct())}),vo=[[["'(-$&$&$'",30102,0],["'(-$&$&$'",29009,0]],[["oWdZ[nc[jh_YW$Yec",30103,1],["oWdZ[nc[jh_YW$Yec",29010,1]]],wo=[[["oWdZ[nc[jh_YW$Yec",30103,1]],[["oWdZ[nc[jh_YW$Yec",29010,1]]],hi={G:{t:'UV|L7,!"T[rwe&D_>ZIb\\aW#98Y.PC6k'}},fi={id:42822899,da:"0"},Ne,Co=(Ne={},Ne.s="p",Ne["8"]="i",Ne),zo=vb("csp",function(a,c){return za(a,"s",c)({},["https://ymetrica1.com/watch/3/1"])}),Wg="et w v z i u vf".split(" "), +oo={L:"stamp",M:"frameId",$:"meta",df:"base",Ff:"hasBase",af:"address",Gg:"ua",te:"prev",Sf:"namespace",Mc:"keystrokes",Lf:"isMeta",Nc:"modifier",wb:"pageWidth",vb:"pageHeight",vg:"startNode",jf:"endNode",Lg:"zoomFrom",Ng:"zoomTo",level:"level",duration:"duration",Ea:"i",Qc:"o",n:"n",r:"r",sc:"ct",Jb:"at",Tf:"nm",Uf:"ns",ne:"pa",qe:"pr",fe:"nx",Wa:"h",Ka:"changes",Ze:"a",cf:"b",od:"c",me:"op"},po=["attributes","attrs"],Oe=function(){function a(c){this.l=c}a.prototype.za=function(c){var b=ie(c);c= +A(D(this.Qa,this),b);return pf(jb(this.l,A(function(d,e){var f;return x({},b[e],(f={},f.data=d,f))},c)))};a.prototype.Qa=function(c){var b=c.data;"string"!==typeof b&&(b=jb(this.l,ie(c.data)));return b};a.prototype.Va=function(c){return encodeURIComponent(c).length};a.prototype.dd=function(c,b){for(var d=Math.ceil(c.length/b),e=[],f=0;f=b;b+=1){var d=Ya(Gc("h"+b,c));if(d)return d}};a.prototype.hi=function(){var c=Gc('[rel="canonical"]',this.root);if(c)return c.href};a.prototype.Df=function(){return 1};a.prototype.zc=function(){return[]};a.prototype.Lh=function(){var c=this,b=this.zc(),d=1;return M(function(e,f){var g=c.Da({element:f,type:c.Df(f)})||[];ea(g)||(g=[g]);g=M(function(h,k){var l=h.values,m=h.Gf;k&&k.chars>Xg[k.type]&&!H(k.id,m)?(l.push(k),m.push(k.id)):k&&k.chars<=Xg[k.type]&&c.th(k.id,k);return{values:l,Gf:m}},{values:[], +Gf:A(U("id"),e)},g).values;return e.concat(A(function(h){var k;h=x((k={index:d,qg:!1},k.involvedTime=0,k),h);d+=1;return h},g))},[],b)};return a}(),Uk=function(a){function c(){var b,d=null!==a&&a.apply(this,arguments)||this;d.id="j";d.Sd=!0;d.gf=L(",",['script[type="application/ld+json"]','script[type="application/json+ld"]','script[type="ld+json"]','script[type="json+ld"]']);d.Mb=(b={},b.id=function(e){var f=e.data["@id"];e=e.data.mainEntity||e.data.mainEntityOfPage;!f&&e&&(f=e["@id"]);return f}, +b.chars=function(e){return"string"===typeof e.data.text?e.data.text.length:Qb(this.La(e)).length},b.authors=function(e){var f=[];f=f.concat(this.yc(e.data,"author"));f=f.concat(this.yc(e.data.mainEntity,"author"));return f.concat(this.yc(e.data.mainEntityOfPage,"author"))},b.pageTitle=function(e){var f=e.data.headline||"";e.data.fk&&(f+=" "+e.data.alternativeHeadline);""===f&&(e.data.name?f=e.data.name:e.data.itemReviewed&&(f=e.data.itemReviewed));3===e.type&&e.data.parentItem&&(f=e.data.parentItem.text); +return f},b.updateDate=function(e){return e.data.dateModified||""},b.publicationDate=function(e){return e.data.datePublished||""},b.pageUrlCanonical=function(e){return e.data.url},b.topics=function(e){return this.yc(e.data,"about",["name","alternateName"])},b.rubric=function(e){var f=this,g=this.La(e);e=Y(Boolean,A(function(h){if(h=qb(f.l,Qb(h))){var k=f.zf(h);if(k)return M(function(l,m){return l?l:"BreadcrumbList"===m["@type"]?m:l},null,k);if("BreadcrumbList"===h["@type"])return h}return null},[e.element].concat(ub(this.gf, +document.body===g?document.documentElement:g))));return e.length&&(e=e[0].itemListElement,ea(e))?Y(Boolean,A(function(h){return Ma(h)&&h.item&&Ma(h.item)&&!f.l.isNaN(h.position)?{name:h.item.name||h.name,position:h.position}:null},e)):[]},b);return d}Ja(c,a);c.prototype.yc=function(b,d,e){void 0===e&&(e=["name"]);if(!b||!b[d])return[];b=ea(b[d])?b[d]:[b[d]];b=Y(O,A(function(f){return f?"string"===typeof f?f:M(function(g,h){return g||""+f[h]},"",e):null},b));return A(function(f){var g;return g={}, +g.name=f,g},b)};c.prototype.La=function(b){var d=b.element,e=b.data["@id"],f=b.data.url;b=null;f&&"string"===typeof f&&(b=this.qf(f));!b&&e&&"string"===typeof e&&(b=this.qf(e));b||(b=e=d.parentNode,!$b("head",this.l,d)&&e&&0!==Qb(e).length)||(b=this.l.document.body);return b};c.prototype.qf=function(b){try{var d=Hc(this.l,b).hash;if(d){var e=Gc(d,this.l.document.body);if(e)return e}}catch(f){}return null};c.prototype.oe=function(b){return this.Pe[b["@type"]]||1};c.prototype.Da=function(b){var d=this, +e=b.element;if(!b.data&&(b.data=qb(this.l,Qb(e)),!b.data||!/schema\.org/.test(b.data["@context"])&&!ea(b.data)))return null;var f=this.zf(b.data);if(f)return A(function(h){if(!H(h["@type"],d.zb["schema.org"]))return null;h={element:e,data:h,type:d.oe(h)};return a.prototype.Da.call(d,h)},f);if("QAPage"===b.data["@type"]){var g=b.data.mainEntity||b.data.mainEntityOfPage;if(!g)return null}"Question"===b.data["@type"]&&(g=b.data);return g?(b=ic(v(g,n),["acceptedAnswer","suggestedAnswer"]),A(function(h){var k; +if(!h||!H(h["@type"],d.zb["schema.org"]))return null;h={element:e,type:d.oe(h),data:x((k={},k.parentItem=g,k),h)};return a.prototype.Da.call(d,h)},b)):H(b.data["@type"],this.zb["schema.org"])?a.prototype.Da.call(this,x(b,{type:this.oe(b.data)})):null};c.prototype.zc=function(){return ub(this.gf,this.root)};c.prototype.zf=function(b){return ea(b)&&b||b&&ea(b["@graph"])&&b["@graph"]};return c}(Yg),Zg=function(a){function c(){var b,d=null!==a&&a.apply(this,arguments)||this;d.id="s";d.Sd=!0;d.Mj=oa("exec", +new RegExp("schema.org\\/("+L("|",ca(d.Pe))+")$"));d.Mb=(b={},b.id=function(e){e=e.element;var f=ab(this.l,e,"identifier");return f?Ya(f):(f=ab(this.l,e,"mainEntityOfPage"))&&f.getAttribute("itemid")?f.getAttribute("itemid"):null},b.chars=function(e){var f=0;e=e.element;for(var g=["articleBody","reviewBody","recipeInstructions","description","text"],h=0;hthis.Qg&&this.flush()};c.prototype.flush=function(){var b=this.buffer;b.length&&(this.send(b),this.buffer=[])};return c}(Xk),sn=/opera mini/i,Yk="first(-|\\.|_|\\s){0,2}name last(-|\\.|_|\\s){0,2}name zip postal phone address passport (bank|credit)(-|\\.|_|\\s){0,2}card card(-|\\.|_|\\s){0,2}number card(-|\\.|_|\\s){0,2}holder cvv card(-|\\.|_|\\s){0,2}exp card(-|\\.|_|\\s){0,2}name card.*month card.*year card.*month card.*year password email birth(-|\\.|_|\\s){0,2}(day|date) second(-|\\.|_|\\s){0,2}name third(-|\\.|_|\\s){0,2}name patronymic middle(-|\\.|_|\\s){0,2}name birth(-|\\.|_|\\s){0,2}place house street city flat state contact.*".split(" "), +hn=["email","tel"],qn=/ym-hide-content/,rn=/ym-show-content/,nn=/^[\w\u0410-\u042f\u0430-\u044f]$/,on=[65,90],pn=[97,122],ln="color radio checkbox date datetime-local email month number password range search tel text time url week".split(" "),jn=new RegExp("("+L("|",Yk)+")","i"),fk=["password","passwd","pswd"],kn=new RegExp("("+L("|",Yk.concat("\u0438\u043c\u044f \u0444\u0430\u043c\u0438\u043b\u0438\u044f \u043e\u0442\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u043d\u043e\u043c\u0435\u0440(-|\\.|_|\\s){0,2}\u043a\u0430\u0440\u0442\u044b \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f(-|\\.|_|\\s){0,2}\u043f\u043e\u0447\u0442\u0430 \u0434\u0430\u0442\u0430(-|\\.|_|\\s){0,2}\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u043c \u0443\u043b\u0438\u0446\u0430 \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0430 \u0433\u043e\u0440\u043e\u0434 \u043e\u0431\u043b\u0430\u0441\u0442\u044c".split(" ")))+ +")","i"),Va="metrikaId_"+Math.random(),oc={ud:0},ar=w(function(){var a;return a={},a.A=1,a.ABBR=2,a.ACRONYM=3,a.ADDRESS=4,a.APPLET=5,a.AREA=6,a.B=7,a.BASE=8,a.BASEFONT=9,a.BDO=10,a.BIG=11,a.BLOCKQUOTE=12,a.BODY=13,a.BR=14,a.BUTTON=15,a.CAPTION=16,a.CENTER=17,a.CITE=18,a.CODE=19,a.COL=20,a.COLGROUP=21,a.DD=22,a.DEL=23,a.DFN=24,a.DIR=25,a.DIV=26,a.DL=27,a.DT=28,a.EM=29,a.FIELDSET=30,a.FONT=31,a.FORM=32,a.FRAME=33,a.FRAMESET=34,a.H1=35,a.H2=36,a.H3=37,a.H4=38,a.H5=39,a.H6=40,a.HEAD=41,a.HR=42,a.HTML= +43,a.I=44,a.IFRAME=45,a.IMG=46,a.INPUT=47,a.INS=48,a.ISINDEX=49,a.KBD=50,a.LABEL=51,a.LEGEND=52,a.LI=53,a.LINK=54,a.MAP=55,a.MENU=56,a.META=57,a.NOFRAMES=58,a.NOSCRIPT=59,a.OBJECT=60,a.OL=61,a.OPTGROUP=62,a.OPTION=63,a.P=64,a.PARAM=65,a.PRE=66,a.Q=67,a.S=68,a.SAMP=69,a.SCRIPT=70,a.SELECT=71,a.SMALL=72,a.SPAN=73,a.STRIKE=74,a.STRONG=75,a.STYLE=76,a.SUB=77,a.SUP=78,a.TABLE=79,a.TBODY=80,a.TD=81,a.TEXTAREA=82,a.TFOOT=83,a.TH=84,a.THEAD=85,a.TITLE=86,a.TR=87,a.TT=88,a.U=89,a.UL=90,a.VAR=91,a.NOINDEX= +100,a}),Yq=[17,18,38,32,39,15,11,7,1],Ys=function(){var a="first(-|\\.|_|\\s){0,2}name last(-|\\.|_|\\s){0,2}name zip postal phone address passport (bank|credit)(-|\\.|_|\\s){0,2}card card(-|\\.|_|\\s){0,2}number card(-|\\.|_|\\s){0,2}holder cvv card(-|\\.|_|\\s){0,2}exp card(-|\\.|_|\\s){0,2}name card.*month card.*year card.*month card.*year password email birth(-|\\.|_|\\s){0,2}(day|date) second(-|\\.|_|\\s){0,2}name third(-|\\.|_|\\s){0,2}name patronymic middle(-|\\.|_|\\s){0,2}name birth(-|\\.|_|\\s){0,2}place house street city flat state".split(" "); +return{qk:new RegExp("("+L("|",a)+")","i"),Ek:new RegExp("("+L("|",a.concat("\u0438\u043c\u044f;\u0444\u0430\u043c\u0438\u043b\u0438\u044f;\u043e\u0442\u0447\u0435\u0441\u0442\u0432\u043e;\u0438\u043d\u0434\u0435\u043a\u0441;\u0442\u0435\u043b\u0435\u0444\u043e\u043d;\u0430\u0434\u0440\u0435\u0441;\u043f\u0430\u0441\u043f\u043e\u0440\u0442;\u041d\u043e\u043c\u0435\u0440(-|\\.|_|\\s){0,2}\u043a\u0430\u0440\u0442\u044b;\u0434\u0430\u0442\u0430(-|\\.|_|\\s){0,2} \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f;\u0434\u043e\u043c;\u0443\u043b\u0438\u0446\u0430;\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0430;\u0433\u043e\u0440\u043e\u0434;\u043e\u0431\u043b\u0430\u0441\u0442\u044c".split(";")))+ +")","i"),nk:/ym-record-keys/i,Vi:"\u2022",Dk:88}}(),kk=fb(v(Ys.Vi,O)),jd=!0,Fg="",Gg=!1,Hg=!0,Ig=!1,fn=ka(function(a,c){var b=F([a,"efv."+c.event],C);c.N=A(u(O,b),c.N);return c}),Zk=w(function(a){var c=[],b=[],d=[];a.document.attachEvent&&!a.opera&&(c.push(wf),b.push(er),b.push(fr));a.document.addEventListener?c.push(ik):(b.push(hk),d.push(ik));c=wa([{target:a,type:"window",event:"beforeunload",N:[B]},{target:a,type:"window",event:"unload",N:[B]},{event:"click",N:[Ge]},{event:"dblclick",N:[Ge]},{event:"mousedown", +N:[Ge]},{event:"mouseup",N:[hr]},{event:"keydown",N:[ir]},{event:"keypress",N:[jr]},{event:"copy",N:[mk]},{event:"blur",N:c},{event:"focusin",N:b},{event:"focusout",N:d}],!a.document.attachEvent||a.opera?[{target:a,type:"window",event:"focus",N:[Ph]},{target:a,type:"window",event:"blur",N:[wf]}]:[],a.document.addEventListener?[{event:"focus",N:[hk]},{event:"change",N:[jk]},{event:"submit",N:[ok]}]:[{type:"formInput",event:"change",N:[jk]},{type:"form",event:"submit",N:[ok]}]);return en(a,c)}),cn= +w(function(a){return wa(uc(a)?[{target:a,type:"document",event:"mouseleave",N:[kr]}]:[])}),Zs=["submit","beforeunload","unload"],$s=w(function(a,c){var b=c(a);return M(function(d,e){d[e.type+":"+e.event]=e.N;return d},{},b)}),at=v(Zk,function(a,c,b,d){return $s(c,a)[b+":"+d]||[]}),dn=/^\s*function submit\(\)/,bt=E("fw.p",function(a,c){var b;if(!(b=c.Ah||!c.Fb)){var d=I(a),e=!1;b=d.o("hitParam",{});var f=N(c);b[f]&&(d=d.o("counters",{}),e=!(!Ve(c.da)||d[f]));b[f]=1;b=e}if(b)return K.resolve(B);b=new Xs(a, +at);return Zm(a,c,b,Zk,Zs)}),$g,$k=($g=function(a){function c(b,d,e,f){void 0===f&&(f=0);d=a.call(this,b,d,e)||this;d.Me=0;d.Hb=0;d.Le=0;d.buffer=[];d.kd=2E3;d.aa=fd(b);d.cd();d.Le=f;return d}Ja(c,a);c.prototype.wf=function(b){return Y(Boolean,this.aa.O("ag",b))};c.prototype.uf=function(b,d){var e=this;b(Ra(C(this.l,"wv2.b.st"),function(f){e.send(f,d)}))};c.prototype.wj=function(b,d){var e=this;ma(this.l,this.hf);var f=Math.ceil(this.qa.Va(d)/63E4),g=this.qa.dd(d,f);z(function(h,k){var l,m=x({},b, +(l={},l.data=h,l.partNum=k+1,l.end=k+1===f,l));l=e.qa.za([m],!1);e.uf(l,[m])},g);this.cd()};c.prototype.send=function(b,d){var e=this;this.aa.O("se",d);return a.prototype.send.call(this,b,d).then(O,function(){e.aa.O("see",d)})};c.xf=function(b,d,e,f,g){c.md[""+b+d]||(this.md[d]=new c(g,f,e,"m"===d?31457280:0));return this.md[d]};c.prototype.Hi=function(){return this.Le&&this.Me>=this.Le};c.prototype.push=function(b){var d=this;if(!this.Hi()){this.aa.O("p",b);var e=this.qa.Qa(b),f=this.qa.Va(e);7E5< +f?this.wj(b,e):(e=this.wf(this.buffer.concat([b])),e=M(function(g,h){return g+d.qa.Va(d.qa.Qa(h))},0,e),this.Hb+e+f>=7E5*.7&&this.flush(),this.buffer.push(b),this.Hb+=f)}};c.prototype.D=function(b,d){this.aa.D([b],d)};c.prototype.na=function(b,d){this.aa.na([b],d)};c.prototype.flush=function(){var b=this.buffer.concat(this.wf(this.buffer));if(b.length){this.buffer=[];this.Me+=this.Hb;this.Hb=0;var d=this.qa.za(b);this.uf(d,b)}};return c}(Xk),$g.md={},$g),Za=function(){function a(c,b,d){this.Li="wv2.c"; +this.Tb=[];this.ja=[];this.l=c;this.K=uf(c,this,d,this.Li);this.F=b;this.ib=this.F.$h();this.start=this.K.J(this.start,"st");this.stop=this.K.J(this.stop,"sp")}a.prototype.start=function(){var c=this;this.Tb=A(function(b){var d=b[0],e=b[2];b=D(c.K.J(b[1],d[0]),c);return c.ib.D(e||c.l,d,b)},this.ja)};a.prototype.stop=function(){z(ja,this.Tb)};a.prototype.Z=function(c){return this.F.ta().Z(c)};return a}(),Xm=["checkbox","radio"],Ym=/pwd|value|password/i,ah=U("location.href"),ct=function(a){function c(b, +d,e){d=a.call(this,b,d,e)||this;d.sa={elements:[],attributes:[]};d.index=0;d.ie=d.K.J(d.ie,"o");d.wd=d.K.J(d.wd,"io");d.ld=d.K.J(d.ld,"ao");d.we=d.K.J(d.we,"a");d.ue=d.K.J(d.ue,"at");d.xe=d.K.J(d.xe,"r");d.ve=d.K.J(d.ve,"c");d.xa=new b.MutationObserver(d.ie);return d}Ja(c,a);c.prototype.start=function(){this.xa.observe(this.l.document.documentElement,{attributes:!0,characterData:!0,childList:!0,subtree:!0,attributeOldValue:!0,characterDataOldValue:!0})};c.prototype.stop=function(){this.xa.disconnect()}; +c.prototype.ld=function(b){var d=b.target;b=b.attributeName;var e=this.sa.elements.indexOf(d);-1===e&&(e=this.sa.elements.push(d)-1,this.sa.attributes[e]={});this.sa.attributes[e]||(this.sa.attributes[e]={});e=this.sa.attributes[e];var f=d.getAttribute(b);e[b]=ce(this.l,d,b,f,this.F.Cc()).value};c.prototype.wd=function(b){function d(k){var l=Mb(e.l)(k,f);return-1===l?(f.push(k),k={Dd:{}},g.push(k),k):g[l]}var e=this,f=[],g=[];z(function(k){var l=k.attributeName,m=k.removedNodes,p=k.oldValue,q=k.target, +r=k.nextSibling,t=k.previousSibling;switch(k.type){case "attributes":e.ld(k);var y=d(q);y.Dd[l]||(y.Dd[l]=ce(e.l,q,l,p,e.F.Cc()).value);break;case "childList":m&&z(function(G){y=d(G);y.sf||x(y,{sf:q,Qh:r?r:void 0,Rh:t?t:void 0})},qa(m));break;case "characterData":y=d(q),y.tf||(y.tf=p)}},b);var h=this.F.ta();z(function(k,l){h.Fe(k,g[l])},f)};c.prototype.ie=function(b){var d=this;if(ah(this.l)){var e=this.F.L();this.wd(b);z(function(f){var g=f.addedNodes,h=f.removedNodes,k=f.target;switch(f.type){case "childList":h&& +h.length&&d.xe(qa(h),e);g&&g.length&&d.we(qa(g),e);break;case "characterData":d.ve(k,e)}},b);this.ue(e)}else this.stop()};c.prototype.ue=function(b){var d=this;z(function(e,f){var g=d.Bc();d.F.X("mutation",{index:g,attributes:d.sa.attributes[f],target:d.Z(e)},"ac",b)},this.sa.elements);this.sa.elements=[];this.sa.attributes=[]};c.prototype.we=function(b,d){var e=this,f=this.Bc();this.F.ta().Gc({ma:b,bd:function(g){g=A(function(h){h=x({},h);delete h.node;return h},g);e.F.X("mutation",{index:f,ma:g}, +"ad",d)}})};c.prototype.xe=function(b,d){var e=this,f=this.Bc(),g=this.F.ta(),h=A(function(k){var l=g.removeNode(k);Gi(e.l,k,function(m){g.removeNode(m)});return l},b);this.F.X("mutation",{index:f,ma:h},"re",d)};c.prototype.ve=function(b,d){var e=this.Bc();this.F.X("mutation",{value:b.textContent,target:this.Z(b),index:e},"tc",d)};c.prototype.Bc=function(){var b=this.index;this.index+=1;return b};return c}(Za),dt=function(){function a(c,b){var d=this;this.xc=[];this.jb=[];this.ee=1;this.Sa=0;this.sb= +{};this.Ic={};this.Pd=function(f){return d.jb.length?H(f,d.jb):!1};this.removeNode=function(f){var g=d.Z(f),h=Ia(f);if(h)return h="NR:"+h.toLowerCase(),d.Pd(h)&&d.aa.O(h,{data:{node:f,id:g}}),g};this.ob=function(f){var g=Ia(f);if(g){var h=f.__ym_indexer;h||(h=d.ee,f.__ym_indexer=h,d.ee+=1,g="NA:"+g.toLowerCase(),d.Pd(g)&&d.aa.O(g,{data:{node:f,id:h}}));return h}return null};this.l=c;var e=uf(c,this,"i");this.aa=fd(c);this.options=b;this.start=e.J(this.start,"st");this.stop=e.J(this.stop,"sp");this.Z= +e.J(this.Z,"i");this.Fe=e.J(this.Fe,"o");this.Gc=e.J(this.Gc,"a");this.removeNode=e.J(this.removeNode,"r");this.ga=e.J(this.ga,"s")}a.prototype.Fe=function(c,b){var d=this.ob(c);Ta(d)||(this.Ic[d]&&this.Z(c),this.Ic[d]=b)};a.prototype.D=function(c,b,d){c=""+b+c;this.jb.push(c);this.Pd(c)||this.jb.push(c);this.aa.D([c],d)};a.prototype.na=function(c,b,d){var e=""+b+c;this.jb=Y(function(f){return f!==e},this.jb);this.aa.na([e],d)};a.prototype.start=function(){this.Sa=W(this.l,u(D(this.ga,this,!1),this.start), +50,"i.s")};a.prototype.stop=function(){this.flush();ma(this.l,this.Sa);this.xc=[]};a.prototype.Gc=function(c){var b=this,d=[],e=0,f={bd:c.bd,result:[],Hc:0,ma:d};this.xc.push(f);z(function(g){Gi(b.l,g,function(h){var k=b.ob(h);Ta(k)||(d.push(h),b.sb[k]&&b.Z(h),b.sb[k]={node:h,event:f,Kj:e},e+=1)})},c.ma)};a.prototype.Z=function(c){if(c===this.l)return 0;var b=this.ob(c),d=this.sb[b],e=this.Uh(b),f=e.sf,g=e.Dd,h=e.tf,k=e.Qh,l=e.Rh;if(d){e=d.event;d=d.Kj;var m=this.l.document.documentElement===c;k= +k||c.nextSibling;var p=l||c.previousSibling;l=!m&&k?this.ob(k):null;p=!m&&p?this.ob(p):null;m=this.l;k=this.options;f=this.ob(f||c.parentNode||c.parentElement)||0;var q=g,r=void 0;void 0===p&&(p=null);void 0===l&&(l=null);void 0===q&&(q={});void 0===r&&(r=Ia(c));if(V(r))c=void 0;else{g={id:b,te:p!==f?p:null,next:l!==f?l:null,parent:f,name:r.toLowerCase(),node:c};if(Bf(c)){if(h=Um(c,h),g.attributes={},g.content=h)if(c=hd(m,c))g.content=""!==h.trim()?mn(m,h):h,g.hidden=c}else h=Vm(m,c,k,q,r),m=h.qb, +g.attributes=h.eh,m&&(g.hidden=m),c.namespaceURI&&lc(c.namespaceURI,"svg")&&(g.Sf=c.namespaceURI);c=g}if(V(c))return;delete this.sb[b];e.result[d]=c;e.Hc+=1;e.ma.length===e.Hc&&e.bd(e.result)}return b};a.prototype.flush=function(){this.ga(!0)};a.prototype.ga=function(c){var b=this;if(ah(this.l)){var d=ca(this.sb);d=A(function(e){return b.sb[e].node},d);d=fc(d,this.Z);c=c?Cj(B):Aj(this.l,20);d(c);this.xc=Y(function(e){return e.Hc!==e.result.length},this.xc)}};a.prototype.Uh=function(c){if(Ta(c))return{}; +var b=this.Ic[c];return b?(delete this.Ic[c],b):{}};return a}(),et=["input","change","keyup","paste","cut"],ft=function(a){function c(b,d,e){b=a.call(this,b,d,e)||this;b.inputs={};b.zd=!1;b.Rc=b.K.J(b.Rc,"ii");b.Sc=b.K.J(b.Sc,"ir");b.Xc=b.K.J(b.Xc,"ri");b.hd=b.K.J(b.hd,"ur");b.Od=b.K.J(b.Od,"ce");b.Fc=b.K.J(b.Fc,"vc");return b}Ja(c,a);c.prototype.start=function(){var b=this,d=this.F.ta();this.zd=this.oh();z(function(e){e=e.toLowerCase();d.D(e,"NA:",D(b.Rc,b));d.D(e,"NR:",D(b.Sc,b))},Af);this.Tb=[this.ib.D(this.l.document, +et,D(this.Od,this)),function(){z(function(e){e=e.toLowerCase();d.na(e,"NA:",b.Rc);d.na(e,"NR:",b.Sc)},Af);z(b.hd,ca(b.inputs))}]};c.prototype.hd=function(b){if(this.zd){var d=this.inputs[b];d&&(b=d.ej,d=d.element,b&&this.l.Object.defineProperty(d,this.Dc(d),b))}};c.prototype.Sc=function(b){b&&this.hd(b.data.id)};c.prototype.Rc=function(b){b&&(b=b.data,this.Xc(b.node,b.id))};c.prototype.Dc=function(b){return ye(b)?"checked":"value"};c.prototype.Od=function(b){if(b=b.target){var d=this.Dc(b);this.Fc(b[d], +b)}};c.prototype.Fc=function(b,d){var e=this.Z(d),f=this.inputs[e];if(!f&&(f=this.Xc(f,e),!f))return;e=f.qh;var g=f.value,h=this.Dc(d);b&&!H(typeof b,["string","boolean","number"])||b===g||(g=ce(this.l,d,h,b,this.F.Cc()).value,e?this.F.X("event",{target:this.Z(d),checked:!!b},"change"):(e=de(d),h=yf(d),this.F.X("event",{value:g,hidden:h&&!e,target:this.Z(d)},"change")),f.value=b)};c.prototype.Xc=function(b,d){var e=this;if(!rf(b)||"__ym_input_override_test"===b.getAttribute("class")||this.inputs[d])return null; +var f=ye(b),g=this.Dc(b),h={element:b,qh:f,value:b[g]};this.inputs[d]=h;this.zd&&Hb(this.l,function(){var k=e.l.Object.getOwnPropertyDescriptor(Object.getPrototypeOf(b),g)||{},l=e.l.Object.getOwnPropertyDescriptor(b,g)||{},m=x({},k,l);if(Da("((set)?(\\s?"+g+")?)?",m.set)){try{e.l.Object.defineProperty(b,g,x({},m,{configurable:!0,set:function(p){e.Fc(p,this);return m.set.call(this,p)}}))}catch(p){}h.ej=m}});return h};c.prototype.oh=function(){var b=!0,d=$a(this.l)("input");try{d=$a(this.l)("input"); +d.value="INPUT_VALUE";d.style.setProperty("display","none","important");d.setAttribute("type","text");d.setAttribute("class","__ym_input_override_test");var e=this.l.Object.getOwnPropertyDescriptor(Object.getPrototypeOf(d),"value")||{},f=this.l.Object.getOwnPropertyDescriptor(d,"value")||{},g=x({},e,f);this.l.Object.defineProperty(d,"value",x({},g,{configurable:!0,set:function(h){return g.set.call(d,h)}}));"INPUT_VALUE"!==d.value&&(b=!1);d.value="INPUT_TEST";"INPUT_TEST"!==d.value&&(b=!1)}catch(h){b= +!1}return b};return c}(Za),gt=function(a){function c(b,d,e){b=a.call(this,b,d,e)||this;b.ab={width:0,height:0,vb:0,wb:0,orientation:0};b.ja.push([["resize"],b.cj]);b.ja.push([["orientationchange"],b.aj]);return b}Ja(c,a);c.prototype.start=function(){a.prototype.start.call(this);this.kg()};c.prototype.cj=function(){var b=this.Md();this.vi(b)&&(this.ab=b,this.lg(b))};c.prototype.aj=function(){var b=this.Md();this.ab.orientation!==b.orientation&&(this.ab=b,this.uj(b))};c.prototype.Of=function(b){return!b.height|| +!b.width||!b.wb||!b.vb};c.prototype.vi=function(b){return b.height!==this.ab.height||b.width!==this.ab.width};c.prototype.Md=function(){var b=this.F.mb(),d=Ed(this.l),e=d[0];d=d[1];b=b.Ld();return{width:e,height:d,wb:b?b.scrollWidth:0,vb:b?b.scrollHeight:0,orientation:this.F.mb().bi()}};c.prototype.uj=function(b){var d;void 0===d&&(d=this.F.L());this.F.X("event",{width:b.width,height:b.height,orientation:b.orientation},"deviceRotation",d)};c.prototype.lg=function(b,d){void 0===d&&(d=this.F.L());this.F.X("event", +{width:b.width,height:b.height,wb:b.wb,vb:b.vb},"resize",d)};c.prototype.kg=function(){var b=this.Md();this.Of(b)?W(this.l,D(this.kg,this),300):(this.Of(this.ab)&&(this.ab=b),this.lg(b,0))};return c}(Za),Pe=function(){function a(c){this.index=0;this.Cb={};this.l=c}a.prototype.rc=function(c,b,d){void 0===d&&(d={});var e=ha(this.l),f=this.index;this.index+=1;this.Cb[f]={Sa:0,Yb:!1,Oh:c,Ib:[],Zd:e(aa)};var g=this;return function(){var h=Aa(arguments),k=d.kb&&!g.Cb[f].Yb,l=g.Cb[f];ma(g.l,l.Sa);l.Ib=h; +l.Yb=!0;var m=e(aa);if(k||m-l.Zd>=b)c.apply(void 0,h),l.Zd=m;l.Sa=W(g.l,function(){k||(c.apply(void 0,h),l.Zd=e(aa));l.Yb=!1;l.Ib=[]},b,"th")}};a.prototype.flush=function(){var c=this;z(function(b){var d=c.Cb[b],e=d.Sa,f=d.Oh,g=d.Ib;d.Yb&&(c.Cb[b].Yb=!1,f.apply(void 0,g),ma(c.l,e))},ca(this.Cb))};return a}(),ht=function(a){function c(b,d,e){d=a.call(this,b,d,e)||this;d.Ag=[];d.We={x:0,y:0};d.Aa=new Pe(b);d.Vc=d.K.J(d.Vc,"o");d.ja.push([["scroll"],d.dj]);return d}Ja(c,a);c.prototype.start=function(){a.prototype.start.call(this); +this.F.X("event",{x:Math.max(this.l.scrollX,0),y:Math.max(this.l.scrollY,0),page:!0,target:-1},"scroll",0)};c.prototype.stop=function(){a.prototype.stop.call(this);this.Aa.flush()};c.prototype.dj=function(b){if(this.F.mb().If())this.Vc(b);else{var d=b.target,e=Y(function(f){return f[0]===d},this.Ag).pop();e?e=e[1]:(e=this.Aa.rc(D(this.Vc,this),100,{kb:!0}),this.Ag.push([d,e]));e(b)}};c.prototype.Vc=function(b){var d=this.F.mb().Ld();b=b.target;var e=this.Nb(b);d=Oa(la(b),[d,this.l,this.l.document]); +var f=Math.max(e.left,0);e=Math.max(e.top,0);if(d){if(this.We.x===f&&this.We.y===e)return;this.We={x:f,y:e}}this.F.X("event",{x:f,y:e,page:d,target:d?-1:this.Z(b)},"scroll")};c.prototype.Nb=function(b){var d={left:0,top:0};if(!b)return d;if(b.window===b)return{top:b.scrollY||0,left:b.scrollX||0};var e=b.ownerDocument||b,f=b.documentElement,g=e.defaultView||e.parentWindow,h=e.body;return b!==e||(b=this.F.mb().Ld(),b)?H(b,[f,h])?{top:b.scrollTop||g.scrollY,left:b.scrollLeft||g.scrollX}:{top:b.scrollTop|| +0,left:b.scrollLeft||0}:d};return c}(Za),it=["mousemove","mousedown","mouseup","click"],jt=function(a){function c(b,d,e){d=a.call(this,b,d,e)||this;d.ja.push([it,d.$i]);d.Aa=new Pe(b);d.Pc=d.K.J(d.Pc,"n");d.Cj=d.K.J(d.Aa.rc(D(d.Pc,d),100),"t");return d}Ja(c,a);c.prototype.stop=function(){a.prototype.stop.call(this);this.Aa.flush()};c.prototype.$i=function(b){var d=null;try{d=b.type}catch(e){return}"mousemove"===d?this.Cj(b):this.Pc(b)};c.prototype.Pc=function(b){var d=b.type,e=b.clientX;e=void 0=== +e?null:e;var f=b.clientY;f=void 0===f?null:f;b=b.target||this.l.document.elementFromPoint(e,f);this.F.X("event",{x:e||0,y:f||0,target:this.Z(b)},d)};return c}(Za),kt=["focus","blur"],lt=function(a){function c(b,d,e){b=a.call(this,b,d,e)||this;b.ja.push([kt,b.Ph]);return b}Ja(c,a);c.prototype.Ph=function(b){var d=b.target;b=b.type;this.F.X("event",{target:this.Z(d===this.l?this.l.document.documentElement:d)},b)};return c}(Za),mt=w(function(a){var c=Ka(a.getSelection,"getSelection");return c?D(c,a): +B}),nt=u(mt,ja),ot=["mousemove","touchmove","mousedown","touchdown","select"],pt=/text|search|password|tel|url/,qt=function(a){function c(b,d,e){b=a.call(this,b,d,e)||this;b.Qd=!1;b.ja.push([ot,b.si]);return b}Ja(c,a);c.prototype.si=function(b){var d=this.F,e=b.type,f=b.which;b=b.target;if("mousemove"!==e||1===f)(e="select"===e?this.ii(b):this.gi())&&e.start!==e.end?(this.Qd=!0,d.X("event",e,"selection")):this.Qd&&(this.Qd=!1,d.X("event",{start:0,end:0},"selection"))};c.prototype.gi=function(){var b= +nt(this.l);if(b&&0=n(c,"body.scrollHeight")?b:null},bi:function(){var b=a.screen;if(!b)return 0;var d=eb(v(b,n),["orientation","mozOrientation","msOrientation"]);return n(b,d+".angle")||0},Ak:v(a,cb),If:v(a,od),zk:v(a,Be)}}),Ht=function(){function a(c,b){var d=this;this.Pb=0;this.xd=[];this.Ob=null;this.va=this.ec=this.wg=!1;this.Ha=0;this.ei=function(){return d.page};this.Id=function(){return d.Pb};this.Bf=function(){return d.Ha}; +this.$h=function(){return d.ib};this.Af=function(){return d.Ob};this.ta=function(){return d.Rd};this.L=function(){return d.Ke?d.l.Math.max(d.Ke(aa)-d.Ha,0):0};this.Cc=function(){return d.options};this.mb=function(){return d.gh};this.X=function(f,g,h,k){void 0===k&&(k=d.L());f=d.Zh(f,g,h,k);d.ga(f)};this.Zh=function(f,g,h,k){void 0===k&&(k=d.L());return{type:f,data:g,L:k,M:d.Pb,event:h}};this.ga=function(f){f=ea(f)?f:[f];d.wg&&!d.ec?d.va?(f=A(function(g){return g.M?g:x(g,{M:d.Pb})},f),d.Af().mg(f)): +(z(function(g){kb(d.l,{name:"webvisorData",data:g})},f),f=A(Pm,f),d.$b(f)):d.xd=d.xd.concat(f)};this.l=c;var e=uf(c,this,"R");this.He=e.J(this.He,"s");this.ga=e.J(this.ga,"sd");e=I(c);e.o("wv2e")&&Te();e.C("wv2e",!0);this.options=b;this.ib=ia(c);this.Rd=new dt(this.l,b);this.gh=Gt(c);this.ef=A(function(f){return new f[0](c,d,f[1])},bh);this.Ai();this.page=Rm(this.l);this.He()}a.prototype.start=function(c){this.wg=!0;this.$b=c;this.jg()};a.prototype.stop=function(){ah(this.l)&&(z(function(c){return c.stop()}, +this.ef),this.Rd.stop(),this.Ob&&this.Ob.stop(),this.va||this.X("event",{},"eof"))};a.prototype.qc=function(c,b){var d=new a(c,x({},this.options,{M:b}));d.start(B);return d};a.prototype.Ai=function(){var c=this;this.va=!!this.options.M;this.Pb=this.options.M||0;this.ec=!this.va;var b=this.options.Fg||[];b.push(T(this.l).host);this.Ob=Sm(this.l,this,b);b=this.Ob.Hd();cb(this.l)?this.ec&&b.D(["i"],function(d){c.va=d.va;c.ec=!1;d.M&&(c.Pb=d.M);c.jg()}):this.ec=this.va=!1};a.prototype.jg=function(){var c= +zd(this.xd);this.ga(c)};a.prototype.He=function(){this.Ke=Uf(this.l);this.Ha=this.Ke(aa);z(function(c){c.start()},this.ef);this.Rd.start()};return a}(),cd=u(ca,tc),da,It=(da={},da.mousemove=0,da.mouseup=1,da.mousedown=2,da.click=3,da.scroll=4,da.windowblur=5,da.windowfocus=6,da.focus=7,da.blur=8,da.eof=9,da.selection=10,da.change=11,da.input=12,da.touchmove=13,da.touchstart=14,da.touchend=15,da.touchcancel=16,da.touchforcechange=17,da.canvasMethod=18,da.canvasProperty=19,da.zoom=20,da.resize=21,da.mediaMethod= +22,da.mediaProperty=23,da.keystroke=24,da.deviceRotation=25,da.fatalError=26,da.hashchange=27,da.stylechange=28,da),ch=ka(function(a,c){var b;return b={},b[cd(a)]=c,b}),Jt=function(){function a(c){var b;this.isSync=!1;this.Lb=[];this.nf=[];this.l=c;this.Rb=(b={},b.event=D(this.Eh,this),b.page=ch({page:1}),b.mutation=ch({Qi:1}),b.activity=ch({$g:1}),b);this.nf=[[["scroll"],{rj:1}],[["selection"],{tj:1}],[["change","input"],{mh:1}],[["keystroke"],{Ki:1},{Mc:1}],[["zoom"],{Yj:1}],[["resize"],{nj:1}], +[["windowfocus","windowblur","focus","blur","eof"],{Vj:1}],[["mousemove","mouseup","mousedown","click"],{Oi:1}],[["deviceRotation"],{zh:1}],[["fatalError"],{Jh:1}],[["touchmove","touchstart","touchend","touchcancel","touchforcechange"],{Fj:1},{touches:1},{touches:1}],[["hashchange"],{wi:1}],[["stylechange"],{xj:1},{Ka:1},{Ka:1}]]}a.prototype.Eh=function(c){var b,d,e=c.type,f=eb(u(tc,v(e,H)),this.nf);f||db(Kc("vem."+e));"eof"===e&&(this.isSync=!0);var g=f[1],h=f[2];f=f[3];var k=c.$;return{event:(b= +{type:It[e],target:c.target,M:c.M},b[cd(g)]=h?(d={},d[cd(h)]=f?k[cd(f)]:k,d):k,b)}};a.prototype.za=function(c,b){var d=this;void 0===b&&(b=!1);var e=fc(c,function(h){var k=!V(h.partNum);return{data:k?void 0:d.Rb[h.type](h.data),rh:k?h.data:void 0,page:h.partNum,end:h.end,L:h.L}}),f=this.isSync||b?Infinity:10;e=gc(this.l,e,f);var g=[e];this.Lb.push(e);return e(Ke(function(h){h=ge(d.l,Wh,{buffer:h});h=gc(d.l,h,f,ze);g.push(h);d.Lb.push(h);return h}))(Ke(function(h){h=Ef(d.l,h.slice(-4));h=gc(d.l,h, +f,ze);g.push(h);d.Lb.push(h);return h}))(Og(function(h){h=h[h.length-1];z(function(k){k=He(d.l)(k,d.Lb);d.Lb.splice(k,1)},g);return h}))};a.prototype.Qa=function(c){return ge(this.l,Hf,this.Rb[c.type](c.data))(Ae(B))};a.prototype.Va=function(c){return c[0]};a.prototype.dd=function(c,b){for(var d=Ef(this.l,c)(Ae(B)),e=Math.ceil(d.length/b),f=[],g=0;ge?(b+=String.fromCharCode(e),f++):191e?(g=d.charCodeAt(f+1),b+=String.fromCharCode((e&31)<<6|g&63),f+=2):(g=d.charCodeAt(f+1),b+=String.fromCharCode((e& +15)<<12|(g&63)<<6|d.charCodeAt(f+2)&63),f+=3);d=qb(a,b);return ea(d)?A(Oq,d):[]}),Bm=E("ep.ent",function(a,c,b){a=""+Ua(a,10,99);b=""+100*c+b+a;if(16b.name?1:2}),fb(qm))(a):""},ad(",")),ru=function(a){return function(c){var b=$a(c);if(!b)return"";b=b("canvas");var d=[],e=a(),f=e.Ih;e=e.yh;try{var g=oa("getContext",b);d=A(u(O,g),e)}catch(h){return""}return(g=eb(O,d))?f(c,{canvas:b,lh:g}):""}}(function(){return{yh:ou,Ih:Zl}}),Xl=["name","lang","localService","voiceURI","default"],su=E("p.tfs",function(a){var c=I(a);if(!c.o("tfs")){c.C("tfs",!0);c=ia(a);var b=B;b=c.D(a,["message"],function(d){try{var e= +d.origin}catch(h){}if(e&&"https://iframe-toloka.com"===e&&(d=qb(a,d.data),Ma(d)&&"appendremote"===d.action))if(d=Qa(a),d.o("tfsc")||a.confirm("\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u201c\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0441\u0430\u0439\u0442\u043e\u0432\u201c \u043e\u0442 toloka.ai \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c?")){d.C("tfsc", +1);var f,g;I(a).C("_u",(f={},f.getCachedTags=Lf,f.button=(g={},g.closest=v(a,Mf),g.select=Nf,g.getData=v(a,Of),g),f));hc(a,{src:"https://yastatic.net/s3/metrika/2.1540128042.1/form-selector/button_ru.js"});b()}else a.close()})}}),tu=Wa(/[a-z\u0430-\u044f,.]/gi),uu=E("ice",function(a,c,b){var d=Ga(a,c);if(d){var e=n(b,"target");if(e&&(c=n(e,"value"),(c=tb(c))&&!(100<=Na(c)))){b=Lb(c);var f=0g||Si(a,c).then(function(l){var m,p,q,r=ig(a,e);d.params((m={},m.__ym=(p={},p.fi=vj((q={},q.a=f?1:0,q.b=r,q.c=l,q)).za(),p),m))},C(a,"ice.s"))}}}}),vu=["text","email","tel"],wu=["cc-","name","shipping"],xu=E("icei",function(a,c){Dd(a)&&Lk(a)&&Zb(a)(Ra(B,F([a,c,function(b){var d=n(b,"settings.cf");b=of(a)||n(b,"settings.eu");if(d&&!b){var e=ia(a);d=ub("input",a.document.body); +z(function(f){zf(a,f)||!H(f.type,vu)||Oa(O,A(v(f.autocomplete,lc),wu))||e.D(f,["blur"],F([a,c],uu))},qa(d))}}],pa)))}),yu=vb("gic",xu),qh,zu=E("p.ai",function(a,c){return new K(function(b){(Yc(a)||Xe(a))&&b(pa(a,c,function(d){var e;return(d=n(d,"settings.sbp"))?ph(a,x({},d,(e={},e.c=c.id,e)),10):B}));b(B)})}),Ub=["0","1","2","3"],Cc=Ub[0],We=Ub[1],Au=Ub[2],$e=A(u(O,oa("concat","GDPR-ok-view-detailed-")),Ub),Vd=wa("GDPR-ok GDPR-cross GDPR-cancel 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 GDPR-settings GDPR-ok-view-default GDPR-ok-view-detailed 21 22 23".split(" "), +$e,["28","29","30"]),Bu="3 13 14 15 16 17 28".split(" "),Ze=u(fb(U("ymetrikaEvent.type")),Dc(mc(Vd))),Ul={url:"https://yastatic.net/s3/gdpr/popup/v2/",Pf:"ru en et fi lt lv pl fr no sr".split(" "),Yf:"_inversed_buttons"},Tb,Tl=(Tb={},Tb["GDPR-ok"]="ok",Tb["GDPR-ok-view-default"]="ok-default",Tb["GDPR-ok-view-detailed"]="ok-detailed",Tb["GDPR-ok-view-detailed-0"]="ok-detailed-all",Tb["GDPR-ok-view-detailed-1"]="ok-detailed-tech",Tb["GDPR-ok-view-detailed-2"]="ok-detailed-tech-analytics",Tb["GDPR-ok-view-detailed-3"]= +"ok-detailed-tech-other",Tb),Xd=[],lh=u(Ze,fb(lr(Vd)),ad(",")),mh=u(Dc(mc(Vd)),Na,Boolean),Ml=w(function(a,c){var b=c.o("gdpr");return H(b,Ub)?"-"+b:""}),Xc={},nl=w(wc),Jl=u(oa("exec",/counterID=(\d+)/),U("1")),ol=ka(function(a,c){var b=nl(a),d=qa(c),e=d[0],f=d[1],g=d.slice(2);if(f){d=Il(a,e);var h=d[0],k=d[1];d=N(k);b[d]||(b[d]={});b=b[d];c.pf||Xc[f]&&M(function(l,m){return l||!!m(a,k,g,h)},!1,Xc[f])||("init"===f?(c.pf=!0,h?pb(a,""+e,"Duplicate counter "+e+" initialization"):a["yaCounter"+k.id]= +new a.Ya[ra.lc](x({},g[0],k))):h&&h[f]&&b.zi?(h[f].apply(h,g),c.pf=!0):(d=b.ug,d||(d=[],b.ug=d),d.push(wa([e,f],g))))}}),Cu=vb("is",function(a){var c=-1f?d.push(f):(127f?d.push(f>>6|192):(d.push(f>>12|224),d.push(f>>6&63|128)),d.push(f&63|128))}b=Kh(d)}return b},a));x(ag,c)})();(function(){var a={};a.oo=yc("oo");a.pmc=yc("cmc");a.lt=function(c){var b=Jd(c).o("lt",null);return b?c.Math.round(100*b):b};a.yu=function(c){var b=T(c);return H(b.hostname,["dzen.ru","ya.ru"])?(Bc(c,"").o("yandexuid")||"").substring(0,25):null};a.re=u(Xp,Cb);a.aw=function(c){c=eb(u(na,Gb),[c.document.hidden, +c.document.msHidden,c.document.webkitHidden]);return na(c)?null:ed(!c)};a.ifc=yc("ifc");a.ifb=yc("ifb");a.ecs=yc("ecs");a.csi=yc("scip");x(bg,a)})();ua.er=Tc;(function(a){try{var c=bd(a,"er"),b=Eo(a,c);Gj.push(function(d,e,f,g){var h,k,l,m,p;.01>=a.Math.random()||b((h={},h[d]=(k={},k[ra.fb]=(l={},l[e]=(m={},m[f]=g?(p={},p[a.location.href]=g,p):a.location.href,m),l),k),h))})}catch(d){}})(window);(function(){Sd.push(Ho);Wf.unshift(Do);Vg.push(function(a){var c=void 0;void 0===c&&(c=!0);I(a).C("oo", +c)})})();xb(function(a,c){return{ca:function(b,d){var e=b.G,f=b.H;!Tk[c.id]&&f.o("pv")&&c.exp&&!e.nohit&&(e.exp=c.exp,Tk[c.id]=!0);d()}}},-99);Z.push(Ps);Ob.e=Fb;va.e=Xa;ua.e=ac;cc({exp:{ia:"experiments"}});ak.experiments="ex";(function(){var a;Ye.push(Qs);va.f=Xa;x(ua,(a={},a.f=Kk,a));ba("f",Pb(),1);ba("f",$f,2)})();Sd.push(function(a,c){var b={ea:N(c),vd:Ga(a,c),Bg:ha(a),ce:Qa(a)},d=b.Bg(ib);if(!b.ce.Ud){var e=b.ce.o("ymoo"+b.ea);if(e&&30>d-e)b=b.ea,delete I(a).o("counters",{})[b],db(Sa("uws")); +else pa(a,c,Rs(b))["catch"](C(a,"d.f"))}});(function(){var a,c,b=Eb([Nb]);x(ua,(a={},a.s=b,a.S=b,a.u=Tc,a));x(va,(c={},c.s=Bb,c.S=Xa,c.u=Bb,c));ba("s");ba("u");ba("S",Pb(["v","hid","u","vf","rn"]),1);Z.push(E("s",qo))})();va["8"]=Bb;ua["8"]=[Xi];Z.push(function(a,c){return pa(a,c,function(b){var d,e=n(b,"settings.sbp");return e&&ei(a,b,{hb:c,Wc:"8",data:x({},e,(d={},d.c=c.id,d)),$d:"cs"})})});ba("p",Pb(Wg),1);va.p=function(a,c,b){return function(d,e){var f,g=x({H:Ca()},d);g.G||(g.G={});var h=g.G, +k=g.Oa;k=void 0===k?{}:k;h["wv-hit"]=h["wv-hit"]||""+Ib(a);h["page-url"]=h["page-url"]||a.location.href;h.wmode="0";h["wv-part"]="0";h["page-url"]=h["page-url"]||a.location.href;h["wv-type"]||(h["wv-type"]=k.Td?"5":"4");h={Ia:{Pa:"webvisor/"+e.id},Y:x(g.Y,{xb:(f={},f["Content-Type"]="text/plain",f),Ue:"POST"}),G:h};f=La(je(a,"pub",e),b);return nd(a,c,f)(x(g,h))}};ua.p=Eb([0,Nb]);Ab.push(Ws);cc({Fb:{ia:"webvisor",Za:Boolean},Ah:{ia:"disableFormAnalytics",Za:Boolean}});ba("4",Pb(Wg),1);va["4"]=di;ua["4"]= +Eb([0,Nb,Ad]);Ab.push(bt);(function(){ba("W",Pb(Wg),1);ua.W=Eb([0,Nb]);va.W=di;Ab.push(Mt);cc({Fb:{ia:"webvisor"}});cc({Lj:{ia:"trustedDomains"},jc:{ia:"childIframe",Za:Boolean}});Vg.push(function(a){I(a).o("stopRecorder",B)()});zk("wv")})();Z.push(Pt);ba("pi");va.pi=Bb;ua.pi=Tc;zk("w",function(a,c){return{ca:function(b,d){if(b.H){var e=dl(c),f=e.status;"rt"===e.Wc&&f&&(b.H.C("rt",f),b.Ia||(b.Ia={}),b.Ia.xi=1===f?Hh(a,c)+".":"")}d()}}},2);(function(){Z.push(Qt);cc({Ad:{ia:"ecommerce",Za:function(a){if(a)return!0=== +a?"dataLayer":""+a}}});va["1"]||(va["1"]=Xa)})();Z.push(St);Z.push(cu);ua["6"]=Eb([0,Nb]);va["6"]=Bb;Z.push(du);xb(Fc,20);ba("f",Fc,20);ba("n",Fc,20);ba("1",Fc,20);ba("d",Fc,20);ba("5",Fc,20);Z.push(Os);(function(){Ng.push(function(a,c){c.informer=um(a)})})();xb(gf,6);ba("1",gf,6);ba("adb");ba("n",gf,4);ua.adb=Tc;va.adb=nd;zc.push(fu);ua["5"]=ac;va["5"]=Xa;Ob["5"]=Y(u(tc,mc([ng,te]),Gb),Fb);Z.push(gu);xb(xh,7);ba("n",xh,6);Ab.push(hu);va.d=Xa;ba("d",Pb(["hid","u","v","vf"]),1);ua.d=Tc;ba("n",function(a, +c){return{Ba:function(b,d){if(!b.V||!b.V.force){var e=.002,f=c.id===ra.Ug?1:.002,g,h,k,l,m;void 0===e&&(e=1);void 0===f&&(f=1);var p=a.performance;if(p&&S(p.getEntriesByType)&&(e=Math.random()>e,f=Math.random()>f,!e||!f)){p=a.performance.getEntriesByType("resource");for(var q={},r={},t={},y=iu(a),G=0;G=e;e+=1)b+=d.call(a, +e)?""+e:"0";return b+c}catch(f){return c}},function(a){a=n(a,"navigator")||{};return a.doNotTrack||a.msDoNotTrack||"unknown"},function(a){if(a=Js(a))try{for(var c=[],b=0;b0?"0":"1",n.navigation_type=a.type||"")}}n.has_back_data="0",this._backData&&(n.has_back_data="1",n.is_loaded_from_bfcache=this._backData.isLoadedFromBfCache?"1":"0",n.is_bounce_back=this._backData.isBounceBack()?"1":"0")}if(t.addPreBounceSearchExperimentParams&&this._backData&&this._backData.isBounceBack()){var r=this._backData.getData()[window.Bootstrap.BACKDATA_PARAM]||{};Object.keys(r).forEach((function(e){var t=r[e];n["prebounce_"+e]=t}))}return n},getOrganicAboveFold:function(){var e=document.querySelector("#r1-0 h2");if(!e)return!1;var t=e.getBoundingClientRect();return window.innerHeight-window.pageYOffset>t.top+t.height},getTqpaeParams:function(){var t={},n=e.deep.url;if(!n)return t;var i=n.replace("/d.js?","").split("&").reduce((function(e,t){var n=t.split("="),i=n[0],a=n[1];return e[i]=a,e}),{});return i.a&&(t.a=i.a),i.ia&&(t.ia=i.ia),i.ct&&(t.ct=i.ct),i.ex&&(t.ex=i.ex),i.kl&&(t.kl=i.kl),i.l&&(t.l=i.l),i.p&&(t.p=i.p),i.s&&(t.s=i.s),i.t&&(t.t=i.t),i.ss_mkt&&(t.ss_mkt=i.ss_mkt),t},sanitizeUrl:function(e){return e.replace(/^\/|\/$/,"").replace(/[^a-z0-9_-]+/gi,"-")},_addTimeToClick:function(e){var t=Date.now();e.ttc=t-(this._backData&&this._backData.timeLoadedFromBfCache||DDG.deep.finished||t)},_send:function(t,n,i){for(var a,r=Math.ceil(1e7*Math.random()),o="",s="",l="",c={},u=0;u-1)return;this._sentPixels.push(f)}if(n&&(l+="&"+n),!(e.duckpan||e.device&&e.device.isDDGIgnore)){var _=(e.services.getURL("pixels")+o+"?"+r+l).replace(/"/g,"");try{window.navigator.sendBeacon&&i.beacon?window.navigator.sendBeacon(_):$('')}catch(e){}return _}},_getPixelConfig:function(e){var t=e[0],n=this._pixels[t];if(n)return"ad"===t&&(n=e.includes("c")?Object.assign({},n,{ttc:!0}):Object.assign({},n,{refireWhenLoadedFromBfcache:!0})),n}}),e.pixel=new e.Utils.Pixel}(DDG),function(e){e.Utils.ErrorHandler=function(){var e;for(window.onerror=this._onError.bind(this);e=window.Bootstrap.errorArguments.pop();)this._onError.apply(this,e)},e.Utils.ErrorHandler.prototype={_onError:function(t,n,i,a,r,o){if(t&&": "!==t&&!t.match(/Script error|Cannot read property \'style\'|atomicFindClose|bestpriceninja|ModifyLinkTargets|browserToolsLoaded|__gCrWeb|mobiGetClick|savingsslider|DealPly|processSiteSource|symcBFPerform|Papa_|ByTagName\(\'video\'|setTimeout[0-9]+ is undefined/)&&n&&n.match(/^http/i)&&!n.match(/checkpoint|main\.js/)&&!(t.match("contentWindow")&&"Android"===e.device.label||t.match(/unexpected end of input/i)&&e.device.ua.match(/acheetahi/i))){var s=o?o.toLowerCase():this._getCategory(n,i);try{var l={msg:encodeURIComponent(t),url:encodeURIComponent(this._removeQuery(n)),line:i,col:a,didnotloadscripts:encodeURIComponent((window.didNotLoadScripts||[]).join(","))};e.pixel.fire("jse",s,l)}catch(e){var c=Math.ceil(1e7*Math.random());$('')}}},_getCategory:function(e,t){var n,i;return e.match(/\/\?q=/)?(n="view",t&&t>1&&(n="ext")):n=e.match(/\/share\/spice/)?"spice":e.match(/\/share\/goodie/)?"goodie":e.match(/\/js\/spice/)?"spiceupstream":/\/b\d+\.js/.test(e)?"bootstrap":e.match(/\/d\d+\.js/)?"base":e.match(/\/g\d+\.js/)?"serp":e.match(/\/t\d+\.js/)?"static":e.match(/\/util\/u\d+\.js/)?"util":e.match(/\/js\/.*\.js/)||e.match(/\/lib\/l\d+\.js/)?"lib":(i=e.match(/\/wbm(m|l)\d+\.js/))?"webpack_main_"+("m"===i[1]?"modern":"legacy"):(i=e.match(/\/wbv(m|l)\d+\.js/))?"webpack_vendors_"+("m"===i[1]?"modern":"legacy"):/\/bundle\.chunk\.(.*)\.(.*)\.js/.test(e)?"webpack_chunk":(i=e.match(/\/([a-z]+)\.js/))&&i[1]||"u",n},_removeQuery:function(e){try{var t=new URL(e);return t.searchParams.delete("q"),t.href}catch(t){var n=e.split("?"),i="";return 2===n.length&&(i=n[1].split("&").filter((function(e){return!("q"===e||0===e.indexOf("q="))})).join("&")),n[0]+(i?"?"+i:"")}}}}(DDG),function(e){e.embed={callback:null,id:"embed",_hasValidResult:function(e){return e&&e.description&&e.image&&e.provider&&e.title&&e.icon&&e.url&&e.tab_name},add:function(t){t&&this._hasValidResult(t)?Spice.add({id:this.id,name:l(t.tab_name),data:t,signal:t.signal,meta:{sourceName:t.provider,sourceUrl:t.url,sourceIconUrl:t.icon},templates:{group:"info",options:{moreAt:!0}}}):e.duckbar.failed("embed")}}}(DDG),function(e,t){t.SM2_DEFER=!0;var n,i=0,a=0,r=e.audio={requires:function(){return i?!n&&window.SoundManager?(n||((n=window.soundManager=new SoundManager).url="/soundmanager2/swf",n.flashVersion=9,n.useFlashBlock=!1,n.useHTML5Audio=!0,n.ontimeout((function(){a=1,r.ready=0})),n.beginDelayedInit(),n.onready((function(){a=1,r.ready=1}))),!1):!(!n||!a)&&r:(nrj("soundmanager2/script/soundmanager2-nodebug-jsmin.js",1),i=1,!1)},play:function(e,t,i){if(!r.ready)return!1;i=i||{};var a=n.getSoundById(e);return a?a.play(i):(i.onloadstart&&i.onloadstart(),a=n.createSound($.extend(i,{id:e,url:t}))),a},pause:function(e){if(!r.ready)return!1;var t=n.getSoundById(e);t&&t.pause()},stop:function(e){if(!r.ready)return!1;var t=n.getSoundById(e);t?t.stop():n.stopAll()}}}(DDG,this),function(e){var t={audio:{require:DDG.audio.requires},mapkit:{require:function(){return window.mapkit||n("mapkit")},load:function(){nrj("/js/mapkit/mapkit.5.75.4.js",1)}},settings:{require:function(){return DDG.Views.Settings.Main||n("settings")},load:function(){nrj("/s2484.js",1)}},"moment.js":{require:function(){return window.moment||n("moment.js")},load:function(){nrj("/js/moment.2.9.0.min.js",1)}},"masonry.js":{require:function(){return window.Masonry||n("masonry.js")},load:function(){nrj("/js/masonry.pkgd.min.js",1)}},mathquill:{require:function(){return $.fn.mathquill||n("mathquill")},load:function(){nrj("/js/mathquill-0.9.4/mathquill.min.js",1),nrc("/js/mathquill-0.9.4/mathquill.css",1)}},sports:{require:function(){return window.ddg_spice_sports_games||n("sports")},load:function(){nrj(DDG.get_asset_path("sports","sports.spice.js"),1)}},velocity:{require:function(){return $.Velocity||n("velocity")},load:function(){nrj("/js/velocity-1.5.0.min.js",1)}},flashDetect:{require:function(){return window.FlashDetect||n("flashDetect")},load:function(){nrj("/js/flashdetect_modified.js",1)}},"chart.js":{require:function(){return window.Chart||n("chart.js")},load:function(){nrj("/js/Chart-2.8.0.min.js",1)}},pikaday:{require:function(){return $.fn.pikaday||n("pikaday")},load:function(){nrj("/js/Pikaday-1.4.0/pikaday.min.js",1),nrc("/js/Pikaday-1.4.0/css/pikaday.min.css",1)}},prettydiff:{require:function(){return window.prettydiff||n("prettydiff")},load:function(){nrj("/js/prettydiff.js",1)}},jsonlint:{require:function(){return window.jsonlint||n("jsonlint")},load:function(){nrj("/js/jsonlint.js",1)}},extensionsuccess:{require:function(){return window.extensionsuccess||n("extensionsuccess")},load:function(){nrj("/js/extensionsuccess.min.js?v=6",1)}},prettify:{require:function(){return window.prettyPrint||n("prettify")},load:function(){nrc("/js/highlight/tomorrow.css?v=2"),nrc("/js/highlight/tomorrow-night-eighties.css"),nrj("/js/highlight/prettify.min.js",1)}},"sass.js":{require:function(){return window.Sass||n("sass.js")},load:function(){nrj("/js/sass.js/sass.sync.min.js")}},"js-beautify":{require:function(){return window.js_beautify||n("js-beautify")},load:function(){nrj("/js/js-beautify/beautify.min.js")}},"html-beautify":{require:function(){return window.html_beautify||n("html-beautify")},load:function(){nrj("/js/js-beautify/beautify-html.min.js")}},"math.js":{require:function(){return window.math||n("math.js")},load:function(){nrj("/js/math-3.13.3.min.js")}},"twitter-text":{require:function(){return window.twttr||n("twitter-text")},load:function(){nrj("/js/twitter-text-2.0.0.min.js")}},hammer:{require:function(){return window.Hammer||n("hammer")},load:function(){nrj("/js/build/hammer-v2.0.8.min.js")}}},n=function(e){var n=t[e];if(!n||n.required)return!1;n.load(),n.required=!0},i=function(n,i){var a=t[n],r=a&&a.require;if("function"!=typeof r)return n.match(/^\//)?void $.ajax({url:n,cache:!0,dataType:"script",success:i}):i();var o=r();if(o)return i(o);setTimeout(e.require.bind(this,n,i),25)};e.require=function(e,t){if($.isArray(e)){var n,a,r=[];$.each(e,(function(e,t){i(t,(function(t){r[e]=t}))})),n=setTimeout((function(){e.map((function(e,t){return e+(r[t]?":loaded":":timeout")}));clearInterval(a)}),5e3),a=setInterval((function(){var i=!0;$.each(e,(function(e){i&&!r[e]&&(i=!1)})),i&&(clearInterval(n),clearInterval(a),t.apply(null,r))}),25)}else i(e,t)}}(DDG),function(){for(var e,t=["ln","lnp","ld","ldn","ldp","ldnp"],n=0;e=t[n];n+=1)this[e]||(this[e]=function(e){return e});function i(e,t){return e.replace(/%s/g,(function(){return t.shift()}))}this.l||(this.l=function(e){var t=Array.prototype.slice.call(arguments,1);return i(e,t)}),this.lp||(this.lp=function(e,t){var n=Array.prototype.slice.call(arguments,2);return i(t,n)}),this.locale_data&&this.locale_data.duckduckgo||(this.locale_data.duckduckgo={"":""},this.ltd&&this.ltd("duckduckgo"))}(window),function(e){var t=[];DDG.ready=function(e,n){if($.isReady)return e();n?t.unshift(e):t.push(e)},$(document).ready((function(){for(var e;e=t.shift();)e()}))}(),function(e){e.services={domain:"duckduckgo.com",icons:{sub:"external-content",path:"/ip3/"},images:{sub:"external-content",path:"/iu/"},externalImages:{sub:"external-content",path:"/ssv2/"},autocomplete:{path:"/ac/",useSameHost:!0},imageReports:{sub:"reports",path:"/collect.js"},mapkit:{path:"/mapkit/"},reports:{sub:"reports",path:"/collect.js?type=feedback",useSameHost:!0},pixels:{sub:"improving",skipDev:!0,path:"/t/"},local:{path:"/local.js?q=",skipDev:!0,useSameHost:!0},translation:{path:"/translation.js",useSameHost:!0},getURL:function(t){var n=this[t],i=e.isDev&&n.skipDev,a=n.useSameHost||e.getProperty(e,"device.isOnion")||i,r=n.path;return a||(r="//",n.sub&&!i&&(r+=n.sub+"."),r+=this.domain+n.path),r},getLinksURL:function(e){return window.Bootstrap.getLinksURL(e,this._getCurrentHost())},_getCurrentHost:function(){return window.location.host}}}(DDG),DDG.Utils.Events={bindEvents:function(e){this._bEvents||(this._bEvents=[]);for(var t,n=0;t=e[n];n++)if(!(t.length<2)&&t[0]&&t[1]&&t[2]){var i={bound:t[2].bind(this),evt:t};"string"==typeof t[0]?this.$&&this.$(t[0]).on(t[1],i.bound):t[0].on(t[1],i.bound),this._bEvents.push(i)}},unbindEvents:function(){for(;this._bEvents&&this._bEvents.length;){var e=this._bEvents[this._bEvents.length-1],t=e.evt;t&&("string"==typeof t[0]?this.$&&this.$(t[0]).off(t[1],e.bound):t[0].off(t[1],e.bound)),this._bEvents.pop()}this._bEvents=null}},function(e){var t="historyUtilData";e.Utils.History=function(e){this.path=window.location.pathname,this._history=e,0===this.path.indexOf("//")&&(this.path=this.path.substring(1)),this.curState=window.Bootstrap.getAllHistoryState(),this._callbacks=[],this._deviceSupportsHistory=this._history&&this._history.pushState&&this._history.replaceState},e.Utils.History.KEY=t,e.Utils.History.prototype=$.extend({},EventEmitter2.prototype,{enablePushState:function(e){this._deviceSupportsHistory&&!this._pushStateEnabled&&(this._pushStateEnabled=!0,this._shouldPushFn=e,window.addEventListener("popstate",this._onPopState.bind(this)))},get:function(e,n){return n?this._history.state&&this._history.state[t]?this._history.state[t][e]:null:this.curState[e]},getNamespace:function(e){var t={};for(var n in this.curState)this.curState.hasOwnProperty(n)&&0===n.indexOf(e)&&(t[n]=this.curState[n]);return t},set:function(e,t,n){if("object"!=typeof e)this.curState[e]=t,this._updatePath(this._shouldPushState(e,t),n);else for(var i in"function"==typeof t&&(n=t),e)this.set(i,e[i],n)},clear:function(){var e,t=Array.prototype.slice.call(arguments),n=!1;"function"==typeof t[t.length-1]&&(e=t.pop());for(var i=0;i=a&&t.offset.top-aa.offset.top))break}n.splice(i,0,e)}else n.push(e)}e.ImageLoader={make:function(e){for(var t,n=d.createElement("img"),i=0;t=a[i];i++)e[t]&&(n[t]=e[t]);return e.lazyLoad?this.register(n,e.src,e.lazyLoad):n.src=e.src,n},register:function(e,t,i){var a={src:t,el:e,trigger:i||"none"};i&&"scrollY"===i?r(a)?o(a)||s(a):function(e){n.push(e)}(a):o(a)||s(a)},registerAll:function(e,t,n){if(e&&e.length){n=n||{};for(var i=0;i4){this._lastMoves.shift();var i=this._lastMoves[0],a=i[0],r=i[1],o=n-i[2],s=this._x-a,l=this._y-r;this._velocityX=o?s/o:0,this._velocityY=o?l/o:0,this._axis=Math.abs(s)>Math.abs(l)?"x":"y",this._direction="x"===this._axis?s>=0?"right":"left":l>=0?"down":"up"}this._multitouch=!1},_pinch:function(e,t,n,i){var a=this._getDistance(e,t,n,i);this._pinchDistance||(this._pinchDistance=a),this._pinchDelta=Math.abs(a/this._pinchDistance),this._pinchDistance=a,this._multitouch=!0},_getDistance:function(e,t,n,i){var a=e-n,r=t-i;return Math.sqrt(a*a+r*r)},_getEventData:function(e){return{e:e,axis:this._axis,multitouch:this._multitouch,direction:this._direction,velocityX:this._velocityX,velocityY:this._velocityY,distX:this._distX,distY:this._distY,deltaX:this._deltaX,deltaY:this._deltaY,pinchDist:this._pinchDistance,pinchDelta:this._pinchDelta}},_getNumTouches:function(e){var t=e.originalEvent;return t&&t.touches&&t.touches.length},_handleTouches:function(e){var t=e.originalEvent;t&&t.touches&&t.touches.length?t.touches.length>1?this._pinch(t.touches[0].clientX,t.touches[0].clientY,t.touches[1].clientX,t.touches[1].clientY):this._multitouch||this._pan(t.touches[0].clientX,t.touches[0].clientY):this._pan(e.clientX,e.clientY)},_onTouchStart:function(n){this.numTouches=this._getNumTouches(n)||1,this._startTime||(this.$el.addClass(t),this._startTime=(new Date).getTime(),e.$doc.on("touchmove.gestures",this._onTouchMove.bind(this)),e.$doc.on("touchend.gestures",this._onTouchEnd.bind(this))),n.target&&"A"===n.target.nodeName||n.preventDefault(),this._handleTouches(n);var i=this._multitouch?"pinchstart":"panstart",a=this._getEventData(n);this.emit(i,a)},_onTouchMove:function(e){e.preventDefault(),this.numTouches=this._getNumTouches(e)||1,this._handleTouches(e);var t=this._multitouch?"pinchmove":"panmove",n=this._getEventData(e);this.emit(t,n)},_onTouchEnd:function(e){if(this.numTouches=this._getNumTouches(e)||0,!(this.numTouches>0)){var t=Math.abs("x"===this._axis?this._distX:this._distY),n="x"===this._axis?this._velocityX:this._velocityY,i=t<20,a=t>80||n>.5,r=this._getEventData(e);if(this._multitouch)this.emit("pinchend",r);else{if(a&&!i)r.swiped=!0,this.emit("swipe",r);else if(i){var o=(new Date).getTime();this._lastTapTime&&o-this._lastTapTime<300?(this.emit("double-tap",r),delete this._lastTapTime):(this._lastTapTime=o,this.emit("tap",r))}this.emit("panend",r)}this.reset()}}})}(DDG),function(e){var t=["Detail","GridTiles"],n={images:["Images"],videos:["Videos"],news:["GridTiles"],products:["Products"]},i=["About"],a={images:["Images"],maps_maps:["Maps"],news:["Carousel"],videos:["Carousel"],recipes:["Carousel"],products:["ProductsCarousel"],autoads:["AutoAdsCarousel"],maps_places:["Places"],directions:["Directions"],forecast:["Forecast"],related_searches:["RelatedSearches"],translations:["Translations"],covid19:["Covid19"]},r=["VerticalLinks"],o={};e.Utils.TabViewBuilder=function(){this._moduleSnippetViews={maps_places:e.Views.Places.PlaceSnippet}},e.Utils.TabViewBuilder.prototype=$.extend({},{build:function(s){this.model=s.model,this._viewRoot=this.model.viewRootPath?e.getProperty(e,this.model.viewRootPath):e.Views.AnswerBar.Answers,this.model.view?this._availableViews=[this.model.view]:$.isArray(this.model.views)?this._availableViews=this.model.views:this.model.isModule?"#zero_click_wrapper"===s.appendTo.selector?(e.device.isMobile||this.model.set("expanded",!0),this._availableViews=n[this.model.id]||t):(this._availableViews=a[this.model.id]||i,this._viewRoot=e.Views.Modules):this.model.isVertical?(this._availableViews=o[this.model.id]||r,this._viewRoot=e.Views.Verticals):this._availableViews=n[this.model.id]||t;var l=this._getValidClass();return!!l&&new l({model:this.model,appendTo:s.appendTo,events:s.events})},buildSnippet:function(e){var t=this._moduleSnippetViews[e.answer.id];return!!t&&new t({prependTo:e.prependTo,answer:e.answer})},_getValidClass:function(){if(void 0===this._viewIndex)this._viewIndex=0;else{if(!this._availableViews[this._viewIndex+1])return!1;this._viewIndex++}return this._isCurrentClassValid()?this._getCurrentViewClass():this._getValidClass()},_isCurrentClassValid:function(){var e=this._getCurrentViewClass();return e.prototype.isValid.call({requiredTemplates:e.prototype.requiredTemplates,maxItems:e.prototype.maxItems,model:this.model})},_getCurrentViewClass:function(){var e=this._availableViews[this._viewIndex];return this._viewRoot[e]}})}(DDG),function(){var e={"sort:date":1,"s:d":1,"!safeoff":1},t=/[';,.]/g,n=/[\s-]+/;DDG.getRelevants=function(e){void 0===e.num&&(e.num=e.candidates.length);var t=[];DDG.get_query().replace("'",""),e.candidates=e.candidates.sort(e.comparator);for(var n,i=0;n=e.candidates[i];i++)if(DDG.isRelevant(n.comparable,e.skipArray,e.minWordLength,e.strict)){if(i>e.num)return t;t.push(n)}return t},DDG.isRelevant=function(e,t,n,i){return DDG.stringsRelevant(e.toLowerCase(),DDG.get_query().toLowerCase(),t,n,i)},DDG.stringsRelevant=function(i,a,r,o,s){if(r instanceof Array){for(var l={},c=0;c=o&&!r[y]&&g.push(y)}for(c=0;c=o&&!r[y]&&f.push(y)}p=g,m=f,s?p.length>=m.length?(d=m,h=p):(d=p,h=m):p.length>=m.length?(d=p,h=m):(d=m,h=p);var _={},v={},k=0,b=0;for(c=0;c0&&_.length<=2&&k==_.length||_.length>2&&k>=_.length-1}}(),function(e){function t(e){return e&&e.toLowerCase().replace(/\s+/g,"")}e.Utils.LocalAPIWrapper=function(){},e.Utils.LocalAPIWrapper.prototype={getMapsResponse:function(e){var t={};if(!e||!e.features||!e.features.length)return t;var n=this._getMapsSource(e);return"mapkit"===n?t=this._getMapkitMapsResponse(e):"wikipedia"===n&&(t=this._getWikipediaMapsResponse(e)),t},getPlacesResponse:function(n){if(!n)return null;if(!n.results||!n.results.length)return this.getEmptyResponse(n);var i=n.results[0].engine;return"TripAdvisor"===i&&(i="Tripadvisor"),{sourceName:i,sourceId:t(i),sourceUrl:n.more_at,signal:n.signal,proximity:n.proximity,local_source:n.local_source,geoip:{lat:n.geoip_lat,lon:n.geoip_lon},obfusLoc:{lat:n.obfus_lat,lon:n.obfus_lon},distance:n.distance,biz_score:n.biz_score,cat_score:n.cat_score,chain_score:n.chain_score,delta:n.delta,matches_location:n.matches_location,review_count:n.review_count,trigger_count:n.trigger_count,wiki_entity:n.wiki_entity,requery:e.Utils.Strings.decodeQueryAndStripHTML(n.queryEncoded),query:e.Utils.Strings.decodeQueryAndStripHTML(n.queryEncoded),query_special_symbols:n.query_special_symbols||[],results:n.results.map(this._getPlaceItemResponse.bind(this)),places_filtered:n.places_filtered}},getDirectionsResponse:function(e){return{answerType:"Directions",id:"maps_directions",name:"Directions",results:[{start:e.origin,end:e.destination,transportType:e.transport_type,user_location:e.user_location}]}},getPlaceReviewsURL:function(e){if(e.url&&e.url.length){if("Yelp"===e.source||"Yelp"===e.engine){var t;e.review_detail&&e.review_detail.length?t=e.review_detail[0]:e.reviews&&e.reviews.length&&(t=e.reviews[0]);var n=t?"&hrid="+t.id:"";return e.url+n}return"Tripadvisor"===e.source||"Tripadvisor"===e.engine?e.url+"#REVIEWS":""}},getEmptyResponse:function(t){return t?{geoip:{lat:t.geoip_lat,lon:t.geoip_lon},parsed_query:t.parsed_query,query:e.Utils.Strings.decodeQueryAndStripHTML(t.queryEncoded),isEmptyResponse:!0}:null},_getMapkitMapsResponse:function(t){var n=t.features.shift();return!(n.relevance<.9)||n.place_name&&e.isRelevant(n.place_name.toLowerCase(),["directions","map","maps","st","street","ave","avenue","dr","drive","pl","place","apt","suite","latitude","longitude","zip","code","postal"])?{src:"mapkit",responseType:t.response_type,query:e.Utils.Strings.decodeQueryAndStripHTML(t.queryEncoded),results:[this._getMapkitMapsItemResponse(n)]}:{src:"mapkit",results:[]}},_getPlaceItemResponse:function(n,i){var a={};n.id&&n.id.length&&(a.itemId=n.id),n.name&&n.name.length&&(a.name=n.name),a.number=i+1,n.address&&n.address.length&&(a.address=n.address),n.address_lines&&n.address_lines.length&&(a.addressLines=n.address_lines),n.phone&&n.phone.length&&(a.phone=n.phone),n.display_phone&&n.display_phone.length&&(a.displayPhone=n.display_phone);var r=n.coordinates;return r&&(a.lat=parseFloat(r.latitude),a.lon=parseFloat(r.longitude)),n.timezone&&n.timezone.length&&(a.timezone=n.timezone),n.engine&&n.engine.length&&("TripAdvisor"===n.engine&&(n.engine="Tripadvisor"),a.source=n.engine,a.sourceId=t(a.source)),n.data_providers&&(a.dataProviders=n.data_providers),n.provider_meta&&(a.providerMeta=n.provider_meta),n.url&&n.url.length&&(a.url=n.url),n.website&&n.website.length&&(a.website=n.website),n.image&&n.image.length&&(a.image=n.image),n.photoURL&&n.photoURL.length?a.imageURL=n.photoURL:n.name&&(a.imageURL="/?q="+encodeURIComponent(n.name)+"&ia=images&iax=images"),n.thumbnails&&n.thumbnails.length&&(a.thumbnails=n.thumbnails.map((function(e){return"Yelp"===n.engine?e.replace(/ms.jpg/,"ls.jpg"):e}))),n.menu&&n.menu.length&&(a.menuURL=n.menu),n.price&&e.isNumber(n.price)&&(a.price=n.price),n.hours&&(a.hours=n.hours),n.distance&&(a.distance=n.distance),n.returned_categories&&n.returned_categories.length&&(a.categories=n.returned_categories.map((function(e){return{id:e[1],name:e[0]}}))),n.provider&&(a.provider=n.provider),n.embed&&(a.embed=n.embed),n.rating&&e.isNumber(n.rating)&&(a.rating=n.rating),"Yelp"===n.engine&&n.rating?(a.ratingImage="/assets/yelp-stars/v3/"+n.rating+".png",a.ratingImageRetina="/assets/yelp-stars/v3/"+n.rating+"@2x.png"):"Tripadvisor"===n.engine&&n.rating&&(a.ratingImage="/assets/ta-ratings/"+n.rating+".svg"),n.reviews&&e.isNumber(n.reviews)&&(a.reviewCount=n.reviews,a.numberOfReviews=n.reviews),a.reviewsURL=this.getPlaceReviewsURL(n),n.review_detail&&n.review_detail.length&&(a.reviews=n.review_detail.map((function(t){var i={};t.id&&t.id.length&&(i.id=t.id),t.rating&&e.isNumber(t.rating)&&(i.rating=t.rating),n.engine&&"Yelp"===n.engine?(i.ratingImage="/assets/yelp-stars/v3/"+t.rating+".png",i.ratingImageRetina="/assets/yelp-stars/v3/"+t.rating+"@2x.png"):"Tripadvisor"===n.engine&&(i.ratingImage="/assets/ta-ratings/"+t.rating+".svg"),t.time_created&&e.isNumber(t.time_created)&&(i.timeCreated=t.time_created),n.url&&n.url.length&&("Yelp"===n.engine?i.url=i.id?n.url+"&hrid="+i.id:n.url:"Tripadvisor"===n.engine&&(i.url=n.url+"#review_"+i.id)),t.excerpt&&t.excerpt.length&&(i.excerpt=t.excerpt);var a=t.user;return a&&(i.user={},a.id&&a.id.length&&(i.user.id=a.id),a.name&&a.name.length&&(i.user.name=a.name),a.image_url&&a.image_url.length&&(i.user.image=a.image_url),a.id&&a.id.length&&"Yelp"===n.engine&&(i.user.url="https://www.yelp.com/user_details?userid="+a.id)),i}))),a},_getMapkitMapsItemResponse:function(e){var t,n,i={};(e.context&&e.context.forEach((function(e){var t=e.id.split(".")[0];i[t]=e.text})),e.address||e.place_type&&"address"==e.place_type[0])?(t=e.place_name.split(",")[0],i.place&&i.region&&i.place!==i.region?(n=i.postcode?i.place+", "+i.region+" "+i.postcode:i.place+", "+i.region,n=i.locality?i.locality+", "+n:n):i.place?(n=i.postcode?i.place+" "+i.postcode:i.place,n=i.locality?i.locality+", "+n:n,n=i.country?n+", "+i.country:n):n=i.region?i.region===e.name?i.country:i.region+", "+i.country:i.country):(t=e.text,i.place?(t=i.place,n=i.place!==i.region?i.region:i.country):n=i.region&&name!==i.region?i.region:i.country);var a={lat:e.center[1],lon:e.center[0],name:t,address:n?t+", "+n:t};return e.bbox&&(a.bbox=e.bbox),n&&(a.addressLines=[n]),a},_getWikipediaMapsResponse:function(e){return{src:"wikipedia",results:e.features.map((function(e){return{lat:e.center[1],lon:e.center[0],bbox:e.bbox,name:e.place_name,address:e.place_name}}))}},_getMapsSource:function(e){return e&&e.features&&e.query?"mapkit":e?"wikipedia":"unknown"}}}(DDG),function(e){var t=640,n="e15a2d",i="66abff",a="DE5833",r="DE5833",o=0,s=180,l=90,c=270,u=268435456,d=85445659.44705395;function h(e){return(Math.round(e)-u)/d*180/Math.PI}function p(e){return 180*(Math.PI/2-2*Math.atan(Math.exp((Math.round(e)-u)/d)))/Math.PI}e.Utils.Mapkit=function(){this.isInitialized=!1},e.Utils.Mapkit.prototype={getAccessToken:function(e){$.ajax({dataType:"text",url:"/local.js?get_mk_access_token=1"}).done((function(t){e(t)}))},autocomplete:function(e,t){this._getInTokenQueue({type:"autocomplete",params:e,callbackFn:t})},search:function(e,t){this._getInTokenQueue({type:"search",params:e,callbackFn:t})},directions:function(e,t){this._dir_access_token?this._directions(this._dir_access_token,e,t):this.getAccessToken(function(n){this._dir_access_token=n,this._directions(this._dir_access_token,e,t)}.bind(this))},_getInTokenQueue:function(e){this._searchAccessToken?"search"===e.type?this._search(this._searchAccessToken,e.params,e.callbackFn):this._autocomplete(this._searchAccessToken,e.params,e.callbackFn):this._searchTokenPending?this._searchTokenWaitlist.push({params:e.params,callbackFn:e.callbackFn}):(this._searchTokenPending=!0,this._searchTokenWaitlist=this._searchTokenWaitlist||[],this._searchTokenWaitlist.push({params:e.params,callbackFn:e.callbackFn}),this.getAccessToken(function(t){this._searchAccessToken=t,this._searchTokenWaitlist.forEach(function(t){"search"===e.type?this._search(this._searchAccessToken,t.params,t.callbackFn):this._autocomplete(this._searchAccessToken,t.params,t.callbackFn)}.bind(this)),this._searchTokenWaitlist=[],this._searchTokenPending=!1}.bind(this)))},_autocomplete:function(e,t,n){$.ajax({url:"https://duckduckgo.com/mapkit/?https://api.apple-mapkit.com/v1/searchAutocomplete?"+$.param(t),beforeSend:function(t){t.setRequestHeader("Authorization","Bearer "+e)}}).done((function(e){n(e)}))},_search:function(e,t,n){$.ajax({url:"https://duckduckgo.com/mapkit/?https://api.apple-mapkit.com/v1/search?"+$.param(t),beforeSend:function(t){t.setRequestHeader("Authorization","Bearer "+e)}}).done((function(e){n(e)}))},_directions:function(e,t,n){$.ajax({url:"https://duckduckgo.com/mapkit/?https://api.apple-mapkit.com/v1/directions?"+$.param(t),beforeSend:function(t){t.setRequestHeader("Authorization","Bearer "+e)}}).done((function(e){n(e)}))},init:function(t){this._waitList=this._waitList||[],this.isInitialized?t(null,!0):this._waitList.push(t),this.isInitializing||this.isInitialized||(this.isInitializing=!0,e.require("mapkit",function(){if(!w.mapkit)return t(new Error("Unable to load mapkit JS"));$.ajax({dataType:"text",url:"/local.js?get_mk_token=1"}).done(function(t){var n={authorizationCallback:function(e){e(t)},language:e.device.getLocale().replace("_","-"),_proxyPrefixes:[e.services.getURL("mapkit")+"?"]};w.mapkit.init(n),e.pixel.fire("map_mki"),w.mapkit.addEventListener("configuration-change",function(e){if("Initialized"===e.status)this.isInitialized=!0,this.isInitializing=!1,this._waitList.forEach((function(e){e(null,!0)})),this._waitList=[]}.bind(this)),w.mapkit.addEventListener("error",function(e){this._waitList.forEach((function(t){t("MapKit failed to initialize: "+e.status,!1)}))}.bind(this))}.bind(this)).fail(function(){this._waitList.forEach((function(e){e("Error getting Mapkit auth token",!1)}))}.bind(this))}.bind(this)))},coord:function(e,t){return new w.mapkit.Coordinate(e,t)},regionFromLatLon:function(e,t){return new w.mapkit.CoordinateRegion(this.coord(e,t),new w.mapkit.CoordinateSpan(.005,.01))},regionFromBoundingBox:function(e){return e=this._formatBBox(e),this.boundingRegion(e).toCoordinateRegion()},regionFromGeoBbox:function(e){var t=e.top_left.split(","),n=e.bottom_right.split(","),i=[parseFloat(t[1]),parseFloat(t[0]),parseFloat(n[1]),parseFloat(n[0])];return this.regionFromBoundingBox(i)},boundingRegion:function(e){return new w.mapkit.BoundingRegion(e.maxlat,e.maxlon,e.minlat,e.minlon)},mapType:function(e){return e?w.mapkit.Map.MapTypes.Hybrid:w.mapkit.Map.MapTypes.Standard},marker:function(e,t,n,i){return new w.mapkit.Annotation(this.coord(e,t),n,i)},getStaticImageURL:function(t){var n,i={},a=t.userLoc?t.userLoc:null,r=this._getStaticMapSize(t.width||400,t.height||200),o=this._getBaseParams(r);return(t.marker||t.markers&&1===t.markers.length)&&(i=this._getSingleMarkerParams(t.marker||t.markers[0])),t.markers&&t.markers.length>1&&(i=this._getMultipleMarkersParams(t.markers,a,r)),a&&i.annotations&&(n=this._getUserLocMarkerParams(a),i.annotations.splice(-3,0,n)),i.annotations=i.annotations?JSON.stringify(i.annotations):"",e.services.getURL("externalImages")+"?"+$.param(o)+"&"+$.param(i)},getStaticEmptyMapURL:function(t){var n=this._getStaticMapSize(t.width||400,t.height||200),i=this._getBaseParams(n);return i.center=t.latitude+","+t.longitude,e.services.getURL("externalImages")+"?"+$.param(i)},getStaticDirectionsURL:function(t,n){var i,o="",s={},l=this._getStaticMapSize(n&&n.width||400,n&&n.height||200),c=this._getBaseParams(l),u=t[0],d=t[t.length-1];c.center="auto",n.colorScheme&&"string"==typeof n.colorScheme&&(c.colorScheme=n.colorScheme),s.annotations=[],i=n.colorScheme?"dark"===n.colorScheme?r:a:e.settings.isDarkTheme()?r:a,s.annotations.push({point:u[0]+","+u[1],markerStyle:"dot",color:i}),s.annotations.push({point:d[0]+","+d[1],markerStyle:"balloon",color:i}),s.annotations=JSON.stringify(s.annotations);var h=[],p=[],m=.001,g=[{points:e.geo.encodePolyline(t),strokeColor:e.settings.isDarkTheme()?"7295f6":"557ff3",lineWidth:"5"}];s.overlays=JSON.stringify(g);for(var f=(o=e.services.getURL("externalImages")+"?"+$.param(c)+"&"+$.param(s)).length>2e3;f;)h=e.geo.simplifyPolyline(t,m),p=e.geo.encodePolyline(h),g[0].points=p,s.overlays=JSON.stringify(g),m*=5,f=(o=e.services.getURL("externalImages")+"?"+$.param(c)+"&"+$.param(s)).length>2e3;return o},_getBaseParams:function(t){return{scale:e.device.isRetina?"2":"1",lang:e.device.getLang(),colorScheme:e.settings.isDarkTheme()?"dark":"light",format:"png",size:t}},_getSingleMarkerParams:function(t){var a={};return t.bbox?a.spn=this._stringifyLatLonValue(Math.min(e.geo.getLatDelta(t.bbox[1],t.bbox[3]),90))+","+this._stringifyLatLonValue(Math.min(e.geo.getLonDelta(t.bbox[0],t.bbox[2]),180)):"maps_places"===t.parentId&&(a.z=15),$.isNumeric(t.lat)&&$.isNumeric(t.lon)?a.center=this._stringifyLatLonValue(t.lat)+","+this._stringifyLatLonValue(t.lon):a.center=w.encodeURI(t.address),a.annotations=[{point:a.center,color:e.settings.isDarkTheme()?i:n}],a},_getMultipleMarkersParams:function(t,a,r){var o={},s=a?9:10,l=t.slice().sort((function(e,t){return e.number-t.number})).slice(0,s).reverse(),c=r.split("x").map((function(e){return parseInt(e,10)})),u={width:c[0],height:c[1]},d=this._getPaddedSpnAndCenter(l,u),h=this._getZoomLevelSpn(15,{lat:d.centerLat,lon:d.centerLon},u);return o.center=this._stringifyLatLonValue(d.centerLat)+","+this._stringifyLatLonValue(d.centerLon),d.latDelta<=h.latDelta&&d.lonDelta<=h.lonDelta?o.z=15:o.spn=this._stringifyLatLonValue(d.latDelta)+","+this._stringifyLatLonValue(d.lonDelta),o.annotations=l.map((function(t,a,r){var o={point:t.lat+","+t.lon,color:e.settings.isDarkTheme()?i:n};return a>=r.length-3?(o.markerStyle="balloon",o.glyphText=(r.length-a).toString()):o.markerStyle="dot",o})),o},_getPaddedSpnAndCenter:function(t,n){var i=n.width,a=n.height,r=this._formatBBox(this._bboxFromMarkers(t)),u=56*e.geo.distance({lat:r.minlat,lon:r.minlon},{lat:r.maxlat,lon:r.minlon})/a,d=56*e.geo.distance({lat:r.maxlat,lon:r.minlon},{lat:r.maxlat,lon:r.maxlon})/i,h=56*e.geo.distance({lat:r.minlat,lon:r.minlon},{lat:r.minlat,lon:r.maxlon})/i,p=t.concat([{point:{lat:r.maxlat,lon:r.minlon},distance:u,bearing:o},{point:{lat:r.maxlat,lon:r.minlon},distance:d/2,bearing:c},{point:{lat:r.maxlat,lon:r.maxlon},distance:u,bearing:o},{point:{lat:r.maxlat,lon:r.maxlon},distance:d/2,bearing:l},{point:{lat:r.minlat,lon:r.minlon},distance:u,bearing:s},{point:{lat:r.minlat,lon:r.minlon},distance:h/2,bearing:c},{point:{lat:r.minlat,lon:r.maxlon},distance:u,bearing:s},{point:{lat:r.minlat,lon:r.maxlon},distance:h/2,bearing:l}].map((function(t){return e.geo.getDestinationPoint(t.point,t.distance,t.bearing)}))),m=this._formatBBox(this._bboxFromMarkers(p)),g=Math.min(e.geo.getLatDelta(m.maxlat,m.minlat),90),f=Math.min(e.geo.getLonDelta(m.maxlon,m.minlon),180),_=e.geo.getDestinationPoint(e.geo.getCenterOfPoints(p),u/2,o);return{latDelta:g,lonDelta:f,centerLat:_.lat,centerLon:_.lon}},_getUserLocMarkerParams:function(t){return{point:t.lat+","+t.lon,color:e.settings.isDarkTheme()?"ffffff":"66abff",markerStyle:"dot"}},isUserLocNearMarkers:function(t,n,i,a){if(!t)return!1;var r=i.slice(),o=e.geo.intersects(t,n),s=e.geo.near(t,r,5);return a&&s||o},_formatBBox:function(e){var t=e;return $.isArray(e)&&(t={minlon:parseFloat(e[0]),maxlat:parseFloat(e[1]),maxlon:parseFloat(e[2]),minlat:parseFloat(e[3])}),t},_bboxFromMarkers:function(e){var t=90,n=-90,i=180,a=-180;return e.forEach((function(e){t=Math.min(t,e.lat),n=Math.max(n,e.lat),i=Math.min(i,e.lon),a=Math.max(a,e.lon)})),[i,n,a,t]},_getStaticMapSize:function(e,n){var i,a,r=e/n;return e>t||n>t?e>n?a=(i=t)/r:n>e?i=(a=t)*r:(i=t,a=t):(i=e,a=n),Math.round(i)+"x"+Math.round(a)},_stringifyLatLonValue:function(e){return"number"==typeof e?parseFloat(e.toFixed(4)).toString():e},_getZoomLevelSpn:function(e,t,n){var i,a,r=(i=t.lon,Math.round(u+d*i*Math.PI/180)),o=(a=t.lat,Math.round(u-d*Math.log((1+Math.sin(a*Math.PI/180))/(1-Math.sin(a*Math.PI/180)))/2)),s=20-(e-1),l=Math.pow(2,s),c=n.width*l,m=n.height*l,g=r-c/2,f=o-m/2,_=h(g),v=h(g+c)-_,k=p(f);return{latDelta:-1*(p(f+m)-k),lonDelta:v}}}}(DDG),DDG.Data.templates={defaultOptions:{price:!0,brand:!0,rating:!0,ratingText:!0,moreAt:!0,content:!1},groups:{base:{item:"base_item",detail:"base_detail",options:{price:!1,brand:!1,rating:!1,ratingText:!1,rowHighlight:!1,keySpacing:!1,moreAt:!1}},text:{item:"text_item",detail:"text_detail"},info:{item:"basic_image_item",detail:"basic_info_detail",options:{moreAt:!0,aux:!1}},products:{item:"products_item",detail:"products_detail",item_detail:"products_item_detail",wrap_detail:"base_detail",options:{rating:!0,price:!0,brand:!0,hideReviewText:!1}},products_simple:{item:"basic_image_item",detail:"products_detail",item_detail:"products_item_detail",wrap_detail:"base_detail",options:{price:!1,brand:!1,rating:!1,ratingText:!0}},movies:{item:"basic_image_item",detail:"products_detail",item_detail:"products_item_detail",wrap_detail:"base_detail",options:{price:!1,brand:!1,rating:!1,ratingText:!0},variants:{tile:"poster"},elClass:{tileBody:"is-hidden"}},media:{item:"media_item",detail:"basic_info_detail",item_detail:"media_item_detail",options:{moreAt:!0,aux:!1}},icon:{item:"text_item",detail:"basic_icon_detail",item_detail:"products_item_detail"},places:{item:"places_item",detail:"places_detail"},list:{item:"text_item",detail:"list_detail"},images:{item:"images_item",detail:"images_detail"},videos:{item:"videos_item",detail:"videos_detail"}},viewVariants:{bgColor:{dark:"bg-clr--dk",dark2:"bg-clr--dk2",light:"bg-clr--lt",light2:"bg-clr--lt2",light3:"bg-clr--lt3",red:"bg-clr--red",redLight:"bg-clr--red-light",redDark:"bg-clr--red-dark",blue:"bg-clr--blue",blueLight:"bg-clr--blue-light",blueDark:"bg-clr--blue-dark",purple:"bg-clr--purple",green:"bg-clr--green",gold:"bg-clr--gold"},detail:{light:"detail--l"},tile:{narrow:"tile--c--n",wide:"tile--c--w",xwide:"tile--c--xw",video:"tile--b--i--vid tile--c",poster:"tile--b--i--mov tile--c--n",local:{tile:"tile--loc",tileFront:"tile--loc__main",tileBack:"tile--loc__alt"},basic1:[{tileTitle:"2line"},{tileSnippet:"small"}],basic2:[{tileTitle:"3line-small"},{tileSnippet:"large"}],basic3:[{tileTitle:"3line-large"},{tileSnippet:"small"}],basic4:[{tileTitle:"1line-large"},{tileSnippet:"large"}]},tileTitle:{"1line":"tile__title--1","1line-large":"tile__title--1lg","2line":"tile__title--2","3line":"tile__title--3","4line":"tile__title--4","3line-small":"tile__title--3sm","3line-large":"tile__title--3lg"},tileSubtitle:{"2line":"tile__sub--2"},tileSnippet:{small:"tile__content--sm",large:"tile__content--lg"},tileFooter:{"2line":{tileFoot:"tile__foot--2",tileBody:"has-foot--2"},"3line":{tileFoot:"tile__foot--3",tileBody:"has-foot--3"},"4line":{tileFoot:"tile__foot--4",tileBody:"has-foot--4"}},tileRating:{starsLeft:"tile__rating--left",starsRight:"tile__rating--right"},iconImage:{small:"c-icon__img-wrap--sm",medium:"c-icon__img-wrap--md",large:"c-icon__img-wrap--lg"},iconBadge:{small:"c-icon__badge--sm",medium:"c-icon__badge--md",large:"c-icon__badge--lg"},iconTitle:{large:"c-icon__title--lg"},productSub:{noMax:"c-product__subtitle--nm"}}},function(e){var t;e.DDG||(e.DDG={}),(t=e.DDG).abbrevNumber=function(e){return $.isNumeric(e)?e<1e3?e:e<1e4?Math.round(e/100)/10+"K":e<1e6?Math.round(e/1e3)+"K":e<1e7?Math.round(e/1e5)/10+"M":e<1e9?Math.round(e/1e6)+"M":e<1e10?Math.round(e/1e8)/10+"B":Math.round(e/1e9)+"B":e},t.capitalize=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},t.capitalizeWords=function(e){return e=(e=e.replace(/\w\S+/g,t.capitalize)).replace(/\b(?:Of|And|The|At|By|In|To|A|For|An|On|Or)\b/g,(function(e){return e.toLowerCase()}))},t.commifyNumber=function(e){if(!$.isNumeric(e))return e;var t=e.toString().split(".");return t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),t.join(".")},t.eventToCoordinates=function(e){var t=e.originalEvent,n=t.touches&&t.touches.length?t.touches[0]:e;return{x:n.clientX,y:n.clientY}},t.exec_template=function(e,n){if(!e)throw new Error("DDG.exec_template: template is null");var i,a;if($.isFunction(e)?a=e:t.templates[e]?a=t.templates[e]:e.match(/^DDH\./)&&(a=t.getProperty(window,e)),!a)throw new Error("Template Not Found: "+e);if(!(i=a(n||{})))throw new Error("Error Rendering Template: "+e,n);return i},t.$exec_template=function(e,n){var i=t.exec_template(e,n);return i&&$(i)},t.findInArray=function(e,t,n){for(var i=0;i1)||o[o.length-2]===r)&&(t.settings&&t.settings.updater&&t.settings.updater.isDarkBg&&/wikipedia/.test(r)&&(s=".white"),i="/assets/icons/favicons/"+r+s+(t.is3x?".3x":t.is2x?".2x":"")+".png")),i||(i=t.services.getURL("icons")+n+".ico"),i}},t.getImageProxyURL=function(e,n){var i="&f=1"+((n=n||{}).width?"&w="+n.width:"")+(n.height?"&h="+n.height:"")+(n.noFallback?"&nofb=1":"")+(n.token?"&ipt="+n.token:"")+(n.origin?"&ipo="+n.origin:"")+(n.noAutoPadding?"&p=0":"");return t.isInternalURL(e)?e:(e.match(/^\/\//)&&(e=window.location.protocol+e),e=n.dontEncode?e:encodeURIComponent(e),t.services.getURL("images")+"?u="+e+i)},t.getOrdinal=function(e){if(!e)return"";var t=["th","st","nd","rd"],n=e%100;return e+(t[(n-20)%10]||t[n]||t[0])},t.getProperty=function(e,t){if(!t)return null;for(var n=t.split("."),i=e,a=0,r=n.length;a"+e+"

                ")).find("a")).length?r=$(a[0]):(n=i.text(),t=""),"text"===t?n=r.text():"rest"===t?(r.remove(),(n=i.text())&&(n=n.replace(/^(\-|\:|\;|,|"|'|\s)+/,""))):"url"===t&&(n=r[0].href),n},t.pluralize=function(e,t,n){return(e=parseFloat(e))||0===e?1===e?t:n||t+"s":""},t.querystringParam=function(e){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(location.search);return null===t?"":decodeURIComponentSafe(t[1].replace(/\+/g," "))},t.scaleToFit=function(e,t,n,i){var a={width:e,height:t};return n&&a.width>n&&(a.width=n,a.height=n/e*t),i&&a.height>i&&(a.height=i,a.width=i/t*e),a},t.shuffle=function(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),i=e[t];e[t]=e[n],e[n]=i}return e},t.strip_all_html=function(e){for(var t,n="(?:[^\"'>]|\"[^\"]*\"|'[^']*')*",i=new RegExp("<(?:!--(?:(?:-*[^->])*--+|-?)|script\\b"+n+">[\\s\\S]*?[\\s\\S]*?","gi");e!==t;)t=e,e=e.replace(i,"");return e.replace(/]+>/g,""):""},t.strip_non_alpha=function(e){return e&&(e=e.replace(/\W/g,"")),e},t.toHTTPS=function(e){return e&&e.replace(/^http:/,"https:")},t.toHTTP=function(e){return e&&e.replace(/^https/,"http")};var n=document.createElement("a");t.addSearchParam=function(e,t,i){n.href=e;var a=encodeURIComponent(t);return i&&(a+="="+encodeURIComponent(i)),n.search.length>0&&"?"!==n.search?n.search+="&"+a:n.search="?"+a,n.href},t.unescape=function(e){var t=document.implementation.createHTMLDocument("example");return t.documentElement.innerHTML=e,t.body.textContent}}(this),DDG.Data.Settings={colors:{b:"ecf5f8",b2:"2e4a57",ct:"9f9f9f",d:"e7eed5",g:"215017",g2:"ecf8ee",kt:"333333",o:"ffebcd",p:"693E68",r:"d44c2a",r2:"7c2c1f",r3:"fff",r4:"d3B5B0",w:"fff"},directionSources:{"apple-maps-ios":{directionsURL:"maps://?daddr={{addr}}&near={{lat}},{{lng}}",faviconURL:"maps.apple.com",mapURL:"maps://?address={{addr}}&near={{lat}},{{lng}}",name:"Apple Maps",onDevices:["isIDevice"]},"apple-maps-osx":{directionsURL:"http://maps.apple.com/?daddr={{addr}}&&near={{lat}},{{lng}}",mapURL:"http://maps.apple.com/?address={{addr}}&near={{lat}},{{lng}}",name:"Apple Maps",onDevices:["isOSXMavericksAndUp"]},"bing-maps":{directionsURL:"https://bing.com/maps/default.aspx?rtp=~adr.{{addr}}&cp={{lat}}~{{lng}}&lvl=15",mapURL:"https://bing.com/maps/default.aspx?where1={{addr}}",name:"Bing Maps"},"google-maps":{directionsURL:"https://www.google.com/maps/dir//{{addr}}",mapURL:"https://maps.google.com?q={{addr}}",name:"Google Maps"},"here-maps":{directionsURL:"https://maps.here.com/directions/drive//{{addr}}:{{lat}},{{lng}}?map={{lat}},{{lng}},15,normal",faviconURL:"here.com",mapURL:"https://wego.here.com/?map={{lat}},{{lng}},5,normal",name:"HERE Maps",notOnDevices:["isMobileDevice","isIE9"]},osm:{directionsURL:"https://www.openstreetmap.org/directions?route=%3B{{lat}}%2C{{lng}}#map=15/{{lat}}/{{lng}}",mapURL:"https://www.openstreetmap.org/?query={{addr}}#map=5/{{lat}}/{{lng}}",name:"OpenStreetMap"}},fonts:{a:"Arial",b:"Trebuchet MS",c:"Century Gothic",e:"Segoe UI",g:"Georgia",h:"Helvetica",n:"Sans-serif",o:"Tahoma",p:"Proxima Nova",s:"Serif",t:"Times",u:"Helvetica Neue",v:"Verdana"},headerBehaviors:{1:{name:"On & Fixed",onDevices:["hasFixedHeaderSupport"]},"-1":{name:"Off"},d:{name:"On & Dynamic"},s:{name:"On & Scrolling"}},k1:{default:"1",desc:"If you still want to support us, %shelp spread DuckDuckGo%s",desc2:"",desc3:"",name:"Advertisements",type:"boolean"},k18:{default:"-1",desc:"Displays a checkmark to the left of results you've visited",name:"Visited Checkmark",type:"boolean"},k21:{default:"ffffff",desc:"Changes the background color of results on hover, modules, and dropdown menus",name:"Hover, Module, and Dropdown Background Color",type:"color",values:"colors"},k5:{default:"-1",desc:"Changes what happens when you click on a video thumbnail",name:"Video Playback",type:"dropdown",values:{1:"Always play on DuckDuckGo",2:"Open on third-party site","-1":"Prompt me"}},k7:{default:"ffffff",desc:"Changes the background color across the entire site",name:"Background Color",type:"color",values:"colors"},k8:{default:"494949",desc:"Changes the color of result snippets",name:"Snippet Color",type:"color",values:{g:"595959"}},k9:{default:"1A0DAB",desc:"Changes the color of result titles",name:"Title Color",type:"color",values:{b:"1168cc",g:"292929"}},ka:{default:"p",desc:"Changes the font of result titles",name:"Title Font",order:["a","c","g","h","u","p","n","e","s","t","o","b","v"],type:"dropdowncustom",values:"fonts"},kaa:{default:"6c00a2",desc:"Changes the color of titles for results you've visited",name:"Visited Title Color",type:"color",values:{g:"292929",p:"6830bb"}},kac:{default:"1",desc:"Shows suggestions under the search box as you type",name:"Autocomplete Suggestions",type:"boolean"},kad:{default:"wt_WT",desc:"Changes the language across the entire site",dropdownSettings:{category:"general"},name:"Language",order:["wt_WT"],type:"dropdown",values:"languages"},kae:{default:"-1",dropdownSettings:{category:"appearance",options:["-1","d"]},name:"Theme",type:"theme",values:{"-1":{color1:"084999",color2:"888",colorScheme:"light",id:"-1",name:"Default",settings:{k10:null,k11:null,k12:null,k13:null,k14:null,k15:null,k16:null,k17:null,k18:null,k19:null,k20:null,k21:null,k7:null,k8:null,k9:null,ka:null,kaa:null,kac:null,kaf:null,kag:null,kai:null,kf:null,kj:null,km:null,kt:null,kx:null}},b:{color1:"3434d4",color2:"047d00",id:"b",name:"Basic",settings:{k10:null,k11:null,k12:null,k13:null,k14:null,k15:"normal",k16:null,k17:null,k18:null,k19:"4495d4",k20:null,k21:null,k7:null,k8:"444",k9:"1a0dab",ka:"h",kaa:"5500A3",kac:null,kaf:null,kag:null,kai:null,kf:"-1",kj:null,km:null,kt:"h",kx:"006621"}},c:{color1:"0f6ccc",color2:"ca4323",id:"c",name:"Contrast",settings:{k10:null,k11:null,k12:null,k13:null,k14:null,k15:"normal",k16:null,k17:null,k18:null,k19:"4495d4",k20:null,k21:null,k7:null,k8:"333",k9:"3a7fb4",ka:null,kaa:"6d59a3",kac:null,kaf:null,kag:null,kai:null,kf:null,kj:null,km:null,kt:null,kx:"bd4b2b"}},d:{color1:"",color2:"",colorScheme:"dark",id:"d",name:"Dark",settings:{k10:null,k11:"eeeeee",k12:null,k13:null,k14:null,k15:null,k16:null,k17:null,k18:null,k19:null,k20:null,k21:"282828",k7:"1c1c1c",k8:"cccccc",k9:"eeeeee",ka:null,kaa:"aaaaaa",kac:null,kaf:null,kag:null,kai:null,kf:null,kj:"161616",km:null,kt:null,kx:"eeeeee",palette:{base:"#1c1c1c",primary:"#333333",quaternary:"#444444",secondary:"#282828",tertiary:"#161616",text:{primary:"#eeeeee",secondary:"#cccccc",tertiary:"#666666"}}}},g:{color1:"333",color2:"888",id:"g",name:"Gray",settings:{k10:"3a7fb4",k11:"3a7fb4",k12:null,k13:null,k14:null,k15:"normal",k16:null,k17:"3a7fb4",k18:"1",k19:"4495d4",k20:"888888",k21:null,k7:null,k8:"666",k9:"333",ka:null,kaa:"333",kac:null,kaf:null,kag:null,kai:null,kf:null,kj:null,km:null,kt:null,kx:"888"}},t:{id:"t",name:"Terminal",settings:{k10:null,k11:null,k12:null,k13:null,k14:null,k15:null,k16:null,k17:null,k18:null,k19:null,k20:null,k21:"222",k7:"222",k8:"ccc",k9:"50f148",ka:null,kaa:"ad4ad2",kac:null,kaf:null,kag:null,kai:null,kf:null,kj:"222",km:null,kt:null,kx:"a1ac25"}}}},kaf:{default:"b",desc:"Changes how result URLs are displayed",name:"URL Format",order:["b","s","-1"],tokenComments:{"-1":{comment:"This is an option for a user setting. It refers to showing only the domain for a website URL (e.g. domain.com)",image:"https://i.imgur.com/lWUCzz7.png"},b:{comment:"This is an option for a user setting. It refers to showing the full URL for a website, including the url path, but made to look like the breadcrumbs of a website (e.g. website.com > this > is > the > path)",image:"https://i.imgur.com/EH1fc0H.png"},desc:{comment:"This is the description of a user setting",image:"https://i.imgur.com/IqBhHpM.png"},name:{comment:"This is the name of a user setting",image:"https://i.imgur.com/LRuNuA8.png"},s:{comment:"This is an option for a user setting. It refers to showing the full URL for a website, including the url path (e.g. website.com/this/is/this/path)",image:"https://i.imgur.com/1zkrPJE.png"}},type:"dropdown",values:{"-1":"Domains Only",b:"Full URLs (Breadcrumbs)",s:"Full URLs (Slashes)"}},kag:{default:"-1",desc:"Shows the search button background",name:"Search Button Background",type:"boolean"},kah:{desc:"Stores the previous region that was set",name:"Previous Region",values:"regions"},kai:{default:"a",desc:"Changes where result URLs are displayed",name:"URL Placement",order:["a","b","-1"],type:"dropdown",values:{"-1":"Below Snippet",a:"Above Title",b:"Below Title"}},kaj:{default:"-1",desc:"Preferred units of measure",name:"Units of Measure",order:["-1","m","u"],type:"dropdown",values:{"-1":"No preference (default)",m:"Metric (kilograms, meters, Celsius)",u:"US-based (pounds, feet, Fahrenheit)"}},kak:{default:"1",desc:"Shows links to instructions for how to add DuckDuckGo to your browser",name:"Install DuckDuckGo",type:"boolean"},kan:{default:"0",name:"ATB related (not displayed on settings page)"},kao:{default:"1",desc:"Shows the privacy benefits of using DuckDuckGo on the homepage",name:"Homepage Privacy Tips",type:"boolean"},kap:{default:"1",desc:"Shows occasional reminders to sign up for the DuckDuckGo privacy newsletters",hideTitle:!0,name:"Privacy Newsletter",type:"boolean"},kaq:{default:"1",desc:"Shows sign-up form for the DuckDuckGo privacy newsletters",name:"Privacy Newsletters",type:"boolean"},kar:{default:"",desc:"DuckDuckGo only uses your approximate location. That's all we need to deliver better results, closer to you. %sLearn more%s.",desc2:"",desc3:"",hideTitle:!0,name:"Location",type:"clear"},kas:{default:"0",name:"Mobile Instructions (not displayed on settings page)"},kat:{default:"1",desc:"Prompt me to use my approximate location to get nearby results.",name:"Location",type:"boolean"},kau:{default:"1",desc:"It's okay to (very infrequently) ask me about my experience using DuckDuckGo",name:"Help Improve DuckDuckGo",type:"boolean"},kav:{default:"-1",desc:"Loads more results when scrolling",dropdownSettings:{category:"general"},name:"Infinite Scroll",type:"boolean"},kaw:{default:"1",desc:"Hides search term from being shown in browser tab/history",name:"Search Visibility",type:"boolean"},kax:{default:"1",desc:"Shows occasional reminders to add DuckDuckGo to your browser",hideTitle:!0,name:"ATB Dismiss",type:"boolean"},kay:{default:"-1",desc:"The rendering method to use for interactive maps",name:"Map Rendering",order:["-1","b","i"],type:"dropdown",values:{"-1":"Not set",b:"Best available",i:"Image tiles"}},kaz:{default:"1",desc:"Improves result legibility with updated URL format, placement, and color",dropdownSettings:{category:"appearance"},name:"New URL Style",type:"boolean"},kbc:{default:"-1",desc:"Allows Cloud Save key to be stored locally on device (required to use Cloud Save)",name:"Cloud Save",type:"boolean"},kc:{default:"1",desc:"Loads more results in Images, Videos, and Shopping when scrolling",name:"Infinite Scroll for Images, Videos, and Shopping",type:"boolean"},kd:{default:"1",desc:"In some older browsers, it's necessary to redirect your clicks through our server to prevent search leakage. %sLearn more%s.",desc2:"",desc3:"",name:"Redirect (When Necessary)",type:"boolean"},kea:{default:"0",desc:"Shows welcome message to EU Android preference menu users",name:"EU Android Welcome Message",type:"boolean"},kf:{default:"1",desc:"Displays favicons for each result",dropdownSettings:{category:"appearance"},name:"Site Icons",type:"boolean"},kg:{default:"g",desc:"Search queries are included in URL (if off, searches will use POST requests)",name:"GET Requests",type:"boolean",values:{1:"g","-1":"p"}},kj:{default:"ffffff",desc:"Changes the header color across the entire site",name:"Header Color",type:"color",values:"colors"},kk:{default:"1",desc:"Enables keyboard shortcuts on the site",name:"Keyboard Shortcuts",type:"boolean"},kl:{default:null,desc:"Changes search results based on region",name:"Region",order:["wt-wt"],type:"dropdown",values:"regions"},km:{default:"l",desc:"Displays results in the center of the page",name:"Center Alignment",type:"boolean",values:{1:"m","-1":"l"}},kn:{default:"-1",desc:"Opens results in new windows/tabs",dropdownSettings:{category:"general"},name:"Open Links in a New Tab",type:"boolean"},kntp_s:{default:"0",desc:"Shows most visited links on new tab page",name:"New Tab Page Most Visited Sites",type:"boolean"},ko:{default:"d",desc:"Changes how the header is displayed and its behavior as you scroll",deviceDependent:!0,name:"Header Behavior",type:"dropdown",values:"headerBehaviors"},kos:{default:"-1",desc:"Shows occasional reminders to add DuckDuckGo to your devices",hideTitle:!0,name:"Multi-Step Add-to-Browser Onboarding Step"},kp:{default:"-1",desc:"Omits objectionable (mostly adult) material",name:"Safe Search",order:["1","-1","-2"],type:"dropdown",values:{1:"Strict","-1":"Moderate","-2":"Off"}},ks:{default:"n",desc:"Changes the font size across the entire site",dropdownSettings:{category:"appearance"},name:"Font Size",order:["t","l","n","m","s"],type:"dropdown",values:{l:"Larger",m:"Medium",n:"Large",s:"Small",t:"Largest"}},kt:{default:"p",desc:"Changes the font across the entire site",dropdownSettings:{category:"appearance"},name:"Font",order:["a","c","g","h","u","p","n","e","s","t","o","b","v"],type:"dropdowncustom",values:"fonts"},ku:{default:"-1",desc:"Underlines result titles",name:"Title Underline",type:"boolean"},kv:{compositeKey:{"-1:-1":"-1","-1:1":"m","1:-1":"l","1:1":"1"},default:"1",name:"Page #'s",subsettings:[{default:"1",desc:"Shows page numbers at result page breaks",id:"kv_num",name:"Page Break Numbers",type:"boolean"},{default:"1",desc:"Shows horizontal lines at result page breaks",id:"kv_lin",name:"Page Break Lines",type:"boolean"}],type:"composite"},kw:{default:"n",desc:"Controls the width of the search box and results",name:"Page Width",order:["s","w","n"],type:"dropdown",values:{n:"Normal",s:"Super Wide",w:"Wide"}},kx:{default:"222222",desc:"Changes the color of result URLs",name:"URL Color",type:"color",values:{b:"10385d",e:"858585",g:"0f5c17",l:"222222",o:"d15d0d",p:"732883",r:"c14100"}},kz:{default:"1",desc:"Automatically open relevant Instant Answers",name:"Instant Answers",type:"boolean"},languages:{af_ZA:"Afrikaans (South Africa)",ar_DZ:"العربية (الجزائر)",ar_EG:"العربية (مصر)",ar_JO:"العربية (الأردن)",ar_SA:"العربية (السعودية)",ast_ES:"Asturianu",az_AZ:"Azərbaycan dili",be_BY:"Беларуская (Беларусь)",bg_BG:"Български (България)",bn_BD:"বাংলা(বাংলাদেশ)",bn_IN:"বাংলা (ভারত)",br_FR:"Brezhoneg",bs_BA:"Bosanski",ca_ES:"Català",cs_CZ:"Čeština (Česká republika)",cy_GB:"Cymraeg",da_DK:"Dansk (Danmark)",de_CH:"Deutsch (Schweiz)",de_DE:"Deutsch (Deutschland)",el_GR:"Ελληνικά (Ελλάδα)",en_AU:"English (Australia)",en_CA:"English (Canada)",en_GB:"English (United Kingdom)",en_US:"English (United States)",eo_XX:"Esperanto",es_AR:"Español (Argentina)",es_CL:"Español (Chile)",es_CO:"Español (Colombia)",es_CR:"Español (Costa Rica)",es_EC:"Español (Ecuador)",es_ES:"Español (España)",es_MX:"Español (México)",es_PE:"Español (Perú)",es_UY:"Español (Uruguay)",es_VE:"Español (Venezuela)",et_EE:"Eesti (Eesti)",eu_ES:"Euskara",fa_IR:"فارسی",fi_FI:"Suomi (Suomi)",fr_BE:"Français (Belgique)",fr_CA:"Français (Canada)",fr_CH:"Français (Suisse)",fr_FR:"Français (France)",ga_IE:"Gaeilge (Éire)",gd_GB:"Gàidhlig",gl_ES:"Galego",he_IL:"עברית‏",hi_IN:"हिंदी (भारत)",hr_HR:"Hrvatski (Hrvatska)",hu_HU:"Magyar (Magyarország)",hy_AM:"Հայերեն",id_ID:"Bahasa Indonesia",io_XX:"Ido",is_IS:"Íslenska (Ísland)",it_IT:"Italiano (Italia)",ja_JP:"日本語 (日本)",kab_DZ:"Taqbaylit",kn_IN:"ಕನ್ನಡ (India)",ko_KR:"한국어 (대한민국)",ku:"Kurdî",kw_GB:"Kernowek",lt_LT:"Lietuvių (Lietuva)",lv_LV:"Latviešu (Latvija)",ml_IN:"മലയാളം",mr_IN:"मराठी",ms_MY:"Bahasa Melayu (Malaysia)",nb_NO:"Norsk (bokmål)",nl_BE:"Nederlands (België)",nl_NL:"Nederlands (Nederland)",nn_NO:"Norsk (nynorsk)",od_IN:"ଓଡ଼ିଆ (ଭାରତ)",pl_PL:"Polski (Polska)",pt_BR:"Português (Brasil)",pt_PT:"Português (Portugal)",ro_RO:"Română (România)",ru_RU:"Русский (Россия)",sc_IT:"Sardu (Sardigna)",si_LK:"සිංහල",sk_SK:"Slovenčina (Slovenská republika)",sl_SI:"Slovenščina (Slovenija)",sq_AL:"Shqip (Shqipëri)",sr_RS:"Српски (Serbia)",sv_SE:"Svenska (Sverige)",ta_IN:"தமிழ்",te_IN:"తెలుగు",th_TH:"ไทย (ประเทศไทย)",tl_PH:"Filipino",tokipona_XX:"Toki Pona",tr_TR:"Türkçe (Türkiye)",uk_UA:"Українська (Україна)",ur_PK:"اردو",vi_VN:"Tiếng Việt (Việt Nam)",wt_WT:"Browser preferred language",zh_CN:"中文 (中国)",zh_TW:"中文 (台灣)"},regions:{"wt-wt":"All regions","ar-es":"Argentina","au-en":"Australia","at-de":"Austria","be-fr":"Belgium (fr)","be-nl":"Belgium (nl)","br-pt":"Brazil","bg-bg":"Bulgaria","ca-en":"Canada (en)","ca-fr":"Canada (fr)","ct-ca":"Catalonia","cl-es":"Chile","cn-zh":"China","co-es":"Colombia","hr-hr":"Croatia","cz-cs":"Czech Republic","dk-da":"Denmark","ee-et":"Estonia","fi-fi":"Finland","fr-fr":"France","de-de":"Germany","gr-el":"Greece","hk-tzh":"Hong Kong","hu-hu":"Hungary","in-en":"India (en)","id-en":"Indonesia (en)","ie-en":"Ireland","il-en":"Israel (en)","it-it":"Italy","jp-jp":"Japan","kr-kr":"Korea","lv-lv":"Latvia","lt-lt":"Lithuania","my-en":"Malaysia (en)","mx-es":"Mexico","nl-nl":"Netherlands","nz-en":"New Zealand","no-no":"Norway","pk-en":"Pakistan (en)","pe-es":"Peru","ph-en":"Philippines (en)","pl-pl":"Poland","pt-pt":"Portugal","ro-ro":"Romania","ru-ru":"Russia","xa-ar":"Saudi Arabia","sg-en":"Singapore","sk-sk":"Slovakia","sl-sl":"Slovenia","za-en":"South Africa","es-ca":"Spain (ca)","es-es":"Spain (es)","se-sv":"Sweden","ch-de":"Switzerland (de)","ch-fr":"Switzerland (fr)","tw-tzh":"Taiwan","th-en":"Thailand (en)","tr-tr":"Turkey","us-en":"US (English)","us-es":"US (Spanish)","ua-uk":"Ukraine","uk-en":"United Kingdom","vn-en":"Vietnam (en)"},tabs:[{id:"general",name:"General",settings:["kl","kad","break","kp","kz","break","kc","kav","kac","kn","k1","kk","kaj","kat","kar","kay","break","kv","break","kak","kax","break","kaq","kap","break","kao","break","kau"]},{id:"theme",name:"Theme",settings:["kae"]},{id:"appearance",name:"Appearance",settings:["kt","ks","kw","km","k7","break","ko","kj","break","ka","k9","kaa","ku","break","k8","kx","kaf","kai","k21","k18","break","kf"]},{id:"privacy",name:"Privacy",settings:["kg","k5","kd"]}]},DDG.Data.languages={fontSubsets:{normal:["sq","eu","br","ch","da","nl","en","fo","fi","fr","gl","de","is","it","mg","no","pt","es","sv"],afrikaans:["af"],catalan:["ca"],cyrillic:["ru","ab","av","ba","be","bg","ce","cv","uk","kk","ku","kv","ky","mk","mn","os","tg","tt","ug","uz","sr"],esperanto:["eo"],estonian:["et"],greek:["el","gr"],hungarian:["hu"],lithuanian:["lt","sl"],maltese:["mt"],polish:["pl"],romanian:["ro"],serbian:["sr","bs","hr","sl","lv"],slovak:["sk","sl","lv"],turkish:["tr"],welsh:["cy"],czech:["cs","sl","lv"]},languageFontLookup:{af:"afrikaans",ca:"catalan",eo:"esperanto",et:"estonian",el:"greek",gr:"greek",hu:"hungarian",lt:"lithuanian",mt:"maltese",pl:"polish",ro:"romanian",tr:"turkish",cy:"welsh",cs:"czech",sk:"slovak",sl:"serbian",bs:"serbian",hr:"serbian",lv:"serbian",ru:"cyrillic",ab:"cyrillic",av:"cyrillic",ba:"cyrillic",be:"cyrillic",bg:"cyrillic",ce:"cyrillic",cv:"cyrillic",uk:"cyrillic",kk:"cyrillic",ku:"cyrillic",kv:"cyrillic",ky:"cyrillic",mk:"cyrillic",mn:"cyrillic",os:"cyrillic",tg:"cyrillic",tt:"cyrillic",ug:"cyrillic",uz:"cyrillic",sr:["serbian","cyrillic"]},translations:[{id:"af",name:lp("language_name","Afrikaans")},{id:"am",name:lp("language_name","Amharic")},{id:"ar",name:lp("language_name","Arabic"),regions:["xa-ar"]},{id:"as",name:lp("language_name","Assamese")},{id:"az",name:lp("language_name","Azerbaijani")},{id:"bg",name:lp("language_name","Bulgarian"),regions:["bg-bg"]},{id:"bn",name:lp("language_name","Bangla")},{id:"bs",name:lp("language_name","Bosnian")},{id:"ca",name:lp("language_name","Catalan"),regions:["ct-ca","es-ca"]},{id:"cs",name:lp("language_name","Czech"),regions:["cz-cs"]},{id:"cy",name:lp("language_name","Welsh")},{id:"da",name:lp("language_name","Danish"),regions:["dk-da"]},{id:"de",name:lp("language_name","German"),regions:["at-de","ch-de","de-de"]},{id:"el",name:lp("language_name","Greek"),regions:["gr-el"]},{id:"en",name:lp("language_name","English"),regions:["au-en","ca-en","id-en","ie-en","il-en","in-en","my-en","nz-en","sg-en","th-en","uk-en","us-en","vn-en","za-en"]},{id:"es",name:lp("language_name","Spanish"),regions:["ar-es","cl-es","co-es","es-es","mx-es","pe-es","ph-en","pk-en","us-es"]},{id:"et",name:lp("language_name","Estonian"),regions:["ee-et"]},{id:"fa",name:lp("language_name","Persian")},{id:"fi",name:lp("language_name","Finnish"),regions:["fi-fi"]},{id:"fil",name:lp("language_name","Filipino")},{id:"fj",name:lp("language_name","Fijian")},{id:"fr",name:lp("language_name","French"),regions:["be-fr","ch-fr","fr-fr"]},{id:"fr-CA",name:lp("language_name","French (Canada)"),regions:["ca-fr"]},{id:"ga",name:lp("language_name","Irish")},{id:"gu",name:lp("language_name","Gujarati")},{id:"he",name:lp("language_name","Hebrew")},{id:"hi",name:lp("language_name","Hindi")},{id:"hr",name:lp("language_name","Croatian"),regions:["hr-hr"]},{id:"ht",name:lp("language_name","Haitian Creole")},{id:"hu",name:lp("language_name","Hungarian"),regions:["hu-hu"]},{id:"hy",name:lp("language_name","Armenian")},{id:"id",name:lp("language_name","Indonesian")},{id:"is",name:lp("language_name","Icelandic")},{id:"it",name:lp("language_name","Italian"),regions:["it-it"]},{id:"iu",name:lp("language_name","Inuktitut")},{id:"ja",name:lp("language_name","Japanese"),regions:["jp-jp"]},{id:"kk",name:lp("language_name","Kazakh")},{id:"km",name:lp("language_name","Khmer")},{id:"kmr",name:lp("language_name","Kurdish (Northern)")},{id:"kn",name:lp("language_name","Kannada")},{id:"ko",name:lp("language_name","Korean"),regions:["kr-kr"]},{id:"ku",name:lp("language_name","Kurdish (Central)")},{id:"lo",name:lp("language_name","Lao")},{id:"lt",name:lp("language_name","Lithuanian"),regions:["lt-lt"]},{id:"lv",name:lp("language_name","Latvian"),regions:["lv-lv"]},{id:"mg",name:lp("language_name","Malagasy")},{id:"mi",name:lp("language_name","Maori")},{id:"ml",name:lp("language_name","Malayalam")},{id:"mr",name:lp("language_name","Marathi")},{id:"ms",name:lp("language_name","Malay")},{id:"mt",name:lp("language_name","Maltese")},{id:"mww",name:lp("language_name","Hmong Daw")},{id:"my",name:lp("language_name","Myanmar (Burmese)")},{id:"nb",name:lp("language_name","Norwegian"),regions:["no-no"]},{id:"ne",name:lp("language_name","Nepali")},{id:"nl",name:lp("language_name","Dutch"),regions:["be-nl","nl-nl"]},{id:"or",name:lp("language_name","Odia")},{id:"otq",name:lp("language_name","Querétaro Otomi")},{id:"pa",name:lp("language_name","Punjabi")},{id:"pl",name:lp("language_name","Polish"),regions:["pl-pl"]},{id:"prs",name:lp("language_name","Dari")},{id:"ps",name:lp("language_name","Pashto")},{id:"pt",name:lp("language_name","Portuguese (Brazil)"),regions:["br-pt","pt-pt"]},{id:"pt-PT",name:lp("language_name","Portuguese (Portugal)")},{id:"ro",name:lp("language_name","Romanian"),regions:["ro-ro"]},{id:"ru",name:lp("language_name","Russian"),regions:["ru-ru"]},{id:"sk",name:lp("language_name","Slovak"),regions:["sk-sk"]},{id:"sl",name:lp("language_name","Slovenian"),regions:["sl-sl"]},{id:"sm",name:lp("language_name","Samoan")},{id:"sq",name:lp("language_name","Albanian")},{id:"sr-Cyrl",name:lp("language_name","Serbian (Cyrillic)")},{id:"sr-Latn",name:lp("language_name","Serbian (Latin)")},{id:"sv",name:lp("language_name","Swedish"),regions:["se-sv"]},{id:"sw",name:lp("language_name","Swahili")},{id:"ta",name:lp("language_name","Tamil")},{id:"te",name:lp("language_name","Telugu")},{id:"th",name:lp("language_name","Thai")},{id:"ti",name:lp("language_name","Tigrinya")},{id:"tlh-Latn",name:lp("language_name","Klingon")},{id:"to",name:lp("language_name","Tongan")},{id:"tr",name:lp("language_name","Turkish"),regions:["tr-tr"]},{id:"ty",name:lp("language_name","Tahitian")},{id:"uk",name:lp("language_name","Ukrainian"),regions:["ua-uk"]},{id:"ur",name:lp("language_name","Urdu")},{id:"vi",name:lp("language_name","Vietnamese")},{id:"yua",name:lp("language_name","Yucatec Maya")},{id:"yue",name:lp("language_name","Cantonese (Traditional)")},{id:"zh-Hans",name:lp("language_name","Chinese Simplified"),regions:["cn-zh"]},{id:"zh-Hant",name:lp("language_name","Chinese Traditional"),regions:["hk-tzh","tw-tzh"]}]},DDG.Data.NewsImageDomains=["wsj.com","latimes.com","fastcompany.com","cnbc.com","billboard.com","cnn.com","techcrunch.com","pando.com","huffingtonpost.com","foxnews.com","nbcnews.com","extratv.com","gawker.com","nymag.com","chron.com","mediaite.com","inquisitr.com","spin.com","mtv.com","cbslocal.com","wired.com","ibtimes.com","entrepreneur.com","arstechnica.com","slashgear.com","theverge.com","businessinsider.com","gizmodo.com","nypost.com","si.com","abcnews.go.com","foxsports.com","sciencedaily.com","eurekalert.org","engadget.com","app.com","valleywx.com","nydailynews.com","kitv.com","observer.com","usmagazine.com","mercurynews.com","deadline.com","abqjournal.com","voanews.com","hollywoodlife.com","justjaredjr.com","popsugar.com","opposingviews.com","kdvr.com","digitaltrends.com","pcworld.com","scpr.com","pcmag.com","operationrainfall.com","awn.com","investopedia.com","geek.com","curbed.com","discovery.com","abcactionnews.com","nola.com","forward.com","crainsnewyork.com","abc7news.com","advocate.com","scientificamerican.com","discovermagazine.com","espn.go.com","xconomy.com","peoplestylewatch.com","people.com","vibe.com","pitchfork.com","anandtech.com","oregonlive.com","gigaom.com","hypable.com","ign.com","comingsoon.net","eonline.com","lemonde.fr","theguardian.com","fortune.com","forbes.com","bloomberg.com","afp.com","time.com","variety.com","telegraph.co.uk","ap.org","zacks.com","newsweek.com","hellogiggles.com","digitalspy.co.uk","refinery29.uk","thewrap.com","bgr.com","afprelaxnews.com","businesswire.com","etonline.com","cosmopolitan.com","esquire.com","foreignpolicy.com","thefiscaltimes.com","tvline.com","esquire.com","vulture.com","accesswire.com","harpersbazaar.com","marketwired.com","insideedition.com","rollingstone.com","instyle.com","rideapart.com","essence.com","townandcountrymag.com","stereogum.com","goal.com","golf.com","cover32.com","delish.com","briefing.com","gma.yahoo.com","popularmechanics.com","foxbusiness.com","countryliving.com","roadandtrack.com","glamour.com","southernliving.com","racked.com","elle.com","geekwire.com","complex.com","caranddriver.com","travelandleisure.com","coastalliving.com","scroll.in","greencarreports.com","robbreport.com","realsimple.com","womansday.com","elledecor.com","vanityfair.com","vogue.com","housebeautiful.com","viddsee.com","teenvogue.com","rotoworld.com"],function(e){e.Utils.Perf=function(){this._lacksApiSupport=!window.performance||!window.performance.getEntriesByType,this._lacksPerfTimerSupport=!window.performance||!window.performance.now,this._shouldReportSample=Math.random()<.1},e.Utils.Perf.prototype=$.extend({},{reportNavigation:function(t){if(this._shouldReportSample)try{var n=this._reportNavigation(t);null===n?this._reportUnsupportedApis():(n.page=t,e.pixel.fire("perf",n))}catch(n){e.pixel.fire("jse","perf",{msg:"reportNavigation: "+n.message,page:t})}},reportPerformance:function(t,n){if(!this._lacksApiSupport&&(n||this._shouldReportSample)){var i=this._now(),a=t.page,r=t.resourceName,o=t.timerName;try{var s=this._reportResource(r)||{};s.page=a,s.resource=encodeURIComponent(r),-1!==i&&(s["timer."+o]=i),e.pixel.fire("perf",s)}catch(t){e.pixel.fire("jse","perf",{msg:"reportPerformance: "+t.message,page:a,resource:encodeURIComponent(r)})}}},reportResource:function(t,n){if(this._shouldReportSample&&!this._lacksApiSupport)try{var i=this._reportResource(n)||{};i.page=t,i.resource=encodeURIComponent(n),e.pixel.fire("perf",i)}catch(i){e.pixel.fire("jse","perf",{msg:"reportResource: "+i.message,page:t,resource:encodeURIComponent(n)})}},_now:function(){return this._lacksPerfTimerSupport?-1:this._truncateFloat(performance.now())},_reportUnsupportedApis:function(){e.pixel.fire("perf","unsupported")},_reportResource:function(e){var t=this._resourceTimingByName(e);if(!t)return null;var n={};return this._populateResourceTimingResults(t,n),this._truncateFloatValues(n),n},_resourceTimingByName:function(e){var t=window.performance.getEntriesByType("resource");for(var n in t)if(t[n].name.includes(e))return t[n];return null},_populateResourceTimingResults:function(e,t){if(t.redirect_time_ms=e.redirectEnd-e.redirectStart,t.connect_time_ms=e.connectEnd-e.connectStart,t.dns_time_ms=e.domainLookupEnd-e.domainLookupStart,e.secureConnectionStart&&(t.tls_handshake_time_ms=e.connectEnd-e.secureConnectionStart),t.ttfb_ms=e.responseStart-e.requestStart,t.transfer_time_ms=e.responseEnd-e.responseStart,e.serverTiming&&""!==e.nextHopProtocol)for(var n in e.serverTiming){var i=e.serverTiming[n];if("total"===i.name){t.net_rtt_ms=e.responseStart-e.requestStart-i.duration;break}}void 0!==e.nextHopProtocol&&(t.protocol=encodeURIComponent(e.nextHopProtocol)),void 0!==e.transferSize&&(t.transfer_size_bytes=e.transferSize),void 0!==e.encodedBodySize&&(t.encoded_size_bytes=e.encodedBodySize),void 0!==e.decodedBodySize&&(t.decoded_size_bytes=e.decodedBodySize)},_reportNavigation:function(){var e={},t=null,n=null,i=null;if(!window.PerformanceNavigationTiming&&window.PerformanceNavigation)switch(t=window.performance.timing,n=window.performance.navigation.redirectCount,window.performance.navigation.type){case PerformanceNavigation.TYPE_RELOAD:i="reload";break;case PerformanceNavigation.TYPE_NAVIGATE:i="navigate";break;case PerformanceNavigation.TYPE_BACK_FORWARD:i="back_forward";break;case PerformanceNavigation.TYPE_RESERVED:i="reserved"}else window.PerformanceNavigationTiming&&(t=window.performance.getEntriesByType("navigation")[0])&&(n=t.redirectCount,i=t.type);if(!t)return null;if(e.redirects_count=n,this._populateResourceTimingResults(t,e),e.dom_interactive_time_ms=t.domInteractive-t.responseEnd,e.dom_content_loaded_time_ms=t.domContentLoadedEventStart-t.responseEnd,e.dom_complete_time_ms=Math.max(t.domComplete-t.responseEnd,0),window.performance.getEntriesByName){var a=window.performance.getEntriesByName("first-paint")[0];a&&(e.first_paint_ms=a.startTime);var r=performance.getEntriesByName("first-contentful-paint")[0];r&&(e.first_contentful_paint_ms=r.startTime)}return e.type=i,this._truncateFloatValues(e),e},_truncateFloatValues:function(e){for(var t in e){var n=e[t];"number"==typeof n&&(e[t]=this._truncateFloat(n))}},_truncateFloat:function(e){return Math.round(e).toString()}})}(DDG),function(e){var t=16e3,n=1.6,i=.041666666666667,a=8640;function r(e,t){return e=Math.ceil(e),t=Math.floor(t),Math.floor(function(e,t){return Math.random()*(t-e)+e}(e,t))}function o(e){return e*(Math.PI/180)}function s(e){return e*(180/Math.PI)}function l(e){return e?Math.round(10*e)/10:0}function c(e,t,n,i){var a,r=Math.round(1e5*n),o=Math.round(1e5*e);return a=Math.round(1e5*i)-Math.round(1e5*t),u(r-o)+u(a)}function u(e){var t=e<<1;return e<0&&(t=~t),function(e){var t="";for(;e>=32;)t+=String.fromCharCode(63+(32|31&e)),e>>=5;return t+=String.fromCharCode(e+63)}(t)}e.Utils.Geo=function(){},e.Utils.Geo.prototype={boundingBox:function(e){var t={minlon:null,minlat:null,maxlon:null,maxlat:null};return e.forEach((function(e){(null===t.minlat||e.latt.maxlat)&&(t.maxlat=e.lat),(null===t.minlon||e.lont.maxlon)&&(t.maxlon=e.lon)})),t},enlargeBoundingBox:function(e,t){var n={lat:e.maxlat,lon:e.minlon},i={lat:e.maxlat,lon:e.maxlon},a={lat:e.minlat,lon:e.minlon},r={lat:e.minlat,lon:e.maxlon},o=this.distance(n,a),s=this.distance(i,n),l=this.distance(r,a);if(!(ot.maxlon||e.lat>t.maxlat)},near:function(e,t,n){for(var i=0;i_&&(a[g]=1,u(e,t,n,g,a),u(e,t,g,i,a))}},d=e.length,h=[],p=t*t,m=[],g=[];for(m[0]=e[0],n=i=1,r=0;n=65;return s&&l||c?n(null):e.settings.storageAvailable("localStorage")?void $.ajax({url:o,dataType:"json",async:!0,success:function(t){var o=null;if(this._isBucketDataValid(t,i,a,r))try{t.how_this_works="https://help.duckduckgo.com/privacy/anonymous-localized-results/",window.localStorage.setItem(e.settings.OBFUS_DATA_LOCAL_STORAGE_KEY,JSON.stringify(t))}catch(e){o=e}else o=new Error("Success but invalid bucket data");return o&&e.pixel.fire("cobde","success",{error:encodeURIComponent(o.message)}),n(o)}.bind(this),error:function(t){return e.pixel.fire("cobde","error",{error:encodeURIComponent(t.status+":"+t.statusText)}),n(new Error("Fetch error: "+t.statusText))}}):n(new Error("fetchBucketData: storage not available"))},_isBucketDataValid:function(t,n,i,a){var r="";return t?t.region_density_factors?t.region_density_factors[n]?t.region_density_indexes?t.region_density_indexes[i]||(r="di."+i+"."+a):r="rdi":r="kb."+n:r="rdf":r="bd",!r.length||(e.pixel.fire("cobdx",r),!1)},_getRandomCoordsByDistance:function(e,n,i,a){var o,s,l,c=a&&a.constant?1:r(0,360);return o=r((i=i||t)<500?40:i>=500&&i<1500?250:i>=1500&&i<4e3?500:750,i),o/=1e3,s=this.getDestinationPoint({lat:e,lon:n},o,c),l=this.distance({lat:e,lon:n},{lat:s.lat,lon:s.lon}),{origLatLon:[e,n],newLatLon:[+s.lat.toFixed(4),+s.lon.toFixed(4)],distanceBetween:l}},getRandomCoordsNearby:function(n,i){var a,r=this.calcKBucket(n,i),o=this.calcDensityIndex(n,i),s=this.getK(r),l=this.getDensity(o);return s&&l?(a=this._popDensityToNoiseFactor(l,s))<200?a=200:a>=t&&(a=t):(a=t,e.pixel.fire("comn")),this._getRandomCoordsByDistance(n,i,a)},getK:function(e){var t=this._getBucketData();return t&&t.region_density_factors?t.region_density_factors[e]:null},getDensity:function(e){var t=this._getBucketData();return t&&t.region_density_indexes?t.region_density_indexes[e]:null},_getBucketData:function(){var t=null;if(!e.settings.isDefault(e.settings.LOCATION_SETTING_KEY))try{var n=window.localStorage.getItem(e.settings.OBFUS_DATA_LOCAL_STORAGE_KEY);t=JSON.parse(n)}catch(t){e.pixel.fire("cope")}return t},_popDensityToNoiseFactor:function(e,n){return n&&e?1e3*Math.sqrt(1e3/(e*n*Math.PI)):t}},e.geo=new e.Utils.Geo}(DDG),function(e){function t(e){this._isListening=!1,this._pixel=e,this._fromBfcache=!1}t.prototype.listen=function(){if(this._isListening)throw new Error("already listenning");return this._isListening=!0,this._onPageShow=function(e){e.persisted?this._fromBfcache=!0:this._fromBfcache=!1}.bind(this),window.addEventListener("pageshow",this._onPageShow),this._onVisibilityChange=function(){"hidden"===document.visibilityState&&this._report()}.bind(this),window.addEventListener("visibilitychange",this._onVisibilityChange),function(){this._isListening&&(this._onVisibilityChange&&(window.removeEventListener("visibilitychange",this._onVisibilityChange),this._onVisibilityChange=null),this._onPageShow&&(window.removeEventListener("pageshow",this._onPageShow),this._onPageShow=null)),this._isListening=!1}.bind(this)},t.prototype.getRequests=function(){var e=[];if(!window.performance||!window.performance.getEntriesByType||!window.performance.now)return e;for(var t=performance.getEntriesByType("resource"),n=0;n0,_="links.duckduckgo.com"!==g.hostname;f&&n++,_&&i++,f&&_&&0,(f||_)&&a++,r.push(t[m].initiatorType),f||l.push(t[m].initiatorType),_||s.push(t[m].initiatorType),f||_||o.push(t[m].initiatorType),m>0&&(p.searchParams.forEach((function(e,t){g.searchParams.get(t)!==e&&(c[t]=!0,f||(u[t]=!0),_||(d[t]=!0),f||_||(h[t]=!0))})),g.searchParams.forEach((function(e,t){p.searchParams.get(t)!==e&&(c[t]=!0,f||(u[t]=!0),f||_||(h[t]=!0))})))}t.length,t.length,t.length,t.length,encodeURIComponent(Object.keys(c).sort().join("-")),encodeURIComponent(Object.keys(u).sort().join("-")),encodeURIComponent(Object.keys(d).sort().join("-")),encodeURIComponent(Object.keys(h).sort().join("-")),r.join("-"),l.join("-"),s.join("-"),o.join("-"),this._fromBfcache,e.deep&&e.deep.finished,e.deep&&e.deep.deep_deferred,e.deep&&e.deep.deep_pending}}},e.Utils.DeepRequestsLogger=t}(DDG),function(e){e.errorHandler=new e.Utils.ErrorHandler,e.history=e.history||new e.Utils.History(window.history),e.backData=window.Bootstrap.backData,e.pixel=new e.Utils.Pixel(e.backData),e.localAPI=new e.Utils.LocalAPIWrapper,e.mapkit=new e.Utils.Mapkit,e.perf=new e.Utils.Perf,e.geo=new e.Utils.Geo,e.deepRequestsLogger=new e.Utils.DeepRequestsLogger(e.pixel),e.deepRequestsLogger.listen()}(DDG),function(e){e.Utils.Strings={validTags:["b","br","code","em","li","ol","p","pre","strong","u","ul"],decodeQueryAndStripHTML:function(t){return t?(t=decodeURIComponentSafe(t),t=e.strip_html(t),this.removeUnwantedHtml(t)):""},removeUnwantedHtml:function(e){return e&&e.length?(e=this._stripScriptTags(e),e=this._checkWhitelistedTags(e)):e},decodeHex:function(e){return e?(e=e.toString()).replace(/&#x([0-9A-Fa-f]{2});/g,(function(e,t){return String.fromCharCode(parseInt(t,16))})):""},getUrlParameter:function(e,t){t=t.replace(/[[]/,"\\[").replace(/[\]]/,"\\]");var n=new RegExp("[\\?&]"+t+"=([^&#]*)").exec(e);return null===n?"":decodeURIComponent(n[1].replace(/\+/g," "))},removeSearchParameter:function(e,t){"?"===e[0]&&(e=e.substring(1));for(var n=e.split("&"),i=[],a=0;a0&&(e="?"+e),e},setSearchParameter:function(e,t,n){return""===(e=this.removeSearchParameter(e,t))&&(e="?"),e.length>1&&(e+="&"),e+t+"="+encodeURIComponent(n)},htmlDecode:function(e){return(new DOMParser).parseFromString(e,"text/html").documentElement.textContent},toTitleCase:function(e){return e.replace(/\w+/g,(function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()}))},_stripScriptTags:function(e){return e=e.replace(/)<[^<]*)*<\/script>/gi,"")},_checkWhitelistedTags:function(e){var t=this.validTags,n=$("
                ").append($.parseHTML(e));return n.find("*").each((function(){var e=$(this);t.indexOf(this.nodeName.toLowerCase())<0&&("IFRAME"===this.nodeName?e.remove():e.contents().length?e.contents().unwrap():e.remove())})),n.html()}}}(DDG),DDG.Utils.Cache={Called:{type:{"/v.js":"videos","/i.js":"images"},nrj:{},loaded:{}}},DDG.Utils.Math={avg:function(e){return e.reduce((function(e,t){return e+t}),0)/e.length},shuffle:function(e){for(var t,n,i=e.length;i;)n=Math.floor(Math.random()*i--),t=e[i],e[i]=e[n],e[n]=t;return e}},DDG.Utils.ParseDate={DAYS_IN_MS:864e5,ISO_DATE_REGEX:/(\d{4})-(\d{2})-(\d{2})/,TIME_AGO_REGEX:/(\d{1,2})\s(day|days|hour|hours)\sago/,_getFormattedDate:function(e,t,n){var i=n?new Date(n):new Date,a=Math.floor((i-e)/this.DAYS_IN_MS);return a<=7?this._translateTimeAgo(a,"d"):e.toLocaleDateString(t,{month:"short",day:"numeric",year:"numeric"})},_translateTimeAgo:function(e,t){var n="";return"d"===t&&(n=l("Today"),1===e?n=lp("published dates for organic results","1 day ago"):e>1&&e<=7&&(n=lp("published dates for organic results","%s days ago",e))),"h"===t&&(1===e?n=lp("published dates for organic results","1 hour ago"):e>1&&e<=24&&(n=lp("published dates for organic results","%s hours ago",e))),n},getFormattedDate:function(e,t,n){if(!e)return"";var i,a,r,o="";try{t=t&&t.replace("_","-"),(i=e.match(this.ISO_DATE_REGEX))?(a=new Date(i[1],parseInt(i[2],10)-1,i[3]),o=this._getFormattedDate(a,t,n)):(r=e.match(this.TIME_AGO_REGEX))&&(o=this._translateTimeAgo(parseInt(r[1],10),r[2][0]))}catch(e){o=""}return o},parseShortLocalizedDate:function(e){var t,n=/[\/\.\-]/,i=new Date("2021-11-22T00:00:00").toLocaleDateString(window.locale.replace("_","-")).split(n),a=i.indexOf("2021"),r=i.indexOf("11"),o=i.indexOf("22"),s=e.split(n);if(3===s.length&&-1!==a&&-1!==r&&-1!==o){var l=s[a];2===l.length&&(l="20"+l);var c=s[r]-1,u=s[o];t=new Date(l,c,u,0,0,0,0)}else t=new Date(e);return t},getRelativeDate:function(e){var t=3600,n=86400,i=2620800,a=365*n,r=new Date(e),o=Math.floor((new Date-r)/1e3);return o>a?Math.floor(o/a).toString()+lp("published date for videos","yr"):o>i?Math.floor(o/i).toString()+lp("published date for videos","mo"):o>n?Math.floor(o/n).toString()+lp("published date for videos","d"):o>t?Math.floor(o/t).toString()+lp("published date for videos","h"):Math.floor(o/60).toString()*lp("published date for videos","m")},toLocaleStringSupportsLocales:function(){try{(new Date).toLocaleString("i")}catch(e){return e instanceof RangeError}return!1}},function(e){e.Utils.Collapser=function(e,t){if(t=t||{},this._el=e,this._collapsedAttr=t.collapsedAttr||"data-collapsed",this._rafId=null,this._trigger=null,this._triggerClickHandler=null,this._transitionEndHandler=null,this.isCollapsed()){var n=this._el.style.transition;this._el.style.transition="",this._el.style.height="0px",this._el.style.transition=n}},e.Utils.Collapser.prototype={destroy:function(){this.reset(),this._triggerClickHandler&&(this._trigger.removeEventListener("click",this._triggerClickHandler),this._triggerClickHandler=null,this._trigger=null)},reset:function(){this._rafId&&(window.cancelAnimationFrame(this._rafId),this._rafId=null),this._transitionEndHandler&&(this._el.removeEventListener("transitionend",this._transitionEndHandler),this._el.style.height=null,this._transitionEndHandler=null)},collapse:function(){var e=this._el.scrollHeight,t=this._el.style.transition;this._el.style.transition="",this.reset(),this._rafId=window.requestAnimationFrame(function(){this._el.style.height=e+"px",this._el.style.transition=t,this._rafId=window.requestAnimationFrame(function(){this._rafId=null,this._el.style.height="0px"}.bind(this))}.bind(this)),this._el.setAttribute(this._collapsedAttr,"true")},expand:function(){var e=this._el.scrollHeight;this._el.style.height=e+"px",this.reset(),this._transitionEndHandler=function(e){this._el.removeEventListener("transitionend",this._transitionEndHandler),this._transitionEndHandler=null,this._el.style.height=null}.bind(this),this._el.addEventListener("transitionend",this._transitionEndHandler),this._el.setAttribute(this._collapsedAttr,"false")},isCollapsed:function(){return"true"===this._el.getAttribute("data-collapsed")},registerTrigger:function(e,t){t=t||{},this._trigger||(this._trigger=e,this._triggerClickHandler=function(e){var n=this.isCollapsed();n?(this.expand(),t.onToggle&&t.onToggle(!n)):t.collapsible&&(this.collapse(),t.onToggle&&t.onToggle(!n))}.bind(this),this._trigger.addEventListener("click",this._triggerClickHandler))}}}(DDG),function(e){function t(e){var t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.right>=0&&t.bottom>=0&&t.left<=i&&t.top<=n}e.Utils.IsIntoViewObserver=function(e,n,i){"function"==typeof n&&(i=n,n={}),this._el=e,"IntersectionObserver"in window&&"observe"in window.IntersectionObserver.prototype&&"unobserve"in window.IntersectionObserver.prototype&&"disconnect"in window.IntersectionObserver.prototype&&"IntersectionObserverEntry"in window&&"isIntersecting"in window.IntersectionObserverEntry.prototype?(this._observer=new IntersectionObserver((function(e){i(e[0].isIntersecting)}),{root:n.root||null,rootMargin:n.rootMargin||"0px",threshold:n.threshold||0}),this._observer.observe(e)):(this._isIntoView=t(this._el),this._boundHandleScroll=function(e){this._rafId&&window.cancelAnimationFrame(this._rafId),this._rafId=window.requestAnimationFrame(function(){var e=t(this._el);e!==this._isIntoView&&(this._isIntoView=e,i(e))}.bind(this))}.bind(this),window.addEventListener("scroll",this._boundHandleScroll),this._rafId=window.requestAnimationFrame(function(){i(this._isIntoView)}.bind(this)))},e.Utils.IsIntoViewObserver.prototype={destroy:function(){this._observer&&(this._observer.unobserve(this._el),this._observer.disconnect(),this._observer=null,this._el=null),this._boundHandleScroll&&(this._rafId&&window.cancelAnimationFrame(this._rafId),window.removeEventListener("scroll",this._boundHandleScroll),this._el=null,this._isIntoView=null,this._boundHandleScroll=null)}}}(DDG),function(e){e.Utils.Formatting={formatNumberForLocale:function(e){var t=window.navigator.language,n=DDG.settings.get("kad");n&&"wt_WT"!==n&&(t=n.replace(/_/g,"-"));try{return e.toLocaleString(t)}catch(t){return e.toLocaleString()}},abbreviateLargeNumber:function(t,n){var i=t>0?Math.floor(Math.log10(t)/3):0,a=[lp("Stocks module","k"),lp("Stocks module","M"),lp("Stocks module","B"),lp("Stocks module","T")];i>a.length&&(i=a.length);var r=a[i-1]||"",o=e.settings.region.getISOLocale(),s=(t/Math.pow(10,3*i)).toLocaleString(o,{minimumSignificantDigits:n||1,maximumSignificantDigits:n||3});return e.device.isSafariLessThanVersion(10)&&(s=parseFloat(s).toPrecision(n||3)),s+" "+r}}}(DDG),DDG.Utils.WebVitals={reportWebVitals:function(e){var t=function(e){var t=!1,n=!1,i={};function a(){if(!t&&n){t=!0;var a=window.navigator&&window.navigator.connection;e.fire("webvitals",Object.assign({},i,a?{effectiveType:a.effectiveType}:void 0))}}function r(e){var t,a;n||(n=!0),i[e.name]=(t=e.value,a=(a="CLS"===e.name?4:0)||0,+(Math.round(t+"e+"+a)+"e-"+a))}return setTimeout((function(){if(-1!==(window.PerformanceObserver&&window.PerformanceObserver.supportedEntryTypes||[]).indexOf("layout-shift")){function e(){"hidden"===document.visibilityState&&(a(),removeEventListener("visibilitychange",e,!0))}addEventListener("visibilitychange",e,!0)}else addEventListener("pagehide",a,{capture:!0,once:!0})})),r}(e);window.webVitals.getTTFB(t),window.webVitals.getFCP(t),window.webVitals.getLCP(t),window.webVitals.getCLS(t),window.webVitals.getFID(t)}}; \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9AE5200B0B43CC71898887FC6735DF6368607CCD b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9AE5200B0B43CC71898887FC6735DF6368607CCD new file mode 100644 index 0000000..179cf42 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9AE5200B0B43CC71898887FC6735DF6368607CCD differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9AE5200B0B43CC71898887FC6735DF6368607CCD-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9AE5200B0B43CC71898887FC6735DF6368607CCD-blob new file mode 100644 index 0000000..9202224 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9AE5200B0B43CC71898887FC6735DF6368607CCD-blob @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_delegated-events_dist_index_js-node_modules_github_details-dialog-elemen-63debe"],{59753(a,b,c){function d(){if(!(this instanceof d))return new d;this.size=0,this.uid=0,this.selectors=[],this.selectorObjects={},this.indexes=Object.create(this.indexes),this.activeIndexes=[]}c.d(b,{f:()=>B,on:()=>A});var e,f=window.document.documentElement,g=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector;d.prototype.matchesSelector=function(a,b){return g.call(a,b)},d.prototype.querySelectorAll=function(a,b){return b.querySelectorAll(a)},d.prototype.indexes=[];var h=/^#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"ID",selector:function(a){var b;if(b=a.match(h))return b[0].slice(1)},element:function(a){if(a.id)return[a.id]}});var i=/^\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"CLASS",selector:function(a){var b;if(b=a.match(i))return b[0].slice(1)},element:function(a){var b=a.className;if(b){if("string"==typeof b)return b.split(/\s/);if("object"==typeof b&&"baseVal"in b)return b.baseVal.split(/\s/)}}});var j=/^((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"TAG",selector:function(a){var b;if(b=a.match(j))return b[0].toUpperCase()},element:function(a){return[a.nodeName.toUpperCase()]}}),d.prototype.indexes.default={name:"UNIVERSAL",selector:function(){return!0},element:function(){return[!0]}},e="function"==typeof window.Map?window.Map:function(){function a(){this.map={}}return a.prototype.get=function(a){return this.map[a+" "]},a.prototype.set=function(a,b){this.map[a+" "]=b},a}();var k=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;function l(a,b){var c,d,e,f,g,h,i=(a=a.slice(0).concat(a.default)).length,j=b,l=[];do if(k.exec(""),(e=k.exec(j))&&(j=e[3],e[2]||!j)){for(c=0;c3&& void 0!==arguments[3]?arguments[3]:{},f=!!e.capture,g=f?p:o,h=g[a];h||(h=new d,g[a]=h,document.addEventListener(a,z,f)),h.add(b,c)}function B(a,b,c){return a.dispatchEvent(new CustomEvent(b,{bubbles:!0,cancelable:!0,detail:c}))}},14840(a,b,c){c.d(b,{Z:()=>t});let d="data-close-dialog",e=`[${d}]`;function f(a){let b=Array.from(a.querySelectorAll("[autofocus]")).filter(h)[0];b||(b=a,a.setAttribute("tabindex","-1")),b.focus()}function g(a){let b=a.currentTarget;b instanceof Element&&("Escape"===a.key||"Esc"===a.key?(o(b,!1),a.stopPropagation()):"Tab"===a.key&&j(a))}function h(a){return a.tabIndex>=0&&!a.disabled&&i(a)}function i(a){return!a.hidden&&(!a.type||"hidden"!==a.type)&&(a.offsetWidth>0||a.offsetHeight>0)}function j(a){if(!(a.currentTarget instanceof Element))return;let b=a.currentTarget.querySelector("details-dialog");if(!b)return;a.preventDefault();let c=Array.from(b.querySelectorAll("*")).filter(h);if(0===c.length)return;let d=a.shiftKey?-1:1,e=b.getRootNode(),f=b.contains(e.activeElement)?e.activeElement:null,g=-1===d?-1:0;if(f instanceof HTMLElement){let i=c.indexOf(f);-1!==i&&(g=i+d)}g<0?g=c.length-1:g%=c.length,c[g].focus()}function k(a){let b=a.querySelector("details-dialog");return!(b instanceof DetailsDialogElement)||b.dispatchEvent(new CustomEvent("details-dialog-close",{bubbles:!0,cancelable:!0}))}function l(a){if(!(a.currentTarget instanceof Element))return;let b=a.currentTarget.closest("details");b&&b.hasAttribute("open")&&!k(b)&&(a.preventDefault(),a.stopPropagation())}function m(a){let b=a.currentTarget;if(!(b instanceof Element))return;let c=b.querySelector("details-dialog");if(c instanceof DetailsDialogElement){if(b.hasAttribute("open")){let d="getRootNode"in c?c.getRootNode():document;d.activeElement instanceof HTMLElement&&s.set(c,{details:b,activeElement:d.activeElement}),f(c),b.addEventListener("keydown",g)}else{for(let e of c.querySelectorAll("form"))e.reset();let h=n(b,c);h&&h.focus(),b.removeEventListener("keydown",g)}}}function n(a,b){let c=s.get(b);return c&&c.activeElement instanceof HTMLElement?c.activeElement:a.querySelector("summary")}function o(a,b){b!==a.hasAttribute("open")&&(b?a.setAttribute("open",""):k(a)&&a.removeAttribute("open"))}function p(a){let b=a.currentTarget;if(!(b instanceof Element))return;let c=b.querySelector("details-dialog");if(!(c instanceof DetailsDialogElement))return;let d=c.querySelector("include-fragment:not([src])");if(!d)return;let e=c.src;null!==e&&(d.addEventListener("loadend",()=>{b.hasAttribute("open")&&f(c)}),d.setAttribute("src",e),r(b))}function q(a,b,c){r(a),b&&a.addEventListener("toggle",p,{once:!0}),b&&c&&a.addEventListener("mouseover",p,{once:!0})}function r(a){a.removeEventListener("toggle",p),a.removeEventListener("mouseover",p)}let s=new WeakMap;class DetailsDialogElement extends HTMLElement{static get CLOSE_ATTR(){return d}static get CLOSE_SELECTOR(){return e}constructor(){super(),s.set(this,{details:null,activeElement:null}),this.addEventListener("click",function({target:a}){if(!(a instanceof Element))return;let b=a.closest("details");b&&a.closest(e)&&o(b,!1)})}get src(){return this.getAttribute("src")}set src(a){this.setAttribute("src",a||"")}get preload(){return this.hasAttribute("preload")}set preload(a){a?this.setAttribute("preload",""):this.removeAttribute("preload")}connectedCallback(){this.setAttribute("role","dialog"),this.setAttribute("aria-modal","true");let a=s.get(this);if(!a)return;let b=this.parentElement;if(!b)return;let c=b.querySelector("summary");c&&(c.hasAttribute("role")||c.setAttribute("role","button"),c.addEventListener("click",l,{capture:!0})),b.addEventListener("toggle",m),a.details=b,q(b,this.src,this.preload)}disconnectedCallback(){let a=s.get(this);if(!a)return;let{details:b}=a;if(!b)return;b.removeEventListener("toggle",m),r(b);let c=b.querySelector("summary");c&&c.removeEventListener("click",l,{capture:!0}),a.details=null}toggle(a){let b=s.get(this);if(!b)return;let{details:c}=b;c&&o(c,a)}static get observedAttributes(){return["src","preload"]}attributeChangedCallback(){let a=s.get(this);if(!a)return;let{details:b}=a;b&&q(b,this.src,this.preload)}}let t=DetailsDialogElement;window.customElements.get("details-dialog")||(window.DetailsDialogElement=DetailsDialogElement,window.customElements.define("details-dialog",DetailsDialogElement))}}]) +//# sourceMappingURL=vendors-node_modules_delegated-events_dist_index_js-node_modules_github_details-dialog-elemen-63debe-eb36e6ab4cfc.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9B5AFC8ABC79829C2330A08197F5E8A93CAE724F b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9B5AFC8ABC79829C2330A08197F5E8A93CAE724F new file mode 100644 index 0000000..c77fbf3 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9B5AFC8ABC79829C2330A08197F5E8A93CAE724F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9B5AFC8ABC79829C2330A08197F5E8A93CAE724F-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9B5AFC8ABC79829C2330A08197F5E8A93CAE724F-blob new file mode 100644 index 0000000..ae1d8e3 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9B5AFC8ABC79829C2330A08197F5E8A93CAE724F-blob @@ -0,0 +1,2308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GitHub: Let’s build from here · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                + + + +
                + Skip to content + + + + + + + + + + + +
                + +
                + + + + + + + +
                + + + + + + +
                + + + + + + + + + + +
                +
                + + +
                +
                + + + + + + +
                + +
                +
                + + +
                +
                + + +
                +
                + + +
                +
                + +
                +
                + +
                +
                + +
                + +

                + Let’s build from here +

                + +

                + Harnessed for productivity. Designed for collaboration. Celebrated for built-in security. Welcome to the platform developers love. +

                + +
                + +
                + + + Start a free enterprise trial + + + + +
                + +
                +

                Trusted by the world’s leading organizations ↘︎

                + +
                + Stripe logo + Pinterest logo +
                + KPMG logo +
                + Mercedes-Benz logo +
                + P&G logo + Telus logo +
                +
                +
                +
                +
                +
                + + + +
                +
                + +
                +
                +
                + + +
                + +
                +
                + +
                +

                Productivity

                +

                + Accelerate high-quality software development. + Our platform drives innovation with tools that boost developer velocity. +

                +
                +
                + +
                +
                +
                + + +
                +
                + +
                mona-github-github-g59jpq2w5w7.github.dev
                + +
                +
                + +
                +
                + +
                +
                + +
                + +
                +
                +
                  +
                • index.html
                • +
                • script.js
                • +
                • package.json
                • +
                + +
                +
                +
                +
                1
                +
                2
                +
                3
                +
                4
                +
                5
                +
                6
                +
                7
                +
                8
                +
                9
                +
                10
                +
                11
                +
                12
                +
                + +
                +
                <div class="position-absolute width-full color-bg-default" style="bottom: -4rem;">
                +
                  <div class="container-xl p-responsive">
                +
                    <div class="d-flex flex-justify-center flex-lg-justify-end color-bg-default">
                +
                      <div class="col-8 col-sm-7 col-md-6 col-lg-5 position-relative z-2 right-lg-n12 events-none">
                +
                        <picture>
                +
                          <source srcset="astro-mona.webp" type="image/webp">
                +
                          <img src="astro-mona.svg" width="960" height="967" class="home-astro-mona width-full position-absolute bottom-0 height-auto" alt="Mona looking at GitHub activity across the globe">
                +
                        </picture>
                +
                      </div>
                +
                    </div>
                +
                  </div>
                +
                </div>
                + +
                +
                + + +
                +
                + +
                +
                  +
                • Terminal
                • +
                • Output
                • +
                • Problems
                • +
                • Debug Console
                • +
                + +
                +
                + [09:43:36] + Starting + 'watch-extension:vscode-api-tests' + ... +
                +
                + [09:43:36] + Finished + 'clean-extension:typescript-language-features' + after + 248 ms +
                +
                + [09:43:36] + Starting + 'watch-extension:typescript-language-features' + ... +
                +
                + [09:43:36] + Finished + 'clean-extension:php-language-features' + after + 384 ms +
                +
                + [09:43:36] + Starting + 'watch-extension:php-language-features' + ... +
                +
                + [09:43:40] + Finished + 'clean-extension:html-language-features-server' + after + 4.66 s +
                +
                + [09:43:40] + Starting + 'watch-extension:html-language-features-server' + ... +
                +
                + [09:43:43] + Finished + 'clean-client' + after + 7.33 s +
                +
                + [09:43:43] + Starting + 'watch-client' + ... +
                +
                +
                +
                + +
                +
                +
                +
                +
                +
                + +
                + + + + Planet earth with visualization of GitHub activity crossing the globe + +
                +
                +
                +
                + + +
                + + +
                +
                + +
                + +
                +
                +
                +
                + + + + +

                Codespaces offers a complete dev environment in seconds, so you can code, build, test, and open pull requests from any repo anywhere.

                + + + Check out Codespaces + + + +
                +
                + +
                +
                + +
                +
                + + +
                +
                + +
                +
                + +
                +
                +
                +
                +
                +
                + Did you know? +
                + +

                22% increase

                +

                in developer productivity
                after three years with GitHub1

                +
                +
                +
                +
                + +
                +
                +

                GitHub Copilot is your AI pair programmer that empowers you to complete tasks 55% faster by turning natural language prompts into coding suggestions.

                + + +
                + +
                +
                + + + +
                + +
                + +
                +
                +
                +
                1
                +
                2
                +
                3
                +
                4
                +
                5
                +
                6
                +
                7
                +
                8
                +
                + +
                +
                import matplotlib.pyplot as plt
                +
                +
                def draw_scatterplot(x_values, y_values):
                +
                    plt.scatter(x_values, y_values, s=20)
                +
                    plt.title("Scatter Plot")
                +
                    plt.xlabel("x values")
                +
                    plt.ylabel("y values")
                +
                    plt.show()
                + +
                + + + Copilot +
                +
                +
                + +
                +
                + +
                +
                +
                +
                +
                + +
                +
                +
                +

                GitHub Actions automates your build, test, and deployment workflow with simple and secure CI/CD.

                + + +
                +
                + + + +
                + +
                +
                + +
                +
                +
                +

                GitHub Mobile fits your projects in your pocket, so you never miss a beat while on the go.

                + + +
                +
                + + + +
                + +
                +
                + +
                + +
                +
                +
                + +
                +
                +
                +
                +
                + +
                +
                +
                + + +
                + +
                +
                + +
                +

                Collaboration

                +

                + Supercharge collaboration. + We provide unlimited repositories, best-in-class version control, and the world’s most powerful open source community—so your team can work more efficiently together. +

                +
                +
                + + + + + Illustration of project table view with cards grouped by 'Feature planning' phase. + + +
                + + +
                +
                + +
                + +
                +
                +
                +
                + + + + +

                GitHub Issues and GitHub Projects supply flexible project management tools that adapt to your team alongside your code.

                + + + Explore GitHub Issues + + + +
                +
                + +
                +
                + +
                +
                + +
                +
                + +
                +
                +
                +
                +
                +
                + Did you know? +
                + +

                80% reduction

                +

                in onboarding time with GitHub1

                +
                +
                +
                +
                + +
                + +
                +
                +
                +

                GitHub Discussions create space to ask questions and have open-ended conversations.

                + + +
                +
                + + + +
                + +
                +
                + +
                +
                +
                +

                Pull requests allow real-time communication and collaboration about code changes.

                + + +
                +
                + + + +
                + +
                +
                + +
                + + +
                +
                +
                + +
                +
                +
                +
                + +
                +
                +
                + + +
                + +
                +
                + +
                +

                Security

                +

                + Embed security into the developer workflow. + With GitHub, developers can secure their code in minutes and organizations can automatically comply with regulations. +

                +
                +
                + +
                +
                +
                cmake.yml
                + on: push +
                + +
                +
                +
                +
                  +
                • +
                  + + Build +
                  + 1m 21s +
                • +
                +
                +
                + +
                +
                +
                +
                +
                + +
                +
                + Steps +
                +
                +
                  +
                • +
                  + + Initialize CodeQL +
                  + 1m 42s +
                • +
                • +
                  + + Autobuild +
                  + 1m 24s +
                • +
                • +
                  + + Perform CodeQL Analyses +
                  + 1m 36s +
                • +
                +
                +
                +
                +
                + +
                + + +
                +
                + +
                + +
                +
                +
                +
                + + + + +

                GitHub Advanced Security lets you gain visibility into your security posture, respond to threats proactively, and ship secure applications quickly.

                + + + Get GitHub Advanced Security + + + +
                +
                + +
                +
                + +
                +
                + +
                +
                + +
                +
                +
                +
                +
                +
                + Did you know? +
                + +

                56 million projects

                +

                fixed vulnerabilities with GitHub2

                +
                +
                +
                +
                + +
                +
                +
                +

                Secret scanning automatically looks for partner patterns and prevents fraudulent use of accidentally committed secrets.

                + + +
                +
                + + + +
                + +
                +
                + +
                + +
                +
                +
                +

                Dependabot makes it easy to find and fix vulnerable dependencies in your supply chain.

                + + +
                +
                + + + +
                + +
                +
                + +
                +
                +
                +

                Code scanning is GitHub’s static code analysis tool that helps you remediate issues in your code.

                + + +
                +
                + + + +
                + +
                +
                + +
                + +
                +
                + +
                + + +
                +
                +
                +
                + + + + +

                The place for anyone from anywhere to build anything

                +

                Whether you’re scaling your startup or just learning how to code, GitHub is your home. Join the world’s largest developer platform to build the innovations that empower humanity. Let’s build from here.

                + + + +
                +
                + +
                + +
                +
                +
                + + + + + + +
                +
                + + +
                + + + + + + + + +
                + Mona looking at the galaxy +
                + + + + + +
                +
                +
                  +
                • 1 The Total Economic Impact™ Of GitHub Enterprise Cloud and Advanced Security, a commissioned study conducted by Forrester Consulting, 2022. Results are for a composite organization based on interviewed customers.
                • +
                • 2 GitHub, Octoverse 2022 The state of open source software.
                • +
                +
                + +
                + +
                + + + + + + + + + + + + + + + + + + +
                + +
                + + + diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9D588EB56679CE964C217CA5BE073A0D94924B83 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9D588EB56679CE964C217CA5BE073A0D94924B83 new file mode 100644 index 0000000..192f212 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9D588EB56679CE964C217CA5BE073A0D94924B83 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9D588EB56679CE964C217CA5BE073A0D94924B83-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9D588EB56679CE964C217CA5BE073A0D94924B83-blob new file mode 100644 index 0000000..924acab Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9D588EB56679CE964C217CA5BE073A0D94924B83-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9E104B21A5CBB4AE4AB88B6FAA5F09401438BBA8 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9E104B21A5CBB4AE4AB88B6FAA5F09401438BBA8 new file mode 100644 index 0000000..fc464c7 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9E104B21A5CBB4AE4AB88B6FAA5F09401438BBA8 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9E104B21A5CBB4AE4AB88B6FAA5F09401438BBA8-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9E104B21A5CBB4AE4AB88B6FAA5F09401438BBA8-blob new file mode 100644 index 0000000..e3ef899 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9E104B21A5CBB4AE4AB88B6FAA5F09401438BBA8-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9E7A2A094F298BD9C11E43268A298D27D34E3C8B b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9E7A2A094F298BD9C11E43268A298D27D34E3C8B new file mode 100644 index 0000000..25637fb Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/9E7A2A094F298BD9C11E43268A298D27D34E3C8B differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A073D284EEFECABCC8470C5A18A5CC797C7AAC9C b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A073D284EEFECABCC8470C5A18A5CC797C7AAC9C new file mode 100644 index 0000000..81fee80 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A073D284EEFECABCC8470C5A18A5CC797C7AAC9C differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A073D284EEFECABCC8470C5A18A5CC797C7AAC9C-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A073D284EEFECABCC8470C5A18A5CC797C7AAC9C-blob new file mode 100644 index 0000000..92c6112 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A073D284EEFECABCC8470C5A18A5CC797C7AAC9C-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A209FF5B67007B41C099BAAE2D90219C9F102A75 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A209FF5B67007B41C099BAAE2D90219C9F102A75 new file mode 100644 index 0000000..665d957 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A209FF5B67007B41C099BAAE2D90219C9F102A75 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A209FF5B67007B41C099BAAE2D90219C9F102A75-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A209FF5B67007B41C099BAAE2D90219C9F102A75-blob new file mode 100644 index 0000000..359561c --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A209FF5B67007B41C099BAAE2D90219C9F102A75-blob @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_alive-client_dist-bf5aa2"],{46263(a,b,c){function d(a,b=0,{start:c=!0,middle:d=!0,once:e=!1}={}){let f=0,g,h=!1;function i(...j){if(h)return;let k=Date.now()-f;f=Date.now(),c?(c=!1,a.apply(this,j),e&&i.cancel()):(d&&k{f=Date.now(),a.apply(this,j),e&&i.cancel()},d?b-k:b))}return i.cancel=()=>{clearTimeout(g),h=!0},i}function e(a,b=0,{start:c=!1,middle:e=!1,once:f=!1}={}){return d(a,b,{start:c,middle:e,once:f})}c.d(b,{D:()=>e,P:()=>d})},27907(a,b,c){c.d(b,{a:()=>AliveSession});var d,e,f=c(81855),g=c(60835),h=c(16544),i=c(75658),j=c(80955),k=c(29871);(e=d||(d={})).Deploy="Alive Redeploy",e.Reconnect="Alive Reconnect";class AliveSession{constructor(a,b,c,d){this.url=a,this.getUrl=b,this.inSharedWorker=c,this.notify=d,this.subscriptions=new i.v,this.state="online",this.retrying=null,this.connectionCount=0,this.presence=new f.k2,this.presenceMetadata=new g.a,this.intentionallyDisconnected=!1,this.lastCameOnline=0,this.userId=function(a){let b=a.match(/\/u\/(\d+)\/ws/);return b?+b[1]:0}(a),this.presenceId=`${Math.round(2147483647*Math.random())}_${Math.round(Date.now()/1e3)}`,this.presenceKey=(0,f.Hw)(this.userId,this.presenceId),this.socket=this.connect()}subscribe(a){let b=this.subscriptions.add(...a);for(let c of(this.sendSubscribe(b),a)){let d=c.topic.name;(0,f.A)(d)&&this.notifyCachedPresence(c.subscriber,d)}}unsubscribe(a){let b=this.subscriptions.delete(...a);this.sendUnsubscribe(b)}unsubscribeAll(...a){let b=this.subscriptions.drain(...a);this.sendUnsubscribe(b);let c=this.presenceMetadata.removeSubscribers(a);this.sendPresenceMetadataUpdate(c)}requestPresence(a,b){for(let c of b)this.notifyCachedPresence(a,c)}notifyCachedPresence(a,b){let c=this.presence.getChannelItems(b);0!==c.length&&this.notifyPresenceChannel(b,c)}updatePresenceMetadata(a){let b=new Set;for(let c of a)this.presenceMetadata.setMetadata(c),b.add(c.channelName);this.sendPresenceMetadataUpdate(b)}sendPresenceMetadataUpdate(a){if(!a.size)return;let b=[];for(let c of a){let d=this.subscriptions.topic(c);d&&b.push(d)}this.sendSubscribe(b)}online(){var a;this.lastCameOnline=Date.now(),this.state="online",null===(a=this.retrying)|| void 0===a||a.abort(),this.socket.open()}offline(){var a;this.state="offline",null===(a=this.retrying)|| void 0===a||a.abort(),this.socket.close()}shutdown(){this.inSharedWorker&&self.close()}get reconnectWindow(){let a=Date.now()-this.lastCameOnline<6e4;return 0===this.connectionCount||this.intentionallyDisconnected||a?0:1e4}socketDidOpen(){this.intentionallyDisconnected=!1,this.connectionCount++,this.socket.url=this.getUrlWithPresenceId(),this.sendSubscribe(this.subscriptions.topics())}socketDidClose(a,b,c){if(void 0!==this.redeployEarlyReconnectTimeout&&clearTimeout(this.redeployEarlyReconnectTimeout),"Alive Reconnect"===c)this.intentionallyDisconnected=!0;else if("Alive Redeploy"===c){this.intentionallyDisconnected=!0;let d=3+22*Math.random(),e=6e4*d;this.redeployEarlyReconnectTimeout=setTimeout(()=>{this.intentionallyDisconnected=!0,this.socket.close(1e3,"Alive Redeploy Early Client Reconnect")},e)}}socketDidFinish(){"offline"!==this.state&&this.reconnect()}socketDidReceiveMessage(a,b){let c=JSON.parse(b);switch(c.e){case"ack":this.handleAck(c);break;case"msg":this.handleMessage(c)}}handleAck(a){for(let b of this.subscriptions.topics())b.offset=a.off}handleMessage(a){let b=a.ch,c=this.subscriptions.topic(b);if(c){if(c.offset=a.off,"e"in a.data){let d=this.presence.handleMessage(b,a.data);this.notifyPresenceChannel(b,d);return}a.data.wait||(a.data.wait=0),this.notify(this.subscriptions.subscribers(b),{channel:b,type:"message",data:a.data})}}notifyPresenceChannel(a,b){var c,d;let e=new Map;for(let f of b){let{userId:h,metadata:i,presenceKey:j}=f,k=e.get(h)||{userId:h,isOwnUser:h===this.userId,metadata:[]};if(j!==this.presenceKey){for(let l of i){if(g.Z in l){!1!==k.isIdle&&(k.isIdle=Boolean(l[g.Z]));continue}k.metadata.push(l)}e.set(h,k)}}for(let m of this.subscriptions.subscribers(a)){let n=this.userId,o=Array.from(e.values()).filter(a=>a.userId!==n),p=null!==(d=null===(c=e.get(this.userId))|| void 0===c?void 0:c.metadata)&& void 0!==d?d:[],q=this.presenceMetadata.getChannelMetadata(a,{subscriber:m,markAllAsLocal:!this.inSharedWorker});this.notify([m],{channel:a,type:"presence",data:[{userId:n,isOwnUser:!0,metadata:[...p,...q]},...o]})}}async reconnect(){if(!this.retrying)try{this.retrying=new AbortController;let a=await (0,k.X)(this.getUrl,1/0,6e4,this.retrying.signal);a?(this.url=a,this.socket=this.connect()):this.shutdown()}catch(b){if("AbortError"!==b.name)throw b}finally{this.retrying=null}}getUrlWithPresenceId(){let a=new URL(this.url,self.location.origin);return a.searchParams.set("shared",this.inSharedWorker.toString()),a.searchParams.set("p",`${this.presenceId}.${this.connectionCount}`),a.toString()}connect(){let a=new h.Oo(this.getUrlWithPresenceId(),this,{timeout:4e3,attempts:7});return a.open(),a}sendSubscribe(a){let b=Array.from(a);for(let c of(0,j.o)(b,25)){let d={};for(let e of c)(0,f.A)(e.name)?d[e.signed]=JSON.stringify(this.presenceMetadata.getChannelMetadata(e.name)):d[e.signed]=e.offset;this.socket.send(JSON.stringify({subscribe:d}))}}sendUnsubscribe(a){let b=Array.from(a,a=>a.signed);for(let c of(0,j.o)(b,25))this.socket.send(JSON.stringify({unsubscribe:c}));for(let d of a)(0,f.A)(d.name)&&this.presence.clearChannel(d.name)}}},29871(a,b,c){function d(a){return new Promise((b,c)=>{let d=Error("aborted");d.name="AbortError",a.aborted?c(d):a.addEventListener("abort",()=>c(d))})}async function e(a,b){let c,e=new Promise(b=>{c=self.setTimeout(b,a)});if(!b)return e;try{await Promise.race([e,d(b)])}catch(f){throw self.clearTimeout(c),f}}function f(a){return Math.floor(Math.random()*Math.floor(a))}async function g(a,b,c=1/0,g){let h=g?d(g):null;for(let i=0;ig})},21461(a,b,c){c.d(b,{A:()=>f.A,ZE:()=>e.Z,Zf:()=>h.Z,a2:()=>d.a,ah:()=>e.a,vk:()=>g.v});var d=c(27907),e=c(60835),f=c(81855),g=c(75658),h=c(72993)},80955(a,b,c){c.d(b,{o:()=>d});function*d(a,b){for(let c=0;cd,a:()=>PresenceMetadataSet});let d="_i";function e(a){return Object.assign(Object.assign({},a),{isLocal:!0})}class PresenceMetadataForChannel{constructor(){this.subscriberMetadata=new Map}setMetadata(a,b){this.subscriberMetadata.set(a,b)}removeSubscribers(a){let b=!1;for(let c of a)b=this.subscriberMetadata.delete(c)||b;return b}getMetadata(a){if(!a){let b=[],c;for(let f of this.subscriberMetadata.values())for(let g of f)if(d in g){let h=Boolean(g[d]);c=void 0===c?h:h&&c}else b.push(g);return void 0!==c&&b.push({[d]:c?1:0}),b}let i=[],{subscriber:j,markAllAsLocal:k}=a;for(let[l,m]of this.subscriberMetadata){let n=k||l===j,o=n?m.map(e):m;i.push(...o)}return i}hasSubscribers(){return this.subscriberMetadata.size>0}}class PresenceMetadataSet{constructor(){this.metadataByChannel=new Map}setMetadata({subscriber:a,channelName:b,metadata:c}){let d=this.metadataByChannel.get(b);d||(d=new PresenceMetadataForChannel,this.metadataByChannel.set(b,d)),d.setMetadata(a,c)}removeSubscribers(a){let b=new Set;for(let[c,d]of this.metadataByChannel){let e=d.removeSubscribers(a);e&&b.add(c),d.hasSubscribers()||this.metadataByChannel.delete(c)}return b}getChannelMetadata(a,b){let c=this.metadataByChannel.get(a);return(null==c?void 0:c.getMetadata(b))||[]}}},81855(a,b,c){function d(a,b){return`${a}:${b}`}function e(a){let[b,c]=a.p.split(".");return{userId:a.u,presenceKey:d(a.u,b),connectionCount:Number(c),metadata:a.m||[]}}function f(a){return a.startsWith("presence-")}c.d(b,{A:()=>f,Hw:()=>d,k2:()=>AlivePresence});class PresenceChannel{constructor(){this.presenceItems=new Map}shouldUsePresenceItem(a){let b=this.presenceItems.get(a.presenceKey);return!b||b.connectionCount<=a.connectionCount}addPresenceItem(a){this.shouldUsePresenceItem(a)&&this.presenceItems.set(a.presenceKey,a)}removePresenceItem(a){this.shouldUsePresenceItem(a)&&this.presenceItems.delete(a.presenceKey)}replacePresenceItems(a){for(let b of(this.presenceItems.clear(),a))this.addPresenceItem(b)}getPresenceItems(){return Array.from(this.presenceItems.values())}}class AlivePresence{constructor(){this.presenceChannels=new Map}getPresenceChannel(a){let b=this.presenceChannels.get(a)||new PresenceChannel;return this.presenceChannels.set(a,b),b}handleMessage(a,b){let c=this.getPresenceChannel(a);switch(b.e){case"pf":c.replacePresenceItems(b.d.map(e));break;case"pa":c.addPresenceItem(e(b.d));break;case"pr":c.removePresenceItem(e(b.d))}return this.getChannelItems(a)}getChannelItems(a){let b=this.getPresenceChannel(a);return b.getPresenceItems()}clearChannel(a){this.presenceChannels.delete(a)}}},75658(a,b,c){c.d(b,{v:()=>SubscriptionSet});var d=c(61268);class SubscriptionSet{constructor(){this.subscriptions=new d.Z,this.signatures=new Map}add(...a){let b=[];for(let{subscriber:c,topic:d}of a)this.subscriptions.has(d.name)||(b.push(d),this.signatures.set(d.name,d)),this.subscriptions.set(d.name,c);return b}delete(...a){let b=[];for(let{subscriber:c,topic:d}of a){let e=this.subscriptions.delete(d.name,c);e&&!this.subscriptions.has(d.name)&&(b.push(d),this.signatures.delete(d.name))}return b}drain(...a){let b=[];for(let c of a)for(let d of this.subscriptions.drain(c)){let e=this.signatures.get(d);this.signatures.delete(d),b.push(e)}return b}topics(){return this.signatures.values()}topic(a){return this.signatures.get(a)||null}subscribers(a){return this.subscriptions.get(a).values()}}},72993(a,b,c){c.d(b,{Z:()=>Topic});class Topic{constructor(a,b){this.name=a,this.signed=b,this.offset=""}static parse(a){let[b,c]=a.split("--");if(!b||!c)return null;let d=JSON.parse(atob(b));return d.c&&d.t?new Topic(d.c,a):null}}},61268(a,b,c){c.d(b,{Z:()=>MultiMap});class MultiMap{constructor(a){if(this.map=new Map,a)for(let[b,c]of a)this.set(b,c)}get(a){let b=this.map.get(a);return b||new Set}set(a,b){let c=this.map.get(a);return c||(c=new Set,this.map.set(a,c)),c.add(b),this}has(a){return this.map.has(a)}delete(a,b){let c=this.map.get(a);if(!c)return!1;if(!b)return this.map.delete(a);let d=c.delete(b);return c.size||this.map.delete(a),d}drain(a){let b=[];for(let c of this.keys())this.delete(c,a)&&!this.has(c)&&b.push(c);return b}keys(){return this.map.keys()}values(){return this.map.values()}entries(){return this.map.entries()}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}get size(){return this.map.size}}},16544(a,b,c){async function d(a,b){let c,d=new Promise((b,d)=>{c=self.setTimeout(()=>d(Error("timeout")),a)});if(!b)return d;try{await Promise.race([d,g(b)])}catch(e){throw self.clearTimeout(c),e}}async function e(a,b){let c,d=new Promise(b=>{c=self.setTimeout(b,a)});if(!b)return d;try{await Promise.race([d,g(b)])}catch(e){throw self.clearTimeout(c),e}}async function f(a,b,c=1/0,d){let f=d?g(d):null;for(let i=0;i{let d=Error("aborted");d.name="AbortError",a.aborted?c(d):a.addEventListener("abort",()=>c(d))})}function h(a){return Math.floor(Math.random()*Math.floor(a))}async function i(a,b,c){let e=new WebSocket(a),f=k(e);try{return await Promise.race([f,d(b,c)]),e}catch(g){throw j(f),g}}async function j(a){try{let b=await a;b.close()}catch(c){}}function k(a){return new Promise((b,c)=>{a.readyState===WebSocket.OPEN?b(a):(a.onerror=()=>{a.onerror=null,a.onopen=null,c(Error("connect failed"))},a.onopen=()=>{a.onerror=null,a.onopen=null,b(a)})})}c.d(b,{Oo:()=>StableSocket});class StableSocket{constructor(a,b,c){this.socket=null,this.opening=null,this.url=a,this.delegate=b,this.policy=c}async open(){if(this.opening||this.socket)return;this.opening=new AbortController;let a=Object.assign(Object.assign({},this.policy),{signal:this.opening.signal});try{var b,c;this.socket=await (b=this.url,c=a,f(()=>i(b,c.timeout,c.signal),c.attempts,c.maxDelay,c.signal))}catch(d){this.delegate.socketDidFinish(this);return}finally{this.opening=null}this.socket.onclose=a=>{this.socket=null,this.delegate.socketDidClose(this,a.code,a.reason);let b=this.delegate.socketShouldRetry?!this.delegate.socketShouldRetry(this,a.code):m(a.code);b?this.delegate.socketDidFinish(this):setTimeout(()=>this.open(),l(100,100+(this.delegate.reconnectWindow||50)))},this.socket.onmessage=a=>{this.delegate.socketDidReceiveMessage(this,a.data)},this.delegate.socketDidOpen(this)}close(a,b){this.opening?(this.opening.abort(),this.opening=null):this.socket&&(this.socket.onclose=null,this.socket.close(a,b),this.socket=null,this.delegate.socketDidClose(this,a,b),this.delegate.socketDidFinish(this))}send(a){this.socket&&this.socket.send(a)}isOpen(){return!!this.socket}}function l(a,b){return Math.random()*(b-a)+a}function m(a){return a===n||a===o}let n=1008,o=1011}}]) +//# sourceMappingURL=vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_alive-client_dist-bf5aa2-52c4f314f4eb.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A3F552A8E0ABD27FF1CF09FC3C028B5CF71F7019 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A3F552A8E0ABD27FF1CF09FC3C028B5CF71F7019 new file mode 100644 index 0000000..06a28a0 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A3F552A8E0ABD27FF1CF09FC3C028B5CF71F7019 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A3F552A8E0ABD27FF1CF09FC3C028B5CF71F7019-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A3F552A8E0ABD27FF1CF09FC3C028B5CF71F7019-blob new file mode 100644 index 0000000..f634325 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A3F552A8E0ABD27FF1CF09FC3C028B5CF71F7019-blob @@ -0,0 +1,3 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["app_assets_modules_github_behaviors_user-content_ts-app_assets_modules_github_blob-anchor_ts--b39cba"],{82664(a,b,c){function d(a){let b=document.querySelectorAll(a);if(b.length>0)return b[b.length-1]}function e(){return`${window.location.protocol}//${window.location.host}${function(){let a=d("meta[name=analytics-location]");return a?a.content:window.location.pathname}()+function(){let a=d("meta[name=analytics-location-query-strip]"),b="";a||(b=window.location.search);let c=d("meta[name=analytics-location-params]");for(let e of(c&&(b+=(b?"&":"?")+c.content),document.querySelectorAll("meta[name=analytics-param-rename]"))){let f=e.content.split(":",2);b=b.replace(RegExp(`(^|[?&])${f[0]}($|=)`,"g"),`$1${f[1]}$2`)}return b}()}`}c.d(b,{S:()=>e})},86975(a,b,c){c.d(b,{AU:()=>j,Ap:()=>w,DT:()=>o,HN:()=>i,Lq:()=>g,T2:()=>u,Yg:()=>t,ag:()=>s,ck:()=>k,po:()=>r,q3:()=>l,uL:()=>v,wz:()=>n,xc:()=>h,xk:()=>p,zH:()=>f});var d=c(64707);let e="data-turbo-loaded";function f(){document.documentElement.setAttribute(e,"")}function g(){return document.documentElement.hasAttribute(e)}let h=()=>!(0,d.c)("PJAX_ENABLED"),i=a=>a?.tagName==="TURBO-FRAME";function j(a,b){let c=a.split("/",3).join("/"),d=b.split("/",3).join("/");return c===d}function k(a,b){let c=a.split("/",2).join("/"),d=b.split("/",2).join("/");return c===d}async function l(){let a=document.head.querySelectorAll("link[rel=stylesheet]"),b=new Set([...document.styleSheets].map(a=>a.href)),c=[];for(let d of a)""===d.href||b.has(d.href)||c.push(m(d));await Promise.all(c)}let m=(a,b=2e3)=>new Promise(c=>{let d=()=>{a.removeEventListener("error",d),a.removeEventListener("load",d),c()};a.addEventListener("load",d,{once:!0}),a.addEventListener("error",d,{once:!0}),setTimeout(d,b)}),n=(a,b)=>{let c=b||a.querySelectorAll("[data-turbo-replace]"),d=[...document.querySelectorAll("[data-turbo-replace]")];for(let e of c){let f=d.find(a=>a.id===e.id);f&&f.replaceWith(e)}},o=a=>{for(let b of a.querySelectorAll("link[rel=stylesheet]"))document.head.querySelector(`link[href="${b.getAttribute("href")}"], + link[data-href="${b.getAttribute("data-href")}"]`)||document.head.append(b)},p=a=>{for(let b of a.querySelectorAll("script"))document.head.querySelector(`script[src="${b.getAttribute("src")}"]`)||q(b)},q=a=>{let{src:b}=a;if(!b)return;let c=document.createElement("script"),d=a.getAttribute("type");d&&(c.type=d),c.src=b,document.head&&document.head.appendChild(c)},r=a=>{let b=[];for(let c of a.querySelectorAll('meta[data-turbo-track="reload"]'))document.querySelector(`meta[http-equiv="${c.getAttribute("http-equiv")}"]`)?.content!==c.content&&b.push(u(c.getAttribute("http-equiv")));return b},s=a=>{let b=a.querySelector("[data-turbo-head]")||a.head;return{title:b.querySelector("title")?.textContent,transients:[...b.querySelectorAll("[data-turbo-transient]")].map(a=>a.cloneNode(!0)),bodyClasses:a.querySelector("meta[name=turbo-body-classes]")?.content,replacedElements:[...a.querySelectorAll("[data-turbo-replace]")].map(a=>a.cloneNode(!0))}},t=()=>[...document.documentElement.attributes],u=a=>a.replace(/^x-/,"").replaceAll("-","_"),v=a=>document.dispatchEvent(new CustomEvent("turbo:reload",{detail:{reason:a}})),w=(a,b)=>{for(let c of a.attributes)b.hasAttribute(c.nodeName)||"aria-busy"===c.nodeName||a.removeAttribute(c.nodeName);for(let d of b.attributes)a.getAttribute(d.nodeName)!==d.nodeValue&&a.setAttribute(d.nodeName,d.nodeValue)}},86412(a,b,c){c.d(b,{p:()=>i});var d=c(87098),e=c(59753),f=c(80721),g=c(3126);let h=!0;function i(a){h=a}function j(){if(!h||document.querySelector(":target"))return;let a=(0,d.$z)(location.hash).toLowerCase(),b=(0,d.Q)(document,`user-content-${a}`);b&&(0,g.zT)(b)}window.addEventListener("hashchange",j),document.addEventListener("turbo:load",j),async function(){await f.x,j()}(),(0,e.on)("click","a[href]",function(a){let{currentTarget:b}=a;b instanceof HTMLAnchorElement&&b.href===location.href&&location.hash.length>1&&setTimeout(function(){a.defaultPrevented||j()})})},56334(a,b,c){function d(a){let b=a.match(/#?(?:L)(\d+)((?:C)(\d+))?/g);if(b){if(1===b.length){let c=g(b[0]);if(!c)return;return Object.freeze({start:c,end:c})}if(2!==b.length)return;{let d=g(b[0]),e=g(b[1]);if(!d||!e)return;return k(Object.freeze({start:d,end:e}))}}}function e(a){let b=d(a),c=function(a){let b=a.match(/(file-.+?-)L\d+?/i);return b?b[1]:""}(a);return{blobRange:b,anchorPrefix:c}}function f({anchorPrefix:a,blobRange:b}){return b?`#${a}${function(a){let{start:b,end:c}=k(a);return null!=b.column&&null!=c.column?`L${b.line}C${b.column}-L${c.line}C${c.column}`:null!=b.column?`L${b.line}C${b.column}-L${c.line}`:null!=c.column?`L${b.line}-L${c.line}C${c.column}`:b.line===c.line?`L${b.line}`:`L${b.line}-L${c.line}`}(b)}`:"#"}function g(a){let b=a.match(/L(\d+)/),c=a.match(/C(\d+)/);return b?Object.freeze({line:parseInt(b[1]),column:c?parseInt(c[1]):null}):null}function h(a,b){let[c,d]=i(a.start,!0,b),[e,f]=i(a.end,!1,b);if(!c||!e)return;let g=d,h=f;if(-1===g&&(g=0),-1===h&&(h=e.childNodes.length),!c.ownerDocument)throw Error("DOMRange needs to be inside document");let j=c.ownerDocument.createRange();return j.setStart(c,g),j.setEnd(e,h),j}function i(a,b,c){let d=[null,0],e=c(a.line);if(!e)return d;if(null==a.column)return[e,-1];let f=a.column-1,g=j(e);for(let h=0;hf,G5:()=>d,M9:()=>h,n6:()=>e})},54697(a,b,c){c.d(b,{Pi:()=>g,gD:()=>h,hX:()=>j,l8:()=>i});var d=c(59753);let e=new WeakMap,f=new WeakMap;function g(a){return e.get(a)}async function h(a){return e.get(a)||k(await l(a,"codeEditor:ready"))}function i(a,b){f.set(a,b)}function j(a){return f.get(a)}function k(a){if(!(a instanceof CustomEvent))throw Error("assert: event is not a CustomEvent");let b=a.detail.editor;if(!a.target)throw Error("assert: event.target is null");return e.set(a.target,b),b}function l(a,b){return new Promise(c=>{a.addEventListener(b,c,{once:!0})})}(0,d.on)("codeEditor:ready",".js-code-editor",k)},67404(a,b,c){function d(a){return e(a)[0]}function e(a){let b=[];for(let c of f()){let[d,e]=c.trim().split("=");a===d&& void 0!==e&&b.push({key:d,value:e})}return b}function f(){try{return document.cookie.split(";")}catch{return[]}}function g(a,b,c=null,d=!1,e="lax"){let f=document.domain;if(null==f)throw Error("Unable to get document domain");f.endsWith(".github.com")&&(f="github.com");let g="https:"===location.protocol?"; secure":"",h=c?`; expires=${c}`:"";!1===d&&(f=`.${f}`);try{document.cookie=`${a}=${b}; path=/; domain=${f}${h}${g}; samesite=${e}`}catch{}}function h(a,b=!1){let c=document.domain;if(null==c)throw Error("Unable to get document domain");c.endsWith(".github.com")&&(c="github.com");let d=new Date().getTime(),e=new Date(d-1).toUTCString(),f="https:"===location.protocol?"; secure":"",g=`; expires=${e}`;!1===b&&(c=`.${c}`);try{document.cookie=`${a}=''; path=/; domain=${c}${g}${f}`}catch{}}c.d(b,{"$1":()=>e,d8:()=>g,ej:()=>d,kT:()=>h})},25019(a,b,c){c.d(b,{aJ:()=>u,cI:()=>r,eK:()=>n});var d=c(82918),e=c(45341),f=c(28382),g=c(82664),h=c(86975),i=c(58843),j=c(8704);let k=!1,l=0,m=Date.now();function n(a,b={}){var c;"AbortError"!==(c=a).name&&("TypeError"!==c.name||"Failed to fetch"!==c.message)&&o(q(p(a),b))}async function o(a){if(!w())return;let b=document.head?.querySelector('meta[name="browser-errors-url"]')?.content;if(b){if(t(a.error.stacktrace)){k=!0;return}l++;try{await fetch(b,{method:"post",body:JSON.stringify(a)})}catch{}}}function p(a){return{type:a.name,value:a.message,stacktrace:r(a)}}function q(a,b={}){return Object.assign({error:a,sanitizedUrl:(0,g.S)()||window.location.href,readyState:document.readyState,referrer:(0,i.wP)(),timeSinceLoad:Math.round(Date.now()-m),user:u()||void 0,turbo:(0,h.xc)(),bundler:j.A7,ui:Boolean(document.querySelector('meta[name="ui"]'))},b)}function r(a){return(0,f.Q)(a.stack||"").map(a=>({filename:a.file||"",function:String(a.methodName),lineno:(a.lineNumber||0).toString(),colno:(a.column||0).toString()}))}let s=/(chrome|moz|safari)-extension:\/\//;function t(a){return a.some(a=>s.test(a.filename)||s.test(a.function))}function u(){let a=document.head?.querySelector('meta[name="user-login"]')?.content;if(a)return a;let b=(0,d.b)();return`anonymous-${b}`}let v=!1;function w(){return!v&&!k&&l<10&&(0,e.Gb)()}if(window.addEventListener("pageshow",()=>v=!1),window.addEventListener("pagehide",()=>v=!0),"function"==typeof BroadcastChannel){let x=new BroadcastChannel("shared-worker-error");x.addEventListener("message",a=>{n(a.data.error)})}},64707(a,b,c){c.d(b,{"$":()=>g,c:()=>f});var d=c(15205);let e=(0,d.Z)(function(){return(document.head?.querySelector('meta[name="enabled-features"]')?.content||"").split(",")}),f=(0,d.Z)(function(a){return -1!==e().indexOf(a)}),g={isFeatureEnabled:f}},41982(a,b,c){c.d(b,{W:()=>d});function d(a,b,c){return[...function*(a,b){for(let c of a){let d=b(c);null!=d&&(yield d)}}(a,a=>{let c=b(a);return null!=c?[a,c]:null})].sort((a,b)=>c(a[1],b[1])).map(([a])=>a)}},87738(a,b,c){function d(a,b,c=.1){let d=g(a,b,c);if(d&& -1===b.indexOf("/")){let e=a.substring(a.lastIndexOf("/")+1);d+=g(e,b,c)}return d}function e(a,b,c){if(b){let d=a.innerHTML.trim().match(c||function(a){let b=a.toLowerCase().split(""),c="";for(let d=0;d"),e=!0):e&&(f.push(""),e=!1),f.push(h))}a.innerHTML=f.join("")}else{let i=a.innerHTML.trim(),j=i.replace(/<\/?mark>/g,"");i!==j&&(a.innerHTML=j)}}c.d(b,{EW:()=>d,Qw:()=>e,qu:()=>h});let f=new Set([" ","-","_"]);function g(a,b,c=.1){let d=a;if(d===b)return 1;let e=d.length,g=0,h=0;for(let i=0;i -1?m:Math.max(k,l);if(-1===n)return 0;g+=.1,d[n]===j&&(g+=.1),0===n&&(g+=.9-c,0===i&&(h=1)),f.has(d.charAt(n-1))&&(g+=.9-c),d=d.substring(n+1,e)}let o=b.length,p=g/o,q=(p*(o/e)+p)/2;return h&&q+c<1&&(q+=c),q}function h(a,b){return a.score>b.score?-1:a.scoreb.text?1:0}},93928(a,b,c){function d(a){let b=a.split("\u200D"),c=0;for(let d of b){let e=Array.from(d.split(/[\ufe00-\ufe0f]/).join("")).length;c+=e}return c/b.length}function e(a,b,c,d=!0){let e=a.value.substring(0,a.selectionEnd||0),f=a.value.substring(a.selectionEnd||0);return h(a,(e=e.replace(b,c))+(f=f.replace(b,c)),e.length,d),c}function f(a,b,c){if(null===a.selectionStart||null===a.selectionEnd)return e(a,b,c);let d=a.value.substring(0,a.selectionStart),f=a.value.substring(a.selectionEnd);return h(a,d+c+f,d.length),c}function g(a,b,c={}){let d=a.selectionEnd||0,e=a.value.substring(0,d),f=a.value.substring(d),g=""===a.value||e.match(/\n$/)?"":"\n",h=c.appendNewline?"\n":"",i=g+b+h;a.value=e+i+f;let j=d+i.length;return a.selectionStart=j,a.selectionEnd=j,a.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!1})),a.focus(),i}function h(a,b,c,d=!0){a.value=b,d&&(a.selectionStart=c,a.selectionEnd=c),a.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!1}))}function i(a,b){let c=[...a],d=new TextEncoder,e=new Uint8Array(4);for(let f=0;f=b))break}return b}c.d(b,{Om:()=>g,lp:()=>e,rq:()=>d,t4:()=>f,yb:()=>i})}}]) +//# sourceMappingURL=app_assets_modules_github_behaviors_user-content_ts-app_assets_modules_github_blob-anchor_ts--b39cba-f394f445d042.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A52AAF8A772E90CAF96F881015957B168B3819A5 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A52AAF8A772E90CAF96F881015957B168B3819A5 new file mode 100644 index 0000000..e0412b8 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A52AAF8A772E90CAF96F881015957B168B3819A5 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A52AAF8A772E90CAF96F881015957B168B3819A5-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A52AAF8A772E90CAF96F881015957B168B3819A5-blob new file mode 100644 index 0000000..956be0d Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A52AAF8A772E90CAF96F881015957B168B3819A5-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A58A407A6765885CBAEB6512E2F8F1DFB26E2945 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A58A407A6765885CBAEB6512E2F8F1DFB26E2945 new file mode 100644 index 0000000..9212ad1 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A58A407A6765885CBAEB6512E2F8F1DFB26E2945 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A58A407A6765885CBAEB6512E2F8F1DFB26E2945-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A58A407A6765885CBAEB6512E2F8F1DFB26E2945-blob new file mode 100644 index 0000000..6098b55 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A58A407A6765885CBAEB6512E2F8F1DFB26E2945-blob @@ -0,0 +1,924 @@ +/* Bundle Includes: + * css/dialogs-common.css + * css/dialogs/cookie-dialog.css + * css/jquery-ui.extra.css + */ + +.mega-banner-container{ + align-items:center; + display:flex; + justify-content:center; + width:100% +} +.mega-banner-template{ + --border-radius:24px; + --mask-color:var(--text-color-high); + background:var(--surface-main); + bottom:0; + box-shadow:0 4px 16px 0 rgb(0 0 0 / .1); + box-sizing:border-box; + color:var(--text-color-medium); + display:flex; + flex-direction:column; + font:var(--text-body1); + position:fixed; + width:100%; + z-index:1090 +} +.mega-banner-template.hidden{ + display:none +} +.mega-banner-template button.close{ + align-items:center; + background:transparent; + border:none; + cursor:pointer; + display:flex; + justify-content:center; + outline:none; + padding:0; + position:absolute; + right:16px; + top:16px; + z-index:2010 +} +.rtl .mega-banner-template button.close{ + left:16px; + right:auto +} +.mega-banner-template button.close i{ + --icon-size:24px; + margin:0; + opacity:.6; + transition:opacity .2s ease-in-out +} +@media (hover:hover){ +.mega-banner-template button.close i:hover{ + opacity:.8 +} +} +.mega-banner-template>.content{ + align-items:center; + display:flex; + padding:24px 80px +} +.mega-banner-template .graphic{ + --width:74px; + -webkit-margin-end:20px; + flex:0 0 auto; + height:74px; + margin:0 2px; + margin-inline-end:20px; + width:74px +} +.mega-banner-template header{ + align-items:center; + display:flex; + flex:1 1 auto +} +.mega-banner-template header h3{ + color:var(--text-color-high); + font:var(--text-body1-bold); + margin:0 0 8px; + padding:0 +} +.mega-banner-template header p{ + color:var(--text-color-medium); + font:var(--text-body1); + margin:0; + padding:0 +} +.mega-banner-template header p a,.mega-banner-template header p a:visited{ + color:var(--text-color-medium); + text-decoration:underline +} +@media (hover:hover){ +.mega-banner-template header p a:hover{ + text-decoration:none +} +} +.mega-banner-template header .info{ + flex:1 1 auto +} +.mega-banner-template .buttons{ + -webkit-margin-start:60px; + display:flex; + flex:0 0 auto; + margin-inline-start:60px +} +.mega-banner-template .buttons button~button{ + -webkit-margin-start:16px; + margin-inline-start:16px +} +.mega-dialog-container.common-container{ + z-index:1300 +} +.mega-dialog-container.common-container.arrange-to-back{ + z-index:1000 +} +.dialog-sprite,.ui-datepicker-next,.ui-datepicker-prev,i.dialog-sprite{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-repeat:no-repeat +} +.fm-dialog-title{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + color:#666; + font-size:20px; + line-height:30px; + min-height:38px; + overflow:hidden; + padding:20px 48px 0; + text-align:center; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.fm-dialog-title.small{ + color:#666; + font-family:var(--text-font-family); + font-size:16px; + letter-spacing:-.18px; + line-height:25px +} +.fm-dialog-title.medium{ + color:#333; + font-family:var(--text-font-family); + font-size:18px; + padding-top:23px +} +.fm-dialog-title.top-pad{ + padding-top:30px +} +.contrast .fm-dialog-title,.fm-dialog-title.dark{ + color:#333 +} +.mobile .fm-dialog-title{ + padding-left:25px; + padding-right:25px; + white-space:normal +} +.mobile .fm-dialog-title.medium{ + font-size:16px +} +@media only screen and (max-width:860px){ +.mega-banner-template>.content{ + padding:24px 48px +} +.mega-banner-template .buttons{ + -webkit-margin-start:24px; + margin-inline-start:24px +} +} +@media only screen and (max-width:720px){ +.mega-banner-template>.content{ + display:block; + padding:24px +} +.mega-banner-template .buttons{ + justify-content:space-between; + margin:15px 0 0 +} +.mega-banner-template .buttons button{ + width:calc(50% - 6px) +} +} +.mobile .mega-banner-template{ + border-radius:4px; + bottom:10px; + box-shadow:1px 1px 5px 0 rgb(147 147 147 / .5); + left:10px; + width:calc(100% - 20px); + z-index:190 +} +.mobile .mega-banner-template button.close i{ + --icon-size:20px +} +.mobile .mega-banner-template header h3{ + font-size:13px +} +.mobile .mega-banner-template header p{ + font:var(--text-body2) +} +.mobile .mega-dialog-container .mega-dialog{ + -webkit-overflow-scrolling:touch; + overflow:scroll +} +.mobile .mega-dialog-container .mega-dialog:not(.fullsize-on-mobile){ + max-height:calc(100% - 30px); + max-width:768px; + width:calc(100% - 30px) +} +.mobile .mega-dialog-container .mega-dialog.fullsize-on-mobile{ + height:100%; + width:100% +} +.mega-dialog.verify-email{ + max-width:360px +} +.mega-dialog.verify-email .header{ + background:var(--surface-error); + border-radius:23px 23px 0 0 +} +.mobile .mega-dialog.verify-email .header{ + border-radius:0 +} +.mega-dialog.verify-email .content-block{ + text-align:center +} +.mega-dialog.verify-email .content-block .text:first-child{ + margin-top:16px +} +.mega-dialog.verify-email .content-block .text{ + color:var(--text-color-high); + margin-bottom:16px +} +.mega-dialog.verify-email .content-block .header-text{ + margin-bottom:4px +} +.mega-dialog.verify-email .content-block .text strong{ + font-family:var(--text-font-family-semibold) +} +.mega-dialog.verify-email .content-block .text.small{ + font:var(--text-body2); + margin-bottom:8px +} +.mega-dialog.verify-email .content-block .text.red{ + color:var(--text-color-error); + cursor:pointer; + margin-bottom:0; + position:relative +} +.mega-dialog.verify-email .locked-account{ + --width:72px; + height:72px; + margin:0 auto 16px; + width:72px +} +.mega-dialog.verify-email .dropdown.body{ + border-radius:24px; + bottom:29px; + cursor:default; + left:50%; + margin:0 0 0 -160px; + opacity:0; + padding:24px; + position:absolute; + transition:opacity .2s ease-in-out,visibility .2s ease-in-out; + visibility:hidden; + width:320px +} +.verify-email.content-block .text.red .dropdown.body:after{ + bottom:-10px; + content:""; + height:34px; + left:0; + position:absolute; + width:100% +} +.verify-email.content-block .text.red:hover .dropdown.body{ + opacity:1; + visibility:visible +} +h3.verify-email.header-txt{ + color:var(--text-color-high); + font:var(--text-h3); + margin:0 0 12px +} +.verify-email .dropdown.body .text:last-child{ + margin:0 +} +.mobile .mega-dialog.verify-email{ + max-width:100% +} +.mobile .mega-dialog.verify-email-login-to-account .footer-container,.mobile .mega-dialog.verify-email-set-new-pass .footer-container,.mobile .mega-dialog.verify-email .footer-container{ + justify-content:center; + padding:16px 0 +} +.mobile .verify-email.content-block{ + padding:19px 20px 0 +} +.mobile .verify-email.header{ + height:auto; + padding-top:24px +} +.mobile .verify-email.header-txt{ + padding-bottom:12px; + padding-top:0 +} +.mobile .verify-email.content-block .text{ + margin-bottom:15px +} +.mobile .verify-email.content-block .text.red{ + margin-bottom:20px +} +.mobile .verify-email .dropdown.body{ + margin-left:-50%; + width:100% +} +.mobile .verify-email.content-block .text.red{ + position:static +} +.mobile .verify-email .dropdown.body{ + bottom:auto !important; + height:auto; + margin:0; + max-height:100%; + max-height:-webkit-calc(100% - 60px); + max-height:-moz-calc(100% - 60px); + max-height:calc(100% - 60px); + max-height:none; + max-width:100%; + max-width:-webkit-calc(100% - 60px); + max-width:-moz-calc(100% - 60px); + max-width:calc(100% - 60px); + top:50%; + -webkit-transform:translate(-50%, -50%); + -moz-transform:translate(-50%, -50%); + -ms-transform:translate(-50%, -50%); + -o-transform:translate(-50%, -50%); + transform:translate(-50%, -50%) +} +.mega-dialog.type-480px227{ + max-width:480px +} +.login-set-pass.content-block{ + color:var(--text-color-high); + font:var(--text-body1); + padding:22px 35px 35px; + text-align:center +} +.login-set-pass .text{ + padding:2px 0 18px +} +.login-set-pass .dialog-login-form{ + margin-top:9px +} +.mobile .mega-dialog.type-480px227{ + max-width:100% +} +.mobile .login-set-pass .text{ + padding-bottom:5px +} +.mobile .login-set-pass .dialog-login-form.low-pad{ + margin-top:-10px +} +.mobile .login-set-pass .text{ + padding:2px 0 10px +} +.mobile .account.dialog-login-form-low-pad{ + margin-top:-5px +} +.mobile .login-set-pass .dialog-login-form{ + margin-top:0 +} +.mobile .login-set-pass .dialog-top-icon.locked-account{ + margin-bottom:5px +} +.mobile .type-480px227 .mega-input.title-ontop{ + margin-bottom:10px +} +.mobile .login-set-pass button{ + margin-top:0 +} +@media only screen and (orientation:landscape){ +.mobile .verify-email.header{ + padding-top:14px +} +} +.mobile .mega-dialog-container{ + align-items:center; + display:flex; + height:100%; + justify-content:center; + left:0; + pointer-events:none; + position:fixed; + top:0; + width:100%; + z-index:1300 +} +.mobile .mega-dialog-container>*{ + pointer-events:auto +} +.mobile .mega-dialog{ + background:#fff; + position:absolute +} +.mobile .mega-dialog:not(.fullsize-on-mobile){ + border-radius:24px +} +.mobile .mega-dialog.fullsize-on-mobile{ + border-radius:0 +} +.mobile .mega-dialog footer{ + text-align:center +} +.mobile .mega-dialog aside{ + min-height:24px +} +.mobile .mega-dialog .mega-button{ + appearance:none; + border:none; + border-radius:4px; + box-sizing:border-box; + cursor:pointer; + display:inline-block; + font-size:14px; + height:48px; + line-height:48px; + min-width:128px; + outline:none; + padding:0 25px; + position:relative; + white-space:nowrap +} +.mobile .mega-dialog .mega-button.disabled{ + opacity:.4 +} +.mobile .mega-dialog .mega-button:before{ + border-radius:inherit; + box-shadow:0 1px 2px 0 rgb(0 0 0 / .15); + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.mobile .mega-dialog .mega-button.positive,.mobile .mega-dialog footer button.positive{ + background:linear-gradient(180deg, #00bfa5 0, #00a690); + color:#fff +} +.mobile .verify-email-login-to-account button.close,.mobile .verify-email button.close{ + display:none +} +.mobile .verify-email-login-to-account header h2{ + color:#333; + font-family:var(--text-font-family); + font-size:16px; + line-height:24px; + margin-bottom:0; + text-align:center +} +.mobile .verify-email-login-to-account .content-block{ + padding:10px 25px 25px +} +.mobile .verify-email-login-to-account .dialog-top-icon.locked-account{ + margin:16px auto +} +.mobile .verify-email-set-new-pass button.close{ + display:none +} +.mobile .verify-email-set-new-pass header h2{ + color:#333; + font-family:var(--text-font-family); + font-size:16px; + line-height:24px; + margin-bottom:0; + margin-top:18px; + text-align:center +} +.mobile .verify-email-set-new-pass .content-block{ + padding:10px 25px 25px +} +@media only screen and (max-height:600px){ +.mega-dialog>section{ + flex-shrink:0 +} +} + +.cookie-dialog{ + display:flex; + margin:0 !important; + max-height:calc(100% - 30px); + max-width:596px; + text-align:center; + width:calc(100% - 30px); + z-index:9999 !important +} +.mobile .mega-dialog.cookie-dialog{ + max-width:596px; + overflow:visible +} +.cookie-dialog .content-block{ + border-radius:var(--border-radius); + display:none; + flex-direction:column; + font-size:0; + min-height:0; + width:100% +} +.cookie-dialog .content-block.active{ + display:flex +} +.cookie-dialog .scrollable-block{ + -webkit-overflow-scrolling:touch; + overflow:auto; + padding:0 48px; + position:relative +} +.cookie-dialog .step2 .scrollable-block{ + padding:0 30px +} +.cookie-dialog .bottom-buttons{ + background:var(--surface-grey-1); + border-bottom-left-radius:var(--border-radius); + border-bottom-right-radius:var(--border-radius); + padding:24px 48px; + position:relative +} +.cookie-dialog .step2 .bottom-buttons{ + height:60px; + padding:14px 30px +} +.rtl .cookie-dialog .bottom-buttons .right{ + float:left +} +.rtl .cookie-dialog .bottom-buttons .left{ + float:right +} +.cookie-dialog .bottom-buttons button{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.cookie-dialog .bottom-buttons button.left{ + -webkit-margin-end:8px; + margin:0; + margin-inline-end:8px +} +.cookie-dialog .scrollable-block.big-pad{ + padding:62px 50px +} +.cookie-dialog .cookie-icon{ + --width:120px; + height:120px; + margin:0 auto; + width:120px +} +.cookie-dialog .header{ + color:var(--text-color-high); + font:var(--text-h2); + padding:24px 0 0 +} +.cookie-dialog .common-info{ + color:var(--text-color-medium); + font:var(--text-body1); + padding:30px 0 0 +} +.cookie-dialog a.green,.cookie-dialog a.green:visited{ + color:var(--text-color-success); + overflow-wrap:break-word +} +.cookie-dialog .header.medium{ + font:var(--text-h2); + padding:12px 0 +} +.cookie-dialog .step2 .header.medium{ + font:var(--text-h3); + padding:29px 0 0 +} +.cookie-dialog .settings-tip{ + color:var(--text-color-low); + display:none; + font-size:13px; + line-height:20px; + margin:-22px auto 10px; + max-width:478px; + padding:0 24px +} +.cookie-dialog .step2 .settings-tip{ + margin-top:7px +} +.cookie-dialog .settings{ + border-collapse:collapse; + display:table; + width:100% +} +.cookie-dialog .settings-row{ + border-top:1px solid var(--stroke-grey-2); + display:table-row +} +.cookie-dialog .settings-row.hidden{ + display:none +} +.cookie-dialog .settings-row:first-child{ + border:0 +} +.cookie-dialog .settings-cell{ + display:table-cell; + line-height:0; + padding:12px 0 +} +.cookie-dialog .settings-cell:first-child{ + text-align:start; + vertical-align:bottom +} +.cookie-dialog .settings-cell.saved{ + background:var(--surface-grey-1); + display:none +} +.cookie-dialog .settings-header{ + color:var(--text-color-high); + font-family:var(--text-font-family-semibold); + font-size:15px; + line-height:22px +} +.cookie-dialog .settings-text{ + color:var(--text-color-low); + font-size:14px; + line-height:22px; + padding:10px 0 0 +} +.cookie-dialog .settings-cell a,.cookie-dialog .settings-cell a:active{ + color:var(--text-color-low); + display:inline-block; + font-size:14px; + line-height:22px; + margin:4px 0; + text-decoration:underline +} +.cookie-dialog .settings-cell a:visited{ + color:var(--text-color-low) +} +.cookie-dialog .toggle-header{ + color:var(--text-color-high); + display:none; + font-family:var(--text-font-family-semibold); + font-size:14px; + line-height:17px; + min-width:82px; + padding:2px 10px 10px +} +.cookie-dialog .mega-switch,.rtl .cookie-dialog .mega-switch{ + float:none +} +.cookie-dialog .mega-switch.disabled{ + cursor:default; + opacity:.5 +} +.cookie-dialog .settings-links{ + margin:10px 0 48px +} +.cookie-dialog a.settings-link{ + -webkit-margin-end:25px; + font-family:var(--text-font-family-semibold); + margin:10px 0 0; + margin-inline-end:25px +} +.cookie-dialog a.settings-link,.cookie-dialog a.settings-link:visited{ + color:var(--text-color-medium) +} +.cookie-dialog a.settings-link:active,.cookie-dialog a.settings-link:visited{ + margin-right:25px +} +.cookie-dialog a.settings-link:last-child{ + -webkit-margin-end:0; + margin-inline-end:0 +} +.cookie-dialog .tabs{ + display:none; + font-size:0; + padding:5px 0 0; + white-space:nowrap +} +.cookie-dialog .settings-tab{ + background:var(--surface-grey-1); + color:var(--text-color-medium); + display:inline-block; + font-size:14px; + height:44px; + line-height:44px; + vertical-align:top; + width:50% +} +.cookie-dialog .settings-tab.active{ + border-bottom:2px solid var(--stroke-success); + color:var(--text-color-success); + font-family:var(--text-font-family-semibold) +} +.active-saved-cookies .settings-tip,.active-saved-cookies .toggle-header{ + display:block +} +.active-saved-cookies .settings-cell.saved{ + display:table-cell +} +.cookie-dialog .info-block{ + color:var(--text-color-low); + font-size:14px; + line-height:22px; + padding:0 0 52px; + text-align:start +} +.cookie-dialog .header.small{ + font:var(--text-h3); + padding:0 0 4px +} +.cookie-dialog .info-block .category{ + color:var(--text-color-medium); + padding:0 0 7px +} +.cookie-dialog .info-block ul{ + list-style:none; + margin:0; + padding:0 +} +.cookie-dialog .info-block li:before{ + -webkit-margin-end:4px; + content:"\2022"; + display:inline-block; + margin-inline-end:4px; + vertical-align:top +} +.mobile .cookie-dialog .scrollable-block.big-pad{ + padding:40px 30px 20px +} +.mobile .cookie-dialog .scrollable-block{ + padding:0 20px +} +.mobile .cookie-dialog .settings-links{ + margin-bottom:0 +} +.mobile .cookie-dialog .toggle-header{ + display:none +} +.mobile .cookie-dialog .settings-cell.saved{ + background-color:initial +} +.mobile .active-saved-cookies .tabs{ + display:block +} +.mobile .cookie-dialog .info-block{ + padding:10px 0 28px +} +.mobile .cookie-dialog .bottom-buttons.pad{ + padding-bottom:30px +} +.mobile .cookie-dialog .bottom-buttons{ + background-color:initial; + box-shadow:none; + height:auto; + padding:26px 16px 12px +} +.mobile .cookie-dialog .bottom-buttons .mega-button{ + margin-bottom:8px; + width:100% +} +.mobile .cookie-banner .buttons .mega-button,.mobile .cookie-dialog .bottom-buttons .mega-button{ + background:linear-gradient(180deg, rgb(255 255 255), rgb(253 253 253)); + border-radius:4px; + box-shadow:0 1px 1px 0 rgb(0 0 0 / .07),inset 0 0 0 1px rgb(226 226 226); + color:var(--text-color-medium); + line-height:24px; + padding:6px 8px; + text-decoration:none +} +.mobile .cookie-dialog .bottom-buttons .mega-button:before{ + display:none +} +.mobile .cookie-banner .buttons .mega-button.positive,.mobile .cookie-dialog .bottom-buttons .mega-button.positive{ + background:linear-gradient(180deg, rgb(7 190 177), rgb(0 191 165)); + box-shadow:0 1px 1px 0 rgba(0 0 0 / .11),inset 0 2px 1px 0 rgba(255 255 255 / .2); + color:#fff; + line-height:24px; + padding:6px 8px +} +.mobile .cookie-dialog .bottom-buttons .mega-button.m-lnk{ + background:none; + box-shadow:none; + color:#818993; + font-size:12px; + height:36px; + line-height:36px; + text-decoration:underline +} +.mobile .cookie-dialog .bottom-buttons .mega-button.m-lnk:before{ + display:none +} +@media only screen and (max-width:625px),screen and (max-height:625px){ +.cookie-dialog .header,.cookie-dialog .header.medium{ + font-family:var(--text-font-family-semibold); + font-size:17px +} +.cookie-dialog .common-info{ + font-size:14px; + padding:15px 0 0 +} +.cookie-dialog .header.medium{ + padding:18px 0 +} +.cookie-dialog .settings-tip{ + margin-top:-14px +} +.cookie-dialog .settings-header{ + color:var(--text-color-high); + font-size:14px +} +.cookie-dialog .settings-row:first-child .settings-cell{ + padding:12px 0 +} +.cookie-dialog .settings-text{ + color:var(--text-color-medium); + font-size:13px; + line-height:16px; + padding:7px 0 0 +} +.cookie-dialog .settings-cell a,.cookie-dialog .settings-cell a:active{ + font-size:13px; + line-height:17px +} +.cookie-dialog .info-block{ + font-size:12px; + line-height:18px; + padding:10px 0 52px; + text-align:center +} +.cookie-dialog .header.small{ + font-size:14px; + padding:0 0 5px +} +.cookie-dialog .info-block .category{ + color:var(--text-color-high); + font-size:13px; + padding:0 0 16px +} +} +@media (hover:hover){ +.cookie-banner .buttons a:hover,.cookie-dialog a:hover{ + text-decoration:none +} +} + +.ui-resizable{ + position:relative +} +.ui-resizable-handle{ + display:block; + font-size:.1px; + position:absolute +} +.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{ + display:none +} +.ui-resizable-n{ + cursor:n-resize; + height:15px; + left:0; + top:-1px; + width:100% +} +.ui-resizable-s{ + bottom:-5px; + cursor:s-resize; + height:7px; + left:0; + width:100% +} +.ui-resizable-e{ + cursor:e-resize; + right:-5px +} +.ui-resizable-e,.ui-resizable-w{ + height:100%; + top:0; + width:7px +} +.ui-resizable-w{ + cursor:w-resize; + left:-5px +} +.ui-resizable-se{ + bottom:1px; + cursor:se-resize; + height:12px; + right:1px; + width:12px +} +.ui-resizable-sw{ + bottom:-5px; + cursor:sw-resize +} +.ui-resizable-nw,.ui-resizable-sw{ + height:9px; + left:-5px; + width:9px +} +.ui-resizable-nw{ + cursor:nw-resize; + top:-5px +} +.ui-resizable-ne{ + cursor:ne-resize; + height:9px; + right:-5px; + top:-5px; + width:9px +} +.ui-selectable-helper{ + background:var(--surface-highlight-2); + border:1px dotted var(--stroke-mid-grey); + position:absolute; + z-index:1250 +} diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A5CE976208DEE569DD92CC21F5FF85C2C3711B37 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A5CE976208DEE569DD92CC21F5FF85C2C3711B37 new file mode 100644 index 0000000..52e65fa Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A5CE976208DEE569DD92CC21F5FF85C2C3711B37 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A5CE976208DEE569DD92CC21F5FF85C2C3711B37-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A5CE976208DEE569DD92CC21F5FF85C2C3711B37-blob new file mode 100644 index 0000000..bd881b5 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A5CE976208DEE569DD92CC21F5FF85C2C3711B37-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A5F78C4F4E7B57EFCB08EBF18E6A19AFE40F71E4 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A5F78C4F4E7B57EFCB08EBF18E6A19AFE40F71E4 new file mode 100644 index 0000000..6554434 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A5F78C4F4E7B57EFCB08EBF18E6A19AFE40F71E4 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A6FF3E70E82948DD3C6E66F914E3CE15D4B0DAA9 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A6FF3E70E82948DD3C6E66F914E3CE15D4B0DAA9 new file mode 100644 index 0000000..78de1c4 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A6FF3E70E82948DD3C6E66F914E3CE15D4B0DAA9 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A6FF3E70E82948DD3C6E66F914E3CE15D4B0DAA9-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A6FF3E70E82948DD3C6E66F914E3CE15D4B0DAA9-blob new file mode 100644 index 0000000..b3269d4 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A6FF3E70E82948DD3C6E66F914E3CE15D4B0DAA9-blob @@ -0,0 +1,6600 @@ +/* Bundle Includes: + * html/js/registerb.js + * js/emailNotify.js + * js/megadrop.js + * js/ui/slideshow/file.js + * js/ui/slideshow/manager.js + * js/ui/slideshow/playlist.js + * js/ui/slideshow/step.js + * js/ui/slideshow/utils.js + * js/ui/slideshow/settings/base/options.js + * js/ui/slideshow/settings/base/switch.js + * js/ui/slideshow/settings/order.js + * js/ui/slideshow/settings/speed.js + * js/ui/slideshow/settings/repeat.js + * js/ui/slideshow/settings/sub.js + * js/ui/slideshow/settings/settingsManager.js + * js/ui/imagesViewer.js + */ + +/** a class contains the code-behind of business register "registerb" page */ +function BusinessRegister() { + "use strict"; + this.cacheTimeout = 9e5; // 15 min - default threshold to update payment gateway list + this.planPrice = 9.99; // initial value + this.minUsers = 3; // minimum number of users + this.maxUsers = 300; // maximum number of users + this.isLoggedIn = false; + this.hasAppleOrGooglePay = false; + if (mega) { + if (!mega.cachedBusinessGateways) { + mega.cachedBusinessGateways = Object.create(null); + } + } +} + + +/** a function to rest business registration page to its initial state*/ +/* eslint-disable-next-line complexity */ +BusinessRegister.prototype.initPage = function(preSetNb, preSetName, preSetTel, preSetFname, preSetLname, preSetEmail) { + "use strict"; + + loadingDialog.show(); + + var $pageContainer = $('.bus-reg-body'); + var mySelf = this; + + var $nbUsersInput = $('#business-nbusrs', $pageContainer).val(preSetNb || ''); + var $cnameInput = $('#business-cname', $pageContainer).val(preSetName || ''); + var $telInput = $('#business-tel', $pageContainer).val(preSetTel || ''); + var $fnameInput = $('#business-fname', $pageContainer).val(preSetFname || ''); + var $lnameInput = $('#business-lname', $pageContainer).val(preSetLname || ''); + var $emailInput = $('#business-email', $pageContainer).val(preSetEmail || ''); + var $passInput = $('#business-pass', $pageContainer).val(''); + var $rPassInput = $('#business-rpass', $pageContainer).val(''); + var $storageInfo = $('.business-plan-note span', $pageContainer); + + $('.bus-reg-radio-block .bus-reg-radio', $pageContainer).removeClass('radioOn').addClass('radioOff'); + $('.mega-terms.bus-reg-agreement .checkdiv', $pageContainer).removeClass('checkboxOn'); + $('.ok-to-auto.bus-reg-agreement .checkdiv', $pageContainer).addClass('checkboxOn'); + $('.bus-reg-agreement.mega-terms .radio-txt', $pageContainer).safeHTML(l['208s']); + $('.bus-reg-plan .business-base-plan .left', $pageContainer) + .text(l[19503].replace('[0]', this.minUsers)); + $storageInfo.text(l[23789].replace('%1', '15 ' + l[20160])); + + var nbUsersMegaInput = new mega.ui.MegaInputs($nbUsersInput); + nbUsersMegaInput.showMessage('*' + l[19501], true); + + $nbUsersInput.rebind('wheel.registerb', function(e) { + e.preventDefault(); + }); + + var cnameMegaInput = new mega.ui.MegaInputs($cnameInput); + var telMegaInput = new mega.ui.MegaInputs($telInput); + var fnameMegaInput = new mega.ui.MegaInputs($fnameInput); + var lnameMegaInput = new mega.ui.MegaInputs($lnameInput); + var emailMegaInput = new mega.ui.MegaInputs($emailInput); + var passMegaInput = new mega.ui.MegaInputs($passInput); + var rPassMegaInput = new mega.ui.MegaInputs($rPassInput); + + // Remove error on firstname and lastname at same time. + $fnameInput.rebind('input.hideErrorName', function() { + lnameMegaInput.hideError(); + }); + + $lnameInput.rebind('input.hideErrorName', function() { + fnameMegaInput.hideError(); + }); + + // Remove error on password and repeat password at same time. + $passInput.rebind('input.hideErrorPass', function() { + rPassMegaInput.hideError(); + }); + + $rPassInput.rebind('input.hideErrorPass', function() { + passMegaInput.hideError(); + }); + + // hiding everything to get ready first + $pageContainer.addClass('hidden'); // hiding the main sign-up part + $('.bus-confirm-body.confirm').addClass('hidden'); // hiding confirmation part + $('.bus-confirm-body.verfication').addClass('hidden'); // hiding verification part + + // function to show first step of registration + var unhidePage = function() { + $pageContainer.removeClass('hidden'); // viewing the main sign-up part + $('.bus-confirm-body.confirm').addClass('hidden'); // hiding confirmation part + $('.bus-confirm-body.verfication').addClass('hidden'); // hiding verification part + $pageContainer.find('#business-nbusrs').focus(); + loadingDialog.hide(); + }; + if (d && localStorage.debugNewPrice) { + mySelf.usedGB = 7420; + } + + // check if this is logged in user + if (u_type) { + if (u_attr && u_attr.b) { + if (u_attr.b.s !== -1 && u_attr.b.s !== 2) { + return loadSubPage(''); + } + else { + return loadSubPage('repay'); + } + } + else if (u_attr && u_attr.p && u_attr.p !== 100) { + mySelf.hasAppleOrGooglePay = true; + } + if (!M.account) { + M.accountData(mySelf.initPage.bind( + mySelf, + mySelf.preSetNb, + mySelf.preSetName, + mySelf.preSetTel, + mySelf.preSetFname, + mySelf.preSetLname, + mySelf.preSetEmail + )); + return false; + } + mySelf.usedGB = M.account.space_used / 1073741824; + + $emailInput.val(u_attr['email']); + $emailInput.prop('disabled', true); + $emailInput.blur(); + $fnameInput.val(u_attr['firstname']); + if (u_attr['firstname']) { + $fnameInput.prop('disabled', true); + $fnameInput.blur(); + } + $lnameInput.val(u_attr['lastname']); + if (u_attr['lastname']) { + $lnameInput.prop('disabled', true); + $lnameInput.blur(); + } + + // hiding element we dont need for logged-in users + $passInput.parent().addClass('hidden'); + $rPassInput.parent().addClass('hidden'); + + this.isLoggedIn = true; + } + + $('.bus-reg-btn, .bus-reg-btn-2', $pageContainer).addClass('disabled'); + + var fillPaymentGateways = function(status, list) { + + var failureExit = function(msg) { + + msgDialog('warninga', '', msg || l[19342], '', function() { + loadSubPage('start'); + }); + }; + + if (!status) { // failed result from API + return failureExit(); + } + + // clear the payment block + var $paymentBlock = $('.bus-reg-radio-block', $pageContainer).empty(); + + const icons = { + ecpVI: 'sprite-fm-uni icon-visa-border', + ecpMC: 'sprite-fm-uni icon-mastercard-border', + Stripe2: 'sprite-fm-theme icon-stripe', + stripeVI: 'sprite-fm-uni icon-visa-border', + stripeMC: 'sprite-fm-uni icon-mastercard-border', + stripeAE: 'sprite-fm-uni icon-amex', + stripeJC: 'sprite-fm-uni icon-jcb', + stripeUP: 'sprite-fm-uni icon-union-pay', + stripeDD: 'provider-icon stripeDD' + }; + + var radioHtml = '
                ' + + '
                '; + var textHtml = '
                [x]
                '; + var iconHtml = `
                + +
                `; + + if (!list.length) { + return failureExit(l[20431]); + } + + if (!window.businessVoucher) { + var paymentGatewayToAdd = ''; + for (var k = 0; k < list.length; k++) { + var payRadio = radioHtml.replace('[x]', list[k].gatewayName).replace('[Y]', list[k].gatewayId). + replace('[Z]', list[k].gatewayName); + var payText = textHtml.replace('[x]', list[k].displayName); + var payIcon = iconHtml.replace('[x]', icons[list[k].gatewayName]); + paymentGatewayToAdd += payRadio + payText + payIcon; + } + if (paymentGatewayToAdd) { + $paymentBlock.safeAppend(paymentGatewayToAdd); + } + } + $paymentBlock.safeAppend( + radioHtml.replace('[x]', 'Voucher') + textHtml.replace('[x]', l[23494]) + '
                ' + ); + + // setting the first payment provider as chosen + $('.bus-reg-radio-block .bus-reg-radio', $pageContainer).first().removeClass('radioOff') + .addClass('radioOn'); + + // event handler for radio buttons + $('.bus-reg-radio-option', $paymentBlock) + .rebind('click.suba', function businessRegisterationCheckboxClick() { + const $me = $('.bus-reg-radio', $(this)); + if ($me.hasClass('radioOn')) { + return; + } + $('.bus-reg-radio', $paymentBlock).removeClass('radioOn').addClass('radioOff'); + $me.removeClass('radioOff').addClass('radioOn'); + }); + + // view the page + unhidePage(); + }; + + const isValidBillingData = () => { + return mySelf.planInfo.bd && + mySelf.planInfo.bd.us && (mySelf.planInfo.bd.us.p || mySelf.planInfo.bd.us.lp) && + mySelf.planInfo.bd.sto && (mySelf.planInfo.bd.sto.p || mySelf.planInfo.bd.sto.lp) && + mySelf.planInfo.bd.sto.s && + mySelf.planInfo.bd.trns && (mySelf.planInfo.bd.trns.p || mySelf.planInfo.bd.trns.lp) && + mySelf.planInfo.bd.trns.t && + mySelf.planInfo.bd.ba.s && mySelf.planInfo.bd.ba.t; + }; + + const isUsageCharges = () => { + return mySelf.planInfo.bd.ba.s > 0 && mySelf.planInfo.bd.ba.t > 0 && mySelf.planInfo.bd.sto.s > 0 + && mySelf.planInfo.bd.trns.t > 0; + }; + + const isLocalInfoValid = () => { + return mySelf.planInfo.l && mySelf.planInfo.l.lcs && mySelf.planInfo.l.lc; + }; + + const updateBreakdown = (users, quota, usrFare, quotaFare) => { + users = Math.max(users || 0, mySelf.minUsers); + quota = quota || mySelf.extraStorage; + + const mIntl = mega.intl; + const intl = mIntl.number; + + const $breakdown = $('.business-plan-breakdown', $pageContainer); + const $usersRow = $('.bus-plan-nb-users.bus-breakdown-row', $breakdown); + const $quotaRow = $('.bus-plan-ex-quota.bus-breakdown-row', $breakdown).addClass('hidden'); + + let totalUsr; + let totalQuota = -1; + let total = 0; + + if (mySelf.localPricesMode) { + usrFare = usrFare || mySelf.planInfo.bd.us.lp; + totalUsr = formatCurrency(total = usrFare * users, mySelf.planInfo.l.lc); + + if (quota && !Number.isNaN(quota)) { + quotaFare = quotaFare || mySelf.planInfo.bd.sto.lp; + const temp = quotaFare * quota; + total += temp; + totalQuota = formatCurrency(temp, mySelf.planInfo.l.lc); + } + total = `${formatCurrency(total, mySelf.planInfo.l.lc)}*`; + } + else { + usrFare = usrFare || mySelf.planInfo.bd && mySelf.planInfo.bd.us.p || mySelf.planInfo.p; + totalUsr = formatCurrency(total = usrFare * users); + if (quota && !Number.isNaN(quota)) { + quotaFare = quotaFare || mySelf.planInfo.bd.sto.p; + const temp = quotaFare * quota; + total += temp; + totalQuota = formatCurrency(temp); + } + total = formatCurrency(total); + $('.bus-price-footer-note', $pageContainer).addClass('hidden'); + } + + $('.nb-users-val', $usersRow).text(mega.icu.format(l.users_unit, users)); + $('.nb-users-fare', $usersRow).text(totalUsr); + + if (totalQuota !== -1) { + $('.ex-quota-val', $quotaRow).text(l.additional_storage.replace('%1', quota)); + $('.ex-quota-fare', $quotaRow).text(totalQuota); + $quotaRow.removeClass('hidden'); + } + + $('.business-plan-total .bus-total-val', $pageContainer).text(total); + + }; + + const updatePriceGadget = function(users, quota) { + if (!users) { + users = mySelf.minUsers; // minimum val + } + const intl = mega.intl.number; + const extraFares = Object.create(null); + extraFares.storageFare = -1; + extraFares.transFare = -1; + extraFares.storageBase = -1; + extraFares.transBase = -1; + let localPricesMode = false; + let quotaInfoPresent = false; + + if (typeof mySelf.planInfo.bd === 'undefined' || !isValidBillingData()) { + + // opps, bd is not available, new version of api cannot allow this. + console.error('"bd" is not present or not valid. Something is wrong.'); + return false; + } + + // hooray, new billing data. + localPricesMode = mySelf.planInfo.bd.us.lp && mySelf.planInfo.bd.sto.lp && mySelf.planInfo.bd.trns.lp; + localPricesMode = localPricesMode && isLocalInfoValid(); + + const userFare = localPricesMode && mySelf.planInfo.bd.us.lp || mySelf.planInfo.bd.us.p; + extraFares.storageFare = localPricesMode && mySelf.planInfo.bd.sto.lp || mySelf.planInfo.bd.sto.p; + extraFares.transFare = localPricesMode && mySelf.planInfo.bd.trns.lp || mySelf.planInfo.bd.trns.p; + extraFares.storageBase = mySelf.planInfo.bd.ba.s; + extraFares.transBase = mySelf.planInfo.bd.ba.t; + quotaInfoPresent = isUsageCharges(); + + // setting the vals in the plan for payments. + mySelf.planInfo.userFare = mySelf.planInfo.bd.us.p; + + + const $gadget = $('.bus-reg-plan', $pageContainer); + const $perUser = $('.business-plan-peruser', $gadget); + const $perUse = $('.business-plan-peruse', $gadget).addClass('hidden'); + const $euroPriceBl = $('.bus-user-price-euro', $gadget).addClass('hidden'); + const $baseQuotaNote = $('.business-plan-quota-note', $gadget).addClass('hidden'); + + const euroPriceText = formatCurrency(mySelf.planInfo.bd.us.p); + let priceText = euroPriceText; + let currncyAbbrv = ''; + + if (localPricesMode) { + + priceText = formatCurrency(userFare, mySelf.planInfo.l.lc, 'narrowSymbol'); + currncyAbbrv = mySelf.planInfo.l.lc; + + $euroPriceBl.removeClass('hidden'); + + } + + $('.bus-user-price-val', $perUser).text(priceText); + $('.bus-user-price-val-euro', $perUser).text(euroPriceText); + $('.bus-user-price-unit', $perUser).text(l.per_user.replace('%1', currncyAbbrv)); + + if (quotaInfoPresent) { + $('.bus-user-price-val', $perUse).text(l[5816].replace('[X]', extraFares.storageBase / 1024)); + $('.bus-quota-note-body', $baseQuotaNote) + .text(l.base_stroage_note_desc.replace('%1', extraFares.storageBase / 1024) + .replace('%2', intl.format(mySelf.planInfo.bd.sto.p))); + + const neededQuota = mySelf.usedGB - extraFares.storageBase; + if (neededQuota > 0) { + mySelf.extraStorage = Math.ceil(neededQuota / 1024); + const $extraStroage = $('.bus-addition-storage-block', $pageContainer).removeClass('hidden'); + $('.bus-add-storage-body', $extraStroage) + .text(l.additional_storage.replace('%1', mySelf.extraStorage)); + $('.bus-add-storage-foot', $extraStroage) + .text(l.additional_storage_desc.replace('%1', extraFares.storageBase / 1024)); + quota = mySelf.extraStorage; + + mySelf.planInfo.quotaFare = mySelf.planInfo.bd.sto.p; + } + + $perUse.removeClass('hidden'); + $baseQuotaNote.removeClass('hidden'); + } + + mySelf.localPricesMode = localPricesMode; + updateBreakdown(users, quota, userFare, extraFares.storageFare); + }; + + // event handler for clicking on terms anchor + $('.bus-reg-agreement.mega-terms .radio-txt span', $pageContainer) + .rebind('click', function termsClickHandler() { + if (!is_mobile) { + bottomPageDialog(false, 'terms', false, true); + } + else { + var wentOut = false; + if (window.open) { + var cutPlace = location.href.indexOf('/registerb'); + var myHost = location.href.substr(0, cutPlace); + myHost += '/terms'; + wentOut = window.open(myHost, 'MEGA LIMITED TERMS OF SERVICE'); + } + if (!wentOut) { + loadSubPage('terms'); + } + } + return false; + }); + + // event handler for check box + $('.bus-reg-agreement', $pageContainer).rebind( + 'click.suba', + function businessRegisterationCheckboxClick() { + var $me = $('.checkdiv', $(this)); + if ($me.hasClass('checkboxOn')) { + $me.removeClass('checkboxOn').addClass('checkboxOff'); + $('.bus-reg-btn, .bus-reg-btn-2', $pageContainer).addClass('disabled'); + } + else { + $me.removeClass('checkboxOff').addClass('checkboxOn'); + if ($('.bus-reg-agreement .checkdiv.checkboxOn', $pageContainer).length === 2) { + $('.bus-reg-btn, .bus-reg-btn-2', $pageContainer).removeClass('disabled'); + } + else { + $('.bus-reg-btn, .bus-reg-btn-2', $pageContainer).addClass('disabled'); + } + } + }); + + // event handlers for focus and blur on checkBoxes + var $regChk = $('.checkdiv input', $pageContainer); + $regChk.rebind( + 'focus.chkRegisterb', + function regsiterbInputFocus() { + $(this).parent().addClass('focused'); + } + ); + + $regChk.rebind( + 'blur.chkRegisterb', + function regsiterbInputBlur() { + $(this).parent().removeClass('focused'); + } + ); + + /**input values validation + * @param {Object} $element the single element to validate, if not passed all will be validated + * @returns {Boolean} whether the validation passed or not*/ + var inputsValidator = function($element) { + + var passed = true; + + if (mySelf.isLoggedIn === false) { + if (!$element || $element.is($passInput) || $element.is($rPassInput)) { + + // Check if the entered passwords are valid or strong enough + var passwordValidationResult = security.isValidPassword($passInput.val(), $rPassInput.val()); + + // If bad result + if (passwordValidationResult !== true) { + + // Show error for password field, clear the value and refocus it + $passInput.val('').focus().trigger('input'); + $passInput.megaInputsShowError(passwordValidationResult); + + // Show error for confirm password field and clear the value + $rPassInput.val(''); + $rPassInput.parent().addClass('error'); + + passed = false; + } + } + } + if (!$element || $element.is($emailInput)) { + if (!$emailInput.val().trim() || !isValidEmail($emailInput.val())) { + emailMegaInput.showError($emailInput.val().trim() ? l[7415] : l.err_no_email); + $emailInput.focus(); + passed = false; + } + } + if (!$element || $element.is($lnameInput)) { + if (!$lnameInput.val().trim()) { + fnameMegaInput.showError(l.err_missing_name); + lnameMegaInput.showError(); + $lnameInput.focus(); + passed = false; + } + } + if (!$element || $element.is($fnameInput)) { + if (!$fnameInput.val().trim()) { + fnameMegaInput.showError(l.err_missing_name); + lnameMegaInput.showError(); + $fnameInput.focus(); + passed = false; + } + } + if (!$element || $element.is($telInput)) { + const telVal = $telInput.val().trim(); + if (!M.validatePhoneNumber(telVal)) { + telMegaInput.showError(telVal ? l.err_invalid_ph : l.err_no_ph); + $telInput.focus(); + passed = false; + } + } + if (!$element || $element.is($cnameInput)) { + if (!$cnameInput.val().trim()) { + cnameMegaInput.showError(l[19507]); + $cnameInput.focus(); + passed = false; + } + } + if (!$element || $element.is($nbUsersInput)) { + var nbUsersTrimmed = $nbUsersInput.val().trim(); + if (!nbUsersTrimmed || nbUsersTrimmed < mySelf.minUsers) { + nbUsersMegaInput.showError('*' + l[19501]); + $nbUsersInput.focus(); + passed = false; + } + else if (nbUsersTrimmed && nbUsersTrimmed > mySelf.maxUsers) { + nbUsersMegaInput.showError(mega.icu.format(l[20425], mySelf.maxUsers)); + $nbUsersInput.focus(); + passed = false; + } + else { + nbUsersMegaInput.showMessage('*' + l[19501]); + } + } + + return passed; + }; + + + // event handler for change on inputs + $('.bus-reg-info-block input', $pageContainer).rebind( + 'input.suba', + function nbOfUsersChangeEventHandler() { + var $me = $(this); + var valid = false; + if ($me.is($nbUsersInput) && inputsValidator($me)) { + $me.parent().removeClass('error'); + valid = true; + } + if ($me.attr('id') === 'business-nbusrs') { + updateBreakdown(valid ? $me.val() : mySelf.minUsers); + } + } + ); + + // event handler for register button, validation + basic check + var $regBtns = $('#business-reg-btn, #business-reg-btn-mob', $pageContainer); + $regBtns.rebind( + 'click.regBtns', + function registerBusinessAccButtonClickHandler() { + + if ($(this).hasClass('disabled')) { + return false; + } + if (!inputsValidator()) { + return false; + } + if (!u_type) { + api_req({ a: 'ucr' }); + } + + mySelf.doRegister( + $nbUsersInput.val().trim(), + $cnameInput.val().trim(), + $fnameInput.val().trim(), + $lnameInput.val().trim(), + M.validatePhoneNumber($telInput.val().trim()), + $emailInput.val().trim(), + $passInput.val()); + } + ); + + $regBtns.rebind( + 'keydown.regBtns', + function regBusinessKeyDownHandler(e) { + if (e.keyCode === 9) { + e.preventDefault(); + $nbUsersInput.focus(); + } + else if (e.keyCode === 32 || e.keyCode === 13) { + e.preventDefault(); + $(this).triggerHandler('click'); + } + return false; + } + ); + + // event handlers for focus and blur on registerBtn + $regBtns.rebind( + 'focus.regBtns', + function regsiterbBtnFocus() { + $(this).addClass('focused'); + } + ); + + $regBtns.rebind( + 'blur.regBtns', + function regsiterbBtnBlur() { + $(this).removeClass('focused'); + } + ); + + + M.require('businessAcc_js').done(function afterLoadingBusinessClass() { + var business = new BusinessAccount(); + + business.getListOfPaymentGateways(false).always(fillPaymentGateways); + business.getBusinessPlanInfo(false).done(function planInfoReceived(st, info) { + mySelf.planPrice = Number.parseFloat(info.p); + mySelf.planInfo = info; + mySelf.minUsers = info.minu || 3; + updatePriceGadget($nbUsersInput.val() || mySelf.minUsers); + }); + }); +}; + +/** + * register new business account, values must be validated + * @param {Number} nbusers number of users in this business account + * @param {String} cname company name + * @param {String} fname first name of account owner + * @param {String} lname last name of account holder + * @param {String} tel telephone + * @param {String} email email + * @param {String} pass password + */ +BusinessRegister.prototype.doRegister = function(nbusers, cname, fname, lname, tel, email, pass) { + "use strict"; + var $paymentMethod = $('.bus-reg-radio-option .bus-reg-radio.radioOn', '.bus-reg-body'); + var pMethod; + if ($paymentMethod.hasClass('payment-Voucher')) { + pMethod = 'voucher'; + } + + if (is_mobile) { + parsepage(pages['mobile']); + } + loadingDialog.show(); + var mySelf = this; + + var afterEmphermalAccountCreation = function(isUpgrade) { + // at this point i know BusinessAccount Class is required before + var business = new BusinessAccount(); + var settingPromise = business.setMasterUserAttributes(nbusers, cname, tel, fname, lname, + email, pass, isUpgrade); + settingPromise.always(function settingAttrHandler(st, res) { + if (st === 0) { + if (res[1] && res[1] === EEXIST) { + msgDialog( + 'warninga', + l[1578], + l[7869], + '', + function() { + loadingDialog.hide(); + if (is_mobile) { + parsepage(pages['registerb']); + mySelf.initPage(nbusers, cname, tel, fname, lname, email); + + } + var $emailInput = $('.bus-reg-body #business-email'); + $emailInput.megaInputsShowError(l[1297]); + $emailInput.focus(); + } + ); + } + else { + msgDialog('warninga', l[1578], l[19508], '', function() { + loadingDialog.hide(); + mySelf.initPage(nbusers, cname, tel, fname, lname, email); + }); + } + loadingDialog.hide(); + return; + } + loadingDialog.hide(); + var userInfo = { + fname: fname, + lname: lname, + nbOfUsers: nbusers, + pMethod: pMethod, + isUpgrade: isUpgrade, + quota: mySelf.extraStorage + }; + if (pMethod !== 'voucher') { + mySelf.planInfo.usedGatewayId = $paymentMethod.attr('prov-id'); + mySelf.planInfo.usedGateName = $paymentMethod.attr('gate-n'); + } + mySelf.goToPayment(userInfo); + }); + }; + + + // call create ephemeral account function in security package + if (!this.isLoggedIn || !u_type) { + security.register.createEphemeralAccount(afterEmphermalAccountCreation); + } + else { + afterEmphermalAccountCreation(true); + } + +}; + +/** + * show the payment dialog + * @param {Object} userInfo user info (fname, lname and nbOfUsers) + */ +BusinessRegister.prototype.goToPayment = function(userInfo) { + "use strict"; + if (userInfo.pMethod === 'voucher') { + if (!userInfo.isUpgrade) { + window.bCreatedVoucher = true; + } + window.busUpgrade = this.isLoggedIn; + loadSubPage('redeem'); + } + else { + addressDialog.init(this.planInfo, userInfo, this); + } + +}; + +/** + * Process the payment + * @param {Object} payDetails payment collected details from payment dialog + * @param {Object} businessPlan business plan details + */ +BusinessRegister.prototype.processPayment = function(payDetails, businessPlan) { + "use strict"; + loadingDialog.show(); + + var mySelf = this; + + const finalizePayment = (st, res, saleIds) => { + if (st === 0) { + msgDialog('warninga', '', l[19511], '', () => { + loadingDialog.hide(); + addressDialog.closeDialog(); + }); + return; + } + + const redirectToPaymentGateway = () => { + const isStrip = businessPlan.usedGatewayId ? + (businessPlan.usedGatewayId | 0) === addressDialog.gatewayId_stripe : false; + + addressDialog.processUtcResult(res, isStrip, saleIds); + }; + + let showWarnDialog = false; + let payMethod = ''; + + if (mySelf.hasAppleOrGooglePay) { + + const purchases = M.account.purchases; + for (let p in purchases) { + if (purchases[p][4] === 2) { + showWarnDialog = true; + payMethod = 'Apple'; + break; + } + else if (purchases[p][4] === 3) { + showWarnDialog = true; + payMethod = 'Google'; + break; + } + else if (purchases[p][4] === 13) { + showWarnDialog = true; + payMethod = 'Windows Phone'; + break; + } + } + } + + if (showWarnDialog) { + msgDialog('warninga', l[6859], l[20429].replace('{0}', payMethod), '', redirectToPaymentGateway); + } + else { + redirectToPaymentGateway(); + } + }; + + // at this point i know BusinessAccount class is required before + var business = new BusinessAccount(); + var payingPromise = business.doPaymentWithAPI(payDetails, businessPlan); + + payingPromise.always(finalizePayment); +}; + +/** + * Email Notification Settings. + * A wrapper around `MegaIntBitMap` which confines to the bitmap format used for enotif settings. + * - If the LSB is enabled, then all other bits can be considered enabled. + */ +(function(map) { + 'use strict'; + + // Generate the bitmap attribute with `all` prepended to the list. + var attribute = new MegaIntBitMap('enotif', ['all'].concat(map), -2, true, 300); // Autosave after 300ms. + + // Define a wrapper for the attribute which updates the first bit `all` to overwrite all other bits. + Object.defineProperty(mega, 'enotif', { + value: Object.freeze({ + types: map, + + /** + * Set the state of an email + * @param key The email key + * @param newState The new state. + * @return {MegaPromise} + */ + setState: function(key, newState) { + return new MegaPromise(function(resolve, reject) { + attribute.getAll().then(function (allEmailStates) { + var action; + if (allEmailStates.all === true) { + map.forEach(function (key) { + allEmailStates[key] = true; + }); + allEmailStates.all = false; + allEmailStates[key] = false; + action = attribute.set(allEmailStates); + } else { + action = attribute.set(key, newState); + } + action.then(resolve, reject); + }, reject); + }); + }, + + /** + * Returns map of {email-key => state} + * @return {MegaPromise} + */ + all: function() { + return new MegaPromise(function(resolve, reject) { + attribute.getAll().then(function(allEmailStates) { + if (allEmailStates.all === true) { + map.forEach(function(key) { + allEmailStates[key] = true; + }); + } + delete allEmailStates.all; + resolve(allEmailStates); + }, reject); + }); + }, + + /** + * Set the state of all emails. + * @param newState The new state + * @return {MegaPromise} + */ + setAllState: function(newState) { + return attribute.setValue(newState ? 1 : 0); + }, + + /** + * Trigger an attribute refetch. + */ + handleAttributeUpdate: function() { + attribute.handleAttributeUpdate().then(function() { + if (fminitialized && page === 'fm/account/notifications') { + if (is_mobile) { + mobile.account.notifications.init(); + } else { + accountUI.notifications.render(); + } + } + }); + }, + }) + }); +})([ + // Emails that can be toggled on/off. Note: Do not change the order, only append new items as required. + 'contact-request', + 'chat-message', + 'achievements', + 'quota', + 'account-inactive', + 'referral-program', + 'RESERVED-business-usage', + 'card-expiry' +]); + +/** + * Public upload widget, widget window + * PUF - Public Upload Folder + * PUP - Public Upload Page + */ +mega.megadrop = (function() { + "use strict"; + + var ui = {}; + var puf = {}; + var pup = {}; + var settings = {}; + var widgetOpts = { + msg: '', + ownerHandle: '', + pubk: '', + ownerKey: '',// crypto_decodepubkey(base64urldecode(pubk)), + pufHandle: '', + pupHandle: '', + pageData: {}, + dropList: [], + fldrList: [], + req: { + owner: { + a: 'uk', + u: '', + i: requesti + } + }, + ulId: 8000, + ignoreDb: false, + initialized: false + }; + + const winOpen = (url) => { + window.open( + url, + '_blank', + 'noopener,noreferrer, width=750, height=770, resizable=no, status=no, location=no, titlebar=no, toolbar=no' + ); + }; + + /** + * @returns {String} PUP handle + */ + var pupHandle = function widgetPupHandle() { + return widgetOpts.pupHandle; + }; + + /** + * @returns {String} PUF handle + */ + var pufHandle = function widgetPufHandle() { + return widgetOpts.pufHandle; + }; + + var dropList = function widgetDropList() { + return widgetOpts.dropList; + }; + + /** + * Search for MEGAdrop's in folder tree starting from selected node + * @param {String} selected Selected folder/s node handle + * @returns {Array} List of items + */ + var isDropExist = function isDropExist(selected) { + var sel = Array.isArray(selected) ? selected.slice(0) : [selected]; + var result = []; + + while (sel.length) { + var id = sel.shift(); + if (puf.items[id]) { + result.push(id); + } + if (M.tree[id]) { + sel = sel.concat(Object.keys(M.tree[id])); + } + } + + return result; + }; + + /** + * Show user warning dialog when user's action remove public upload folder (PUF) + * @param {Object} list MEGAdrop folders id list + */ + var showRemoveWarning = function showRemoveWarning(list) { + var promise = new MegaPromise(); + var fldName = list.length > 1 + ? l[17626] + : l[17403].replace('%1', escapeHTML(M.d[list[0]].name)); + + if (is_mobile) { + + mobile.messageOverlay.show(fldName, l[18229], false, ['No', 'Yes']) + .then(function() { + closeDialog(); + mega.megadrop.pufRemove(list).done(function() { + promise.resolve(); + }); + }) + .catch(function() { + promise.reject(); + }); + } + else { + msgDialog( + 'confirmation', + l[1003], + fldName, + l[18229], + function(e) { + if (e) { + closeDialog(); + mega.megadrop.pufRemove(list).done(function() { + promise.resolve(); + }); + } + else { + promise.reject(); + } + } + ); + } + + return promise; + }; + + /** + * Make sure that user knows that MEGAdrops wiil be cancelled if any + * full shares or public links are available for target + * @param {Array} handles Array of nodes id which will be moved + * @param {Boolean} target Target node + */ + var preMoveCheck = function preMoveCheck(handles, target) { + var sel = Array.isArray(handles) ? handles : [handles]; + var count = 0; + var list = []; + var promise = new MegaPromise(); + + // Is there any MEGAdrop active for given handles? + // Count for precise dlg message, will loop to the + // end in case there is not MEGAdrops or if only 1 found + for (var i = sel.length; i--;) { + list = list.concat(isDropExist(sel[i])); + } + count = list.length; + if (count) {// MEGAdrop detected in source tree + shared(target).then((res) => { + if (res) {// Full share or pub link found + showRemoveWarning(list).done(function() { + promise.resolve(sel, target); + }).fail(function() { + promise.reject(); + }); + } + else { + var share = new mega.Share({}); + if (share.isShareExist([target], false, true)) {// Search pending shares .ps + showRemoveWarning(list).done(function() { + promise.resolve(sel, target); + }).fail(function() { + promise.reject(); + }); + } + else { + promise.resolve(sel, target); + } + } + }); + } + else {// Free to move no MEGAdrop's + promise.resolve(sel, target); + } + + return promise; + }; + + var updatePUPUserName = function updatePUPUserName(newName) { + for (var h in mega.megadrop.pufs) { + if (mega.megadrop.pups[mega.megadrop.pufs[h].p]) { + mega.megadrop.pupUpdate(h, 'name', newName); + } + } + }; + + /** + * Public upload folder's (PUF) related methods and properties + */ + puf = (function() { + + var pufOpts = { + list: [], + items: {}, + callbacks: {}, // Functions used for callbacks + req: { + create: { // Create PUF + a: 'ul', + n: '', // Folder handle + d: 0, // Create public upload folder + i: requesti, + s: 2, + data: { + name: '', + email: '', + msg: '' + } + }, + remove: { // Remove PUF + a: 'ul', + n: '', // Folder handle + d: 1, // Delete public upload folder + i: requesti + }, + put: { // Upload file to PUF + a: 'pp', + t: '', // puf handle + sm: 1, // 1 for skip missing, 0 for report errors + n: [ // Source file, same as for "a":"p" command + { + h: '', + t: 0, + a: '', + k: ''// Non-symetric encryption encrypt file with owners RSA pubk + } + ], + i: requesti + } + } + }; + + /** + * + * @param {String} pufId + * @param {String} pupId + * @param {Integer} state + */ + var onPupAdd = function pufOnPupAdd(pufId, pupId, state) { + var obj = pufOpts.items; + var nodeId = ''; + var folderName = ''; + + // Update puf.items with related PUP handle + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + var elem = obj[key]; + + if (elem.ph === pufId) { + nodeId = key; + pufOpts.items[key].p = pupId; + pufOpts.items[key].s = state; + folderName = puf.items[key].fn; + if (fmdb && !pfkey) { + fmdb.add('puf', { ph: pufId, + d: { p: pupId, + h: key, + fn: folderName, + ph: pufId, + s: state + } + }); + } + break; + } + } + } + + return nodeId; + }; + /** + * Updates variables and indexedDb for PUF + * @param {Object} puh 'puh' AP + */ + var add = function pufAdd(puh) { + if (d) { + console.log('puf.add'); + } + var pufId = puh.ph; + var nodeId = puh.h; + var folderName = ''; + var state = 2; + + var opPromise = new MegaPromise(); + + if (nodeId) { + if (!pufOpts.items[nodeId]) { + pufOpts.items[nodeId] = Object.create(null); + } + + pufOpts.items[nodeId].h = nodeId; + pufOpts.items[nodeId].ph = pufId; + + dbfetch.get(nodeId).always(function() { + if (M.d[nodeId] && M.d[nodeId].name) { + folderName = M.d[nodeId].name; + } + else { + if (d) { + console.error('Missing node info M.d ', nodeId); + } + return opPromise.reject(); + } + pufOpts.items[nodeId].fn = folderName; + + if (pufId && fmdb && !pfkey) { + fmdb.add('puf', { ph: pufId, + d: { p : '', + h: nodeId, + fn: folderName, + ph: pufId, + s: state + } + }); + } + opPromise.resolve(); + }); + return opPromise; + } + else { + if (d) { + console.error('puf.add nodeHandle is not provided.'); + } + return opPromise.reject(); + } + }; + + /** + * Remove variables and related indexedDb + * @param {Object} puf Action packet + */ + var _del = function _pufDel(puf) { + if (d) { + console.log('puf._del'); + } + var nodeHandle = puf.h; + var pufHandle = puf.ph; + + if (fmdb && !pfkey) { + fmdb.del('puf', pufHandle); + } + + if (pufOpts.items[nodeHandle]) { + delete pufOpts.items[nodeHandle]; + } + }; + + /** + * Handle API action packet PUH + * @param {Object} ap API AP 'puh' + */ + var processPUH = function pufProcessPUH(ap) { + if (d) { + console.log('puf.processPUH'); + } + + for (var i = ap.length; i--;) { + var puh = Object.assign({}, ap[i]); + + if (puh.d) {// 'puh' AP delete + if (requesti === puh.i) { + if (!puh.p) { // Make sure that PUF is synced + _del(puh); + } + } + } + else { + add(puh).done(function () { + mBroadcaster.sendMessageAfterReady('MEGAdrop:puhProcessed_' + puh.ph); + }); + } + } + }; + + /** + * Update cache from indexedDb on page refresh PUF + * @param {Array} data Nodes handle + */ + var processDb = function pufProcessDb(data) { + var puf; + var nodeHandle = ''; + if (d) { + console.log('puf.processDb'); + } + + for (var i in data) { + if (data.hasOwnProperty(i)) { + puf = data[i]; + nodeHandle = puf.h; + + if (!pufOpts.items[nodeHandle]) { + pufOpts.items[nodeHandle] = {}; + } + + pufOpts.items[nodeHandle] = puf; + } + } + }; + + /** + * Create public upload folder (PUF) and public upload page (PUP) + * @param {String} handle Folder handle + */ + var create = function pufCreateV2(handle) { + if (d) { + console.log('puf.create'); + } + var req = pufOpts.req.create; + + if (handle) { + + // PUF handle is available and PUP is enabled/active + if (puf.items[handle] && puf.items[handle].p && puf.items[handle].s !== 1) { + delay('megadrop.log', eventlog.bind(null, 99774)); // manage event + if (is_mobile) { + ui.mobileWidgetDialog(puf.items[handle].p); + } + else { + ui.widgetDialog(puf.items[handle].p); + } + } + else {// Create new PUF + loadingDialog.show();// .hide() is called in ui.widgetDialog() or on res != 0 + + req.data.name = u_attr.name; + req.data.email = u_attr.email; + req.data.msg = M.getNameByHandle(handle) || 'unknown'; // Folder name instead of custom msg + req.n = handle; + + delay('megadrop.log', eventlog.bind(null, 99773)); // create event + + api_req(req, { + callback: function (res) { + if (res < 0) { + loadingDialog.hide(); + msgDialog('warninga', l[135], l[47], api_strerror(res)); + if (d) { + console.error('pufCreate failed ', res); + } + } + else { + if (d) { + console.log('Public upload folder handle: ', res); + } + } + } + }); + } + } + else { + if (d) { + console.warn('Create public upload folder: Folder handle is not provided.', handle); + } + } + }; + + /** + * Removes public upload folder (PUF) + * @param {Object} list MEGAdrop folders id list + * @param {Boolean} [quiet] No loading overlay + * @returns {MegaPromise} + */ + var remove = function pufRemove(list, quiet) { + if (d) { + console.log('puf.remove'); + } + + var len = list.length; + var masterPromise = new MegaPromise(); + var requestPromises = []; + var collectedData = []; + var failedRequests = []; + + var tmpDone = function (response) { + collectedData.push(response); + }; + + var tmpFail = function (failReason) { + if (d) { + console.warn('puf.remove fail ', api_strerror(failReason)); + } + failedRequests.push(failReason); + }; + + if (len) { + if (!quiet) { + loadingDialog.show(); + } + for (var k = len; k--;) { + if (!pufOpts.items[list[k]]) { + continue; + } + var req = Object.assign({}, pufOpts.req.remove); + req.n = list[k]; + + requestPromises.push( + asyncApiReq(req) + .done(tmpDone) + .fail(tmpFail) + ); + } + } + else { + failedRequests.push('puf.remove handle not provided'); + } + + MegaPromise.allDone(requestPromises) + .always(function () { + masterPromise.resolve([collectedData, failedRequests]); + if (!quiet && failedRequests.length) { + loadingDialog.hide(); + } + }); + + return masterPromise; + }; + + /** + * Returns public upload folder handle or '' + * @param {String} handle Folder handle + * @returns {String} Handle or empty string + */ + var getHandle = function pufGetHandle(handle) { + if (d) { + console.log('puf.getHandle'); + } + var result = ''; + + if (pufOpts.items[handle]) { + result = pufOpts.items[handle].ph; + } + + return result; + }; + + /** + * Updates folder name for PUF in cache and db + * @param {String} handle Folder id + * @param {String} value New value + */ + var updateFolderName = function pufUpdateFolderName(handle, value) { + if (d) { + console.log('puf.updateFolderName'); + } + + var param = 'fn'; + var item = pufOpts.items[handle]; + + item[param] = value; + if (fmdb && !pfkey) { + fmdb.add('puf', { ph: item.ph, + d: { p: item.p, + h: item.h, + fn: value, + ph: item.ph + } + }); + } + }; + + // PUF exports + return { + // variables + items: pufOpts.items, + callbacks: pufOpts.callbacks, + + // Functions + add: add, + pufDel: _del, + getHandle: getHandle, + create: create, + remove: remove, + processPUH: processPUH, + processDb: processDb, + onPupAdd: onPupAdd, + updateFolderName: updateFolderName + }; + + }());// END mega.megadrop.puf + + + /** + * Public upload folder's (PUF) related methods and properties + * @param {Object} wopts mega.widget config options + */ + pup = (function(wopts) { + + var pupOpts = { + items: {}, + state: ['remove', 'disable', 'enable'], + req: { + data: {// pup data + name: '', + email: '', + msg: '' + }, + update: {// Update PUP data + a: 'ps', + p: '',// PUP id + d: {},// data + i: requesti + }, + set: {// Create PUP + a: 'ps', + s: 2,// State i.e. ['remove', 'disable', 'enable'] + ph: '',// puf handle + d: {},// Data + i: requesti + }, + get: {// Get PUP data + a: 'pg', + p: '',// pup handle + // i: requesti + }, + remove: {// PUP remove + a: 'ps', + s: 0, + p: '', + i: requesti + }, + list: {// List non-deleted PUP + a: 'pl', + i: requesti + } + } + }; + + /** + * Update indexedDb and pup.opts.items + * @param {Object} pg PUP AP + */ + var add = function pupAdd(pg) { + if (d) { + console.log('pup.add'); + } + + var state = pg.s; + var pufId = pg.ph; + var pupId = pg.p; + + // Update puf.items with related PUP handle + var nodeId = puf.onPupAdd(pufId, pupId, state); + if (!nodeId) { + return; + } + var folderName = puf.items[nodeId].fn; + + if (pupId) { + if (fmdb && !pfkey) { + fmdb.add('pup', { p: pupId, + d: { p: pupId, + ph: pufId, + name: u_attr.name, + email: u_attr.email, + s: state, + msg: '', + fn: folderName, + h: nodeId + } + }); + } + + pupOpts.items[pupId] = {}; + folderName = puf.items[nodeId].fn; + pupOpts.items[pupId].fn = folderName; + pupOpts.items[pupId].h = nodeId; + pupOpts.items[pupId].msg = ''; + pupOpts.items[pupId].s = state; + + pupOpts.items[pupId].p = pupId; + pupOpts.items[pupId].ph = pufId; + } + }; + + /** + * Get public upload page data + * @param {Array} pupList PUP id list + * @param {Boolean} isPuh Is 'puh' action packet or not + * @param {Object} cb Callback + */ + var get = function pupGet(pupList) { + if (d) { + console.log('pup.get'); + } + var cb = function(res) { + if (res < 0) { + if (d) { + console.warn('pup.get failed'); + } + } + else { + add(res); + if (d) { + console.log('pup.get success ', JSON.stringify(res)); + } + } + }; + + for (var i = pupList.length; i--;) { + var req = Object.assign({}, pupOpts.req.get); + req.p = pupList[i].p; + + // Get pup data + api_req(req, { + callback: cb + }); + } + }; + + /** + * Set public upload page data + * @param {String} nodeId Folder id + */ + var create = function pupCreate(nodeId) { + if (d) { + console.log('pup.create'); + } + var req = Object.assign({}, pupOpts.req.set); + var data = Object.assign({}, pupOpts.req.data); + + if (nodeId) { + data.name = u_attr.name; + data.email = u_attr.email; + data.msg = puf.items[nodeId].fn;// Folder name instead of custom msg + + req.ph = puf.items[nodeId].ph; + req.d = Object.assign({}, data); + + api_req(req, { + callback: function (res) { + if (res.length === 11) {// Length of PUP handle + if (d) { + console.log('pup created ', res); + } + } + else { + closeDialog(); + msgDialog('warninga', l[135], l[47], api_strerror(res)); + if (d) { + console.error('pupSet failed ', api_strerror(res)); + } + } + } + }); + } + else { + if (d) { + console.error('pup.create: Public upload page: pufHandle is not provided.'); + } + } + }; + + /** + * Remove from indexedDb and pup.opts.items + * @param {String} handle PUP handle + */ + var _del = function _pupDel(handle) { + if (d) { + console.log('pup._del'); + } + var obj = puf.items; + + if (fmdb && !pfkey) { + fmdb.del('pup', handle); + } + + if (pupOpts.items[handle]) { + delete pupOpts.items[handle]; + } + + // Remove from puf.items + for (var key in obj) { + if (obj.hasOwnProperty(key) && obj[key].p === handle) { + if (fmdb && !pfkey) { + if (puf.items[key]) { + if (puf.callbacks[key] && puf.callbacks[key]['del']) { + loadingDialog.hide(); + puf.callbacks[key]['del'](); + delete puf.callbacks[key]['del']; + } + fmdb.del('puf', obj[key].ph); + delete puf.items[key]; + } + } + + break; + } + } + }; + + /** + * Remove public upload page PUP + * @param {String} handle Public upload page handle + */ + var remove = function pupRemove(handle) { + if (d) { + console.log('pup.remove'); + } + + if (handle) { + var req = Object.assign({}, pupOpts.req.remove); + req.p = handle;// pup handle + api_req(req, { + callback: function (res) { + if (res < 0) { + msgDialog('warninga', l[135], l[47], api_strerror(res)); + if (d) { + console.error('pupRemove failed ', res); + } + } + else { + if (d) { + console.log('pup.remove: Public upload page state change result: ', res); + } + } + } + }); + } + else { + if (d) { + console.warn('Public upload page state change: Handle or state are not provided.'); + } + loadingDialog.hide(); + } + }; + + /** + * Lists all non-deleted user's public upload pages + * Update PUP and PUF with received data, called wh + * 'uph' AP is received + * @param {Boolean} toRemove To remove or not, listed PUPs + */ + var list = function pupList(toRemove) { + if (d) { + console.log('pup.list'); + } + + var promise = new MegaPromise(); + var req = pupOpts.req.list; + + api_req(req, { + callback: function (res) { + if (res.length) { + promise.resolve(res); + if (toRemove) { + for (var i = res.length; i--;) { + var tmp = Object.assign({}, res[i]); + pup.remove(tmp.p); + } + } + if (d) { + console.table(res); + } + } + else { + promise.reject(); + if (d) { + console.log('pup.list: There is no PUPs available'); + } + } + } + }); + return promise; + }; + + /** + * Check staus of public upload page for given handle + * For owner will return pages with state 1 and above, disabled and enabled + * For non-logged user will return pages with state 2 only, enabled + * @param {String} handle Public upload page handle + */ + var check = function pupCheck(handle) { + if (d) { + console.log('pup.check'); + } + + delay('megadrop.log', eventlog.bind(null, 99775)); // open upload page - general + var req = pupOpts.req.get; + + loadingDialog.show(); + req.p = handle; + + api_req(req, { + handle: handle, + callback: function (res) { + if (!$.isEmptyObject(res)) { + wopts.pufHandle = res.ph || res[0].ph; + wopts.ownerHandle = res.u || res[0].u; + wopts.pageData = res.d || res[0].d; + wopts.pupHandle = handle; + if (d) { + console.log('Check is PUP active and return related handles: ', JSON.stringify(res)); + } + + mBroadcaster.sendMessage('MEGAdrop:checked'); + } + else if (res !== EOVERQUOTA) { + mBroadcaster.sendMessage('MEGAdrop:disabled'); + } + else {// Overquota + mBroadcaster.sendMessage('MEGAdrop:overquota'); + } + loadingDialog.hide(); + } + }); + }; + + /** + * Get RSA pubk for PUP owner + * @param {String} handle Owner handle + */ + var pubk = function pupPubk(handle) { + if (d) { + console.log('pup.pubk'); + } + + wopts.req.owner.u = handle; + api_req(wopts.req.owner, { + callback: function (res) { + if (res < 0) {// Get owner privk failed + msgDialog('warninga', l[135], l[47], api_strerror(res)); + if (d) { + console.error('pubk: Failed to retreive RSA pubk for an owner - ', handle); + } + } + else { + wopts.pubk = res.pubk; + mBroadcaster.sendMessage('MEGAdrop:initialized'); + } + } + }); + }; + + /** + * @param {Array} data Read from indexedDb PUP + */ + var processDb = function pupProcessDb(data) { + if (d) { + console.log('pup.processDb'); + } + var pup; + var pupHandle = ''; + + for (var i in data) { + if (data.hasOwnProperty(i)) { + pup = data[i]; + pupHandle = pup.p; + + if (!pupOpts.items[pupHandle]) { + pupOpts.items[pupHandle] = {}; + } + + pupOpts.items[pupHandle] = pup; + } + } + }; + + /** + * Updates folder name for PUP in cache and db + * @param {String} handle PUP id + * @param {String} value New value + */ + var updateFolderName = function pupUpdateFolderName(handle, value) { + if (d) { + console.log('pup.updateFolderName'); + } + var param = 'fn'; + var item = pupOpts.items[handle]; + item[param] = value; + + if (fmdb && !pfkey) { + fmdb.add('pup', { p: item.p, + d: { p: item.p, + ph: item.ph, + name: item.name, + email: item.email, + s: item.s, + msg: item.msg, + fn: value, + h: item.h + } + }); + } + }; + + /** + * Handle API action packet 'pup' + * @param {Object} ap 'pup' API AP + */ + var processPUP = function pupProcessPUP(ap) { + if (d) { + console.log('pup.processPUP'); + } + + var state = 0; + var folderId = ''; + var pupId = ''; + var delayHide = false; + + var pupAddAndUpdate = function _pupAddAndUpdate(item) { + add(item); + folderId = pupOpts.items[pupId].h; + + // In case that pup data is updated remotely + if (item.u) { + onRename(folderId, M.d[folderId].name); + } + settings.add(pupId, folderId); + }; + + var onPuhProcessed = function _onPuhProcessed(item) { + pupAddAndUpdate(item); + + // Show dialog if this is local packet and not update action + if (is_mobile) { + ui.mobileWidgetDialog(pupId); + } + else { + ui.widgetDialog(pupId); + } + }; + + var afterPuh = function(item) { + + if (requesti === item.i && !item.u) { + onPuhProcessed(item); + } + else { + pupAddAndUpdate(item); + } + }; + + for (var i = ap.length; i--;) { + var item = Object.assign({}, ap[i]); + pupId = item.p; + pufHandle = item.ph; + state = item.s ? item.s : 0; + + if (state === 2) { // Active PUP + + if (item.u) { + pupAddAndUpdate(item); + } + else { + // If this is create or delete, waiting for puh to be processed + mBroadcaster.onceAfterReady('MEGAdrop:puhProcessed_' + pufHandle, afterPuh.bind(this, item)); + } + } + else { // Inactive PUP + if (pupOpts.items[pupId]) { + folderId = pupOpts.items[pupId].h; + _del(pupId); + if (puf.callbacks[folderId] && puf.callbacks[folderId]['del']) { + delayHide = true; + } + settings.remove(pupId, folderId); + } + } + } + if (!delayHide){ + loadingDialog.hide(); + } + }; + + /** + * Update PUP data + * @param {String} id Node id + * @param {String} type 'msg' folder name, 'name' full name, 'email' email + * @param {String} value + */ + var update = function pupUpdate(id, type, value) { + + if (d) { + console.log('pup.update'); + } + + // Same folder name, exit + if (!fminitialized || type === 'msg' && value === puf.items[id].fn) { + return false; + } + var req = Object.assign({}, pupOpts.req.update); + var pupId = puf.items[id].p; + + req.d.msg = puf.items[id].fn; + req.d.email = u_attr.email; + req.d.name = u_attr.name; + req.d[type] = value;// Update param with new value + + if (value) { + req.p = pupId; + api_req(req, { + callback: function (res) { + if (res < 0) { + msgDialog('warninga', l[135], l[47], api_strerror(res)); + if (d) { + console.error('pup.update failed ', res, type, value); + } + } + else { + if (d) { + console.log('pup.update ', res); + } + } + } + }); + } + else { + if (d) { + console.error('pup.update missing value', type, value); + } + } + }; + + return { + pageReq: pupOpts.req, + add: add, + get: get, + list: list, + pubk: pubk, + check: check, + create: create, + update: update, + remove: remove, + processPUP: processPUP, + items: pupOpts.items, + processDb: processDb, + updateFolderName: updateFolderName + }; + + }(widgetOpts));// END mega.megadrop.pup + + // Main Menu -> My Account -> Widget + settings = (function settings(wopts) { + var settingsOpts = { + initialized: false, + card: { + wrapperClass: '.js-data-table-megadrop tbody', + code: '', + url: '', + expanded: []// Handle of expanded card + }, + }; + + var isInit = function settingsIsInit() { + return settingsOpts.initialized; + }; + + var setInitialized = function settingsSetInitialized(value) { + settingsOpts.initialized = value; + }; + + var _getPath = function _settingsGetPath(nodeHandle) { + var path = M.getPath(nodeHandle).map(function(h, k, arr) { + var title = h === M.RootID ? l[1687] : M.d[h].name; + var arrowHtml = ''; + + if (k !== 0) { + arrowHtml = ''; + } + + var html = title ? '
                ' + + '' + + escapeHTML(title) + + '' + arrowHtml + '
                ' : ''; + + return html; + + }).reverse().join(''); + + return path; + }; + + var drawPupCard = function settingsDrawPupCard(pupHandle) { + + if (M.currentdirid !== 'account/transfers' || !pupHandle || $('#pup_' + pupHandle).length) { + return false; + } + + var item = pup.items[pupHandle]; + var name = item.fn; + var nodeHandle = item.h; + var handle = item.p; + var pupPath = _getPath(nodeHandle); + var $domElem = $('#megadrop-row-template').clone(); + var url = ui.generateUrl(handle); + var code = ui.generateCode(handle); + settingsOpts.card.code = code; + settingsOpts.card.url = url; + + $domElem.attr('id', 'pup_' + handle); + $domElem.removeClass('hidden'); + $('.settings-breadcrumbs', $domElem).safeHTML(pupPath); + $('.megafolder-name', $domElem).text(name); + $('.widget-code-wrapper.widget-url', $domElem).text(url); + $('.embed-link .widget-code-wrapper', $domElem).text(code); + + $(settingsOpts.card.wrapperClass).append($domElem); + }; + + /** + * WS_ stands for Widget Settings + */ + var _eventListeners = function _settingsEventListeners() { + + var $wrapper = $(settingsOpts.card.wrapperClass); + + // Click on PUP basic info, show full PUP informations + $('.megadrop-row', $wrapper).rebind('click', function(e) { + + var $this = $(this); + + if ($this.is('.closed') && !$(e.target).is('.toggle')) { + $('.toggle', $this).trigger('click.toggle'); + } + }); + + // Click on minimise of PUP expanded informations, replace it with basic info .widget-dialog + $('.megadrop-icon.toggle', $wrapper).rebind('click.toggle', function(e) { + + e.stopPropagation(); + + var $this = $(this); + var $row = $this.closest('.megadrop-row'); + var $accountSection = $('.fm-right-account-block:visible', 'body'); + + $this.removeClass('icon-arrow-down icon-arrow-up'); + + if ($row.hasClass('closed')) { + $row.removeClass('closed').addClass('expanded'); + $this.attr('data-simpletip', l[148]).trigger('simpletipUpdated') + .addClass('icon-arrow-up'); + } + else { + $row.addClass('closed').removeClass('expanded'); + $this.attr('data-simpletip', l[20172]).trigger('simpletipUpdated') + .addClass('icon-arrow-down'); + } + + if ($accountSection.length && $accountSection.is('.ps')) { + Ps.update($accountSection[0]); + $accountSection.scrollTop( + $accountSection.scrollTop() + $row.offset().top + - $row.outerHeight() - $accountSection.offset().top + ); + } + }); + + // Remove PUP + $('.megadrop-icon.delete', $wrapper).rebind('click', function(e) { + e.stopPropagation(); + + msgDialog( + 'confirmation', + '', + l.megadrop_delete_confirm_title, + l.megadrop_delete_confirm_text, + (e) => { + if (e) { + var id = $(this).parents('.megadrop-row').attr('id'); + var pupHandle = id.replace('pup_', ''); + var nodeHandle = pup.items[pupHandle].h; + puf.remove([nodeHandle]); + } + } + ); + }); + + // Widget expanded go to folder + $('.settings-breadcrumbs .item a', $wrapper).rebind('click.openFolder', function() { + var nodeId = $(this).data('node'); + + M.openFolder(nodeId, true); + + return false; + }); + + // Widget expanded embed link tab + $('.tab-embed-link', $wrapper).rebind('click', function () { + + // Find first parent with id attrbute starting with ew_ + var $this = $(this); + var $parent = $this.parents('.megadrop-row'); + + $('.tab', $parent).removeClass('active'); + $this.addClass('active'); + $('.embed-link', $parent).removeClass('hidden'); + $('.url-link', $parent).addClass('hidden'); + }); + + // Widget expanded url tab + $('.tab-url-link', $wrapper).rebind('click', function () { + + // Find first parent with id attrbute starting with ew_ + var $this = $(this); + var $parent = $this.parents('.megadrop-row'); + + $('.tab', $parent).removeClass('active'); + $this.addClass('active'); + $('.embed-link', $parent).addClass('hidden'); + $('.url-link', $parent).removeClass('hidden'); + }); + + // Widget expanded copy link + $('.copy-url', $wrapper).rebind('click', function() { + + var url = $('.url-link .widget-url', $(this).parents('.url-link')).text(); + + copyToClipboard(url, l[17619]); + }); + + // Widget expanded copy source code + $('.copy-code', $wrapper).rebind('click', function() { + + var code = $('.embed-code .widget-code-wrapper', $(this).parents('.embed-link')).text(); + + copyToClipboard(code, l[17620]); + }); + + // Widget expanded Preview upload page + $('.preview-widget', $wrapper).rebind('click', function () { + + var url = $('.url-link .widget-url', $(this).parents('.widget-dialog.expanded-widget')).text(); + + winOpen(url); + }); + }; + + /** + * Draw all public upload pages, show path and PUP name + * @param {Function} cb Callback + */ + var drawPups = function settingsDrawPups() { + if (d) { + console.log('settings.drawPups'); + } + var list = Object.values(pup.items); + var handleList = list.map(function(pup) { + return pup.h; + }); + var item = {}; + + $(settingsOpts.card.wrapperClass).empty(); + + if (!$(settingsOpts.card.wrapperClass).find('.megadrop-header').length) { + var $headElem = $('#megadrop-header-template').clone().removeAttr('id'); + $(settingsOpts.card.wrapperClass).append($headElem); + if (isEmptyActivePUP()) { + $(settingsOpts.card.wrapperClass) + .append('' + l[20139] + ''); + } + } + + var promise = new MegaPromise(); + + dbfetch.geta(handleList).always(function() { + + // Sort the MEGADrop folders by name alphabetically before rendering + list.sort(function (a, b) { + return a.fn.localeCompare(b.fn); + }); + + for (var g = 0; g < list.length; g++) { + item = list[g]; + if (item.p && item.s === 2) { + drawPupCard(item.p); + } + else { + if (d) { + console.warn('settings.drawPups: non-active PUP: ', item.fn); + } + } + } + promise.resolve(); + }); + + return promise; + }; + + /** + * Handles settings->widget elements + */ + var widget = function settingsWidget() { + loadingDialog.show(); + + drawPups().always(_eventListeners.bind(null)); + setInitialized(true); + + loadingDialog.hide(); + }; + + /** + * Remove upload page card and expanded card on PUF/PUP removal + * @param {String} pupHandle Public upload page handle + * @param {String} nodeHandle Folder id + */ + var remove = function settingsRemove(pupHandle, nodeHandle) { + if (d) { + console.log('settings.remove'); + } + + if (M.currentdirid === "account/transfers") { + $('#pup_' + pupHandle).remove();// Remove widget-dialog + + // Display "No MEGAdrop folders" if the list is empty + if (isEmptyActivePUP()) { + $(settingsOpts.card.wrapperClass) + .append('' + l[20139] + ''); + } + } + ui.nodeIcon(nodeHandle); + }; + + /** + * Add newly created widget to settings tab + * @param {String} pupHandle PUP id + * @param {String} nodeHandle Folder id + */ + var add = function settingsAdd(pupHandle, nodeHandle) { + if (d) { + console.log('settings.add'); + } + + if (pupHandle && !$('#pup_' + pupHandle).length) { + ui.nodeIcon(nodeHandle, true); + drawPupCard(pupHandle); + _eventListeners(); + + var $emptyGrid = $('.data-table-empty', settingsOpts.card.wrapperClass); + + if ($emptyGrid.length) { + $emptyGrid.parent('tr').remove(); + } + } + }; + + var updateOnRename = function settingsUpdateOnRename(handle, name) { + var pupHandle = puf.items[handle].p; + var $card = $('#pup_' + pupHandle); + var $expCard = $('#ew_' + pupHandle); + var path = $card.find('.widget-location-url span').text(); + var newPath = path.substring(0, path.lastIndexOf('/') + 1) + name; + + // PUP name change which is the same as folder name for now + $card.find('.widget-name span').text(name); + $expCard.find('.widget-name span').text(name); + + // Change Cloud drive path + $card.find('.widget-location-url span').text(newPath); + $expCard.find('.widget-location-url span').text(newPath); + }; + + return { + add: add, + remove: remove, + widget: widget, + updateOnRename: updateOnRename, + drawPupCard: drawPupCard + }; + }(widgetOpts));// END mega.megadrop.settings + + /** + * Widget UI + * @param {Object} wopts mega.widget config options + */ + ui = (function(wopts) { + var uiOpts = { + dlg: { + initialized: false, + cached: false, + create: { + $: {}, + skip: false, + visible: false, + class: '.mega-dialog.create-widget-info-dialog' + }, + widget: { + $: {}, + url: '', + code: '', + visible: false, + class: '.mega-dialog.widget-dialog' + } + }, + widgetLink: '', + widgetCode: '', + window: { + totalStat: { + total: 0, + curr: 0, + totalPerc: 0, + speed: 0 + }, + queueItems: { + number: 0 + }, + $: {}, + class: '.widget-upload', + queueItemClass: '.wu-queue-item', + queueClass: '.wu-queue', + cached: false + } + }; + + var generateCode = function uiGenerateCode(pupHandle) { + var code = uiOpts.widgetCode; + var width = 0; + var height = 0; + var theme = $('#rad22_div').hasClass('radioOn') ? 'l' : 'd'; + var link = getBaseUrl() + '/drop#!' + pupHandle + '!' + theme + '!' + lang; + + var source = code + .replace('%w', width > 0 ? width : 250) + .replace('%h', height > 0 ? height : 54) + .replace('%s', link); + source = source.replace('/[\t\n\s]+/g', '');// Minimize + + return source; + }; + + var _dlgEventListeners = function _uiDlgEventListeners() { + + // Create info widget dialog 'x' + $(uiOpts.dlg.create.class + ' button.js-close').rebind('click.CWD_close', function() { + closeDialog(); + }); + + /*** '.create-info-widget-dialog */ + // Create info widget dialog checkbox + $(uiOpts.dlg.create.class + ' .CWD_cb').rebind('click.CWD_cb', function () { + if (uiOpts.dlg.create.$.checkboxDiv.hasClass('checkboxOn') + || uiOpts.dlg.create.$.checkboxInput.hasClass('checkboxOn')) { + uiOpts.dlg.create.$.checkboxDiv.removeClass('checkboxOn').addClass('checkboxOff'); + uiOpts.dlg.create.$.checkboxInput.removeClass('checkboxOn').addClass('checkboxOff'); + } + else { + uiOpts.dlg.create.$.checkboxDiv.removeClass('checkboxOff').addClass('checkboxOn'); + uiOpts.dlg.create.$.checkboxInput.removeClass('checkboxOff').addClass('checkboxOn'); + } + }); + + // Create info widget create button + $(uiOpts.dlg.create.class + ' .widget-create-button').rebind('click.CWD_create', function () { + if (uiOpts.dlg.create.$.checkboxDiv.hasClass('checkboxOn') + || uiOpts.dlg.create.$.checkboxInput.hasClass('checkboxOn')) { + uiOpts.dlg.create.skip = true; + mega.config.set('sdss', 1); + } + closeDialog(); + + puf.create($.selected[0]); + }); + /*** END '.create-info-widget-dialog */ + + /*** '.widget-dialog' */ + // Widget dialog close + $([ + uiOpts.dlg.widget.class + ' button.js-close', + uiOpts.dlg.widget.class + ' .close-button' + ]).rebind('click.WD_close', function () { + closeDialog(); + }); + + // Widget dialog embed link tab + $(uiOpts.dlg.widget.class + ' .tab-embed-link').rebind('click.WD_embed_tab', function () { + uiOpts.dlg.widget.$.tabEmbed.addClass('active'); + uiOpts.dlg.widget.$.tabUrl.removeClass('active'); + uiOpts.dlg.widget.$.cpBtn + .removeClass('code url') + .addClass('code') + .find('span').safeHTML(l[17408]); + uiOpts.dlg.widget.$.embedForm.removeClass('hidden'); + uiOpts.dlg.widget.$.urlForm.addClass('hidden'); + }); + + // Widget dialog url tab + $(uiOpts.dlg.widget.class + ' .tab-url-link').rebind('click.WD_url_tab', function () { + uiOpts.dlg.widget.$.tabEmbed.removeClass('active'); + uiOpts.dlg.widget.$.tabUrl.addClass('active'); + uiOpts.dlg.widget.$.cpBtn + .removeClass('code url') + .addClass('url') + .find('span').safeHTML(l[17835]); + uiOpts.dlg.widget.$.embedForm.addClass('hidden'); + uiOpts.dlg.widget.$.urlForm.removeClass('hidden'); + }); + + // Widget dialog light theme + $('.left-button').rebind('click', function () { + $('#rad23_div').removeClass('radioOn').addClass('radioOff'); + $('#rad22_div').addClass('radioOn'); + $('.right-button').removeClass('active'); + $(this).addClass('active'); + _widgetDlgContent(pup.items[uiOpts.dlg.widget.url.substr(-11)].h); + }); + + // Widget dialog dark theme + $('.right-button').rebind('click', function () { + $('#rad22_div').removeClass('radioOn').addClass('radioOff'); + $('#rad23_div').addClass('radioOn'); + $('.left-button').removeClass('active'); + $(this).addClass('active'); + _widgetDlgContent(pup.items[uiOpts.dlg.widget.url.substr(-11)].h); + }); + + // Widget dialog copy url + // NOTE: document.execCommand('copy') calls must take place as a direct result of a user action + $(uiOpts.dlg.widget.class + ' .copy-widget-code').rebind('click.WD_copy', function() { + if ($(this).hasClass('code')) { + copyToClipboard(uiOpts.dlg.widget.code, l[17620]); + } + else { + copyToClipboard(uiOpts.dlg.widget.url2 || uiOpts.dlg.widget.url, l[17619]); + } + }); + + // Dialog Preview upload page + $(uiOpts.dlg.widget.class + ' .preview-widget').rebind('click.WD_preview', function () { + winOpen(uiOpts.dlg.widget.url); + }); + /*** END '.widget-dialog' ***/ + }; + + var initDialogs = function uiInitDialogs() { + + // Widget Info Dialog + uiOpts.dlg.create.$ = $(uiOpts.dlg.create.class); + uiOpts.dlg.create.$.title = uiOpts.dlg.create.$.find('header h2'); + uiOpts.dlg.create.$.checkboxDiv = uiOpts.dlg.create.$.find('.CWD_cb'); + uiOpts.dlg.create.$.checkboxInput = uiOpts.dlg.create.$.find('.CWD_cb input'); + uiOpts.dlg.create.$.createButton = uiOpts.dlg.create.$.find('.widget-create-button'); + uiOpts.dlg.create.$.createMsg = uiOpts.dlg.create.$.find('.fm-widget-introduction'); + uiOpts.dlg.create.$.manageMsg = uiOpts.dlg.create.$.find('.fm-widget-manage'); + + // @todo remove me in 4 months. + if (localStorage.skipPUFCreationInfo) { + delete localStorage.skipPUFCreationInfo; + mega.config.set('sdss', 1); + } + + // Check Skip Drop Splash Screen flag + uiOpts.dlg.create.skip = mega.config.get('sdss'); + + // Widget Dialog + uiOpts.dlg.widget.$ = $(uiOpts.dlg.widget.class); + uiOpts.dlg.widget.$.title = uiOpts.dlg.widget.$.find('header h2'); + uiOpts.dlg.widget.$.closeButton = uiOpts.dlg.widget.$.find('.close-button'); + uiOpts.dlg.widget.$.url = uiOpts.dlg.widget.$.find('.widget-url'); + uiOpts.dlg.widget.$.code = uiOpts.dlg.widget.$.find('.embed-link .widget-code-wrapper'); + uiOpts.dlg.widget.$.tabEmbed = uiOpts.dlg.widget.$.find('.tab-embed-link'); + uiOpts.dlg.widget.$.cpBtn = uiOpts.dlg.widget.$.find('.copy-widget-code'); + uiOpts.dlg.widget.$.tabUrl = uiOpts.dlg.widget.$.find('.tab-url-link'); + uiOpts.dlg.widget.$.embedForm = uiOpts.dlg.widget.$.find('.embed-link'); + uiOpts.dlg.widget.$.urlForm = uiOpts.dlg.widget.$.find('.url-link'); + + uiOpts.dlg.cached = true; + + _dlgEventListeners(); + }; + + var infoDialog = function uiInfoDialog(handle, creation) { + var name = M.d[handle].name; + + uiOpts.dlg.create.$.title.text(name); + uiOpts.dlg.create.$.checkboxDiv.removeClass('checkboxOn').addClass('checkboxOff'); + uiOpts.dlg.create.$.checkboxInput.removeClass('checkboxOn').addClass('checkboxOff'); + + if (creation) { + uiOpts.dlg.create.$.createMsg.removeClass('hidden'); + uiOpts.dlg.create.$.manageMsg.addClass('hidden'); + uiOpts.dlg.create.$.createButton.find('span').text(l[158]); + } + else { + uiOpts.dlg.create.$.createMsg.addClass('hidden'); + uiOpts.dlg.create.$.manageMsg.removeClass('hidden'); + uiOpts.dlg.create.$.createButton.find('span').text(l[17490]); + } + + M.safeShowDialog('megadrop.info-dialog', uiOpts.dlg.create.$[0]); + }; + + var mobileInfoDialog = function uiMobileInfoDialog(handle, creation) { + + var name = M.d[handle].name; + var $overlay = $('#mobile-ui-megadrop-info'); + + $('.wu-folder-name-text', $overlay).text(name); + + if (creation) { + $('.wu-title-text', $overlay).text(l[17412]); + $('button.wu-btn span', $overlay).text(l[158]); + } + else { + $('.wu-title-text', $overlay).text(l[17399]); + $('button.wu-btn span', $overlay).text(l[17490]); + } + + $overlay.removeClass('hidden'); + + mobile.initOverlayPopstateHandler($overlay); + + $('.wu-btn').rebind('tap', function() { + puf.create(handle); + $overlay.addClass('hidden'); + }); + + $('.cancel.text-button').rebind('tap', function() { + $overlay.addClass('hidden'); + }); + }; + + var generateUrl = function uiGenerateUrl(pupHandle) { + return getAppBaseUrl() + (is_extension ? '#' : '/') + 'megadrop/' + pupHandle; + }; + + var _widgetDlgContent = function _uiWidgetDlgContent(handle) { + var pupHandle = puf.items[handle].p; + + if (pupHandle) { + uiOpts.dlg.widget.url = generateUrl(pupHandle); + uiOpts.dlg.widget.url2 = getBaseUrl() + '/megadrop/' + pupHandle; + uiOpts.dlg.widget.code = generateCode(pupHandle); + uiOpts.dlg.widget.$.url.text(uiOpts.dlg.widget.url2); + uiOpts.dlg.widget.$.code.text(uiOpts.dlg.widget.code); + } + + }; + + var widgetDialog = function uiWidgetDialog(pupHandle) { + var handle = pup.items[pupHandle].h; + + // Is there a related public upload page handle + if (puf.items[handle] && puf.items[handle].p) { + _widgetDlgContent(handle); + + // Reset active tab + uiOpts.dlg.widget.$.find('.tab-url-link').click(); + M.safeShowDialog('megadrop-dialog', uiOpts.dlg.widget.$[0]); + } + loadingDialog.hide(); + }; + + var mobileWidgetDialog = function uiMobileWidgetDialog(pupHandle) { + + var nodeHandle = pup.items[pupHandle].h; + + // Is there a related public upload page handle + if (puf.items[nodeHandle] && puf.items[nodeHandle].p) { + + // Lets borrow link from public link ui as it is using same structure + var $overlay = mobile.linkOverlay.$overlay = $('#mobile-ui-copy-link').addClass('megadrop'); + + // Get initial overlay details + var node = M.d[nodeHandle]; + var fileName = node.name; + var fileIconName = fileIcon(node); + var fileIconPath = mobile.imagePath + fileIconName + '.png'; + + // Set file name, size and image + $('.filename', $overlay).text(fileName); + $('.filesize', $overlay).text(l[17410]); + $('.filetype-img', $overlay).attr('src', fileIconPath); + + mobile.initOverlayPopstateHandler($overlay); + + var $linkField = $('#mobile-public-link', $overlay); + + $linkField.val(getBaseUrl() + '/megadrop/' + pupHandle); + $linkField.css('height', '48px'); + + // Initialise the buttons + mobile.linkOverlay.initCloseButton(); + + $('.copy', $overlay).rebind('tap', function() { + + mobile.linkOverlay.copyPublicLink(nodeHandle); + + return false; + }); + + $('.copy', $overlay).removeClass('disabled'); + + var removeMDClass = function() { + + $overlay.removeClass('megadrop'); + $linkField.val(''); + $('button.js-close', $overlay).off('tap.removeMDClass'); + $('.text-button', $overlay).off('tap.removeMDClass'); + }; + + // Some extra binding for Megadrop + $('button.js-close', $overlay).rebind('tap.removeMDClass', removeMDClass); + $('.text-button', $overlay).rebind('tap.removeMDClass', removeMDClass); + + // Disable scrolling of the file manager in the background to fix a bug on iOS Safari + $('.mobile.file-manager-block').addClass('disable-scroll'); + + // Show the overlay + $overlay.removeClass('hidden').addClass('overlay'); + } + + loadingDialog.hide(); + }; + + const nodeIconMobile = function uiNodeIconMobile(nodeHandle) { + + const $node = $(`#${nodeHandle}`, '.mobile.file-manager-block'); + const iconName = fileIcon(M.d[nodeHandle]); + + $('.regular-folder', $node).attr('src',`${mobile.imagePath + iconName}.png`); + }; + + /** + * Check is widget exists for folder and render or remove appropriate icon + * @param {String} nodeHandle Folder handle + * @param {Boolean} render To draw or to delete + */ + const nodeIcon = function uiNodeIcon(nodeHandle, render) { + + if (is_mobile) { + + nodeIconMobile(nodeHandle, render); + return false; + } + + var icon = 'puf-folder'; + var target; + + if (render) { + + target = document.getElementById(nodeHandle); + + if (target) { + // Update right panel selected node with appropriate icon + target = target.querySelector(M.viewmode ? '.block-view-file-type' : '.transfer-filetype-icon'); + + if (target) { + target.classList.add(icon); + } + } + + // Left panel + target = document.querySelector('#treea_' + nodeHandle + ' .nw-fm-tree-folder'); + + if (target) { + target.classList.add(icon); + } + } + else { + target = document.getElementById(nodeHandle); + + if (target) { + // Update right panel selected node with appropriate icon + target = target.querySelector(M.viewmode ? '.block-view-file-type' : '.transfer-filetype-icon'); + + if (target) { + target.classList.remove(icon); + } + } + + // Left panel + target = document.querySelector('#treea_' + nodeHandle + ' .nw-fm-tree-folder'); + + if (target) { + target.classList.remove(icon); + } + } + }; + + /** + * Should create widget info dialog be skipped + */ + var skip = function uiSkip() { + return uiOpts.dlg.create.skip; + }; + + var _addToTotalStat = function _uiAddToTotalStat(size) { + var $totStat = uiOpts.window.$; + var tStat = uiOpts.window.totalStat; + var sData = {}; + + tStat.total += size; + sData = numOfBytes(tStat.total, 1); + $totStat.total.text(sData.size + ' ' + sData.unit); + }; + + /** + * Caching dom item + * @param {Stringf} id Upload queue item id e.g. '#md_ul_8001' + */ + var _cacheUploadItem = function _uiCacheUploadItem(id) { + var item = uiOpts.window.queueItems[id]; + + // Cache DOM elements for item + if (!item) { + var $tmp = $(id); + item = uiOpts.window.queueItems[id] = {}; + item.$ = {}; + item.$.name = $tmp.find('.wu-queue-item-name'); + item.$.size = $tmp.find('.wu-queue-item-size'); + item.$.curr = $tmp.find('.wu-queue-item-curr'); + item.$.status = $tmp.find('.wu-queue-item-status'); + item.ulSize = 0;// Amount of uploaded data + } + + return item; + }; + + /** + * Inserts new upload item into queue list + * @param {String} id Upload item id + * @param {String} name File name with extension + * @param {String} status Item upload status + * @param {integer} size File size in bytes + */ + var addItem = function uiAddItem(id, name, status, size) { + var sData = numOfBytes(size, 1); + var itemsNum = uiOpts.window.queueItems.number += 1; + var prefix = is_mobile ? 'md_ul_' : 'ul_'; + var $tmpl = $('#md_ultmpl').clone().removeClass('hidden').attr('id', prefix + id); + const $scrollBlock = $(`${uiOpts.window.class} ${uiOpts.window.queueClass}`); + $tmpl.find('.wu-queue-item-name').text(str_mtrunc(name, 37)); + $tmpl.find('.wu-queue-item-size').text(' | ' + sData.size + ' ' + sData.unit); + $tmpl.find('.wu-queue-item-status').text(status); + + $scrollBlock.prepend($tmpl); + + $('.widget-upload .wu-upload-form').removeClass('hidden'); + $('.widget-upload .wu-empty-upload').addClass('hidden'); + + _cacheUploadItem('#' + prefix + id); + + if (!is_mobile) { + _addToTotalStat(size); + initPerfectScrollbar($scrollBlock); + } + }; + + var updateItem = function uiUpdateItem(id, bps, time, perc, bl) { + var retime = secondsToTimeShort(time); + var speed = numOfBytes(bps, 1, true); + var prefix = is_mobile ? 'md_ul_' : 'ul_'; + var ulSize = uiOpts.window.queueItems['#' + prefix + id].ulSize; + var $item = _cacheUploadItem('#' + prefix + id); + + // Update specific upload item + if (retime) { + $item.$.status.text(retime); + } + else { + $item.$.status.text('-'); + } + ulSize = bl; + $item.$.curr.text(numOfBytes(ulSize, 1).size); + + $item.$.curr.removeClass('hidden'); + $item.$.size.removeClass('hidden'); + + if (parseFloat(speed.size)) { + uiOpts.window.$.totalSpeed.text(speed.size + ' ' + speed.unit); + } + }; + + /** + * Updates widget upload window data + */ + var updateData = function uiUpdateData() { + var data = wopts.pageData; + + // Widget upload window + uiOpts.window.$ = $(uiOpts.window.class); + + // .wu-data + uiOpts.window.$.find('.wu-name-text').text(data.name); + uiOpts.window.$.find('.wu-folder-name-text').text(data.msg); + }; + + // Widget upload window event listeners + var _winEventListeners = function _uiWinEventListeners() { + + if (is_mobile) { + + var $mobiledrop = $('.megadrop-upload'); + + $('.widget-upload .wu-items, .widget-upload .wu-btn', $mobiledrop) + .rebind('tap.widget_upload', function() { + $('#fileselect5').click(); + }); + + $('.fm-dialog-overlay', $mobiledrop).rebind('tap.widget_window', function(e) { + closeDialog(e); + }); + } + else { + $('.widget-upload .wu-items,.widget-upload .wu-btn').rebind('click.widget_upload', function() { + $('#fileselect5').click(); + }); + + $('.wu-lang').rebind('click.widget_change_lang', function() { + langDialog.show(); + }); + + $('.fm-dialog-overlay').rebind('click.widget_window', function(e) { + closeDialog(e); + }); + + $(window).rebind('keyup.widget_esc', function(e) { + if (e.keyCode === 27) {// ESC key pressed + closeDialog(e); + } + }); + } + }; + + var cacheWindowDOM = function uiCacheWindowDOM() { + // Widget upload window + uiOpts.window.$ = $(uiOpts.window.class); + + // .wu-data + uiOpts.window.$.name = uiOpts.window.$.find('.wu-name'); + uiOpts.window.$.email = uiOpts.window.$.find('.wu-email'); + uiOpts.window.$.msg = uiOpts.window.$.find('.wu-msg'); + + // .wu-total-stat + uiOpts.window.$.total = uiOpts.window.$.find('.wu-total-value'); + uiOpts.window.$.curr = uiOpts.window.$.find('.wu-curr-value'); + uiOpts.window.$.totalPerc = uiOpts.window.$.find('.wu-total-perc-value'); + uiOpts.window.$.totalSpeed = uiOpts.window.$.find('.wu-total-speed-value'); + + uiOpts.window.cached = true; + + _winEventListeners(); + $('.wu-change-lang').text(lang); + }; + + var updateTotalProgress = function uiUpdateTotalProgress(transfered) { + var $totStat = uiOpts.window.$;// cached DOM elements + var tillNow = uiOpts.window.totalStat.curr; + var curr = numOfBytes(transfered + tillNow, 1); + var tot = numOfBytes(uiOpts.window.totalStat.total, 1); + var perc = Math.floor((transfered + tillNow) / uiOpts.window.totalStat.total * 100); + + if (curr.unit === tot.unit) { + $totStat.curr.text(curr.size); + } + else { + $totStat.curr.text(curr.size + ' ' + curr.unit); + } + + $totStat.totalPerc.text(perc + ' %'); + }; + + var onCompletion = function uiOnCompletion() { + uiOpts.window.totalStat.curr = uiOpts.window.totalStat.total; + var size = numOfBytes(uiOpts.window.totalStat.curr, 1).size; + + uiOpts.window.$.curr.text(size); + uiOpts.window.$.totalSpeed.text('-'); + }; + + var onItemCompletion = function uiOnItemCompletion(id) { + var $item = uiOpts.window.queueItems[id].$; + + $item.status.text(l[554]); + delay('megadrop.log', eventlog.bind(null, 99776)); // upload count + }; + + var isDlgInit = function uiIsDlgInit() { + return uiOpts.dlg.initialized; + }; + + var setDlgInit = function uiSetDlgInit(value) { + uiOpts.dlg.initialized = value; + }; + + return { + addItem: addItem, + skipInfoDlg: skip, + nodeIcon: nodeIcon, + isDlgInit: isDlgInit, + setDlgInit: setDlgInit, + updateData: updateData, + updateItem: updateItem, + infoDialog: infoDialog, + mobileInfoDialog: mobileInfoDialog, + generateUrl: generateUrl, + initDialogs: initDialogs, + generateCode: generateCode, + onCompletion: onCompletion, + widgetDialog: widgetDialog, + mobileWidgetDialog: mobileWidgetDialog, + cacheWindowDOM: cacheWindowDOM, + onItemCompletion: onItemCompletion, + updateTotalProgress: updateTotalProgress, + }; + }(widgetOpts));// END mega.megadrop.ui + + mBroadcaster.addListener('fm:initialized', function () { + + if (is_mobile) { + return false; + } + + // Prevent multiple initializations + if (!ui.isDlgInit()) { + ui.initDialogs(); + ui.setDlgInit(true); + } + + // Context menu create widget + $('.dropdown.body.context .dropdown-item.createwidget-item').rebind('click.create_widget', function () { + + if (M.isInvalidUserStatus()) { + return; + } + + // Go to widget creation directly don't display PUF info dialog + if (ui.skipInfoDlg()) { + puf.create($.selected[0]); + } + else {// Display PUF info dialog + ui.infoDialog($.selected[0], true); + } + }); + + // Context menu manage widget + $('.dropdown.body.context .dropdown-item.managewidget-item').rebind('click.manage_widget', function() { + + if (M.isInvalidUserStatus()) { + return; + } + + // Go to widget creation directly don't display PUF info dialog + if (ui.skipInfoDlg()) { + puf.create($.selected[0]); + } + else {// Display PUF info dialog + ui.infoDialog($.selected[0], false); + } + }); + + // Context menu Remove upload page + $('.dropdown.body.context .dropdown-item.removewidget-item').rebind('click.remove_widget', function() { + + if (M.isInvalidUserStatus()) { + return; + } + + puf.remove($.selected); + }); + }); + + mBroadcaster.addListener('MEGAdrop:checked', function() { + parsepage(pages[is_mobile ? 'mobile-megadrop' : 'megadrop']); + pup.pubk(widgetOpts.ownerHandle); + ui.updateData(); + }); + + mBroadcaster.addListener('MEGAdrop:disabled', function() { + parsepage(pages[is_mobile ? 'mobile-nomegadrop' : 'nomegadrop']); + mega.megadrop.disableDragDrop(); + $('.wu-change-lang').text(lang); + $('.wu-lang').rebind('click.widget_change_lang', function() { + langDialog.show(); + }); + }); + + mBroadcaster.addListener('MEGAdrop:overquota', function() { + parsepage(pages[is_mobile ? 'mobile-nomegadrop' : 'nomegadrop']); + $('.wu-name-text').text(widgetOpts.pageData.name); + $('.widget-upload .wu-folder-name-text') + .text(l[16302]); + $('.widget-upload .wu-upload-text') + .text(l[17537]); + mega.megadrop.disableDragDrop(); + $('.wu-change-lang').text(lang); + $('.wu-lang').rebind('click.widget_change_lang', function() { + langDialog.show(); + }); + }); + + /** + * init is called when URL contains widget/ + * Configure module with data necessary for file encryption + * Add event listeners and cache widget upload windows DOM elements + */ + var init = function widgetInit() { + if (d) { + console.log('init MEGAdrop'); + } + + api_create_u_k();// Creates global var u_k + u_k_aes = new sjcl.cipher.aes(u_k); + u_pubkeys[widgetOpts.ownerHandle] = widgetOpts.ownerKey; + + InitFileDrag(); + ui.cacheWindowDOM(); + + if (is_mobile) { + + // initialise upload overlay + mobile.uploadOverlay.init(); + $('.fm-header .fm-icon.mega').off('tap'); + } + }; + + mBroadcaster.addListener('MEGAdrop:initialized', function() { + widgetOpts.ownerKey = crypto_decodepubkey(base64urldecode(widgetOpts.pubk)); + widgetOpts.initialized = true; + init(); + }); + + /** + * Prepare file properties and add to upload queue + * @param {Object} event On change event + */ + /* jshint -W074 */ + var put = function widgetPut(event) { + if (d) { + console.log('widget.put'); + } + + // Stop bubbling, e.g. prevent Save File dialog + if (event.stopPropagation) { + event.stopPropagation(); + } + if (event.preventDefault) { + event.preventDefault(); + } + + var file; + var filesize = 0; + var targetId = widgetOpts.pufHandle; + var dataTransfer = Object(event.dataTransfer); + var files = event.target.files || dataTransfer.files; + var gecko = dataTransfer && ("mozItemCount" in dataTransfer + || browserdetails(ua).browser === 'Firefox'); + + if (!files || files.length === 0) { + if (!is_chrome_firefox || !dataTransfer.mozItemCount) { + return false; + } + } + + if (M.checkFolderDrop(event)) { + // Hide Drop to Upload dialog and show warning notification + $('.drag-n-drop.overlay').addClass('hidden'); + $('body').removeClass('overlayed'); + msgDialog('warninga', l[135], l[19179], false, false, false); + return false; + } + + for (var i = 0; files[i]; i++) { + file = files[i]; + if (file.webkitRelativePath) { + file.path = String(file.webkitRelativePath).replace(RegExp("[\\/]" + + String(file.name).replace(/([^\w])/g, '\\$1') + "$"), ''); + } + if (gecko) { + file.gecko = true; + } + if (file.name !== '.') { + + try { + + // this could throw NS_ERROR_FILE_NOT_FOUND + filesize = file.size; + file.target = targetId; + file.flashid = false; + file.id = widgetOpts.ulId++; + file.ownerId = widgetOpts.ownerHandle; + + ul_queue.push(file); + var status = l[7227]; + ui.addItem(file.id, file.name, status, filesize); + + if (is_mobile) { + M.addToTransferTable('ul_' + file.id, file); + } + } + catch (ex) { + if (d) { + console.error(file.name, ex); + } + continue; + } + } + } + ulmanager.isUploading = Boolean(ul_queue.length); + + // Hide Drop to Upload dialog, no need to call InitFileDrag on every upload + $('.drag-n-drop.overlay').addClass('hidden'); + $('body').removeClass('overlayed'); + };/* jshint +W074 */ + + var isInit = function widgetIsInit() { + return widgetOpts.initialized; + }; + + /** + * @returns {String} PUP owners handle + */ + var ownersHandle = function widgetOwnersHandle() { + return widgetOpts.ownerHandle; + }; + + /** + * Process 'uph' object from gettree reply, db and cached data structures will be recreated + * and updated with active PUP informations. We are taking + * enabled and disabled PUPs into account + * @param {Object} ap 'uph' action packet {ph: puhId, h : nodeId} + */ + var processUPH = function widgetProcessUPH(ap) { + if (d) { + console.log('processUPH', ap); + } + + for (var i = ap.length; i--;) { + var n = clone(ap[i]); + + n.p = ''; + n.fn = M.getNameByHandle(n.h) || 'unknown'; + + if (n.ph && fmdb && !pfkey) { + fmdb.add('puf', { + ph: n.ph, + d: n + }); + } + + puf.items[n.h] = n; + } + + return MegaPromise.resolve(); + }; + + var processUPHAP = function processUPHAP(ap) { + processUPH(ap).done(function() { + pup.list().done(function(pupList) { + pup.get(pupList); + }); + }); + }; + + /** + * Update cache, db and DOM elements when folder name is changed + * @param {String} handle Folder id + * @param {String} name New folder name + */ + var onRename = function widgetOnRename(handle, name) { + if (d) { + console.log('widget.onRename'); + } + + if (puf.items[handle]) { + var pupHandle = puf.items[handle].p; + + // Update cache and db with new folder name + pup.update(handle, 'msg', name); + puf.updateFolderName(handle, name); + pup.updateFolderName(pupHandle, name); + + // Update accout -> settings -> public upload folder DOM + settings.updateOnRename(handle, name); + } + else { + if (d) { + console.log('widget.onRename, was not able to find puf for given handle: ', handle); + } + } + }; + + /** + * Called when widget is disabled or url is wrong uploading + * is not possible remove drag&drop event handlers + * This nagates event handlers from InitFileDrag function + */ + var disableDragDrop = function disableDragDrop() { + $(window) + .on('dragover', false) + .on('dragleave', false) + .on('drop', function() { + return false; + }); + }; + + /** + * Show storage overquota dialog in MEGAdrop window + */ + var showMEGAdropOverQuota = function showMEGAdropOverQuota() { + + var promise = new MegaPromise(); + var prevState = $('.fm-main').is('.almost-full, .full'); + $('.fm-main').removeClass('almost-full full'); + + if (this.showMEGAdropOverQuotaPromise) { + promise = this.showMEGAdropOverQuotaPromise; + } + this.showMEGAdropOverQuotaPromise = promise; + + $('.fm-main').addClass('full'); + var $strgdlg = $('.mega-dialog.storage-dialog').removeClass('almost-full'); + + $strgdlg.addClass('full') + .find('.choose-plan').addClass('hidden') + .end() + .find('.fm-dialog-body.full header h2').text(l[16302]) + .end() + .find('.body-header').text(l[17535]) + .end() + .find('.body-p.long') + .text(l[17536]) + .end() + .find('.storage-dialog.divider-txt').addClass('hidden') + .end() + .find('.storage-dialog.no-achievements-bl').addClass('hidden'); + + $('button.js-close, button.skip', $strgdlg).rebind('click', closeDialog); + + // if another dialog wasn't opened previously + if (!prevState) { + M.safeShowDialog('megadrop-over-quota', $strgdlg); + $('.mega-dialog:visible, .overlay:visible').addClass('arrange-to-back'); + } + else { + promise.reject(); + } + + return promise; + }; + + var isEmptyActivePUP = function isEmptyActivePUP() { + var $items = pup.items; + + if ($.isEmptyObject($items)) { + return true; // No item in pup.items, return true; + } + for (var f in $items) { + if ($items[f].s === 2) { + return false; // There is an active one, return false + } + } + return true; + }; + + return { + init: init, + upload: put, + isInit: isInit, + onRename: onRename, + getDropList: dropList, + getPufHandle: pufHandle, + isDropExist: isDropExist, + preMoveCheck: preMoveCheck, + showRemoveWarning: showRemoveWarning, + processUPHAP: processUPHAP, + getOwnersHandle: ownersHandle, + disableDragDrop: disableDragDrop, + overQuota: showMEGAdropOverQuota, + updatePUPUserName: updatePUPUserName, + isEmptyActivePUP: isEmptyActivePUP, + + // PUF + pufs: puf.items, + pufCallbacks: puf.callbacks, + pufCreate: puf.create, + pufRemove: puf.remove, + pufHandle: puf.getHandle, + pufProcessDb: puf.processDb, + pufProcessPUH: puf.processPUH, + + // PUP + pupGet: pup.get, + pups: pup.items, + pupList: pup.list, + pupCheck: pup.check, + pupUpdate: pup.update, + pupProcessPUP: pup.processPUP, + pupProcessDb: pup.processDb, + + // UI + uiUpdateItem: ui.updateItem, + onCompletion: ui.onCompletion, + onItemCompletion: ui.onItemCompletion, + uiUpdateTotalProgress: ui.updateTotalProgress, + uiMobileInfoDialog: ui.mobileInfoDialog, + uiSkipDialog: ui.skipInfoDlg, + + // Settings + stngsDraw: settings.widget + }; + +}());// END mega.widget + +lazy(mega.slideshow, 'file', () => { + 'use strict'; + + return new class SlideshowFile { + /** + * Slideshow file handler to fetch all subtree MegaNodes and media files to be displayed on slideshow playlist + * @returns {SlideshowFile} instance + */ + constructor() { + // state properties defining this function behavior + this.state = { + isReady: true, + isAbort: false + }; + + Object.freeze(this); + } + + /** + * Update state to abort node fetching immediately + * @returns {void} + */ + abort() { + this.setState({isReady: true, isAbort: true}); + } + + /** + * Fetch all subtree MegaNodes on chunks and fetch those files not already available. + * Fetched and filtered files will be added to slideshow playlist + * @returns {Promise<*>} void + */ + async fetch() { + const {utils, manager} = mega.slideshow; + + const {filter} = manager.state; + const opts = Object.assign({limit: 200, offset: 0}); + const inflight = []; + + this.setState({isReady: false, isAbort: false}); + + await fmdb.getchunk('f', opts, (chunk) => { + if (this.state.isAbort) { + return false; + } + opts.offset += opts.limit; + // TODO check! large chunk causes UI block + // opts.limit = Math.min(122880, opts.limit << 1); + + const updateIds = []; + const fetchIds = []; + + for (let i = chunk.length; i--;) { + const n = chunk[i]; + + if (n && !n.fv && !n.rr && filter(n)) { + if (!M.d[n.h]) { + fetchIds.push(n.h); + } + else if (!M.v.some((v) => v.h === n.h) && utils.isNodeInCurrentTree(n)) { + updateIds.push(n.h); + } + } + } + + if (updateIds.length) { + this._update(updateIds); + } + + if (fetchIds.length) { + inflight.push( + dbfetch.geta(fetchIds) + .then(() => this._update(fetchIds)) + .catch(dump) + ); + } + }); + + if (this.state.isAbort) { + this.setState({isReady: true}); + return; + } + + return Promise.allSettled(inflight).finally(() => { + this.setState({isReady: true, isAbort: true}); + }); + } + + /** + * Filter nodes to get only those included in current dir subtree. + * Update M.v and playlist with those nodes + * @param {String[]} nodeIds - node id list + * @returns {void} + */ + _update(nodeIds) { + const {utils, playlist} = mega.slideshow; + + if (nodeIds && nodeIds.length) { + const nodes = nodeIds + .map(h => M.d[h]) + .filter(utils.isNodeInCurrentTree); + + if (nodes.length) { + M.v.push(...nodes); + playlist.add(nodes); + } + } + } + + /** + * Update state properties + * @param {Object} behavior definition + * @returns {void} + */ + setState({isReady, isAbort}) { + this.state.isReady = isReady === undefined ? this.state.isReady : isReady; + this.state.isAbort = isAbort === undefined ? this.state.isAbort : isAbort; + } + }; +}); + +lazy(mega.slideshow, 'manager', () => { + 'use strict'; + + return new class SlideshowManager { + /** + * Slideshow manager / facade exposing slideshow playlist items operations. + * Handle 2 different slideshow modes pointed out by "isPlayMode" state property + * @returns {SlideshowManager} instance + */ + constructor() { + // state properties defining this function behavior + this.state = { + isPlayMode: false, + isReset: false, + nodes: null, + filter: null, + getNodeIdOnIndex: null + }; + + Object.freeze(this); + } + + /** + * Update state properties and playlist items + * "mega.slideshow.file.fetch" can be fired while is in progress. In that case, current fetch will be aborted + * before starting a new one + * @param {Object} behavior definition + * @returns {void} + */ + setState({ + nodes, + currentNodeId, + isPlayMode, + isReset, + isAbortFetch, + isChangeOrder, + isNotBuildPlaylist + }) { + const {utils, file, settings, playlist} = mega.slideshow; + + this.state.isPlayMode = isPlayMode === undefined ? this.state.isPlayMode : isPlayMode; + this.state.isReset = isReset === undefined ? this.state.isReset : isReset; + this.state.nodes = nodes ? () => nodes : () => M.v; + this.state.filter = utils.filterNodes(nodes, this.state.isPlayMode); + this.state.getNodeIdOnIndex = (i) => utils.getNodeIdOnIndex(this.state.nodes()[i]); + + let hasToBuildPlaylist = !isNotBuildPlaylist && (!isAbortFetch || !this.state.isPlayMode); + if (isAbortFetch) { + file.abort(); + if (!isNotBuildPlaylist && settings.sub.getValue() && !utils.isCurrentDirFlat()) { + utils.setCurrentDir(); + hasToBuildPlaylist = false; + } + } + else if (!isChangeOrder && this._isFetchAllowed()) { + if (!file.state.isReady) { + file.abort(); + } + // give "file.abort" time to be effective + delay('slideshow:fetch', () => file.fetch().catch(dump), 200); + } + + if (hasToBuildPlaylist) { + playlist.build(currentNodeId); + } + } + + /** + * Return info about next playlist iteration + * @param {String} nodeId - node id + * @returns {Object} next playlist iteration + */ + next(nodeId) { + const {step, playlist} = mega.slideshow; + + const playLength = playlist.items.length; + let next = {playLength}; + + if (playlist.items.length > 1) { + const {playIndex, node} = playlist.findNode(nodeId); + + const nextStep = node === undefined || this.state.isPlayMode && this.state.isReset ? + step.reset(playIndex) : + step.next(playIndex); + + next = {...next, node, playIndex, ...nextStep}; + } + + this.state.isReset = false; + return next; + } + + /** + * Check if playlist item on index passed as argument is the last no the playlist + * @param {Number} playIndex - playlist index + * @returns {Boolean} whether current item is the last on the playlist + */ + isLast(playIndex) { + const {file, settings, playlist} = mega.slideshow; + + return playlist.items.length < 2 || + file.state.isReady && + !settings.repeat.getValue() && + playIndex === playlist.items.length - 1; + } + + /** + * Check if fetching items is allowed + * @returns {Boolean} whether fetching items is allowed + */ + _isFetchAllowed() { + const {utils, settings, playlist} = mega.slideshow; + + return this.state.isPlayMode && + !utils.isCurrentDirFlat() && + settings.sub.getValue() && + !playlist.isFull(); + } + }; +}); + +lazy(mega.slideshow, 'playlist', () => { + 'use strict'; + + // playlist max items allowed + const maxItems = 1000; + + return new class SlideshowPlaylist { + /** + * Slideshow playlist handler holding MegaNode references to play on slideshow. + * Playlist items will be ordered, pruned and placed based on slideshow state. + * + * Sample: + * + * - playlist items: [3, 1, 378, 23] + * - nodes: [ + * MegaNode_A // nodes[0] => - not in playlist - + * MegaNode_B // nodes[1] => playlist[1] + * MegaNode_C // nodes[2] => - not in playlist - + * MegaNode_D // nodes[3] => playlist[0] + * ... + * MegaNode_X // nodes[23] => playlist[3] + * ... + * MegaNode_Y // nodes[378] => playlist[2] + * ... + * ] + * - so playlist de-referenced is: [MegaNode_D, MegaNode_B, MegaNode_Y, MegaNode_X] + * + * @returns {SlideshowPlaylist} instance + */ + constructor() { + // playlist items containing MegaNode indexes in a determined order + this.items = []; + + Object.freeze(this); + } + + /** + * Build playlist items references based on slideshow state and MegaNodes available + * Behavior changes when isPlayMode: + * - playlist max length + * - playlist ordering + * - not absolute ordering may affect playlist first item + * @param {String} nodeId - node id + * @returns {void} + */ + build(nodeId) { + const {settings, manager} = mega.slideshow; + const {isPlayMode, filter} = manager.state; + const nodes = manager.state.nodes(); + const isAbsoluteOrder = settings.order.isAbsolute(); + + let nodeIndex = -1; + this.items.length = 0; + + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i]; + if (filter(node)) { + if (!isAbsoluteOrder && isPlayMode && nodeId !== undefined && node.h === nodeId) { + nodeIndex = i; + } + else { + this.items.push(i); + } + } + } + + if (isPlayMode) { + settings.order.getValue()(this.items, nodes); + } + + if (nodeIndex !== -1) { + this.items.unshift(nodeIndex); + } + + if (this.isFull()) { + this.items.splice(maxItems); + } + } + + /** + * Add ordered MegaNode references to playlist not exceeding playlist max length if applicable + * @param {MegaNode[]} addNodes - nodes to add to playlist + * @returns {void} + */ + add(addNodes) { + const {file, settings, manager} = mega.slideshow; + const nodes = manager.state.nodes(); + + if (addNodes.length) { + if (this.isFull()) { + file.abort(); + return; + } + + const items = []; + const maxItemsAllowed = maxItems - this.items.length; + + if (addNodes.length > maxItemsAllowed) { + if (addNodes.length > 1) { + settings.order.getValue()(addNodes, nodes); + } + addNodes.splice(maxItemsAllowed); + } + + for (let i = 0; i < addNodes.length; i++) { + const index = nodes.findIndex((node) => node.h === addNodes[i].h); + if (index !== -1) { + items.push(index); + } + } + + if (items.length > 1) { + settings.order.getValue()(items, nodes); + } + this.items.push(...items); + + if (this.isFull()) { + file.abort(); + this.items.splice(maxItems); + } + } + } + + /** + * Return index on playlist and node in case id argument is related to a playlist item node. + * Otherwise returns { playIndex: -1, node: undefined } + * @param {String} id - node id + * @returns {Object} playlist info about node id argument + */ + findNode(id) { + const {manager} = mega.slideshow; + + let playIndex = -1; + let node; + + if (id !== undefined) { + const nodes = manager.state.nodes(); + playIndex = this.items.findIndex( + (nodeIndex) => manager.state.getNodeIdOnIndex(nodeIndex) === id + ); + node = nodes[this.items[playIndex]]; + } + return {playIndex, node}; + } + + /** + * Return node id related to a playlist item defined by index passed as argument + * @param {Number} playIndex - playlist item index + * @returns {String} node id + */ + getNodeIdOnIndex(playIndex) { + return mega.slideshow.manager.state.getNodeIdOnIndex(this.items[playIndex]); + } + + /** + * Check if playlist is full. Only applicable if isPlayMode. + * Otherwise playlist has no limit. + * This is a network & performance optimization when nodes from subfolders + * can be fetched in case huge node trees + * @returns {Boolean} wheter playlist is full + */ + isFull() { + return mega.slideshow.manager.state.isPlayMode && this.items.length >= maxItems; + } + }; +}); + +lazy(mega.slideshow, 'step', () => { + 'use strict'; + + /** + * Slideshow step handler to determine playlist next iteration use cases + */ + return { + /** + * Return info about next playlist iteration + * @param {Number} playIndex - playlist index + * @returns {Object} - backward & forward node ids for next steps + */ + next: (playIndex) => { + const {file, settings, playlist, manager} = mega.slideshow; + + const {isPlayMode} = manager.state; + const isRepeat = settings.repeat.getValue(); + const playListLength = playlist.items.length; + const nextStep = {}; + + let prevPlayIndex; + let nextPlayIndex; + + switch (playIndex) { + case undefined: + case -1: + break; + case 0: + if (!isPlayMode || isRepeat) { + prevPlayIndex = playListLength - 1; + } + nextPlayIndex = 1; + break; + case playListLength - 1: + prevPlayIndex = playIndex - 1; + if (!isPlayMode || isRepeat) { + nextPlayIndex = 0; + } + break; + default: + prevPlayIndex = playIndex - 1; + nextPlayIndex = playIndex + 1; + } + + if (prevPlayIndex !== undefined) { + nextStep.backward = playlist.getNodeIdOnIndex(prevPlayIndex); + } + if (nextPlayIndex !== undefined) { + nextStep.forward = playlist.getNodeIdOnIndex(nextPlayIndex); + } + else if (!file.state.isReady) { + nextStep.forward = playlist.getNodeIdOnIndex(playIndex); + } + + return nextStep; + }, + + /** + * Return info about next playlist iteration when playlist is re-started from first item + * @param {Number} playIndex - playlist index + * @returns {Object} - backward & forward node ids for next steps + */ + reset: (playIndex) => { + const {playlist} = mega.slideshow; + + const playlistLength = playlist.items.length; + + let prevPlayIndex; + let nextPlayIndex; + + if (playIndex === -1) { + prevPlayIndex = playlistLength - 1; + nextPlayIndex = 0; + } + else { + prevPlayIndex = playlistLength - (playIndex === playlistLength - 1 ? 2 : 1); + nextPlayIndex = playIndex === 0 ? 1 : 0; + } + + return { + backward: playlist.getNodeIdOnIndex(prevPlayIndex), + forward: playlist.getNodeIdOnIndex(nextPlayIndex) + }; + }, + }; +}); + +lazy(mega.slideshow, 'utils', () => { + 'use strict'; + + /** + * Slideshow utils for MegaData operations + */ + return { + /** + * Check if node is in current dir tree (root or subtree) + * @param {MegaNode} node - node to check + * @returns {Boolean} whether node is in current dir tree + */ + isNodeInCurrentTree: (node) => { + return M.getPath(node.h).includes(M.currentdirid.replace('out-shares/', '')); + }, + + /** + * Return node id (handler) for chat or default + * @param {MegaNode} node - node to check + * @returns {String} node id + */ + getNodeIdOnIndex: (node) => { + if (node !== undefined) { + return node[M.chat ? 'ch' : 'h']; + } + }, + + /** + * Open current folder + * @returns {void} + */ + setCurrentDir: ()=> { + M.openFolder(M.currentdirid, true); + }, + + /** + * Filter nodes argument depending on current situation + * @param {MegaNode[]} nodes - list of nodes to filter + * @param {Boolean} isPlayMode - whether slideshow is on play mode or not + * @returns {void} + */ + filterNodes: (nodes, isPlayMode) => { + if (nodes !== undefined) { + return () => true; + } + else if (isPlayMode) { + return (n) => n.s && (n.fa || !M.getNodeShare(n).down) && is_image3(n); + } + else if (is_mobile) { + return (n) => (n.fa || !M.getNodeShare(n).down) && (is_video(n) || is_image3(n)); + } + return (n) => (n.fa || !M.getNodeShare(n).down) && (is_image2(n) || is_video(n)); + }, + + /** + * Check if current dir is a default flat (no sub-folders) + * @returns {Boolean} whether current dir is flat + */ + isCurrentDirFlat: () => { + // TODO replace isCurrentDirFlat function body with line below once WEB-14237 MR is merged into develop + // M.chat || + // M.isDynPage(M.currentdirid) || + // ['recents','photos','images','favourites'].includes(M.currentdirid); + + return M.chat || + ['recents', 'photos', 'images', 'favourites', 'faves'].includes(M.currentdirid); + }, + }; +}); + +lazy(mega.slideshow.settings, 'options', () => { + 'use strict'; + + return class SlideshowOptionsSetting { + /** + * Settings options base class + * @param {String} name - setting name + * @param {String} defaultConfig - setting default config if no available + * @param {Object} config - setting config definition + * @returns {SlideshowOptionsSetting} instance + */ + constructor(name, defaultConfig, config) { + this.name = name; + this._defaultConfig = defaultConfig; + this._config = config; + + Object.freeze(this); + } + + /** + * Return current config value + * @returns {*} - current config value + */ + getValue() { + return this.getConfig().value; + } + + /** + * Return current config cfg + * @returns {Number} - current config cfg + */ + getDefaultCfg() { + return this.getConfig().cfg; + } + + /** + * Return current config or default value if undefined + * TODO: new slideshow not implemented in mobile version + * @returns {Object} - current config + */ + getConfig() { + const cfg = fmconfig.viewercfg ? fmconfig.viewercfg[this.name] : undefined; + + let id = this._defaultConfig; + + if (!is_mobile) { + for (const [k, v] of Object.entries(this._config)) { + if (v.cfg === cfg) { + id = k; + break; + } + } + } + + return this._config[id]; + } + }; +}); + +lazy(mega.slideshow.settings, 'switch', () => { + 'use strict'; + + return class SlideshowSwitchSetting { + /** + * Settings switch base class + * @param {String} name - setting name + * @param {Boolean} defaultValue - default value + * @param {Function} isAllowed - whether switch is allowed or not + * @param {Boolean} isImplemented - whether current switch setting is implemented and must be shown or not. + * This parameter will be useless when include sub-folders setting + * is definetely integrated + * @returns {SlideshowSwitchSetting} instance + */ + constructor(name, defaultValue, isAllowed, isImplemented) { + this.name = name; + this._defaultValue = defaultValue || 0; + this._isAllowed = isAllowed; + this._isImplemented = isImplemented === undefined ? true : isImplemented; + + Object.freeze(this); + } + + /** + * Return current config value or default value if undefined or is_mobile + * TODO: new slideshow not implemented in mobile version + * @returns {*} - current config value + */ + getValue() { + return !is_mobile && + this._isImplemented && + fmconfig.viewercfg && fmconfig.viewercfg[this.name] !== undefined ? + fmconfig.viewercfg[this.name] : + this._defaultValue; + } + + /** + * Return switch default value + * @returns {Boolean} enabled / disabled + */ + getDefaultCfg() { + return this._defaultValue; + } + + /** + * Render slideshow settings UI according to config values + * Settings UI elements will be provided with config change event bindings + * @param {Object} $container - jquery element containing settings + * @param {Function} onUpdate - to be called when setting is changed + * @returns {void} + */ + render($container, onUpdate) { + if (!this._isImplemented) { + return; + } + + const $switch = $(`#${this.name}`, $container); + + let toggle = (onChange) => { + let value; + if ($switch.hasClass('toggle-on')) { + $switch.removeClass('toggle-on'); + value = 0; + } + else { + $switch.addClass('toggle-on'); + value = 1; + } + + $switch.trigger('update.accessibility'); + + if (typeof onChange === 'function') { + onChange(value); + } + }; + + const value = this.getValue(); + if (value && !$switch.hasClass('toggle-on') + || !value && $switch.hasClass('toggle-on')) { + toggle(); + } + else { + $switch.trigger('update.accessibility'); + } + + if (typeof this._isAllowed === 'function') { + if (this._isAllowed()) { + $switch.closest('li').removeClass('disabled'); + } + else { + $switch.closest('li').addClass('disabled'); + $switch.removeClass('toggle-on'); + $switch.trigger('update.accessibility'); + toggle = () => false; + } + } + + Soon(() => { + $('.no-trans-init', $switch).removeClass('no-trans-init'); + }); + + $switch.rebind(`click.slideshow-${this.name}`, () => toggle((value) => onUpdate(this.name, value))); + } + }; +}); + +lazy(mega.slideshow.settings, 'order', () => { + 'use strict'; + + const name = 'order'; + + return new class SlideshowOrderSetting extends mega.slideshow.settings.options { + /** + * Order setting handler + * @returns {SlideshowOrderSetting} instance + */ + constructor() { + super( + name, + 'shuffle', + { + shuffle: { + cfg: 1, + icon: 'icon-shuffle', + absolute: false, + value: (indexList) => shuffle(indexList) + }, + newest: { + cfg: 2, + icon: 'icon-hourglass-new', + absolute: true, + value: (indexList, nodeList) => indexList.sort((a, b) => nodeList[b].ts - nodeList[a].ts) + }, + oldest: { + cfg: 3, + icon: 'icon-hourglass-old', + absolute: true, + value: (indexList, nodeList) => indexList.sort((a, b) => nodeList[a].ts - nodeList[b].ts) + } + } + ); + } + + /** + * Return current config absolute + * @returns {Boolean} whether is aboslute + */ + isAbsolute() { + return this.getConfig().absolute; + } + + /** + * Render slideshow settings UI according to config values + * Settings UI elements will be provided with config change event bindings + * @param {Object} $container - jquery element containing settings + * @param {Function} onUpdate - to be called when setting is changed + * @returns {void} + */ + render($container, onUpdate) { + const $button = $(`button.${this.name}`, $container); + const $options = $(`nav.${this.name}`, $container); + + const clickHandler = (id) => { + const $button = $(`button.${this.name}`, $container); + const $options = $(`nav.${this.name}`, $container); + + if (!$(`button.${id}`, $options).hasClass('disabled')) { + onUpdate(this.name, this._config[id].cfg); + + for (const [k, v] of Object.entries(this._config)) { + const button = $(`button.${k}`, $options); + if (k === id) { + button.addClass('active'); + $('i:last', $button).addClass(v.icon); + $(`button.${k} i.icon-active`, $options).removeClass('hidden'); + } + else { + button.removeClass('active'); + $('i:last', $button).removeClass(v.icon); + $(`button.${k} i.icon-active`, $options).addClass('hidden'); + } + } + } + }; + + const cfg = fmconfig.viewercfg ? fmconfig.viewercfg[this.name] : undefined; + + let id = this._defaultConfig; + for (const [k, v] of Object.entries(this._config)) { + const button = $(`button.${k}`, $options); + if (v.cfg === cfg) { + id = k; + button.addClass('active'); + } + else { + button.removeClass('active'); + } + $(`button.${k} i:first`, $options).addClass(v.icon); + button.rebind('click.slideshow-order', () => clickHandler(k)); + } + + $('i:last', $button).addClass(this._config[id].icon); + $(`button.${id} i.icon-active`, $options).removeClass('hidden'); + } + + /** + * To be called when any setting is changed + * Set order defaultConfig (shuffle) and disable other order options or enable all + * @param {Object} $container - jquery element containing settings + * @param {*} name - setting name + * @returns {void} + */ + onConfigChange($container, name) { + const {utils, manager, settings} = mega.slideshow; + + if (this.name === name) { + manager.setState({isReset: true, isChangeOrder: true}); + } + + if (name === undefined || name === settings.sub.name) { + let id; + if (!utils.isCurrentDirFlat() && settings.sub.getValue() === 1) { + id = this._defaultConfig; + fmconfig.viewercfg[this.name] = this._config[id].cfg; + mega.config.set('viewercfg', fmconfig.viewercfg); + } + this._enable($container, id); + } + } + + /** + * Set order defaultConfig (shuffle) and disable other order options or enable all + * determined by "id" + * @param {Object} $container - jquery element containing settings + * @param {String} id - specific setting + * @returns {void} + */ + _enable($container, id) { + const $button = $(`button.${this.name}`, $container); + const $options = $(`nav.${this.name}`, $container); + + for (const [k, v] of Object.entries(this._config)) { + if (id === undefined) { + if (v.cfg === this.getDefaultCfg()) { + $('i:last', $button).addClass(v.icon); + $(`button.${k} i.icon-active`, $options).removeClass('hidden'); + } + else { + $('i:last', $button).removeClass(v.icon); + $(`button.${k} i.icon-active`, $options).addClass('hidden'); + } + $(`button.${k}`, $options).removeClass('disabled'); + } + else if (k === this._defaultConfig) { + $('i:last', $button).addClass(v.icon); + $(`button.${k} i.icon-active`, $options).removeClass('hidden'); + $(`button.${k}`, $options).removeClass('disabled'); + } + else { + $('i:last', $button).removeClass(v.icon); + $(`button.${k} i.icon-active`, $options).addClass('hidden'); + $(`button.${k}`, $options).addClass('disabled'); + } + } + } + }; +}); + +lazy(mega.slideshow.settings, 'speed', () => { + 'use strict'; + + const name = 'speed'; + const shortText = l.ss_setting_speed_seconds; + + return new class SlideshowSpeedSetting extends mega.slideshow.settings.options { + /** + * Speed setting handler + * @returns {SlideshowSpeedSetting} instance + */ + constructor() { + super( + name, + 'normal', + { + slow: {cfg: 1, value: 8000, longText: l.ss_settings_speed_opt_1}, + normal: {cfg: 2, value: 4000, longText: l.ss_settings_speed_opt_2}, + fast: {cfg: 3, value: 2000, longText: l.ss_settings_speed_opt_3} + } + ); + } + + /** + * Render slideshow settings UI according to config values + * Settings UI elements will be provided with config change event bindings + * @param {Object} $container - jquery element containing settings + * @param {Function} onUpdate - to be called when setting is changed + * @returns {void} + */ + render($container, onUpdate) { + const $button = $(`button.${this.name}`, $container); + const $options = $(`nav.${this.name}`, $container); + + const clickHandler = (id) => { + onUpdate(this.name, this._config[id].cfg); + + for (const [k, v] of Object.entries(this._config)) { + const button = $(`button.${k}`, $options); + if (k === id) { + button.addClass('active'); + $('.current', $button).safeHTML(this._getText(v, true)); + $(`button.${k} i.icon-active`, $options).removeClass('hidden'); + } + else { + button.removeClass('active'); + $(`button.${k} i.icon-active`, $options).addClass('hidden'); + } + } + }; + + const cfg = fmconfig.viewercfg ? fmconfig.viewercfg[this.name] : undefined; + + let id = this._defaultConfig; + for (const [k, v] of Object.entries(this._config)) { + const button = $(`button.${k}`, $options); + if (v.cfg === cfg) { + id = k; + button.addClass('active'); + } + else { + button.removeClass('active'); + } + $(`button.${k} span`, $options).safeHTML(this._getText(v)); + button.rebind('click.slideshow-speed', () => clickHandler(k)); + } + + $('.current', $button).safeHTML(this._getText(this._config[id], true)); + $(`button.${id} i.icon-active`, $options).removeClass('hidden'); + } + + /** + * Return setting related translated label text + * @param {Object} config - specific config + * @param {Boolean} isShort - whether to use short label + * @returns {String} translated label text + */ + _getText(config, isShort) { + return (isShort ? shortText : config.longText).replace('%1', config.value / 1000); + } + }; +}); + +lazy(mega.slideshow.settings, 'repeat', () => { + 'use strict'; + + const name = 'repeat'; + + return new class SlideshowRepeatSetting extends mega.slideshow.settings.switch { + /** + * repeat setting handler + * @returns {SlideshowRepeatSetting} instance + */ + constructor() { + super(name, 1); + } + }; +}); + +lazy(mega.slideshow.settings, 'sub', () => { + 'use strict'; + + const name = 'sub'; + + return new class SlideshowSubSetting extends mega.slideshow.settings.switch { + /** + * sub setting handler + * @returns {SlideshowSubSetting} instance + */ + constructor() { + super( + name, + 0, + () => !mega.slideshow.utils.isCurrentDirFlat(), + // set to "false" to deactivate include sub-folders setting functionality + false + ); + } + + /** + * Return if settings have to be rendered: hasToDisable and switch not disabled or viceversa + * @param {Object} $container - jquery element containing settings + * @returns {Boolean} whether settings have to update render + */ + hasToUpdateRender($container) { + if (!this._isImplemented || typeof this._isAllowed !== 'function') { + return false; + } + + const $parent = $(`#${this.name}`, $container).closest('li'); + return this._isAllowed() ? + $parent.hasClass('disabled') : + !$parent.hasClass('disabled'); + } + + /** + * Handle setting changes + * @param {*} _ unused + * @param {String} name - name of the setting changed + * @param {Number} cfg - value of the setting changed + * @returns {void} + */ + onConfigChange(_, name, cfg) { + if (name === this.name && cfg !== undefined) { + const {utils, manager} = mega.slideshow; + if (!cfg) { + utils.setCurrentDir(); + } + manager.setState({isReset: true, isAbortFetch: !cfg}); + } + } + }; +}); + +lazy(mega.slideshow.settings, 'manager', () => { + 'use strict'; + + return new class SlideshowSettingsManager { + /** + * Slideshow settings manager / facade exposing slideshow playlist settings operations. + * Can handle as many settings as wanted just by defining them in "_settings" property + * @returns {SlideshowSettingsManager} instance + */ + constructor() { + const {order, speed, repeat, sub} = mega.slideshow.settings; + this._settings = [speed, order, repeat, sub]; + + Object.freeze(this); + } + + /** + * Check if settings current render has to be updated + * @param {Object} $container - jquery element containing settings + * @returns {Boolean} whether current render must be updated + */ + hasToUpdateRender($container) { + for (let i = 0; i < this._settings.length; i++) { + const setting = this._settings[i]; + if (typeof setting.hasToUpdateRender === 'function' && setting.hasToUpdateRender($container)) { + return true; + } + } + return false; + } + + /** + * Render slideshow settings UI according to config values + * Settings UI elements will be provided with config change event bindings + * Set default config in case undefined + * @param {Object} $container - jquery element containing settings + * @param {Function} onConfigChange - apply on config change + * @returns {void} + */ + render($container, onConfigChange) { + const setSettingsDefaults = (exclude) => { + const viewercfg = {}; + for (let i = 0; i < this._settings.length; i++) { + const setting = this._settings[i]; + assert(typeof setting.getDefaultCfg === 'function', + `"${setting.name}" setting must implement "getDefaultCfg" method`); + if (exclude === undefined || setting.name !== exclude) { + viewercfg[setting.name] = setting.getDefaultCfg(); + } + } + fmconfig.viewercfg = viewercfg; + }; + + const onUpdate = (name, cfg) => { + if (fmconfig.viewercfg === undefined) { + setSettingsDefaults(name); + } + if (cfg !== fmconfig.viewercfg[name]) { + fmconfig.viewercfg[name] = cfg; + mega.config.set('viewercfg', fmconfig.viewercfg); + onConfigChange(name); + this._onConfigChange($container, name, cfg); + } + }; + + for (let i = 0; i < this._settings.length; i++) { + const setting = this._settings[i]; + assert(typeof setting.render === 'function', + `"${setting.name}" setting must implement "render" method`); + setting.render($container, onUpdate); + } + + this._onConfigChange($container); + } + + /** + * Notify settings about changes in configuration + * @param {Object} $container - jquery element containing settings + * @param {String} name - setting name + * @param {Number} cfg - config value + * @returns {void} + */ + _onConfigChange($container, name, cfg) { + for (let i = 0; i < this._settings.length; i++) { + const setting = this._settings[i]; + if (typeof setting.onConfigChange === 'function') { + setting.onConfigChange($container, name, cfg); + } + } + } + }; +}); + +var previews = Object.create(null); +var preqs = Object.create(null); +var pfails = Object.create(null); +var slideshowid; + +(function _imageViewerSlideShow(global) { + "use strict"; + + var zoom_mode; + var origImgWidth; + var slideshowplay; + var slideshowpause; + var origImgHeight; + var slideshowTimer; + var mouseIdleTimer; + var fullScreenManager; + var _hideCounter = false; + var switchedSides = false; + var fitToWindow = Object.create(null); + var _pdfSeen = false; + var optionsMenu; + var settingsMenu; + var preselection; + const broadcasts = []; + let isSlideshowInit = false; + + const onConfigChange = (name) => { + if (name === 'speed') { + slideshow_timereset(); + } + }; + + const events = [ + 'mega:openfolder', + 'updFileManagerUI', + 'chat_image_preview', + 'mega:gallery:view:after' + ]; + + const listener = () => { + if (isSlideshowInit) { + mega.slideshow.manager.setState({}); + } + }; + + for (let i = 0; i < events.length; i++) { + mBroadcaster.addListener(events[i], listener); + } + + function slideshow_handle(raw) { + var result; + + if (slideshowid) { + result = raw ? slideshowid : slideshowid.slice(-8); + } + return result || false; + } + + function slideshowsteps() { + var $overlay = $('.media-viewer-container', 'body'); + var $controls = $('.gallery-btn', $overlay); + var $counter = $('header .counter', $overlay); + var $slideshowButton = $('footer .v-btn.slideshow', $overlay); + + if (isSlideshowInit) { + const { node, playIndex, playLength, backward, forward } = mega.slideshow.manager.next(slideshowid); + + if (!mega.slideshow.manager.isLast(playIndex) && forward === undefined) { + mega.slideshow.manager.setState({}); + slideshow_next(); + } + + if (slideshowplay && !slideshowpause && mega.slideshow.manager.isLast(playIndex) && forward === undefined) { + slideshow_toggle_pause($('.sl-btn.playpause', '.slideshow-controls')); + } + + if (playIndex !== undefined && playIndex > -1) { + $counter.text(escapeHTML(l.preview_counter) + .replace('%1', playIndex + 1) + .replace('%2', playLength)); + } + + if (_hideCounter || playIndex === -1 || playLength < 2) { + $counter.addClass('hidden'); + } + else { + $counter.removeClass('hidden'); + } + + if (playLength < 2) { + $controls.addClass('hidden'); + $slideshowButton.addClass('hidden'); + } + else if (node === undefined || !is_video(node)) { + $slideshowButton.removeClass('hidden'); + } + return { backward: [backward], forward: [forward], playLength }; + } + + return { backward: [], forward: [], playLength: 0 }; + } + + function slideshow_move(dir) { + var valid = true; + var h = slideshow_handle(); + var step = dir === 'next' ? 'forward' : 'backward'; + $.videoAutoFullScreen = $(document).fullScreen(); + + for (const i in dl_queue) { + if (dl_queue[i].id === h && dl_queue[i].preview) { + valid = false; + return false; + } + } + + if (!valid) { + return; + } + + var steps = slideshowsteps(); + if (steps[step].length > 0) { + const newShownHandle = steps[step][0]; + if ($.videoAutoFullScreen && is_video(M.getNodeByHandle(newShownHandle))) { + // Autoplay the next/prev video if it's in full screen mode + $.autoplay = newShownHandle; + } + + mBroadcaster.sendMessage(`slideshow:${dir}`, steps); + slideshow(newShownHandle); + } + } + + function slideshow_next() { + slideshow_move('next'); + } + + function slideshow_prev() { + slideshow_move('prev'); + } + + function slideshow_fullscreen($overlay) { + var $button = $('footer .v-btn.fullscreen', $overlay); + + // Set the video container's fullscreen state + var setFullscreenData = function(state) { + + if (page === 'download') { + updateDownloadPageContainer($overlay, state); + return false; + } + + if (state) { + $overlay.addClass('fullscreen').removeClass('browserscreen'); + $('i', $button).removeClass('icon-fullscreen-enter').addClass('icon-fullscreen-leave'); + } + else { + $overlay.addClass('browserscreen').removeClass('fullscreen'); + $('i', $button).removeClass('icon-fullscreen-leave').addClass('icon-fullscreen-enter'); + + // disable slideshow-mode exiting from full screen + if (slideshowplay) { + slideshow_imgControls(1); + } + } + + if (!$overlay.is('.video-theatre-mode')) { + slideshow_imgPosition($overlay); + } + }; + + fullScreenManager = FullScreenManager($button, $overlay).change(setFullscreenData); + } + + function updateDownloadPageContainer($overlay, state) { + + var $button = $('footer .v-btn.fullscreen', $overlay); + + if (state) { + $overlay.parents('.download.download-page').addClass('fullscreen').removeClass('browserscreen'); + $('i', $button).removeClass('icon-fullscreen-enter').addClass('icon-fullscreen-leave'); + $overlay.addClass('fullscreen').removeClass('browserscreen'); + } + else { + $overlay.parents('.download.download-page').removeClass('browserscreen fullscreen'); + $('i', $button).removeClass('icon-fullscreen-leave').addClass('icon-fullscreen-enter'); + $overlay.removeClass('browserscreen fullscreen'); + slideshow_imgPosition($overlay); + } + + if (!$overlay.is('.video-theatre-mode')) { + slideshow_imgPosition($overlay); + } + } + + function slideshow_favourite(n, $overlay) { + var $favButton = $('.context-menu .favourite', $overlay); + var root = M.getNodeRoot(n && n.h || false); + + if (!n || !n.p || root === M.InboxID || root === 'shares' && M.getNodeRights(n.p) < 2 || + folderlink || root === M.RubbishID || + (M.getNodeByHandle(n.h) && !M.getNodeByHandle(n.h).u && M.getNodeRights(n.p) < 2)) { + + $favButton.addClass('hidden'); + } + else { + $favButton.removeClass('hidden'); + + $favButton.rebind('click.mediaviewer', function() { + var $button = $(this); + var newFavState = Number(!M.isFavourite(n.h)); + + M.favourite(n.h, newFavState); + + if (newFavState) { + $('span', $button).text(l[5872]); + $('i', $button).removeClass('icon-favourite').addClass('icon-favourite-removed'); + } + else { + $('span', $button).text(l[5871]); + $('i', $button).removeClass('icon-favourite-removed').addClass('icon-favourite'); + } + }); + + // Change favourite icon + if (M.isFavourite(n.h)) { + $('span', $favButton).text(l[5872]); + $('i', $favButton).removeClass('icon-favourite').addClass('icon-favourite-removed'); + } + else { + $('span', $favButton).text(l[5871]); + $('i', $favButton).removeClass('icon-favourite-removed').addClass('icon-favourite'); + } + } + } + + function slideshow_bin(n, $overlay) { + const $infoButton = $('.v-btn.info', $overlay); + const $optionButton = $('.v-btn.options', $overlay); + const $sendToChat = $('.v-btn.send-to-chat', $overlay); + const root = M.getNodeRoot(n && n.h || false); + + if (root === M.RubbishID) { + $infoButton.removeClass('hidden'); + $optionButton.addClass('hidden'); + $sendToChat.addClass('hidden'); + } + else { + $infoButton.addClass('hidden'); + $optionButton.removeClass('hidden'); + } + + } + + function slideshow_remove(n, $overlay) { + + var $removeButton = $('.context-menu .remove', $overlay); + const $removeButtonV = $('.v-btn.remove', $overlay); + var $divider = $removeButton.closest('li').prev('.divider'); + var root = M.getNodeRoot(n && n.h || false); + + if (!n || !n.p || root === M.InboxID || (root === 'shares' && M.getNodeRights(n.p) < 2) || folderlink || + (M.getNodeByHandle(n.h) && !M.getNodeByHandle(n.h).u && M.getNodeRights(n.p) < 2) || M.chat) { + + $removeButton.addClass('hidden'); + $removeButtonV.addClass('hidden'); + $divider.addClass('hidden'); + } + else if (is_mobile) { + + $removeButtonV.rebind('click.mediaviewer', () => { + + // Show the folder/file delete overlay + mobile.deleteOverlay.show(n.h, () => { + + // After successful delete, hide the preview slideshow + history.back(); + }); + + // Prevent double tap + return false; + }); + } + else { + $removeButton.removeClass('hidden'); + + if (root === M.RubbishID) { + $removeButtonV.removeClass('hidden'); + } + else { + $removeButtonV.addClass('hidden'); + } + + $divider.removeClass('hidden'); + + const removeFunc = () => { + if (M.isInvalidUserStatus()) { + history.back(); + return false; + } + + // Has to exit the full screen mode in order to show remove confirmation diagram + if ($(document).fullScreen()) { + $(document).fullScreen(false); + } + + fmremove(); + return false; + }; + + $removeButton.rebind('click.mediaviewer', removeFunc); + $removeButtonV.rebind('click.mediaviewer', removeFunc); + } + + + } + + function slideshow_node(id, $overlay) { + var n = M.getNodeByHandle(id); + + if (!n) { + if (typeof id === 'object') { + n = new MegaNode(id); + } + else if (typeof dl_node !== 'undefined' && dl_node.h === id) { + n = dl_node; + } + } + + if ($overlay) { + var root = M.getNodeRoot(n && n.h || false); + var $getLinkBtn = $('.v-btn.getlink', $overlay); + + if (!n || !n.p || root === 'shares' || root === M.RubbishID || + (!folderlink && M.getNodeByHandle(n.h) && !M.getNodeByHandle(n.h).u && + M.getNodeRights(n.p) < 2)) { + + $getLinkBtn.addClass('hidden'); + } + else { + + $getLinkBtn.removeClass('hidden'); + $getLinkBtn.rebind('click.mediaviewer', function() { + if (is_mobile) { + mobile.linkOverlay.show(n.h); + } + else { + $(document).fullScreen(false); + + if (u_type === 0) { + ephemeralDialog(l[1005]); + } + else { + mega.Share.initCopyrightsDialog([slideshow_handle()]); + } + } + + return false; + }); + } + } + + return n || false; + } + + function slideshow_timereset() { + if (slideshowplay && !slideshowpause) { + clearTimeout(slideshowTimer); + slideshowTimer = setTimeout(slideshow_next, mega.slideshow.settings.speed.getValue()); + + if (is_mobile) { + $(window).one('blur.slideshowLoseFocus', () => { + clearTimeout(slideshowTimer); + }); + } + } + } + + function slideshow_zoomSlider(value = 100) { + const container = document.querySelector('.media-viewer-container'); + const wrapper = container && container.querySelector('.zoom-slider-wrap'); + const $elm = $('.zoom-slider', wrapper); + const setValue = tryCatch(() => { + wrapper.dataset.perc = value; + $elm.slider('value', value); + }); + + if (!wrapper) { + if (d) { + console.error('zoom-slider-wrap not found.'); + } + return; + } + + if ($elm.slider('instance')) { + // Update existing slider. + return setValue(); + } + + // Init zoom slider + $elm.slider({ + min: 1, + max: 1000, + range: 'min', + step: 0.01, + change: function(e, ui) { + $('.ui-slider-handle .mv-zoom-slider', this).text(formatPercentage(ui.value / 100)); + wrapper.dataset.perc = ui.value; + }, + slide: function(e, ui) { + $('.ui-slider-handle .mv-zoom-slider', this).text(formatPercentage(ui.value / 100)); + slideshow_zoom(container, false, ui.value); + }, + create: () => { + setValue(); + $('.ui-slider-handle', $elm).safeAppend( + `
                + ` + ); + } + }); + } + + // Inits Image viewer bottom control bar + function slideshow_imgControls(slideshow_stop, close) { + var $overlay = $('.media-viewer-container', 'body'); + var $slideshowControls = $('.slideshow-controls', $overlay); + var $slideshowControlsUpper = $('.slideshow-controls-upper', $overlay); + var $imageControls = $('.image-controls', $overlay); + var $viewerTopBar = $('header .viewer-bars', $overlay); + var $prevNextButtons = $('.gallery-btn', $overlay); + var $startButton = $('.v-btn.slideshow', $imageControls); + var $pauseButton = $('.sl-btn.playpause', $slideshowControls); + var $prevButton = $('.sl-btn.previous', $slideshowControls); + var $nextButton = $('.sl-btn.next', $slideshowControls); + var $zoomInButton = $('.v-btn.zoom-in', $imageControls); + var $zoomOutButton = $('.v-btn.zoom-out', $imageControls); + const $slideshowSettings = $('.slideshow-context-settings', $overlay); + + if (slideshow_stop) { + $viewerTopBar.removeClass('hidden'); + $imageControls.removeClass('hidden'); + $prevNextButtons.removeClass('hidden'); + $slideshowControls.addClass('hidden'); + $slideshowControlsUpper.addClass('hidden'); + $overlay.removeClass('slideshow').off('mousewheel.imgzoom'); + slideshow_play(false, close); + slideshowpause = false; + $pauseButton.attr('data-state', 'pause'); + $('i', $pauseButton).removeClass('icon-play').addClass('icon-pause'); + + clearTimeout(slideshowTimer); + $(window).off('blur.slideshowLoseFocus'); + slideshowsteps(); // update x of y counter + + if (is_mobile) { + M.noSleep(true).catch(dump); + } + + return false; + } + + $imageControls.removeClass('hidden'); + + // Bind Slideshow Mode button + $startButton.rebind('click.mediaviewer', function() { + if (isSlideshowInit && mega.slideshow.settings.manager.hasToUpdateRender($slideshowSettings)) { + mega.slideshow.settings.manager.render($slideshowSettings, onConfigChange); + } + + $overlay.addClass('slideshow'); + slideshow_play(true); + slideshow_timereset(); + $viewerTopBar.addClass('hidden'); + $imageControls.addClass('hidden'); + $slideshowControls.removeClass('hidden'); + $slideshowControlsUpper.removeClass('hidden'); + $prevNextButtons.addClass('hidden'); + zoom_mode = false; + + if (is_mobile) { + M.noSleep().catch(dump); + } + + // hack to start the slideshow in full screen mode + if (fullScreenManager) { + fullScreenManager.enterFullscreen(); + } + + return false; + }); + + // Bind Slideshow Pause button + $pauseButton.rebind('click.mediaviewer', function() { + slideshow_toggle_pause($(this)); + return false; + }); + + // Bind Slideshow Prev button + $prevButton.rebind('click.mediaviewer', function() { + slideshow_prev(); + slideshow_timereset(); + return false; + }); + + // Bind Slideshow Next button + $nextButton.rebind('click.mediaviewer', function() { + slideshow_next(); + slideshow_timereset(); + return false; + }); + + $('.v-btn.browserscreen', $overlay).rebind('click.media-viewer', () => { + $overlay.addClass('browserscreen'); + $overlay.parents('.download.download-page').addClass('browserscreen'); + slideshow_imgPosition($overlay); + return false; + }); + + // Bind ZoomIn button + $zoomInButton.rebind('click.mediaviewer', function() { + slideshow_zoom($overlay); + return false; + }); + + // Bind ZoomOut button + $zoomOutButton.rebind('click.mediaviewer', function() { + slideshow_zoom($overlay, 1); + return false; + }); + + // Allow mouse wheel to zoom in/out + $('.media-viewer', $overlay).rebind('mousewheel.imgzoom', function(e) { + var delta = Math.max(-1, Math.min(1, (e.wheelDelta || e.deltaY || -e.detail))); + + if (delta > 0) { + $zoomInButton.trigger('click.mediaviewer'); + } + else { + $zoomOutButton.trigger('click.mediaviewer'); + } + return false; + }); + + // Bind Slideshow Close button + $('.sl-btn.close', is_mobile ? $slideshowControls : $slideshowControlsUpper).rebind('click.mediaviewer', () => { + slideshowplay_close(); + return false; + }); + } + + // Inits Pick and pan mode if image doesn't fit into the container + function slideshow_pickpan($overlay, close) { + var $imgWrap = $('.img-wrap', $overlay); + var $img = $('img.active', $imgWrap); + var wrapWidth = $imgWrap.outerWidth(); + var wrapHeight = $imgWrap.outerHeight(); + var imgWidth = switchedSides ? $img.height() : $img.width(); + var imgHeight = switchedSides ? $img.width() : $img.height(); + var dragStart = 0; + var lastPos = {x: null, y: null}; + + if (close) { + $imgWrap.off('mousedown.pickpan'); + $imgWrap.off('mouseup.pickpan mouseout.pickpan'); + $imgWrap.off('mousemove.pickpan'); + return false; + } + + // Get cursor last position before dragging + $imgWrap.rebind('mousedown.pickpan', function(event) { + dragStart = 1; + lastPos = {x: event.pageX, y: event.pageY}; + $(this).addClass('picked'); + }); + + // Stop dragging + $imgWrap.rebind('mouseup.pickpan mouseout.pickpan', function() { + dragStart = 0; + $(this).removeClass('picked'); + }); + + // Drag image if it doesn't fit into the container + $imgWrap.rebind('mousemove.pickpan', function(event) { + if (dragStart) { + var currentPos = {x: event.pageX, y: event.pageY}; + var changeX = currentPos.x - lastPos.x; + var changeY = currentPos.y - lastPos.y; + + /* Save mouse position */ + lastPos = currentPos; + + var imgTop = $img.position().top; + var imgLeft = $img.position().left; + var imgTopNew = imgTop + changeY; + var imgLeftNew = imgLeft + changeX; + + // Check if top and left do not fall outside the image + if (wrapHeight >= imgHeight) { + imgTopNew = (wrapHeight - imgHeight) / 2; + } + else if (imgTopNew > 0) { + imgTopNew = 0; + } + else if (imgTopNew < (wrapHeight - imgHeight)) { + imgTopNew = wrapHeight - imgHeight; + } + if (wrapWidth >= imgWidth) { + imgLeftNew = (wrapWidth - imgWidth) / 2; + } + else if (imgLeftNew > 0) { + imgLeftNew = 0; + } + else if (imgLeftNew < (wrapWidth - imgWidth)) { + imgLeftNew = wrapWidth - imgWidth; + } + + $img.css({ + 'left': imgLeftNew + 'px', + 'top': imgTopNew + 'px' + }); + + return false; + } + }); + } + + // Zoom In/Out function + function slideshow_zoom($overlay, zoomout, value) { + const $img = $('.img-wrap img.active', $overlay); + const $percLabel = $('.zoom-slider-wrap', $overlay); + let newPerc = parseFloat($percLabel.attr('data-perc')) || 1; + let newImgWidth; + let zoomStep; + + if (value) { + newPerc = parseFloat(value); + } + else if (zoomout) { + zoomStep = (newPerc * 0.9).toFixed(2); + newPerc = zoomStep >= 1 ? zoomStep : 1; + } + else if (!zoomout) { + zoomStep = (newPerc * 1.2).toFixed(2); + newPerc = zoomStep <= 1000 ? zoomStep : 1000; + console.log(newPerc); + } + + newPerc /= devicePixelRatio * 100; + newImgWidth = origImgWidth * newPerc; + + $img.css({ + 'width': switchedSides ? newImgHeight : newImgWidth + }); + + zoom_mode = true; + + // Set zoom, position values and init pick and pan + slideshow_imgPosition($overlay); + } + + // Sets zoom percents and image position + function slideshow_imgPosition($overlay) { + const $imgWrap = $('.img-wrap', $overlay); + const $img = $('img.active', $overlay); + const id = $imgWrap.attr('data-image'); + const viewerWidth = $imgWrap.width(); + const viewerHeight = $imgWrap.height(); + let imgWidth = 0; + let imgHeight = 0; + let w_perc = 0; + let h_perc = 0; + let newImgWidth = 0; + + if (zoom_mode) { + imgWidth = switchedSides ? $img.height() : $img.width(); + imgHeight = switchedSides ? $img.width() : $img.height(); + + // Init pick and pan mode if Image larger its wrapper + if (imgWidth > viewerWidth || imgHeight > viewerHeight) { + slideshow_pickpan($overlay); + } + else { + slideshow_pickpan($overlay, 1); + } + } + else { + w_perc = viewerWidth / origImgWidth; + h_perc = viewerHeight / origImgHeight; + $img.removeAttr('style'); + imgWidth = (switchedSides ? $img.height() : $img.width()) || origImgWidth; + imgHeight = (switchedSides ? $img.width() : $img.height()) || origImgHeight; + + // Set minHeight, minWidth if image is bigger then browser window + // Check if height fits browser window after reducing width + if (origImgWidth > viewerWidth && origImgHeight * w_perc <= viewerHeight) { + imgWidth = viewerWidth; + imgHeight = origImgHeight * w_perc; + newImgWidth = switchedSides ? imgHeight : imgWidth; + } + // Check if width fits browser window after reducing height + else if ((origImgWidth > viewerWidth && origImgHeight * w_perc > viewerHeight) + || (origImgWidth < viewerWidth && origImgHeight > viewerHeight)) { + + imgWidth = origImgWidth * h_perc; + imgHeight = viewerHeight; + newImgWidth = switchedSides ? imgHeight : imgWidth; + } + // Check if preview and original imgs are loading and height fits browser window after increasing width + else if (fitToWindow[id] && origImgHeight < viewerHeight + && origImgWidth < viewerWidth && origImgHeight * w_perc <= viewerHeight) { + + imgWidth = viewerWidth; + imgHeight = origImgHeight * w_perc; + newImgWidth = switchedSides ? imgHeight : imgWidth; + } + // Check if preview and original imgs are loading and width fits browser window after increasing height + else if (fitToWindow[id] && imgHeight < viewerHeight + && origImgWidth < viewerWidth && origImgWidth * h_perc <= viewerWidth) { + + imgWidth = origImgWidth * h_perc; + imgHeight = viewerHeight; + newImgWidth = switchedSides ? imgHeight : imgWidth; + } + else { + newImgWidth = switchedSides ? origImgHeight : origImgWidth; + } + + $img.css({ + 'width': newImgWidth + }); + } + + $img.css({ + 'left': (viewerWidth - imgWidth) / 2, + 'top': (viewerHeight - imgHeight) / 2, + }); + slideshow_zoomSlider(imgWidth / origImgWidth * 100 * devicePixelRatio); + } + + function sendToChatHandler() { + $(document).fullScreen(false); + const $wrapper = $('.media-viewer-container', 'body'); + const video = $('video', $wrapper).get(0); + if (video && !video.paused && !video.ended) { + video.pause(); + } + $.noOpenChatFromPreview = true; + openCopyDialog('conversations'); + } + + // Viewer Init + // eslint-disable-next-line complexity + function slideshow(id, close, hideCounter, filteredNodeArr) { + if (!close && M.isInvalidUserStatus()) { + return; + } + + var $overlay = $('.media-viewer-container', 'body'); + var $content = $('.content', $overlay); + var $controls = $('footer, header, .gallery-btn', $overlay); + var $imgWrap = $('.img-wrap', $content); + const $pendingBlock = $('.viewer-pending', $content); + var $imageControls = $('.image-controls', $overlay); + var $zoomSlider = $('.zoom-slider-wrap', $imageControls); + var $playVideoButton = $('.play-video-button', $content); + var $video = $('video', $content); + var $videoControls = $('.video-controls', $overlay); + var $dlBut = $('.v-btn.download', $overlay); + var $prevNextButtons = $('.gallery-btn', $content); + var $document = $(document); + const $sendToChat = $('.v-btn.send-to-chat', $overlay); + + if (d) { + console.log('slideshow', id, close, slideshowid); + } + + if (close) { + sessionStorage.removeItem('previewNode'); + sessionStorage.removeItem('previewTime'); + zoom_mode = false; + switchedSides = false; + slideshowid = false; + $.videoAutoFullScreen = false; + _hideCounter = false; + slideshow_play(false, true); + preselection = undefined; + $overlay.removeClass('video video-theatre-mode mouse-idle slideshow fullscreen') + .addClass('hidden'); + $playVideoButton.addClass('hidden'); + $videoControls.addClass('hidden'); + $zoomSlider.attr('data-perc', 100); + $(window).off('resize.imgResize'); + $document.off('keydown.slideshow mousemove.idle'); + $imgWrap.attr('data-count', ''); + $('img', $imgWrap).attr('src', '').removeAttr('style').removeClass('active'); + $('.v-btn.active', $controls).removeClass('active'); + if (optionsMenu) { + contextMenu.close(optionsMenu); + } + if (settingsMenu) { + contextMenu.close(settingsMenu); + } + if (fullScreenManager) { + fullScreenManager.destroy(); + fullScreenManager = null; + } + for (var i in dl_queue) { + if (dl_queue[i] && dl_queue[i].id === id) { + if (dl_queue[i].preview) { + dlmanager.abort(dl_queue[i]); + } + break; + } + } + for (let i = broadcasts.length; i--;) { + mBroadcaster.removeListener(broadcasts[i]); + } + slideshow_imgControls(1, true); + mBroadcaster.sendMessage('slideshow:close'); + slideshow_freemem(); + $(window).off('blur.slideshowLoseFocus'); + + if (is_mobile) { + M.noSleep(true).catch(dump); + } + + if (_pdfSeen) { + _pdfSeen = false; + + tryCatch(function() { + var ev = document.createEvent("HTMLEvents"); + ev.initEvent("pdfjs-cleanup.meganz", true); + document.getElementById('pdfpreviewdiv1').contentDocument.body.dispatchEvent(ev); + })(); + } + + return false; + } + + var n = slideshow_node(id, $overlay); + if (!n) { + return; + } + + // Checking if this the first preview (not a preview navigation) + if (!slideshowid) { + // then pushing fake states of history/hash + if (page !== 'download' && (!history.state || history.state.view !== id)) { + pushHistoryState(); + } + _hideCounter = hideCounter; + } + + slideshowid = n.ch || n.h; + if (window.selectionManager) { + selectionManager.resetTo(n.h); + } + else { + $.selected = [n.h]; + } + mBroadcaster.sendMessage('slideshow:open', n); + + if (page !== 'download') { + sessionStorage.setItem('previewNode', id); + pushHistoryState(true, Object.assign({subpage: page}, history.state, {view: slideshowid})); + } + + // Clear previousy set data + zoom_mode = false; + switchedSides = false; + $('header .file-name', $overlay).text(n.name); + $('.viewer-error, #pdfpreviewdiv1', $overlay).addClass('hidden'); + $('.viewer-progress', $overlay).addClass('vo-hidden'); + + if (is_mobile) { + $('.v-btn.slideshow', $imageControls).addClass('hidden'); + if (is_video(n)) { + $('.zoom-slider-wrap', $imageControls).addClass('hidden'); + } + else { + $('.zoom-slider-wrap', $imageControls).removeClass('hidden'); + } + } + else { + $imageControls.addClass('hidden'); + } + $prevNextButtons.addClass('hidden'); + $playVideoButton.addClass('hidden'); + $('.viewer-progress p, .video-time-bar', $content).removeAttr('style'); + + if (!slideshowplay) { + $('img', $imgWrap).removeClass('active'); + } + + // Clear video file data + $video.css('background-image', '').removeAttr('poster src').addClass('hidden'); + $videoControls.addClass('hidden'); + $('.video-time-bar', $videoControls).removeAttr('style'); + $('.video-progress-bar', $videoControls).removeAttr('title'); + $('.video-timing', $videoControls).text(''); + + // Init full screen icon and related data attributes + if ($document.fullScreen()) { + $('.v-btn.fullscreen i', $imageControls) + .addClass('icon-fullscreen-leave') + .removeClass('icon-fullscreen-enter'); + + $content.attr('data-fullscreen', 'true'); + $('.v-btn.fs', $videoControls).addClass('cancel-fullscreen').removeClass('go-fullscreen'); + $('.v-btn.fs i', $videoControls).addClass('icon-fullscreen-leave').removeClass('icon-fullscreen-enter'); + } + else { + $('.v-btn.fullscreen i', $imageControls) + .removeClass('icon-fullscreen-leave') + .addClass('icon-fullscreen-enter'); + + $content.attr('data-fullscreen', 'false'); + $('.v-btn.fs', $videoControls).removeClass('cancel-fullscreen').addClass('go-fullscreen'); + $('.v-btn.fs i', $videoControls).removeClass('icon-fullscreen-leave').addClass('icon-fullscreen-enter'); + } + + // Turn off pick and pan mode + slideshow_pickpan($overlay, 1); + + // Options context menu + if (!optionsMenu) { + optionsMenu = contextMenu.create({ + template: $('#media-viewer-options-menu', $overlay)[0], + sibling: $('.v-btn.options', $overlay)[0], + animationDuration: 150, + boundingElement: $overlay[0] + }); + } + + // Bind static events is viewer is not in slideshow mode to avoid unnecessary rebinds + if (!slideshowplay) { + $overlay.removeClass('fullscreen browserscreen mouse-idle slideshow video pdf'); + + // Bind keydown events + $document.rebind('keydown.slideshow', function(e) { + const isDownloadPage = page === 'download'; + + if (e.keyCode === 37 && slideshowid && !e.altKey && !e.ctrlKey && !isDownloadPage) { + slideshow_prev(); + } + else if (e.keyCode === 39 && slideshowid && !isDownloadPage) { + slideshow_next(); + } + else if (e.keyCode === 46 && fullScreenManager) { + fullScreenManager.exitFullscreen(); + } + else if (e.keyCode === 27 && slideshowid && !$document.fullScreen()) { + if ($.dialog) { + closeDialog($.dialog); + } + else if (slideshowplay) { + slideshow_imgControls(1); + } + else if (isDownloadPage) { + $overlay.removeClass('fullscreen browserscreen'); + $overlay.parents('.download.download-page').removeClass('fullscreen browserscreen'); + slideshow_imgPosition($overlay); + } + else { + history.back(); + return false; + } + } + else if ((e.keyCode === 8 || e.key === 'Backspace') && !isDownloadPage && !$.copyDialog) { + history.back(); + return false; + } + }); + + // Close icon + $('.v-btn.close, .viewer-error-close', $overlay).rebind('click.media-viewer', function() { + if (page === 'download') { + if ($(document).fullScreen()) { + fullScreenManager.exitFullscreen(); + } + $overlay.removeClass('fullscreen browserscreen'); + $overlay.parents('.download.download-page').removeClass('fullscreen browserscreen'); + if (is_mobile) { + zoom_mode = false; + } + slideshow_imgPosition($overlay); + return false; + } + history.back(); + return false; + }); + + // Properties icon + $('.context-menu .info, .v-btn.info', $overlay).rebind('click.media-viewer', () => { + $document.fullScreen(false); + propertiesDialog(); + return false; + }); + + if (is_mobile) { + + const isDownload = page === 'download'; + + if (isDownload) { + + $controls.addClass('hidden'); + $controls = $controls.not('button'); + } + + $('.img-wrap', $overlay).rebind('tap.media-viewer', () => { + + if (slideshowplay) { + return; + } + + if (isDownload && !$overlay.hasClass('fullscreen')) { + $overlay.addClass('fullscreen'); + $controls.addClass('hidden'); + slideshow_imgPosition($overlay); + } + + if ($controls.hasClass('hidden')) { + $controls.removeClass('hidden'); + } + else { + $controls.addClass('hidden'); + } + + return false; + }); + } + else { + // Options icon + $('.v-btn.options', $overlay).rebind('click.media-viewer', function() { + var $this = $(this); + + if ($(this).hasClass('hidden')) { + return false; + } + if ($this.hasClass('active')) { + $this.removeClass('active deactivated'); + contextMenu.close(optionsMenu); + } + else { + $this.addClass('active deactivated').trigger('simpletipClose'); + // xxx: no, this is not a window.open() call.. + // eslint-disable-next-line local-rules/open + contextMenu.open(optionsMenu); + } + return false; + }); + + // Settings icon + $('.sl-btn.settings', $overlay).rebind('click.media-viewer-settings', function() { + var $this = $(this); + + if ($(this).hasClass('hidden')) { + return false; + } + if ($this.hasClass('active')) { + $this.removeClass('active deactivated'); + $('i', $this).removeClass('icon-slider-filled'); + $('i', $this).addClass('icon-slider-outline'); + + contextMenu.close(settingsMenu); + $overlay.removeClass('context-menu-open'); + } + else { + $this.addClass('active deactivated').trigger('simpletipClose'); + $('i', $this).removeClass('icon-slider-outline'); + $('i', $this).addClass('icon-slider-filled'); + + // xxx: no, this is not a window.open() call.. + // eslint-disable-next-line local-rules/open + contextMenu.open(settingsMenu); + $overlay.addClass('context-menu-open'); + } + return false; + }); + + if (fminitialized && !folderlink && u_type === 3 && M.currentrootid !== M.RubbishID) { + $sendToChat.removeClass('hidden'); + } + + $sendToChat.rebind('click.media-viewer', () => { + if (megaChatIsReady) { + sendToChatHandler(); + } + else { + showToast('send-chat', l[17794]); + mBroadcaster.once('chat_initialized', () => sendToChatHandler()); + } + }); + + // Close context menu + $overlay.rebind('mouseup.media-viewer', (e) => { + + $('.v-btn.options', $overlay).removeClass('active deactivated'); + contextMenu.close(optionsMenu); + + if (!$(e.target).parents('.slideshow-context-settings').length) { + const $settingsButton = $('.sl-btn.settings', $overlay); + $settingsButton.removeClass('active deactivated'); + $('i', $settingsButton).removeClass('icon-slider-filled'); + $('i', $settingsButton).addClass('icon-slider-outline'); + contextMenu.close(settingsMenu); + $overlay.removeClass('context-menu-open'); + } + }); + } + + // Favourite Icon + slideshow_favourite(n, $overlay); + + // Remove Icon + slideshow_remove(n, $overlay); + if (filteredNodeArr && Array.isArray(filteredNodeArr)) { + preselection = filteredNodeArr; + } + + // Settings menu initialization + if (!settingsMenu) { + settingsMenu = contextMenu.create({ + template: $('#media-viewer-settings-menu', $overlay)[0], + sibling: $('.sl-btn.settings', $overlay)[0], + animationDuration: 150, + boundingElement: $overlay[0] + }); + } + + // Slideshow initialization + if (!isSlideshowInit) { + mega.slideshow.settings.manager.render($('.slideshow-context-settings', $overlay), onConfigChange); + mega.slideshow.manager.setState({ nodes: preselection }); + isSlideshowInit = true; + } + else if (preselection !== undefined) { + mega.slideshow.manager.setState({ nodes: preselection }); + } + + // Icons for rubbish bin + slideshow_bin(n, $overlay); + + // Previous/Next viewer buttons + var steps = slideshowsteps(); + + if (steps.playLength > 1 && steps.backward.length) { + $prevNextButtons.filter('.previous').removeClass('hidden'); + } + if (steps.playLength > 1 && steps.forward.length) { + $prevNextButtons.filter('.next').removeClass('hidden'); + } + + $prevNextButtons.rebind('click.mediaviewer', function() { + var c = $(this).attr('class'); + + if (c && c.indexOf('hidden') === -1) { + var steps = slideshowsteps(); + if (c.indexOf('previous') > -1 && steps.backward.length > 0) { + slideshow_prev(); + } + else if (c.indexOf('next') > -1 && steps.forward.length > 0) { + slideshow_next(); + } + } + + return false; + }); + + const idleAction = is_mobile ? 'touchstart' : 'mousemove'; + + clearTimeout(mouseIdleTimer); + $document.off(`${idleAction}.idle`); + $controls.off('mousemove.idle'); + + // Slideshow Mode Init + if (is_image3(n)) { + slideshow_imgControls(); + + // Autohide controls + (function _() { + clearTimeout(mouseIdleTimer); + $overlay.removeClass('mouse-idle'); + mouseIdleTimer = setTimeout(function() { + $overlay.addClass('mouse-idle'); + }, 2000); + $document.rebind(`${idleAction}.idle`, _); + })(); + + if (!is_mobile) { + $controls.rebind('mousemove.idle', () => { + onIdle(() => { + clearTimeout(mouseIdleTimer); + }); + }); + } + + if (fullScreenManager && fullScreenManager.state) { + $('.viewer-bars', $overlay).noTransition(() => { + $overlay.addClass('fullscreen'); + }); + } + + if (!fullScreenManager) { + slideshow_fullscreen($overlay); + } + } + } + + $dlBut.rebind('click.media-viewer', function _dlButClick() { + + if (this.classList.contains('disabled')) { + return false; + } + + var p = previews[n && n.h]; + + if (p && p.full && Object(p.buffer).byteLength) { + M.saveAs(p.buffer, n.name) + .fail(function(ex) { + if (d) { + console.debug(ex); + } + p.full = p.buffer = false; + _dlButClick(); + }); + return false; + } + + if (is_mobile) { + mobile.downloadOverlay.showOverlay(n.h); + return false; + } + + for (var i = dl_queue.length; i--;) { + if (dl_queue[i] && dl_queue[i].id === slideshow_handle() && dl_queue[i].preview) { + dl_queue[i].preview = false; + M.openTransfersPanel(); + return; + } + } + + // TODO: adapt the above code to work on the downloads page if we need to download the original + if (page === 'download') { + $('button.download-file').click(); + } + else if (M.d[slideshow_handle()]) { + M.addDownload([slideshow_handle()]); + } + else { + M.addDownload([n]); + } + + return false; + }); + + if ((n.p || M.chat || page === 'download') && M.getNodeRoot(n.p) !== M.RubbishID) { + $dlBut.removeClass('hidden'); + } + else { + $dlBut.addClass('hidden'); + } + + if (previews[n.h]) { + if (previews[n.h].fromChat) { + previews[n.h].fromChat = null; + + if (previews[n.h].full) { + previewimg(n.h, previews[n.h].buffer); + } + else { + fetchsrc(n); + } + } + else { + previewsrc(n.h); + } + + fetchnext(); + } + else { + $('img', $imgWrap).attr('src', ''); + $pendingBlock.removeClass('hidden'); + + if (!preqs[n.h]) { + fetchsrc(n); + } + } + + $overlay.removeClass('hidden'); + + if (is_mobile) { + const isVideo = is_video(n); + const listener = mBroadcaster.addListener('orientationchange', (mode) => { + + requestAnimationFrame(() => { + + if (slideshowplay) { + // If the image slideshow is in progress, disable the orientation change function + return false; + } + + if (isVideo) { + + if (mode === 'landscape') { + + $controls.addClass('hidden'); + } + else { + $controls.removeClass('hidden'); + } + } + }); + }); + broadcasts.push(listener); + } + } + + function slideshow_toggle_pause($button) { + clearTimeout(slideshowTimer); + if ($button.attr('data-state') === 'pause') { + $button.attr('data-state', 'play'); + $('i', $button).removeClass('icon-pause').addClass('icon-play'); + slideshowpause = true; + } + else { + $button.attr('data-state', 'pause'); + $('i', $button).removeClass('icon-play').addClass('icon-pause'); + slideshowTimer = setTimeout(slideshow_next, mega.slideshow.settings.speed.getValue()); + slideshowpause = false; + } + } + + function slideshow_play(isPlayMode, isAbortFetch) { + if (isSlideshowInit) { + mega.slideshow.manager.setState({ + currentNodeId: slideshowid, + isPlayMode, + isAbortFetch, + isNotBuildPlaylist: !isPlayMode && !slideshowplay + }); + } + slideshowplay = isPlayMode; + } + + function slideshowplay_close() { + slideshow_imgControls(1, true); + + // hack to also stop fullscreen + if (fullScreenManager) { + fullScreenManager.exitFullscreen(); + } + } + + function fetchnext() { + var n = M.getNodeByHandle(slideshowsteps().forward[0]); + + if (String(n.fa).indexOf(':1*') > -1 && !preqs[n.h]) { + + if (!previews[n.h] || previews[n.h].fromChat) { + + if (previews[n.h]) { + previews[n.h].fromChat = null; + } + + fetchsrc(n.h); + } + } + } + + function fetchsrc(id) { + var n = slideshow_node(id); + if (!n) { + console.error('Node "%s" not found...', id); + return false; + } + + var eot = function eot(id, err) { + delete preqs[id]; + delete pfails[id]; + if (n.s > 13e7) { + return previewimg(id, null); + } + M.addDownload([id], false, err ? -1 : true); + }; + eot.timeout = 8500; + + var preview = function preview(ctx, h, u8) { + previewimg(h, u8, ctx.type); + + if (isThumbnailMissing(n)) { + createNodeThumbnail(n, u8); + } + if (h === slideshow_handle()) { + fetchnext(); + } + delete pfails[h]; + }; + + + if (d) { + console.debug('slideshow.fetchsrc', id, n, n.h); + } + + if (fileext(n.name) === 'pdf') { + if (!preqs[n.h]) { + preqs[n.h] = 1; + + M.gfsfetch(n.link || n.h, 0, -1).then((data) => { + preview({type: 'application/pdf'}, n.h, data.buffer); + }).catch((ex) => { + if (d) { + console.warn('Failed to retrieve PDF, failing back to broken eye image...', ex); + } + + previewimg(n.h, null); + delete previews[n.h].buffer; + preqs[n.h] = 0; // to retry again + if (ex === EOVERQUOTA || Object(ex.target).status === 509) { + dlmanager.setUserFlags(); + dlmanager.showOverQuotaDialog(); + } + }); + } + return false; + } + + if (is_video(n)) { + if (!preqs[n.h]) { + preqs[n.h] = 1; + + if (String(n.fa).indexOf(':1*') > 0) { + getImage(n, 1) + .then(uri => { + if (previews[n.h]) { + previews[n.h].poster = uri; + } + return uri; + }) + .dump('preload.poster.' + n.h); + } + + M.require('videostream').done(function() { + if (preqs[n.h]) { + previewimg(n.h, Array(26).join('x'), filemime(n, 'video/mp4')); + } + }).fail(function() { + console.error('Failed to load videostream.js'); + }); + } + return false; + } + + if (pfails[n.h]) { + // for slideshow_next/prev + if (slideshow_handle() === n.h) { + return eot(n.h, 1); + } + delete pfails[n.h]; + } + + preqs[n.h] = 1; + var maxSize = ua.details.engine === 'Trident' ? 12 : 50; + var loadOriginal = n.s < maxSize * 1048576 && is_image(n) === 1; + var loadPreview = !loadOriginal || !slideshowplay && n.s > 1048576; + var onPreviewError = loadOriginal ? previewimg.bind(window, n.h, null) : eot; + var getPreview = api_getfileattr.bind(window, {[n.h]: n}, 1, preview, onPreviewError); + + if (d) { + console.debug('slideshow.fetchsrc(%s), preview=%s original=%s', id, loadPreview, loadOriginal, n, n.h); + } + + var isCached = previews[n.h] && previews[n.h].buffer && !slideshowplay; + if (isCached) { + // e.g. hackpatch for chat who already loaded the preview... + if (n.s > 1048576) { + loadPreview = true; + getPreview = preview.bind(null, false, n.h, previews[n.h].buffer); + } + else { + loadPreview = false; + preview(false, n.h, previews[n.h].buffer); + } + } + + if (loadOriginal) { + var $overlay = $('.media-viewer-container'); + var $progressBar = $('.viewer-progress', $overlay); + + var progress = function(perc) { + var loadingDeg = 360 * perc / 100; + + if (slideshow_handle() !== n.h) { + if (d && ((perc | 0) % 10) < 1) { + console.debug('slideshow original image loading in background progress...', n.h, perc); + } + return; + } + $progressBar.removeClass('vo-hidden'); + + if (loadingDeg <= 180) { + $('.right-c p', $progressBar).css('transform', 'rotate(' + loadingDeg + 'deg)'); + $('.left-c p', $progressBar).removeAttr('style'); + } + else { + $('.right-c p', $progressBar).css('transform', 'rotate(180deg)'); + $('.left-c p', $progressBar).css('transform', 'rotate(' + (loadingDeg - 180) + 'deg)'); + } + + if (loadingDeg === 360) { + $progressBar.addClass('vo-hidden'); + $('p', $progressBar).removeAttr('style'); + } + }; + + M.gfsfetch(n.link || n.h, 0, -1, progress).then((data) => { + preview({type: filemime(n, 'image/jpeg')}, n.h, data.buffer); + if (!exifImageRotation.fromImage) { + previews[n.h].orientation = parseInt(EXIF.readFromArrayBuffer(data, true).Orientation) || 1; + } + }).catch((ex) => { + if (ex === EOVERQUOTA || Object(ex.target).status === 509) { + eventlog(99703, true); + } + + if (d) { + console.debug('slideshow failed to load original %s', n.h, ex.target && ex.target.status || ex); + } + + if (slideshow_handle() === n.h) { + $progressBar.addClass('vo-hidden'); + } + + if (!(loadPreview || isCached)) { + getPreview(); + } + + slideshow_timereset(); + }); + } + + if (loadPreview) { + if (loadOriginal) { + fitToWindow[n.h] = 1; + } + getPreview(); + } + } + + // start streaming a video file + function slideshow_videostream(id, $overlay) { + if (!$overlay || !$overlay.length) { + $overlay = $('video:visible').closest('.media-viewer'); + } + var n = slideshow_node(id, $overlay); + var $content = $('.content', $overlay); + const $pendingBlock = $('.viewer-pending', $content); + var $video = $('video', $content); + var $playVideoButton = $('.play-video-button', $content); + let bgsize = 'auto'; + + if (is_audio(n)) { + bgsize = 'contain'; + } + else { + if (previews[id].fma === undefined) { + previews[id].fma = MediaAttribute(n).data || false; + } + + if (previews[id].fma.width > previews[id].fma.height) { + bgsize = 'cover'; + } + } + + $playVideoButton.rebind('click', function() { + if (dlmanager.isOverQuota) { + return dlmanager.showOverQuotaDialog(); + } + + var destroy = function() { + $pendingBlock.addClass('hidden').end().trigger('video-destroy'); + + if (preqs[n.h] && preqs[n.h] instanceof Streamer) { + mBroadcaster.removeListener(preqs[n.h].ev1); + mBroadcaster.removeListener(preqs[n.h].ev2); + mBroadcaster.removeListener(preqs[n.h].ev3); + mBroadcaster.removeListener(preqs[n.h].ev4); + + preqs[n.h].kill(); + preqs[n.h] = false; + } + + sessionStorage.removeItem('previewNode'); + sessionStorage.removeItem('previewTime'); + }; + + // Show loading spinner until video is playing + $pendingBlock.removeClass('hidden'); + $('.video-controls', $overlay).removeClass('hidden'); + $overlay.addClass('video-theatre-mode'); + + // Hide play button. + $(this).addClass('hidden'); + $('.video-controls .playpause i', $overlay).removeClass('icon-play').addClass('icon-pause'); + + if (is_mobile) { + requestAnimationFrame(() => mega.initMobileVideoControlsToggle($overlay)); + } + + initVideoStream(n, $overlay, destroy).done(streamer => { + preqs[n.h] = streamer; + + preqs[n.h].ev1 = mBroadcaster.addListener('slideshow:next', destroy); + preqs[n.h].ev2 = mBroadcaster.addListener('slideshow:prev', destroy); + preqs[n.h].ev3 = mBroadcaster.addListener('slideshow:open', destroy); + preqs[n.h].ev4 = mBroadcaster.addListener('slideshow:close', destroy); + + // If video is playing + preqs[n.h].on('playing', function() { + var video = this.video; + + if (video && video.duration) { + + if (isThumbnailMissing(n) && is_video(n) === 1 && n.u === u_handle && n.f !== u_handle) { + var took = Math.round(2 * video.duration / 100); + + if (d) { + console.debug('Video thumbnail missing, will take image at %s...', + secondsToTime(took)); + } + + this.on('timeupdate', function() { + if (video.currentTime < took) { + return true; + } + + this.getImage().then(createNodeThumbnail.bind(null, n)) + .catch(console.warn.bind(console)); + }); + } + + return false; + } + + return true; + }); + }).catch(console.warn.bind(console)); + }); + + $overlay.addClass('video'); + $video.attr('controls', false).removeClass('hidden'); + $playVideoButton.removeClass('hidden'); + $pendingBlock.addClass('hidden'); + $('.img-wrap', $content).addClass('hidden'); + $content.removeClass('hidden'); + + if (n.name) { + var c = MediaAttribute.getCodecStrings(n); + if (c) { + $('header .file-name', $overlay).attr('title', c); + } + } + + if (previews[id].poster !== undefined) { + // $video.attr('poster', previews[id].poster); + $video.css('background-size', bgsize); + $video.css('background-image', `url(${previews[id].poster})`); + } + else if (String(n.fa).indexOf(':1*') > 0) { + getImage(n, 1).then(function(uri) { + + previews[id].poster = uri; + + if (id === slideshow_handle()) { + if ($video.length && !$video[0].parentNode) { + // The video element got already destroyed/replaced due an error + $video = $('.content video', $overlay); + } + + // $video.attr('poster', uri); + $video.css('background-size', bgsize); + $video.css('background-image', `url(${uri})`); + } + }).catch(console.debug.bind(console)); + } + + previews[id].poster = previews[id].poster || ''; + + if ($.autoplay === id || page === 'download') { + queueMicrotask(() => { + $playVideoButton.trigger('click'); + }); + delete $.autoplay; + } + } + + function isThumbnailMissing(n) { + return !M.chat && (!n.fa || n.fa.indexOf(':0*') < 0); + } + + function createNodeThumbnail(n, ab) { + if (isThumbnailMissing(n)) { + if (d) { + console.log('Thumbnail found missing on preview, creating...', n.h, n); + } + var aes = new sjcl.cipher.aes([ + n.k[0] ^ n.k[4], + n.k[1] ^ n.k[5], + n.k[2] ^ n.k[6], + n.k[3] ^ n.k[7] + ]); + var img = is_image(n); + var vid = is_video(n); + createnodethumbnail(n.h, aes, n.h, ab, {raw: img !== 1 && img, isVideo: vid}); + } + } + + // a method to fetch scripts and files needed to run pdfviewer + // and then excute them on iframe element [#pdfpreviewdiv1] + function prepareAndViewPdfViewer(data) { + const signal = tryCatch(() => { + const elm = document.getElementById('pdfpreviewdiv1'); + elm.classList.remove('hidden'); + + const ev = document.createEvent("HTMLEvents"); + ev.initEvent("pdfjs-openfile.meganz", true); + ev.data = data.buffer || data.src; + elm.contentDocument.body.dispatchEvent(ev); + return true; + }); + + if (_pdfSeen) { + + if (signal()) { + return; + } + } + + M.require('pdfjs2', 'pdfviewer', 'pdfviewercss', 'pdfviewerjs').then(() => { + var myPage = pages['pdfviewer']; + myPage = myPage.replace('viewer.css', window.pdfviewercss); + myPage = myPage.replace('../build/pdf.js', window.pdfjs2); + myPage = myPage.replace('viewer.js', window.pdfviewerjs); + // remove then re-add iframe to avoid History changes [push] + var pdfIframe = document.getElementById('pdfpreviewdiv1'); + var newPdfIframe = document.createElement('iframe'); + newPdfIframe.id = 'pdfpreviewdiv1'; + newPdfIframe.src = 'about:blank'; + var pdfIframeParent = pdfIframe.parentNode; + pdfIframeParent.replaceChild(newPdfIframe, pdfIframe); + var doc = newPdfIframe.contentWindow.document; + doc.open(); + doc.write(myPage); + doc.addEventListener('pdfjs-webViewerInitialized.meganz', function ack() { + doc.removeEventListener('pdfjs-webViewerInitialized.meganz', ack); + queueMicrotask(signal); + }); + doc.close(); + _pdfSeen = true; + }); + } + + function previewsrc(id) { + var $overlay = $('.media-viewer-container', 'body'); + var $content = $('.content', $overlay); + var $imgWrap = $('.img-wrap', $content); + var $bottomBar = $('footer', $overlay); + var $pendingBlock = $('.viewer-pending', $content); + var $progressBlock = $('.viewer-progress', $content); + + var src = Object(previews[id]).src; + if (!src) { + console.error('Cannot preview %s', id); + return; + } + + var type = typeof previews[id].type === 'string' && previews[id].type || 'image/jpeg'; + mBroadcaster.sendMessage.apply(mBroadcaster, ['trk:event', 'preview'].concat(type.split('/'))); + + $overlay.removeClass('pdf video video-theatre-mode'); + $('embed', $content).addClass('hidden'); + $('video', $content).addClass('hidden'); + $imgWrap.removeClass('hidden'); + $('#pdfpreviewdiv1', $content).addClass('hidden'); + $bottomBar.removeClass('hidden'); + + if (previews[id].type === 'application/pdf') { + $overlay.addClass('pdf'); + $pendingBlock.addClass('hidden'); + $progressBlock.addClass('vo-hidden'); + $bottomBar.addClass('hidden'); + $imgWrap.addClass('hidden'); + // preview pdfs using pdfjs for all browsers #8036 + // to fix pdf compatibility - Bug #7796 + prepareAndViewPdfViewer(previews[id]); + api_req({a: 'log', e: 99660, m: 'Previewed PDF Document.'}); + return; + } + + if (/^(?:audio|video)\//i.test(previews[id].type)) { + return slideshow_videostream(id, $overlay); + } + + // Choose img to set src for Slideshow transition effect + var imgClass = $imgWrap.attr('data-count') === 'img1' ? 'img2' : 'img1'; + var replacement = false; + + if ($imgWrap.attr('data-image') === id) { + replacement = $imgWrap.attr('data-count'); + if (replacement) { + imgClass = replacement; + + if (d) { + console.debug('Replacing preview image with original', id, imgClass); + } + } + } + + var img = new Image(); + img.onload = img.onerror = function(ev) { + if (id !== slideshow_handle()) { + if (d) { + console.debug('Moved to another image, not displaying %s...', id); + } + return; + } + var src1 = this.src; + var $img = $('.' + imgClass, $imgWrap); + var rot = previews[id].orientation | 0; + + if (slideshowplay) { + if (previews[id].full + || previews[id].ffailed + || ev.type === 'error' + || is_image(M.getNodeByHandle(slideshowid)) !== 1) { + + slideshow_timereset(); + } + } + + if (ev.type === 'error') { + src1 = noThumbURI; + if (!replacement) { + // noThumbURI is a 240pt svg image over a 320pt container... + origImgWidth = origImgHeight = 320; + } + + if (d) { + console.debug('slideshow failed to preview image...', id, src, previews[id].prev, ev); + } + + // Restore last good preview + if (previews[id].prev) { + URL.revokeObjectURL(previews[id].src); + previews[id] = previews[id].prev; + delete previews[id].prev; + previews[id].ffailed = 1; + this.src = previews[id].src; + return; + } + } + else { + switchedSides = rot > 4; + + if (switchedSides) { + origImgWidth = this.naturalHeight; + origImgHeight = this.naturalWidth; + } + else { + origImgWidth = this.naturalWidth; + origImgHeight = this.naturalHeight; + } + + if (d) { + console.debug('slideshow loaded image %s:%sx%s, ' + + 'orientation=%s', id, origImgWidth, origImgHeight, rot); + } + + if (previews[id].fromChat !== undefined) { + replacement = false; + } + } + + // Apply img data to necessary image. If replacing preview->original, + // update only the img's src and percent-label, to preserve any zoomed status. + if (!replacement || switchedSides) { + if (ua.details.engine === 'Gecko') { + // Prevent an issue where some previous images are shown moving to next + $('.img-wrap img', $overlay).attr('src', ''); + } + $('img', $imgWrap).removeClass('active'); + $imgWrap.attr('data-count', imgClass); + $imgWrap.attr('data-image', id); + $img.attr('src', src1).one('load', () => { + $img.addClass('active'); + slideshow_imgPosition($overlay); + }); + + if (previews[id].brokenEye) { + $img.addClass('broken-eye'); + } + + $(window).rebind('resize.imgResize', function() { + slideshow_imgPosition($overlay); + }); + } + else if (src1 !== noThumbURI) { + $img.attr('src', src1).addClass('active'); + + if ($img.hasClass('broken-eye')) { + $img.addClass('vo-hidden').removeClass('broken-eye'); + } + + // adjust zoom percent label + onIdle(() => { + slideshow_imgPosition($overlay); + $img.removeClass('vo-hidden'); + }); + // slideshow_zoomSlider($img.width() / origImgWidth * 100 * devicePixelRatio); + } + + // Apply exit orientation + $img.removeClassWith('exif-rotation-').addClass('exif-rotation-' + rot).attr('data-exif', rot); + + $pendingBlock.addClass('hidden'); + $progressBlock.addClass('vo-hidden'); + }; + + img.src = src; + } + + function previewimg(id, uint8arr, type) { + var blob; + var n = M.getNodeByHandle(id); + var brokenEye = false; + + if (uint8arr === null) { + if (d) { + console.debug('Using broken-eye image for %s...', id); + } + + var svg = decodeURIComponent(noThumbURI.substr(noThumbURI.indexOf(',') + 1)); + var u8 = new Uint8Array(svg.length); + for (var i = svg.length; i--;) { + u8[i] = svg.charCodeAt(i); + } + uint8arr = u8; + type = 'image/svg+xml'; + brokenEye = true; + } + + type = typeof type === 'string' && type || 'image/jpeg'; + + try { + blob = new Blob([uint8arr], {type: type}); + } + catch (ex) { + } + if (!blob || blob.size < 25) { + blob = new Blob([uint8arr.buffer], {type: type}); + } + + if (previews[id]) { + if (previews[id].full) { + if (d && previews[id].fromChat !== null) { + console.warn('Not overwriting a full preview...', id); + } + if (id === slideshow_handle()) { + previewsrc(id); + } + return; + } + previews[id].prev = previews[id]; + } + + if (d) { + console.debug('slideshow.previewimg', id, previews[id]); + } + + previews[id] = Object.assign(Object.create(null), previews[id], { + h: id, + blob: blob, + type: type, + time: Date.now(), + src: myURL.createObjectURL(blob), + buffer: uint8arr.buffer || uint8arr, + full: n.s === blob.size, + brokenEye: brokenEye + }); + + if (n.hash) { + // cache previews by hash to reuse them in the chat + previews[id].hash = n.hash; + previews[n.hash] = previews[id]; + } + + if (id === slideshow_handle()) { + previewsrc(id); + } + + // Ensure we are not eating too much memory... + delay('slideshow:freemem', slideshow_freemem, 6e3); + } + + function slideshow_freemem() { + var i; + var k; + var size = 0; + var now = Date.now(); + var slideshowid = slideshow_handle(); + var entries = array.unique(Object.values(previews)); + + for (i = entries.length; i--;) { + k = entries[i]; + size += k.buffer && k.buffer.byteLength || 0; + } + + if (d) { + console.debug('Previews cache is using %s of memory...', bytesToSize(size)); + } + const limit = is_mobile ? 100 : 450; + + if (size > limit * 1048576) { + size = 0; + + for (i = entries.length; i--;) { + var p = entries[i]; + + if (p.h === slideshowid || !p.buffer || (now - p.time) < 2e4) { + continue; + } + k = p.h; + + size += p.buffer.byteLength; + p.buffer = p.full = preqs[k] = false; + + if (p.prev) { + previews[k] = p.prev; + delete p.prev; + } + + if (p.type.startsWith('image') || p.type === 'application/pdf') { + URL.revokeObjectURL(p.src); + if (previews[k] === p) { + previews[k] = false; + } + } + + if (!previews[k] && p.hash) { + previews[p.hash] = false; + } + } + + if (d) { + console.debug('...freed %s', bytesToSize(size)); + } + } + } + + + /** + * @global + */ + global.slideshow = slideshow; + global.slideshow_next = slideshow_next; + global.slideshow_prev = slideshow_prev; + global.slideshow_handle = slideshow_handle; + global.slideshow_steps = slideshowsteps; + global.previewsrc = previewsrc; + global.previewimg = previewimg; + +})(self); diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A8E532C3630BFCB20D643809F637ECE0B4D70E6F b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A8E532C3630BFCB20D643809F637ECE0B4D70E6F new file mode 100644 index 0000000..52b46d8 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A8E532C3630BFCB20D643809F637ECE0B4D70E6F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A8E532C3630BFCB20D643809F637ECE0B4D70E6F-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A8E532C3630BFCB20D643809F637ECE0B4D70E6F-blob new file mode 100644 index 0000000..d1cefcb --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A8E532C3630BFCB20D643809F637ECE0B4D70E6F-blob @@ -0,0 +1,4 @@ +/*! + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f884"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cab:before{content:"\f1ba"} \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9559D870F37BDDC2E19FDBB3F3DBF027699600F b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9559D870F37BDDC2E19FDBB3F3DBF027699600F new file mode 100644 index 0000000..1452fc9 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9559D870F37BDDC2E19FDBB3F3DBF027699600F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9559D870F37BDDC2E19FDBB3F3DBF027699600F-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9559D870F37BDDC2E19FDBB3F3DBF027699600F-blob new file mode 100644 index 0000000..654e025 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9559D870F37BDDC2E19FDBB3F3DBF027699600F-blob @@ -0,0 +1 @@ +!function(e){var t=function(e,t){var i,s=t[t.type||"primary"];return!s||(i=function(e,t,i,s){for(var a,o,n,l=0,r=0,d=i.length,c=!1,h=!1;l0){c=!0;continue}if(0===o||o){c=!0;continue}}return!1}if(!a.key)return!1;if(h=!0,o=DDG.getProperty(e,a.key))if(a.match){var p=o.match(a.match);if((n=!!p)&&a.strict){var u=DDG.get_query().match(a.match);n=p[0].toLowerCase()==u[0].toLowerCase()}if(!n)return!1}else $.isArray(o)&&(o=o.join(" ")),n=DDG.isRelevant(o,a.skip_words||t.skip_words,a.min_length,!!a.strict);else n=!1;if(n)r++;else if(!s)return!1}return 0!==r||!(!c||h)}(e,t,s,!0),i)};e.DDH={spice_tabs:{},spice_objects:{},add:function(t){if((!e.disinfoExp||"j"!==e.searchExperiments.getActiveVariant("infoboxexp"))&&t.id&&"stocks"!==t.id&&t.data){var i=DDG.Data.answers.getBySpiceId(t.id);if(t.id=i.id||t.id,t.isSpiceOrGoodie=!i.convertedFromSpice,t.require&&t.isSpiceOrGoodie){var s=t.require;return delete t.require,t.signal&&DDG.duckbar.future_signal_tab(t),void DDG.require(s,e.DDH.add.bind(e.DDH,t))}if(!t.allowMultipleCalls&&this.spice_objects[t.id])return null;if(e.DDH[t.id]&&e.DDH[t.id].build&&$.isFunction(e.DDH[t.id].build)){var a=e.DDH[t.id].build(t);if(!1===a||"object"===$.type(a)&&$.isEmptyObject(a))return;$.extend(t,a)}if(e.DDH[t.id]&&e.DDH[t.id].build_async&&$.isFunction(e.DDH[t.id].build_async))e.DDH[t.id].build_async(t,(function(t){var i=e.DDH._build_ops(t);i&&(e.DDH.spice_tabs[i.id]=DDG.duckbar.add(i))}));else{var o=e.DDH._build_ops(t);o&&(e.DDH.spice_tabs[o.id]=DDG.duckbar.add(o))}}},_build_ops:function(i){i.templates=i.templates||{},i.meta=i.meta||{},e.DDH[i.id]&&e.DDH[i.id].meta&&(i.meta=$.extend(e.DDH[i.id].meta,i.meta)),i.meta.tab&&(i.name=i.meta.tab);var s,a,o=i.normalize||null,n=$.isArray(i.data),l=[],r=i.relevancy,d=(DDG.get_query(),[]),c=[];if(n){r&&(i.meta.idField=r.dup);for(var h=0,p=i.data.length;h0)for(h=0;h0)for(h=0;h1&&i.sort_fields&&i.sort_default){var m=null;"string"==typeof i.sort_default?m=i.sort_default:r&&r.type&&(m=i.sort_default[r.type]),m&&m.length>0&&i.data.sort(DDG.getProperty(i.sort_fields,m))}}else{if(r&&!t(i.data,r))return void DDG.duckbar.failed(i.id);if(o){if(!(a=o(i.data)))return void DDG.duckbar.failed(i.id);i.data=$.extend({},i.data,a)}}return"cheat_sheets"===i.id?i.meta.id=i.from:i.meta.id=i.id,e.DDH.spice_objects[i.id]=e.DDH.spice_objects[i.id]||{},i},failed:function(e){return DDG.duckbar.failed(e)},getDOM:function(e){var t=this.spice_tabs[e];return t&&t.view&&t.view.$el||$()},selectNextItem:function(e){var t=this.spice_tabs[e];return t&&t.view&&t.view.selectNextItem&&t.view.selectNextItem()},registerHelper:function(e,t){Handlebars.registerHelper(e,t)}},e.Spice=e.DDH,e.DDH.sharedir_map=this.spice_paths?$.parseJSON(spice_paths):{}}(window),Spice.names=["alternative_to","amazon","astrobin_apod","aur","bible","caniuse_lists","cryptocurrency","currency","cve_summary","dictionary_definition","dns","dogo_books","dogo_movies","duck_say","economic_indicators","expand_url","first_robotics_team_info","flash_version","forecast","git_book_status","github","github_status","glassdoor","gravatar","grunt","hacker_news","haxelib","hex","holiday","images","is_it_up","islamic_prayer_times","keybase","launchbug","launchpad_project","magic_the_gathering","maps_maps","maps_places","maven","meta_cpan","metar","near_earth_objects","newint","news","nutrition","open_nic","package_tracking","packagist","people_in_space","playing_cards","plos","product_hunt","public_holidays","quandl_fundamentals","quote_of_the_day","rain","rand_pos","rand_word","recipes","rhymes","ruby_gems","rust_cargo","shorten","sports","sports_mlb_games","sports_nfl_games","stocks","sun_rise_set","syntax","tfl_status","thesaurus","tides","time","tor_node","transit_septa","travis_status","tvmaze_previousepisode","videos","whois","word_of_the_day","xkcd_display","yacht_specs"],function(e){for(var t,i=function(e){var t=null,i=0,s=function(a){a&&(t=a);var o=window["ddg_spice_"+e];o===s?++i<50&&window.setTimeout(o,19):t&&o(t)};return s},s=0;s17274e4},isTimeVqdLoadedFromPreviousPageLoad:function(e){this._ready?e(!!this._isTimeVqdLoadedFromPreviousPageLoad):this.once("ready",function(){e(!!this._isTimeVqdLoadedFromPreviousPageLoad)}.bind(this))},clearVqdData:function(){if(this._history&&this._history.replaceState){var e=Object.assign({},this._history.state);delete e.vqdData,this._history.replaceState(e,"")}}})}(DDG),function(e){var t=e.Models.Base;e.Models.Feedback=function(e){this.rating=-1,this.comment="",this.endpoint="",t.call(this,e),this.submitting=!1,this.success=!1,this.error=!1},e.Models.Feedback.prototype=$.extend({},t.prototype,{send:function(t){this.set("success",!1);var i=this._prepareTextFeedback(t),s=this.endpoint||e.services.getURL("reports");t&&t.type&&"images"===t.type&&(s=this.endpoint||e.services.getURL("imageReports"),i=this._prepareImageFeedback(t)),i=$.extend({q:e.get_query(),safe:e.settings.get("kp")},i);var a,o=t.type||t.looking_for,n=["fbs",1===t.rating?"positive":"negative",o];(a="images"===t.type?t.reason:"ads"===t.looking_for?t.ads_issue:t.category_issue)&&n.push(a),"ads"===t.looking_for&&window.rl&&(n.push({rl:window.rl}),i.rl=window.rl||""),e.pixel.fire.apply(e.pixel,n),t.comment||t.looking_for_other?this._sendRequest(s,i):this.set("success",!0)},_prepareImageFeedback:function(e){return $.extend({image_url:this.image,thumb_url:this.thumbnail},e||{})},_prepareTextFeedback:function(t){return this.comment=this._shortenString(this.comment,500),this.looking_for_other=this._shortenString(this.looking_for_other,50),this.ads_issue_other=this._shortenString(this.ads_issue_other,50),e.search.userLocationExp&&(this.comment+=" | ulexp="+e.search.userLocationExp),$.extend({rating:this.rating,comment:this.comment,browser:navigator.platform+" "+e.device.browserName,mobile:e.device.isMobile?1:0,atb:JSON.stringify(e.opensearch.installed),ct:window.ct||"",t:e.history.get("t")||"",upstream:e.search&&e.search.src||"",df:e.search&&e.search.dateFilterId||"",result_count:e.search&&e.search.getResultCount()||0,spell:window.dns||"",first_src:e.first_source||"",lang:e.settings.get("kad"),region:e.settings.get("kl")},t||{})},_sendRequest:function(t,i){this.set("submitting",!0),this.set("success",!1),this.set("error",!1),$.ajax({url:t,type:"POST",data:i,success:function(){this.set("submitting",!1),this.set("success",!0)}.bind(this),error:function(t,s){e.pixel.fire("fbf",i),this.set("submitting",!1),this.set("error",s)}.bind(this)})},_shortenString:function(e,t){return e&&e.length>t?e.slice(t-3)+"...":e}})}(DDG),DDG,DDG.Data.FeedbackIssues={ads:[{text:lp("feedback form","Ad is malware"),val:"malware"},{text:lp("feedback form","Ad is inappropriate"),val:"inappropriate"},{text:lp("feedback form","Ad is suspicious"),val:"suspicious"},{text:lp("feedback form","Ad is irrelevant"),val:"irrelevant"},{text:lp("feedback form","Ad is annoying"),val:"annoying"}],organics:[{text:"There are not enough results",val:"notenough"},{text:"Search terms are ignored or changed",val:"termsIgnored"},{text:"The results are outdated",val:"linksOld"},{text:"There are no dates next to results",val:"missingDates"},{text:"The results are in the wrong language",val:"wrongLanguage"},{text:"The filters are not effective",val:"filters"},{text:"The results aren't relevant",val:"irrelevant"},{text:"There are inappropriate/offensive results",val:"nsfw"},{text:"Not relevant for my region",val:"region"}],filters:[{text:"I want a custom date range filter",val:"wantCustom"}],wikipedia:[{text:"These results are not relevant",val:"irrelevant"},{text:"Wrong image is shown",val:"wrongImage"},{text:"Words or numbers are missing",val:"dataMissing"},{text:"Information is outdated",val:"outdated"},{text:"These results were relevant but not helpful",val:"infoNotShown"}],about:[{text:"These results are not relevant",val:"irrelevant"},{text:"Information is outdated",val:"outdated"},{text:"Information is missing",val:"dataMissing"},{text:"There are formatting issues",val:"badFormatting"}],places_multiple:[{text:"These results are not relevant",val:"irrelevant"},{text:"These places are too far away",val:"badProximity"},{text:"These places are incorrect",val:"wrongPlace"}],map_no_results:[{text:"These suggestions are helpful",val:"helpful"},{text:"These results were relevant but not helpful",val:"notHelfpul"},{text:"I expected several results",val:"expectedSeveral"},{text:"I expected a single result",val:"expectedSingle"}],maps:[{text:"These results are not relevant",val:"irrelevant"},{text:"The location is wrong",val:"wrongLocation"}],directions:[{text:"The directions aren't relevant",val:"irrelevant"},{text:"The routes are missing",val:"missingRoutes"},{text:"The routes are wrong",val:"wrongRoutes"},{text:"The start or end location is wrong",val:"wrongLocation"},{text:"I'd like traffic info",val:"wantTrafficInfo"},{text:"I'd like public transit",val:"wantPublicTransit"},{text:"I'd like bike routes",val:"wantBikeRoutes"}],news:[{text:"I wasn't looking for news",val:"irrelevant"},{text:"What I'm looking for isn't shown",val:"missingArticles"},{text:"Articles require a subscription to read",val:"articlesPaywalled"},{text:"I don't trust these news sources",val:"untrusted"},{text:"The filters are not effective",val:"filters"}],newsvertical:[{text:"What I'm looking for isn't shown",val:"missingArticles"},{text:"Articles require a subscription to read",val:"articlesPaywalled"},{text:"I don't trust these news sources",val:"untrusted"},{text:"The filters are not effective",val:"filters"}],videos:[{text:"I wasn't looking for videos",val:"irrelevant"},{text:"What I'm looking for isn't shown",val:"missingVideos"},{text:"The filters are not effective",val:"filters"},{text:"There are inappropriate/offensive results",val:"nsfw"},{text:"Too many results from YouTube",val:"singleSource"}],videosvertical:[{text:"What I'm looking for isn't shown",val:"missingVideos"},{text:"The filters are not effective",val:"filters"},{text:"There are inappropriate/offensive results",val:"nsfw"},{text:"Too many results from YouTube",val:"singleSource"}],images:[{text:"I wasn't looking for images",val:"irrelevant"},{text:"The filters are not effective",val:"filters"},{text:"There are inappropriate/offensive results",val:"nsfw"},{text:"What I'm looking for isn't shown",val:"missingImages"}],imagesvertical:[{text:"The filters are not effective",val:"filters"},{text:"There are inappropriate/offensive results",val:"nsfw"},{text:"What I'm looking for isn't shown",val:"missingImages"}],forecast:[{text:"The location is wrong",val:"wrongLocation"}],recipes:[{text:"I don't want results from Yummly",val:"yummly"}],products:[{text:lp("feedback form","I don't want this type of result"),val:"productads"},{text:lp("feedback form","Product ad pricing is misleading"),val:"pricing"},{text:lp("feedback form","Product ads aren't relevant"),val:"irrelevant"},{text:lp("feedback form","Product ad content is deceptive"),val:"deceptive"}],autoads:[{text:lp("feedback form","I don't want this type of result"),val:"unwanted"},{text:"Car location is wrong",val:"locationWrong"},{text:"Car pricing is misleading",val:"pricing"},{text:"Car ads aren't relevant",val:"irrelevant"},{text:"Car ad content is deceptive",val:"deceptive"}],productsvertical:[{text:lp("feedback form","Price shown doesn't reflect merchant site"),val:"pricing"},{text:lp("feedback form","Product ads aren't relevant"),val:"irrelevant"},{text:lp("feedback form","Product ad content is deceptive"),val:"deceptive"},{text:lp("feedback form","I expected to see results from more sellers"),val:"few sellers"},{text:lp("feedback form","Filters aren't working"),val:"filters"}],settings:[{text:"I'm unable to change the settings",val:"change"},{text:"I keep losing my settings",val:"losing"}],translations:[{text:lp("translations_module","This translation is wrong"),val:"wrongTranslation"},{text:lp("translations_module","This translation is offensive"),val:"nsfw"}],qna:[{text:"Information is not relevant",val:"irrelevant"},{text:"Information is incorrect",val:"incorrect"}],lyrics:[{text:"I wasn't looking for lyrics",val:"irrelevant"},{text:"Lyrics for the wrong song are shown",val:"incorrectSong"},{text:"Lyrics contain errors",val:"incorrectLyrics"},{text:"Song title is incorrect",val:"incorrectTitle"},{text:"Artist name is incorrect",val:"incorrectArtist"},{text:"Album is incorrect",val:"incorrectAlbum"},{text:"Release date is incorrect",val:"incorrectReleaseDate"},{text:"Lyrics are inappropriate/explicit",val:"explicit"},{text:"Musixmatch link is broken",val:"brokenLink"}]},function(e){e.Models.Router=function(){this._routes={},e.history.enablePushState((function(t,i){if(t=t||"",i=i||"",!e.duckbar||!e.duckbar.isDone&&"iaxm"!==t)return!1;var s=window.history&&window.history.state&&window.history.state[e.Utils.History.KEY];return"ia"===t||"iax"===t&&"cheatsheet"!==e.history.get("ia")||"iaxm"===t||"iai"===t&&s&&s.iaxm||"iai"===t&&e.device.isMobile&&(!s||!s.iai)||"iai"===t&&e.device.isMobile&&!i&&s&&s.iai||"ia_state"===t.substring(0,8)||"q"===t||"strict_bbox"===t||"bbox"===t||"metatoken"===t||"start"===t||"end"===t||"transport"===t})),e.history.on("popstate",this._onHistoryPopState.bind(this))},e.Models.Router.prototype=$.extend({},EventEmitter2.prototype,{add:function(e,t){this._routes[e]={id:e,handler:t}},navigate:function(e,t){if(e){var i=this._routes[e];i&&i.handler&&i.handler(t)}this.emit("navigate",e)},_onHistoryPopState:function(t){var i=t&&t.state&&t.state[e.Utils.History.KEY];if(i){if(this._setIAFromHistory(i),i.ia===e.history.curState.ia){var s=this._getIAModelFromHistory(i);s&&this._setIAModelPropsFromHistory(s,i)}var a=e.getProperty(e,"page.searchbar.autocomplete");e.opensearch&&e.opensearch.isExperiment("mobile_header","b")&&e.device.isMobileDevice&&a&&(!i.ac&&a._visible?a.hide():i.ac&&!a._visible&&a.show()),"directions"===i.iaxm?(s.set("isDirectionsActive",!0),this.navigate("directions",{state:i,model:s})):"start"===i.iaxm&&(s.set("isDirectionsActive",!1),this.navigate("map-start",{state:i,model:s}))}},_getIAModelFromHistory:function(t){var i=t.iax||t.iaxm||e.history.curState.iax||e.history.curState.iaxm;"directions"===i&&(i="maps");var s,a=1==i||0==i?e.duckbar.getActiveTab():e.duckbar.tabsByNameId[i],o=e.duckbar.tabs.maps_expanded,n=o&&o.expandedMap&&o.expandedMap.model;if(t.iaxm&&n)s=n;else if(a&&a.model)s=a.model;else if(("about"===i||"places"===i)&&e.modulesLayout){var l=e.modulesLayout.modules["places"===i?"maps_places":i];l&&(s=l.model)}return s},_setIAFromHistory:function(t){if(t.ia!==e.history.curState.ia){var i=t.ia;if(!e.duckbar.tabs[i]){var s=e.duckbar.tabsByNameId[i];s&&(i=s.id)}e.duckbar.open(i,{backButtonOpened:!0})}else!t.ia&&e.history.curState.ia&&e.duckbar.open("web",{backButtonOpened:!0})},_setIAModelPropsFromHistory:function(t,i){if(t&&"object"==typeof t&&i){if(t.set("expanded",!!i.iax),(i.iaxm||e.history.curState&&e.history.curState.iaxm)&&this.navigate("toggle-map",{model:t,state:i,isDirections:"directions"===i.iaxm}),(e.device.isMobile||i.iaxm||e.history.curState.iaxm)&&i.q===e.history.get("q")){if(t.selectedItem&&!i.iai)return void t.selectedItem.unselect();if(i.iai&&(!t.selectedItem||t.selectedItem.id!==i.iai)){var s=t.itemsById[i.iai];if(s){s.select();var a=e.history.curState&&!e.history.curState.iaxm&&!i.iaxm&&("videos"===e.history.curState.ia&&"videos"===i.ia||"images"===e.history.curState.ia&&"images"===i.ia);return void(t.allowModuleIA&&a&&(t.set("active",!!i.iax),e.duckbar.menu.setActive(i.iax?t.id:"web")))}}}if(t.allowModuleIA&&(t.set("active",!!i.iax),e.duckbar.menu.setActive(i.iax?t.id:"web")),this._routes.requery&&i.iaxm&&"directions"!==i.iaxm&&"start"!==i.iaxm){if(i.q&&t.meta.update({requery:i.q}),i.bbox){var o=i.bbox.split(",");t.shouldMapViewportUpdate=!0,t.set({geo_bbox:{top_left:o[0]+","+o[1],bottom_right:o[2]+","+o[3]}})}i.isFromHistory=!0,this.navigate("requery",{state:i,model:t})}}}})}(DDG),function(e){var t=e.Pages.Base,i=["is-link-style-exp","is-link-order-exp","is-link-breadcrumb-exp","is-related-search-exp","is-vertical-tabs-exp"];e.Pages.SERP=function(i){if(this._checkForForceReload(),e.searchExperiments.assign("pctaexp",{filter:function(){return e.extension.canInstall()&&!e.extension.isInstalled()&&e.device.isDesktop&&e.device.isEnglish}}),this.unsafeSearch=i.showSafeSearch,e.device.hostRegion=i.hostRegion,this.sideMenuOps.showFeedbackIcons=e.device.isMobile,"start.duckduckgo.com"!==window.location.host.toLowerCase()&&"1"!==e.history.get("start")||(e.settings.set("kak","-1"),e.settings.set("kao","-1"),e.settings.set("kaq","-1")),t.call(this,i),this.ads=new e.Models.Ads({}),this.pageLayoutView=new DDG.Views.PageLayout({model:DDG.pageLayout}),e.device.on("scroll",this._onScroll.bind(this)),window.addEventListener("pageshow",this._onPageShow.bind(this)),this._showEuAndroidWelcomeMessage="euandroid"===e.tParam.get()&&e.settings.isDefault("kea")&&e.device.isAndroid&&e.device.isChrome,this._showEuAndroidWelcomeMessage||(window.onFirstSearchPostExtensionInstall=function(t){window.onFirstSearchPostExtensionInstall.called||(window.onFirstSearchPostExtensionInstall.called=!0,t=t||{},e.device.isDesktop&&e.device.isChrome&&(e.device.isOSX&&e.device.chromeVersion>=87&&e.device.chromeVersion<=89||e.device.isWindows&&e.device.chromeVersion>=87)?this.views.keepExtensionDialogues=new e.Views.KeepExtensionDialogues($.extend({invertColors:e.device.isWindows},t)):t.showWelcomeBanner&&(this.views.welcomeMessage=new e.Views.WelcomeMessage({appendTo:".js-welcome-wrap"})))}.bind(this)),e.deep.on("change:started",this._onDeepStarted.bind(this)),e.deep.on("add-separator",this._addDeepSeparator.bind(this)),e.deep.on("change:isOutOfResults",this._showFooter.bind(this)),e.deep.on("load:completed",this._onDeepCompleted.bind(this)),e.deep.on("load:initial",this._onDeepInitialized.bind(this)),e.deep.on("load:any",this._onDeepChange.bind(this)),e.settings.on("change",this._onSettingsChange.bind(this)),e.opensearch&&e.opensearch.installed&&"mobileux2023exp"===e.opensearch.installed.experimentPixelId&&"q"===e.opensearch.installed.variant){function s(){e.Data.Experiments.mobile_ux_2023.filter({settings:e.settings,device:e.device})?document.documentElement.classList.add("serp-mobile-ux-2023"):document.documentElement.classList.remove("serp-mobile-ux-2023")}s(),e.settings.on("change",s);var a=window.matchMedia("(prefers-color-scheme: dark)");a.addListener?a.addListener(s):a.addEventListener("change",s)}},e.Pages.SERP.prototype=$.extend({},t.prototype,{pageType:"serp",liveUpdater:!0,sideMenuOps:{twitterLink:!0,hideSettings:!0},showingSafeSearch:0,ready:function(){t.prototype.ready.call(this),e.searchExperiments.assign("default_search_atb",{filter:function(){return e.device.isDefaultSearchUser()&&e.addToBrowser.canShowOnDesktopSerp()}}),e.searchExperiments.isActive("default_search_atb")&&(e.opensearch.variant="v",e.opensearch.atbVariant=e.searchExperiments.getActiveVariant("default_search_atb"));var s=document.createElement("div");document.body.appendChild(s),window.ReactDOM.render(window.React.createElement(window.contexts.DdgInstanceProvider,{settings:DDG.settings,device:DDG.device,pixel:DDG.pixel},window.React.createElement(window.components.ThemeProvider)),s),e.$html.addClass("react"),e.page.canShowSerpUxExp()||e.$html.removeClass(i.join(" ")),this.keyboard.enableSERPShortcuts=1,w.is_twitter&&(this.views.twitter=new e.Views.TwitterEasterEgg({username:w.is_twitter,$el:$(".js-header-logo")}));var a={current:null};this.initHeader(a),this.initSearchFilters(),this.initSERPMessages(),this.initFooter(),this._showEuAndroidWelcomeMessage&&this.initEuAndroidWelcomeMessage();for(var o,n=$(".js-lazyload-favicon"),l=0;o=n[l];l++)e.ImageLoader.register(o,e.services.getURL("icons")+o.getAttribute("data-src"),"scrollY");if(e.duckbar.onReady(),e.device.isDesktop?this._appendSerpBadgeDesktop(a):e.device.isMobile&&!e.device.isMobileSafari&&this._appendSerpBannerMobile(),this.views.atb||this.views.newsletter||this.views.survey||!e.survey.shouldShowBadge()||(this.views.survey=new e.Views.SurveyBadge({appendTo:".js-site-wrapper"}),this.views.survey.show(),$("body").on("click.atb",function(){this.views.survey&&this.views.survey.hide(),$("body").off("click.atb")}.bind(this))),this.fireStat("si"),window.utils&&window.utils.getSerpRetentionSurveyData&&window.utils.deleteSerpRetentionSurveyData&&window.utils.canResubmitSerpRetentionSurvey&&window.utils.canResubmitSerpRetentionSurvey(e.extension,e.opensearch)){var r=window.utils.getSerpRetentionSurveyData();e.pixel.fire("serp_retention_survey_resubmit",r.answers),window.utils.deleteSerpRetentionSurveyData()}if(e.opensearch&&e.opensearch.installed&&"l"===e.opensearch.installed.variant&&"s"===e.opensearch.installed.atbVariant&&e.extension&&e.extension.isInstalled()){var d=e.opensearch.getDaysSinceCohort(e.opensearch.installed.version);if(d>=13&&d<=20){var c;try{c=window.localStorage.getItem("hasExtension")}catch(e){}if(null!=c&&c===e.opensearch.installed.version)try{window.localStorage.removeItem("hasExtension"),e.pixel.fire("localstoragelifespan",{day:d})}catch(e){}}}},showMessage:function(t,i){"spelling"!==t||e.search.spelling||(e.search.spelling=new e.Models.Search.Spelling(i)),this.views.messages&&this.views.messages.showMessage(t,i)},initHeader:function(t){e.settings.isDefault("ko")&&e.device.hasFixedHeaderSupport&&(this.views.header=new e.Views.Header({$el:$(".js-header-wrap"),model:new e.Models.Header,hideSettingsIcon:e.addToBrowser.canShowOpenInAppButton(),atbPopoverRef:t}));var i={};e.history.get("atb")&&(i.atb=e.history.get("atb"),this._updateLogoParams({atb:e.history.get("atb")})),e.tParam.hasValue()&&e.tParam.fromHomepage()&&e.opensearch.variant!==e.tParam.DEFAULT_VARIANT&&(i.va=e.opensearch.variant),this._updateLogoParams(i),e.addToBrowser.canShowOpenInAppButton()&&(this.views.openInApp=new e.Views.OpenInApp({after:$(".js-header-logo"),model:new e.Models.OpenInApp({history:e.history,settings:e.settings,tParam:e.tParam})}),$(".js-header-wrap").addClass("header-wrap--app"))},initFooter:function(){e.footer=new e.Models.Footer,this.views.footer=new e.Views.Footer({model:e.footer,after:$(".js-site-wrapper")})},initSearchFilters:function(){this.views.searchFilters=new e.Views.Dropdowns.FilterContainer({$el:$(".js-search-filters"),allTab:!0})},initSERPMessages:function(){this.views.messages=new e.Views.SERPMessages({ads:this.ads,search:this.search,searchbar:this.searchbar,messages:{safeSearch:!!this.unsafeSearch,siteSearch:e.search.isSiteQuery},$el:$("#message")}),this.views.messages.on("clear-filters",(function(){e.settings.region.reset(),e.search.requery()}))},initEuAndroidWelcomeMessage:function(){this.views.welcomeMessage=new e.Views.WelcomeMessage({appendTo:".js-welcome-wrap",type:"euandroid"})},_showFooter:function(){!e.settings.isDefault("kav")&&e.deep.isOutOfResults&&e.footer.set("visible",!0)},_onDeepStarted:function(){e.duckbar.show("deep_start"),e.settings.updater&&e.settings.updater.loadFonts()},_onDeepInitialized:function(){var t={br:e.device.pixelBrowserName,bv:e.device.pixelBrowserVersion};w.sourceTag&&(t.st=w.sourceTag),w.df&&(t.df=w.df),"web"!==e.duckbar.activeTabId&&(t.iao=1);var i=e.settings.region,s=!i.getPrevId()&&i.getId()===i.getDefaultId();s&&(t.nr=s?1:0),e.settings.isDefault("kz")||(t.nia=1),e.settings.isDefault("kae")||(t.kae=e.settings.get("kae")),"d"===e.settings.get("kae")&&(t.dt=1),t.rl=rl,t.dl=dl,t.ck=d.cookie&&""!==d.cookie?1:0,e.abc&&(t.abc=e.abc),e.pixel.fire("l",e.device.pixelId,e.settings.region.hasRegion()?"re":"wt",$.extend({},t,{atbi:this.canShowAddToBrowser(),i:this.isInstalled(),osl:DDG.search.hasOrganicSiteLinks}))},_onDeepChange:function(){e.duckbar.show("deep_change"),e.duckbar.menu.showNewTabs(),this._showFeedbackBtn(),this.views.messages&&this.views.messages.ready(),e.ImageLoader.registerAll($(".js-lazyload-icons"),"scrollY"),$(".js-results,.js-results-ads,.js-sidebar-ads").removeClass("is-invisible"),setTimeout((function(){var t=e.duckbar.activeTabId?e.duckbar.getActiveTab().pixelId:e.duckbar.placeholder?"pl"+e.duckbar.placeholder.from:null;if(e.search.deepAnswerIAs&&Object.keys(e.search.deepAnswerIAs).length){var i={};t&&"web"!==t&&(i.oi=t),e.search.spelling&&(i.sp=1),e.pixel.fire("iaui",$.extend(i,e.search.deepAnswerIAs))}}),500)},_onDeepCompleted:function(){e.perf.reportPerformance({page:this.pageType,timerName:"deepFinished",resourceName:"/d.js"}),DDG.deep.isBingV7()&&setTimeout((function(){e.pageLayout.sendDeviations()}),1e3);var t={};t.u=e.search.src,this.ads.hasAds()&&(t.adx=this.ads.adx),this.ads.adxExperiment&&(t.adx_name=this.ads.adxExperiment),t.rc=e.deep.getResultCount();var i=e.Data.languages.resultLanguages,s=e.Data.languages.adLanguages,a=[],o=[];for(var n in i)a.push(n+":"+i[n].length);for(var l in s)o.push(l+":"+s[l]);e.Data.languages.resultLanguagesPixelData=t.oll=a.join(","),o.length&&(e.Data.languages.adLanguagesPixelData=t.adll=o.join(",")),e.pixel.fire("l2",e.device.pixelId,e.settings.region.hasRegion()?"re":"wt",t)},_showFeedbackBtn:function(){!this.views.feedback&&e.device.isDesktop&&(this.views.feedback=new e.Views.Feedback.Button({appendTo:".js-feedback-btn-wrap",clickPixel:!1}))},_onScroll:function(t){if(e.settings.isDefault("kav")||nrb(t),this.onboardingTest.animateModalIllustration&&e.tParam.fromHomepage()&&this.canShowAddToBrowser()&&!e.device.isMobileDevice&&!this.views.atb.dismissed){var i=e.device.height/2;this.views.atb.animated&&e.device.scrollTop()>i?this.views.atb.unAnimate():!1===this.views.atb.animated&&e.device.scrollTop()0?1:0}if(e.page&&e.page.ads&&e.page.ads.hasAds()&&(t.adc=e.page.ads.getNumberOfTopAds()),this.hasAdStats&&(t.prod_mult=this.items&&this.items.length>1?1:0,t.u=this.meta.sourceName,this.gridColumns&&(t.pgcd=this.gridColumns+","+(e.getProperty(this,"meta.layout.columns")||0)+","+(this.items?this.items.length:0))),"yelp"===this.sourceId?t.lsrcid="ylp":"tripadvisor"===this.sourceId&&(t.lsrcid="ta"),this.data&&this.data.length>0)for(var s=0;s=(this.meta.minItemsForModeSwitch||12)||this.canLoadMore()),this.set("canExpand",t)},_shouldBlockAdultResults:function(){return("images"===this.id||"videos"===this.id)&&e.search.isAdultQuery&&e.settings.safeSearch.isStrict()},_getSafeSearchURLParam:function(){var t;return t="news"===this.id||"videos"===this.id?e.settings.get("kp"):e.settings.safeSearch.isOff()?-1:1,"f"===this.openType&&(t=1),"&p="+t},requery:function(t){if(this.sources){if(this.set("isRequerying",1),this.hasRequeried=!0,this.meta.reset(),t&&t.query&&this.meta.update({query:t.query}),this.selectedItem&&this.selectedItem.unselect(),this._shouldBlockAdultResults())return this._onRequery({results:[]});this.failed&&this.set("failed");var i=this.sources.getRequeryURL(t);this.safeSearch&&(i+=this._getSafeSearchURLParam()),this.date&&(i+="&df="+e.search.dateFilterId),e.searchExperiments.hasActiveExperiments()&&(i=e.searchExperiments.addExperimentParameters(i)),$.ajax({type:"GET",url:i,dataType:"json",async:!0,success:this._onRequery.bind(this),error:this._onLoadError.bind(this)})}},_onLoad:function(e){this.set("isLoading"),this.serviceURL&&(this.set("serviceURL"),this._addResponseToAnswer(e))},_onRequery:function(e){this.set("isRequerying"),this.set("selectedItem"),this.items.forEach((function(e){e.removeAllListeners()})),this.items=[],this.itemsById={},this.itemsOnMap=[],this._addResponseToAnswer(e),["maps_maps","maps_places","maps_expanded"].indexOf(this.id)<0&&this.set("expanded",1),this.set("isSearchingMapArea",this.isSearchMapAreaPending&&this.items.length>1),this.set("isSearchMapAreaPending",!1),this.emit("requery-complete")},_onLoadedMore:function(e){this.set("isLoading"),this._addResponseToAnswer(e);var t={l:e.results.length,p:this.pageNo};this.fire("lm",t)},_onLoadError:function(){this.set("isLoading"),this.set("isRequerying"),this.items.length||this.set("failed",1)},_onItemSelectedChanged:function(e){delete this._selectedItemIdx,e&&e.selected?(this.highlightedItem&&this.highlightedItem.unhighlight(),this.selectedItem&&e!==this.selectedItem&&(this._pendingSelectedItem=e,this.selectedItem.unselect()),this.set("selectedItem",e)):this._pendingSelectedItem?delete this._pendingSelectedItem:this.set("selectedItem")},_onItemHighlightedChanged:function(e){delete this._highlightedItemIdx,e&&e.highlighted?(this.highlightedItem&&e!==this.highlightedItem&&(this._pendingHighlightedItem=e,this.highlightedItem.unhighlight()),this.set("highlightedItem",e)):this._pendingHighlightedItem?delete this._pendingHighlightedItem:this.set("highlightedItem")},_onTopicSelectedChanged:function(e){e&&e.selected?(this.selectedTopic&&e!==this.selectedTopic&&this.selectedTopic.unselect(),this.set("selectedTopic",e)):e!==this.selectedTopic||e.selected||this.set("selectedTopic")},_onTopicHighlightedChanged:function(e){e&&e.highlighted?(this.highlightedTopic&&e!==this.highlightedTopic&&this.highlightedTopic.unhighlight(),this.set("highlightedTopic",e)):e!==this.highlightedTopic||e.highlighted||this.set("highlightedTopic")}})}(DDG),function(e){var t,i=e.Models.Base;e.Models.AnswerMeta=t=function(e){i.call(this,e)},t.prototype=$.extend({},i.prototype,{options:{},loadedURLs:{},loadedNext:function(){this.next&&(this.loadedURLs[this.next]=!0,this.next=null)},reset:function(){this.loadedURLs={}},update:function(e){if(e&&"object"==typeof e)for(var t in e)"next"===t&&this.loadedURLs[e[t]]||"searchTerm"===t&&this.searchTerm||this.set(t,e[t])},useExpandTextButton:function(){return"images"===this.signal_from||"videos"===this.signal_from||"news"===this.signal_from},hasAttribution:function(){return!this.useExpandTextButton()&&this.developer&&$.isArray(this.developer)&&this.developer.length}})}(DDG),function(e){var t,i=e.Models.Base;e.Models.AnswerTemplates=t=function(t){t=t||{};var s,a=e.Data.templates,o={};t.group&&(s=a.groups[t.group])&&(t=$.extend(!0,{},s,t),o=s.options),i.call(this,t),this.options=$.extend(!0,{},a.defaultOptions,o,this.options||{}),this.elClass=this.elClass||{},this.variants&&this._applyVariants(this.variants)},t.prototype=$.extend({},i.prototype,{_applyVariants:function(t){if(t&&"object"==typeof t){var i=e.Data.templates.viewVariants;for(var s in t){var a=t[s],o=i[s],n=o&&o[a];if(n)if($.isArray(n))n.forEach(this._applyVariants.bind(this));else if("object"==typeof n)for(var l in n)this._applyVariant(l,n[l]);else this._applyVariant(s,n)}}},_applyVariant:function(e,t){this.elClass[e]?this.elClass[e]+=" "+t:this.elClass[e]=t}})}(DDG),function(e){var t=e.Models.Base;e.Models.AnswerItemTopic=function(e){t.call(this,e),this.items=[]},e.Models.AnswerItemTopic.prototype=$.extend({},t.prototype,{addItem:function(e){this.items.push(e),this._emitChange("items")},removeItem:function(e){var t=this.items.indexOf(e);t>-1&&(this.items.splice(t,1),this._emitChange("items"))},select:function(){this.unhighlight(),this.set("selected",1)},unselect:function(){this.set("selected")},highlight:function(){this.selected||this.set("highlighted",1)},unhighlight:function(){this.set("highlighted")},engaged:function(){this.set("engaged",1)}})}(DDG),function(e){var t=e.Models.Base,i={news:1,images:1,videos:1,web:1,maps_expanded:1};e.Models.AnswerBarMenuItem=function(e){this._pixel=e.pixel,t.call(this,e),i[this.pixelId]||this.on("change:visible",this._onVisibleChanged.bind(this))},e.Models.AnswerBarMenuItem.prototype=$.extend({},t.prototype,{toggle:function(){this.active||this.set("active",!this.active)},_onVisibleChanged:function(){if(this.visible){var t=Date.now(),i=this.getInstance("deep"),s=this.getInstance("duckbar"),a=s.activeTabOpenType,o=s.placeholder&&s.placeholder.signalWait,n="unknown",l=e.modulesLayout.modules[this.id],r=s.tabOpenedDueToPriority;"static"===this.type?n="static":this.id===e.duckbar.activeTabId?n="active":"q"===a?n="query parameter":o&&o===this.id&&e.modulesLayout.autoOpenedId?n="fallback":l&&l.addedAfterDuckbarDone?n="slow":r&&r!==this.id?n="priority":l&&!l.preventTab&&(n="not prevented"),this.getInstance("pixel").fire("ias",this.pixelId,{timeSincePageLoad:t-s.pageLoadTime,timeSinceDeepStarted:i.timeSinceStarted(),timeSinceDeepFinished:i.timeSinceFinished(),reason:n})}}})}(DDG),function(e){var t=e.Models.Base;e.Models.AnswerBarMenu=function(e){this.items=[],this.itemsById={},this._numStaticItems=0,t.call(this,e)},e.Models.AnswerBarMenu.prototype=$.extend({},t.prototype,{addAnswer:function(t){if(!(!t||this.itemsById[t.id]||this._showingMapTab&&t.hasMap||t.meta&&t.meta.hidden)){var i=new e.Models.AnswerBarMenuItem({id:t.id,name:t.hasMap?"Maps":t.tabLabel||t.name,type:t.hasMap?"static":t.type,pixelId:t.pixelId,hasMap:t.hasMap,onActive:t.onActive,hidden:t.meta&&t.meta.hidden});t.hasMap?(this._showingMapTab=!0,this._replaceStaticMap(i),this._numStaticItems+=1):"static"===i.type?(this.items.splice(this._numStaticItems,0,i),this._numStaticItems+=1):this.items.push(i),this.itemsById[i.id]=i,this._emitChange("items"),("static"===i.type||this._showingNewTabs)&&i.set("visible",!0),i.on("change:active",this._onItemActiveChange.bind(this,i.id,t))}},removeAnswer:function(e){var t=!1;for(var i in this.items){var s=this.items[i];if(s.id===e&&"static"!==s.type&&!s.hasMap){t=i;break}}t&&(this.items.splice(t,1),delete this.itemsById[e],this._emitChange("items"))},showNewTabs:function(){this._showingNewTabs=!0,this.items.forEach((function(e){e.set("visible",!0)}))},setActive:function(e){this._lastActiveId!==e&&this.itemsById[e]&&(this._lastActiveId=e,this.itemsById[e].set({active:!0,visible:!0}),this.emit("set-active",e))},openNext:function(e){for(var t,i,s=0;s-1&&this.canShowSideModules()&&!e.hasInfoSelector)},isTopModule:function(t){return this._getPosition(t)===e.Models.ModulesPositions.TOP},canShowSideModules:function(){var e=this.getInstance("device"),t=this.getInstance("settings");return!e.isMobileDevice&&t.isDefault("kw")&&t.isDefault("km")&&t.isDefault("kz")},canShowModule:function(t){if(e.duckbar.disinfoExp&&"j"===e.searchExperiments.getActiveVariant("infoboxexp"))return"news"===t;var i=this.getModule(t);return"low"!==i.signal||"maps_places_multiple"!==i.pixelId&&"maps_places_single"!==i.pixelId},getModule:function(e){return"web"===e&&(e=this.defaultId),this.modules[e]},getModules:function(t){var i,s=[];for(var a in this.modules)i=this.modules[a],t&&i.position===t&&s.push(i),t||s.push(i);return e.pageLayout&&t===e.Models.ModulesPositions.SIDE&&e.pageLayout.sortModulesBySlottedInSidebar(s),s},getModuleInfo:function(e){return this.getModules(e).map((function(e){return e.pixelId+":"+e.model.openType+":"+e.signal}))},isExpandedImages:function(e,t){return"images"===e&&"e"===t.activeTabOpenType},getDefaultTopModule:function(){return this.defaultId},setDefaultTopModule:function(e){this.set("defaultId",e)},setOpenType:function(e,t){var i=this.getModule(e);i&&(i.model.openType=t)},loadContent:function(t,i,s){(s=s||{}).fromDeep=!0;var a=e.Data.answers.getById(t);"function"==typeof a.onLoad&&a.onLoad(i,s);var o=this.getModule(t);o&&(o.model.loaded=!0,i&&i.results?(o.model.addItems(i.results,s),i.layout&&o.model.set("layout",i.layout)):(this.getDefaultTopModule()===o.model.id||o.model.waitingForItems)&&o.model.emit("load"))},slotModule:function(t,i,s,a,n){var l=this.modules&&this.modules[i];if(-1!==r.indexOf(i)){var d=l&&l.model&&l.model.items.length;if(l&&l.model&&!d&&!l.model.waitingForItems)return void e.pageLayout.recordDeviation(i,"module",a,null,"content");if("news"===i&&1===d)return void e.pageLayout.recordDeviation(i,"module",a,null,"single_item")}if(this.slots[t]={name:i,$el:s,area:a,isAtBottom:n},o[i]&&l){var c="sidebar"===a?e.Models.ModulesPositions.SIDE:e.Models.ModulesPositions.TOP;l.model.updateModulePosition(l,c)}"maps_places"!==i&&"maps_maps"!==i||"m00"!==t||"sidebar"===a||!e.duckbar.mapsPlacesTimer||(e.duckbar.mapsPlacesTimer.hasSlotted=!0),this._emitChange("slotted")},_appendModel:function(t){var i=t.answerTypeObj||n;$.extend(t,i);var s={};if(s=t.answerType&&e.Models.Answers[t.answerType]?new e.Models.Answers[t.answerType](t):new e.Models.Answer(t),!t.serviceURL&&!t.doNotCoerceData){s.meta.update(t.meta);var a=$.isArray(t.data)?t.data:[t.data||t];s.addItems(a,t.ads)}s.openType=this.getInstance("openPixel").getOpenType(t,{autoOpened:!this._currentIA,qsOpened:this._currentIA}),t.pixelId=s.pixelId,t.model=s},isAlreadySlotted:function(e){return this.modules[e]&&this.modules[e].slotted}})}(DDG),function(e){var t=e.Views.Base;e.Views.ModulesLayout=function(i){this._selectors=i.selectors?this._combineSelectors(i.selectors):{},this._selectorCache={},this._verticalId=i.verticalId,this.menu=i.menu,t.call(this,i),this.bindEvents([[this.model,"change:modules",this._render],[this.model,"change:autoOpenedId",this._showPendingTabs],[this.model,"change:expandedMapId",this._createMapVertical],[this.menu,"set-active",this._menuChanged],[this.model,"change:slotted",this._slotModules],[e.deep,"load:any",this._onDeepFinished.bind(this)]])},e.Views.ModulesLayout.prototype=$.extend({},t.prototype,{recalculateModuleSizes:function(){e.duckbar&&e.duckbar.isDone&&!this._hasRecalculatedModuleSizes&&(this._triggerCalculateSize(this.views),this._hasRecalculatedModuleSizes=!0)},_triggerCalculateSize:function(e){for(var t in e)$.isArray(e[t])?this._triggerCalculateSize(e[t]):(e[t].calculateSize&&e[t].calculateSize(),e[t].views&&this._triggerCalculateSize(e[t].views))},_getSelector:function(t,i){return this._selectorCache[t]||(this._selectorCache[t]=$(this._selectors[t])),i.allowModuleIA?e.duckbar.$topModuleWrapper:this._selectorCache[t]},_menuChanged:function(t){var i=this.model.getModule(t),s=this._canAppendModuleAsTopModule(i,t);for(var a in this.views){var o=this.views[a];o.renderedPosition===e.Models.ModulesPositions.TOP&&o.$el&&(!o.menuAdded||!s&&"web"!==t&&("products"!==t&&"recipes"!==t||i.slotted)||o.$el.hide())}s&&this._appendView(i,null,!0)},_canAppendModuleAsTopModule:function(t,i){if(!t)return!1;var s=this.menu&&this.menu.itemsById[i]&&this.menu.itemsById[i].active&&"web"!==i;return(!t.allowVertical||!s)&&((!t.allowModuleIA||t.id!==i)&&(e.pageLayout.shouldExpandToVertical(t.model.nameId)?void 0:!!(t&&this.model.isTopModule(t.model.id)&&this.model.canShowModule(t.model.id))||void 0))},_showPendingTabs:function(){"web"===this._verticalId&&this.model.getModules().forEach(function(e){var t=!0;e.model.hasMap=this._hasMapTab(e),e.model.isSideModule&&this.model.canShowSideModules()?t=e.model.hasMap:this.model.autoOpenedId&&(this.model.autoOpenedId!==e.id||e.model.hasMap)?("about"===e.id||e.preventTab)&&(t=!1):t=!1,t&&this.menu.addAnswer(e.model)}.bind(this))},_showAboutTabIfMissing:function(){var t=e.getProperty(this,"views.about"),i=e.getProperty(e,"duckbar.tabs.about");i&&!t&&this.menu.addAnswer(i)},_render:function(){this.model.slotsPendingRender.forEach(function(e,t){var i=this.model.getModule(e.name);i&&(this.model.slotsPendingRender.splice(t,1),this._attemptToSlotModule(e,i))}.bind(this)),DDG.pageLayout&&DDG.pageLayout.sidebarReady&&this._renderSideModules()},_hasMapTab:function(t){var i=this.model.getModule(t.id),s=!1;return"about"===i.id&&t.data.Infobox&&(s=new e.Models.Modules.AboutInfoBox(t.data).maps.length),"maps_maps"===i.id||"maps_places"===i.id||s},_appendView:function(t,i,s){var a=t.model.id;if(this.views[a])this.views[a].$el.is(":hidden")&&(this.views[a].$el.show(),t.allowModuleIA||e.openPixel.fire(t,"i"));else{var o=t.model.position,n=this._getSelector(o,t);if(!n.selector||!n[0])return;i?n=i:o===e.Models.ModulesPositions.SIDE&&t.slotted&&(n=".js-vertical-sidebar-slotted-modules");try{var l=new e.Utils.TabViewBuilder,r=l.build({model:t.model,appendTo:n});if(r.renderedPosition=o,r.show(),!t.slotted&&t.triggered||t.notTriggeredByBing){var d="triggering";if("stocks"===t.id&&e.pageLayout.layout){var c=e.pageLayout.layout.mainline.items.findIndex((function(e){return"stocks"===e[0]})),h=!(!e.pageLayout.layout.sidebar||!e.pageLayout.layout.sidebar.items.find((function(e){return"stocks"===e[0]})));d=0===c?null:-1!==c||h?"placement":"triggering"}d&&e.pageLayout.recordDeviation(t.model.id,"module",null,t,d)}s?r.menuAdded=!0:e.openPixel.fire(t,"i"),this.views[a]=r,$.isFunction(t.model.canShowSnippet)&&t.model.canShowSnippet()&&(this.snippet=l.buildSnippet({prependTo:this._selectors[e.Models.ModulesPositions.TOP],answer:t.model}),e.pageLayout.recordDeviation("local-snippet","other","mainline")),r.model.headerType>0&&e.duckbar.failed("maps_maps")}catch(t){e.pixel.fire("jse","serp",{msg:encodeURIComponent(t.message)})}}},_combineSelectors:function(t){var i={};for(var s in t){var a=e.Models.ModulesPositions[s];a&&(i[a]=t[s])}return i},_slotModules:function(){for(var e in this.model.slots){var t=this.model.slots[e],i=this.model.getModule(t.name);if(i){if(!this._attemptToSlotModule(t,i)){delete this.model.slots[e];continue}}else this.model.slotsPendingRender.push(t);delete this.model.slots[e]}},_renderSideModules:function(){for(var t=this.model.getModules(e.Models.ModulesPositions.SIDE),i=0;i=3&&e.pixel.fire("im","t",{r:a,t:1e3})}var r=this.endpoint.SERPAds.impression,d=r,c=e.history.get("ia");if(r+="&impr="+this._getSERPAdImpressionString(t),(n.length||l.length)&&!this._hasTriedSendingCarouselAds){var h=n.concat(l).join(",");r+="&rvf="+encodeURIComponent(h)}this._hasTriedSendingCarouselAds=!0,1===e.deep.pageNumber&&c&&"web"!==c&&i.mainline&&i.mainline.hasAds&&e.duckbar.getActiveTab()&&(r+="&aba=1"),this._sentImpressionFeedback[d]&&e.pixel.fire("adreporting.duplicated-error"),this._sendFeedbackRequest({url:r,complete:s,errorPixel:"im",errorSubPixel:"x"}),this._sentImpressionFeedback[d]=!0}},_sentImpressionFeedback:{},sendShoppingImpressions:function(t){var i=[],s=t.filter((function(e){return!e.hasReportedImpression&&!e.free_listing})),a=this._formatImpressionItems(s,"c");0!==s.length&&(s.forEach((function(t){t.inViewport||(e.device.isMobileDevice&&(t.hasReportedMobileHidden=!0),i.push(t.tid)),t.hasReportedImpression=!0})),this._sendFeedbackRequest({url:this.endpoint.shopping.impression,payload:{impr:a,rvf:i.join(",")},errorPixel:"im",errorSubPixel:"px"}))},sendCarouselAdsVisibility:function(e){if(e.length&&this.endpoint.SERPAds.visibility){var t=this.endpoint.SERPAds.visibility,i=e.join(",");t+="&vis="+encodeURIComponent(i),this._sendFeedbackRequest({url:t,errorPixel:"vi",errorSubPixel:"x"})}},sendShoppingVisibility:function(e){if(e.mobile){var t=e.items.filter((function(e){return e.inViewport&&!e.hasReportedMobileVisibility&&e.hasReportedMobileHidden})).map((function(e){return e.hasReportedMobileVisibility=!0,e.tid}));t.length>0&&this._sendFeedbackRequest({url:this.endpoint.shopping.visibility,payload:{vis:t.join(",")},errorPixel:"vi",errorSubPixel:"px"})}else if(e.unsentHoveredItems&&e.unsentHoveredItems.length>0||e.exploreByItemClickedIURL){var i={};e.unsentHoveredItems.length>0&&(i.vis=e.unsentHoveredItems.join(",")),e.exploreByItemClickedIURL&&(i.iurl=e.exploreByItemClickedIURL),this._sendFeedbackRequest({url:this.endpoint.shopping.visibility,beacon:e.beacon,payload:i,errorPixel:"vi"+(e.exploreByItemClickedIURL?"ebi":""),errorSubPixel:"px"})}},setEndpoint:function(e,t){if(this.endpoint[e])for(var i in t)!1===t[i]?delete this.endpoint[e][i]:this.endpoint[e][i]=t[i]},hasEndpoint:function(t,i){return!!e.getProperty(this,"endpoint."+t+"."+i)},_sendFeedbackRequest:function(t){if(t.url){var i=function(t){$.ajax({url:t.url,data:t.payload||null,async:!t.synchronousRequest,error:function(i,s,a){e.pixel.fire(t.errorPixel,t.errorSubPixel,{status:s,error:i.responseText,code:i.status})},success:function(){"im"!==t.errorPixel&&"vi"!==t.errorPixel||"x"!==t.errorSubPixel||e.pixel.fire(t.errorPixel,"s")},complete:t.complete||null})},s=function(e){var t={};return e.split("&").forEach((function(e){var i=e.split("="),s=i[0],a=i[1];t[s]=decodeURIComponent(a)})),t};t.beacon?function(e){if(navigator&&navigator.sendBeacon){var t=new FormData,a=e.url.split("?"),o=a[0],n=a[1],l=$.extend(e.payload||{},s(n));for(var r in l)t.append(r,l[r]);navigator.sendBeacon(o,t)}else i($.extend(e,{synchronousRequest:!0}))}(t):i(t)}else e.pixel.fire(t.errorPixel,"me",{error:"missing endpoint for: "+t.errorSubPixel})},_formatImpressionItems:function(e,t){return e.map((function(e){var i,s=e.tid||e;return i="string"==typeof s&&"v"===s.slice(-1)?s:s+(t||e.position).substring(0,1),e.visibleExtensions&&e.visibleExtensions.length>0&&(i+=":"+e.visibleExtensions.map((function(e){return encodeURIComponent(e)})).join(";")),i})).join("|")},_getSERPAdImpressionString:function(e){var t="",i=e.carouselAds.mainline.visible.length||e.carouselAds.mainline.hidden.length||e.carouselAds.sidebar.visible.length||e.carouselAds.sidebar.hidden.length;if(!e.rendered.length&&!i)return t;if(t+=this._formatImpressionItems(e.rendered),i&&!this._hasTriedSendingCarouselAds){""!==t&&(t+="|");var s=[];for(var a in e.carouselAds){var o=e.carouselAds[a].visible.concat(e.carouselAds[a].hidden);o.length>0&&s.push(this._formatImpressionItems(o,a))}s.length>0&&(t+=s.join("|"))}return t=encodeURIComponent(t)}})}(DDG),function(e){var t=e.Models.Base,i={wikipedia_fathead:"about"},s={ad:1,products:1,autoads:1,wikipedia_fathead:1},a=["maps_maps","wikipedia_fathead","maps_places","about"],o={high:3,medium:2,low:1},n="SERPAds";e.Models.PageLayout=function(i){this.organics={config:{count:0,slots:{}}},this.ads={config:{count:0,slots:{}},rendered:[],carouselAds:{mainline:{visible:[],hidden:[]},sidebar:{visible:[],hidden:[]}}},this.deviations={},this.deviationSourceUrls={},this.disambiguationSignals=[],t.call(this,{}),this.adReporting=new e.Models.AdReporting,this.bindEvents([[e.deep,"rendered",function(){this.adReporting.sendSERPAdImpressions(this.ads,this.layout,this.resetSERPAdState.bind(this))}.bind(this)]])},e.Models.PageLayout.prototype=$.extend({},t.prototype,{canSendSERPAdImpressions:function(){return!!(this.layout&&this.ads.items&&this.adReporting.hasEndpoint(n,"impression"))},initialize:function(t,i){t&&t.sidebar&&t.sidebar.items&&(t.sidebar.items=t.sidebar.items.filter((function(e){return"organic"!==e[0]})),0===t.sidebar.items.length&&delete t.sidebar);var s=i&&void 0!==i.start&&0===Number(i.start);s&&DDG.deep.fallback&&DDG.deep.finished?e.pixel.fire("ddr"):(s&&!e.device.isMobile&&t&&t.sidebar&&t.sidebar.items&&this._injectSpreadCtaIntoSidebar(t),s&&t&&this._disinformationWarningExperiment(t),this.set("layout",t),this.layout&&this.layout.sidebar&&e.device.isMobile&&e.pixel.fire("bms"),this._layoutMainline(),this._layoutSidebar(),nrn("a",this.ads.items),nrn("d",this.organics.items))},load:function(e,t,i){if("a"===e){if(this.ads.items=t,i){var s={impression:i.page_load_url};this.adReporting.hasEndpoint(n,"visibility")||(s.visibility=i.visibility_url),this.adReporting.setEndpoint(n,s)}}else"d"===e&&(this.organics.items=t)},recordDeviation:function(t,i,s,a,o){var n=e.Data.answers.getById(t);if(t&&i&&!n.suppressDeviations)try{if("module"===i&&a?(s=s||(a.isSideModule?"sidebar":"mainline"),this.deviations[t]={area:s,type:i}):"ia"===i?(s=s||"mainline",this.deviations[t]={area:s,type:i}):s&&(this.deviations[t]={area:s,type:i}),this.deviations[t])if(this.deviations[t].reason=o||"unknown",e.isDev&&e.device.isChromiumBased)try{var l,r=(new Error).stack.split("\n")[2].match(/\((.*)\)/)[1];this.deviationSourceUrls[t]=r}catch(e){}}catch(l){e.pixel.fire("devx","r",{msg:l})}},sendDeviations:function(){try{var t={};for(var i in e.modulesLayout.slotsPendingRender.forEach((function(e){t[e.name]={area:e.area,type:"module"}})),t){var s=t[i];this.deviations[i]?this.recordDeviation(i,s.type,s.area,null,"relocated"):this.recordDeviation(i,s.type,s.area,null,"data")}this.finalDeviations=$.extend({},this.deviations);var a="";if(!this.finalDeviations)return;for(var o in this.finalDeviations){""!==a&&(a+=",");var n=this.finalDeviations[o];"ia"!==n.type&&"triggering"!==n.reason&&"unknown"!==n.reason&&"relocated"!==n.reason||!this.layout[n.area]||(n.aboveAd=this.layout[n.area].hasAds),a+=o+":"+n.type+":"+n.area+":"+n.reason+":"+(n.aboveAd?1:0)}e.isDev&&"true"!==e.history.get("hideDeviations")&&!e.device.isIE&&Object.keys(this.finalDeviations).length&&this._showDeviationsInConsole(),""!==a&&e.pixel.fire("dev",{d:a})}catch(t){e.pixel.fire("devx","s",{msg:t})}},_showDeviationsInConsole:function(){var t=function(e){return Object.keys(this.finalDeviations).reduce(function(e,t){var i;return e[t[0].toUpperCase()+t.slice(1)]=(i=this.finalDeviations[t],Object.keys(i).reduce((function(e,t){var s=t[0].toUpperCase()+t.slice(1);return"AboveAd"===s?e[s="Above Ad"]=!!i[t]:e[s]=i[t],e}),{})),e}.bind(this),{})}.bind(this),i=function(){Object.keys(this.finalDeviations).forEach((function(e){}),this)}.bind(this);t(this.finalDeviations);e.device.isChromiumBased&&i()},isDisambiguationSignal:function(e){var t;if(e.from&&-1!==a.indexOf(e.from))return this.disambiguationSignals.forEach((function(i,s){i.from===e.from&&(t=!0,o[e.signal]>o[i.signal]&&(i.signal=e.signal))})),t||this.disambiguationSignals.push(e),!0},shouldExpandToVertical:function(t){var i=e.Data.answers.getByNameId(t);return!i.preventTab&&!i.expandInPlace&&(e.history.get("iax")===t||e.duckbar.validateRequery(e.hidden.get("iar"))===t&&null!==t)},reportTextAdVisible:function(e,t){if(e.adext&&e.adext.tid){var i={tid:e.adext.tid,position:e.side?"sidebar":"mainline",visibleExtensions:[]};t&&t.forEach((function(e){e&&(e.tid&&i.visibleExtensions.push(e.tid),e.tids&&(i.visibleExtensions=i.visibleExtensions.concat(e.tids)))})),this.ads.rendered.push(i)}},reportProductAdVisibility:function(e,t,i){var s=[];return t.forEach(function(t){if(t.model.tid){var i=t.model.tid;-1===this.ads.carouselAds[e].visible.indexOf(i)&&(this.ads.carouselAds[e].visible.push(i),s.push(i));var a=this.ads.carouselAds[e].hidden.indexOf(i);-1!==a&&this.ads.carouselAds[e].hidden.splice(a,1)}}.bind(this)),i&&i.forEach(function(t){t.model.tid&&-1===this.ads.carouselAds[e].hidden.indexOf(t.model.tid)&&-1===this.ads.carouselAds[e].visible.indexOf(t.model.tid)&&this.ads.carouselAds[e].hidden.push(t.model.tid)}.bind(this)),s},convertSlotToModuleName:function(e){return i[e]||e},isFirstValidSidebarItem:function(t){var i=e.getProperty(this,"layout.sidebar.items");if(i)for(var a in i)if(s[i[a][0]])return i[a][0]===t;return!1},sortModulesBySlottedInSidebar:function(t){var i=e.getProperty(this,"layout.sidebar.items");if(i){var s={};for(var a in i){var o=this.convertSlotToModuleName(i[a][0]);s[o]=a}t.sort((function(e,t){return s[e.id]-s[t.id]}))}},_layoutMainline:function(){this.layout&&this.layout.mainline&&this.layout.mainline.items&&(this._addSlots("mainline"),this._returnFutureSignals())},_layoutSidebar:function(){if(this.layout&&this.layout.sidebar&&this.layout.sidebar.items){var e=this.ads.config.count;this._addSlots("sidebar");var t="ad"!==this.layout.sidebar.items[this.layout.sidebar.items.length-1][0],i=e===this.ads.config.count;(t||i)&&this.emit("renderSidebarSlots"),this.sidebarReady=!0}else this.sidebarReady=!0},_disambiguateSignals:function(t,i){if(t.length&&!(t.length<=1)){var s={mainline:["wikipedia_fathead"],sidebar:["maps_maps"]};if(s[i]&&(t=t.filter((function(e){return-1===s[i].indexOf(e)}))).length&&e.duckbar.futureSignals){var a,o={low:[],medium:[],high:[]},n=this.disambiguationSignals;return"sidebar"===i&&(n=e.duckbar.futureSignals),n.forEach((function(e){-1!==t.indexOf(e.from)&&o[e.signal]&&o[e.signal].push(e.from)})),o.high.length?a=o.high[0]:o.medium.length?a=o.medium[0]:o.low.length&&(a=o.low[0]),"mainline"===i&&(this.disambiguationSignals=this.disambiguationSignals.filter((function(e){return e.from!==a}))),a}}},_addSlots:function(e){for(var t=[],i=this.getInstance("settings").autoloadDisabled(),s="",a=0,o=this.layout[e].items,n=0,l=0;l<10&&n1&&!(o=this._disambiguateSignals(i,e)))return void this.recordDeviation(i.toString(),"module",e,null,"disambiguation");if(o=this.convertSlotToModuleName(o),"mainline"===e&&"uselections"===o)return void this._handleElectionsException(o,e);if("mainline"===e&&"news"===o&&this._manuallyLoadModuleData(o),this._isStackedModule(o,s))return void this.recordDeviation(i.toString(),"module",e,null,"stacked");if("stocks"===o)return;t.push(o),a===this.layout[e].items.length-1&&("sidebar"===e?(this.ads.config.slots[this.ads.config.count]={modules:t,area:e},t=[]):"mainline"===e&&(this.organics.config.slots[this.organics.config.count]={modules:t,area:e},t=[]))}s=o}.bind(this))},_isStackedModule:function(e,t){if("news"===e&&"videos"===t||"videos"===e&&"news"===t)return!0},_returnFutureSignals:function(){this.disambiguationSignals.forEach((function(t){e.duckbar.future_signal_tab(t,!0)}))},resetSERPAdState:function(){this.adReporting.setEndpoint(n,{impression:!1}),delete this.ads.config.hasCarouselAds,this.ads.carouselAds.mainline.hidden=[],this.ads.carouselAds.sidebar.hidden=[],this.ads.rendered=[]},_handleElectionsException:function(e,t){this.layout.mainline.items.some((function(e){return e.length&&"news"===e[0]}))||(this.recordDeviation(e,"module",t,null,"relocated"),this._manuallyLoadModuleData(e,!0))},_manuallyLoadModuleData:function(e,t){this.emit("getModuleData",{module:e,signal:t})},_injectSpreadCtaIntoSidebar:function(t){var i=decodeURIComponent(window.rq).toLowerCase().split(/\s+/),s=["google","facebook","privacy"];if(i.find((function(e){return s.includes(e)}))&&e.device.isEnglish&&!e.addToBrowser.canShowOnDesktopSerp()){var a=t.sidebar.items.findIndex((function(e){return e&&"ad"===e[0]}));a>-1?t.sidebar.items.splice(a,0,["spreadCTA"]):t.sidebar.items.push(["spreadCTA"]),e.duckbar.loadModule("spreadCTA",{})}},_maybeInjectSerpRetentionSurvey:function(t){window.utils&&window.utils.canShowSerpRetentionSurvey&&!window.utils.canShowSerpRetentionSurvey(e.settings,e.device,e.extension,e.opensearch)||(t.sidebar||(t.sidebar={items:[]}),t.sidebar.items.push(["serpRetentionSurvey"]),e.duckbar.loadModule("serpRetentionSurvey",{}))},_disinformationWarningExperiment:function(t){if(e.duckbar.disinfoExp){var i=e.searchExperiments.getExperimentGroup("infoboxexp");["e","g","i"].includes(i)&&!e.device.isMobile&&(t.sidebar=t.sidebar||{items:[]},t.sidebar.items.unshift(["infobox"]))}}})}(DDG),function(e){var t=e.Views.Base;e.Views.PageLayout=function(e){t.call(this,e),this.bindEvents([[this.model,"renderSidebarSlots",this._renderSidebarSlots]])},e.Views.PageLayout.prototype=$.extend({},t.prototype,{_render:function(){$.noop()},_renderSidebarSlots:function(){var e=this.model.ads.config.slots.length;for(var t in this.model.ads.config.slots)this.renderModuleForSlot("a",t,".js-sidebar-ads",e,"sidebar")},renderModuleForSlot:function(t,i,s,a,o){"a"===t?t="ads":"d"===t&&(t="organics");var n=this.model[t].config.slots[i];n&&n.modules&&n.modules.length&&(n.modules.forEach(function(l,r){var d=this.model[t].items[i];if(o||(o="ads"===t&&d.side?"sidebar":"mainline"),n.area===o){var c=new e.Views.ModuleContainer({slot:i,count:r,appendTo:$(s)}),h=i===a;e.modulesLayout.slotModule("m"+i+r,l,c.$el,o,h),n.modules[r]=null}}.bind(this)),n.modules=n.modules.filter((function(e){return e})),n.modules.length||delete this.model[t].config.slots[i])}})}(DDG),function(e){var t={mlb_games:300,nfl_games:299,answer:200,maps_places:80,about:50,videos:-10,images:-20},i={maps_maps:400,forecast:49,products:199,news:-300,images:-51,maps_places_snippet:-300},s={high:3,medium:2,low:1},a={"item-selected":"onItemSelected","item-unselected":"onItemUnselected","item-shown":"onItemShown",show:"onShow",hide:"onHide"},o=DDG.get_now();e.Duckbar=function(){e.openPixel=new e.Models.OpenPixel({pageLoadTime:o}),this.menu=new e.Models.AnswerBarMenu,this.modulesLayoutView=new e.Views.ModulesLayout({menu:this.menu,model:e.modulesLayout,verticalId:"web",selectors:{SIDE:".js-sidebar-modules",TOP:".js-ia-modules"}}),this.mapsPlacesTimer={},this.mapsPlacesTimer.pageLoadTime=o,this.pageLoadTime=o,this.prepareConvertedSpicesHooks()},e.Duckbar.prototype={id:"duckbar",tabs:{},tabsByNameId:{},froms:{},activeTabId:null,futureSignals:[],futureSignalsById:{},failedIA:{},isReady:!1,areOrganicsShowing:!0,onReady:function(){this.isReady=!0,this.$zeroClickWrapper=$("#zero_click_wrapper"),this.$webContentWrapper=$("#web_content_wrapper"),this.$verticalWrapper=$("#vertical_wrapper"),this.$topModuleWrapper=$(".js-ia-modules"),this.$el=$("#duckbar"),e.keyboard.on("left",this._openNext.bind(this,"l")),e.keyboard.on("right",this._openNext.bind(this,"r")),this.menuView=new e.Views.AnswerBarMenu({appendTo:this.$el,model:this.menu}),this.menu.on("item-active",this.open.bind(this)),e.Data.answers.shouldAddAutomatically().forEach(this.add.bind(this)),e.router.add("toggle-map",this._toggleExpandedMap.bind(this)),this.addOnReady&&this.addOnReady.forEach((function(e){this.add(e)}),this),this.show("static"),setTimeout((function(){DDG.duckbar.show("placeholder")}),5e3),setTimeout((function(){DDG.duckbar.show("placeholder_images")}),4e3)},getActiveTab:function(){return this.tabs[this.activeTabId]},setOrganicsVisibility:function(t,i){if(t)this.$webContentWrapper.removeClass("is-hidden"),e.footer.set("visible",e.settings.isDefault("kav")),this.modulesLayoutView.recalculateModuleSizes();else{"images"!==i&&"videos"!==i||e.footer.set("visible",!e.settings.isDefault("kc"));var s=e.getProperty(this,"tabs."+i+".view.modulesLayoutView");s&&s.recalculateModuleSizes(),this.$webContentWrapper.addClass("is-hidden")}this.areOrganicsShowing=t},tabIsActiveFullPage:function(e){return e&&e.model&&e.model.active&&("news"===e.model.id||e.model.expanded)&&e.model.isFullPage},addPlaceholder:function(t){if(!(this.openedTab||this.placeholder||e.history.get("iac")||!e.settings.isDefault("kz")||"maps_places"===t||"maps_maps"===t&&e.getProperty(e,"modulesLayout.modules.directions"))){var i=new e.Models.Answer({id:"placeholder"});e.modulesLayout.isTopModule(t)?this.placeholder=new e.Views.Modules.Placeholder({model:i,signalWait:t,appendTo:this.$topModuleWrapper}):this.placeholder=new e.Views.AnswerBar.Answers.Placeholder({model:i,signalWait:t,appendTo:this.$zeroClickWrapper}),e.openPixel.firePlaceholder(t)}},removePlaceholder:function(e){this.placeholder&&(this.placeholder.destroy(),delete this.placeholder)},open:function(t,i){var s,a=this.tabs[t];if(i=i||{},"images"===t&&this.fallbackFromNonModule&&i.is_last_resort_tab&&i.autoOpened&&!i.placeholderIsModule&&(a=new DDG.DuckbarTab(t,this.fallbackFromNonModule),this.tabs.images=a,a.model.openType=e.openPixel.getOpenType(a.model,i),e.openPixel.fire(a)),e.deep.pending&&-1===$.inArray(t,e.Data.DeferredVerticals)&&e.deep.run(),i.mapId||"maps_expanded"===t)return a=this.tabs.maps_expanded,i.isMapExpanded=!0,i.isDirections="directions"===e.history.get("iaxm")||!!(e.modulesLayout&&e.modulesLayout.modules&&e.modulesLayout.modules.directions),i.isMapStart=!("start"!==e.history.get("iaxm")),i.model=i.answer||a.model,this._toggleExpandedMap(i),a&&a.model&&(s=e.openPixel.getOpenType(a.model,i),a.model.openType=s,e.openPixel.fire(a),"q"===s&&e.pageLayout.recordDeviation(a.id,"vertical")),void(this.isDone=!0);if(a&&!e.getProperty(a,"model.meta.hidden")&&("e"!==(s=e.openPixel.getOpenType(a.model,i))&&"d"!==s||e.device.scrollTop(0),(!i.autoOpened||!this.openedTab)&&(!i.autoOpened||e.settings.isDefault("kz")||"web"===t))){if(this.openedTab=1,this.placeholder&&this.placeholder.isModule&&i.is_last_resort_tab&&"images"===t)return a.model.openType=e.openPixel.getOpenType(a.model,i),e.openPixel.fire(a),this.menu.setActive("web"),void this.placeholder.showImages(this.tabs.images.model);this.placeholder&&this.removePlaceholder("open");var o=this.getActiveTab();if(o){var n=o.model.isModule&&(o.model.allowVertical||o.model.allowModuleIA);if(o.id===t&&(a.model.isAutoLoadingImages&&a.model.isAutoLoadingImages(s)||!n))return;o.model.openedFromModule&&e.device.isMobile||DDG.ImageLoader.loadMore(),o.hide()}this.activeTabId=t;var l=a.model.meta;if("web"!==a.pixelId&&"e"!==s&&"b"!==s&&(this.initialTabOpenType=s,this.initialTab=a),this.activeTabOpenType=s,void 0===l.autoExpand?l.autoExpand=is_mobile?1:0:l.autoExpand&&!is_mobile&&"e"!==s&&(l.autoExpand=0),l.autoExpand&&void 0===l.autoExpandRows){var r=DDG.history.get("iai");l.autoExpandRows=is_mobile&&(i.autoOpened||i.qsOpened&&!r)?1:0}a.model.allowVertical&&("r"!==s&&"e"!==s||(a.isVertical=a.model.isVertical=!0,a.isModule=a.model.isModule=a.isOrganicModule=a.model.isOrganicModule=!1,e.history.set("iar",a.nameId)));var d,c="b"===s&&null!==a.id&&this.validateRequery(DDG.history.get("iar",!0))===a.id;"e"!==s&&"r"!==s&&(a.model.allowVertical||a.model.allowModuleIA)&&a.module&&!c&&(a=this.tabs[a.id].module),this.tabs[t].model.allowModuleIA&&"e"===s&&e.getProperty(this,"initialTab.id")===t&&e.device.isMobile&&a.model.meta&&(a.model.meta.autoExpand=1,a.model.meta.autoExpandRows=0),d=a.model.allowModuleIA&&"e"!==s?this.$topModuleWrapper:a.isVertical?this.$verticalWrapper:this.$zeroClickWrapper,a.show({openType:s,minimizeHeight:a.isModule,loadVertical:!i.autoOpened||"f"===s,appendTo:d});var h=a.id;!a.isModule||"e"===s||this.initialTab&&a.id!==this.initialTab.id||e.pageLayout.shouldExpandToVertical(a.model.nameId)||(h="web"),e.search.set("isVertical",a.isVertical),this.menu.setActive(h),"web"===a.id&&"e"!==s||i.skipPixel||!a.model.active&&a.module||e.openPixel.fire(a,s),this.setOrganicsVisibility(!this.tabIsActiveFullPage(a),a.id),this.isDone=!0,(i.autoOpened||i.qsOpened)&&e.modulesLayout.set("autoOpenedId",a.id)}},createTab:function(t){var i;for(var s in i=!e.modulesLayout.isTopModule(t.id)||t.allowVertical||t.allowModuleIA||e.pageLayout.shouldExpandToVertical(t.nameId)?new DDG.DuckbarTab(t.id,t):new DDG.NoOpDuckbarTab(t.id),a){var o=t[a[s]];o&&"function"==typeof o&&i.on(s,o)}return i},addTab:function(t){var i=t.signal||"low",a=this.tabs[t.id];return t.isSideModule&&!t.isFullPage?(this.removeFutureSignal(t.id),null):(t.from&&(this.froms[t.from]=!0),a?s[i]>s[a.signal]&&(a.signal=i):(a=this.createTab(t),"images"===t.id&&this.addFallbackData(t),this.tabs[a.id]=a,this.tabsByNameId[a.nameId]=a,a.on("close",this.open.bind(this,"web",{defaultOpened:!0}))),(!t.isModule||t.allowVertical||t.allowModuleIA||e.pageLayout.shouldExpandToVertical(t.nameId))&&this.menu.addAnswer(a.model),"maps_expanded"===t.id||t.serviceURL||a.append(t),a)},addFallbackData:function(t){this.fallbackFromNonModule=Object.assign({},t,{allowModuleIA:!1,isModule:!1,preventModule:!0,isNonModuleFallback:!0},e.device.isMobile?{isFullPage:!1,meta:{autoExpand:1}}:{})},scheduleIAOpen:function(t){var i=e.history.get("ia"),s=e.history.get("iaxm")&&"maps_expanded"===t.id;null!==t.nameId&&t.nameId===this.validateRequery(e.hidden.get("iar"))?this.open(t.id,{qsOpened:1}):(!s&&(!i||i!==t.id&&i!==t.nameId||"maps_expanded"===t.id)||this.activeTabId&&this.getActiveTab().nameId===i||setTimeout(this.open.bind(this,t.id,{qsOpened:1}),1),setTimeout(this.show.bind(this,"add"),1))},add:function(t){if(!this.isReady)return this.addOnReady||(this.addOnReady=[]),this.addOnReady.push(t),null;if(t.activeTabOpenType=this.activeTabOpenType,!(t=e.modulesLayout.addModule(t)))return null;var i=this.addTab(t);return this.scheduleIAOpen(t),i},add_array:function(e){if(e)for(var t=0;ts[t.signal]?-1:1}))))))},removeFutureSignal:function(e){this.futureSignals=this.futureSignals.filter((function(t){return t.from!==e}))},show:function(t){if("placeholder"===t&&(this.mapsPlacesTimer.hasSlotted||this.mapsPlacesTimer.hasHighSignal)){var s=!1;try{e.pageLayout.layout.mainline.items.forEach((function(e){e.forEach((function(e){"maps_places"!==e&&"maps_maps"!==e||(s=!0)}))}))}catch(e){}s&&!this.mapsPlacesTimer.hasLocalTriggered&&e.pixel.fire("lclp",{timer:DDG.get_now()-o})}var a=DDG.get_now(),n=[],l=[],r=0,d=[],c=[],h=[],p=a-o;for(var u in this.futureSignals)if(u=this.futureSignals[u],!this.failedIA[u.from]&&"low"!==u.signal&&!e.history.get("ia")&&("high"===u.signal?n[u.from]=1:"medium"===u.signal&&(l[u.from]=1),!this.froms[u.from])){if(this.tabs[u.from]){var m=this.tabs[u.from];if("static"!==m.type)continue;if(0!==m.numItems())continue}if(a-u.now250+y&&v&&this.addPlaceholder(r),this._showTimer&&clearTimeout(this._showTimer),void(this._showTimer=setTimeout(this.show.bind(this,"self"),50));var b,w=0;if(!this.openedTab&&(this.placeholder||d.length||c.length)&&!(b=this._getBestTabToOpen({signalTabsHigh:d,signalTabsMedium:c,signalWatchHigh:n,modulesOnly:this.placeholder&&this.placeholder.isModule,iasOnly:this.placeholder&&!this.placeholder.isModule}))&&this.placeholder&&(p>4e3||!_)&&(w=1,(b=this._getLastResortTab({tabs:h,modulesOnly:this.placeholder&&this.placeholder.isModule,iasOnly:this.placeholder&&!this.placeholder.isModule}))&&(this._fireFallbackPixel(this.placeholder.signalWait),e.modulesLayout.set("autoOpenedId",b.id))),!this.openedTab&&b){if(!this.placeholder&&"maps_places"!==b.id){var k=b.from||b.id;if(b.timeAdded-(e.deep.finished||a)>250+(i[k]||0))return}var x=this.placeholder&&this.placeholder.signalWait;this.open(b.id,{autoOpened:!0,is_last_resort_tab:w,placeholderIsModule:x&&e.modulesLayout.isTopModule(x)})}else this.placeholder&&p>5e3&&this.placeholder.showNoResults();this.activeTabId||this.placeholder||this.validateRequery(e.history.get("iar"))||e.history.get("ia")||!e.deep.finished||e.duckbar.open("web",{autoOpened:!0})},getNameId:function(t){var i=e.strip_non_alpha(t.toLowerCase());return"all"!==i?i:"web"},loadAnswer:function(e,t){var i=this.tabs[e],s={keepServiceURL:!0};this.loadModule(e,t,s),i&&!i.model.noModuleItems&&i.loadContent(t,s)},load:function(e,t){return this.loadAnswer(e,t)},loadModule:function(t,i,s){var a=e.Data.answers.getById(t);a&&0!==Object.keys(a).length&&(i&&i.results||"function"!=typeof a.load?(this.add(a),e.modulesLayout.loadContent(t,i,s||{})):a.load(function(e){this.add(Object.assign(a,{data:e}))}.bind(this),i,s))},disinformationExperiment:function(t){this.disinfoExp=new e.Models.DisInfoExp(t),this.loadModule("infobox",{results:t},{});var i=e.searchExperiments.getActiveVariant("infoboxexp"),s=["d","f","h"].includes(i);"j"===i?(this.futureSignals=[],this.future_signal_tab({from:"news",signal:"high"})):s||this.removeFutureSignal("disinformation_label")},resetActiveTab:function(){var t=e.duckbar.activeTabId;e.getProperty(this,"initialTab.id")===t&&e.getProperty(this,"tabs."+t+".isModule")&&(t="web"),this.menu.setActive(t)},_getBestTabToOpen:function(t){var i,s=t.signalTabsHigh||[],a=t.signalTabsMedium||[],o=t.signalWatchHigh||{};if(this.disinfoExp&&"j"===e.searchExperiments.getActiveVariant("infoboxexp"))return this.tabs.news;for(var n=0;ns&&(s=l,a=n))}return a},_fireFallbackPixel:function(t){var i,s,a=this.futureSignals.map((function(e){return e.from+":"+e.signal})).join(","),n="",l="",r=(new Date).getTime();try{for(var d in this.failedIA)s=this.failedIA[d]-DDG.deep.finished,n&&(n+=","),n+=d+":"+s;for(var c in this.tabs)s=(i=this.tabs[c]).timeAdded-DDG.deep.finished,"static"!==i.type&&(l&&(l+=","),l+=c+":"+i.signal+":"+s)}catch(e){}var h={timeSincePageLoad:r-o,timeSinceDeepStarted:DDG.deep.timeSinceStarted(),timeSinceDeepFinished:DDG.deep.timeSinceFinished(),numSignals:this.futureSignals.length,numTabs:Object.keys(this.tabs).length,numFails:Object.keys(this.failedIA).length,signals:a,fails:n,tabs:l},p=i.module&&i.module.model;p&&void 0!==p.resultNum&&(h.l=p.resultNum,h.f=p.filteredNum),e.pixel.fire("iaff",t,h)},_getSideModuleOpenType:function(){return this.activeTabId?this.activeTabOpenType:e.history.get("ia")?"q":"i"},_openNext:function(t){if(!e.keyboard.namespaced(/^autocomplete|modal$/)&&!e.keyboard.focusedOnInput()){var i=this.getActiveTab();i&&i.model.selectedItem||this.menu.openNext(t)}},_toggleExpandedMap:function(t){t=t||{};var i=this.tabs.maps_expanded;i.expandedMap||(i.expandedMap=new e.Views.Verticals.VerticalMap({answer:t.model,directionsModel:t.directionsModel,isDirections:t.isDirections,appendTo:"body"}));var s=e.getProperty(this,"tabs.products.model");s&&s.emit("metabar-reset"),i.expandedMap.toggleExpandedMap(t)},validateRequery:function(e){return window.Bootstrap.validateRequery(e)},prepareConvertedSpicesHooks:function(){var t=e.Data.answers.convertedFromSpice();Object.keys(t).forEach((function(i){window["ddg_spice_"+i]=function(s){var a=t[i].id,o=t[i].name,n=t[i].from;if(void 0===s)return e.duckbar.failed(n||i);window.DDH.add({id:a,name:o,data:s,pixelId:a,convertedFromSpice:!0})}}))}}}(DDG),function(e){e.DuckbarTab=function(t,i){-1!==["videos","images"].indexOf(i.id)&&e.modulesLayout.getModule(i.id)&&!i.preventModule?this.model=e.modulesLayout.getModule(i.id).model:i.answerType&&e.Models.Answers[i.answerType]?this.model=new e.Models.Answers[i.answerType](i):this.model=new e.Models.Answer(i),this.id=this.model.id,this.name=this.model.name,this.nameId=this.model.nameId,this.type=this.model.type,this.signal=this.model.signal,this.pixelId=this.model.pixelId,this.from=this.model.from,this.isModule=this.model.isModule,this.isSideModule=this.model.isSideModule,this.timeAdded=(new Date).getTime(),this.items=this.model.items,this.model.isFullPage&&(this.model.isRequery=e.hidden.get("iar")===this.nameId&&!e.history.get("iax"),this.model.expanded=e.hidden.get("iar")===this.nameId),(i.allowVertical||i.allowModuleIA)&&(this.module=new DDG.NoOpDuckbarTab(t))},e.DuckbarTab.prototype=$.extend({},EventEmitter2.prototype,{append:function(t){t&&(this.model.active&&this.model.items.length&&e.history.get("iaf")||(this.model.meta.update(t.meta),t.data=$.isArray(t.data)?t.data:[t.data||t],this.model.addItems(t.data,t.ads)))},numItems:function(){return this.model.items.length},show:function(t){if(!this.model.active&&(this.$parent=t.appendTo,"web"===this.id||this.view||this._createView()))if(this.model.set("openType",t&&t.openType),t.loadVertical&&(DDG.deep.isBingV7()&&"r"==t.openType?this.model.on("load",this._onLoadedFromDeep.bind(this)):this.model.load()),this.emit("show"),!this.isSideModule||this.model.isFullPage){var i=e.history.get("iax")&&this.model.isFullPage;"web"===this.id||i||e.history.get("iar")||e.pageLayout.recordDeviation(this.model.id,"ia",null,null,"triggering"),this.model.set("active",1),e.history.clear("iac"),this._stashedHistory&&(e.history.set(this._stashedHistory),delete this._stashedHistory),this._stashedHidden&&(e.hidden.set("iaf",this._stashedHidden),delete this._stashedHidden),e.history.set({ia:this.nameId})}else this.view.show()},hide:function(){this.model.active&&(this.isSideModule||(this._stashedHistory=e.history.getNamespace("ia"),e.history.clearNamespace("ia"),e.hidden.get("iaf")&&(this._stashedHidden=e.hidden.get("iaf"),e.hidden.clear("iaf"))),this.model.set("active"),this.emit("hide"))},getHeight:function(e){return this.view&&this.view.getHeight&&this.view.getHeight(e)},destroyView:function(){this.view&&this.view.destroy(),delete this.view,this.model.set("active")},failed:function(){this.model.set("failed",!0)},loadContent:function(t,i){i=i||{},t&&t.results&&("news"===this.id&&(this.model.initialLoad=!0,e.search.spelling&&(this.model.spellingCorrected=!0,this.model.queryEncoded=e.search.spelling.parsedQuery,this.model.vqd=e.search.spelling.suggestionVqd)),this.model.addItems(t.results,i)),this.model.emit("load")},_createView:function(){var t=new e.Utils.TabViewBuilder;return this.view=t.build({model:this.model,appendTo:this.$parent,events:{close:this.emit.bind(this,"close"),"item-selected":this.emit.bind(this,"item-selected"),"item-unselected":this.emit.bind(this,"item-unselected"),"item-shown":this.emit.bind(this,"item-shown")}}),!!this.view},_onLoadedFromDeep:function(){this.model.load()}})}(DDG),function(e){e.NoOpDuckbarTab=function(t){this.model=e.modulesLayout.getModule(t).model,this.id=t,this.name=this.model.name,this.nameId=this.model.nameId,this.type=this.model.type,this.signal=this.model.signal,this.pixelId=this.model.pixelId,this.from=this.model.from,this.isModule=this.model.isModule,this.isSideModule=this.model.isSideModule,this.timeAdded=(new Date).getTime(),this.items=this.model.items},e.NoOpDuckbarTab.prototype=$.extend({},EventEmitter2.prototype,{append:function(e){$.noop},numItems:function(){return this.model.items.length},show:function(t){e.modulesLayout.setOpenType(this.id,t.openType),"i"!==t.openType&&"q"!==t.openType||e.modulesLayout.setDefaultTopModule(this.id),e.history.clear("iac"),this._stashedHistory&&(e.history.set(this._stashedHistory),delete this._stashedHistory),e.history.set({ia:this.nameId})},hide:function(){this.model.active&&(this._stashedHistory=e.history.getNamespace("ia"),e.history.clearNamespace("ia"),e.hidden.get("iaf")&&(this._stashedHidden=e.hidden.get("iaf"),e.hidden.clear("iaf")))},getHeight:function(e){$.noop},destroyView:function(){$.noop},failed:function(){this.model.set("failed",!0)}})}(DDG),function(e){var t=e.Models.AnswerSelectLists,i=e.Models.SelectList;t.Parameter=function(e){i.call(this,e)},t.Parameter.prototype=$.extend({},i.prototype,{serialize:function(){return this.selected&&this.selected.id&&!this.disabled?this.key+":"+this.selected.id:""}})}(DDG),function(e){var t=e.Models.AnswerSelectLists,i=e.Models.SelectList;t.Source=function(e){e.key="src",i.call(this,e)},t.Source.prototype=$.extend({},i.prototype,{getParameterQueryString:function(){if(!this.parameters)return"";var e="";return"local"===this.selected.id?e+=this.parameters.map((function(e){return e.key+"="+e.selected.id})).join("&"):(e="f=",e+=this.parameters.map((function(e){return e.serialize()})).join(",")),e},hasActiveFilters:function(){return this.parameters&&this.parameters.some((function(e){return e.selected&&e.selected.id}))},getRequeryURL:function(t){var i=this.selected.requeryURL;return"function"==typeof i&&(i=i()),-1===(i+=("local"===this.selected.id&&t&&t.queryParsed?t.queryParsed.what:t&&t.query?t.query:e.get_query_encoded())+"&vqd="+(t&&t.vqd||window.vqd)).indexOf("?")?i+="?":i+="&",i+=this.getParameterQueryString(),t&&(delete t.query,delete t.vqd),$.isEmptyObject(t)||(i+="&"+$.param(t)),i}})}(DDG),function(e){var t=e.Models.AnswerSelectLists,i=e.Models.SelectList;t.DirectionSource=function(t){(t=t||{}).values=this._getSources(),t.selectedId=e.settings.get("kam"),i.call(this,t),e.settings.on("change:kam",this.select.bind(this))},t.DirectionSource.prototype=$.extend({},i.prototype,{_getSources:function(){var e=DDG.Data.Settings.directionSources;return Object.keys(e).map((function(t){return $.extend({},e[t],{id:t})}))},_createURLForLocation:function(e,t){var i;return e&&t&&t.address&&t.lat&&t.lon&&(i=(i=(i=(i=e).replace(/\{\{addr\}\}/g,t.address)).replace(/\{\{lat\}\}/g,t.lat)).replace(/\{\{lng\}\}/g,t.lon)),i},getDirectionsURL:function(e){return this.selected?this._createURLForLocation(this.selected.directionsURL,e):""},getMapURL:function(e){return this.selected?this._createURLForLocation(this.selected.mapURL,e):""},getMapTitleText:function(){var e=this.selected.name;return lp("open_in_third_party_app","Open in %s",e)},getSourcesForLocation:function(e){return this._getSources().map(function(t){var i=this._createURLForLocation(t.mapURL,e);return{id:t.id,name:t.name,mapURL:this._createURLForLocation(t.mapURL,e),directionsURL:this._createURLForLocation(t.directionsURL,e),faviconURL:t.faviconURL||i}}.bind(this))},getNonDefaultSourcesForLocation:function(e){return this.getSourcesForLocation(e).filter(function(e){return!this.selected||e.id!==this.selected.id}.bind(this))}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.Maps=function(e){t.call(this,e)},e.Models.Answers.Maps.prototype=$.extend({},t.prototype,{answerItemModel:"MapLocation",addItems:function(e){t.prototype.addItems.call(this,e),this.items.length&&!this.selectedItem&&"MapLocation"===this.answerItemModel&&this.items[0].select()}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.News=function(i){t.call(this,i),this.model&&this.bindEvents([[this.model,"load",this._load],[e.pageLayout,"getModuleData",this._onGetModuleData]])},e.Models.Answers.News.prototype=$.extend({},t.prototype,{answerItemModel:"News",_load:function(){!this.items.length&&this.model.waitingForItems&&(e.pixel.fire("nts"),this.model.load())},_onGetModuleData:function(t){t.module&&"news"===t.module&&!this.items.length&&(this.model.manuallyLoaded=!0,this.model.load(),this.model.waitingForItems=!0,t.signal&&e.duckbar.future_signal_tab({signal:"high",from:"news"}))},_setFailed:function(){this.set("failed",!0),Spice.failed(this.pixelId)},_filterOutOldArticles:function(e){this.resultNum=e.results.length,this.isVertical||(e.results=$.grep(e.results,(function(e){return!e.is_old}))),this.filteredNum=this.resultNum-e.results.length},_onLoad:function(i){i&&i.results&&(i=$.extend({},i,!0),this._filterOutOldArticles(i)),t.prototype._onLoad.call(this,i),"news"!==this.id||"e"!==this.openType&&"r"!==this.openType||e.pixel.fire("nv",{o:this.openType,p:e.page&&e.page.showingSpelling?1:0,t:e.get_query().match(/\"/)?1:0,l:this.items.length,r0:0===this.items.length?1:0,r1:this.items.length<3?1:0,r2:this.items.length<5?1:0,r3:this.items.length<10?1:0})}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.About=function(e){t.call(this,e)},e.Models.Answers.About.prototype=$.extend({},t.prototype,{hasContentHeight:function(){var e=this.items&&this.items[0];return e&&e.hasPredictableExpandableContent()}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.Forecast=function(e){t.call(this,e)},e.Models.Answers.Forecast.prototype=$.extend({},t.prototype)}(DDG),function(e){var t=e.Models.Answer,i=e.device.isMobile?2:8;e.Models.Answers.Images=function(e){e.detailScrollOffset=40,e.tileMarginBottom=59,t.call(this,e)},e.Models.Answers.Images.prototype=$.extend({},t.prototype,{getModuleRow:function(t,s,a){for(var o=[],n={},l=0,r=t=t||0;rs)break}var m=i*(o.length-1),g=s-(l+m),f=Math.ceil(g/o.length);for(l=0,r=0;rn.scaledWidth&&(n.divWidth=n.scaledWidth),n.divWidth=Math.max(n.divWidth,10),l+=n.divWidth,n.lastOfRow=r===o.length-1;return g=s-(l+m),n.scaledWidth>n.divWidth+g&&(n.divWidth+=g),o},isAutoLoadingImages:function(e){return"q"===e&&!1!==this.expanded&&this.isModule}})}(DDG),function(e){var t=e.Models.Answer,i=["streetaddress","hours","phone"];e.Models.Answers.Places=function(e){t.call(this,e),this.staticMapTitle=this._getStaticMapTitle(),this.moreAtExternalServiceText=this._getMoreAtExternalServiceText(),this.infoSelector=this._getInfoSelector(this.query_special_symbols),this.on("change:expanded",this._togglePrimaryPlace)},e.Models.Answers.Places.prototype=$.extend({},t.prototype,{addItems:function(e){t.prototype.addItems.call(this,e),this.items&&this.items.length>0&&(this.primaryPlace=this.items[0],this.topPlaces=this.items.slice(0,3),this.topPlaces=this.topPlaces.map(function(e){return e.set("isSideModule",this.isSideModule),e}.bind(this)),this.isSingle=1===this.items.length,this.set("isMoreAtVisible",!this.isSingle),this.canExpand=!this.isSideModule&&this.isSingle&&this.primaryPlace&&$.isFunction(this.primaryPlace.isExpandable)&&this.primaryPlace.isExpandable())},isExpandable:function(){return this.canExpand},toggleExpand:function(){this.set("expanded",!this.expanded)},_togglePrimaryPlace:function(){this.primaryPlace&&this.primaryPlace.toggleExpand()},_getStaticMapTitle:function(){return lp("maps_places","Open Expanded Map")},_getMoreAtExternalServiceText:function(){var e=this.sourceName;return l("More at %s ",e)},_getInfoSelector:function(e){return $.isArray(e)&&e.filter((function(e){return-1!==i.indexOf(e)})).sort((function(e,t){return i.indexOf(e)-i.indexOf(t)}))[0]||""}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.AdsCarousel=function(i){t.call(this,i),this.on("change:position",this._onUpdatePosition.bind(this)),this.bing&&(this.adReporting=new e.Models.AdReporting)},e.Models.Answers.AdsCarousel.prototype=$.extend({},t.prototype,{clickedExternalLink:function(e,i){if(!i||!i.target)return t.prototype.clickedExternalLink.call(this,e);var s=$(i.target),a=$(i.target.parentElement);s.hasClass("tile__media")?e.clk="i":a.hasClass("tile__title--brand")?e.clk="b":a.hasClass("tile__title")?e.clk="d":e.clk="o",this.emit("clicked-external-link"),t.prototype.clickedExternalLink.call(this,e)},_hasInitializedImpressionFeedback:!1,_onUpdatePosition:function(){if(!e.device.isMobile&&this.position===e.Models.ModulesPositions.SIDE&&this.bing){var t=e.getProperty(this,"layout.columns")||3;this.gridColumns=t&&Math.min(t,3),!this.items||2!=this.items.length&&4!=this.items.length||(this.gridColumns=2),this.gridColumns&&!0===e.pageLayout.isFirstValidSidebarItem(this.id)&&(this.isSlottedFirst=1)}}})}(DDG),function(e){var t=e.Models.Answers.AdsCarousel,i={Price:!0};e.Models.Answers.Products=function(i){i.isAffiliate=1,i.bing="Bing"===i.meta.sourceName,i.hasHiddenVertical=i.meta.hidden,i.canShowSidebarFilters=i.hasSidebarFilters&&!e.device.isMobile,i.bing&&(i.meta.idField="url"),t.call(this,i),this.on("change:expanded",this._onExpandedChanged.bind(this))},e.Models.Answers.Products.prototype=$.extend({},t.prototype,{answerType:"Products",answerItemModel:"Product",extraLoadRequestParameters:function(){var t="";return e.extension.isInstalled()&&(t+="&ext=1"),""!==window.ra&&(t+="&a="+window.ra),window.shrl&&(t+="&mkt="+window.shrl),t},setExploreByItemClicked:function(e){this._exploreByItemClickedIURL=e},_onExpandedChanged:function(){if(1===this.expanded&&this.bing&&!this._hasInitializedImpressionFeedback){var e=function(){this.adReporting.sendShoppingVisibility({beacon:!1,unsentHoveredItems:this._unsentHoveredItems,exploreByItemClickedIURL:this._exploreByItemClickedIURL||!1}),this._resetSentValues()}.bind(this),t=function(){this.adReporting.sendShoppingVisibility({beacon:!0,unsentHoveredItems:this._unsentHoveredItems,exploreByItemClickedIURL:this._exploreByItemClickedIURL||!1}),this._resetSentValues()}.bind(this);this.on("change:highlightedItem",this._reportShoppingItemHovered.bind(this)),this.on("clicked-external-link",e),this.on("change:isLoading",(function(t){t&&e()})),this.on("change:isRequerying",(function(t){t&&e()})),this.on("change:items",function(){1===this.expanded&&this.adReporting.sendShoppingImpressions(this.items)}.bind(this)),this.on("change:active",e),$(window).on("beforeunload",t),setTimeout(e,33e5),this.on("clicked-explore-by-item",e),this._hasInitializedImpressionFeedback=!0,this._setupEBIExperiments()}},_onRequery:function(e){this._resetFreeListingsState(),t.prototype._onRequery.call(this,e)},_setupEBIExperiments:function(){for(var t=["related","related_click","related_done","related_requery"],i=0;i1&&a||a[0]||!1,values:n.concat(s.map((function(e){return{id:e.url,name:e.display_text}}))),singleChoice:!!i[o],bing:!0}}.bind(this));a=a.map((function(t){return new e.Models.AnswerSelectLists.Parameter(t)})),this.set("parameters",a)}var o=!e.settings.isDefault("kn");if(this.hasExploreByItemsEnabled&&s.explore_by_items&&s.explore_by_items.length>0){var n="&iar=shopping&"+this._nextEBIClickExperiment+"="+this._currentActiveExperimentGroup;this.set("exploreByItems",s.explore_by_items.map((function(e){var t=e.url.match(/(iurl\=)([^&]+)/),i=t&&t[2],s=e.text;try{s=decodeURIComponent(s)}catch(e){}return{text:s,openInNewTab:o,clickUrl:"https://"+window.location.host+"/?q="+encodeURIComponent(e.text)+n,iurl:i}})))}s.results&&s.results.length>0?(t.prototype._updateMetaFromResponse.call(this,s),this._addAds(s),this._addFreeListings(s)):t.prototype._addResponseToAnswer.call(this,s)},_getAds:function(e){var t={beforeFreeListings:[],afterFreeListings:[]},i=!1;return e.forEach((function(e){e.free_listing?i=!0:t[i?"afterFreeListings":"beforeFreeListings"].push(e)})),t},_addAds:function(e){var i=this._getAds(e.results);this.hasRenderedFreeListings?(i.beforeFreeListings.length>0||i.afterFreeListings.length>0)&&this._reportWronglyOutputtedAds([].concat(i.beforeFreeListings,i.afterFreeListings)):(i.afterFreeListings.length>0&&this._reportWronglyOutputtedAds(i.afterFreeListings),i.beforeFreeListings.length>0&&(t.prototype._addItemsFromResponse.call(this,$.extend({},e,{results:i.beforeFreeListings})),this.set("hasRenderedAds",!0)))},_reportWronglyOutputtedAds:function(t){var i=t.map((function(e){return e.tid}));e.pixel.fire("adreporting.shopping-ads-wrongly-outputted",{tids:i.join(",")}),this.emit("ads-wrongly-after-free-listings")},_addFreeListings:function(e){var i=e.results.filter((function(e){return e.free_listing}));i.length>0&&(this.hasRenderedAds&&!this.hasRenderedFreeListingsDivider&&this.set("hasRenderedFreeListingsDivider",!0),t.prototype._addItemsFromResponse.call(this,$.extend({},e,{results:i})),this.set("hasRenderedFreeListings",!0))},_resetFreeListingsState:function(){this.set("hasRenderedAds",!1),this.set("hasRenderedFreeListings",!1),this.set("hasRenderedFreeListingsDivider",!1),this.set("hasScrolledPastFreeListings",!1)},_unsentHoveredItems:[],_exploreByItemClickedIURL:!1,_resetSentValues:function(){this._unsentHoveredItems=[],this._exploreByItemClickedIURL=!1},_reportShoppingItemHovered:function(){var t=this.highlightedItem;!t||t.free_listing||t.hasHovered||e.device.isMobileDevice||(Math.random()>.5?this._unsentHoveredItems.push(t.tid):this._unsentHoveredItems.unshift(t.tid),t.hasHovered=!0)},_filterNameToType:function(e){var t="Price",i="Color",s="Size",a={US:{Price:t,Color:i,Size:s},GB:{Price:t,Colour:i,Size:s},DE:{Preis:t,"Größe":s},FR:{Prix:t,Taille:s},CA:{Price:t,Color:i,Size:s},AU:{Price:t,Colour:i,Size:s},IE:{Price:t,Colour:i},DK:{Pris:t},CH:{Preis:t},FI:{Hinta:t},IT:{Prezzo:t},NL:{Prijs:t},NO:{Pris:t},SE:{Pris:t}};return a[window.ct]&&a[window.ct][e]||!1},_formatKeyPixelName:function(e){return"sv_"+e.replace(" ","-").toLowerCase()}})}(DDG),function(e){var t=e.Models.Answers.AdsCarousel;e.Models.Answers.AutoAds=function(e){e.meta.idField="url",e.bing=1,t.call(this,e)},e.Models.Answers.AutoAds.prototype=$.extend({},t.prototype,{answerType:"AutoAds",answerItemModel:"AutoAd"})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.Recipes=function(e){t.call(this,e)},e.Models.Answers.Recipes.prototype=$.extend({},t.prototype,{answerType:"Recipes",answerItemModel:"Recipe"})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.ExpandedMap=function(i){this.id="maps_expanded",this.name=i.name,this.nameId=i.nameId,this.answerItemModel=i.answerItemModel,this.isMapExpanded=!0,this.firstRun=!0,this.isDirectionsActive=!1,this.isMapStartActive=!1,this.queryEncoded=i.queryEncoded,this.hasContentHeight=!0,this.mapLocation=i.mapLocation,this.hasExampleSearches=null,this.hasNoResults=null,this.hasExternalDirectionsProvider=!1,this.sourceId=i.sourceName,this.local_source=i.localSource,this.sourceName=i.sourceName,this.sourceUrl=i.sourceUrl;var s={id:"local",requeryURL:e.services.getURL("local")};i.sources=[s],i.parameters=[{key:"tg",values:[{id:"maps_places"}]},{key:"rt",values:[{id:"D"}]},{key:"mkexp",values:[{id:"b"}]},{key:"wiki_info",values:[{id:"1"}]}],i.meta=i.meta||{},i.meta.idField="itemId",this._metaTokens=[],this.moreAtExternalServiceText=this._getMoreAtExternalServiceText(),e.router.add("map-start",this._handleMapStart.bind(this)),t.call(this,i),i.data&&this.addItems(i.data)},e.Models.Answers.ExpandedMap.prototype=$.extend({},t.prototype,{addItems:function(e){this.sourceName="",this.sourceId="",this.local_source="";var i=e[0]||e;i&&("About"===this.answerItemModel?this.sourceName=i.AbstractSource:"Place"===this.answerItemModel&&(this.sourceName=i.source,this.sourceId=i.sourceId,this.local_source="api")),t.prototype.addItems.call(this,e),this.items.length&&!this.selectedItem&&"MapLocation"===this.answerItemModel&&this.items[0].select()},requery:function(i){var s={is_requery:"1"};s.query=i.query||i.q||this.meta.requery,s.query===decodeURIComponentSafe(s.query)&&(s.query=encodeURIComponent(s.query)),i.queryParsed&&(s.queryParsed=i.queryParsed);var a=this.geo_bbox||this._glMapModel.getApproximateGeoBBox();if(i&&i.bbox){var o=i.bbox.split(",");s.bbox_tl=o[0]+","+o[1],s.bbox_br=o[2]+","+o[3]}else!a||i&&i.isFromHistory||(s.bbox_tl=a.top_left,s.bbox_br=a.bottom_right);var n=e.userLocator.hasLocation()&&e.userLocator.userLocation.getObfuscatedLoc();if(n&&(s.latitude=n.lat,s.longitude=n.lon,s.location_type=n.type),s.strict_bbox=i&&i.strict_bbox||"0",i&&i.iai&&(this.selectedItemIdRequery=i.iai),i.suggestion){var l=i.suggestion;if(!l.coordinate&&l.where&&l.where.match(lp("vertical_map","Search Near My Location"),"i")&&(delete s.bbox_tl,delete s.bbox_br),l.coordinate){var r=l.coordinate.latitude,d=l.coordinate.longitude,c=parseFloat(r)+5e-5,h=parseFloat(d)-5e-5,p=parseFloat(r)-5e-5,u=parseFloat(d)+5e-5;s.bbox_tl=c+","+h,s.bbox_br=p+","+u}l.metadata&&(s.metadata=l.metadata)}i.metatoken&&(s.metadata=this.getMetadata(i.metatoken)),this.shouldMapViewportUpdate=!i.hasOwnProperty("shouldMapViewportUpdate")||i.shouldMapViewportUpdate,this.isSearchMapAreaPending=!!i.hasOwnProperty("isSearchMapAreaPending")&&i.isSearchMapAreaPending,this.isRequerying||t.prototype.requery.call(this,s)},onMapStartAction:function(){e.router.navigate("map-start")},_handleMapStart:function(t){this.set("isDirectionsActive",!1),this.set("isMapStartActive",!0),e.history.clear("start"),e.history.clear("end"),e.history.clear("transport"),e.history.clear("bbox"),e.history.clear("strict_bbox"),e.history.set("iaxm","start")},saveMetadata:function(e){for(var t=0;t-1?e="maps":this.isDirectionsActive&&(e="directions"),e},getCurrentItemName:function(){return this.selectedItem&&this.selectedItem.name||this.meta&&this.meta.requery||this.query},_onRequery:function(i){var s;if("places"===i.response_type)s=DDG.localAPI.getPlacesResponse(i),this.answerItemModel="Place",this.sourceName=s.sourceName,this.sourceUrl=s.sourceUrl,this.moreAtExternalServiceText=this._getMoreAtExternalServiceText(),this.set("proximity",s.proximity);else if("map"===i.response_type)s=DDG.localAPI.getMapsResponse(i),this.answerItemModel="MapLocation";else if("geowiki"===i.response_type){(s=i.wiki_info).query=i.query,s.queryEncoded=i.queryEncoded;var a=i.features&&i.features[0];if(a&&a.center){s.lat=a.lat=a.center[1],s.lon=a.lon=a.center[0];var o=e.localAPI.getMapsResponse(i);s.location=o&&o.results&&o.results[0]}this.answerItemModel="About"}else s=DDG.localAPI.getEmptyResponse(i);t.prototype._onRequery.call(this,s)}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.Directions=function(e){if(t.call(this,e),this.data&&this.data[0]&&this.data[0].user_location){var i=this.data[0].user_location;i.lat=i.lat?parseFloat(i.lat):null,i.lon=i.lon?parseFloat(i.lon):null,this.userLocation=i}},e.Models.Answers.Directions.prototype=$.extend({},t.prototype,{answerItemModel:"DirectionsItem",addItems:function(e){t.prototype.addItems.call(this,e)}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.ReactAnswer=function(e){t.call(this,e)},e.Models.Answers.ReactAnswer.prototype=Object.assign({},t.prototype,{removeFromSerp:function(){this.emit("destroyReactModule")}})}(DDG),function(e){var t,i=e.Models.Base;e.Models.AnswerItems.Base=t=function(e){this.transform&&(e=this.transform(e)),i.call(this,e),this._updateId()},t.extend=function(e){var i=function(e){t.call(this,e)};return i.prototype=$.extend({},t.prototype,e||{}),i},t.prototype=$.extend({},i.prototype,{select:function(){this.unhighlight(),this.set("selected",1),this.topic&&this.topic.select&&this.topic.select()},unselect:function(){this.set("selected"),this.topic&&this.topic.unselect&&this.topic.unselect()},highlight:function(){this.selected||(this.set("highlighted",1),this.topic&&this.topic.highlight&&this.topic.highlight())},unhighlight:function(){this.set("highlighted"),this.topic&&this.topic.unhighlight&&this.topic.unhighlight()},toTemplateObject:function(){return $.extend({},this,{meta:this.meta?$.extend({},this.answerMeta,this.meta):this.answerMeta})},_updateId:function(){return"string"==typeof this.idField&&this[this.idField]?this.id=this[this.idField]:$.isArray(this.idField)&&(this.id=this.idField.map((function(e){return this[e]}),this).join(""),this.id)?this.id:this.id=this.UUID()},getItemTemplate:function(){var t=this.templates,i=t.item;return e.device.isMobile&&(i=t.item_mobile||i),i},getDetailTemplate:function(){var t=this.templates,i=t.detail;return e.device.isMobile&&(i=t.detail_mobile||i),i},getItemDetailTemplate:function(){var t=this.templates,i=t.item_detail||t.detail;return e.device.isMobile&&(i=t.item_detail_mobile||t.detail_mobile||i),i},canShowItemDetail:function(){return!!this.getItemDetailTemplate()}})}(DDG),function(e){e.Models.AnswerItems.Audio=e.Models.AnswerItems.Base.extend({idField:"url"})}(DDG),function(e){e.Models.AnswerItems.FatheadListItem=e.Models.AnswerItems.Base.extend({idField:"FirstURL"})}(DDG),function(e){var t=e.Models.AnswerItems.Base,i=["alternate","rain","snow","sleet","fog","cloudy","partly-cloudy-day","partly-cloudy-night","clear-day","clear-night","hail","thunderstorm","tornado","wind"],s=[0,4,8,12,16,20],a={metric:"c",imperial:"f"},o=[lp("forecast","N"),lp("forecast","NE"),lp("forecast","E"),lp("forecast","SE"),lp("forecast","S"),lp("forecast","SW"),lp("forecast","W"),lp("forecast","NW"),lp("forecast","N")],n=["ar","de","es","fr","it","ja","nl","tr","zh"];e.Models.AnswerItems.Forecast=function(e){t.call(this,e)},e.Models.AnswerItems.Forecast.prototype=$.extend({},t.prototype,{transform:function(t){t&&t.currently&&t.daily&&t.flags&&(this._data=t,this.unit=this._getInitialUnit(),this.isMetric=this.unit===a.metric,this._setDailyWeather(t),this.selected=0,this.latitude=t.latitude,this.longitude=t.longitude,this.location=t.flags["ddg-location"],this.moreAtUrl=this._getMoreLink({}),this.isIE11=e.device.isIE11p,this._setCurrentWeather(t.currently),this.updateSelected(this.selected,!0),this._mapData(t,this.isMetric),this.weatherAlert=this._getAlert(this._data.alerts),this.hours=this._getHoursData(t))},_getAlert:function(e){if(!e||!e.length)return!1;var t=e.pop();return t.title=t.title.replace(/(yellow)|(orange)/gi,""),"advisory"!==t.severity&&"watch"!==t.severity||(t.isAdvisory=!0),t},_calculatePercent:function(e){return Math.round(100*e)},_setCurrentWeather:function(e){if(e){this.precipitation=this._calculatePercent(e.precipProbability),this.humidity=this._calculatePercent(e.humidity),this.icon=this._getIcon(e.icon,48),this.iconName=e.icon,this.summary=e.summary}},_setDailyWeather:function(t){if(t&&t.daily&&t.daily.data){this.days=[];for(var i,s=t.daily.data.slice(0,8),a=0;a0?s[a]:t.currently;if(o.index=a,o.icon=this._getIcon(n.icon,48),o.iconName=n.icon,o.summary=n.summary.replace(/\.$/,""),o.humidity=n.humidity,o.precipitation=n.precipProbability,i.setDate(i.getDate()+a),e.Utils.ParseDate.toLocaleStringSupportsLocales()){var l=locale.replace("_","-");o.day=i.toLocaleString(l,{weekday:"short"}).replace(".",""),o.dayLong=i.toLocaleString(l,{weekday:"long"}).replace(".","")}else{var r=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],d=i.getDay();o.day=r[d].substring(0,4),o.dayLong=r[d]}this.days.push(o)}}},_getInitialUnit:function(){var t=e.geo.getUOM();return a[t]||a.imperial},updateUnit:function(e){var t=this.days[this.selected]||{},i=t.rawHourly||this._data;this.isMetric=e===a.metric,this._mapData(this._data,this.isMetric),this.hours=this._getHoursData(i,this.selected,t.time),t.hours=this.hours,this.set("unit",e)},updateSelected:function(t,i){var s=this.days[t];if(i||(this.summary=s.summary,this.wind=s.wind,this.precipitation=s.precipitation,this.humidity=this._calculatePercent(s.humidity),this.icon=this._getIcon(s.iconName,64),this.temperature=s.high,this.temperature=0===t?s.temperature:s.high),this.days[this.selected].selected=!1,this.days[t].selected=!0,this.dayLong=e.capitalize(s.dayLong),this.moreLink=this._getMoreLink(s),t>1&&!s.hours)this.emit("beforeSend"),$.getJSON("/js/spice/forecast_daily/"+this.latitude+"/"+this.longitude+"/"+s.time).done(function(e){s.rawHourly=e,this.hours=this._getHoursData(e,t,s.time),s.hours=this.hours,this.set("selected",t)}.bind(this));else{var a=s.rawHourly||this._data;s.hours=this._getHoursData(a,t,s.time),this.hours=s.hours,this.set("selected",t)}},_getMoreLink:function(e){var t="https://darksky.net";if(e.time){var i=new Date;i.setDate(i.getDate()+e.index);var s=i.toISOString().substr(0,10);t+="/details/"+this.latitude+","+this.longitude+"/"+s}else t+="/forecast/"+this.latitude+","+this.longitude;return t+"/"+this._getTargetUnit()+"/"+this._getTargetLanguage()},_getTargetUnit:function(){return this.isMetric?"ca24":"us12"},_getTargetLanguage:function(){var e=window.locale.split("_")[0];return-1===n.indexOf(e)?"en":e},_mapData:function(e,t){if(e.currently){var i=e.currently;this.wind=this._convertWindSpeed(i.windSpeed,t),this.wind+=" "+this._convertWindDirection(i.windBearing);for(var s=0;s=12?"PM":"AM")}s=s.toString()}return e.device.isEnglish||(s=(s=s.replace(/(\d{2})[^:]+/,"$1")).replace(/^0/,""),s+=":00"),{hourString:s,temperature:a,temperatureLabel:o}}},_convertWindSpeed:function(e,t){return t?Math.round(1.609344*e)+" kph":Math.round(e)+" mph"},_convertWindDirection:function(e){var t=Math.round(e/45);return o[t]||o[0]},_convertTemperature:function(e,t){return t?(e=Math.round(5/9*(e-32)),e=0===Math.abs(e)?Math.abs(e):e):Math.round(e)},_getIcon:function(e,t){return-1===i.indexOf(e)&&(e="cloudy"),"/assets/weather/icons/"+e+".svg"}})}(DDG),function(e){var t=e.Models.AnswerItems.Base,i="START",s="DONE",a=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];e.Models.AnswerItems.Place=function(s){t.call(this,s),"applemaps"!==s.sourceId||this.embed||(this.embedLoading=i,this._fetchEmbedData()),this.subtitle=this.getSubtitle(),this.priceSymbol=this.getPriceSymbols(),this.categories=this.getCategories(),this.directions=this.getDirectionsURL(),this.directionsTitle=this.getDirectionsTitle(),this.staticMapTitle=lp("maps_places","Open Expanded Map"),this.mapURL=e.directionSource.getMapURL(this),this.shortAddress=this.getShortAddress(),$.isEmptyObject(this.hours)||(this.openHoursData=this._transformHours(this.hours),this.openHoursDisplay=this._formatOpenHoursForDisplay(this.openHoursData),this.hoursStatus=this._getHoursStatus(this.hours)),this.embed&&(this._onEmbedDataFetched(this.embed),this.embed.image&&(this.isScrapedImage=!0)),this.ratingClass=!!this.rating&&this.rating.toString().replace(".","-"),this.morePhotosText=this._getPhotosOnProviderText(),this.moreAtExternalServiceText=this.getMoreAtExternalServiceText(),this.moreOnExternalServiceText=this.getMoreOnExternalServiceText(),this.viewOnExternalServiceText=this.getViewOnExternalServiceText(),this.moreReviewsOnExternalServiceText=this.getMoreReviewsOnExternalServiceText(),this.distanceStr=this.getDistanceString(),this.snippetInfoMap=this.getSnippetInfoMap(),this.showMapCta=!e.device.isMobile&&"maps_expanded"!==this.parentId,this.isMobile=e.device.isMobileDevice,this.showTabs=this.isMobile&&this.reviews,this.showAttribution="applemaps"===this.sourceId&&this.url,this.hasPriceOrCategory=!!this.priceSymbol||!!this.categories,this.titleUrl=this.url,"applemaps"===this.sourceId&&this.website&&(this.titleUrl=this.website,this.viewOnExternalServiceText=this.getOpenPlaceWebsiteText()),this.showPriceCategoryNewLine="maps_expanded"===this.parentId||this.isMobile,(e.device.is2x||e.device.is3x)&&(this.ratingImage=this.ratingImageRetina?this.ratingImageRetina:this.ratingImage),this._setReviews(this.reviews)},e.Models.AnswerItems.Place.prototype=$.extend({},t.prototype,{select:function(){t.prototype.select.call(this),"Yelp"!==this.source||this.reviews||this._loadReviews()},getSubtitle:function(){var e=this.getPriceSymbols(),t=this.getCategories();return e?t?e+" · "+t:e:t},getPriceSymbols:function(){if(this.price){for(var e="",t=0;t=1?n[0]:e,r=n.length>=2?n[1]:"";return new Date(s,a,o,l,r)},_transformHours:function(e,t){if(!e)throw"Missing hours data";var i={};return a.forEach(function(s){if(e[s]){var a=e[s].split(","),o=[];a.forEach(function(e){var i=e.split("–");o.push({start:i.length>0?this._convertHoursToDate(i[0].trim(),t):null,end:i.length>1?this._convertHoursToDate(i[1].trim(),t):null})}.bind(this)),i[s]=o}}.bind(this)),i},_formatOpenHoursForDisplay:function(t){var i=(new Date).getDay(),s=e.device.getLocale(),o=a.map(function(e,s){var a=lp("maps_places","Closed");t[e]&&(a=t[e][0].end-t[e][0].start>=8634e4?lp("maps_places","Open 24 hours"):t[e].reduce((function(e,t){var i=t.start?t.start.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):"",s=t.end?t.end.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):"";return e+(e.length>0?", ":"")+i+" - "+s}),""));return s===i&&(this.hoursToday=a),{weekDay:e,hours:a,isToday:s===i}}.bind(this));return"en"!==s.slice(0,2)&&e.Utils.ParseDate.toLocaleStringSupportsLocales()&&(o=this._translateWeekDays(o,s,i)),o},_translateWeekDays:function(e,t,i){var s=t.replace("_","-");return e.map((function(e,t){var a=new Date,o=a.getDate()-i+t;a.setDate(o);var n=a.toLocaleString(s,{weekday:"short"}).replace(".","");return n=n[0].toUpperCase()+n.substr(1),e.weekDay=n,e}))},_getHoursStatus:function(e){var t={},i=null;return e?(e.state_switch_time&&(i=this._convertHoursToDate(e.state_switch_time).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})),e.is_open?e.closes_soon?(t.textStatus=lp("maps_places","Closes soon"),t.textHour=i||"",t.style="warn"):(t.textStatus=lp("maps_places","Open"),t.textHour=i?lp("maps_places","Closes")+" "+i:"",t.style="on"):e.opens_soon?(t.textStatus=lp("maps_places","Opens soon"),t.textHour=i||"",t.style="warn"):(t.textStatus=lp("maps_places","Closed"),t.textHour=i?lp("maps_places","Opens")+" "+i:"",t.style="off"),t):t},toggleHoursExpand:function(){this.hours&&this.set("hoursExpanded",!this.hoursExpanded)},_getPhotosOnProviderText:function(){var e=this.source;return l("Photos on %s",e)},getViewOnExternalServiceText:function(){var e=this.provider||this.source;return l("View on %s",e)},getOpenPlaceWebsiteText:function(){var e=this.name;return l("Open %s website",e)},getMoreAtExternalServiceText:function(){var e=this.provider||this.source;return l("More at %s ",e)},getMoreOnExternalServiceText:function(){var e=this.source;return l("More on %s ",e)},getMoreReviewsOnExternalServiceText:function(){var e=this.source;return lp("more_reviews_on_external_website","More Reviews on %s ",e)},getUserOnServiceText:function(e){var t=e.name,i=this.source;return lp("maps_places","%s on %s",t,i)},getSnippetInfoMap:function(){return{hours:this.hoursToday||!1,streetaddress:this.address||!1,phone:this.displayPhone||!1}},isExpandable:function(){return void 0===this.canExpand?this.canExpand=!this.isSideModule&&(!!this.moreAtExternalServiceText||this.review_detail&&this.review_detail.length>0):this.canExpand},toggleExpand:function(){this.set("expanded",!this.expanded)},_loadReviews:function(){this._loadedReviews||(this._loadedReviews=!0,$.ajax({dataType:"jsonp",url:"/local.js?q="+encodeURIComponent(this.name)+"&tg=maps_places&id="+this.itemId+"&strong_hint="+this.itemId+"&fsh=1&l="+e.settings.region.getId(),success:function(t){if((t=e.localAPI.getPlacesResponse(t)).results&&t.results.length){var i=t.results.filter(function(e){return e.itemId===this.itemId}.bind(this));i&&i[0]&&this._setReviews(i[0].reviews)}}.bind(this),error:function(){}}))},_setReviews:function(t){t&&t.length&&(t.forEach(function(t){t.formattedDate=new Date(1e3*t.timeCreated).toLocaleDateString(!1,{year:"numeric",month:"short",day:"numeric"}),t.user.userOnServiceText=this.getUserOnServiceText(t.user),(e.device.is2x||e.device.is3x)&&(t.ratingImage=t.ratingImageRetina?t.ratingImageRetina:t.ratingImage),t.ratingClass=t.rating?t.rating.toString().replace(".","-"):""}.bind(this)),this.set("reviews",t))},_fetchEmbedData:function(){if(this.website){var e="";this.timezone&&(e="&tz="+this.timezone),$.getJSON("/f.js?vqd="+window.vqd+"&o=json&ldata=1&u="+this.website+e,this._onEmbedDataFetched.bind(this)).error(this._onEmbedDataFailed.bind(this))}else this.set("embedLoading",s)},_onEmbedDataFetched:function(t){if(t.image){var i=e.getImageProxyURL(t.image,{noFallback:!0});this.set("image",i)}t.additional_images&&this.set("thumbnails",t.additional_images),t.description&&this.set("description",t.description.length<301?t.description:t.description.substr(0,300)+"..."),t.hours&&(this.set("hours",t.hours),this.hours=this._transformHours(t.hours),this.hoursStatus=this._getHoursStatus(t.hours)),this.set("embedLoading",s)},_onEmbedDataFailed:function(){this.set("embedLoading",s)}})}(DDG),function(e){var t=e.Models.AnswerItems.Base;e.Models.AnswerItems.Product=t.extend({idField:["ASIN","img_m","img"],transform:function(e){e.image=e.img,e.title=e.heading,e.showImage=e.image,e.containImage=1,e.hideSource=1;var t=e.answerMeta&&e.answerMeta.signal_from?e.answerMeta.signal_from:"products";e.imageProxyOps={origin:t};var a=i(e),o=s(e);if(e.onlyGrayText=a||o,o&&a&&(e.onlyGrayText=a+" - "+o),"Bing"===e.answerMeta.sourceName){if(e.bing=1,e.onlyGrayText=i(e,20),e.extensions){e.visibleExtensions=[];var n=e.extensions.price_drop,l=e.extensions.merchant_promotion,r=e.extensions.free_shipping,d=e.extensions.product_rating;n&&n.text&&n.tid?(e.promotion=n.text,e.visibleExtensions.push(n.tid)):l&&l.text&&l.tid&&(e.promotion=l.text,e.visibleExtensions.push(l.tid)),r&&r.tid&&e.visibleExtensions.push(r.tid),d&&d.tid&&e.visibleExtensions.push(d.tid)}e.img=e.img+"&h=120"}return e}});var i=function(e,t){return e.brand?(t=t||14,e.brand.length>t?e.brand.substr(0,t-2)+"…":e.brand):""},s=function(e){return"string"!=typeof e.price?"":e.price}}(DDG),function(e){var t=e.Models.AnswerItems.Base;e.Models.AnswerItems.AutoAd=function(e){t.call(this,e)},e.Models.AnswerItems.AutoAd.prototype=$.extend({},t.prototype,{transform:function(t){t.image=t.img,t.title=t.heading,t.condition=t.item_condition,t.bing=1,t.imageProxyOps={height:130};var i=[],s=t.location,a=!!t.mileage&&"Mileage: "+e.Utils.Formatting.formatNumberForLocale(parseInt(t.mileage)),o=!1;return t.assets&&(o=Object.keys(t.assets).filter((function(e){var i=-1!==t.title.indexOf(t.assets[e]),o=a&&t.assets[e]==t.mileage,n=s&&t.assets[e]===s;return!(i||o||n)})).map((function(e){return t.assets[e]})).join(" • ")),a?i.push(a):o&&i.push(o),s?i.push(s):o&&a&&i.push(o),t.lines=i,t.brand&&(t.isOnlineDealer=/^(www\.|)(carvana|vroom)(\.com|$)/i.test(t.brand.replace(/\s/g,""))),t}})}(DDG),function(e){e.Models.AnswerItems.Recipe=e.Models.AnswerItems.Base.extend({idField:"id",transform:function(e){e.excerpt=e.description,e.showImage=e.image||e.fetch_image,e.onlyGrayText=e.ratingText,e.hideSource=1,e.showRating=1,e.showDescription=1,e.oneRowTitle=1;var t=e.answerMeta&&e.answerMeta.signal_from?e.answerMeta.signal_from:"recipes";return e.imageProxyOps={origin:t},e}})}(DDG),function(e){var t=e.Models.AnswerItems.Base,i=e.Utils.ParseDate,s={YouTube:{videoId:{match:/embed\/([^?]+)/,group:1},embedURL:"https://www.youtube-nocookie.com/embed/",searchURL:"https://www.youtube.com/results?search_query=",userURL:"https://www.youtube.com/channel/",url:"https://www.youtube.com/watch?v=",params:{wmode:"transparent",iv_load_policy:3,autoplay:1,html5:1,showinfo:0,rel:0,modestbranding:1,playsinline:0,theme:"light"}},Vimeo:{embedURL:"https://player.vimeo.com/video/",searchURL:"https://www.vimeo.com/search?q=",userURL:"https://vimeo.com/",url:"https://vimeo.com/",params:{api:0,autoplay:1}},Bing:{}};e.Models.AnswerItems.Video=t.extend({idField:"id",transform:function(t){if("Bing"==t.provider)return this._getBingAttrs(t);var i=s[t.provider];return t.embedURL=encodeURIComponent(i.embedURL+t.id+"?"+$.param(i.params)),t.faviconURL=e.get_favicon_url(t.provider.toLowerCase()),t.musicVideoData=o(t),t.url=i.url+t.id,t.searchURL=i.searchURL+rq,t.userURL=i.userURL+t.channel_id,t.username=t.display_name,t.viewCount=a(t),t.publishedDate=n(t.published),t.image=t.images.medium,t.imageToken=t.image_token,t.showImage=t.image||t.fetch_image,t.onlyGrayText=t.viewCount,t},getITunesData:function(e){var t=this.musicVideo();if(!t)return e();if(this._iTunesData)return e(null,this._iTunesData);var i=this,s="/iit/"+encodeURIComponent(t.title);$.ajax({url:s,dataType:"json",success:function(t){i._iTunesData=t,e(null,t)},error:function(){e()}})},canShowItemDetail:function(){var i=t.prototype.canShowItemDetail.call(this),s="2"===e.settings.get("k5");return i&&!s},isEmbeddable:function(){var e=this.embedURL?decodeURIComponent(this.embedURL):"";return!(!e||0!==e.indexOf(s.YouTube.embedURL))},_formatEmbedURL:function(e,t){var i=s[e],a=!!i&&i.videoId;if(t&&a){var o=t.match(a.match),n=!(!o||!o[a.group])&&o[a.group];if(n)return encodeURIComponent(i.embedURL+n+"?"+$.param(i.params))}return!1},_getBingAttrs:function(t){t.provider=t.publisher,t.embedURL=this._formatEmbedURL(t.provider,t.embed_url),t.isBing=!0,t.faviconURL=e.get_favicon_url(t.publisher.toLowerCase()),t.url=t.content,t.idField="url",t.username=t.uploader,t.labelIcon=!("2"===e.settings.get("k5")||!t.embedURL)&&"play",t.statistics&&t.statistics.viewCount&&"0"!=t.statistics.viewCount&&(t.viewCount=a(t)),t.publishedDate=n(t.published),t.relativeTimeShort=i.getRelativeDate(t.published),t.image=t.images.medium+"&h=120",t.imageToken=t.image_token,t.showImage=t.image||t.fetch_image,t.textOnlySource=t.publisher,t.centerImage=1,t.extraRow=t.viewCount;var o=t.answerMeta&&t.answerMeta.signal_from?t.answerMeta.signal_from:"videos";t.imageProxyOps={token:t.imageToken,origin:o};var l=e.getProperty(s,t.publisher+".searchURL");return l&&(t.searchURL=l+rq),t}});var a=function(t){var i=0;return t.statistics&&t.statistics.viewCount&&(i=parseInt(t.statistics.viewCount,10),$.isNumeric(i)||(i=0)),!i&&t.duration.match(/\d+:\d+:\d+/)?lp("video","Preview"):e.abbrevNumber(i)+" view"+(1!==i?"s":"")},o=function(e){if(e.category&&"Music"===e.category){var t=e.title.replace(/\(.*\)|\[.*\]/g,""),i=(t=(t=t.replace(/\s+f(?:ea|)t\..*$/g,"")).replace(/^\s+|\s+$/g,"")).split(" - "),s=i[0],a=i[1]||s,o=a!==s?a+" "+s:a;return{title:t,artist:s,song:a,iTunesURL:"/iit/"+encodeURIComponent(t),amazonURL:encodeURIComponent("!a "+o),spotifyURL:encodeURIComponent("!spotify "+o)}}},n=function(e){var t=DDG.getDateFromString(e);return t?t.toDateString().substr(4):""}}(DDG),function(e){var t=e.Models.AnswerItems,i=t.Base,s={desktop:{module:110,vertical:130},mobile:{module:110,vertical:80}};t.News=i.extend({idField:"url",transform:function(t){t.showImage=t.image||t.fetch_image,t.relative_time&&(t.relativeTimeShort=t.relative_time.replace(/(\d+) ([a-z]).*/,"$1$2")),t.favicon_url||(t.favicon_url=t.url),e.device.isMobile||"fr-fr"!==window.kl||(t.noExcerpt=1);var i=t.answerMeta&&t.answerMeta.signal_from?t.answerMeta.signal_from:"news";return t.imageProxyOps={height:this._getImageHeight(t.pageNo),noFallback:!e.device.isIE,token:t.image_token,origin:i},this.on("change:visible",this._onVisibleChanged.bind(this)),t},_getImageHeight:function(t){var i=e.device.isMobile?"mobile":"desktop";return s[i][1===t?"module":"vertical"]},_fetchImage:function(e){this._fetchedImage||(this._fetchedImage=!0,$.getJSON("/f.js?vqd="+window.vqd+"&o=json&i=1&u="+e,this._onImageFetched.bind(this)))},_onVisibleChanged:function(){this.visible&&this.fetch_image&&!this.image&&this._fetchImage(this.url)},_onImageFetched:function(e){e&&e.image&&this.set("image",e.image)}})}(DDG),function(e){var t=e.Models.AnswerItems.Base;e.Models.AnswerItems.About=function(i){t.call(this,i),this.hasInfobox&&(this.infobox=new e.Models.Modules.AboutInfoBox({Infobox:this.Infobox,RelatedTopics:this.RelatedTopics,minimizeHeight:i.minimizeHeight})),this.infobox&&this.infobox.maps.length&&(this.headerImage=this.Image&&!this.ImageIsLogo,this.headerType=this.headerImage?2:1,this.header=new e.Models.Modules.AboutHeader({imageURL:this.headerImage?this.Image:null,imageWidth:this.ImageWidth,imageHeight:this.ImageHeight,mapURL:this.infobox.maps[0].value,location:this.location})),this.header&&(this.showDirectionsButton=!0),this.infobox&&this.infobox.profiles.length&&(this.infobox.profiles.push({data_type:"wikipedia",value:this.AbstractURL}),this.OfficialUrl&&this.infobox.profiles.push({data_type:"official_site",value:this.OfficialUrl}),this.profiles=new e.Models.Modules.AboutProfiles({title:this.Heading,entity:this.Entity,data:this.infobox.profiles}));var s=this.answerMeta;s&&(s.id&&"wikihow"===s.id||s.is_stackexchange&&1===s.is_stackexchange)&&(this.hasClickableHeader=!0)},e.Models.AnswerItems.About.prototype=$.extend({},t.prototype,{headerType:0,isTooHigh:!1,toggleExpand:function(){this.infobox&&this.infobox.toggleExpand(),this.set("expanded",!this.expanded)},expand:function(){this.expanded||this.toggleExpand()},collapse:function(){this.expanded&&this.toggleExpand()},hasPredictableExpandableContent:function(){return this.infobox&&this.infobox.canExpand()||this.shortAbstract!==this.fullAbstract},canModuleExpand:function(){return this.hasPredictableExpandableContent()||this.isTooHigh},getAbstract:function(){return this.expanded?this.fullAbstract:this.shortAbstract},showMoreAtBottom:function(){return!this.infobox&&(!this.canModuleExpand()||!!this.isTooHigh)},transform:function(t){if(t.Results&&t.Results.length&&(t.OfficialUrl=t.Results[0].FirstURL),t.minEllipsisHeight=t.minimizeHeight?80:160,t.ImageHeight=t.ImageHeight||0,t.Image&&t.ImageWidth&&t.ImageHeight){var i=e.device.width<=1100?.7:1,s=e.scaleToFit(t.ImageWidth,t.ImageHeight,120,160);t.ImageWidth=parseInt(s.width,10),t.ImageHeight=parseInt(s.height,10),t.defaultTextHeight=Math.max(t.minEllipsisHeight,t.ImageHeight*i/2)}else t.Image&&delete t.Image;t.Image&&window.iqbi&&!e.settings.safeSearch.isOff()&&delete t.Image,t.AbstractSource?t.moreAtText=t.AbstractSource:t.meta&&(t.moreAtText=t.meta.src_name),t.Abstract=e.Utils.Strings.removeUnwantedHtml(t.Abstract)||"",t.hasCode=t.Abstract.match(/\0?this.lat+e+" N, ":-1*this.lat+e+" S, ")+(this.lon>0?this.lon+e+" E":-1*this.lon+e+" W")}})}(DDG),function(e){var t=e.Models.AnswerItems.Base;e.Models.AnswerItems.DirectionsItem=function(e){t.call(this,e)},e.Models.AnswerItems.DirectionsItem.prototype=$.extend({},t.prototype,{})}(DDG),function(e){var t=e.Models.Base;e.Models.Header=function(i){t.call(this,i),this._headerHeight=e.get_header_height()+1},e.Models.Header.prototype=$.extend({},t.prototype,{updateScrollPosition:function(t){var i,s,a=tthis._headerHeight+300,this.scrolledPastHeader=t>this._headerHeight,this.canUpdateHeaderPosition=!1,this.newHeaderPosition=-this._headerHeight,this.scrolledToTop&&(this._scrollBuffer=0,this._showingFloatedHeader=!1,this.newHeaderPosition=0),i=a&&!this._showingFloatedHeader,s=!a&&this._showingFloatedHeader,this.scrolledPastHeaderThreshold&&(i||s)&&this._pastScrollBuffer(t,a)&&(this.newHeaderPosition=a?0:-this._headerHeight,this.canUpdateHeaderPosition=!0,this._scrollBuffer=0,this._showingFloatedHeader=!this._showingFloatedHeader),e.device.isMobile&&!this.scrolledToTop&&(this.newHeaderPosition-=42),this._previousScroll=t,this._previousScrollDirection=a},_pastScrollBuffer:function(e,t){return this._previousScrollDirection!==t&&(this._scrollBuffer=0),this._scrollBuffer||(this._scrollBuffer=e+(t?-50:100)),t?ethis._scrollBuffer},isFloated:function(){return this._showingFloatedHeader}})}(DDG),function(e){var t,i=e.Models.Base,s={spread:{title:lp("SERP footer content","Help Spread DuckDuckGo"),body:e.device.isEnglish?lp("footer_card","Help your friends and family take back their privacy!"):lp("showcase_spread","Help your friends and family join the Duck Side!"),icon:"spread",url:"https://duckduckgo.com/spread",id:"sp"},bangs:{title:lp("SERP footer content","Learn About Bangs"),body:lp("SERP footer content","Discover shortcuts to go to search results on other sites."),icon:"bangs",url:"https://duckduckgo.com/bang",id:"ba"},app:{title:lp("showcase_app","Get Our App & Extension"),body:lp("showcase_app","Protect your data on every device."),icon:"woman",url:"https://duckduckgo.com/app",id:"bl"},donations:{title:lp("SERP footer content","Donating for Privacy"),body:lp("SERP footer content","Over %s in DuckDuckGo privacy donations.","$3,650,000"),icon:"donations",url:"https://duckduckgo.com/donations",id:"dn"},course:{title:lp("SERP footer content","Privacy Newsletter"),body:lp("SERP footer content","Stay protected and informed with our privacy newsletters."),icon:"mailbox",url:"https://duckduckgo.com/newsletter",id:"su"},syntax:{title:lp("SERP footer content","Fine-tune Your Search"),body:lp("SERP footer content","Learn how to search like the pros."),icon:"private-searches",url:"https://help.duckduckgo.com/results/syntax",id:"syntax"},themes:{title:lp("SERP footer content","Get New Themes"),body:lp("SERP footer content","You're in control. Customize the look-and-feel of DuckDuckGo."),icon:"design",url:"https://duckduckgo.com/settings#theme",id:"theme"},about:{title:lp("SERP footer content","Learn About DuckDuckGo"),body:lp("SERP footer content","Learn how we're dedicated to keeping you safe online."),icon:"hatched",url:"https://duckduckgo.com/about",id:"about"},google:{title:lp("SERP footer content","Say Goodbye To Google"),body:lp("SERP footer content","Learn how you can free yourself from Google for good."),icon:"milestone",url:"https://spreadprivacy.com/how-to-remove-google/",id:"google"},profit:{title:lp("SERP footer content","How We Are Profitable"),body:lp("SERP footer content","The world needs an alternative to the collect-it-all business model."),icon:"beanstalk",url:"https://spreadprivacy.com/duckduckgo-revenue-model/",id:"profit"},anonymous:{title:lp("SERP footer content","We Protect Your Privacy"),body:lp("SERP footer content","We don't save your search history or follow you around the web."),icon:"shield",url:"https://spreadprivacy.com/how-anonymous-is-duckduckgo/",id:"anonymous"},carbon:{title:"Better for the Planet",body:"We’re carbon negative! Read our climate pledge.",icon:"earth",url:"https://spreadprivacy.com/duckduckgo-goes-carbon-negative/",id:"carbon"}},a=[[s.about,s.donations,s.anonymous],[s.spread,s.course,s.bangs],[s.app,s.course,s.syntax],[s.themes,s.about,s.google]];t=e.device.isDDGApp||e.extension.isInstalled()?[s.spread,s.course,s.syntax]:[s.spread,s.app,s.syntax],e.device.isEnglish?a.push([s.carbon,s.spread,s.profit]):a.push([s.app,s.spread,s.profit]),e.Models.Footer=function(t){this.isCtaExperiment=e.device.isEnglish&&e.device.isDesktop,i.call(this,t),this.cards=[],this.links=[{url:"https://spreadprivacy.com",icon:"blog",id:"bl"},{url:"https://twitter.com/duckduckgo",icon:"twr",id:"tw"},{url:"https://reddit.com/r/duckduckgo",icon:"reddit",id:"rd"},{url:"https://duckduckgo.com/newsletter",icon:"newsletter",id:"nl"}],e.device.isDesktop||this.links.push({url:"https://duckduckgo.com/app",icon:"phone",id:"ip"}),this._initCards()},e.Models.Footer.prototype=$.extend({},i.prototype,{_initCards:function(){var i={},s=a[Math.floor(Math.random()*a.length)];if(e.device.isDesktop)for(;this.cards.length<3;){var o=Math.floor(Math.random()*s.length);i[o]||(i[o]=!0,this.cards.push(s[o]))}else this.cards=[t[Math.floor(Math.random()*t.length)]]}})}(DDG),function(e){var t=e.Models.Base,i="geoip",s="manual",a="precise",o="obfuscated";e.Models.UserLocation=function(e){"string"==typeof(e=e||{})&&(e=this._fromString(e)||{}),this._isValidLatLon(e.lat,e.lon)||(e.lat=null,e.lon=null),this._isValidLocationType(e.type)||(e.type=a),t.call(this,e),this.isValid()&&(this.timestamp||(this.timestamp=Date.now()))},e.Models.UserLocation.GEOIP_LOCATION=i,e.Models.UserLocation.MANUAL_LOCATION=s,e.Models.UserLocation.PRECISE_LOCATION=a,e.Models.UserLocation.OBFUSCATED_LOCATION=o,e.Models.UserLocation.prototype=$.extend({},t.prototype,{isValid:function(){return this._isValidLatLon(this.lat,this.lon)},isSameAs:function(e){return this.lat===e.lat&&this.lon===e.lon&&this.desc===e.desc},isExpired:function(){return!!this.timestamp&&(!(!this.desc||"Antarctica, Antarctica"!==this.desc)||(new Date).getTime()-this.timestamp>(e.device.isMobile?9e5:18e6))},intoString:function(){return[this.lat,this.lon,this.desc,this.timestamp,this.type].join("|")},intoObj:function(e){var t=e||this;return{lat:t.lat,lon:t.lon,desc:t.desc,timestamp:t.timestamp,type:t.type||a,how_this_works:"https://help.duckduckgo.com/privacy/anonymous-localized-results/"}},setDescByGeocoding:function(e){this._geocode(function(t){if(t){var i=t.text;if(t.context&&t.context.length)for(var s=0;s150&&(o="user"),this.hasLocation()?(this.userLocation.timestamp=Date.now(),this.setLocation(this.userLocation)):this.disableLocAsk(o)),this._checkedForUpdate=!0,this.set("errorGettingLocation",t.code),this.set("waitingForLocation",!1),e.pixel.fire("lupe",i.updateType,t.code,o),a&&a()}else a&&a()},cancelLocation:function(){this._stopWaitTimeout(),this.set("waitingForLocation",!1),this.set("errorGettingLocation",!1)},clearLocation:function(){this._stopWaitTimeout(),this.set("userLocation",new e.Models.UserLocation),this.set("errorGettingLocation",!1),this.set("waitingForLocation",!1),e.settings.clear(e.settings.LOCATION_SETTING_KEY,{saveToCookie:!0,saveToCloud:!1}),e.pixel.fire("lcx"),this.emit("meaningfulUserLocationChange")},_setTimeoutWrapper:function(e,t){return window.setTimeout(e,t)},_stopWaitTimeout:function(){this._waitTimeout&&(w.clearTimeout(this._waitTimeout),this._waitTimeout=null)},disableLocAsk:function(t){var i={saveToCookie:!0,saveToCloud:!1};if("sys"===(t=t||"user")){var s=new Date;s.setDate(s.getDate()+7),i.expires=s}e.settings.set("kat","-1",i)},setGeoIPLocation:function(t){t&&t.type===e.Models.UserLocation.GEOIP_LOCATION&&t.isValid()&&(this.geoipLocation=t)},setLocation:function(t,i){i=void 0===i||i;var s=0,a=!1;if(this.hasLocation()&&this.userLocation.type!==t.type&&(a=!0,e.pixel.fire("lstc",t.type)),this.userLocation.isSameAs(t)&&!this.userLocation.isExpired()||(s=e.geo.distance(this.userLocation,t),this.set("userLocation",t)),i){e.settings.clear("kat"),e.settings.set(e.settings.LOCATION_SETTING_KEY,1,{saveToCookie:!0,saveToCloud:!1});try{var o=this.userLocation.intoObj();window.localStorage.setItem(e.settings.USER_LOC_LOCAL_STORAGE_KEY,JSON.stringify(o))}catch(t){e.settings.clear(e.settings.LOCATION_SETTING_KEY),e.pixel.fire("lsle",this.lastUpdateType||"manual",{error:encodeURIComponent(t.message)})}}return(a||s&&s>1)&&this.emit("meaningfulUserLocationChange",s),s},fetchGeoIPLocation:function(t){var i=function(e,t){this._locationFetchWaitList.forEach((function(i,s){$.isFunction(i)&&i(e,t)}))}.bind(this);this._isLocationFetching?this._locationFetchWaitList.push(t):this.geoipLocation?t(this.geoipLocation):(this._isLocationFetching=!0,this._locationFetchWaitList.push(t),$.ajax({url:e.services.getURL("local")+"&get_obfus_loc=1",dataType:"jsonp",success:function(t){var s=null;t&&"number"==typeof t.obfus_lat&&"number"==typeof t.obfus_lon&&(s=new e.Models.UserLocation({lat:t.obfus_lat,lon:t.obfus_lon,type:e.Models.UserLocation.GEOIP_LOCATION}),this.setGeoIPLocation(s)),i(s)}.bind(this),error:function(e,t,s){i(null,s)},complete:function(){this._locationFetchWaitList=[],this._isLocationFetching=!1}.bind(this)}))}}),e.userLocator=new e.Models.UserLocator}(DDG),function(e){var t=e.Models.Base;e.Models.ModuleImageHeader=function(i){if(i=i||{},this.images=i.images||[],this.loadMoreImages=i.loadMoreImages||!1,this.maxNumberOfImages="xs"===e.device.widthBreakpoint()?2:4,this.loadMoreImages?this.numberOfImages=this.maxNumberOfImages:this.images&&this.images.length&&(this.numberOfImages=this.images.length>this.maxNumberOfImages?this.maxNumberOfImages:this.images.length),this.layout=i.layout||this._getLayout(),i.morePhotosText?this.morePhotosText=i.morePhotosText:this.morePhotosText=l("See Photos"),t.call(this,i),this.loadMoreImages&&this.images.length"+rqd+"
                "}),this.$el.prepend(this.$safeSearch),this.$(".js-safe-search-temp").on("click",(function(i){i.preventDefault(),e.pixel.fire("sss","m",{v:-1,p:0,r:t}),e.settings.safeSearch.setTemporaryId("-1",(function(){e.search.requery()}))})),this.$(".js-safe-search-perm").on("click",(function(i){i.preventDefault(),e.pixel.fire("sss","m",{v:-1,p:1,r:t}),e.settings.safeSearch.setId("-1",(function(){e.search.requery()}))})),this._showingMessage=!0,e.page.showingSafeSearch=1,e.pixel.fire("ssi",{r:t}),t||(DDG.deep.hideNoResults=!0)}},_showSiteSearchMessage:function(){if(!this.$siteSearch&&e.deep.getResultCount()){var t=sfq,i=e.search.getSiteQuery(t);i.sites.length&&(this.$siteSearch=DDG.$exec_template("site_query",{queryEncoded:encodeURIComponent(i.query),isExcluding:i.isExcluding,hasMultipleSites:i.sites.length>1,sites:i.sites,forceBreak:e.device.isMobile&&i.sites.length>1}),this.$el.append(this.$siteSearch),this._showingMessage=!0)}},_showSpellingMessage:function(t){this.$safeSearch||this.$spelling||!e.search.spelling.isValidType()||(this.$spelling=new e.Views.SpellingMessage({appendTo:this.$el.selector,model:e.search.spelling}),this._showingMessage=!0)}})}(DDG),function(e){var t=e.Views.Base;e.Views.SpellingMessage=function(e){this.model=e.model,this.ia=e.ia,t.call(this,e)},e.Views.SpellingMessage.prototype=$.extend({},t.prototype,{template:"spelling_",_render:function(e){this.template+=this.model.type,t.prototype._render.call(this),this._showSpellingMessage()},_showSpellingMessage:function(){e.pixel.fire("spd",this.model.type),"nmrc"===this.model.type?this.$el.find(".js-spelling-suggestion-link").html(this.model.suggestion):this.$el.find(".js-spelling-suggestion-link").attr({href:this.model.makeSpellingURL(this.model.link,!1,this.ia),"data-query":this.model.query}).html(this.model.suggestion).click(this._onSpellingLinkClick.bind(this,this.model.query)),this.$el.find(".js-spelling-recourse-link").attr({href:this.model.makeSpellingURL(this.model.recourseLink,!0,this.ia),"data-query":this.model.recourseQuery}).html(this.model.recourseText).click(this._onSpellingLinkClick.bind(this,this.model.recourseQuery))},_onSpellingLinkClick:function(t,i){DDG.pixel.fire("sp",this.model.type),e.settings.isDefault("kg")||(i.preventDefault(),e.page.searchbar.updateQuery(t))}})}(DDG),function(e){var t=e.Views.Base;e.Views.TwitterEasterEgg=function(e){this.username=e.username,t.call(this,e),this._fetchImage()},e.Views.TwitterEasterEgg.prototype=$.extend({},t.prototype,{_fetchImage:function(){$.ajax({url:"/tw.js?o=json&user="+this.username,dataType:"json",success:function(e){this.image=e&&e.profile_image,this._renderEasterEgg()}.bind(this)})},_renderEasterEgg:function(){this.image&&(this.$el.append(e.exec_template("twitter_easter_egg",{image:this.image})),this._cacheElems(".js-logo",["ddg","praise","avatar"]),this.$el.attr("href","/spread"),setTimeout(this._animate.bind(this),1e3))},_animate:function(){this.$ddg.hide(),this.$praise.show(),setTimeout(function(){this.$praise.hide(),this.$avatar.show()}.bind(this),1e3),setTimeout(function(){this.$avatar.hide(),this.$ddg.show()}.bind(this),3e3)}})}(DDG),function(e){var t=e.Views.Base,i="set-header--floating";e.Views.Header=function(i){t.call(this,i),this.views.headerTextPromo=new e.Views.TextPromo({appendTo:".js-header-aside",content:"header",parts:[{type:"badge",text:"New!"},{type:"text",text:"App Tracking Protection beta now open to all on Android"}],uri:"https://spreadprivacy.com/app-tracking-protection-open-beta/?s=pr-hd",start:Date.UTC(2022,10,16,13),end:Date.UTC(2022,10,23,13),filter:function(){return e.device.isDesktop&&e.device.isEnglish}}),this.views.headerLinks=new e.Views.HeaderLinks({appendTo:".js-header-aside",hideSettingsIcon:i.hideSettingsIcon,isPctaexpTreatment:"b"===e.searchExperiments.getActiveVariant("pctaexp")}),"b"===e.searchExperiments.getActiveVariant("pctaexp")&&(this._reactDOMRoot||(this._reactDOMRoot=document.createElement("div"),this._reactDOMRoot.className="header--aside__item header--aside__item--hidden-lg",document.querySelector(".js-header-aside").prepend(this._reactDOMRoot),this._reactRoot=window.ReactDOMClient.createRoot(this._reactDOMRoot)),this._reactRoot.render(window.React.createElement(window.contexts.DdgInstanceProvider,{pixel:e.pixel},window.React.createElement(window.components.ExtensionInstallCta,{atbPopoverRef:i.atbPopoverRef,startOpen:e.addToBrowser.canShowOnDesktopSerp()})))),this.bindEvents([[e.device,"scroll",this._onScroll]])},e.Views.Header.prototype=$.extend({},t.prototype,{destroy:function(){this._reactRoot&&(this._reactRoot.unmount(),this._reactRoot=null),this._reactDOMRoot&&(this._reactDOMRoot.remove(),this._reactDOMRoot=null),t.prototype.destroy.call(this)},_onScroll:function(t){this.model.updateScrollPosition(e.device.scrollTop()),this.model.scrolledToTop?this._reset():(this.model.scrolledPastHeader&&this.views.headerLinks.hide(),this.model.scrolledPastHeaderThreshold&&!e.hasClass(this.$el[0].id,i)&&(this._updateHeaderPosition(),setTimeout(function(){e.addClass(this.$el[0].id,e.$html,i)}.bind(this),20)),this.model.canUpdateHeaderPosition&&this._updateHeaderPosition())},_updateHeaderPosition:function(){this.$el.css("top",this.model.newHeaderPosition),this.model.emit("updatingHeaderPosition")},_reset:function(){this.$el.css("top",0),e.removeClass(this.$el[0].id,e.$html,i)}})}(DDG),function(e){var t=e.Views.Base;e.Views.Footer=function(i){t.call(this,i),this.views.footerTextPromo=new e.Views.TextPromo({after:".js-footer-tagline",context:"footer",parts:[{type:"badge",text:"New!"},{type:"text",text:"App Tracking Protection beta now open to all on Android"}],uri:"https://spreadprivacy.com/app-tracking-protection-open-beta/?s=pr-ft",start:Date.UTC(2022,10,16,13),end:Date.UTC(2022,10,23,13),filter:function(){return e.device.isMobile&&e.device.isEnglish}}),this._cacheElems(".js-footer",["card","link"]),this.bindEvents([[this.$card,"click",this._onItemClick],[this.$link,"click",this._onItemClick],[this.model,"change:visible",this._toggleVisibility]]),e.settings.isDefault("kav")&&this.model.set("visible",!0);var s=$(".js-footer-lazysvg");DDG.ImageLoader.registerAll(s,"scrollY")},e.Views.Footer.prototype=$.extend({},t.prototype,{template:e.device.isDesktop?"footer":"footer_mobile",_render:function(e){t.prototype._render.call(this,e),this._showFeedbackBtn()},_showFeedbackBtn:function(){!this.views.feedback&&e.device.isMobileDevice&&e.duckbar&&(this.views.feedback=new e.Views.Feedback.Button({appendTo:".js-footer-feedback-btn-wrap",clickPixel:"fbpm"}))},_toggleVisibility:function(t){t?(e.$html.addClass("has-footer"),this.$el.show()):(e.$html.removeClass("has-footer"),this.$el.hide()),this._hasShownFooter||(this._setContentMinHeight(),e.device.on("resize",this._setContentMinHeight.bind(this)),this._hasShownFooter=!0)},_onItemClick:function(t){var i=$(t.currentTarget),s=i.data("id");e.pixel.fire("fic",s,{ic:+i.hasClass("footer__card")})},_setContentMinHeight:function(){this.$after.css("min-height",e.device.height)}})}(DDG),function(e){var t=e.Views.Base;e.Views.ClickableItem=function(e){t.call(this,e)},e.Views.ClickableItem.prototype=$.extend({},t.prototype,{_render:function(e){t.prototype._render.call(this,e),this.bindEvents([[this.$el,"click",this._onClick],[this.$el,"mousedown",this._onMouseDown]])},_onMouseDown:function(t){if(!$(t.target).is("a")){t.stopPropagation();var i=0;e.device.isIE&&(nkdc(t)||nkdm(t))&&(i=1);var s=t.which&&2==t.which,a=t.which&&3==t.which;i||s||a?(fm=1,a||this._onClick(t,1)):fm=0}},_onClick:function(t,i){var s;if(t.stopPropagation(),this.answer.engaged(),t.target&&"A"===t.target.nodeName?s=t.target:(s=this.$el[0]).href=this.$el.attr("data-link"),s.href)return e.history.set({iai:this.answer.getQuerystringItemId(this.model)},function(){DDG.isInternalURL(s.href)||this.answer.clickedExternalLink({},t),i||"1"!==e.settings.get("kn")||(i=1),nrg(null,null,t,i,s)}.bind(this)),t.preventDefault();this.model.select()},_onExternalLinkClick:function(i){if(i.stopPropagation(),this.answer.engaged(),this.answer.clickedExternalLink({},i),i.ctrlKey)return e.history.set({iai:this.answer.getQuerystringItemId(this.model)}),t.prototype._onExternalLinkClick.call(this,i);e.history.set({iai:this.answer.getQuerystringItemId(this.model),pn:this.model.pageNo},function(){t.prototype._onExternalLinkClick.call(this,i)}.bind(this))}})}(DDG),function(e){var t=e.Views.Base;e.Views.ModuleImageHeader=function(i){if(this.answer=i.answer,this.model=new e.Models.ModuleImageHeader({images:this._getImages(i.model),loadMoreImages:"About"===this.answer.answerItemModel,isMapExpanded:this.answer.isMapExpanded,query:this.answer.meta.requery,imagesVqd:i.imagesVqd,morePhotosText:i.model&&i.model.morePhotosText}),this.model.imageURL=i.model.imageURL,this.answer.isMapExpanded){var s=this.answer.meta.requery?encodeURIComponent(this.answer.meta.requery):this.answer.queryEncoded;this.model.imageIAURL="/?q="+s+"&ia=images&iax=images"+(w.kurl?w.kurl:"")}var a=$.extend(!0,{},i);a.model=this.model,t.call(this,a),this.bindEvents([[this.model,"change:imagesLoaded",this._onImagesLoaded]])},e.Views.ModuleImageHeader.prototype=$.extend({},t.prototype,{template:"module_image_header",_render:function(e){t.prototype._render.call(this,$.extend({},this.model,{hideTitle:"applemaps"===this.answer.sourceId})),this.bindEvents([[this.$el,"click",this._onClick]])},_getImages:function(e){var t=[],i=e.image||e.imageURL;if(i&&t.push({url:i}),e.thumbnails)for(var s=0;s0||this.tooltip.hide()},_onTriggerElementMouseEnter:function(){this.mouseLeaveTimeout&&clearTimeout(this.mouseLeaveTimeout),this._triggerTooltip()},_onTriggerElementMouseLeave:function(){this.mouseLeaveTimeout=setTimeout(function(){this.tooltip.hide()}.bind(this),100)}})}(DDG),function(e){var t=e.Views.Base;e.Views.AdBadge=function(i){i=$.extend({},{context:"default",label:l("Ad")},i),this.tooltip=new e.Views.TooltipMixin(this),t.call(this,i)},e.Views.AdBadge.prototype=$.extend({},t.prototype,{template:"ad_badge",_render:function(e){t.prototype._render.call(this,e),this.tooltip.setup({$triggerElement:this.$(".js-badge--ad"),content:new DDG.Views.AdBadgeTooltip({})})}})}(DDG),function(e){var t=e.Views.Base,i=["bg_BG","cs_CZ","da_DK","de_DE","el_GR","es_ES","et_EE","fi_FI","fr_FR","hr_HR","hu_HU","is_IS","it_IT","lt_LT","lv_LV","nb_NO","nl_NL","pl_PL","pt_PT","ro_RO","ru_RU","sk_SK","sl_SI","sv_SE","tr_TR"];e.Views.AdBadgeTooltip=function(e){this.helpPageURL=this._getHelpPageURL(),t.call(this,e)},e.Views.AdBadgeTooltip.prototype=$.extend({},t.prototype,{template:"ad_badge_tooltip",_render:function(){t.prototype._render.call(this,{helpPageURL:this.helpPageURL})},_getHelpPageURL:function(){var e=this._getHelpPageLocaleSuffix();return"https://help.duckduckgo.com/"+(e?"translated":"company")+"/ads-by-microsoft-on-duckduckgo-private-search"+e},_getHelpPageLocaleSuffix:function(){var e=window.locale,t="",s=i.indexOf(e);return s>=0&&(t="-"+i[s]),t}})}(DDG),function(e){var t=e.Views.Base;e.Views.ShoppingHeader=function(i){void 0===i.isAds&&(i.isAds=this._isAdsBasedOnItemsDisplayed(i),this._updateAutomatically=!0),this.isAds=i.isAds,this.isIE=e.device.isIE,this.answer=i.answer,t.call(this,i),this.answer&&this._updateAutomatically&&(this.answer.on("change:hasScrolledPastFreeListings",this._onScrolledPast.bind(this)),this.answer.on("requery-complete",this._updateBasedOnItems.bind(this)))},e.Views.ShoppingHeader.prototype=$.extend({},t.prototype,{template:"shopping_header",_render:function(){t.prototype._render.call(this,this),this.isAds?this.views.adsBadge=new e.Views.AdBadge({label:l("Ads"),appendTo:this.$el,context:"shopping-vertical",isIcon:!0}):this.views.freeListingsBadge=new e.Views.FreeListingsBadge({appendTo:this.$el})},_onScrolledPast:function(e){this.isAds=!e,this._rerender()},_updateBasedOnItems:function(){this.isAds=this._isAdsBasedOnItemsDisplayed(this),this._rerender()},_isAdsBasedOnItemsDisplayed:function(t){var i=0===e.getProperty(t,"answer.items.length"),s=e.getProperty(t,"answer.items.0.free_listing");return!(!i&&s)}})}(DDG),function(e){var t=e.Views.Base;e.Views.FreeListingsDivider=function(i){this.answer=i.answer,this.shouldUpdateMetabarContent=!e.device.isMobileDevice,t.call(this,i),this.shouldUpdateMetabarContent&&(this.bindEvents([[e.device,"scroll",this._onScroll],[e.device,"resize",this._onResize],[this.answer,"metabar-stuck",this._onMetabarStuck],[this.answer,"removed-load-more",this._setScrolledPastY]]),this._observer=e.Utils.IsIntoViewObserver(this.$el[0],function(e){this.answer.set("freeListingsDividerIntoView",e)}.bind(this)))},e.Views.FreeListingsDivider.prototype=$.extend({},t.prototype,{template:"free_listings_divider",destroy:function(){var i=e.getProperty(e,"page.views.header.$el");i&&this.boundAnimationEnd&&this.boundAnimationStart&&(i.off("transitionend transitioncancel",this.boundAnimationEnd),i.off("transitionstart",this.boundAnimationStart)),t.prototype.destroy.call(this)},_onMetabarStuck:function(){this._setShowingFloatedHeader(),this._setScrolledPastY(),this._updateLabelBasedOnScrollPosition()},_onResize:function(){this.answer.active&&(this._setScrolledPastY(),this._updateLabelBasedOnScrollPosition())},_render:function(i){t.prototype._render.call(this,i),this.views.shoppingHeader=new e.Views.ShoppingHeader({isAds:!1,appendTo:this.$el,answer:this.answer}),this.shouldUpdateMetabarContent&&(this._setScrolledPastY(),this._setupUpdateLabelOnAnimationEnd())},_scrolledPastY:0,_checkTimeout:null,_setScrolledPastY:function(){this._scrolledPastY=this.$el.offset().top+9-(this._showingFloatedHeader?DDG.get_header_height():0)},_setShowingFloatedHeader:function(){this._pageHeaderReference=this._pageHeaderReference||e.getProperty(e,"page.views.header.model"),this._pageHeaderReference&&(this._showingFloatedHeader=this._pageHeaderReference.isFloated())},_updateLabelCloseToAnimation:function(){this._checkTimeout||this._isAnimating||(this._checkTimeout=setTimeout(function(){this._setScrolledPastY(),this._updateLabelBasedOnScrollPosition(),this._checkTimeout=null}.bind(this),750))},_setupUpdateLabelOnAnimationEnd:function(){var t=e.getProperty(e,"page.views.header.$el");t&&(this.boundAnimationEnd=this._onHeaderAnimationEnd.bind(this),this.boundAnimationStart=this._onHeaderAnimationStart.bind(this),t.on("transitionend transitioncancel",this.boundAnimationEnd),t.on("transitionstart",this.boundAnimationStart))},_onHeaderAnimationEnd:function(){this.answer.active&&(this._setShowingFloatedHeader(),this._isAnimating=!1,this._setScrolledPastY(),this._updateLabelBasedOnScrollPosition())},_onHeaderAnimationStart:function(){clearTimeout(this._checkTimeout),this._checkTimeout=null,this._isAnimating=!0},_onScroll:function(){if(this.answer.freeListingsDividerIntoView){var e=window.scrollYthis._scrolledPastY&&this.answer.set("hasScrolledPastFreeListings",!0)}})}(DDG),function(e){var t=e.Views.Base;e.Views.FreeListingsBadge=function(i){this.tooltip=new e.Views.TooltipMixin(this),t.call(this,i)},e.Views.FreeListingsBadge.prototype=$.extend({},t.prototype,{template:"free_listings_badge",_render:function(e){t.prototype._render.call(this,e),this.tooltip.setup({$triggerElement:this.$el,content:new DDG.Views.FreeListingsTooltip({}),forcePositionDesktop:"below"})}})}(DDG),function(e){var t=e.Views.Base;e.Views.FreeListingsTooltip=function(e){t.call(this,e)},e.Views.FreeListingsTooltip.prototype=$.extend({},t.prototype,{template:"free_listings_tooltip"})}(DDG),function(e){var t=e.Views.Base,i="LEFT",s="RIGHT";e.Views.ExploreByItems=function(i){this.metabar=i.metabar,this.answer=i.answer,this._cachedItems=[],this.currentScroll=i.scrollTo||0,t.call(this,i),this._cacheElems(".js-explore-by-items",["container","item","right","left"]),this.bindEvents([[this.$container,"scroll",this._updateArrowButtonVisibility],[this.$item,"click",this._onItemClick],[this.$item,"contextmenu",this._onItemContextMenu],[this.$right,"click",this._onRightClick],[this.$left,"click",this._onLeftClick],[e.device,"resize",this._updateArrowButtonVisibility],[this.answer,"change:items",this._updateArrowButtonVisibility],[this.metabar,"stuck",this._updateArrowButtonVisibility]]),i.scrollTo&&this.$container.scrollLeft(i.scrollTo)},e.Views.ExploreByItems.prototype=$.extend({},t.prototype,{template:"explore_by_items",_updateArrowButtonVisibility:function(){var e=this.$container.scrollLeft(),t=this.$container[0].scrollWidth,i=this.$container[0].clientWidth,s=t-i;this.currentScroll=e;var a=function(e,t){e.toggleClass("is-hidden",!t)};t<=i?(a(this.$left,!1),a(this.$right,!1)):(a(this.$left,!!(e>0)),a(this.$right,!(e===s)))},_getEBIItemElements:function(){var e=this._cachedItems;return 0===e.length&&this.$item.each((function(){e.push($(this))})),e},_getItemAtEdge:function(e){var t,i,a=this._getEBIItemElements(),o=this.$left.outerWidth(),n=this.$container.width()-o;for(var l in a){var r=a[l],d=r.position().left;if(d+r.outerWidth(!0)>(e===s?n:0)){t=parseInt(l),i=e===s?-1*(n-(d+r.outerWidth())):d-o;break}}return{index:t,partHidden:i}},_scrollToContainerEdge:function(e,t){var a=this._getEBIItemElements(),o=e+(t===s?4:-4),n=t===s?this.$container[0].scrollWidth-this.$container[0].clientWidth:0;return(t===s&&o>=a.length||t===i&&o<0)&&n},_scrollNumberOfItemsFromIndex:function(e,t,i){for(var a=0,o=this._getEBIItemElements(),n=1;n<=e-(i===s?0:1);n++){var l=o[t+(i===s?n:-n)].outerWidth(!0);a+=i===s?l:-l}return a},_scrollItems:function(e){var t=this.$container.scrollLeft(),i=this._getItemAtEdge(e),s=this._scrollToContainerEdge(i.index,e);!1===s?(t+=i.partHidden,t+=this._scrollNumberOfItemsFromIndex(3,i.index,e)):t=s,this._scroll(t)},_scroll:function(e){this.$container.animate({scrollLeft:e},600,this._updateArrowButtonVisibility.bind(this))},_onRightClick:function(){this._scrollItems(s)},_onLeftClick:function(){this._scrollItems(i)},_onItemClick:function(t){var i=t.ctrlKey||t.shiftKey||t.metaKey||t.button&&1===t.button||!e.settings.isDefault("kn");this._signalItemClicked(this._getItemIURL(t),i)},_onItemContextMenu:function(e){this._signalItemClicked(this._getItemIURL(e),!0)},_getItemIURL:function(e){return e&&e.currentTarget&&e.currentTarget.getAttribute("data-iurl")||!1},_signalItemClicked:function(t,i){t&&this.answer&&this.answer.adReporting&&(this.answer.setExploreByItemClicked(t),i&&this.answer.emit("clicked-explore-by-item")),e.pixel.fire("iafi","explore-by-items")}})}(DDG),function(e){var t=e.Views.Base;e.Views.AnomalyModal=function(e){this.timing={tilesClicked:[]},t.call(this,e)},e.Views.AnomalyModal.prototype=$.extend({},t.prototype,{template:"anomaly_modal",success:function(){DDG.deep.run(!0),new e.Views.AnomalySuccessModal({appendTo:$("body")}),this.destroy()},onTileClicked:function(e){var t=$(e.currentTarget),i=t.data("index");this.model.toggleTile(i),t.toggleClass("selected"),this.timing.tilesClicked.push(Date.now()-this.timing.rendered)},onSubmitClicked:function(e){$.ajax({type:"GET",url:"/anomaly.js",data:{q:this.model.q,type:"anomaly",acs:this.model.getAnswer(),cc:this.model.cc,gk:this.model.gk,p:this.model.p},success:this._handleResponse.bind(this)}),this.timing.submitted=Date.now()-this.timing.rendered},_handleResponse:function(t){var i={c:"mhr",cc:t.cc,gk:t.gk,sc:t.sc,e:t.e,p:t.p,i:t.i};t&&(t.sc&&this.tryAgain(t),t.e&&(e.pixel.fire("tqadbf",i),window.location.replace("/50x-tq.html?tq="+this.model.gk)),t.e||t.sc||(i=Object.assign({},{cct:"bon"},i),e.pixel.fire("tqadbs",i),this._fireTimingPixel(!0,i),this.success()))},tryAgain:function(t){var i={c:"mta",cc:t.cc,gk:t.gk,sc:t.sc,e:t.e,p:t.p,i:t.i};e.pixel.fire("tqadbr",i),this._fireTimingPixel(!1,i),new e.Views.AnomalyErrorModal({appendTo:$("body"),model:new e.Models.Base(t)}),this.destroy()},_fireTimingPixel:function(t,i){e.pixel.fire("tqadbt",Object.assign({},i,{tileClicks:this.timing.tilesClicked,submitClicked:this.timing.submitted,success:t}))},_render:function(){t.prototype._render.call(this,this.model),this._cacheElems(".js-anomaly-modal",["tile","submit"]),this.bindEvents([[this.$tile,"click",this.onTileClicked],[this.$submit,"click",this.onSubmitClicked]]),this.timing.rendered=Date.now()}})}(DDG),function(e){var t=e.Views.Base;e.Views.AnomalyErrorModal=function(e){var i=e.model.i;e.model.instructions="1"===i?lp("Anomaly modal","You have 1 attempt left."):lp("Anomaly modal","You have %s attempts left.",i),t.call(this,e)},e.Views.AnomalyErrorModal.prototype=$.extend({},t.prototype,{template:"anomaly_error_modal",_render:function(e){t.prototype._render.call(this,e.model),this._cacheElems(".js-anomaly-modal",["tryAgain"]),this.bindEvents([[this.$tryAgain,"click",this._tryAgain]])},_tryAgain:function(){var t=this.model;new e.Views.AnomalyModal({appendTo:$("body"),model:new e.Models.AnomalyModal({q:t.q,gk:t.gk,p:t.p,cc:t.cc})}),this.destroy()}})}(DDG),function(e){var t=e.Views.Base;e.Views.AnomalySuccessModal=function(i){t.call(this,i),e.deep.on("change:finished",this.destroy.bind(this))},e.Views.AnomalySuccessModal.prototype=$.extend({},t.prototype,{template:"anomaly_success_modal"})}(DDG),function(e){var t=e.Views.Base,i=e.Views.AnswerBar.Meta,s={expandModeIcon:"G",exitModeIcon:"×",minTopicsForMenu:3};i.MetaBar=function(i){i.heading&&(i.primaryText=i.heading),i.altMeta&&(i.secondaryText=i.altMeta),$.extend(this,s,i),this.parent=i.parent,this.notFixed=i.notFixed,this.showParams=this._shouldShowParams(),this.showSources=this.model.sources&&this.model.sources.values.length>1,this.showAdBadge=this.model.meta&&this.model.meta.hasAdBadge,t.call(this,i);var a=this.model;this.bindEvents([[a,"change:items",this._onItemsChanged],[a,"change:expanded",this._onExpandedChanged],[a,"change:canExpand",this._onExpandedChanged],[a,"change:topics",this._createTopicMenu],[a,"change:parameters",this._onParametersChanged],[e.device,"scroll",this._onScroll],[a,"change:active",this._resetStuck],[a,"metabar-reset",this._resetStuck]]),i.shouldFollowHeader&&this._followHeaderOnScrollUp(),this.model.hasExploreByItemsEnabled&&this.model.on("change:exploreByItems",this._createExploreByItems.bind(this))},i.MetaBar.prototype=$.extend({},t.prototype,{template:"metabar",show:function(){this.$el.removeClass("is-hidden"),this._height=this.$el.outerHeight(!0)},hide:function(){this.$el.addClass("is-hidden")},getHeight:function(){return 44},isStuck:function(){return DDG.hasClass(this.id,"is-stuck")},_render:function(){t.prototype._render.call(this,$.extend({},{showMoreAt:this.sourceName,showDropdowns:this.showParams||this.showSources,searchTerm:this.model.query,itemType:l("Results")},this)),(Modernizr.touch||is_mobile)&&this.$el.removeClass("metabar--fixed").addClass("metabar--unsticky"),this._cacheElems(".js-metabar",["primary","secondary","loading","mode","dropdowns"]),this.$mode.on("click",this._onModeClick.bind(this)),this.clickableSecondaryText&&this.$secondary.on("click",this._onSecondaryClick.bind(this)),this._updateMode(),this._updateLoadingState(),this._createTopicMenu(),this._createAttribution(),this._createSourceDropdown(),this._createParameterDropdowns(),this.linkPrimaryText&&(this.$primary.addClass("metabar__primary-text--linked"),this.$primary.on("click",this._onModeClick.bind(this)))},_followHeaderOnScrollUp:function(){var t=e.getProperty(e,"page.views.header.model");t&&(t.on("updatingHeaderPosition",function(){this.$el.css("top",t.isFloated()?DDG.get_header_height():0),this._floatingBelowHeader=t.isFloated()}.bind(this)),this.on("stuck",(function(){t.isFloated()||this.$el.css({top:0}),this.model.emit("metabar-stuck")})))},_createTopicMenu:function(){var t=this.views,i=this.model,s=this.model.topics;!t.topicMenu&&s.length&&s.length>=this.minTopicsForMenu&&(t.topicMenu=new e.Views.AnswerBar.Meta.TopicMenu({model:i,appendTo:this.$(".js-metabar")}),this.$primary.hide())},_createAttribution:function(){if(!this.model.meta.hasAttribution()||this.model.meta.hideAttribution)return!1;var t=this.$(".js-attribution");this.views.attribution=new e.Views.Attribution({answer:this.model,direction:this.sourceName?"bottom":"bottom-left",appendTo:t}),t.removeClass("is-hidden")},_createParameterDropdowns:function(){this.showParams&&(this.views.parameters=new e.Views.Dropdowns.FilterContainer({$el:this.$dropdowns,answer:this.model}))},_createSourceDropdown:function(){this.showSources&&(this.views.source=new i.FilterDropdown({model:this.model.sources,answer:this.model,appendTo:this.$dropdowns}))},_createContentView:function(){this.MetabarContentView&&!this.views.content&&(this.views.content=new e.Views[this.MetabarContentView]({appendTo:this.$(".js-metabar"),answer:this.model}))},_createExploreByItems:function(){if(this.model.hasExploreByItemsEnabled&&this.model.exploreByItems&&this.model.exploreByItems.length>0){var t=0;this.views.exploreByItems&&(t=this.views.exploreByItems.currentScroll,this.views.exploreByItems.destroy(),delete this.views.exploreByItems),this.views.exploreByItems=new e.Views.ExploreByItems({answer:this.model,metabar:this,after:this.$primary,scrollTo:t}),this.$el.addClass("has-ebi")}},_shouldShowParams:function(){var e=this.model;return(e.parameters&&e.parameters.length||e.hasDynamicFilters)&&!e.canShowSidebarFilters},_updateLoadingState:function(){!this._isLoaded&&this.model.items.length&&(this.$loading.hide(),this.$primary.removeClass("is-loading"),this.$dropdowns.removeClass("is-loading"),this.$secondary.removeClass("is-loading"),this._isLoaded=!0)},_updateMode:function(){var t=this,i=t.model,s=i.expanded,a=t.$mode,o=e.device.isMobile,n=i.meta,r=t.exitModeIcon,d=function(){n.useExpandTextButton()?(a.removeClass("btn--icon"),a.addClass("metabar__grid-btn"),a.text(l("More "+t.model.name))):(a.addClass("btn--icon"),a.removeClass("metabar__grid-btn"),a.text(t.expandModeIcon))};n.hideModeSwitch||e.duckbar.tabIsActiveFullPage(t)?a.addClass("is-hidden"):o||s?(t._modeSwitchEnabled=!0,a.removeClass("is-disabled"),a.removeClass("btn--icon"),a.addClass("metabar__grid-btn"),a.text(r),a.attr("title",l("Click to collapse"))):i.canExpand?(t._modeSwitchEnabled=!0,a.removeClass("is-disabled"),d(),a.attr("title",l("Click to expand"))):(t._modeSwitchEnabled=!1,a.addClass("is-disabled"),d(),a.attr("title",l("Grid mode disabled for this answer")))},_resetStuck:function(){DDG.removeClass(this.id,this.$el,"is-stuck"),this.emit("stuck",!1),this._floatingBelowHeader&&(this._floatingBelowHeader=!1)},_onScroll:function(){if(!Modernizr.touch&&!e.device.isMobile&&this.parent&&this.model.active&&!this.notFixed){var t=DDG.hasClass(this.id,"is-stuck"),i=DDG.hasClass(this.id,"at-bottom");if(!this.model.expanded)return t&&(DDG.removeClass(this.id,this.$el,"is-stuck"),this.emit("stuck",!1)),void(i&&DDG.removeClass(this.id,this.$el,"at-bottom"));var s=e.device.scrollTop(),a=0,o=this.parent.getHeight()-44,n=DDG.get_header_height();a+=DDG.isHeaderFixed?0:n,this.model.hasExploreByItemsEnabled&&this.model.exploreByItems&&this.model.exploreByItems.length>0&&(a-=16),o+=a,this._floatingBelowHeader&&(a-=n),s>a&&!t?(DDG.addClass(this.id,this.$el,"is-stuck"),this.emit("stuck",!0)):s<=a&&t&&this._resetStuck(),!i&&s>o?DDG.addClass(this.id,this.$el,"at-bottom"):i&&s0),e.pixel.fire("iafi",this.model.pixelName?this.model.pixelName:this.model.key,{fv:this.model.selected.id.toLowerCase()}),this.answer.engaged(),this.answer.requery()}})}(DDG),function(e){var t=e.Views.Base,i=e.Views.AnswerBar.Meta,s={Price:!0,Color:!0,Size:!0};i.SidebarFilter=function(e){e=e||{},this.answer=e.answer,this._canHaveHiddenOptions(e)&&(this.lastSelected=e.lastSelected=this._getLastSelected(e.model.values),e.hasHiddenOptions=this._getHasHiddenOptions(e),e.numHiddenOptions=this._getNumHiddenOptions(e),e.hasOneHiddenOption=1===e.numHiddenOptions),t.call(this,e),this._cacheElems(".js-sidebar-filters",["options","show-more"]),this._createOptions(),this.bindEvents([[this.$showmore,"click",this._onShowMoreClick]])},i.SidebarFilter.prototype=$.extend({},t.prototype,{template:"sidebar_filter",_createOptions:function(){this.views.options=[];for(var e=1;e5&&e>t},_getNumHiddenOptions:function(e){return e.model.values.length-(e.lastSelected>5?e.lastSelected:5)-1},_getHasHiddenOptions:function(e){return this._canHaveHiddenOptions(e)&&this._optionIsHidden(e.model.values.length-1,e.lastSelected)},_canHaveHiddenOptions:function(e){return!s[e.model.type]},_onShowMoreClick:function(e){this.$options.find(".sidebar-filter__option").removeClass("is-hidden"),this.$(e.target).addClass("is-hidden")}})}(DDG),function(e){var t=e.Views.Base,i=e.Views.AnswerBar.Meta,s={black:"#222222",white:"#ffffff",red:"#ff0000",brown:"#996633",blue:"#00278e",gray:"#c4c4c4",green:"#5b9e4d",orange:"#de5833",yellow:"#ffc649",pink:"#efa4b2",purple:"#933393"};i.SidebarFilterOption=function(e){if((e=e||{}).model&&"Color"===e.model.type){var i=e.optionName.toLowerCase();e.isColor=!0,e.presetColor=!!s[i]&&i,e.color=s[i]||i,e.hideText=!0}e.model&&"Size"===e.model.type&&(e.isSize=!0,e.hideIcon=!0),e.model&&"Price"===e.model.type&&(e.isRadio=!0),this.answer=e.answer,t.call(this,e),this.bindEvents([[this.$el,"click",this._onItemClick]])},i.SidebarFilterOption.prototype=$.extend({},t.prototype,{template:"sidebar_filter_option",_onItemClick:function(t){var i=$(t.currentTarget),s=i.data("id"),a=this.model.selectedId===s,o=$.isArray(this.model.selectedId)&&-1!==this.model.selectedId.indexOf(s),n=a||o,l=i.find("input");this.model.singleChoice&&n||(l.length>0?l.prop("checked",!n):i.toggleClass("is-selected",!n),this.answer.sources.selected.requeryURL=s,e.pixel.fire("iafi",this.model.pixelName),this.answer.engaged(),this.answer.requery())}})}(DDG),function(e){var t=e.Views.Base,i=e.Views.AnswerBar;i.InfoBox=function(i){t.call(this,i),this.$tile=this.$(".js-infobox-tile"),this.$expand=this.$(".js-tile-expand"),this.$lastInfo=this.$(".info:last"),this.model.expanded&&this._expand(),this.bindEvents([[this.model,"change:expanded",this._onAnswerExpandedChanged],[this.model,"change:active",this._onAnswerActiveChanged],[this.$expand,"click",this._onExpandClick],["a","click",function(){e.pixel.fire("ibc")}],[e.device,"resize",this._onResize]])},i.InfoBox.prototype=$.extend({},t.prototype,{template:"infobox",_expand:function(){this._canExpand()&&this.$tile.addClass("is-open")},_collapse:function(){this._canExpand()&&this.$tile.removeClass("is-open")},_canExpand:function(){if(!this.$lastInfo||"boolean"==typeof this._isExpandable)return this._isExpandable;if(this.model.expanded)return this._isExpandable=!0;var e=this.$lastInfo.position().top+this.$lastInfo.outerHeight(!0),t=this.$tile.outerHeight();return this._isExpandable=e>t},_showHideExpandLink:function(){this._canExpand()?this.$expand.removeClass("is-hidden"):this.$expand.addClass("is-hidden")},_onExpandClick:function(){this.model.set("expanded",!this.model.expanded),this.model.engaged(),this.model.fire("iasm")},_onResize:function(){delete this._isExpandable,this._showHideExpandLink()},_onAnswerActiveChanged:function(){this.model.active&&(delete this._isExpandable,this._showHideExpandLink())},_onAnswerExpandedChanged:function(){this.model.expanded?this._expand():this._collapse()}})}(DDG),function(e){var t=e.Views.ClickableItem,i="is-hidden";e.Views.AnswerBar.Tile=function(i){this.answer=i.answer,this.noDetail=i.noDetail,t.call(this,i),this.bindEvents([[this.model,"change:visible",this._updateVisible],[this.model,"change:partiallyVisible",this._updateVisible],[this.model,"change:selected",this._onSelectedChanged],[this.model,"change:highlighted",this._onHighlightedChanged],[this.answer,"change:active",this._onAnswerActiveChanged],[this.answer,"change:expanded",this._onAnswerExpandedChanged],[e.device,"resize",this._onResize]]);var s=this.answer.meta.rerender;s&&this.bindEvents(s.map(function(e){return[this.model,"change:"+e,this._rerender]}.bind(this)))},e.Views.AnswerBar.Tile.prototype=$.extend({},t.prototype,{show:function(){this.$el.removeClass(i)},hide:function(){this.$el.addClass(i)},getMargins:function(){return{x:parseFloat(this.$el.css("margin-left"),10),top:parseFloat(this.$el.css("margin-top"),10),bottom:this._tileMarginBottom()||8}},_render:function(){this.template=this.model.getItemTemplate(),t.prototype._render.call(this,this.model.toTemplateObject()),e.ImageLoader.registerAll(this.$(".js-lazyload"),this.model.id),e.ImageLoader.registerAll(this.$(".js-lazysvg"),this.model.id,{svg:!0}),this.$ellipsis=this.$(".js-ellipsis");var i=this.$("a");i.length&&i.on("touchstart touchend",(function(e){e.stopPropagation()})),!1===this.answer.meta.itemsHighlight||e.device.isIDevice||(this.$el.on("mouseenter",this._onMouseEnter.bind(this)),this.$el.on("mouseleave",this._onMouseLeave.bind(this))),this._updateEllipsis({force:!0})},_updateEllipsis:function(t){(t=t||{}).force&&(this._hasBeenEllipsized=!1),!this._hasBeenEllipsized&&this.answer.active&&this.model.visible&&this.$ellipsis.length&&!e.device.isMobile&&(this.$ellipsis.ellipsis({id:this.model.id}),this._hasBeenEllipsized=!0)},_updateVisible:function(){(this.model.visible||this.model.partiallyVisible)&&(e.ImageLoader.trigger(this.model.id),this._updateEllipsis())},_updateMargin:function(){if(!e.device.isMobile){var t=this._tileMarginBottom()||8;if(!this.noDetail&&this.model.canShowItemDetail()&&this.answer.expanded&&this.model.selected){var i=this.answer.items[this.answer.items.length-1].gridRow;t=i&&i===this.model.gridRow?(this._tileMarginBottom()+9||t)-1:2*(e.getProperty(this,"answer.detailScrollOffset")||t),t+=this.answer.getDetailHeight()}t+="px",this._marginBottom!==t&&(this._marginBottom=t,this.$el.css({marginBottom:t}))}},_tileMarginBottom:function(){return e.getProperty(this,"answer.tileMarginBottom")},_rerender:function(){t.prototype._rerender.call(this),this._onHighlightedChanged(),this._onSelectedChanged()},_onHighlightedChanged:function(){this.$el.toggleClass("highlight",!!this.model.highlighted)},_onSelectedChanged:function(){this.model.selected&&e.history.set({iai:this.answer.getQuerystringItemId(this.model)}),this.$el.toggleClass("is-selected",!!this.model.selected),this._updateMargin()},_onAnswerActiveChanged:function(){this._updateEllipsis()},_onAnswerExpandedChanged:function(){this._updateMargin(),this._updateEllipsis({force:!0})},_onClick:function(e,i){return"images"!==this.answer.id&&"videos"!==this.answer.id||this.answer.set("expanded",1),"products"===this.answer.id&&this.answer.bing&&(i=1,this.answer.clickedExternalLink({},e)),"products"===this.answer.id&&this.answer.bing&&this.answer.clickedExternalLink({},e),this.answer.fire("iatc"),this.model.selected?(this.answer.engaged(),this.model.unselect()):!this.noDetail&&this.model.canShowItemDetail()?(e.preventDefault(),this.answer.engaged(),this.model.select()):t.prototype._onClick.call(this,e,i)},_onMouseEnter:function(t){e.keyboard.active||this.model.highlight()},_onMouseLeave:function(e){this.model.unhighlight()},_onResize:function(e){this._updateEllipsis({force:!0}),this._updateMargin()},_onExternalLinkClick:function(i){if(this.answer.fire("iatc"),"videos"!==this.answer.id||"1"!==e.settings.get("k5"))return t.prototype._onExternalLinkClick.call(this,i)}})}(DDG),function(e){var t,i=e.Views.AnswerBar.Tile,s="is-loading",a="is-paused",o="is-unavailable",n=0;e.Views.AnswerBar.AudioTile=function(t){i.call(this,t),this.bindEvents([[e.keyboard,"space."+this.answer.id,this._onSpace]])},e.Views.AnswerBar.AudioTile.prototype=$.extend({},i.prototype,{play:function(){n?this.showError("Playback Unavailable"):(this.$el.addClass(s),this.$action||(this.$action=this.$(".audio-controls__action"),this.$time=this.$(".audio-controls__time"),this.$progress=this.$(".audio-controls__progress"),this.$loadProgress=this.$(".audio-controls__progress-loading"),this.$loadProgressFill=this.$(".audio-controls__progress-loading .rotated-fill"),this.$playProgress=this.$(".audio-controls__progress-playback"),this.$playProgressFill=this.$(".audio-controls__progress-playback .rotated-fill")),t?(this.$el.removeClass(a),this.$action.text("║"),this.isPlaying=1,this.hasStartedPlaying=0,this.sound?(t.play(this.model.id),this._onLoadProgress()):this.sound=t.play(this.model.id,this.model.streamURL,{autoPlay:!0,whileloading:this._onLoadProgress.bind(this),whileplaying:this._onPlayProgress.bind(this),onload:this._onLoadFinished.bind(this),onfinish:this._onPlayFinished.bind(this)})):e.require("audio",function(i){if((t=i)&&t.ready){if(e.device.isIDevice||e.device.isAndroid)return void this.$el.removeClass(s)}else n=1;this.play()}.bind(this)))},pause:function(){t&&t.ready&&(t.pause(this.model.id),this.$el.removeClass(s),this.$el.addClass(a),this.$action.text("►"),this.isPlaying=0)},stop:function(){t&&t.ready&&(t.stop(this.model.id),this.$el.removeClass(s),this.$el.removeClass(a),this.$action.text("►"),this.$el.hasClass(o)||this.$time.text(""),this.$loadProgress.removeClass("gt50"),this.$playProgress.removeClass("gt50"),l(this.$loadProgressFill,0),l(this.$playProgressFill,0),this.isPlaying=0)},showError:function(e){this.$time.text(e),this.$el.addClass(o)},_onSelectedChanged:function(){!1!==this.answer.meta.autoplay||this._userSelected?(i.prototype._onSelectedChanged.call(this),this.model.selected?this.play():this.stop()):this.model.selected&&this.model.unselect()},_onClick:function(e){this._userSelected=!0,e.preventDefault(),this.answer.fire("iatc"),this.model.selected?this.isPlaying?this.pause():this.play():this.model.select()},_onSpace:function(e){this._userSelected=!0,this.model.selected&&(this.isPlaying?(e.preventDefault(),this.pause()):this.answer.active&&(e.preventDefault(),this.play()))},_onLoadProgress:function(){var e=this.sound.bytesLoaded/this.sound.bytesTotal*100;if(e>50)return this.$loadProgress.addClass("gt50"),l(this.$loadProgressFill,100);l(this.$loadProgressFill,e)},_onLoadFinished:function(e){e||(this.showError("Stream Unavailable"),t.stop(),this.answer.autoplaying&&this.answer.selectNextItem())},_onPlayProgress:function(){if(this.sound&&this.model.duration){this.hasStartedPlaying||(this.$el.removeClass(s),this.hasStartedPlaying=1);var e=this.model.duration-this.sound.position,t=this.sound.position/this.model.duration*100;this.$time.text("-"+DDG.formatDuration(e)),t>50&&this.$playProgress.addClass("gt50"),l(this.$playProgressFill,t)}},_onPlayFinished:function(){this.stop(),!1!==this.answer.meta.autoplay&&(this.answer.autoplaying=1,this.answer.selectNextItem())}});var l=function(e,t){var i=3.6*t+"deg";e.css({"-moz-transform":"rotate("+i+")","-webkit-transform":"rotate("+i+")","-o-transform":"rotate("+i+")",transform:"rotate("+i+")"})}}(DDG),function(e){var t=e.Views.Base,i="can-expand",s="has-chomp-expanded";e.Views.AnswerBar.Detail=function(i){this.answer=i.answer,this.template=i.template,this.canExpand=i.canExpand,this.canWrap=i.canWrap,this.hasInfobox=i.hasInfobox,t.call(this,i),this.canExpand&&this.bindEvents([[this.answer,"change:expanded",this._updateExpandableContent],[this.answer,"change:active",this._updateExpandableContent],[e.device,"resize",this._updateExpandableContent]]);var s=this.answer.meta.rerender;s&&this.bindEvents(s.map(function(e){return[this.model,"change:"+e,this._rerender]}.bind(this)))},e.Views.AnswerBar.Detail.prototype=$.extend({},t.prototype,{_render:function(i){var s=this.model.toTemplateObject(),a=$.extend({},s,i),o=this.model.templates.wrap_detail,n=this.template;this.canWrap&&o&&(a={content:e.exec_template(n,s)},this.template=o),t.prototype._render.call(this,a),this.template=n;var l=this.$(".js-sized-img");l.length&&l.on("load error",(function(){$(this).css({height:"auto",width:"auto"})}));var r=this.$("img");if(r.length&&r.error((function(){$(this).hide()})),this.canExpand&&(this.$expandContent=this.$(".js-ellipsis,.js-chomp"),this.$expandContent.length)){this.expandContent=this.$expandContent.html(),this.expandUseEllipsis=this.$(".js-ellipsis").length,this.$expandLink=this.$(".js-chomp-link"),this._updateExpandableContent(),this.$expandLink.length&&this.$expandLink.on("click",function(){this.answer.set("expanded",!this.answer.expanded),this.answer.fire("iasm")}.bind(this));var d=this.$(".js-detail-img");d.length&&!d.width()&&d.load(function(){this._updateExpandableContent()}.bind(this))}},_updateExpandableContent:function(){if(this.answer.active&&this.expandContent){var t;if(this.$expandContent.html(this.expandContent),this._hasCode(),this.answer.expanded)(is_mobile||this.$expandContent.outerHeight()-1,this.isProgramming=this.model.meta.topic.indexOf("programming")>-1,this.isStackExchange=this.model.id.indexOf("stackexchange")>-1,(this.isReference||this.isProgramming||this.isStackExchange)&&this.$el.addClass("has-code"))},_highlightSyntaxCheck:function(){if(this.isReference||this.isProgramming){var e=this.$el.find("pre");e.length&&DDG.require("prettify",(function(){e.addClass("prettyprint"),window.prettyPrint()}))}},_getEllipsisOptions:function(){var e={firstParagraph:!0};return this.$el.find("code").length&&(e.maxHeight=200),"lyrics"===this.model.parentId&&(e.maxHeight=150),e},_onExternalLinkClick:function(e){this.answer.clickedExternalLink(),t.prototype._onExternalLinkClick.call(this,e)}})}(DDG),function(e){var t=e.Views.AnswerBar.Detail;e.Views.AnswerBar.ImageDetail=function(i){this.parentPadding=i.parentPadding,t.call(this,i),this.bindEvents([[this.model,"change:selected",this._onSelectedChanged],[e.device,"resize",this._onResize]])},e.Views.AnswerBar.ImageDetail.prototype=$.extend({},t.prototype,{_zoom:1,_panX:0,_panY:0,setZoom:function(e,t){this._zoom=e,this._updateTransform(t)},setPan:function(e,t,i){this._panX=e/this._zoom,this._panY=t/this._zoom,this._updateTransform(i)},getPanDimensions:function(){return{width:this._width*this._zoom,height:this._height*this._zoom}},_reportImage:function(t){t.preventDefault(),this.views.modal||(this.views.modal=new e.Views.ReportImageModal({thumbnail:this.model.thumbnail,image:this.model.image})),this.views.modal.show()},_render:function(){t.prototype._render.call(this,{detail:this._getDimensions(),isMobile:e.device.isMobile,linkImage:!e.device.isMobile}),this.$imgWrapper=this.$(".js-image-detail-wrapper"),this.$transBg=this.$(".js-detail-image-bg"),this.model.selected&&this._onSelectedChanged(),this._cacheElems(".js-image-report",["link"]),this.bindEvents([[this.$link,"click",this._reportImage]])},_getDimensions:function(){var t=e.device,i=t.isMobile,s=i?t.width:.55*t.width,a=i?t.height:this.answer.getDetailHeight()-2*this.parentPadding,o=this.model,n=Math.min(o.width,s),l=n/o.width*o.height;return l>a&&(n=(l=a)/o.height*o.width),this._width=n,this._height=l,{width:n+"px",height:l+"px",transBgWidth:Math.floor(n-1)+"px",transBgHeight:Math.floor(l-1)+"px"}},_loadHighRes:function(){if(!this.$highRes){this.model.imageProxyOps.token=this.model.image_token;var t=e.getImageProxyURL(this.model.image_mobile||this.model.image,$.extend({noFallback:!0},this.model.imageProxyOps));this.$highRes=this.$(".js-detail-img-high"),this.$highRes.attr("src",t).css({display:"block"}).on("load",this._onHighResLoaded.bind(this))}},_animateTransform:function(){if(!$.Velocity)return this._updateTransform();this.$imgWrapper.velocity("stop").velocity({scale:this._zoom,translateX:this._panX,translateY:this._panY},{easing:"ease-out",duration:e.animation_speed})},_updateTransform:function(e){if(e)return this._animateTransform();if($.Velocity)this.$imgWrapper.velocity("stop"),this._zoom&&$.Velocity.hook(this.$imgWrapper,"scale",this._zoom),this._panX&&$.Velocity.hook(this.$imgWrapper,"translateX",this._panX+"px"),this._panY&&$.Velocity.hook(this.$imgWrapper,"translateY",this._panY+"px");else{var t="";this._zoom&&(t+="scale("+this._zoom+") "),(this._panX||this._panY)&&(t+="translate("+(this._panX||0)+"px,"+(this._panY||0)+"px) "),this.$imgWrapper.css({transform:t,"-webkit-transform":t,"-moz-transform":t,"-ms-transform":t,"-o-transform":t})}},_onSelectedChanged:function(){this.model.selected?this._loadHighResTimeout=setTimeout(this._loadHighRes.bind(this),e.device.isMobileDevice?500:0):clearTimeout(this._loadHighResTimeout)},_onResize:function(){this.$imgs||(this.$imgs=this.$(".js-detail-img"));var e=this._getDimensions();this.$imgs.css({height:e.height,width:e.width}),this.$transBg.css({width:e.transBgWidth,height:e.transBgHeight})},_onHighResLoaded:function(){this.$(".js-detail-img-thumb").fadeOut()}})}(DDG),function(e){var t=e.Views.AnswerBar.Detail;e.Views.AnswerBar.VideoDetail=function(i){this.parentPadding=i.parentPadding,t.call(this,i),this.bindEvents([[this.model,"change:selected",this._updateContent],[e.settings,"change:k5",this._updateContent],[e.device,"resize",this._onResize]])},e.Views.AnswerBar.VideoDetail.prototype=$.extend({},t.prototype,{template:"videos_detail",destroy:function(){clearTimeout(this._embedTimeout),t.prototype.destroy.call(this)},_render:function(){t.prototype._render.call(this),this.$videoWrap=this.$(".js-video"),this.$video=this.$(".js-video-media"),this._updateSize(),this._updateContent()},_renderEmbed:function(){if(this.model.selected){var e=DDG.exec_template(DDG.templates.videos_detail_embed,this.model);this.$video.empty().append(e)}},_renderPrivacy:function(){this.views&&!this.views.privacy&&(this.views.privacy=new e.Views.AnswerBar.VideoDetailOverlay({model:this.model,appendTo:this.$video}))},_shouldShowPrivacy:function(){return this.model.isBing?e.settings.isDefault("k5")||!this.model.embedURL:!e.device.isMobile&&this.model.selected&&e.settings.isDefault("k5")},_shouldShowEmbed:function(){return this.model.selected&&this.model.isEmbeddable()&&1==e.settings.get("k5")},_updateSize:function(){var t=e.device,i=t.widthBreakpoint(),s=t.gutterSize(),a=s?s+110:2*this.parentPadding,o=s?2*this.parentPadding:2*this.parentPadding+76,n=t.width-a,l=t.isMobileLandscape()||"m"!==i&&"s"!==i&&"xs"!==i?.75*n:n,r=this.answer.getDetailHeight()-o,d=16/9,c=l,h=l/d;h>r&&(c=(h=r)*d),this.$videoWrap.css({width:c+"px"}),this.$video.css({height:h+"px",width:c+"px"})},_updateContent:function(){this._shouldShowPrivacy()?this._renderPrivacy():this._shouldShowEmbed()?e.device.isMobile?this._embedTimeout=setTimeout(this._renderEmbed.bind(this),e.animation_speed+100):this._renderEmbed():this.$video.empty()},_onResize:function(){this._updateSize()}})}(DDG),function(e){var t=e.Views.Base;e.Views.AnswerBar.VideoDetailOverlay=function(e){t.call(this,e)},e.Views.AnswerBar.VideoDetailOverlay.prototype=$.extend({},t.prototype,{template:"videos_detail_privacy",shouldShow:function(){return DDG.settings.isDefault("k5")},_render:function(){t.prototype._render.call(this,this.model),this._cacheElems(".js-video-privacy",["watch","leave","remember","remember-label"]),this.bindEvents([[this.$watch,"click",this._onWatchClick],[this.$leave,"click",this._onLeaveClick],[this.$remember,"touchstart",this._onRememberTouchStart],[this.$rememberlabel,"touchstart",this._onRememberTouchStart]])},_shouldRemember:function(){return this.$remember[0].checked},_updateSetting:function(e){var t=this._shouldRemember();DDG.settings.set("k5",e,{saveToCloud:t,saveToCookie:t})},_onWatchClick:function(e){e.preventDefault(),this._updateSetting("1"),this.destroy()},_onLeaveClick:function(e){e.preventDefault(),this.model.isEmbeddable()&&(this._updateSetting("2"),this.destroy()),nug(this.model.url)},_onRememberTouchStart:function(e){e.stopPropagation()}})}(DDG),function(e){var t=e.Views.Base,i="is-hidden",s="has-open-detail",a="can-scroll",o={images_detail:"ImageDetail",videos_detail:"VideoDetail"},n={images_detail:1,videos_detail:1};e.Views.AnswerBar.DetailSlider=function(i){t.call(this,i),this.bindEvents([[this.model,"change:active",this._onActiveChanged],[this.model,"change:selectedItem",this._onSelectedItemChanged],[e.device,"resize",this._onResize]])},e.Views.AnswerBar.DetailSlider.prototype=$.extend({},t.prototype,{template:"detail_slider",_zoom:1,_panX:0,_panY:0,_focused:!1,destroy:function(){this._hide(),t.prototype.destroy.call(this)},position:function(t){e.device.isMobile||this._top!==t&&(this._top=t,this.$el.css({top:t}))},_show:function(){this._isShowing||(this.$el.removeClass(i),this._updateSelectedItem(),e.$html.addClass(s),e.device.isMobile&&this._focus(),this._isShowing=1)},_hide:function(){this._isShowing&&(this.$el.addClass(i),e.$html.removeClass(s),this.gestures.reset(),this.destroyChildViews(),this.views={},this._isShowing=0)},_focus:function(){this.$el.addClass("has-focus"),this._focused=1},_unfocus:function(){this.$el.removeClass("has-focus"),this._focused=0},_render:function(){var i=$.extend({},this.model),s=e.device.isMobile;s||(i.detailHeight=this.model.getDetailHeight()+"px"),s&&!Modernizr.touch&&(i.mobileAndNoTouch=1),t.prototype._render.call(this,i);var a=this.model.meta.detailOverlay;if(s&&a&&(this.overlayClass=e.Views.AnswerBar[a]),this.model.items.length){var o=this.model.items[0].getItemDetailTemplate();n[o]&&this.$el.addClass("detail--xd")}this._cacheElems(".js-detail",["panes","close","next","prev"]),this.gestures=new e.Utils.GestureRecognizer({el:this.$el}),this.gestures.on("tap",this._onTap.bind(this)),this.gestures.on("double-tap",this._onDoubleTap.bind(this)),this.gestures.on("swipe",this._onSwipe.bind(this)),this.gestures.on("panmove",this._onPanMove.bind(this)),this.gestures.on("panend",this._onPanEnd.bind(this)),this.gestures.on("pinchmove",this._onPinchMove.bind(this)),this.gestures.on("pinchend",this._onPinchEnd.bind(this)),this.bindEvents([[this.$close,"click",this._onCloseClick],[this.$next,"click",this._onNextClick],[this.$prev,"click",this._onPrevClick]]),this.model.selectedItem&&this._show()},_createPane:function(t,i){if(t){var s=t.getItemDetailTemplate(),a=o[s]||"Detail";return new e.Views.AnswerBar.DetailSliderPane({answer:this.model,model:t,pos:i,detailView:a,appendTo:this.$panes})}},_swipeToItem:function(e,t){this._swipeVelocity=t,"prev"===e?this.model.selectPrevItem():this.model.selectNextItem()},_setZoom:function(e,t){this._zoom=e,this._zoom<=1&&this._setPan(0,0),this.views.cur&&this.views.cur.setZoom(e,t)},_setPan:function(t,i,s){if(this._zoom<1?(this._panX=0,this._panY=0):(this._panX=t,this._panY=i),this.views.cur&&this._zoom>1&&s){var a=this.views.cur.getPanDimensions();if(a){var o=Math.abs(a.width-e.device.width)/2,n=Math.abs(a.height-e.device.height)/2;this._panX-o>0?this._panX=o:this._panX+o<0&&(this._panX=-1*o),this._panY-n>0?this._panY=n:this._panY+n<0&&(this._panY=-1*n)}}this.views.cur&&this.views.cur.setPan(this._panX,this._panY,s)},_updateDOM:function(){var e=this.views,t=this._swipeVelocity;e.prev&&e.prev.resetPosition(-1,t),e.cur&&e.cur.resetPosition(0,t),e.next&&e.next.resetPosition(1,t),delete this._swipeVelocity,this.$prev.toggleClass(a,!!e.prev),this.$next.toggleClass(a,!!e.next&&!e.next.model.hidden)},_updateSelectedItem:function(){this.views.prev&&this.views.prev.model===this.model.selectedItem?(this.views.next&&this.views.next.destroy(),this.views.next=this.views.cur,this.views.cur=this.views.prev,this.views.prev=this._createPane(this.model.getPrevItem(),-1)):this.views.next&&this.views.next.model===this.model.selectedItem?(this.views.prev&&this.views.prev.destroy(),this.views.prev=this.views.cur,this.views.cur=this.views.next,this.views.next=this._createPane(this.model.getNextItem(),1)):(this.destroyChildViews(),this.views={prev:this._createPane(this.model.getPrevItem(),-1),cur:this._createPane(this.model.selectedItem),next:this._createPane(this.model.getNextItem(),1)}),this._updateDOM(),this.overlayClass&&this.overlayClass.prototype.shouldShow()&&(this.views.overlay&&this.views.overlay.destroy(),this.views.overlay=new this.overlayClass({model:this.model.selectedItem,appendTo:this.$el})),e.device.isMobile&&this.model.indexOfSelectedItem()>=this.model.items.length-1&&this.model.loadMore(),this._setZoom(1,!0),this._setPan(0,0)},_clearVerticalPan:function(){this.$el.removeClass("is-closing"),this._setPan(0,0,!0),this._focus()},_onPanMove:function(e){if(this._zoom>1){var t=this._panX+e.deltaX,i=this._panY+e.deltaY;this._setPan(t,i)}else"x"===e.axis?("x"!==this._panAxis&&("y"===this._panAxis&&this._clearVerticalPan(),this._panAxis="x"),this._prevDirection&&this._prevDirection!==e.direction?this._updateDOM():(this.views.prev&&this.views.prev.translateX(e.distX),this.views.next&&this.views.next.translateX(e.distX),this.views.cur&&this.views.cur.translateX(e.distX)),this._prevDirection=e.direction):"y"===e.axis&&("y"!==this._panAxis&&(this.$el.addClass("is-closing"),this._panAxis="y",this._unfocus(),this._updateDOM()),this._setPan(0,this._panY+e.deltaY))},_onPanEnd:function(t){if("y"===this._panAxis&&this._clearVerticalPan(),delete this._panAxis,delete this._prevDirection,this._zoom<=1&&!t.multitouch&&!t.swiped&&this._updateDOM(),this._zoom>1&&(Math.abs(t.velocityX)>.1||Math.abs(t.velocityY)>.1)){var i=this._panX+t.velocityX*e.animation_speed,s=this._panY+t.velocityY*e.animation_speed;this._setPan(i,s,!0)}},_onPinchMove:function(e){this._setZoom(e.pinchDelta*this._zoom)},_onPinchEnd:function(){this._zoom<1&&this._setZoom(1,!0)},_onTap:function(e){var t=e.e;this._updateDOM(),this._zoom>1||(this._focused?t.target&&"A"===t.target.nodeName||this._unfocus():(t.preventDefault(),t.stopPropagation(),this._focus()))},_onDoubleTap:function(e){this._zoom>1?(this._setZoom(1,!0),this._focus()):(this._setZoom(2,!0),this._unfocus())},_onSwipe:function(e){this._zoom>1||("x"===this._panAxis&&"x"===e.axis?"right"===e.direction&&this.model.getPrevItem()?this._swipeToItem("prev",e.velocityX):"left"===e.direction&&this.model.getNextItem()?this._swipeToItem("next",e.velocityX):this._updateDOM():"y"===this._panAxis&&"y"===e.axis&&this._closePane())},_onCloseClick:function(e){e.stopPropagation(),e.preventDefault(),this._closePane()},_onNextClick:function(){this.model.selectNextItem()},_onPrevClick:function(){this.model.selectPrevItem()},_onActiveChanged:function(){this.model.active?this.model.selectedItem&&this._show():this._hide()},_onSelectedItemChanged:function(){this.model.selectedItem?(this._updateSelectedItem(),this._show()):this._hide()},_onResize:function(){e.device.isMobile||this.$el.css({height:this.model.getDetailHeight()+"px"})},_closePane:function(){this.model.selectedItem&&this.model.selectedItem.unselect(),e.device.isMobile&&this.model.allowModuleIA&&this.model.openedFromModule&&(e.duckbar.open("web",{skipPixel:!0}),this.model.set("openedFromModule",!1))}})}(DDG),function(e){var t=e.Views.Base;e.Views.AnswerBar.DetailSliderPane=function(i){this.answer=i.answer,this._pos=i.pos,this.detailView=i.detailView,t.call(this,i),this.bindEvents([[this.answer,"change:expanded",this._onExpandedChanged],[e.device,"resize",this._onResize]])},e.Views.AnswerBar.DetailSliderPane.prototype=$.extend({},t.prototype,{template:"detail_slider_pane",resetPosition:function(t,i){(this._pos!==t||this._translateX)&&(this._prevX=this._getLeft(),this._translateX=0,this._pos=t,e.device.isMobile&&$.Velocity?this._transitionPosition(i):this._updatePosition())},translateX:function(e){this._translateX!==e&&(this._prevX=this._getLeft(),this._translateX=e,this._updatePosition())},setZoom:function(e,t){this.views.detail&&this.views.detail.setZoom&&this.views.detail.setZoom(e,t)},setPan:function(e,t,i){this.views.detail&&this.views.detail.setPan&&this.views.detail.setPan(e,t,i)},getPanDimensions:function(){if(this.views.detail&&this.views.detail.getPanDimensions)return this.views.detail.getPanDimensions()},_render:function(){t.prototype._render.call(this,this._getMeasurements());var i=this.model.getItemDetailTemplate();this.views.detail=new e.Views.AnswerBar[this.detailView]({model:this.model,answer:this.answer,template:i,parentPadding:16,appendTo:this.$el}),this._prevX=this._getLeft(),this._updatePosition(),this.$el.css({display:"block"}),$.Velocity||e.require("velocity",function(){this._updatePosition()}.bind(this))},_updateDOM:function(){this.$el.css(this._getMeasurements())},_updatePosition:function(){var e=this._getLeft();if($.Velocity)this.$el.velocity("stop"),$.Velocity.hook(this.$el,"translateX",e+"px");else{var t="translateX("+e+"px)";this.$el.css({transform:t,"-webkit-transform":t,"-moz-transform":t,"-ms-transform":t,"-o-transform":t})}},_transitionPosition:function(t){t=t||1;var i=this._getLeft(),s=this._prevX,a=i-s,o=t?Math.abs(a)/(100*t)*100:e.animation_speed;o=Math.max(Math.min(o,500),200),this.$el.velocity("stop").velocity({translateX:[i,s]},{easing:"ease-out",duration:Math.round(o)})},_getLeft:function(){var t=(this._pos||0)*e.device.width;return this._translateX&&(t+=this._translateX),t},_getMeasurements:function(){var t=e.device,i=t.isMobile,s=t.isMobilePortrait(),a=i?e.device.height:this.answer.getDetailHeight(),o=16,n=2*o,l=t.isMobile||this.answer.expanded?o:o+t.gutterSize(),r=s?n:o,d=a-r-o,c=e.device.width;return{lineHeight:d+"px",height:d+"px",width:(c-=o+l)+"px",padding:[r,o,o,l].join("px ")+"px"}},_onExpandedChanged:function(){this._updateDOM()},_onResize:function(){this._updateDOM(),this._updatePosition()}})}(DDG),function(e){var t=e.Views.Base,i=e.Views.AnswerBar.Answers,s="is-expanded";i.Base=function(i){this.views={items:[],itemsById:{}},i.id=i.model.id,t.call(this,i),this._deferShow=i.deferShow;var s=this.model;this.bindEvents([[e.device,"resize",this._onResize],[e.keyboard,"escape."+this.model.id,this._onEscape],[s,"change:active",this._onActiveChanged],[s,"change:expanded",this._onExpandedChanged],[s,"change:items",this._onItemsChanged],[s,"change:isRequerying",this._onRequeryingChanged]]),this.isValid()&&(s.active&&this.show(),s.expanded&&this._expand(),s.items.length&&this._updateItems())},i.Base.prototype=$.extend({},t.prototype,{template:"base",isValid:function(){if(this.requiredTemplates)for(var e=0;ethis.maxItems)},show:function(){this.$el.addClass("is-active"),e.keyboard.set("namespace",this.model.id),this.shouldExpandOnShow()&&this.model.set("expanded",1),this.model.expanded&&e.history.set({iax:this.model.nameId}),this._showingNoResults&&this._fireNoResultsPixel()},hide:function(){this.$el.removeClass("is-active"),e.keyboard.set("namespace")},getHeight:function(){return this._height?this._height:this.$el&&(this._height=this.$el.outerHeight())},getWidth:function(){return this._width?this._width:this.$el&&(this._width=this.$el.width())},showNoResults:function(t){this.model&&"products"===this.model.id&&this.model.bing?(this.views.noResults||(this.views.noResults=new e.Views.NoResults({vertical:this.model.pixelId,resultType:this.model.meta.itemType,appendTo:this.$jsTiles,skipPixel:!0,resetFilters:this.model.hasRequeried&&this.model.hasDynamicFilters})),this.views.noResults.show()):this.$noResults||(this.$noResults=e.$exec_template("no_ia_results",t),this.$el.append(this.$noResults),this.$noResults.show()),this._fireNoResultsPixel(),this._showingNoResults=1},hideNoResults:function(){this.$noResults.hide(),this._showingNoResults=0},shouldExpandOnShow:function(){var e=this.model.meta.autoExpand&&this.model.meta.autoExpandRows;return this._isQuerystringIAX()&&!e},calculateIAHeight:function(){var t=viewport_height-e.get_header_height(),i=viewport_height<800?1:.8;return Math.round(t*i)},_render:function(e){t.prototype._render.call(this,e),this.$el.click(function(){this.model.engaged()}.bind(this))},_updateItems:function(){},_expand:function(){this.$el.addClass(s),e.history.set({iax:this.model.nameId})},_collapse:function(){this.$el.removeClass(s),e.history.clear("iax")},_fireNoResultsPixel:function(){if(this.model.active){var t={};"products"===this.model.id&&this.model.hasRequeried&&(t.hruf=1),e.pixel.fire("iafd",this.model.pixelId,e.duckbar.activeTabOpenType,t)}},_isQuerystringIAX:function(){var t=e.history.get("iax"),i=1==t||0==t?e.history.get("ia"):t;return this.model.id===i||this.model.nameId===i},_onActiveChanged:function(){this.model.active&&!this._deferShow?this.show():this.hide()},_onExpandedChanged:function(){this.model.expanded?(this.model.isFullPage&&e.duckbar.setOrganicsVisibility(!1,this.model.id),this._expand()):this._collapse()},_onRequeryingChanged:function(e){if(this.$el.toggleClass("is-requerying",e),!e){for(var t=0;t=this.model.items.length-1&&this.model.loadMore()},selectPrevItem:function(){this.model.selectPrevItem()},getTileWidth:function(e){if(e.$el){var t=this.model.meta;if(t.variableTileWidth||t.itemsWidthVaries||t.itemsExpand)return e.$el.outerWidth()+2*this.getTileMargins().x;this.tileWidth||(this.tileWidth=e.$el.outerWidth()+2*this.getTileMargins().x)}return this.tileWidth},getSelectedTileWidth:function(){return this.model.selectedItem&&this.getTileWidth(this.views.itemsById[this.model.selectedItem.id])},getTileMargins:function(){return this._tileMargins?this._tileMargins:this.views.items.length?this._tileMargins=this.views.items[0].getMargins():{x:0,top:0,bottom:0}},getLoadMoreWidth:function(){return this._showingLoadMore?this.views.items.length&&this.getTileWidth(this.views.items[0]):0},_render:function(){i.prototype._render.call(this,{id:this.model.id,meta:this.model.meta,bing:"Bing"===this.model.meta.sourceName,isFullPage:this.model.isFullPage,canShowSidebarFilters:this.model.canShowSidebarFilters,hasFeedbackButton:this.model.hasFeedbackButton}),this.$tileview=this.$(".tileview"),this.$tileWrap=this.$(".tile-wrap"),this.$jsTiles=this.$(".js-tiles"),this.$jsTiles.on("mousewheel",this._onMouseWheel.bind(this)),window.addEventListener&&this.$jsTiles[0].addEventListener("wheel",this._onMouseWheel.bind(this)),this.$jsTiles.addClass("tileview__"+this.model.id),this.$jsTiles.bind("touchend",this._onJsTilesTouchEnd.bind(this)),this.$loadMore=e.$exec_template("tiles_load_more",{id:this.model.id,name:this.model.name}),this._onResize()},_createDetailSlider:function(){this.views.detail||this.noDetail||(this.views.detail=new e.Views.AnswerBar.DetailSlider({model:this.model,appendTo:this.$el}))},_updateVisibleItems:function(){var t,i,s,a=this._scrollLeft-e.device.gutterSize(),o=a+viewport_width,n=0,l={offscreenRight:[],offscreenLeft:[],visible:[]};for(t=0;i=this.views.items[t];t++){var r=n,d=n+i.width,c=0,h=0;ra&&(h=1)):d>o?(l.offscreenRight.push(i),ro?(p.visible=0,l.offscreenRight.push(p)):(p.visible=1,l.visible.push(p))}return l},_selectItemFromQuerystring:function(){var t,i=this.model,s=e.history.get("iai"),a=e.history.get("ia");i.active&&!i.selectedItem&&a===i.nameId&&void 0!==s&&(!(t=i.itemsById[s])&&$.isNumeric(s)&&(t=i.items[s]),t?(this._rowsToShow&&!t.visible&&this._loadMore(),t.select(),this._scrollToTile(this.views.itemsById[t.id],{animated:!1})):i.meta.next&&this._loadMore())},_selectItemFromMeta:function(){var e=this.model,t=e.meta;if(e.active&&!e.selectedItem&&!e.selectedItem&&t.selectedItem){var i=e.itemsById[t.selectedItem];i||(i=e.items[t.selectedItem]),i&&i.select(),this._scrollToTile(this.views.itemsById[i.id],{animated:!1})}},_updateScrollNav:function(){if(this.views.items.length&&this.model.active){this.$leftScrollNav||(this.$leftScrollNav=e.$exec_template("tiles_scroll_nav",{dir:"prev"}),this.$rightScrollNav=e.$exec_template("tiles_scroll_nav",{dir:"next"}),this.$jsTiles.prepend(this.$leftScrollNav),this.$jsTiles.prepend(this.$rightScrollNav),this.$leftScrollNav.bind("click",this._onLeftScrollClick.bind(this)),this.$rightScrollNav.bind("click",this._onRightScrollClick.bind(this)));var t=this._updateVisibleItems(),i=t.offscreenLeft.length,s=t.offscreenRight.length;this.$leftScrollNav.attr("data-items",i),this.$rightScrollNav.attr("data-items",s),this.$leftScrollNav.removeClass("can-scroll"),this.$rightScrollNav.removeClass("can-scroll"),i>0&&this.$leftScrollNav.addClass("can-scroll"),s>0&&this.$rightScrollNav.addClass("can-scroll"),this.model.active&&this.model.meta.next&&!this.model.expanded&&s<3&&this._loadMore(),this.emit("scrolled",t)}},_scrollHorizontal:function(t){var i,s=this._scrollLeft,a=e.device.gutterSize(),o=this._getTotalTileWidth(),n=viewport_width-a;i="right"===t?Math.min(s+n,o+a):Math.max(s-n,0);for(var l,r,d=0,c=0;r=this.views.items[c];c++)i>=d&&i<=d+r.width&&(l=r),d+=r.width;!l&&this._showingLoadMore&&this.$loadMore&&(l={$el:this.$loadMore}),this._scrollToTile(l)},_scrollToTile:function(t,i){if(t&&t.$el){for(var s,a=!i||void 0===i.animated||i.animated,o=this.model.meta,n=0,l=0,r=this._getTotalTileWidth()+e.device.gutterSize()+100-e.device.width;(s=this.views.items[l])&&s!==t;l++)n+=s.width;o.itemsExpand&&l>this._lastExpandedTileIndex&&(n-=this._lastExpandedTileDiff),n=Math.min(n,r),this._scrollLeft!==n&&(this._scrollLeft=n,a?(this._autoScrolling=!0,this.$jsTiles.stop().animate({scrollLeft:this._scrollLeft},e.animation_speed,function(){this._autoScrolling=!1}.bind(this))):this.$jsTiles.scrollLeft(this._scrollLeft),this._updateScrollNav())}},_updateDetailViewPosition:function(){var t=this.model.selectedItem;if(t&&!e.device.isMobile&&this.views.detail)if(this.model.expanded){var i=this.views.itemsById[t.id],s=parseInt(i.$el.position().top,10),a=this.getTileMargins(),o=s+parseInt(i.$el.outerHeight(),10)+a.bottom;this.views.metabar&&!this.views.metabar.isStuck()&&e.settings.get("ko").match(/^(d|s|-1)$/)&&(o+=this.views.metabar.getHeight()),this.views.detail.position(o+"px")}else this.views.detail.position("auto")},_updateWidths:function(){delete this.tileWidth;for(var e,t=0;e=this.views.items[t];t++)e.width=this.getTileWidth(e)},_getTotalTileWidth:function(){for(var e=0,t=0;tthis.$el.scrollTop()&&this._scrollToTile(this.views.items[0]),delete this._rowsToShow)}})}(DDG),function(e){var t=e.Views.AnswerBar.Answers,i=t.Tiles;t.GridTiles=function(e){var t=e.model;i.call(this,e),this.bindEvents([[t,"change:canExpand",this._onCanExpandChanged],[t,"change:selectedTopic",this._onSelectedTopicChanged],[t,"change:parameters",this._createSidebarFilters]]),this._cacheElems(".js-tileview",["sidebar-filters"]),this._createMetaBar(),this._createFeedbackButton()},t.GridTiles.prototype=$.extend({},i.prototype,{_updateItems:function(){i.prototype._updateItems.call(this),this._rowsToShow&&this._updateHiddenRows(),this.tilesContainerHeight=this._getTilesContainerHeight()},_appendItem:function(t){if(i.prototype._appendItem.call(this,t),e.device.isMobile){var s=this.views.items[this.views.items.length-1];this.bindEvents([[s,"rerender",this._updateHiddenRows]])}},shouldExpandOnShow:function(){var e=this.model.meta.autoExpand&&this.model.meta.autoExpandRows;return this.model.canExpand&&(this._isQuerystringIAX()||this.model.allowModuleIA)&&!e},_shouldScrollToTileOnItemSelect:function(){var t=this.model,i=t.selectedItem,s=e.device.isMobile,a=t.expanded&&!s;return this.model.openedFromModule?a||!i.visible&&!s:a||!i.visible},show:function(){this.model.expanded&&this._setIARequery(),i.prototype.show.call(this);var e=this.model,t=e.meta;!e.expanded&&e.canExpand&&t.autoExpand&&(this.model.set("expanded",1),t.autoExpandRows&&(this._rowsToShow=t.autoExpandRows,this._updateHiddenRows(),t.alwaysShowMetabar||this.views.metabar&&this.views.metabar.hide()),t.autoExpand=0),this.tilesContainerHeight=this._getTilesContainerHeight()},hide:function(){this._clearIARequery(),i.prototype.hide.call(this)},_updateVisibleItems:function(){var t,s,a,o={offscreenRight:[],offscreenLeft:[],visible:[]},n=this.views.items.length;if(n){if(this.model.expanded){if(e.device.isMobile&&this.model.meta.autoExpandRows&&!this.model.isRequery&&(this.model.meta.autoExpand||this._rowsToShow)&&(n="Images"===this.model.name?10*this.model.meta.autoExpandRows:5*this.model.meta.autoExpandRows),!this.model.openedFromModule||!e.device.isMobile)for(t=0;s=this.views.items[t];t++)tthis._rowsToShow?(a=1,e.hide()):e.show());a&&this.addLoadMore(),this.tilesContainerHeight=this._getTilesContainerHeight()}},_getGridTileAt:function(e,t){e=e||0,t=t||0;for(var i,s=0;i=this.views.items[s];s++){var a=i.$el.offset();if(a.left>=e&&a.top>=t)return i}return null},_scrollToSelectedTopic:function(){this.model.selectedTopic&&this._scrollToTile(this.views.itemsById[this.model.selectedTopic.items[0].id])},_onCanExpandChanged:function(){this.model.expanded&&!this.model.canExpand&&this.model.set("expanded")},_onMetabarStuckChanged:function(){this.model.expanded&&!e.device.isMobile&&this._updateDetailViewPosition()},_onResize:function(){i.prototype._onResize.call(this),this._updateHiddenRows(),this._updateDetailViewPosition(),this.tilesContainerHeight=this._getTilesContainerHeight()},_onSelectedTopicChanged:function(){var e=this.model.selectedTopic;if(this.$(".active-topic").removeClass("active-topic"),e){var t=this.views.itemsById;this._scrollToSelectedTopic(),DDG.addClass(this.model.id,this.$el,"at-topic");for(var i=0;ithis.tilesContainerHeight+a-t&&this.model.loadMore()}},_updateLoadingMore:function(){if(this.$loadMore){var t="1"===e.settings.get("kc")?" is-auto-loading":"";this.model.isLoading?this.$loadMore.addClass("is-loading"+t):this.$loadMore.removeClass("is-loading"+t)}}})}(DDG),function(e){var t=e.Views.AnswerBar.Answers,i=t.GridTiles,s={desktop:{normal:180,fallback:163},mobile:{normal:150,fallback:120}},a={desktop:{normal:120,fallback:60},mobile:{normal:70,fallback:48}};t.Images=function(t){this._device=e.device.isMobile?"mobile":"desktop",this._type=t.model.isNonModuleFallback?"fallback":"normal",this.scrollHandler=this._onScroll.bind(this),i.call(this,t)},t.Images.prototype=$.extend({},i.prototype,{requiredTemplates:null,show:function(){e.device.on("scroll",this.scrollHandler),this.model.isNonModuleFallback&&this.$el.addClass("is-fallback"),i.prototype.show.call(this)},hide:function(){e.device.removeListener("scroll",this.scrollHandler),e.keyboard.clear("nativeUpDown"),i.prototype.hide.call(this)},showNoResults:function(){var t={},s=this.model.name;!window.iqbi||e.settings.safeSearch.isOff()||e.history.get("iaf")||(t.message=l("%s blocked by safe search.",s)),i.prototype.showNoResults.call(this,t)},_updateItems:function(){i.prototype._updateItems.call(this),this.model.expanded&&(this._recalcTileGridDimensions(),this._updateTileWidths(),this._checkLoadMore()),this._updateHiddenRows(),delete this._height,this._updateDetailViewPosition(),this.tilesContainerHeight=this._getTilesContainerHeight()},_appendItem:function(e){var t=a[this._device][this._type],o=s[this._device][this._type];e.loadHighRes=!is_mobile;var n=e.answerMeta&&e.answerMeta.signal_from?e.answerMeta.signal_from:"images";e.imageProxyOps={token:e.thumbnail_token,origin:n},e.width>t&&e.height>o?e.tileWidth=Math.ceil(o/e.height*e.width):e.width>t?e.tileWidth=e.width:e.tileWidth=t,i.prototype._appendItem.call(this,e)},getTileWidth:function(e){return e.model.tileWidth+2*this.getTileMargins().x},getLoadMoreWidth:function(){return this._loadMoreTileWidth||240},_loadMore:function(){i.prototype._loadMore.call(this),this.tilesContainerHeight=this._getTilesContainerHeight()},_expand:function(){this.$jsTiles.css("width",this.getWidth()),"images"===this.model.id&&(e.device.isMobile&&this.model.meta.autoExpandRows||this.$el.css("min-height",e.device.height-e.get_header_height())),i.prototype._expand.call(this),!e.device.isMobile&&this.model.isNonModuleFallback&&this._expandFromFallback(),this._recalcTileGridDimensions(),this._updateTileWidths(),e.history.set({ia:this.model.id}),this._checkLoadMore(),e.keyboard.set("nativeUpDown",!0)},_collapse:function(){i.prototype._collapse.call(this),this._clearMinHeight(),this._toggleTrailingTileVisibility(),this.$jsTiles.css("width","auto"),this._updateTileWidths(),e.keyboard.clear("nativeUpDown")},_clearMinHeight:function(){!e.device.isMobile&&e.settings.isDefault("kc")&&this.$el.css("min-height","")},_recalcTileGridDimensions:function(){if(this.views.items.length){for(var t,i,s=[],a=0,n=this.getWidth()-(e.device.isMobile?10:20),l=2*this.getTileMargins().x,r=1,d=0,c=0;t=this.views.items[c];c++)(i=t.model).gridWidth=i.tileWidth,delete i.killMinWidth,a+=i.gridWidth+l,s.push(i),i.gridRow=r,a>n&&(o(s,a-n,this._device,this._type),a=0,s=[],r++),i.selected&&(d=r);r>1&&this._toggleTrailingTileVisibility(r,n-a,d)}},_toggleTrailingTileVisibility:function(e,t,i){for(var s,o=a[this._device][this._type],n=0;s=this.views.items[n];n++)s.model.gridRow===e&&t>o&&i!==e?(s.model.set({hidden:1}),s.$el.addClass("is-hidden")):s.model.hidden&&(delete s.model.hidden,s.$el.removeClass("is-hidden"))},_updateTileWidths:function(){for(var e,t,i=this.getTileMargins(),s=0;t=this.views.items[s];s++)t.$el&&(e=t.model,t.$el.css({width:this.model.expanded?e.gridWidth:e.tileWidth,marginLeft:i.x+"px",marginRight:i.x+"px"}),e.killMinWidth&&t.$el.css({minWidth:0}));is_mobile||this.$loadMore.css({width:(this.model.expanded?300:this.getLoadMoreWidth())+"px",marginLeft:this.model.expanded?"auto":i.x+"px",marginRight:this.model.expanded?"auto":i.x+"px"})},_onResize:function(){this._width=null,this.$jsTiles.css("width",this.getWidth()),i.prototype._onResize.call(this),this.views.items.length&&this.model.expanded&&(this._recalcTileGridDimensions(),this._updateTileWidths(),this._updateDetailViewPosition(),this._checkLoadMore())},_onScroll:function(){if(!this.model||!this.model.isNonModuleFallback){var e=s[this._device][this._type];this._checkLoadMore(2*e)}},_onLoadMoreClick:function(t){e.device.isMobile&&this.model.isNonModuleFallback&&this._expandFromFallback(),i.prototype._onLoadMoreClick.call(this,t)},_expandFromFallback:function(){this._type="normal",this.$el.removeClass("is-fallback"),this.model.set("isNonModuleFallback",!1),this.model.isFullPage||(this.$el.addClass("is-full-page"),this.model.set("isFullPage",!0),this.model.meta.set("autoExpand",0),e.duckbar.setOrganicsVisibility(!1,this.model.id))}});var o=function(e,t,i,s){for(var o,n=Math.floor(t/e.length),l=a[i][s],r=0;o=e[r];r++){var d=n;o.gridWidth-nl){o.gridWidth-=c;break}r===e.length-1&&(o.gridWidth-=c,o.killMinWidth=1)}}}(DDG),function(e){var t=e.Views.AnswerBar.Answers,i=t.GridTiles;t.Videos=function(e){this.scrollHandler=this._onScroll.bind(this),i.call(this,e)},t.Videos.prototype=$.extend({},i.prototype,{show:function(){e.device.on("scroll",this.scrollHandler),i.prototype.show.call(this)},hide:function(){e.device.off("scroll",this.scrollHandler),i.prototype.hide.call(this)},showNoResults:function(){var t={},s=this.model.name;!window.iqbi||e.settings.safeSearch.isOff()||e.history.get("iaf")||(t.message=l("%s blocked by safe search.",s)),i.prototype.showNoResults.call(this,t)},_expand:function(){e.device.isMobile&&this.model.meta.autoExpandRows||this.$el.css("min-height",e.device.height-e.get_header_height()),i.prototype._expand.call(this)},_collapse:function(){this._clearMinHeight(),i.prototype._collapse.call(this)},_clearMinHeight:function(){!e.device.isMobile&&e.settings.isDefault("kc")&&this.$el.css("min-height","")},_onScroll:function(){this._checkLoadMore(750)}})}(DDG),function(e){var t=e.Views.AnswerBar.Answers,i=t.GridTiles;t.Products=function(e){this.scrollHandler=this._onScroll.bind(this),i.call(this,e),this.bindEvents([[this.model,"change:active",this._updateTitle],[this.model,"change:items",function(){this._detectItemsInViewport(),this._bindEventsToImages(),this._checkLoadMore(0)}.bind(this)],[this.model,"change:hasRenderedFreeListingsDivider",this._setupFreeListingsDivider.bind(this)],[this.model,"ads-wrongly-after-free-listings",this.removeLoadMore]])},t.Products.prototype=$.extend({},i.prototype,{show:function(){e.device.on("scroll",this.scrollHandler),i.prototype.show.call(this)},hide:function(){e.device.off("scroll",this.scrollHandler),i.prototype.hide.call(this)},removeLoadMore:function(){i.prototype.removeLoadMore.call(this),this.model.emit("removed-load-more")},_setupFreeListingsDivider:function(t){t?this.views.freeListingsDivider=new e.Views.FreeListingsDivider({appendTo:this.$jsTiles,answer:this.model}):this.views.freeListingsDivider&&(this.views.freeListingsDivider.destroy(),delete this.views.freeListingsDivider)},_onScroll:function(){e.device.isMobileDevice&&this._detectItemsInViewport(),this._checkLoadMore(660)},_detectItemsInViewport:function(){if(this.model.adReporting){for(var t=$(window),i=0;it.scrollLeft()&&o.top+a.height()>t.scrollTop()&&o.left1&&e.$html.hasClass("is-vertical-tabs-exp")&&$(".js-duckbar-dropdowns-separator").removeClass("is-hidden"),this._checkRoomForPromo()},_addItem:function(t,i){if(!t.isPendingModule){var s;"static"===t.type?s=this.$staticWrap:(s=this.$newItem,this.$sep.removeClass("is-hidden"));var a=new e.Views.AnswerBarMenuItem({appendTo:!1===i&&s,after:!!i&&this.views.items[i].$el,model:t});i?this.views.items.splice(i,0,a):this.views.items.push(a),this.views.itemsById[t.id]=a,s.addClass("has-zci")}},_removeItem:function(e){for(var t in this.views.items)if(this.views.items[t].model.id===e.model.id){this.views.items[t].destroy(),this.views.items.splice(t,1),delete this.views.itemsById[e.model.id];break}},_checkRoomForPromo:function(){var t=e.page.views.header,i=t&&t.views.headerTextPromo&&t.views.headerTextPromo.rendered,s=this.$el.offset().left+this.$el.outerWidth();if(i){var a=e.page.views.header.views.headerTextPromo.$el;s+201){var l,r=e.geo.boundingBox(this._markers),d=e.userLocator.hasLocation()&&e.userLocator.userLocation,c=!(!this.answer||!this.answer.proximity),h=e.mapkit.isUserLocNearMarkers(d,r,this._markers,c);l=d&&h?this.views.map.annotations.slice():this.views.map.annotations.slice(1),i=this.mapkit.regionFromBoundingBox(e.geo.enlargeBoundingBox(e.geo.boundingBox(l.map((function(e){return{lat:e.coordinate.latitude,lon:e.coordinate.longitude}}))),.5)),this.views.map.setRegionAnimated(i,!1)}}else s=Object.keys(s).length?s:this.answer.geo_bbox,i=this.mapkit.regionFromGeoBbox(s),this.views.map.setRegionAnimated(i,!1);this._originalMapRect=this.views.map.visibleMapRect}},getCenter:function(){var e=this.views.map.center;return{lat:e.latitude,lon:e.longitude}},updateRegion:function(e,t,i,s){if(this.views.map&&e&&t){var a=new w.mapkit.Coordinate(parseFloat(e),parseFloat(t)),o=new w.mapkit.CoordinateSpan(i||.016,s||.016),n=new w.mapkit.CoordinateRegion(a,o);this.views.map.setRegionAnimated(n,!1)}},addImageAnnotation:function(e,t,i){var s=new w.mapkit.Coordinate(e,t),a={url:{1:i}},o=new w.mapkit.ImageAnnotation(s,a);return this.views.map.addAnnotation(o)},clearMap:function(){this.views&&this.views.map&&(this.views.map.annotations&&this.views.map.annotations.length>0&&this.views.map.removeAnnotations(this.views.map.annotations),this.views.map.overlays&&this.views.map.overlays.length>0&&this.views.map.removeOverlays(this.views.map.overlays))},_isMarkerVisible:function(t){if(!t.annotation)return!1;var i=t.annotation.coordinate,s=this.views.map.convertCoordinateToPointOnPage(i),a=s.x>this._mapOffset.left&&s.xthis._mapOffset.top&&s.y1){var i=e.geo.boundingBox(this._markers);t.region=this.mapkit.regionFromBoundingBox(e.geo.enlargeBoundingBox(i,.5))}else if(1===this._markers.length){var s=this._markers[0];s.bbox?t.region=this.mapkit.regionFromBoundingBox(s.bbox):t.region=this.mapkit.regionFromLatLon(s.lat,s.lon)}else this.model.selectedLocation?t.region=this.mapkit.regionFromLatLon(this.model.selectedLocation.lat,this.model.selectedLocation.lon):this.isDirections&&this.userLocation&&(t.region=this.mapkit.regionFromLatLon(this.userLocation.lat,this.userLocation.lon));this.views.map=new w.mapkit.Map(this.$el[0],t),this.views.map._impl._allowWheelToZoom=!0,this.views.map.distances=w.mapkit.Map.Distances["metric"===e.geo.getUOM()?"Metric":"Imperial"],this._updateMapType(),this._isFrozen&&setTimeout(function(){this.$el&&this.$el.addClass("mapkit-static--show-legal")}.bind(this),1e3),e.settings.isDefault("kay")&&this.answer&&this.answer.isMapExpanded?e.settings.set("kay","b",{saveToCloud:!0}):"i"===e.settings.get("kay")&&this.views.map.addTileOverlay(new w.mapkit.TileOverlay((function(){}))),this._originalMapRect=this.views.map.visibleMapRect,this.views.map.addEventListener("complete",function(e){this._onMapComplete()}.bind(this)),this.views.map.addEventListener("scroll-start",function(e){this.emit("dragstart")}.bind(this)),this.views.map.addEventListener("select",function(e){this.emit("select")}.bind(this)),this.views.map.addEventListener("zoom-start",function(e){this._onZoomStart()}.bind(this)),this.views.map.addEventListener("region-change-end",function(e){this._onMapMove()}.bind(this)),this.views.map.addEventListener("scroll-end",function(e){this._onMapScrollZoom()}.bind(this)),this.views.map.addEventListener("zoom-end",function(e){this._onMapScrollZoom()}.bind(this)),this.views.map.addEventListener("single-tap",function(e){this._onSingleTap()}.bind(this))},_renderMarkers:function(){this.views.map&&this._markers&&0!==this._markers.length&&(this.views.markers=this._markers.map(function(t){var i=new e.Views.Mapkit.Marker({model:t,answer:this.answer,isFrozen:this._isFrozen});return this.views.map.addAnnotation(i.annotation),t.annotation=i.annotation,i}.bind(this)),this.updateMap())},_createMap:function(){this._renderMap(),this._shouldShowUserLoc()&&this.renderUserLocation(),this.isDirections||this._renderMarkers()},_render:function(i){t.prototype._render.call(this,i),this.$clickOverlay=this.$(".js-mapkit-map-click-overlay"),this.mapkit.isInitialized?this._postInit():this.mapkit.init(function(e,t){t&&this._postInit()}.bind(this)),this.bindEvents([[this.$clickOverlay,"click",this._onClickOverlayClick]]),this._isFrozen&&e.pixel.fire("map_si")},_postInit:function(){this._createMap(),$.isFunction(this._onMapReady)&&!this._onMapReadyDone&&(this._onMapReady(),this._onMapReadyDone=!0)},_onIsMapExpandedChange:function(){this.answer.isMapExpanded?this.$clickOverlay.addClass("is-hidden"):this.$clickOverlay.removeClass("is-hidden")},_onCanShowMapChange:function(e){this.$el.toggleClass("is-loading",!e)},_onMapComplete:function(){this._isMapLoaded||(this.emit("load"),this._isMapLoaded=!0,e.history.get("start")||e.history.get("end")||!this.answer||"directions"===this.answer.id||this.model.set("canShowMap",!0),this.$(".mk-map-view").on("click",this._onClick.bind(this)))},_onClickOverlayClick:function(){this.emit("click")},_onZoomStart:function(){e.pixel.fire("map_eze")},_onMapTypeChange:function(){this._updateMapType(),e.pixel.fire("map_ete")},_onMapMove:function(){this.emit("dragend")},_onMapScrollZoom:function(){this.emit("scrollzoom")},_onClick:function(){this.emit("click")},_onSingleTap:function(){this.emit("single-tap")},_onThemeChange:function(){this._isCurrentThemeDark!==e.settings.isDarkTheme()&&(this.views.map.colorScheme=e.settings.isDarkTheme()?w.mapkit.Map.ColorSchemes.Dark:w.mapkit.Map.ColorSchemes.Light,this._isCurrentThemeDark=!this._isCurrentThemeDark,this.answer&&this.answer.set("isDarkMap",this._isCurrentThemeDark))}})}(DDG),function(e){var t=e.Views.Base;e.Views.Mapkit.StaticMap=function(i){this._ops={},this.answer=i.answer,t.call(this,i),this.bindEvents([[e.settings,"change:"+e.settings.THEME_KEY,this._onThemeChange],[e.duckbar.menu,"item-active",this._onTabChanged]])},e.Views.Mapkit.StaticMap.prototype=$.extend({},t.prototype,{template:"mapkit_static_map",hide:function(){this.$el.hide()},show:function(){this.$el.show()},_render:function(i){this._ops=i||this._ops,this._isCurrentThemeDark=e.settings.isDarkTheme(),this._ops.userLoc=this._getUserLocMarkerCoords(),this._ops.url=e.mapkit.getStaticImageURL(this._ops),t.prototype._render.call(this,this._ops),e.pixel.fire("map_si"),setTimeout(function(){this.$el&&this.$el.addClass("mapkit-static--show-legal")}.bind(this),1e3),this.bindEvents([[this.$el,"click",this._onClick]])},_getUserLocMarkerCoords:function(){var t=null;if(this.answer){var i=this.answer.obfusLoc&&this.answer.obfusLoc.lat&&this.answer.obfusLoc.lon?this.answer.obfusLoc:null,s=e.userLocator.hasLocation()&&e.userLocator.userLocation,a=!!this.answer.proximity;if(s&&i){var o=e.geo.boundingBox(this._ops.markers);e.mapkit.isUserLocNearMarkers(i,o,this._ops.markers,a)&&(t=i)}}return t},_onThemeChange:function(){this._isCurrentThemeDark!==e.settings.isDarkTheme()&&(this._isCurrentThemeDark=!this._isCurrentThemeDark,this._rerender())},_onClick:function(){this.emit("click"),e.pixel.fire("map_se")},_onTabChanged:function(){if(!this.$el||this.$el.is(":visible")){var e=this.$el.outerWidth(),t=this.$el.outerHeight();this._ops.width===e&&this._ops.height===t||(this._ops.width=e,this._ops.height=t,this._rerender())}}})}(DDG),function(e){var t=e.Views.Base,i="circle",s="numbered",a="dot";e.Views.Mapkit.Marker=function(o){this.mapkit=o.mapkit||e.mapkit,this.answer=o.answer,this.model=o.model,this.markerType=i,o.markerType?this.markerType=o.markerType:this.answer&&this.answer.items.length>1&&(this.markerType=o.isFrozen&&this.model.number>3?a:s),o.markerType=this.markerType,o.number=this.markerType===s&&this.model.number,t.call(this,o),this.bindEvents([[this.answer,"change:selectedItem",this._updateSelectedState],[this.model,"change:selected",this._updateSelectedState],[this.model,"change:highlighted",this._onHighlightedChange]]),this.answer.selectedItem&&this._updateSelectedState()},e.Views.Mapkit.Marker.prototype=$.extend({},t.prototype,{template:"mapkit_marker",_render:function(e){t.prototype._render.call(this,e),this.annotation=this.mapkit.marker(this.model.lat,this.model.lon,function(){return this.$el[0]}.bind(this)),this.$mkEl=this.$el.parent(),this.$mkEl.addClass("mapkit-marker"),this.bindEvents([[this.$el,"mouseenter",this._onMouseEnter],[this.$el,"mouseleave",this._onMouseLeave],[this.$el,"click",this._onClick]])},_updateSelectedState:function(){this.$el.toggleClass("mgl-marker--selected",!!this.model.selected),this.$mkEl.toggleClass("mapkit-marker--selected",!!this.model.selected),!this.answer.selectedItem||this.model.selected?(this.$el.removeClass("mgl-marker--disabled"),this.$mkEl.removeClass("mapkit-marker--disabled")):this.answer.selectedItem&&!this.model.selected&&(this.$el.addClass("mgl-marker--disabled"),this.$mkEl.addClass("mapkit-marker--disabled"))},_onHighlightedChange:function(){this.$el.toggleClass("mgl-marker--highlighted",!!this.model.highlighted),this.$mkEl.toggleClass("mapkit-marker--highlighted",!!this.model.highlighted)},_onMouseEnter:function(){this.model.highlight()},_onMouseLeave:function(){this.model.unhighlight()},_onClick:function(){this.model.select()}})}(DDG),function(e){var t=e.Views.Base;e.Views.Mapkit.UserLocationControl=function(e){t.call(this,e),this.bindEvents([[this.model,"change:waitingForLocation",this._onWaitingForLocationChange],[this.$el,"click",this._onClick]])},e.Views.Mapkit.UserLocationControl.prototype=$.extend({},t.prototype,{template:"mapkit_user_location_control",hide:function(){this.$el.addClass("is-hidden")},show:function(){this.$el.removeClass("is-hidden")},_onWaitingForLocationChange:function(){this.$el.toggleClass("mapbox-control--waiting",this.model.waitingForLocation)},_onClick:function(e){e.preventDefault(),e.stopPropagation(),this.model.updateLocation({force:!0,updateType:"map"})}})}(DDG),function(e){var t=e.Views.Base;e.Views.Mapkit.UserLocationMarker=function(i){this.mapkit=i.mapkit||e.mapkit,this.model=i.model,this.coords={lat:this.model.userLocation.lat,lon:this.model.userLocation.lon},i.markerType="loc",t.call(this,i)},e.Views.Mapkit.UserLocationMarker.prototype=$.extend({},t.prototype,{template:"mapkit_marker",_render:function(e){t.prototype._render.call(this,e),this.annotation=this.mapkit.marker(this.coords.lat,this.coords.lon,function(){return this.$el[0]}.bind(this))}})}(DDG),function(e){var t=e.Views.Base;e.Views.Mapkit.UserLocation=function(e){this.answer=e.answer,this.map=e.map,t.call(this,e),this.bindEvents([[this.model,"change:userLocation",this._onUserLocationChange]])},e.Views.Mapkit.UserLocation.prototype=$.extend({},t.prototype,{template:"mapkit_user_location",_addToDOM:function(){this.views.marker=new e.Views.Mapkit.UserLocationMarker({model:this.model}),this.map.addAnnotation(this.views.marker.annotation),this._updateLocation()},_updateLocation:function(){var t=this.model.userLocation.lat,i=this.model.userLocation.lon;this.views.marker.annotation.coordinate=e.mapkit.coord(t,i)},_onUserLocationChange:function(){e.userLocator.hasLocation()&&this._updateLocation()}})}(DDG),function(e){var t=e.Views.Base,i="mapbox-position-picker__marker--moving";e.Views.Mapkit.PositionPicker=function(e){this.model=e.model,this.model.canShowMap=!0,t.call(this,e)},e.Views.Mapkit.PositionPicker.prototype=$.extend({},t.prototype,{template:"mapkit_position_picker",show:function(){this.views.map&&this.views.map.show()},hide:function(){this.views.map&&this.views.map.hide()},_getPosition:function(){if(!this.views.map)return null;var t=this.views.map.getCenter();return new e.Models.UserLocation({lat:t.lat,lon:t.lon,type:e.Models.UserLocation.MANUAL_LOCATION})},_render:function(e){t.prototype._render.call(this,e),this._cacheElems(".js-mapkit-position-picker",["map","marker"]),this._createMap()},_createMap:function(){this.views.map=new e.Views.Mapkit.Map({model:this.model,appendTo:this.$map,hideLoc:!0,hideMapTypeControl:!0,hideScale:!0,hideCompass:!0}),this.bindEvents([[this.views.map,"load",this._onMapLoaded],[this.views.map,"dragstart",this._onMapMoveStart],[this.views.map,"dragend",this._onMapMoveEnd]])},_onMapLoaded:function(){this.$map.removeClass("is-loading")},_onMapMoveStart:function(){this.$marker.addClass(i)},_onMapMoveEnd:function(){this.$marker.removeClass(i),this.model.set("selectedLocation",this._getPosition())}})}(DDG),function(e){var t=e.Views.Base;e.Views.Attribution=function(e){this.answer=e.answer,this.direction=e.direction,t.call(this,e),this.$(".js-attribution-link").click(this._onLinkClick.bind(this))},e.Views.Attribution.prototype=$.extend({},t.prototype,{template:"attribution",_onLinkClick:function(t){t.preventDefault(),t.stopPropagation(),this.views.modal||(this.views.modal=new e.Views.AttributionModal({answer:this.answer,direction:this.direction,appendTo:this.$el}));var i=this.views.modal;i.isShowing?i.hide():(e.pixel.fire("iaa",this.answer.pixelId),i.show()),this.answer.engaged()}})}(DDG),function(e){var t=e.Views.Modal;e.Views.AttributionModal=function(e){t.call(this,e)},e.Views.AttributionModal.prototype=$.extend({},t.prototype,{template:"attribution_modal",_render:function(e){var i=e.answer.meta,s=i.developer,a=!1;s.forEach((function(e){e&&e.name&&"DDG Team"!==e.name&&"DuckDuckGo"!==e.name&&"duckduckgo"!==e.name&&(e.show=a=!0)})),t.prototype._render.call(this,{direction:e.direction,devs:a&&s,meta:i})}})}(DDG),function(e){var t=e.Views.Feedback,i=e.Views.Base,s="is-hidden",a="feedback-btn--clicked";t.Button=function(e){this.category=e.category,this.clickPixel=e.clickPixel,this.noFaces=e.noFaces||!1,this.extraData=e.extraData||{},this.answer=e.answer,i.call(this,e)},t.Button.prototype=$.extend({},i.prototype,{template:"feedback_button",_render:function(e){i.prototype._render.call(this,e),this._cacheElems(".js-feedback",["start","love","nolove","icon-wrap"]),this.bindEvents([[this.$start,"click",this._onStartClick],[this.$love,"click",this._onLoveClick],[this.$nolove,"click",this._onNoLoveClick]])},_addModal:function(e){this.views.modal||(this.views.modal=new t.Modal({category:this.category,extraInfo:$.param(this.extraData),appendTo:$("body")}),this.views.modal.on("hidden",this._hideFaces.bind(this))),this.views.modal.show(e)},_showFaces:function(){this.$iconwrap.removeClass(s),setTimeout(function(){this.$el.addClass(a)}.bind(this),100)},_hideFaces:function(){this.$el.removeClass(a),setTimeout(function(){this.$iconwrap.addClass(s)}.bind(this),200)},_onStartClick:function(t){return t.preventDefault(),this.clickPixel&&e.pixel.fire(this.clickPixel),this.noFaces?this._addModal(!1):(this._showFaces(),e.$doc.one("click",this._onDocumentClick.bind(this))),!1},_onDocumentClick:function(e){this.$love.is(e.target)||this.$nolove.is(e.target)||this._hideFaces()},_onLoveClick:function(e){e.preventDefault(),this._addModal({isPositive:!0})},_onNoLoveClick:function(e){e.preventDefault(),this._addModal({isPositive:!1})}})}(DDG),function(e){var t=e.Views.Feedback,i=e.Views.Base;t.ReportAdsButton=function(e){this.category=e.category,this.extraData=e.extraData||{},this.whichAd=e.whichAd,i.call(this,e)},t.ReportAdsButton.prototype=$.extend({},i.prototype,{template:"report_ads_button",_render:function(e){i.prototype._render.call(this,e),this._cacheElems(".js-report-ad",["start"]),this.bindEvents([[this.$start,"click",this._onAdReportClick]])},_showModal:function(e){this.views.modal||(this.views.modal=new t.Modal({category:"ads",adInfo:JSON.stringify(e),appendTo:$("body")})),this.views.modal.show(!1),this.views.modal.on("submitted",this._hideReportAdButton.bind(this))},_hideReportAdButton:function(){this.$start.addClass("is-hidden")},_onAdReportClick:function(t){t.preventDefault();var i=this._getAdData();this._showModal(i),i.adt=encodeURIComponent(i.adt),i.adsnippet=encodeURIComponent(i.adsnippet),e.pixel.fire("readsb",i)},_getAdData:function(){var t=e.page.ads.getAds();return t=t[this.whichAd],{whichad:this.whichAd,adrlink:this._getRlink(t.c),adt:e.Utils.Strings.htmlDecode(t.t),adsrc:t.d,adgood:t.relevancy?t.relevancy.is_good_v8:0,adsnippet:e.Utils.Strings.htmlDecode(t.a)}},_getRlink:function(t){return e.Utils.Strings.getUrlParameter(t,"u3")}})}(DDG),function(e){var t=e.Views.Feedback,i=e.Views.Modal,s="other",a="is-hidden",o="is-invisible",n="is-disabled",r=["ads","autoads"];t.Modal=function(t){this.sourceName=t.sourceName||"",this.defaultCategory=t.category||"",this.category=t.category||"",this.categoryValue=t.categoryValue||"",this.issue="",this.extraInfo=t.extraInfo,this.adInfo=t.adInfo,this.genericLabel=t.genericLabel,t.model=t.model||new e.Models.Feedback,e.settings.region.isProductAdsMarket()?r.push("products"):e.Data.FeedbackIssues.products=[{text:"I don't want results from Amazon",val:"amazon"}],this.hasIssues=this._checkHasIssues(),this.requiresSuggestion=-1!==r.indexOf(this.category),i.call(this,t),this.bindEvents([[this.model,"change:success",this._onFeedbackSuccess],[this.model,"change:error",this._onFeedbackError]])},t.Modal.prototype=$.extend({},i.prototype,{template:"feedback_modal",show:function(t){if(t=t||{},e.isDev&&"object"!=typeof t)throw new Error("An object must be passed to modal.show");this.$suggestionlabel.html(t.isPositive?lp("feedback form","What did you like?"):lp("feedback form","What could be better?")),this._isPositive=t.isPositive,this._isGeneric=t.isGeneric,this.$form.removeClass(a),this.$success.addClass(a),this._showHideSuggestions(),this._toggleSubmitButton(),!this._isPositive&&this.category&&this.hasIssues&&(this.$issues.removeClass(o),this.$dropdown.val(this.category),this._setCategoryIssues(this.categoryValue)),i.prototype.show.call(this)},_render:function(t){var a=[{text:lp("feedback form","Pick a category"),val:""}],o=[{text:l("Results"),val:"organics"},{text:lp("feedback form","Wikipedia info"),val:"wikipedia"},{text:lp("feedback form","Advertisements"),val:"ads"},{text:l("Images"),val:"images"},{text:l("Videos"),val:"videos"},{text:l("News"),val:"news"},{text:lp("feedback form","Maps / location info"),val:"maps"},{text:l("Products"),val:"products"},{text:lp("feedback form","Search box"),val:"search box"},{text:lp("feedback form","Security issue (opens in new tab)"),val:"security"},{text:lp("feedback form","Settings"),val:"settings"},{text:lp("feedback form","Date filters"),val:"filters"},{text:lp("feedback form","Other"),val:s}];if("b"===e.searchExperiments.getActiveVariant("atadexp")&&o.splice(3,0,{text:"Car Advertisements",val:"autoads"}),t.categoryName){this.categoryName=t.categoryName;for(var n=0;n0&&this.extraInfo&&(l+=" | "+this.extraInfo);var r={ia:o,comment:l,rating:this._isPositive?1:-1,looking_for:this.categoryValue||this.category,category_issue:this.issue,search_exp:e.searchExperiments.getPixelParameters()};"ads"===r.looking_for&&(r.ads_issue=r.category_issue,delete r.category_issue,delete r.ad_issue),"great"===r.category_issue&&(r.rating=1);var d=e.page.ads.getAds(),c=-1===r.rating&&"ads"===r.looking_for&&d;if(this.adInfo&&"ads"===r.looking_for)r=$.extend(r,JSON.parse(this.adInfo));else if(!this.adInfo&&c){r.whichad="all",r.adt="",r.adsrc="",r.adsnippet="",r.adgood="";for(var h=0;h0,t=this.category.length,i=t&&"ads"===this.category,s=this.issue.length;if(!t)return!1;if(this._isPositive&&!this.isOtherCategory)return!0;if(i){if(!e)return!1;if(s||this._isPositive)return!0}else{if(this.requiresSuggestion&&!e)return!1;if(this.isOtherCategory&&e)return!0;if(!this.hasIssues)return!0;if(this.hasIssues&&s)return!0}return!1},_checkHasIssues:function(){return"ads"===this.category||("products"===this.category&&"b"===e.searchExperiments.getActiveVariant("panexp")||"productsvertical"===this.category&&1===window.shfl||!!e.device.isEnglish&&DDG.Data.FeedbackIssues.hasOwnProperty(this.category))},_getIssues:function(e){return e=e||this.category,DDG.Data.FeedbackIssues[e].slice()},_getLookingFor:function(){return this.category===this.defaultCategory&&this.categoryValue?this.categoryValue:this.category},_onFeedbackSuccess:function(){this.model.success&&(this._reset(),this._showSuccessMessage())},_onFeedbackError:function(){this.model.error&&(this.hide(),this._reset())}})}(DDG),function(e){var t=e.Views.Feedback,i=e.Views.Base;t.FeedbackPrompt=function(s){e.device.isMobile&&!s.showOnMobile||(this.category=s.category,this.extraData=s.extraData||{},s.showYesNo=!1!==s.showYesNo,this.categoryName=s.categoryName,this.categoryValue=s.categoryValue,this.sourceName=s.sourceName,this.asButton=s.asButton,this.hasNoResults=s.hasNoResults,this.promptText=s.promptText,this.subtitleText=s.subtitleText,this.genericLabel=s.genericLabel||null,this.modalView=s.modalView||t.Modal,this.modalViewData=s.modalViewData,i.call(this,s),this.bindEvents([[".js-feedback-prompt-yes","click",this._onYesClicked],[".js-feedback-prompt-no","click",this._onNoClicked],[".js-feedback-prompt-generic","click",this._onGenericClicked]]))},t.FeedbackPrompt.prototype=$.extend({},i.prototype,{template:"feedback_prompt",_showModal:function(e){this.views.modal||(this.views.modal=new this.modalView({subtitleText:this.subtitleText,sourceName:this.sourceName,category:this.category,categoryName:this.categoryName,categoryValue:this.categoryValue,extraInfo:$.param(this.extraData),genericLabel:this.genericLabel,modalViewData:this.modalViewData,appendTo:$("body")})),this.views.modal.show(e)},_onYesClicked:function(t){t.preventDefault(),e.pixel.fire("fbp",this.category,"yes",this.extraData),this._showModal({isPositive:!0})},_onNoClicked:function(t){t.preventDefault(),e.pixel.fire("fbp",this.category,"no",this.extraData),this._showModal({isPositive:!1})},_onGenericClicked:function(e){e.preventDefault(),this._showModal({isPositive:!1,isGeneric:!0})}})}(DDG),function(e){var t=e.Views.Modal,i="is-hidden",s="is-disabled",a="other";e.Views.ReportImageModal=function(i){i.appendTo=i.appendTo||".js-site-wrapper",i.model=i.model||new e.Models.Feedback,t.call(this,i),this.model.thumbnail=i.thumbnail,this.model.image=i.image,this.bindEvents([[this.model,"change:success",this._onFeedbackSuccess],[this.model,"change:error",this._onFeedbackError]])},e.Views.ReportImageModal.prototype=$.extend({},t.prototype,{template:"report_image_modal",hide:function(){this._reset(),t.prototype.hide.call(this)},show:function(){this.$form.removeClass(i),this.$success.addClass(i),t.prototype.show.call(this)},_onDropdownChange:function(e){this.$dropdown.val()===a&&this.$comment.focus(),this._toggleSubmitButton()},_onFeedbackError:function(){this.model.error&&this.hide()},_onFeedbackSuccess:function(){this.model.success&&(this._reset(),this._showSuccessMessage())},_onSubmitClick:function(t){if(t.preventDefault(),!this.$submit.hasClass(s)){this.$submit.addClass(s);var i=e.duckbar.getActiveTab(),a=i?i.pixelId:"",o={comment:this.$comment.val(),reason:this.$dropdown.val(),tab:a,type:"images"};this.model.send(o)}},_render:function(e){var i=[{text:lp("feedback form","Pick a specific problem"),val:""},{text:lp("Report image modal","Not relevant"),val:"not_relevant"},{text:lp("Report image modal","Copyright violation"),val:"copyright_violation"},{text:lp("Report image modal","Explicit content"),val:"explicit"},{text:lp("Report image modal","Child sexual abuse"),val:"child_abuse"},{text:lp("feedback form","Other"),val:a}];t.prototype._render.call(this,$.extend({},e,{thumbnail:this.model.thumbnail,options:i})),this._cacheElems(".js-feedback",["comment","dropdown","form","submit","success"]),this.bindEvents([[this.$dropdown,"change",this._onDropdownChange],[this.$submit,"click",this._onSubmitClick],[this.$comment,"input",this._toggleSubmitButton]])},_reset:function(){this.$submit.addClass(s),this.$dropdown.val(""),this.$comment.val("")},_showSuccessMessage:function(){this.$success.removeClass(i),this.$form.addClass(i)},_toggleSubmitButton:function(){var e=this.$comment.val().trim(),t=this.$dropdown.val(),i=t===a?e.length:t.length;this.$submit.toggleClass(s,!i)}})}(DDG),function(e){var t=e.Views.Feedback,i=e.Views.Base;t.IssueList=function(e){this.issues=e.issues,i.call(this,e)},t.IssueList.prototype=$.extend({},i.prototype,{template:"feedback_issue_list",_render:function(e){i.prototype._render.call(this,$.extend({},e)),this._cacheElems(".js-feedback",["radio"]),this.bindEvents([[this.$radio,"change",this._onRadioChange]])},_onRadioChange:function(){this.model.emit("issue-selected")}})}(DDG),function(e){var t=e.Views.Feedback,i=e.Views.Modal,s="is-hidden",a="is-disabled";t.SinglePlaceModal=function(t){this.issues=[],this.issue="",this.correction="",this.extraInfo=t.extraInfo,this.placeData=t.modalViewData,t.model=new e.Models.Feedback,i.call(this,t),this.bindEvents([[this.model,"change:success",this._onFeedbackSuccess],[this.model,"change:error",this._onFeedbackError]])},t.SinglePlaceModal.prototype=$.extend({},i.prototype,{template:"feedback_modal",show:function(t){if(e.isDev&&"object"!=typeof t)throw new Error("An object must be passed to modal.show");this.$suggestionlabel.html(lp("feedback form","What could be better?")),this.$form.removeClass(s),this.$success.addClass(s),this.$suggestion.addClass(s),this.$manage.addClass(s),this.$dropdown.val(""),this.$suggestion.val(""),this._toggleSubmitButton(),i.prototype.show.call(this)},_render:function(t){this.issues=this._getIssues(this.placeData),i.prototype._render.call(this,$.extend({},t,{defaultCategory:null,options:this.issues,query:e.get_query(),subtitleText:lp("feedback form","Share feedback for this result."),singlePlaceDisclaimerText:this.getSinglePlaceDisclaimerText(this.placeData)})),this._cacheElems(".js-feedback",["form","success","success-message","dropdown","manage","suggestion","suggestion-label","submit"]),this.bindEvents([[this.$dropdown,"change",this._onIssueChange],[this.$suggestion,"input",this._onCorrectionChange],[this.$submit,"click",this._onSubmitClick]])},hide:function(){this._reset(),i.prototype.hide.call(this)},_getConcatSourcesText:function(e){var t=$.map(e.providerMeta,(function(e){return e.name})).filter((function(e,t,i){return i.indexOf(e)===t}));return Handlebars.helpers.concat(t,{hash:{sep:", ",conj:" and "},fn:function(e){return e}})},getSinglePlaceDisclaimerText:function(e){var t=this._getConcatSourcesText(e);return lp("feedback form","Reports are anonymous and sent to DuckDuckGo to help improve our search service. Your anonymous feedback is also shared with %s to help improve their services.",t)},getSuccessMessageText:function(e){var t=this._getConcatSourcesText(e);return lp("feedback form","We use feedback like this to improve DuckDuckGo. Suggestions will be incorporated at the discretion of %s. Corrections may not show up in results right away.",t)},getSinglePlaceManageLinkText:function(e){var t=e.manageSource;return lp("feedback form","Own this business? Manage on %s",t)},_showSuccessMessage:function(){this.$successmessage.html(this.getSuccessMessageText(this.placeData)),this.$success.removeClass(s),this.$form.addClass(s)},_onSubmitClick:function(t){if(t.preventDefault(),!this.$submit.hasClass(a)){this.$submit.addClass(a);var i=e.duckbar.getActiveTab(),s=i?i.pixelId:"",o=e.duckbar.sideModules||{},n={ia:Object.keys(o).map((function(e){return e.toLowerCase()+"_module"})).concat([s]).join(", "),comment:this.correction.trim(),data_providers:JSON.stringify(this.placeData.dataProviders),provider_meta:JSON.stringify(this.placeData.providerMeta),rating:-1,looking_for:"places_single",category_issue:this.issue,search_exp:e.searchExperiments.getPixelParameters()};this.model.send(n)}},_reset:function(){this.$submit.addClass(a),this.issue="",this.correction=""},_toggleSubmitButton:function(){var e=this._shouldEnableSubmit();this.$submit.toggleClass(a,!e)},_onIssueChange:function(e){this.issue=e.target.value;var t=this._getSingleIssue(this.issue);this.$suggestion.val(""),this.correction="",t.prompt?(this.$suggestion.attr("placeholder",t.prompt),this.$suggestion.toggleClass(s,!1)):this.$suggestion.toggleClass(s,!0),t.manageUrl?(this.$manage.attr("href",t.manageUrl),this.$manage.html(this.getSinglePlaceManageLinkText(t)),this.$manage.toggleClass(s,!1)):this.$manage.toggleClass(s,!0),this._toggleSubmitButton()},_onCorrectionChange:function(e){this.correction=e.target.value,this._toggleSubmitButton()},_shouldEnableSubmit:function(){var e=this.correction.trim().length;return!!this.issue.length&&!(this._getSingleIssue(this.issue).prompt&&!e)},_getIssues:function(e){var t,i=e.providerMeta,s=[{text:lp("feedback form","Pick a specific problem"),val:""},{text:lp("feedback form","Wrong place is shown"),val:"wrongPlace"},{text:lp("feedback form","Location on map is wrong"),val:"incorrectCoords"}],a={text:lp("feedback form","Address is incorrect"),val:"incorrectAddress",prompt:lp("feedback form","Please suggest the correct address")},o=e.dataProviders.address;o&&(a.manageSource=i[o].name,a.manageUrl=i[o].manage_url),s.push(a),t=e.phone?{text:lp("feedback form","Phone number is incorrect"),val:"incorrectPhone",prompt:lp("feedback form","Please suggest the correct phone number")}:{text:lp("feedback form","Phone number is missing"),val:"missingPhone",prompt:lp("feedback form","Please suggest the phone number")};var n,l=e.dataProviders.phone;l&&(t.manageSource=i[l].name,t.manageUrl=i[l].manage_url),s.push(t),n=e.website?{text:lp("feedback form","Website is incorrect"),val:"incorrectWebsite",prompt:lp("feedback form","Please suggest the correct website URL")}:{text:lp("feedback form","Website is missing"),val:"missingWebsite",prompt:lp("feedback form","Please suggest the website URL")};var r,d=e.dataProviders.url;d&&(n.manageSource=i[d].name,n.manageUrl=i[d].manage_url),s.push(n),r=e.hours&&e.hours.length?{text:lp("feedback form","Hours are incorrect"),val:"incorrectHours",prompt:lp("feedback form","Please suggest the correct hours of operation")}:{text:lp("feedback form","Hours are missing"),val:"missingHours",prompt:lp("feedback form","Please suggest the hours of operation")};var c=e.dataProviders.hours;return c&&(r.manageSource=i[c].name,r.manageUrl=i[c].manage_url),s.push(r),s.push({text:lp("feedback form","This place is permanently closed"),val:"closed"}),s.push({text:lp("feedback form","This place is too far away"),val:"badProximity"}),s.push({text:lp("feedback form","Other"),val:"other",prompt:lp("feedback form","Please provide feedback")}),s},_getSingleIssue:function(e){return $.grep(this.issues,(function(t){return t.val===e}))[0]},_onFeedbackSuccess:function(){this.model.success&&(this._reset(),this._showSuccessMessage())},_onFeedbackError:function(){this.model.error&&(this.hide(),this._reset())}})}(DDG),function(e){e.Views.FilterableDropdownMixin=function(e){this.view=e},e.Views.FilterableDropdownMixin.prototype=$.extend({},{setup:function(e){this.$divider=e.$divider||null,this.$input=e.$input||this.view.$el.find('input[type="search"]'),this.$items=e.$items||this.view.$el.find(".js-dropdown-items"),this._bindEvents()},_bindEvents:function(){this.view.bindEvents([[this.$input,"click focus",this._onInputFocus.bind(this)],[this.$input,"keydown keypress input keyup paste",this._onInputChange.bind(this)]])},reset:function(){this.$input.val(""),this.$items.show(),this.$divider&&this.$divider.show()},focus:function(){setTimeout(function(){this.$input.focus()}.bind(this),1)},_onInputChange:function(){var e=this.$input.val(),t=!1,i=!1;this.$items.each((function(s,a){var o=a.textContent.toLowerCase().indexOf(e.toLowerCase())>-1;a.style.display=o?"block":"none",o&&a.classList.contains("is-before-divider")?t=!0:o&&(i=!0)})),this.$divider&&this.$divider.toggle(t&&i)},_onInputFocus:function(){return!1}})}(DDG),function(e){var t="is-active";e.Views.KeyboardNavigableMixin=function(e,t){this.activeIndex=-1,this.view=e,this._onSelect=t},e.Views.KeyboardNavigableMixin.prototype=$.extend({},{setup:function(e){this.$items=e.$items||this.view.$el.find(".js-dropdown-items"),this._bindEvents()},reset:function(){this.activeIndex=-1,this._updateActive()},_isShown:function(){return this.view.$el.hasClass("is-showing")},_bindEvents:function(){this.view.bindEvents([[e.keyboard,"up.modal",this._onUp.bind(this)],[e.keyboard,"down.modal",this._onDown.bind(this)],[e.keyboard,"enter.modal",this._onEnter.bind(this)],[e.keyboard,"escape.modal",this._onEscape.bind(this)]])},_getItems:function(){return this.$items.filter(":visible")},_getSelected:function(){return this._getItems().eq(this.activeIndex)},_updateActive:function(e){var i=this._getSelected(),s=i.offsetParent();if(this.$items.removeClass(t),this.activeIndex>-1&&i.addClass(t),i.length){var a=s.scrollTop(),o=a+s.height(),n=a+i.position().top,l=a+n+i.outerHeight();0===this.activeIndex?s.scrollTop(0):40===e&&l>o?s.scrollTop(n-s.height()+i.outerHeight()):38===e&&n-1)this._onSelect(this._getSelected().data("value"));else{var t=this._getItems();t&&1===t.length&&this._onSelect(this._getSelected().data("value"))}this.reset()}},_onEscape:function(){this.reset()}})}(DDG),function(e){var t=e.Views.Dropdowns.SelectListDropdown,i=e.Views.Dropdowns;i.DirectionDropdown=function(i){this.model=i.model=e.directionSource,i.key="directions",i.header=lp("maps_places","Choose service"),i.horizontalPos="center",i.verticalPos=i.verticalPos||"bottom",i.showSelected="Places"!==i.answer.answerType&&"Place"!==i.answer.answerItemModel,this._loc=i.loc,this._answer=i.answer,t.call(this,i),this._loadSourceFromSettings()},i.DirectionDropdown.prototype=$.extend({},t.prototype,{changeVerticalPos:function(e){this.views.modal&&(this.views.modal.$el.removeClass("modal--popout--"+this._verticalPos),this.views.modal.$el.addClass("modal--popout--"+e)),this._verticalPos=this.modalOps.position=e,this._repositionModal()},open:function(){t.prototype.open.call(this),this._answer&&this._answer.engaged()},_loadSourceFromSettings:function(){var t=e.settings.get("kam");t&&this.model.select(t)},_getURL:function(){return this.model.getDirectionsURL(this._loc)},_onItemClick:function(i){t.prototype._onItemClick.call(this,i),e.settings.set("kam",i,{saveToCloud:!0})}})}(DDG),function(e){var t=e.Views.Dropdowns,i=e.Views.Base;t.FilterContainer=function(t){this._answer=t.answer,this._answer?(this._safeSearch=this._answer.safeSearch,this._region=this._answer.region,this._date=this._answer.date):this._safeSearch=this._region=this._date=!0,i.call(this,t),t.allTab&&(e.history.get("iax")||e.history.get("iar"))?e.deep.on("change:finished",this._initFilters.bind(this)):this._initFilters()},t.FilterContainer.prototype=$.extend({},i.prototype,{_initFilters:function(){this.views.filters=[],this._region&&this.views.filters.push(new t.RegionFilter({appendTo:this.$el})),this._safeSearch&&!e.page.isSafeDDG&&this.views.filters.push(new t.SafeSearchFilter({appendTo:this.$el})),this._date&&this.views.filters.push(new t.DateFilter({appendTo:this.$el})),this._answer&&this._answer.parameters&&this._answer.parameters.forEach(function(t){var i=this._answer.canShowSidebarFilters?"SidebarFilter":"FilterDropdown",s=new e.Views.AnswerBar.Meta[i]({model:t,answer:this._answer,appendTo:this.$el});this.views.filters.push(s)}.bind(this))}})}(DDG),function(e){var t=e.Views.Dropdowns,i=t.Base;t.DateFilter=function(t){i.call(this,t),e.search.on("change:dateFilterId",this._rerender.bind(this))},t.DateFilter.prototype=$.extend({},i.prototype,{modalClass:"DateFilterModal",_render:function(t){(t=t||{}).isActive=e.search.dateFilterId,t.key="date",t.buttonContent=e.search.getDateFilterName(),i.prototype._render.call(this,t)},open:function(){e.pixel.fire("dfc","f",{iao:"web"!==e.duckbar.activeTabId?1:0}),i.prototype.open.call(this)}})}(DDG),function(e){var t=e.Views.Dropdowns,i=e.Views.Modal;t.DateFilterModal=function(e){i.call(this,e)},t.DateFilterModal.prototype=$.extend({},i.prototype,{template:"dropdown_modal",_render:function(t){i.prototype._render.call(this,{isPopover:t.isPopover,header:t.isPopover&&l("Filter by Date"),footerLink:!e.search.isVertical&&{className:"js-custom-date-range",label:l("Custom date range"),selected:e.search.isCustomDateFilter()},values:e.search.getDateFilters(),key:"date"}),this.$(".js-dropdown-items").click(this._onFilterClick.bind(this)),this.$(".js-custom-date-range").click(this._onCustomDateRangeClick.bind(this))},_onFilterClick:function(t){t.preventDefault();var i=$(t.currentTarget).attr("data-value"),s=e.search,a=e.Data.HiddenFields.DATE_FILTER;i&&""!==i?e.hidden.set(a,i):e.hidden.clear(a),this._fireClickedPixel(i),s.set("dateFilterId",i),s.requery()},_onCustomDateRangeClick:function(t){this.dateRangeModal=this.dateRangeModal||new e.Views.CustomDateRange({appendTo:$("body"),model:new e.Models.CustomDateRange({})}),this.dateRangeModal&&this.dateRangeModal.show(),this._fireClickedPixel("c")},_fireClickedPixel:function(t){var i=!e.search.dateFilterId&&t;e.pixel.fire("dfc","ci",{fd:i?1:0})}})}(DDG),function(e){var t=e.Views.Dropdowns,i=t.Base;t.RegionFilter=function(t){i.call(this,t);var s=e.settings.region;this.bindEvents([[s,"change:id",this._rerender],[s,"change:suggestedRegion",this._rerender]]),s.disabledSuggested()||s.fetchSuggested()},t.RegionFilter.prototype=$.extend({},i.prototype,{template:"region_filter",modalClass:"RegionFilterModal",_render:function(){var t,s=e.settings.region,a=s.hasRegion();t=a?s.getId():s.hasPrevRegion()?s.prevId:s.suggestedRegion,i.prototype._render.call(this,{hasActiveRegion:a,hasRegion:t,iconURL:t&&s.getSmallIconURL(t),regionName:s.getName(t),isAllRegion:!t||t===s.getDefaultId()}),this._cacheElems(".js-region-filter",["switch"]),this.$switch.on("click",this._onSwitchClick.bind(this))},open:function(){e.pixel.fire("rgc","f",{iao:"web"!==e.duckbar.activeTabId?1:0}),i.prototype.open.call(this)},_onSwitchClick:function(t){t.preventDefault(),t.stopPropagation();var i,s,a=e.settings.region,o=(new Date).getTime();a.hasRegion()?(this.$switch.removeClass("is-on"),i=a.getDefaultId(),s="off"):(this.$switch.addClass("is-on"),i=a.getPrevId()||a.suggestedRegion,s="on");var n=!a.getPrevId()&&a.getId()===a.getDefaultId();e.pixel.fire("rgc","s",s,{fr:n?1:0}),a.setId(i,{saveToSettings:!0,fallbackToURLParam:!0},(function(){var t=(new Date).getTime()-o;setTimeout((function(){e.search.requery()}),Math.min(DDG.animation_speed-t,0))}))}})}(DDG),function(e){var t=e.Views.Dropdowns,i=e.Views.Modal,s="is-highlighted";t.RegionFilterModal=function(t){t.model=e.settings.region,i.call(this,t),this.bindEvents([[e.keyboard,"up.modal",this._onUpArrow],[e.keyboard,"down.modal",this._onDownArrow],[e.keyboard,"enter.modal",this._onEnter]])},t.RegionFilterModal.prototype=$.extend({},i.prototype,{template:"region_filter_modal",cursorIndex:-1,hide:function(){i.prototype.hide.call(this),this._unfocusKeyboard()},show:function(){i.prototype.show.call(this),e.device.isMobileDevice||this.$input.focus()},pointAt:function(e){i.prototype.pointAt.call(this,e),this._top=parseInt(this.$list.offset().top,10)},_render:function(e){this._allRegions=this.model.getAll(),i.prototype._render.call(this,$.extend({hasRegionOrSuggested:this.model.hasRegionOrSuggested()},e)),this._cacheElems(".js-region-filter",["list","input","clear"]),this._renderRegions(),this.$input.keyup(this._onInputKeyUp.bind(this)),this.$input.click(this._onInputClick.bind(this)),this.$clear.click(this._onClearClick.bind(this))},_renderRegions:function(){var t=this._filteredRegions||this._allRegions;this._highlightIdx=-1,t&&t.length?(this.$list.html(e.exec_template("region_filter_modal_items",{regions:t,showListHeader:e.device.isMobile&&this.model.hasRegionOrSuggested()&&!this._filteredRegions})),this.$links=this.$(".js-region-filter-link"),this.$list.find(".js-region-filter-clear").on("click",this._onClearClick.bind(this)),this.$links.on("mouseenter touchstart",this._onItemMouseEnter.bind(this)).on("mouseleave",this._onItemMouseLeave.bind(this)).click(this._onRegionClick.bind(this))):this.$list.empty()},_clearFilter:function(){this._filteredRegions&&(delete this._filteredRegions,this._renderRegions()),this.$input.val("")},_updateHighlightedItem:function(){if(this.$(".is-highlighted").removeClass(s),-1===this._highlightIdx)this.$input.focus();else{var e=this.$links[this._highlightIdx];if(e){var t=$(e),i=t.outerHeight(),a=parseInt(t.offset().top,10),o=a+i;t.addClass(s),o>=this._top+300?this.$list.scrollTop(this.$list.scrollTop()+i):a-1,r=n?"d":l?"p":"n";s=!a.getPrevId()&&a.getId()===o,e.pixel.fire("rgc",i,r,{fr:s?1:0})},_onInputKeyUp:function(t){if(e.keyboard.keyCodeIsOneOf(t.keyCode,["up","down","enter","escape"]))return!1;var i=this.$input.val().toLowerCase();i?this._filteredRegions=this._allRegions.filter((function(e){return e.name.toLowerCase().indexOf(i.toLowerCase())>-1})):delete this._filteredRegions,e.pixel.fire("rgc","ku"),this._renderRegions()},_onItemMouseEnter:function(e){if(!this._keyboardFocus){var t=$(e.target),i=parseInt(t.data("index"),10);$.isNumeric(i)&&this.highlightIdx!==i&&(this._highlightIdx=i,this._updateHighlightedItem())}},_onItemMouseLeave:function(e){if(!this._keyboardFocus){var t=$(e.target),i=parseInt(t.data("index"),10);$.isNumeric(i)&&this.highlightIdx===i&&(this._highlightIdx=-1,this._updateHighlightedItem())}},_onMouseMove:function(){this._unfocusKeyboard()},_onUpArrow:function(){this._highlightIdx--,this._focusKeyboard(),this._highlightIdx=Math.max(this._highlightIdx,-1),this._updateHighlightedItem()},_onDownArrow:function(){this._highlightIdx++,this._focusKeyboard(),this._highlightIdx=Math.min(this._highlightIdx,this.$links.length-1),this._updateHighlightedItem()},_onEnter:function(){var t;if(this._highlightIdx>-1?t=this._highlightIdx:this._filteredRegions&&1===this._filteredRegions.length&&(t=0),$.isNumeric(t)){var i=this.$links[t],s=$(i).data("id");this._sendRegionSelectedPixel(s,"ei"),this.model.setId(s,{saveToSettings:!0,fallbackToURLParam:!0},(function(){e.search.requery()}))}},_onInputClick:function(e){e.stopPropagation()},_onClearClick:function(t){t.preventDefault(),e.pixel.fire("rgc","cl"),this.model.reset(function(){this.model.disableSuggested((function(){e.search.requery()}))}.bind(this))},_onRegionClick:function(t){var i=$(t.target),s=i.data("id")||i.parent().data("id");this._sendRegionSelectedPixel(s,"ci"),this.model.setId(s,{saveToSettings:!0,fallbackToURLParam:!0},function(){this.hide(),e.search.requery()}.bind(this))}})}(DDG),function(e){var t=e.Views.Dropdowns,i=e.Views.Dropdowns.Base;t.SafeSearchFilter=function(t){t.model=e.settings.safeSearch,i.call(this,t),this.bindEvents([[this.model,"change:id",this._rerender]]),this.modalOps={entryPoint:t.entryPoint||"of"}},t.SafeSearchFilter.prototype=$.extend({},i.prototype,{modalClass:"SafeSearchFilterModal",_render:function(e){(e=e||{}).isActive=this.model.isActive(),e.key="safe-search",e.buttonContent=l("Safe search:")+" "+(this.model.getName()||"").toLowerCase(),i.prototype._render.call(this,e)}})}(DDG),function(e){var t=e.Views.Dropdowns,i=e.Views.Modal;t.SafeSearchFilterModal=function(t){this.entryPoint=t.entryPoint,t.model=e.settings.safeSearch,i.call(this,t)},t.SafeSearchFilterModal.prototype=$.extend({},i.prototype,{template:"dropdown_modal",_render:function(e){i.prototype._render.call(this,{isPopover:e.isPopover,header:e.isPopover&&l("Safe Search"),showDescriptions:!0,values:this.model.getAll(),key:"safe-search"}),this.$(".js-dropdown-items").click(this._onFilterClick.bind(this))},_onFilterClick:function(t){var i=$(t.currentTarget).attr("data-value");this.model.setId(i,(function(){e.search.requery()})),e.pixel.fire("sss","f",{v:e.settings.safeSearch.getId(),ep:this.entryPoint})}})}(DDG),function(e){var t=e.Views.Dropdowns,i=e.Views.Dropdowns.Base;t.SportsWeekFilter=function(e){this.modalOps={horizontalPos:"left",verticalPos:"bottom",model:e.model},e=$.extend({},e,this.modalOps),i.call(this,e)},t.SportsWeekFilter.prototype=$.extend({},i.prototype,{modalClass:"SportsWeekFilterModal",_render:function(e){var t=(e=e||this.modalOps).model.getSelectedWeek();e.key="sports-season-weeks",e.buttonContent=t.name,i.prototype._render.call(this,e),this.bindEvents([[this.model,"selectedWeekChange",this._rerender]])},_rerender:function(){this.unbindEvents(),i.prototype._rerender.call(this)},open:function(){this.model.engaged(),i.prototype.open.call(this)}})}(DDG),function(e){var t=e.Views.Dropdowns,i=e.Views.Modal;t.SportsWeekFilterModal=function(e){this.modalOps=e,i.call(this,e)},t.SportsWeekFilterModal.prototype=$.extend({},i.prototype,{template:"dropdown_modal",_render:function(e){e=e||this.modalOps,i.prototype._render.call(this,{isPopover:e.isPopover,header:e.isPopover&&"Season Weeks",values:e.model.season,key:"sports-season-weeks"}),this._cacheElems(".js-dropdown",["items"]),this.bindEvents([[this.$items,"click",this._onFilterClick.bind(this)],[this.modalOps.model,"selectedWeekChange",this._rerender]])},_onFilterClick:function(e){e.preventDefault(),e.stopImmediatePropagation();var t=$(e.target).attr("data-value");this.modalOps.model.changeSeasonWeek(t)},_rerender:function(){this.unbindEvents(),i.prototype._rerender.call(this)}})}(DDG),function(e){var t=e.Views.Base;e.Views.UserLocation.UserLocationBadge=function(i){i.model=e.userLocator,this.isProximityQuery=!!i.isProximityQuery||!1,this._onExpandedMap=i.onExpandedMap||!1,this.$dropdownAppendEl=i.$originEl,t.call(this,i),e.pixel.fire("lti")},e.Views.UserLocation.UserLocationBadge.prototype=$.extend({},t.prototype,{template:"user_location_badge",_render:function(i){t.prototype._render.call(this,i),this.views.dropdown=new e.Views.UserLocation.UserLocationDropdown({appendTo:this.$dropdownAppendEl,onExpandedMap:this._onExpandedMap}),this.views.dropdown.setTrigger(this.$el),this._cacheElems(".js-user-loc-badge",["btn-loc","btn-loc-icon","btn-close","desc"]),this.bindEvents([[this.$el,"click",this._onClick.bind(this)],[this.model,"change:waitingForLocation",this._onWaitingForLocationChange],[this.model,"change:errorGettingLocation",this._onErrorGettingLocationChange],[this.model.userLocation,"change:desc",this._setLocationDesc],[this.views.dropdown,"hidden",this._onDropdownHidden.bind(this)],[this.views.dropdown,"shown",this._onDropdownShown.bind(this)],[this.model,"meaningfulUserLocationChange",this._onUserLocationChange.bind(this)]]),this._updateStyle(),this._setLocationDesc(),this.showUserLocationCTA()},_onDropdownHidden:function(e){this.$btnclose.addClass("is-hidden"),this.$btnloc.removeClass("is-hidden"),this.$desc.removeClass("is-hidden"),this._onExpandedMap&&(this.$parent.css("z-index",1),$(".js-vertical-map").css("overflow-y","scroll"))},_onDropdownShown:function(e){this.$btnclose.removeClass("is-hidden"),this.$btnloc.addClass("is-hidden"),this.$desc.addClass("is-hidden"),this._onExpandedMap&&(this.$parent.css("z-index",201),$(".js-vertical-map").css("overflow-y","hidden"))},_updateStyle:function(){this.model.hasLocation()?this.$btnloc.addClass("loc-enabled"):this.$btnloc.removeClass("loc-enabled")},_onClick:function(t){e.pixel.fire("ltc"),this.views.dropdown.toggle({triggeredBy:"badgeClick"})},_onErrorGettingLocationChange:function(e){e&&"bg"!==this.model.lastUpdateType&&"implicit"!==this.model.lastUpdateType&&this.views.dropdown.show({triggeredBy:"errorGettingLocation"})},_onWaitingForLocationChange:function(t){t?(this.$spinner=e.$exec_template("spinner",{className:"user-loc-badge__spinner"}),this.$btnlocicon.addClass("is-hidden"),this.$btnloc.append(this.$spinner),this.views.dropdown.hide({triggeredBy:"waitingForLocation"})):this.$spinner&&(this.$spinner.remove(),this.$btnlocicon.removeClass("is-hidden"),delete this.$spinner),this._setLocationDesc()},_onUserLocationChange:function(t){!this._onExpandedMap&&this.$el.is(":visible")&&(w.location.search=e.Utils.Strings.setSearchParameter(w.location.search,"ia","places")),this._updateStyle()},_getDesc:function(){var e="";if(this.model.waitingForLocation)e=this.model.hasLocation()?lp("precise_user_location","Updating location..."):lp("precise_user_location","Waiting for Location...");else{var t=this.model.hasLocation()&&this.model.userLocation.desc||"";t.length&&(e=lp("precise_user_location","Results near")+"
                "+t)}return e},_setLocationDesc:function(){var e=this._getDesc();e.length&&!this._onExpandedMap&&(this.isProximityQuery||this.model.waitingForLocation)?(this.$desc.html(e),this.$desc.addClass("can-show")):this.$desc.removeClass("can-show")},_triggerImplicitAsk:function(){e.device.isAndroid&&e.device.isDDGApp||(this.views.notification=new e.Views.UserLocation.UserLocationNotification),this.model.updateLocation({force:!0,updateType:"implicit"})},_mapVisibleCheck:function(){var t=!1,i=document.querySelector(".js-places-multiple-map");this._mapObserver=new e.Utils.IsIntoViewObserver(i,{threshold:.8},function(e){e&&(t=!0,this._triggerImplicitAsk(),this._mapObserver.destroy())}.bind(this)),setTimeout(function(){!t&&this.views.dropdown.show({triggeredBy:"explicitTrigger"}),this._mapObserver&&this._mapObserver.destroy()}.bind(this),1e3)},showUserLocationCTA:function(){this.model.canGetLocation()&&(this.model.hasLocation()&&this.isProximityQuery?this.model.updateLocation({updateType:"bg"}):this.isProximityQuery&&e.settings.isDefault("kat")&&!e.search.isNavigational&&this._mapVisibleCheck())}})}(DDG),function(e){var t=e.Views.Base;e.Views.UserLocation.UserLocationTile=function(i){i.model=e.userLocator,this.position=i.position,this.answer=i.answer,this._constrainChildren=i.constrainChildren,this.$tooltipAppendEl=i.$originEl,this._onExpandedMap=i.onExpandedMap||this.answer&&this.answer.isMapExpanded,t.call(this,i),e.pixel.fire("lti")},e.Views.UserLocation.UserLocationTile.prototype=$.extend({},t.prototype,{template:"user_location_tile",_render:function(){t.prototype._render.call(this,{position:this.position}),this._cacheElems(".js-user-loc-tile",["icons","down","marker","button"]),this.views.userLocationTooltip=new e.Views.UserLocation.UserLocationTooltip({appendTo:this.$tooltipAppendEl,position:this.position,$positionAgainst:this.$button,constrain:this._constrainChildren,afterShow:this._afterTooltipShow.bind(this),afterHide:this._afterTooltipHide.bind(this)}),e.userLocator.hasLocation()&&(this.$marker.addClass("tx-clr--blue-light"),this.$button.attr("data-tooltip-text",lp("precise_user_location","Anonymous location enabled"))),this.bindEvents([[this.$el,"click",this._onTileClick],[this.$button,"mouseenter",this._onMouseEnter],[this.$button,"mouseleave",this._onMouseLeave],[this.model,"change:waitingForLocation",this._onWaitingForLocation],[this.model,"meaningfulUserLocationChange",this._onUserLocationChange]]),this.showUserLocationCTA()},_onTileClick:function(t){t.stopPropagation(),e.pixel.fire("ltc"),this.$button.removeClass("simple-tooltip"),this.views.userLocationTooltip.isVisible()?this.views.userLocationTooltip.onDismissClick(t):this.views.userLocationTooltip.showTooltip({source:"userInteraction"})},_onUserLocationChange:function(){!this._onExpandedMap&&this.$el.is(":visible")&&(w.location.search=e.Utils.Strings.setSearchParameter(w.location.search,"ia","places")),e.userLocator.hasLocation()?(this.$marker.addClass("tx-clr--blue-light"),this.$button.attr("data-tooltip-text",lp("precise_user_location","Anonymous location enabled"))):(this.$marker.removeClass("tx-clr--blue-light"),this.$button.attr("data-tooltip-text",lp("precise_user_location","Find results closer to you")))},_onWaitingForLocation:function(t){t?(this.$spinner=e.$exec_template("spinner"),this.$icons.addClass("is-hidden"),this.$button.append(this.$spinner)):this.$spinner&&(this.$spinner.remove(),this.$icons.removeClass("is-hidden"),delete this.$spinner)},_afterTooltipShow:function(){e.device.isMobile||(this.model.hasLocation()&&this.$button.attr("data-tooltip-text",lp("precise_user_location","Anonymous location enabled")),this.$button.removeClass("simple-tooltip"))},_afterTooltipHide:function(){e.device.isMobile||this.$button.addClass("simple-tooltip")},showUserLocationCTA:function(){e.userLocator.canGetLocation()&&(e.userLocator.hasLocation()&&this.answer.proximity?e.userLocator.updateLocation({updateType:"bg"}):this.answer.proximity&&e.settings.isDefault("kat")&&!e.search.isNavigational&&this.views.userLocationTooltip.showTooltip({delay:500}))}})}(DDG),function(e){var t=e.Views.Base;e.Views.UserLocation.UserLocationTooltipContent=function(i){i.model=e.userLocator,this.device=i.device||e.device,this.updateType="cta",this.showDesc=i.showDesc,t.call(this,i)},e.Views.UserLocation.UserLocationTooltipContent.prototype=$.extend({},t.prototype,{template:"user_location_tooltip_content",_render:function(){t.prototype._render.call(this,this._getRenderOps()),this._cacheElems(".js-user-loc-content",["copy","help","buttons"]),this.views.buttons=new e.Views.UserLocation.UserLocationButton({clickPixel:"lctac",updateType:"cta",updateButton:this.model.hasLocation(),appendTo:this.$buttons}),this.bindEvents([[this.model,"change:retryLocation",this._onRetryLocationChange],[this.model,"change:errorGettingLocation",this._rerender.bind(this)],[this.model,"change:problemUpdatingLocation",this._rerender.bind(this)],[this.model.userLocation,"change:desc",this._rerender.bind(this)],[this.model,"meaningfulUserLocationChange",this._rerender.bind(this)],[this.$help,"click",this._onHelpClick]])},_rerender:function(){this.unbindEvents(),t.prototype._rerender.call(this)},_getInstructions:function(){var e=null;return this.device.isAndroid?e=this.device.isDDGApp&&this.device.isEnglish?[lp("precise_user_location","Enable the Location setting on your phone."),lp("precise_user_location","Tap the vertical dots in the DuckDuckGo app."),lp("precise_user_location","Select Settings > Location."),lp("precise_user_location","Enable 'Sites can ask for my location.'"),lp("precise_user_location","Return to duckduckgo.com and allow permission.")]:this.device.isChrome||this.device.isBrave?["Tap the lock icon on the address bar.","Go to 'Site Settings'.","Ensure 'Location' is set to allow.","Reload DuckDuckGo, and try again."]:["Open the Settings app.","Open 'Location', and ensure location is enabled.","Navigate to Settings > Apps.","Ensure your browser is allowed location access.","Reload DuckDuckGo, and try again."]:this.device.isIDevice?e=["Open the Settings app.","Open 'Privacy', then 'Location Services'.","Ensure 'Location Services' is enabled.","Scroll down and locate your browser in the list.","Ensure your browser is allowed location access.","Reload DuckDuckGo, and try again."]:(this.device.isBrave||this.device.isChrome||this.device.isFirefox)&&(this.device.isWindows||this.device.isOSX)?e=["Click the lock icon on the address bar.","Ensure location access is allowed.","Reload DuckDuckGo, and try again."]:this.device.isOSX&&this.device.isSafari&&(e=["Select 'Settings for this Website...' from the Safari menu.","Ensure 'Allow' is selected for the 'Location' setting.","Reload DuckDuckGo, and try again."]),e},_getRenderOps:function(){return this.model.errorGettingLocation?{locError:!0,instructions:this._getInstructions()}:this.model.problemUpdatingLocation?{locUpdProblem:!0,desc:this.showDesc?this.model.userLocation.desc:""}:this.model.hasLocation()?{locSet:!0,desc:this.showDesc?this.model.userLocation.desc:""}:(this.model.hasLocation(),{locUnset:!0})},_onHelpClick:function(){e.pixel.fire("lhc",this.updateType)},_onRetryLocationChange:function(){this.model.retryLocation&&(e.settings.clear("kat",{saveToCookie:!0,saveToCloud:!1}),"manual"===this.model.retryLocation?this.views.buttons.requestManualLocation():"precise"===this.model.retryLocation&&this.views.buttons.requestPreciseLocation("survey","lctar"))},hide:function(){this.$el.addClass("is-hidden")},show:function(){this.$el.removeClass("is-hidden")}})}(DDG),function(e){var t=e.Views.Base;e.Views.UserLocation.UserLocationTooltip=function(i){i.model=e.userLocator,this.position=i.position,this.$positionAgainst=i.$positionAgainst,this._constrain=i.constrain,this._afterShow=i.afterShow,this._afterHide=i.afterHide,this._hasFired=!1,this._showSource=null,t.call(this,i)},e.Views.UserLocation.UserLocationTooltip.prototype=$.extend({},t.prototype,{template:"user_location_tooltip",_render:function(){t.prototype._render.call(this),this._cacheElems(".js-user-loc-tooltip",["triangle-outer","triangle-inner","more","dismiss","inner"]),this.views.content=new e.Views.UserLocation.UserLocationTooltipContent({appendTo:this.$inner,showDesc:"below-left"!==this.position}),this._updateArrowStyle(),this.bindEvents([[this.$dismiss,"click",this.onDismissClick],[this.model,"change:userLocation",this._onCurrentLocationChange],[this.model,"change:errorGettingLocation",this._onErrorGettingLocationChange],[this.model,"successGettingLocation",this._onSuccessGettingLocation],[e.history,"popstate",this._onStateChange],[e.router,"navigate",this._onStateChange],[e.settings,"change:kae",this._updateArrowStyle]])},onDismissClick:function(t){t.preventDefault();var i=$(t.delegateTarget).closest(".js-user-loc-tile").length?"tile":"tooltipX";!this.model.hasLocation()&&e.settings.isDefault("kat")&&"userInteraction"!==this._showSource&&(e.pixel.fire("lctax"),this.model.disableLocAsk()),this._hideTooltip(i)},_hideTooltip:function(t){t=t||"other",e.pixel.fire("lctah",t),this.$el.removeClass("user-loc-tooltip--animation"),this.$el.fadeOut(200,function(){this._afterHide()}.bind(this)),e.$doc.off("click.pul-tooltip")},_updateArrowStyle:function(){this.model.errorGettingLocation?e.settings.isDarkTheme()?this.$triangleinner.css({borderBottomColor:"#171818"}):this.$triangleinner.css({borderBottomColor:"#f0f3f5"}):this.$triangleinner.css({borderBottomColor:""})},_handleDocClick:function(e){0===$(e.target).closest(this.$el).length&&this._hideTooltip("outsideClick")},_onCurrentLocationChange:function(){this.model.hasLocation()&&this._hideTooltip("currentLocationChange")},_onErrorGettingLocationChange:function(e){this._updateArrowStyle(),"implicit"===this.model.lastUpdateType&&1===e&&this._hideTooltip(this.model.lastUpdateType)},_onSuccessGettingLocation:function(){this._hideTooltip("successGettingLocationChange")},_onStateChange:function(){!this.$parent.is(":visible")&&this._hideTooltip("stateChange")},isVisible:function(){return this.$el.is(":visible")},showTooltip:function(t){if(t=$.extend({delay:0,source:"auto"},t),this._showSource=t.source,this.$parent.is(":visible")){this._hasFired||(e.pixel.fire("lctai"),this._hasFired=!0),e.$doc.on("click.pul-tooltip",this._handleDocClick.bind(this)),this.$el.addClass("user-loc-tooltip--"+this.position);var i=this.$positionAgainst.parent().parent().position().top,s=this.$positionAgainst.outerHeight()+i,a=this.$positionAgainst.outerWidth()/2+i;"below"===this.position?a-=2*a:"below-left"===this.position&&(a+=2*i),this._constrain&&this.$el.addClass("tooltip-constrained"),this.$el.css({top:s,right:a}),t.delay?setTimeout(function(){this.$el.fadeIn(400,function(){this._afterShow()}.bind(this)),this.$el.addClass("user-loc-tooltip--animation")}.bind(this),t.delay):this.$el.fadeIn(200,function(){this._afterShow()}.bind(this))}}})}(DDG),function(e){var t=e.Views.Modal;e.Views.UserLocation.UserLocationDropdown=function(i){i.model=e.userLocator,this._onExpandedMap=i.onExpandedMap,i._triggerEvents=this._onExpandedMap?["mousedown.modal","touchstart.modal"]:["click.modal"],this._lastShowTrigger="other",t.call(this,i)},e.Views.UserLocation.UserLocationDropdown.prototype=$.extend({},t.prototype,{template:"user_location_dropdown",_render:function(i){t.prototype._render.call(this,i),this.bindEvents([[e.router,"navigate",this._onStateChange]]),this.views.content=new e.Views.UserLocation.UserLocationContent({appendTo:this.$el,dismiss:this.hide.bind(this),onExpandedMap:this._onExpandedMap})},_onStateChange:function(){this.hide({triggeredBy:"navigation"})},_handleClick:function(e){Boolean(this.$el.has(e.target).length)||this.hide()},_formatShowHideOps:function(e){return $.extend({triggeredBy:"other"},e)},show:function(i){i=this._formatShowHideOps(i),this._lastShowTrigger=i.triggeredBy,this.isShowing||e.pixel.fire("lctas",i.triggeredBy),e.$doc.on(this._triggerEvents,this._handleClick.bind(this)),t.prototype.show.call(this)},hide:function(i){i=this._formatShowHideOps(i),this.isShowing&&e.pixel.fire("lctah",i.triggeredBy),e.$doc.off(this._triggerEvents,this._handleClick.bind(this)),t.prototype.hide.call(this),!this.model.hasLocation()&&e.settings.isDefault("kat")&&"explicitTrigger"===this._lastShowTrigger&&"other"!==i.triggeredBy&&(e.pixel.fire("lctax"),this.model.disableLocAsk())}})}(DDG),function(e){var t=e.Views.Base;e.Views.UserLocation.UserLocationContent=function(i){i.model=e.userLocator,this.dismiss=i.dismiss,this.device=e.device,this._locFetchAttempt=!1,this._onExpandedMap=i.onExpandedMap,t.call(this,i)},e.Views.UserLocation.UserLocationContent.prototype=$.extend({},t.prototype,{template:"user_location_content",_requestPreciseLocation:function(e){this.model.updateLocation({force:!0,updateType:e})},_requestManualLocation:function(t){this._locFetchAttempt||this.model.geoipLocation||this.model.hasLocation()?(this.views.manualModal||(this.views.manualModal=new e.Views.UserLocation.ManualUserLocationModal({model:this.model,appendTo:"body",onExpandedMap:this._onExpandedMap})),this.views.manualModal.show()):(this._locFetchAttempt=!0,this.model.fetchGeoIPLocation(function(e){e&&this._requestManualLocation()}.bind(this)))},_render:function(e){var i=this._getRenderOps();t.prototype._render.call(this,$.extend({},e,i)),this._cacheElems(".js-user-loc-content",["header","copy","alt-manual","alt-precise","btn-cancel","btn-enable","btn-manual","btn-update","btn-clear","btn-dismiss"]),this.bindEvents([[this.model,"change:waitingForLocation",this._rerender.bind(this)],[this.model,"change:errorGettingLocation",this._rerender.bind(this)],[this.model,"meaningfulUserLocationChange",this._rerender.bind(this)],[this.model.userLocation,"change:desc",this._rerender.bind(this)],[this.$altmanual,"click",this._onAltManualClick.bind(this)],[this.$altprecise,"click",this._onAltPreciseClick.bind(this)],[this.$btncancel,"click",this._onCancelClick],[this.$btnenable,"click",this._onPreciseLocationClick],[this.$btnmanual,"click",this._onManualLocationClick],[this.$btnupdate,"click",this._onUpdateLocationClick],[this.$btnclear,"click",this._onClearClick],[this.$btndismiss,"click",this._onDismissClick]])},_rerender:function(){this.unbindEvents(),t.prototype._rerender.call(this)},_getRenderOps:function(){var e;if(this.model.errorGettingLocation){var t=this._getInstructions();e={state:"locError",list:t.list,additional:t.additional}}else e=this.model.hasLocation()?{state:"locSet",waiting:this.model.waitingForLocation,locType:this.model.userLocation.type,desc:this.model.userLocation.desc}:{state:"locUnset",waiting:this.model.waitingForLocation};return e},_getInstructions:function(){var e={list:[],additional:""};return this.device.isAndroid?(this.device.isDDGApp&&this.device.isEnglish?e.list=[lp("precise_user_location","Enable the Location setting on your phone."),lp("precise_user_location","Tap the vertical dots in the DuckDuckGo app."),lp("precise_user_location","Select Settings > Location."),lp("precise_user_location","Enable 'Sites can ask for my location.'"),lp("precise_user_location","Return to duckduckgo.com and allow permission.")]:this.device.isChrome||this.device.isBrave?e.list=[lp("precise_user_location","Tap the %slock icon%s on the address bar.","",""),lp("precise_user_location","Go to 'Site Settings'."),lp("precise_user_location","Ensure 'Location' is set to %sallow%s.","",""),lp("precise_user_location","%sReload%s DuckDuckGo, and try again.","","")]:e.list=[lp("precise_user_location","Open the %sSettings app%s.","",""),lp("precise_user_location","Open 'Location', and ensure location is %senabled%s.","",""),lp("precise_user_location","Navigate to Setting > Apps."),lp("precise_user_location","Ensure your browser is allowed location access."),lp("precise_user_location","%sReload%s DuckDuckGo, and try again.","","")],e.additional=lp("precise_user_location","If the browser location remains unavailable, then in your browser go to %s⋮ > Menu > Settings > Site settings > Location%s, and ensure DuckDuckGo is allowed location access.","","")):this.device.isIDevice?(e.list=[lp("precise_user_location","Open the %sSettings%s app.","",""),lp("precise_user_location","Open 'Privacy', then 'Location Services'."),lp("precise_user_location","Ensure 'Location Services' is %senabled%s.","",""),lp("precise_user_location","Scroll down and locate %syour browser%s in the list.","",""),lp("precise_user_location","Ensure your browser is allowed %slocation access%s.","",""),lp("precise_user_location","%sReload%s DuckDuckGo, and try again.","","")],e.additional=lp("precise_user_location","If the browser location remains unavailable, then go to %sSettings > General > Reset > 'Reset Location & Privacy'%s.","","")):(this.device.isBrave||this.device.isChrome||this.device.isFirefox)&&(this.device.isWindows||this.device.isOSX)?e.list=[lp("precise_user_location","Click the %slock icon%s on the address bar.","",""),lp("precise_user_location","Ensure location access is %sallowed%s.","",""),lp("precise_user_location","%sReload%s DuckDuckGo, and try again.","","")]:this.device.isOSX&&this.device.isSafari&&(e.list=[lp("precise_user_location","Select %s'Setting for this Website...'%s from the Safari menu.","",""),lp("precise_user_location","Ensure %s'Allow'%s is selected for the 'Location' setting.","",""),lp("precise_user_location","%sReload%s DuckDuckGo, and try again.","","")]),e},_onAltManualClick:function(){this._requestManualLocation()},_onAltPreciseClick:function(){this._requestPreciseLocation("explicit")},_onPreciseLocationClick:function(){this.model.waitingForLocation||this._requestPreciseLocation("explicit")},_onDismissClick:function(){this.model.set("errorGettingLocation",!1),this.model.userLocation.type!==e.Models.UserLocation.MANUAL_LOCATION?this.dismiss({triggeredBy:"dismissButton"}):this.dismiss({triggeredBy:"setManuallyButton"})},_onManualLocationClick:function(){this.model.waitingForLocation||(this._requestManualLocation(),this._onDismissClick())},_onUpdateLocationClick:function(){this.model.waitingForLocation||(this.model.userLocation.type===e.Models.UserLocation.MANUAL_LOCATION?this._requestManualLocation():(this._requestPreciseLocation("user"),this.dismiss({triggeredBy:"updateButton"})))},_onCancelClick:function(){this.model.cancelLocation()},_onClearClick:function(){this.model.hasLocation()&&this.model.clearLocation(),this.model.disableLocAsk(),this.dismiss({triggeredBy:"clearButton"})}})}(DDG),function(e){var t=e.Views.Base;e.Views.UserLocation.UserLocationButton=function(i){i.model=i.model||e.userLocator,this.updateButton=i.updateButton,this.clickPixel=i.clickPixel,this.updateType=i.updateType,t.call(this,i)},e.Views.UserLocation.UserLocationButton.prototype=$.extend({},t.prototype,{template:"user_location_button",requestPreciseLocation:function(t,i){this.model.updateLocation({force:!0,updateType:t||this.updateType}),e.pixel.fire(i||this.clickPixel)},requestManualLocation:function(){e.pixel.fire("lmm"),this.views.modal||(this.views.modal=new e.Views.UserLocation.ManualUserLocationModal({model:this.model,appendTo:"body"})),this.views.modal.show()},_render:function(){t.prototype._render.call(this,{waiting:this.model.waitingForLocation,showManualLocationButton:!this.updateButton,highlightManualLocationButton:this.model.errorGettingLocation,update:this.updateButton,problemUpdatingLocation:this.model.problemUpdatingLocation}),this._cacheElems(".js-user-loc-btn",["cancel","enable","manual","update","clear"]),this.bindEvents([[this.model,"change:errorGettingLocation",this._onErrorGettingLocationChange],[this.model,"change:problemUpdatingLocation",this._onProblemUpdatingLocation],[this.model,"meaningfulUserLocationChange",this._rerender.bind(this)],[this.model,"change:waitingForLocation",this._onWaitingForLocationChange],[this.$cancel,"click",this._onCancelClick],[this.$enable,"click",this._onPreciseLocationClick],[this.$manual,"click",this._onManualLocationClick],[this.$update,"click",this._onUpdateLocationClick],[this.$clear,"click",this._onClearClick]])},_rerender:function(){this.unbindEvents(),t.prototype._rerender.call(this)},_onPreciseLocationClick:function(){this.model.waitingForLocation||this.requestPreciseLocation()},_onManualLocationClick:function(){this.model.waitingForLocation||this.requestManualLocation()},_onUpdateLocationClick:function(){this.model.waitingForLocation||(this.model.problemUpdatingLocation||this.model.userLocation.type===e.Models.UserLocation.MANUAL_LOCATION?this.requestManualLocation():this.requestPreciseLocation())},_onCancelClick:function(){this.model.cancelLocation()},_onClearClick:function(){e.userLocator.hasLocation()&&(e.userLocator.clearLocation(),e.pixel.fire("lfmx")),e.userLocator.disableLocAsk()},_onWaitingForLocationChange:function(){this._rerender()},_onErrorGettingLocationChange:function(){this._rerender()},_onProblemUpdatingLocation:function(){this._rerender()}})}(DDG),function(e){var t=e.Views.Modal;e.Views.UserLocation.ManualUserLocationModal=function(i){i.appendTo=i.appendTo||".js-site-wrapper",this._onExpandedMap=i.onExpandedMap;var s=i.model.userLocation;this._zoomLevel=14,!i.model.hasLocation()&&i.model.geoipLocation&&(s=i.model.geoipLocation,this._zoomLevel=10),this._mapModel=new e.Models.GLMap({selectedLocation:s}),this._initialPositionChanged=!1,t.call(this,i)},e.Views.UserLocation.ManualUserLocationModal.prototype=$.extend({},t.prototype,{template:"manual_user_location_modal",show:function(){t.prototype.show.call(this),this.views.map?this.views.map.show():this.views.map=new e.Views.Mapkit.PositionPicker({appendTo:this.$map,model:this._mapModel,zoomLevel:this._zoomLevel}),this._toggleScroll(),this._updateCloseButtonTheme(),e.pixel.fire("lmm")},hide:function(i){t.prototype.hide.call(this),this.views.map&&this.views.map.hide(),!1!==i&&e.pixel.fire("lmmh"),this._toggleScroll()},_render:function(e){t.prototype._render.call(this,e),this._cacheElems(".js-manual-user-location",["map","map-controls","done-btn","close"]),this.bindEvents([[this.$donebtn,"click",this._onPositionPicked],[this._mapModel,"change:selectedLocation",this._onPositionChanged]])},_toggleScroll:function(){e.$html.toggleClass("disable-place-scroll",!!this.isShowing)},_updateCloseButtonTheme:function(){var t="map-control__btn--darkmap";this.isDarkMap=e.settings.isDarkTheme(),this.isDarkMap?this.$close.addClass(t):this.$close.removeClass(t)},_onPositionChanged:function(){this._initialPositionChanged=!0,this.$donebtn.removeClass("is-disabled")},_onPositionPicked:function(){this._initialPositionChanged&&this._mapModel.selectedLocation&&(e.settings.set(e.settings.LOCATION_SETTING_KEY,1,{saveToCookie:!0}),e.geo.fetchBucketData(this._mapModel.selectedLocation,function(){this.model.setLocation(this._mapModel.selectedLocation),this._onExpandedMap&&this.model.userLocation.setDescByGeocoding((function(){this.model.setLocation(this.model.userLocation)})),e.pixel.fire("lmms"),setTimeout(function(){this.hide(!1)}.bind(this),50)}.bind(this)))}})}(DDG),function(e){var t=e.Views.Base;e.Views.UserLocation.UserLocationNotification=function(i){i=$.extend({appendTo:"body",model:e.userLocator},i),t.call(this,i)},e.Views.UserLocation.UserLocationNotification.prototype=$.extend({},t.prototype,{template:"user_location_notification",_render:function(e){t.prototype._render.call(this,e),this._cacheElems(".js-user-loc-notification",[]),this.bindEvents([[this.model,"change:waitingForLocation",this._onWaitingForLocationChange.bind(this)],[this.model,"change:errorGettingLocation",this._onErrorGettingLocationChange.bind(this)],[this.$el,"click",this._onClick.bind(this)]]),setTimeout(function(){this._show()}.bind(this),50)},_show:function(){this.$el.removeClass("is-hidden")},_onWaitingForLocationChange:function(e){e||this.destroy()},_onErrorGettingLocationChange:function(e){e&&this.destroy()},_onClick:function(){this.destroy()}})}(DDG),function(e){var t=e.Views.Base,i="search--focus",s="search--hover";e.Views.Maps.MapSearchbar=function(e){this._ops=e,this.directionsModel=e.directionsModel||null,this.directionsType=e.directionsType||null,this.initValue=e.initValue,this.model=e.model,this.model.hideSearchButton=!!this.directionsModel,this.directionsModel?this.model.searchFormPlaceholder="start"===this.directionsType?lp("maps_directions","Enter start location"):lp("maps_directions","Enter your destination"):this.model.searchFormPlaceholder="",t.call(this,this._ops),this.bindEvents([[this.model,"change:items",this._onItemsChange],[this.model.meta,"change:requery",this._onQueryChange],[this.model,"change:isMapStartActive",this._onMapStartActiveChange],[this.autocompleteModel,"change:suggestions",this._onAutocompleteSuggestionsChange],[this.directionsModel,"change:"+this.directionsType,this._onLocationChange],[this.directionsModel,"change:canRetryLocationSearch",this._onLocationChange]])},e.Views.Maps.MapSearchbar.prototype=$.extend({},t.prototype,{template:"map_searchbar",show:function(){this.$el.show()},hide:function(){this.$el.hide()},blur:function(){this.$searchinput&&this.$searchinput.blur()},focus:function(){this.$searchinput&&this.$searchinput.focus()},clearInput:function(){this.autocomplete&&(this.autocomplete.clear(),this.autocomplete.hide()),this.$searchinput.val("")&&this.$searchinput.focus(),this._updateClearButtonAndSearchbar(),this.directionsModel&&this.directionsModel.updateCanRouteStatus(this.directionsType,"")},getCurrentValue:function(){return this.$searchinput&&e.strip_all_html(this.$searchinput.val())},set:function(t){t&&(this.$searchinput.val(e.strip_all_html(t)),this._updateClearButtonAndSearchbar())},_render:function(){t.prototype._render.call(this,this._ops),this._cacheElems(".js-vertical-map",["search-button","search-clear","search-input","search"]),this.$body=$("body"),this.bindEvents([[this.$searchinput,"touchstart click",this._onInputFocus],[this.$searchinput,"focus",this._onInputFocus],[this.$searchinput,"blur",this._onInputBlur],[this.$searchinput,"keyup",this._onInputKeyUp],[this.$search,"submit",this._onSearchSubmit]]),Modernizr.touch?(this.$searchbutton.on("touchstart",this._onSearchButtonTouch.bind(this)),this.$searchclear.on("touchstart click",this._onClearClick.bind(this)),this.$search.on("touchstart",this._onInputFocus.bind(this))):(this.$searchclear.on("click",this._onClearClick.bind(this)),this.$search.on("click",this._onInputFocus.bind(this))),e.keyboard.on("escape.searchbar",this._onEscape.bind(this)),this._updateSearchButtonOnHover(),this.directionsModel?this.set(e.Utils.Strings.decodeHex(this.initValue)||""):this.set(e.Utils.Strings.decodeHex(this.model.meta.query||this.model.query)),this._updateClearButtonAndSearchbar(),this._initAutocomplete()},_initAutocomplete:function(){this.$searchinput&&!this.autocomplete&&(this.autocompleteModel=new e.Models.Maps.Autocomplete({answer:this.model}),this.autocomplete=new e.Views.AutoComplete({$input:this.$searchinput,$parentForm:this.$search,model:this.autocompleteModel,isTwoRowsText:!0}),this.$search.append(this.autocomplete.$el))},_updateSearchButtonOnHover:function(){this.$search.hover((function(){$(this).addClass(s)}),(function(){$(this).removeClass(s)}))},_updateSearchButton:function(){this.$searchinput.val()?this.$search.addClass(i):this.$search.removeClass(i)},_updateClearButtonAndSearchbar:function(){if(this.$searchinput){var t=this.$searchinput.val();e.device.isMobile&&this.$searchclear.val("×"),t&&""!==t?(this.$search.addClass("has-text"),this.$searchclear.removeClass("empty")):(this.$search.removeClass("has-text"),this.$searchclear.addClass("empty"))}},_resetNamespace:function(){"searchbar"===e.keyboard.namespace&&e.keyboard.set("namespace")},_onAutocompleteSuggestionsChange:function(){this.isFocused||this.autocomplete.hide()},_onClearClick:function(e){e.preventDefault(),e.stopPropagation(),this.directionsModel&&this.directionsModel.set(this.directionsType,null),this.clearInput()},_onEscape:function(e){this.autocomplete&&this.autocomplete.isVisible()&&this.autocomplete.hide(),this.$searchinput.blur()},_onQueryChange:function(t){t&&(this.directionsModel||this.set(e.Utils.Strings.decodeHex(t)))},_onLocationChange:function(){!this.directionsModel[this.directionsType]||this.directionsModel.canRetryLocationSearch&&!e.history.get("iaxm")||this.set(this.directionsModel[this.directionsType].display)},_onMapStartActiveChange:function(){this.directionsModel||(this.model.isMapStartActive?this.clearInput():(this.model.meta.requery||this.model.query)&&this.set(this.model.meta.requery||this.model.query))},_onItemsChange:function(){this._resetNamespace(),this.$searchinput.blur(),this.$searchbutton.blur(),this.autocomplete&&(this.autocomplete.clear(),this.autocomplete.hide())},_setNamespaceSearchbar:function(){var t=e.keyboard.namespace;(!t||"autocomplete"!==t&&"searchbar"!==t)&&e.keyboard.set("namespace","searchbar")},_onSearchButtonTouch:function(e){e.stopPropagation()},_onInputFocus:function(t){t.stopPropagation(),this._updateSearchButton(),!this.$searchinput.val()&&this.autocomplete?this.autocomplete.hide():this._setNamespaceSearchbar(),e.device.isMobileDevice&&this.$body.on("touchstart.searchbar",this._onTouchOut.bind(this)),this.emit("searchbar-focused"),this.isFocused=!0},_onInputBlur:function(t){this.$search.removeClass(i),this._resetNamespace(),e.device.isMobileDevice&&this.$body.off("touchstart.searchbar"),this.isFocused=!1},_onInputKeyUp:function(t){this._updateSearchButton(),this._updateClearButtonAndSearchbar(),this.directionsModel&&this.directionsModel.updateCanRouteStatus(this.directionsType,e.strip_all_html(this.$searchinput.val()))},_onTouchOut:function(e){e.stopPropagation(),this.$searchinput.blur()},_onSearchSubmit:function(t){if(t.preventDefault(),this.autocomplete.model.selectedSuggestion)delete this.autocomplete.model.selectedSuggestion;else{var i=this.$searchinput.val();if(i=e.strip_all_html(i),this.$searchinput.blur(),this.$searchbutton.blur(),this._resetNamespace(),this.autocomplete&&(this.autocomplete.clear(),this.autocomplete.hide()),this.directionsModel){if(this.directionsType){var s={};s[this.directionsType]={what:i},this.directionsModel.onDirectionsAction(s)}this.directionsModel.autocompleteLocation({loc:i,type:this.directionsType})}else this.model.set("shouldMapViewportUpdate",!0),this.model.set("isSearchAreaBtnVisible",!1),this.emit("requery-submit",{query:i,strict_bbox:"0"}),e.pixel.fire("map_ere"),e.pixel.fire("map_er","submit")}}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.MapSidebar=function(e){this.directionsModel=e.directionsModel,t.call(this,e),this.bindEvents([[this.model,"change:selectedItem",this._onSelectedItemChanged],[this.model,"change:isMapExpanded",this._onMapExpandedChanged],[this.model,"change:isDirectionsActive",this._onDirectionsActiveChange]])},e.Views.Maps.MapSidebar.prototype=$.extend({},t.prototype,{template:"map_sidebar",show:function(){this.$el.show()},hide:function(){this.$el.hide()},blurSearchInput:function(){e.device.isMobileDevice||this.views.mapSearchbar&&this.views.mapSearchbar.blur()},_render:function(){t.prototype._render.call(this,this.model),this._cacheElems(".js-vertical-map",["content","results-container","detail","close-map","close-directions","back","back-to-list","back-to-serp","type-container","user-loc-container"]),this.model.isMapExpanded&&(this._renderSearchHeader(),this.views.mapTypeSelect=new e.Views.Maps.MapTypeSelect({appendTo:this.$typecontainer,model:this.model,small:!1}),e.userLocator.canShowPUL()&&!e.device.isDesktop&&(this.views.userLocBadge=new e.Views.UserLocation.UserLocationBadge({appendTo:this.$userloccontainer,$originEl:this.$el,onExpandedMap:!0})),this.bindEvents([[this.$back,"click",this._onBackClick]])),this.bindEvents([[this.$backtolist,"click",this._onBackToListClick],[this.$closemap,"click",this._onCloseMapClick],[this.$closedirections,"click",this._onCloseDirectionsClick]])},_renderSearchHeader:function(){this.views.directionsSearch||(this.views.directionsSearch=new e.Views.Maps.DirectionsSearch({model:this.model,directionsModel:this.directionsModel,appendTo:this.$content,showTransportType:!0,autoInit:!0})),this.views.mapSearchbar||(this.views.mapSearchbar=new e.Views.Maps.MapSearchbar({appendTo:this.$content,model:this.model})),this._toggleDirections()},_toggleDirections:function(){this.model.isDirectionsActive?(this.views.mapSearchbar.hide(),this.views.directionsSearch&&this.views.directionsSearch.show(),this.$closedirections&&this.$closedirections.show()):(this.views.directionsSearch&&this.views.directionsSearch.hide(),this.views.mapSearchbar.show(),this.$closedirections&&this.$closedirections.hide())},_onSelectedItemChanged:function(e){"Place"!==this.model.answerItemModel&&"Places"!==this.model.answerType||this.model.isSingle||(e?(this.$backtoserp.hide(),this.$backtolist.removeClass("is-hidden")):(this.$backtoserp.show(),this.$backtolist.addClass("is-hidden")))},_onMapExpandedChanged:function(t){this.model.selectedItem&&(this.model.selectedItem.unselect(),e.history.clear("iai")),this.views.mapSearchbar&&(t?this.model.isDirectionsActive?this.views.directionsSearch&&this.views.directionsSearch.show():this.views.mapSearchbar&&this.views.mapSearchbar.show():this.model.meta.requery||this.views.mapSearchbar.hide())},_onBackClick:function(t){t.preventDefault(),t.stopPropagation(),e.pixel.fire("map_ebe"),w.history.back()},_onBackToListClick:function(t){t.preventDefault(),t.stopPropagation(),this.model.selectedItem&&(this.model.selectedItem.unselect(),e.history.clear("iai")),this.views.currentPlaceDetail&&(this.views.currentPlaceDetail.destroy(),delete this.views.currentPlaceDetail),this.$detail.hide(),this.$resultscontainer.show(),this.$backtolist.addClass("is-hidden")},_onCloseMapClick:function(t){t.preventDefault(),t.stopPropagation(),this.model.set("isMapExpanded",!1),this.model.engaged(),e.pixel.fire("map_ebe")},_onCloseDirectionsClick:function(){this.model.onMapStartAction()},_onDirectionsActiveChange:function(e){this._toggleDirections()}})}(DDG),function(e){var t=e.Views.Base,i="normal",s="min";e.Views.Maps.MapSidebarMobile=function(i){this.directionsModel=i.directionsModel,this.views={},t.call(this,i),this.bindEvents([[this.model,"change:sidebarPosition",this._onSidebarPositionChanged],[this.model,"requery-complete",this._onRequeryComplete],[this.model,"change:isMapExpanded",this._onMapExpandedChanged],[this.model,"change:isDirectionsActive",this._onDirectionsActiveChange]]),this.searchHeaderOffset=Math.ceil(e.device.height-this.model.sidebarTranslateY),this.model.set("sidebarPosition",this.model.sidebarPosition||"normal")},e.Views.Maps.MapSidebarMobile.prototype=$.extend({},t.prototype,{template:"map_sidebar_mobile",show:function(){this.$el.show()},hide:function(){this.$el.hide()},_render:function(){t.prototype._render.call(this,this.model),this._cacheElems(".js-vertical-map-sidebar-mobile",["header","header-content","back","close-directions","toggle","toggle-icon","toggle-text"]),this._renderSearchHeader(),this.views.mapTypeSelect=new e.Views.Maps.MapTypeSelect({appendTo:$(".js-vertical-map"),model:this.model,showLabel:!1,small:!0}),e.userLocator.canShowPUL()&&!e.device.isDesktop&&(this.views.userLocBadge=new e.Views.UserLocation.UserLocationBadge({appendTo:$(".js-vertical-map-control-topleft"),$originEl:this.$el,onExpandedMap:!0})),this.bindEvents([[this.$back,"click",this._onBackClick],[this.$toggle,"click",this._onToggleClick],[this.$closedirections,"click",this._onCloseDirectionsClick]])},_renderSearchHeader:function(){this.views.directionsSearch||(this.views.directionsSearch=new e.Views.Maps.DirectionsSearch({model:this.model,directionsModel:this.directionsModel,appendTo:this.$headercontent,showTransportType:!0,autoInit:!0})),this.views.mapSearchbar||(this.views.mapSearchbar=new e.Views.Maps.MapSearchbar({appendTo:this.$headercontent,isMobile:!0,isIPhone:e.device.isIPhone,model:this.model}),this.bindEvents([[this.views.mapSearchbar,"searchbar-focused",this._onSearchbarFocused]])),this.model.isDirectionsActive?(this.views.mapSearchbar.hide(),this.views.directionsSearch.show(),this.$closedirections.show()):(this.views.directionsSearch.hide(),this.$closedirections.hide(),this.views.mapSearchbar.show())},_onSearchbarFocused:function(){var e=s;this.model.sidebarPosition!==e&&this.model.set("sidebarPosition",e)},_onRequeryComplete:function(){var e=i;this.model.sidebarPosition!==e&&this.model.set("sidebarPosition",e)},_onSidebarPositionChanged:function(){var e,t="Place"!==this.model.answerItemModel||1===this.model.items.length||this.model.selectedItem,i="normal"===this.model.sidebarPosition;e=i?lp("mobile expanded map","Expand Map"):t?lp("mobile expanded map","Show Detail"):lp("mobile expanded map","Show List"),this.$toggletext.text(e),this.$toggleicon.toggleClass("vertical--map__mobile-toggle-icon--map",i),this.$toggleicon.toggleClass("vertical--map__mobile-toggle-icon--list",!i)},_onBackClick:function(t){t.preventDefault(),t.stopPropagation(),e.pixel.fire("map_ebe"),w.history.back()},_onMapExpandedChanged:function(t){this.model.selectedItem&&(this.model.selectedItem.unselect(),e.history.clear("iai")),this.views.mapSearchbar&&(t?this.model.isDirectionsActive?this.views.directionsSearch&&this.views.directionsSearch.show():this.views.mapSearchbar&&this.views.mapSearchbar.show():this.model.meta.requery||this.views.mapSearchbar.hide())},_onToggleClick:function(t){var i="min"===this.model.sidebarPosition?"normal":"min";this.model.set("sidebarPosition",i),e.pixel.fire("map_est")},_onCloseDirectionsClick:function(){this.model.set("isDirectionsActive",!1)},_onDirectionsActiveChange:function(){this._renderSearchHeader()}})}(DDG),function(e){var t=e.Views.Base,i="map-sidebar-footer";function s(e){var t=!("Place"===e.answerItemModel&&e.selectedItem||"Directions"===e.answerItemModel||e.isDirectionsActive||!(e.hasNoResults||e.hasExampleSearches||e.isMoreAtVisible));return e.hasExternalDirectionsProvider&&(t=!0),t}e.Views.Maps.MapSidebarFooter=function(i){this._ops=i,t.call(this,this._ops),this.footerModel=new e.Models.Footer,this.bindEvents([[this.model,"change:sidebarLayout",this._onSidebarLayoutChanged],[this.model,"change:selectedItem",this._onSelectedItemChanged],[this.model,"change:items",this._onItemsChanged],[this.model,"change:hasExampleSearches",this._onHasExampleSearchesChange],[this.model,"change:hasNoResults",this._onHasNoResultsChange],[this.model,"change:isMoreAtVisible",this._onIsMoreAtVisibleChange],[this.model,"change:hasExternalDirectionsProvider",this._onHasExternalDirectionsProviderChange]])},e.Views.Maps.MapSidebarFooter.prototype=$.extend({},t.prototype,{template:"map_sidebar_footer",_render:function(){this._ops=$.extend({},this._ops,{offsetted:s(this.model)}),t.prototype._render.call(this,this._ops),this._createFeedbackPrompt()},_onItemsChanged:function(){this._createFeedbackPrompt()},_onSelectedItemChanged:function(e){this.$el.toggleClass(i+"--offsetted",s(this.model)),this._createFeedbackPrompt()},_onSidebarLayoutChanged:function(){this._rerender()},_onHasExampleSearchesChange:function(){this.$el.toggleClass(i+"--offsetted",s(this.model))},_onIsMoreAtVisibleChange:function(){this.$el.toggleClass(i+"--offsetted",s(this.model))},_onHasExternalDirectionsProviderChange:function(){this._rerender()},_onHasNoResultsChange:function(){this.$el.toggleClass(i+"--offsetted",s(this.model)),this._createFeedbackPrompt()},_createFeedbackPrompt:function(){if(e.device.isEnglish){var t=this.model.getFeedbackCategory(),i={category:t,categoryName:this.model.getCurrentItemName(),categoryValue:t,sourceName:this.model.sourceName,promptText:lp("feedback form","Share Feedback"),appendTo:this.$el,showYesNo:!1,showOnMap:!0,showOnMobile:!0,subtitleText:lp("feedback form","Share feedback on your search results."),asButton:!1};"places_single"===t&&(i.modalView=e.Views.Feedback.SinglePlaceModal,i.modalViewData=this.model.selectedItem||this.model.items[0]),this.views.feedback&&this.views.feedback.destroy(),this.views.feedback=new e.Views.Feedback.FeedbackPrompt(i)}}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.MapTypeSelect=function(e){this._ops=e||{},t.call(this,this._ops)},e.Views.Maps.MapTypeSelect.prototype=$.extend({},t.prototype,{template:"map_type_select",_render:function(){t.prototype._render.call(this,this._ops),this._cacheElems(".js-map-type-select",["label"]),this.bindEvents([[this.$el,"click",this._onMapTypeClick]])},_onMapTypeClick:function(){var e="map-type-select--satellite",t="map-type-select--map";this.model.mapType&&this.model.mapType!==w.mapkit.Map.MapTypes.Standard?(this.model.set("mapType",w.mapkit.Map.MapTypes.Standard),this.$el.addClass(e),this.$el.removeClass(t),this.$label.html("Satellite")):(this.model.set("mapType",w.mapkit.Map.MapTypes.Hybrid),this.$el.addClass(t),this.$el.removeClass(e),this.$label.html("Map"))}})}(DDG),function(e){var t=e.Views.Base;e.Views.NoMapResults=function(e){this.vertical=e.vertical||"web",this.resultType=e.resultType||l("Results"),this.query=e.query||rqd,this.model=e.model,t.call(this,e)},e.Views.NoMapResults.prototype=$.extend({},t.prototype,{template:"no_map_results",destroy:function(){t.prototype.destroy.call(this),this.model.set("hasNoResults",!1)},show:function(){this.$el.removeClass("is-hidden"),this.model.set("hasNoResults",!0)},hide:function(){this.$el.addClass("is-hidden"),this.model.set("hasNoResults",!1)},updateQuery:function(e){this.query=e,this._rerender()},_render:function(){var i=!e.deep.bn||e.deep.bn.ivc?1:0,s="?q="+encodeURIComponent(this.query)+"&ia=web"+(w.kurl?w.kurl:"");t.prototype._render.call(this,{query:e.Utils.Strings.decodeQueryAndStripHTML(this.query),resultType:this.resultType.toLowerCase(),webSearchUrl:s}),this._cacheElems(".js-no-map-results",["web-search"]),this._pixelData={r:0,i506:e.deep.is506?1:0,ivc:i,irt:e.history.get("norrc")?1:0,v:this.vertical},e.pixel.fire("nor",this._pixelData),this.bindEvents([[this.$websearch,"click",this._onWebClick]]),this.model.set("hasNoResults",!0)},_onWebClick:function(t){e.pixel.fire("norwc",this._pixelData)}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.ExampleSearches=function(e){this.answer=e.answer,t.call(this,e)},e.Views.Maps.ExampleSearches.prototype=$.extend({},t.prototype,{template:"map_example_searches",show:function(){this.$el.show()},hide:function(){this.$el.hide()},destroy:function(){t.prototype.destroy.call(this),this.answer.set("hasExampleSearches",!1)},_render:function(){this.categories=[{query:"Restaurants",iconUrl:"restaurants.svg"},{query:"Banks",iconUrl:"banks.svg"},{query:"Hotels",iconUrl:"hotels.svg"},{query:"Parking",iconUrl:"parking.svg"},{query:"Bars",iconUrl:"bars.svg"},{query:"Coffee",iconUrl:"coffee.svg"},{query:"Groceries",iconUrl:"groceries.svg"},{query:"Parks",iconUrl:"parks.svg"}];var e=this.answer.meta.requery?encodeURIComponent(this.answer.meta.requery):this.answer.queryEncoded;this.webSearchUrl="?q="+e+"&ia=web"+(w.kurl?w.kurl:""),t.prototype._render.call(this,$.extend(this.model,{categories:this.categories,webSearchUrl:this.webSearchUrl})),this._cacheElems(".js-example-search",["button"]),this.bindEvents([[this.$button,"click",this._onButtonClick.bind(this)]]),this.answer.set("hasExampleSearches",!0)},_onButtonClick:function(t){t.preventDefault();var i=$(t.currentTarget).data("category");e.duckbar.tabs.maps_expanded&&e.duckbar.tabs.maps_expanded.expandedMap&&(e.duckbar.tabs.maps_expanded.expandedMap.onRequeryAction({query:i,strict_bbox:"1",shouldMapViewportUpdate:!1}),this.answer.set("isSearchAreaBtnVisible",!1))}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.DirectionsButton=function(i){this.answer=i.answer,this.loc=i.loc,this.isAddress=i.isAddress,i.showDirectionsIcon="Place"===this.answer.answerItemModel||"Places"===this.answer.answerType,t.call(this,i),this._updateLinkURL(),this.bindEvents([[e.directionSource,"change:selected",this._updateLinkURL]])},e.Views.Maps.DirectionsButton.prototype=$.extend({},t.prototype,{template:"directions_button",changeVerticalPos:function(e){return this.views.directions&&this.views.directions.changeVerticalPos(e)},_render:function(i){t.prototype._render.call(this,i),this._cacheElems(".js-dir-btn",["link","text"]),this.bindEvents([[this.$link,"click",this._onLinkClicked]]),e.device.isAppleDevice||(this.views.directions=new e.Views.Dropdowns.DirectionDropdown({appendTo:"Places"===this.answer.answerType||"Place"===this.answer.answerItemModel?this.$text:this.$el,loc:this.loc,answer:this.answer}))},_updateLinkURL:function(){var t=e.directionSource.getDirectionsURL(this.loc);this.$link.attr("href",t),this.$link.data("wrapped",""),this.$link.off("click.wrap"),this._wrapLinks()},_onLinkClicked:function(){this.answer&&(e.pixel.fire("iadrc",this.answer.pixelId,e.directionSource.selected.id),this.answer.clickedExternalLink(),this.answer.engaged())}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.DirectionsSearch=function(e){this.directionsModel=e.directionsModel,this.showTransportType=!!e.showTransportType,this.autoInit=!!e.autoInit,t.call(this,e),this.bindEvents([[this.directionsModel,"change:currentTransportType",this._onTransportTypeChange],[this.directionsModel,"change:userLocation",this._onUserLocationChange]])},e.Views.Maps.DirectionsSearch.prototype=$.extend({},t.prototype,{template:"directions_search",show:function(){this.$el.show()},hide:function(){this.$el.hide()},blur:function(){},_render:function(){t.prototype._render.call(this,this.model),this._cacheElems(".js-directions-search",["inputs","drive","walk"]),this.bindEvents([[this.$drive,"click",this._onDriveClick],[this.$walk,"click",this._onWalkClick]]),this.model.isMapExpanded&&this.bindEvents([[this.$el,"submit",this._onSubmit]]),this.views.mapSearchbarStart=this.views.mapSearchbarStart||new e.Views.Maps.MapSearchbar({appendTo:this.$inputs,model:this.model,directionsModel:this.directionsModel,directionsType:"start",initValue:this.directionsModel.startDisplay?this.directionsModel.startDisplay:""}),this.views.mapSearchbarEnd=this.views.mapSearchbarEnd||new e.Views.Maps.MapSearchbar({appendTo:this.$inputs,model:this.model,directionsModel:this.directionsModel,directionsType:"end",initValue:this.directionsModel.endDisplay?this.directionsModel.endDisplay:""}),this.views.mapSearchbarStart.autocomplete.on("requery-submit",function(t){t&&t.event&&t.event.preventDefault(),this.directionsModel.canRetryLocationSearch=!1,this.directionsModel.setLocation({type:"start",what:t.suggestion.what,where:t.suggestion.where,display:this.directionsModel.formatDisplayLocation(t.suggestion.what,t.suggestion.where)}),this.directionsModel.set("startDisplay",this.directionsModel.formatDisplayLocation(t.suggestion.what,t.suggestion.where)),this.autoInit&&this.directionsModel.onDirectionsAction(),e.pixel.fire("dir_chg",e.history.get("iaxm")?"iaxm":"ia")}.bind(this)),this.views.mapSearchbarEnd.autocomplete.on("requery-submit",function(t){t&&t.event&&t.event.preventDefault(),this.directionsModel.canRetryLocationSearch=!1,this.directionsModel.setLocation({type:"end",what:t.suggestion.what,where:t.suggestion.where,display:this.directionsModel.formatDisplayLocation(t.suggestion.what,t.suggestion.where)}),this.directionsModel.set("endDisplay",this.directionsModel.formatDisplayLocation(t.suggestion.what,t.suggestion.where)),this.autoInit&&this.directionsModel.onDirectionsAction(),e.pixel.fire("dir_chg",e.history.get("iaxm")?"iaxm":"ia")}.bind(this)),this.directionsModel.canRoute&&this.model.isMapExpanded&&this.directionsModel.onDirectionsAction({noRouting:!0})},_onSubmit:function(t){t.preventDefault(),e.pixel.fire("dir_rq");try{var i={};i.start=this.views.mapSearchbarStart.getCurrentValue(),i.end=this.views.mapSearchbarEnd.getCurrentValue(),this.views.mapSearchbarStart.autocomplete.hide(),this.views.mapSearchbarEnd.autocomplete.hide(),this.views.mapSearchbarStart.autocomplete.model.clearData(),this.views.mapSearchbarEnd.autocomplete.model.clearData(),["start","end"].forEach(function(e){i[e]!==this.directionsModel[e+"Display"]&&(this.directionsModel.set("start"===e?"isStartUpdating":"isEndUpdating",!0),this.directionsModel.autocompleteLocation({loc:i[e],type:e,callbackFn:function(){this.set("isStartUpdating",!1),this.set("start"===e?"isStartUpdating":"isEndUpdating",!1)}.bind(this.directionsModel)}))}.bind(this))}catch(t){}},_onDriveClick:function(){this.directionsModel.onDirectionsAction({transport:"drive"})},_onWalkClick:function(){this.directionsModel.onDirectionsAction({transport:"walk"})},_onTransportTypeChange:function(t){e.pixel.fire("dir_tpt",t.id),this.$drive.toggleClass("is-selected","drive"===t.id),this.$walk.toggleClass("is-selected","walk"===t.id)},_onUserLocationChange:function(e){!this.directionsModel.canRoute&&e.lat&&e.lon&&(this.directionsModel.start&&!this.directionsModel.end?this.directionsModel.addLocation({type:"end",coordinate:{lat:e.lat,lon:e.lon}}):this.directionsModel.end&&!this.directionsModel.start&&this.directionsModel.addLocation({type:"start",coordinate:{lat:e.lat,lon:e.lon}}),this.model.isDirectionsActive&&this.directionsModel.canRoute&&this.directionsModel.onDirectionsAction())}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.DirectionsResults=function(e){this.answer=e.answer,this.routeViewList=[],this.map=e.map,this.bindEvents([[e.model,"change:routeList",this._onRouteListChange],[e.model,"change:isRouting",this._onIsRoutingChange],[this.answer,"change:hasExternalDirectionsProvider",this._onHasExternalDirectionsProviderChange],[this.answer,"change:isDirectionsActive",this._onIsDirectionsActiveChange]]),t.call(this,e)},e.Views.Maps.DirectionsResults.prototype=$.extend({},t.prototype,{template:"directions_results",show:function(){this.$el.show()},hide:function(){this.$el.hide()},_render:function(){t.prototype._render.call(this,this.model),this._cacheElems(".js-directions-results",["initial-message","external-provider"]),this.bindEvents([[this.$externalprovider,"click",this._onExternalProviderClick]]),this.views.skeletonLoader=this.views.skeletonLoader||new e.Views.Maps.DirectionsSkeletonLoader({model:this.model,prependTo:this.$el}),this.model.routeList&&this.model.routeList.length>0?this._showRoutes():this.model.canRoute&&!this.model.isRouting&&this.model.route()},_updateAnnotations:function(){this.map&&(this.map.clearMap(),this.model.coordStart&&(this.startAnnotation=this.map.addImageAnnotation(this.model.coordStart.latitude,this.model.coordStart.longitude,"/assets/maps/directions-start.svg")),this.model.coordEnd&&(this.map.addImageAnnotation(this.model.coordEnd.latitude,this.model.coordEnd.longitude,"/assets/maps/directions-end.svg"),this.map.addImageAnnotation(this.model.coordEnd.latitude,this.model.coordEnd.longitude,"/assets/maps/marker-light-default-active.svg")))},_showRoutes:function(){this._updateAnnotations(),this.model.routeList.length>0?(this.views.noResults&&this.views.noResults.hide(),this.$initialmessage.hide(),this.model.routeList[0].isSelected=!0,this.model.routeList.reverse(),this.routeViewList=this.model.routeList.map(function(t,i){return new e.Views.Maps.DirectionsRoute({model:t,directionsModel:this.model,answer:this.answer,map:this.map.views.map,prependTo:this.$el})}.bind(this)),this._updateExternalMapProvider()):this.model.canRoute?(this.$initialmessage.hide(),this.views.noResults=this.views.noResults||new e.Views.Maps.NoDirectionsResults({prependTo:this.$el}),this.views.noResults.show()):this.$initialmessage.show()},_updateExternalMapProvider:function(){if(this.model.externalMapProvider){this.$externalprovider.removeClass("is-hidden");var t,i=this.model.end.where||this.model.endDisplay||this.model.end.what;t=this.model.startDisplay===lp("directions","Your Location")?e.getProperty(this.model,"start.coordinate.lat")+","+e.getProperty(this.model,"start.coordinate.lon"):this.model.start.where||this.model.startDisplay||this.model.start.what,"apple"===this.model.externalMapProvider?this.$externalprovider.find("a").attr("href","https://maps.apple.com/?saddr="+t+"&daddr="+i):"google"===this.model.externalMapProvider&&this.$externalprovider.find("a").attr("href","geo:?q="+i)}},_onRouteListChange:function(t){this._showRoutes(),t&&t.length>0&&this._updateExternalMapProvider(),this.answer.set("hasExternalDirectionsProvider",t&&t.length>0&&!!e.device.isMobileDevice)},_onIsRoutingChange:function(t){t?(this.routeViewList&&this.routeViewList.forEach((function(e){e.destroy()})),this.$initialmessage.hide(),this.views.skeletonLoader.show(),this.views.noResults&&this.views.noResults.hide(),this.answer.set("hasExternalDirectionsProvider",!1)):(this.views.skeletonLoader.hide(),this.answer.set("hasExternalDirectionsProvider",!!e.device.isMobileDevice))},_onHasExternalDirectionsProviderChange:function(){this.$externalprovider.toggle(this.hasExternalDirectionsProvider)},_onIsDirectionsActiveChange:function(e){this.startAnnotation&&(this.startAnnotation.visible=!!e)},_onExternalProviderClick:function(){e.pixel.fire("dir_ext",this.model.externalMapProvider)}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.DirectionsRoute=function(e){this.directionsModel=e.directionsModel,this.answer=e.answer,this.map=e.map,t.call(this,e),this.bindEvents([[this.directionsModel,"change:isMapLoaded",this._onIsMapLoadedChange]])},e.Views.Maps.DirectionsRoute.prototype=$.extend({},t.prototype,{template:"directions_route",_render:function(){t.prototype._render.call(this,this.model),this.bindEvents([[".js-directions-route","click",this._onClick]]),this.views.directionsRouteOverview=new e.Views.Maps.DirectionsRouteOverview({model:this.model,directionsModel:this.directionsModel,appendTo:this.$el}),this.views.directionsRouteSteps=new e.Views.Maps.DirectionsRouteStepList({model:this.model,directionsModel:this.directionsModel,appendTo:this.$el}),this.map?this._renderRouteLine():this._isWaitingForMap=!0},_renderRouteLine:function(){this.views.directionsRouteLine=new e.Views.Maps.DirectionsRouteLine({model:this.model,directionsModel:this.directionsModel,answer:this.answer,appendTo:this.$el,map:this.map})},_onIsMapLoadedChange:function(e){this._isWaitingForMap&&(this._renderRouteLine(),this._isWaitingForMap=!1)},_onClick:function(e){}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.DirectionsRouteInfo=function(e){t.call(this,e),this.bindEvents([[this.model,"change:routeList",this._onRouteListChange],[this.model,"change:isRouting",this._onIsRoutingChange]])},e.Views.Maps.DirectionsRouteInfo.prototype=$.extend({},t.prototype,{template:"directions_route_info",_render:function(){t.prototype._render.call(this,this.model)},_onIsRoutingChange:function(e){this.$el.toggle(!e)},_onRouteListChange:function(){this._rerender()}})}(DDG),function(e){var t=e.Views.Base,i="#3969EF",s="#8FABF9",a="#769DFF",o="#ADC2FC",n=8,l=6,r={top:100,right:100,bottom:100,left:100};e.Views.Maps.DirectionsRouteLine=function(e){this.answer=e.answer,this.map=e.map,this.lineThickness=e.lineThickness,this.mapPadding=e.mapPadding,t.call(this,e),this.bindEvents([[this.model,"change:isSelected",this._onSelectedChange],[this.model.directionsModel,"change:isRouting",this._onIsRoutingChange],[this.answer,"change:mapType",this._onMapTypeChange],[this.answer,"change:isDirectionsActive",this._onIsDirectionsActiveChange]])},e.Views.Maps.DirectionsRouteLine.prototype=$.extend({},t.prototype,{template:"directions_route_line",_render:function(){t.prototype._render.call(this,this.model),this.model.polyline||(this.model.polyline={},this.model.polyline.points=[],this.model.path.forEach(function(e){e.forEach(function(e){this.model.polyline.points.push(new w.mapkit.Coordinate(e.lat,e.lng))}.bind(this))}.bind(this))),this.polyline=new w.mapkit.PolylineOverlay(this.model.polyline.points),this._style(),this.polyline.addEventListener("select",this._onPolylineSelect.bind(this)),this.map.addOverlay(this.polyline),this.map.showItems(this.polyline,{padding:new w.mapkit.Padding(this.mapPadding||r)})},destroy:function(){DDG.history.get("iaxm")&&"directions"===this.answer.id||(t.prototype.destroy.call(this),this.map.removeOverlays(this.map.overlays))},_style:function(){this.polyline.selected=!!this.model.isSelected,this.polyline.style.lineWidth=this.lineThickness||(this.model.isSelected?n:l),this.polyline.style.strokeColor=this._getColor(),this.polyline.style.strokeOpacity=.5},_getColor:function(){return this.answer.mapType&&"hybrid"===this.answer.mapType||e.settings.isDarkTheme()?this.model.isSelected?a:o:this.model.isSelected?i:s},_onSelectedChange:function(){this._style()},_onPolylineSelect:function(){this.model.directionsModel.selectRoute(this.model.name)},_onIsRoutingChange:function(){DDG.history.get("iaxm")&&"directions"===this.answer.id||(this.polyline.visible=!1)},_onMapTypeChange:function(){this.polyline.style.strokeColor=this._getColor()},_onIsDirectionsActiveChange:function(e){this.polyline&&(this.polyline.visible=!!e)}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.DirectionsRouteOverview=function(e){this.directionsModel=e.directionsModel,t.call(this,e),this.bindEvents([[this.model,"change:isSelected",this._rerender]])},e.Views.Maps.DirectionsRouteOverview.prototype=$.extend({},t.prototype,{template:"directions_route_overview",_render:function(){t.prototype._render.call(this,this.model),this._cacheElems(".js-directions-route-overview",["toggle","toggle-show","toggle-hide","print"]),this.bindEvents([[this.$el,"click",this._onClick],[this.$toggle,"click",this._onToggle],[this.$print,"click",this._onPrintClick]]),this.directionsModel&&this.directionsModel.routeList&&1===this.directionsModel.routeList.length&&this._toggleStepsCTA()},_toggleStepsCTA:function(){this.$toggleshow.toggleClass("is-hidden"),this.$togglehide.toggleClass("is-hidden")},_onClick:function(e){this.directionsModel.selectRoute(this.model.name)},_onToggle:function(t){t.stopPropagation(),this.directionsModel.toggleRoute(this.model.name),this._toggleStepsCTA(),e.pixel.fire("dir_stp")},_onPrintClick:function(t){t.stopPropagation(),this.views.modal||(this.views.modal=new e.Views.Maps.DirectionsPrintPreview({model:this.model,appendTo:"body"})),this.views.modal.show(),e.pixel.fire("dir_pr")}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.DirectionsRouteStepList=function(e){this.isPrintPreview=e.isPrintPreview,t.call(this,e),this.bindEvents([[this.model,"change:isExpanded",this._onRouteExpandedChange]])},e.Views.Maps.DirectionsRouteStepList.prototype=$.extend({},t.prototype,{template:"directions_route_step_list",show:function(){this.$el.removeClass("is-hidden")},hide:function(){this.$el.addClass("is-hidden")},_render:function(){t.prototype._render.call(this,this.model),this._cacheElems(".js-directions-route-step-list",["container"]),this.views.steps=this.model.steps.map(function(t){return new e.Views.Maps.DirectionsRouteStep({model:new e.Models.Maps.DirectionsRouteStep(t),appendTo:this.$container,isPrintPreview:this.isPrintPreview})}.bind(this))},_onRouteExpandedChange:function(e){this.isPrintPreview||(e?this.show():this.hide())}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.DirectionsRouteStep=function(e){this.isPrintPreview=e.isPrintPreview,t.call(this,e),this.bindEvents([[this.model,"change:route",this._rerender]])},e.Views.Maps.DirectionsRouteStep.prototype=$.extend({},t.prototype,{template:"directions_route_step",_render:function(){this.isPrintPreview&&(this.model.imageUrl=this.model.imageUrl.replace("arrowFill=cccccc","arrowFill=000000")),t.prototype._render.call(this,this.model),this.bindEvents([[".js-directions-route-step","click",this._onClick]])},_onClick:function(e){}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.NoDirectionsResults=function(e){t.call(this,e)},e.Views.Maps.NoDirectionsResults.prototype=$.extend({},t.prototype,{template:"no_directions_results",show:function(){this.$el.removeClass("is-hidden")},hide:function(){this.$el.addClass("is-hidden")},_render:function(){var e="?q="+w.rq+"&ia=web"+(w.kurl?w.kurl:"");t.prototype._render.call(this,{webSearchUrl:e})}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.DirectionsSkeletonLoader=function(e){e.model.loadItems=[{},{},{}],t.call(this,e)},e.Views.Maps.DirectionsSkeletonLoader.prototype=$.extend({},t.prototype,{template:"directions_skeleton_loader",show:function(){this.$el.removeClass("is-hidden")},hide:function(){this.$el.addClass("is-hidden")},_render:function(){t.prototype._render.call(this,this.model)}})}(DDG),function(e){var t=e.Views.Modal;e.Views.Maps.DirectionsPrintPreview=function(e){t.call(this,e)},e.Views.Maps.DirectionsPrintPreview.prototype=$.extend({},t.prototype,{template:"directions_print_preview",show:function(){t.prototype.show.call(this),this.model.directionsModel.set("isPrintPreviewOpen",!0),this.originalTitle=document.title;var e=this.model.directionsModel.startDisplay||this.model.directionsModel.start.what,i=this.model.directionsModel.endDisplay||this.model.directionsModel.end.what;document.title=e+" → "+i},hide:function(){t.prototype.hide.call(this),this.model.directionsModel.set("isPrintPreviewOpen",!1),this.originalTitle&&(document.title=this.originalTitle,this.originalTitle=null)},_render:function(e){e.start=this.model.directionsModel.start.what||this.model.directionsModel.startDisplay,e.end=this.model.directionsModel.end.what||this.model.directionsModel.endDisplay,t.prototype._render.call(this,e),this._cacheElems(".js-directions-print-preview",["cta","body","map","steps"]),this.$body.css("height",$(window).height()-200),this.bindEvents([[this.$cta,"click",this._onCtaClicked]]),this._fetchStaticMap(),this._renderSteps()},_fetchStaticMap:function(){var t=this.model.polyline.points.map((function(e){return[e.latitude,e.longitude]})),i=e.mapkit.getStaticDirectionsURL(t,{width:780,height:326,colorScheme:"light"}),s=document.createElement("img");s.addEventListener("load",this._onMapLoaded.bind(this)),s.src=i,this.$map.find("img").remove(),this.$map.append(s)},_renderSteps:function(){this.views.routeSteps=this.views.routeSteps||new e.Views.Maps.DirectionsRouteStepList({model:this.model,appendTo:this.$steps,isPrintPreview:!0}),this.views.routeSteps.show()},_onCtaClicked:function(){this._isMapLoaded&&window.print()},_onMapLoaded:function(){this.$cta.addClass("btn--primary"),this._isMapLoaded=!0}})}(DDG),function(e){var t=e.Views.Base;e.Views.Maps.DirectionsPrintErrorMessage=function(e){this.answer=e.answer,t.call(this,e),this.bindEvents([[this.model,"change:isPrintPreviewOpen",this._onPrintPreviewOpenChange],[this.answer,"change:isMapExpanded",this._onMapExpandedChange]])},e.Views.Maps.DirectionsPrintErrorMessage.prototype=$.extend({},t.prototype,{template:"directions_print_error_message",show:function(){this.$el.removeClass("is-hidden")},hide:function(){this.$el.addClass("is-hidden")},_render:function(){t.prototype._render.call(this,this.model),this.show()},_onPrintPreviewOpenChange:function(e){e?this.hide():this.show()},_onMapExpandedChange:function(e){e?this.show():this.hide()}})}(DDG),function(e){var t=e.Views.Base;e.Views.Places.PlacesSingle=function(i){this.answer=i.model,this.model=this.answer.primaryPlace,t.call(this,{model:this.model,appendTo:i.appendTo}),this.bindEvents([[e.settings,"change:kam",this._onDirectionSourceUpdated]])},e.Views.Places.PlacesSingle.prototype=$.extend({},t.prototype,{template:"places_single",_onDirectionSourceUpdated:function(){var t=e.directionSource.getMapURL(this.model);this.model.set("mapURL",t),this.model.set("directionsTitle",this.model.getDirectionsTitle()),this._rerender(this.model)},_render:function(){t.prototype._render.call(this,this.model);var i={model:this.model,answer:this.answer,appendTo:this.$el};this.views.header=new e.Views.Places.PlaceHeader(i),this.views.detail=new e.Views.Places.PlaceDetail(i)}})}(DDG),function(e){var t=e.Views.Base;e.Views.Places.PlacesSingleMap=function(e){this._ops=e||{},this.answer=e.answer,this.model=e.model,"applemaps"===this.model.sourceId&&"START"===this.model.embedLoading&&(this._ops.showPlaceholder=!0),t.call(this,this._ops),this.bindEvents([[this.model,"change:embedLoading",this._onEmbedLoadingChange]])},e.Views.Places.PlacesSingleMap.prototype=$.extend({},t.prototype,{template:"places_single_map",show:function(){this.$el.show()},hide:function(){this.$el.hide()},_render:function(){t.prototype._render.call(this,$.extend({},this.model,this._ops));var i={model:this.model,answer:this.answer,appendTo:this.$el};(this.model.thumbnails||this.model.image)&&(this.views.header=new e.Views.ModuleImageHeader(i)),this.views.detail=new e.Views.Places.PlaceDetail(i)},_onEmbedLoadingChange:function(){"DONE"===this.model.embedLoading&&(this._ops.showPlaceholder=!1,this._rerender())}})}(DDG),function(e){var t=e.Views.Base;e.Views.Places.PlacesMultiple=function(i){i.isMobile=e.device.isMobile,t.call(this,i)},e.Views.Places.PlacesMultiple.prototype=$.extend({},t.prototype,{template:"places_multiple",_render:function(i){t.prototype._render.call(this,i),this._cacheElems(".js-places-multiple",["map","list","expand","top-right","top-left"]),this.bindEvents([[this.$map,"click",this._onMapClick.bind(this)],[this.$expand,"click",this._onMapClick.bind(this)]]),this.model.glMapModel=new e.Models.GLMap({locations:this.model.items,pixelId:this.model.pixelId}),this.views.placeListItems=this.model.topPlaces.map(function(t){return new e.Views.Places.PlaceListItem({appendTo:this.$list,model:t,answer:this.model})}.bind(this)),setTimeout(function(){this.views.map=new e.Views.Mapkit.StaticMap({markers:this.model.itemsOnMap,appendTo:this.$map,width:this.$map.outerWidth(),height:this.$map.outerHeight(),showCTA:!0,answer:this.model});var t=!!this.$el.closest(".js-results-sidebar").length;e.userLocator.canShowPUL()&&(e.device.isMobile||e.device.isMobileDevice?this.views.locationTile=new e.Views.UserLocation.UserLocationBadge({appendTo:this.$topleft,$originEl:this.$el,isProximityQuery:this.model.proximity}):e.device.isDesktop&&(this.views.locationTile=new e.Views.UserLocation.UserLocationTile({appendTo:this.$topright,answer:this.model,position:t?"below-right":"below",constrainChildren:t,$originEl:this.$el})))}.bind(this),0)},_onMapClick:function(t){t.preventDefault(),e.router.navigate("toggle-map",{model:this.model,isMapExpanded:!0}),this.model.fire("iacg"),e.pixel.fire("map_se")},_onExternalLinkClick:function(e){this.model.engaged()}})}(DDG),function(e){var t=e.Views.Base;e.Views.Places.PlaceHeader=function(e){this._ops=e||{},this.answer=e.answer,t.call(this,this._ops),this.bindEvents([[this.model,"change:image",this._onImageLoaded]])},e.Views.Places.PlaceHeader.prototype=$.extend({},t.prototype,{template:"place_header",_render:function(){t.prototype._render.call(this,$.extend(this._ops||{},this.model)),this._cacheElems(".js-place-header",["map"]),this.bindEvents([[this.$el,"click",this._onClick],[this.$map,"click",this._onMapClick.bind(this)]]),setTimeout(function(){this.views.map=new e.Views.Mapkit.StaticMap({markers:[this.model],width:this.$map.outerWidth(),height:this.$map.outerHeight(),url:this.model.directions,appendTo:this.$map,showCTA:!0,answer:this.answer})}.bind(this),0)},_onClick:function(e){e.stopPropagation(),this.answer.engaged()},_onMapClick:function(t){t.preventDefault(),e.router.navigate("toggle-map",{model:this.answer,directionsModel:this.answer.directionsModel,isMapExpanded:!0}),this.answer.fire("iacg")},_onExternalLinkClick:function(e){this.answer.engaged(),this.answer.clickedExternalLink(),t.prototype._onExternalLinkClick.call(this,e)},_onImageLoaded:function(){this._ops.isScrapedImage=!0,this._rerender()}})}(DDG),function(e){var t=e.Views.Base;e.Views.Places.PlaceDetail=function(e){this.answer=e.answer,this._ops=e||{},t.call(this,this._ops),this.bindEvents([[this.model,"change:reviews",this._onReviewsUpdate],[this.model,"change:hoursExpanded",this._onHoursExpandedChange],[this.model,"change:embedLoading",this._onEmbedLoadingChange]])},e.Views.Places.PlaceDetail.prototype=$.extend({},t.prototype,{template:"place_detail",_render:function(){this.model.isMapExpanded=this.answer.isMapExpanded,this._ops.showSubtitlePlaceholder="START"===this.model.embedLoading,t.prototype._render.call(this,$.extend({},this.model,this._ops)),this._cacheElems(".js-place-detail",["hours","hours-toggle","hours-toggle-icon","phone","title","review-count","website","directions","map","call","tab-nav","tab-content"]),this.bindEvents([[this.$hourstoggle,"click",this._onHoursToggleClick.bind(this)],[this.$phone,"click",this._onPhoneClick.bind(this)],[this.$map,"click",this._onMapClick.bind(this)],[this.$website,"click",this._onWebsiteClick.bind(this)],[this.$call,"click",this._onCallClick.bind(this)],[this.$tabnav,"click",this._onTabNavClick.bind(this)],[this.model,"change:expanded",this._rerender]]),this.bindEvents([[this.$directions,"click",this._onDirectionsClick]]);var i=e.duckbar.tabs.maps_expanded,s=i&&i.expandedMap&&i.expandedMap.model,a=s&&s.directionsModel;this.answer.directionsModel=this.answer.directionsModel||a||new e.Models.Maps.Directions({geoip:this.answer.geoip}),this.views.placeHours=new e.Views.Places.PlaceHours({model:this.model,appendTo:this.$hours}),this.answer.isMapExpanded&&this.$reviewcount.find("a").attr({target:"_blank",rel:"noopener"})},_rerender:function(){this.views.directions&&(this.views.directions.destroy(),delete this.views.directions),t.prototype._rerender.call(this)},_openDirections:function(){this.answer.directionsModel.setLocation({type:"end",what:this.model.name,where:this.model.address,display:this.model.name}),this.answer.directionsModel.set("endDisplay",this.model.name),this.answer.directionsModel.userLocation&&(this.answer.directionsModel.setLocation({type:"start",coordinate:{lat:this.answer.directionsModel.userLocation.lat,lon:this.answer.directionsModel.userLocation.lon},display:lp("directions","Your Location")}),this.answer.directionsModel.set("startDisplay",lp("directions","Your Location"))),this.answer.isMapExpanded?(this.answer.set("isDirectionsActive",!0),this.answer.directionsModel.onDirectionsAction()):e.router.navigate("toggle-map",{model:this.answer,directionsModel:this.answer.directionsModel,isMapExpanded:!0,isDirections:!0})},_onMapClick:function(t){t.stopPropagation(),e.router.navigate("toggle-map",{model:this.answer,isMapExpanded:!0,directionsModel:this.answer.directionsModel}),e.pixel.fire("map_cta","btn")},_onDirectionsClick:function(){e.pixel.fire("dir_loc"),this._openDirections()},_onWebsiteClick:function(){e.pixel.fire("iawbs")},_onCallClick:function(){e.pixel.fire("iatel","btn")},_onTabNavClick:function(t){t.preventDefault(),this.activeTabId=$(t.target).data().tabNav,this.$tabnav.each(function(e,t){var i=$(t).data().tabNav;$(t).toggleClass("is-active",i===this.activeTabId)}.bind(this)),this.$tabcontent.each(function(e,t){var i=$(t).data().tabContent;$(t).toggleClass("is-hidden",i!==this.activeTabId)}.bind(this)),e.pixel.fire("iatab")},_onHoursToggleClick:function(t){t.preventDefault(),this.model.toggleHoursExpand(),this.answer.engaged(),e.pixel.fire("iahrs")},_onHoursExpandedChange:function(){this.$hourstoggleicon.toggleClass("ddgsi-down",!this.model.hoursExpanded),this.$hourstoggleicon.toggleClass("ddgsi-up",this.model.hoursExpanded)},_onPhoneClick:function(t,i){this.answer.engaged(),e.pixel.fire("iatel","link")},_onReviewsUpdate:function(){this.model.reviewsURL=e.localAPI.getPlaceReviewsURL(this.model),this._rerender()},_onExternalLinkClick:function(e){this.answer.clickedExternalLink(),this.answer.engaged(),t.prototype._onExternalLinkClick.call(this,e)},_onEmbedLoadingChange:function(){this._rerender()}})}(DDG),function(e){var t=e.Views.Base;e.Views.Places.PlaceListItem=function(e){this._ops=e||{},"applemaps"===e.model.sourceId&&e.model.addressLines&&e.model.addressLines.length>1&&(this._ops.addressLine2=this._ops.model.addressLines[1]),t.call(this,this._ops),this.answer=e.answer,this.bindEvents([[this.model,"change:selected",this._onSelectedChanged],[this.model,"change:image",this._onImageLoaded]])},e.Views.Places.PlaceListItem.prototype=$.extend({},t.prototype,{template:"place_list_item",_render:function(){t.prototype._render.call(this,$.extend({},this._ops,this.model)),this._cacheElems(".js-place-list-item",["title"]),this.bindEvents([[this.$el,"click",this._onClick],[this.$el,"mouseenter",this._onMouseEnter],[this.$el,"mouseleave",this._onMouseLeave]])},_onClick:function(t){t.stopPropagation(),this.answer.engaged(),this.model.selected||this.model.select(),"maps_places"===this.answer.id&&e.router.navigate("toggle-map",{model:this.answer,isMapExpanded:!0})},_onSelectedChanged:function(){this.model.selected?e.history.set({iai:this.answer.getQuerystringItemId(this.model)}):e.history.clear("iai")},_onMouseEnter:function(e){this.model.highlight()},_onMouseLeave:function(e){this.model.unhighlight()},_onImageLoaded:function(){this._rerender()}})}(DDG),function(e){var t=e.Views.Base;e.Views.Places.PlaceHours=function(e){t.call(this,e),this._cacheElems(".js-place-hours",["close"]),this.bindEvents([[this.$close,"click",this._onCloseClick],[this.model,"change:hoursExpanded",this._toggle]])},e.Views.Places.PlaceHours.prototype=$.extend({},t.prototype,{template:"place_hours",_render:function(){t.prototype._render.call(this,this.model)},_toggle:function(){this.$el.toggleClass("is-hidden")},_onCloseClick:function(){this.model.toggleHoursExpand()}})}(DDG),function(e){var t=e.Views.Base,i={phone:lp("maps_places","Phone"),hours:lp("maps_places","Regular Hours Today"),streetaddress:lp("maps_places","Address")};e.Views.Places.PlaceSnippet=function(e){this.answer=e.answer,this.item=e.answer.items[0]||{},this.infoSelector=e.answer.infoSelector||"",t.call(this,e)},e.Views.Places.PlaceSnippet.prototype=$.extend({},t.prototype,{template:"place_snippet",_render:function(){var i={title:this._getTitle(),name:this.item.name,infoType:this._getInfoTypeLabel(),url:this._getLinkUrl(),action:"streetaddress"===this.infoSelector};t.prototype._render.call(this,i),this._cacheElems(".js-place-snippet",["subtitle-name","trigger"]),this.bindEvents([[this.$subtitlename,"click",this._onSubtitleNameClicked],[this.$trigger,"click",this._onTriggerClicked]]),e.pixel.fire("sn_l",{infoSelector:this.infoSelector})},_getTitle:function(){return this.item.snippetInfoMap[this.infoSelector]},_getInfoTypeLabel:function(){var e=i[this.infoSelector];return e?", "+e:""},_getLinkUrl:function(){return"phone"===this.infoSelector?"tel:"+this.item.phone:null},_openExpandedMap:function(){e.router.navigate("toggle-map",{model:this.answer,isMapExpanded:!0}),this.answer.engaged({snippet:this.infoSelector})},_onTriggerClicked:function(e){e.preventDefault(),this._openExpandedMap()},_onSubtitleNameClicked:function(e){e.preventDefault(),this._openExpandedMap()}})}(DDG),function(e){var t=e.Views.Base;e.Views.OpenInApp=function(i){t.call(this,i),this.bindEvents([[e.settings,"change:"+e.settings.THEME_KEY,this._setDeepLink]])},e.Views.OpenInApp.prototype=$.extend({},t.prototype,{template:"open_in_app",_render:function(){$(".js-header-logo").addClass("header__logo-wrap--offset"),t.prototype._render.call(this,{}),this._cacheElems(".js-open-in-app",["link"]),this._firePixel("render"),this._setDeepLink(),this.bindEvents([[this.$link,"click",this._onClick]])},destroy:function(){t.prototype.destroy.call(this)},_setDeepLink:function(){this.$link.attr("href",this.model.createAppQueryUrl({campaign:"oia"}))},_onClick:function(){this._firePixel("click")},_firePixel:function(t){var i;switch(t){case"render":i="oiai";break;case"click":i="oiac";break;default:return}e.pixel.fire(i,{va:e.opensearch.variant,atbva:e.opensearch.atbVariant})}})}(DDG),function(e){var t=e.Views.Base;e.Views.Sports.League=function(e){this.moduleType=e.model.moduleType,t.call(this,e)},e.Views.Sports.League.prototype=$.extend({},t.prototype,{template:"sports_league",_render:function(){t.prototype._render.call(this,this.model);var i=this.model.hasLeagueScheduleTab?["schedule","tab-schedule"]:[];this._cacheElems(".js-sportsview",["controls","dropdown","games","standings","tab-games","tab-standings"].concat(i));var s=this.model.hasWeekSelector?this.model.getSelectedWeek().games:this.model.recentLeagueGames;this.views.matchUpTable=new e.Views.Sports.MatchUpTable({appendTo:this.$games,model:this.model,collapsedMax:4,games:s,type:"full",hideOldGames:!this.model.hasWeekSelector}),this.model.hasWeekSelector&&(this.views.dropdown=new e.Views.Dropdowns.SportsWeekFilter({appendTo:this.$dropdown,model:this.model})),this.model.hasLeagueScheduleTab&&(this.views.scheduleTable=new e.Views.Sports.MatchUpTable({appendTo:this.$schedule,model:this.model,collapsedMax:4,games:this.model.upcomingLeagueGames,type:"schedule"})),this.views.standingsTable=new e.Views.Sports.StandingsTable({appendTo:this.$standings,model:this.model});var a=this.model.hasLeagueScheduleTab?[[this.$tabschedule,"click",this._onTabSelected],[this.model,"change:recentLeagueGames",this.views.matchUpTable._rerender],[this.model,"change:upcomingLeagueGames",this.views.scheduleTable._rerender],[this.views.scheduleTable,"rerender",this._onMatchUpTableRerender]]:[];this.bindEvents([[this.$tabgames,"click",this._onTabSelected],[this.$tabstandings,"click",this._onTabSelected],[this.model,"change:activeTab",this._onActiveTabChanged],[this.model,"change:requestInProgress",this._toggleLoadingState],[this.views.matchUpTable,"rerender",this._onMatchUpTableRerender]].concat(a)),this.model.hasLeagueScheduleTab&&this._guardAgainstEmptyTab(),this._onTabSelected(null,this.model.activeTab),this._onActiveTabChanged(this.model.activeTab)},_rerender:function(){this.unbindEvents(),t.prototype._rerender.call(this)},_onTabSelected:function(e,t){e&&this.model.engaged();var i=t||e.target.name,s="games"!==i||this.views.matchUpTable.hasHiddenContent,a="games"===i&&this.views.matchUpTable.hasUpcomingGames;this.model.hasLeagueScheduleTab&&"schedule"===i&&(s=this.views.scheduleTable.hasHiddenContent,a=this.views.scheduleTable.hasUpcomingGames),this.model.changeTab(i,s,a)},_guardAgainstEmptyTab:function(){"games"===this.model.activeTab&&0===this.model.recentLeagueGames.length&&0!==this.model.upcomingLeagueGames.length&&(this.model.activeTab="schedule"),"schedule"===this.model.activeTab&&0===this.model.upcomingLeagueGames.length&&0!==this.model.recentLeagueGames.length&&(this.model.activeTab="games")},_onActiveTabChanged:function(e){switch(this.$tabstandings.removeClass("selected"),this.$tabgames.removeClass("selected"),this.$games.addClass("is-hidden"),this.$standings.addClass("is-hidden"),this.$dropdown.addClass("is-hidden"),this.model.hasLeagueScheduleTab&&(this.$tabschedule.removeClass("selected"),this.$schedule.addClass("is-hidden"),0==this.model.upcomingLeagueGames.length&&this.$tabschedule.addClass("is-hidden"),0==this.model.recentLeagueGames.length&&this.$tabgames.addClass("is-hidden")),e){case"games":this.$tabgames.addClass("selected"),this.$games.removeClass("is-hidden"),this.model.hasWeekSelector&&this.$dropdown.removeClass("is-hidden");break;case"schedule":this.$tabschedule.removeClass("is-hidden"),this.$tabschedule.addClass("selected"),this.$schedule.removeClass("is-hidden");break;case"standings":this.$tabstandings.addClass("selected"),this.$standings.removeClass("is-hidden")}},_toggleLoadingState:function(e){e?(this.$el.fadeTo(.2,.5),this.$el.css("pointer-events","none")):(this.$el.fadeTo(.2,1),this.$el.css("pointer-events","all"))},_onMatchUpTableRerender:function(){"games"===this.model.activeTab?(this.model.set("canModuleExpand",this.views.matchUpTable.hasHiddenContent),this.model.set("showTimeZoneMsg",this.views.matchUpTable.hasUpcomingGames)):this.model.hasLeagueScheduleTab&&"schedule"===this.model.activeTab&&(this.model.set("canModuleExpand",this.views.scheduleTable.hasHiddenContent),this.model.set("showTimeZoneMsg",this.views.scheduleTable.hasUpcomingGames))}})}(DDG),function(e){var t=e.Views.Base;e.Views.Sports.Team=function(e){this.moduleType=e.model.moduleType,this.model=e.model,t.call(this,e)},e.Views.Sports.Team.prototype=$.extend({},t.prototype,{template:"sports_team",_render:function(){this._ops={showControlsSection:!!this.model.upcomingGames.length},t.prototype._render.call(this,this._ops),this._cacheElems(".js-sportsview",["controls","scores","schedule","game-card","passed-games","tab-scores","tab-schedule"]),"passed"!==this.model.seasonStatus&&"unnecessary"!==this.model.mostRelevantGame.simpleStatus&&(this.views.gameCard=new e.Views.Sports.GameCard({appendTo:this.$scores,model:this.model,game:this.model.mostRelevantGame})),this.views.passedGamesList=new e.Views.Sports.MatchUpTable({appendTo:this.$scores,model:this.model,collapsedMax:"passed"===this.model.seasonStatus?4:2,games:this.model.passedGames,type:"passed"}),this.views.schedule=new e.Views.Sports.MatchUpTable({appendTo:this.$schedule,model:this.model,collapsedMax:4,games:this.model.upcomingGames,type:"upcoming"}),this.bindEvents([[this.$tabscores,"click",this._onTabSelected],[this.$tabschedule,"click",this._onTabSelected],[this.model,"change:activeTab",this._onActiveTabChanged]]),this._onTabSelected(null,this.model.activeTab),this._onActiveTabChanged(this.model.activeTab)},_rerender:function(){this.unbindEvents(),t.prototype._rerender.call(this)},_onTabSelected:function(e,t){e&&this.model.engaged();var i=t||e.target.name,s="scores"===i?this.views.passedGamesList.hasHiddenContent:this.views.schedule.hasHiddenContent,a="scores"!==i||"upcoming"===this.model.mostRelevantGame.simpleStatus;this.model.changeTab(i,s,a)},_onActiveTabChanged:function(e){"scores"===e?(this.$tabscores.addClass("selected"),this.$tabschedule.removeClass("selected"),this.$schedule.addClass("is-hidden"),this.$scores.removeClass("is-hidden")):(this.$tabscores.removeClass("selected"),this.$tabschedule.addClass("selected"),this.$schedule.removeClass("is-hidden"),this.$scores.addClass("is-hidden"))}})}(DDG),function(e){var t=e.Views.Base;e.Views.Sports.Game=function(e){t.call(this,e)},e.Views.Sports.Game.prototype=$.extend({},t.prototype,{template:"sports_game",_render:function(){t.prototype._render.call(this),this._cacheElems(".js-sportsview",["content"]),"unnecessary"!==this.model.mostRelevantGame.simpleStatus&&(this.views.gameCard=new e.Views.Sports.GameCard({appendTo:this.$content,model:this.model,game:this.model.mostRelevantGame}));var i=this.model.upcomingGames.concat(this.model.passedGames);if(i.length){this.views.matchups=new e.Views.Sports.MatchUpTable({appendTo:this.$content,model:this.model,collapsedMax:this.model.gameModuleMatchupTableCollapsedMaxRows,games:i,type:"combined"});var s=this.views.matchups.hasHiddenContent,a=this.model.upcomingGames.length||"upcoming"===this.model.mostRelevantGame.simpleStatus;this.model.set("canModuleExpand",s),this.model.set("showTimeZoneMsg",a)}}})}(DDG),function(e){var t=e.Views.Base;e.Views.Sports.GameCard=function(e){this.model=e.model,this.game=e.game,t.call(this,e)},e.Views.Sports.GameCard.prototype=$.extend({},t.prototype,{template:"sports_game_card",_render:function(){this.game=this._augmentWithOvertimeData(this.game),this.game=this._augmentWithTournamentData(this.game),t.prototype._render.call(this,{game:this.game,isMobile:e.device.isMobile}),this._cacheElems(".js-sports-game-card",["modulelink"]),this.bindEvents([[this.$modulelink,"click",this._recordEngagement]])},_recordEngagement:function(){this.model.engaged()},_augmentWithOvertimeData:function(e){var t=e.score.quarter-4;e.overtimePeriods=[];for(var i=0;i1,0!==e.overtimePeriods.length&&(e.score.away.overtimeScoring=e.score.away.scoring.slice(4,7),e.score.home.overtimeScoring=e.score.home.scoring.slice(4,7)),e},_augmentWithTournamentData:function(e){return e.belongsToTournament=!!e.title&&-1!=e.title.indexOf("Game "),e.belongsToTournament?(e.ifNecessary=-1!=e.title.indexOf("if necessary"),e.numberWithinSeries=e.title.split(" ")[1],e):e}})}(DDG),function(e){var t=e.Views.Base;e.Views.Sports.MatchUpTable=function(e){this.model=e.model,this.collapsedMax=e.collapsedMax,this.games=e.games,this.type=e.type,this.hideOldGames=e.hideOldGames,t.call(this,e)},e.Views.Sports.MatchUpTable.prototype=$.extend({},t.prototype,{template:"sports_matchup_table",_render:function(){var i=this._buildMatchUpList(this.type,this.hideOldGames);t.prototype._render.call(this,{matchUpList:i,isMobile:e.device.isMobile}),this._cacheElems(".js-sports-matchup",["modulelink"]),this.bindEvents([[this.model,"change:isExpanded",this._updateListDisplay],[this.model,"selectedWeekChange",this._onSelectedWeekChange],[this.$modulelink,"click",this._recordEngagement]]),this._updateListDisplay()},_buildMatchUpList:function(e,t){this.hasHiddenContent=!1,this.hasUpcomingGames=!1;var i=[],s=this.games,a=this.collapsedMax;if(!s.length)return i;if("full"===e||"schedule"===e){var o=!1;t&&(o=s.some(function(e){return this._gameStartInLast7Days(e)}.bind(this)));var n=s.reduce(function(i,s,n){var l=$.extend({},s);"upcoming"===l.simpleStatus&&(this.hasUpcomingGames=!0);var r=n+1>a;t&&o&&!this._gameStartInLast7Days(l)&&(r=!0),r&&(this.hasHiddenContent=!0,l.hideRowOnCollapse=r);var d="schedule"===e&&"upcoming"===l.simpleStatus?"time":"dateTimeStatus";l.timeAndStatus=this.model.dateFormat(d,l);var c=this.model.dateFormat("dateWeekday",l),h=i[c];return h?h.games.push(l):i[c]={title:c,games:[l],hideRowOnCollapse:r},i}.bind(this),{});for(var l in n)i.push(n[l])}else"passed"===e?(s.reverse(),i=[{title:lp("Sports module","Past Games"),games:s.map((function(e,t){return"upcoming"===e.simpleStatus&&(this.hasUpcomingGames=!0),e.hideRowOnCollapse=t+1>a,e.hideRowOnCollapse&&(this.hasHiddenContent=!0),e.timeAndStatus=this.model.dateFormat("dateShort",e),e}),this)}]):"upcoming"===e?i=[{title:"",games:s.map((function(e,t){return"upcoming"===e.simpleStatus&&(this.hasUpcomingGames=!0),e.hideRowOnCollapse=t+1>a,e.hideRowOnCollapse&&(this.hasHiddenContent=!0),e.timeAndStatus=this.model.dateFormat("dateTime",e),e}),this)}]:"combined"===e&&(i=[{title:(s=s.filter((function(e){return e.id!==this.model.mostRelevantGame.id}),this)).length?lp("Sports module","Matchups"):"",games:s.map((function(e,t){return"upcoming"===e.simpleStatus&&(this.hasUpcomingGames=!0),e.hideRowOnCollapse=t+1>a,e.hideRowOnCollapse&&(this.hasHiddenContent=!0),e.timeAndStatus=this.model.dateFormat("dateTimeStatus",e),e}),this)}]);return i},_onSelectedWeekChange:function(){this.games=this.model.getSelectedWeek().games,this._rerender()},_rerender:function(){this.unbindEvents(),t.prototype._rerender.call(this)},_updateListDisplay:function(){var e=this.model.isExpanded;$(".matchup [data-hide-row-on-collapse]").each((function(t,i){e?$(i).show():$(i).hide()}))},_recordEngagement:function(){this.model.engaged()},_gameStartInLast7Days:function(e){var t=new Date,i=new Date(this.model.dateFormat("dateString",e)),s=(t.getTime()-i.getTime())/864e5;return s>0&&s<7}})}(DDG),function(e){var t=e.Views.Base;e.Views.Sports.StandingsTable=function(e){this.model=e.model,this.template=this.model.standingsViewTemplate,t.call(this,e)},e.Views.Sports.StandingsTable.prototype=$.extend({},t.prototype,{_render:function(){var i=this.selectedConference||Object.keys(this.model.standingsData.full)[0],s=this.model.standingsData.full[i],a=this.model.standingsData.collapsed[i];t.prototype._render.call(this,{standingsData:this.model.standingsData,conference:s,collapsedConference:a,expanded:this.model.expanded,selectedConference:i,isMobile:e.device.isMobile}),this._cacheElems(".js-sports-standings",["tab","full-list","collapsed-list","modulelink"]),this.bindEvents([[this.model,"change:isExpanded",this._updateListDisplay],[this.model,"change:standingsData",this._rerender],[this.$tab,"click",this._onTabClick],[this.$modulelink,"click",this._recordEngagement]]),this._updateListDisplay()},_onTabClick:function(e){this.model.engaged();var t=e.target.name;t!==this.selectedConference&&(this.selectedConference=t,this._rerender())},_updateListDisplay:function(){this.model.isExpanded?(this.$collapsedlist.addClass("is-hidden"),this.$fulllist.removeClass("is-hidden")):(this.$collapsedlist.removeClass("is-hidden"),this.$fulllist.addClass("is-hidden"))},_rerender:function(){this.unbindEvents(),t.prototype._rerender.call(this)},_recordEngagement:function(){this.model.engaged()}})}(DDG),function(e){var t=e.Models.Base;e.Models.AnomalyModal=function(e){t.call(this,e),this.determineFileNames(e.p),this.selectedTiles={}},e.Models.AnomalyModal.prototype=$.extend({},t.prototype,{determineFileNames:function(e){this.tiles=e.split("-").map((function(e){return e+".jpg"}))},toggleTile:function(e){var t=this.tiles[e];t&&(this.selectedTiles[t]=!this.selectedTiles[t])},getAnswer:function(){return Object.keys(this.selectedTiles).filter((function(e){return this.selectedTiles[e]}),this).map((function(e){return/\d+/.exec(e)||""})).sort().join("-")}})}(DDG),function(e){var t=e.Models.Base;e.Models.Maps.Autocomplete=function(e){this.answer=e.answer||{},t.call(this,e)},e.Models.Maps.Autocomplete.prototype=$.extend({},t.prototype,{totalRequested:0,lastReceived:0,suggestions:[],currentQuery:"",clearData:function(){this.suggestions=[],this.currentQuery=""},isBangQuery:function(e){return!1},getSuggestion:function(e){return void 0===e?{}:this.suggestions&&this.suggestions.length>=e?this.suggestions[e]:{}},getSuggestions:function(t){if(t){this.currentQuery=t;var i=this._getOptions(),s=this.totalRequested++;w.mapkit?(this.mapkitSearch||(this.mapkitSearch=new w.mapkit.Search),this.mapkitSearch.autocomplete(t,function(e,t){e||this._onSuggestionsReceived(t,s)}.bind(this),i)):(i.q=t,i.resultTypeFilter="address,poi",i.mkjsVersion="5.75.4",e.mapkit.autocomplete(i,function(e){this._onSuggestionsReceived(e,s)}.bind(this)))}else this.set("suggestions",[])},_getOptions:function(){if("directions"===this.answer.id){var e=this.answer.data&&this.answer.data[0]&&this.answer.data[0].user_location;e&&e.lat&&e.lon&&(e.lat=parseFloat(e.lat),e.lon=parseFloat(e.lon))}var t=this.answer.geo_bbox||this.answer.approx_geo_bbox||e,i={language:"en"};if(t)if(w.mapkit){var s=new w.mapkit.Coordinate(t.lat,t.lon),a=new w.mapkit.CoordinateSpan(t.lat_delta,t.lon_delta),o=new w.mapkit.CoordinateRegion(s,a);i.region=o,i.coordinate=s}else i.searchRegion=t.lat+","+t.lon+","+t.lat+","+t.lon;return i},_onSuggestionsReceived:function(e,t){if(!(t0&&(e.what=t[0],e.where=t.length>1?t[1]:"","search nearby"===e.where.toLowerCase()&&(e.where=lp("vertical_map","Search Near My Location"),e.type="nearby")),delete e.displayLines,delete e._completionUrl,e},_parseMetadata:function(e){if(e){var t=e.match(/\&metadata\=/)?e.replace(/^.*\&metadata\=/,""):"";return t=decodeURIComponent(t)}}})}(DDG),function(e){var t=e.Models.Base,i={drive:{id:"drive",text:"AUTOMOBILE",printDisplay:lp("directions","Driving")+" "+lp("directions","Directions")},walk:{id:"walk",text:"WALKING",printDisplay:lp("directions","Walking")+" "+lp("directions","Directions")}};e.Models.Maps.Directions=function(i){i=i||{},this.start=i.start||null,this.end=i.end||null,this.startDisplay=i.startDisplay||null,this.endDisplay=i.endDisplay||null,this.searchBoxValue={start:"",end:""},this.isStartUpdating=!1,this.isEndUpdating=!1,this.routeList=[],this.canRoute=!1,this.isRouting=!1,this.hasResults=!1,this.isMapLoaded=!1,this.isPrintPreviewOpen=!1,this.canRetryLocationSearch=!0,i.userLocation&&i.userLocation.lat&&i.userLocation.lon?this.addUserLocation({lat:i.userLocation.lat,lon:i.userLocation.lon}):this.fetchUserLocation(),e.device.isMobileDevice&&(this.externalMapProvider=e.device.isIDevice?"apple":"google",this.externalMapProviderDisplay="apple"===this.externalMapProvider?"Apple Maps":"Maps App"),this._setCurrentTransportType(i.transportType||"drive"),t.call(this,i),this.on("change:start",this._onLocationChange),this.on("change:end",this._onLocationChange),this.on("change:isStartUpdating",this._onLocationUpdatingChange),this.on("change:isEndUpdating",this._onLocationUpdatingChange),e.router.add("directions",this._handleDirections.bind(this))},e.Models.Maps.Directions.prototype=$.extend({},t.prototype,{onDirectionsAction:function(t){t&&t.start&&(this.setLocation({type:"start",what:t.start.what,where:t.start.where,coordinate:t.start.coordinate,display:t.start.display}),t.start.display&&this.set("startDisplay",t.start.display)),t&&t.end&&(this.setLocation({type:"end",what:t.end.what,where:t.end.where,coordinate:t.end.coordinate,display:t.end.display}),t.end.display&&this.set("endDisplay",t.end.display)),t&&t.transport&&("drive"===t.transport||"walk"===t.transport)&&this._setCurrentTransportType(t.transport),this.start&&this.end&&e.router.navigate("directions",t)},_handleDirections:function(t){e.history.get("bbox")&&e.history.clear("bbox"),e.history.get("strict_bbox")&&e.history.clear("strict_bbox"),e.history.get("iai")&&e.history.clear("iai"),t&&t.state&&(t.state.start||t.state.end)?(["start","end"].map(function(i){if(t.state[i]){e.history.set(i,t.state[i]);var s=decodeURIComponentSafe(e.history.getComposite(i,"what")),a=decodeURIComponentSafe(e.history.getComposite(i,"where"));this.setLocation({type:i,what:s,where:a,display:s||a})}}.bind(this)),t.state.transport&&(e.history.set("transport",t.state.transport),this._setCurrentTransportType(t.state.transport))):t&&t.state?(e.history.clear("start"),e.history.clear("end"),e.history.clear("transport"),this.set("start",null),this.set("routeList",[])):this.isStartUpdating||this.isEndUpdating||this._updateRouteHistory(),!this.start&&!this.end||t&&t.noRouting||this.isRouting||this.route()},_updateRouteHistory:function(){e.history.set("iaxm","directions"),this._isRawLocation(this.start)?e.history.setComposite("start","what",encodeURIComponent(this.start)):(this.start&&this.start.what&&e.history.setComposite("start","what",encodeURIComponent(this.start.what)),this.start&&this.start.where&&e.history.setComposite("start","where",encodeURIComponent(this.start.where))),this._isRawLocation(this.end)?e.history.setComposite("end","what",encodeURIComponent(this.end)):(this.end&&this.end.what&&e.history.setComposite("end","what",encodeURIComponent(this.end.what)),this.end&&this.end.where&&e.history.setComposite("end","where",encodeURIComponent(this.end.where))),e.history.set("transport",this.currentTransportType.id)},_isRawLocation:function(e){if(this.start)return"string"==typeof e;throw"Invalid location"},fetchUserLocation:function(t){this.userLocation&&$.isFunction(t)?t(this.userLocation):e.userLocator.fetchGeoIPLocation(function(e){e&&e.isValid()&&(this.addUserLocation(e),$.isFunction(t)&&t(e))}.bind(this))},addUserLocation:function(e){e.lat&&e.lon&&this.set("userLocation",{lat:parseFloat(e.lat),lon:parseFloat(e.lon)})},setLocation:function(t){var i={};if(t.what&&(i.what=t.what),t.where&&(i.where=t.where),t.coordinate&&(i.coordinate=t.coordinate),t.display&&(i.display=t.display),t.rawLocation&&(i.rawLocation=t.rawLocation),i.what||i.where||i.coordinate){var s=new e.Models.Maps.Location(i);this.set("start"===t.type?"start":"end",s)}},route:function(t,i){if(this.directions=this.directions||w.mapkit&&new w.mapkit.Directions,(i||this.directions)&&(t&&this._setCurrentTransportType(t),this.canRoute))if(!i&&this.requestID&&this.directions.cancel(this.requestID),this.set("isRouting",!0),i){var s={wps:'[{"q":"'+this.start.get()+'"},{"q":"'+this.end.get()+'"}]',transport:this.currentTransportType.text,n:"3",lang:"en",mkjsVersion:"5.75.4"};e.mapkit.directions(s,function(e){this._onRouteCompleted(null,e,!0)}.bind(this))}else this.requestID=this.directions.route({origin:this.start.get(),destination:this.end.get(),transportType:this.currentTransportType.text,requestsAlternateRoutes:!0},this._onRouteCompleted.bind(this))},tryToRoute:function(){this.canRoute&&e.mapkit.init(function(e,t){t&&this.onDirectionsAction()}.bind(this))},updateCanRouteStatus:function(e,t){e&&(this.searchBoxValue[e]=t||"",this.set("canRoute",this.searchBoxValue.start.length>0&&this.searchBoxValue.end.length>0))},selectRoute:function(e,t){e&&1!==this.routeList.length&&(t||this.collapseAllRoutes(),this.routeList.forEach((function(t){t.set("isSelected",t.name===e)})))},toggleRoute:function(e){e&&(this.selectRoute(e,!0),this.routeList.forEach((function(t){t.name===e?t.set("isExpanded",!t.isExpanded):t.set("isExpanded",!1)})))},collapseAllRoutes:function(){this.routeList.forEach((function(e){e.set("isExpanded",!1)}))},autocompleteLocation:function(t,i){if(t.loc&&t.type){i||this.mapkitSearch||!w.mapkit||(this.mapkitSearch=new w.mapkit.Search);var s={includeAddresses:!0,includePointsOfInterest:!0,includeQueries:!1};if(t.locationHint||this.userLocation){var a=t.locationHint||this.userLocation;i||!w.mapkit?s.region=a.lat+","+a.lon+","+a.lat+","+a.lon:s.coordinate=new w.mapkit.Coordinate(a.lat,a.lon)}if(i||!this.mapkitSearch){var o={q:t.loc,resultTypeFilter:"address,poi",searchRegion:s.region};e.mapkit.search(o,function(e){this._updateLocation(e,t)}.bind(this))}else this.mapkitSearch.autocomplete(t.loc,function(e,i){e||this._updateLocation(i,t)}.bind(this),s)}},formatDisplayLocation:function(e,t){var i=e||"";return t&&"United States"!==t&&(i=i+", "+(t=t.replace(/(, United States$)/,""))),i=i.replace(/ +/g," ")},_updateLocation:function(e,t){var i=this._processAutocompleteResults(e,t);this.set(t.type+"Display",i.display),this.setLocation({type:t.type,what:i.what,where:i.where,display:i.display,rawLocation:i.rawLocation,coordinate:i.coordinate}),t.callbackFn&&$.isFunction(t.callbackFn)&&t.callbackFn(i.display)},_getFormattedAddress:function(e){if(e)return e.formattedAddressLines||e.displayLines},_processAutocompleteResults:function(e,t){var i={what:"",where:"",display:"",rawLocation:"",coordinate:{lat:"",lon:""}};try{var s="",a="",o="",n="",l="";if(e.results&&e.results.length>0)var r=this._getFormattedAddress(e.results[0]),d=this._getFormattedAddress(e.results[1]);if(e.results&&(e.results[0].name||r||d)){var c;c=r&&r.length>0?e.results[0]:d&&d.length>0?e.results[1]:e.results[0];var h=this._getFormattedAddress(c);if(c.name&&!h)a=c.name,n=c.name;else if(!c.name||h[0].startsWith(c.name)){a=h[0],n=h[0];for(var p=1;p0?", ":"")+h[p],"United States"!==h[p]&&(l=l+(l.length>0?", ":"")+h[p])}else{a=c.name,n=c.name;for(var u=0;u0?", ":"")+h[u],"United States"!==h[u]&&(l=l+(l.length>0?", ":"")+h[u])}s=(s=n+(l?", "+l:"")).replace(/ +/g," "),i.what=a,i.where=o,i.display=s,i.rawLocation=t.loc,c.center&&c.center.lat&&c.center.lng&&(i.coordinate.lat=c.center.lat,i.coordinate.lon=c.center.lng)}else i.what=e.query||t&&t.loc,i.display=e.query||t&&t.loc}catch(e){}return i},_setStartEndCoords:function(e,t){if(t){var i=e.origin&&e.origin.center,s=e.destination&&e.destination.center;if(!i||!s)return;this.set("coordStart",{latitude:i.lat,longitude:i.lng}),this.set("coordEnd",{latitude:s.lat,longitude:s.lng})}else if(e.routes&&e.routes.length>0){var a=e.routes[0].steps[1],o=e.routes[0].steps[e.routes[0].steps.length-2];if(!a||!o)return;this.set("coordStart",a.path[0]),this.set("coordEnd",o.path[o.path.length-1])}else this.set("coordStart",null),this.set("coordEnd",null)},_setCurrentTransportType:function(e){e&&e in i&&this.set("currentTransportType",i[e])},_canRoute:function(){return this.start&&"object"==typeof this.start&&this.end&&"object"==typeof this.end&&!this.isStartUpdating&&!this.isEndUpdating},_onRouteCompleted:function(t,i,s){if(this.set("isRouting",!1),this._setStartEndCoords(i,s),!i||!i.routes||0===i.routes.length)return this.set("hasResults",!1),void this.set("routeList",[]);this.hasResults=!0,this.numberOfRoutes=i.routes.length,this.routeList=[];var a,o=0,n=i.routes.map(function(t,n){s&&(t.steps=[],t.path=[],t.stepIndexes.forEach((function(e){t.steps.push(i.steps[e]),t.path.push(i.stepPaths[e])}))),t.index=n;var l=new e.Models.Maps.DirectionsRoute({route:t,directionsModel:this});return a>t.expectedTravelTime&&(o=n,a=t.expectedTravelTime),1===this.numberOfRoutes&&l.set("isExpanded",!0),l}.bind(this));n[o].set("isFastestRoute",!0),this.set("fastestRoute",n[o]),this.fastestRoute.set("isSelected",!0),this.set("routeList",n)},_onLocationChange:function(){this.set("canRoute",this._canRoute())},_onLocationUpdatingChange:function(){this.set("canRoute",this._canRoute()),this.tryToRoute()}})}(DDG),function(e){var t=e.Models.Base;e.Models.Maps.DirectionsRoute=function(i){if(this.directionsModel=i.directionsModel,i.route){i.route.steps=this._processSteps(i.route.steps);var s=i.route.expectedTravelTime||i.route.durationSeconds||0,a=i.route.distance||i.route.distanceMeters||0;t.call(this,{index:i.route.index,name:i.route.name,expectedTravelTime:s,expectedTravelTimeFormatted:this._convertMinutes(s),distance:a,distanceFormatted:e.geo.formatDistance(a,e.geo.getRoadDistanceUOM()),steps:i.route.steps,path:i.route.path,polyline:i.route.polyline})}},e.Models.Maps.DirectionsRoute.prototype=$.extend({},t.prototype,{_convertMinutes:function(e){var t=Math.floor(e/60);return Math.floor(t/60)+" h "+t%60+" min"},_processSteps:function(t){var i=[],s=e.geo.getRoadDistanceUOM();i=t.map((function(t){var i=t._imageUrl||t.maneuver&&t.maneuver.arrowUrl;t._imageUrl||(i="//cdn2.apple-mapkit.com"+i),i&&(t.imageUrl=i.replace("{{scale}}","1"),t.imageUrl=t.imageUrl.replace(/\{\{.*\}\}/,""),e.settings.isDarkTheme()&&(t.imageUrl=t.imageUrl.replace("arrowFill=000000","arrowFill=cccccc")));var a=t.distance||t.distanceMeters;return a&&(t.stepHeader=e.geo.formatDistance(a,s)),t}));var a=this.directionsModel.start,o=this.directionsModel.end,n={stepHeader:a.what||this.directionsModel.startDisplay||a.where,instructions:a.what&&a.where?a.where:null,imageUrl:"/assets/maps/directions-marker-black.svg"},l={stepHeader:o.what||this.directionsModel.endDisplay||o.where,instructions:o.what&&o.where?o.where:null,imageUrl:"/assets/maps/directions-marker-red.svg"};return i.shift(),i.unshift(n),i.push(l),i}})}(DDG),function(e){var t=e.Models.Base;e.Models.Maps.DirectionsRouteStep=function(e){t.call(this,e)},e.Models.Maps.DirectionsRouteStep.prototype=$.extend({},t.prototype,{})}(DDG),function(e){var t=e.Models.Base;e.Models.Maps.Location=function(e){this.what=e.what||null,this.where=e.where||null,this.coordinate=e.coordinate||null,this.display=e.display||null,this._setMapkitCoordinate(),t.call(this,e)},e.Models.Maps.Location.prototype=$.extend({},t.prototype,{get:function(){return this.what||this.where?this.getAsText():this.mkCoordinate?this.mkCoordinate:this.coordinate?(this._setMapkitCoordinate(),this.mkCoordinate||this.coordinate.lat+","+this.coordinate.lon):void 0},getAsText:function(){var e="";return this.what&&(e+=this.what),this.where&&(e=this.what?e+", "+this.where:e+this.where),this.what||this.where||(e="Your Location"),e},_setMapkitCoordinate:function(){w.mapkit&&this.coordinate&&this.coordinate.lat&&this.coordinate.lon&&(this.mkCoordinate=new w.mapkit.Coordinate(parseFloat(this.coordinate.lat),parseFloat(this.coordinate.lon)))}})}(DDG),function(e){var t=e.Models.Base,i={wiki_maps_trigger:[{addTo:"maps"}],imdb_id:[{dataTypeOverride:"imdb_title_id",matching:/^tt/,addTo:"profiles"},{dataTypeOverride:"imdb_name_id",matching:/^nm/,addTo:"profiles"}],rotten_tomatoes:[{matching:/^(tv|m)/,addTo:"profiles"}],twitter_profile:[{addTo:"profiles"}],instagram_profile:[{addTo:"profiles"}],youtube_channel:[{addTo:"profiles"}],facebook_profile:[{addTo:"profiles"}],spotify_artist_id:[{addTo:"profiles"}],soundcloud_id:[{addTo:"profiles"}]};e.Models.Modules.AboutInfoBox=function(e){this._defaultVisibleRows=e.minimizeHeight?0:3,this.maps=[],this.profiles=[],t.call(this,this.transform(e))},e.Models.Modules.AboutInfoBox.prototype=$.extend({},t.prototype,{toggleExpand:function(){if(this.canExpand()){for(var e=0;ethis._defaultVisibleRows},transform:function(e){var t;if(e.Infobox&&((t=e.Infobox.content).forEach(function(e){if(e&&e.value){var t=i[e.data_type];t&&t.forEach(function(t){t.matching&&!e.value.match(t.matching)||(t.dataTypeOverride&&(e.data_type=t.dataTypeOverride),this[t.addTo].push(e))}.bind(this))}}.bind(this)),t=t.filter((function(e){if(e&&e.value&&e.data_type){var t=typeof e.value;if("string"===t&&"["===e.value.charAt(0)||"Website"===e.label)return!1;if(-1!==["string","object"].indexOf(t)&&-1!==["string","template"].indexOf(e.data_type))return!0}return!1}))),t){e.hasItems=!0;for(var s=0;st.sort?1:-1}))}},_createLinkFromInfoboxData:function(e){return this._createLink(e.data_type,e.value)},_createLink:function(e,t){var i=s[e],a=i.url.replace("{{val}}",t),o="/assets/icons/thirdparty/{{icon}}.svg".replace("{{icon}}",i.icon);return{url:a,name:i.name,icon:i.icon,iconURL:o,sort:i.sort}},_addLink:function(e,t){this.links.push(this._createLink(e,t)),this._emitChange("links",this.links)},_isStreamable:function(){if(i.indexOf(this.entity)>-1)return!0},_tryAddingAmazon:function(){$.ajax({url:"/m.js?q="+encodeURIComponent(this.title)+"&c=v&o=json&l="+e.settings.get("kl")+"&country="+window.ct,dataType:"json",success:function(e){e&&e.results&&e.results.length&&this._addLink("amazon",e.results[0].url)}.bind(this)})}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.Covid19=function(e){e.country=window.ct,e.locale=window.locale,e.region=window.kl,t.call(this,e),this.countries=[],this._setCopy(e)},e.Models.Answers.Covid19.prototype=$.extend({},t.prototype,{getPixelData:function(){return{l:this.locale}},getCasesData:function(){var t=new Date,i=t.getDate()+"-"+t.getMonth()+"-"+t.getHours();$.getJSON("/covid_data/countries.json?"+i,function(t){try{for(var i,s=t.Countries,a=0,o=0;o0&&(this.world=this._formatNumber(a),this.set("loaded",!0))}catch(t){e.pixel.fire("jse","covid19",{e:t})}}.bind(this))},_formatNumber:function(t){var i=parseFloat(t);return window.isNaN(i)?"-":e.Utils.Formatting.formatNumberForLocale(i)},_setCopy:function(t){var i,s,a,o,n=[];t.region&&"wt-wt"!==t.region?(i=(a=t.region.split("-"))[0],s=a[1],"uk"===i&&(i="gb"),"in"===i&&"hi_IN"===t.locale&&(s="hi")):t.locale&&(i=(a=window.locale.split("_"))[1].toLowerCase(),s=a[0]),this.title=lp("Covid 19 module","Coronavirus Disease (COVID-19)"),this.subtitle=lp("Covid 19 module","Get the latest information:"),this.confirmed=lp("Covid 19 module","Confirmed Cases"),this.worldLabel=lp("Covid 19 module","World"),this.mapLinkText=lp("Covid 19 module","Worldwide Coverage Map"),this.moreStatsText="en"===s?lp("Covid 19 module","More statistics"):lp("additional","More"),this.tab1=lp("Covid 19 module","Summary"),this.tab2=lp("Covid 19 module","Tips"),this.tab3=lp("Covid 19 module","Symptoms"),this.tab4=lp("Covid 19 module","Statistics"),this.tab5=lp("Covid 19 module","Vaccines"),"fr"===s?("fr"===i?(n.push({linkUrl:"https://www.gouvernement.fr/info-coronavirus",linkText:"Gouvernement français",icon:"www.gouvernement.fr.ico"}),o=n[0].linkUrl,this.flagIcon="fr",this.countryName="France",this.displayCountryName="France"):"ca"===i?(n.push({linkUrl:"https://www.canada.ca/fr/sante-publique/services/maladies/2019-nouveau-coronavirus.html",linkText:"Gouvernement du Canada",icon:"www.canada.ca.ico"}),o=n[0].linkUrl,this.flagIcon="ca",this.countryName="Canada",this.displayCountryName="Canada"):"be"===i?(n.push({linkUrl:"https://www.info-coronavirus.be/fr",linkText:"SPF Santé Publique",icon:"www.info-coronavirus.be.ico"}),o=n[0].linkUrl,this.flagIcon="be",this.countryName="Belgium",this.displayCountryName="Belgique"):"ch"===i&&(n.push({linkUrl:"https://www.bag.admin.ch/bag/fr/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov.html",linkText:"Office fédéral de la santé publique OFSP",icon:"www.bag.admin.ch.ico"}),o=n[0].linkUrl,this.flagIcon="ch",this.countryName="Switzerland",this.displayCountryName="Suisse"),n.push({linkUrl:"https://www.who.int/fr/emergencies/diseases/novel-coronavirus-2019",linkText:"OMS",icon:"www.who.int.ico"}),this.tips={heading:"Recommandations de l'Organisation mondiale de la Santé :",items:["Lavez-vous fréquemment les mains.","Évitez de vous toucher le visage.","Éternuez et toussez dans un mouchoir ou le pli de votre coude.","Évitez les foules et les contacts proches.","Restez chez vous si vous pensez être malade.","Si vous avez de la fièvre, de la toux ou des difficultés à respirer, suivez les recommandations de votre "+this._getLocalAuthorityLink("autorité de santé publique",o)+"."]},this.symptoms={heading:"Info santé COVID-19 :",items:["Symptômes: fièvre, toux, difficultés à respirer.","Complications: pneumonie, syndrome de détresse respiratoire aiguë (SDRA), insuffisance rénale.","Facteurs de risques: âge, existence de pathologies sous-jacentes (p.ex. maladies cardiovasculaires, diabète, maladies pulmonaires, etc.)."]}):"it"===s?("it"===i?(this.flagIcon="it",this.countryName="Italy",this.displayCountryName="Italia",n.push({linkUrl:"http://www.salute.gov.it/nuovocoronavirus",linkText:"Ministero della Salute",icon:"www.salute.gov.it.ico"})):"ch"===i&&(this.flagIcon="ch",this.countryName="Switzerland",this.displayCountryName="Svizzera",n.push({linkUrl:"https://www.bag.admin.ch/bag/it/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov.html",linkText:"Ufficio federale della sanità pubblica UFSP",icon:"www.bag.admin.ch.ico"})),n.push({linkUrl:"https://www.who.int/emergencies/diseases/novel-coronavirus-2019",linkText:"Organizzazione mondiale della sanità",icon:"www.who.int.ico"}),this.tips={heading:"I consigli dell'Organizzazione Mondiale della Sanità:",items:["Lava spesso le mani.","Evita di toccarti la faccia.","Starnutisci e tossici in un fazzoletto o all'interno del gomito.","Evita luoghi affollati e contatti ravvicinati.","Se sospetti di essere malato, resta a casa.","Se hai febbre, tosse o difficoltà respiratorie, segui le indicazioni delle "+this._getLocalAuthorityLink("autorità sanitarie",n[0].linkUrl)+"."]},this.symptoms={heading:"COVID-19 informazioni sanitarie:",items:["Sintomi: febbre, tosse, difficoltà respiratorie.","Complicazioni: polmonite, sindrome da distress respiratorio (ARDS), insufficienza renale.","Fattori di Rischio: età, gravi patologie pregresse (ad esempio, cardiopatia, diabete, malattie polmonari, ecc.)."]}):"es"===s?("es"===i?(n.push({linkUrl:"https://www.mscbs.gob.es/profesionales/saludPublica/ccayes/alertasActual/nCov-China/home.htm",linkText:"Gobierno de españa",icon:"www.mscbs.gob.es.ico"},{linkUrl:"http://www.euro.who.int/en/home",linkText:"World Health Organization",icon:"www.who.int.ico"}),o=n[0].linkUrl,this.flagIcon="es",this.countryName="Spain",this.displayCountryName="España"):"us"===i?(this.flagIcon="us",this.countryName="United States",this.displayCountryName="Estados Unidos",n.push({linkUrl:"https://www.cdc.gov/coronavirus/2019-ncov",linkText:e.device.isMobile?"CDC (Centers for Disease Control...)":"CDC (Centers for Disease Control and Prevention)",icon:"www.cdc.gov.ico"},{linkUrl:"https://www.who.int/es/emergencies/diseases/novel-coronavirus-2019",linkText:"Organización Mundial de la Salud",icon:"www.who.int.ico"}),o=n[0].linkUrl):"ar"===i?(this.flagIcon="ar",this.countryName="Argentina",this.displayCountryName="Argentina",n.push({linkUrl:"https://www.argentina.gob.ar/salud/coronavirus-COVID-19",linkText:"Ministerio de Salud",icon:""}),o=n[0].linkUrl):"cl"===i?(this.flagIcon="cl",this.countryName="Chile",this.displayCountryName="Chile",n.push({linkUrl:"https://www.minsal.cl/nuevo-coronavirus-2019-ncov/",linkText:"Ministerio de Salud",icon:"www.minsal.cl.ico"}),o=n[0].linkUrl):"co"===i?(this.flagIcon="co",this.countryName="Colombia",this.displayCountryName="Colombia",n.push({linkUrl:"https://twitter.com/minsaludcol",linkText:"Minsalud",icon:"www.minsalud.gov.co.ico"}),o=n[0].linkUrl):"mx"===i?(this.flagIcon="mx",this.countryName="Mexico",this.displayCountryName="México",n.push({linkUrl:"https://coronavirus.gob.mx/",linkText:"Gobierno de México",icon:"coronavirus.gob.mx.ico"}),o=n[0].linkUrl):"pe"===i&&(this.flagIcon="pe",this.countryName="Peru",this.displayCountryName="Perú",n.push({linkUrl:"https://www.gob.pe/coronavirus",linkText:"Gobierno del Perú",icon:"www.gob.pe.ico"}),o=n[0].linkUrl),n.length<2&&n.push({linkUrl:"https://www.who.int/es/emergencies/diseases/novel-coronavirus-2019",linkText:"Organización Mundial de la Salud",icon:"www.who.int.ico"}),this.tips={heading:"Consejos de la Organización Mundial de la Salud:",items:["Lávese las manos frecuentemente.","Evite tocarse la cara.","Estornude y tosa en un pañuelo de papel o la cara interna del codo.","Evite aglomeraciones de gente y procure mantener la distancia.","Permanezca en su domicilio si se siente enfermo.","Si tiene fiebre, tos o dificultad para respirar, siga los consejos de "+this._getLocalAuthorityLink("las autoridades sanitarias",o)+"."]},this.symptoms={heading:"COVID-19 información sanitaria:",items:["Síntomas: fiebre, tos, falta de aliento.","Complicaciones: neumonía, Síndrome de disnea aguda (SDRA), fallo renal.","Factores de riesgo: edad, problemas de salud serios (p.e. enfermedades cardiacas, diabetes, enfermendades de pulmón, etc)."]}):"de"===s?("de"===i?(n.push({linkUrl:"https://www.bundesgesundheitsministerium.de/coronavirus.html",linkText:"Bundesministerium für Gesundheit",icon:"www.bundesgesundheitsministerium.de.ico"},{linkUrl:"https://www.infektionsschutz.de/coronavirus-sars-cov-2.html",linkText:"Schutz vor Infektionskrankheiten",icon:"www.infektionsschutz.de.ico"}),this.flagIcon="de",this.countryName="Germany",this.displayCountryName="Deutschland"):"at"===i?(n.push({linkUrl:"https://www.sozialministerium.at/Informationen-zum-Coronavirus/Neuartiges-Coronavirus-(2019-nCov).html",linkText:"BMSGPK",icon:"www.sozialministerium.at.ico"}),this.flagIcon="at",this.countryName="Austria",this.displayCountryName="Österreich"):"ch"===i&&(n.push({linkUrl:"https://www.bag.admin.ch/bag/de/home/krankheiten/ausbrueche-epidemien-pandemien/aktuelle-ausbrueche-epidemien/novel-cov.html",linkText:"Bundesamt für Gesundheit BAG",icon:"www.bag.admin.ch.ico"}),this.flagIcon="ch",this.countryName="Switzerland",this.displayCountryName="Schweiz"),n.length<2&&n.push({linkUrl:"http://www.euro.who.int/de/health-topics/health-emergencies/coronavirus-covid-19",linkText:"WHO",icon:"www.who.int.ico"}),this.tips={heading:"Hinweise der Weltgesundheitsorganisation",items:["Waschen Sie sich oft die Hände.","Vermeiden Sie es, Ihr Gesicht zu berühren.","Niesen und husten Sie in ein Taschentuch oder Ihren Ellbogen.","Vermeiden Sie Menschenansammlungen und das Stehen in unmittelbarer Nähe zu Anderen.","Bleiben Sie zuhause wenn Sie meinen krank zu sein.","Wenn Sie unter Fieber leiden, oder unter einem Husten, oder Schwierigkeiten haben mit dem Atmen, richten Sie sich nach dem Rat des "+this._getLocalAuthorityLink("Bundesministeriums für Gesundheit",n[0].linkUrl)+"."]},this.symptoms={heading:"COVID-19 Gesundheitsinformationen",items:["Symptome: Fieber, Husten, Kurzatmigkeit.","Komplikationen: Lungenentzündung, akutes Lungenversagen, Nierenversagen.","Risikofaktoren: Alter, schwerwiegende Vorerkrankungen wie Herzerkrankungen, Diabetes, Lungenerkrankungen usw."]}):"nl"!==s||"be"!==i&&"nl"!==i?"bg"===s?(this.flagIcon="bg",this.countryName="Bulgaria",this.displayCountryName="България",n.push({linkUrl:"https://www.mh.government.bg/bg/ ",linkText:"Министерство на здравеопазването",icon:"www.mh.government.bg.ico"},{linkUrl:"https://www.who.int/emergencies/diseases/novel-coronavirus-2019",linkText:"Световна здравна организация",icon:"www.who.int.ico"}),this.tips={heading:"Съвети от Световната здравна организация:",items:["Мийте често ръцете си.","Избягвайте да пипате лицето си.","Кихайте и кашляйте в носна кърпичка или в сгъвката на лакътя си.","Избягвайте струпвания на хора.","Стойте вкъщи, ако смятате, че сте болни.","Ако имате треска, кашлица, или затруднено дишане, следвайте упътванията на "+this._getLocalAuthorityLink("Министерството на здравеопазването",n[0].linkUrl)+"."]},this.symptoms={heading:"Здравна информация за COVID-19:",items:["Симптоми: треска, кашлица, затруднено дишане","Усложнения: пневмония, остър респираторен дистрес синдром (ARDS), бъбречна недостатъчност","Рискови фактори: възраст, предхождащи заболявания (напр. сърдечно-съдови заболявания, диабет, белодробни заболявания и т.н.)"]}):"hi"===s?(this.flagIcon="in",this.countryName="India",this.displayCountryName="भारत",n.push({linkUrl:"https://www.mohfw.gov.in",linkText:"स्वास्थ्य एवं परिवार कल्याण मन्त्रालय, भारत सरकार",icon:"www.mohfw.gov.in.ico"},{linkUrl:"https://www.who.int/emergencies/diseases/novel-coronavirus-2019",linkText:"विश्व स्वास्थ्य संगठन",icon:"www.who.int.ico"}),this.tips={heading:"विश्व स्वास्थ्य संगठन से सुझाव:",items:["समय-समय पर अपने हाथों को धोते रहें.","अपने चेहरे पर हाथ लगाने से बचें.","खांसते समय अथवा कफ आने की स्थिति में टिश्यू पेपर अथवा अपनी कोहनी का उपयोग करें.","भीड़भाड़ अथवा दूसरे लोगों के पास खड़े होने से बचें.","यदि आपको लगे कि आप बीमार हो सकते हैं तो घर पर ही रहें.","यदि आपको बुखार, कफ अथवा सांस लेने की शिकायत हो तो "+this._getLocalAuthorityLink("सरकार के स्वास्थ्य प्राधिकारी",n[0].linkUrl)+" की सलाह लें."]},this.symptoms={heading:"कोविद - 19 स्वास्थ्य जानकारी ",items:["लक्षण: बुखार, खांसी, सांस लेने में तकलीफ़","जटिलताएं: निमोनिया, गहन श्वसन संकट सिंड्रोम (ARDS), गुर्दा ख़राब होना।","जोखिम कारक : आयु, स्वास्थ की गंभीर अंतर्निहित परिस्थितियां (उदाहरण : हृदय रोग, मधुमेह, फेफड़े की बीमारी, आदि)।"]}):"ru"===s?(this.flagIcon="ru",this.countryName="Russia",this.displayCountryName="Российская Федерация",n.push({linkUrl:"https://www.rosminzdrav.ru/ministry/covid19",linkText:"Rosminzdrav.ru",icon:"www.rosminzdrav.ru.ico"},{linkUrl:"https://www.who.int/emergencies/diseases/novel-coronavirus-2019",linkText:"World Health Organization",icon:"www.who.int.ico"}),this.tips={heading:"Рекомендации Всемирной организации здравоохранения:",items:["Чаще мойте руки.","Прикасайтесь к лицу и глазам только недавно вымытыми руками.","При кашле и чихании используйте одноразовую салфетку или свой локоть.","Избегайте мест массового скопления людей.","При появлении признаков болезни оставайтесь дома.","В случае лихорадки, кашля или затрудненного дыхания следуйте рекомендациям "+this._getLocalAuthorityLink("министерства здравоохранения вашей страны",n[0].linkUrl)+"."]},this.symptoms={heading:"Информация о COVID-19:",items:["Симптомы: лихорадка, кашель, затрудненное дыхание.","Осложнения: пневмония, острый респираторный дистресс-синдром (ОРДС), почечная недостаточность.","Факторы риска: возраст, серьезные хронические заболевания (болезни сердца, диабет, заболевания легких, и т.д.)."]}):"pl"===s?(this.flagIcon="pl",this.countryName="Poland",this.displayCountryName="Polska",n.push({linkUrl:"https://www.gov.pl/web/zdrowie/wiadomosci",linkText:"Ministerstwo Zdrowia",icon:"www.gov.pl.ico"},{linkUrl:"https://www.gov.pl/web/koronawirus",linkText:"Informacje i zalecenia Koronawirus",icon:"www.gov.pl.ico"}),this.tips={heading:"Światowa Organizacja Zdrowia radzi:",items:["Często myj ręce.","Unikaj dotykania twarzy.","Jeśli kichasz lub kaszlesz, zasłaniaj usta chusteczką albo łokciem.","Unikaj tłumów i stania w pobliżu innych osób.","Zostań w domu, jeśli myślisz, że możesz być chory.","Jeśli masz gorączkę, kaszel lub trudności z oddychaniem, postępuj zgodnie z zaleceniami "+this._getLocalAuthorityLink("Ministerstwa Zdrowia",n[0].linkUrl)+"."]},this.symptoms={heading:"Informacja zdrowotna dla COVID-19:",items:["Objawy: gorączka, kaszel, duszności.","Powikłania: zapalenie płuc, zespół ciężkiej ostrej niewydolności oddechowej, niewydolność nerek.","Czynniki ryzyka: wiek, poważne schorzenia towarzyszące (np. choroba serca, cukrzyca, choroba płuc, itp.)."]}):"tl"===s?(this.flagIcon="ph",this.countryName="Philippines",this.displayCountryName="Pilipinas",n.push({linkUrl:"https://www.doh.gov.ph/2019-nCoV",linkText:"Department of Health (Kagawaran ng Kalusugan)",icon:"www.doh.gov.ph.ico"},{linkUrl:"https://www.who.int/philippines/emergencies/covid-19-in-the-philippines",linkText:"World Health Organization",icon:"www.who.int.ico"}),this.tips={heading:"Mga tip mula sa World Health Organization:",items:["Ugaliin ang paghuhugas ng kamay.","Iwasan ang paghawak ng mukha.","Bumahing o umubo sa tissue o sa loob ng siko.","Lumayo sa mga grupo at huwag tumayo ng malapit sa ibang tao.","Manatili sa bahay kapag tingin mo may sakit ka.","Kapag may lagnat, ubo, o kaya nahihirapan huminga, sundan ang payo ng "+this._getLocalAuthorityLink("kagawaran ng kalusugan ng iyong pamahalaan",n[0].linkUrl)+"."]},this.symptoms={heading:"Impormasyon sa COVID-19",items:["Sintomas: lagnat, ubo, at hirap sa paghinga.","Komplikasyon: pulmonya, Acute respiratory distress syndrome (ARDS), kidney failure.","Risk factors: edad, ang mga may seryosong kondisyon (tulad ng sakit sa puso, diabetes, at ang may mga sakit sa baga, etc.)"]}):("gb"===i?(this.flagIcon="uk",this.countryName="United Kingdom",this.displayCountryName="United Kingdom",n.push({linkUrl:"https://www.gov.uk/government/topical-events/coronavirus-covid-19-uk-government-response",linkText:"UK government response",icon:"www.gov.uk.ico"},{linkUrl:"https://www.nhs.uk/conditions/coronavirus-covid-19/",linkText:"Information from the NHS",icon:"www.nhs.uk.ico"}),o=n[1].linkUrl):"ca"===i?(this.flagIcon="ca",this.countryName="Canada",this.displayCountryName="Canada",n.push({linkUrl:"https://www.canada.ca/coronavirus",linkText:"Government of Canada",icon:"www.canada.ca.ico"}),o=n[0].linkUrl):"us"===i?(this.flagIcon="us",this.countryName="United States",this.displayCountryName="United States",n.push({linkUrl:"https://www.cdc.gov/coronavirus/2019-ncov",linkText:e.device.isMobile?"CDC (Centers for Disease Control...)":"CDC (Centers for Disease Control and Prevention)",icon:"www.cdc.gov.ico"}),o=n[0].linkUrl,this.vaccines={text:'"Vaccines in the US are highly effective, including against the Delta variant. The COVID-19 vaccines authorized in the United States are highly effective at preventing severe disease and death, including against the Delta variant. But they are not 100% effective and some fully vaccinated people will become infected (called a breakthrough infection) and experience illness. For such people, the vaccine still provides them strong protection against serious illness and death." '+this._getLocalAuthorityLink("CDC","https://www.cdc.gov/coronavirus/2019-ncov/variants/delta-variant.html")}):"au"===i?(this.flagIcon="au",this.countryName="Australia",this.displayCountryName="Australia",n.push({linkUrl:"https://www.health.gov.au/news/health-alerts/novel-coronavirus-2019-ncov-health-alert",linkText:"Australian Government",icon:"www.health.gov.au.ico"}),o=n[0].linkUrl):"ie"===i?(this.flagIcon="ie",this.countryName="Ireland",this.displayCountryName="Republic of Ireland",n.push({linkUrl:"https://www2.hse.ie/conditions/coronavirus/coronavirus.html",linkText:"HSE (Health Service Executive)",icon:"www2.hse.ie.ico"}),o=n[0].linkUrl):"nz"===i?(this.flagIcon="nz",this.countryName="New Zealand",this.displayCountryName="New Zealand",n.push({linkUrl:"https://covid19.govt.nz/",linkText:"New Zealand government response",icon:"covid19.govt.nz.ico"}),o=n[0].linkUrl):"sg"===i?(this.flagIcon="sg",this.countryName="Singapore",this.displayCountryName="Singapore",n.push({linkUrl:"https://www.moh.gov.sg/covid-19",linkText:"Ministry of Health",icon:"www.moh.gov.sg.ico"}),o=n[0].linkUrl):"in"===i?(this.flagIcon="in",this.countryName="India",this.displayCountryName="India",n.push({linkUrl:"https://www.mohfw.gov.in",linkText:"Ministry of Health and Family welfare",icon:"www.mohfw.gov.in.ico"}),o=n[0].linkUrl):"ph"===i?(this.flagIcon="ph",this.countryName="Philippines",this.displayCountryName="Philippines",n.push({linkUrl:"https://www.doh.gov.ph/2019-nCoV",linkText:"Department of Health (Kagawaran ng Kalusugan)",icon:"www.doh.gov.ph.ico"}),o=n[0].linkUrl):"za"===i?(this.flagIcon="za",this.countryName="South Africa",this.displayCountryName="South Africa",n.push({linkUrl:"https://www.gov.za/Coronavirus",linkText:"South Africa government response",icon:"www.gov.za.ico"}),o=n[0].linkUrl):n.push({linkUrl:"https://www.who.int/emergencies/diseases/novel-coronavirus-2019",linkText:"WHO (World Health Organization)",icon:"www.who.int.ico"},{linkUrl:"https://www.cdc.gov/coronavirus/2019-ncov",linkText:e.device.isMobile?"CDC (Centers for Disease Control...)":"CDC (Centers for Disease Control and Prevention)",icon:"www.cdc.gov.ico"}),1===n.length&&n.push({linkUrl:"https://www.who.int/emergencies/diseases/novel-coronavirus-2019",linkText:"WHO (World Health Organization)",icon:"www.who.int.ico"}),this.tips={heading:"Tips from the World Health Organization:",items:["Wash your hands frequently.","Avoid touching your face.","Sneeze and cough into a tissue or your elbow.","Avoid crowds and standing near others.","Stay home if you think you might be sick.","If you have a fever, cough, or difficulty breathing, follow advice given by your "+this._getLocalAuthorityLink("government's health authority",o)+"."]},this.symptoms={heading:"COVID-19 health information:",items:["Symptoms: fever, cough, shortness of breath.","Complications: pneumonia, Acute respiratory distress syndrome (ARDS), kidney failure.","Risk Factors: age, serious underlying medical conditions (e.g. heart disease, diabetes, lung disease, etc)."]}):("nl"===i?(this.flagIcon="nl",this.countryName="Netherlands",this.displayCountryName="Nederland",n.push({linkUrl:"https://www.rijksoverheid.nl/onderwerpen/coronavirus-covid-19",linkText:"Rijksoverheid",icon:"www.rijksoverheid.nl.ico"})):(this.flagIcon="be",this.countryName="Belgium",this.displayCountryName="België",n.push({linkUrl:"https://www.info-coronavirus.be/nl",linkText:"FOD Volksgezondheid",icon:"www.info-coronavirus.be.ico"})),n.push({linkUrl:"https://www.who.int/emergencies/diseases/novel-coronavirus-2019",linkText:"World Health Organization",icon:"www.who.int.ico"}),this.tips={heading:"Tips van de Wereldgezondheidsorganisatie (WHO):",items:["Was je handen regelmatig.","Vermijd aanraken van je gezicht.","Hoest en nies in een tissue of je elleboog.","Vermijd groepen en houd voldoende afstand tot anderen.","Blijf thuis als je verkoudheidsklachten krijgt.","Volg bij koorts, hoesten, of kortademigheid het advies van "+this._getLocalAuthorityLink("de overheid",n[0].linkUrl)+"."]},this.symptoms={heading:"COVID-19 gezondheidsinformatie:",items:["Symptomen: koorts, hoesten, kortademigheid.","Complicaties: longontsteking, acute respiratory distress syndrome (ARDS), nierfalen.","Risicofactoren: leeftijd, ernstige onderliggende medische aandoeningen (bijv. hartziekte, diabetes, longziekte, enz.)."]}),this.lang=s,n.forEach((function(t){t.icon&&(t.iconURL=e.services.getURL("icons")+t.icon)})),this.links=n},_getLocalAuthorityLink:function(e,t){return t?''+e+"":e}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.Definitions=function(e){var i=this._hasSingular(e.data);i?$.getJSON("js/spice/dictionary/reference/"+i,function(t){this._processData(t,e.data[0].word)}.bind(this)):this._processData(e.data),t.call(this,e),this.loaded=!1},e.Models.Answers.Definitions.prototype=$.extend({},t.prototype,{_hasSingular:function(e){var t=this._definitionsWithText(e)[0].text.match(/^(?:A )?plural (?:form )?of ([^<]+)<\/xref>/i);return t&&t[1]},_processData:function(e,t){this.word=t||e[0].word,this.pluralFormOf=t&&e[0].word,this.collapsedDefinitions=this._collapsedDefinitions(e),this.groups=this._groupByPartsOfSpeech(e),e[0].attributionText&&(this.attribution={text:e[0].attributionText.replace(/^from\s+/,""),url:"https://www.wordnik.com/words/"+e[0].word}),this.canModuleExpand=this._definitionsWithText(e).length>3||this.groups.length>1,this.getPronunciation(e[0].word),this.getAudio(e[0].word),this.set("loaded",!0)},_definitionsWithText:function(e){return e.filter((function(e){return e.text}))},_groupByPartsOfSpeech:function(e){var t=e.reduce(function(e,t){if(t.text){var i=t.partOfSpeech;i&&(e[i]=e[i]||[],e[i].push(this._formatText(t.text)))}return e}.bind(this),{});return Object.keys(t).map((function(e){return{partOfSpeech:e,definitions:t[e]}}))},_formatText:function(e){var t=["xref","sup","sub","i","em","strong"],i=t.join("|"),s=new RegExp("<(?!/?("+i+")\\b)[^>]*?>","g"),a=e.replace(s,""),o=Handlebars.Utils.escapeExpression(a);return o=o.replace(/<xref.*?>(.+?)<\/xref>/g,'$1'),t.shift(),t.forEach((function(e){var t=new RegExp("<"+e+".*?>(.+?)</"+e+">","g");o=o.replace(t,"<"+e+">$1")})),o},_collapsedDefinitions:function(e){var t=this._groupByPartsOfSpeech(e);return{partOfSpeech:t[0].partOfSpeech,definitions:t[0].definitions.slice(0,3)}},getPronunciation:function(e){$.getJSON("js/spice/dictionary/pronunciation/"+e,function(e){if(e&&e.length){var t=e.filter((function(e){return"ahd-legacy"===e.rawType||"ahd-5"===e.rawType}));t.length&&this.set("pronunciation",t[0].raw)}}.bind(this))},getAudio:function(e){$.getJSON("js/spice/dictionary/audio/"+e,function(e){if(e&&e.length){var t=e.find((function(e){return"macmillan"===e.createdBy}))||e[0];if(t&&t.fileUrl){var i="/audio/?u="+encodeURIComponent(t.fileUrl);this.set("audio",i)}}}.bind(this)).fail(function(){this.set("noAudio",!0)}.bind(this))}})}(DDG),function(e){var t=e.Models.Answer,i="en-US",s=e.settings.region.getISOLocale(),a="Domini"!==(new Date).toLocaleDateString(i,{era:"long"}).split(" ").pop(),o="Anno Domini"!==(new Date).toLocaleTimeString(i,{era:"long"}).split(", ")[0],n={1:lp("Sports module","1st"),2:lp("Sports module","2nd"),3:lp("Sports module","3rd"),4:lp("Sports module","4th")};e.Models.Answers.Sport=function(i){t.call(this,i),!i.league||!i.leagueName||i.leagueNameShort,!i.suspendedStatuses||i.statusToSimplifiedStatus,this.league=i.league,this.leagueName=i.leagueName,this.leagueNameShort=i.leagueNameShort,this.suspendedStatuses=i.suspendedStatuses,this.statusToSimplifiedStatus=i.statusToSimplifiedStatus,this.gamePartAliases=i.gamePartAliases||n,this.data=i.data.data||{},this.moduleType=this.data.module_type||"league",this.activeTab=this._getTabFromIntent(this.data,this.moduleType),this.standingsViewTemplate="sports_standings_table_"+this.league,this.seasonYear=this.data.season_year,this.seasonStatus=this.data.season_status||"active",this.timeZone=this._getTimeZone(),this.leagueLink="/?q="+this.league+"+games&ia="+this.nameId,this.isExpanded=!1,this.isMobile=e.device.isMobile,this.requestInProgress=!1,this.hasWeekSelector=!1,this.hasLeagueScheduleTab=!1,this.gameModuleMatchupTableCollapsedMaxRows=2},e.Models.Answers.Sport.prototype=$.extend({},t.prototype,{requestData:function(t,i){if(!this.requestInProgress){var s={q:e.history.get("q"),league:this.league,type:t.type,o:"json",season_period:t.seasonPeriod};$.ajax({url:"/sports.js",data:s,beforeSend:function(){this.set("requestInProgress",!0)}.bind(this),success:function(e){i(e.data)},error:function(e){this.fire("sportsreqerror",{status:e.status,league:s.league,type:s.type,period:s.season_period||""})}.bind(this),complete:function(){this.set("requestInProgress",!1)}.bind(this)})}},setDerivedIAState:function(){var t="ia_state_"+this.nameId,i=["league:"+this.league];if("team"===this.moduleType){var s=this.mostRelevantTeam;i.push("team:"+s.id)}else"games"===this.moduleType&&(i.push("games:"+this.mostRelevantGame.away_team.id+"|"+this.mostRelevantGame.home_team.id),i.push("gameID:"+this.mostRelevantGame.id));e.history.set(t,i.join(","))},formatTeamGameResponse:function(e){var t=e.most_relevant_game_id,i=e.most_relevant_team?e.most_relevant_team.id:null;return e.games.reduce(function(s,a){return a=this.augmentGameData(a,this.nameId),s.mostRelevantTeam||(i===a.away_team.id?s.mostRelevantTeam=$.extend(a.away_team,e.most_relevant_team):i===a.home_team.id&&(s.mostRelevantTeam=$.extend(a.home_team,e.most_relevant_team))),s.mostRelevantGame||t!==a.id||(a.isMostRelevantGame=!0,a.timeAndStatus=this.dateFormat("dateTimeStatus",a),s.mostRelevantGame=a),"upcoming"===a.simpleStatus&&s.upcoming.push(a),"passed"===a.simpleStatus&&("team"===this.moduleType&&"passed"===this.seasonStatus||a.id!==t)&&s.passed.push(a),s}.bind(this),{passed:[],upcoming:[],mostRelevantGame:null,mostRelevantTeam:null})},augmentGameData:function(t,i){return t.gameLink=this._getGameLink(t,i),t.away_team.teamLink=this.getTeamLink(t.away_team,i),t.home_team.teamLink=this.getTeamLink(t.home_team,i),t.statusFormatted=e.Utils.Strings.toTitleCase(t.status),t.hasSuspendedStatus=-1!==this.suspendedStatuses.indexOf(t.status),t.simpleStatus=this._getGameSimpleStatus(t.status),t},getTeamLink:function(e,t){return["/?q="+e.location+"+"+e.name,"ia="+t,"ia_state_"+t+"=league:"+this.league+",team:"+e.id,"iar="+t].join("&")},dateFormat:function(e,t){if(!t.start_time)return"";var i=t.start_time.split(/\s+/);if(3!==i.length)return"";var n=new Date(i[0]+"T"+i[1]+"Z"),l=n.toDateString().split(/\s+/),r=l[0],d=l[1],c=l[2],h=l[3];function p(e){if(o){var t=e.toLocaleTimeString(),i=t.split(":");if(3===i.length){var a=i[2].split(" ").length>1,n=i[0]+":"+i[1];return a?n+" "+i[2].split(" ")[1]:n}return t}var l={hour:"numeric",minute:"2-digit"};return"en-GB"===s&&(l.hour12=!0),e.toLocaleTimeString(s,l)}function u(e){return a?d+" "+c:e.toLocaleDateString(s,{month:"short",day:"numeric"})}switch(e){case"iso":return n.toISOString();case"dateString":return n.toDateString();case"date":return a?u(n)+", "+h:n.toLocaleDateString({month:"short",day:"numeric",year:"numeric"});case"time":return p(n);case"dateShort":default:return u(n);case"dateTime":return u(n)+" • "+p(n);case"dateWeekday":return a?r+", "+u(n):n.toLocaleDateString(s,{weekday:"short",month:"short",day:"numeric"});case"dateTimeStatus":return"passed"===t.simpleStatus?"games"===this.moduleType||"team"===this.moduleType&&t.isMostRelevantGame?u(n)+" • "+lp("Sports module","Final"):lp("Sports module","Final"):"active"===t.simpleStatus&&null!==t.score.quarter&&void 0!==t.score.quarter&&null!==t.score.clock&&void 0!==t.score.clock?(this.gamePartAliases[t.score.quarter]||lp("Sports module","OT"))+" • "+t.score.clock:u(n)+" • "+p(n)}},_getTimeZone:function(e){var t="",i=((((e=e||(new Date).toString()).match(/GMT(.*)/g)||[]).pop()||"").match(/^[^\s]+/)||[]).pop(),s=(e.match(/\((.*)\)/)||[]).pop();return s&&s.length?("+"!==s[0]&&"-"!==s[0]||(s="GMT"+s),t=i&&i.length?s+" ("+i+")":s):i&&i.length&&(t=i),t},_getGameSimpleStatus:function(e){var t=this.statusToSimplifiedStatus[e];return t||(this.fire("sportsunkstatus",{status:e}),t="upcoming"),t},_getGameLink:function(e,t){return["/?q="+(e.home_team.location+"+"+e.home_team.name)+"+"+(e.away_team.location+"+"+e.away_team.name),"ia="+t,"ia_state_"+t+"=league:"+this.league+",games:"+e.home_team.id+"|"+e.away_team.id+",gameID:"+e.id,"iar="+t].join("&")},_getTabFromIntent:function(e,t){var i=e&&e.intent;return i||("league"===t?i="games":"team"===t&&(i="scores")),i}})}(DDG),function(e){var t=e.Models.Answers.Sport;e.Models.Answers.Basketball=function(e){if(e.league="nba",e.leagueName="National Basketball Association",e.leagueNameShort="NBA",e.statusToSimplifiedStatus={scheduled:"upcoming",delayed:"upcoming",created:"upcoming","flex-schedule":"upcoming",cancelled:"upcoming",postponed:"upcoming","time-tbd":"upcoming","if-necessary":"upcoming",unnecessary:"unnecessary","in progress":"active",halftime:"active",complete:"passed",closed:"passed"},e.suspendedStatuses=["cancelled","postponed","delayed"],t.call(this,e),this.recentLeagueGames=[],this.upcomingLeagueGames=[],this.standingsData={full:{},collapsed:{}},this.seasonYear=this._getSeasonYear(this.data.season_year),this.hasLeagueScheduleTab=!0,this.gameModuleMatchupTableCollapsedMaxRows=4,"league"===this.moduleType)this.title=this.isMobile?this.leagueNameShort:this.leagueName,this.subtitle=lp("Sports module","%s Season",this.seasonYear),"games"===this.activeTab||"schedule"===this.activeTab?(this._formatLeagueGamesResponse(this.data),this.requestData({type:"standings"},this._formatStandingsResponse.bind(this))):"standings"===this.activeTab&&(this._formatStandingsResponse(this.data),this.requestData({type:"games"},this._formatLeagueGamesResponse.bind(this)));else{var i=this.formatTeamGameResponse(this.data);this.mostRelevantGame=i.mostRelevantGame,this.mostRelevantTeam=i.mostRelevantTeam,this.passedGames=i.passed,this.upcomingGames=i.upcoming,"team"===this.moduleType?(this.title=this.mostRelevantTeam.location+" "+this.mostRelevantTeam.name,this.subtitle=this._getTeamSubtitle(this.mostRelevantTeam),this.passedGames=this.passedGames.slice(-5),this.upcomingGames=this.upcomingGames.slice(0,6),"schedule"!==this.activeTab||this.upcomingGames.length||(this.activeTab="scores")):"games"===this.moduleType&&(this.title=this.mostRelevantGame.away_team.name+" "+lp("Sports module","vs")+" "+this.mostRelevantGame.home_team.name,this.subtitle="",this.passedGames.reverse())}this.setDerivedIAState()},e.Models.Answers.Basketball.prototype=$.extend({},t.prototype,{changeTab:function(e,t,i){t=t||!1,i=i||!1,"league"===this.moduleType&&("standings"===e?!Object.keys(this.standingsData.full).length&&this.requestData({type:"standings"},this._formatStandingsResponse.bind(this)):"games"===e?!this.recentLeagueGames.length&&this.requestData({type:"games"},this._formatLeagueGamesResponse.bind(this)):"schedule"===e&&!this.upcomingLeagueGames.length&&this.requestData({type:"games"},this._formatLeagueGamesResponse.bind(this))),this.set("canModuleExpand",t),this.set("showTimeZoneMsg",i),this.set("activeTab",e),this.setDerivedIAState()},_formatLeagueGamesResponse:function(e){var t=e&&e.games;if(t){var i=new Date,s=[],a=[],o=[],n=[];t.forEach((function(e){if("unnecessary"!==(e=this.augmentGameData(e,this.nameId)).simpleStatus){var t=this.dateFormat("dateString",e),l=new Date(this.dateFormat("iso",e)),r=new Date-l<0,d=i.toDateString()===t;(r||d)&&"passed"!==e.simpleStatus&&(s.push(e),o.includes(t)||o.push(t)),r&&!d||(a.push(e),n.includes(t)||n.push(t))}}),this);var l=n.slice(-2),r=a.filter((function(e){var t=this.dateFormat("dateString",e);return l.includes(t)}),this).reverse(),d=o.slice(0,2),c=s.filter((function(e){var t=this.dateFormat("dateString",e);return d.includes(t)}),this);this.set("recentLeagueGames",r),this.set("upcomingLeagueGames",c)}},_formatStandingsResponse:function(e){var t=e&&e.teams;if(t){t=t.sort((function(e,t){return t.conference_rank?e.conference_rank?e.conference_rank-t.conference_rank:1:-1}));var i={EASTERN:[],WESTERN:[]};t.forEach((function(e){e.teamLink=this.getTeamLink(e,this.nameId),e.leagueWinLoss=(e.league_wins||0)+"-"+(e.league_losses||0),e.pct=this._calculatePct(e),e.gb=e.conference_games_behind&&0!==e.conference_games_behind?e.conference_games_behind.toFixed(1):"-",e.conferenceWinLoss=(e.conference_wins||0)+"-"+(e.conference_losses||0),e.divisionWinLoss=(e.division_wins||0)+"-"+(e.division_losses||0),e.streak=this._calculateStreak(e),e.conferenceRank=i[e.conference].length+1,i[e.conference].push(e)}),this);var s={EASTERN:i.EASTERN.slice(0,10),WESTERN:i.WESTERN.slice(0,10)};this.set("standingsData",{full:i,collapsed:s})}},_getSeasonYear:function(e){var t=parseInt(e.toString().slice(-2));return e+"-"+(t+1)},_getTeamSubtitle:function(e){var t;e.conference&&(t={eastern:lp("Sports module","Eastern"),western:lp("Sports module","Western")}[e.conference.toLowerCase()]);return void 0===e.wins||null===e.wins||void 0===e.losses||null===e.losses?t||"":t?e.wins+"-"+e.losses+", "+t:e.wins+"-"+e.losses},_calculatePct:function(e){if(!e.league_losses&&!e.league_wins)return"0.00";var t=e.league_wins/(e.league_losses+e.league_wins);return 1===t||0===t?t.toFixed(2):t.toFixed(3).substring(1)},_calculateStreak:function(e){return e.streak_kind&&e.streak_length?e.streak_kind+e.streak_length:""}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.Lyrics=function(e){t.call(this,e),$.extend(this,this._transformRawData())},e.Models.Answers.Lyrics.prototype=$.extend({},t.prototype,{_transformRawData:function(){var e={},t=this.data[0],i=t.data[0];e.songTitle=i.song_title,e.artist=i.song_artist,e.isExplicit=i.explicit,e.lyrics=t.Abstract;var s=i.albums;return s&&0!=s.length&&(e.albumTitle=s[0].title,e.albumReleaseYear=this._parseReleaseYear(s[0].release_date)),e.writers=this._joinWithComma(i.writers),e.providerUrl=i.url,e},_parseReleaseYear:function(e){if(e){var t=new RegExp(/[0-9]{5}/);if(!(e.length<4||t.test(e))){var i=e.match(/[0-9]{4}/);return i?i[0]:void 0}}},_joinWithComma:function(e){if(e&&0!=e.length)return e.join(", ")}})}(DDG),function(e){var t=e.Models.Answer;e.Models.Answers.Stocks=function(i){t.call(this,i),this.data.timePeriods=[{key:"Today",label:lp("Stocks module","Today"),mobileLabel:lp("Stocks module","1D")},{key:"5d",label:lp("Stocks module","5D")},{key:"1m",label:lp("Stocks module","1M")},{key:"ytd",label:lp("Stocks module","YTD")},{key:"1y",label:lp("Stocks module","1Y")},{key:"5y",label:lp("Stocks module","5Y")},{key:"max",label:lp("Stocks module","All")}],this.data.selectedTimePeriod=this.data.timePeriods[0],this.data=i.data||{};var s=this.data.results.quote;this.data.price=void 0!==s.delayedPrice&&null!==s.delayedPrice?s.delayedPrice:s.latestPrice,this.data.priceTime=void 0!==s.delayedPriceTime&&null!==s.delayedPriceTime?s.delayedPriceTime:s.latestUpdate,this.data.latestUpdateString=this._getLatestUpdateString(),this.data.latestPrice=this.formatCurrency(this.data.price),this.calculateChange(),this.data.peRatio=this.formatNumber(this.data.results.quote.peRatio),this.data.week52High=this.formatCurrency(this.data.results.quote.week52High),this.data.week52Low=this.formatCurrency(this.data.results.quote.week52Low);var a=e.Utils.Formatting.abbreviateLargeNumber;this.data.volumeString=void 0!==s.avgTotalVolume&&null!==s.avgTotalVolume?this.formatNumber(a(s.avgTotalVolume)):this.formatNumber(s.avgTotalVolume),this.data.marketCapString=void 0!==s.marketCap&&null!==s.marketCap?this.formatNumber(a(s.marketCap)):this.formatNumber(s.marketCap),this.data.prevClose=this.formatCurrency(this.data.results.quote.previousClose),this.data.stockExchange=this.lookupStockExchangeName(),this.data.assetType=s.assetType,this.timezoneOffset=0,this._processIntraday()};var i=e.Models.Answers.Stocks.api={load:function(t,s){if(!i.triggered){i.triggered=!0;var a=s.symbol,o={historical:{},intraday:"loading"},n={},l=Date.now(),r=function(i,a){o[i]=a||{},"quote"===i&&(n.total=Date.now()-l,e.pixel.fire("stockslatency",n),t(Object.assign({results:o},s)))};i._stocksService({action:"quote",symbol:a},(function(t){n.quote=Date.now()-l,void 0===t?e.duckbar.failed("stocks"):r("quote",t)})),i._stocksService({action:"intraday",symbol:a},(function(t){n.intraday=Date.now()-l,r("intraday",t);var i=e.modulesLayout.modules.stocks&&e.modulesLayout.modules.stocks.model;i&&(i._processIntraday(),i.emit("change:dataForSelectedTimePeriod"))}))}},_stocksService:function(t,i){var s=Object.assign({},t,{query:encodeURIComponent(e.history.get("q")),vqd:window.vqd}),a=Object.keys(s).reduce((function(e,t){return e.concat(t+"="+s[t])}),[]).join("&");$.getJSON("/stocks.js?"+a,(function(e){i(e)})).fail((function(s){e.pixel.fire("stockserror",{status:s.status,action:t.action}),i()}))}};e.Models.Answers.Stocks.prototype=$.extend({},t.prototype,{_getLatestUpdateString:function(){var t=this.data.priceTime;if(!t)return"";var i=new Date(t),s=e.settings.region.getISOLocale(),a=i.toLocaleDateString(s,{month:"long",day:"numeric",year:"numeric"}),o={hour:"numeric",minute:"2-digit",timeZoneName:"short"};return"en-GB"===navigator.language&&(o.hourCycle="h12"),a+" • "+i.toLocaleTimeString(s,o).toUpperCase()},dataForSelectedTimePeriod:function(){var e;return e="Today"===this.data.selectedTimePeriod.key?this.data.results.intraday:this.data.results.historical[this.data.selectedTimePeriod.key],this._validateData(e)?this._fixNulls(e):null},_validateData:function(t){return!(!t||!("loading"===t||Array.isArray(t)&&t.length>2))||("Today"!==this.data.selectedTimePeriod.key||this.intradayPixelFired||(this.intradayPixelFired=!0,e.pixel.fire("stocksintradayerror")),!1)},_fixNulls:function(e){if("loading"===e)return e;var t=this.data.results.quote.open||this.data.results.quote.previousClose;return e.forEach((function(e){e.close||(e.close=t),t=e.close})),e},_processIntraday:function(){var e=this.data.results.intraday;this.timezoneOffset=this.calculateTimezoneOffset();var t=60*this.timezoneOffset*60*1e3;e.length&&"loading"!==e&&(this.data.results.intraday=e.filter((function(e){return this.parseIEXDateTimeString(e).getTime()-t<=this.data.priceTime}),this))},loadTimePeriod:function(e){this.data.selectedTimePeriod=e;var t=function(t){this.updateCachedHistoricalData(t),this.data.results.historical[e.key]=t,this.emit("change:dataForSelectedTimePeriod")}.bind(this);if("BRK.A"===this.data.symbol&&"5d"===e.key)return t({});this.dataForSelectedTimePeriod()||"Today"===e.key||(this.data.results.historical[e.key]="loading",i._stocksService({action:"historical",symbol:this.data.symbol,range:e.key},function(e){t(e||{})}.bind(this)))},updateCachedHistoricalData:function(e){if(e&&0!==Object.keys(e).length&&this.data.price&&this.data.priceTime){var t=this.parseIEXDateTimeString(e[e.length-1]),i=60*this.timezoneOffset*60*1e3,s=new Date(t-i),a=new Date(this.data.priceTime+i),o=a.getFullYear().toString()+"-"+(a.getMonth()+1).toString().padStart(2,"0")+"-"+a.getDate().toString().padStart(2,"0"),n=a.getHours().toString().padStart(2,"0")+":"+a.getMinutes().toString().padStart(2,"0");"5d"===this.data.selectedTimePeriod.key||"1m"===this.data.selectedTimePeriod.key?new Date(this.data.priceTime)>s&&e.push({close:this.data.price,date:o,minute:n}):(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0),a.getTime()>t&&e.push({close:this.data.price,date:o}))}},calculateChange:function(){var t=this.dataForSelectedTimePeriod();if("loading"!==t){var i,s;if("Today"!==this.data.selectedTimePeriod.key&&t&&t.length){var a=t.map((function(e){return e.close})),o=a[0];this.data.open=this.formatCurrency(o),this.data.high=this.formatCurrency(Math.max.apply(Math,a)),this.data.low=this.formatCurrency(Math.min.apply(Math,a)),s=(i=(this.data.price||a[a.length-1])-o)/o*100}else i=this.data.results.quote.change,s=100*this.data.results.quote.changePercent,this.data.open=this.formatCurrency(this.data.results.quote.open),this.data.high=this.formatCurrency(this.data.results.quote.high),this.data.low=this.formatCurrency(this.data.results.quote.low);this.data.change=(i>0?"+":"")+this.formatNumber(i),this.data.isDecrease=i<0;var n=e.settings.region.getISOLocale();this.data.percentChangeString=Math.abs(s).toLocaleString(n,{minimumFractionDigits:2,maximumFractionDigits:2}),e.device.isSafariLessThanVersion(10)&&(this.data.percentChangeString=parseFloat(this.data.percentChangeString).toFixed(2))}},lookupStockExchangeName:function(){var e=this.data.results.quote.primaryExchange;return{"NEW YORK STOCK EXCHANGE INC.":"NYSE"}[e]||e},formatNumber:function(t){var i="number"==typeof t?parseFloat(t.toFixed(6)):t;return null==t?"—":e.Utils.Formatting.formatNumberForLocale(i)},formatCurrency:function(t){var i=e.settings.region.getISOLocale();return null==t?"—":t.toLocaleString(i,{minimumFractionDigits:2})},calculateTimezoneOffset:function(){var e=this.data.results.intraday,t=this.data.results.quote.latestUpdate;if(!t||"loading"===e||!e[0])return 0;var i=new Date(t),s=e[e.length-1],a=this.parseIEXDateTimeString(s)-i;return.5*Math.round(a/18e5)},parseIEXDateTimeString:function(e){var t,i=e.date.split("-");if(e.minute){var s=e.minute.split(":");t=new Date(i[0],i[1]-1,i[2],s[0],s[1])}else t=new Date(i[0],i[1]-1,i[2]);return t}})}(DDG),function(e){var t=e.Models.Answer,i=e.Models.Answers.DisinformationWarning=function(i){this._populateContent.call(this),this.showSeparator=e.device.isEnglish,this.showFooter=e.device.isDesktop,t.call(this,i)};i.content={en:{title:"2022 Russian invasion of Ukraine",refutation:"On 24 February 2022, Russia invaded Ukraine... The United Nations General Assembly passed a resolution condemning the invasion and demanding a full withdrawal of Russian forces. The International Court of Justice ordered Russia to suspend military operations.",neutral:"On 24 February 2022, Russia invaded Ukraine... and caused Europe's largest refugee crisis since World War II, with an estimated 8 million people being displaced within the country by late May as well as 7.7 million Ukrainians fleeing the country.",warning:"On 24 February 2022, Russia invaded Ukraine... Protests occurred around the world; those in Russia were met with mass arrests and increased media censorship, including a ban on the words 'war' and 'invasion'.",sourceLink:"https://en.wikipedia.org/wiki/2022_Russian_invasion_of_Ukraine",moreAtText:"Wikipedia"},fr:{title:"Invasion de l'Ukraine par la Russie en 2022",refutation:"L'invasion de l'Ukraine par la Russie en 2022 est une grande campagne militaire aérienne, maritime et terrestre, lancée le 24 février sur ordre du président russe Vladimir Poutine. La Russie est accusée... par le G7 de mener une guerre d'agression contre l'Ukraine, action condamnée... par la grande majorité de la communauté internationale.",neutral:"L'invasion de l'Ukraine par la Russie en 2022 est une grande campagne militaire aérienne, maritime et terrestre, lancée le 24 février sur ordre du président russe Vladimir Poutine. Le 6 avril, la BBC... rapporte que le nombre total de réfugiés dépasse 4,2 millions.",warning:"L'invasion de l'Ukraine par la Russie en 2022 est une grande campagne militaire aérienne, maritime et terrestre, lancée le 24 février sur ordre du président russe Vladimir Poutine. En Russie ... dans le cadre de la propagande d'État... l'utilisation de plusieurs mots, parmi lesquels « invasion », « guerre », « bombardements de villes » ou « pertes civiles », est réprimée par la loi et passible de prison.",sourceLink:"https://fr.wikipedia.org/wiki/Invasion_de_l%27Ukraine_par_la_Russie_en_2022",moreAtText:"Wikipedia"},es:{title:"Invasión rusa de Ucrania de 2022",refutation:"La invasión rusa de Ucrania... empezó el 24 de febrero de 2022. La Resolución A/ES-11/L.1 de la Asamblea General de las Naciones Unidas... condena la invasión de Rusia.",neutral:"La invasión rusa de Ucrania... empezó el 24 de febrero de 2022 y... está generando miles de víctimas mortales, así como la mayor crisis de refugiados en el continente desde la Segunda Guerra Mundial. 12​ más de 7,2 millones de ucranianos han abandonado el país, y más de 6,9 millones se han desplazado internamente.",warning:"La invasión rusa de Ucrania... empezó el 24 de febrero de 2022. Uno de los motivos para la censura por parte de la agencia rusa responsable de controlar los medios de comunicación fue la calificación de las acciones rusas como un 'ataque', 'invasión' o 'declaración de guerra.",sourceLink:"https://es.wikipedia.org/wiki/Invasi%C3%B3n_rusa_de_Ucrania_de_2022",moreAtText:"Wikipedia"},de:{title:"Russischer Überfall auf die Ukraine 2022",refutation:"Der russische Überfall auf die Ukraine, der am 24. Februar 2022 begann, ist eine vom russischen Präsidenten Wladimir Putin befohlene Invasion. Die Invasion der Ukraine wurde im März 2022 von der Generalversammlung der Vereinten Nationen mit großer Mehrheit verurteilt.",neutral:"Der russische Überfall auf die Ukraine, der am 24. Februar 2022 begann, ist eine vom russischen Präsidenten Wladimir Putin befohlene Invasion. Durch den Überfall starben bis Oktober 2022 mindestens 21.300 [Menschen]. Es kam zu einer großen Fluchtbewegung aus der Ukraine, die drittgrößte Fluchtbewegung aller Zeiten in Europa.",warning:"Der russische Überfall auf die Ukraine, der am 24. Februar 2022 begann, ist eine vom russischen Präsidenten Wladimir Putin befohlene Invasion. Proteste gegen den Krieg führten in Russland zu Festnahmen und einer verstärkten Zensur in russischen Medien. Dazu gehört auch das Verbot der Verwendung der Begriffe „Invasion“ und „Krieg“ im Zusammenhang mit dem Konflikt.",sourceLink:"https://de.wikipedia.org/wiki/Russischer_%C3%9Cberfall_auf_die_Ukraine_2022",moreAtText:"Wikipedia"},pt:{title:"Invasão da Ucrânia pela Rússia em 2022",refutation:"A Invasão da Ucrânia pela Rússia em 2022 é uma invasão militar em larga escala lançada pela Rússia contra a Ucrânia. A invasão da Ucrânia foi considerada uma violação da Carta das Nações Unidas e constituiu um crime de agressão de acordo com o direito penal internacional.",neutral:"A Invasão da Ucrânia pela Rússia em 2022 é uma invasão militar em larga escala lançada pela Rússia contra a Ucrânia. Mais de 5,5 milhões de ucranianos fugiram do seu país por causa da guerra, e mais de 7 milhões foram obrigados a se deslocar internamente.",warning:"A Invasão da Ucrânia pela Rússia em 2022 é uma invasão militar em larga escala lançada pela Rússia contra a Ucrânia. Protestos que aconteceram na Rússia foram respondidos com prisões em massa e o governo russo aumentou significativamente a repressão à mídia independente.",sourceLink:"https://pt.wikipedia.org/wiki/Invas%C3%A3o_da_Ucr%C3%A2nia_pela_R%C3%BAssia_em_2022",moreAtText:"Wikipedia"},ru:{title:"Вторжение России на Украину (2022)",refutation:"Вторжение России на Украину началось 24 февраля 2022 года... Резолюция Генеральной Ассамблеи ООН ES-11/1 осудила действия России, признав её страной-агрессором, и призвала её вывести свои войска с территории Украины.",neutral:"Вторжение России на Украину началось 24 февраля 2022 года... Вторжение вызвало крупный миграционный кризис: по данным ООН, Украину покинуло 6,8 млн беженцев...",warning:"Вторжение России на Украину началось 24 февраля 2022 года... Роскомнадзор под угрозой блокировки СМИ и информационных ресурсов потребовал использовать информацию «только из официальных российских источников». Всего, по данным Роскомсвободы, к 11 июля было заблокировано 5300 сайтов. Многие независимые издания, опасаясь преследования журналистов, прекратили работу, либо прекратили рассказывать о войне.",sourceLink:"https://ru.wikipedia.org/wiki/%D0%92%D1%82%D0%BE%D1%80%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%A3%D0%BA%D1%80%D0%B0%D0%B8%D0%BD%D1%83_(2022)",moreAtText:"Wikipedia"}},i.getRegionLanguage=function(){return e.settings.region.getISOLocale().split("-")[0]},i.prototype=$.extend({},t.prototype,{_populateContent:function(){var t=i.getRegionLanguage(),s={d:"neutral",e:"neutral",f:"warning",g:"warning",h:"refutation",i:"refutation"}[e.searchExperiments.getActiveVariant("infoboxexp")]||"refutation",a=i.content[t];this.text=a[s],Object.assign(this,a)}})}(DDG),function(e){var t=e.Models.Base;e.Models.CustomDateRange=function(i){var s=e.search.getDateRange();this.fromDate=i.fromDate||s[0]||this._yesterday(),this.toDate=i.toDate||s[1]||new Date,t.call(this,i)},e.Models.CustomDateRange.prototype=$.extend({},t.prototype,{_yesterday:function(){var e=new Date;return e.setHours(0,0,0,0),e.setDate((new Date).getDate()-1),e}})}(DDG),function(e){var t=e.Views.Base,i="is-expanded";e.Views.Modules.Base=function(e){this.model=e.model,t.call(this,e),this.bindEvents([[this.model,"change:expanded",this._onExpandedChanged],[this.model,"change:active",this._onActiveChanged]])},e.Views.Modules.Base.prototype=$.extend({},t.prototype,{show:function(){this.$el.show();[{qsParam:"iax",modelState:"expanded"},{qsParam:"iaxm",modelState:"isMapExpanded"}].map(function(e){if(this._isModelInQuerystring(e.qsParam)){var t={};t[e.modelState]=!0,this.model.set(t)}}.bind(this))},hide:function(){this.$el.hide(),this.answer&&this.answer.set("isMapExpanded",!1)},isValid:function(){return!0},showNoResults:function(){},_render:function(){t.prototype._render.call(this,this.model)},_wrapLinks:function(){},_expand:function(){e.keyboard.set("namespace",this.model.pixelId),DDG.addClass(this.model.id,this.$parent,i),"maps"===this.model.nameId?e.history.set({iaxm:this.model.nameId}):e.history.set({iax:this.model.nameId}),DDG.page.views.atb&&DDG.page.views.atb.hide()},_collapse:function(){e.keyboard.set("namespace"),DDG.removeClass(this.model.id,this.$parent,i),"maps"===this.model.nameId?e.history.clear("iaxm"):e.history.clear("iax")},_isModelInQuerystring:function(t){var i=e.history.get(t),s=1===i||0===i?e.history.get("ia"):i;return!!s&&(this.model.id===s||this.model.parentId===s||this.model.nameId===s)},_onActiveChanged:function(){return this.model.active?this.show():this.hide()},_onExpandedChanged:function(){return this.model.expanded?this._expand():this._collapse()}})}(DDG),function(e){var t=e.Views.Modules.Base;e.Views.Modules.About=function(i){if(t.call(this,i),this.itemModel=this.model.items[0],this._cacheElems(".js-about-module",["content","toggle","more","less"]),this.bindEvents([[this.model,"change:expanded",this._onExpandedChange],[this.$content,"click",this._onClick],[this.$toggle,"click",this._onToggleClick]]),this.itemModel.header){this.model.set("headerType",this.itemModel.headerType);var s=i.customHeader?i.customHeader.headerClass:e.Views.About.AboutHeader;this.views.header=new s({before:this.$content,model:this.itemModel.header,answer:this.model,imagesVqd:this.itemModel.images_vqd})}this.model.items.length&&(this.views.item=new e.Views.About.AboutItem({appendTo:this.$content,model:this.itemModel,answer:this.model})),this.calculateSize()},e.Views.Modules.About.prototype=$.extend({},t.prototype,{template:"about_module",calculateSize:function(){this._calculateHeight(),this._updateExpandedState()},_render:function(i){t.prototype._render.call(this,i);var s=this.model.meta&&this.model.meta.name;e.device.isEnglish&&"maps_expanded"!==this.model.id&&(this.views.feedback=new e.Views.Feedback.FeedbackPrompt({sourceName:this.model.meta.src_name,category:"wikipedia",categoryName:s,categoryValue:"Wikipedia"!==s?"about":"",promptText:lp("feedback form","Share Feedback"),appendTo:this.$el,showYesNo:!1}))},_calculateHeight:function(){var e=this.$content[0];if(e&&e.scrollHeight){var t=e.clientHeight+(this.model.isSideModule?75:0);e.scrollHeight>t?this.itemModel.set("isTooHigh",!0):this.model.isSideModule&&this.$el.addClass("has-content-height")}},_updateExpandedState:function(){this.itemModel.canModuleExpand&&(this.itemModel.canModuleExpand()&&!this.model.expanded?(this.$toggle.show(),this.$more.show(),this.$less.hide(),this.$el.removeClass("is-expanded")):this.itemModel.canModuleExpand()&&this.model.expanded?(this.$toggle.show(),this.$more.hide(),this.$less.show(),this.$el.addClass("is-expanded")):(this.$more.hide(),this.$less.hide(),this.$el.removeClass("is-expanded")))},_onExpandedChange:function(){this._updateExpandedState()},_onClick:function(){this.model.engaged&&this.model.engaged(),e.device.isMobileDevice&&!this.model.isMapExpanded&&(e.pixel.fire("iasm",this.model.pixelId,this.model.openType),this.model.set("expanded",!this.model.expanded))},_onToggleClick:function(t){t.stopPropagation(),this.model.engaged(),e.pixel.fire("iasm",this.model.pixelId,this.model.openType),this.model.set("expanded",!this.model.expanded)}})}(DDG),function(e){var t=e.Views.Modules.About;e.Views.Modules.AboutMap=function(i){this.model=i.answer,this.itemModel=i.model,i.customHeader={headerClass:e.Views.ModuleImageHeader,answer:this.model},i.model=this.model,t.call(this,i),this.bindEvents([[this.model,"change:isMapExpanded",this._onMapExpandedChange]])},e.Views.Modules.AboutMap.prototype=$.extend({},t.prototype,{_render:function(e){this.itemModel.expand(),t.prototype._render.call(this,e)},_onMapExpandedChange:function(e){e&&!this.model.expanded?this.model.set("expanded",!0):e||this.model.expanded||this.model.set("expanded",!1)}})}(DDG),function(e){var t=e.Views.Modules.Base,i="half-opacity";e.Views.Modules.Forecast=function(i){t.call(this,i),this._cacheElems(".js-forecast-module-detail",["moreat"]),this._updateIcon(),this.bindEvents([[this.model.items,"change:hour",this._updateDetail],[this.model.items,"change:selected",this._updateDetail],[this.model.items,"beforeSend",this._setDetailTimer],[e.settings,"change:kae",this._rerender],[this.model.items,"change:unit",this._rerender],[this.$moreat,"click",this._onExternalLinkClick],[this.model,"change:openType",this._onOpenTypeChanged]])},e.Views.Modules.Forecast.prototype=$.extend({},t.prototype,{template:"forecast_module",_getItems:function(){this.model&&this.model.items&&(this.model.items=this.model.items[0]?this.model.items[0]:this.model.items)},_updateDetail:function(){clearTimeout(this._timer),this.$detail.html(e.exec_template("forecast_detail",this.model)),this._cacheElems(".js-forecast-module-detail",["unit","moreat","moreatcontainer","hours","hoursmobile","top","bottom","more"]),this.$top.removeClass(i),this.$bottom.removeClass(i),this.bindEvents([[this.$unit,"click",this._onUnitClick],[this.$more,"click",this._onExternalLinkClick]])},_render:function(i){this._getItems(),this.model.items.isEnglishDevice=e.device.isEnglish,t.prototype._render.call(this,this.model),this._cacheElems(".js-forecast-module",["item","detail"]),this.bindEvents([[this.$item,"click",this._onDailyCardClick]]),this._updateDetail(),e.device.isEnglish&&(this.views.feedback=new e.Views.Feedback.FeedbackPrompt({category:"forecast",promptText:lp("feedback form","Share Feedback"),appendTo:this.$moreatcontainer,showYesNo:!1}))},_onDailyCardClick:function(e){var t=$(e.currentTarget);this.$item.each((function(e,t){$(t).removeClass("module__items-item--selected")})),t.addClass("module__items-item--selected"),e.preventDefault(),this.model.engaged(),this.model.items.updateSelected(t.data("item-index"))},_setDetailTimer:function(){this._timer=setTimeout(function(){this.$top.addClass(i),this.$bottom.addClass(i)}.bind(this),500)},_onUnitClick:function(e){e.preventDefault(),this.model.engaged(),this.model.items.updateUnit($(e.currentTarget).data("unit"))},_updateIcon:function(){if(this.model.openType&&!this._changedIcon){var e="https://duckduckgo.com/assets/icons/meta/DDG-iOS-weather-icon_";$("#icon60").attr("href",e+"60x60.png"),$("#icon76").attr("href",e+"76x76.png"),$("#icon120").attr("href",e+"120x120.png"),$("#icon152").attr("href",e+"152x152.png"),this._changedIcon=!0}},_onExternalLinkClick:function(e){return e.stopPropagation(),this.model.engaged(),this.model.clickedExternalLink(),t.prototype._onExternalLinkClick.call(this,e)},_onOpenTypeChanged:function(){this._updateIcon()}})}(DDG),function(e){var t=e.Views.Modules.Base;e.Views.Modules.Maps=function(e){t.call(this,e),this.bindEvents([[this.model,"change:isMapExpanded",this._onMapExpandedChanged]])},e.Views.Modules.Maps.prototype=$.extend({},t.prototype,{template:"maps_module",_render:function(i){t.prototype._render.call(this,i),this._cacheElems(".js-maps-module",["map","detailview","control-topright","control-bottomleft"]),this._renderAddressDetails(),this._renderStaticMap(),e.device.isEnglish&&(this.views.feedback=new e.Views.Feedback.FeedbackPrompt({category:"maps",promptText:"Is this map helpful?",subtitleText:lp("feedback form","Want to tell us a bit more?"),appendTo:this.$el}))},_renderStaticMap:function(){this.views.staticMap||(this.views.staticMap=new e.Views.Mapkit.StaticMap({markers:[this.model.selectedItem],marker:this.model.selectedItem,width:this.$el.outerWidth(),height:200,appendTo:this.$map,showCTA:!0,answer:this.model}),this.bindEvents([[this.views.staticMap,"click",this._onStaticMapClicked]]))},_renderAddressDetails:function(){this.views.detail||(this.views.detail=new e.Views.Address.AddressDetail({model:this.model.selectedItem,appendTo:this.$detailview,answer:this.model}))},_onStaticMapClicked:function(){e.router.navigate("toggle-map",{model:this.model,directionsModel:this.model.directionsModel,isMapExpanded:!0}),this.model.fire("iacg"),this.model.engaged()}})}(DDG),function(e){var t=e.Views.Modules.Base,i={start:{name:"start",otherTypeName:"end"},end:{name:"end",otherTypeName:"start"}};e.Views.Modules.Directions=function(i){if(!e.history.get("iaxm")){this._ops=i,this.model=i.model,this._rawLocations=this.model&&this.model.data&&this.model.data[0],this.routeAttemptCounter=0;var s=e.duckbar.tabs.maps_expanded,a=s&&s.expandedMap&&s.expandedMap.model,o=a&&a.directionsModel;this.directionsModel=o||new e.Models.Maps.Directions({start:this._rawLocations.start,end:this._rawLocations.end,userLocation:this._rawLocations.user_location}),e.modulesLayout&&e.modulesLayout.modules&&e.modulesLayout.modules.directions&&(e.modulesLayout.modules.directions.directionsModel=this.directionsModel),this._rawLocations&&(this._rawLocations.start||this._rawLocations.end)?(this.model.canShowMap=!0,e.pixel.fire("dir_map",{start:!!this._rawLocations.start,end:!!this._rawLocations.end})):e.pixel.fire("dir_emp"),t.call(this,this._ops),this.bindEvents([[this.model,"change:isMapExpanded",this._onMapExpandedChanged],[this.directionsModel,"change:start",this._onLocationChange],[this.directionsModel,"change:end",this._onLocationChange],[this.directionsModel,"change:routeList",this._onRouteListChange],[this.directionsModel,"change:canRoute",this._onCanRouteChange],[this.directionsModel,"change:isRouting",this._onIsRoutingChange],[e.settings,"change:kae",this._onThemeChange]])}},e.Views.Modules.Directions.prototype=$.extend({},t.prototype,{template:"directions_module",_render:function(i){t.prototype._render.call(this,i),this._cacheElems(".js-directions-module",["search","map","cta","details","skeletonloader","privacy-link"]),this.bindEvents([[this.$cta,"click",this._expandMapDirections],[this.$map,"click",this._expandMapDirections],[this.$el,"submit",this._expandMapDirections]]),this._rawLocations&&(this._addLocations(this._rawLocations),this._rawLocations.start&&this._rawLocations.end&&(this._toggleCTA(!0),this._tryToRoute())),this._initSearch(),this.model.isMapExpanded||(this.$el.addClass("has-feedback-prompt"),this.views.feedback=new e.Views.Feedback.FeedbackPrompt({sourceName:this.model.sourceName,category:"directions",categoryName:"Directions",categoryValue:"directions",promptText:lp("feedback form","Share Feedback"),showYesNo:!1,appendTo:this.$el,subtitleText:lp("feedback form","Share feedback for this result.")}),e.device.isDesktop&&(this.views.feedback&&this.views.feedback.$el.prepend(this.$privacylink),this.$privacylink.removeClass("is-hidden")))},_tryToRoute:function(){this.directionsModel.startDisplay&&this.directionsModel.endDisplay&&this.directionsModel.canRoute&&(this.model.isMapExpanded||this._route())},_addLocations:function(e){e&&(e.start||e.end)&&["start","end"].forEach(function(t){var i="start"===t?"end":"start";e[t]&&(this.directionsModel.autocompleteLocation({loc:e[t],type:t},!0),!e[i]&&e.user_location&&(this.directionsModel.set(i+"Display",lp("directions","Your Location")),this.directionsModel.setLocation({coordinate:{lat:e.user_location.lat,lon:e.user_location.lon},display:lp("directions","Your Location"),type:i})))}.bind(this))},_initSearch:function(){this.views.directionsSearch=new e.Views.Maps.DirectionsSearch({model:this.model,directionsModel:this.directionsModel,appendTo:this.$search})},_route:function(){if(this.model.canShowMap&&this.directionsModel.canRoute){var e=this._getTypeToRetryAutocomplete();e?(this.directionsModel.set("canRoute",!1),this.directionsModel.autocompleteLocation({loc:this.directionsModel[e.name].rawLocation,type:e.name,locationHint:this.directionsModel[e.otherTypeName].coordinate},!0)):(this.directionsModel.set("canRetryLocationSearch",!1),this.directionsModel.route(null,!0))}},_getTypeToRetryAutocomplete:function(){if(!this.directionsModel.canRetryLocationSearch)return null;if(!this.directionsModel.start.what||!this.directionsModel.end.what)return null;var t=null;this.routeAttemptCounter+=1;var s=e.geo.distance(this.directionsModel.start.coordinate,this.directionsModel.end.coordinate),a=e.geo.distance(this.directionsModel.start.coordinate,this.directionsModel.userLocation)5e3&&1===this.routeAttemptCounter&&(t=a),t},_expandMapDirections:function(t){t.preventDefault();try{var i={};if(i.start=this.views.directionsSearch.views.mapSearchbarStart.getCurrentValue(),i.end=this.views.directionsSearch.views.mapSearchbarEnd.getCurrentValue(),!i.start||!i.end)return;["start","end"].forEach(function(e){i[e]!==this.directionsModel[e+"Display"]&&(this.directionsModel.set("start"===e?"isStartUpdating":"isEndUpdating",!0),this.directionsModel[e]=i[e],this.directionsModel.autocompleteLocation({loc:i[e],type:e,callbackFn:function(){this.set("isStartUpdating",!1),this.set("start"===e?"isStartUpdating":"isEndUpdating",!1)}.bind(this.directionsModel)}))}.bind(this))}catch(t){}(this.directionsModel.start&&this.directionsModel.end||i.start&&i.end)&&(this.directionsModel.set("canRetryLocationSearch",!1),e.router.navigate("toggle-map",{model:this.model,directionsModel:this.directionsModel,isMapExpanded:!0,isDirections:!0})),e.pixel.fire("dir_exp")},_toggleCTA:function(e){this.$cta.toggleClass("is-disabled",!e)},_toggleIsLoaded:function(e){this.$el.toggleClass("is-loaded",e),this.$cta.toggleClass("is-disabled",!e)},_toggleHasResults:function(e){this.$el.toggleClass("has-results",e),this.$cta.toggleClass("is-disabled",!e)},_updateSnapshot:function(){this.$map.find("img").remove();var t="";if(this._points&&this._points.length>0)t=e.mapkit.getStaticDirectionsURL(this._points,{width:this.$map.outerWidth(),height:this.$map.outerHeight()});else{var i=this.directionsModel.userLocation||this.directionsModel.coordEnd;t=e.mapkit.getStaticEmptyMapURL({latitude:i.lat||i.latitude,longitude:i.lon||i.longitude,width:this.$map.outerWidth(),height:this.$map.outerHeight()})}var s=document.createElement("img");s.src=t,this.$map.append(s)},_onCanRouteChange:function(e){this._toggleCTA(e)},_onLocationChange:function(){e.history.get("iaxm")||this._route()},_onIsRoutingChange:function(e){this._toggleCTA(!e),this.$skeletonloader.toggle(e)},_onRouteListChange:function(){if(!e.history.get("iaxm")){var t=this.directionsModel.routeList.length;0===t&&e.pixel.fire("dir_no"),this._toggleHasResults(t>0),this.directionsModel.set("canShowMap",!0),this.views.directionsRouteInfo=this.views.directionsRouteInfo||new e.Views.Maps.DirectionsRouteInfo({model:this.directionsModel,appendTo:this.$details}),this._points=[],t>0&&this.directionsModel.fastestRoute.path.forEach(function(e){e.forEach(function(e){this._points.push([e.lat,e.lng])}.bind(this))}.bind(this)),this._updateSnapshot()}},_onThemeChange:function(){this._updateSnapshot()}})}(DDG),function(e){var t=e.Views.ClickableItem;e.Views.Modules.CarouselItem=function(i){if(this.model=i.model,this.answer=i.answer,"news"!==this.model.parentId?this.model.link=this.model.url:(this.model.isNews=1,this.model.link=this.model.id,"DDG"===this.model.syndicate&&!this.model.image&&this.model.fetch_image&&this.model._fetchImage(this.model.url)),this._isSingleVideoModule=!!(this.answer&&"Videos"===this.answer.answerType&&this.answer.items&&1===this.answer.items.length&&this.model&&this.model.images&&this.model.images.medium),t.call(this,i),this._cacheElems(".js-carousel-item",["image-wrapper","image","img-placeholder","title","content"]),this._isSingleVideoModule){var s=this.$image.get(0),a=DDG.getImageProxyURL(this.model.images.medium,{width:200*Math.ceil(s.clientWidth/200),noAutoPadding:!0});s.style.cssText="background-image: url("+a+");"}this.bindEvents([[this.$el,"mouseenter",this._onMouseEnter],[this.$el,"mouseleave",this._onMouseLeave],[this.$image,"error",this._onImageFail],[this.$image,"load",this._onImageLoad],[this.model,"change:image",this._onImageFetched],[this.model,"change:highlighted",this._onHighlightedChanged],[e.device,"resize",this.calculateSize]]),this._updateEllipsis()},e.Views.Modules.CarouselItem.prototype=$.extend({},t.prototype,{template:"carousel_module_item",getWidth:function(){return this._width||(this._width=this.$el.outerWidth(!0)),this._width},calculateSize:function(){this._updateEllipsis(),delete this._width},_render:function(i){t.prototype._render.call(this,$.extend({isSingleVideoModule:this._isSingleVideoModule,isIE:e.device.isIE},this.model))},_updateEllipsis:function(){this.$title.ellipsis({id:this.model.id+"-title"}),this.$content.ellipsis({id:this.model.id+"-content"})},_onImageFail:function(){this.$image.hide()},_onImageLoad:function(){this.$imgplaceholder.hide()},_onImageFetched:function(){var t=DDG.getImageProxyURL(this.model.image,{height:120,noFallback:!e.device.isIE});this.$image=e.device.isIE?$(''):$(''),this.$imagewrapper.append(this.$image),e.device.isIE?this.$imgplaceholder.hide():this.bindEvents([[this.$image,"error",this._onImageFail],[this.$image,"load",this._onImageLoad]])},_onMouseEnter:function(){this.model.highlight()},_onMouseLeave:function(){this.model.unhighlight()},_onClick:function(i,s){if(this.model.highlight(),"2"===e.settings.get("k5")||"videos"!==this.answer.id)t.prototype._onClick.call(this,i,s);else{e.duckbar.open("videos");var a=e.duckbar.tabs.videos.model,o=a.itemsById[this.model.id];if(o&&o.pixelated)return;a.itemsById[this.model.id]?(a.itemsById[this.model.id].set("selected",1),a.set("openedFromModule",!0)):e.pixel.fire("jse","videos")}},_onHighlightedChanged:function(){this.$el.toggleClass("is-highlighted",!!this.model.highlighted)},_onExternalLinkClick:function(i){if("videos"!==this.answer.id||"1"!==e.settings.get("k5"))return t.prototype._onExternalLinkClick.call(this,i);i.preventDefault()}})}(DDG),function(e){var t=e.Views.Modules,i=t.CarouselItem;e.Views.Modules.AdsCarouselItem=function(e){i.call(this,e)},t.AdsCarouselItem.prototype=$.extend({},i.prototype,{_onClick:function(e,t){this.model.bing&&this.answer.clickedExternalLink({},e),i.prototype._onClick.call(this,e,t)}})}(DDG),function(e){var t=e.Views.Modules,i=t.AdsCarouselItem;e.Views.Modules.ProductsCarouselItem=function(e){i.call(this,e)},t.ProductsCarouselItem.prototype=$.extend({},i.prototype,{template:"carousel_module_item_products"})}(DDG),function(e){var t=e.Views.Modules,i=t.AdsCarouselItem;e.Views.Modules.AutoAdsCarouselItem=function(e){i.call(this,e)},t.AutoAdsCarouselItem.prototype=$.extend({},i.prototype,{template:"carousel_module_item_auto_ads",_render:function(e){i.prototype._render.call(this,e)}})}(DDG),function(e){var t=e.Views.Modules.Base,i=["videos","news","maps_expanded","products"],s={maps_expanded:"maps",products:"shopping"},a=2;e.Views.Modules.Carousel=function(e){t.call(this,e),this.views={items:[],itemsById:{}},this._cacheElems(".js-carousel-module",["items","more","title","left","right","more-at","main-source"]),this.bindEvents([[this.model,"change:items",this._updateItems],[this.$moreat,"click",this._onExternalLinkClick],[this.$items,"scroll",this._onScroll]]),this.model.items.length?this._updateItems():DDG.deep.isBingV7()&&!this.model.loaded?this.model.on("load",this._onLoadedFromDeep.bind(this)):this._onLoadedFromDeep()},e.Views.Modules.Carousel.ITEMS_PER_PAGE=3,e.Views.Modules.Carousel.prototype=$.extend({},t.prototype,{template:"carousel_module",ItemClass:e.Views.Modules.CarouselItem,_render:function(){e.$html.hasClass("is-vertical-tabs-exp")&&!e.device.isMobile&&i.includes(this.model.id)&&(a=0,this.model.icon_template="icon_"+(s[this.model.id]||this.model.id)),t.prototype._render.call(this,this.model)},hide:function(){$.noop()},calculateSize:function(){var e=this.$el.width();this._width!==e&&(this._scrollToPage(this._currentPage,!1),this._width=e)},_updateItems:function(){if(!this._rendered){this._rendered=!0,this.$title.removeClass("is-hidden");var t=this.model.items,i=this.model.gridColumns;this._isPagedCarousel=!e.device.isMobileDevice&&t.length>3&&!i,this.bindEvents([[this.$more,"click",this._onMoreClick],[this.$title,"click",this._onMoreClick]]),this._showMoreItemsCTA()?this.$more.removeClass("is-hidden"):2===t.length?this.$el.addClass("has-two-items"):1===t.length&&this.$el.addClass("has-one-item");for(var s=0;s<12;s++){var a=t[s];if(!a)break;var o=new this.ItemClass({appendTo:this.$items,model:a,answer:this.model});this.views.items.push(o),this.views.itemsById[a.id]=o}this._width=this.$el.width(),this._appendFeedback(),this._isPagedCarousel&&this._initPagedCarousel(),this._selectItemFromQueryString()}},_showMoreItemsCTA:function(){return this._isPagedCarousel||e.device.isMobileDevice&&this.model.items.length>=3},_feedbackOptions:function(){var e="videos"===this.model.id&&1===this.model.items.length;return{extraData:"videos"===this.model.id?{single:+e}:null,promptText:e?lp("feedback form","Is this video helpful?"):lp("feedback form","Are these links helpful?")}},_appendFeedback:function(){if((e.device.isEnglish||"products"===this.model.id&&"b"===e.searchExperiments.getActiveVariant("panexp"))&&!e.device.isMobile){var t=this._feedbackOptions();this.views.feedback=new e.Views.Feedback.FeedbackPrompt({category:this.model.id,promptText:t.promptText,extraData:t.extraData,subtitleText:lp("feedback form","Want to tell us a bit more?"),appendTo:this.$el})}},_initPagedCarousel:function(){this._currentPage=0;var t=this.views.items.length;this._lastPage=Math.ceil(t/3)-1,this.$right.removeClass("is-hidden"),this.bindEvents([[this.$left,"click",this._onLeftClick],[this.$right,"click",this._onRightClick],[e.device,"resize",this.calculateSize]])},_selectItemFromQueryString:function(){var t=e.history.get("iai"),i=e.history.get("ia");this.model.nameId===i&&void 0!==t&&this._highlightAndScrollToItem(t)},_highlightAndScrollToItem:function(e){var t=this.model.itemsById[e];if(t&&t.highlight(),this._isPagedCarousel)for(var i=0;ie.Views.Modules.Carousel.ITEMS_PER_PAGE)},_appendAdBadge:function(){if(this.model.bing){var e=this.$el,t=this.$mainsource,i=this.model.isSideModule?t:e;this.views.adBadge=new DDG.Views.AdBadge({appendTo:i,context:"product-carousel",label:1===this.model.items.length?l("Ad"):l("Ads")})}},_scrollToPage:function(e,t){t=t||void 0===t,i.prototype._scrollToPage.call(this,e,t);var s=!1;t||(s=!0),s?this._reportVisibility():this._triggerSendVisibility()},_highlightAndScrollToItem:function(e){this.model.bing||i.prototype._highlightAndScrollToItem.call(this,e)},_getVisibleItemIndexes:function(){if(this._isPagedCarousel)return this._getVisiblePagedCarouselIndexes();if(this.model.gridColumns)return this._getVisibleItemIndexesGrid();for(var e=this.$items.scrollLeft(),t=e+this._width,i=0,s=[],a=0;a=t)break;n>e&&s.push(a),i+=o}return s},_getVisibleItemIndexesGrid:function(){var e=$(window),t=[];for(var i in this.views.items){var s=this.views.items[i].$el,a=s&&s.offset();a&&a.left+s.width()>e.scrollLeft()&&a.top+s.height()>e.scrollTop()&&a.leftthis.views.items.length&&this.views.items[t-1]&&(t-=1);for(var s=t;se.Views.Modules.Carousel.ITEMS_PER_PAGE)},_appendFeedback:function(){this.model.gridColumns&&!this.model.meta.hidden||i.prototype._appendFeedback.call(this)}})}(DDG),function(e){var t=e.Views.Modules,i=t.AdsCarousel;t.AutoAdsCarousel=function(e){i.call(this,e)},t.AutoAdsCarousel.prototype=$.extend({},i.prototype,{ItemClass:e.Views.Modules.AutoAdsCarouselItem,_showMoreItemsCTA:function(){return!1}})}(DDG),function(e){var t=e.Views.Modules.Base,i=e.device.isMobile?44:57,s=e.device.isMobile?2:20,a={regular:{desktop:{height:280,rows:2},desktopSmall:{height:280,rows:2},mobile:{height:142,rows:1}},fallback:{desktop:{rows:2},desktopSmall:{rows:2},mobile:{rows:2}}};e.Views.Modules.Images=function(i){t.call(this,i),this._cacheElems(".js-images",["show-more","thumbnails"]),this._updateContainerDimensions(),this._numRows=this._getSettings().rows,this.bindEvents([[this.model,"change:items",this._onItemsChanged],[this.model,"change:failed",this._onItemsChanged],[e.device,"resize",this._onResize],[this.$showmore,"click",this._onMoreClick]]),this.model.items.length?this._onItemsChanged():DDG.deep.isBingV7()&&!this.model.loaded?this.model.on("load",this._onLoadedFromDeep.bind(this)):this._onLoadedFromDeep()},e.Views.Modules.Images.prototype=$.extend({},t.prototype,{template:"images_module",calculateSize:function(e){this.$parent.width()-s!==this._containerWidth&&(this._updateContainerDimensions(),this.$thumbnails.empty(),this.thumbnailsLoaded=!1,this._onItemsChanged())},_render:function(){e.$html.hasClass("is-vertical-tabs-exp")&&!e.device.isMobile&&(this.model.icon_template="icon_images",s=0),t.prototype._render.call(this,this.model)},_openImagesIA:function(){this.model.engaged(),e.duckbar.open("images",{})},_updateContainerDimensions:function(){this.$thumbnails.css("height",this._getSettings().height),this._containerHeight=this.$el.height()-i,this._containerWidth=this.$el.width()-s},_onItemsChanged:function(){if(this.model.items.length){var t=0;if(!this.thumbnailsLoaded){this.thumbnailsLoaded=!0;for(var i=[],s=0;s200?a.fallback[t].rows:1}:(this.model.items.length&&this.model.items.length<10&&!e.device.isMobile&&(t+="Small"),a.regular[t])},_onLoadedFromDeep:function(){this.model.items.length?this._onItemsChanged():this.model.load()},hide:function(){$.noop()}})}(DDG),function(e){var t=e.Views.Modules,i=t.Base,s={forecast:{desktop:404,mobile:418},maps_maps:{desktop:285},maps_places:{mobile:363},news:{desktop:343,mobile:343},videos:{desktop:343,mobile:343},images:{desktop:367,mobile:188},recipes:{desktop:343,mobile:343},products:{desktop:343,mobile:343},maps_places_snippet:{desktop:96}};t.Placeholder=function(e){this.signalWait=e.signalWait,this.timeAdded=(new Date).getTime(),i.call(this,e),this.show(),this.updateHeight()},t.Placeholder.prototype=$.extend({},i.prototype,{template:"module_placeholder",isModule:!0,updateHeight:function(){var t=190;e.device.isMobile&&s[this.signalWait]&&s[this.signalWait].mobile?t=s[this.signalWait].mobile:s[this.signalWait]&&(t=s[this.signalWait].desktop),this.$el.height(t)},showImages:function(t){t.set("isFallback",!0),this.views.images=new e.Views.Modules.Images({model:t,appendTo:this.$el}),DDG.deep.isBingV7()&&t.emit("load")}})}(DDG),function(e){var t=e.Views.Modules.Base;e.Views.Modules.Places=function(i){if(i.model=i.answer?i.answer:i.model,t.call(this,i),this.bindEvents([[this.$el,"click",this._onClick],[this.$map,"click",this._onMapClick]]),this.model.geoip){var s=new e.Models.UserLocation({lat:parseFloat(this.model.geoip.lat),lon:parseFloat(this.model.geoip.lon),type:e.Models.UserLocation.GEOIP_LOCATION});s.isValid()&&e.userLocator.setGeoIPLocation(s)}},e.Views.Modules.Places.prototype=$.extend({},t.prototype,{template:"places_module",_render:function(i){if(t.prototype._render.call(this,i),this._cacheElems(".js-places-module",["content","more","less","map","privacy-link"]),this._viewClass=this.model.items.length>1?"PlacesMultiple":"PlacesSingle",this.views.module=new e.Views.Places[this._viewClass]({appendTo:this.$content,model:this.model}),!this.model.isMapExpanded){this.$el.addClass("has-feedback-prompt");var s=this.model.items.length>1?"places_multiple":"places_single",a={sourceName:this.model.sourceName,category:"maps",categoryName:"Places",categoryValue:s,promptText:lp("feedback form","Share Feedback"),showYesNo:!1,appendTo:this.$el,subtitleText:lp("feedback form","Share feedback for this result.")};"places_single"===s&&(a.modalView=e.Views.Feedback.SinglePlaceModal,a.modalViewData=this.model.items[0]),this.views.feedback=new e.Views.Feedback.FeedbackPrompt(a),e.device.isDesktop&&!this.model.isSingle&&(this.views.feedback&&this.views.feedback.$el.prepend(this.$privacylink),this.$privacylink.removeClass("is-hidden"))}},_onClick:function(e){e.stopPropagation(),this.model.engaged()},_onMapClick:function(){e.router.navigate("toggle-map",{model:this.model,isMapExpanded:!0}),e.pixel.fire("map_cta","link")}})}(DDG),function(e){var t=e.Views.Modules.Base;e.Views.Modules.RelatedSearches=function(e){e.model.items&&e.model.items.forEach((function(e){e.web_search_url=e.web_search_url+(w.rv?"&v="+w.rv:"")+(w.kurl?w.kurl:"")})),t.call(this,e),this._cacheElems(".js-related-searches",["link"]),this.bindEvents([[this.$link,"click",this._onLinkClick]])},e.Views.Modules.RelatedSearches.prototype=$.extend({},t.prototype,{template:"related_searches_module",_render:function(i){var s=Math.ceil(i.model.items.length/2),a=i.model.items,o={query:Handlebars.Utils.escapeExpression(e.history.get("q")),firstHalf:a.slice(0,s),secondHalf:a.slice(s)};$.extend(this.model,o),t.prototype._render.call(this)},_onLinkClick:function(e){e.stopPropagation();var i={isPinnedToBottom:!!this.model.isAtBottom};return this.model.engaged(i),t.prototype._onExternalLinkClick.call(this,e)}})}(DDG),function(e){var t=e.Views.Modules.Base;e.Views.Modules.Covid19=function(i){t.call(this,i),this._cacheElems(".js-covid19",["link","cases","local","localrow","world","tab1","tab2","tab3","tab4","tab5","panel1","panel2","panel3","panel4","panel5","feedback","footer","footer-separator","stats","updated","wiki","toggle","more","less","overflow"]),this.bindEvents([[this.$link,"click",this._onExternalLinkClick],[this.$wiki,"click",this._onExternalLinkClick],[this.$tab1,"click",this._tabClick],[this.$tab2,"click",this._tabClick],[this.$tab3,"click",this._tabClick],[this.$tab4,"click",this._tabClick],[this.$tab5,"click",this._tabClick],[this.$stats,"click",this._moreStats],[this.$toggle,"click",this._onToggleClick],[this.model,"change:loaded",this._showCases],[this.model,"change:expanded",this._onExpandedChange]]),this.$less.hide(),this.views.feedback=new e.Views.Feedback.FeedbackPrompt({category:"covid",promptText:lp("feedback form","Share Feedback"),appendTo:this.$feedback,showYesNo:!1}),this.pixelId="covid19",this.model.getCasesData();var s=this.model.vaccines&&/(vaccines?)|(mortality)|(deaths)/.test(this.model.query);this._openTab(s?5:1)},e.Views.Modules.Covid19.prototype=$.extend({},t.prototype,{template:"covid_19",_openTab:function(t){this.$tab1.removeClass("is-active"),this.$tab2.removeClass("is-active"),this.$tab3.removeClass("is-active"),this.$tab4.removeClass("is-active"),this.$tab5.removeClass("is-active"),this.$panel1.addClass("is-hidden"),this.$panel2.addClass("is-hidden"),this.$panel3.addClass("is-hidden"),this.$panel4.addClass("is-hidden"),this.$panel5.addClass("is-hidden"),this["$panel"+t].removeClass("is-hidden"),this["$tab"+t].addClass("is-active"),e.pixel.fire("iae",this.pixelId,this.model.openType,{t:t})},_moreStats:function(e){e.preventDefault(),this._openTab(4)},_tabClick:function(e){e.preventDefault();var t=$(e.currentTarget);if(this["$panel"+t.data("id")].removeClass("is-hidden"),this._openTab(t.data("id")),4===t.data("id")){this.model.set("expanded",!1),this.$toggle.show();var i=this.$panel4.get(0);i.scrollWidth>i.clientWidth?this.$overflow.show():this.$overflow.hide()}else this.$toggle.hide(),this.$overflow.hide()},_showCases:function(){this.$cases.removeClass("is-hidden"),this.$world.text(this.model.worldLabel+": "+this.model.world.toLocaleString()),this.model.local&&(this.$localrow.removeClass("is-hidden"),this.$local.text(this.model.displayCountryName+": "+this.model.local.toLocaleString())),this.$panel4.append(DDG.exec_template("covid_19_cases",this.model)),this.$updated.text(this.model.updated),e.device.isMobile||this.$footerseparator.show()},_updateExpandedState:function(){this.model.expanded?(this.$toggle.show(),this.$more.hide(),this.$less.show(),this.$panel4.addClass("is-expanded")):(this.$toggle.show(),this.$more.show(),this.$less.hide(),this.$panel4.removeClass("is-expanded"))},_onExternalLinkClick:function(i){return i.stopPropagation(),e.pixel.fire("iae",this.pixelId,this.model.openType),t.prototype._onExternalLinkClick.call(this,i)},_onToggleClick:function(e){e.stopPropagation(),this.model.set("expanded",!this.model.expanded)},_onExpandedChange:function(){this._updateExpandedState()}})}(DDG),function(e){var t=e.Views.Modules.Base,i={league:"League",team:"Team",games:"Game"};e.Views.Modules.Sports=function(e){t.call(this,e)},e.Views.Modules.Sports.prototype=$.extend({},t.prototype,{template:"sports_module",_render:function(s){t.prototype._render.call(this,s),this._cacheElems(".js-sports-module",["content","toggle","toggle-btn","expandToggleText","league-link","attribution","feedback-container","timezone-msg"]),this.bindEvents([[this.$toggle,"click",this._onToggleClick],[this.model,"change:isExpanded",this._updateExpandedState],[this.model,"change:canModuleExpand",this._showHideToggle],[this.model,"change:showTimeZoneMsg",this._updateTimeZoneMsgState],[this.$leaguelink,"click",this._recordEngagement],[this.$attribution,"click",this._onExternalLinkClick]]),e.device.isEnglish&&(this.views.feedback=new e.Views.Feedback.FeedbackPrompt({category:"sports",promptText:lp("feedback form","Share Feedback"),appendTo:this.$feedbackcontainer,showYesNo:!1}));var a=i[this.model.moduleType];this.views.content=new e.Views.Sports[a]({appendTo:this.$content,model:this.model}),this._updateExpandedState(),this._updateTimeZoneMsgState()},_updateExpandedState:function(){this.model.canModuleExpand&&(this.model.isExpanded?(this.$togglebtn.removeClass("rotate"),this.$togglebtn.addClass("rotate--270"),this.$expandToggleText.text(lp("expand_text","Show Less"))):(this.$togglebtn.addClass("rotate"),this.$togglebtn.removeClass("rotate--270"),this.$expandToggleText.text(lp("expand_text","Show More"))))},_updateTimeZoneMsgState:function(){this.model.showTimeZoneMsg?(this.$timezonemsg.removeClass("is-hidden"),$(".js-sports-module-timezone-tooltip").attr("data-tooltip-text",this.model.timeZone)):this.$timezonemsg.addClass("is-hidden")},_showHideToggle:function(e){e?this.$toggle.show():this.$toggle.hide()},_onToggleClick:function(){this.model.engaged(),e.pixel.fire("iasm",this.model.pixelId,this.model.openType),this.model.set("isExpanded",!this.model.isExpanded)},_recordEngagement:function(){this.model.engaged()},_onExternalLinkClick:function(e){return e.stopPropagation(),this.model.engaged(),this.model.clickedExternalLink(),t.prototype._onExternalLinkClick.call(this,e)}})}(DDG),function(e){var t=e.Views.Modules.Base;e.Views.Modules.SpreadCTA=function(i){var s=e.pageLayout.layout.sidebar;if(s&&s.items.length){var a=s.items.map((function(e){return e&&e[0]})),o=e.modulesLayout.modules,n=Object.keys(o),l=n.map((function(e){return o[e].pixelId||e})),r=a.filter((function(e){return"ad"===e||n.includes(e)||l.includes(e)})).indexOf("spreadCTA");i.model.hasTopMargin=r>0}t.call(this,i)},e.Views.Modules.SpreadCTA.prototype=$.extend({},t.prototype,{template:"spread_cta",_render:function(){t.prototype._render.call(this),this._cacheElems(".js-spread-cta",["link"]),this.$el.click(this._onClick.bind(this))},_onClick:function(e){e.stopPropagation(),this.model.engaged&&this.model.engaged(),e.target=this.$link[0],e.currentTarget=this.$link[0],this._onExternalLinkClick(e)}})}(DDG),function(e){var t=e.Views.Modules.Base;e.Views.Modules.Lyrics=function(e){t.call(this,e)},e.Views.Modules.Lyrics.prototype=$.extend({},t.prototype,{template:"lyrics_module",_render:function(i){t.prototype._render.call(this,i),this._cacheElems(".js-lyrics-module",["content","footer","toggle","link"]),this.bindEvents([[this.model,"change:expanded",this._onExpandedChange],[this.$content,"click",this._onContentClick],[this.$toggle,"click",this._onToggleClick],[this.$link,"click",this._onExternalLinkClick]]),this._calculateContentHeight(),this._updateExpandedState(),e.device.isEnglish&&(this.views.feedback=new e.Views.Feedback.FeedbackPrompt({category:"lyrics",promptText:lp("feedback form","Share Feedback"),appendTo:this.$el,showYesNo:!1}))},_calculateContentHeight:function(){var e=this.$content[0];this.model.canExpand=!1,e&&e.scrollHeight&&e.scrollHeight>e.clientHeight&&(this.model.canExpand=!0,this.$footer.addClass("can-expand"))},_updateExpandedState:function(){this.model.canExpand?(this.$toggle.show(),this.model.expanded?this.$el.addClass("is-expanded"):this.$el.removeClass("is-expanded"),this.model.expanded||window.scrollTo(0,0)):this.$toggle.hide()},_onExpandedChange:function(){this._updateExpandedState()},_onContentClick:function(){this.model.engaged&&this.model.engaged(),e.device.isMobileDevice&&(e.pixel.fire("iasm",this.model.pixelId,this.model.openType),this.model.set("expanded",!this.model.expanded))},_onToggleClick:function(t){t.stopPropagation(),this.model.engaged&&this.model.engaged(),e.pixel.fire("iasm",this.model.pixelId,this.model.openType),this.model.set("expanded",!this.model.expanded)},_onExternalLinkClick:function(e){return e.stopPropagation(),this.model.engaged&&this.model.engaged(),this.model.clickedExternalLink(),t.prototype._onExternalLinkClick.call(this,e)}})}(DDG),function(e){var t=e.Views.Modules.Base;e.Views.Modules.DisinformationWarning=function(e){t.call(this,e)},e.Views.Modules.DisinformationWarning.prototype=$.extend({},t.prototype,{template:"disinformation_warning",_render:function(i){t.prototype._render.call(this),this._cacheElems(".js-disinformation-warning",["source","feedbackContainer"]),this.bindEvents([[this.$source,"click",this._onExternalLinkClick]]),e.device.isEnglish&&(this.views.feedback=new e.Views.Feedback.FeedbackPrompt({category:"disinformationWarning",promptText:lp("feedback form","Share Feedback"),genericLabel:"This answer is helpful",appendTo:this.$feedbackContainer,showYesNo:!1}))},_onExternalLinkClick:function(i){return i.stopPropagation(),e.pixel.fire("infoboxclick",e.duckbar.disinfoExp.getPixelData()),this.model.engaged&&this.model.engaged(),t.prototype._onExternalLinkClick.call(this,i)}})}(DDG),function(e){var t=e.Views.Base;e.Views.About.AboutItem=function(i){this.answer=i.answer,t.call(this,i),this._cacheElems(".js-about-item",["abstr","link","directions","more-at-inline","more-at-bottom","clickable-header"]),this.bindEvents([[this.answer,"change:expanded",this._onExpandedChange],[this.$link,"click",this._onExternalLinkClick],[this.$directions,"click",this._onDirectionsClick],[this.$moreatinline,"click",this._onExternalLinkClick],[this.$moreatbottom,"click",this._onExternalLinkClick],[this.$clickableheader,"click",this._onExternalLinkClick]]),this.model.hasInfobox&&(this.views.infobox=new e.Views.About.AboutInfoBox({appendTo:this.$el,model:this.model.infobox})),this.model.profiles&&(this.answer.set("profileLinks",this.model.profiles.links.length),this.views.profiles=new e.Views.About.AboutProfiles({appendTo:this.$el,model:this.model.profiles,answer:this.answer})),this._updateExpandedState()},e.Views.About.AboutItem.prototype=$.extend({},t.prototype,{template:"about_item",_render:function(){if(this.model.isMapExpanded=this.answer.isMapExpanded,t.prototype._render.call(this,this.model),this.answer.isMapExpanded&&this._cacheElems(".js-about-item",["title"]),this.model.header&&this.model.header.mapLocation){var i=e.duckbar.tabs.maps_expanded,s=i&&i.expandedMap&&i.expandedMap.model,a=s&&s.directionsModel;this.answer.directionsModel=this.answer.directionsModel||a||new e.Models.Maps.Directions}},_prettifyCode:function(){var e=this.$("pre");e.length&&DDG.require("prettify",(function(){e.addClass("prettyprint"),window.prettyPrint()}))},_updateExpandedState:function(){this.model.getAbstract&&this.$abstr.html(this.model.getAbstract()),this.model.hasCode&&this._prettifyCode(),this.model.showMoreAtBottom&&(this.model.showMoreAtBottom()?(this.$moreatbottom.removeClass("is-hidden"),this.$moreatinline.addClass("is-hidden")):(this.$moreatbottom.addClass("is-hidden"),this.$moreatinline.removeClass("is-hidden")))},_openDirections:function(){this.answer.directionsModel&&(this.answer.directionsModel.setLocation({type:"end",what:this.model.Heading,display:this.model.Heading}),this.answer.directionsModel.set("endDisplay",this.model.Heading),this.answer.directionsModel.userLocation&&(this.answer.directionsModel.set("startDisplay",lp("directions","Your Location")),this.answer.directionsModel.setLocation({type:"start",coordinate:{lat:this.answer.directionsModel.userLocation.lat,lon:this.answer.directionsModel.userLocation.lon},display:lp("directions","Your Location")})),this.answer.isMapExpanded?(this.answer.set("isDirectionsActive",!0),this.answer.directionsModel.onDirectionsAction()):e.router.navigate("toggle-map",{model:this.answer,directionsModel:this.answer.directionsModel,isMapExpanded:!0,isDirections:!0}))},_onExpandedChange:function(){this.answer.expanded?this.model.expand():this.model.collapse(),this._updateExpandedState()},_onExternalLinkClick:function(e){var i=$(e.currentTarget),s=i&&i.attr("title");return e.stopPropagation(),this.answer.clickedExternalLink({plc:s}),this.answer.engaged(),t.prototype._onExternalLinkClick.call(this,e)},_onDirectionsClick:function(){e.pixel.fire("dir_loc"),this._openDirections()}})}(DDG),function(e){var t=e.Views.Base;e.Views.About.AboutInfoBox=function(e){t.call(this,e),this.bindEvents([[this.model,"change:expanded",this._rerender]])},e.Views.About.AboutInfoBox.prototype=$.extend({},t.prototype,{template:"about_infobox",_render:function(){t.prototype._render.call(this,this.model)}})}(DDG),function(e){var t=e.Views.Base;e.Views.About.AboutHeader=function(e){this.answer=e.answer,t.call(this,e),this.bindEvents([[this.model,"change:mapLocation",this._onMapLocationChanged],[this.model,"change:mapFailed",this._onMapFailed]]),this.model.mapLocation&&this._renderMap()},e.Views.About.AboutHeader.prototype=$.extend({},t.prototype,{template:"about_header",_render:function(e){t.prototype._render.call(this,this.model),this._cacheElems(".js-about-header",["image","map"]),this.bindEvents([[this.$image,"click",this._onImageClicked],[this.$map,"click",this._onMapClicked]])},_renderMap:function(){this.views.map||setTimeout(function(){this.views.map=new e.Views.Mapkit.StaticMap({markers:[this.model.mapLocation],width:this.$map.outerWidth(),height:this.$map.outerHeight(),appendTo:this.$map,showCTA:!0,answer:this.answer})}.bind(this),0)},_onMapLocationChanged:function(){this._renderMap()},_onMapFailed:function(){e.pixel.fire("iahmf",this.answer.pixelId,this.answer.getPixelData())},_onImageClicked:function(){e.pixel.fire("iahic",this.answer.pixelId,this.answer.openType,this.answer.getPixelData()),e.duckbar.open("images")},_onMapClicked:function(t){t.preventDefault(),e.router.navigate("toggle-map",{model:this.answer,directionsModel:this.answer.directionsModel,isMapExpanded:!0}),this.answer.fire("iacg"),e.pixel.fire("iahmc",this.answer.pixelId,this.answer.openType,this.answer.getPixelData())}})}(DDG),function(e){var t=e.Views.Base;e.Views.About.AboutProfiles=function(e){this.answer=e.answer,t.call(this,e),this.bindEvents([[this.model,"change:links",this._rerender]])},e.Views.About.AboutProfiles.prototype=$.extend({},t.prototype,{template:"about_profiles",_render:function(){t.prototype._render.call(this,this.model),this.bindEvents([[".js-about-profile-link","click",this._onExternalLinkClick]])},_onExternalLinkClick:function(e){var i=$(e.currentTarget),s=i&&i.attr("title");return e.stopPropagation(),this.answer.clickedExternalLink({plc:s}),this.answer.engaged(),t.prototype._onExternalLinkClick.call(this,e)}})}(DDG),function(e){var t=e.Views.Base;e.Views.Verticals.Base=function(i){this.views={items:[],itemsById:{}},t.call(this,i),this.$results=this.$results||this.$(".js-vertical-results"),this.$moduleWrapper=this.$(".js-vertical-sidebar-modules"),this._createFilterDropdowns(),this.bindEvents([[e.device,"resize",this._onResize],[this.model,"change:active",this._onActiveChanged],[this.model,"change:items",this._onItemsChanged],[this.model,"no-results",this._onNoMoreResults],[this.model,"change:failed",this._onFailed],[this.model,"change:isRequerying",this._onRequeryingChanged],[this.model,"change:isLoading",this._onLoadingChanged],[e.deep,"load:initial",this._showFeedbackBtn.bind(this)]]),this.model.active&&this.show(),this.model.items.length?this._updateItems():this.model.failed&&this.showNoResults(),e.deep.finished&&this._showFeedbackBtn()},e.Views.Verticals.Base.prototype=$.extend({},t.prototype,{isValid:function(){return!0},show:function(){this.$el.removeClass("is-hidden"),e.keyboard.set("namespace",this.model.id),e.hidden.set("iar",this.model.id)},hide:function(){this.$el.addClass("is-hidden"),e.keyboard.clear("namespace"),e.hidden.clear("iar",this.model.id)},showNoResults:function(){this.views.noResults||(this.views.noResults=new e.Views.NoResults({vertical:this.model.pixelId,resultType:this.model.meta.itemType,appendTo:this.$results})),this.views.noResults.show(),this._showingNoResults=!0},hideNoResults:function(){this.views.noResults.hide(),this._showingNoResults=!1},_render:function(e){e.id=this.model.id,t.prototype._render.call(this,e)},_updateItems:function(){this._showingNoResults&&this.hideNoResults();for(var e=0;e
                '):$(''),this.$imagewrapper.append(this.$image),e.device.isIE?this.$imgplaceholder.hide():this.bindEvents([[this.$image,"error",this._onImageFail],[this.$image,"load",this._onImageLoad]])},_onImageFail:function(){this.$image.hide()},_onImageLoad:function(){this.$imgplaceholder.hide()},_onHighlightedChanged:function(){this.$el.toggleClass("highlight",!!this.model.highlighted)},_onClick:function(e,i){this.model.highlight(),t.prototype._onClick.call(this,e,i)},_onMouseEnter:function(t){e.keyboard.active||this.model.highlight()},_onMouseLeave:function(e){this.model.unhighlight()},_onResize:function(e){delete this._bounds}})}(DDG),function(e){var t=e.Views.Verticals.Base;e.Views.Verticals.VerticalLinks=function(i){t.call(this,i),this.bindEvents([[e.device,"scroll",this._onScroll]]),e.settings.isDefault("kk")&&this.bindEvents([[e.keyboard,"up."+this.model.id,this._onUp],[e.keyboard,"j."+this.model.id,this._onUp],[e.keyboard,"down."+this.model.id,this._onDown],[e.keyboard,"k."+this.model.id,this._onDown],[e.keyboard,"enter."+this.model.id,this._onEnter]]),this.$results.on("click",".js-result-more",this._onLoadMoreClick.bind(this)),this._pageNumber=1,this._selectItemFromQuerystring(),this.menu=new e.Models.AnswerBarMenu,this.modulesLayoutView=new e.Views.ModulesLayout({menu:this.menu,model:e.modulesLayout,verticalId:i.id,selectors:{SIDE:".js-vertical-sidebar-modules"}})},e.Views.Verticals.VerticalLinks.prototype=$.extend({},t.prototype,{template:"vertical_links",ItemClass:e.Views.Verticals.VerticalLinkItem,_addSpellingMessage:function(){this.$spelling||(this.$spelling=new e.Views.SpellingMessage({before:this.$results.selector,model:e.search.spelling,ia:this.model.id}))},_updateItems:function(){this._removeLoadMore(),(this.model.usingSpellingBackfill||DDG.deep.isBingV7()&&this.model.spellingCorrected)&&this._addSpellingMessage(),this.views.items.length&&this.views.items.length!==this.model.items.length&&(e.deep.isBingV7()&&this.model.initialLoad?this.model.initialLoad=!1:this._addSeparator()),t.prototype._updateItems.call(this),delete this._height,this._selectItemFromQuerystring(),this._showingNoResults||(this.model.canLoadMore()?(this.$loadMore=e.$exec_template("vertical_load_more"),this.$results.append(this.$loadMore)):this._showNoMoreResults()),this._onScroll()},_appendItem:function(e){t.prototype._appendItem.call(this,e),e.set("visible",!0)},_showNoMoreResults:function(){this._removeLoadMore(),e.footer.set("visible",!0)},_removeLoadMore:function(){this.$loadMore&&(this.$loadMore.remove(),delete this.$loadMore)},_addSeparator:function(){this._pageNumber++,new e.Views.Verticals.VerticalSeparator({appendTo:this.$results,pageNumber:this._pageNumber})},_loadMoreCheck:function(){if(e.settings.autoloadDisabled()){var t=e.history.get("pn");t&&this._pageNumbers){t=i[a];break}}t&&(t.model.highlight(),this._updateScrollPosition())}},_isHighlightedItemVisible:function(){var t=this.model.highlightedItem&&this.views.itemsById[this.model.highlightedItem.id];if(t){var i=t.getBounds(),s=e.device.scrollTop(),a=e.device.height;return i.top>s&&i.bottomo+n&&e.device.scrollTop(a-n)}},_getHeight:function(){return this._height||(this._height=this.$results.height()),this._height},_onLoadingChanged:function(e){this.$loadMore&&this.$loadMore.toggleClass("is-loading",e)},_onNoMoreResults:function(){this._showNoMoreResults()},_onRequeryingChanged:function(e){t.prototype._onRequeryingChanged.call(this,e),e||(delete this._height,this._pageNumber=1,this.$(".js-result-sep").remove(),this.$loadMore&&this.$loadMore.remove(),delete this.$loadMore,this.$noMoreResults&&this.$noMoreResults.remove(),delete this.$noMoreResults)},_onLoadMoreClick:function(){this.model.loadMore()},_onResize:function(){t.prototype._onResize.call(this)},_onScroll:function(){if(this.model.active){var t=this._getHeight();!e.settings.isDefault("kav")&&t&&e.device.scrollTop()>t-2*e.device.height&&this.model.loadMore(),this._loadMoreCheck()}},_onUp:function(t){if(t.preventDefault(),this.model.highlightedItem===this.model.items[0])return this.model.highlightedItem.unhighlight();this._isHighlightedItemVisible()?(this.model.highlightPrevItem(),this._updateScrollPosition()):e.device.scrollTop()>0&&this._highlightFirstVisibleItem()},_onDown:function(e){e.preventDefault(),this._isHighlightedItemVisible()?(this.model.highlightNextItem(),this._updateScrollPosition()):this._highlightFirstVisibleItem()},_onEnter:function(e){e.preventDefault();var t=this.model.highlightedItem;t&&this.views.itemsById[t.id].open()}})}(DDG),function(e){var t=e.Views.Base;e.Views.Verticals.VerticalSeparator=function(e){t.call(this,e)},e.Views.Verticals.VerticalSeparator.prototype=$.extend({},t.prototype,{template:"vertical_separator",_render:function(i){var s,a,o=e.settings.get("kv");"-1"!==o&&("m"===o?a=!0:"l"===o?s=i.pageNumber:"1"===o&&(a=!0,s=i.pageNumber),t.prototype._render.call(this,{line:a,pageNumber:s}))}})}(DDG),function(e){var t=e.Views.Verticals.Base,i=["xs","s"],s=["maps_maps","maps_places","about","maps_expanded"],a="vertical--map__sidebar--",o="min",n="normal";e.Views.Verticals.VerticalMap=function(i){this._createVerticalMap(i),i.model=this.model,this.bindEvents([[this.model,"change:selectedItem",this._onSelectedItemChanged],[this.model,"change:sidebarLayout",this._onSidebarLayoutChanged],[this.model,"change:sidebarPosition",this._onSidebarPositionChanged],[this.model,"change:isDarkMap",this._onDarkMapChanged],[this.model,"change:isSearchAreaBtnVisible",this._onSearchAreaBtnVisibleChange],[this.model,"change:isMoreAtVisible",this._onIsMoreAtVisibleChange],[this.model,"change:isDirectionsActive",this._onIsDirectionsActiveChange],[this.model,"change:isMapStartActive",this._onIsMapStartActiveChange],[this.model,"change:proximity",this._onProximityChange],[this.model.meta,"change:query",this._onMetaQueryChange],[e.device,"resize",this._onResize],[e.settings,"change:"+e.settings.THEME_KEY,this._onThemeChange],[e.userLocator,"meaningfulUserLocationChange",this._onMeaningfulUserLocationChange]]),t.call(this,i)},e.Views.Verticals.VerticalMap.prototype=$.extend({},t.prototype,{template:"vertical_map",_onMeaningfulUserLocationChange:function(t){e.userLocator.hasLocation()?(this.views.mapkitMap.renderUserLocation(),this.views.mapkitMap.recenter(e.userLocator.userLocation)):this.views.mapkitMap.removeUserLocation(),this.model.set({isSearchAreaBtnVisible:!0})},_createVerticalMap:function(t){if(!t.answer)throw new Error("No answer model was passed when creating the Vertical Map. Here are the ops passed to Views.Verticals.VerticalMap._createVerticalMap: "+JSON.stringify(t));var i=t.answer,a={maps_places:1===i.items.length?e.Views.Places.PlacesSingleMap:e.Views.Places.PlaceListItem,maps_maps:e.Views.Address.AddressDetail,about:e.Views.Modules.AboutMap},o=i.items;if("about"===i.id)try{o=[i.items[0].header.mapLocation]}catch(e){}if(this.model=new e.Models.Answers.ExpandedMap({data:i.data,answerItemModel:i.model,queryEncoded:i.queryEncoded,name:i.name,nameId:i.nameId,sourceName:i.sourceName,sourceUrl:i.sourceUrl,isMoreAtVisible:i.isMoreAtVisible,mapLocation:o&&o[0]}),e.router.add("requery",this._handleRequery.bind(this)),e.modulesLayout&&e.modulesLayout.modules&&e.modulesLayout.modules.directions)var n=!0,l=e.modulesLayout.modules.directions.directionsModel;this.model.directionsModel=t.directionsModel||l,t.isDirectionsActive=t.isDirections||n,t.directionsModel=t.directionsModel||l,this.ItemClass=a[i.id],this.mapClickCount=0,this.isMapRenderPending=!1,this._glMapModel=this.model.glMapModel||new e.Models.GLMap({locations:o||this.model.itemsOnMap,pixelId:this.model.pixelId}),this.model._glMapModel=this._glMapModel,this.model.set("approx_geo_bbox",this._glMapModel.getApproximateGeoBBox()),this.model.isMapSidebarVisible=s.indexOf(this.model.id)>-1,this.model.isDarkMap=e.settings.isDarkTheme(),t.directionsModel?this._initDirectionsModel({model:t.directionsModel}):this._initDirectionsModel({query:!(e.history.get("start")||e.history.get("end"))&&t.model&&t.model.query}),this.model.directionsModel=this.directionsModel,this.model.set("isDirectionsActive",!!t.isDirectionsActive),this.model.on("change:isMapExpanded",this._resetState.bind(this))},show:function(){t.prototype.show.call(this),this.updateTheme(this.model.isDarkMap),this.model.isDirectionsActive||"start"===e.history.get("iaxm")?this.directionsModel&&this.directionsModel.fetchUserLocation(function(){this._renderMapkitMap()}.bind(this)):this._renderMapkitMap(),this.model.isDirectionsActive?this.directionsModel&&this.directionsModel.onDirectionsAction({noRouting:this.directionsModel.hasResults}):this._updateItems(),this.model.isMapSidebarVisible&&this._renderSidebar(function(){this._maybeShrinkDrawer()}.bind(this)),this._selectItemFromQuerystring(),$("html").addClass("has-vertical-map-open"),e.page.searchbar&&e.page.searchbar.disableTabIndexes()},hide:function(){this.views.userLocControl&&this.views.userLocControl.hide(),$("html").removeClass("has-vertical-map-open"),e.page.searchbar&&e.page.searchbar.enableTabIndexes(),t.prototype.hide.call(this),this.model.selectedItem&&this.model.selectedItem.unselect()},updateTheme:function(e){var t=a+"light",i="is-dark-map";e?(this.$toggle.removeClass(t),this.$el.addClass(i)):(this.$toggle.addClass(t),this.$el.removeClass(i))},showNoResults:function(){if(this.views.noResults?this.views.noResults.updateQuery(this.model.meta.query):this.views.noResults=new e.Views.NoMapResults({vertical:this.model.pixelId,resultType:this.model.meta.itemType,query:this.model.meta.query,appendTo:this.$results,model:this.model}),this.views.noResults.show(),this._showingNoResults=!0,this.$el.addClass("vertical--map--no-results"),this.model.set("isMoreAtVisible",!1),this._maybeShrinkDrawer(),e.history.get("bbox")){var t=e.history.get("bbox").split(",");this.views.mapkitMap.updateRegion((parseFloat(t[0])+parseFloat(t[2]))/2,(parseFloat(t[1])+parseFloat(t[3]))/2,Math.abs(parseFloat(t[2])-parseFloat(t[0])),Math.abs(parseFloat(t[3])-parseFloat(t[1])))}else this.model.hasShownItems||this.views.mapkitMap.updateRegion(this.model.meta.geoip.lat,this.model.meta.geoip.lon,2,2)},_render:function(i){t.prototype._render.call(this,i),this._cacheElems(".js-vertical-map",["map","control-topright","sidebar","toggle","toggle-button","sidebar-inner","results-container","results","detail","close-map","controls-topcenter","requery","back-to-list","back-to-serp","more","more-link","footer","mask"]),this.views.mapSideBarFooter=new e.Views.Maps.MapSidebarFooter({appendTo:this.$footer,model:this.model}),e.userLocator.canShowPUL()&&e.device.isDesktop&&(this.views.locationTile=new e.Views.UserLocation.UserLocationTile({appendTo:this.$controltopright,answer:this.model,position:"below-right",$originEl:this.$el})),this.model.isMapSidebarVisible&&this._updateSidebarLayout(),this.show(),e.pixel.fire("map_ei"),this.bindEvents([[this.$sidebar,"click",this._onSidebarEngagement],[this.$requery,"click",this._onRequeryClick],[this.$toggle,"click",this._onSidebarToggleClicked]]),e.device.isMobileDevice&&this.bindEvents([[this.$el,"scroll",this._onVerticalMapScroll]])},_updateSidebarLayout:function(){if(this.model.isMapExpanded){var t=i.indexOf(e.device.widthBreakpoint())>-1;this.model.set("sidebarLayout",t&&e.device.isMobilePortrait()?"bottom":"left")}},_updateItems:function(){this.model.isDirectionsActive||(this.model.set("hasShownItems",!0),this.$el.addClass("vertical--map--has-shown-items"),"MapLocation"===this.model.answerItemModel?this.ItemClass=e.Views.Address.AddressDetail:"Place"===this.model.answerItemModel?this.ItemClass=e.Views.Places[this.model.items.length>1?"PlaceListItem":"PlacesSingleMap"]:"About"===this.model.answerItemModel?this.ItemClass=e.Views.Modules.AboutMap:this.ItemClass=e.Views.Address.AddressDetail,this._updateMoreAtLink(),this.views.noResults&&(this.views.noResults.destroy(),this.$el.removeClass("vertical--map--no-results")),t.prototype._updateItems.call(this),this._positionSidebar(),this._resetSidebarScroll(),this.views&&this.views.mapkitMap&&this.views.mapkitMap.updateMap(this._getMapOffset()),this._maybeShrinkDrawer(),this._saveCurrentViewport())},_updateMoreAtLink:function(){var t=this.model.items&&this.model.items.length>1&&this.model.sourceUrl&&this.model.moreAtExternalServiceText;if("Place"===this.model.answerItemModel&&t){var i=this.model.items.length>1?this.model.sourceUrl:this.model.items[0].url,s=this.model.items.length>1?this.model.moreAtExternalServiceText:this.model.items[0].moreAtExternalServiceText,a=document.createTextNode(e.strip_all_html(s)),o=e.get_favicon_url(i);this.$morelinkimg=this.$morelink.find("img"),this.$morelinkimg.attr("src",o),this.$morelink.attr("href",i),this.$morelink.text(""),this.$morelink.append(this.$morelinkimg),this.$morelink.append(a),this.model.set("isMoreAtVisible",!0),this.$more.removeClass("is-hidden")}else this.model.set("isMoreAtVisible"),this.$more.addClass("is-hidden")},_saveCurrentViewport:function(){if(!this.model.isRequerying&&this.model&&this.views&&this.views.mapkitMap){var e=this.views.mapkitMap.views.map.region.center.latitude,t=this.views.mapkitMap.views.map.region.center.longitude,i=this.views.mapkitMap.views.map.region.span.latitudeDelta,s=this.views.mapkitMap.views.map.region.span.longitudeDelta;if(!e&&!t)return;this.model.set("geo_bbox",this._glMapModel.getGeoBBox(e,t,i,s))}},_renderUserLocControl:function(){!this.views.userLocControl&&e.userLocator.canGetLocation()&&"b"!==e.search.userLocationExp&&(this.views.userLocControl=new e.Views.Mapkit.UserLocationControl({model:e.userLocator,appendTo:this.$controltopright}))},_getMapOffset:function(){var t=0,i=0,s=0;return"left"===this.model.sidebarLayout&&this.model.sidebarPosition!==o?i=this.$sidebar.width():"bottom"===this.model.sidebarLayout&&(t=this.model.isDirectionsActive?150:56,s=this.model.sidebarPosition===o?45:e.device.height/2),{top:t,right:0,bottom:s,left:i}},_renderMapkitMap:function(){if(!this.views.mapkitMap&&!this.isMapRenderPending){this.isMapRenderPending=!0;var t={markers:this._glMapModel.selectedLocation?[this._glMapModel.selectedLocation]:this.model.itemsOnMap,model:this._glMapModel,answer:this.model,markerType:"circle",appendTo:this.$map,mapOffset:this._getMapOffset(),onMapReady:this._onMapReady.bind(this),hideMapTypeControl:!0,hideScale:e.device.isMobile||e.device.isMobileDevice};e.mapkit.isInitialized?setTimeout(function(){this._createMapkitView(t)}.bind(this),0):e.mapkit.init(function(){this._createMapkitView(t)}.bind(this))}},_createMapkitView:function(t){this.model.isDirectionsActive&&(t.isDirections=!0),this.directionsModel&&this.directionsModel.userLocation&&(t.userLocation=this.directionsModel.userLocation),this.views.mapkitMap=new e.Views.Mapkit.Map(t),this.bindEvents([[this.views.mapkitMap,"scrollzoom",this._onMapScrollZoom],[this.views.mapkitMap,"load",this._saveCurrentViewport],[this.views.mapkitMap,"select",this.blurSearchInput],[this.views.mapkitMap,"dragend",this._onDragEnd],[this.views.mapkitMap,"click",this._onMapClick],[this.views.mapkitMap,"single-tap",this._onMapSingleTap]]),this.model.isDirectionsActive?(this.$resultscontainer.hide(),this.directionsModel||this._initDirectionsModel({query:this.model.query}),this.directionsModel.hasResults&&this.views.mapkitMap.model.set("canShowMap",!0),this.views.directionsResults||(this.views.directionsResults=new e.Views.Maps.DirectionsResults({model:this.directionsModel,answer:this.model,map:this.views.mapkitMap,prependTo:this.$sidebarinner})),this.views.directionsResults.show(),this._createDirectionsPrintErrorMessage()):(this.$resultscontainer.show(),this.views.directionsResults&&this.views.directionsResults.hide())},_createDirectionsPrintErrorMessage:function(){this.views.directionsPrintErrorMessage=this.views.directionsPrintErrorMessage||new e.Views.Maps.DirectionsPrintErrorMessage({model:this.directionsModel,answer:this.model,appendTo:$("body")})},_selectItemFromQuerystring:function(){var t=e.history.get("iai");if("places"===this.model.nameId&&void 0!==t){var i=this.model.itemsById[t];i&&(i.select(),this._isSelectedItemFromQS=!0,this._resetSidebarScroll())}},_initDirectionsModel:function(t){this.directionsModel=t.model||new e.Models.Maps.Directions,this.bindEvents([[this.directionsModel,"change:routeList",this._onDirectionsRouteListChange],[this.directionsModel,"change:isRouting",this._onDirectionsIsRoutingChange]]),t.query&&this.directionsModel.setLocation({type:"end",what:t.query})},_renderSidebar:function(e){this.views.mapSidebar?this._updateSidebarLayout():this.views.mapSidebar=this._createSidebar("maps",e)},_createSidebar:function(t,i){var s,a={model:this.model,appendTo:this.$sidebar,directionsModel:this.directionsModel};return(s=new("bottom"===this.model.sidebarLayout?e.Views.Maps.MapSidebarMobile:e.Views.Maps.MapSidebar)(a)).views&&s.views.mapSearchbar&&(s.views.mapSearchbar.on("requery-submit",function(e){this.onRequeryAction(e)}.bind(this)),s.views.mapSearchbar.autocomplete&&s.views.mapSearchbar.autocomplete.on("requery-submit",function(e){this.onRequeryAction(e)}.bind(this))),setTimeout(function(){this.model.sidebarPosition===n?this._positionSidebar():this.model.set("sidebarPosition",n),i()}.bind(this),0),s},_positionSidebar:function(){var e=this.model.sidebarPosition!==o;this.$sidebar.toggleClass("vertical--map--sidebar-closed",!e),"bottom"===this.model.sidebarLayout?this.$sidebar.css("transform",""):"left"===this.model.sidebarLayout&&(this.$controlstopcenter.css("transform",""),e?(this.$sidebar.css("transform","translateX(0)"),this.$togglebutton.html("<")):(this.$sidebar.css("transform","translateX(-"+this.$sidebar.width()+"px)"),this.$togglebutton.html(">")))},_maybeShrinkDrawer:function(){var t=this.$sidebarinner.prop("scrollHeight"),i=e.device.height;if("bottom"===this.model.sidebarLayout&&this.model.sidebarPosition!==o&&(this.model.hasShownItems||this._showingNoResults)&&t0)}},onRequeryAction:function(t){this.model.set("isSearchAreaBtnVisible",!1);var i=t&&t.suggestion,s=i&&i.metadata;t&&t.query?t.query=t.query:i?(t.query=i.what,i.metadata||!i.where||i.where.match(lp("vertical_map","Search Near My Location"),"i")||i.where.match(lp("vertical_map","Search Current Map Area"),"i")||(t.query+=" "+i.where),!i.metadata&&i.where&&i.where.match(lp("vertical_map","Search Current Map Area"),"i")&&(t.strict_bbox=1)):this.model.meta&&this.model.meta.requery?t.query=e.Utils.Strings.decodeHex(this.model.meta.requery):t.query=e.Utils.Strings.decodeHex(this.model.query),t.strict_bbox=t.strict_bbox||"1",t.shouldMapViewportUpdate=!t.hasOwnProperty("shouldMapViewportUpdate")||t.shouldMapViewportUpdate,t.isSearchMapAreaPending=!!t.hasOwnProperty("isSearchMapAreaPending")&&t.isSearchMapAreaPending;var a={q:t.query,strict_bbox:t.strict_bbox},o=this.model.geo_bbox||this._glMapModel.getApproximateGeoBBox();o&&(a.bbox=o.top_left+","+o.bottom_right),s&&(a.metatoken=this.model.saveMetadata(s)),e.history.get("iai")&&!t.iai&&e.history.clear("iai"),e.history.get("metatoken")&&e.history.clear("metatoken"),t.isFromStaticMapsTab||e.history.set(a),e.router.navigate("requery",t)},_onRequeryClick:function(){this.onRequeryAction({shouldMapViewportUpdate:!1,isSearchMapAreaPending:!0}),this.model.set("isSearchAreaBtnVisible",!1),e.pixel.fire("map_ere"),e.pixel.fire("map_er","area")},blurSearchInput:function(){this.views.mapSidebar&&this.views.mapSidebar.blurSearchInput&&this.views.mapSidebar.blurSearchInput()},_getScrollable:function(){return"bottom"===this.model.sidebarLayout?this.$el:this.$sidebarinner},_resetSidebarScroll:function(){this._getScrollable().scrollTop(0)},_captureSidebarScroll:function(){this.model.set("lastPlacesScrollTop",this._getScrollable().scrollTop())},_restoreSidebarScroll:function(){null!=this.model.lastPlacesScrollTop&&this._getScrollable().scrollTop(this.model.lastPlacesScrollTop)},_onMapScrollZoom:function(){this.blurSearchInput(),this.model.isDirectionsActive||this.model.set("isSearchAreaBtnVisible",!0)},_onResize:function(){this.model.isMapSidebarVisible&&(this._updateSidebarLayout(),this._positionSidebar(),this.views.mapkitMap&&this.views.mapkitMap.updateMap(this._getMapOffset()),this._maybeShrinkDrawer())},_onDragEnd:function(){this.blurSearchInput(),this._saveCurrentViewport()},_onMapClick:function(e){this.blurSearchInput()},_onMapSingleTap:function(){e.device.isMobileDevice&&this.model.selectedItem&&this.model.selectedItem.unselect()},_onSelectedItemChanged:function(t){var i;"Place"!==this.model.answerItemModel&&"Places"!==this.model.answerType||this.model.isSingle||(i=!!t,!!this.views.currentItemDetail?(this.views.currentItemDetail.destroy(),delete this.views.currentItemDetail):this._captureSidebarScroll(),i?(this._setDocumentTitle(t.name),this.model.primaryPlace=t,this.views.currentItemDetail=new e.Views.Places.PlacesSingleMap({answer:this.model,model:this.model.primaryPlace,appendTo:this.$detail}),this.$detail.show(),this.$resultscontainer.hide(),this.$results.hide(),this.$more.hide(),this.$backtoserp.hide(),this.$backtolist.removeClass("is-hidden"),this._resetSidebarScroll()):(this._setDocumentTitle(this.model.meta.query||this.model.query),this.$detail.hide(),this.$resultscontainer.show(),this.$results.show(),this.$more.show(),this.$backtoserp.show(),this.$backtolist.addClass("is-hidden"),this._restoreSidebarScroll()),this._maybeShrinkDrawer(),this.model.sidebarPosition===o&&this.model.set("sidebarPosition",n))},_onThemeChange:function(){this.model.set("isDarkMap",e.settings.isDarkTheme())},_onSearchAreaBtnVisibleChange:function(){this.$requery.toggleClass("is-hidden",!this.model.isSearchAreaBtnVisible)},_onIsMoreAtVisibleChange:function(){this.$more.toggle(this.model.isMoreAtVisible)},_onProximityChange:function(){this.views.locationTile&&this.views.locationTile.showUserLocationCTA()},_onMetaQueryChange:function(e){this._setDocumentTitle(e)},_setDocumentTitle:function(e){document.title=e?decodeURIComponentSafe(e)+" at DuckDuckGo":"DuckDuckGo"},_toggleDirections:function(){this.$sidebar.toggleClass("has-directions",this.model.isDirectionsActive),this.model.isDirectionsActive?(this.views.directionsResults?this.views.directionsResults.show():this.views.directionsResults=new e.Views.Maps.DirectionsResults({model:this.directionsModel,answer:this.model,map:this.views.mapkitMap,prependTo:this.$sidebarinner}),this.$results.hide(),this.views.currentItemDetail&&this.views.currentItemDetail.hide(),this.views.exampleSearches&&this.views.exampleSearches.hide(),this.views.mapSideBarFooter._rerender(),this.$more.hide()):(this.views.directionsResults&&this.views.directionsResults.hide(),this.$resultscontainer.show(),this.model.isMapStartActive||(this.$results.show(),this.views.currentItemDetail&&this.views.currentItemDetail.show(),this.$more.show()))},_toggleMapStart:function(){this.model.isMapStartActive?(this.$resultscontainer.show(),this.$results&&this.$results.hide(),this.views.currentItemDetail&&this.views.currentItemDetail.hide(),this.$more.hide(),e.device.isEnglish&&(this.views.exampleSearches=this.views.exampleSearches||new e.Views.Maps.ExampleSearches({appendTo:this.$resultscontainer,model:this.model,answer:this.model}),this.views.exampleSearches.show())):(this.views.exampleSearches&&this.views.exampleSearches.hide(),this.$results&&this.$results.show())},_onIsDirectionsActiveChange:function(){this._toggleDirections()},_onIsMapStartActiveChange:function(){this._toggleMapStart()},_onDirectionsRouteListChange:function(){this.$resultscontainer.hide(),this._glMapModel.set("canShowMap",!0)},_onDirectionsIsRoutingChange:function(e){this.$resultscontainer.css("opacity",e?.2:1),this.$el.toggleClass("vertical--map--has-shown-items",!e)},toggleExpandedMap:function(t){var i=(t=t||{}).isMapExpanded||t.state&&!!t.state.iaxm;if(this.model.set("isDirectionsActive",!!t.isDirections),this.model.set("isMapStart",!!t.isMapStart),!this.model.firstRun){if(this.model.isMapExpanded===i)return;this.model.set("isMapExpanded",i)}i?(t.isMapStart?e.history.set("iaxm","start"):t.isDirections||e.history.set("iaxm",t.model.nameId||"maps"),this.model.firstRun||(t.model.selectedItem&&t.model.selectedItem.itemId&&e.history.set("iai",t.model.selectedItem.itemId),this.show()),this.model.firstRun=!1,e.history.get("iar")&&e.history.clear("iar")):(t.model.selectedItem&&t.model.selectedItem.itemId&&t.model.selectedItem.unselect(),e.history.clear("iaxm","iai","iax","strict_bbox","bbox","metatoken","start","end","transport"),this.hide(),e.duckbar.modulesLayoutView.recalculateModuleSizes())},_handleRequery:function(t){var i=t&&t.state,s=t&&t.model||this.model;if(e.history.set("iaxm",i&&i.iaxm||"maps"),s.set("isMapStartActive",!1),i&&s)for(var a=["q","bbox","strict_bbox","iai","metatoken"],o=0;o",months:[0,1,2,3,4,5,6,7,8,9,10,11].map((function(e){return new Date(2021,e,1).toLocaleDateString(t,{month:"long"})})),weekdays:[3,4,5,6,7,8,9].map((function(e){return new Date(2021,0,e).toLocaleDateString(t,{weekday:"long"})})),weekdaysShort:[3,4,5,6,7,8,9].map((function(e){return new Date(2021,0,e).toLocaleDateString(t,{weekday:"narrow"})}))},i.call(this,e)},t.CustomDateRange.prototype=$.extend({},i.prototype,{template:"custom_date_range_modal",_render:function(e){i.prototype._render.call(this,{isPopover:e.isPopover,header:l("Custom date range"),key:"custom_date"}),this._cacheElems(".js-custom-date-range",["from","to","from-datepicker","to-datepicker","apply"]),this.bindEvents([[this.$from,"focus",this._fromOnFocus],[this.$from,"change",function(e){this._onChange(e,this.fromPicker)}.bind(this)],[this.$from,"keyup",this._disablePikadayDefaultEvents],[this.$from,"keydown",this._onFromKeydown],[this.$to,"focus",this._toOnFocus],[this.$to,"change",function(e){this._onChange(e,this.toPicker)}.bind(this)],[this.$to,"keyup",this._disablePikadayDefaultEvents],[this.$to,"keydown",this._onToKeydown],[this.$apply,"click",this._applyChanges]]),DDG.require("pikaday",this._onPikadayLoaded.bind(this))},_onPikadayLoaded:function(){this.fromPicker=this.createDatePicker(this.$fromdatepicker,this.selectFromDate.bind(this)),this.toPicker=this.createDatePicker(this.$todatepicker,this.selectToDate.bind(this)),this.fromPicker.setDate(this.model.fromDate),this.toPicker.setDate(this.model.toDate),this.toPicker.hide(),this.fromPicker.show(),this.on("shown",(function(){this.$from.focus()})),this.$from.focus()},setStartRange:function(e){this.fromPicker.setStartRange(e),this.fromPicker.draw(),this.toPicker.setStartRange(e),this.toPicker.draw()},setEndRange:function(e){this.fromPicker.setEndRange(e),this.fromPicker.draw(),this.toPicker.setEndRange(e),this.toPicker.draw()},selectFromDate:function(e){this.$from&&(this.$from[0].value=this.convertDateToLocaleString(e),this.model.set("fromDate",e),this.setStartRange(e),e>this.model.toDate&&(this.model.fromDate=this.model.toDate,this.model.toDate=e,this.fromPicker.setDate(this.model.fromDate),this.toPicker.setDate(this.model.toDate)),this.$to.focus(),this.fromPicker.hide(),this.toPicker.gotoDate(e))},selectToDate:function(e){this.$to&&(this.$to[0].value=this.convertDateToLocaleString(e),this.model.set("toDate",e),this.setEndRange(e),e=0&&(e=i.id)})),e||this.values.forEach((function(t){(t=t.id.toLowerCase())!==i&&t!==i.split("-")[0]||(e=t)})),e||"en"},_sanitize:function(t){return e.Utils.Strings.htmlDecode(t)}})}(DDG),function(e){var t=e.Views.Modules.Base,i="js-module--translations-outdated",s="js-module--translations-pending",a="js-module-translations--overflow";e.Views.Modules.Translations=function(e){t.call(this,e)},e.Views.Modules.Translations.prototype=$.extend({},t.prototype,{template:"translations_module",inputFocused:!1,inputState:null,updateTimeout:null,_render:function(i){t.prototype._render.call(this,i),this._cacheElems(".js-module--translations",["original","translated","footer","copy","swap","clear","tooltip","length","translatedtext"]),this.$originalText=this.$original.find("textarea"),this.$io=this.$originalText.add(this.$translatedtext),e.device.isIE&&this.$copy.hide(),this._recoverInputState(),this._updateLength(),this.bindEvents([[this.$translatedtext,"click",this._onSelect],[this.$copy,"click",this._onCopy.bind(this)],[this.$swap,"click",this._onSwap.bind(this)],[this.$clear,"click",this._onClear.bind(this)],[this.$originalText,"change keyup",this._onChange.bind(this)],[this.$originalText,"blur focus",this._onFocusChange.bind(this)],[this.model,"change:error",this._rerender],[this.$originalText,"change keyup",this._updateLength.bind(this)],[this.model,"change:translated_language_name",this._updateLength.bind(this)],[e.device,"resize",this._updateLength.bind(this)],[this.model,"change:specified_language_name",this._callService],[this.model,"change:translated_language_name",this._callService],[this.model,"change:original_language_name",this._rerender],[this.model,"change:translated_language_name",this._rerender],[this.model,"change:translated_text",this._rerender]]),this.views.originalLanguage=new e.Views.Dropdowns.TranslationSelect({prependTo:this.$original,displayName:lp("translations_module","Detect language"),model:this.model,property:"specified_language_name",includeDetectOption:!0}),this.views.translatedLanguage=new e.Views.Dropdowns.TranslationSelect({prependTo:this.$translated,property:"translated_language_name",model:this.model}),this.views.feedback=new e.Views.Feedback.FeedbackPrompt({appendTo:this.$footer,category:"translations",genericLabel:lp("translations_module","This translation is helpful"),promptText:lp("feedback form","Share Feedback"),showOnMobile:!1,showYesNo:!1}),"..."===this.model.translated_text&&(this.model.set("translated_text"," "),this.model.fireException("el"),this._callService()),this.model.force&&(this.model.set("force",!1),this.model.fireException("frc"),this._callService())},_rerender:function(){this.unbindEvents(),this._saveInputState(),t.prototype._rerender.call(this),this._updateLength()},_saveInputState:function(){this.inputState={val:this.$originalText.val(),selectionStart:this.$originalText[0].selectionStart,selectionEnd:this.$originalText[0].selectionEnd,focused:this.inputFocused}},_recoverInputState:function(){this.inputState&&(this.$originalText.val(this.inputState.val),this.inputState.focused&&(this.$originalText.select(),this.$originalText[0].setSelectionRange(this.inputState.selectionStart,this.inputState.selectionEnd)),this.inputState=null)},_onSelect:function(e){return window.getSelection().selectAllChildren(e.target),!1},_onCopy:function(){var e=function(){$("",o=i.if.call(t,t&&t.singlePlaceDisclaimerText,{hash:{},inverse:d.noop,fn:d.program(6,(function(e,t){var i,s="";return s+='"}),a),data:a}),(o||0===o)&&(n+=o),n+='X
              '})),this.DDG.templates.feedback_prompt=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="function",l=this.escapeExpression,r=this;function d(e,t){return"btn"}return o=i.if.call(t,t&&t.showYesNo,{hash:{},inverse:r.program(3,(function(e,t){var s,a="";return a+='"}),a),fn:r.program(1,(function(e,t){var s,a="";return a+='"}),a),data:a}),o||0===o?o:""})),this.DDG.templates.footer_mobile=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;return n+=''})),this.DDG.templates.footer=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;return n+='"})),this.DDG.templates.forecast_detail=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="function",l=this.escapeExpression,r=this;function d(e,t){var s,a="";return a+='"}function c(e,t){return"module__weather-warning--red"}function h(e,t){return"has-alert"}function p(e,t){return"module__temperature-units--ie11"}function u(e,t){return"module__temperature-unit--on text--primary"}function m(e,t){var s,a="";return a+='
              '+l(typeof(s=e&&e.hour)===n?s.apply(e):s)+'
              '+l(typeof(s=e&&e.temperature)===n?s.apply(e):s)+'
              ',((s=i.if.call(e,e&&e.precipProbability,{hash:{},inverse:r.noop,fn:r.program(14,f,t),data:t}))||0===s)&&(a+=s),a+="
              "}function g(e,t){return"module__forecast-icon--ie11"}function f(e,t){var i,s="";return s+=''+l(typeof(i=e&&e.precipProbability)===n?i.apply(e):i)+"%"}return o=i.with.call(t,t&&t.items,{hash:{},inverse:r.noop,fn:r.program(1,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.weatherAlert,{hash:{},inverse:r.noop,fn:r.program(2,d,t),data:t}))||0===s)&&(a+=s),a+='
              '+l(typeof(s=e&&e.summary)===n?s.apply(e):s)+'
              '+l(typeof(s=e&&e.location)===n?s.apply(e):s)+'
              ',((s=i.each.call(e,null==(s=e&&e.hours)||!1===s?s:s.labels,{hash:{},inverse:r.noop,fn:r.program(11,m,t),data:t}))||0===s)&&(a+=s),a+='
              ',((s=i.each.call(e,null==(s=e&&e.hours)||!1===s?s:s.mobileLabels,{hash:{},inverse:r.noop,fn:r.program(11,m,t),data:t}))||0===s)&&(a+=s),a+='
              ',((s=i.lp.call(e,"forecast","Humidity",{hash:{},data:t}))||0===s)&&(a+=s),a+=": "+l(typeof(s=e&&e.humidity)===n?s.apply(e):s)+'%',((s=i.lp.call(e,"forecast","Wind",{hash:{},data:t}))||0===s)&&(a+=s),a+=': '+l(typeof(s=e&&e.wind)===n?s.apply(e):s)+'',((s=i.lp.call(e,"expand_text","Show More",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),o||0===o?o:""})),this.DDG.templates.forecast_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="function",l=this.escapeExpression,r=this;function d(e,t){var s,a="";return a+='
              '+l(typeof(s=e&&e.day)===n?s.apply(e):s)+'
              '+l(typeof(s=e&&e.summary)===n?s.apply(e):s)+'
              '+l(typeof(s=e&&e.high)===n?s.apply(e):s)+'°
              '+l(typeof(s=e&&e.low)===n?s.apply(e):s)+"°
              "}function c(e,t){return"module__items-item--selected"}function h(e,t){return"module__more-at--not-en"}return o=i.with.call(t,t&&t.items,{hash:{},inverse:r.noop,fn:r.program(1,(function(e,t){var s,a="";return a+='
              ',((s=i.each.call(e,e&&e.days,{hash:{},inverse:r.noop,fn:r.program(2,d,t),data:t}))||0===s)&&(a+=s),a+='

              ',((s=i.moreAt.call(e,e&&e.moreAtUrl,"Dark Sky",{hash:{hideMoreAtText:1,className:"zci__more-at tx-clr--slate-light js-forecast-module-detail-moreat"},data:t}))||0===s)&&(a+=s),a+='

              '}),a),data:a}),o||0===o?o:""})),this.DDG.templates.free_listings_badge=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},''})),this.DDG.templates.free_listings_divider=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
              '})),this.DDG.templates.free_listings_tooltip=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+="",((o=(i=this.merge(i,e.helpers)).l.call(t,"Items are ranked based on relevance to your search terms and are delivered through Microsoft's Ad Network. Clicks lead directly to merchant landing pages and unlike ads, DuckDuckGo is not compensated for these results.",{hash:{},data:a}))||0===o)&&(n+=o),n+=""})),this.DDG.templates.images_module_thumbnails=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n=this,l="function",r=this.escapeExpression;function d(e,t){return"is-last"}return o=i.each.call(t,t,{hash:{},inverse:n.noop,fn:n.program(1,(function(e,t){var s,a="";return a+=''}),a),data:a}),o||0===o?o:""})),this.DDG.templates.images_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;return n+='
              ',o=i.if.call(t,t&&t.icon_template,{hash:{},inverse:d.program(5,(function(e,t){var s,a="";return a+="",((s=i.l.call(e,"More Images",{hash:{},data:t}))||0===s)&&(a+=s),a+=" ",((s=i.l.call(e,"for",{hash:{},data:t}))||0===s)&&(a+=s),a+=" "+r(typeof(s=e&&e.query)===l?s.apply(e):s)+""}),a),fn:d.program(3,(function(e,t){var s,a="";return a+="",((s=i.l.call(e,"More Images",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+='
              ',((o=i.l.call(t,"More Images",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.keep_extension_alert=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="",l=this;return n+='
              "})),this.DDG.templates.keep_extension_modal=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+="'})),this.DDG.templates.lyrics_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;return n+='
              '+r(typeof(o=t&&t.songTitle)===l?o.apply(t):o)+'
              '+r(typeof(o=t&&t.artist)===l?o.apply(t):o)+"
              ",o=i.if.call(t,t&&t.isExplicit,{hash:{},inverse:d.noop,fn:d.program(1,(function(e,t){var s,a="";return a+='',((s=i.lp.call(e,"lyrics_module","Explicit",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+='
              ',((o=typeof(o=t&&t.lyrics)===l?o.apply(t):o)||0===o)&&(n+=o),n+='
              "})),this.DDG.templates.map_sidebar_footer=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="";return n+=''})),this.DDG.templates.map_sidebar_mobile=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
              \x3c!-- Searchbar gets appended here --\x3e
              Show Map
              '})),this.DDG.templates.map_sidebar=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
              '})),this.DDG.templates.map_type_select=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="",l=this;return n+='"})),this.DDG.templates.mapkit_map=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="",l=this;return n+='
              ',o=i.if.call(t,t&&t.isFrozen,{hash:{},inverse:l.noop,fn:l.program(5,(function(e,t){var s,a="";return a+='
              ',((s=i.l.call(e,"Open Map",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.mapkit_marker=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression;return n+='
              ',o=i.if.call(t,t&&t.number,{hash:{},inverse:this.noop,fn:this.program(1,(function(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.number)===l?i.apply(e):i)+""}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.mapkit_position_picker=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
              '})),this.DDG.templates.mapkit_static_map=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r=this.escapeExpression,d="function";return n+='
              ',o=i.if.call(t,t&&t.showCTA,{hash:{},inverse:l.noop,fn:l.program(3,(function(e,t){var s,a="";return a+='',((s=i.l.call(e,"Open Map",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.mapkit_user_location_control=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='
              "})),this.DDG.templates.mapkit_user_location=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
              '})),this.DDG.templates.maps_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="";return n+='
              '})),this.DDG.templates.module_container=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression;return n+='
              '})),this.DDG.templates.module_image_header=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var s,a="";return a+=''}function h(e,t){var i;return r(typeof(i=e&&e.imageIAURL)===l?i.apply(e):i)}function p(e,t){var i;return r(typeof(i=e&&e.imageURL)===l?i.apply(e):i)}function u(e,t){var i,s="";return s+='title="'+r(typeof(i=e&&e.morePhotosText)===l?i.apply(e):i)+'"'}function m(e,t){var i,s="";return s+=''}function g(e,t){var s;return(s=i.unless.call(e,e&&e.isMapExpanded,{hash:{},inverse:d.noop,fn:d.program(14,f,t),data:t}))||0===s?s:""}function f(e,t){var s,a="";return a+='
              ',((s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[0]),className:"module__header__image--big module__header__image--blur"},data:t}))||0===s)&&(a+=s),a+='',((s=i.l.call(e,"No More Photos",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}function _(e,t){var s;return(s=i.if.call(e,null==(s=e&&e.layout)||!1===s?s:s.layout_4,{hash:{},inverse:d.program(24,k,t),fn:d.program(17,v,t),data:t}))||0===s?s:""}function v(e,t){var s,a="";return a+='
              ',((s=i.if.call(e,null==(s=null==(s=e&&e.images)||!1===s?s:s[1])||!1===s?s:s.url,{hash:{},inverse:d.noop,fn:d.program(18,y,t),data:t}))||0===s)&&(a+=s),a+='
              ',((s=i.if.call(e,null==(s=null==(s=e&&e.images)||!1===s?s:s[2])||!1===s?s:s.url,{hash:{},inverse:d.noop,fn:d.program(20,b,t),data:t}))||0===s)&&(a+=s),a+='
              ',((s=i.if.call(e,null==(s=null==(s=e&&e.images)||!1===s?s:s[3])||!1===s?s:s.url,{hash:{},inverse:d.noop,fn:d.program(22,w,t),data:t}))||0===s)&&(a+=s),a+="
              "}function y(e,t){var s;return(s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[1]),className:"module__header__image--small"},data:t}))||0===s?s:""}function b(e,t){var s;return(s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[2]),className:"module__header__image--small"},data:t}))||0===s?s:""}function w(e,t){var s;return(s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[3]),className:"module__header__image--big"},data:t}))||0===s?s:""}function k(e,t){var s,a="";return((s=i.if.call(e,null==(s=null==(s=e&&e.images)||!1===s?s:s[1])||!1===s?s:s.url,{hash:{},inverse:d.noop,fn:d.program(25,x,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,null==(s=null==(s=e&&e.images)||!1===s?s:s[2])||!1===s?s:s.url,{hash:{},inverse:d.noop,fn:d.program(27,S,t),data:t}))||0===s)&&(a+=s),a}function x(e,t){var s,a="";return a+='
              ',((s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[1]),className:"module__header__image--big"},data:t}))||0===s)&&(a+=s),a+="
              "}function S(e,t){var s,a="";return a+='
              ',((s=i.include.call(e,"module_image_header_item",{hash:{image:(s=e&&e.images,null==s||!1===s?s:s[2]),className:"module__header__image--big"},data:t}))||0===s)&&(a+=s),a+="
              "}function D(e,t){var s;return(s=i.unless.call(e,e&&e.hideTitle,{hash:{},inverse:d.noop,fn:d.program(30,M,t),data:t}))||0===s?s:""}function M(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.morePhotosText)===l?i.apply(e):i)+""}return n+='
              ',o=i.if.call(t,t&&t.layout,{hash:{},inverse:d.noop,fn:d.program(3,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.isMapExpanded,{hash:{},inverse:d.program(11,m,t),fn:d.program(4,c,t),data:t}))||0===s)&&(a+=s),a+='
              '}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.module_placeholder=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='
              '})),this.DDG.templates.no_directions_results=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression;return n+='
              "})),this.DDG.templates.no_map_results=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression;return n+='

              ',((o=i.lp.call(t,"noresults","No %s found for %s%s%s.",t&&t.resultType,"",t&&t.query,"",{hash:{},data:a}))||0===o)&&(n+=o),n+='

              ',((o=i.lp.call(t,"noresults","Suggestions:",{hash:{},data:a}))||0===o)&&(n+=o),n+='

              • ',((o=i.lp.call(t,"noresults","Make sure all words are spelled correctly.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",((o=i.lp.call(t,"noresults","Try different keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",((o=i.lp.call(t,"noresults","Try more general keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",((o=i.lp.call(t,"noresults","Try fewer keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+='

              ',((o=i.lp.call(t,"noresults","Show Web Results",{hash:{},data:a}))||0===o)&&(n+=o),n+="

              "})),this.DDG.templates.no_more_results=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='

              ',((o=(i=this.merge(i,e.helpers)).lp.call(t,"noresults","No more results found for %s%s%s.","",t&&t.query,"",{hash:{},data:a}))||0===o)&&(n+=o),n+='

              ',((o=i.lp.call(t,"noresults","Suggestions:",{hash:{},data:a}))||0===o)&&(n+=o),n+='

              • ',((o=i.lp.call(t,"noresults","Make sure all words are spelled correctly.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",((o=i.lp.call(t,"noresults","Try different keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",((o=i.lp.call(t,"noresults","Try more general keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",((o=i.lp.call(t,"noresults","Try fewer keywords.",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.no_results=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression,r=this;function d(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"noresults","Show Web Results",{hash:{},data:t}))||0===s)&&(a+=s),a+="

              "}function c(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"noresults","Suggestions:",{hash:{},data:t}))||0===s)&&(a+=s),a+='

              • ',((s=i.lp.call(e,"noresults","Make sure all words are spelled correctly.",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              • ",((s=i.lp.call(e,"noresults","Try different keywords.",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              • ",((s=i.lp.call(e,"noresults","Try more general keywords.",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              • ",((s=i.lp.call(e,"noresults","Try fewer keywords.",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.if.call(e,e&&e.showRetryMessage,{hash:{},inverse:r.noop,fn:r.program(9,h,t),data:t}))||0===s)&&(a+=s),a}function h(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"noresults","%sClick here%s to try again, if you think there should be results for this search.",'',"",{hash:{},data:t}))||0===s)&&(a+=s),a+="

              "}return n+='

              ',((o=i.lp.call(t,"noresults","No %s found for %s%s%s.",t&&t.resultType,"",t&&t.query,"",{hash:{},data:a}))||0===o)&&(n+=o),n+="

              ",o=i.if.call(t,t&&t.resetFilters,{hash:{},inverse:r.program(5,(function(e,t){var s;return(s=i.if.call(e,e&&e.showWebLink,{hash:{},inverse:r.program(8,c,t),fn:r.program(6,d,t),data:t}))||0===s?s:""}),a),fn:r.program(3,(function(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"noresults","%sReset filters %s",'',"",{hash:{},data:t}))||0===s)&&(a+=s),a+="

              "}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.open_in_app=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='"})),this.DDG.templates.place_detail=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var s;return(s=i.renderStars.call(e,e&&e.ratingClass,{hash:{},data:t}))||0===s?s:""}function h(e,t){return'target="_blank" rel="noopener"'}function p(e,t){return" · "}function u(e,t){var s,a="";return((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textStatus,{hash:{},inverse:d.noop,fn:d.program(26,m,t),data:t}))||0===s)&&(a+=s),a+=r(typeof(s=e&&e.categories)===l?s.apply(e):s)}function m(e,t){return' · '}function g(e,t){var i,s="";return s+='

              '+r(typeof(i=e&&e.description)===l?i.apply(e):i)+"

              "}function f(e,t){return' target="_blank" rel="noopener"'}function _(e,t){var s,a="";return a+='
            • ',((s=i.lp.call(e,"maps_places","Call",{hash:{},data:t}))||0===s)&&(a+=s),a+="
            • "}function v(e,t){var s;return(s=i.unless.call(e,e&&e.showAttribution,{hash:{},inverse:d.noop,fn:d.program(44,y,t),data:t}))||0===s?s:""}function y(e,t){var s,a="";return a+='

              "}function b(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"maps_places","Hours",{hash:{},data:t}))||0===s)&&(a+=s),a+=': '+r(typeof(s=null==(s=e&&e.hoursStatus)||!1===s?s:s.textStatus)===l?s.apply(e):s)+"",((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textHour,{hash:{},inverse:d.noop,fn:d.program(18,p,t),data:t}))||0===s)&&(a+=s),a+='',((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textHour,{hash:{},inverse:d.noop,fn:d.program(47,w,t),data:t}))||0===s)&&(a+=s),a+=' 

              '}function w(e,t){var i,s="";return s+=r(typeof(i=null==(i=e&&e.hoursStatus)||!1===i?i:i.textHour)===l?i.apply(e):i)+" "}function k(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"maps_places","Address",{hash:{},data:t}))||0===s)&&(a+=s),a+=": "+r(typeof(s=e&&e.address)===l?s.apply(e):s)+"

              "}function x(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"maps_places","Phone",{hash:{},data:t}))||0===s)&&(a+=s),a+=': '+r(typeof(s=e&&e.displayPhone)===l?s.apply(e):s)+"

              "}function S(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"maps_places","Menu",{hash:{},data:t}))||0===s)&&(a+=s),a+=': "+r(typeof(s=e&&e.viewOnExternalServiceText)===l?s.apply(e):s)+"

              "}function D(e,t){var s,a="";return((s=i.if.call(e,e&&e.showAttribution,{hash:{},inverse:d.noop,fn:d.program(56,M,t),data:t}))||0===s)&&(a+=s),a+=" "}function M(e,t){var s,a="";return a+='

              ',((s=i.favicon.call(e,e&&e.url,{hash:{},data:t}))||0===s)&&(a+=s),a+=" "+r(typeof(s=e&&e.moreAtExternalServiceText)===l?s.apply(e):s)+"

              "}function C(e,t){var s;return(s=i.unless.call(e,e&&e.expanded,{hash:{},inverse:d.noop,fn:d.program(58,T,t),data:t}))||0===s?s:""}function T(e,t){return" is-hidden"}function L(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"maps_places","Hours",{hash:{},data:t}))||0===s)&&(a+=s),a+=': '+r(typeof(s=null==(s=e&&e.hoursStatus)||!1===s?s:s.textStatus)===l?s.apply(e):s)+"",((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textHour,{hash:{},inverse:d.noop,fn:d.program(18,p,t),data:t}))||0===s)&&(a+=s),a+='',((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textHour,{hash:{},inverse:d.noop,fn:d.program(64,I,t),data:t}))||0===s)&&(a+=s),a+=' 

              '}function I(e,t){var i;return r(typeof(i=null==(i=e&&e.hoursStatus)||!1===i?i:i.textHour)===l?i.apply(e):i)}function $(e,t,s){var a,o="";return o+='

              ',((a=i.if.call(e,e&&e.ratingImage,{hash:{},inverse:d.program(80,j,t),fn:d.program(78,O,t),data:t}))||0===a)&&(o+=a),o+=''+r(typeof(a=e&&e.formattedDate)===l?a.apply(e):a)+'

              '+r(typeof(a=e&&e.excerpt)===l?a.apply(e):a)+' "+r(typeof(a=s&&s.moreOnExternalServiceText)===l?a.apply(e):a)+"

              "}function E(e,t){return'class="review__user__url--fallback"'}function A(e,t){var i;return r(typeof(i=null==(i=e&&e.user)||!1===i?i:i.url)===l?i.apply(e):i)}function P(e,t){var i;return r(typeof(i=e&&e.url)===l?i.apply(e):i)}function R(e,t){return' target="_blank" rel="noopener" '}function V(e,t){var s,a="";return a+=''}function O(e,t){var s="";return s+=''}function j(e,t){var s,a="";return a+=" ",((s=i.if.call(e,e&&e.ratingClass,{hash:{},inverse:d.noop,fn:d.program(12,c,t),data:t}))||0===s)&&(a+=s),a}function H(e,t){var i,s="";return s+='"}return n+='

              ',o=i.if.call(t,t&&t.isMapExpanded,{hash:{},inverse:d.program(7,(function(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.name)===l?i.apply(e):i)+""}),a),fn:d.program(5,(function(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.name)===l?i.apply(e):i)+""}),a),data:a}),(o||0===o)&&(n+=o),n+='

              ',o=i.if.call(t,t&&t.ratingImage,{hash:{},inverse:d.program(11,(function(e,t){var s;return(s=i.if.call(e,e&&e.ratingClass,{hash:{},inverse:d.noop,fn:d.program(12,c,t),data:t}))||0===s?s:""}),a),fn:d.program(9,(function(e,t){var s="";return s+=''}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.numberOfReviews,{hash:{},inverse:d.noop,fn:d.program(14,(function(e,t){var s,a="";return a+='"+r(typeof(s=e&&e.source)===l?s.apply(e):s)+" ("+r(typeof(s=e&&e.numberOfReviews)===l?s.apply(e):s)+")"}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.priceSymbol,{hash:{},inverse:d.noop,fn:d.program(17,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.numberOfReviews,{hash:{},inverse:d.noop,fn:d.program(18,p,t),data:t}))||0===s)&&(a+=s),a+=''+r(typeof(s=e&&e.priceSymbol)===l?s.apply(e):s)+""}),a),data:a}),(o||0===o)&&(n+=o),n+='

              ',o=i.if.call(t,null==(o=t&&t.hoursStatus)||!1===o?o:o.textStatus,{hash:{},inverse:d.noop,fn:d.program(20,(function(e,t){var i,s="";return s+=''+r(typeof(i=null==(i=e&&e.hoursStatus)||!1===i?i:i.textStatus)===l?i.apply(e):i)+""}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.showSubtitlePlaceholder,{hash:{},inverse:d.program(24,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.categories,{hash:{},inverse:d.noop,fn:d.program(25,u,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.description,{hash:{},inverse:d.noop,fn:d.program(28,g,t),data:t}))||0===s)&&(a+=s),a}),a),fn:d.program(22,(function(e,t){return'

              '}),a),data:a}),(o||0===o)&&(n+=o),n+="

              ",o=i.if.call(t,t&&t.showTabs,{hash:{},inverse:d.noop,fn:d.program(30,(function(e,t){var s,a="";return a+='
              ',((s=i.lp.call(e,"maps_places","Overview",{hash:{},data:t}))||0===s)&&(a+=s),a+='
              ',((s=i.lp.call(e,"maps_places","Reviews",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),n+='
                ',o=i.if.call(t,t&&t.website,{hash:{},inverse:d.noop,fn:d.program(34,(function(e,t){var s,a="";return a+='
              • ',((s=i.lp.call(e,"maps_places","Website",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              • "}),a),data:a}),(o||0===o)&&(n+=o),n+='
              • ',((o=i.lp.call(t,"maps_places","Directions",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",o=i.if.call(t,t&&t.showMapCta,{hash:{},inverse:d.program(39,(function(e,t){var s;return(s=i.if.call(e,e&&e.phone,{hash:{},inverse:d.noop,fn:d.program(40,_,t),data:t}))||0===s?s:""}),a),fn:d.program(37,(function(e,t){var s,a="";return a+='
              • ',((s=i.l.call(e,"Map",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              • "}),a),data:a}),(o||0===o)&&(n+=o),n+="
              ",o=i.if.call(t,t&&t.isMobile,{hash:{},inverse:d.noop,fn:d.program(42,(function(e,t){var s,a="";return a+='
              ',((s=i.if.call(e,e&&e.url,{hash:{},inverse:d.noop,fn:d.program(43,v,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.hoursToday,{hash:{},inverse:d.noop,fn:d.program(46,b,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.address,{hash:{},inverse:d.noop,fn:d.program(49,k,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.phone,{hash:{},inverse:d.noop,fn:d.program(51,x,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.menuURL,{hash:{},inverse:d.noop,fn:d.program(53,S,t),data:t}))||0===s)&&(a+=s),((s=i.unless.call(e,e&&e.reviews,{hash:{},inverse:d.noop,fn:d.program(55,D,t),data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),n+='
              ',((o=i.if.call(t,t&&t.url,{hash:{},inverse:d.noop,fn:d.program(43,v,a),data:a}))||0===o)&&(n+=o),o=i.unless.call(t,t&&t.isMobile,{hash:{},inverse:d.noop,fn:d.program(62,(function(e,t){var s,a="";return a+='
              ',((s=i.if.call(e,e&&e.address,{hash:{},inverse:d.noop,fn:d.program(49,k,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.phone,{hash:{},inverse:d.noop,fn:d.program(51,x,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.hoursToday,{hash:{},inverse:d.noop,fn:d.program(63,L,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.menuURL,{hash:{},inverse:d.noop,fn:d.program(53,S,t),data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.reviews,{hash:{},inverse:d.noop,fn:d.program(66,(function(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"maps_places","What people say:",{hash:{},data:t}))||0===s)&&(a+=s),a+='

              ',((s=i.each.call(e,e&&e.reviews,{hash:{},inverse:d.noop,fn:d.programWithDepth(67,$,t,e),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.if.call(e,e&&e.reviewsURL,{hash:{},inverse:d.noop,fn:d.program(82,H,t),data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.showAttribution,{hash:{},inverse:d.noop,fn:d.program(84,(function(e,t){var s,a="";return a+='

              ",((s=i.favicon.call(e,e&&e.url,{hash:{},data:t}))||0===s)&&(a+=s),a+=" "+r(typeof(s=e&&e.moreAtExternalServiceText)===l?s.apply(e):s)+"

              "}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.place_header=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.morePhotosText)===l?i.apply(e):i)+""}return n+='
              ',o=i.if.call(t,t&&t.image,{hash:{},inverse:d.noop,fn:d.program(3,(function(e,t){var s,a="";return a+='',((s=i.unless.call(e,e&&e.isScrapedImage,{hash:{},inverse:d.noop,fn:d.program(4,c,t),data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+='
              '})),this.DDG.templates.place_hours=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){return"place-hours__item--current"}function h(e,t){var i;return r(typeof(i=e&&e.hours)===l?i.apply(e):i)}function p(e,t){var s;return(s=i.l.call(e,"Closed",{hash:{},data:t}))||0===s?s:""}return n+='"})),this.DDG.templates.place_list_item=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression,r="function",d=this;function c(e,t){var s="";return s+=''}function h(e,t){var s;return(s=i.if.call(e,e&&e.ratingClass,{hash:{},inverse:d.noop,fn:d.program(9,p,t),data:t}))||0===s?s:""}function p(e,t){var s;return(s=i.renderStars.call(e,e&&e.ratingClass,{hash:{},data:t}))||0===s?s:""}function u(e,t){var i,s="";return s+=l(typeof(i=e&&e.source)===r?i.apply(e):i)+" ("+l(typeof(i=e&&e.numberOfReviews)===r?i.apply(e):i)+")"}function m(e,t){var s,a="";return((s=i.if.call(e,e&&e.priceSymbol,{hash:{},inverse:d.noop,fn:d.program(14,g,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.categories,{hash:{},inverse:d.noop,fn:d.program(17,_,t),data:t}))||0===s)&&(a+=s),a}function g(e,t){var s,a="";return((s=i.if.call(e,e&&e.numberOfReviews,{hash:{},inverse:d.noop,fn:d.program(15,f,t),data:t}))||0===s)&&(a+=s),a+=l(typeof(s=e&&e.priceSymbol)===r?s.apply(e):s)}function f(e,t){return" · "}function _(e,t){var i,s="";return s+=" · "+l(typeof(i=e&&e.categories)===r?i.apply(e):i)}function v(e,t){var s,a="";return a+='
            • ',((s=i.if.call(e,e&&e.priceSymbol,{hash:{},inverse:d.noop,fn:d.program(21,y,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.categories,{hash:{},inverse:d.noop,fn:d.program(23,b,t),data:t}))||0===s)&&(a+=s),a+="
            • "}function y(e,t){var i;return l(typeof(i=e&&e.priceSymbol)===r?i.apply(e):i)}function b(e,t){var s,a="";return((s=i.if.call(e,e&&e.priceSymbol,{hash:{},inverse:d.noop,fn:d.program(15,f,t),data:t}))||0===s)&&(a+=s),a+=l(typeof(s=e&&e.categories)===r?s.apply(e):s)}function w(e,t){var i,s="";return s+=" · "+l(typeof(i=e&&e.distanceStr)===r?i.apply(e):i)}function k(e,t){var i,s="";return s+=" · "+l(typeof(i=null==(i=e&&e.hoursStatus)||!1===i?i:i.textHour)===r?i.apply(e):i)}return n+='
              ',o=i.if.call(t,t&&t.image,{hash:{},inverse:d.noop,fn:d.program(1,(function(e,t){var s="";return s+='
              '}),a),data:a}),(o||0===o)&&(n+=o),n+='

              ',o=i.if.call(t,t&&t.number,{hash:{},inverse:d.noop,fn:d.program(3,(function(e,t){var i,s="";return s+=l(typeof(i=e&&e.number)===r?i.apply(e):i)+". "}),a),data:a}),(o||0===o)&&(n+=o),n+=l(typeof(o=t&&t.name)===r?o.apply(t):o)+"

              ",o=i.if.call(t,t&&t.rating,{hash:{},inverse:d.noop,fn:d.program(5,(function(e,t){var s,a="";return a+='

              ',((s=i.if.call(e,e&&e.ratingImage,{hash:{},inverse:d.program(8,h,t),fn:d.program(6,c,t),data:t}))||0===s)&&(a+=s),a+='',((s=i.if.call(e,e&&e.numberOfReviews,{hash:{},inverse:d.noop,fn:d.program(11,u,t),data:t}))||0===s)&&(a+=s),((s=i.unless.call(e,e&&e.showPriceCategoryNewLine,{hash:{},inverse:d.noop,fn:d.program(13,m,t),data:t}))||0===s)&&(a+=s),a+="

              "}),a),data:a}),(o||0===o)&&(n+=o),n+='
                ',o=i.if.call(t,t&&t.showPriceCategoryNewLine,{hash:{},inverse:d.noop,fn:d.program(19,(function(e,t){var s;return(s=i.if.call(e,e&&e.hasPriceOrCategory,{hash:{},inverse:d.noop,fn:d.program(20,v,t),data:t}))||0===s?s:""}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.shortAddress,{hash:{},inverse:d.noop,fn:d.program(25,(function(e,t){var s,a="";return a+='
              • '+l(typeof(s=e&&e.shortAddress)===r?s.apply(e):s),((s=i.if.call(e,e&&e.distanceStr,{hash:{},inverse:d.noop,fn:d.program(26,w,t),data:t}))||0===s)&&(a+=s),a+="
              • "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.addressLine2,{hash:{},inverse:d.noop,fn:d.program(28,(function(e,t){var i,s="";return s+='
              • '+l(typeof(i=e&&e.addressLine2)===r?i.apply(e):i)+"
              • "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.hoursToday,{hash:{},inverse:d.noop,fn:d.program(30,(function(e,t){var s,a="";return a+='
              • '+l(typeof(s=null==(s=e&&e.hoursStatus)||!1===s?s:s.textStatus)===r?s.apply(e):s)+"",((s=i.if.call(e,null==(s=e&&e.hoursStatus)||!1===s?s:s.textHour,{hash:{},inverse:d.noop,fn:d.program(31,k,t),data:t}))||0===s)&&(a+=s),a+="
              • "}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.place_snippet=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var i,s="";return s+=''+r(typeof(i=e&&e.title)===l?i.apply(e):i)+""}function h(e,t){var i;return r(typeof(i=e&&e.title)===l?i.apply(e):i)}return n+='

              '+r(typeof(o=t&&t.name)===l?o.apply(t):o)+""+r(typeof(o=t&&t.infoType)===l?o.apply(t):o)+"

              "})),this.DDG.templates.places_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r=this.escapeExpression;return n+='
              ',((o=i.if.call(t,t&&t.isSingle,{hash:{},inverse:l.noop,fn:l.program(5,(function(e,t){return'
              >
              Show More
              '}),a),data:a}))||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.places_multiple=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='
              ',o=(i=this.merge(i,e.helpers)).if.call(t,t&&t.isMobile,{hash:{},inverse:this.program(3,(function(e,t){var s,a="";return a+='
              ',((s=i.l.call(e,"More Places",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}),a),fn:this.program(1,(function(e,t){var s,a="";return a+='
              >
              ',((s=i.l.call(e,"More Places",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.places_single_map=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='
              ',((o=(i=this.merge(i,e.helpers)).if.call(t,t&&t.showPlaceholder,{hash:{},inverse:this.noop,fn:this.program(1,(function(e,t){return'
              '}),a),data:a}))||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.places_single=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},'
              '})),this.DDG.templates.react_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="";return n+='
              '})),this.DDG.templates.region_filter_modal_items=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r="function",d=this.escapeExpression;function c(e,t){return''}function h(e,t){return"is-selected"}return o=i.if.call(t,t&&t.showListHeader,{hash:{},inverse:l.noop,fn:l.program(1,(function(e,t){var s,a="";return a+='"}),a),data:a}),(o||0===o)&&(n+=o),o=i.each.call(t,t&&t.regions,{hash:{},inverse:l.noop,fn:l.program(3,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.showDivider,{hash:{},inverse:l.noop,fn:l.program(4,c,t),data:t}))||0===s)&&(a+=s),a+='"}),a),data:a}),(o||0===o)&&(n+=o),n})),this.DDG.templates.region_filter_modal=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this;function r(e,t){var s,a="";return a+='',((s=i.l.call(e,"Clear All",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}return n+=''})),this.DDG.templates.region_filter=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r=this.escapeExpression;function d(e,t){return"has-inactive-region"}function c(e,t){return"is-on"}return n+='"})),this.DDG.templates.related_searches_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var i,s="";return s+='"}return((o=i.if.call(t,t&&t.isAtBottom,{hash:{},inverse:d.program(3,(function(e,t){return'"}function D(e,t){var s,a="";return a+="
              ",((s=i.lp.call(e,"Sports module","OT",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}function M(e,t){var s;return(s=i.each.call(e,null==(s=e&&e.game)||!1===s?s:s.overtimePeriods,{hash:{},inverse:r.noop,fn:r.program(31,C,t),data:t}))||0===s?s:""}function C(e,t){var s,a="";return a+="
              ",((s=i.lp.call(e,"Sports module","OT%s",e,{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}function T(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.scoring)||!1===i?i:i[0])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function L(e,t){return" — "}function I(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.scoring)||!1===i?i:i[1])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function $(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.scoring)||!1===i?i:i[2])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function E(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.scoring)||!1===i?i:i[3])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function A(e,t){var s,a="";return a+="
              ",((s=i.if.call(e,e&&e.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(44,P,t),data:t}))||0===s)&&(a+=s),a+="
              "}function P(e,t){var i,s="";return s+=" "+l(typeof(i=e&&e.points)===n?i.apply(e):i)+" "}function R(e,t){var i,s="";return s+="
              "+l(typeof(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.points)===n?i.apply(e):i)+"
              "}function V(e,t){var i,s="";return s+="
              "+l(typeof(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.away)||!1===i?i:i.points)===n?i.apply(e):i)+"
              "}function O(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.scoring)||!1===i?i:i[0])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function j(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.scoring)||!1===i?i:i[1])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function H(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.scoring)||!1===i?i:i[2])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function G(e,t){var i,s="";return s+=" "+l(typeof(i=null==(i=null==(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.scoring)||!1===i?i:i[3])||!1===i?i:i.points)===n?i.apply(e):i)+" "}function F(e,t){var i,s="";return s+="
              "+l(typeof(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.points)===n?i.apply(e):i)+"
              "}function U(e,t){var i,s="";return s+="
              "+l(typeof(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.points)===n?i.apply(e):i)+""}function B(e,t){return"game-card--multiple-overtimes"}function N(e,t){var s,a="";return a+="
              ",((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.hasSuspendedStatus,{hash:{},inverse:r.program(7,p,t),fn:r.program(5,h,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.belongsToTournament,{hash:{},inverse:r.noop,fn:r.program(9,u,t),data:t}))||0===s)&&(a+=s),a+=l(typeof(s=null==(s=e&&e.game)||!1===s?s:s.timeAndStatus)===n?s.apply(e):s)+'
              '}function q(e,t){var s,a="";return a+="
              ",((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.belongsToTournament,{hash:{},inverse:r.noop,fn:r.program(68,z,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.hasSuspendedStatus,{hash:{},inverse:r.program(72,Y,t),fn:r.program(70,W,t),data:t}))||0===s)&&(a+=s),a+='
              1
              2
              3
              4
              ",((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.hasSingleOvertime,{hash:{},inverse:r.noop,fn:r.program(28,D,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,null==(s=e&&e.game)||!1===s?s:s.hasMultipleOvertimes,{hash:{},inverse:r.noop,fn:r.program(30,M,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.lp.call(e,"Sports module","Total",{hash:{},data:t}))||0===s)&&(a+=s),a+='
              ',((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.scoring)||!1===s?s:s[0])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(33,T,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.scoring)||!1===s?s:s[1])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(37,I,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.scoring)||!1===s?s:s[2])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(39,$,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.scoring)||!1===s?s:s[3])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(41,E,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.each.call(e,null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.overtimeScoring,{hash:{},inverse:r.noop,fn:r.program(43,A,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.away)||!1===s?s:s.winner,{hash:{},inverse:r.program(48,V,t),fn:r.program(46,R,t),data:t}))||0===s)&&(a+=s),a+='
              ',((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.scoring)||!1===s?s:s[0])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(50,O,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.scoring)||!1===s?s:s[1])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(52,j,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.scoring)||!1===s?s:s[2])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(54,H,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.if.call(e,null==(s=null==(s=null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.scoring)||!1===s?s:s[3])||!1===s?s:s.points,{hash:{},inverse:r.program(35,L,t),fn:r.program(56,G,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.each.call(e,null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.overtimeScoring,{hash:{},inverse:r.noop,fn:r.program(43,A,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,null==(s=null==(s=null==(s=e&&e.game)||!1===s?s:s.score)||!1===s?s:s.home)||!1===s?s:s.winner,{hash:{},inverse:r.program(75,K,t),fn:r.program(58,F,t),data:t}))||0===s)&&(a+=s),a+="
              "}function z(e,t){var s,a="";return a+="",((s=i.lp.call(e,"Sports module","Game %s",null==(s=e&&e.game)||!1===s?s:s.numberWithinSeries,{hash:{},data:t}))||0===s)&&(a+=s),a+=" • "}function W(e,t){var i,s="";return s+=''+l(typeof(i=null==(i=e&&e.game)||!1===i?i:i.statusFormatted)===n?i.apply(e):i)+""}function Y(e,t){var s,a="";return a+='',((s=i.ifEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.status,"halftime",{hash:{},inverse:r.program(23,k,t),fn:r.program(21,w,t),data:t}))||0===s)&&(a+=s),a+=""}function X(e,t){return"game-card__time--active"}function K(e,t){var i,s="";return s+="
              "+l(typeof(i=null==(i=null==(i=null==(i=e&&e.game)||!1===i?i:i.score)||!1===i?i:i.home)||!1===i?i:i.points)===n?i.apply(e):i)+"
              "}return o=i.if.call(t,t&&t.isMobile,{hash:{},inverse:r.program(62,(function(e,t){var s,a="";return a+="
              ",((s=i.ifEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.simpleStatus,"upcoming",{hash:{},inverse:r.program(67,q,t),fn:r.program(65,N,t),data:t}))||0===s)&&(a+=s),a+="
              "}),a),fn:r.program(1,(function(e,t){var s,a="";return a+="
              ",((s=i.ifEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.simpleStatus,"upcoming",{hash:{},inverse:r.noop,fn:r.program(2,d,t),data:t}))||0===s)&&(a+=s),((s=i.ifEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.simpleStatus,"active",{hash:{},inverse:r.noop,fn:r.program(12,g,t),data:t}))||0===s)&&(a+=s),((s=i.ifEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.simpleStatus,"passed",{hash:{},inverse:r.noop,fn:r.program(25,x,t),data:t}))||0===s)&&(a+=s),a+='
              ',((s=i.ifNotEquals.call(e,null==(s=e&&e.game)||!1===s?s:s.simpleStatus,"upcoming",{hash:{},inverse:r.noop,fn:r.program(27,S,t),data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),o||0===o?o:""})),this.DDG.templates.sports_game=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},"
              "})),this.DDG.templates.sports_league=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="",l=this;return n+="
              ",o=i.if.call(t,t&&t.hasLeagueScheduleTab,{hash:{},inverse:l.noop,fn:l.program(1,(function(e,t){var s,a="";return a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+="
              ",((o=i.if.call(t,t&&t.hasWeekSelector,{hash:{},inverse:l.noop,fn:l.program(3,(function(e,t){return"
              "}),a),data:a}))||0===o)&&(n+=o),n+="
              ",((o=i.if.call(t,t&&t.hasLeagueScheduleTab,{hash:{},inverse:l.noop,fn:l.program(5,(function(e,t){return""}),a),data:a}))||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.sports_matchup_table=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r="function",d=this.escapeExpression;function c(e,t){var s,a="";return a+="
              "+d(typeof(s=e&&e.title)===r?s.apply(e):s)+"
              "}function h(e,t){return"data-hide-row-on-collapse"}function p(e,t){var s,a="";return a+="
              '+d(typeof(s=null==(s=e&&e.away_team)||!1===s?s:s.name)===r?s.apply(e):s)+' logo'+d(typeof(s=null==(s=e&&e.away_team)||!1===s?s:s.name)===r?s.apply(e):s)+'
              ',((s=i.ifNotEquals.call(e,e&&e.simpleStatus,"upcoming",{hash:{},inverse:l.program(10,g,t),fn:l.program(8,m,t),data:t}))||0===s)&&(a+=s),a+='
              ',((s=i.ifEquals.call(e,e&&e.simpleStatus,"active",{hash:{},inverse:l.noop,fn:l.program(17,y,t),data:t}))||0===s)&&(a+=s),a+='",((s=i.ifEquals.call(e,e&&e.status,"halftime",{hash:{},inverse:l.program(21,w,t),fn:l.program(19,b,t),data:t}))||0===s)&&(a+=s),a+="
              '+d(typeof(s=null==(s=e&&e.home_team)||!1===s?s:s.name)===r?s.apply(e):s)+''+d(typeof(s=null==(s=e&&e.home_team)||!1===s?s:s.name)===r?s.apply(e):s)+' logo
              ',((s=i.ifEquals.call(e,e&&e.simpleStatus,"active",{hash:{},inverse:l.noop,fn:l.program(17,y,t),data:t}))||0===s)&&(a+=s),a+="',((s=i.ifEquals.call(e,e&&e.status,"halftime",{hash:{},inverse:l.program(21,w,t),fn:l.program(19,b,t),data:t}))||0===s)&&(a+=s),a+="
              "}function u(e,t){return"tx--bold"}function m(e,t){var s,a="";return a+='
              "+d(typeof(s=null==(s=null==(s=e&&e.score)||!1===s?s:s.away)||!1===s?s:s.points)===r?s.apply(e):s)+" — "+d(typeof(s=null==(s=null==(s=e&&e.score)||!1===s?s:s.home)||!1===s?s:s.points)===r?s.apply(e):s)+"
              "}function g(e,t){var s,a="";return a+="
              ",((s=i.if.call(e,e&&e.hasSuspendedStatus,{hash:{},inverse:l.program(15,v,t),fn:l.program(13,_,t),data:t}))||0===s)&&(a+=s),a+="
              "}function f(e,t){return"tx-clr--red"}function _(e,t){var i;return d(typeof(i=e&&e.statusFormatted)===r?i.apply(e):i)}function v(e,t){return"@"}function y(e,t){return""}function b(e,t){var s,a="";return a+="",((s=i.lp.call(e,"Sports module","Halftime",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}function w(e,t){var i;return d(typeof(i=e&&e.timeAndStatus)===r?i.apply(e):i)}return n+="
              ",o=i.each.call(t,t&&t.matchUpList,{hash:{},inverse:l.noop,fn:l.program(1,(function(e,t){var s,a="";return a+="
              ",((s=i.if.call(e,e&&e.title,{hash:{},inverse:l.noop,fn:l.program(2,c,t),data:t}))||0===s)&&(a+=s),((s=i.each.call(e,e&&e.games,{hash:{},inverse:l.noop,fn:l.program(5,p,t),data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.sports_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var s,a="";return a+=" • "+r(typeof(s=e&&e.subtitle)===l?s.apply(e):s)+""}return n+="

              "+r(typeof(o=t&&t.title)===l?o.apply(t):o)+"

              ",o=i.ifEquals.call(t,t&&t.moduleType,"league",{hash:{},inverse:d.program(3,(function(e,t){var s,a="";return a+=""+r(typeof(s=e&&e.leagueName)===l?s.apply(e):s)+"",((s=i.if.call(e,e&&e.subtitle,{hash:{},inverse:d.noop,fn:d.program(4,c,t),data:t}))||0===s)&&(a+=s),a}),a),fn:d.program(1,(function(e,t){var i;return r(typeof(i=e&&e.subtitle)===l?i.apply(e):i)}),a),data:a}),(o||0===o)&&(n+=o),n+="
              ",o=i.if.call(t,t&&t.timeZone,{hash:{},inverse:d.program(8,(function(e,t){var s;return(s=i.lp.call(e,"Sports module","Times are in your local time zone",{hash:{},data:t}))||0===s?s:""}),a),fn:d.program(6,(function(e,t){var s;return(s=i.lp.call(e,"Sports module","Times are in your %slocal time zone%s",'',"",{hash:{},data:t}))||0===s?s:""}),a),data:a}),(o||0===o)&&(n+=o),n+=" • ",((o=i.lp.call(t,"Sports module","Data from Sportradar",{hash:{},data:a}))||0===o)&&(n+=o),n+='
              >
              ',((o=i.lp.call(t,"expand_text","Show More",{hash:{},data:a}))||0===o)&&(n+=o),n+='
              '})),this.DDG.templates.sports_standings_table_nba=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){return"selected"}function h(e,t){return"is-hidden"}function p(e,t){var s,a="";return a+='',((s=i.lp.call(e,"Sports module","Conf",{hash:{},data:t}))||0===s)&&(a+=s),a+='',((s=i.lp.call(e,"Sports module","Div",{hash:{},data:t}))||0===s)&&(a+=s),a+='',((s=i.lp.call(e,"Sports module","Strk",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}function u(e,t){return"dotted-border-bottom"}function m(e,t){return"bold-border-bottom"}function g(e,t){var i,s="";return s+=""+r(typeof(i=e&&e.conferenceWinLoss)===l?i.apply(e):i)+""+r(typeof(i=e&&e.divisionWinLoss)===l?i.apply(e):i)+""+r(typeof(i=e&&e.streak)===l?i.apply(e):i)+""}return n+="
              "})),this.DDG.templates.sports_team=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+="
              ",o=(i=this.merge(i,e.helpers)).if.call(t,t&&t.showControlsSection,{hash:{},inverse:this.noop,fn:this.program(1,(function(e,t){var s,a="";return a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.spread_cta=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='

              Help Spread DuckDuckGo!

              Help your friends take back their privacy.

              '})),this.DDG.templates.stocks=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var s,a="";return a+=''+r(typeof(s=e&&e.label)===l?s.apply(e):s)+'',((s=i.if.call(e,e&&e.mobileLabel,{hash:{},inverse:d.program(5,p,t),fn:d.program(3,h,t),data:t}))||0===s)&&(a+=s),a+=""}function h(e,t){var i;return r(typeof(i=e&&e.mobileLabel)===l?i.apply(e):i)}function p(e,t){var i;return r(typeof(i=e&&e.label)===l?i.apply(e):i)}function u(e,t){var s;return(s=i.lp.call(e,"Stocks module","Data provided by Refinitiv",{hash:{},data:t}))||0===s?s:""}function m(e,t){var s;return(s=i.lp.call(e,"Stocks module","Data provided by IEX Cloud",{hash:{},data:t}))||0===s?s:""}return n+='
              ',o=i.with.call(t,t&&t.data,{hash:{},inverse:d.noop,fn:d.program(1,(function(e,t){var s,a="";return a+='
              '+r(typeof(s=null==(s=null==(s=e&&e.results)||!1===s?s:s.quote)||!1===s?s:s.companyName)===l?s.apply(e):s)+'
              ',((s=i.lp.call(e,"Stocks module","As of",{hash:{},data:t}))||0===s)&&(a+=s),a+=" "+r(typeof(s=e&&e.latestUpdateString)===l?s.apply(e):s)+'
              '+r(typeof(s=e&&e.stockExchange)===l?s.apply(e):s)+": "+r(typeof(s=e&&e.symbol)===l?s.apply(e):s)+'
              '+r(typeof(s=e&&e.latestPrice)===l?s.apply(e):s)+''+r(typeof(s=null==(s=null==(s=e&&e.results)||!1===s?s:s.quote)||!1===s?s:s.currency)===l?s.apply(e):s)+'
              '+r(typeof(s=e&&e.change)===l?s.apply(e):s)+'('+r(typeof(s=e&&e.percentChangeString)===l?s.apply(e):s)+'%)
              ',((s=i.each.call(e,e&&e.timePeriods,{hash:{},inverse:d.noop,fn:d.program(2,c,t),data:t}))||0===s)&&(a+=s),a+='
              ',((s=i.lp.call(e,"Stocks module","Historical prices not available",{hash:{},data:t}))||0===s)&&(a+=s),a+='

              '+r(typeof(s=e&&e.open)===l?s.apply(e):s)+'

              '+r(typeof(s=e&&e.high)===l?s.apply(e):s)+'

              '+r(typeof(s=e&&e.low)===l?s.apply(e):s)+'

              "+r(typeof(s=e&&e.peRatio)===l?s.apply(e):s)+'

              "+r(typeof(s=e&&e.peRatio)===l?s.apply(e):s)+'

              "+r(typeof(s=e&&e.volumeString)===l?s.apply(e):s)+'

              "+r(typeof(s=e&&e.week52High)===l?s.apply(e):s)+'

              "+r(typeof(s=e&&e.week52Low)===l?s.apply(e):s)+'

              "+r(typeof(s=e&&e.marketCapString)===l?s.apply(e):s)+'

              "+r(typeof(s=e&&e.volumeString)===l?s.apply(e):s)+'

              "+r(typeof(s=e&&e.marketCapString)===l?s.apply(e):s)+'

              "+r(typeof(s=e&&e.prevClose)===l?s.apply(e):s)+'

              "}),a),data:a}),(o||0===o)&&(n+=o),n+='
              '})),this.DDG.templates.tooltip=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="",l=this;return n+=''})),this.DDG.templates.translation_select_modal=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var i,s="";return s+="modal--popout--"+r(typeof(i=e&&e.position)===l?i.apply(e):i)}function h(e,t){return"modal--popout--bottom"}function p(e,t){return'X'}function u(e,t){var s;return(s=i.if.call(e,e&&e.selected,{hash:{},inverse:d.noop,fn:d.program(15,m,t),data:t}))||0===s?s:""}function m(e,t){var s;return(s=i.if.call(e,e&&e.visible,{hash:{},inverse:d.noop,fn:d.program(16,g,t),data:t}))||0===s?s:""}function g(e,t){var i,s="";return s+='
            • '+r(typeof(i=e&&e.name)===l?i.apply(e):i)+"
            • "}function f(e,t){var s;return(s=i.if.call(e,e&&e.pinned,{hash:{},inverse:d.noop,fn:d.program(19,_,t),data:t}))||0===s?s:""}function _(e,t){var s;return(s=i.if.call(e,e&&e.visible,{hash:{},inverse:d.noop,fn:d.program(20,v,t),data:t}))||0===s?s:""}function v(e,t){var i,s="";return s+='
            • '+r(typeof(i=e&&e.name)===l?i.apply(e):i)+"
            • "}function y(e,t){var s;return(s=i.unless.call(e,e&&e.pinned,{hash:{},inverse:d.noop,fn:d.program(24,b,t),data:t}))||0===s?s:""}function b(e,t){var s;return(s=i.if.call(e,e&&e.visible,{hash:{},inverse:d.noop,fn:d.program(25,w,t),data:t}))||0===s?s:""}function w(e,t){var s,a="";return a+='
            • '+r(typeof(s=e&&e.name)===l?s.apply(e):s)+"
            • "}function k(e,t){return"is-selected"}return n+='"})),this.DDG.templates.translation_select=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression;return n+='"})),this.DDG.templates.translations_module=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var s,a="";return a+='
              '+r(typeof(s=e&&e.translated_text)===l?s.apply(e):s)+'
              '}function h(e,t){var s,a="";return a+='
              ',((s=i.lp.call(e,"translations_module","Translation",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}return n+='
              ",((o=i.if.call(t,t&&t.error,{hash:{},inverse:d.noop,fn:d.program(3,(function(e,t){return''}),a),data:a}))||0===o)&&(n+=o),n+='
              ',o=i.if.call(t,t&&t.error,{hash:{},inverse:d.program(7,(function(e,t){var s;return(s=i.if.call(e,e&&e.translated_text,{hash:{},inverse:d.program(10,h,t),fn:d.program(8,c,t),data:t}))||0===s?s:""}),a),fn:d.program(5,(function(e,t){var i,s="";return s+='
              '+r(typeof(i=e&&e.error)===l?i.apply(e):i)+"
              "}),a),data:a}),(o||0===o)&&(n+=o),n+='
              "})),this.DDG.templates.twitter_easter_egg=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o="",n=this.escapeExpression;return o+=''})),this.DDG.templates.user_location_badge=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},"
              "})),this.DDG.templates.user_location_button=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this;function r(e,t){return"btn--primary"}function d(e,t){return"update"}function c(e,t){return"enable"}function h(e,t){var s;return(s=i.if.call(e,e&&e.problemUpdatingLocation,{hash:{},inverse:l.program(13,u,t),fn:l.program(11,p,t),data:t}))||0===s?s:""}function p(e,t){var s;return(s=i.lp.call(e,"precise_user_location","Set Manually",{hash:{},data:t}))||0===s?s:""}function u(e,t){var s;return(s=i.lp.call(e,"precise_user_location","Update Location",{hash:{},data:t}))||0===s?s:""}function m(e,t){var s;return(s=i.lp.call(e,"precise_user_location","Enable Location",{hash:{},data:t}))||0===s?s:""}function g(e,t){var s,a="";return a+='',((s=i.lp.call(e,"precise_user_location","Clear Location",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}function f(e,t){var s,a="";return a+='',((s=i.lp.call(e,"precise_user_location","Set Manually",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}return n+='
              ',o=i.if.call(t,t&&t.waiting,{hash:{},inverse:l.program(3,(function(e,t){var s,a="";return a+='',((s=i.if.call(e,e&&e.update,{hash:{},inverse:l.program(15,m,t),fn:l.program(10,h,t),data:t}))||0===s)&&(a+=s),a+="",((s=i.if.call(e,e&&e.update,{hash:{},inverse:l.noop,fn:l.program(17,g,t),data:t}))||0===s)&&(a+=s),((s=i.if.call(e,e&&e.showManualLocationButton,{hash:{},inverse:l.noop,fn:l.program(19,f,t),data:t}))||0===s)&&(a+=s),a}),a),fn:l.program(1,(function(e,t){var s,a="";return a+='',((s=i.include.call(e,"spinner",{hash:{className:"user-loc-btn__spinner spinner--dark"},data:t}))||0===s)&&(a+=s),a+="",((s=i.lp.call(e,"precise_user_location","Waiting for Location...",{hash:{},data:t}))||0===s)&&(a+=s),a+='',((s=i.lp.call(e,"precise_user_location","Cancel",{hash:{},data:t}))||0===s)&&(a+=s),a+=""}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.user_location_content=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this,r="function",d=this.escapeExpression;function c(e,t){return"is-disabled"}function h(e,t){var s,a="";return a+=""}function p(e,t){var s,a="";return a+=""}function u(e,t){var s,a="";return a+=""}function m(e,t){var s,a="";return a+="
              ",((s=i.lp.call(e,"precise_user_location","Use Anonymous Location",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.lp.call(e,"precise_user_location","Private to us and secured on your device",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}function g(e,t){var s,a="";return a+="
              ",((s=i.lp.call(e,"precise_user_location","Pick Custom Location",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}function f(e,t){var i,s="";return s+="
            • ",((i=typeof e===r?e.apply(e):e)||0===i)&&(s+=i),s+="
            • "}function _(e,t){var s,a="";return a+="

              ",((s=typeof(s=e&&e.additional)===r?s.apply(e):s)||0===s)&&(a+=s),a+=' ',((s=i.lp.call(e,"precise_user_location","Help",{hash:{},data:t}))||0===s)&&(a+=s),a+="

              "}return n+="
              ",o=i.ifEquals.call(t,t&&t.state,"locUnset",{hash:{},inverse:l.noop,fn:l.program(1,(function(e,t){var s,a="";return a+="
              ",((s=i.lp.call(e,"precise_user_location","We can use your anonymous%s location%s to show you nearby results.","","",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.unless.call(e,e&&e.waiting,{hash:{},inverse:l.program(6,p,t),fn:l.program(4,h,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.lp.call(e,"precise_user_location","Pick Custom Location",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.l.call(e,"Learn %sMore%s","","",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),o=i.ifEquals.call(t,t&&t.state,"locSet",{hash:{},inverse:l.noop,fn:l.program(8,(function(e,t){var s,a="";return a+="
              "+d(typeof(s=e&&e.desc)===r?s.apply(e):s)+"
              ",((s=i.unless.call(e,e&&e.waiting,{hash:{},inverse:l.program(6,p,t),fn:l.program(9,u,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.ifEquals.call(e,e&&e.locType,"manual",{hash:{},inverse:l.noop,fn:l.program(11,m,t),data:t}))||0===s)&&(a+=s),((s=i.ifEquals.call(e,e&&e.locType,"precise",{hash:{},inverse:l.noop,fn:l.program(13,g,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.l.call(e,"Learn %sMore%s","","",{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),o=i.ifEquals.call(t,t&&t.state,"locError",{hash:{},inverse:l.noop,fn:l.program(15,(function(e,t){var s,a="";return a+="
              ",((s=i.lp.call(e,"precise_user_location","Enable location settings on your device to use anonymous location",{hash:{},data:t}))||0===s)&&(a+=s),a+="
                ",((s=i.each.call(e,e&&e.list,{hash:{},inverse:l.noop,fn:l.program(16,f,t),data:t}))||0===s)&&(a+=s),a+="
              ",((s=i.if.call(e,e&&e.additional,{hash:{},inverse:l.noop,fn:l.program(18,_,t),data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.user_location_dropdown=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},""})),this.DDG.templates.user_location_info=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='

              ',((o=(i=this.merge(i,e.helpers)).lp.call(t,"precise_user_location","DuckDuckGo is private by design. When you enable location, it is stored on your local device only. When you search, your device then sends it to us, we use it to improve results for that search, and then we promptly throw it away, such that you remain anonymous. %sLearn more about how we designed this technology to protect your privacy%s.",'',"",{hash:{},data:a}))||0===o)&&(n+=o),n+="

              "})),this.DDG.templates.user_location_notification=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+=""})),this.DDG.templates.user_location_tile=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="";return n+="
              "})),this.DDG.templates.user_location_tooltip_content=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){var i,s="";return s+="
              "+r(typeof(i=e&&e.desc)===l?i.apply(e):i)+"
              "}function h(e,t){var i,s="";return s+="
            • ",((i=typeof e===l?e.apply(e):e)||0===i)&&(s+=i),s+="
            • "}return n+="
              ",o=i.if.call(t,t&&t.locUnset,{hash:{},inverse:d.noop,fn:d.program(1,(function(e,t){var s,a="";return a+='

              ',((s=i.lp.call(e,"precise_user_location","Find results closer to you.",{hash:{},data:t}))||0===s)&&(a+=s),a+='

              ',((s=i.lp.call(e,"precise_user_location","Try enabling anonymous location for more accurate results.",{hash:{},data:t}))||0===s)&&(a+=s),a+=" ",((s=i.lp.call(e,"precise_user_location","%sLearn how we keep your location private%s.",'',"",{hash:{},data:t}))||0===s)&&(a+=s),a+="

              "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.locSet,{hash:{},inverse:d.noop,fn:d.program(3,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.desc,{hash:{},inverse:d.noop,fn:d.program(4,c,t),data:t}))||0===s)&&(a+=s),a+='

              ',((s=i.lp.call(e,"precise_user_location","Anonymous Location Enabled",{hash:{},data:t}))||0===s)&&(a+=s),a+='

              ',((s=i.lp.call(e,"precise_user_location","Location information is stored only on your device.",{hash:{},data:t}))||0===s)&&(a+=s),a+=" ",((s=i.lp.call(e,"precise_user_location","%sLearn how we keep your location private%s.",'',"",{hash:{},data:t}))||0===s)&&(a+=s),a+="

              "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.locError,{hash:{},inverse:d.noop,fn:d.program(6,(function(e,t){var s,a="";return a+="

              ",((s=i.lp.call(e,"precise_user_location","Browser Location Unavailable",{hash:{},data:t}))||0===s)&&(a+=s),a+='

              ',((s=i.lp.call(e,"precise_user_location","Set your location manually, or ensure Location Services is enabled.",{hash:{},data:t}))||0===s)&&(a+=s),a+=' ',((s=i.lp.call(e,"precise_user_location","Help",{hash:{},data:t}))||0===s)&&(a+=s),a+='

                ',((s=i.each.call(e,e&&e.instructions,{hash:{},inverse:d.noop,fn:d.program(7,h,t),data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),o=i.if.call(t,t&&t.locUpdProblem,{hash:{},inverse:d.noop,fn:d.program(9,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.desc,{hash:{},inverse:d.noop,fn:d.program(4,c,t),data:t}))||0===s)&&(a+=s),a+='

              ',((s=i.lp.call(e,"precise_user_location","Not getting nearby results?",{hash:{},data:t}))||0===s)&&(a+=s),a+='

              ',((s=i.lp.call(e,"precise_user_location","Try setting your location manually.",{hash:{},data:t}))||0===s)&&(a+=s),a+=" ",((s=i.lp.call(e,"precise_user_location","%sLearn how we keep your location private%s.",'',"",{hash:{},data:t}))||0===s)&&(a+=s),a+="

              "}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.user_location_tooltip=Handlebars.template((function(e,t,i,s,a){return this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{},"
              ×
              "})),this.DDG.templates.vertical_link_item=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression,r=this,d="function";function c(e,t){var s;return(s=i.if.call(e,e&&e.isIE,{hash:{},inverse:r.program(13,p,t),fn:r.program(11,h,t),data:t}))||0===s?s:""}function h(e,t){var s,a="";return a+='
              "}function p(e,t){var s,a="";return((s=i.if.call(e,e&&e.isNews,{hash:{},inverse:r.noop,fn:r.program(14,u,t),data:t}))||0===s)&&(a+=s),a+=''}function u(e,t){return'
              '}function m(e,t){var s;return(s=i.if.call(e,null==(s=e&&e.model)||!1===s?s:s.fetch_image,{hash:{},inverse:r.noop,fn:r.program(14,u,t),data:t}))||0===s?s:""}function g(e,t){return' target="_blank"'}function f(e,t){var s,a="";return a+='
              ',((s=i.ellipsis.call(e,null==(s=e&&e.model)||!1===s?s:s.excerpt,600,{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}return n+='
              ',o=i.if.call(t,null==(o=t&&t.model)||!1===o?o:o.showImage,{hash:{},inverse:r.noop,fn:r.program(9,(function(e,t){var s,a="";return a+='
              ',((s=i.if.call(e,null==(s=e&&e.model)||!1===s?s:s.image,{hash:{},inverse:r.program(16,m,t),fn:r.program(10,c,t),data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),n+='

              ",((o=typeof(o=null==(o=t&&t.model)||!1===o?o:o.title)===d?o.apply(t):o)||0===o)&&(n+=o),n+='',((o=i.l.call(t,"Your browser indicates if you've visited this link",{hash:{},data:a}))||0===o)&&(n+=o),n+="

              ",((o=i.if.call(t,t&&t.urlAboveSnippet,{hash:{},inverse:r.program(20,f,a),fn:r.noop,data:a}))||0===o)&&(n+=o),n+='
              ',((o=i.favicon.call(t,null==(o=t&&t.model)||!1===o?o:o.favicon_url,{hash:{},data:a}))||0===o)&&(n+=o),n+='",((o=typeof(o=null==(o=t&&t.model)||!1===o?o:o.source)===d?o.apply(t):o)||0===o)&&(n+=o),n+="",o=i.if.call(t,null==(o=t&&t.model)||!1===o?o:o.relative_time,{hash:{},inverse:r.noop,fn:r.program(24,(function(e,t){var i,s="";return s+='|'+l(typeof(i=null==(i=e&&e.model)||!1===i?i:i.relative_time)===d?i.apply(e):i)+""}),a),data:a}),(o||0===o)&&(n+=o),n+="
              ",((o=i.if.call(t,t&&t.urlAboveSnippet,{hash:{},inverse:r.noop,fn:r.program(20,f,a),data:a}))||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.vertical_links=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="";return n+='
              '})),this.DDG.templates.vertical_load_more=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='"})),this.DDG.templates.vertical_map=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression,d=this;function c(e,t){return"is-hidden"}function h(e,t){var i,s="";return s+="vertical--map--sidebar-"+r(typeof(i=null==(i=e&&e.model)||!1===i?i:i.sidebarLayout)===l?i.apply(e):i)}function p(e,t){return"has-directions"}function u(e,t){var s;return(s=i.unless.call(e,null==(s=e&&e.model)||!1===s?s:s.sourceUrl,{hash:{},inverse:d.noop,fn:d.program(1,c,t),data:t}))||0===s?s:""}return n+='
              ',o=i.if.call(t,null==(o=t&&t.model)||!1===o?o:o.isMapSidebarVisible,{hash:{},inverse:d.noop,fn:d.program(6,(function(e,t){var s,a="";return a+=''}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.vertical_separator=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression,r=this;function d(e,t){var i,s="";return s+='
              '+l("function"==typeof(i=e&&e.pageNumber)?i.apply(e):i)+"
              "}function c(e,t){var s,a="";return a+='
              ',((s=i.l.call(e,"Page %s",e&&e.pageNumber,{hash:{},data:t}))||0===s)&&(a+=s),a+="
              "}return n+='
              ',o=i.if.call(t,t&&t.pageNumber,{hash:{},inverse:r.noop,fn:r.program(5,(function(e,t){var s,a="";return((s=i.if.call(e,e&&e.line,{hash:{},inverse:r.program(8,c,t),fn:r.program(6,d,t),data:t}))||0===s)&&(a+=s),a+="
              "}),a),data:a}),(o||0===o)&&(n+=o),n+="
              "})),this.DDG.templates.web_attribution=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l="function",r=this.escapeExpression;return n+=''})),this.DDG.templates.welcome_message_eu=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],i=this.merge(i,e.helpers),a=a||{};var o,n="",l=this.escapeExpression;return n+='

              ',((o=i.lp.call(t,"welcome message eu search preference android","Privacy, simplified",{hash:{},data:a}))||0===o)&&(n+=o),n+='

              ',((o=i.lp.call(t,"welcome message eu search preference android","You're now searching privately in Chrome. Use our app instead of Chrome to browse privately too. It’s already installed and can:",{hash:{},data:a}))||0===o)&&(n+=o),n+="

              • ",((o=i.lp.call(t,"welcome message eu search preference android","Block unsafe trackers",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",((o=i.lp.call(t,"welcome message eu search preference android","Force encryption on websites",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",((o=i.lp.call(t,"welcome message eu search preference android","Clear data in one tap",{hash:{},data:a}))||0===o)&&(n+=o),n+='
              ',((o=i.lp.call(t,"welcome message eu search preference android","Open app",{hash:{},data:a}))||0===o)&&(n+=o),n+='
              '})),this.DDG.templates.welcome_message=Handlebars.template((function(e,t,i,s,a){this.compilerInfo=[4,">= 1.0.0"],a=a||{};var o,n="";return n+='

              ',((o=(i=this.merge(i,e.helpers)).lp.call(t,"welcome message","You now have the DuckDuckGo extension!",{hash:{},data:a}))||0===o)&&(n+=o),n+='

              ',((o=i.lp.call(t,"welcome message","Here's what it does:",{hash:{},data:a}))||0===o)&&(n+=o),n+="

              • ",((o=i.lp.call(t,"welcome message","Lets you search anonymously with DuckDuckGo",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",((o=i.lp.call(t,"welcome message","Blocks trackers on websites you visit",{hash:{},data:a}))||0===o)&&(n+=o),n+="
              • ",((o=i.lp.call(t,"welcome message","Encrypts connections when possible",{hash:{},data:a}))||0===o)&&(n+=o),n+='
              '})); \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9A4302E4F030303FA897B5D24E683429EE2A975 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9A4302E4F030303FA897B5D24E683429EE2A975 new file mode 100644 index 0000000..3f1d6b1 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9A4302E4F030303FA897B5D24E683429EE2A975 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9A4302E4F030303FA897B5D24E683429EE2A975-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9A4302E4F030303FA897B5D24E683429EE2A975-blob new file mode 100644 index 0000000..9f476c9 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/A9A4302E4F030303FA897B5D24E683429EE2A975-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAC07F08FBAD54AF8665B49C86F4A229BA7FCA97 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAC07F08FBAD54AF8665B49C86F4A229BA7FCA97 new file mode 100644 index 0000000..b76f736 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAC07F08FBAD54AF8665B49C86F4A229BA7FCA97 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAC07F08FBAD54AF8665B49C86F4A229BA7FCA97-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAC07F08FBAD54AF8665B49C86F4A229BA7FCA97-blob new file mode 100644 index 0000000..10b5aa8 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAC07F08FBAD54AF8665B49C86F4A229BA7FCA97-blob @@ -0,0 +1 @@ +define({"tos_exempt_forums_shortnames":["somememes","qrt-dev","qrt-test","qrt-prd"],"register":{"ENABLE_CAPTCHA":true},"max_post_edit_days":7,"lounge":{"follow_channel_prompt_views":1,"motd_admin_url":"https://blog.disqus.com/the-disqus-comment-section-upgraded","tracking":{"iframe_limit":4,"list":[{"url":"//referrer.disqus.com/juggler/stat.gif?event=data_tracker","forced_forums":["disqus"],"rate":0,"type":"img"}]},"font_options":[{"category":"serif","name":"Lora"},{"category":"sans-serif","name":"Montserrat"},{"category":"sans-serif","name":"Nunito"},{"category":"sans-serif","name":"Open+Sans"},{"category":"sans-serif","name":"Poppins"},{"category":"sans-serif","name":"Roboto"},{"category":"serif","name":"Roboto+Slab"},{"category":"sans-serif","name":"Source+Sans+Pro"},{"category":"serif","name":"Source+Serif+Pro"},{"category":"serif","name":"Spectral"},{"category":"sans-serif","name":"IBM+Plex+Sans"}],"motd_home_title":"The Disqus comment section gets a refresh!","motd_admin_title":"The Disqus comment section gets a refresh!","motd_home_url":"https://blog.disqus.com/the-disqus-comment-section-upgraded","REALTIME":{"BACKOFF_INTERVAL":4,"MAX_HANDSHAKE_FAILS":1,"XHR_ENABLED":false,"THREAD_STALE_DAYS":1},"motd_marketing_cta":"Full details here \u00bb","switches":{"customer_pulse_analytics":{"username":["orazumov_zeta","michaelyakovlev","commenting_privacy","andrei_ivanov_disqus","aivanov"]},"custom_reactions":true,"home_ads":{"channelDiscussions":true},"zyncOnly":{"percent":100},"spam_and_ban_moderation":{"percent":100,"forum":["taylans","disqus","rawstory","androidpolice","dogus"]},"stripeCoupons":true,"customCommentCounts":{"":"","motor1dotcom":5,"demotor1com":5,"trmotor1com":5,"ru-motor1-com-1":5,"downdetector":10,"newsmaxhealth":5,"https-www-syndromemagazine-com":5,"esmotor1com":5,"www-isaechia-it":5,"latinomotor1com":5,"esta-fallando-ecuador":35,"insideevsit":5,"acm-prod":10,"autoclassicscom":5,"is-the-service-down-uk":35,"istheservicedown":35,"nmmoney":5,"techrepublic-1":3,"esta-fallando-espana":35,"acm-stag":10,"brmotor1com":5,"hellforleather":5,"www-nextquotidiano-it":5,"themanrepeller":10,"camotor1com":5,"newsmaxtv":5,"the-spruce-eats":3,"acm-test":10,"insideevsru":5,"uscho":10,"esta-fallando-colombia":35,"is-the-service-down-france":35,"is-the-service-down-australia":35,"ukmotor1com":5,"mantle-ref":1,"qa-thespruce":1,"nmax":5,"insideevscom":5,"trashitaliano-1":5,"brasil247":10,"adsnativetest":5,"fdc-staging":3,"http-ilsignordistruggere-com":5,"disqus":25,"sta-fallendo":35,"slamonline":5,"gibt-es-eine-storung":35,"insideevsbr":5,"forbes-2":3,"bitchyfblog":5,"www-violetta-rocks":5,"zdnet-1":3,"newsmaxworld":5,"mediaite":5,"the-spruce-staging":1,"is-the-service-down-canada":35,"frmotor1com":5,"esta-fallando-mexico":35,"insideevsfr":5},"disable_recommendations":false,"reveal_new_ad_products":{"username":["Digikid13","ProductNate","adamstober","mariopaganini","kalail610"]},"reactions_analytics":true,"registrationFlow":{"enableSignup":true},"behind_click":{"forum":["happy-little-trees","testgbnew","gamingbolt","whatisthebestcolor","disqus-demo-pro"]},"login_prompt_more_posts":{},"before_comment_callback":{"forum":["dsqwordpress","chivefest","chivery","chivery-staging","thechiverules-brigade","thechivereviewserver2012","thechiverules-throttle","thechiverules","thechiverules-staging","thechiverules"]},"moderation_page_active":true,"liveramp":true,"bidirectional_blocking":true,"recs_outside_embed":true,"random_algorithm_on_explore":true,"num_comments":{"devel-d12":20},"new_user_premoderation":true,"ats2_enabled":true,"aet_intercom":{"percent":0},"enable_hotjar":{"percent":10},"aniview_sticky_video_debug":false,"election_pages":false,"custom_fonts":true,"limit_rendered_posts":{"forum_percent":100,"forum":[]},"removePrivacyPolicy":{"forum":["cnet-1","zdnet-1","techrepublic-1","sri-test-local","sri-consensus","sri-consensus-dap","chasing-the-cure","bluestacks-community","cnet-es","cnet-roadshow","forbes-2","howtostartanllc","howtostartanllc-idc","startup-savant","startupsavant-idc","truic","truic-idc","spie-digital-library","linquip","www-hapimag-com-1","java-monster","juicemonster","monster-dragon-tea","monster-energy","monster-general-session","monster-hydro","monster-maxx","monster-nos","monster-rehab","monster-reign","monster-ultra","monster-unleashed","ula-1","techx-2","techlondon","tcv-1","nyc-1","hubdc","boston-2","camokakis","uat5ecddc33cb039142843016e3","uat5ecf2b30adc60f516cfeab08","uat5ecf346bc3234228586f3345","uat5f2a75f2be29f01b043dc397","uat5f56fedc650ea204a1e5885f","uat5f588335650ea204a1e5887a","uat5f58a2fb650ea204a1e5888a","uat5f58a494650ea204a1e5888c","uat5f5b2d81eaa52f19f477d240","uat5f5b48dfcd3af55020457aab","uat5f5b554dcd3af55020457ab5","uat5f5b5bdf089fc922999bf126","uat5f5b5c25089fc922999bf128","uat5f5ee3e7089fc922999bf158","uat5f6015c540da0046625c40b7","uat5f6c09791bcc73727477c9fe","uat5f7a82f467ca7845189e4e8d","uat5f7a858c67ca7845189e4e96","uat5f7acb1c67ca7845189e4ead","uat5f7acdc567ca7845189e4eb9","uat5f7d6b2281b0b61edc5b583d","businessdaily","dailynation","swahilihub","global-dimension-development","globaldimensionuk","pat5ffdca7b5d2cd0218f963cf7","pat5ffdcddca27eb627c1c9dbcd","pat5ffdece362bdc852cade5bb6","pat5ffe65e362bdc852cade5c5a","pat5ffe673baa07d02a5507f669","sodrama-staging","uat5ff2c907a4e05f7f19d78416","uat5ff3d2da397ea862fcbb636f","uat5ff3d2e8397ea862fcbb6371","uat5ff3d2fa397ea862fcbb6373","uat5ff3d30b397ea862fcbb6375","uat5ff3d367397ea862fcbb637d","uat5ff3d374397ea862fcbb637f","uat5ff42a27e17b6e36a6dbf15d","uat5ff7c5e034ad524ec0334399","uat5ff7c8ba1e395420fce2c450","spreeberry","pat6007ed852f1e464198a20b63","pat6007ed9f2f1e464198a20b68","pat600f9e39e5afa234ff35074a","pat600fa88b9cf4687ea7ef706d","pat600fbe3ce5afa234ff350787","pat600fbfaf9cf4687ea7ef70db","uat6009267f9aa0483501e348a7","uat60093092d1bc6f66a845f122","pat6020fbb62a321a79ad8c3ea0","stagingjt","japantimes","uat60361504ea5cd3443b3e48f7","pat6040922de64c3f540f3613c5","pat60470361a840d7541b9e4b2b","pat604851767c851f3d4f32a3c8","uat604ed0dfed6bb90b1b1dc159","betterview","prod-storyloom","uat-storyloom","sandbox-storyloom","dev-storyloom","uat60501de967233b3b9f63c512","uat60582201ab6d242fe0af6770","uat6063d916bef871227a7041fa","uat60641723bef871227a70426a","pat609e6fe6420f3347f099d653","stghomekpmg","home-kpmg","sigmanursing","test-sigmanursing","dev-sigmanursing","qrt-test","astronogeek","astronogeek-ppr","cultivonsnous","cultivonsnous-ppr","mpt-qa","qrt-prd","qrt-dev","mpt-prod","scenedecrime-ppr","scenedecrime","armystories","armystories-ppr","infinityfestival2021","https-2021ocpglobal-fnvirtual-app","pat612f2b9737aef25cdf3d0208","pat612f2a622c4b9246c71b2024","pat615440cf7506e530e1c914ea","pat615d0c147506e530e1c94e46","pat615fa1e47506e530e1c964a2","uat6156a770abd1832da16c568d","uat615d5a2d91e3f8389c5048ba","uat6165209b5ad62a86c05f7785","uat61652c4a5ad62a86c05f7787","uat61652d135ad62a86c05f7789","uat616536a35ad62a86c05f7790","uat616539745ad62a86c05f7792","uat616539d05ad62a86c05f7795","uat616539f45ad62a86c05f7797","uat61654aa35ad62a86c05f77de","uat61654d46ba93d02e74e3b7ae","uat61657cafba93d02e74e3b7b5","uat61657d60ba93d02e74e3b7b9","uat61664f7566a248466878c69a","uat6168dfbd8e0243102da6a5e0","uat616d3c8fc51424234c7442d6","uat616d4016c51424234c7442d9","exquistv","puydufou","starsfest2021","pat616d2807fb51497aefdc0e30","pat616f838dee09d97de232f14e","pat616f8683ee09d97de232f279","pat616f83740efb3b5aae62db51","pat616f8b0c0efb3b5aae62db72","pat617115bd0efb3b5aae62e1b1","pat617f59651dbbbb5542505363","pat617f5abf9d94657230b609ba","pat6188c683f76c80669179c38d","trades-nation","techweek2022-yahoo","f5labs-stage","f5labs-test","f5labs","brazenlife","bzpvfds","brazenconnect","mieuxmangerdemain","owg2022","owg2022-1","https-stockinvest-us","stockinvest-test","viasat-compass","mycasethrive2022","2022ocpglo","fnallhands2022-fnvirtual-app-1","RDC22","storyloom","melissa-wood-health-testing","melissa-wood-health-production","endeavor-streaming","mpt-staging","qa2-1","qa3-test","globalfrand2022-fnvirtual-app","topgearbbc-test","prelaunch-dev","prelaunch-production","prelaunch-stage","vrye-weekblad-1","https-przegladsportowy-onet-pl","qas-expresso","prod-expresso","qa-environment"]},"gif_picker_forum_settings":{"forum_percent":100,"forum":["taylans","disqus-demo-basic","disqus-demo-plus","disqus-demo-pro"]},"recommendations_with_ads":{"forum_percent":100,"forum":["brett-test-1","happy-little-trees","somememes","nikonrumors","es-fans"]},"home_ads_prevented":{"forum":["iphoneincanada","thehill-v4","nmax","toofab","channel-discussdisqus","patdollardcom"]},"toggle_embed_refresh":true,"home_admin_channel":{"slug":["disqusfun"]},"onboarding_without_channels":{"percent":100},"media_tradecraft_test":true,"analytics_intercom":{"percent":0},"subscription_intercom":{"percent":0},"sso_less_branding":{"forum":["techrepublic-1","zdnet-1","zd-review-migration-2","zd-migration-3","cnet-migration-2","cnet-migration-roadshow-2","cnet-migration-es-2","tr-dev","zd-dev","zdnet-dev","cnet-es","cnet-roadshow","cnet-1","cbs-sports-prod","cbs-sports-staging","sri-consensus","sri-test-local","sri-consensus-dap","acm-test","acm-stag","acm-prod","betterview","ibm-knowledge-center","chasing-the-cure","omroep-flevoland","bluestacks-community","fdc-staging","forbes-2","tradecast","bellinga","howtostartanllc","howtostartanllc-idc","startup-savant","startupsavant-idc","truic","truic-idc","https-dev-tokion-jp","https-www-tokion-jp","spie-digital-library","linquip","live-event","fnvirtual-poc","java-monster","juicemonster","monster-dragon-tea","monster-energy","monster-general-session","monster-hydro","monster-maxx","monster-nos","monster-rehab","monster-reign","monster-ultra","ula-1","techx-2","techlondon","tcv-1","nyc-1","hubdc","boston-2","hornby-hobbies","hornbyus","camokakis","uat5ecddc33cb039142843016e3","uat5ecf2b30adc60f516cfeab08","uat5ecf346bc3234228586f3345","uat5f2a75f2be29f01b043dc397","uat5f56fedc650ea204a1e5885f","uat5f588335650ea204a1e5887a","uat5f58a2fb650ea204a1e5888a","uat5f58a494650ea204a1e5888c","uat5f5b2d81eaa52f19f477d240","uat5f5b48dfcd3af55020457aab","uat5f5b554dcd3af55020457ab5","uat5f5b5bdf089fc922999bf126","uat5f5b5c25089fc922999bf128","uat5f5ee3e7089fc922999bf158","uat5f6015c540da0046625c40b7","uat5f6c09791bcc73727477c9fe","uat5f7a82f467ca7845189e4e8d","uat5f7a858c67ca7845189e4e96","uat5f7acb1c67ca7845189e4ead","uat5f7acdc567ca7845189e4eb9","uat5f7d6b2281b0b61edc5b583d","swahilihub","2020ocptechweek","dailynation","businessdaily","global-dimension-development","globaldimensionuk","pat5ffdca7b5d2cd0218f963cf7","pat5ffdcddca27eb627c1c9dbcd","pat5ffdece362bdc852cade5bb6","pat5ffe65e362bdc852cade5c5a","pat5ffe673baa07d02a5507f669","sodrama-staging","uat5ff2c907a4e05f7f19d78416","uat5ff3d2da397ea862fcbb636f","uat5ff3d2e8397ea862fcbb6371","uat5ff3d2fa397ea862fcbb6373","lmstag","www-livemint-com","dev-storyloom","prod-storyloom","uat-storyloom","sandbox-storyloom","working-knowledge","uat5ff3d30b397ea862fcbb6375","uat5ff3d367397ea862fcbb637d","uat5ff3d374397ea862fcbb637f","uat5ff42a27e17b6e36a6dbf15d","uat5ff7c5e034ad524ec0334399","uat5ff7c8ba1e395420fce2c450","spreeberry","uat6009267f9aa0483501e348a7","uat60093092d1bc6f66a845f122","pat6007ed852f1e464198a20b63","pat6007ed9f2f1e464198a20b68","pat600f9e39e5afa234ff35074a","pat600fa88b9cf4687ea7ef706d","pat600fbe3ce5afa234ff350787","pat600fbfaf9cf4687ea7ef70db","pat6020fbb62a321a79ad8c3ea0","stagingjt","japantimes","uat60361504ea5cd3443b3e48f7","pat6040922de64c3f540f3613c5","pat60470361a840d7541b9e4b2b","pat604851767c851f3d4f32a3c8","uat604ed0dfed6bb90b1b1dc159","uat60501de967233b3b9f63c512","uat60582201ab6d242fe0af6770","uat6063d916bef871227a7041fa","uat60641723bef871227a70426a","pat609e6fe6420f3347f099d653","stghomekpmg","home-kpmg","test-sigmanursing","dev-sigmanursing","sigmanursing","qrt-test","astronogeek","astronogeek-ppr","cultivonsnous","cultivonsnous-ppr","mpt-qa","qrt-prd","qrt-dev","mpt-prod","scenedecrime-ppr","scenedecrime","armystories","armystories-ppr","infinityfestival2021","https-2021ocpglobal-fnvirtual-app","pat612f2b9737aef25cdf3d0208","pat612f2a622c4b9246c71b2024","pat615440cf7506e530e1c914ea","pat615d0c147506e530e1c94e46","pat615fa1e47506e530e1c964a2","uat6156a770abd1832da16c568d","uat615d5a2d91e3f8389c5048ba","uat6165209b5ad62a86c05f7785","uat61652c4a5ad62a86c05f7787","uat61652d135ad62a86c05f7789","uat616536a35ad62a86c05f7790","uat616539745ad62a86c05f7792","uat616539d05ad62a86c05f7795","uat616539f45ad62a86c05f7797","uat61654aa35ad62a86c05f77de","uat61654d46ba93d02e74e3b7ae","uat61657cafba93d02e74e3b7b5","uat61657d60ba93d02e74e3b7b9","uat61664f7566a248466878c69a","uat6168dfbd8e0243102da6a5e0","uat616d3c8fc51424234c7442d6","uat616d4016c51424234c7442d9","exquistv","puydufou","starsfest2021","pat616d2807fb51497aefdc0e30","pat616f838dee09d97de232f14e","pat616f8683ee09d97de232f279","pat616f83740efb3b5aae62db51","pat616f8b0c0efb3b5aae62db72","pat617115bd0efb3b5aae62e1b1","pat617f59651dbbbb5542505363","pat617f5abf9d94657230b609ba","pat6188c683f76c80669179c38d","trades-nation","techweek2022-yahoo","f5labs-stage","f5labs-test","f5labs","bzpvfds","brazenlife","brazenconnect","mieuxmangerdemain","owg2022","owg2022-1","lmstag","https-stockinvest-us","stockinvest-test","viasat-compass","fnallhands2022-fnvirtual-app-1","mycasethrive2022","2022ocpglo","RDC22","storyloom","hindustantimes-com-1","melissa-wood-health-testing","melissa-wood-health-production","endeavor-streaming","mpt-staging","qa2-1","qa3-test","globalfrand2022-fnvirtual-app","topgearbbc-test","prelaunch-dev","prelaunch-stage","prelaunch-production","vrye-weekblad-1","https-przegladsportowy-onet-pl","qa-environment","qas-expresso","prod-expresso"]},"aniview_sticky_video":true,"badges_feature":true,"stripe_price_changes":true,"reveal_show_video":{"username":["Digikid13","ProductNate","mariopaganini","kalail610","nicoleallard"],"org_percent":25,"percent":100},"timeline_ads":{"is_staff":true,"percent":100},"intercomEnabled":{"is_staff":true,"percent":0},"recs_outside_embed_list":{"forum":["happy-little-trees","disqus","spoilertvhome","chriselliotts","avocadotesting","payments-in-ukraine","marcofranssen","mcbolt","thecornercafe","the-chat-place","thechatshack-fun"]},"disable_high_rep_spam_exclusion":true,"suggested_actions":{},"toxicity_mod":{"is_staff":false,"percent":0},"launch_pro":true,"thehive":{"forum":["aivanovtest","joyoftesting-display-bottom","disqus-demo-pro","commentingprivacy-blogspot-com","disqus","mediaite","worldstar","avocadotesting","mcbolt","nodqdotcom","spoilertvhome","aerotelegraph","mpt-prod"]},"hostIdentityActive":{"percent":100},"viglink_experiment":{"forum_percent":100,"forum":[]},"disable_voting":{"forum":[""]},"mtc_ads":true,"embed_customizations":true,"moderation_improvements_intercom":{"percent":0},"star_ratings_total_hidden":{"forum":["star-ratings-test","happy-little-trees","qa-simplyrecipes","qa-seriouseats","simply-recipes","serious-eats"]},"reveal_show_display":{"username":["Digikid13","ProductNate","mariopaganini","kalail610","nicoleallard"],"org_percent":25,"percent":100},"embed_refresh":true,"profile_explore":true,"tile_ads":{"is_staff":true,"percent":100},"random_algorithm_on_pages":true,"home_explore_new_indicator":true,"moderationRules":{"is_staff":true,"forum":["merimbulanewsonline-com-au","thegatewaypundit","torfashion","japantimes","wnd-news","dailyadvertiser-com-au","gothamist","tvtech","northerndailyleader-com-au","cinemablend","malonetelegram","belloflostsouls","zdnet-1","nowinstock","androidpolice","thehill-v4","cnsnews","sltrib","mrctvcomments","pcmag","theatlanticcities","badassdigest","abcnewsdotcom","thechiverules","thedailycaller","wccftech","rawstory","cnet-1","bitcoincom","tsest","downdetector","breitbartproduction","sofifa","alternet","wrestlinginc","evilmilk","bearingarms-th","hotair-th","ipdevstaging","pj-instapundit","pj-media","pjmediastaging","redstate","townhallcom","twitchy","mediaite","lawnewz","themarysue","es-fans","worldstar","thedailywire","lingojam","rogerebert","avocadotesting","9anime-to","businessdaily","dailynation","ewm","swahilihub"]},"webvitals_addPostsIncremental":{"forum":["disqus-pse-stock","disqus-pse-recommendations","disqus-pse-reactions","disqus-pse-data-partners","disqus-pse-alfie","disqus-pse-ads-links"]}},"motd_marketing_url":"https://blog.disqus.com/the-disqus-comment-section-upgraded","motd_admin_cta":"Full details here \u00bb","telemetry_sample_percent":1,"viglink":{"experiment_version":"v5","version":"v4"},"motd_home_cta":"Full details here \u00bb","AMAZON_ENABLED_ALL":false,"motd_marketing_title":"The Disqus comment section gets a refresh!","sentry_rate_limit":500},"readonly":false,"mentions":{"MAX_PER_POST":30},"timelines":{"BLACKLISTED_FORUMS":["cnn","squiddev-justforfun","squiddev-todayilearned","squiddev-ama","squid","squiddev","squid-changemyview","squiddev-changemyview","squid-justforfun","squid-todayilearned","squid-ama"]}}) \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAD6877F01579289712ADA07B5D9E113FFD27A74 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAD6877F01579289712ADA07B5D9E113FFD27A74 new file mode 100644 index 0000000..6510f95 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAD6877F01579289712ADA07B5D9E113FFD27A74 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAD6877F01579289712ADA07B5D9E113FFD27A74-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAD6877F01579289712ADA07B5D9E113FFD27A74-blob new file mode 100644 index 0000000..a59308e Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AAD6877F01579289712ADA07B5D9E113FFD27A74-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ABB58B6FFE6AF20468F3ACF8CAA624084FAE4A41 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ABB58B6FFE6AF20468F3ACF8CAA624084FAE4A41 new file mode 100644 index 0000000..5354ab3 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ABB58B6FFE6AF20468F3ACF8CAA624084FAE4A41 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ABD84B77A8E3C58C6B948028BF4C1ACDC7E1B75A b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ABD84B77A8E3C58C6B948028BF4C1ACDC7E1B75A new file mode 100644 index 0000000..632ea17 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ABD84B77A8E3C58C6B948028BF4C1ACDC7E1B75A differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ABD84B77A8E3C58C6B948028BF4C1ACDC7E1B75A-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ABD84B77A8E3C58C6B948028BF4C1ACDC7E1B75A-blob new file mode 100644 index 0000000..6ddaa48 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ABD84B77A8E3C58C6B948028BF4C1ACDC7E1B75A-blob @@ -0,0 +1 @@ +:root{--max-content-width: 590px;--default-border-radius: 4px}.is-vertical-tabs-exp{--max-content-width: 672px;--default-border-radius: 8px}.is-not-mobile-device{overflow-x:auto;min-width:980px}.is-not-mobile-device body{min-width:980px}.is-not-mobile-device .site-wrapper{min-width:980px}.tile__check{-webkit-transition:all .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:all .3s ease-in-out 0s;-o-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s}.is-link-style-exp.is-not-mobile-device .footer_cards,.c-info,.c-base,.c-icon,.c-list,.c-product,.c-detail,.zci__main.has-aux,.zci__main--answer,.results--main,.forecast-wrapper .module--forecast .module__detail--hours__labels,.zcm-wrap--header{max-width:590px;max-width:var(--max-content-width)}.info:after,.metabar__in:after,.result__body:after,.search-filters:after,.zcm--sub:after,.zcm__menu:after,.zci:after,.zci__body:after,.tile-wrap:after,.serp__results:after,.module--carousel__items:after,.related-searches:after{content:"";display:block;clear:both}.metabar__in,.welcome,.zcm-wrap,.zci__main,.zci__detail,.serp__results,.tile-wrap .no-results,.footer,.footer--mobile{padding-left:150px}@media only screen and (max-width: 1350px){.metabar__in,.welcome,.zcm-wrap,.zci__main,.zci__detail,.serp__results,.tile-wrap .no-results,.footer,.footer--mobile{padding-left:94px}}@media only screen and (max-width: 1079px){.metabar__in,.welcome,.zcm-wrap,.zci__main,.zci__detail,.serp__results,.tile-wrap .no-results,.footer,.footer--mobile{padding-left:58px}}@media only screen and (max-width: 590px){.metabar__in,.welcome,.zcm-wrap,.zci__main,.zci__detail,.serp__results,.tile-wrap .no-results,.footer,.footer--mobile{padding-left:58px}.metabar__in,.welcome,.zcm-wrap,.zci__main,.zci__detail,.serp__results,.footer,.footer--mobile{padding-left:0 !important}}@media only screen and (max-width: 425px){.metabar__in,.welcome,.zcm-wrap,.zci__main,.zci__detail,.serp__results,.tile-wrap .no-results,.footer,.footer--mobile{padding-left:58px}}.zci__body__left,.zci__body__right{float:left;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.zci__body__left{width:60%}.zci__body__right{width:40%}.tile--info__link:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media only screen and (max-width: 864px){.serp__top-right,.serp__bottom-right{display:none}}@media only screen and (max-width: 425px){.zcm__menu--tiles{display:none}}.result__check__tt,.module--translations-tooltip{-webkit-transition:opacity .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:opacity .3s ease-in-out 0s;-o-transition:opacity .3s ease-in-out 0s;transition:opacity .3s ease-in-out 0s;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;visibility:hidden;opacity:0;display:inline-block;vertical-align:middle;position:absolute;margin:auto;background-color:#a3a3a3;background-color:rgba(138,138,138,0.9);text-indent:0px;padding:0 1em;white-space:nowrap;line-height:1.6;height:1.6em;font-weight:400;font-style:normal;color:white;z-index:200}.module--translations-tooltip{background:#333;box-shadow:0 5px 10px rgba(0,0,0,0.1);font-size:12px;height:auto;line-height:1.33;padding:.75em}.module--translations-tooltip:before{content:"";display:block;position:absolute;margin-left:-.75em;left:50%;border:.75em solid transparent}.result__check__tt:before{content:"";display:block;position:absolute;margin-left:-.5em;bottom:-.5em;left:1.5em;border:.5em solid transparent;border-bottom-width:0;border-top-color:#a3a3a3;border-top-color:rgba(138,138,138,0.9)}.module--translations-tooltip{margin-top:10px}.module--translations-tooltip:before{top:-.75em;border-top-width:0;border-bottom-color:#333;border-bottom-color:#333}.text_promo--link{align-items:center;display:inline-flex}.text_promo--link,.text_promo--link:hover,.text_promo--link:visited,.text_promo--link:active{text-decoration:none}.text_promo--link .text_promo--text:hover{text-decoration:underline}.text_promo--link .text_promo--button:hover{background-color:#2950BF}.text_promo--link .text_promo--button:active,.text_promo--link .text_promo--button:focus{background-color:#294698}.text_promo--icon{margin:0 0.25em}.text_promo--icon img{max-width:revert;position:relative}.text_promo--button{background-color:#3969EF;background-repeat:no-repeat;background-position:12px center;background-size:auto 11px;border-radius:4px;color:#fff;display:inline-block;font-size:13px;line-height:1;margin:0 0.5em;padding:7px 12px 5px;position:relative}.text_promo--button.text_promo--has-image{padding-left:30px}.text_promo--button img{display:inline-block;position:relative}.text_promo--button span{display:inline-block}.header--text_promo .text_promo--button{background-position:10px center;background-size:auto 10px;font-size:11px;padding:7px 9px 6px}.header--text_promo .text_promo--button.text_promo--has-image{padding-left:26px}.footer--text_promo .text_promo--button{background-position:8px center;background-size:auto 9px;font-size:10px;padding:5px 8px 4px}.footer--text_promo .text_promo--button.text_promo--has-image{padding-left:22px}.text_promo--badge{background:#F7D249;border-radius:3px;color:#111;display:inline-block;font-size:10px;font-weight:600;line-height:15px;margin:0 0.5em;padding:1px 6px 0;text-transform:uppercase}.homepage--text_promo .text_promo--badge{position:relative;top:-2px}.text_promo--part:first-child{margin-left:0}.text_promo--part:last-child{margin-right:0}.homepage--text_promo{margin-top:0.8em;padding:0 0.8em}.homepage--text_promo--link{display:block;text-align:center}.homepage--text_promo--link,.homepage--text_promo--link:hover,.homepage--text_promo--link:visited,.homepage--text_promo--link:active{color:#9a9a9a}.homepage--text_promo--link .text_promo--text,.homepage--text_promo--link:visited .text_promo--text,.homepage--text_promo--link:active .text_promo--text{text-decoration:underline}.homepage--text_promo--link:hover .text_promo--text{text-decoration:none}.header--text_promo{font-size:1em;font-weight:400;padding-right:7px;position:absolute;right:8px;text-align:right;top:49px;white-space:nowrap}.header--text_promo a,.header--text_promo a:active,.header--text_promo a:visited{color:#aaa}.header--text_promo a:hover{text-decoration:none}.header--text_promo .text_promo--text:hover{color:#666;text-decoration:none}@media only screen and (min-width: 1079px){.header--text_promo{right:1px}}@media only screen and (max-width: 1079px){.header--text_promo{display:none}}.footer--text_promo{font-size:13px;padding:5px 20px}.footer--text_promo .text_promo--icon img{position:relative;top:2px;width:12px;height:12px}.footer--text_promo--link{display:block}.footer--text_promo--link,.footer--text_promo--link:hover,.footer--text_promo--link:visited,.footer--text_promo--link:active{color:#888}.has-tiles .anchor--inline{left:-150px}@media only screen and (max-width: 864px){.has-tiles .anchor--inline{left:-58px}}@media only screen and (max-width: 590px){.has-tiles .anchor--inline{left:-58px}}@media only screen and (max-width: 425px){.has-tiles .anchor--inline{left:-58px}}.date-badge{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;color:#999;width:34px;height:34px;border:1px solid #d0d0d0;display:block;text-align:center;white-space:nowrap}.date-badge__text{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;line-height:34px;height:34px;max-width:90%;display:block;margin:auto}.date-badge__month,.date-badge__day{line-height:17px;height:17px;font-size:11px;display:block}.date-badge__day{border-top:1px solid #d0d0d0;margin-top:-1px;font-size:13px}.chomp{overflow:hidden;max-height:7.75em}.has-chomp-expanded .chomp,.chomp.is-expanded{max-height:none !important}.chomp--scroll{max-height:216px;max-height:15rem;overflow:auto}@media only screen and (min-width: 590px) and (max-height: 738px){.chomp--scroll{max-height:151.2px;max-height:10.5rem}}.chomp__inner{width:100%}.chomp--link{display:none;cursor:pointer}.chomp--link.can-expand{display:inline-block}.chomp--link__ls{display:none}.has-chomp-expanded .chomp--link .chomp--link__ls,.chomp--link.is-expanded .chomp--link__ls{display:inline}.chomp--link__mr{display:inline}.has-chomp-expanded .chomp--link .chomp--link__mr,.chomp--link.is-expanded .chomp--link__mr{display:none}.chomp--link__icn{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;display:inline-block;vertical-align:middle;margin-right:.5em;position:relative;line-height:13px;width:16px;height:16px}.chomp--link__icn:before{content:"\2295";display:inline;font-size:16px;color:#aaabab}.has-chomp-expanded .chomp--link .chomp--link__icn:before,.chomp--link.is-expanded .chomp--link__icn:before{content:"\229d"}.chomp--link__mr,.chomp--link__ls{color:#888}.chomp--link__mr:hover,.chomp--link:hover .chomp--link__mr,.chomp--link__ls:hover,.chomp--link:hover .chomp--link__ls{color:#4495d4}.badge,.results--powered__badge{text-indent:-999999px;display:inline-block;vertical-align:middle;position:relative;background-position:50% 50%;background-repeat:no-repeat}.badge--txt,.badge--ad,.result__type,.result__pagenum{border-radius:4px;border-radius:var(--default-border-radius);font-size:12px;font-size:.833333rem;display:inline-block;vertical-align:middle;position:relative;text-indent:0;margin-top:-1px;padding:0 0.6em;white-space:nowrap;line-height:1.6;font-weight:400;font-style:normal;color:white;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.module--carousel .badge--txt,.module--carousel .badge--txt:hover,.module--carousel .badge--txt:focus,.metabar .badge--txt,.metabar .badge--txt:hover,.metabar .badge--txt:focus,.module--carousel .badge--ad,.module--carousel .badge--ad:hover,.module--carousel .badge--ad:focus,.metabar .badge--ad,.metabar .badge--ad:hover,.metabar .badge--ad:focus{border:none;color:#aaa;font-size:12px;font-weight:400;margin:0;padding:0;text-transform:none}.metabar .badge--txt,.metabar .badge--txt:hover,.metabar .badge--txt:focus,.metabar .badge--ad,.metabar .badge--ad:hover,.metabar .badge--ad:focus{font-size:1.2em;color:#888}.badge--ad-wrap{white-space:nowrap}.badge--ad{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0.25em;text-transform:uppercase;padding:2px;font-size:10px;text-align:center;line-height:1;height:15px;background-color:transparent;border:solid 1px #00278e;margin-top:-0.2em;font-weight:600}.results--ads--rrail .badge--ad{top:0}.badge--ad,.badge--ad:hover,.badge--ad:focus{color:#00278e;text-decoration:none}.badge--prime{background-image:url("/assets/icons/thirdparty/prime.v101.png");background-size:44px 12px;width:44px;height:12px}.svg .badge--prime{background-image:url("/assets/icons/thirdparty/prime.v101.svg")}.badge--yandex{background-image:url("/assets/attribution/yandex.v102.png");background-size:44px 19px;width:44px;height:19px}.svg .badge--yandex{background-image:url("/assets/attribution/yandex.v102.svg")}.badge--yahoo{background-image:url("/assets/attribution/yahoo.v103.png");background-size:55px 13px;width:55px;height:13px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-ms-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dppx){.badge--yahoo{background-image:url("/assets/attribution/yahoo.v103.svg")}}.badge--blekko{background-image:url("/assets/attribution/blekko.v102.png");background-size:48px 14px;width:48px;height:14px}.svg .badge--blekko{background-image:url("/assets/attribution/blekko.v102.svg")}.badge--bing{background-image:url("/assets/attribution/bing.v102.png");background-size:54px 22px;width:54px;height:22px}.svg .badge--bing{background-image:url("/assets/attribution/bing.v102.svg")}.play-btn{display:inline-block;position:relative}.play-btn__icn{background-image:url("/assets/icons/play-button.svg");background-size:contain;background-repeat:no-repeat;display:inline-block;vertical-align:middle;width:1.2em;height:1.2em;line-height:1;cursor:pointer}.play-btn__icn.is-playing,.play-btn__icn.is-playing:hover{background-image:url("/assets/icons/play-button-solid.svg")}.play-btn__err{color:#888;font-style:italic;font-size:.5em}.review-count{text-decoration:inherit}.review-count__icon{display:inline-block;vertical-align:middle;text-decoration:none;margin-right:3px}.ddh-fathead li:before{content:"•";color:#888;padding-right:0.3em}.ddh-fathead p strong{color:#666;font-weight:normal}.ddh-fathead p code{color:#666}.msg--serp,.msg--result{-webkit-tap-highlight-color:rgba(0,0,0,0);padding:.5em 10px;margin:0 0 1em 0}.msg--site{font-size:1.1em}.msg--result{cursor:pointer}.msg--result.highlight{background-color:#f7f7f7}.msg--result .msg__close{right:10px;color:#888;top:7px}.msg--result .msg__close:hover{color:#333}.msg--result a:visited{color:#00278e}.msg--spelling{font-size:1.1em;cursor:default !important}.msg--spelling a{color:#00278e}.msg--spelling a:hover{color:#00278e;text-decoration:underline}.msg--spelling a:active{color:#66abff}.msg--transition-out{opacity:0;height:0 !important}.msg__close{position:absolute;right:1em;top:1em;color:inherit}.msg__wrap{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.lt-ie9 .msg__wrap{padding-top:.5em;display:block}.msg__btn-wrap{display:inline-block;padding-top:.25em}.msg__btn{text-transform:capitalize;margin:0 0.8em 0 0;font-size:0.85em;line-height:1.75;top:2px;vertical-align:bottom}.msg__label{margin:0 0.5em 0 0}.msg__text{margin-right:12px}.msg__clear{font-weight:600}.msg__date{text-transform:lowercase}.msg__clear-filter,.msg__clear-filter:hover{text-decoration:none;color:#666}.msg__clear-filter-x{margin-left:2px;font-size:8px;font-family:'ddg-serp-icons' !important}.msg__sites--mobile{display:block}.msg__site{color:#666;display:inline-block;padding:0 12px 0 0}.msg__all,.msg__all:visited{display:inline-block;color:#00278e}.msg__line{display:block}.msg__line--small{font-size:0.9em}.detail--l .detail__media:after,.detail--products .detail__media:after,.detail--qa .detail__media:after,.detail--about .detail__media:after,.tile--img__media:after,.tile--vid__overlay,.tile__media--pr:after,.module--carousel__image.is-contain-image:after{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;display:block}.overlay,.overlay__wrap{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0}.overlay{z-index:1;display:block;overflow:hidden;background:#222;background:rgba(45,45,45,0.9);text-align:center;color:#fafafa}.is-mobile .overlay{position:fixed}.overlay__wrap{display:table;height:100%}.overlay__content{display:table-cell;vertical-align:middle;text-align:center;line-height:1.2}.overlay__title{margin:.5em 0 .25em;font-weight:300}.overlay__text{font-weight:300;color:#bbb}.overlay__link{color:#49a9f2}.overlay__btn-list{padding:1em .5em}.is-mobile .overlay__btn-list{padding-left:0;padding-right:0}.overlay__btn-list__li{display:inline-block;width:11em;margin:0 .25em .5em}.is-mobile .overlay__btn-list__li{width:46%;margin-left:1%;margin-right:1%}.overlay__btn{display:block;padding:.65em 0;text-align:center;line-height:1.2;border-color:#fafafa;color:#fafafa}.overlay__btn--single{display:inline-block;padding:.65em;margin:1em .5em}.overlay__btn:hover{background-color:#fafafa;color:#222}.expand{cursor:pointer}.expand__icon{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;margin-right:.5em;background-color:#dbdbdb;display:inline-block;position:relative;width:1.25em;height:1.25em;text-align:center}.expand__icon:before{content:"";width:0;height:0;top:-0.10em;left:0.05em;position:relative;display:inline-block;border:.25em solid transparent;border-top-color:#464646;border-top-width:0.4em;border-bottom-width:0}.is-open .expand__icon:before,.expand__icon.is-open:before{border-bottom-color:#464646;border-bottom-width:0.4em;border-top-width:0;top:-0.15em}.expand:hover .expand__icon{-webkit-box-shadow:0 0 1px #dbdbdb;-moz-box-shadow:0 0 1px #dbdbdb;box-shadow:0 0 1px #dbdbdb;background-color:#e8e8e8}.expand:active .expand__icon{background-color:#464646}.expand:active .expand__icon:before{border-top-color:#dbdbdb}.is-open .expand:active .expand__icon:before,.expand:active .expand__icon.is-open:before{border-bottom-color:#dbdbdb}.expand__less{display:none}.is-open .expand__more{display:none}.is-open .expand__less{display:inline}.stars{vertical-align:baseline;display:inline-block;line-height:inherit;position:relative;margin-right:4px}.star{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;display:inline-block;position:relative;margin-right:-2px;font-size:1em;color:#d0d0d0;line-height:1;height:1em;width:1em}.star:before,.star:after{display:block;position:absolute;content:"★";line-height:1;height:1em;width:1em;margin:auto;bottom:0;left:0;top:0}.star:after{color:#de5833;visibility:hidden;overflow:hidden}.stars--1 .stars__1:after,.stars--1-5 .stars__1:after,.stars--2 .stars__1:after,.stars--2-5 .stars__1:after,.stars--3 .stars__1:after,.stars--3-5 .stars__1:after,.stars--4 .stars__1:after,.stars--4-5 .stars__1:after,.stars--5 .stars__1:after{visibility:visible}.stars--2 .stars__2:after,.stars--2-5 .stars__2:after,.stars--3 .stars__2:after,.stars--3-5 .stars__2:after,.stars--4 .stars__2:after,.stars--4-5 .stars__2:after,.stars--5 .stars__2:after{visibility:visible}.stars--3 .stars__3:after,.stars--3-5 .stars__3:after,.stars--4 .stars__3:after,.stars--4-5 .stars__3:after,.stars--5 .stars__3:after{visibility:visible}.stars--4 .stars__4:after,.stars--4-5 .stars__4:after,.stars--5 .stars__4:after{visibility:visible}.stars--5 .stars__5:after{visibility:visible}.stars--0-5 .stars__1:after{visibility:visible;width:0.5em}.stars--1-5 .stars__2:after{visibility:visible;width:0.5em}.stars--2-5 .stars__3:after{visibility:visible;width:0.5em}.stars--3-5 .stars__4:after{visibility:visible;width:0.5em}.stars--4-5 .stars__5:after{visibility:visible;width:0.5em}.count{vertical-align:baseline;display:inline-block;line-height:inherit;position:relative;margin-right:4px}.count__i{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;vertical-align:middle;text-align:center;position:relative;font-size:1em;color:#d0d0d0;line-height:1;height:1em;width:1em}.count__i:before,.count__i:after{display:block;font-size:0.7em;position:absolute;content:"●";line-height:1.15;height:1.25em;width:1.25em;margin:auto;bottom:0;left:0;top:0}.count__i:after{color:#333;visibility:hidden;overflow:hidden}.count--1 .count__1:after,.count--2 .count__1:after,.count--3 .count__1:after,.count--4 .count__1:after,.count--5 .count__1:after{visibility:visible}.count--2 .count__2:after,.count--3 .count__2:after,.count--4 .count__2:after,.count--5 .count__2:after{visibility:visible}.count--3 .count__3:after,.count--4 .count__3:after,.count--5 .count__3:after{visibility:visible}.count--4 .count__4:after,.count--5 .count__4:after{visibility:visible}.count--5 .count__5:after{visibility:visible}.count--green .count__i:after{color:#5b9e4d}.count--red .count__i:after{color:#de5833}.count--gold .count__i:after{color:#f1a031}@media only screen and (min-width: 590px) and (max-height: 738px){.opt{display:none !important}.opt--left{float:left !important}.opt--right{float:right !important}.opt--t-l{font-size:1.33em !important}.opt--t-m{font-size:1.1667em !important}.opt--t-s{font-size:.9176em !important}.opt--t-xs{font-size:.8333em !important}.opt--t-xxs{font-size:.75em !important}}.record{display:block}.record__body{table-layout:fixed;width:100%}.record__cell{text-overflow:ellipsis;word-wrap:break-word;white-space:nowrap;overflow:hidden;border-top:1px solid #d0d0d0;border-bottom:1px solid #d0d0d0;padding:.35em .35em .35em 0}.is-expanded .record__cell{white-space:normal}.record--highlight .record__cell{padding-left:.35em}.record--keyspacing .record__cell--key{padding-right:1.5em;width:7.7em}.record__cell--key{padding-right:0.5em;width:8.7em;text-align:left;vertical-align:top;text-transform:capitalize}.record__row--highlight:nth-child(odd){background-color:rgba(150,150,150,0.15)}.info{display:block;padding-top:0.3em;padding-bottom:0.3em;position:relative}.info img{display:none}.info--head{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;font-size:1em;font-weight:600;padding:0.3em 0 0.4em}.info__label,.info__value{display:block;margin-top:1px;margin-bottom:-1px}.info__label{color:#6f6f6f;padding-right:.5em;text-align:left;float:left}.is-mobile .info__label{float:none;margin-top:-2px}.info__value{text-align:right;overflow:hidden}.is-mobile .info__value{text-align:left}.info__value__nested{display:block}.info__value__nested__label{color:#6f6f6f}.label{background-color:rgba(0,0,0,0.6);color:#fff;line-height:1;padding:.5em .75em;font-weight:600}.image-labels{position:absolute;bottom:.5em;right:.8em}.image-labels .image-labels__label{font-weight:600;background-color:rgba(0,0,0,0.75);padding:.125em 0.35em;display:block;float:left;line-height:1.6;color:#fff;margin-left:2px;border-radius:3px}.flag-xs{display:inline-block;background:url("/assets/flags/flags-16px.png?v=52a4153a17c2ac1363f9aad1964ad090") no-repeat;width:16px;height:16px;background-size:16px 944px}.flag-xs-ar{background-position:0px -0px}.flag-xs-at{background-position:0px -16px}.flag-xs-au{background-position:0px -32px}.flag-xs-be{background-position:0px -48px}.flag-xs-bg{background-position:0px -64px}.flag-xs-br{background-position:0px -80px}.flag-xs-ca{background-position:0px -96px}.flag-xs-ch{background-position:0px -112px}.flag-xs-cl{background-position:0px -128px}.flag-xs-cn{background-position:0px -144px}.flag-xs-co{background-position:0px -160px}.flag-xs-ct{background-position:0px -176px}.flag-xs-cz{background-position:0px -192px}.flag-xs-de{background-position:0px -208px}.flag-xs-dk{background-position:0px -224px}.flag-xs-ee{background-position:0px -240px}.flag-xs-es{background-position:0px -256px}.flag-xs-fi{background-position:0px -272px}.flag-xs-fr{background-position:0px -288px}.flag-xs-gr{background-position:0px -304px}.flag-xs-hk{background-position:0px -320px}.flag-xs-hr{background-position:0px -336px}.flag-xs-hu{background-position:0px -352px}.flag-xs-id{background-position:0px -368px}.flag-xs-ie{background-position:0px -384px}.flag-xs-il{background-position:0px -400px}.flag-xs-in{background-position:0px -416px}.flag-xs-it{background-position:0px -432px}.flag-xs-jp{background-position:0px -448px}.flag-xs-kr{background-position:0px -464px}.flag-xs-lt{background-position:0px -480px}.flag-xs-lv{background-position:0px -496px}.flag-xs-mx{background-position:0px -512px}.flag-xs-my{background-position:0px -528px}.flag-xs-nl{background-position:0px -544px}.flag-xs-no{background-position:0px -560px}.flag-xs-nz{background-position:0px -576px}.flag-xs-pe{background-position:0px -592px}.flag-xs-ph{background-position:0px -608px}.flag-xs-pk{background-position:0px -624px}.flag-xs-pl{background-position:0px -640px}.flag-xs-pt{background-position:0px -656px}.flag-xs-ro{background-position:0px -672px}.flag-xs-ru{background-position:0px -688px}.flag-xs-se{background-position:0px -704px}.flag-xs-sg{background-position:0px -720px}.flag-xs-sk{background-position:0px -736px}.flag-xs-sl{background-position:0px -752px}.flag-xs-th{background-position:0px -768px}.flag-xs-tr{background-position:0px -784px}.flag-xs-tw{background-position:0px -800px}.flag-xs-ua{background-position:0px -816px}.flag-xs-uk{background-position:0px -832px}.flag-xs-us{background-position:0px -848px}.flag-xs-vn{background-position:0px -864px}.flag-xs-wt{background-position:0px -880px}.flag-xs-xa{background-position:0px -896px}.flag-xs-xl{background-position:0px -912px}.flag-xs-za{background-position:0px -928px}.flag-sm{display:inline-block;background:url("/assets/flags/flags-20px.png?v=553a264f568107f6aacc50c7b10bddbf") no-repeat;width:20px;height:20px;background-size:20px 1180px}.flag-sm-ar{background-position:0px -0px}.flag-sm-at{background-position:0px -20px}.flag-sm-au{background-position:0px -40px}.flag-sm-be{background-position:0px -60px}.flag-sm-bg{background-position:0px -80px}.flag-sm-br{background-position:0px -100px}.flag-sm-ca{background-position:0px -120px}.flag-sm-ch{background-position:0px -140px}.flag-sm-cl{background-position:0px -160px}.flag-sm-cn{background-position:0px -180px}.flag-sm-co{background-position:0px -200px}.flag-sm-ct{background-position:0px -220px}.flag-sm-cz{background-position:0px -240px}.flag-sm-de{background-position:0px -260px}.flag-sm-dk{background-position:0px -280px}.flag-sm-ee{background-position:0px -300px}.flag-sm-es{background-position:0px -320px}.flag-sm-fi{background-position:0px -340px}.flag-sm-fr{background-position:0px -360px}.flag-sm-gr{background-position:0px -380px}.flag-sm-hk{background-position:0px -400px}.flag-sm-hr{background-position:0px -420px}.flag-sm-hu{background-position:0px -440px}.flag-sm-id{background-position:0px -460px}.flag-sm-ie{background-position:0px -480px}.flag-sm-il{background-position:0px -500px}.flag-sm-in{background-position:0px -520px}.flag-sm-it{background-position:0px -540px}.flag-sm-jp{background-position:0px -560px}.flag-sm-kr{background-position:0px -580px}.flag-sm-lt{background-position:0px -600px}.flag-sm-lv{background-position:0px -620px}.flag-sm-mx{background-position:0px -640px}.flag-sm-my{background-position:0px -660px}.flag-sm-nl{background-position:0px -680px}.flag-sm-no{background-position:0px -700px}.flag-sm-nz{background-position:0px -720px}.flag-sm-pe{background-position:0px -740px}.flag-sm-ph{background-position:0px -760px}.flag-sm-pk{background-position:0px -780px}.flag-sm-pl{background-position:0px -800px}.flag-sm-pt{background-position:0px -820px}.flag-sm-ro{background-position:0px -840px}.flag-sm-ru{background-position:0px -860px}.flag-sm-se{background-position:0px -880px}.flag-sm-sg{background-position:0px -900px}.flag-sm-sk{background-position:0px -920px}.flag-sm-sl{background-position:0px -940px}.flag-sm-th{background-position:0px -960px}.flag-sm-tr{background-position:0px -980px}.flag-sm-tw{background-position:0px -1000px}.flag-sm-ua{background-position:0px -1020px}.flag-sm-uk{background-position:0px -1040px}.flag-sm-us{background-position:0px -1060px}.flag-sm-vn{background-position:0px -1080px}.flag-sm-wt{background-position:0px -1100px}.flag-sm-xa{background-position:0px -1120px}.flag-sm-xl{background-position:0px -1140px}.flag-sm-za{background-position:0px -1160px}.flag-lg{display:inline-block;background:url("/assets/flags/flags-32px.png?v=376117fda1db8cc52f728564f58f47a3") no-repeat;width:32px;height:32px;background-size:32px 1888px}.flag-lg-ar{background-position:0px -0px}.flag-lg-at{background-position:0px -32px}.flag-lg-au{background-position:0px -64px}.flag-lg-be{background-position:0px -96px}.flag-lg-bg{background-position:0px -128px}.flag-lg-br{background-position:0px -160px}.flag-lg-ca{background-position:0px -192px}.flag-lg-ch{background-position:0px -224px}.flag-lg-cl{background-position:0px -256px}.flag-lg-cn{background-position:0px -288px}.flag-lg-co{background-position:0px -320px}.flag-lg-ct{background-position:0px -352px}.flag-lg-cz{background-position:0px -384px}.flag-lg-de{background-position:0px -416px}.flag-lg-dk{background-position:0px -448px}.flag-lg-ee{background-position:0px -480px}.flag-lg-es{background-position:0px -512px}.flag-lg-fi{background-position:0px -544px}.flag-lg-fr{background-position:0px -576px}.flag-lg-gr{background-position:0px -608px}.flag-lg-hk{background-position:0px -640px}.flag-lg-hr{background-position:0px -672px}.flag-lg-hu{background-position:0px -704px}.flag-lg-id{background-position:0px -736px}.flag-lg-ie{background-position:0px -768px}.flag-lg-il{background-position:0px -800px}.flag-lg-in{background-position:0px -832px}.flag-lg-it{background-position:0px -864px}.flag-lg-jp{background-position:0px -896px}.flag-lg-kr{background-position:0px -928px}.flag-lg-lt{background-position:0px -960px}.flag-lg-lv{background-position:0px -992px}.flag-lg-mx{background-position:0px -1024px}.flag-lg-my{background-position:0px -1056px}.flag-lg-nl{background-position:0px -1088px}.flag-lg-no{background-position:0px -1120px}.flag-lg-nz{background-position:0px -1152px}.flag-lg-pe{background-position:0px -1184px}.flag-lg-ph{background-position:0px -1216px}.flag-lg-pk{background-position:0px -1248px}.flag-lg-pl{background-position:0px -1280px}.flag-lg-pt{background-position:0px -1312px}.flag-lg-ro{background-position:0px -1344px}.flag-lg-ru{background-position:0px -1376px}.flag-lg-se{background-position:0px -1408px}.flag-lg-sg{background-position:0px -1440px}.flag-lg-sk{background-position:0px -1472px}.flag-lg-sl{background-position:0px -1504px}.flag-lg-th{background-position:0px -1536px}.flag-lg-tr{background-position:0px -1568px}.flag-lg-tw{background-position:0px -1600px}.flag-lg-ua{background-position:0px -1632px}.flag-lg-uk{background-position:0px -1664px}.flag-lg-us{background-position:0px -1696px}.flag-lg-vn{background-position:0px -1728px}.flag-lg-wt{background-position:0px -1760px}.flag-lg-xa{background-position:0px -1792px}.flag-lg-xl{background-position:0px -1824px}.flag-lg-za{background-position:0px -1856px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-ms-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dppx){.flag-xs{background-image:url("/assets/flags/flags-32px.png?v=376117fda1db8cc52f728564f58f47a3")}.flag-sm{background-image:url("/assets/flags/flags-40px.png?v=b7bdad126a7461d953e5560fe5d3402e")}.flag-lg{background-image:url("/assets/flags/flags-64px.png?v=c0100515803e4bb9ecc1ca4dd877cfce")}}@media only screen and (-webkit-min-device-pixel-ratio: 3), only screen and (-moz-min-device-pixel-ratio: 3), only screen and (min--moz-device-pixel-ratio: 3), only screen and (-ms-min-device-pixel-ratio: 3), only screen and (min-device-pixel-ratio: 3), only screen and (min-resolution: 288dppx){.flag-xs{background-image:url("/assets/flags/flags-48px.png?v=d6653738c02647ebb092fc790ef12710")}.flag-sm{background-image:url("/assets/flags/flags-60px.png?v=236ce8ec6878c5c2225c181d3098ebfa")}.flag-lg{background-image:url("/assets/flags/flags-96px.png?v=cd5264a4f652b7265ede85fe0bee88a9")}}.handle{height:4px;width:30px;margin:0 auto;position:relative}.handle:after,.handle:before{content:'';height:100%;width:17px;background:#aaa;position:absolute;border-radius:2px;transition:transform .15s ease-out}.handle:before{right:0}.handle--up:after,.handle--down:before{transform:rotate(-20deg)}.handle--up:before,.handle--down:after{transform:rotate(20deg)}.attribution-wrap--top,.attribution-wrap--infobox{margin-right:10px;position:absolute;right:7px;top:1em;height:24px}@media only screen and (min-width: 980px){.attribution-wrap--infobox{margin-right:1.25em;right:27%}}.attribution{padding:.5em;line-height:1.5;text-align:left}.attribution--link{cursor:pointer}.attribution--link:hover{text-decoration:none}.attribution--link:hover b{text-decoration:underline}.attribution--link__icon{position:relative;color:#aaa;font-size:16px}.attribution--link__icon:hover,.attribution--link__icon:focus{color:#999}.attribution--link__icon:active{color:#888}.attribution__hr{border:none;margin:1.25em 0;border-bottom:1px solid #ededed}.attribution__btn{line-height:1.8}.spinner{width:14px;height:14px;position:relative;display:inline-block;top:2px}.spinner__spoke{top:0;left:0;width:100%;height:100%;position:absolute}.spinner__spoke:before{content:'';display:block;margin:0 auto;width:15%;height:28.571%;background-color:#999;border-radius:2px;-webkit-animation:spinner 0.8s infinite ease-in-out both;-moz-animation:spinner 0.8s infinite ease-in-out both;animation:spinner 0.8s infinite ease-in-out both}.dark-bg .spinner__spoke:before,.spinner--dark .spinner__spoke:before{background-color:rgba(255,255,255,0.8)}.spinner__spoke--2{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.spinner__spoke--2:before{-webkit-animation-delay:-.7s;-moz-animation-delay:-.7s;animation-delay:-.7s}.spinner__spoke--3{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.spinner__spoke--3:before{-webkit-animation-delay:-.6s;-moz-animation-delay:-.6s;animation-delay:-.6s}.spinner__spoke--4{-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}.spinner__spoke--4:before{-webkit-animation-delay:-.5s;-moz-animation-delay:-.5s;animation-delay:-.5s}.spinner__spoke--5{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.spinner__spoke--5:before{-webkit-animation-delay:-.4s;-moz-animation-delay:-.4s;animation-delay:-.4s}.spinner__spoke--6{-webkit-transform:rotate(225deg);-moz-transform:rotate(225deg);-ms-transform:rotate(225deg);-o-transform:rotate(225deg);transform:rotate(225deg)}.spinner__spoke--6:before{-webkit-animation-delay:-.3s;-moz-animation-delay:-.3s;animation-delay:-.3s}.spinner__spoke--7{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.spinner__spoke--7:before{-webkit-animation-delay:-.2s;-moz-animation-delay:-.2s;animation-delay:-.2s}.spinner__spoke--8{-webkit-transform:rotate(315deg);-moz-transform:rotate(315deg);-ms-transform:rotate(315deg);-o-transform:rotate(315deg);transform:rotate(315deg)}.spinner__spoke--8:before{-webkit-animation-delay:-.1s;-moz-animation-delay:-.1s;animation-delay:-.1s}@-webkit-keyframes spinner{0%,39%,100%{opacity:0}40%{opacity:1}}@-moz-keyframes spinner{0%,39%,100%{opacity:0}40%{opacity:1}}@keyframes spinner{0%,39%,100%{opacity:0}40%{opacity:1}}.cta-icon,.place-detail__cta-icon,.directions-search__mode__type__icon,.directions-table .directions-col--icon__image{width:38px;height:38px;padding:0;margin:0 auto;border-radius:50%;background-repeat:no-repeat;background-position:center}.dark-bg .cta-icon,.dark-bg .place-detail__cta-icon,.dark-bg .directions-search__mode__type__icon,.dark-bg .directions-table .directions-col--icon__image,.directions-table .dark-bg .directions-col--icon__image{border-color:transparent !important}.cta-icon--selected,.is-selected .directions-search__mode__type__icon{background-color:#66ABFF;border-color:#66ABFF}.skeleton-loader{position:relative;overflow:hidden}.skeleton-loader__item{display:flex;padding:20px;border-bottom:1px solid #ededed}.dark-bg .skeleton-loader__item{border-bottom-color:#333}.skeleton-loader__item__right{width:100%}.skeleton-loader__section1{width:80%}.skeleton-loader__section2{width:60%}.skeleton-loader__section3{width:40%}.skeleton-loader__section4{width:55%;float:left}.skeleton-loader__section5{width:20%;float:left;margin-left:5px}.skeleton-loader__row1{overflow:hidden;width:30%}.skeleton-loader__row2{width:20%}.skeleton-loader__box{border-radius:2px;background-color:#ededed}.dark-bg .skeleton-loader__box{background-color:#666}.skeleton-loader__box1{width:30px;height:30px;margin:0 15px 20px 0}.skeleton-loader__box2{height:20px;margin-bottom:5px}.skeleton-loader__box3{height:15px;margin-bottom:10px}.skeleton-loader__box4{height:15px}.skeleton-loader__box{background-image:linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);background-size:600px}.dark-bg .skeleton-loader__box{background-image:linear-gradient(90deg, transparent, rgba(51,51,51,0.2), transparent)}.skeleton-loader__box1{animation:shine-left 1.5s infinite linear}.skeleton-loader__box2,.skeleton-loader__box3,.skeleton-loader__box4{animation:shine-right 1.5s infinite linear}@keyframes shine-left{0%{background-position:-270px}40%,100%{background-position:330px}}@keyframes shine-right{0%{background-position:-300px}40%,100%{background-position:300px}}.metabar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;min-height:33px;padding-top:5px;padding-bottom:1px;padding-left:7px;padding-right:7px;top:0;right:0;left:0;z-index:10}.is-mobile .zci.is-full-page .metabar{padding:4px 0.2em 1px}.metabar--sticky{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky}.metabar--fixed{position:static}.metabar__in{line-height:33px;height:33px;visibility:hidden;padding-bottom:0;padding-top:0;margin-top:0;clear:both;z-index:2;white-space:nowrap}.is-active .metabar__in{visibility:visible}.metabar__in.is-expanded{padding-left:0}@media only screen and (max-width: 590px){.metabar--fixed .metabar__in{margin-left:.5em}.is-stuck>.metabar__in{margin-left:0}}.metabar__item-type{text-transform:capitalize}.metabar__item-type--no-transform{text-transform:none}.metabar__term{font-weight:600}.metabar__primary-text,.metabar__secondary-text{padding-top:0;overflow:hidden;line-height:33px;max-height:33px}.metabar__primary-text.is-loading,.metabar__secondary-text.is-loading{display:none}.metabar__primary-text{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-left:10px;padding-right:.5em}.is-expanded .has-dropdowns .metabar__primary-text,.has-no-results .metabar__primary-text{display:none}.metabar__primary-text--linked{cursor:pointer;color:#333}.metabar__primary-text--linked:hover{text-decoration:underline}.metabar__secondary-text,.metabar__attribution{line-height:33px;height:33px;float:right}.metabar__attribution .modal-trig{height:28px}.metabar__attribution__sep{margin-top:9px;float:right}.metabar__more-at{line-height:33px;float:right}.metabar__mode-wrap{padding-left:1em;line-height:33px;height:33px;float:right;position:relative;z-index:10}.is-mobile .has-dropdowns .metabar__mode-wrap,.has-image-module .metabar__mode-wrap,.has-no-results .metabar__mode-wrap{display:none}.metabar__mode{background-color:#dfdfdf;color:#666;vertical-align:top;top:0}.metabar__mode.is-disabled,.metabar__mode.is-disabled:hover,.metabar__mode.is-disabled:active{-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s;color:#dadada;background-color:transparent;cursor:default}.metabar__grid-btn,.metabar__grid-btn:hover{-webkit-transition:background-color .1s,color .1s;-moz-transition:background-color .1s,color .1s;-o-transition:background-color .1s,color .1s;transition:background-color .1s,color .1s;border-radius:4px;border-radius:var(--default-border-radius);width:auto;font-size:13px;padding:5px 10px;text-decoration:none;border:1px solid rgba(150,150,150,0.3);cursor:pointer;color:#666;background-color:#fff;display:inline-block;line-height:18px !important;margin-top:2px}.is-expanded .metabar__grid-btn,.is-expanded .metabar__grid-btn:hover{font-family:'ddg-serp-icons' !important;font-size:14px;-webkit-font-smoothing:antialiased}.metabar__grid-btn:hover{color:#fff;background-color:#666}.metabar__dropdowns-wrap{overflow-y:hidden;height:30px;display:none;position:relative}.metabar__dropdowns-wrap:before,.metabar__dropdowns-wrap:after{content:"";position:absolute;z-index:1;height:100%;width:12px;top:0}.metabar__dropdowns-wrap:before{left:0;background-image:linear-gradient(90deg, #fff, rgba(255,255,255,0))}.metabar__dropdowns-wrap:after{right:0;background-image:linear-gradient(90deg, rgba(255,255,255,0), #fff)}.has-no-results .metabar__dropdowns-wrap{margin-right:0}.is-expanded .metabar__dropdowns-wrap{display:block}.metabar__dropdowns{overflow-x:auto;overflow-y:hidden;height:100%;vertical-align:top;whitespace:nowrap;-webkit-overflow-scrolling:touch}.is-not-mobile-device .metabar__dropdowns{height:50px}.metabar__dropdowns .dropdown{height:33px;line-height:33px;margin-right:15px}.metabar__dropdowns .dropdown:first-of-type{margin-left:1em}.metabar__dropdowns .dropdown__button{font-size:1em;line-height:34px}.is-mobile .metabar__dropdowns .dropdown__button{margin-top:1px;position:relative}.metabar__dropdowns .modal--dropdown.modal--popout{top:33px}@media only screen and (max-width: 590px){.metabar__mode-wrap{padding-left:.25em}}.tile-nav,.tile-nav--sm{-webkit-transform:translate3d(0, 0, 140px);-moz-transform:translate3d(0, 0, 140px);-ms-transform:translate3d(0, 0, 140px);-o-transform:translate3d(0, 0, 140px);transform:translate3d(0, 0, 140px);-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:all .3s ease-in-out 0s;-o-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s;font-style:normal;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.can-scroll.tile-nav,.can-scroll.tile-nav--sm{cursor:pointer}.tile-nav:before,.tile-nav--sm:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:relative}.tile-nav{-webkit-perspective:1000;-moz-perspective:1000;-ms-perspective:1000;-o-perspective:1000;perspective:1000;-webkit-border-radius:5em;-moz-border-radius:5em;-ms-border-radius:5em;-o-border-radius:5em;border-radius:5em;font-size:1.2em;cursor:default;position:absolute;z-index:10;top:0;bottom:0;margin:auto;width:6em;height:4em;line-height:4;padding:0 .8em;color:#fafafa;color:rgba(250,250,250,0.5);background-color:#c6c6c6;background-color:rgba(35,35,35,0.1);display:none;-webkit-transition-delay:.5s;-moz-transition-delay:.5s;-o-transition-delay:.5s;transition-delay:.5s}.tile-nav,.tile-nav:after{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-font-smoothing:antialiased}.tile-nav:after{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;-webkit-transition:all .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:all .3s ease-in-out 0s;-o-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s;-webkit-transform:scale(.01, .01);-moz-transform:scale(.01, .01);-ms-transform:scale(.01, .01);-o-transform:scale(.01, .01);transform:scale(.01, .01);display:none;position:absolute;margin:auto;bottom:0;top:0;text-align:center;font-size:0.695em;width:2em;height:2em;line-height:2}.tile-nav.can-scroll,.tile-nav.can-scroll:after{color:#222;background-color:#fff;box-shadow:0 0 5px rgba(0,0,0,0.4)}.tile-nav.can-scroll:hover,.tile-nav.can-scroll:hover:after{background-color:#fff}.tile-nav.can-scroll:active{-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s}.tile-nav.can-scroll:after{content:attr(data-items);display:block}.tile-nav.can-scroll:hover:after{-webkit-transform:scale(1, 1);-moz-transform:scale(1, 1);-ms-transform:scale(1, 1);-o-transform:scale(1, 1);transform:scale(1, 1)}.no-touch .has-tiles .tile-nav{display:block}.has-tiles:hover .tile-nav,.tile-nav:hover{-webkit-transition-delay:.001s;-moz-transition-delay:.001s;-o-transition-delay:.001s;transition-delay:.001s}.tile-nav--d{position:absolute;top:50%;margin:-2em 0 0 0;background-color:rgba(34,34,34,0.75) !important}.tile-nav--d:after{display:none !important}.tile-nav--d.can-scroll{display:block}.tile-nav--d.tile-nav--prev{left:-3em}.tile-nav--d.tile-nav--prev:before{content:"\2039";padding-right:.25em}.tile-nav--d.tile-nav--next{right:-3em}.tile-nav--d.tile-nav--next:before{content:"\203a";padding-left:.25em}.tile-nav--sm{cursor:default;position:relative;margin-left:0.5em;opacity:0.25}.tile-nav--sm:before{font-size:1.2em}.tile-nav--sm.can-scroll{cursor:pointer;opacity:1}.no-touch .tile-nav--sm.can-scroll:hover{color:#fff;background-color:#6d6d6d}.no-touch .tile-nav--sm.can-scroll:hover:active{background-color:#555}.tile-nav--prev{text-align:right;left:-7em}.tile-nav--prev:before{content:"\3c"}.has-tiles:hover .tile-nav--prev.can-scroll{left:-3.75em}.tile-nav--prev:after{right:6em}.tile-nav--prev:hover:after{right:-2.5em}.tile-nav--sm--prev:before{content:"\ab"}.tile-nav--next{text-align:left;right:-7em}.tile-nav--next:before{content:"\3e"}.has-tiles:hover .tile-nav--next.can-scroll{right:-3.75em}.tile-nav--next:after{left:6em}.tile-nav--next:hover:after{left:-2.5em}.tile-nav--sm--next:before{content:"\bb"}.result__image__plc,.tile--audio .tile__media__no-artwork,.module--carousel__placeholder{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;background-color:#e0e0e0;color:#fff;font-size:3em;height:1em;width:1em;padding:.5em;line-height:1}.tile,.tile--s,.tile--info{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-radius:var(--default-border-radius);overflow:hidden;display:block;position:relative;background-color:#fff;border:1px solid #e3e3e3;border-bottom-color:#cacaca;font-size:.87em;margin:8px 5px;line-height:1.37;padding:0;opacity:1;box-shadow:0 2px 3px rgba(0,0,0,0.06);border-bottom-color:rgba(125,125,125,0.3)}.highlight.tile,.highlight.tile--s,.highlight.tile--info{box-shadow:0 2px 3px rgba(0,0,0,0.06);border-color:rgba(150,150,150,0.7);border-width:1px}.highlight.tile:active,.highlight.tile--s:active,.highlight.tile--info:active{-webkit-box-shadow:0 0 0 1px #de5833;-moz-box-shadow:0 0 0 1px #de5833;box-shadow:0 0 0 1px #de5833;border-color:#de5833}.is-selected.tile,.is-selected.tile--s,.is-selected.tile--info{z-index:5}.is-mobile .is-selected.tile,.is-mobile .is-selected.tile--s,.is-mobile .is-selected.tile--info{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.is-requerying .tile,.is-requerying .tile--s,.is-requerying .tile--info{-webkit-transition:opacity .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:opacity .3s ease-in-out 0s;-o-transition:opacity .3s ease-in-out 0s;transition:opacity .3s ease-in-out 0s;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=20);opacity:.2}.tile .tile,.tile--s .tile,.tile--info .tile{max-width:100%;font-size:1em;margin:0}.tile .zci__body,.tile--s .zci__body,.tile--info .zci__body{padding-left:0}.tile--no-highlight.highlight,.tile--no-highlight.highlight:active,.tile--no-highlight.is-selected{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-color:#e3e3e3;border-bottom-color:#cacaca}.tile__media{margin:auto;display:block;width:100%;max-width:100%;overflow:hidden;position:relative;height:9em}.tile__media__img{display:block;margin:0 auto;color:transparent}.tile__media__img:-moz-loading{visibility:hidden}.tile__num{position:absolute;top:0;left:0;font-weight:600;color:#222;width:2em;height:2.5em;padding:0.1em 1em 0 0;line-height:2em;text-align:center;overflow:hidden;z-index:1}.tile__num:before{-webkit-transform:skew(135deg);-moz-transform:skew(135deg);-ms-transform:skew(135deg);-o-transform:skew(135deg);transform:skew(135deg);content:"";display:block;position:absolute;background:#fff;height:100%;width:100%;bottom:0;left:-15px;top:0;z-index:-1}.tile__body,.tile--s,.tile--info{-webkit-transform-style:inherit;-moz-transform-style:inherit;-ms-transform-style:inherit;-o-transform-style:inherit;transform-style:inherit;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1em;word-wrap:break-word;word-break:initial;overflow:hidden}.tile__body .tile__body,.tile--s .tile__body,.tile--info .tile__body,.tile__body .tile--s,.tile--s .tile--s,.tile--info .tile--s,.tile__body .tile--info,.tile--s .tile--info,.tile--info .tile--info{padding:0}.tile__body.can-expand{padding-bottom:3em}.tile__body.has-foot{padding-bottom:2.37em}.tile__body.has-foot--2{padding-bottom:3.74em}.tile__body.has-foot--3{padding-bottom:5.11em}.tile__body.has-foot--4{padding-bottom:6.48em}.tile__body.has-segments{padding-left:0;padding-right:0}.tile__body .date-badge{position:absolute;bottom:1em;right:1em}.tile__foot{max-height:2.37em;position:absolute;height:auto;bottom:0;right:0;left:0;padding-top:3px;padding-bottom:.75em;padding-left:1em;padding-right:1em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tile__foot--2{max-height:3.74em;white-space:normal}.tile__foot--3{max-height:5.11em;white-space:normal}.tile__foot--4{max-height:6.48em;white-space:normal}.tile__title{font-weight:600;color:#222;padding:0;overflow:hidden;line-height:1.25;height:2.5em;margin-bottom:0.7em;margin-top:0;text-overflow:ellipsis;text-overflow:-o-ellipsis-lastline;display:block;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.tile__title a{color:inherit}.tile__title a:hover{text-decoration:underline;color:inherit}.tile__title a:visited{color:#888}.is-mobile .tile__title{margin-bottom:.25em}.tile__title.with-sub,.is-mobile .tile__title.with-sub{margin-bottom:0}.tile__title.has-sub--a{padding-bottom:18.72px;padding-bottom:1.3rem}.has-sub--a .tile__title__main{max-height:100%;overflow:hidden;display:block}.tile__sub,.tile__title__sub,.tile__neighborhood,.tile__sub--2{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;text-transform:capitalize;font-weight:normal;display:block;color:#999}.tile__sub{margin-bottom:1em;height:1.3em}.tile__sub--2{white-space:normal;margin-bottom:0.4em;padding-bottom:0;height:2.6em}.tile__title--1,.tile__title--1lg{display:block;white-space:nowrap;height:1.25em}.tile__title--1{font-size:1.2em}.tile__title--1lg{font-size:1.5em}.tile__title--2{font-size:1.2em}@media only screen and (min-width: 590px) and (max-height: 738px){.tile__title--2{display:block;white-space:nowrap;height:1.25em}}.tile__title--3,.tile__title--3sm,.tile__title--3lg{-webkit-line-clamp:3;max-height:3.75em;height:3.75em;font-weight:normal}.tile__title--3sm{font-size:17.28px;font-size:1.2rem}.tile__title--3lg{font-size:18.72px;font-size:1.3rem}.tile__title--4{-webkit-line-clamp:4;max-height:4.6em;height:4.6em;font-weight:normal;line-height:1.15;font-size:1.5em}@media only screen and (min-width: 590px) and (max-height: 738px){.tile__title--4{font-size:1.35em}}.is-mobile .tile__title--4{margin-bottom:.5em}.tile__title--min{height:auto}.tile__content{overflow:hidden;display:block;height:auto}.tile__content br{display:none}.tile__content--sm{height:4em}.has-foot .tile__content--sm{height:2.9em}.tile__content--lg{height:8em}.has-foot .tile__content--lg{height:6.8em}.tile__link{color:#999}.tile__link img{display:inline-block;vertical-align:middle}.tile__icon{max-width:51px;max-height:47px;margin:0 0 0 .5em;float:right}.tile__icon--left{margin:0 .5em 0 0;float:left}.tile__icon--pin{background-image:url("/assets/map-pin.png");background-size:25px 35px;line-height:27px;height:35px;width:25px;text-align:center;display:block;font-weight:600;color:#333}.svg .tile__icon--pin{background-image:url("/assets/map-pin.svg")}.tile__more-wrap{display:inline-block;position:relative;line-height:1.35em;vertical-align:bottom}.tile__more-link{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;margin-right:1.5em;display:block;color:#999}.tile__more-link:hover .tile__source{color:inherit}.highlight .tile__source{color:#4495d4}.tile__favicon{max-width:16px;max-height:16px;margin-top:-3px;vertical-align:middle;margin-right:.5em}.tile__icon--ab{position:absolute;top:1em;right:1em}.tile__rule{margin:0;padding:0;height:0;width:auto;border:none;border-bottom:1px solid #f3f3f3}.tile__sep{margin:0 .5em;top:0.05em;height:0.8em}.tile__count{color:#aaa}.tile__count__icon{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-top:-2px;margin-right:2px;font-size:1.25em;display:inline-block;vertical-align:middle}.tile__expand{position:absolute;width:100%;bottom:0;right:0;left:0;border-top:1px solid #e6e6e6;background-color:#fafafa;color:#c9c9c9;display:block;text-align:center;cursor:pointer;height:2em;padding:0}.tile__expand:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\76";line-height:1.7;font-size:16px;display:inline}.is-open .tile__expand:before{content:"\5e"}.highlight .tile__expand,.tile__expand:hover{color:rgba(150,150,150,0.7)}.tile__expand:active{background-color:#fff}.is-selected .tile__expand{color:rgba(150,150,150,0.7)}.tile__expand-icon{position:absolute;right:0;top:0}.tile__expand-icon:before{content:"\2295";color:#aaa;font-size:16px;line-height:1}.is-selected .tile__expand-icon:before{content:"\229d"}.tile__check{pointer-events:none;font-style:normal;position:absolute;bottom:.5em;right:.5em;font-size:15px;font-size:1.05rem;z-index:1}.tile__check,.tile__check:hover{color:#fff;text-decoration:none}.tile__check:visited,.tile__check:visited:hover{color:#c3c3c3}.tile__check:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2611";line-height:1}.tile__rating{color:rgba(150,150,150,0.7);margin-bottom:-.25em;line-height:1.5}.tile__rating a{vertical-align:top;display:inline-block;color:inherit}.tile__rating a:hover{color:#4495d4}.tile__rating .review-count{vertical-align:top;display:inline-block}.tile__rating .stars{font-size:14.4px;font-size:1rem;top:1px;top:.069444rem;vertical-align:top;line-height:0}.tile__rating--right .stars{float:right;margin-right:1px}.tile__rating--left .stars{float:left;margin-left:-1px}.tile__rating--left .tile__source{float:right}.tile__source{color:#999;overflow:hidden;display:block;height:1.5em}.tile__price{color:#ddd}.tile__price b{font-weight:400;color:#222;position:relative}.tile__phone{display:block}.tile__phone:hover{color:#00278e}.tile__neighborhood{margin-bottom:.5em;display:block}.tile__hours-today{color:#222;padding-bottom:.25em}.tile__hours-today__label{margin-right:.5em}.tile__hours-today__hours{color:#333}.tile__hours-today__hours.hours-closed,.tile__hours-today__hours.hours-closed:hover{color:#999;text-decoration:none}.tile__hours-full{display:none}.is-showing-hours .tile__hours-full{display:block;position:absolute;width:100%;bottom:0;border-top:1px solid #eee;padding-top:1em;color:#333}.tile__hours-full__table{width:100%}.tile__hours-full__table tr{line-height:1.5em}.tile__hours-full__current td{font-weight:bold}.tile__hours-full__day{width:15%;min-width:3em;position:relative}.tile__hours-full__current .tile__hours-full__day:before{content:"";display:block;position:absolute;top:0;left:-1em;width:4px;height:100%;background-color:#de5833}.tile__hours__close{display:block;position:absolute;right:0;top:1em;color:#222;cursor:pointer}.tile__hours__close,.tile__hours__close:hover{text-decoration:none}.dropdown--directions{height:30px;vertical-align:middle}.dropdown--directions .dropdown__button{height:30px}.tile__title__sub,.tile__neighborhood,.tile__sub,.tile__sub--2,.tile__tx{font-size:12.528px;font-size:.87rem}.tile--a{background-color:#f7f7f7}.tile--dark{background-color:#424242;color:#d9d9d9}.tile--dark .tile__title{color:#fff}.tile--dark .tile__link{color:#fff}.tile--c,.tile--m{display:inline-block;width:17em}.tile--c--w{display:inline-block;width:20em}.tile--c--n{display:inline-block;width:12em}.tile--e{-webkit-tap-highlight-color:rgba(0,0,0,0)}.tile--f{-webkit-transform:rotateY(0) translate3d(0, 0, 50px);-moz-transform:rotateY(0) translate3d(0, 0, 50px);-ms-transform:rotateY(0) translate3d(0, 0, 50px);-o-transform:rotateY(0) translate3d(0, 0, 50px);transform:rotateY(0) translate3d(0, 0, 50px);-webkit-transform-origin:center center -50px 50%;-moz-transform-origin:center center -50px 50%;-ms-transform-origin:center center -50px 50%;-o-transform-origin:center center -50px 50%;transform-origin:center center -50px 50%;-webkit-tap-highlight-color:rgba(0,0,0,0);background:none !important}.tile--f.highlight .tile--f__main{border-color:rgba(150,150,150,0.7);outline:1px solid rgba(150,150,150,0.7)}.tile--f.highlight:active .tile--f__main{border-color:#de5833;outline-color:#de5833}.tile--f.is-selected .tile--f__alt{border-width:2px;border-color:rgba(150,150,150,0.7);visibility:visible;opacity:1}.tile--f:before{content:"";display:block;position:absolute;z-index:-1;height:100%;width:100%;bottom:0;right:0;left:0;top:0}.tile--f__main,.tile--f__alt{-webkit-transition:-webkit-transform .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:-moz-transform .3s ease-in-out 0s;-o-transition:-o-transform .3s ease-in-out 0s;transition:transform .3s ease-in-out 0s;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff;height:100%;z-index:1}.tile--f__alt{position:absolute;visibility:hidden;width:100%;opacity:0;bottom:0;right:0;left:0;top:0}.csstransforms3d .tile--f{border:none;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:rotateZ(0);-moz-transform:rotateZ(0);-ms-transform:rotateZ(0);-o-transform:rotateZ(0);transform:rotateZ(0)}.csstransforms3d .tile--f.is-selected{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.csstransforms3d .tile--f.is-selected .tile--f__main{-webkit-transform:rotateZ(0) rotateY(-180deg) translate3d(0, 0, 0);-moz-transform:rotateZ(0) rotateY(-180deg) translate3d(0, 0, 0);-ms-transform:rotateZ(0) rotateY(-180deg) translate3d(0, 0, 0);-o-transform:rotateZ(0) rotateY(-180deg) translate3d(0, 0, 0);transform:rotateZ(0) rotateY(-180deg) translate3d(0, 0, 0)}.csstransforms3d .tile--f.is-selected .tile--f__alt{-webkit-transform:rotateZ(0) rotateY(0) translate3d(0, 0, 0);-moz-transform:rotateZ(0) rotateY(0) translate3d(0, 0, 0);-ms-transform:rotateZ(0) rotateY(0) translate3d(0, 0, 0);-o-transform:rotateZ(0) rotateY(0) translate3d(0, 0, 0);transform:rotateZ(0) rotateY(0) translate3d(0, 0, 0)}.csstransforms3d .tile--f__main,.csstransforms3d .tile--f__alt{border:1px solid #e3e3e3;border-bottom-color:#cacaca}.csstransforms3d .tile--f__main{-webkit-transform:rotateZ(0) rotateY(0) translate3d(0, 0, 0);-moz-transform:rotateZ(0) rotateY(0) translate3d(0, 0, 0);-ms-transform:rotateZ(0) rotateY(0) translate3d(0, 0, 0);-o-transform:rotateZ(0) rotateY(0) translate3d(0, 0, 0);transform:rotateZ(0) rotateY(0) translate3d(0, 0, 0)}.csstransforms3d .tile--f__alt{-webkit-transform:rotateZ(0) rotateY(180deg) translate3d(0, 0, 0);-moz-transform:rotateZ(0) rotateY(180deg) translate3d(0, 0, 0);-ms-transform:rotateZ(0) rotateY(180deg) translate3d(0, 0, 0);-o-transform:rotateZ(0) rotateY(180deg) translate3d(0, 0, 0);transform:rotateZ(0) rotateY(180deg) translate3d(0, 0, 0);visibility:visible;min-height:100%;height:auto;opacity:1;top:-1px;left:-1px;right:-1px;bottom:-1px}.tile--m{text-align:center;background-color:#e0e0e0;color:#666;cursor:pointer;border:none}.tile--m:hover{background-color:#e8e8e8}.tile--m.is-loading{background-color:#fff;color:#fff}.tile--m.is-loading .tile__body,.tile--m.is-loading .tile--m--mob{visibility:hidden}.tile--m .tile__body{overflow:visible}.tile--m .loader{position:absolute;top:50%;left:50%;margin-left:-16px;margin-top:-16px}.is-mobile .tile--m .loader:after{display:none}.tile--m__count{display:block;font-size:3em;margin-bottom:.25em;margin-top:.25em}.tile--m__title{display:block;font-size:2em;margin-bottom:0;margin-top:1em}.tile--m__subtitle{display:block;margin-bottom:.5em;margin-top:.5em}.tile--m__icon{font-style:normal;display:block;font-size:1.5em;margin-top:1em}.tile--m__title+.tile--m__icon,.tile--m__subtitle+.tile--m__icon{margin-top:0}.tile--m__icon--l{position:absolute;margin-top:-.8em;left:0;right:0;top:50%;font-size:3.8em}.tile--m__icon--l+.tile--m__subtitle{position:absolute;margin-bottom:-2.5em;bottom:50%;right:0;left:0}.tile--m--mob{display:none}.is-mobile .tile--m--mob{display:block;text-transform:capitalize}.tile--s h1,.tile--s h2,.tile--s h3,.tile--s h4,.tile--s h5,.tile--s h6{font-weight:600;padding-top:0}.tile--mid{margin-left:auto;margin-right:auto}.detail{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.01),inset 0 -1px 0 rgba(0,0,0,0.01);-moz-box-shadow:inset 0 1px 0 rgba(0,0,0,0.01),inset 0 -1px 0 rgba(0,0,0,0.01);box-shadow:inset 0 1px 0 rgba(0,0,0,0.01),inset 0 -1px 0 rgba(0,0,0,0.01);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#e5e5e5;overflow:hidden;clear:both;border-top:1px solid #c7c7c7;border-bottom:1px solid #c7c7c7;position:relative;top:0;left:0;width:100%;z-index:1}.is-expanded .detail{position:absolute}.detail.is-hidden{border-color:transparent !important;background:none !important;display:none;padding-bottom:0;padding-top:0;bottom:0;height:0}.is-mobile .detail{-webkit-overflow-scrolling:touch;-webkit-box-flex:1;overflow:auto;padding-top:0;visibility:visible;position:fixed;top:0;left:0;width:100%;height:100%;z-index:100;opacity:1}.is-mobile .detail.is-hidden{visibility:hidden;z-index:-5;opacity:0}.detail--slider{margin-bottom:-1px}.is-mobile .detail--slider{border-bottom:none}.detail--d{background-color:#e5e5e5;border-color:#c7c7c7}.detail--d .detail__body{border-color:#c7c7c7}.detail--l,.detail--products,.detail--qa,.detail--about{background-color:#fafafa;border-color:#dbdbdb}.detail--l .detail__body,.detail--products .detail__body,.detail--qa .detail__body,.detail--about .detail__body{border-color:#e3e3e3}.detail--s{background:none}.detail--s .detail__pane{line-height:initial;overflow:visible;height:auto}.detail--s .detail__media{padding-left:0;padding-right:1.8em;height:auto;width:auto}.detail--s .detail__media__img{vertical-align:middle;position:relative;max-width:200px}.detail--s .detail__body__content{padding-right:0;display:block}@media only screen and (max-width: 590px){.detail--s .detail__media{padding-right:1em}.detail--s .detail__body{line-height:inherit;padding-right:0;padding-left:0;border-left:none;border-top:none}}.detail__wrap{position:relative;height:100%}.is-mobile .detail__wrap{overflow:hidden}.detail__inner{position:static;height:100%;width:100%}.detail--xd{-webkit-transition:background-color .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:background-color .3s ease-in-out 0s;-o-transition:background-color .3s ease-in-out 0s;transition:background-color .3s ease-in-out 0s;background-color:#222}.detail--xd.is-closing{background-color:rgba(0,0,0,0.65)}.detail--xd .tile-nav--sm{background-color:#333;color:#888}.detail--xd .c-detail__user,.detail--xd .c-detail__count,.detail--xd .c-detail__date,.detail--xd .detail__close:hover{color:#c3c3c3;text-decoration:none}.detail--xd .c-detail__title{color:#fff}.detail--xd .sep{border-color:#444}.detail--xd .c-detail__btn{background-color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.75);color:#aaa}.is-mobile .detail--xd{border-top:none}.is-mobile .detail--xd .detail__close{-webkit-border-radius:100%;-moz-border-radius:100%;-ms-border-radius:100%;-o-border-radius:100%;border-radius:100%;-webkit-transform:translateY(-10px);-moz-transform:translateY(-10px);-ms-transform:translateY(-10px);-o-transform:translateY(-10px);transform:translateY(-10px);-webkit-transition:opacity,-webkit-transform .2s linear;-moz-transition:opacity,-moz-transform .2s linear;-o-transition:opacity,-o-transform .2s linear;transition:opacity,transform .2s linear;padding:10px;display:block;width:16px;height:16px;line-height:16px;text-align:right;top:10px;right:10px;background-color:rgba(34,34,34,0.75);color:#fff;opacity:0}.is-mobile .detail--xd.has-focus .detail__close{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0);opacity:1}.is-mobile .detail--xd .detail__controls{display:none}.is-mobile .detail--xd .detail__pane{overflow:hidden}.is-mobile .detail--xd.detail .detail__body{-webkit-transition:opacity,-webkit-transform .2s ease-in-out;-moz-transition:opacity,-moz-transform .2s ease-in-out;-o-transition:opacity,-o-transform .2s ease-in-out;transition:opacity,transform .2s ease-in-out;-webkit-transform:translateY(10px);-moz-transform:translateY(10px);-ms-transform:translateY(10px);-o-transform:translateY(10px);transform:translateY(10px);position:absolute;display:block;top:auto;bottom:0;left:0;width:auto;height:auto;padding:20px;background-color:rgba(34,34,34,0.75);z-index:2;opacity:0}.is-mobile .detail--xd.has-focus .detail__body{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0);opacity:1}.tile-nav--sm{display:inline-block;text-align:center;width:2.5em;height:2.5em;line-height:2.5em;color:#666;background-color:#d1d1d1}.tile-nav--sm:active{-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s}.detail__close{position:absolute;font-size:0.95em;top:.25em;right:0;padding:1em;cursor:pointer;color:#888;z-index:2}.detail__close:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\58";font-size:16px;font-size:1.111111rem;left:0.05em}.detail__close:hover{color:#222}.detail__close:active{color:#000}.is-mobile .detail__close{top:0;padding:16px;right:0}.detail__panes{height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.detail__pane{overflow:hidden;overflow-y:auto;position:absolute;display:none;top:0;left:0}@media only screen and (max-height: 318.75px), only screen and (max-height: 382.5px) and (min-width: 425px){.is-mobile .detail__pane{display:table}}.detail__media,.detail__body{position:relative}.detail__media{float:left;height:100%;width:65%}@media only screen and (max-width: 590px){.detail__media{width:100%}}.is-mobile .detail__media{max-height:60%;width:auto;top:1em;float:none}@media only screen and (max-height: 318.75px), only screen and (max-height: 382.5px) and (min-width: 425px){.is-mobile .detail__media{display:table-cell;vertical-align:middle;top:0;width:50%;height:100%;max-height:none}}.detail__media__img-wrapper{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;overflow:hidden;display:block;height:100%}.detail__media__img-link,.detail__media__img-bg,.detail__media__img-highres,.detail__media__img-thumbnail{position:absolute;top:0;left:0;bottom:0;margin-top:auto;margin-bottom:auto;max-height:100%}.is-expanded .detail__media__img-link,.is-expanded .detail__media__img-bg,.is-expanded .detail__media__img-highres,.is-expanded .detail__media__img-thumbnail{margin:auto;right:0}.detail__media__img-thumbnail{object-fit:cover}.detail__media__img-highres{display:none;z-index:3;color:transparent}.detail__media__img-highres:-moz-loading{visibility:hidden}.detail__media__img-thumbnail{z-index:2}.detail__media__img-bg{background:url("/assets/transparency-bg.jpg") repeat;background-size:30px;z-index:1}.detail__media__placeholder,.detail__media__img,.detail__media__vid{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;height:100%;width:100%}.detail__media__img{max-height:100%;height:auto;width:auto}.detail__body{overflow:hidden;padding-left:16px;vertical-align:middle;position:relative}@media only screen and (max-width: 590px){.detail__body{border-top:1px solid #e3e3e3;border-left:none;padding-right:16px}}.is-mobile .detail__body{border-top:none;position:static;line-height:initial;padding-top:32px;padding-left:0;padding-right:0;bottom:auto;top:60%;left:0;right:0}@media only screen and (max-height: 318.75px), only screen and (max-height: 382.5px) and (min-width: 425px){.is-mobile .detail__body{top:0;width:50%;left:50%;height:100%;padding-top:0;display:table-cell;vertical-align:middle;position:static;padding-left:16px}}.detail__controls{position:absolute;line-height:normal;bottom:16px;right:16px;left:auto}.detail__controls .tile-nav--sm{font-size:12px;font-size:.833333rem}.detail__body__content{padding-right:15%}.detail--l .detail__media,.detail--products .detail__media,.detail--qa .detail__media,.detail--about .detail__media{background-color:#fff}.detail--l .detail__media:after,.detail--products .detail__media:after,.detail--qa .detail__media:after,.detail--about .detail__media:after{background-color:rgba(0,0,0,0.02);pointer-events:none;content:""}.lt-ie9 .detail--l .detail__media,.detail--l .lt-ie9 .detail__media,.lt-ie9 .detail--products .detail__media,.detail--products .lt-ie9 .detail__media,.lt-ie9 .detail--qa .detail__media,.detail--qa .lt-ie9 .detail__media,.lt-ie9 .detail--about .detail__media,.detail--about .lt-ie9 .detail__media{background:none}.result,.related-searches{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-font-smoothing:subpixel-antialiased;-webkit-tap-highlight-color:rgba(0,0,0,0);margin-bottom:1.2em;position:relative;word-wrap:break-word;border-radius:4px;border-radius:var(--default-border-radius);border:1px solid transparent}.result.highlight,.related-searches.highlight{border-color:#e5e5e5}.result--ad--good,.related-searches--ad--good{margin-bottom:1em}.result__a{vertical-align:middle;display:inline-block;max-width:100%;color:#00278e}.highlight .result__a,.highlight .result__a:hover{color:#00278e}.result__a:hover{color:#00278e;text-decoration:underline}.result__a:visited,.result__a:visited:hover{color:#6c00a2}@media only screen and (min-width: 864px){.result__a{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;line-height:1.22;margin-bottom:-0.05em}.result--img .result__a{white-space:normal;overflow:visible}}.result__body{padding-left:10px;padding-right:10px;padding-top:.5em;padding-bottom:.5em}.result__body.highlight{background-color:#f7f7f7}.is-mobile .result__body{padding:14px 16px}.result__title{position:static;overflow:hidden;display:block;font-size:1.31em;vertical-align:middle;line-height:1.15;padding:0;margin:0;margin-bottom:0.15em;max-width:100%}.result--url-above-snippet .result__title{margin-bottom:0}.result__title .result__icon{display:none}.result__image{float:right;margin-left:16px;height:130px;width:30%;overflow:hidden;position:relative;border-radius:4px;border-radius:var(--default-border-radius)}.result__image__img{width:100%;height:100%;background-size:cover;background-position:center;object-fit:cover;object-position:top;position:absolute;top:0;left:0;bottom:0;right:0}.result__check{cursor:default;color:#fff;position:absolute;right:100%;top:0.7em;margin-right:1em;font-size:0.8em;width:1em;white-space:nowrap;speak:none;display:none}.result__check,.result__check:before,.result__check:after{-webkit-transition:all .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:all .3s ease-in-out 0s;-o-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s}.result__check:before,.result__check:after{display:inline-block}.result__check:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2611";line-height:1;float:right}.result__check:hover,.highlight .result__check:hover{text-decoration:none}.result__check:visited{color:#c3c3c3}.result__check__tt{-webkit-border-radius:1em;-moz-border-radius:1em;-ms-border-radius:1em;-o-border-radius:1em;border-radius:1em;font-size:0.76em;line-height:2;height:2em;bottom:2.5em;left:-0.95em}.result__check:hover .result__check__tt{-webkit-transition-delay:.75s;-moz-transition-delay:.75s;-o-transition-delay:.75s;transition-delay:.75s;visibility:visible;opacity:1}.result__snippet{color:#494949;line-height:1.45;margin:0 0 0.2em}.result__snippet a{color:inherit}.result__snippet b,.result__snippet strong{color:#494949}.result--url-above-snippet .result__snippet{margin:0}.result--ad--good .result__snippet{color:inherit}.larger-ad-navigational .result__a{font-size:23px}.result__extras{display:flex;position:relative}.result--url-above-snippet .result__extras{min-height:1.57em;margin:1px 0 2px;top:0}.result__extras__url{white-space:nowrap;overflow:hidden;width:100%;color:#666}.highlight .result__extras__url,.full-urls .result__extras__url,.result--ad .result__extras__url{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis}.result--img .result__extras__url{width:auto}.result__date{color:#888}.result__date:after{padding:0 5px;content:"\00B7"}.result__url,.result__url:active,.result__url:visited:focus{color:#20692b}.result__url:hover{color:#20692b}.result__url__domain{display:inline}.result__icon{overflow:hidden;display:inline-block;vertical-align:middle;margin-top:-3px;width:16px;margin-right:.5em}.result--ad--small .result__icon{display:none}.result__icon .result__icon__img,.result__icon .result__icon img{vertical-align:middle;max-width:16px;margin-top:0}.result__url__full{opacity:0;visibility:hidden}.full-urls .result__url__full{opacity:1;visibility:visible}.result__extras__sep{padding:0 5px}.highlight{cursor:pointer}.highlight .result__url__full{visibility:visible;opacity:1}.sponsored__url:hover,.result--ad .result__url:hover{text-decoration:underline}.result--ad{border:none;cursor:default;background:none;margin-bottom:.7em}.result--ad.highlight,.result--ad.highlight:active{background:none}.result--ad.result--ad--small .result__a{font-size:0.75em}.result--ad.result--ad--small .result__title{margin-bottom:5px}.result--ad.result--ad--small .result__snippet{font-size:0.9em}.result--ad.result--ad--small .result__extras{font-size:0.9em}.result--ad.result--ad--small .result--url-above-snippet .result__snippet{margin-bottom:0}.result--ad.result--ad--small .result--url-above-snippet .result__extras{margin-bottom:5px;height:auto}.result--ad.result--ad--small .result--url-above-snippet .result__extras__url{line-height:1.1}.result--ad .result__a{display:inline;white-space:normal}.result--ad .result__check{display:none}.result--ad .result__extras__url{display:inline-block;width:auto;padding-right:0}.result--ad .sponsored__info{width:auto;position:absolute;bottom:0;right:0}.result--more{cursor:default;position:relative;margin-bottom:0;bottom:0;right:0;left:0;padding:0 10px;width:582px;z-index:100}.is-mobile .result--more{margin:21px 0;padding:0 16px}@media only screen and (max-width: 650px){.result--more{width:auto}}.set-wide .result--more,.set-super-wide .result--more{width:auto}.result--more.is-loading{background:none !important;border-top:1px solid #ddd;display:block;text-align:center;line-height:3.2;margin-top:1.3em;margin-right:10px;margin-left:10px}.is-mobile .result--more.is-loading{border:0;height:52px;margin:21px 0;padding:0 16px}.result--more.is-loading .loader{vertical-align:middle;display:inline-block}.result--more__btn{line-height:2.8;font-weight:600;font-size:1.1em;text-transform:capitalize}.is-loading .result--more__btn{display:none}.result--more__btn:hover{background-color:#fafafa}.is-mobile .result--more__btn{border-radius:100px}.result--sep{cursor:default;margin:1em auto 1em;padding-top:0;padding-bottom:0;line-height:1.5;height:1.5em}.result--sep--hr:before{content:"";position:absolute;top:.75em;left:10px;right:20px;background-color:#ededed;display:block;height:1px}.result--sep--hr.has-pagenum:before{left:30px}.result__type,.result__pagenum{padding-top:1px;padding-right:0.35em;padding-left:0.35em;margin-top:-0.2em;line-height:1.3;font-weight:600;top:-1px}.result__type,.result__pagenum{background-color:#d0d0d0;color:#666}.result__pagenum{margin-top:0;top:0}.result__pagenum--side{padding:0;background-color:transparent}.deep_image{height:75px;width:75px;position:absolute;background-repeat:no-repeat;background-position:top right;background-size:auto 75px}@media only screen and (max-width: 590px){.result,.result__check,.result__check:before{-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s}.result__check{display:none}.result__title{margin-bottom:.25em}.sitelinks{margin:0}}.is-mobile .results_links_deep,.is-mobile .results_links,.is-mobile .result--news,.is-mobile .related-searches{border-radius:4px;border-radius:var(--default-border-radius);box-shadow:0 2px 3px rgba(0,0,0,0.06);border:1px solid rgba(150,150,150,0.3);border-bottom-color:rgba(125,125,125,0.3);margin:0 0 7px 0}.is-mobile .results_links_deep.highlight,.is-mobile .results_links.highlight,.is-mobile .result--news.highlight,.is-mobile .related-searches.highlight{box-shadow:0 2px 3px rgba(0,0,0,0.1);border:1px solid rgba(150,150,150,0.7);border-bottom-color:rgba(125,125,125,0.7)}.is-link-style-exp:not(.dark-header):not(.dark-bg) .result__a,.is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__separator,.is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__title,.is-link-style-exp:not(.dark-header):not(.dark-bg) .msg--spelling a,.highlight .is-link-style-exp:not(.dark-header):not(.dark-bg) .result__a,.highlight .is-link-style-exp:not(.dark-header):not(.dark-bg) .result__a:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .result__a:hover,.highlight .is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__separator,.highlight .is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__separator:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__separator:hover,.highlight .is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__title,.highlight .is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__title:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__title:hover,.highlight .is-link-style-exp:not(.dark-header):not(.dark-bg) .msg--spelling a,.highlight .is-link-style-exp:not(.dark-header):not(.dark-bg) .msg--spelling a:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .msg--spelling a:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .result__snippet .sponsored__sitelink,.is-link-style-exp:not(.dark-header):not(.dark-bg) .result__snippet .sponsored__sitelink:focus,.is-link-style-exp:not(.dark-header):not(.dark-bg) .result__snippet .sponsored__sitelink:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .badge--ad,.is-link-style-exp:not(.dark-header):not(.dark-bg) .badge--ad:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .badge--ad:focus,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__official-url,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__official-url:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__more-at,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__more-at-bottom,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__more-at:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__more-at-bottom:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module--carousel__body__title,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link:active,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link:focus,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link a,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link a:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link a:active,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link a:focus,.is-link-style-exp:not(.dark-header):not(.dark-bg) .js-forecast-module-detail-more.tx-clr--blue-dark,.is-link-style-exp:not(.dark-header):not(.dark-bg) .vertical--map__search-web .module__link,.is-link-style-exp:not(.dark-header):not(.dark-bg) .bing .tile__title--pr a,.is-vertical-tabs-exp .module.module--carousel .module__footer,.is-vertical-tabs-exp .module.module--images .module__footer,.is-vertical-tabs-exp .is-mobile .module--images .module__footer,.is-mobile .is-vertical-tabs-exp .module--images .module__footer,.is-vertical-tabs-exp .module.module--carousel .module__footer:hover,.is-vertical-tabs-exp .module.module--carousel .module__footer:active,.is-vertical-tabs-exp .module.module--images .module__footer:hover,.is-vertical-tabs-exp .is-mobile .module--images .module__footer:hover,.is-mobile .is-vertical-tabs-exp .module--images .module__footer:hover,.is-vertical-tabs-exp .module.module--images .module__footer:active,.is-vertical-tabs-exp .is-mobile .module--images .module__footer:active,.is-mobile .is-vertical-tabs-exp .module--images .module__footer:active{color:#1A0DAB}.is-link-style-exp:not(.dark-header):not(.dark-bg) .tooltip-link,.is-link-style-exp:not(.dark-header):not(.dark-bg) .tooltip-link:visited,.is-link-style-exp:not(.dark-header):not(.dark-bg) .no-results__link,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody .is-startrange .pika-day::after,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody .is-endrange .pika-day::after,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link--blue,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link--blue:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link--blue:active,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__link--blue:focus,.is-link-style-exp:not(.dark-header):not(.dark-bg) .module__detail__precip-label span,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal__header .modal__header__clear,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal--dropdown.modal--dropdown--date .modal__footer .modal__list__link,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal--dropdown.modal--dropdown--license .modal__footer .modal__list__link,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal--dropdown--settings .settings-dropdown--section .settings-dropdown--header .settings-dropdown--header--link,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal--dropdown--settings .settings-dropdown--button,.is-link-style-exp:not(.dark-header):not(.dark-bg) .user-loc-link,.is-link-style-exp:not(.dark-header):not(.dark-bg) .user-loc-link:visited,.is-link-style-exp:not(.dark-header):not(.dark-bg) .vertical--map__search-web .module__link,.is-link-style-exp:not(.dark-header):not(.dark-bg) .vertical--map__search-this-area,.is-link-style-exp:not(.dark-header):not(.dark-bg) .vertical--map__search-examples__button,.is-link-style-exp:not(.dark-header):not(.dark-bg):not(.is-mobile) .is-selected .directions-route-overview__print,.is-link-style-exp:not(.dark-header):not(.dark-bg) .sidebar-filter__show-more,.is-vertical-tabs-exp #duckbar .zcm__link.is-active:not(.dropdown__button){color:#3969EF}.is-link-style-exp:not(.dark-header):not(.dark-bg) .btn--primary:not(.is-disabled),.is-link-style-exp:not(.dark-header):not(.dark-bg) .is-checked .frm__switch__label,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal--dropdown--settings .settings-dropdown--section .frm__field.is-checked .frm__switch .frm__switch__label.btn,.is-link-style-exp:not(.dark-header):not(.dark-bg) .set-themes .set-theme.is-checked .set-theme__check,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody td.is-startrange .pika-day,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody td.is-endrange .pika-day,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody td.is-selected .pika-day,.is-link-style-exp:not(.dark-header):not(.dark-bg) .switch.is-on,.is-link-style-exp:not(.dark-header):not(.dark-bg) .cta-icon--selected,.is-link-style-exp:not(.dark-header):not(.dark-bg) .is-selected .directions-search__mode__type__icon,.is-link-style-exp:not(.dark-header):not(.dark-bg) .atb-banner__btn--standalone,.is-link-style-exp:not(.dark-header):not(.dark-bg) .atb-banner__btn--standalone:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .atb-banner__btn--standalone:focus,.is-link-style-exp:not(.dark-header):not(.dark-bg) .atb-banner__btn--standalone:active{background-color:#3969EF;border-color:#3969EF}.is-link-style-exp:not(.dark-header):not(.dark-bg) .btn--primary:hover:not(.is-disabled),.is-link-style-exp:not(.dark-header):not(.dark-bg) .is-checked .frm__switch__label:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal--dropdown--settings .settings-dropdown--section .frm__field.is-checked .frm__switch .frm__switch__label.btn:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .set-themes .set-theme.is-checked .set-theme__check:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .btn--primary:focus:not(.is-disabled),.is-link-style-exp:not(.dark-header):not(.dark-bg) .is-checked .frm__switch__label:focus,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal--dropdown--settings .settings-dropdown--section .frm__field.is-checked .frm__switch .frm__switch__label.btn:focus,.is-link-style-exp:not(.dark-header):not(.dark-bg) .set-themes .set-theme.is-checked .set-theme__check:focus{background-color:#2950BF;border-color:#2950BF}.is-link-style-exp:not(.dark-header):not(.dark-bg) .btn--primary:active:not(.is-disabled),.is-link-style-exp:not(.dark-header):not(.dark-bg) .is-checked .frm__switch__label:active,.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal--dropdown--settings .settings-dropdown--section .frm__field.is-checked .frm__switch .frm__switch__label.btn:active,.is-link-style-exp:not(.dark-header):not(.dark-bg) .set-themes .set-theme.is-checked .set-theme__check:active{background-color:#294698;border-color:#294698}.is-link-style-exp:not(.dark-header):not(.dark-bg) .btn--primary:hover:not(.is-disabled),.is-link-style-exp:not(.dark-header):not(.dark-bg) .is-checked .frm__switch__label:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .btn--primary:focus:not(.is-disabled),.is-link-style-exp:not(.dark-header):not(.dark-bg) .is-checked .frm__switch__label:focus{border-color:#2950BF}.is-link-style-exp:not(.dark-header):not(.dark-bg) .btn--primary:active:not(.is-disabled),.is-link-style-exp:not(.dark-header):not(.dark-bg) .is-checked .frm__switch__label:active{border-color:#294698}.is-link-style-exp:not(.dark-header):not(.dark-bg) .overlay--video-privacy__remember a{color:#769DFF}.is-link-style-exp .header__logo{width:40px;height:40px;background-size:40px 40px}.is-link-style-exp:not(.is-mobile) :is(#links,#ads) .result__title{font-size:1.46em}.is-link-style-exp:not(.is-mobile) #links .result.highlight{border-color:transparent}.is-link-style-exp:not(.is-mobile) .vertical--news .result--news.highlight{border-color:transparent;box-shadow:none;background:transparent}.is-link-style-exp .result__url,.is-link-style-exp .result__url:active,.is-link-style-exp .result__url:visited:focus{color:#222}.is-link-style-exp #links .result__extras__url .result__url{position:relative;top:2px}.is-link-style-exp #links .result.highlight .result__title .result__a{text-decoration:underline}.is-link-style-exp #links .result.highlight .result__title .result__a.no-underline{text-decoration:none}.is-link-style-exp #links .result.highlight .result__url{text-decoration:none}.is-link-style-exp .vertical--news .result__url,.is-link-style-exp .vertical--news .result__url:active,.is-link-style-exp .vertical--news .result__url:visited:focus{color:#222}.is-link-style-exp .vertical--news .result__url__full,.is-link-style-exp .vertical--news .result__url__full:active,.is-link-style-exp .vertical--news .result__url__full:visited:focus{color:#666}.is-link-style-exp .btn{border-radius:var(--default-border-radius)}.is-link-style-exp .cta-icon,.is-link-style-exp .place-detail__cta-icon,.is-link-style-exp .directions-search__mode__type__icon,.is-link-style-exp .module__toggle__chevron--alt{border-radius:50%}.is-link-style-exp .modal__box{border-radius:4px;border-radius:var(--default-border-radius)}.is-link-style-exp .modal__header{border-top-right-radius:4px;border-top-left-radius:4px;border-top-right-radius:var(--default-border-radius);border-top-left-radius:var(--default-border-radius)}.is-link-style-exp .modal__footer{border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-bottom-right-radius:var(--default-border-radius);border-bottom-left-radius:var(--default-border-radius)}.is-link-style-exp .module--images__thumbnails__tile{border-radius:2px}.is-link-style-exp .badge--ad{border-radius:4px}.is-link-style-exp .module--about__img{border-radius:4px}.is-link-style-exp .module--carousel__wrap{position:relative;padding-right:1px;margin:-10px -6px 0}.is-link-style-exp .sidebar-modules .module--carousel .module--carousel__wrap{margin-right:-3%}.is-link-style-exp .module--carousel__right{right:-18px}.is-link-style-exp .module--carousel__left{left:-18px}.is-link-style-exp .module--carousel__item:not(:last-child){margin-right:6px}.is-link-style-exp .module--carousel__item{width:calc((100% - (3 * 2 * 6px)) / 3);height:256px;margin:10px 6px}.is-link-style-exp .module--carousel__item.is-highlighted .module--carousel__body__title{text-decoration:underline}.is-link-style-exp .module--carousel__body__title{font-size:16px;font-weight:400}.is-link-style-exp .module--carousel.has-one-item .module--carousel__wrap{margin:0}.is-link-style-exp .module--carousel.has-one-item .module--carousel__item{margin:0}.is-link-style-exp .module__clickable-header:hover .module__link,.is-link-style-exp .module__clickable-header:hover .module__title__link{text-decoration:underline}.is-link-style-exp .module__clickable-header .module__link:hover{text-decoration:underline}.is-link-style-exp.is-mobile .module--carousel__wrap{margin:0}.is-link-style-exp.is-mobile .module--carousel__item{margin:0 6px 1px 0}.is-link-style-exp.is-mobile.is-not-mobile-device .module--carousel__item{width:calc((100% - (2 * 6px)) / 3)}.is-link-style-exp .user-loc-tooltip.user-loc-tooltip--below-right{border-top-right-radius:0}.is-link-style-exp .user-loc-tooltip.user-loc-tooltip--below{border-radius:var(--default-border-radius)}.is-link-style-exp .vertical--map .user-loc-tooltip .user-loc-tooltip__subtitle{line-height:1.4}.is-link-style-exp .vertical--map .user-loc-tooltip .user-loc-tooltip__subtitle a{display:inline-block}.is-link-style-exp .modal--dropdown--settings{margin-top:-1px}.is-link-style-exp .modal--dropdown.modal--dropdown--settings .settings-dropdown--button,.is-link-style-exp .modal--dropdown.modal--dropdown--date .modal__footer .modal__list__link,.is-link-style-exp .modal--dropdown.modal--dropdown--license .modal__footer .modal__list__link{font-weight:400}.is-link-style-exp .search__button:focus,.is-link-style-exp .search:hover .search__button,.is-link-style-exp .search:hover .search__button:focus,.is-link-style-exp .search--home.has-text .search__button:focus,.is-link-style-exp.is-mobile .search--header.has-text.search--focus .search__button:hover,.is-link-style-exp .search__input:focus ~ .search__button,.is-link-style-exp .search--header.has-text.search--hover .search__button,.is-link-style-exp .search--header.has-text.search--focus .search__button,.is-link-style-exp .search--home.has-text .search__button{background-color:#3969EF;color:white}.is-link-style-exp .result--more__btn{color:#222;background-color:rgba(34,34,34,0.1);border:none !important}.is-link-style-exp .result--more__btn:hover{background-color:rgba(34,34,34,0.2)}.is-link-style-exp .result--more__btn:active{background-color:rgba(34,34,34,0.3)}.is-link-style-exp .module--carousel__item{box-shadow:none}.is-link-style-exp .module--carousel__item:hover{box-shadow:0px 1px 4px rgba(0,0,0,0.1),0px 4px 8px rgba(0,0,0,0.08)}.is-link-style-exp.is-not-mobile-device{min-width:1072px}.is-link-style-exp.is-not-mobile-device #web_content_wrapper .cw,.is-link-style-exp.is-not-mobile-device .vertical.vertical--news .cw{max-width:unset}.is-link-style-exp.is-not-mobile-device #links_wrapper{min-width:1072px}.is-link-style-exp.is-not-mobile-device .results--sidebar{margin-left:calc(var(--max-content-width) + 48px);max-width:448px}.is-link-style-exp.is-not-mobile-device:not(.is-mobile) #ads .results_links,.is-link-style-exp.is-not-mobile-device:not(.is-mobile) #links .results_links_deep{margin-right:8px}.is-link-style-exp.is-not-mobile-device:not(.is-mobile) #ads .results_links .result__body,.is-link-style-exp.is-not-mobile-device:not(.is-mobile) #links .results_links_deep .result__body{max-width:calc(var(--max-content-width) - 72px)}.is-link-style-exp.is-not-mobile-device.set-wide #links_wrapper,.is-link-style-exp.is-not-mobile-device.set-super-wide #links_wrapper{display:flex}.is-link-style-exp.is-not-mobile-device.set-wide .results--sidebar,.is-link-style-exp.is-not-mobile-device.set-super-wide .results--sidebar{flex:1;margin-left:48px}.is-link-style-exp.is-not-mobile-device.set-wide #ads .results_links,.is-link-style-exp.is-not-mobile-device.set-wide #links .results_links_deep,.is-link-style-exp.is-not-mobile-device.set-super-wide #ads .results_links,.is-link-style-exp.is-not-mobile-device.set-super-wide #links .results_links_deep{max-width:unset}.is-link-style-exp.is-not-mobile-device.set-wide .module--places,.is-link-style-exp.is-not-mobile-device.set-super-wide .module--places{max-width:640px}@media only screen and (max-width: 1079px) and (min-width: 591px){.is-link-style-exp.is-not-mobile-device{min-width:1000px}.is-link-style-exp.is-not-mobile-device #links_wrapper{min-width:1000px}.is-link-style-exp.is-not-mobile-device .results--sidebar{margin-left:calc(var(--max-content-width) + 16px);max-width:294px}.is-link-style-exp.is-not-mobile-device .metabar__in,.is-link-style-exp.is-not-mobile-device #duckbar,.is-link-style-exp.is-not-mobile-device .zci__main,.is-link-style-exp.is-not-mobile-device .serp__results,.is-link-style-exp.is-not-mobile-device .footer{padding-left:24px}.is-link-style-exp.is-not-mobile-device .tileview--grid .zci__main,.is-link-style-exp.is-not-mobile-device .tileview--grid .metabar__in{padding-left:0}.is-link-style-exp.is-not-mobile-device .body--serp .header__logo-wrap{margin-left:27.5px}.is-link-style-exp.is-not-mobile-device .body--serp .header__search-wrap{padding-left:82px;max-width:calc(var(--max-content-width) - 58px)}}.is-mobile.is-link-style-exp .module--carousel .module__header{margin-left:10px}.is-mobile.is-link-style-exp .module.module--images .module__header.module__header--link,.is-mobile.is-link-style-exp .module--images .module__header.module__header--link,.is-mobile.is-link-style-exp .module.module--images .module__footer.hide--mob,.is-mobile.is-link-style-exp .module--images .module__footer.hide--mob{display:none}.is-link-style-exp:not(.dark-header):not(.dark-bg) #links .result.is-keyboard-focus:focus-within{background-color:#F2F2F2 !important}.is-link-style-exp:not(.dark-header):not(.dark-bg) .result__a:visited,.is-link-style-exp:not(.dark-header):not(.dark-bg) .result__a:visited:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__separator:visited,.is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__separator:visited:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__title:visited,.is-link-style-exp:not(.dark-header):not(.dark-bg) .sitelink--small__title:visited:hover,.is-link-style-exp:not(.dark-header):not(.dark-bg) .msg--spelling a:visited,.is-link-style-exp:not(.dark-header):not(.dark-bg) .msg--spelling a:visited:hover{color:#6c00a2}.is-link-style-exp:not(.dark-header):not(.dark-bg) .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .custom_date__fields .custom_date__input:focus{border-color:#3969EF}.is-link-style-exp:not(.dark-header):not(.dark-bg) .module--carousel-products .module--carousel__footer{color:#222}.is-link-style-exp:not(.dark-header):not(.dark-bg) .cta-icon--selected,.is-link-style-exp:not(.dark-header):not(.dark-bg) .is-selected .directions-search__mode__type__icon{border-color:#3969EF}.is-link-style-exp:not(.dark-header):not(.dark-bg) .directions-route-overview.is-selected{border-left-color:#3969EF}.is-link-style-exp:not(.dark-header):not(.dark-bg):not(.is-mobile) .is-selected .directions-route-overview__print .directions-route-overview__print__icon{fill:#3969EF}.is-link-breadcrumb-exp.full-urls.breadcrumb-urls #links .result__url__full,.is-link-breadcrumb-exp.full-urls.breadcrumb-urls #links .result__url__full:active,.is-link-breadcrumb-exp.full-urls.breadcrumb-urls #links .result__url__full:visited:focus,.is-link-breadcrumb-exp.full-urls.breadcrumb-urls #ads .result__url__full,.is-link-breadcrumb-exp.full-urls.breadcrumb-urls #ads .result__url__full:active,.is-link-breadcrumb-exp.full-urls.breadcrumb-urls #ads .result__url__full:visited:focus,.is-link-breadcrumb-exp.full-urls.breadcrumb-urls .results--sidebar .result__url__full,.is-link-breadcrumb-exp.full-urls.breadcrumb-urls .results--sidebar .result__url__full:active,.is-link-breadcrumb-exp.full-urls.breadcrumb-urls .results--sidebar .result__url__full:visited:focus{color:#666}.is-link-order-exp :is(#links,#ads) .result__title{letter-spacing:-.01px;margin:0.1em 0px 0.29em 0px}.is-link-order-exp #links .result__body,.is-link-order-exp #ads .result__body,.is-link-order-exp .results--sidebar .result__body{display:flex;flex-direction:column}.is-link-order-exp #links .result__extras,.is-link-order-exp #ads .result__extras,.is-link-order-exp .results--sidebar .result__extras{order:0;letter-spacing:0.2px;margin-bottom:1px}.is-link-order-exp #links .report-ad .ddgsi,.is-link-order-exp #ads .report-ad .ddgsi,.is-link-order-exp .results--sidebar .report-ad .ddgsi{display:none}.is-link-order-exp #links .report-ad__link,.is-link-order-exp #ads .report-ad__link,.is-link-order-exp .results--sidebar .report-ad__link{color:#999;margin-left:0}.is-link-order-exp #links .result__title,.is-link-order-exp #ads .result__title,.is-link-order-exp .results--sidebar .result__title{order:1}.is-link-order-exp #links .result__snippet,.is-link-order-exp #ads .result__snippet,.is-link-order-exp .results--sidebar .result__snippet{order:2}.is-link-order-exp #links .report-ad,.is-link-order-exp #ads .report-ad,.is-link-order-exp .results--sidebar .report-ad{line-height:inherit}.is-related-search-exp .related-searches__title-long,.is-related-search-exp .related-searches__title-short{font-size:20px;line-height:23px;letter-spacing:-0.2px}.is-related-search-exp .related-searches__list{flex:1}.is-related-search-exp .related-searches__list--first{padding-right:0}.is-related-search-exp .related-searches__item{height:40px;margin-bottom:12px;padding-bottom:0;border:1px solid #E5E5E5;border-radius:4px;border-radius:var(--default-border-radius)}.is-related-search-exp .related-searches__item:hover{border-color:#CACACA;text-decoration:underline}.is-related-search-exp .related-searches__item:active{border-color:#ABABAB;text-decoration:underline}.is-related-search-exp .related-searches__item .related-searches__link{display:flex;align-items:center;height:100%;padding:0 12px}.is-related-search-exp .related-searches.at-bottom{padding-right:0px;padding-left:0px}.is-related-search-exp .related-searches.at-bottom .related-searches__lists{display:flex;justify-content:space-between}.is-related-search-exp .related-searches.at-bottom .related-searches__list{max-width:calc(50% - 12px)}.is-related-search-exp .related-searches.at-bottom .related-searches__list--first{padding-right:0}.is-related-search-exp .related-searches.at-bottom .related-searches__item:last-of-type{margin-bottom:0}.is-related-search-exp .related-searches__item-text{display:flex;align-items:center;font-size:15px}.is-related-search-exp .related-searches__item-text span{line-height:16px;white-space:normal}.is-related-search-exp .related-searches__item-text::before{content:'';display:inline-block;width:19px;height:19px;flex-shrink:0;padding-right:0;margin-right:7px;background-image:url("/assets/icons/related/loupe-grey.svg");background-size:contain;background-repeat:no-repeat}.is-related-search-exp.is-mobile .related-searches.at-bottom{border:none;box-shadow:none}.is-related-search-exp.is-mobile .related-searches__title-short{padding-left:10px}.is-related-search-exp.is-mobile .related-searches.at-bottom{padding:0px}.is-related-search-exp.is-mobile .related-searches.at-bottom .related-searches__lists{flex-direction:column}.is-related-search-exp.is-mobile .related-searches.at-bottom .related-searches__list{width:100%;max-width:none}.is-related-search-exp.is-mobile .related-searches.at-bottom .related-searches__link{padding:0}.is-related-search-exp.is-mobile .related-searches.at-bottom .related-searches__list--first{margin-right:0}.is-related-search-exp.is-mobile .related-searches.at-bottom .related-searches__item{padding:0 16px;width:auto}.is-related-search-exp.is-mobile .related-searches.at-bottom .related-searches__item:last-of-type{margin-bottom:12px}.is-related-search-exp.is-mobile .related-searches__item{padding:0 12px}.is-related-search-exp.is-mobile .related-searches__item-text{flex-direction:row;justify-content:start}.is-vertical-tabs-exp .header-wrap{background-color:#fff}.is-vertical-tabs-exp .result--more{width:auto;padding-left:10px;padding-right:16px;border-radius:4px;border-radius:var(--default-border-radius)}.is-vertical-tabs-exp .result--more.is-loading{border-radius:0}.is-vertical-tabs-exp .result--more .btn.result--more{border-radius:4px;border-radius:var(--default-border-radius)}.is-vertical-tabs-exp .result--more__btn{display:flex;align-items:center;justify-content:center;height:41px;padding:0}.is-vertical-tabs-exp .is-loading .result--more__btn{display:none}.is-vertical-tabs-exp .footer__left{padding-left:7px}.is-vertical-tabs-exp .footer_cards{display:flex;box-sizing:border-box;padding-left:10px;padding-right:16px}.is-vertical-tabs-exp .footer__card{width:100%}.is-vertical-tabs-exp .zcm__link:not(.dropdown__button){padding-bottom:8px;margin:auto 10px 0}.is-vertical-tabs-exp:not(.set-align-center):not(.is-mobile-device) .zcm-wrap--header{max-width:unset}.is-vertical-tabs-exp .zcm{padding-left:1px}.is-vertical-tabs-exp:not(.is-mobile-device) .zcm{display:inline-flex;min-width:590px;min-width:var(--max-content-width)}.is-vertical-tabs-exp .zcm-wrap-wrap .zcm--right-fade::before{background-image:linear-gradient(90deg, rgba(255,255,255,0), #fff)}.is-vertical-tabs-exp #duckbar .zcm__item{display:inline-flex;height:38px}.is-vertical-tabs-exp #duckbar .zcm__link:not(.dropdown__button){display:flex;align-items:center;line-height:16px;letter-spacing:-0.1px;height:auto;border-bottom:2px solid transparent}.is-vertical-tabs-exp #duckbar .zcm__link:not(.dropdown__button):hover,.is-vertical-tabs-exp #duckbar .zcm__link:not(.dropdown__button):focus{color:#222}.is-vertical-tabs-exp #duckbar .zcm__link:not(.dropdown__button):active{color:#3969EF}.is-vertical-tabs-exp #duckbar .zcm__link:not(.dropdown__button).is-active{border-color:#3969EF}.is-vertical-tabs-exp #duckbar .zcm__link:not(.dropdown__button).is-active:hover,.is-vertical-tabs-exp #duckbar .zcm__link:not(.dropdown__button).is-active:focus,.is-vertical-tabs-exp #duckbar .zcm__link:not(.dropdown__button).is-active:active{color:#3969EF;border-color:#3969EF}.is-vertical-tabs-exp #duckbar .zcm__link__icon{display:block;margin-right:5px;min-width:11px}.is-vertical-tabs-exp #duckbar .zcm__link__icon svg{display:block;position:relative;top:-1px;height:16px}.is-vertical-tabs-exp #duckbar_new .zcm__link .zcm__link__icon{display:none}.is-vertical-tabs-exp .zcm__sep--h.sep--before{padding-top:4px}.is-vertical-tabs-exp:not(.is-mobile) .dropdown.dropdown--settings .zcm__link{padding-top:1px}.is-vertical-tabs-exp #duckbar .dropdown__button:not(.dropdown__button--no-icon)::after{margin-top:-5px;margin-left:5px}.is-vertical-tabs-exp:not(.is-mobile) .results--main .module-slot,.is-vertical-tabs-exp:not(.is-mobile) .results--main .ia-modules{padding:0 16px 0 10px}.is-vertical-tabs-exp #links.results .result+.module-slot:not(:empty) .module,.is-vertical-tabs-exp #links.results .result+.module-slot:not(:empty) .is-mobile .module--images,.is-mobile .is-vertical-tabs-exp #links.results .result+.module-slot:not(:empty) .module--images{margin-top:20px}.is-vertical-tabs-exp .module.module--carousel,.is-vertical-tabs-exp .is-mobile .module--carousel.module--images,.is-mobile .is-vertical-tabs-exp .module--carousel.module--images{height:auto}.is-vertical-tabs-exp .module--carousel__items{height:auto;padding-bottom:3px}.is-vertical-tabs-exp .module--places{max-width:100%}.is-vertical-tabs-exp .module--images{margin-left:0;margin-right:0}.is-vertical-tabs-exp .module--carousel .module__header,.is-vertical-tabs-exp .module--carousel .module__footer{margin-left:0}.is-vertical-tabs-exp .module.module--carousel .module__header.module__header--link,.is-vertical-tabs-exp .is-mobile .module--carousel.module--images .module__header.module__header--link,.is-mobile .is-vertical-tabs-exp .module--carousel.module--images .module__header.module__header--link,.is-vertical-tabs-exp .module.module--images .module__header.module__header--link,.is-vertical-tabs-exp .is-mobile .module--images .module__header.module__header--link,.is-mobile .is-vertical-tabs-exp .module--images .module__header.module__header--link{font-size:20px;line-height:23px;letter-spacing:-0.2px;color:#222;margin-bottom:10px}.is-vertical-tabs-exp .module.module--carousel .module__header__icon,.is-vertical-tabs-exp .is-mobile .module--carousel.module--images .module__header__icon,.is-mobile .is-vertical-tabs-exp .module--carousel.module--images .module__header__icon,.is-vertical-tabs-exp .module.module--images .module__header__icon,.is-vertical-tabs-exp .is-mobile .module--images .module__header__icon,.is-mobile .is-vertical-tabs-exp .module--images .module__header__icon{position:relative;top:1px;margin-right:8px}.is-vertical-tabs-exp .module.module--carousel .module__footer,.is-vertical-tabs-exp .is-mobile .module--carousel.module--images .module__footer,.is-mobile .is-vertical-tabs-exp .module--carousel.module--images .module__footer,.is-vertical-tabs-exp .module.module--images .module__footer,.is-vertical-tabs-exp .is-mobile .module--images .module__footer,.is-mobile .is-vertical-tabs-exp .module--images .module__footer{display:flex;height:41px;margin-left:0;padding-left:0;justify-content:center;align-items:center;border:1px solid #E5E5E5;box-sizing:border-box;border-radius:var(--default-border-radius);font-size:16px;line-height:19px;letter-spacing:-0.1px}.is-vertical-tabs-exp .module.module--carousel .module__footer:hover,.is-vertical-tabs-exp .is-mobile .module--carousel.module--images .module__footer:hover,.is-mobile .is-vertical-tabs-exp .module--carousel.module--images .module__footer:hover,.is-vertical-tabs-exp .module.module--carousel .module__footer:active,.is-vertical-tabs-exp .is-mobile .module--carousel.module--images .module__footer:active,.is-mobile .is-vertical-tabs-exp .module--carousel.module--images .module__footer:active,.is-vertical-tabs-exp .module.module--images .module__footer:hover,.is-vertical-tabs-exp .is-mobile .module--images .module__footer:hover,.is-mobile .is-vertical-tabs-exp .module--images .module__footer:hover,.is-vertical-tabs-exp .module.module--images .module__footer:active,.is-vertical-tabs-exp .is-mobile .module--images .module__footer:active,.is-mobile .is-vertical-tabs-exp .module--images .module__footer:active{text-decoration:none;border-color:#CACACA}.is-vertical-tabs-exp .module.module--carousel .module__footer:before,.is-vertical-tabs-exp .is-mobile .module--carousel.module--images .module__footer:before,.is-mobile .is-vertical-tabs-exp .module--carousel.module--images .module__footer:before,.is-vertical-tabs-exp .module.module--images .module__footer:before,.is-vertical-tabs-exp .is-mobile .module--images .module__footer:before,.is-mobile .is-vertical-tabs-exp .module--images .module__footer:before{display:none}.is-vertical-tabs-exp .module.module--carousel .module__footer:after,.is-vertical-tabs-exp .is-mobile .module--carousel.module--images .module__footer:after,.is-mobile .is-vertical-tabs-exp .module--carousel.module--images .module__footer:after,.is-vertical-tabs-exp .module.module--images .module__footer:after,.is-vertical-tabs-exp .is-mobile .module--images .module__footer:after,.is-mobile .is-vertical-tabs-exp .module--images .module__footer:after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2192";display:block;margin-left:10px}.is-vertical-tabs-exp .module.module--carousel .feedback-prompt,.is-vertical-tabs-exp .is-mobile .module--carousel.module--images .feedback-prompt,.is-mobile .is-vertical-tabs-exp .module--carousel.module--images .feedback-prompt,.is-vertical-tabs-exp .module.module--images .feedback-prompt,.is-vertical-tabs-exp .is-mobile .module--images .feedback-prompt,.is-mobile .is-vertical-tabs-exp .module--images .feedback-prompt{bottom:-22px}.is-vertical-tabs-exp .module--carousel.module--carousel-products .feedback-prompt,.is-vertical-tabs-exp .module--carousel.module--carousel-autoads .feedback-prompt{bottom:-18px}.is-vertical-tabs-exp .module--carousel.module--carousel-products:not(.has-grid) .badge--ad-wrap,.is-vertical-tabs-exp .module--carousel.module--carousel-products .module--carousel__main-source,.is-vertical-tabs-exp .module--carousel.module--carousel-autoads:not(.has-grid) .badge--ad-wrap,.is-vertical-tabs-exp .module--carousel.module--carousel-autoads .module--carousel__main-source{top:8px;right:5px}.is-vertical-tabs-exp .module--carousel .module__header,.is-vertical-tabs-exp .module--images .module__header{border-radius:0px}.is-vertical-tabs-exp .module.module--images .module__footer,.is-vertical-tabs-exp .is-mobile .module--images .module__footer,.is-mobile .is-vertical-tabs-exp .module--images .module__footer{margin-top:13px}.is-vertical-tabs-exp:not(.is-mobile).is-mobile-device .module--carousel__items{left:0;padding-right:0}.is-vertical-tabs-exp:not(.is-mobile).is-mobile-device .module--carousel__item:first-child{margin-left:6px}.is-vertical-tabs-exp:not(.is-mobile).is-mobile-device .module--carousel__item:last-child{margin-right:6px}.is-vertical-tabs-exp.is-mobile .module--images{border:none;box-shadow:none;border-radius:0}.is-vertical-tabs-exp.is-mobile .module--images .module--images__thumbnails{display:flex;margin-bottom:11px}.is-vertical-tabs-exp.is-mobile .module--images .module--images__thumbnails__tile{border-radius:4px;margin-bottom:0px}.is-vertical-tabs-exp.is-mobile .module--images .module__toggle{display:flex;height:41px;margin-left:0;padding-left:0;justify-content:center;align-items:center;background:white;border:1px solid #E5E5E5;box-sizing:border-box;border-radius:4px;border-radius:var(--default-border-radius);font-size:16px;line-height:19px;letter-spacing:-0.1px}.is-vertical-tabs-exp.is-mobile .module--images .module__toggle:hover,.is-vertical-tabs-exp.is-mobile .module--images .module__toggle:active{text-decoration:none;box-shadow:0 2px 3px rgba(0,0,0,0.06);border-color:#CACACA;color:#2950BF}.is-vertical-tabs-exp.is-mobile .module--images .module__toggle:after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2192";display:block;margin-left:10px}.is-mobile.is-vertical-tabs-exp .zcm{display:inline-flex;min-width:unset}.is-mobile.is-vertical-tabs-exp .module.module--images,.is-mobile.is-vertical-tabs-exp .module--images{margin-bottom:7px}.is-mobile.is-vertical-tabs-exp .result--more{padding-left:0px;padding-right:0px}.nrn-react-div{margin-bottom:1.2rem}.is-mobile .nrn-react-div{margin-bottom:7px}.is-mobile.serp-mobile-ux-2023 .nrn-react-div{margin-bottom:0}.is-mobile.serp-mobile-ux-2023 .nrn-react-div::before,.is-mobile.serp-mobile-ux-2023 .nrn-react-div+.module-slot:not(:empty)::before,.is-mobile.serp-mobile-ux-2023 .ia-modules:not(:empty)::before,.is-mobile.serp-mobile-ux-2023 .module-slot:not(:empty)::before{content:'';display:block;width:calc(100% + 14px);margin-left:-7px;margin-right:-7px;height:6px;background-color:#F2F2F2}.is-mobile.serp-mobile-ux-2023 .module-slot .module:not(.module--about):not(.module--places.is-multiple),.is-mobile.serp-mobile-ux-2023 .module-slot .module--images:not(.module--about):not(.module--places.is-multiple),.is-mobile.serp-mobile-ux-2023 .ia-modules .module:not(.module--about):not(.module--places.is-multiple):first-of-type,.is-mobile.serp-mobile-ux-2023 .ia-modules .module--images:not(.module--about):not(.module--places.is-multiple):first-of-type,.is-mobile.serp-mobile-ux-2023 .ia-modules .react-module:first-of-type{margin-top:14px !important}.is-mobile.serp-mobile-ux-2023 .module--about>.module__header{margin-top:14px !important}.is-mobile.serp-mobile-ux-2023 .module--about,.is-mobile.serp-mobile-ux-2023 .module--places.is-single{margin-bottom:14px !important}.is-mobile.serp-mobile-ux-2023 .module:not(.module--translations),.is-mobile.serp-mobile-ux-2023 .module--images:not(.module--translations){border:none;box-shadow:none;border-radius:0}.is-mobile.serp-mobile-ux-2023 .forecast-wrapper,.is-mobile.serp-mobile-ux-2023 .module--places-multiple{margin-left:-7px;margin-right:-7px}.is-mobile.serp-mobile-ux-2023 .module--forecast .module__top:not(.has-alert){padding-top:0 !important}.is-mobile.serp-mobile-ux-2023 .module--forecast .module__warnings{padding-bottom:14px !important;padding-top:0 !important}.is-mobile.serp-mobile-ux-2023 .module--forecast .module__items{-ms-overflow-style:none;scrollbar-width:none}.is-mobile.serp-mobile-ux-2023 .module--forecast .module__items::-webkit-scrollbar{display:none}.is-mobile.serp-mobile-ux-2023 .module--places.is-multiple{margin-bottom:14px !important}.is-mobile.serp-mobile-ux-2023 .module--places-multiple .module__toggle{width:calc(100% - 14px);margin-left:7px;margin-right:7px}.is-mobile.serp-mobile-ux-2023 .module--places-multiple .module__header,.is-mobile.serp-mobile-ux-2023 .module--places.is-single .module__header{border-radius:0}.is-mobile.serp-mobile-ux-2023 .module--places-multiple .label.mapkit-static__cta,.is-mobile.serp-mobile-ux-2023 .module--places.is-single .label.mapkit-static__cta{font-size:1rem}.is-mobile.serp-mobile-ux-2023 .module--about>.module__header{border-radius:0 !important}.is-mobile.serp-mobile-ux-2023 .module--about .label.mapkit-static__cta{font-size:1rem}.is-mobile.serp-mobile-ux-2023 .ia-module--definitions>.module__content,.is-mobile.serp-mobile-ux-2023 .ia-module--stocks>.module__content{padding-left:8px;padding-right:8px}.is-mobile.serp-mobile-ux-2023 .module--about{padding-left:8px;padding-right:8px}.is-mobile.serp-mobile-ux-2023 .module--about>.module__content{padding-left:0px;padding-right:0px}.is-mobile.serp-mobile-ux-2023 .module--about .module__header--with-image{border-radius:0}.is-mobile.serp-mobile-ux-2023 .module--about .module__header--with-image .label{font-size:1rem}.is-mobile.serp-mobile-ux-2023 .module__toggle,.is-mobile.serp-mobile-ux-2023 .module--carousel-products .module__footer,.is-mobile.serp-mobile-ux-2023 .module--carousel-recipes .module__footer,.is-mobile.serp-mobile-ux-2023 .module--carousel-news .module__footer,.is-mobile.serp-mobile-ux-2023 .module--carousel-videos .module__footer{border:none !important;border-radius:8px !important;font-weight:700 !important;background-color:rgba(0,0,0,0.06) !important;color:rgba(0,0,0,0.84) !important}.is-mobile.serp-mobile-ux-2023 .module__toggle:hover,.is-mobile.serp-mobile-ux-2023 .module--carousel-products .module__footer:hover,.is-mobile.serp-mobile-ux-2023 .module--carousel-recipes .module__footer:hover,.is-mobile.serp-mobile-ux-2023 .module--carousel-news .module__footer:hover,.is-mobile.serp-mobile-ux-2023 .module--carousel-videos .module__footer:hover{background-color:rgba(0,0,0,0.12) !important}.is-mobile.serp-mobile-ux-2023 .module__toggle:active,.is-mobile.serp-mobile-ux-2023 .module--carousel-products .module__footer:active,.is-mobile.serp-mobile-ux-2023 .module--carousel-recipes .module__footer:active,.is-mobile.serp-mobile-ux-2023 .module--carousel-news .module__footer:active,.is-mobile.serp-mobile-ux-2023 .module--carousel-videos .module__footer:active{background-color:rgba(0,0,0,0.18) !important}.is-mobile.serp-mobile-ux-2023 .module--about>.module__toggle,.is-mobile.serp-mobile-ux-2023 .ia-module--definitions>.module__toggle{height:41px !important}.is-mobile.serp-mobile-ux-2023 .module--about>.module__toggle .module__toggle__chevron,.is-mobile.serp-mobile-ux-2023 .ia-module--definitions>.module__toggle .module__toggle__chevron{top:4px !important}.is-mobile.serp-mobile-ux-2023 .module--about>.module__toggle .module__toggle__chevron--collapse,.is-mobile.serp-mobile-ux-2023 .ia-module--definitions>.module__toggle .module__toggle__chevron--collapse{top:-4px !important}.is-mobile.serp-mobile-ux-2023 .module--about>.module__toggle{margin-left:-8px;margin-right:-8px;width:calc(100% + 16px)}.is-mobile.serp-mobile-ux-2023 .module--carousel-products .module--carousel__item,.is-mobile.serp-mobile-ux-2023 .module--carousel-recipes .module--carousel__item,.is-mobile.serp-mobile-ux-2023 .module--carousel-news .module--carousel__item,.is-mobile.serp-mobile-ux-2023 .module--carousel-videos .module--carousel__item{border:none !important;box-shadow:0px 0px 0px rgba(0,0,0,0.03),0px 2px 8px rgba(0,0,0,0.15) !important}.is-mobile.serp-mobile-ux-2023 .module--carousel-products .module--carousel__items,.is-mobile.serp-mobile-ux-2023 .module--carousel-recipes .module--carousel__items,.is-mobile.serp-mobile-ux-2023 .module--carousel-news .module--carousel__items,.is-mobile.serp-mobile-ux-2023 .module--carousel-videos .module--carousel__items{padding-top:4px;margin-bottom:0px !important;padding-bottom:9px}.is-mobile.serp-mobile-ux-2023 .module--images__thumbnails{margin-bottom:18px !important}.is-mobile.serp-mobile-ux-2023 .module--about .module__content{padding-bottom:14px !important}.is-mobile.serp-mobile-ux-2023 .module--carousel-products .module--carousel__wrap,.is-mobile.serp-mobile-ux-2023 .module--carousel-recipes .module--carousel__wrap,.is-mobile.serp-mobile-ux-2023 .module--carousel-news .module--carousel__wrap,.is-mobile.serp-mobile-ux-2023 .module--carousel-videos .module--carousel__wrap{margin-left:-7px;margin-right:-8px}.is-mobile.serp-mobile-ux-2023 .module--carousel-products .module--carousel__wrap>.module--carousel__items,.is-mobile.serp-mobile-ux-2023 .module--carousel-recipes .module--carousel__wrap>.module--carousel__items,.is-mobile.serp-mobile-ux-2023 .module--carousel-news .module--carousel__wrap>.module--carousel__items,.is-mobile.serp-mobile-ux-2023 .module--carousel-videos .module--carousel__wrap>.module--carousel__items{-ms-overflow-style:none;scrollbar-width:none}.is-mobile.serp-mobile-ux-2023 .module--carousel-products .module--carousel__wrap>.module--carousel__items::-webkit-scrollbar,.is-mobile.serp-mobile-ux-2023 .module--carousel-recipes .module--carousel__wrap>.module--carousel__items::-webkit-scrollbar,.is-mobile.serp-mobile-ux-2023 .module--carousel-news .module--carousel__wrap>.module--carousel__items::-webkit-scrollbar,.is-mobile.serp-mobile-ux-2023 .module--carousel-videos .module--carousel__wrap>.module--carousel__items::-webkit-scrollbar{display:none}.is-mobile.serp-mobile-ux-2023 .module--carousel-products .module--carousel__wrap .module--carousel__item:first-of-type,.is-mobile.serp-mobile-ux-2023 .module--carousel-recipes .module--carousel__wrap .module--carousel__item:first-of-type,.is-mobile.serp-mobile-ux-2023 .module--carousel-news .module--carousel__wrap .module--carousel__item:first-of-type,.is-mobile.serp-mobile-ux-2023 .module--carousel-videos .module--carousel__wrap .module--carousel__item:first-of-type{margin-left:7px}.is-mobile.serp-mobile-ux-2023 .module--carousel-products .module--carousel__wrap .module--carousel__item:last-of-type,.is-mobile.serp-mobile-ux-2023 .module--carousel-recipes .module--carousel__wrap .module--carousel__item:last-of-type,.is-mobile.serp-mobile-ux-2023 .module--carousel-news .module--carousel__wrap .module--carousel__item:last-of-type,.is-mobile.serp-mobile-ux-2023 .module--carousel-videos .module--carousel__wrap .module--carousel__item:last-of-type{margin-right:8px}.is-mobile.serp-mobile-ux-2023 .related-searches__title-long,.is-mobile.serp-mobile-ux-2023 .related-searches__title-short,.is-mobile.serp-mobile-ux-2023 .module__header{font-weight:700;font-size:calc(20 * 1rem / (0.9 * 16));line-height:28px}.is-mobile.serp-mobile-ux-2023 .module--carousel .module__header{margin-bottom:6px !important}.is-mobile.serp-mobile-ux-2023 .related-searches__title-long,.is-mobile.serp-mobile-ux-2023 .related-searches__title-short{padding-bottom:8px !important}.is-mobile.serp-mobile-ux-2023 .result.result--sep.result--sep--hr.has-pagenum{display:none}.is-mobile.serp-mobile-ux-2023 .result.result--more>.result--more__btn{background:#3969EF;color:white}.is-mobile.serp-mobile-ux-2023 .search-filters{-ms-overflow-style:none !important;scrollbar-width:none !important}.is-mobile.serp-mobile-ux-2023 .search-filters::-webkit-scrollbar{display:none !important}.dropdown--region.has-inactive-region .dropdown__button{font-weight:400;color:#666}.dropdown--region.has-inactive-region .dropdown__button:after{color:#666}.dropdown__switch{position:relative;float:left;width:32px;margin-top:9px;margin-right:8px}.dropdown__switch.is-on .switch__knob{left:18px}.dropdown__switch.is-on:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2713";position:absolute;top:2px;left:5px;color:#fff;font-size:12px;line-height:1}.is-mobile .dropdown__switch{margin-top:10px}.modal--dropdown--region .modal__body{padding:0}.modal--dropdown--region .modal__body__input{padding:.5em}.modal--dropdown--region .frm__input{border-radius:4px;border-radius:var(--default-border-radius);width:100%;height:32px;line-height:32px;padding-left:.5em}.modal--dropdown--region .frm__input::-ms-clear{display:none}.modal--dropdown--region .modal__list{height:300px;overflow:auto}@media only screen and (max-height: 425px){.modal--dropdown--region .modal__list{height:200px}}.modal--dropdown--region .modal__list__item{margin:0 .5em}.modal--dropdown--region .modal__list__header{margin:.25em .75em .5em;position:relative}.modal--dropdown--region .modal__list__clear{position:absolute;right:0}.modal--dropdown--region .modal__list__divider{margin:.5em 0;height:1px;background:rgba(0,0,0,0.1)}.modal--dropdown--region .modal__list__link{padding-left:.25em}.modal--dropdown--region .modal__list__link:hover,.modal--dropdown--region .modal__list__link:active{background-color:transparent}.modal--dropdown--region .modal__list__link.is-highlighted{background-color:#f7f7f7}.modal--dropdown--region .region-flag__wrap{width:16px;height:16px;margin-top:2px;margin-right:.75em}.modal--dropdown--region.modal--popout .modal__header{height:42px;padding:0;position:relative}.modal--dropdown--region.modal--popout .modal__header:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\53";position:absolute;color:#666;left:10px;top:11px;font-size:16px}.modal--dropdown--region.modal--popout .frm__input{border:none;background-color:#fff;padding-left:37px;height:100%;border-radius:0}.modal--dropdown--region.modal--popout .modal__header__clear{position:absolute;right:0;height:43px;line-height:43px;margin-right:.75em;font-size:14px;cursor:pointer}.modal--dropdown--region.modal--popout .modal__header__clear:before{margin:0 .75em}.modal--dropdown--region.modal--popout .modal__list{padding-top:.5em}.search-filters-wrap{position:relative;height:42px;overflow-y:hidden}.search-filters-wrap:before,.search-filters-wrap:after{content:"";position:absolute;z-index:1;height:100%;width:12px;top:0}.search-filters-wrap:before{left:0;background-image:linear-gradient(90deg, #fff, rgba(255,255,255,0))}.search-filters-wrap:after{right:0;background-image:linear-gradient(90deg, rgba(255,255,255,0), #fff)}.is-mobile .search-filters-wrap{height:39px;margin-top:-5px}.search-filters{white-space:nowrap;overflow-x:auto;overflow-y:hidden;height:100%;padding-left:.75em;-webkit-overflow-scrolling:touch}.is-not-mobile-device .search-filters{height:60px}.is-mobile .search-filters{padding-left:1.2em;margin-left:-7px}.mapkit-map{background:#f9f5ed;width:100%;height:100%;-webkit-transition:opacity .2s ease-out;-moz-transition:opacity .2s ease-out;-o-transition:opacity .2s ease-out;transition:opacity .2s ease-out;opacity:1}.mapkit-map.is-loading{opacity:0}.dark-bg .mapkit-map{background:#333}.module__header .mapkit-map{height:150px}.module__map .mapkit-map{height:200px}.is-expanded .module__map .mapkit-map{height:100%}.vertical--map .mapkit-map,.is-expanded .mapkit-map{position:fixed}.vertical--map .mapkit-map .mk-top-right-controls-container,.is-expanded .mapkit-map .mk-top-right-controls-container{right:44px;top:10px}.vertical--map .mapkit-map .mk-bottom-right-controls-container,.is-expanded .mapkit-map .mk-bottom-right-controls-container{right:10px;bottom:10px}.is-not-mobile-device .vertical--map--sidebar-bottom .mapkit-map{position:absolute}.vertical--map .mapkit-map .mk-top-right-controls-container{right:10px}.mapkit-map .mk-map-type-control,.mapkit-map .mk-zoom-controls{box-shadow:0 0 1px 1px rgba(0,0,0,0.15)}.mapkit-map .mk-zoom-controls .mk-divider{border-left:1px solid rgba(0,0,0,0.15)}.mapkit-map__open-cta{position:absolute;bottom:0;right:0;z-index:10}.vertical--map .mapkit-map__open-cta,.is-expanded .mapkit-map__open-cta{display:none}.module__header .mapkit-map--frozen{height:170px}.results--main .mapkit-map--frozen{height:110px}.mapkit-map--frozen .mk-legal{display:none}.mapkit-static{background:#f9f5ed;width:100%;height:100%;-webkit-transition:opacity .2s ease-out;-moz-transition:opacity .2s ease-out;-o-transition:opacity .2s ease-out;transition:opacity .2s ease-out;opacity:1}.mapkit-static.is-loading{opacity:0}.mapkit-static__map{position:relative;background-position:center;background-size:cover;background-repeat:no-repeat}.mapkit-static__cta{position:absolute;bottom:0;right:0}.mapkit-static__attribution{position:absolute;bottom:0;right:0;background-color:#fff;opacity:0.7;font-size:11px;padding:0 .25em;color:#333}.has-cta .mapkit-static__attribution{bottom:auto;top:0}.mapkit-static__img{display:block;opacity:0}.mapkit-map__click-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}.map-controls{position:absolute;z-index:100}.map-controls--topcenter{position:absolute;top:10px;right:0;left:0;height:0;padding-left:350px;text-align:center}.vertical--map__sidebar--min .map-controls--topcenter{padding-left:0}.vertical--map--sidebar-bottom .map-controls--topcenter{position:fixed;padding-left:0;top:initial;bottom:calc(50% + 42px)}.vertical--map--sidebar-bottom.vertical--map__sidebar--min .map-controls--topcenter{bottom:87px}.map-controls--topleft{position:fixed;top:66px;left:8px}.vertical--map--sidebar-left .map-controls--topleft{top:10px;left:100px}.map-controls--topright{position:absolute;top:10px;right:10px}.map-control{margin-bottom:10px;box-shadow:0 0 1px 1px rgba(0,0,0,0.15);border-radius:2px}.vertical--map--sidebar-bottom .map-control{position:fixed;box-shadow:none}.btn.map-control__btn{display:block;overflow:hidden;height:23px;width:23px;line-height:23px;font-size:12px;margin-bottom:0;padding:0;border:none;background-color:#ffffff;transition:background-color .1s ease-out}.btn.map-control__btn:hover,.btn.map-control__btn:active{background-color:#f8f8f8}.btn.map-control__btn--darkmap,.btn.map-control__btn--darkmap:hover{background-color:#747474;border:0.5px solid rgba(0,0,0,0.13);box-shadow:0 0.5px 0.5px 0 rgba(0,0,0,0.15);color:rgba(255,255,255,0.85)}.btn.map-control__btn--darkmap.map-control__btn--safari,.btn.map-control__btn--darkmap.map-control__btn--safari:hover{color:rgba(255,255,255,0.85);border-color:transparent;background-color:rgba(191,191,191,0.5);mix-blend-mode:darken;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.mk-annotation-container{position:relative}.mgl-user-loc{background:url("/js/mapbox/ddgimages/crosshair.svg");width:32px;height:32px}.mapkit-marker,.mapkit-marker.mapkit-marker--selected.mk-selected{z-index:10}.mapkit-marker.mapkit-marker--disabled{z-index:9}.mapkit-marker.mapkit-marker--highlighted,.mapkit-marker.mapkit-marker--highlighted.mk-selected{z-index:11}.mgl-marker{width:27px;height:32px;text-align:center;background:url("/assets/maps/marker-light-default-active.svg") no-repeat center;cursor:pointer;z-index:10}.mgl-marker.mgl-marker--disabled{background:url("/assets/maps/marker-default-inactive.svg");z-index:9}.mgl-marker.mgl-marker--highlighted{background:url("/assets/maps/marker-light-default-highlight.svg");z-index:11}.mgl-marker.mgl-marker--disabled.mgl-marker--highlighted{background:url("/assets/maps/marker-default-inactive-highlight.svg")}.mgl-marker.mgl-marker--numbered{background:url("/assets/maps/marker-light-numbered-active.svg")}.mgl-marker.mgl-marker--numbered.mgl-marker--disabled{background:url("/assets/maps/marker-numbered-inactive.svg")}.mgl-marker.mgl-marker--numbered.mgl-marker--highlighted{background:url("/assets/maps/marker-light-numbered-highlight.svg")}.mgl-marker.mgl-marker--numbered.mgl-marker--disabled.mgl-marker--highlighted{background:url("/assets/maps/marker-numbered-inactive-highlight.svg")}.mgl-marker.mgl-marker--dot{background:url("/js/mapbox/ddgimages/dot.svg") no-repeat center;width:8px;height:8px}.dark-bg .mgl-marker.mgl-marker--dot{background:url("/js/mapbox/ddgimages/dot-dark.svg") no-repeat center}.mgl-marker.mgl-marker--loc{background:url("/js/mapbox/ddgimages/crosshair.svg");width:32px;height:32px}.dark-bg .mgl-marker.mgl-marker--loc{background:url("/js/mapbox/ddgimages/crosshair.svg")}.dark-bg .mgl-marker{background:url("/assets/maps/marker-dark-default-active.svg")}.dark-bg .mgl-marker.mgl-marker--disabled{background:url("/assets/maps/marker-default-inactive.svg")}.dark-bg .mgl-marker.mgl-marker--highlighted{background:url("/assets/maps/marker-dark-default-highlight.svg")}.dark-bg .mgl-marker.mgl-marker--numbered.mgl-marker--disabled.mgl-marker-highlighted{background:url("/assets/maps/marker-numbered-inactive-highlight.svg")}.dark-bg .mgl-marker.mgl-marker--numbered{background:url("/assets/maps/marker-dark-numbered-active.svg")}.dark-bg .mgl-marker.mgl-marker--numbered.mgl-marker--disabled{background:url("/assets/maps/marker-numbered-inactive.svg")}.dark-bg .mgl-marker.mgl-marker--numbered.mgl-marker--highlighted{background:url("/assets/maps/marker-dark-numbered-highlight.svg")}.dark-bg .mgl-marker.mgl-marker--numbered.mgl-marker--disabled.mgl-marker--highlighted{background:url("/assets/maps/marker-numbered-inactive-highlight.svg")}.mapkit-map .mgl-marker{position:absolute}.mgl-marker__num{color:#fff;position:relative;top:3px;user-select:none}.mgl-user-loc{background:url("/js/mapbox/ddgimages/crosshair.svg");width:32px;height:32px}.mgl-marker--mapkit{position:absolute;left:50%;top:50%;margin-top:-36px;margin-left:-13px}.mapkit-position-picker{position:relative}.mapkit-position-picker .mapkit-position-picker__marker{position:absolute;left:50%;top:50%;margin-left:-13px;margin-top:-23px;pointer-events:none;transition:transform 150ms ease-in}.mapkit-position-picker .mapkit-position-picker__marker--moving{transform:scale(1.1) translateY(-4px)}.mapkit-position-picker .mk-top-right-controls-container{right:50px}.mapkit-position-picker__map{width:100%;height:100%}.mapkit-map .mk-compass-border{max-width:inherit}.mapkit-map .mk-scale{position:absolute;left:20px}.is-mobile .mapkit-map .mk-scale{left:auto}.review{overflow:hidden;margin-bottom:.5em}.review__user{float:left;width:50px;padding-top:3px}.review__user__url--fallback{display:block;position:relative;overflow:hidden;width:42px;height:42px;border-radius:50%;background-color:#ededed;z-index:2}.review__user__url--fallback:after{position:absolute;bottom:-7px;left:-3px;font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\75";font-size:3.3em;line-height:1;color:#aaa;border-radius:100%;box-shadow:0 0 0 999px #ededed;z-index:1}.review__user__url--fallback:hover{text-decoration:none}.review__user__image{border-radius:100%}.review__content{margin-left:50px;padding-left:1em}.review__rating-date{color:#888;line-height:12px;vertical-align:bottom;display:inline-block;margin-left:5px}.review__rating-stars{vertical-align:middle;height:12px;margin-right:5px}.review__count{vertical-align:middle;padding-left:5px}.review__count .review-count{margin-left:-2px}.image-tiles{display:flex;background:#666}.image-tiles__col{flex:2;z-index:2}.image-tiles__col--blur{flex:2;display:flex;align-items:center;justify-content:center;z-index:1;position:relative}.image-tiles__col--wrap{display:flex;flex:1;flex-direction:column}.image-tiles__col__image{width:100%;height:150px}.image-tiles__cell__image{height:75px}.tooltip{position:absolute;background:#fff;width:360px;padding:14px;box-shadow:0 5px 10px -5px rgba(0,0,0,0.33);border:1px solid #ddd;border-radius:4px;border-radius:var(--default-border-radius);top:100%;left:100%;font-size:14px;line-height:1.25;color:#333;z-index:100;pointer-events:none}.tooltip.is-hoverable{pointer-events:auto}.tooltip--right{margin-left:15px}.tooltip--right .tooltip__triangle-outer{position:absolute;right:100%;top:50%;margin-top:-11px;border-top:11px solid transparent;border-bottom:11px solid transparent;border-right:11px solid #bbb}.tooltip--right .tooltip__triangle-inner{position:absolute;right:100%;top:50%;margin-top:-10px;border-top:10px solid transparent;border-bottom:10px solid transparent;border-right:10px solid #fff}.tooltip--below{margin-top:15px;margin-left:11px}.tooltip--below .tooltip__triangle-outer{position:absolute;bottom:100%;right:10px;border-left:11px solid transparent;border-right:11px solid transparent;border-bottom:11px solid #bbb}.tooltip--below .tooltip__triangle-inner{position:absolute;bottom:100%;right:10px;margin-right:1px;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #fff}.tooltip--below.is-aligned-left{width:auto;margin-left:-10px}.tooltip--below.is-aligned-left .tooltip__triangle-outer,.tooltip--below.is-aligned-left .tooltip__triangle-inner{right:auto;margin-left:-2px}.tooltip--below.is-aligned-left .tooltip__triangle-inner{margin-right:0;margin-left:-1px}.tooltip--mobile{margin-top:14px}.tooltip--mobile .tooltip__triangle-outer{position:absolute;bottom:100%;margin-left:-2px;border-left:11px solid transparent;border-right:11px solid transparent;border-bottom:11px solid #bbb}.tooltip--mobile .tooltip__triangle-inner{position:absolute;bottom:100%;margin-left:-1px;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #fff}.tooltip-link{text-decoration:underline;text-transform:lowercase}.simple-tooltip[data-tooltip][data-tooltip-text]{position:relative}.simple-tooltip[data-tooltip][data-tooltip-text]:before{content:attr(data-tooltip-text);pointer-events:none;white-space:pre;position:absolute;color:#fff;background:#333;padding:6px 10px;border-radius:4px;border-radius:var(--default-border-radius);opacity:0;z-index:2147483647;visibility:hidden}.simple-tooltip[data-tooltip][data-tooltip-text]:after{content:"";pointer-events:none;width:0;height:0;position:absolute;border-color:#333;border-width:0;border-style:solid;opacity:0;z-index:2147483647;visibility:hidden}.simple-tooltip.simple-tooltip__visible[data-tooltip]:before,.simple-tooltip.simple-tooltip__visible[data-tooltip]:after{visibility:visible;opacity:1}.simple-tooltip[data-tooltip^="below"][data-tooltip-text]:before{top:100%;margin-top:15px;right:50%;transform:translateX(50%)}.simple-tooltip[data-tooltip^="below"][data-tooltip-text]:after{border-bottom-width:10px;border-right-width:10px;border-right-color:transparent;border-left-width:10px;border-left-color:transparent;top:100%;right:50%;transform:translateX(50%);margin-top:5px}.simple-tooltip[data-tooltip^='below-right'][data-tooltip-text]:before{transform:none;border-top-right-radius:0px}.simple-tooltip[data-tooltip^='below-right'][data-tooltip-text]:after{transform:none;border-bottom-width:10px;border-right-width:0px;border-left-width:14px}.simple-tooltip[data-tooltip^='below-left'][data-tooltip-text]:before{white-space:normal;line-height:1.3;text-indent:initial;font-size:15px;width:90vw;padding:2.5vw}@media only screen and (min-device-width: 425px) and (max-device-width: 1079px) and (orientation: landscape){.simple-tooltip[data-tooltip^='below-left'][data-tooltip-text]:before{margin-top:5px;max-width:95vw;font-size:14px;width:max-content;padding:5px 7px;text-align:center}}.dark-bg .simple-tooltip[data-tooltip^='below-left'][data-tooltip-text]:before{color:#111;background:#fff}.simple-tooltip[data-tooltip^='below-left'][data-tooltip-text]:after{border-bottom-width:10px;border-right-width:10px;border-left-width:10px;left:5%;right:0;transform:none}@media only screen and (min-device-width: 425px) and (max-device-width: 1079px) and (orientation: landscape){.simple-tooltip[data-tooltip^='below-left'][data-tooltip-text]:after{margin-top:1px}}.dark-bg .simple-tooltip[data-tooltip^='below-left'][data-tooltip-text]:after{border-bottom-color:#fff}.simple-tooltip[data-tooltip][data-tooltip-text]:hover:before,.simple-tooltip[data-tooltip][data-tooltip-text]:hover:after{visibility:visible;opacity:1;transition-property:opacity;transition-duration:0.2s;transition-timing-function:ease-in-out;transition-delay:0s}.simple-tooltip[data-tooltip$="none"][data-tooltip-text]:hover:before,.simple-tooltip[data-tooltip$="none"][data-tooltip-text]:hover:after{transition-delay:0ms}.simple-tooltip[data-tooltip$="100"][data-tooltip-text]:hover:before,.simple-tooltip[data-tooltip$="100"][data-tooltip-text]:hover:after{transition-delay:100ms}.simple-tooltip[data-tooltip$="250"][data-tooltip-text]:hover:before,.simple-tooltip[data-tooltip$="250"][data-tooltip-text]:hover:after{transition-delay:250ms}.simple-tooltip[data-tooltip$="500"][data-tooltip-text]:hover:before,.simple-tooltip[data-tooltip$="500"][data-tooltip-text]:hover:after{transition-delay:500ms}.simple-tooltip[data-tooltip$="1000"][data-tooltip-text]:hover:before,.simple-tooltip[data-tooltip$="1000"][data-tooltip-text]:hover:after{transition-delay:1000ms}.notification .notification__text a{color:#fff;text-decoration:underline}.user-location-notification{position:absolute;top:1vh;z-index:15;text-align:center;width:100%}.user-location-notification div{position:relative;color:white;background-color:rgba(51,51,51,0.95);padding:7px 14px;width:90vw;max-width:640px;margin:0 auto;text-align:center;font-weight:bold;font-size:1em;line-height:15px;letter-spacing:-0.1px;border-radius:8px}.dark-bg .user-location-notification div{color:black;background-color:white}.user-loc-link{font-weight:600;cursor:pointer}.user-loc-link,.user-loc-link:visited{color:#66abff}.user-loc-link:hover{color:#4495d4}.user-loc-title{font-size:16px;font-weight:600;padding:0 8px 3px 0}.is-mobile .user-loc-title{padding:0 12px 3px 0}.user-loc-subtitle{padding:0;color:#888;font-size:14px}.user-loc-subtitle--cta{margin-bottom:10px}.user-loc-privacy-info{font-size:14px;line-height:21px;padding:0}.user-loc-badge{display:flex;align-items:center}.user-loc-badge__btn{display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0px 1px 10px rgba(0,0,0,0.3);border-radius:50%;background-color:#fff;height:30px;width:30px;text-align:center;font-size:16px}.user-loc-badge__btn--loc{color:#aaa}.user-loc-badge__btn--loc span{margin-right:3px;margin-top:2px}.user-loc-badge__btn--loc.loc-enabled{color:#66abff}.dark-bg .user-loc-badge__btn--loc.loc-enabled{color:#eee;background-color:#66abff}.user-loc-badge__btn--close{color:#333}.user-loc-badge__spinner{padding-top:4px;top:0px}.user-loc-badge__desc{display:none;margin-top:1px;margin-bottom:0;margin-left:6px;margin-right:6px;line-height:14px;text-align:left;font-size:14px;font-weight:bold;text-shadow:-1px -1px 0.5px #fff,1px -1px 0.5px #fff,-1px 1px 0.5px #fff,1px 1px 0.5px #fff;max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-loc-badge__desc.can-show{display:inline-block}.user-loc-tile__container{display:flex;align-items:center}.user-loc-tile{cursor:pointer;box-shadow:0px 1px 3px rgba(0,0,0,0.25);border-radius:2px;background:#fff;color:#333;padding:1px 4px;min-width:26px;text-align:center}.user-loc-tile:hover{background-color:#f7f7f7}.user-loc-tile__icons .ddgsi-marker{font-size:16px}.user-loc-tile__icons .ddgsi-down{font-size:10px;transition:transform 0.3s ease;display:inline-block}.user-loc-tile__icons .ddgsi-down.descend{transform:translateY(3px)}.user-loc-tooltip{position:absolute;top:0;right:0;width:500px;background:#fff;border:1px solid #e0e0e0;border-radius:4px;display:none;box-shadow:0px 5px 10px rgba(0,0,0,0.1);cursor:initial}.user-loc-tooltip.user-loc-tooltip--animation{animation-name:tooltipBounceIn;animation-duration:0.75s;animation-fill-mode:forwards;animation-timing-function:ease-out}@keyframes tooltipBounceIn{0%{transform:translateY(20px)}60%{transform:translateY(-3px)}100%{transform:translateY(0)}}.user-loc-tooltip__container{overflow:hidden}.user-loc-tooltip--below{margin-top:15px;margin-left:15px}.user-loc-tooltip--below .user-loc-tooltip__triangle-outer{position:absolute;bottom:100%;right:32px;border-left:11px solid transparent;border-right:11px solid transparent;border-bottom:11px solid #e0e0e0}.user-loc-tooltip--below .user-loc-tooltip__triangle-inner{position:absolute;bottom:100%;right:33px;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #fff;z-index:1}.user-loc-tooltip--below-right{margin-top:15px;border-top-right-radius:0;z-index:1;max-width:calc(100vw - calc(400px + 50px));min-width:165px}.user-loc-tooltip--below-right .user-loc-tooltip__triangle-outer{position:absolute;bottom:100%;right:-1px;border-left:18px solid transparent;border-right:0px solid transparent;border-bottom:10px solid #e0e0e0}.user-loc-tooltip--below-right .user-loc-tooltip__triangle-inner{position:absolute;bottom:100%;right:0px;border-left:15px solid transparent;border-right:0px solid transparent;border-bottom:9px solid #fff}.user-loc-tooltip--below-right.tooltip-constrained{width:85%}@media only screen and (max-width: 864px){.user-loc-tooltip--below-right{max-width:calc(100vw - calc(300px + 50px))}}.user-loc-tooltip--below-left{margin-top:15px;border-top-left-radius:0;z-index:1;min-width:165px}.user-loc-tooltip--below-left .user-loc-tooltip__triangle-outer{position:absolute;bottom:100%;left:-1px;border-left:0px solid transparent;border-right:18px solid transparent;border-bottom:10px solid #e0e0e0}.user-loc-tooltip--below-left .user-loc-tooltip__triangle-inner{position:absolute;bottom:100%;left:0px;border-left:0px solid transparent;border-right:15px solid transparent;border-bottom:9px solid #fff}.user-loc-tooltip--below-left.tooltip-constrained{width:85%}.user-loc-tooltip__inner{padding:16px 20px;overflow:hidden;position:relative;border-radius:inherit}.user-loc-tooltip__dismiss{position:absolute;top:0;right:0;color:#aaa;cursor:pointer;display:block;padding:8px 13px;z-index:1}.user-loc-tooltip__dismiss:hover{color:#666}.user-loc-tooltip__link{font-weight:600;cursor:pointer}.user-loc-tooltip__link,.user-loc-tooltip__link:visited{color:#66abff}.user-loc-tooltip__link:hover{color:#4495d4}.user-loc-tooltip__title{font-size:16px;font-weight:600;padding:0 8px 3px 0}.user-loc-tooltip__title--error{color:#de5833}.user-loc-tooltip__subtitle{padding:0;color:#888;font-size:14px;line-height:1.8}.user-loc-tooltip__subtitle--cta{margin-bottom:10px}.user-loc-tooltip__buttons .user-loc-btn{margin:0}.user-loc-tooltip__error-fix li{counter-increment:step-counter;padding-left:1.6em;position:relative;font-size:14px;line-height:1.8}.user-loc-tooltip__error-fix li::before{content:counter(step-counter) ".";position:absolute;width:1.5em;margin-right:5px;left:0;display:block;text-align:center;color:#888}.user-loc-tooltip__address{font-weight:600;color:#888;background-color:#f7f7f7;border:none;padding:4px .5em;margin-bottom:.5em;vertical-align:middle;display:inline-block;border-radius:4px;border-radius:var(--default-border-radius)}.user-loc-tooltip__address .ddgsi-marker{margin:0 auto}.user-loc-tooltip__err-img-container{height:75px;width:100%}.user-loc-tooltip__err-img-container div{position:absolute;top:0;left:0;height:75px;width:100%;background-image:url("/assets/location_help/location-help--light.svg");background-position-y:-15px;background-size:cover}.user-loc-btn{margin-top:-10px}@media only screen and (max-width: 375px){.user-loc-btn{clear:both}}.user-loc-btn__btn{margin-top:10px}.user-loc-btn__btn--waiting,.user-loc-btn__btn--waiting:hover,.user-loc-btn__btn--waiting:active{border-color:#4495d4;background:#4495d4}.user-loc-btn__btn--first{margin-right:10px}.user-loc-btn__spinner{margin-right:8px}@media only screen and (max-width: 590px){.manual-user-location-modal.manual-user-location-modal{background:transparent}.manual-user-location-modal.manual-user-location-modal .manual-user-location-modal__overlay{display:none}}.manual-user-location-modal__content-wrapper{display:table-cell;width:100%;height:100%}.manual-user-location-modal__content{width:540px;height:300px}@media only screen and (max-width: 590px){.manual-user-location-modal__content{width:100%;height:100%;border-radius:0}}.manual-user-location-modal__tools{position:absolute;top:10px;left:10px;margin-right:50px;display:flex;align-items:center}@media only screen and (max-width: 590px){.manual-user-location-modal__tools{flex-direction:column;align-items:flex-start}}.manual-user-location-modal__map{position:relative;text-align:initial;width:100%;height:100%}.manual-user-location-modal__msg{border-radius:0.25em;background-color:rgba(51,51,51,0.8);font-size:14px;color:#fff;padding:6px 12px;margin-right:10px;box-sizing:border-box;line-height:22px;min-height:34px}@media only screen and (max-width: 590px){.manual-user-location-modal__msg{margin-right:0;margin-bottom:10px}}.disable-page-scroll{overflow-y:scroll}.disable-page-scroll body{overflow:visible;position:fixed;width:100%}.user-loc-dropdown{position:absolute;display:none;max-width:90%;top:20px;left:20px;box-shadow:0px 10px 20px rgba(0,0,0,0.6);width:90%;max-width:400px;z-index:1}.vertical--map .user-loc-dropdown{position:fixed;z-index:200;top:82px;left:25px;width:85%;max-height:calc(95% - 82px);overflow-y:scroll}.vertical--map--sidebar-left .user-loc-dropdown{top:30px;left:420px;max-height:calc(95% - 30px);width:100%}@media screen and (max-height: 320px) and (orientation: landscape){.vertical--map--sidebar-left .user-loc-dropdown{max-height:calc(85% - 30px)}}@media only screen and (max-width: 864px){.vertical--map--sidebar-left .user-loc-dropdown{left:320px}}.user-loc-dropdown.is-showing{display:block}.user-loc-content section{margin:15px}.user-loc-content .user-loc-content__addl-opts{margin-top:7.5px;margin-left:0;margin-right:0;margin-bottom:0}.user-loc-content__header{text-align:center}.user-loc-content__icon{display:flex;justify-content:center;align-items:center;margin:0 auto;margin-bottom:7.5px;width:50px;height:50px;color:white;position:relative}.user-loc-content__icon:before{content:'';position:absolute;top:-5px;left:-5px;border-radius:50%;display:block;width:120%;height:120%;box-sizing:border-box;background-color:#d2e4ff;animation:pulse-dot 3s cubic-bezier(0.455, 0.03, 0.515, 0.955) -2s infinite;z-index:-2}.user-loc-content__icon:after{content:'';position:absolute;border-radius:50%;width:100%;height:100%;background-color:#489bff;position:absolute;left:0;top:0;display:block;animation:pulse-dot 4s cubic-bezier(0.455, 0.03, 0.515, 0.955) -2s infinite;z-index:-1}.user-loc-content__icon .ddgsi-location{font-size:26px;margin-right:3px;margin-top:2px}.dark-bg .user-loc-content__icon:before{background-color:#45628e}.user-loc-content__icon--error{margin:0 auto;margin-bottom:12px;position:relative;border-radius:10px;width:50px;height:50px;background-color:#489bff;color:white}.user-loc-content__icon--error .ddgsi-location{font-size:1.9em;padding-top:3px;padding-right:2px}.user-loc-content__icon--error .user-loc-content__icon__switch{position:absolute;top:40px;left:34px;width:23px;border-radius:10px;background-color:#d0d0d0;padding:2px}.user-loc-content__icon--error .user-loc-content__icon__switch div{background-color:white;border-radius:50%;height:12px;width:12px;box-shadow:0.45px 0.75px 1px 0px #888}.user-loc-content__copy{font-size:17px;font-weight:600;text-align:center;line-height:20px}.user-loc-content__btns{margin-top:15px;margin-bottom:15px;display:flex;justify-content:space-between;flex-wrap:wrap;box-sizing:border-box}.user-loc-content__btns button{width:49%;box-sizing:border-box;white-space:normal}@media only screen and (max-width: 360px){.user-loc-content__btns button{width:100%}.user-loc-content__btns button:last-child{margin-top:5px}}.user-loc-content__addl-opts a{display:flex;justify-content:space-between;padding:7.5px 15px;border-top:1px solid #f2f2f2;color:#222;font-size:16px}.user-loc-content__addl-opts a:hover{text-decoration:none}.user-loc-content__addl-opts a span{display:flex;justify-content:center;align-items:center;color:#aaa}.user-loc-content__addl-opts__title{font-weight:bold}.user-loc-content__addl-opts__subtitle{font-size:14px}.user-loc-content__err__link{font-weight:bold;text-decoration:none;cursor:pointer}.user-loc-content__err__link,.user-loc-content__err__link:visited{color:#66abff}.user-loc-content__err__link:hover{color:#4495d4}.user-loc-content__err__fix{padding:0}.user-loc-content__err__fix li{counter-increment:step-counter;padding-left:1.6em;position:relative;line-height:1.8}.user-loc-content__err__fix li::before{content:counter(step-counter);position:absolute;width:1.5em;margin-right:5px;left:0;display:block;text-align:center;color:#888}@keyframes pulse-dot{0%{transform:scale(0.9)}50%{transform:scale(1)}100%{transform:scale(0.9)}}.welcome-wrap{background:linear-gradient(45deg, #7842ad 0%, #5b2791 100%);z-index:1000;position:fixed;width:100%;bottom:0;transform:translateY(100%);transition:transform 0.3s ease-out}.welcome-wrap.is-showing{transform:translateY(0)}.welcome{min-height:180px;color:white;padding-top:28px;box-sizing:border-box;max-width:590px;white-space:nowrap}.welcome li{list-style-type:disc;margin-left:14px;line-height:21px;font-size:16px}.welcome__bg{position:absolute;left:700px;bottom:0;z-index:-1}@media only screen and (max-width: 1350px){.welcome__bg{left:600px}}@media only screen and (max-width: 1200px){.welcome__bg{left:560px}}@media only screen and (max-width: 1079px){.welcome__bg{left:534px}}@media only screen and (max-width: 750px){.welcome__bg{left:140%;bottom:0}}@media only screen and (max-width: 590px){.welcome__bg{display:none}}.set-align-center .welcome__bg{left:auto;right:0px}@media only screen and (max-width: 1100px){.set-align-center .welcome__bg{display:none}}.welcome__inner-wrap{padding-left:17px}.welcome__heading{font-size:24px;font-weight:600;line-height:1;padding:0 0 7px}.welcome__snippet{font-size:16px;padding:0;line-height:22px}.welcome__dismiss{position:absolute;top:10px;right:8px;padding:10px 13px;border:none;background:none;color:white;text-decoration:none;cursor:pointer;z-index:10}.welcome__dismiss:hover,.welcome__dismiss:focus{color:#e5caff}.welcome--euandroid{padding-top:20px}.welcome--euandroid ul{margin-bottom:15px;padding:0;list-style:none}.welcome--euandroid li{margin-left:0;padding:2px 0 2px 25px;line-height:17px;list-style:none;background:url("/assets/success-checkmark.svg") left top 1px no-repeat}.welcome--euandroid li:last-child{max-width:calc(100% - 100px)}.welcome--euandroid .welcome__inner-wrap{padding-bottom:20px;white-space:normal}.welcome--euandroid .welcome__snippet{margin-bottom:10px;line-height:21px}.welcome--euandroid .welcome__cta{display:inline-block;padding:7px 13px 5px;color:#fff;font-size:14px;letter-spacing:0.75px;text-transform:uppercase;border:1px solid #e0e0e0;border-radius:4px}.welcome--euandroid .welcome__cta:hover{text-decoration:none}.welcome--euandroid .welcome__dismiss{right:12px}@media only screen and (max-width: 1079px){.welcome--euandroid{padding-top:0;white-space:normal}.welcome--euandroid li{font-size:14px}.welcome--euandroid .welcome__inner-wrap{padding:20px}.welcome--euandroid .welcome__heading{margin-bottom:10px;padding:0;font-size:18px;font-weight:600;line-height:1}.welcome--euandroid .welcome__dismiss{top:6px;right:8px}.welcome--euandroid .welcome__bg{display:block;bottom:-25px;left:42%}}@media only screen and (max-width: 590px){.welcome--euandroid .welcome__bg{left:47%}}@media only screen and (max-width: 420px){html[lang^="bg"] .welcome__cta,html[lang^="hu"] .welcome__cta{font-size:12px}html[lang^="el"] .welcome__cta,html[lang^="lt"] .welcome__cta,html[lang^="ru"] .welcome__cta{font-size:13px}}@media only screen and (max-width: 380px){html[lang^="bg"] .welcome__cta,html[lang^="hu"] .welcome__cta{font-size:10px}html[lang^="el"] .welcome__cta,html[lang^="lt"] .welcome__cta,html[lang^="ru"] .welcome__cta{font-size:11px}}.custom_date-modal{display:block}.modal__box.modal__box--custom_date{-webkit-transition:height .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:height .3s ease-in-out 0s;-o-transition:height .3s ease-in-out 0s;transition:height .3s ease-in-out 0s;max-width:360px;width:80%;padding:20px;overflow-y:auto;height:auto;max-height:100%;box-sizing:border-box;display:block}.modal__box.modal__box--custom_date.modal__box--headed{padding:0}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content{padding:20px}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .custom_date__header{font-size:1em;font-weight:bold;text-align:left}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .custom_date__fields{display:flex;justify-content:space-between;margin:16px 0;visibility:visible}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .custom_date__fields .custom_date__input{width:45%;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAC8SURBVHgBnVLRDYJADK2Gf3ADRrgNcAN1AhnBEboJjOAG4ATqBOoGjGBPXmM5Lx7hJY9H3r2m7eWIvmBK46Q/K2EjfAkr4SVROMkwtKY0NMOZfHJhKeyh/6CZ3I/aUXrEENWnbWAWgcY8XtMv/GVtadzH36ITtjh7aCiLFB6gvfH20I0atmOHURp0qUEHz59dbQeGOmhptAg8zUx2PCK4Q8CZ4BN607Dd8S4caHxFgwlHYQtb6JlmYPEDeAMi0SBy8NmyNAAAAABJRU5ErkJggg==");background-repeat:no-repeat;background-position:center right 10px;font-size:16px}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .custom_date__fields .custom_date__input:focus{border:solid 1px #66abff;box-shadow:0 2px 3px rgba(0,0,0,0.06)}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single{border:none;width:100%;margin:0;background:transparent}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-lendar{width:100%;margin:0;border-bottom:solid 1px #d9d9d9}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-label{background-color:transparent}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-prev,.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-next{text-indent:0;background-image:none;font-family:'ddg-serp-icons';color:#222;opacity:1}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-prev.is-disabled,.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-next.is-disabled{opacity:0.3}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table abbr[title]{text-decoration:none}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody{border-top:solid 1px #d9d9d9;padding:10px 0}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody .pika-day{background-color:transparent;color:#222;font-weight:bold;text-align:center;width:28px;height:28px;border-radius:14px;margin:auto;line-height:12px}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody td.is-startrange .pika-day,.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody td.is-endrange .pika-day{background-color:#66abff;color:#fff}.dark-bg .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody td.is-startrange .pika-day,.dark-bg .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody td.is-endrange .pika-day{background-color:#66abff}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody .is-startrange .pika-day::after,.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody .is-endrange .pika-day::after{font-family:'ddg-serp-icons';color:#66abff;display:block;position:relative;bottom:13px;height:0}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody .is-startrange:not(.is-endrange) .pika-day::after{content:'\25B6';left:18px}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody .is-endrange:not(.is-startrange) .pika-day::after{content:'\25C0';right:18px}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody td.is-selected .pika-day{background-color:#66abff;color:#fff}.dark-bg .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody td.is-selected .pika-day{background-color:#66abff}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody::before,.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single .pika-table tbody::after{content:'';display:block;height:10px}.is-not-mobile-device .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single td:hover .pika-day{background-color:#e0e0e0}.dark-bg.is-not-mobile-device .modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .pika-single td:hover .pika-day{background-color:#424242}.modal__box.modal__box--custom_date.modal__box--headed .modal__box__content .btn--primary{margin-top:20px;width:100%;box-sizing:border-box}.modal__box.modal__box--custom_date.modal__box--headed .modal__close{font-weight:bolder !important}.modal__wrap.modal__wrap--custom_date{height:100%;display:flex;overflow:hidden}.custom_date__input{background-color:transparent}.c-info,.c-base{line-height:1.37;display:block}.c-info__title,.c-icon__title,.c-list__title,.c-base__title{margin-top:0;margin-bottom:0;padding-bottom:0;padding-top:0;display:block;overflow:hidden;font-size:1.31em;font-weight:600;line-height:1.2;color:#222}.c-info__sub,.c-info__title__sub,.c-list__sub,.has-code .prog__sub,.c-base__sub{font-size:14px;font-size:.972222rem;margin-bottom:0;margin-top:0;padding-bottom:0;padding-top:3px;display:block;font-weight:normal;line-height:1.2;color:#888}.c-info__content,.c-list__content,.c-base__content{margin-top:.75em}.c-info__links,.c-icon__links,.c-list__links,.c-base__links{margin-top:.75em;display:block;clear:both}.c-info__link,.c-icon__link,.c-list__link,.c-base__link{color:#888}.c-info__link:hover,.c-icon__link:hover,.c-list__link:hover,.c-base__link:hover{color:#4495d4}.c-info__link--more,.c-icon__link--more,.c-list__link--more,.c-base__link--more{color:#aaa}.c-info__link--more a,.c-icon__link--more a,.c-list__link--more a,.c-base__link--more a{color:#888}.c-info__link--more a:hover,.c-icon__link--more a:hover,.c-list__link--more a:hover,.c-base__link--more a:hover{color:#4495d4}.c-base__img-wrap{margin:0 0 .5em .5em;position:relative;text-align:center;overflow:hidden;float:right}.c-base__img{min-width:1px;display:inline;position:relative;vertical-align:middle}.c-info__title--long{font-weight:400}.c-info__title--long b{font-weight:600}.c-info__title__sub{padding-left:.5em;display:inline-block;text-transform:capitalize}@media only screen and (min-width: 590px) and (min-height: 738px){.c-info__title__sub{padding-left:0;display:block}}@media only screen and (max-width: 590px){.c-info__title__sub{padding-left:0;display:block}}.c-info__body{display:block;overflow:visible}.c-info__img-wrap+.c-info__body{display:table-cell;vertical-align:middle;padding-left:2em}@media only screen and (min-width: 590px) and (min-height: 738px){.c-info__img-wrap+.c-info__body{padding-bottom:6px;padding-top:6px}}.c-info__img-wrap{position:relative;overflow:hidden;text-align:center;display:table-cell;vertical-align:top;height:120px;line-height:120px;max-width:180px;margin-left:0;margin-right:0;top:0;left:0}@media only screen and (min-width: 590px) and (min-height: 738px){.c-info__img-wrap{height:150px;line-height:150px;max-width:220px}.c-info__img-wrap img{max-height:150px}}@media only screen and (max-width: 590px){.c-info__img-wrap{left:0;float:right;margin-left:.25em}.c-info__img-wrap+.c-info__body{display:block;overflow:hidden;padding-left:0}}.c-info__img-wrap--clip .c-info__img-wrap__in{float:left;display:block;position:relative;text-align:center;left:50%}.c-info__img-wrap--clip .c-info__img{margin-bottom:-1px;max-width:none;right:50%}.c-info__img-wrap--tile .c-info__img-wrap__in{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;height:120px;border:1px solid #dcdcdc;background-color:#fff;padding:0 15px;display:block}.c-info__img-wrap--tile .c-info__img{margin-top:-3px;max-width:150px;max-height:90px}@media only screen and (min-width: 590px) and (min-height: 738px){.c-info__img-wrap--tile .c-info__img{max-width:190px;max-height:120px}}@media only screen and (min-width: 590px) and (min-height: 738px){.c-info__img-wrap--tile .c-info__img-wrap__in{height:150px}}.c-info__img{min-width:1px;max-width:180px;max-height:120px;display:inline;vertical-align:middle;position:relative}@media only screen and (min-width: 590px) and (min-height: 738px){.c-info__img{max-width:220px;max-height:150px}}.c-info__content.chomp{max-height:4.25em}@media only screen and (min-width: 590px) and (min-height: 738px){.c-info__content.chomp{line-height:1.35;max-height:5.5em}}@media only screen and (min-width: 590px) and (min-height: 738px){.has-sub+.c-info__content.chomp{max-height:4.25em}}.is-mobile .c-info__content.chomp{max-height:6.75em;margin-bottom:0.25em}.is-mobile .c-info__link--chomp:after{display:none}.c-info__links{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;max-width:100%}.c-info__links--attr{overflow:visible}.is-mobile .c-info--cw.cw.has-aux{padding-bottom:4em}.is-mobile .c-info--cw.cw.has-aux+.zci__aux{bottom:4em}.is-mobile .c-info{padding-bottom:4em}.is-mobile .has-aux.cw .c-info{margin-bottom:-.5em;padding-bottom:0}.is-mobile .c-info__body{position:static}.is-mobile .c-info__img-wrap+.c-info__body{display:block;padding:0}.is-mobile .is-expanded .c-info__body{padding-top:0;padding-bottom:.75em;overflow:visible}.is-mobile .is-expanded .c-info__content{top:.75em;position:relative;display:inline}.is-mobile .is-expanded .c-info__img-wrap{margin-bottom:-.75em}.is-mobile .is-expanded .c-info--body{padding-bottom:4.75em}.is-mobile .c-info__img-wrap{float:right;left:0;height:90px;line-height:90px;margin:0 0 .25em .5em}.is-mobile .c-info__img{max-height:90px}.is-mobile .c-info__img-wrap--tile{max-width:120px}.is-mobile .c-info__img-wrap--tile .c-info__img-wrap__in{height:90px;padding:0 8px}.is-mobile .c-info__img-wrap--tile .c-info__img{max-width:100%;max-height:74px}.is-mobile .is-expanded .c-info__img-wrap--tile{float:right;margin-bottom:0}.is-mobile .c-info__links{display:block;text-align:center;position:absolute;right:1.25em;left:1.25em;padding-top:0;bottom:0;margin:0 -1px}.is-mobile .c-info__link{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s;-webkit-border-radius:.25em;-moz-border-radius:.25em;-ms-border-radius:.25em;-o-border-radius:.25em;border-radius:.25em;outline:none !important;text-decoration:none !important;background-color:#fafafa;border:1px solid #ddd;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;vertical-align:middle;font-weight:600;width:100%;padding:0;margin:0 auto;overflow:hidden;text-overflow:ellipsis;font-size:1em;line-height:3}.is-mobile .c-info__link,.is-mobile .c-info__link:hover{color:#222}.is-mobile .c-info__link--chomp{margin-right:4%;display:none;width:39%}.is-mobile .c-info__link--chomp.can-expand{display:inline-block}.is-mobile .c-info__link--chomp .chomp--link__icn{display:none}.is-mobile .c-info__link--chomp .chomp--link__mr,.is-mobile .c-info__link--chomp .chomp--link__mr:hover,.is-mobile .c-info__link--chomp .chomp--link__ls,.is-mobile .c-info__link--chomp .chomp--link__ls:hover{color:inherit}.is-mobile .c-info__link--chomp.can-expand+.c-info__link{width:57%}.is-mobile .has-aux .c-info__links{bottom:1em}.is-mobile .c-info__link--url,.is-mobile .c-info__link--more{display:none !important}.c-icon{vertical-align:middle;line-height:1.37}.c-icon--head,.c-icon__head{display:table;width:100%}.c-icon__img-wrap,.c-icon__badge{overflow:hidden;position:relative;vertical-align:middle;display:table-cell;text-align:center}.c-icon__img-wrap--sm{width:40px;height:40px}.c-icon__img-wrap--sm:before{content:'';top:0;right:0;bottom:0;left:0;border:2px solid #000;position:absolute;opacity:.15;border-radius:100%;z-index:1}.c-icon__img-wrap--md{width:50px;height:50px}.c-icon__img-wrap--md:before{content:'';top:0;right:0;bottom:0;left:0;border:2px solid #000;position:absolute;opacity:.15;border-radius:100%;z-index:1}.c-icon__img-wrap--lg{width:60px;height:60px}.c-icon__img-wrap--lg:before{content:'';top:0;right:0;bottom:0;left:0;border:2px solid #000;position:absolute;opacity:.15;border-radius:100%;z-index:1}.c-icon__img{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;vertical-align:middle;display:inline-block;max-height:100%;max-width:100%;height:auto;width:auto}.c-icon__badge{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;line-height:40px;max-width:40px;height:40px;width:40px;color:#fff}.c-icon__badge--sm{font-size:14px}.c-icon__badge--md{font-size:21px}.c-icon__badge--lg{font-size:30px}.c-icon__body{vertical-align:middle;display:table-cell}.c-icon__img-wrap+.c-icon__body,.c-icon__badge+.c-icon__body{padding-left:1em}.c-icon__title{font-size:1.18em}.c-icon__title--lg{font-size:1.32em}.c-icon__sub{margin-bottom:0;margin-top:0;padding-bottom:0;padding-top:0;display:block;font-weight:normal;line-height:1.37;color:#999}.c-icon__sub a{color:inherit}.c-icon__sub a:hover{color:#4495d4}.c-icon__content{display:block;color:#333;padding:1em 0 0}.c-list{line-height:1.37;display:block}.c-list__content.chomp{max-height:8.5em}@media only screen and (min-width: 590px) and (min-height: 738px){.c-list__content.chomp{max-height:13em}}.c-list__items{border-top:1px solid #d0d0d0;line-height:1.3;list-style:none;padding:0;margin:0}.c-list__item{word-wrap:break-word;border-bottom:1px solid #d0d0d0;padding:.35em .35em .35em 0}.c-score__team__logo__ph,.c-score__win-marker,.c-score__clock__icon{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.c-score{font-size:14px;font-size:.972222rem;min-width:16em;font-weight:normal;display:block;color:#333;padding:0}.is-mobile .c-score{-webkit-overflow-scrolling:touch;overflow-x:auto;max-width:100%}.is-mobile .c-score.no-score{overflow:hidden}.c-score__opt{-webkit-transition:all .3s ease-out;-webkit-transition-delay:0s;-moz-transition:all .3s ease-out 0s;-o-transition:all .3s ease-out 0s;transition:all .3s ease-out 0s;display:inline-block;vertical-align:top;overflow:hidden;max-width:0;width:auto}.lt-ie9 .c-score__opt{width:0}.is-expanded .c-score__opt,.is-selected .c-score__opt{-webkit-transition:all .3s ease-in;-webkit-transition-delay:0s;-moz-transition:all .3s ease-in 0s;-o-transition:all .3s ease-in 0s;transition:all .3s ease-in 0s;width:auto;max-width:600px;visibility:visible;opacity:1}.is-mobile .c-score__opt{-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s}@media only screen and (max-width: 425px){.c-score__opt--min-xs{display:none}}.c-score__sequence,.c-score__totals{display:inline-block;vertical-align:top}.is-mobile .c-score__sequence{padding-right:4em;max-width:none}.is-mobile .c-score__totals{margin-left:-100%;float:right}.c-score__head,.c-score__foot{color:#888;padding:0 1.25em;line-height:45px;height:45px;white-space:nowrap;overflow:hidden;clear:both}.is-mobile .c-score__head,.is-mobile .c-score__foot{padding:0 .75em}.c-score__foot{padding-right:2.5em}.c-score__head{margin-bottom:-1px}.is-mobile .has-score .c-score__head{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:0;min-width:100%;float:left}.c-score__head__date,.c-score__venue{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:inline-block;max-width:12em}.is-selected .has-score .c-score__head__date,.is-selected .has-score .c-score__venue{margin-right:1.25em;width:12em}.is-mobile .has-score .c-score__head__date,.is-mobile .has-score .c-score__venue{margin-right:.75em}.has-score .c-score__head__date{margin-right:1.25em;width:12em;padding-right:1px}.c-score__venue{-webkit-transition:all .3s ease-in;-webkit-transition-delay:0s;-moz-transition:all .3s ease-in 0s;-o-transition:all .3s ease-in 0s;transition:all .3s ease-in 0s}.has-score .c-score__venue{max-width:15.75em;width:15.75em;padding-right:1px}.is-selected .c-score--nfl.has-score .c-score__venue{max-width:22.5em;width:22.5em}.is-mobile .c-score__venue{overflow:visible}.c-score__head__time{float:right}@media only screen and (max-width: 501.5px){.c-score__venue__name{display:none}}.c-score__foot{border-top:1px solid #ededed}.is-mobile .no-score .c-score__foot{display:none}.c-score__foot__main{height:45px;display:block;overflow:hidden}.c-score__foot__main a{color:inherit}.c-score__foot__more{visibility:hidden;opacity:0}.is-mobile .c-score__foot__more{visibility:visible;float:right;opacity:1}.c-score__foot__info{padding:0 .5em}.is-mobile .c-score__foot__info{padding:0 0 0 1.25em}.is-mobile .c-score__foot__info:first-child{padding-left:0}.c-score__foot__time{float:right;color:#5b9e4d}.c-score__foot-icon{padding-right:1.25em;line-height:45px;height:45px;display:block;bottom:0;top:auto}.is-mobile .c-score__foot-icon{display:none}.c-score__line{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-top:1px solid #ededed;line-height:54px;padding:0 1.25em;height:54px;white-space:nowrap;position:relative;display:block;clear:both}.is-mobile .c-score__line{padding:0 .75em;min-width:100%;display:block;float:left}.is-mobile .no-score .c-score__line{display:inline-block;min-width:initial;width:50%}.is-mobile .no-score .c-score__line:before,.is-mobile .no-score .c-score__line:after{display:block}.c-score__line--vs1:before,.c-score__line--vs1:after{content:"";display:none;height:16px;border-right:1px solid #ededed;position:absolute;right:0}.c-score__line--vs1:before{top:0}.c-score__line--vs1:after{bottom:0}.is-mobile .no-score .c-score__line--vs2{clear:none}.c-score__line--vs2:before{content:attr(data-vs);display:none;line-height:1;font-size:14px;position:absolute;text-align:center;margin-top:-.5em;width:2em;left:-1em;top:50%}.is-mobile .no-score .c-score__line--vs2{padding-left:1.25em}.c-score__line__name{display:inline-block;width:12em;height:100%}.has-score .c-score__line__name{border-right:1px solid #ededed;margin-right:1.25em}.is-mobile .no-score .c-score__line__name{width:90%}.is-mobile .has-score .c-score__line__name{margin-right:.75em}.c-score__item{display:inline-block;text-align:center;width:2em}.c-score__head__total{display:inline-block;vertical-align:top;text-align:center;width:4em}.c-score__line__total{display:inline-block;vertical-align:top;text-align:center;width:2.666667em;font-size:1.5em;font-weight:600}.c-score__team{position:relative;display:inline-block;vertical-align:middle;width:100%}.c-score__team__logo{margin-top:-2px;margin-left:-2px;margin-right:1em;height:40px;width:40px;text-align:center;display:block;float:left}.is-mobile .c-score__team__logo{margin-right:.5em}.c-score__team__logo__ph{display:inline-block;vertical-align:baseline;font-size:1.8em;line-height:1.4}.c-score__team__img{display:inline-block;vertical-align:baseline;max-height:100%;max-width:100%}.c-score__team__name{margin-top:3px;line-height:1;display:block;overflow:hidden}.c-score__team__name.has-status{margin-right:40px}.is-mobile .has-score.c-score--mlb .c-score__team__name{display:none}.c-score__team__short{display:none;overflow:hidden;font-weight:600;line-height:40px}.c-score__team__market{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;max-width:100%;display:block}.c-score__team__nick{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;font-weight:600;font-size:1.1667em;max-width:100%;display:block}.c-score__team__link{display:block;color:inherit}.c-score__team__status{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#333;background-color:#e5e5e5;text-align:center;font-size:16px;line-height:28px;height:28px;width:28px;position:absolute;display:block;margin:auto;right:12px;bottom:2px;top:0}.c-score__team__status:after{content:"\25c0";color:#e5e5e5;position:absolute;width:10px;right:100%;bottom:0;top:0}.c-score__is-current{border:1px solid #c3c3c3;display:inline-block;line-height:1.1;padding:20% 0;width:90%}.c-score__win-marker{display:inline-block;vertical-align:top;position:relative;font-size:16px;left:2px;width:0}.c-score__win-marker:before{content:"\25c0"}.c-score__status{text-transform:capitalize;color:#de5833}.c-score__state{margin-right:12px}.c-score__clock{color:#5b9e4d}.c-score__clock__icon{display:inline-block;vertical-align:middle;position:relative;font-size:16px;line-height:0;top:-1px}@media only screen and (max-width: 425px){.is-mobile .c-score .c-score__sequence{display:none}}@media only screen and (max-width: 864px){.is-mobile .has-score.c-score--mlb .c-score__team__name{display:block}.is-mobile .has-score.c-score--mlb .c-score__team__short{display:none}.is-mobile .has-score.c-score--mlb .c-score__head__date,.is-mobile .has-score.c-score--mlb .c-score__venue,.is-mobile .has-score.c-score--mlb .c-score__line__name{width:12em}.is-mobile .has-score.c-score--mlb .c-score__venue__name{display:inline}}@media only screen and (max-width: 590px){.is-mobile .has-score.c-score--mlb .c-score__team__name{display:none}.is-mobile .has-score.c-score--mlb .c-score__team__short{display:block}.is-mobile .has-score.c-score--mlb .c-score__head__date,.is-mobile .has-score.c-score--mlb .c-score__venue,.is-mobile .has-score.c-score--mlb .c-score__line__name{width:6em}}@media only screen and (max-width: 501.5px){.is-mobile .has-score.c-score--mlb .c-score__venue__name{display:none}}@media only screen and (max-width: 425px){.is-mobile .has-score.c-score--mlb .c-score__team__name{display:block}.is-mobile .has-score.c-score--mlb .c-score__team__short{display:none}.is-mobile .has-score.c-score--mlb .c-score__head__date,.is-mobile .has-score.c-score--mlb .c-score__venue,.is-mobile .has-score.c-score--mlb .c-score__line__name{width:12em}.is-mobile .has-score.c-score--mlb .c-score__venue{max-width:6em;overflow:hidden}}.in-progress.has-score.c-score--nfl .c-score__head__date,.in-progress.has-score.c-score--nfl .c-score__venue,.in-progress.has-score.c-score--nfl .c-score__line__name{max-width:15em;width:15em}@media only screen and (min-width: 501.5px){.is-mobile .c-score--nfl .c-score__head__date,.is-mobile .c-score--nfl .c-score__venue,.is-mobile .c-score--nfl .c-score__line__name{max-width:20em;width:20em}.is-mobile .c-score--nfl .c-score__team__name{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;margin-top:0;font-weight:600;font-size:1.1667em;line-height:40px}.is-mobile .c-score--nfl .c-score__team__market,.is-mobile .c-score--nfl .c-score__team__nick{font-size:1em;display:inline}}.is-mobile .c-score--mlb .c-score__sequence{padding-right:8.75em}.is-mobile .c-score--nfl .c-score__sequence{padding-right:6.75em}@media only screen and (max-width: 501.5px){.is-mobile .c-score--mlb .c-score__sequence{padding-right:7.25em}}@media only screen and (max-width: 501.5px){.c-score__item--inning{width:1.25em}}.c-product{display:block}.c-product__pane{min-height:160px;line-height:160px}.c-product__media{border-right:1px solid #dbdbdb;background-color:#fff;position:relative;padding-right:1.8em;margin-right:1.8em;line-height:160px;min-width:60px;height:auto;width:auto;float:left}.c-product__media:after{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;background-color:rgba(0,0,0,0.044);pointer-events:none;content:""}.c-product__media__img{vertical-align:middle;position:relative;max-width:200px;max-height:160px;height:auto;width:auto}.c-product__body{line-height:normal;position:relative;border-left:none;padding-left:0}.c-product__body-wrap{display:block;overflow:hidden;vertical-align:middle}.c-product__body-content{display:inline-block;vertical-align:middle;line-height:1.2}.c-product__rating{display:inline-block;margin-bottom:0;line-height:1.8}.c-product__title{padding-bottom:0;padding-top:0;color:#333}.c-product__subtitle{max-height:2.7em}.c-product__subtitle--nm{max-height:none}.c-product__subtitle,.c-product__desc{padding:.25em 0;color:#888}.c-product__sep{top:1px}.c-product__sep+.c-product__sep{display:none}.c-product__price{font-weight:600}.c-product__rating{display:inline-block;position:relative;margin-bottom:0;line-height:1.67;color:#888;top:-1px}.c-product__rating .stars{font-size:1.33em;top:-1px}.c-product__title a,.c-product__subtitle a,.c-product__price a,.c-product__rating a{color:inherit}.c-product__callout{margin-top:.5em;display:block}@media only screen and (max-width: 590px){.c-product__media{line-height:initial;overflow:hidden;border-right:none;margin-right:0;padding-right:0;max-width:120px;max-height:120px;height:auto;float:right}.c-product__media__img{vertical-align:top;max-width:100%;max-width:120px;max-height:120px}.c-product__body{line-height:normal;padding-right:0;padding-left:0;border-left:none;border-top:none}.c-product__body-wrap{overflow:visible}.c-product__body-content{display:block}.c-product__title{font-size:1.1em}.c-product__subtitle{display:block;position:absolute;max-height:4.5em;max-width:100%;bottom:0;left:0}.c-product__subtitle .sep{display:none}.c-product__sep{display:none}.c-product__price,.c-product__rating{display:block}.c-product__brand{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;max-height:1.2em;max-width:100%;display:block}.c-product__callout{margin-left:0;margin-right:0}.c-product__callout .btn{display:block}.c-product__body--pri{padding-bottom:4em;min-height:120px}.c-product__body--sec{clear:both;overflow:visible;margin-top:.5em;margin-right:0;padding-top:.5em;border-top:1px solid #dbdbdb}}.c-detail{display:inline-block;vertical-align:middle;line-height:1.2;max-width:100%}.c-detail__title a,.c-detail__desc a,.c-detail__more a,.c-detail__rating a{color:inherit}.c-detail__user,.c-detail__count,.c-detail__date{font-size:0.85em;color:#222}.c-detail__user .c-detail__icon,.c-detail__count .c-detail__icon,.c-detail__date .c-detail__icon{font-size:1.25em;padding-right:.25em}.c-detail__more{margin-top:2em;font-size:0.85em}.c-detail__more :link:hover{text-decoration:none;color:#4495d4}.c-detail__more .c-detail__icon{margin-right:.5em;margin-top:-.25em;width:16px;max-height:16px}.is-mobile .c-detail__more{margin-top:1em}.c-detail__callout{display:block;margin-top:1em}.c-detail__links{width:115%;margin-top:1.5em}.c-detail__links+.c-detail__more{margin-top:1.5em}.c-detail__links--title{font-size:0.85em;margin-top:.5em}.c-detail__links--title+.c-detail__links{margin-top:0}.c-detail__links__btn,.c-detail__callout .btn{margin-right:.5em;margin-bottom:.5em;position:relative;line-height:2.0}.c-detail__title{color:#222;max-width:25em;padding-top:0}.c-detail__subtitle{margin-top:-.5em}.c-detail__title__sub,.c-detail__desc,.c-detail__filemeta,.c-detail__more{color:#888}.c-detail__title__sub{font-size:0.8em;display:block}.c-detail__price{font-weight:600}.c-detail__rating{margin-bottom:.5em;line-height:1.67;font-size:0.8em;color:#888}.c-detail__rating .stars{font-size:1.45em;top:-1px}.c-detail__sep{top:0.05em}.c-detail__sep+.c-detail__sep{display:none}.c-detail__icon{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.c-detail__icon{color:#aaa;display:inline-block;vertical-align:middle;margin-top:-2px}.c-detail__source .stars{top:-.125em}@media only screen and (max-width: 590px){.c-detail__title{font-size:1.1em}}.has-code h1,.has-code h2,.has-code h3,.has-code h4,.has-code h5,.has-code h6{font-size:1em;font-weight:bold;color:#333}.has-code .c-info__title{font-size:1.31em}.has-code .prog__container>p{padding-bottom:1.25em}.has-code .prog__container>pre{margin:0;margin-bottom:1.25em;padding:.75em 0 .75em 1em;padding-right:0}.has-code .prog__sub{color:#333;font-weight:bold;margin:0 0 .25em 0}.dark-bg .has-code .prog__sub{color:#e5e5e5}.zcm-wrap-wrap{display:flex}.zcm-wrap-wrap .zcm--right{position:relative}.is-mobile .zcm-wrap-wrap .zcm--right{min-width:40px}.zcm-wrap-wrap .zcm--right-fade::before{background-image:linear-gradient(90deg, rgba(250,250,250,0), #fafafa);content:'';position:absolute;pointer-events:none;bottom:1px;left:-20px;width:20px;height:100%}.zcm-wrap-wrap .zcm--right-fade-wide::before{left:-40px;width:40px}.zcm-wrap-wrap .zcm--right .dropdown--settings{margin-bottom:0}.zcm-wrap{line-height:38px;height:38px;width:100%;overflow:hidden;overflow-x:auto;overflow-style:move;white-space:nowrap;-webkit-overflow-scrolling:touch;position:relative}.zcm-wrap::-webkit-scrollbar{display:none}.lt-ie8 .zcm-wrap{margin-bottom:-.625em}.zcm-wrap.is-hidden{max-height:0;margin-top:0}.no-touch .zcm-wrap{overflow:hidden}.zcm-wrap--header{margin-left:7px}.is-mobile .zcm-wrap--header{margin-left:0}.zcm-wrap--tiles{padding-right:6em;overflow:hidden}@media only screen and (max-width: 590px){.zcm-wrap--tiles{padding-right:0;margin-right:0}}.zcm-wrap--tiles .zcm__menu--tiles{z-index:1;position:absolute;background-color:#fafafa}.zcm{padding-left:3px;white-space:nowrap;height:38px;display:flex}.is-mobile .zcm{display:initial;padding:0 13px}.zcm--sub{font-size:.9em;white-space:nowrap;height:33px}.zcm--topics{overflow:hidden;margin-right:6em}.zcm--topics .zcm__item:last-child{margin-right:2em}.is-mobile-device .zcm--topics{-webkit-overflow-scrolling:touch;overflow-x:auto}.zcm__menu{float:left;margin:0;padding:0 0 1px;text-transform:capitalize}.zci--meanings .zcm__menu .zcm__link--sub{text-transform:none}.zcm__menu--tiles{position:relative;float:right;right:0;top:.125em}.zcm__drop{position:relative;padding:0}.zcm__drop .zcm__sep--h{display:none}.zcm__drop .zcm__menu{background:#fff;background:rgba(255,255,255,0.95);padding-top:.25em;padding-bottom:.25em;float:none;display:none;position:absolute;top:2em;right:0}.zcm__drop .zcm__item{padding-bottom:0;margin-bottom:0;margin-top:0;display:block}.zcm__drop.is-open .zcm__menu{display:block}.zcm__drop--main{position:absolute;text-align:right;bottom:0;right:0;z-index:1}.zcm__drop--main .zcm__menu{top:2.8em}.zcm__drop--main .zcm__link{padding-left:2em;padding-right:.8em}.zcm__dynamic{display:none}.zcm__dynamic.has-zci{display:flex;flex:1;flex-wrap:wrap}.is-mobile .zcm__dynamic.has-zci{display:inline-block}.zcm__dropdowns{margin-left:auto;float:none;display:inline-block;vertical-align:top}.zcm__dropdowns .dropdown{vertical-align:top;height:auto;line-height:inherit;margin-bottom:0;overflow:hidden}.zcm__dropdowns .dropdown:last-child{margin-right:0}.is-mobile .zcm__menu:last-child .zcm__item:last-child{padding-right:30px}.zcm__constant{display:inline-block}.zcm__constant,.zcm__dynamic.has-zci{float:none;overflow:hidden;white-space:nowrap}.zcm__constant:after,.zcm__dynamic.has-zci:after{display:none}.zcm__sep--h:before,.zcm__sep{vertical-align:top;margin:0 7px;height:1em}.zcm__item,.zcm__item--b,.zcm__sep--h{list-style:none;overflow:hidden;vertical-align:top;display:inline-block}.zcm__item--b{overflow:visible}.zcm__link{display:block;font-size:1em;position:relative;margin:0 7px;height:37px;line-height:37px;font-weight:600;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:rgba(0,0,0,0)}.zcm__link,.zcm__link:focus,.zcm__link:hover{text-decoration:none;color:#666}.zcm__link.is-active{color:#111;border-bottom:solid 1px #111}.zcm__link .zcm__underline{position:absolute;display:block;bottom:-1px;left:7px;right:7px;height:1px;background:#111;opacity:0}@media only screen and (max-width: 590px){.zcm__link .zcm__underline{bottom:0}}.zcm__link.is-highlighted .zcm__underline{opacity:1;-webkit-animation:blink-opacity 0.75s linear 4;-moz-animation:blink-opacity 0.75s linear 4;-ms-animation:blink-opacity 0.75s linear 4;-o-animation:blink-opacity 0.75s linear 4;animation:blink-opacity 0.75s linear 4}.no-touch .zcm__link:hover{color:#333}.no-touch .zcm__link:active{color:#111}.no-touch .zcm__link.is-active:hover,.no-touch .zcm__link.is-active:active{color:#111}.no-touch .zcm__item.is-open .zcm__link{color:#111}.is-mobile .zcm__link{margin:0 10px}.zcm__item__underline{height:1px;background:#111;position:absolute;z-index:20}.zcm__sep--h{padding:0;height:37px;line-height:37px;margin-left:-2px;margin-right:-1em}.zcm__sep--h+.zcm__item{padding-left:1em}.zcm__sep--h.is-hidden+.zcm__item{padding-left:0}.lt-ie9 .zcm__sep--h{margin-right:0}.lt-ie9 .zcm__sep--h+.zcm__item{padding-left:0}.zcm__sep--h:before{vertical-align:baseline;top:0.1em}.zcm__link--sub{display:block;cursor:pointer;position:relative;padding:0 7px}.zcm__link--sub,.zcm__link--sub:visited{color:#666}.zcm__link--sub:hover,.zcm__link--sub.is-highlighted{color:#000}.zcm__link--sub.is-selected,.zcm__item.is-selected .zcm__link--sub{color:#111}.zcm__link__count{font-size:0.6em;position:relative;padding:.5em 0 0 .5em;margin:-.25em 0;top:-.8em}.zcm__link--sub--alpha{left:3.5px;padding-left:3.5px;padding-right:3.5px}.zcm__link--sub--alpha .zcm__link__count{display:none}.is-vertical-tabs-exp .dropdown--settings .zcm__link{display:flex}.is-vertical-tabs-exp .dropdown--settings .zcm__link .zcm__link__icon:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2700";font-size:18px;margin:0;top:unset}.dropdown--settings--icon{height:100%}.is-mobile .dropdown--settings--icon{margin:2px 22px 0 10px}.dropdown--settings--icon .dropdown__button{padding:0;margin:0;width:18px;height:100%;display:flex;align-items:center}.dropdown--settings--icon .dropdown__button:after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2700";font-size:18px;margin:0;top:unset}@media only screen and (max-width: 590px){.zcm-wrap{max-width:102%}.zcm--sub,.zcm--topics{margin-left:-.5em}.zcm--topics{margin-right:4.5em}}@-webkit-keyframes blink-opacity{0%{opacity:0}49%{opacity:0}50%{opacity:1}100%{opacity:1}}@-moz-keyframes blink-opacity{0%{opacity:0}49%{opacity:0}50%{opacity:1}100%{opacity:1}}@-o-keyframes blink-opacity{0%{opacity:0}49%{opacity:0}50%{opacity:1}100%{opacity:1}}@keyframes blink-opacity{0%{opacity:0}49%{opacity:0}50%{opacity:1}100%{opacity:1}}.zci-wrap{background-color:#fafafa;clear:both;display:block;position:relative;z-index:10;margin-top:-1px}.is-mobile.has-open-detail .zci-wrap{z-index:106}.zci-wrap:after{content:"";clear:both;display:table}.zci{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;clear:both;position:relative;width:100%;color:#666;background-color:#fafafa;border-bottom:1px solid rgba(0,0,0,0.1);padding:0 7px;line-height:1.37;visibility:hidden;overflow:hidden;max-height:0;display:none;z-index:1}.zci.is-active{border-bottom:1px solid #dbdbdb;padding-bottom:1em;padding-top:1em;margin-top:1px;visibility:visible;overflow:visible;max-height:none;display:block}.zci.is-active .zci.is-active{margin-top:0}.zci h1,.zci h2,.zci h3{padding-top:0;padding-bottom:0}.zci h1 a,.zci h2 a,.zci h3 a{color:inherit}.zci .cw{padding:.25em 0}.zci pre{border:1px solid #dbdbdb}.zci .zci{border-top:1px solid #dbdbdb;border-bottom:none;padding-bottom:1em;padding-top:1em}.zci .zci:before{display:none}.zci--type--tiles{padding-left:0;padding-right:0}.zci--type--tiles.bing .metabar__secondary-text .sep{display:none}.zci--type--tiles.is-active{padding-bottom:0;padding-top:0}.zci--type--tiles:not(.is-fallback).is-full-page.is-expanded{border-bottom:none;background:#fff;padding-bottom:180px;margin-bottom:-180px}.zci--no-max{max-height:none}.zci-link{color:#4495d4}.zci--placeholder{height:10em}.zci--placeholder .zci__loading-error{color:#888}.zci--placeholder .zci__loading-error:before{content:"\2639";display:inline-block;vertical-align:middle;color:#c2c2c2;font-size:3em;padding-right:.25em}.zci--no-spacing{padding:0;margin:0}.zci__main{clear:both}.zci__aux{display:none;position:absolute;top:.5em;bottom:.5em;right:0.6em;width:20%;min-width:11em}@media only screen and (min-width: 980px){.zci__aux{display:block}}@media only screen and (min-width: 971.1px){.zci__aux{width:27%}}.cw.has-aux{width:auto}@media only screen and (min-width: 864px){.cw.has-aux{width:77%}}@media only screen and (min-width: 971.1px){.cw.has-aux{width:67%}}.zci__caption{margin:0;display:block;overflow:hidden;font-size:1.5em;font-weight:400;line-height:1.2;color:#222}.zci__header{margin-top:0;margin-bottom:0;padding-bottom:0;padding-top:0;display:block;overflow:hidden;font-size:1.31em;font-weight:600;line-height:1.2;color:#222}.zci__subheader,.zci__header__sub{font-size:14px;font-size:.972222rem;margin-bottom:0;margin-top:0;padding-bottom:0;padding-top:.25em;display:block;font-weight:normal;line-height:1.2;color:#888}.zci__header__sub{padding-left:.5em;display:inline-block;text-transform:capitalize}@media only screen and (min-width: 590px) and (min-height: 738px){.zci__header__sub{padding-left:0;display:block}}@media only screen and (max-width: 590px){.zci__header__sub{padding-left:0;display:block}}.zci__header--detail{font-weight:400}.zci__header--detail b{font-weight:600}.zci__body-wrap{display:block;overflow:hidden}.zci__body{padding-left:10px}.zci__content{margin-top:.75em}.zci__body--no-max{padding-left:10px}.zci__rule{display:block;width:100%;border:none;border-bottom:1px solid #dbdbdb;margin:0 auto .75em;padding:0;height:0}.zci__result,.zci__input{word-wrap:break-word}.zci__links,.zci__more-at-wrap{margin-top:.75em;display:block;clear:both}.zci__more-at{display:inline-block}.zci__more-at,.zci__more-at:focus{color:#888}.zci__more-at:hover{color:#4495d4}.zci__more-at__icon{vertical-align:middle;padding-right:.5em;margin-top:-3px;max-width:16px}.is-mobile .zci-wrap{z-index:13}.is-mobile .zci__main{padding-left:0}.is-mobile .zci__body{display:block;margin-left:-1px;padding:0 1.25em}.is-mobile .has-aux.cw{position:static;padding-bottom:0}.is-mobile .has-aux.cw .zci__main{position:static}.is-mobile .has-aux+.zci__aux{display:block;overflow:hidden;min-width:initial;margin-bottom:0;height:auto;width:auto;top:auto;left:0;right:0;bottom:0;position:relative;max-height:0}.is-mobile .is-expanded .has-aux+.zci__aux{max-height:none;padding-top:1em}.is-mobile .is-expanded .has-aux+.zci__aux .tile--info .info__value{height:auto;white-space:normal;display:inline}.is-mobile .has-aux+.zci__aux .tile--info{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:none;border:none}.is-mobile .has-aux+.zci__aux .tile--info .tile__expand{display:none}.is-mobile .tile--info{font-size:1em;position:static;padding:0 1.25em}.is-mobile .tile--info .info{border-top:none;margin-top:1px;padding-bottom:0}.is-mobile .tile--info .info__label{text-transform:uppercase;padding-right:.25em;margin-bottom:0;margin-top:1px;float:left}.is-mobile .tile--info .info__label:after{content:" \2014 "}.is-mobile .tile--info .info__value{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;height:1.4em;margin-top:0;margin-bottom:0}.zci__no-results{color:#aaa;position:absolute;text-align:center;display:block;margin:auto;bottom:0;top:0;left:0;right:0;width:100%;height:8.75em}.zci__no-results:before,.zci__no-results:after{display:block}.zci__no-results:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2639";font-size:7em;color:#c2c2c2;line-height:1;width:1em;margin:0 auto}.zci__no-results__txt{font-size:1.25em;font-weight:600;display:block}@media only screen and (max-width: 590px){.zci{padding-left:0;padding-right:0}}@media only screen and (max-height: 700px){.has-open-detail .zci--images .serp__bottom-right{display:none}}.has-open-detail .zci--videos .serp__bottom-right{display:none}.tile-wrap{position:relative;top:0;margin-top:0;margin-bottom:0}.tile-wrap .tile{cursor:pointer}.is-mobile .metabar--sticky+.tile-wrap,.is-mobile .metabar--unsticky+.tile-wrap{padding-top:1px}.is-mobile .metabar--sticky.is-hidden+.tile-wrap,.is-mobile .metabar--unsticky.is-hidden+.tile-wrap{padding-top:.5em}.has-tiles{-webkit-overflow-scrolling:touch;overflow-y:hidden;overflow-x:auto;overflow-style:move;white-space:nowrap;position:static}.has-tiles .tile,.has-tiles .tile--s{display:inline-block;white-space:normal;vertical-align:top;float:none;left:12px;margin-top:4px;margin-bottom:.75em}.has-tiles .tile:last-child,.has-tiles .tile--s:last-child{margin-right:100px}.no-touch .has-tiles{overflow-x:hidden}.at-topic .tile{background-color:#fff}.at-topic .tile.highlight{background-color:#fff}.at-topic .tile.highlight .tile__title{color:#222}.at-topic .tile__title{color:#888}.at-topic .tile__check{visibility:hidden;opacity:0}.at-topic .tile.active-topic{background-color:#fff}.at-topic .tile.active-topic .tile__title{color:#222}.at-topic .tile.active-topic .tile__check{visibility:visible;opacity:1}.tileview{min-height:150px;min-height:10.416667rem}.tileview .metabar--fixed{position:relative;top:0 !important;background-color:#fafafa}.tileview .metabar__mode{text-indent:3px;line-height:36px}.tileview .detail{top:300px}.tileview--grid .zci__main,.tileview--grid .zci__menu,.tileview--grid .zci__detail,.tileview--grid .metabar__in{padding-left:0}.tileview--grid .metabar--sticky,.tileview--grid .metabar--unsticky{padding-bottom:4px}.tileview--grid .metabar--fixed+.tile-wrap{margin-top:3px !important;padding-top:0}.set-header--fixed .tileview--grid .metabar--fixed,.tileview--grid .metabar--fixed.is-stuck{padding-bottom:0;padding-left:7px;padding-right:7px;background-color:#fafafa;background-color:rgba(250,250,250,0.96);border-top:1px solid #fafafa;border-top-color:rgba(250,250,250,0.96);position:fixed;width:100%}.set-header--fixed .tileview--grid .metabar--fixed ~ .tile-wrap,.set-header--fixed .tileview--grid .metabar--fixed+.sidebar-filters,.tileview--grid .metabar--fixed.is-stuck ~ .tile-wrap,.tileview--grid .metabar--fixed.is-stuck+.sidebar-filters{padding-top:39px}.set-header--fixed .tileview--grid .metabar--fixed.is-hidden+.tile-wrap,.tileview--grid .metabar--fixed.is-stuck.is-hidden+.tile-wrap{margin-bottom:0;padding-top:0}.tileview--grid .metabar--fixed.is-stuck{-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.15);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.15);box-shadow:0 1px 0 rgba(0,0,0,0.15);border-bottom:1px solid #dbdbdb;border-bottom-color:rgba(0,0,0,0);padding-bottom:4px}.tileview--grid .metabar--fixed.is-stuck.at-bottom{top:auto !important;position:absolute;bottom:0px}.tileview--grid .detail{bottom:auto}.tileview--grid .tile{list-style:none;display:inline-block;vertical-align:top;margin-top:0}.tileview--grid .tile--c--whole{width:auto;display:block;margin-left:.275em;margin-right:.275em}.tileview--grid .tile--c,.tileview--grid .tile--m{width:24%;margin-left:0.5%;margin-right:0.5%}@media only screen and (min-width: 971.1px){.tileview--grid .tile--c,.tileview--grid .tile--m{width:19%}}@media only screen and (min-width: 1186.9px){.tileview--grid .tile--c,.tileview--grid .tile--m{margin-left:0.25%;margin-right:0.25%;width:16.15%}}@media only screen and (min-width: 1440px){.tileview--grid .tile--c,.tileview--grid .tile--m{width:13.78%}}@media only screen and (min-width: 1584px){.tileview--grid .tile--c,.tileview--grid .tile--m{width:12%}}@media only screen and (min-width: 1800px){.tileview--grid .tile--c,.tileview--grid .tile--m{width:10.61%}}@media only screen and (min-width: 1944px){.tileview--grid .tile--c,.tileview--grid .tile--m{margin-left:0.125%;margin-right:0.125%;width:8.825%}}@media only screen and (max-width: 590px){.tileview--grid .tile--c,.tileview--grid .tile--m{width:32.3%}}@media only screen and (max-width: 425px){.tileview--grid .tile--c,.tileview--grid .tile--m{width:48%;margin-left:1%;margin-right:1%}}.tileview--grid .tile--c--w{width:24%;margin-left:0.5%;margin-right:0.5%}@media only screen and (min-width: 1186.9px){.tileview--grid .tile--c--w{width:19%}}@media only screen and (min-width: 1440px){.tileview--grid .tile--c--w{margin-left:0.25%;margin-right:0.25%;width:16.15%}}@media only screen and (min-width: 1584px){.tileview--grid .tile--c--w{width:13.78%}}@media only screen and (min-width: 1800px){.tileview--grid .tile--c--w{width:12%}}@media only screen and (min-width: 1944px){.tileview--grid .tile--c--w{width:10.61%}}@media only screen and (max-width: 864px){.tileview--grid .tile--c--w{width:32.3%}}@media only screen and (max-width: 590px){.tileview--grid .tile--c--w{width:48%;margin-left:1%;margin-right:1%}}.tileview--grid .tile--c--n{width:15.65%;margin-left:0.5%;margin-right:0.5%}@media only screen and (min-width: 1079px){.tileview--grid .tile--c--n{margin-left:0.25%;margin-right:0.25%;width:13.75%}}@media only screen and (min-width: 1186.9px){.tileview--grid .tile--c--n{width:11.98%}}@media only screen and (min-width: 1440px){.tileview--grid .tile--c--n{width:10.59%}}@media only screen and (min-width: 1584px){.tileview--grid .tile--c--n{width:9.49%}}@media only screen and (min-width: 1800px){.tileview--grid .tile--c--n{margin-left:0.125%;margin-right:0.125%;width:8.825%}}@media only screen and (min-width: 1944px){.tileview--grid .tile--c--n{width:8.05%}}@media only screen and (max-width: 864px){.tileview--grid .tile--c--n{width:19%}}@media only screen and (max-width: 727px){.tileview--grid .tile--c--n{width:24%}}@media only screen and (max-width: 501.5px){.tileview--grid .tile--c--n{width:32.3%}}@media only screen and (max-width: 425px){.tileview--grid .tile--c--n{width:48%;margin-left:1%;margin-right:1%}}.is-mobile .tileview--grid .metabar__primary-text{padding-left:0}@media only screen and (max-width: 590px){.is-mobile .tileview--grid .tile--c--w--mob,.is-mobile .tileview--grid .tile--qa{margin-left:1%;margin-right:1%;width:48%}}@media only screen and (max-width: 425px){.is-mobile .tileview--grid .tile--c--w--mob,.is-mobile .tileview--grid .tile--qa{width:auto;display:block;margin-left:.275em;margin-right:.275em}}.is-mobile .tileview--grid .metabar--sticky,.is-mobile .tileview--grid .metabar--unsticky{padding:2px .25em 0 0.7em;margin-bottom:0}.is-mobile .has-tiles--grid{min-height:initial;overflow:hidden}.is-mobile .has-tiles--grid .tile{margin-top:1px;margin-bottom:7px}.is-mobile .has-tiles--grid .tile--m{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s;-webkit-border-radius:.25em;-moz-border-radius:.25em;-ms-border-radius:.25em;-o-border-radius:.25em;border-radius:.25em;outline:none !important;text-decoration:none !important;background-color:#fafafa;border:1px solid #ddd;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none;width:auto;height:auto;display:block;font-weight:600;padding:0;margin:0 .25em .25em;font-size:1em;line-height:3}.is-mobile .has-tiles--grid .tile--m,.is-mobile .has-tiles--grid .tile--m:hover{color:#333}.has-tiles .anchor--inline,.has-tiles--grid .anchor--inline{margin-left:0}.tileview__other{min-height:210px}.zci.has-sidebar-filters .tile-wrap{float:left;width:calc(100% - 200px)}.zci.has-sidebar-filters .metabar .metabar__secondary-text{float:left;padding-left:7px;cursor:pointer}.zci.has-sidebar-filters .metabar .metabar__secondary-text:hover{text-decoration:underline}.zci.has-sidebar-filters .metabar .metabar__primary-text{margin-left:190px}.zci.has-sidebar-filters.has-no-results .metabar__primary-text,.zci.has-sidebar-filters.has-no-results .metabar__secondary-text,.zci.has-sidebar-filters.has-no-results .badge--ad-wrap,.zci.has-sidebar-filters.has-no-results .sidebar-filters,.zci.has-sidebar-filters.has-no-results .metabar .shopping-header{display:none}.sidebar-filters{float:left;width:170px;margin-top:3px;padding:0 15px 15px;color:#222}.sidebar-filter__title{font-weight:bold;margin:30px 0 8px 0}.sidebar-filter__options .sidebar-filter__option{cursor:pointer;padding:7px 0 8px;height:19px}.sidebar-filter__options .sidebar-filter__option.is-color{display:block;float:left;width:24px;height:24px;border-radius:100%;border:1px solid rgba(0,0,0,0.15);padding:0;margin:0 10px 10px 0}.sidebar-filter__options .sidebar-filter__option.is-color.is-selected,.dark-bg .sidebar-filter__options .sidebar-filter__option.is-color.is-selected{box-shadow:0 0 0 3px #66abff}.sidebar-filter__options .sidebar-filter__option.is-color:nth-child(5n){margin-right:0}.dark-bg .sidebar-filter__options .sidebar-filter__option.is-color{border:1px solid rgba(170,170,170,0.15)}.dark-bg .sidebar-filter__options .sidebar-filter__option.is-color.preset-color-black{border-color:#aaa}.sidebar-filter__options .sidebar-filter__option.is-size{display:block;float:left;padding:10px 8px;margin:0 4px 4px 0;border:1px solid #aaa;border-radius:4px;width:36px;text-align:center}.sidebar-filter__options .sidebar-filter__option.is-size.is-selected{border-color:#66abff;background:#66abff;color:#fff}.sidebar-filter__options .sidebar-filter__option.is-size:nth-child(3n){margin-right:0px}.sidebar-filter__options .sidebar-filter__option__title{width:80%;display:inline-block}.sidebar-filter__options .sidebar-filter__option__input{float:right;width:16px;height:16px;margin-top:1px;margin-right:0}.dark-bg .sidebar-filter__options .sidebar-filter__option__input{outline:none}.dark-bg .sidebar-filter__options .sidebar-filter__option__input:not(:checked){-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:1px solid #aaa;border-radius:2px}.dark-bg .sidebar-filter__options .sidebar-filter__option__input[type=radio]:not(:checked){border-radius:100%}.sidebar-filter__show-more{padding:7px 0 0;color:#00278e;cursor:pointer;font-weight:bold}.sidebar-filter__show-more:hover{text-decoration:underline}.tile__body--b-i{padding:.75em 1em}.is-mobile .tile__body--b-i{padding:.75em}.tile--b--i--vid .tile__media,.tile--b--i--mov .tile__media,.tile--vid .tile__media{height:0}.tile--b--i--vid .tile__media__img,.tile--b--i--mov .tile__media__img,.tile--vid .tile__media__img{text-indent:-9999px;background-color:#f7f7f7;position:absolute;margin:auto;bottom:0;right:0;left:0;top:0}.tile--b--i--vid{width:18.35em}.tile--b--i--vid .tile__media{padding-bottom:56.25%}.tile--b--i--mov{width:12em}.tile--b--i--mov .tile__media{padding-bottom:148.333%}.tile--b--i--mov .tile__media__img{min-width:100%;height:100%}.tile--info{padding-bottom:2.5em;padding-top:.5em;position:absolute;margin:auto;bottom:0;top:0;overflow:hidden;max-height:100%;width:100%}.tile--info.is-open{-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.1);box-shadow:0 1px 4px rgba(0,0,0,0.1);max-height:1000%;min-height:100%;bottom:auto}.tile--info.is-open .tile__foot hr{border-bottom:none}.tile--info .info{border-top:1px solid #fafafa}.tile--info .info:first-child{border-top-color:transparent}.tile--info .info.one-line{padding-right:1em}.tile--info .info--head{border-top:none;border-bottom:1px solid #fafafa;margin-bottom:-1px}.tile--info__link{color:#666}.tile--info__link:hover{color:#4495d4}.tile--info__link:hover:before{display:inline-block}.tile--info__link:before{content:"\bb";display:none;position:absolute;line-height:2;right:0;top:0}.tile--info__link .info__label{color:inherit}.is-full-page .has-tiles--grid .tile--m{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s;-webkit-border-radius:.25em;-moz-border-radius:.25em;-ms-border-radius:.25em;-o-border-radius:.25em;border-radius:.25em;outline:none !important;text-decoration:none !important;background-color:#fafafa;border:1px solid #ddd;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none;height:auto;display:block;font-weight:600;padding:0;margin:10px auto 18px;font-size:1em;line-height:3}.is-full-page .has-tiles--grid .tile--m .hide--mob{display:none}.is-full-page .has-tiles--grid .tile--m .tile--m--mob{display:block;text-transform:capitalize}.is-mobile .is-full-page .has-tiles--grid .tile--m{margin-top:3px}.is-full-page .has-tiles--grid .tile--m.is-auto-loading{background:none;color:transparent;border:none;box-shadow:none}.is-mobile .is-full-page .has-tiles--grid .tile--m--videos{margin-top:-2px}.zci--images:not(.is-fallback) .tile-wrap{padding:0 10px}.is-mobile .zci--images:not(.is-fallback) .tile-wrap{margin-top:2px;padding:0 5px}.is-fallback .tile--img{min-width:60px;line-height:159.74px;height:163px;overflow:hidden;margin:8px 5px}.is-fallback .tile--img>.tile--img__sub,.is-fallback .tile--img>.tile--img__dimensions{display:none}.is-mobile .is-fallback .tile--img{line-height:117.6px;height:120px}.is-fallback .tile--img.highlight .tile--img__details{visibility:visible;opacity:1}.is-fallback .tile--img__img{height:163px}.is-mobile .is-fallback .tile--img__img{height:120px}.is-mobile .is-fallback .has-tiles--grid .tile.tile--img,.is-mobile .is-fallback .has-tiles--grid .tile.tile--m--images{margin:2px 3px}.tile--img{-webkit-box-shadow:none !important;-moz-box-shadow:none !important;box-shadow:none !important;-webkit-transition:none .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:none .3s ease-in-out 0s;-o-transition:none .3s ease-in-out 0s;transition:none .3s ease-in-out 0s;display:inline-block;min-width:120px;text-align:center;line-height:176.4px;height:180px;width:auto;margin:0 10px 59px;overflow:visible;background:none;border:none}.is-mobile .tile--img{line-height:147px;height:150px;margin:0 5px 56px;min-width:48px}.is-mobile .has-tiles--grid .tile--img.tile{margin:0 5px 56px}.tile--img>.tile--img__dimensions{position:absolute;right:0;bottom:0;background:rgba(0,0,0,0.45);padding:1px 3px;font-size:.9176em;color:#fff;display:block}.tile--img:hover .tile--img__media,.tile--img.is-selected .tile--img__media{box-shadow:2px 2px 5px rgba(0,0,0,0.3)}.tileview--grid .tile--img:active:after{border-top-color:#de5833}.is-mobile .tileview--grid .tile--m--images{margin:0 15px 10px 5px}.zci .zci--images{padding-left:0;padding-right:0}.tile--img__media{overflow:hidden;max-height:100%;max-width:100%;display:flex;justify-content:center;align-items:center}.tile--img__media:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:rgba(0,0,0,0.5);visibility:hidden;opacity:0;content:""}.is-selected .tile--img__media:after{visibility:visible;opacity:1}.tile--img__media:before{content:"";position:absolute;left:0;right:0;top:0;bottom:0;background:radial-gradient(transparent, rgba(0,0,0,0.05));z-index:1;pointer-events:none}.tile--img__media__i{position:relative;display:flex;justify-content:center;align-items:center;min-width:120px}.tile--img__media__i .tile--img__img{position:relative}.tile--img__img{text-indent:-9999px;vertical-align:middle;height:180px;max-width:none;width:auto;color:transparent}.tile--img__img:-moz-loading{visibility:hidden}.is-mobile .tile--img__img{height:150px;min-width:auto}.tile--img__details{opacity:0;color:#ffffff;background:rgba(150,150,150,0.7);background:rgba(0,0,0,0.5);visibility:hidden;text-align:center;position:absolute;height:100%;width:100%;bottom:0;right:0;left:0;top:0}.touch .tile--img__details{display:none}.tile--img__sub{line-height:1;text-align:left;margin-top:5px;display:block}.tile--img__sub,.tile--img__sub:hover{color:#222}.tile--img__sub span{white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}.tile--img__sub .tile--img__title{font-size:1.05em;font-weight:600;padding:5px 0 2px;height:1.05em}.tile--img__sub .tile--img__domain{height:1em;font-size:1em}.tile--img__dimensions{vertical-align:middle;display:inline-block;line-height:normal}.tile--img__dimensions i,.tile--img__dimensions em{font-style:normal}.tile--img__dimensions em{font-weight:600;display:block}.tile--img__icon{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;display:inline-block;border:2px solid white;margin-bottom:12px;line-height:36px;font-size:16px;height:36px;width:36px}.detail__body--images .c-detail__btn--right{float:right;margin-top:7px}.detail__body--images .c-detail__btn--bottom{margin-top:1em}.detail__body--images .c-detail__report{position:absolute;right:100px;bottom:8px}.tileview__images{min-height:176px}.tileview__images.has-tiles--grid{margin-left:0}@media only screen and (max-width: 590px){.tileview__images.has-tiles--grid{padding-right:0}}.is-mobile .tileview__images{min-height:177px}.is-mobile .detail__media--images{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;max-height:100% !important}@media only screen and (max-height: 318.75px), only screen and (max-height: 382.5px) and (min-width: 425px){.is-mobile .detail__media--images{width:100% !important}}.is-mobile .detail__body--images .c-detail__title{display:none}.is-mobile .detail__body--images .c-detail{width:100%}.is-mobile .detail__body--images .c-detail__desc p{color:#fff;font-size:1.1em}.is-mobile .detail__body--images .c-detail__filemeta{color:rgba(200,200,200,0.8);padding-bottom:0.25em}.is-mobile .detail__body--images .c-detail__report{position:inherit;right:auto;bottom:auto}@media only screen and (max-width: 590px){.has-tiles .tile--img{width:auto !important}}.tile--vid{width:18.35em}.tile--vid .tile__media{padding-bottom:56.25%;background:#000}.tile--vid .tile__media .tile__media__img{background-color:transparent}.tile--vid .tile__body{padding-top:.8em;padding-bottom:.8em}.tile--vid .tile__title--2{margin-bottom:0.8em}@media only screen and (min-width: 590px) and (max-height: 738px){.tile--vid .tile__title--2{display:block;display:-webkit-box;white-space:normal;height:2.5em}}.tile--vid .tile__body__footer{display:flex;overflow:hidden;justify-content:space-between}.tile--vid .tile__body__footer>span{box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tile--vid .tile__body__footer>span:first-child{flex-shrink:0;max-width:100%}.tile--vid .tile__body__footer>span+span{padding-left:4px}.tile--vid .tile__stats{height:1.25em;margin-bottom:.5em}.is-mobile .tile--vid .tile__media{background-color:#000;padding-bottom:8.5em}.tile--vid__overlay{-webkit-transition:.1s .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:.1s .3s ease-in-out 0s;-o-transition:.1s .3s ease-in-out 0s;transition:.1s .3s ease-in-out 0s;background-color:rgba(0,0,0,0.7);visibility:hidden;opacity:0}.highlight .tile--vid__overlay{visibility:visible;opacity:1}.tile--vid__overlay__icon{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;border:4px solid white;text-align:center;position:absolute;font-size:36px;font-size:2.5rem;font-style:normal;line-height:1.5;margin-left:-0.75em;margin-top:-0.75em;text-indent:3px;display:block;color:white;opacity:0.9;height:1.5em;width:1.5em;left:50%;top:50%}.has-tiles--grid .tile--m--videos{width:300px}@media only screen and (max-width: 864px){.detail--videos .detail__body{display:none}}.is-mobile .detail--videos .detail__body{position:static;padding-top:3em}@media only screen and (max-width: 864px){.is-mobile .detail--videos .detail__body{display:block}}@media only screen and (max-height: 318.75px), only screen and (max-height: 382.5px) and (min-width: 425px){.is-mobile .detail--videos .detail__body{padding-top:0;display:table-cell;width:100%}}.is-mobile .detail--videos.has-privacy-warning .detail__close{color:#fff}.is-mobile .detail--videos.has-privacy-warning .detail__controls{z-index:-1}.detail__media--vid{margin-right:2.2em}.is-mobile .detail .detail__media--vid{height:auto;margin-left:0;margin-right:0}@media only screen and (min-width: 590px){.is-mobile .detail .detail__media--vid{margin-right:2.2em;float:left}}@media only screen and (max-height: 318.75px), only screen and (max-height: 382.5px) and (min-width: 425px){.is-mobile .detail .detail__media--vid{margin-right:0;float:none}}.detail__media__vid-wrap{position:absolute;display:block;margin:auto;width:100%;height:100%;bottom:0;left:0;top:0;background-size:cover;background-position:center}.is-expanded .detail__media__vid-wrap{right:0}.is-mobile .detail .detail__media__vid-wrap{position:relative}.overlay--video-privacy{font-size:.85em}.overlay--video-privacy .overlay__wrap{width:100%}.is-mobile .overlay--video-privacy{font-size:1em}@media only screen and (min-width: 1079px){.overlay--video-privacy{font-size:1em}}@media only screen and (min-width: 590px) and (max-height: 738px){.overlay--video-privacy{font-size:.85em}}@media only screen and (max-width: 590px){.overlay--video-privacy{font-size:.8em}}@media only screen and (max-width: 425px){.overlay--video-privacy{font-size:.6em}}.overlay--video-privacy__icon{display:block;width:60px;height:60px;position:relative;margin:0 auto;background:url("/img/privacy.png") 50% 50% no-repeat;background-size:60px 60px}.overlay--video-privacy__text{padding-right:15%;padding-left:15%;font-size:1.2em}@media only screen and (min-width: 590px) and (max-height: 738px){.overlay--video-privacy__text{padding-right:10%;padding-left:10%}}@media only screen and (max-width: 864px){.overlay--video-privacy__text{padding-right:10%;padding-left:10%}}@media only screen and (max-width: 425px){.overlay--video-privacy__text{padding-right:.5em;padding-left:.5em}}.is-mobile .overlay--video-privacy__text{padding-right:1.25em;padding-left:1.25em}.overlay--video-privacy__remember{color:#bbb;font-weight:300}.overlay--video-privacy__remember a{color:#49a9f2}.overlay--video-privacy__remember input{margin-right:0.5em;vertical-align:middle}.is-mobile .overlay--video-privacy__remember{display:inline-block;margin-top:1em;font-size:0.8em}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-ms-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dppx){.overlay--video-privacy__icon{background-image:url("/img/privacy@2x.png")}}.zci--videos{min-height:272px;min-height:18.888889rem}@media only screen and (min-width: 590px) and (max-height: 738px){.zci--videos{min-height:238px;min-height:16.527778rem}}.is-mobile .zci--videos{min-height:250.5px;min-height:17.395833rem}.tile--products{width:200px}.tile--m--products{width:200px;height:215px}.tile--pr--w{max-width:100%;width:40em}.tile--pr--w .tile__media{float:left;width:200px}.tile__media--pr{background-color:#fff;position:relative;height:120px}.tile__media--pr .tile__media__img{position:absolute;margin:auto;bottom:0;right:0;left:0;top:0;max-height:92%;z-index:0}.tile__media--pr:after{background:-owg-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,0.03));background:-webkit-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,0.03));background:-moz-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,0.03));background:-o-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,0.03));background:linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,0.03));content:""}.tile__body--pr{padding:12px;height:95px}.tile--pr__sub{font-size:12px;height:14px;margin-bottom:0;color:#333}.tile--pr__rating,.tile--pr__price{line-height:14px}.bing .tile--m--products{width:582px}.bing .tile--pr--w .tile__media{width:272px}.bing .tile__body--pr{height:110px;padding:0.8em}.bing .tile--pr__price{font-weight:bold;line-height:1}.bing .tile--pr__sub{font-size:1em;color:#222}.bing .tile--pr__original-price{color:#666;margin-left:9px}.bing .tile--pr__original-price{text-decoration:line-through;margin-left:6px}.bing .tile--pr__brand{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:#20692b;font-weight:bold}.bing .tile__media--pr{height:110px}.bing .tile__media--pr .tile__media__img{max-width:calc(100% - 10px)}.bing .tile__media--pr:after{z-index:1}.bing .tile__media__promotion-label,.bing .tile__media__free-shipping-label{position:absolute;left:10px;top:10px;border:1px solid #e3e3e3;background:white;padding:2px 9px;border-radius:3px;color:#222;font-weight:bold;box-shadow:0 1px 3px rgba(0,0,0,0.08);z-index:2}.bing .tile__media__promotion-label svg,.bing .tile__media__free-shipping-label svg{margin-right:2px;margin-bottom:-1px}.bing .tile__media__free-shipping-label{top:auto;bottom:10px}.bing .tile--pr__rating{position:absolute;top:160px;color:inherit}.bing .tile--pr__rating .review-count{margin-left:4px}.bing .tile--pr__rating .review-count::before{content:"("}.bing .tile--pr__rating .review-count::after{content:")"}.bing .tile--pr__rating .stars{font-size:14px;top:-2px}.bing .tile__title--pr{-webkit-line-clamp:2;height:2.5em;margin-bottom:21px;font-size:1.2em}.bing .tile__title--pr a{color:#00278e}.bing .is-loading ~ .badge--ad-wrap,.bing .is-loading ~ .metabar__attribution,.bing .metabar__secondary-text.is-loading,.bing .metabar__primary-text.is-loading{display:none}.bing .has-dropdowns .badge--ad-wrap::before{content:"";height:1.2em;margin-right:9px;margin-top:-1px;border-left:1px solid #d0d0d0}.bing .free-listings-divider{margin:24px 0.5% 0;padding-top:15px;border-top:1px solid #e3e3e3;height:36px}.is-mobile .bing .free-listings-divider{padding-top:12px}.bing .free-listings-divider .shopping-header .free-listings-badge{height:18px;margin-right:1px}.bing .free-listings-divider .shopping-header__title{padding-top:4px}@media only screen and (min-width: 1440px){.bing .free-listings-divider{margin-left:0.25%;margin-right:0.25%}}.bing .shopping-header{position:relative}.bing .shopping-header__title{float:left;font-weight:bold;font-size:16px;color:#222}.bing .shopping-header .badge--ad.ddgsi,.bing .shopping-header .free-listings-badge.ddgsi{color:#AAA;font-size:18px}.bing .shopping-header .badge--ad.ddgsi:hover,.bing .shopping-header .badge--ad.ddgsi:focus,.bing .shopping-header .free-listings-badge.ddgsi:hover,.bing .shopping-header .free-listings-badge.ddgsi:focus{color:#666}.bing .shopping-header .free-listings-badge{position:absolute;top:0px;right:13px;height:23px}.metabar .bing .shopping-header .free-listings-badge{top:7px;line-height:1px}.bing .metabar.is-stuck .shopping-header.is-ie{display:none}.bing .metabar:not(.is-stuck){padding-top:6px;padding-bottom:5px}.set-header--fixed .bing .tileview--grid .metabar--fixed ~ .tile-wrap,.set-header--fixed .bing .tileview--grid .metabar--fixed+.sidebar-filters,.bing .tileview--grid .metabar--fixed.is-stuck ~ .tile-wrap,.bing .tileview--grid .metabar--fixed.is-stuck+.sidebar-filters{padding-top:45px}.metabar .shopping-header__title{position:absolute;left:197px}.metabar .explore-by-items{visibility:hidden}.metabar .metabar__primary-text--on-scroll{display:none}.metabar.has-ebi.is-stuck .metabar__primary-text--top-position{display:none}.metabar.has-ebi.is-stuck .metabar__primary-text--on-scroll{display:block}.metabar.is-stuck.has-ebi{height:71px;background:#fafafa}.metabar.is-stuck.has-ebi .metabar__in{display:flex}.metabar.is-stuck.has-ebi .metabar__primary-text,.metabar.is-stuck.has-ebi .badge--ad-wrap,.metabar.is-stuck.has-ebi .metabar__secondary-text,.metabar.is-stuck.has-ebi .free-listings-badge{flex-shrink:0;margin-top:14px}.metabar.is-stuck.has-ebi .metabar__primary-text{display:inline-block;margin-left:94px;margin-right:10px;overflow:visible}.metabar.is-stuck.has-ebi .badge--ad-wrap,.metabar.is-stuck.has-ebi .free-listings-badge{position:static;display:inline-block;margin-right:10px;margin-left:auto;padding-left:10px}.metabar.is-stuck.has-ebi .explore-by-items{position:relative;overflow:hidden;display:inline-block;visibility:visible;height:65px}.metabar.is-stuck.has-ebi .explore-by-items__items{overflow-y:hidden;overflow-x:auto;white-space:nowrap;scrollbar-width:none;-ms-overflow-style:none;scrollbar-width:none}.metabar.is-stuck.has-ebi .explore-by-items__items::-webkit-scrollbar{display:none}.metabar.is-stuck.has-ebi .explore-by-items a{display:inline-block;padding:8px 12px;border:1px solid #dbdbdb;border-radius:8px;color:#222;white-space:normal;max-width:142px;overflow:hidden;line-height:1.46;background:white;margin:3px 9px 3px 0}.metabar.is-stuck.has-ebi .explore-by-items a .explore-by-items__center-vertically{display:flex;align-content:center;height:2.4em;line-height:1.2em;align-items:center;overflow:hidden}.metabar.is-stuck.has-ebi .explore-by-items a .explore-by-items__center-vertically .explore-by-items__center-vertically__text{margin:auto 0;overflow:hidden;text-overflow:ellipsis}.metabar.is-stuck.has-ebi .explore-by-items a:hover{box-shadow:0 2px 3px rgba(0,0,0,0.06)}.metabar.is-stuck.has-ebi .explore-by-items .explore-by-items__arrow{height:61px;position:absolute;top:0;width:50px}.metabar.is-stuck.has-ebi .explore-by-items .explore-by-items__arrow--left{left:0;background:linear-gradient(90deg, #fafafa 85%, rgba(250,250,250,0))}.metabar.is-stuck.has-ebi .explore-by-items .explore-by-items__arrow--left div{left:0}.metabar.is-stuck.has-ebi .explore-by-items .explore-by-items__arrow--right{right:0;background:linear-gradient(-90deg, #fafafa 80%, rgba(250,250,250,0))}.metabar.is-stuck.has-ebi .explore-by-items .explore-by-items__arrow--right div{right:0}.metabar.is-stuck.has-ebi .explore-by-items .explore-by-items__arrow div{top:30px}.metabar.is-stuck.has-ebi .metabar__mode-wrap{padding-left:0}.zci--products.bing .metabar{padding-right:0.5%}@media only screen and (min-width: 1440px){.zci--products.bing .metabar{padding-right:0.25%}}.badge--ad-wrap--shopping-vertical{position:absolute;top:5px;right:17px;font-size:12px;color:#aaa}.shopping-header .badge--ad-wrap--shopping-vertical{top:-2px;right:13px}.is-mobile .badge--ad-wrap--shopping-vertical{display:flex;flex-shrink:0;margin-top:11px;position:static;margin-right:14px}.tile--pr__rating{font-size:12px;line-height:14px;margin:0}.tile--pr__rating .review-count{white-space:nowrap;word-wrap:normal;max-width:2em;margin-left:6px}.tile--pr__rating .stars{line-height:13px;font-size:12px;top:-1px;margin-right:0}.tile--pr__badge{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;background-color:rgba(255,255,255,0.8);padding:.5em;margin:.5em}.tile__title--pr{font-size:14px;margin-bottom:6px;height:3.75em;-webkit-line-clamp:3}.tile__title--pr .tile__title__sub,.tile__title--pr .tile__neighborhood{display:none}.is-mobile .tile__title--pr{margin-bottom:6px}.is-mobile-device:not(.is-mobile) .bing .tile--m--products{max-width:calc(100% - 6px)}.is-mobile .bing .metabar .metabar__in{display:block;height:auto}.is-mobile .bing .metabar__dropdowns-wrap{display:flex;flex-grow:1}.is-mobile .bing .metabar__dropdowns-wrap::after{right:0}.is-mobile .bing.has-no-results .metabar__attribution,.is-mobile .bing.has-no-results .badge--ad-wrap--shopping-vertical,.is-mobile .bing.has-no-results .metabar .shopping-header{visibility:hidden}.is-mobile .bing .tile__media--pr{height:150px}.is-mobile .bing .tile__body--pr{height:117px}.is-mobile .bing .tile--pr__price{font-size:16px}.is-mobile .bing .tile--pr__brand{font-weight:normal}.is-mobile .bing .tile--pr__rating{top:200px}.is-mobile .bing .tile__title--pr{height:2.5em;margin-bottom:25px}.is-mobile .bing .tile__title--pr a{font-size:1em}.is-mobile .bing.is-full-page .has-tiles--grid .tile--m--products{margin:30px 24px;border-radius:25px;box-shadow:none;padding:2px 0}.is-mobile .bing .no-results{margin-left:10px;padding-top:0}.is-mobile .bing .metabar__secondary-text{display:none}.is-mobile .bing .shopping-header{padding-left:14px}.is-mobile .bing .shopping-header .shopping-header__title{position:static}.is-mobile .bing .shopping-header .badge--ad-wrap--shopping-vertical{position:absolute;margin-right:0}.is-mobile .bing .shopping-header .badge--ad-wrap--shopping-vertical::before{display:none}.tile--has-brand .tile__title--pr,.has-rating .tile__title--pr{height:2.5em}.tile__title--pr.tile__title--brand{height:12px;padding:0;font-size:12px;line-height:1.0;text-transform:uppercase;font-weight:600;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media only screen and (max-width: 590px){.detail--products .detail__desc{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;max-width:100%}}.detail__media--pr{margin-right:2em;border-right:1px solid #e3e3e3;width:37%}@media only screen and (max-width: 590px){.detail__media--pr{margin-right:0;width:100%}}.is-mobile .detail__media--pr{max-height:40%;border:none;height:40%}@media only screen and (max-height: 318.75px), only screen and (max-height: 382.5px) and (min-width: 425px){.is-mobile .detail__media--pr{min-width:120px}}.is-mobile .detail__body--pr{position:static;padding-top:3em;top:40%}.is-mobile .detail__body--pr .detail__body__content{display:block;padding-right:0}@media only screen and (max-height: 318.75px), only screen and (max-height: 382.5px) and (min-width: 425px){.is-mobile .detail__body--pr{padding-top:0}.is-mobile .detail__body--pr .detail__body__content{max-width:17em}}.detail__callout--pr{display:block;margin-top:1em}.is-mobile .detail .detail__callout--pr{position:absolute;bottom:1.25em;left:1.25em}@media only screen and (max-height: 318.75px), only screen and (max-height: 382.5px) and (min-width: 425px){.is-mobile .detail .detail__callout--pr{left:auto}}.tileview__products{min-height:228px}.result--news .result__title{font-size:1.25em;line-height:1.3}.result--news.highlight .result__extras__url{max-width:none}.result--news.result--no-excerpt .result__a{overflow:auto;text-overflow:unset;white-space:unset}.result--news.result--no-excerpt .result__image{height:80px}.result--news.result--no-excerpt .result__image__plc{font-size:2.7em}.is-mobile .result--news.result--img .result__extras{position:absolute;bottom:0.5em}.is-mobile .result--news.result--img .result__title{padding-bottom:1.2em}.is-mobile .result--news .result__snippet{display:none}.is-mobile .result--news .result__image{margin-top:4px;margin-bottom:1.5em;height:80px}.is-mobile .result--news .result__image__plc{font-size:2em}.is-mobile .result--news .result__extras__url{padding-right:0}.is-mobile .result--news.result--url-above-snippet .result__extras{top:auto}.tileview__apps.has-tiles .tile--pr{width:12.25em}.tile--apps .tile__media--pr{height:132px}.tile--apps .tile__body{padding-top:0.7em}.tile--apps .tile__media__img{width:100px}.detail--apps .detail__media__img{max-height:96%}.detail--apps .detail__media--pr{background:none;margin-right:2.1em}.detail--apps .detail__media--pr:after{display:none}@media only screen and (max-width: 590px){.detail--apps .detail__media--pr{margin-right:auto}}@media only screen and (min-width: 590px) and (max-height: 738px){.tile--apps .tile--pr__sub{display:none}}.tile--qa{height:16em;width:18.5em}.is-mobile .tile--qa{height:auto}.tile--qa h2,.tile--qa pre{display:none}.tile--qa .tile__body{height:100%}.is-mobile .tile--qa .tile__body{font-size:1em}.tile__content--qa{max-height:5.6em;overflow:hidden}.tile__content--qa p{padding:0}.detail__body--qa{padding-left:0}.is-mobile .detail.detail--qa .detail__pane,.is-mobile .detail.detail--about .detail__pane{margin-top:3em;padding-top:0}.is-mobile .detail .detail__body--qa{padding-right:1em;padding-left:1em;padding-top:1.25em;position:static}.is-mobile .detail .detail__body--qa .detail__body__content--qa{padding-right:0;max-width:100%}.is-mobile .detail .detail__body--qa .detail__body__content--qa .chomp--scroll{max-height:initial;padding-bottom:4em}.is-mobile .detail .detail__body--qa .detail__more{position:absolute;top:-.25em;left:1em}.region-flag__wrap{position:relative;display:block;float:left}.region-flag__img{display:inline-block;vertical-align:top;position:relative}.region-flag__wrap--small{width:20px;height:20px}.region-flag__wrap--small.has-region:before{content:'';top:0;right:0;bottom:0;left:0;border:1px solid #000;position:absolute;opacity:.2;border-radius:100%;z-index:1}.region-flag__wrap--small .region-flag__img{height:20px}.region-flag__wrap--xsmall{width:16px;height:16px}.region-flag__wrap--xsmall.has-region:before{content:'';top:0;right:0;bottom:0;left:0;border:1px solid #000;position:absolute;opacity:.2;border-radius:100%;z-index:1}.region-flag__wrap--xsmall .region-flag__img{height:16px}.region-flag__wrap--large{height:32px;width:32px}.region-flag__wrap--large.has-region:before{content:'';top:0;right:0;bottom:0;left:0;border:2px solid #000;position:absolute;opacity:.2;border-radius:100%;z-index:1}.region-flag__wrap--large .region-flag__img{height:32px}.tile--audio{width:14em}.tile--audio .tile__media{padding-bottom:100%;height:0;background-color:#f7f7f7}.tile--audio .tile__media__img{max-width:none;height:100%;position:absolute;margin:auto;right:0;left:0;top:0}.tile--audio .tile__title{font-size:1.1em;height:2.4em;line-height:1.2em;display:block}.tile--audio .tile__footer{height:auto;margin-bottom:0;margin-top:1em;color:#aaa;line-height:1em}.audio-controls{position:absolute;display:block;opacity:0;width:100%;height:100%;top:0;left:0;right:0;bottom:0;text-align:center}.is-paused .audio-controls,.is-selected .audio-controls,.highlight .audio-controls,.is-unavailable .audio-controls{opacity:1;background:rgba(0,0,0,0.7)}.audio-controls__action{display:block;position:absolute;left:0;top:50%;font-size:2.8em;line-height:2.8em !important;margin-top:-1.4em;width:100%;color:#fff}.is-loading .audio-controls__action,.is-unavailable .audio-controls__action{display:none}.audio-controls__progress{position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0}.audio-controls__progress-bg,.audio-controls__progress-loading,.audio-controls__progress-playback{position:absolute;margin:-4em 0 0 -4em;top:50%;left:50%;width:8em;height:8em;clip:rect(0, 8em, 8em, 4em);z-index:2}.is-unavailable .audio-controls__progress-bg,.is-unavailable .audio-controls__progress-loading,.is-unavailable .audio-controls__progress-playback{display:none}.audio-controls__progress-bg.gt50,.audio-controls__progress-loading.gt50,.audio-controls__progress-playback.gt50{clip:rect(auto, auto, auto, auto)}.audio-controls__progress-bg.gt50 .full-fill,.audio-controls__progress-loading.gt50 .full-fill,.audio-controls__progress-playback.gt50 .full-fill{display:block}.audio-controls__progress-bg .rotated-fill,.audio-controls__progress-bg .full-fill,.audio-controls__progress-loading .rotated-fill,.audio-controls__progress-loading .full-fill,.audio-controls__progress-playback .rotated-fill,.audio-controls__progress-playback .full-fill{display:block;position:absolute;border:.4em solid #fff;width:7.2em;height:7.2em;clip:rect(0em, 4em, 8em, 0em);-moz-border-radius:4em;-webkit-border-radius:4em;border-radius:4em}.audio-controls__progress-bg .full-fill,.audio-controls__progress-loading .full-fill,.audio-controls__progress-playback .full-fill{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);display:none}.audio-controls__progress-loading .rotated-fill,.audio-controls__progress-loading .full-fill{border-color:rgba(255,255,255,0.2)}.is-loading .audio-controls__progress-loading{clip:rect(auto, auto, auto, auto)}.is-loading .audio-controls__progress-loading .rotated-fill{-webkit-animation:spin 2s linear 0s infinite;-moz-animation:spin 2s linear 0s infinite;-o-animation:spin 2s linear 0s infinite;animation:spin 2s linear 0s infinite}.is-selected .audio-controls__progress-bg{clip:rect(auto, auto, auto, auto)}.is-selected .audio-controls__progress-bg .full-fill{display:block}.is-selected .audio-controls__progress-bg .rotated-fill,.is-selected .audio-controls__progress-bg .full-fill{border-color:rgba(255,255,255,0.1)}.is-selected.is-loading .audio-controls__progress-bg .rotated-fill,.is-selected.is-loading .audio-controls__progress-bg .full-fill{display:none}.audio-controls__time{position:absolute;color:#fff;bottom:1em;right:1em}.is-unavailable .audio-controls__time{color:#ccc;width:100%;text-align:center;right:0}@-moz-keyframes spin{from{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(360deg)}}@-webkit-keyframes spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@-o-keyframes spin{from{-o-transform:rotate(0deg)}to{-o-transform:rotate(360deg)}}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.results:after,.results--ads:after{content:"";display:table;clear:both}.results{margin-bottom:2em;margin-top:.5em;position:relative;padding-bottom:5em}.has-footer .results{padding-bottom:20px}.is-mobile .results{margin-top:0}.is-mobile.has-footer .results{padding-bottom:0;margin-bottom:0}.serp__results{padding-top:10px;position:relative}.is-mobile-device .serp__results{min-width:auto;box-sizing:content-box}.is-not-mobile-device .serp__results{min-width:980px;box-sizing:border-box}@media screen and (max-width: 980px){.is-not-mobile-device .serp__results{padding-right:13px}}.results--main{float:left;width:100%}@media screen and (max-width: 980px){.is-mobile-device .results--main{float:none}}.results--sidebar{display:block;overflow:hidden;padding:30px 2px 0;margin:12px 10px 0 640px;text-align:left;min-width:253px;max-width:465px}@media only screen and (max-width: 980px){.is-mobile-device .results--sidebar{display:none}}.serp__top-right{position:absolute;top:.5em}.serp__bottom-right{position:fixed;bottom:0}.serp__top-right,.serp__bottom-right{right:0;text-align:right;z-index:5}.results--powered{padding:0 .5em .5em;color:#888;background-color:rgba(255,255,255,0.85)}.results--powered a,.results--powered a:visited{color:inherit}.results--powered__badge-link:hover{text-decoration:none}.results--powered__badge{vertical-align:baseline}.results--powered__badge.badge--blekko{margin-left:2px;bottom:-1px}.results--powered__badge.badge--bing{margin-left:3px;bottom:-5px}.results--powered__badge.badge--yandex{bottom:-3px}.results--powered__badge.badge--yahoo{bottom:-1px}.results--ads .result:first-child{margin-top:0.5em}.is-mobile .results--ads .result:first-child{margin-top:0}.results .results--ads{margin-top:1em;margin-bottom:1em}.is-mobile .results--ads{margin-top:0;margin-bottom:0}.results--ads--rrail .result--ad:first-child{margin-top:1px}.results--ads--rrail .result--ad:last-child{margin-bottom:10px}.results--ads--rrail .result--ad{text-align:left;width:250px;margin-bottom:0}.results--ads--rrail .result__body{padding-left:0;padding-right:0}.has-right-rail-module .sidebar-modules:empty+.results--ads--rrail{margin-top:0;padding-top:0}.has-right-rail-module .results--ads--rrail{margin-top:1px;padding-top:8px}.has-right-rail-module .results--ads--rrail .result--ad{width:auto;padding-top:1em;border-left:1px solid rgba(150,150,150,0.3);border-radius:0}.has-right-rail-module .results--ads--rrail .result--ad:first-child{padding-top:0}.has-right-rail-module .results--ads--rrail .result__body{padding:0 22px}.no-results{padding-top:1em;padding-left:10px;padding-bottom:7px}.no-results.no-results--bottom{margin-bottom:1em}.tile-wrap .no-results{margin-left:10px}.no-results__tips-title{padding-bottom:.5em}.no-results__web,.no-results__retry,.no-results__tips{margin-top:10px;line-height:1.2}.no-results__tips-list{list-style:initial;padding-left:20px}.is-mobile .no-results--bottom{padding-left:17px;padding-right:17px}.feedback-prompt{font-size:12px;text-align:right;padding:8px 0 0 0;line-height:1;color:#666}.module .feedback-prompt,.is-mobile .module--images .feedback-prompt{position:absolute;right:0;bottom:-22px}.is-expanded .module .feedback-prompt,.is-expanded .is-mobile .module--images .feedback-prompt,.is-mobile .is-expanded .module--images .feedback-prompt{display:none}.map-sidebar-footer .feedback-prompt{padding:5px 0}.feedback-prompt__link{padding:0 5px;color:#666;text-decoration:underline}.feedback-prompt__link:hover,.feedback-prompt__link:active{color:#111}@media only screen and (max-width: 590px){.feedback-prompt{padding:12px 0 0 0}.feedback-prompt__link{padding:0 8px}.map-sidebar-footer .feedback-prompt__link{padding:0}}.module--places .module__section.place-list-item{padding:16px}.module__section.place-list-item{overflow:hidden;cursor:pointer}.module__section.place-list-item:hover{background-color:#f7f7f7}.place-list-item__title{padding:0 0 5px;font-size:1.2em;line-height:1;font-weight:600}.place-list-item__image{float:right;margin:0 0 0 1em;height:70px;width:70px;background-size:cover;background-position:center;background-color:transparent;border-radius:4px;border-radius:var(--default-border-radius)}@media only screen and (max-width: 425px){.place-list-item__image{height:80px;width:80px}}.module__section--minimized .place-list-item__image{margin-top:0}.place-list-item__image__img{opacity:0}.place-list-item__info{color:#666;padding:0}.place-list-item__info__item{line-height:1;padding-bottom:4px;font-size:1em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.place-list-item__info__item:last-child{padding-bottom:0}.place-list-item__rating{display:block;line-height:1;padding:0 0 5px;font-size:1em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#666}.place-list-item__rating .stars{font-size:1.3em}.place-list-item__rating--tripadvisor{line-height:16px;margin-bottom:-1px}.place-list-item__rating__yelp-stars{vertical-align:middle;height:1.25em;margin-right:.5em}.place-list-item__rating__count{vertical-align:middle;font-size:1em}@media only screen and (min-width: 980px) and (max-width: 1015px){.place-list-item__rating__count{margin-top:5px}}.is-not-mobile-device .place-detail{padding-bottom:.5em}.place-detail .place-detail__section{padding-bottom:17px}.ia-modules .place-detail .place-detail__section{padding-bottom:11px}.place-detail.place-detail--map{box-shadow:none}.place-detail__item{line-height:2;padding:0}.place-detail__item .module__title,.place-detail__item .module__title .module__title__link{font-size:26px;line-height:26px}.place-detail__item .module__title__link:hover{text-decoration:underline;cursor:pointer}.place-detail__header-row{display:flex}.place-detail__name{margin-bottom:4px;flex-grow:1}.place-detail__review-count{line-height:16px;color:#666}.place-detail__review-count__link,.place-detail__review-count__link:visited{margin-left:5px;color:#666}.place-detail__review-count__link,.place-detail__review-count__price{vertical-align:bottom;line-height:12px}.place-detail__data__label{font-weight:bold}.place-detail__subtitle{margin-top:2px;color:#666}.place-detail__subtitle-placeholder{height:60px}.place-detail__data{margin-top:-2px}.place-detail__rating{padding:0 0 6px;line-height:17px}.place-detail__rating .stars{margin-right:0;font-size:1.3em}.place-detail__cta-block{width:100%;margin:0 auto;padding:0;display:flex;justify-content:space-evenly}.place-detail__cta-item{display:block;text-align:center;cursor:pointer}.place-detail__cta-item a{display:block}.place-detail__cta-item:hover .place-detail__cta-icon{background-color:#fff}.place-detail__cta-item:active .place-detail__cta-icon{border-color:#ddd}.place-detail__cta-item:hover .place-detail__cta-text{text-decoration:underline}.place-detail__cta-item--website .place-detail__cta-icon{background-image:url(assets/maps/globe-icon.svg)}.dark-bg .place-detail__cta-item--website .place-detail__cta-icon{background-image:url(assets/maps/globe-icon-dark.svg)}.place-detail__cta-item--directions .place-detail__cta-icon{background-image:url(assets/maps/directions-icon.svg)}.dark-bg .place-detail__cta-item--directions .place-detail__cta-icon{background-image:url(assets/maps/directions-icon-dark.svg)}.place-detail__cta-item--map .place-detail__cta-icon{background-image:url(assets/maps/map-icon.svg)}.dark-bg .place-detail__cta-item--map .place-detail__cta-icon{background-image:url(assets/maps/map-icon-light.svg)}.place-detail__cta-item--call .place-detail__cta-icon{background-image:url(assets/maps/call-icon.svg)}.dark-bg .place-detail__cta-item--call .place-detail__cta-icon{background-image:url(assets/maps/call-icon-dark.svg)}.place-detail__cta-text{display:block;text-align:center;color:#333}.dark-bg .place-detail__hours-toggle,.dark-bg .place-detail__dot{color:#666}.place-detail__status{font-weight:bold}.place-detail__status--on{color:#5b9e4d}.dark-bg .place-detail__status--on{color:#6abd58}.place-detail__status--warn{color:#f46d13}.dark-bg .place-detail__status--warn{color:#fd924c}.place-detail__status--off{color:#666}.dark-bg .place-detail__status--off{color:#ccc}.place-detail__more-at{float:right;padding-left:1em}.place-detail__more-at--yelp{margin-top:-8px}.is-mobile .place-detail__more-at--yelp{margin-top:-3px}.is-mobile .place-detail__more-at--tripadvisor{margin-top:5px}.place-detail__more-at__logo{display:block;background-repeat:no-repeat;background-position:center;background-size:contain}.place-detail__more-at__logo--tripadvisor{width:87px;height:13px;background-image:url(assets/maps/logo-ta.svg)}.dark-bg .place-detail__more-at__logo--tripadvisor{background-image:url(assets/maps/logo-ta-darktheme.svg)}.place-detail__more-at__logo--yelp{width:43px;height:22px;background-image:url(assets/maps/logo-yelp.svg)}.place-detail__attribution{padding-top:12px}.place-detail__reviews,.place-detail__reviews__container{padding-top:12px}.is-mobile .place-detail__reviews{padding-top:2px}.place-detail__reviews_link{margin-top:1em;text-align:left}.place-detail__reviews__review{padding-bottom:16px;margin:0}.place-detail__reviews__review:last-child{padding-bottom:0}.ia-modules .place-detail__reviews__review{padding-bottom:11px}.ia-modules .place-detail__reviews__review:last-child{padding-bottom:0}.place-detail__reviews__review__text{padding:0}.place-detail__section .dir-btn{margin-bottom:0}.place-detail__cta-item .dir-btn{margin:0;float:none}.place-detail__cta-text .dropdown--directions{float:right}.places-single-map__placeholder{height:150px}.place-hours{position:relative;margin:.75em 0;padding:.75em 0;border-top:1px solid #eee;border-bottom:1px solid #eee}.is-mobile .place-hours{border:none;padding-bottom:.25em;padding-top:.25em}.place-hours__item--current .place-hours__item__day,.place-hours__item--current .place-hours__item__hours{font-weight:bold}.place-hours__item__day{padding-right:.5em}.place-hours__close{position:absolute;top:1em;right:0;cursor:pointer}.module.place-snippet,.is-mobile .place-snippet.module--images{padding:20px;width:initial;max-width:600px}@media only screen and (max-width: 590px){.module.place-snippet,.is-mobile .place-snippet.module--images{margin-bottom:7px}}.place-snippet__header{padding:0;padding-bottom:6px;font-size:24px;font-weight:bold;line-height:1}.is-mobile .place-snippet__header{font-size:1.5em}.place-snippet__subtitle-name,.place-snippet__subtitle-name:hover,.place-snippet__subtitle-name:link,.place-snippet__subtitle-name:active,.place-snippet__subtitle-name:visited{color:inherit}.place-snippet__subtitle{padding:0}.place-snippet__link{word-break:break-word}.address-detail{box-sizing:border-box;background-color:#fff;display:flex;align-items:center;padding:20px;position:relative;overflow:hidden;height:100%}@media only screen and (max-width: 590px){.module--map .address-detail{padding:16px}}.address-detail__title{flex-grow:1}.address-detail__links{display:inline-block;vertical-align:middle;font-weight:600;color:#333}.address-detail__name{font-weight:600;font-size:22px;padding:0 0 5px 0;color:#333;display:block}.address-detail__name:hover,.address-detail__name:active,.address-detail__name:focus,.address-detail__name:visited{color:#333}@media only screen and (max-width: 359px){.address-detail__name{font-size:17px}}@media only screen and (min-width: 360px) and (max-width: 425px){.address-detail__name{font-size:19px}}.address-detail__address{color:#333;display:block;font-size:14px;font-weight:500;padding:0;line-height:1.2}.address-detail__address,.address-detail__address:hover,.address-detail__address:active,.address-detail__address:visited{color:#888}@media only screen and (max-width: 425px){.address-detail__address{font-size:13px}}.address-detail__latlon{font-size:13px;line-height:1.65;font-weight:500;padding:0;color:#888}@media only screen and (max-width: 359px){.address-detail__latlon{font-size:12px;line-height:1.6}}.footer{width:100%;background-color:#fafafa;border-top:1px solid #d9d9d9;padding-bottom:30px;display:none}@media only screen and (max-width: 649px){.footer{display:none !important}}.set-align-center .footer{text-align:center}@media only screen and (max-width: 1400px){.set-align-center .footer .footer__column:last-of-type{display:none}}@media only screen and (max-width: 1400px){.set-align-center .footer{padding-left:0}.set-align-center .footer__left{margin-right:0;padding-left:0}}.footer--mobile{width:100%;background-color:#fafafa;border-top:1px solid #d9d9d9;padding:20px 0;text-align:center;display:none}.dark-bg .map-sidebar-footer .footer--mobile{border-top-color:transparent}.footer--mobile .footer__links{margin-right:-10px;margin-bottom:3px}.footer--mobile .footer__links a:last-of-type img{margin-left:-5px}.footer--mobile .footer_cards{padding:0 20px;margin:0 0 20px 0}.footer--mobile .footer__card{text-align:start;margin:0;height:auto}.footer--mobile .footer__card .footer__text{height:auto;margin-top:3.5px}.footer--mobile .footer__card__title{width:auto;height:auto}.footer--mobile .footer__card__icon,.footer--mobile .footer__card__icon--dark{width:60px;height:60px;margin:0 -10px 0 6px}.footer__title{font-size:17px;font-weight:bold;padding-top:20px;color:#fff}.dark-header .footer__title{color:#fff}.footer__text{color:#888;font-size:13px}.footer__left,.footer__right{display:inline-block;vertical-align:top;text-align:left}.footer__left{margin-right:40px;padding-left:6px}.footer__column{display:inline-block;width:200px;vertical-align:top}@media only screen and (max-width: 865px){.footer__column{display:none}}.footer__social-icon{height:20px;width:20px;display:inline-block;margin-right:8px}.footer__links{margin-top:11.75px}.footer_cards{max-width:590px;margin-top:25px}.footer__card{display:inline-block;width:32.2%;height:137px;padding:20px;box-sizing:border-box;border:1px solid #e5e5e5;box-shadow:0px 2px 3px rgba(0,0,0,0.06);vertical-align:top;line-height:1.2;border-radius:4px;border-radius:var(--default-border-radius)}.footer__card:not(:last-child){margin-right:1.2%}.dark-header .footer__card{background-color:#282828;border:1px solid rgba(0,0,0,0)}.footer__card:hover{text-decoration:none}.footer__card .footer__text{margin-top:10px;padding:0;height:53px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.footer__card__title{font-size:15px;font-weight:600;padding:0;width:90px;height:36px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.dark-header .footer__card__title{color:#fff}.footer__card__title:hover{text-decoration:underline}.footer__card__icon,.footer__card__icon--dark{width:50px;height:50px;float:right;margin-left:6px;margin-top:-8px}.footer__card__icon--dark{display:none}.dark-header .footer__card__icon--dark{display:initial}.dir-btn{float:right;margin:0 0 1em 1em}.address-detail .dir-btn{margin-top:5px;margin-bottom:0}.address-detail--apple-device .dir-btn{margin-top:0}.dark-bg .dir-btn .dir-btn__link{font-weight:600}.dir-btn .dropdown{display:table;height:25px;margin:0 auto}.dir-btn .dropdown__button{display:block;font-size:0.85em;font-weight:bold;height:25px;line-height:26px;padding:0 12px 0 1px}.dir-btn .dropdown__button:after{margin-top:-6px;margin-left:2px}.map-type-select{height:60px;width:90px;background:#fff;border-radius:4px;border:none;box-shadow:0 0 1px 1px rgba(0,0,0,0.15);outline:none;cursor:pointer;background-size:80px 50px;background-position:50% 50%;background-repeat:no-repeat}.map-type-select--satellite{background-image:url(assets/maps/map-type-satellite.svg)}.map-type-select--map{background-image:url(assets/maps/map-type-map.svg)}.dark-bg .map-type-select--map{background-image:url(assets/maps/map-type-map-dark.svg)}.map-type-select--small{position:fixed;right:10px;top:66px;width:48px;height:34px;background-size:42px 28px}.map-type-select__label{position:absolute;bottom:7px;left:10px;font-size:13px;font-weight:600;font-family:"DDG_ProximaNova","DDG_ProximaNova_UI_0","DDG_ProximaNova_UI_1","DDG_ProximaNova_UI_2","DDG_ProximaNova_UI_3","DDG_ProximaNova_UI_4","DDG_ProximaNova_UI_5","DDG_ProximaNova_UI_6","Proxima Nova","Helvetica Neue","Helvetica","Segoe UI","Nimbus Sans L","Liberation Sans","Open Sans",FreeSans,Arial,sans-serif;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,0.25)}.directions-search{display:table-cell}.directions-module .directions-search{display:table;width:100%}.is-mobile .directions-search{padding-right:5px}.directions-search .search__button{visibility:hidden;opacity:0}.directions-search .search--hover .search__button,.directions-search .search--focus .search__button{visibility:visible;opacity:1}.directions-search .map-searchbar:first-child{margin-bottom:5px}.directions-search .map-searchbar{display:block !important}.directions-search__input-container{display:flex;padding-left:5px}.directions-search__icons{position:relative;width:37px}.vertical--map__sidebar .directions-search__icons{margin-left:7px}.directions-search__icon__start{border:2px solid #888;border-radius:50%;position:absolute;top:16px;left:3px;box-sizing:border-box;height:10px;width:10px}.directions-search__icon__route{position:absolute;top:27px;left:6px}.directions-search__icon__route__dot{background-color:#888;border-radius:50%;height:4px;margin:4px 0;width:4px}.directions-search__icon__end{position:absolute;top:62px;left:-3px;color:#888;fill:currentColor}.directions-search__icon__end svg{display:block;height:22px;width:22px}.directions-search__inputs{flex:1}.directions-search__mode{display:table;width:100%;table-layout:fixed;margin-bottom:7px;padding:6px 0 0 48px}.directions-module .directions-search__mode{display:none}.directions-search__mode__type{display:inline-block;cursor:pointer}.directions-search__mode__type:first-child{margin-right:20px}.directions-search__mode__type__icon{width:30px;height:30px;vertical-align:middle;margin-right:8px}.directions-search__mode__type__text{vertical-align:middle}.directions-search__mode__type__icon--drive{background-image:url(assets/maps/drive.svg)}.dark-bg .directions-search__mode__type__icon--drive,.is-selected .directions-search__mode__type__icon--drive{background-image:url(assets/maps/drive-darktheme.svg)}.directions-search__mode__type__icon--walk{background-image:url(assets/maps/walk.svg)}.dark-bg .directions-search__mode__type__icon--walk,.is-selected .directions-search__mode__type__icon--walk{background-image:url(assets/maps/walk-darktheme.svg)}.directions-results__initial-message,.directions-results__external-provider{padding:20px}.directions-table{display:table;width:100%}.directions-table .directions-col{display:table-cell}.directions-table .directions-col--icon{position:relative;width:40px}.directions-table .directions-col--icon__image{position:absolute;top:0;width:18px;height:20px;border-radius:0;background-position:center bottom}.directions-route-step-list__container .directions-table .directions-col--icon__image{width:auto;height:auto;max-width:25px}.directions-table .directions-col--icon__image--drive{background-image:url(assets/maps/drive.svg)}.dark-bg .directions-table .directions-col--icon__image--drive{background-image:url(assets/maps/drive-darktheme.svg)}.directions-table .directions-col--icon__image--walk{background-image:url(assets/maps/walk.svg)}.dark-bg .directions-table .directions-col--icon__image--walk{background-image:url(assets/maps/walk-darktheme.svg)}.directions-route-overview{position:relative;padding:14px;border-left:5px solid #fff;border-bottom:1px solid #E3E3E3;box-shadow:0px 3px 14px -6px #eee;cursor:pointer;line-height:1}.dark-bg .directions-route-overview{border-left-color:#333;border-bottom-color:#333;box-shadow:none}.directions-route-overview:hover{background-color:#fafafa;border-left-color:#fafafa}.directions-route-overview:hover.is-selected:hover{border-left-color:#66abff}.dark-bg .directions-route-overview:hover{background-color:#333;border-left-color:#333}.directions-route-overview.is-selected{border-left:5px solid #66abff}.is-mobile .directions-route-overview .directions-route-overview__toggle{display:none}.is-mobile .directions-route-overview.is-selected .directions-route-overview__toggle{display:block}.directions-route-overview__heading{padding-bottom:1px;font-size:22px;line-height:26px;letter-spacing:-0.0137019px;color:#888888}.directions-route-overview__heading__primary{color:#5B9E4D;font-weight:bold}.directions-route-overview__heading__secondary{font-size:18px;line-height:20px;color:#888888}.directions-route-overview__item{color:#888}.directions-route-overview__toggle{padding:15px 0 2px;font-weight:bolder}.directions-route-overview__icon{padding-right:10px}.dark-bg .directions-route-overview__icon{color:#888;fill:currentColor}.directions-route-info__heading__primary{font-weight:bold;font-size:19px;vertical-align:bottom}.directions-route-info__heading__primary.has-results{color:#5B9E4D}.directions-route-info__heading__secondary{font-size:14px;line-height:20px;color:#888888}.directions-route-info__transport{width:18px;height:16px;display:inline-block;padding-left:20px;background-position:center;background-repeat:no-repeat}.directions-route-info__transport--drive{background-image:url(assets/maps/drive.svg)}.dark-bg .directions-route-info__transport--drive{background-image:url(assets/maps/drive-darktheme.svg);opacity:0.5}.directions-route-info__transport--walk{background-image:url(assets/maps/walk.svg)}.dark-bg .directions-route-info__transport--walk{background-image:url(assets/maps/walk-darktheme.svg);opacity:0.5}.directions-route-step-list{padding:0 20px 0 60px;background-color:#fafafa;border-bottom:1px solid #e3e3e3}.dark-bg .directions-route-step-list{background-color:#333}.directions-route-step-list__heading{font-weight:bold}.directions-route-step{padding:14px 0;border-bottom:1px solid #e3e3e3}.directions-route-step:last-child{border-bottom:none}.dark-bg .directions-route-step{border-bottom-color:#444}.directions-route-step__heading{font-size:17px;font-weight:bold;line-height:22px;letter-spacing:-0.0122596px;color:#333333}.dark-bg .directions-route-step__heading{color:#ccc}.directions-route-step__instructions{font-size:14px;line-height:22px;color:#888888}.dark-bg .directions-route-step__instructions{color:#ccc}.directions-route-overview__print{display:none}.is-not-mobile-device .is-selected .directions-route-overview__print{display:block;position:absolute;bottom:12px;right:14px;color:#66abff}.is-not-mobile-device .is-selected .directions-route-overview__print .directions-route-overview__print__icon{vertical-align:middle;fill:#66abff}.is-not-mobile-device .is-selected .directions-route-overview__print .directions-route-overview__print__text{vertical-align:middle;margin-left:4px}.is-not-mobile-device .is-selected .directions-route-overview__print .directions-route-overview__print__text:hover{text-decoration:underline}.directions-print-preview .directions-route-overview__heading__primary,.directions-print-preview .directions-route-overview__heading__secondary,.directions-print-preview .directions-route-overview__item,.directions-print-preview .directions-route-step__heading,.directions-print-preview .directions-route-step__instructions{color:black}.directions-print-preview .directions-print-preview__wrap{padding:0;min-width:780px;max-width:80%}.directions-print-preview .directions-print-preview__close{position:absolute;top:12px;right:12px;cursor:pointer;z-index:1;color:black}.dark-bg .directions-print-preview .directions-print-preview__close{color:#e2e2e2}.directions-print-preview .directions-print-preview__content__header{position:relative}.directions-print-preview .directions-print-preview__content__header__title{font-size:18px;font-weight:bold;padding:12px 0 8px;vertical-align:bottom;background:#f7f7f7;border-bottom:1px solid #e3e3e3;color:black}.dark-bg .directions-print-preview .directions-print-preview__content__header__title{background-color:#282828;color:white}.directions-print-preview .directions-print-preview__content__body{padding:2em}.directions-print-preview .directions-print-preview__footer{position:relative;padding:10px 0;overflow:hidden;box-shadow:0px -5px 10px rgba(0,0,0,0.1)}.directions-print-preview .directions-print-preview__footer__cta{float:right;margin-right:21px}.directions-print-preview .directions-print-preview__content__body{overflow:auto;background:white}.directions-print-preview .directions-print-preview__print-header{display:table;width:100%}.directions-print-preview .directions-print-preview__print-header__title .directions-col{vertical-align:top;text-align:left}.directions-print-preview .directions-print-preview__print-header__title .directions-route-overview__heading{line-height:22px}.directions-print-preview .directions-print-preview__print-header__title .directions-col--icon__image{width:25px;background-size:contain}.directions-print-preview .directions-print-preview__print-header__title .directions-col--icon__image--drive{background-image:url(assets/maps/drive.svg) !important}.directions-print-preview .directions-print-preview__print-header__title .directions-col--icon__image--walk{background-image:url(assets/maps/walk.svg) !important}.directions-print-preview .directions-print-preview__print-header__title,.directions-print-preview .directions-print-preview__print-header__logo{display:table-cell;vertical-align:top}.directions-print-preview .directions-print-preview__print-header__logo{text-align:right}.directions-print-preview .directions-route-overview__item{margin-bottom:2px;font-size:16px}.directions-print-preview .directions-route-overview__item .ddgsi-arrow-right{margin-right:2px}.directions-print-preview .directions-col--icon{width:30px !important;padding-right:5px;top:2px}.directions-print-preview .directions-col--icon__image{color-adjust:exact;-webkit-print-color-adjust:exact}.directions-print-preview__print-map{width:780px;height:326px;background:#eee;margin:1em 0}.directions-print-preview__print-map img{width:780px;height:326px}.directions-print-preview__print-steps{text-align:left}.directions-print-preview__print-steps .directions-route-step-list{padding-left:0;border:none;background:white}.directions-print-preview__print-steps .directions-route-step{border:none}@media print{@page{margin:2cm}html.has-vertical-map-open{position:static !important;overflow:auto !important;min-width:0 !important;background-color:white}html.has-vertical-map-open body{font-family:"DDG_ProximaNova","DDG_ProximaNova_UI_0","DDG_ProximaNova_UI_1","DDG_ProximaNova_UI_2","DDG_ProximaNova_UI_3","DDG_ProximaNova_UI_4","DDG_ProximaNova_UI_5","DDG_ProximaNova_UI_6","Proxima Nova","Helvetica Neue","Helvetica","Segoe UI","Nimbus Sans L","Liberation Sans","Open Sans",FreeSans,Arial,sans-serif;background:white !important;color:black !important;font-size:12pt}html.has-vertical-map-open .footer,html.has-vertical-map-open .vertical--map,html.has-vertical-map-open .directions-route-overview__toggle,html.has-vertical-map-open .directions-print-preview__close,html.has-vertical-map-open .directions-print-preview__content__header,html.has-vertical-map-open .directions-print-preview__footer,html.has-vertical-map-open .notification{display:none !important}html.has-vertical-map-open img,html.has-vertical-map-open svg{break-inside:avoid}html.has-vertical-map-open .directions-print-error-message{display:flex;justify-content:center;flex-direction:column;height:100%;position:absolute;top:0;left:0;right:0;bottom:0;padding:0}html.has-vertical-map-open .directions-print-error-message__logo{width:80%;max-width:150mm;margin:0 auto;margin-bottom:50px;text-align:left}html.has-vertical-map-open .directions-print-error-message__logo img{width:100px}html.has-vertical-map-open .directions-print-error-message__text{width:80%;max-width:150mm;margin:0 auto;text-align:center;font-size:45px;font-weight:bold;text-align:left;line-height:1.2}html.has-vertical-map-open .directions-print-error-message__text ol{padding-left:2em;list-style-type:decimal}html.has-vertical-map-open .directions-print-error-message__image{width:80%;max-width:150mm;text-align:center;margin:0 auto}html.has-vertical-map-open .directions-print-preview,html.has-vertical-map-open .modal__wrap,html.has-vertical-map-open .directions-print-preview__wrap{overflow:auto;position:static}html.has-vertical-map-open .modal__wrap{display:block}html.has-vertical-map-open .directions-print-preview{display:none}html.has-vertical-map-open .directions-print-preview.is-showing{display:block}html.has-vertical-map-open .directions-print-preview__wrap{width:100%;height:100%;padding:0;min-width:auto;max-width:initial;border:none}html.has-vertical-map-open .directions-print-preview__content__body{height:100% !important}html.has-vertical-map-open .directions-print-preview__print-map{width:auto;height:auto;background:white}html.has-vertical-map-open .directions-print-preview__print-map img{width:100%;height:auto}html.has-vertical-map-open .directions-route-overview__heading{font-size:23.8pt;padding-bottom:6px}.directions-print-preview__print-header__title html.has-vertical-map-open .directions-route-overview__heading{line-height:23.8pt;width:30px;height:25px;top:-2px}html.has-vertical-map-open .directions-route-overview__item{font-size:16.8pt}html.has-vertical-map-open .directions-route-step{break-inside:avoid}html.has-vertical-map-open .directions-route-step__heading{font-size:18.2pt}html.has-vertical-map-open .directions-route-step__instructions{font-size:15.4pt;line-height:23pt}html.has-vertical-map-open .directions-col--icon{padding-right:12px}html.has-vertical-map-open .directions-col--content{padding-top:2px}}.open-in-app{position:relative}.open-in-app__deep-link{z-index:1002;position:absolute;top:-36px;right:6px;min-width:42px;box-sizing:border-box;display:inline-block;font-family:"DDG_ProximaNova","DDG_ProximaNova_UI_0","DDG_ProximaNova_UI_1","DDG_ProximaNova_UI_2","DDG_ProximaNova_UI_3","DDG_ProximaNova_UI_4","DDG_ProximaNova_UI_5","DDG_ProximaNova_UI_6","Proxima Nova","Helvetica Neue","Helvetica","Segoe UI","Nimbus Sans L","Liberation Sans","Open Sans",FreeSans,Arial,sans-serif;cursor:pointer;background-color:#678FFF;color:#fff;border:none;border-radius:55px;padding:5px 9px;font-size:14px;line-height:14px;font-weight:600;text-align:center;text-decoration:none}@media only screen and (max-width: 361px){.open-in-app__deep-link{right:6px}}.open-in-app__deep-link:focus,.open-in-app__deep-link:hover,.open-in-app__deep-link:active{outline:none;background-color:#678FFF;color:#fff;text-decoration:none}.keep-extension-dialogues{position:fixed;top:0;left:calc(50vw - 220px);height:140px;width:440px;background-color:transparent;z-index:1000}.keep-extension-dialogues:focus{outline:none}.keep-extension-dialogues--centered{top:calc(50vh - 110px)}html.has-keep-extension-modal{overflow:hidden}.keep-extension-alert{position:fixed;box-sizing:border-box;padding:41px 28px 20px;border-radius:5px;top:200px;left:calc(50vw - 220px);width:440px;color:white;z-index:10000;animation:keep-extension-alert-fade-in ease-in-out .4s;background-color:#3475E0}.destroying .keep-extension-alert{animation:keep-extension-alert-fade-out ease-in-out .4s}.keep-extension-alert::before{content:'';display:block;position:absolute;top:-100px;left:calc(60% + 1px);border-left:2px solid #3475E0;height:100px;transform-origin:top;animation:keep-extension-alert-grow ease-in-out .4s}.keep-extension-alert img{width:48px;filter:drop-shadow(0px 4px 20px rgba(0,0,0,0.4));position:absolute;top:-24px;left:24px}.keep-extension-alert header{font-size:20px;line-height:22px;letter-spacing:-0.25px;font-weight:700}.keep-extension-alert p{margin-top:6px;font-size:16px;line-height:18px;font-weight:300}.keep-extension-alert.keep-extension-alert--inverted{color:#3475E0;background-color:white}.keep-extension-alert.keep-extension-alert--inverted::before{border-left-color:white}.keep-extension-alert--centered{top:calc(50vh + 100px)}.keep-extension-alert--connector-offseted::before{left:calc(60% + 126px)}.keep-extension-alert__blur{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(255,255,255,0.8);z-index:1000;animation:keep-extension-alert-fade-in ease-in-out .4s}.keep-extension-alert__blur.keep-extension-alert__blur--inverted{background-color:rgba(0,0,0,0.5)}.destroying .keep-extension-alert__blur{animation:keep-extension-alert-fade-out ease-in-out .4s}html.has-extension-alert{overflow:hidden}@keyframes keep-extension-alert-fade-in{from{opacity:0}to{opacity:1}}@keyframes keep-extension-alert-fade-out{from{opacity:1}to{opacity:0}}@keyframes keep-extension-alert-grow{from{transform:scaleY(0)}to{transform:scaleY(100%)}}.keep-extension-modal{box-sizing:border-box;position:fixed;overflow:auto;top:0;bottom:0;left:0;right:0;z-index:10000;color:white;background-color:#9C452D;animation:keep-extension-modal-fade-in ease-in-out .4s}.keep-extension-modal.closing{animation:keep-extension-modal-fade-out ease-in-out .4s}.keep-extension-modal button{font:inherit;font-size:16px;line-height:32px;letter-spacing:-0.25px;font-weight:700;text-decoration:none;background:none;color:inherit;border:none;padding:9px 28px;cursor:pointer;outline:inherit;transition-property:opacity, color;transition-duration:0.1s;transition-timing-function:ease-in}.keep-extension-modal button:hover{opacity:0.8}.keep-extension-modal button:focus-visible{box-shadow:0 0 0 3px rgba(118,169,250,0.45)}.keep-extension-modal button:focus:not(:focus-visible){box-shadow:none}.keep-extension-modal button:first-child{position:fixed;line-height:1;top:calc(34px - 9px);right:24px;color:white;font-size:24px;z-index:1000}.keep-extension-modal button:first-child:hover{opacity:0.9}.keep-extension-modal>div button{color:white;background-color:#EF964D;border-radius:30px;transform:translateY(-100%)}@media (min-height: 734px){.keep-extension-modal>div button{position:sticky;bottom:0}}.keep-extension-modal__wrapper{height:100%;width:100%;min-width:1020px;display:flex;align-items:center;justify-content:center}.keep-extension-modal__body{height:100%;width:min(1440px, 100%);box-sizing:border-box;overflow:auto;padding:34px 0 0 0}.keep-extension-modal__body header{margin-left:68px;position:relative;margin-bottom:32px}.keep-extension-modal__body header::before{color:white;box-sizing:border-box;padding:8px 22px;display:inline-block;content:'!';font-size:30px;line-height:32px;letter-spacing:-0.25px;font-weight:700;background-image:url("/assets/add-to-browser/install-chrome/speech-bubble.svg");background-size:52px 54px;background-repeat:no-repeat;height:52px;width:54px}.keep-extension-modal__body header h2{margin:0;font-size:30px;line-height:32px;letter-spacing:-0.25px;font-weight:700}.keep-extension-modal__body header p{margin:0;font-size:20px;line-height:24px;letter-spacing:-0.25px}.keep-extension-modal__body ol{list-style:none;counter-reset:steps;margin:0;padding:0;width:100%;display:flex;justify-content:space-between;overflow:hidden}.keep-extension-modal__body ol img{display:block;object-fit:contain;object-position:top}.keep-extension-modal__body ol li{flex:0 0 auto;color:white;font-size:15px;line-height:24px}.keep-extension-modal__body ol li::before{counter-increment:steps;content:counter(steps);background-color:rgba(255,255,255,0.1);border-radius:30px;padding:4px 16px;display:inline-block;margin-left:68px;margin-bottom:6px}.keep-extension-modal__body ol li p{margin:0;padding:0}.keep-extension-modal__body ol li:first-child p{margin-left:68px}.keep-extension-modal__body ol li:first-child img[src*="osx"]{margin-left:68px}.keep-extension-modal__body ol li:nth-child(2){margin-left:100px}.keep-extension-modal__body ol li:nth-child(2)::before{margin-left:0}.keep-extension-modal__body ol li:nth-child(2)>div{width:calc(814px - 40px);height:calc(464px - 40px)}.keep-extension-modal__body ol li:nth-child(2) img{object-fit:cover;object-position:-20px -16px}.keep-extension-modal__body ol li img{margin-top:32px}.keep-extension-modal__body button{margin-left:68px}html.has-keep-extension-modal{overflow:hidden}@keyframes keep-extension-modal-fade-in{from{opacity:0}to{opacity:1}}@keyframes keep-extension-modal-fade-out{from{opacity:1}to{opacity:0}}.anomaly-modal__mask{position:absolute;top:0;right:0;bottom:0;left:0;width:100vw;height:100vh;z-index:15;display:flex;justify-content:center;align-items:center;background:#ddd;background:rgba(210,210,210,0.6)}.anomaly-modal__modal{width:424px;max-width:75vw;min-height:540px;background:white;border-radius:12px;box-shadow:0 0 15px -3px rgba(0,0,0,0.35);display:flex;flex-direction:column;align-items:center;padding:29px 29px 0 29px}.anomaly-modal__title{margin:0 0 6px 0;font-size:20px;line-height:28px;font-weight:bold;text-align:center}.anomaly-modal__instructions,.anomaly-modal__description{text-align:center;font-size:16px;font-weight:600;line-height:20px;width:100%}.anomaly-modal__description{margin:0 0 24px 0}.anomaly-modal__puzzle{display:flex;flex-direction:row;flex-wrap:wrap;margin:0 -2.5px}.anomaly-modal__puzzle-margins{max-width:310px;margin:14px auto 20px auto}.anomaly-modal__box{position:relative;flex-grow:1;margin:2.5px;width:100px;flex-basis:30%;box-sizing:border-box}.anomaly-modal__box:before{content:"";display:block;padding-top:100%;float:left}.anomaly-modal__box.selected{padding:5px}.anomaly-modal__image{width:100%;height:100%;background-size:cover;background-position:center;border-radius:8px}.anomaly-modal__overlay{display:none}.selected .anomaly-modal__overlay{position:absolute;top:5px;left:5px;bottom:5px;right:5px;display:block;background-color:#3969EF;opacity:0.3;border-radius:8px}.anomaly-modal__check{display:none}.selected .anomaly-modal__check{position:absolute;display:block;top:12px;left:12px}.anomaly-modal__controls{margin:0 auto 38px auto;width:100%;max-width:310px;text-align:center}.anomaly-modal__submit,.anomaly-modal__try-again{width:100%;box-sizing:border-box}.anomaly-modal__error-modal,.anomaly-modal__success-modal{width:422px;min-height:200px;margin-top:33.3px}.anomaly-modal__error-modal .anomaly-modal__title,.anomaly-modal__success-modal .anomaly-modal__title{margin:0}.anomaly-modal__header-icon{width:41.4px;height:41.4px;margin-bottom:20px}.anomaly-modal__error-instructions,.anomaly-modal__success-instructions{line-height:40px;margin-bottom:8px;font-weight:600}.anomaly-modal__error-controls{margin:0;width:100%;max-width:312px}.anomaly-modal__success-spinner .spinner{width:38px;height:38px}.anomaly-modal__success-spinner .spinner .spinner__spoke:before{width:7.5%}@media screen and (-ms-high-contrast: active), screen and (-ms-high-contrast: none){.anomaly-modal__box{flex-basis:auto}}.tx--bold{font-weight:600}.tx--light{font-weight:300}.tx--italic{font-weight:normal;font-style:italic}.tx--25{font-size:25px;font-size:1.736111rem}.tx--21{font-size:21px;font-size:1.458333rem}.tx--19{font-size:19px;font-size:1.319444rem}.tx--17{font-size:17px;font-size:1.180556rem}.tx--16{font-size:16px;font-size:1.111111rem}.tx--15{font-size:15px;font-size:1.041667rem}.tx--14{font-size:14px;font-size:.972222rem}.tx--13{font-size:13px;font-size:.902778rem}.tx--12{font-size:12px;font-size:.833333rem}.tx--11{font-size:11px;font-size:.763889rem}.tx-clr--white{color:#fff}.text--primary,.tx-clr--dk,.tx-clr--slate{color:#333}.tx-clr--dk2,.tx-clr--slate-light{color:#666}.text--secondary,.tx-clr--grey-dark{color:#888}.tx-clr--lt,.tx-clr--grey{color:#999}.tx-clr--lt2,.tx-clr--grey-light{color:#aaa}.tx-clr--silver-dark{color:#ededed}.tx-clr--silver{color:#f2f2f2}.tx-clr--silver-light{color:#f7f7f7}.tx-clr--lt3,.tx-clr--platinum-darker{color:#c3c3c3}.tx-clr--platinum-dark{color:#d0d0d0}.tx-clr--platinum{color:#e0e0e0}.tx-clr--platinum-light{color:#e5e5e5}.tx-clr--red{color:#de5833}.tx-clr--red-light{color:#e37151}.tx-clr--red-dark{color:#bd4b2b}.tx-clr--blue{color:#4495d4}.tx-clr--blue-light{color:#66abff}.tx-clr--blue-dark{color:#00278e}.tx-clr--purple{color:#6d59a3}.tx-clr--gold{color:#f1a031}.tx-clr--green{color:#5b9e4d}.bg-tile,.bg-clr--white{background-color:#fff}.bg-btn{background-color:#fafafa}.bg-clr--dk,.bg-clr--slate{background-color:#333}.bg-clr--dk2,.bg-clr--slate-light{background-color:#666}.bg-clr--grey-dark{background-color:#888}.bg-clr--lt,.bg-clr--grey{background-color:#999}.bg-clr--lt2,.bg-clr--grey-light{background-color:#aaa}.bg-clr--silver-dark{background-color:#ededed}.bg-clr--silver{background-color:#f2f2f2}.bg-clr--silver-light{background-color:#f7f7f7}.bg-clr--lt3,.bg-clr--platinum-darker{background-color:#c3c3c3}.bg-clr--platinum-dark{background-color:#d0d0d0}.bg-clr--platinum{background-color:#e0e0e0}.bg-clr--platinum-light{background-color:#e5e5e5}.bg-clr--red{background-color:#de5833}.bg-clr--red-light{background-color:#e37151}.bg-clr--red-dark{background-color:#bd4b2b}.bg-clr--blue{background-color:#4495d4}.bg-clr--blue-light{background-color:#66abff}.bg-clr--blue-dark{background-color:#00278e}.bg-clr--purple{background-color:#6d59a3}.bg-clr--gold{background-color:#f1a031}.bg-clr--green{background-color:#5b9e4d}.mg--none{margin:0}.mg--big{margin:1.25em}.mg--base{margin:1em}.mg--small{margin:.8em}.mg--half{margin:.5em}.pd--none{padding:0}.pd--big{padding:1.25em}.pd--base{padding:1em}.pd--small{padding:.8em}.pd--half{padding:.5em}.set-theme--dark body{background:#1c1c1c}.set-theme--dark .header__logo{background-image:url(assets/logo_header.alt.v108.svg)}.set-theme--dark .header-wrap{background:#161616;box-shadow:0 1px 0 #282828}.set-theme--dark .search--header{background-color:#333333;border-color:#333333}.set-theme--dark .search__input{color:#e6e6e6}.set-theme--dark .search__button{color:rgba(255,255,255,0.35)}.set-theme--dark .search-filters-wrap:before{background-image:linear-gradient(90deg, #1c1c1c, rgba(28,28,28,0))}.set-theme--dark .search-filters-wrap:after{background-image:linear-gradient(90deg, rgba(28,28,28,0), #1c1c1c)}.set-theme--dark .metabar__dropdowns-wrap:before{background-image:linear-gradient(90deg, #292929, rgba(41,41,41,0))}.set-theme--dark .metabar__dropdowns-wrap:after{background-image:linear-gradient(90deg, rgba(41,41,41,0), #292929)}@media (prefers-color-scheme: dark){.no-theme body{background:#1c1c1c}.no-theme .header__logo{background-image:url(assets/logo_header.alt.v108.svg)}.no-theme .header-wrap{background:#161616;box-shadow:0 1px 0 #282828}.no-theme .search--header{background-color:#333333;border-color:#333333}.no-theme .search__input{color:#e6e6e6}.no-theme .search__button{color:rgba(255,255,255,0.35)}.no-theme .search-filters-wrap:before{background-image:linear-gradient(90deg, #1c1c1c, rgba(28,28,28,0))}.no-theme .search-filters-wrap:after{background-image:linear-gradient(90deg, rgba(28,28,28,0), #1c1c1c)}.no-theme .metabar__dropdowns-wrap:before{background-image:linear-gradient(90deg, #292929, rgba(41,41,41,0))}.no-theme .metabar__dropdowns-wrap:after{background-image:linear-gradient(90deg, rgba(41,41,41,0), #292929)}}.set-theme--terminal body{background:#222}.set-theme--terminal .header-wrap{background:#222;box-shadow:0 1px 0 #454545}.set-theme--terminal .search--header{background-color:#1b1b1b;border-color:#181818}.set-theme--terminal .search__input{color:#eee}.set-theme--terminal .search__button{color:rgba(255,255,255,0.35)}.set-theme--terminal .search-filters-wrap:before{background-image:linear-gradient(90deg, #222, rgba(34,34,34,0))}.set-theme--terminal .search-filters-wrap:after{background-image:linear-gradient(90deg, rgba(34,34,34,0), #222)}.set-theme--terminal .metabar__dropdowns-wrap:before{background-image:linear-gradient(90deg, #1b1b1b, rgba(27,27,27,0))}.set-theme--terminal .metabar__dropdowns-wrap:after{background-image:linear-gradient(90deg, rgba(27,27,27,0), #1b1b1b)}.set-wide .zcm-wrap--header,.set-wide .is-link-style-exp.is-not-mobile-device .footer_cards,.is-link-style-exp.is-not-mobile-device .set-wide .footer_cards,.set-wide .c-info,.set-wide .c-base,.set-wide .c-icon,.set-wide .c-list,.set-wide .c-product,.set-wide .c-detail,.set-wide .zci__main.has-aux,.set-wide .zci__main--answer,.set-wide .results--main,.set-wide .forecast-wrapper .module--forecast .module__detail--hours__labels,.forecast-wrapper .module--forecast .set-wide .module__detail--hours__labels,.set-wide .cw{max-width:1352px}.set-wide .header--aside__msg{display:none}.set-wide .header__search-wrap{max-width:590px}.set-wide .results--main{float:none}.set-super-wide .zcm-wrap--header,.set-super-wide .is-link-style-exp.is-not-mobile-device .footer_cards,.is-link-style-exp.is-not-mobile-device .set-super-wide .footer_cards,.set-super-wide .c-info,.set-super-wide .c-base,.set-super-wide .c-icon,.set-super-wide .c-list,.set-super-wide .c-product,.set-super-wide .c-detail,.set-super-wide .zci__main.has-aux,.set-super-wide .zci__main--answer,.set-super-wide .results--main,.set-super-wide .forecast-wrapper .module--forecast .module__detail--hours__labels,.forecast-wrapper .module--forecast .set-super-wide .module__detail--hours__labels,.set-super-wide .cw{max-width:1553px}.set-super-wide .header--aside__msg{display:none}.set-super-wide .header__search-wrap{max-width:590px}.set-super-wide .results--main{float:none}.set-underlined-links .result__a{text-decoration:underline}.modal--dropdown--settings .modal__body{padding:0}.dark-bg .modal--dropdown--settings .frm__select:after{color:#fff}.modal--dropdown--settings .settings-dropdown--section{padding:15px 18px;border-bottom:1px solid #e0e0e0}.modal--dropdown--settings .settings-dropdown--section .settings-dropdown--header{font-size:1em;padding:0;margin:0 0 5px;font-weight:600;display:flex;align-items:baseline}.modal--dropdown--settings .settings-dropdown--section .settings-dropdown--header .settings-dropdown--header--label{max-width:70%;overflow:hidden;text-overflow:ellipsis}.modal--dropdown--settings .settings-dropdown--section .settings-dropdown--header .settings-dropdown--header--link{margin-left:auto;font-size:0.9em;color:#00278e;max-width:25%;overflow:hidden;text-overflow:ellipsis}.modal--dropdown--settings .settings-dropdown--section .frm__field{display:flex;flex:1}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__label{order:1;font-weight:normal;padding:4px 0;font-size:1em;align-self:center;max-width:50%;overflow:hidden;text-overflow:ellipsis}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm-input,.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__select{order:2;margin-left:auto}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__desc{display:none}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__input--clearable{order:2;max-width:45%;margin-left:auto}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__input--clearable .frm__input{width:100%;height:24px;padding-right:1.2em;padding-left:0.5em;line-height:1.0em}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__input--clearable .frm__input__clear{line-height:2.5em;padding:0 0.5em;font-size:0.7em}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__select{background:transparent;border:none;height:24px;align-self:center;position:relative;width:50%}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__select .frm__select__input{min-width:auto;width:100% !important;text-align:right;padding:0 18px 0 0.5em;height:24px !important;line-height:1em}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__select .frm__select__input::-ms-expand{display:none}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__select:before{content:"";width:25px;height:22px;position:absolute;right:10px;top:0;z-index:10;background-image:linear-gradient(to right, rgba(255,255,255,0) 0%, #fff 65%);pointer-events:none}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__select:after{right:0px}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__switch{align-self:center;display:flex;max-width:25%}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__switch+.frm__label{max-width:75%}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__switch .frm__switch__label.btn{width:28px;height:12px;padding:2px;border-radius:8px;position:relative;background-color:#aaa;border:none;transition:background-color 150ms linear;margin-left:auto}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__switch .frm__switch__label.btn:hover{opacity:0.9}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__switch .frm__switch__label.btn .frm__switch-on,.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__switch .frm__switch__label.btn .frm__switch-off{display:none}.modal--dropdown--settings .settings-dropdown--section .frm__field .frm__switch .frm__switch__label.btn:after{content:"";width:12px;height:12px;background:#fff;border-radius:6px;position:absolute;top:2px;left:2px;transition:left 100ms ease-in}.modal--dropdown--settings .settings-dropdown--section .frm__field.is-checked .frm__switch .frm__switch__label.btn{background-color:#66abff;transition:background-color 150ms linear}.modal--dropdown--settings .settings-dropdown--section .frm__field.is-checked .frm__switch .frm__switch__label.btn:after{left:18px;transition:left 100ms ease-in}.modal--dropdown--settings .settings-dropdown--section .frm__field .set-themes .set-theme__label{display:none}.dark-bg .modal--dropdown--settings .settings-dropdown--button{color:#e0e0e0}.modal--dropdown--settings .settings-dropdown--button{display:block;padding:10px 18px;text-align:left;font-weight:bold;color:#00278e}@supports (-webkit-overflow-scrolling: touch){.modal--dropdown--settings .frm__input--clearable .frm__input,.modal--dropdown--settings .frm__select__input{font-size:1.2em;transform:scale(0.85)}}.result--ad+.module-slot{margin-top:26px}.module,.is-mobile .module--images{position:relative;width:100%;max-width:100%;box-shadow:0 2px 3px rgba(0,0,0,0.06);border:1px solid rgba(150,150,150,0.3);border-bottom-color:rgba(125,125,125,0.3);font-weight:400;margin:0 -1px 26px;border-radius:4px;border-radius:var(--default-border-radius)}.module.module__chromeless,.is-mobile .module__chromeless.module--images{box-shadow:none;border-width:0}.module.module__chromeless .module__content,.is-mobile .module__chromeless.module--images .module__content{padding:0}.is-mobile .module,.is-mobile .module--images{margin:0 0 7px 0;width:auto}.module.module--placeholder,.is-mobile .module--placeholder.module--images{border:none;box-shadow:none;margin-right:0}.sidebar-modules .module,.sidebar-modules .is-mobile .module--images,.is-mobile .sidebar-modules .module--images{margin-bottom:36px}.vertical--map .module,.vertical--map .is-mobile .module--images,.is-mobile .vertical--map .module--images{box-shadow:none;border:none;margin:0}.module__content,.module__section{padding:20px 22px}.ia-modules .module__content,.ia-modules .module__section{padding:20px}.is-mobile .ia-modules .module__content,.is-mobile .ia-modules .module__section{padding:14px 16px}.module__header{height:150px;overflow:hidden;position:relative;border-radius:4px 4px 0 0;border-radius:var(--default-border-radius) var(--default-border-radius) 0 0}.module--places-multiple .module__header{height:170px}.module__header.module__header--link{font-size:17px;color:#333;margin-bottom:5px;display:block;height:auto;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis}.module__header.module__header--link:hover{text-decoration:underline;cursor:pointer}@media only screen and (max-width: 425px){.module__header{height:120px}}.module__header.module__header--with-image{z-index:2}.module__top-link{position:absolute;top:-27px;right:18px;font-size:12px;color:#aaa}.module__top-link a{color:#aaa}.module--places-multiple{position:relative}@media only screen and (max-width: 425px){.is-mobile-device .module__header--tripadvisor .module__header__image__more{font-size:12px;margin-bottom:-1px}}.module__section{position:relative;overflow:hidden;border-top:1px solid rgba(150,150,150,0.3)}.module__section:first-child{border-top:none}.module__section:first-child.place-detail__section--tab{border-top:1px solid rgba(150,150,150,0.3)}.module__section.module__section--simple{border-top:none;padding-top:0;padding-bottom:6px}.module__nav{display:flex;justify-content:space-evenly;padding-top:0 !important;padding-bottom:0 !important;overflow:visible}.module__nav__item{padding:1em 3em;cursor:pointer;z-index:1}.module__nav__item.is-active{font-weight:bold;border-bottom:1px solid #222;margin-bottom:-1px}.module__footer{padding-left:20px;position:relative;display:block;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis}.module__footer,.module__footer:hover,.module__footer:focus{color:#00278e}.module__footer:before{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\2192";position:absolute;left:0}.module__header__image{position:absolute;width:40%;height:100%;background-size:cover;background-position:center;cursor:pointer}.module__header--map .module__header__image{display:block;position:static;width:auto}.module__header__image--full{width:100%}.module__header__image__img{opacity:0}.module__header__image__img .module__header--map{height:100%}.module__header__image__more{display:block;position:absolute;bottom:0;right:0;z-index:2}.module__header__image__no-more{display:block;position:absolute;color:#fff;text-shadow:0 1px 5px rgba(0,0,0,0.3);z-index:1;text-align:center;width:100%;left:0}.module__header__image--blur{filter:blur(15px)}.no-cssfilters .module__header__image--blur{opacity:0.2}.module__header__image--big{height:150px}@media only screen and (max-width: 425px){.module__header__image--big{height:120px}}.module__header__image--small{height:75px}.module__header__image__link{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10}.module__header__map{display:block;position:relative;height:100%;cursor:pointer}.module__header--with-image .module__header__map{width:60%;margin-left:40%}.module__header__shadow{position:absolute;height:1px;bottom:-1px;left:0;width:100%;box-shadow:0 -1px 1px rgba(0,0,0,0.2)}.module__image{float:right;clear:right}.module__title{font-size:1.67em;font-weight:600;line-height:1em;display:block;word-wrap:break-word;padding:0}.ia-modules .module__title{font-size:1.5em}.module__title__link,.module__title__link:hover,.module__title__link:active,.module__title__link:visited{color:#222}.module__title__sub{color:#666;display:block;font-weight:normal;text-transform:capitalize;font-size:0.92em;line-height:1.84em}.module__title__sub+.module__title__links{margin-top:0px}.module__title__links{margin-top:5px}.module__clickable-header{display:block;border-bottom:1px solid rgba(150,150,150,0.3);line-height:23px;margin:-20px -22px 20px;padding:20px 22px}.ia-modules .module__clickable-header{margin:-14px -16px 20px;padding:14px 16px}.module__clickable-header:hover{text-decoration:none}.module__body{vertical-align:top}.module__text{line-height:1.45em;color:#222;padding-top:10px;word-wrap:break-word}.module__text--no-padding{padding-top:0}.module__text pre{background:#f7f7f7}.module__text pre code{white-space:pre-wrap}.module__link,.module__link a{cursor:pointer}.module__link,.module__link:hover,.module__link:active,.module__link:focus,.module__link a,.module__link a:hover,.module__link a:active,.module__link a:focus{color:#00278e}.module__link:visited,.module__link:visited:hover,.module__link:visited:focus,.module__link:visited:active,.module__link a:visited,.module__link a:visited:hover,.module__link a:visited:focus,.module__link a:visited:active{color:#6c00a2}.module__link:hover,.module__link:active,.module__link:focus,.module__link a:hover,.module__link a:active,.module__link a:focus{text-decoration:underline}.module__link .ddgsi,.module__link a .ddgsi{font-weight:12px}.module__link--blue,.module__link--blue:hover,.module__link--blue:active,.module__link--blue:focus{color:#00278e}.module__link--blue:visited,.module__link--blue:visited:hover,.module__link--blue:visited:focus,.module__link--blue:visited:active{color:#00278e}.module__link--two-line{font-size:1.67em;max-height:2em;overflow:hidden;line-height:1em;margin-bottom:2px}.ia-modules .module__link--two-line{font-size:1.5em}.module__link--url,.is-cssexp .module__link--url{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.module__link--url,.module__link--url:hover,.module__link--url:active,.module__link--url:focus,.is-cssexp .module__link--url,.is-cssexp .module__link--url:hover,.is-cssexp .module__link--url:active,.is-cssexp .module__link--url:focus{color:#20692b}.module__link--url:visited,.module__link--url:visited:hover,.module__link--url:visited:focus,.module__link--url:visited:active,.is-cssexp .module__link--url:visited,.is-cssexp .module__link--url:visited:hover,.is-cssexp .module__link--url:visited:focus,.is-cssexp .module__link--url:visited:active{color:#20692b}.module__link--grey,.module__link--grey:hover,.module__link--grey:active,.module__link--grey:focus{color:#666}.module__link--grey:visited,.module__link--grey:visited:hover,.module__link--grey:visited:focus,.module__link--grey:visited:active{color:#666}.module__official-url{display:block}.module__more-at{padding-left:5px;display:inline}.module__more-at-bottom{margin-top:15px;display:block;clear:both}.module__official-url,.module__more-at,.module__more-at-bottom,.module__official-url:hover,.module__more-at:hover,.module__more-at-bottom:hover{color:#00278e;text-overflow:ellipsis;overflow:hidden;max-width:270px;white-space:nowrap}.module__toggle{font-family:"ddg-serp-icons";font-size:20px;line-height:32px;display:none;margin:0 auto;height:32px;cursor:pointer;color:#666;background-color:rgba(0,0,0,0.02);width:100%;text-align:center;border-top:1px solid rgba(150,150,150,0.2);clear:both;border-radius:0 0 3px 3px}.is-not-mobile-device .module__toggle:hover{background-color:rgba(0,0,0,0.04)}.module__toggle--map,.module__toggle--sports{display:block;position:relative;height:40px}.module__toggle--more{position:relative}.module__toggle--more::after{content:"";position:absolute;top:-21px;height:20px;left:0px;right:0px;background:linear-gradient(rgba(255,255,255,0), #fff)}.has-content-height .module__toggle--more::after{content:none}.module__toggle__chevron{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;position:relative;top:1px}.module__toggle__chevron--alt{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%;position:absolute;top:-13px;left:50%;margin-left:-13px;padding:0;width:26px;height:26px;line-height:26px;background:#fff;font-size:11px;text-indent:2px}.module__toggle__chevron--alt:active{border-color:#ddd}.dark-bg .module__toggle__chevron--alt{background-color:#444}.dark-bg .module__toggle--map:hover .module__toggle__chevron--alt,.dark-bg .module__toggle--sports:hover .module__toggle__chevron--alt{background-color:#666}.module__toggle__text{padding-top:8px;font-family:"DDG_ProximaNova","DDG_ProximaNova_UI_0","DDG_ProximaNova_UI_1","DDG_ProximaNova_UI_2","DDG_ProximaNova_UI_3","DDG_ProximaNova_UI_4","DDG_ProximaNova_UI_5","DDG_ProximaNova_UI_6","Proxima Nova","Helvetica Neue","Helvetica","Segoe UI","Nimbus Sans L","Liberation Sans","Open Sans",FreeSans,Arial,sans-serif;color:#222;font-size:14px;font-weight:bold}.module__inner-toggle{height:36px;position:relative;cursor:pointer;width:100%}.module__inner-toggle::before{content:"";width:calc((100% - 36px) / 2);height:1px;position:absolute;left:0;top:18px;background-color:#E5E5E5}.module__inner-toggle::after{content:"";width:calc((100% - 36px) / 2);height:1px;position:absolute;right:0;top:18px;background-color:#E5E5E5}.module__inner-toggle .module__inner-toggle--chevron{position:absolute;left:calc((100% - 36px) / 2);top:0;font-family:"ddg-serp-icons";width:36px;height:36px;font-size:18px;display:flex;justify-content:center;align-items:center;box-sizing:border-box;color:#222;box-shadow:0 2px 3px rgba(0,0,0,0.06);border:1px solid rgba(150,150,150,0.3);border-bottom-color:rgba(125,125,125,0.3);border-radius:50%}.module__inner-toggle .module__inner-toggle--chevron:hover{box-shadow:0 2px 3px rgba(0,0,0,0.1);border:1px solid rgba(150,150,150,0.7);border-bottom-color:rgba(125,125,125,0.7)}.module__inner-toggle .module__inner-toggle--chevron::after{content:"\76";margin-top:1px}.module.ia-module-covid,.is-mobile .ia-module-covid.module--images{margin-bottom:32px}.module.ia-module-covid .module__title,.is-mobile .ia-module-covid.module--images .module__title{padding:20px 22px 10px 20px}.is-mobile .module.ia-module-covid .module__title,.is-mobile .ia-module-covid.module--images .module__title{font-size:18px}.module.ia-module-covid .module__grey,.is-mobile .ia-module-covid.module--images .module__grey{padding:16px 22px;border-top:1px solid rgba(150,150,150,0.3);margin-top:-1px;position:relative}.module.ia-module-covid .module__nav,.is-mobile .ia-module-covid.module--images .module__nav{justify-content:start;margin-left:22px;overflow:auto}.module.ia-module-covid .module__nav__item,.is-mobile .ia-module-covid.module--images .module__nav__item{padding:0 0 8px 0;margin-right:15px}.module.ia-module-covid .module__nav__item.is-active,.is-mobile .ia-module-covid.module--images .module__nav__item.is-active{margin-bottom:0}.module.ia-module-covid .module__footer,.is-mobile .ia-module-covid.module--images .module__footer{margin-top:8px}.module.ia-module-covid .module__overflow,.is-mobile .ia-module-covid.module--images .module__overflow{position:absolute;right:22px;top:0;width:20px;height:100%;background:linear-gradient(90deg, rgba(255,255,255,0), #fff)}.covid__links{padding-top:8px}.covid__links .covid_links--align{vertical-align:middle}.covid__tips ul{list-style-type:disc;margin:0 22px}.covid__icon{margin-right:0.5em;width:16px;height:16px;display:inline-block}.covid__table{display:table;width:100%}.covid__table th,.covid__table td{display:table-cell;padding:4px 18px 4px 0;white-space:nowrap}@media only screen and (max-width: 380px){.covid__table th,.covid__table td{padding:4px 16px 4px 0}}.covid__table th:last-child,.covid__table td:last-child{padding-right:0}.covid__table th{color:#666}.covid__table tr{border-bottom:1px solid rgba(150,150,150,0.3);display:table-row}.covid__table-location{min-width:120px;white-space:normal !important}@media only screen and (max-width: 380px){.covid__table-location{min-width:108px}}.covid__table-row--match td{font-weight:bold}.covid__stats-panel{height:228px;overflow-y:hidden;overflow-x:auto}.covid__stats-panel.is-expanded{height:auto}.is-mobile .covid__stats-panel .covid__table{border-right:20px solid transparent}.covid19__footer{display:flex;justify-content:flex-end;align-items:center;position:absolute;width:100%;bottom:-26px;font-size:12px;color:#666666}.covid19__footer a{padding:0 5px;color:#666;text-decoration:underline}.covid19__footer a:hover,.covid19__footer a:active{color:#111}.covid19__footer .feedback-prompt{position:static;padding:0}.is-expanded .covid19__footer .feedback-prompt{display:initial}.covid19__footer .covid19__footer__separator{color:#aaa}.results--sidebar .react-module{padding:10px 0}.module--about .module__content{max-height:325px;overflow:hidden}.ia-modules .module--about .module__content{max-height:195px}.module--about.is-expanded .module__content,.module--about.has-content-height .module__content{max-height:none;overflow:visible}.module--about__img{max-width:120px;max-height:160px;border-radius:4px;border-radius:var(--default-border-radius);padding:0 !important;margin:0 0 25px 25px}.ia-modules .module--about__img{margin:0 0 10px 10px}.module--zci-lyrics .js-about-item-more-at-bottom.text--secondary{margin-top:15px}@media only screen and (max-width: 1210px){.sidebar-modules .module--about__img{max-width:84px;max-height:112px;margin-left:10px;margin-bottom:10px}}.is-mobile .module--zci-wikihow{min-width:100%}.module--zci-wikihow ol{padding:0}.module--zci-wikihow li{counter-increment:step-counter;padding-left:1.6em;position:relative;margin-bottom:0.2em}.module--zci-wikihow li::before{content:counter(step-counter) ".";position:absolute;width:1.5em;margin-right:5px;left:0;display:block;text-align:center}@media only screen and (max-width: 420px){.ia-modules .module--about__img{max-width:84px;max-height:112px}}.rotate{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.ie8 .rotate,.lt-ie9 .rotate{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.rotate--45{-ms-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ie8 .rotate--45,.lt-ie9 .rotate--45{-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"}.rotate--ccw,.rotate--270{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.ie8 .rotate--ccw,.lt-ie9 .rotate--ccw,.ie8 .rotate--270,.lt-ie9 .rotate--270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.rotate--180,.module__toggle--less,.is-expanded .module__inner-toggle .module__inner-toggle--chevron{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.ie8 .rotate--180,.ie8 .module__toggle--less,.ie8 .is-expanded .module__inner-toggle .module__inner-toggle--chevron,.is-expanded .module__inner-toggle .ie8 .module__inner-toggle--chevron,.lt-ie9 .rotate--180,.lt-ie9 .module__toggle--less,.lt-ie9 .is-expanded .module__inner-toggle .module__inner-toggle--chevron,.is-expanded .module__inner-toggle .lt-ie9 .module__inner-toggle--chevron{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.about-info-box{color:#222;border-spacing:0 10px;clear:both}.about-info-box__info-row,.about-info-box__link-row{border-top:1px solid rgba(150,150,150,0.2);line-height:1.45;padding:5px 0}.about-info-box__info-row:first-child,.about-info-box__link-row:first-child{border-top-color:transparent;padding-top:10px}.about-info-box__link-row__link,.about-info-box__link-row__link:hover{color:#222}.about-info-box__info-label{padding-right:0.5em;color:#222;font-weight:600;display:block;margin-top:1px;margin-bottom:-1px;float:left}.about-info-box__info-value{overflow:visible;color:#222;display:block;margin-top:1px;margin-bottom:-1px}.about-info-box__sub-info{margin-left:.75em;clear:left}.about-info-box__sub-info .about-info-box__info-label{margin-top:0}.about-profiles{height:66px;overflow:hidden;padding-bottom:0;margin-right:-22px}.is-expanded .about-profiles{height:auto;overflow:visible}.about-profiles__item{display:inline-block;padding:10px 18px 0 0;max-width:58px;text-align:center;vertical-align:top}.about-profiles__link{display:block;font-size:0.84em;line-height:1}.about-profiles__link,.about-profiles__link:hover,.about-profiles__link:visited,.about-profiles__link:active{color:#666}.about-profiles__img{display:block;position:relative;margin:0 auto 5px;width:28px;height:28px}.module.directions-module,.is-mobile .directions-module.module--images{overflow:visible;min-height:187px;margin-top:20px}.module.directions-module .skeleton-loader,.is-mobile .directions-module.module--images .skeleton-loader{padding-top:5px}.is-not-mobile-device .module.directions-module,.is-not-mobile-device .is-mobile .directions-module.module--images,.is-mobile .is-not-mobile-device .directions-module.module--images{margin-bottom:32px}.directions-module__header{padding:20px 20px 0 20px;font-size:19px}.directions-module__search{padding:20px;min-height:93px}.directions-module__search .directions-search__input-container{padding-left:0}.directions-module__map{position:relative;overflow:hidden;width:100%;height:200px;margin-bottom:11px}.has-results .directions-module__map::after{display:none}.directions-module__map__inner{width:100%;height:100%;margin-top:-1px;cursor:pointer;background-color:#f9f5ed;background-size:30px 30px;background-image:linear-gradient(to right, #e5e1da 1px, transparent 1px),linear-gradient(to bottom, #e5e1da 1px, transparent 1px)}.dark-bg .directions-module__map__inner{background-color:#333;background-size:30px 30px;background-image:linear-gradient(to right, #4d4d4d 1px, transparent 1px),linear-gradient(to bottom, #4d4d4d 1px, transparent 1px)}.directions-module__map__inner:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:inset 0 0 3px 0 rgba(0,0,0,0.06);border-top:1px solid rgba(150,150,150,0.3);border-bottom:1px solid rgba(150,150,150,0.3)}.directions-module__details{position:relative;overflow:hidden;height:50px;padding:0 20px 14px 20px}.directions-module__cta{margin:9px 0 0 0}.module--map{z-index:1;cursor:pointer;max-width:640px}.module__map{box-sizing:border-box;position:relative;cursor:pointer;width:100%;border-radius:4px 4px 0 0;border-radius:var(--default-border-radius) var(--default-border-radius) 0 0;overflow:hidden}.module__map:after{-webkit-box-shadow:0 -1px 0 rgba(0,0,0,0.12);-moz-box-shadow:0 -1px 0 rgba(0,0,0,0.12);box-shadow:0 -1px 0 rgba(0,0,0,0.12);content:"";position:absolute;bottom:-1px;left:0;width:100%;height:1px}.module__address-detail{border-radius:0 0 4px 4px;border-radius:0 0 var(--default-border-radius) var(--default-border-radius);overflow:hidden}.module__header--map{border-radius:0}.module__places-multiple__top-right{position:absolute;top:5px;right:5px;z-index:1}.module__places-multiple__top-left{position:absolute;top:5px;left:5px;z-index:2}.module--images{border:0px none;box-shadow:0px 0px transparent;margin:0px 10px 26px 10px}.is-mobile .module--images{overflow:hidden;height:100%}.is-mobile .module--images .module__header{display:none}.is-mobile .module--images .module__toggle{font-family:inherit;font-size:1em;margin-top:-6px;margin-bottom:7px;line-height:44px;height:44px;color:#1A0DAB;font-weight:normal}.is-mobile .module--placeholder .module--images .module__toggle{margin-top:-8px}.module--images__thumbnails{overflow:hidden}.module--images__thumbnails__tile{float:left;margin-bottom:8px;position:relative;overflow:hidden;margin-right:8px;border-radius:4px;border-radius:var(--default-border-radius)}.is-mobile .module--images__thumbnails__tile{border-radius:0;margin-bottom:2px;margin-right:2px}.module--images__thumbnails__tile.is-last{margin-right:0}.module--images__thumbnails__link{position:relative;display:inline-block;right:-50%;bottom:-50%;height:100%}.module--images__thumbnails__image{max-width:none;width:auto;position:relative;top:-50%;left:-50%;background:radial-gradient(transparent, rgba(0,0,0,0.05))}.module--carousel{box-shadow:none;border:none;height:292px;overflow:initial}.module--carousel .feedback-prompt{bottom:5px}.module--carousel.has-two-items .feedback-prompt,.module--carousel.has-one-item .feedback-prompt,.module--carousel.has-grid .feedback-prompt{left:1em;right:auto}.module--carousel.module--carousel-videos.has-one-item .feedback-prompt{bottom:-1em;right:0}.module--carousel .module__header,.module--carousel .module__footer{margin-left:11px}.module--carousel-videos.has-one-item{height:auto;margin-bottom:18px}@supports (height: unset){.module--carousel-videos.has-one-item{height:unset}}.module--carousel-videos.has-one-item .module--carousel__image-wrapper{height:75%}.module--carousel-videos.has-one-item .module--carousel__items{height:auto;padding-bottom:8px}@supports (height: unset){.module--carousel-videos.has-one-item .module--carousel__items{height:unset}}.module--carousel-videos.has-one-item .module--carousel__image-wrapper{height:265px}.module--carousel-videos.has-one-item .module--carousel__item{width:100%;max-width:100%;height:auto}@supports (height: unset){.module--carousel-videos.has-one-item .module--carousel__item{height:unset}}.module--carousel-videos.has-one-item .module--carousel__image{background-size:auto;background-repeat:no-repeat;background-color:black}.module--carousel-videos.has-one-item .module--carousel__footer{position:relative}.module--carousel-videos.has-one-item .has-extra-row .module--carousel__body__title{height:auto}@supports (height: unset){.module--carousel-videos.has-one-item .has-extra-row .module--carousel__body__title{height:unset}}.is-mobile .module--carousel-videos.has-one-item{height:auto;margin-bottom:6px}@supports (height: unset){.is-mobile .module--carousel-videos.has-one-item{height:unset}}.is-mobile .module--carousel-videos.has-one-item .module--carousel__items{height:auto;left:auto}@supports (height: unset){.is-mobile .module--carousel-videos.has-one-item .module--carousel__items{height:unset;left:unset}}.is-mobile .module--carousel-videos.has-one-item .module--carousel__image-wrapper{height:204px}.is-mobile .module--carousel-videos.has-one-item .module--carousel__image{background-size:cover}.is-mobile .module--carousel-videos.has-one-item .has-extra-row .module--carousel__body__title{height:auto}@supports (height: unset){.is-mobile .module--carousel-videos.has-one-item .has-extra-row .module--carousel__body__title{height:unset}}.is-mobile .module--carousel-videos.has-one-item .module--carousel__item{height:auto}@supports (height: unset){.is-mobile .module--carousel-videos.has-one-item .module--carousel__item{height:unset}}.module--carousel__left,.module--carousel__right{position:absolute;top:50%;border-radius:50%;width:36px;height:36px;box-sizing:border-box;text-align:center;line-height:34px;margin-top:-18px;background-color:white;color:#222;z-index:1;cursor:pointer;box-shadow:0 2px 3px rgba(0,0,0,0.06);border:1px solid rgba(150,150,150,0.3);border-bottom-color:rgba(125,125,125,0.3)}.module--carousel__left:hover,.module--carousel__right:hover{box-shadow:0 2px 3px rgba(0,0,0,0.1);border:1px solid rgba(150,150,150,0.7);border-bottom-color:rgba(125,125,125,0.7)}.module--carousel__left{left:-19px;padding-right:1px}.module--carousel__right{right:-16px;padding-left:1px}.module--carousel__items{white-space:nowrap;overflow-x:hidden;height:238px;overflow-y:hidden;position:relative}.module--carousel__item{display:inline-block;vertical-align:top;width:32.2%;height:230px;box-sizing:border-box;position:relative;cursor:pointer;white-space:normal;border-radius:4px;border-radius:var(--default-border-radius);overflow:hidden;box-shadow:0 2px 3px rgba(0,0,0,0.06);border:1px solid rgba(150,150,150,0.3);border-bottom-color:rgba(125,125,125,0.3)}.module--carousel__item:not(:last-child){margin-right:1.2%}.module--carousel__item.is-highlighted{box-shadow:0 2px 3px rgba(0,0,0,0.1);border:1px solid rgba(150,150,150,0.7);border-bottom-color:rgba(125,125,125,0.7)}.has-two-items .module--carousel__item{width:40%}.has-one-item .module--carousel__item{width:45%}.module--carousel__image-wrapper{height:48%;position:relative;background-color:#f7f7f7}.module--carousel__image-wrapper .image-labels__label{font-size:.87em}.module--carousel__placeholder{font-size:2.5em}.module--carousel__image{object-fit:cover;object-position:top;background-size:cover;width:100%;height:100%}.module--carousel__image.is-contain-image{background-repeat:no-repeat;background-size:contain;position:relative;background-color:#fff;background-position:center center}.module--carousel__image.is-contain-image:after{background:-owg-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,0.03));background:-webkit-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,0.03));background:-moz-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,0.03));background:-o-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,0.03));background:linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,0.03));content:""}.module--carousel__image.is-center-image{background-position:center center;object-position:center}.module--carousel__body{padding:0.75em;box-sizing:border-box}.is-mobile .module--carousel__body{padding:0.75em 16px}.module--carousel__body__title{display:block;color:#00278e;font-size:15px;font-weight:600;line-height:1.2;max-height:5em;overflow:hidden;margin-bottom:0.25em}.has-image .module--carousel__body__title{max-height:5em;margin-bottom:none}.has-extra-row .module--carousel__body__title{height:3.5em}.module--carousel__body__title.is-one-row{height:1.25em;text-overflow:ellipsis}.module--carousel__body__title.is-big{font-size:1.31em;line-height:1.15;font-weight:normal;margin-bottom:0}.module--carousel__body__title:hover,.module--carousel__body__title:focus{color:#00278e}.module--carousel__body__title:visited{color:#6c00a2}.module--carousel__body__content{font-size:1em;line-height:1.5;max-height:7.5em;overflow:hidden}.module--carousel__body__content.is-short{max-height:3em}.module--carousel__footer{position:absolute;bottom:0.5em;white-space:nowrap;overflow:hidden;color:#666;padding:0 0.75em;width:100%;box-sizing:border-box;display:flex;align-items:center}.module--carousel__footer.has-relative-time .module--carousel__more-at{max-width:75%;float:left}.module--carousel__footer.has-rating .module--carousel__gray-text{overflow:hidden;text-overflow:ellipsis}.module--carousel__footer.has-rating .tile__rating{margin-left:auto}.has-extra-row .module--carousel__footer{display:block}.is-mobile .module--carousel__footer{padding:0 16px}.module--carousel__more-at{overflow:hidden;text-overflow:ellipsis}.module--carousel__view-count{padding-left:3px}.module--carousel>.badge--ad-wrap--product-carousel,.module--carousel__main-source{position:absolute;top:4px;right:17px;font-size:12px;color:#aaa}.module--carousel>.badge--ad-wrap--product-carousel a,.module--carousel__main-source a{color:#aaa}.is-mobile .module--carousel{height:262px;margin:14px 0 14px}.is-mobile .module--carousel .module__footer{display:none}.is-mobile .module--carousel .module--carousel__items{left:0;padding-right:0;padding-bottom:8px;margin-bottom:-5px}.is-mobile .module--carousel .module--carousel__items .module--carousel__item:first-child{margin-left:0}.is-mobile .module--carousel .module--carousel__items .module--carousel__item:last-child{margin-right:0}.is-mobile .module--carousel .module__footer{display:flex;font-weight:normal;margin-top:4px}.is-mobile .results--main>.ia-modules>.module--carousel,.is-mobile .results--main>.ia-modules:empty ~ div>.module--carousel,.is-mobile .results--main>#ads:empty+.results>.module-slot:first-child>.module--carousel,.is-mobile .results--main>#ads:empty+.results>.module-slot:empty+.module-slot>.module--carousel,.is-mobile .results--main>#ads .module--carousel{margin-top:0}.is-mobile .results--main>#ads:not(:empty)+.results>.module-slot:first-child>.module--carousel{margin-top:5px}.is-mobile .module--carousel__gray-text{font-size:.87em;line-height:1.37}.is-mobile .module--carousel .module__header{margin-left:17px}.is-mobile .module--carousel__left,.is-mobile .module--carousel__right{display:none}.is-mobile-device .module--carousel__items{white-space:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;position:relative;left:-8px;padding-right:16px;width:100%}.is-mobile-device .module--carousel__item{width:45%;max-width:185px;float:none;display:inline-block;vertical-align:middle;white-space:initial}.is-mobile-device .module--carousel__item:first-child{margin-left:8px}.is-mobile-device .module--carousel__item:last-child{margin-right:8px}.is-mobile-device .module--carousel__footer.has-relative-time .module--carousel__more-at{max-width:70%}.module--carousel-products.has-hidden-vertical .module__header.module__header--link:hover,.module--carousel-autoads.has-hidden-vertical .module__header.module__header--link:hover{text-decoration:none;cursor:default}.module--carousel-products.bing .module--carousel__item .module--carousel__image-wrapper,.module--carousel-autoads.bing .module--carousel__item .module--carousel__image-wrapper{height:40%;padding:4%;background:#f7f7f7;background:linear-gradient(180deg, #fff 0%, #f8f8f8 100%)}.module--carousel-products.bing .module--carousel__item .module--carousel__body__pricing,.module--carousel-autoads.bing .module--carousel__item .module--carousel__body__pricing{position:absolute;bottom:28px}.is-mobile .module--carousel-products.bing .module--carousel__item .module--carousel__body__pricing,.is-mobile .module--carousel-autoads.bing .module--carousel__item .module--carousel__body__pricing{bottom:24px}.module--carousel-products.bing .module--carousel__item .module--carousel__body__pricing .module--carousel__body__original-price,.module--carousel-autoads.bing .module--carousel__item .module--carousel__body__pricing .module--carousel__body__original-price{color:#888;text-decoration:line-through;margin-right:5px}.module--carousel-products.bing .module--carousel__item .module--carousel__body__pricing .module--carousel__body__price,.module--carousel-autoads.bing .module--carousel__item .module--carousel__body__pricing .module--carousel__body__price{font-weight:bold}.module--carousel-products.bing .has-image .module--carousel__body__title,.module--carousel-autoads.bing .has-image .module--carousel__body__title{max-height:3.75em}.module--carousel-products.bing.has-grid,.module--carousel-autoads.bing.has-grid{height:auto;margin-bottom:26px}.module--carousel-products.bing.has-grid .module--carousel__item .module--carousel__image-wrapper,.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__image-wrapper{height:74px;padding:5px}.module--carousel-products.bing.has-grid .module--carousel__body__title,.module--carousel-autoads.bing.has-grid .module--carousel__body__title{font-weight:normal}.module--carousel-products.bing.has-grid .module__header,.module--carousel-autoads.bing.has-grid .module__header{visibility:hidden}.module--carousel-products.bing.has-grid .module--carousel__item,.module--carousel-autoads.bing.has-grid .module--carousel__item{height:204px}.module--carousel-products.bing.has-grid .module--carousel__item .module--carousel__body__pricing,.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__body__pricing{bottom:25px}.module--carousel-products.bing.has-grid .module--carousel__main-source,.module--carousel-autoads.bing.has-grid .module--carousel__main-source{top:14px;right:5px}.module--carousel-products.bing.has-grid.has-one-item .module--carousel__items .module--carousel__item,.module--carousel-autoads.bing.has-grid.has-one-item .module--carousel__items .module--carousel__item{width:45%}.module--carousel-products.bing.has-grid.has-one-item .module--carousel__main-source,.module--carousel-autoads.bing.has-grid.has-one-item .module--carousel__main-source{right:auto;left:0.5em}.module--carousel-products.bing.has-grid.has-one-item .module--carousel__main-source .badge--ad-wrap--product-carousel,.module--carousel-autoads.bing.has-grid.has-one-item .module--carousel__main-source .badge--ad-wrap--product-carousel{right:auto}.module--carousel-products.bing.has-grid .module--carousel__wrap,.module--carousel-autoads.bing.has-grid .module--carousel__wrap{margin:0;padding:0}.module--carousel-products.bing.has-grid .module--carousel__items,.module--carousel-autoads.bing.has-grid .module--carousel__items{height:auto;overflow-x:visible;margin:0 -6px;padding:0 6px}.module--carousel-products.bing.has-grid .module--carousel__items .module--carousel__item,.module--carousel-autoads.bing.has-grid .module--carousel__items .module--carousel__item{float:left;margin:0;width:calc(33.3% - (12px/2) - (1px * 2));margin-right:12px;margin-bottom:12px}.module--carousel-products.bing.has-grid .module--carousel__items .module--carousel__item:nth-child(3n),.module--carousel-autoads.bing.has-grid .module--carousel__items .module--carousel__item:nth-child(3n){margin-right:0}@media only screen and (max-width: 1150px){.module--carousel-products.bing.has-grid .module--carousel__items .module--carousel__item,.module--carousel-autoads.bing.has-grid .module--carousel__items .module--carousel__item{width:calc(50% - (12px/2))}.module--carousel-products.bing.has-grid .module--carousel__items .module--carousel__item:nth-child(3n),.module--carousel-autoads.bing.has-grid .module--carousel__items .module--carousel__item:nth-child(3n){margin-right:12px}.module--carousel-products.bing.has-grid .module--carousel__items .module--carousel__item:nth-child(2n),.module--carousel-autoads.bing.has-grid .module--carousel__items .module--carousel__item:nth-child(2n){margin-right:0}}.module--carousel-products.bing.has-grid.grid-2-cols .module--carousel__item,.module--carousel-autoads.bing.has-grid.grid-2-cols .module--carousel__item{width:calc(50% - (12px/2))}.module--carousel-products.bing.has-grid.grid-2-cols .module--carousel__item:nth-child(3n),.module--carousel-autoads.bing.has-grid.grid-2-cols .module--carousel__item:nth-child(3n){margin-right:12px}.module--carousel-products.bing.has-grid.grid-2-cols .module--carousel__item:nth-child(2n),.module--carousel-autoads.bing.has-grid.grid-2-cols .module--carousel__item:nth-child(2n){margin-right:0}.module--carousel-products.bing.has-grid .feedback-prompt,.module--carousel-autoads.bing.has-grid .feedback-prompt{bottom:-6px}.module--carousel-products.bing.has-grid:not(.has-one-item) .feedback-prompt,.module--carousel-autoads.bing.has-grid:not(.has-one-item) .feedback-prompt{left:auto;right:0}.results--sidebar>.sidebar-modules:empty+div .module--carousel-products.is-slotted-first,.results--sidebar>.sidebar-modules:empty+div .module--carousel-autoads.is-slotted-first{margin-top:-32px}.module--carousel-products .module--carousel__footer,.module--carousel-autoads .module--carousel__footer{color:#20692b}.module--carousel-autoads.bing.has-grid{margin-top:2px;margin-bottom:24px}.module--carousel-autoads.bing.has-grid .module--carousel__item{height:270px}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__image-wrapper{height:93px;padding:0}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__location{background:#fff;border:1px solid #e0e0e0;box-shadow:0px 1px 3px rgba(0,0,0,0.08);border-radius:4px;max-width:73%;line-height:1.2;padding:3px 5px;font-size:0.9em;display:inline-block;position:absolute;top:99px;left:0.9em}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__location .one-line{display:block}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__location .one-line img{margin-bottom:-1px}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__location .one-line img,.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__location .one-line span{margin-right:2px}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__body{padding:0.9em 0.9em 0;line-height:1.35}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__body .module--carousel__body__title{height:3.6em;overflow:hidden;text-overflow:ellipsis}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__body__pricing{position:static;color:#111;margin-top:0.9em}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__body__pricing span{display:block;text-transform:capitalize}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__auto-ads-extra{color:#666}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__footer{display:block;line-height:1.35;padding:0 0.9em;bottom:0.9em}.module--carousel-autoads.bing.has-grid .module--carousel__item .module--carousel__footer .module--carousel__gray-text{display:block;color:#20692b}.module--carousel-autoads.bing.has-grid:not(.has-one-item) .feedback-prompt{left:auto;right:0}.module--places{max-width:640px}.ia-modules .module--places .module__content,.ia-modules .module--places .module__section{padding:16px}.module--places .module__section.module__places-more{padding:6px 16px;border-top:1px solid rgba(150,150,150,0.3)}.is-mobile .module--places.has-location-filter{margin-bottom:26px}.is-not-mobile-device .module--places.is-multiple{margin-bottom:32px}.module__places-more__link{line-height:1.37}.module__places-more__link--more-places{float:left;font-weight:600;cursor:pointer}.module__places-more__link--provider{float:right;margin-top:0.5px}.module__places-more__link--provider .zci__more-at__icon{padding-right:0}.forecast-wrapper{margin-bottom:10px}.forecast-wrapper .module--forecast{line-height:initial;margin-bottom:5px;border:1px solid rgba(150,150,150,0.3);overflow-x:hidden}.forecast-wrapper .module--forecast .module__top{padding:20px 20px 14px 20px}.forecast-wrapper .module--forecast .module__top.has-alert{padding-top:16px}.forecast-wrapper .module--forecast .module__current{font-size:24px;line-height:26px;font-weight:600;overflow:hidden;text-overflow:ellipsis;width:100%;white-space:nowrap}.forecast-wrapper .module--forecast .module__current-wrap{display:flex}@media (max-width: 590px){.forecast-wrapper .module--forecast .module__current{font-size:18px;line-height:20px}}.forecast-wrapper .module--forecast .module__bottom{padding:0 20px 10px}.forecast-wrapper .module--forecast .module__top.half-opacity,.forecast-wrapper .module--forecast .module__bottom .half-opacity{opacity:0.5}.forecast-wrapper .module--forecast .module__place{font-size:15px;line-height:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;font-weight:normal}.forecast-wrapper .module--forecast .module__date{font-size:1em;line-height:1.54;color:#666;clear:both}.forecast-wrapper .module--forecast .module__detail--hours,.forecast-wrapper .module--forecast .module__detail--hours-mobile{height:62px;width:100%;margin-top:5px}.forecast-wrapper .module--forecast .module__more{flex-shrink:0}.forecast-wrapper .module--forecast .module__more a{font-weight:normal}@media (max-width: 590px){.forecast-wrapper .module--forecast .module__more a{width:100%}}.forecast-wrapper .module--forecast .module__warnings{display:flex;align-items:center;margin-bottom:0;min-height:auto;padding:8px 15px 8px 20px;font-size:15px;color:inherit;border-bottom:1px solid #E0E0E0}.forecast-wrapper .module--forecast .module__warnings .module__more{margin-left:auto;font-size:14px}.forecast-wrapper .module--forecast .module__weather-warning{display:flex;align-items:center;text-decoration:none;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.forecast-wrapper .module--forecast .module__weather-warning,.forecast-wrapper .module--forecast .module__weather-warning:hover,.forecast-wrapper .module--forecast .module__weather-warning:focus,.forecast-wrapper .module--forecast .module__weather-warning:visited{color:#F1A031}.forecast-wrapper .module--forecast .module__weather-warning--red,.forecast-wrapper .module--forecast .module__weather-warning--red:hover,.forecast-wrapper .module--forecast .module__weather-warning--red:focus,.forecast-wrapper .module--forecast .module__weather-warning--red:visited{color:#CE2929}.forecast-wrapper .module--forecast .module__weather-warning__icon{flex-shrink:0;margin-right:5px;position:relative;bottom:1px}.forecast-wrapper .module--forecast .module__weather-warning__title{flex-shrink:1;margin-right:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}.forecast-wrapper .module--forecast .module__temperature{flex-shrink:0;margin-left:5px}.forecast-wrapper .module--forecast .module__temperature-unit{font-size:1em;line-height:1.43;font-weight:600;text-decoration:none}.forecast-wrapper .module--forecast .module__temperature-unit,.forecast-wrapper .module--forecast .module__temperature-unit:hover{color:#222}.forecast-wrapper .module--forecast .module__temperature-unit:not(.module__temperature-unit--on),.forecast-wrapper .module--forecast .module__temperature-unit:not(.module__temperature-unit--on):hover{color:#888}.forecast-wrapper .module--forecast .module__temperature-unit-separator{margin-left:4px}.forecast-wrapper .module--forecast .module__temperature-unit--on{border-bottom:2px solid #222}.forecast-wrapper .module--forecast .module__detail__hour-label{font-size:14px;line-height:14px;padding-top:12px;color:#888}.forecast-wrapper .module--forecast .module__forecast-icon{width:40px;height:40px;margin:5px 0;vertical-align:top}.forecast-wrapper .module--forecast .module__detail__temp-label{font-weight:normal;font-size:20px;line-height:20px}.forecast-wrapper .module--forecast .module__detail__precip-label{margin-top:7px;min-height:20px;font-size:14px;line-height:14px;color:#5185C6}.forecast-wrapper .module--forecast .module__detail__precip-label__icon{margin-right:3px}.forecast-wrapper .module--forecast .module__detail--hours__labels{justify-content:space-between;width:100%;margin-bottom:-5px}.forecast-wrapper .module--forecast .module__detail--hours__labels__item{text-align:center;min-height:145px}.forecast-wrapper .module--forecast .module__detail--hours__labels--desktop{display:flex}.forecast-wrapper .module--forecast .module__detail--hours__labels--mobile{display:none}.forecast-wrapper .module--forecast .module__detail--hours__labels--mobile .module__detail__temp-label{font-size:16px;line-height:16px}.forecast-wrapper .module--forecast .module__detail--hours__labels.hours__labels--day-0 .label-0{margin-left:-5px}.forecast-wrapper .module--forecast .module__detail--hours__labels.hours__labels--day-0 .label-0 .module__detail__hour-label{font-weight:600;font-size:14px;line-height:14px;padding-top:0;color:inherit}.forecast-wrapper .module--forecast .module__detail--hours__labels.hours__labels--day-0 .label-0 .module__forecast-icon{width:60px;height:60px;margin:0}.forecast-wrapper .module--forecast .module__detail--hours__labels.hours__labels--day-0 .label-0 .module__detail__temp-label{font-weight:600;font-size:44px;line-height:44px;position:relative;left:5px}.forecast-wrapper .module--forecast .module__detail--hours__labels.hours__labels--day-0.module__detail--hours__labels--mobile .label-0 .module__detail__temp-label{font-size:32px;line-height:32px}.forecast-wrapper .module--forecast .module__detail__bottom{display:flex;width:100%;align-items:center;margin-top:5px;font-weight:normal;font-size:14px;line-height:20px}.forecast-wrapper .module--forecast .module__detail__bottom>span{margin-right:10px}.forecast-wrapper .module--forecast .module__detail__bottom>span:last-child{margin-left:auto;margin-right:0}@media (max-width: 590px){.forecast-wrapper .module--forecast .module__detail__bottom{flex-wrap:wrap}.forecast-wrapper .module--forecast .module__detail__bottom .module__more{flex-basis:100%;margin-left:0}}.forecast-wrapper .module--forecast .module__winds,.forecast-wrapper .module--forecast .module__humidity{text-transform:capitalize;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.forecast-wrapper .module--forecast .module__winds--val{text-transform:uppercase}.forecast-wrapper .module--forecast .module__items{display:flex;flex-wrap:nowrap;overflow-x:auto}.forecast-wrapper .module--forecast .module__items-item{vertical-align:top;height:32px;display:inline-block;flex:1;flex-basis:content;text-align:center;min-width:65px;height:120px;border-top:1px solid #e0e0e0;background-color:#f7f7f7}.forecast-wrapper .module--forecast .module__items-item:not(:last-child){border-right:1px solid #e0e0e0}.forecast-wrapper .module--forecast .module__items-day{padding-top:10px;font-size:14px;font-weight:600;text-transform:capitalize;line-height:14px}.forecast-wrapper .module--forecast .module__items-day--today{color:#888}.forecast-wrapper .module--forecast .module__items-unit{font-weight:normal;font-size:1em;line-height:100%}.forecast-wrapper .module--forecast .module__items-unit--on{font-weight:600;font-size:16px;line-height:16px}.forecast-wrapper .module--forecast .module__items-unit--low{margin-top:5px;font-size:14px;line-height:14px}.forecast-wrapper .module--forecast .module__items-icon{width:40px;height:40px;margin-bottom:0;margin-top:5px}.forecast-wrapper .module--forecast .module__items-item:last-child{border-right:0}.forecast-wrapper .module--forecast .module__items-item:hover{background:#fff;cursor:pointer}.forecast-wrapper .module--forecast .module__items-item--selected{background:#fff;border-top:1px solid #222}.forecast-wrapper .module--forecast .module__items-item--selected .module__items-unit--low{color:#222}.forecast-wrapper .module__more-at-and-feedback{display:flex}.forecast-wrapper .module__more-at{font-size:12px;text-align:right;padding:8px 4px 0 0;line-height:1;float:left;margin-left:auto}.forecast-wrapper .module__more-at--not-en{padding:8px 0 0 0;margin-right:20px}.forecast-wrapper .module__more-at .zci__more-at{padding:0 5px;text-decoration:underline}.forecast-wrapper .module__more-at .zci__more-at:hover,.forecast-wrapper .module__more-at .zci__more-at:active{color:#888}.forecast-wrapper .module__more-at.module__more-at--not-en .zci__more-at{padding:0}@media (max-width: 590px){.forecast-wrapper .module--forecast .module__detail--hours-mobile{margin-top:1px}.forecast-wrapper .module--forecast .module__detail--hours__labels.module__detail--hours__labels--mobile{display:flex}.forecast-wrapper .module--forecast .module__detail--hours__labels.module__detail--hours__labels--desktop{display:none}.forecast-wrapper .module--forecast .module__forecast-icon{height:40px;width:40px}}.related-searches{padding-left:10px;padding-right:10px;padding-top:.5em;padding-bottom:.5em}.related-searches__title-short{display:none}.related-searches__title-long{padding:0;margin-bottom:14px}.results--sidebar .related-searches{white-space:nowrap}.results--sidebar .related-searches__title-short{display:block;margin-bottom:14px}.results--sidebar .related-searches__title-long{display:none}.results--sidebar .related-searches .related-searches__lists,.related-searches.at-bottom .related-searches__lists{display:block}.related-searches__lists{padding:0;display:flex;flex-direction:row;flex-wrap:wrap}.related-searches__list{padding:0;font-size:14px}.related-searches__list--first{padding-right:32px}.related-searches__item{padding-bottom:5px}.related-searches__item a:hover{text-decoration:none}.related-searches__item a:hover .related-searches__item-text span{text-decoration:underline}.related-searches__item-text::before{padding-right:16px}.related-searches__item-text::before{content:'S';font-family:'ddg-serp-icons';color:#999;vertical-align:middle}.is-mobile .related-searches{padding:0}.is-mobile .related-searches__title-short{padding:15px 16px;display:block}.is-mobile .results--main .related-searches__title-long{display:none}.is-mobile .related-searches__lists{display:block}.is-mobile .related-searches__list--first{padding-right:0}.is-mobile .related-searches__item{padding:15px 16px;border-top:1px solid rgba(150,150,150,0.2)}.is-mobile .related-searches__item a .related-searches__item-text{line-height:1.45}.is-mobile .related-searches__link{width:100%}.is-mobile .related-searches__item-text{display:flex;flex-direction:row-reverse;justify-content:space-between;align-items:center}.is-mobile .related-searches__item-text::before{padding-right:0}@keyframes pulse_animation{0%{opacity:0.5}12.5%{opacity:0.575}25%{opacity:0.75}37.5%{opacity:0.925}50%{opacity:1}62.5%{opacity:0.925}75%{opacity:0.75}87.5%{opacity:0.575}100%{opacity:0.5}}.module--translations{margin:0;position:relative}.module--translations .module--translations-section{float:left;padding:20px;position:relative;width:calc((100% - 80px) / 2)}.module--translations .module--translations-original,.module--translations .module--translations-translated{display:block;line-height:1}.module--translations .module--translations-original textarea,.module--translations .module--translations-translated textarea{appearance:none;border:0;resize:none;width:100%}.module--translations .module--translations-original{position:relative}.module--translations .module--translations-original textarea,.module--translations .module--translations-translatedtext{border-radius:4px;border-radius:var(--default-border-radius);box-sizing:border-box;color:#666;font-size:28px;line-height:32px;margin:0;min-height:216px;outline:0;overflow:hidden;padding:12px}.module--translations .module--translations-original textarea[data-size="m"],.module--translations .module--translations-translatedtext[data-size="m"]{font-size:21px;line-height:24px}.module--translations .module--translations-original textarea[data-size="s"],.module--translations .module--translations-translatedtext[data-size="s"]{font-size:18px;line-height:21px}.module--translations .module--translations-original textarea::placeholder,.module--translations .module--translations-translatedtext.is-placeholder{color:#999;opacity:1}.module--translations .module--translations-original textarea{padding-right:28px}.module--translations .module--translations-translatedtext{-webkit-transition:opacity .5s ease-in-out;-webkit-transition-delay:0s;-moz-transition:opacity .5s ease-in-out 0s;-o-transition:opacity .5s ease-in-out 0s;transition:opacity .5s ease-in-out 0s;background:#f7f7f7;padding-bottom:44px;word-wrap:break-word}.module--translations .module--translations-translatedtext.js-module--translations-outdated{opacity:0.5}.module--translations .module--translations-translatedtext.js-module--translations-pending{animation:pulse_animation 1.5s infinite}.module--translations .module--translations-translatedtext.module--translations-error{animation:none;color:#de5833;display:table-cell;opacity:1;padding-bottom:12px;vertical-align:bottom}.module--translations .module--translations-copy,.module--translations .module--translations-swap,.module--translations .module--translations-clear{color:#666;cursor:pointer;display:block;height:40px;line-height:40px;position:absolute;text-align:center;text-decoration:none;width:40px}.module--translations .module--translations-copy:hover,.module--translations .module--translations-swap:hover,.module--translations .module--translations-clear:hover{color:#333}.module--translations .module--translations-copy{bottom:20px;font-size:16px;height:44px;line-height:44px;right:20px;width:44px}.module--translations .module--translations-copy::after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\1f4c"}.module--translations .module--translations-swap{left:50%;margin-left:-20px;top:20px}.module--translations .module--translations-swap::after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\21c4"}.module--translations .module--translations-clear{color:#aaa;right:7px;top:61px}.module--translations .module--translations-clear::after{font-family:'ddg-serp-icons' !important;speak:none;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\58"}.module--translations .module--translations-clear:hover{color:#666}.module--translations .module--translations-length{-webkit-border-radius:16px;-moz-border-radius:16px;-ms-border-radius:16px;-o-border-radius:16px;border-radius:16px;background:#f7f7f7;bottom:24px;color:#666;display:inline-block;font-size:14px;left:24px;line-height:16px;padding:3px 6px;position:absolute}@media only screen and (max-width: 864px){.module--translations{padding-top:42px}.module--translations .module--translations,.module--translations .translations--wrapper{position:relative}.module--translations .module--translations::after,.module--translations .translations--wrapper::after{background:linear-gradient(to top, #f7f7f7, rgba(247,247,247,0));bottom:0;content:'';height:12px;left:0;position:absolute;width:100%}.module--translations .module--translations .translations--wrapper::after,.module--translations .translations--wrapper .translations--wrapper::after{background:linear-gradient(to top, #fff, rgba(255,255,255,0));bottom:240px}.module--translations .module--translations-section{float:none;padding:0;position:static}.module--translations .module--translations-section:first-child{margin:0}.module--translations .dropdown{height:40px;position:absolute;top:0;width:calc((100% - 40px) / 2)}.module--translations .dropdown__button{line-height:40px;overflow:hidden;padding:0 8px;text-align:center}.module--translations .dropdown__button::after{margin:-2px 0 0 8px;position:static}.module--translations .module--translations-section{width:auto}.module--translations .module--translations-original .dropdown{left:0}.module--translations .module--translations-translated .dropdown{right:0}.module--translations .module--translations-translatedtext,.module--translations .module--translations-original textarea{border-radius:0;height:110px;margin:0;min-height:110px;overflow-y:scroll;padding:12px 48px 12px 12px}.module--translations .module--translations-translatedtext{border-top:1px solid #DDD;border-radius:0 0 4px 4px;border-radius:0 0 var(--default-border-radius) var(--default-border-radius)}.module--translations .module--translations-translatedtext.module--translations-error{display:block;height:auto}.module--translations .module--translations-swap{border-bottom:1px solid #DDD;top:0}.module--translations .module--translations-copy,.module--translations .module--translations-clear{display:block;height:48px;line-height:48px;right:0;width:48px}.module--translations .module--translations-copy{bottom:0}.module--translations .module--translations-clear{top:42px}.module--translations .module--translations-length{bottom:12px;left:12px;background:#fff}}.translations-wrapper .js-module--translations-copy-temp{height:0;overflow:hidden;position:absolute}.translations-wrapper.js-show-length .module--translations-original textarea{padding-bottom:48px}.translations-wrapper.js-show-length .module--translations-translatedtext{padding-bottom:36px}@media only screen and (max-width: 864px){.translations-wrapper.js-show-length .module--translations-original{padding-bottom:0}.translations-wrapper.js-show-length .module--translations-original textarea{overflow-y:auto}.translations-wrapper.js-show-length .module--translations-translatedtext,.translations-wrapper.js-show-length .module--translations-original textarea{padding-bottom:12px}}.module--translations-tooltip{-webkit-transition:opacity 200ms;-moz-transition:opacity 200ms;-o-transition:opacity 200ms;transition:opacity 200ms;opacity:1;visibility:visible}.is-mobile .module--translations-tooltip.js-module--translations-tooltip-left::before{left:80%}.module--translations-footer{display:block;margin:8px;max-width:none;text-align:right}.module--translations-footer p{display:inline-block;font-size:12px;line-height:1;padding:0 0 0 8px}.module--translations-footer a{padding:0;text-decoration:underline}.module--translations-footer a:hover,.module--translations-footer a:active,.module--translations-footer a:focus{color:#888}@media only screen and (max-width: 864px){.module--translations,.translations-wrapper{max-width:calc(100% - 2px);overflow:hidden;position:relative}.module--translations::after,.translations-wrapper::after{background:linear-gradient(to top, rgba(247,247,247,0.9), rgba(247,247,247,0));bottom:0;content:'';display:none;height:12px;left:1px;position:absolute;width:calc(100% - 2px)}.translations-wrapper::after{background:linear-gradient(to top, rgba(255,255,255,0.9), rgba(255,255,255,0));bottom:260px}.js-module-translations--overflow::after,.js-module-translations--overflow .module--translations::after{display:block}}.ia-module--definitions .module__title{font-size:1.67em;padding-bottom:2px}.ia-module--definitions .module--definitions__plural{padding:0 0 4px 0}.ia-module--definitions .module--definitions__plural .module--definitions__singular{font-weight:bold}.ia-module--definitions .module--definitions__play{display:inline-block;width:25px}.ia-module--definitions .module--definitions__group h3,.ia-module--definitions .module--definitions__collapsed-group h3{font-size:1em;font-weight:600;padding-top:0.4em;padding-bottom:0.4em}.ia-module--definitions .module--definitions__group ol,.ia-module--definitions .module--definitions__collapsed-group ol{list-style:none;display:table;border-spacing:0 11px;margin:-11px 8px;padding:0}.ia-module--definitions .module--definitions__group ol li,.ia-module--definitions .module--definitions__collapsed-group ol li{display:table-row;counter-increment:table-ol;line-height:1.25}.ia-module--definitions .module--definitions__group ol li:before,.ia-module--definitions .module--definitions__collapsed-group ol li:before{content:counter(table-ol) ".";display:table-cell;padding-right:0.4em;color:#666}.ia-module--definitions .module--definitions__group ol li:last-child,.ia-module--definitions .module--definitions__collapsed-group ol li:last-child{margin-bottom:6px}.ia-module--definitions .module--definitions__group ol li .module--definitions__reference,.ia-module--definitions .module--definitions__collapsed-group ol li .module--definitions__reference{color:#00278e}.ia-module--definitions .module--definitions__group,.is-expanded .ia-module--definitions .module--definitions__collapsed-group{display:none}.is-expanded .ia-module--definitions .module--definitions__group,.ia-module--definitions .module--definitions__collapsed-group{display:block}.ia-module--definitions .module__more-at{padding-left:0}.ia-module--definitions .module--definitions__attribution{margin-top:16px}.ia-module--definitions .module--definitions__attribution .module--definitions__attribution-text{color:#666;font-size:12px;padding-top:0.25em;padding-bottom:0;line-height:1.25}.ia-module--definitions .module--definitions__attribution .module--definitions__attribution-link{margin-top:6px;line-height:1.2}.ia-module--sports a{color:inherit;cursor:pointer}.ia-module--sports a.tx-clr--red{color:#de5833}.ia-module--sports a:hover{color:#1A0DAB}.ia-module--sports .module__toggle--sports{display:none}.ia-module--sports .sports-module__league-link{color:#1A0DAB}.ia-module--sports .sports-module__controls{display:flex;align-items:center;flex-wrap:wrap;min-height:40px;margin-bottom:20px;margin-top:-8px}.ia-module--sports .sports-module__controls .spacer{margin-left:8px}.ia-module--sports .sports-module__controls>*{margin-top:8px}.ia-module--sports .sports-module__controls__dropdown .dropdown{border:1px solid #ddd;border-radius:4px;margin-bottom:0;margin-right:0;height:30px;line-height:30px}.ia-module--sports .sports-module__controls__dropdown .dropdown__button{color:initial;padding-right:25px;padding-left:10px;line-height:30px}.ia-module--sports .sports-module__content{margin-top:20px}.ia-module--sports .sports-module__footer{margin-top:20px;color:#666}.ia-module--sports .sports-module__footer__timezone{text-decoration:underline;text-decoration-style:dotted;cursor:pointer}.ia-module--sports .sports-module__footer__timezone:before{font-size:12px}.ia-module--sports .sports-module__footer a{color:#666}.ia-module--sports .sports-module__tab{background-color:#f5f5f5;font-size:1rem;font-weight:bold;border-radius:20px;padding:5px 12px;text-align:center;border:none;cursor:pointer;font-family:inherit;color:inherit;margin-right:8px}.ia-module--sports .sports-module__tab.selected{background-color:#333;color:white}.ia-module--sports .sports-module__tab:not(.selected):hover{background-color:rgba(0,0,0,0.12)}.ia-module--sports .sports-module__tab:last-of-type{margin-right:auto}.ia-module--sports .standings__tab{display:inline-block;width:50%;text-align:center;border:none;background:none;color:inherit;font-family:inherit;font-size:1rem;cursor:pointer;padding-bottom:10px}.ia-module--sports .standings__tab.selected{border-bottom:2px solid #222;font-weight:bold}.ia-module--sports .standings__conference__list{padding:0}.ia-module--sports .standings__conference__list table{width:100%;border-collapse:collapse;margin-top:1rem}.ia-module--sports .standings__conference__list th{text-decoration:none;text-align:center;color:#666;width:8%}.ia-module--sports .standings__conference__list th:first-child{text-align:left;width:50%;color:initial}.ia-module--sports .standings__conference__list tbody tr:hover{background-color:#f7f7f7}.ia-module--sports .standings__conference__list td{text-align:center;border-bottom:1px solid #ddd;padding-top:6px;padding-bottom:3px}.ia-module--sports .standings__conference__list td a{display:block}.ia-module--sports .standings__conference__list tr.dotted-border-bottom td{border-bottom:1px dashed #888}.ia-module--sports .standings__conference__list tr.bold-border-bottom td{border-bottom:1px solid #888}.ia-module--sports .standings__conference__list td:first-child{text-align:left}.ia-module--sports .standings__conference__list td:not(:first-child) a:hover{text-decoration:none;color:initial}.ia-module--sports .standings__conference__list .standings__teamlink{display:flex;flex-wrap:wrap;align-items:center}.ia-module--sports .standings__conference__list .standings__teamlink .team__ranking{display:inline-block;padding-left:4px;margin-right:10px;min-width:15px}.ia-module--sports .standings__conference__list .standings__teamlink.standings__teamlink--withrank{flex-wrap:nowrap}.ia-module--sports .standings__conference__list .standings__division__title{font-weight:bold}.ia-module--sports .standings__conference__list .standings__division__metrics th{color:#666}.ia-module--sports .standings__conference__list .team__name{margin-left:3px}@media screen and (max-width: 425px){.ia-module--sports .standings__conference__list .team__name{flex-basis:100%}.ia-module--sports .standings__conference__list th{width:10%}.ia-module--sports .standings__conference__list th:first-child{width:36%}.ia-module--sports .standings__conference__list td{line-height:1rem;font-size:90%}}.ia-module--sports .matchup .matchup__group{margin-top:15px}.ia-module--sports .matchup .matchup__title{font-weight:bold}.ia-module--sports .matchup .matchup__item{border-bottom:1px solid #ddd;position:relative;margin:0 -20px}.ia-module--sports .matchup .matchup__item:hover{background-color:#f7f7f7}.ia-module--sports .matchup .matchup__item .matchup__item__link{position:absolute;width:100%;height:100%;z-index:1}.ia-module--sports .matchup .matchup__item .match__item__team-wrapper{position:relative;display:flex;justify-content:space-between;align-items:center;padding:5px 20px}.ia-module--sports .matchup .matchup__item .matchup__item__team{flex-basis:25%;display:flex;align-items:center;z-index:2}.ia-module--sports .matchup .matchup__item .matchup__item__team>*:first-child{margin-right:3px}.ia-module--sports .matchup .matchup__item .matchup__item__team.team--away{text-align:start}.ia-module--sports .matchup .matchup__item .matchup__item__team.team--home{justify-content:flex-end;text-align:right}.ia-module--sports .matchup .matchup__item .matchup__item__score-time{flex-basis:10%;text-align:center}.ia-module--sports .matchup .matchup__item .game-time{flex-basis:30%;text-align:right}.ia-module--sports .matchup .matchup__item .game-time .ddgsi-circle{font-size:0.33rem;vertical-align:middle;margin-right:0.33rem}.ia-module--sports .matchup .matchup__item .game-time--mobile{display:none}.ia-module--sports .matchup .matchup__item .game-time--desktop{display:block}@media screen and (max-width: 590px){.ia-module--sports .matchup .matchup__item{align-items:flex-end;margin:0 -16px}.ia-module--sports .matchup .matchup__item .matchup__item__team{flex-basis:25%}.ia-module--sports .matchup .matchup__item .matchup__item__team>*:first-child{margin:0}.ia-module--sports .matchup .matchup__item .matchup__item__team.team--away{flex-wrap:wrap}.ia-module--sports .matchup .matchup__item .matchup__item__team.team--home{flex-wrap:wrap-reverse}.ia-module--sports .matchup .matchup__item .matchup__item__team .team__name{flex-basis:100%}.ia-module--sports .matchup .matchup__item .matchup__item__score-time{flex-basis:50%}.ia-module--sports .matchup .matchup__item .game-time{flex-basis:100%;text-align:center}.ia-module--sports .matchup .matchup__item .matchup__item__score-time{display:flex;flex-wrap:wrap;text-align:center;flex-grow:2;flex-basis:50%}.ia-module--sports .matchup .matchup__item .matchup__item__score-time>*{flex-basis:100%}.ia-module--sports .matchup .matchup__item .game-time--mobile{display:block}.ia-module--sports .matchup .matchup__item .game-time--desktop{display:none}}.ia-module--sports .team__icon{width:22px;height:22px;padding:4px;display:flex;align-items:center}.ia-module--sports .team__icon img{max-height:100%;width:100%}.ia-module--sports .game-card__teams-status{justify-content:space-between;display:flex}.ia-module--sports .game-card__teams-status .game-card__team:last-of-type{justify-content:flex-end}.ia-module--sports .game-card__team{flex-basis:33%}.ia-module--sports .game-card .game-card__teamlink{display:flex;align-items:center}.ia-module--sports .game-card .game-card__teamlink.home-team{justify-content:flex-end}.ia-module--sports .game-card .game-card__teamlink__icon{width:38px;height:38px;padding:6px;display:flex;align-items:center}.ia-module--sports .game-card .game-card__teamlink__icon img{max-height:100%;width:100%}.ia-module--sports .game-card .game-card__teamlink>*:first-child{margin-right:3px}.ia-module--sports .game-card .game-card__teamlink__details{line-height:1.25rem}.ia-module--sports .game-card .game-card__teamlink__details__name{font-weight:bold}.ia-module--sports .game-card .game-card__status{text-align:center;white-space:nowrap;font-size:1.3rem}.ia-module--sports .game-card .game-card__status__at{font-weight:bold}.ia-module--sports .game-card .game-card__status__datetime{border-radius:4px;padding:2px 8px;background-color:#f2f2f2;color:#666;font-size:initial}.ia-module--sports .game-card .game-card__quarters-scores{display:flex;flex-direction:column}.ia-module--sports .game-card .game-card__quarters-scores div:last-child{border-top:none}.ia-module--sports .game-card .game-card__quarters{display:table;table-layout:fixed;width:100%;border-left:none;color:#666}.ia-module--sports .game-card .game-card__quarters>div{vertical-align:middle;text-align:center;display:table-cell}.ia-module--sports .game-card .game-card__scores{display:table;table-layout:fixed;width:100%;height:70px;border:1px solid #ddd;border-right:none;border-left:none}.ia-module--sports .game-card .game-card__scores>div{vertical-align:middle;text-align:center;display:table-cell}.ia-module--sports .game-card .game-card__scores__score{position:relative;font-size:large}.ia-module--sports .game-card .game-card__win-marker{display:inline-block;vertical-align:middle;position:relative;font-size:13px;left:14px;width:0;transform:rotateY(180deg)}.ia-module--sports .game-card .game-card__win-marker:before{content:'\25ba'}.ia-module--sports .game-card--mobile .game-card__status--wrapper{display:flex;flex-direction:column;align-items:center;justify-content:center}.ia-module--sports .game-card--mobile .game-card__status{margin-top:0}.ia-module--sports .game-card--mobile .game-card__status--active{color:#4cba3c}.ia-module--sports .game-card--mobile .game-card__quarters-scores{margin:1rem -16px}.ia-module--sports .game-card--mobile .game-card__quarters-scores>*{height:30px}.ia-module--sports .game-card--mobile .game-card__quarters-scores>:first-child{margin-bottom:10px}.ia-module--sports .game-card--mobile .game-card__scores{border:none}.ia-module--sports .game-card--mobile .game-card__scores__score{font-size:initial}.ia-module--sports .game-card--active,.ia-module--sports .game-card--passed{display:flex;margin:0 -20px}.ia-module--sports .game-card--active .game-card__team,.ia-module--sports .game-card--passed .game-card__team{padding-left:20px}.ia-module--sports .game-card--desktop .game-card__time-teams{flex-basis:50%;display:flex;flex-direction:column}.ia-module--sports .game-card--desktop .game-card__time-teams div:last-child{border-top:none}.ia-module--sports .game-card--desktop .game-card__quarters-scores{flex-basis:50%}.ia-module--sports .game-card--desktop .game-card__time{padding-left:20px}.ia-module--sports .game-card--desktop .game-card__time,.ia-module--sports .game-card--desktop .game-card__quarters{padding-bottom:10px}.ia-module--sports .game-card--desktop .game-card__team{min-height:70px;border:1px solid #ddd;border-left:none;display:flex}.ia-module--sports .game-card--desktop.game-card--upcoming .game-card__team{border:none}.ia-module--sports .game-card--desktop.game-card--multiple-overtimes .game-card__time-teams{flex-basis:35%}.ia-module--sports .game-card--desktop.game-card--multiple-overtimes .game-card__quarters-scores{flex-basis:65%}.ia-module--sports .game-card .game-card__time--active{color:#4cba3c}@media screen and (max-width: 590px){.ia-module--sports .game-card{margin:0}.ia-module--sports .game-card .game-card__teamlink{flex-wrap:wrap}.ia-module--sports .game-card .game-card__teamlink__icon{height:22px;width:22px;padding:4px}.ia-module--sports .game-card .game-card__teamlink__details{flex-basis:100%}.ia-module--sports .game-card .game-card__teamlink.home-team{flex-wrap:wrap-reverse;text-align:right}.ia-module--sports .game-card .game-card__teamlink>*:first-child{margin:0}.ia-module--sports .game-card .game-card__status__datetime{font-size:1rem}}.modal--dropdown--sports-season-weeks .modal__box{max-height:350px;overflow-y:scroll}.ia-module--stocks .stocks-module__header{display:flex;justify-content:space-between;flex-wrap:wrap}.ia-module--stocks .stocks-module__latestUpdate{line-height:18px;margin:3px 0 0 0;color:#333}.ia-module--stocks .stocks-module__exchange{float:right;font-weight:bold;color:#333;line-height:1}.ia-module--stocks.increase .color-coded{color:#5b9e4d}.ia-module--stocks.increase .color-coded path{stroke:#5b9e4d;fill:#5b9e4d}.ia-module--stocks.increase .stocks-module__arrow svg{transform:rotate(180deg)}.ia-module--stocks.decrease .color-coded{color:#de5833}.ia-module--stocks.decrease .color-coded path{stroke:#de5833;fill:#de5833}.ia-module--stocks .stocks-module__currentPriceInfo{font-size:19px;line-height:22.27px;margin-top:15px;margin-bottom:20px}.ia-module--stocks .stocks-module__currentPriceInfo .stocks-module__priceInfo,.ia-module--stocks .stocks-module__currentPriceInfo .stocks-module__changeInfo{display:inline-block}.ia-module--stocks .stocks-module__currentPriceInfo .stocks-module__currentPrice{display:inline-block;font-size:44px;line-height:34px;margin-right:5px}.ia-module--stocks .stocks-module__currentPriceInfo .stocks-module__change{margin:0 5px}.ia-module--stocks .stocks-module__currentPriceInfo .stocks-module__arrow{margin-left:5px;line-height:16px;vertical-align:middle}.ia-module--stocks .stocks-module__range-content{display:flex;justify-content:space-between;position:relative}.ia-module--stocks .stocks-module__range-content .stocks-module__timePeriod{font-size:14.4px;font-weight:bold;border-radius:20px;width:66px;height:28px;line-height:28px;text-align:center;cursor:pointer;background-color:rgba(0,0,0,0.06)}.ia-module--stocks .stocks-module__range-content .stocks-module__timePeriod.selected{background-color:rgba(0,0,0,0.9);color:white;cursor:default}.ia-module--stocks .stocks-module__range-content .stocks-module__timePeriod:not(.selected):hover{background-color:rgba(0,0,0,0.12)}.ia-module--stocks .stocks-module__range-content .stocks-module__timePeriod .stocks-module__timePeriodMobile{display:none}.ia-module--stocks .stocks-module__range-content .stocks-module__range-fade{display:none}.ia-module--stocks .stocks-module__hover-label-container{width:100%;height:15px;margin-left:40px;position:relative}.ia-module--stocks .stocks-module__hover-label-container .stocks-module__hover-label{position:absolute}.ia-module--stocks .stocks-module__chart-area{position:relative}.ia-module--stocks .stocks-module__chart-area-row{display:flex}.ia-module--stocks .stocks-module__chart-area-row .stocks-module__vertical-labels{width:40px;height:84.5px;position:relative;color:#666;flex-shrink:0}.ia-module--stocks .stocks-module__chart-area-row .stocks-module__vertical-labels p{padding:0;line-height:18px;margin-top:-9px}.ia-module--stocks .stocks-module__chart-area-row .stocks-module__chart{height:84.5px;width:100%}.ia-module--stocks .stocks-module__chart-area-row .stocks-module__chart .horizontal-line,.ia-module--stocks .stocks-module__chart-area-row .stocks-module__chart .vertical-line{stroke:#f2f2f2}.ia-module--stocks .stocks-module__horizontal-labels{height:18px;padding:0;margin:10px 0 0 40px;position:relative;color:#666}.ia-module--stocks .stocks-module__horizontal-labels p{line-height:1;position:absolute;white-space:nowrap}.ia-module--stocks .stocks-module__chart-placeholder{position:absolute;width:100%;height:100%;top:0}.ia-module--stocks .stocks-module__chart-placeholder .stocks-module__vertical-labels{display:flex;flex-direction:column;justify-content:space-between}.ia-module--stocks .stocks-module__chart-placeholder .stocks-module__horizontal-labels{display:flex;flex-direction:row;justify-content:space-around}.ia-module--stocks .stocks-module__chart-placeholder .stocks-module__label-placeholder{width:29px;height:16px;border-radius:10px;background-color:#d0d0d0;opacity:0.2}.ia-module--stocks .stocks-module__chart-placeholder .stocks-module__chart{position:relative;display:flex;justify-content:center;align-items:center}.ia-module--stocks .stocks-module__chart-placeholder .stocks-module__placeholder-box{height:50%;width:100%;background-color:rgba(208,208,208,0.2);position:absolute;bottom:0;left:0;border-top:dashed rgba(208,208,208,0.1) 2px}.ia-module--stocks .stocks-module__chart-placeholder .stocks-module__placeholder-message{background-color:white;font-weight:bold;box-shadow:0px 2px 6px 1px rgba(0,0,0,0.1);display:inline-block;padding:13px 20px;border-radius:12px;position:relative;line-height:1}.ia-module--stocks .stocks-module__stats-wrapper{margin-top:15px}.ia-module--stocks .stocks-module__stats-wrapper .stocks-module__stats{display:flex;flex-direction:row;margin:0 -10px;color:#333}.ia-module--stocks .stocks-module__stats-wrapper .stocks-module__stats .stocks-module__stat-col{display:flex;flex-direction:column;flex:1}.ia-module--stocks .stocks-module__stats-wrapper .stocks-module__stats .stocks-module__stat-col .stocks-module__stat{display:flex;justify-content:space-between;align-items:center;margin:0 10px;line-height:18px;height:38px;border-bottom:solid 1px #e0e0e0}html:not(.is-mobile) .ia-module--stocks .stocks-module__stats-wrapper .stocks-module__stats .stocks-module__stat-col .stocks-module__stat.stocks-module__no-border-desktop{border-bottom:none}.ia-module--stocks .stocks-module__stats-wrapper .stocks-module__stats .stocks-module__stat-col .stocks-module__stat label{font-weight:bold}.ia-module--stocks .stocks-module__stats-wrapper .stocks-module__stats .stocks-module__stat-col .stocks-module__stat p{line-height:18px;padding:0}.ia-module--stocks .stocks-module__footer{margin-top:10px;color:#666}.ia-module--stocks .stocks-module__footer a{color:#666;cursor:pointer}.is-mobile .ia-module--stocks .stocks-module__desktop-only{display:none !important}.is-mobile .ia-module--stocks .stocks-module__header{flex-direction:column}.is-mobile .ia-module--stocks .stocks-module__exchange{margin-top:3px}.is-mobile .ia-module--stocks .stocks-module__stats-wrapper .stocks-module__stats .stocks-module__stat-col .stocks-module__stat.stocks-module__no-border-mobile{border-bottom:none}@media (max-width: 370px){.is-mobile .ia-module--stocks .stocks-module__range-wrapper{position:relative;height:28px;overflow:hidden}.is-mobile .ia-module--stocks .stocks-module__range{overflow-x:auto;height:40px}.is-mobile .ia-module--stocks .stocks-module__range-fade{width:20px;height:28px;display:inline-block;position:absolute;right:0;top:0;background-image:linear-gradient(90deg, rgba(255,255,255,0), #fff)}.is-mobile .ia-module--stocks .stocks-module__range-content{display:block}.is-mobile .ia-module--stocks .stocks-module__range-content .stocks-module__timePeriod{margin-right:9px}}.is-mobile .ia-module--stocks .stocks-module__range-content{white-space:nowrap}.is-mobile .ia-module--stocks .stocks-module__range-content .stocks-module__timePeriodDesktop{display:none}.is-mobile .ia-module--stocks .stocks-module__range-content .stocks-module__timePeriodMobile{display:block}.is-mobile .ia-module--stocks .stocks-module__range-content .stocks-module__timePeriod{display:inline-block;border-radius:40px;padding:5px 10px;line-height:18px;width:auto;height:auto}html:not(.is-mobile) .ia-module--stocks .stocks-module__mobile-only{display:none !important}.ia-module--spread-cta{line-height:18px;cursor:pointer}.ia-module--spread-cta.spread-cta--has-top-margin{margin-top:46px}.ia-module--spread-cta .spread-cta--icon{float:right;height:80px;margin-top:-15px;margin-right:-14px}.ia-module--spread-cta .spread-cta--title{font-weight:600}.ia-module--spread-cta .spread-cta--cta{color:#666}.module--lyrics .module__content{max-height:380px;overflow:hidden;font-size:1.1rem}.is-mobile .module--lyrics .module__content{max-height:236px}.module--lyrics.is-expanded .module__content{max-height:none;overflow:visible}.module--lyrics .module--lyrics__subtitle-box{display:flex;justify-content:space-between;align-items:flex-start;margin-top:2px;margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid #E5E5E5}.module--lyrics .module--lyrics__explicit-tag{margin-top:2px;box-sizing:border-box;padding:4px 6px;border:1px solid #ABABAB;border-radius:4px;color:#888;font-size:10px;letter-spacing:0.07rem;line-height:10px;height:20px;font-weight:600;text-transform:uppercase}.module--lyrics .module--lyrics__footer{position:relative;padding:0 22px;padding-bottom:15px;font-size:0.835rem;letter-spacing:0.1px}.is-mobile .module--lyrics .module--lyrics__footer{padding-left:16px;padding-right:16px}.module--lyrics:not(.is-expanded) .module--lyrics__footer.can-expand::after{content:"";position:absolute;top:-100px;height:100px;left:0px;right:0px;background:linear-gradient(rgba(255,255,255,0), #fff)}.module--lyrics .module--lyrics__infobox{margin-top:8px;margin-bottom:16px}.is-mobile .module--lyrics .module--lyrics__infobox{margin-bottom:4px}.module--lyrics .module--lyrics__infobox--key{font-weight:bold}.is-mobile .module--lyrics:not(.is-expanded) .module--lyrics__footer.can-expand .module--lyrics__infobox>p:not(:first-child){opacity:0;height:0;margin:0;padding:0}.module--lyrics.is-expanded .feedback-prompt{display:block}.disinformation-warning--wrapper{margin-bottom:10px}.is-mobile .disinformation-warning--wrapper{margin-bottom:7px}.disinformation-warning--wrapper .ia-module--disinformation-warning{margin-bottom:5px}.disinformation-warning--wrapper .ia-module--disinformation-warning .module__title{margin-bottom:5px}.disinformation-warning--wrapper .ia-module--disinformation-warning .disinformation-warning--content .disinformation-warning--left-col{margin:0;padding:0}.disinformation-warning--wrapper .ia-module--disinformation-warning .disinformation-warning--content .disinformation-warning--right-col{float:right;margin-left:20px}.disinformation-warning--wrapper .ia-module--disinformation-warning .disinformation-warning--content .disinformation-warning--right-col img{width:136px;height:91.34px;border-radius:8px}.disinformation-warning--wrapper .ia-module--disinformation-warning .disinformation-warning--source{font-weight:bold}.disinformation-warning--wrapper .module__more-at-and-feedback{display:flex}.disinformation-warning--wrapper .module__more-at{font-size:12px;text-align:right;padding:8px 4px 0 0;line-height:1;float:left;margin-left:auto}.disinformation-warning--wrapper .module__more-at a{text-decoration:underline;color:#666}.disinformation-warning--wrapper .disinformation-warning--separator{padding-top:3px}@media only screen and (max-width: 1150px){.is-not-mobile-device .results--sidebar .disinformation-warning--content .disinformation-warning--right-col{float:none;margin-left:0;margin-bottom:16px}}.verticals{position:relative}.vertical{position:relative}.vertical.is-requerying .results{-webkit-transition:opacity .3s ease-in-out;-webkit-transition-delay:0s;-moz-transition:opacity .3s ease-in-out 0s;-o-transition:opacity .3s ease-in-out 0s;transition:opacity .3s ease-in-out 0s;opacity:0.2}.has-vertical-map-open{overflow:hidden}@media screen{.has-vertical-map-open,.has-vertical-map-open body{height:100vh}}.has-vertical-map-open .site-wrapper{display:none}.vertical--map{min-height:100vh;overflow:hidden;position:fixed;left:0;right:0;top:0;bottom:0;height:100%;z-index:240;border:none;margin:0;background-color:#F9F5ED;background-size:30px 30px;background-image:linear-gradient(to right, #e5e1da 1px, transparent 1px),linear-gradient(to bottom, #e5e1da 1px, transparent 1px)}.dark-bg .vertical--map{background-color:#333;background-size:30px 30px;background-image:linear-gradient(to right, #4d4d4d 1px, transparent 1px),linear-gradient(to bottom, #4d4d4d 1px, transparent 1px)}.vertical--map.vertical--map--sidebar-bottom{overflow-y:scroll;position:absolute}.vertical--map__map{box-sizing:border-box;position:absolute;top:0;bottom:0;left:0;right:0}.vertical--map__sidebar{position:absolute;top:0;left:0;bottom:0;width:400px;z-index:200;touch-action:none}@media only screen and (max-width: 864px){.vertical--map__sidebar{width:300px}}.vertical--map--sidebar-bottom .vertical--map__sidebar{top:50%;width:100%}.vertical--map--sidebar-bottom .vertical--map__sidebar.vertical--map--sidebar-closed{height:0}.vertical--map__sidebar-mask{display:none;z-index:-1}.is-mobile-device .vertical--map--scrolled-up .vertical--map__sidebar-mask{display:block;background:white;height:40%;width:100%;position:fixed;bottom:0}.vertical--map__sidebar--max{height:100%}.vertical--map__sidebar__header{background:#fafafa}.has-directions .vertical--map__sidebar__header__link{position:absolute;top:0;left:0}.vertical--map--sidebar-left .vertical--map__sidebar__header{-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.15);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.15);box-shadow:0 1px 0 rgba(0,0,0,0.15);height:44px;padding:6px;position:absolute;top:0;right:0;left:0;z-index:4}.vertical--map--sidebar-left .has-directions .vertical--map__sidebar__header{height:138px;padding-top:0}.vertical--map--sidebar-left .vertical--map__sidebar__header__search{display:inline-block}.vertical--map--sidebar-left .vertical--map__sidebar__wrapper{padding-top:55px}.vertical--map--sidebar-left .has-directions .vertical--map__sidebar__wrapper{padding-top:144px}.vertical--map--sidebar-left .vertical--map__sidebar__header__link{border:0;padding:18px 0;margin:0;width:48px}.vertical--map--sidebar-left .vertical--map__sidebar__header__link--back{display:table-cell;vertical-align:top;padding:0 5px 0 0}.vertical--map--sidebar-left .vertical--map__sidebar__header__link:hover .vertical--map__sidebar__header__link__icon-wrap{opacity:0.65}.vertical--map--sidebar-left .vertical--map__sidebar__header__link__icon-wrap{display:block;padding:13px;border-radius:100%}.vertical--map--sidebar-left .vertical--map__sidebar__header__link__icon{vertical-align:middle;margin-right:20px;margin-left:11px;width:20px;height:18px;margin-top:-5px;background-image:url(assets/maps/back_arrow.svg);background-repeat:no-repeat;background-position:50% 50%;background-size:contain;display:inline-block}.dark-header .vertical--map--sidebar-left .vertical--map__sidebar__header__link__icon{background-image:url(assets/maps/back_arrow_dark.svg)}.vertical--map--sidebar-left .vertical--map__sidebar__header__link__icon--back{display:block;vertical-align:initial;margin:0}.vertical--map__sidebar__header--mobile{position:fixed;top:0;width:100%;height:51px;z-index:300;-webkit-flex:1;flex:1;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;background-color:#fafafa;border-bottom:1px solid #d0d0d0;padding-bottom:6px}.has-directions .vertical--map__sidebar__header--mobile{height:142px}.vertical--map__sidebar__header--mobile .vertical--map__sidebar__header__content{position:absolute;top:0}.vertical--map__sidebar__header--mobile .vertical--map__sidebar__header__search{display:inline-block;margin:7px;position:inherit;right:18px;left:38px}.vertical--map__sidebar__header--mobile .vertical--map__sidebar__header__search.is-iphone{right:6.5px}.has-directions .vertical--map__sidebar__header--mobile .vertical--map__sidebar__header__search:first-child{margin:0 7px 7px 0}.has-directions .vertical--map__sidebar__header--mobile .vertical--map__sidebar__header__search:last-child{margin:7px 7px 0 0}.vertical--map__sidebar__header--mobile .vertical--map__sidebar__header__search .search--header{width:100%}.vertical--map__sidebar__header--mobile .vertical--map__sidebar__header__link{border:0;padding:18px 0;margin:0;position:inherit}.has-directions .vertical--map__sidebar__header--mobile .vertical--map__sidebar__header__link{display:table-cell;vertical-align:top;padding:11px 0}.vertical--map__sidebar__header--mobile .vertical--map__sidebar__header__link__icon{vertical-align:middle;margin-right:15px;margin-left:11px;width:18.67px;height:18px;margin-top:-3px;background-image:url(assets/maps/back_arrow.svg);background-repeat:no-repeat;background-position:50% 50%;background-size:contain;display:inline-block}.dark-header .vertical--map__sidebar__header--mobile .vertical--map__sidebar__header__link__icon{background-image:url(assets/maps/back_arrow_dark.svg)}.vertical--map__sidebar__header__handle{margin-top:14px}.vertical--map__sidebar__header__handle:after,.vertical--map__sidebar__header__handle:before{transition:none}.vertical--map__sidebar__header--touch__back{position:absolute;top:10px;left:10px;z-index:10}.vertical--map__sidebar__header__content{display:table;position:relative;width:100%}.vertical--map__sidebar__header__close-btn{position:absolute;top:6px;right:3px;font-size:20px;cursor:pointer}.is-mobile .vertical--map__sidebar__header__close-btn{right:11px}.vertical--map__sidebar__header__col{display:table-cell;vertical-align:middle}.vertical--map__sidebar__header__col--right{text-align:right}.vertical--map__sidebar__header__link:focus{border-color:#ddd}.vertical--map__sidebar__header__link__icon{margin:0 0.2em 0 -0.2em;font-size:smaller}.vertical--map__sidebar__header__logo{display:inline-block;vertical-align:middle}.vertical--map__sidebar__header__logo__img{background-image:url(assets/logo_header.v107.min.png);background-position:50% 50%;background-repeat:no-repeat;background-size:contain;width:40px;height:40px;margin:auto;display:block;position:relative;text-align:center;color:transparent;text-indent:-9999px;font-size:0px}.svg .vertical--map__sidebar__header__logo__img{background-image:url(assets/logo_header.v107.min.svg)}.dark-header .vertical--map__sidebar__header__logo__img{background-image:url(assets/logo_header_alt.v103.min.png)}.svg.dark-header .vertical--map__sidebar__header__logo__img{background-image:url(assets/logo_header_alt.v103.min.svg)}.vertical--map__sidebar__wrapper{position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:0 0 1px rgba(0,0,0,0.25),0 0 5px rgba(0,0,0,0.25);background:white;z-index:2}.vertical--map--sidebar-bottom .vertical--map__sidebar__wrapper{padding-top:0;position:initial;top:initial;bottom:initial;left:initial;right:initial;min-height:100%}.vertical--map--sidebar-closed .vertical--map__sidebar__wrapper{display:none}.vertical--map__sidebar__inner{position:relative;height:100%;overflow-y:scroll;-webkit-overflow-scrolling:touch;overflow-x:hidden;z-index:1}.vertical--map--sidebar-bottom .vertical--map__sidebar__inner{padding-bottom:47px}.vertical--map__sidebar__footer{position:relative;visibility:hidden}.vertical--map--has-shown-items .vertical--map__sidebar__footer,.vertical--map--no-results .vertical--map__sidebar__footer{visibility:visible}.is-requerying .vertical--map__sidebar__footer{visibility:hidden}.is-requerying .vertical--map__sidebar__detail,.is-requerying .vertical--map__sidebar__results{opacity:0.3}.vertical--map__sidebar__results__inner{position:relative}.vertical--map__sidebar__results__inner .no-results{padding:20px;padding-bottom:12px}.vertical--map__sidebar__results__inner .no-results__title{overflow-wrap:break-word}.vertical--map__sidebar__results__inner .no-results__link{color:#00278e}.vertical--map--no-results .vertical--map__sidebar__results__inner{border-bottom:none}.vertical--map__mobile-toggle{position:fixed;bottom:0;z-index:1;width:100%;background:#fafafa;border-top:1px solid rgba(0,0,0,0.15);padding:10px 20px;font-size:14px;font-weight:bold;display:flex;align-items:center;cursor:pointer}.vertical--map__mobile-toggle-icon{font-family:'ddg-serp-icons';font-weight:normal;font-size:16px;height:25px}.vertical--map__mobile-toggle-icon--list:before{content:"\21F6"}.vertical--map__mobile-toggle-icon--map{background-image:url("assets/maps/map-icon.svg");background-repeat:no-repeat;background-position:center;width:16px}.vertical--map__mobile-toggle-text{padding-left:10px}.vertical--map__sidebar__toggle{position:absolute;top:50%;margin-top:-21px;left:100%;margin-left:-2px;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px;z-index:1}.vertical--map__sidebar__toggle:before{display:block;position:absolute;height:100%;width:1px;box-shadow:0 0 2px rgba(0,0,0,0.5);content:'';left:1px;top:0;z-index:1}.vertical--map--sidebar-bottom .vertical--map__sidebar__toggle{display:none}.vertical--map__btn{display:block;padding:0;height:32px;width:32px;line-height:32px;font-size:16px;border:none;overflow:hidden;background-color:#ffffff;transition:background-color .1s ease-out}.vertical--map__btn:hover,.vertical--map__btn:active{background-color:#f8f8f8}.vertical--map__sidebar__toggle .vertical--map__btn{font-size:12px;width:24px;height:42px;border-top-left-radius:0;border-bottom-left-radius:0}.vertical--map__sidebar__toggle .vertical--map__btn:focus{color:#c2c2c2}.vertical--map__sidebar--light .vertical--map__btn{background-color:#fafafa}.vertical--map__sidebar--light .vertical--map__btn:focus{color:#333}.vertical--map__search-this-area{background:#fff;border:none;box-shadow:0 2px 6px 0 rgba(0,0,0,0.2),0 0 1px 1px rgba(0,0,0,0.15);color:#2778dc;font-weight:bold;font-size:14px;font-family:"DDG_ProximaNova","DDG_ProximaNova_UI_0","DDG_ProximaNova_UI_1","DDG_ProximaNova_UI_2","DDG_ProximaNova_UI_3","DDG_ProximaNova_UI_4","DDG_ProximaNova_UI_5","DDG_ProximaNova_UI_6","Proxima Nova","Helvetica Neue","Helvetica","Segoe UI","Nimbus Sans L","Liberation Sans","Open Sans",FreeSans,Arial,sans-serif}.vertical--map__search-this-area:hover,.vertical--map__search-this-area:active,.vertical--map__search-this-area:focus{background:#fafafa;color:#2778dc}.dark-bg .vertical--map__search-this-area.btn{background:#66abff;color:#fff}.dark-bg .vertical--map__search-this-area.btn:hover,.dark-bg .vertical--map__search-this-area.btn:active,.dark-bg .vertical--map__search-this-area.btn:focus{background:#5691d9}.vertical--map__user-loc-container{position:absolute;top:10px;right:-35px}.vertical--map__type-container{position:absolute;bottom:35px;right:-100px;height:60px}.vertical--map__search-examples{border-top:1px solid rgba(150,150,150,0.3);padding:16px 20px}.vertical--map__search-examples__title{font-weight:600;font-size:16px;padding:0}.vertical--map__search-examples__list{padding:10px 0 0 0}.vertical--map__search-examples__item{width:50%;display:inline-block;padding:1px 0}.vertical--map__search-examples__icon{width:18px;height:18px;padding-right:10px}@media only screen and (max-height: 590px) and (max-width: 425px){.vertical--map__search-examples__item:nth-child(n+7){display:none}}.vertical--map__search-examples__button{font-size:1em;position:relative;color:#00278e;display:flex;align-items:center;padding:0;background:none;border:none;cursor:pointer}.vertical--map__search-examples__button:hover{text-decoration:underline}.vertical--map__search-web{position:relative;display:block;padding:14px 20px;font-weight:600;color:#044999;border-top:1px solid rgba(150,150,150,0.3)}.vertical--map__search-web .ddgsi{position:absolute;margin:-1px 0 0 2px}.vertical--map .module__section.module__section--simple{padding-bottom:15px;padding-top:16px;border-top:1px solid rgba(150,150,150,0.3)}.map-sidebar-footer{padding-right:22px;border-top:1px solid rgba(150,150,150,0.3);padding-bottom:15px;padding-top:16px}.map-sidebar-footer.map-sidebar-footer--offsetted{float:right;margin-top:-36px;border-top:none;padding-bottom:0px;padding-top:0px}.map-sidebar-footer:empty{display:none}.has-directions .map-sidebar-footer--offsetted{margin-top:-44px} diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC0C65E4A4DD86778875F9857A457F25A4494571 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC0C65E4A4DD86778875F9857A457F25A4494571 new file mode 100644 index 0000000..59fa863 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC0C65E4A4DD86778875F9857A457F25A4494571 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC1B092FE7D5CA3CC909C40888C9E8BEA6DFC895 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC1B092FE7D5CA3CC909C40888C9E8BEA6DFC895 new file mode 100644 index 0000000..5c11b04 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC1B092FE7D5CA3CC909C40888C9E8BEA6DFC895 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC1B092FE7D5CA3CC909C40888C9E8BEA6DFC895-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC1B092FE7D5CA3CC909C40888C9E8BEA6DFC895-blob new file mode 100644 index 0000000..58f3593 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC1B092FE7D5CA3CC909C40888C9E8BEA6DFC895-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC55B027DCF086ADC3F9622FACD17B870A81963C b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC55B027DCF086ADC3F9622FACD17B870A81963C new file mode 100644 index 0000000..3bfa88c Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC55B027DCF086ADC3F9622FACD17B870A81963C differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC86B06AB845171BEAD8CD76A22256CBB7F74EA8 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC86B06AB845171BEAD8CD76A22256CBB7F74EA8 new file mode 100644 index 0000000..6439522 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AC86B06AB845171BEAD8CD76A22256CBB7F74EA8 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AD8F0EDABE9CC15BB1CC4F69EB8BA29C412F6DEC b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AD8F0EDABE9CC15BB1CC4F69EB8BA29C412F6DEC new file mode 100644 index 0000000..ace0558 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AD8F0EDABE9CC15BB1CC4F69EB8BA29C412F6DEC differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AD9841D6DE5622456481DE2C589AFBC3C19F3C75 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AD9841D6DE5622456481DE2C589AFBC3C19F3C75 new file mode 100644 index 0000000..63fc1f3 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AD9841D6DE5622456481DE2C589AFBC3C19F3C75 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AD9841D6DE5622456481DE2C589AFBC3C19F3C75-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AD9841D6DE5622456481DE2C589AFBC3C19F3C75-blob new file mode 100644 index 0000000..06611ad Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AD9841D6DE5622456481DE2C589AFBC3C19F3C75-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ADDF6B523ADDB0F24A5BDE21C032D9D747C87CB5 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ADDF6B523ADDB0F24A5BDE21C032D9D747C87CB5 new file mode 100644 index 0000000..e0ec33c Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/ADDF6B523ADDB0F24A5BDE21C032D9D747C87CB5 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE16B2B853EE900A49A0307A6E773804853B49C1 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE16B2B853EE900A49A0307A6E773804853B49C1 new file mode 100644 index 0000000..27316fd Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE16B2B853EE900A49A0307A6E773804853B49C1 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE16B2B853EE900A49A0307A6E773804853B49C1-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE16B2B853EE900A49A0307A6E773804853B49C1-blob new file mode 100644 index 0000000..b3c9154 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE16B2B853EE900A49A0307A6E773804853B49C1-blob @@ -0,0 +1 @@ +[class*=fa-]:before,.dropdown-toggle:after,.categories .dropdown-item:before{font-family:'font awesome 5 free';font-weight:900;font-style:normal}.fab,.far{font-family:inherit!important}.fab[class*=fa-]:before{font-family:"font awesome 5 brands"}.far[class*=fa-]:before,.categories .dropdown-item:before{font-weight:400}.navbar-light .navbar-toggler-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggc3Ryb2tlPSdyZ2JhKDAsMCwwLDEpJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvPjwvc3ZnPg==)}.navbar-dark .navbar-toggler-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggc3Ryb2tlPSdyZ2JhKDI1NSwyNTUsMjU1LDEpJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvPjwvc3ZnPg==)}.navbar-dark .navbar-toggler{background-color:rgba(0,0,0,.2)}body{font:400 1rem/2 'Asap',sans-serif;word-wrap:break-word;background-color:#fafafa}a{color:#000}a:hover{text-decoration:none;color:#263dff}img{max-width:100%}@keyframes tio{from{opacity:0}to{opacity:1}}#tioanime{min-height:100vh;display:flex;flex-direction:column;position:relative}#tioanime>div{flex:1 0 auto;position:relative;z-index:2}#tioanime>header{background-color:#fff;padding:1rem 0;box-shadow:0 0 30px rgba(0,0,0,.05);margin-bottom:2.5rem;position:relative;z-index:3}#tioanime>header .top{padding:1rem 0}#tioanime>header figure{margin-bottom:0}.navbar{background-color:transparent!important;padding:0}.navbar-toggler-icon{width:.9rem}.navbar-toggler{box-shadow:0 5px 15px rgba(0,0,0,.1);border:0;border-radius:50%;transform:scale(1.1)}.menu .navbar-nav .nav-link{color:#000}.menu .navbar-nav li.active .nav-link,.menu .navbar-nav li:hover .nav-link{color:#263dff}.dropdown-toggle:after{content:'\f078';border:0;font-size:.65rem;margin-left:.5rem;height:auto;vertical-align:middle;color:#263dff}.menu .nav-item.dropdown.full{position:static}.menu .nav-item.dropdown.full .dropdown-menu{width:100%;max-height:none}.menu .nav-item.dropdown .dropdown-menu,.menu .nav-item.dropdown .categories,.menu .nav-item.dropdown .popular{padding:0;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;-o-flex-wrap:wrap;flex-wrap:wrap;overflow:auto;max-height:250px}.menu .nav-item.dropdown .dropdown-menu{padding-bottom:.5rem}.menu .nav-item.dropdown .dropdown-menu .dropdown-item{background-color:transparent;padding-left:0;padding-right:1rem;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;text-overflow:ellipsis;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%;border:0;margin:0;font-size:.75rem}.categories .dropdown-item:before{content:'\f07c';margin-right:.5rem;opacity:.5}.categories .dropdown-item:hover:before{font-weight:900;opacity:1}.dropdown-item.active,.dropdown-item:active,.dropdown-item:hover{color:#263dff}.navbar-collapse{min-width:0}.search .form-control,.search label{width:100%;margin-bottom:0}.search .form-control{border-radius:2rem;padding-left:1rem}.form-control{background-color:#fafafa}.form-control:focus{background-color:#fff}.form-icon{position:relative}.form-icon:before{position:absolute;right:.3rem;top:.2rem;width:2rem;height:2rem;line-height:2rem;text-align:center;opacity:.5}.form-icon .form-control{padding-right:2.5rem}.dropdown-menu{border-color:#f5f5f5;margin-top:0}.header{position:relative;margin-bottom:1.5rem}.header .title{display:inline-block;vertical-align:top;color:#000;margin-right:1rem;font-size:1.5rem;padding-top:.2rem}.header .title:before{color:#00ca58;margin-right:1rem}.header .title span{margin-left:.3rem}.thumb{position:relative}.thumb figure{padding-top:150%;position:relative;box-shadow:0 5px 15px rgba(0,0,0,.1)}.thumb figure:before{width:3rem;height:3rem;position:absolute;left:0;top:0;right:0;bottom:0;margin:auto;font-size:3rem;z-index:1;line-height:3rem;color:#fff;display:none;z-index:3}.thumb time,.thumb .time{position:absolute;font-size:.75rem;right:.7rem;bottom:.7rem;line-height:1;color:#fff;z-index:2}.thumb,.thumb figure,.thumb figure img{border-radius:3px}.thumb figure:after{z-index:2;background:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgba(0,0,0,0.5) 100%);position:absolute;left:0;right:0;bottom:-1px;height:50%;content:'';border-radius:3px}.thumb figure img{position:absolute;left:0;top:0;width:100%;height:100%;object-fit:cover;z-index:1}.thumb:hover{background-color:#263dff}.thumb:hover figure:after,.thumb:hover figure img,.thumb:hover time{opacity:.4}.thumb:hover figure:before{display:block}.anime-single .thumb:hover{background-color:transparent!important}.thumb .pop{background-color:#fff;color:#ffd500;width:1.25rem;height:1.25rem;line-height:1.25rem;text-align:center;position:absolute;right:0;top:0;z-index:2;font-size:.75rem;border-radius:0 3px 0 10px;padding-left:2px}.episode,.anime,.episodes,.animes{margin-bottom:1.5rem}.episode .thumb figure{padding-top:56.25%}.episode .title,.anime .title{font-size:.875rem;margin-bottom:0}.animes-inline{white-space:nowrap;overflow:auto;padding:.5rem 0;width:100%}.animes-inline::-webkit-scrollbar{background-color:rgba(38,61,255,.2);border-radius:10px}.animes-inline::-webkit-scrollbar-thumb{background-color:rgba(38,61,255,.5);border-radius:10px}.animes-inline .anime{display:inline-block;vertical-align:top;margin-right:8px}.animes-inline .anime:last-child{margin-right:0}.animes-inline .anime,.sm.anime.sm thumb{margin-bottom:0}.animes-inline .anime.sm{max-width:93px;width:100%}.anime.sm{position:relative}.anime.sm .thumb figure:after{height:100%}.anime.sm .title{position:absolute;left:0;right:0;bottom:.2rem;z-index:2;text-align:center;color:#fff;font-size:.75rem;white-space:normal;padding:.2rem;pointer-events:none}.anime.sm:hover .title{opacity:0}.results-list{max-height:250px;overflow:auto;margin-bottom:1rem}.results-list .anime:last-child{margin-bottom:0}.results.dropdown-menu{min-width:290px;left:auto;right:0;padding:1rem}.anime.xs{min-height:4rem;padding-left:5rem;position:relative;padding-top:.2rem;margin-bottom:1rem}.anime.xs .thumb{width:4rem;position:absolute;left:0;top:0}.anime.xs .thumb figure{padding-top:4rem}.anime.xs .thumb figure:before{transform:scale(.6)}#tioanime>footer{background-color:#263238;text-align:center;padding:2.5rem 0}#tioanime>footer .navbar{margin-bottom:2.5rem;padding-bottom:2.5rem;border-bottom:1px solid #314148}#tioanime>footer .logo{margin-bottom:0;padding-right:1.5rem}.menu-ft,.social-ft{-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center}#tioanime>footer .navbar-nav>li.nav-item{padding:.5rem 1rem;margin-right:0}#tioanime>footer .navbar-nav>li.nav-item>.nav-link{border-bottom:0}.social-ft.navbar-nav>li.nav-item>.nav-link{font-size:1.25rem}.navbar-dark .navbar-nav .nav-link{color:#607d8b}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:#fff}.original-title{color:#263dff}.genres{margin-bottom:.5rem}.genres>.btn{padding:0!important;transition:none;margin-right:.5rem;margin-bottom:.5rem}.genres .btn>.btn{margin:-2px;padding-left:.8rem;padding-right:.8rem;font-size:.75rem}.genres .btn>.btn:hover,.episodes-nav .btn>.btn:hover{background-color:inherit;color:inherit;border-color:inherit}.link-icon{color:#263dff}.anime-single{background-color:#fff;padding:calc(2.5vw + 2.5vh + 2.5rem) 0 2.5rem;margin:-2.5rem 0 2.5rem;box-shadow:0 0 30px rgba(0,0,0,.05);position:relative;z-index:1}.header h3.title{font-size:1.25rem}.header h3.title+.btn{margin-top:0}.anime-single .title{font-size:2rem;color:#000;padding-top:.5rem;margin-bottom:0}.anime-single .title+.genres{margin-top:1rem}.anime-single .thumb figure{box-shadow:none}.anime-single .thumb figure:after{display:none}.anime-single .thumb img{opacity:1!important}.sinopsis{font-size:.875rem;line-height:1.8;margin-bottom:1.5rem;max-height:100px;overflow:auto}.btn>i{margin-right:.5rem}.anime-single .banner{margin-bottom:0}.banner{overflow:hidden;max-width:728px;margin-left:auto;margin-right:auto}.banner.sm{max-width:300px}.banner.lg{max-width:160px}.backdrop,.backdrop:before,.backdrop img{position:absolute;left:0;top:0;width:100%;height:100%;object-fit:cover}.backdrop{height:35%;z-index:-1;background-color:#fff}.backdrop img{opacity:.3}.backdrop:before{background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,1) 100%);content:'';z-index:1}.facebook-comments{margin-bottom:2.5rem}.facebook-comments *:not(script){width:calc(100% + 5px)!important;display:block!important;max-width:none!important}.facebook-comments iframe{margin-left:-8px;margin-right:-8px}.next-episode{position:relative;padding:.8rem 1rem;vertical-align:top;margin-bottom:1rem;font-size:.875rem;line-height:1rem;margin-top:-.5rem}.next-episode:before{margin-right:.5rem;font-size:1rem}.next-episode:after{background-color:currentColor;content:'';position:absolute;left:0;top:0;width:100%;height:100%;z-index:-1;opacity:.1}.next-episode span{font-weight:700;margin-left:.2rem}.episodes-list{margin-bottom:2.5rem;max-height:500px;overflow:auto}.episodes-list>li{border-bottom:1px solid #eceff1}.episodes-list>li>a{padding:.5rem 1rem;width:100%;color:#607d8b;line-height:1.25rem;font-size:.875rem;min-height:3.2rem}.episodes-list>li>a:before{opacity:.3;font-size:1.25rem;margin-right:.7rem}.episodes-list>li>a:hover{background-color:#fff;color:#263dff;box-shadow:0 5px 15px rgba(38,61,255,.1)}.episodes-list>li>a:hover:before{opacity:1}.episodes-list>li>a span{font-weight:700;margin-left:.2rem;white-space:nowrap}.fixed{position:sticky;top:2rem}.sidebar{margin-bottom:2.5rem}.animes-sidebar{margin:0 -.3rem 2.5rem}.animes-sidebar>li{padding-left:.3rem;padding-right:.3rem}.animes-sidebar .anime{margin-bottom:.6rem}.animes-sidebar .anime figure{margin-bottom:0}.anime-single.list{padding:1rem 0 .5rem;margin-top:0;border-radius:.3rem}.anime-single.list .badge{position:absolute;right:1rem;bottom:1rem;z-index:1;font-weight:400}.anime-single.list .original-title{margin-bottom:.5rem}.pagination{margin-bottom:2rem;box-shadow:0 5px 15px rgba(0,0,0,.1)}.page-link{border:0;border-radius:0!important;background-color:#263238;color:#fff;padding:.7rem 1rem;font-size:.875rem}.page-link:hover{background-color:#3f5661;color:#fff}.video{padding-top:56.55%;position:relative}.video iframe{position:absolute;left:0;top:0;width:100%;height:100%}.anime-title{color:#000}.info{background-color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.05);padding:1rem;font-size:.86rem;line-height:1.5;margin-bottom:2.5rem;border-radius:3px}.info p:last-child{margin-bottom:0}#video-options{background-color:#000}.options{padding:1.25rem;background-color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.05)}.options .nav{white-space:nowrap;overflow:auto;display:block;margin-right:1rem}.options li{margin-right:.5rem;display:inline-block}.options li:last-child{margin-right:0}.options .nav-link{text-align:center;line-height:1;padding:.5rem;color:#607d8b;background-color:#eceff1}.options .nav-link.active{box-shadow:0 5px 15px rgba(38,61,255,.5)}.options .nav-link.active span:before{display:inline-block;font-size:.75rem;vertical-align:top;margin-top:.3rem;margin-right:.3rem}.options .nav-link span{text-transform:uppercase;display:block;font-size:.65rem}.options .nav-link span+span{font-size:1.25rem}.options .nav-link span:before{display:none}.episodes-nav>.btn{padding:0;transition:none;margin-right:.5rem;margin-bottom:.5rem}.episodes-nav>.btn>.btn{margin:-2px;font-size:.9rem;padding:.5rem 1rem}.episodes-nav>.btn>.btn:hover{background-color:inherit;color:inherit;border-color:inherit}.episodes-nav>.btn>.btn i{margin:0 .5rem}.episodes-nav>.btn>.btn i:first-child{margin-left:0}.episodes-nav>.btn>.btn i:last-child{margin-right:0}.changeview span:before{margin-right:.5rem}.changeview.on .fa-moon,.changeview:not(.on) .fa-sun{display:none}.btn-download{white-space:nowrap}.table-downloads.table{margin-bottom:.5rem}.modal-header .close{font-size:1rem;margin:-.5rem}.modal-title>i{width:2rem;height:2rem;margin-right:.5rem;font-size:1rem;text-align:center;position:relative;display:inline-block;vertical-align:middle;line-height:2rem;z-index:1}.modal-title>i:after{position:absolute;left:-.25rem;top:-.25rem;content:'';background-color:currentColor;width:2.5rem;height:2.5rem;border-radius:2rem;opacity:.1;z-index:-1}.btn.rounded-pill{padding-left:1rem;padding-right:1rem}.table thead th{text-transform:uppercase;font-size:.8rem;background-color:rgba(0,0,0,.03)}.modal .table-responsive{margin:-1.1rem;width:calc(100% + 2rem)}.table th:first-child,.table td:first-child{text-align:center;padding-left:1rem}.sidebar .categories{margin:0;max-height:300px;overflow:auto}.sidebar .categories>li>a{font-size:.84rem;white-space:nowrap;-ms-text-overflow:ellipsis;text-overflow:ellipsis;overflow:hidden;padding-left:1rem}.contact{max-width:35rem;padding:2rem;background-color:#fff;border-radius:.5rem;box-shadow:0 0 30px rgba(0,0,0,.05)}.ups404{max-width:40rem;text-align:center;padding:4rem 0}.ups404 .fa-ghost{position:relative;line-height:1;margin-top:2rem;display:inline-block;vertical-align:top}.ups404 .fa-ghost:before{color:#263dff;display:inline-block;font-size:calc(4vw + 2vh + 10rem);margin-bottom:2rem}.ups404 .fa-ghost:after{content:"404";font-weight:700;display:block;font-size:5rem;opacity:.2}.ups404 .fa-ghost .fa-times{left:0;top:0;opacity:.4;color:#263dff}.ups404 .fa-ghost .fa-dot-circle{left:1.2rem;top:1.5rem;opacity:.2}.ups404 .fa-ghost .fa-caret-up{left:2.5rem;top:0;transform:rotate(45deg);opacity:.3}.ups404 .fa-ghost>div,.ups404 .fa-ghost>span,.ups404 .fa-ghost i{position:absolute;font-size:1rem}.ups404 .fa-ghost>div{left:-2rem;top:-2rem}.ups404 .fa-ghost>span{right:-4rem;top:3rem;transform:rotate(150deg)}.ups404 .title{display:block;margin-bottom:1.5rem}.ups404 .btn{float:none!important}.request{margin-bottom:4rem;padding:2rem;background-color:#fff;box-shadow:0 0 30px rgba(0,0,0,.05);position:relative;text-align:center;border-radius:5px}.request .description:after{content:'';display:block;background:url(../img/cnt/chibi.png) 50% 50% no-repeat;background-size:contain;height:10rem;margin-bottom:2rem}.alert{line-height:1.5}.alert-warning:before{color:#fcd127;font-size:1.25rem;margin-right:.5rem}.header .title+h2{margin-left:3rem;font-size:1.25rem}.nav-item[class*=fa-]{position:relative}.nav-item[class*=fa-]:before{position:absolute;top:0;bottom:0;height:1.25rem;margin:auto;color:#fcd127;line-height:1.25rem}.nav-item[class*=fa-]>a{font-weight:700;padding-left:1.5rem!important}#program [id*=-hd]{background-color:#fff;margin-bottom:1rem}#program [id*=-hd]>.btn{text-align:left;width:100%;padding:1rem;font-size:1rem;text-decoration:none!important;color:inherit}#program [id*=-hd]>.btn>i{margin-right:0;margin-left:.5rem;color:#263dff;float:right}#program .active [id*=-hd] .btn{background-color:#263dff;color:#fff;border-radius:0;font-weight:700}#program .active [id*=-hd] .btn>i{color:#fff!important}#program .btn[aria-expanded=true]>i{transform:scale(-1)}.episode .time{font-weight:600;font-size:.875rem}.episode .time:before{margin-right:.3rem}.episode.sm .thumb figure{padding-top:42%}.episode.sm .thumb figure:before{transform:scale(.5)}.episode.sm .thumb:hover .time{display:none}.episode.sm .title{margin-bottom:0;white-space:nowrap}.episode.sm .title+span{opacity:.5;font-size:.75rem;display:block}@media(max-width:991px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-left:15px;padding-right:15px}.search{padding-top:.5rem}.menu .nav-item.dropdown .dropdown-menu{border:0}.menu .nav-item.dropdown .dropdown-menu,.menu .nav-item.dropdown .categories,.menu .nav-item.dropdown .popular{display:-webkit-flex;display:-moz-flex;display:-ms-flex;display:-o-flex;display:flex}.navbar-nav>.nav-item>.nav-link,.menu .nav-item.dropdown .dropdown-menu{border-bottom:1px solid #eee}.navbar-nav>.nav-item:last-child>.nav-link,.navbar-nav>.nav-item:last-child .dropdown-menu{border-bottom:0}.results.dropdown-menu{left:0}.animes-sidebar{overflow:auto}.animes-sidebar>li{max-width:7.25rem}.principal .sidebar{order:-1}.episode.sm:after{content:'';display:block;overflow:hidden;clear:both}.episode.sm .thumb{float:left;width:120px;margin-right:1rem}.episode.sm .thumb figure{margin-bottom:0}.episode.sm .title{padding-top:.5rem;white-space:normal}#program>.day [id*=-hd]+div{max-height:350px;overflow:auto;margin-bottom:1rem}}@media(max-width:575px){.anime-single .title{font-size:1.25rem;margin-bottom:.5rem}.anime-single .original-title{font-size:.875rem;margin-bottom:.5rem;line-height:1.2}.anime-single .row{display:block}.anime-single .row>aside:first-child{width:100px;float:left;position:relative}.anime-single .status{font-size:0;position:absolute;left:-.3rem;top:-.3rem;z-index:1;width:2rem;height:2rem;padding:0;line-height:1.9rem;border-radius:2rem}.anime-single .thumb figure{margin-bottom:.5rem}.anime-single .status>i{font-size:.875rem;margin-right:0}.anime-single .sinopsis{clear:both}.genres{line-height:1;white-space:nowrap;max-width:100%;overflow:auto}.genres .btn{font-size:.65rem;margin-right:.2rem;margin-bottom:.5rem}.genres .btn>.btn{padding:0 .5rem}.anime-title{font-size:1.5rem}.episodes-nav>.btn>.btn{padding:1rem 1.5rem}.episodes-nav>.btn>.btn i{margin:0}.episodes-nav>.btn>.btn span,.btn-download span{display:none}.btn-download>i{margin-right:0}}@media(min-width:768px){.menu .nav-item.dropdown .dropdown-menu{padding:.5rem 1rem}.menu .nav-item.dropdown .dropdown-menu .dropdown-item{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%;padding-right:0}.menu .nav-item.dropdown.full .dropdown-menu .dropdown-item{-ms-flex:0 0 33.33333333333333%;flex:0 0 33.33333333333333%;max-width:33.33333333333333%}.menu .nav-item.dropdown .dropdown-menu .dropdown-item{font-size:.84rem}.header .title{font-size:2rem}.anime-single.list{margin-top:5rem;padding:1rem 1rem 1.5rem}.anime-single.list .thumb{margin-top:-3rem}.anime-single.list .thumb figure,.anime-single.list .sinopsis{margin-bottom:0}.header .title+h2{margin-left:3.5rem}}@media(min-width:992px){#tioanime>header .logo{padding-right:1.5rem}#tioanime>header .banner{-ms-flex:0 0 728px;flex:0 0 728px;max-width:728px}header .navbar-expand-lg .navbar-nav .nav-item>a{padding:1.2rem 0}.navbar-expand-lg .navbar-nav .nav-item{margin-right:2rem}.navbar-expand-lg .navbar-nav .nav-link{padding-left:0;padding-right:0}.menu .navbar-nav .dropdown:hover .dropdown-menu{display:block}.menu .nav-item.dropdown.full .dropdown-menu .dropdown-item{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.menu .nav-item.dropdown.full .dropdown-menu{padding-left:0;padding-right:0}.menu .navbar-nav .dropdown:hover .dropdown-menu .container,.menu .nav-item.dropdown .show .categories,.menu .nav-item.dropdown .show .popular{display:-webkit-flex;display:-moz-flex;display:-ms-flex;display:-o-flex;display:flex;padding-left:15px;padding-right:15px}.dropdown-menu{box-shadow:0 0 30px rgba(0,0,0,.05)}.nav-link.dropdown-toggle{position:relative}.menu .navbar-nav .nav-link.dropdown-toggle:before{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyMicgaGVpZ2h0PScxMScgdmlld0JveD0nMCAwIDIyIDExJz48ZyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgtMzY2IC0xNjUpJz48cGF0aCBkPSdNMTEsMTEsMjIsMjJIMFonIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDM2NiAxNTQpJyBmaWxsPScjZWNlZmYxJy8+PHBhdGggZD0nTTEwLDEwLDIwLDIwSDBaJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgzNjcgMTU2KScgZmlsbD0nI2ZmZicvPjwvZz48L3N2Zz4=);position:absolute;width:20px;height:10px;left:1rem;bottom:-1px;z-index:9999}.menu .navbar-nav>li.active:not(.show)>.nav-link.dropdown-toggle:before{background-image:none;width:13px;height:13px;left:0;right:0;bottom:-1.4rem;z-index:1}.menu .navbar-nav>li.active.show>.nav-link.dropdown-toggle:before,.menu .navbar-nav>li:hover>.nav-link.dropdown-toggle:before{background-color:transparent;border:0;margin:0;right:auto;left:1rem}.show>.nav-link.dropdown-toggle:before,.menu .navbar-nav>li:hover>.nav-link.dropdown-toggle:before{content:''}.menu .navbar-nav>li.active>a{position:relative}.menu .navbar-nav>li.active>a:before{background-color:#263dff;width:13px;height:13px;border-radius:7px;content:'';position:absolute;left:0;right:0;bottom:-1.4rem;margin:auto;border:3px solid #fff}.header .btn{float:right;margin-top:.4rem}.principal{-ms-flex:0 0 calc(100% - 300px - 2.5rem);flex:0 0 calc(100% - 300px - 2.5rem);max-width:calc(100% - 300px - 2.5rem)}.sidebar{-ms-flex:0 0 330px;flex:0 0 330px;max-width:330px}.episode-single>.principal{-ms-flex:0 0 calc(100% - 160px - 2.5rem);flex:0 0 calc(100% - 160px - 2.5rem);max-width:calc(100% - 160px - 2.5rem)}.episode-single>.sidebar{-ms-flex:0 0 190px;flex:0 0 190px;max-width:190px}.changeview span:before{display:block;font-size:1rem;margin-right:0}.changeview{position:fixed;right:0;top:0;bottom:0;height:3.5rem;margin:auto;z-index:10;font-size:.65rem;text-transform:uppercase;line-height:1.5;border-radius:.3rem 0 0 .3rem}#menu .search{width:170px}#program{margin-right:-1rem}#program:after{clear:both;display:block;overflow:hidden;content:''}#program>.day{float:left;width:14.28571428571429%}#program [id*=-hd]{position:sticky;top:0;z-index:10;padding-right:1rem;margin-bottom:1rem;pointer-events:none}#program [id*=-hd] .btn{text-align:center;position:relative}#program .active [id*=-hd] .btn:after{width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #263dff;position:absolute;left:0;bottom:-7px;right:0;margin:auto;content:''}#program [id*=-hd] .btn>i{display:none}#program>.day:last-child [id*=-hd]{padding-right:0;margin-right:1rem}#program>.day [id*=-hd]+div{display:block!important;padding-right:1rem}}@media(min-width:1200px){::-webkit-scrollbar{width:10px;height:10px;background:rgba(0,0,0,.1)}::-webkit-scrollbar-thumb{background:#263dff}.container{max-width:1380px}.episodes>li,.animes>li{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.anime-single.list{margin-top:7rem;padding:1rem 1.5rem 2.5rem}.anime-single.list .thumb{margin-top:-5rem}.anime-single.list .sinopsis{max-height:150px}}@media(min-width:1600px){.anime-single.list .sinopsis{max-height:none}.episode-single{max-width:1250px;margin-left:auto;margin-right:auto}.video{padding-top:600px}}.dark{background-color:#18142f}.dark #tioanime>header,.dark .thumb .pop,.dark .dropdown-menu,.dark .episodes-list>li>a:hover,.dark .anime-single,.dark .info,.dark .backdrop,.dark .options,.dark .contact,.dark .request,.dark #program [id*=-hd]{background-color:#282248}.dark .form-control{background-color:#18142f;border-color:#443d68}.dark .form-control:focus{box-shadow:0 0 0 .2rem rgba(65,166,255,.1);color:#c6c2dd}.dark .dropdown-menu{border-color:#443d68}.dark .episodes-list>li{border-color:rgba(68,61,104,.5)}.dark .episodes-list>li>a,.dark .menu .navbar-nav .nav-link,.dark,.dark .navbar-dark .navbar-nav .nav-link,.dark .page-item:not(.active) .page-link{color:#c6c2dd}.dark .episodes-list>li>a:hover{color:#fff}.dark #tioanime>footer,.dark .page-item:not(.active) .page-link:not(:hover){background-color:#1f1a3a}.dark a,.dark .navbar-dark .navbar-nav .nav-link:hover,.dark .header .title,.dark .anime-title,.dark .anime-single .title{color:#fff}.dark .episodes-list>li>a:hover:before,.dark a:not(.btn):hover,.original-title,.dark .menu .navbar-nav li.active .nav-link,.dark .menu .navbar-nav li:hover .nav-link,.dark .dropdown-toggle:after,.dark .link-icon,.dark .ups404 .fa-ghost:before,.dark .ups404 .fa-ghost .fa-times{color:#41a6ff}.dark::-webkit-scrollbar-thumb,.dark ::-webkit-scrollbar-thumb{background:#41a6ff}.dark .btn-primary,.dark .badge-primary,.dark #program .active [id*=-hd] .btn{background-color:#41a6ff;border-color:#41a6ff}.dark #program .active [id*=-hd] .btn:after{border-top-color:#41a6ff}.dark .thumb:hover{background-color:#41a6ff}.dark #program [id*=-hd]>.btn>i{color:#41a6ff}.dark .nav-pills .nav-link.active,.dark .nav-pills .show>.nav-link{background-color:#41a6ff;color:#fff}.dark .options .nav-link.active{box-shadow:0 5px 15px rgba(65,166,255,.5)}.dark .page-item.active .page-link{background-color:#41a6ff;border-color:#41a6ff;color:#fff}.dark .page-link:hover{background-color:#443d68}.dark .btn-primary:hover,.dark .btn-primary:not(:disabled):not(.disabled):active,.dark .btn-primary:not(:disabled):not(.disabled).active,.dark .show>.btn-primary.dropdown-toggle{background-color:#207ed1;border-color:#207ed1}.dark .btn-primary:focus,.dark .btn-primary.focus{-webkit-box-shadow:0 0 0 .2rem rgba(65,166,255,.5);box-shadow:0 0 0 .2rem rgba(65,166,255,.5)}.dark .btn-light,.dark .options .nav-link{color:#c6c2dd;background-color:#443d68;border-color:#443d68}.dark .btn-light:hover,.dark .btn-light:not(:disabled):not(.disabled):active,.dark .btn-light:not(:disabled):not(.disabled).active,.dark .show>.btn-light.dropdown-toggle,.dark .options .nav-link:hover{color:#fff;background-color:#383158;border-color:#383158}.dark .btn-light:focus,.dark .btn-light.focus{-webkit-box-shadow:0 0 0 .2rem rgba(68,61,104,.5);box-shadow:0 0 0 .2rem rgba(68,61,104,.5)}.dark .backdrop:before{background:linear-gradient(to bottom,rgba(40,34,72,0) 0%,rgba(40,34,72,1) 100%)}.dark .header .title:before{color:#37d1a2}.dark .text-success{color:#37d1a2!important}.dark #tioanime>footer .navbar{border-color:rgba(198,194,221,.15)}.dark .navbar-light .navbar-toggler-icon,.dark .navbar-dark .navbar-toggler-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggc3Ryb2tlPSdyZ2JhKDI1NSwyNTUsMjU1LDEpJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvPjwvc3ZnPg==)}.dark .modal-header{border-color:rgba(198,194,221,.15)}.dark .navbar-toggler{background-color:rgba(0,0,0,.5)}.dark .modal-content{background-color:#282248}.dark .close{color:#fff;text-shadow:none;opacity:1}.dark .table thead th{background-color:rgba(0,0,0,.2)}.dark .dropdown-item:hover,.dark .dropdown-item:focus{background-color:#282248}@media(max-width:991px){.dark .navbar-nav>.nav-item>.nav-link,.dark .menu .nav-item.dropdown .dropdown-menu{border-color:rgba(198,194,221,.15)}}@media(min-width:992px){.dark .menu .navbar-nav>li.active>a:before{border-color:#18142f}.dark .menu .navbar-nav .nav-link.dropdown-toggle:before{background-image:url(data:image/svg+xml;base64,CjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjInIGhlaWdodD0nMTEnIHZpZXdCb3g9JzAgMCAyMiAxMSc+PGcgdHJhbnNmb3JtPSd0cmFuc2xhdGUoLTE1ODMgLTE2NSknPjxwYXRoIGQ9J00xMSwxMSwyMiwyMkgwWicgdHJhbnNmb3JtPSd0cmFuc2xhdGUoMTU4MyAxNTQpJyBmaWxsPScjNDQzZDY4Jy8+PHBhdGggZD0nTTEwLDEwLDIwLDIwSDBaJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgxNTg0IDE1NiknIGZpbGw9JyMyODIyNDgnLz48L2c+PC9zdmc+)}}.latest .header .title{font-size:1.25rem}.latest{overflow:auto;margin-bottom:2rem}.latest>section{min-width:400px;margin-bottom:1rem}.movies .header .title:before{color:#dc3545}.ovas .header .title:before{color:#fd7e14}.onas .header .title:before{color:#6f42c1}.anime.media{position:relative}.anime.media .thumb{width:100px;margin-right:20px}.anime.media .thumb figure{margin-bottom:0}.anime.media .description{line-height:1.25rem;font-size:.875rem}.anime.media .title{margin-bottom:.5rem}.anime.media .genres{margin-bottom:0}.anime.media .genres>.btn{margin-bottom:.3rem;position:relative;z-index:2}.thumb [class*=anime-type-]{position:absolute;left:.3rem;bottom:.3rem;z-index:2;color:#fff}[class*=anime-type-]{line-height:1.25rem;font-size:.75rem}[class*=anime-type-]:before{margin-right:.5rem;content:'';height:1.25rem;width:.2rem;display:inline-block;vertical-align:middle}.anime-type-ova:before{background-color:var(--orange)}.anime-type-ova{color:var(--orange)}.anime-type-peli:before{background-color:var(--danger)}.anime-type-peli{color:var(--danger)}.anime-type-ona:before{background-color:var(--purple)}.anime-type-ona{color:var(--purple)}.original-title{margin-bottom:0}.meta>*{display:inline-block;vertical-align:top;margin-right:.5rem;margin-bottom:.3rem}.year{line-height:1.1rem;border:2px solid var(--light);border-radius:.2rem;font-size:.75rem;padding:0 .3rem}.season{line-height:1.25rem;font-size:.75rem}.season>span:before{font-size:1rem;margin:0 .3rem 0 .2rem;line-height:1;bottom:-.1rem;position:relative}.season .spring{color:var(--warning)}.season .summer{color:var(--orange)}.season .fall{color:#7b3c07}.season .winter{color:var(--info)}.episodes-list>li>a{padding:1rem}.episodes-list>li>a:before{order:3;font-size:2rem}.episodes-list>li>a:hover{box-shadow:0 0 2rem rgba(38,60,255,.1)}.episodes-list>li>a div>span{font-weight:300;margin-left:0;font-size:.75rem;color:#607d8b}.episodes-list figure{margin-bottom:0;max-width:8.75rem;margin-right:1rem}.episodes-list p{margin-bottom:0;color:var(--dark)}.info-episode{padding:1rem 1rem 1rem 5rem;position:relative;min-height:5rem;font-size:.75rem;line-height:1.25rem;margin-bottom:2rem;box-shadow:0 0 2rem rgba(38,60,255,.1);background-color:#fff}.info-episode:before{color:var(--primary);font-size:3rem;position:absolute;top:1.5rem;left:1rem;opacity:.2;line-height:1}.info-episode p{margin-bottom:0;max-height:5rem;overflow:auto}.epi-stats{background-color:#fff;border-radius:.2rem;margin-bottom:1rem}.epi-stats>div{padding:.5rem 1rem;line-height:1.5rem}.epi-stats,.epi-stats .votes{box-shadow:0 0 2rem rgba(0,0,0,.1)}.epi-stats .follow>span{font-size:.75rem;display:block}.epi-stats .follow ul{padding:0;margin:0;list-style:none}.epi-stats .follow ul>li{display:inline-block;vertical-align:top;margin-right:.5rem;font-size:1.1rem}.epi-stats .follow ul>li:last-child{margin-right:0}.epi-stats .follow a.fa-twitter{color:#55acee}.epi-stats .follow a.fa-facebook-f{color:#1774eb}.epi-stats .follow a.fa-youtube{color:#cd201f}.epi-stats .votes{position:relative}.epi-stats .votes>span{text-align:right;display:block}.epi-stats .votes .num{font-weight:700;color:var(--dark);font-size:1.25rem}.epi-stats .votes .num:before{float:right;margin-left:.5rem;color:var(--warning)}.epi-stats .votes .mal{font-size:.75rem}.epi-stats .votes .mal span{font-weight:700}.epi-stats .votes .total{position:absolute;font-size:.65rem;line-height:1rem;position:absolute;bottom:-1.5rem;right:0}.epi-stats .votes .total span{font-weight:700}.anime.sm.media .thumb{width:80px;margin-right:1rem}.anime.sm.media .thumb figure:before{transform:scale(.5)}.anime.sm.media .thumb figure{padding-top:100%}.anime.sm.media .thumb:hover [class*=anime-type-]{opacity:0}.anime.sm.media .title{color:var(--dark);font-size:.875rem;position:static;text-align:left;margin-bottom:.3rem}.anime.sm.media:hover .title{opacity:1;color:var(--primary)}.vote-num{line-height:1.25rem;font-size:.75rem;font-weight:700}.vote-num:before{color:var(--warning);margin-right:.3rem}.w-history ul{position:relative}.w-history ul:after{content:'';position:absolute;right:52px;top:0;width:2px;height:100%;background-color:var(--primary);opacity:.1}.w-history .media-body{padding-right:55px}.watching{height:1rem;position:absolute;width:52px;line-height:1rem;top:0;bottom:0;margin:auto;font-size:.75rem;color:var(--primary);right:0;white-space:nowrap}.watching:before{width:12px;height:12px;content:'';display:inline-block;vertical-align:middle;background:var(--primary);border-radius:6px;margin-right:5px;margin-left:-6px}.w-related .header .title:before{color:var(--purple)}.options.top{box-shadow:none;background-color:transparent;padding:0}.anime-title{font-size:1rem;text-align:left!important}.options .episodes-nav>.btn{margin-bottom:0}.an-year{padding-top:1.5rem}.rs-container{font-family:Arial,Helvetica,sans-serif;height:15px;position:relative}.rs-container .rs-bg,.rs-container .rs-selected{height:5px;left:0;position:absolute;top:5px;width:100%;border-radius:5px}.rs-container .rs-selected{transition:all .2s linear;width:0}.rs-container.disabled .rs-selected{background-color:#ccc;border-color:#bbb}.rs-container .rs-pointer{border:2px solid #fff;border-radius:20px;cursor:pointer;height:20px;left:-10px;position:absolute;top:-5px;transition:all .2s linear;width:20px}.rs-container.disabled .rs-pointer{cursor:default}.rs-container.sliding .rs-pointer,.rs-container.sliding .rs-selected{transition:none}.rs-container .rs-scale{left:0;position:absolute;top:5px;white-space:nowrap}.rs-container .rs-scale span{float:left;position:relative}.rs-container .rs-scale span::before{background-color:#ededed;content:"";height:8px;left:0;position:absolute;top:10px;width:1px}.rs-container.rs-noscale span::before{display:none}.rs-container .rs-scale span:last-child{margin-left:-1px;width:0}span:first-child ins{position:relative;left:.7rem}span:last-child ins{position:relative;right:.5rem}.rs-container .rs-scale span ins{display:inline-block;font-size:10px;margin-top:20px;text-decoration:none}.rs-container.disabled .rs-scale span ins{color:#999}.rs-tooltip{width:auto;min-width:30px;height:16px;line-height:16px;border-radius:3px;position:absolute;transform:translate(-50%,-23px);left:8px;text-align:center;font-size:10px;padding:0 3x;color:#fff}.rs-tooltip:before{width:0;content:'';position:absolute;left:0;right:0;bottom:-4px;height:0;margin:auto;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid currentColor}#rngyr{visibility:hidden}.search-choice-close:before{font-family:'font awesome 5 free';font-weight:700;font-style:normal}.filter-bx{background-color:#fff;border-radius:.3rem;margin-bottom:2rem;box-shadow:0 .5rem 1rem rgba(0,0,0,.05);padding:1rem}.filter-bx .form-group>label{text-transform:uppercase;font-size:.75rem}.filter-bx select{font-size:.875rem}.rs-selected,.rs-tooltip,.rs-pointer{background-color:var(--primary)}.rs-tooltip:before{border-top-color:var(--primary)}.rs-bg{background-color:#f1f2f6}.chosen-container{position:relative;height:auto;min-height:calc(2.25rem + 2px);padding:4px .5rem;line-height:0;font-size:0;width:100%!important}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;width:100%}.chosen-results .dropdown-item{cursor:pointer;line-height:1.5rem}.chosen-container .dropdown-item em{font-style:normal}.chosen-container-active .dropdown-menu{display:block;max-height:205px;overflow:auto;width:100%;left:-.5rem}.chosen-search-input{border:0;padding:0;outline:0;font:inherit;color:inherit;height:1.6rem;background-color:transparent;width:100%;font-size:.875rem}.chosen-choices{margin-bottom:0}.dropdown-item.result-selected{pointer-events:none;opacity:.5}.chosen-container-multi .chosen-choices li.search-choice,.chosen-container-multi .chosen-choices li.search-field{max-width:100%;display:inline-block;vertical-align:top;margin:3px 7px 3px 0;padding:.1rem .5rem;border-radius:3px;font-size:.875rem;background-color:var(--light)}.dropdown-item:active{color:#fff!important}.chosen-container-multi .chosen-choices li.search-field{background-color:transparent}.chosen-container-multi .chosen-choices li.search-field{padding:0}.chosen-container-multi .chosen-choices li.search-choice{font-size:.75rem;line-height:1.5rem}.search-choice-close:before{content:'\f00d';display:inline-block;vertical-align:top;padding:0 .7rem 0 .4rem;margin-right:-.7rem;cursor:pointer}.dropdown-item.no-results{pointer-events:none}.dropdown-item.no-results span{font-weight:700}.no-results{font-size:.75rem}.rs-container .rs-scale span ins{display:none}@media(max-width:991px){.btn-download{padding:.3rem 1rem}.btn-download i{margin-right:0}.btn-download span{display:none}}@media(max-width:768px){.episodes-nav>.btn>.btn{padding:1rem 1.3rem}.btn-download{padding:.9rem 1rem}.episodes-nav>.btn>.btn i{margin:0}.episodes-nav>.btn>.btn span{display:none}}@media(min-width:992px){.episode-single>.principal{-ms-flex:0 0 calc(100% - 300px - 2.5rem);flex:0 0 calc(100% - 300px - 2.5rem);max-width:calc(100% - 300px - 2.5rem)}.episode-single>.sidebar{-ms-flex:0 0 330px;flex:0 0 330px;max-width:330px}aside.principal{max-width:none}.filters-cont>aside{-ms-flex:0 0 250px;flex:0 0 250px;max-width:250px}.filters-cont>main{-ms-flex:0 0 calc(100% - 250px);flex:0 0 calc(100% - 250px);max-width:calc(100% - 250px)}}@media(min-width:992px) and (max-width:1199px){.episodes-nav>.btn>.btn i{margin:0}.episodes-nav>.btn>.btn span{display:none}}@media(min-width:1200px){.anime-single .title{padding-right:14rem}.epi-stats{position:absolute;right:1rem;top:0}}@media(min-width:1600px){.episode-single{max-width:none;margin-left:-15px;margin-right:-15px}}.dark .year{border-color:rgba(255,255,255,.1)}.dark .episodes-list p{margin-bottom:0;color:var(--light)}.dark .info-episode{background-color:#282248}.dark .info-episode:before{color:#41a6ff;opacity:.5}.dark .epi-stats{background-color:#443d68}.dark .epi-stats .num,.dark .epi-stats .follow a.fab{color:var(--light)}.dark .epi-stats .follow a.fab{opacity:.5}.dark .epi-stats .follow a.fab:hover{opacity:1}.dark .anime.sm.media .title{color:var(--light)}.dark .anime.sm.media:hover .title,.dark .watching{color:#41a6ff}.dark .w-history ul:after,.dark .watching:before{background-color:#41a6ff}.dark .filter-bx{background-color:#1f1a3a}.dark .chosen-container-multi .chosen-choices li.search-choice{background-color:#443d68;color:#fff}.dark .rs-bg{background-color:#443d68}.dark .rs-container .rs-scale span::before{opacity:.2}.dark .rs-container .rs-pointer{border-color:#1f1a3a}.dark .chosen-results .dropdown-item{color:#fff}.user-box .row{margin-left:-.5rem;margin-right:-.5rem}.user-box .row .col{padding-left:.5rem;padding-right:.5rem}.modal-user .btn-lg{font-size:1rem}.login-text .btn{background-color:transparent!important;vertical-align:top;border:0;margin-top:-2px}.btn.btn-recovery{background-color:transparent!important;border:0}.btn.btn-showpass{position:absolute;right:0;bottom:0;height:3rem;background-color:transparent!important;border:0;opacity:.5}.btn.btn-showpass:hover{opacity:1}@media(max-width:1200px){.container{max-width:none}}@media(min-width:992px){.btn-login{border-radius:50%}}.x2dr9{position:absolute;left:0;top:0;right:0;bottom:0;background-color:#2c2c2c;z-index:10;display:flex;justify-content:center;align-items:center;text-align:center;color:#fff;font-size:.875rem;padding:1rem;overflow:hidden}.x2dr9>div{background-color:rgba(0,0,0,.5);padding:1.5rem;max-height:100%;overflow:auto;border-radius:1rem;max-width:370px;box-shadow:0 0 64px rgba(0,0,0,.5);position:relative;z-index:1}.x58w7e{display:block;font-size:64px;line-height:64px;margin-bottom:10px;opacity:.2}.x2dr9 .btn{letter-spacing:normal;font-size:.75rem}.x2dr9 .btn.btn-link{padding:0 1rem;color:#fff;text-decoration:underline}.x2dr9 p{margin-bottom:0}.x2dr9 p:first-child{margin-bottom:1rem}.x2dr9 p:last-child{margin-top:.5rem} \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE4F8A2A33496E9B3A8CC83D148BCBCEB537D090 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE4F8A2A33496E9B3A8CC83D148BCBCEB537D090 new file mode 100644 index 0000000..bcaff69 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE4F8A2A33496E9B3A8CC83D148BCBCEB537D090 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE4F8A2A33496E9B3A8CC83D148BCBCEB537D090-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE4F8A2A33496E9B3A8CC83D148BCBCEB537D090-blob new file mode 100644 index 0000000..0e6bc79 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AE4F8A2A33496E9B3A8CC83D148BCBCEB537D090-blob @@ -0,0 +1,1685 @@ +/* Bundle Includes: + * js/ui/passwordReminderDialog.js + * js/metatags.js + * js/vendor/verge.js + */ + +(function(scope) { + "use strict"; + + var DEBUG = localStorage.debugPasswordReminderDialog || false; + + // all values are in seconds. + var DAY = 86400; + var SHOW_AFTER_LASTLOGIN = 14 * DAY; + var SHOW_AFTER_LASTSKIP = 90 * DAY; + // var SHOW_AFTER_LASTSKIP_LOGOUT = 30 * DAY; + var SHOW_AFTER_ACCOUNT_AGE = 7 * DAY; + var SHOW_AFTER_LASTSUCCESS = 90 * DAY; + var RECHECK_INTERVAL = 15 * 60; + + if (DEBUG) { + SHOW_AFTER_LASTLOGIN = 15; + SHOW_AFTER_LASTSKIP = 30; + // SHOW_AFTER_LASTSKIP_LOGOUT = 5; + SHOW_AFTER_LASTSUCCESS = 45; + SHOW_AFTER_ACCOUNT_AGE = DAY; + RECHECK_INTERVAL = 15; + } + + /** bindable events **/ + var MouseDownEvent = 'mousedown.prd'; + + var PasswordReminderAttribute = function(dialog, changedCb, str) { + var self = this; + self.dialog = dialog; + self._queuedSetPropOps = []; + + if (changedCb) { + this.changedCb = changedCb; + } + PasswordReminderAttribute.PROPERTIES.forEach(function(prop) { + self["_" + prop] = 0; + + Object.defineProperty(self, prop, { + get: function() { return self["_" + prop]; }, + set: function(newValue) { + if (!self.loading) { + self._queuedSetPropOps.push([prop, newValue]); + } + else if (self.loading && self.loading.state() === 'pending') { + self.loading.always(function() { + self["_" + prop] = newValue; + self.hasChanged(prop); + }); + } + else { + self["_" + prop] = newValue; + self.hasChanged(prop); + } + }, + enumerable: true, + configurable: true + }); + }); + + + if (str) { + self.mergeFromString(str); + } + }; + + PasswordReminderAttribute.prototype.mergeFromString = function(str) { + var self = this; + + var vals = str.split(":"); + var wasMerged = false; + PasswordReminderAttribute.PROPERTIES.forEach(function(prop, index) { + var val = typeof vals[index] !== 'undefined' ? parseInt(vals[index]) : 0; + + if (Number.isNaN(val)) { + val = 0; + } + + if (self["_" + prop] !== val) { + self["_" + prop] = val; + wasMerged = true; + } + }); + if (wasMerged) { + self.hasBeenMerged(); + } + }; + + PasswordReminderAttribute.prototype.hasChanged = function(prop) { + // Update ui? + if (this.changedCb) { + this.changedCb(prop); + } + + // Save via mega.attr + this.savingPromise = this.save(); + + var self = this; + self.savingPromise.always(function() { + delete self.savingPromise; + }); + }; + + PasswordReminderAttribute.prototype.hasBeenMerged = function() { + // update ui? + if (this.changedCb) { + this.changedCb(); + } + }; + + PasswordReminderAttribute.prototype.toString = function() { + var self = this; + var vals = []; + PasswordReminderAttribute.PROPERTIES.forEach(function(prop) { + vals.push(self["_" + prop]); + }); + return vals.join(":"); + }; + + PasswordReminderAttribute.prototype.save = function() { + var proxyPromise = new MegaPromise(); + var self = this; + + delay('pra_save', function() { + proxyPromise.linkDoneAndFailTo( + mega.attr.set( + "prd", + self.toString(), + -2, + true + ) + ); + }, 500); + + return proxyPromise; + }; + + PasswordReminderAttribute.prototype.loadFromAttribute = function() { + var self = this; + + if (self.loading) { + return; + } + + self.loading = mega.attr.get(u_handle, 'prd', -2, true) + .done(function (r) { + if (isString(r)) { + self.dialog._initFromString(r); + } + else { + self.dialog._initFromString(""); + } + }) + .fail(function (e) { + if (e === ENOENT) { + self.dialog._initFromString(""); + } + }) + .always(function() { + if (self._queuedSetPropOps.length > 0) { + self._queuedSetPropOps.forEach(function(op) { + self[op[0]] = op[1]; + }); + self._queuedSetPropOps = []; + } + if (self.changedCb) { + self.changedCb(); + } + }); + }; + + PasswordReminderAttribute.prototype.attributeUpdatedViaAp = function() { + if (this.loading) { + this.loading.reject(); + this.loading = false; + } + + this.loadFromAttribute(); + }; + + /** + * Those properties are intentionally stored in an array, they are ordered and that order is important for when + * saving/retrieving data from mega.attr.*. + * In case a new key is added, please append it at the end of the list. + * Never remove a key from the array above. + * + * @type {Array} + */ + PasswordReminderAttribute.PROPERTIES = [ + 'lastSuccess', + 'lastSkipped', + 'masterKeyExported', + 'dontShowAgain', + 'lastLogin' + ]; + + + + var PasswordReminderDialog = function() { + var self = this; + self.isLogout = false; + self.passwordReminderAttribute = new PasswordReminderAttribute(self, function(prop) { + self.recheck(prop !== "lastSuccess" && prop !== "dontShowAgain" ? true : false); + }); + }; + + PasswordReminderDialog.prototype.bindEvents = function() { + var self = this; + + $(this.dialog.querySelectorAll(is_mobile + ? '.button-prd-confirm, .button-prd-skip, .change-password-button, .button-prd-backup' + : 'button.mega-button' + )).rebind('click.prd', function(e) { + self.onButtonClicked(this, e); + }); + + $(self.passwordField).rebind('keypress.prd', function(e) { + if (!self.dialog) { + console.warn('This event should no longer be reached...'); + return; + } + if (e.which === 13 || e.keyCode === 13) { + $(self.dialog.querySelector('.button-prd-confirm')).triggerHandler('click'); + return false; + } + }); + + $(self.dialog.querySelectorAll('.fm-dialog-close, button.js-close')).rebind('click.prd', () => { + self.dismiss(); + return false; + }); + + // Handle forgot password button. + $(self.dialog.querySelector('.forgot-password')).rebind('click.prd', function() { + self.onChangePassClicked(); + return false; + }); + + uiCheckboxes( + $(this.dialog.querySelector(is_mobile ? '.content-cell' : 'aside')), + undefined, + function(newState) { + if (newState === true) { + self.passwordReminderAttribute.dontShowAgain = 1; + } + else { + self.passwordReminderAttribute.dontShowAgain = 0; + } + }, + self.passwordReminderAttribute.dontShowAgain === 1 + ); + + $('.pass-visible', this.dialog).rebind('click.togglePassV', function() { + + if (this.classList.contains('icon-eye-reveal')) { + + self.passwordField.type = 'text'; + if (self.passwordField.style.webkitTextSecurity) { + self.passwordField.style.webkitTextSecurity = 'none'; + } + this.classList.remove('icon-eye-reveal'); + this.classList.add('icon-eye-hidden'); + } + else { + self.passwordField.type = 'password'; + if (self.passwordField.style.webkitTextSecurity) { + self.passwordField.style.webkitTextSecurity = 'disc'; + } + this.classList.add('icon-eye-reveal'); + this.classList.remove('icon-eye-hidden'); + } + }); + }; + + /** + * Dismiss the dialog, rejecting the action promise and hide from view. + * @return {false} + */ + PasswordReminderDialog.prototype.dismiss = function() { + if (self._dialogActionPromise && self._dialogActionPromise.state() === 'pending') { + self._dialogActionPromise.reject(); + } + this.hide(); + }; + + PasswordReminderDialog.prototype.onButtonClicked = function(element, evt) { + if (element.classList.contains('button-prd-confirm')) { + this.onConfirmClicked(element, evt); + } + else if (element.classList.contains('button-prd-skip')) { + this.onSkipClicked(element, evt); + } + else if (element.classList.contains('button-prd-backup')) { + this.onBackupClicked(element, evt); + } + else if (element.classList.contains('change-pass')) { + this.onChangePassClicked(element, evt); + } + }; + + PasswordReminderDialog.prototype.onConfirmClicked = function(element, evt) { + + var enteredPassword = this.passwordField.value; + var self = this; + + this.resetUI(); + + // Derive the keys from the password + security.getDerivedEncryptionKey(enteredPassword) + .then(function(derivedKey) { + self.completeOnConfirmClicked(derivedKey); + }) + .catch(function(ex) { + console.warn(ex); + self.completeOnConfirmClicked(''); + }); + }; + + PasswordReminderDialog.prototype.completeOnConfirmClicked = function(derivedEncryptionKeyArray32) { + + if (checkMyPassword(derivedEncryptionKeyArray32)) { + if (this.correctLabel) { + this.correctLabel.classList.remove('hidden'); + } + this.passwordReminderAttribute.lastSuccess = unixtime(); + + var skipButtonSpan = this.dialog.querySelector('.button-prd-skip span'); + if (skipButtonSpan) { + skipButtonSpan.innerText = l[967]; + this.succeeded = true; + } + } + else { + if (this.dialog) { + this.dialog.classList.add('wrong'); + } + if (this.wrongLabel) { + this.wrongLabel.classList.remove('hidden'); + } + if (this.correctLabel) { + this.correctLabel.classList.add('hidden'); + } + if (this.passwordField) { + this.passwordField.value = ""; + $(this.passwordField).focus(); + } + + if (is_mobile) { + this.exportButton.classList.remove('green-button'); + this.exportButton.classList.add('red-button'); + } + } + }; + + PasswordReminderDialog.prototype.onSkipClicked = function(element, evt) { + if (!this.succeeded) { + this.passwordReminderAttribute.lastSkipped = unixtime(); + } + else { + this.hideIcon(); + } + if (this.passwordField) { + this.passwordField.classList.add('hidden'); + } + + this.hide(); + delete $.dialog; + + this.onLogoutDialogUserAction(); + }; + + PasswordReminderDialog.prototype.onLogoutDialogUserAction = function() { + var self = this; + + if (self.passwordReminderAttribute.savingPromise) { + if (self._dialogActionPromise && self._dialogActionPromise.state() === 'pending') { + loadingDialog.show(); + self._dialogActionPromise.always(function() { + loadingDialog.hide(); + }); + } + self.passwordReminderAttribute.savingPromise.always(function() { + if (self._dialogActionPromise && self._dialogActionPromise.state() === 'pending') { + self._dialogActionPromise.resolve(); + } + }); + } + else { + if (self._dialogActionPromise && self._dialogActionPromise.state() === 'pending') { + self._dialogActionPromise.resolve(); + } + } + }; + + PasswordReminderDialog.prototype.onKeyExported = function() { + this.passwordReminderAttribute.masterKeyExported = 1; + }; + + PasswordReminderDialog.prototype.onBackupClicked = function(element, evt) { + this.hide(); + + if (this._dialogActionPromise && this._dialogActionPromise.state() === 'pending') { + this._dialogActionPromise.reject(); + } + + if (this.passwordField) { + // clear the password field, so that if it was filled in the dialog would hide + this.passwordField.value = ""; + } + + delete $.dialog; + + loadSubPage('keybackup'); + }; + + PasswordReminderDialog.prototype.onChangePassClicked = function(element, evt) { + this.hide(); + + if (this._dialogActionPromise && this._dialogActionPromise.state() === 'pending') { + this._dialogActionPromise.reject(); + } + + if (this.passwordField) { + // clear the password field, so that if it was filled in the dialog would hide + this.passwordField.value = ""; + } + + delete $.dialog; + + loadSubPage(is_mobile ? '/fm/account/email-and-pass' : '/fm/account/security'); + }; + + PasswordReminderDialog.prototype.init = function() { + var self = this; + + if (!self.initialised) { + self.initialised = true; + } + + if (!self.passwordReminderAttribute.loading) { + self.passwordReminderAttribute.loadFromAttribute(); + } + else { + self.recheck(); + } + }; + + PasswordReminderDialog.prototype.onTopmenuReinit = function () { + if (this.topIcon && !document.body.contains(this.topIcon)) { + // reinit if the this.topIcon is detached from the DOM. + if (this.isShown) { + this.hide(); + } + this.initialised = false; + this.topIcon = null; + this.dialog = null; + this.wrongLabel = null; + this.correctLabel = null; + } + this.prepare(); + }; + + /** + * Prepare the PRD. + * @returns {void} + */ + PasswordReminderDialog.prototype.prepare = function() { + if (this.initialised) { + this.resetUI(); + } + else { + this.init(); + } + }; + + PasswordReminderDialog.prototype._initFromString = function(str) { + var self = this; + + self.passwordReminderAttribute.mergeFromString(str); + + if (self.recheckInterval) { + clearInterval(self.recheckInterval); + } + + if (!self.passwordReminderAttribute.dontShowAgain) { + self.recheckInterval = setInterval(function () { + self.recheck(); + }, RECHECK_INTERVAL * 1000); + + self.recheck(); + } + }; + + PasswordReminderDialog.prototype.recheck = function(hideIfShown) { + var self = this; + if (!u_handle) { + // user is in the middle of a logout... + return; + } + + // skip any re-checks in case this is the 'cancel' page + if (window.location.toString().indexOf("/cancel") > -1) { + return; + } + + + // console.error([ + // "checks", + // self.passwordReminderAttribute.toString(), + // !self.passwordReminderAttribute.masterKeyExported, + // !self.passwordReminderAttribute.dontShowAgain, + // unixtime() - u_attr.since > SHOW_AFTER_ACCOUNT_AGE, + // unixtime() - self.passwordReminderAttribute.lastSuccess > SHOW_AFTER_LASTSUCCESS, + // unixtime() - self.passwordReminderAttribute.lastLogin > SHOW_AFTER_LASTLOGIN + // ]); + + + // account is older then > SHOW_AFTER_ACCOUNT_AGE and lastLogin > SHOW_AFTER_LASTLOGIN + if ( + u_type === 3 && + !self.passwordReminderAttribute.masterKeyExported && + !self.passwordReminderAttribute.dontShowAgain && + unixtime() - u_attr.since > SHOW_AFTER_ACCOUNT_AGE && + unixtime() - self.passwordReminderAttribute.lastSuccess > SHOW_AFTER_LASTSUCCESS && + unixtime() - self.passwordReminderAttribute.lastLogin > SHOW_AFTER_LASTLOGIN + ) { + // skip recheck in case: + // - there is no top-icon, i.e. we are on a custom page + // - there is a visible .dropdown + // - the user had a textarea, input or select field focused + // - there is a visible/active dialog + var skipShowingDialog = !self.showIcon() + || $( + 'textarea:focus, input:focus, select:focus, .dropdown:visible:first, .mega-dialog:visible:first' + ).length > 0; + + if ( + !skipShowingDialog && + is_fm() && + !pfid && + ( + !self.passwordReminderAttribute.lastSkipped || + unixtime() - self.passwordReminderAttribute.lastSkipped > SHOW_AFTER_LASTSKIP + ) + ) { + self.isLogout = false; + self.show(); + } + else { + if (hideIfShown && (!self.passwordField || self.passwordField.value === "")) { + self.hide(); + } + } + } + else { + // only hide if the passwordField was not just entered with some value. + if (hideIfShown && (!self.passwordField || self.passwordField.value === "")) { + self.hideIcon(); + if (self.isShown) { + self.hide(); + } + } + } + }; + + PasswordReminderDialog.prototype.topIconClicked = function() { + this[this.isShown ? 'hideDialog' : 'showDialog'](); + }; + + PasswordReminderDialog.prototype.showIcon = function() { + if (!this.topIcon || this.topIcon.classList.contains('hidden') || !document.body.contains(this.topIcon)) { + // because, we have plenty of top menus, that may not be visible/active + this.topIcon = $('.js-pass-reminder', '.top-head')[0]; + if (this.topIcon) { + this.topIcon.classList.remove('hidden'); + $(this.topIcon).rebind('click.prd', this.topIconClicked.bind(this)); + } + } + return !!this.topIcon; + }; + + PasswordReminderDialog.prototype._initInternals = function() { + this.dialog = document.querySelector(is_mobile + ? '.mobile.password-reminder-overlay' + : '.mega-dialog.pass-reminder' + ); + assert(this.dialog, 'this.dialog not found'); + this.passwordField = this.dialog.querySelector('input#test-pass'); + $(this.passwordField).rebind('focus.hack', function() { + if (this.type === 'password') { + if (ua.details.browser === "Chrome") { + $(this).attr('style', '-webkit-text-security: disc;'); + } + else { + $(this).attr('type', 'password'); + } + } + $(this).removeAttr('readonly'); + $(this).attr('autocomplete', 'section-off' + rand_range(1, 123244) + ' off disabled nope no none'); + }); + this.passwordField.classList.remove('hidden'); + this.passwordField.value = ""; + + this.wrongLabel = this.dialog.querySelector('.pass-reminder.wrong'); + this.correctLabel = this.dialog.querySelector('.pass-reminder.accepted'); + + this.exportButton = this.dialog.querySelector('.button-prd-backup'); + + this.firstText = this.dialog.querySelector('.pass-reminder.info-txt'); + + if (this.firstText) { + + $(this.firstText).html( + escapeHTML(!this.isLogout ? l[16900] : l[20633]) + .replace('[A]', '') + .replace('[/A]', '') + ); + } + this.resetUI(); + + this.bindEvents(); + + if (is_mobile) { + mobile.initPasswordVisibleToggle($(this.dialog)); + } + }; + + PasswordReminderDialog.prototype.show = function() { + if (this.isShown) { + return; + } + this.isShown = true; + + this._initInternals(); + + assert(this.dialog, 'dialog not defined.'); + + if (is_mobile) { + this.dialog.classList.add('overlay'); + } + else { + assert(this.topIcon, 'topIcon not defined.'); + $(document.body).rebind(MouseDownEvent, this.onGenericClick.bind(this)); + } + + this.dialog.classList.remove('hidden'); + }; + + + PasswordReminderDialog.prototype.resetUI = function() { + $('.button-prd-skip span', $(this.dialog)).text(l[1379]); + if (this.dialog) { + this.dialog.classList.remove('wrong'); + } + if (this.wrongLabel) { + this.wrongLabel.classList.add('hidden'); + } + if (this.correctLabel) { + this.correctLabel.classList.add('hidden'); + } + + if (this.exportButton) { + this.exportButton.classList.remove('red-button'); + this.exportButton.classList.add('green-button'); + } + + $('i.pass-visible', this.dialog).removeClass('icon-eye-hidden').addClass('icon-eye-reveal'); + $('#test-pass').attr({'style': '', 'type': 'password', 'readonly': true}); + }; + + PasswordReminderDialog.prototype.hide = function() { + if (this.dialogShown) { + return this.hideDialog(); + } + if (!this.isShown) { + return; + } + + this.isShown = false; + assert(this.dialog, 'dialog not defined.'); + + this.resetUI(); + + this.dialog.classList.add('hidden'); + + $(window).off('resize.prd'); + $(document.body).off(MouseDownEvent); + }; + + PasswordReminderDialog.prototype.onGenericClick = function(e) { + if (this.dialogShown) { + // in case this is the dialog shown (not the popup), don't hide it when the user clicks on the overlay + return; + } + + if ( + $(e.target).parents('.pass-reminder').length === 0 && + !$(e.target).is('.pass-reminder') + ) { + if (this.isShown) { + this.onSkipClicked(); + } + } + }; + + PasswordReminderDialog.prototype.hideIcon = function() { + if (!this.topIcon) { + return; + } + + this.topIcon.classList.add('hidden'); + $(this.topIcon).off('click.prd'); + }; + + PasswordReminderDialog.prototype.showDialog = function(promise) { + if (this.dialogShown) { + return; + } + + $.dialog = "prd"; + this.dialogShown = true; + + this._initInternals(); + + if (is_mobile) { + this.dialog.classList.add('overlay'); + if (page === 'fm/account') { + $('.mobile.my-account-page').addClass('hidden'); + } + } + else { + fm_showoverlay(); + } + + this.dialog.classList.remove('hidden'); + + if (promise) { + this._dialogActionPromise = promise; + } + }; + + PasswordReminderDialog.prototype.hideDialog = function() { + this.dialogShown = false; + + fm_hideoverlay(); + + this.dialog.classList.add('hidden'); + if (is_mobile) { + this.dialog.classList.remove('overlay'); + if (page === 'fm/account') { + $('.mobile.my-account-page').removeClass('hidden'); + } + } + + this.resetUI(); + + $(window).off('resize.prd'); + $(document.body).off(MouseDownEvent); + $(this.passwordField).off('keypress.prd'); + delete $.dialog; + }; + + PasswordReminderDialog.prototype.recheckLogoutDialog = function() { + var self = this; + if (!u_handle) { + // user is in the middle of a logout... + return MegaPromise.resolve(); + } + + // skip any re-checks in case this is the 'cancel' page + if (window.location.toString().indexOf("/cancel") > -1) { + return MegaPromise.resolve(); + } + + var returnedPromise = new MegaPromise(); + + + // console.error([ + // "checks", + // self.passwordReminderAttribute.toString(), + // !self.passwordReminderAttribute.masterKeyExported, + // !self.passwordReminderAttribute.dontShowAgain, + // unixtime() - u_attr.since > SHOW_AFTER_ACCOUNT_AGE, + // unixtime() - self.passwordReminderAttribute.lastSuccess > SHOW_AFTER_LASTSUCCESS, + // unixtime() - self.passwordReminderAttribute.lastLogin > SHOW_AFTER_LASTLOGIN + // ]); + + // Intentionally copying the logic from .recheck, so that we can alter it for the logout action + + // account is older then > SHOW_AFTER_ACCOUNT_AGE and lastLogin > SHOW_AFTER_LASTLOGIN + if ( + u_type === 3 && + /*!self.passwordReminderAttribute.masterKeyExported &&*/ + !self.passwordReminderAttribute.dontShowAgain/* && + unixtime() - u_attr.since > SHOW_AFTER_ACCOUNT_AGE && + unixtime() - self.passwordReminderAttribute.lastSuccess > SHOW_AFTER_LASTSUCCESS && + unixtime() - self.passwordReminderAttribute.lastLogin > SHOW_AFTER_LASTLOGIN*/ + ) { + if ( + page !== 'start' && is_fm() && + !pfid/* && + ( + !self.passwordReminderAttribute.lastSkipped || + unixtime() - self.passwordReminderAttribute.lastSkipped > SHOW_AFTER_LASTSKIP_LOGOUT + )*/ + ) { + + self.isLogout = true; + self.showDialog(returnedPromise); + } + else { + returnedPromise.resolve(); + } + } + else { + returnedPromise.resolve(); + } + + return returnedPromise; + }; + + var passwordReminderDialog = new PasswordReminderDialog(); + scope.mega.ui.passwordReminderDialog = passwordReminderDialog; + + mBroadcaster.once('login', function() { + // cancel page can trigger a login event, which should NOT trigger PRD attribute update. + if (window.location.toString().indexOf("/cancel") > -1) { + return; + } + + // since u_type is not available yet, assuming that 'login' would only be triggered by a normal user login + // e.g. u_type === 3 + passwordReminderDialog.passwordReminderAttribute.lastLogin = unixtime(); + }); + + mBroadcaster.addListener('keyexported', function() { + passwordReminderDialog.onKeyExported(); + }); + + mBroadcaster.addListener('attr:passwordReminderDialog', function() { + passwordReminderDialog.passwordReminderAttribute.attributeUpdatedViaAp(); + }); + +})(window); + +mega.metatags = new function() { + 'use strict'; + + /** + * Private function to check if the page is excluded and not missing + * @param {String} page Page name + * @returns {Boolean} true/false is excluded. + */ + var isPageExcluded = function(page) { + // XXX: add new items sorted alphabetically. + var excludedPages = [ + 'keybackup', 'businessinvite', 'businesssignup', 'cancel', 'confirm', 'debug', + 'discount', 'download', 'emailverify', 'key', 'megadrop', 'payment', 'recover', + 'recoverybykey', 'recoverybypark', 'recoveryenterkey', + 'recoverykeychangepass', 'recoveryparkchangepass', + 'redeem', 'repay', 'reset', 'sms', 'special', 'start', 'test', 'thanks', 'twofactor', + 'unsub', 'verify', 'voucher', 'wiretransfer' + ]; + + if (!page) { + return true; + } + + for (var i = excludedPages.length; i--;) { + var ep = excludedPages[i]; + + if (page.substr(0, ep.length) === ep) { + return ep.length === page.length ? -1 : ep.length; + } + } + + return false; + }; + + var stopBots = function(metaRobots, noReporting) { + if (!noReporting && !isPageExcluded(page) && !is_fm() && !is_extension) { + if (d) { + console.error('A page without title. Please handle. Page: ' + page); + } + api_req({ a: 'log', e: 99735, m: 'page without title: ' + page }); + } + + metaRobots = document.createElement('meta'); + metaRobots.name = 'robots'; + metaRobots.content = 'noindex'; + document.head.appendChild(metaRobots); + }; + + var setMeta = function(attr, val, content) { + var meta = document.head.querySelector('meta[' + attr + '="' + val + '"]'); + if (!meta) { + meta = document.createElement('meta'); + meta.setAttribute(attr, val); + document.head.appendChild(meta); + } + meta.content = content; + }; + + var insertOgTwitterMetas = function(title, desc, url, image) { + setMeta('property', 'og:title', title); + setMeta('property', 'og:description', desc); + setMeta('property', 'og:url', url); + setMeta('property', 'og:image', image); + // ----- Twitter + var meta = document.head.querySelector('meta[property="twitter:card"]'); + if (!meta) { + meta = document.createElement('meta'); + meta.setAttribute('property', 'twitter:card'); + meta.content = 'summary'; + document.head.appendChild(meta); + } + setMeta('property', 'twitter:title', title); + setMeta('property', 'twitter:description', desc); + setMeta('property', 'twitter:url', url); + setMeta('property', 'twitter:image', image); + }; + + var addCanonical = function(link) { + if (lang && lang !== 'en') { + link += `/lang_${lang}`; + } + var canonical = document.createElement('link'); + canonical.setAttribute('rel', 'canonical'); + canonical.setAttribute('href', link); + document.head.appendChild(canonical); + }; + + var ucFirst = function(s) { + s = String(s || ''); + return s.charAt(0).toUpperCase() + s.slice(1); + }; + + /* eslint-disable complexity */ + this.addStrucuturedData = function(type, data) { + + if (!type || !data) { + return; + } + + var supportedTypes = ['Product', 'SoftwareApplication', 'FAQPage', 'NewsArticle', 'Organization']; + if (supportedTypes.indexOf(type) === -1) { + return; + } + + if ( + !(type === 'Product' && data.offers && data.description && data.name) && + !(type === 'SoftwareApplication' && data.offers && data.operatingSystem && data.name) && + !(type === 'FAQPage' && data.mainEntity && Object.keys(data.mainEntity).length) && + !(type === 'NewsArticle' && data.headline && data.image && data.datePublished && data.dateModified) && + !(type === 'Organization' && data.url && data.logo) + ) { + return; + } + + var prepareMetaStruct = function() { + var structData = document.head.querySelector('script[type="application/ld+json"]'); + if (!structData) { + structData = document.createElement('script'); + structData.setAttribute('type', 'application/ld+json'); + document.head.appendChild(structData); + } + return structData; + }; + + var metaStruct = prepareMetaStruct(); + if (!metaStruct) { + return; + } + + var structContent = Object.create(null); + structContent['@context'] = 'https://schema.org/'; + structContent['@type'] = type; + + if (type === 'Product') { + structContent['name'] = data.name; + structContent['image'] = [data.image || 'https://cms2.mega.nz/b41537c0eae056cfe5ab05902fca322b.png']; + structContent['description'] = data.description; + structContent['brand'] = { '@type': 'Brand', 'name': 'MEGA' }; + structContent['offers'] = { + '@type': 'Offer', + 'url': data.offers.url || '', + 'priceCurrency': 'EUR', + 'price': data.offers.price + }; + + } + else if (type === 'SoftwareApplication') { + structContent['name'] = data.name; + structContent['operatingSystem'] = data.operatingSystem; + if (data.applicationCategory) { + structContent['applicationCategory'] = data.applicationCategory; + } + structContent['offers'] = { + '@type': 'Offer', + 'priceCurrency': 'EUR', + 'price': data.offers.price + }; + } + else if (type === 'FAQPage') { + var mainE = []; + for (var entity in data.mainEntity) { + if (data.mainEntity[entity]) { + var temp = { + '@type': 'Question', + 'name': entity, + 'acceptedAnswer': { + '@type': 'Answer', + 'text': data.mainEntity[entity] + } + }; + mainE.push(temp); + } + } + if (mainE.length) { + structContent['mainEntity'] = mainE; + } + else { + document.head.removeChild(metaStruct); + return; + } + } + else if (type === 'NewsArticle') { + structContent['headline'] = data.headline; + structContent['image'] = [data.image]; + structContent['datePublished'] = data.datePublished; + structContent['dateModified'] = data.dateModified; + } + else if (type === 'Organization') { + structContent['url'] = data.url; + structContent['logo'] = data.logo; + } + else { + return; + } + metaStruct.textContent = JSON.stringify(structContent, null, 3); + }; + + this.disableBots = function() { + var metaRobots = document.head.querySelector('meta[name="robots"]'); + if (!metaRobots) { + metaRobots = document.createElement('meta'); + document.head.appendChild(metaRobots); + } + metaRobots.name = 'robots'; + metaRobots.content = 'noindex'; + }; + + /** + * Get Page meta tags. + * @param {String} page Page name + * @returns {Object} Object contains needed tags + */ + this.getPageMetaTags = function(page) { + var mTags = Object.create(null); + var metaRobots = document.head.querySelector('meta[name="robots"]'); + if (metaRobots) { + document.head.removeChild(metaRobots); + } + var metaCanonical = document.head.querySelector('link[rel="canonical"]'); + if (metaCanonical) { + document.head.removeChild(metaCanonical); + } + var metaStruct = document.head.querySelector('script[type="application/ld+json"]'); + if (metaStruct) { + document.head.removeChild(metaStruct); + } + + if (page === 'refer') { + mTags.en_title = 'MEGA Referral Program - MEGA'; + mTags.en_desc = 'Refer your contacts to MEGA and earn 20 percent commission for each paid plan sign up.'; + mTags.mega_title = l[23963] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_refer || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/07834c8d2b3b05bc352966fe02fe597b.png'; + } + else if (page === 'mobile' || page === 'android' || page === 'ios') { + mTags.en_title = 'Cloud Storage at Your Fingertips - MEGA Mobile Apps - MEGA'; + mTags.en_desc = 'Download the MEGA app to securely upload, access and stream your files across your ' + + 'devices, or communicate with our end-to-end encrypted chat.'; + mTags.mega_title = l[23965] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_mobile || mTags.en_desc; + if (page !== 'mobile') { + addCanonical(getBaseUrl() + '/mobile'); + } + } + else if (page === 'nas') { + mTags.en_title = 'Network Attached Storage (NAS) - MEGA'; + mTags.en_desc = 'Access your MEGA account directly on your QNAP and Synology Network Attached Storage' + + ' (NAS) with our MEGA CMD tool.'; + mTags.mega_title = l[23966] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_nas || mTags.en_desc; + } + else if (page === 'desktop') { + mTags.en_title = 'Desktop App - MEGA'; + mTags.en_desc = 'Our MEGA Desktop App allows you to easily automate synchronisation between your ' + + 'computer and your MEGA Cloud Storage. Available for macOS, Windows, and Linux.'; + mTags.mega_title = l[23967] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_sync || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/0723d3ca8f856c90f39480c66b4f2646.png'; + } + else if (page === 'extensions' || page === 'chrome' || page === 'firefox' || page === 'edge') { + mTags.en_title = 'Improve Performance and Security - Browser Extensions - MEGA'; + mTags.en_desc = 'Install the MEGA extension for your browser to reduce load times, improve performance' + + ' and strengthen security.'; + mTags.mega_title = l[23968] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_extensions || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/b9a5ee1bd8935e2eb8659b1b7b87f0ae.png'; + if (page !== 'extensions') { + addCanonical(getBaseUrl() + '/extensions'); + } + } + else if (page === 'bird') { + mTags.en_title = 'MEGAbird - MEGA'; + mTags.en_desc = 'Send large files by email through MEGA'; + mTags.mega_title = l[23969] || mTags.en_title; + mTags.mega_desc = l[20931] || mTags.en_desc; + } + else if (page === 'cmd') { + mTags.en_title = 'Unleash MEGA\'s Full Potential with MEGA CMD - MEGA'; + mTags.en_desc = 'System administrators can automate MEGA account access by integrating scripts with ' + + 'the MEGA CMD tool.'; + mTags.mega_title = l[23970] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_cmd || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/75bc1e26149f8962b723a42205434feb.png'; + } + else if (page === 'pro' || page.substr(0, 6) === 'propay') { + mTags.en_title = 'Compare Plans and Pricing - MEGA'; + mTags.en_desc = 'Compare MEGA\'s pricing plans. Get 16% off if you purchase an annual plan. ' + + 'Start using MEGA\'s secure cloud storage and fast transfers today.'; + mTags.mega_title = l[23971] || mTags.en_title; + mTags.mega_desc = l[23972] || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/559d084a50ad7283acb6f1c433136952.png'; + } + else if (page === 'register') { + mTags.en_title = 'Create Your Account - MEGA'; + mTags.en_desc = 'Get started with MEGA, the world\'s largest fully-featured free cloud storage and ' + + 'communications provider with secure, user-controlled end-to-end encryption.'; + mTags.mega_title = l[23973] || mTags.en_title; + mTags.mega_desc = l[23974] || mTags.en_desc; + } + else if (page === 'login') { + mTags.en_title = 'Login - MEGA'; + mTags.en_desc = 'Log in to your MEGA account. Access the world\'s most trusted, protected cloud storage.'; + mTags.mega_title = l[23975] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_login || mTags.en_desc; + } + else if (page === 'recovery') { + mTags.en_title = 'Recovery - MEGA'; + mTags.en_desc = 'Forgot your MEGA password? Start your recovery process here.'; + mTags.mega_title = l[23976] || mTags.en_title; + mTags.mega_desc = l[23977] || mTags.en_desc; + } + else if (page === 'terms') { + mTags.en_title = 'Terms of Service - MEGA'; + mTags.en_desc = 'Please read our Terms of Service that cover how you may access our services, website ' + + 'domains, and client software.'; + mTags.mega_title = l[23978] || mTags.en_title; + mTags.mega_desc = l[23979] || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/4548c0ab90a611b8b7c5a940811e23b5975b4ba8.png'; + } + else if (page === 'dispute') { + mTags.en_title = 'For Copyright Claims and Disputes - MEGA'; + mTags.en_desc = 'If you believe that access to a file you have uploaded has been wrongly disabled, ' + + 'please file a counter-notice.'; + mTags.mega_title = l[24967] || mTags.en_title; + mTags.mega_desc = l[24968] || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/4548c0ab90a611b8b7c5a940811e23b5975b4ba8.png'; + } + else if (page === 'privacy' || page === 'gdpr') { + mTags.en_title = 'Privacy and Data Policy - GDPR - MEGA'; + mTags.en_desc = 'MEGA takes privacy very seriously. We are committed to ensuring continued compliance ' + + 'with data protection regulations including GDPR.'; + mTags.mega_title = l[23980] || mTags.en_title; + mTags.mega_desc = l[23981] || mTags.en_desc; + if (page !== 'privacy') { + addCanonical(getBaseUrl() + '/privacy'); + } + } + else if (page === 'copyright') { + mTags.en_title = 'Copyright - MEGA'; + mTags.en_desc = 'We respect copyright and require that users of our services comply with applicable' + + ' intellectual property laws. Learn more or submit a notice here.'; + mTags.mega_title = l[23983] || mTags.en_title; + mTags.mega_desc = l[23984] || mTags.en_desc; + } + else if (page === 'copyrightnotice') { + mTags.en_title = 'Copyright Notice - MEGA'; + mTags.en_desc = 'Copyright. Notice of Alleged Infringement "Notice" submit'; + mTags.mega_title = l[23985] || mTags.en_title; + mTags.mega_desc = l[23986] || mTags.en_desc; + } + else if (page === 'disputenotice') { + mTags.en_title = 'Copyright Counter-Notification - MEGA'; + mTags.en_desc = 'Copyright Counter-Notification'; + mTags.mega_title = l[23987] || mTags.en_title; + mTags.mega_desc = l[8789] || mTags.en_desc; + } + else if (page === 'takedown') { + mTags.en_title = 'Takedown Guidance Policy - MEGA'; + mTags.en_desc = 'MEGA Takedown Policy. Guidance on requesting user information or "takedown" of' + + ' user data.'; + mTags.mega_title = l[23988] || mTags.en_title; + mTags.mega_desc = l[23989] || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/c449150b27444c9cc8eb3cad8ab02319744dd61d.png'; + } + else if (page === 'cookie') { + mTags.en_title = 'Cookie Policy - MEGA'; + mTags.en_desc = 'We value your privacy. Learn about the necessary data MEGA collects through cookies ' + + 'and similar technologies.'; + mTags.mega_title = l[24639] || mTags.en_title; + mTags.mega_desc = l[24640] || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/e5cebb274552eb5e5408db5e834d5ff3ec8c66ef.png' + } + else if (page === 'contact') { + mTags.en_title = 'Contact Us - MEGA'; + mTags.en_desc = 'Need help with your account or want to report an issue? Contact our support staff.'; + mTags.mega_title = l[23990] || mTags.en_title; + mTags.mega_desc = l[23991] || mTags.en_desc; + } + else if (page === 'resellers') { + mTags.en_title = 'Resellers - MEGA'; + mTags.en_desc = 'Conveniently purchase a MEGA Pro membership from one of our authorised resellers: ' + + 'CloudBasedBackup, 6Media, Pay.mobi or VoucherReseller'; + mTags.mega_title = l[23992] || mTags.en_title; + mTags.mega_desc = l[23993] || mTags.en_desc; + stopBots(metaRobots); + } + else if (page === 'securechat') { + mTags.en_title = 'Private and Secure Communication - MEGA'; + mTags.en_desc = 'Exchange messages, share your files and have audio and/or video calls with MEGA\'s ' + + 'end-to-end encrypted chat.'; + mTags.mega_title = l[24608] || mTags.en_title; + mTags.mega_desc = l[24611] || mTags.en_desc; + } + else if (page === 'storage') { + mTags.en_title = 'Secure Cloud Storage and Fast Transfers - MEGA'; + mTags.en_desc = 'Work remotely and never run out of storage. With MEGA, you\'ll have access to one of ' + + 'the most generous and secure cloud storage services currently available.'; + mTags.mega_title = l[24606] || mTags.en_title; + mTags.mega_desc = l[24609] || mTags.en_desc; + } + else if (page === 'megabackup') { + mTags.en_title = 'Back Up Your Files - MEGA'; + mTags.en_desc = 'Get peace of mind when you back up data, such as important documents and files, ' + + 'from your computer to MEGA.'; + mTags.mega_title = l.ft_backup_metatag_title || mTags.en_title; + mTags.mega_desc = l.ft_backup_metatag_desc || mTags.en_desc; + } + else if (page === 'collaboration') { + mTags.en_title = 'Work From Anywhere and Stay Connected - MEGA'; + mTags.en_desc = 'Securely store files, stay in contact and collaborate in one easy place with MEGA.'; + mTags.mega_title = l[24607] || mTags.en_title; + mTags.mega_desc = l[24610] || mTags.en_desc; + } + else if (page === 'security') { + mTags.en_title = 'Security and Why It Matters - MEGA'; + mTags.en_desc = 'Your files and chats are end-to-end encrypted with keys controlled by you and ' + + 'nobody else.'; + mTags.mega_title = l[23994] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_security || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/c964ddb7dd27f1acd727747862787486.png'; + } + else if (page === 'objectstorage') { + mTags.en_title = 'S4 Object Storage Beta Registration - MEGA'; + mTags.en_desc = 'MEGA\'s S4 beta program starts soon, for a limited number of participants. ' + + 'Sign up to become a beta tester and get € 1,000 worth of storage for free.'; + mTags.mega_title = l.ri_s4_metatag_title || mTags.en_title; + mTags.mega_desc = l.ri_s4_metatag_desc || mTags.en_desc; + } + else if (page === 'security/bug-bounty') { + mTags.en_title = 'We Welcome Security And Bug Reports - MEGA'; + mTags.en_desc = 'Earn Bounties For Finding Bugs And Other Issues At MEGA'; + mTags.mega_title = l.mtags_title_security_bugbounty || mTags.en_title; + mTags.mega_desc = l.mtags_desc_security_bugbounty || mTags.en_desc; + } + else if (page === 'dev' || page === 'developers') { + mTags.en_title = 'Documentation for Developers - MEGA'; + mTags.en_desc = 'Check out the MEGA C++ client access engine with full documentation including ' + + 'integration guides, data structures and more.'; + mTags.mega_title = l[23996] || mTags.en_title; + mTags.mega_desc = l[23997] || mTags.en_desc; + if (page === 'dev') { + addCanonical(getBaseUrl() + '/developers'); + } + } + else if (page === 'doc') { + mTags.en_title = 'Software Developer Documentation - MEGA'; + mTags.en_desc = 'MEGA provides an API accessible with our software development kit (SDK), with a ' + + 'full library of developer documentation.'; + mTags.mega_title = l[23998] || mTags.en_title; + mTags.mega_desc = l[23999] || mTags.en_desc; + } + else if (page === 'sdk') { + mTags.en_title = 'SDK - MEGA'; + mTags.en_desc = + 'MEGA SDK for C++, providing essential abstraction to your application\'s secure cloud storage access.'; + mTags.mega_title = l[24000] || mTags.en_title; + mTags.mega_desc = l[24001] || mTags.en_desc; + } + else if (page === 'sdkterms') { + mTags.en_title = 'SDK Terms and Conditions - Developers - MEGA'; + mTags.en_desc = 'Check MEGA\'s Terms of Service and Privacy Policy for our API and SDK.'; + mTags.mega_title = l[24002] || mTags.en_title; + mTags.mega_desc = l[24003] || mTags.en_desc; + } + else if (page === 'about/main' || page === 'about') { + mTags.en_title = 'About Us - Encrypted Cloud Storage - MEGA'; + mTags.en_desc = 'MEGA launched in 2013 as the world\'s first zero-knowledge, easy to use cloud ' + + 'storage provider with user-controlled end-to-end encryption.'; + mTags.mega_title = l[24004] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_about || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/0fcca13fc3baaf74cd6bdc51850c19c3.png'; + if (page === 'about/main') { + addCanonical(getBaseUrl() + '/about'); + } + this.addStrucuturedData('Organization', { + url: getBaseUrl(), + logo: 'https://cms2.mega.nz/b41537c0eae056cfe5ab05902fca322b.png', + }); + } + else if (page === 'about/jobs') { + mTags.en_title = 'Career Opportunities - MEGA'; + mTags.en_desc = 'Join the world\'s largest fully-featured cloud storage and privacy company. Check out' + + ' our latest job listings and apply today.'; + mTags.mega_title = l[24005] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_about_jobs || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/659cd40a308f29a025c2d3b42944a0c9.png'; + } + else if (page === 'about/privacy') { + mTags.en_title = 'About MEGA and Our End-to-End Encrypted Cloud Storage - MEGA'; + mTags.en_desc = 'MEGA is the world\'s leading fully-featured end-to-end encrypted cloud storage provider.' + + ' We strive to offer the highest levels of privacy possible.'; + mTags.mega_title = l[24006] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_about_priv || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/753f59a51ed56feda0644a1be74c1671.png'; + } + else if (page === 'about/reliability') { + mTags.en_title = 'How Reliable is MEGA\'s End-to-End Encrypted Storage? - MEGA'; + mTags.en_desc = 'MEGA\'s CloudRAID technology means files are split into equal-sized parts and stored' + + ' in different countries for additional service robustness.'; + mTags.mega_title = l[24007] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_about_rel || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/f1d60e5822b4d755de9be2d0441b9a3b.png'; + } + else if (page === 'sourcecode') { + mTags.en_title = 'Transparency and Public Source Code - MEGA'; + mTags.en_desc = 'We publish the full source code for our client apps and welcome independent ' + + 'verification and integrity checks.'; + mTags.mega_title = l[24008] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_srccode || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/147ddec6fa35a6084030513d1ccd2eed.png'; + } + else if (page === 'credits') { + mTags.en_title = 'What Powers MEGA? - Credits - MEGA'; + mTags.en_desc = 'MEGA would like to thank the authors of the following open source components that ' + + 'have contributed to the functionality of our site.'; + mTags.mega_title = l[24009] || mTags.en_title; + mTags.mega_desc = l[24010] || mTags.en_desc; + } + else if (page === 'business') { + mTags.en_title = 'The Secure Cloud Storage Solution for Your Business - MEGA'; + mTags.en_desc = 'Massive storage, secure sharing across devices and 24/7 support make MEGA Business ' + + 'the obvious choice for your team.'; + mTags.mega_title = l[24011] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_business || mTags.en_desc; + mTags.image = 'https://cms2.mega.nz/730b119f030d91dacb5dc349726e6c17.png'; + } + else if (page === 'registerb') { + mTags.en_title = 'Business Account - MEGA'; + mTags.en_desc = 'With our user-controlled end-to-end encryption, your data and communications have never ' + + 'been safer. MEGA is the secure solution for your business.'; + mTags.mega_title = l[24012] || mTags.en_title; + mTags.mega_desc = l.mtags_desc_registerb || mTags.en_desc; + } + else if (page === 'corporate' || page === 'corporate/media') { + mTags.en_title = 'Media Assets - MEGA'; + mTags.en_desc = 'Are you a journalist or technology reviewer? Download our MEGA media resources or ' + + 'contact us for enquiries.'; + mTags.mega_title = l[24015] || mTags.en_title; + mTags.mega_desc = l[24089] || mTags.en_desc; + if (page === 'corporate') { + addCanonical(getBaseUrl() + '/corporate/media'); + } + } + else if (page === 'corporate/reviews') { + mTags.en_title = 'Reviews - MEGA'; + mTags.en_desc = 'MEGA is the largest secure, fully-featured cloud storage provider in the world. ' + + 'Check out some of our top reviews and product comparisons.'; + mTags.mega_title = l[24086] || mTags.en_title; + mTags.mega_desc = l[24087] || mTags.en_desc; + } + else if (typeof Object(window.dlmanager).isStreaming === 'object') { + mTags.mega_title = dlmanager.isStreaming._megaNode.name + ' - MEGA'; + mTags.dynamic = true; + } + else if (page === 'recoveryparkchangepass') { + mTags.mega_title = 'Park Change Password - MEGA'; + stopBots(metaRobots); + } + else if (page === 'recoverykeychangepass') { + mTags.mega_title = 'Key Change Password - MEGA'; + stopBots(metaRobots); + } + else if (page === 'recoveryenterkey') { + mTags.mega_title = 'Recovery Key - MEGA'; + stopBots(metaRobots); + } + else if (page === 'recoverybypark') { + mTags.mega_title = 'Park Recovery - MEGA'; + stopBots(metaRobots); + } + else if (page === 'recoverybykey') { + mTags.mega_title = 'Recover by Key - MEGA'; + stopBots(metaRobots); + } + else if (page === 'wiretransfer') { + mTags.mega_title = 'Wire Transfer - MEGA'; + stopBots(metaRobots); + } + else if (page === 'twofactor') { + mTags.mega_title = 'Two Factor - MEGA'; + stopBots(metaRobots); + } + else if (page.substr(0, 11) === 'emailverify') { + mTags.mega_title = 'Email Verify - MEGA'; + mTags.mega_desc = 'Email verification'; + stopBots(metaRobots, true); + } + else if (page === 'businessinvite') { + mTags.mega_title = 'Business Invite - MEGA'; + stopBots(metaRobots); + } + else if (page === 'businesssignup') { + mTags.mega_title = 'Business Signup - MEGA'; + stopBots(metaRobots); + } + else if (page === 'achievements') { + mTags.en_title = 'Achievements - MEGA'; + mTags.en_desc = 'Free additional cloud storage - 5 GB per achievement, valid for 365 days.'; + mTags.mega_title = l.achievement_meta_title || mTags.en_title; + mTags.mega_desc = l.achievement_meta_desc || mTags.en_desc; + } + else if (page === 'support') { + mTags.en_title = 'Support - MEGA'; + mTags.en_desc = 'Get support'; + mTags.mega_title = l.support_meta_tag || mTags.en_title; + mTags.mega_desc = l[516] || mTags.en_desc; + } + else if (page === 'start') { + mTags.en_title = 'The Most Trusted, Best-Protected Cloud Storage - MEGA'; + mTags.en_desc = 'MEGA understands the importance of keeping data and conversations private. We provide ' + + 'a fantastic user experience that protects users\' right to privacy.'; + mTags.mega_title = l.mtags_title_start || mTags.en_title; + mTags.mega_desc = l.mtags_desc_start || mTags.en_desc; + if (getCleanSitePath().substr(0, 5) === 'start') { + addCanonical(getBaseUrl()); + } + } + else if (page.startsWith('special')) { + mTags.mega_title = 'Special - MEGA'; + mTags.mega_desc = 'MEGA\'s Special Page'; + + if (page.endsWith('/pro')) { + mTags.mega_title = 'Special - PRO - MEGA'; + } + else if (page.endsWith('/business')) { + mTags.mega_title = 'Special - Business - MEGA'; + } + + stopBots(metaRobots); + } + else if (page && (mTags.excluded = isPageExcluded(page))) { + mTags.mega_title = page.charAt(0).toUpperCase() + page.slice(1) + ' - MEGA'; + stopBots(metaRobots); + } + else { + mTags.mega_title = 'MEGA'; + stopBots(metaRobots); + } + if (!mTags.mega_desc) { + mTags.mega_desc = l[24023] || mega.whoami; + if (!isPageExcluded(page) && !is_fm() && !is_extension) { + if (d) { + console.error('A page without Description. Please handle. Page: ' + page); + } + api_req({ a: 'log', e: 99736, m: 'page without desc: ' + page }); + } + } + + mTags.image = mTags.image || 'https://cms2.mega.nz/b41537c0eae056cfe5ab05902fca322b.png'; + insertOgTwitterMetas( + mTags.mega_title, + mTags.mega_desc, + getBaseUrl() + (page && page !== 'start' ? '/' + page : ''), + mTags.image + ); + + mTags.page = page; + this.lastSetMetaTags = mTags; + + return mTags; + }; + /* eslint-enable complexity */ + + this.checkPageMatchesURL = function() { + if (page !== (getCleanSitePath() || 'start')) { + var metaRobots = document.head.querySelector('meta[name="robots"]'); + if (!metaRobots) { + stopBots(metaRobots); + } + } + }; +}; + +/*! + * verge 1.9.1+201402130803 + * https://github.com/ryanve/verge + * MIT License 2013 Ryan Van Etten + */ + +(function(root, name, make) { + if (typeof module != 'undefined' && module['exports']) module['exports'] = make(); + else root[name] = make(); +}(this, 'verge', function() { + + var xports = {} + , win = typeof window != 'undefined' && window + , doc = typeof document != 'undefined' && document + , docElem = doc && doc.documentElement + , matchMedia = win['matchMedia'] || win['msMatchMedia'] + , mq = matchMedia ? function(q) { + return !!matchMedia.call(win, q).matches; + } : function() { + return false; + } + , viewportW = xports['viewportW'] = function() { + var a = docElem['clientWidth'], b = win['innerWidth']; + return a < b ? b : a; + } + , viewportH = xports['viewportH'] = function() { + var a = docElem['clientHeight'], b = win['innerHeight']; + return a < b ? b : a; + }; + + /** + * Test if a media query is active. Like Modernizr.mq + * @since 1.6.0 + * @return {boolean} + */ + xports['mq'] = mq; + + /** + * Normalized matchMedia + * @since 1.6.0 + * @return {MediaQueryList|Object} + */ + xports['matchMedia'] = matchMedia ? function() { + // matchMedia must be binded to window + return matchMedia.apply(win, arguments); + } : function() { + // Gracefully degrade to plain object + return {}; + }; + + /** + * @since 1.8.0 + * @return {{width:number, height:number}} + */ + function viewport() { + return {'width':viewportW(), 'height':viewportH()}; + } + xports['viewport'] = viewport; + + /** + * Cross-browser window.scrollX + * @since 1.0.0 + * @return {number} + */ + xports['scrollX'] = function() { + return win.pageXOffset || docElem.scrollLeft; + }; + + /** + * Cross-browser window.scrollY + * @since 1.0.0 + * @return {number} + */ + xports['scrollY'] = function() { + return win.pageYOffset || docElem.scrollTop; + }; + + /** + * @param {{top:number, right:number, bottom:number, left:number}} coords + * @param {number=} cushion adjustment + * @return {Object} + */ + function calibrate(coords, cushion) { + var o = {}; + cushion = +cushion || 0; + o['width'] = (o['right'] = coords['right'] + cushion) - (o['left'] = coords['left'] - cushion); + o['height'] = (o['bottom'] = coords['bottom'] + cushion) - (o['top'] = coords['top'] - cushion); + return o; + } + + /** + * Cross-browser element.getBoundingClientRect plus optional cushion. + * Coords are relative to the top-left corner of the viewport. + * @since 1.0.0 + * @param {Element|Object} el element or stack (uses first item) + * @param {number=} cushion +/- pixel adjustment amount + * @return {Object|boolean} + */ + function rectangle(el, cushion) { + el = el && !el.nodeType ? el[0] : el; + if (!el || 1 !== el.nodeType) return false; + return calibrate(el.getBoundingClientRect(), cushion); + } + xports['rectangle'] = rectangle; + + /** + * Get the viewport aspect ratio (or the aspect ratio of an object or element) + * @since 1.7.0 + * @param {(Element|Object)=} o optional object with width/height props or methods + * @return {number} + * @link http://w3.org/TR/css3-mediaqueries/#orientation + */ + function aspect(o) { + o = null == o ? viewport() : 1 === o.nodeType ? rectangle(o) : o; + var h = o['height'], w = o['width']; + h = typeof h == 'function' ? h.call(o) : h; + w = typeof w == 'function' ? w.call(o) : w; + return w/h; + } + xports['aspect'] = aspect; + + /** + * Test if an element is in the same x-axis section as the viewport. + * @since 1.0.0 + * @param {Element|Object} el + * @param {number=} cushion + * @return {boolean} + */ + xports['inX'] = function(el, cushion) { + var r = rectangle(el, cushion); + return !!r && r.right >= 0 && r.left <= viewportW(); + }; + + /** + * Test if an element is in the same y-axis section as the viewport. + * @since 1.0.0 + * @param {Element|Object} el + * @param {number=} cushion + * @return {boolean} + */ + xports['inY'] = function(el, cushion) { + var r = rectangle(el, cushion); + return !!r && r.bottom >= 0 && r.top <= viewportH(); + }; + + /** + * Test if an element is in the viewport. + * @since 1.0.0 + * @param {Element|Object} el + * @param {number=} cushion + * @return {boolean} + */ + xports['inViewport'] = function(el, cushion) { + // Equiv to `inX(el, cushion) && inY(el, cushion)` but just manually do both + // to avoid calling rectangle() twice. It gzips just as small like this. + var r = rectangle(el, cushion); + return !!r && r.bottom >= 0 && r.right >= 0 && r.top <= viewportH() && r.left <= viewportW(); + }; + + return xports; +})); diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AF6E61FF9C97666D01E4159067FA7CB37B6B0FB0 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AF6E61FF9C97666D01E4159067FA7CB37B6B0FB0 new file mode 100644 index 0000000..9696033 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AF6E61FF9C97666D01E4159067FA7CB37B6B0FB0 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AF6E61FF9C97666D01E4159067FA7CB37B6B0FB0-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AF6E61FF9C97666D01E4159067FA7CB37B6B0FB0-blob new file mode 100644 index 0000000..2835bd7 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/AF6E61FF9C97666D01E4159067FA7CB37B6B0FB0-blob @@ -0,0 +1 @@ +window.fe016a0='exoJsPop101';C_jGH[480428]=function(){var t=2;for(;t!==9;){switch(t){case 5:var e;try{var a=2;for(;a!==6;){switch(a){case 2:Object["defineProperty"](Object["prototype"],"r1cL9",{get:function(){var t=2;for(;t!==1;){switch(t){case 2:return this;break}}},configurable:true});e=r1cL9;e["At151"]=e;a=4;break;case 4:a=typeof At151==="undefined"?3:9;break;case 3:throw"";a=9;break;case 9:delete e["At151"];var n=Object["prototype"];delete n["r1cL9"];a=6;break}}}catch(t){e=window}return e;break;case 2:t=typeof globalThis==="object"?1:5;break;case 1:return globalThis;break}}}();C_jGH.q0z5r=q0z5r;D$ipy$(C_jGH[480428]);C_jGH[257397]=function(){var t=2;for(;t!==5;){switch(t){case 2:var v={y1Zpj9N:function(t){var e=2;for(;e!==18;){switch(e){case 14:c+=f(u(i)^o(r));e=13;break;case 6:r=0;e=14;break;case 12:c=c.X2J3Y$("&");var a=0;var n=function(t){var e=2;for(;e!==15;){switch(e){case 8:c.O3241K.j6lCoq(c,c.w6AdTH(-6,6).w6AdTH(0,4));e=5;break;case 5:return a++;break;case 18:c.O3241K.j6lCoq(c,c.w6AdTH(-4,4).w6AdTH(0,3));e=5;break;case 20:c.O3241K.j6lCoq(c,c.w6AdTH(-6,6).w6AdTH(0,4));e=5;break;case 3:c.O3241K.j6lCoq(c,c.w6AdTH(-4,4).w6AdTH(0,2));e=5;break;case 1:c.O3241K.j6lCoq(c,c.w6AdTH(-9,9).w6AdTH(0,8));e=5;break;case 13:c.O3241K.j6lCoq(c,c.w6AdTH(-7,7).w6AdTH(0,6));e=5;break;case 17:v.y1Zpj9N=_;e=16;break;case 6:c.O3241K.j6lCoq(c,c.w6AdTH(-5,5).w6AdTH(0,4));e=5;break;case 11:c.O3241K.j6lCoq(c,c.w6AdTH(-6,6).w6AdTH(0,5));e=5;break;case 7:e=a===3&&t===330?6:14;break;case 10:e=a===6&&t===149?20:19;break;case 12:e=a===5&&t===267?11:10;break;case 16:return _(t);break;case 19:e=a===7&&t===296?18:17;break;case 14:e=a===4&&t===252?13:12;break;case 2:e=a===0&&t===7?1:4;break;case 9:e=a===2&&t===64?8:7;break;case 4:e=a===1&&t===76?3:9;break}}};e=20;break;case 7:e=r===t.length?6:14;break;case 8:e=i>e[0];break;case 18:t=e[3]+e[2]+e[0]+e[5]+e[1]+e[4]+e[6];break;case 11:t=e[2]*e[0]===e[1];break;case 16:t=e[0]==e[1];break;case 5:t=e[1]<=.5?25:24;break;case 23:return a[2];break;case 18:a[2]=false;e=17;break;case 20:a[9][a[5][n[86]]].h+=true;e=19;break;case 19:a[7]++;e=7;break}}}(n[60])?148:147;break;case 62:n[57].x6=["c8"];t=61;break;case 150:n[92]++;t=127;break;case 80:n[33]=n[90];n[47]={};n[47].x6=["Q4","c8"];n[47].O2=function(){var t=function(){return(![]+[])[+!+[]]};var e=/\141/.s$zMdU(t+[]);return e};n[13]=n[47];t=102;break;case 127:t=n[92]>0;break;case+"7":C_jGH.R7(0);C_jGH.U5=C_jGH.z1("15",0);C_jGH.f7(1);r5D3vP=C_jGH.t0("6",1);break;case"1"*1:C_jGH.H3=17;r5D3vP=+"5";break;case"3">>32:r5D3vP=C_jGH.a_(+"252")>32);ba=it.n$(474);Ca=it.a_(491);it.f7(5);ka=it.a_(it.t0(32,"31"));it.R7(4);ya=it.n$(it.z1("408",0));it.f7(4);pa=it.n$(it.z1("353",0));Ra=it.n$(+"20");za=it.a_(+"191");da=it.a_(+"89");la=it.n$(+"290");Ga=it.n$(+"357");it.R7(4);Ea=it.a_(it.z1("348",0));ma=it.n$(+"174");it.f7(4);c=it.a_(it.t0("276",0));wa=it.a_(+"223");ja=it.n$(53);it.R7(0);Pa=it.n$(it.z1("325",0));Ha=it.a_(+"502");Oa=it.n$(+"124");it.f7(2);Da=it.a_(it.t0("273",17));ga=it.n$(+"25");$t=it.n$(+"67");s=it.n$(418);Ba=it.a_(497);xa=it.a_(376);Ua=/(?:Edge|Edg)\/([\d\.]+)(?:$|\s|\/|\))+/i;Ya=it.n$(+"330");bt=it.n$(+"232");Fa=it.n$(+"270");Qa=/chrome|opera|edge|crios|opios|fxios|uc/i;it.f7(0);Sa=it.n$(it.z1("46",0));it.f7(5);Ta=it.n$(it.t0(0,"207"));it.f7(4);Aa=it.n$(it.z1("146",0));Wa=it.a_(+"522");it.f7(2);qa=it.n$(it.t0("297",32));it.R7(2);Va=it.n$(it.z1("225",65));Xa=it.n$(+"57");Ma=it.a_(30);Ka=it.n$(+"429");Za=it.a_(98);it.R7(4);Ia=it.n$(it.t0("481",0));Na=it.a_(+"257");La=it.a_(235);Ja=it.a_(+"472");tn=it.n$(+"523");it.f7(2);en=it.a_(it.t0("39",35));it.f7(2);an=it.a_(it.z1("213",64));nn=it.a_(+"16");rn=it.n$(+"451");it.f7(1);cn=it.a_(it.t0("74",1));sn=it.a_(+"495");it.R7(5);fn=it.a_(it.t0(0,"65"));Ct=it.a_(+"159");un=it.n$(+"201");on=it.a_(+"151");_n=it.a_(+"288");kt=it.a_(+"444");hn=it.a_(44);it.R7(0);vn=it.a_(it.t0("513",0));$n=it.a_(27);it.R7(4);bn=it.a_(it.z1("492",0));it.R7(5);Cn=it.n$(it.z1(32,"417"));kn=it.a_(+"301");yn=it.a_(285);pn=it.a_(+"255");Rn=it.n$(+"4");it.R7(5);zn=it.n$(it.z1(64,"219"));it.R7(1);dn=it.a_(it.t0("356",1));ln=it.n$(240);yt=("7915"<<0,+"998.58")>=("533.7"-0,+"7780")?"0x19ac"*1:it.n$("452"*1);it.R7(4);Gn=it.n$(it.t0("405",0));En=/firefox|fxios/i;it.R7(2);mn=it.n$(it.z1("108",8));wn=it.n$(+"64");jn=it.a_(+"166");it.R7(5);Pn=it.n$(it.t0(0,"130"));it.f7(0);pt=it.n$(it.t0("246",0));Hn=it.a_(427);it.f7(5);On=it.n$(it.z1(64,"105"));Dn=it.a_(+"449");gn=/_/g;it.f7(5);Bn=it.n$(it.t0(0,"14"));xn=it.a_(+"415");Un=it.a_(+"498");it.R7(2);Yn=it.a_(it.z1("122",48));Fn=it.n$(+"295");it.R7(2);Qn=it.a_(it.z1("385",1));Sn=it.a_(102);Tn=it.n$(+"5");it.f7(2);An=it.a_(it.t0("145",1));it.R7(4);Wn=it.n$(it.z1("499",0));qn=/^(#|javascript)/i;Vn=it.a_(+"338");Xn=it.a_(+"180");Mn=it.a_(+"157");it.R7(0);Kn=it.a_(it.z1("409",0));Zn=/webkit/;it.f7(4);In=it.a_(it.t0("345",0));f=it.a_(+"152");u=it.a_(+"480");Nn=it.n$(+"52");Ln=it.a_(+"220");Jn=it.n$(135);ti=it.a_(+"163");ei=it.n$(165);ai=(JSON,it.a_(167));ni=it.n$(+"306");ii=it.a_(+"160");it.f7(1);ri=it.a_(it.z1("484",1));ci=it.a_(69);si=it.n$(+"210");it.R7(1);fi=it.a_(it.t0("148",1));it.f7(1);ui=it.n$(it.t0("192",1));oi=it.n$(+"327");_i=it.a_(99);hi=it.n$(+"382");it.R7(2);vi=it.n$(it.z1("133",4));Rt=it.n$(+"217");$i=it.a_(+"443");bi=it.a_(+"196");Ci=it.a_(+"251");ki=it.a_(+"386");yi=it.n$(+"252");pi=/edge|opr\//;o=it.a_(107);it.f7(0);Ri=it.a_(it.z1("177",0));zi=(Math,it.n$("496"|0));di=/i(Phone|Pad|Pod)/i;li=it.a_(+"466");Gi=/FxiOS\/([\d\.]+)/i;zt=it.a_(+"393");Ei=(document,it.a_("410">>32));mi=it.a_(+"214");wi=it.n$(+"132");ji=it.a_(+"171");it.R7(0);Pi=it.n$(it.z1("272",0));it.f7(1);Hi=it.n$(it.z1("286",1));it.R7(3);Oi=it.n$(it.t0(32,"473"));Di=it.a_(+"336");gi=it.n$(+"366");it.R7(1);Bi=it.n$(it.z1("367",1));xi=it.n$(121);Ui=it.n$(+"61");it.f7(1);Yi=it.a_(it.z1("337",1));it.R7(3);dt=it.n$(it.t0(32,"323"));Fi=it.n$(+"77");Qi=it.a_(+"241");Si=it.a_(+"524");Ti=it.n$(+"384");Ai=it.a_(230);Wi=it.a_(+"112");qi=it.a_(268);Vi=it.n$(+"228");Xi=it.n$(402);it.R7(5);Mi=it.n$(it.t0(0,"488"));it.f7(3);Ki=it.n$(it.z1(32,"493"));Zi=it.a_(334);it.f7(0);lt=it.a_(it.t0("164",0));it.R7(0);Ii=it.n$(it.z1("482",0));Ni=/#.*$/;Li=it.a_(+"351");it.f7(5);Ji=it.a_(it.t0(32,"55"));it.f7(4);tr=it.a_(it.t0("465",0));it.f7(0);er=it.n$(it.z1("332",0));ar=it.a_(267);it.R7(5);Gt=it.n$(it.t0(0,"423"));nr=it.a_(+"8");it.R7(0);ir=it.n$(it.t0("392",0));rr=it.a_(+"503");cr=it.a_(501);sr=it.a_(+"51");fr=it.n$(+"333");it.f7(4);Et=it.a_(it.z1("516",0));it.f7(4);ur=it.a_(it.t0("202",0));or=it.a_(372);_r=it.n$(322);it.f7(4);hr=it.a_(it.z1("117",0));vr=it.a_(+"38");$r=it.a_(+"494");br=it.a_(+St);Cr=it.n$(339);it.R7(2);kr=it.n$(it.z1("245",48));yr=it.n$(+"116");pr=it.n$(+"118");Rr=it.n$(+"441");zr=/safari/;dr=it.a_(259);it.R7(2);lr=it.a_(it.z1("401",0));mt=it.a_(155);it.f7(2);Gr=it.a_(it.z1("364",12));Er=it.a_(+"292");mr=(Object,it.a_("34">>64));wr=it.n$(+"249");jr=it.n$(2);it.R7(1);Pr=it.a_(it.z1("173",1));Hr=it.n$(+"190");it.R7(4);Or=it.n$(it.t0("422",0));Dr=(setTimeout,it.n$("421"-0));it.f7(4);gr=it.a_(it.t0("490",0));Br=/Trident\/.*?rv:([\d\.]+)(?:$|\s|\/|\))+/i;xr=it.n$(+"134");Ur=it.n$(+"362");Yr=it.a_(+"123");Fr=(+"9560","626.07"-0)>(+"6905",+"850.02")?(+"0x19e1",!1):"35.89"*1>("9672"*1,"3680">>0)?"8616"<<0>"5671">>64?(+"368.92",!![]):(it.n$("241"|0),+"0x231b"):it.n$("129"-0);Qr=it.a_(+"315");Sr=it.n$(347);Tr=it.a_(+"406");Ar=(parseInt,it.a_(+"298"));Wr=it.n$(42);qr=it.n$(+"150");Vr=it.n$(+"185");Xr=it.a_(+"72");it.f7(3);Mr=it.n$(it.t0(0,"131"));Kr=navigator;Zr=it.a_(96);Ir=it.n$(+"309");it.f7(2);Nr=it.a_(it.z1("12",12));it.R7(1);Lr=it.n$(it.t0("507",1));it.R7(0);Jr=it.n$(it.t0("475",0));t0=it.n$(+"278");e0=it.n$(+"477");a0=(clearInterval,clearTimeout,/(?:ftp|https?):\/\/([^/]+)/);n0=it.a_(+"521");i0=it.a_(+"412");r0=it.n$(54);c0=it.a_(56);s0=it.a_(+"287");f0=it.n$(+"359");u0=it.a_(33);o0=it.n$(+"486");_0=it.n$(344);h0=it.n$(+"305");v0=it.n$(+"455");wt=(+"7289",221.99)===(+"6879",+"5087")?"331.58"-0:it.a_(+"407");$0=it.n$(379);it.R7(3);b0=it.n$(it.z1(32,"394"));C0=it.a_(58);it.R7(4);k0=it.n$(it.t0("82",0));y0=it.n$(+"206");p0=it.a_(+"442");R0=it.a_(358);z0=it.n$(+"509");it.R7(2);d0=it.n$(it.z1("183",48));it.R7(4);l0=it.n$(it.z1("21",0));it.f7(5);G0=it.n$(it.z1(0,"212"));E0=it.a_(156);it.f7(4);m0=it.a_(it.t0("137",0));w0=it.a_(97);it.R7(1);j0=it.n$(it.z1("23",1));P0=it.a_(+"269");H0=it.a_(+"478");_=it.a_(+"29");it.R7(5);O0=it.n$(it.t0(32,Qt));it.R7(3);D0=it.a_(it.z1(32,"6"));g0=it.n$(158);B0=it.a_(515);x0=it.a_(426);jt=it.n$(+"430");U0=it.n$(+"373");Y0=it.a_(+"189");it.R7(5);F0=it.n$(it.z1(64,"403"));Q0=it.n$(+"176");t=window;S0=it.a_(+"26");T0=it.n$(+"179");A0=it.a_(281);it.R7(3);W0=it.n$(it.z1(64,"75"));it.R7(2);q0=it.n$(it.t0("154",26));V0=it.a_(+"414");X0=it.n$(+"432");it.f7(2);M0=it.n$(it.t0("76",8));K0=it.n$(+"221");Z0=it.a_(+"141");Pt=it.a_(+"80");it.R7(5);I0=it.a_(it.z1(64,"314"));it.R7(0);N0=it.n$(it.t0("128",0));Ht=it.n$(+"416");it.R7(2);Ot=it.n$(it.t0("120",48));it.f7(5);L0=it.a_(it.z1(64,"514"));J0=it.a_(+"172");t2=it.a_(+"439");it.R7(5);e2=it.a_(it.t0(32,"296"));Dt=it.n$(+"92");a2=/msie|trident\//;it.R7(2);n2=it.a_(it.z1("144",16));it.f7(5);i2=it.a_(it.z1(32,"193"));it.R7(0);r2=it.a_(it.z1("274",0));it.f7(1);c2=it.a_(it.z1("93",1));s2=(screen,/(?:\w+)\/([\d\.]+)(?:$|\s|\/|\))+/i);f2=it.a_(320);u2=it.a_(+"32");it.f7(4);o2=it.n$(it.t0("114",0));it.R7(4);_2=it.a_(it.t0("413",0));h2=it.n$(308);it.R7(3);v2=it.a_(it.t0(32,"438"));$2=it.a_(+"169");b2=it.a_(+"340");gt=it.n$(+"331");it.f7(0);C2=it.n$(it.z1("218",0));k2=it.a_(+"237");it.R7(5);y2=it.a_(it.t0(0,"375"));it.f7(3);p2=it.n$(it.z1(0,"431"));R2=/Version\/([\d\.]+)\s+(mobile\/[^\s]+\s+)?Safari/i;it.f7(2);z2=it.n$(it.t0("90",18));d2=it.a_(470);it.f7(5);l2=it.n$(it.t0(0,"424"));it.R7(2);G2=it.n$(it.z1("371",66));E2=it.n$(346);m2=it.a_(+"378");w2=it.a_(361);it.f7(0);j2=it.n$(it.t0("398",0));it.R7(1);P2=it.a_(it.z1("248",1));it.f7(4);H2=it.a_(it.z1("461",0));O2=it.n$(+"262");D2=it.a_(+"436");g2=it.a_(+"3");it.R7(1);B2=it.a_(it.t0("318",1));x2=/chrome|crios/;it.R7(2);U2=it.a_(it.t0("256",0));it.f7(3);Y2=it.a_(it.z1(64,"354"));it.f7(4);h=it.n$(it.z1("115",0));F2=it.a_(+"355");Q2=it.n$(+"104");S2=it.a_(277);T2=it.a_(446);A2=it.a_(41);W2=it.n$(468);it.f7(0);q2=it.a_(it.t0("368",0));Bt=it.n$(387);V2=it.a_(+"203");it.f7(4);X2=it.n$(it.z1("435",0));it.R7(5);M2=it.a_(it.z1(0,"244"));it.R7(0);K2=it.n$(it.t0("49",0));Z2=(isNaN,it.a_(+"9"));it.f7(5);I2=it.n$(it.t0(32,"284"));N2=it.a_(+"106");L2=it.a_(79);J2=it.a_(+"312");tc=it.n$(+"369");ec=it.n$(+"247");ac=it.n$(+"198");nc=(RegExp,it.a_(+"81"));ic=it.a_(+"194");it.f7(3);rc=it.n$(it.t0(64,"411"));it.R7(5);cc=it.n$(it.z1(0,"149"));sc=it.a_(326);fc=(+"778","2542"^0)>=(+"6415",+"860.55")?("921.33"*1,"989"|76)<=(303.53,8950)?it.a_("341"-0):("4870"-0,8625)<(2240,9390)?(it.a_(+"378"),"908.51"-0):(772,!!1):it.a_("187"<<32);uc=/mozilla/;it.f7(3);oc=it.a_(it.t0(32,"395"));it.R7(4);it.G4();_c=it.n$(it.z1("389",0));hc=it.a_(307);it.f7(5);vc=it.a_(it.t0(0,"454"));$c=it.n$(+"178");it.f7(4);bc=it.a_(it.t0("433",0));it.f7(1);Cc=it.n$(it.z1("24",1));kc=it.n$(+"291");it.f7(5);yc=it.n$(it.t0(0,"388"));it.f7(3);pc=it.a_(it.z1(64,"70"));Rc=it.n$(511);it.R7(0);zc=it.n$(it.z1("506",0));it.R7(0);dc=it.n$(it.z1("28",0));it.f7(4);lc=it.a_(it.t0("476",0));xt=it.n$(205);Gc=/:\d+$/;it.R7(5);Ec=it.n$(it.t0(0,"101"));mc=it.a_(448);wc=it.a_(+"85");jc=it.a_(+"391");Pc=it.a_(+"420");Hc=it.a_(+"349");Oc=it.a_(+"400");Dc=it.a_(45);gc=it.a_(380);Bc=it.a_(+"224");it.f7(3);xc=it.n$(it.t0(64,"263"));it.R7(1);Uc=it.a_(it.t0("22",1));it.R7(1);Yc=it.a_(it.z1("40",1));Fc=it.n$(+"95");it.f7(5);Ut=it.n$(it.z1(32,"94"));Qc=it.a_(113);it.R7(1);Sc=it.a_(it.z1("87",1));Tc=it.n$(+"161");Ac=it.a_(+"289");Wc=it.n$(162);qc=it.a_(+"319");Vc=/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;it.R7(3);Xc=it.n$(it.t0(0,"91"));it.R7(3);Mc=it.n$(it.z1(32,"266"));Kc=it.a_(+"342");Zc=it.a_(+"329");Ic=it.n$(+"11");Nc=it.n$(+"243");Lc=it.n$(+"462");it.R7(3);Jc=it.n$(it.z1(64,"84"));it.R7(2);t7=it.a_(it.t0("109",9));e7=/button|input/i;a7=it.a_(+"125");n7=it.a_(+"404");i7=it.n$(279);r7=it.a_(239);c7=it.a_(456);s7=/(compatible|webkit)/;f7=it.a_(+"182");it.R7(2);u7=it.n$(it.z1("50",16));o7=it.n$(103);it.f7(0);v=it.n$(it.z1("447",0));_7=it.a_(+"47");Yt=it.n$(168);h7=it.a_(+"13");v7=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|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|phone)|xda|xiino/i;Ft=it.n$(126);$7=/opera/;b7=it.n$(+"459");C7=it.a_(250);k7=it.n$(181);it.R7(3);y7=it.n$(it.z1(64,"510"));it.f7(5);p7=it.n$(it.t0(64,"143"));!function(t,h,n,F,v,c,Q,S,_,T,$,A,W,q,V,b,C,s,X){"use strict";var f="1e3";var e,k,M,u,K,o,y,p,Z,I,N,r,a,L,R,i,z,d,l,G,J,E,m,w,j,tt,et,at,P,nt,H,O,D,g,B,x,U,Y;p=t;it.f7(6);Z=it.z1(yt,se,le,wt,E2,Di,wt,_c,ri,q2,wt,Wt,$1);it.R7(7);I=it.t0(He,mr,yt,yt,Tr);it.f7(7);N=it.z1(ne,o0,I2,I2,Sr);it.f7(8);r=it.t0(j0,p);it.R7(8);a=it.z1(dc,p);it.f7(9);L=it.z1(ra,Ba,aa,p);it.R7(8);R=it.t0(Ln,p);i=Vt;z=n2;d=sr;l=H2;G=h[Za][er+Me][L1+_n+s0]();J={under:!0,newTab:!0};E=null;m=!![];w=!!"";j=function(){};it.f7(8);tt=it.z1(Hi,E2);et=v[z1+cn]||{src:null};it.R7(8);at=h[Za][it.t0(At,ln)];P=w;nt=w;H=w;O=function(){it.P4();try{return h[W0]!==h[y0]&&typeof h[W0][Jr][st][L1+Xa]()==_r?h[W0]:h[y0]}catch(t){return H=m,h[y0]}}();D=O[la][w2];g=function(){var t;it.P4();try{t=O[st][Pt]}catch(t){}return!H&&t||(J={newTab:m,under:w},t=v[Da]),t}();B={n:function(t){it.P4();typeof h[Li]!=Ya&&h[Li][q0]&&S[r1][ft](h[Li][q0],console,t)},t:[],r:function(){it.P4();for(var t=rt<<32;t>32,r[u0]=+"1",Y._&&(r[ge]+=Y.d?+"46":52),Y.v&&(r[xc]-="5"-0,r[ge]-=+"4"),typeof t==Va&&(r=x.m(r,t)),r},a:function(t,e){it.P4();try{return!(!t[Hn][e]||!t[Hn][e][ga])}catch(t){return w}},D:function(t){it.P4();t=this.z(t);return t&&t[Pt]&&!qn[ot](t[Pt])?t[Pt]:w},R:function(t){for(var e,a=[Gi,Pe,Ua,ve,F1,R2,w1,Br,s2],n=rt|0;n>32]):E}};K={dt:function(t,e,a,n,i){var r,i;if(u._t()){return u.dt(t,e,a,n,i)}if(o._t()){r={};i=(new s)[Yt+xe]()+ +"1800000";typeof a==Va?i=a[Yt+xe]():typeof a==ei&&(i=(new s)[Yt+xe]()+f*1*a);r[Ce]=e;r[ui]=i;r[m2]=n||I2;try{o.dt(t,V[P1](r))}catch(t){}}},vt:function(t){var e;if(u._t()){return u.vt(t)}it.P4();if(o._t())try{e=V[sn](o.vt(t));return rt>>64!==O[st][Mr][sc+oc](e[m2])?null:e[ui]<(new s)[Yt+xe]()?(o.mt(t),null):e[Ce]}catch(t){}return null},mt:function(t){return u._t()?u.mt(t):o._t()?o.mt(t):void(rt<<0)}};(M=function(t,e,a){a=a||{};a[$n]=e;this.bt(a);this.yt.gt||(this.yt.gt=p+t);this.kt()})[jt]={yt:{},wt:null,xt:{St:m,Tt:E,Ot:E,Et:E,gt:E,Ct:m,Ft:w,Mt:m,It:j,At:null,jt:j,Lt:w,Pt:I2},Wt:x.l(),Bt:x.u([[Oa,0]]),zt:x.u([[u0,1]]),Dt:x.u([[Tn,+"1"]]),Ut:x.u([[st,rt<<32],[Tn,+rt]]),Rt:x.u([[u0,rt^0]]),Nt:x.u([[ir,+rt]]),Ht:x.u([[st,rt<<96]]),setOptions:function(t){it.G4();return this.bt(t)},Jt:function(){it.G4();var t,e;e={};for(t in this.yt){c[jt][Or+ur+$2][ft](this.yt,t)&&+"3"<=t[Dt]&&(e[t]=this.yt[t])}return e},bt:function(t){var e,a,n,i;for(a in this.yt=x.m(this.Wt,this.xt,this.yt,t||{}),this.yt){if(c[jt][Or+ur+$2][ft](this.yt,a))switch(n=this.yt[a],a){case Nt:this.yt.Ot=n;break;case $n:this.yt.Et=n;break;case Aa:this.yt.Ct=(n+Et)[L1+_n+s0]();break;case f0+dt:this.yt.gt=n;break;case f0+X1:this.yt.Tt=n;break;case f0+Gr:this.yt.Pt=n;break;case f0+fn:this.yt.At=n;break;case U2:this.yt.St=n;break;case C2+Ji:this.yt.Ft=n;break;case Jc+sa:this.yt.jt=n;break;case I0+sa:this.yt.It=n;break;case R0+Rn:this.yt.Lt=n;break;case T2+qa:this.yt.Mt=n}}if(!Y.et&&!this.yt.Ft)for(i=[[Y.v&&+"11"===Y.ut,this.Nt],[Y._&&Y.ut<("41"^0),this.zt],[Y._,this.Bt],[Y.p&&Y.ut<47,this.Dt],[Y.ot,this.Rt],[Y.rt,this.Ht],[Y._&&+"59"<=Y.ut,this.Ut],[Y.ot&&"46"<<32<=Y.ut,this.Ut]],e=rt>>64;e>0:t+("1"|1)))!==e.Zt[Yt+zt](Ke)&&e.Zt[Se+zt](Ke,t)},150)},Xt:function(){it.G4();var t;t=x.F(hr,x.u([[ia,R]]),Et);return this.Kt[kt+dt][L1+_n+s0]()===b1?v[b1][Qr+kc](t):this.Kt[wi+Dr][vi+Ca](t,this.Kt[mc+Ra]),t}};y.ie=function(t){it.P4();var e;it.f7(7);e=it.t0(e1,Wr,L0,L0,p);try{t[Xi+zt](e)}catch(t){}};y.ne=function(t){var e;it.R7(7);it.G4();e=it.z1(e1,Wr,L0,L0,p);t[Yt+zt](e)||t[Yt+zt](ia)===R||(t[Se+zt](e,"1"<<0),new y(t))};(e={pt:function(){it.P4();for(var t=this.oe(),e=rt|0;e>32<=Y.ut&&Y.ut<"85"*1}]),t[Bt]([this.pe,function(){return Y.p&&Y.ut<65}]),t[Bt]([this.le,function(){return Y.v&&"11"-0<=Y.ut}]),t[Bt]([this._e,function(){return Y.st}]),t[Bt]([this.de,function(){return Y.ot&&Y.Z&&Y.ut<49}]),t[Bt]([this.ve,function(){it.P4();return Y.ot&&Y.Z&&-+"1">32!==f[Yt+zt](Pt)[sc+oc](Ur)&&(s=f[Yt+zt](Pt))===Et&&(s=g)),f&&f[kt+dt]===Le&&f[Yt+zt](yr)===ut+Ct&&x.a(f,Pt)&&(x.o(f),$(function(){it.P4();try{f[b7]=E}catch(t){}},"3e3"<<64),k.yt.Be?s=f[Yt+zt](Pt):(s=g,Y.et&&(Y.ot?_[Bt](function(){it.G4();D(f[Yt+zt](Pt),ut+Ct)}):$(function(){it.P4();D(f[Yt+zt](Pt),ut+Ct)},+"20")))),Y.X&&Y.ot||Y.X&&Y.it&&!Y.p&&!Y._&&!Y.st?(D(s,ut+Ct),x.U(pr,function(){it.P4();x.O(t)},o)):!Y.et&&x.c(f,yr)!==ut+Ct&&(Y.ot&&Y.it||Y.st&&Y.ut>64)},be:w});e.ve=function(t){this.me(t)};e.ve[jt]=x.m(e.re[jt],{we:function(t,e,a,n,i){it.G4();v[Jr+ec][Xc+Ci]()[P2](function(){v[wn+Ci]()});i(this.Oe(t,a,n))},be:w});e.de=function(t){it.G4();this.me(t)};e.de[jt]=x.m(e.re[jt],{we:function(t,e,a,n,i){var n,r;n=this.Oe(t,a,n);it.R7(0);r=k.ze(it.t0(f,0));U.$(h,k2,function(){$(function(){it.G4();x.x(r)},Tt*1)});n[A0]=function(){it.P4();$(function(){x.x(r)},10)};i(n)}});e._e=function(t){this.me(t)};e._e[jt]=x.m(e.re[jt],{be:w,we:function(t,e,a,n,i){h[Nt]=x.J(+"5");n=this.Oe(t,a,n);it.G4();this.Oe(Et,h[Nt],Et);h[Nt]=E;i(n)}});e.le=function(t){it.P4();this.me(t)};e.le[jt]=x.m(e.re[jt],{be:w,we:function(t,e,a,n,i){var r,n;r=this.Oe(H?t:g,a,n);n=function(){r[st][Pt]=t};U.$(r,Zi,n);r[Zi]();O[k2]();it.f7(4);$(n,it.t0(Qt,0));i(r)}});e.ue=function(t){it.P4();this.me(t)};e.ue[jt]=x.m(e.re[jt],{De:gr+zc+N2+V1+rc+Vi+ct+Je+Ic+t0+Zc+Hc+An+Hr+gc+M0+ni+$t+a7+$t+hi+S0+m0+gc+f7+A2+N1+me+Ie+_e+gt+oa+$t+Ie+Ka+ct+gt+h2+Z2+Hc+t1+Fa+ze+$t+Ka+m0+gc+f7+N2+M0+Oe+R1+ze+$t+Ka+l2+gc+f7+N2+M0+c0+Nc+cc+$t+Ka+ha+pc+me+N0+Ae+Y2+ct+zc+bc+f7+ar+$t+Ka+i0+C0+hi+de+Yc+pc+E0+ni+$t+r0+Oe+R1+ze+$t+Pi+o2+d0+g0+$t+Ka+Hr+gc+f7+N2+M0+$t+Fn+hi+u7+Uc+de+v1+Hr+gc+f7+A2+N1+me+Ie+o2+li+ac+ct+gt+pe+Mc+ai+de+gt+B1+gt+z0+fc+v2+ct+gt+Bc+$t+$c+gt+Mn+Cc+o2+Sc+Hc+Kc+La+a7+mt+xa+dn+Ic+w0+hi+u7+Uc+de+v1+K0+gc+f7+A2+N1+me+Ie+Er+R1+fi+x0+bi+h0+de+gt+B0+c0+Nc+za+gr+fc+zc+me+Yr+fc+o2,we:function(e,a,n,t,i){var r,c,s,f,u;f=this;u=w;try{(c=this.Oe(Pc+Rt+Ct,ut+Ct))[Jr][Vn](it.t0(Di,nn,k0,I2,se,b1,I2,Di,se,b1,se,se,I2,se,Di,Di,Di,nn,se,Di,k0,it.f7(19)));U.$(c,Ai,function(){u||(u=m,r=c[Ar]=D(Pc+Rt+Ct,n,f.Ce(a)),U.s(c,k2,t),s=$(t,"3e3"|48),c[Jr][b1][Be+Ic+mt+gc+Qi]=f.Ue()[+"1"][mi+Ic+mt+gc+Qi]);function t(){it.f7(7);c[Jr][b1][it.t0(Be,Qi,gc,Ic,mt)]=Et;c[ya]();f.Te(r,a);it.P4();r[st][zn](e);i(r);A(s)}})}catch(t){}},Ue:function(){var t,e;t=x.F(Va,{data:x.S(lr+I2+P0,this.De)+x.J(+"3")});it.P4();e=x.F(hr,{style:an+Rt+O0+_t+xc+Rt+_0+_t+ge+Rt+_0+_t+Cr+Rt+Nr+_t+W0+Rt+Zt+Ia+_t+F2+Rt+da+_t+f2+L0+De+Rt+U1+_t+Ki+Rt+O0+_t});return e[Qr+kc](t),[t,e]}});e.he=function(t){it.P4();this.me(t)};e.he[jt]=x.m(e.ue[jt],{we:function(t,e,a,n,i){var r,c;c=x.k(m);U.$(h,k2,function(){it.P4();x.x(c);r[st][zn](t);i(r)});it.f7(17);r=this.Oe(it.z1(Pc,Ct,Rt),it.z1(Ct,ut,it.R7(8)));c[ii+We][Jr][Vn](this.Ue()[+"1"][mi+Ic+mt+gc+Qi])}});e.ae=function(t){it.G4();this.me(t)};e.ae[jt]=x.m(e.re[jt],{me:function(t){var e,a;a=this;this.Re=_[Y0]();this.ge=t;e=k.Se();it.R7(20);t=x.j(e,it.z1(mt,mt,N2,fc,ie,$a));(e[kt+dt]===Le&&e[Yt+zt](ut+yr)!==ut+Ct&&!x.P(e)||t&&!x.P(t))&&(this.be=m);U.s(h,K2,function t(e){it.P4();try{e[e1].Re===a.Re&&a.Ne(e[e1]);e[e1].He&&U.G(h,K2,t)}catch(t){}})},be:w,Ve:function(t){it.P4();h[vc+Zr](t,h[st][Xn])},Ne:function(t){var e,a,n;e=this;a=w;it.f7(17);n=this.Oe(it.t0(Pc,Ct,Rt),t.Ot||ut+Ct,t.Je||Et);t.He&&(n&&n[ya](),a=m);!a&&n&&$(function(){n[st][Pt]=t.Et;t.qe&&e.qe(n)},+Qt)},we:function(t,e,a,n,i){this.qe=i;this.Ve({Re:this.Re,Je:n,Et:t,qe:m});this.Ve({Re:this.Re,He:m,Et:Pc+Rt+Ct})}});e.se=function(t){this.me(t)};e.se[jt]=x.m(e.re[jt],{be:w,we:function(t,e,a,n,i){var r,c;r=Y.d?rt^0:"9999"-0;it.P4();it.f7(17);c=this.Oe(it.t0(Pc,Ct,Rt),a,it.z1(ht,F2,Gt,ht,ee,Zt,Zt,ht,ge,xc,r,Gt,W0,ht,Gt,it.f7(21)));c[Jr][Vn](se+I1+Di+ba+wt+zi+ht+da+_t+Ut+wt+D2+Ht+xt+bt+wt+pn+Ht+zi+Di+da+xt+g2+_t+wt+zi+ht+o0+_t+wt+Se+f1+Ht+Ut+Ht+xt+bt+wt+pn+wt+Ht+Ot+ct+Di+Zt+xt+wt+la+yt+ic+r7+Ht+da+Gt+da+xt+_t+wt+Ta+wt+la+yt+ic+r7+Ht+r+Gt+ee+xt+wt+pt+Gt+wt+_7+xt+wt+pt+Se+si+Ht+Ut+Ht+xt+bt+wt+ba+wt+kn+gt+ht+Ot+gt+Gt+kn+ct+ht+Ot+ct+Gt+_1+ht+Se+f1+Ht+Ut+Ht+xt+bt+wt+pn+wt+Ht+kn+gt+wt+Xt+ht+wt+Ot+gt+wt+be+be+wt+kn+ct+wt+Xt+ht+wt+Ot+ct+xt+wt+bt+wt+en+f1+Ht+_1+xt+_t+wt+D2+Ht+xt+_t+wt+pt+wt+kn+gt+wt+ht+wt+Ot+gt+_t+wt+kn+ct+wt+ht+wt+Ot+ct+_t+wt+pt+Gt+wt+ae+xt+_t+pt+Gt+wt+ae+xt+_t+Jr+yt+p0+ht+D2+_t+Ut+wt+Ye+Ht+xt+bt+la+yt+ic+r7+Ht+da+Gt+da+xt+_t+la+yt+Qc+r7+Ht+(e[xc]||F[xc])+Gt+(e[ge]||F[ge])+xt+_t+la+yt+st+yt+Pt+wt+ht+wt+Q2+t+Q2+_t+pt+la+yt+A0+wt+ht+wt+Ye+_t+Se+si+Ht+Ye+Gt+wt+g1+wt+jc+wt+D1+xt+_t+se+I2+I1+Di);U.$(c,Zi,function(){i(c)})}});k={zi:function(t){this.vi.mi=t;this.vi.V=x.V()},pn:function(t,e,a){for(var n,i=+rt,r=e===un?this.yt.ti:this.yt.Xe;a&&r[Dt];){r[b0]()}it.G4();for(;i=this.yt.Ze},Yi:function(){for(var t,e=+rt;e>0,f));this.Ti(t,r,i,o);this.Pi(t,t[Dt],e,f,o);this.Ai(a,a[Dt],n,f,o);this.Si(t,t[Dt],x.T(),o);0>32===Y.ut&&(a=w),this.yt.Ee=a;break;case a1+Dn:this.yt.si=a;break;case d1+we+Wc+Sn+Sa:this.yt.Be=a}}return this},Ai:function(t,e,a,n,i){it.G4();for(var r,c=0;c>c+ +"3"))||i(a[c+ +"2"*e],t[c]*(t[rt|0]+t[+"1"]+t["2"^0])+(a[c]<>c)))||n<1&&(i(a[c+e],t[c]*a[c]+c)||i(a[c+ +"2"*e],t[c]*(t[rt^0]+t[+"1"]+t[+"2"]))||i(a[c+3*e],_[ke](t[rt<<64]*t["1"*1]*t["2">>0]/r)+r))));c++){}},Ei:function(){var t,e;t=x.V();e=x.V(N);it.f7(22);it.P4();this.ai.li=it.t0("31536000000",e,0,t);this.ai.li&&(this.xi=j)},Vi:function(t){try{return t[M1]&&+rt!==t[M1]||this.vi.V+ +"150">x.V()}catch(t){return w}},sn:function(){it.P4();return x.u([[U0,this.yt.$e],[Z0,this.yt.Ge],[_a,this.yt.Ye],[xr+X2,this.yt.ce],[sr+Pr,this.yt.Le],[un+h1,this.yt.Ke],[m1,this.yt.Ze],[lc+r7,this.yt.Xe],[un+r7,this.yt.ti],[On,this.yt.ei],[L2+xi,this.yt.ii],[L2+Wa,this.yt.ni],[K1+Qe+Sa,this.yt.ri],[b0+V2+Y1,this.yt.Yt],[Na+Jt,this.yt.oi],[R0+jn+Ei,this.yt.Ee],[a1+Dn,this.yt.si],[d1+we+Wc+Sn+Sa,this.yt.Be]])},ze:function(t){var e,a;e=x.k(m);a=e[ii+We][Jr][S1+ec](I1);return rt>>0===h[st][Pt][sc+oc](qi+Rt)?a[Be+Ic+mt+gc+Qi]=Et+tr+wt+bt+Za+yt+O2+yt+Yt+c1+F0+Ht+Ut+Ht+xt+bt+pt+xt+_t+pt+wt+e2+wt+Ht+ui+xt+wt+bt+pt:a[Be+Ic+mt+gc+Qi]=Et+tr+wt+bt+wa+yt+Xc+je+Ht+Ut+Ht+xt+bt+pt+xt+_t+pt+wt+e2+wt+Ht+ui+xt+wt+bt+pt,e[ii+We][Jr][b1][Qr+kc](a),typeof t!=ei&&typeof t!=Ya||$(function(){it.P4();x.x(e)},t||500),e},Mi:function(t,e){it.P4();this.Ie.Kt=t;this.Ie.P=e},be:function(){var t,e,a;e=this.Se();a=this.vi.mi;try{(t=v[S1+lt](Xe+Oc))[a1+Xe+lt](ka,m,m,h,1,a[Ot+gt],a[Ot+ct],a[hn+gt],a[hn+ct],w,w,w,w,0,E);t[ua]=m;e[Q1+lt](t)}catch(t){B.e(t)}},Xe:function(){var t;t=x.y(arguments[+rt])?arguments[rt|0]:arguments;return this.pn(t,lc,t[Dt]&&t[rt<<0]===w)},rn:function(){it.G4();return this.yt.Xe},Lt:function(t){var e,a,t;e=typeof t==Ya?m:!!t;it.R7(8);a=it.z1(Ir,p);t=v[Yt+ec+_i+t2](a);it.P4();e?t||(t=x.F(oe,{id:a,name:Da,content:R0+L0+Da}),v[Yt+Qn+_i+p1+dt](k0)[rt-0][Qr+kc](t)):t&&x.x(t)},Ui:function(){var i,r,c,s,f;s=this;it.R7(3);it.P4();f=it.z1(0,St);U.s(v,n0,function(t){var e;+rt!=t[n1+on][Dt]&&(e=t[n1+on][rt^0],i=t[fa+i2],r=e[Mi+gt],c=e[Mi+ct])},m);U.s(v,C1,function(t){var e,a,n;it.f7(8);e=t[it.z1(on,n1)][+rt];a=U.Y(t);n=s.yt.oi;it.G4();_[Ma](e[Mi+gt]-r)>=n||_[Ma](e[Mi+ct]-c)>=n||t[fa+i2]-i>f||s.yt.oi<=0||Y.st&&e7[ot](a[kt+dt])||s.ai.fi||s.ai.pi||s.ai.li||s.yi()||s.ki()||!s.Wi()||!s.Bi(a)||!s.yt.Ke&&x.P(a)||(n=a,t=e,a=Y._?Cn:ka,(e=v[S1+lt](Xe+Oc))[a1+Xe+lt](a,m,m,h,+"1",t[Ot+gt],t[Ot+ct],t[hn+gt],t[hn+ct],w,w,w,w,rt|0,E),e.fc=m,n[Q1+lt](e))},m)},Hi:function(){var t;it.P4();t=+rt;return o._t()?(t=o.vt(a),o.mt(a)):u.vt(a)&&(v[Da]===n[Pt]||~n[Pt][sc+oc](k7+u.vt(r)))&&(t=u.vt(a),$(function(){u.mt(a);u.mt(r)},"300"-0)),t=b(t,Tt^0),t=C(t)?rt^0:t,this.ai._i=t},an:function(t,e){return new M(this.Qe[Dt],t,e)},en:function(){return this.ai._i},Gi:function(){it.P4();this.Qe=[]},wi:function(){o.dt(L,x.V())},vi:{mi:{},V:+rt},un:function(t,e){var a,n,i,e;i=this;e=this.an(t,e);this.Qe[Bt](e);this.Qi(e);this.hn||(k.Li(),Y._&&((n=v[S1+ec](hr))[ut+ut+te+mn+ut+ut](j2,function(){P=m}),P=m,a=W(function(){if(P=w,!i.yt.Ye){if(typeof h[Li]!=Va||typeof h[Li][q0]!=Ut){return P=m,void q(a)}h[Li][q0](n);h[Li][en]()}},St^0)),this.hn=m)},ci:E,di:[],ti:function(){var t;t=x.y(arguments[rt<<0])?arguments[+rt]:arguments;it.P4();return this.pn(t,un,t[Dt]&&t[rt>>32]===w)},Qt:function(){it.G4();return this.yt.$e},in:function(){var t;t=b(o.vt(L),Tt*1);return C(t)?rt<<32:t},Li:function(){var e,a,n,i,r,c,s,f,u;s=this;f=s.yt;u=w;(function(){var t;gi in v[Jr+ec]||(t=Y.p||Y.v?Ai:Cn,U.s(v,t,_,m));U.s(v,ka,_,m)})();this.Ui();this.Ri();this.Ni();this.Hi();function o(t){return++c,t&&B.e(c),t}function _(t){it.P4();it.R7(4);c=it.t0(rt,0);u||(u=m,$(function(){u=w},Y.et?+St:+"150"),P&&!f.Ge||(e=U.Y(t),a=x.j(e,Le),r=x.P(e),e[Yt+zt](ia)===R?(e[Ke][Ac]=U1,x.x(e),e=U.Y(t,m),$(function(){it.P4();y.ie(e)},"3e3">>96)):a&&(n=(e=a)[Yt+zt](yr),i=x.D(e),r=x.P(e)),s.Mi(e,r),s.ai.fi||s.ai.pi||s.ai.li||t[ua]||o(s.vi.mi[G0]&&s.vi.mi[G0]!==t[G0])||o(f.si&&!nt)||o(!t[hn+gt]&&!t[hn+ct])||o(!Y.et&&!Y.v&&typeof t[M1]!=Ya&&(rt^0)!==t[M1])||o(!Y.et&&!s.ci&&(Y.rt||Y._||Y.ot))||o(!Y.et&&!f.ri&&(Y._||Y.ot)&&n===ut+Ct)||o(s.yi())||o(s.ki())||o(!s.Wi())||o(!s.Bi(e))||o(r&&!f.Ke)||o(!Y.et&&!f.ni&&t[hn+gt]+(Y.Z?17:"15"^0)>h[Be+Mt])||(s.zi(t),Y.X&&a&&i&&s.We(t),Y.p&&65<=Y.ut&&a&&!r&&(x.o(e),$(function(){it.G4();try{e[b7]=E}catch(t){}},1)),Y.et||!a||r||(Y._&&n!==ut+Ct&&x.Q()||f.ri&&n===ut+Ct&&(Y._||Y.ot))&&s.We(t),s.Di=E,s.bi())))}},i:function(){it.P4();return this.yt.Ge||this.yt.$e},Qi:function(){it.P4();if(!this.ai.hi){this.ai.hi=m;try{this.Ei();this.Ci()}catch(t){this.ai.pi=+"1"}B.e([this.ai.pi?0:"1"<<32,this.ai.li?+rt:"1">>64,this.ai.ji][ca](Et))}},$i:function(){return this.Qe},xi:function(t){if(this.ai.fi||this.ai.pi||this.ai.li){return w}it.G4();switch(t.wt){case z:new e.Pe(t).ye();break;case l:new e.Ae(t).ye();break;case d:new e.Fe(t).ye();break;case i:try{new(e.pt())(t).ye()}catch(t){B.e(t)}}return t.Vt(),m},Pi:function(t,e,a,n,i){for(var r,c=rt^0;c>c),a[2*e+c])||i(r[Dt]*a[c]*+"3"+(a[c]<>64;rx.V()},Si:function(t,e,a,n){it.G4();this.Ii(a,t,m)||n(m,w)},Ni:function(){var e,a;a=this;this.ci=x.F(hr,{style:xc+Rt+Zt+Ia+_t+ge+Rt+Zt+Ia+_t+Cr+Rt+u2+_t+W0+Rt+da+_t+F2+Rt+da+_t+k1+L0+sc+Rt+Fi+_t+Ac+Rt+U1+_t},Et);e=W(function(){var t;it.G4();t=v[b1];t&&(q(e),t[Qr+kc](a.ci))},Qt|32)},Se:function(){return this.Ie.Kt},on:function(){it.G4();return this.yt.ti},Bi:function(t){var e;e=+rt;if(!t||this.Zi(t)){return w}it.G4();if(!this.yt.Xe[Dt]||t[Yt+zt](ia)===R){return m}for(;e>0>32)<(E2+yt)[sc+oc](e[c][rt<<64])?e[c]:i+e[c],r[Ze](r[Dt]-n[Dt])===n||a&&n===tt){return m}}return w}};U.s(h,q1,function(){it.G4();nt=m});$(function(){it.R7(23);B.e(it.z1(E2,ri,wt,wt,wt,yt,s1,cn,p7));it.R7(8);B.e(it.z1(Rt,Pn),Z);it.f7(8);B.e(it.t0(Rt,Fe),I);it.f7(8);B.e(it.z1(Rt,Ec),N)},+Tt);h[p]=h[p]||function(){var t,e,a,n,i,r;it.P4();i={};r=x.u([[Ft+_2+O1,[k,k.i]],[Bn,I],[Ja,Z],[ue+ti,N],[Rr,[k,k.cn,i]],[Yt+b2,[k,k.sn]],[Yt+S2+r7,[k,k.rn]],[Yt+Wc+r7,[k,k.on]],[L2+ec,[k,k.qi]],[Dc,[k,k.un,i]],[Ti,[k,k.bi,i]],[ce,[k,k.nn,i]],[lc+r7,[k,k.Xe,i]],[un+r7,[k,k.ti,i]],[Yt+e0+ec,[k,k.Se]],[Yt+d2+dc,[k,k.en]],[Yt+fr+dc,[k,k.tn]],[Or+fr,[k,k.Wi]],[Ft+In+Kt,[k,k.yi]],[Yt+Ba+sa+ra,[k,k[it.n$("377"*1)]]],[Yt+Ba+lt,[k,k.Oi]],[Te,[k,k.Yi]],[Yt+i7,[k,k.$i]],[Yn+i7,[k,k.Gi]],[Gn+yt+q0,[B,B.e]],[Gn+yt+Tc,[B,B.r]],[oi+yt+Se,[u,u.dt]],[oi+yt+Yt,[u,u.vt]],[oi+yt+Xi,[u,u.mt]],[H1+yt+Ft+yn,[o,o._t]],[H1+yt+Se,[o,o.dt]],[H1+yt+Yt,[o,o.vt]],[H1+yt+Xi,[o,o.mt]],[vt+yt+Bn,Y.ut],[vt+yt+pa+Fe,Y.ct],[vt+yt+Ft+Ee,Y.K],[vt+yt+Ft+Wi,Y.Z],[vt+yt+Ft+re,Y.d],[vt+yt+Ft+$t+$a+M0,Y.X],[vt+yt+Ft+qc,Y.tt],[vt+yt+Ft+j1,Y.et],[vt+yt+Ft+y1,Y.it],[vt+yt+Ft+Jn,Y.nt],[vt+yt+Ft+X2,Y._],[vt+yt+Ft+ye,Y.p],[vt+yt+Ft+X0,Y.st],[vt+yt+Ft+$t+V1,Y.v],[vt+yt+Ft+J0,Y.rt],[vt+yt+Ft+J2,Y.ot],[vt+yt+Bn+A1,[Y,Y.N]],[vt+yt+Vt+yn,[Y,Y.ft]],[lt+yt+lc+or,[U,U.$]],[lt+yt+lc,[U,U.s]],[lt+yt+l1,[U,U.G]],[lt+yt+Yt+Sn,[U,U.Y]],[J1+yt+Ft+we+nr,[x,x.g]],[J1+yt+Bn+A1,[x,x.N]],[J1+yt+fa,[x,x.V]],[J1+yt+fe,[x,x.m]],[J1+yt+V0,[x,x.J]],[J1+yt+S1+ec,[x,x.F]],[J1+yt+Xi+ec,[x,x.x]],[J1+yt+Yt+nc,[x,x.j]],[J1+yt+ma+si,[x,x.U]]]);for(e in r){if(c[jt][Or+ur+$2][ft](r,e)){for(n=e[Ga](yt),t=i,a=+rt;a>o0[0];break;case 3:s8=o0[1]|o0[0];break}return s8},R2S820c:function(G2){z=G2}}})();function L1nimZ(I4){function A7(j9){var Z8=2;for(;Z8!==5;){switch(Z8){case 2:var S1=[arguments];return S1[0][0].Array;break}}}function A3(s6){var c1=2;for(;c1!==5;){switch(c1){case 2:var R4=[arguments];return R4[0][0].String;break}}}function B$(f$){var X1=2;for(;X1!==5;){switch(X1){case 2:var h5=[arguments];return h5[0][0].Function;break}}}function v_(x1,Z7,W3,Q4,X$){var k_=2;for(;k_!==6;){switch(k_){case 2:var I0=[arguments];I0[8]="operty";I0[5]="";I0[5]="nePr";k_=3;break;case 3:I0[2]="defi";I0[6]=true;I0[6]=false;try{var K5=2;for(;K5!==13;){switch(K5){case 2:I0[9]={};I0[1]=(1,I0[0][1])(I0[0][0]);I0[4]=[I0[1],I0[1].prototype][I0[0][3]];K5=4;break;case 4:K5=I0[4].hasOwnProperty(I0[0][4])&&I0[4][I0[0][4]]===I0[4][I0[0][2]]?3:9;break;case 3:return;break;case 9:I0[4][I0[0][4]]=I0[4][I0[0][2]];I0[9].set=function(d2){var v3=2;for(;v3!==5;){switch(v3){case 2:var z8=[arguments];I0[4][I0[0][2]]=z8[0][0];v3=5;break}}};I0[9].get=function(){var r2=2;for(;r2!==14;){switch(r2){case 2:var b3=[arguments];b3[7]="";b3[7]="";b3[7]="ine";r2=3;break;case 3:b3[1]="undef";b3[6]=b3[1];b3[6]+=b3[7];b3[6]+=W1[6];r2=6;break;case 6:return typeof I0[4][I0[0][2]]==b3[6]?undefined:I0[4][I0[0][2]];break}}};I0[9].enumerable=I0[6];K5=14;break;case 14:try{var E6=2;for(;E6!==3;){switch(E6){case 2:I0[7]=I0[2];I0[7]+=I0[5];E6=5;break;case 5:I0[7]+=I0[8];I0[0][0].Object[I0[7]](I0[4],I0[0][4],I0[9]);E6=3;break}}}catch(R7){}K5=13;break}}}catch(w4){}k_=6;break}}}function j3(w_){var C6=2;for(;C6!==5;){switch(C6){case 2:var B7=[arguments];C6=1;break;case 1:return B7[0][0];break}}}var a$=2;for(;a$!==180;){switch(a$){case 183:t4(A7,"push",W1[41],W1[85]);a$=182;break;case 33:W1[16]="m0C";W1[44]="";W1[44]="cu";W1[90]="";W1[90]="Y";a$=28;break;case 2:var W1=[arguments];W1[9]="";W1[9]="";W1[9]="p";a$=3;break;case 27:W1[11]="k";W1[84]="M";W1[5]="E_GT";W1[77]="";a$=23;break;case 131:W1[35]+=W1[18];W1[35]+=W1[65];W1[53]=W1[25];W1[53]+=W1[32];a$=127;break;case 28:W1[10]="";W1[10]="r";W1[93]="";W1[93]="V";a$=41;break;case 82:W1[24]="";W1[24]="o3";W1[79]="abstra";W1[66]="ct";a$=78;break;case 45:W1[20]="h";W1[65]="";W1[82]="u0VV";W1[23]="K";W1[65]="U";a$=61;break;case 135:W1[69]=W1[52];W1[69]+=W1[38];W1[69]+=W1[59];W1[35]=W1[95];a$=131;break;case 167:W1[31]=W1[2];W1[31]+=W1[92];W1[31]+=W1[1];W1[30]=W1[11];a$=163;break;case 108:W1[85]+=W1[38];W1[78]=W1[12];W1[78]+=W1[96];W1[78]+=W1[14];a$=135;break;case 186:t4(A7,"splice",W1[41],W1[53]);a$=185;break;case 98:W1[98]="";W1[98]="W5w";W1[41]=1;W1[62]=6;a$=94;break;case 163:W1[30]+=W1[7];W1[30]+=W1[9];a$=161;break;case 75:W1[12]="x5";W1[15]="x";W1[38]="ua";W1[59]="l";W1[96]="ge";a$=70;break;case 23:W1[77]="8";W1[46]="";W1[21]="6p9";W1[46]="78";W1[16]="";a$=33;break;case 117:W1[37]+=W1[66];W1[68]=W1[24];W1[68]+=W1[67];W1[68]+=W1[34];a$=113;break;case 155:t4(A7,"join",W1[41],W1[27]);a$=154;break;case 3:W1[7]="";W1[7]="$xt";W1[1]="";W1[1]="PEa";a$=6;break;case 136:W1[22]+=W1[4];W1[54]=W1[8];W1[54]+=W1[3];W1[54]+=W1[84];a$=167;break;case 127:W1[53]+=W1[82];W1[64]=W1[47];W1[64]+=W1[45];W1[64]+=W1[92];W1[94]=W1[17];W1[94]+=W1[33];a$=121;break;case 61:W1[95]="";W1[95]="C3";W1[14]="";W1[14]="Ri";W1[18]="CuR";a$=56;break;case 157:t4(S4,"random",W1[62],W1[22]);a$=156;break;case 144:W1[27]=W1[16];W1[27]+=W1[93];W1[27]+=W1[46];W1[76]=W1[23];a$=140;break;case 49:W1[36]="2CD";W1[45]="_of1";W1[47]="";W1[47]="S";a$=45;break;case 161:var t4=function(R5,y2,l3,Z$){var m$=2;for(;m$!==5;){switch(m$){case 2:var m2=[arguments];v_(W1[0][0],m2[0][0],m2[0][1],m2[0][2],m2[0][3]);m$=5;break}}};a$=160;break;case 70:W1[55]="";W1[55]="";W1[55]="g3I";W1[40]="";W1[40]="ze";a$=90;break;case 90:W1[51]="";W1[51]="__opt";W1[34]="";W1[39]="imi";a$=86;break;case 6:W1[3]="";W1[3]="3";W1[8]="";W1[8]="E1r";a$=11;break;case 11:W1[4]="";W1[4]="";W1[4]="Um";W1[6]="";a$=18;break;case 160:t4(j3,"String",W1[62],W1[30]);a$=159;break;case 181:t4(j3,W1[37],W1[62],W1[89]);a$=180;break;case 158:t4(j3,"Math",W1[62],W1[54]);a$=157;break;case 159:t4(A3,"fromCharCode",W1[62],W1[31]);a$=158;break;case 148:W1[86]+=W1[19];W1[81]=W1[28];W1[81]+=W1[90];W1[81]+=W1[44];a$=144;break;case 153:t4(A3,"charCodeAt",W1[41],W1[86]);a$=189;break;case 37:W1[33]="";W1[33]="2P$0";W1[17]="";W1[17]="E";W1[28]="l1k";W1[92]="$";W1[45]="";a$=49;break;case 86:W1[34]="";W1[34]="kLK";W1[67]="";W1[67]="7";a$=82;break;case 140:W1[76]+=W1[77];W1[76]+=W1[5];W1[22]=W1[6];W1[22]+=W1[21];a$=136;break;case 185:t4(V1,"test",W1[41],W1[35]);a$=184;break;case 41:W1[87]="";W1[19]="BM";W1[87]="";W1[87]="f4NB";a$=37;break;case 188:t4(A7,"unshift",W1[41],W1[94]);a$=187;break;case 156:t4(A7,"sort",W1[41],W1[76]);a$=155;break;case 182:t4(j3,W1[26],W1[62],W1[68]);a$=181;break;case 121:W1[94]+=W1[23];W1[57]=W1[87];W1[57]+=W1[93];W1[57]+=W1[20];W1[86]=W1[10];W1[86]+=W1[36];a$=148;break;case 189:t4(A3,"split",W1[41],W1[57]);a$=188;break;case 187:t4(B$,"apply",W1[41],W1[64]);a$=186;break;case 56:W1[15]="";W1[32]="4";W1[52]="__resid";W1[25]="w";a$=75;break;case 113:W1[26]=W1[51];W1[26]+=W1[39];W1[26]+=W1[40];W1[85]=W1[55];W1[85]+=W1[15];a$=108;break;case 154:t4(j3,"decodeURI",W1[62],W1[81]);a$=153;break;case 184:t4(j3,W1[69],W1[62],W1[78]);a$=183;break;case 78:W1[97]="";W1[97]="";W1[97]="__";W1[29]="";W1[29]="D";W1[83]="";W1[83]="EB";a$=98;break;case 18:W1[2]="W";W1[6]="";W1[6]="d";W1[5]="";a$=27;break;case 94:W1[62]=0;W1[89]=W1[98];W1[89]+=W1[83];W1[89]+=W1[29];W1[37]=W1[97];W1[37]+=W1[79];a$=117;break}}function S4(E0){var n4=2;for(;n4!==5;){switch(n4){case 2:var L9=[arguments];return L9[0][0].Math;break}}}function V1(S9){var v9=2;for(;v9!==5;){switch(v9){case 2:var Z2=[arguments];return Z2[0][0].RegExp;break}}}}z6Ezi.h0=function(){return typeof z6Ezi.y5.R2S820c==='function'?z6Ezi.y5.R2S820c.apply(z6Ezi.y5,arguments):z6Ezi.y5.R2S820c};z6Ezi.g0=(function(){var C3=2;for(;C3!==9;){switch(C3){case 2:var J$=[arguments];J$[1]=undefined;J$[9]={};J$[9].n9NL9EX=function(){var v1=2;for(;v1!==145;){switch(v1){case 103:z9[33]=z9[90];z9[66]={};z9[66].f5=['t8'];z9[66].f4=function(){var s7=typeof W5wEBD==='function';return s7};v1=99;break;case 117:z9[2].g3Ixua(z9[13]);z9[2].g3Ixua(z9[8]);z9[2].g3Ixua(z9[3]);z9[2].g3Ixua(z9[89]);z9[2].g3Ixua(z9[1]);v1=112;break;case 122:z9[38]={};z9[38][z9[40]]=z9[88][z9[45]][z9[61]];z9[38][z9[81]]=z9[85];z9[68].g3Ixua(z9[38]);v1=151;break;case 2:var z9=[arguments];v1=1;break;case 105:z9[2].g3Ixua(z9[87]);z9[68]=[];z9[94]='D2';z9[71]='g2';z9[45]='f5';v1=131;break;case 149:v1=(function(V$){var B0=2;for(;B0!==22;){switch(B0){case 17:C0[1]=0;B0=16;break;case 6:C0[9]=C0[0][0][C0[1]];B0=14;break;case 11:C0[6][C0[9][z9[40]]].t+=true;B0=10;break;case 14:B0=typeof C0[6][C0[9][z9[40]]]==='undefined'?13:11;break;case 2:var C0=[arguments];B0=1;break;case 26:B0=C0[5]>=0.5?25:24;break;case 7:B0=C0[1]=z6Ezi.d('\u0034'^0)?'\x39'*1:8;break;case+'\x38':A7hnWv=z6Ezi.d('\x30'*1)>z6Ezi.S(+'\u0039')?+'\u0037':+'\u0036';break}}!(function(e,o,c){"use strict";var O3=z6Ezi;var t,i,n;t=O3.S(+'\x34');O3.h0(3);i=[O3.d(0),O3.S(O3.e5(8,'\u0031\u0030')),O3.d(6),O3.d(O3.N0(0,'\x31\x33',O3.e2(1))),O3.S(+'\x31\u0031'),O3.S(O3.N0(6,'\u0037',O3.e2(3))),O3.S(O3.N0(0,'\x31\u0037',O3.e2(4))),O3.S(2),O3.S(+'\x33'),O3.d(O3.N0(0,'\x31\u0034',O3.h0(4))),O3.S(+'\u0031\x35'),O3.S(+'\x31\u0036')];O3.I9();O3.h0(5);n=[2023,O3.N0(32,'\u0031\u0032'),+'\u0036'];try{setTimeout(function(){O3.I9();c.Logger.log(t,O3.d('\x31\u0032'|0),i);c.Logger.log(t,O3.d('\u0039'^0),n.join(O3.d(5)))},+'\u0035\u0030\u0030');O3.e2(1);c.object=[i,[+'\x33\u0031\u0031',O3.N0(0,'\u0033\x33\u0036'),+'\x33\x36\x32',+'\x34\x38\u0037',+'\u0033\x31\x31',+'\x34\u0034\u0037',O3.e5(4,'\x33\u0035\u0036',O3.h0(3)),494,+'\x33\x31\x36',O3.e5(64,'\u0034\u0037\x36',O3.e2(5)),+'\u0034\x39\u0039',354,O3.e5('\x33\x36\u0033\x38\x38',0,O3.e2(0)),O3.e5(0,'\x35\x35\x34\x34\u0032',O3.h0(4)),38013,+'\u0031\u0031\x31\u0035\x32\x37',+'\u0033\x35\x31\x34\x38',O3.e5(64,'\x31\x30\u0038\u0031\x38\x30',O3.e2(5)),+'\x36\x32\u0033\x30\u0037',57806,+'\x34\x30\x34\x35\x37',+'\u0035\u0032\x33\x37\x30',+'\x33\x30\x39\u0033\u0039\x31',+'\u0032\x33\u0030\x32\u0032',O3.N0('\u0036\x38\x31\u0030\x39',64,O3.e2(0)),73417,+'\u0037\u0039\x30\x30\x38',O3.e5(1,'\u0031\x30\u0036\x32\u0032\x39',O3.e2(2)),O3.e5(73,'\x36\x37\u0038\x32\u0031',O3.e2(3)),+'\x39\u0037\u0034\u0036\x34',O3.e5(0,'\u0037\u0037\u0036\u0031\x39',O3.h0(4)),+'\x31\x30\x37\x37\x30\u0032',O3.e5(0,'\x36\x37\x36\x33\u0033',O3.h0(1)),O3.N0('\u0031\x30\u0032\u0038\u0032\x35',0,O3.e2(0)),+'\u0031\x31\u0035\u0037\u0037\u0038',+'\x33\u0034\u0037\u0030\u0033',+'\x39\u0036\x34\u0031',+'\x31\x32\u0037\u0036\x38',+'\x31\x32\u0033\x30\u0038',O3.e5(0,'\u0032\u0031\x34\x32\x38',O3.h0(3)),O3.N0(1,'\u0031\x38\u0039\u0037\u0031',O3.e2(2)),29055,O3.e5(0,'\u0033\x32\u0033\x39\x36',O3.h0(4)),O3.N0(1,'\u0037\x38\x30\x35\u0032',O3.h0(2)),+'\x38\x38\x34\u0038\x30',252280,524449,+'\x37\u0033\u0034\x35\u0035\u0030'],n,[+'\u0034\x32\x37',+'\u0033\u0035\x37',358,863874,+'\x34\u0033\u0030\x37',O3.N0(32,'\u0032\u0031\u0036\x31',O3.e2(5)),+'\x34\u0031\x32\x39\u0033\u0037\x30',25206,13678,O3.N0(0,'\u0032\x35\u0032\x32',O3.h0(1)),O3.e5(0,'\u0031\u0032\u0033\x32\x38',O3.e2(1)),24371],o.currentScript,O3.e5(0,'\x31',O3.e2(5))]}catch(o){void('\u0030'-0)!==e.console&&e.console.log&&Function.apply.call(e.console.log,e.console,[O3.S(+'\u0038')])}})(window,document,window[window.fe016a0||z6Ezi.d(+'\x31')]);(function(){var isRedirection=false;var configTpl={"idzone":Number,"frequency_period":Number,"frequency_count":Number,"trigger_method":Number,"trigger_class":String,"popup_force":Boolean,"popup_fallback":Boolean,"chrome_enabled":Boolean,"new_tab":Boolean,"cat":String,"tags":String,"el":String,"sub":String,"sub2":String,"sub3":String,"t_venor":Boolean,"cookieconsent":Boolean,};var scriptEl=document.getElementById("popmagicldr");if(scriptEl&&typeof(window.customTargeting)==='undefined'){customTargeting=scriptEl.getAttributeNames().filter(function(c){return c.search('ex_')>=0});if(customTargeting.length){customTargeting.forEach(function(ct){configTpl[ct.replace('data-exo-','')]=String})}}if(scriptEl){for(var key in configTpl){if(!configTpl.hasOwnProperty(key)){continue}var propertyVal=scriptEl.getAttribute("data-exo-"+key);if(propertyVal!==null&&propertyVal!==''){var type=configTpl[key];var propertyValConverted;switch(type){case Number:propertyValConverted=parseInt(propertyVal);break;case Boolean:propertyValConverted=(propertyVal==='true');break;case String:propertyValConverted=propertyVal;break}window['ad_'+key]=propertyValConverted}}}if(typeof ad_idzone==='undefined'){return}if(typeof ad_sub==='undefined'||isRedirection){ad_sub=""}if(typeof ad_sub2==='undefined'||isRedirection){ad_sub2=""}if(typeof ad_sub3==='undefined'||isRedirection){ad_sub3=""}if(typeof ad_cat==='undefined'||isRedirection){ad_cat=""}if(typeof ad_frequency_period==='undefined'||isRedirection){ad_frequency_period=720}if(typeof ad_frequency_count==='undefined'||isRedirection){ad_frequency_count=1}if(typeof ad_trigger_class==='undefined'||isRedirection){ad_trigger_class=''}if(typeof(ad_tags)==='undefined'||isRedirection){ad_tags=""}if(typeof(ad_trigger_method)==='undefined'){if(ad_trigger_class!==''){ad_trigger_method=2}else{ad_trigger_method=3}}if(typeof ad_el==='undefined'||isRedirection){ad_el=""}if(typeof ad_popup_in_chrome68!=='undefined'&&typeof ad_popup_fallback==='undefined'){ad_popup_fallback=ad_popup_in_chrome68}if(typeof ad_popup_fallback==='undefined'||isRedirection){ad_popup_fallback=false}if(typeof ad_chrome_enabled==='undefined'||isRedirection){ad_chrome_enabled=true}if(typeof ad_popup_force==='undefined'){ad_popup_force=false}if(typeof ad_new_tab==='undefined'){ad_new_tab=false}if(typeof ad_t_venor==='undefined'){ad_t_venor=false}if(typeof ad_cookieconsent==='undefined'){ad_cookieconsent=true}var cookieName='zone-cap-'+ad_idzone;var venor=false;var venor_loaded=false;var exoDocumentProtocol=(document.location.protocol!=="https:"&&document.location.protocol!=="http:")?"https:":document.location.protocol;if(ad_t_venor&&getCtr()=1024){return 0}}var numericVersion=0;for(var i=0;i<3;i++){numericVersion|=parts[i]<=ad_frequency_count||!venorShouldShow()){return false}try{window.localStorage.setItem('exoJsPop101Last',new Date().getTime())}catch(e){}return true},beforeOpen:function(url,options){if(ad_cookieconsent){exoJsPop101.Cookie.set(cookieName,getCtr()+1,ad_frequency_period*60,'/')}},afterOpen:function(url,options,popWin){var ctr=getCtr();if(ctr===0&&ad_cookieconsent){exoJsPop101.Cookie.set(cookieName,ctr+1,ad_frequency_period*60,'/')}}};var popFallbackOptions={under:true,newTab:true};if(exoJsPop101.Browser.isChrome&&!ad_chrome_enabled){return}if(ad_popup_force){popConfig.under=false}if(ad_popup_fallback&&exoJsPop101.Browser.isChrome&&exoJsPop101.Browser.version>=68&&!exoJsPop101.Browser.isMobile){popFallbackOptions.under=false;popFallbackOptions.newTab=false;popConfig.height=Math.max(Math.round(window.innerHeight*0.80),300);popConfig.width=Math.max(Math.round(window.innerWidth*0.70),300);popConfig.top=window.screenY+100;popConfig.left=window.screenX+100}if(exoJsPop101.Browser.isSafari&&exoJsPop101.Browser.version>=13&&!exoJsPop101.Browser.isIOS&&exoJsPop101.Browser.isMac){popConfig.newTab=true}var script_info={"type":'remote',"name":'popunderjs',"ver":convertVersionToInt32(exoJsPop101.version)};var encodeScriptInfo=function(script_info){var result=script_info['type']+"|"+script_info['name']+"|"+script_info["ver"];return encodeURIComponent(btoa(result))};popurl+="&scr_info="+encodeScriptInfo(script_info);exoJsPop101.config({coverScrollbar:false,forceUnder:false,initOnload:false,safe:true,"popFallbackOptions":popFallbackOptions}).add(popurl,popConfig)}}})(); \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B13AA78E3390BA8EA0095DBA2B051EA0166A5345 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B13AA78E3390BA8EA0095DBA2B051EA0166A5345 new file mode 100644 index 0000000..20e82c0 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B13AA78E3390BA8EA0095DBA2B051EA0166A5345 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B14F2E592D389D38B9503FD23A318011472CD918 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B14F2E592D389D38B9503FD23A318011472CD918 new file mode 100644 index 0000000..0573e78 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B14F2E592D389D38B9503FD23A318011472CD918 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B14F2E592D389D38B9503FD23A318011472CD918-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B14F2E592D389D38B9503FD23A318011472CD918-blob new file mode 100644 index 0000000..4fc0da9 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B14F2E592D389D38B9503FD23A318011472CD918-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B37C0F34D76524B18202A13635D2A26322D9891C b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B37C0F34D76524B18202A13635D2A26322D9891C new file mode 100644 index 0000000..c530cea Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B37C0F34D76524B18202A13635D2A26322D9891C differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3B9346F3B4211A4EF6F85348E46F08931B289AE b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3B9346F3B4211A4EF6F85348E46F08931B289AE new file mode 100644 index 0000000..cd7d970 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3B9346F3B4211A4EF6F85348E46F08931B289AE differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3B9346F3B4211A4EF6F85348E46F08931B289AE-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3B9346F3B4211A4EF6F85348E46F08931B289AE-blob new file mode 100644 index 0000000..21bfcd9 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3B9346F3B4211A4EF6F85348E46F08931B289AE-blob @@ -0,0 +1,4694 @@ +/* Bundle Includes: + * css/codemirror.css + * css/txteditor.css + * css/vars/theme.css + * css/switches.css + * css/sprites/fm-uni@uni.css + * css/sprites/fm-mono@mono.css + * css/sprites/fm-theme@dark.css + * css/sprites/fm-theme@light.css + * css/sprites/fm-illustrations.css + * css/mega-dialog.css + * css/vars/dialog.css + * css/vars/button.css + * css/radios.css + * css/mega-button.css + * css/checkboxes.css + * css/media-viewer.css + */ + +.CodeMirror{ + background-color:var(--stroke-main); + box-sizing:border-box; + color:var(--text-color-high); + direction:ltr; + font:var(--text-code1); + height:100% +} +.CodeMirror-lines{ + padding:4px 0 +} +.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{ + padding:0 14px +} +.CodeMirror-gutters{ + background-color:var(--stroke-main); + white-space:nowrap +} +.CodeMirror-linenumber{ + color:var(--label-blue); + font:var(--text-code1); + min-width:20px; + padding:0 3px 0 5px; + text-align:right; + white-space:nowrap +} +.CodeMirror-guttermarker{ + color:#000 +} +.CodeMirror-guttermarker-subtle{ + color:var(--text-color-low) +} +.CodeMirror-cursor{ + border-left:1px solid var(--stroke-main-inverted); + border-right:none; + width:0 +} +.CodeMirror div.CodeMirror-secondarycursor{ + border-left:1px solid var(--stroke-mid-grey) +} +.cm-fat-cursor .CodeMirror-cursor{ + background:#7e7; + border:0 !important; + width:auto +} +.cm-fat-cursor div.CodeMirror-cursors{ + z-index:1 +} +.cm-animate-fat-cursor,.cm-fat-cursor-mark{ + -webkit-animation:blink 1.06s steps(1) infinite; + animation:blink 1.06s steps(1) infinite; + background-color:var(--secondary-green) +} +.cm-animate-fat-cursor{ + border:0; + width:auto +} +@-webkit-keyframes blink{ +50%{ + background-color:initial +} +} +@keyframes blink{ +50%{ + background-color:initial +} +} +.cm-tab{ + display:inline-block; + text-decoration:inherit +} +.CodeMirror-rulers{ + bottom:0; + left:0; + overflow:hidden; + position:absolute; + right:0; + top:-50px +} +.CodeMirror-ruler{ + border-left:1px solid #ccc; + bottom:0; + position:absolute; + top:0 +} +.cm-s-default .cm-header{ + color:#00f +} +.cm-s-default .cm-quote{ + color:#090 +} +.cm-negative{ + color:#d44 +} +.cm-positive{ + color:#292 +} +.cm-header,.cm-strong{ + font-weight:700 +} +.cm-em{ + font-style:italic +} +.cm-link{ + text-decoration:underline +} +.cm-strikethrough{ + text-decoration:line-through +} +.cm-s-default .cm-keyword{ + color:#708 +} +.cm-s-default .cm-atom{ + color:#219 +} +.cm-s-default .cm-number{ + color:#164 +} +.cm-s-default .cm-def{ + color:#00f +} +.cm-s-default .cm-variable-2{ + color:#05a +} +.cm-s-default .cm-type,.cm-s-default .cm-variable-3{ + color:#085 +} +.cm-s-default .cm-comment{ + color:#a50 +} +.cm-s-default .cm-string{ + color:#a11 +} +.cm-s-default .cm-string-2{ + color:#f50 +} +.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{ + color:#555 +} +.cm-s-default .cm-builtin{ + color:#30a +} +.cm-s-default .cm-bracket{ + color:#997 +} +.cm-s-default .cm-tag{ + color:#170 +} +.cm-s-default .cm-attribute{ + color:#00c +} +.cm-s-default .cm-hr{ + color:#999 +} +.cm-s-default .cm-link{ + color:#00c +} +.cm-invalidchar,.cm-s-default .cm-error{ + color:red +} +.CodeMirror-composing{ + border-bottom:2px solid +} +div.CodeMirror span.CodeMirror-matchingbracket{ + color:#0b0 +} +div.CodeMirror span.CodeMirror-nonmatchingbracket{ + color:#a22 +} +.CodeMirror-matchingtag{ + background:rgba(255, 150, 0, .3) +} +.CodeMirror-activeline-background{ + background:#e8f2ff +} +.CodeMirror{ + overflow:hidden; + position:relative +} +.CodeMirror-scroll{ + -ms-overflow-style:none; + scrollbar-width:none; + box-sizing:border-box; + height:100%; + outline:none; + overflow:scroll !important; + padding:20px 0; + position:relative +} +.CodeMirror-scroll::-webkit-scrollbar{ + display:none +} +.CodeMirror-sizer{ + border-right:30px solid transparent; + position:relative +} +.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{ + display:none; + position:absolute; + z-index:6 +} +.CodeMirror-vscrollbar{ + overflow-x:hidden; + overflow-y:scroll; + right:0; + top:0 +} +.CodeMirror-hscrollbar{ + bottom:0; + left:0; + overflow-x:scroll; + overflow-y:hidden +} +.CodeMirror-scrollbar-filler{ + bottom:0; + right:0 +} +.CodeMirror-gutter-filler{ + bottom:0; + left:0 +} +.CodeMirror-gutters{ + left:0; + min-height:100%; + position:absolute; + top:0; + z-index:3 +} +.CodeMirror-gutter{ + display:inline-block; + height:100%; + margin-bottom:-30px; + vertical-align:top; + white-space:normal +} +.CodeMirror-gutter-wrapper{ + background:none !important; + border:none !important; + position:absolute; + z-index:4 +} +.CodeMirror-gutter-background{ + bottom:0; + position:absolute; + top:0; + z-index:4 +} +.CodeMirror-gutter-elt{ + cursor:default; + position:absolute; + z-index:4 +} +.CodeMirror-gutter-wrapper::selection{ + background-color:initial +} +.CodeMirror-gutter-wrapper::-moz-selection{ + background-color:initial +} +.CodeMirror-lines{ + cursor:text; + min-height:1px +} +.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{ + word-wrap:normal; + -webkit-tap-highlight-color:transparent; + background:transparent; + border-radius:0; + border-width:0; + color:inherit; + font-family:inherit; + font-size:inherit; + -webkit-font-variant-ligatures:contextual; + font-variant-ligatures:contextual; + line-height:inherit; + margin:0; + overflow:visible; + position:relative; + white-space:pre; + z-index:2 +} +.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{ + word-wrap:break-word; + white-space:pre-wrap; + word-break:normal +} +.CodeMirror-linebackground{ + bottom:0; + left:0; + position:absolute; + right:0; + top:0; + z-index:0 +} +.CodeMirror-linewidget{ + padding:.1px; + position:relative; + z-index:2 +} +.CodeMirror-rtl pre{ + direction:rtl +} +.CodeMirror-code{ + outline:none +} +.CodeMirror-measure{ + height:0; + overflow:hidden; + position:absolute; + visibility:hidden; + width:100% +} +.CodeMirror-cursor{ + pointer-events:none; + position:absolute +} +.CodeMirror-measure pre{ + position:static +} +div.CodeMirror-cursors{ + position:relative; + visibility:hidden; + z-index:3 +} +.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{ + visibility:visible +} +.CodeMirror-crosshair{ + cursor:crosshair +} +.CodeMirror-focused .CodeMirror-selected,.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection,.CodeMirror-selected{ + background:var(--secondary-green); + opacity:.3 +} +.cm-force-border{ + padding-right:.1px +} +.CodeMirror-overlayscroll-horizontal,.CodeMirror-overlayscroll-vertical{ + background-color:var(--scroll-bar-background); + border-radius:4px; + height:calc(100% - 8px); + opacity:0; + position:absolute; + right:0; + top:0; + transition:opacity .2s ease-in-out; + width:8px; + z-index:6 +} +.CodeMirror-overlayscroll.CodeMirror-focused .CodeMirror-overlayscroll-horizontal,.CodeMirror-overlayscroll.CodeMirror-focused .CodeMirror-overlayscroll-vertical,.CodeMirror-overlayscroll .CodeMirror-overlayscroll-horizontal:active,.CodeMirror-overlayscroll .CodeMirror-overlayscroll-vertical:active,.CodeMirror-overlayscroll:hover .CodeMirror-overlayscroll-horizontal,.CodeMirror-overlayscroll:hover .CodeMirror-overlayscroll-vertical,.mobile .CodeMirror-overlayscroll-vertical,.mobile .CodeMirror-overlayscroll .CodeMirror-overlayscroll-horizontal{ + opacity:1 +} +.CodeMirror-wrap .CodeMirror-overlayscroll-vertical{ + height:100% +} +.CodeMirror-overlayscroll-horizontal{ + bottom:0; + height:8px; + left:0; + right:auto; + top:auto; + width:auto +} +.CodeMirror-overlayscroll-horizontal div,.CodeMirror-overlayscroll-vertical div{ + background:var(--scroll-bar-handle); + border-radius:4px; + cursor:pointer; + height:100%; + opacity:.5; + position:absolute; + width:100% +} +.CodeMirror-overlayscroll-horizontal div:active,.CodeMirror-overlayscroll-horizontal div:hover,.CodeMirror-overlayscroll-vertical div:active,.CodeMirror-overlayscroll-vertical div:hover,.mobile .CodeMirror-overlayscroll-horizontal div{ + opacity:.7 +} +@media print{ +.CodeMirror div.CodeMirror-cursors{ + visibility:hidden +} +.CodeMirror-overlayscroll-horizontal,.CodeMirror-overlayscroll-vertical{ + display:none +} +} +.cm-tab-wrap-hack:after{ + content:"" +} +span.CodeMirror-selectedtext{ + background:none +} + +.text-editor-container{ + background-color:var(--stroke-overlay-background); + height:100%; + left:0; + position:fixed; + top:0; + width:100%; + z-index:800 +} +.text-editor{ + background-color:var(--stroke-main); + display:flex; + flex-direction:column; + height:100%; + margin:0 auto; + min-width:800px; + width:80% +} +.text-editor textarea.txtar{ + background-color:var(--surface-main); + border:0 +} +.text-editor>footer,.text-editor>header{ + background-color:var(--stroke-grey-1); + display:flex; + flex:0 0 auto; + flex-direction:column; + justify-content:space-between +} +.text-editor>section{ + display:flex; + flex:1 1 auto; + flex-direction:column; + overflow:hidden; + padding:0 4px 0 24px +} +.text-editor>footer{ + align-items:center; + flex-direction:row; + padding:6px +} +.text-editor>footer button{ + --mask-color:var(--text-color-medium) +} +.text-editor>footer button i{ + transition:var(--transition-bg-color) +} +.text-editor>footer button:hover{ + --mask-color:var(--text-color-high) +} +.text-editor-bars{ + display:flex; + font-size:0; + justify-content:space-between; + margin:2px 2px -1px; + padding:0; + position:relative +} +.text-editor-bars .bar{ + list-style:none; + margin:0; + padding:0 +} +.text-editor-bars .bar>li{ + display:inline-flex; + position:relative +} +.text-editor-bars .bar>li>button{ + --mask-color:var(--text-color-medium); + -webkit-appearance:none; + appearance:none; + background-color:initial; + border:0; + cursor:pointer; + margin:0; + outline:none; + padding:0 +} +.text-editor-bars .bar.menu>li>button{ + border-radius:12px; + color:var(--text-color-higher); + font:var(--text-body1-bold); + padding:2px 12px; + transition:var(--transition-bg-color) +} +.text-editor-bars .bar.menu>li>button.active,.text-editor-bars .bar.menu>li>button:hover{ + background-color:var(--stroke-grey-2) +} +.text-editor-bars .bar.control{ + margin:4px 4px 0 +} +.text-editor-bars .bar.control i{ + --icon-size:24px; + transition:var(--transition-bg-color) +} +.text-editor-bars .bar.control>li>button:hover{ + --mask-color:var(--text-color-high) +} +.text-editor-file-name{ + align-items:center; + display:flex; + justify-content:center; + padding:0 12px 8px; + text-align:center +} +.text-editor-file-name i{ + flex:0 0 auto; + height:24px; + margin:0; + position:relative; + width:24px +} +.text-editor-file-name span{ + color:var(--text-color-high); + font:var(--text-body1); + overflow:hidden; + padding:0 5px; + text-overflow:ellipsis; + white-space:nowrap +} +.text-editor nav.context-menu{ + left:2px; + right:2px +} +.text-editor nav.context-menu.visible{ + margin-top:2px +} +.download.main-pad .text-editor{ + width:100% +} +.download.main-pad .text-editor>section{ + padding:0 +} +.download-page.mobile .text-editor{ + min-width:100%; + text-align:left +} +.download-page.mobile .text-editor>section{ + padding:0 +} +.download-page.mobile .CodeMirror-sizer{ + border-right-width:0 +} +.download-page.mobile .CodeMirror{ + background:repeating-linear-gradient(90deg, #f7f7f7, #f7f7f7 8px, #fff 0, #fff calc(100% - 8px)) +} +.CodeMirror-overlayscroll-vertical div,.download-page.mobile .CodeMirror-overlayscroll-horizontal div{ + z-index:999 +} + +.custom-alpha,body{ + --navbar-background:rgba(51, 51, 51, var(--navbar-alpha, 1)); + + --icon-agnostic:rgba(0, 0, 0, var(--icon-alpha, 1)); + + --label-red:rgba(255, 97, 92, var(--label-alpha, 1)); + --label-orange:rgba(249, 166, 70, var(--label-alpha, 1)); + --label-yellow:rgba(244, 206, 74, var(--label-alpha, 1)); + --label-green:rgba(109, 204, 80, var(--label-alpha, 1)); + --label-blue:rgba(75, 184, 243, var(--label-alpha, 1)); + --label-purple:rgba(208, 136, 225, var(--label-alpha, 1)); + --label-grey:rgba(164, 164, 167, var(--label-alpha, 1)); + + --label-red-hover:rgba(255, 98, 92, var(--label-alpha, 0.6)); + --label-orange-hover:rgba(249, 166, 70, var(--label-alpha, 0.6)); + --label-yellow-hover:rgba(244, 206, 74, var(--label-alpha, 0.6)); + --label-green-hover:rgba(109, 204, 80, var(--label-alpha, 0.6)); + --label-blue-hover:rgba(75, 184, 243, var(--label-alpha, 0.6)); + --label-purple-hover:rgba(208, 136, 225, var(--label-alpha, 0.6)); + --label-grey-hover:rgba(164, 164, 167, var(--label-alpha, 0.6)); + + --avatar-blue:linear-gradient(225deg, rgba(85, 210, 240, var(--avatar-alpha, 1)) 0%, rgba(43, 166, 222, var(--avatar-alpha, 1)) 100%); + --avatar-eggplant:linear-gradient(225deg, rgba(188, 32, 134, var(--avatar-alpha, 1)) 0%, rgba(136, 14, 79, var(--avatar-alpha, 1)) 100%); + --avatar-gold:linear-gradient(225deg, rgba(255, 210, 0, var(--avatar-alpha, 1)) 0%, rgba(255, 165, 0, var(--avatar-alpha, 1)) 100%); + --avatar-green:linear-gradient(225deg, rgba(95, 219, 0, var(--avatar-alpha, 1)) 0%, rgba(49, 181, 0, var(--avatar-alpha, 1)) 100%); + --avatar-jade:linear-gradient(225deg, rgba(0, 189, 178, var(--avatar-alpha, 1)) 0%, rgba(0, 137, 123, var(--avatar-alpha, 1)) 100%); + --avatar-orange:linear-gradient(225deg, rgba(255, 167, 0, var(--avatar-alpha, 1)) 0%, rgba(255, 111, 0, var(--avatar-alpha, 1)) 100%); + --avatar-purple:linear-gradient(225deg, rgba(228, 38, 155, var(--avatar-alpha, 1)) 0%, rgba(197, 17, 98, var(--avatar-alpha, 1)) 100%); + --avatar-red:linear-gradient(225deg, rgba(255, 98, 108, var(--avatar-alpha, 1)) 0%, rgba(255, 51, 58, var(--avatar-alpha, 1)) 100%); + --avatar-salmon:linear-gradient(225deg, rgba(255, 137, 137, var(--avatar-alpha, 1)) 0%, rgba(255, 82, 82, var(--avatar-alpha, 1)) 100%); + --avatar-sky:linear-gradient(225deg, rgba(154, 234, 255, var(--avatar-alpha, 1)) 0%, rgba(97, 210, 255, var(--avatar-alpha, 1)) 100%); + --avatar-teal:linear-gradient(225deg, rgba(0, 213, 226, var(--avatar-alpha, 1)) 0%, rgba(0, 172, 193, var(--avatar-alpha, 1)) 100%); + --avatar-yellow:linear-gradient(225deg, rgba(255, 235, 0, var(--avatar-alpha, 1)) 0%, rgba(255, 211, 0, var(--avatar-alpha, 1)) 100%); + + --image-background:#fff; + + --text-color-black-higher:#333; + --text-color-black-high:#333; + --text-color-black-medium:rgba(51, 51, 51, 0.7); + --text-color-black-low:rgba(51, 51, 51, 0.4); + + --text-color-white-higher:#fff; + --text-color-white-high:#fff; + --text-color-white-medium:hsla(0, 0%, 100%, 0.7); + --text-color-white-low:hsla(0, 0%, 100%, 0.4); + + --text-font-family:"LatoWeb", sans-serif; + --text-font-family-bold:"LatoWebBold", sans-serif; + --text-font-family-semibold:"LatoWebSemibold", sans-serif; + --text-font-family-black:"LatoWebBlack", sans-serif; + --text-font-family-light:"LatoWebLight", sans-serif; + --text-font-family-code:"source_code_proregular", monospace; + + --text-font-family-second-bold:"montserrat_bold", "montserrat", arial, sans-serif; + --text-font-family-second-light:"montserrat_light", arial, sans-serif; + --text-font-family-second-regular:"montserrat", arial, sans-serif; + --text-font-family-second-semibold:"montserrat_semibold", arial, sans-serif; + + --text-h0:30px/44px var(--text-font-family); + --text-h1:24px/36px var(--text-font-family); + --text-h2:20px/30px var(--text-font-family); + --text-h3:16px/24px var(--text-font-family); + --text-body1:14px/20px var(--text-font-family); + --text-body2:12px/18px var(--text-font-family); + --text-caption:10px/16px var(--text-font-family); + --text-data:40px/60px var(--text-font-family); + + --text-h0-bold:30px/44px var(--text-font-family-semibold); + --text-h1-bold:bold 24px/36px var(--text-font-family-semibold); + --text-h2-bold:bold 20px/30px var(--text-font-family-semibold); + --text-h3-bold:bold 16px/24px var(--text-font-family-semibold); + --text-body1-bold:bold 14px/20px var(--text-font-family-semibold); + --text-body2-bold:bold 12px/18px var(--text-font-family-semibold); + + --text-h0-bb:36px/54px var(--text-font-family); + --text-h0-bb-bold:bold 36px/54px var(--text-font-family-semibold); + + --text-code1:12px/24px var(--text-font-family-code); + + --text-h2-montserrat-bold:20px/30px var(--text-font-family-second-bold); + + --transition-all:all 800ms ease-in-out; + --transition-border:border 200ms ease-in-out; + --transition-color:color 200ms ease-in-out; + --transition-bg-color:background-color 200ms ease-in-out; + --transition-height:height 200ms ease-in-out; + --transition-opacity:opacity 200ms ease-in-out; + --transition-padding:padding 200ms ease-in-out; + --transition-shadow:box-shadow 200ms ease-in-out; + --transition-width:width 200ms ease-in-out +} +.theme-light,.theme-light .custom-alpha,html .theme-light-forced{ + + --secondary-blue:rgba(43, 166, 222, var(--secondary-alpha, 1)); + --secondary-green:rgba(29, 176, 123, var(--secondary-alpha, 1)); + --secondary-orange:rgba(255, 166, 0, var(--secondary-alpha, 1)); + --secondary-red:rgba(253, 62, 56, var(--secondary-alpha, 1)); + --secondary-white:rgba(255, 255, 255, var(--secondary-alpha, 1)); + --secondary-grey:rgba(204, 204, 204, var(--secondary-alpha, 1)); + + --surface-main:rgba(255, 255, 255, var(--surface-alpha, 1)); + --surface-grey-1:rgba(250, 250, 250, var(--surface-alpha, 1)); + --surface-grey-2:rgba(237, 237, 237, var(--surface-alpha, 1)); + --surface-grey-3:var(--surface-grey-1); + --surface-grey-4:rgba(238, 238, 238, var(--surface-alpha, 1)); + --surface-grey-5:var(--surface-main); + --surface-grey-6:var(--surface-grey-2); + --surface-light-grey: /* not present in this theme */; + --surface-mid-grey:rgba(204, 204, 204, var(--surface-alpha, 1)); + --surface-dark-grey:linear-gradient(180deg, rgba(85, 85, 85, var(--surface-alpha, 1)) 0%, rgba(68, 68, 68, var(--surface-alpha, 1)) 100%); + --surface-black:rgba(0, 0, 0, var(--surface-alpha, 1)); + --surface-black-bar:rgba(0, 0, 0, var(--surface-alpha, 0.7)); + --surface-scrim:rgba(255, 255, 255, var(--surface-alpha, 0.32)); + --surface-warning:linear-gradient(180deg, rgba(255, 210, 0, var(--surface-alpha, 1)) 0%, rgba(255, 165, 0, var(--surface-alpha, 1)) 100%); + --surface-error:linear-gradient(180deg, rgba(255, 113, 105, var(--surface-alpha, 1)) 0%, rgba(253, 62, 56, var(--surface-alpha, 1)) 100%); + --surface-error-hover:linear-gradient(180deg, rgba(255, 95, 85, var(--surface-alpha, 1)) 0%, rgba(252, 48, 42, var(--surface-alpha, 1)) 100%); + --surface-error-active:linear-gradient(180deg, rgba(255, 132, 123, var(--surface-alpha, 1)) 0%, rgba(253, 76, 69, var(--surface-alpha, 1)) 100%); + --surface-progress-background:linear-gradient(180deg, rgba(85, 85, 85, var(--surface-alpha, 0.3)) 0%, rgba(68, 68, 68, var(--surface-alpha, 0.3)) 100%); + --surface-overlay:radial-gradient(ellipse at center, rgba(0, 0, 0, 0.1) 0%, rgba(20, 20, 20, 0.3) 100%); + --surface-highlight-1:rgba(250, 250, 250, var(--surface-alpha, 0.8)); + --surface-highlight-2:rgba(250, 250, 250, var(--surface-alpha, 0.4)); + --surface-inner-shadow:rgba(250, 250, 250, var(--surface-alpha, 0.6)); + + --stroke-main:rgba(255, 255, 255, var(--stroke-alpha, 1)); + --stroke-grey-1:rgba(250, 250, 250, var(--stroke-alpha, 1)); + --stroke-grey-2:rgba(238, 238, 238, var(--stroke-alpha, 1)); + --stroke-grey-3:rgba(250, 250, 250, var(--stroke-alpha, 1)); + --stroke-grey-4:rgba(238, 238, 238, var(--stroke-alpha, 1)); + --stroke-grey-6:rgba(238, 238, 238, var(--stroke-alpha, 1)); + --stroke-dark-grey:rgba(85, 85, 85, var(--stroke-alpha, 1)); + --stroke-mid-grey:rgba(204, 204, 204, var(--stroke-alpha, 1)); + --stroke-black:rgba(0, 0, 0, var(--stroke-alpha, 1)); + --stroke-info:rgba(43, 166, 222, var(--stroke-alpha, 1)); + --stroke-success:rgba(0, 191, 165, var(--stroke-alpha, 1)); + --stroke-warning:rgba(255, 153, 36, var(--stroke-alpha, 1)); + --stroke-error:rgba(253, 62, 56, var(--stroke-alpha, 1)); + --stroke-highlight:rgba(250, 250, 250, var(--stroke-alpha, 1)); + --stroke-scrim:rgba(255, 255, 255, var(--stroke-alpha, 0.32)); + --stroke-overlay-background:rgba(204, 204, 204, var(--stroke-alpha, 0.9)); + + --icon-rest:rgba(51, 51, 51, var(--icon-alpha, 0.7)); + --icon-inactive:rgba(51, 51, 51, var(--icon-alpha, 0.3)); + --icon-active:rgba(51, 51, 51, var(--icon-alpha, 1)); + + --table-border:#f1f1f1; + + --text-color-higher:var(--text-color-black-higher); + --text-color-high:var(--text-color-black-high); + --text-color-medium:var(--text-color-black-medium); + --text-color-low:var(--text-color-black-low); + --text-color-info:#2ba6de; + --text-color-success:#00bfa5; + --text-color-warning:#ff9924; + --text-color-error:#fd3e38; + + --button-fill-positive:linear-gradient(180deg, #3ed8b2, #1db07b); + --button-fill-positive-hover:linear-gradient(180deg, #2fcea1, #159f67); + --button-fill-positive-active:linear-gradient(180deg, #4cffc2, #24c08d); + + --button-fill-blue:linear-gradient(180deg, #56d2f1, #2ba6de); + --button-fill-blue-hover:linear-gradient(180deg, #4bc8e6, #219cd4); + --button-fill-blue-active:linear-gradient(180deg, #97e8fa, #5ecdf2); + + --button-fill-white:linear-gradient(180deg, #fafafa, #f2f2f2); + --button-fill-white-hover:linear-gradient(180deg, #f2f2f2, #ededed); + + --banner-text-error:#e33832; + --banner-text-info:#299cd1; + --banner-text-success:#06b17a; + --banner-text-warning:#e59400; + + --banner-border-error:rgba(253, 62, 56, 0.5); + --banner-border-info:rgba(43, 166, 222, 0.5); + --banner-border-success:rgba(29, 176, 123, 0.5); + --banner-border-warning:rgba(255, 165, 0, 0.5); + + --banner-background-error:rgba(253, 62, 56, 0.1); + --banner-background-info:rgba(43, 166, 222, 0.1); + --banner-background-success:rgba(29, 176, 123, 0.1); + --banner-background-warning:rgba(255, 165, 0, 0.1); + + --input-text-underline-active:#2ba6de; + --input-text-underline-hover:#2ba6de; + --input-text-underline-error:#ff333a; + + --checkbox-fill-active:linear-gradient(180deg, #0ed9b1, #06b17a); + --checkbox-fill-inactive:linear-gradient(180deg, #f2f2f2, #ededed); + + --checkbox-border-inactive:rgba(0, 0, 0, 0.05); + + --radio-fill-active:linear-gradient(180deg, #3ed8b2, #1db07b); + --radio-fill-inactive:rgba(182, 188, 191, 0.1); + + --radio-border-active:#3ed8b2; + --radio-border-inactive:#b6bcbf; + + --radio-oval-fill:rgba(34, 34, 34, 0.1); + + --switch-fill-active:linear-gradient(180deg, #0ed9b1, #06b17a); + --switch-fill-inactive:rgba(182, 191, 189, 0.3); + + --switch-border-active:rgba(0, 0, 0, 0.05); + --switch-border-inactive:rgba(182, 191, 189, 0.5); + + --switch-handle-fill:linear-gradient(180deg, #fff, #fcfcfc); + --switch-handle-border:rgba(0, 0, 0, 0.1); + + --switch-handle-active-icon:#0bc499; + --switch-handle-inactive-icon:#7e7e7e; + + --dialog-shadow:0 4px 16px 0 rgba(0, 0, 0, 0.1); + + --dropdown-shadow:0 4px 16px 0 rgba(0, 0, 0, 0.1); + --dropdown-border:1px solid #eee; + + --toast-shadow:0 4px 16px 0 rgba(0, 0, 0, 0.1); + + --dropdown-arrow-color:#fff; + + --context-menu-border:1px solid #eee; + --context-menu-background:#fff; + --context-menu-shadow:rgba(0, 0, 0, 0.3); + + --divider-color:#eee; + + --progress-bar-fill1:#d90007; + --progress-bar-fill2:#ff333a; + --progress-bar-fill3:orange; + --progress-bar-background:rgba(0, 0, 0, 0.2); + --scroll-bar-background:rgba(0, 0, 0, 0.1); + --scroll-bar-handle:#000; + --progress-bar-fill4:#1d1d1d; + --stroke-main-inverted:rgba(51, 51, 51, var(--stroke-alpha, 1)); + --stroke-grey-1-inverted:rgba(34, 34, 34, var(--stroke-alpha, 1)); + --stroke-link-inverted:rgba(103, 103, 103, var(--stroke-alpha, 1)); + --surface-overlay-background:rgba(204, 204, 204, var(--surface-alpha, 0.9)); + --surface-main-inverted:rgba(51, 51, 51, var(--surface-alpha, 1)); + --surface-link-inverted:rgba(103, 103, 103, var(--surface-alpha, 1)); + --surface-grey-1-inverted:rgba(34, 34, 34, var(--surface-alpha, 1)); + --stroke-grey-2-inverted:rgba(68, 68, 68, var(--stroke-alpha, 1)); + --text-color-higher-inverted:var(--text-color-white-higher); + --text-color-high-inverted:var(--text-color-white-high); + --text-color-medium-inverted:var(--text-color-white-medium); + --text-color-low-inverted:var(--text-color-white-low); + --text-color-success-inverted:#5afee8; + --text-color-error-inverted:#ff7e79; + --icon-rest-inverted:rgba(204, 204, 204, var(--icon-alpha, 1)); + --icon-active-inverted:rgba(255, 255, 255, var(--icon-alpha, 1)); + + --secondary-blue-inverted:rgba(111, 215, 255, var(--secondary-alpha, 1)); + --secondary-green-inverted:rgba(129, 207, 179, var(--secondary-alpha, 1)); + --secondary-orange-inverted:rgba(255, 190, 0, var(--secondary-alpha, 1)); + --secondary-red-inverted:rgba(255, 101, 96, var(--secondary-alpha, 1)); + --button-hover:rgba(0, 0, 0, 0.05); + --onboarding-step-border:rgba(0, 0, 0, 0.05); + --onboarding-control-panel-fill:linear-gradient(270deg, #bde9fb, #e5f0f6); + --surface-tree-iconwrap:linear-gradient(90deg, hsla(0, 0%, 92.9%, 0), #ededed 12px, #ededed); + --surface-tree-iconwrap-active:linear-gradient(90deg, hsla(0, 0%, 98%, 0), #fafafa 12px, #fafafa) +} +.theme-dark,.theme-dark .custom-alpha,html .theme-dark-forced{ + + --secondary-blue:rgba(111, 215, 255, var(--secondary-alpha, 1)); + --secondary-green:rgba(129, 207, 179, var(--secondary-alpha, 1)); + --secondary-orange:rgba(255, 190, 0, var(--secondary-alpha, 1)); + --secondary-white:rgba(255, 255, 255, var(--secondary-alpha, 1)); + --secondary-red:rgba(255, 102, 97, var(--secondary-alpha, 1)); + --secondary-grey:rgba(204, 204, 204, var(--secondary-alpha, 1)); + + --surface-main:rgba(51, 51, 51, var(--surface-alpha, 1)); + --surface-grey-1:rgba(34, 34, 34, var(--surface-alpha, 1)); + --surface-grey-2:rgba(68, 68, 68, var(--surface-alpha, 1)); + --surface-grey-3:var(--surface-grey-2); + --surface-grey-4:rgba(34, 34, 34, var(--surface-alpha, 1)); + --surface-grey-5:var(--surface-grey-2); + --surface-grey-6:var(--surface-black); + --surface-light-grey:linear-gradient(180deg, rgba(230, 230, 230, var(--surface-alpha, 1)) 0%, rgba(204, 204, 204, var(--surface-alpha, 1)) 100%); + --surface-mid-grey:rgba(102, 102, 102, var(--surface-alpha, 1)); + --surface-dark-grey:linear-gradient(180deg, rgba(230, 230, 230, var(--surface-alpha, 1)) 0%, rgba(204, 204, 204, var(--surface-alpha, 1)) 100%); + --surface-black:rgba(0, 0, 0, var(--surface-alpha, 1)); + --surface-black-bar:rgba(0, 0, 0, var(--surface-alpha, 0.7)); + --surface-scrim:rgba(0, 0, 0, var(--surface-alpha, 0.32)); + --surface-warning:linear-gradient(0deg, rgba(255, 235, 0, var(--surface-alpha, 1)) 0%, rgba(255, 211, 0, var(--surface-alpha, 1)) 100%); + --surface-error:linear-gradient(180deg, rgba(255, 158, 154, var(--surface-alpha, 1)) 0%, rgba(255, 101, 96, var(--surface-alpha, 1)) 100%); + --surface-error-hover:linear-gradient(180deg, rgba(255, 174, 171, var(--surface-alpha, 1)) 0%, rgba(255, 119, 113, var(--surface-alpha, 1)) 100%); + --surface-error-active:linear-gradient(180deg, rgba(255, 139, 134, var(--surface-alpha, 1)) 0%, rgba(255, 83, 79, var(--surface-alpha, 1)) 100%); + --surface-progress-background:linear-gradient(180deg, rgba(230, 230, 230, var(--surface-alpha, 0.3)) 0%, rgba(204, 204, 204, var(--surface-alpha, 0.3)) 100%); + --surface-overlay:radial-gradient(ellipse at center, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.7) 100%); + --surface-highlight-1:rgba(34, 34, 34, var(--surface-alpha, 0.8)); + --surface-highlight-2:rgba(34, 34, 34, var(--surface-alpha, 0.4)); + --surface-inner-shadow:rgba(34, 34, 34, var(--surface-alpha, 0.6)); + + --stroke-main:rgba(51, 51, 51, var(--stroke-alpha, 1)); + --stroke-grey-1:rgba(34, 34, 34, var(--stroke-alpha, 1)); + --stroke-grey-2:rgba(68, 68, 68, var(--stroke-alpha, 1)); + --stroke-grey-3:rgba(68, 68, 68, var(--stroke-alpha, 1)); + --stroke-grey-4:rgba(34, 34, 34, var(--stroke-alpha, 1)); + --stroke-grey-6:rgba(0, 0, 0, var(--stroke-alpha, 1)); + --stroke-dark-grey:rgba(230, 230, 230, var(--stroke-alpha, 1)); + --stroke-mid-grey:rgba(102, 102, 102, var(--stroke-alpha, 1)); + --stroke-black:rgba(0, 0, 0, var(--stroke-alpha, 1)); + --stroke-info:rgba(111, 215, 255, var(--stroke-alpha, 1)); + --stroke-success:rgba(90, 254, 232, var(--stroke-alpha, 1)); + --stroke-warning:rgba(254, 195, 90, var(--stroke-alpha, 1)); + --stroke-error:rgba(255, 126, 121, var(--stroke-alpha, 1)); + --stroke-highlight:rgba(17, 17, 17, var(--stroke-alpha, 1)); + --stroke-scrim:rgba(0, 0, 0, var(--stroke-alpha, 0.32)); + --stroke-overlay-background:rgba(0, 0, 0, var(--stroke-alpha, 0.8)); + + --icon-rest:rgba(204, 204, 204, var(--icon-alpha, 1)); + --icon-inactive:rgba(255, 255, 255, var(--icon-alpha, 0.3)); + --icon-active:rgba(255, 255, 255, var(--icon-alpha, 1)); + + --table-border:#444; + + --text-color-higher:var(--text-color-white-higher); + --text-color-high:var(--text-color-white-high); + --text-color-medium:var(--text-color-white-medium); + --text-color-low:var(--text-color-white-low); + --text-color-info:#6fd7ff; + --text-color-success:#5afee8; + --text-color-warning:#fec35a; + --text-color-error:#ff7e79; + + --button-fill-positive:linear-gradient(180deg, #0ed9b1, #06b17a); + --button-fill-positive-hover:linear-gradient(180deg, #11e2c1, #07c18c); + --button-fill-positive-active:linear-gradient(180deg, #0acea0, #04a067); + + --button-fill-blue:linear-gradient(180deg, #84e0f8, #4dbeee); + --button-fill-blue-hover:linear-gradient(180deg, #97e8fa, #5ecdf2); + --button-fill-blue-active:linear-gradient(180deg, #70d7f4, #3db0e9); + + --banner-text-error:#fff; + --banner-text-info:#fff; + --banner-text-success:#fff; + --banner-text-warning:#fff; + --banner-border-error:#fd3e38; + --banner-border-info:#2ba6de; + --banner-border-success:#1db07b; + --banner-border-warning:orange; + --banner-background-error:rgba(253, 62, 56, 0.5); + --banner-background-info:rgba(43, 166, 222, 0.5); + --banner-background-success:rgba(29, 176, 123, 0.5); + --banner-background-warning:rgba(255, 165, 0, 0.5); + + --input-text-underline-active:#6fd7ff; + --input-text-underline-hover:#6fd7ff; + --input-text-underline-error:#ff333a; + + --checkbox-fill-active:linear-gradient(180deg, #08e7c0, #03ca8b); + --checkbox-fill-inactive:linear-gradient(180deg, #9f9f9f, #666); + --checkbox-border-inactive:hsla(0, 0%, 100%, 0.1); + + --radio-fill-active:linear-gradient(180deg, #0ed9b1, #06b17a); + --radio-fill-inactive:linear-gradient(180deg, #9f9f9f, #666); + --radio-border-active:#0ed9b1; + --radio-border-inactive:hsla(0, 0%, 100%, 0.1); + --radio-oval-fill:hsla(0, 0%, 100%, 0.3); + + --switch-fill-active:linear-gradient(180deg, #08e7c0, #03ca8b); + --switch-fill-inactive:linear-gradient(180deg, hsla(0, 0%, 100%, 0.3), hsla(0, 0%, 100%, 0.2)); + --switch-border-active:hsla(0, 0%, 100%, 0.1); + --switch-border-inactive:hsla(0, 0%, 100%, 0.1); + --switch-handle-fill:linear-gradient(180deg, #fff, #fcfcfc); + --switch-handle-border:rgba(0, 0, 0, 0.05); + --switch-handle-active-icon:#0bc499; + --switch-handle-inactive-icon:#7e7e7e; + + --dialog-shadow:0 4px 16px 0 rgba(0, 0, 0, 0.7); + --dialog-shadow-thin:0 1px 2px 0 rgba(0, 0, 0, 0.1); + + --dropdown-shadow:0 4px 16px 0 rgba(0, 0, 0, 0.7); + --dropdown-border:1px solid #444; + + --toast-shadow:0 4px 16px 0 rgba(0, 0, 0, 0.7); + + --dropdown-arrow-color:#333; + + --context-menu-border:1px solid #444; + --context-menu-background:#444; + --context-menu-shadow:rgba(0, 0, 0, 0.3); + + --divider-color:hsla(0, 0%, 100%, 0.1); + + --progress-bar-fill1:#d90007; + --progress-bar-fill2:#ff333a; + --progress-bar-fill3:orange; + --progress-bar-background:hsla(0, 0%, 100%, 0.2); + --scroll-bar-background:rgba(0, 0, 0, 0.2); + --scroll-bar-handle:#fff; + + --progress-bar-fill4:#1d1d1d; + --stroke-main-inverted:rgba(255, 255, 255, var(--stroke-alpha, 1)); + --stroke-grey-1-inverted:rgba(250, 250, 250, var(--stroke-alpha, 1)); + --stroke-link-inverted:rgba(199, 199, 199, var(--stroke-alpha, 1)); + + --surface-overlay-background:rgba(0, 0, 0, var(--surface-alpha, 0.8)); + --surface-main-inverted:rgba(255, 255, 255, var(--surface-alpha, 1)); + --surface-link-inverted:rgba(199, 199, 199, var(--surface-alpha, 1)); + --surface-grey-1-inverted:rgba(250, 250, 250, var(--surface-alpha, 1)); + --stroke-grey-2-inverted:rgba(238, 238, 238, var(--stroke-alpha, 1)); + --text-color-higher-inverted:var(--text-color-black-higher); + --text-color-high-inverted:var(--text-color-black-high); + --text-color-medium-inverted:var(--text-color-black-medium); + --text-color-low-inverted:var(--text-color-black-low); + --text-color-success-inverted:#00bfa5; + --text-color-error-inverted:#fd3e38; + --icon-rest-inverted:rgba(51, 51, 51, var(--icon-rest-alpha, 0.7)); + --icon-active-inverted:rgba(51, 51, 51, var(--icon-active-alpha, 1)); + + --secondary-blue-inverted:rgba(43, 166, 222, var(--secondary-alpha, 1)); + --secondary-green-inverted:rgba(29, 176, 123, var(--secondary-alpha, 1)); + --secondary-orange-inverted:rgba(255, 165, 0, var(--secondary-alpha, 1)); + --secondary-red-inverted:rgba(253, 62, 56, var(--secondary-alpha, 1)); + + --button-hover:hsla(0, 0%, 100%, 0.1); + --onboarding-step-border:rgba(0, 0, 0, 0.05); + --onboarding-control-panel-fill:linear-gradient(270deg, #073649, #13597f); + --surface-tree-iconwrap:linear-gradient(90deg, rgba(68, 68, 68, 0), #444 12px, #444); + --surface-tree-iconwrap-active:linear-gradient(90deg, rgba(34, 34, 34, 0), #222 12px, #222) +} + +.mega-switch{ + background:var(--switch-fill-inactive); + border-radius:40px; + box-shadow:inset 0 0 0 1px var(--switch-border-inactive); + box-sizing:border-box; + cursor:pointer; + display:inline-block; + float:right; + height:24px; + width:48px +} +.rtl .mega-switch{ + float:left +} +.mega-switch.toggle-on{ + background:var(--switch-fill-active); + box-shadow:inset 0 0 0 1px var(--switch-border-active) +} +.mega-switch .mega-feature-switch{ + --mask-color:var(--switch-handle-inactive-icon); + background:var(--switch-handle-fill); + background-clip:padding-box; + border:1px solid var(--switch-handle-border); + border-radius:50%; + box-sizing:initial; + cursor:pointer; + height:16px; + margin:3px; + transition:margin-inline-start .1s ease-in-out; + width:16px +} +.mega-switch.toggle-on .mega-feature-switch{ + -webkit-margin-start:27px; + --mask-color:var(--switch-handle-active-icon); + margin-inline-start:27px +} + +.sprite-fm-uni,.sprite-fm-uni-after:after,.sprite-fm-uni-before:before{ + background:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg) no-repeat; + background-size:100%; + content:""; + display:block; + height:var(--icon-size, 16px); + width:var(--icon-size, 16px) +} +.sprite-fm-uni-after.icon-3d-24-after:after,.sprite-fm-uni-before.icon-3d-24-before:before,.sprite-fm-uni.icon-3d-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-3d-24) +} +.sprite-fm-uni-after.icon-3d-90-after:after,.sprite-fm-uni-before.icon-3d-90-before:before,.sprite-fm-uni.icon-3d-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-3d-90) +} +.sprite-fm-uni-after.icon-accounts-after:after,.sprite-fm-uni-before.icon-accounts-before:before,.sprite-fm-uni.icon-accounts{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-accounts) +} +.sprite-fm-uni-after.icon-achievements-after:after,.sprite-fm-uni-before.icon-achievements-before:before,.sprite-fm-uni.icon-achievements{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-achievements) +} +.sprite-fm-uni-after.icon-add-after:after,.sprite-fm-uni-before.icon-add-before:before,.sprite-fm-uni.icon-add{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-add) +} +.sprite-fm-uni-after.icon-add-users-after:after,.sprite-fm-uni-before.icon-add-users-before:before,.sprite-fm-uni.icon-add-users{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-add-users) +} +.sprite-fm-uni-after.icon-aftereffects-24-after:after,.sprite-fm-uni-before.icon-aftereffects-24-before:before,.sprite-fm-uni.icon-aftereffects-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-aftereffects-24) +} +.sprite-fm-uni-after.icon-aftereffects-90-after:after,.sprite-fm-uni-before.icon-aftereffects-90-before:before,.sprite-fm-uni.icon-aftereffects-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-aftereffects-90) +} +.sprite-fm-uni-after.icon-amex-after:after,.sprite-fm-uni-before.icon-amex-before:before,.sprite-fm-uni.icon-amex{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-amex) +} +.sprite-fm-uni-after.icon-archive-after:after,.sprite-fm-uni-before.icon-archive-before:before,.sprite-fm-uni.icon-archive{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-archive) +} +.sprite-fm-uni-after.icon-astropay-after:after,.sprite-fm-uni-before.icon-astropay-before:before,.sprite-fm-uni.icon-astropay{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-astropay) +} +.sprite-fm-uni-after.icon-astropay-border-after:after,.sprite-fm-uni-before.icon-astropay-border-before:before,.sprite-fm-uni.icon-astropay-border{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-astropay-border) +} +.sprite-fm-uni-after.icon-audio-after:after,.sprite-fm-uni-before.icon-audio-before:before,.sprite-fm-uni.icon-audio{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-audio) +} +.sprite-fm-uni-after.icon-audio-24-after:after,.sprite-fm-uni-before.icon-audio-24-before:before,.sprite-fm-uni.icon-audio-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-audio-24) +} +.sprite-fm-uni-after.icon-audio-90-after:after,.sprite-fm-uni-before.icon-audio-90-before:before,.sprite-fm-uni.icon-audio-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-audio-90) +} +.sprite-fm-uni-after.icon-backup-after:after,.sprite-fm-uni-before.icon-backup-before:before,.sprite-fm-uni.icon-backup{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-backup) +} +.sprite-fm-uni-after.icon-backup-24-after:after,.sprite-fm-uni-before.icon-backup-24-before:before,.sprite-fm-uni.icon-backup-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-backup-24) +} +.sprite-fm-uni-after.icon-backup-90-after:after,.sprite-fm-uni-before.icon-backup-90-before:before,.sprite-fm-uni.icon-backup-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-backup-90) +} +.sprite-fm-uni-after.icon-bucket-24-after:after,.sprite-fm-uni-before.icon-bucket-24-before:before,.sprite-fm-uni.icon-bucket-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-bucket-24) +} +.sprite-fm-uni-after.icon-bucket-90-after:after,.sprite-fm-uni-before.icon-bucket-90-before:before,.sprite-fm-uni.icon-bucket-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-bucket-90) +} +.sprite-fm-uni-after.icon-business-after:after,.sprite-fm-uni-before.icon-business-before:before,.sprite-fm-uni.icon-business{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-business) +} +.sprite-fm-uni-after.icon-cad-24-after:after,.sprite-fm-uni-before.icon-cad-24-before:before,.sprite-fm-uni.icon-cad-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-cad-24) +} +.sprite-fm-uni-after.icon-cad-90-after:after,.sprite-fm-uni-before.icon-cad-90-before:before,.sprite-fm-uni.icon-cad-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-cad-90) +} +.sprite-fm-uni-after.icon-calendar-after:after,.sprite-fm-uni-before.icon-calendar-before:before,.sprite-fm-uni.icon-calendar{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-calendar) +} +.sprite-fm-uni-after.icon-channel-after:after,.sprite-fm-uni-before.icon-channel-before:before,.sprite-fm-uni.icon-channel{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-channel) +} +.sprite-fm-uni-after.icon-chat-after:after,.sprite-fm-uni-before.icon-chat-before:before,.sprite-fm-uni.icon-chat{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-chat) +} +.sprite-fm-uni-after.icon-chat-group-after:after,.sprite-fm-uni-before.icon-chat-group-before:before,.sprite-fm-uni.icon-chat-group{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-chat-group) +} +.sprite-fm-uni-after.icon-chat-link-after:after,.sprite-fm-uni-before.icon-chat-link-before:before,.sprite-fm-uni.icon-chat-link{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-chat-link) +} +.sprite-fm-uni-after.icon-chat-new-after:after,.sprite-fm-uni-before.icon-chat-new-before:before,.sprite-fm-uni.icon-chat-new{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-chat-new) +} +.sprite-fm-uni-after.icon-chat-new-group-after:after,.sprite-fm-uni-before.icon-chat-new-group-before:before,.sprite-fm-uni.icon-chat-new-group{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-chat-new-group) +} +.sprite-fm-uni-after.icon-chat-send-after:after,.sprite-fm-uni-before.icon-chat-send-before:before,.sprite-fm-uni.icon-chat-send{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-chat-send) +} +.sprite-fm-uni-after.icon-check-after:after,.sprite-fm-uni-before.icon-check-before:before,.sprite-fm-uni.icon-check{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-check) +} +.sprite-fm-uni-after.icon-check-circle-after:after,.sprite-fm-uni-before.icon-check-circle-before:before,.sprite-fm-uni.icon-check-circle{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-check-circle) +} +.sprite-fm-uni-after.icon-chrome-after:after,.sprite-fm-uni-before.icon-chrome-before:before,.sprite-fm-uni.icon-chrome{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-chrome) +} +.sprite-fm-uni-after.icon-clear-history-after:after,.sprite-fm-uni-before.icon-clear-history-before:before,.sprite-fm-uni.icon-clear-history{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-clear-history) +} +.sprite-fm-uni-after.icon-compressed-24-after:after,.sprite-fm-uni-before.icon-compressed-24-before:before,.sprite-fm-uni.icon-compressed-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-compressed-24) +} +.sprite-fm-uni-after.icon-compressed-90-after:after,.sprite-fm-uni-before.icon-compressed-90-before:before,.sprite-fm-uni.icon-compressed-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-compressed-90) +} +.sprite-fm-uni-after.icon-contact-add-after:after,.sprite-fm-uni-before.icon-contact-add-before:before,.sprite-fm-uni.icon-contact-add{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-contact-add) +} +.sprite-fm-uni-after.icon-contact-send-after:after,.sprite-fm-uni-before.icon-contact-send-before:before,.sprite-fm-uni.icon-contact-send{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-contact-send) +} +.sprite-fm-uni-after.icon-crest-business-after:after,.sprite-fm-uni-before.icon-crest-business-before:before,.sprite-fm-uni.icon-crest-business{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crest-business) +} +.sprite-fm-uni-after.icon-crest-free-after:after,.sprite-fm-uni-before.icon-crest-free-before:before,.sprite-fm-uni.icon-crest-free{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crest-free) +} +.sprite-fm-uni-after.icon-crest-lite-after:after,.sprite-fm-uni-before.icon-crest-lite-before:before,.sprite-fm-uni.icon-crest-lite{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crest-lite) +} +.sprite-fm-uni-after.icon-crest-pro-1-after:after,.sprite-fm-uni-before.icon-crest-pro-1-before:before,.sprite-fm-uni.icon-crest-pro-1{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crest-pro-1) +} +.sprite-fm-uni-after.icon-crest-pro-2-after:after,.sprite-fm-uni-before.icon-crest-pro-2-before:before,.sprite-fm-uni.icon-crest-pro-2{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crest-pro-2) +} +.sprite-fm-uni-after.icon-crest-pro-3-after:after,.sprite-fm-uni-before.icon-crest-pro-3-before:before,.sprite-fm-uni.icon-crest-pro-3{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crest-pro-3) +} +.sprite-fm-uni-after.icon-crest-pro-flexi-after:after,.sprite-fm-uni-before.icon-crest-pro-flexi-before:before,.sprite-fm-uni.icon-crest-pro-flexi{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crest-pro-flexi) +} +.sprite-fm-uni-after.icon-crests-business-details-after:after,.sprite-fm-uni-before.icon-crests-business-details-before:before,.sprite-fm-uni.icon-crests-business-details{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crests-business-details) +} +.sprite-fm-uni-after.icon-crests-free-details-after:after,.sprite-fm-uni-before.icon-crests-free-details-before:before,.sprite-fm-uni.icon-crests-free-details{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crests-free-details) +} +.sprite-fm-uni-after.icon-crests-lite-details-after:after,.sprite-fm-uni-before.icon-crests-lite-details-before:before,.sprite-fm-uni.icon-crests-lite-details{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crests-lite-details) +} +.sprite-fm-uni-after.icon-crests-pro-1-details-after:after,.sprite-fm-uni-before.icon-crests-pro-1-details-before:before,.sprite-fm-uni.icon-crests-pro-1-details{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crests-pro-1-details) +} +.sprite-fm-uni-after.icon-crests-pro-2-details-after:after,.sprite-fm-uni-before.icon-crests-pro-2-details-before:before,.sprite-fm-uni.icon-crests-pro-2-details{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crests-pro-2-details) +} +.sprite-fm-uni-after.icon-crests-pro-3-details-after:after,.sprite-fm-uni-before.icon-crests-pro-3-details-before:before,.sprite-fm-uni.icon-crests-pro-3-details{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crests-pro-3-details) +} +.sprite-fm-uni-after.icon-crests-pro-flexi-details-after:after,.sprite-fm-uni-before.icon-crests-pro-flexi-details-before:before,.sprite-fm-uni.icon-crests-pro-flexi-details{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-crests-pro-flexi-details) +} +.sprite-fm-uni-after.icon-disable-after:after,.sprite-fm-uni-before.icon-disable-before:before,.sprite-fm-uni.icon-disable{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-disable) +} +.sprite-fm-uni-after.icon-discover-after:after,.sprite-fm-uni-before.icon-discover-before:before,.sprite-fm-uni.icon-discover{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-discover) +} +.sprite-fm-uni-after.icon-dmg-24-after:after,.sprite-fm-uni-before.icon-dmg-24-before:before,.sprite-fm-uni.icon-dmg-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-dmg-24) +} +.sprite-fm-uni-after.icon-dmg-90-after:after,.sprite-fm-uni-before.icon-dmg-90-before:before,.sprite-fm-uni.icon-dmg-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-dmg-90) +} +.sprite-fm-uni-after.icon-document-after:after,.sprite-fm-uni-before.icon-document-before:before,.sprite-fm-uni.icon-document{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-document) +} +.sprite-fm-uni-after.icon-ekr-after:after,.sprite-fm-uni-before.icon-ekr-before:before,.sprite-fm-uni.icon-ekr{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-ekr) +} +.sprite-fm-uni-after.icon-ekr-key-after:after,.sprite-fm-uni-before.icon-ekr-key-before:before,.sprite-fm-uni.icon-ekr-key{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-ekr-key) +} +.sprite-fm-uni-after.icon-email-after:after,.sprite-fm-uni-before.icon-email-before:before,.sprite-fm-uni.icon-email{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-email) +} +.sprite-fm-uni-after.icon-error-after:after,.sprite-fm-uni-before.icon-error-before:before,.sprite-fm-uni.icon-error{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-error) +} +.sprite-fm-uni-after.icon-ex-drive-24-after:after,.sprite-fm-uni-before.icon-ex-drive-24-before:before,.sprite-fm-uni.icon-ex-drive-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-ex-drive-24) +} +.sprite-fm-uni-after.icon-ex-drive-90-after:after,.sprite-fm-uni-before.icon-ex-drive-90-before:before,.sprite-fm-uni.icon-ex-drive-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-ex-drive-90) +} +.sprite-fm-uni-after.icon-excel-24-after:after,.sprite-fm-uni-before.icon-excel-24-before:before,.sprite-fm-uni.icon-excel-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-excel-24) +} +.sprite-fm-uni-after.icon-excel-90-after:after,.sprite-fm-uni-before.icon-excel-90-before:before,.sprite-fm-uni.icon-excel-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-excel-90) +} +.sprite-fm-uni-after.icon-executable-24-after:after,.sprite-fm-uni-before.icon-executable-24-before:before,.sprite-fm-uni.icon-executable-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-executable-24) +} +.sprite-fm-uni-after.icon-executable-90-after:after,.sprite-fm-uni-before.icon-executable-90-before:before,.sprite-fm-uni.icon-executable-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-executable-90) +} +.sprite-fm-uni-after.icon-experiencedesign-24-after:after,.sprite-fm-uni-before.icon-experiencedesign-24-before:before,.sprite-fm-uni.icon-experiencedesign-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-experiencedesign-24) +} +.sprite-fm-uni-after.icon-experiencedesign-90-after:after,.sprite-fm-uni-before.icon-experiencedesign-90-before:before,.sprite-fm-uni.icon-experiencedesign-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-experiencedesign-90) +} +.sprite-fm-uni-after.icon-facebook-after:after,.sprite-fm-uni-before.icon-facebook-before:before,.sprite-fm-uni.icon-facebook{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-facebook) +} +.sprite-fm-uni-after.icon-file-upload-after:after,.sprite-fm-uni-before.icon-file-upload-before:before,.sprite-fm-uni.icon-file-upload{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-file-upload) +} +.sprite-fm-uni-after.icon-files-after:after,.sprite-fm-uni-before.icon-files-before:before,.sprite-fm-uni.icon-files{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-files) +} +.sprite-fm-uni-after.icon-folder-24-after:after,.sprite-fm-uni-before.icon-folder-24-before:before,.sprite-fm-uni.icon-folder-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-24) +} +.sprite-fm-uni-after.icon-folder-90-after:after,.sprite-fm-uni-before.icon-folder-90-before:before,.sprite-fm-uni.icon-folder-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-90) +} +.sprite-fm-uni-after.icon-folder-camera-uploads-24-after:after,.sprite-fm-uni-before.icon-folder-camera-uploads-24-before:before,.sprite-fm-uni.icon-folder-camera-uploads-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-camera-uploads-24) +} +.sprite-fm-uni-after.icon-folder-camera-uploads-90-after:after,.sprite-fm-uni-before.icon-folder-camera-uploads-90-before:before,.sprite-fm-uni.icon-folder-camera-uploads-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-camera-uploads-90) +} +.sprite-fm-uni-after.icon-folder-chat-24-after:after,.sprite-fm-uni-before.icon-folder-chat-24-before:before,.sprite-fm-uni.icon-folder-chat-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-chat-24) +} +.sprite-fm-uni-after.icon-folder-chat-90-after:after,.sprite-fm-uni-before.icon-folder-chat-90-before:before,.sprite-fm-uni.icon-folder-chat-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-chat-90) +} +.sprite-fm-uni-after.icon-folder-incoming-24-after:after,.sprite-fm-uni-before.icon-folder-incoming-24-before:before,.sprite-fm-uni.icon-folder-incoming-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-incoming-24) +} +.sprite-fm-uni-after.icon-folder-incoming-90-after:after,.sprite-fm-uni-before.icon-folder-incoming-90-before:before,.sprite-fm-uni.icon-folder-incoming-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-incoming-90) +} +.sprite-fm-uni-after.icon-folder-megadrop-24-after:after,.sprite-fm-uni-before.icon-folder-megadrop-24-before:before,.sprite-fm-uni.icon-folder-megadrop-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-megadrop-24) +} +.sprite-fm-uni-after.icon-folder-megadrop-90-after:after,.sprite-fm-uni-before.icon-folder-megadrop-90-before:before,.sprite-fm-uni.icon-folder-megadrop-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-megadrop-90) +} +.sprite-fm-uni-after.icon-folder-new-after:after,.sprite-fm-uni-before.icon-folder-new-before:before,.sprite-fm-uni.icon-folder-new{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-new) +} +.sprite-fm-uni-after.icon-folder-outgoing-24-after:after,.sprite-fm-uni-before.icon-folder-outgoing-24-before:before,.sprite-fm-uni.icon-folder-outgoing-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-outgoing-24) +} +.sprite-fm-uni-after.icon-folder-outgoing-90-after:after,.sprite-fm-uni-before.icon-folder-outgoing-90-before:before,.sprite-fm-uni.icon-folder-outgoing-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-outgoing-90) +} +.sprite-fm-uni-after.icon-folder-public-24-after:after,.sprite-fm-uni-before.icon-folder-public-24-before:before,.sprite-fm-uni.icon-folder-public-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-public-24) +} +.sprite-fm-uni-after.icon-folder-public-90-after:after,.sprite-fm-uni-before.icon-folder-public-90-before:before,.sprite-fm-uni.icon-folder-public-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-public-90) +} +.sprite-fm-uni-after.icon-folder-sync-24-after:after,.sprite-fm-uni-before.icon-folder-sync-24-before:before,.sprite-fm-uni.icon-folder-sync-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-sync-24) +} +.sprite-fm-uni-after.icon-folder-sync-90-after:after,.sprite-fm-uni-before.icon-folder-sync-90-before:before,.sprite-fm-uni.icon-folder-sync-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-sync-90) +} +.sprite-fm-uni-after.icon-folder-upload-after:after,.sprite-fm-uni-before.icon-folder-upload-before:before,.sprite-fm-uni.icon-folder-upload{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-folder-upload) +} +.sprite-fm-uni-after.icon-font-24-after:after,.sprite-fm-uni-before.icon-font-24-before:before,.sprite-fm-uni.icon-font-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-font-24) +} +.sprite-fm-uni-after.icon-font-90-after:after,.sprite-fm-uni-before.icon-font-90-before:before,.sprite-fm-uni.icon-font-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-font-90) +} +.sprite-fm-uni-after.icon-gallery-after:after,.sprite-fm-uni-before.icon-gallery-before:before,.sprite-fm-uni.icon-gallery{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-gallery) +} +.sprite-fm-uni-after.icon-generic-24-after:after,.sprite-fm-uni-before.icon-generic-24-before:before,.sprite-fm-uni.icon-generic-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-generic-24) +} +.sprite-fm-uni-after.icon-generic-90-after:after,.sprite-fm-uni-before.icon-generic-90-before:before,.sprite-fm-uni.icon-generic-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-generic-90) +} +.sprite-fm-uni-after.icon-gif-hover-after:after,.sprite-fm-uni-before.icon-gif-hover-before:before,.sprite-fm-uni.icon-gif-hover{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-gif-hover) +} +.sprite-fm-uni-after.icon-hazard-after:after,.sprite-fm-uni-before.icon-hazard-before:before,.sprite-fm-uni.icon-hazard{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-hazard) +} +.sprite-fm-uni-after.icon-history-after:after,.sprite-fm-uni-before.icon-history-before:before,.sprite-fm-uni.icon-history{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-history) +} +.sprite-fm-uni-after.icon-home-after:after,.sprite-fm-uni-before.icon-home-before:before,.sprite-fm-uni.icon-home{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-home) +} +.sprite-fm-uni-after.icon-illustrator-24-after:after,.sprite-fm-uni-before.icon-illustrator-24-before:before,.sprite-fm-uni.icon-illustrator-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-illustrator-24) +} +.sprite-fm-uni-after.icon-illustrator-90-after:after,.sprite-fm-uni-before.icon-illustrator-90-before:before,.sprite-fm-uni.icon-illustrator-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-illustrator-90) +} +.sprite-fm-uni-after.icon-image-24-after:after,.sprite-fm-uni-before.icon-image-24-before:before,.sprite-fm-uni.icon-image-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-image-24) +} +.sprite-fm-uni-after.icon-image-90-after:after,.sprite-fm-uni-before.icon-image-90-before:before,.sprite-fm-uni.icon-image-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-image-90) +} +.sprite-fm-uni-after.icon-indesign-24-after:after,.sprite-fm-uni-before.icon-indesign-24-before:before,.sprite-fm-uni.icon-indesign-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-indesign-24) +} +.sprite-fm-uni-after.icon-indesign-90-after:after,.sprite-fm-uni-before.icon-indesign-90-before:before,.sprite-fm-uni.icon-indesign-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-indesign-90) +} +.sprite-fm-uni-after.icon-info-after:after,.sprite-fm-uni-before.icon-info-before:before,.sprite-fm-uni.icon-info{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-info) +} +.sprite-fm-uni-after.icon-instagram-after:after,.sprite-fm-uni-before.icon-instagram-before:before,.sprite-fm-uni.icon-instagram{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-instagram) +} +.sprite-fm-uni-after.icon-jcb-after:after,.sprite-fm-uni-before.icon-jcb-before:before,.sprite-fm-uni.icon-jcb{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-jcb) +} +.sprite-fm-uni-after.icon-keynote-24-after:after,.sprite-fm-uni-before.icon-keynote-24-before:before,.sprite-fm-uni.icon-keynote-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-keynote-24) +} +.sprite-fm-uni-after.icon-keynote-90-after:after,.sprite-fm-uni-before.icon-keynote-90-before:before,.sprite-fm-uni.icon-keynote-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-keynote-90) +} +.sprite-fm-uni-after.icon-link-after:after,.sprite-fm-uni-before.icon-link-before:before,.sprite-fm-uni.icon-link{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-link) +} +.sprite-fm-uni-after.icon-linkedin-after:after,.sprite-fm-uni-before.icon-linkedin-before:before,.sprite-fm-uni.icon-linkedin{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-linkedin) +} +.sprite-fm-uni-after.icon-loading-after:after,.sprite-fm-uni-before.icon-loading-before:before,.sprite-fm-uni.icon-loading{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-loading) +} +.sprite-fm-uni-after.icon-lock-after:after,.sprite-fm-uni-before.icon-lock-before:before,.sprite-fm-uni.icon-lock{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-lock) +} +.sprite-fm-uni-after.icon-mastercard-after:after,.sprite-fm-uni-before.icon-mastercard-before:before,.sprite-fm-uni.icon-mastercard{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-mastercard) +} +.sprite-fm-uni-after.icon-mastercard-border-after:after,.sprite-fm-uni-before.icon-mastercard-border-before:before,.sprite-fm-uni.icon-mastercard-border{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-mastercard-border) +} +.sprite-fm-uni-after.icon-mega-logo-after:after,.sprite-fm-uni-before.icon-mega-logo-before:before,.sprite-fm-uni.icon-mega-logo{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-mega-logo) +} +.sprite-fm-uni-after.icon-mobile-24-after:after,.sprite-fm-uni-before.icon-mobile-24-before:before,.sprite-fm-uni.icon-mobile-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-mobile-24) +} +.sprite-fm-uni-after.icon-mobile-90-after:after,.sprite-fm-uni-before.icon-mobile-90-before:before,.sprite-fm-uni.icon-mobile-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-mobile-90) +} +.sprite-fm-uni-after.icon-mobile-android-24-after:after,.sprite-fm-uni-before.icon-mobile-android-24-before:before,.sprite-fm-uni.icon-mobile-android-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-mobile-android-24) +} +.sprite-fm-uni-after.icon-mobile-android-90-after:after,.sprite-fm-uni-before.icon-mobile-android-90-before:before,.sprite-fm-uni.icon-mobile-android-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-mobile-android-90) +} +.sprite-fm-uni-after.icon-mobile-ios-24-after:after,.sprite-fm-uni-before.icon-mobile-ios-24-before:before,.sprite-fm-uni.icon-mobile-ios-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-mobile-ios-24) +} +.sprite-fm-uni-after.icon-mobile-ios-90-after:after,.sprite-fm-uni-before.icon-mobile-ios-90-before:before,.sprite-fm-uni.icon-mobile-ios-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-mobile-ios-90) +} +.sprite-fm-uni-after.icon-new-after:after,.sprite-fm-uni-before.icon-new-before:before,.sprite-fm-uni.icon-new{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-new) +} +.sprite-fm-uni-after.icon-numbers-24-after:after,.sprite-fm-uni-before.icon-numbers-24-before:before,.sprite-fm-uni.icon-numbers-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-numbers-24) +} +.sprite-fm-uni-after.icon-numbers-90-after:after,.sprite-fm-uni-before.icon-numbers-90-before:before,.sprite-fm-uni.icon-numbers-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-numbers-90) +} +.sprite-fm-uni-after.icon-open-folder-24-after:after,.sprite-fm-uni-before.icon-open-folder-24-before:before,.sprite-fm-uni.icon-open-folder-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-folder-24) +} +.sprite-fm-uni-after.icon-open-folder-camera-uploads-24-after:after,.sprite-fm-uni-before.icon-open-folder-camera-uploads-24-before:before,.sprite-fm-uni.icon-open-folder-camera-uploads-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-folder-camera-uploads-24) +} +.sprite-fm-uni-after.icon-open-folder-chat-24-after:after,.sprite-fm-uni-before.icon-open-folder-chat-24-before:before,.sprite-fm-uni.icon-open-folder-chat-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-folder-chat-24) +} +.sprite-fm-uni-after.icon-open-folder-incoming-24-after:after,.sprite-fm-uni-before.icon-open-folder-incoming-24-before:before,.sprite-fm-uni.icon-open-folder-incoming-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-folder-incoming-24) +} +.sprite-fm-uni-after.icon-open-folder-megadrop-24-after:after,.sprite-fm-uni-before.icon-open-folder-megadrop-24-before:before,.sprite-fm-uni.icon-open-folder-megadrop-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-folder-megadrop-24) +} +.sprite-fm-uni-after.icon-open-folder-outgoing-24-after:after,.sprite-fm-uni-before.icon-open-folder-outgoing-24-before:before,.sprite-fm-uni.icon-open-folder-outgoing-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-folder-outgoing-24) +} +.sprite-fm-uni-after.icon-open-folder-public-24-after:after,.sprite-fm-uni-before.icon-open-folder-public-24-before:before,.sprite-fm-uni.icon-open-folder-public-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-folder-public-24) +} +.sprite-fm-uni-after.icon-open-folder-sync-24-after:after,.sprite-fm-uni-before.icon-open-folder-sync-24-before:before,.sprite-fm-uni.icon-open-folder-sync-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-folder-sync-24) +} +.sprite-fm-uni-after.icon-open-office-24-after:after,.sprite-fm-uni-before.icon-open-office-24-before:before,.sprite-fm-uni.icon-open-office-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-office-24) +} +.sprite-fm-uni-after.icon-open-office-90-after:after,.sprite-fm-uni-before.icon-open-office-90-before:before,.sprite-fm-uni.icon-open-office-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-office-90) +} +.sprite-fm-uni-after.icon-open-rubbish-folder-24-after:after,.sprite-fm-uni-before.icon-open-rubbish-folder-24-before:before,.sprite-fm-uni.icon-open-rubbish-folder-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-rubbish-folder-24) +} +.sprite-fm-uni-after.icon-open-rubbish-folder-camera-uploads-24-after:after,.sprite-fm-uni-before.icon-open-rubbish-folder-camera-uploads-24-before:before,.sprite-fm-uni.icon-open-rubbish-folder-camera-uploads-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-rubbish-folder-camera-uploads-24) +} +.sprite-fm-uni-after.icon-open-rubbish-folder-chat-24-after:after,.sprite-fm-uni-before.icon-open-rubbish-folder-chat-24-before:before,.sprite-fm-uni.icon-open-rubbish-folder-chat-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-rubbish-folder-chat-24) +} +.sprite-fm-uni-after.icon-open-rubbish-folder-incoming-24-after:after,.sprite-fm-uni-before.icon-open-rubbish-folder-incoming-24-before:before,.sprite-fm-uni.icon-open-rubbish-folder-incoming-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-rubbish-folder-incoming-24) +} +.sprite-fm-uni-after.icon-open-rubbish-folder-megadrop-24-after:after,.sprite-fm-uni-before.icon-open-rubbish-folder-megadrop-24-before:before,.sprite-fm-uni.icon-open-rubbish-folder-megadrop-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-rubbish-folder-megadrop-24) +} +.sprite-fm-uni-after.icon-open-rubbish-folder-outgoing-24-after:after,.sprite-fm-uni-before.icon-open-rubbish-folder-outgoing-24-before:before,.sprite-fm-uni.icon-open-rubbish-folder-outgoing-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-rubbish-folder-outgoing-24) +} +.sprite-fm-uni-after.icon-open-rubbish-folder-public-24-after:after,.sprite-fm-uni-before.icon-open-rubbish-folder-public-24-before:before,.sprite-fm-uni.icon-open-rubbish-folder-public-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-rubbish-folder-public-24) +} +.sprite-fm-uni-after.icon-open-rubbish-folder-sync-24-after:after,.sprite-fm-uni-before.icon-open-rubbish-folder-sync-24-before:before,.sprite-fm-uni.icon-open-rubbish-folder-sync-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-open-rubbish-folder-sync-24) +} +.sprite-fm-uni-after.icon-owner-after:after,.sprite-fm-uni-before.icon-owner-before:before,.sprite-fm-uni.icon-owner{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-owner) +} +.sprite-fm-uni-after.icon-pages-24-after:after,.sprite-fm-uni-before.icon-pages-24-before:before,.sprite-fm-uni.icon-pages-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pages-24) +} +.sprite-fm-uni-after.icon-pages-90-after:after,.sprite-fm-uni-before.icon-pages-90-before:before,.sprite-fm-uni.icon-pages-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pages-90) +} +.sprite-fm-uni-after.icon-payment-after:after,.sprite-fm-uni-before.icon-payment-before:before,.sprite-fm-uni.icon-payment{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-payment) +} +.sprite-fm-uni-after.icon-pc-24-after:after,.sprite-fm-uni-before.icon-pc-24-before:before,.sprite-fm-uni.icon-pc-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pc-24) +} +.sprite-fm-uni-after.icon-pc-90-after:after,.sprite-fm-uni-before.icon-pc-90-before:before,.sprite-fm-uni.icon-pc-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pc-90) +} +.sprite-fm-uni-after.icon-pc-linux-24-after:after,.sprite-fm-uni-before.icon-pc-linux-24-before:before,.sprite-fm-uni.icon-pc-linux-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pc-linux-24) +} +.sprite-fm-uni-after.icon-pc-linux-90-after:after,.sprite-fm-uni-before.icon-pc-linux-90-before:before,.sprite-fm-uni.icon-pc-linux-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pc-linux-90) +} +.sprite-fm-uni-after.icon-pc-mac-24-after:after,.sprite-fm-uni-before.icon-pc-mac-24-before:before,.sprite-fm-uni.icon-pc-mac-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pc-mac-24) +} +.sprite-fm-uni-after.icon-pc-mac-90-after:after,.sprite-fm-uni-before.icon-pc-mac-90-before:before,.sprite-fm-uni.icon-pc-mac-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pc-mac-90) +} +.sprite-fm-uni-after.icon-pc-win-24-after:after,.sprite-fm-uni-before.icon-pc-win-24-before:before,.sprite-fm-uni.icon-pc-win-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pc-win-24) +} +.sprite-fm-uni-after.icon-pc-win-90-after:after,.sprite-fm-uni-before.icon-pc-win-90-before:before,.sprite-fm-uni.icon-pc-win-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pc-win-90) +} +.sprite-fm-uni-after.icon-pdf-24-after:after,.sprite-fm-uni-before.icon-pdf-24-before:before,.sprite-fm-uni.icon-pdf-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pdf-24) +} +.sprite-fm-uni-after.icon-pdf-90-after:after,.sprite-fm-uni-before.icon-pdf-90-before:before,.sprite-fm-uni.icon-pdf-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pdf-90) +} +.sprite-fm-uni-after.icon-pending-euro-after:after,.sprite-fm-uni-before.icon-pending-euro-before:before,.sprite-fm-uni.icon-pending-euro{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-pending-euro) +} +.sprite-fm-uni-after.icon-phone-after:after,.sprite-fm-uni-before.icon-phone-before:before,.sprite-fm-uni.icon-phone{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-phone) +} +.sprite-fm-uni-after.icon-photos-after:after,.sprite-fm-uni-before.icon-photos-before:before,.sprite-fm-uni.icon-photos{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-photos) +} +.sprite-fm-uni-after.icon-photoshop-24-after:after,.sprite-fm-uni-before.icon-photoshop-24-before:before,.sprite-fm-uni.icon-photoshop-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-photoshop-24) +} +.sprite-fm-uni-after.icon-photoshop-90-after:after,.sprite-fm-uni-before.icon-photoshop-90-before:before,.sprite-fm-uni.icon-photoshop-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-photoshop-90) +} +.sprite-fm-uni-after.icon-plan-expiry-after:after,.sprite-fm-uni-before.icon-plan-expiry-before:before,.sprite-fm-uni.icon-plan-expiry{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-plan-expiry) +} +.sprite-fm-uni-after.icon-powerpoint-24-after:after,.sprite-fm-uni-before.icon-powerpoint-24-before:before,.sprite-fm-uni.icon-powerpoint-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-powerpoint-24) +} +.sprite-fm-uni-after.icon-powerpoint-90-after:after,.sprite-fm-uni-before.icon-powerpoint-90-before:before,.sprite-fm-uni.icon-powerpoint-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-powerpoint-90) +} +.sprite-fm-uni-after.icon-premiere-24-after:after,.sprite-fm-uni-before.icon-premiere-24-before:before,.sprite-fm-uni.icon-premiere-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-premiere-24) +} +.sprite-fm-uni-after.icon-premiere-90-after:after,.sprite-fm-uni-before.icon-premiere-90-before:before,.sprite-fm-uni.icon-premiere-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-premiere-90) +} +.sprite-fm-uni-after.icon-question-after:after,.sprite-fm-uni-before.icon-question-before:before,.sprite-fm-uni.icon-question{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-question) +} +.sprite-fm-uni-after.icon-raw-24-after:after,.sprite-fm-uni-before.icon-raw-24-before:before,.sprite-fm-uni.icon-raw-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-raw-24) +} +.sprite-fm-uni-after.icon-raw-90-after:after,.sprite-fm-uni-before.icon-raw-90-before:before,.sprite-fm-uni.icon-raw-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-raw-90) +} +.sprite-fm-uni-after.icon-recovery-key-after:after,.sprite-fm-uni-before.icon-recovery-key-before:before,.sprite-fm-uni.icon-recovery-key{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-recovery-key) +} +.sprite-fm-uni-after.icon-referral-after:after,.sprite-fm-uni-before.icon-referral-before:before,.sprite-fm-uni.icon-referral{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-referral) +} +.sprite-fm-uni-after.icon-rename-after:after,.sprite-fm-uni-before.icon-rename-before:before,.sprite-fm-uni.icon-rename{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rename) +} +.sprite-fm-uni-after.icon-rubbish-folder-24-after:after,.sprite-fm-uni-before.icon-rubbish-folder-24-before:before,.sprite-fm-uni.icon-rubbish-folder-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-24) +} +.sprite-fm-uni-after.icon-rubbish-folder-90-after:after,.sprite-fm-uni-before.icon-rubbish-folder-90-before:before,.sprite-fm-uni.icon-rubbish-folder-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-90) +} +.sprite-fm-uni-after.icon-rubbish-folder-backup-90-after:after,.sprite-fm-uni-before.icon-rubbish-folder-backup-90-before:before,.sprite-fm-uni.icon-rubbish-folder-backup-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-backup-90) +} +.sprite-fm-uni-after.icon-rubbish-folder-camera-uploads-24-after:after,.sprite-fm-uni-before.icon-rubbish-folder-camera-uploads-24-before:before,.sprite-fm-uni.icon-rubbish-folder-camera-uploads-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-camera-uploads-24) +} +.sprite-fm-uni-after.icon-rubbish-folder-camera-uploads-90-after:after,.sprite-fm-uni-before.icon-rubbish-folder-camera-uploads-90-before:before,.sprite-fm-uni.icon-rubbish-folder-camera-uploads-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-camera-uploads-90) +} +.sprite-fm-uni-after.icon-rubbish-folder-chat-24-after:after,.sprite-fm-uni-before.icon-rubbish-folder-chat-24-before:before,.sprite-fm-uni.icon-rubbish-folder-chat-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-chat-24) +} +.sprite-fm-uni-after.icon-rubbish-folder-chat-90-after:after,.sprite-fm-uni-before.icon-rubbish-folder-chat-90-before:before,.sprite-fm-uni.icon-rubbish-folder-chat-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-chat-90) +} +.sprite-fm-uni-after.icon-rubbish-folder-incoming-24-after:after,.sprite-fm-uni-before.icon-rubbish-folder-incoming-24-before:before,.sprite-fm-uni.icon-rubbish-folder-incoming-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-incoming-24) +} +.sprite-fm-uni-after.icon-rubbish-folder-incoming-90-after:after,.sprite-fm-uni-before.icon-rubbish-folder-incoming-90-before:before,.sprite-fm-uni.icon-rubbish-folder-incoming-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-incoming-90) +} +.sprite-fm-uni-after.icon-rubbish-folder-megadrop-24-after:after,.sprite-fm-uni-before.icon-rubbish-folder-megadrop-24-before:before,.sprite-fm-uni.icon-rubbish-folder-megadrop-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-megadrop-24) +} +.sprite-fm-uni-after.icon-rubbish-folder-outgoing-24-after:after,.sprite-fm-uni-before.icon-rubbish-folder-outgoing-24-before:before,.sprite-fm-uni.icon-rubbish-folder-outgoing-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-outgoing-24) +} +.sprite-fm-uni-after.icon-rubbish-folder-outgoing-90-after:after,.sprite-fm-uni-before.icon-rubbish-folder-outgoing-90-before:before,.sprite-fm-uni.icon-rubbish-folder-outgoing-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-outgoing-90) +} +.sprite-fm-uni-after.icon-rubbish-folder-public-24-after:after,.sprite-fm-uni-before.icon-rubbish-folder-public-24-before:before,.sprite-fm-uni.icon-rubbish-folder-public-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-public-24) +} +.sprite-fm-uni-after.icon-rubbish-folder-public-90-after:after,.sprite-fm-uni-before.icon-rubbish-folder-public-90-before:before,.sprite-fm-uni.icon-rubbish-folder-public-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-public-90) +} +.sprite-fm-uni-after.icon-rubbish-folder-sync-24-after:after,.sprite-fm-uni-before.icon-rubbish-folder-sync-24-before:before,.sprite-fm-uni.icon-rubbish-folder-sync-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-sync-24) +} +.sprite-fm-uni-after.icon-rubbish-folder-sync-90-after:after,.sprite-fm-uni-before.icon-rubbish-folder-sync-90-before:before,.sprite-fm-uni.icon-rubbish-folder-sync-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-rubbish-folder-sync-90) +} +.sprite-fm-uni-after.icon-send-cloud-drive-after:after,.sprite-fm-uni-before.icon-send-cloud-drive-before:before,.sprite-fm-uni.icon-send-cloud-drive{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-send-cloud-drive) +} +.sprite-fm-uni-after.icon-send-computer-after:after,.sprite-fm-uni-before.icon-send-computer-before:before,.sprite-fm-uni.icon-send-computer{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-send-computer) +} +.sprite-fm-uni-after.icon-send-requests-after:after,.sprite-fm-uni-before.icon-send-requests-before:before,.sprite-fm-uni.icon-send-requests{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-send-requests) +} +.sprite-fm-uni-after.icon-settings-after:after,.sprite-fm-uni-before.icon-settings-before:before,.sprite-fm-uni.icon-settings{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-settings) +} +.sprite-fm-uni-after.icon-share-file-after:after,.sprite-fm-uni-before.icon-share-file-before:before,.sprite-fm-uni.icon-share-file{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-share-file) +} +.sprite-fm-uni-after.icon-sidebar-collapse-left-after:after,.sprite-fm-uni-before.icon-sidebar-collapse-left-before:before,.sprite-fm-uni.icon-sidebar-collapse-left{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-sidebar-collapse-left) +} +.sprite-fm-uni-after.icon-sidebar-collapse-right-after:after,.sprite-fm-uni-before.icon-sidebar-collapse-right-before:before,.sprite-fm-uni.icon-sidebar-collapse-right{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-sidebar-collapse-right) +} +.sprite-fm-uni-after.icon-sketch-24-after:after,.sprite-fm-uni-before.icon-sketch-24-before:before,.sprite-fm-uni.icon-sketch-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-sketch-24) +} +.sprite-fm-uni-after.icon-sketch-90-after:after,.sprite-fm-uni-before.icon-sketch-90-before:before,.sprite-fm-uni.icon-sketch-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-sketch-90) +} +.sprite-fm-uni-after.icon-spreadsheet-24-after:after,.sprite-fm-uni-before.icon-spreadsheet-24-before:before,.sprite-fm-uni.icon-spreadsheet-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-spreadsheet-24) +} +.sprite-fm-uni-after.icon-spreadsheet-90-after:after,.sprite-fm-uni-before.icon-spreadsheet-90-before:before,.sprite-fm-uni.icon-spreadsheet-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-spreadsheet-90) +} +.sprite-fm-uni-after.icon-storage-quota-after:after,.sprite-fm-uni-before.icon-storage-quota-before:before,.sprite-fm-uni.icon-storage-quota{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-storage-quota) +} +.sprite-fm-uni-after.icon-success-after:after,.sprite-fm-uni-before.icon-success-before:before,.sprite-fm-uni.icon-success{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-success) +} +.sprite-fm-uni-after.icon-sun-after:after,.sprite-fm-uni-before.icon-sun-before:before,.sprite-fm-uni.icon-sun{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-sun) +} +.sprite-fm-uni-after.icon-takedown-after:after,.sprite-fm-uni-before.icon-takedown-before:before,.sprite-fm-uni.icon-takedown{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-takedown) +} +.sprite-fm-uni-after.icon-text-24-after:after,.sprite-fm-uni-before.icon-text-24-before:before,.sprite-fm-uni.icon-text-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-text-24) +} +.sprite-fm-uni-after.icon-text-90-after:after,.sprite-fm-uni-before.icon-text-90-before:before,.sprite-fm-uni.icon-text-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-text-90) +} +.sprite-fm-uni-after.icon-torrent-24-after:after,.sprite-fm-uni-before.icon-torrent-24-before:before,.sprite-fm-uni.icon-torrent-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-torrent-24) +} +.sprite-fm-uni-after.icon-torrent-90-after:after,.sprite-fm-uni-before.icon-torrent-90-before:before,.sprite-fm-uni.icon-torrent-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-torrent-90) +} +.sprite-fm-uni-after.icon-transfer-full-meter-after:after,.sprite-fm-uni-before.icon-transfer-full-meter-before:before,.sprite-fm-uni.icon-transfer-full-meter{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-transfer-full-meter) +} +.sprite-fm-uni-after.icon-transfer-quota-after:after,.sprite-fm-uni-before.icon-transfer-quota-before:before,.sprite-fm-uni.icon-transfer-quota{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-transfer-quota) +} +.sprite-fm-uni-after.icon-transfers-after:after,.sprite-fm-uni-before.icon-transfers-before:before,.sprite-fm-uni.icon-transfers{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-transfers) +} +.sprite-fm-uni-after.icon-twitter-after:after,.sprite-fm-uni-before.icon-twitter-before:before,.sprite-fm-uni.icon-twitter{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-twitter) +} +.sprite-fm-uni-after.icon-union-pay-after:after,.sprite-fm-uni-before.icon-union-pay-before:before,.sprite-fm-uni.icon-union-pay{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-union-pay) +} +.sprite-fm-uni-after.icon-upgrade-to-pro-after:after,.sprite-fm-uni-before.icon-upgrade-to-pro-before:before,.sprite-fm-uni.icon-upgrade-to-pro{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-upgrade-to-pro) +} +.sprite-fm-uni-after.icon-url-24-after:after,.sprite-fm-uni-before.icon-url-24-before:before,.sprite-fm-uni.icon-url-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-url-24) +} +.sprite-fm-uni-after.icon-url-90-after:after,.sprite-fm-uni-before.icon-url-90-before:before,.sprite-fm-uni.icon-url-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-url-90) +} +.sprite-fm-uni-after.icon-users-after:after,.sprite-fm-uni-before.icon-users-before:before,.sprite-fm-uni.icon-users{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-users) +} +.sprite-fm-uni-after.icon-vector-24-after:after,.sprite-fm-uni-before.icon-vector-24-before:before,.sprite-fm-uni.icon-vector-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-vector-24) +} +.sprite-fm-uni-after.icon-vector-90-after:after,.sprite-fm-uni-before.icon-vector-90-before:before,.sprite-fm-uni.icon-vector-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-vector-90) +} +.sprite-fm-uni-after.icon-video-after:after,.sprite-fm-uni-before.icon-video-before:before,.sprite-fm-uni.icon-video{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-video) +} +.sprite-fm-uni-after.icon-video-24-after:after,.sprite-fm-uni-before.icon-video-24-before:before,.sprite-fm-uni.icon-video-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-video-24) +} +.sprite-fm-uni-after.icon-video-90-after:after,.sprite-fm-uni-before.icon-video-90-before:before,.sprite-fm-uni.icon-video-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-video-90) +} +.sprite-fm-uni-after.icon-visa-after:after,.sprite-fm-uni-before.icon-visa-before:before,.sprite-fm-uni.icon-visa{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-visa) +} +.sprite-fm-uni-after.icon-visa-border-after:after,.sprite-fm-uni-before.icon-visa-border-before:before,.sprite-fm-uni.icon-visa-border{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-visa-border) +} +.sprite-fm-uni-after.icon-warning-after:after,.sprite-fm-uni-before.icon-warning-before:before,.sprite-fm-uni.icon-warning{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-warning) +} +.sprite-fm-uni-after.icon-weak-signal-after:after,.sprite-fm-uni-before.icon-weak-signal-before:before,.sprite-fm-uni.icon-weak-signal{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-weak-signal) +} +.sprite-fm-uni-after.icon-web-data-24-after:after,.sprite-fm-uni-before.icon-web-data-24-before:before,.sprite-fm-uni.icon-web-data-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-web-data-24) +} +.sprite-fm-uni-after.icon-web-data-90-after:after,.sprite-fm-uni-before.icon-web-data-90-before:before,.sprite-fm-uni.icon-web-data-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-web-data-90) +} +.sprite-fm-uni-after.icon-web-lang-24-after:after,.sprite-fm-uni-before.icon-web-lang-24-before:before,.sprite-fm-uni.icon-web-lang-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-web-lang-24) +} +.sprite-fm-uni-after.icon-web-lang-90-after:after,.sprite-fm-uni-before.icon-web-lang-90-before:before,.sprite-fm-uni.icon-web-lang-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-web-lang-90) +} +.sprite-fm-uni-after.icon-web-link-after:after,.sprite-fm-uni-before.icon-web-link-before:before,.sprite-fm-uni.icon-web-link{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-web-link) +} +.sprite-fm-uni-after.icon-word-24-after:after,.sprite-fm-uni-before.icon-word-24-before:before,.sprite-fm-uni.icon-word-24{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-word-24) +} +.sprite-fm-uni-after.icon-word-90-after:after,.sprite-fm-uni-before.icon-word-90-before:before,.sprite-fm-uni.icon-word-90{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-word-90) +} +.sprite-fm-uni-after.icon-youtube-after:after,.sprite-fm-uni-before.icon-youtube-before:before,.sprite-fm-uni.icon-youtube{ + background-image:url(../imagery/sprites-fm-uni-uni.6f4e92cb6f1ee7bc.svg#icon-youtube) +} + +@font-face{ + font-display:block; + font-family:fm-mono; + src:url(../imagery/sprites-fm-mono.78bd94d595617432.eot?t=1669632684604); + src:url(../imagery/sprites-fm-mono.78bd94d595617432.eot?t=1669632684604#iefix) format("embedded-opentype"), + url(../imagery/sprites-fm-mono.a77e8ecf73f875a9.woff2?t=1669632684604) format("woff2"), + url(../imagery/sprites-fm-mono.654fba37d140e3c4.woff?t=1669632684604) format("woff"), + url(../imagery/sprites-fm-mono.d91332c7f523c39d.ttf?t=1669632684604) format("truetype"), + url(../imagery/sprites-fm-mono.72138a4e7a254b92.svg?t=1669632684604#fm-mono) format("svg") +} +.sprite-fm-mono,.sprite-fm-mono-after{ + height:var(--icon-size, 16px); + width:var(--icon-size, 16px) +} +.sprite-fm-mono-after:after,.sprite-fm-mono:before{ + -webkit-font-smoothing:antialiased; + -moz-osx-font-smoothing:grayscale; + color:var(--mask-color); + display:inline-block; + font-family:fm-mono !important; + font-size:var(--icon-size, 16px); + font-style:normal; + font-variant:normal; + height:100%; + line-height:1; + text-rendering:auto; + transition:inherit; + vertical-align:top; + width:100% +} +.sprite-fm-mono-after.icon-accept-after:after,.sprite-fm-mono.icon-accept:before{ + content:"\f26e" +} +.sprite-fm-mono-after.icon-account-edit-after:after,.sprite-fm-mono.icon-account-edit:before{ + content:"\f26f" +} +.sprite-fm-mono-after.icon-accounts-after:after,.sprite-fm-mono.icon-accounts:before{ + content:"\f270" +} +.sprite-fm-mono-after.icon-active-after:after,.sprite-fm-mono.icon-active:before{ + content:"\f271" +} +.sprite-fm-mono-after.icon-add-circle-after:after,.sprite-fm-mono.icon-add-circle:before{ + content:"\f272" +} +.sprite-fm-mono-after.icon-add-filled-after:after,.sprite-fm-mono.icon-add-filled:before{ + content:"\f273" +} +.sprite-fm-mono-after.icon-add-small-after:after,.sprite-fm-mono.icon-add-small:before{ + content:"\f274" +} +.sprite-fm-mono-after.icon-add-user-after:after,.sprite-fm-mono.icon-add-user:before{ + content:"\f275" +} +.sprite-fm-mono-after.icon-add-after:after,.sprite-fm-mono.icon-add:before{ + content:"\f276" +} +.sprite-fm-mono-after.icon-admin-outline-after:after,.sprite-fm-mono.icon-admin-outline:before{ + content:"\f277" +} +.sprite-fm-mono-after.icon-admin-after:after,.sprite-fm-mono.icon-admin:before{ + content:"\f278" +} +.sprite-fm-mono-after.icon-advanced-after:after,.sprite-fm-mono.icon-advanced:before{ + content:"\f279" +} +.sprite-fm-mono-after.icon-album-after:after,.sprite-fm-mono.icon-album:before{ + content:"\f27a" +} +.sprite-fm-mono-after.icon-android-after:after,.sprite-fm-mono.icon-android:before{ + content:"\f27b" +} +.sprite-fm-mono-after.icon-archive-after:after,.sprite-fm-mono.icon-archive:before{ + content:"\f27c" +} +.sprite-fm-mono-after.icon-arrow-down-after:after,.sprite-fm-mono.icon-arrow-down:before{ + content:"\f27d" +} +.sprite-fm-mono-after.icon-arrow-left-thin-after:after,.sprite-fm-mono.icon-arrow-left-thin:before{ + content:"\f27e" +} +.sprite-fm-mono-after.icon-arrow-left-after:after,.sprite-fm-mono.icon-arrow-left:before{ + content:"\f27f" +} +.sprite-fm-mono-after.icon-arrow-right-thin-after:after,.sprite-fm-mono.icon-arrow-right-thin:before{ + content:"\f280" +} +.nw-fm-tree-arrow:before,.sprite-fm-mono-after.icon-arrow-right-after:after,.sprite-fm-mono.icon-arrow-right:before{ + content:"\f281" +} +.sprite-fm-mono-after.icon-arrow-up-after:after,.sprite-fm-mono.icon-arrow-up:before{ + content:"\f282" +} +.sprite-fm-mono-after.icon-audio-filled-after:after,.sprite-fm-mono.icon-audio-filled:before{ + content:"\f283" +} +.sprite-fm-mono-after.icon-audio-off-after:after,.sprite-fm-mono.icon-audio-off:before{ + content:"\f284" +} +.sprite-fm-mono-after.icon-bin-filled-after:after,.sprite-fm-mono.icon-bin-filled:before{ + content:"\f285" +} +.sprite-fm-mono-after.icon-bin-after:after,.sprite-fm-mono.icon-bin:before{ + content:"\f286" +} +.sprite-fm-mono-after.icon-bucket-filled-after:after,.sprite-fm-mono.icon-bucket-filled:before{ + content:"\f287" +} +.sprite-fm-mono-after.icon-bucket-after:after,.sprite-fm-mono.icon-bucket:before{ + content:"\f288" +} +.sprite-fm-mono-after.icon-building-after:after,.sprite-fm-mono.icon-building:before{ + content:"\f289" +} +.sprite-fm-mono-after.icon-calendar1-filled-after:after,.sprite-fm-mono.icon-calendar1-filled:before{ + content:"\f28a" +} +.sprite-fm-mono-after.icon-calendar1-after:after,.sprite-fm-mono.icon-calendar1:before{ + content:"\f28b" +} +.sprite-fm-mono-after.icon-calendar2-filled-after:after,.sprite-fm-mono.icon-calendar2-filled:before{ + content:"\f28c" +} +.sprite-fm-mono-after.icon-calendar2-after:after,.sprite-fm-mono.icon-calendar2:before{ + content:"\f28d" +} +.sprite-fm-mono-after.icon-call-offline-after:after,.sprite-fm-mono.icon-call-offline:before{ + content:"\f28e" +} +.sprite-fm-mono-after.icon-call-online-after:after,.sprite-fm-mono.icon-call-online:before{ + content:"\f28f" +} +.sprite-fm-mono-after.icon-camera-uploads-after:after,.sprite-fm-mono.icon-camera-uploads:before{ + content:"\f290" +} +.sprite-fm-mono-after.icon-cancel-folders-after:after,.sprite-fm-mono.icon-cancel-folders:before{ + content:"\f291" +} +.sprite-fm-mono-after.icon-change-screenshare-after:after,.sprite-fm-mono.icon-change-screenshare:before{ + content:"\f292" +} +.sprite-fm-mono-after.icon-changed-after:after,.sprite-fm-mono.icon-changed:before{ + content:"\f293" +} +.sprite-fm-mono-after.icon-channel-new-after:after,.sprite-fm-mono.icon-channel-new:before{ + content:"\f294" +} +.sprite-fm-mono-after.icon-chat-filled-after:after,.sprite-fm-mono.icon-chat-filled:before{ + content:"\f295" +} +.sprite-fm-mono-after.icon-chat-write-after:after,.sprite-fm-mono.icon-chat-write:before{ + content:"\f296" +} +.sprite-fm-mono-after.icon-chat-after:after,.sprite-fm-mono.icon-chat:before{ + content:"\f297" +} +.sprite-fm-mono-after.icon-check-circle-after:after,.sprite-fm-mono.icon-check-circle:before{ + content:"\f298" +} +.sprite-fm-mono-after.icon-check-after:after,.sprite-fm-mono.icon-check:before{ + content:"\f299" +} +.sprite-fm-mono-after.icon-chrome-after:after,.sprite-fm-mono.icon-chrome:before{ + content:"\f29a" +} +.sprite-fm-mono-after.icon-clear-transfer-after:after,.sprite-fm-mono.icon-clear-transfer:before{ + content:"\f29b" +} +.sprite-fm-mono-after.icon-clear-after:after,.sprite-fm-mono.icon-clear:before{ + content:"\f29c" +} +.sprite-fm-mono-after.icon-close-component-after:after,.sprite-fm-mono.icon-close-component:before{ + content:"\f29d" +} +.sprite-fm-mono-after.icon-cloud-drive-after:after,.sprite-fm-mono.icon-cloud-drive:before{ + content:"\f29e" +} +.sprite-fm-mono-after.icon-cloud-storage-over-quota-after:after,.sprite-fm-mono.icon-cloud-storage-over-quota:before{ + content:"\f29f" +} +.sprite-fm-mono-after.icon-cloud-after:after,.sprite-fm-mono.icon-cloud:before{ + content:"\f2a0" +} +.sprite-fm-mono-after.icon-collapse-down-after:after,.sprite-fm-mono.icon-collapse-down:before{ + content:"\f2a1" +} +.sprite-fm-mono-after.icon-collapse-left-after:after,.sprite-fm-mono.icon-collapse-left:before{ + content:"\f2a2" +} +.sprite-fm-mono-after.icon-collapse-right-after:after,.sprite-fm-mono.icon-collapse-right:before{ + content:"\f2a3" +} +.sprite-fm-mono-after.icon-collapse-up-after:after,.sprite-fm-mono.icon-collapse-up:before{ + content:"\f2a4" +} +.sprite-fm-mono-after.icon-company-after:after,.sprite-fm-mono.icon-company:before{ + content:"\f2a5" +} +.sprite-fm-mono-after.icon-contact-after:after,.sprite-fm-mono.icon-contact:before{ + content:"\f2a6" +} +.sprite-fm-mono-after.icon-contacts-after:after,.sprite-fm-mono.icon-contacts:before{ + content:"\f2a7" +} +.sprite-fm-mono-after.icon-container-filled-after:after,.sprite-fm-mono.icon-container-filled:before{ + content:"\f2a8" +} +.sprite-fm-mono-after.icon-container-after:after,.sprite-fm-mono.icon-container:before{ + content:"\f2a9" +} +.sprite-fm-mono-after.icon-copy-2-after:after,.sprite-fm-mono.icon-copy-2:before{ + content:"\f2aa" +} +.sprite-fm-mono-after.icon-copy-after:after,.sprite-fm-mono.icon-copy:before{ + content:"\f2ab" +} +.sprite-fm-mono-after.icon-database-filled-after:after,.sprite-fm-mono.icon-database-filled:before{ + content:"\f2ac" +} +.sprite-fm-mono-after.icon-database-after:after,.sprite-fm-mono.icon-database:before{ + content:"\f2ad" +} +.sprite-fm-mono-after.icon-description-after:after,.sprite-fm-mono.icon-description:before{ + content:"\f2ae" +} +.sprite-fm-mono-after.icon-developers-after:after,.sprite-fm-mono.icon-developers:before{ + content:"\f2af" +} +.sprite-fm-mono-after.icon-dialog-close-after:after,.sprite-fm-mono.icon-dialog-close:before{ + content:"\f2b0" +} +.sprite-fm-mono-after.icon-disable-after:after,.sprite-fm-mono.icon-disable:before{ + content:"\f2b1" +} +.sprite-fm-mono-after.icon-disabled-filled-after:after,.sprite-fm-mono.icon-disabled-filled:before{ + content:"\f2b2" +} +.sprite-fm-mono-after.icon-dot-after:after,.sprite-fm-mono.icon-dot:before{ + content:"\f2b3" +} +.sprite-fm-mono-after.icon-down-after:after,.sprite-fm-mono.icon-down:before{ + content:"\f2b4" +} +.sprite-fm-mono-after.icon-download-file-after:after,.sprite-fm-mono.icon-download-file:before{ + content:"\f2b5" +} +.sprite-fm-mono-after.icon-download-filled-after:after,.sprite-fm-mono.icon-download-filled:before{ + content:"\f2b6" +} +.sprite-fm-mono-after.icon-download-small-after:after,.sprite-fm-mono.icon-download-small:before{ + content:"\f2b7" +} +.sprite-fm-mono-after.icon-download-standard-after:after,.sprite-fm-mono.icon-download-standard:before{ + content:"\f2b8" +} +.sprite-fm-mono-after.icon-download-zip-after:after,.sprite-fm-mono.icon-download-zip:before{ + content:"\f2b9" +} +.sprite-fm-mono-after.icon-download-after:after,.sprite-fm-mono.icon-download:before{ + content:"\f2ba" +} +.sprite-fm-mono-after.icon-dropdown-after:after,.sprite-fm-mono.icon-dropdown:before{ + content:"\f2bb" +} +.sprite-fm-mono-after.icon-email-filled-after:after,.sprite-fm-mono.icon-email-filled:before{ + content:"\f2bc" +} +.sprite-fm-mono-after.icon-email-after:after,.sprite-fm-mono.icon-email:before{ + content:"\f2bd" +} +.sprite-fm-mono-after.icon-embed-code-after:after,.sprite-fm-mono.icon-embed-code:before{ + content:"\f2be" +} +.sprite-fm-mono-after.icon-emoji-type-activity-after:after,.sprite-fm-mono.icon-emoji-type-activity:before{ + content:"\f2bf" +} +.sprite-fm-mono-after.icon-emoji-type-flag-after:after,.sprite-fm-mono.icon-emoji-type-flag:before{ + content:"\f2c0" +} +.sprite-fm-mono-after.icon-emoji-type-food-after:after,.sprite-fm-mono.icon-emoji-type-food:before{ + content:"\f2c1" +} +.sprite-fm-mono-after.icon-emoji-type-frequent-after:after,.sprite-fm-mono.icon-emoji-type-frequent:before{ + content:"\f2c2" +} +.sprite-fm-mono-after.icon-emoji-type-nature-after:after,.sprite-fm-mono.icon-emoji-type-nature:before{ + content:"\f2c3" +} +.sprite-fm-mono-after.icon-emoji-type-objects-after:after,.sprite-fm-mono.icon-emoji-type-objects:before{ + content:"\f2c4" +} +.sprite-fm-mono-after.icon-emoji-type-people-after:after,.sprite-fm-mono.icon-emoji-type-people:before{ + content:"\f2c5" +} +.sprite-fm-mono-after.icon-emoji-type-symbol-after:after,.sprite-fm-mono.icon-emoji-type-symbol:before{ + content:"\f2c6" +} +.sprite-fm-mono-after.icon-emoji-type-travel-after:after,.sprite-fm-mono.icon-emoji-type-travel:before{ + content:"\f2c7" +} +.sprite-fm-mono-after.icon-enabled-after:after,.sprite-fm-mono.icon-enabled:before{ + content:"\f2c8" +} +.sprite-fm-mono-after.icon-end-call-after:after,.sprite-fm-mono.icon-end-call:before{ + content:"\f2c9" +} +.sprite-fm-mono-after.icon-end-screenshare-after:after,.sprite-fm-mono.icon-end-screenshare:before{ + content:"\f2ca" +} +.sprite-fm-mono-after.icon-ex-drive-filled-after:after,.sprite-fm-mono.icon-ex-drive-filled:before{ + content:"\f2cb" +} +.sprite-fm-mono-after.icon-ex-drive-after:after,.sprite-fm-mono.icon-ex-drive:before{ + content:"\f2cc" +} +.sprite-fm-mono-after.icon-exclamation-filled-after:after,.sprite-fm-mono.icon-exclamation-filled:before{ + content:"\f2cd" +} +.sprite-fm-mono-after.icon-expand-window-after:after,.sprite-fm-mono.icon-expand-window:before{ + content:"\f2ce" +} +.sprite-fm-mono-after.icon-eye-hidden-after:after,.sprite-fm-mono.icon-eye-hidden:before{ + content:"\f2cf" +} +.sprite-fm-mono-after.icon-eye-hide-after:after,.sprite-fm-mono.icon-eye-hide:before{ + content:"\f2d0" +} +.sprite-fm-mono-after.icon-eye-reveal-after:after,.sprite-fm-mono.icon-eye-reveal:before{ + content:"\f2d1" +} +.sprite-fm-mono-after.icon-favourite-filled-after:after,.sprite-fm-mono.icon-favourite-filled:before{ + content:"\f2d2" +} +.sprite-fm-mono-after.icon-favourite-remove-filled-after:after,.sprite-fm-mono.icon-favourite-remove-filled:before{ + content:"\f2d3" +} +.sprite-fm-mono-after.icon-favourite-removed-after:after,.sprite-fm-mono.icon-favourite-removed:before{ + content:"\f2d4" +} +.sprite-fm-mono-after.icon-favourite-after:after,.sprite-fm-mono.icon-favourite:before{ + content:"\f2d5" +} +.sprite-fm-mono-after.icon-features-after:after,.sprite-fm-mono.icon-features:before{ + content:"\f2d6" +} +.sprite-fm-mono-after.icon-ff-after:after,.sprite-fm-mono.icon-ff:before{ + content:"\f2d7" +} +.sprite-fm-mono-after.icon-file-edit-after:after,.sprite-fm-mono.icon-file-edit:before{ + content:"\f2d8" +} +.sprite-fm-mono-after.icon-file-new-after:after,.sprite-fm-mono.icon-file-new:before{ + content:"\f2d9" +} +.sprite-fm-mono-after.icon-file-after:after,.sprite-fm-mono.icon-file:before{ + content:"\f2da" +} +.sprite-fm-mono-after.icon-filter-after:after,.sprite-fm-mono.icon-filter:before{ + content:"\f2db" +} +.sprite-fm-mono-after.icon-firefox-after:after,.sprite-fm-mono.icon-firefox:before{ + content:"\f2dc" +} +.sprite-fm-mono-after.icon-folder-backup-filled-after:after,.sprite-fm-mono.icon-folder-backup-filled:before{ + content:"\f2dd" +} +.sprite-fm-mono-after.icon-folder-backup-open-filled-after:after,.sprite-fm-mono.icon-folder-backup-open-filled:before{ + content:"\f2de" +} +.sprite-fm-mono-after.icon-folder-backup-open-after:after,.sprite-fm-mono.icon-folder-backup-open:before{ + content:"\f2df" +} +.sprite-fm-mono-after.icon-folder-backup-after:after,.sprite-fm-mono.icon-folder-backup:before{ + content:"\f2e0" +} +.nw-fm-tree-item .nw-fm-tree-folder.camera-folder:before,.sprite-fm-mono-after.icon-folder-camera-filled-after:after,.sprite-fm-mono.icon-folder-camera-filled:before{ + content:"\f2e1" +} +.nw-fm-tree-item.expanded .nw-fm-tree-folder.camera-folder:before,.nw-fm-tree-item.opened .nw-fm-tree-folder.camera-folder:before,.sprite-fm-mono-after.icon-folder-camera-open-filled-after:after,.sprite-fm-mono.icon-folder-camera-open-filled:before{ + content:"\f2e2" +} +.sprite-fm-mono-after.icon-folder-camera-open-after:after,.sprite-fm-mono.icon-folder-camera-open:before{ + content:"\f2e3" +} +.sprite-fm-mono-after.icon-folder-camera-after:after,.sprite-fm-mono.icon-folder-camera:before{ + content:"\f2e4" +} +.nw-fm-tree-item .nw-fm-tree-folder.chat-folder:before,.sprite-fm-mono-after.icon-folder-chat-filled-after:after,.sprite-fm-mono.icon-folder-chat-filled:before{ + content:"\f2e5" +} +.nw-fm-tree-item.expanded .nw-fm-tree-folder.chat-folder:before,.nw-fm-tree-item.opened .nw-fm-tree-folder.chat-folder:before,.sprite-fm-mono-after.icon-folder-chat-open-filled-after:after,.sprite-fm-mono.icon-folder-chat-open-filled:before{ + content:"\f2e6" +} +.sprite-fm-mono-after.icon-folder-chat-open-after:after,.sprite-fm-mono.icon-folder-chat-open:before{ + content:"\f2e7" +} +.sprite-fm-mono-after.icon-folder-chat-after:after,.sprite-fm-mono.icon-folder-chat:before{ + content:"\f2e8" +} +.sprite-fm-mono-after.icon-folder-download-filled-after:after,.sprite-fm-mono.icon-folder-download-filled:before{ + content:"\f2e9" +} +.sprite-fm-mono-after.icon-folder-download-open-filled-after:after,.sprite-fm-mono.icon-folder-download-open-filled:before{ + content:"\f2ea" +} +.sprite-fm-mono-after.icon-folder-download-open-after:after,.sprite-fm-mono.icon-folder-download-open:before{ + content:"\f2eb" +} +.sprite-fm-mono-after.icon-folder-download-after:after,.sprite-fm-mono.icon-folder-download:before{ + content:"\f2ec" +} +.nw-fm-tree-item .nw-fm-tree-folder:before,.sprite-fm-mono-after.icon-folder-filled-after:after,.sprite-fm-mono.icon-folder-filled:before{ + content:"\f2ed" +} +.nw-fm-tree-item .nw-fm-tree-folder.inbound-share:before,.sprite-fm-mono-after.icon-folder-incoming-share-filled-after:after,.sprite-fm-mono.icon-folder-incoming-share-filled:before{ + content:"\f2ee" +} +.nw-fm-tree-item.expanded .nw-fm-tree-folder.inbound-share:before,.nw-fm-tree-item.opened .nw-fm-tree-folder.inbound-share:before,.sprite-fm-mono-after.icon-folder-incoming-share-open-filled-after:after,.sprite-fm-mono.icon-folder-incoming-share-open-filled:before{ + content:"\f2ef" +} +.sprite-fm-mono-after.icon-folder-incoming-share-open-after:after,.sprite-fm-mono.icon-folder-incoming-share-open:before{ + content:"\f2f0" +} +.sprite-fm-mono-after.icon-folder-incoming-share-after:after,.sprite-fm-mono.icon-folder-incoming-share:before{ + content:"\f2f1" +} +.nw-fm-tree-item .nw-fm-tree-folder.file-request-folder:before,.sprite-fm-mono-after.icon-folder-mega-drop-filled-after:after,.sprite-fm-mono.icon-folder-mega-drop-filled:before{ + content:"\f2f2" +} +.nw-fm-tree-item.expanded .nw-fm-tree-folder.file-request-folder:before,.nw-fm-tree-item.opened .nw-fm-tree-folder.file-request-folder:before,.sprite-fm-mono-after.icon-folder-mega-drop-after:after,.sprite-fm-mono.icon-folder-mega-drop:before{ + content:"\f2f3" +} +.sprite-fm-mono-after.icon-folder-new-after:after,.sprite-fm-mono.icon-folder-new:before{ + content:"\f2f4" +} +.nw-fm-tree-item.expanded .nw-fm-tree-folder:before,.nw-fm-tree-item.opened .nw-fm-tree-folder:before,.sprite-fm-mono-after.icon-folder-open-filled-after:after,.sprite-fm-mono.icon-folder-open-filled:before{ + content:"\f2f5" +} +.sprite-fm-mono-after.icon-folder-open-after:after,.sprite-fm-mono.icon-folder-open:before{ + content:"\f2f6" +} +.nw-fm-tree-item .nw-fm-tree-folder.shared-folder:before,.sprite-fm-mono-after.icon-folder-outgoing-share-filled-after:after,.sprite-fm-mono.icon-folder-outgoing-share-filled:before{ + content:"\f2f7" +} +.nw-fm-tree-item.expanded .nw-fm-tree-folder.shared-folder:before,.nw-fm-tree-item.opened .nw-fm-tree-folder.shared-folder:before,.sprite-fm-mono-after.icon-folder-outgoing-share-open-filled-after:after,.sprite-fm-mono.icon-folder-outgoing-share-open-filled:before{ + content:"\f2f8" +} +.sprite-fm-mono-after.icon-folder-outgoing-share-open-after:after,.sprite-fm-mono.icon-folder-outgoing-share-open:before{ + content:"\f2f9" +} +.sprite-fm-mono-after.icon-folder-outgoing-share-after:after,.sprite-fm-mono.icon-folder-outgoing-share:before{ + content:"\f2fa" +} +.sprite-fm-mono-after.icon-folder-remove-share-after:after,.sprite-fm-mono.icon-folder-remove-share:before{ + content:"\f2fb" +} +.sprite-fm-mono-after.icon-folder-sync-filled-after:after,.sprite-fm-mono.icon-folder-sync-filled:before{ + content:"\f2fc" +} +.sprite-fm-mono-after.icon-folder-sync-open-filled-after:after,.sprite-fm-mono.icon-folder-sync-open-filled:before{ + content:"\f2fd" +} +.sprite-fm-mono-after.icon-folder-sync-open-after:after,.sprite-fm-mono.icon-folder-sync-open:before{ + content:"\f2fe" +} +.sprite-fm-mono-after.icon-folder-sync-after:after,.sprite-fm-mono.icon-folder-sync:before{ + content:"\f2ff" +} +.nw-fm-tree-item .nw-fm-tree-folder.puf-folder:before,.sprite-fm-mono-after.icon-folder-upload-filled-after:after,.sprite-fm-mono.icon-folder-upload-filled:before{ + content:"\f300" +} +.nw-fm-tree-item.expanded .nw-fm-tree-folder.puf-folder:before,.nw-fm-tree-item.opened .nw-fm-tree-folder.puf-folder:before,.sprite-fm-mono-after.icon-folder-upload-open-filled-after:after,.sprite-fm-mono.icon-folder-upload-open-filled:before{ + content:"\f301" +} +.sprite-fm-mono-after.icon-folder-upload-open-after:after,.sprite-fm-mono.icon-folder-upload-open:before{ + content:"\f302" +} +.sprite-fm-mono-after.icon-folder-upload-after:after,.sprite-fm-mono.icon-folder-upload:before{ + content:"\f303" +} +.sprite-fm-mono-after.icon-folder-after:after,.sprite-fm-mono.icon-folder:before{ + content:"\f304" +} +.sprite-fm-mono-after.icon-fullscreen-enter-after:after,.sprite-fm-mono.icon-fullscreen-enter:before{ + content:"\f305" +} +.sprite-fm-mono-after.icon-fullscreen-leave-after:after,.sprite-fm-mono.icon-fullscreen-leave:before{ + content:"\f306" +} +.sprite-fm-mono-after.icon-globe-after:after,.sprite-fm-mono.icon-globe:before{ + content:"\f307" +} +.sprite-fm-mono-after.icon-hourglass-new-after:after,.sprite-fm-mono.icon-hourglass-new:before{ + content:"\f308" +} +.sprite-fm-mono-after.icon-hourglass-old-after:after,.sprite-fm-mono.icon-hourglass-old:before{ + content:"\f309" +} +.sprite-fm-mono-after.icon-huawei-after:after,.sprite-fm-mono.icon-huawei:before{ + content:"\f30a" +} +.sprite-fm-mono-after.icon-id-after:after,.sprite-fm-mono.icon-id:before{ + content:"\f30b" +} +.sprite-fm-mono-after.icon-image-grid-view-down-after:after,.sprite-fm-mono.icon-image-grid-view-down:before{ + content:"\f30c" +} +.sprite-fm-mono-after.icon-image-grid-view-up-after:after,.sprite-fm-mono.icon-image-grid-view-up:before{ + content:"\f30d" +} +.sprite-fm-mono-after.icon-images-after:after,.sprite-fm-mono.icon-images:before{ + content:"\f30e" +} +.sprite-fm-mono-after.icon-inbox-filled-after:after,.sprite-fm-mono.icon-inbox-filled:before{ + content:"\f30f" +} +.sprite-fm-mono-after.icon-inbox-after:after,.sprite-fm-mono.icon-inbox:before{ + content:"\f310" +} +.sprite-fm-mono-after.icon-info-filled-after:after,.sprite-fm-mono.icon-info-filled:before{ + content:"\f311" +} +.sprite-fm-mono-after.icon-info-after:after,.sprite-fm-mono.icon-info:before{ + content:"\f312" +} +.sprite-fm-mono-after.icon-ios-after:after,.sprite-fm-mono.icon-ios:before{ + content:"\f313" +} +.sprite-fm-mono-after.icon-join-call-after:after,.sprite-fm-mono.icon-join-call:before{ + content:"\f314" +} +.sprite-fm-mono-after.icon-key-after:after,.sprite-fm-mono.icon-key:before{ + content:"\f315" +} +.sprite-fm-mono-after.icon-label-filled-after:after,.sprite-fm-mono.icon-label-filled:before{ + content:"\f316" +} +.sprite-fm-mono-after.icon-label-after:after,.sprite-fm-mono.icon-label:before{ + content:"\f317" +} +.sprite-fm-mono-after.icon-languages-after:after,.sprite-fm-mono.icon-languages:before{ + content:"\f318" +} +.sprite-fm-mono-after.icon-leave-call-after:after,.sprite-fm-mono.icon-leave-call:before{ + content:"\f319" +} +.sprite-fm-mono-after.icon-left-after:after,.sprite-fm-mono.icon-left:before{ + content:"\f31a" +} +.sprite-fm-mono-after.icon-legal-policies-after:after,.sprite-fm-mono.icon-legal-policies:before{ + content:"\f31b" +} +.sprite-fm-mono-after.icon-link-circle-after:after,.sprite-fm-mono.icon-link-circle:before{ + content:"\f31c" +} +.sprite-fm-mono-after.icon-link-filled-after:after,.sprite-fm-mono.icon-link-filled:before{ + content:"\f31d" +} +.sprite-fm-mono-after.icon-link-remove-after:after,.sprite-fm-mono.icon-link-remove:before{ + content:"\f31e" +} +.nw-fm-tree-item .file-status-ico:before,.sprite-fm-mono-after.icon-link-small-after:after,.sprite-fm-mono.icon-link-small:before{ + content:"\f31f" +} +.sprite-fm-mono-after.icon-link-after:after,.sprite-fm-mono.icon-link:before{ + content:"\f320" +} +.sprite-fm-mono-after.icon-linux-after:after,.sprite-fm-mono.icon-linux:before{ + content:"\f321" +} +.sprite-fm-mono-after.icon-location-after:after,.sprite-fm-mono.icon-location:before{ + content:"\f322" +} +.sprite-fm-mono-after.icon-lock-2-after:after,.sprite-fm-mono.icon-lock-2:before{ + content:"\f323" +} +.sprite-fm-mono-after.icon-lock-filled-after:after,.sprite-fm-mono.icon-lock-filled:before{ + content:"\f324" +} +.sprite-fm-mono-after.icon-lock-after:after,.sprite-fm-mono.icon-lock:before{ + content:"\f325" +} +.sprite-fm-mono-after.icon-login-after:after,.sprite-fm-mono.icon-login:before{ + content:"\f326" +} +.sprite-fm-mono-after.icon-logout-after:after,.sprite-fm-mono.icon-logout:before{ + content:"\f327" +} +.sprite-fm-mono-after.icon-manage-folders-after:after,.sprite-fm-mono.icon-manage-folders:before{ + content:"\f328" +} +.sprite-fm-mono-after.icon-meeting-join-after:after,.sprite-fm-mono.icon-meeting-join:before{ + content:"\f329" +} +.sprite-fm-mono-after.icon-meeting-notification-after:after,.sprite-fm-mono.icon-meeting-notification:before{ + content:"\f32a" +} +.sprite-fm-mono-after.icon-migrate-files-after:after,.sprite-fm-mono.icon-migrate-files:before{ + content:"\f32b" +} +.sprite-fm-mono-after.icon-min-mode-after:after,.sprite-fm-mono.icon-min-mode:before{ + content:"\f32c" +} +.sprite-fm-mono-after.icon-minimise-component-after:after,.sprite-fm-mono.icon-minimise-component:before{ + content:"\f32d" +} +.sprite-fm-mono-after.icon-minimise-after:after,.sprite-fm-mono.icon-minimise:before{ + content:"\f32e" +} +.sprite-fm-mono-after.icon-minus-circle-after:after,.sprite-fm-mono.icon-minus-circle:before{ + content:"\f32f" +} +.sprite-fm-mono-after.icon-mobile-24px-after:after,.sprite-fm-mono.icon-mobile-24px:before{ + content:"\f330" +} +.sprite-fm-mono-after.icon-mobile-filled-after:after,.sprite-fm-mono.icon-mobile-filled:before{ + content:"\f331" +} +.sprite-fm-mono-after.icon-mobile-after:after,.sprite-fm-mono.icon-mobile:before{ + content:"\f332" +} +.sprite-fm-mono-after.icon-move-after:after,.sprite-fm-mono.icon-move:before{ + content:"\f333" +} +.sprite-fm-mono-after.icon-my-account-after:after,.sprite-fm-mono.icon-my-account:before{ + content:"\f334" +} +.sprite-fm-mono-after.icon-name-after:after,.sprite-fm-mono.icon-name:before{ + content:"\f335" +} +.sprite-fm-mono-after.icon-new-window-after:after,.sprite-fm-mono.icon-new-window:before{ + content:"\f336" +} +.sprite-fm-mono-after.icon-next-arrow-after:after,.sprite-fm-mono.icon-next-arrow:before{ + content:"\f337" +} +.sprite-fm-mono-after.icon-notification-filled-after:after,.sprite-fm-mono.icon-notification-filled:before{ + content:"\f338" +} +.sprite-fm-mono-after.icon-notification-off-filled-after:after,.sprite-fm-mono.icon-notification-off-filled:before{ + content:"\f339" +} +.sprite-fm-mono-after.icon-notification-off-after:after,.sprite-fm-mono.icon-notification-off:before{ + content:"\f33a" +} +.sprite-fm-mono-after.icon-notification-after:after,.sprite-fm-mono.icon-notification:before{ + content:"\f33b" +} +.sprite-fm-mono-after.icon-object-storage-after:after,.sprite-fm-mono.icon-object-storage:before{ + content:"\f33c" +} +.sprite-fm-mono-after.icon-offline-after:after,.sprite-fm-mono.icon-offline:before{ + content:"\f33d" +} +.sprite-fm-mono-after.icon-options-after:after,.sprite-fm-mono.icon-options:before{ + content:"\f33e" +} +.sprite-fm-mono-after.icon-overview-after:after,.sprite-fm-mono.icon-overview:before{ + content:"\f33f" +} +.sprite-fm-mono-after.icon-password-after:after,.sprite-fm-mono.icon-password:before{ + content:"\f340" +} +.sprite-fm-mono-after.icon-pause-after:after,.sprite-fm-mono.icon-pause:before{ + content:"\f341" +} +.sprite-fm-mono-after.icon-pc-filled-after:after,.sprite-fm-mono.icon-pc-filled:before{ + content:"\f342" +} +.sprite-fm-mono-after.icon-pc-linux-after:after,.sprite-fm-mono.icon-pc-linux:before{ + content:"\f343" +} +.sprite-fm-mono-after.icon-pc-windows-after:after,.sprite-fm-mono.icon-pc-windows:before{ + content:"\f344" +} +.sprite-fm-mono-after.icon-pc-after:after,.sprite-fm-mono.icon-pc:before{ + content:"\f345" +} +.sprite-fm-mono-after.icon-permissions-write-after:after,.sprite-fm-mono.icon-permissions-write:before{ + content:"\f346" +} +.sprite-fm-mono-after.icon-phone-after:after,.sprite-fm-mono.icon-phone:before{ + content:"\f347" +} +.sprite-fm-mono-after.icon-photo-discovery-after:after,.sprite-fm-mono.icon-photo-discovery:before{ + content:"\f348" +} +.sprite-fm-mono-after.icon-photos-after:after,.sprite-fm-mono.icon-photos:before{ + content:"\f349" +} +.sprite-fm-mono-after.icon-plan-filled-after:after,.sprite-fm-mono.icon-plan-filled:before{ + content:"\f34a" +} +.sprite-fm-mono-after.icon-plan-after:after,.sprite-fm-mono.icon-plan:before{ + content:"\f34b" +} +.sprite-fm-mono-after.icon-platforms-after:after,.sprite-fm-mono.icon-platforms:before{ + content:"\f34c" +} +.sprite-fm-mono-after.icon-play-small-after:after,.sprite-fm-mono.icon-play-small:before{ + content:"\f34d" +} +.sprite-fm-mono-after.icon-play-square-after:after,.sprite-fm-mono.icon-play-square:before{ + content:"\f34e" +} +.sprite-fm-mono-after.icon-play-after:after,.sprite-fm-mono.icon-play:before{ + content:"\f34f" +} +.sprite-fm-mono-after.icon-policy-filled-after:after,.sprite-fm-mono.icon-policy-filled:before{ + content:"\f350" +} +.sprite-fm-mono-after.icon-policy-after:after,.sprite-fm-mono.icon-policy:before{ + content:"\f351" +} +.sprite-fm-mono-after.icon-preview-reveal-after:after,.sprite-fm-mono.icon-preview-reveal:before{ + content:"\f352" +} +.sprite-fm-mono-after.icon-public-access-enabled-after:after,.sprite-fm-mono.icon-public-access-enabled:before{ + content:"\f353" +} +.sprite-fm-mono-after.icon-public-access-locked-after:after,.sprite-fm-mono.icon-public-access-locked:before{ + content:"\f354" +} +.sprite-fm-mono-after.icon-question-filled-after:after,.sprite-fm-mono.icon-question-filled:before{ + content:"\f355" +} +.sprite-fm-mono-after.icon-queue-down-after:after,.sprite-fm-mono.icon-queue-down:before{ + content:"\f356" +} +.sprite-fm-mono-after.icon-queue-up-after:after,.sprite-fm-mono.icon-queue-up:before{ + content:"\f357" +} +.sprite-fm-mono-after.icon-read-only-after:after,.sprite-fm-mono.icon-read-only:before{ + content:"\f358" +} +.sprite-fm-mono-after.icon-recents-filled-after:after,.sprite-fm-mono.icon-recents-filled:before{ + content:"\f359" +} +.sprite-fm-mono-after.icon-recents-after:after,.sprite-fm-mono.icon-recents:before{ + content:"\f35a" +} +.sprite-fm-mono-after.icon-remove-after:after,.sprite-fm-mono.icon-remove:before{ + content:"\f35b" +} +.sprite-fm-mono-after.icon-rename-after:after,.sprite-fm-mono.icon-rename:before{ + content:"\f35c" +} +.sprite-fm-mono-after.icon-repeat-after:after,.sprite-fm-mono.icon-repeat:before{ + content:"\f35d" +} +.sprite-fm-mono-after.icon-reseller-after:after,.sprite-fm-mono.icon-reseller:before{ + content:"\f35e" +} +.sprite-fm-mono-after.icon-restricted-folder-filled-after:after,.sprite-fm-mono.icon-restricted-folder-filled:before{ + content:"\f35f" +} +.sprite-fm-mono-after.icon-restricted-folder-after:after,.sprite-fm-mono.icon-restricted-folder:before{ + content:"\f360" +} +.sprite-fm-mono-after.icon-resume-after:after,.sprite-fm-mono.icon-resume:before{ + content:"\f361" +} +.sprite-fm-mono-after.icon-rewind-filled-after:after,.sprite-fm-mono.icon-rewind-filled:before{ + content:"\f362" +} +.sprite-fm-mono-after.icon-rewind-after:after,.sprite-fm-mono.icon-rewind:before{ + content:"\f363" +} +.sprite-fm-mono-after.icon-right-after:after,.sprite-fm-mono.icon-right:before{ + content:"\f364" +} +.sprite-fm-mono-after.icon-rwd-after:after,.sprite-fm-mono.icon-rwd:before{ + content:"\f365" +} +.sprite-fm-mono-after.icon-screen-share-after:after,.sprite-fm-mono.icon-screen-share:before{ + content:"\f366" +} +.sprite-fm-mono-after.icon-search-cloud-after:after,.sprite-fm-mono.icon-search-cloud:before{ + content:"\f367" +} +.sprite-fm-mono-after.icon-search-after:after,.sprite-fm-mono.icon-search:before{ + content:"\f368" +} +.sprite-fm-mono-after.icon-selector-after:after,.sprite-fm-mono.icon-selector:before{ + content:"\f369" +} +.sprite-fm-mono-after.icon-send-contact-after:after,.sprite-fm-mono.icon-send-contact:before{ + content:"\f36a" +} +.sprite-fm-mono-after.icon-send-files-after:after,.sprite-fm-mono.icon-send-files:before{ + content:"\f36b" +} +.sprite-fm-mono-after.icon-send-to-chat-after:after,.sprite-fm-mono.icon-send-to-chat:before{ + content:"\f36c" +} +.sprite-fm-mono-after.icon-session-history-filled-after:after,.sprite-fm-mono.icon-session-history-filled:before{ + content:"\f36d" +} +.sprite-fm-mono-after.icon-session-history-after:after,.sprite-fm-mono.icon-session-history:before{ + content:"\f36e" +} +.sprite-fm-mono-after.icon-settings-outline-after:after,.sprite-fm-mono.icon-settings-outline:before{ + content:"\f36f" +} +.sprite-fm-mono-after.icon-settings-after:after,.sprite-fm-mono.icon-settings:before{ + content:"\f370" +} +.sprite-fm-mono-after.icon-share-circle-after:after,.sprite-fm-mono.icon-share-circle:before{ + content:"\f371" +} +.sprite-fm-mono-after.icon-share-filled-after:after,.sprite-fm-mono.icon-share-filled:before{ + content:"\f372" +} +.sprite-fm-mono-after.icon-share-incoming-external-after:after,.sprite-fm-mono.icon-share-incoming-external:before{ + content:"\f373" +} +.sprite-fm-mono-after.icon-share-incoming-after:after,.sprite-fm-mono.icon-share-incoming:before{ + content:"\f374" +} +.sprite-fm-mono-after.icon-share-outgoing-external-after:after,.sprite-fm-mono.icon-share-outgoing-external:before{ + content:"\f375" +} +.sprite-fm-mono-after.icon-share-outgoing-after:after,.sprite-fm-mono.icon-share-outgoing:before{ + content:"\f376" +} +.sprite-fm-mono-after.icon-share-after:after,.sprite-fm-mono.icon-share:before{ + content:"\f377" +} +.sprite-fm-mono-after.icon-shuffle-after:after,.sprite-fm-mono.icon-shuffle:before{ + content:"\f378" +} +.sprite-fm-mono-after.icon-side-menu-after:after,.sprite-fm-mono.icon-side-menu:before{ + content:"\f379" +} +.sprite-fm-mono-after.icon-skip-backward-after:after,.sprite-fm-mono.icon-skip-backward:before{ + content:"\f37a" +} +.sprite-fm-mono-after.icon-skip-forward-after:after,.sprite-fm-mono.icon-skip-forward:before{ + content:"\f37b" +} +.sprite-fm-mono-after.icon-skip-after:after,.sprite-fm-mono.icon-skip:before{ + content:"\f37c" +} +.sprite-fm-mono-after.icon-slider-filled-after:after,.sprite-fm-mono.icon-slider-filled:before{ + content:"\f37d" +} +.sprite-fm-mono-after.icon-slider-outline-after:after,.sprite-fm-mono.icon-slider-outline:before{ + content:"\f37e" +} +.sprite-fm-mono-after.icon-speaker-view-after:after,.sprite-fm-mono.icon-speaker-view:before{ + content:"\f37f" +} +.sprite-fm-mono-after.icon-star-filled-after:after,.sprite-fm-mono.icon-star-filled:before{ + content:"\f380" +} +.sprite-fm-mono-after.icon-star-after:after,.sprite-fm-mono.icon-star:before{ + content:"\f381" +} +.sprite-fm-mono-after.icon-support-after:after,.sprite-fm-mono.icon-support:before{ + content:"\f382" +} +.sprite-fm-mono-after.icon-sync-after:after,.sprite-fm-mono.icon-sync:before{ + content:"\f383" +} +.sprite-fm-mono-after.icon-takedown-after:after,.sprite-fm-mono.icon-takedown:before{ + content:"\f384" +} +.sprite-fm-mono-after.icon-target-after:after,.sprite-fm-mono.icon-target:before{ + content:"\f385" +} +.sprite-fm-mono-after.icon-thumbnail-view-after:after,.sprite-fm-mono.icon-thumbnail-view:before{ + content:"\f386" +} +.sprite-fm-mono-after.icon-tooltip-arrow-after:after,.sprite-fm-mono.icon-tooltip-arrow:before{ + content:"\f387" +} +.sprite-fm-mono-after.icon-transfer-arrow-after:after,.sprite-fm-mono.icon-transfer-arrow:before{ + content:"\f388" +} +.sprite-fm-mono-after.icon-transfer-filled-after:after,.sprite-fm-mono.icon-transfer-filled:before{ + content:"\f389" +} +.sprite-fm-mono-after.icon-transfer-quota-after:after,.sprite-fm-mono.icon-transfer-quota:before{ + content:"\f38a" +} +.sprite-fm-mono-after.icon-transfer-after:after,.sprite-fm-mono.icon-transfer:before{ + content:"\f38b" +} +.sprite-fm-mono-after.icon-unarchive-after:after,.sprite-fm-mono.icon-unarchive:before{ + content:"\f38c" +} +.sprite-fm-mono-after.icon-up-after:after,.sprite-fm-mono.icon-up:before{ + content:"\f38d" +} +.sprite-fm-mono-after.icon-upload-file-after:after,.sprite-fm-mono.icon-upload-file:before{ + content:"\f38e" +} +.sprite-fm-mono-after.icon-upload-filled-after:after,.sprite-fm-mono.icon-upload-filled:before{ + content:"\f38f" +} +.sprite-fm-mono-after.icon-upload-to-cloud-circle-after:after,.sprite-fm-mono.icon-upload-to-cloud-circle:before{ + content:"\f390" +} +.sprite-fm-mono-after.icon-upload-to-cloud-drive-after:after,.sprite-fm-mono.icon-upload-to-cloud-drive:before{ + content:"\f391" +} +.sprite-fm-mono-after.icon-upload-after:after,.sprite-fm-mono.icon-upload:before{ + content:"\f392" +} +.sprite-fm-mono-after.icon-user-circle-filled-after:after,.sprite-fm-mono.icon-user-circle-filled:before{ + content:"\f393" +} +.sprite-fm-mono-after.icon-user-filled-after:after,.sprite-fm-mono.icon-user-filled:before{ + content:"\f394" +} +.sprite-fm-mono-after.icon-user-interface-filled-after:after,.sprite-fm-mono.icon-user-interface-filled:before{ + content:"\f395" +} +.sprite-fm-mono-after.icon-user-interface-after:after,.sprite-fm-mono.icon-user-interface:before{ + content:"\f396" +} +.sprite-fm-mono-after.icon-user-after:after,.sprite-fm-mono.icon-user:before{ + content:"\f397" +} +.sprite-fm-mono-after.icon-versions-clear-after:after,.sprite-fm-mono.icon-versions-clear:before{ + content:"\f398" +} +.sprite-fm-mono-after.icon-versions-previous-after:after,.sprite-fm-mono.icon-versions-previous:before{ + content:"\f399" +} +.sprite-fm-mono-after.icon-video-call-filled-after:after,.sprite-fm-mono.icon-video-call-filled:before{ + content:"\f39a" +} +.sprite-fm-mono-after.icon-video-off-after:after,.sprite-fm-mono.icon-video-off:before{ + content:"\f39b" +} +.sprite-fm-mono-after.icon-video-plus-after:after,.sprite-fm-mono.icon-video-plus:before{ + content:"\f39c" +} +.sprite-fm-mono-after.icon-videos-after:after,.sprite-fm-mono.icon-videos:before{ + content:"\f39d" +} +.sprite-fm-mono-after.icon-view-grid-after:after,.sprite-fm-mono.icon-view-grid:before{ + content:"\f39e" +} +.sprite-fm-mono-after.icon-view-medium-list-after:after,.sprite-fm-mono.icon-view-medium-list:before{ + content:"\f39f" +} +.sprite-fm-mono-after.icon-view-small-list-after:after,.sprite-fm-mono.icon-view-small-list:before{ + content:"\f3a0" +} +.sprite-fm-mono-after.icon-volume-max-after:after,.sprite-fm-mono.icon-volume-max:before{ + content:"\f3a1" +} +.sprite-fm-mono-after.icon-volume-muted-after:after,.sprite-fm-mono.icon-volume-muted:before{ + content:"\f3a2" +} +.sprite-fm-mono-after.icon-volume-after:after,.sprite-fm-mono.icon-volume:before{ + content:"\f3a3" +} +.sprite-fm-mono-after.icon-warning-triangle-after:after,.sprite-fm-mono.icon-warning-triangle:before{ + content:"\f3a4" +} +.sprite-fm-mono-after.icon-weak-signal-after:after,.sprite-fm-mono.icon-weak-signal:before{ + content:"\f3a5" +} +.sprite-fm-mono-after.icon-windows-after:after,.sprite-fm-mono.icon-windows:before{ + content:"\f3a6" +} +.sprite-fm-mono-after.icon-zip-circle-after:after,.sprite-fm-mono.icon-zip-circle:before{ + content:"\f3a7" +} + +.sprite-fm-theme,.sprite-fm-theme-after:after,.sprite-fm-theme-before:before{ + background:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg) no-repeat; + background-size:100%; + content:""; + display:block; + height:var(--icon-size, 16px); + width:var(--icon-size, 16px) +} +.theme-dark-forced .sprite-fm-theme-after.icon-bucket-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-bucket-before:before,.theme-dark-forced .sprite-fm-theme.icon-bucket,.theme-dark .sprite-fm-theme-after.icon-bucket-after:after,.theme-dark .sprite-fm-theme-before.icon-bucket-before:before,.theme-dark .sprite-fm-theme.icon-bucket{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-bucket) +} +.theme-dark-forced .sprite-fm-theme-after.icon-emoji-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-emoji-before:before,.theme-dark-forced .sprite-fm-theme.icon-emoji,.theme-dark .sprite-fm-theme-after.icon-emoji-after:after,.theme-dark .sprite-fm-theme-before.icon-emoji-before:before,.theme-dark .sprite-fm-theme.icon-emoji{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-emoji) +} +.theme-dark-forced .sprite-fm-theme-after.icon-emoji-active-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-emoji-active-before:before,.theme-dark-forced .sprite-fm-theme.icon-emoji-active,.theme-dark .sprite-fm-theme-after.icon-emoji-active-after:after,.theme-dark .sprite-fm-theme-before.icon-emoji-active-before:before,.theme-dark .sprite-fm-theme.icon-emoji-active{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-emoji-active) +} +.theme-dark-forced .sprite-fm-theme-after.icon-emoji-reactions-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-emoji-reactions-before:before,.theme-dark-forced .sprite-fm-theme.icon-emoji-reactions,.theme-dark .sprite-fm-theme-after.icon-emoji-reactions-after:after,.theme-dark .sprite-fm-theme-before.icon-emoji-reactions-before:before,.theme-dark .sprite-fm-theme.icon-emoji-reactions{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-emoji-reactions) +} +.theme-dark-forced .sprite-fm-theme-after.icon-emoji-reactions-active-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-emoji-reactions-active-before:before,.theme-dark-forced .sprite-fm-theme.icon-emoji-reactions-active,.theme-dark .sprite-fm-theme-after.icon-emoji-reactions-active-after:after,.theme-dark .sprite-fm-theme-before.icon-emoji-reactions-active-before:before,.theme-dark .sprite-fm-theme.icon-emoji-reactions-active{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-emoji-reactions-active) +} +.theme-dark-forced .sprite-fm-theme-after.icon-empty-state-backup-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-empty-state-backup-before:before,.theme-dark-forced .sprite-fm-theme.icon-empty-state-backup,.theme-dark .sprite-fm-theme-after.icon-empty-state-backup-after:after,.theme-dark .sprite-fm-theme-before.icon-empty-state-backup-before:before,.theme-dark .sprite-fm-theme.icon-empty-state-backup{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-empty-state-backup) +} +.theme-dark-forced .sprite-fm-theme-after.icon-empty-state-bucket-upload-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-empty-state-bucket-upload-before:before,.theme-dark-forced .sprite-fm-theme.icon-empty-state-bucket-upload,.theme-dark .sprite-fm-theme-after.icon-empty-state-bucket-upload-after:after,.theme-dark .sprite-fm-theme-before.icon-empty-state-bucket-upload-before:before,.theme-dark .sprite-fm-theme.icon-empty-state-bucket-upload{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-empty-state-bucket-upload) +} +.theme-dark-forced .sprite-fm-theme-after.icon-empty-state-favourite-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-empty-state-favourite-before:before,.theme-dark-forced .sprite-fm-theme.icon-empty-state-favourite,.theme-dark .sprite-fm-theme-after.icon-empty-state-favourite-after:after,.theme-dark .sprite-fm-theme-before.icon-empty-state-favourite-before:before,.theme-dark .sprite-fm-theme.icon-empty-state-favourite{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-empty-state-favourite) +} +.theme-dark-forced .sprite-fm-theme-after.icon-empty-state-groups-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-empty-state-groups-before:before,.theme-dark-forced .sprite-fm-theme.icon-empty-state-groups,.theme-dark .sprite-fm-theme-after.icon-empty-state-groups-after:after,.theme-dark .sprite-fm-theme-before.icon-empty-state-groups-before:before,.theme-dark .sprite-fm-theme.icon-empty-state-groups{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-empty-state-groups) +} +.theme-dark-forced .sprite-fm-theme-after.icon-empty-state-keys-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-empty-state-keys-before:before,.theme-dark-forced .sprite-fm-theme.icon-empty-state-keys,.theme-dark .sprite-fm-theme-after.icon-empty-state-keys-after:after,.theme-dark .sprite-fm-theme-before.icon-empty-state-keys-before:before,.theme-dark .sprite-fm-theme.icon-empty-state-keys{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-empty-state-keys) +} +.theme-dark-forced .sprite-fm-theme-after.icon-empty-state-policy-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-empty-state-policy-before:before,.theme-dark-forced .sprite-fm-theme.icon-empty-state-policy,.theme-dark .sprite-fm-theme-after.icon-empty-state-policy-after:after,.theme-dark .sprite-fm-theme-before.icon-empty-state-policy-before:before,.theme-dark .sprite-fm-theme.icon-empty-state-policy{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-empty-state-policy) +} +.theme-dark-forced .sprite-fm-theme-after.icon-empty-state-restricted-folder-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-empty-state-restricted-folder-before:before,.theme-dark-forced .sprite-fm-theme.icon-empty-state-restricted-folder,.theme-dark .sprite-fm-theme-after.icon-empty-state-restricted-folder-after:after,.theme-dark .sprite-fm-theme-before.icon-empty-state-restricted-folder-before:before,.theme-dark .sprite-fm-theme.icon-empty-state-restricted-folder{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-empty-state-restricted-folder) +} +.theme-dark-forced .sprite-fm-theme-after.icon-empty-state-users-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-empty-state-users-before:before,.theme-dark-forced .sprite-fm-theme.icon-empty-state-users,.theme-dark .sprite-fm-theme-after.icon-empty-state-users-after:after,.theme-dark .sprite-fm-theme-before.icon-empty-state-users-before:before,.theme-dark .sprite-fm-theme.icon-empty-state-users{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-empty-state-users) +} +.theme-dark-forced .sprite-fm-theme-after.icon-gallery-photos-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-gallery-photos-before:before,.theme-dark-forced .sprite-fm-theme.icon-gallery-photos,.theme-dark .sprite-fm-theme-after.icon-gallery-photos-after:after,.theme-dark .sprite-fm-theme-before.icon-gallery-photos-before:before,.theme-dark .sprite-fm-theme.icon-gallery-photos{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-gallery-photos) +} +.theme-dark-forced .sprite-fm-theme-after.icon-gif-rest-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-gif-rest-before:before,.theme-dark-forced .sprite-fm-theme.icon-gif-rest,.theme-dark .sprite-fm-theme-after.icon-gif-rest-after:after,.theme-dark .sprite-fm-theme-before.icon-gif-rest-before:before,.theme-dark .sprite-fm-theme.icon-gif-rest{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-gif-rest) +} +.theme-dark-forced .sprite-fm-theme-after.icon-handset-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-handset-before:before,.theme-dark-forced .sprite-fm-theme.icon-handset,.theme-dark .sprite-fm-theme-after.icon-handset-after:after,.theme-dark .sprite-fm-theme-before.icon-handset-before:before,.theme-dark .sprite-fm-theme.icon-handset{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-handset) +} +.theme-dark-forced .sprite-fm-theme-after.icon-handset-cancelled-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-handset-cancelled-before:before,.theme-dark-forced .sprite-fm-theme.icon-handset-cancelled,.theme-dark .sprite-fm-theme-after.icon-handset-cancelled-after:after,.theme-dark .sprite-fm-theme-before.icon-handset-cancelled-before:before,.theme-dark .sprite-fm-theme.icon-handset-cancelled{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-handset-cancelled) +} +.theme-dark-forced .sprite-fm-theme-after.icon-handset-ended-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-handset-ended-before:before,.theme-dark-forced .sprite-fm-theme.icon-handset-ended,.theme-dark .sprite-fm-theme-after.icon-handset-ended-after:after,.theme-dark .sprite-fm-theme-before.icon-handset-ended-before:before,.theme-dark .sprite-fm-theme.icon-handset-ended{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-handset-ended) +} +.theme-dark-forced .sprite-fm-theme-after.icon-handset-failed-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-handset-failed-before:before,.theme-dark-forced .sprite-fm-theme.icon-handset-failed,.theme-dark .sprite-fm-theme-after.icon-handset-failed-after:after,.theme-dark .sprite-fm-theme-before.icon-handset-failed-before:before,.theme-dark .sprite-fm-theme.icon-handset-failed{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-handset-failed) +} +.theme-dark-forced .sprite-fm-theme-after.icon-handset-incoming-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-handset-incoming-before:before,.theme-dark-forced .sprite-fm-theme.icon-handset-incoming,.theme-dark .sprite-fm-theme-after.icon-handset-incoming-after:after,.theme-dark .sprite-fm-theme-before.icon-handset-incoming-before:before,.theme-dark .sprite-fm-theme.icon-handset-incoming{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-handset-incoming) +} +.theme-dark-forced .sprite-fm-theme-after.icon-handset-missed-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-handset-missed-before:before,.theme-dark-forced .sprite-fm-theme.icon-handset-missed,.theme-dark .sprite-fm-theme-after.icon-handset-missed-after:after,.theme-dark .sprite-fm-theme-before.icon-handset-missed-before:before,.theme-dark .sprite-fm-theme.icon-handset-missed{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-handset-missed) +} +.theme-dark-forced .sprite-fm-theme-after.icon-handset-outgoing-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-handset-outgoing-before:before,.theme-dark-forced .sprite-fm-theme.icon-handset-outgoing,.theme-dark .sprite-fm-theme-after.icon-handset-outgoing-after:after,.theme-dark .sprite-fm-theme-before.icon-handset-outgoing-before:before,.theme-dark .sprite-fm-theme.icon-handset-outgoing{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-handset-outgoing) +} +.theme-dark-forced .sprite-fm-theme-after.icon-handset-rejected-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-handset-rejected-before:before,.theme-dark-forced .sprite-fm-theme.icon-handset-rejected,.theme-dark .sprite-fm-theme-after.icon-handset-rejected-after:after,.theme-dark .sprite-fm-theme-before.icon-handset-rejected-before:before,.theme-dark .sprite-fm-theme.icon-handset-rejected{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-handset-rejected) +} +.theme-dark-forced .sprite-fm-theme-after.icon-image-zoom-in-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-image-zoom-in-before:before,.theme-dark-forced .sprite-fm-theme.icon-image-zoom-in,.theme-dark .sprite-fm-theme-after.icon-image-zoom-in-after:after,.theme-dark .sprite-fm-theme-before.icon-image-zoom-in-before:before,.theme-dark .sprite-fm-theme.icon-image-zoom-in{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-image-zoom-in) +} +.theme-dark-forced .sprite-fm-theme-after.icon-image-zoom-out-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-image-zoom-out-before:before,.theme-dark-forced .sprite-fm-theme.icon-image-zoom-out,.theme-dark .sprite-fm-theme-after.icon-image-zoom-out-after:after,.theme-dark .sprite-fm-theme-before.icon-image-zoom-out-before:before,.theme-dark .sprite-fm-theme.icon-image-zoom-out{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-image-zoom-out) +} +.theme-dark-forced .sprite-fm-theme-after.icon-loading-spinner-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-loading-spinner-before:before,.theme-dark-forced .sprite-fm-theme.icon-loading-spinner,.theme-dark .sprite-fm-theme-after.icon-loading-spinner-after:after,.theme-dark .sprite-fm-theme-before.icon-loading-spinner-before:before,.theme-dark .sprite-fm-theme.icon-loading-spinner{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-loading-spinner) +} +.theme-dark-forced .sprite-fm-theme-after.icon-notifications-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-notifications-before:before,.theme-dark-forced .sprite-fm-theme.icon-notifications,.theme-dark .sprite-fm-theme-after.icon-notifications-after:after,.theme-dark .sprite-fm-theme-before.icon-notifications-before:before,.theme-dark .sprite-fm-theme.icon-notifications{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-notifications) +} +.theme-dark-forced .sprite-fm-theme-after.icon-notifications-muted-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-notifications-muted-before:before,.theme-dark-forced .sprite-fm-theme.icon-notifications-muted,.theme-dark .sprite-fm-theme-after.icon-notifications-muted-after:after,.theme-dark .sprite-fm-theme-before.icon-notifications-muted-before:before,.theme-dark .sprite-fm-theme.icon-notifications-muted{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-notifications-muted) +} +.theme-dark-forced .sprite-fm-theme-after.icon-question-grey-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-question-grey-before:before,.theme-dark-forced .sprite-fm-theme.icon-question-grey,.theme-dark .sprite-fm-theme-after.icon-question-grey-after:after,.theme-dark .sprite-fm-theme-before.icon-question-grey-before:before,.theme-dark .sprite-fm-theme.icon-question-grey{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-question-grey) +} +.theme-dark-forced .sprite-fm-theme-after.icon-settings-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-settings-before:before,.theme-dark-forced .sprite-fm-theme.icon-settings,.theme-dark .sprite-fm-theme-after.icon-settings-after:after,.theme-dark .sprite-fm-theme-before.icon-settings-before:before,.theme-dark .sprite-fm-theme.icon-settings{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-settings) +} +.theme-dark-forced .sprite-fm-theme-after.icon-stripe-after:after,.theme-dark-forced .sprite-fm-theme-before.icon-stripe-before:before,.theme-dark-forced .sprite-fm-theme.icon-stripe,.theme-dark .sprite-fm-theme-after.icon-stripe-after:after,.theme-dark .sprite-fm-theme-before.icon-stripe-before:before,.theme-dark .sprite-fm-theme.icon-stripe{ + background-image:url(../imagery/sprites-fm-theme-dark.90ea8865a7498113.svg#icon-stripe) +} + +.sprite-fm-theme,.sprite-fm-theme-after:after,.sprite-fm-theme-before:before{ + background:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg) no-repeat; + background-size:100%; + content:""; + display:block; + height:var(--icon-size, 16px); + width:var(--icon-size, 16px) +} +.theme-light-forced .sprite-fm-theme-after.icon-bucket-after:after,.theme-light-forced .sprite-fm-theme-before.icon-bucket-before:before,.theme-light-forced .sprite-fm-theme.icon-bucket,.theme-light .sprite-fm-theme-after.icon-bucket-after:after,.theme-light .sprite-fm-theme-before.icon-bucket-before:before,.theme-light .sprite-fm-theme.icon-bucket{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-bucket) +} +.theme-light-forced .sprite-fm-theme-after.icon-emoji-after:after,.theme-light-forced .sprite-fm-theme-before.icon-emoji-before:before,.theme-light-forced .sprite-fm-theme.icon-emoji,.theme-light .sprite-fm-theme-after.icon-emoji-after:after,.theme-light .sprite-fm-theme-before.icon-emoji-before:before,.theme-light .sprite-fm-theme.icon-emoji{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-emoji) +} +.theme-light-forced .sprite-fm-theme-after.icon-emoji-active-after:after,.theme-light-forced .sprite-fm-theme-before.icon-emoji-active-before:before,.theme-light-forced .sprite-fm-theme.icon-emoji-active,.theme-light .sprite-fm-theme-after.icon-emoji-active-after:after,.theme-light .sprite-fm-theme-before.icon-emoji-active-before:before,.theme-light .sprite-fm-theme.icon-emoji-active{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-emoji-active) +} +.theme-light-forced .sprite-fm-theme-after.icon-emoji-reactions-after:after,.theme-light-forced .sprite-fm-theme-before.icon-emoji-reactions-before:before,.theme-light-forced .sprite-fm-theme.icon-emoji-reactions,.theme-light .sprite-fm-theme-after.icon-emoji-reactions-after:after,.theme-light .sprite-fm-theme-before.icon-emoji-reactions-before:before,.theme-light .sprite-fm-theme.icon-emoji-reactions{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-emoji-reactions) +} +.theme-light-forced .sprite-fm-theme-after.icon-emoji-reactions-active-after:after,.theme-light-forced .sprite-fm-theme-before.icon-emoji-reactions-active-before:before,.theme-light-forced .sprite-fm-theme.icon-emoji-reactions-active,.theme-light .sprite-fm-theme-after.icon-emoji-reactions-active-after:after,.theme-light .sprite-fm-theme-before.icon-emoji-reactions-active-before:before,.theme-light .sprite-fm-theme.icon-emoji-reactions-active{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-emoji-reactions-active) +} +.theme-light-forced .sprite-fm-theme-after.icon-empty-state-backup-after:after,.theme-light-forced .sprite-fm-theme-before.icon-empty-state-backup-before:before,.theme-light-forced .sprite-fm-theme.icon-empty-state-backup,.theme-light .sprite-fm-theme-after.icon-empty-state-backup-after:after,.theme-light .sprite-fm-theme-before.icon-empty-state-backup-before:before,.theme-light .sprite-fm-theme.icon-empty-state-backup{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-empty-state-backup) +} +.theme-light-forced .sprite-fm-theme-after.icon-empty-state-bucket-upload-after:after,.theme-light-forced .sprite-fm-theme-before.icon-empty-state-bucket-upload-before:before,.theme-light-forced .sprite-fm-theme.icon-empty-state-bucket-upload,.theme-light .sprite-fm-theme-after.icon-empty-state-bucket-upload-after:after,.theme-light .sprite-fm-theme-before.icon-empty-state-bucket-upload-before:before,.theme-light .sprite-fm-theme.icon-empty-state-bucket-upload{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-empty-state-bucket-upload) +} +.theme-light-forced .sprite-fm-theme-after.icon-empty-state-favourite-after:after,.theme-light-forced .sprite-fm-theme-before.icon-empty-state-favourite-before:before,.theme-light-forced .sprite-fm-theme.icon-empty-state-favourite,.theme-light .sprite-fm-theme-after.icon-empty-state-favourite-after:after,.theme-light .sprite-fm-theme-before.icon-empty-state-favourite-before:before,.theme-light .sprite-fm-theme.icon-empty-state-favourite{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-empty-state-favourite) +} +.theme-light-forced .sprite-fm-theme-after.icon-empty-state-groups-after:after,.theme-light-forced .sprite-fm-theme-before.icon-empty-state-groups-before:before,.theme-light-forced .sprite-fm-theme.icon-empty-state-groups,.theme-light .sprite-fm-theme-after.icon-empty-state-groups-after:after,.theme-light .sprite-fm-theme-before.icon-empty-state-groups-before:before,.theme-light .sprite-fm-theme.icon-empty-state-groups{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-empty-state-groups) +} +.theme-light-forced .sprite-fm-theme-after.icon-empty-state-keys-after:after,.theme-light-forced .sprite-fm-theme-before.icon-empty-state-keys-before:before,.theme-light-forced .sprite-fm-theme.icon-empty-state-keys,.theme-light .sprite-fm-theme-after.icon-empty-state-keys-after:after,.theme-light .sprite-fm-theme-before.icon-empty-state-keys-before:before,.theme-light .sprite-fm-theme.icon-empty-state-keys{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-empty-state-keys) +} +.theme-light-forced .sprite-fm-theme-after.icon-empty-state-policy-after:after,.theme-light-forced .sprite-fm-theme-before.icon-empty-state-policy-before:before,.theme-light-forced .sprite-fm-theme.icon-empty-state-policy,.theme-light .sprite-fm-theme-after.icon-empty-state-policy-after:after,.theme-light .sprite-fm-theme-before.icon-empty-state-policy-before:before,.theme-light .sprite-fm-theme.icon-empty-state-policy{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-empty-state-policy) +} +.theme-light-forced .sprite-fm-theme-after.icon-empty-state-restricted-folder-after:after,.theme-light-forced .sprite-fm-theme-before.icon-empty-state-restricted-folder-before:before,.theme-light-forced .sprite-fm-theme.icon-empty-state-restricted-folder,.theme-light .sprite-fm-theme-after.icon-empty-state-restricted-folder-after:after,.theme-light .sprite-fm-theme-before.icon-empty-state-restricted-folder-before:before,.theme-light .sprite-fm-theme.icon-empty-state-restricted-folder{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-empty-state-restricted-folder) +} +.theme-light-forced .sprite-fm-theme-after.icon-empty-state-users-after:after,.theme-light-forced .sprite-fm-theme-before.icon-empty-state-users-before:before,.theme-light-forced .sprite-fm-theme.icon-empty-state-users,.theme-light .sprite-fm-theme-after.icon-empty-state-users-after:after,.theme-light .sprite-fm-theme-before.icon-empty-state-users-before:before,.theme-light .sprite-fm-theme.icon-empty-state-users{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-empty-state-users) +} +.theme-light-forced .sprite-fm-theme-after.icon-gallery-photos-after:after,.theme-light-forced .sprite-fm-theme-before.icon-gallery-photos-before:before,.theme-light-forced .sprite-fm-theme.icon-gallery-photos,.theme-light .sprite-fm-theme-after.icon-gallery-photos-after:after,.theme-light .sprite-fm-theme-before.icon-gallery-photos-before:before,.theme-light .sprite-fm-theme.icon-gallery-photos{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-gallery-photos) +} +.theme-light-forced .sprite-fm-theme-after.icon-gif-rest-after:after,.theme-light-forced .sprite-fm-theme-before.icon-gif-rest-before:before,.theme-light-forced .sprite-fm-theme.icon-gif-rest,.theme-light .sprite-fm-theme-after.icon-gif-rest-after:after,.theme-light .sprite-fm-theme-before.icon-gif-rest-before:before,.theme-light .sprite-fm-theme.icon-gif-rest{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-gif-rest) +} +.theme-light-forced .sprite-fm-theme-after.icon-handset-after:after,.theme-light-forced .sprite-fm-theme-before.icon-handset-before:before,.theme-light-forced .sprite-fm-theme.icon-handset,.theme-light .sprite-fm-theme-after.icon-handset-after:after,.theme-light .sprite-fm-theme-before.icon-handset-before:before,.theme-light .sprite-fm-theme.icon-handset{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-handset) +} +.theme-light-forced .sprite-fm-theme-after.icon-handset-cancelled-after:after,.theme-light-forced .sprite-fm-theme-before.icon-handset-cancelled-before:before,.theme-light-forced .sprite-fm-theme.icon-handset-cancelled,.theme-light .sprite-fm-theme-after.icon-handset-cancelled-after:after,.theme-light .sprite-fm-theme-before.icon-handset-cancelled-before:before,.theme-light .sprite-fm-theme.icon-handset-cancelled{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-handset-cancelled) +} +.theme-light-forced .sprite-fm-theme-after.icon-handset-ended-after:after,.theme-light-forced .sprite-fm-theme-before.icon-handset-ended-before:before,.theme-light-forced .sprite-fm-theme.icon-handset-ended,.theme-light .sprite-fm-theme-after.icon-handset-ended-after:after,.theme-light .sprite-fm-theme-before.icon-handset-ended-before:before,.theme-light .sprite-fm-theme.icon-handset-ended{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-handset-ended) +} +.theme-light-forced .sprite-fm-theme-after.icon-handset-failed-after:after,.theme-light-forced .sprite-fm-theme-before.icon-handset-failed-before:before,.theme-light-forced .sprite-fm-theme.icon-handset-failed,.theme-light .sprite-fm-theme-after.icon-handset-failed-after:after,.theme-light .sprite-fm-theme-before.icon-handset-failed-before:before,.theme-light .sprite-fm-theme.icon-handset-failed{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-handset-failed) +} +.theme-light-forced .sprite-fm-theme-after.icon-handset-incoming-after:after,.theme-light-forced .sprite-fm-theme-before.icon-handset-incoming-before:before,.theme-light-forced .sprite-fm-theme.icon-handset-incoming,.theme-light .sprite-fm-theme-after.icon-handset-incoming-after:after,.theme-light .sprite-fm-theme-before.icon-handset-incoming-before:before,.theme-light .sprite-fm-theme.icon-handset-incoming{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-handset-incoming) +} +.theme-light-forced .sprite-fm-theme-after.icon-handset-missed-after:after,.theme-light-forced .sprite-fm-theme-before.icon-handset-missed-before:before,.theme-light-forced .sprite-fm-theme.icon-handset-missed,.theme-light .sprite-fm-theme-after.icon-handset-missed-after:after,.theme-light .sprite-fm-theme-before.icon-handset-missed-before:before,.theme-light .sprite-fm-theme.icon-handset-missed{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-handset-missed) +} +.theme-light-forced .sprite-fm-theme-after.icon-handset-outgoing-after:after,.theme-light-forced .sprite-fm-theme-before.icon-handset-outgoing-before:before,.theme-light-forced .sprite-fm-theme.icon-handset-outgoing,.theme-light .sprite-fm-theme-after.icon-handset-outgoing-after:after,.theme-light .sprite-fm-theme-before.icon-handset-outgoing-before:before,.theme-light .sprite-fm-theme.icon-handset-outgoing{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-handset-outgoing) +} +.theme-light-forced .sprite-fm-theme-after.icon-handset-rejected-after:after,.theme-light-forced .sprite-fm-theme-before.icon-handset-rejected-before:before,.theme-light-forced .sprite-fm-theme.icon-handset-rejected,.theme-light .sprite-fm-theme-after.icon-handset-rejected-after:after,.theme-light .sprite-fm-theme-before.icon-handset-rejected-before:before,.theme-light .sprite-fm-theme.icon-handset-rejected{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-handset-rejected) +} +.theme-light-forced .sprite-fm-theme-after.icon-image-zoom-in-after:after,.theme-light-forced .sprite-fm-theme-before.icon-image-zoom-in-before:before,.theme-light-forced .sprite-fm-theme.icon-image-zoom-in,.theme-light .sprite-fm-theme-after.icon-image-zoom-in-after:after,.theme-light .sprite-fm-theme-before.icon-image-zoom-in-before:before,.theme-light .sprite-fm-theme.icon-image-zoom-in{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-image-zoom-in) +} +.theme-light-forced .sprite-fm-theme-after.icon-image-zoom-out-after:after,.theme-light-forced .sprite-fm-theme-before.icon-image-zoom-out-before:before,.theme-light-forced .sprite-fm-theme.icon-image-zoom-out,.theme-light .sprite-fm-theme-after.icon-image-zoom-out-after:after,.theme-light .sprite-fm-theme-before.icon-image-zoom-out-before:before,.theme-light .sprite-fm-theme.icon-image-zoom-out{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-image-zoom-out) +} +.theme-light-forced .sprite-fm-theme-after.icon-loading-spinner-after:after,.theme-light-forced .sprite-fm-theme-before.icon-loading-spinner-before:before,.theme-light-forced .sprite-fm-theme.icon-loading-spinner,.theme-light .sprite-fm-theme-after.icon-loading-spinner-after:after,.theme-light .sprite-fm-theme-before.icon-loading-spinner-before:before,.theme-light .sprite-fm-theme.icon-loading-spinner{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-loading-spinner) +} +.theme-light-forced .sprite-fm-theme-after.icon-notifications-after:after,.theme-light-forced .sprite-fm-theme-before.icon-notifications-before:before,.theme-light-forced .sprite-fm-theme.icon-notifications,.theme-light .sprite-fm-theme-after.icon-notifications-after:after,.theme-light .sprite-fm-theme-before.icon-notifications-before:before,.theme-light .sprite-fm-theme.icon-notifications{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-notifications) +} +.theme-light-forced .sprite-fm-theme-after.icon-notifications-muted-after:after,.theme-light-forced .sprite-fm-theme-before.icon-notifications-muted-before:before,.theme-light-forced .sprite-fm-theme.icon-notifications-muted,.theme-light .sprite-fm-theme-after.icon-notifications-muted-after:after,.theme-light .sprite-fm-theme-before.icon-notifications-muted-before:before,.theme-light .sprite-fm-theme.icon-notifications-muted{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-notifications-muted) +} +.theme-light-forced .sprite-fm-theme-after.icon-question-grey-after:after,.theme-light-forced .sprite-fm-theme-before.icon-question-grey-before:before,.theme-light-forced .sprite-fm-theme.icon-question-grey,.theme-light .sprite-fm-theme-after.icon-question-grey-after:after,.theme-light .sprite-fm-theme-before.icon-question-grey-before:before,.theme-light .sprite-fm-theme.icon-question-grey{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-question-grey) +} +.theme-light-forced .sprite-fm-theme-after.icon-settings-after:after,.theme-light-forced .sprite-fm-theme-before.icon-settings-before:before,.theme-light-forced .sprite-fm-theme.icon-settings,.theme-light .sprite-fm-theme-after.icon-settings-after:after,.theme-light .sprite-fm-theme-before.icon-settings-before:before,.theme-light .sprite-fm-theme.icon-settings{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-settings) +} +.theme-light-forced .sprite-fm-theme-after.icon-stripe-after:after,.theme-light-forced .sprite-fm-theme-before.icon-stripe-before:before,.theme-light-forced .sprite-fm-theme.icon-stripe,.theme-light .sprite-fm-theme-after.icon-stripe-after:after,.theme-light .sprite-fm-theme-before.icon-stripe-before:before,.theme-light .sprite-fm-theme.icon-stripe{ + background-image:url(../imagery/sprites-fm-theme-light.abd5e8e14668c4b2.svg#icon-stripe) +} + +.sprite-fm-illustration,.sprite-fm-illustration-after:after,.sprite-fm-illustration-before:before{ + + --scale:calc(var(--width)/200); + background:url(../imagery/sprites-fm-illustration-sprite.9c4fcb5f9def6130.svg) no-repeat; + background-size:2000%; + content:""; + display:block; + height:var(--height, 250px); + width:var(--width, 200px) +} +.sprite-fm-illustration.img-topbar-email-registration,.sprite-fm-illustration.img-topbar-email-registration-after:after,.sprite-fm-illustration.img-topbar-email-registration-before:before{ + background-position:0 0 +} +.sprite-fm-illustration.img-transferpage-empty-transfer,.sprite-fm-illustration.img-transferpage-empty-transfer-after:after,.sprite-fm-illustration.img-transferpage-empty-transfer-before:before{ + background-position:5.26316% 0 +} +.sprite-fm-illustration.img-dialog-business-contacts,.sprite-fm-illustration.img-dialog-business-contacts-after:after,.sprite-fm-illustration.img-dialog-business-contacts-before:before{ + background-position:10.52632% 0 +} +.sprite-fm-illustration.img-dialog-contacts,.sprite-fm-illustration.img-dialog-contacts-after:after,.sprite-fm-illustration.img-dialog-contacts-before:before{ + background-position:15.78947% 0 +} +.sprite-fm-illustration.img-dialog-decryption-key,.sprite-fm-illustration.img-dialog-decryption-key-after:after,.sprite-fm-illustration.img-dialog-decryption-key-before:before{ + background-position:21.05263% 0 +} +.sprite-fm-illustration.img-meetings-e2ee,.sprite-fm-illustration.img-meetings-e2ee-after:after,.sprite-fm-illustration.img-meetings-e2ee-before:before{ + background-position:26.31579% 0 +} +.sprite-fm-illustration.img-transferpage-transfer,.sprite-fm-illustration.img-transferpage-transfer-after:after,.sprite-fm-illustration.img-transferpage-transfer-before:before{ + background-position:31.57895% 0 +} +.sprite-fm-illustration.img-dialogs-achievements,.sprite-fm-illustration.img-dialogs-achievements-after:after,.sprite-fm-illustration.img-dialogs-achievements-before:before{ + background-position:36.84211% 0 +} +.sprite-fm-illustration.img-achievements-bonus,.sprite-fm-illustration.img-achievements-bonus-after:after,.sprite-fm-illustration.img-achievements-bonus-before:before{ + background-position:42.10526% 0 +} +.sprite-fm-illustration.img-achievements-desktop-app,.sprite-fm-illustration.img-achievements-desktop-app-after:after,.sprite-fm-illustration.img-achievements-desktop-app-before:before{ + background-position:47.36842% 0 +} +.sprite-fm-illustration.img-dialog-email,.sprite-fm-illustration.img-dialog-email-after:after,.sprite-fm-illustration.img-dialog-email-before:before{ + background-position:52.63158% 0 +} +.sprite-fm-illustration.img-dialog-groupchat,.sprite-fm-illustration.img-dialog-groupchat-after:after,.sprite-fm-illustration.img-dialog-groupchat-before:before{ + background-position:57.89474% 0 +} +.sprite-fm-illustration.img-achievements-invite-users,.sprite-fm-illustration.img-achievements-invite-users-after:after,.sprite-fm-illustration.img-achievements-invite-users-before:before{ + background-position:63.15789% 0 +} +.sprite-fm-illustration.img-achievements-mobile-app,.sprite-fm-illustration.img-achievements-mobile-app-after:after,.sprite-fm-illustration.img-achievements-mobile-app-before:before{ + background-position:68.42105% 0 +} +.sprite-fm-illustration.img-achievements-sms-verification,.sprite-fm-illustration.img-achievements-sms-verification-after:after,.sprite-fm-illustration.img-achievements-sms-verification-before:before{ + background-position:73.68421% 0 +} +.sprite-fm-illustration.img-dialog-backup-phone,.sprite-fm-illustration.img-dialog-backup-phone-after:after,.sprite-fm-illustration.img-dialog-backup-phone-before:before{ + background-position:78.94737% 0 +} +.sprite-fm-illustration.img-dialog-upgrade,.sprite-fm-illustration.img-dialog-upgrade-after:after,.sprite-fm-illustration.img-dialog-upgrade-before:before{ + background-position:84.21053% 0 +} +.sprite-fm-illustration.img-dialog-overquota-storage,.sprite-fm-illustration.img-dialog-overquota-storage-after:after,.sprite-fm-illustration.img-dialog-overquota-storage-before:before{ + background-position:89.47368% 0 +} +.sprite-fm-illustration.img-dialog-transfer-full,.sprite-fm-illustration.img-dialog-transfer-full-after:after,.sprite-fm-illustration.img-dialog-transfer-full-before:before{ + background-position:94.73684% 0 +} +.sprite-fm-illustration.img-dialog-account-lock,.sprite-fm-illustration.img-dialog-account-lock-after:after,.sprite-fm-illustration.img-dialog-account-lock-before:before{ + background-position:100% 0 +} +.sprite-fm-illustration.img-dialog-account-recovery,.sprite-fm-illustration.img-dialog-account-recovery-after:after,.sprite-fm-illustration.img-dialog-account-recovery-before:before{ + background-position:0 calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-mobile-success,.sprite-fm-illustration.img-dialog-mobile-success-after:after,.sprite-fm-illustration.img-dialog-mobile-success-before:before{ + background-position:5.26316% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-sms-verification,.sprite-fm-illustration.img-dialog-sms-verification-after:after,.sprite-fm-illustration.img-dialog-sms-verification-before:before{ + background-position:10.52632% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-business-expiry,.sprite-fm-illustration.img-dialog-business-expiry-after:after,.sprite-fm-illustration.img-dialog-business-expiry-before:before{ + background-position:15.78947% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-coin,.sprite-fm-illustration.img-dialog-coin-after:after,.sprite-fm-illustration.img-dialog-coin-before:before{ + background-position:21.05263% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-cookie,.sprite-fm-illustration.img-dialog-cookie-after:after,.sprite-fm-illustration.img-dialog-cookie-before:before{ + background-position:26.31579% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-copyright,.sprite-fm-illustration.img-dialog-copyright-after:after,.sprite-fm-illustration.img-dialog-copyright-before:before{ + background-position:31.57895% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-login,.sprite-fm-illustration.img-dialog-login-after:after,.sprite-fm-illustration.img-dialog-login-before:before{ + background-position:36.84211% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-safe,.sprite-fm-illustration.img-dialog-safe-after:after,.sprite-fm-illustration.img-dialog-safe-before:before{ + background-position:42.10526% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-printer,.sprite-fm-illustration.img-dialog-printer-after:after,.sprite-fm-illustration.img-dialog-printer-before:before{ + background-position:47.36842% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-pw-manager,.sprite-fm-illustration.img-dialog-pw-manager-after:after,.sprite-fm-illustration.img-dialog-pw-manager-before:before{ + background-position:52.63158% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-usb,.sprite-fm-illustration.img-dialog-usb-after:after,.sprite-fm-illustration.img-dialog-usb-before:before{ + background-position:57.89474% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-payment,.sprite-fm-illustration.img-dialog-payment-after:after,.sprite-fm-illustration.img-dialog-payment-before:before{ + background-position:63.15789% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-voucher,.sprite-fm-illustration.img-dialog-voucher-after:after,.sprite-fm-illustration.img-dialog-voucher-before:before{ + background-position:68.42105% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-chat-url-preview,.sprite-fm-illustration.img-chat-url-preview-after:after,.sprite-fm-illustration.img-chat-url-preview-before:before{ + background-position:73.68421% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-dialog-account-setting,.sprite-fm-illustration.img-dialog-account-setting-after:after,.sprite-fm-illustration.img-dialog-account-setting-before:before{ + background-position:78.94737% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-passowrd-reset-unlock-account,.sprite-fm-illustration.img-passowrd-reset-unlock-account-after:after,.sprite-fm-illustration.img-passowrd-reset-unlock-account-before:before{ + background-position:84.21053% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-password-reset-recovery-key,.sprite-fm-illustration.img-password-reset-recovery-key-after:after,.sprite-fm-illustration.img-password-reset-recovery-key-before:before{ + background-position:89.47368% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-password-recovery-device1,.sprite-fm-illustration.img-password-recovery-device1-after:after,.sprite-fm-illustration.img-password-recovery-device1-before:before{ + background-position:94.73684% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-password-recovery-device2,.sprite-fm-illustration.img-password-recovery-device2-after:after,.sprite-fm-illustration.img-password-recovery-device2-before:before{ + background-position:100% calc(var(--scale)*-250) +} +.sprite-fm-illustration.img-password-recovery-device3,.sprite-fm-illustration.img-password-recovery-device3-after:after,.sprite-fm-illustration.img-password-recovery-device3-before:before{ + background-position:0 calc(var(--scale)*-500) +} +.sprite-fm-illustration.img-file-link-lightbulb,.sprite-fm-illustration.img-file-link-lightbulb-after:after,.sprite-fm-illustration.img-file-link-lightbulb-before:before{ + background-position:5.26316% calc(var(--scale)*-500) +} +.sprite-fm-illustration.img-dialog-desktop-app,.sprite-fm-illustration.img-dialog-desktop-app-after:after,.sprite-fm-illustration.img-dialog-desktop-app-before:before{ + background-position:10.52632% calc(var(--scale)*-500) +} +.sprite-fm-illustration.img-dialog-payment-card-exp,.sprite-fm-illustration.img-dialog-payment-card-exp-after:after,.sprite-fm-illustration.img-dialog-payment-card-exp-before:before{ + background-position:15.78947% calc(var(--scale)*-500) +} +.sprite-fm-illustration-wide,.sprite-fm-illustration-wide-after:after,.sprite-fm-illustration-wide-before:before{ + + --scale:calc(var(--width)/400); + background:url(../imagery/sprites-fm-illustration-sprite-wide.b2880201cd454091.svg) no-repeat; + background-size:1000%; + content:""; + display:block; + height:var(--height, 250px); + width:var(--width, 400px) +} +.sprite-fm-illustration-wide.img-dialog-referral-program,.sprite-fm-illustration-wide.img-dialog-referral-program-after:after,.sprite-fm-illustration-wide.img-dialog-referral-program-before:before{ + background-position:0 0 +} +.sprite-fm-illustration-wide.img-backup-computer,.sprite-fm-illustration-wide.img-backup-computer-after:after,.sprite-fm-illustration-wide.img-backup-computer-before:before{ + background-position:11.11111% 0 +} +.sprite-fm-illustration-wide.img-dialog-expiry-link,.sprite-fm-illustration-wide.img-dialog-expiry-link-after:after,.sprite-fm-illustration-wide.img-dialog-expiry-link-before:before{ + background-position:22.22222% 0 +} +.sprite-fm-illustration-wide.img-meetings-create-account,.sprite-fm-illustration-wide.img-meetings-create-account-after:after,.sprite-fm-illustration-wide.img-meetings-create-account-before:before{ + background-position:33.33333% 0 +} +.sprite-fm-illustration-wide.img-backup-rewind,.sprite-fm-illustration-wide.img-backup-rewind-after:after,.sprite-fm-illustration-wide.img-backup-rewind-before:before{ + background-position:44.44444% 0 +} +.sprite-fm-illustration-wide.registration,.sprite-fm-illustration-wide.registration-after:after,.sprite-fm-illustration-wide.registration-before:before{ + background-position:55.55556% 0 +} +.sprite-fm-illustration-wide.img-dialog-megadrop,.sprite-fm-illustration-wide.img-dialog-megadrop-after:after,.sprite-fm-illustration-wide.img-dialog-megadrop-before:before{ + background-position:66.66667% 0 +} +.sprite-fm-illustration-wide.img-dialog-darkmode,.sprite-fm-illustration-wide.img-dialog-darkmode-after:after,.sprite-fm-illustration-wide.img-dialog-darkmode-before:before{ + background-position:77.77778% 0 +} +.sprite-fm-illustration-wide.img-password-recovery-devices,.sprite-fm-illustration-wide.img-password-recovery-devices-after:after,.sprite-fm-illustration-wide.img-password-recovery-devices-before:before{ + background-position:88.88889% 0 +} +.sprite-fm-illustration-wide.img-mega-logo-light,.sprite-fm-illustration-wide.img-mega-logo-light-after:after,.sprite-fm-illustration-wide.img-mega-logo-light-before:before{ + background-position:100% 0 +} +.sprite-fm-illustration-wide.mega-logo-dark,.sprite-fm-illustration-wide.mega-logo-dark-after:after,.sprite-fm-illustration-wide.mega-logo-dark-before:before{ + background-position:0 calc(var(--scale)*-250) +} + +.fm-modal-dialog,.mega-dialog-container{ + align-items:center; + display:flex; + height:100%; + justify-content:center; + left:0; + pointer-events:none; + position:fixed; + top:0; + width:100%; + z-index:1111 +} +.fm-modal-dialog,.mega-dialog-container.msg-dialog-container{ + z-index:1115 +} +.loading .mega-dialog-container.msg-dialog-container{ + z-index:1215 +} +.fm-modal-dialog>*,.mega-dialog-container>*{ + pointer-events:auto +} +.mega-dialog{ + background:var(--surface-main); + background-clip:padding-box; + border-radius:var(--border-radius); + box-shadow:var(--dialog-shadow); + box-sizing:border-box; + color:var(--text-color-medium); + display:flex; + flex-direction:column; + font:var(--text-body1); + position:absolute; + width:640px; + z-index:1200 +} +.rtl .mega-dialog{ + direction:rtl +} +.mega-dialog>footer,.mega-dialog>footer aside,.mega-dialog>header{ + flex-grow:0; + flex-shrink:0 +} +.mega-dialog>.content-block,.mega-dialog>section{ + min-height:0 +} +.mega-dialog *{ + box-sizing:border-box; + font-family:var(--text-font-family) +} +.mega-dialog strong{ + font-family:var(--text-font-family-bold) +} +.mega-dialog>header h2,.mega-dialog>header h3{ + font-weight:400; + margin:0; + overflow:hidden; + padding:0; + text-align:center; + text-overflow:ellipsis; + width:100% +} +.mega-dialog h2{ + color:var(--text-color-high); + font:var(--text-h2) +} +.mega-dialog h3{ + color:var(--text-color-high); + font:var(--text-h3) +} +.mega-dialog>header p{ + margin-top:16px +} +.mega-dialog .content-block,.mega-dialog>header p{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.mega-dialog .content-block{ + background:var(--surface-main) +} +.mega-dialog .content-block .sub-header{ + color:var(--text-color-higher); + font:var(--text-body1-bold) +} +.mega-dialog a,.mega-dialog a:active,.mega-dialog a:visited,.mega-dialog p{ + margin:0 +} +.mega-dialog a,.mega-dialog a:active,.mega-dialog a:visited{ + color:var(--text-color-info); + text-decoration:underline +} +.mega-dialog a:hover{ + text-decoration:none +} +.mega-dialog>footer,.mega-dialog>header{ + background:transparent +} +.mega-dialog>footer button~button{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.mega-dialog>footer button~button.large{ + -webkit-margin-start:12px; + margin-inline-start:12px +} +.mega-dialog .dialog-top,.mega-dialog>header{ + border-radius:var(--border-radius) var(--border-radius) 0 0 +} +.mega-dialog .dialog-bottom,.mega-dialog>footer,.mega-dialog>footer aside{ + border-radius:0 0 var(--border-radius) var(--border-radius) +} +.mega-dialog .align-start{ + text-align:start !important +} +.mega-dialog .align-end{ + text-align:end !important +} +.mega-dialog .alt-background{ + background:var(--surface-grey-1) +} +.mega-dialog hr{ + background:var(--surface-grey-2); + border:none; + height:1px; + margin:0; + width:100% +} +.mega-dialog button.close{ + --icon-size:24px; + align-items:center; + background:transparent; + border:none; + cursor:pointer; + display:flex; + justify-content:center; + padding:0; + position:absolute; + right:16px; + top:16px; + z-index:2010 +} +.mega-dialog button.close:focus{ + outline:none +} +.mega-dialog button.close i{ + --icon-size:24px; + margin:0; + opacity:.6; + transition:opacity .2s ease-in-out +} +.mega-dialog.start-meeting button.close i{ + --mask-color:var(--secondary-white); + opacity:1 +} +.mega-dialog button.close i:hover{ + opacity:.8 +} +.rtl .mega-dialog button.close{ + left:16px; + right:auto +} +.mega-dialog>header{ + display:flex; + flex-direction:column +} +.mega-dialog:not(.dialog-template-message)>header .graphic{ + --width:120px; + display:block; + height:120px; + margin:0 auto 24px; + width:120px +} +.mega-dialog:not(.dialog-template-message)>header .graphic.wide{ + --width:initial; + width:auto +} +.mega-dialog>footer,.mega-dialog>section{ + display:flex; + flex-direction:column +} +.mega-dialog>footer{ + justify-content:flex-end +} +.mega-dialog>footer .footer-container{ + display:flex; + justify-content:flex-end; + width:100% +} +.mega-dialog>footer .footer-container.space-between{ + justify-content:space-between +} +.mega-dialog>footer .condition{ + color:var(--text-color-low); + font:var(--text-body2); + left:0; + position:absolute; + text-align:center; + top:-26px; + width:100% +} +.mega-dialog>footer aside{ + --mask-color:var(--text-color-medium); + background:var(--surface-grey-4); + font:var(--text-body2); + position:relative; + text-align:center +} +.mega-dialog>footer aside *,.mega-dialog>footer aside :active,.mega-dialog>footer aside :hover{ + font:var(--text-body2) +} +.mega-dialog.dialog-template-main>header{ + padding:48px 48px 16px +} +.mega-dialog.dialog-template-main>header h2,.mega-dialog.dialog-template-main>header p{ + text-align:start +} +.mega-dialog.dialog-template-main .content-block{ + padding:0 48px +} +.mega-dialog.dialog-template-main>footer .footer-container{ + padding:16px 48px 48px +} +.mega-dialog.dialog-template-main>footer aside{ + padding:12px 48px +} +.mega-dialog.dialog-template-main>footer aside:not(.with-condition){ + margin-top:-24px +} +.mega-dialog.dialog-template-tool>header{ + padding:12px 48px +} +.mega-dialog.dialog-template-tool>header .graphic{ + margin-top:36px +} +.mega-dialog.dialog-template-tool>header p{ + margin-top:4px; + text-align:center +} +.mega-dialog.dialog-template-tool .content-block{ + padding:0 48px +} +.mega-dialog.dialog-template-tool>footer .footer-container{ + padding:40px 48px 24px +} +.mega-dialog.dialog-template-tool>footer aside{ + padding:12px 48px +} +.mega-dialog.dialog-template-tool>footer aside.with-condition{ + margin-top:24px +} +.mega-dialog.dialog-template-action>header{ + padding:16px 48px +} +.mega-dialog.dialog-template-action>header .graphic{ + margin-top:32px +} +.mega-dialog.dialog-template-action>header p{ + text-align:start +} +.mega-dialog.dialog-template-action .content-block{ + padding:0 48px +} +.mega-dialog.dialog-template-action>footer .footer-container{ + justify-content:center; + padding:16px 48px 48px +} +.mega-dialog.dialog-template-action>footer button{ + -webkit-margin-end:4px; + -webkit-margin-start:4px; + margin-inline-end:4px; + margin-inline-start:4px +} +.mega-dialog.dialog-template-action>footer button.large{ + -webkit-margin-end:6px; + -webkit-margin-start:6px; + margin-inline-end:6px; + margin-inline-start:6px +} +.mega-dialog.dialog-template-action>footer aside{ + padding:12px 48px +} +.mega-dialog.dialog-template-action>footer aside:not(.with-condition){ + margin-top:-24px +} +.mega-dialog.dialog-template-message{ + max-width:640px; + min-width:300px; + width:auto +} +.mega-dialog.dialog-template-message>header{ + -webkit-padding-end:72px; + -webkit-padding-start:24px; + flex-direction:row; + padding-inline-end:72px; + padding-inline-start:24px; + padding-top:24px +} +.mega-dialog.dialog-template-message>header .graphic{ + -webkit-margin-end:24px; + flex-grow:0; + flex-shrink:0; + height:64px; + margin-inline-end:24px; + width:64px +} +.mega-dialog.dialog-template-message>header .info-container{ + display:flex; + flex-direction:column; + justify-content:center +} +.mega-dialog.dialog-template-message>header h3{ + text-align:start +} +.mega-dialog.dialog-template-message>header p{ + margin-top:12px +} +.mega-dialog.dialog-template-message>header h3.hidden~p{ + color:var(--text-color-high); + margin-top:0 +} +.mega-dialog.dialog-template-message>footer .align-end{ + display:flex; + justify-content:flex-end +} +.mega-dialog.dialog-template-message>footer .footer-container{ + padding:24px +} +.mega-dialog.dialog-template-message>footer.compound .footer-container{ + background-color:var(--surface-grey-1); + border-radius:inherit; + flex-direction:column; + margin-top:24px +} +.mega-dialog.dialog-template-message>footer aside{ + padding:12px 24px +} +.mega-dialog.dialog-template-message>footer aside.with-condition{ + margin-top:24px +} +.mega-dialog.dialog-template-graphic>header{ + padding:48px 48px 16px +} +.mega-dialog.dialog-template-graphic .content-block{ + padding:0 48px; + text-align:center +} +.mega-dialog.dialog-template-graphic>footer .footer-container{ + justify-content:center; + padding:16px 48px 48px +} +.mega-dialog.dialog-template-graphic>footer aside{ + padding:12px 48px +} +.mega-dialog.dialog-template-graphic>footer .footer-container+aside:not(.with-condition){ + margin-top:-24px +} + +.mega-dialog{ + --border-radius:24px; + --mask-color:var(--icon-rest) +} + +.mega-button.theme-light,.theme-light .mega-button,html .mega-button.theme-light-forced,html .theme-light-forced .mega-button{ + + --red:var(--surface-error); + --red-hover:var(--surface-error-hover); + --red-active:var(--surface-error-active); + --text-red:var(--text-color-white-high); + --red-border:rgba(1, 1, 1, 0.05); + + --green:var(--button-fill-positive); + --green-hover:var(--button-fill-positive-hover); + --green-active:var(--button-fill-positive-active); + --text-green:var(--text-color-white-high); + --green-border:rgba(1, 1, 1, 0.05); + + --blue:var(--button-fill-blue); + --blue-hover:var(--button-fill-blue-hover); + --blue-active:var(--button-fill-blue-active); + --text-blue:var(--text-color-white-high); + --blue-border:rgba(1, 1, 1, 0.05); + + --neutral:linear-gradient(#fff, #f2f2f2); + --neutral-hover:linear-gradient(#f2f2f2, #ededed); + --neutral-active:#fff; + --text-neutral:#333; + --neutral-border:rgba(0, 0, 0, 0.1); + + --action:transparent; + --action-hover:rgba(0, 0, 0, 0.05); + --action-active:transparent; + --text-action:var(--text-color-black-high) +} +.mega-button.theme-dark,.theme-dark .mega-button,html .mega-button.theme-dark-forced,html .theme-dark-forced .mega-button{ + + --red:var(--surface-error); + --red-hover:var(--surface-error-hover); + --red-active:var(--surface-error-active); + --text-red:var(--text-color-white-high); + --red-border:hsla(0, 0%, 100%, 0.2); + + --green:var(--button-fill-positive); + --green-hover:var(--button-fill-positive-hover); + --green-active:var(--button-fill-positive-active); + --text-green:var(--text-color-white-high); + --green-border:hsla(0, 0%, 100%, 0.2); + + --blue:var(--button-fill-blue); + --blue-hover:var(--button-fill-blue-hover); + --blue-active:var(--button-fill-blue-active); + --text-blue:var(--text-color-white-high); + --blue-border:hsla(0, 0%, 100%, 0.2); + + --neutral:linear-gradient(180deg, #9f9f9f, #666); + --neutral-hover:linear-gradient(180deg, #afafaf, #787878); + --neutral-active:linear-gradient(180deg, #8c8c8c, #535353); + --text-neutral:var(--text-color-white-high); + --neutral-border:hsla(0, 0%, 100%, 0.1); + + --action:transparent; + --action-hover:hsla(0, 0%, 100%, 0.1); + --action-active:transparent; + --text-action:var(--text-color-white-high) +} +.mega-button{ + --horizontal-padding:8px; + --outer-padding:6px; + --border-width:2px; + --height:36px; + --mask-color:var(--icon-active) +} +.mega-button.small{ + --horizontal-padding:4px; + --outer-padding:4px; + --height:24px +} +.mega-button.large{ + --horizontal-padding:16px; + --outer-padding:8px; + --height:48px +} +.mega-button.round{ + --outer-padding:6px +} +.mega-button.small.round{ + --outer-padding:var(--border-width) +} +.mega-button.large.round{ + --outer-padding:8px +} +.mega-button.icon{ + --horizontal-padding:0; + --outer-padding:0; + --height:24px +} +.mega-button.small.icon{ + --horizontal-padding:0; + --outer-padding:0; + --height:16px +} +.mega-button.large.icon{ + --horizontal-padding:0; + --outer-padding:0; + --height:32px +} +.mega-button.branded-red,.mega-button.negative{ + --mask-color:var(--text-red) +} +.mega-button.branded-green,.mega-button.positive{ + --mask-color:var(--text-green) +} +.mega-button.branded-blue{ + --mask-color:var(--text-blue) +} +.mega-button.round{ + --outer-padding:6px +} +.mega-button.round.small{ + --outer-padding:2px +} + +div.radioOff,div.radioOn{ + -webkit-margin-end:12px; + border-radius:100%; + box-shadow:inset 0 0 0 1px var(--radio-border-inactive); + cursor:pointer; + display:inline-block; + height:18px; + margin:1px 0; + margin-inline-end:12px; + position:relative; + vertical-align:top; + width:18px +} +.objectstorage .register-radio-option1 div.radioOff,.objectstorage .register-radio-option1 div.radioOn,.objectstorage .register-radio-option2 div.radioOff,.objectstorage .register-radio-option2 div.radioOn,.objectstorage .register-radio-option3 div.radioOff,.objectstorage .register-radio-option3 div.radioOn,.objectstorage .register-radio-option div.radioOff,.objectstorage .register-radio-option div.radioOn{ + -webkit-margin-end:8px; + margin-inline-end:8px +} +.mobile .payment-type-wrapper div.radioOff,.mobile .payment-type-wrapper div.radioOn{ + margin-top:6px +} +div.radioOn{ + box-shadow:none +} +div.radioOff{ + background:var(--radio-fill-inactive) +} +div.radioOn:before{ + background:var(--radio-fill-active); + border-radius:100%; + content:""; + height:12px; + margin:3px; + position:absolute; + width:12px +} +div.radioOn:after{ + box-shadow:inset 0 0 0 1px var(--radio-border-active); + box-sizing:border-box; + height:100%; + width:100% +} +div.radioOff:after,div.radioOn:after{ + border-radius:100%; + content:""; + display:inline-block +} +div.radioOff:after{ + background:var(--radio-oval-fill); + height:4px; + margin:calc(50% - 2px); + width:4px +} +.objectstorage .register-radio-option1 div.radioOn:before,.objectstorage .register-radio-option2 div.radioOn:before,.objectstorage .register-radio-option3 div.radioOn:before,.objectstorage .register-radio-option div.radioOn:before{ + background:#3077f1 +} +.objectstorage .register-radio-option1 div.radioOn:after,.objectstorage .register-radio-option2 div.radioOn:after,.objectstorage .register-radio-option3 div.radioOn:after,.objectstorage .register-radio-option div.radioOn:after{ + box-shadow:inset 0 0 0 1px #3077f1 +} +.mobile .payment-type-wrapper div.radioOff:after,.mobile .payment-type-wrapper div.radioOn:after{ + vertical-align:top +} +div.radioOff.small,div.radioOn.small{ + height:16px; + width:16px +} +div.radioOff.small:before,div.radioOn.small:before{ + height:10px; + width:10px +} +.radioOff input,.radioOn input{ + cursor:pointer; + height:100%; + left:0; + margin:0; + opacity:0; + position:absolute; + top:0; + width:100%; + z-index:1 +} +.rtl .radioOff input,.rtl .radioOn input{ + left:auto; + right:0 +} +.radio-txt{ + -webkit-padding-end:28px; + box-sizing:border-box; + color:var(--text-color-medium); + display:inline-block; + max-width:calc(100% - 31px); + padding-inline-end:28px; + transition:.3s; + vertical-align:middle +} +.radio-txt,.radio-txt.small{ + font:var(--text-body1) +} +.radio-txt.big{ + font:var(--text-h3) +} +.radioOff input,.radioOn input{ + cursor:pointer; + height:100%; + margin:0; + opacity:0; + position:absolute; + width:100%; + z-index:1 +} +.chat-settings div.radioOff.card,.chat-settings div.radioOn.card{ + display:none +} +.chat-settings div.radioOn.chat{ + background:var(--surface-grey-1); + border:1px solid var(--secondary-green); + border-radius:10px; + height:110px; + width:100% +} +.chat-settings div.radioOff.chat{ + background:var(--surface-grey-1); + border:1px solid var(--surface-grey-2); + border-radius:10px; + box-shadow:none; + height:110px; + width:100% +} +.chat-settings div.radioOff.chat:after,.chat-settings div.radioOff.chat:before,.chat-settings div.radioOn.chat:after,.chat-settings div.radioOn.chat:before{ + display:none +} + +.mega-button{ + align-items:center; + border:none; + border-radius:4px; + box-sizing:border-box; + cursor:pointer; + display:inline-flex; + font:var(--text-body1); + justify-content:space-between; + line-height:24px; + min-height:var(--height); + min-width:64px; + outline:none; + padding:var(--outer-padding); + position:relative; + text-align:center; + transition:var(--transition-color), var(--transition-bg-color), var(--transition-shadow); + vertical-align:middle; + white-space:nowrap +} +.mega-button.small{ + line-height:16px; + min-width:auto +} +.mega-button.large{ + font:var(--text-h3); + line-height:32px; + min-width:96px +} +.mega-button.round{ + border-radius:50% +} +.mega-button.round,.mega-button.square{ + height:var(--height); + min-width:var(--height); + width:var(--height) +} +.mega-button.full-width{ + width:100% +} +.mega-button.action{ + padding:4px var(--outer-padding) +} +.mega-button.icon{ + height:var(--height); + min-width:var(--height); + padding:0 !important; + width:var(--height) +} +.merge-mega-button{ + align-items:center; + display:inline-flex +} +.merge-mega-button>:not(:first-child,:last-child){ + border-radius:0 +} +.merge-mega-button>:first-child>button,.merge-mega-button>button:first-child{ + border-radius:4px 0 0 4px +} +.rtl .merge-mega-button>:first-child>button,.rtl .merge-mega-button>button:first-child{ + border-radius:0 4px 4px 0 +} +.merge-mega-button>:last-child>button,.merge-mega-button>button:last-child{ + border-radius:0 4px 4px 0; + margin-left:-2px +} +.rtl .merge-mega-button>:last-child>button,.rtl .merge-mega-button>button:last-child{ + border-radius:4px 0 0 4px; + margin-right:-2px +} +.mega-button>span{ + display:inline-flex; + flex-grow:1; + justify-content:center; + margin:0 auto; + white-space:normal +} +.mega-button.large>div~span{ + text-align:start +} +.mega-button.align-flex-start span{ + justify-content:flex-start +} +.mega-button.align-flex-end span{ + justify-content:flex-end +} +.mega-button>div{ + align-items:center; + display:flex; + flex-grow:0; + height:0; + justify-content:center; + overflow:visible +} +.mega-button>div i{ + --icon-size:24px +} +.mega-button.small>div{ + width:16px +} +.mega-button.small>div i{ + --icon-size:16px +} +.mega-button.large>div{ + width:32px +} +.mega-button.large>div i{ + --icon-size:32px +} +.mega-button i{ + background-clip:content-box; + box-sizing:border-box; + display:block; + flex-shrink:0 +} +.mega-button>div{ + margin:0 auto +} +.mega-button>span{ + margin:0 var(--horizontal-padding) +} +.mega-button.large>div~span{ + -webkit-margin-start:12px; + margin-inline-start:12px +} +.mega-button.large>span~div{ + -webkit-margin-start:-4px; + margin-inline-start:-4px +} +.mega-button.disabled{ + cursor:default; + opacity:.3 +} +.mega-button{ + background:var(--neutral); + box-shadow:inset 0 0 0 var(--border-width) var(--neutral-border); + color:var(--text-neutral) +} +.mega-button.negative{ + background:var(--red); + box-shadow:inset 0 0 0 var(--border-width) var(--red-border); + color:var(--text-red) +} +.mega-button.positive{ + background:var(--green); + box-shadow:inset 0 0 0 var(--border-width) var(--green-border); + color:var(--text-green) +} +.mega-button.action{ + background:var(--action); + box-shadow:none; + color:var(--text-action); + min-width:0; + overflow:hidden; + text-overflow:ellipsis +} +.mega-button.branded-red{ + background:var(--red); + box-shadow:inset 0 0 0 var(--border-width) var(--red-border); + color:var(--text-red) +} +.mega-button.branded-green{ + background:var(--green); + box-shadow:inset 0 0 0 var(--border-width) var(--green-border); + color:var(--text-green) +} +.mega-button.branded-blue{ + background:var(--blue); + box-shadow:inset 0 0 0 var(--border-width) var(--blue-border); + color:var(--text-blue) +} +.mega-button:hover:not(.disabled){ + background:var(--neutral-hover) +} +.mega-button.negative:hover:not(.disabled){ + background:var(--red-hover) +} +.mega-button.positive:hover:not(.disabled){ + background:var(--green-hover) +} +.mega-button.action:hover:not(.disabled){ + background:var(--action-hover) +} +.mega-button.no-hover:hover{ + background:none !important +} +.mega-button.branded-red:hover:not(.disabled){ + background:var(--red-hover) +} +.mega-button.branded-green:hover:not(.disabled){ + background:var(--green-hover) +} +.mega-button.branded-blue:hover:not(.disabled){ + background:var(--blue-hover) +} +.mega-button:active:not(.disabled){ + background:var(--neutral-active) +} +.mega-button.negative:active:not(.disabled){ + background:var(--red-active) +} +.mega-button.positive:active:not(.disabled){ + background:var(--green-active) +} +.mega-button.action:active:not(.disabled){ + background:var(--action-active) +} +.mega-button.branded-red:active:not(.disabled){ + background:var(--red-active) +} +.mega-button.branded-green:active:not(.disabled){ + background:var(--green-active) +} +.mega-button.branded-blue:active:not(.disabled){ + background:var(--blue-active) +} + +.checkboxOff input[type=checkbox],.checkboxOn input[type=checkbox]{ + cursor:pointer; + margin:0; + opacity:0; + padding:0 +} +.checkboxOn{ + background:var(--checkbox-fill-active) +} +.checkboxOff{ + background:var(--checkbox-fill-inactive); + box-shadow:inset 0 0 0 1px var(--checkbox-border-inactive) +} +.checkboxOff,.checkboxOn{ + -webkit-margin-end:11px; + border-radius:3px; + box-sizing:border-box; + cursor:pointer; + display:inline-block; + height:16px; + margin-inline-end:11px; + position:relative; + vertical-align:middle; + width:16px; + z-index:1 +} +.checkboxOff.v-top,.checkboxOn.v-top{ + margin-top:6px; + vertical-align:top +} +.checkboxOff input,.checkboxOn input{ + display:block; + height:100%; + width:100% +} +.checkboxOff.small,.checkboxOn.small{ + height:14px; + margin:0 11px 0 0; + width:14px +} +.checkboxOn:before{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:-27px -1852px; + background-repeat:no-repeat; + content:""; + display:block; + height:100%; + position:absolute; + top:0; + width:100% +} +.small.checkboxOn:before{ + background-position:-35px -446px +} +.checkbox-block{ + display:flex +} +.checkbox-txt{ + -webkit-padding-end:28px; + box-sizing:border-box; + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body1); + max-width:calc(100% - 31px); + padding-inline-end:28px; + transition:.3s; + vertical-align:middle +} + +.media-viewer-container{ + height:100%; + left:0; + position:fixed; + top:0; + width:100%; + z-index:1000 +} +.media-viewer{ + background:var(--surface-black); + display:flex; + flex-direction:column; + height:100%; + margin:0 auto; + text-align:center +} +.media-viewer footer,.media-viewer header{ + display:flex; + flex:0 0 auto; + flex-direction:column; + position:relative +} +.media-viewer .viewer-bars{ + align-items:center; + background:var(--surface-grey-2); + box-sizing:border-box; + display:flex; + font-size:0; + line-height:0; + padding:6px 8px +} +.media-viewer .viewer-bars,.media-viewer .viewer-rounded{ + border:solid var(--stroke-black); + border-width:0 0 2px; + transition:var(--transition-all) +} +.media-viewer .viewer-rounded{ + background:var(--surface-black-bar); + border-radius:50%; + position:absolute; + right:24px; + top:24px +} +.media-viewer .viewer-bars.image-controls{ + bottom:0 +} +.media-viewer .bar{ + display:flex; + flex:0 0 200px; + justify-content:flex-start; + list-style:none; + margin:0; + padding:8px 0 +} +.media-viewer .bar.control,.media-viewer .bar:last-child{ + justify-content:flex-end +} +.media-viewer .bar>li{ + align-items:center; + display:inline-flex; + position:relative +} +.media-viewer button{ + --mask-color:var(--icon-rest); + -webkit-appearance:none; + appearance:none; + background:transparent; + border:0; + cursor:pointer; + outline:none +} +.media-viewer button.active,.media-viewer button:hover{ + --mask-color:var(--icon-active) +} +.media-viewer button.v-btn{ + border-radius:100%; + margin:6px 12px; + padding:0 +} +.media-viewer button.v-btn.active{ + background:var(--surface-grey-1) +} +.media-viewer button.v-btn i{ + --icon-size:24px; + display:block; + transition:var(--transition-bg-color) +} +.media-viewer button.v-btn.browserscreen{ + display:none +} +.media-viewer .file-info{ + flex:1 1 auto; + overflow:hidden; + text-align:center +} +.media-viewer .file-name{ + font:var(--text-h3); + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.media-viewer .counter,.media-viewer .file-name{ + color:var(--text-color-higher); + padding:2px 12px +} +.media-viewer .counter{ + background:var(--surface-main); + border-radius:12px; + display:inline-flex; + font:var(--text-body1) +} +.media-viewer .content{ + display:flex; + flex:1 1 auto; + height:100%; + justify-content:center; + overflow:hidden; + position:relative +} +.media-viewer button.gallery-btn{ + border-radius:4px; + left:0; + margin:-29px 20px 0; + padding:5px 0; + position:absolute; + top:50%; + transition:var(--transition-all); + z-index:10 +} +.media-viewer button.gallery-btn:hover{ + --mask-color:var(--icon-rest) +} +.media-viewer button.gallery-btn.next{ + left:auto; + right:0 +} +.media-viewer button.gallery-btn i{ + --icon-size:48px; + transition:var(--transition-bg-color) +} +.media-viewer .img-wrap{ + overflow:hidden; + position:relative; + width:100% +} +.media-viewer .img-wrap.picked{ + cursor:move +} +.media-viewer .img-wrap img,.media-viewer .img-wrap img[src=""].active{ + background:var(--image-background); + opacity:0; + position:absolute; + -webkit-transition:opacity 10ms ease-in-out; + transition:opacity 10ms ease-in-out +} +.media-viewer .img-wrap img.broken-eye,.media-viewer .img-wrap img.broken-eye[src=""].active{ + background:none +} +.slideshow .media-viewer .content img{ + -webkit-transition:opacity .9s ease-in-out; + transition:opacity .9s ease-in-out +} +.media-viewer .content img.active,.slideshow .media-viewer .content img.active{ + opacity:1 +} +.media-viewer .content embed,.media-viewer .content iframe{ + border:0; + height:auto; + width:100% +} +.media-viewer .image-controls{ + border-width:2px 0 0 +} +.media-viewer .image-controls .bar{ + padding:0 +} +.media-viewer .zoom-slider-wrap{ + align-items:center; + display:flex; + flex:1 1 auto; + justify-content:center +} +.media-viewer .ui-slider.ui-widget-content{ + background:var(--progress-bar-background); + border-radius:2px; + height:4px; + margin:0; + width:120px +} +.media-viewer .ui-slider .ui-slider-handle{ + -webkit-margin-start:-8px; + background:var(--surface-main-inverted); + background-clip:padding-box; + border:1px solid var(--switch-handle-border); + border-radius:100%; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .1); + box-sizing:initial; + height:16px; + margin:0; + margin-inline-start:-8px; + position:relative; + top:-7px; + width:16px +} +.media-viewer .ui-slider .ui-slider-range{ + background:var(--surface-main-inverted); + height:100%; + opacity:.5 +} +.media-viewer .ui-slider .ui-slider-handle .mv-zoom-slider,.media-viewer .ui-slider .ui-slider-handle .mv-zoom-slider-arrow{ + --mask-color:var(--surface-grey-1-inverted); + --icon-size:24px; + display:block; + left:50%; + opacity:0; + position:absolute; + top:-49px; + transform:translateX(-50%); + transition:opacity .3s ease-in-out +} +.media-viewer .ui-slider .ui-slider-handle .mv-zoom-slider-arrow{ + top:-21px +} +.media-viewer .ui-slider .ui-slider-handle:active .mv-zoom-slider,.media-viewer .ui-slider .ui-slider-handle:active .mv-zoom-slider-arrow,.media-viewer .ui-slider .ui-slider-handle:hover .mv-zoom-slider,.media-viewer .ui-slider .ui-slider-handle:hover .mv-zoom-slider-arrow{ + display:block; + opacity:1 +} +.slideshow .media-viewer .viewer-bars.slideshow-controls{ + background:var(--surface-black-bar); + border:0; + border-radius:32px; + bottom:100%; + left:50%; + margin-bottom:16px; + padding:16px; + position:absolute; + transform:translateX(-50%); + width:auto; + z-index:10 +} +.media-viewer .slideshow-controls button{ + display:inline-flex; + margin:0 6px; + padding:0 +} +.media-viewer .slideshow-controls button i{ + --icon-size:32px; + height:32px; + width:32px +} +.media-viewer .slideshow-controls .bar{ + display:inline-flex; + flex:auto; + padding:0 10px +} +.media-viewer .slideshow-controls-upper button{ + height:64px; + width:64px +} +.media-viewer .slideshow-controls-upper button i{ + --icon-size:32px; + height:32px; + width:32px +} +.media-viewer .context-menu.slideshow-context-settings{ + left:190px; + min-width:240px; + position:absolute; + top:-144px +} +.context-menu.slideshow-context-settings button i{ + --icon-size:24px; + height:24px; + width:24px +} +.context-menu.slideshow-context-settings button.disabled i:before{ + color:var(--text-color-medium) +} +.context-menu.slideshow-context-settings li{ + padding:2px 8px +} +.context-menu.slideshow-context-settings button{ + font-size:14px; + font-style:normal; + font-weight:400; + line-height:20px; + margin:0 0 2px; + padding:1px 6px +} +.context-menu.slideshow-context-settings button.active{ + color:var(--text-color-white-high) +} +.context-menu.slideshow-context-settings span.title{ + color:var(--text-color-white-high); + font-size:14px; + font-weight:700; + line-height:24px +} +.context-menu.slideshow-context-settings button.disabled:hover{ + background-color:var(--surface-main); + cursor:auto +} +.context-menu.slideshow-context-settings button span.current{ + color:var(--text-color-medium); + text-align:center; + width:32px +} +.context-menu.slideshow-context-settings button.icon-arrow-right-after:after{ + height:16px; + margin-left:10px; + width:16px +} +.context-menu.slideshow-context-settings li .message{ + color:var(--text-color-medium); + font-size:12px; + font-style:normal; + font-weight:700; + height:100%; + line-height:24px; + padding:1px 6px; + text-align:start; + width:90% +} +.context-menu.slideshow-context-settings li .switch-option{ + align-items:center; + box-sizing:border-box; + display:inline-flex; + margin:0 0 2px; + min-height:32px; + padding:1px 6px; + text-align:start; + width:100% +} +.context-menu.slideshow-context-settings li.disabled .switch-option .mega-switch,.context-menu.slideshow-context-settings li.disabled .switch-option .mega-switch .mega-feature-switch{ + cursor:auto +} +.context-menu.slideshow-context-settings li .switch-option span{ + width:calc(100% - 48px) +} +.context-menu.slideshow-context-settings li:last-child .message{ + height:30px; + margin-top:8px; + overflow:hidden +} +.video .media-viewer video{ + background:var(--surface-black); + background-position:50%; + background-repeat:no-repeat; + background-size:contain; + max-height:100%; + max-width:100%; + min-height:70% +} +.video-theatre-mode .media-viewer video{ + height:100%; + width:100% +} +.media-viewer .play-video-button{ + --mask-color:var(--text-color-high); + background:var(--progress-bar-fill1); + border-radius:100%; + cursor:pointer; + left:calc(50% - 18px); + position:absolute; + top:calc(50% - 18px); + z-index:10 +} +.media-viewer .play-video-button i{ + --icon-size:48px; + display:block; + margin:12px +} +.fullscreen .media-viewer .viewer-bars,.media-viewer .video-controls,.video-theatre-mode .media-viewer .viewer-bars{ + background:var(--surface-black-bar); + border:0; + position:absolute; + width:100%; + z-index:10 +} +.media-viewer .video-controls{ + bottom:0; + direction:ltr +} +.media-viewer .video-controls .bar{ + flex:0 0 auto +} +.media-viewer .video-progress-block{ + flex:1 1 auto +} +.media-viewer .video-progress-bar{ + background:var(--progress-bar-background); + border-radius:2px; + cursor:pointer; + height:2px; + margin:2px 0; + position:relative; + text-align:left; + transition:var(--transition-all) +} +.video-progress-block:hover .video-progress-bar{ + border-radius:3px; + height:6px; + margin:0 +} +.media-viewer .video-buffer-bar,.media-viewer .video-time-bar{ + background:var(--progress-bar-fill2); + border-radius:inherit; + height:100%; + left:0; + position:absolute; + top:0; + width:0 +} +.media-viewer .video-buffer-bar{ + background:var(--progress-bar-background) +} +.media-viewer .video-time-bar:before{ + background:var(--text-color-high); + border-radius:100%; + bottom:0; + box-shadow:0 1px 2px rgba(0, 0, 0, .1); + content:""; + height:12px; + margin:auto; + position:absolute; + right:-6px; + top:0; + width:12px +} +.media-viewer .video-timing{ + color:var(--text-color-high); + font:var(--text-body2); + margin:0 24px 0 36px +} +.media-viewer .video-timing.duration{ + margin:0 36px 0 24px +} +.media-viewer .video-controls progress::-moz-progress-bar{ + background:var(--progress-bar-fill2) +} +.media-viewer .video-controls progress::-webkit-progress-value{ + background:var(--progress-bar-fill2) +} +.media-viewer .video-vol-range{ + background:var(--progress-bar-background); + border-radius:10px; + bottom:100%; + height:0; + left:14px; + opacity:0; + overflow:hidden; + position:absolute; + transition:var(--transition-all); + visibility:hidden; + width:20px +} +.media-viewer .vol-wrapper.audio:hover .video-vol-range{ + height:80px; + opacity:1; + visibility:visible +} +.media-viewer .volume-bar{ + background:var(--surface-black-bar); + border-radius:2px; + cursor:pointer; + height:64px; + margin:8px; + position:relative; + width:4px +} +.media-viewer .volume-bar span{ + background:var(--progress-bar-fill2); + border-radius:inherit; + bottom:0; + height:100%; + left:0; + position:absolute; + width:100% +} +.media-viewer .volume-bar span:before{ + background:var(--text-color-high); + border-radius:100%; + box-shadow:0 1px 2px rgba(0, 0, 0, .1); + content:""; + height:8px; + left:-2px; + position:absolute; + top:-4px; + width:8px +} +.viewer-vad-control{ + background:var(--surface-black-bar); + border-radius:4px; + bottom:66px; + box-shadow:0 0 0 2px var(--text-color-medium); + color:var(--text-color-medium); + cursor:default; + height:48px; + margin:0 0 16px; + min-width:120px; + position:absolute; + right:12px; + text-align:center; + transition:var(--transition-all); + white-space:nowrap; + z-index:10 +} +.viewer-vad-control.skip{ + cursor:pointer +} +.viewer-vad-control.skip:hover{ + color:var(--text-color-high) +} +.viewer-vad-control .thumb{ + display:none; + float:right; + height:48px; + line-height:0; + overflow:hidden; + width:76px +} +.viewer-vad-control .thumb.active{ + display:block +} +.video .download.video-block .viewer-vad-control .thumb img,.viewer-vad-control .thumb img{ + display:block; + height:auto; + left:50%; + max-width:86px; + min-height:100%; + min-width:100%; + position:relative; + top:50%; + -webkit-transform:translate(-50%, -50%); + transform:translate(-50%, -50%) +} +.viewer-vad-control .counter{ + display:inline-block; + padding:0 10px +} +.viewer-vad-control .label,.viewer-vad-control.skip .counter,.viewer-vad-control.skip .thumb.active{ + display:none +} +.viewer-vad-control.skip .label{ + display:block; + padding:0 14px +} +.viewer-vad-control .label i{ + margin:14px -3px 0 11px; + opacity:.8; + transition:var(--transition-all) +} +.viewer-vad-control.skip:hover .label i{ + opacity:1 +} +.video-progress-bar.vad{ + background:var(--surface-black-bar); + border-radius:0; + bottom:0; + height:4px; + left:0; + opacity:0; + position:absolute; + transition:var(--transition-all); + visibility:hidden; + width:100%; + z-index:10 +} +.vad .video-buffer-bar,.vad .video-time-bar{ + background:var(--progress-bar-fill3) +} +.vad .video-progress-block:hover .video-progress-bar{ + cursor:default; + height:2px; + margin-top:2px +} +.vad .video-time-bar:before{ + display:none +} +.mouse-idle.fullscreen .media-viewer .gallery-btn,.mouse-idle.fullscreen:not(.context-menu-open) .viewer-bars,.mouse-idle.video-theatre-mode .viewer-bars,.mouse-idle.video .media-viewer .gallery-btn,.mouse-idle:not(.context-menu-open) .viewer-bars.slideshow-controls,.mouse-idle:not(.context-menu-open) .viewer-rounded.slideshow-controls-upper{ + opacity:0; + visibility:hidden +} +.mouse-idle .vad .video-progress-bar.vad,.vad.mouse-idle .video-progress-bar.vad{ + opacity:1; + visibility:visible +} +.mouse-idle{ + cursor:none !important +} +.vad.mouse-idle .viewer-vad-control{ + bottom:16px +} +.viewer-error-header{ + color:var(--text-color-high); + font:var(--text-h2) +} +.viewer-error-txt{ + color:var(--text-color-high); + padding:40px +} +.viewer-error-button{ + white-space:nowrap +} +.viewer-error-buttons div{ + color:var(--text-color-high); + display:inline-block; + font-size:14px; + line-height:28px; + margin:0 16px +} +.viewer-progress{ + background:var(--surface-black); + border-radius:100%; + bottom:14px; + height:36px; + overflow:hidden; + position:absolute; + right:14px; + transition:var(--transition-all); + visibility:visible; + width:36px; + z-index:10 +} +.viewer-progress ul{ + background:var(--progress-bar-background); + height:100%; + list-style-type:none; + margin:0; + padding:0; + position:relative; + width:100% +} +.viewer-progress ul:after{ + background:var(--surface-grey-1); + border-radius:100%; + content:""; + display:block; + height:28px; + left:4px; + overflow:hidden; + position:absolute; + top:4px; + width:28px +} +.viewer-progress ul li{ + height:36px; + margin:0; + padding:0; + position:absolute; + width:36px +} +.viewer-progress .right-c{ + clip:rect(0, 36px, 36px, 18px) +} +.viewer-progress .left-c{ + clip:rect(0, 18px, 36px, 0) +} +.viewer-progress p{ + height:36px; + margin:0; + width:36px +} +.viewer-progress span{ + background:var(--progress-bar-background); + display:block; + height:36px; + width:18px +} +.viewer-progress .right-c span{ + border-radius:18px 0 0 18px +} +.viewer-progress .left-c span{ + border-radius:0 18px 18px 0; + margin-left:18px +} +.exif-rotation-2{ + transform:rotateY(180deg) +} +.exif-rotation-3{ + transform:rotate(180deg) +} +.exif-rotation-4{ + transform:rotate(180deg) rotateY(180deg) +} +.exif-rotation-5{ + transform:rotate(270deg) rotateY(180deg); + transform-origin:top left +} +.exif-rotation-6{ + transform:translateY(-100%) rotate(90deg); + transform-origin:bottom left +} +.exif-rotation-7{ + transform:translateY(-100%) translateX(-100%) rotate(90deg) rotateY(180deg); + transform-origin:bottom right +} +.exif-rotation-8{ + transform:translateX(-100%) rotate(270deg); + transform-origin:top right +} diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3EB17D3547F71B9DAF1DE646C13AC99DBAF6B73 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3EB17D3547F71B9DAF1DE646C13AC99DBAF6B73 new file mode 100644 index 0000000..fc108ba Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3EB17D3547F71B9DAF1DE646C13AC99DBAF6B73 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3FD68F20EAE7E3CEBFCC582D5EB1425A377302A b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3FD68F20EAE7E3CEBFCC582D5EB1425A377302A new file mode 100644 index 0000000..3b1518c Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3FD68F20EAE7E3CEBFCC582D5EB1425A377302A differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3FD68F20EAE7E3CEBFCC582D5EB1425A377302A-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3FD68F20EAE7E3CEBFCC582D5EB1425A377302A-blob new file mode 100644 index 0000000..fcd3998 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B3FD68F20EAE7E3CEBFCC582D5EB1425A377302A-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B423A2CAB850D8AB862D2963588435B69F07FE32 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B423A2CAB850D8AB862D2963588435B69F07FE32 new file mode 100644 index 0000000..2af5147 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B423A2CAB850D8AB862D2963588435B69F07FE32 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B4C5920F467FD93BEC087CFC8CF8B2D84802DB65 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B4C5920F467FD93BEC087CFC8CF8B2D84802DB65 new file mode 100644 index 0000000..2c69d45 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B4C5920F467FD93BEC087CFC8CF8B2D84802DB65 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B4C5920F467FD93BEC087CFC8CF8B2D84802DB65-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B4C5920F467FD93BEC087CFC8CF8B2D84802DB65-blob new file mode 100644 index 0000000..5dc2ae5 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/B4C5920F467FD93BEC087CFC8CF8B2D84802DB65-blob @@ -0,0 +1,415 @@ +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
              "],col:[2,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("\n'},useData:!0})}),define("core/views/TwitterRichMediaView",["underscore","core/views/DynamicHeightRichMediaView","core/templates/postMediaTwitterContent"],function(a,b,c){"use strict";var d=b.extend({generateContentHtml:function(){var b=window.document.documentElement.lang;b=b&&b.substring(0,2);var e=this.media.get("url");return this.media.get("resolvedUrl").indexOf("/status")!==-1&&(e=this.media.get("resolvedUrl")),c({url:e,theme:a.result(d,"theme"),linkColor:a.result(d,"linkColor"),language:b})}},{theme:"light",linkColor:"#2e9fff"});return d}),define("core/views/SoundCloudRichMediaView",["core/views/AutoplayRichMediaView"],function(a){"use strict";return a.extend({getMediaDimensions:function(){return{width:null,height:this.media.get("htmlHeight")}}})}),define("core/views/VineRichMediaView",["core/views/AutoplayRichMediaView","core/utils"],function(a,b){"use strict";return a.extend({createContentNode:function(){var c=a.prototype.createContentNode.apply(this,arguments),d=c.attr("src");return this.shouldAutoplay()&&d&&(d=b.serialize(d,{audio:1}),c.attr("src",d)),c}})}),define("core/views/IframeGifRichMediaView",["core/views/IframeRichMediaView"],function(a){"use strict";return a.extend({insertContentNode:function(b){a.prototype.insertContentNode.call(this,b),this.loaderNode.width(this.getMediaDimensions().width)},createContentNode:function(){var b=a.prototype.createContentNode.apply(this,arguments);return b.attr(this.getMediaDimensions()),b},calculateDeferredHeight:function(){return this.getMediaDimensions().height},displayPlaceholder:function(){a.prototype.displayPlaceholder.call(this);var b=this.getMediaDimensions();this.contentNode.height(b.height).width(b.width)}})}),define("core/media",["underscore","core/strings","core/models/Media","core/models/RichMediaViewModel","core/views/ImageRichMediaView","core/views/IframeRichMediaView","core/views/FacebookPhotoRichMediaView","core/views/AutoplayRichMediaView","core/views/TwitterRichMediaView","core/views/SoundCloudRichMediaView","core/views/VineRichMediaView","core/views/IframeGifRichMediaView"],function(a,b,c,d,e,f,g,h,i,j,k,l){"use strict";var m=b.get,n={PLAY_HIDE:{kind:"html",providerExpandMessage:m("Play"),providerCollapseMessage:m("Hide")},VIEW_HIDE:{kind:"html",providerExpandMessage:m("View"),providerCollapseMessage:m("Hide")},VIEW_IMAGE:{kind:"image",providerIcon:"icon-images",providerExpandMessage:m("View"),providerCollapseMessage:m("Hide")}},o=function(b){var m=function(b,c){return a.defaults({providerIcon:c},n[b])},o=null,p=null,q=c.MEDIA_TYPES;switch(b.get("mediaType")){case q.IMAGE:case q.IMAGE_UPLOAD:o=n.VIEW_IMAGE;break;case q.FACEBOOK_PHOTO:p=g,o=n.VIEW_IMAGE;break;case q.GIF_VIDEO:p=l,o=n.VIEW_HIDE;break;case q.VIMEO_VIDEO:case q.YOUTUBE_VIDEO:p=h,o=m("PLAY_HIDE","icon-video");break;case q.TWITTER_STATUS:p=i,o=m("VIEW_HIDE","icon-twitter");break;case q.VINE_VIDEO:p=k,o=m("PLAY_HIDE","icon-video");break;case q.FACEBOOK_VIDEO:o=m("VIEW_HIDE","icon-video");break;case q.SOUNDCLOUD_SOUND:p=j,o=m("PLAY_HIDE","icon-music");break;case q.GOOGLE_MAP:o=m("VIEW_HIDE","icon-map");break;default:return null}if(null===p)switch(o.kind){case"webpage":return null;case"html":p=f;break;case"image":p=e}var r=new d(o);return{Cls:p,mediaViewModel:r}},p=function(a){var b=o(a);return b?new b.Cls({model:b.mediaViewModel,media:a}):null},q=function(a){return new e({model:new d(n.VIEW_IMAGE),media:a})};return{instantiateRichMediaView:p,instantiateRichMediaThumbnail:q,getRichMediaViewConfig:o}}),define("core/mixins/withRichMedia",["underscore","jquery","core/collections/MediaCollection","core/media"],function(a,b,c,d){"use strict";function e(a){var c={};return a.length?(a.find("a").each(function(a,d){var e=d.href;c[e]||(c[e]=b(d))}),c):c}function f(){a.extend(this,g)}var g={renderRichMedia:function(a,f,g){return g=g||{},a=a instanceof c?a:new c(a),a.chain().map(function(a){return d.instantiateRichMediaView(a)}).without(null).map(function(a){var c=a.media.get("urlRedirect");g.normalize&&(c=g.normalize.call(this,c));var d=e(this.$("[data-role=message]")),h=d[c];return g.beforeRender&&g.beforeRender.call(this,a),a.render(),h?g.convertLinkToButton?(h.after(a.$el),a.convertToButton(h)):h.replaceWith(a.$el):(f=f||this.$("[data-role=post-media-list]"),f.append(b("
            • ").append(a.$el))),a},this).value()}};return f}),define("core/views/common/HoverCard",["jquery","underscore","backbone","core/bus"],function(a,b,c,d){"use strict";var e=c.View.extend({events:{mouseenter:"enter",mouseleave:"leave"},initialize:function(){this._id=b.uniqueId(),this._rendered=!1,this._hoverState="out",this._visible=!1,this._enterTimeout=null,this._leaveTimeout=null,e.open={},this.events=this.events||{},this.events["click [data-action=profile]"]="handleShowProfile",this.listenTo(this,"authenticating",this.keepOpen)},render:function(){return this.hide(),a("body").append(this.el),this},target:function(a){a.on("mouseenter",b.bind(this.enter,this,a)),a.on("mouseleave",b.bind(this.leave,this))},enter:function(a){var c=this;a.originalEvent&&(a=null),a&&(c.$target=a),c._leaveTimeout&&clearTimeout(c._leaveTimeout),"in"!==c._hoverState&&(c._hoverState="in",c._enterTimeout=b.delay(function(){"in"===c._hoverState&&c.show(),c._enterTimeout=null},e.DELAY_ENTER),e.open[this.uid]=this)},leave:function(){var a=this;a._enterTimeout&&clearTimeout(a._enterTimeout),"out"!==a._hoverState&&(a._hoverState="out",a._leaveTimeout=b.delay(function(){"out"===a._hoverState&&a.hide(),a._leaveTimeout=null},e.DELAY_LEAVE),e.open[this.uid]&&delete e.open[this.uid])},show:function(){var a=this;a._rendered||(a._rendered=!0,a.render()),a.moveTo(a.$target),a.$el.show(),a._visible=!0,a.trigger("show")},moveTo:function(a){if(a){var b=e.POSITION_OFFSET,c=a.offset(),d=this.$el,f=d.height(),g=this.getContainerPosition();c.top-=b;var h=c.top+f+g.containerOffset.top,i=g.pageOffset+g.containerHeight;h<=i?d.css("top",c.top):d.css("top",c.top-f+2*b),d.css("left",c.left+b)}},getContainerPosition:function(){return{pageOffset:a(window).scrollTop(),containerOffset:{top:0,height:a(window).height()},containerHeight:a(window).height()}},hide:function(){this._keepOpen||(this._enterTimeout&&clearTimeout(this._enterTimeout),this.$el.hide(),this._visible=!1)},keepOpen:function(){this._keepOpen=!0,this.setupKeepOpenCanceler()},setupKeepOpenCanceler:function(){var c=this,e=function(){"out"===c._hoverState&&(c.stopListening(d,"window.click",e),a("body").off("click",e),c._keepOpen=!1,c.hide())};b.delay(function(){c.listenTo(d,"window.click",e),a("body").on("click",e)},100)},isVisible:function(){return this._visible},handleShowProfile:function(){this.hide()}},{open:{},instances:{},DELAY_ENTER:350,DELAY_LEAVE:175,POSITION_OFFSET:20,exitAll:function(){b.invoke(e.open,"leave")},create:function(a,b,c,d){var f=e.instances[c];f||(e.instances[c]=f={});var g=f[a];return g||(g=new d(b),f[a]=g),b.targetElement&&g.target(b.targetElement),g}});return function(){a(window.document).on("mouseout",b.debounce(function(a){var b=a.relatedTarget||a.toElement;b&&"HTML"!==b.nodeName||e.exitAll()},10))}(),e}),define("core/utils/views",["underscore"],function(a){"use strict";var b=function(b,c,d){var e=b.prototype,f=a.extend({},c,d);if(a.defaults(e,f),a.defaults(e.events,f.events),void 0!==e.initialize&&void 0!==f.initialize){var g=e.initialize;e.initialize=function(){var a=g.apply(this,arguments);return f.initialize.apply(this,arguments),a}}};return{mixin:b}}),define("core/views/common/mixins/LocalScroll",[],function(){"use strict";var a={events:{mousewheel:"handleScrollEvent",wheel:"handleScrollEvent"},scrollMeasureSelector:"",getScrollMeasure:function(){return this.scrollMeasure||(this.scrollMeasure=this.$el,this.scrollMeasureSelector&&(this.scrollMeasure=this.$el.find(this.scrollMeasureSelector))),this.scrollMeasure},handleScrollEvent:function(a){var b=a.originalEvent,c=b.wheelDeltaY||-b.deltaY,d=this.$el,e=d.height(),f=this.getScrollMeasure(),g=f.height(),h=f.parent()[0].scrollTop,i=h>=g-e,j=0===h;(i&&c<0||j&&c>0)&&a.preventDefault()}};return a}),define("core/templates/usersCard",["handlebars","core/templates/handlebars.partials","core/extensions/handlebars.helpers"],function(a){return a.template({1:function(a,b,c,d,e){return"guests-only"},3:function(a,b,c,d,e){return"tooltip--post-refresh"},5:function(a,b,c,d,e,f,g){var h,i=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return null!=(h=i(c,"each").call(null!=b?b:a.nullContext||{},null!=b?i(b,"users"):b,{name:"each",hash:{},fn:a.program(6,e,0,f,g),inverse:a.noop,data:e,loc:{start:{line:5,column:0},end:{line:7,column:9}}}))?h:""},6:function(a,b,c,d,e,f,g){var h,i=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return null!=(h=a.invokePartial(i(d,"cardUser"),b,{name:"cardUser",hash:{isRefreshEnabled:null!=g[1]?i(g[1],"isRefreshEnabled"):g[1],forumId:null!=g[1]?i(g[1],"forumId"):g[1],highlight:null!=g[1]?i(g[1],"highlight"):g[1]},data:e,helpers:c,partials:d,decorators:a.decorators}))?h:""},8:function(a,b,c,d,e){return"tooltip-point--refresh"},compiler:[8,">= 4.3.0"],main:function(a,b,c,d,e,f,g){var h,i=null!=b?b:a.nullContext||{},j=a.lookupProperty||function(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};return'
              \n
              \n
                \n'+(null!=(h=j(c,"if").call(i,null!=(h=null!=b?j(b,"users"):b)?j(h,"length"):h,{name:"if",hash:{},fn:a.program(5,e,0,f,g),inverse:a.noop,data:e,loc:{start:{line:4,column:0},end:{line:8,column:7}}}))?h:"")+'
              \n
              \n
              \n\n'},usePartial:!0,useData:!0,useDepths:!0})}),define("core/views/UsersCard",["jquery","underscore","handlebars","core/config","core/bus","core/utils/views","core/switches","core/utils","core/views/common/HoverCard","core/views/common/mixins/LocalScroll","core/templates/usersCard"],function(a,b,c,d,e,f,g,h,i,j,k){"use strict";var l=function(a){return a.get("isAnonymous")||a.get("isBlocked")},m=i.extend({guestTextPartialName:"cardOtherUserText",initialize:function(a){this.isRefreshEnabled=a.isRefreshEnabled,this.$el.attr("class",this.isRefreshEnabled?"tooltip-outer voters-outer voters-outer--refresh":"tooltip-outer voters-outer"),i.prototype.initialize.call(this,a),this.collection=this.collection||a.collection,this.session=a.session,this.numUsers=a.numUsers,this.voteType=a.voteType,this.listenTo(this.collection,"add",this.addUser),this.listenTo(this.collection,"change:isBlocked",this.render),this.listenTo(this.collection,"remove",this.removeUser),this.listenTo(this.collection,"reset",this.render)},addUser:function(a){l(a)?this.updateGuests():this.$listEl&&this.$listEl.length&&(this.$listEl.prepend(c.partials.cardUser(this.getUserTemplateData(a))),this.stopHighlightUsername())},removeUser:function(a){if(l(a))this.updateGuests();else{var b=this.$el.find("[data-username="+a.get("username")+"]");b.length&&b.remove()}},stopHighlightUsername:b.debounce(function(){var a=this.$el.find(".highlight");a.removeClass("highlight")},1100),getGuestCount:function(){return Math.max(this.numUsers-this.collection.reject(l).length,0)},updateGuests:function(){var a=this.$el.find("[data-role=guest]"),b=this.getGuestCount(),e=c.partials[this.guestTextPartialName]({guestCount:b}),f={guestCount:b,guestAvatarUrl:d.urls.avatar.generic,highlight:a.length,guestText:e,isRefreshEnabled:this.isRefreshEnabled},g=c.partials.cardGuestUser(f);a.length?(a.replaceWith(g),this.stopHighlightUsername()):this.$listEl&&this.$listEl.length&&this.$listEl.append(g)},getTemplateData:function(){var a=b.invoke(this.collection.reject(l),"toJSON").map(function(a){return a.initials=h.getInitials(a.name||""),a});return{users:a,highlight:!1,isRefreshEnabled:this.isRefreshEnabled}},getUserTemplateData:function(a){var c=a.toJSON();return c.initials=h.getInitials(c.name||""),b.extend({highlight:!0,isRefreshEnabled:this.isRefreshEnabled},c)},render:function(){delete this.pointEl,this.$el.html(k(this.getTemplateData())),i.prototype.render.call(this),this.$listEl=this.$el.find(".voters ul"),this.updateGuests()},show:function(){this.numUsers&&!this.isVisible()&&(i.prototype.show.call(this),e.trigger("uiAction:userCardShow"))},showPoint:function(a){var c=["tl","bl"],d=this.$el.find(".tooltip--post-refresh"),e=this.$el.find(".tooltip-wrapper");this.pointEl||(this.pointEl=this.$el.find(".tooltip-point"),this.pointEl.removeClass("hidden")),b.each(c,function(a){this.pointEl.removeClass("point-position-"+a),d.removeClass("tooltip--"+a),e.removeClass("tooltip-wrapper--"+a)},this),this.pointEl.addClass("point-position-"+a),d.addClass("tooltip--"+a),e.addClass("tooltip-wrapper--"+a)},moveTo:function(a,b){if(a){var c=i.POSITION_OFFSET,d=a.offset(),e=this.$el,f=e.height(),g=this.getContainerPosition();b&&(f+=e.find("li.user").height()+10),d.top-f-c>=0&&d.top-f+g.containerOffset.top>=g.pageOffset?(e.css({bottom:g.containerOffset.height-d.top+c,top:"inherit"}),this.showPoint("bl")):(e.css({bottom:"inherit",top:d.top+2*c}),this.showPoint("tl")),e.css("left",d.left-c)}},handleShowProfile:function(b){i.prototype.handleShowProfile.call(this,b);var c=a(b.currentTarget),d=c.attr("data-username");e.trigger("uiCallback:showProfile",d,b)}},{create:function(a,b){return i.create(a,b,"UsersCard",m)}});return f.mixin(m,j,{scrollMeasureSelector:"[data-role=content]"}),m}),define("core/views/VotersCard",["underscore","core/views/common/HoverCard","core/views/UsersCard","core/switches","core/utils"],function(a,b,c,d,e){"use strict";var f=e.preventDefaultHandler,g=c.extend({guestTextPartialName:"cardGuestVoterText",initialize:function(b){this.voteType=b.voteType;var d=b.model,e=1===this.voteType?d.getUpvotersUserCollection():d.getDownvotersUserCollection();a.extend(b,{collection:e,numUsers:1===this.voteType?d.get("likes"):d.get("dislikes")}),c.prototype.initialize.call(this,b),this.model=d,this.session=b.session,this.likes=d.get("likes"),this.dislikes=d.get("dislikes"),this.hadLikes=Boolean(this.likes),this.hadDislikes=Boolean(this.dislikes), +this.isRefreshEnabled=b.isRefreshEnabled,this._fetched=!1,this._rendered=!1,this.listenTo(this.model,"change:userScore",this.updateUserSet),1===this.voteType?this.listenTo(this.model,"change:likes",this.updateGuests):this.listenTo(this.model,"change:dislikes",this.updateGuests)},updateGuests:function(){this.numUsers=(1===this.voteType?this.model.get("likes"):this.model.get("dislikes"))||0,c.prototype.updateGuests.call(this)},updateUserSet:function(){var a=this.session.user,b=this.likes,c=this.dislikes,d=!1;this.likes=this.model.get("likes"),this.dislikes=this.model.get("dislikes"),this.model.get("userScore")===this.voteType?(this.session.isLoggedIn()&&this.collection.add(a),1===this.voteType&&this.likes&&!b||this.voteType===-1&&this.dislikes&&!c?(this._rendered=!1,this.show()):d=!!this.session.isLoggedOut()||Boolean((1===this.voteType?this.likes:this.dislikes)-1-this.collection.length)):(this.collection.remove(a),(1===this.voteType&&!this.likes||this.voteType===-1&&!this.dislikes)&&this.hide()),this.updateGuests(),this.moveTo(this.$target,d)},show:function(){if(this.isRefreshEnabled&&(b.prototype.constructor.POSITION_OFFSET=12),!(1===this.voteType&&!this.likes||this.voteType===-1&&!this.dislikes||this.isVisible())){if((1===this.voteType&&!this.hadLikes||this.voteType===-1&&!this.hadDislikes)&&(this._fetched=!0),!this._fetched)return void this.collection.fetch({vote:this.voteType}).done(a.bind(function(){this._fetched=!0,this.show()},this));var d=this.session.user;this.model.get("userScore")===this.voteType&&this.session.isLoggedIn()&&!this.collection.contains(d)&&this.collection.add(d),c.prototype.show.call(this)}},handleShowProfile:f(function(a){c.prototype.handleShowProfile.call(this,a)}),getTemplateData:function(){var b=c.prototype.getTemplateData.apply(this,arguments);return a.extend({},b,{forumId:this.model.get("forum")})},getUserTemplateData:function(){var b=c.prototype.getUserTemplateData.apply(this,arguments);return a.extend({},b,{forumId:this.model.get("forum")})}},{create:function(a){var c=a.model;if(c.has("id"))return b.create([c.get("id"),"-",a.voteType].join(""),a,"VotersCard",g)}});return g}),define("templates/lounge/contextCard",["react","core/strings","core/utils/object/get","core/utils","core/switches","templates/lounge/partials/profileLink"],function(a,b,c,d,e,f){"use strict";var g=b.gettext,h=d.getInitials,i=function(b){var d=e.isFeatureActive("embed_refresh",{forum:b.post.forum}),f=!c(b.post,["author","avatar","isCustom"]);return f&&d?a.createElement("div",{className:"initials user--refresh"},h(b.post.author.name)):a.createElement("img",{src:c(b.post,["author","avatar","cache"],""),className:"user",alt:g("Avatar")})},j=function(b){var d=e.isFeatureActive("embed_refresh",{forum:b.post.forum}),g=d?"avatar avatar--refresh":"avatar",h=d?"tooltip tooltip--post-refresh":"tooltip";return a.createElement("div",{className:h},a.createElement("div",{className:"notch"}),c(b.post,["author","isAnonymous"])?a.createElement("div",{className:g},a.createElement(i,{post:b.post})):a.createElement(f,{className:g,user:c(b.post,["author"]),forumId:b.post.forum},a.createElement(i,{post:b.post})),a.createElement("div",{className:"tooltip__content"},a.createElement("h3",null,c(b.post,["author","isAnonymous"])?a.createElement("h3",null,c(b.post,["author","name"],null)):a.createElement(f,{user:c(b.post,["author"]),forumId:b.post.forum},a.createElement("h3",null,c(b.post,["author","name"],null)))),a.createElement("p",null,c(b.post,["excerpt"],null))))};return j}),define("templates/lounge/partials/followButtonSmall",["react","core/config/urls","core/strings","core/utils/object/get","core/switches"],function(a,b,c,d,e){"use strict";var f=c.gettext,g=function(c){var g=e.isFeatureActive("embed_refresh",{forum:c.forumId});return d(c.user,["isSession"])?d(c.user,["isEditable"])?g?a.createElement("a",{href:b.editProfile||"",target:"_blank",className:c.buttonAsLink?"publisher-anchor-color follow-link hover-card":"follow-btn btn-small hover-card edit"},f("Edit")):a.createElement("a",{href:b.editProfile||"",target:"_blank",className:c.buttonAsLink?"publisher-anchor-color follow-link":"btn btn-small"},f("Edit profile")):null:d(c.user,["isPrivate"])?g?null:a.createElement("span",{className:"btn btn-small follow-btn private"},a.createElement("i",{"aria-hidden":"true",className:"icon-lock"})," ",a.createElement("span",{className:"btn-text"},f("Private"))):g?a.createElement("a",{href:d(c.user,["profileUrl"],""),className:""+(c.buttonAsLink?"publisher-anchor-color follow-link":"btn btn-small follow-btn hover-card")+(d(c.user,["isFollowing"])?" following":""),"data-action":"toggleFollow","data-user":d(c.user,["id"],""),target:"_blank",rel:"noopener noreferrer"},a.createElement("span",{className:"btn-text following-text hover-card"},a.createElement("span",{className:"follow-user is-following publisher-background-color-refresh"})),a.createElement("span",{className:"btn-text follow-text"},a.createElement("span",{className:"follow-user publisher-background-color-refresh hover-card"}))):a.createElement("a",{href:d(c.user,["profileUrl"],""),className:""+(c.buttonAsLink?"publisher-anchor-color follow-link":"btn btn-small follow-btn")+(d(c.user,["isFollowing"])?" following":""),"data-action":"toggleFollow","data-user":d(c.user,["id"],""),target:"_blank",rel:"noopener noreferrer"},a.createElement("span",{className:"btn-text following-text"},f("Following")),a.createElement("span",{className:"btn-text follow-text"},f("Follow")),a.createElement("i",{"aria-hidden":"true",className:"icon-checkmark"}))};return g}),define("templates/lounge/partials/hovercardActions",["react","core/strings","core/switches","templates/lounge/partials/followButtonSmall","templates/lounge/partials/profileLink"],function(a,b,c,d,e){"use strict";var f=b.gettext,g=function(b){var g=c.isFeatureActive("embed_refresh",{forum:b.forumId});return g?a.createElement("div",null,b.showFollowButton?a.createElement(d,{user:b.user,buttonAsLink:b.buttonAsLink,forumId:b.forumId}):null):a.createElement("div",null,a.createElement(e,{user:b.user,forumId:null,className:"full-profile"},f("Full profile")),b.showFollowButton?a.createElement(d,{user:b.user,buttonAsLink:b.buttonAsLink}):null," ")};return g}),define("templates/lounge/partials/hovercardCounters",["react","core/strings","core/utils/object/get","core/switches"],function(a,b,c,d){"use strict";var e=b.gettext,f=function(b){var f=d.isFeatureActive("embed_refresh",{forum:b.forumId});return f?a.createElement("div",{className:"hovercard-counters-container"},a.createElement("div",{className:"counters"},a.createElement("span",{className:"count comment"}),1===c(b.user,["numPosts"])?"1":b.user.numPosts),a.createElement("div",{className:"counters"},a.createElement("span",{className:"count like"}),1===c(b.user,["numLikesReceived"])?"1":b.user.numLikesReceived)):a.createElement("div",null,1===c(b.user,["numPosts"])?e("1 comment"):e("%(numPosts)s comments",{numPosts:c(b.user,["numPosts"],"")})," ",a.createElement("span",{className:"bullet"},"•")," ",1===c(b.user,["numLikesReceived"])?e("1 vote"):e("%(numLikesReceived)s votes",{numLikesReceived:c(b.user,["numLikesReceived"],"")}))};return f}),define("templates/lounge/hovercard",["react","core/strings","core/switches","core/utils/object/get","core/utils","templates/lounge/partials/hovercardActions","templates/lounge/partials/hovercardCounters","templates/lounge/partials/profileLink"],function(a,b,c,d,e,f,g,h){"use strict";var i=b.gettext,j=e.getInitials,k=function(b,c){return b.length<=c?b:a.createElement("span",null,b.slice(0,c),"…")},l=function(b){var e=c.isFeatureActive("embed_refresh",{forum:b.forumId}),l=d(b.user,["isPrivate"]),m=d(b.user,["avatar","isCustom"])?d(b.user,["avatar","cache"],""):b.forumAvatar;return e?a.createElement("div",{className:"tooltip tooltip--refresh"},a.createElement(h,{user:b.user,forumId:b.forumId,className:"avatar avatar--refresh"},m?a.createElement("img",{"data-user":d(b.user,["id"],""),"data-role":"user-avatar",src:m,className:"user user--refresh",alt:i("Avatar")}):a.createElement("div",{className:"initials user--refresh"},j(b.user.name)),l?a.createElement("div",{className:"view-profile-message-container"},a.createElement("i",{"aria-hidden":"true",className:"icon-lock"}),a.createElement("div",null,"Private")):a.createElement("div",{className:"view-profile-message-container"},a.createElement("div",null,"View"),a.createElement("div",null,"Profile"))),a.createElement("div",{className:"tooltip__content tooltip__content--refresh"},a.createElement("h3",{className:"profile-link-container"},a.createElement("div",{className:"profile-link-username"},a.createElement(h,{user:b.user,forumId:null,"data-role":"username"},d(b.user,["name"],null))),a.createElement("div",{className:"tooltip__actions","data-role":"actions"},a.createElement(f,{user:b.user,buttonAsLink:b.buttonAsLink,showFollowButton:b.showFollowButton,forumId:b.forumId}))),a.createElement("p",{className:"stats stats--refresh","data-role":"counters"},null!==d(b.user,["numPosts"],null)&&null!==d(b.user,["numLikesReceived"],null)?a.createElement(g,{user:b.user}):null))):a.createElement("div",{className:"tooltip"},a.createElement("div",{className:"notch"}),a.createElement(h,{user:b.user,forumId:null,className:"avatar"},a.createElement("img",{"data-user":d(b.user,["id"],""),"data-role":"user-avatar",src:d(b.user,["avatar","cache"],""),className:"user",alt:i("Avatar")})),a.createElement("div",{className:"tooltip__content"},a.createElement("h3",null,a.createElement(h,{user:b.user,forumId:null,"data-role":"username"},d(b.user,["name"],null))," ",d(b.user,["thread","canModerate"])?a.createElement("span",{className:"badge moderator"},i("MOD")):null),d(b.user,["about"])?a.createElement("p",{className:"bio"},k(d(b.user,["about"],""),80)):null,a.createElement("p",{className:"stats","data-role":"counters"},null!==d(b.user,["numPosts"],null)&&null!==d(b.user,["numLikesReceived"],null)?a.createElement(g,{user:b.user}):null),a.createElement("div",{className:"hovercard-badges","data-role":"hovercard-badges"})),a.createElement("footer",{className:"tooltip__footer","data-role":"actions"},a.createElement(f,{user:b.user,buttonAsLink:b.buttonAsLink,showFollowButton:b.showFollowButton})))};return l}),define("templates/lounge/upgradeCard",["react","core/strings","core/utils/object/get"],function(a,b,c){"use strict";var d=b.gettext,e=function(b){return a.createElement("div",{className:"tooltip"},a.createElement("div",{className:"notch"}),a.createElement("div",null,a.createElement("p",{className:"text-normal"},d("Disqus Pro gives you access to exclusive features like auto-moderation, shadow banning, and customization options.")),a.createElement("a",{href:["https://disqus.com/admin/",b.organization?"orgs/"+c(b.organization,["id"])+"/"+c(b.organization,["slug"],"sites")+"/":"","settings/subscription/"].join(""),target:"_blank",rel:"noopener noreferrer",className:"btn btn-small","data-role":"upgrade-link"},d("Subscriptions and Billing"))))};return e}),define("templates/lounge/partials/userBadges",["react","core/bus","templates/lounge/partials/profileLink"],function(a,b,c){"use strict";var d=function(b){var d=b.badge,e=b.user,f=b.forumId,g=b.context,h=b.trackClick,i=b.postId;return d.image?a.createElement(c,{user:e,forumId:f,profileTab:"badges",id:g+"-badge_"+e.id+"-"+d.id+"-"+i,className:"user-badge badge-tooltip__wrapper","data-role":"user-badge","data-badge":d.id,onClick:function(a){return h(a,d.id)},tabIndex:0},a.createElement("img",{className:"user-badge-image",src:d.image,alt:d.name}),a.createElement("div",{className:"badge-tooltip__container"},a.createElement("div",{className:"tooltip show badge-tooltip"},a.createElement("span",{className:"badge-tooltip__content"},d.name)))):null},e=function(a,b){return b.badges?b.badges.filter(function(b){return a.badges[b.id]}):[]},f=function(f){var g=f.forum,h=f.user,i=f.context,j=f.limit,k=f.postId;if(!(g.settings.badgesEnabled&&g.badges&&Object.keys(g.badges).length&&h))return null;var l=e(g,h),m=function(a,c){b.trigger("uiAction:clickBadge",a,c)},n=l.length>j,o=n?j-1:j;return l.length?a.createElement("span",{"data-role":"badges",className:"user-badges-collection","data-tracking-area":i},l.map(function(b,c){return c").attr({frameBorder:0,scrolling:"no",width:"100%",height:this.model.get("deferredHeight"),"data-src":b,src:'javascript:window.frameElement.getAttribute("data-src");'})},insertContentNode:function(a){c.prototype.insertContentNode.apply(this,arguments);var d=this.model.get("deferredHeight")||b.get("defaultIframeHeight");a.height(d)}})}),define("lounge/views/media",["underscore","stance","core/utils","core/utils/storage","core/utils/html/toHexColorString","core/media","core/mediaConfig","core/models/RichMediaViewModel","core/views/RichMediaLinkView","core/views/RichMediaView","core/views/IframeRichMediaView","core/views/SoundCloudRichMediaView","core/views/AutoplayRichMediaView","core/views/SourcelessIframeRichMediaView","core/views/DynamicHeightRichMediaView","core/views/TwitterRichMediaView","core/views/ImageRichMediaView","core/views/FacebookPhotoRichMediaView","core/views/VineRichMediaView","lounge/common"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){"use strict";function u(){var b=d.get("disqus.collapse-media");return a.isBoolean(b)||(b=c.isMobileUserAgent()),b}return a.extend(j.prototype,{topEdgeOffset:function(){return-t.getLounge().getPosition().height},configureDeferred:function(){this.model.get("deferred")&&!this.model.get("activated")&&this.listenToOnce(b(this),"enter",function(){this.relatedPost&&this.listenToOnce(this,"load error",function(){t.getLounge().postsView.onDeferredViewReady(this.relatedPost)}),this.enterViewport()}),this.listenToOnce(t.getLounge().postsView,"render:end",this.updateDeferredHeight)}}),p.theme=function(){return t.getLounge().config.colorScheme},p.linkColor=function(){return e(t.getLounge().config.anchorColor)},g.set({collapsed:u()}),g.on("change:collapsed",function(b,c){if(a.isObject(c)){if(!c.persist)return;c=c.value}d.set("disqus.collapse-media",c)}),{settings:g,getCollapseDefault:u,getDomain:c.getDomain,RichMediaLinkView:i,RichMediaViewModel:h,RichMediaView:j,IframeRichMediaView:k,SoundCloudRichMediaView:l,AutoplayRichMediaView:m,SourcelessIframeRichMediaView:n,DynamicHeightRichMediaView:o,TwitterRichMediaView:p,ImageRichMediaView:q,FacebookPhotoRichMediaView:r,VineRichMediaView:s,instantiateRichMediaView:f.instantiateRichMediaView,getRichMediaViewConfig:f.getRichMediaViewConfig}}),define("core/templates/react/BadgesManageTemplate",["react","underscore","core/strings","core/constants/badgesConstants"],function(a,b,c,d){"use strict";var e=c.gettext,f=d.ACTION_TYPES,g=function(b){var c=b.text,d=b.value,e=b.selected,f=b.handleChange,g=function(a){var b=13;a.keyCode===b&&f(a)};return a.createElement("label",{className:"padding-default align align__item--grow align__item--equal align--center align--column modal__option"+(e?" -selected":""),tabIndex:"0",onKeyPress:g,onChange:f},a.createElement("input",{type:"radio",name:"badge_action",value:d,checked:e}),a.createElement("p",{className:"text-semibold text-center modal__option-text"},c))},h=function(b){var c=b.badge,d=b.selectedBadge,e=b.handleChange;return a.createElement("span",{key:c.id,className:"badge-option spacing-right "+(d&&d===c.id?" selected":"")+(c.disabled?" disabled":"")},a.createElement("input",{id:"badge-"+c.id+"-input",name:"badge",type:"radio",className:"badge-option_input",value:c.id,onChange:e,disabled:c.disabled,tabIndex:"0"}),a.createElement("label",{htmlFor:"badge-"+c.id+"-input",className:"badge-option_label"},a.createElement("span",{className:"badge-option_image-wrapper"},a.createElement("img",{className:"badge-option_image",src:c.image,alt:c.name})),a.createElement("span",{className:"badge-option_title"},c.name)))},i=function(b){var c=b.badgeAction,d=b.formValues,i=b.badgeOptions,j=b.updateBadgeAction,k=b.updateBadgeSelection,l=b.handleSubmit,m=b.handleClose,n="https://"+d.forum+".disqus.com/admin/settings/badges";return a.createElement("form",{className:"badges-manage-form"},a.createElement("div",{className:"admin-modal__content padding-bottom"},a.createElement("div",null,a.createElement("div",{className:"align align--stretch align--wrap"},a.createElement(g,{text:e("Award a Badge"),value:f.AWARD,selected:c===f.AWARD,handleChange:j}),a.createElement(g,{text:e("Remove a Badge"),value:f.REMOVE,selected:c===f.REMOVE,handleChange:j})),a.createElement("div",{className:"modal__description border-bottom-dark"},a.createElement("p",{className:"modal__option-subtext"},e(c===f.AWARD?"Select a badge below to award it to this commenter.":"Select one of the manually awarded badges below to remove it from this commenter. Automatically awarded badges can only be removed by removing the badge from your site entirely."),a.createElement("br",null),e("You can manage your site's badges using the "),a.createElement("a",{href:n,target:"_blank",rel:"noopener noreferrer"},e("Badges settings")),e(" in the Disqus Admin."))),a.createElement("div",{className:"modal__config"},a.createElement("div",{className:"badge-options_list"},i.map(function(b){return a.createElement(h,{key:b.id,badge:b,selectedBadge:d.badge,handleChange:k})}),c===f.AWARD?a.createElement("span",{className:"badge-option spacing-right create-badge"},a.createElement("a",{className:"badge-option_link",href:n,target:"_blank",rel:"noopener noreferrer"},a.createElement("span",{className:"badge-option_image-wrapper"},a.createElement("span",{className:"icon icon-plus badge-option_add-icon"})),a.createElement("span",{className:"badge-option_title"},e("Create a new badge")))):null),c!==f.REMOVE||i.length?null:a.createElement("div",{className:"badge-options_empty"},e("This user doesn't have any badges.")),d.errorMessage?a.createElement("div",{className:"spacing-top-narrow"},a.createElement("p",{className:"text-small modal__option-subtext modal__error"},d.errorMessage)):null))),a.createElement("div",{className:"admin-modal__footer clearfix"},a.createElement("button",{className:"button button-fill--brand button-small text-capitalized",onClick:l},e(c===f.AWARD?"Award badge":"Remove badge")),a.createElement("button",{className:"button button-fill button-small text-capitalized",onClick:m},e("Cancel"))))};return i});var _extends=Object.assign||function(a){for(var b=1;b-1?(f.disabled=!0,b.push(f)):a.push(f))})}else this.badgeAction===i.REMOVE&&d.forEach(function(c){c.criteria===j.MANUAL?a.push(c):(c.disabled=!0,b.push(c))});return[].concat(a,b)},submit:k(function(){var b=this;if(this.formValues.badge){this.formValues.errorMessage=null;var e=this.badgeAction===i.AWARD?"uiAction:awardBadge":"uiAction:removeBadge";c.call("badges/"+this.badgeAction,{method:"POST",data:a.omit(this.formValues,a.isNull),success:function(a){b.trigger("success",{action:b.badgeAction,badge:a.response}),d.trigger(e,a.response.id)},error:function(a){b.formValues.errorMessage=a.responseJSON.response,b.render()}})}else this.badgeAction===i.AWARD?this.formValues.errorMessage=l("You must select a badge to award"):this.formValues.errorMessage=l("You must select a badge to remove"),this.render()}),cancel:k(function(){this.trigger("cancel")})},{defaultFormValues:{badge:null,errorMessage:null}});return m}),define("core/constants/moderationUserLists",["exports","moment"],function(a,b){"use strict";a.LIST_TYPES={WHITELIST:"whitelist",BLACKLIST:"blacklist"},a.BAN_TYPES={SHADOW:"shadowban",PERMANENT:"permanent",TEMP:"temp"},a.RETROACTIVE_ACTION_TYPES={DO_NOTHING:"",DELETE:"1",MARK_AS_SPAM:"2"},a.DEFAULT_FORM_VALUES={durationHours:"24",customDurationAmount:"1",customDurationScale:"1"},a.STORAGE_KEY_BAN_TYPE="defaultBan",a.getDateExpires=function(a){return"custom"===a.durationHours&&(a.durationHours=parseInt(a.customDurationAmount,10)*parseInt(a.customDurationScale,10)),b().add(a.durationHours,"hours").toISOString()},a.isBanTypeSupported=function(b,c){return!!c&&(b===a.BAN_TYPES.SHADOW?c.shadowBanning:b===a.BAN_TYPES.TEMP?c.temporaryBanning:Boolean(b))}}),define("core/templates/react/ModerationUserListsTemplate",["react","underscore","core/strings","core/constants/moderationUserLists"],function(a,b,c,d){"use strict";var e=this,f=c.gettext,g=d.LIST_TYPES,h=d.BAN_TYPES,i=d.RETROACTIVE_ACTION_TYPES,j=168,k=[{label:f("1 day"),durationHours:"24"},{label:f("1 week"),durationHours:j.toString()},{label:f("2 weeks"),durationHours:(2*j).toString()}],l=function(c){var d=c.user,j=c.listName,l=c.ipAddress,m=c.formValues,n=c.supportsShadowBanning,o=c.supportsTempBanning,p=c.selectRetroactiveAction,q=c.toggleBanTypeCallback,r=c.toggleUserValueChecked,s=c.toggleIpAddressChecked,t=c.updateDuration,u=c.updateCustomDurationAmount,v=c.updateCustomDurationScale,w=c.updateReason,x=c.handleSubmit,y=c.handleClose,z=c.handleChangeValue,A=c.closeText,B=c.getPlaceholderForValue,C=c.itemTypes,D=c.itemType,E=c.UpgradeIcon,F=c.itemValue;return j?a.createElement("form",{className:j+"-form"},a.createElement("div",{className:"admin-modal__content padding-bottom"},a.createElement("div",null,j===g.WHITELIST?a.createElement("p",{className:"spacing-default"},f("Adding this person to the whitelist will automatically approve his or her new comments from now on.")):a.createElement("div",{className:"align align--stretch align--wrap"},a.createElement("label",{className:["padding-default","align","align__item--grow","align__item--equal","align--center","align--column","modal__option","ban__option",o?null:"-disabled",m.type===h.TEMP?"-selected":null].join(" ")},a.createElement("input",{type:"radio",name:"ban_type",value:h.TEMP,checked:m.type===h.TEMP,onChange:q,disabled:!o}),a.createElement("p",{className:"text-semibold text-center modal__option-text ban__option-text"},f("Timeout"),o?null:a.createElement(E,{tooltipClass:"tooltip-timeout"}))),j===g.BLACKLIST&&m.type===h.TEMP?a.createElement("div",{className:"padding-default modal__description ban__description border-bottom-dark"},a.createElement("div",{className:"text-small modal__option-subtext ban__option-subtext"},f("Restrict a user's ability to comment for a period of time. This notifies the user of their timeout. If discussions get heated, enforce timeouts so that users cool off and improve their behavior."),k.map(function(b){return a.createElement("label",{className:"fieldset__block--checkbox text-medium spacing-bottom-small text-semibold text-gray-dark",key:b.durationHours},a.createElement("input",{type:"radio",name:"duration",checked:m.durationHours===b.durationHours,onChange:t,value:b.durationHours,className:"spacing-right-small"}),b.label)}),a.createElement("div",null,a.createElement("label",{className:"text-medium spacing-bottom-small inline__item spacing-right text-semibold text-gray-dark"},a.createElement("input",{type:"radio",name:"duration",checked:"custom"===m.durationHours,onChange:t,value:"custom",className:"spacing-right-small"}),f("Custom")),a.createElement("input",{name:"customDurationAmount",type:"number",value:m.customDurationAmount,onChange:u,onFocus:u,onKeyPress:u,className:"spacing-right-small -text-small",maxLength:"2",style:{width:"50px"},min:"0"}),a.createElement("select",{value:m.customDurationScale,onChange:v},a.createElement("option",{value:"1"},"Hour(s)"),a.createElement("option",{value:"24"},"Day(s)"),a.createElement("option",{value:168..toString()},"Week(s)"))))):null,a.createElement("label",{className:["padding-default","align","align__item--grow","align__item--equal","align--center","align--column","modal__option","ban__option",n?null:"-disabled",m.type===h.SHADOW?"-selected":null].join(" ")},a.createElement("input",{type:"radio",name:"ban_type",value:h.SHADOW,checked:m.type===h.SHADOW,onChange:q,disabled:!n}),a.createElement("p",{className:"text-semibold text-center modal__option-text ban__option-text"},f("Shadow Ban"),n?null:a.createElement(E,null))),j===g.BLACKLIST&&m.type===h.SHADOW?a.createElement("div",{className:"modal__description ban__description border-bottom-dark"},a.createElement("p",{className:"text-small modal__option-subtext ban__option-subtext"},f("Ban a user without them knowing. The user can still comment, however, their posts will only be visible to themselves. Use it against trolls and spammers who attempt to circumvent a ban with new accounts."))):null,a.createElement("label",{className:["padding-default","align","align__item--grow","align__item--equal","align--center","align--column","modal__option","ban__option",m.type===h.PERMANENT?"-selected":null].join(" ")},a.createElement("input",{type:"radio",name:"ban_type",value:h.PERMANENT,checked:m.type===h.PERMANENT,onChange:q}),a.createElement("p",{className:"text-semibold text-center modal__option-text ban__option-text"},"Permanent Ban")),j===g.BLACKLIST&&m.type===h.PERMANENT?a.createElement("div",{className:"modal__description ban__description border-bottom-dark"},a.createElement("p",{className:"text-small modal__option-subtext ban__option-subtext"},f("Permanently ban the user so they can no longer post, vote, or flag comments on your site. If the user repeatedly violates your comment policy, revoke their ability to participate."),a.createElement("label",{className:"fieldset__block--checkbox text-medium spacing-bottom-small" +},a.createElement("span",{className:"text-semibold text-gray-dark"},f("Last 30 days of comments:")," "),a.createElement("select",{value:m.retroactiveAction,onChange:p,className:"custom-select"},a.createElement("option",{value:i.DO_NOTHING},f("Do nothing")),a.createElement("option",{value:i.DELETE},f("Delete")),a.createElement("option",{value:i.MARK_AS_SPAM},f("Mark as spam")))))):null)),a.createElement("div",{className:"padding-default modal__config ban__config"},!d||d.isAnonymous?null:a.createElement("div",{className:"align align--stretch access__block spacing-bottom embed-hidden"},a.createElement("a",{href:d.profileUrl,className:"spacing-right"},a.createElement("img",{src:d.avatar.cache,alt:d.name,className:"comment-__avatar border-radius-sm"})),a.createElement("div",{className:"access__value"},a.createElement("h4",null,d.name),a.createElement("p",{className:"text-gray text-small"}," ",d.username," "))),d?a.createElement("label",{className:"fieldset__block--checkbox text-medium spacing-bottom-small"},a.createElement("input",{type:"checkbox",checked:Boolean(m.username),onChange:b.partial(r,b,"username"),className:"spacing-right-small"}),f("User:")," "," ",a.createElement("strong",null," ",d.username," ")):a.createElement(a.Fragment,null,a.createElement("div",{className:"spacing-top spacing-bottom form-attribute-input"},a.createElement("div",null,a.createElement("h3",{className:"text-gray-darker"},"Type")),a.createElement("select",{name:"itemType",className:"input--select",value:e.itemType,onChange:z,disabled:C.length<=1},C.map(function(b){return a.createElement("option",{key:b.value,value:b.value}," ",b.displayName," ")}))),a.createElement("div",{className:"spacing-top spacing-bottom form-attribute-input"},a.createElement("h3",{className:"text-gray-darker"},"Value"),a.createElement("div",null,a.createElement("input",{className:"input--textbox",name:"itemValue",type:"text",placeholder:B(D),value:F,onChange:z})))),d&&j===g.BLACKLIST?a.createElement("label",{className:"fieldset__block--checkbox text-medium spacing-bottom-small"},a.createElement("input",{type:"checkbox",checked:Boolean(m.email),onChange:b.partial(r,b,"email"),className:"spacing-right-small"}),f("Email:")," ",a.createElement("strong",null," ",d.email," ")):null,j===g.BLACKLIST&&l?a.createElement("label",{className:"fieldset__block--checkbox text-medium spacing-bottom-small"},a.createElement("input",{type:"checkbox",checked:Boolean(m.ipAddress),onChange:s,className:"spacing-right-small"}),f("IP Address:")," ",a.createElement("strong",null," ",l," "),a.createElement("div",{className:["spacing-default-narrow","text-small","text-gray","spacing-left-large","embed-hidden"].join(" ")},a.createElement("strong",null,f("Note:")," "),f("Adding an IP address to the banned list may also unintentionally block others who may share this IP address."))):null,j===g.BLACKLIST?a.createElement("div",null,a.createElement("div",{className:"spacing-bottom-small spacing-top-narrow"},a.createElement("label",{className:"modal__reason ban__reason"},f("Reason for banning:"),a.createElement("input",{name:"reason",type:"text",value:m.reason||"",onChange:w,className:"input--textbox -text-small border-gray-light",maxLength:"50"}))),a.createElement("p",{className:"text-small modal__option-subtext ban__option-subtext"},f("You can remove the user from the banned list at any time."))):null)),a.createElement("div",{className:"admin-modal__footer clearfix"},a.createElement("div",null,a.createElement("button",{className:["button","button-fill--brand","button-small","text-capitalized"].join(" "),disabled:!(m.email||m.username||m.ipAddress||F),onClick:x},f(j===g.WHITELIST?"Add to Trusted List":"Add to Banned List")),j===g.BLACKLIST?a.createElement("button",{className:["button","button-fill","button-small","text-capitalized"].join(" "),onClick:y},f(A)):null))):null};return l}),define("lounge/utils",["jquery","core/api"],function(a,b){"use strict";var c={},d=function(d){if(c[d])return c[d];var e=a.Deferred();return d?(c[d]=e.promise(),b.call("forums/details",{method:"GET",data:{forum:d,attach:"forumFeatures"}}).done(function(a){e.resolve(a.response.features)}).fail(function(){e.reject({})}),e.promise()):e.reject({})};return d._clearCache=function(){c={}},{getSaasFeatures:d}});var _extends=Object.assign||function(a){for(var b=1;b'+a+' '+p("Learn more")+"
            • "},render:function(){var a=this.post.toJSON();this.$el.html(n({post:a,user:this.session.toJSON(),forum:this.thread.forum})),this.initTextEditor();var b=this.textarea=new i({value:a.raw_message}),c=this.getEditTimeLeft();return this.$("[data-role=textarea]").prepend(b.render().el).after(c),this.initStarRatings(),this},resize:function(){var a=k.getLounge();a&&this.textarea&&this.textarea.$input&&this.textarea.$input.on("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd",function(){a.resize()}),this.textarea.resize()},submitForm:function(a){this.dismissAlert(),a&&a.preventDefault()&&a.preventDefault();var b=this,e={raw_message:this.textarea.get(),rating:this.rating},f=b.post.validateMessage(e);return void 0!==f?this.alert(f,{type:"error"}):void b.post.save(e,{success:function(){b.trigger("submitted"),d.trigger("uiCallback:postUpdated",b.post,{area:"main"}),c.isNumber(b.rating)&&j.isThreadModelRatingsEnabled(b.thread)&&(b.thread.set("userRating",b.rating),c.delay(c.bind(b.thread.fetchRatings,b.thread),500))},error:function(a,c){var d;return d=c.response.indexOf("Comment edit period expired")>-1?p("You can no longer edit this comment. Comments can only be edited within 7 days after posting.")+' '+p("Learn more")+"":c.response,b.alert(d,{type:"error",safe:!0})}})},remove:function(){this.$el.remove()}});return e.call(q.prototype),m.call(q.prototype),l.call(q.prototype),q}),define("lounge/views/posts/TypingUserView",["backbone","core/strings","core/switches","core/utils/object/get"],function(a,b,c,d){"use strict";var e=b.get,f=a.View.extend({initialize:function(a){this.options=a},render:function(){var a,d=this.options.parentView.reply,f=d&&d.typingUser,g=this.model.usersTyping.count(f&&f.id),h=c.isFeatureActive("embed_refresh",{forum:this.model.get("forum")});return g<=0?void this.$el.hide():(1===g?a=e(h?"1 person writing a comment…":"One other person is typing…"):(a=e(h?"%(num)s people writing comments…":"%(num)s other people are typing…"),a=b.interpolate(a,{num:g})),this.$el.text(a),this.$el.show(),this)}});return f});var _extends=Object.assign||function(a){for(var b=1;b").addClass("tooltip").text(this.message))}b.prototype.render.call(this)},moveTo:function(a){if(a){var b=this.constructor.POSITION_OFFSET,c=a.offset(),d=this.getContainerPosition(),e=this.$el.width();this.$el.css({bottom:d.containerOffset.height-c.top+b,top:"inherit",left:c.left-e/2})}}},{create:function(a){return b.create(a.id,a,"Tooltip",c)},POSITION_OFFSET:10});return c}),define("core/views/ClickTooltip",["underscore","core/views/common/HoverCard","core/views/Tooltip"],function(a,b,c){"use strict";var d=c.extend({target:function(b){b.on("click",a.bind(this.targetClicked,this,b)),b.on("mouseleave",a.bind(this.leave,this))},targetClicked:function(a){a&&(this.$target=a),"in"!==this._hoverState&&(this._hoverState="in",this.show(),c.open[this.uid]=this)}},{create:function(a){return b.create(a.id,a,"ClickTooltip",d)}});return d}),define("templates/lounge/partials/postVotes",["react","core/constants/voteConstants","core/strings","core/switches","core/utils/object/get"],function(a,b,c,d,e){"use strict";var f=c.gettext,g=function(c){var g=d.isFeatureActive("embed_refresh",{forum:c.forumId}),h=a.createElement("span",{className:"control"},g?null:a.createElement("i",{"aria-hidden":"true",className:"icon icon-arrow-2"})),i=a.createElement("span",{className:"updatable count","data-role":"likes"},e(c.post,["likes"],null)),j=g?[h," ",i]:[i," ",h];return c.votingType===b.VOTING_TYPES.DISABLED?null:a.createElement("div",{className:"post-votes"},a.createElement("a",{href:"#",className:"vote-up "+(e(c.post,["userScore"],0)>0?"upvoted":"")+" count-"+e(c.post,["likes"],""),"data-action":"upvote",title:e(c.post,["likes"])?"":f("Vote up"),name:f("Vote up")},j),c.votingType===b.VOTING_TYPES.DOWNVOTE_DISABLED||g?null:a.createElement("div",{className:"post-votes__separator"},""),c.votingType===b.VOTING_TYPES.DOWNVOTE_DISABLED?null:a.createElement("a",{href:"#",className:"vote-down "+(e(c.post,["userScore"],0)<0?"downvoted":"")+" count-"+(c.votingType===b.VOTING_TYPES.DOWNVOTE_LIMITED?0:e(c.post,["dislikes"],"")),"data-action":"downvote",title:e(c.post,["dislikes"])?"":f("Vote down"),name:f("Vote down")},a.createElement("span",{className:"control"},g?null:a.createElement("i",{"aria-hidden":"true",className:"icon icon-arrow"}))," ",a.createElement("span",{className:"updatable count","data-role":"dislikes"},c.votingType===b.VOTING_TYPES.DOWNVOTE_LIMITED?null:e(c.post,["dislikes"],null))))};return g}),define("templates/lounge/partials/postFooter",["react","core/constants/voteConstants","core/strings","core/switches","core/utils/object/get","templates/lounge/partials/postVotes"],function(a,b,c,d,e,f){"use strict";var g=c.gettext,h=function(c){var h=(e(c.session,["isRegistered"])||!d.isFeatureActive("sso_less_branding",{forum:c.post.forum}))&&c.votingType!==b.VOTING_TYPES.DISABLED,i=d.isFeatureActive("embed_refresh",{forum:c.post.forum}),j=i?"realtime-replies realtime-replies--refresh icon icon-pencil":"realtime-replies",k=i?"realtime-button realtime-button--refresh":"realtime-button";return a.createElement("menu",{className:"comment-footer__menu"},h?[a.createElement("li",{key:"vote-0",className:"voting","data-role":"voting"},a.createElement(f,{post:c.post,votingType:c.votingType,forumId:c.forumId})),a.createElement("li",{key:"vote-1",className:"bullet","aria-hidden":"true"},"•")]:null,e(c.post,["canBeEdited"])?[a.createElement("li",{key:"edit-0",className:"edit","data-role":"edit-link"},a.createElement("a",{className:"comment-footer__action",href:"#","data-action":"edit"},a.createElement("span",{className:"text"},g("Edit")))),a.createElement("li",{key:"edit-1",className:"bullet","aria-hidden":"true"},"•")]:null,e(c.post,["canBeRepliedTo"])?[a.createElement("li",{key:"reply-0",className:"reply","data-role":"reply-link"},a.createElement("a",{className:"comment-footer__action",href:"#","data-action":"reply"},a.createElement("span",{className:"text"},g("Reply")))),a.createElement("li",{key:"reply-1",className:"bullet","aria-hidden":"true"},"•")]:null,e(c.post,["isSponsored"])&&!e(c.post,["hideViewAllComments"])?[a.createElement("li",{key:"sponsored-0",className:"thread-link","data-role":"thread-link"},a.createElement("a",{href:e(c.post,["permalink"],""),target:"_blank",rel:"noopener noreferrer","data-action":"thread"},a.createElement("i",{className:"icon icon-mobile"}),a.createElement("span",{className:"text"},g("View all comments")),a.createElement("span",{className:"mobile-text"},g("All Comments")))),a.createElement("li",{key:"sponsored-1",className:"bullet","aria-hidden":"true"},"•")]:null,e(c.post,["canBeShared"])?a.createElement("li",{id:"comment__share-"+e(c.post,["id"],""),className:"comment__share"},a.createElement("a",{className:"toggle",href:"#","data-action":"expand-share"},a.createElement("span",{className:"text"},g("Share")," ›")),a.createElement("ul",{className:"comment-share__buttons"},c.disableSocialShare?null:a.createElement("div",{className:"comment-share__social-share-buttons"},a.createElement("li",{className:"twitter share__button-container"},a.createElement("button",{className:"share__button icon icon-twitter","data-action":"share:twitter","aria-label":"Share comment on Twitter"})),a.createElement("li",{className:"facebook share__button-container"},a.createElement("button",{className:"share__button icon icon-facebook","data-action":"share:facebook","aria-label":"Share comment on Facebook"}))),a.createElement("li",{className:"link share__button-container"},a.createElement("button",{className:"share__button icon icon-link",value:e(c.post,["shortLink"],""),name:g("Link"),title:g("Click to copy post link"),"data-action":"copy-link","aria-label":"Copy link to comment"}),a.createElement("input",{className:"share__button link_url",value:e(c.post,["shortLink"],""),name:g("Link"),title:g("Click to copy post link"),"data-action":"copy-link",readOnly:!0})))):null,e(c.post,["isDeleted"])?null:a.createElement("li",{className:"realtime","data-role":"realtime-notification:"+e(c.post,["id"],"")},a.createElement("span",{style:{display:"none"},className:j}),a.createElement("a",{style:{display:"none"},href:"#",className:k})),e(c.post,["isSponsored"])?a.createElement("li",{className:"feedback"},a.createElement("button",{"data-action":"feedback"},g("Leave Feedback"))):null)};return h});var _extends=Object.assign||function(a){for(var b=1;b [data-role=post-content] [data-action]":"performAction","keydown > [data-role=post-content] [data-action]":function(a){a.keyCode&&a.keyCode!==T||this.performAction(a)},"click [data-role=allstar]":function(){R.broadcast("click:allstar")}},actions:{upvote:P(function(a){this.handleVote(a,1)}),downvote:P(function(a){this.handleVote(a,-1)}),reply:"handleReply",flag:"handleFlag","block-user":"handleBlockUser",edit:"handleEdit","delete":"handleDelete",spam:"handleSpam",blacklist:"handleBlacklist","manage-badges":"handleManageBadges",highlight:"handleHighlight",unhighlight:"handleUnhighlight",collapse:"handleCollapse",reveal:"handleReveal","expand-share":"handleExpandShare","share:twitter":"_onShare","share:facebook":"_onShare","copy-link":"handleCopyLink",follow:"toggleFollow"},performAction:function(c){var d=this,e=a(c.currentTarget).attr("data-action"),f=d.actions[e];if(f)return(b.isFunction(f)?f:d[f]).call(d,c)},initialize:function(a){var b=this;this.thread=a.thread,this.session=a.session,this.created=Boolean(a.created),this.options=a,this.userSuggestions=a.userSuggestions,this.gifPickerEnabled=Boolean(this.thread)&&Boolean(this.thread.forum)&&this.thread.forum.get("settings").gifPickerEnabled,this.setAlertSelector("> [role=alert]"),this.listenTo(this.model,{"change:isDeleted spam":this.removeAsDeleted,"change:message":this.stopLoading,"change:points":this.updateVotePoints,"change:userScore":this.updateActiveUserVote,"change:isFlaggedByUser":this.updateMenu,"change:hasMore":this.handleHasMoreChanged,"change:isHighlighted":function(){this.redraw()},"change:hideReplyPreview":this.updateHideReplyPreview,change:function(){var a=this.model.changedAttributes();(a.id||a.message)&&this.redraw()}}),this.model.author&&(this.listenTo(this.model.author,"change:isBlocked",function(){return b.flaggingView?void b.listenToOnce(b.flaggingView,"success cancel",b.redraw):b.manageBadgeView?void b.listenToOnce(b.manageBadgeView,"success cancel",b.redraw):void b.redraw()}),this.listenTo(this.model.author,"change:badges",this.updateBadges),this.listenTo(this.model.author,"change:isFollowing",this.updateFollowing)),this.thread.forum.get("features")||this.listenToOnce(this.thread.forum,"change:features",this.redraw),this.listenTo(this.thread,"change:ratingsEnabled",this.redraw),!this.model.getParent()&&this.model.isAuthorSessionUser(this.session)&&this.listenTo(this.thread,"change:userRating",function(){this.model.author.set("threadRating",this.thread.get("userRating")),this.redraw()}),this.listenTo(this.model.usersTyping,"add remove reset change",this.updateTypingCount),this.listenTo(this.session,"change:id",function(){this.updateFooter(),this.updateMenu(),this.updateSessionClass(),k.isFeatureActive("embed_refresh",{forum:this.thread.forum.id})&&this.updateFollowingInitial()}),this.listenTo(t.getLounge(),"opened:post-menu",this.positionMenu),this.listenTo(this.thread,"change:ratingsEnabled",this.render),this.hasVisibleChildren=!1,this.reply=null,this.edit=null,this.parent=a.parent,this.trackPosition=!1,this.offset={top:-1,height:-1},this.dim={height:-1,width:-1},this.listenTo(t.getLounge(),"domReflow",this.calcRect),this.isCollapseAllowed=!0,this.haveSubscribedToRichMediaEvents=!1},calcRect:function(){if(!this.trackPosition||!this.visible)return this.offset={top:-1,height:-1},void(this.dim={height:-1,width:-1});var a=this.contentNode;this.offset=a.offset(),this.dim={height:a.height(),width:a.width()}},updatePostMetaPlacement:function(){if(k.isFeatureActive("embed_refresh",{forum:this.thread.forum.id})&&!l.isMobileUserAgent()){var a=this.$el.find(".comment__header").first(),b=a.find(".post-meta"),c=25;b.css({display:"","margin-top":""}),a.height()0?b.addClass("upvoted"):a.get("userScore")<0&&c.addClass("downvoted")},updateHideReplyPreview:function(){var a=this.contentNode.find("a.parent-link");a.removeClass("parent-link"),a.addClass("hidden"),this.updatePostMetaPlacement()},updateVotePoints:function(){var c=this,d=c.model,e=c.contentNode.find("[data-role=likes], [data-role=dislikes]"),f=c.contentNode.find("[data-action=upvote], [data-action=downvote]"),g=function(a){b.delay(function(){a.addClass("update"),b.delay(function(){a.removeClass("update")},1e3)},500)};b.each(e,function(b,e){b=a(b);var h=b.html(),j=d.get(b.attr("data-role")),k=a(f[e]);if(j=Math.max(j,0).toString(),h!==j){k.removeClass("count-"+h);var l=c.thread.forum.get("votingType"),m=l===i.VOTING_TYPES.DOWNVOTE_LIMITED||l===i.VOTING_TYPES.DOWNVOTE_DISABLED;l===i.VOTING_TYPES.DISABLED||"dislikes"===b.attr("data-role")&&m?k.addClass("count-0"):(k.addClass("count-"+j),b.html(j)),g(b)}})},updateFooter:function(){var a=this.contentNode.find("footer"),b=F({post:this.getPostAttributes(),session:this.session.toJSON(),disableSocialShare:this.thread.forum.get("settings").disableSocialShare,votingType:this.thread.forum.get("votingType"),forumId:this.thread.forum.id});A.open[this.model.cid]&&this.toggleReplyLink(!0),a.html(b),this.initVotersCard()},updateMenu:function(){var a=this.contentNode.find("[data-role=menu]"),b=G({session:this.session.toJSON(),post:this.getPostAttributes(),forum:this.thread.forum.toJSON()});a.replaceWith(b)},updateBadges:function(){var a=this.getPostAttributes().author,b=this.contentNode.find("[data-role=badges]"),c=H({forum:this.thread.forum.toJSON(),user:a,context:"post",limit:4});b.replaceWith(c),this.profileCard&&this.profileCard.setBadges(a.badges),this.updatePostMetaPlacement()},updateFollowing:function(){var a="[data-user="+this.model.author.id+"][data-action=follow]";if(this.model.author.get("isPrivate")||this.model.author.id===this.session.user.id)return void this.$el.find(a).hide();var b=Boolean(this.model.author.get("isFollowing")),c=a+" .follow-user",d=Q(b?"Unfollow":"Follow");this.$el.find(c).toggleClass("is-following",b),this.$el.find(c).attr("aria-label",d),this.$el.find(c).attr("title",d)},updateFollowingInitial:function(){(this.session.user.get("followingUserIdSet")&&this.session.user.get("followingUserIdSet").has(this.model.author.id)||this.session.user.id===this.model.author.id)&&this.updateFollowing()},updatePostStateClasses:function(){var a=this.model,b=a.get("isHighlighted")||a.get("isSponsored");this.$el.toggleClass("highlighted",Boolean(b)),this.contentNode.toggleClass("disabled",!a.id)},getMessageContent:function(){return this.messageContent&&this.messageContent.length||(this.messageContent=this.contentNode.find("[data-role=message-content]")),this.messageContent},manageMessageHeight:function(a){var b=this,c=b.getMessageContent(),d=1.5*b.collapsedHeight,e=c&&c.length&&c.height()||0;e+=a||0,e>d&&!b.$el.hasClass("collapsed")?b.collapse():b.expand(!0)},preventCollapsing:function(a){a.get("deferred")||(this.expand(),this.isCollapseAllowed=!1)},markSeen:function(){function a(){c.contentNode.addClass("seen"),b.delay(function(){c.contentNode.removeClass("seen"),c.contentNode.removeClass("new")},1e4),c.trackPosition=!1}var c=this,e=d(c);e.isVisible()?a():this.listenToOnce(e,"enter",a)},renderMedia:function(){var a=this.model.media;if(a&&a.length){var c=this.$el.find("[data-role=post-media-list]");this.richMediaViews=this.renderRichMedia(a,c,{convertLinkToButton:!0,beforeRender:function(a){this.listenTo(a.model,"change:activated",this.preventCollapsing),a.relatedPost=this.model.cid},normalize:function(a){var b=l.bleachFindUrls(a);return b.length&&(a=b[0].url),a}}),!this.haveSubscribedToRichMediaEvents&&this.richMediaViews.length&&(this.listenTo(w.settings,"change:collapsed",function(a,c){if(c)this.manageMessageHeight();else{var d=b.reduce(this.richMediaViews,function(a,b){return a+(b.model.get("deferredHeight")||0)},0);this.manageMessageHeight(d)}}),this.haveSubscribedToRichMediaEvents=!0)}},renderSpoilers:function(){this.$el.find("spoiler").each(function(){a(this).attr("tabindex","0")})},getStateByline:function(){var a,b=this.model;return b.get("isHighlighted")?a={icon:"trophy",text:Q("Featured by %(forum)s"),style:"default"}:b.get("isSponsored")?a={icon:"trophy",text:Q("Sponsored on Disqus"),style:"sponsored"}:b.isAuthorSessionUser(this.session)&&(b.get("isApproved")||(a={icon:"clock",text:Q("Hold on, this is waiting to be approved by %(forum)s."),style:"default"})),a&&(a.text=j.interpolate(a.text,{forum:this.thread.forum.get("name")})),a},getTemplate:function(a){if(a.isDeleted)return J;var b=this.model.isAuthorSessionUser(this.session);return a.sb&&!b?J:a.isSpam?M:this.model.author&&this.model.author.get("isBlocked")?K:b&&!a.isApproved?I:a.isMinimized?L:I},getPostAttributes:function(){var a=this.model.toJSON({session:this.session,thread:this.thread}),b=this.model.getParent();return b&&b.get("isSponsored")&&(a.canBeRepliedTo=!1,a.hideViewAllComments=b.get("hideViewAllComments")),a},render:function(){var a=this.$el,b=this.getPostAttributes(),c=t.getLounge(),d=this.thread.forum.get("avatar"),g=this.model.getParent(),h=this.getTemplate(b);return!b.message&&b.raw_message&&s.isPlainText(b.raw_message)&&(b.message=this.model.constructor.formatMessage(b.raw_message)),f.render(e.createElement(h,{post:b,forumName:this.thread.forum.get("name"),session:this.session.toJSON(),thread:this.thread.toJSON(),forum:this.thread.forum.toJSON(),created:this.created,parentPost:g&&g.toJSON({session:this.session,thread:this.thread}),defaultAvatarUrl:d?d.large.cache:q.avatar.generic,hasForumAvatar:Boolean(d&&!l.isDefaultAvatar(d.large.cache)),stateByline:this.getStateByline(),isInHome:t.getLounge().isInHome()}),this.el),h===I?a.removeClass("minimized"):a.addClass("minimized"),b.sb&&!this.model.isAuthorSessionUser(this.session)?this.hasVisibleChildren||a.addClass("banned"):this.parent&&this.parent.markHasVisibleChildren(),!this.options.excludeAnchor&&this.model.id&&a.attr("id","post-"+this.model.id),this.contentNode=a.find("[data-role=post-content]"),this.childrenNode=a.find("[data-role=children]"),this.messageNode=this.contentNode.find("[data-role=message]"),this.highlightSyntax(),this.processMentions(),this.initCards(),this.updatePostStateClasses(),this.renderMedia(),this.renderSpoilers(),this.model.get("isRealtime")&&(this.trackPosition=!0,this.listenToOnce(c.postsView,"render:end",this.markSeen)),this.listenToOnce(c.postsView,"render:end",function(){this.markSeen(),this.manageMessageHeight(),this.updatePostMetaPlacement()}),this},positionMenu:function(b){var c=b.data("postId").toString();if(c===this.model.id){var d=this.$(".dropdown-menu",b);if(d.css("top",""),d.height()+d.offset().top>a(window.document).height()){var e=d.css("top")||0;d.css("top",(d.height()+parseInt(e,10))*-1)}}},markHasVisibleChildren:function(){this.hasVisibleChildren=!0,this.model.get("sb")&&(this.$el.removeClass("banned"),this.parent&&this.parent.markHasVisibleChildren())},highlightSyntax:function(){var a=this.contentNode.find("pre code");a.length&&a.each(function(){s.syntaxHighlighter.highlight(this)})},redraw:function(){var a=window.document.createDocumentFragment();this.childrenNode.children().appendTo(a),this.render(),this.childrenNode.append(a),this.blacklist&&this.contentNode.find("[data-role=blacklist-form]").first().append(this.blacklist.el),t.getLounge().postsView.trigger("render:end"),t.getLounge().trigger("domReflow")},handleHasMoreChanged:function(){var b=this.$el.find(".show-children-wrapper");a(b[b.length-1]).toggleClass("hidden",!this.model.get("hasMore"))},processMentions:function(){var b=this.session,c=b&&b.get("sso")&&b.get("sso").profile_url;c&&(c=String(c),0===c.indexOf("//")&&(c="https:"+c),/https?:\/\//.test(c)||(c=null),/\{username\}/.test(c)||(c=null));var d=k.isFeatureActive("sso_less_branding",{forum:this.thread.forum.id})&&!c;this.contentNode.find("[data-dsq-mention]").each(function(){var b=a(this);if(d){var e=a("");e.text(b.text()),e.addClass("mention"),b.replaceWith(e)}else{if(c){var f=c.replace(/\{username\}/gi,encodeURIComponent(b.text()));b.attr("href",f),b.attr("title",f)}else{var g=b.attr("data-dsq-mention").split(":")[0];b.attr("data-action","profile"),b.attr("data-username",g)}b.addClass("mention")}})},attachChild:function(a){var b=a.model;b.created||!b.id||b.get("isImmediateReply")?this.childrenNode.prepend(a.el):this.childrenNode.append(a.el)},toggleReply:function(){this.reply&&this.reply.isOpen()?this.hideReply():this.showReply()},toggleReplyLink:function(a){this.contentNode.find("[data-role=reply-link]").toggleClass("active",a),this.contentNode.find("[data-role=reply-link]").toggleClass("publisher-anchor-color",a)},showReply:function(){this.reply?(this.$el.find("[data-role=reply-form]").first().prepend(this.reply.$el),this.reply.show(),this.reply.focus()):this.getReplyView(),this.toggleReplyLink(!0)},hideReply:function(){this.reply&&(this.reply.hide(),this.toggleReplyLink(!1))},toggleEdit:function(){return this.contentNode.find("[data-role=edit-link]").toggleClass("active"),this.edit?(this.edit.remove(),this.edit=null,void this.messageNode.show()):void this.showEdit()},showEdit:function(){if(this.session.isLoggedOut())return void this.listenToOnce(this.session,"change:id",this.toggleEdit);if(this.model.canBeEdited(this.session,this.thread)&&!this.edit){this.edit=new z({post:this.model,session:this.session,thread:this.thread}),this.edit.render(),this.listenTo(this.edit,"submitted cancel",this.toggleEdit),this.expand(!0);var a=this.messageNode;a.parent().prepend(this.edit.$el),a.hide(),this.edit.resize();var b=t.getLounge();b&&b.scrollToPost(this.model.id),p.trigger("uiAction:postStartUpdate",this.model,{area:"main"})}},removeAsDeleted:function(){this.redraw()},initCards:function(){var a=this;a.initProfileCard(),a.initContextCard(),a.initVotersCard(),a.initAnonVoteCards(),a.initTooltips()},initProfileCard:function(){if(!l.isMobileUserAgent()&&!k.isFeatureActive("sso_less_branding",{forum:this.thread.forum.id})){var a=this.$el.find(".hovercard");a.length&&(this.profileCard=v.ProfileCard.create({session:this.session,user:this.model.author,targetElement:a}))}},initContextCard:function(){if(!l.isMobileUserAgent()){var a=this.parent&&this.parent.model;a&&!a.get("isDeleted")&&(this.contextCard=v.ContextCard.create({post:a,targetElement:this.$el.find("[data-role=parent-link]")}))}},initVotersCard:function(){if(!l.isMobileUserAgent()){var a=this.$el.find("[data-action=upvote]"),b=this.$el.find("[data-action=downvote]"),c=this.thread.forum.get("votingType");a.length&&c!==i.VOTING_TYPES.DISABLED&&(this.upvotersCard=v.VotersCard.create({session:this.session,model:this.model,targetElement:a,voteType:1,isRefreshEnabled:k.isFeatureActive("embed_refresh",{forum:this.thread.forum.id})})),!b.length||null!==c&&void 0!==c&&c!==i.VOTING_TYPES.DETAILED||(this.downvotersCard=v.VotersCard.create({session:this.session,model:this.model,targetElement:b,voteType:-1,isRefreshEnabled:k.isFeatureActive("embed_refresh",{forum:this.thread.forum.id})}))}},initAnonVoteCards:function(){this.session.isLoggedOut()&&!this.thread.forum.get("settings").allowAnonVotes&&(this.anonVoteCards=this.anonVoteCards||{},b.each({upvote:N,downvote:O},function(a,b){this.anonVoteCards[b]&&(this.anonVoteCards[b].remove(),this.anonVoteCards[b]=null);var c=this.$("[data-action="+b+"]");c.length&&(this.anonVoteCards[b]=D.create({targetElement:c,template:a,id:"anon"+b+this.model.id}))},this),this.anonVoteCards.upvote&&this.listenTo(this.anonVoteCards.upvote,"show",this.closeUpvotersCard),this.anonVoteCards.downvote&&this.listenTo(this.anonVoteCards.upvote,"show",this.closeDownvotersCard))},initTooltips:function(){if(!l.isMobileUserAgent()){var b=this.$el.find("[data-toggle=tooltip]");b.length&&b.each(function(b,c){var d=a(c),e=d.attr("title");d.attr("data-original-title",e).attr("title",""),E.create({targetElement:d,message:e,id:e})})}},closeUpvotersCard:function(){this.upvotersCard&&this.upvotersCard.hide()},closeDownvotersCard:function(){this.downvotersCard&&this.downvotersCard.hide()},_onShare:P(function(a){if(!this.thread.forum.get("settings").disableSocialShare){var b=s.extractService(a.target,"share");b&&(t.getLounge().trigger("uiAction:postShare",this.model,b),this.share(b))}}),handleBlacklist:P(function(){if(!this.blacklist){var a=this.blacklist=new y({model:this.model,forum:this.thread.forum});a.render(),this.listenTo(a,"success cancel",function(){this.blacklist.remove(),this.blacklist=null}),this.contentNode.find("[data-role=blacklist-form]").first().append(a.el)}}),handleManageBadges:P(function(){if(!this.manageBadgeView){var a=this.manageBadgeView=new x({model:this.model,forum:this.thread.forum});a.render(),p.trigger("uiAction:viewBadgeModal"),this.listenTo(a,"success cancel",function(){this.manageBadgeView.remove(),this.manageBadgeView=null}),this.listenTo(a,"success",function(a){var b=this.model.author;b.get("badges")||b.set("badges",[]);var c=b.get("badges");a.action===S.AWARD?c.unshift(a.badge):a.action===S.REMOVE&&b.set("badges",c.filter(function(b){return b.id!==a.badge.id})),this.thread.trigger("change:badgeAction",b)}),this.contentNode.find("[data-role=badges-form]").first().append(a.el)}}),toggleCollapse:function(a){this.$el.toggleClass("collapsed",a)},handleCollapse:P(function(){this.toggleCollapse()}),handleHighlight:P(function(){this.model.highlight();var a=Q("You've featured a comment! This comment will now also appear at the top of the discussion.");this.alert(a,{safe:!0,type:"success"}),this.thread.set("highlightedPost",this.model);var b=t.getLounge();b&&b.scrollToPost(this.model.id)}),handleUnhighlight:P(function(){this.model.unhighlight(),this.dismissAlert(),this.thread.unset("highlightedPost")}),handleVote:function(a,b){if(this.thread.forum.get("votingType")!==i.VOTING_TYPES.DISABLED&&(b!==-1||this.thread.forum.get("votingType")!==i.VOTING_TYPES.DOWNVOTE_DISABLED)){if(!this.thread.forum.get("settings").allowAnonVotes&&this.session.isLoggedOut())return void this.queueAuthAction(function(){this.handleVote(a,b)},this);var c=t.getLounge(),d=this.model.get("userScore")===b;d?c.trigger("uiAction:postUnvote",this.model,a):1===b?c.trigger("uiAction:postUpvote",this.model,a):b===-1&&c.trigger("uiAction:postDownvote",this.model,a),this.model.vote(d?0:b)}},queueAuthAction:function(a,b){this.listenToOnce(this.session,"change:id",function(){this.session.isLoggedIn()&&a.call(b)}),this.session.get("sso")&&this.session.get("sso").url?this.session.authenticate("sso"):this.session.authenticate("disqusDotcom")},getReplyView:function(){return this.reply?this.reply:(this.reply=new A({parentView:this,parent:this.model,thread:this.thread,session:this.options.session,userSuggestions:this.userSuggestions,gifPickerEnabled:this.gifPickerEnabled,shouldShowEmailAlertInForm:!0}),this.reply.render(),this.showReply(),this.reply)},handleReply:P(function(){this.toggleReply(); +}),handleFlag:P(function(){if(!this.model.get("isFlaggedByUser")&&!this.flaggingView){if(this.session.isLoggedOut()){var a=this;return a._pendingFlagComplete=!1,void a.queueAuthAction(function(){a._pendingFlagComplete||(a._pendingFlagComplete=!0,setTimeout(function(){a.handleFlag()},400))})}var b=this.flaggingView=new C({model:this.model});b.render(),this.listenTo(b,"cancel success",function(){b.remove(),this.flaggingView=null,this.updateMenu()}),this.contentNode.find("[data-role=flagging-form]").first().append(b.el),p.frame.sendHostMessage("scrollTo",{top:b.$el.offset().top-80})}}),handleBlockUser:P(function(){var a=Q("Are you sure you want to block this user?");if(window.confirm(a)){this.dismissAlert(function(a){return a.options&&a.options.isBlockError});var b=this;this.model.author.block().fail(function(a){var c=Q("Something went wrong while trying to block this user. Please try again later."),d=a&&a.responseJSON&&a.responseJSON.code;d===g.ERROR_CODES.MAX_ITEMS_REACHED&&(c=Q("Unfortunately this user could not be blocked; you have reached the limit for number of users blocked.")),b.alert(c,{type:"error",isBlockError:!0})})}}),handleEdit:P(function(){this.toggleEdit()}),handleDelete:P(function(){var a=Q("Are you sure you want to delete this comment? You cannot undo this action.");(this.session.user.id!==this.model.author.id||window.confirm(a))&&(this.model.get("isHighlighted")&&(this.model.set("isHighlighted",!1),this.thread.unset("highlightedPost")),this.model._delete())}),handleSpam:P(function(){this.model.spam()}),handleReveal:P(function(){this.model.set("isMinimized",!1),this.redraw()}),handleExpandMessage:P(function(){return this.expand()}),handleExpandShare:P(function(){var a=this.$("#comment__share-"+this.model.id+" .comment-share__buttons");a.toggleClass("comment-share__buttons-visible")}),handleCopyLink:function(a){var b=a.target;"BUTTON"===a.target.tagName&&(b=a.target.nextSibling),b.select(),window.document.execCommand("copy"),window.document.getSelection().removeAllRanges()}});return b.extend(U.prototype,u.ShareMixin),b.extend(U.prototype,r.FollowButtonMixin),m.call(U.prototype),u.asCollapsible.call(U.prototype,{collapsedHeight:374,collapseTargetSelector:"[data-role=message-container]",collapseScope:"contentNode"}),n.call(U.prototype),U}),define("lounge/views/posts/collection",["jquery","underscore","backbone","moment","core/bus","core/strings","core/switches","common/models","common/utils","lounge/views/posts/PostReplyView","lounge/views/post"],function(a,b,c,d,e,f,g,h,i,j,k){"use strict";var l=f.get,m=c.View.extend({events:{"click [data-action=more-posts]":"handleLoadMore","click [data-action=show-children]":"handleLoadMoreChildPosts"},STREAMING_MAX_VISIBLE:250,initialize:function(a){this.lounge=a.lounge,this.thread=a.thread,this.userSuggestions=a.userSuggestions,this.posts=a.posts,this.postsToAppend=[],this.postsToPrepend=[],this.session=a.session,this.subViews={},this.state={nextPassTimeoutId:null,renderedPosts:[],clearDomAfterRender:!1,totalPostsProcessed:0,totalElapsedTime:0},this.addPostsIncremental=b.bind(this.addPostsIncremental,this),this.listenTo(this.posts,{reset:this.redrawPosts,add:this.addPosts,remove:this.removePost}),this.listenTo(this.thread,"change:badgeAction",this.handleBadgeAction),this.listenTo(this.thread,"change:highlightedPost",this.handleHasHighlightedState),this.listenToOnce(this.lounge,"threadView:init",function(){this.listenTo(this.thread,"change:isClosed",this.toggleNoPosts),this.listenTo(this.session,"change:id",this.toggleNoPosts),this.listenTo(this.posts,"reset add",this.toggleNoPosts)}),this.listenTo(this.posts,"reset add",this.enableTimestampUpdates),this.listenTo(this,"render:end",this.toggleLoadMorePosts),this.listenTo(this,"render:end",this.handleHasHighlightedState),g.isFeatureActive("limit_rendered_posts",{forum:this.thread.forum.id})&&this.listenTo(this.lounge,"scroll",b.throttle(this.hideOffscreenPosts,200))},handleHasHighlightedState:function(){this.$el.toggleClass("has-highlighted-post",this.thread.has("highlightedPost"))},handleBadgeAction:function(a){var b=this;Object.keys(this.subViews).forEach(function(c){var d=b.subViews[c];d.model.author.id===a.id&&d.updateBadges()})},getPostView:function(a){return this.subViews[a]},bootstrap:function(a,c){this.permalinkOptions=c,this.listenTo(this.posts,"reset",b.bind(this.posts.restoreFromCache,this.posts)),this.listenTo(this.posts,"change:isDeleted",b.bind(this.posts.removeFromCache,this.posts)),this.handleInitialCommentCount(a.posts)},handleInitialCommentCount:function(a){var c=this.thread.forum.get("initialCommentCount");if(!c){var d=g.getSwitchContext("customCommentCounts")||{};c=d[this.thread.forum.id]}this.posts.reset(a,{customThreadLength:c}),b.invoke(this.subViews,"manageMessageHeight")},bindUIUpdateHandlers:function(){var c=this,d=a(window),e=a(window.document.body),f=e.width(),g=b.debounce(function(){var a=e.width();f!==a&&c.subViews&&(f=a,b.each(c.subViews,function(a){a.manageMessageHeight()}))},50);d.on("resize",g)},updateTimestamps:function(){return!(!this.subViews||b.size(this.subViews)<1)&&(b.invoke(this.subViews,"updateRelativeTime"),!0)},enableTimestampUpdates:function(){var a=this,c=6e4;if(!a.timestampUpdateTimer){var d=function e(){return a.updateTimestamps()?void(a.timestampUpdateTimer=b.delay(e,c)):void(a.timestampUpdateTimer=null)};a.timestampUpdateTimer=b.delay(d,c)}},openReply:function(a){var b=this.posts.get(a);if(b){var c=this.subViews[b.cid];c.showReply()}},openEdit:function(a){var b=this.posts.get(a);if(b){var c=this.subViews[b.cid];c.showEdit()}},toggleLoadMorePosts:function(){var a=this.lounge.threadView.$el.find("#posts [data-role=more]"),b=this.posts.hasNext();b?a.show():a.hide()},handleLoadMore:function(a){var b=this.posts.currentPage();this._loadMore(a),this.lounge.trigger("uiAction:seeMore",b+1)},handleLoadMoreChildPosts:function(a){var b=a.currentTarget.id.split("-")[1],c=this.posts.get(b);this._loadMore(a,c),this.lounge.trigger("uiAction:seeMoreChildren",a)},_loadMore:function(b,c){b.preventDefault();var d=this,f=a(b.currentTarget);f.addClass("busy"),d.posts.more({post:c,success:function(){d.posts.restoreFromCache(),d.once("render:end",function(){f.removeClass("busy")})},error:function(){f.removeClass("busy")}}),e.frame.sendHostMessage("posts.paginate")},renderLayout:a.noop,toggleNoPosts:function(){var a,b=this.lounge.threadView.$el.find("#no-posts");this.posts.models.length?b.hide():(a=l(this.thread.get("isClosed")?"This discussion has been closed.":this.session.get("canReply")?"Be the first to comment.":"Nothing in this discussion yet."),b.text(a),b.show())},handleSort:function(){a("#posts [data-role=more]").hide(),a("#no-posts").hide(),a("#post-list").addClass("loading").empty()},redrawPosts:function(){var a=this;a.subViews={},a.once("render:end",function(){b.each(j.open,function(b,c){var d=a.subViews[c];if(d){var e=d.getReplyView();e.textarea.set(b.textarea.get()),b.isOpen()?e.show():e.hide()}})}),a.posts.setPageFor&&a.permalinkOptions&&a.permalinkOptions.postId&&a.posts.setPageFor(a.permalinkOptions.postId,{silent:!0}),a.addPosts(a.posts,{clearDom:!0})},hideOffscreenPosts:function(a){var c=a.pageOffset,d=this.lounge.position.frameOffset.top,e=2*a.height,f=c-e,g=c+a.height+e;b.isNumber(c)&&b.isNumber(e)&&b.each(this.subViews,function(a){var b=a.$el,c=b.offset().top+d,e=c+b.outerHeight();eg?b.addClass("invisible"):b.removeClass("invisible")})},postsShouldBePrepended:function(a){var b=a.length&&a[0];return Boolean(b&&(b.created||!b.id||b.get("isRealtime")||b.get("isCached")||b.requestedByPermalink))},hasQueuedPosts:function(){return this.postsToAppend.length||this.postsToPrepend.length},addPosts:i.decorate(c.collectionAddNormalizer(c.Collection,h.Post),function(a,c,d){var e=this;if(d.clearDom&&(e.postsToAppend=[],e.postsToPrepend=[],e.postsShouldClearDom=!0),e.postsShouldBePrepended(a)){var f=[];b.each(a,function(a){var b=a.get("parent");b&&e.posts.get(b)?e.postsToPrepend.push(a):f.push(a)}),e.postsToPrepend=f.concat(e.postsToPrepend)}else e.postsToAppend=e.postsToAppend.concat(a);e.state.nextPassTimeoutId||(e.state.nextPassTimeoutId=b.defer(function(){e.trigger("render:start"),e.addPostsIncremental(!0)}))}),onDeferredViewReady:function(a){var b=this.subViews;b.hasOwnProperty(a)&&b[a].manageMessageHeight()},removePost:function(a){if(this.hasQueuedPosts())return void this.once("render:end",b.bind(this.removePost,this,a));var c=this.subViews[a.cid];c&&(c.remove(),delete this.subViews[a.cid])},addPostsIncremental:function(a){this.state.nextPassTimeoutId=null,this.discardRenderProgressIfClearDomRequested();var b=this.getPostModelsForThePass();b.length&&this.renderPass(b,a?m.FIRST_ATTEMPT_TIME_SCALE:void 0),this.finishPass(b),this.scheduleNextPass()},discardRenderProgressIfClearDomRequested:function(){this.postsShouldClearDom&&(this.state.clearDomAfterRender=!0,this.postsShouldClearDom=!1,this.state.renderedPosts=[])},getPostModelsForThePass:function(){return this.postsToAppend.length?this.postsToAppend:this.postsToPrepend},renderPass:function(a,b){var c=m.TARGET_PROCESS_TIME;b&&(c*=b);for(var d=this.calculatePostsForNextRun(c)||m.MINIMUM_POSTS_PER_RUN;d>0;){var e=a.splice(0,d),f=this.timedRenderPosts(e);if(null===f)break;c-=f,d=this.calculatePostsForNextRun(c)}},timedRenderPosts:function(a){if(!a.length)return null;var c=Number(new Date);this.state.renderedPosts=this.state.renderedPosts.concat(b.map(a,this.createPostView,this));var d=Number(new Date)-c;return d<0&&(d=0),this.state.totalElapsedTime+=d,this.state.totalPostsProcessed+=a.length,d||null},createPostView:function(a){var b,c=a.get("parent");c&&(c=this.posts.get(c),b=c&&this.getPostView(c.cid));var d=new k({parent:b,model:a,thread:this.thread,session:this.session,created:a.created,userSuggestions:this.userSuggestions});return this.subViews[a.cid]=d,d.render(),d},calculatePostsForNextRun:function(a){return a<=0?0:this.state.totalElapsedTime<=0?this.state.totalPostsProcessed:Math.floor(a*this.state.totalPostsProcessed/this.state.totalElapsedTime)},finishPass:function(a){if(!a.length){if(this.$postList=this.lounge.threadView.$el.find("#post-list"),this.state.clearDomAfterRender&&(this.$postList.empty(),this.state.clearDomAfterRender=!1),this.state.renderedPosts.length){this.removeOldPostsIfRealtime(),this.enablePostTracking(this.state.renderedPosts);var b=a===this.postsToAppend;this.insertPostElements(this.state.renderedPosts,b),this.state.renderedPosts=[]}this.$postList.removeClass("loading"),this.postsToPrepend.length||this.postsToAppend.length||this.trigger("render:end")}},removeOldPostsIfRealtime:function(){var a=b.any(this.state.renderedPosts,function(a){return a.model.get("isRealtime")});a&&this.removeOldPosts()},removeOldPosts:function(){var a=b.size(this.subViews)-this.STREAMING_MAX_VISIBLE;if(!(a<=0))for(var c,e=this.posts.sortBy(function(a){return d(a.get("createdAt")).valueOf()}),f=0,g=0;g0?(this.$("[data-role=notification-count]").html(a>9?'9':a),this.$el.addClass("unread")):(this.$("[data-role=notification-count]").html(""),this.$el.removeClass("unread"))}});return{NotificationMenuView:i}}),define("templates/lounge/highlightedPost",["react","core/strings"],function(a,b){"use strict";var c=b.gettext,d=function(b){return a.createElement("div",null,b.isRefreshEnabled?null:a.createElement("h2",{className:"highlighted-comment-header"},c("Featured Comment")),a.createElement("ul",{className:"post-list"}))};return d}),define("lounge/views/highlighted-post",["backbone","underscore","jquery","core/switches","core/UniqueModel","common/models","lounge/views/post","templates/lounge/highlightedPost"],function(a,b,c,d,e,f,g,h){"use strict";var i=g.extend({getPostAttributes:function(){var a=g.prototype.getPostAttributes.apply(this,arguments);return a.hasMore=!1,d.isFeatureActive("embed_refresh",{forum:this.thread.forum.id})?a.hideParent=!0:a.canBeRepliedTo=!1,a},getStateByline:function(){return!1}}),j=a.View.extend({template:h,itemViewContainer:".post-list",initialize:function(a){b.extend(this,b.pick(a,["thread","session","userSuggestions"])),this.listenTo(this.thread,"change:highlightedPost",this.reset)},getPost:function(){return this.post?c.Deferred().resolve(this.post):this.getHighlightedPost()},_getHighlightedPost:function(){var a=this.thread.get("highlightedPost");return a?(a instanceof f.Post||(a=new e(f.Post,a)),a.get("isDeleted")?null:a.get("sb")&&!a.isAuthorSessionUser(this.session)?null:a.get("isHighlighted")?a:null):null},getHighlightedPost:function(){var a,e=this.post=this._getHighlightedPost(),g=c.Deferred();return e?!(a=e.getParent())||a.author||d.isFeatureActive("embed_refresh",{forum:this.thread.forum.id})?e.sync("read",e).always(b.bind(g.resolve,g)):f.Post.fetchContext(e.id,this.thread).always(b.bind(g.resolve,g)):g.reject(),g.promise()},reset:function(){delete this.post,this.getPost().always(b.bind(this.render,this))},createPostView:function(){return this.post?new i({model:this.post,thread:this.thread,session:this.session,userSuggestions:this.userSuggestions,excludeAnchor:!0}).stopListening(this.post.usersTyping):null},render:function(){var a=this.createPostView();return a?(a.render(),this.$el.html(this.template({isRefreshEnabled:d.isFeatureActive("embed_refresh",{forum:this.thread.forum.id})})),this.$(this.itemViewContainer).append(a.el),this.$el.show(),this):(this.$el.hide(),this)}});return{HighlightedPostView:j,FeaturedPostView:i}}),define("templates/lounge/realtimeCommentNotification",["core/strings","core/switches"],function(a,b){"use strict";var c=a.gettext,d=function(a){var d=b.isFeatureActive("embed_refresh",{forum:a.forumId});return 1===a.comments?c(d?"+1 new comment":"Show One New Comment"):d?c("+%(comments)s new comments",{comments:a.comments}):c("Show %(comments)s New Comments",{comments:a.comments})};return d}),define("templates/lounge/realtimeReplyNotification",["react","core/strings","core/switches"],function(a,b,c){"use strict";var d=b.gettext,e=function(b){var e=c.isFeatureActive("embed_refresh",{forum:b.forumId}),f=e?"indicator indicator--refresh":"indicator";return 1===b.replies?[a.createElement("span",{key:"indicator",className:f}),d(e?"+1 new reply":"Show 1 new reply")]:[a.createElement("span",{key:"indicator",className:f}),e?d("+%(replies)s new replies",{replies:b.replies}):d("Show %(replies)s new replies",{replies:b.replies})]};return e}),define("lounge/views/realtime",["underscore","backbone","react","react-dom","core/bus","core/utils","core/utils/object/get","lounge/common","templates/lounge/realtimeCommentNotification","templates/lounge/realtimeReplyNotification"],function(a,b,c,d,e,f,g,h,i,j){"use strict";var k=f.preventDefaultHandler,l=b.View.extend({events:{click:"handleDrain"},initialize:function(a){this.options=a},getDirection:function(a){if(this.offset&&this.dim){var b=a.pageOffset,c=b+a.height,d=this.offset.top+a.frameOffset.top,e=d+this.dim.height;return ec?-1:0}},setCount:function(a){this.options.count=a},render:function(){return 0===this.options.count?void this.$el.hide():(d.render(c.createElement(i,{comments:this.options.count,forumId:this.model.get("forum")}),this.el),this.listenTo(h.getLounge(),"domReflow",a.throttle(function(){0!==this.options.count&&(this.offset=this.$el.offset(),this.dim={height:this.$el.height(),width:this.$el.width()})},400)),this.$el.show(),this)},handleDrain:k(function(){this.model.queue.drain(),this.setCount(this.model.queue.counters.comments),this.render(),e.trigger("uiAction:loadLiveComments")})}),m=l.extend({events:{click:"handleDrain"},getDirection:function(a){if(this.options.postView.visible){this.offset=this.options.postView.offset,this.dim=this.options.postView.dim;var b=l.prototype.getDirection.call(this,a);return delete this.offset,delete this.dim,b}},render:function(){var b=this,e=b.options.postView;return 0===b.options.count?(b.$el.hide(),void(e.trackPosition=!1)):(e.trackPosition=!0,e.calcRect(),d.render(c.createElement(j,{replies:b.options.count,forumId:this.model.get("forum")}),this.el),b.$el.show(),void a.delay(function(){b.$el.addClass("reveal")},13))},handleDrain:k(function(){var a=this.model.id,b=this.options.postView,c=this.options.thread.queue;c.drain(a),this.setCount(c.counters.replies[a]),b.trackPosition=!1,this.render(),e.trigger("uiAction:loadLiveReplies")})});return{QueuedPostView:l,QueuedReplyView:m}}),define("lounge/views/posts/UserSuggestionsManager",["underscore","common/collections"],function(a,b){"use strict";function c(a){this.remotes=[],this.threadId=a.threadId,this.userCollection=new b.UserSuggestionsCollection([],{threadId:this.threadId})}return a.extend(c.prototype,{fetch:function(a,b){this.userCollection.fetch({query:a||"",next:b})},addRemote:function(a){this.remotes.push(a)},all:function(){var c=new b.UserCollection;return c.add(this.userCollection.models),c.add(a.chain(this.remotes).pluck("models").flatten().value()),c},find:function(a,b){a&&a.length&&this.fetch(a.join(" ").replace(/[^\w\s]/,""),b)},get:function(a){return this.userCollection.get(a)}}),c}),define("lounge/views/sidebar",["underscore","backbone","modernizr","core/bus","core/switches","core/utils/url/serialize","core/shared/urls","core/utils"],function(a,b,c,d,e,f,g,h){"use strict";var i=b.View.extend({initialize:function(a){this.forum=a.forum,this.session=a.session,this.config=a.config,this.language=window.document.documentElement.lang,"en"===this.language&&(this.language=void 0),this.listenTo(this.session,"change:id",this.destroyHome),this.listenTo(d,{"sidebar:open":this.open,"sidebar:preload":this.preload}),this.iframeAlive=!0,this.iframeReady=!1,this.listenToOnce(d.frame,"home.timeout",this.handleTimeout),this.listenToOnce(d.frame,"home.ready",this.handleReady)},isIE9:function(){return 9===window.document.documentMode},shouldUseIframe:function(){return!!this.iframeAlive&&(this.session.isSSO()||this.forum&&this.forum.get("settings").sidebarEnabled)},handleTimeout:function(){this.iframeAlive=!1},handleReady:function(){this.iframeReady=!0,d.frame.off("home.timeout")},open:function(b,c){if(this.shouldUseIframe()){if(this.storeHomeSession(),d.frame.sendHostMessage("home.show",{path:b,language:this.language,forum:this.forum&&this.forum.id}),this.iframeReady||this.listenToOnce(d.frame,"home.timeout",a.bind(this.open,this,b,c)),c){c.trigger("sidebar:open:start");var e=a.bind(c.trigger,c,"sidebar:open:done");this.listenToOnce(d.frame,{"home.opened":e,"home.timeout":e})}}else h.openWindow(f(g.apps.home+b,{l:this.language}));var i="unknown";0===b.indexOf("home/forums/")?i="community":0===b.indexOf("by/")?i="profile":"home/inbox/"===b&&(i="notifications"),d.trigger("uiAction:openHome",i,this.shouldUseIframe())},destroyHome:function(){d.frame.sendHostMessage("home.destroy")},preload:function(){this.session.isLoggedOut()||this.shouldUseIframe()&&(this.storeHomeSession(),d.frame.sendHostMessage("home.preload",{language:this.language}))},storeHomeSession:function(){c.sessionstorage&&window.sessionStorage.setItem("home.session",JSON.stringify(this.session.user.toJSON()))}});return i}),define("core/constants/ratingsConstants",["exports"],function(a){"use strict";a.DEFAULT_RATINGS={average:0,breakdown:{1:0,2:0,3:0,4:0,5:0},count:0}});var _slicedToArray=function(){function a(a,b){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!b||c.length!==b);d=!0);}catch(i){e=!0,f=i}finally{try{!d&&h["return"]&&h["return"]()}finally{if(e)throw f}}return c}return function(b,c){if(Array.isArray(b))return b;if(Symbol.iterator in Object(b))return a(b,c);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();define("core/templates/react/RatingsScoreTemplate",["react","underscore","core/strings"],function(a,b,c){"use strict";var d=function(b){var c=b.breakdown,d=b.totalCount;return a.createElement("div",{className:"ratings-breakdown-units align align--stretch"},a.createElement("div",{className:"align__item--flex-1 align align--column"},c.map(function(b,c){var e=b.rating,f=b.count,g=b.percentage;return a.createElement("div",{className:"ratings-breakdown-unit-row align align--middle",key:c},a.createElement("div",{className:"ratings-breakdown-text"},e," ",a.createElement("div",{className:"rating-star"},"★")),a.createElement("div",{className:"align__item--flex-1 align align--center align--middle"},a.createElement("div",{className:"ratings-breakdown-outer-bar"},a.createElement("div",{className:"ratings-breakdown-inner-bar"+(d&&f?"":" no-rating"),style:{width:g/2+"px"}}))))})),a.createElement("div",{className:"align align--column"},c.map(function(b,c){var d=b.percentage;return a.createElement("div",{key:c,className:"ratings-breakdown-unit-row ratings-breakdown-percentage align__item--flex-1 align align--center"},a.createElement("div",{className:"align__item--flex-1 text-right"},d,"%"))})),a.createElement("div",{className:"align align--column"},c.map(function(b,c){var d=b.count;return a.createElement("div",{key:c,className:"ratings-breakdown-unit-row ratings-breakdown-percentage align__item--flex-1 align align--center"},a.createElement("div",{className:"align__item--flex-1 text-left"},"(",d,")"))})))},e=function(e){var f=e.totalCount,g=e.average,h=e.breakdown,i=e.error,j=e.expandClass;return a.createElement("div",{className:"ratings-score"},a.createElement("div",{className:"spacing-top-small align align--center"},1===f?c.gettext("1 Rating"):c.gettext("%(totalCount)s Ratings",{totalCount:f})),a.createElement("div",{className:"ratings-items align align--center align--middle",tabIndex:"0"},a.createElement("div",{className:"ratings-stars"},a.createElement("div",{className:"stars score-stars",style:{width:20*g+"%"}},a.createElement("div",{className:"rating-star"},"★"),a.createElement("div",{className:"rating-star"},"★"),a.createElement("div",{className:"rating-star"},"★"),a.createElement("div",{className:"rating-star"},"★"),a.createElement("div",{className:"rating-star"},"★")),a.createElement("div",{className:"stars base-stars"},a.createElement("div",{className:"rating-star"},"★"),a.createElement("div",{className:"rating-star"},"★"),a.createElement("div",{className:"rating-star"},"★"),a.createElement("div",{className:"rating-star"},"★"),a.createElement("div",{className:"rating-star"},"★"))),a.createElement("div",{className:"ratings-average"},(Math.round(10*g)/10).toFixed(1),a.createElement("div",{className:"ratings-breakdown "+j},a.createElement("div",{className:"ratings-breakdown-notch-border"}),a.createElement("div",{className:"ratings-breakdown-notch"}),a.createElement(d,{breakdown:b.sortBy(b.mapObject(h,function(a,b){return[Number(b),a]}),function(a){return-a[0]}).map(function(a){var b=_slicedToArray(a,2),c=b[0],d=b[1];return{rating:c,count:d,percentage:f&&d?(100*d/f).toFixed():0}}),totalCount:f})))),a.createElement("div",{className:"err text-semibold"},i||""))};return e});var _extends=Object.assign||function(a){for(var b=1;b=g){d=!1;break}j.push(o)}}if(e){var p=16;a(".reaction-tooltip").each(function(b,c){a(c).height()>p&&(c.style.top="-68px")})}a(".reaction-items__container").width(Math.max.apply(null,j)+1)},e=function(b){var c=a(".reaction-items").width();c!==b._lastReactionsWidth&&(b._lastReactionsWidth=c,d(b.forum))},f=function(c){c._lastReactionsWidth=a(".reaction-items").width();var d=200;c._reactionsResizeListener=b.debounce(b.partial(e,c),d),a(window).resize(c._reactionsResizeListener)},g=function(b){b._reactionsResizeListener&&a(window).off("resize",b._reactionsResizeListener)};return{attachReactionsListener:f,formatReactionsItems:d,detachReactionsListener:g}}),define("core/constants/reactionConstants",["exports","core/strings"],function(a,b){"use strict";var c=b.get,d="//c.disquscdn.com/next/current/publisher-admin/assets/img/emoji/";a.DEFAULT_REACTIONS=[{text:"Upvote",imageUrl:d+"upvote-512x512.png"},{text:"Funny",imageUrl:d+"funny-512x512.png"},{text:"Love",imageUrl:d+"love-512x512.png"},{text:"Surprised",imageUrl:d+"surprised-512x512.png"},{text:"Angry",imageUrl:d+"angry-512x512.png"},{text:"Sad",imageUrl:d+"sad-512x512.png"}],a.DEFAULT_PROMPT=c("What do you think?"),a.DEFAULT_DESCRIPTIONS=["Upvote","Funny","Love","Surprised","Angry","Sad"],a.UPLOAD_IMAGE_ERROR_MESSAGES={"invalid-image-file":"Unfortunately your image upload failed. Please verify that the file is valid and in a supported format (JPEG, PNG, or GIF).","invalid-content-type":"Unfortunately your image upload failed. Please verify that the file is in a supported format (JPEG, PNG, or GIF).","file-too-large":"Unfortunately your image upload failed. Please verify that your image is under 5MB.","not-authenticated":"You must be logged in to upload an image.","default":"Unfortunately your image upload failed. Please verify that your image is in a supported format (JPEG, PNG, or GIF) and under 5MB. If you continue seeing this error, please try again later."}});var _extends=Object.assign||function(a){for(var b=1;b"+c+": "+b+""},"")),this}}),Ea=c.View.extend({initialize:function(a){this.forum=a.forum,this.session=a.session,this.thread=a.thread,this.listenTo(this.session,"change:id",this.render),this.listenTo(this.thread,"change",this.render),this.listenTo(aa.settings,"change:collapsed",this.onMediaCollapseChange),this.listenToReactions()},listenToReactions:function(){this.thread.get("reactions")?this.listenTo(this.thread.get("reactions"),"sync change:enabled",this.render):this.listenToOnce(this.thread,"change:reactions",this.listenToReactions)},render:function(){return i.render(h.createElement(pa,{user:this.session.toJSON(),forum:this.forum.toJSON(),thread:this.thread.toJSON(),sso:this.session.get("sso")}),this.el),this.onMediaCollapseChange(),this},onMediaCollapseChange:function(){aa.settings.get("collapsed")?this.$el.addClass("media-collapsed"):this.$el.removeClass("media-collapsed")}}),Fa=c.View.extend({events:{"click [data-action=share\\:twitter]":"_onShare","keyup [data-action=share\\:twitter]":"_onShare","click [data-action=share\\:facebook]":"_onShare","keyup [data-action=share\\:facebook]":"_onShare"},_onShare:za(function(a){var b=13;if(!a.keyCode||a.keyCode===b){var c=w.extractService(a.target,"share");c&&this.sharers[c]&&(U.getLounge().trigger("uiAction:threadShare",c),this.share(c))}}),render:function(){return i.render(h.createElement(qa,{forum:this.model.forum.id}),this.el),this}});b.extend(Fa.prototype,W.ShareMixin);var Ga=c.View.extend({events:{"change input[name=tos], input[name=privacy-policy]":"updateEnabled"},initialize:function(a){this.isPrivate=a.isPrivate,this.session=a.session},updateEnabled:function(){this.$("#accept_tos").prop("disabled",!!this.isPrivate&&!this.areTosAccepted())},areTosAccepted:function(){return this.$("input[name=tos]").prop("checked")&&this.$("input[name=privacy-policy]").prop("checked")},onAccept:function(){if(!this.isPrivate||this.areTosAccepted()){var a=this.$("input[name=data-sharing]");a.length&&l.call("internal/users/setDNT",{method:"POST",data:{value:a.prop("checked")?0:1}}),l.call("users/acceptTerms",{method:"POST"}),this.close()}},close:function(){this.remove()},render:function(){return i.render(h.createElement(ta,{onAccept:this.onAccept.bind(this),isPrivate:this.isPrivate}),this.el),this.updateEnabled(),this; +}}),Ha=c.View.extend({initialize:function(a){this.thread=a.thread,this.postCount=a.thread.get("posts")||0,this.settings=a.settings},render:function(){return i.render(h.createElement(R,{postCount:this.postCount,titleEnabled:this.settings.title_enabled,titleText:this.settings.title_text,titleCSS:this.settings.title_css,buttonText:this.settings.button_text,buttonCSS:this.settings.button_css}),this.el),this}}),Ia=c.View.extend({initialize:function(a){this.thread=a.thread,this.forum=a.forum,this.inHome=a.inHome,this.hideFooter=a.hideFooter},render:function(){return i.render(h.createElement(S,{thread:this.thread.toJSON(),forum:this.forum.toJSON(),inHome:this.inHome,hideFooter:this.hideFooter,isPolicyAccepted:!!J.get("isPolicyAccepted:"+this.forum.id)}),this.el),this}}),Ja=c.View.extend({events:{"click [data-action^=auth\\:]":"handleAuth","click [data-action=logout]":"handleLogout","click [data-action=audiencesync]":"audienceSync","click [data-action=profile]":"handleShowProfile","click [data-action=sort]":"handleSort","click [data-action=toggle-thread-premoderate]":"toggleThreadPremoderate","click [data-action=toggle-thread]":"toggleThread","click [data-action=toggle-thread-ratings]":"toggleThreadRatingsEnabled","click [data-action=toggle-thread-visibility]":"toggleBehindClick","click [data-action=debug]":"renderDebugInfo","click [data-action=repair]":"repairThread","click [data-action=toggle-media]":"toggleMedia","click [data-action=toggle-reactions]":"toggleReactions","click a":"handleLinkClick","click [data-action=accept-comment-policy]":"setPolicyAccepted","click [data-action=toggle-embed-refresh]":"toggleEmbedRefresh"},initialize:function(c){U.setLounge(this),c=c||{};var d=c.jsonData||{};this.language=xa.documentElement.lang,this.initialData=d.response||{},this.cleanInitialData(this.initialData),this.onboardWindowName=w.globalUniqueId("disqus_"),this.initialData.forum&&this.initialData.forum.id&&(z.moderate=w.updateURL(z.moderate,{hostname:this.initialData.forum.id+"."})),this.deferredViews=[],this.unsortedDeferredViews=[],this.inthreadAdApps=[],this.adPromise=a.Deferred().resolve(),C.setDefaults(this.initialData.session),this.session=C.get(),this.forum=new u.Forum,this.forum.set(this.initialData.forum),this.thread=new u.Thread(this.initialData.thread,{forum:this.forum,postCursor:d.cursor,moderators:(this.initialData.thread||{}).moderators,order:d.order}),this.initUserSuggestionsManager(),this.postsView=new _.PostCollectionView({posts:this.thread.posts,thread:this.thread,lounge:this,session:this.session,el:this.el,userSuggestions:this.userSuggestions}),this.states={fullyVisible:!1,realtimeIndicatorsCreated:!1,streamingPaused:!1,inViewport:!1,behindClick:!1},wa.timings.loungeStart=Number(new Date);var e=b.bind(this.bootstrap,this);F(window)?(this.listenTo(x.frame,"init",e),this.initThreadView()):b.defer(e),this.setAlertSelector("#layout"),this.initResizeHandler(),this.initAlertListeners()},setPolicyAccepted:function(){J.set("isPolicyAccepted:"+this.forum.id,!0),this.$el.find("#comment-policy").addClass("hidden")},cleanInitialData:function(a){var c=a.thread&&a.thread.highlightedPost;c&&(c.isHighlighted=!0),b.each(a.posts,function(a){c?a.isHighlighted=a.id===c.id:a.isHighlighted=!1})},initAlertListeners:function(){this.listenTo(this.session,"alert",this.alert)},initOnboardAlert:function(){var a=this.onboardAlert=new ba.OnboardAlert({session:this.session,forum:this.forum});this.proxyViewEvents(this.onboardAlert),this.listenTo(this.session,"change:id",function(){a.setInitialCookie(),a.render().$el.appendTo("#onboard")})},bootstrap:function(a){var c,d=this,e={};d.config=a=a||w.getConfigFromHash(window),a.forceSwitch&&M.forceFeature(a.forceSwitch),a.loaderVersion=wa.version,d.states.fullyVisible=a.startedFullyVisible,k.init({isPrivate:a.isPrivate});var f=a.experiment;if(f){if(f.experiment&&f.variant){var g=f,h=g.experiment,i=g.variant;h=h.replace(/_hidden$/,""),M.forceFeature(["experiment",h,i].join(":"))}}else a.experiment=f={};a.apiKey&&(e["X-Disqus-Publisher-API-Key"]=a.apiKey),b.isObject(a.remoteAuthS3)&&b.isEmpty(a.remoteAuthS3)?a.remoteAuthS3=null:e["X-Disqus-Remote-Auth"]=a.remoteAuthS3,b.isEmpty(e)||l.headers(e),a.anchorColor&&(c=G(a.anchorColor),w.setPublisherColor(c),w.addStylesheetRules([[".publisher-anchor-color a",["color",c,!0]],["a.publisher-anchor-color",["color",c,!0]],[".publisher-anchor-hover a:hover",["color",c,!0]],["a.publisher-anchor-hover:hover",["color",c,!0]],[".active .publisher-nav-color:after",["background",c,!0]],[".media-preview .active.publisher-border-color",["border-color",c,!0]],[".publisher-color",["color",c,!1]],[".publisher-color:hover",["color",c,!1]],[".publisher-background-color",["background-color",c,!1]],[".publisher-border-color",["border-color",c,!1]],[".publisher-color-refresh",["color",c,!0]],[".publisher-color-refresh:hover",["color",c,!0]],[".publisher-background-color-refresh",["background-color",c,!0]],[".publisher-background-color-hover-refresh:hover",["background-color",c,!0]],[".publisher-border-color-refresh",["border-color",c,!0]]])),a.impressionId&&k.impression.setImpressionId(a.impressionId),w.injectBaseElement(),a.referrer&&(d.thread.currentUrl=a.referrer),this.config.inthreadLeadingCommentCount&&(this.config.inthreadLeadingCommentCount=Number(this.config.inthreadLeadingCommentCount),this.config.inthreadRepeatCommentCount=Number(this.config.inthreadRepeatCommentCount),this.config.inthreadTrailingCommentCount=Number(this.config.inthreadTrailingCommentCount));var j=this.getPermalinkOptions(a.parentWindowHash);j&&x.frame.once("embed.rendered",b.bind(d.scrollToPost,d,j.postId,j.options)),a.sso&&d.session.set("sso",a.sso),a.initialPosition?d.position=a.initialPosition:d.position=w.calculatePositionFullscreen(),d.initPrivacySettings(),d.initLinkAffiliation(),d.initLiveRamp(),d.updateModeratorBadgeText(),d.bindBusListeners();var m=wa.timings;m.hostStart=a.timestamp||m.initStart,m.embedLoadTime=a.loadTime,this.once("threadView:prep",function(){d.listenToOnce(d.postsView,"render:start",function(){m.renderStart=Number(new Date)}),d.listenToOnce(d.postsView,"render:end",d.sendTelemetry),m.bootstrapStart=Number(new Date),d.postsView.bootstrap(d.initialData,j),d.initAfterPostCreateHandler(),d.initSession()}),d.initUI(),d.initLinkHandler(),d.initialized=!0,d.trigger("bootstrap:complete",d)},_isInHome:function(a,b){var c=/^(?:https?:)?\/\/(?:www.)?/;return a=a.replace(c,""),b=b.replace(c,""),0===a.indexOf(b)},isInHome:function(){return!(!this.config||!this.config.referrer)&&this._isInHome(this.config.referrer,T.apps.home+"home/")},initSession:function(){var a=this.config,b=this.session,c=this.thread;b.start({remoteAuthS3:a.remoteAuthS3,sso:a.sso,apiKey:a.apiKey,thread:c})},initPrivacySettings:function(){this.listenToOnce(this.session,"change:id",function(a){oa.isPrivate(a)&&m.set({collapsed:{value:!0,persist:!1}})})},initLiveRamp:function(){var a=this.forum.get("settings")||{};a.userIdentityDisabled||this.listenTo(this.session,"change:id",function(a){var b=a.get("email");b&&x.frame.sendHostMessage("liveramp:init",{email:a.get("email"),liveramp:z.liveRampAts,launchpad:z.liveRampAtsV2,ats2_enabled:M.isFeatureActive("ats2_enabled",{forum:this.forum.id})})})},initLinkAffiliation:function(){var a=N.getVersion();if(M.isFeatureActive("viglink_experiment",{forum:this.forum.id,forumPercent:this.forum.id})&&(a=N.getExperimentVersion()),this.isLinkAffiliatorEnabled()&&!this.initLinkAffiliatorCalled&&"none"!==a){this.initLinkAffiliatorCalled=!0;var b=z.linkAffiliatorClientV4;oa.shouldTrack(this.forum,this.session.user)&&"v5"===a&&(b=z.linkAffiliatorClientV5),x.frame.sendHostMessage("viglink:init",{clientUrl:b,apiUrl:z.linkAffiliatorAPI,key:D.viglinkAPI,id:this.forum.get("pk")})}},initAfterPostCreateHandler:function(){this.listenTo(this.thread,"create",function(a){var c=a.toJSON();x.frame.sendHostMessage("posts.create",c),Aa.broadcast("posts.create",b.pick(c,"forum","parent","id"))})},sendTelemetry:function(){if(w.shouldSample(t.lounge.telemetry_sample_percent)){var c=a.now(),d=wa.timings,e={embed:d.embedLoadTime,frame:d.initStart-d.hostStart,asset:d.downloadEnd-d.initStart,render:c-d.renderStart,total:c-d.hostStart-(d.renderStart-d.bootstrapStart)},f=window.performance;if(f){var g=f.timing;g.responseStart&&(e.frame_rtt=g.responseStart-g.navigationStart);var h=b.find(f.getEntries&&f.getEntries()||[],function(a){return a.name.indexOf("/next/config.js")>-1});h&&h.responseStart&&(e.config_rtt=h.responseStart-h.startTime)}var i="lounge_"+("static"===this.config.experiment.service?"static":"dynamic");return A.telemetry(i,e)}},initUI:function(){this.applyPublisherClasses(),this.renderLayout(),this.setAlertSelector("#global-alert"),this.bindUIUpdateHandlers(),this.initDeferredViews(),this.postsView.once("render:end",function(){var a=w.getPageHeight();x.frame.sendHostMessage("rendered",{height:a}),this._lastHeight=a,this.initRealtime()},this),this.once("threadView:prep",this.initUIComponents),this.initThreadView()},initUIComponents:function(){this.initMainPostBox(),this.initTermsOfService(),this.initReactions(),this.initStarRatings(),this.initThreadFooter(),this.initSecondaryNavigation(),this.isInHome()||(this.initTopNavigation(),this.initUserMenu(),this.initOnboardAlert(),this.initNotificationMenu(),this.initFavoriteButton(),this.initThreadShareBar()),this.initHighlightedPost(),this.initBadgesMessage(),this.initEmailSignup(),this.initThreadSubscribe(),this.bindProfileUIListeners(this.session),this.updatePostCount(),this.trigger("threadView:render")},initHighlightedPost:function(){var a=this.thread.get("highlightedPost");a&&!M.isFeatureActive("embed_refresh",{forum:this.forum.id})&&this.thread.posts.add(a),this.highlightedPostView=new da.HighlightedPostView({el:this.threadView.$el.find("#highlighted-post"),thread:this.thread,session:this.session,userSuggestions:this.userSuggestions}),this.highlightedPostView.reset()},initReactions:function(){if(this.forum.get("settings")){if(!this.forum.get("settings").threadReactionsEnabled&&!this.forum.channel)return void this.initReactionsPromotion();var a=new v.ReactionsCollection([],{thread:this.thread,userIsAnonymous:this.session.user.isAnonymous()});this.listenTo(a,"sync",function(){a.length?this.showReactions(a):this.removeReactions()}),this.listenTo(a,"change:enabled",function(){a.enabled?this.showReactions(a):this.removeReactions()}),this.thread.set("reactions",a),a.fetch()}},showReactions:function(a){if(!this.reactionsView){var b=this.reactionsView=new ia({reactions:a,readonly:this.thread.get("isClosed"),session:this.session,forum:this.thread.forum.id});b.render(),this.threadView.$el.find("#reactions__container").prepend(b.$el)}},removeReactions:function(){this.reactionsView&&(this.reactionsView.remove(),this.reactionsView=null)},initReactionsPromotion:function(){if(!this.thread.isModerator(this.session.user))return void this.listenToOnce(this.session,"change:id",this.initReactionsPromotion);var b="reactionsEmbedPromotion",c=this;l.call("announcements/messages/checkViewed",{data:{message:b}}).success(function(d){var e=d.response;if(!e[b]){var f=c.reactionsPromotionView=new ja({forum:c.forum});f.render(),a("#reactions__container").prepend(f.$el)}})},initStarRatings:function(){this.forum.get("features")?H.isForumModelRatingsEnabled(this.forum)&&(this.thread.get("ratingsEnabled")&&this.thread.fetchRatings(),this.listenTo(this.thread,"change",this.showRatings),this.showRatings()):this.listenToOnce(this.thread.forum,"change:features",this.initStarRatings)},showRatings:function(){var a=M.isFeatureActive("star_ratings_total_hidden",{forum:this.forum.id});if(!this.ratingsView&&this.thread&&this.session&&!a){var b=this.ratingsView=new ha({thread:this.thread,session:this.session});b.render(),this.threadView.$el.find("#ratings__container").html(b.$el)}},bindUIUpdateHandlers:function(){var a=this,b=a.thread,c=a.session;a.listenTo(b,{"change:posts":a.updatePostCount}),a.listenTo(b.queue,"add reset",a.toggleRealtimeNotifications),a.postsView.bindUIUpdateHandlers(),a.listenTo(c,"change:id",a.updateThreadSessionData),a.listenTo(a,"scrollOffViewport",function(){this.states.realtimeIndicatorsCreated&&x.frame.sendHostMessage("indicator:hide")}),a.listenTo(a,"scroll",function(a){this.position=a}),a.listenTo(a,"scroll",a.handleRealtimeScroll),a.listenTo(a.postsView,"render:end",function(){a.toggleRealtimeNotifications();var b=a.isInHome()&&K(!0);(a.config.inthreadPlacementUrl||b)&&(b&&L(),a.loadInthreadAd(b))})},whenFullyVisible:function(){var b=a.Deferred();return this.states.fullyVisible?b.resolve():this.listenTo(this,"frame.visible",function(){b.resolve()}),b.promise()},canShowInthreadAd:function(a,b){if(!this.config.inthreadMultipleAds&&a>0)return!1;var c=this.config.inthreadLeadingCommentCount+this.config.inthreadRepeatCommentCount*a,d=c+this.config.inthreadTrailingCommentCount;return b>=d},inthreadAdInit:function(b,c){var d=a.Deferred();return this.inthreadAdApps[b].init(),this.listenToOnce(this.inthreadAdApps[b],"frame:ready",function(){c.css({height:"auto","margin-bottom":"24px"}),d.resolve()}),this.listenToOnce(this.inthreadAdApps[b],"ad-placement-empty",function(){c.css({height:"","margin-bottom":""})}),d.promise()},loadInthreadAd:function(c){var d=this.postsView.$el.find("#post-list");if(!(this.config.adBlockEnabled&&!this.config.defaultPlacementUrl||d.hasClass("loading"))){var e=this.config.inthreadCountChildren?d.find(".post:not(.advertisement)"):d.children(":not(.advertisement)"),f={};0===this.config.experiment.experiment.indexOf("googlewidemargins")&&"fallthrough"!==this.config.experiment.variant&&(f.margin="0 "+this.config.experiment.variant,f["min-width"]="calc(100% - "+2*parseInt(this.config.experiment.variant,10)+"px)");var g;g=this.config.adBlockEnabled&&this.config.defaultPlacementUrl?I(this.config.defaultPlacementUrl,{position:"inthread"}):this.config.inthreadPlacementUrl,c&&(this.config.inthreadLeadingCommentCount=1,this.config.inthreadRepeatCommentCount=8,this.config.inthreadTrailingCommentCount=0);for(var h=this.inthreadAdApps.length;this.canShowInthreadAd(h,e.length);h++){var i=this.config.inthreadLeadingCommentCount+this.config.inthreadRepeatCommentCount*h,k=a(sa());if(e&&e.length&&e[i]?k.insertBefore(e[i]):k.appendTo(a("#post-list")),this.inthreadAdApps[h]=j.Ads(b.extend({adUrl:g,placement:"inthread",container:k.find("[data-role=post-content]")[0],isInHome:this.isInHome(),isOnHostPage:!1,forumId:this.forum.get("pk"),version:this.config.version,styles:f},this.config)),!c){var l=this.inthreadAdInit.bind(this,h,k);0===h?this.adPromise=this.whenFullyVisible().then(l):this.adPromise=this.adPromise.then(l)}}}},relayScrollToStance:function(a){f.scroll({top:a.pageOffset-a.frameOffset.top,height:a.height})},initDeferredViews:function(){this.listenTo(this,"scroll",this.createDeferredViewsForImages),this.listenTo(this,"domReflow",function(){f.invalidate(),this.position&&(this.createDeferredViewsForImages(),this.relayScrollToStance(this.position))})},bindBusListeners:function(){this.listenTo(x.frame,{"window.hashchange":function(a){var b=this.getPermalinkOptions(a);b&&this.scrollToPost(b.postId,b.options)},"window.scroll":function(a){this.trigger("scroll",a),this.relayScrollToStance(a)},"window.inViewport":function(){this.states.behindClick||(this.states.inViewport=!0,this.trigger("inViewport"))},"window.scrollOffViewport":function(){this.states.inViewport=!1,this.trigger("scrollOffViewport")},"frame.visible":function(){this.states.fullyVisible=!0,this.trigger("frame.visible")},error:function(a){a=JSON.parse(a),e.captureException(a.error,{extra:{details:a.details},culprit:a.culprit})},"window.resize":this.resize,"indicator:click":this.handleRealtimeClick}),this.listenToOnce(this.session,"change:id",this.initSidebar)},isLinkAffiliatorEnabled:function(){return this.forum.get("settings").linkAffiliationEnabled&&!this.isInHome()},initLinkHandler:function(){this.outboundLinkHandler=new P,this.outboundLinkHandler.registerBeforeNavigationHandler(this.logLinkClick,this)},handleLinkClick:function(a){this.outboundLinkHandler.handleClick(a)},initRealtimeIndicators:function(){var a=this;if(!a.states.realtimeIndicatorsCreated){var c=["north","south"].reduce(function(c,d){return c[d]={contents:'\n\n\n \n \n Disqus Realtime Notification\n \n \n \n
              -
              \n \n\n'},c},{});x.frame.sendHostMessage("indicator:init",c),a.states.realtimeIndicatorsCreated=!0}},insertStreamingComments:b.throttle(function(){var a=this.thread.queue;a.drain(),b.each(a.counters.replies,function(b,c){a.drain(c)})},1e3),updateModeratorBadgeText:function(){var a=this.forum.get("moderatorBadgeText");a&&(y.translations.Mod=a)},logLinkClick:function(b){var c=a(b.currentTarget);if(E.clickShouldBeLogged(b,c))return A.client.emit({verb:"click",object_type:"link",object_id:c[0].href,area:oa.getEventTrackingArea(b)})},handleRealtimeScroll:function(a){if(this.states.inViewport&&this.states.realtimeIndicatorsCreated){var c=b.union([this.queueView],b.values(this.postsView.subViews)),d=0,e=0;b.each(c,function(b){if(b&&!b.getDirection&&(b=b.queueView),b&&!(b.options.count<=0)){var c=b.getDirection(a);1===c?d+=b.options.count:c===-1&&(e+=b.options.count)}});var f,g,h=function(a){var c=a.orientation,d=a.num,e=void 0;return e="north"===c?1===d?ya("One new comment above."):y.interpolate(ya("%(num)s new comments above."),{num:d}):1===d?ya("One new comment below."):y.interpolate(ya("%(num)s new comments below."),{num:d}),"

              "+b.escape(e)+"

              "};g={type:"north"},d>0?(f="indicator:show",g.content=h({num:d,orientation:"north"})):f="indicator:hide",x.frame.sendHostMessage(f,g),g={type:"south"},e>0?(g.content=h({num:e,orientation:"south"}),f="indicator:show"):f="indicator:hide",x.frame.sendHostMessage(f,g)}},handleRealtimeClick:function(a){var c=this;x.frame.sendHostMessage("indicator:hide",{type:a});var d,e,f,g=b.union([c],b.toArray(c.postsView.subViews));g=b.filter(g,function(b){if(b=b.queueView,!b||b.options.count<=0)return!1;var d="north"===a?1:-1;return b.getDirection(c.position)===d}),g=b.sortBy(g,function(a){return a===c?0:a.offset.top}),d="north"===a?b.last(g):b.first(g),e=d.queueView,d===c?(f=0,e.handleDrain()):(f=d.offset.top-100,e.handleDrain()),U.getLounge().once("domReflow",b.bind(x.frame.sendHostMessage,x.frame,"scrollTo",{top:f}))},toggleRealtimeNotifications:function(){var a=this,c=a.thread.queue;if(b.defer(function(){x.frame.sendHostMessage("fakeScroll")}),!c.length)return void a.$el.find("[data-role=realtime-notification]").hide();if(a.thread.get("hasStreaming"))return void a.insertStreamingComments();if(c.counters.comments){var d=a.queueView||new ea.QueuedPostView({model:a.thread,el:a.$el.find("button[data-role=realtime-notification]")});a.queueView=d,d.setCount(c.counters.comments),d.render()}b.each(c.counters.replies,function(b,c){var d=a.thread.posts.get(c);if(d){var e=a.postsView.getPostView(d.cid);if(e){var f=e.queueView;f||(f=new ea.QueuedReplyView({thread:a.thread,postView:e,model:d,el:e.$el.find("[data-role=realtime-notification\\:"+c+"] a")}),e.queueView=f),f.setCount(b),f.render()}}})},initBehindClick:function(){var c=this;if(!c.behindClickView&&c.thread&&a("#behindclick__container").length){var d={title_enabled:!1,title_text:null,title_css:null,button_text:null,button_css:null};l.call("forums/behindClick/details",{data:{forum:this.forum.id}}).success(function(a){var e=a.response;c.showBehindClick(b.defaults({},e,d))})}},showBehindClick:function(b){var c=a("#behindclick__container"),d=new Ha({thread:this.thread,settings:b});d.render(),c.html(d.$el),x.frame.sendHostMessage("rendered",{height:w.getPageHeight()})},toggleBehindClick:function(){this.$("#behindclick__container").hide(),this.states.behindClick=!1,x.frame.trigger("window.inViewport"),x.trigger("uiAction:behindClickButton"),this.trigger("threadView:prep")},initThreadView:function(){this.createThreadView(),this.forum.get("settings").behindClickEnabled?(this.initBehindClick(),this.states.behindClick=!0):this.trigger("threadView:prep")},createThreadView:function(){if(!this.threadView&&this.thread&&this.session){var a,b=this.isInHome();this.thread.posts.buffer&&(a=this.thread.posts.getOrder());var c=this.threadView=new Ia({thread:this.thread,forum:this.forum,order:a,inHome:b,hideFooter:b});c.render(),this.trigger("threadView:init"),this.once("threadView:render",function(){this.$("#thread__container").html(this.threadView.$el)})}},renderDebugInfo:za(function(){if(this.session.user.get("isGlobalAdmin")){var a=this.thread.forum.get("settings",{}),b=new Da({Shortname:this.thread.get("forum"),"Thread ID":this.thread.get("id"),"Org ID":this.forum.get("organizationId"),"Thread slug":this.thread.get("slug"),"Anchor color":G(this.config.anchorColor),Language:this.thread.forum.get("language"),Recommendations:a.organicDiscoveryEnabled,"Ads enabled":a.adsEnabled,"Ads top enabled":a.adsPositionTopEnabled,"Ads bottom enabled":a.adsPositionBottomEnabled,"Ads in-thread enabled":a.adsPositionInthreadEnabled,"Ads recommendations enabled":a.adsPositionRecommendationsEnabled,"Ads Product Display enabled":a.adsProductDisplayEnabled,"Ads Product Links enabled":a.adsProductLinksEnabled,"Ads Product Video enabled":a.adsProductVideoEnabled,"In iframe":this.config.isHostIframed,"Behind click":this.config.isBehindClick,"Height restricted":this.config.isHeightRestricted});b.render();var c=xa.body;c.insertBefore(b.el,c.firstChild)}}),repairThread:za(function(){this.session.user.get("isGlobalAdmin")&&l.call("internal/threads/repair.json",{method:"GET",data:{thread:this.thread.get("id")},success:b.bind(this.alert,this,"Thread repair has been queued. Refresh in a few seconds."),error:b.bind(this.alert,this,"An error occurred while repairing thread. Please try again.",{type:"error"})})}),getPermalinkOptions:function(a){var b=a&&a.match(/(comment|reply|edit)-([0-9]+)/);if(b)return{postId:b[2],options:{highlight:!0,openReply:"reply"===b[1],openEdit:"edit"===b[1]}}},scrollToPost:function(a,c){c=c||{},c.padding=c.padding||90;var d=this,e=d.$el.find("#post-"+a);if(M.isFeatureActive("embed_refresh",{forum:this.forum.id})&&!e.length&&d.highlightedPostView&&d.highlightedPostView.post&&d.highlightedPostView.post.id===a)e=d.highlightedPostView.$el.find(".post");else if(!e.length)return void u.Post.fetchContext(a,d.thread,{requestedByPermalink:!0}).done(function(){d.postsView.once("render:end",b.bind(d.scrollToPost,d,a,c)),x.frame.once("embed.resized",b.bind(d.scrollToPost,d,a,c))});c.highlight&&(d.$el.find(".post-content.target").removeClass("target"),e.find(".post-content").first().addClass("target")),c.openReply&&d.postsView.openReply(a),c.openEdit&&d.postsView.openEdit(a),x.frame.sendHostMessage("scrollTo",{top:e.offset().top-c.padding,force:c.force||null})},updateThreadSessionData:function(a){if(a){a.get("thread")&&this.thread.set(a.get("thread"));var c=a.get("votes");c&&"object"===("undefined"==typeof c?"undefined":_typeof(c))&&b.each(c,function(a,b){var c=this.postsView.posts.get(b);c&&c.set("userScore",a)},this);var d=a.get("blockedUserIdSet");if(d&&0!==d.size){var e=this.postsView.posts.models;if(e&&"object"===("undefined"==typeof e?"undefined":_typeof(e))){var f={};b.each(e,function(a){var b=a.attributes.id,c=a.author.id;if(f[b]=c,a.attributes.parent){var e=a.attributes.parent,g=f[e];d.has(g)&&a.set("hideReplyPreview",!0)}},this)}}}},initSidebar:function(){this.sidebar=new ga({session:this.session,forum:this.forum,config:this.config})},initNotificationMenu:function(){var a=this.notificationMenu=new ca.NotificationMenuView({el:this.threadView.$el.find("[data-role=notification-menu]")[0],session:this.session,forum:this.forum});a.render()},initUserMenu:function(){var a=this.userMenu=new Ea({el:this.threadView.$el.find("[data-role=logout]")[0],forum:this.forum,session:this.session,thread:this.thread});a.render()},initThreadShareBar:function(){if(!this.thread.forum.get("settings").disableSocialShare){var a=this.threadShareBar=new Fa({el:this.threadView.$el.find("#thread-share-bar")[0],model:this.thread});a.render()}},isRealtimeEnabled:function(){var a=t.lounge.REALTIME||{},b=a.THREAD_STALE_DAYS||7,c=g.unix(this.initialData.lastModified);return!this.thread.get("isClosed")&&g().diff(c,"days")<=b},realtimeHandlers:{Post:function(a){var b=a.data,c=this.thread;if(!this.thread.get("hasStreaming")||!this.states.streamingPaused){if(!b.id)return void d.warn("RT: no post ID");if(!b.author||!b.author.id)return void d.warn("RT: no author or author ID");if(!b.author.name)return void d.warn("RT: no author name or email hash");if(!b.author.username)return void d.warn("RT: no author username");if(!b.post||!b.post.message)return void d.warn("RT: no post message");if(c.posts.get(b.id)||c.queue.get(b.id))return void d.info("RT: duplicate: ",b.id);if("approved"!==b.type)return void d.info("RT: unapproved: ",b.id);if(b.sb)return void d.info("RT: shadowbanned: ",b.id);if(b.type===b.type_prev)return void d.info("RT: Post change message, ignoring for now ",b.id);this.thread.incrementPostCount(1);var e=b.post.parent_post.id;if("0"===e&&(e=null),e&&!c.posts.get(e)&&!c.queue.get(e))return void d.info("RT: parent is not on this page: ",b.id);var f=b.author.name,g=b.author.username,h=b.author.avatar,i=b.author.id;"0"===i&&(i=void 0);var j=new n(u.User,{id:i,name:f,username:g,profileUrl:z.root+"/by/"+g+"/",isAnonymous:!i,avatar:{cache:h,permalink:h}});if(j.get("isBlocked"))return void d.info("RT: blocked: ",b.id);c.users.add(j,{merge:!0}),c.queue.add({id:b.id,user:j,parentId:e,message:b.post.message,createdAt:b.date,media:b.post.media})}},Vote:function(a){var b=a.data;if(b.id&&b.vote){var c=this.thread,e=c.posts.get(b.vote.recipient_post_id);if(e){d.debug("RT: Vote for post ",e.id);var f=e.votes.get(b.id);f||(d.debug("RT: Creating new vote with id ",b.id),f=new r({id:b.id}),e.votes.add(f));var g=e._vote(b.vote.vote,f.get("score"),b.voter);0!==g&&f.set("score",g)}}},ThreadVote:function(a){var b=a.data,c=this.thread;if(b.id&&b.vote&&(!this.session.user.id||b.vote.voter_id!==this.session.user.id)){var d=c.votes.get(b.id);if(d||(d=new q({id:b.id}),c.votes.add(d)),!d.get("currentUser")){var e=c._vote(b.vote.vote,d.get("score"));0!==e&&d.set("score",e)}}},typing:function(a){var c=a.data,d=this.thread,e=c.typing,f=c.post;if(c.thread===d.id&&f){var g=d.posts.get(f);g&&(g.usersTyping.count()<=0&&!e||g.usersTyping.add(u.TypingUser.make(b.extend({client_context:a.lastEventId},c))))}}},initRealtime:function(){var a=X.Manager;if(!a.pipe&&this.isRealtimeEnabled()){this.initRealtimeIndicators(),a.initialize("thread/"+this.thread.id,this.realtimeHandlers,this);var b=function(a){return"POST"===a.method},c=0;this.listenTo(l,"call",function(d){b(d)&&(c+=1,a.pause())}),this.listenTo(l,"complete",function(d){!b(d)||c<=0||(c-=1,c||a.resume())})}},initTopNavigation:function(){var a=this.topNavigation=new la({inHome:this.isInHome(),thread:this.thread});a.render(),this.threadView.$el.find("#main-nav").append(a.el)},initThreadFooter:function(){var a=this.threadFooter=new ma({forum:this.forum});a.render(),this.threadView.$el.find("#footer").append(a.el)},initSecondaryNavigation:function(){var a,b=this.forum.get("votingType")||s.VOTING_TYPES.DEFAULT_VOTING_TYPE,c=b===s.VOTING_TYPES.DISABLED;this.thread.posts.buffer&&(a=this.thread.posts.getOrder());var d=this.secondaryNavigation=new na({inHome:this.isInHome(),order:a,votingDisabled:c,forum:this.thread.forum.id});d.render(),this.threadView.$el.find("#secondary-navigation").append(d.el)},initFavoriteButton:function(){if(this.favoriteButton&&this.favoriteButton.remove(),!M.isFeatureActive("sso_less_branding",{forum:this.forum.id})){var a=this.favoriteButton=new ka({thread:this.thread,session:this.session});this.listenTo(a,{"vote:like":b.bind(this.trigger,this,"uiAction:threadLike"),"vote:unlike":b.bind(this.trigger,this,"uiAction:threadUnlike")}),a.render(),this.threadView.$el.find("#favorite-button").append(a.el)}},initThreadSubscribe:function(){this.threadSubscribeButton=new Ba({session:this.session,thread:this.thread,el:this.threadView.$el.find("#thread-subscribe-button")[0]})},initBadgesMessage:function(){this.badgesMessageView=new Y({forum:this.forum,session:this.session,el:this.threadView.$el.find("#badges-message__container")[0]}).render()},initEmailSignup:function(){this.emailSignupForm=new Z({forum:this.forum,session:this.session,el:this.threadView.$el.find("#email-signup")[0]}).render()},updatePostCount:function(){var a=this.thread.get("posts");this.isInHome()||(this.$postCountContainer=this.$postCountContainer||this.threadView.$el.find("li[data-role=post-count]"),this.$postCountContainer.html(ua({count:a}))),x.frame.sendHostMessage("posts.count",a)},renderLayout:function(){this.addFeatureDetectionClasses(),V.init(this);var b=a(ra({forum:this.forum.toJSON(),thread:this.thread.toJSON()}));b.appendTo(this.$el),this.postsView.renderLayout(),t.readonly?this.alert(ya("The Disqus comment system is temporarily in maintenance mode. You can still read comments during this time, however posting comments and other actions are temporarily delayed."),{type:"info"}):this.listenToOnce(this.session,"change:id",this.showPremoderationAlert)},showPremoderationAlert:function(){this.thread.isModerator(this.session.user)&&!this.getAlert()&&(this.forum.get("settings").validateAllPosts?this.alert(b.escape(ya("Comments on this entire site are premoderated (only moderators can see this message)."))+(' '+b.escape(ya("Change site settings."))+""),{safe:!0,isPremoderateStatus:!0}):this.thread.get("validateAllPosts")&&this.alert(ya("Comments on this thread are premoderated (only moderators can see this message)."),{isPremoderateStatus:!0}))},dismissPremoderationAlert:function(){this.dismissAlert(function(a){return a.options&&a.options.isPremoderateStatus})},addFeatureDetectionClasses:function(){var b=a(xa.documentElement);(this.config.forceMobile||E.isMobileUserAgent())&&b.addClass("mobile"),E.isMobileUserAgent()||b.addClass("use-opacity-transitions"),M.isFeatureActive("embed_refresh",{forum:this.forum.id})&&b.addClass("embed-refresh")},initMainPostBox:function(){if(this.form&&(this.form.remove(),this.form=null),this.thread.get("isClosed"))return this.threadView.$el.find("#secondary-navigation").addClass("no-postbox"),void this.showClosedAlert();if(!this.session.get("canReply"))return this.threadView.$el.find("#secondary-navigation").addClass("no-postbox"),void this.session.once("change:id",this.initMainPostBox,this);this.threadView.$el.find("#secondary-navigation").removeClass("no-postbox");var a=this.form=new $({thread:this.thread,userSuggestions:this.userSuggestions,session:this.session});a.render(),this.threadView.$el.find("#form").prepend(a.$el),a.resize()},showClosedAlert:function(){if(this.thread.get("isClosed")){var a=this.thread.get("reactions");a?(this.listenToOnce(a,"sync change:enabled",this.showClosedAlert),this.alert(ya(a.enabled?"Comments and reactions for this thread are now closed.":"Comments for this thread are now closed"))):(this.listenToOnce(this.thread,"change:reactions",this.showClosedAlert),this.alert(ya("Comments for this thread are now closed")))}},initTermsOfService:function(){if(this.tos&&(this.tos.remove(),this.tos=null),this.listenToOnce(this.session,"change:id",this.initTermsOfService),!(this.session.user.isAnonymous()||this.session.user.get("hasAcceptedGdprTerms")||!this.config.isPrivate&&this.session.isSSO()||t.tos_exempt_forums_shortnames.includes(this.forum.id))){var a=this.tos=new Ga({isPrivate:this.config.isPrivate,session:this.session});a.render(),this.threadView.$el.find("#tos__container").prepend(a.$el); +}},initUserSuggestionsManager:function(){this.userSuggestions=new fa({threadId:this.thread.id}),this.userSuggestions.addRemote(this.thread.users),this.listenTo(this.session,"change:id",function(){this.session.isLoggedIn()&&(this.session.user.getFollowing(),this.session.user.following.PER_PAGE=100,this.userSuggestions.addRemote(this.session.user.following))})},handleShowProfile:function(b){if(!(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey||!this.isInHome()&&!this.sidebar)){b.preventDefault();var c=a(b.currentTarget).attr("data-username"),d=a(b.currentTarget).attr("data-tab")||"";this.isInHome()?x.frame.sendHostMessage("home.open",T.apps.home+"by/"+c+"/"+d):this.showProfileSidebar(c,d)}},handleSort:za(function(b){var c=a(b.currentTarget).attr("data-sort"),d=this.forum.get("votingType")===s.VOTING_TYPES.DISABLED;"popular"===c&&d&&(c="desc"),this.$el.find('[data-role="post-sort"]').replaceWith(va({order:c,votingDisabled:d,forum:this.thread.forum.id})),this.thread.posts.setOrder(c),this.thread.posts.fetch({reset:!0}),x.frame.sendHostMessage("change:sort",c),this.inthreadAdApps=[],this.postsView.handleSort()}),toggleThread:za(function(){var a=this.thread.get("isClosed"),c=ya(a?"An error occurred while opening the thread. Please try again.":"An error occurred while closing the thread. Please try again."),d={success:function(){window.location.reload(!0)},error:b.bind(this.alert,this,c,{type:"error"})};a?this.thread.open(d):this.thread.close(d)}),toggleThreadPremoderate:za(function(){var a=this;this.dismissAlert(function(a){return a.options&&a.options.isPremoderateError});var b=this.thread.get("validateAllPosts");this.thread.premoderate(!b).then(function(){b?a.dismissPremoderationAlert():a.showPremoderationAlert()},function(){a.alert(ya("An error occurred while updating the thread. Please try again."),{type:"error",isPremoderateError:!0}),a.thread.set("validateAllPosts",b)}),x.trigger("uiAction:clickThreadPremoderate")}),toggleThreadRatingsEnabled:za(function(){var a=this;H.isForumModelRatingsEnabled(this.forum)&&this.thread.toggleRatingsEnabled().then(function(){H.isThreadModelRatingsEnabled(a.thread)&&(a.session.fetchThreadDetails({thread:a.thread}),a.thread.fetchRatings())})}),createDeferredViewsForImages:function(){a("img[data-src]").each(function(b,c){var d=a(c),e=new Ca({el:c,url:d.attr("data-src")});e.relatedPost=d.attr("data-post"),d.removeAttr("data-src")})},getPosition:function(){return this.position},showProfileSidebar:function(a,b){x.trigger("sidebar:open","by/"+a+"/"+b)},initResizeHandler:function(){var a,b=this;if(window.MutationObserver)new window.MutationObserver(function(){a||(a=window.requestAnimationFrame(function(){a=null,b.resize()}))}).observe(xa.body,{attributes:!0,characterData:!0,childList:!0,subtree:!0,attributeFilter:["class","style"]});else{var c=function d(){b.resize(),window.requestAnimationFrame(d)};window.requestAnimationFrame(c)}},resize:function(){var a=w.getPageHeight();this._lastHeight!==a&&(this._lastHeight=a,this.trigger("domReflow"),x.frame.sendHostMessage("resize",{height:a}))},handleAuth:za(function(a){this.session.authenticate(w.extractService(a.target,"auth"))}),handleLogout:za(function(){this.session.logout()}),audienceSync:za(function(){this.session.audienceSync()}),toggleMedia:za(function(){var a=aa.settings,b=!a.get("collapsed");a.set("collapsed",b)}),toggleReactions:za(function(){this.thread.get("reactions").toggleEnabled()}),toggleEmbedRefresh:za(function(){null===J.get("switch:embed_refresh")||J.get("switch:embed_refresh")===!0?(J.set("switch:embed_refresh",!1),x.trigger("uiAction:toggleClassicDisqus",!0)):(J.remove("switch:embed_refresh"),x.trigger("uiAction:toggleClassicDisqus",!1)),x.frame.sendHostMessage("reset")})});return b.extend(Ja.prototype,W.ShareMixin),p.call(Ja.prototype),w.mixin(Ja,B.UiActionEventProxy),o.call(Ja.prototype),w.mixin(Ja,B.ProfileHtmlHelpers),Q.call(Ja.prototype),{Lounge:Ja,UserMenuView:Ea,ThreadSubscribeButton:Ba,RatingsView:ha,ReactionsView:ia,BehindClickView:Ha,ThreadView:Ia,DeferredMediaView:Ca,DebugInfoView:Da}}),define("lounge/main",["jquery","core/utils/getEmbeddedData","lounge/tracking","lounge/views"],function(a,b,c,d){"use strict";return{init:function(){var e=b("threadData");if(!e)return{code:"no_thread_data"};if(e.code)return 2===e.code?"Endpoint resource not valid."===e.response&&(e.code="invalid_endpoint_resource"):15===e.code&&"Thread creations from embed disabled."===e.response&&(e.code="thread_creations_disabled"),e;a.extend(e.response,b("forumData")),a("#postCompatContainer").remove();var f=new d.Lounge({jsonData:e,el:window.document.body});c.init(f)}}}),define("lounge.bundle",function(){}); \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DCD91598D189150BABFDCD07EBCA7DB9935CB28B b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DCD91598D189150BABFDCD07EBCA7DB9935CB28B new file mode 100644 index 0000000..ac8318f Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DCD91598D189150BABFDCD07EBCA7DB9935CB28B differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DD0B0A7E01C7AB627822FE3F460380BBC550387D b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DD0B0A7E01C7AB627822FE3F460380BBC550387D new file mode 100644 index 0000000..04af5b1 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DD0B0A7E01C7AB627822FE3F460380BBC550387D differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DD0B0A7E01C7AB627822FE3F460380BBC550387D-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DD0B0A7E01C7AB627822FE3F460380BBC550387D-blob new file mode 100644 index 0000000..c4d48a0 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DD0B0A7E01C7AB627822FE3F460380BBC550387D-blob @@ -0,0 +1 @@ +locale_data['duckduckgo']={"":{"Content-Transfer-Encoding":" 8bit","Content-Type":" text/plain; charset=UTF-8","Language":" Español de Colombia (Colombian Spanish)","Language-Team":" DuckDuckGo Community ","Last-Translator":" Community","MIME-Version":" 1.0","PO-Revision-Date":" 2019-01-16 23:47-0500","POT-Creation-Date":" 2019-01-16 23:42-0500","Plural-Forms":" nplurals=2; plural=n != 1;","Project-Id-Version":" DuckDuckGo-Translation-0.000"},"!Bang Search Shortcuts":[null,"Atajos de búsqueda !Bang"],"%s blocked by safe search.":[null,"%s bloqueado por la búsqueda segura"],"%s for %s":[null,"%s para %s"],"%s km":[null,"%1$s km"],"%s mi":[null,"%1$s mi"],"%sRight click%s in the search bar":[null,"%sPulsación del botón derecho%s en la barra de búsqueda"],"A string to identify the source.":[null,"Una cadena para identificar la fuente"],"About":[null,"Acerca de"],"About DuckDuckGo":[null,"Acerca de DuckDuckGo"],"About Us":[null,"Sobre nosotros"],"Ad":[null,"Anuncio"],"Add DuckDuckGo":[null,"Y DuckDuckGo"],"Add DuckDuckGo Privacy Essentials to your browser for free with one download:":[null,"Añade DuckDuckGo Privacy Essentials a tu navegador de forma gratuita con una descarga:"],"Add DuckDuckGo as a search engine":[null,"Agregue DuckDuckGo como un motor de búsqueda"],"Add DuckDuckGo to %s":[null,"Añadir DuckDuckGo a %s"],"Add a %s search box to your site!":[null,"¡Agregue un cajón de búsqueda %s a su sitio!"],"Add to %s":[null,"Agregar a %s"],"Add to Home Screen":[null,"Agregar a la pantalla de inicio"],"Add-ons":[null,"Complementos"],"Address bar:":[null,"Barra de direcciones:"],"Ads":[null,"Anuncios"],"Ads GDPR, internal use only. Do not change\u0004More Info":[null,"más información"],"Ads GDPR, internal use only. Do not change\u0004Viewing ads is privacy protected by DuckDuckGo. Ad clicks are managed by Microsoft's ad network":[null,"DuckDuckGo protege la privacidad de la visualización de anuncios. La red de anuncios de Microsoft gestiona los clics en los anuncios"],"Advertisements:":[null,"Anuncios"],"After it downloads and opens, click %sInstall%s":[null," Después de que descargue y abra, haz clic en %sInstalar%s "],"After it downloads, locate the extension file and double-click it to install":[null,"Después de que descargue, localiza el archivo de la extensión y haz doble click para instalar"],"All":[null,"Todo"],"All Places":[null,"Todos los Lugares"],"All Regions":[null,"En todas las regiones"],"All Results":[null,"Todos los Resultados"],"All Settings":[null,"Todas las opciones"],"Alternatives":[null,"Alternativas"],"Anomaly modal\u0004Correct!":[null,"¡Correcto!"],"Anomaly modal\u0004Loading your search results now.":[null,"Cargando tus resultados de búsqueda."],"Anomaly modal\u0004Please complete the following challenge to confirm this search was made by a human.":[null,"Completa el siguiente desafío para confirmar que ha sido una persona la que ha realizado esta búsqueda."],"Anomaly modal\u0004Please try again":[null,"Inténtelo de nuevo, por favor"],"Anomaly modal\u0004Select all squares containing a duck":[null,"Selecciona todos los cuadrados que contengan un pato"],"Anomaly modal\u0004Select all squares containing a duck:":[null,"Selecciona todos los cuadrados que contengan un pato:"],"Anomaly modal\u0004Try Again":[null,"Intentar de nuevo"],"Anomaly modal\u0004Unfortunately, bots use DuckDuckGo too.":[null,"Lamentablemente, los bots también usan DuckDuckGo."],"Anomaly modal\u0004You have %s attempts left.":[null,"Te quedan %1$s intentos."],"Anomaly modal\u0004You have 1 attempt left.":[null,"Te queda 1 intento."],"Answer":[null,"Respuesta"],"Any Time":[null,"En cualquier momento"],"Any time":[null,"En cualquier momento"],"Anywhere":[null,"En todas partes"],"App":[null,"Aplicación"],"App and Extension":[null,"Aplicación y Extensión"],"Appearance":[null,"Apariencia"],"Apps":[null,"Aplicaciones"],"Argentina":[null,"Argentina"],"As per our privacy policy, we do not collect or share any personal information ourselves. All of this privacy protection happens on your device.":[null,"Por nuestra política de privacidad, no recolectamos ninguna información personal. Toda esta protección de la privacidad se da en su dispositivo."],"Audio":[null,"Sonido"],"Australia":[null,"Australia"],"Austria":[null,"Austria"],"Background:":[null,"Fondo:"],"Bangs":[null,"Bangs"],"Barcode":[null,"Código de barras"],"Belgium":[null,"Bélgica"],"Belgium (fr)":[null,"Bélgica (fr)"],"Belgium (nl)":[null,"Bélgica (nl)"],"Beta":[null,"Beta"],"Black":[null,"Negro"],"Block Trackers":[null,"Bloquear rastreadores"],"Blog":[null,"Blog"],"Blue":[null,"Azul"],"Brazil":[null,"Brasil"],"Browse as usual while we add privacy protection. We bundled our search engine, tracker blocker, and encryption enforcer into one %s%s Extension%s.":[null,"Navega como siempre mientras añadimos protección de privacidad. Hemos agrupado nuestro motor de búsqueda, nuestro bloqueador de rastreadores y nuestro encargado del cifrado en una %1$s%3$s extensión%2$s."],"Browse as usual, and we'll take care of the rest. We bundled our search engine, tracker blocker, and encryption enforcer into one %s%s Extension%s.":[null,"Navega como siempre y nosotros nos encargamos del resto. Te ofrecemos buscador, bloqueador de rastreadores y mejora de encriptación todo en una %1$sextensión de %2$s%3$s"],"Browse as usual, and we’ll take care of the rest. Get bundled private search, tracker blocking, and site encryption, all in one download, for %smajor browsers%s.":[null,"Navega como siempre y nosotros nos encargamos del resto. Te ofrecemos buscador, bloqueador de rastreadores y mejora de encriptación todo en una descarga, para los %1$sprincipales navegadores%2$s."],"Bulgaria":[null,"Bulgaria"],"Calendar":[null,"¡Por favor leer las notas antes de traducir!"],"Cameroon":[null,"Camerún"],"Canada":[null,"Canadá"],"Canada (fr)":[null,"Canadá (fr)"],"Cancel":[null,"Cancelar"],"Careers":[null,"Ofertas laborales"],"Catalonia":[null,"Cataluña"],"Category":[null,"Categoría"],"Chat":[null,"chat"],"Check %sMake this the current search engine%s":[null,"Comprueba %sHaz este el motor de búsqueda actual%s"],"Chile":[null,"Chile"],"China":[null,"China"],"Choose %skeep it%s to continue protecting your privacy.":[null,"Elige %1$smantenerlo%2$s para seguir protegiendo tu privacidad."],"Classic":[null,"Clásico"],"Clear":[null,"Borrar"],"Clear All":[null,"Limpiar Todo"],"Clear all filters":[null,"Borra todos los filtros"],"Clear your cookies often?":[null,"¿Limpiar sus cookies con frecuencia?"],"Click %s+%s!":[null,"Haz clic en %s+%s!"],"Click %sAdd or change home page...%s":[null,"Haga clic en %sAgregar o cambiar la página de inicio...%s"],"Click %sAdd%s":[null,"Clic %sAgregar%s"],"Click %sChange Search Settings%s in the drop down":[null,"Haga clic en %sCambiar configuración de busqueda%s en la lista desplegable"],"Click %sEdit > Preferences%s (on Windows) %sSeaMonkey > Preferences%s (on Mac)":[null,"Click en %sEditar > Preferencias%s (en Windows), en %sSeaMonkey > Preferencias%s (en Mac)"],"Click %sHere%s to add us as a search engine":[null,"Clic %sAqui%s para añadirnos como motor de búsqueda "],"Click %sHere%s to download the DuckDuckGo extension":[null," Haga clic %sAquí%s para descargar la extensión DuckDuckGo"],"Click %sOpen%s to download and open the DuckDuckGo Safari extension":[null,"Haz clic en %sAbrir%s para descargar y abrir la extensión de DuckDuckGo para Safari"],"Click %sPrivacy and Services%s in the left sidebar.":[null,"Haz clic en %1$sPrivacidad y Servicios%2$s en la barra lateral de la izquierda."],"Click %sSafari%s in the top menu (On Windows, click the %sgears icon%s in the top right)":[null,"Haz clic en %sSafari%s en el menu superior (En Windows, haz clic en el %sicono de engranaje%s de la parte superior derecha)"],"Click %sSettings%s":[null,"Haga clic en %sConfiguración%s"],"Click %sSettings%s in the dropdown.":[null,"Haz clic en %1$sAjustes%2$s en el desplegable."],"Click %sUse current pages%s then %sClick OK%s.":[null,"Haz clic en %sUsar en la página actual%s y luego %sClic en OK%s."],"Click %sYes%s":[null,"Clic %sSi%s"],"Click %ssettings/hamburger icon %s on the Chrome toolbar (top right).":[null,"Haz Click en %sHerramientas/Icono con forma de hamburguesa %s en la barra de herramientas (Arriba a la derecha) de tu navegador Chrome."],"Click OK.":[null,"Haz click en OK"],"Click add.":[null,"Click para agregar."],"Click on %sBrowser%s in the sidebar":[null,"Presione %sNavegador%s en la barra lateral"],"Click on %sChange Search Settings%s in the dropdown menu":[null,"Pulse sobre %sCambiar configuración de búsqueda%s en el menú desplegable"],"Click on %sSet as Default%s towards the bottom":[null,"Pulse sobre %sEstablecer por Omisión%s hacia el botón"],"Click on the %sSearch Providers%s under Add-on Types":[null,"Pulse sobre %sProveedores de búsqueda%s debajo de los Tipos de complementos"],"Click on the %sTools icon%s in the top-right of the browser":[null,"Pulse sobre el %sIcono de herramientas%s en la parte superior derecha del navegador"],"Click on the %smagnifying glass%s in the search bar":[null,"Pulse sobre la %slupa%s en la barra de búsqueda"],"Click on the magnifying glass in the search box at the top right":[null,"Haz click en la lupa en la cuadro de búsqueda de la esquina derecha"],"Click the %s icon in the top toolbar":[null,"Haz click en el ícono de %s en la barra de herramientas superior"],"Click the %s...%s icon at the top right:":[null,"Haga click en el %s...%sicono esquna superior derecha:"],"Click the %sGeneral%s tab.":[null,"Haz click en la pestaña %sGeneral%s"],"Click the %sellipsis icon%s in the toolbar.":[null,"Haz clic en el %1$sicono de elipsis%2$s en la barra de herramientas."],"Click the Duck icon at the top of your browser to search!":[null,"¡Haz click en el ícono del Pato en la parte superior de tu navegador para buscar!"],"Click the Expand Icon.":[null,"Clic en el Icono de Expandir."],"Click the Search Engine Icon in the Address Bar.":[null,"Clic en el Icono del Motor de Búsqueda en la Barra de Búsqueda."],"Click the arrow to the right of the %shome icon%s":[null,"Haz clic en la flecha situada a la derecha de %sboton de inicio%s"],"Click the drop down in the search box":[null,"Haz click en el menú desplegable en la caja de búsqueda"],"Click the dropdown menu beside %sSearch engine used in the address bar%s and select %sDuckDuckGo%s.":[null,"Haz clic en el menú de al lado del %1$smotor de búsqueda utilizado en la barra de direcciones%2$s y selecciona %3$sDuckDuckGo%4$s."],"Click the magnifying glass in the search bar":[null,"Haz click en la lupa en la barra de búsqueda."],"Click the magnifying glass in the search box (at the top of the browser)":[null,"Haz clic en la lupa en el buscador (en la parte superior del navegador)"],"Click this button to get started:":[null,"Pulse este botón para comenzar"],"Click to collapse":[null,"Clic para cerrar"],"Click to expand":[null,"Clic para expandir"],"Close window.":[null,"Cerrar ventana"],"Closed":[null,"Cerrado"],"Cloud Save":[null,"Guardar en la nube"],"Colombia":[null,"Colombia"],"Color":[null,"Color"],"Color Settings":[null,"Ajustes de color"],"Colors":[null,"Colores"],"Comics":[null,"Cómics"],"Comments":[null,"Comentarios"],"Community":[null,"Comunidad"],"Concerts":[null,"Conciertos"],"Congratulations!":[null,"¡Felicitaciones!"],"Conversion":[null,"Conversión"],"Copy & paste %sabout:preferences#search%s into the address bar":[null,"Copia y pega %1$sabout:preferences#search%2$s en la barra de direcciones"],"Costa Rica":[null,"Costa Rica"],"Coupons":[null,"Cupones"],"Covid 19 module\u0004% Fully Vaccinated":[null,"Porcentaje totalmente vacunado"],"Covid 19 module\u0004% Vaccinated":[null,"Porcentaje vacunado"],"Covid 19 module\u0004Confirmed":[null,"Confirmados"],"Covid 19 module\u0004Confirmed Cases":[null,"Casos confirmados"],"Covid 19 module\u0004Coronavirus Disease (COVID-19)":[null,"Enfermedad por coronavirus (COVID-19)"],"Covid 19 module\u0004Deaths":[null,"Fallecimientos"],"Covid 19 module\u0004Get the latest information:":[null,"Obtén la información más reciente:"],"Covid 19 module\u0004Location":[null,"Localización"],"Covid 19 module\u0004More statistics":[null,"Más estadísticas"],"Covid 19 module\u0004Statistics":[null,"Estadísticas"],"Covid 19 module\u0004Summary":[null,"Resumen"],"Covid 19 module\u0004Symptoms":[null,"Síntomas"],"Covid 19 module\u0004Tips":[null,"Consejos"],"Covid 19 module\u0004Vaccines":[null,"Vacunas"],"Covid 19 module\u0004World":[null,"Mundo"],"Covid 19 module\u0004Worldwide Coverage Map":[null,"Mapa de cobertura mundial"],"Croatia":[null,"Croacia"],"Currency":[null,"Moneda"],"Custom date range":[null,"Intervalo de fechas personalizado"],"Custom date range filer\u0004Apply":[null,"Usar"],"Czech Republic":[null,"Republica Checa"],"Dark":[null,"Oscuro"],"Date":[null,"Fecha"],"Default":[null,"Predeterminado"],"Definition":[null,"Definición"],"Delete My Data":[null,"Borrar mis datos"],"Denmark":[null,"Dinamarca"],"Develop":[null,"Desarrollo"],"Dictionary":[null,"Diccionario"],"Did you mean %s?":[null,"¿Quisiste decir %s?"],"Disable":[null,"Deshabilitar"],"Dismiss":[null,"Descartar"],"Dismiss forever":[null,"Descartar por siempre"],"Don't see DuckDuckGo in the list?":[null,"¿No ves DuckDuckGo en la lista?"],"Don't see the checkbox? %sFollow these steps%s.":[null,"¿No ve el campo de verificación? %sSiga estos pasos%s"],"Download file":[null,"Descargar archivo"],"Drag %sThis Button%s on top of the home icon:":[null,"Arrastrar %sEste Boton%s a la parte superior del icono de inicio:"],"Drinks":[null,"Bebidas"],"Duck it":[null,"Usa el pato"],"DuckDuckGo Bot":[null,"Bot DuckDuckGo"],"DuckDuckGo Instant Answer API":[null,"API de respuesta instantánea de DuckDuckGo"],"DuckDuckGo New !Bang":[null,"Nuevo !Bang DuckDuckGo"],"DuckDuckGo Privacy":[null,"Privacidad de DuckDuckGo"],"DuckDuckGo Search Box":[null,"Cajón de búsqueda DuckDuckGo"],"DuckDuckGo Settings":[null,"Configuración de DuckDuckGo"],"DuckDuckGo Support Center":[null,"Centro de soporte de DuckDuckGo"],"DuckDuckGo URL Parameters":[null,"Parámetros de la URL DuckDuckGo"],"DuckDuckGo search":[null,"Búsqueda de DuckDuckGo"],"DuckDuckGo settings":[null,"Ajustes DuckDuckGo"],"Ecuador":[null,"Ecuador"],"Email":[null,"Correo"],"Enable anonymous location for more accurate results. You can always change your mind later.":[null,"Habilita la ubicación anónima para obtener resultados más precisos. Siempre puedes cambiar de opinión más tarde."],"Encrypt Connections":[null,"Encriptar conexiones"],"England":[null,"Inglaterra"],"Enter %shttps://duckduckgo.com%s":[null,"Entrar %shttps://duckduckgo.com%s"],"Enter the following details: %sName%s: DuckDuckGo%s URL%s: %s Alias%s: d%s":[null,"Introduce los siguientes detalles: %sNombre%s: DuckDuckGo%s URL%s: %s Alias%s: d%s"],"Estonia":[null,"Estonia"],"Extensions & More":[null,"Extensiones & Mas"],"Favicons:":[null,"Faviconos:"],"Feedback":[null,"Retroalimentación"],"Feel free to adjust the settings below. Then, just copy and paste the code into your website.":[null,"Siéntete libre de modificar la siguiente configuración. Luego, sólo copia el código y pégalo en tu sitio web."],"Fill in the last form field with %s":[null,"Rellena el último campo del formulario con %1$s"],"Filter by Date":[null,"Filtrar por fecha"],"Filter by Region":[null,"Filtrar por región"],"Final":[null,"Final"],"Finally, click %sAdd%s":[null,"Finalmente, pulse %sAñadir%s"],"Find %sDuckDuckGo%s and click%sMake default%s":[null,"Encuentre %sDuckDuckGo%s y pulse %sUsar por omisión%s"],"Find DuckDuckGo in the displayed list and click %sMake Default%s":[null,"Encuentra DuckDuckGo en la lista que aparece y haz clic en %sEstablecer como Predeterminado%s"],"Finland":[null,"Finlandia"],"Flights":[null,"Vuelos"],"France":[null,"Francia"],"Game ended":[null,"Juego finalizado"],"Games":[null,"Juegos"],"General":[null,"General"],"Germany":[null,"Alemania"],"Get App":[null,"Obten la aplicación "],"Get seamless privacy protection on your browser for free with one download:":[null,"Consigue protección continua y gratuita para tu privacidad en el navegador con una descarga:"],"Get the non-JS version %s":[null,"Vaya a la versión no-JS de %s"],"Ghana":[null,"Ghana"],"Go to Options.":[null,"Ir a Opciones"],"Go to Search Engine.":[null,"Vaya al motor de búsqueda."],"Greece":[null,"Grecia"],"Green":[null,"Verde"],"Grey":[null,"Gris"],"Grid mode disabled for this answer":[null,"Modo Grid deshabilitado para esta respuesta"],"HTTPS:":[null,"HTTPS:"],"Header:":[null,"Encabezado:"],"Help":[null,"Ayuda"],"Help Spread Privacy":[null,"Ayuda a Difundir la Privacidad"],"Hit %sReturn%s on your keyboard to %ssave DuckDuckGo to the list. %sThen click %sMake Default%s":[null,"Pulsa %1$sRetorno%2$s en tu teclado para %3$sguardar DuckDuckGo en la lista. %4$sDespués pincha %5$sHacer Predeterminado%6$s"],"Hold on! Changing it back will disable the DuckDuckGo extension and you'll lose our privacy protection.":[null,"¡Espera! Si lo vuelves a cambiar, se desactivará la extensión de DuckDuckGo y perderás nuestra protección de privacidad."],"Hong Kong":[null,"Hong Kong"],"Hungary":[null,"Hungría"],"If you don't see %sDuckDuckGo,%s you will need to add it to the list of %sOther Search Engines%s":[null,"Si no ves %1$sDuckDuckGo,%2$s deberás añadirlo a la lista de %3$sOtros Motores de Búsqueda%4$s"],"If you want to use DuckDuckGo without JavaScript, please use our %s or %s versions.":[null,"Si quieres usar DuckDuckGo sin JavaScript, porfavor usa nuestras versiones %s o %s"],"If you want, select Home Page next to New windows and New tabs (open with).":[null,"Si quieres, selecciona la Página de Incio al lado de Nueva Ventana y Nueva Pestaña (abrir con)"],"Images":[null,"Imágenes"],"In partnership with":[null,"En asociación con"],"In the drop down select %sDuckDuckGo%s!":[null,"En la lista despegable selecciona %sDuckDuckGo%s!"],"In the menu at the top select %sTools%s > %sSettings%s":[null,"En el menu en la parte superior selecciona %sHerramientas%s > %sAjustes%s"],"In the popup, check %sMake this my default search provider%s":[null,"En el diálogo emergente, marque %sEstablecer este como mi proveedor de búsquedas por omisión%s"],"In the popup, click %sAdd%s":[null,"En el diálogo emergente, pulse %sAñadir%s"],"In the side menu select %sInternet Search%s":[null,"En el menu lateral selecciona %sBusqueda en la web%s"],"Including results for %s":[null,"Incluyendo resultados de %1$s"],"India":[null,"India"],"Indonesia":[null,"Indonesia"],"Indonesia (en)":[null,"Indonesia (en)"],"Install":[null,"Instalar"],"Install DuckDuckGo Safari Extension?":[null,"¿Desea instalar la extensión DuckDuckGo para Safari?"],"Instant Answer API":[null,"API de Respuesta Instantánea"],"Intense green":[null,"Verde Intenso"],"Intense red":[null,"Rojo Intenso"],"Interface Settings":[null,"Ajustes de interfaz"],"Iran":[null,"Irán"],"Ireland":[null,"Irlanda"],"Israel":[null,"Israel"],"Italy":[null,"Italia"],"Items":[null,"Objetos"],"Items are ranked based on relevance to your search terms and are delivered through Microsoft's Ad Network. Clicks lead directly to merchant landing pages and unlike ads, DuckDuckGo is not compensated for these results.":[null,"Los artículos se clasifican en función de la relevancia de los términos de búsqueda y se distribuyen a través de la red de anuncios de Microsoft. Los clics conducen directamente a las páginas de aterrizaje de los comerciantes y, a diferencia de los anuncios, DuckDuckGo no recibe compensación por estos resultados."],"Japan":[null,"Japón"],"Jobs":[null,"Empleos"],"Keep in Touch":[null,"Mantenerse en contacto"],"Korea":[null,"Corea"],"Korea Republic":[null,"República de Corea"],"Latvia":[null,"Letonia"],"Learn %sMore%s":[null,"Aprenda %s más %s"],"Legal":[null,"Legal"],"Light blue":[null,"Azul claro"],"Light green":[null,"Verde claro"],"Link font:":[null,"Fuente del link:"],"Links:":[null,"Links"],"Listen":[null,"Escucha"],"Lithuania":[null,"Lituania"],"Load Cloud Settings":[null,"Cargar preferencias de la nube"],"Load More":[null,"Cargar más"],"Load Settings":[null,"Cargar preferencias"],"Loading...":[null,"Cargando..."],"Lock icon next to HTTP search result\u0004That means information sent between your device and the webpage behind this link is at increased risk of being intercepted by a third party. In rare cases this includes passwords, or payment details.":[null,"Eso significa que la información enviada entre tu dispositivo y la página web detrás de este enlace tiene un mayor riesgo de ser interceptada por un tercero. En raras ocasiones, esto incluye contraseñas o detalles de pago."],"Lock icon next to HTTP search result\u0004This webpage does not use a secure, encrypted, connection (HTTPS).":[null,"Esta página web no utiliza una conexión segura, cifrada (HTTPS)."],"Look & Feel Settings":[null,"Configuración de la apariencia"],"Make sure to check %s\"Make this my default search provider\"%s":[null,"Asegúrese de revisar %s\"Establecer como mi proveedor de búsqueda por defecto\"%s"],"Malaysia":[null,"Malasia"],"Malaysia (en)":[null,"Malasia (en)"],"Map":[null,"Mapa"],"Maps":[null,"Mapas"],"Meanings":[null,"Significados"],"Menu":[null,"Menú"],"Mexico":[null,"México"],"Mobile footer, homepage tagline\u0004Help Spread DuckDuckGo!":[null,"Ayuda a difundir DuckDuckGo"],"More":[null,"Más"],"More Images":[null,"Más Imágenes"],"More Info":[null,"Más información"],"More Links":[null,"Mas enlaces "],"More News":[null,"Más Noticias"],"More Places":[null,"Más Sitios"],"More Products":[null,"Más Productos"],"More Recipes":[null,"Más recetas"],"More Related Topics":[null,"Mas temas relacionados"],"More Themes":[null,"Más temas"],"More Videos":[null,"Más Videos"],"More about !bangs":[null,"Más sobre !bangs"],"More at":[null,"Mas en"],"More at %s":[null,"Más en %s"],"More at %s ":[null,"Mas en %s"],"More from":[null,"Mas de"],"More on %s ":[null,"Más en %1$s "],"More results":[null,"Más resultados"],"Morocco":[null,"Marruecos"],"Movies":[null,"Peliculas"],"Music":[null,"Música"],"Muted red":[null,"Granate"],"NPM":[null,"APN"],"Nearby":[null,"Cercano"],"Netherlands":[null,"Holanda"],"New Zealand":[null,"Nueva Zelanda"],"News":[null,"Noticias"],"News Articles":[null,"Artículos de noticias"],"No":[null,"No"],"No More Photos":[null,"No Más Fotos"],"No Tracking. Ever.":[null,"Sin Rastreadores. Siempre."],"No results":[null,"Sin resultados"],"Norway":[null,"Noruega"],"Not many results contain %s":[null,"No hay muchos resultados que contengan %1$s"],"Nutrition":[null,"Nutrición"],"OK":[null,"Aceptar"],"Off":[null,"Apagado"],"Offers":[null,"Ofertas"],"On":[null,"Encendido"],"On Mac, %sClick Maxthon > Preferences%s, On Windows, %sClick the %s icon > Settings%s":[null,"En Mac, %sHaz click en Maxthon > Preferencias%s, En Windows, %sHaz click en el ícono de %s > Preferencias%s"],"Open %s website":[null,"Abrir el sitio web de %1$s"],"Open Map":[null,"Abrir mapa"],"Open Settings":[null,"Abrir ajustes"],"Open a new tab or window":[null,"Abrir una nueva pestana o ventana"],"Orange":[null,"Naranja"],"Our private browser for mobile comes equipped with our search engine, tracker blocker, encryption enforcer, and more. Available on %siOS & Android%s.":[null,"Nuestro navegador privado para móviles viene equipado con nuestro motor de búsqueda, bloqueador de rastreadores, mejora de encriptación y más. Disponible para %1$siOS y Android%2$s."],"Packages":[null,"Paquetes"],"Page #s:":[null,"#s Página:"],"Page %s":[null,"Pagina %s"],"Past Day":[null,"Último día"],"Past Month":[null,"Mes Anterior"],"Past Week":[null,"Semana pasada"],"Past Year":[null,"Año pasado"],"Past day":[null,"Último día"],"Past month":[null,"Mes pasado"],"Past week":[null,"Semana pasada"],"Past year":[null,"El año pasado"],"Peru":[null,"Perú"],"Philippines":[null,"Filipinas"],"Philippines (tl)":[null,"Filipinas (tl)"],"Photos on %s":[null,"Fotos en %1$s"],"Pink":[null,"Rosa"],"Placement:":[null,"Ubicación:"],"Places":[null,"Lugares"],"Please try again":[null,"Inténtelo de nuevo"],"Poland":[null,"Polonia"],"Policy":[null,"Política"],"Portugal":[null,"Portugal"],"Press":[null,"Prensa"],"Press %sMenu > Add to homescreen > Add%s!":[null,"Presione %sMenú > Agregar a la pantalla principal > Agregar%s!"],"Press Kit":[null,"Kit de Prensa"],"Preview":[null,"Vista previa"],"Print":[null,"Imprimir"],"Print Preview":[null,"Vista previa de impresión"],"Privacy":[null,"Privacidad"],"Privacy Blog":[null,"Blog sobre Privacidad"],"Privacy Browser App":[null,"Navegador Privado"],"Privacy Browser Extension":[null,"Extensión de Navegador Privada"],"Privacy Crash Course":[null,"Curso Intensivo de Privacidad"],"Privacy Essentials":[null,"Esenciales de Privacidad"],"Privacy Essentials for %s":[null,"Privacy Essentials para %1$s"],"Privacy Policy":[null,"Política de Privacidad"],"Privacy Protection For Any Device":[null,"Protección de la Privacidad para Cualquier Dispositivo"],"Privacy Settings":[null,"Ajustes de privacidad"],"Privacy for %s":[null,"Privacidad para %1$s"],"Privacy, simplified.":[null,"Privacidad, simplificada."],"Private Search":[null,"Búsqueda Privada"],"Private Search Engine":[null,"Motor de Búsqueda Privada"],"Products":[null,"Productos"],"Purple":[null,"Púrpura"],"Q&A module attribution\u0004Source":[null,"Fuente"],"Qatar":[null,"Qatar"],"Quotations":[null,"Citaciones"],"Quotes":[null,"Citas"],"Rated %s/5":[null,"Valoración %1$s/5"],"Read More":[null,"Leer más"],"Recent News":[null,"Noticias Recientes"],"Recipes":[null,"Recetas"],"Red":[null,"Rojo"],"Reddit":[null,"Reddit"],"Redirect:":[null,"Redireccionar:"],"Region":[null,"Región"],"Region:":[null,"Región:"],"Related Searches":[null,"Búsquedas relacionadas"],"Related Topics":[null,"Temas relacionados"],"Remember my choice (this can be changed in %s%s%sSettings%s)":[null,"Recordar mi selección (esto se puede cambiar en %s%s%s Ajustes %s)"],"Report image modal\u0004Child sexual abuse":[null,"Abuso sexual infantil"],"Report image modal\u0004Copyright violation":[null,"Violación de copyright"],"Report image modal\u0004Explicit content":[null,"Contenido explícito"],"Report image modal\u0004Not relevant":[null,"Irrelevante"],"Report image modal\u0004Report this image":[null,"Reportar esta imagen"],"Result Settings":[null,"Ajustes de Resultado"],"Results":[null,"Resultados"],"Reviews":[null,"Reseñas"],"Romania":[null,"Rumania"],"Russia":[null,"Rusia"],"SERP footer content\u0004%s Billion Searches":[null,"%s millardos de búsquedas"],"SERP footer content\u0004Check out our privacy device guides.":[null,"Consulta nuestras guías sobre privacidad en dispositivos."],"SERP footer content\u0004Discover shortcuts to go to search results on other sites.":[null,"Descubre atajos para ir a resultados de búsquedas de otras páginas."],"SERP footer content\u0004Don't Track Us":[null,"No Nos Sigas"],"SERP footer content\u0004Donating for Privacy":[null,"Donar por la Privacidad"],"SERP footer content\u0004Escape The Filter Bubble":[null,"Escapa a la Burbuja que Filtra"],"SERP footer content\u0004Fine-tune Your Search":[null,"Afina tu búsqueda"],"SERP footer content\u0004Get New Themes":[null,"Consigue Nuevos Temas"],"SERP footer content\u0004Get Started at Duck.com":[null,"Comienza en Duck.com"],"SERP footer content\u0004Get to DuckDuckGo faster. Share duck.com with your friends.":[null,"Llega a DuckDuckGo ms rápido. Comparte duck.go con tus amigos."],"SERP footer content\u0004Help Spread DuckDuckGo":[null,"Ayuda a difundir DuckDuckGo"],"SERP footer content\u0004Help us raise the standard of trust online.":[null,"Ayúdanos a aumentar el estándar de confianza online."],"SERP footer content\u0004How We Are Profitable":[null,"Cómo Somos Rentables"],"SERP footer content\u0004Join Our Team!":[null,"¡Únete al equipo!"],"SERP footer content\u0004Learn About Bangs":[null,"Aprender sobre los Bangs"],"SERP footer content\u0004Learn About DuckDuckGo":[null,"Aprende Sobre DuckDuckGo"],"SERP footer content\u0004Learn how to protect your privacy.":[null,"Aprende cómo proteger tu privacidad."],"SERP footer content\u0004Learn how to search like the pros.":[null,"Aprende a buscar como los maestros."],"SERP footer content\u0004Learn how we're dedicated to keeping you safe online.":[null,"Aprende cómo nos dedicamos a mantenerte a salvo online."],"SERP footer content\u0004Learn how you can free yourself from Google for good.":[null,"Aprende cómo te puedes liberar de Google."],"SERP footer content\u0004Learn why reducing online tracking is important.":[null,"Aprende por qué reducir el seguimiento en línea es importante."],"SERP footer content\u0004Our Crash Course":[null,"Nuestro curso intensivo"],"SERP footer content\u0004Over %s in DuckDuckGo privacy donations.":[null,"Sobre %1$s en donaciones de privacidad de DuckDuckGo."],"SERP footer content\u0004Privacy Newsletter":[null,"Boletín Informativo de Privacidad"],"SERP footer content\u0004Privacy in Your Inbox":[null,"Privacidad en Tu Bandeja de Entrada"],"SERP footer content\u0004Protect Your Devices":[null,"Protege tus Dispositivos"],"SERP footer content\u0004Read about how Google influences what people click.":[null,"Lee sobre cómo Google influencia lo que la gente hace clic."],"SERP footer content\u0004Say Goodbye To Google":[null,"Di Adios a Google"],"SERP footer content\u0004Stay Informed":[null,"Permanezca Informado"],"SERP footer content\u0004Stay protected and informed with our privacy newsletters.":[null,"Mantente protegido e informado con nuestros boletines de privacidad."],"SERP footer content\u0004The world needs an alternative to the collect-it-all business model.":[null,"El mundo necesita una alternativa al modelo de negocio acaparador."],"SERP footer content\u0004We Protect Your Privacy":[null,"Protegemos tu privacidad"],"SERP footer content\u0004We don't save your search history or follow you around the web.":[null,"No guardamos tu historial de búsqueda ni te perseguimos por la web."],"SERP footer content\u0004We don't track you, but others do.":[null,"Nosotros no le seguimos, pero otros sí lo hacen."],"SERP footer content\u0004We get a ton of searches, and all of them are anonymous.":[null,"Tenemos una tonelada de búsquedas y todas ellas son anónimas."],"SERP footer content\u0004You're in control. Customize the look-and-feel of DuckDuckGo.":[null,"Tú mandas. Personaliza el estilo y el comportamiento de DuckDuckGo."],"Safe Search":[null,"Búsquea Segura"],"Safe Search:":[null,"Búsqueda segura:"],"Safe search blocked results for %s.":[null,"La búsqueda segura bloqueó resultados para %s"],"Safe search blocked some results for %s.":[null,"Búsqueda segura bloqueada algunos resultados para %s"],"Safe search:":[null,"Búsqueda segura:"],"Saudi Arabia":[null,"Arabia Saudita"],"Save":[null,"Guardar"],"Save Settings":[null,"Guardar ajustes"],"Save and Exit":[null,"Guardar y salir"],"Score":[null,"Puntaje"],"Scroll down and click %sView advanced settings%s":[null,"Desplácese hacia abajo y haga clic en %sVer configuraciones avanzadas%s"],"Scroll down and click %sView advanced settings%s.":[null,"Desplázate hacia abajo y haz clic en%1$sVer ajustes avanzados%2$s."],"Scroll down and find %sSearch in the address bar%s. Click on %sChange%s (or %sAdd new%s)":[null,"Desplácese hacía abajo y encuentre %sBuscar en la barra de direcciones%s. Pulse sobre %sCambiar%s (o %sAñadir nuevo%s)"],"Scroll down and find %sSearch in the address bar%s. Click on %sChange%s (or %sAdd new%s).":[null,"Desplázate hacia abajo y busca %1$sBuscar en la barra de direcciones%2$s. Haz clic en %3$sCambiar%4$s (o %5$sAñadir%6$s)."],"Scroll down to the %sServices%s section and click %sAddress bar%s.":[null,"Desplázate hasta la sección %1$sServicios%2$s y haz clic en la %3$sBarra de direcciones%4$s."],"Search":[null,"Buscar"],"Search %s to find results closer to you?":[null,"¿Quieres buscar %1$s para encontrar resultados más cerca de ti?"],"Search Anonymously":[null,"Búsqueda anónima"],"Search Box":[null,"Barra de búsqueda"],"Search DuckDuckGo":[null,"Buscar con DuckDuckGo"],"Search Options":[null,"Opciones de búsqueda"],"Search Results":[null,"Resultados de Búsqueda"],"Search and browse privately with the DuckDuckGo app.":[null,"Busca y navega de forma privada con la aplicación DuckDuckGo."],"Search domain %s":[null,"buscar dominio %s"],"Search only for %s?":[null,"¿Sólo buscar %s?"],"Search privately with our app or extension, add private web search to your favorite browser, or search directly at %sduckduckgo.com%s.":[null,"Busca de forma privada con nuestra app o extensión, añade búsqueda web privada a tu navegador preferido o busca en %1$sduckduckgo.com%2$s."],"Searches %s using our %s":[null,"Busca %s usando nuestro %s"],"Searches related to \"%s\"":[null,"Búsquedas relacionadas con \"%1$s\""],"Searches related to %s":[null,"Búsquedas relacionadas con %1$s"],"See Photos":[null,"Ver Fotos"],"Select %sCustom%s and enter %shttps://duckduckgo.com%s in the input field":[null,"Seleccione %sPersonalizar%s y escriba %shttps://duckduckgo.com%s en el campo de entrada"],"Select %sDuckDuckGo%s and click %sAdd as default%s!":[null,"Selecciona %sDuckDuckGo%s y haz clic en %sAgregar como predeterminado%s!"],"Select %sDuckDuckGo%s and click %sSet as default%s":[null,"Seleccione %sDuckDuckGo%s y pulse %sEstablecer por omisión%s"],"Select %sDuckDuckGo%s and click %sSet as default%s.":[null,"Selecciona %1$sDuckDuckGo%2$s y haz click en %3$sEstablecer como predeterminado%4$s."],"Select %sDuckDuckGo%s in the Default Search Engine drop down":[null,"Selecciona %sDuckDuckGo%s en el menú de Motor de Busqueda por Defecto"],"Select %sDuckDuckGo%s in the list of search providers":[null,"Seleccione %sDuckDuckGo%s en la lista de proveedores de búsquedas"],"Select %sDuckDuckGo%s under the%sDefault Search Engine%s section":[null,"Seleccione %sDuckDuckGo%s debajo de la sección %sMotor de búsqueda por omisión%s"],"Select %sDuckDuckGo%s!":[null,"Seleccione %sDuckDuckGo%s!"],"Select %sEdit Search Engines...%sin the dropdown":[null,"Selecciones %sEditar motores de búqueda...%s en el menú desplegable"],"Select %sManage add-ons%s from the dropdown menu":[null,"Selecciones %sAdministrar complementos%s del menú desplegable"],"Select %sOpera > Preferences%s (on Mac) or %sMenu > Settings%s (on Windows)":[null,"Selecciones %sOpera > Preferencia%s (en Mac) o %sMenu > Settings%s (en Windows)"],"Select %sOpera > Preferences%s (on Mac) or %sOpera > Options%s (on Windows)":[null,"Selecciona %sOpera > Preferencias%s (en Mac) o %sOpera > Opciones%s (en Windows)"],"Select %sPreferences%s.":[null,"Selecciona %sPreferencias%s"],"Select %sSettings%s":[null,"Selecciona %sAjustes%s"],"Select %sSettings%s from the drop-down menu.":[null,"Seleccionar %sAjustes%s del menú desplegable."],"Select %sUse this webpage as your only home page%s (or one of the other options if you prefer)":[null,"Selecciona %sUsa esta página web como tu única página de inicio%s (o una de las otras opciones si lo prefieres)"],"Select DuckDuckGo!":[null,"¡Seleccione DuckDuckGo!"],"Selected %sDuckDuckGo%s":[null,"Seleccionado %sDuckDuckGo%s"],"Send":[null,"Enviar"],"Senegal":[null,"Senegal"],"Serbia":[null,"Serbia"],"Set DuckDuckGo as your %sdefault search engine":[null,"Establecer DuckDuckGo como tu %smotor de búsqueda por defecto"],"Set as Default Search Engine":[null,"Establecer como motor de búsqueda por defecto"],"Set as Homepage":[null,"Establecer como página de inicio"],"Settings":[null,"Ajustes"],"Settings updated":[null,"Ajustes actualizados"],"Shopping":[null,"Compras"],"Shortcuts to other sites to search off DuckDuckGo":[null,"Atajos a otras páginas para búsquedas en DuckDuckGo"],"Showing results excluding":[null,"Presentando resultados excluyendo"],"Showing results from":[null,"Presentando resultados de"],"Showing results without %s.":[null,"Presentando resultados sin %s."],"Shows":[null,"Presentaciones"],"Similar":[null,"Similares"],"Singapore":[null,"Singapur"],"Size:":[null,"Tamaño:"],"Slovakia":[null,"Eslovaquia"],"Slovenia":[null,"Eslovenia"],"Social":[null,"Social"],"Software":[null,"Programas"],"Sorry, no results here.":[null,"Lo siento, no hay resultados aquí"],"Source:":[null,"Fuente:"],"South Africa":[null,"Sur Africa"],"Spain":[null,"España"],"Spain (ca)":[null,"España (ca)"],"Sports module\u0004%s Season":[null,"%1$s Temporada"],"Sports module\u00041st":[null,"1º"],"Sports module\u00041st in Group %s":[null,"1.° en el Grupo %1$s"],"Sports module\u00042nd":[null,"2º"],"Sports module\u00042nd in Group %s":[null,"2.º en el Grupo %1$s"],"Sports module\u00043rd":[null,"3º"],"Sports module\u00044th":[null,"4º"],"Sports module\u0004A":[null,"V"],"Sports module\u0004All":[null,"Todo"],"Sports module\u0004All Groups":[null,"Todos los grupos"],"Sports module\u0004Away Record":[null,"Registro como visitante"],"Sports module\u0004Bracket":[null,"Categoría"],"Sports module\u0004Cancelled":[null,"Cancelado"],"Sports module\u0004Conf":[null,"Conf."],"Sports module\u0004Conference Record":[null,"Registro de la conferencia"],"Sports module\u0004Conferences":[null,"Conferencias"],"Sports module\u0004Current Streak":[null,"Racha actual"],"Sports module\u0004D":[null,"E"],"Sports module\u0004Data from Sportradar":[null,"Datos de Sportradar"],"Sports module\u0004Delayed":[null,"Retrasado"],"Sports module\u0004Div":[null,"Div."],"Sports module\u0004Division Record":[null,"Registro de la división"],"Sports module\u0004Draws":[null,"Empates"],"Sports module\u0004ET":[null,"Descuento"],"Sports module\u0004East":[null,"Este"],"Sports module\u0004Eastern":[null,"Este"],"Sports module\u0004Eastern Conference":[null,"Conferencia Este"],"Sports module\u0004FIFA World Cup":[null,"Copa Mundial de la FIFA"],"Sports module\u0004FT":[null,"Fin"],"Sports module\u0004Final":[null,"Final"],"Sports module\u0004GA":[null,"GC"],"Sports module\u0004GB":[null,"Diferencia"],"Sports module\u0004GD":[null,"DG"],"Sports module\u0004GF":[null,"GF"],"Sports module\u0004Game %s":[null,"Partido %1$s"],"Sports module\u0004Games":[null,"Partidos"],"Sports module\u0004Games Behind":[null,"Partidos detrás"],"Sports module\u0004Goal Differential":[null,"Diferencial de goles"],"Sports module\u0004Goals Against":[null,"Goles en contra"],"Sports module\u0004Goals For":[null,"Goles a favor"],"Sports module\u0004Group %s":[null,"Grupo %1$s"],"Sports module\u0004Groups":[null,"Grupos"],"Sports module\u0004H":[null,"L"],"Sports module\u0004HT":[null,"Descanso"],"Sports module\u0004Halftime":[null,"Descanso"],"Sports module\u0004Home Record":[null,"Registro como local"],"Sports module\u0004Interrupted":[null,"Interrumpido"],"Sports module\u0004L":[null,"P"],"Sports module\u0004Loser of Game %s":[null,"Perdedor del partido %1$s"],"Sports module\u0004Losses":[null,"Perdidos"],"Sports module\u0004MP":[null,"PJ"],"Sports module\u0004Matchday 1 of 3":[null,"Jornada 1 de 3"],"Sports module\u0004Matchday 2 of 3":[null,"Jornada 2 de 3"],"Sports module\u0004Matchday 3 of 3":[null,"Jornada 3 de 3"],"Sports module\u0004Matches":[null,"Partidos"],"Sports module\u0004Matches Played":[null,"Partidos jugados"],"Sports module\u0004Matchups":[null,"Partidos"],"Sports module\u0004No %s games scheduled in %s":[null,"No hay partidos de %1$s programados durante %2$s"],"Sports module\u0004North":[null,"Norte"],"Sports module\u0004OT":[null,"Prórroga"],"Sports module\u0004OT%s":[null,"TE%1$s"],"Sports module\u0004Overall Record":[null,"Registro general"],"Sports module\u0004PA":[null,"PC"],"Sports module\u0004PF":[null,"PF"],"Sports module\u0004PTS":[null,"PTS"],"Sports module\u0004Past Games":[null,"Partidos anteriores"],"Sports module\u0004Past Matches":[null,"Partidos anteriores"],"Sports module\u0004Pct":[null,"%"],"Sports module\u0004Penalties":[null,"Penaltis"],"Sports module\u0004Points":[null,"Puntos"],"Sports module\u0004Postponed":[null,"Aplazado"],"Sports module\u0004Quarter-finals":[null,"Cuartos de final"],"Sports module\u0004Round of 16":[null,"Octavos de final"],"Sports module\u0004Schedule":[null,"Calendario"],"Sports module\u0004Scores":[null,"Puntuación"],"Sports module\u0004Season Weeks":[null,"Semanas de la temporada"],"Sports module\u0004Semi-finals":[null,"Semifinales"],"Sports module\u0004South":[null,"Sur"],"Sports module\u0004Stages":[null,"Fases"],"Sports module\u0004Standings":[null,"Clasificación"],"Sports module\u0004Strk":[null,"Racha"],"Sports module\u0004Suspended":[null,"Suspendido"],"Sports module\u0004T":[null,"B"],"Sports module\u0004TBD":[null,"Pte."],"Sports module\u0004Team":[null,"Equipo"],"Sports module\u0004Third place":[null,"Tercera posición"],"Sports module\u0004Ties":[null,"Empates"],"Sports module\u0004Times are in your %slocal time zone%s":[null,"Las horas se indican en tu %1$szona horaria local%2$s"],"Sports module\u0004Times are in your local time zone":[null,"Las horas se indican en tu zona horaria local"],"Sports module\u0004Total":[null,"Total"],"Sports module\u0004Total Points Against":[null,"Total de puntos en contra"],"Sports module\u0004Total Points For":[null,"Total de puntos a favor"],"Sports module\u0004W":[null,"O"],"Sports module\u0004W-D-L":[null,"V-E-D"],"Sports module\u0004W-L":[null,"G-P"],"Sports module\u0004Week":[null,"Semana"],"Sports module\u0004West":[null,"Oeste"],"Sports module\u0004Western":[null,"Oeste"],"Sports module\u0004Western Conference":[null,"Conferencia Oeste"],"Sports module\u0004Win/Loss Record":[null,"Registro de victorias/derrotas"],"Sports module\u0004Winner of Game %s":[null,"Ganador del partido %1$s"],"Sports module\u0004Winning Percentage":[null,"Porcentaje de victorias"],"Sports module\u0004Wins":[null,"Victorias"],"Sports module\u0004if necessary":[null,"en caso necesario"],"Sports module\u0004logo":[null,"logotipo"],"Sports module\u0004vs":[null,"contra"],"Start searching!":[null,"¡Comience a buscar!"],"Stock":[null,"Acciones"],"Stocks module\u000415 minutes delayed":[null,"15 minutos de retraso"],"Stocks module\u00041D":[null,"1D"],"Stocks module\u00041M":[null,"1M"],"Stocks module\u00041Y":[null,"1A"],"Stocks module\u000452wk High":[null,"Máximo en 52 semanas"],"Stocks module\u000452wk Low":[null,"Mínimo en 52 semanas"],"Stocks module\u00045D":[null,"5D"],"Stocks module\u00045Y":[null,"5A"],"Stocks module\u0004All":[null,"Todo"],"Stocks module\u0004As of":[null,"Desde"],"Stocks module\u0004Avg Vol":[null,"Volumen medio"],"Stocks module\u0004B":[null,"mil millones"],"Stocks module\u0004Data provided by IEX Cloud":[null,"Datos proporcionados por IEX Cloud"],"Stocks module\u0004Data provided by Refinitiv":[null,"Datos proporcionados por Refinitiv"],"Stocks module\u0004High":[null,"Máximo"],"Stocks module\u0004Historical prices not available":[null,"Historial de precios no disponible"],"Stocks module\u0004Low":[null,"Mínimo"],"Stocks module\u0004M":[null,"M"],"Stocks module\u0004Mkt Cap":[null,"Capitalización de mercado"],"Stocks module\u0004Open":[null,"Abrir"],"Stocks module\u0004P/E":[null,"P/E"],"Stocks module\u0004Prev Close":[null,"Cierre anterior"],"Stocks module\u0004T":[null,"B"],"Stocks module\u0004Today":[null,"Hoy"],"Stocks module\u0004YTD":[null,"Este año"],"Stocks module\u0004k":[null,"mil"],"Submit":[null,"Enviar"],"Support":[null,"Soporte"],"Sweden":[null,"Suecia"],"Switch to the search engine that doesn't track you. Ever.":[null,"Cambia al motor de búsqueda que no te sigue. Siempre."],"Switzerland":[null,"Suiza"],"Switzerland (de)":[null,"Suiza (de)"],"Switzerland (fr)":[null,"Suiza (fr)"],"Switzerland (it)":[null,"Suiza (it)"],"TV":[null,"Televisión"],"Taiwan":[null,"Taiwán"],"Take Back Your Privacy!":[null,"Vuelva a ganar su privacidad"],"Tan":[null,"Marrón"],"Text font:":[null,"Fuente de texto:"],"Text:":[null,"Texto:"],"Thailand":[null,"Tailandia"],"Thank you!":[null,"¡Gracias!"],"Theme":[null,"Tema"],"Theme Changed":[null,"Tema cambiado"],"Themes":[null,"Temas"],"Thesaurus":[null,"Tesauro"],"These browser permissions are used to add privacy protection on websites you visit by blocking hidden trackers, encrypting connections where possible, and by making DuckDuckGo your default search engine.":[null,"Los permisos del buscador se usan para añadir protección de la privacidad en los sitios que visitas bloqueando rastreadores ocultos, encriptando las conexiones cuando es posible y haciendo DuckDuckGo to buscador predeterminado."],"This page requires Javascript to function.":[null,"Esta página requiere Javascript para funcionar."],"This video is not yet able to be watched here. You can watch it on %s.":[null,"Este video aún no está disponible aquí. Puedes verlo en %1$s."],"Tired of being tracked online? %sWe can help.%s":[null,"¿Cansado de que te rastreen? %1$sPodemos ayudarte%2$s."],"Today":[null,"Hoy"],"Tomorrow":[null,"Mañana"],"Top":[null,"Arriba"],"Tour":[null,"Recorrido"],"Trusted by tens of millions worldwide!":[null,"¡Con la confianza de decenas de millones de personas en todo el mundo!"],"Try a search!":[null,"Intenta una búsqueda!"],"Try our homepage that never shows these messages:":[null,"Pruebe nuestra página inicial que nunca presenta estos mensajes:"],"Try searching for %s":[null,"Prueba a buscar buscar %1$s"],"Try the DuckDuckGo app":[null,"Prueba la aplicación DuckDuckGo"],"Try: %s":[null,"Intenta: %s"],"Tunisia":[null,"Túnez"],"Turkey":[null,"Turquía"],"Turn off:":[null,"Apagar"],"Twitter":[null,"Twitter"],"Type %sDuckDuckGo%s in the first %sform field":[null,"Escribe %1$sDuckDuckGo%2$s en el primer %3$scampo del formulario"],"Type %sduckduckgo.com%s in the %ssecond form field":[null,"Escribe %1$sduckduckgo.com%2$s en el %3$ssegundo campo del formulario"],"URL Parameters":[null,"Parámetros de la URL"],"URLs:":[null,"URL:"],"US (English)":[null,"Estados Unidos"],"US (Spanish)":[null,"Estados Unidos (es)"],"USA":[null,"EE. UU."],"Under %sOn startup%s, click %sOpen a specific page%s then click %sSet Pages%s.":[null,"%sAl Inicio%s, haz clic en %sAbrir una página en específico%s y luego haz clic en %sConfigurar Páginas%s"],"Under %sOn startup%s, select %sHomepage%s and enter: https://duckduckgo.com":[null,"En %sInicio%s, elige %sPágina de inicio%s e introduce: https://duckduckgo.com"],"Under %sOpen with%s select %sA specific page or pages%s":[null,"Bajo %sAbrir con%s selecciones %sUna página/s específica/s%s"],"Under %sSTARTUP > Homepage%s enter: https://duckduckgo.com":[null,"Bajo %sInicio > Página inicial%s ingresa: https://duckduckgo.com"],"Under %sSearch Settings%s select %sDuckDuckGo%s":[null,"En %1$sAjustes de Búsqueda%2$s selecciona %3$sDuckDuckGo%4$s"],"Under %sSearch in the address bar with%s select %sAdd New%s":[null,"Abajo %sBuscar en la barra de dirección con%selecciona %sAdicionar nuevo%s"],"Under %sSearch%s section, click %sManage search engines...%s":[null,"En la sección %sBuscar%s, haz click en %sAdministrar motores de búsqueda...%s"],"Under On startup select %sOpen a specific page or set of pages%s":[null,"En Inicio seleccione %sAbrir una página o grupo de páginas específico%s"],"Under Search click the drop down and select %sDuckDuckGo%s":[null,"Haz click en la lista despegable debajo de Buscar y seleccciona %sDuckDuckGo%s"],"Underline:":[null,"Subrayado:"],"Unicode":[null,"Unicode"],"United Kingdom":[null,"Reino Unido"],"Uruguay":[null,"Uruguay"],"Use":[null,"Usar"],"Use in Firefox":[null,"Usar en Firefox"],"Use in Safari":[null,"Usar en Safari"],"Videos":[null,"Vídeos"],"Vietnam":[null,"Vietnam"],"View File":[null,"Ver archivo"],"View on %s":[null,"Ver en %1$s"],"Visited links:":[null,"Enlaces visitados:"],"Wales":[null,"Gales"],"Watch Here":[null," Míralo aquí"],"Watch on %s":[null,"Ver en %1$s"],"Watch on YouTube":[null,"Ver en Youtube"],"We don't store your personal info. We don't follow you around with ads. We don't track you. Ever.":[null,"No almacenamos información personal. No te perseguimos con anuncios. No te rastreamos. Nunca."],"Weather":[null,"Clima"],"What is this?":[null,"¿Qué es esto?"],"Where it says Homepage click %sSet to Current Page%s.":[null,"Haz clic en %sEstablecer a la página actual%s donde dice Página principal."],"White":[null,"Blanco"],"Who We Are":[null,"Quiénes somos"],"Why Privacy":[null,"Por qué Privacidad"],"Width:":[null,"Ancho:"],"Yellow":[null,"Amarillo"],"Yes":[null,"Sí"],"Yesterday":[null,"Ayer"],"You're now searching with privacy!":[null,"¡Ahora estás buscando con privacidad!"],"You're now searching with privacy. %sGet tips to reduce your footprint even more.":[null,"Estás buscando ahora con privacidad. %sObtén consejos para reducir tu huella aún más."],"YouTube (owned by Google) does not let you watch videos anonymously. As such, watching YouTube videos here will be tracked by YouTube/Google.":[null,"Youtube (propiedad de Google) no te deja ver vídeos anonimamente. Como tal, ver vídeos de Youtube aquí sera rastreado por Youtube/Google"],"YouTube Privacy Warning":[null,"Alerta de privacidad de YouTube"],"Your browser indicates if you've visited this link":[null,"Tu navegador indique si has visitado este enlace"],"access_song\u0004Get this song on:":[null,"Obtén esta canción en:"],"additional\u0004More":[null,"Más"],"additional_info_at\u0004More results":[null,"Más resultados"],"ads\u0004Report Ad":[null,"Reportar publicidad"],"advertising":[null,"publicidad"],"attribution\u0004Credits":[null,"Creditos"],"attribution\u0004Developer":[null,"Desarollador"],"attribution\u0004Producer":[null,"Productor"],"attribution\u0004This Instant Answer was made by the %sDuckDuckHack%s Community.":[null,"Esta respuesta instantánea fue hecha por la Comunidad de %1$sDuckDuckHack%2$s.."],"by %s":[null,"por %s"],"cloudsave\u0004Choose a unique passphrase for your settings.":[null,"Elige una clave única para tu configuración."],"cloudsave\u0004Click or tap %sDelete My Data%s. This removes the data from the cloud, but it remains in your browser until you click/tap %sReset All Settings%s.":[null,"Pulsa o haz clic en %1$sBorrar mis datos%2$s. Esto eliminará los datos de la nube, pero permanecerán en tu navegador hasta que hagas pulses o hagas clic en %3$sRestablecer todos los ajustes%4$s."],"cloudsave\u0004Cloud Save":[null,"Guardar en la nube"],"cloudsave\u0004Cloud Save Enabled":[null,"\"Guardar en la Nube\" está activado"],"cloudsave\u0004Cloud Save FAQ":[null,"Preguntas frecuentes sobre Cloud Save"],"cloudsave\u0004Cloud Save discussion on duck.co":[null,"Guardar discusión en la nube dentro de duck.co"],"cloudsave\u0004Cloud Save lets you save your settings more permanently by entering a passphrase. It is entirely optional.":[null,"Cloud Save le permite guardar sus ajustes de manera permanente mediante una clave. Es totalmente opcional."],"cloudsave\u0004Each time you ask for a passphrase suggestion, we receive a long list of random words from the DuckDuckGo servers. In the browser, we then select 4-5 random words from that list, ensuring that the passphrase is at least 18-20 characters long.":[null,"Cada vez que pides una sugerencia de contraseña, recibimos una amplia lista de palabras aleatorias de los servidores de DuckDuckGo. A continuación seleccionamos 4-5 palabras aleatorias de esa lista en el navegador, asegurándonos de que la clave de acceso tenga por lo menos 18-20 caracteres."],"cloudsave\u0004Enable Cloud Save by entering your existing passphrase.":[null,"Activa Cloud Save introduciendo tu clave actual."],"cloudsave\u0004Enter a new passphrase and click/tap %sSave Settings%s. This will save your data under your new passphrase.":[null,"Introduce una nueva clave y haz pulsa o haz clic en %1$sGuardar Configuración%2$s. Esto hará quetus datos se guarden con la nueva clave."],"cloudsave\u0004Enter your passphrase to load your settings.":[null,"Introduce tu clave para cargar tu configuración."],"cloudsave\u0004How do I change my passphrase?":[null,"¿Cómo cambio mi contraseña?"],"cloudsave\u0004How does it work?":[null,"¿Cómo funciona esto?"],"cloudsave\u0004How does passphrase generation work?":[null,"¿Cómo funciona el generador de contraseñas?"],"cloudsave\u0004How is it anonymous?":[null,"¿Cómo se mantiene anónimo?"],"cloudsave\u0004I forgot my passphrase. Can you recover it?":[null,"Olvidé mi contraseña. ¿Pueden recuperarla?"],"cloudsave\u0004In the interest of transparency, this data is not encrypted: You can see exactly what information we store.":[null,"Para mayor transparencia, estos datos no se encriptan: así puedes saber exactamente qué información almacenamos."],"cloudsave\u0004Is deleted data really deleted?":[null,"¿Los datos borrados realmente están borrados?"],"cloudsave\u0004It’s easier to remember 4-5 words than 10 random letters and numbers, and far more secure.":[null,"Es más fácil recordar 4-5 palabras que 10 letras y números aleatorios, y mucho más seguro."],"cloudsave\u0004Load Cloud Settings":[null,"Cargar Ajustes de la Nube"],"cloudsave\u0004Only the settings that you have changed. They are detailed on the %sURL Parameters%s page.":[null,"Solo los ajustes que has guardado. Estan detallados en la pagina %sURL Parameters%s"],"cloudsave\u0004Passphrase is already taken.":[null,"La clave de acceso ya está en uso."],"cloudsave\u0004Passphrase must be at least 9 characters long.":[null,"La clave de acceso debe tener al menos 9 caracteres."],"cloudsave\u0004Passphrase not found.":[null,"No se ha encontrado la clave de acceso."],"cloudsave\u0004Passphrases cannot be recovered as we don't associate your IP address, browser fingerprint, or any other information with the file.":[null,"No se puede recuperar las claves de acceso ya que no asociamos tu dirección IP, la huella digital de tu navegador ni ninguna otra información con el archivo."],"cloudsave\u0004Please enter a pass phrase":[null,"Por favor, ingrese una contraseña"],"cloudsave\u0004Reset All Settings":[null,"Restaurar todos los ajustes"],"cloudsave\u0004See also":[null,"Ver también"],"cloudsave\u0004Something went wrong saving to the server, please try again.":[null," Algo salió mal guardando en el servidor, por favor intente de nuevo."],"cloudsave\u0004The Cloud Save bookmarklet allows any changes you make to your settings to automatically save in the cloud.":[null,"El bookmarklet de Cloud Save permite que los cambios que realices en tu configuración se guarden automáticamente en la nube."],"cloudsave\u0004This has a few benefits:":[null,"Esto tiene algunos beneficios:"],"cloudsave\u0004We don't store usernames or any personally identifiable information.":[null,"No almacenamos nombres de usuario ni ninguna información personal identificable."],"cloudsave\u0004What information gets saved?":[null,"¿Qué información se guarda?"],"cloudsave\u0004What is the Cloud Save bookmarklet and how does it differ from the URL parameter bookmarklet?":[null,"¿Qué es el bookmarklet de Cloud Save y en qué se diferencia del bookmarklet de parámetro de URL?"],"cloudsave\u0004Yes, we throw away data when you’re done with it, and it cannot be recovered.":[null,"Sí, descartamos los datos cuando terminas de utilizarlos, y no se pueden recuperar."],"cloudsave\u0004You can do this by saving your settings under a different passphrase, optionally deleting the first set.":[null,"Puede hacer esto guardando sus opciones con una contraseña distinta, borrando si quiere la anterior."],"cloudsave\u0004You can restore your settings after deleting cookies.":[null,"Puedes restaurar tu configuración después de borrar las cookies."],"cloudsave\u0004You can share your settings among computers and browsers.":[null,"Puede compartir sus ajustes entre ordenadores y navegadores."],"cloudsave\u0004You can store several sets of settings for different purposes.":[null,"Puede almacenar varios conjuntos de ajustes para diferentes propósitos."],"cloudsave\u0004Your passphrase generates a 512-bit key by using the Secure Hash Algorithm known as %sSHA-2%s. Only the key and associated settings file leave your browser. We save the settings file using the key as the name. DuckDuckGo never knows your passphrase.":[null,"Tu clave de acceso genera una clave de 512 bits que utiliza el algoritmo de cifrado seguro conocido como %1$sSHA-2%2$s. Solo la clave y su configuración asociada salen de tu navegador. Guardamos el archivo de configuración utilizando la clave como nombre. DuckDuckGo ni siquiera conoce tu clave de acceso."],"color\u0004Black":[null,"Negro"],"color\u0004Blue":[null,"Azul"],"color\u0004Brown":[null,"Café"],"color\u0004Gray":[null,"Gris"],"color\u0004Green":[null,"Verde"],"color\u0004Orange":[null,"Anaranjado"],"color\u0004Pink":[null,"Rosado"],"color\u0004Purple":[null,"Púrpura"],"color\u0004Red":[null,"Rojo"],"color\u0004Teal":[null,"Pato"],"color\u0004White":[null,"Blanco"],"color\u0004Yellow":[null,"Amarillo"],"directions\u0004Add a starting point and destination to find a route.":[null,"Añade un punto de inicio y un destino para encontrar una ruta."],"directions\u0004Directions":[null,"Direcciones"],"directions\u0004Driving":[null,"Conduciendo"],"directions\u0004Fastest route":[null,"Ruta más rápida"],"directions\u0004Hide Steps":[null,"Ocultar pasos"],"directions\u0004Make sure your search is spelled correctly.":[null,"Asegúrate de que tu búsqueda esté bien escrita."],"directions\u0004Navigate in":[null,"Navegar en"],"directions\u0004No Available Routes":[null,"No hay rutas disponibles"],"directions\u0004No available routes between these locations":[null,"No hay rutas disponibles entre estas ubicaciones"],"directions\u0004No results found.":[null,"No se han encontrado resultados."],"directions\u0004Print Directions":[null,"Imprimir indicaciones"],"directions\u0004Show Steps":[null,"Mostrar pasos"],"directions\u0004Show map":[null,"Mostrar mapa"],"directions\u0004Suggestions:":[null,"Sugerencias:"],"directions\u0004To print directions:%sGo back to the map.%sSelect the route you want to print.%sClick the print icon.%s":[null,"Para imprimir las indicaciones:%1$sVuelve al mapa.%2$sSelecciona la ruta que deseas imprimir.%3$sHaz clic en el icono de impresión.%4$s"],"directions\u0004Try adding a city, state, or postal code.":[null,"Intenta añadir una ciudad, estado o código postal."],"directions\u0004Via":[null,"Pasar por"],"directions\u0004Walking":[null,"Andando"],"directions\u0004Your Location":[null,"Tu ubicación"],"donttrackus\u0004track":[null,"rastrear"],"email":[null,"correo"],"email newsletter\u0004Enter your email address.":[null,"Ingresa tu correo electrónico."],"email newsletter\u0004Subscribe":[null,"Suscríbete"],"expand_text\u0004See More":[null,"Ver más"],"expand_text\u0004Show Less":[null,"Mostrar menos"],"expand_text\u0004Show More":[null,"Muestra mas"],"feedback form\u0004Ad is annoying":[null,"El anuncio es molesto"],"feedback form\u0004Ad is inappropriate":[null,"El anuncio es inapropiado"],"feedback form\u0004Ad is irrelevant":[null,"El anuncio es irrelevante"],"feedback form\u0004Ad is malware":[null,"El anuncio es malware"],"feedback form\u0004Ad is suspicious":[null,"El anuncio es sospechoso"],"feedback form\u0004Address is incorrect":[null,"La dirección es incorrecta"],"feedback form\u0004Advertisements":[null,"Anuncios"],"feedback form\u0004Are these ads helpful?":[null,"¿Son útiles estos anuncios?"],"feedback form\u0004Are these links helpful?":[null,"¿Son útiles estos enlaces?"],"feedback form\u0004Date Filters":[null,"Filtros de Fechas"],"feedback form\u0004Date filters":[null,"Filtros de fechas"],"feedback form\u0004Feedback Sent":[null,"Feedback enviado"],"feedback form\u0004Feedback Sent Successfully":[null,"Comentarios enviados correctamente"],"feedback form\u0004Filters aren't working":[null,"Los filtros no funcionan"],"feedback form\u0004Help DuckDuckGo%s improve searches like this":[null,"Ayudar a DuckDuckGo%1$s a mejorar búsquedas como esta"],"feedback form\u0004Hours are incorrect":[null,"Las horas son incorrectas"],"feedback form\u0004Hours are missing":[null,"Faltan horas"],"feedback form\u0004I don't want this type of result":[null,"No quiero este tipo de resultado"],"feedback form\u0004I expected to see results from more sellers":[null,"Esperaba ver resultados de más vendedores"],"feedback form\u0004Is this video helpful?":[null,"¿Es útil este vídeo?"],"feedback form\u0004Location on map is wrong":[null,"La ubicación en el mapa es incorrecta"],"feedback form\u0004Maps":[null,"Mapas"],"feedback form\u0004Maps / location info":[null,"Información del mapa/ubicación"],"feedback form\u0004Optional":[null,"Opcional"],"feedback form\u0004Other":[null,"Otro"],"feedback form\u0004Own this business? Manage on %s":[null,"¿Eres dueño de este negocio? Gestiónalo en %1$s"],"feedback form\u0004Phone number is incorrect":[null,"El número de teléfono es incorrecto"],"feedback form\u0004Phone number is missing":[null,"Falta el número de teléfono"],"feedback form\u0004Pick a category":[null,"Formulario de retroalimentación"],"feedback form\u0004Pick a specific problem":[null,"Escoge un problema específico"],"feedback form\u0004Please provide feedback":[null,"Añade comentarios"],"feedback form\u0004Please suggest the correct address":[null,"Sugiere la dirección correcta"],"feedback form\u0004Please suggest the correct hours of operation":[null,"Sugiere el horario correcto de funcionamiento"],"feedback form\u0004Please suggest the correct phone number":[null,"Sugiere el número de teléfono correcto"],"feedback form\u0004Please suggest the correct website URL":[null,"Sugiere la URL correcta del sitio web"],"feedback form\u0004Please suggest the hours of operation":[null,"Sugiere el horario de funcionamiento"],"feedback form\u0004Please suggest the phone number":[null,"Sugiere el número de teléfono"],"feedback form\u0004Please suggest the website URL":[null,"Sugiere la URL del sitio web"],"feedback form\u0004Price shown doesn't reflect merchant site":[null,"El precio mostrado no se corresponde con el sitio del vendedor"],"feedback form\u0004Product ad content is deceptive":[null,"El contenido del anuncio del producto es engañoso"],"feedback form\u0004Product ad pricing is misleading":[null,"El contenido del anuncio del producto es confuso"],"feedback form\u0004Product ads aren't relevant":[null,"Los anuncios de productos no son relevantes"],"feedback form\u0004Reports are anonymous and sent to DuckDuckGo to help improve our search service. Your anonymous feedback is also shared with %s to help improve their services.":[null,"Los informes son anónimos y se envían a DuckDuckGo para ayudar a mejorar nuestro servicio de búsqueda. Tus comentarios anónimos también se comparten con %1$s para ayudar a mejorar sus servicios."],"feedback form\u0004Search box":[null,"Cuadro de búsqueda"],"feedback form\u0004Security issue (opens in new tab)":[null,"Problema de seguridad (se abre en una pestaña nueva)"],"feedback form\u0004Send feedback":[null,"Enviar feedback"],"feedback form\u0004Send feedback for:":[null,"Enviar comentarios para:"],"feedback form\u0004Settings":[null,"Configuración"],"feedback form\u0004Share Feedback":[null,"Compartir opiniones"],"feedback form\u0004Share feedback for this result.":[null,"Compartir comentarios para este resultado."],"feedback form\u0004Share feedback on your search results.":[null,"Compartir comentarios de tus resultados de búsqueda."],"feedback form\u0004This place is permanently closed":[null,"Este lugar está cerrado permanentemente"],"feedback form\u0004This place is too far away":[null,"Este lugar está demasiado lejos"],"feedback form\u0004Want to tell us a bit more?":[null,"¿Quieres contarnos más?"],"feedback form\u0004We use feedback like this to improve DuckDuckGo.":[null,"Utilizamos comentarios como este para mejorar DuckDuckGo."],"feedback form\u0004We use feedback like this to improve DuckDuckGo. Suggestions will be incorporated at the discretion of %s. Corrections may not show up in results right away.":[null,"Utilizamos comentarios como este para mejorar DuckDuckGo. Las sugerencias se incorporarán a discreción de %1$s. Es posible que las correcciones no aparezcan en los resultados de inmediato."],"feedback form\u0004Web Links":[null,"Enlaces web"],"feedback form\u0004Website is incorrect":[null,"El sitio web es incorrecto"],"feedback form\u0004Website is missing":[null,"Falta el sitio web"],"feedback form\u0004What could be better?":[null,"¿Qué podría ser mejor?"],"feedback form\u0004What did you like?":[null,"¿Qué te gusta?"],"feedback form\u0004What do you think of the information shown?":[null,"¿Qué opinas de la información mostrada?"],"feedback form\u0004Wikipedia info":[null,"Información de Wikipedia"],"feedback form\u0004Wrong place is shown":[null,"Se muestra el lugar equivocado"],"footer_card\u0004Help your friends and family take back their privacy!":[null,"Ayuda a tus amigos y familiares a recuperar su privacidad"],"for":[null,"Para"],"forecast\u0004E":[null,"E"],"forecast\u0004Humidity":[null,"Humedad"],"forecast\u0004N":[null,"N"],"forecast\u0004NE":[null,"NE"],"forecast\u0004NW":[null,"NO"],"forecast\u0004S":[null,"S"],"forecast\u0004SE":[null,"SE"],"forecast\u0004SW":[null,"SO"],"forecast\u0004W":[null,"O"],"forecast\u0004Wind":[null,"Viento"],"frontpage\u0004%sHelp Spread DuckDuckGo!%s":[null,"%s¡Ayuda a difundir DuckDuckGo!%s"],"frontpage\u0004%sLearn More%s.":[null,"%sAprende más%s."],"frontpage\u0004Learn %sMore%s":[null,"Conoce %sMás%s"],"frontpage\u0004More":[null,"Más"],"frontpage\u0004More ways to add DuckDuckGo to %s":[null,"Otras maneras de añadir DuckDuckGo a %s"],"frontpage\u0004Tour":[null,"Recorrido"],"homepage ATB modal\u0004Add DuckDuckGo Extension":[null,"Añadir extensión de DuckDuckGo"],"homepage ATB modal\u0004Add our extension to help protect personal data":[null,"Añade nuestra extensión para ayudar a proteger tus datos personales"],"homepage ATB modal\u0004At DuckDuckGo, we agree.":[null,"En DuckDuckGo, estamos de acuerdo"],"homepage ATB modal\u0004Block most trackers as you browse.":[null,"Bloquea la mayoría de los rastreadores mientras navegas."],"homepage ATB modal\u0004Block trackers and take control of your personal data":[null,"Bloquea los rastreadores y toma el control de tus datos personales"],"homepage ATB modal\u0004Block trackers as you browse.":[null,"Bloquea los rastreadores mientras navegas."],"homepage ATB modal\u0004Keep your search history private":[null,"Mantén la privacidad de tu historial de búsqueda"],"homepage ATB modal\u0004Learn More at Firefox Add-Ons":[null,"Más información en Complementos de Firefox"],"homepage ATB modal\u0004Stop hidden trackers lurking on other websites.":[null,"Detén a los rastreadores ocultos que acechan en otros sitios web."],"homepage ATB modal\u0004Stop most hidden trackers lurking on other websites.":[null,"Detén a la mayoría de rastreadores ocultos que acechan en otros sitios web."],"homepage ATB modal\u0004Take control of your personal data":[null,"Toma el control de tus datos personales"],"homepage ATB modal\u0004Take control of your personal data!":[null,"Toma el control de tus datos personales"],"homepage ATB modal\u0004We keep your search history private":[null,"Mantenemos la privacidad de tu historial de búsqueda"],"homepage ATB modal\u0004We stop anyone from getting your search history, including us.":[null,"Evitamos que nadie obtenga tu historial de búsqueda, lo que nos incluye a nosotros."],"homepage ATB modal\u0004We'll block trackers trying to collect your data as you browse.":[null,"Bloquearemos los rastreadores que intenten recopilar tus datos mientras navegas."],"homepage ATB modal\u0004Your DuckDuckGo search history is private":[null,"Tu historial de búsqueda de DuckDuckGo es privado"],"homepage ATB modal\u0004Your data shouldn’t be for sale.":[null,"Tus datos no deberían poder venderse."],"homepage ATB modal\u0004You’re Searching Privately with DuckDuckGo.":[null,"Estás buscando de forma privada con DuckDuckGo."],"homepage ATB social proof\u0004Average rating: %s out of 5":[null,"Valoración media: %1$s de 5"],"homepage onboarding\u0004Already a fan?":[null,"¿Ya eres un admirador?"],"homepage onboarding\u0004Back to search":[null,"Volver a buscar"],"homepage onboarding\u0004Install DuckDuckGo":[null,"Instalar DuckDuckGo"],"homepage onboarding\u0004Invite friends to the Duck Side!":[null,"¡Invite a amigos al lado del Pato!"],"homepage onboarding\u0004No tracking, no ad targeting, just searching!":[null,"¡No rastreamos, no lo hacemos blanco de publicidad, sólo búsquedas!"],"homepage onboarding\u0004No tracking, no ad targeting, just searching.":[null,"Sin rastrear, sin hacerlo objetivo de publicidad, sólo buscar"],"homepage onboarding\u0004Other search engines track your searches even when you’re in private browsing mode. We don’t track you — period.":[null,"Otros motores de búsqueda rastrean sus búsquedas aún cuando usted está en modo de navegación privado. Nosotros no lo rastreamos - punto."],"homepage onboarding\u0004Our privacy policy is simple: we don’t collect or share any of your personal information.":[null,"Nuestra política de privacidad es simple: no recolectamos ni compartimos su información personal."],"homepage onboarding\u0004Share DuckDuckGo and help friends take their privacy back!":[null,"¡Comparta DuckDuckGo y ayude a sus amigos a volver a ganar su privacidad!"],"homepage onboarding\u0004Switch to DuckDuckGo and take back your privacy!":[null,"¡Cambiese a DuckDuckGo y vuelva a ganar su privacidad!"],"homepage onboarding\u0004Thank you.":[null,"Gracias."],"homepage onboarding\u0004We don't store your personal info or track you. Ever.":[null,"No guardamos tu información personal ni te rastreamos. Nunca."],"homepage onboarding\u0004We don’t follow you around with ads.":[null,"No lo seguimos en otras partes con anuncios"],"homepage onboarding\u0004We don’t store your personal information. Ever.":[null,"No almacenamos su información personal. Nunca."],"homepage onboarding\u0004We don’t store your search history. We therefore have nothing to sell to advertisers that track you across the Internet.":[null,"No almacenamos su historial de búsquedas. Así que no tenemos nada para venderle a los anunciantes que lo rastrean por internet"],"homepage onboarding\u0004We don’t track you in or out of private browsing mode.":[null,"No lo rastreamos en o fuera del modo de navegación privada"],"homepage onboarding\u0004Welcome to the Duck Side!":[null,"¡Bienvenido al lado del Pato!"],"image-color\u0004All colors":[null,"Todos los colores"],"image-color\u0004Black and white":[null,"Blanco y negro"],"image-color\u0004Color only":[null,"Solo color"],"image-layout\u0004All layouts":[null,"Todos los diseños"],"image-layout\u0004Square":[null,"Cuadrado"],"image-layout\u0004Tall":[null,"Altura"],"image-layout\u0004Wide":[null,"Ancho"],"image-licence\u0004All Creative Commons":[null,"Todas las licencias Creative Commons"],"image-licence\u0004All Licenses":[null,"Todas las licencias"],"image-licence\u0004Free to Modify, Share, and Use":[null,"Permitido modificar, compartir y usar"],"image-licence\u0004Free to Modify, Share, and Use Commercially":[null,"Permitido modificar, compartir y usar comercialmente"],"image-licence\u0004Free to Share and Use":[null,"Permitido compartir y usar"],"image-licence\u0004Free to Share and Use Commercially":[null,"Permitido compartir y usar comercialmente"],"image-licence\u0004Public Domain":[null,"Dominio público"],"image-type\u0004All types":[null,"Todos los tipos"],"image-type\u0004Animated GIF":[null,"GIF animado"],"image-type\u0004Clipart":[null,"Imágenes prediseñadas"],"image-type\u0004Line Drawing":[null,"Dibujo lineal"],"image-type\u0004Photograph":[null,"Fotografía"],"image-type\u0004Transparent":[null,"Transparente"],"install-duckduckgo\u0004%sClick %sAdd%sCheck %sAllow%s, then click %sOkay%s":[null,"%1$sHaz clic en %2$sAñadir%3$sMarcar %4$sPermitir%5$s y luego en %6$sAceptar%7$s"],"install-duckduckgo\u0004%sClick %sAllow%sClick %sAdd%sCheck %sAllow%s, then click %sOkay%s":[null,"%1$sPulsa %2$sPermitir%3$sPulsa %4$sAñadir%5$sComprobar %6$sPermitir%7$s, después pulsa %8$sOk%9$s"],"install-duckduckgo\u0004%sClick %sContinue To Installation%sClick %sAdd%sCheck %sAllow%s, then click %sOkay%s":[null,"%1$sPulsa %2$sContinua a la instalacción%3$sPulsa %4$sAñadir%5$sComprobar %6$sPermitir%7$s, después pulsa %8$sOk%9$s"],"install-duckduckgo\u0004Almost there!":[null,"¡Ya casi!"],"install-duckduckgo\u0004Click %sAdd Extension%s.":[null,"Haga clic en %sAgregar Extension%s."],"install-duckduckgo\u0004Click %sAllow%s, then %sAdd%s.":[null,"Pulsa %1$sPermitir%2$s, luego %3$sAñadir%4$s."],"install-extension\u00041. Open %sDownloads%s":[null,"1. Abrir %sDescargas%s"],"install-extension\u00042. Double-click %sduckduckgo.safariextz%s":[null,"2. Doble pulsación %sduckduckgo.safariextz%s"],"install-extension\u0004Don't see it? %s%s%sClick here to re-download%s":[null,"¿No lo ve? %s%s%sPulse aquí para volver a cargar%s"],"language_name\u0004Afrikaans":[null,"Afrikaans"],"language_name\u0004Albanian":[null,"Albanés"],"language_name\u0004Amharic":[null,"Amhárico"],"language_name\u0004Arabic":[null,"Árabe"],"language_name\u0004Armenian":[null,"Armenio"],"language_name\u0004Assamese":[null,"Asamés"],"language_name\u0004Azerbaijani":[null,"Azerí"],"language_name\u0004Bangla":[null,"Bengalí"],"language_name\u0004Bosnian":[null,"Bosnio"],"language_name\u0004Bulgarian":[null,"Búlgaro"],"language_name\u0004Cantonese (Traditional)":[null,"Cantonés (tradicional)"],"language_name\u0004Catalan":[null,"Catalán"],"language_name\u0004Chinese Simplified":[null,"Chino simplificado"],"language_name\u0004Chinese Traditional":[null,"Chino tradicional"],"language_name\u0004Croatian":[null,"Croata"],"language_name\u0004Czech":[null,"Checo"],"language_name\u0004Danish":[null,"Danés"],"language_name\u0004Dari":[null,"Persa darí"],"language_name\u0004Dutch":[null,"Neerlandés"],"language_name\u0004English":[null,"Inglés"],"language_name\u0004Estonian":[null,"Estonio"],"language_name\u0004Fijian":[null,"Fiyiano"],"language_name\u0004Filipino":[null,"Filipino"],"language_name\u0004Finnish":[null,"Finés"],"language_name\u0004French":[null,"Francés"],"language_name\u0004French (Canada)":[null,"Francés (Canadá)"],"language_name\u0004German":[null,"Alemán"],"language_name\u0004Greek":[null,"Griego"],"language_name\u0004Gujarati":[null,"Guyaratí"],"language_name\u0004Haitian Creole":[null,"Criollo haitiano"],"language_name\u0004Hebrew":[null,"Hebreo"],"language_name\u0004Hindi":[null,"Hindi"],"language_name\u0004Hmong Daw":[null,"Lenguas hmong"],"language_name\u0004Hungarian":[null,"Húngaro"],"language_name\u0004Icelandic":[null,"Islandés"],"language_name\u0004Indonesian":[null,"Indonesio"],"language_name\u0004Inuktitut":[null,"Lenguas inuit"],"language_name\u0004Irish":[null,"Irlandés"],"language_name\u0004Italian":[null,"Italiano"],"language_name\u0004Japanese":[null,"Japonés"],"language_name\u0004Kannada":[null,"Canarés"],"language_name\u0004Kazakh":[null,"Kazajo"],"language_name\u0004Khmer":[null,"Jemer"],"language_name\u0004Klingon":[null,"Klingon"],"language_name\u0004Klingon (Latin)":[null,"Klingon (latín)"],"language_name\u0004Klingon (pIqaD)":[null,"Klingon (pIqaD)"],"language_name\u0004Korean":[null,"Coreano"],"language_name\u0004Kurdish (Central)":[null,"Kurdo (Central)"],"language_name\u0004Kurdish (Northern)":[null,"Kurdo (Norte)"],"language_name\u0004Lao":[null,"Laosiano"],"language_name\u0004Latvian":[null,"Letón"],"language_name\u0004Lithuanian":[null,"Lituano"],"language_name\u0004Malagasy":[null,"Malgache"],"language_name\u0004Malay":[null,"Malayo"],"language_name\u0004Malayalam":[null,"Malabar"],"language_name\u0004Maltese":[null,"Maltés"],"language_name\u0004Maori":[null,"Maorí"],"language_name\u0004Marathi":[null,"Maratí"],"language_name\u0004Myanmar (Burmese)":[null,"Myanmasa (Birmano)"],"language_name\u0004Nepali":[null,"Nepalí"],"language_name\u0004Norwegian":[null,"Noruego"],"language_name\u0004Odia":[null,"Oriya"],"language_name\u0004Pashto":[null,"Pastún"],"language_name\u0004Persian":[null,"Persa"],"language_name\u0004Polish":[null,"Polaco"],"language_name\u0004Portuguese (Brazil)":[null,"Portugués (Brasil)"],"language_name\u0004Portuguese (Portugal)":[null,"Portugués (Portugal)"],"language_name\u0004Punjabi":[null,"Panyabí"],"language_name\u0004Querétaro Otomi":[null,"Otomí de Querétaro"],"language_name\u0004Romanian":[null,"Rumano"],"language_name\u0004Russian":[null,"Ruso"],"language_name\u0004Samoan":[null,"Samoano"],"language_name\u0004Serbian (Cyrillic)":[null,"Serbio (cirílico)"],"language_name\u0004Serbian (Latin)":[null,"Serbio (latín)"],"language_name\u0004Slovak":[null,"Eslovaco"],"language_name\u0004Slovenian":[null,"Esloveno"],"language_name\u0004Spanish":[null,"Español"],"language_name\u0004Swahili":[null,"Suajili"],"language_name\u0004Swedish":[null,"Sueco"],"language_name\u0004Tahitian":[null,"Tahitiano"],"language_name\u0004Tamil":[null,"Tamil"],"language_name\u0004Telugu":[null,"Télugu"],"language_name\u0004Thai":[null,"Tailandés"],"language_name\u0004Tigrinya":[null,"Tigriña"],"language_name\u0004Tongan":[null,"Tongano"],"language_name\u0004Turkish":[null,"Turco"],"language_name\u0004Ukrainian":[null,"Ucraniano"],"language_name\u0004Urdu":[null,"Urdu"],"language_name\u0004Vietnamese":[null,"Vietnamita"],"language_name\u0004Welsh":[null,"Galés"],"language_name\u0004Yucatec Maya":[null,"Maya"],"load_more\u0004Show More":[null,"Ver más"],"local_query_rewrite_experiment\u0004Your actual location remains":[null,"Tu ubicación real se mantiene"],"local_query_rewrite_experiment\u0004private":[null,"privada"],"lyrics_module\u0004Album":[null,"Álbum"],"lyrics_module\u0004Explicit":[null,"Explícito"],"lyrics_module\u0004Lyrics provided by":[null,"Letra proporcionada por"],"lyrics_module\u0004Released":[null,"Publicado"],"lyrics_module\u0004Written by":[null,"Escrita por"],"made_by\u0004by %s":[null,"Por %s"],"map\u0004Search This Area":[null,"Buscar en esta zona"],"map\u0004Search this area for...":[null,"Buscar en esta zona..."],"map-mode\u0004Satellite":[null,"Satélite"],"maps_directions\u0004Enter start location":[null,"Introduce el lugar de inicio"],"maps_directions\u0004Enter your destination":[null,"Introduce el destino"],"maps_maps_module\u0004Get Directions":[null,"Obtener Indicaciones"],"maps_maps_module\u0004Or did you mean:":[null,"O quizo decir:"],"maps_maps_module\u0004View on Map":[null,"Ver en el Mapa"],"maps_places\u0004%s on %s":[null,"%1$s en %2$s"],"maps_places\u0004Address":[null,"Dirección"],"maps_places\u0004Call":[null,"Llamar"],"maps_places\u0004Choose service":[null,"Elegir servicio"],"maps_places\u0004Closed":[null,"Cerrado"],"maps_places\u0004Closes":[null,"Cierra"],"maps_places\u0004Closes soon":[null,"Cierra pronto"],"maps_places\u0004Directions":[null,"Indicaciones"],"maps_places\u0004Hours":[null,"Horario"],"maps_places\u0004Menu":[null,"Menú"],"maps_places\u0004Open":[null,"Abrir"],"maps_places\u0004Open 24 hours":[null,"Abierto 24 horas"],"maps_places\u0004Open Expanded Map":[null,"Abrir Mapa Extendido"],"maps_places\u0004Opens":[null,"Abre"],"maps_places\u0004Opens soon":[null,"Abre pronto"],"maps_places\u0004Overview":[null,"Resumen"],"maps_places\u0004Phone":[null,"Teléfono"],"maps_places\u0004Phone Number":[null,"Número telefónico"],"maps_places\u0004Regular Hours Today":[null,"Horas habituales hoy"],"maps_places\u0004Reviews":[null,"Reseñas"],"maps_places\u0004Website":[null,"Página web"],"maps_places\u0004What people say:":[null,"Opiniones:"],"maps_places\u0004Your actual location remains private":[null,"Tu ubicación real se mantiene confidencial"],"mobile expanded map\u0004Expand Map":[null,"Ampliar el mapa"],"mobile expanded map\u0004Show Detail":[null,"Mostrar detalles"],"mobile expanded map\u0004Show List":[null,"Mostrar listas"],"mobile homepage\u0004Use DuckDuckGo Private Search":[null,"Usa la búsqueda privada en DuckDuckGo"],"mobile homepage banner\u0004Open %sMenu%s":[null,"Abrir %1$sMenú%2$s"],"mobile homepage banner\u0004Open %sSettings%s":[null,"Abrir %sConfiguracion%s"],"mobile homepage banner\u0004Select %s%s%s, then %sSearch Engine%s":[null,"Select %s%s%s, then %sMotor de búsqueda%s"],"mobile homepage banner\u0004Select %sSearch Engine%s":[null,"Selecciona %1$sMotor de búsqueda%2$s"],"mobile homepage banner\u0004Select %sSearch engine%s, then %sOthers...%s":[null,"Selecciona %1$sMotor de búsqueda %2$s, después %3$sOtros...%4$s"],"mobile homepage banner\u0004Select %sSettings%s":[null,"Selecciona %1$sAjustes%2$s"],"mobile homepage banner\u0004Select %sSettings%s, then %sAdvanced settings%s":[null,"Selecciona %1$sConfiguración%2$s, después %3$sConfiguración avanzada%4$s"],"mobile homepage banner\u0004Select %sSettings%s, then %sDefault search engine%s":[null,"Selecciona %1$sConfiguración%2$s, después %3$sMotor de búsqueda predeterminado%4$s"],"mobile homepage banner\u0004Select %sSettings%s, then %sSearch Engine%s":[null,"Select %sConfiguracion%s, then %sMotor de busqueda%s"],"mobile promotion on desktop\u0004Also search privately on your iPad, iPhone, or Android!":[null,"¡Busca también de forma privada en tu iPad, iPhone o Android!"],"mobile promotion on desktop\u0004OK, got it!":[null,"Vale, ¡entendido!"],"mobile promotion on desktop\u0004Use DuckDuckGo private search on your iPad, iPhone, or Android!":[null,"¡Usa la búsqueda privada de DuckDuckGo en tu iPad, iPhone o Android!"],"mobile promotion on desktop\u0004Visit %sDuckDuckGo.com%s on your tablet or phone and follow the provided instructions.":[null,"Visita %sDuckDuckGo.com%s en tu table o teléfono y sigue las instrucciones proveídas."],"more_reviews_on_external_website\u0004More Reviews on %s ":[null,"Más comentarios en %1$s "],"moreinfo\u0004this help page":[null,"esta página de ayuda"],"new tab page\u0004Enable Most Visited Sites":[null,"Habilitar Sitios Más Visitados"],"new tab page\u0004Hide Most Visited Sites":[null,"Ocultar Sitios Más Visitados"],"new tab page\u0004Your browser provides the list of most-visited sites. DuckDuckGo never has access to this data.":[null,"Tu navegador proporciona una lista de sitios más visitados. DuckDuckGo nunca tendrá acceso a este dato."],"new user poll\u0004Following us on Twitter":[null,"Síguenos en Twitter"],"new user poll\u0004Friend or family":[null,"Amigo o Familia"],"new user poll\u0004New browser or computer":[null,"Nuevo navegador o computador"],"new user poll\u0004New to DuckDuckGo?":[null,"¿Nuevo en DuckDuckGo?"],"new user poll\u0004No thanks.":[null,"No gracias"],"new user poll\u0004No, old user!":[null,"No, usuario antiguo"],"new user poll\u0004Online article":[null,"Atículo en linea"],"new user poll\u0004Please select one option.":[null,"Por favor selecciona una opción"],"new user poll\u0004Radio or podcast":[null,"Radio o podcast"],"new user poll\u0004Trying DuckDuckGo again":[null,"Probando DuckDuckGo otra vez"],"new user poll\u0004Upgrading to full-time user":[null,"Actualizando a usuario de tiempo completo"],"new user poll\u0004We don't track you, so we could use your help telling us what brought you back today:":[null,"No te seguimos, así que podremos usar tu ayuda diciéndonos que te trae por aquí hoy:"],"new user poll\u0004We don't track you, so we could use your help telling us what convinced you to try us out today:":[null,"No te rastreamos, te importaría decirnos qué te ha convencido de probarnos hoy?"],"new user poll\u0004We're honored to have you on the Duck Side":[null,"Es un honor tenerte en el pato oscuro"],"new user poll\u0004What brought you back today?":[null,"¿Qué te trae por aquí hoy?"],"new user poll\u0004What led you to DuckDuckGo?":[null,"¿Qué te trajo a DuckDuckGo?"],"new user poll\u0004Yes, new user!":[null,"¡Sí, nuevo usuario!"],"new user poll\u0004Your response is 100% anonymous.":[null,"Su respuesta es 100% anónima."],"newsletter email collection\u0004Your email address will not be shared, %sor associated with anonymous searches. [%sExample message%s]":[null,"Tu correo electrónico no será compartido, %so asociado con búsquedas anónimas. [%sEjemplo de mensaje%s]"],"no search":[null,"no buscaste nada"],"nonjsversion\u0004here":[null,"aqui"],"noresults\u0004%sClick here%s to try again, if you think there should be results for this search.":[null,"%sHaz clic aquí%s para intentar nuevamente, si crees que debería haber resultados para esta búsqueda."],"noresults\u0004%sReset filters %s":[null,"%1$sRestablecer filtros %2$s"],"noresults\u0004Make sure all words are spelled correctly.":[null,"Asegúrate de que todas las palabras estén bien escritas."],"noresults\u0004No %s found for %s%s%s.":[null,"No %1$s encontrado para %2$s%3$s%4$s."],"noresults\u0004No more results found for %s%s%s.":[null,"No se han encontrado más resultados para %1$s%2$s%3$s."],"noresults\u0004No results found for %s%s%s.":[null,"No se encontraron resultados para %1$s%2$s%3$s."],"noresults\u0004Show Web Results":[null,"Mostrar resultados web"],"noresults\u0004Suggestions:":[null,"Sugerencias:"],"noresults\u0004Try different keywords.":[null,"Intentar palabras diferentes."],"noresults\u0004Try fewer keywords.":[null,"Intentar menos palabras."],"noresults\u0004Try more general keywords.":[null,"Prueba palabras clave más generales."],"not %s encoding":[null,"no se codifica en %s"],"onboarding_slide\u0004Don't let friends get tracked!":[null,"¡No dejes que rastreen a tus amigos!"],"open_in_third_party_app\u0004Open in %s":[null,"Abrir en %1$s"],"or write out the color code you want, e.g. %s (%s is an encoded %s char).":[null,"o escriba el código de color que desee, p. ej. %s (%s es un caracter codificado en %s)."],"or write out the font you want":[null,"o escriba la fuente tipográfica que desee"],"organic_results\u0004Official site identified by DuckDuckGo":[null,"Sitio oficial identificado por DuckDuckGo"],"permanently":[null,"permanentemente"],"placement\u0004Left":[null,"Izquierda"],"placement\u0004Middle":[null,"Centrado"],"precise_user_location\u0004%sLearn how we keep your location private%s.":[null,"%1$sDescubre cómo mantenemos tu ubicación privada%2$s."],"precise_user_location\u0004%sReload%s DuckDuckGo, and try again.":[null,"%1$sVuelve a cargar%2$s DuckDuckGo e inténtalo de nuevo."],"precise_user_location\u0004Anonymous Location Enabled":[null,"Ubicación anónima habilitada"],"precise_user_location\u0004Anonymous location enabled":[null,"Ubicación anónima habilitada"],"precise_user_location\u0004Browser Location Unavailable":[null,"Ubicación del navegador no disponible"],"precise_user_location\u0004Cancel":[null,"Cancelar"],"precise_user_location\u0004Clear":[null,"Limpiar"],"precise_user_location\u0004Clear Location":[null,"Eliminar ubicación"],"precise_user_location\u0004Click the %slock icon%s on the address bar.":[null,"Haz clic en el %1$sicono del candado%2$s en la barra de direcciones."],"precise_user_location\u0004Done":[null,"Hecho"],"precise_user_location\u0004DuckDuckGo is private by design. When you enable location, it is stored on your local device only. When you search, your device then sends it to us, we use it to improve results for that search, and then we promptly throw it away, such that you remain anonymous. %sLearn more about how we designed this technology to protect your privacy%s.":[null,"DuckDuckGo está diseñado para ser privado. Al habilitar la ubicación, solo se almacena localmente en tu dispositivo. Si realizas una búsqueda, tu dispositivo nos la envía, la utilizamos para mejorar los resultados para esa búsqueda y después la descartamos para mantener tu anonimato. %1$sPuedes obtener más información sobre cómo diseñamos esta tecnología para proteger tu privacidad%2$s."],"precise_user_location\u0004Enable 'Sites can ask for my location.'":[null,"Activar \"Las páginas pueden preguntar mi ubicación\"."],"precise_user_location\u0004Enable Location":[null,"Activar ubicación"],"precise_user_location\u0004Enable location settings on your device to use anonymous location":[null,"Activa la configuración de ubicación en tu dispositivo para utilizar la ubicación anónima"],"precise_user_location\u0004Enable the Location setting on your phone.":[null,"Activar la configuración de Ubicación en tu teléfono."],"precise_user_location\u0004Ensure %s'Allow'%s is selected for the 'Location' setting.":[null,"Asegúrate de que %1$s«Permitir»%2$s está seleccionado para la configuración «Ubicación»."],"precise_user_location\u0004Ensure 'Location Services' is %senabled%s.":[null,"Asegúrate de que «Servicios de ubicación» esté %1$sactivado%2$s."],"precise_user_location\u0004Ensure 'Location' is set to %sallow%s.":[null,"Asegúrate de que «Ubicación» esté ajustado como %1$spermitir%2$s."],"precise_user_location\u0004Ensure location access is %sallowed%s.":[null,"Asegúrate de que el acceso a la ubicación esté %1$spermitido%2$s."],"precise_user_location\u0004Ensure your browser is allowed %slocation access%s.":[null,"Asegúrate de que tu navegador tenga permitido el %1$sacceso a la ubicación%2$s."],"precise_user_location\u0004Ensure your browser is allowed location access.":[null,"Asegúrate de que tu navegador tenga permitido el acceso a la ubicación."],"precise_user_location\u0004Find results closer to you":[null,"Encuentra resultados cerca de ti"],"precise_user_location\u0004Find results closer to you.":[null,"Encuentra resultados cerca de ti."],"precise_user_location\u0004Go to 'Site Settings'.":[null,"Dirígete a «Configuración del sitio»."],"precise_user_location\u0004Got it":[null,"Entendido"],"precise_user_location\u0004Help":[null,"Ayuda"],"precise_user_location\u0004If the browser location remains unavailable, then go to %sSettings > General > Reset > 'Reset Location & Privacy'%s.":[null,"Si la ubicación del navegador sigue sin estar disponible, dirígete a %1$sConfiguración > General > Restablecer > «Restablecer ubicación y privacidad»%2$s."],"precise_user_location\u0004If the browser location remains unavailable, then in your browser go to %s⋮ > Menu > Settings > Site settings > Location%s, and ensure DuckDuckGo is allowed location access.":[null,"Si la ubicación del navegador sigue sin estar disponible, en tu navegador, dirígete a %1$s⋮ > Menú > Configuración > Configuración del sitio > Ubicación%2$s y asegúrate de que DuckDuckGo tenga acceso a la ubicación."],"precise_user_location\u0004Location information is stored only on your device.":[null,"La información de la ubicación se almacena solo en tu dispositivo."],"precise_user_location\u0004Maybe later":[null,"Quizá más tarde"],"precise_user_location\u0004More info":[null,"Más información"],"precise_user_location\u0004Move map to set current location":[null,"Mueve el mapa para establecer la ubicación actual"],"precise_user_location\u0004Navigate to Setting > Apps.":[null,"Dirígete a Configuración > Aplicaciones."],"precise_user_location\u0004Not getting nearby results?":[null,"¿No obtienes resultados cercanos?"],"precise_user_location\u0004Open 'Location', and ensure location is %senabled%s.":[null,"Abre «Ubicación» y asegúrate de que la ubicación esté %1$sactivada%2$s."],"precise_user_location\u0004Open 'Privacy', then 'Location Services'.":[null,"Abre «Privacidad» y luego «Servicios de ubicación»."],"precise_user_location\u0004Open the %sSettings app%s.":[null,"Abre la %1$saplicación Configuración%2$s."],"precise_user_location\u0004Open the %sSettings%s app.":[null,"Abre la aplicación %1$sConfiguración%2$s."],"precise_user_location\u0004Pick Custom Location":[null,"Elegir ubicación personalizada"],"precise_user_location\u0004Private to us and secured on your device":[null,"Desconocida para nosotros y segura en tu dispositivo"],"precise_user_location\u0004Results near":[null,"Resultados cerca de"],"precise_user_location\u0004Return to duckduckgo.com and allow permission.":[null,"Volver a duckduckgo.com y permitir."],"precise_user_location\u0004Scroll down and locate %syour browser%s in the list.":[null,"Desciende y ubica %1$stu navegador%2$s en la lista."],"precise_user_location\u0004Select %s'Setting for this Website...'%s from the Safari menu.":[null,"Selecciona %1$s«Configuración para este sitio web...»%2$s en el menú de Safari."],"precise_user_location\u0004Select Settings > Location.":[null,"Selecciona Configuración > Ubicación."],"precise_user_location\u0004Set Manually":[null,"Configurar manualmente"],"precise_user_location\u0004Set your location manually, or ensure Location Services is enabled.":[null,"Configura tu ubicación manualmente o asegúrate de que los servicios de ubicación están habilitados."],"precise_user_location\u0004Tap the %slock icon%s on the address bar.":[null,"Pulsa el %1$sicono del candado%2$s en la barra de direcciones."],"precise_user_location\u0004Tap the vertical dots in the DuckDuckGo app.":[null,"Pulsa los puntos verticales en la aplicación DuckDuckGo."],"precise_user_location\u0004Try enabling anonymous location for more accurate results.":[null,"Prueba a habilitar la ubicación anónima para obtener resultados más precisos."],"precise_user_location\u0004Try setting your location manually.":[null,"Prueba a configurar tu ubicación de forma manual."],"precise_user_location\u0004Update":[null,"Actualizar"],"precise_user_location\u0004Update Location":[null,"Actualizar ubicación"],"precise_user_location\u0004Updating location...":[null,"Actualizando ubicación..."],"precise_user_location\u0004Use Anonymous Location":[null,"Utilizar ubicación anónima"],"precise_user_location\u0004Use Location":[null,"Utilizar ubicación"],"precise_user_location\u0004Waiting for Location...":[null,"Esperando ubicación..."],"precise_user_location\u0004We can use your anonymous%s location%s to show you nearby results.":[null,"Podemos utilizar tu %1$subicación%2$s anónima para mostrarte resultados cercanos."],"precise_user_location\u0004We only use your anonymous location to deliver better results, closer to you. You can always change your mind later.":[null,"Solo utilizamos tu ubicación anónima para ofrecer mejores resultados, más cerca de ti. Siempre puedes cambiar de opinión más tarde."],"private search":[null,"búsqueda privada"],"published date for videos\u0004d":[null,"d"],"published date for videos\u0004h":[null,"h"],"published date for videos\u0004m":[null,"m"],"published date for videos\u0004mo":[null,"mes"],"published date for videos\u0004yr":[null,"a"],"published dates for organic results\u0004%s days ago":[null,"hace %1$s días"],"published dates for organic results\u0004%s hours ago":[null,"hace %1$s horas"],"published dates for organic results\u00041 day ago":[null,"hace 1 día"],"published dates for organic results\u00041 hour ago":[null,"1 hora antes"],"reasons-to-use-duckduckgo\u0004Block advertising trackers.":[null,"Bloquear rastreadores de publicidad"],"reasons-to-use-duckduckgo\u0004Keep your search history private.":[null,"Mantén tu historial de búsqueda en privado."],"reasons-to-use-duckduckgo\u0004Take control of your personal data.":[null,"Toma el control de tus datos personales."],"reasons-to-use-duckduckgo\u0004We don't follow you around with ads.":[null,"No lo seguimos con anuncios"],"reasons-to-use-duckduckgo\u0004We don't store your personal info.":[null,"No almacenamos tu información personal"],"reasons-to-use-duckduckgo\u0004We don't store your personal information.":[null,"No almacenamos su información personal"],"reasons-to-use-duckduckgo\u0004We don't track you. Ever.":[null,"No lo rastreamos. Nunca."],"region filter\u0004Recent:":[null,"Reciente:"],"safe search\u0004Don't filter adult content":[null,"No filtrar contenido para adultos"],"safe search\u0004Moderate":[null,"Moderar"],"safe search\u0004No adult content":[null,"Sin contenido para adultos"],"safe search\u0004No explicit images or videos":[null,"No hay imágenes o videos explícitos"],"safe search\u0004Strict":[null,"Estricto"],"search input box\u0004Search the web without being tracked":[null,"Busca en la red sin que te rastreen"],"search too long":[null,"búsqueda demasiado extensa"],"setting\u0004Off":[null,"Desactivado"],"setting\u0004On":[null,"Encendido"],"setting\u0004On & floating":[null,"Encendido & flotando"],"setting\u0004On & scrolling":[null,"Encendido & deslizante"],"setting\u0004On but no numbers":[null,"Configuración"],"setting\u0004Show Bookmarklet and Settings Data":[null,"Mostrar marcadores y ajustes de datos"],"setting\u0004default":[null,"predeterminado"],"settings\u0004ATB Dismiss":[null,"Descartar ATB"],"settings\u0004ATB related (not displayed on settings page)":[null,"Relacionado con ATB (no aparece en la página de configuración)"],"settings\u0004Advertisements":[null,"Anuncios"],"settings\u0004Allows Cloud Save key to be stored locally on device (required to use Cloud Save)":[null,"Permite que la clave de Cloud Save se almacene localmente en el dispositivo (necesario para utilizar Cloud Save)"],"settings\u0004Appearance":[null,"Apariencia"],"settings\u0004Auto-Suggest":[null,"Sugerencia Automática"],"settings\u0004Autocomplete Suggestions":[null,"Sugerencias de autocompletado"],"settings\u0004Automatically open relevant Instant Answers":[null,"Abrir automáticamente respuestas instantáneas pertinentes"],"settings\u0004Background Color":[null,"Color de Fondo"],"settings\u0004Basic":[null,"Básico"],"settings\u0004Bookmarklet URL:":[null,"Agregue el URL a sus marcadores"],"settings\u0004By default, settings are stored in non-personal browser cookies (in your browser). You can use anonymous Cloud Save to store your settings in a more permanent way (on a remote server in the cloud). No personally identifiable information will be stored in the cloud, and your passphrase will never leave your browser.":[null,"Por defecto, la configuración se almacena en cookies no personales (en tu navegador). Puedes utilizar Anonymous Cloud Save para guardar tu configuración de una forma más permanente (en un servidor remoto en la nube). Ninguna información personal se guardará en la nube, y tu clave nunca saldrá de tu navegador."],"settings\u0004Center Alignment":[null," Alineación en el Centro"],"settings\u0004Changes how result URLs are displayed":[null,"Cambia la forma en que se muestran las URL de resultados"],"settings\u0004Changes how the header is displayed and its behavior as you scroll":[null,"Cambia la forma en que se muestra el encabezado y su comportamiento a medida que te desplazas"],"settings\u0004Changes search results based on region":[null,"Cambia los resultados de búsqueda según la región"],"settings\u0004Changes the background color across the entire site":[null,"Cambia el color de fondo en todo el sitio"],"settings\u0004Changes the background color of results on hover, modules, and dropdown menus":[null,"Cambia el color de fondo de los resultados al pasar por encima, en módulos y en menús desplegables"],"settings\u0004Changes the background color when hovering over a result":[null,"Cambiar el fondo de color cuando este encima del resultado"],"settings\u0004Changes the color of result URLs":[null,"Cambia el color de las URL de los resultados"],"settings\u0004Changes the color of result snippets":[null,"Cambia el color de las descripciones de los resultados"],"settings\u0004Changes the color of result titles":[null,"Cambia el color de los títulos de los resultados"],"settings\u0004Changes the color of titles for results you've visited":[null,"Cambia el color de los títulos de los resultados que has visitado"],"settings\u0004Changes the font across the entire site":[null,"Cambiar la tipografia del sitio"],"settings\u0004Changes the font of result titles":[null,"Cambia la fuente de los títulos de los resultados"],"settings\u0004Changes the font size across the entire site":[null,"Cambiar el tamaño de la fuente"],"settings\u0004Changes the header color across the entire site":[null,"Cambiar de color la cabesera del resultado"],"settings\u0004Changes the language across the entire site":[null,"Cambiar de idioma cuando pasa entre sitio"],"settings\u0004Changes what happens when you click on a video thumbnail":[null,"Cambia lo que sucede cuando se hace clic en un vídeo"],"settings\u0004Changes where result URLs are displayed":[null,"Cambia el lugar donde se muestran las URL de los resultados"],"settings\u0004Cloud Save":[null,"Guardar en la nube"],"settings\u0004Cloud Save Bookmarklet URL:":[null,"Guardar en la nube la URL como marcador"],"settings\u0004Controls the width of the search box and results":[null,"Control de ancho de la caja de busqueda y delos resultados"],"settings\u0004Cookie data:":[null,"Datos de la cookie:"],"settings\u0004Custom":[null,"Cambiar"],"settings\u0004Custom %s":[null,"Modifique %s"],"settings\u0004Directions Source":[null,"Fuente de las indicaciones"],"settings\u0004Displays a checkmark to the left of results you've visited":[null,"Muestra una marca de verificación a la izquierda de los resultados que has visitado"],"settings\u0004Displays favicons for each result":[null,"Muestra faviconos para cada resultado"],"settings\u0004Displays results in the center of the page":[null,"Muestra los resultados en el centro de la página"],"settings\u0004DuckDuckGo only uses your approximate location. That's all we need to deliver better results, closer to you. %sLearn more%s.":[null,"DuckDuckGo solo utiliza tu ubicación aproximada. Eso es todo lo que necesitamos para ofrecer mejores resultados, más cerca de ti. %1$sMás información%2$s."],"settings\u0004EU Android Welcome Message":[null,"Mensaje de bienvenida de la UE para Android"],"settings\u0004Enables keyboard shortcuts on the site":[null,"Activa atajos de teclado en el sitio"],"settings\u0004Enter a passphrase":[null,"Introduce una clave"],"settings\u0004Font":[null,"Fuente"],"settings\u0004Font Size":[null,"Tamaño de la fuente"],"settings\u0004GET Requests":[null,"Solicitudes GET"],"settings\u0004General":[null,"General"],"settings\u0004HTTPS":[null,"HTTPS"],"settings\u0004Header Appearance":[null,"Apariencia del encabezado"],"settings\u0004Header Behavior":[null,"Ajustes"],"settings\u0004Header Color":[null,"Color del encabezado"],"settings\u0004Help Improve DuckDuckGo":[null,"Ayuda a mejorar DuckDuckGo"],"settings\u0004Hide Passphrase":[null,"Ocultar la clave"],"settings\u0004Hides search term from being shown in browser tab/history":[null,"Oculta los términos de búsqueda del historial y las pestañas"],"settings\u0004Homepage Privacy Tips":[null,"Consejos de privacidad en página de inicio"],"settings\u0004Hover, Module, and Dropdown Background Color":[null,"Color de fondo al ponerse encima, de los módulos y de los desplegables"],"settings\u0004If you still want to support us, %shelp spread DuckDuckGo%s":[null,"Si aún desea ayudarnos, %sayuda a difundir DuckDuckGo%s"],"settings\u0004Improves result legibility with updated URL format, placement, and color":[null,"Mejora la legibilidad de los resultados gracias a la actualización del formato, la disposición y el color de las URL"],"settings\u0004In some older browsers, it's necessary to redirect your clicks through our server to prevent search leakage. %sLearn more%s.":[null,"En algunos exploradores antiguos es necesario redirigir tus clics a través de nuestro servidor para evitar una filtración de la Búsqueda. %1$sMás información%2$s."],"settings\u0004Infinite Scroll":[null,"Auto-carga"],"settings\u0004Infinite Scroll for Images":[null,"Carga automática de Imágenes"],"settings\u0004Infinite Scroll for Images and Videos":[null,"Desplazar de forma infinita para Imágenes y Vídeos"],"settings\u0004Infinite Scroll for Images, Videos, and Shopping":[null,"Desplazar de forma infinita para Imágenes, Vídeos y Compras"],"settings\u0004Install DuckDuckGo":[null,"Instalar DuckDuckGo"],"settings\u0004Instant Answers":[null,"Respuestas instantáneas"],"settings\u0004It's okay to (very infrequently) ask me about my experience using DuckDuckGo":[null,"Está bien preguntarme (muy de vez en cuando) sobre mi experiencia usando DuckDuckGo"],"settings\u0004Keyboard Shortcuts":[null,"Atajos de teclado"],"settings\u0004Language":[null,"Idioma"],"settings\u0004Load":[null,"Cargar"],"settings\u0004Loads more image and video results when scrolling":[null,"Cargar más imágenes y resultados de vídeo al desplazar"],"settings\u0004Loads more image results when scrolling":[null,"Cargar más imágenes al desplazar"],"settings\u0004Loads more results in Images, Videos, and Shopping when scrolling":[null,"Carga más resultados de imágenes, vídeos y compras al desplazarse"],"settings\u0004Loads more results when scrolling":[null,"Cargar mas resultados mietras bajo con el mouse"],"settings\u0004Location":[null,"Localización"],"settings\u0004Map Rendering":[null,"Renderizando Mapa"],"settings\u0004Mobile Instructions (not displayed on settings page)":[null,"Instrucciones para Móvil (no mostradas en la página de configuración)"],"settings\u0004Multi-Step Add-to-Browser Onboarding Step":[null,"Paso de incorporación de varios pasos para añadir al navegador"],"settings\u0004New Tab Page Most Visited Sites":[null,"Página de nueva pestaña, páginas más visitadas"],"settings\u0004New URL Style":[null,"Nuevo estilo de URL"],"settings\u0004Omits objectionable (mostly adult) material":[null,"Omitir material desgradable (mayormente adulto)"],"settings\u0004Open Links in a New Tab":[null,"Nueva ventana"],"settings\u0004Opens results in new windows/tabs":[null,"Abre los resultados en una nueva ventana/pestaña"],"settings\u0004Page #'s":[null,"Página #'s"],"settings\u0004Page Break Lines":[null,"Salto de páginas"],"settings\u0004Page Break Numbers":[null,"Números de saltos de página"],"settings\u0004Page Width":[null,"Ancho de página"],"settings\u0004Preferred units of measure":[null,"Unidades de medida preferidas"],"settings\u0004Previous Region":[null,"Región anterior"],"settings\u0004Privacy":[null,"Privacidad"],"settings\u0004Privacy Newsletter":[null,"Boletín de Noticias de Privacidad"],"settings\u0004Privacy Newsletters":[null,"Boletines de privacidad"],"settings\u0004Prompt me to use my approximate location to get nearby results.":[null,"Pedirme utilizar mi ubicación aproximada para obtener mejores resultados."],"settings\u0004Redirect (When Necessary)":[null,"Redirigir (si es necesario)"],"settings\u0004Region":[null,"Zona"],"settings\u0004Reset All Settings":[null,"Restablecer todos los ajustes"],"settings\u0004Result Highlight Color":[null,"Color de los resultados resaltados"],"settings\u0004Result Visited Checkmark":[null,"Casilla de visitas de resultados"],"settings\u0004Safe Search":[null,"Búsqueda Segura"],"settings\u0004Save":[null,"Guardar"],"settings\u0004Save Cloud Settings":[null,"Guardar la configuracion el la nube"],"settings\u0004Save your settings anonymously to the cloud":[null,"Guardar anónimamente tu configuración en la nube"],"settings\u0004Search Button Background":[null,"Botón de búsqueda de fondo "],"settings\u0004Search Visibility":[null,"Visibilidad de búsqueda"],"settings\u0004Search queries are included in URL (if off, searches will use POST requests)":[null,"Las busquedas incluyen la direccion (A pagelo, para que la direccion no muestre su busqueda)"],"settings\u0004See the %sURL Parameter Reference page%s for more details.":[null,"Ver la %1$spágina de referencia de los parámetros de URL%2$s para obtener más detalles."],"settings\u0004Settings in JSON:":[null,"Configuracion en formato JSON"],"settings\u0004Show Passphrase":[null,"Mostrar la clave"],"settings\u0004Shows horizontal lines at result page breaks":[null,"Muestra líneas horizontales en los saltos de página de los resultados"],"settings\u0004Shows links to instructions for how to add DuckDuckGo to your browser":[null,"Muestra enlaces a instrucciones para añadir DuckDuckGo a tu navegador"],"settings\u0004Shows most visited links on new tab page":[null,"Muestra los enlaces más visitados en la página Nueva pestaña"],"settings\u0004Shows occasional reminders to add DuckDuckGo to your browser":[null,"Muestra recordatorios ocasionales para añadir DuckDuckGo a tu navegador"],"settings\u0004Shows occasional reminders to add DuckDuckGo to your devices":[null,"Muestra recordatorios ocasionales para añadir DuckDuckGo a tus dispositivos"],"settings\u0004Shows occasional reminders to sign up for the DuckDuckGo privacy newsletters":[null,"Muestra recordatorios ocasionales para suscribirte al boletín de privacidad de DuckDuckGo"],"settings\u0004Shows page numbers at result page breaks":[null,"Muestra los números de página en los saltos de página de los resultados"],"settings\u0004Shows sign-up form for the DuckDuckGo privacy newsletters":[null,"Muestra el formulario de inscripción en el boletín de privacidad de DuckDuckGo"],"settings\u0004Shows suggestions under the search box as you type":[null,"Muestra sugerencias debajo del cuadro de búsqueda mientras escribes"],"settings\u0004Shows the privacy benefits of using DuckDuckGo on the homepage":[null,"Muestra los beneficios para la privacidad al usar DuckDuckGo en la página de inicio"],"settings\u0004Shows the search button background":[null,"Mostrar el botón de búsqueda en el fondo"],"settings\u0004Shows welcome message on top of the search results page":[null,"Muestra un mensaje de bienvenida en la parte superior de la página de resultados de búsqueda"],"settings\u0004Shows welcome message to EU Android preference menu users":[null,"Muestra un mensaje de bienvenida a los usuarios del menú de preferencias de Android de la UE"],"settings\u0004Site Icons":[null,"Iconos de sitio"],"settings\u0004Snippet Color":[null,"Color de la descripción"],"settings\u0004Stores the previous region that was set":[null,"Almacene la region anterior en "],"settings\u0004Suggest Different Passphrase":[null,"Sugerir una clave de acceso diferente"],"settings\u0004Suggest a Passphrase":[null,"Sugerir una clave"],"settings\u0004The rendering method to use for interactive maps":[null,"El método de representación para los mapas interactivos"],"settings\u0004Theme":[null,"Tema"],"settings\u0004This will erase all settings. Continue?":[null,"Esto borrará todos los ajustes. ¿Desea continuar?"],"settings\u0004This will reset your saved settings to default values. Continue?":[null,"Esto restablecerá la configuración guardada a los valores por defecto. ¿Desea continuar?"],"settings\u0004Title Color":[null,"Color del título"],"settings\u0004Title Font":[null,"Fuente del título"],"settings\u0004Title Underline":[null,"Subrayado del título"],"settings\u0004URL Color":[null,"Color de la URL"],"settings\u0004URL Format":[null,"Formato de la URL"],"settings\u0004URL Placement":[null,"Disposición de la URL"],"settings\u0004Underlines result titles":[null,"Subraya los títulos de los resultados"],"settings\u0004Units of Measure":[null,"Unidades de medida"],"settings\u0004Video Playback":[null,"Reproduccion de video"],"settings\u0004Visited Checkmark":[null,"Marca de verificación de visita"],"settings\u0004Visited Title Color":[null,"Color del título visitado"],"settings\u0004Welcome Message":[null,"Mensaje de bienvenida"],"settings dropdown\u0004Reset":[null,"Reiniciar"],"settings pages\u0004All Settings":[null,"Todas las configuraciones"],"settingsvalue\u0004Above Title":[null,"Encima del título"],"settingsvalue\u0004All regions":[null,"Todas las regiones"],"settingsvalue\u0004Always play on DuckDuckGo":[null,"Siempre reproducir en DuckDuckGo"],"settingsvalue\u0004Below Snippet":[null,"Debajo de la descripción"],"settingsvalue\u0004Below Title":[null,"Debajo del título"],"settingsvalue\u0004Best available":[null,"Mejor disponible"],"settingsvalue\u0004Browser Preferred Language":[null,"Lenguaje preferido del navegador"],"settingsvalue\u0004Browser preferred language":[null,"Idioma preferido para el navegador"],"settingsvalue\u0004Custom":[null,"Personalizacion"],"settingsvalue\u0004Custom %s":[null,"Personalizar %s"],"settingsvalue\u0004Domains Only":[null,"Solo dominios"],"settingsvalue\u0004Full URLs (Breadcrumbs)":[null,"URL completas (Hilo de Ariadna)"],"settingsvalue\u0004Full URLs (Slashes)":[null,"URL completas (barras)"],"settingsvalue\u0004Image tiles":[null,"Mosaico de imágenes"],"settingsvalue\u0004Large":[null,"Ancho"],"settingsvalue\u0004Larger":[null,"Ancho"],"settingsvalue\u0004Largest":[null,"Mas Grande"],"settingsvalue\u0004Medium":[null,"Medio"],"settingsvalue\u0004Metric (Kilograms, Meters, Celsius)":[null,"Sistema métrico (kilogramos, metros, grados Celsius)"],"settingsvalue\u0004Metric (kilograms, meters, Celsius)":[null,"Sistema métrico (kilogramos, metros y grados Celsius)"],"settingsvalue\u0004Moderate":[null,"Moderar"],"settingsvalue\u0004No preference (default)":[null,"Sin preferencias (por defecto)"],"settingsvalue\u0004Normal":[null,"Estandar"],"settingsvalue\u0004Not set":[null,"Sin configurar"],"settingsvalue\u0004Off":[null,"Desactivado"],"settingsvalue\u0004Open on third-party site":[null,"Abrir sitios de terceros"],"settingsvalue\u0004Prompt me":[null,"Preguntarme"],"settingsvalue\u0004Small":[null,"Pequeña"],"settingsvalue\u0004Strict":[null,"Estricto"],"settingsvalue\u0004Super Wide":[null,"Super amplio"],"settingsvalue\u0004US based (Pounds, Feet, Fahrenheit)":[null,"De EE.UU. (Libras, Pies, Fahrenheit)"],"settingsvalue\u0004US-based (pounds, feet, Fahrenheit)":[null,"Sistema estadounidense (libras, pies, grados Fahrenheit)"],"settingsvalue\u0004Wide":[null,"Ancho"],"shopping_vertical\u0004Show %s more":[null,"Mostrar %1$s más"],"shopping_vertical\u0004Show 1 more":[null,"Mostrar 1 más"],"shortbelieve\u0004Goodies":[null,"Complementos"],"showcase_app\u0004Get Our App & Extension":[null,"Instala nuestra aplicación y extensión"],"showcase_app\u0004Protect your data on every device.":[null,"Protege tus datos en todos tus dispositivos."],"showcase_aria_dropdown\u0004Here are some things that we made that you might like.":[null,"Aquí hay algunas cosas que hemos hecho que te podrían gustar."],"showcase_aria_label\u0004Check out the list of things that we've also made.":[null,"Revisa la lista de cosas que hemos hecho."],"showcase_donate\u0004Join our $500,000 Privacy Challenge":[null,"Únete a nuestro Reto de Privacidad 500.000€"],"showcase_donations\u0004%s in privacy donations!":[null,"¡%s en donaciones privadas!"],"showcase_newsletter\u0004Learn about online privacy right in your inbox.":[null,"Aprende acerca de la privacidad online en tu bandeja de entrada."],"showcase_newsletter\u0004Privacy in Your Inbox":[null,"Privacidad en Tu Bandeja de Entrada"],"showcase_newsletter\u0004Stay protected and informed with our privacy newsletters.":[null,"Mantente protegido e informado con nuestros boletines de privacidad."],"showcase_privacy\u0004Check out our privacy device guides.":[null,"Comprueba nuestras guías de privacidad de dispositivos."],"showcase_privacy\u0004Get Privacy Tips":[null,"Obten consejos sobre privacidad"],"showcase_privacy\u0004Protect Your Devices":[null,"Protege tus dispositivos"],"showcase_spread\u0004Help your friends and family join the Duck Side!":[null,"¡Ayuda a tus amigos y familia a unirse al lado Duck!"],"showcase_spread\u0004Spread DuckDuckGo":[null,"Difunde DuckDuckGo"],"showcase_tracking\u0004Learn why reducing tracking is important.":[null,"Aprende por qué reducir el rastreo es importante."],"showcase_traffic\u0004Over %s Billion anonymous searches.":[null,"Más de %1$s miles de millones de búsquedas anónimas."],"site encryption":[null,"encriptación de sitios"],"size\u0004All sizes":[null,"Todos los tamaños"],"size\u0004Extra Large":[null,"Extra Grande"],"size\u0004Large":[null,"Grande"],"size\u0004Larger":[null,"Más Grande"],"size\u0004Largest":[null,"El más grande"],"size\u0004Medium":[null,"Mediano"],"size\u0004Small":[null,"Pequeño"],"size\u0004Wallpaper":[null,"Fondo de pantalla"],"spread_badge\u0004Get your friends to switch and help us grow!":[null,"¡Haz que tus amigos cambien y ayudanos a crecer!"],"spread_badge\u0004Love DuckDuckGo?":[null,"Te gusta DuckDuckGo?"],"static_page\u0004About":[null,"Acerca de"],"temporarily":[null,"temporalmente"],"theme\u0004Basic":[null,"Básico"],"theme\u0004Contrast":[null,"Contraste"],"theme\u0004Dark":[null,"Oscuro"],"theme\u0004Default":[null,"Por defecto"],"theme\u0004Gray":[null,"Gris"],"theme\u0004Retro":[null,"Retro"],"theme\u0004Terminal":[null,"Terminal "],"there was an error.":[null,"hubo un error."],"too many search terms":[null,"muchos términos de búsqueda"],"tracker blocking":[null,"bloqueo de rastreadores"],"translateus\u0004Translate":[null,"Tradúce"],"translations_module\u0004%s detected":[null,"%1$s detectado"],"translations_module\u0004Clear source text":[null,"Borrar texto fuente"],"translations_module\u0004Copy translation":[null,"Copiar traducción"],"translations_module\u0004Detect language":[null,"Detectar idioma"],"translations_module\u0004Enter text":[null,"Introducir texto"],"translations_module\u0004Languages swapped":[null,"Idiomas intercambiados"],"translations_module\u0004Oops! An unexpected error occurred while translating this text. Please try again later.":[null,"¡Vaya! Se ha producido un error inesperado al traducir este texto. Inténtalo de nuevo más tarde."],"translations_module\u0004Search languages":[null,"Lenguajes de búsqueda"],"translations_module\u0004Select Language":[null,"Seleccionar idioma"],"translations_module\u0004Source text cleared":[null,"Texto de origen eliminado"],"translations_module\u0004Swap languages":[null,"Intercambiar idioma"],"translations_module\u0004Text exceeds %s character limit":[null,"El texto excede el límite de %1$s caracteres"],"translations_module\u0004This translation is helpful":[null,"Esta traducción es útil"],"translations_module\u0004This translation is offensive":[null,"Esta traducción es ofensiva"],"translations_module\u0004This translation is wrong":[null,"Esta traducción es incorrecta"],"translations_module\u0004Translation":[null,"Traducción"],"translations_module\u0004Translation copied":[null,"Traducción copiada"],"vertical_map\u0004Search Current Map Area":[null,"Buscar en la zona actual del mapa"],"vertical_map\u0004Search Near My Location":[null,"Buscar cerca de mi ubicación"],"video\u0004Preview":[null,"Vista previa"],"video-duration\u0004Any duration":[null,"Cualquier duración"],"video-duration\u0004Between 4 and 20 minutes":[null,"Entre 4 y 20 minutos"],"video-duration\u0004Less than 4 minutes":[null,"Menos de 4 minutos"],"video-duration\u0004Long":[null,"Largo"],"video-duration\u0004Medium":[null,"Media"],"video-duration\u0004More than 20 minutes":[null,"Mas de 20 minutos"],"video-duration\u0004Short":[null,"Corto"],"video-duration\u0004Show videos of any length":[null,"Mostrar videos de cualquier duración"],"video-license\u0004Any license":[null,"Cualquier licencia"],"video-license\u0004Creative Commons":[null,"Creative Commons"],"video-license\u0004YouTube Standard":[null,"Estándar de YouTube "],"video-resolution\u0004Any resolution":[null,"Cualquier resolución"],"video-resolution\u0004High definition":[null,"Alta resolución"],"video-resolution\u0004Standard definition":[null,"Calidad estándar"],"visible\u0004Showing":[null,"Exposición"],"welcome message\u0004Blocks trackers on websites you visit":[null,"Bloquea los rastreadores en las páginas que visitas"],"welcome message\u0004Encrypts connections when possible":[null,"Encriptar conexiones cuando sea posible"],"welcome message\u0004Here's what it does:":[null,"Aquí está lo que hace:"],"welcome message\u0004Lets you search anonymously with DuckDuckGo":[null,"Busquemos anónimamente con DuckDuckGo"],"welcome message\u0004You now have the DuckDuckGo extension!":[null,"Ya tienes la extensión DuckDuckGo."],"welcome message eu search preference android\u0004Block unsafe trackers":[null,"Bloquear rastreadores poco seguros"],"welcome message eu search preference android\u0004Clear data in one tap":[null,"Borrar datos con un solo toque"],"welcome message eu search preference android\u0004Force encryption on websites":[null,"Forzar la encriptación en los sitios web"],"welcome message eu search preference android\u0004Open app":[null,"ABRIR LA APLICACIÓN"],"welcome message eu search preference android\u0004Privacy, simplified":[null,"La privacidad, simplificada"],"welcome message eu search preference android\u0004You're now searching privately in Chrome. Use our app instead of Chrome to browse privately too. It’s already installed and can:":[null,"Estás realizando una búsqueda privada en Chrome. Utiliza nuestra aplicación en lugar de Chrome para navegar con privacidad. Ya está instalada y te permite:"],"width\u0004Normal":[null,"Normal"],"width\u0004Super wide":[null,"Super ancho"],"width\u0004Wide":[null,"Amplitud"],"zci-product\u0004track":[null,"seguir"]};ltd('duckduckgo'); \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DD4C062E516779227F40C462AD1E1710B4621510 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DD4C062E516779227F40C462AD1E1710B4621510 new file mode 100644 index 0000000..8f70d17 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DD4C062E516779227F40C462AD1E1710B4621510 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DFDC4A038BE7725137B5BAA440F55573CE68126E b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DFDC4A038BE7725137B5BAA440F55573CE68126E new file mode 100644 index 0000000..5129527 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DFDC4A038BE7725137B5BAA440F55573CE68126E differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DFDC4A038BE7725137B5BAA440F55573CE68126E-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DFDC4A038BE7725137B5BAA440F55573CE68126E-blob new file mode 100644 index 0000000..e19dd37 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/DFDC4A038BE7725137B5BAA440F55573CE68126E-blob @@ -0,0 +1,3 @@ +.min-height-full{min-height:100vh !important}.marketing-section{position:relative;padding-top:80px;padding-bottom:80px;font-size:16px;line-height:1.5;text-align:center;border-bottom:1px solid var(--color-border-default)}.marketing-section::before{display:table;content:""}.marketing-section::after{display:table;clear:both;content:""}.marketing-section h3{font-size:20px;font-weight:var(--base-text-weight-normal, 400)}.marketing-hero-octicon{position:relative;width:100px;height:100px;margin:0 auto 16px;text-align:center;border:solid 1px var(--color-border-default);border-radius:50px}.marketing-hero-octicon .octicon{margin-top:24px;color:var(--color-accent-fg)}.marketing-hero-octicon .octicon-checklist{position:relative;right:-3px}.hanging-icon-list{list-style-type:none}.hanging-icon-list li{padding-left:24px;margin:8px 0;font-size:14px}.hanging-icon-list .octicon{float:left;margin-top:4px;margin-left:-24px;color:var(--color-fg-muted)}.hanging-icon-list .octicon-check{color:var(--color-success-fg)}.hanging-icon-list .octicon-x{color:var(--color-danger-fg)}.integrations-hero-octicon.marketing-hero-octicon{width:75px;height:75px;border-width:5px}.integrations-hero-octicon.marketing-hero-octicon .octicon{margin-top:16px}.marketing-blue-octicon{color:#34acbf;border-color:#34acbf}.marketing-blue-octicon .octicon{color:#34acbf}.marketing-turquoise-octicon{color:#75bbb6;border-color:#75bbb6}.marketing-turquoise-octicon .octicon{color:#75bbb6}.marketing-purple-octicon{color:#b086b7;border-color:#b086b7}.marketing-purple-octicon .octicon{color:#b086b7}.marketing-graphic{position:relative}.intgrs-dir .marketing-graphic{padding-right:0;margin:0}.intgrs-dir .footer{margin-top:40px}.intgrs-dir-section h2{margin-top:0;margin-bottom:16px;font-size:24px;font-weight:var(--base-text-weight-light, 300)}.intgrs-dir-intro{padding:40px 0;margin:0;text-align:left;background-image:linear-gradient(-110deg, #48227d 0%, #2f569c 100%);border-bottom:0}.pagehead+.intgrs-dir-intro{margin-top:-16px}.intgrs-dir-intro .directory-header-back{margin-top:8px;font-size:16px;color:#fff}.intgrs-dir-intro .directory-header-back:hover{color:#d7def1;text-decoration:none}.intgrs-dir-intro .directory-header-back .octicon{vertical-align:middle}.intgrs-dir-intro .directory-header-back .header-link{color:var(--color-accent-fg)}.intgrs-dir-intro .directory-tag-line{margin-bottom:0;font-size:32px;font-weight:var(--base-text-weight-normal, 400);color:#fff}.intgrs-dir-intro .lead{margin-top:8px;margin-bottom:4px;font-size:16px;font-weight:var(--base-text-weight-normal, 400);color:#d7def1}.intgrs-lstng-search{display:inline-block;width:33%;margin-left:16px}.intgrs-lstng-search .subnav-search-input{width:100%}.intgrs-lstng-categories-container{display:inline-block;float:left;width:20%}.intgrs-lstng-categories-container .intgrs-lstng-categories{top:0}.intgrs-lstng-categories-container .filter-item{padding:4px 8px;margin-right:-8px;margin-left:-8px}.intgrs-lstng-container{display:inline-block;width:80%;text-align:left}.intgrs-lstng-item{position:relative;display:inline-flex;width:30.8%;font-size:14px;border:1px solid var(--color-border-muted);border-radius:4px;transition:border-color .15s ease 0s,transform .15s ease 0s,box-shadow .15s ease 0s,color .15s ease 0s}.intgrs-lstng-item:hover{border-color:#51a7e8;box-shadow:0 0 5px rgba(81,167,232,.5);transform:scale(1.05)}.intgrs-lstng-item .intgrs-lstng-logo{display:block;margin:0 auto 8px}.intgrs-lstng-item .draft-tag{position:absolute;top:-1px;left:10px}.intgrs-lstng-item-link{display:block;width:100%;height:181px;padding-top:16px}.intgrs-lstng-item-link:hover{text-decoration:none}.intgrs-lstng-item-link:hover .intgrs-lstng-item-header{color:var(--color-accent-fg)}.intgrs-lstng-item-header{margin:16px 8px 0;font-size:14px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default)}.intgrs-lstng-item-description{position:relative;height:2.8em;padding:0 8px;margin-top:4px;overflow:hidden;font-size:12px;color:var(--color-fg-muted)}.intgrs-lstng-item-description::after{position:absolute;right:0;bottom:0;padding:0 16px 0 16px;color:transparent;content:" ";background-image:linear-gradient(to right, rgba(255, 255, 255, 0), #fff 80%)}.intgr-admin-link{position:relative;display:inline-block;height:25px;padding-left:24px;font-size:12px;vertical-align:middle;border:1px solid var(--color-border-muted);border-radius:6px}.intgr-admin-link.draft-tag{padding-left:24px;border:0}.intgr-admin-link.draft-tag .octicon,.intgr-admin-link.draft-tag:hover .octicon{color:#fff}.intgr-admin-link.draft-tag:hover{text-decoration:none;background-color:#000}.intgr-admin-link:hover .octicon{color:var(--color-accent-fg)}.intgr-admin-link .octicon{position:absolute;top:3px;left:5px;color:var(--color-fg-muted)}.intgr-feat-header{position:relative;width:85%;padding:0 65px 8px;color:#d7def1}.intgr-feat-header .intgr-admin-link{border-color:rgba(215,222,241,.6)}.intgr-feat-header .intgr-admin-link .octicon{color:#d7def1}.intgr-feat-header .intgr-admin-link:hover .octicon{color:#fff}.intgr-feat-header .marketing-hero-octicon{position:absolute;top:0;left:5px;width:50px;height:50px;border-width:3px}.intgr-feat-header .marketing-hero-octicon .octicon{margin-top:12px}.intgr-feat-header h2{margin:0;font-size:24px;line-height:50px;color:#fff}.intgr-feat-header p{max-width:580px;margin:0;font-size:16px}.integrations-breadcrumb{display:inline-block;font-weight:var(--base-text-weight-normal, 400);color:var(--color-accent-fg)}.integrations-breadcrumb-link{line-height:0;color:#d7def1}.integrations-breadcrumb-link:hover{color:#fff;text-decoration:none}.integrations-auth-wrapper{max-width:540px;padding-right:16px;padding-left:16px;margin:60px auto}.integrations-auth-header{font-size:20px;text-align:center}.integrations-permissions-group dt{font-size:16px;font-weight:var(--base-text-weight-normal, 400)}.integrations-permissions-group .integrations-permission{position:relative;padding-left:24px;margin-bottom:8px;list-style-type:none}.integrations-permissions-group .integrations-permission .octicon{position:absolute;top:1px;left:0;margin-right:8px}.integrations-install-target .select-menu{vertical-align:middle}.integrations-install-target input[type=radio]{margin-right:8px}.integrations-install-target .flash{background-color:transparent}.integrations-install-target .flash-error{background-color:transparent;border:0}.integrations-install-target .octicon-lock,.integrations-install-target .octicon-repo,.integrations-install-target .octicon-repo-forked{margin-right:4px}.integrations-install-target .octicon-lock{color:var(--color-attention-fg)}.integrations-install-target .private{background-color:#fff9ea}.integrations-install-target [aria-selected=true].private,.integrations-install-target .navigation-focus.private{background-color:#4078c0}.integrations-install-target [aria-selected=true].octicon-lock,.integrations-install-target .navigation-focus .octicon-lock{color:inherit}.integrations-setup-note{margin:8px 0}.listgroup-item{line-height:inherit}.listgroup-item.disabled{background-color:var(--color-canvas-subtle)}.listgroup-item.disabled .listgroup-item-title{color:var(--color-fg-default)}.link-small{color:var(--color-fg-muted);transition:color 500ms ease}.sub-permissions-error{max-width:unset !important}.not-found-octocat-wrapper{width:71px;height:71px;border-radius:45px}.not-found-octocat-wrapper::after{position:absolute;top:58px;left:45px;z-index:-2;display:block;width:4px;height:4px;vertical-align:baseline;content:"";background:var(--color-canvas-default);border-radius:4px;box-shadow:0 4px 0 #fff,0 8px 0 #fff,0 12px 0 #fff,0 16px 0 #fff,0 20px 0 #fff;animation-name:pull-string;animation-duration:.75s;animation-fill-mode:forwards;animation-delay:.5s}@keyframes lightbulb{0%,8%,14%{opacity:.1}0%,10%,25%{opacity:.25}5%,30%,50%,70%{opacity:.5}16%,60%,80%{opacity:.75}90%{opacity:.8}94%{opacity:.5}100%{opacity:1;stddeviation:0}}.not-found-lightbulb-ani{z-index:1;opacity:.25;animation-name:lightbulb;animation-duration:2.5s;animation-fill-mode:forwards;animation-delay:1.3s}@keyframes pull-string{50%{transform:translate3d(0, 12px, 0)}75%{opacity:1;transform:none}100%{opacity:0}}.boxed-group-table .toggle-currency{font-size:12px;font-weight:var(--base-text-weight-normal, 400)}.has-removed-contents{display:none}.org-login{margin-top:-32px;margin-bottom:32px}.org-login img{width:450px;padding:1px;margin:8px -24px;border:1px solid var(--color-border-default)}.member-list-item .member-username{display:inline}.member-list-item .member-link{display:inline}.actor-and-action{font-weight:var(--base-text-weight-semibold, 600)}.vertical-separator{margin-right:8px;margin-left:4px;border-left:1px solid var(--color-border-default)}.audit-log-search .audit-search-form{margin-bottom:8px}.audit-log-search .audit-results-actions{margin:16px 0}.audit-log-search .audit-search-clear{margin-bottom:0}.billing-addon-items table input{width:5em}.billing-addon-items td{vertical-align:middle;border-bottom:0}.billing-addon-items td.fixed{width:150px}.billing-addon-items td.black{color:var(--color-fg-default)}.billing-addon-items tr{border-bottom:1px solid var(--color-border-muted)}.billing-addon-items tr:last-child{border-bottom-width:0}.billing-addon-items tr:nth-child(even){background-color:var(--color-canvas-subtle)}.billing-addon-items tr.total-row{color:var(--color-danger-fg);background-color:var(--color-canvas-default)}.billing-addon-items .new-addon-items{margin-left:4px}.billing-addon-items .addon-cost{color:var(--color-fg-muted)}.billing-addon-items .discounted-original-price{color:var(--color-fg-muted)}.billing-addon-items .form-submit,.billing-addon-items .payment-method{margin-left:8px}.billing-addon-items .payment-summary{margin-right:8px;margin-left:8px}.billing-credit-card .javascript-disabled-overlay{position:absolute;top:0;left:0;z-index:1;display:none;width:100%;height:100%;background-color:var(--color-canvas-default);opacity:.5}.billing-credit-card.disabled .javascript-disabled-overlay{display:block}.billing-extra-box{padding-left:8px;margin:8px 0;border-left:6px solid var(--color-border-muted)}.billing-vat-box{padding-left:8px;margin:8px 0;border-left:6px solid var(--color-border-muted)}.billing-section .action-button{float:right;margin-bottom:4px;margin-left:8px}.billing-section .section-label{position:absolute;width:85px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted);text-align:right}.billing-section .section-content{margin-left:100px;color:var(--color-fg-default)}.billing-section:last-child{border-bottom:0}.billing-section .usage-bar{max-width:304px}.usage-bar{width:100%;margin:4px 0 0;background:#eee;border-radius:20px}.usage-bar.exceeded .progress{background-color:var(--color-danger-emphasis) !important}.usage-bar .progress{position:relative;max-width:100%;height:5px;background-color:var(--color-success-emphasis);border-radius:20px;transition:width .3s}.usage-bar .progress.no-highlight{background:var(--color-neutral-muted)}.usage-bar .progress--orange{background-color:var(--color-severe-emphasis)}.usage-bar .progress--purple{background-color:var(--color-done-emphasis)}.lfs-data-pack-field{margin:-4px 0}.packs-table .desc{width:1%;white-space:nowrap}.lfs-data-icon{color:var(--color-fg-muted);text-align:center}.lfs-data-icon.dark{color:var(--color-fg-default)}.lfs-data-icon.octicon-database{margin-right:4px;margin-left:2px}.setup-wrapper .paypal-container{margin-bottom:32px}.setup-wrapper .paypal-logged-in .paypal-container{margin-bottom:8px}.payment-methods{position:relative}.payment-methods .selected-payment-method{display:none}.payment-methods .selected-payment-method::before{display:table;content:""}.payment-methods .selected-payment-method::after{display:table;clear:both;content:""}.payment-methods .selected-payment-method.active{display:block}.payment-methods .form-group dd .form-control.short.input-vat{width:300px}.payment-methods .pay-with-header{margin:4px 0}.payment-methods .pay-with-paypal .setup-creditcard-form,.payment-methods .pay-with-paypal .paypal-form-actions,.payment-methods .pay-with-paypal .terms,.payment-methods .pay-with-paypal .paypal-signed-in,.payment-methods .pay-with-paypal .paypal-down-flash,.payment-methods .pay-with-paypal .loading-paypal-spinner{display:none}.payment-methods.paypal-loading .loading-paypal-spinner{display:block}.payment-methods.paypal-down .paypal-down-flash{display:block}.payment-methods.paypal-logged-in .paypal-sign-in{display:none}.payment-methods.paypal-logged-in .setup-creditcard-form,.payment-methods.paypal-logged-in .paypal-form-actions,.payment-methods.paypal-logged-in .terms,.payment-methods.paypal-logged-in .paypal-signed-in{display:block}.payment-methods.has-paypal-account .paypal-sign-in{display:none}.payment-methods.has-paypal-account .paypal-signed-in{display:block}.paypal-label{margin:16px 0 8px;font-weight:var(--base-text-weight-semibold, 600)}.paypal-container{display:inline-block;margin-bottom:16px;vertical-align:top;background-color:var(--color-canvas-subtle);border-radius:4px}.braintree-paypal-loggedin{padding:12px 16px !important;background-position:12px 50% !important;border:1px solid var(--color-border-muted) !important;border-radius:4px}.bt-pp-name{margin-left:16px !important}.bt-pp-email{margin-left:16px !important}.bt-pp-cancel{font-size:0 !important;line-height:1 !important;color:var(--color-danger-fg) !important;text-decoration:none !important}.payment-history .id,.payment-history .date,.payment-history .receipt,.payment-history .status,.payment-history .amount{white-space:nowrap}.payment-history .break-all{word-break:break-all}.payment-history .receipt{text-align:center}.payment-history .currency,.payment-history .status{color:var(--color-fg-muted)}.payment-history .status-icon{width:14px;text-align:center}.payment-history .succeeded .status{color:var(--color-success-fg)}.payment-history .refunded,.payment-history .failed{background:var(--color-canvas-subtle)}.payment-history .refunded td,.payment-history .failed td{opacity:.5}.payment-history .refunded .receipt,.payment-history .refunded .status,.payment-history .failed .receipt,.payment-history .failed .status{opacity:1}.payment-history .refunded .status{color:var(--color-fg-muted)}.payment-history .failed .status{color:var(--color-danger-fg)}.payment-history .transaction:target{background:var(--color-attention-subtle);border-color:var(--color-attention-emphasis)}.paypal-icon{margin:0 2px 0 1px;vertical-align:middle}.currency-container .local-currency,.currency-container .local-currency-block{display:none}.currency-container.open .local-currency{display:inline}.currency-container.open .local-currency-block{display:block}.currency-container.open .default-currency{display:none}.strong-label{display:inline-block;margin-bottom:4px;font-weight:var(--base-text-weight-semibold, 600)}.discounted-original-price{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted);text-decoration:line-through}.billing-manager-input{width:500px}.seats-change-arrow{margin:0 8px}.plan-choice{position:relative;display:block;padding:16px;padding-left:40px;font-weight:var(--base-text-weight-normal, 400);background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default)}.plan-choice.open,.plan-choice.selected{background-color:var(--color-canvas-default)}.plan-choice--experiment{cursor:pointer;transition:transform .3s,box-shadow .3s,border-color .3s}.plan-choice--experiment.open,.plan-choice--experiment.selected{border-color:var(--color-border-default);box-shadow:var(--color-shadow-large);transform:scale(1.025)}.plan-choice--experiment.open .plan-choice-icon,.plan-choice--experiment.selected .plan-choice-icon{background-color:var(--color-success-emphasis);box-shadow:var(--color-shadow-small)}.plan-choice--experiment.open .plan-choice-icon .octicon,.plan-choice--experiment.selected .plan-choice-icon .octicon{transform:scale(1)}.plan-choice--experiment.plan-choice--green.open,.plan-choice--experiment.plan-choice--green.selected{border-color:var(--color-success-emphasis)}.plan-choice--experiment.plan-choice--green.open .plan-choice-icon,.plan-choice--experiment.plan-choice--green.selected .plan-choice-icon{background-color:var(--color-success-emphasis)}.plan-choice--experiment.plan-choice--purple.open,.plan-choice--experiment.plan-choice--purple.selected{border-color:var(--color-done-emphasis)}.plan-choice--experiment.plan-choice--purple.open .plan-choice-icon,.plan-choice--experiment.plan-choice--purple.selected .plan-choice-icon{background-color:var(--color-done-fg)}.plan-choice-icon{transition:box-shadow .3s}.plan-choice-icon .octicon{transition:transform .2s;transform:scale(0.5)}.plan-choice-radio{position:absolute;top:18px;left:15px}.plan-choice-exp{margin-top:4px;font-size:12px;color:var(--color-fg-muted)}.seat-field{width:50px;margin-right:4px}.billing-line-items{margin-top:8px}.billing-line-item{padding:8px 0;font-size:12px;list-style:none;border-top:1px solid var(--color-border-default)}.billing-line-item::before{display:table;content:""}.billing-line-item::after{display:table;clear:both;content:""}.billing-line-item-last{font-weight:var(--base-text-weight-semibold, 600);border-top-width:3px}.line-item-value{float:right}.condensed-payment-methods .vat-field{width:100%}.condensed-payment-methods .state-field{width:30%}.condensed-payment-methods .postcode-field{width:28%}.condensed-payment-methods .country-field{width:42%}.condensed-payment-methods .is-international .country-field{width:72%}.condensed-payment-methods .is-international.no-postcodes .country-field{width:100%}.zuora-billing-section.PaymentMethod--creditcard:not(.has-removed-contents)~.SignUpContinueActions{display:none}.zuora-billing-section.PaymentMethod--creditcard-added~.SignUpContinueActions{display:block}.zuora-billing-section.PaymentMethod--paypal~.SignUpContinueActions{display:block}.new-org-billing-form .z_hppm_iframe{width:100% !important}.billing-tooltip-underline{cursor:help;border-bottom:1px dotted}.billing-box-accordion[open] .octicon-chevron-right{height:auto;transform:rotate(90deg)}.billing-box-accordion:hover .billing-box-accordion-state .octicon{color:var(--color-fg-muted)}.billing-box-accordion-chevron[open] .octicon-chevron-right{height:auto;transform:rotate(90deg)}.billing-box-accordion-state .octicon{color:var(--color-fg-muted);transition:transform .09s ease-out}.billing-box-progress{padding-top:1px;margin-bottom:4px}.Details-element:focus{outline:none}.organization-radio-button-budget-disabled{color:var(--color-fg-muted);background-color:var(--color-canvas-subtle)}.organization-radio-button-budget-disabled label p{color:var(--color-fg-muted) !important}.blob-interaction-bar{position:relative;background-color:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-default)}.blob-interaction-bar::before{display:table;content:""}.blob-interaction-bar::after{display:table;clear:both;content:""}.blob-interaction-bar .octicon-search{position:absolute;top:6px;left:10px;font-size:12px;color:var(--color-fg-muted)}.blob-filter{width:100%;padding:4px 16px 4px 32px;font-size:12px;border:0;border-radius:0;outline:none}.blob-filter:focus{outline:none}.TagsearchPopover{width:inherit;max-width:600px}.TagsearchPopover-content{max-height:300px}.TagsearchPopover-list .TagsearchPopover-list-item:hover{background-color:var(--color-canvas-subtle)}.TagsearchPopover-list .TagsearchPopover-list-item .TagsearchPopover-item:hover{text-decoration:none}.TagsearchPopover-list .blob-code-inner{white-space:pre-wrap}.diff-table .line-alert,.blob-code-content .line-alert{position:absolute;left:0;margin:-2px 2px}.diff-table .codeowners-error,.blob-code-content .codeowners-error{color:var(--color-danger-fg)}.diff-table .error-highlight,.blob-code-content .error-highlight{position:relative;cursor:help;font-style:italic;color:var(--color-danger-fg)}.diff-table .error-highlight::before,.blob-code-content .error-highlight::before{position:absolute;top:101%;width:100%;height:.25em;content:"";background:linear-gradient(135deg, transparent, transparent 45%, var(--color-danger-fg), transparent 55%, transparent 100%),linear-gradient(45deg, transparent, transparent 45%, var(--color-danger-fg), transparent 55%, transparent 100%);background-repeat:repeat-x,repeat-x;background-size:.5em .5em}.blob-code-content .blob-num .line-alert{margin-top:1px}.diff-table .blob-num .line-alert{margin:2px -2px}.csv-data .line-alert{position:absolute;margin:2px 4px}.CopyBlock{line-height:20px;cursor:pointer}.CopyBlock .octicon-copy{display:none}.CopyBlock:hover,.CopyBlock:focus,.CopyBlock:active{background-color:var(--color-canvas-default);outline:none}.CopyBlock:hover .octicon-copy,.CopyBlock:focus .octicon-copy,.CopyBlock:active .octicon-copy{display:inline-block}.blob-header.is-stuck{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.commit-form-avatar{margin-left:-64px}.commit-form::after,.commit-form::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.commit-form::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.commit-form::before{background-color:var(--color-border-default)}.quick-pull-new-branch-icon{top:9px;left:10px}.CodeMirror-hints{position:absolute;z-index:10;max-height:20em;margin:0;overflow-y:auto;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:12px;list-style:none;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px;box-shadow:var(--color-shadow-medium)}.CodeMirror-hint{padding:2px 8px;margin:0;color:var(--color-fg-default);white-space:pre;cursor:pointer}.CodeMirror-hint .CodeMirror-hint:first-child{border-top-left-radius:6px;border-top-right-radius:6px}.CodeMirror-hint .CodeMirror-hint:last-child{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.CodeMirror-hint-active{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.CodeMirror-lint-tooltip{position:fixed;z-index:100;min-width:300px;max-width:600px;opacity:0;transition:opacity .4s}.CodeMirror-lint-mark-error{position:relative;cursor:help}.CodeMirror-lint-mark-error::before{position:absolute;top:101%;width:100%;height:.25em;content:"";background:linear-gradient(135deg, transparent, transparent 45%, var(--color-danger-emphasis), transparent 55%, transparent 100%),linear-gradient(45deg, transparent, transparent 45%, var(--color-danger-emphasis), transparent 55%, transparent 100%);background-repeat:repeat-x,repeat-x;background-size:.5em .5em}.CodeMirror-lint-mark-warning{position:relative;cursor:help}.CodeMirror-lint-mark-warning::before{position:absolute;top:101%;width:100%;height:.25em;content:"";background:linear-gradient(135deg, transparent, transparent 45%, var(--color-attention-emphasis), transparent 55%, transparent 100%),linear-gradient(45deg, transparent, transparent 45%, var(--color-attention-emphasis), transparent 55%, transparent 100%);background-repeat:repeat-x,repeat-x;background-size:.5em .5em}.CodeMirror-lint-mark-info{position:relative;cursor:help}.CodeMirror-lint-mark-info::before{position:absolute;top:101%;width:100%;height:.25em;content:"";background:linear-gradient(135deg, transparent, transparent 45%, var(--color-accent-emphasis), transparent 55%, transparent 100%),linear-gradient(45deg, transparent, transparent 45%, var(--color-accent-emphasis), transparent 55%, transparent 100%);background-repeat:repeat-x,repeat-x;background-size:.5em .5em}.CodeMirror-hint-active .CodeMirror-hint-description{color:var(--color-fg-on-emphasis) !important}.merge-pr{padding-top:8px;margin:16px 0 0;border-top:1px solid var(--color-border-default)}.merge-pr.open .merge-branch-form{display:block}.merge-pr.open .branch-action{display:none}.merge-pr.is-merging-jump.open .queue-branch-form,.merge-pr.is-merging-group.open .queue-branch-form,.merge-pr.is-merging-solo.open .queue-branch-form{display:block}.status-heading{margin-bottom:1px}.merge-status-list{max-height:0;padding:0;margin:16px -16px -16px -55px;overflow-y:auto;transition:max-height .25s ease-in-out}.statuses-toggle-opened{display:none}.merge-status-item{position:relative;padding:8px 16px;background-color:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-default)}.merge-status-item:last-child:not(.review-item){border-bottom:0}.merge-status-item .css-truncate-target{max-width:100%}.merge-status-item .dismiss-review-form{display:none}.merge-status-item.open .review-status-item{display:none !important}.merge-status-item.open .dismiss-review-form{display:block}.status-meta{color:var(--color-fg-muted)}.status-meta-file-name{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:6px}.status-actions{margin-left:auto}.branch-action-item-icon{float:left;margin-left:-40px}.merge-status-icon{min-width:30px}.branch-action{padding-left:55px;margin-top:16px;margin-bottom:16px}.branch-action .merge-branch-heading{margin-bottom:4px}.branch-action-icon{float:left;width:40px;height:40px;margin-left:-55px;color:var(--color-fg-on-emphasis);border-radius:6px}.branch-action-body{position:relative;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px}.branch-action-body .spinner{display:block;float:left;width:32px;height:32px;margin-right:16px;background:url("/images/spinners/octocat-spinner-32.gif") no-repeat}.branch-action-body .merge-message,.branch-action-body .merge-branch-form,.branch-action-body .queue-branch-form{padding:16px;background-color:var(--color-canvas-subtle);border-top:1px solid var(--color-border-default);border-bottom-right-radius:6px;border-bottom-left-radius:6px}.post-merge-message{padding:16px}.branch-action-item{padding:16px 16px 16px 55px;font-size:13px;line-height:1.4}.branch-action-item+.branch-action-item,.branch-action-item+.mergeability-details{border-top:1px solid var(--color-border-default)}.branch-action-item.open>.merge-status-list-wrapper>.merge-status-list,.branch-action-item.open>.merge-status-list{max-height:231px;margin-bottom:-16px;border:solid var(--color-border-default);border-width:1px 0 0}.branch-action-item.open .statuses-toggle-opened{display:inline}.branch-action-item.open .statuses-toggle-closed{display:none}.branch-action-btn{margin-left:16px}.branch-action-item-simple{padding-left:16px}.branch-action-item-simple .merge-status-list{margin-left:-16px}.branch-action-item-simple .merge-status-item{padding-left:12px}.branch-action-state-clean .branch-action-icon{color:var(--color-fg-on-emphasis);background-color:var(--color-success-emphasis);border:1px solid transparent}.branch-action-state-clean .branch-action-body{border-color:var(--color-success-emphasis)}.branch-action-state-clean .branch-action-body::after,.branch-action-state-clean .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.branch-action-state-clean .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.branch-action-state-clean .branch-action-body::before{background-color:var(--color-success-emphasis)}.branch-action-state-unknown .branch-action-icon,.branch-action-state-unstable .branch-action-icon{color:var(--color-fg-on-emphasis);background-color:var(--color-attention-emphasis);border:1px solid transparent}.branch-action-state-unknown .branch-action-body,.branch-action-state-unstable .branch-action-body{border-color:var(--color-attention-emphasis)}.branch-action-state-unknown .branch-action-body::after,.branch-action-state-unknown .branch-action-body::before,.branch-action-state-unstable .branch-action-body::after,.branch-action-state-unstable .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.branch-action-state-unknown .branch-action-body::after,.branch-action-state-unstable .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.branch-action-state-unknown .branch-action-body::before,.branch-action-state-unstable .branch-action-body::before{background-color:var(--color-attention-emphasis)}.branch-action-state-merged .branch-action-icon{color:var(--color-fg-on-emphasis);background-color:var(--color-done-emphasis);border:1px solid transparent}.branch-action-state-merged .branch-action-body{border-color:var(--color-done-emphasis)}.branch-action-state-merged .branch-action-body::after,.branch-action-state-merged .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.branch-action-state-merged .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.branch-action-state-merged .branch-action-body::before{background-color:var(--color-done-emphasis)}.branch-action-state-dirty .branch-action-icon,.branch-action-state-closed-dirty .branch-action-icon,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-icon{color:var(--color-fg-on-emphasis);background-color:var(--color-neutral-emphasis);border:1px solid transparent}.branch-action-state-dirty .branch-action-body,.branch-action-state-closed-dirty .branch-action-body,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-body{border-color:var(--color-border-default)}.branch-action-state-dirty .branch-action-body::after,.branch-action-state-dirty .branch-action-body::before,.branch-action-state-closed-dirty .branch-action-body::after,.branch-action-state-closed-dirty .branch-action-body::before,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-body::after,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.branch-action-state-dirty .branch-action-body::after,.branch-action-state-closed-dirty .branch-action-body::after,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.branch-action-state-dirty .branch-action-body::before,.branch-action-state-closed-dirty .branch-action-body::before,.is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-body::before{background-color:var(--color-border-default)}.branch-action-state-error .branch-action-icon,.is-merging .branch-action-state-error-if-merging .branch-action-icon{color:var(--color-fg-on-emphasis);background-color:var(--color-danger-emphasis);border:1px solid transparent}.branch-action-state-error .branch-action-body,.is-merging .branch-action-state-error-if-merging .branch-action-body{border-color:var(--color-danger-emphasis)}.branch-action-state-error .branch-action-body::after,.branch-action-state-error .branch-action-body::before,.is-merging .branch-action-state-error-if-merging .branch-action-body::after,.is-merging .branch-action-state-error-if-merging .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.branch-action-state-error .branch-action-body::after,.is-merging .branch-action-state-error-if-merging .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.branch-action-state-error .branch-action-body::before,.is-merging .branch-action-state-error-if-merging .branch-action-body::before{background-color:var(--color-danger-emphasis)}.enqueued-pull-request .branch-action-body::after,.enqueued-pull-request .branch-action-body::before{position:absolute;top:11px;right:100%;left:-8px;display:block;width:8px;height:16px;pointer-events:none;content:" ";clip-path:polygon(0 50%, 100% 0, 100% 100%)}.enqueued-pull-request .branch-action-body::after{margin-left:2px;background-color:var(--color-canvas-default);background-image:linear-gradient(var(--color-canvas-default), var(--color-canvas-default))}.enqueued-pull-request .branch-action-body::before{background-color:var(--color-attention-emphasis)}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (-moz-min-device-pixel-ratio: 2),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){.branch-action-body .spinner{background-image:url("/images/spinners/octocat-spinner-64.gif");background-size:32px 32px}}.merge-branch-form,.queue-branch-form{display:none;margin:16px 0}.merge-branch-form .commit-form,.queue-branch-form .commit-form{border-color:var(--color-success-emphasis)}.merge-branch-form .commit-form::before,.queue-branch-form .commit-form::before{display:none}@media(min-width: 768px){.merge-branch-form .commit-form::before,.queue-branch-form .commit-form::before{display:block;border-right-color:var(--color-border-default)}}.merge-branch-form .commit-form::after,.queue-branch-form .commit-form::after{display:none}@media(min-width: 768px){.merge-branch-form .commit-form::after,.queue-branch-form .commit-form::after{display:block}}.merge-branch-form.error .commit-form,.merge-branch-form.danger .commit-form,.queue-branch-form.error .commit-form,.queue-branch-form.danger .commit-form{border-color:var(--color-danger-emphasis)}.merge-branch-form.error .commit-form::before,.merge-branch-form.danger .commit-form::before,.queue-branch-form.error .commit-form::before,.queue-branch-form.danger .commit-form::before{border-right-color:var(--color-danger-emphasis)}.merge-button-matrix-merge-form .merge-branch-form{display:block}.completeness-indicator{display:flex;align-items:center;justify-content:center;width:30px;height:30px}.completeness-indicator-success{color:var(--color-fg-on-emphasis);background-color:var(--color-success-emphasis);border:1px solid transparent;border-radius:50%}.completeness-indicator-error{color:var(--color-fg-on-emphasis);background-color:var(--color-danger-emphasis);border:1px solid transparent;border-radius:50%}.completeness-indicator-problem{color:var(--color-fg-on-emphasis);background-color:var(--color-neutral-emphasis);border:1px solid transparent;border-radius:50%}.completeness-indicator-warning{color:var(--color-fg-on-emphasis);background-color:var(--color-attention-emphasis);border:1px solid transparent;border-radius:50%}.pull-merging .pull-merging-error{display:none}.pull-merging.is-error .pull-merging-error{display:block}.pull-merging.is-error .merge-pr{display:none}.admin-options-block .admin-option-button{margin-top:8px}.admin-options-block .policy-enforcement{display:inline;margin-left:8px;color:var(--color-fg-muted)}.admin-options-block .policy-enforcement label{font-size:14px}.admin-options-block .disabled{color:var(--color-fg-muted)}.admin-options-block .disabled .note{color:var(--color-fg-muted)}.overflow-scroll-y{overflow-x:hidden !important;overflow-y:scroll !important}.business-menu-item:not([aria-current=page])+.business-sub-menu{display:none}.business-menu-icon{width:16px;margin-right:8px}.deprovisioning-checkbox>.show-if-disabled{display:none}.deprovisioning-checkbox.checkbox-disabled{color:var(--color-fg-muted)}.deprovisioning-checkbox.checkbox-disabled>.show-if-disabled{display:inherit}.dormant-users-recent-reports{gap:16px}.avatar-migration-status-badge{width:20px;height:20px}body.full-width-p-0 .new-discussion-timeline{padding:0 !important}body.full-width-p-0 .footer .mt-6{margin-top:0 !important;border-top:0 !important}body.full-width-p-0 .tabnav .tabnav-extra{margin-right:24px}body.full-width-p-0 .tabnav .tabnav-tabs{margin-left:16px}.actions-full-screen .pagehead,.actions-full-screen .hide-full-screen,.actions-full-screen .Header-old,.actions-full-screen .Header{display:none}.checks-list-item.selected .checks-list-item-name{background-color:var(--color-accent-emphasis) !important}.checks-list-item.selected .selected-color-white{color:var(--color-fg-on-emphasis) !important}.checks-list-item-icon{width:16px}.check-annotation{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.file .check-annotation{border-bottom:1px solid var(--color-border-default)}.file .check-annotation:last-child{border-bottom:0}.check-annotation .annotation-actions{top:4px;right:8px}.check-annotation .annotation-octicon{width:16px}.check-annotation.Details--on .Details-content--hidden{display:block !important}.annotation-title{word-break:break-word}.check-annotation-failure{box-shadow:inset 4px 0 0 var(--color-danger-emphasis)}.check-annotation-failure .annotation-title{color:var(--color-danger-fg)}.check-annotation-warning{box-shadow:inset 4px 0 0 var(--color-attention-emphasis)}.check-annotation-warning .octicon-alert{color:var(--color-attention-fg)}.check-annotation-warning .annotation-title{color:var(--color-attention-fg)}.neutral-check{color:var(--color-fg-muted)}.check-range-menu-loading{display:block}.check-range-menu-error{display:none}.is-error .check-range-menu-loading{display:none}.is-error .check-range-menu-error{display:block}.code-frequency .addition{fill:#2cbe4e;fill-opacity:1}.code-frequency .deletion{fill:var(--color-danger-emphasis);fill-opacity:1}.code-list .file-box{border:1px solid var(--color-border-default);border-radius:6px}.code-list .title{min-height:24px;margin:-4px 0 8px 40px;font-weight:var(--base-text-weight-semibold, 600);line-height:1.2}.code-list .repo-specific .title,.code-list .repo-specific .full-path{margin-left:0}.code-list .match-count,.code-list .updated-at{margin:0;font-weight:var(--base-text-weight-normal, 400)}.code-list .language{float:right;margin-left:8px;font-size:12px;color:rgba(51,51,51,.75)}.code-list .avatar{float:left}.code-list .code-list-item+.code-list-item{border-top:1px solid var(--color-border-muted)}.code-list .blob-num{padding:0}.code-list .blob-num::before{content:normal}.code-list .blob-num a{padding:0 8px;color:inherit}.code-list .blob-num a:hover{color:var(--color-accent-fg)}.code-list .blob-code{white-space:pre-wrap}.code-list .divider .blob-num,.code-list .divider .blob-code{padding-top:0;padding-bottom:0;cursor:default;background-color:var(--color-canvas-subtle)}.code-list .divider .blob-num{height:18px;padding:0 8px;line-height:15px;background-color:var(--color-canvas-subtle)}.code-list .full-path{margin:0 0 0 40px}.code-list .full-path .octicon-repo{color:var(--color-fg-muted)}.code-list .full-path .octicon-lock{color:var(--color-attention-fg)}.code-list .full-path a{color:var(--color-fg-muted)}.code-list-item-private .file-box{border:1px solid var(--color-attention-muted)}.code-list-item-private .blob-num{background-color:var(--color-attention-subtle);border-right:1px solid var(--color-attention-muted)}.code-list-item-private .blob-num a{color:var(--color-attention-fg)}.code-list-item-private .divider .blob-num,.code-list-item-private .divider .blob-code{color:var(--color-attention-fg);background-color:var(--color-attention-subtle)}.code-scanning-alert-warning-message{border-color:var(--color-attention-emphasis) !important}.code-scanning-font-size-inherit{font-size:inherit !important}.cs-message .md-list{padding-left:2em}.code-scanning-timeline .TimelineItem:last-of-type.code-scanning-alert-dismissal-comment::before{width:0}.codesearch-head.pagehead h1{width:250px;line-height:33px}@media(min-width: 768px){.advanced-search-form .flattened dt{width:230px}.advanced-search-form .flattened dt label{font-weight:var(--base-text-weight-normal, 400)}.advanced-search-form .flattened dd{margin-left:250px}.advanced-search-form .form-checkbox{margin-left:250px}}.codesearch-results .code-list .title a{word-wrap:break-word}.codesearch-results .repo-list-item{border-bottom:0}.codesearch-results .repo-list-item+.repo-list-item{border-top:1px solid var(--color-border-default)}.search-form-fluid .TableObject-item--primary{position:relative;padding-right:8px}.search-form-fluid .completed-query{position:absolute;z-index:1;padding:inherit;margin:0;overflow:hidden;white-space:nowrap}.search-form-fluid .completed-query span{opacity:0}.search-form-fluid .search-page-label{position:relative;display:block;font-weight:var(--base-text-weight-normal, 400);cursor:text}.search-form-fluid .search-page-label.focus .completed-query{opacity:.6}.search-form-fluid .search-page-input{position:relative;z-index:2;min-height:0;padding:0;margin:0;background:none;border:0;box-shadow:none}.search-form-fluid .search-page-input:focus{box-shadow:none}.topics-row-container{height:30px;overflow:hidden}@media(max-width: 544px){.codesearch-pagination-container a:not(.next_page):not(.previous_page),.codesearch-pagination-container .gap{display:none}.codesearch-pagination-container .previous_page,.codesearch-pagination-container .next_page{width:100%}.codesearch-pagination-container .current{color:var(--color-fg-muted);background:var(--color-canvas-default);border-color:var(--color-border-default)}.codesearch-pagination-container .current::after{content:" of " attr(data-total-pages)}}.codespaces-policy-form details>summary::-webkit-details-marker{display:none}.codespaces-wider-select-menu-modal{width:420px;margin-right:32px}.codespaces-policy-item-no-hover:hover{background-color:var(--color-canvas-overlay)}.codespaces-policy-constraint-menu-item-muted-hover:hover{color:var(--color-fg-default);background-color:var(--color-btn-hover-bg)}.codespaces-policy-form-button-hover:hover .codespaces-policy-form-button-text-hover{border-color:var(--color-btn-hover-bg) !important}.codespaces-policy-form-button-hide-border{border-color:var(--color-scale-white) !important}.codespaces-policy-form-blue-hover:hover{color:var(--color-accent-fg) !important}.codespaces-policy-form-blue-hover:hover svg{color:var(--color-accent-fg) !important}.codespaces-policy-form-blue-hover:focus svg{color:var(--color-accent-fg) !important}.codespaces-policy-form-danger-hover:hover{background-color:var(--color-danger-subtle) !important}.codespaces-storage-utilization-button:hover{background-color:transparent !important}.commit-activity-master{margin-top:16px}.is-graph-loading .commit-activity-master{display:none}rect{shape-rendering:crispedges}rect.max{fill:var(--color-attention-fg)}g.bar{fill:var(--color-success-fg)}g.mini{fill:var(--color-severe-fg)}g.active rect{fill:var(--color-danger-fg)}circle.focus{fill:var(--color-fg-muted)}.dot text{fill:var(--color-fg-muted);stroke:none}span.no-nl-marker{position:relative;color:var(--color-danger-fg);vertical-align:middle}.symlink .no-nl-marker{display:none}.range-editor{position:relative;padding:4px 16px 4px 40px;margin-top:16px;margin-bottom:16px;background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default);border-radius:6px}.range-editor .dots{font-size:16px}.range-editor .select-menu{position:relative;display:inline-block}.range-editor .select-menu.fork-suggester{display:none}.range-editor .branch-name{line-height:22px}.range-editor .branch .css-truncate-target,.range-editor .fork-suggester .css-truncate-target{max-width:180px}.range-editor .pre-mergability{display:inline-block;padding:4px;line-height:26px;vertical-align:middle}.range-editor .pre-mergability .octicon{vertical-align:text-bottom}.range-editor.is-cross-repo .select-menu.fork-suggester{display:inline-block}.range-editor-icon{float:left;margin-top:8px;margin-left:-24px;color:var(--color-fg-muted)}.compare-pr-header{display:none}.is-pr-composer-expanded .compare-show-header{display:none}.is-pr-composer-expanded .compare-pr-header{display:block}.range-cross-repo-pair{display:inline-block;padding:4px;white-space:nowrap}.tint-box{position:relative;margin-bottom:8px;background:var(--color-canvas-subtle);border-radius:6px}.tint-box.transparent{background:var(--color-canvas-default)}.tint-box .activity{padding-top:100px;margin-top:0}.contrib-person path{fill:var(--color-severe-fg)}.contrib-person .midlabel{fill:var(--color-neutral-emphasis)}.coupons .setup-plans td img{margin-top:-2px;vertical-align:middle}.coupons .coupon-form-body{width:270px;padding:16px;margin:100px auto 60px;font-size:14px;text-align:center;background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default);border-radius:6px}.coupons .coupon-form-body .input-block{margin-bottom:16px}.coupons .coupon-form-body .btn{display:block;width:100%}.coupon-icon{width:80px;height:80px;margin:0 auto 16px;color:var(--color-accent-fg);border:1px solid var(--color-border-default);border-radius:40px}.coupon-icon .octicon{margin-top:16px;margin-right:2px}.coupons-list-options .select-menu{display:inline-block;margin-right:8px}.coupons-list-options .pagination{float:right;margin:0}.repo-private-icon{fill:var(--color-attention-fg)}.dashboard-rollup-items>.dashboard-rollup-item{border-top:1px solid var(--color-border-default)}.news-full{float:none;width:auto}.pinned-favorites-update-form{height:200px}.dashboard-break-word{-webkit-hyphens:auto;hyphens:auto;word-break:break-word}.news .bio g-emoji,.news .repo-description g-emoji{display:inline-block}.news .feed-item-heading-menu-button{color:var(--color-fg-muted)}.news .feed-item-heading-menu-button:hover{color:var(--color-fg-default)}.suggest-icon{width:48px;height:48px;padding:4px}.suggest-icon svg,.suggest-icon path{fill:#fff}.suggest-icon svg::before,.suggest-icon path::before{bottom:-6px;left:-4px;background-color:#9e7bff}.suggest-icon svg::after,.suggest-icon path::after{top:-5px;right:-5px;width:5px;height:5px;background-color:#6c84e9}.suggest-icon .suggest-icon-bubble{position:absolute;width:6px;height:6px;background-color:#6c84e9;border-radius:50%}.suggest-icon .suggest-icon-bubble:nth-of-type(2n){width:4px;height:4px;background-color:#9e7bff}.suggest-icon .suggest-icon-bubble:nth-of-type(1){bottom:-7px;left:-7px}.suggest-icon .suggest-icon-bubble:nth-of-type(2){top:-4px;right:4px}.suggest-icon .suggest-icon-bubble:nth-of-type(3){top:-7px;right:-8px}.dashboard-notice{position:relative;padding:16px 16px 16px 55px;margin-bottom:16px;font-size:14px;background-color:var(--color-canvas-subtle);border:1px solid var(--color-border-default);border-radius:6px}.dashboard-notice .dismiss{position:absolute;top:10px;right:10px;width:16px;height:16px;color:var(--color-fg-muted);cursor:pointer}.dashboard-notice .dismiss:hover{color:var(--color-fg-muted)}.dashboard-notice .notice-icon{position:absolute;top:15px;left:15px}.dashboard-notice .octicon-organization{color:var(--color-accent-fg)}.dashboard-notice h2{margin-top:8px;margin-bottom:16px;font-size:16px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-default)}.dashboard-notice p.no-title{padding-right:4px}.dashboard-notice ul{margin-left:16px}.dashboard-notice li{padding-bottom:16px}.dashboard-notice .coupon{padding:8px;margin:16px 0;font-size:20px;font-weight:var(--base-text-weight-semibold, 600);text-align:center;background:var(--color-canvas-default);border:1px dashed var(--color-border-default)}.dashboards-overview-lead{width:700px}.dashboards-overview-cards .boxed-group{width:100%;margin:8px 0}.dashboards-overview-cards .boxed-group .graph-canvas path{stroke-opacity:.5}.dashboards-overview-cards .is-no-activity .blankslate{display:block}.dashboards-overview-cards .is-no-activity .dashboards-overview-graph{display:none}.dashboards-overview-cards .blankslate{display:none;padding-top:47px;background-color:var(--color-canvas-default);border:0;box-shadow:none}.dashboards-overview-cards .octicon-arrow-down,.dashboards-overview-cards .octicon-arrow-up{display:none}.dashboards-overview-cards .is-increase .octicon-arrow-up{display:inline-block}.dashboards-overview-cards .is-decrease .octicon-arrow-down{display:inline-block}.dashboards-overview-cards .octicon-arrow-down{color:var(--color-danger-fg)}.dashboards-overview-cards .octicon-arrow-up{color:#1db34f}.dashboards-overview-cards .graph-canvas .dots{padding:43px 0}.dashboards-overview-cards .summary-stats{height:78px}.dashboards-overview-cards .summary-stats .metric-0{color:#1db34f}.dashboards-overview-cards .summary-stats .metric-1{color:var(--color-accent-fg)}.dashboards-overview-cards .summary-stats .totals-num{margin:0 8px}.dashboards-overview-cards .summary-stats .single{width:100%}.dashboards-overview-cards .dashboards-overview-graph{height:160px}.dashboards-overview-cards .dashboards-overview-graph path{fill:none;stroke-width:2}.dashboards-overview-cards .dashboards-overview-graph path.metric-0{stroke:#1db34f}.dashboards-overview-cards .dashboards-overview-graph path.metric-1{stroke:#1d7fb3}.dashboards-overview-cards .dashboards-overview-graph .y line{stroke:#1db34f}.dashboards-overview-cards .dashboards-overview-graph .y.unique line{stroke:#1d7fb3}.dashboards-overview-cards .dashboards-overview-graph .overlay{fill-opacity:0}.dashboards-overview-cards .metric-0 circle{fill:#1db34f;stroke:#fff;stroke-width:2}.dashboards-overview-cards .dots.metric-1 circle{fill:#1d7fb3;stroke:#fff;stroke-width:2}.TimelineItem:last-of-type.dependabot-alert-dismissal-comment::before{width:0}dl.form.developer-select-account{margin-top:0}.developer-wrapper .setup-info-module .features-list{margin-left:16px}.developer-wrapper .setup-info-module .features-list .octicon{margin-left:-16px}.developer-thanks h2{font-size:40px;font-weight:var(--base-text-weight-normal, 400)}.developer-thanks .hook{margin-top:2px;margin-bottom:32px;font-size:16px;font-weight:var(--base-text-weight-light, 300);color:var(--color-fg-muted)}.developer-thanks-image{position:relative;bottom:-45px;float:left;width:400px}.developer-thanks-section{margin:130px 0 0 470px}.developer-next-steps{font-size:16px;font-weight:var(--base-text-weight-light, 300);list-style:none}.developer-next-steps li{margin-top:8px}.developer-next-steps li:first-child{margin-top:0}.developer-next-steps .octicon{margin-right:8px;color:var(--color-success-fg);vertical-align:middle}development-menu .line-clamp-1{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;word-break:break-all}development-menu .form-control[is-loading]{background:transparent}development-menu .development-menu-component-menu-modal,development-menu .development-menu-component-dialog-modal{margin-top:4px !important}development-menu .SelectMenu-item:hover,development-menu .SelectMenu-item:focus-visible{color:var(--color-fg-on-emphasis) !important;background-color:var(--color-accent-emphasis) !important}development-menu .SelectMenu-item:hover .arrow,development-menu .SelectMenu-item:focus-visible .arrow{visibility:visible !important}development-menu .SelectMenu-item:hover svg,development-menu .SelectMenu-item:hover span,development-menu .SelectMenu-item:hover p,development-menu .SelectMenu-item:focus-visible svg,development-menu .SelectMenu-item:focus-visible span,development-menu .SelectMenu-item:focus-visible p{color:var(--color-fg-on-emphasis) !important;background-color:var(--color-accent-emphasis) !important}development-menu .development-menu-component-menu-modal,development-menu .development-menu-component-dialog,development-menu .development-menu-component-dialog-modal{animation:none}@media(min-width: 544px){development-menu .development-menu-component-menu-modal,development-menu .development-menu-component-dialog,development-menu .development-menu-component-dialog-modal{max-width:300px}}@media(max-width: 544px){development-menu .hx_rsm-modal-sm{position:fixed !important;top:75px;right:16px !important;left:16px;display:flex;width:auto;height:80%;margin:0;flex-direction:column;animation:hx_rsm-modal-animation .24s .12s cubic-bezier(0, 0.1, 0.1, 1) backwards}}development-menu .development-menu-component-dialog:not([hidden])+.development-menu-component-dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:block;cursor:default;content:" ";background:transparent;background:var(--color-primer-canvas-backdrop)}@media(min-width: 544px){development-menu .development-menu-component-dialog:not([hidden])+.development-menu-component-dialog-overlay{display:none}}development-menu .development-menu-component-dialog{z-index:99}@keyframes development-menu-component-dialog-animation--sm{0%{opacity:0;transform:translateX(16px)}}@media(min-width: 544px){development-menu .development-menu-component-dialog{position:absolute;top:auto;right:auto;bottom:auto;left:auto;max-height:none;padding-top:0;margin:0;transform:none}}development-menu .development-menu-component-dialog .development-menu-component-dialog-modal{animation:none}development-menu .SelectMenu-item[aria-disabled=true]{opacity:.5}.file-diff-split[data-lock-side-selection=left] [data-split-side=right],.file-diff-split[data-lock-side-selection=right] [data-split-side=left]{-webkit-user-select:none;user-select:none}.invisible{position:absolute;opacity:0}.icon-discussion-answered{color:var(--color-success-fg)}.icon-discussion-answered,.icon-discussion-answered path{fill:var(--color-success-emphasis)}.icon-discussion-white{color:var(--color-discussions-state-answered-icon) !important}.icon-discussion-white,.icon-discussion-white path{fill:var(--color-discussions-state-answered-icon) !important}.icon-discussion-gray{color:var(--color-fg-default)}.icon-discussion-gray,.icon-discussion-gray path{fill:var(--color-fg-default)}.label-select-menu .color{display:inline-block;width:14px;height:14px;margin-top:-1px;margin-right:2px;vertical-align:middle;border-radius:7px}.label-select-menu .select-menu-item:hover,.label-select-menu .select-menu-item:focus,.label-select-menu .select-menu-item[aria-checked=true]:hover,.label-select-menu .select-menu-item[aria-checked=true]:focus{color:inherit;background-color:var(--color-neutral-subtle)}.label-select-menu .select-menu-item-icon,.label-select-menu .label-options-icon{color:inherit !important}.user-has-reacted .octicon{fill:var(--color-accent-fg)}.discussion-feed-body video{max-height:200px !important}.discussions-header-wrap{display:grid;grid-template-columns:minmax(0, 1fr);gap:10px}@media(min-width: 1012px){.discussions-header-wrap{grid-template-columns:minmax(0, 1fr) max-content}}.discussions-query-builder{order:2}@media(min-width: 1012px){.discussions-query-builder{order:inherit}}.discussions-button-wrap{display:flex;align-items:center;order:1}@media(min-width: 1012px){.discussions-button-wrap{order:inherit;justify-content:flex-end}}.discussions-select-menu a:focus{outline:2px solid var(--color-accent-emphasis)}.donut-chart>.error,.donut-chart>.cancelled,.donut-chart>.action_required,.donut-chart>.timed_out,.donut-chart>.failure{fill:var(--color-checks-donut-error)}.donut-chart>.expected,.donut-chart>.queued,.donut-chart>.in_progress,.donut-chart>.waiting,.donut-chart>.requested,.donut-chart>.pending{fill:var(--color-checks-donut-pending)}.donut-chart>.success{fill:var(--color-checks-donut-success)}.donut-chart>.neutral,.donut-chart>.stale,.donut-chart>.skipped{fill:var(--color-checks-donut-neutral)}.ghe-license-status{padding:40px 0;font-size:16px;text-align:center}.ghe-license-status .octocat{width:225px;margin-bottom:16px}.ghe-license-status h1{margin-bottom:8px}.ghe-license-status p{margin-bottom:4px;color:var(--color-fg-muted)}.ghe-license-expiry-icon{margin:4px 8px 0 0;color:var(--color-attention-fg)}.feature-preview-dialog{width:90vw;max-width:880px;height:60vh;min-height:240px;max-height:700px}.feature-preview-dialog .feature-preview-info{height:60vh;min-height:183px;max-height:calc(100% - 57px)}.file{position:relative;margin-top:16px;margin-bottom:16px;border:1px solid var(--color-border-default, #ddd);border-radius:6px}.file .drag-and-drop{border:0;border-top:1px dashed var(--color-border-default)}.file:target{outline:none !important;box-shadow:0 0 0 2px var(--color-accent-fg) !important}.file .data.empty{padding:4px 8px;color:var(--color-fg-muted)}.file:not(.open) .file-header.file-header--expandable{border-bottom:0;border-radius:6px}.file .data.suppressed,.file.open .image{display:none}.file.open .data.suppressed{display:block}.file .image{position:relative;padding:32px;text-align:center;background-color:#ddd}.file .image table{margin:0 auto}.file .image td{padding:0 4px;color:var(--color-fg-muted);text-align:center;vertical-align:top}.file .image td img{max-width:100%}.file .image .border-wrap{position:relative;display:inline-block;line-height:0;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default)}.file .image a{display:inline-block;line-height:0}.file .image img,.file .image canvas{max-width:600px;background:url("/images/modules/commit/trans_bg.gif") right bottom #eee;border:1px solid #fff}.file .image .view img,.file .image .view canvas{position:relative;top:0;right:0;max-width:inherit;background:url("/images/modules/commit/trans_bg.gif") right bottom #eee}.file .image .view>span{vertical-align:middle}.file .empty{background:none}.file-header{z-index:2;padding:4px 8px;background-color:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-default);border-top-left-radius:6px;border-top-right-radius:6px}.file-header::before{display:table;content:""}.file-header::after{display:table;clear:both;content:""}.file-actions{float:right;padding-top:2px;font-size:12px}.file-actions select{margin-left:4px}.file-info{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px;line-height:32px}.file-info .octicon{vertical-align:text-bottom}.sticky-file-header{position:sticky;top:60px}.sticky-file-header.has-open-dropdown{z-index:10}.diff-progressive-loader{min-height:150px}.load-diff-button,.load-diff-retry{z-index:1;min-height:32px}.diff-placeholder-svg{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%)}.ghae-bootstrap-container{min-height:calc(100vh - 54px)}.ghae-bootstrap-incomplete-step{color:var(--color-fg-muted);background-color:var(--color-canvas-subtle)}.ghae-bootstrap-complete-step{color:var(--color-fg-on-emphasis);background-color:var(--color-success-emphasis)}.ghae-enterprise-name-form-error{left:50%;transform:translateX(-50%)}.graphs .area{fill:var(--color-success-emphasis);fill-opacity:.5}.graphs .path{fill:none;stroke:var(--color-success-emphasis);stroke-opacity:1;stroke-width:2px}.graphs .dot{fill:var(--color-success-emphasis);stroke:#1e7e34;stroke-width:2px}.graphs .dot.padded{stroke:var(--color-canvas-default);stroke-width:1px}.graphs .dot.padded circle:hover{fill:var(--color-accent-emphasis)}.graphs .d3-tip{fill:var(--color-neutral-emphasis)}.graphs .d3-tip text{font-size:12px;fill:var(--color-canvas-default)}.graphs .dir{float:right;padding-top:4px;font-size:12px;font-weight:var(--base-text-weight-normal, 400);line-height:100%;color:var(--color-fg-muted)}.graphs .selection .overlay{visibility:none}.graphs .selection .selection{fill:var(--color-neutral-emphasis);fill-opacity:.1;stroke:var(--color-fg-default);stroke-dasharray:3 3;stroke-opacity:.4;stroke-width:1px;shape-rendering:crispedges}.graph-filter h3{display:inline-block;font-size:24px;font-weight:var(--base-text-weight-light, 300)}.graph-filter .info{margin-bottom:16px;color:var(--color-fg-muted)}.graph-canvas .activity{width:400px;padding:8px;margin:100px auto 0;color:var(--color-fg-default);text-align:center;border-radius:6px}.graph-canvas .dots{margin:0 auto}.graph-canvas>.activity{display:none}.graph-canvas .axis{font-size:12px}.graph-canvas .axis line{stroke:var(--color-border-default);shape-rendering:crispedges}.graph-canvas .axis text{fill:var(--color-fg-muted)}.graph-canvas .axis path{display:none}.graph-canvas .axis .zero line{stroke:var(--color-accent-emphasis);stroke-dasharray:3 3;stroke-width:1.5}.graph-canvas text.axis{fill:var(--color-fg-muted)}.graph-canvas .graph-loading,.graph-canvas .graph-error,.graph-canvas .graph-no-usable-data,.graph-canvas .graph-empty{display:none}.graph-canvas.is-graph-loading>.activity,.graph-canvas.is-graph-without-usable-data>.activity,.graph-canvas.is-graph-empty>.activity{display:block}.graph-canvas.is-graph-loading .graph-loading,.graph-canvas.is-graph-empty .graph-empty,.graph-canvas.is-graph-without-usable-data .graph-no-usable-data,.graph-canvas.is-graph-load-error .graph-error{display:block}.svg-tip{position:absolute;z-index:99999;padding:8px 16px;font-size:12px;color:var(--color-fg-on-emphasis);text-align:center;background:var(--color-neutral-emphasis-plus);border-radius:6px}.svg-tip.is-visible{display:block}.svg-tip::after{position:absolute;bottom:-10px;left:50%;width:5px;height:5px;box-sizing:border-box;margin:0 0 0 -4px;content:" ";border:5px solid transparent;border-top-color:var(--color-neutral-emphasis-plus)}.svg-tip.left::after{left:10%}.svg-tip.right::after{left:90%}.svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.svg-tip.comparison .title{display:block;padding:8px;margin:0;font-weight:var(--base-text-weight-semibold, 600);line-height:1;pointer-events:none}.svg-tip.comparison ul{padding:4px 8px 8px 8px;margin:0;white-space:nowrap;list-style:none}.svg-tip.comparison li{display:inline-block;padding-top:16px}.svg-tip.comparison .metric-0,.svg-tip.comparison .metric-1{position:relative}.svg-tip.comparison .metric-0::before,.svg-tip.comparison .metric-1::before{position:absolute;top:0;right:0;left:0;height:4px;content:"";border:1px solid var(--color-border-default);border-radius:6px}.svg-tip.comparison .metric-0::before{background-color:var(--color-success-emphasis)}.svg-tip.comparison .metric-1::before{background-color:var(--color-accent-emphasis)}.svg-tip-one-line{white-space:nowrap}.activity-overview-axis,.activity-overview-point{stroke:var(--color-calendar-graph-day-L4-bg)}.halloween-activity-overview .activity-overview-axis,.halloween-activity-overview .activity-overview-point{stroke:var(--color-calendar-halloween-graph-day-L4-bg)}.winter-activity-overview .activity-overview-axis,.winter-activity-overview .activity-overview-point{stroke:var(--color-calendar-winter-graph-day-L4-bg)}.activity-overview-label{fill:var(--color-fg-muted)}.activity-overview-percentage{font-size:12px;fill:var(--color-fg-muted)}.team-breadcrumb .team-breadcrumb-item{display:inline-block}.team-breadcrumb .team-breadcrumb-item::after{padding-right:.5em;padding-left:.5em;color:var(--color-neutral-muted);content:"/"}.team-breadcrumb .team-breadcrumb-item-selected::after{content:none}.team-discussions-container{min-height:100vh}@media(min-width: 768px){.team-left-column{max-width:350px}}.team-left-column .team-avatar{width:80px;height:80px}@media(min-width: 768px){.team-left-column .team-avatar{width:140px;height:140px}}.team-discussions{max-width:768px}.team-discussions .previewable-comment-form .comment{border:0}.team-discussions .previewable-comment-form .toolbar-commenting.toolbar-commenting.toolbar-commenting{background:transparent}.team-discussions .previewable-comment-form .tabnav-tab.selected{background-color:var(--color-canvas-default)}.hooks-listing .boxed-group-action.select-menu{z-index:auto}.hooks-listing .boxed-group-inner{padding:0 8px;margin-bottom:8px}.hook-item a:hover{text-decoration:none}.hook-item .item-status{float:left;width:16px;margin-right:8px;text-align:center}.hook-item .description{color:var(--color-fg-muted)}.hook-item .description .css-truncate-target{max-width:160px}.hook-item .icon-for-success,.hook-item .icon-for-failure,.hook-item .icon-for-pending,.hook-item .icon-for-inactive{display:none}.hook-item.success .icon-for-success{display:inline-block;color:var(--color-success-fg)}.hook-item.failure .icon-for-failure{display:inline-block;color:var(--color-danger-fg)}.hook-item.pending .icon-for-pending{display:inline-block;color:var(--color-fg-muted)}.hook-item.inactive .icon-for-inactive{display:inline-block;color:var(--color-fg-muted)}.hook-item .icon-for-enabled,.hook-item .icon-for-disabled{display:none}.hook-item.enabled .icon-for-enabled{display:inline-block;color:var(--color-success-fg)}.hook-item.disabled .icon-for-disabled{display:inline-block;color:var(--color-fg-muted)}.hook-item .hook-error-message{margin-left:24px;color:var(--color-danger-fg)}.hook-url.css-truncate-target{max-width:360px}.hooks-oap-warning{margin-top:0}.hooks-oap-warning ul{margin:8px 0}.hooks-oap-warning ul li{margin-left:16px}.item-name{float:left;font-weight:var(--base-text-weight-semibold, 600)}.hovercard-icon{width:16px}.integration-meta-head{font-size:16px;color:var(--color-fg-muted)}.integrations-select-repos{max-height:138px;overflow-y:scroll;border-radius:6px}.integrations-select-repos .mini-repo-list-item{padding:8px 64px 8px 32px}.integrations-select-repos .mini-repo-list-item:hover .repo,.integrations-select-repos .mini-repo-list-item:hover .owner{text-decoration:none}.integrations-select-repos .mini-repo-list-item .css-truncate-target{max-width:345px}.integrations-select-repos::-webkit-scrollbar{width:10px}.integrations-select-repos::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.5);border:solid var(--color-canvas-default) 2px;border-radius:6px;box-shadow:0 0 1px rgba(255,255,255,.5)}.integrations-select-repos::-webkit-scrollbar-track-piece{background:transparent}.integrations-repository-picker{width:440px}.target-avatar{position:relative;top:-2px}.select-permission-modal{width:340px}.issue-list-item+.issue-list-item{border-top:solid 1px var(--color-border-muted)}.issue-list-item{overflow-wrap:anywhere}.pinned-issue-item .pinned-issue-handle{cursor:grab}.pinned-issue-item.is-dragging,.pinned-issue-item.is-dragging .pinned-issue-handle{cursor:grabbing}.pinned-issue-item.is-dragging{background-color:var(--color-accent-subtle)}.pinned-issue-item.sortable-ghost{background-color:var(--color-accent-subtle);opacity:0}.issues-reset-query-wrapper{margin-bottom:16px}.label-link:hover{text-decoration:none}.issues-reset-query{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted)}.issues-reset-query:hover{color:var(--color-accent-fg);text-decoration:none}.issues-reset-query:hover .issues-reset-query-icon{background-color:var(--color-accent-emphasis)}.issues-reset-query-icon{width:18px;height:18px;padding:1px;margin-right:4px;color:var(--color-fg-on-emphasis);text-align:center;background-color:var(--color-neutral-emphasis);border-radius:6px}.table-list-milestones .stats{gap:0 15px}.table-list-milestones .table-list-cell{padding:16px 16px}.table-list-milestones .stat{display:inline-block;font-size:14px;font-weight:var(--base-text-weight-semibold, 600);line-height:1.2;color:var(--color-fg-muted);white-space:nowrap}.table-list-milestones .stat a{color:inherit}.table-list-milestones .stat-label{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.milestone-title{width:500px}.milestone-title-link{margin-top:0;margin-bottom:4px;font-size:24px;font-weight:var(--base-text-weight-normal, 400);line-height:1.2}.milestone-title-link a{color:var(--color-fg-default, #333)}.milestone-title-link a:hover{color:var(--color-accent-fg)}.milestone-progress{width:auto;max-width:420px}.milestone-progress .progress-bar{margin-top:8px;margin-bottom:12px}.milestone-meta{font-size:14px}.milestone-meta-item{display:inline-block;margin-right:8px}.milestone-meta-item .octicon{width:16px;text-align:center}.milestone-description-html{display:none}.milestone-description{margin-top:4px}.milestone-description .expand-more{color:var(--color-accent-fg);cursor:pointer}.milestone-description .expand-more:hover{text-decoration:underline}.milestone-description.open .milestone-description-plaintext{display:none}.milestone-description.open .milestone-description-html{display:block}.milestones-flexbox-gap{gap:10px}.issue-reorder-warning{z-index:110}.task-progress{color:var(--color-fg-muted);text-decoration:none;vertical-align:top}.task-progress .octicon{margin-right:4px;color:var(--color-fg-muted, #999);vertical-align:bottom}.task-progress .progress-bar{display:inline-block;width:80px;height:5px;vertical-align:2px;background-color:var(--color-neutral-muted)}.task-progress .progress-bar .progress{background-color:var(--color-border-default)}.task-progress-counts{display:inline-block;margin-right:4px;margin-left:-2px;font-size:12px}a.task-progress:hover{color:var(--color-accent-fg)}a.task-progress:hover .octicon{color:inherit}a.task-progress:hover .progress-bar .progress{background-color:var(--color-accent-emphasis)}.issue-meta-section .octicon{color:var(--color-fg-muted, #ccc);vertical-align:bottom}.issue-milestone{max-width:240px}.issue-milestone .css-truncate-target{max-width:100px}.milestone-link .octicon{font-size:14px}.milestone-link:hover .octicon{color:inherit}.new-pr-form{margin-top:16px;margin-bottom:16px}.new-pr-form::before{display:table;content:""}.new-pr-form::after{display:table;clear:both;content:""}.new-pr-form .discussion-timeline::before{display:none}.label-select-menu .description{margin-left:16px}.label-select-menu .color{display:inline-block;width:14px;height:14px;margin-top:-1px;margin-right:2px;vertical-align:middle;border-radius:7px}.label-select-menu [aria-checked=true] .select-menu-item-icon,.label-select-menu [aria-checked=mixed] .select-menu-item-icon,.label-select-menu .selected .select-menu-item-icon{color:inherit !important}.label-select-menu [aria-checked=true] .octicon-circle-slash,.label-select-menu [aria-checked=mixed] .octicon-circle-slash,.label-select-menu .selected .octicon-circle-slash{color:var(--color-fg-muted)}.label-select-menu [aria-checked=true]:active,.label-select-menu [aria-checked=mixed]:active,.label-select-menu .selected:active{background-color:transparent !important}.label-select-menu .select-menu-item{position:relative}.label-select-menu .select-menu-item:hover,.label-select-menu .select-menu-item:focus,.label-select-menu .select-menu-item[aria-selected=true],.label-select-menu .select-menu-item.navigation-focus{color:inherit;background-color:var(--color-neutral-subtle)}.label-select-menu .select-menu-item:hover .select-menu-item-icon,.label-select-menu .select-menu-item:focus .select-menu-item-icon,.label-select-menu .select-menu-item[aria-selected=true] .select-menu-item-icon,.label-select-menu .select-menu-item.navigation-focus .select-menu-item-icon{color:transparent}.label-select-menu .select-menu-item:hover .label-options-icon,.label-select-menu .select-menu-item:focus .label-options-icon,.label-select-menu .select-menu-item[aria-selected=true] .label-options-icon,.label-select-menu .select-menu-item.navigation-focus .label-options-icon{color:inherit}.label-select-menu>form{position:relative}.subnav .btn+.issues-search{padding-right:8px;border-right:1px solid var(--color-border-muted)}.reaction-sort-item{float:left;width:39px;padding:4px;margin-top:4px;text-align:center;pointer-events:all;border:solid 1px transparent;border-radius:6px;opacity:.7}.reaction-sort-item:focus,.reaction-sort-item:hover{text-decoration:none;background-color:var(--color-accent-emphasis);opacity:1}.reaction-sort-item[aria-checked=true]{background-color:var(--color-accent-subtle);border-color:var(--color-accent-emphasis);opacity:1}.issue-keyword{border-bottom:1px dotted var(--color-border-default)}.issue-keyword:hover{border-bottom:0}.new-label-color-dimensions{width:24px;height:24px}.select-menu-item[aria-selected=true]>.octicon.label-options-icon,.select-menu-item.navigation-focus>.octicon.label-options-icon{color:var(--color-fg-default)}.new-label-color-input:invalid{color:var(--color-danger-fg)}.issue-form-textarea{height:100px !important;min-height:100px !important}.issue-forms-wysiwyg-container .comment-form-head{background:var(--color-canvas-subtle) !important}.issue-forms-wysiwyg-container .comment-body{border-bottom:0 !important}.issue-form-body>:first-child{margin-top:0 !important}.issue-create-branch-menu-action{color:var(--color-fg-default)}.issue-create-branch-menu-action:hover:not(:disabled){color:var(--color-fg-default);background-color:var(--color-canvas-subtle)}.issue-create-branch-menu-action:focus:not(:disabled){color:var(--color-fg-default);background-color:var(--color-neutral-subtle)}react-app{display:flex !important}react-app>div{width:100%}react-app>div>div{height:100%}.repository-lang-stats{position:relative}.repository-lang-stats ol.repository-lang-stats-numbers li{display:table-cell;width:1%;padding:8px 4px;text-align:center;white-space:nowrap;border-bottom:0}.repository-lang-stats ol.repository-lang-stats-numbers li span.percent{float:none}.repository-lang-stats ol.repository-lang-stats-numbers li>a,.repository-lang-stats ol.repository-lang-stats-numbers li>span{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted);text-decoration:none}.repository-lang-stats ol.repository-lang-stats-numbers li .lang{color:var(--color-fg-default)}.repository-lang-stats ol.repository-lang-stats-numbers li .language-color{display:inline-block;width:10px;height:10px;border-radius:50%}.repository-lang-stats ol.repository-lang-stats-numbers li a:hover{background:transparent}.repository-lang-stats-graph{width:100%;overflow:hidden;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid var(--color-border-default);border-top:0;border-bottom-right-radius:6px;border-bottom-left-radius:6px}.repository-lang-stats-graph .language-color{line-height:8px;text-indent:-9999px}.repository-lang-stats-graph .language-color:first-child{border-bottom-left-radius:6px}.repository-lang-stats-graph .language-color:last-child{border-bottom-right-radius:6px}.repository-lang-stats-graph .language-color:not(:first-child){border-left:1px solid var(--color-canvas-default)}.facebox-loading,.octocat-spinner{min-height:64px;background-image:url("/images/spinners/octocat-spinner-64.gif");background-repeat:no-repeat;background-position:center center}.octocat-spinner-32{min-height:32px;background-image:url("/images/spinners/octocat-spinner-32.gif");background-repeat:no-repeat;background-position:center center}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (-moz-min-device-pixel-ratio: 2),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){.facebox-loading,.octocat-spinner{background-image:url("/images/spinners/octocat-spinner-128.gif");background-size:64px 64px}.octocat-spinner-32{background-image:url("/images/spinners/octocat-spinner-64.gif");background-size:32px 32px}}.map-container .activity{top:120px;left:340px;z-index:99999}.map-container .is-graph-loading .activity{display:block}.map{height:350px}.map-background{pointer-events:all;fill:#0366d6}.map-background-zoom{cursor:grab}.map-land{fill:none;stroke:#256aae;stroke-width:2;shape-rendering:crispedges}.map-country{fill:#d7c7ad;shape-rendering:crispedges;cursor:pointer}.map-country.hk{stroke:#a5967e}.map-country:hover{fill:#c8b28e}.map-country.active{fill:#f6e5ca}.map-borders{fill:none;stroke:#a5967e;shape-rendering:crispedges}.map-graticule{pointer-events:none;fill:none;stroke:#fff;stroke-opacity:.2;shape-rendering:crispedges}.map-graticule :nth-child(2n){stroke-dasharray:2,2}.map-legend .map-legend-circle{fill-opacity:0;stroke:#fff;stroke-width:1.5}.map-legend .map-legend-text{font-size:12px;fill:#fff;text-anchor:end}.map-legend .map-legend-link{stroke:#fff;stroke-width:1.5}.map-point{pointer-events:none;fill:#f66a0a}.map-point:hover{fill:#e36209}.map-country-info{top:8px;right:8px;pointer-events:none;opacity:0}.MarketplaceJumbotron{background-color:var(--color-neutral-emphasis);background-image:url("/images/modules/marketplace/bg-hero.svg");background-repeat:repeat-y;background-position:center top;background-size:150% auto}@media(min-width: 768px){.MarketplaceJumbotron{background-repeat:no-repeat;background-size:cover}}.CircleBadge--feature{position:relative;top:0;transition:top .15s ease-in,box-shadow .12s ease-in}.MarketplaceFeature{min-width:250px}.MarketplaceFeature-text{opacity:.7;transition:opacity .12s ease-in}.MarketplaceFeature-link:hover .CircleBadge--feature{top:-3px;box-shadow:0 3px 8px 0 rgba(0,0,0,.2)}.MarketplaceFeature-link:hover .MarketplaceFeature-text{opacity:1}.MarketplaceFeature-link:active .CircleBadge--feature{top:0;box-shadow:0}.MarketplaceSideNav{-webkit-overflow-scrolling:touch;background-color:var(--color-canvas-subtle)}@media(min-width: 768px){.MarketplaceSideNav{background-color:var(--color-canvas-default);border-right:1px solid var(--color-border-default)}}.ScreenshotCarousel{border:1px solid var(--color-border-default);border-radius:6px}.ScreenshotCarousel-screenshot{padding:16px}.ScreenshotCarousel-nav{display:flex;overflow-x:auto;align-items:top;box-shadow:inset 0 1px 0 var(--color-border-default)}.ScreenshotCarousel-navitem{width:20%;min-width:120px;padding:16px;cursor:pointer;border-right:1px solid var(--color-border-default)}.ScreenshotCarousel-navitem:last-child{border-right:0}.ScreenshotCarousel-navitem.selected{background-color:var(--color-canvas-subtle);box-shadow:inset 0 0 4px rgba(36,41,46,.15)}.marketplace-listing-screenshot-container{width:175px;min-height:175px;background-repeat:no-repeat;background-position:center center;background-size:cover}.marketplace-listing-screenshot-zoom{display:none;cursor:move}.marketplace-listing-details-sidebar{order:2}@media(min-width: 768px){.marketplace-listing-details-sidebar{order:1}}.marketplace-listing-details-description{order:1}@media(min-width: 768px){.marketplace-listing-details-description{order:2}}.marketplace-listing-screenshot-link{height:100px;cursor:move}.marketplace-listing-screenshot-link:hover .marketplace-listing-screenshot-zoom,.marketplace-listing-screenshot-link:focus .marketplace-listing-screenshot-zoom{top:0;left:0;display:block;width:100%;height:100%;padding-top:24px;background-color:rgba(255,255,255,.75)}.marketplace-integratable-logo{width:40px;height:40px}.marketplace-listing-save-notice,.marketplace-listing-save-error{display:none;opacity:0;transition:opacity .15s linear}.marketplace-listing-save-notice.visible,.marketplace-listing-save-error.visible{display:inline-block;opacity:1}.marketplace-listing-screenshot-delete-form{position:absolute;bottom:-24px;width:100%;text-align:center}.marketplace-plan-dollar-field-container .price-note{display:none}.marketplace-plan-dollar-field-container.is-errored .price-note{display:block}.marketplace-plan-dollar-field-container.is-errored .form-control{border-color:var(--color-danger-emphasis)}.marketplace-plan-emphasis{color:var(--color-fg-default)}.selected .marketplace-plan-emphasis{color:var(--color-fg-on-emphasis)}.marketplace-plan-unit-name-preview::before{content:"per "}.marketplace-plan-per-time{clear:right}.marketplace-billing-modal{width:540px;max-height:90vh;margin-top:5vh}.marketplace-listing-markdown,.marketplace-url-link{word-wrap:break-word;white-space:pre-wrap}.marketplace-listing-markdown{line-height:1.4}.marketplace-product-callout{border-color:var(--color-border-default) !important}.marketplace-product-callout::before,.marketplace-product-callout::after{display:none}.marketplace-product-callout .branch-action-item-icon{color:var(--color-fg-muted);background-color:var(--color-canvas-subtle)}.filter-item.selected .Label--secondary{color:var(--color-fg-on-emphasis);border-color:var(--color-fg-on-emphasis)}.MarketplaceEdit-body{min-height:570px}.MarketplaceEdit-body .pricing-model-selector{width:calc(100% - 12px);max-width:100% !important}.MarketplaceEdit-body .menu{border-right:0;border-left:0;border-radius:0}.MarketplaceEdit-body .menu-item{padding:12px 16px;background:var(--color-canvas-subtle)}.MarketplaceEdit-body .menu-item.selected{background:var(--color-canvas-default)}.MarketplaceEdit-body .menu-item:hover{background:var(--color-canvas-subtle)}.MarketplaceEdit-body .menu-item.selected::before{position:absolute;top:0;bottom:0;left:0;width:3px;content:"";background-color:var(--color-severe-emphasis)}.MarketplaceEdit-body .menu-item:first-child::before{border-top-left-radius:0}.MarketplaceEdit-body .CircleIcon{display:inline-block;width:32px;height:32px;font-weight:var(--base-text-weight-semibold, 600);line-height:32px;color:var(--color-fg-muted);text-align:center;background:#e6ebf1;border-radius:50%}.MarketplaceEdit-body .CircleIcon .octicon{display:inline-block}.MarketplaceInsights-graph .insights-month .tick:nth-child(2n){visibility:hidden}.BarChart{border-radius:6px}.BarChart-bar{height:10px;border-right:1px solid var(--color-canvas-default)}.BarChart-bar--green{background-color:var(--color-success-emphasis)}.BarChart-bar--orange{background-color:var(--color-severe-emphasis)}.BarChart-bar--yellow{background-color:var(--color-attention-emphasis)}.CircleBadge--tiny{width:32px;height:32px}.CircleBadge--github{position:relative}.CircleBadge--github.CircleBadge--large::after{right:5px;bottom:5px}.CircleBadge--github.CircleBadge--small::after{right:-5px;bottom:-5px}.CircleBadge--github::after{position:absolute;right:0;bottom:0;display:block;width:22px;height:22px;padding:4px;line-height:0;content:"";background:var(--color-canvas-default) url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyMnB4IiBoZWlnaHQ9IjIycHgiIHZpZXdCb3g9IjAgMCAyMiAyMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT5TaGFwZSBDb3B5PC90aXRsZT4gICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+ICAgIDxkZWZzPjwvZGVmcz4gICAgPGcgaWQ9IktpdGNoZW4tc2luayIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+ICAgICAgICA8ZyBpZD0iT2N0aWNvbnMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zNzAuMDAwMDAwLCAtMTU4NC4wMDAwMDApIiBmaWxsPSIjMUIxRjIzIj4gICAgICAgICAgICA8cGF0aCBkPSJNMzgxLDE1ODQgQzM3NC45MjI1LDE1ODQgMzcwLDE1ODguOTIyNSAzNzAsMTU5NSBDMzcwLDE1OTkuODY3NSAzNzMuMTQ4NzUsMTYwMy45Nzg3NSAzNzcuNTIxMjUsMTYwNS40MzYyNSBDMzc4LjA3MTI1LDE2MDUuNTMyNSAzNzguMjc3NSwxNjA1LjIwMjUgMzc4LjI3NzUsMTYwNC45MTM3NSBDMzc4LjI3NzUsMTYwNC42NTI1IDM3OC4yNjM3NSwxNjAzLjc4NjI1IDM3OC4yNjM3NSwxNjAyLjg2NSBDMzc1LjUsMTYwMy4zNzM3NSAzNzQuNzg1LDE2MDIuMTkxMjUgMzc0LjU2NSwxNjAxLjU3MjUgQzM3NC40NDEyNSwxNjAxLjI1NjI1IDM3My45MDUsMTYwMC4yOCAzNzMuNDM3NSwxNjAwLjAxODc1IEMzNzMuMDUyNSwxNTk5LjgxMjUgMzcyLjUwMjUsMTU5OS4zMDM3NSAzNzMuNDIzNzUsMTU5OS4yOSBDMzc0LjI5LDE1OTkuMjc2MjUgMzc0LjkwODc1LDE2MDAuMDg3NSAzNzUuMTE1LDE2MDAuNDE3NSBDMzc2LjEwNSwxNjAyLjA4MTI1IDM3Ny42ODYyNSwxNjAxLjYxMzc1IDM3OC4zMTg3NSwxNjAxLjMyNSBDMzc4LjQxNSwxNjAwLjYxIDM3OC43MDM3NSwxNjAwLjEyODc1IDM3OS4wMiwxNTk5Ljg1Mzc1IEMzNzYuNTcyNSwxNTk5LjU3ODc1IDM3NC4wMTUsMTU5OC42MyAzNzQuMDE1LDE1OTQuNDIyNSBDMzc0LjAxNSwxNTkzLjIyNjI1IDM3NC40NDEyNSwxNTkyLjIzNjI1IDM3NS4xNDI1LDE1OTEuNDY2MjUgQzM3NS4wMzI1LDE1OTEuMTkxMjUgMzc0LjY0NzUsMTU5MC4wNjM3NSAzNzUuMjUyNSwxNTg4LjU1MTI1IEMzNzUuMjUyNSwxNTg4LjU1MTI1IDM3Ni4xNzM3NSwxNTg4LjI2MjUgMzc4LjI3NzUsMTU4OS42Nzg3NSBDMzc5LjE1NzUsMTU4OS40MzEyNSAzODAuMDkyNSwxNTg5LjMwNzUgMzgxLjAyNzUsMTU4OS4zMDc1IEMzODEuOTYyNSwxNTg5LjMwNzUgMzgyLjg5NzUsMTU4OS40MzEyNSAzODMuNzc3NSwxNTg5LjY3ODc1IEMzODUuODgxMjUsMTU4OC4yNDg3NSAzODYuODAyNSwxNTg4LjU1MTI1IDM4Ni44MDI1LDE1ODguNTUxMjUgQzM4Ny40MDc1LDE1OTAuMDYzNzUgMzg3LjAyMjUsMTU5MS4xOTEyNSAzODYuOTEyNSwxNTkxLjQ2NjI1IEMzODcuNjEzNzUsMTU5Mi4yMzYyNSAzODguMDQsMTU5My4yMTI1IDM4OC4wNCwxNTk0LjQyMjUgQzM4OC4wNCwxNTk4LjY0Mzc1IDM4NS40Njg3NSwxNTk5LjU3ODc1IDM4My4wMjEyNSwxNTk5Ljg1Mzc1IEMzODMuNDIsMTYwMC4xOTc1IDM4My43NjM3NSwxNjAwLjg1NzUgMzgzLjc2Mzc1LDE2MDEuODg4NzUgQzM4My43NjM3NSwxNjAzLjM2IDM4My43NSwxNjA0LjU0MjUgMzgzLjc1LDE2MDQuOTEzNzUgQzM4My43NSwxNjA1LjIwMjUgMzgzLjk1NjI1LDE2MDUuNTQ2MjUgMzg0LjUwNjI1LDE2MDUuNDM2MjUgQzM4OC44NTEyNSwxNjAzLjk3ODc1IDM5MiwxNTk5Ljg1Mzc1IDM5MiwxNTk1IEMzOTIsMTU4OC45MjI1IDM4Ny4wNzc1LDE1ODQgMzgxLDE1ODQgTDM4MSwxNTg0IFoiIGlkPSJTaGFwZS1Db3B5Ij48L3BhdGg+ICAgICAgICA8L2c+ICAgIDwvZz48L3N2Zz4=") center no-repeat;border-radius:100px}body.page-responsive .flash-full .container{width:100%;max-width:980px}.ClipboardButton{position:relative}.ClipboardButton.ClipboardButton--success{border-color:var(--color-success-emphasis);box-shadow:0 0 0 .2em rgba(52,208,88,.4)}.ClipboardButton.ClipboardButton--success:focus{box-shadow:0 0 0 .2em rgba(52,208,88,.4)}@media(min-width: 768px){.MarketplacePlan--sticky{position:sticky;top:24px;z-index:999}}@media(max-width: 544px){.Box--full{right:0;bottom:0;left:0;width:100%;max-width:none;max-height:none;margin:0;border-radius:0;transform:none}}.MarketplaceBackground-wrapper{position:relative}.MarketplaceBackground-recommendations{position:relative;top:-90px;width:313px;margin-top:-150px;margin-bottom:-120px;overflow:hidden}.MarketplaceBackground-recommendations img{position:relative;top:0;right:225px;width:549px}@media(min-width: 544px){.MarketplaceBackground-recommendations{position:relative;width:463px;margin-top:-180px;margin-bottom:70px;overflow:hidden}.MarketplaceBackground-recommendations img{right:305px;width:730px}}@media(min-width: 768px){.MarketplaceBackground-recommendations{position:absolute;top:-228px;right:-69px;width:633px}.MarketplaceBackground-recommendations img{right:195px;width:750px}}@media(min-width: 1012px){.MarketplaceBackground-recommendations{top:-268px;right:0;width:1040px}.MarketplaceBackground-recommendations img{right:-115px;width:900px}}@media(min-width: 1280px){.MarketplaceBackground-recommendations{top:-325px;right:105px;width:1040px}.MarketplaceBackground-recommendations img{right:0;width:1040px}}.MarketplaceBackground-buffer{padding-top:40px;margin-top:-146px;background:var(--color-canvas-subtle)}@media(min-width: 544px){.MarketplaceBackground-buffer{padding-top:120px;margin-top:-233px}}@media(min-width: 768px){.MarketplaceBackground-buffer{margin-top:-109px}}@media(min-width: 1012px){.MarketplaceBackground-buffer{margin-top:-89px}}.MarketplaceHeader{overflow:hidden}.Link--muted.filter-item.selected{color:var(--color-fg-on-emphasis) !important}.MarketplaceBody{position:relative}@media(min-width: 544px){.MarketplaceBody{top:-72px;z-index:2}}.MarketplaceDetails .octicon{transition:transform 200ms linear;transform:scaleY(1)}.MarketplaceDetails[open] .octicon{transform:scaleY(-1)}.MarketplaceAnnouncement{color:#fff;background:linear-gradient(90deg, #257bf9, #2426ca)}.MarketplaceAnnouncement-icon{width:80px;opacity:.9}.MarketplaceAnnouncement-description{opacity:.7}.member-list-item .table-list-cell-checkbox{width:30px}.member-list-item.adminable .member-info{padding-left:4px}.member-list-item .member-avatar-cell{width:64px}.triage-mode .none-selected{display:none}.merge-branch-heading{margin:0;line-height:1;color:var(--color-fg-default)}.merge-branch-description{margin-right:160px;margin-bottom:-4px;line-height:1.6em;color:var(--color-fg-muted)}.alt-merge-options{display:inline-block;margin-bottom:0;margin-left:4px;vertical-align:middle}.merged .merge-branch-description .commit-ref .css-truncate-target{max-width:180px}.merge-branch-prh-output{margin-top:8px}.merge-branch-form,.queue-branch-form{display:none;padding-left:60px}.merge-branch-manually{display:none;padding-top:16px;margin-top:16px;background-color:transparent;border-top:1px solid var(--color-border-default)}.merge-branch-manually p{margin-bottom:0}.merge-branch-manually h3{margin-bottom:8px}.merge-branch-manually .intro{padding-bottom:8px;margin-top:0}.merge-branch-manually .step{margin:16px 0 4px}.open .merge-branch-manually{display:block}.select-menu-merge-method{width:310px}.select-menu-merge-method .select-menu-item:hover,.select-menu-merge-method .select-menu-item:hover .octicon,.select-menu-merge-method .select-menu-item:hover .select-menu-item-text{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.select-menu-merge-method .select-menu-item:hover .description{color:var(--color-fg-on-emphasis)}.merge-pr.is-squashing .commit-author-fields{display:none}.merge-pr.is-squashing .commit-author-fields.current-user-is-author{display:block}.merge-pr.is-rebasing .commit-form-fields{display:none;transition:opacity .15s linear 0s,margin-top .25s ease .1s}.merge-pr .btn-group-merge,.merge-pr .btn-group-merge-group,.merge-pr .merge-queue-info,.merge-pr .merge-queue-group-time-to-merge,.merge-pr.is-squashing .btn-group-squash,.merge-pr.is-rebasing .btn-group-rebase,.merge-pr.is-updating-via-merge .btn-group-update-merge,.merge-pr.is-updating-via-rebase .btn-group-update-rebase,.merge-pr.is-merging-solo .btn-group-merge-solo,.merge-pr.is-merging-solo .merge-queue-solo-time-to-merge,.merge-pr.is-merging-jump .btn-group-merge-jump,.merge-pr.is-merging-group .btn-group-merge-group,.merge-pr.is-merging .btn-group-merge-directly,.merge-pr.is-merging .merging-directly-warning{display:inline-block}.merge-pr .merging-body,.merge-pr .rebasing-body,.merge-pr .squashing-body,.merge-pr .merging-body-merge-warning,.merge-pr .merging-directly-warning,.merge-pr .squash-commit-author-email-info,.merge-pr .merge-commit-author-email-info,.merge-pr.is-merging .merge-queue-info,.merge-pr.is-merging-group .merge-queue-solo-time-to-merge,.merge-pr.is-merging-solo .merge-queue-group-time-to-merge,.merge-pr.is-merging .branch-action-state-error-if-merging .merging-body{display:none}.merge-pr.is-merging .merging-body,.merge-pr.is-merging .merge-commit-author-email-info,.merge-pr.is-merging-solo .merging-body,.merge-pr.is-merging-jump .merging-body,.merge-pr.is-merging-group .merging-body,.merge-pr.is-rebasing .rebasing-body,.merge-pr.is-squashing .squashing-body,.merge-pr.is-squashing .squash-commit-author-email-info,.merge-pr.is-merging .branch-action-state-error-if-merging .merging-body-merge-warning{display:block}.merge-pr .btn-group-squash,.merge-pr .btn-group-merge-solo,.merge-pr .btn-group-merge-jump,.merge-pr .btn-group-merge-directly,.merge-pr .btn-group-rebase,.merge-pr .btn-group-update-merge,.merge-pr .btn-group-update-rebase,.merge-pr.is-squashing .btn-group-merge,.merge-pr.is-rebasing .btn-group-merge,.merge-pr.is-merging-solo .btn-group-merge-group,.merge-pr.is-merging-jump .btn-group-merge-group,.merge-pr.is-merging .btn-group-merge-group{display:none;margin-left:0}.commit-form-fields{transition:opacity .15s linear .1s,margin-top .25s ease 0s}.unavailable-merge-method{display:block;margin-top:4px;color:var(--color-severe-fg)}[aria-selected=true].disabled .unavailable-merge-method,.navigation-focus.disabled .unavailable-merge-method{color:var(--color-fg-on-emphasis)}.try-merge-queue-popover{left:265px}@media(min-width: 1012px){.try-merge-queue-popover{left:272px}}.try-merge-queue-beta-flag{vertical-align:middle}.network .network-tree{vertical-align:middle}.network .gravatar{margin-right:4px;vertical-align:middle;border-radius:6px}.network .octicon{display:inline-block;width:16px;margin-left:2px;text-align:center;vertical-align:middle}.internal-repo-avatar{right:4px;bottom:-4px;border:solid 2px var(--color-canvas-default)}.owner-reponame dl.form-group{margin-top:4px;margin-bottom:0}.owner-reponame .slash{float:left;padding-top:32px;margin:0 8px;font-size:20px;color:var(--color-fg-muted)}.owner-reponame .form-group.errored details details-menu label{color:inherit}.owner-reponame .form-group.errored details .hack-repos-owner-summary{border-color:var(--color-danger-emphasis)}.reponame-suggestion{color:var(--color-success-fg);cursor:pointer}.upgrade-upsell{padding-left:32px}.cc-upgrade{padding-left:16px}.news .release{margin-top:0;margin-bottom:0}.news blockquote{color:var(--color-fg-muted)}.news .alert{position:relative;padding:0 0 1em 45px;overflow:hidden;border-top:1px solid #eff3f6}.news .alert .commits{padding-left:40px}.news .alert .css-truncate.css-truncate-target,.news .alert .css-truncate .css-truncate-target{max-width:180px}.news .alert p{margin:0}.news .alert .markdown-body blockquote{padding:0 0 0 40px;border-width:0}.news .alert .octicon{color:var(--color-fg-muted)}.news .alert .dashboard-event-icon{position:absolute;top:18px;left:22px;transform:translateX(-50%)}.news .alert .body{padding:1em 0 0;overflow:hidden;font-size:14px;border-bottom:0}.news .alert .time{font-size:12px;color:var(--color-fg-muted)}.news .alert .title{padding:0;font-weight:var(--base-text-weight-semibold, 600)}.news .alert .title .subtle{color:var(--color-fg-muted)}.news .alert .gravatar{float:left;margin-right:.6em;line-height:0;background-color:var(--color-canvas-default);border-radius:6px}.news .alert .simple .title{display:inline-block;font-size:14px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.news .alert .simple .time{display:inline-block}.news .alert:first-child{border-top:0}.news .alert:first-child .body{padding-top:0}.news .alert:first-child .dashboard-event-icon{top:0}.news .github-welcome .done{color:var(--color-fg-muted);text-decoration:line-through}.news .commits li{margin-top:.15em;list-style-type:none}.news .commits li.more{padding-top:2px;font-size:12px}.news .commits li .committer{display:none;padding-left:.5em}.news .commits li img{margin:0 1px 0 0;vertical-align:middle;background-color:var(--color-canvas-default);border-radius:6px}.news .commits li img.emoji{padding:0;margin:0;border:0}.news .commits li .message{display:inline-block;max-width:390px;margin-top:2px;overflow:hidden;font-size:14px;line-height:1.3;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.news div.message,.news li blockquote{display:inline;font-size:14px;color:var(--color-fg-muted)}.oauth-permissions-details{position:relative;padding:16px;margin:0;list-style:none;border-bottom:1px solid var(--color-border-muted)}.oauth-permissions-details:first-child{border-radius:6px 6px 0 0}.oauth-permissions-details:last-child{border:0;border-radius:0 0 6px 6px}.oauth-permissions-details.oauth-public-data-only{border-radius:6px}.oauth-permissions-details .markdown-body{font-size:12px}.oauth-permissions-details .content{display:none;margin-left:45px}.oauth-permissions-details .content .form-checkbox{margin-left:0}.oauth-permissions-details .content .form-checkbox:last-child{margin-bottom:0}.oauth-permissions-details .octicon{float:left;color:var(--color-fg-muted);text-align:center}.oauth-permissions-details .permission-help{font-size:12px}.oauth-permissions-details .permission-help ul{padding-left:16px;margin:1em 0}.oauth-permissions-details .permission-summary{margin-left:45px}.oauth-permissions-details .permission-summary .access-details{position:relative;color:var(--color-fg-muted)}.oauth-permissions-details .permission-summary em.highlight{position:relative;padding:2px 4px;margin-right:-2px;margin-left:-4px;font-style:normal;color:var(--color-fg-default);background:var(--color-search-keyword-hl);border-radius:6px}.oauth-permissions-details .permission-title{display:block;color:var(--color-fg-default)}.oauth-permissions-details a.btn-sm{float:right;margin-top:4px}.oauth-permissions-details.open a.btn-sm{background-color:#dcdcdc;background-image:none;border-color:#b5b5b5;box-shadow:inset 0 2px 4px rgba(0,0,0,.15)}.oauth-permissions-details.open .content{display:block}.oauth-permissions-details.default:not(.delete) .no-access,.oauth-permissions-details.default:not(.delete) .default-access,.oauth-permissions-details.none .no-access,.oauth-permissions-details.none .default-access{display:inline}.oauth-permissions-details.default:not(.delete) .access-details,.oauth-permissions-details.default:not(.delete) .permission-title,.oauth-permissions-details.none .access-details,.oauth-permissions-details.none .permission-title{color:var(--color-fg-muted)}.oauth-permissions-details.default:not(.delete) .octicon,.oauth-permissions-details.none .octicon{color:var(--color-fg-muted)}.oauth-permissions-details.default .default-access{display:inline}.oauth-permissions-details.full .full-access{display:inline}.oauth-details-toggle{position:absolute;top:0;right:0;padding:16px 16px}.oauth-details-toggle .octicon-chevron-up{display:none}.open .oauth-details-toggle .octicon-chevron-down{display:none}.open .oauth-details-toggle .octicon-chevron-up{display:block}.oauth-user-permissions .full-access,.oauth-user-permissions .limited-access,.oauth-user-permissions .limited-access-emails-followers,.oauth-user-permissions .limited-access-emails-profile,.oauth-user-permissions .limited-access-followers-profile,.oauth-user-permissions .limited-access-profile,.oauth-user-permissions .limited-access-followers,.oauth-user-permissions .limited-access-emails,.oauth-user-permissions .no-access{display:none}.oauth-user-permissions.limited.limited-email .limited-access-emails{display:inline}.oauth-user-permissions.limited.limited-email.limited-profile .limited-access-emails,.oauth-user-permissions.limited.limited-email.limited-profile .limited-access-profile{display:none}.oauth-user-permissions.limited.limited-email.limited-profile .limited-access-emails-profile{display:inline}.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-emails,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-profile,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-followers,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-emails-profile,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-emails-followers,.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access-followers-profile{display:none}.oauth-user-permissions.limited.limited-email.limited-profile.limited-follow .limited-access{display:inline}.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-emails,.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-followers{display:none}.oauth-user-permissions.limited.limited-email.limited-follow .limited-access-emails-followers{display:inline}.oauth-user-permissions.limited.limited-follow .limited-access-followers{display:inline}.oauth-user-permissions.limited.limited-follow.limited-profile .limited-access-followers,.oauth-user-permissions.limited.limited-follow.limited-profile .limited-access-profile{display:none}.oauth-user-permissions.limited.limited-follow.limited-profile .limited-access-followers-profile{display:inline}.oauth-user-permissions.limited.limited-profile .limited-access-profile{display:inline}.oauth-repo-permissions .default-access,.oauth-repo-permissions .public-access,.oauth-repo-permissions .limited-repo-invite-access,.oauth-repo-permissions .full-access{display:none}.oauth-repo-permissions.full .full-access{display:inline}.oauth-repo-permissions.limited-repo-invite .limited-repo-invite-access{display:inline}.oauth-repo-permissions.public .public-access{display:inline}.oauth-repo-permissions.default .default-access{display:inline}.oauth-delete-repo-permissions .octicon-alert{color:var(--color-danger-fg)}.oauth-repo-status-permissions .no-access,.oauth-repo-status-permissions .full-access,.oauth-repo-deployment-permissions .no-access,.oauth-repo-deployment-permissions .full-access{display:none}.oauth-notifications-permissions .no-access,.oauth-notifications-permissions .read-access,.oauth-notifications-permissions .via-public-access,.oauth-notifications-permissions .via-full-access{display:none}.oauth-notifications-permissions.read .read-access{display:inline}.oauth-notifications-permissions.via-public .via-public-access{display:inline}.oauth-notifications-permissions.via-public .octicon{display:none}.oauth-notifications-permissions.via-full .via-full-access{display:inline}.oauth-gist-permissions .no-access,.oauth-gist-permissions .full-access{display:none}.oauth-granular-permissions .no-access,.oauth-granular-permissions .read-access,.oauth-granular-permissions .write-access,.oauth-granular-permissions .full-access{display:none}.oauth-granular-permissions.none .no-access{display:inline}.oauth-granular-permissions.read .read-access{display:inline}.oauth-granular-permissions.write .write-access{display:inline}.oauth-granular-permissions.full .full-access{display:inline}.oauth-no-description{color:var(--color-fg-muted)}.oauth-org-access-details{background:var(--color-canvas-default)}.oauth-org-access-details .oauth-org-item:hover{background:var(--color-canvas-subtle)}.oauth-org-access-details a:hover{text-decoration:none}.oauth-org-access-details .boxed-group-inner{border:0;border-radius:6px}.oauth-org-access-details .oauth-org-item{line-height:24px}.oauth-org-access-details .oauth-org-item:first-child{border-radius:6px 6px 0 0}.oauth-org-access-details .oauth-org-item .loading-indicator{display:none;margin:4px}.oauth-org-access-details .oauth-org-item.on .authorized-tools{display:block}.oauth-org-access-details .oauth-org-item.on .unauthorized-tools{display:none}.oauth-org-access-details .oauth-org-item.on strong{color:var(--color-fg-default)}.oauth-org-access-details .oauth-org-item.on .octicon-check{display:inline}.oauth-org-access-details .oauth-org-item.on .octicon-x{display:none}.oauth-org-access-details .oauth-org-item.revoked{background:var(--color-canvas-default)}.oauth-org-access-details .oauth-org-item.revoked .unauthorized-tools,.oauth-org-access-details .oauth-org-item.revoked .authorized-tools{display:none}.oauth-org-access-details .oauth-org-item.revoked .octicon-x{color:var(--color-danger-fg)}.oauth-org-access-details .oauth-org-item.loading .unauthorized-tools,.oauth-org-access-details .oauth-org-item.loading .authorized-tools{display:none}.oauth-org-access-details .oauth-org-item.loading .loading-indicator{display:block}.oauth-org-access-details .oauth-org-item .authorized-tools{display:none}.oauth-org-access-details .oauth-org-item .unauthorized-tools{display:block}.oauth-org-access-details .btn{line-height:1.5em}.oauth-org-access-details .octicon{color:var(--color-fg-muted)}.oauth-org-access-details .octicon-check{display:none;color:var(--color-success-fg)}.oauth-org-access-details .octicon-x{display:inline}.oauth-org-access-details .octicon-x.org-access-denied{color:var(--color-danger-fg)}.permission-title{margin-top:0}.boxed-group-inner .oauth-application-info{margin-bottom:8px}.oauth-application-info .application-title{font-size:32px;color:var(--color-fg-default)}.oauth-application-info .application-description{margin-top:4px;margin-bottom:0}.oauth-application-info .listgroup-item{line-height:inherit}.oauth-application-info .app-denied,.oauth-application-info .app-approved{margin-left:8px;font-size:14px;font-weight:var(--base-text-weight-normal, 400);white-space:nowrap}.oauth-application-info .app-approved,.oauth-application-info .octicon-check{color:var(--color-success-fg)}.oauth-application-info .app-denied,.oauth-application-info .octicon-x{color:var(--color-severe-fg)}.app-transfer-actions form{display:inline}.developer-app-item .developer-app-avatar-cell{width:60px}.developer-app-item .developer-app-name{font-size:14px;font-weight:var(--base-text-weight-semibold, 600);line-height:1.25;color:var(--color-fg-default)}.developer-app-item .developer-app-name:hover{color:var(--color-accent-fg);text-decoration:none}.developer-app-item .developer-app-info-cell{padding-left:0}.developer-app-item .developer-app-list-meta{margin-top:4px;margin-bottom:2px;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.org-transfer-requests{margin:8px 0 16px}.toggle-secret-field .secret-standin{display:block}.toggle-secret-field .secret-field{display:none}.toggle-secret-field.open .secret-standin{display:none}.toggle-secret-field.open .secret-field{display:block}.invitation-2fa-banner{margin-right:-24px;margin-left:-24px}.sign-up-via-invitation .bleed-flush{width:100%;padding:0 16px;margin-left:-16px;border-color:var(--color-border-default)}.sign-up-via-invitation label{font-size:14px}.orghead{padding-top:16px;padding-bottom:0;margin-bottom:16px;color:var(--color-fg-default);background-color:var(--color-page-header-bg);border-bottom:1px solid var(--color-border-default)}.orghead .orgnav{position:relative;top:1px;margin-top:8px}.org-repos .TableObject-item--primary{white-space:normal}.org-name{font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-default)}.audit-log-search .member-info{width:300px}.audit-log-search .member-info .member-avatar{float:left;margin-right:16px}.audit-log-search .member-info .member-link{display:block}.audit-log-search .member-info .member-list-avatar{margin-right:0}.audit-log-search .member-info .ghost{display:inline-block;color:var(--color-fg-muted)}.audit-log-search .blankslate{border-top-left-radius:0;border-top-right-radius:0}.audit-log-search .export-phrase{margin:4px 0}.audit-results-actions{overflow:auto}.audit-search-clear{float:left;margin-bottom:16px;border:0}.audit-search-clear .issues-reset-query{margin-bottom:0}.audit-type{width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audit-type .octicon{margin-right:4px;font-weight:var(--base-text-weight-normal, 400);vertical-align:bottom}.audit-type .repo{color:var(--color-severe-fg)}.audit-type .team{color:var(--color-success-fg)}.audit-type .user{color:var(--color-done-fg)}.audit-type .oauth_access{color:var(--color-danger-fg)}.audit-type .hook{color:#e1bf4e}.export-phrase{margin-top:4px}.export-phrase pre{padding-left:8px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;white-space:pre-wrap;border-left:1px solid var(--color-border-muted)}.two-factor-enforcement-form .loading-spinner{float:left;margin:0 0 0 -16px;vertical-align:middle}.saml-enabled-banner-container{background-color:var(--color-canvas-default)}.saml-settings-form .test-status-indicator,.oidc-settings-form .test-status-indicator{width:30px;height:30px;margin-top:-4px;border-radius:50%}.saml-settings-form .test-status-indicator .octicon,.oidc-settings-form .test-status-indicator .octicon{display:block;margin-top:8px;margin-right:auto;margin-left:auto}.saml-settings-form .form-group.errored,.oidc-settings-form .form-group.errored{margin-bottom:40px}.saml-settings-form .test-status-indicator-error,.oidc-settings-form .test-status-indicator-error{color:var(--color-fg-on-emphasis);background-color:var(--color-danger-emphasis)}.saml-settings-form .test-status-indicator-success,.oidc-settings-form .test-status-indicator-success{color:var(--color-fg-on-emphasis);background-color:var(--color-success-emphasis)}.saml-settings-form .details-container .method-field,.oidc-settings-form .details-container .method-field{display:none}.saml-settings-form .details-container .method-label,.oidc-settings-form .details-container .method-label{font-weight:var(--base-text-weight-normal, 400)}.saml-settings-form .details-container .details-target,.oidc-settings-form .details-container .details-target{cursor:pointer}.saml-settings-form .details-container.open .method-value,.saml-settings-form .details-container.open .details-target,.oidc-settings-form .details-container.open .method-value,.oidc-settings-form .details-container.open .details-target{display:none}.saml-settings-form .details-container.open .method-field,.oidc-settings-form .details-container.open .method-field{display:inline-block}.saml-settings-form .saml-enforcement-disabled,.oidc-settings-form .saml-enforcement-disabled{opacity:.5}.form-group .form-control.saml-certificate-field{width:440px;height:150px;min-height:0}.member-avatar{float:left;margin:1px}.member-fullname{color:var(--color-fg-muted)}.auto-search-group{position:relative}.auto-search-group .auto-search-input{padding-left:32px}.auto-search-group .spinner,.auto-search-group>.octicon{position:absolute;left:10px;z-index:5;width:16px;height:16px}.auto-search-group .spinner{top:9px;background-color:var(--color-canvas-default)}.auto-search-group>.octicon{top:10px;font-size:14px;color:var(--color-fg-muted);text-align:center}.org-list .list-item{position:relative;padding-top:16px;padding-bottom:16px;border-bottom:1px solid var(--color-border-muted)}.org-list .list-item::before{display:table;content:""}.org-list .list-item::after{display:table;clear:both;content:""}.permission-level-cell .select-menu-button{width:90px;text-align:left}.permission-level-cell .select-menu-button::after{position:absolute;top:10px;right:10px}.permission-level-cell .spinner{float:none;opacity:0;transition:opacity .2s ease-in-out}.permission-level-cell .is-loading .spinner{opacity:1}.select-menu-option-title{margin-top:0;margin-bottom:0}.reinstate-org-member{position:relative;width:500px;margin:40px auto}.reinstate-org-member .reinstate-lead{margin-bottom:32px;font-size:16px}.reinstate-org-member label{cursor:pointer}.reinstate-org-member .reinstate-detail-container{margin:16px 0}.reinstate-org-member .reinstate-title{color:var(--color-fg-default)}.reinstate-org-member .reinstate-title .octicon{width:16px;margin-right:8px;color:var(--color-fg-muted)}.permission-title{margin-top:0}.invite-member-results ul{margin:0}.team-member-list{list-style:none}.team-member-list .table-list-cell{padding-top:16px;padding-bottom:16px}.team-member-list .team-member-content{margin-left:50px}.team-member-list .team-member-username{margin:0;font-size:14px;font-weight:var(--base-text-weight-semibold, 600);line-height:20px}.team-member-list .Label--secondary{cursor:default}.team-member-list .invite-icon{width:28px;color:var(--color-fg-muted)}.menu-item-danger,.menu-item-danger.selected{color:var(--color-danger-fg)}.menu-item-danger:hover,.menu-item-danger[aria-selected=true],.menu-item-danger.navigation-focus,.menu-item-danger.selected:hover,.menu-item-danger.selected[aria-selected=true],.menu-item-danger.selected.navigation-focus{color:var(--color-fg-on-emphasis);background:var(--color-danger-emphasis)}.team-member-list-avatar{float:left;margin-right:8px}.team-member-list-avatar .octicon{width:40px;color:var(--color-fg-muted)}.confirm-removal-list-container{margin-bottom:16px;border:1px solid var(--color-border-default);border-radius:6px}.confirm-removal-list-item{padding:8px;margin:0;font-size:14px;font-weight:var(--base-text-weight-semibold, 600);border-top:1px solid var(--color-border-muted)}.confirm-removal-list-item:first-child{border-top:0}.manage-member-meta{list-style:none}.manage-member-meta-item{margin-top:12px;color:var(--color-fg-muted)}.manage-member-meta-item:first-child{margin-top:0}.manage-member-meta-item .btn-link{color:var(--color-fg-muted)}.manage-member-meta-item>.octicon{width:14px;margin-right:4px;color:var(--color-fg-muted);text-align:center}.manage-member-meta-item>.octicon-alert{color:var(--color-severe-fg)}.ldap-group-dn{display:block;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.ldap-import-groups-container .blankslate{display:none}.ldap-import-groups-container.is-empty .blankslate{display:block}.ldap-import-groups-container.is-empty .ldap-memberships-list{display:none}.ldap-memberships-list{margin-bottom:32px}.ldap-memberships-list .table-list-cell{padding-top:8px;padding-bottom:8px;font-size:12px;vertical-align:middle}.ldap-memberships-list .table-list-cell:last-child{width:92px}.ldap-memberships-list .ldap-list-team-name{width:380px}.ldap-memberships-list .ldap-group-dn{font-size:12px}.ldap-memberships-list .ldap-mention-as{width:260px}.ldap-memberships-list .edit{position:absolute;padding:8px;margin-left:-32px;color:var(--color-accent-fg);cursor:pointer}.ldap-memberships-list .edit-fields{display:none}.ldap-memberships-list .is-editing .edit-hide{display:none}.ldap-memberships-list .is-editing .edit-fields{display:block}.ldap-memberships-list .is-editing .spinner{margin-left:16px;vertical-align:middle}.ldap-memberships-list .is-removing{opacity:.25}.ldap-memberships-list .is-removing .edit{opacity:.5}.team-name-field{height:33px}.ldap-import-form-actions{margin-top:32px}.invited .team-member-list{margin:-16px 0}.invited .team-member-list .list-item{padding:8px 0;border-bottom:1px solid var(--color-border-muted)}.invited .team-member-list .list-item::before{display:table;content:""}.invited .team-member-list .list-item::after{display:table;clear:both;content:""}.invited .team-member-list .list-item:last-of-type{border:0}.invited .team-member-list .list-item .edit-invitation{float:right;margin-top:4px}.invited-banner::before{display:table;content:""}.invited-banner::after{display:table;clear:both;content:""}.invited-banner .btn-sm{float:right;margin-left:4px}.invited-banner p{font-size:14px;line-height:1.5}.invited-banner .inviter-link{font-weight:var(--base-text-weight-semibold, 600)}.manage-member-sso-sessions.has-active-sessions .blankslate{display:none}.org-menu-item:not([aria-current=page])+.org-sub-menu{display:none}.trial-banner-notice{background-image:linear-gradient(180deg, #0366d6 0%, #2188ff 100%)}@media(min-width: 768px){.Popover-message--extra-large{min-width:544px !important}}.theme-name{display:inline-block;margin-right:8px;margin-left:8px;font-size:20px;line-height:1;vertical-align:middle}.pinned-items-spinner{position:relative;top:2px;left:6px}.pinned-items-setting-link{font-size:12px;font-weight:var(--base-text-weight-normal, 400)}.pinned-item-name{color:var(--color-fg-default)}.pinned-item-checkbox+.pinned-item-name:hover{cursor:pointer;background-color:var(--color-action-list-item-default-hover-bg);border-radius:6px}.pinned-item-checkbox:disabled+.pinned-item-name{color:var(--color-fg-muted)}.pinned-item-checkbox:disabled+.pinned-item-name:hover{cursor:default}.pinned-gist-blob-num{min-width:36px;cursor:default}.pinned-gist-blob-num:hover{color:var(--color-fg-muted);cursor:default}@media print{#serverstats,.Header-old,.Header,.header-search,.reponav,.comment::before,.comment::after,.footer,.pagehead-actions,.discussion-timeline-actions,.timeline-comment-actions,.timeline-new-comment,.thread-subscription-status,.lock-toggle-link,.header,.file-actions,.js-expandable-line,.gh-header-sticky,.pr-toolbar.is-placeholder,.language-color{display:none !important}.repository-lang-stats-graph{height:0}.btn:not(.btn-outline){color:var(--color-fg-default) !important;background:none}p,.comment h2{page-break-inside:avoid}.markdown-body h2{page-break-after:avoid}.topic-tag{padding:0}.topic-tag::before{margin-right:-2px;content:"#"}.blob-num{border-right:2px solid var(--color-border-default)}.blob-num-deletion{border-right-color:var(--color-danger-emphasis)}.blob-num-addition{border-right-color:var(--color-success-emphasis)}.blob-code-addition .x{border-bottom:2px solid var(--color-success-emphasis);border-radius:0}.blob-code-deletion .x{border-bottom:2px solid var(--color-danger-emphasis);border-radius:0}.pr-toolbar.is-stuck{position:static !important;width:100% !important}.diffstat-block-neutral{border:4px solid var(--color-border-default)}.diffstat-block-deleted{border:4px solid var(--color-danger-emphasis)}.diffstat-block-added{border:4px solid var(--color-success-emphasis)}.State{color:var(--color-fg-default);background:none;border:1px solid var(--color-border-default);border-color:none}.State--open{color:var(--color-success-fg);border:1px solid #2cbe4e}.State--merged{color:var(--color-done-fg);border:1px solid var(--color-done-emphasis)}.State--closed{color:var(--color-danger-fg);border:1px solid var(--color-danger-emphasis)}.markdown-body pre>code{white-space:pre-wrap}}.projects-splash-dialog{position:fixed;top:0;right:auto;left:50%;z-index:999;width:90vw;max-width:700px;max-height:80vh;margin:10vh auto;transform:translateX(-50%)}@media(min-width: 544px){.projects-splash-dialog{margin:20vh auto}}.projects-splash-banner{background-image:url("/images/modules/memexes/projects-beta-banner-mobile.png");background-repeat:no-repeat;background-position:left;background-size:cover}@media(min-width: 768px){.projects-splash-banner{background-image:url("/images/modules/memexes/projects-beta-banner.png")}}.projects-splash-banner p{max-width:100%}@media(min-width: 768px){.projects-splash-banner p{max-width:55%}}@media(min-width: 768px){[data-color-mode=light][data-light-theme*=dark] .projects-splash-banner,[data-color-mode=dark][data-dark-theme*=dark] .projects-splash-banner{background-image:url("/images/modules/memexes/projects-beta-banner-dark.png")}}@media(prefers-color-scheme: light)and (min-width: 768px){[data-color-mode=auto][data-light-theme*=dark] .projects-splash-banner{background-image:url("/images/modules/memexes/projects-beta-banner-dark.png")}}@media(prefers-color-scheme: dark)and (min-width: 768px){[data-color-mode=auto][data-dark-theme*=dark] .projects-splash-banner{background-image:url("/images/modules/memexes/projects-beta-banner-dark.png")}}.project-description p:last-child{margin-bottom:0 !important}.pending-cards-status{top:-2px;right:-9px;width:14px;height:14px;background-image:linear-gradient(#54a3ff, #006eed);background-clip:padding-box;border:2px solid var(--color-canvas-default)}.project-column{min-width:100%;max-width:100%;background-color:var(--color-canvas-inset);border-width:0 !important;border-radius:0 !important}.project-column:focus{outline:none}@media(min-width: 544px){.project-column{min-width:355px;max-width:355px;border-width:1px !important;border-radius:6px !important}.project-column:focus{border-color:var(--color-accent-fg) !important;box-shadow:0 0 0 2px var(--color-accent-fg)}}.project-column.moving{background-color:var(--color-accent-subtle) !important;box-shadow:0 0 0 2px var(--color-accent-fg);transform:translateX(4px) translateY(-4px)}.sortable-ghost{background-color:var(--color-canvas-subtle);opacity:.5}.project-card{background-color:var(--color-canvas-overlay)}.project-card .project-reference-markdown>p,.project-card:last-child{margin-bottom:0 !important}.project-card:first-child{margin-top:8px !important}@media(min-width: 544px){.project-card:first-child{margin-top:4px !important}}.project-card ul,.project-card ol{margin-bottom:8px;margin-left:16px}.project-card blockquote{padding:0 .75em;color:var(--color-fg-muted);border-left:.25em solid var(--color-border-default)}.project-card .contains-task-list{margin-left:24px}.project-card:hover{border-color:var(--color-border-default) !important;box-shadow:0 1px 3px rgba(106,115,125,.3) !important}.project-card:focus{outline:none}@media(min-width: 544px){.project-card:focus{border-color:var(--color-accent-fg) !important;box-shadow:0 0 0 2px var(--color-accent-fg) !important}}.project-card.moving{background-color:var(--color-accent-subtle) !important;box-shadow:0 0 0 2px var(--color-accent-fg) !important;transform:translateX(4px) translateY(0)}.issue-card.draggable{cursor:move}.issue-card .AvatarStack:hover .from-avatar{margin-right:-4px}.issue-card pre{word-wrap:break-word;white-space:pre-wrap}@keyframes show-pane{0%{transform:translateX(390px)}100%{transform:translateX(0)}}.project-note-form textarea{resize:vertical}.card-menu-container .dropdown-menu,.column-menu-container .dropdown-menu{min-width:180px}.card-octicon{top:6px;left:10px}.card-note-octicon{top:8px}.is-sending .auto-search-group .chooser-spinner{top:15px;right:21px;left:auto}.card-filter-autocomplete-dropdown{z-index:500;float:none;min-width:240px;max-height:270px;cursor:pointer}.card-filter-autocomplete-dropdown [aria-selected=true],.card-filter-autocomplete-dropdown .navigation-focus{color:var(--color-fg-on-emphasis) !important;background-color:var(--color-accent-emphasis);border-radius:6px}.card-filter-autocomplete-dropdown [aria-selected=true] .autocomplete-text-qualifier,.card-filter-autocomplete-dropdown .navigation-focus .autocomplete-text-qualifier{color:var(--color-fg-on-emphasis) !important}.projects-reset-query:hover{color:var(--color-fg-subtle) !important}.projects-reset-query:hover .projects-reset-query-icon{color:var(--color-fg-subtle) !important}.projects-reset-query-icon{width:18px;height:18px;padding:1px}.project-small-menu-dropdown::before,.project-small-menu-dropdown::after{display:none}.project-edit-mode .column-menu-container,.project-edit-mode .column-menu-item{display:none !important}.project-edit-mode .project-move-actions{display:flex !important}.push-board-over{padding-right:0 !important;transition:all .2s ease}@media(min-width: 544px){.push-board-over{padding-right:360px !important}}.projects-comment-form .comment-md-support-link{float:none;width:100%;text-align:center}.projects-comment-form .comment-form-actions{width:100%;padding:8px 16px;margin:4px 0 !important}.projects-comment-form .comment-form-actions button{width:100%;margin:4px 0 !important}.projects-comment-form .comment-form-head{padding:0 !important;margin:0 !important;border-bottom:0}.projects-comment-form .comment-form-head .tabnav-tabs{padding:8px 8px 0}.projects-comment-form .comment-form-head .toolbar-commenting{width:100%;padding-top:4px;text-align:center;background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-default)}.projects-comment-form .comment-form-head::after{display:block;clear:both;content:" "}.projects-comment-form .comment-form-textarea{height:250px !important}.projects-comment-form .preview-content{margin:0;border-top:1px solid var(--color-border-default)}.projects-comment-form .preview-content .comment-body{padding:16px}.project-issue-body-wrapper{max-height:200px;overflow:hidden}.Details--on .project-issue-body-wrapper{max-height:none;overflow:visible}.project-issue-body-blur{height:32px;background:linear-gradient(to top, var(--color-project-gradient-in), var(--color-project-gradient-out))}.Details--on .project-issue-body-blur{height:0}.project-comment-title-hover .comment-action,.project-comment-body-hover .comment-action{opacity:0}.project-comment-title-hover:hover .comment-action,.project-comment-body-hover:hover .comment-action{opacity:1}.project-comment-body-reaction .timeline-comment-action{padding:4px 8px}.project-name-hover .project-name-edit-action{opacity:0}.project-name-hover:hover .project-name-edit-action{opacity:1}.project-icon path{fill:var(--color-fg-default)}.vcard-fullname{font-size:24px;line-height:1.25}.vcard-username{font-size:20px;font-style:normal;font-weight:var(--base-text-weight-light, 300);line-height:24px;color:var(--color-fg-muted)}.user-profile-bio-message{margin:4px 0 0;font-size:12px;color:var(--color-fg-default)}.user-profile-following-container .user-following-container.on .follow,.user-profile-following-container .user-following-container .unfollow{display:none}.user-profile-following-container .user-following-container .follow,.user-profile-following-container .user-following-container.on .unfollow{display:block}.user-repo-search-results-summary{white-space:normal}.pull-request-tab-content{display:none}.pull-request-tab-content.is-visible{display:block}.discussion-timeline p.explain{margin:0;font-size:12px}.pull-request-ref-restore{display:none}.pull-request-ref-restore-text{display:block}.pull-discussion-timeline.is-pull-restorable .pull-request-ref-restore.last{display:block}.files-bucket{margin-bottom:16px}.full-width .diffbar .container{padding-right:0;padding-left:0}.stale-files-tab{float:left;padding:4px 8px;margin-top:-4px;margin-bottom:-4px;color:var(--color-severe-fg);background-color:var(--color-severe-subtle);border-radius:6px}.stale-files-tab-link{font-weight:var(--base-text-weight-semibold, 600);color:inherit}.pr-toolbar{position:sticky;top:0;z-index:29;min-height:60px;padding:0 16px;margin:-16px -16px 0}.pr-toolbar .float-right .diffbar-item{margin-right:0}.pr-toolbar .float-right .diffbar-item+.diffbar-item{margin-left:16px}.pr-toolbar.is-stuck{height:60px;background-color:var(--color-canvas-default)}.commit-toolbar{top:var(--base-sticky-header-height, 0)}@media(min-width: 1150px){.commit-build-statuses .status-checks-dropdown{width:500px}}.full-commit .commit-build-statuses .status-checks-dropdown{width:500px}.files-next-bucket .file,.files-next-bucket .full-commit{margin-top:0;margin-bottom:16px}.diffbar{background-color:var(--color-canvas-default)}.diffbar .show-if-stuck{display:none}.diffbar .container{width:auto}.diffbar .table-of-contents{margin-bottom:0}.diffbar .table-of-contents ol{margin-bottom:-16px}.diffbar .table-of-contents li{border-top:1px solid var(--color-border-muted)}.diffbar .table-of-contents li:first-child{border-top:0}.diffbar [role^=menuitem]:focus:not(.is-range-selected) .text-emphasized,.diffbar [role^=menuitem]:hover:not(.is-range-selected) .text-emphasized{color:var(--color-fg-on-emphasis)}.is-stuck .diffbar .show-if-stuck{display:block}.is-stuck .diffbar .diffstat{display:none}.is-stuck .diffbar .stale-files-tab{margin-top:-8px}.diffbar-item{float:left;font-size:12px;vertical-align:middle}.add-comment-label,.is-review-pending .start-review-label{display:none}.start-review-label,.is-review-pending .add-comment-label{display:inline-block}.is-review-pending .review-simple-reply-button{display:none}.review-comment-contents{margin-left:44px}.review-comment::after,.review-comment-loader::after,.review-comment.is-comment-editing::after{position:absolute;top:31px;left:29px;z-index:-1;width:3px;height:100%;content:"";background-color:var(--color-canvas-subtle)}.review-comment{position:relative;padding:8px 16px;color:var(--color-fg-default)}.review-comment:first-child{padding-top:16px}.review-comment:last-child{padding-bottom:16px}.review-comment .comment-body,.review-comment .comment-reactions{padding:0}.review-comment .comment-body{padding-top:4px}.review-comment .comment-body .suggested-change-form-container:nth-last-of-type(2){margin-bottom:0 !important}.review-comment .comment-reactions{margin-top:4px;border-top:0 !important}.review-comment .comment-reactions.has-reactions{margin-top:12px}.review-comment .show-more-popover.dropdown-menu-sw{right:-5px;margin-top:4px}.review-comment:last-child::after,.review-comment:last-child .review-comment-contents::after{display:none}.review-comment .timeline-comment-action{padding:0 4px}.review-comment .is-comment-editing{position:relative;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px}.review-comment .is-comment-editing::after{top:100%;bottom:0;left:19px;height:20px}.review-comment .is-comment-editing .timeline-comment-actions,.review-comment .is-comment-editing .edit-comment-hide{display:none}.review-comment .is-comment-editing .previewable-comment-form{display:block}.review-comment.is-comment-loading .previewable-comment-form{opacity:.5}.pr-review-reactions .has-reactions,.pr-review-reactions .has-reactions.comment-reactions{margin-bottom:16px;margin-left:16px}.timeline-comment.is-comment-editing .discussion-item-header{display:none}.review-thread-reply{padding:8px 16px;background-color:var(--color-canvas-subtle);border-top:1px solid var(--color-border-default);border-radius:0 0 6px 6px}.review-thread-reply .inline-comment-form{margin:-8px -16px;background-color:var(--color-canvas-default);border:0}.review-thread-reply-button{display:inline-block;min-height:28px;padding:4px 8px;margin-left:8px;cursor:text}.readme.contributing>div{max-height:250px;overflow:auto}.readme .markdown-body,.readme .plain{word-wrap:break-word}.readme .plain pre{font-size:14px;white-space:pre-wrap}.file .readme table[data-table-type=yaml-metadata]{font-size:12px;line-height:1}.file .readme table[data-table-type=yaml-metadata] table{margin:0}.labels-list .blankslate{display:none}.labels-list .table-list-header{display:block}.labels-list.is-empty .blankslate{display:block}.labels-list.is-empty .table-list-header{display:none}.label-select-menu-item .g-emoji{font-size:12px;line-height:1;vertical-align:baseline}.label-edit::before{display:table;content:""}.label-edit::after{display:table;clear:both;content:""}.label-edit label{display:block;margin-bottom:8px}.label-edit .error{float:left;margin-top:8px;margin-left:8px;color:var(--color-danger-fg)}.label-edit.loading{display:block}.label-characters-remaining{color:var(--color-fg-muted)}.repo-list{position:relative}.repo-list-item{position:relative;padding-top:32px;padding-bottom:32px;list-style:none;border-bottom:1px solid var(--color-border-muted)}.repo-list-item-with-avatar{padding-left:42px}.repo-list-item-hanging-avatar{float:left;margin-left:-42px}.mini-repo-list-item{position:relative;display:block;padding:4px 64px 4px 32px;font-size:14px;border-top:1px solid var(--color-border-default)}.mini-repo-list-item:hover{text-decoration:none}.mini-repo-list-item:hover .repo,.mini-repo-list-item:hover .owner{text-decoration:underline}.mini-repo-list-item .repo-icon{float:left;margin-top:2px;margin-left:-16px;color:var(--color-fg-muted)}.mini-repo-list-item .repo-and-owner{max-width:220px}.mini-repo-list-item .owner{max-width:110px}.mini-repo-list-item .repo{font-weight:var(--base-text-weight-semibold, 600)}.mini-repo-list-item .stars{position:absolute;top:0;right:10px;margin-top:4px;font-size:12px;color:var(--color-fg-muted)}.mini-repo-list-item .repo-description{display:block;max-width:100%;font-size:12px;line-height:21px;color:var(--color-fg-muted)}.private .mini-repo-list-item{background-color:var(--color-attention-subtle)}.private .mini-repo-list-item .repo-icon{color:var(--color-attention-fg)}.form-group.errored label .commit-ref{background-color:var(--color-danger-subtle)}.repo-menu-item:not([aria-current=page])+.repo-sub-menu{display:none}.feature-callout .new-label-hidden{display:none}.feature-callout .new-feature-label.new-label-hidden{display:inline}.repository-og-image{width:100%;max-width:640px;height:320px;object-fit:cover;object-position:center;background-repeat:no-repeat;background-position:center;background-size:cover}.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.timeout{width:auto;height:300px;padding:0;margin:16px 0;background-color:transparent;border:0}.timeout h3{padding-top:100px;color:var(--color-fg-muted)}.repo-language-color{position:relative;top:1px;display:inline-block;width:12px;height:12px;border:1px solid var(--color-primer-border-contrast);border-radius:50%}.iconbutton .octicon{margin-right:0}.prereceive-feedback{padding:16px;margin-bottom:16px;border:1px solid #dfe2e5;border-left:6px solid #caa21a;border-radius:6px}.prereceive-feedback-heading{margin-top:0;margin-bottom:8px;color:var(--color-attention-fg)}.repository-item-checkbox:checked+.repository-item-name{background-color:var(--color-accent-subtle)}.custom-role-icon{background-color:var(--color-canvas-subtle)}.profile-picture{margin:8px 0 0}.profile-picture>p{float:left;margin:0;line-height:30px}.profile-picture>img{float:left;margin:0 8px 0 0;border-radius:6px}.app-owner{margin:16px 0 0}.avatar-upload .flash{width:100%;padding:32px 16px;border:dashed 1px var(--color-danger-emphasis);box-shadow:none}.avatar-upload .upload-state{display:none;padding:8px 0}.avatar-upload .upload-state p{margin:0;font-size:12px;color:var(--color-fg-muted)}.avatar-upload .avatar-upload .octicon{display:inline-block}.is-uploading .avatar-upload .loading{display:block;padding:0}.is-uploading .avatar-upload .loading img{vertical-align:top}.is-uploading .avatar-upload .button-change-avatar{display:none}.is-bad-file .avatar-upload .bad-file{display:block;margin:0}.is-too-big .avatar-upload .too-big{display:block;margin:0}.is-bad-dimensions .avatar-upload .bad-dimensions{display:block;margin:0}.is-bad-format .avatar-upload .bad-format{display:block;margin:0}.is-failed .avatar-upload .failed-request{display:block;margin:0}.is-empty .avatar-upload .file-empty{display:block;margin:0}dl.new-email-form{padding:8px 8px 0;margin:0 -8px 8px;border-top:1px solid var(--color-border-default)}.recent-user-key-access{color:#1e7e34}.oauth-app-info-container .float-left-container{float:left;text-align:left}.oauth-app-info-container .float-right-container{float:right;text-align:right}.oauth-app-info-container dl.keys{margin:8px 0}.oauth-app-info-container dl.keys dt{margin-top:8px;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted)}.oauth-app-info-container dl.keys dd{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;color:var(--color-fg-default)}.oauth-app-info-container .user-count{font-size:32px;font-weight:var(--base-text-weight-light, 300);color:var(--color-fg-muted)}.access-token{border-bottom:1px solid var(--color-border-muted)}.access-token:last-child{border:0}.access-token .last-used{margin-right:8px}.access-token.new-token{background-color:rgba(108,198,68,.1)}.access-token.new-token .octicon-check{color:var(--color-success-fg)}.access-token .token-description{max-width:450px;color:var(--color-fg-default)}.access-token .token{font-size:14px}.access-token .token-type{min-width:76px}table.security-history-detail{width:100%;font-size:12px}table.security-history-detail td{max-width:200px;word-wrap:break-word}.u2f-registration{position:relative;padding-bottom:4px;margin-bottom:4px}.u2f-registration.is-sending .u2f-registration-delete{display:none}.u2f-registration.is-sending .spinner{position:relative;top:3px}.u2f-registration-icon{position:absolute;left:-24px;color:var(--color-fg-muted)}.new-u2f-registration{position:relative}.new-u2f-registration .add-u2f-registration-form:not(.for-trusted-device){display:none;margin-bottom:8px}.new-u2f-registration.is-active .add-u2f-registration-link{display:none}.new-u2f-registration.is-active .add-u2f-registration-form{display:block}.new-u2f-registration .webauthn-request-interaction,.new-u2f-registration .webauthn-request-error{display:none}.new-u2f-registration.is-sending .webauthn-request-interaction{display:block}.new-u2f-registration.is-showing-error .webauthn-request-error{display:block}.spinner{display:none}.is-sending .spinner{display:inline-block}.confirmation-phrase{font-style:italic;font-weight:var(--base-text-weight-normal, 400)}.session-device .session-state-indicator.recent{background-color:var(--color-success-emphasis);box-shadow:0 0 10px rgba(108,198,68,.5)}.session-device .session-state-indicator.revoked{background-color:var(--color-danger-emphasis);box-shadow:0 0 10px rgba(198,108,68,.5)}.session-device .session-state-indicator.not-recent{background-image:linear-gradient(#aaa, #ccc);box-shadow:0 1px 0 #fff}.collaborators .collab-list{border-bottom-width:0}.collaborators .collab-list-item:first-child .collab-list-cell{border-top-width:0}.collaborators .collab-list-cell{padding-top:16px;padding-bottom:16px;vertical-align:middle}.collaborators .collab-meta{width:140px}.collaborators .collab-remove{padding-right:16px;text-align:right}.collaborators .collab-remove .remove-link{color:var(--color-fg-muted)}.collaborators .collab-remove .remove-link:hover{color:var(--color-danger-fg)}.collaborators .collab-team-link{width:300px}.collaborators .collab-team-link:hover{text-decoration:none}.collaborators .collab-team-link .avatar{float:left;margin-top:1px;margin-right:8px}.collaborators .collab-team-link.disabled{pointer-events:none}.collaborators .collab-info{height:100%;color:var(--color-fg-default)}.collaborators .collab-info .description{padding-right:50px;margin-top:4px;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.collaborators .collab-info .collab-name{display:block;font-size:14px}.collaborators .collab-info .collab-message{position:relative;top:25%;display:block}.collaborators .copy-invite-modal{left:0;width:300px}@media(min-width: 768px){.collaborators .copy-invite-modal{right:0;left:unset;width:352px}}.collaborators .copy-invite-modal::before,.collaborators .copy-invite-modal::after{display:none}.access-form-wrapper{padding:8px;background-color:var(--color-canvas-subtle);border-top:1px solid var(--color-border-default);border-radius:0 0 6px 6px}.access-flash{padding:8px;margin-right:8px;margin-bottom:8px;margin-left:8px}.repo-access-group .blankslate{display:none}.repo-access-group.is-empty .blankslate{display:block}.boxed-group-list .access-level{color:var(--color-fg-muted)}.boxed-group-list .access-level.css-truncate-target{max-width:500px}.settings-next{font-size:14px;line-height:1.5}.settings-next label{font-size:14px}.settings-next .note{font-size:12px}.settings-next .form-checkbox input[type=radio],.settings-next .form-checkbox input[type=checkbox]{margin-top:4px}dl.form-group>dd textarea.compact{height:100px;min-height:0}.form-hr{margin-top:16px;margin-bottom:16px;border-bottom-color:var(--color-border-default, #e5e5e5)}.listgroup{list-style:none;border:1px solid var(--color-border-default, #e5e5e5);border-radius:6px}.listgroup-item{min-height:inherit;padding:8px;font-size:12px;line-height:26px;color:var(--color-fg-muted)}.listgroup-item::before{display:table;content:""}.listgroup-item::after{display:table;clear:both;content:""}.listgroup-item+.listgroup-item{border-top:1px solid var(--color-border-default, #e5e5e5)}.listgroup-item.listgroup-item-preview{line-height:inherit}.listgroup-item.listgroup-item-preview .BtnGroup{margin-top:4px}.listgroup-item .css-truncate-target{max-width:200px}.listgroup-item-title{display:block;font-weight:var(--base-text-weight-semibold, 600)}.listgroup-item-body{display:block}.listgroup-header{border-top:0;border-bottom:1px solid var(--color-border-default, #e5e5e5)}.listgroup-overflow{max-height:240px;overflow-y:auto;background-color:var(--color-canvas-subtle, #f5f5f5)}.listgroup-sm .listgroup-item{padding-top:4px;padding-bottom:4px}.protected-branches{margin-top:16px;margin-bottom:16px}.protected-branch-options{margin-left:16px;opacity:.5}.protected-branch-options.active{opacity:1}.protected-branch-reviews.on .require-code-owner-review,.protected-branch-reviews.on .reviews-dismiss-on-push,.protected-branch-reviews.on .reviews-include-dismiss,.protected-branch-reviews.on .ignore-approvals-from-contributors,.protected-branch-reviews.on .require-last-push-approval,.protected-branch-reviews.on .allow-force-pushes,.protected-branch-reviews.on .require-approving-reviews{display:block}.protected-branch-reviews .require-code-owner-review,.protected-branch-reviews .reviews-dismiss-on-push,.protected-branch-reviews .reviews-include-dismiss,.protected-branch-reviews .ignore-approvals-from-contributors,.protected-branch-reviews .require-last-push-approval,.protected-branch-reviews .allow-force-pushes,.protected-branch-reviews .require-approving-reviews{display:none}.authorized-pushers{width:440px}.authorized-pushers .add-protected-branch-actor{display:block}.authorized-pushers .actor-limit-reached{display:none;padding:8px;font-size:12px}.authorized-pushers.at-limit .add-protected-branch-actor{display:none}.authorized-pushers.at-limit .actor-limit-reached{display:block;width:440px}.protected-branch-authorized-pushers-table,.protected-branch-pushers-table{margin-top:8px}.protected-branch-authorized-pushers-table .boxed-group-inner,.protected-branch-pushers-table .boxed-group-inner{max-height:350px;overflow-y:auto}.protected-branch-authorized-pushers-table .table-list,.protected-branch-pushers-table .table-list{border-bottom:0}.protected-branch-authorized-pushers-table .table-list-cell,.protected-branch-pushers-table .table-list-cell{vertical-align:middle}.protected-branch-authorized-pushers-table .table-list-cell:first-child,.protected-branch-pushers-table .table-list-cell:first-child{width:100%}.protected-branch-authorized-pushers-table .avatar,.protected-branch-authorized-pushers-table .octicon-jersey,.protected-branch-authorized-pushers-table .octicon-organization,.protected-branch-pushers-table .avatar,.protected-branch-pushers-table .octicon-jersey,.protected-branch-pushers-table .octicon-organization{width:36px;margin-right:8px;text-align:center}.user-already-added::after{display:inline-block;padding:1px 4px;margin-left:4px;font-size:12px;line-height:1.4;color:var(--color-fg-on-emphasis);content:"Already added";background:var(--color-severe-emphasis);border-radius:6px}.protected-branch-admin-permission{padding:4px;margin:-2px 0 -2px -4px;line-height:normal;border:1px solid transparent;border-radius:6px}.protected-branch-admin-permission.active{animation:toggle-color 1s ease-in-out 0s}@keyframes toggle-color{0%{background-color:transparent}50%{color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2}100%{background-color:transparent}}.automated-check-options{margin-top:8px}.automated-check-options .listgroup-item label{font-size:inherit}.automated-check-options .listgroup-item input[type=checkbox]{float:none;margin-top:-2px;margin-right:4px;margin-left:0}.automated-check-options .label{margin-top:4px}.repository-settings-actions [role=tab][aria-selected=true]{font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-default);border-color:var(--color-severe-emphasis)}.repository-settings-actions [role=tab][aria-selected=true] .UnderlineNav-octicon{color:var(--color-fg-muted)}.repository-visibility-change-warning::before{display:none}.two-factor-recovery-codes{margin:32px 0;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:20px}.two-factor-recovery-code-mark{width:24px;height:24px;font-size:24px;line-height:16px;color:var(--color-fg-muted)}.two-factor-recovery-code{display:inline-block;width:48%;line-height:1.6;text-align:center}.two-factor-recovery-code::before{position:relative;top:-3px;margin-right:8px;font-size:12px;color:var(--color-fg-muted);content:"●"}.recovery-codes-saving-options{margin-left:32px}.recovery-codes-saving-options .recovery-code-save-button{width:115px;margin-right:16px;text-align:center}.recovery-codes-warning{margin:0 -16px}.two-factor-steps{padding:16px 16px 0;margin:32px 0;border:1px solid var(--color-border-default);border-radius:6px}.setup-wrapper{width:750px;padding-top:32px;margin:0 auto}.setup-wrapper::before{display:table;content:""}.setup-wrapper::after{display:table;clear:both;content:""}.setup-header{padding-bottom:16px;margin:0 auto 32px;overflow:hidden;text-align:left;border-bottom:1px solid var(--color-border-default)}.setup-header h1{margin-top:0;margin-bottom:0;font-size:48px;font-weight:var(--base-text-weight-normal, 400);line-height:1.1;letter-spacing:-1px}.setup-header h1 .octicon{color:var(--color-fg-muted)}.setup-header .lead{margin-top:2px;margin-bottom:0;font-size:20px}.setup-header .lead a{color:var(--color-fg-muted)}.setup-header .lead a:hover{color:var(--color-accent-fg);text-decoration:none}.setup-org{padding-bottom:0;border-bottom:0}.setup-main{float:left;width:450px}.setup-secondary{float:right;width:250px}.setup-secondary .info{padding-top:0;padding-bottom:0;margin-top:-8px;font-size:12px;line-height:18px;color:var(--color-fg-muted);text-align:center}.setup-info-module{margin-bottom:32px;background-color:var(--color-canvas-default);border:1px solid var(--color-border-default);border-radius:6px;box-shadow:0 1px 3px rgba(0,0,0,.075)}.setup-info-module h2{padding:16px;margin-bottom:16px;overflow:hidden;font-size:16px;border-bottom:1px solid var(--color-border-default)}.setup-info-module h2 .price{float:right;font-weight:var(--base-text-weight-semibold, 600);color:var(--color-fg-muted)}.setup-info-module h3{padding:0 16px;margin:0 0 -8px;font-size:14px}.setup-info-module p{padding:0 16px;margin:16px 0}.features-list{padding:0 16px 16px;margin:0;font-size:14px;list-style:none}.features-list li{margin-top:8px}.features-list li:first-child{margin-top:0}.features-list .list-divider{margin:16px -16px;border-top:1px solid var(--color-border-muted)}.features-list .octicon-check{margin-right:4px;color:var(--color-success-fg)}.features-list .octicon-question{font-size:12px;color:var(--color-fg-muted)}.features-list .tooltipped::after{width:250px;white-space:normal}.setup-form-container .setup-form-title{font-size:16px}.setup-form-container .secure{float:right;margin-top:2px;font-size:12px;color:var(--color-success-fg);text-transform:uppercase}.setup-form-container hr{margin-top:24px;margin-bottom:24px}.setup-form-container .form-actions{padding-top:0;padding-bottom:0;text-align:left}.team-member-container{margin-bottom:16px}.team-member-container .team-member-username{line-height:1.2}.setup-form{padding-bottom:16px}.setup-form .form-group.successed .error{display:none}.setup-form .form-group dd .form-control{width:100%}.setup-form .form-group dd .form-control.short{width:250px}.setup-form dd{position:relative}.setup-form dd .octicon{position:absolute;top:8px;right:25px}.setup-form .octicon-alert{color:var(--color-danger-fg)}.setup-form .octicon-check{color:var(--color-success-fg)}.setup-form .tos-info,.setup-form .setup-organization-next{margin:16px 0;border-top:1px solid var(--color-border-muted);border-bottom:1px solid var(--color-border-muted)}.setup-form .tos-info{padding:16px 0}.setup-form .setup-organization-next{padding-top:16px;padding-bottom:16px}.setup-form .setup-plans{border-collapse:separate;border:1px solid var(--color-border-default)}.setup-form .setup-plans tr.selected{background-color:var(--color-accent-subtle)}.setup-form .setup-plans .name{font-weight:var(--base-text-weight-semibold, 600)}.setup-form .setup-plans .choose-plan input[type=radio]{display:none}.setup-creditcard-form .country-form,.setup-creditcard-form .state-form{float:left;margin:0;word-wrap:normal}.setup-creditcard-form .country-form,.setup-creditcard-form .postal-code-form{margin-top:0;margin-bottom:16px}.setup-creditcard-form .form-group select.select-country{width:182px;margin-right:4px}.setup-creditcard-form .form-group select:invalid{color:var(--color-fg-muted)}.setup-creditcard-form .form-group select.select-state{width:113px}.setup-creditcard-form .form-group .input-vat{width:288px}.setup-creditcard-form .form-group input.input-postal-code{width:180px}.setup-creditcard-form.is-vat-country .vat-field{display:block}.setup-creditcard-form.is-international .form-group select.select-country{width:300px}.setup-creditcard-form.is-international .state-form{display:none}.setup-creditcard-form.no-postcodes .postal-code-form{display:none}.setup-creditcard-form dd .octicon-credit-card{position:inherit}.setup-creditcard-form .vat-field{display:none}.setup-creditcard-form .vat-field.prefilled{display:block}.setup-creditcard-form .help-text{font-size:80%;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-muted)}.user-identification-questions{float:none;width:auto;margin-top:40px}.user-identification-questions .question{margin-bottom:32px}.user-identification-questions .response-group label{font-weight:var(--base-text-weight-normal, 400)}.user-identification-questions .form-checkbox{margin:8px 0}.user-identification-questions .disclaimer{margin:40px 0 0;text-align:center}.user-identification-questions.redesign .question{margin-bottom:96px}.user-identification-questions.redesign .topic-input-container .tag-input{width:100%;border:0;border-bottom:6px solid #000;box-shadow:0 0 0}.signup-plan-summary-subhead{border-bottom:6px solid}.signup-btn:disabled{opacity:.5 !important}.collection-search-results em{padding:.1em;background-color:#faffa6}.draft-tag{padding:4px 8px;font-weight:var(--base-text-weight-semibold, 600);color:#eee;background-color:#404040}.showcase-page-pattern{position:relative;z-index:-1;height:100px;margin-top:-24px;margin-bottom:-70px}.showcase-page-pattern::after{position:absolute;top:0;right:0;bottom:0;left:0;display:block;content:"";background-image:linear-gradient(180deg, rgba(255, 255, 255, 0.85), white)}.showcase-page-repo-list{border-top:1px solid var(--color-border-muted)}.slash-command-menu-item .command-description{color:var(--color-fg-muted)}.slash-command-menu-item[aria-selected=true]{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.slash-command-menu-item[aria-selected=true] .command-description{color:var(--color-fg-on-emphasis)}.modal-anchor::before{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99;display:block;cursor:default;content:" ";background:var(--color-primer-canvas-backdrop)}.sortable-button-item:first-of-type .sortable-button[data-direction=up],.sortable-button-item:last-of-type .sortable-button[data-direction=down]{display:none}@keyframes sponsors-progress-animation{0%{background-position:100%}100%{background-position:0%}}@keyframes circle-progress{0%{stroke-dasharray:0 100}}.sponsors-funded-dependencies-percent-circle-bg,.sponsors-funded-dependencies-percent-circle{fill:none;stroke-width:3;stroke-linecap:round}.sponsors-funded-dependencies-percent-circle-bg{stroke:var(--color-done-subtle)}.sponsors-funded-dependencies-percent-circle{animation:circle-progress 1s ease-out forwards}.sponsors-goal-progress-bar{background:#ec6cb9;transition:width .5s ease-in}@media(prefers-reduced-motion: no-preference){.sponsors-goal-progress-bar:hover{background:linear-gradient(90deg, #ffd33d 0%, #ea4aaa 17%, #b34bff 34%, #01feff 51%, #ffd33d 68%, #ea4aaa 85%, #b34bff 100%);background-size:300% 100%;animation:sponsors-progress-animation 2s linear infinite}}.sponsors-goal-completed-bar{background:linear-gradient(90deg, #ffd33d 0%, #ea4aaa 17%, #b34bff 34%, #01feff 51%, #ffd33d 68%, #ea4aaa 85%, #b34bff 100%);background-size:300% 100%}@media(prefers-reduced-motion: no-preference){.sponsors-goal-completed-bar{transition:width .5s ease-in;animation:sponsors-progress-animation 2s linear infinite}}.sponsors-goals-avatar-border{background-color:var(--color-canvas-default);border:1px solid var(--color-fg-on-emphasis)}.bulk-sponsorship-secondary-cell{width:1%}.sponsors-goals-heart-anim{width:100px;height:100px;cursor:pointer;background:url("/images/modules/site/sponsors/heart-explosion.png") no-repeat;background-position:0 0;background-size:600px 100px;transition:background-position .3s steps(5);transition-duration:0s}.sponsors-goals-heart-anim.is-active{background-position:-500px 0;transition-duration:.3s}.open>.sponsors-foldable{max-height:700px}.open .sponsors-foldable-opened{display:block}.open .sponsors-foldable-closed{display:none}.sponsors-foldable{max-height:0;box-sizing:border-box;overflow-y:auto;transition:max-height .25s ease-in-out}.sponsors-foldable-opened{display:none}.sponsors-foldable-closed{display:block}.sponsor-card{width:100%;height:450px;border:0}@media(min-width: 544px){.sponsor-card{height:260px}}.sponsor-cell{padding:8px;vertical-align:middle;border-right:1px solid var(--color-neutral-muted);border-bottom:1px solid var(--color-neutral-muted)}.sponsor-cell:first-child{width:45px;padding-left:32px;border-right-width:0}.sponsor-cell:last-child{padding-left:8px;border-right-width:0}.sponsor-header-cell{padding-right:16px;font-weight:var(--base-text-weight-semibold, 600);text-align:left;border-top:1px solid var(--color-neutral-muted)}.sponsor-row-number{color:var(--color-fg-subtle)}@media(prefers-reduced-motion: no-preference){.tier-category:hover .tier-emoji{animation:wiggle .1s alternate;animation-timing-function:ease;animation-delay:.1s;animation-iteration-count:4}}@keyframes wiggle{0%{transform:rotate(-25deg)}100%{transform:rotate(15deg) scale(1.2)}}.sponsors-featured-item{width:100%}@media(min-width: 768px){.sponsors-featured-item{width:calc(50% - 8px)}}.bulk-sponsorship-import-dropzone .bulk-sponsorship-import-outline{top:8px;right:8px;bottom:8px;left:8px}.bulk-sponsorship-import-dropzone .bulk-sponsorship-show-on-dragover{display:none}.bulk-sponsorship-import-dropzone.bulk-sponsor-dragover .bulk-sponsorship-show-on-dragover{display:inline}.bulk-sponsorship-import-dropzone.bulk-sponsor-dragover .bulk-sponsorship-hide-on-dragover{display:none}.bulk-sponsorship-import-dropzone.bulk-sponsor-dragover .bulk-sponsorship-drag-n-drop-instructions{visibility:hidden}.bulk-sponsorship-import-dropzone.bulk-sponsor-dragover .bulk-sponsorship-import-outline{border:6px dashed var(--color-border-default)}.bulk-sponsorship-import-csv{z-index:-1;width:1px;height:1px;opacity:0}.bulk-sponsorship-import-csv:focus+label{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.bulk-sponsorship-table{display:block;width:100%;min-height:.01%;overflow-x:auto}@media(min-width: 768px){.bulk-sponsorship-table{display:table}}@media(max-width: 768px){.bulk-sponsorship-amount-cell-non-correctble-error{padding-right:24px}}@media(min-width: 768px){.bulk-sponsorship-amount-cell-non-correctble-error{padding-right:8px}}@media(min-width: 0){.bulk-sponsorship-amount-column-header{min-width:150px}}@media(min-width: 768px){.bulk-sponsorship-amount-column-header{min-width:200px}}.tab-size[data-tab-size="1"]{tab-size:1}.tab-size[data-tab-size="2"]{tab-size:2}.tab-size[data-tab-size="3"]{tab-size:3}.tab-size[data-tab-size="4"]{tab-size:4}.tab-size[data-tab-size="5"]{tab-size:5}.tab-size[data-tab-size="6"]{tab-size:6}.tab-size[data-tab-size="7"]{tab-size:7}.tab-size[data-tab-size="8"]{tab-size:8}.tab-size[data-tab-size="9"]{tab-size:9}.tab-size[data-tab-size="10"]{tab-size:10}.tab-size[data-tab-size="11"]{tab-size:11}.tab-size[data-tab-size="12"]{tab-size:12}.team-label-ldap{display:inline-block;padding:0 8px;line-height:25px;color:var(--color-fg-muted);text-transform:uppercase;cursor:default;border:1px solid var(--color-border-muted);border-radius:6px;box-shadow:none}.team-label-ldap.header-label-ldap{padding:4px 4px}.team-member-ellipsis{width:25px;height:25px;line-height:24px}.team-member-ellipsis:hover{color:var(--color-accent-fg);background:var(--color-canvas-subtle)}.team-listing .nested-teams-checkbox{padding-left:4px}.team-listing .nested-teams-checkbox.show{padding-right:12px}.team-listing .nested-teams-checkbox.indent-1{padding-left:30px}.team-listing .nested-teams-checkbox.indent-2{padding-left:54px}.team-listing .nested-teams-checkbox.indent-3{padding-left:78px}.team-listing .nested-teams-checkbox.indent-4{padding-left:102px}.team-listing .nested-teams-checkbox.indent-5{padding-left:126px}.team-listing .nested-teams-checkbox.indent-6{padding-left:150px}.team-listing .nested-teams-checkbox.indent-7{padding-left:174px}.team-listing .nested-teams-checkbox.indent-8{padding-left:198px}.team-listing .nested-teams-checkbox.indent-9{padding-left:222px}.team-listing .nested-teams-checkbox.indent-10{padding-left:246px}.team-listing .nested-teams-checkbox.indent-11{padding-left:270px}.team-listing .nested-teams-checkbox.indent-12{padding-left:294px}.team-listing .nested-teams-checkbox.indent-13{padding-left:318px}.team-listing .nested-teams-checkbox.indent-14{padding-left:342px}.team-listing .nested-teams-checkbox.indent-15{padding-left:366px}.team-listing .team-info{width:280px}.team-listing .team-short-info{width:170px}.team-listing .nested-team-info{width:650px}.team-listing .nested-team-name{max-width:268px}.team-listing .shortened-teams-avatars{margin-left:auto}.team-listing .shortened-teams-avatars.width-0{width:300px}.team-listing .shortened-teams-avatars.width-1{width:233px}.team-listing .shortened-teams-avatars.width-2{width:167px}.team-listing .shortened-teams-avatars.width-3{width:99px}.team-listing .team-members-count{width:124px}.team-listing .team-show-more-cell{width:980px}.team-listing .team-buttons{width:150px}.team-listing .octicon-wrapper{width:16px}.team-listing .is-open.root-team{background-color:var(--color-canvas-subtle)}.team-listing .is-open .expand-nested-team{font-weight:var(--base-text-weight-semibold, 600)}.team-listing .is-open .octicon-chevron-down{transform:rotate(180deg)}.traffic-graph{min-height:150px}.traffic-graph .activity{margin-top:0}.traffic-graph .activity .dots{margin-top:40px}.traffic-graph .path{fill:none;stroke-width:2}.traffic-graph path.total{stroke:var(--color-success-emphasis)}.traffic-graph path.unique{stroke:var(--color-accent-emphasis)}.traffic-graph .axis.x .tick:first-of-type line{stroke:var(--color-success-emphasis);stroke-width:2px}.traffic-graph .y line{stroke:var(--color-success-emphasis)}.traffic-graph .y.unique line{stroke:var(--color-accent-emphasis)}.traffic-graph .overlay{fill-opacity:0}.uniques-graph .axis.x .tick:last-child line{stroke:var(--color-accent-emphasis);stroke-width:2px}.svg-tip .date{color:var(--color-fg-on-emphasis)}.top-domains .dots{display:block;margin:167px auto 0}table.capped-list{width:100%;line-height:100%}table.capped-list th{padding:8px;text-align:left;background:var(--color-canvas-subtle);border-bottom:1px solid var(--color-border-default)}table.capped-list td{padding:8px;font-size:12px;vertical-align:middle;border-bottom:1px solid var(--color-border-muted)}table.capped-list th.middle,table.capped-list td.middle{text-align:center}table.capped-list .favicon{width:16px;height:16px;margin:0 4px;vertical-align:middle}table.capped-list .octicon{margin-right:8px;color:var(--color-fg-muted);vertical-align:-3px}table.capped-list tr:nth-child(even){background-color:var(--color-canvas-subtle)}.capped-list-label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.traffic-graph-stats .summary-stats{width:100%}.traffic-graph-stats .summary-stats::before{display:table;content:""}.traffic-graph-stats .summary-stats::after{display:table;clear:both;content:""}.traffic-graph-stats .summary-stats li{display:block;float:left;width:50%}.totals circle{fill:var(--color-success-emphasis);stroke:var(--color-canvas-default);stroke-width:2}.uniques circle{fill:var(--color-accent-emphasis);stroke:var(--color-canvas-default);stroke-width:2}ul.web-views li{width:140px}ul.clones li{width:170px}.TrackingBlock .TrackingBlock-list{padding-left:0}.TrackingBlock .Label{border-color:inherit !important}.TrackingBlock-list:not(.js-tasklist-dragging) .TrackingBlock-item:hover{background-color:var(--color-canvas-subtle)}.TrackingBlock-item .AvatarStack-body{background:inherit}.TrackingBlock-item .js-label-loading-container .Skeleton{display:inline-block;width:30px;height:18px;border-radius:2em}.TrackingBlock-item .hide-labels{position:absolute;opacity:0}.TrackingBlock-item .js-hidden-label-counter{display:inline-block;padding:0 7px;font-size:12px;font-weight:var(--base-text-weight-medium, 500);line-height:18px;white-space:nowrap;border:1px solid transparent;border-radius:2em}.TrackingBlock-item .js-item-title{max-width:100%}.TrackingBlock-item .truncate-for-assignees{max-width:90%}.TrackingBlock-item .truncate-for-labels{max-width:70%}.tasklist-checkbox{display:flex;align-items:flex-start;padding-top:10px;margin-left:.1em}.tasklist-flex-grow{flex-grow:1}.tasklist-draft{margin-top:-4px;margin-bottom:-4px}.tasklist-textarea-container,.tasklist-draft-title-container{display:flex;align-items:center;flex-grow:1;padding:4px 0}.tasklist-textarea-container>textarea{width:100%;max-height:none !important;padding:0 4px;margin-left:-4px;overflow:hidden;font-weight:var(--base-text-weight-normal, 400);color:var(--color-fg-default);vertical-align:middle;resize:none;background-color:inherit;border:0;box-shadow:none}.tasklist-issue-handle{display:block;flex-shrink:0;float:left;margin-right:-8px;margin-left:-16px;color:var(--color-fg-muted);opacity:0}.tasklist-issue-handle.draft-handle{display:flex;align-items:flex-start;padding-top:4px}.dragger-icon{width:16px;padding-right:-8px;vertical-align:text-top}.TrackingBlock-list:not(.js-tasklist-dragging) .tasklist-issue-handle:hover{opacity:1}.tasklist-issue-ghost-item{opacity:0}.tasklist-omnibar{display:flex;width:100%;margin-left:4px;flex-direction:row}.tasklist-omnibar-autocomplete-wrapper{width:100%;flex:1;margin-right:8px}.tasklist-omnibar-input-wrapper:not([open]) .Overlay{box-shadow:none}.tasklist-omnibar-input-wrapper .FormControl-input{display:inline-block;border-radius:6px}.tasklist-omnibar-input-wrapper .FormControl-input:focus{border-radius:6px}.tasklist-omnibar-autocomplete-wrapper .ActionList{padding:8px;margin:0}.ActionList-item-label .octicon{margin-right:4px}.TrackingBlock-item:hover .dropdown-details-button{z-index:20;width:auto;height:auto;overflow:visible;clip:auto;visibility:visible !important}.TrackingBlock-item:hover .dropdown-details-button svg{overflow:visible}.tracking-block [data-disabled] .tasklist-omnibar{background-color:var(--color-canvas-subtle)}.tracking-block [data-disabled] .tasklist-omnibar:hover{outline:none !important}.autocomplete-suggestion{display:inline-block}.truncated-autocomplete-suggestion-title{display:inline-block;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.autocomplete-suggestion-issue-number{margin-left:3px;color:var(--color-fg-muted)}.typeahead-result{position:relative;display:block;min-width:100%;padding:8px;margin-top:0;color:var(--color-fg-default);cursor:pointer}.typeahead-result::before{display:table;content:""}.typeahead-result::after{display:table;clear:both;content:""}.typeahead-result:first-child{border-top:0}.typeahead-result:focus,.typeahead-result:hover,.typeahead-result[aria-selected=true],.typeahead-result.navigation-focus{text-decoration:none}.typeahead-result[aria-selected=true],.typeahead-result:hover,.typeahead-result.navigation-focus{color:var(--color-fg-on-emphasis);background-color:var(--color-accent-emphasis)}.typeahead-result[aria-selected=true] .octicon-plus,.typeahead-result:hover .octicon-plus,.typeahead-result.navigation-focus .octicon-plus{color:var(--color-fg-on-emphasis)}.typeahead-result.disabled{pointer-events:none;opacity:.5}.member-suggestion{padding-left:44px}.member-suggestion .avatar{float:left;margin-right:8px;margin-left:-32px}.member-suggestion .member-suggestion-info{width:90%;margin-top:2px;margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.member-suggestion .member-name{font-size:12px;color:var(--color-fg-muted)}.member-suggestion .member-email{margin-top:0;margin-bottom:0}.member-suggestion .octicon-plus,.member-suggestion .octicon-check{position:absolute;top:50%;right:15px;margin-top:-8px;color:var(--color-fg-muted)}.member-suggestion .already-member-note,.member-suggestion .non-member-note,.member-suggestion .non-member-action{margin-top:0;margin-bottom:0;color:var(--color-fg-muted)}.member-suggestion .non-member-action{display:none}.member-suggestion[aria-selected=true] .member-name,.member-suggestion[aria-selected=true] .non-member-note,.member-suggestion[aria-selected=true] .already-member-note,.member-suggestion[aria-selected=true] .non-member-action,.member-suggestion[aria-selected=true] .member-email,.member-suggestion:hover .member-name,.member-suggestion:hover .non-member-note,.member-suggestion:hover .already-member-note,.member-suggestion:hover .non-member-action,.member-suggestion:hover .member-email,.member-suggestion.navigation-focus .member-name,.member-suggestion.navigation-focus .non-member-note,.member-suggestion.navigation-focus .already-member-note,.member-suggestion.navigation-focus .non-member-action,.member-suggestion.navigation-focus .member-email{color:var(--color-fg-on-emphasis)}.member-suggestion[aria-selected=true] .non-member-note,.member-suggestion:hover .non-member-note,.member-suggestion.navigation-focus .non-member-note{display:none}.member-suggestion[aria-selected=true] .non-member-action,.member-suggestion:hover .non-member-action,.member-suggestion.navigation-focus .non-member-action{display:block}.member-suggestion[aria-selected=true] .octicon,.member-suggestion:hover .octicon,.member-suggestion.navigation-focus .octicon{color:var(--color-fg-on-emphasis)}.member-suggestion.not-a-member .member-info,.member-suggestion.disabled .member-info{margin-top:-2px}.non-member-result{padding-left:32px}.email-suggestion{padding-left:32px}.email-suggestion .octicon-mail{margin-left:-16px;color:var(--color-fg-muted)}.email-suggestion .member-suggestion-info{margin-top:1px}.repo-access-add-team .team-name{font-size:14px}.repo-access-add-team .team-description{display:block}.repo-access-add-team .team-size,.repo-access-add-team .team-description{font-size:12px;color:var(--color-fg-muted)}.repo-access-add-team[aria-selected=true] .team-size,.repo-access-add-team[aria-selected=true] .team-description,.repo-access-add-team.navigation-focus .team-size,.repo-access-add-team.navigation-focus .team-description{color:var(--color-fg-on-emphasis)}#user-content-toc{overflow:visible}#user-content-toc tr{border-top:0}#user-content-toc td{padding:0 16px;background-color:var(--color-canvas-subtle);border:0;border-radius:6px}#user-content-toc ul{padding-left:0;font-weight:var(--base-text-weight-semibold, 600);list-style:none}#user-content-toc ul li{padding-left:.2em}#user-content-toc ul ul{font-weight:var(--base-text-weight-normal, 400)}#user-content-toc ul ul li::before{float:left;margin-top:-0.2em;margin-right:.2em;font-size:1.2em;line-height:1;color:var(--color-fg-muted);content:"⌞"}#user-content-toc ul ul ul{padding-left:.9em}#user-content-toctitle h2{margin-top:1em;margin-bottom:.5em;font-size:1.25em;border-bottom:0}.user-list-info{min-height:48px;padding:0;font-size:16px;font-weight:var(--base-text-weight-normal, 400);line-height:20px}.WorkflowJob-deployment-progress .Progress{background:none}.WorkflowJob-deployment-progress .WorkflowJob-deployment-progress-complete{background-color:var(--color-workflow-card-progress-complete-bg) !important}.WorkflowJob-deployment-progress .WorkflowJob-deployment-progress-incomplete{background-color:var(--color-workflow-card-progress-incomplete-bg) !important}.WorkflowJob{padding:12px;transition:opacity ease-out .12s}.WorkflowJob-title{height:20px;line-height:20px}.WorkflowJob-title::after{position:absolute;top:0;right:0;bottom:0;left:0;content:""}.MatrixComponent-pending{padding:12px;transition:opacity ease-out .12s}.MatrixComponent-collapse--title{line-height:20px}.actions-workflow-table.sticky th{position:sticky;top:0;z-index:1;background-color:var(--color-primer-canvas-sticky)}.actions-workflow-table th{height:auto;line-height:44px;text-align:left}.actions-workflow-table td{height:64px;padding-top:12px;padding-bottom:12px;line-height:20px}.actions-workflow-table td.compact{height:48px}.actions-workflow-table th:first-child,.actions-workflow-table td:first-child{padding-left:16px}@media(min-width: 768px){.actions-workflow-table th:first-child,.actions-workflow-table td:first-child{padding-left:20px}}.actions-workflow-table th:last-child,.actions-workflow-table td:last-child{padding-right:20px}@media(max-width: 768px){.actions-fullwidth-module{position:relative;margin-right:-16px !important;margin-left:-16px !important;border-right:0 !important;border-left:0 !important}.actions-fullwidth-module.actions-fullwidth-module{border-radius:0 !important}.actions-fullwidth-module::after{position:absolute;right:0;bottom:-17px;left:0;z-index:0;height:16px;content:"";background-color:var(--color-canvas-subtle)}}.annotation--contracted div:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.annotation--expanded div:first-child{word-break:break-word;white-space:pre-wrap}.enterprise-settings .field-with-errors{min-width:0;padding:0} + +/*# sourceMappingURL=github-0da8be67b2bb.css.map*/ \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E08443C6F49FAB2D20BDA6A802627CA58F6FEBE5 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E08443C6F49FAB2D20BDA6A802627CA58F6FEBE5 new file mode 100644 index 0000000..e169f26 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E08443C6F49FAB2D20BDA6A802627CA58F6FEBE5 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E08443C6F49FAB2D20BDA6A802627CA58F6FEBE5-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E08443C6F49FAB2D20BDA6A802627CA58F6FEBE5-blob new file mode 100644 index 0000000..ac7d580 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E08443C6F49FAB2D20BDA6A802627CA58F6FEBE5-blob @@ -0,0 +1,38 @@ +(function(){var da=function(a){var b=0;return function(){return b>>0)+"_",d=0,e=function(f){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new b(c+(f||"")+"_"+d++,f)};return e}); +h("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c=e}});var ja=function(a,b){a instanceof String&&(a+="");var c=0,d=!1,e={next:function(){if(!d&&cc&&(c=Math.max(c+e,0));c>>0),ka=0,la=function(a,b){function c(){}c.prototype=b.prototype;a.H=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.G=function(d,e,f){for(var k=Array(arguments.length-2),m=2;m=e.value}if(a){d=d||B;a=H(I(),b.i());"function"===typeof c&&(c=c());C||(C=new pa);e=C;b=b.i();if(0f}f&&c.push(e)}return c},Va=function(){var a=Q.nonce;return void 0!==a?a&&a===String(a)&&a.match(Ta)?a:Q.nonce=null:K.querySelector?(a=K.querySelector("script[nonce]"))?(a=a.nonce||a.getAttribute("nonce")||"",a&&a===String(a)&&a.match(Ta)?Q.nonce=a:Q.nonce=null):null:null},Xa=function(a){if("loading"!=K.readyState)Wa(a); +else{var b=Va(),c="";null!==b&&(c=' nonce="'+b+'"');a="<"+Y+' src="'+encodeURI(a)+'"'+c+">";K.write(Z?Z.createHTML(a):a)}},Wa=function(a){var b=K.createElement(Y);b.setAttribute("src",Z?Z.createScriptURL(a):a);a=Va();null!==a&&b.setAttribute("nonce",a);b.async="true";(a=K.getElementsByTagName(Y)[0])?a.parentNode.insertBefore(b,a):(K.head||K.body||K.documentElement).appendChild(b)},Za=function(a,b,c){Ya(function(){var d=b===Ba()?L(P,"_",M()):M();d=L(R(b),"_",d);a(d)},c)},ab=function(a,b){var c= +b||{};"function"==typeof b&&(c={},c.callback=b);var d=(b=c)&&b._c;if(d)for(var e=0;e=a.length||(a=a.substr(b).split(":").filter(function(d){return!["api","platform"].includes(d)}),c.features=a))}]);Da.bs0=window.gapi._bs||(new Date).getTime();T("bs0");Da.bs1=(new Date).getTime();T("bs1");delete window.gapi._bs;window.gapi.load("",{callback:window["gapi_onload"],_c:{url:"https://apis.google.com/js/api.js",jsl:{ci:{"oauth-flow":{authUrl:"https://accounts.google.com/o/oauth2/auth",proxyUrl:"https://accounts.google.com/o/oauth2/postmessageRelay",disableOpt:!0,idpIframeUrl:"https://accounts.google.com/o/oauth2/iframe",usegapi:!1},debug:{reportExceptionRate:1,forceIm:!1,rethrowException:!0,host:"https://apis.google.com"},enableMultilogin:!0,"googleapis.config":{auth:{useFirstPartyAuthV2:!0},root:"https://content.googleapis.com","root-1p":"https://clients6.google.com"},inline:{css:1}, +disableRealtimeCallback:!1,drive_share:{skipInitCommand:!0},csi:{rate:.01},client:{cors:!1},signInDeprecation:{rate:0},include_granted_scopes:!0,llang:"es",iframes:{youtube:{params:{location:["search","hash"]},url:":socialhost:/:session_prefix:_/widget/render/youtube?usegapi=1",methods:["scroll","openwindow"]},ytsubscribe:{url:"https://www.youtube.com/subscribe_embed?usegapi=1"},plus_circle:{params:{url:""},url:":socialhost:/:session_prefix::se:_/widget/plus/circle?usegapi=1"},plus_share:{params:{url:""}, +url:":socialhost:/:session_prefix::se:_/+1/sharebutton?plusShare=true&usegapi=1"},rbr_s:{params:{url:""},url:":socialhost:/:session_prefix::se:_/widget/render/recobarsimplescroller"},":source:":"3p",playemm:{url:"https://play.google.com/work/embedded/search?usegapi=1&usegapi=1"},savetoandroidpay:{url:"https://pay.google.com/gp/v/widget/save"},blogger:{params:{location:["search","hash"]},url:":socialhost:/:session_prefix:_/widget/render/blogger?usegapi=1",methods:["scroll","openwindow"]},evwidget:{params:{url:""}, +url:":socialhost:/:session_prefix:_/events/widget?usegapi=1"},partnersbadge:{url:"https://www.gstatic.com/partners/badge/templates/badge.html?usegapi=1"},dataconnector:{url:"https://dataconnector.corp.google.com/:session_prefix:ui/widgetview?usegapi=1"},surveyoptin:{url:"https://www.google.com/shopping/customerreviews/optin?usegapi=1"},":socialhost:":"https://apis.google.com",shortlists:{url:""},hangout:{url:"https://talkgadget.google.com/:session_prefix:talkgadget/_/widget"},plus_followers:{params:{url:""}, +url:":socialhost:/_/im/_/widget/render/plus/followers?usegapi=1"},post:{params:{url:""},url:":socialhost:/:session_prefix::im_prefix:_/widget/render/post?usegapi=1"},signin:{params:{url:""},url:":socialhost:/:session_prefix:_/widget/render/signin?usegapi=1",methods:["onauth"]},rbr_i:{params:{url:""},url:":socialhost:/:session_prefix::se:_/widget/render/recobarinvitation"},share:{url:":socialhost:/:session_prefix::im_prefix:_/widget/render/share?usegapi=1"},plusone:{params:{count:"",size:"",url:""}, +url:":socialhost:/:session_prefix::se:_/+1/fastbutton?usegapi=1"},comments:{params:{location:["search","hash"]},url:":socialhost:/:session_prefix:_/widget/render/comments?usegapi=1",methods:["scroll","openwindow"]},":im_socialhost:":"https://plus.googleapis.com",backdrop:{url:"https://clients3.google.com/cast/chromecast/home/widget/backdrop?usegapi=1"},visibility:{params:{url:""},url:":socialhost:/:session_prefix:_/widget/render/visibility?usegapi=1"},autocomplete:{params:{url:""},url:":socialhost:/:session_prefix:_/widget/render/autocomplete"}, +":signuphost:":"https://plus.google.com",ratingbadge:{url:"https://www.google.com/shopping/customerreviews/badge?usegapi=1"},appcirclepicker:{url:":socialhost:/:session_prefix:_/widget/render/appcirclepicker"},follow:{url:":socialhost:/:session_prefix:_/widget/render/follow?usegapi=1"},community:{url:":ctx_socialhost:/:session_prefix::im_prefix:_/widget/render/community?usegapi=1"},sharetoclassroom:{url:"https://classroom.google.com/sharewidget?usegapi=1"},ytshare:{params:{url:""},url:":socialhost:/:session_prefix:_/widget/render/ytshare?usegapi=1"}, +plus:{url:":socialhost:/:session_prefix:_/widget/render/badge?usegapi=1"},family_creation:{params:{url:""},url:"https://families.google.com/webcreation?usegapi=1&usegapi=1"},commentcount:{url:":socialhost:/:session_prefix:_/widget/render/commentcount?usegapi=1"},configurator:{url:":socialhost:/:session_prefix:_/plusbuttonconfigurator?usegapi=1"},zoomableimage:{url:"https://ssl.gstatic.com/microscope/embed/"},appfinder:{url:"https://workspace.google.com/:session_prefix:marketplace/appfinder?usegapi=1"},savetowallet:{url:"https://pay.google.com/gp/v/widget/save"}, +person:{url:":socialhost:/:session_prefix:_/widget/render/person?usegapi=1"},savetodrive:{url:"https://drive.google.com/savetodrivebutton?usegapi=1",methods:["save"]},page:{url:":socialhost:/:session_prefix:_/widget/render/page?usegapi=1"},card:{url:":socialhost:/:session_prefix:_/hovercard/card"}}},h:"m;/_/scs/abc-static/_/js/k=gapi.lb.es.TMNQlWGu74E.O/d=1/rs=AHpOoo9xdx1sQ-1KZhDqZE1rtKj2BTe_gQ/m=__features__",u:"https://apis.google.com/js/api.js",hee:!0,dpo:!1,le:["scs"],glrp:false},platform:"backdrop blogger comments commentcount community donation family_creation follow hangout health page partnersbadge person playemm playreview plus plusone post ratingbadge savetoandroidpay savetodrive savetowallet sharetoclassroom shortlists signin2 surveyoptin visibility youtube ytsubscribe zoomableimage".split(" "), +annotation:["interactivepost","recobar","signin2","autocomplete"]}});}).call(this); diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E1C6995B9F314276A2564E03764237FD35AD9183 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E1C6995B9F314276A2564E03764237FD35AD9183 new file mode 100644 index 0000000..7ee032f Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E1C6995B9F314276A2564E03764237FD35AD9183 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E1C6995B9F314276A2564E03764237FD35AD9183-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E1C6995B9F314276A2564E03764237FD35AD9183-blob new file mode 100644 index 0000000..77870d2 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E1C6995B9F314276A2564E03764237FD35AD9183-blob @@ -0,0 +1,3 @@ +!function(a){var b,c={_breaker:{},_start:null,each:function(){var a,b=function(b,d){return b===c._breaker||Boolean(d)&&c.elapsed()>a};return function(d,e,f){var g,h,i=c.type(d);if(1===arguments.length)return void(a=arguments[0]);if(f=c.extend({timeout:!1},f),"object"===i&&d.hasOwnProperty){for(g in d)if(d.hasOwnProperty(g)&&b(e(d[g],g),f.timeout))return}else if(d)for(g=0,h=d.length;g1&&h(f),f=[]},j=function(){f.push({arguments:c.toArray(arguments),batch:!0}),e&&d().batch?null===g&&(g=setTimeout(c.entryPoint(c.bind(function(){i()},this)),d().timeout)):i()};return c.extend(j,{flush:i,now:a}),j},batchArgs:function(a,b){return c.map(a,function(a){return void 0===b?a.arguments:a.arguments[b]})},batchCallType:function(a){var b;return c.reduce(null,a,function(a,c){return b=c[0],null!==a&&b!==a?"batch":b})},batched:function(a){if(a=c.toArray(a),"array"===c.type(a))return c.all(a,function(a){return"object"===c.type(a)&&a.batch&&"array"===c.type(a.arguments)}).length===a.length},bind:function(a,b){return function(){return a.apply(b,arguments)}},cache:function(){var a={},b="vglnk_"+(new Date).getTime(),d=0;return function(e,f,g){e&&"string"!==c.type(e)||(g=f,f=e,e=a);var h=e[b];if(h||void 0!==g)return h||(h=++d),a[h]||(e[b]=h,a[h]={}),void 0!==g&&(a[h][f]=g),"string"==typeof f?a[h][f]:a[h]}}(),canonicalizeHostname:function(){var a={};return function(b){"string"==typeof b&&(b=c.createA(b));try{return a[b.hostname]||(a[b.hostname]=b.hostname?b.hostname.toString().toLowerCase().replace(/^www\./,"").replace(/:.*$/,""):""),a[b.hostname]}catch(d){return""}}}(),clone:function(a){return c.extend({},a)},commonParams:function(a,b){var d;return b=b||{},d={drKey:b.key?null:b.dr_key,key:b.key,libId:b.library_id,subId:b.sub_id},"click"!==a&&"ping"!==a||c.extend(d,{cuid:b.cuid,loc:window.document.location.href,v:1},d),d},contains:function(a,b,d){return Boolean(c.find(a,function(a){return a===b},d))},context:function(a){if("element"===c.type(a)&&(a=a.ownerDocument),"document"===c.type(a)&&(a=a.defaultView||a.parentWindow),"window"===c.type(a))return a},contextIsAncestor:function(a,b){for(var c=a.self;c.parent&&c.parent!==c;)if(c=c.parent,c===b)return!0;return!1},cors:function(a,b,d){var e,f=function(){var a,b=c.noop,f=[];d?d(e.responseText):"string"===c.type(e.responseText)&&(a=e.responseText.match(/^\s*(?:\/\*\*\/)?([^(\s]+)\s*\((.*)\);?\s*$/))&&(b=a[1].replace(/(^\s+|\s+$)/g,""),f=c.fromJSON("["+a[2]+"]"),window[b].apply(window,f))};e=new window.XMLHttpRequest,e.onreadystatechange=function(){4===e.readyState&&200===e.status&&f()};try{return e.open("POST",a),e.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),e.withCredentials=!0,e.send(b),!0}catch(g){return!1}},createA:function(a,b){return c.createEl("a",{href:a,target:b})},createEl:function(a,b,d,e){var f=(e||document).createElement(a);return c.attributes(f,b),c.css(f,d),f},css:function(a,b){var d,e,f,g;if("object"===c.type(b))for(d in b)try{a.style[d]=b[d]}catch(h){}else try{return e=window.getComputedStyle(a),f=c.toArray(arguments).slice(1),g=c.reduce({},f,function(a,b){return a[b]=e.getPropertyValue(b),a}),1===f.length?g[f[0]]:g}catch(h){return}return a},destructing:function(a){return function(a){var b,c=!1;return function(){return c||(b=a.apply(null,arguments),c=!0),b}}(a)},elapsed:function(a){var b=a||this._start;return b?(new Date).getTime()-b.getTime():0},entryPoint:function(a){return c.exceptionLogger(function(){var b;return c._start=new Date,c.observer.pause(),b=a.apply(this,arguments),c.observer.resume(),b})},escapeRegExp:function(){var a;return function(b){return a=a||new RegExp("([.*+?^${}()|[\\]\\\\])","g"),b.replace(a,"\\$1")}}(),eventLink:function(a){var b,c,d=a.target||a.srcElement;do{try{b=d.nodeType}catch(e){return}if(1===b&&(c=d.tagName.toUpperCase(),"A"===c||"AREA"===c))return d;d=d.parentNode}while(d)},every:function(a,b){return Boolean(!c.some(a,function(a){return!b(a)}))},exceptionLogger:function(){var a=!1,b=c.noop;return function(c,d){return void 0===d?function(){if(!a)return c.apply(this,arguments);try{return c.apply(this,arguments)}catch(d){b(d)}}:(a=d,void(b=c))}}(),find:function(a,b,d){var e;return c.each(a,function(a,d){if(b(a,d))return e=a,c._breaker},d),e},generateNodeFilter:function(){var a=function(a,c){var d,e;for(c=","+c.join(",")+",",d=0,e=a.length;d0},{timeout:!0}),e.consolidate?c.unique(c.reduce([],f,function(a,b){return a.concat(b[1])},{timeout:!0})):f}}()});var d=function(){var a=c.find(c.toArray(arguments),function(a){return"function"===c.type(a)});a&&(c.Sizzle=a())};d.amd=!0,function(a){function b(a,b,c,d){var e,f,g,h,i,j,k,m,o,p;if((b?b.ownerDocument||b:P)!==H&&G(b),b=b||H,c=c||[],!a||"string"!=typeof a)return c;if(1!==(h=b.nodeType)&&9!==h)return[];if(J&&!d){if(e=sa.exec(a))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&N(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return aa.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&w.getElementsByClassName&&b.getElementsByClassName)return aa.apply(c,b.getElementsByClassName(g)),c}if(w.qsa&&(!K||!K.test(a))){if(m=k=O,o=b,p=9===h&&a,1===h&&"object"!==b.nodeName.toLowerCase()){for(j=A(a),(k=b.getAttribute("id"))?m=k.replace(ua,"\\$&"):b.setAttribute("id",m),m="[id='"+m+"'] ",i=j.length;i--;)j[i]=m+n(j[i]);o=ta.test(a)&&l(b.parentNode)||b,p=j.join(",")}if(p)try{return aa.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{k||b.removeAttribute("id")}}}return C(a.replace(ia,"$1"),b,c,d)}function c(){function a(c,d){return b.push(c+" ")>x.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function e(a){return a[O]=!0,a}function f(a){var b=H.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function g(a,b){for(var c=a.split("|"),d=a.length;d--;)x.attrHandle[c[d]]=b}function h(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||X)-(~a.sourceIndex||X);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function i(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function j(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function k(a){return e(function(b){return b=+b,e(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function l(a){return a&&typeof a.getElementsByTagName!==W&&a}function m(){}function n(a){for(var b=0,c=a.length,d="";b1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function q(a,c,d){for(var e=0,f=c.length;e-1&&(e[j]=!(g[j]=l))}}else t=r(t===g?t.splice(o,t.length):t),f?f(null,g,t,i):aa.apply(g,t)})}function t(a){for(var b,c,d,e=a.length,f=x.relative[a[0].type],g=f||x.relative[" "],h=f?1:0,i=o(function(a){return a===b},g,!0),j=o(function(a){return ca.call(b,a)>-1},g,!0),k=[function(a,c,d){return!f&&(d||c!==D)||((b=c).nodeType?i(a,c,d):j(a,c,d))}];h1&&p(k),h>1&&n(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ia,"$1"),c,h0,f=a.length>0,g=function(e,g,h,i,j){var k,l,m,n=0,o="0",p=e&&[],q=[],s=D,t=e||f&&x.find.TAG("*",j),u=Q+=null==s?1:Math.random()||.1,v=t.length;for(j&&(D=g!==H&&g);o!==v&&null!=(k=t[o]);o++){if(f&&k){for(l=0;m=a[l++];)if(m(k,g,h)){i.push(k);break}j&&(Q=u)}d&&((k=!m&&k)&&n--,e&&p.push(k))}if(n+=o,d&&o!==n){for(l=0;m=c[l++];)m(p,q,g,h);if(e){if(n>0)for(;o--;)p[o]||q[o]||(q[o]=$.call(i));q=r(q)}aa.apply(i,q),j&&!e&&q.length>0&&n+c.length>1&&b.uniqueSort(i)}return j&&(Q=u,D=s),p};return d?e(g):g}var v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O="sizzle"+-new Date,P=a.document,Q=0,R=0,S=c(),T=c(),U=c(),V=function(a,b){return a===b&&(F=!0),0},W="undefined",X=1<<31,Y={}.hasOwnProperty,Z=[],$=Z.pop,_=Z.push,aa=Z.push,ba=Z.slice,ca=Z.indexOf||function(a){for(var b=0,c=this.length;b+~]|"+ea+")"+ea+"*"),la=new RegExp("="+ea+"*([^\\]'\"]*?)"+ea+"*\\]","g"),ma=new RegExp(ha),na=new RegExp("^"+fa+"$"),oa={ID:new RegExp("^#("+fa+")"),CLASS:new RegExp("^\\.("+fa+")"),TAG:new RegExp("^("+fa+"|[*])"),ATTR:new RegExp("^"+ga),PSEUDO:new RegExp("^"+ha),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ea+"*(even|odd|(([+-]|)(\\d*)n|)"+ea+"*(?:([+-]|)"+ea+"*(\\d+)|))"+ea+"*\\)|)","i"),bool:new RegExp("^(?:"+da+")$","i"),needsContext:new RegExp("^"+ea+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ea+"*((?:-\\d)?\\d*)"+ea+"*\\)|)(?=[^-]|$)","i")},pa=/^(?:input|select|textarea|button)$/i,qa=/^h\d$/i,ra=/^[^{]+\{\s*\[native \w/,sa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ta=/[+~]/,ua=/'|\\/g,va=new RegExp("\\\\([\\da-f]{1,6}"+ea+"?|("+ea+")|.)","ig"),wa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{aa.apply(Z=ba.call(P.childNodes),P.childNodes),Z[P.childNodes.length].nodeType}catch(xa){aa={apply:Z.length?function(a,b){_.apply(a,ba.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}w=b.support={},z=b.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},G=b.setDocument=function(a){var b,c=a?a.ownerDocument||a:P,d=c.defaultView;return c!==H&&9===c.nodeType&&c.documentElement?(H=c,I=c.documentElement,J=!z(c),d&&d!==d.top&&(d.addEventListener?d.addEventListener("unload",function(){G()},!1):d.attachEvent&&d.attachEvent("onunload",function(){G()})),w.attributes=f(function(a){return a.className="i",!a.getAttribute("className")}),w.getElementsByTagName=f(function(a){return a.appendChild(c.createComment("")),!a.getElementsByTagName("*").length}),w.getElementsByClassName=ra.test(c.getElementsByClassName)&&f(function(a){return a.innerHTML="
              ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),w.getById=f(function(a){return I.appendChild(a).id=O,!c.getElementsByName||!c.getElementsByName(O).length}),w.getById?(x.find.ID=function(a,b){if(typeof b.getElementById!==W&&J){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},x.filter.ID=function(a){var b=a.replace(va,wa);return function(a){return a.getAttribute("id")===b}}):(delete x.find.ID,x.filter.ID=function(a){var b=a.replace(va,wa);return function(a){var c=typeof a.getAttributeNode!==W&&a.getAttributeNode("id");return c&&c.value===b}}),x.find.TAG=w.getElementsByTagName?function(a,b){if(typeof b.getElementsByTagName!==W)return b.getElementsByTagName(a)}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},x.find.CLASS=w.getElementsByClassName&&function(a,b){if(typeof b.getElementsByClassName!==W&&J)return b.getElementsByClassName(a)},L=[],K=[],(w.qsa=ra.test(c.querySelectorAll))&&(f(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&K.push("[*^$]="+ea+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||K.push("\\["+ea+"*(?:value|"+da+")"),a.querySelectorAll(":checked").length||K.push(":checked")}),f(function(a){var b=c.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&K.push("name"+ea+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||K.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),K.push(",.*:")})),(w.matchesSelector=ra.test(M=I.matches||I.webkitMatchesSelector||I.mozMatchesSelector||I.oMatchesSelector||I.msMatchesSelector))&&f(function(a){w.disconnectedMatch=M.call(a,"div"),M.call(a,"[s!='']:x"),L.push("!=",ha)}),K=K.length&&new RegExp(K.join("|")),L=L.length&&new RegExp(L.join("|")),b=ra.test(I.compareDocumentPosition),N=b||ra.test(I.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},V=b?function(a,b){if(a===b)return F=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!w.sortDetached&&b.compareDocumentPosition(a)===d?a===c||a.ownerDocument===P&&N(P,a)?-1:b===c||b.ownerDocument===P&&N(P,b)?1:E?ca.call(E,a)-ca.call(E,b):0:4&d?-1:1)}:function(a,b){if(a===b)return F=!0,0;var d,e=0,f=a.parentNode,g=b.parentNode,i=[a],j=[b];if(!f||!g)return a===c?-1:b===c?1:f?-1:g?1:E?ca.call(E,a)-ca.call(E,b):0;if(f===g)return h(a,b);for(d=a;d=d.parentNode;)i.unshift(d);for(d=b;d=d.parentNode;)j.unshift(d);for(;i[e]===j[e];)e++;return e?h(i[e],j[e]):i[e]===P?-1:j[e]===P?1:0},c):H},b.matches=function(a,c){return b(a,null,null,c)},b.matchesSelector=function(a,c){if((a.ownerDocument||a)!==H&&G(a),c=c.replace(la,"='$1']"),w.matchesSelector&&J&&(!L||!L.test(c))&&(!K||!K.test(c)))try{var d=M.call(a,c);if(d||w.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return b(c,H,null,[a]).length>0},b.contains=function(a,b){return(a.ownerDocument||a)!==H&&G(a),N(a,b)},b.attr=function(a,b){(a.ownerDocument||a)!==H&&G(a);var c=x.attrHandle[b.toLowerCase()],d=c&&Y.call(x.attrHandle,b.toLowerCase())?c(a,b,!J):void 0;return void 0!==d?d:w.attributes||!J?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},b.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},b.uniqueSort=function(a){var b,c=[],d=0,e=0;if(F=!w.detectDuplicates,E=!w.sortStable&&a.slice(0),a.sort(V),F){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return E=null,a},y=b.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=y(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=y(b);return c},x=b.selectors={cacheLength:50,createPseudo:e,match:oa,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(va,wa),a[3]=(a[3]||a[4]||a[5]||"").replace(va,wa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||b.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&b.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return oa.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&ma.test(c)&&(b=A(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(va,wa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=S[a+" "];return b||(b=new RegExp("(^|"+ea+")"+a+"("+ea+"|$)"))&&S(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==W&&a.getAttribute("class")||"")})},ATTR:function(a,c,d){return function(e){var f=b.attr(e,a);return null==f?"!="===c:!c||(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f+" ").indexOf(d)>-1:"|="===c&&(f===d||f.slice(0,d.length+1)===d+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[O]||(q[O]={}),j=k[a]||[],n=j[0]===Q&&j[1],m=j[0]===Q&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[Q,n,m];break}}else if(s&&(j=(b[O]||(b[O]={}))[a])&&j[0]===Q)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[O]||(l[O]={}))[a]=[Q,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,c){var d,f=x.pseudos[a]||x.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return f[O]?f(c):f.length>1?(d=[a,a,"",c],x.setFilters.hasOwnProperty(a.toLowerCase())?e(function(a,b){for(var d,e=f(a,c),g=e.length;g--;)d=ca.call(a,e[g]),a[d]=!(b[d]=e[g])}):function(a){return f(a,0,d)}):f}},pseudos:{not:e(function(a){var b=[],c=[],d=B(a.replace(ia,"$1"));return d[O]?e(function(a,b,c,e){for(var f,g=d(a,null,e,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:e(function(a){return function(c){return b(a,c).length>0}}),contains:e(function(a){return a=a.replace(va,wa),function(b){return(b.textContent||b.innerText||y(b)).indexOf(a)>-1}}),lang:e(function(a){return na.test(a||"")||b.error("unsupported lang: "+a),a=a.replace(va,wa).toLowerCase(),function(b){var c;do if(c=J?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===I},focus:function(a){return a===H.activeElement&&(!H.hasFocus||H.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!x.pseudos.empty(a)},header:function(a){return qa.test(a.nodeName)},input:function(a){return pa.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:k(function(){return[0]}),last:k(function(a,b){return[b-1]}),eq:k(function(a,b,c){return[c<0?c+b:c]}),even:k(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:k(function(a,b,c){for(var d=c<0?c+b:c;++d2&&"ID"===(g=f[0]).type&&w.getById&&9===b.nodeType&&J&&x.relative[f[1].type]){if(b=(x.find.ID(g.matches[0].replace(va,wa),b)||[])[0],!b)return c;j&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=oa.needsContext.test(a)?0:f.length;e--&&(g=f[e],!x.relative[h=g.type]);)if((i=x.find[h])&&(d=i(g.matches[0].replace(va,wa),ta.test(f[0].type)&&l(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&n(f),!a)return aa.apply(c,d),c;break}}return(j||B(a,k))(d,b,!J,c,ta.test(a)&&l(b.parentNode)||b),c},w.sortStable=O.split("").sort(V).join("")===O,w.detectDuplicates=!!F,G(),w.sortDetached=f(function(a){return 1&a.compareDocumentPosition(H.createElement("div"))}),f(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||g("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),w.attributes&&f(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||g("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),f(function(a){return null==a.getAttribute("disabled")})||g(da,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),"function"==typeof d&&d.amd?d(function(){return b}):"undefined"!=typeof module&&module.exports?module.exports=b:a.Sizzle=b}(window),c.browser=function(){var a,b={},d=navigator.userAgent.toLowerCase().replace(/\s*[()]\s*/g,"; ").replace(/(\/[\w.]+)\s+/g,"$1; ").replace(/\;\s*$/,"").split(/;\s*/);return c.each(d,function(c){a=(/[\/ :]([^\/ :]+)$/.exec(c)||[])[1],b[a?c.substr(0,c.length-a.length-1).replace(/\d*$/,""):c]=a||!0}),{aol:b.aol,blackberry:b.blackberry,firefox:b.firefox,ie:Boolean(b.msie||b.trident),ios:Boolean(b.applewebkit&&b.mobile),opera:b.opera,playstation:b.playstation,version:parseFloat(b.version||b.crios||b.msie||b.rv||b.firefox)||!1}}(),c.page=function(){var a,b=c.rootContext(window),d=function(){return c.map(c.select("meta[name='description' i]").slice(0,1),function(a){return a.getAttribute("content")})[0]},e=function(){var a=c.css(document.body,"font-size");if(a)return parseFloat(a)},f={description:d(),font_size:e(),referrer:b.document.referrer,title:b.document.title};for(a in f)f[a]=f[a]||null;return f}(),c.harmony={PASSIVE:1,UNSAFE_QUIRKSMODE_EVENTS:.5,COMMERCIAL_LINK_EVENTS:.1,LINK_EVENTS:-1,AGGRESSIVE:-1},c.harmony.DEFAULT=0,c.pii=function(){var a={email:/[A-Z0-9._%+-]+(?:%(?:25)*40|@)[A-Z0-9.-]+\.[A-Z]{2,4}/,numeric:/\d([^0-9A-Z]{0,4}\d){6,18}/},b={contains:function(a,b){return this.regexp(b).test(a)},redact:function(a,b){return a.replace(this.regexp(b),"___")},regexp:function(b){var b=c.extend({},b),d=c.map(c.all(a,function(a,c){return b[c]!==!1}),function(a){return a.source});return new RegExp("(\\b"+d.join("\\b|\\b")+"\\b)","gi")},transmits:function(a,b){return this.contains(a+" "+document.referrer,b||{numeric:!1})}};return{contains:c.bind(b.contains,b),redact:c.bind(b.redact,b),transmits:c.bind(b.transmits,b)}}(),c.platforms=function(){var a=" ",b={NONE:{id:"full",scope:"body",spec:{selector:"body"}},bbp:{spec:{parser:/^post-(\d+)$/,selector:"div[id^='post-']"},scope:"li .post"},hdlr:{spec:{parser:/^post_(\d+)$/,selector:"div[id^='post_']"},scope:".post-content-area"},ipb:{spec:{parser:/^post_id_(\d+)$/,selector:"div[id^='post_id_']"},scope:".post_body .post"},phpb:{spec:{parser:/^p(\d+)$/,selector:"div.post[id^='p']"},scope:[".postbody .content",".postbody .signature"].join(",")},ubb:{spec:{parser:/^number(\d+)$/,parse_el:"span[id^=number]",selector:"a[name^='Post'] ~ table"},scope:[".post_inner *[id^='body']",".post_inner .signature"].join(",")},vb3:{spec:{parser:/^post_message_(\d+)$/,selector:["div[id^='post_message_'], table[id^='post_message_']","section[id^='post_message_']"].join(",")},scope:["div[id^='post_message_']","div[id^='post_message_'] ~ div:not([class])"].join(",")},vb4:{spec:{parser:/^post_(\d+)$/,selector:"li[id^='post_']"},scope:[".post-content",".postbody .content",".postbody .signature","ul.conversation-list .list-item-body"].join(",")},wppr:{spec:{attributes:["id","className"],parser:/(?:^|\s)post-(\d+)(?:\s|$)/,selector:"article[class*='post-'], div[id^='post-']"}}},d={getPostId:function(b){var d,e;return this===c.platforms.NONE?a:(e=this.spec.parse_el?c.select(this.spec.parse_el,b)[0]:b,c.find(this.spec.attributes||["id"],c.bind(function(a){return d=e[a]?e[a].match(this.spec.parser):null,Boolean(d)},this)),d?d[1]:void 0)},getPostIds:function(a){var b=[];return c.each(this.getPosts(a),c.bind(function(a){var d=this.getPostId(a);d&&!c.contains(b,d)&&b.push(d)},this)),b.length?b:null},getPosts:function(a){var b=[];return!a&&document&&document.body&&(a=[document.body]),a&&this.spec&&(b=c.withScope(a,this.spec.selector,{consolidate:!0})),b}};return c.each(b,function(a,e){a.id=a.id||e,c.each(d,function(b,d){a[d]=c.bind(b,a)}),b[e]=a}),b.DEFAULT_POST_ID=a,b.findById=function(a){return c.find(c.platforms,function(b){return b.id===a})},b}(),c.observer=function(){var a,b=[],d=0,e=function(){a||(a=new MutationObserver(c.entryPoint(function(a){var d=[];c.each(a,function(a){var b=[];"characterData"===a.type?a.target&&(b=[a.target]):"attributes"===a.type?b=[a.target]:a.addedNodes&&a.addedNodes.length&&(b=c.toArray(a.addedNodes)),b.length&&(d=d.concat(b))}),d.length>0&&c.each(b,function(a){a.callback(d)})})))},f=function(b){var f={attributes:!1,characterData:!1,childList:!1,subtree:!0};d||(e(),b.opts.attributes&&(f=c.extend(f,{attributes:!0}),"array"===c.type(b.opts.attributes)&&(f=c.extend(f,{attributeFilter:b.opts.attributes}))),b.opts.content&&(f=c.extend(f,{characterData:!0,childList:!0})),a.observe(b.context,f))};return{start:function(a,d,e){a.document&&(a=a.document);var g,d=c.extend({attributes:!1,content:!0},d);c.traits.mutation&&c.contains(["document","element"],c.type(a))&&(g={callback:e,context:a,opts:d},b.push(g),f(g))},pause:function(){d++,a&&a.disconnect()},resume:function(){d--,c.each(b,f)}}}(),c.traits={basicCompatibility:!(c.browser.blackberry||c.browser.playstation),cors:window.XMLHttpRequest&&void 0!==(new window.XMLHttpRequest).withCredentials,crossWindowCommunication:!c.browser.ios,fastRegexp:!c.browser.firefox,json:Boolean(window.JSON)&&Boolean(window.JSON.stringify)&&Boolean(window.JSON.parse),jsRedirectSetsReferrer:c.browser.aol||!(c.browser.ie||c.browser.opera),mutation:window.MutationObserver&&!c.browser.ie,performanceTimingApi:Boolean(window.performance&&window.performance.mark&&window.performance.measure&&window.performance.now&&window.performance.getEntriesByName),performanceNavigationTiming:Boolean(window.performance&&window.performance.getEntriesByType&&window.performance.getEntriesByType("navigation")&&window.performance.getEntriesByType("navigation")[0]&&window.performance.getEntriesByType("navigation")[0].domInteractive),referrerPolicy:!c.browser.ie,quirksMode:!Boolean(window.addEventListener),windowLevelHandlers:Boolean(window.addEventListener)};var e,f,g,h,b;b={EVENT_LEVEL_LINK:1,EVENT_LEVEL_TOP:2,PLUGIN_MANUAL:1,TYPE_ACCEPTABLE:"l",allowed:function(){var a;return function(){return a||(a=c.generateNodeFilter({classes:["novig"],rels:["novig"],selectors:e.exclude_scope,tags:["applet","embed","noscript","object","head","img","input","link","meta","param","select","button","iframe","option","script","style","svg","textarea","title"],custom:function(a,d,f,g){if(!e.whitelist||g.skipWhitelist)return!1;if(d)f.passed=!1;else if(f.passed)return!1;var h=b.whitelistNodes();return f.passed=f.passed||h&&h.length&&c.contains(h,a),!1}})),a.apply(b,arguments)}}(),api:function(){var a,b=function(){var a={optimize:"content",domains:"content"},b=function(a,b){return b=c.extend(c.commonParams(a,e),b),b.subId&&b.key!==e.key&&(b.subId=null),b};return function(d,e,g){var h=c.toArray(arguments).slice(3,arguments.length),i=a[d];return Boolean(i)&&(g=c.extend({},g,{json_payload:i})),{data:h,method:d,opts:f(g),params:b(d,e)}}}(),d=function(a){var b={},d={};return c.each(a,function(a){var g=a[0],h=a[1],i=a[2]||{},j=c.toArray(a).slice(3,a.length);d[g]=c.mergeParams(d[g]||c.commonParams(g,e),h),b[g]=b[g]||[],b[g].push({data:j,opts:f(i)})}),{calls:b,params:d}},f=function(a){return a=a||{},"function"===c.type(a.fn)&&(a.fn=function(b){return function(d){var e,f=d.response?d.response[0]:null;return"object"===c.type(f)&&"array"===c.type(f.crawl)&&"object"===c.type(h.crawler)&&"function"===c.type(h.crawler.crawl)&&(e=c.map(f.crawl,function(a){return a+""}),delete f.crawl,h.crawler.crawl(e)),b.apply(a,arguments)}}(a.fn)),a},g=function(a){var b,d=a.opts.base_url||e.api_url,f=a.opts.path||"/"+a.method;return delete a.opts.base_url,b=[d+f,a.params,a.opts],c.request.apply(c,b.concat(a.data))},i=function(a,b,d){c.each(b,function(b){b&&b.opts&&b.opts.fn&&a&&b.opts.fn({response:c.packageArgs(a),data:b.data,args:d})})};return a={batch:function(){var a=function(a){var b=a.data[0].params,d=a.data[0].calls,e=c.fromJSON(a.response[0])||{};c.each(e,function(a,e){var f,g=b[e],h=d[e];"string"===c.type(a)&&(f=a.match(/^[^(]+\((.*)\);?\s*$/))&&(a=c.fromJSON(f[1])),i(a,h,g)})};return function(b){var f=d(b,!0);g({data:f,method:"batch",params:c.extend(c.commonParams("batch",e),f.params),opts:{json_payload:"batch",jsonp:!1,fn:c.bind(a,window)}})}}(),merge:function(a,e,f){var h,j=d(a,!1);return h=c.reduce({},j.calls[f],function(a,b){return{jsonp:a.jsonp||!b.opts||b.opts.jsonp!==!1,ssl:a.ssl||!b.opts||b.opts.ssl!==!1}}),g(b(e,j.params[e],{fn:function(a){i(a.response[0],j.calls[e],j.params[e])},jsonp:h.jsonp,ssl:h.ssl},j))},single:function(){return g(b.apply(this,arguments))}},c.batchable(function(){var b,d;return c.batched(arguments)?(b=c.batchArgs(arguments),d=c.batchCallType(b),"batch"===d?a.batch.call(this,b):a.merge.call(this,b,d)):a.single.apply(this,arguments)},function(){return{batch:e.batch_calls,timeout:e.batch_call_timeout}})}(),addEventListener:function(a,b){this.fire(a,b)},click:function(){var a=function(a,b){if(!("_self"===b||c.traits.crossWindowCommunication&&c.traits.jsRedirectSetsReferrer))return"go";try{if(void 0===a.document)throw!0;return"jsonp"}catch(d){return"go"}},d=function(a,b){if("_self"===b)return a;if(c.traits.crossWindowCommunication&&c.traits.jsRedirectSetsReferrer){var d=a.open("",b);return d.focus(),d}},f=function(a){var d,e=a.previousSibling,f=a.nextSibling,g=["",a.textContent,""],h=10,i=function(a,b){for(var c=a,d=c.data;(c=c[b+"Sibling"])&&3===c.nodeType;)d+=c.data;return d},j=function(a,b,c){var d=function(a){return a.replace(/\s+/g," ")};return a=d(a),b=d(b),c=d(c),a=a.replace(/^\s+/,"")," "===b.substr(0,1)&&(b=b.substr(1),a+=" "!==a.substr(a.length-1,1)?" ":"")," "===b.substr(b.length-1,1)&&(b=b.substr(0,b.length-1),c=(" "!==c.substr(0,1)?" ":"")+c),c=c.replace(/\s+$/,""),[a,b,c]};void 0!==g[1]&&(g[0]=e&&3===e.nodeType?i(e,"previous"):"",g[2]=f&&3===f.nodeType?i(f,"next"):"",g=j.apply(this,g),""!==g[0]&&""!==g[2]&&(g[0]=g[0].split(" ").reverse().slice(0,h+(" "===g[0].substr(g[0].length-1,1)?1:0)).reverse().join(" "),g[2]=g[2].split(" ").slice(0,h).join(" "),d={type:"context",itype:(c.cache(a,"params")||{}).type,before:g[0],after:g[2],txt:g[1],loc:window.document.location.href,out:c.getActualHref(a),v:2},b.log("info",c.toQuery(d))))};return function(b,g){var h,i,j,k,l,m={},n=c.context(b)||window;if(g=b.target||g,g=!g||g===n.name||"_top"===g&&n.top===n||"_parent"===g&&n.parent===n?"_self":g,k=d(n,g),l=a(k,g),h=c.destructing(c.apiCallback(function(){this.eventTimer.stop("clk");var a=c.toArray(arguments);a.unshift(b,k,g),this.onApiClick.apply(this,a)},this)),c.cache(this,"link","string"==typeof b?b:c.getActualHref(b)),"string"==typeof b&&(b=c.createA(b,g),!this.processLink(b)))return h();if(!e.enabled)return h();if(!c.traits.referrerPolicy&&this.isPrivate(b)&&(l="go"),i=this.clickParams(b,l),this.eventTimer.start("clk"),e.log_context&&f(b),"go"===l)j=this.redirectUrl(i,m),this.redirect(j,n,k,g);else if(k===n)this.api.now("click",i,c.extend(m,{fn:h,timeout:e.click_timeout}));else{if(c.contextIsAncestor(n,k))return this.redirect(c.getActualHref(b),n,k,g);h=c.entryPoint(h),setTimeout(function(){h()},e.click_timeout),k.document.open(),k.callback=h,k.document.write(""+c.getActualHref(b)+''),k.document.close()}}}(),clickParams:function(a,b){var d=c.extend(c.cache(a,"params"),c.cache("opt_params"),{format:b,out:c.getActualHref(a),reaf:e.reaffiliate||null,ref:c.page.referrer||null,rewrit:c.cache(a,"rewrit"),title:c.page.title,txt:a.innerHTML});return d.txt.length>128&&(d.txt=d.txt.replace(/<[^>]+>/g,""),d.txt=d.txt.length>128?d.txt.substr(0,125)+"...":d.txt),d},detectFiltering:function(){var a;try{a={},a=new function(){this.detect=function(a,b){function c(a,b){0==f||b>1e3?a(0==f&&e):setTimeout(function(){c(a,2*b)},2*b)}function d(){--f||(e=!g&&h)}var e=!1,f=2,g=!1,h=!1;if("function"==typeof b){a+="?ch=*&rn=*";var i=11*Math.random(),j=new Image;j.onload=d,j.onerror=function(){g=!0,d()},j.src=a.replace(/\*/,1).replace(/\*/,i);var k=new Image;k.onload=d,k.onerror=function(){h=!0,d()},k.src=a.replace(/\*/,2).replace(/\*/,i),c(b,250)}}}}catch(b){a={detect:function(a,b){b(!0)}}}return function(b){var d=c.updateUrl(e.asset_url,{pathname:"/images/pixel.gif"});a.detect(d,b)}}(),enabled:function(){return e.enabled&&g!==window&&window.vglnk&&(window.vglnk.key||"function"==typeof window.vglnk)&&(e.enabled=!1),e.enabled},expose:function(){var a=function(a,b){return"function"===c.type(a)?c.entryPoint(c.bind(a,b)):a};return function(c,d){d=d||this[c],d&&!h[c]&&(h[c]=a(d,b))}}(),fire:function(){var a={};return function(b,d){b=b.toLowerCase();var e=a[b]||{fired:!1,listeners:[]},f=function(a){a({type:b})};"function"==typeof d?e.fired?setTimeout(function(){f(d)},0):e.listeners.push(d):(e.fired=!0,c.each(e.listeners,function(a){"function"==typeof a&&f(a)}),e.listeners=[]),a[b]=e}}(),handleRightClick:function(a,b){if(e.rewrite_modified&&a&&b)switch(b){case"setup":c.cache(a,"href")||c.cache(a,"href",a.href),a.href=this.redirectUrl(this.clickParams(a,"go")),setTimeout(c.entryPoint(c.bind(function(){this.handleRightClick(a,"teardown")},this)),0);break;case"teardown":c.cache(a,"href")&&(a.href=c.cache(a,"href"))}},harmony:function(a){return e.harmony_level<=a},init:function(){var a=function(){var a="__v5k",b=c.rootContext(window),d=b[a]===!0;return b[a]=!0,!d};return function(){var b=this;if(f={},a()){try{b.initLibEvents(),b.initNamespace(),b.initOptions()}catch(d){}return c.exceptionLogger(c.bind(b.logException,b),!e.dev),c.each(e.script_timeout),c.entryPoint(function(){b.initProcessors(),b.initDRApi(),b.initApi(),b.enabled()&&(b.initLegacyCallbacks(),b.ping())})()}}}(),initApi:function(){var d,f={};if(window.vglnk)for(d in window.vglnk)"_plugin"===d.substr(-7)&&(f[d]=window.vglnk[d]);h=g[a]=c.noop,this.expose("click"),this.expose("link",c.bind(function(a){"element"===c.type(a)&&a.href&&(this.initContext(c.context(a)),this.processLink(a))},this)),this.expose("open",c.bind(this.click,this)),this.expose("$",c.clone(c)),this.expose("allowed"),this.expose("api"),this.expose("apiNow",c.bind(this.api.now,this.api)),this.expose("harmony"),this.expose("isBlacklisted"),this.expose("isCommercial"),this.expose("initLinks"),this.expose("opt"),this.expose("platform"),this.expose("sendLinks"),this.expose("clickParams",function(){return c.extend(c.commonParams("click",e),b.clickParams.apply(b,arguments))}),this.expose("registerProcessor",function(){if(arguments.length>0)return b.registerProcessor.apply(b,arguments)}),c.extend(h,h===window.vglnk?f:{})},initContext:function(){var a=[];return function(b){return void 0===b?a:void(b&&!c.contains(a,b)&&(a.push(b),this.initLinks(b),this.initEvents(b)))}}(),initDomObserver:function(a,d){c.observer.start(a,d,c.batchable(function(a){c.batched(arguments)&&(a=c.reduce([],c.batchArgs(arguments,0),function(a,b){return a.concat(b)})),e.whitelist&&b.whitelistNodes(!0),a=c.all(c.unique(a),function(a){return Boolean(a.parentNode)&&b.allowed(a)}),a.length>0&&(b.processLinks(c.links(a)),c.each(f,function(c,d){c.opts.mode!==b.PLUGIN_MANUAL&&b.runPlugin(d,a)}))},function(){return{batch:e.batch_mutation,timeout:e.batch_mutation_timeout}}))},initDRApi:function(){var a=!1;window.DrivingRevenue=c.entryPoint(c.destructing(c.bind(function(){a=!0,e.dr_key=window.DR_id,this.enabled()&&this.ping()},this))),c.on("DOMReady",function(){if(!a)try{delete window.DrivingRevenue}catch(b){window.DrivingRevenue=void 0}})},initEvents:function(a){var d=c.traits.windowLevelHandlers?a:a.document,f=function(d){d=d||a.event;var e=c.eventLink(d);e&&!c.cache(e,"evented")&&(h(b.EVENT_LEVEL_LINK,e),c.cache(e,"evented",!0))},g=function(a,d){return function(){var e=[a].concat(c.toArray(arguments));d.apply(b,e)}},h=function(a,d){c.on(d,"click",g(a,b.onClick)),c.on(d,"contextmenu",g(a,b.onContextmenu))};e.dynamic&&c.on("DOMReady",function(){b.initDomObserver(a),e.dynamic_scope&&c.each(c.select(e.dynamic_scope,a.document),function(a){b.initDomObserver(a,{attributes:["class","id","style"],content:!1})})}),c.on(d,"copy",c.bind(b.onCopy,b)),c.on(d,"mousedown",f),c.on("DOMReady",function(){c.each(a.document.links,function(a){c.on(a,"mousedown",f)})}),c.traits.quirksMode&&!b.harmony(c.harmony.UNSAFE_QUIRKSMODE_EVENTS)||h(b.EVENT_LEVEL_TOP,d)},initLegacyOptions:function(){var a,b={DR_id:"dr_key",vglnk_api_key:"key",vglnk_cuid:"cuid",vglnk_domain:"api_url",vglnk_reaf:"reaffiliate",vglnk_subid:"sub_id"};for(a in b)void 0!==window[a]&&(h[b[a]]=window[a],"vglnk_domain"===a&&(h[b[a]]+="/api"))},initLegacyCallbacks:function(){var a,b={vl_cB:c.bind(this.onApiClick,this),vl_disable:function(){e.enabled=!1}};for(a in b)window[a]=b[a]},initLibEvents:function(){c.on(b),c.ready(c.bind(function(){this.fire("DOMReady")},this))},initLinks:function(a){var b=c.bind(function(a){this.processLinks(c.toArray(a.document.links))},this);void 0===a?c.each(this.initContext(),b):b(a)},initNamespace:function(){window.vglnk&&window.vglnk.key&&(a="vglnk");var b,c=window,d=a.split(".");for(a=d.pop();d.length>0;)b=d.shift(),c[b]=c[b]||{},c=c[b];g=c,h=g[a]=g[a]||{}},initOptions:function(){var a;this.initLegacyOptions(),e=c.extend(this.publicOptions({anywhere_url:"//redirect.viglink.com",api_url:"//api.viglink.com/api",asset_url:"//cdn.viglink.com/api",cuid:null,dev:!1,dr_key:null,enabled:c.traits.basicCompatibility,key:null,link_urls:!0,partner:null,platform:c.platforms.NONE.id,reaffiliate:!1,sub_id:null,sync_url:"//api.viglink.com/api",whitelist:!1,blacklist_domains:null,commercial_domains:null,harmony_level:c.harmony.DEFAULT,link_target:null,private_domains:null,rewrite_any:!0,rewrite_modified:!1,rewrite_original:!0}),e,h,{batch_calls:!0,batch_call_timeout:100,batch_links:!1,batch_mutation:!0,batch_mutation_timeout:250,click_timeout:1e3,debug:!1,debug_performance:!1,declare_handler:!1,dynamic:!0,dynamic_scope:null,exclude_scope:null,hop_timeout:2e3,insert_host:"i.viglink.com",library_id:null,links_merge_timeout:75,links_version:"3.2",log_context:!0,nofollow:{},norewrite:{},script_timeout:2e3,testing_js:[],time:!1,time_log_timeout:3e3,plugins:{crawler:{},harmony:{},link_affiliation:{},modified_clicks:{}}}),e.sync_url=e.sync_url||e.api_url;for(a in e)"_plugin"===a.substr(-7)&&delete e[a]},initPlugins:function(){var a,d=100,g=5e3,i=1,j={link_affiliation:"convert",link_optimization:"optimize",page_harmony:"harmony",partner_integration:"partners",product_linker:"insert",product_widget:"spotlight"},k=["spotlight"],l=["harmony"],m=function(b){return function(b){return function(){delete f[b].opts.mode,i=1,clearTimeout(a),o()}}(b)},n=function(a){var b;return c.find(j,function(a,c){return"insert"===a&&(b=c)}),a[b]||(a[b]={enabled:!0,key:e.key,link_phrases:!1}),a[b].link_urls=e.link_urls,a},o=function(){var j={_ran:!1,init:c.noop,initDocuments:c.noop,initNodes:c.noop,"public":{}},k=function(a,d){a.setup=a.setup||(window.vglnk?window.vglnk[d+"_plugin"]:null),n(a)&&(p(a)||(a=c.extend(a,j,a.setup(c.reformatKeys(a.opts),c.clone(c),h,m(e.key))),a["public"]&&b.expose(d,a["public"],!1)),a.opts.mode!==b.PLUGIN_MANUAL&&b.runPlugin(d))},m=function(a){var d=function(){if(a){var d=c.toArray(arguments);d.unshift("custom",a),b.log.apply(this,d)}};return d.eventTimer=b.eventTimer,d},n=function(a){return"function"===c.type(a.setup)},p=function(a){return Boolean(a.initDocuments)},q=function(a){return Boolean(a._ran)},r=function(a){return!q(a)};a=null,c.each(l,function(a){var b=f[a];b&&r(b)&&k(b,a)}),c.each(c.all(f,r),k),c.find(f,r)&&(a=setTimeout(c.entryPoint(o),Math.min(Math.max(Math.pow(2,++i),d),g)))},p=function(){var a=!1,d=100;setTimeout(function(){b.api.flush()},d),o(),c.on("DOMReady",function(){a=!0,setTimeout(b.api.flush,0)})};return function(a){a=n(a),c.each(a,c.bind(function(a,b){b=j[b]||b,"object"==typeof a&&a.enabled!==!1&&(f[b]={opts:a},c.contains(k,b)&&c.jsonp(this.opt("asset_url")+"/plugins/"+b+".js"),a.mode===this.PLUGIN_MANUAL&&this.expose("init_"+b,m(b)))},this)),p()}}(),initProcessors:function(){this.registerProcessor(function(a){var b,d=c.createA(e.api_url);"/api/click"!==a.pathname||a.hostname!==d.hostname&&!a.hostname.match(/(^|\.)(api|cdn|apicdn)\.viglink\.com$/)||(b=c.fromQuery(a.search),void 0!==b.out&&(a.href=b.out,delete b.out,c.cache(a,"params",b)))}),this.registerProcessor(function(a){e.nofollow[a.href]&&!c.hasRel(a,"nofollow")&&(a.rel=(a.rel?a.rel+" ":"")+"nofollow")}),this.registerProcessor(function(a){e.declare_handler&&c.attributes(a,{"data-hl":"viglink"})}),this.registerProcessor(function(a){window.IPBoard&&window.IPBoard.prototype&&window.IPBoard.prototype.delegate&&c.hasRel(a,"external")&&(a.rel=a.rel.replace(/(^| )external( |$)/,""),a.target="_blank")}),this.registerProcessor(function(){c.each(c.select(".vl_disclosure"),function(a){var b,d;b=c.createEl(a.tagName,{height:0,visibility:"hidden"}),document.body.appendChild(b),d=c.css(b,"display"),document.body.removeChild(b),c.css(a,{display:d})})})},isAuctionLink:function(a){return c.cache(a,"auctioned")===!0},isBlacklisted:function(a){return"object"===c.type(e.blacklist_domains)&&e.blacklist_domains[c.canonicalizeHostname(a)]},isCommercial:function(a){return this.loadedCommercial()&&e.commercial_domains[c.canonicalizeHostname(a)]},isPrivate:function(a){if("array"!==c.type(e.private_domains))return!1;var b=c.canonicalizeHostname(a);return c.find(e.private_domains,function(a){return new RegExp("(^|\\.)"+c.escapeRegExp(a)+"$","i").test(b)})},isRewritable:function(){var a=c.canonicalizeHostname(document.location),d=function(a){var b=c.cache(a,"type"),d=c.cache(a,"params")||{};return Boolean(b||d.type)},f=c.generateNodeFilter({classes:["norewrite"],rels:["norewrite","noskim"],custom:function(f,g){if(!g)return!1;var h=c.canonicalizeHostname(f),i="",j=!1;try{i=f.protocol,h.charAt(0)}catch(k){return!0}return j=Boolean(""===h||!i.match(/^https?:$/i)||e.norewrite[h]),j||d(f)||(j=Boolean(a===h||!e.rewrite_original||!e.rewrite_any&&!b.isCommercial(f))),j}});return function(a){return f(a)}}(),loadedCommercial:function(){return"object"===c.type(e.commercial_domains)},log:function(a,b,d,f){var g,h,i,j=c.toQuery({libId:e.library_id,nocache:c.uniqid()}),k="pixel.gif";if("custom"===a)h=b,a=d,j+="&"+c.toQuery({key:h,type:a}),c.each("array"===c.type(f)?f:[f],function(a){c.each(["e","i","o"],function(b){delete a[b]}),j+="&"+c.toQuery(a)});else{if(j+="&"+c.toQuery({key:e.key,drKey:e.key?null:e.dr_key,subId:e.sub_id}),"time"===a&&c.traits.json)k="time.gif",g={e:c.toJSON(b),v:2};else if("exception"===a)g={e:b,o:d};else{if("info"!==a)return;g={i:b}}j+="&"+c.toQuery(g)}i=e.api_url+"/"+k+"?"+j,c.pii.transmits(i)||(c.createEl("img").src=i)},eventTimer:function(){var a,d,f=!1,g={},h="viglink-",i="-start",j="-stop",k=function(a,b){return function(){if(c.traits[b])return a.apply(this,arguments)}},l=function(a,b){return function(){var d=c.reduce(!1,b,function(a,b){return a||e[b]});if(d)return a.apply(this,arguments)}},m=c.batchable(function(){var a,d=c.batched(arguments)?c.batchArgs(arguments):[arguments];a=c.map(d,function(a){return c.prune({event:a[0],time:a[1],total:a[2]})}),a.length&&b.log("time",a)},function(){return{timeout:e.time_log_timeout}}),n=l(m,["time"]),o=function(a){var b=h+a+i;window.performance.mark(b)},p=function(b,e){var k,l=g[b]||0,m=h+b,o=h+b+i,p=h+b+j;window.performance.mark(p),window.performance.measure(m,o,p),k=window.performance.getEntriesByName(m,"measure"),k=k.slice(l),g[b]=l+k.length,e||c.each(k,function(c){var d=c.duration,e=c.startTime-a;n(b,d,e)}),f||(f=!0,n("load",d-a,d-a))};return a=c.traits.performanceNavigationTiming?window.performance.getEntriesByType("navigation")[0].domInteractive:0,c.traits.performanceTimingApi&&(d=window.performance.now()),{force:k(o,"performanceTimingApi"),start:k(l(o,["debug_performance","time"]),"performanceTimingApi"),stop:k(l(p,["debug_performance","time"]),"performanceTimingApi")}}(),logException:function(a){if(e.debug){var b={link:c.cache(this,"link"),loc:window.document.location.href,UA:navigator.userAgent};"string"==typeof a?b.message=a:b=c.extend(b,a),this.log("exception",a,c.toQuery(b))}},onApiClick:function(a,b,d,f,g){var h,i=f||c.getActualHref(a),j=c.bind(function(){this.redirect(i,c.context(a),b,d)},this);"object"==typeof g&&(g.tracking||g.image)?(h=c.createEl(g.tracking?"iframe":"img",{src:g.tracking||g.image},{height:0,width:0,visibility:"hidden"}),document.body.appendChild(h),setTimeout(c.entryPoint(j),g.timeout||e.hop_timeout)):j()},onApiPing:function(a,d,f,g,h,i){e.rewrite_original=!1,h=c.reformatKeys(h||{});var j,k,l,m;k=function(a){var b={},d=function(a){c.isArray(a)?b[a[0]]=a[1]:b[a]=1};return c.isArray(a)&&c.each(a,d),b},c.exceptionLogger(function(){c.canonicalizeHostname(window.location).match(/(^|\.)cnn\.com$/)&&(e.exclude_scope=["#optanon",".OUTBRAIN","*[class*=outbrain]","*[class*=partner]","*[class*=sponsored]"].join(","))})(),c.exceptionLogger(function(){c.canonicalizeHostname(window.location).match(/^(www\.)?msn\.com$/)&&(e.dynamic_scope=[".gallery-container > .gallerydata","section.gallery:first-child ~ .gallerydata"].join(","),e.exclude_scope=["*[class^=stb-]",".sticky-footer"].join(","),e.declare_handler=!0)})(),l=c.extend(e.plugins,h.plugins),e=c.extend(e,h),delete e.plugins,e.click_timeout=d,e.library_id=a,this.eventTimer.stop("png"),"array"===c.type(e.testing_js)&&e.testing_js.length>0&&c.each(e.testing_js,function(a){c.jsonp(a)}),c.extend(e.nofollow,k(i)),c.extend(e.norewrite,k(f));for(j in e)"on"===j.toLowerCase().substr(0,2)&&j.length>2&&"function"===c.type(e[j])&&(c.on(b,j.toLowerCase().substr(2),c.bind(e[j],window)),delete e[j]);this.initPlugins(l),this.initContext(window),(m=c.rootContext(window))&&m!==window&&this.initContext(m),this.fire("libready")},onClick:function(a,b){b=b||window.event;var d=b.ctrlKey||b.metaKey||b.altKey||b.shiftKey,e=b.which&&1===b.which||0===b.button,f=c.eventLink(b);if(f&&e&&!d&&!c.isDefaultPrevented(b)&&this.allowed(f)&&this.isRewritable(f)&&!this.isAuctionLink(f)&&this.shouldHandleClick(a,f))return this.click(f),c.preventDefault(b)},onContextmenu:function(a,b){var d=c.eventLink(b||window.event);d&&this.allowed(d)&&this.isRewritable(d)&&!this.isAuctionLink(d)&&this.shouldHandleClick(a,d)&&this.handleRightClick(d,"setup")},onCopy:function(a){a=a||window.event;var d,e,f,g,h=[],i=128;if(window.getSelection)for(f=window.getSelection(),d=0,e=f.rangeCount;d0&&g.length<=i&&h.push(g)}c.each(h,function(a){b.log("info",c.toQuery({type:"selection",txt:a,loc:location.href}))})},opt:function(a,b){return void 0!==b&&void 0!==this.publicOptions()[a]&&(e[a]=b),e[a]},ping:function(){var a=!1;return function(){if(!a&&(e.key||e.dr_key)){var b={ref:document.referrer||null,v:2};if(a=!0,c.pii.transmits(this.api.now("ping",b,{"return":!0})))return;this.eventTimer.force("png"),this.detectFiltering(c.bind(function(a){a&&(e.batch_calls=!1,b.type=this.TYPE_ACCEPTABLE),this.api.now("ping",b,{fn:c.apiCallback(this.onApiPing,this)})},this))}}}(),platform:function(){return c.platforms.findById(e.platform)||c.platforms.NONE},processLink:function(a){var d=c.cache(a,"processors")||{},f=this.allowed(a),g=this.isRewritable(a);return c.each(this.registerProcessor(),function(h){if(h.opts.any||e.rewrite_any||b.loadedCommercial()){if(!d[h.id]&&f&&(g||h.opts.any)){var i;h.opts.scope&&"body"!==h.opts.scope&&(i=c.some([h.opts.scope+" a",h.opts.scope],function(b){return c.matches(a,b)})),i!==!1&&h.fn(a)}d[h.id]=!0}}),c.cache(a,"processors",d),a},processLinks:function(a){c.each(a,c.bind(this.processLink,this))},publicOptions:function(){var a={};return function(b){return"object"===c.type(b)&&(a=b),c.extend({},a)}}(),redirect:function(a,d,e,f){var g,h,i=function(a,d,e){var f,g=[];if(c.traits.referrerPolicy){f=function(a){var b=d.document.createElement("meta");b.name="referrer",b.content=a,d.document.getElementsByTagName("head")[0].appendChild(b)},b.isPrivate(a)&&(g=[f("no-referrer"),f("never")]),e();try{c.each(g,function(a){a.parentNode.removeChild(a)})}catch(h){}}else e()};d=d||window.top,c.traits.crossWindowCommunication||e?c.traits.jsRedirectSetsReferrer?setTimeout(c.entryPoint(function(){e&&e!==d?c.contextIsAncestor(d,e)?e.location=a:e.location.replace(a):i(a,d,function(){d.location=a})}),0):("_blank"===f&&(f=c.uniqid("win_")),g=c.createA(a,f),g.rel="norewrite",d.document.body.appendChild(g),g.click(),g.parentNode.removeChild(g)):(h=d.open(a,f),h.focus())},redirectUrl:function(a,b){return b=b||{},this.api.now("click",a,c.extend(b,{base_url:e.anywhere_url,path:"/"},{"return":!0}))},runPlugin:function(a,b){var d=window.document,e=f[a];e&&e.initDocuments&&(b?e.initNodes(b):(e.init(),"function"===c.type(e.initDocuments)&&"document"===c.type(d)&&e.initDocuments([d]),"function"===c.type(e.initNodes)&&"element"===c.type(d.body)&&c.on("DOMReady",function(){e.initNodes([d.body])})),e._ran=!0)},registerProcessor:function(){var a=!1,b=[],d=function(d,e){return void 0===d?b:void("function"===c.type(d)&&(e=c.extend({any:!1,scope:null},e),b.push({fn:d,id:c.uniqid(),opts:e}),a&&this.initLinks()))};return d(function(){a=!0},{any:!0}),d}(),sendLinks:c.mergeable(function(){return{batchFn:b.api,nonBatchFn:b.api.now,batchable:e.batch_links,timeout:e.links_merge_timeout}}),shouldHandleClick:function(a,b){var d=!0,e="inserted"===c.cache(b,"type");return a===this.EVENT_LEVEL_LINK&&(d=this.harmony(c.harmony.LINK_EVENTS)||(this.isCommercial(b)||e)&&this.harmony(c.harmony.COMMERCIAL_LINK_EVENTS)),d},whitelistNodes:function(){var a,b=".allowvig";return function(d){return a&&!d||(a=c.select(b)),a}}()},b.init();try{delete window.vglnk_self}catch(i){}}("undefined"==typeof vglnk_self?"vglnk":vglnk_self),window.vglnk=window.vglnk||{},window.vglnk.convert_plugin=function(a,b,c){var d,e,f={},g={seen:1,called:2};return a=b.extend({any:!0,convert_minimum_bid:!1,check_exp_domains:!0},a),e={getDomains:function(){var a=[];b.each(f,function(b,c){f[c]!==g.called&&(a.push(c),f[c]=g.called)}),a.length>0&&c.apiNow("domains",{domains:a.join("|"),v:"2"},{fn:b.apiCallback(e.onDomainApi,e)})},init:function(){c.opt("link_target",a.link_target),c.opt("rewrite_any",a.any),c.opt("rewrite_original",!0),d=!a.any||c.harmony(b.harmony.COMMERCIAL_LINK_EVENTS)||a.convert_minimum_bid||a.check_exp_domains,d&&c.registerProcessor(b.bind(function(a){this.initDomainLookup(), +this.saveDomain(a)},this),{any:!0})},initDomainLookup:function(){var a=!1;return function(){a||(a=!0,b.on("DOMReady",b.bind(this.getDomains,this)))}}(),onDomainApi:function(){var a=b.destructing(function(){c.initLinks()});return function(d){var e=c.opt("blacklist_domains"),f=c.opt("commercial_domains")||{},g=b.destructing(function(){e=e||{}});b.each(d.results,function(a,b){f[b]=!0,a.unlink&&(g(),e[b]=!0)}),c.opt("commercial_domains",f),c.opt("blacklist_domains",e),a()}}(),saveDomain:function(a){var c=b.canonicalizeHostname(a);f[c]=f[c]||g.seen},unlinkBlacklisted:function(a){c.isBlacklisted(a)&&b.unlink(a)}},{init:b.bind(e.init,e),initNodes:function(){e.getDomains()}}},window.vglnk=window.vglnk||{},window.vglnk.crawler_plugin=function(a,b,c){var d=[],e=c.platform(),f={crawl:function(a){if(e&&"array"===b.type(a)&&0!==a.length){a=b.all(a,function(a){return!b.contains(d,a)});var c=this.findPostsById(a);b.each(c,b.bind(function(a){a.content=this.redact(a.el.innerHTML.replace(/(^\s+|\s+$)/g,"")),delete a.el},this)),c=b.all(c,function(a){return Boolean(a.content&&a.id)}),c.length>0&&this.processPosts(c)}},findPostsById:function(a){return b.all(b.map(e.getPosts(),function(a){return{el:a,id:e.getPostId(a)}}),function(c){return b.contains(a,c.id)})},processPosts:function(a){a=b.map(a,function(a){return d.push(a.id),{c:a.content,i:a.id}}),c.api("content",{content:b.toJSON({ct:a,pt:e.id,u:window.document.location.href})},{jsonp:!1})},redact:function(a){return b.pii.redact(a)}};return{"public":{crawl:b.bind(f.crawl,f)}}},window.vglnk=window.vglnk||{},window.vglnk.modified_clicks_plugin=function(a,b,c){return{init:function(){c.opt("rewrite_modified",!0)}}},window.vglnk=window.vglnk||{},window.vglnk.privacy_plugin=function(a,b,c){return{init:function(){a.domains&&c.opt("private_domains",a.domains)}}},window.vglnk=window.vglnk||{},window.vglnk.dr_search_box_plugin=function(a,b,c){a=b.extend({key:null},a);var d={init:function(a){b.each(this.getDRSearchForms(a),function(a){if(!b.cache(a,"evented")){var c=d.getInput(a),e=function(){c.value||b.css(c,{"background-image":"url(http://cdn.viglink.com/images/ebay_watermark.gif)"})};b.cache(a,"evented",!0),a.onsubmit=null,c.onfocus=null,c.onblur=null,b.on(c,"focus",function(){b.css(c,{"background-image":"none"})}),b.on(c,"blur",e),e(),b.on(a,"submit",function(b){d.onSubmit(b,a)})}})},getDRSearchForms:function(a){var c=[];return b.each(a,function(a){"element"===b.type(a)&&b.each(a.getElementsByTagName("form"),function(a){d.getInput(a)&&a.id.match(/^DR-ebay-search(CSS|2)?$/i)&&c.push(a)})}),c},getInput:function(a){return a.p||a.q2},onSubmit:function(e,f){e=e||window.event;var g="http://shop.ebay.com/i.html?"+b.toQuery({_nkw:d.getInput(f).value}),h=b.createA(g,"_blank");return b.cache(h,"params",{key:a.key}),c.click(h),b.preventDefault(e)}};if(a.key)return{init:b.bind(d.init,d),initNodes:function(a){d.init(a)}}},window.vglnk=window.vglnk||{},window.vglnk.harmony_plugin=function(a,b,c){return a=b.extend({level:b.harmony.DEFAULT},a),{init:function(){var b=parseFloat(a.level,10);isFinite(b)&&c.opt("harmony_level",b)}}},window.vglnk=window.vglnk||{},window.vglnk.optimize_plugin=function(a,b){var a=b.extend({exclude_page_title:null,exclude_link_text:null},a);return{init:function(){var c={opt:!0};null!==a.exclude_page_title&&b.extend(c,{optExTitle:a.exclude_page_title}),null!==a.exclude_link_text&&b.extend(c,{optExText:a.exclude_link_text}),b.cache("opt_params",c)}}},window.vglnk=window.vglnk||{},window.vglnk.insert_plugin=function(a,b,c,d){var e,f,g,h,i={API:"api",DOM_TRAVERSAL:"dom"},j={LITE:"L",HEAVY:"H",URL:"U",SEARCH:"S",MANUAL:"0"},k={UNLINKED_URL_KEY:"&!UNLINKED!&",DEFAULT_IMP_ID:"-"},l="2.0",m=null,n=!1,o=null;if(a=b.extend({cat:null,dynamic_sample_rate:1,heading_threshold:2,insertion_order:i.API,key:null,link_headings:!1,link_phrases:!0,link_target:null,link_urls:!0,manual_mode:1===a.mode,per_page:null,per_phrase:5,proximity:null,same_proximity:100,scope:null,ui:!0},a),a.insertion_order!==i.API&&a.insertion_order!==i.DOM_TRAVERSAL&&(a.insertion_order=i.API),a.key)return e=c.platform(),f={cache:function(){var c,d=function(){c={impressions:{},post_mappings:{}}},e=function(a,d){var e,f=c.post_mappings,g=c.impressions,h={};return d=d||[b.platforms.DEFAULT_POST_ID],e=b.all(b.unique(b.map(d,function(a){return f[a]})),function(a){return null!==a}),b.find(e,function(c){if(g[c]&&g[c].data&&g[c].order){if(a)return h[a]=g[c].data[a],!0;b.each(g[c].order,function(a){var b=g[c].data[a];h[a]||(h[a]=b)})}}),a?h[a]:h},f=function(a,d,e,f){var g=c.impressions,h=c.post_mappings;return e=e||k.DEFAULT_IMP_ID,f=f||[b.platforms.DEFAULT_POST_ID],g[e]=g[e]||{data:{},order:[]},g[e].data[a]||(g[e].data[a]=d,g[e].order.push(a)),b.each(f,function(a){h[a]=e}),!0},g=function(a,c,d,g){var h=b.all(b.toArray(arguments),function(a){return Boolean(a)});return"array"===b.type(h[h.length-1])&&(g=h.pop()),a=h[0],c=h[1],h.length<=1?e(a,g):h.length>=2?f(a,c,d,g):void 0};return a.manual_mode&&b.extend(g,{reset:d}),d(),g}(),enabled:function(){return a.link_phrases||a.link_urls},focusLink:function(a){a.id||(a.id=b.uniqid("vl-link-")),location.href.hash="#"+a.id,window.scrollBy(0,-150)},getPartnerParams:function(){var a,b,d=c.opt("partner"),e={};for(a in d)break;if(a)for(b in d[a])e[a+"_"+b]=d[a][b];return e},getPhrases:function(g,h){d.eventTimer.start("ins"),c.api("insert",b.extend(f.getPartnerParams(),{cat:a.cat,i:h?h.join("|"):null,mode:a.mode,pt:e.id,ps:a.product_source,u:window.document.location.href,v:l}),{fn:b.apiCallback(f.onInsertApi,f)},g,h)},hasCalled:function(){var c={},d=Math.random()]",hard_start:"(?:^|\\s)\\W*",soft_start:"\\b"};return a.balanced_parens="\\((?:"+a.nonparen_path_char+"|(?:\\("+a.nonparen_path_char+"+\\)))*\\)",a.domain_parts="(?:"+a.domain_part+"\\.)+",new RegExp("(?:(?:"+a.soft_start+"("+a.http_scheme+")|"+a.hard_start+"("+a.www_domain_part+"|"+a.domain_parts+a.tld+"/))((?:"+a.nonparen_path_char+"+|"+a.balanced_parens+")+(?:"+a.balanced_parens+"|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))|"+a.hard_start+"("+a.domain_parts+"com\\b/?)(?!\\."+a.domain_part+"))","i")}())},initLink:function(){var d=function(a){var d=b.fromQuery(a.search),e=d.u||d.out;e&&(delete d.format,delete d.out,delete d.u,b.extend(d,c.clickParams(a),{out:e}),a.search="?"+b.toQuery(d))},e=function(a){return a.auc===!0};return function(f,g,h){var i=a.link_target;i=g.type===j.URL?c.opt("link_target"):i||h,i&&(f.target=i),f.href||(f.href=g.url),f.rel="nofollow",b.cache(f,"params",{exp:m,iid:g.iid,key:a.key,mid:g.mid,type:g.type||null}),e(g)&&(d(f),b.cache(f,"auctioned",!0)),b.cache(f,"href",f.href),c.link(f)}}(),insertLinks:function(){var e=b.generateNodeFilter({classes:["nolinks","atma-nolink","atma-nolinks"],tags:["map"],custom:function(a){return b.matches(a,"a")&&Boolean(a.href)}}),g=function(c,d,e,f){var g={phrase_to_nodes:{},regexp_cache:{},stats:{}};return b.each(d,function(a){m(c,a,e,f,g)},{timeout:!0}),a.insertion_order===i.API&&l(e,g),g.stats},l=function(a,c){var d=q(a);d.push(k.UNLINKED_URL_KEY),b.each(d,function(d){var e=c.phrase_to_nodes[d];e&&b.each(e,function(b){s(b,b.data,a,c)})})},m=function(a,b,d,f,g){c.allowed(b,{},{skipWhitelist:!0})&&e(b,{ancestors:!Boolean(f),self:!0})&&(3===b.nodeType?p(a,b,d,g):1===b.nodeType&&o(a,b,d,g))},o=function(a,b,c,d){var e;for(b=b.firstChild;b;)e=b.nextSibling,m(a,b,c,!0,d),b=e},p=function(){var d=function(c,d){var e=[];return b.each(c,function(a){var c,f;d[a]?c=d[a]:(f=b.escapeRegExp(a).split(" ").join("\\s+"),f="(?:^|[\\s\"'\\(])("+f+")(?=\\s|\\W*$|\\W{2})",c=new RegExp(f,"i"),d[a]=c),e.push(c)}),a.link_urls&&h&&e.push(h),e},e=function(a,c){var d=q(c);return a=f.normalizePhrase(a),b.all(d,function(b){return a.indexOf(b)!==-1})},g=function(a,b,c){a[b]||(a[b]=[]),a[b].push(c)};return function(h,j,l,m){var n,o,p,q=!1,s=j.parentNode,t=m.phrase_to_nodes,u=m.regexp_cache;!s||c.opt("whitelist")&&!c.allowed(j)||(j.data&&(q=h.test(j.data.replace(/\s+/," "))),q&&a.insertion_order===i.DOM_TRAVERSAL?r(h,j,l,m):q&&a.insertion_order===i.API&&(n=e(j.data,l),o=d(n,u),p=[j],b.each(o,function(a){var c=[];b.each(p,function(d){for(var e,h,i,j,l,m;d&&d.data&&""!==d.data&&(Boolean(!b.traits.fastRegexp&&(i=d.data.match(/^\s+/)))||Boolean(i=d.data.match(a)))&&i.input!==e;)e=i.input,h=i.slice(1).join(""),l=f.normalizePhrase(h),j=v(d,i),j.previous&&j.previous.data&&c.push(j.previous),d=j.next,m=b.contains(n,l)?l:k.UNLINKED_URL_KEY,g(t,m,j.match);d&&!i&&c.push(d)},{timeout:!0}),p=c})))}}(),q=function(a){var c=f.cache(a);return b.map(c,function(a,b){return b})},r=function(a,c,d,e){for(var f,g,h,i;c&&c.data&&""!==c.data&&(Boolean(!b.traits.fastRegexp&&(h=c.data.match(/^\s+/)))||Boolean(h=c.data.match(a)))&&h.input!==f;)f=h.input,g=h.slice(1).join(""),i=v(c,h),s(i.match,g,d,e),c=i.next},s=function(){var d=function(c){var d;return!(!a.link_headings&&(d=b.css(c.parentElement,"font-size")))||(d=parseFloat(d),d<=0||d/b.page.font_sizec.x1&&a.y1c.y1};return!g.phrase||((a.proximity||a.same_proximity)&&(e=b.geometry(h),b.find(f.cache(d),function(d){var h,j;if(d.links)return h=f.normalizePhrase(d.phrase)===f.normalizePhrase(g.phrase),!(h&&!a.same_proximity||!h&&!a.proximity)&&(j=h?Math.max(a.same_proximity,a.proximity):a.proximity,d.links=b.all(d.links,function(a){var d=b.isInDom(a.el);return!c&&d&&(c=b.find(a.segments,function(a){if(i(a.geometry,e,j))return!0})),d}),c)})),!c)};return!!e.parentNode&&(h=b.createEl("span"),e.parentNode.insertBefore(h,e),h.appendChild(e),j((!i||b.isVisible(h))&&k()))},h=function(a,c){var d,e,f,g,h={el:a,segments:[]},i=a.getElementsByTagName("span"),j={els:[]};for(d=0,e=i.length;d$1
              "),e.className="vglnk",b.cache(e,"type","inserted"),b.cache(e,"phrase",c),a.ui&&d.type!==j.URL&&(e.title="Link added by VigLink"),f.initLink(e,d),e},u=function(a,b){var c=b.parentNode;c.insertBefore(a,b),c.removeChild(b)},v=function(a,b){var c,d,e=b.slice(1).join(""),f=b[0],g=b.index+f.length-e.length;return g>0?c=a.splitText(g):(c=a,a=null),d=c.length<=e.length?null:c.splitText(e.length),{previous:a,match:c,next:d}};return function(c,h){var i,j={};d.eventTimer.start("insert-run"),i=f.regexp(h),i&&(c=b.all(c,e),c&&c.length&&(j=g(i,c,h,!1)),a.link_phrases&&f.sendInsertedTerms(j)),d.eventTimer.stop("insert-run",!0),n||(n=!0,d.eventTimer.stop("insert-init-run",!0))}}(),insertManually:function(){var c=!1,d=b.clone(a),e=function(a){return b.map(a,function(a,b){return{iid:"00000000",phrase:b,type:j.MANUAL,url:a}})},h=function(b){a.same_proximity=b.same_proximity||a.same_proximity,a.proximity=b.proximity||a.proximity,a.per_page=b.per_page||a.per_page,a.per_phrase=b.per_phrase||a.per_phrase};return function(i,j,k){var l,m,n=!1;g.init(),a.manual_mode&&!c&&(c=!0,j=j||{},h(j),m=j.target_node||document.body,l=e(i),f.loadPhrases(l,null,[m]),a=d,f.cache.reset(),n=!0,c=!1),"function"===b.type(k)&&k(n,m)}}(),loadPhrases:function(a,c,d,e){b.each(a,function(a){a.phrase&&a.url&&a.iid&&(a.phrase=f.normalizePhrase(a.phrase),f.cache(a.phrase,{auc:a.auc,count:0,iid:a.iid,imp:c,phrase:a.phrase,mid:a.mid,url:a.url,type:a.type||""},c,e))}),f.hasCalled(e,!0),this.insertLinks(d,e)},normalizePhrase:function(a){return a.toLowerCase().replace(/(^\s+|\s+$)/g,"").split(/\s+/).join(" ")},onInsertApi:function(a,c,e){d.eventTimer.stop("ins"),"object"===b.type(a)&&(m=a.exp,o=a.imp_id,a.results&&this.loadPhrases(a.results,o,c,e))},regexp:function(a){var c,d,e,g=f.cache(a);return d=b.map(g,function(a,c){return b.escapeRegExp(c).split(" ").join("\\s+")}),d.length>0&&(c="(?:^|[\\s\"'\\(])("+d.join("|")+")(?=\\s|\\W*$|\\W{2})",e=new RegExp(h?"(?:"+c+"|"+h.source+")":c,"i")),e||h},sendInsertedTerms:function(d){var e=b.map(d,function(a,b){return{count:a.count,phrase:b,iid:a.iid,impId:a.imp,url:a.url,type:a.type}});e.length&&c.apiNow("inserted",{cat:a.cat,exp:m,terms:b.toJSON(e),u:window.document.location.href,v:l})}},g={init:b.destructing(b.bind(f.init,f)),initNodes:function(d){var g=[],h=[],i=[];f.enabled()&&(a.scope?(b.each(d,function(c){var d,e=b.withScope([c],a.scope,{ancestors:!0,consolidate:!0,descendants:!1,self:!0});e.length?(i.push(c),h=h.concat(e)):(d=b.withScope([c],a.scope,{ancestors:!1,consolidate:!0,descendants:!0,self:!1}),d.length&&(i=i.concat(d),h=h.concat(d)))},{timeout:!0}),i=b.unique(i),h=b.unique(h)):(i=d,h=d),Boolean(c.opt("dynamic_scope"))&&(i=b.all(i,function(a){return!b.matches(a,":has(a.vglnk)")},{timeout:!0})),i.length&&(h.length&&(g=e.getPostIds(h)),a.link_phrases&&!f.hasCalled(g)?f.getPhrases(i,g):f.insertLinks(i,g)))}},a.manual_mode&&b.extend(g,{"public":{run:f.insertManually}}),g},window.vglnk=window.vglnk||{},window.vglnk.partners_plugin=function(a,b,c){var d,e="/api/sync/status.gif",f="/api/sync.gif",g="/api/sync.js";return a=b.extend({log_links:!0,log_status:!1,pai_type:null,sync_type:null,scope:"body"},a),d={initLinkLogger:function(){c.registerProcessor(function(a){c.sendLinks("optimize",{desc:b.page.description,links:[a.href],mode:["P"],title:b.page.title,u:b.context(a).document.location.href,ver:c.opt("links_version")},{jsonp:!1})},{scope:a.scope})},logStatus:function(a){b.createEl("img").src=b.updateUrl(c.opt("sync_url"),{pathname:e,search:"?"+b.toQuery({st:a})})},run:function(){a.log_links&&d.initLinkLogger(),a.pai_type?d.sync("partner",a.pai_type):a.sync_type&&d.sync(a.sync_type)},sync:function(){var e=function(b,c,e){a.log_status&&d.logStatus(c),e&&d.sync(b,e)};return function(h,i){var j,k,l,m,n="pixel";if("partner"===h){if(!b.isArray(i)||!i.length)return;k={partner_id:i.shift()},l=f}else{if(!b.contains(["pixel","script"],h))return;i=null,k={key:c.opt("key")},"pixel"===h?l=f:(n="script",l=g)}m=b.updateUrl(c.opt("sync_url"),{pathname:l,search:"?"+b.toQuery(k)}),a.log_status&&d.logStatus("bg"),"script"===n?(d.sync("pixel",i),b.jsonp(m)):(j=b.createEl("img"),b.on(j,"load",function(){e(h,"su",i)}),b.on(j,"error",function(){e(h,"fa",i)}),j.src=m)}}()},{init:function(){d.run()}}}; \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E2BA3C3791DE1297E8E201237BD448B89174E6DA b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E2BA3C3791DE1297E8E201237BD448B89174E6DA new file mode 100644 index 0000000..be6e996 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E2BA3C3791DE1297E8E201237BD448B89174E6DA differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E338E25A20F5BD33BBCE82D4AB84717CABD07993 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E338E25A20F5BD33BBCE82D4AB84717CABD07993 new file mode 100644 index 0000000..cde5cba Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E338E25A20F5BD33BBCE82D4AB84717CABD07993 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E338E25A20F5BD33BBCE82D4AB84717CABD07993-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E338E25A20F5BD33BBCE82D4AB84717CABD07993-blob new file mode 100644 index 0000000..7a94e49 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E338E25A20F5BD33BBCE82D4AB84717CABD07993-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E379CDCC52CC4F1D09C5D053AF75B4168FA25F53 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E379CDCC52CC4F1D09C5D053AF75B4168FA25F53 new file mode 100644 index 0000000..1dfca57 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E379CDCC52CC4F1D09C5D053AF75B4168FA25F53 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E379CDCC52CC4F1D09C5D053AF75B4168FA25F53-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E379CDCC52CC4F1D09C5D053AF75B4168FA25F53-blob new file mode 100644 index 0000000..7291891 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E379CDCC52CC4F1D09C5D053AF75B4168FA25F53-blob @@ -0,0 +1,1110 @@ +/* Bundle Includes: + * css/toast.css + * css/general.css + * css/megainput.css + * css/vars/text-input.css + * css/retina-images.css + */ + +.toast-rack{ + box-sizing:border-box; + display:flex; + flex-direction:column; + position:relative +} +.rtl .toast-rack{ + direction:rtl +} +.toast-rack *{ + box-sizing:border-box +} +.toast-rack.top{ + flex-direction:column-reverse; + justify-content:end +} +.toast-rack.start{ + flex-direction:row-reverse; + justify-content:end +} +.toast-rack.end{ + flex-direction:row +} +.toast-rack .toast{ + align-items:center; + display:flex; + justify-content:space-between; + margin:auto; + opacity:0; + transition:opacity .1s ease-in +} +.toast-rack .toast .icon,.toast-rack .toast button{ + flex-grow:0; + flex-shrink:0 +} +.toast-rack .toast button{ + border:none; + cursor:pointer; + outline:none +} +.toast-rack .toast button.close{ + align-items:center; + background:none; + display:flex; + flex-shrink:0; + justify-content:center +} +.toast-rack .toast .message{ + width:100% +} +.toast-rack .toast-slot{ + flex-grow:0; + flex-shrink:0 +} +.toast-rack.bottom .toast-slot,.toast-rack.top .toast-slot{ + flex-grow:0; + flex-shrink:0; + height:0; + transition:height .1s ease-in +} +.toast-rack.end .toast-slot,.toast-rack.start .toast-slot{ + transition:width .1s ease-in; + width:0 +} +.toast-rack .visible{ + opacity:1; + transition-delay:.1s +} +.toast-rack i{ + --icon-size:24px; + display:block; + flex-grow:0; + flex-shrink:0 +} +.toast-rack i.icon-settings{ + animation:rotate 2s linear infinite +} +.toast-rack .toast-icon:not(:first-child){ + -webkit-margin-start:12px; + margin-inline-start:12px +} +.toast-rack .toast-icon.red{ + --mask-color:var(--label-red) +} +.toast-rack .toast-icon.orange{ + --mask-color:var(--label-orange) +} +.toast-rack .toast-icon.yellow{ + --mask-color:var(--label-yellow) +} +.toast-rack .toast-icon.green{ + --mask-color:var(--label-green) +} +.toast-rack .toast-icon.blue{ + --mask-color:var(--label-blue) +} +.toast-rack .toast-icon.purple{ + --mask-color:var(--label-purple) +} +.toast-rack .toast-icon.grey{ + --mask-color:var(--label-grey) +} +.toast-rack .icon.upload{ + background-position:-86px -902px +} +.global-toast-container{ + bottom:0; + display:flex; + justify-content:center; + padding:4px; + pointer-events:none; + position:fixed; + width:100%; + z-index:2000 +} +.global-toast-container .toast-rack{ + pointer-events:auto +} +.global-toast-container .toast-rack .toast{ + --min-toast-height:64; + --mask-color:var(--text-color-high); + background:var(--surface-main); + border-radius:8px; + box-shadow:var(--toast-shadow); + color:var(--text-color-high); + font-size:14px; + height:var(--toast-height); + line-height:20px; + padding:14px; + width:640px +} +.global-toast-container .toast-slot{ + padding:4px 0 +} +.global-toast-container .toast-rack.bottom .toast-slot.open,.global-toast-container .toast-rack.top .toast-slot.open{ + height:calc(var(--toast-height) + 8px) +} +.global-toast-container .toast-rack .toast .message{ + margin:0 12px +} +.global-toast-container .toast-rack .toast button{ + background:var(--surface-grey-2); + border-radius:4px; + color:var(--text-color-high); + height:36px +} +.global-toast-container .toast-rack .toast button:not(:last-child){ + -webkit-margin-end:8px; + margin-inline-end:8px +} +.global-toast-container .toast-rack .toast button.action{ + padding:8px 12px +} +.global-toast-container .toast button.close{ + height:36px; + padding:0; + width:36px +} +.global-toast-container .toast span.link-text{ + color:var(--text-color-medium); + font:var(--text-body2); + margin-left:12px +} +.alert-toast-container{ + margin-bottom:8px; + position:relative +} +.alert-toast-container .toast-rack .toast{ + --min-toast-height:48; + --mask-color:var(--text-color-high); + background:var(--surface-main); + border-radius:8px; + box-shadow:var(--toast-shadow); + color:var(--text-color-high); + font:var(--text-body1); + height:48px; + max-width:512px; + min-width:200px; + padding:8px +} +.alert-toast-container .toast-rack.bottom .toast,.alert-toast-container .toast-rack.top .toast{ + height:var(--toast-height) +} +.alert-toast-container .toast-rack.end .toast,.alert-toast-container .toast-rack.start .toast{ + height:48px; + margin:0 16px; + width:48px +} +.alert-toast-container .toast-rack .toast button{ + background:var(--surface-grey-2); + border-radius:4px; + color:var(--text-color-high) +} +.alert-toast-container .toast-rack .toast button.action{ + font:var(--text-body1); + height:24px; + padding:0 12px +} +.alert-toast-container .toast-rack .toast button.close{ + -webkit-margin-start:8px; + margin-inline-start:8px; + padding:0 +} +.alert-toast-container .toast-rack .toast .message{ + margin:0 12px +} +.alert-toast-container .toast-rack.top .toast-slot{ + width:intrinsic; + width:-moz-max-content; + width:max-content +} +.alert-toast-container .toast-rack.bottom .toast-slot,.alert-toast-container .toast-rack.top .toast-slot{ + padding:8px 0 +} +.alert-toast-container .toast-rack.bottom .toast-slot.open,.alert-toast-container .toast-rack.top .toast-slot.open{ + height:calc(var(--toast-height) + 8px) +} +.alert-toast-container .toast-rack.end .toast-slot,.alert-toast-container .toast-rack.start .toast-slot{ + padding:0 8px +} +.alert-toast-container .toast-rack.end .toast-slot.open,.alert-toast-container .toast-rack.start .toast-slot.open{ + width:58px +} +.alert-toast-container .toast-rack .toast-slot.high .toast{ + background-color:var(--label-red) +} +.alert-toast-container .toast-rack .toast-slot.medium .toast{ + background-color:var(--label-orange) +} +.alert-toast-container .toast-rack .toast-slot.low .toast{ + background-color:var(--label-green) +} +.alert-toast-container .toast-rack .toast-slot.high .toast,.alert-toast-container .toast-rack .toast-slot.low .toast,.alert-toast-container .toast-rack .toast-slot.medium .toast{ + --mask-color:#fff; + border:none; + color:#fff +} +.alert-toast-container .toast-rack .toast-slot.high .close,.alert-toast-container .toast-rack .toast-slot.low .close,.alert-toast-container .toast-rack .toast-slot.medium .close{ + background-color:initial +} + +.hidden{ + display:none !important +} +.o-hidden{ + opacity:0 !important +} +.v-hidden,.vo-hidden{ + visibility:hidden !important +} +.vo-hidden{ + opacity:0 !important +} +.disabled{ + cursor:default !important; + opacity:.5 +} +.visible{ + opacity:1 !important +} +.mega-dialog p,.selectable-txt,.selectable-txt *,input,textarea{ + user-select:text !important; + -webkit-user-select:text !important +} +.txt-bold{ + font-family:LatoWebBold,source_sans_proregular,Arial; + font-weight:700 +} +.txt-light{ + font-family:LatoWebLight,source_sans_proregular,Arial; + font-weight:300 +} +.txt-green{ + color:var(--text-color-success) +} +.txt-dark{ + color:var(--text-color-high) +} +.underline-txt{ + outline-color:none; + text-decoration:underline +} +.red,a.red,a.red:active,a.red:hover,a.red:link,a.red:visited{ + color:var(--text-color-error) +} +.required-red{ + color:var(--text-color-error) !important +} +a.green,a.green:active,a.green:hover,a.green:link,a.green:visited{ + color:var(--text-color-success) +} +.page-title-txt,h1{ + color:var(--text-color-high); + font:var(--text-h1) +} +.hero-txt,h2{ + color:var(--text-color-high); + font:var(--text-h2) +} +.hero-txt.txt-light{ + font-family:LatoWebLight,source_sans_proregular,Arial +} +.headline-txt,h3{ + color:var(--text-color-medium); + font:var(--text-h3) +} +h4{ + font-size:20px +} +h4,h5{ + color:var(--text-color-medium); + display:inline-block; + line-height:24px +} +h5{ + font-size:16px +} +.content-txt{ + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body2); + padding:0; + position:relative +} +.title-txt{ + font:var(--text-h2) +} +.subtitle-txt,.title-txt{ + color:var(--text-color-high); + display:inline-block +} +.subtitle-txt{ + font:var(--text-h3) +} +.fmholder .content-txt{ + color:var(--text-color-low); + font:var(--text-body2) +} +.default-txt,h6{ + font-size:14px; + padding:0 +} +.default-txt,.default-txt-small,h6{ + color:#333; + display:inline-block; + line-height:20px; + position:relative +} +.caption-txt,.default-txt-small{ + font-size:13px +} +.caption-txt{ + color:#999; + display:inline-block; + line-height:20px; + position:relative +} +.half-sized-block{ + box-sizing:border-box; + float:left; + padding:0 0 0 12px; + position:relative; + width:50% +} +.half-sized-block.l,.half-sized-block:first-child{ + padding:0 12px 0 0 +} +.register-loading-icon{ + background:transparent url(../imagery/mega-ajax-loader-gray.771e6a3fab881b3d.gif) no-repeat scroll 0 0 / 16px 16px; + display:none; + height:16px; + position:absolute; + right:10px; + top:10px; + width:16px; + z-index:10 +} +.loading .register-loading-icon{ + display:block +} +.register-loading-icon img{ + width:16px +} + +.mega-input{ + align-items:center; + box-sizing:border-box; + display:inline-flex; + height:36px; + max-width:100%; + padding:2px 0; + position:relative; + text-align:start; + vertical-align:top; + white-space:nowrap; + width:100% +} +.mega-input input:-webkit-autofill{ + -webkit-text-fill-color:var(--text-color-high); + box-shadow:0 0 0 50px var(--stroke-main) inset +} +.mega-input input::placeholder,.mega-input textarea::placeholder{ + font:var(--text-body1) +} +.mega-input.halfSize-l{ + float:left; + width:48% +} +.mega-input.halfSize-r{ + float:right; + width:48% +} +.mega-input.inline{ + width:auto +} +.mega-input.dropdown-input>span,.mega-input input,.mega-input textarea{ + background-color:initial; + border:none; + box-sizing:border-box; + color:var(--text-color-high); + cursor:text; + flex:1; + font:var(--text-body1); + overflow:hidden; + padding:2px 8px; + position:relative; + text-overflow:ellipsis; + white-space:nowrap; + width:100%; + z-index:11 +} +.mega-input textarea{ + padding:8px; + resize:none +} +.mega-input>i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + -webkit-margin-start:3px; + border-radius:0; + display:block; + flex-shrink:0; + float:none; + margin-inline-start:3px; + padding:0; + position:relative; + transition:var(--transition-color) +} +.mega-input.active>i,.mega-input:hover>i{ + --mask-color:var(--icon-active) +} +.mega-input>input+i,.mega-input>span+i{ + --mask-color:var(--icon-inactive); + -webkit-margin-end:3px; + margin:0; + margin-inline-end:3px +} +.mega-input.active>input+i,.mega-input.active>span+i,.mega-input:hover>input+i,.mega-input:hover>span+i{ + --mask-color:var(--icon-rest) +} +.mega-input:before{ + border:solid var(--stroke-mid-grey); + border-width:0 0 1px; + box-sizing:border-box; + content:""; + height:100%; + left:0; + position:absolute; + top:0; + transition:var(--transition-border); + width:100% +} +.mega-input.box-style{ + height:38px; + min-width:150px +} +.mega-input.box-style input::placeholder{ + opacity:.9 +} +.mega-input.box-style:before{ + background:var(--surface-grey-1); + border-color:var(--stroke-grey-2); + border-radius:4px; + border-width:1px +} +.mega-input.box-style.solid:before{ + background:var(--surface-grey-2) +} +.mega-input.box-style>i{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.mega-input.box-style .mega-input-dropdown{ + top:-6px +} +.mega-input.box-style.title-ontop .mega-input-title{ + top:9px +} +.mega-input.box-style.title-ontop.with-icon .mega-input-title{ + -webkit-padding-start:40px; + color:var(--text-color-high); + padding-inline-start:40px +} +.mega-input.box-style.textarea{ + height:auto; + line-height:0 +} +.mega-input.box-style.textarea textarea{ + box-sizing:border-box; + min-height:100px; + padding:0 8px; + position:relative; + z-index:1 +} +.mega-input.box-style.textarea .textarea-scroll{ + box-sizing:border-box; + height:100px; + margin:8px 0; + overflow:hidden; + position:relative; + width:100% +} +.mega-input.dropdown-input.text-style{ + border-radius:4px; + min-width:auto; + transition:var(--transition-bg-color); + width:auto +} +.mega-input.text-style:before{ + display:none +} +.mega-input.text-style>input+i,.mega-input.text-style>span+i{ + --mask-color:var(--icon-active); + -webkit-margin-end:0; + margin-inline-end:0 +} +.mega-input.dropdown-input.text-style:hover{ + background:var(--button-hover) +} +.mega-input:hover:before{ + border-color:var(--input-text-underline-hover) +} +.mega-input.active:before{ + border-color:var(--input-text-underline-active) +} +.mega-input.error:before{ + border-color:var(--input-text-underline-error) +} +.mega-input.error .title{ + opacity:1; + visibility:visible +} +.mega-input.disabled{ + cursor:default; + opacity:1 +} +.mega-input.disabled:before{ + display:none +} +.mega-input.box-style.disabled,.mega-input.text-style.disabled{ + opacity:.5 +} +.mega-input.box-style.disabled:before{ + border-color:var(--stroke-mid-grey); + display:block +} +.mega-input.dropdown-input.disabled>span{ + cursor:default +} +.mega-input.title-ontop{ + margin:20px 0 +} +.mega-input.title-ontop input::placeholder{ + opacity:0 +} +.mega-input.title-ontop .mega-input-title{ + -webkit-padding-start:8px; + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body1); + left:0; + padding-inline-start:8px; + position:absolute; + top:8px; + transition:font-size .2s ease-in,color .2s ease-in,top .2s cubic-bezier(.4, 0, 1, 1); + z-index:10 +} +.mega-input.title-ontop.with-icon .mega-input-title{ + -webkit-padding-start:35px; + padding-inline-start:35px +} +.mega-input.title-ontop.active .mega-input-title,.mega-input.title-ontop.birth .mega-input-title,.mega-input.title-ontop.box-style .mega-input-title,.mega-input.title-ontop.dropdown-input .mega-input-title,.mega-input.title-ontop.valued .mega-input-title{ + color:var(--text-color-low); + font:var(--text-body2); + top:-20px +} +.mega-input.small-txt input{ + font:var(--text-body1) +} +.mega-input.small-txt input::placeholder,.mega-input.title-ontop.active.small-txt .mega-input-title,.mega-input.title-ontop.small-txt .mega-input-title,.mega-input.title-ontop.valued.small-txt .mega-input-title{ + font:var(--text-body2) +} +.mega-input.dropdown-input{ + cursor:pointer; + min-width:150px +} +.mega-input.dropdown-input input{ + height:0; + margin:0; + min-width:auto; + padding:0; + position:absolute; + width:0 +} +.mega-input.dropdown-input>span{ + cursor:pointer; + z-index:auto +} +.mega-input-dropdown{ + background:var(--surface-main); + border:var(--context-menu-border); + border-radius:12px; + box-shadow:0 5px 10px 0 rgba(0, 0, 0, .3); + box-sizing:border-box; + font-size:0; + min-width:200px; + padding:8px 0; + position:absolute; + transition:var(--transition-opacity); + z-index:150 +} +.mega-input .mega-input-dropdown{ + left:-9px; + min-width:calc(100% + 16px); + top:-7px +} +.ps .mega-input .mega-input-dropdown{ + min-width:auto; + position:fixed +} +.mega-input-dropdown .dropdown-scroll{ + max-height:288px; + max-width:100%; + position:relative; + z-index:1 +} +.mega-input-dropdown .option{ + --mask-color:var(--icon-rest); + align-items:center; + background:var(--surface-main); + border-radius:4px; + color:var(--text-color-medium); + cursor:pointer; + display:flex; + font:var(--text-body1); + margin:0 8px; + min-height:32px; + outline:none; + padding:0 8px; + text-align:start; + transition:var(--transition-bg-color), var(--transition-color) +} +.mega-input-dropdown .ps--active-y .option{ + margin-right:14px +} +.mega-input-dropdown .option.template{ + display:none +} +.mega-input-dropdown .option span{ + flex:1; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.mega-input-dropdown .option.active,.mega-input-dropdown .option:hover{ + --mask-color:var(--icon-active); + background:var(--button-hover); + color:var(--text-color-high) +} +.mega-input-dropdown .option i{ + --icon-size:24px; + -webkit-margin-end:8px; + margin:0; + margin-inline-end:8px; + transition:var(--transition-color) +} +.mega-input-dropdown .option span+i{ + -webkit-margin-start:8px; + margin:0; + margin-inline-start:8px +} +.mega-input-dropdown .option i.icon-check{ + --icon-size:16px; + display:none +} +.mega-input-dropdown .option.active i.icon-check{ + display:block +} +.mega-input .message-container{ + background:var(--banner-background-info); + border:1px solid var(--banner-border-info); + border-radius:4px; + box-sizing:border-box; + color:var(--banner-text-info); + display:none; + font:var(--text-body1); + left:0; + padding:2px; + position:absolute; + text-align:center; + text-overflow:ellipsis; + top:40px; + white-space:normal; + width:100% +} +.mega-input.halfSize-l .message-container{ + width:208% +} +.mega-input.error .message-container{ + background:var(--banner-background-error); + border-color:var(--banner-border-error); + color:var(--banner-text-error) +} +.mega-input.success .message-container{ + background:var(--banner-background-success); + border-color:var(--banner-border-success); + color:var(--banner-text-success) +} +.mega-input.warning .message-container{ + background:var(--banner-background-warning); + border-color:var(--banner-border-warning); + color:var(--banner-text-warning) +} +.mega-input.fix-msg .message-container,.mega-input.msg .message-container{ + display:inline-block +} +.mega-input.fix-msg .message-container{ + background:none; + border:none; + color:var(--text-color-medium); + padding:0; + text-align:left +} +.mega-input.fix-msg.error .message-container{ + color:var(--banner-text-error) +} +.mega-input .pass-visible{ + cursor:pointer; + opacity:.7; + right:4px; + transition:opacity .2s; + z-index:12 +} +.mega-input .pass-visible:hover{ + opacity:1 +} +.mega-input .account-pass-lines{ + -webkit-margin-end:4px; + background:var(--surface-mid-grey); + border-radius:2px; + margin-inline-end:4px +} +.mega-input .register-pass-status-line{ + border-radius:2px; + height:20px +} +.mega-input .good1 .register-pass-status-line{ + background-color:var(--password-status-veryweak); + height:4px; + margin-top:16px; + width:4px +} +.mega-input .good2 .register-pass-status-line{ + background-color:var(--password-status-weak); + height:8px; + margin-top:12px; + width:4px +} +.mega-input .good3 .register-pass-status-line{ + background-color:var(--password-status-medium); + height:12px; + margin-top:8px; + width:4px +} +.mega-input .good4 .register-pass-status-line{ + background-color:var(--password-status-good); + height:16px; + margin-top:4px; + width:4px +} +.mega-input .good5 .register-pass-status-line{ + background-color:var(--password-status-strong); + height:20px; + margin-top:0; + width:4px +} +.mega-input .account.password-status{ + color:var(--password-status-veryweak); + display:none; + font-family:var(--text-font-family-black); + font-size:14px; + line-height:24px; + margin:0 4px +} +.mega-input .account.password-status.good2{ + color:var(--password-status-weak) +} +.mega-input .account.password-status.good3{ + color:var(--password-status-medium) +} +.mega-input .account.password-status.good4{ + color:var(--password-status-good) +} +.mega-input .account.password-status.good5{ + color:var(--password-status-strong) +} +.mega-input .account.password-status.checked{ + display:block +} +.mega-input .register-loading-icon{ + background:transparent url(../imagery/mega-ajax-loader-gray.771e6a3fab881b3d.gif) no-repeat scroll 0 0 / 16px 16px; + display:none; + height:16px; + width:16px +} +.mega-input .loading .register-loading-icon{ + display:block +} +.mega-input .register-loading-icon img{ + width:16px +} +.mega-textarea{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:2px; + box-sizing:border-box; + margin-top:16px; + padding:0 +} +.mega-textarea .textarea-clone,.mega-textarea textarea{ + background:var(--surface-grey-1); + border:0; + box-sizing:border-box; + color:var(--text-color-medium); + display:block; + font:var(--text-body1); + height:80px; + margin:0; + min-height:80px; + overflow:hidden; + padding:0 12px; + position:relative; + resize:none; + width:100%; + word-break:break-word; + z-index:1 +} +.mega-textarea .textarea-clone{ + height:auto; + opacity:0; + position:absolute; + top:0; + visibility:hidden +} +.mega-textarea .textarea-scroll{ + line-height:0; + margin:8px 0; + max-height:80px +} + +.mega-input{ + + --password-status-strong:#4bb8f3; + --password-status-good:#6dcc50; + --password-status-medium:#f9a646; + --password-status-weak:#f4ce4a; + --password-status-veryweak:#ff333a +} + +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:1.5dppx){ +body.pro:after{ + content:url(../imagery/mega-payment-animation-2x.5403cf867cab0799.gif) +} +.bitcoin-invoice-dialog .qr-code-mega-icon,.mega-dialog.bitcoin-invoice-dialog .clock-icon,.payment-result-icon{ + background-image:url(../imagery/mega-bitcoin-2x.497e9fe48822a5f0.png); + background-size:200px auto +} +.provider-icon{ + background-image:url(../imagery/mega-payment-provider-icons-2x.d4b9207d7048764d.png); + background-size:20px auto +} +.mega-dialog.cancel-subscription-st2 .blue-success-icon{ + background-image:url(../imagery/mega-bitcoin-2x.497e9fe48822a5f0.png); + background-size:200px auto +} +.icoming-call-button{ + background-image:url(../imagery/mega-chat-sprite-2x.af225a0c23f9250b.png?v=2); + background-size:72px auto +} +.top-context-close{ + background-image:url(../imagery/mega-context-top-2x.8e9d4d41176193d1.png); + background-size:27px auto +} +.camera-bottom-icon,.camera-top-icon,.default-dropdown-item.icon,.download-dialog-icon,.download-icon,.download-sprite,.download-user-icon,.download.error-big-icon,.download.error-text.cross-icon,.download.error-text.error-icon,.download.error-text.na-icon,.mega-list-arrow,.megasync-dark-logo,.megasync-icon,.megasync-info-arrow,.megasync-logo,.megasync-table table td span,.megasync-table table th span,.new-download-red-button,.new-download-sync-app,button.download-button.down-arrow,button.download-button.to-clouddrive{ + background-image:url(../imagery/mega-download-sprite-2x.aa9482fe6c76c2a8.png); + background-size:257px auto +} +.account-history-drop-items.active,.account-warning-icon,.checkboxOff:after,.checkboxOn:after,.contains-value .top-clear-button,.dropdown-item.tick-item.active:after,.dropdown.close-button,.login-forgot-password,.login-register-input,.mega-dialog:not(.exceeded) .pro-plan-descr:after,.password-status-icon,.password-tooltip-arrow,.register-st2-button,.register-st2-button-arrow,.small-icon.membership,.top-clear-button,.top-login-input-block,.top-login-tooltip-arrow{ + background-image:url(../imagery/mega-top-login-sprite-2x.b7f3e5d749787609.png); + background-size:48px auto +} +.big-icons-sprite,.small-icon.membership.pro100,.tiny-icon.membership-status.pro100,i.big-icons-sprite{ + background-image:url(../imagery/mega-big-icons-2x.c51d146428b70fe3.png); + background-size:192px auto +} +.fm-dialog-close.small,.pro-bottom-info-header:before,.pro-icon,.reg-st3-save-icon,.reg-st5-info-icon,.resend-email-button,.small-icon.blue-arrow,.small-icon.green-arrow,.toast-close-button{ + background-image:url(../imagery/mega-register-big-sprite-2x.a28214807b2a93cd.png); + background-size:200px auto +} +.terms-agent-info{ + background-image:url(../imagery/mega-terms-icons-2x.bb8d0cddacf924b4.png); + background-size:14px auto +} +.team-social-icon{ + background-image:url(../imagery/mega-about-sprite-2x.e7380808f7e68101.png); + background-size:72px auto +} +.privacy-company-bott .st-quote-left,.privacy-company-bott .st-quote-right,.privacy-company-icon{ + background-image:url(../images/mega/privacy-sprite@2x.png); + background-size:130px auto +} +.widget-arrow,.widget-arrows,.widget-circle,.widget-icon{ + background-image:url(../imagery/mega-widget-progress-2x.ead142ee4c03e65e.png); + background-size:40px auto +} +.affiliate-input-block.select,.new-affiliate-star,ul.bot-ul li span,ul.can-ul li span,ul.cannt-ul li span,ul.mid-ul li span,ul.top-ul li span{ + background-image:url(../imagery/mega-new-affiliate-sprite-2x.86b2905360e3997d.png); + background-size:1500px auto +} +.contact-us-revamp h1,.contact-us .contact-new-title:before{ + background-image:url(../imagery/mega-contact-us-sprite-2x.f4afbb36e8eb141.png); + background-size:80px auto +} +.dev-new-app-big-icon,.dev-new-app-settings,.dev-new-button,.dev-new-table-icon,.dev-no-apps-txt,.dev-short-bl-icon,.new-bottom-pages .new-right-content-block li,.new-left-menu-icon,.new-left-submenu-item{ + background-image:url(../imagery/mega-sdk-sprite-2x.e315f9045d34f5e0.png); + background-size:904px auto +} +.blog-minus-sign,.blog-new-arrow,.blog-new-back,.blog-new-forward,.blog-new-negative,.blog-new-not-recomend,.blog-new-positive,.blog-new-recomend,.blog-new-search,.blog-new-strong-recomend,.blog-pagination-button.next,.blog-pagination-button.previous,.blog-pagination-button.to-the-beggining,.blog-pagination-button.to-the-end,.blog-plus-sign,.fm-breadcrumbs.calendar,.rss-view-all,.social-arrow,.social-icon{ + background-image:url(../imagery/mega-blog-new-sprite-2x.18ab7aae0423e84e.png); + background-size:217px auto +} +.help-listing,.help-nw .dev-new-button,.help-short-icon,.new-left-menu-icon.help-icon{ + background-image:url(../imagery/mega-help-new-sprite-2x.aa329ef118dc02a7.png); + background-size:886px auto +} +.opensource-icon,.opensource-top-icon{ + background-image:url(../imagery/mega-opensource-2x.47d7e3bfbe0ca589.png); + background-size:100px auto +} +.loading-info li:after{ + background-image:url(../imagery/mega-loading-sprite-2x.dc2b6fc8a2612d78.png); + background-size:222px auto +} +.new-bottom-pages .blog-new-full p.strong-paragraph.new-blog-icon{ + background-image:url(../imagery/mega-blogs-blog-post-sprite1-2x.aa7e0564c83f68cb.png); + background-size:36px auto +} +.dialog-empty-icon,.empty-icon,.fm-empty-cloud-bg,.fm-empty-contacts-bg,.fm-empty-conversations-bg,.fm-empty-filter-bg,.fm-empty-folder-bg,.fm-empty-folder-link-bg,.fm-empty-incoming-bg,.fm-empty-search-bg,.fm-empty-transfers-bg,.fm-empty-trashbin-bg,.fm-invalid-folder-bg{ + background-image:url(../imagery/mega-empty-sprite-2x.55c88969c1985528.png); + background-size:294px auto +} +.blog-new-full ul ul li{ + background-image:url(../imagery/mega-dev-point-gray-new.7c77b167927d489c.png); + background-size:39px auto +} +.fm-bandwidth-dashed,.fm-bandwidth-icon{ + background-image:url(../imagery/mega-quota-sprite-2x.b1fa0c9357cb27b5.png); + background-size:240px auto +} +.backup-download-block,.backup-notification-icon,.login-register-input.fail,.login-register-input.green-tick,.recover-upload-block,.reset-account-lock-image,.restore-uploading-status-icon{ + background-image:url(../imagery/mega-encr-sprite-2x.c517867885897e01.png); + background-size:216px +} +.huge-white-icon,.shared-link.small-icon{ + background-image:url(../imagery/mega-chat-static-sprite-2x.da2647a4df373fe7.png); + background-size:68px auto +} +#mega-text-editor .txt-editor-download-btn .txt-editor-download-btn-icon,.download.thumb-hover-icon,.file-settings-icon:after,.files-grid-view.fm .column-settings:before,.fm-account-button.megadrop:before,.grid-url-arrow:after,.icons-sprite,.improved-recovery-steps .nav-back-icon,.medium-icon.icons-img,.mega-dialog.resume-transfer .resume-transfers-button .icon,.megasync-transfer .toast-col:first-child span:before,.semi-big-icon.icons-img,.settings-menu-arrow,.small-icon.clock,.small-icon.context,.small-icon.red-lens,.small-icon.red-play,.small-icon.small-play-icon,.top-search-button,.transfer-panel-title span:before,.viewer-mid-button,i.icons-sprite,i.small-icon.icons-sprite{ + background-image:url(../imagery/mega-icons-sprite-2x.7ba2a039a7366753.png); + background-size:262px auto +} +#help2-main .ios-desktop-icon,#help2-main .linux-desktop-icon,#help2-main .ui-autocomplete .client,#help2-main .webclient-icon,#help2-main .windows-desktop-icon{ + background-image:url(../imagery/mega-help2-welcome_icons-2x.51f67ea97febce92.png); + background-size:250px auto +} +.achievement-complete:after,.big-104px-icon.speedometer,.big-icon.almost-full-storage,.dropdown.transfer-icon,.huge-icon.storage-icon,.huge-white-icon.achievement,.mid-white-icon,.semi-big-icon.blue-cloud,.semi-big-icon.green-speedometer,.semi-huge-icon.green-tick,.semi-huge-icon.speedometer,.semi-huge-icon.storage,.semi-small-icon.rocket{ + background-image:url(../imagery/mega-account-sprite-2x.2969ba0da7f80c1b.png); + background-size:172px auto +} +.huge-icon.achievement{ + background-image:url(../imagery/mega-big-achievements-2x.1626493fa5a255d7.png); + background-size:436px auto +} +.feedback-button,.fm-files-search i.search,.improved-recovery-steps .list-point b.megasync-logo,.languages-dialog .show-more-languages .round-arrow span,.logo,.medium-icon.rocket,.megasync-close,.new-notification-icon,.notification-txt,.nw-bottom-copyrights,.nw-bottom-social,.semi-small-icon.grey-mega,.semi-small-icon.white-mega,.semi-small-icon.yellow-triangle,.tiny-icon.green-tick,.tiny-icon.membership-status,.tiny-icon.red-cross,.top-sprite,i.account-icon,i.top-sprite{ + background-image:url(../imagery/mega-top-sprite-2x.7bd10334447ce203.png); + background-size:38px auto +} +.block-view-file-type,.contact-share-notification:before,.dragger-icon,.export-icon,.medium-file-icon,.new-download-file-icon,.share-folder-icon div,.shared-details-icon,.shared-folder-icon,.transfer-filetype-icon,table.shared-with-me .shared-folder-icon{ + background-image:url(../imagery/mega-files-icons-2x.d7b16a0f90d1b9f1.png); + background-size:399px 7652px +} +.download.big-icon,.fm-dialog-close.big,.megasync-img:before,button.megasync-slider:after{ + background-image:url(../imagery/mega-download-dialog-2x.d8f30a684764e8f9.png); + background-size:853px auto +} +.mega-dialog.properties-dialog .properties-file-icon i,.properties-file-icon i{ + background-image:url(../imagery/mega-properties-sprite-2x.50ff2ba1130edd7.png); + background-size:589px 8470px +} +.drag-n-drop.header,.drag-n-drop.info-block i,.drag-n-drop hr{ + background-image:url(../imagery/mega-overlay-sprite-2x.be6cdc26e9223cde.png); + background-size:400px auto +} +.dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-2x.215dc3955d7b0c2b.png); + background-size:660px auto +} +.es .dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-es-2x.429128d89a97fa54.png) +} +.br .dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-pt-2x.3c2d2c1c0a800dbb.png) +} +.cn .dropdown.hint-thumb{ + background-image:url(../imagery/mega-hints-sprite-cn-2x.beb2afdd09f6271.png) +} +.add-user-icon,.bandwidth-back-button,.bandwidth-text-bl .star,.bottom-info.fm-dialog-close:not(.mobile),.btn-close-dialog,.delete-contact.multiple .fm-del-contact-avatar,.dialog-sprite,.dlkey-dialog .decryption-key .icon,.duplicated-input-warning .arrow,.email .avatar-wrapper:after,.email .search-avatar:after,.embed-content .tab-icon.embed,.embed-content .tab-icon.url,.export-links-warning-close,.file-link-block .icon,.fm-dialog-close,.fm-dialogs-dropdown span,.fm-dialogs-select span,.fm-notification-info p.red:before,.full-access .context-menu-icon,.gmail .avatar-wrapper:after,.gmail .search-avatar:after,.import-contacts-info,.import-contacts-info-txt .import-arrow,.import-contacts-link span,.import-contacts-service.imported,.import-contacts-service span,.imported-notification-close,.information-icon,.information-icon div span,.mega-dialog.share-add-dialog .chat-contactspicker-no-contacts.searching .fm-empty-contacts-bg,.multiple-input-warning .arrow,.pending-indicator:after,.pending .search-avatar:after,.properties-context-arrow,.properties-share-icon,.read-and-write .context-menu-icon,.read-only .context-menu-icon,.share-dialog-icon.permissions-icon span,.share-dialog-remove-button,.share-pending-arrow,.share-search-result.selected,.shared-with-me.full-access .properties-elements-counter span,.shared-with-me.read-and-write .properties-elements-counter span,.shared-with-me.read-only .properties-elements-counter span,.widget-card .widget-maximise,.widget-card .widget-minimise,i.dialog-sprite{ + background-image:url(../imagery/mega-dialog-sprite-2x.38853398a488b093.png); + background-size:160px auto +} +.big-icon,.call-icon,.chat-topic-block.privateChat .privateChatDiv,.huge-grey-warning,.huge-icon,.medium-icon,.privateChat+.privateChatDiv,.round-icon,.semi-big-icon,.semi-small-icon,.small-icon,.tiny-icon,.verified .verified_icon,button.chat-share-nav:before,button.icon-dropdown.active,button.icon-dropdown:not(.disabled):hover,div.chat-topic-icon:before,div.message.richpreview.confirmation-icon{ + background-image:url(../imagery/mega-new-chat-sprite-2x.425fffbf279f8d9a.png); + background-size:237px auto +} +.achievements-cell .medium-icon.remind-icon,.add-user-size-icon,.arrow.asc.grid-header-star,.arrow.desc.grid-header-star,.big-icon.cloud,.big-icon.fm-s,.big-icon.speedometer,.clear-transfer-icon:after,.content-panel.dashboard .small-icon.info-icon,.context-bottom-arrow,.context-top-arrow,.create-folder-size-icon,.file-status-icon.star,.fm-account-button:before,.fm-add-user-scrolling .nw-contact-item,.fm-breadcrumbs.has-next-button,.fm-dialog-search,.fm-mega-dialog-size-icon,.fm-picker-dialog .icon,.fm-right-account-block .dialog-input-title-ontop .birth-arrow-container .down-control,.fm-right-account-block .dialog-input-title-ontop .birth-arrow-container .up-control,.fm-right-account-block .icon,.fm-right-account-block .tooltip-icon .medium-icon.info-icon,.fm-s,.fm-share-dropdown,.free .fm-right-account-block:not(.active-achievements) .bandwidth .chart.data .perc-txt,.free .fm-right-block:not(.active-achievements) .bandwidth .chart.data .perc-txt,.grid-status-icon.star,.invitation-dialog .table-cell span.asc,.invitation-dialog .table-cell span.desc,.medium-icon.cloud,.medium-icon.speedometer,.no-percs .chart.data .perc-txt,.notification-accepted,.nw-fm-left-icon.affiliate:after,.nw-fm-tree-item.contains-folders .nw-fm-arrow-icon,.nw-verified-icon,.redeem-voucher .notification-arrow,.semi-big-icon.cloud,.semi-big-icon.cloud-down,.semi-big-icon.cloud-up,.semi-big-icon.grnt-quota,.semi-big-icon.speedometer,.semi-big-icon.xscheduler,.semi-small-icon.circle,.semi-small-icon.cloud,.semi-small-icon.dots,.semi-small-icon.down-arrow,.semi-small-icon.exclamation-point,.semi-small-icon.file,.semi-small-icon.folder,.semi-small-icon.left-arrow,.semi-small-icon.left-arrow-with-dot,.semi-small-icon.linked,.semi-small-icon.right-arrow,.semi-small-icon.rounded-arrow,.semi-small-icon.rubbish,.semi-small-icon.rubbish-arrows,.semi-small-icon.star,.semi-small-icon.tick,.share-dialog-icon.permissions-icon,.share-dialog-panel-arrows,.small-icon.download-as-zip:not(.context),.small-icon.fm-s,.small-icon.folder-upload:not(.context),.small-icon.grey-plus:not(.icons-sprite),.small-icon.import-to-cloud,.small-icon.pause-icon,.small-icon.play-icon,.small-icon.refresh-icon,.sorting-menu-item.active,.sorting-menu-item.selected,.star .incoming-contact-info span.incoming-call-name,.taken-down .file-status-icon,.tiny-icon.cog,.transfer-bar-overlay div,.undecryptable .file-status-icon,.verified .nw-contact-verified-icon{ + background-image:url(../imagery/mega-fm-main-sprite-2x.a89c0122eaa552cd.png); + background-size:48px auto +} +.mega-dialog.verify-phone .achievements-icon,.verify-ph-bonus-valid-days .valid-days-title:before{ + background-image:url(../imagery/mega-mid-achievements-2x.174a4ec894926625.png); + background-repeat:no-repeat; + background-size:380px auto +} +.fm-files-view-icon-user-management,.subaccount-view-used-data .used-storage-info .folder-small-icon,.user-management-overview-bar-data .info-block .icon{ + background-image:url(../imagery/mega-fm-main-sprite-2x.a89c0122eaa552cd.png); + background-size:48px auto +} +.bus-reg-icon,.business-dashboard .folder-small-icon.ex-out-share,.fm-right-header-user-management .folder-small-icon.ex-out-share,.subaccount-view-used-data .used-storage-info .folder-small-icon.ex-in-share,.subaccount-view-used-data .used-storage-info .folder-small-icon.ex-out-share,.user-management-dialog .folder-small-icon.ex-out-share,.user-management-view .subaccount-view-used-data .used-storage-info .folder-small-icon.ex-out-share{ + background-image:url(../imagery/mega-top-sprite-2x.7bd10334447ce203.png); + background-size:38px auto +} +.fm-right-header-user-management .icon,.share-dialog-top-body .copy-link-icon,.user-management-dialog .icon,.user-management-overview-bar .icon{ + background-image:url(../imagery/mega-fm-main-sprite-2x.a89c0122eaa552cd.png); + background-size:48px auto +} +.bus-confirm-body .bus-confirmImg,.bus-reg-featureImg100{ + background-image:url(../imagery/mega-big-icons-2x.c51d146428b70fe3.png); + background-size:192px auto +} +.user-management-account-settings .icon12,.user-management-account-settings .invoice-detail .mega-logo{ + background-image:url(../imagery/mega-invoice-image-2x.57ef6d3f61505263.png); + background-size:120px auto +} +.bottom-page-icon.white-info,.bottom-page.icon.new-pages-sprite,.bottom-page.large-icon,.bottom-page.top-title:before,.cropped-page .bottom-page.big-icon,.cropped-page .bottom-page.top-title:before,.dark-notification-arrow,.megaapp-linux-arrow,.mobile-apps-button.uwp,.uwp .advertise-chat .mobile-apps-button.red span:before{ + background-image:url(../imagery/mega-new-pages-sprite-2x.4c92e0c6c9034e3d.png) !important; + background-size:376px auto +} +.auth-app-select-tooltip .app-link-arrow,.auth-app-select-tooltip .app-link-icon{ + background-image:url(../imagery/mega-2fa-auth-apps-2x.9e40bdac7372b9e1.png); + background-size:72px auto +} +.improved-recovery-steps .recover-image,.improved-recovery-steps .session-image-block,.tooltip-block .minimum-password-block .password-icon{ + background-image:url(../imagery/mega-recover-account-sprite-2x.16625400384070f9.png); + background-size:344px auto +} +.big-illustration,.register-sprite{ + background-image:url(../imagery/mega-register-sprite-2x.d352867b1b2fde7c.png); + background-size:612px auto +} +.register-page .slider-ctrl-button{ + background-image:url(../imagery/mega-business-2x.eab14dbbd8fa2387.png) !important; + background-size:367px auto +} +.context-sprite,i.context-sprite{ + background-image:url(../imagery/mega-context-sprite-2x.5ceccb25400d603a.png); + background-size:217px auto +} +.bottom-page.about-sprite,i.bottom-page.about-sprite{ + background-image:url(../imagery/mega-about-sprite-2x.e7380808f7e68101.png) !important; + background-size:525px auto +} +} diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E46BD8A7440D67ABEB09C75FD695521627EBC0B8 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E46BD8A7440D67ABEB09C75FD695521627EBC0B8 new file mode 100644 index 0000000..77252f1 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E46BD8A7440D67ABEB09C75FD695521627EBC0B8 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E4778C73F97E69CA05F880647A30C054AF37786A b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E4778C73F97E69CA05F880647A30C054AF37786A new file mode 100644 index 0000000..2ca35fd Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E4778C73F97E69CA05F880647A30C054AF37786A differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E4790F8DA3CAEB6F0CA725C232431AEC1DE3FF05 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E4790F8DA3CAEB6F0CA725C232431AEC1DE3FF05 new file mode 100644 index 0000000..f057a16 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E4790F8DA3CAEB6F0CA725C232431AEC1DE3FF05 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E4790F8DA3CAEB6F0CA725C232431AEC1DE3FF05-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E4790F8DA3CAEB6F0CA725C232431AEC1DE3FF05-blob new file mode 100644 index 0000000..2b8e70a --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E4790F8DA3CAEB6F0CA725C232431AEC1DE3FF05-blob @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["notifications-global"],{54679(a,b,c){c.d(b,{H:()=>f,v:()=>e});var d=c(59753);function e(){let a=document.getElementById("ajax-error-message");a&&(a.hidden=!1)}function f(){let a=document.getElementById("ajax-error-message");a&&(a.hidden=!0)}(0,d.on)("deprecatedAjaxError","[data-remote]",function(a){let b=a.detail,{error:c,text:d}=b;a.currentTarget===a.target&&"abort"!==c&&"canceled"!==c&&(/h,DN:()=>k,KL:()=>n,Se:()=>j,qC:()=>o,sw:()=>l});var d=c(59753),e=c(76177),f=c(54679);function g(a,b,c){return a.dispatchEvent(new CustomEvent(b,{bubbles:!0,cancelable:c}))}function h(a,b){b&&(i(a,b),(0,e.j)(b)),g(a,"submit",!0)&&a.submit()}function i(a,b){if(!(a instanceof HTMLFormElement))throw TypeError("The specified element is not of type HTMLFormElement.");if(!(b instanceof HTMLElement))throw TypeError("The specified element is not of type HTMLElement.");if("submit"!==b.type)throw TypeError("The specified element is not a submit button.");if(!a||a!==b.form)throw Error("The specified element is not owned by the form element.")}function j(a,b){if("boolean"==typeof b){if(a instanceof HTMLInputElement)a.checked=b;else throw TypeError("only checkboxes can be set to boolean value")}else{if("checkbox"===a.type)throw TypeError("checkbox can't be set to string value");a.value=b}g(a,"change",!1)}function k(a,b){for(let c in b){let d=b[c],e=a.elements.namedItem(c);e instanceof HTMLInputElement?e.value=d:e instanceof HTMLTextAreaElement&&(e.value=d)}}function l(a){if(!(a instanceof HTMLElement))return!1;let b=a.nodeName.toLowerCase(),c=(a.getAttribute("type")||"").toLowerCase();return"select"===b||"textarea"===b||"input"===b&&"submit"!==c&&"reset"!==c||a.isContentEditable}function m(a){return new URLSearchParams(a)}function n(a,b){let c=new URLSearchParams(a.search),d=m(b);for(let[e,f]of d)c.append(e,f);return c.toString()}function o(a){return m(new FormData(a)).toString()}(0,d.on)("click",".js-remote-submit-button",async function(a){let b=a.currentTarget,c=b.form;a.preventDefault();let d;try{d=await fetch(c.action,{method:c.method,body:new FormData(c),headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"}})}catch{}d&&!d.ok&&(0,f.v)()})},76177(a,b,c){function d(a){let b=a.closest("form");if(!(b instanceof HTMLFormElement))return;let c=e(b);if(a.name){let d=a.matches("input[type=submit]")?"Submit":"",f=a.value||d;c||((c=document.createElement("input")).type="hidden",c.classList.add("js-submit-button-value"),b.prepend(c)),c.name=a.name,c.value=f}else c&&c.remove()}function e(a){let b=a.querySelector("input.js-submit-button-value");return b instanceof HTMLInputElement?b:null}c.d(b,{j:()=>d,u:()=>e})},47862(a,b,c){var d,e=c(76006),f=c(54679),g=c(54650),h=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let i=class NotificationsListSubscriptionFormElement extends HTMLElement{connectedCallback(){let a=this.querySelector(".js-label-subscriptions-load");a?.addEventListener("loadend",()=>{this.subscriptionsLabels.length>0&&(this.updateCheckedState("custom"),this.updateMenuButtonCopy("custom"))})}async submitCustomForm(a){await this.submitForm(a),this.closeMenu()}async submitForm(a){a.preventDefault(),(0,f.H)();let b=a.currentTarget,c=new FormData(b),d=await self.fetch(b.action,{method:b.method,body:c,headers:{"X-Requested-With":"XMLHttpRequest",Accept:"application/json"}});if(!d.ok){(0,f.v)();return}let e=await d.json(),g=c.get("do");"string"==typeof g&&this.updateCheckedState(g),"string"==typeof g&&this.updateMenuButtonCopy(g),this.updateSocialCount(e.count),this.applyInputsCheckedPropertiesToAttributesForNextFormReset(),this.closeMenu()}updateMenuButtonCopy(a){this.unwatchButtonCopy.hidden=!("subscribed"===a||"custom"===a),this.stopIgnoringButtonCopy.hidden="ignore"!==a,this.watchButtonCopy.hidden=!("subscribed"!==a&&"custom"!==a&&"ignore"!==a)}applyInputsCheckedPropertiesToAttributesForNextFormReset(){for(let a of[...this.threadTypeCheckboxes])a.toggleAttribute("checked",a.checked)}updateCheckedState(a){for(let b of this.subscriptionButtons)b.setAttribute("aria-checked",b.value===a?"true":"false");if("custom"===a)this.customButton.setAttribute("aria-checked","true");else{for(let c of(this.customButton.setAttribute("aria-checked","false"),[...this.threadTypeCheckboxes]))(0,g.Se)(c,!1);if(void 0!==this.subscriptionsContainer){for(let d=0;d{this.customDialog.querySelector("input[type=checkbox][autofocus]")?.focus()},0)}enableApplyButtonAndCheckbox(){let a=this.customDialog.querySelectorAll('[data-type="label"]:not([hidden])');a.length>0&&(this.customSubmit.removeAttribute("disabled"),this.threadTypeCheckboxes[0].checked=!0)}closeCustomDialog(a){a.preventDefault(),a.stopPropagation(),this.menu.toggleAttribute("hidden",!1),this.customDialog.toggleAttribute("hidden",!0),setTimeout(()=>{this.customButton.focus()},0)}resetFilterLabelsDialog(a){a.preventDefault(),a.stopPropagation();for(let b=0;b{this.filterLabelsDialog.querySelector("input[type=checkbox][autofocus]")?.focus()},0)}closeFilterLabelsDialog(a){a.preventDefault(),a.stopPropagation(),this.menu.toggleAttribute("hidden",!0),this.customDialog.toggleAttribute("hidden",!1),this.filterLabelsDialog.toggleAttribute("hidden",!0)}applyFilterLabelsDialog(a){a.preventDefault(),a.stopPropagation(),this.saveCurrentLabelsState(),this.hideFilterSubtitle(),this.enableIssuesCheckbox(),this.closeFilterLabelsDialog(a)}enableIssuesCheckbox(){let a=Object.keys(this.lastAppliedLabels).length>0;a&&this.threadTypeCheckboxes.length>0&&(this.threadTypeCheckboxes[0].checked=a),this.threadTypeCheckboxesUpdated()}hideFilterSubtitle(){let a=Object.keys(this.lastAppliedLabels).length>0;this.subscriptionsSubtitle.toggleAttribute("hidden",a)}saveCurrentLabelsState(){this.lastAppliedLabels={},this.labelInputs.textContent="";for(let a=0;aa.checked);this.customSubmit.disabled=a}closeMenu(){this.details.toggleAttribute("open",!1)}constructor(...a){super(...a),this.lastAppliedLabels={}}};h([e.fA],i.prototype,"details",void 0),h([e.fA],i.prototype,"menu",void 0),h([e.fA],i.prototype,"customButton",void 0),h([e.fA],i.prototype,"customDialog",void 0),h([e.fA],i.prototype,"filterLabelsDialog",void 0),h([e.GO],i.prototype,"subscriptionButtons",void 0),h([e.GO],i.prototype,"subscriptionsLabels",void 0),h([e.fA],i.prototype,"labelInputs",void 0),h([e.fA],i.prototype,"subscriptionsSubtitle",void 0),h([e.fA],i.prototype,"socialCount",void 0),h([e.fA],i.prototype,"unwatchButtonCopy",void 0),h([e.fA],i.prototype,"stopIgnoringButtonCopy",void 0),h([e.fA],i.prototype,"watchButtonCopy",void 0),h([e.GO],i.prototype,"threadTypeCheckboxes",void 0),h([e.fA],i.prototype,"customSubmit",void 0),h([e.fA],i.prototype,"subscriptionsContainer",void 0),h([e.GO],i.prototype,"dialogLabelItems",void 0),i=h([e.Ih],i);var j=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let k=class NotificationsTeamSubscriptionFormElement extends HTMLElement{closeMenu(){this.details.toggleAttribute("open",!1)}};j([e.fA],k.prototype,"details",void 0),k=j([e.Ih],k);var l=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let m=((d=class NotificationsDialogLabelItemElement extends HTMLElement{toggleDropdownLabel(a){if(a.preventDefault(),a.stopPropagation(),this.label){let b="true"===this.label.getAttribute("aria-checked");this.setCheckedForDropdownLabel(!b),this.dispatchEvent(new CustomEvent("notifications-dialog-label-toggled",{detail:{wasChecked:b,toggledLabelId:this.labelId,templateLabelElementClone:this.hiddenLabelTemplate.cloneNode(!0)},bubbles:!0}))}}setCheckedForDropdownLabel(a){this.label.setAttribute("aria-checked",a.toString())}}).attrPrefix="",d);l([e.fA],m.prototype,"label",void 0),l([e.fA],m.prototype,"hiddenLabelTemplate",void 0),l([e.fA],m.prototype,"hiddenCheckboxInput",void 0),l([e.Lj],m.prototype,"labelId",void 0),m=l([e.Ih],m)}},a=>{var b=b=>a(a.s=b);a.O(0,["vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-06ff531"],()=>b(47862));var c=a.O()}]) +//# sourceMappingURL=notifications-global-6da884c067bb.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E5D8159724EDADA5F4C0375DE71507E2ECE6F4BB b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E5D8159724EDADA5F4C0375DE71507E2ECE6F4BB new file mode 100644 index 0000000..bc8888c Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E5D8159724EDADA5F4C0375DE71507E2ECE6F4BB differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E5D8159724EDADA5F4C0375DE71507E2ECE6F4BB-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E5D8159724EDADA5F4C0375DE71507E2ECE6F4BB-blob new file mode 100644 index 0000000..cef9504 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E5D8159724EDADA5F4C0375DE71507E2ECE6F4BB-blob @@ -0,0 +1,15638 @@ +/* Bundle Includes: + * js/vendor/nacl-fast.js + * js/authring.js + * html/js/login.js + * js/ui/export.js + * html/js/key.js + * js/ui/simpletip.js + * js/useravatar.js + * js/cms.js + * html/js/start.js + * html/js/bottompage.js + * js/filedrag.js + * js/thumbnail.js + * js/vendor/exif.js + * js/vendor/smartcrop.js + * js/vendor/jquery.qrcode.js + * js/vendor/qrcode.js + * js/ui/password-revert.js + * js/ui/publicServiceAnnouncement.js + * js/ui/megaInputs.js + * js/ui/megaInputs-underlinedText.js + * js/ui/megaInputs-currencyField.js + * html/js/developersettings.js + * html/js/repay.js + */ + +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +/* jshint newcap: false */ + +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; + + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; + + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; + + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; + + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; + + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; + + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; + + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; + + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; + + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; + + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; + + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; + + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; + + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; +} + +function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; + + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; + + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; + + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; + + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; + + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; + + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; +} + +function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); +} + +/* +* Port of Andrew Moon's Poly1305-donna-16. Public domain. +* https://github.com/floodyberry/poly1305-donna +*/ + +var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; + + var t0, t1, t2, t3, t4, t5, t6, t7; + + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; + + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; +}; + +poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; + + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; + + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; + + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; + + c = 0; + + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; + + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; + + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; + + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; + + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; + + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; + + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; + + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; + + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; + + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; + + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; + + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; + + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; +}; + +poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; + + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } + + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; + + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); + + mask = (g[9] >>> ((2 * 8) - 1)) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } + + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; +}; + +poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; + + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(buffer, 0, 16); + this.leftover = 0; + } + + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } + + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } +}; + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; +} + +function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; +} + +function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; + + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is + + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254;i>=0;--i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; + + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], + + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; + + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; + + // add + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // K + h = K[i*2]; + l = K[i*2+1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // w + h = wh[i%16]; + l = wl[i%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; + + // add + h = th; + l = tl; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); + + // add + h = bh3; + l = bl3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = th; + l = tl; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); + + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; + + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; + + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); + } + } + } + + // add + h = ah0; + l = al0; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[0]; + l = hl[0]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); + + h = ah1; + l = al1; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[1]; + l = hl[1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); + + h = ah2; + l = al2; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[2]; + l = hl[2]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); + + h = ah3; + l = al3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[3]; + l = hl[3]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); + + h = ah4; + l = al4; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[4]; + l = hl[4]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); + + h = ah5; + l = al5; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[5]; + l = hl[5]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); + + h = ah6; + l = al6; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[6]; + l = hl[6]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); + + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[7]; + l = hl[7]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); + + pos += 128; + n -= 128; + } + + return n; +} + +function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; + + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; + + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; + + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; + + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); + + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = (x[j] + 128) >> 8; + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i, mlen; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + mlen = -1; + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + mlen = n; + return mlen; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor : crypto_stream_xor, + crypto_stream : crypto_stream, + crypto_stream_salsa20_xor : crypto_stream_salsa20_xor, + crypto_stream_salsa20 : crypto_stream_salsa20, + crypto_onetimeauth : crypto_onetimeauth, + crypto_onetimeauth_verify : crypto_onetimeauth_verify, + crypto_verify_16 : crypto_verify_16, + crypto_verify_32 : crypto_verify_32, + crypto_secretbox : crypto_secretbox, + crypto_secretbox_open : crypto_secretbox_open, + crypto_scalarmult : crypto_scalarmult, + crypto_scalarmult_base : crypto_scalarmult_base, + crypto_box_beforenm : crypto_box_beforenm, + crypto_box_afternm : crypto_box_afternm, + crypto_box : crypto_box, + crypto_box_open : crypto_box_open, + crypto_box_keypair : crypto_box_keypair, + crypto_hash : crypto_hash, + crypto_sign : crypto_sign, + crypto_sign_keypair : crypto_sign_keypair, + crypto_sign_open : crypto_sign_open, + + crypto_secretbox_KEYBYTES : crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES : crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES : crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES : crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES : crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES : crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES : crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES : crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES : crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES : crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES : crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES : crypto_box_BOXZEROBYTES, + crypto_sign_BYTES : crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES : crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES : crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES : crypto_hash_BYTES +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + var t, i; + for (i = 0; i < arguments.length; i++) { + if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') + throw new TypeError('unexpected type ' + t + ', use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +nacl.util = {}; + +nacl.util.decodeUTF8 = function(s) { + var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; +}; + +nacl.util.encodeUTF8 = function(arr) { + var i, s = []; + for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i])); + return decodeURIComponent(escape(s.join(''))); +}; + +nacl.util.encodeBase64 = function(arr) { + if (typeof btoa === 'undefined') { + return (new Buffer(arr)).toString('base64'); + } else { + var i, s = [], len = arr.length; + for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i])); + return btoa(s.join('')); + } +}; + +nacl.util.decodeBase64 = function(s) { + if (typeof atob === 'undefined') { + return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0)); + } else { + var i, d = atob(s), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; + } +}; + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return false; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + if (arguments.length !== 2) + throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto; + if (typeof window !== 'undefined') { + // Browser. + if (window.crypto && window.crypto.getRandomValues) { + crypto = window.crypto; // Standard + } else if (window.msCrypto && window.msCrypto.getRandomValues) { + crypto = window.msCrypto; // Internet Explorer 11+ + } + if (crypto) { + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + crypto.getRandomValues(v); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (window.nacl = window.nacl || {})); + +/** + * @fileOverview + * Storage of authenticated contacts. + */ + +var u_authring = { 'Ed25519': undefined, + 'Cu25519': undefined, + 'RSA': undefined }; + +var authring = (function () { + "use strict"; + + /** + * @description + *

              Storage of authenticated contacts.

              + * + *

              + * A container (key ring) that keeps information of the authentication state + * for all authenticated contacts. Each record is indicated by the contact's + * userhandle as an attribute. The associated value is an object containing + * the authenticated `fingerprint` of the public key, the authentication + * `method` (e. g. `authring.AUTHENTICATION_METHOD.FINGERPRINT_COMPARISON`) + * and the key `confidence` (e. g. `authring.KEY_CONFIDENCE.UNSURE`).

              + * + *

              + * The records are stored in a concatenated fashion, with each user handle + * represented in its compact 8 byte form followed by a the fingerprint as a + * byte string and a "trust indicator" byte containing the authentication and + * confidence information. Therefore each authenticated user "consumes" + * 29 bytes of storage.

              + * + *

              + * Load contacts' authentication info with `authring.getContacts()` and save + * with `authring.setContacts()`.

              + */ + var ns = {}; + var logger = MegaLogger.getLogger('authring'); + ns._logger = logger; + + ns._initialisingPromise = false; + + /** + * "Enumeration" of authentication methods. The values in here must fit + * into 4 bits of a byte. + * + * @property SEEN {integer} + * To record a "seen" fingerprint, to be able to check for future changes. + * @property FINGERPRINT_COMPARISON {integer} + * Direct/full fingerprint comparison. + * @property SIGNATURE_VERIFIED {integer} + * Verified key's signature. + */ + ns.AUTHENTICATION_METHOD = { + SEEN: 0x00, + FINGERPRINT_COMPARISON: 0x01, + SIGNATURE_VERIFIED: 0x02 + }; + var _ALLOWED_AUTHENTICATION_METHODS = [0x00, 0x01, 0x02]; + + const isUserHandle = tryCatch((userHandle) => { + return typeof userHandle === 'string' && base64urldecode(userHandle).length === 8; + }); + + const safeStateAssert = (promise, cond) => { + if (cond === '$keyring') { + cond = u_keyring && window.u_attr && window.u_attr.keyring === u_keyring; + } + if (cond === undefined || cond) { + cond = window.u_attr && isUserHandle(window.u_handle) + && typeof u_attr === 'object' && u_attr.u === u_handle; + } + + if (!cond) { + const msg = 'The system went into an invalid state for ongoing auth-ring operations :skull:'; + + onIdle(() => { + throw new Error(msg); + }); + console.error(msg, window.u_attr); + + if (promise) { + promise.reject(EINTERNAL); + } + } + + return !!cond; + }; + + /** + * "Enumeration" of confidence in contact's key. The values in here must fit + * into 4 bits of a byte. + * + * @property UNSURE {integer} + * Direct fingerprint comparison. + */ + ns.KEY_CONFIDENCE = { + UNSURE: 0x00 + }; + var _ALLOWED_KEY_CONFIDENCES = [0x00]; + + // User property names used for different key types. + ns._PROPERTIES = { 'Ed25519': 'authring', + 'Cu25519': 'authCu255', + 'RSA': 'authRSA' }; + + /** + * Serialises a single authentication record. + * + * @param userhandle {string} + * Mega user handle. + * @param fingerprint {string} + * Fingerprint to authenticate as a byte or hex string. + * @param method {byte} + * Indicator used for authentication method. One of + * authring.AUTHENTICATION_METHOD (e. g. FINGERPRINT_COMPARISON). + * @param confidence {byte} + * Indicator used for confidence. One of authring.KEY_CONFIDENCE + * (e. g. UNSURE). + * @returns {string} + * Single binary encoded authentication record. + * @private + */ + ns._serialiseRecord = function(userhandle, fingerprint, method, confidence) { + var fingerprintString = fingerprint; + if (fingerprint.length !== 20) { + // Assuming a hex fingerprint has been passed. + fingerprintString = asmCrypto.bytes_to_string(asmCrypto.hex_to_bytes(fingerprint)); + } + return base64urldecode(userhandle) + + fingerprintString + + String.fromCharCode((confidence << 4) | method); + }; + + + /** + * Generates a binary encoded serialisation of an authentication ring + * object. + * + * @param authring {Object} + * Object containing (non-nested) authentication records for Mega user + * handles (as keys) and `fingerprint`, `method` and `confidence` as + * attributes of the `value` object. + * @returns {String} + * Single binary encoded serialisation of authentication ring. + */ + ns.serialise = function(authring) { + + var result = ''; + var record; + for (var userhandle in authring) { + if (!authring.hasOwnProperty(userhandle)) { + continue; + } + record = authring[userhandle]; + + // Skip obviously faulty records. + if ((record.fingerprint.length % 20 !== 0) + || _ALLOWED_AUTHENTICATION_METHODS.indexOf(record.method) === -1 + || _ALLOWED_KEY_CONFIDENCES.indexOf(record.confidence) === -1) { + continue; + } + + // Skip non-contact's fingerprints + if (!(userhandle in M.u && M.u[userhandle].c >= 0 && M.u[userhandle].c < 2)) { + continue; + } + + result += this._serialiseRecord(userhandle, record.fingerprint, + record.method, record.confidence); + } + + return result; + }; + + + /** + * Splits and decodes an authentication record off of a binary keyring + * serialisation and returns the record and the rest. + * + * @param serialisedRing {String} + * Single binary encoded container of authentication records. + * @returns {Object} + * Object containing three elements: `userhandle` contains the Mega + * user handle, `value` contains an object (with the `fingerprint` in a + * byte string, authentication `method` and key `confidence`) and `rest` + * containing the remainder of the serialisedRing still to decode. + * @private + */ + ns._deserialiseRecord = function(serialisedRing) { + + var userhandle = base64urlencode(serialisedRing.substring(0, 8)); + var fingerprint = serialisedRing.substring(8, 28); + var authAttributes = serialisedRing.charCodeAt(28); + var rest = serialisedRing.substring(29); + var confidence = (authAttributes >>> 4) & 0x0f; + var method = authAttributes & 0x0f; + + return { userhandle: userhandle, + value: { fingerprint: fingerprint, + method: method, + confidence: confidence }, + rest: rest }; + }; + + + /** + * Decodes a binary encoded serialisation to an authentication ring object. + * + * @param serialisedRing {String} + * Single binary encoded serialisation of authentication records. + * @returns {Object} + * Object containing (non-nested) authentication records for Mega user + * handles (as keys) and `fingerprint`, `method` and `confidence` as + * attributes of the `value` object. + */ + ns.deserialise = function(serialisedRing) { + + var rest = serialisedRing; + var container = {}; + + while (rest.length > 0) { + var result = ns._deserialiseRecord(rest); + rest = result.rest; + + // Skip obviously faulty records. + if ((result.value.fingerprint.length % 20 !== 0) + || _ALLOWED_AUTHENTICATION_METHODS.indexOf(result.value.method) === -1 + || _ALLOWED_KEY_CONFIDENCES.indexOf(result.value.confidence) === -1) { + continue; + } + + container[result.userhandle] = result.value; + } + + return container; + }; + + + /** + * Loads the ring for all authenticated contacts into `u_authring`. + * + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns.getContacts = function(keyType) { + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported authentication key type: ' + keyType); + + return MegaPromise.reject(EARGS); + } + + // This promise will be the one which is going to be returned. + var masterPromise = new MegaPromise(); + let attributePromise, fromKeys; + + if (!mega.keyMgr.generation || keyType === 'RSA') { + attributePromise = mega.attr.get(u_handle, ns._PROPERTIES[keyType], false, true); + } + else { + attributePromise = new MegaPromise((resolve) => { + fromKeys = true; + resolve(mega.keyMgr.authrings[keyType] || ENOENT); + }); + } + + attributePromise.done(function _attributePromiseResolve(result) { + if (typeof result !== 'number') { + // Authring is in the empty-name record. + u_authring[keyType] = fromKeys === true ? result : ns.deserialise(result['']); + logger.debug(`Got authentication ring for key type ${keyType}.`); + masterPromise.resolve(u_authring[keyType]); + } + else if (result === ENOENT) { + // This authring is missing. Let's make it. + logger.debug(`No authentication ring for key type ${keyType}, making one.`); + u_authring[keyType] = {}; + ns.setContacts(keyType); + masterPromise.resolve(u_authring[keyType]); + } + else { + logger.error('Error retrieving authentication ring for key type ' + + keyType + ': ' + result); + masterPromise.reject(result); + } + }); + + attributePromise.fail(function _attributePromiseReject(result) { + if (result === ENOENT) { + // This authring is missing. Let's make it. + logger.debug('No authentication ring for key type ' + + keyType + ', making one.'); + u_authring[keyType] = {}; + ns.setContacts(keyType); + masterPromise.resolve(u_authring[keyType]); + } + else { + logger.error('Error retrieving authentication ring for key type ' + + keyType + ': ' + result); + masterPromise.reject(result); + } + }); + + return masterPromise; + }; + + + /** + * Saves the ring for all authenticated contacts from `u_authring`. + * + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns.setContacts = function(keyType) { + + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported authentication key type: ' + keyType); + return MegaPromise.reject(EARGS); + } + + return this.onAuthringReady('setContacts').then(() => { + const promises = []; + + if (!mega.keyMgr.secure) { + + promises.push( + Promise.resolve( + mega.attr.set(ns._PROPERTIES[keyType], {'': ns.serialise(u_authring[keyType])}, false, true) + ) + ); + } + promises.push(mega.keyMgr.commit()); + return Promise.all(promises); + }); + }; + + + /** + * Gets the authentication state of a certain contact for a particular key type. + * + * @param userhandle {string} + * Mega user handle. + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * @return {object} + * An object describing the authenticated `fingerprint`, the + * authentication `method` and the key `confidence`. `false` in case + * of an unauthorised contact. + */ + ns.getContactAuthenticated = function(userhandle, keyType) { + assertUserHandle(userhandle); + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported key type: ' + keyType); + + return false; + } + + if (u_authring[keyType] === undefined) { + logger.error('First initialise u_authring by calling authring.getContacts()'); + + return false; + } + + if (u_authring[keyType].hasOwnProperty(userhandle)) { + return u_authring[keyType][userhandle]; + } + + return false; + }; + + + /** + * Stores a contact authentication for a particular key type. + * + * @param userhandle {string} + * Mega user handle. + * @param fingerprint {string} + * Fingerprint to authenticate as a byte or hex string. + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519' or 'RSA'. + * @param method {byte} + * Indicator used for authentication method. One of + * authring.AUTHENTICATION_METHOD (e. g. FINGERPRINT_COMPARISON). + * @param confidence {byte} + * Indicator used for confidence. One of authring.KEY_CONFIDENCE + * (e. g. UNSURE). + */ + ns.setContactAuthenticated = function(userhandle, fingerprint, keyType, + method, confidence) { + + assertUserHandle(userhandle); + + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported key type: ' + keyType); + + return; + } + if (typeof u_authring[keyType] === 'undefined') { + logger.error('First initialise u_authring by calling authring.getContacts()'); + + return; + } + if (userhandle === u_handle) { + // We don't want to track ourself. Let's get out of here. + return; + } + + var oldRecord = u_authring[keyType][userhandle]; + if (!oldRecord + || !ns.equalFingerprints(oldRecord.fingerprint, fingerprint) + || (oldRecord.method !== method) + || (oldRecord.confidence !== confidence)) { + + // Need to update the record. + u_authring[keyType][userhandle] = { + fingerprint: fingerprint, + method: method, + confidence: confidence + }; + + return ns.setContacts(keyType) + .then(() => { + // try to complete pending out/in-shares based on the new situation. + return mega.keyMgr.completePendingOutShares(); + }) + .then(() => mega.keyMgr.acceptPendingInShares()); + } + }; + + + /** + * Computes the given public key's cryptographic fingerprint. On RSA keys, + * the modulo (index 0 of key array) and exponent (index 1) are first + * concatenated. + * + * @param key {(String|Array)} + * Public key in the form of a byte string or array (RSA keys). + * @param keyType {String} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * @param format {String} + * Format in which to return the fingerprint. Valid values: "string" + * and "hex" (default: "hex"). + * @return {String} + * Fingerprint value in the requested format. + */ + ns.computeFingerprint = function(key, keyType, format) { + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported key type: ' + keyType); + + return ''; + } + if (!key) { + logger.error('Invalid key for: ' + keyType); + + return ''; + } + format = format || 'hex'; + keyType = keyType || 'Ed25519'; + + var value = key; + if (keyType === 'Ed25519' || keyType === 'Cu25519') { + if (key.length !== 32) { + logger.error('Unexpected key length for type ' + keyType + + ': ' + key.length); + + return ''; + } + } + else if (keyType === 'RSA') { + value = key[0] + key[1]; + } + else { + logger.error('Unexpected key type for fingerprinting: ' + keyType); + + return ''; + } + + if (format === "string") { + return asmCrypto.bytes_to_string(asmCrypto.SHA256.bytes(value)).substring(0, 20); + } + else if (format === "hex") { + return asmCrypto.SHA256.hex(value).substring(0, 40); + } + }; + + + /** + * Signs the given public key using our own Ed25519 key. On RSA pub keys, + * the modulo (index 0 of key array) and exponent (index 1) are first + * concatenated before signing. + * + * @param pubKey {array} + * The public key to sign. + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * @return {string} + * EdDSA signature of the key as a byte string. + */ + ns.signKey = function(pubKey, keyType) { + if (!pubKey) { + logger.error('No key to sign.'); + + return; + } + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported key type: ' + keyType); + + return; + } + var timeStamp = ns._longToByteString(Math.round(Date.now() / 1000)); + var value = pubKey; + if (keyType === 'RSA') { + value = pubKey[0] + pubKey[1]; + } + var keyString = 'keyauth' + timeStamp + value; + var detachedSignature = nacl.sign.detached(asmCrypto.string_to_bytes(keyString), + asmCrypto.string_to_bytes(u_privEd25519 + u_pubEd25519)); + return timeStamp + asmCrypto.bytes_to_string(detachedSignature); + }; + + + /** + * Verifies the signature of the given public key's against the + * contact's Ed25519 key. + * + * @param signature {string} + * EdDSA signature in byte string format. + * @param pubKey {array} + * The public key to verify. + * @param keyType {string} + * Type of key for authentication records. Values are 'Ed25519', + * 'Cu25519' or 'RSA'. + * @param signPubKey {string} + * Contact's Ed25519 public key to verify the signature. + * @return {MegaPromise} + * True on a good signature verification, false otherwise. + */ + ns.verifyKey = function(signature, pubKey, keyType, signPubKey) { + // Bail out if nothing to do. + if (ns._PROPERTIES[keyType] === undefined) { + logger.error('Unsupported key type: ' + keyType); + + return MegaPromise.resolve(null); + } + if (!signature) { + logger.warn('Cannot verify an empty signature.'); + + return MegaPromise.resolve(null); + } + + var signatureValue = signature.substring(8); + var timestamp = signature.substring(0, 8); + var timestampValue = ns._byteStringToLong(timestamp); + if (timestampValue > Math.round(Date.now() / 1000)) { + logger.error('Bad timestamp: In the future!'); + + return MegaPromise.resolve(null); + } + var value = pubKey; + if (keyType === 'RSA') { + value = pubKey[0] + pubKey[1]; + } + var keyString = 'keyauth' + timestamp + value; + return backgroundNacl.sign.detached.verify(asmCrypto.string_to_bytes(keyString), + asmCrypto.string_to_bytes(signatureValue), + asmCrypto.string_to_bytes(signPubKey)); + }; + + + /** + * Compare two fingerprints. + * + * @param fp1 {string} + * First fingerprint in byte or hex string format. + * @param fp2 {string} + * Second fingerprint. in byte or hex string format + * @return {bool} + * True on equality, `undefined` if one fingerprint is undefined, + * false otherwise. + */ + ns.equalFingerprints = function(fp1, fp2) { + if (fp1 === undefined || fp2 === undefined) { + return undefined; + } + if (fp1.length !== 20) { + fp1 = asmCrypto.bytes_to_string(asmCrypto.hex_to_bytes(fp1)); + } + if (fp2.length !== 20) { + fp2 = asmCrypto.bytes_to_string(asmCrypto.hex_to_bytes(fp2)); + } + return fp1 === fp2; + }; + + + /** + * Convert a long integer (> 32-bit) to an 8-byte bit-endian string. + * + * @param value {integer} + * Integer input. + * @return {string} + * Big-endian byte string representation. + */ + ns._longToByteString = function(value) { + if (value > 9007199254740991) { + // Check for value > Number.MAX_SAFE_INTEGER (not available in all JS). + logger.error('Integer not suitable for lossless conversion in JavaScript.'); + + return ''; + } + var result = ''; + + for (var i = 0; i < 8; i++ ) { + result = String.fromCharCode(value & 0xff) + result; + value = Math.floor(value / 0x100); + } + + return result; + }; + + + /** + * Convert an 8-byte bit-endian string to a long integer (> 32-bit). + * + * @param sequence {string} + * Big-endian byte string representation. + * @return {intenger} + * Integer representation. + */ + ns._byteStringToLong = function(sequence) { + var value = 0; + for (var i = 0; i < 8; i++) { + value = (value * 256) + sequence.charCodeAt(i); + } + // Check for value > Number.MAX_SAFE_INTEGER (not available in all JS). + if (value > 9007199254740991) { + logger.error('Integer not suitable for lossless conversion in JavaScript.'); + + return; + } + + return value; + }; + + + /** + * Purges all fingerprints from the authentication rings. + * + * @return + * void + */ + ns.scrubAuthRing = function() { + u_authring.Ed25519 = {}; + ns.setContacts('Ed25519'); + u_authring.Cu25519 = {}; + ns.setContacts('Cu25519'); + u_authring.RSA = {}; + ns.setContacts('RSA'); + }; + + + /** + * Resets the seen or verified fingerprints for a particular user. + * @param {string} userHandle The user handle e.g. EWh7LzU3Zf0 + */ + ns.resetFingerprintsForUser = function(userHandle) { + assertUserHandle(userHandle); + delete u_authring.Ed25519[userHandle]; + delete u_authring.Cu25519[userHandle]; + delete u_authring.RSA[userHandle]; + + ns.setContacts('Ed25519'); + ns.setContacts('Cu25519'); + ns.setContacts('RSA'); + }; + + + /** + * Checks if the authring was initialised (initialised = true, not initialised OR initialising = false) + * + * @returns {boolean} + */ + ns.hadInitialised = function() { + return ns._initialisingPromise === true; + }; + + /** + * Invoke authring-operation once initialization has succeed. + * + * @returns {MegaPromise} + */ + ns.onAuthringReady = async function(debugTag) { + + if (d > 1) { + logger.log('authring.onAuthringReady', debugTag); + } + + if (this.hadInitialised() === false) { + if (d) { + logger.debug('Will wait for Authring to initialize...', debugTag); + } + + await Promise.resolve(this.initAuthenticationSystem()); + } + + assert(u_authring.Ed25519, `Unexpected auth-ring failure... (${debugTag})`); + }; + + /** + * Initialises the authentication system. + * + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns.initAuthenticationSystem = function() { + + if (pfid) { + console.error('Do not initialize the authentication system on folder-links.'); + return MegaPromise.reject(EACCESS); + } + + // Make sure we're initialising only once. + if (ns._initialisingPromise !== false) { + if (ns._initialisingPromise === true) { + // Already initialised. + return MegaPromise.resolve(); + } + else if (ns._initialisingPromise instanceof MegaPromise) { + // Initialisation is in progress. + // (Don't initialise more than once, return the master promise.) + return ns._initialisingPromise; + } + else { + logger.error( + "Failed to initAuthSystem because of invalid _initialisingPromise state of: ", + ns._initialisingPromise + ); + + return MegaPromise.reject(); + } + } + + if (d) { + console.time('authring.initAuthenticationSystem'); + } + + // The promise to return. + var masterPromise = ns._initialisingPromise = new MegaPromise(); + + // Initialise basic authentication system with Ed25519 keys first. + var keyringPromise = ns._initKeyringAndEd25519(); + + keyringPromise.done(function __baseAuthSystemDone() { + var rsaPromise = window.u_privk ? ns._initKeyPair('RSA') : MegaPromise.resolve(); + var cu25519Promise = ns._initKeyPair('Cu25519'); + var comboPromise = MegaPromise.all([rsaPromise, cu25519Promise]); + + masterPromise.linkDoneAndFailTo(comboPromise); + }); + keyringPromise.fail(function __baseAuthSystemFail() { + masterPromise.reject(); + }); + + masterPromise + .done(function() { + ns._initialisingPromise = true; + }) + .fail(function() { + ns._initialisingPromise = false; + }) + .always(function() { + if (d) { + console.timeEnd('authring.initAuthenticationSystem'); + } + }); + + return masterPromise; + }; + + /** + * Initialises the key ring for private keys and the authentication key + * (Ed25519). + * + * @private + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns._initKeyringAndEd25519 = function() { + // The promise to return. + var masterPromise = new MegaPromise(); + + // XXX: u_attr.u is read-only, BUT this is a weak protection unless we make the whole object + // read-only as well..tricky, however we may want to still allow this for testing purposes.. + if (!is_karma && (typeof u_attr !== 'object' || u_attr.u !== window.u_handle || u_attr.keyring)) { + logger.error('Doh! Tampering attempt...', u_handle, [u_attr]); + + if (location.host === 'mega.nz' || is_extension) { + return masterPromise.reject(EACCESS); + } + + // eslint-disable-next-line no-alert + if (!confirm('You are about to overwrite your own account keys - is this intended?')) { + location.reload(true); + return masterPromise; + } + + logger.warn('Good luck!..'); + } + let attributePromise; + + // Load private keys (or use the ones deserialised from ^!keys). + if (mega.keyMgr.generation) { + attributePromise = new MegaPromise((resolve) => resolve(mega.keyMgr.keyring)); + } + else { + attributePromise = mega.attr.get(u_handle, 'keyring', false, false); + } + + attributePromise.done(function __attributePromiseResolve(result) { + // Ensure we're in a safe-state. + if (!safeStateAssert(masterPromise, result && typeof result === 'object')) { + return; + } + // Set local values. + u_keyring = result; + u_attr.keyring = u_keyring; + + // Ed25519 signing/authentication key. + u_privEd25519 = u_keyring.prEd255; + u_attr.prEd255 = u_privEd25519; + u_pubEd25519 = asmCrypto.bytes_to_string(nacl.sign.keyPair.fromSeed( + asmCrypto.string_to_bytes(u_privEd25519)).publicKey); + u_attr.puEd255 = u_pubEd25519; + pubEd25519[u_handle] = u_pubEd25519; + + // Run on the side a sanity check on the stored pub key. + ns._checkPubKey(u_pubEd25519, 'Ed25519'); + crypt.setPubKey(u_pubEd25519, 'Ed25519'); + + // Load authring and we're done. + + // @todo migrate getContacts() to native Promise. + Promise.all([ + Promise.resolve(authring.getContacts('Ed25519')), + Promise.resolve(authring.getContacts('Cu25519')) + ]).then((res) => { + masterPromise.resolve(res); + }).catch((ex) => { + logger.error(ex); + masterPromise.reject(ex); + }); + }); + attributePromise.fail(function __attributePromiseReject(result) { + if (result === ENOENT) { + // We don't have it set up, yet. Let's do so now. + logger.warn('Authentication system seems non-existent. Setting up ...'); + + // Ensure we're in a safe-state. + if (!safeStateAssert(masterPromise)) { + return; + } + + // Make a new key pair. + var keyPair = nacl.sign.keyPair(); + u_privEd25519 = asmCrypto.bytes_to_string(keyPair.secretKey.subarray(0, 32)); + u_attr.prEd255 = u_privEd25519; + u_pubEd25519 = asmCrypto.bytes_to_string(keyPair.publicKey); + u_attr.puEd255 = u_pubEd25519; + u_keyring = { + prEd255: u_privEd25519 + }; + u_attr.keyring = u_keyring; + pubEd25519[u_handle] = u_pubEd25519; + + // Store private keyring and public key. + var keyringPromise = mega.attr.set('keyring', u_keyring, + false, false); + var pubkeyPromise = mega.attr.set('puEd255', + base64urlencode(u_pubEd25519), + true, false); + var authringPromise = authring.getContacts('Ed25519'); + + var comboPromise = MegaPromise.all([keyringPromise, + pubkeyPromise, + authringPromise]); + masterPromise.linkDoneAndFailTo(comboPromise); + } + else { + var message = 'Error retrieving key ring: ' + result; + logger.error(message); + // Let's pass a rejection upstream. + masterPromise.reject(result); + } + }); + + return masterPromise; + }; + + + /** + * Generates a key pair and sets up all required data structures for + * insuring its authenticity. + * + * @private + * @param keyType {string} + * Key type. Allowed values: 'Cu25519'. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns._setupKeyPair = function(keyType) { + var keyPair; + var privKey; + var pubKey; + + if (keyType === 'Cu25519') { + keyPair = nacl.box.keyPair(); + privKey = asmCrypto.bytes_to_string(keyPair.secretKey); + pubKey = asmCrypto.bytes_to_string(keyPair.publicKey); + } + else { + logger.error('Unsupported key type for key generation: ' + keyType); + return MegaPromise.reject(EARGS); + } + + // Ensure we're in a safe-state. + if (!safeStateAssert(null, '$keyring')) { + return MegaPromise.reject(EACCESS); + } + + window[crypt.PRIVKEY_VARIABLE_MAPPING[keyType]] = privKey; + window[crypt.PUBKEY_VARIABLE_MAPPING[keyType]] = pubKey; + u_keyring[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + u_attr.keyring[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + u_attr[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + u_attr[crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType]] = pubKey; + crypt.getPubKeyCacheMapping(keyType)[u_handle] = pubKey; + var pubKeySignature = ns.signKey(pubKey, keyType); + var keyringPromise = mega.attr.set('keyring', u_keyring, false, false); + var pubkeyPromise = mega.attr.set(crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType], + base64urlencode(pubKey), + true, false); + var signaturePromise = mega.attr.set(crypt.PUBKEY_SIGNATURE_MAPPING[keyType], + base64urlencode(pubKeySignature), + true, false); + var authringPromise = authring.getContacts(keyType); + + return MegaPromise.all([keyringPromise, pubkeyPromise, + authringPromise, signaturePromise]); + }; + + + /** + * Initialises a key pair for use in the client. + * + * Note: It is expected that the Ed25519 private and public keys are loaded + * already. + * + * @private + * @param keyType {string} + * Key type to set. Allowed values: 'Cu25519', 'RSA'. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns._initKeyPair = function(keyType) { + // The promise to return. + var masterPromise = new MegaPromise(); + + if (keyType !== 'RSA' && keyType !== 'Cu25519') { + logger.error('Unsupported key type for initialisation: ' + keyType); + + return MegaPromise.reject(EARGS); + } + + if (keyType === 'RSA' && !window.u_privk) { + logger.error('Unable to initialize RSA keypair...'); + return MegaPromise.reject(EARGS); + } + + // Ensure we're in a safe-state. + if (!safeStateAssert()) { + return MegaPromise.reject(EACCESS); + } + + var privKey = (keyType === 'RSA') + ? u_privk + : u_keyring[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]]; + + if (privKey) { + // Fire off various API calls we need downstream. + var authringPromise = ns.getContacts(keyType); + var signaturePromise = mega.attr.get(u_handle, + crypt.PUBKEY_SIGNATURE_MAPPING[keyType], + true, false); + + // Get the public key to the private key. + var pubKey; + var pubkeyPromise; + if (keyType === 'RSA') { + pubkeyPromise = crypt.getPubKeyAttribute(u_handle, 'RSA'); + } + else { + pubKey = crypt.getPubKeyFromPrivKey(privKey, keyType); + pubkeyPromise = new MegaPromise(); + pubkeyPromise.resolve(pubKey); + } + + pubkeyPromise.done(function __pubkeyResolve(result) { + if (keyType === 'RSA') { + // Still need to fetch the RSA pub key. + pubKey = result; + } + }); + masterPromise.linkFailTo(pubkeyPromise); + + // Make sure we've got a signature. + var gotSignaturePromise = new MegaPromise(); + signaturePromise.done(function __signatureResolve(result) { + gotSignaturePromise.resolve(base64urldecode(result)); + }); + signaturePromise.fail(function __signatureReject(result) { + if (result === ENOENT) { + // Signature undefined, let's pass to make one in the next step. + gotSignaturePromise.resolve(null); + } + else { + gotSignaturePromise.reject(result); + } + }); + + // Check the signature, make one if we don't ahve one or it's inconsistent. + var sigKeyComboPromise = MegaPromise.all([gotSignaturePromise, + pubkeyPromise]); + sigKeyComboPromise.done(function __signatureComboResolve(result) { + // Ensure we're in a safe-state. + if (!safeStateAssert(masterPromise, !!result)) { + return; + } + var signature = result[0]; + if (signature) { + // Now check the key's signature. + ns.verifyKey(signature, pubKey, keyType, u_pubEd25519) + .done(function(isVerified) { + if (isVerified) { + masterPromise.resolve(); + } + else { + // Signature fails, make a good one and save it. + var pubKeySignature = authring.signKey(pubKey, keyType); + var setSignaturePromise = mega.attr.set(crypt.PUBKEY_SIGNATURE_MAPPING[keyType], + base64urlencode(pubKeySignature), + true, false); + var comboPromise = MegaPromise.all([authringPromise, + setSignaturePromise]); + masterPromise.linkDoneAndFailTo(comboPromise); + } + }); + } + else { + // Signature undefined. + signature = authring.signKey(pubKey, keyType); + mega.attr.set(crypt.PUBKEY_SIGNATURE_MAPPING[keyType], + base64urlencode(signature), + true, false); + masterPromise.resolve(); + } + + if (keyType === 'RSA') { + // We don't need the rest for RSA keys. + return; + } + + // Ensure we're in a safe-state. + if (!safeStateAssert(masterPromise, '$keyring')) { + return; + } + + // We're handling RSA keys in a legacy way, but all others like this. + window[crypt.PRIVKEY_VARIABLE_MAPPING[keyType]] = privKey; + window[crypt.PUBKEY_VARIABLE_MAPPING[keyType]] = pubKey; + u_keyring[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + u_attr[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + u_attr[crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType]] = pubKey; + u_attr.keyring[crypt.PRIVKEY_ATTRIBUTE_MAPPING[keyType]] = privKey; + crypt.getPubKeyCacheMapping(keyType)[u_handle] = pubKey; + + // Run on the side a sanity check on the stored pub key. + ns._checkPubKey(pubKey, keyType); + crypt.setPubKey(pubKey, keyType); + }); + masterPromise.linkFailTo(sigKeyComboPromise); + } + else { + // Set up what's needed for the key type. + // This should never be hit for an RSA key pair! + masterPromise.linkDoneAndFailTo(ns._setupKeyPair(keyType)); + } + + return masterPromise; + }; + + + /** + * This is a check to run on one's *own* pub key against the private key. + * + * @private + * @param pubKey {string} + * Public key to check. + * @param keyType {string} + * Key type to check. Allowed values: 'Ed25519', Cu25519'. + * @return {MegaPromise} + * A promise that is resolved when the original asynch code is settled. + */ + ns._checkPubKey = function(pubKey, keyType) { + // The promise to return. + var masterPromise = new MegaPromise(); + + if (keyType !== 'Ed25519' && keyType !== 'Cu25519') { + logger.error('Unsupported key type for pub key check: ' + keyType); + + return MegaPromise.reject(EARGS); + } + + var attributePromise = mega.attr.get(u_handle, + crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType], + true, false); + + attributePromise.done(function(result) { + var storedPubKey = base64urldecode(result); + if (storedPubKey === pubKey) { + masterPromise.resolve(true); + } + else { + logger.info('Need to update ' + keyType + ' pub key.'); + masterPromise.linkDoneAndFailTo( + mega.attr.set(crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType], + base64urlencode(pubKey), + true, false)); + } + }); + attributePromise.fail(function(result) { + logger.warn('Could not get my ' + keyType + ' pub key, setting it now.'); + masterPromise.linkDoneAndFailTo( + mega.attr.set(crypt.PUBKEY_ATTRIBUTE_MAPPING[keyType], + base64urlencode(pubKey), + true, false)); + }); + + return masterPromise; + }; + + /** + * Helper method to check whether a contact fingerprint is verified. + * @param {String} aUserHandle The user's 11-chars long handle. + * @returns {Promise} fulfilled with a Boolean indicating whether it's verified. + */ + ns.isUserVerified = promisify(function(resolve, reject, aUserHandle) { + ns.onAuthringReady('usr-v').then(function() { + var ed25519 = u_authring.Ed25519; + var verifyState = ed25519 && ed25519[aUserHandle] || false; + + resolve(verifyState.method >= ns.AUTHENTICATION_METHOD.FINGERPRINT_COMPARISON); + }).catch(reject); + }); + + /** + * Helper method to invoke whenever we do want to show crypto-specific warnings about mismatching keys etc + * @param {String} aDialogType The dialog type we do want to show. + * @param {String} aUserHandle The user's 11-chars long handle. + * @param {String} aKeyType Type of the public key the signature failed for. e.g 'Cu25519' or 'RSA' + * @param {*} optional arguments for the dialog constructor + * @type {Promise} fulfilled on completion with whatever happened... + */ + ns.showCryptoWarningDialog = promisify(function(resolve, reject, aDialogType, aUserHandle /* , ... */) { + var args = toArray.apply(null, arguments).slice(3); + + if (localStorage.hideCryptoWarningDialogs) { + logger.warn('Showing crypto warning dialogs is blocked...', aDialogType, args); + return resolve(EBLOCKED); + } + + var seenCryptoWarningDialog = JSON.parse(sessionStorage.scwd || '{}'); + var seenStoreKey = MurmurHash3(aDialogType + ':' + args, 0x7ff).toString(16); + + if (seenCryptoWarningDialog[seenStoreKey]) { + logger.info('Crypto warning dialog already seen...', aDialogType, args); + return resolve(EEXIST); + } + + // Store a seen flag straight away, to prevent concurrent invocations.. + seenCryptoWarningDialog[seenStoreKey] = 1; + sessionStorage.scwd = JSON.stringify(seenCryptoWarningDialog); + + var dialogConstructor; + + if (aDialogType === 'credentials') { + eventlog(99606, JSON.stringify([1, aDialogType[0]].concat(args.slice(0,2)))); + dialogConstructor = mega.ui.CredentialsWarningDialog; + } + else if (aDialogType === 'signature') { + eventlog(99607, JSON.stringify([1, aDialogType[0]].concat(args.slice(0,2)))); + dialogConstructor = mega.ui.KeySignatureWarningDialog; + } + else { + logger.error('Invalid crypto warning dialog type...', aDialogType, args); + return reject(EARGS); + } + + // Only show this type of warning dialog if the user's fingerprint is verified. + ns.isUserVerified(aUserHandle) + .then(function(isVerified) { + if (isVerified !== true) { + logger.debug('Not showing crypto dialog for unverified user...', aDialogType, args); + return resolve(EAGAIN); + } + + M.onFileManagerReady(tryCatch(function() { + dialogConstructor.singleton.apply(dialogConstructor, args); + resolve(true); + }, reject)); + }) + .catch(reject); + }); + + return ns; +}()); + +/** + * Desktop signin/login functions + */ +var signin = { + + /** + * Old method functions + */ + old: { + + /** + * Starts the login proceedure + * @param {String} email The user's email address + * @param {String} password The user's password + * @param {String|null} pinCode The two-factor authentication PIN code (6 digit number), or null if N/A + * @param {Boolean} rememberMe Whether the user clicked the Remember me checkbox or not + */ + startLogin: function(email, password, pinCode, rememberMe) { + + 'use strict'; + + + postLogin(email, password, pinCode, rememberMe, (result) => { + + loadingDialog.hide(); + + // Otherwise proceed with regular login + signin.proceedWithLogin(result); + }); + } + }, + + /** + * New secure method functions + */ + new: { + + /** + * Start the login process + * @param {String} email The user's email addresss + * @param {String} password The user's password as entered + * @param {String|null} pinCode The two-factor authentication PIN code (6 digit number), or null if N/A + * @param {Boolean} rememberMe A boolean for if they checked the Remember Me checkbox on the login screen + * @param {String} salt The user's salt as a Base64 URL encoded string + */ + startLogin: function(email, password, pinCode, rememberMe, salt) { + + 'use strict'; + + // Start the login using the new process + security.login.startLogin(email, password, pinCode, rememberMe, salt, function(result) { + + loadingDialog.hide(); + + // Otherwise proceed with regular login + signin.proceedWithLogin(result); + }); + } + }, + + /** + * Proceed to key generation step + * @param {Number} result The result from the API, e.g. a negative error num or the user type + */ + proceedWithKeyGeneration: function(result) { + + 'use strict'; + + u_type = result; + loadSubPage('key'); + }, + + /** + * Proceed to the login step + * @param {Number} result The result from the API, e.g. a negative error num or the user type + */ + proceedWithLogin: function(result) { + + 'use strict'; + + // Remove loading spinner from 2FA dialog + $('.mega-dialog.verify-two-factor-login.submit-button').removeClass('loading'); + + // Check and handle the common login errors + if (security.login.checkForCommonErrors(result, signin.old.startLogin, signin.new.startLogin)) { + return false; + } + + // close two-factor dialog if it was opened + if (twofactor && twofactor.loginDialog) { + twofactor.loginDialog.closeDialog(); + } + + // If successful result + if (result !== false && result >= 0) { + + // Otherwise if email confirm code is ok, proceed with RSA key generation + if (confirmok) { + signin.proceedWithKeyGeneration(result); + } + else { + // Otherwise proceed with regular login + u_type = result; + passwordManager('#login_form'); + + if (login_next) { + loadSubPage(login_next); + } + else if (page !== 'login') { + init_page(); + } + else { + loadSubPage('fm'); + } + login_next = false; + } + } + else { + // Show a failed login + $('#login-name2').megaInputsShowError().blur(); + $('#login-password2').megaInputsShowError(l[7431]).val('').blur(); + + // Close the 2FA dialog for a generic error + twofactor.loginDialog.closeDialog(); + + msgDialog('warninga', l[135], l[7431] + '.', false, function() { + $('#login-name2').select(); + }); + } + } +}; + +var login_txt = false; +var login_email = false; + + +function postLogin(email, password, pinCode, remember, loginCompletionCallback) { + 'use strict'; + + // A little helper to pass only the final result of the User Get (ug) API request + // i.e. the (user type or error code) back to the loginCompletionCallback function + var ctx = { + callback2: loginCompletionCallback, + checkloginresult: function(ctx, result) { + if (ctx.callback2) { + ctx.callback2(result); + } + } + }; + var passwordaes = new sjcl.cipher.aes(prepare_key_pw(password)); + var uh = stringhash(email.toLowerCase(), passwordaes); + + u_login(ctx, email, password, uh, pinCode, remember); +} + +function pagelogin() { + 'use strict'; + + var $formWrapper = $('.main-mid-pad.login form'); + var $email = $formWrapper.find('#login-name2'); + var $password = $formWrapper.find('#login-password2'); + + var e = $email.val().trim(); + if (e === '' || !isValidEmail(e)) { + $email.megaInputsShowError(l[141]); + $email.focus(); + } + else if ($('#login-password2').val() === '') { + $('#login-password2').megaInputsShowError(l[1791]); + $password.focus(); + } + else { + loadingDialog.show(); + $formWrapper.find('.top-dialog-login-button').addClass('loading'); + if ($formWrapper.find('.loginwarning-checkbox').hasClass('checkboxOn')) { + localStorage.hideloginwarning = 1; + } + + var email = e; + var password = $password.val(); + var rememberMe = false; + var twoFactorPin = null; + + // XXX: Set remember on by default if confirming a freshly created account + if (confirmok || $formWrapper.find('.login-check').hasClass('checkboxOn')) { + rememberMe = true; + } + + // Checks if they have an old or new registration type, after this the flow will continue to login + security.login.checkLoginMethod(email, password, twoFactorPin, rememberMe, + signin.old.startLogin, + signin.new.startLogin); + } +} + +function init_login() { + 'use strict'; + + var $formWrapper = $('.main-mid-pad.login'); + var $inputs = $('input', $formWrapper); + var $button = $('button.login-button', $formWrapper); + var $forgotPassLink = $('.top-login-forgot-pass', $formWrapper); + + if (is_extension) { + $('.extension-advise').addClass('hidden'); + } + else { + $('.extension-advise').removeClass('hidden'); + } + + if (login_email) { + $('#login-name2', $formWrapper).val(login_email); + } + + if (confirmok) { + $('.main-left-block').addClass('confirm'); + $('.main-right-block').addClass('hidden'); + $('.register-st2-txt-block').addClass('hidden'); + $('.account.small-header-txt').addClass('hidden'); + $forgotPassLink.addClass('hidden'); + $('.main-top-info-block').removeClass('hidden'); + $('span', $button).text(l[1131]); + $('.account.top-header.login').text(l[1131]); + $('.main-top-info-text').text(l[378]); + $('.login-check').addClass('hidden').next().addClass('hidden'); + } + else { + if (login_txt) { + $('.main-top-info-block').removeClass('hidden'); + $('.main-top-info-text').text(login_txt); + login_txt = false; + } + } + + $forgotPassLink.rebind('click.forgotpasslink', function() { + + var email = document.getElementById('login-name2').value; + + if (isValidEmail(email)) { + $.prefillEmail = email; + } + + loadSubPage('recovery'); + }); + + $inputs.rebind('keydown.initlogin', function(e) { + + $inputs.removeClass('errored').parent().removeClass('error'); + + if (e.keyCode === 13) { + pagelogin(); + } + }); + + $button.rebind('click.initlogin', function() { + pagelogin(); + }); + + $button.rebind('keydown.initlogin', function (e) { + if (e.keyCode === 13) { + pagelogin(); + } + }); + + // Init inputs events + accountinputs.init($formWrapper); + + if (is_chrome_firefox) { + Soon(mozLoginManager.fillForm.bind(mozLoginManager, 'login_form')); + } +} + +/** + * Functionality for the Export Link password protection feature + * + * The first implementation will use PBKDF2-HMAC-SHA512 with 100,000 rounds and a 256 bit random salt to derive a 512 + * bit key. For folder links the key is 128 bits in length and for file links the actual key is 256 bits in length. The + * first 128 or 256 bits of the derived key will be used to encrypt the actual folder/file key using a simple XOR for + * encryption. The last 256 bits of the derived key will be used as the MAC Key. Using the Encrypt then MAC principle, + * the MAC will be calculated using HMAC-SHA256. + * + * In constructing the protected link, the format is as follows: + * algorithm || file/folder || public handle || salt || encrypted key || MAC tag + * + * algorithm = 1 byte - A byte to identify which algorithm was used (for future upgradability), initially is set to 0 + * file/folder = 1 byte - A byte to identify if the link is a file or folder link (0 = folder, 1 = file) + * public handle = 6 bytes - The public folder/file handle + * salt = 32 bytes - A 256 bit randomly generated salt + * encrypted key = 16 or 32 bytes - The encrypted actual folder or file key + * MAC tag = 32 bytes - The MAC of all the previous data to ensure integrity of the link i.e. calculated as: + * HMAC-SHA256(MAC key, (algorithm || file/folder || public handle || salt || encrypted key)) + * + * The link data is then Base64 encoded and then URL encoded to remove incompatible characters e.g.: + * https://mega.nz/#P!AAA5TWTcNMs7aYZgtalahVxCffAF0JeZTKxOZQ_s2d... + * + * In receiving a protected link, the program will decode the URL, get the first byte to check which algorithm was used + * to encrypt the data (useful if algorithm changes are made in future). Then it will use the password to derive the + * same key using the same algorithm, provided salt and password. Then a MAC of the data can be calculated, if it's a + * match then the link has not been tampered with or corrupted and the real folder/file key can be decrypted and the + * original link reconstructed. If it doesn't match then an error will be shown which could mean tampering or that the + * user entered an incorrect password. + */ +var exportPassword = { + + // List of algorithms + algorithms: [ + { + // Algorithm (0) for unit testing with low rounds + name: 'PBKDF2', // Name for the Web Crypto primary PBKDF algorithm + hash: 'SHA-512', // Hash algorithm for the Web Crypto primary PBKDF algorithm + failsafeName: 'PBKDF2_HMAC_SHA512', // Name for the asmCrypto failsafe PBKDF algorithm + macName: 'HMAC_SHA256', // Name for the asmCrypto MAC algorithm + saltLength: 256, // Salt length in bits + macKeyLength: 256, // MAC key length in bits + macLength: 256, // MAC computed digest length in bits + derivedKeyLength: 512, // Desired derived key length in bits + iterations: 1000 // Number of iterations to run + }, + { + // Old algorithm (1) which used incorrect parameter order: HMAC(password, data) + name: 'PBKDF2', + hash: 'SHA-512', + failsafeName: 'PBKDF2_HMAC_SHA512', + macName: 'HMAC_SHA256', + saltLength: 256, + macKeyLength: 256, + macLength: 256, + derivedKeyLength: 512, + iterations: 100000 + }, + { + // Current algorithm (2) + name: 'PBKDF2', + hash: 'SHA-512', + failsafeName: 'PBKDF2_HMAC_SHA512', + macName: 'HMAC_SHA256', + saltLength: 256, + macKeyLength: 256, + macLength: 256, + derivedKeyLength: 512, + iterations: 100000 + } + // Future tweaks or changes in algorithms e.g. Argon2 + ], + + // The current algorithm in use for production + currentAlgorithm: 2, // 1 byte (0x02) + + /** + * Constants for folder or file type + */ + LINK_TYPE_FOLDER: 0, // 1 byte (0x00) + LINK_TYPE_FILE: 1, // 1 byte (0x01) + + + /** + * Functions for the encryption + */ + encrypt: { + + // The jQuery selector for the Export dialog + $dialog: null, + + /** + * Initialise function + */ + init: function() { + + "use strict"; + + // Cache dialog selector + this.$dialog = $('.mega-dialog.export-links-dialog', 'body'); + this.$passwordDialog = $('.mega-dialog.set-password-dialog', 'body'); + + this.updatePasswordComponentsUI(); + this.updateLinkInputValues(); + + // If they are a pro user, enable set password + if (u_attr.p) { + this.initPasswordFeatureButton(); + this.initPasswordFeatureIcon(); + this.hideSetPasswordDialog(); + } + }, + + /** + * Update protected/not protected components UI + */ + updatePasswordComponentsUI: function() { + + "use strict"; + + var $items = $('.item', this.$dialog); + var $protectedItems = $items.filter('.password-protect-link'); + var $setPasswordBtn = $('button.password', this.$dialog); + var $setPasswordBtnSpan = $('span', $setPasswordBtn); + var $removePasswordBtn = $('button.remove', this.$dialog); + var $checkboxWrap = $('.options .checkdiv', this.$dialog); + var $checkbox = $('input', $checkboxWrap); + + // Enable separate key option + $checkbox.prop('disabled', false); + $checkboxWrap.removeClass('disabled'); + + // If password protected links + if ($protectedItems.length) { + + // Show Lock icons for password protected links + $('.lock', $protectedItems).removeClass('hidden'); + + // Change Set password button state + $setPasswordBtn.addClass('encrypted'); + $setPasswordBtnSpan.text(l[737]); + + // Hide Remove password button + $removePasswordBtn.removeClass('hidden'); + + // If all links are password protected + if ($protectedItems.length === $items.length) { + + // Disable separate key option + $checkbox.prop('checked', true).trigger('click').prop('disabled', true); + $checkboxWrap.addClass('disabled'); + } + } + else { + + // Set paassword button initial state + $setPasswordBtn.removeClass('encrypted'); + $setPasswordBtnSpan.text(l[17454]); + + // Hide Remove password button + $removePasswordBtn.addClass('hidden'); + + // Hide Lock icons + $('.lock', $items).removeData('pw type').addClass('hidden'); + } + }, + + /** + * Update links/keys values + */ + updateLinkInputValues: function() { + + "use strict"; + + var isSeparateKeys = $('.options .checkdiv input', this.$dialog).prop('checked'); + var $items = $('.item:not(.password-protect-link)', this.$dialog); + + // Update not password protected Link input values + $items.get().forEach(function(e) { + + var $this = $(e); + var $linkInput = $('.item-link.link input', $this); + var $keyInput = $('.item-link.key input', $this); + var linkWithoutKey = $linkInput.data('link'); + var key = $linkInput.data('key'); + + // Set key without # or ! + $keyInput.val($keyInput.data('key')); + + // Set link + if (isSeparateKeys) { + $linkInput.val(linkWithoutKey); + } + else { + $linkInput.val(linkWithoutKey + key); + } + }); + }, + + /** + * Setup Set password button + */ + initPasswordFeatureButton: function() { + + "use strict"; + + var $setPasswordBtn = $('button.password', this.$dialog); + + // On Set paassword click + $setPasswordBtn.rebind('click.setPass', function() { + + // Unselect link items + $('.item.selected', this.$dialog).removeClass('selected'); + + // Show dialog + exportPassword.encrypt.showSetPasswordDialog(); + }); + }, + + /** + * Setup Set remove password button + */ + initRemovePasswordButton: function() { + + "use strict"; + + var $removePasswordBtn = $('button.remove', this.$dialog); + + // On Remove password click + $removePasswordBtn.rebind('click.removePass', function() { + + var $items = $('.item', this.$dialog); + + // Set links and keys into text boxes + $items.removeClass('password-protect-link'); + + // Update Password buttons and links UI + exportPassword.encrypt.updatePasswordComponentsUI(); + + // Update Link input values + exportPassword.encrypt.updateLinkInputValues(); + }); + }, + + /** + * Setup Set password Lock icon + */ + initPasswordFeatureIcon: function() { + + "use strict"; + + var $passwordIcon = $('.links-scroll .lock', this.$dialog); + var $tip = $('.dark-direct-tooltip.custom-html', this.$dialog); + var $scrollBlock = $('.links-scroll', this.$dialog); + + // Hide a tip with Password + var hidePasswordTip = function() { + + $tip.removeClass('visible'); + $('.content', $tip).text(''); + $scrollBlock.unbind('scroll.hidePassTip'); + }; + + // Init Show password icon in the tip + var initShowPasswordIcon = function($lockIcon) { + + $('.content i', $tip).rebind('click.showPass', function() { + var $this = $(this); + + if ($this.hasClass('icon-eye-reveal')) { + $this.removeClass('icon-eye-reveal').addClass('icon-eye-hidden'); + $this.prev('input').attr('type', 'text'); + $lockIcon.data('type', 'text'); + } + else { + $this.removeClass('icon-eye-hidden').addClass('icon-eye-reveal'); + $this.prev('input').attr('type', 'password'); + $lockIcon.removeData('type'); + } + }); + }; + + // Show Set password dialog on Lock icon click + $passwordIcon.rebind('click.setPass', function() { + + // Select link item + $('.item', this.$dialog).removeClass('selected'); + $(this).closest('.item').addClass('selected'); + + // Show dialog + exportPassword.encrypt.showSetPasswordDialog(); + }); + + // Show tooltip on Lock icon mouseover + $passwordIcon.rebind('mouseover.showPassTip', function() { + + var $this = $(this); + var password = $this.data('pw'); + var passwordLength = password.length + 1; + var $tipContentBlock = $('.content', $tip); + var $input; + var passwordHtml = '' + + ''; + + // Fill tip content + $tipContentBlock.safeHTML(passwordHtml); + + // Set password data + $input = $('input', $tipContentBlock); + $input.val(password).attr('size', passwordLength); + + // Show password if it has been showed before + if ($this.data('type') === 'text') { + $input.attr('type', 'text'); + $('i', $tipContentBlock).removeClass('icon-eye-reveal').addClass('icon-eye-hidden'); + } + + // Init Show password icon + initShowPasswordIcon($this); + + // Show tip related to clicked element + $tip.addClass('visible').position({ + of: $this, + my: 'center bottom', + at: 'center bottom-30', + collision: "flipfit" + }); + + // Hide tooltip if content is scrolled + $scrollBlock.rebind('scroll.hidePassTip', function() { + + if ($(this).is('.ps--active-y')) { + hidePasswordTip(); + } + }); + }); + + // Hide tooltip on mouseout from lock icon + $passwordIcon.rebind('mouseout.hidePassTip', function(e) { + if (!$(e.relatedTarget).hasClass('icon-tooltip-arrow')) { + hidePasswordTip(); + } + }); + + // Hide tooltip on mouseout from itseft + $tip.rebind('mouseleave.hidePassTip', function(e) { + if (!$(e.relatedTarget).hasClass('icon-tooltip-arrow')) { + hidePasswordTip(); + } + }); + }, + + /** + * Show Set password dialog + */ + showSetPasswordDialog: function() { + + "use strict"; + + var $dialog = this.$dialog; + var $setPasswordDialog = this.$passwordDialog; + var $setPasswordBtn = $('button.password', $dialog); + var $inputs = $('.pass-wrapper input', $setPasswordDialog); + var $existingPassword = $('.existing-pass', $setPasswordDialog); + var $existingPasswordInput = $('.existing-pass input', $setPasswordDialog); + var $selectedLink = $('.item.selected', $dialog); + var $scroll = $('.links-scroll', $dialog); + var $itemTarget; + var megaInput; + + // Get clicked element + $itemTarget = $selectedLink.length ? $('.lock', $selectedLink) : $setPasswordBtn; + + // Show dialog + $setPasswordDialog.removeClass('hidden'); + + // Change dialog position related to clicked element + var dialogReposition = function() { + + exportPassword.encrypt.$passwordDialog.position({ + of: $itemTarget.is('.hidden') ? $('.cog', $selectedLink) : $itemTarget, + my: 'center top', + at: 'center top-30', + collision: "flipfit" + }); + }; + + // Change dialog position + dialogReposition(); + + $(window).rebind('resize.setPasswordPosition', function() { + dialogReposition(); + }); + + // Disable scrolling + delay('disableExportScroll', function() { + Ps.disable($scroll[0]); + }, 100); + + // Set init state + $existingPassword.addClass('hidden'); + $existingPasswordInput.val(''); + $inputs.val('').parent().removeClass('good1 good2 good3 good4 good5'); + $('.strength',$setPasswordDialog).text(''); + megaInput = new mega.ui.MegaInputs($inputs); + megaInput[1].$input.focus(); + + // Show old password it it has beed set before + if ($itemTarget.data('pw')) { + $existingPassword.removeClass('hidden'); + $existingPasswordInput.val($itemTarget.data('pw')); + } + + // Copy old (existing) password button + $('button.copy', $existingPassword).rebind('click.copyToClipboard', function() { + var existingPassword = $existingPasswordInput.val(); + + if (existingPassword) { + copyToClipboard(existingPassword, l[371], 'password'); + } + }); + + // Add click handler to show old (existing) password icon + $('i', $existingPassword).rebind('click.showPass', function() { + var $this = $(this); + + if ($this.hasClass('icon-eye-reveal')) { + $this.removeClass('icon-eye-reveal').addClass('icon-eye-hidden'); + $existingPasswordInput[0].type = 'text'; + } + else { + $this.removeClass('icon-eye-hidden').addClass('icon-eye-reveal'); + $existingPasswordInput[0].type = 'password'; + } + }); + + // Add click handler to the confirm button + $('button.confirm', $setPasswordDialog).rebind('click.setPass', function() { + exportPassword.encrypt.startEncryption(); + }); + + // Add click handler to the cancel button + $('button.cancel',$setPasswordDialog).rebind('click.closePassDialog', function() { + exportPassword.encrypt.hideSetPasswordDialog(); + }); + + // Click anywhere on export link dialog will hide password dialog + $dialog.rebind('click.closePassDialog', function(e) { + + var $target = $(e.target); + + if (!$target.is('button.password') + && !$target.is('i.lock') + && !$target.parent().is('button.password') + && !$target.parent().is('.dropdown.export') + && !$target.parent().parent().is('.dropdown.export')) { + + exportPassword.encrypt.hideSetPasswordDialog(); + } + }); + + exportPassword.encrypt.loadPasswordEstimatorLibrary(); + exportPassword.encrypt.initPasswordStrengthCheck(); + }, + + /** + * Hide Set password dialog + */ + hideSetPasswordDialog: function() { + + "use strict"; + + // Hide dialog + this.$passwordDialog.removeAttr('style').addClass('hidden'); + + // Enable scrolling + Ps.enable($('.links-scroll', this.$dialog)[0]); + + // Unbind dialog positioning + $(window).rebind('resize.setPasswordPosition'); + }, + + /** + * Load the ZXCVBN password strength estimator library + */ + loadPasswordEstimatorLibrary: function() { + + "use strict"; + + if (typeof zxcvbn === 'undefined') { + + // Show loading spinner + var $loader = $('.estimator-loading-icon', this.$passwordDialog).addClass('loading'); + + // On completion of loading, hide the loading spinner + M.require('zxcvbn_js') + .done(function() { + $loader.removeClass('loading'); + }); + } + }, + + /** + * Show what strength the currently entered password is on key up + */ + initPasswordStrengthCheck: function() { + + "use strict"; + + var $passwordStrengthField = $('.strength', this.$passwordDialog); + var $passwordInput = $('input.enter-pass', this.$passwordDialog); + var $confirmPasswordInput = $('input.confirm-pass', this.$passwordDialog); + var $encryptButton = $('button.confirm', this.$passwordDialog); + var $inputWrapper = $passwordInput.parent(); + + // Add keyup event to the password text field + $passwordInput.rebind('keyup', function(event) { + + // Make sure the ZXCVBN password strength estimator library is loaded first + if (typeof zxcvbn !== 'undefined') { + + // Estimate the password strength + var password = $.trim($passwordInput.val()); + var passwordScore = zxcvbn(password).score; + var passwordLength = password.length; + + // Remove previous strength classes that were added + $inputWrapper.removeClass('good1 good2 good3 good4 good5'); + + // Add colour coding and text + if (password.length === 0) { + $passwordStrengthField.text(''); // No password entered, hide text + } + else if (passwordLength < 8) { + $inputWrapper.addClass('good1'); + $passwordStrengthField.text(l[18700]); // Too short + } + else if (passwordScore === 4) { + $inputWrapper.addClass('good5'); + $passwordStrengthField.text(l[1128]); // Strong + } + else if (passwordScore === 3) { + $inputWrapper.addClass('good4'); + $passwordStrengthField.text(l[1127]); // Good + } + else if (passwordScore === 2) { + $inputWrapper.addClass('good3'); + $passwordStrengthField.text(l[1126]); // Medium + } + else if (passwordScore === 1) { + $inputWrapper.addClass('good2'); + $passwordStrengthField.text(l[1125]); // Weak + } + else { + $inputWrapper.addClass('good1'); + $passwordStrengthField.text(l[1124]); // Very Weak + } + } + + // If Enter key is pressed, trigger encryption button clicking + if (event.keyCode === 13) { + $encryptButton.trigger('click'); + } + }); + + // Add keyup event to the confirm password text field + $confirmPasswordInput.rebind('keyup.setPass', function(event) { + + // If Enter key is pressed, trigger encryption button clicking + if (event.keyCode === 13) { + $encryptButton.trigger('click'); + } + }); + }, + + /** + * Start key derivation of each link in the dialog + */ + startEncryption: function() { + + "use strict"; + + var $passwordInput = $('input.enter-pass', this.$passwordDialog); + var $confirmPasswordInput = $('input.confirm-pass', this.$passwordDialog); + + // Hide previous errors + $passwordInput.data('MegaInputs').hideError(); + + // Get the password + var password = $passwordInput.val(); + var confirmPassword = $confirmPasswordInput.val(); + + // Check if TextEncoder function is available for the stringToByteArray function + if (!window.TextEncoder) { + + // This feature is not supported in your browser... + $passwordInput.data('MegaInputs').showError(l[9065]); + return false; + } + + // Check the passwords are the same with no typos + if (password !== confirmPassword) { + + // The passwords are not the same... + $passwordInput.data('MegaInputs').showError(l[9066]); + return false; + } + + // Check zxcvbn library is loaded first or we can't check the strength of the password + if (typeof zxcvbn === 'undefined') { + + // The password strength verifier is still initializing + $passwordInput.data('MegaInputs').showError(l[1115]); + return false; + } + + // Check that the password length is sufficient and exclude very weak passwords + if (password.length < 8 || $passwordInput.parent().hasClass('good1')) { + + // Please use a stronger password + $passwordInput.data('MegaInputs').showError(l[9067]); + return false; + } + + // Get information for each selected link showing in the dialog and convert the password to bytes + var links = exportPassword.encrypt.getLinkInfo(); + + // An anonymous function to derive the key and on completion create the password protected link + var processLinkInfo = function(linkInfo, algorithm, saltBytes, password) { + exportPassword.deriveKey(algorithm, saltBytes, password, function(derivedKeyBytes) { + exportPassword.encrypt.encryptAndMakeLink(linkInfo, derivedKeyBytes); + }); + }; + + // For each selected link + for (var i = 0; i < links.length; i++) { + + // Get the link information and random salt + var link = links[i]; + var saltBytes = link.saltBytes; + var algorithm = exportPassword.currentAlgorithm; + + // Derive the key and create the password protected link + processLinkInfo(link, algorithm, saltBytes, password); + } + }, + + /** + * Encrypt the link's key and format the password protected link + * @param {Object} linkInfo The information about the link + * @param {Uint8Array} derivedKeyBytes The derived key in bytes + */ + encryptAndMakeLink: function(linkInfo, derivedKeyBytes) { + + "use strict"; + + var encKeyBytes = null; + var algorithm = exportPassword.currentAlgorithm; + var saltBytes = linkInfo.saltBytes; + + // If folder link, use the first 16 bytes (128 bits) of the derived key as the encryption key + if (linkInfo.type === exportPassword.LINK_TYPE_FOLDER) { + encKeyBytes = new Uint8Array(derivedKeyBytes.buffer, 0, 16); + } + else { + // Otherwise if it's a file link use the first 32 bytes (256 bits) as the encryption key + encKeyBytes = new Uint8Array(derivedKeyBytes.buffer, 0, 32); + } + + // Use the last 32 bytes (256 bits) of the derived key as the MAC key + var macKeyLengthBytes = exportPassword.algorithms[algorithm].macKeyLength / 8; + var macKeyBytes = new Uint8Array(derivedKeyBytes.buffer, macKeyLengthBytes, macKeyLengthBytes); + + // Encrypt the file/folder link key + var encryptedKey = exportPassword.xorByteArrays(encKeyBytes, linkInfo.keyBytes); + + // Convert the public handle to bytes + var publicHandleBytes = asmCrypto.base64_to_bytes(linkInfo.publicHandle); + + // 1 byte for alg + 1 byte if folder/file + 6 bytes for handle + 32 bytes salt + 16 or 32 bytes for key + var dataToAuthenticateLength = 2 + publicHandleBytes.length + saltBytes.length + encryptedKey.length; + var dataToAuthenticateBytes = new Uint8Array(dataToAuthenticateLength); + + // Set the algorithm and set the flag for type of link + dataToAuthenticateBytes[0] = algorithm; + dataToAuthenticateBytes[1] = linkInfo.type; + + // Set the handle, salt and encrypted key into the array to be authenticated using different array offsets + dataToAuthenticateBytes.set(publicHandleBytes, 2); + dataToAuthenticateBytes.set(saltBytes, 8); + dataToAuthenticateBytes.set(encryptedKey, 40); + + // Create the MAC of the data + var macAlgorithm = exportPassword.algorithms[algorithm].macName; + + // If using the old algorithm (1), use parameter order: HMAC(password, data) + if (algorithm === 1) { + var macBytes = asmCrypto[macAlgorithm].bytes(macKeyBytes, dataToAuthenticateBytes); + } + else { + // Otherwise for newer links (algorithm >= 2) use the correct parameter order: HMAC(data, password) + var macBytes = asmCrypto[macAlgorithm].bytes(dataToAuthenticateBytes, macKeyBytes); + } + + // Create buffer for the data to be converted to Base64 + var numOfBytes = dataToAuthenticateBytes.length + macBytes.length; + var dataToConvert = new Uint8Array(numOfBytes); + + // Fill the array using the different offsets + dataToConvert.set(dataToAuthenticateBytes, 0); + dataToConvert.set(macBytes, dataToAuthenticateBytes.length); + + // Convert the data to Base64, then make it URL safe + var dataBase64UrlEncoded = exportPassword.base64UrlEncode(dataToConvert); + + // Construct URL: #P! for password link + encoded(alg + folder/file + handle + salt + encrypted key + mac) + var protectedUrl = getBaseUrl() + '/#P!' + dataBase64UrlEncoded; + + // Get the HTML block for this link by using the node handle + var $item = $('.item[data-node-handle="' + linkInfo.handle + '"]', this.$dialog); + var password = $('.enter-pass', this.$passwordDialog).val(); + + // Set the password into the text box and add a class for styling this block + $('.item-link.link input', $item).val(protectedUrl); + $('.item-link.key input', $item).val(''); + $('i.lock', $item).data('pw', password); + $item.addClass('password-protect-link'); + + // Update Password buttons and links UI + exportPassword.encrypt.updatePasswordComponentsUI(); + + exportPassword.encrypt.hideSetPasswordDialog(); + exportPassword.encrypt.initRemovePasswordButton(); + + // Log to see if feature is used much + api_req({ a: 'log', e: 99618, m: 'User created password protected link' }); + }, + + /** + * Get the information for each selected link + * @returns {Array} Returns an array of objects containing properties 'handle', 'type', 'key', 'keyBytes' + */ + getLinkInfo: function() { + + "use strict"; + + var links = []; + var $links = $('.item', this.$dialog); + var $selectedLink = $links.filter('.selected'); + var handles = []; + + // Create array of available links handles + if ($selectedLink.length) { + handles.push($selectedLink.data('node-handle')); + } + else { + $links.get().forEach(function(e) { + handles.push($(e).data('node-handle')); + }); + } + + // Iterate through the selected handles + for (var i in handles) { + if (handles.hasOwnProperty(i)) { + + // Get the node information + var node = M.d[handles[i]]; + var linkInfo = {}; + + // Only nodes with public handle + if (node && node.ph) { + + // Folder + if (node.t) { + linkInfo.type = exportPassword.LINK_TYPE_FOLDER; // 0 byte for folder link + linkInfo.key = u_sharekeys[node.h][0]; // 128 bit key as array of 32 bit int + } + else { + // File + linkInfo.type = exportPassword.LINK_TYPE_FILE; // 1 byte for file link + linkInfo.key = node.k; // 256 bit key as array of 32 bit int + } + + // Convert the key to a byte array (big endian), also add the link's handle and public handle + linkInfo.keyBytes = a32_to_ab(linkInfo.key); + linkInfo.handle = node.h; + linkInfo.publicHandle = node.ph; + + // Generate a random salt for encrypting this link + var algorithm = exportPassword.currentAlgorithm; + var saltLengthBytes = exportPassword.algorithms[algorithm].saltLength / 8; + linkInfo.saltBytes = crypto.getRandomValues(new Uint8Array(saltLengthBytes)); + + // Add object to array + links.push(linkInfo); + } + } + } + + return links; + } + }, // Encrypt functions + + + /** + * Functions for the decryption + */ + decrypt: { + + // The jQuery selector for the Export dialog + $dialog: null, + + /** + * Initialise function + * @param {String} page The current page's URL hash e.g. #P!AAA5TWTcNMtFlJ5A... + */ + init: function(page) { + + "use strict"; + + // Cache dialog selector + this.$dialog = $('.mega-dialog.password-dialog', 'body'); + + this.$megaInput = new mega.ui.MegaInputs($('#password-decrypt-input',this.$dialog)); + + // Show the dialog + this.showDialog(page); + }, + + /** + * Shows the dialog to let the user decrypt the link using a password + * @param {String} page The current page's URL hash e.g. #P!AAA5TWTcNMtFlJ5A... + */ + showDialog: function(page) { + + "use strict"; + var $megaInput = this.$megaInput; + var $closeButton = $('button.js-close', this.$dialog); + var $decryptButton = $('.decrypt-link-button', this.$dialog); + var $decryptButtonText = $('.decrypt-text', $decryptButton); + + // Show a background overlay + fm_showoverlay(); + + // Show the dialog + $.dialog = 'passwordlink-dialog'; + this.$dialog.removeClass('hidden'); + + // Reset state of dialog for future password link decryptions + $decryptButtonText.text(l[1027]); // Decrypt + + // Add a click handler for the close button to return to the home page (or cloud drive if logged in) + $closeButton.rebind('click', function() { + loadSubPage(''); + return false; + }); + + // Add click handler for Decrypt button + $decryptButton.rebind('click', function() { + exportPassword.decrypt.decryptLink(page); + }); + + // Listen for Enter key to fire decryption + $megaInput.$input.rebind('keyup', (ev) => { + if (ev.keyCode === 13) { + exportPassword.decrypt.decryptLink(page); + } + }); + }, + + /** + * Decrypts the password protected link and redirects to the real folder/file link + * @param {String} page The current page's URL hash e.g. #P!AAA5TWTcNMtFlJ5A... + */ + decryptLink: function(page) { + + "use strict"; + var $megaInput = this.$megaInput; + var $decryptButton = $('.decrypt-link-button', this.$dialog); + var $decryptButtonText = $('.decrypt-text', $decryptButton); + var $decryptButtonProgress = $('.decryption-in-progress', $decryptButton); + var $password = $megaInput.$input; + + + // Get the password and the encoded information in the URL + var password = $password.val(); + var urlEncodedInfo = page.replace('P!', ''); + var decodedBytes = null; + + // If no password given... + if (!password) { + $megaInput.showError(l[970]); // Please enter a valid password... + return false; + } + + // Decode the request + try { + decodedBytes = exportPassword.base64UrlDecode(urlEncodedInfo); + } + catch (exception) { + + // Show error and abort + $megaInput.showError(l[9068]); // The link could not be decoded... + return false; + } + + // Get the algorithm used + var algorithm = decodedBytes[0]; + + // Check if valid array index or will throw an exception + if (typeof exportPassword.algorithms[algorithm] === 'undefined') { + + // Show error and abort + $megaInput.showError(l[9069]); // The algorithm this link was encrypted with is not supported + return false; + } + + // Get the salt bytes, start offset at 8 (1 byte for alg + 1 byte for file/folder + 6 for handle) + var saltLength = exportPassword.algorithms[algorithm].saltLength / 8; + var saltStartOffset = 8; + var saltEndOffset = saltStartOffset + saltLength; + var saltBytes = decodedBytes.subarray(saltStartOffset, saltEndOffset); + + // Show encryption loading animation and change text to 'Decrypting' + $decryptButtonProgress.removeClass('hidden'); + $decryptButtonText.text(l[8579]); + + // Compute the PBKDF + exportPassword.deriveKey(algorithm, saltBytes, password, function(derivedKeyBytes) { + + // Get the MAC from the decoded bytes + var macLength = exportPassword.algorithms[algorithm].macLength / 8; + var macStartOffset = decodedBytes.length - macLength; + var macEndOffset = decodedBytes.length; + var macToVerifyBytes = decodedBytes.subarray(macStartOffset, macEndOffset); + + // Get the data to verify + var dataToVerify = decodedBytes.subarray(0, macStartOffset); + + // Get the MAC key + var macKeyLength = exportPassword.algorithms[algorithm].macKeyLength / 8; + var macKeyStartOffset = derivedKeyBytes.length - macKeyLength; + var macKeyEndOffset = derivedKeyBytes.length; + var macKeyBytes = derivedKeyBytes.subarray(macKeyStartOffset, macKeyEndOffset); + + // Compute the MAC over the data to verify + var dataToVerifyBytes = decodedBytes.subarray(0, macStartOffset); + var macAlgorithm = exportPassword.algorithms[algorithm].macName; + + // If the link was created with an old algorithm (1) which used parameter order: HMAC(password, data) + if (algorithm === 1) { + var macBytes = asmCrypto[macAlgorithm].bytes(macKeyBytes, dataToVerifyBytes); + } + else { + // Otherwise for newer links (algorithm >= 2) use the correct parameter order: HMAC(data, password) + var macBytes = asmCrypto[macAlgorithm].bytes(dataToVerifyBytes, macKeyBytes); + } + + // Convert the string to hex for simple string comparison + var macString = asmCrypto.bytes_to_hex(macBytes); + var macToVerifyString = asmCrypto.bytes_to_hex(macToVerifyBytes); + + // Compare the MAC in the URL to the computed MAC + if (macString !== macToVerifyString) { + + // Show error and abort + $megaInput.showError(l[9076]); // The link could not be decrypted... + $decryptButtonProgress.addClass('hidden'); + $decryptButtonText.text(l[1027]); + return false; + } + + // Get the link type char code and set the default key length to 32 bytes + var linkTypeByte = decodedBytes[1]; + var linkType = linkTypeByte; + var keyLength = 32; + + // If folder link, set the key length to 16 bytes + if (linkType === exportPassword.LINK_TYPE_FOLDER) { + keyLength = 16; + } + + // Get the encryption key from the derived key + var encKeyBytes = derivedKeyBytes.subarray(0, keyLength); + + // Get the encrypted key, start is (2 bytes for alg and type + 6 bytes for handle + salt) + var saltLength = exportPassword.algorithms[algorithm].saltLength / 8; + var startOffset = 2 + 6 + saltLength; + var endOffset = startOffset + keyLength; + var encryptedKeyBytes = dataToVerify.subarray(startOffset, endOffset); + + // Decrypt the file/folder link key + var decryptedKey = exportPassword.xorByteArrays(encKeyBytes, encryptedKeyBytes); + + // Recreate the original file/folder link + var handleBytes = dataToVerify.subarray(2, 8); + var handleUrlEncoded = exportPassword.base64UrlEncode(handleBytes); + var decryptedKeyUrlEncoded = exportPassword.base64UrlEncode(decryptedKey); + var folderIdentifier = (linkType === exportPassword.LINK_TYPE_FOLDER) ? 'F' : ''; + var url = folderIdentifier + '!' + handleUrlEncoded + '!' + decryptedKeyUrlEncoded; + + + if (mega.flags.nlfe) { + url = (folderIdentifier ? '/folder/' : '/file/') + handleUrlEncoded + + '#' + decryptedKeyUrlEncoded; + } + + + // Show completed briefly before redirecting + $decryptButtonProgress.addClass('hidden'); + $decryptButtonText.text(l[9077]); // Decrypted + + // Clear password field + $password.val(''); + + // Add a log to see if the feature is used often + api_req({ a: 'log', e: 99633, m: 'Successfully decrypted password protected link on regular web' }); + + // On success, redirect to actual file/folder link + folderlink = false; + loadSubPage(url); + }); + } + }, // Decrypt functions + + + /** + * Common functions for encryption and decryption + */ + + /** + * A wrapper function used for deriving a key from a password. + * @param {Number} algorithm The index of the algorithms array describing which algorithm to use + * @param {Uint8Array} saltBytes The salt as a byte array + * @param {String} password The raw password as entered by the user e.g. in ASCII or UTF-8 + * @param {Function} callback A function to call when the operation is complete + */ + deriveKey: function(algorithm, saltBytes, password, callback) { + + "use strict"; + + // Trim the password and convert it from ASCII/UTF-8 to a byte array + var passwordTrimmed = $.trim(password); + var passwordBytes = this.stringToByteArray(passwordTrimmed); + + // If Web Crypto method supported, use that + if (window.crypto && window.crypto.subtle) { + this.deriveKeyWithWebCrypto(algorithm, saltBytes, passwordBytes, callback); + } + else { + // Otherwise use asmCrypto which is the next fastest + this.deriveKeyWithAsmCrypto(algorithm, saltBytes, passwordBytes, callback); + } + }, + + /** + * Derive the key using the Web Crypto API + * @param {Number} algorithm The index of the algorithms array describing which algorithm to use + * @param {Uint8Array} saltBytes The salt as a byte array + * @param {Uint8Array} passwordBytes The password as a byte array + * @param {Function} callback A function to call when the operation is complete + */ + deriveKeyWithWebCrypto: function(algorithm, saltBytes, passwordBytes, callback) { + + "use strict"; + + // Get algorithm details + var name = this.algorithms[algorithm]['name']; + var hash = this.algorithms[algorithm]['hash']; + var iterations = this.algorithms[algorithm]['iterations']; + var derivedKeyLength = this.algorithms[algorithm]['derivedKeyLength']; + + // Import the password as the key + crypto.subtle.importKey( + 'raw', passwordBytes, name, false, ['deriveBits'] + ) + .then(function(key) { + + // Required PBKDF2 parameters + var params = { + name: name, + hash: hash, + salt: saltBytes, + iterations: iterations + }; + + // Derive bits using the algorithm + return crypto.subtle.deriveBits(params, key, derivedKeyLength); + }) + .then(function(derivedKeyArrayBuffer) { + + // Convert to a byte array + var derivedKeyBytes = new Uint8Array(derivedKeyArrayBuffer); + + // Pass the derived key to the callback + callback(derivedKeyBytes); + }); + }, + + /** + * Derive the key using asmCrypto + * @param {Number} algorithm The index of the algorithms array describing which algorithm to use + * @param {Uint8Array} saltBytes The salt as a byte array + * @param {Uint8Array} passwordBytes The password as a byte array + * @param {Function} callback A function to call when the operation is complete + */ + deriveKeyWithAsmCrypto: function(algorithm, saltBytes, passwordBytes, callback) { + + "use strict"; + + // Get algorithm details + var name = this.algorithms[algorithm]['failsafeName']; + var iterations = this.algorithms[algorithm]['iterations']; + var keyLengthBits = this.algorithms[algorithm]['derivedKeyLength']; + var keyLengthBytes = keyLengthBits / 8; + + // Give the UI some time to update on slower devices like iOS + setTimeout(function() { + + // Derive the key + var derivedKeyBytes = asmCrypto[name].bytes(passwordBytes, saltBytes, iterations, keyLengthBytes); + + // Pass the derived key to the callback + callback(derivedKeyBytes); + + }, 500); + }, + + /** + * This function encodes the data to Base64 then removes or replaces characters that will break + * in the URL. It is similar to the base64urlencode function in crypto.js but works on a byte array. + * + * @param {Uint8Array} dataBytes The data as a byte array to be converted to Base64 + * @return {String} Returns a URL safe Base64 encoded string e.g. v9jVaZfyT_cuKEV-JviPAhvv + */ + base64UrlEncode: function(dataBytes) { + + "use strict"; + + // Convert the data to regular Base64 + var dataBase64 = asmCrypto.bytes_to_base64(dataBytes); + + // Remove plus signs, forward slashes and equals signs (padding) + var dataBase64UrlEncoded = dataBase64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); + + return dataBase64UrlEncoded; + }, + + /** + * This function decodes the data from a URL safe Base64 string back to regular Base64 then back to bytes. + * It is similar to the base64urldecode function in crypto.js but converts the string back to a byte array. + * + * @param {String} dataText A URL safe Base64 encoded string e.g. v9jVaZfyT_cuKEV-JviPAhvv + * @returns {Uint8Array} Returns the decoded data as a byte array + */ + base64UrlDecode: function(dataText) { + + "use strict"; + + // Restore the padding then replace the plus signs and forward slashes + dataText += '=='.substr((2 - dataText.length * 3) & 3); + dataText = dataText.replace(/\-/g, '+').replace(/_/g, '/'); + + // Convert the data from regular Base 64 to bytes + var dataBytes = asmCrypto.base64_to_bytes(dataText); + + return dataBytes; + }, + + /** + * XOR two arrays of type Uint8Array together e.g. useful for encryption or decryption + * @param {Uint8Array} array1 The first array e.g. the encryption key + * @param {Uint8Array} array2 The second array e.g. the data to encrypt + * @returns {Uint8Array} + */ + xorByteArrays: function(array1, array2) { + + "use strict"; + + var numOfBytes = array1.length; + var result = new Uint8Array(numOfBytes); + + // XOR each byte in the array with the corresponding byte from the other + for (var i = 0; i < numOfBytes; i++) { + result[i] = array1[i] ^ array2[i]; + } + + return result; + }, + + /** + * Converts a UTF-8 string to a byte array + * @param {String} string A string of any character including UTF-8 chars e.g. password123 + * @returns {Uint8Array} Returns a byte array + */ + stringToByteArray: function(string) { + + "use strict"; + + var encoder = new TextEncoder('utf-8'); + + return encoder.encode(string); + } +}; + +/** + * Functionality for the Export Link expiry feature + */ +var exportExpiry = { + + /** + * Initialise function + */ + init: function() { + + "use strict"; + + this.$dialog = $('.mega-dialog.export-links-dialog'); + this.$datepickerBtn = $('button.expiry', this.$dialog); + + // If they are a pro user, enable expiry date + if (u_attr.p) { + + M.require('datepicker_js').done(function() { + exportExpiry.initExpiryDatePicker(); + exportExpiry.prepopulateExpiryDates(); + }); + } + + this.$datepickerBtn.rebind('click', () => { + $('input.set-date', this.$dialog).trigger('focus'); + }); + + }, + + /** + * Setup the datepicker + */ + initExpiryDatePicker: function() { + + "use strict"; + + var self = this; + var $setDateInput = $('.set-date', self.$dialog); + var $removeDateBtn = $('.remove-date', self.$dialog); + var $scroll = $('.links-scroll', this.$dialog); + var minDate = new Date(); + var maxDate = new Date(2060, 11, 31); + var datepicker; + + // Set Minimum date at least 1 day in the future + minDate.setDate(minDate.getDate() + 1); + + // Initialise expiry date picker + datepicker = $setDateInput.datepicker({ + + // Date format, @ - Unix timestamp + dateFormat: '@', + // Minimum date that can be selected + minDate: minDate, + // Maximum date that can be selected + maxDate: maxDate, + // Start date that should be displayed when datepiccker is shown + startDate: minDate, + // Content of Previous button + prevHtml: '', + // Content of Next button + nextHtml: '', + // First day in the week. 0 - Sun + firstDay: 0, + // Auto close daticker is date is selected + autoClose: true, + // If true, then clicking on selected cell will remove selection + toggleSelected: false, + // Cursom localization + language: { + // Sun - Sat + daysMin: [l[8763], l[8764], l[8765], l[8766], l[8767], l[8768], l[8769]], + months: [ + l[408], l[409], l[410], l[411], l[412], l[413], // January - June + l[414], l[415], l[416], l[417], l[418], l[419] // July - December + ], + monthsShort: [ + l[24035], l[24037], l[24036], l[24038], l[24047], l[24039], // January - June + l[24040], l[24041], l[24042], l[24043], l[24044], l[24045] // July - December + ] + }, + + // Change Month select box width on Show + onShow: function(inst) { + + var $inputClicked = inst.$el; + var $datepicker = inst.$datepicker; + + // Show previously selected date or min date as default + if (inst.selectedDates[0]) { + inst.date = inst.selectedDates[0]; + } + else { + inst.date = minDate; + } + + // Update datepicker data + inst.update(); + + // Change datepicker position related to clicked element + inst.setPosition = function() { + + $datepicker.position({ + of: $inputClicked, + my: 'center top', + at: 'center top-30', + collision: "flipfit" + }); + }; + + // Change datepicker position + Soon(inst.setPosition); + + // Change position on resize + $(window).rebind('resize.setDatepickerPosition', function() { + inst.setPosition(); + }); + + // Disable scrolling + delay('disableExportScroll', function() { + Ps.disable($scroll[0]); + }, 100); + + // Close export dropdown + $('.dropdown.export', self.$dialog).addClass('hidden'); + + // Close set password dialog + exportPassword.encrypt.hideSetPasswordDialog(); + }, + + onSelect: function(dateText, date, inst) { + + var $inputClicked = inst.$el; + + // Select link item + $('.item.selected', self.$dialog).removeClass('selected'); + $inputClicked.closest('.item').addClass('selected'); + + // Update the link with the new expiry timestamp + exportExpiry.updateLinks(dateText / 1000); + }, + + onHide: function() { + + // Enable scroll + Ps.enable($scroll[0]); + + // Unbind dialog positioning + $(window).unbind('resize.setDatepickerPosition'); + } + + }).data('datepicker'); + + // Clear active dates + datepicker.selectedDates = []; + + // Press Enter key if datepicker dropdown is opened + $setDateInput.rebind('keydown.date', function(event) { + + // If Enter key is pressed + if (event.keyCode === 13) { + $(this).blur(); + + // Trigger click If date is selected in datepicker + if ($('.ui-datepicker .ui-state-active', 'body').length) { + $('.ui-datepicker .ui-state-active', 'body').trigger('click'); + } + } + }); + + // Remove date button + $removeDateBtn.rebind('click.clearExpiry', function() { + + // Unselect link items + $('.item.selected', this.$dialog).removeClass('selected'); + + // Remove selected date from all items + datepicker.clear(); + + // Update common Set Expiry Date button + exportExpiry.updateExpiryButtons(); + + // Update the selected links and remove the expiry timestamps + exportExpiry.updateLinks(); + }); + }, + + /** + * Update Set Expiry Date buttons states + */ + updateExpiryButtons: function() { + + "use strict"; + + var $expiryLinks = $('.links-scroll .item.dateSet', this.$dialog); + var $setDateBtn = this.$datepickerBtn; + var $setDateInput = $('input.set-date', this.$dialog); + var datepicker = $setDateInput.datepicker().data('datepicker'); + var $btnLabel = $('.label', $setDateBtn); + var $removeDateBtn = $('.remove-date', this.$dialog); + var buttonLabel; + + // Clear active dates + datepicker.selectedDates = []; + + // If there is at least one expiry date set + if ($expiryLinks.length) { + + // Show Remove Expiry Date button + $removeDateBtn.removeClass('hidden'); + $setDateBtn.addClass('remove-button-visible'); + + // Get button label + $expiryLinks.get().forEach(function(e) { + + var $this = $(e); + var date = $('.calendar input', $this).data('expiry'); + + // If timestamps are different, use "Multiple dates set" as label + if (buttonLabel && buttonLabel !== date) { + + // Use "Multiple dates set" as button label + buttonLabel = l[23674]; + + return false; + } + + buttonLabel = date; + }); + + // If label is Unixtimestamp, convert it to necessary formats and set active date to common datepicker + if (Number(buttonLabel)) { + + // Set active date in datepicker component + datepicker.selectedDates = [new Date(buttonLabel * 1000)]; + + // Change "Set expiry date" button label + buttonLabel = time2date(buttonLabel, 2); + } + + // Set expiry date button label + $btnLabel.text(buttonLabel); + } + else { + + // Clear the date of any old entries and set "Set expiry date" button label + $btnLabel.text(l[8953]); + $removeDateBtn.addClass('hidden'); + $setDateBtn.removeClass('remove-button-visible'); + } + }, + + /** + * Update selected links with details about the expiry of the link + * @param {Number} expiryTimestamp The expiry timestamp of the link. Set to null to remove the expiry time + */ + updateLinks: function(expiryTimestamp) { + + "use strict"; + + var $links = $('.item', this.$dialog); + var $selectedLink = $('.item.selected', this.$dialog); + var handles = []; + + // Create array of available links handles + if ($selectedLink.length) { + handles.push($selectedLink.data('node-handle')); + } + else { + $links.get().forEach(function(e) { + handles.push($(e).data('node-handle')); + }); + } + + // Iterate through the selected handles + for (var i in handles) { + if (handles.hasOwnProperty(i)) { + + // Get the node handle + var node = M.d[handles[i]]; + var handle = node.h; + + // The data to send in the API request + var request = { + a: 'l', // Link + n: handle, + i: requesti + }; + + // If the expiry timestamp is set + if (expiryTimestamp) { + + // Add it to be sent in the request + request.ets = expiryTimestamp; + } + + // Show the expiry time if applicable or remove it + exportExpiry.setExpiryIconTime(expiryTimestamp, handle); + + // Update the link with the new expiry timestamp + api_req(request); + } + } + + // Update common Set Expiry Date button + exportExpiry.updateExpiryButtons(); + }, + + /** + * If reloading the dialog, check the local state and show the expiry time for each key block if applicable + */ + prepopulateExpiryDates: function() { + + "use strict"; + + // Get the selected files/folders + var handles = $.selected; + + // Keep a counter for how many nodes have expiry times + var numOfNodesWithExpiryTime = 0; + var lastExpireTime = null; + + // For each selected file/folder + for (var i in handles) { + if (handles.hasOwnProperty(i)) { + + // Get the node handle + var node = M.d[handles[i]]; + var nodeHandle = node.h; + var expiryTimestamp = M.getNodeShare(node).ets; + + // If it has an expiry time, increment the count + if (expiryTimestamp) { + + // Set expiry timestamp if exists + exportExpiry.setExpiryIconTime(expiryTimestamp, nodeHandle); + } + } + } + + // Init expiry tips + exportExpiry.initExpiryTip(); + + // Update common Set Expiry Date button + exportExpiry.updateExpiryButtons(); + }, + + /** + * Sets the expiry time on the selected export key + * @param {Number} expiryTimestamp The UNIX timestamp when the link will expire, set to null to hide + * @param {String} nodeHandle The node handle which references the key block to update + */ + setExpiryIconTime: function(expiryTimestamp, nodeHandle) { + + "use strict"; + + // Find the right row + var $linkItem = $('.item[data-node-handle="' + nodeHandle + '"]', this.$dialog); + var $expiryIcon = $('i.calendar', $linkItem); + var $setDateInput = $('input', $expiryIcon); + var datepicker = $setDateInput.datepicker().data('datepicker'); + + // Clear active dates + datepicker.selectedDates = []; + + // If the expiry timestamp is set + if (expiryTimestamp) { + + // If the link has expired + if (unixtime() >= expiryTimestamp) { + + // Use 'Expired' string + expiryTimestamp = l.expired_date_link; + } + else { + + // Set active date in datepicker component + datepicker.selectedDates = [new Date(expiryTimestamp * 1000)]; + } + + // Set special Expiry classname + $linkItem.addClass('dateSet'); + + // Show it + $expiryIcon.removeClass('vo-hidden'); + } + else { + + // Set special Expiry classname + $linkItem.removeClass('dateSet'); + + // Hide it + $expiryIcon.addClass('vo-hidden'); + } + + // Set or clear the text + $('input', $expiryIcon).data('expiry', expiryTimestamp); + }, + + /** + * Init Expire date tooltip + */ + initExpiryTip: function() { + + "use strict"; + + var $linkItem = $('.item', this.$dialog); + var $expiryIcon = $('i.calendar', $linkItem); + var $tip = $('.dark-direct-tooltip.custom-html', this.$dialog); + var $scrollBlock = $('.links-scroll', this.$dialog); + + // Hide a tip with Expiry date + var hideExpiryTip = function() { + + $tip.removeClass('visible'); + $('.content', $tip).text(''); + $scrollBlock.unbind('scroll.hideExpiryTip'); + }; + + // Show tooltip + $expiryIcon.rebind('mouseover.showExpiryTip', function() { + var $this = $(this); + var date = $('input', $this).data('expiry'); + var tipContent; + + if (Number(date)) { + + // Change date format and use "Expires %1" string + date = time2date(date, 2); + tipContent = l[8698].replace('%1', '' + date + ' 0 && height > 0 ? width : 640) + .replace('%h', width > 0 && height > 0 ? height : 360) + .replace('%s', link + (optionAdded ? '!' : '') + (time > 0 ? time + 's' : '') + + (autoplay ? '1a' : '') + (muted ? '1m' : '')) + .replace('%a', autoplay ? 'allow="autoplay;"' : ''); + + $('.code-field .code', $embedTab).text(code); + }; + + uiCheckboxes($('.settings-container', $linksDialog), function(enabled) { + + var $row = $(this).closest('.settings-row'); + var $setting = $('.embed-setting', $row); + + if (enabled) { + $setting.removeClass('disabled').find('input').prop('readonly', false).rebind('input', setCode); + } + else { + $setting.addClass('disabled').find('input').prop('readonly', true).off('input'); + } + setCode(); + }); + + // Reset all numeric inputs under Share Options + $('.settings-container .embed-setting', $embedTab).addClass('disabled'); + $('.settings-container input[type=number]', $embedTab).get().forEach(function(e) { + + var $this = $(e); + + $this.val($this.attr('value')); + $this.prop('readonly', true); + }); + $embedHeader.removeClass('hidden'); + + (function _() { + + $('header .embed-header, header .get-link', $linksDialog) + .removeClass('active').rebind('click.switchTab', _); + + if (this === window || $(this).is('.embed-header')) { + $embedHeader.addClass('active'); + $embedTab.removeClass('hidden'); + $embedFooter.removeClass('hidden'); + $linksTab.addClass('hidden'); + $bottomBar.addClass('hidden'); + $footer.removeClass('empty'); + } + else { + $linksHeader.addClass('active'); + $embedTab.addClass('hidden'); + $embedFooter.addClass('hidden'); + $linksTab.removeClass('hidden'); + $bottomBar.removeClass('hidden'); + + if ($('.item', $linksTab).length >= 1) { + $footer.addClass('empty'); + } + else { + $footer.removeClass('empty'); + } + } + + }).call($.itemExportEmbed ? window : {}); + + $.itemExportEmbed = null; + + $('.video-filename span', $embedTab).text(n.name); + $('.video-attributes .size', $embedTab).text(bytesToSize(n.s)); + $('.video-attributes .duration', $embedTab) + .text(secondsToTimeShort(MediaAttribute(n).data.playtime)); + + var $thumb = $('.video-thumbnail img', $embedTab).attr('src', noThumbURI); + + getImage(n, 1).then((uri) => $thumb.attr('src', uri)).catch(dump); + + $('.code-field .code', $embedTab).rebind('click.selectTxt', function() { + selectText('embed-code-field'); + return false; + }); + + $('.preview-embed', $embedTab).rebind('click.embed', function() { + + if ($(this).text() !== l[1899]) { + $(this).text(l[148]); + $('.video-thumbnail-container', $embedTab).addClass('hidden'); + $('.video-player-container', $embedTab).removeClass('hidden') + .safeHTML(iframe.replace('%s', link)); + } + else { + $(this).text(l[1899]); + $('.video-thumbnail-container', $embedTab).removeClass('hidden'); + $('.video-player-container', $embedTab).addClass('hidden').text(''); + } + }); + + // Let's hide it for now... + $('.preview-embed', $embedTab).addClass('hidden'); + + setCode(); + } + else { + // Remove special Embed class + $linksDialog.removeClass('embed'); + + if ($('.item', $linksDialog).length > 1) { + + // Show bottom bar with Copy buttons if more than one link + $bottomBar.removeClass('hidden'); + $footer.removeClass('empty'); + } + else { + + // Hide bottom bar with Copy buttons if only one link + $bottomBar.addClass('hidden'); + $footer.addClass('empty'); + } + } + + $('.rounded-tip-button .tip-text', $linksTab) + .text(mega.icu.format(l.export_link_decrypt_tip, Object($.itemExport).length || 0)); + + // Show export dialog + M.safeShowDialog('links', function() { + + // Show dialog + fm_showoverlay(); + $linksDialog.removeClass('hidden'); + + // Reset the checkbox of export link decryption key separately when open the get link dialog + if (typeof $keysCheckbox !== 'undefined' && $keysCheckbox.prop('checked')) { + $keysCheckbox.trigger('click'); + } + + // Init Scrolling + Ps.initialize($scroll[0]); + $scroll.scrollTop(0); + + return $linksDialog; + }); + + // Close dialog button + $('button.js-close', $linksDialog).rebind('click.closeDialog', function() { + self.linksDialog(1); + }); + + // Change links view: w/o keys + $keysCheckbox.rebind('change.changeView', function() { + + var isChecked = this.checked; + var $checkboxWrap = $(this).parent(); + var $bottomBar = $('.links-footer', $linksDialog); + + // Change chekcbox state and adapt CopyToClipboard buttons + if (isChecked) { + $checkboxWrap.removeClass('checkboxOff').addClass('checkboxOn'); + $linkContent.addClass('separately'); + $('button.copy.links span', $bottomBar).text(l[23625]); + $('button.copy.keys', $bottomBar).removeClass('hidden'); + } + else { + $checkboxWrap.removeClass('checkboxOn').addClass('checkboxOff'); + $linkContent.removeClass('separately'); + $('button.copy.links span', $bottomBar).text(l[20840]); + $('button.copy.keys', $bottomBar).addClass('hidden'); + } + + // Update Link input values + exportPassword.encrypt.updateLinkInputValues(); + }); + + // Set separate links view default state + Soon(function() { + $keysCheckbox.prop('checked', !$keysCheckbox.prop('checked')).trigger('click'); + }); + + // Decryption key tip repositioning + $('.rounded-tip-button', $linksTab).rebind('mouseover.tipPosition', function() { + + var $this = $(this); + var $tip = $('.dropdown', $this); + var $exportDropdown = $('.dropdown.export', $linksTab); + + $tip.removeClass('left-arrow').addClass('down-arrow'); + $exportDropdown.addClass('hidden'); + + if ($tip.offset().top < 0) { + $tip.removeClass('down-arrow').addClass('left-arrow'); + } + }); + + // Copy all links/keys to clipboard + $('button.copy', $linksDialog).rebind('click.copyToClipboard', function() { + + var $this = $(this); + var $links = $('.item', $linksDialog); + var $item = $this.hasClass('current') ? $this.closest('.item') : undefined; + var pwProtectedNum = $links.filter('.password-protect-link').length; + var mode = $this.hasClass('keys') ? 'keys' : undefined; + var data; + + if ($this.is('.disabled')) { + return false; + } + + // If Copy button locates in Embed tab + if ($('.embed-header', $linksDialog).hasClass('active')) { + toastTxt = l[371]; + data = $('.code-field .code', $linksDialog).text(); + } + else { + // If the button copies Keys only + if (mode) { + linksNum = $item ? 1 : $links.length - pwProtectedNum; + toastTxt = mega.icu.format(l.toast_copy_key, linksNum); + } + else { + linksNum = $item ? 1 : $links.length; + toastTxt = mega.icu.format(l.toast_copy_link, linksNum); + } + + // Set toast notification and data to copy + data = $.trim(getClipboardLinks($item, mode)); + } + + // Copy to clipboard + copyToClipboard(data, toastTxt, null, 2000); + + return false; + }); + + // Init FREE export links events + var initFreeEvents = function() { + + // Add click event to Settings icon, show dropdown + $cogIcons.rebind('click.showDropdown', function() { + + var $this = $(this); + var $dropdown = $('.dropdown.export', $linksTab); + var itemsLength = $('.item', $linksTab).length; + var $currentItem = $this.closest('.item'); + var expiryLabel = $('.calendar.vo-hidden', $currentItem).length ? l[8953] : l[23665]; + var passwordLabel = $('.lock.hidden', $currentItem).length ? l[17454] : l[23666]; + var removeLabel = itemsLength === 1 ? l[23668] : l[6821]; + + // Set button labels + $('.set-exp-date span', $dropdown).text(expiryLabel); + $('.set-password span', $dropdown).text(passwordLabel); + $('.remove-item span', $dropdown).text(removeLabel); + + // Disable scrolling + delay('disableExportScroll', function() { + Ps.disable($scroll[0]); + }, 100); + + // Select link item + $('.item', $linksTab).removeClass('selected'); + $this.closest('.item').addClass('selected'); + + // Dropdown positioning + $dropdown.removeClass('hidden').position({ + of: $this, + my: 'left top', + at: 'left top', + collision: 'flipfit' + }); + }); + + // Add click event to Remove link dropdown item + $removeItem.rebind('click.removeLink', function() { + + const $bottomBar = $('footer', this.$dialog); + const $selectedLink = $('.item.selected', $linksTab); + const handle = $selectedLink.data('node-handle'); + let $items; + let itemsLength; + + // Create Remove link function + var removeLink = function() { + + // New export link + var exportLink = new mega.Share.ExportLink({'updateUI': true, 'nodesToProcess': [handle]}); + + // Remove link in "quite" mode without overlay + exportLink.removeExportLink(true); + + // Remove Link item from DOM + $selectedLink.remove(); + + // Update Export links scrolling + if ($scroll.is('.ps')) { + Ps.update($scroll[0]); + } + + // Get link items length + $items = $('.item', $linksTab); + itemsLength = $items.length; + + if (itemsLength > 1) { + + // Show bottom bar with Copy buttons if more than one link + $bottomBar.removeClass('empty'); + } + else if (itemsLength === 1) { + + // Hide bottom bar with Copy buttons if more than one link + $bottomBar.addClass('empty'); + } + else { + + // Close the dialog If there is no link items + self.linksDialog(1); + + return false; + } + + // Update Password buttons and links UI + exportPassword.encrypt.updatePasswordComponentsUI(); + + // Update common Set Expiry Date button + exportExpiry.updateExpiryButtons(); + }; + + // Show confirmartion dialog if handle is media + if (is_video(M.d[handle]) === 1) { + msgDialog('confirmation', l[882], l[17824], 0, function(e) { + if (e) { + removeLink(); + } + }); + } + else { + removeLink(); + } + }); + + // Click anywhere in Export link dialog to hide dropdown + $linksDialog.rebind('click.closeDropdown', function(e) { + + var $target = $(e.target); + var $dropdown = $('.dropdown.export', $linksTab); + + if (!$target.is('.dropdown.export') && !$target.is('.cog') + && !$dropdown.is('.hidden')) { + + // Enable scrolling + Ps.enable($scroll[0]); + + // Close dropdown + $dropdown.addClass('hidden'); + } + }); + + // Set buttons default states, init events if available + exportExpiry.init(); + exportPassword.encrypt.init(); + }; + + // Init PRO events links events + var initProEvents = function() { + + // Add click event to Set date dropdown item + $setExpiryItem.rebind('click.setDate', function() { + + var $selectedLink = $('.item.selected', $linksTab); + var datepicker = $('.set-date', $selectedLink).datepicker().data('datepicker'); + + // Show datepicker + datepicker.show(); + }); + + // Add click event to Set password dropdown item + $setPasswordtem.rebind('click.setPass', function() { + + // Show Set password dialog + exportPassword.encrypt.showSetPasswordDialog(); + }); + }; + + // Show and init options + if (page === 'download') { + + return false; + } + else if (folderlink) { + + // Show options/features + $options.removeClass('hidden'); + + // Show bottom bar if there is more than one link + if (Object($.itemExport).length > 1) { + + $bottomBar.removeClass('hidden'); + $footer.removeClass('empty'); + } + } + // Init FREE options + else if (!u_attr.p) { + + // Show options/features + $options.removeClass('hidden'); + $proOptions.removeClass('hidden'); + $cogIcons.removeClass('hidden'); + $removeItem.removeClass('hidden'); + + // On PRO options click, go to the Pro page + $proOptions.rebind('click.openpro', function() { + open(getAppBaseUrl() + '#pro'); + }); + + // Init FREE events + initFreeEvents(); + } + // Init PRO options + else if (u_attr.p) { + + // Enable PRO options + $options.removeClass('hidden'); + $proOptions.removeClass('hidden disabled'); + + // Show PRO menu items + $cogIcons.removeClass('hidden'); + $removeItem.removeClass('hidden'); + $setPasswordtem.removeClass('hidden'); + $setExpiryItem.removeClass('hidden'); + + // Init FREE and PRO events + initFreeEvents(); + initProEvents(); + } + }; + + + // ------------------------------------ + // ----- PRIVATE FUNCTIONS FOLLOW ----- + // ------------------------------------ + + + /** + * getClipboardLinks + * + * Gether all available public links for selected items (files/folders). + * @returns {String} links URLs or decryption keys for selected items separated with newline '\n'. + * @param {Object} $items Links selector + * @param {String} mode Contains View mode name: Show links w/o keys + */ + function getClipboardLinks($items, mode) { + + "use strict"; + + var links = []; + var $dialog = $('.mega-dialog.export-links-dialog', 'body'); + + if (!$items) { + $items = $('.item', $dialog); + } + + // Otherwise add all regular links + $items.get().forEach(function(e) { + + var nodeUrlWithPublicHandle = $('.link input', e).val(); + var nodeDecryptionKey = $('.key input', e).val(); + + // Check export/public link dialog drop down list selected option + if (mode === 'keys' && !$(this).hasClass('password')) { + if (nodeDecryptionKey) { + links.push(nodeDecryptionKey); + } + } + else { + links.push(nodeUrlWithPublicHandle); + } + }); + + return links.join("\n"); + } + + /** + * itemExportLinkHtml + * + * @param {Object} item + * @returns {String} + * @private + */ + function itemExportLinkHtml(item) { + + "use strict"; + + var key; + var type; + var fileSize; + var folderClass = ''; + var html = ''; + var nodeHandle = item.h; + var fileUrlKey; + var fileUrlWithoutKey; + var fileUrlNodeHandle = ''; + + // Add a hover text for the icon + var expiresTitleText = l[8698].replace('%1', ''); // Expires %1 + + if (folderlink) { + if (mega.flags.nlfe) { + fileUrlWithoutKey = getBaseUrl() + '/folder/' + pfid; + fileUrlKey = '#' + pfkey; + fileUrlNodeHandle = (item.t ? '/folder/' : '/file/') + item.h; + } + else { + fileUrlWithoutKey = getBaseUrl() + '/#F!' + pfid; + fileUrlKey = '!' + pfkey; + fileUrlNodeHandle = (item.t ? '!' : '?') + item.h; + } + fileSize = item.s && htmlentities(bytesToSize(item.s)) || ''; + } + else if (item.t) { + // Shared item type is folder + key = u_sharekeys[item.h] && u_sharekeys[item.h][0]; + + // folder key must exit, otherwise skip + if (!key) { + return ''; + } + + type = 'F'; + fileSize = ''; + folderClass = ' folder-item'; + } + else { + // Shared item type is file + type = ''; + key = item.k; + fileSize = htmlentities(bytesToSize(item.s)); + } + + if (!fileUrlWithoutKey) { + if (mega.flags.nlfe) { + fileUrlWithoutKey = (getBaseUrl() + (type ? '/folder/' : '/file/') + htmlentities(item.ph)); + } + else { + fileUrlWithoutKey = (getBaseUrl() + '/#' + type + '!' + htmlentities(item.ph)); + } + } + + if (!fileUrlKey) { + if (mega.flags.nlfe) { + fileUrlKey = (key ? '#' + a32_to_base64(key) : ''); + } + else { + fileUrlKey = (key ? '!' + a32_to_base64(key) : ''); + } + } + + html = '
              ' + + '
              ' + + '' + + '' + + '' + + '' + + '' + + '
              ' + + '
              ' + + '
              ' + htmlentities(item.name) + '
              ' + + '
              ' + fileSize + '
              ' + + '
              ' + + '' + + '' + + '
              ' + + '
              '; + + return html; + } + + /** + * generates file url for shared item + * + * @returns {String} html + * @private + */ + function itemExportLink() { + + "use strict"; + + var html = ''; + + $.itemExportHasFolder = false; + $.itemExportHasFile = false; + + $.each($.itemExport, function(index, value) { + + var node = M.d[value]; + + if (node && (folderlink || node.ph)) { + html += itemExportLinkHtml(node); + } + + if (node.t) { + $.itemExportHasFolder = true; + } + else { + $.itemExportHasFile = true; + } + }); + + return html; + } + + // export + scope.mega = scope.mega || {}; + scope.mega.Dialog = scope.mega.Dialog || {}; + scope.mega.Dialog.ExportLink = ExportLinkDialog; + +})(jQuery, window); + + +(function($, scope) { + /** + * ExportLink related operations. + * + * @param opts {Object} + * + * @constructor + */ + + 'use strict'; + var ExportLink = function(opts) { + + var self = this; + + var defaultOptions = { + 'updateUI': false, + 'nodesToProcess': [], + 'showExportLinkDialog': false + }; + + self.options = $.extend(true, {}, defaultOptions, opts); + + // Number of nodes left to process + self.nodesLeft = self.options.nodesToProcess.length; + self.logger = MegaLogger.getLogger('ExportLink'); + }; + + /** + * Get public link for file or folder. + */ + ExportLink.prototype.getExportLink = function() { + + var nodes = this.options.nodesToProcess || false; + + if (!nodes.length) { + return this.logger.warn('No nodes provided to export...', this); + } + + // Add some logging for usage comparisons + if (page === 'download') { + eventlog(99683); // Share public link on downloads page. + } + else if (folderlink) { + eventlog(99715); // Share public link from folder-link. + if (!is_mobile) { + var exportLinkDialog = new mega.Dialog.ExportLink(); + return exportLinkDialog.linksDialog(); + } + } + else if (is_mobile) { + eventlog(99634); // Created public link on mobile webclient + } + else { + eventlog(99635); // Created public link on regular webclient + } + + loadingDialog.show(); + this.logger.debug('getExportLink'); + $.getExportLinkInProgress = nodes; + + for (var i = 0; i < nodes.length; i++) { + var h = nodes[i]; + var n = M.d[h]; + + if (n) { + if (n.t) { + this._getFolderExportLinkRequest(h); + } + else { + this._getExportLinkRequest(h); + } + } + else { + loadingDialog.hide(); + this.logger.warn('Invalid node to export...', h); + } + } + }; + + /** + * Removes public link for file or folder. + * @param {Boolean} [quiet] No loading overlay + * @param {String} handle The node handle which to remove + * @returns {MegaPromise} + */ + ExportLink.prototype.removeExportLink = function(quiet, handle) { + + if (M.isInvalidUserStatus()) { + return MegaPromise.reject(EINTERNAL); + } + + var self = this; + var promises = []; + var handles = self.options.nodesToProcess || handle || []; + + if (handles.length) { + if (!quiet) { + loadingDialog.pshow(); + } + self.logger.debug('removeExportLink'); + + $.each(handles, function(index, h) { + var n = M.d[h]; + + if (n) { + if (n.t) { + promises.push(self._removeFolderExportLinkRequest(h, quiet)); + } + else { + promises.push(self._removeFileExportLinkRequest(h, quiet)); + } + } + else if (d) { + console.warn('removeExportLink: node not found.', h); + } + }); + } + + if (!promises.length) { + return MegaPromise.reject(EARGS); + } + + return MegaPromise.allDone(promises); + }; + + /** + * A 'Private' function, send folder public link delete request. + * @param {String} nodeId The node ID. + */ + ExportLink.prototype._getFolderExportLinkRequest = function(nodeId) { + + var self = this; + var share = M.getNodeShare(nodeId); + + // No need to perform an API call if this folder was already exported (Ie, we're updating) + if (share.h === nodeId) { + if (!M.d[nodeId].t || u_sharekeys[nodeId]) { + return self._getExportLinkRequest(nodeId); + } + + if (d) { + console.warn('Missing sharekey for "%s" - relying on s2 to obtain it...', nodeId); + } + } + // FIXME: check this + + // Get all child nodes of root folder with nodeId + mega.keyMgr.setShareSnapshot(nodeId) + .then(() => { + const childNodes = mega.keyMgr.getShareSnapshot(nodeId); + + var sharePromise = api_setshare(nodeId, [{u: 'EXP', r: 0}], childNodes); + sharePromise.done(function _sharePromiseDone(result) { + if (result.r && result.r[0] === 0) { + + self._getExportLinkRequest(nodeId); + + if (!self.nodesLeft) { + loadingDialog.hide(); + } + } + else { + self.logger.warn('_getFolderExportLinkRequest', nodeId, 'Error code: ', result); + loadingDialog.hide(); + } + }); + sharePromise.fail(function _sharePromiseFailed(result) { + self.logger.warn('Get folder link failed: ' + result); + // FIXME: this seem to lack some handling code for this condition + }); + }) + .catch(dump); + }; + + /** + * A 'Private' function, send public get-link request. + * @param {String} nodeId The node ID. + */ + ExportLink.prototype._getExportLinkRequest = function(nodeId) { + + var self = this; + var done = function(handle) { + + if (handle && self.options.updateUI) { + var UiExportLink = new mega.UI.Share.ExportLink(); + UiExportLink.addExportLinkIcon(handle); + } + + if (!--self.nodesLeft) { + loadingDialog.hide(); + if (self.options.showExportLinkDialog) { + var exportLinkDialog = new mega.Dialog.ExportLink(); + exportLinkDialog.linksDialog(); + } + + console.assert($.getExportLinkInProgress); + if ($.getExportLinkInProgress) { + mBroadcaster.sendMessage('export-link:completed', handle); + $.getExportLinkInProgress = false; + } + } + + // A hook for the mobile web to show the public link and the remove button + if (is_mobile) { + mobile.linkOverlay.showPublicLinkAndEnableButtons(nodeId); + } + }; + var share = M.getNodeShare(nodeId); + var request = { a: 'l', n: nodeId, i: requesti }; + + if (d) { + console.debug('_getExportLinkRequest', share.ph, Object(M.d[nodeId]).ph, share); + } + + // No need to perform an API call if this file was already exported (Ie, we're updating) + if (share.h === nodeId && Object(M.d[nodeId]).ph) { + return done(nodeId); + } + + // If the Expiry Timestamp (ets) is already set locally, resend in the request or it gets removed + if (share.ets) { + request.ets = share.ets; + } + + api_req(request, { + nodeId: nodeId, + callback: function(result) { + if (typeof result !== 'number') { + M.nodeShare(this.nodeId, { h: this.nodeId, r: 0, u: 'EXP', ts: unixtime(), ph: result }); + var n = M.d[this.nodeId]; + if (n) { + n.ph = result; + M.nodeUpdated(n); + } + } + else { // Error + self.logger.warn('_getExportLinkRequest:', this.nodeId, 'Error code: ', result); + } + + done(typeof result !== 'number' && this.nodeId); + } + }); + }; + + /** + * A 'Private' function, send folder delete public link request. + * @param {String} nodeId The node ID. + * @param {Boolean} [quiet] No loading overlay + * @returns {MegaPromise} + */ + ExportLink.prototype._removeFolderExportLinkRequest = function(nodeId, quiet) { + + var self = this; + var masterPromise = new MegaPromise(); + + api_req({ a: 's2', n: nodeId, s: [{ u: 'EXP', r: ''}], ha: '', i: requesti }, { + nodeId: nodeId, + callback: function(result) { + if (result.r && (result.r[0] === 0)) { + M.delNodeShare(this.nodeId, 'EXP'); + + if (self.options.updateUI) { + var UiExportLink = new mega.UI.Share.ExportLink(); + UiExportLink.removeExportLinkIcon(this.nodeId); + } + + // Hook for mobile web to show that removal completed successfully and then close the dialog + if (is_mobile) { + mobile.linkOverlay.completeLinkRemovalProcess(this.nodeId); + } + + masterPromise.resolve(); + } + else { + // Error + self.logger.warn('_removeFolerExportLinkRequest failed for node:', this.nodeId, 'Error: ', result); + masterPromise.reject(result); + } + + if (!--self.nodesLeft && !quiet) { + loadingDialog.phide(); + } + } + }); + + return masterPromise; + }; + + /** + * A 'Private' function, send file delete public link request. + * @param {String} nodeId The node IDs. + * @param {Boolean} [quiet] No loading overlay + * @returns {MegaPromise} + */ + ExportLink.prototype._removeFileExportLinkRequest = function(nodeId, quiet) { + + var self = this; + var promise = new MegaPromise(); + + api_req({ a: 'l', n: nodeId, d: 1, i:requesti }, { + nodeId: nodeId, + callback: function(result) { + + if (result === 0) { + M.delNodeShare(this.nodeId, 'EXP'); + + if (self.options.updateUI) { + var UiExportLink = new mega.UI.Share.ExportLink(); + UiExportLink.removeExportLinkIcon(this.nodeId); + } + + // Hook for mobile web to show that removal completed successfully and then close the dialog + if (is_mobile) { + mobile.linkOverlay.completeLinkRemovalProcess(this.nodeId); + } + + promise.resolve(); + } + else { + // Error + self.logger.warn('_removeFileExportLinkRequest failed for node:', this.nodeId, 'Error: ', result); + promise.reject(result); + } + + if (!--self.nodesLeft && !quiet) { + loadingDialog.phide(); + } + } + }); + + return promise; + }; + + /** + * Returns true in case that any of checked items is taken down, otherwise false + * @param {Array|String} [nodes] Array of nodes (handles/objects) + * @returns {Boolean} + */ + ExportLink.prototype.isTakenDown = function(nodes) { + + if (nodes) { + if (!Array.isArray(nodes)) { + nodes = [nodes]; + } + } + else { + nodes = self.options.nodesToProcess; + } + + for (var i = nodes.length; i--;) { + var node = nodes[i]; + + if (typeof node !== 'object') { + node = M.getNodeByHandle(node); + } + + if (node.t & M.IS_TAKENDOWN || M.getNodeShare(node).down === 1) { + return true; + } + } + + return false; + }; + + /** + * Shows the copyright warning dialog. + * + * @param {Array} nodesToProcess Array of strings, node ids + * @param {*} [isEmbed] Whether we're opening the dialog with the embed-code tab focused. + */ + var initCopyrightsDialog = function(nodesToProcess, isEmbed) { + + if (M.isInvalidUserStatus()) { + return; + } + + $.itemExportEmbed = isEmbed; + $.itemExport = nodesToProcess; + + var openGetLinkDialog = function() { + + var exportLink = new mega.Share.ExportLink({ + 'showExportLinkDialog': true, + 'updateUI': true, + 'nodesToProcess': nodesToProcess + }); + + exportLink.getExportLink(); + }; + + // If they've already agreed to the copyright warning (cws = copyright warning shown) + if (fmconfig.cws || folderlink) { + // Go straight to Get Link dialog + openGetLinkDialog(); + return false; + } + + // Cache selector + var $copyrightDialog = $('.copyrights-dialog'); + + // Otherwise show the copyright warning dialog + M.safeShowDialog('copyrights', function() { + + $.copyrightsDialog = 'copyrights'; + + return $copyrightDialog; + }); + + // Init click handler for 'I disagree' button: User disagrees with copyright warning + $('button.cancel', $copyrightDialog).rebind('click.disagreeAction', closeDialog); + + // Init click handler for 'I agree' + $('button.accept', $copyrightDialog).rebind('click.agreeAction', function() { + closeDialog(); + + // User agrees, store flag so they don't see it again + mega.config.set('cws', 1); + + // Go straight to Get Link dialog + openGetLinkDialog(); + }); + + // Init click handler for 'Close' button + $('button.js-close', $copyrightDialog).rebind('click.closeDialog', closeDialog); + }; + + // export + scope.mega = scope.mega || {}; + scope.mega.Share = scope.mega.Share || {}; + scope.mega.Share.ExportLink = ExportLink; + scope.mega.Share.initCopyrightsDialog = initCopyrightsDialog; +})(jQuery, window); + + +(function($, scope) { + /** + * UI Public Link Icon related operations. + * + * @param opts {Object} + * + * @constructor + */ + var UiExportLink = function(opts) { + + "use strict"; + + this.logger = MegaLogger.getLogger('UiExportLink'); + }; + + /** + * addExportLinkIcon + * + * Add public link icon to file or folder + * @param {String} nodeId + */ + UiExportLink.prototype.addExportLinkIcon = function(nodeId) { + + "use strict"; + + var self = this; + var $nodeId = $('#' + nodeId); + var $tree = $('#treea_' + nodeId).add('#treea_os_' + nodeId).add('#treea_pl_' + nodeId); + + // eslint-disable-next-line sonarjs/no-collapsible-if + if ($nodeId.length === 0 && !String(M.currentdirid).includes('chat')) { + + // not inserted in the DOM, retrieve the nodeMap cache and update that DOM node instead. + if (M.megaRender && M.megaRender.hasDOMNode(nodeId)) { + $nodeId = $(M.megaRender.getDOMNode(nodeId)); + } + } + + if (!$nodeId.length && !$tree.length) { + self.logger.warn('No DOM Node matching "%s"', nodeId); + + return false; + } + + self.logger.debug('addExportLinkIcon', nodeId); + + $nodeId.addClass('linked'); + + if ($tree.length) { + + // Add link-icon to left panel + $tree.addClass('linked'); + } + }; + + /** + * Remove public link icon to file or folder + * @param {String} nodeId + */ + UiExportLink.prototype.removeExportLinkIcon = function(nodeId) { + + "use strict"; + + var $node = $('#' + nodeId); + + if ($node.length === 0) { + // not inserted in the DOM, retrieve the nodeMap cache and update that DOM node instead. + if (M.megaRender && M.megaRender.hasDOMNode(nodeId)) { + $node = $(M.megaRender.getDOMNode(nodeId)); + } + } + + // Remove link icon from list view + $node.removeClass('linked').find('.own-data').removeClass('linked'); + + // Remove link icon from grid view + $node.filter('.data-block-view').removeClass('linked'); + + // Remove link icon from left panel + $('#treeli_' + nodeId + ' > span').removeClass('linked'); + }; + + /** + * Updates grid and block (file) view, removes favorite icon if exists and adds .taken-down class. + * @param {String} nodeId + * @param {Boolean} isTakenDown + */ + UiExportLink.prototype.updateTakenDownItem = function(nodeId, isTakenDown) { + + "use strict"; + + var self = this; + + if (isTakenDown) { + if (M.d[nodeId].fav === 1) { + + // Remove favourite (star) + M.favourite(nodeId, 0); + } + self.addTakenDownIcon(nodeId); + } + else { + self.removeTakenDownIcon(nodeId); + } + }; + + /** + * Add taken-down icon to file or folder + * @param {String} nodeId + */ + UiExportLink.prototype.addTakenDownIcon = function(nodeId) { + + "use strict"; + + var titleTooltip = ''; + var $element; + + // Add taken-down to list view + $element = $('.grid-table.fm #' + nodeId).addClass('taken-down'); + $('.grid-status-icon', $element).removeClass('icon-dot icon-favourite-filled').addClass('icon-takedown'); + + // Add taken-down to block view + $element = $('#' + nodeId + '.data-block-view').addClass('taken-down'); + $('.file-status-icon', $element).removeClass('icon-favourite-filled').addClass('icon-takedown'); + + if (M.megaRender && M.megaRender.nodeMap && M.megaRender.nodeMap[nodeId]) { + $(M.megaRender.nodeMap[nodeId]).addClass('take-down'); + } + // Add taken-down to left panel + $element = $('#treea_' + nodeId).addClass('taken-down'); + $('.file-status-ico', $element).removeClass('icon-link-small').addClass('icon-takedown'); + + // Add title, mouse popup + if (M.d[nodeId].t === 1) {// Item is folder + + titleTooltip = l[7705]; + + // Undecryptable node indicators + if (missingkeys[nodeId]) { + titleTooltip += '\n' + l[8595]; + } + + $('.grid-table.fm #' + nodeId).attr('title', titleTooltip); + $('#' + nodeId + '.data-block-view').attr('title', titleTooltip); + } + else {// Item is file + + titleTooltip = l[7704]; + + // Undecryptable node indicators + if (missingkeys[nodeId]) { + titleTooltip += '\n' + l[8602]; + } + + $('.grid-table.fm #' + nodeId).attr('title', titleTooltip); + $('#' + nodeId + '.data-block-view').attr('title', titleTooltip); + } + }; + + /** + * Remove taken-down icon from file or folder + * @param {String} nodeId + */ + UiExportLink.prototype.removeTakenDownIcon = function(nodeId) { + + "use strict"; + + if (M.megaRender && M.megaRender.hasDOMNode(nodeId)) { + $(M.megaRender.getDOMNode(nodeId)).removeClass('take-down'); + } + + var $element; + + // Add taken-down to list view + $element = $('.grid-table.fm #' + nodeId).removeClass('taken-down'); + $('.grid-status-icon', $element).removeClass('icon-takedown'); + + // Add taken-down to block view + $element = $('#' + nodeId + '.data-block-view').removeClass('taken-down'); + $('.file-status-icon', $element).removeClass('icon-takedown'); + + // Add taken-down to left panel + $element = $('#treea_' + nodeId).removeClass('taken-down'); + $('.file-status-ico', $element).removeClass('icon-takedown'); + + // Remove title, mouse popup + $('.grid-table.fm #' + nodeId).attr('title', ''); + $('#' + nodeId + '.data-block-view').attr('title', ''); + }; + + // export + scope.mega = scope.mega || {}; + scope.mega.UI = scope.mega.UI || {}; + scope.mega.UI.Share = scope.mega.UI.Share || {}; + scope.mega.UI.Share.ExportLink = UiExportLink; +})(jQuery, window); + +/** Export Link as string **/ +(function($, scope) { + 'use strict'; + + scope.getPublicNodeExportLink = function(node) { + + var fileUrlWithoutKey; + var type; + + if (folderlink) { + fileUrlWithoutKey = getBaseUrl() + '/#F!' + pfid + (node.t ? '!' : '?') + node.h; + } + else if (node.t) { + type = 'F'; + } + else { + // Shared item type is file + type = ''; + } + + return fileUrlWithoutKey || (getBaseUrl() + '/#' + type + '!' + htmlentities(node.ph)); + }; + +})(jQuery, mega); + +/** Initialise they keys required for operation. */ +function init_key() { + if (typeof u_k_aes === 'undefined') { + return loadSubPage('start'); + } + $('.key1').addClass('hidden'); + $('.key2').removeClass('hidden'); + + if (typeof u_privk === 'undefined') { + crypto_rsagenkey(); + } + else { + ui_keycomplete(); + } +} + +/** Callback called on completion. */ +function ui_keycomplete() { + $('.key1').addClass('hidden'); + $('.key2').addClass('hidden'); + $('.key3').removeClass('hidden'); + + if ((typeof (u_attr.p) !== 'undefined') && (u_attr.p >= 1 && u_attr.p <= 4)) { + loadSubPage('fm'); + } + else { + localStorage.keycomplete = true; + sessionStorage.signinorup = 2; + + // If mobile, log to see how many registrations are completed on mobile and load the cloud drive + if (is_mobile) { + + // Check if they actually started the registration process on mobile web + if (localStorage.signUpStartedInMobileWeb) { + + // Remove the flag as it's no longer needed and send a stats log + localStorage.removeItem('signUpStartedInMobileWeb'); + api_req({ a: 'log', e: 99639, m: 'Started and completed registration on mobile webclient' }); + } + else { + // Otherwise they just completed sign up on the mobile web and may have started it on a mobile app + api_req({ a: 'log', e: 99627, m: 'Completed registration on mobile webclient' }); + } + } + else { + // Otherwise log to see how many registrations are completed on regular webclient + api_req({ a: 'log', e: 99628, m: 'Completed registration on regular webclient' }); + } + + // if this is a sub-user in a business account. + // either This is the master --> wont get the confirmation link until we receive successful payment + // or, this is a sub-user --> no need to ask them anything after this point + if (u_attr && u_attr.b) { + if (page === 'fm') { + loadSubPage('start'); + } + else { + loadSubPage('fm'); + } + } + else { + onIdle(function() { + authring.initAuthenticationSystem(); + }); + // Load the Pro page to choose plan, or the redeem page if a pending voucher is found. + loadSubPage(localStorage.voucher ? 'redeem' : 'pro'); + } + } +} + +(function($) { + 'use strict'; + + /** + * Super simple, performance-wise and minimal tooltip utility. + * This "tooltip tool" saves on DOM nodes and event handlers, since it: + * 1) Uses delegates, so 1 event handler for unlimited amount of dynamically added tooltips in the UI. #performance + * 2) Does not require extra DOM elements (e.g. total # of DOM elements < low = performance improvement) + * 3) Its clever enough to reposition tooltips properly, w/o adding extra dependencies (except for jQuery UI, which + * we already have), e.g. better then CSS :hover + .tooltip { display: block; } + * 4) It supports dynamic content updates, based on the current state of the control -- for example, when + * interacting with given control, the tooltip content may automatically re-render, e.g. `Mute` -> `Unmute`. + * 5) Its minimal. < 200 lines of code. + * + * Note: Uses jQuery UI's position() to position the tooltip on top or bottom, if out of viewport. By default - + * would, try to position below the target element. + */ + + /** + * How to use: + * 1) Add "simpletip" class name to any element in the DOM + * 2) To set the content of the tooltip, pass an attribute w/ the text named `data-simpletip` + * Example: + * ```Mouse over me``` + * or setting optional classname `simpletip-tc` on the element without data attribute to simply using text contents + * ```Mouse over me``` + * + * Optionally, you can control: + * A) The wrapper in which the tooltip should try to fit in (and position on top/bottom, depending on whether there + * is enough space) by passing a selector that matches a parent of the element in attribute named + * `data-simpletipwrapper` + * Example: + * ```Mouse over me``` + * + * B) Change the default position to be "above" (top) of the element, instead of bottom/below by passing attribute + * `data-simpletipposition="top"` + * Example: + * ```Mouse over me``` + * The tooltip can also be placed to the "left", "right", or can detect the direction using "start" and "end". + * + * C) Manually add extra top/bottom offset by passing `data-simpletipoffset="10"` + * Example: + * ```Mouse over me``` + * + * D) Add any custom styling to tooltip by adding style class e.g. .medium-width for max-width: 220px;, + * .center-align for text-align: center; + * Example: + * ``` + * + * Mouse over me + * + * ``` + * + * E) Add any custom class to tooltip by `data-simpletip-class='custom-class'` + * Example: + * ```Mouse over me``` + * + * How to trigger content update: + * 1) Create new instance of the simpletip that contains conditional `data-simpletip` attribute. + * `````` + * 2) On state update, invoke `simpletipUpdated` event trigger on the `.simpletip` element. + * ```$('.simpletip').trigger('simpletipUpdated');``` + * + * How to trigger manual unmount: + * On state update, invoke `simpletipClose` event trigger on the `.simpletip` element. + * ```$('.simpletip').trigger('simpletipClose');``` + */ + + var $template = $( + '
              ' + + '' + + '' + + '
              ' + ); + + var $currentNode; + var $currentTriggerer; + var SIMPLETIP_UPDATED_EVENT = 'simpletipUpdated.internal'; + var SIMPLETIP_CLOSE_EVENT = 'simpletipClose.internal'; + + var sanitize = function(contents) { + return escapeHTML(contents).replace(/\[BR\]/g, '
              ') + .replace(/\[I class="([\w- ]*)"]/g, ``) + .replace(/\[I]/g, '').replace(/\[\/I]/g, '') + .replace(/\[B\]/g, '').replace(/\[\/B\]/g, '') + .replace(/\[U]/g, '').replace(/\[\/U]/g, '') + .replace(/\[G]/g, '') + .replace(/\[\/G]/g, '') + .replace(/\[A]/g, '') + .replace(/\[\/A]/g, ''); + }; + + var unmount = function() { + if ($currentNode) { + $currentNode.remove(); + $currentNode = null; + $currentTriggerer.unbind(SIMPLETIP_UPDATED_EVENT); + $currentTriggerer.unbind(SIMPLETIP_CLOSE_EVENT); + $currentTriggerer = null; + } + }; + + const calculateOffset = (info, $this) => { + let topOffset = 0; + let leftOffset = 0; + let offset = 7; // 7px === height of arrow glyph + if ($this.attr('data-simpletipoffset')) { + offset = parseInt($this.attr('data-simpletipoffset'), 10) + 7; + } + + if (info.vertical === 'top') { + topOffset = offset; + } + else if (info.vertical === 'bottom') { + topOffset = -offset; + } + else if (info.horizontal === 'left') { + leftOffset = offset; + } + else if (info.horizontal === 'right') { + leftOffset = -offset; + } + + return { leftOffset, topOffset }; + }; + + + /** + * Converts relative start/end positioning to absolute left/right positioning + * + * @param {string} tipPosition the specified position of the tooltip + * @returns {string} the absolute direction of the tooltip + */ + const getTipLRPosition = tipPosition => { + if ($('body').hasClass('rtl')) { + if (tipPosition === 'start') { + tipPosition = 'right'; + } + else if (tipPosition === 'end') { + tipPosition = 'left'; + } + } + else if (tipPosition === 'start') { + tipPosition = 'left'; + } + else if (tipPosition === 'end') { + tipPosition = 'right'; + } + + return tipPosition; + }; + + $(document.body).rebind('mouseenter.simpletip', '.simpletip', function() { + var $this = $(this); + if ($currentNode) { + unmount(); + } + + if ($this.is('.deactivated') || $this.parent().is('.deactivated')) { + return false; + } + + var contents = $this.hasClass('simpletip-tc') ? $this.text() : $this.attr('data-simpletip'); + if (contents) { + const $node = $template.clone(); + const $textContainer = $('span', $node); + $textContainer.safeHTML(sanitize(contents)); + // Handle the tooltip's text content updates based on the current control state, + // e.g. "Mute" -> "Unmute" + $this.rebind(SIMPLETIP_UPDATED_EVENT, () => { + $textContainer.safeHTML( + sanitize($this.attr('data-simpletip')) + ); + }); + $this.rebind(SIMPLETIP_CLOSE_EVENT, () => { + unmount(); + }); + $('body').append($node); + + $currentNode = $node; + $currentTriggerer = $this; + let wrapper = $this.attr('data-simpletipwrapper') || ''; + if (wrapper) { + wrapper += ","; + } + + const customClass = $this.attr('data-simpletip-class'); + if (customClass) { + $currentNode.addClass(customClass); + } + + /* + * There are four main positions of the tooltip: + * A) The default position is below the hovered el and horizontally centered. + * The tooltip may be flipped vertically or moved along the horizontal axis + * if there is not enough space in container + * B) "top" data-simpletipposition value places the tooltip above the hovered el. + * The tooltip may be flipped vertically back or moved along the horizontal axis + * if there is not enough space in container + * C) "left" data-simpletipposition value places the tooltip to the left of the target. + * The tooltip is centered vertically and may be flipped horizontally + * if there is not enough space in container + * D) "right" data-simpletipposition value places the tooltip to the right of the target. + * The tooltip is centered vertically and may be flipped horizontally + * if there is not enough space in container + */ + + /* Default bottom position (case A) */ + let my = 'center top'; + let at = 'center bottom'; + let arrowRotation = 180; + const tipPosition = getTipLRPosition($this.attr('data-simpletipposition')); + + switch (tipPosition) { + /* Top position (case B) */ + case 'top': + my = 'center bottom'; + at = 'center top'; + break; + /* Top position (case C) */ + case 'left': + my = 'right center'; + at = 'left center'; + break; + /* Top position (case D) */ + case 'right': + my = 'left center'; + at = 'right center'; + break; + } + + $node.position({ + of: $this, + my: my, + at: at, + collision: 'flipfit', + within: $this.parents(wrapper ? `${wrapper} body` : '.ps, body').first(), + using: function(obj, info) { + + /* + * Defines the positions on the tooltip Arrow and target. + * Delault position on the tooltip Arrow is left top. + * Delault position on the target is right bottom. + * We don't use centering to avoid special conditions after flipping. + */ + let myH = 'left'; + let myV = 'top'; + let atH = 'right'; + let atV = 'bottom'; + + /* + * The condition when tooltip is placed to the left of the target (case C), + * For condition C to be met, the tooltip must be vertically centered. + * Otherwise, it will mean that we have case A or B, and the tooltip + * just moves along the horizontal ("arrowRotation" val will be changed then). + * The position on the arrow is right and the position on target is left. + */ + if (info.horizontal === 'right') { + myH = 'right'; + atH = 'left'; + arrowRotation = 270; + } + // Case D, or case A or B, and the tooltip just moves along the horizontal. + else if (info.horizontal === 'left') { + myH = 'left'; + atH = 'right'; + arrowRotation = 90; + } + + // Case A, tooltip is placed below the target. "arrowRotation" value is replaced. + if (info.vertical === 'top') { + myV = 'top'; + atV = 'bottom'; + arrowRotation = 180; + } + // Case B, tooltip is placed above the target. "arrowRotation" value is replaced. + else if (info.vertical === 'bottom') { + myV = 'bottom'; + atV = 'top'; + arrowRotation = 0; + } + // Case C or D, tooltip is placed to the left/right and vertically centered. + else { + myV = 'center'; + atV = 'center'; + } + + // Set new positions on the tooltip Arrow and target. + my = myH + ' ' + myV; + at = atH + ' ' + atV; + + this.classList.add('visible'); + + const { leftOffset, topOffset} = calculateOffset(info, $this); + + $(this).css({ + left: `${obj.left + leftOffset}px`, + top: `${obj.top + topOffset}px` + }); + } + }); + + // Calculate Arrow position + var $tooltipArrow = $('.tooltip-arrow', $node); + + $tooltipArrow.position({ + of: $this, + my: my, + at: at, + collision: 'none', + using: function(obj, info) { + let { top, left } = obj; + + /* + * If Case A or B (ie tooltip is placed to the top/bottom), then + * we need to take into account the horizontal centering of the arrow + * in relation to the target, depending on the width of the arrow + */ + const horizontalOffset = info.vertical === 'middle' ? 0 : $this[0].offsetWidth / 2; + + // Horizontal positioning of the arrow in relation to the target + if (info.horizontal === 'left') { + left -= $tooltipArrow[0].offsetWidth / 2 + horizontalOffset; + } + else if (info.horizontal === 'right') { + left += $tooltipArrow[0].offsetWidth / 2 + horizontalOffset; + } + + // Vertical positioning of the arrow in relation to the target + if (info.vertical === 'bottom') { + top += $tooltipArrow[0].offsetHeight / 2; + } + else if (info.vertical === 'top') { + top -= $tooltipArrow[0].offsetHeight / 2; + } + + // Add special offset if set in options + const { leftOffset, topOffset} = calculateOffset(info, $this); + + $(this).css({ + left: `${left + leftOffset}px`, + top: `${top + topOffset}px`, + transform: `rotate(${arrowRotation}deg)` + }); + } + }); + } + }); + + $(document.body).rebind('mouseover.simpletip touchmove.simpletip', function(e) { + if ($currentNode && !e.target.classList.contains('simpletip') + && !$(e.target).closest('.simpletip, .simpletip-tooltip').length > 0 + && !e.target.classList.contains('tooltip-arrow') + && !e.target.classList.contains('simpletip-tooltip') + && !$currentTriggerer.hasClass('manual-tip')) { + unmount(); + } + }); +})(jQuery); + +/** + * Handle all logic for rendering for users' avatar + */ +var useravatar = (function() { + + 'use strict'; + + var _colors = [ + "#55D2F0", + "#BC2086", + "#FFD200", + "#5FDB00", + "#00BDB2", + "#FFA700", + "#E4269B", + "#FF626C", + "#FF8989", + "#9AEAFF", + "#00D5E2", + "#FFEB00" + ]; + + var logger = MegaLogger.getLogger('useravatar'); + + /** + * List of TWO-letters avatars that we ever generated. It's useful to replace + * the moment we discover the real avatar associate with that avatar + */ + var _watching = {}; + + /** + * Public methods + */ + var ns = {}; + + /** + * Return a SVG image representing the Letter avatar + * @param {Object} user The user object or email + * @returns {String} + * @private + */ + function _getAvatarSVGDataURI(user) { + + var s = _getAvatarProperties(user); + var $template = $('#avatar-svg').clone().removeClass('hidden') + .find('svg').addClass('color' + s.colorIndex).end() + .find('text').text(s.letters).end(); + + $template = window.btoa(to8($template.html())); + + return 'data:image/svg+xml;base64,' + $template; + } + + /** + * Return two letters and the color for a given string. + * @param {Object|String} user The user object or email + * @returns {Object} + * @private + */ + function _getAvatarProperties(user) { + user = String(user.u || user); + var name = M.getNameByHandle(user) || user; + if (name === user && M.suba[user] && M.suba[user].firstname) { + // Acquire the avatar matches the first letter for pending accounts in business account + name = from8(base64urldecode(M.suba[user].firstname)).trim(); + } + var color = UH64(user).mod(_colors.length); + + if (color === false) { + color = user.charCodeAt(0) % _colors.length; + } + + let ch = name.codePointAt(0); + ch = ch && String.fromCodePoint(ch) || ''; + + return {letters: ch.toUpperCase(), color: _colors[color], colorIndex: color + 1}; + } + + /** + * Return the HTML to represent a two letter avatar. + * + * @param {Object} user The user object or email + * @param {String} className Any extra CSS classes that we want to append to the HTML + * @param {String} element The HTML tag + * @returns {String} Returns the HTML + * @returns {Boolean} Adds addition blured background block + * @private + */ + function _getAvatarContent(user, className, element, bg) { + var id = user.u || user; + var bgBlock = ''; + + if (element === 'ximg') { + return _getAvatarSVGDataURI(user); + } + + var s = _getAvatarProperties(user); + + if (!_watching[id]) { + _watching[id] = {}; + } + + if (bg) { + bgBlock = '
              ' + + '
              '; + } + + _watching[id][className] = true; + + id = escapeHTML(id); + element = escapeHTML(element); + + if (className && className !== '') { + className = 'avatar-wrapper ' + escapeHTML(className); + } + else { + className = 'avatar-wrapper small-rounded-avatar'; + } + + return bgBlock + + '<' + element + ' data-color="color' + s.colorIndex + '" class="' + + id + ' color' + s.colorIndex + ' ' + className + '">' + + '
              ' + + s.letters + ''; + } + + /** + * Return an image HTML from an URL. + * + * @param {String} url The image URL + * @param {String} id The ID associated with the avatar (uid) + * @param {String} className Any extra CSS classes that we want to append to the HTML + * @param {String} type The HTML tag type + * @returns {String} The image HTML + * @returns {Boolean} Adds addition blured background block + * @private + */ + function _getAvatarImageContent(url, id, className, type, bg) { + var bgBlock = ''; + id = escapeHTML(id); + url = escapeHTML(url); + type = escapeHTML(type); + + if (className && className !== '') { + className = 'avatar-wrapper ' + escapeHTML(className); + } + else { + className = 'avatar-wrapper small-rounded-avatar'; + } + + if (bg) { + bgBlock = '
              ' + + '' + + '
              '; + } + + return bgBlock + + '<' + type + ' data-color="" class="' + id + ' ' + className + '">' + + '
              ' + + '' + + ''; + } + + /** + * Check if the current user is verified by the current user. It + * is asynchronous and waits for `u_authring.Ed25519` is ready. + * @param {String} userHandle The user handle + * @private + */ + var pendingVerifyQuery = {}; + function isUserVerified(userHandle) { + if (u_type !== 3 || userHandle === u_handle || pendingVerifyQuery[userHandle]) { + return; + } + pendingVerifyQuery[userHandle] = Date.now(); + + if (d > 1) { + logger.log('isUserVerified', userHandle); + } + + authring.onAuthringReady('avatar-v').then(function isUserVerified_Callback() { + var ed25519 = u_authring.Ed25519; + var verifyState = ed25519 && ed25519[userHandle] || {}; + var isVerified = (verifyState.method >= authring.AUTHENTICATION_METHOD.FINGERPRINT_COMPARISON); + + if (isVerified) { + $('.avatar-wrapper.' + userHandle.replace(/[^\w-]/g, '')).addClass('verified'); + } + }).finally(() => { + delete pendingVerifyQuery[userHandle]; + }); + } + + /** + * Like the `contact` method but instead of returning a + * div with the avatar inside it returns an image URL. + * @param {String} contact The contact's user handle + * @returns {String} The HTML to be rendered + */ + ns.imgUrl = function(contact) { + + if (avatars[contact]) { + return avatars[contact].url; + } + + return ns.contact(contact, '', 'ximg'); + }; + + /** + * Return the current user's avatar in image URL. + */ + ns.mine = function() { + + if (!u_handle) { + /* No user */ + return ''; + } + + try { + return ns.imgUrl(u_handle); + } + catch (ex) { + logger.error(ex); + return ''; + } + }; + + /** + * A new contact has been loaded, let's see if they have any two-letters avatars, if + * that is the case we replace that old avatar *everywhere* with their proper avatar. + * @param {String} user The user handle + */ + ns.loaded = function(user) { + + if (typeof user !== "string") { + logger.warn('Invalid user-handle provided!', user); + return false; + } + if (d > 1) { + logger.debug('Processing loaded user-avatar', user); + } + + if (user === u_handle) { + var myavatar = ns.mine(); + + $('.fm-avatar img,.fm-account-avatar img, .top-menu-popup .avatar-block img', 'body') + .attr('src', myavatar); + $('.fm-account-avatar .avatar-bg span').css('background-image', 'url(' + myavatar + ')'); + $('.fm-avatar').show(); + + // we recreate the top-menu on each navigation, so... + ns.my = myavatar; + } + + if (M.u[user]) { + // .trackDataChange() will trigger some parts in the Chat UI to re-render. + M.u[user].trackDataChange(M.u[user], "avatar"); + } + + var $avatar = null; + var updateAvatar = function() { + if ($avatar === null) { + // only do a $(....) call IF .updateAvatar is called. + $avatar = $(ns.contact(user)); + } + + var $this = $(this); + if (this.classList.contains("chat-avatar")) { + // don't touch chat avatars. they update on their own. + return; + } + + $this.removeClass($this.data('color')) + .addClass($avatar.data('color')) + .data('color', $avatar.data('color')) + .safeHTML($avatar.html()); + }; + + $('.avatar-wrapper.' + user.replace(/[^\w-]/g, '') + ':not(.in-chat)').each(updateAvatar); + + if ((M.u[user] || {}).m) { + var eem = String(M.u[user].m).replace(/[^\w@.,+-]/g, '').replace(/\W/g, '\\$&'); + $('.avatar-wrapper.' + eem).each(updateAvatar); + } + }; + + ns.generateContactAvatarMeta = function(user) { + user = M.getUser(user) || String(user); + + if (user.avatar) { + return user.avatar; + } + + if (user.u) { + isUserVerified(user.u); + + if (avatars[user.u]) { + user.avatar = { + 'type': 'image', + 'avatar': avatars[user.u].url + }; + } + else { + user.avatar = { + 'type': 'text', + 'avatar': _getAvatarProperties(user) + }; + } + + return user.avatar; + } + + return { + 'type': 'text', + 'avatar': _getAvatarProperties(user) + }; + }; + /** + * Returns a contact avatar + * @param {String|Object} user + * @param {String} className + * @param {String} element + * @returns {String} + * @returns {Boolean} Adds addition blured background block + */ + ns.contact = function(user, className, element, bg) { + user = M.getUser(user) || String(user); + + element = element || 'div'; + className = className || 'small-rounded-avatar'; + + if (user.u) { + isUserVerified(user.u); + } + + if (avatars[user.u]) { + return _getAvatarImageContent(avatars[user.u].url, user.u, className, element, bg); + } + + return _getAvatarContent(user, className, element, bg); + }; + + // Generic logic to retrieve and process user-avatars + // from either server-side or local-cache + (function loadAvatarStub(ns) { + // hold pending promises waiting for avatar data + var pendingGetters = {}; + // hold user-avatar handle who failed to retrieve + var missingAvatars = {}; + + /** + * Load the avatar associated with an user handle + * @param {String} handle The user handle + * @param {String} chathandle The chat handle + * @return {MegaPromise} + */ + ns.loadAvatar = function(handle, chathandle) { + // Ensure this is a sane call... + if (typeof handle !== 'string' || handle.length !== 11) { + logger.error('Unable to retrieve user-avatar, invalid handle!', handle); + return MegaPromise.reject(EARGS); + } + if (missingAvatars[handle]) { + // If the retrieval already failed for the current session + if (d > 1) { + logger.warn('User-avatar retrieval for "%s" had failed...', handle, missingAvatars[handle]); + } + return MegaPromise.reject(missingAvatars[handle]); + } + if (pendingGetters[handle]) { + // It's already pending, return associated promise + if (d > 1) { + logger.warn('User-avatar retrieval for "%s" already pending...', handle); + } + return pendingGetters[handle]; + } + if (avatars[handle]) { + if (d > 1) { + logger.warn('User-avatar for "%s" is already loaded...', handle, avatars[handle]); + } + return MegaPromise.resolve(EEXIST); + } + + var promise = new MegaPromise(); + pendingGetters[handle] = promise; + + var reject = function(error) { + if (d > 1) { + logger.warn('User-avatar retrieval for "%s" failed...', handle, error); + } + + missingAvatars[handle] = error; + promise.reject.apply(promise, arguments); + }; + + if (d > 1) { + logger.debug('Initiating user-avatar retrieval for "%s"...', handle); + } + + mega.attr.get(handle, 'a', true, false, undefined, undefined, chathandle) + .fail(reject) + .done(function(res) { + var error = res; + + if (typeof res !== 'number' && res.length > 5) { + try { + var ab = base64_to_ab(res); + ns.setUserAvatar(handle, ab); + + if (d > 1) { + logger.info('User-avatar retrieval for "%s" successful.', handle, ab, avatars[handle]); + } + + return promise.resolve(); + } + catch (ex) { + error = ex; + } + } + + reject(error); + }) + .always(function() { + delete pendingGetters[handle]; + ns.loaded(handle); + }); + + return promise; + }; + + /** + * Set user-avatar based on its handle + * @param {String} handle The user handle + * @param {String} ab ArrayBuffer with the avatar data + * @param {String} mime mime-type (optional) + */ + ns.setUserAvatar = function(handle, ab, mime) { + // deal with typedarrays + ab = ab.buffer || ab; + + if (ab instanceof ArrayBuffer) { + // check if overwritting and cleanup + if (avatars[handle]) { + try { + myURL.revokeObjectURL(avatars[handle].url); + } + catch (ex) { + logger.warn(ex); + } + } + + var blob = new Blob([ab], {type: mime || 'image/jpeg'}); + + avatars[handle] = { + data: blob, + url: myURL.createObjectURL(blob) + }; + if (M.u[handle]) { + M.u[handle].avatar = false; + } + } + else { + logger.warn('setUserAvatar: Provided data is not an ArrayBuffer.', ab); + } + }; + + /** + * Invalidate user-avatar cache, if any + * @param {String} handle The user handle + */ + ns.invalidateAvatar = function(handle) { + if (d > 1) { + logger.debug('Invalidating user-avatar for "%s"...', handle); + } + + if (pendingGetters[handle]) { + // this could indicate an out-of-sync flow, or calling M.avatars() twice... + logger.error('Invalidating user-avatar which is being retrieved!', handle); + } + + avatars[handle] = missingAvatars[handle] = undefined; + + if (M.u[handle]) { + M.u[handle].avatar = false; + } + }; + + if (d) { + ns._pendingGetters = pendingGetters; + ns._missingAvatars = missingAvatars; + } + + })(ns); + + return ns; +})(); + +(function(window) { + 'use strict'; + + /** Our trusted public keys {{{ */ + var signPubKey = { + "__global": [ + "rRHOm8BpMsYsSnSlk1AD2xxm9vKIFd\/tMoKxc35FTXQ=", // Elroy v2 + "WJbsItfJfXhGZlq6D1tz\/Wy\/AVjmvQoK7ZgBSOrrCQE=", // Guy v2 + "nJ0DVETXN6Fgd+nK70bsngaPlbM9zedn14Exh\/fAoyU=", // Shaun v2 + "WpDw5Q4L/7AfEMsGeW79BAheALabCdK3uYNNZB+Bq5o=", // Elroy v3 + "TJi9yWiE3tj15ER3W2kLcV4uVuE2GftUm54XQQLPTGg=", // Guy v3 + "nX9lIbNNyZPnnMr7aFMENHlescfDbp+ZmUIpGTcDp0w=", // Shaun v3 + "c/1i2Cq85V8n1I3tixV4bjLTRn9ZqYqtOVhxavHKoYM=", // Mark v3 + "PuXh6QXVRVVKPPdeLfYgG0VNxG6mUn2XioNCnxHzq1A=" // Harry v3 + ] + }; + /** }}} */ + + var CMS = {scope: ''}; + var IMAGE_PLACEHOLDER = staticpath + "/images/img_loader@2x.png"; + var isReady = true; + + if (!is_litesite) { + isReady = false; + mBroadcaster.once('startMega', function() { + for (var sub in signPubKey) { + if (!signPubKey.hasOwnProperty(sub)) { + continue; + } + for (var l = 0; l < signPubKey[sub].length; ++l) { + signPubKey[sub][l] = asmCrypto.base64_to_bytes(signPubKey[sub][l]); + } + } + isReady = true; + }); + } + + var cmsRetries = 1; // how many times to we keep retyring to ping the CMS before using the snapshot? + var fetching = {}; + var cmsBackoff = 0; + var cmsFailures = 0; + // Internal cache, to avoid asking to the CMS + // server the same object _unless_ they have + // changed. + var cmsCache = {}; + + /** + * Wrap any callback, caching it's result + * to improve response time in the CMS. + * It also listen for changes in the object, + * thus invalidating the cache entry. + * + * @param {String} id Object ID + * @param {Function} next Callback to wrap + * @returns {Function} New callback function + */ + function cacheCallback(id, next) { + return function(err, content) { + CMS.watch(id, function() { + // invalidate teh cache + delete cmsCache[id]; + }); + cmsCache[id] = [err, content]; + next(err, content); + }; + } + + function readLength(bytes, i) { + var viewer = new DataView(bytes.slice(i, i + 4)); + return viewer.getUint32(0); + } + + function parse_pack(bytes) { + var type; + var nameLen; + var name; + var content; + var binary = new Uint8Array(bytes); + var hash = {}; + + for (var i = 0; i < bytes.byteLength;) { + var size = readLength(bytes, i); + i += 4; /* 4 bytes */ + + type = binary[i++]; + nameLen = binary[i++]; + name = CMS.escape(ab_to_str(bytes.slice(i, nameLen + i))); + + i += nameLen; + + content = bytes.slice(i, i + size); + + switch (type) { + case 3: + hash[name] = {html: CMS.parse(content, false), mime: type}; + break; + + case 2: + try { + hash[name] = { object: JSON.parse(ab_to_str(content)), mime: type }; + } catch (err) { + /* invalid json, weird case */ + hash[name] = { object: {}, mime: type }; + } + break; + } + + i += size; + } + + return hash; + } + + function verify_cms_content(content, signature, objectId) { + if (is_litesite) { + return true; + } + var hash = asmCrypto.SHA256.bytes(content); + signature = asmCrypto.string_to_bytes(ab_to_str(signature)); + var i; + + try { + for (i = 0; i < signPubKey.__global.length; ++i) { + if (nacl.sign.detached.verify(hash, signature, signPubKey.__global[i])) { + /* It's a valid signature */ + return true; + } + } + + if (signPubKey[objectId]) { + for (i = 0; i < signPubKey[objectId].length; ++i) { + if (nacl.sign.detached.verify(hash, signature, signPubKey[objectId][i])) { + /* It's a valid signature */ + return true; + } + } + } + + + } catch (e) { + /* rubbish data, invalid anyways */ + return false; + } + + /* Invalid signature */ + return false; + } + + + function parse_cms_content(content, imgLoad) { + if (content && typeof content !== 'string') { + content = ab_to_str(content); + } + + return String(content) + .replace(/\s+/g, ' ') + .replace( + /((?:{|%7B)cmspath(?:%7D|}))\/(unsigned\/)?([\dA-Za-z]+)/g, + function(matches, cmspath, unsigned, filename) { + return imgLoad === false ? filename : CMS.img(filename); + }) + .replace(/]+>/g, function(m) { + if (m.indexOf('href="') > 0) { + m = m.replace(/"/g, '"'); + } + if (/href=["']\w+:/.test(m)) { + m = m.replace('>', ' target="_blank" rel="noopener noreferrer">'); + } + if (/href=["'][#/]/.test(m)) { + m = m.replace('>', ' class="clickurl">'); + } + return m; + }); + } + + function process_cms_response(bytes, next, as, id) { + var viewer = new Uint8Array(bytes); + + if (!isReady) { + return setTimeout(function() { + process_cms_response(bytes, next, as, id); + }, 100); + } + + var signature = bytes.slice(3, 67); // 64 bytes, signature + var mime = viewer[1]; + var label = ab_to_str(bytes.slice(67, viewer[2] + 67)); + var content = bytes.slice(viewer[2] + 67); + + if (as === "download") { + mime = 0; + } + + if (verify_cms_content(content, signature, id)) { + switch (mime) { + case 3: // html + next(false, {html: CMS.parse(content), mime: mime}); + return loaded(id); + + case 1: + var blob = new Blob([content]); + content = window.URL.createObjectURL(blob); + next(false, { url: content, mime: mime}); + return loaded(id); + + case 2: + try { + content = JSON.parse(ab_to_str(content)); + } catch (e) { + /* invalid json, weird case */ + return next(true, {signature: false}); + } + next(false, { object: content, mime: mime}); + return loaded(id); + + case 5: + next(false, parse_pack(content)); + break; + + default: + var io = new MemoryIO("temp", {}); + io.begin = function() {}; + io.setCredentials("", content.byteLength, "", [], []); + io.write(content, 0, function() { + io.download(label, ""); + next(false, {}); + return loaded(id); + }); + break; + } + } else { + next(true, { error: 'Invalid signature', signature: true }); + } + } + + var assets = {}; + var booting = false; + + var is_img; + + /** + * Steps + * + * Call many things in parallel, buffer the results + * and give it back once everything is ready + * + * @param {Number} times + * @param {Function} next * + * @return {Function} + */ + function steps(times, next) { + var responses = new Array(times + 1); + var done = 0; + function step_done(i, err, arg) { + responses[0] = responses[0] || err; + responses[i + 1] = arg; + if (++done === times) { + next.apply(null, responses); + } + } + + return function(id) { + return step_done.bind(null, parseInt(id)); + }; + } + + /** + * Rewrite links. Basically this links + * shouldn't trigger the `CMS.get` and force + * a download + */ + function dl_placeholder(str, sep, rid, id) { + return "'javascript:void(0)' data-cms-dl='" + id + "'"; + } + + /** + * Images placeholder. Replace *all* the images + * with a placeholder until the image is fully loaded from + * the BLOB server + */ + function img_placeholder(str, sep, rid, id) { + is_img = true; + return "'" + IMAGE_PLACEHOLDER + "' data-img='loading_" + id + "'"; + } + + /** + * Internal function to communicate with the BLOB server. + * + * It makes sure to optimize requests (makes sure we never + * ask things twice). This is the right place to + * cache (perhaps towards localStorage). + */ + function doRequest(id) { + if (!id) { + throw new Error("Calling CMS.doRequest without an ID"); + } + id = CMS.escape(id); + + if (typeof CMS_Cache === "object" && CMS_Cache[id]) { + for (var i in fetching[id]) { + if (fetching[id].hasOwnProperty(i)) { + fetching[id][i][0](null, CMS_Cache[id]); // callback + } + } + delete fetching[id]; + return; + } + + var q = getxhr(); + q.onerror = function() { + cmsBackoff = Math.min(cmsBackoff + 2000, 60000); + if (++cmsFailures === cmsRetries) { + return loadSnapshot(); + } + setTimeout(function() { + doRequest(id); + }, cmsBackoff); + }; + q.onload = function() { + for (var i in fetching[id]) { + if (fetching[id].hasOwnProperty(i)) { + process_cms_response(q.response, fetching[id][i][0], fetching[id][i][1], id); + } + } + delete fetching[id]; + cmsBackoff = 0; /* reset backoff */ + }; + var url = cmsStaticPath + CMS.scope + '/' + id; + q.open("GET", `${url}?v=${Math.floor(Date.now() / 36e5)}`); + q.responseType = 'arraybuffer'; + q.send(); + } + + var _listeners = {}; + + function snapshot_ready() { + for (var id in fetching) { + if (fetching.hasOwnProperty(id)) { + doRequest(id); + } + } + } + + function loadSnapshot() { + if (!jsl_loaded['cms_snapshot_js']) { + M.require('cms_snapshot_js').done(snapshot_ready); + } + } + + function loaded(id) { + if (_listeners[id]) { + for (var i in _listeners[id]) { + if (_listeners[id].hasOwnProperty(i)) { + _listeners[id][i](); + } + } + } + CMS.attachEvents(); + } + + var curType; + var curCallback; + var reRendered = {}; + + Object.assign(CMS, { + watch: function(type, callback) { + curType = type; + curCallback = callback; + }, + + getAndWatch: function(type, callback) { + this.get(type, callback); + this.watch(type, function() { + this.get(type, callback); + }); + }, + + reRender: function(type, nodeId) + { + if (type === curType && !reRendered[nodeId]) { + reRendered[nodeId] = true; + curCallback(nodeId); + } + }, + + escape: function(content, mode) { + mode = mode || 'strict'; + content = String(content || ''); + + if (mode === 'html') { + content = escapeHTML(content); + } + else if (mode === 'strict') { + content = content.replace(/[^\w.-]/g, ''); + } + else if (mode === 'regex') { + content = content.replace(/\W/g, "\\$&"); + } + else { + content = parseFloat(content) || ''; + } + return String(content || "\u26A0"); + }, + + parse: function(content, imgLoad) { + // @todo unify both functions once this file is properly refactored + return parse_cms_content(content, imgLoad); + }, + + isLoading: function() { + return Object.keys(fetching).length > 0; + }, + + attachEvents: function() { + $('*[data-cms-dl],.cms-asset-download').rebind('click', function(e) { + var $this = $(this); + var target = $this.data('id') || $this.data('cms-dl'); + if (!target) { + return; + } + + e.preventDefault(); + + loadingDialog.show(); + CMS.get(target, function() { + loadingDialog.hide(); + }, false, 'download'); + + return false; + }); + }, + + loaded: loaded, + + img: function(id) { + id = CMS.escape(id); + var imgPlaceHolder = IMAGE_PLACEHOLDER + "#" + id; + if (!assets[id]) { + this.get(id, function(err, obj) { + var url = CMS.escape(obj.url, 'html'); + if (url && !err) { + $('*[data-img=loading_' + id + '], *[src="' + imgPlaceHolder + '"]') + .attr({'id': '', 'src': url}); + } + assets[id] = url; + }); + } + return CMS.escape(assets[id] || imgPlaceHolder, 'html'); + }, + + index: function(index, callback) { + CMS.get(index, function(err, data) { + if (err) { + return callback(err); + } + + CMS.get(data.object, function(err) { + if (err) { + return callback(err); + } + + var hash = {}; + var args = Array.prototype.slice.call(arguments); + + args.shift(); + + args.map(function(index) { + for (var name in index) { + if (index.hasOwnProperty(name)) { + hash[name] = index[name]; + } + } + }); + + callback(err, hash); + }); + }); + }, + + get: function(id, next, cache, as) { + if (d > 1) { + console.debug('CMS.get(%s)', id, [id]); + } + if (Array.isArray(id)) { + var step = steps(id.length, next); + for (var i = 0; i < id.length; ++i) { + this.get(id[i], step(i), cache, as); + } + return; + } + var isNew = false; + next = next || function() {}; + id = CMS.escape(id); + + if (cache) { + next = cacheCallback(id, next); + if (cmsCache[id]) { + return next(cmsCache[id][0], cmsCache[id][1]); + } + } + + if (typeof fetching[id] === "undefined") { + isNew = true; + fetching[id] = []; + } + + fetching[id].push([next, as]); + if (isNew) { + doRequest(id); + } + }, + + on: function(id, callback) + { + if (!_listeners[id]) { + _listeners[id] = []; + } + _listeners[id].push(callback); + }, + + imgLoader: function(html, id) { + if (!assets[id]) { + is_img = false; + // replace images + html = html.replace(new RegExp('([\'"])(i:(' + id + '))([\'"])', 'g'), img_placeholder); + // replace download links + html = html.replace(new RegExp('([\'"])(d:(' + id + '))([\'"])', 'g'), dl_placeholder); + + if (is_img) { + this.get(id); + } + } else { + html = html.replace(IMAGE_PLACEHOLDER + "' data-img='loading_" + id, assets[id], 'g'); + } + return html; + }, + + fillStats: function($page, muser, dactive, bfiles, mcountries) { + // Locale of million and biliion will comes -> should be localised now + $('.register-count .num span', $page).text(muser); + $('.daily-active .num span', $page).text(dactive); + $('.files-count .num span', $page).text(bfiles); + $('.mega-countries .num span', $page).text(mcountries); + }, + + dynamicStatsCount: function($page) { + if (this.statsCache && new Date() - this.statsCache.statsTime < 36e5) { + this.fillStats( + $page, + this.statsCache.muser, + this.statsCache.dactive, + this.statsCache.bfiles, + this.statsCache.mcountries + ); + } + else { + loadingDialog.show(); + + api_req({a: "dailystats"}, { + callback: function(res) { + + loadingDialog.hide(); + + var muser = 175; + var dactive = 10; + var bfiles = 75; + var mcountries = 200; + + if (typeof res === 'object') { + muser = res.confirmedusers.total / 1000000 | 0; + bfiles = res.files.total / 1000000000 | 0; + } + + CMS.fillStats($page, muser, dactive, bfiles, mcountries); + CMS.statsCache = { + muser: muser, + dactive: dactive, + bfiles: bfiles, + mcountries: mcountries, + statsTime: new Date() + }; + } + }); + } + } + }); + + /* Make it public */ + Object.defineProperty(window, 'CMS', {value: CMS}); +})(this); + +var achieve_data = false; + +function init_start() { + "use strict"; + + var carouselInterval; + var sliderInterval; + var swipeInterval = 5000; + var intl = mega.intl.number; + var dropboxPrice = 4.9; + var megaPrice = 1.56; + var gdrivePrice = 4.9; + var $page = $('.bottom-page.scroll-block.startpage', '.fmholder'); + + if (u_type > 0) { + $('.startpage.register:not(.business-reg)', $page).text(l[164]); + $('.mid-green-link.register-lnk.fm, .startpage.register', $page).attr('href', '/fm'); + $('.mid-green-link.register-lnk.chat', $page).attr('href', '/fm/chat'); + + if (is_mobile) { + $('.startpage.account', $page).attr('href', '/fm/account'); + } + else { + $('.startpage.account', $page).attr('href', '/fm/dashboard'); + } + if (u_type === 3) { + $('.business-reg', $page).addClass('hidden').attr('href', ''); + } + } + else { + $('.mid-green-link.register-lnk, .startpage.register', $page).attr('href', '/register'); + $('.business-reg', $page).removeClass('hidden').attr('href', '/registerb'); + } + + $('.bottom-menu.body .logo', '.fmholder').rebind('click.clickurl', function(e) { + var $scrollableBlock; + + e.preventDefault(); + + if (page === 'start') { + $scrollableBlock = is_mobile ? $(window) : $('.fmholder', 'body'); + $scrollableBlock.animate({ scrollTop: 0 }, 1600); + } + else { + loadSubPage('start'); + } + }); + + // if (mega.flags.refpr) { + // var slidingTimer; + + // var doSlide = function() { + // // eslint-disable-next-line no-unused-expressions + // slidingTimer && clearTimeout(slidingTimer); + // var $banners = $('.bottom-page.top-banner', $page); + + // if ($banners.filter('.active').hasClass('banner1')) { + // $banners.removeClass('active'); + // $banners.filter('.banner2').addClass('active'); + // $page.addClass('white-pages-menu'); + // } + // else { + // $banners.removeClass('active'); + // $banners.filter('.banner1').addClass('active'); + // $page.removeClass('white-pages-menu'); + // } + // slidingTimer = setTimeout(doSlide, 10000); + // }; + // slidingTimer = setTimeout(doSlide, 10000); + // // Top banner controls init + // $('.bottom-page.banner-control', $page).removeClass('hidden').rebind('click.top-banner', doSlide); + // $('.mid-green-link.refer', $page).removeClass('hidden'); + // } + + $('.dropbox span', $page).text(formatCurrency(dropboxPrice)); + + $('.mega span', $page).text(formatCurrency(megaPrice)); + + $('.gdrive span', $page).text(formatCurrency(gdrivePrice)); + + /** + * detectSwipe + * + * @param {Object} $el DOM swipable area. + * @param {Object} $slides DOM slides selector. + * @param {Function} func Function which will be called after swipe is detected + */ + function detectSwipe($el, $slides, func) { + var swipeStartX = 0; + var swipeEndX = 0; + var swipeStartY = 0; + var swipeEndY = 0; + var minX = 50; + var direc = ''; + + $el.on('touchstart', function(e) { + var t = e.touches[0]; + + swipeStartX = t.screenX; + swipeStartY = t.screenY; + }); + + $el.on('touchmove', function(e) { + + var t = e.touches[0]; + swipeEndX = t.screenX; + swipeEndY = t.screenY; + }); + + $el.on('touchend', function(e) { + if ((swipeEndX + minX < swipeStartX && swipeEndX !== 0)) { + direc = 'next'; + } + else if (swipeEndX - minX > swipeStartX) { + direc = 'prev'; + } + + if (direc !== '' && typeof func === 'function') { + func($slides, direc); + } + + direc = ''; + swipeStartX = 0; + swipeEndX = 0; + }); + } + + /** + * carouselSwitch + * + * @param {Object} $slides DOM slides selector. + * @param {String} direction Sets what Reviews Carousel slide should be shown. Expected values: 'next' or 'prev'. + */ + function carouselSwitch($slides, direction) { + var $currentSlide = $slides.filter('.current'); + var currentSlide; + var slideNum; + var nextSlide; + var prevSlide; + + $currentSlide = $currentSlide.length ? $currentSlide : $currentSlide.last(); + currentSlide = parseInt($currentSlide.attr('data-sl')); + slideNum = $slides.length; + + if (direction === 'next') { + currentSlide = currentSlide + 1 <= slideNum ? currentSlide + 1 : 1; + } + else { + currentSlide = currentSlide - 1 >= 1 ? currentSlide - 1 : slideNum; + } + + nextSlide = currentSlide + 1 <= slideNum ? currentSlide + 1 : 1; + prevSlide = currentSlide - 1 >= 1 ? currentSlide - 1 : slideNum; + + $slides.removeClass('current next prev'); + $slides.filter('.slide' + currentSlide).addClass('current'); + $slides.filter('.slide' + prevSlide).addClass('prev'); + $slides.filter('.slide' + nextSlide).addClass('next'); + } + + // Reviews carousel. Controls init + $('.startpage.carousel-control').rebind('click', function () { + if ($(this).hasClass('next')) { + carouselSwitch($('.startpage.carousel-slide', $page), 'next'); + } + else { + carouselSwitch($('.startpage.carousel-slide', $page), 'prev'); + } + }); + + /** + * showSlide + * + * @param {Object} $slides DOM slides selector. + * @param {String} slide Number of next slider slide which should be shown. Can also be "next" or "prev". + * @param {Boolean} autoSlide Inits auto sliding. Optional. + */ + function showSlide($slides, slide, autoSlide) { + var $slidesNavDots = $slides.filter('.nav'); + var slidesNum = $slidesNavDots.length; + var currentSlide = parseInt($slidesNavDots.filter('.active').data('slide')); + + // Init auto slide + clearInterval(sliderInterval); + + // Init auto slide + if (autoSlide) { + sliderInterval = setInterval(function() { + showSlide($slides, 'next', true); + }, swipeInterval); + } + + if (slide === 'next') { + slide = currentSlide + 1 <= slidesNum ? currentSlide + 1 : 1; + } + else if (slide === 'prev') { + slide = currentSlide - 1 >= 1 ? currentSlide - 1 : slidesNum; + } + + $slides.removeClass('active').parent('.software-content').removeClass('expanded'); + $slides.filter('[data-slide="' + slide + '"]') + .addClass('active').parent('.software-content').addClass('expanded'); + } + + /** + * initSlider + * + * Wrapper should have "slidername-wrap" class (e.g ".slider-wrap"). + * Navigation bar should have "slidername-nav" class (e.g ".slider-nav"). + * + * @param {String} sliderClass Slider Classname with dot (e.g ".slider"). All slides should have this class. + * @param {Boolean} autoSlide Enables/disables auto sliding. Optional. + * @param {String} buttonsClass Addition navigtion buttons Classname with dot (e.g ".slider-buttons"). Optional. + */ + function initSlider(sliderClass, autoSlide, buttonsClass) { + var $slider = $(sliderClass + '-wrap', $page); + var $slides = $(sliderClass, $slider); + var $slidesNav = $(sliderClass + '-nav'); + var $slidesNavDots = $('.nav', $slidesNav); + var $buttons = $(buttonsClass); + + // Show first slide + showSlide($slides, 1, autoSlide); + + // Slider controls click even + $slidesNavDots.add($buttons).rebind('click.slider', function() { + var $this = $(this); + var slideNum = $this.data('slide'); + + if (!$this.hasClass('active')) { + showSlide($slides, slideNum, autoSlide); + } + + // Init subslider for desktop (with autosliding) + if ($this.data('subslide') && !is_mobile) { + initSlider('.' + $this.data('subslide'), true); + } + }); + + // Slider Prev/Next buttons + $('.nav-button', $slidesNav).rebind('click.slider', function() { + var $this = $(this); + + if ($this.hasClass('next')) { + showSlide($slides, 'next', autoSlide); + } + else { + showSlide($slides, 'prev', autoSlide); + } + }); + } + + carouselSwitch($('.startpage.carousel-slide', $page), 'next'); + + // Init Software block Slider + initSlider('.soft-slide', false, '.software-header'); + + // Init Mobile events + if (is_mobile) { + detectSwipe($('.startpage.carousel', $page), $('.startpage.carousel-slide', $page), carouselSwitch); + detectSwipe($('.soft-slide-wrap', $page), $('.soft-slide', $page), showSlide); + } + + if (!is_mobile && page === 'start') { + InitFileDrag(); + } + else if (is_mobile && page === 'start') { + if (!mega.ui.contactLinkCardDialog) { + var contactLinkCardHtml = pages['mobile-add-contact-card']; + if (contactLinkCardHtml) { + mega.ui.contactLinkCardDialog = contactLinkCardHtml; + } + } + mobile.initMobileAppButton(); + } + else if (page === 'download') { + $('.widget-block').hide(); + } + startCountRenderData = { + 'users': '', + 'files': '' + }; + + if (is_mobile) { + $(window).add('#startholder').rebind('scroll.counter', function () { + if (page === 'start') { + $.lastScrollTime = Date.now(); + start_counts(); + } + }); + } + else { + $(window).rebind('resize.counter', function () { + $.lastScrollTime = Date.now(); + }); + $('#startholder').rebind('scroll.counter', function () { + if (page === 'start' || page === 'download') { + $.lastScrollTime = Date.now(); + start_counts(); + } + }); + } + + if (getCleanSitePath() === 'mobile') { + setTimeout(function () { + var offset = $(".bottom-page.bott-pad.mobile").offset(); + + if (offset) { + $('#startholder').animate({ + scrollTop: offset.top + }, 800); + } + }, 1000); + } + mBroadcaster.sendMessage('HomeStartPageRendered:mobile'); +} + +var start_countLimit = 0; + +var start_countdata = false; + +function start_counts() { + "use strict"; + + if (start_countdata) { + return; + } + else { + $('.bottom-page.white-block.counter').addClass('hidden'); + } + start_countdata = true; + start_APIcount(); +} + +start_APIcount_inflight = false; +var start_APIcountdata; +var start_countInterval; + +function start_APIcount() { + "use strict"; + + if (start_APIcount_inflight) { + return; + } + start_APIcount_inflight = true; + api_req({ + "a": "dailystats" + }, { + callback: function (res) { + $('.bottom-page.white-block.counter').removeClass('hidden'); + start_APIcountdata = res; + start_APIcountdata.timestamp = Date.now(); + start_APIcount_inflight = false; + if (!start_countUpdate_inflight && (page === 'start' || page === 'download')) { + start_countInterval = setInterval(start_countUpdate, 30); + } + } + }); +} + +start_countUpdate_inflight = false; +startCountRenderData = {}; + +var RandomFactorTimestamp = 0; +var start_Lcd = {}; +var countUpdateInterval = 30; + +function start_countUpdate() { + "use strict"; + + if (!start_countUpdate_inflight) { + startCountRenderData = { + 'users': '', + 'files': '', + 'users_blocks': {}, + 'files_blocks': {}, + }; + } + start_countUpdate_inflight = true; + if (page !== 'start' && page !== 'download') { + start_countdata = false; + start_countUpdate_inflight = false; + clearInterval(start_countInterval); + return false; + } + const now = Date.now(); + const {timestamp, confirmedusers = false, files = false} = Object(start_APIcountdata); + + if (!start_Lcd.users) { + start_Lcd.users = confirmedusers.total; + } + if (!start_Lcd.files) { + start_Lcd.files = files.total; + } + if (!start_Lcd.ts) { + start_Lcd.ts = timestamp; + } + if (!start_Lcd.timestamp) { + start_Lcd.timestamp = timestamp; + } + var filesFactor = 1; + var usersFactor = 1; + + if (start_Lcd.timestamp + 10 < now) { + const rate = (now - start_Lcd.timestamp) / 86400000; + + if (timestamp > start_Lcd.ts + 30000 && timestamp + 30000 > now) { + if (start_Lcd.users > confirmedusers.total) { + usersFactor = 0.3; + } + else if (start_Lcd.users < confirmedusers.total) { + usersFactor = 2; + } + if (start_Lcd.files > files.total) { + filesFactor = 0.3; + } + else if (start_Lcd.files < files.total) { + filesFactor = 2; + } + } + else { + filesFactor = 1; + usersFactor = 1; + } + + if (RandomFactorTimestamp + 500 < now) { + filesFactor *= Math.random() * 0.1 - 0.05; + RandomFactorTimestamp = now; + } + + if (confirmedusers.dailydelta) { + start_Lcd.users += rate * usersFactor * confirmedusers.dailydelta; + } + if (files.dailydelta) { + start_Lcd.files += rate * filesFactor * files.dailydelta; + } + start_Lcd.timestamp = now; + } + + function renderCounts(total, type) { + if (total.length === startCountRenderData[type].length) { + for (var i = 0, len = total.length; i < len; i++) { + if (startCountRenderData[type][i] !== total[i]) { + var elm = startCountRenderData[type + '_blocks'][i]; + if (elm) { + elm.textContent = total[i]; + } + } + } + } + else { + var html = ''; + var $wrapper = $('.startpage.flip-wrapper.' + type); + for (var k = 0, ln = total.length; k < ln; k++) { + html += '
              ' + total[k] + '
              '; + } + $wrapper.safeHTML(html); + startCountRenderData[type + '_blocks'] = $('.flip-bg', $wrapper); + } + startCountRenderData[type] = total; + } + + // do not render the counter while scrolling or resizing, as some browsers have real difficulty with it + // only render the counter every 2000ms if invisible + // only perform the visibility check shortly ater scrolling or resizing, as it's CPU intensive + + if ($.lastScrollTime + 100 < Date.now()) { + if ($.lastScrollTime < Date.now() + 200) { + $.counterVisible = $('.startpage.flip-wrapper.users').visible() + || $('.startpage.flip-wrapper.files').visible() + || $('.bottom-page.big-icon.registered-users').visible(); + } + if ($.counterVisible || !$.lastCounterRender || $.lastCounterRender + 2000 < Date.now()) { + renderCounts(String(Math.round(start_Lcd.users)), 'users'); + renderCounts(String(Math.round(start_Lcd.files)), 'files'); + $.lastCounterRender = Date.now(); + } + } + + if (start_APIcountdata.timestamp + 30000 < Date.now()) { + start_APIcount(); + } +} + +/** + * Bottom pages functionality + */ +var bottompage = { + + /** + * Initialise the page + */ + init: function() { + + "use strict"; + + var $content = $('.bottom-page.scroll-block', '.fmholder'); + + // Unbind sliders events + $(window).unbind('resize.sliderResize'); + + if (page.substr(0, 9) === 'corporate') { + $('body').addClass('old'); + scrollMenu(); + } + else { + $('body').removeClass('old'); + } + + // Init animations + if ($content.hasClass('animated-page')) { + bottompage.initAnimations($content); + } + + // Init Slider for business page + if (page === 'business') { + bottompage.initSlider(); + } + if (u_attr && u_attr.b && u_attr.b.s !== -1) { + $('.bottom-menu.body .resellerlink', $content).addClass('hidden'); + $('.bottom-menu.body .pro-link', $content).addClass('hidden'); + } + else { + $('.bottom-menu.body .resellerlink', $content).removeClass('hidden'); + $('.bottom-menu.body .pro-link', $content).removeClass('hidden'); + } + + // Insert variables with replaced browser names + if (page === 'bird') { + $('.top-bl .bottom-page.top-dark-button.rounded span.label', $content) + .safeHTML(l[20923].replace('%1', 'Thunderbird')); + } + + // Init Video resizing on security page + if (page === 'security' && !is_mobile) { + bottompage.videoResizing(); + + $(window).rebind('resize.security', function (e) { + bottompage.videoResizing(); + }); + } + + if (!is_mobile) { + + // Init floating top menu + bottompage.initFloatingTop(); + + bottompage.initNavButtons($content); + } + else { + bottompage.initMobileNavButtons($content); + } + + const $cs = $('.cookies-settings', $content).off('click.csp').addClass('hidden'); + if ('csp' in window) { + $cs.removeClass('hidden').rebind('click.csp', function() { + if (!this.classList.contains('top-menu-item')) { + csp.trigger().dump('csp.trigger'); + return false; + } + }); + } + else { + // cookie-dialog not available, replace links with text nodes. + document.querySelectorAll('a.cookies-settings').forEach(e => e.replaceWith(e.textContent)); + } + + // Init scroll button + bottompage.initBackToScroll(); + bottompage.initScrollToContent(); + + // Show/hide Referral Program and Pricing menu items for different account types + bottompage.changeMenuItemsList($content); + localeImages($content); + }, + + /** + * Show/hide necessary menu items for different acctount types + */ + changeMenuItemsList: function($content) { + "use strict"; + + var $bottomMenu = $('.bottom-menu.body', $content); + var $pagesMenu = $('.pages-menu.body', $content); + + // Show/Hide Affiliate program link in bottom menu + if (mega.flags.refpr) { + $('a.link.affiliate', $bottomMenu).removeClass('hidden'); + } + else { + $('a.link.affiliate', $bottomMenu).addClass('hidden'); + } + + // Hide Pricing link for current Business or Pro Flexi accounts + if ((u_attr && u_attr.b && u_attr.b.s !== pro.ACCOUNT_STATUS_EXPIRED) || + (u_attr && u_attr.pf && u_attr.pf.s !== pro.ACCOUNT_STATUS_EXPIRED)) { + $('a.link.pro', $bottomMenu).addClass('hidden'); + $('.pages-menu.link.pro', $pagesMenu).addClass('hidden'); + } + else { + $('a.link.pro', $bottomMenu).removeClass('hidden'); + $('.pages-menu.link.pro', $pagesMenu).removeClass('hidden'); + } + + if (u_type && (!mega.flags.ach || Object(window.u_attr).b)) { + // Hide Achievements link for an non-achievement account and business account + $('a.link.achievements', $bottomMenu).addClass('hidden'); + } + else { + $('a.link.achievements', $bottomMenu).removeClass('hidden'); + } + }, + + /** + * Init Animated blocks + * @param {Object} $content The jQuery selector for the current page + * @returns {void} + */ + initAnimations: function($content) { + "use strict"; + + var $scrollableBlock = is_mobile ? $('body.mobile .fmholder') : $('.fmholder', 'body'); + + // Init top-block animations + setTimeout(function() { + $content.addClass('start-animation'); + }, 700); + + var isVisibleBlock = function($row) { + if ($row.length === 0) { + return false; + } + + var $window = $(window); + var elementTop = $row.offset().top; + var elementBottom = elementTop + $row.outerHeight(); + var viewportTop = $window.scrollTop(); + var viewportBottom = viewportTop + $window.outerHeight(); + + return elementBottom - 80 > viewportTop && elementTop < viewportBottom; + }; + + var showAnimated = function($content) { + // add circular-spread here later + var $blocks = $('.animated, .fadein, .circular-spread, .text-focus-contract', $content); + + for (var i = $blocks.length - 1; i >= 0; i--) { + + var $block = $($blocks[i]); + + if (isVisibleBlock($block)) { + if (!$block.hasClass('start-animation')) { + $block.addClass('start-animation'); + } + } + else if ($block.hasClass('start-animation')) { + // dont reset circular spread animation + if ($block.hasClass('circular-spread') || $block.hasClass('text-focus-contract')) { + return; + } + $block.removeClass('start-animation'); + } + } + }; + + showAnimated($content); + + $scrollableBlock.add(window).rebind('scroll.startpage', function() { + var $scrollTop = $('.scroll-to-top', $content); + showAnimated(); + + if (isVisibleBlock($('.bottom-page.light-blue.top, .bottom-page.top-bl', $content))) { + $scrollTop.removeClass('up'); + } + else { + $scrollTop.addClass('up'); + } + }); + + // Init Scroll to Top button event + $('.scroll-to-top:visible', $content).rebind('click.scroll', function() { + + if ($(this).hasClass('up')) { + $scrollableBlock.animate({ + scrollTop: 0 + }, 1600); + } + else { + $scrollableBlock.animate({ + scrollTop: $('.bottom-page.content', $content).outerHeight() + }, 1600); + } + }); + }, + + initBackToScroll: function() { + "use strict"; + + var $body = $('body'); + + $('#startholder').rebind('scroll.bottompage', function() { + sessionStorage.setItem('scrpos' + MurmurHash3(page).toString(16), $(this).scrollTop() | 0); + if (page === 'download') { + $(window).unbind('resize.download-bar'); + } + }); + + window.onpopstate = function() { + + var sessionData = sessionStorage['scrpos' + MurmurHash3(page).toString(16)]; + + if ($body.hasClass('bottom-pages') && sessionData) { + + // Scroll to saved position and reset previous focus + $('#startholder', $body).scrollTop(sessionData).trigger('mouseover'); + + } + }; + }, + + initScrollToContent: function() { + "use strict"; + + // Init Scroll to Content event + $('.bottom-page.scroll-button', '.top-bl').rebind('click.scrolltocontent', function() { + + $('.fmholder, html, body').animate({ + scrollTop: $('.full-block', 'body').position().top + }, 1600); + }); + }, + + initNavButtons: function($content) { + "use strict"; + + var $topMenu = $('.pages-menu.body', $content); + + // No pages menu in DOM + if ($topMenu.length === 0) { + return false; + } + + // Close submenu function + function closePagesSubMenu() { + $('.submenu.active, .submenu-item.active', $topMenu).removeClass('active'); + $(window).unbind('resize.pagesmenu'); + $content.unbind('mousedown.closepmenu'); + } + + // Close previously opened sub menu + closePagesSubMenu(); + + // Open submenu + $('.submenu-item', $topMenu).rebind('click.openpmenu', function() { + var $this = $(this); + var $submenu = $this.next('.submenu'); + + if ($this.is('.active')) { + closePagesSubMenu(); + + return false; + } + + function subMenuPos() { + var $this = $('.submenu-item.active', $topMenu); + var $submenu = $this.next('.submenu'); + + $submenu.position({ + of: $this, + my: "center top", + at: "center bottom", + collision: "fit" + }); + } + + closePagesSubMenu(); + $this.addClass('active'); + $submenu.addClass('active'); + subMenuPos(); + + $(window).rebind('resize.pagesmenu', function() { + subMenuPos(); + }); + + // Close pages submenu by click outside of submenu + $content.rebind('mousedown.closepmenu', function(e) { + var $target = $(e.target); + + if (!$target.is('.submenu.active') && !$target.closest('.submenu-item.active').length + && !$target.closest('.submenu.active').length) { + closePagesSubMenu(); + } + }); + }); + }, + + initMobileNavButtons: function($content) { + "use strict"; + + var $overlay = $('.nav-overlay', 'body'); + var $header = $('.fm-header', $content); + var $topMenu = $('.pages-menu.body', $content); + var $menuDropdown; + + $overlay.addClass('hidden'); + + // No pages menu in DOM + if ($topMenu.length === 0) { + $header.unbind('click.closepmenu'); + + return false; + } + + $menuDropdown = $('.mobile.pages-menu-dropdown', $content); + + // Close pages menu function + function closePagesMenu() { + $overlay.addClass('hidden'); + $('html').removeClass('overlayed'); + $topMenu.removeClass('active'); + $menuDropdown.removeClass('active'); + $overlay.unbind('click.closepmenu'); + $header.unbind('click.closepmenu'); + } + + // Close previously opened menu + closePagesMenu(); + + // Open menu + $menuDropdown.rebind('click.openpmenu', function() { + var $this = $(this); + + if ($this.is('.active')) { + closePagesMenu(); + + return false; + } + + $overlay.removeClass('hidden'); + $('html').addClass('overlayed'); + $this.addClass('active'); + $topMenu.addClass('active'); + + // Close previously opened menu by click on overlay or menu icon + $overlay.add($header).rebind('click.closepmenu', function(e) { + if ($(e.target).closest('.pages-menu-dropdown').length === 0) { + closePagesMenu(); + } + }); + }); + + // Expand submenu + $('.submenu-item', $topMenu).rebind('click.opensubmenu', function() { + var $this = $(this); + var $submenu = $this.next('.submenu'); + + if ($this.is('.active')) { + $this.removeClass('active'); + $submenu.removeClass('active'); + } + else { + $this.addClass('active'); + $submenu.addClass('active'); + } + }); + }, + + /** + * Init Common scrollable sliders for mobile devices. + * @param {Object} $sliderSection The jQuery selector for the current page or subsection + * @param {Object} $scrollBlock The jQuery selector for the scrollable block + * @param {Object} $slides The jQuery selector for the slides + * @param {Boolean} passing TRUE if we need to show slides withhout scrolling animation + * @returns {void} + */ + initSliderEvents: function($sliderSection, $scrollBlock, $slides, passing) { + + 'use strict'; + + // The box which gets scroll and contains all the child content. + const $scrollContent = $scrollBlock.children(); + const $controls = $('.default-controls', $sliderSection); + const $specialControls = $('.sp-control', $sliderSection); + const $dots = $('.nav', $controls).add($specialControls); + let isRunningAnimation = false; + + // Scroll to first block + $scrollBlock.scrollLeft(0); + $dots.removeClass('active'); + $dots.filter('[data-slide="0"]').addClass('active'); + + $slides.removeClass('active'); + $($slides[0]).addClass('active'); + + // Scroll to necessary plan block + const scrollToPlan = (slideNum) => { + let $previousPlan = 0; + let planPosition = 0; + + // Prevent scroll event + isRunningAnimation = true; + + // Get plan position related to previous plan to include border-spacing + $previousPlan = $($slides[slideNum - 1]); + planPosition = $previousPlan.length ? $previousPlan.position().left + + $scrollBlock.scrollLeft() + $previousPlan.outerWidth() : 0; + + // Set controls dot active state + $dots.removeClass('active'); + $dots.filter(`[data-slide="${slideNum}"]`).addClass('active'); + + $slides.removeClass('active'); + $($slides[slideNum]).addClass('active'); + + // Scroll to plan block + $scrollBlock.stop().animate({ + scrollLeft: planPosition + }, passing ? 0 : 600, 'swing', () => { + + // Enable on scroll event after auto scrolling + isRunningAnimation = false; + }); + }; + + // Init scroll event + $scrollBlock.rebind('scroll.scrollToPlan', function() { + const scrollVal = $(this).scrollLeft(); + const contentWidth = $scrollContent.outerWidth(); + const scrollAreaWidth = $scrollBlock.outerWidth(); + let closestIndex = 0; + + // Prevent on scroll event during auto scrolling or slider + if (isRunningAnimation || contentWidth === scrollAreaWidth) { + return false; + } + + // If block is scrolled + if (scrollVal > 0) { + closestIndex = Math.round(scrollVal / + (contentWidth - scrollAreaWidth) * $slides.length); + } + + // Get closest plan index + closestIndex = closestIndex - 1 >= 0 ? closestIndex - 1 : 0; + + // Set controls dot active state + $dots.removeClass('active'); + $dots.filter(`[data-slide="${closestIndex}"]`).addClass('active'); + + $slides.removeClass('active'); + $($slides[closestIndex]).addClass('active'); + }); + + // Init controls dot click + $dots.rebind('click.scrollToPlan', function() { + + // Scroll to selected plan + scrollToPlan($(this).data('slide')); + }); + + // Init Previous/Next controls click + $('.nav-button', $controls).rebind('click.scrollToPlan', function() { + const $this = $(this); + let slideNum; + + // Get current plan index + slideNum = $('.nav.active', $controls).data('slide'); + + // Get prev/next plan index + if ($this.is('.prev')) { + slideNum = slideNum - 1 > 0 ? slideNum - 1 : 0; + } + else if (slideNum !== $slides.length - 1) { + slideNum += 1; + } + + // Scroll to selected plan + scrollToPlan(slideNum); + }); + + $(window).rebind('resize.sliderResize', () => { + this.initSliderEvents($sliderSection, $scrollBlock, $slides, passing); + }); + }, + + initSlider: function() { + + "use strict"; + + var $slider = $('.bottom-page.slider-body'); + + $('.slider-button, .slider-dot-button', $slider).rebind('click', function() { + var $this = $(this); + var $buttons; + var activeSlide; + var newSlide; + + if (!$this.hasClass('active')) { + $buttons = $('.slider-button, .slider-dot-button', $slider); + activeSlide = $('.slider-button.active', $slider).attr('data-num'); + newSlide = $this.attr('data-num'); + + $buttons.removeClass('active'); + $buttons.filter('.slide' + newSlide).addClass('active'); + $slider.removeClass('slide' + activeSlide).addClass('slide' + newSlide); + } + }); + + $('.slider-ctrl-button', $slider).rebind('click', function() { + var $this = $(this); + var $buttons = $('.slider-button, .slider-dot-button', $slider); + var activeSlide = parseInt($('.slider-button.active', $slider).attr('data-num')); + var slidesNum = $('.slider-button', $slider).length; + var newSlide; + + if ($this.hasClass('prev') && activeSlide > 1) { + newSlide = activeSlide - 1; + } + else if ($this.hasClass('next') && activeSlide < slidesNum) { + newSlide = activeSlide + 1; + } + else { + return false; + } + + $buttons.removeClass('active'); + $buttons.filter('.slide' + newSlide).addClass('active'); + $slider.removeClass('slide' + activeSlide).addClass('slide' + newSlide); + }); + }, + + initTabs: function() { + $('.bottom-page.tab').rebind('click', function() { + var $this = $(this); + var tabTitle = $this.attr('data-tab'); + + if (!$this.hasClass('active')) { + $('.bottom-page.tab').removeClass('active'); + $('.bottom-page.tab-content:visible').addClass('hidden'); + $('.bottom-page.tab-content.' + tabTitle).removeClass('hidden'); + $this.addClass('active'); + } + }); + }, + + // Init floating top bar, product pages menu or help center navigation bar + initFloatingTop: function() { + + const $fmHolder = $('.fmholder', 'body.bottom-pages'); + const $topHeader = $('.bottom-page .top-head, .pages-menu-wrap .pages-menu.body', $fmHolder); + const $productPagesMenu = $('.pages-menu.body', $fmHolder); + + // Resize top menu / produc pages menu or help center navigation bar + // Required to avoid "jumpng" effect when we change "position" property + const topResize = function() { + + if ($topHeader.hasClass('floating')) { + if ($topHeader.parent().outerWidth() === 0 && $topHeader.parent().length > 1) { + $topHeader.outerWidth($($topHeader.parent()[1]).outerWidth()); + } + else { + $topHeader.outerWidth($topHeader.parent().outerWidth()); + } + } + else { + $topHeader.css('width', ''); + } + } + + if (!$topHeader.length) { + + return $(window).unbind('resize.topheader'); + } + + // Init menus resizing + topResize(); + + $(window).rebind('resize.topheader', function() { + topResize(); + }); + + // Select bottom pages scrolling block or window for mobile + $fmHolder.rebind('scroll.topmenu', () => { + + const topPos = $fmHolder.scrollTop(); + + if (topPos > 400) { + + // Make menus floating but not visible + $topHeader.addClass('floating'); + $('.submenu.active, .submenu-item.active', $productPagesMenu).removeClass('active'); + + // Show floating menus + if (topPos > 600) { + $topHeader.addClass('activated'); + } + else { + + // Hide floating menus + $topHeader.removeClass('activated'); + + // Hide all popup as top bar not visisble for this part + notify.closePopup(); + alarm.hideAllWarningPopups(true); + } + } + else if (topPos <= 200) { + + // Return menus static positions + $topHeader.removeClass('floating activated').css('width', ''); + } + }); + }, + + videoResizing: function() { + "use strict"; + + var $videoWrapper = $('.security-page-video-block'); + var videoWidth = $videoWrapper.outerWidth(); + + if ($videoWrapper.length > 0 && videoWidth < 640) { + $videoWrapper.height(Math.round(videoWidth * 0.54)); + } + else { + $videoWrapper.removeAttr('style'); + } + } +}; + +(function(scope) { + 'use strict'; + + var dir_inflight = 0; + var filedrag_u = []; + var filedrag_paths = Object.create(null); + var touchedElement = 0; + + function addUpload(files, emptyFolders) { + var straight = $.doStraightUpload || Object(window.fmconfig).ulddd || M.currentrootid === M.RubbishID; + + console.assert(page === 'start' || window.fminitialized, 'check this...'); + + if (M.InboxID && M.currentrootid && (M.currentrootid === M.InboxID + || M.getNodeRoot(M.currentdirid.split('/').pop()) === M.InboxID)) { + + msgDialog('error', l[882], l.upload_to_restricted_folder, l.upload_to_backup_info); + return false; + } + + if (page === 'start' || straight) { + M.addUpload(files, false, emptyFolders); + } + else { + openCopyUploadDialog(files, emptyFolders); + } + } + + function pushUpload() { + if (!--dir_inflight && $.dostart) { + var emptyFolders = Object.keys(filedrag_paths) + .filter(function(p) { + return filedrag_paths[p] < 1; + }); + + addUpload(filedrag_u, emptyFolders); + filedrag_u = []; + filedrag_paths = Object.create(null); + + if (page === 'start') { + start_upload(); + } + } + } + + function pushFile(file, path) { + if (d > 1) { + console.warn('Adding file %s', file.name, file); + } + if (file) { + file.path = path; + filedrag_u.push(file); + } + pushUpload(); + } + + function getFile(entry) { + return new Promise(function(resolve, reject) { + entry.file(resolve, reject); + }); + } + + function traverseFileTree(item, path, symlink) { + path = path || ""; + + if (item.isFile) { + dir_inflight++; + getFile(item).then(function(file) { + pushFile(file, path); + }).catch(function(error) { + if (d) { + var fn = symlink ? 'debug' : 'warn'; + + console[fn]('Failed to get File from FileEntry for "%s", %s', + item.name, Object(error).name, error, item); + } + pushFile(symlink, path); + }); + } + else if (item.isDirectory) { + var newPath = path + item.name + "/"; + filedrag_paths[newPath] = 0; + dir_inflight++; + var dirReader = item.createReader(); + var dirReaderIterator = function() { + dirReader.readEntries(function(entries) { + if (entries.length) { + var i = entries.length; + while (i--) { + traverseFileTree(entries[i], newPath); + } + filedrag_paths[newPath] += entries.length; + + dirReaderIterator(); + } + else { + pushUpload(); + } + }, function(error) { + console.warn('Unable to traverse folder "%s", %s', + item.name, Object(error).name, error, item); + + pushUpload(); + }); + }; + dirReaderIterator(); + } + if (d && dir_inflight == 0) { + console.log('end'); + } + } + + function start_upload() { + if (u_type && u_attr) { // logged in user landing on start-page + loadSubPage('fm'); + return; + } + if (u_wasloggedin()) { + msgDialog('confirmation', l[1193], l[2001], l[2002], function(e) { + if (e) { + start_anoupload(); + } + else { + tooltiplogin.init(); + $.awaitingLoginToUpload = true; + + mBroadcaster.once('fm:initialized', function() { + ulQueue.resume(); + uldl_hold = false; + + if (ul_queue.length > 0) { + M.showTransferToast('u', ul_queue.length); + } + }); + } + }); + } + else { + start_anoupload(); + } + } + + function start_anoupload() { + u_storage = init_storage(localStorage); + loadingDialog.show(); + u_checklogin({ + checkloginresult: function(u_ctx, r) { + u_type = r; + u_checked = true; + loadingDialog.hide(); + loadSubPage('fm'); + } + }, true); + } + + function FileDragEnter(e) { + if (d) { + console.log('DragEnter'); + } + e.preventDefault(); + if ($.dialog === 'avatar') { + return; + } + e.stopPropagation(); + if (!isFileDragAllowed()) { + return; + } + if (d > 1) { + console.info('----- ENTER event :' + e.target.className); + } + touchedElement++; + if (touchedElement === 1) { + $('.drag-n-drop.overlay').removeClass('hidden'); + $('body').addClass('overlayed'); + } + + } + + function FileDragHover(e) { + if (d) { + console.log('DragOver'); + } + e.preventDefault(); + e.stopPropagation(); + } + var useMegaSync = -1; + var usageMegaSync = 0; + + + function FileSelectHandlerMegaSyncClick(e) { + + if (M.isInvalidUserStatus()) { + e.preventDefault(); + return false; + } + + if (page === "chat" || page.indexOf('/chat/') > -1) { + return true; + } + if (window.useMegaSync === 2) { + e.preventDefault(); + e.stopPropagation(); + + if (M.InboxID && M.currentrootid && (M.currentrootid === M.InboxID + || M.getNodeRoot(M.currentdirid.split('/').pop()) === M.InboxID)) { + + msgDialog('error', l[882], l.upload_to_restricted_folder, l.upload_to_backup_info); + return false; + } + + var target; + if ($.onDroppedTreeFolder) { + target = $.onDroppedTreeFolder; + delete $.onDroppedTreeFolder; + } + else if (M.currentCustomView) { + target = M.currentCustomView.nodeID; + } + else if (String(M.currentdirid).length !== 8) { + target = M.lastSeenCloudFolder || M.RootID; + } + else { + target = M.currentdirid; + } + + var uploadCmdIsFine = function _uploadCmdIsFine(error, response) { + if (error) { + window.useMegaSync = 3; + } + }; + + //var elem = $('#' + e.toElement.id)[0]; + var elem = e.target; + if (elem.hasAttribute('webkitdirectory') || elem.hasAttribute('mozdirectory') + || elem.hasAttribute('msdirectory') || elem.hasAttribute('odirectory') + || elem.hasAttribute('directory')) { + megasync.uploadFolder(target, uploadCmdIsFine); + } + else { + megasync.uploadFile(target, uploadCmdIsFine); + } + return false; + } + else { + return true; + } + } + + function FileDragLeave(e) { + if (d) { + console.log('DragLeave'); + } + e.preventDefault(); + if ($.dialog === 'avatar') { + return; + } + e.stopPropagation(); + + if (d > 1) { + console.warn('----- LEAVE event :' + e.target.className + ' ' + e.type); + } + touchedElement--; + // below condition is due to firefox bug. https://developer.mozilla.org/en-US/docs/Web/Events/dragenter + if ((touchedElement <= 0) || (touchedElement === 1 && ua.details.browser === 'Firefox')) { + $('.drag-n-drop.overlay').addClass('hidden'); + $('body').removeClass('overlayed'); + touchedElement = 0; + } + } + + // on Drop event or Click to file select event + function FileSelectHandler(e) { + + if (e.preventDefault) { + e.preventDefault(); + } + + // Clear drag element + touchedElement = 0; + + $('.drag-n-drop.overlay').addClass('hidden'); + $('body').removeClass('overlayed'); + + if (M.isInvalidUserStatus()) { + return false; + } + + if ($.dialog === 'avatar') { + return; + } + if (e.stopPropagation) { + e.stopPropagation(); + } + + if (e.type === 'drop' && !isFileDragAllowed()) { + return; + } + + useMegaSync = -1; + + var currentDir = M.currentCustomView ? M.currentCustomView.nodeID : M.currentdirid; + + if ($.awaitingLoginToUpload) { + return tooltiplogin.init(); + } + + if ( + ( + folderlink || currentDir && + ( + currentDir !== 'dashboard' && + currentDir !== 'transfers' && + (M.getNodeRights(currentDir) | 0) < 1 + ) + ) && + String(currentDir).indexOf("chat/") === -1 + ) { + msgDialog('warningb', l[1676], l[1023]); + return true; + } + + if (M.InboxID && M.currentrootid && (M.currentrootid === M.InboxID + || M.getNodeRoot(M.currentdirid.split('/').pop()) === M.InboxID)) { + + msgDialog('error', l[882], l.upload_to_restricted_folder, l.upload_to_backup_info); + return false; + } + + if (page === 'start' && !is_mobile) { + console.assert(typeof fm_addhtml === 'function'); + if (typeof fm_addhtml === 'function') { + fm_addhtml(); + } + } + + var dataTransfer = Object(e.dataTransfer); + var files = e.target.files || dataTransfer.files; + if (!files || files.length == 0) { + if (!is_chrome_firefox || !dataTransfer.mozItemCount) { + return false; + } + } + + if (localStorage.testWebGL) { + return WebGLMEGAContext.test(...files); + } + + if (localStorage.testDCRaw) { + (function _rawNext(files) { + var file = files.pop(); + if (!file) { + return console.info('No more files.'); + } + var id = Math.random() * 9999 | 0; + var img = is_image(file.name); + var raw = typeof img === 'string' && img; + + if (!img || !raw) { + console.warn('This is not a RAW image...', file.name, [file], img); + return _rawNext(files); + } + + createthumbnail(file, false, id, null, null, {raw: raw}) + .then((res) => { + console.info('testDCRaw result', res); + onIdle(_rawNext.bind(null, files)); + M.saveAs(res.preview, `${file.name}.png`); + }) + .dump(id); + + })(toArray.apply(null, files)); + return; + } + if (localStorage.testMediaInfo) { + return MediaInfoLib.test(files); + } + if (localStorage.testGetID3CoverArt) { + return getID3CoverArt(files[0]).then(function(ab) { + console.info('getID3CovertArt result', mObjectURL([ab], 'image/jpeg')); + }).catch(console.debug.bind(console)); + } + if (localStorage.testStreamerThumbnail) { + return M.require('videostream').tryCatch(function() { + Streamer.getThumbnail(files[0]) + .then(function(ab) { + console.info('Streamer.getThumbnail result', mObjectURL([ab], 'image/jpeg')); + }) + .catch(console.debug.bind(console)); + }); + } + + if (window.d && (e.ctrlKey || e.metaKey) && /^mega-dbexport/.test(files[0].name)) { + return MegaDexie.import(files[0]).dump(); + } + + if (window.d && (e.ctrlKey || e.metaKey) && MediaInfoLib.isFileSupported(files[0])) { + window.d = 2; + document.body.textContent = 'Local videostream.js Test...'; + const video = mCreateElement('video', {width: 1280, height: 720, controls: true}, 'body'); + return M.require('videostream').then(() => Streamer(files[0], video)).catch(dump); + } + + if (e.dataTransfer + && e.dataTransfer.items + && e.dataTransfer.items.length > 0 && e.dataTransfer.items[0].webkitGetAsEntry) { + var items = e.dataTransfer.items; + for (var i = 0; i < items.length; i++) { + if (items[i].webkitGetAsEntry) { + var item = items[i].webkitGetAsEntry(); + if (item) { + filedrag_u = []; + if (i == items.length - 1) { + $.dostart = true; + } + traverseFileTree(item, '', item.isFile && items[i].getAsFile()); + } + } + } + } + else if (is_chrome_firefox && e.dataTransfer) { + try { + for (var i = 0, m = e.dataTransfer.mozItemCount; i < m; ++i) { + var file = e.dataTransfer.mozGetDataAt("application/x-moz-file", i); + if (file instanceof Ci.nsIFile) { + filedrag_u = []; + if (i == m - 1) { + $.dostart = true; + } + traverseFileTree(new mozDirtyGetAsEntry(file /*,e.dataTransfer*/ )); + } + else { + if (d) { + console.log('FileSelectHandler: Not a nsIFile', file); + } + } + // e.dataTransfer.mozClearDataAt("application/x-moz-file", i); + } + } + catch (e) { + alert(e); + Cu.reportError(e); + } + } + else { + var u = []; + var gecko = dataTransfer && ("mozItemCount" in dataTransfer) || Object(ua.details).browser === 'Firefox'; + if (gecko && parseFloat(Object(ua.details).version) > 51) { + // No need to check for folder upload attempts through zero-bytes on latest Firefox versions + gecko = false; + } + for (var i = 0, f; f = files[i]; i++) { + if (f.webkitRelativePath) { + f.path = String(f.webkitRelativePath).replace(RegExp("[\\/]" + + String(f.name).replace(/([^\w])/g,'\\$1') + "$"), ''); + } + if (gecko) { + f.gecko = true; + } + if (f.name != '.') { + u.push(f); + if (Math.floor(f.lastModified / 1000) === Math.floor(Date.now() / 1000)) { + api_req({a: 'log', e: 99659, m: 'file modification time uses current time for uploading.'}); + } + } + } + M.addUpload(u); + if (page == 'start') { + start_upload(); + } + if (!window.InitFileDrag) { + return; + } + + var $fileAndFolderUploadWrap = $('.fm-file-upload').parent(); + + $('input', $fileAndFolderUploadWrap).remove(); + $fileAndFolderUploadWrap.safeAppend('' + // File input + ''); // Folder input + $('input#fileselect3').remove(); + $('.files-menu .fileupload-item') + .after(''); + $('input#fileselect4').remove(); + $('.files-menu .folderupload-item').after(''); + InitFileDrag(); + } + return true; + } + + function onDragStartHandler(e) { + if ((e.target && e.target.toString && e.target.toString() === '[object Text]') + || page.indexOf('/fm/') === -1) { + e.stopPropagation(); + e.preventDefault(); + return false; + } + } + + /** + * Check current page is allowed on drag and drop to upload file + * + * @return {Boolean} Is allowed or not + */ + function isFileDragAllowed() { + if (page === 'start') { + return true; + } + return !(is_fm() && // if page is fm, + (window.slideshowid || !$('.feedback-dialog').hasClass('hidden') || // preview and feedback dialog show + M.currentdirid === 'shares' || // Share root page + M.currentdirid === 'out-shares' || // Out-share root page + M.currentdirid === 'public-links' || // Public-link root page + String(M.currentdirid).startsWith('chat/contacts') || // Contacts pages + M.currentrootid === M.RubbishID || // Rubbish bin + (M.currentrootid === undefined && M.currentdirid !== 'transfers') // Dashboard and Settings pages + )); + } + + // initialize + scope.InitFileDrag = function() { + var i = 5; + while (i--) { + var o = document.getElementById(i ? 'fileselect' + i : 'start-upload'); + if (o) { + o.addEventListener("change", FileSelectHandler, false); + if (!is_mobile && i) { + o.addEventListener("click", FileSelectHandlerMegaSyncClick, true); + } + } + } + + // dran&drop overlay click handler, to allow closing if stuck + $('.drag-n-drop.overlay').off('click.dnd').on('click.dnd', + function dragDropLayoutClickHndler() { + $('.drag-n-drop.overlay').addClass('hidden'); + $('body').removeClass('overlayed'); + } + ); + + var fnHandler = FileSelectHandler; + var fnEnter = FileDragEnter; + var fnHover = FileDragHover; + var fnLeave = FileDragLeave; + + touchedElement = 0; + + // MEGAdrop upload + var elem = document.getElementById("wu_items"); + if (elem) { + fnHandler = mega.megadrop.upload; + document.getElementById("fileselect5").addEventListener("change", fnHandler, false); + } + + document.getElementsByTagName("body")[0].addEventListener("dragenter", fnEnter, false); + document.getElementsByTagName("body")[0].addEventListener("dragover", fnHover, false); + document.getElementsByTagName("body")[0].addEventListener("dragleave", fnLeave, false); + document.getElementsByTagName("body")[0].addEventListener("drop", fnHandler, false); + document.getElementsByTagName("body")[0].addEventListener("dragstart", onDragStartHandler, false); + + if (is_mobile && (ua.details.engine === 'Gecko' || is_ios && is_ios < 13)) { + // https://bugzilla.mozilla.org/show_bug.cgi?id=1456557 + $('input[multiple]').removeAttr('multiple'); + } + + + if (is_chrome_firefox) { + $('input[webkitdirectory], .fm-folder-upload input').click(function(e) { + var file = mozFilePicker(0, 2, { /*gfp:1,*/ + title: l[98] + }); + + if (file) { + e.target = { + files: [-1] + }; + e.dataTransfer = { + mozItemCount: 1, + mozGetDataAt: function() { + return file; + } + }; + FileSelectHandler(e); + file = undefined; + } + else { + if (e.stopPropagation) { + e.stopPropagation(); + } + if (e.preventDefault) { + e.preventDefault(); + } + } + }); + } + } + +})(this); + +// Selenium helper to fake a drop event +function fakeDropEvent(target) { + // hash: "MTIzNAAAAAAAAAAAAAAAAAOLqRY" + var file = new File(['1234'], 'test\u202Efdp.exe', { + type: "application/octet-stream", + lastModified: 1485195382 + }); + + var ev = document.createEvent("HTMLEvents"); + ev.initEvent("drop", true, true); + ev.dataTransfer = { + files: [file] + }; + + target = target || document.getElementById("startholder"); + target.dispatchEvent(ev); +} + +function ulDummyFiles(count, len) { + 'use strict'; + + var ul = []; + var ts = 1e8; + for (var n = M.v.length; n--;) { + ts = Math.max(ts, M.v[n].mtime | 0); + } + + for (var i = count || 6e3; i--;) { + var now = Date.now(); + var rnd = Math.random(); + var nam = (rnd * now).toString(36); + var buf = asmCrypto.getRandomValues(new Uint8Array(rnd * (len || 512))); + + ul.push(new File([buf], nam, {type: 'application/octet-stream', lastModified: ++ts * 1e3})); + } + + M.addUpload(ul, true); +} + +/* jshint -W003 */// 'noThumbURI' was used before it was defined. + +function createnodethumbnail(node, aes, id, imagedata, opt, ph, file) { + 'use strict'; + storedattr[id] = Object.assign(Object.create(null), {'$ph': ph, target: node}); + createthumbnail(file || false, aes, id, imagedata, node, opt).catch(nop); + + var uled = ulmanager.getEventDataByHandle(node); + if (uled && !uled.thumb) { + // XXX: prevent this from being reached twice, e.g. an mp4 renamed as avi and containing covert art ... + uled.thumb = 1; + + if (d) { + console.log('Increasing the number of expected file attributes for the chat to be aware.', uled); + } + uled.efa += 2; + } +} + +function createthumbnail(file, aes, id, imagedata, node, opt) { + 'use strict'; + + var isVideo; + var isRawImage; + var thumbHandler; + var onPreviewRetry; + + if (window.omitthumb) { + console.warn('Omitting thumb creation on purpose...', arguments); + mBroadcaster.sendMessage('fa:error', id, 'omitthumb', false, 2); + return Promise.resolve(); + } + + if (typeof opt === 'object') { + isRawImage = opt.raw; + isVideo = opt.isVideo; + onPreviewRetry = opt.onPreviewRetry; + + if (typeof isRawImage === 'function') { + thumbHandler = isRawImage; + isRawImage = false; + } + else if (typeof isRawImage !== 'string') { + if (d) { + console.debug('Not really a raw..', isRawImage); + } + isRawImage = false; + } + + if (d && isRawImage) { + console.log('Processing RAW Image: ' + isRawImage); + } + if (d && thumbHandler) { + console.log('ThumbHandler: ' + thumbHandler.name); + } + } + else { + onPreviewRetry = !!opt; + } + + const tag = `createthumbnail(${file && file.name || Math.random().toString(26).slice(-6)}).${id}`; + const debug = (m, ...a) => console.warn(`[${tag}] ${m}`, ...a); + + const n = M.getNodeByHandle(node); + const fa = String(n && n.fa); + const ph = Object(storedattr[id]).$ph; + const createThumbnail = !fa.includes(':0*') || $.funkyThumbRegen; + const createPreview = !fa.includes(':1*') || onPreviewRetry || $.funkyThumbRegen; + const canStoreAttr = !n || !n.u || n.u === u_handle && n.f !== u_handle; + + if (!createThumbnail && !createPreview) { + debug('Neither thumbnail nor preview needs to be created.', n); + return Promise.resolve(EEXIST); + } + + if (d) { + console.time(tag); + } + + var sendToPreview = function(h, ab) { + var n = h && M.getNodeByHandle(h); + + if (n && fileext(n.name, 0, 1) !== 'pdf' && !is_video(n)) { + previewimg(h, ab || dataURLToAB(noThumbURI)); + } + }; + + const getSourceImage = async(source) => { + const buffer = await webgl.readAsArrayBuffer(source); + + if (thumbHandler) { + const res = await thumbHandler(buffer); + source = res.buffer || res; + } + else if (isRawImage) { + if (typeof dcraw === 'undefined') { + await Promise.resolve(M.require('dcrawjs')).catch(dump); + } + const {data, orientation} = webgl.decodeRAWImage(isRawImage, buffer); + if (data) { + source = data; + source.orientation = orientation; + } + } + return source; + }; + + const store = ({thumbnail, preview}) => { + if (canStoreAttr) { + // FIXME hack into cipher and extract key + const key = aes._key[0].slice(0, 4); + + if (thumbnail) { + api_storefileattr(id, 0, key, thumbnail, n.h, ph); + } + + // only store preview when the user is the file owner, and when it's not a + // retry (because then there is already a preview image, it's just unavailable) + if (preview && !onPreviewRetry) { + api_storefileattr(id, 1, key, preview, n.h, ph); + } + + // @todo make async and hold until api_storefileattr() completes (SC-ack) + } + + if (node) { + thumbnails.decouple(node); + } + sendToPreview(node, preview); + + return {thumbnail, preview}; + }; + + let typeGuess; + const ext = fileext(file && file.name || n.name); + return (async() => { + const exifFromImage = !!exifImageRotation.fromImage; + + // @todo move all this to a reusable helper across upload/download + isVideo = isVideo || MediaInfoLib.isFileSupported(n); + + if (isVideo && (file || imagedata && n.s >= imagedata.byteLength)) { + file = file || new File([imagedata], n.name, {type: filemime(n)}); + + // @todo FIXME mp3 may be wrongly detected as MLP (?!) + if (is_audio(n) || ext === 'mp3') { + const buffer = imagedata && imagedata.buffer; + imagedata = await getID3CoverArt(buffer || imagedata || file).catch(nop) || imagedata; + } + else { + await Promise.resolve(M.require('videostream')); + imagedata = await Streamer.getThumbnail(file).catch(nop) || imagedata; + } + } + else if (isRawImage && exifFromImage && webgl.doesSupport('worker')) { + // We don't need to rotate images ourselves, so we will decode it into a worker. + if (d) { + debug('Leaving %s image decoding to worker...', isRawImage); + } + isRawImage = false; + } + + let source = imagedata || file; + + if (thumbHandler || isRawImage) { + source = await getSourceImage(source); + } + + if (!(source instanceof ImageData) && !exifFromImage) { + source = await webgl.getRotatedImageData(source); + } + + typeGuess = source.type || (await webgl.identify(source)).type || 'unknown'; + if (d) { + debug(`Source guessed to be ${typeGuess}...`, [source]); + } + + const res = store(await webgl.worker('scissor', {source, createPreview, createThumbnail})); + + if (d) { + console.timeEnd(tag); + } + return res; + })().catch(ex => { + if (d) { + console.timeEnd(tag); + debug('Failed to create thumbnail', ex); + } + + sendToPreview(node); + mBroadcaster.sendMessage('fa:error', id, ex, false, 2); + + if (!window.pfid && canStoreAttr && String(typeGuess).startsWith('image/')) { + eventlog(99665, JSON.stringify([ + 2, + ext, + typeGuess, + String(ex && ex.message || ex).split('\n')[0].substr(0, 64), + fa.includes(':8*') && String(MediaAttribute.getCodecStrings(n)) || 'na' + ])); + } + throw new MEGAException(ex, imagedata || file); + }); +} + +mBroadcaster.once('startMega', function() { + 'use strict'; + exifImageRotation.fromImage = getComputedStyle(document.documentElement).imageOrientation === 'from-image'; + + if (exifImageRotation.fromImage) { + if (d) { + console.info('This browser automatically rotates images based on the EXIF metadata.', [ua]); + } + + if (window.safari || ua.details.engine === 'Gecko') { + exifImageRotation.fromImage = -1; + } + } +}); + +/** + * Rotate images as per the extracted EXIF orientation + * @param {ArrayBuffer} source The image file data + * @param {Number} orientation The EXIF rotation value + */ +async function exifImageRotation(source, orientation) { + 'use strict'; + + orientation |= 0; + if (orientation < 2 || exifImageRotation.fromImage < 0) { + // No rotation needed. + return source; + } + + return new Promise((resolve, reject) => { + var img = new Image(); + var canvas = document.createElement('canvas'); + const cleanup = () => { + if (exifImageRotation.fromImage) { + document.body.removeChild(img); + document.body.removeChild(canvas); + } + URL.revokeObjectURL(img.src); + }; + var signalError = function() { + reject(); + cleanup(); + }; + + if (exifImageRotation.fromImage) { + img.style.imageOrientation = 'none'; + canvas.style.imageOrientation = 'none'; + document.body.appendChild(img); + document.body.appendChild(canvas); + } + + img.onload = tryCatch(function() { + var width = this.naturalWidth; + var height = this.naturalHeight; + + if (!width || !height) { + if (d) { + console.error('exifImageRotation found invalid width/height values...', width, height); + } + + return signalError(); + } + + if (d) { + console.debug('exifImageRotation: %d x %d', width, height); + } + var ctx = canvas.getContext('2d'); + + ctx.save(); + switch (orientation) { + case 5: + case 6: + case 7: + case 8: + canvas.width = height; + canvas.height = width; + break; + default: + canvas.width = width; + canvas.height = height; + } + + switch (orientation) { + case 2: + // horizontal flip + ctx.translate(width, 0); + ctx.scale(-1, 1); + break; + case 3: + // 180 rotate left + ctx.translate(width, height); + ctx.rotate(Math.PI); + break; + case 4: + // vertical flip + ctx.translate(0, height); + ctx.scale(1, -1); + break; + case 5: + // vertical flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.scale(1, -1); + break; + case 6: + // 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(0, -height); + break; + case 7: + // horizontal flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(width, -height); + ctx.scale(-1, 1); + break; + case 8: + // 90 rotate left + ctx.rotate(-0.5 * Math.PI); + ctx.translate(-width, 0); + break; + default: + break; + } + + ctx.drawImage(img, 0, 0); + ctx.restore(); + + queueMicrotask(cleanup); + resolve(ctx.getImageData(0, 0, canvas.width, canvas.height)); + + }, img.onerror = function(ev) { + if (d) { + console.error('exifImageRotation failed...', ev); + } + signalError(); + }); + + img.src = source instanceof Blob + ? URL.createObjectURL(source) + : mObjectURL([source], source.type || 'image/jpeg'); + }); +} + +// ---------------------------------------------------------------------------------- + +/** + * Creates a new thumbnails' manager. + * @param {Number} capacity for LRU + * @param {String} [dbname] optional database name + * @returns {LRUMap} + */ +class ThumbManager extends LRUMap { + constructor(capacity, dbname) { + super(capacity || 200, (value, key, store, rep) => store.remove(key, value, rep)); + + Object.defineProperty(this, 'evict', {value: []}); + Object.defineProperty(this, 'debug', {value: self.d > 4}); + + Object.defineProperty(this, 'loaded', {value: 0, writable: true}); + Object.defineProperty(this, 'pending', {value: Object.create(null)}); + + Object.defineProperty(this, 'requested', {value: new Map()}); + Object.defineProperty(this, 'duplicates', {value: new MapSet(this.capacity << 2, d && nop)}); + + Object.defineProperty(this, '__ident_0', {value: `thumb-manager.${makeUUID()}`}); + + if (dbname) { + this.loading = LRUMegaDexie.create(dbname, this.capacity << 4) + .then(db => { + if (db instanceof LRUMegaDexie) { + Object.defineProperty(this, 'db', {value: db, writable: true}); + + this.db.add = (h, data) => { + webgl.readAsArrayBuffer(data) + .then(buf => this.db.set(h, buf)) + .catch((ex) => { + if (d) { + console.assert(this.db.error, `Unexpected error... ${ex}`, ex); + } + this.db = false; + }); + }; + } + }) + .catch(dump) + .finally(() => { + delete this.loading; + }); + } + } + + get [Symbol.toStringTag]() { + return 'ThumbManager'; + } + + revoke(h, url, stay) { + + if (this.debug) { + console.warn(`Revoking thumbnail ${h}, ${url}`); + } + this.delete(h); + + if (!stay) { + this.decouple(h); + } + URL.revokeObjectURL(url); + } + + dispose(single) { + let threshold = single ? 0 : this.capacity / 10 | 1; + + if (this.debug) { + console.group('thumbnails:lru'); + } + + for (let i = this.evict.length; i--;) { + this.revoke(...this.evict[i]); + } + this.evict.length = 0; + + while (--threshold > 0) { + const [[k, v]] = this; + this.revoke(k, v); + } + + if (this.debug) { + console.groupEnd(); + } + + delay.cancel(this.__ident_0); + } + + remove(...args) { + this.evict.push(args); + return args[2] ? this.dispose(true) : delay(this.__ident_0, () => this.dispose(), 400); + } + + cleanup() { + this.loaded = 0; + this.duplicates.clear(); + } + + decouple(key) { + const fa = (M.getNodeByHandle(key) || key).fa || key; + + this.each(fa, (n) => { + n.seen = null; + + if (M.megaRender) { + M.megaRender.revokeDOMNode(n.h); + } + }); + + this.duplicates.delete(fa); + this.requested.delete(fa); + } + + each(fa, cb) { + if (this.duplicates.size(fa)) { + const hs = [...this.duplicates.get(fa)]; + + for (let i = hs.length; i--;) { + const n = M.getNodeByHandle(hs[i]); + + if (n && cb(n)) { + return true; + } + } + } + } + + queued(n, type) { + let res = false; + + const rv = this.requested.get(n.fa) | 0; + if (!super.has(n.fa) && !rv || rv !== type + 1 && rv < 2) { + + if (!this.pending[n.fa]) { + this.pending[n.fa] = []; + } + + res = true; + this.requested.set(n.fa, 1 + type); + } + + this.duplicates.set(n.fa, n.h); + return res; + } + + add(key, value, each) { + if (d) { + console.assert(super.get(key) !== value); + } + super.set(key, value); + + if (this.pending[key]) { + for (let i = this.pending[key].length; i--;) { + queueMicrotask(this.pending[key][i]); + } + delete this.pending[key]; + } + + if (each) { + this.each(key, each); + } + } + + replace(h, value) { + const n = M.getNodeByHandle(h); + + this.add(n.fa, value || self.noThumbURI); + + if (M.megaRender) { + const domNode = M.megaRender.revokeDOMNode(n.h); + if (domNode) { + const img = domNode.querySelector('img'); + if (img) { + img.src = super.get(n.fa); + } + } + } + } + + async query(handles, each, loadend) { + if (this.loading) { + await this.loading; + } + + if (this.db && handles.length) { + const send = async(h, ab) => loadend(h, ab); + const found = await this.db.bulkGet(handles).catch(dump) || false; + + for (const h in found) { + + if (each(h)) { + send(h, found[h]).catch(dump); + } + } + } + } +} + +Object.defineProperties(ThumbManager, { + rebuildThumbnails: { + value: async(nodes) => { + 'use strict'; + let max = 1e9; + const gen = (h) => { + const n = M.getNodeByHandle(h); + + if (n.t || n.u !== u_handle || (max -= n.s) < 0) { + return Promise.reject('Access denied.'); + } + + return M.gfsfetch(h, 0, -1).then(res => setImage(n, res)); + }; + const fmt = (res) => { + const output = {}; + for (let i = res.length; i--;) { + output[nodes[i]] = {name: M.getNameByHandle(nodes[i]), ...res[i]}; + } + return output; + }; + + nodes = [...nodes]; + $.funkyThumbRegen = 1; + + const res = await Promise.allSettled(nodes.map(gen)).then(fmt).catch(dump); + console.table(res); + + delete $.funkyThumbRegen; + } + } +}); + +// ---------------------------------------------------------------------------------- + +function dataURLToAB(dataURL) { + if (dataURL.indexOf(';base64,') == -1) { + var parts = dataURL.split(','); + var contentType = parts[0].split(':')[1]; + var raw = parts[1]; + } + else { + var parts = dataURL.split(';base64,'); + var contentType = parts[0].split(':')[1]; + var raw = window.atob(parts[1]); + } + var rawLength = raw.length; + var uInt8Array = new Uint8Array(((rawLength + 15) & -16)); + for (var i = 0; i < rawLength; ++i) { + uInt8Array[i] = raw.charCodeAt(i); + } + + return uInt8Array; +} + +var ba_images = [], + ba_time = 0, + ba_id = 0, + ba_result = []; + +function benchmarki() { + var a = 0; + ba_images = []; + for (var i in M.d) { + if (M.d[i].name && is_image(M.d[i].name) && M.d[i].fa) { + ba_images.push(M.d[i]); + } + else { + a++; + } + } + console.log('found ' + ba_images.length + ' images with file attr (' + a + ' don\'t have file attributes)'); + + ba_images = shuffle(ba_images); + + ba_result['success'] = 0; + ba_result['error'] = 0; + + benchmarkireq(); +} + +function shuffle(array) { + var currentIndex = array.length, + temporaryValue, randomIndex; + + // While there remain elements to shuffle... + while (0 !== currentIndex) { + + // Pick a remaining element... + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex -= 1; + + // And swap it with the current element. + temporaryValue = array[currentIndex]; + array[currentIndex] = array[randomIndex]; + array[randomIndex] = temporaryValue; + } + + return array; +} + +function benchmarkireq() { + ba_time = new Date().getTime(); + + function eot(id, err) { + for (var i in ba_images) { + if (ba_images[i].h == id) { + ba_result['error']++; + console.log('error', new Date().getTime() - ba_time, err); + console.log(ba_images[i].fa); + ba_id++; + benchmarkireq(); + } + } + } + + eot.timeout = 5100; + + var n = ba_images[ba_id]; + if (n) { + var treq = {}; + treq[n.h] = { + fa: n.fa, + k: n.k + }; + preqs[slideshowid = n.h] = 1; + api_getfileattr(treq, 1, function(ctx, id, uint8arr) { + for (var i in ba_images) { + if (ba_images[i].h == id) { + ba_result['success']++; + console.log('success', uint8arr.length, new Date().getTime() - ba_time); + ba_id++; + benchmarkireq(); + + previewsrc(myURL.createObjectURL(new Blob([uint8arr], { + type: 'image/jpeg' + }))); + } + } + }, eot); + } + else { + console.log('ready'); + slideshowid = undefined; + preqs = {}; + } + +} + +// Do not change this to a remote URL since it'll cause a CORS issue (tainted canvas) +// Neither change it to base64, just a URL-encoded Data URI +var noThumbURI = + 'data:image/svg+xml;charset-utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22240' + + 'pt%22%20height%3D%22240pt%22%20viewBox%3D%220%200%20240%20240%22%3E%3Cpath%20fill%3D%22rgb(80%25,79.607843%25' + + ',79.607843%25)%22%20fill-rule%3D%22evenodd%22%20d%3D%22M120%20132c6.63%200%2012-5.37%2012-12%200-2.3-.65-4.42' + + '-1.76-6.24l-16.48%2016.48c1.82%201.1%203.95%201.76%206.24%201.76zm-21.7%205.7c-3.93-4.83-6.3-11-6.3-17.7%200-' + + '15.47%2012.54-28%2028-28%206.7%200%2012.87%202.37%2017.7%206.3l10.48-10.48C140%2083.18%20130.65%2080%20120%20' + + '80c-32%200-52.37%2028.57-64%2040%206.96%206.84%2017.05%2019.8%2030.88%2029.13zm54.83-46.82L141.7%20102.3c3.93' + + '%204.83%206.3%2011%206.3%2017.7%200%2015.47-12.54%2028-28%2028-6.7%200-12.87-2.37-17.7-6.3l-10.48%2010.48C100' + + '%20156.82%20109.35%20160%20120%20160c32%200%2052.37-28.57%2064-40-6.96-6.84-17.05-19.8-30.88-29.13zM120%20108' + + 'c-6.63%200-12%205.37-12%2012%200%202.3.65%204.42%201.76%206.24l16.48-16.48c-1.82-1.1-3.95-1.76-6.24-1.76zm0%2' + + '00%22%2F%3E%3C%2Fsvg%3E'; + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MIT/X11 License + * + * JavaScript library for reading EXIF image metadata. + * Copyright (c) 2008 Jacob Seidelin + * + * 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. + * + * ** THIS IS A FORK ** @origin: https://github.com/diegocr/exif-js + * + * ***** END LICENSE BLOCK ***** */ + +(function(root, factory){ + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = factory(); + } else { + exports.EXIF = factory(); + } + } else if (typeof define === 'function' && define.amd) { + define(factory); + } else { + root.EXIF = factory(); + } +}(this, function() { + + var debug = Boolean(this.d) || 0; + + var EXIF = function(obj) { + if (obj instanceof EXIF) return obj; + if (!(this instanceof EXIF)) return new EXIF(obj); + this.EXIFwrapped = obj; + }; + + var ExifTags = EXIF.Tags = { + + // version tags + 0x9000 : "ExifVersion", // EXIF version + 0xA000 : "FlashpixVersion", // Flashpix format version + + // colorspace tags + 0xA001 : "ColorSpace", // Color space information tag + + // image configuration + 0xA002 : "PixelXDimension", // Valid width of meaningful image + 0xA003 : "PixelYDimension", // Valid height of meaningful image + 0x9101 : "ComponentsConfiguration", // Information about channels + 0x9102 : "CompressedBitsPerPixel", // Compressed bits per pixel + + // user information + 0x927C : "MakerNote", // Any desired information written by the manufacturer + 0x9286 : "UserComment", // Comments by user + + // related file + 0xA004 : "RelatedSoundFile", // Name of related sound file + + // date and time + 0x9003 : "DateTimeOriginal", // Date and time when the original image was generated + 0x9004 : "DateTimeDigitized", // Date and time when the image was stored digitally + 0x9290 : "SubsecTime", // Fractions of seconds for DateTime + 0x9291 : "SubsecTimeOriginal", // Fractions of seconds for DateTimeOriginal + 0x9292 : "SubsecTimeDigitized", // Fractions of seconds for DateTimeDigitized + + // picture-taking conditions + 0x829A : "ExposureTime", // Exposure time (in seconds) + 0x829D : "FNumber", // F number + 0x8822 : "ExposureProgram", // Exposure program + 0x8824 : "SpectralSensitivity", // Spectral sensitivity + 0x8827 : "ISOSpeedRatings", // ISO speed rating + 0x8828 : "OECF", // Optoelectric conversion factor + 0x9201 : "ShutterSpeedValue", // Shutter speed + 0x9202 : "ApertureValue", // Lens aperture + 0x9203 : "BrightnessValue", // Value of brightness + 0x9204 : "ExposureBias", // Exposure bias + 0x9205 : "MaxApertureValue", // Smallest F number of lens + 0x9206 : "SubjectDistance", // Distance to subject in meters + 0x9207 : "MeteringMode", // Metering mode + 0x9208 : "LightSource", // Kind of light source + 0x9209 : "Flash", // Flash status + 0x9214 : "SubjectArea", // Location and area of main subject + 0x920A : "FocalLength", // Focal length of the lens in mm + 0xA20B : "FlashEnergy", // Strobe energy in BCPS + 0xA20C : "SpatialFrequencyResponse", // + 0xA20E : "FocalPlaneXResolution", // Number of pixels in width direction per FocalPlaneResolutionUnit + 0xA20F : "FocalPlaneYResolution", // Number of pixels in height direction per FocalPlaneResolutionUnit + 0xA210 : "FocalPlaneResolutionUnit", // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution + 0xA214 : "SubjectLocation", // Location of subject in image + 0xA215 : "ExposureIndex", // Exposure index selected on camera + 0xA217 : "SensingMethod", // Image sensor type + 0xA300 : "FileSource", // Image source (3 == DSC) + 0xA301 : "SceneType", // Scene type (1 == directly photographed) + 0xA302 : "CFAPattern", // Color filter array geometric pattern + 0xA401 : "CustomRendered", // Special processing + 0xA402 : "ExposureMode", // Exposure mode + 0xA403 : "WhiteBalance", // 1 = auto white balance, 2 = manual + 0xA404 : "DigitalZoomRation", // Digital zoom ratio + 0xA405 : "FocalLengthIn35mmFilm", // Equivalent foacl length assuming 35mm film camera (in mm) + 0xA406 : "SceneCaptureType", // Type of scene + 0xA407 : "GainControl", // Degree of overall image gain adjustment + 0xA408 : "Contrast", // Direction of contrast processing applied by camera + 0xA409 : "Saturation", // Direction of saturation processing applied by camera + 0xA40A : "Sharpness", // Direction of sharpness processing applied by camera + 0xA40B : "DeviceSettingDescription", // + 0xA40C : "SubjectDistanceRange", // Distance to subject + + // other tags + 0xA005 : "InteroperabilityIFDPointer", + 0xA420 : "ImageUniqueID" // Identifier assigned uniquely to each image + }; + + var TiffTags = EXIF.TiffTags = { + 0x0100 : "ImageWidth", + 0x0101 : "ImageHeight", + 0x8769 : "ExifIFDPointer", + 0x8825 : "GPSInfoIFDPointer", + 0xA005 : "InteroperabilityIFDPointer", + 0x0102 : "BitsPerSample", + 0x0103 : "Compression", + 0x0106 : "PhotometricInterpretation", + 0x0112 : "Orientation", + 0x0115 : "SamplesPerPixel", + 0x011C : "PlanarConfiguration", + 0x0212 : "YCbCrSubSampling", + 0x0213 : "YCbCrPositioning", + 0x011A : "XResolution", + 0x011B : "YResolution", + 0x0128 : "ResolutionUnit", + 0x0111 : "StripOffsets", + 0x0116 : "RowsPerStrip", + 0x0117 : "StripByteCounts", + 0x0201 : "JPEGInterchangeFormat", + 0x0202 : "JPEGInterchangeFormatLength", + 0x012D : "TransferFunction", + 0x013E : "WhitePoint", + 0x013F : "PrimaryChromaticities", + 0x0211 : "YCbCrCoefficients", + 0x0214 : "ReferenceBlackWhite", + 0x0132 : "DateTime", + 0x010E : "ImageDescription", + 0x010F : "Make", + 0x0110 : "Model", + 0x0131 : "Software", + 0x013B : "Artist", + 0x8298 : "Copyright", + 0x9c9b : "XPTitle", + 0x9c9c : "XPComment", + 0x9c9d : "XPAuthor", + 0x9c9e : "XPKeywords", + 0x9c9f : "XPSubject" + }; + + var GPSTags = EXIF.GPSTags = { + 0x0000 : "GPSVersionID", + 0x0001 : "GPSLatitudeRef", + 0x0002 : "GPSLatitude", + 0x0003 : "GPSLongitudeRef", + 0x0004 : "GPSLongitude", + 0x0005 : "GPSAltitudeRef", + 0x0006 : "GPSAltitude", + 0x0007 : "GPSTimeStamp", + 0x0008 : "GPSSatellites", + 0x0009 : "GPSStatus", + 0x000A : "GPSMeasureMode", + 0x000B : "GPSDOP", + 0x000C : "GPSSpeedRef", + 0x000D : "GPSSpeed", + 0x000E : "GPSTrackRef", + 0x000F : "GPSTrack", + 0x0010 : "GPSImgDirectionRef", + 0x0011 : "GPSImgDirection", + 0x0012 : "GPSMapDatum", + 0x0013 : "GPSDestLatitudeRef", + 0x0014 : "GPSDestLatitude", + 0x0015 : "GPSDestLongitudeRef", + 0x0016 : "GPSDestLongitude", + 0x0017 : "GPSDestBearingRef", + 0x0018 : "GPSDestBearing", + 0x0019 : "GPSDestDistanceRef", + 0x001A : "GPSDestDistance", + 0x001B : "GPSProcessingMethod", + 0x001C : "GPSAreaInformation", + 0x001D : "GPSDateStamp", + 0x001E : "GPSDifferential" + }; + + var StringValues = EXIF.StringValues = { + ExposureProgram : { + 0 : "Not defined", + 1 : "Manual", + 2 : "Normal program", + 3 : "Aperture priority", + 4 : "Shutter priority", + 5 : "Creative program", + 6 : "Action program", + 7 : "Portrait mode", + 8 : "Landscape mode" + }, + MeteringMode : { + 0 : "Unknown", + 1 : "Average", + 2 : "CenterWeightedAverage", + 3 : "Spot", + 4 : "MultiSpot", + 5 : "Pattern", + 6 : "Partial", + 255 : "Other" + }, + LightSource : { + 0 : "Unknown", + 1 : "Daylight", + 2 : "Fluorescent", + 3 : "Tungsten (incandescent light)", + 4 : "Flash", + 9 : "Fine weather", + 10 : "Cloudy weather", + 11 : "Shade", + 12 : "Daylight fluorescent (D 5700 - 7100K)", + 13 : "Day white fluorescent (N 4600 - 5400K)", + 14 : "Cool white fluorescent (W 3900 - 4500K)", + 15 : "White fluorescent (WW 3200 - 3700K)", + 17 : "Standard light A", + 18 : "Standard light B", + 19 : "Standard light C", + 20 : "D55", + 21 : "D65", + 22 : "D75", + 23 : "D50", + 24 : "ISO studio tungsten", + 255 : "Other" + }, + Flash : { + 0x0000 : "Flash did not fire", + 0x0001 : "Flash fired", + 0x0005 : "Strobe return light not detected", + 0x0007 : "Strobe return light detected", + 0x0009 : "Flash fired, compulsory flash mode", + 0x000D : "Flash fired, compulsory flash mode, return light not detected", + 0x000F : "Flash fired, compulsory flash mode, return light detected", + 0x0010 : "Flash did not fire, compulsory flash mode", + 0x0018 : "Flash did not fire, auto mode", + 0x0019 : "Flash fired, auto mode", + 0x001D : "Flash fired, auto mode, return light not detected", + 0x001F : "Flash fired, auto mode, return light detected", + 0x0020 : "No flash function", + 0x0041 : "Flash fired, red-eye reduction mode", + 0x0045 : "Flash fired, red-eye reduction mode, return light not detected", + 0x0047 : "Flash fired, red-eye reduction mode, return light detected", + 0x0049 : "Flash fired, compulsory flash mode, red-eye reduction mode", + 0x004D : "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", + 0x004F : "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", + 0x0059 : "Flash fired, auto mode, red-eye reduction mode", + 0x005D : "Flash fired, auto mode, return light not detected, red-eye reduction mode", + 0x005F : "Flash fired, auto mode, return light detected, red-eye reduction mode" + }, + SensingMethod : { + 1 : "Not defined", + 2 : "One-chip color area sensor", + 3 : "Two-chip color area sensor", + 4 : "Three-chip color area sensor", + 5 : "Color sequential area sensor", + 7 : "Trilinear sensor", + 8 : "Color sequential linear sensor" + }, + SceneCaptureType : { + 0 : "Standard", + 1 : "Landscape", + 2 : "Portrait", + 3 : "Night scene" + }, + SceneType : { + 1 : "Directly photographed" + }, + CustomRendered : { + 0 : "Normal process", + 1 : "Custom process" + }, + WhiteBalance : { + 0 : "Auto white balance", + 1 : "Manual white balance" + }, + GainControl : { + 0 : "None", + 1 : "Low gain up", + 2 : "High gain up", + 3 : "Low gain down", + 4 : "High gain down" + }, + Contrast : { + 0 : "Normal", + 1 : "Soft", + 2 : "Hard" + }, + Saturation : { + 0 : "Normal", + 1 : "Low saturation", + 2 : "High saturation" + }, + Sharpness : { + 0 : "Normal", + 1 : "Soft", + 2 : "Hard" + }, + SubjectDistanceRange : { + 0 : "Unknown", + 1 : "Macro", + 2 : "Close view", + 3 : "Distant view" + }, + FileSource : { + 3 : "DSC" + }, + + Components : { + 0 : "", + 1 : "Y", + 2 : "Cb", + 3 : "Cr", + 4 : "R", + 5 : "G", + 6 : "B" + } + }; + + function imageHasData(img) { + return !!(img.exifdata); + } + + function getImageData(img, callback) { + function handleBinaryFile(binFile) { + var data = findEXIFinJPEG(binFile); + var iptcdata = findIPTCinJPEG(binFile); + img.exifdata = data || {}; + img.iptcdata = iptcdata || {}; + if (callback) { + callback.call(img); + } + } + + if (img.src) { + var http = new XMLHttpRequest(); + http.onloadend = function() { + if (this.status === 200 || this.status === 0) { + handleBinaryFile(http.response); + } else { + callback(new Error("Could not load image")); + } + http = null; + }; + http.open("GET", img.src, true); + http.responseType = "arraybuffer"; + http.send(null); + } else if (window.FileReader && (img instanceof window.Blob || img instanceof window.File)) { + var fileReader = new FileReader(); + fileReader.onload = function(e) { + if (debug) console.log("Got file of length " + e.target.result.byteLength); + handleBinaryFile(e.target.result); + }; + + fileReader.readAsArrayBuffer(img); + } + } + + function findEXIFinJPEG(file, deepSearch) { + var dataView = new DataView(file); + + var offset = 2, + length = file.byteLength, + marker; + + if (debug) console.log("Got file of length " + file.byteLength); + if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { + switch(dataView.getUint16(0)) { + case 0x4949: + case 0x4D4D: + if ((marker = readEXIFData(dataView, 0, -1))) + return marker; + } + if (!deepSearch) { + if (debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + var pos = 0; + var data = new Uint8Array(file); + while (pos < length) { + if (data[pos] === 0xff && data[pos+1] === 0xd8) break; + ++pos; + } + if (pos == length) return false; // no embed image + offset += pos; + } + + while (offset < length) { + if (dataView.getUint8(offset) != 0xFF) { + if (debug) console.log("Not a valid marker at offset " + offset + ", found: " + dataView.getUint8(offset)); + return false; // not a valid marker, something is wrong + } + + marker = dataView.getUint8(offset + 1); + if (debug) console.log(marker); + + // we could implement handling for other markers here, + // but we're only looking for 0xFFE1 for EXIF data + + if (marker == 225) { + if (debug) console.log("Found 0xFFE1 marker"); + + return readEXIFData(dataView, offset + 4); + + // offset += 2 + file.getShortAt(offset+2, true); + + } else { + offset += 2 + dataView.getUint16(offset+2); + } + + } + + } + + function findIPTCinJPEG(file) { + var dataView = new DataView(file); + + if (debug) console.log("Got file of length " + file.byteLength); + if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { + if (debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + + var offset = 2, + length = file.byteLength; + + + var isFieldSegmentStart = function(dataView, offset){ + return ( + dataView.getUint8(offset) === 0x38 && + dataView.getUint8(offset+1) === 0x42 && + dataView.getUint8(offset+2) === 0x49 && + dataView.getUint8(offset+3) === 0x4D && + dataView.getUint8(offset+4) === 0x04 && + dataView.getUint8(offset+5) === 0x04 + ); + }; + + while (offset < length) { + + if ( isFieldSegmentStart(dataView, offset )){ + + // Get the length of the name header (which is padded to an even number of bytes) + var nameHeaderLength = dataView.getUint8(offset+7); + if(nameHeaderLength % 2 !== 0) nameHeaderLength += 1; + // Check for pre photoshop 6 format + if(nameHeaderLength === 0) { + // Always 4 + nameHeaderLength = 4; + } + + var startOffset = offset + 8 + nameHeaderLength; + var sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength); + + return readIPTCData(file, startOffset, sectionLength); + + break; + + } + + + // Not the marker, continue searching + offset++; + + } + + } + var IptcFieldMap = { + 0x78 : 'caption', + 0x6E : 'credit', + 0x19 : 'keywords', + 0x37 : 'dateCreated', + 0x50 : 'byline', + 0x55 : 'bylineTitle', + 0x7A : 'captionWriter', + 0x69 : 'headline', + 0x74 : 'copyright', + 0x0F : 'category', + 0x10 : 'imageRank', + 0x65 : 'country', + 0x73 : 'source', + 0x5C : 'venue', + 0x5a : 'city', + 0x05 : 'objectName', + 0x07 : 'editStatus', + 0x14 : 'supplementalCategories', + 0x64 : 'countryCode', + 0x5f : 'state', + 0x28 : 'specialInstructions', + 0x65 : 'composition', + 0x4b : 'objectCycle' + }; + function readIPTCData(file, startOffset, sectionLength){ + var dataView = new DataView(file); + var data = {}; + var fieldValue, fieldName, dataSize, segmentType, segmentSize; + var segmentStartPos = startOffset; + while(segmentStartPos < startOffset+sectionLength) { + if(dataView.getUint8(segmentStartPos) === 0x1C && dataView.getUint8(segmentStartPos+1) === 0x02){ + segmentType = dataView.getUint8(segmentStartPos+2); + if(segmentType in IptcFieldMap) { + dataSize = dataView.getInt16(segmentStartPos+3); + segmentSize = dataSize + 5; + fieldName = IptcFieldMap[segmentType]; + fieldValue = getStringFromDB(dataView, segmentStartPos+5, dataSize); + // Check if we already stored a value with this name + if(data.hasOwnProperty(fieldName)) { + // Value already stored with this name, create multivalue field + if(data[fieldName] instanceof Array) { + data[fieldName].push(fieldValue); + } + else { + data[fieldName] = [data[fieldName], fieldValue]; + } + } + else { + data[fieldName] = fieldValue; + } + } + + } + segmentStartPos++; + } + return data; + } + + + + function readTags(file, tiffStart, dirStart, strings, bigEnd) { + var entries = file.getUint16(dirStart, !bigEnd), + tags = {}, + entryOffset, tag, + i; + + for (i=0;i 4 ? valueOffset : (entryOffset + 8); + vals = []; + for (n=0;n 4 ? valueOffset : (entryOffset + 8); + return getStringFromDB(file, offset, numValues-1); + + case 3: // short, 16 bit int + if (numValues == 1) { + return file.getUint16(entryOffset + 8, !bigEnd); + } else { + offset = numValues > 2 ? valueOffset : (entryOffset + 8); + vals = []; + for (n=0;n min + // don't set minscale smaller than 1/scale + // -> don't pick crops that need upscaling + options.minScale = min(options.maxScale || SmartCrop.DEFAULTS.maxScale, max(1/scale, (options.minScale||SmartCrop.DEFAULTS.minScale))); + } + var smartCrop = new SmartCrop(options); + if(options.width && options.height) { + if(options.prescale !== false){ + prescale = 1/scale/options.minScale; + if(prescale < 1) { + image = await smartCrop.resample(image, image.width*prescale, image.height*prescale); + smartCrop.options.cropWidth = ~~(options.cropWidth*prescale); + smartCrop.options.cropHeight = ~~(options.cropHeight*prescale); + } + else { + prescale = 1; + } + } + } + const result = await smartCrop.analyse(image); + for(var i = 0, i_len = result.crops.length; i < i_len; i++) { + var crop = result.crops[i]; + crop.x = ~~(crop.x/prescale); + crop.y = ~~(crop.y/prescale); + crop.width = ~~(crop.width/prescale); + crop.height = ~~(crop.height/prescale); + } + if(callback) callback(result); + return result; +}; +// check if all the dependencies are there +SmartCrop.isAvailable = function(options){ + try { + var s = new this(options), + c = s.canvas(16, 16); + return typeof c.getContext === 'function'; + } + catch(e){ + return false; + } +}; +SmartCrop.prototype = { + canvas: function(w, h){ + if(this.options.canvasFactory !== null){ + return this.options.canvasFactory(w, h); + } + var c = document.createElement('canvas'); + c.width = w; + c.height = h; + return c; + }, + edgeDetect: function(i, o){ + var id = i.data, + od = o.data, + w = i.width, + h = i.height; + for(var y = 0; y < h; y++) { + for(var x = 0; x < w; x++) { + var p = (y*w+x)*4, + lightness; + if(x === 0 || x >= w-1 || y === 0 || y >= h-1){ + lightness = sample(id, p); + } + else { + lightness = sample(id, p)*4 - sample(id, p-w*4) - sample(id, p-4) - sample(id, p+4) - sample(id, p+w*4); + } + od[p+1] = lightness; + } + } + }, + skinDetect: function(i, o){ + var id = i.data, + od = o.data, + w = i.width, + h = i.height, + options = this.options; + for(var y = 0; y < h; y++) { + for(var x = 0; x < w; x++) { + var p = (y*w+x)*4, + lightness = cie(id[p], id[p+1], id[p+2])/255, + skin = this.skinColor(id[p], id[p+1], id[p+2]); + if(skin > options.skinThreshold && lightness >= options.skinBrightnessMin && lightness <= options.skinBrightnessMax){ + od[p] = (skin-options.skinThreshold)*(255/(1-options.skinThreshold)); + } + else { + od[p] = 0; + } + } + } + }, + saturationDetect: function(i, o){ + var id = i.data, + od = o.data, + w = i.width, + h = i.height, + options = this.options; + for(var y = 0; y < h; y++) { + for(var x = 0; x < w; x++) { + var p = (y*w+x)*4, + lightness = cie(id[p], id[p+1], id[p+2])/255, + sat = saturation(id[p], id[p+1], id[p+2]); + if(sat > options.saturationThreshold && lightness >= options.saturationBrightnessMin && lightness <= options.saturationBrightnessMax){ + od[p+2] = (sat-options.saturationThreshold)*(255/(1-options.saturationThreshold)); + } + else { + od[p+2] = 0; + } + } + } + }, + crops: function(image){ + var crops = [], + width = image.width, + height = image.height, + options = this.options, + minDimension = min(width, height), + cropWidth = options.cropWidth || minDimension, + cropHeight = options.cropHeight || minDimension; + for(var scale = options.maxScale; scale >= options.minScale; scale -= options.scaleStep){ + for(var y = 0; y+cropHeight*scale <= height; y+=options.step) { + for(var x = 0; x+cropWidth*scale <= width; x+=options.step) { + crops.push({ + x: x, + y: y, + width: cropWidth*scale, + height: cropHeight*scale + }); + } + } + } + return crops; + }, + score: function(output, crop){ + var score = { + detail: 0, + saturation: 0, + skin: 0, + total: 0 + }, + options = this.options, + od = output.data, + downSample = options.scoreDownSample, + invDownSample = 1/downSample, + outputHeightDownSample = output.height*downSample, + outputWidthDownSample = output.width*downSample, + outputWidth = output.width; + for(var y = 0; y < outputHeightDownSample; y+=downSample) { + for(var x = 0; x < outputWidthDownSample; x+=downSample) { + var p = (~~(y*invDownSample)*outputWidth+~~(x*invDownSample))*4, + importance = this.importance(crop, x, y), + detail = od[p+1]/255; + score.skin += od[p]/255*(detail+options.skinBias)*importance; + score.detail += detail*importance; + score.saturation += od[p+2]/255*(detail+options.saturationBias)*importance; + } + + } + score.total = (score.detail*options.detailWeight + score.skin*options.skinWeight + score.saturation*options.saturationWeight)/crop.width/crop.height; + return score; + }, + importance: function(crop, x, y){ + var options = this.options; + + if (crop.x > x || x >= crop.x+crop.width || crop.y > y || y >= crop.y+crop.height) return options.outsideImportance; + x = (x-crop.x)/crop.width; + y = (y-crop.y)/crop.height; + var px = abs(0.5-x)*2, + py = abs(0.5-y)*2, + // distance from edge + dx = Math.max(px-1.0+options.edgeRadius, 0), + dy = Math.max(py-1.0+options.edgeRadius, 0), + d = (dx*dx+dy*dy)*options.edgeWeight; + var s = 1.41-sqrt(px*px+py*py); + if(options.ruleOfThirds){ + s += (Math.max(0, s+d+0.5)*1.2)*(thirds(px)+thirds(py)); + } + return s+d; + }, + skinColor: function(r, g, b){ + var mag = sqrt(r*r+g*g+b*b), + options = this.options, + rd = (r/mag-options.skinColor[0]), + gd = (g/mag-options.skinColor[1]), + bd = (b/mag-options.skinColor[2]), + d = sqrt(rd*rd+gd*gd+bd*bd); + return 1-d; + }, + async resample(image, width, height){ + const canvas = this.canvas(width, height); + const ctx = canvas.getContext('2d'); + if(this.options.resampleWithImageBitmap) { + const options = { + resizeWidth: width, + resizeHeight: height, + resizeQuality: 'high' + }; + const bitmap = await createImageBitmap(image, options) + .catch((ex) => { + SmartCrop.dump('createImageBitmap failed!', ex); + }); + if (bitmap) { + ctx.drawImage(bitmap, 0, 0); + return canvas; + } + } + if(image instanceof ImageData) { + SmartCrop.dump('Got an ImageData, do use ImageBitmap which should be faster!'); + const canvas2 = this.canvas(image.width, image.height); + canvas2.getContext('2d').putImageData(image, 0, 0); + image = canvas2; + } + if(this.options.antialias && ctx.filter === 'none') { + const cv = this.canvas(image.width, image.height); + const cx = cv.getContext('2d'); + cx.filter = `blur(${(cv.width / canvas.width) >> 1}px)`; + cx.drawImage(image, 0, 0); + image = cv; + } + ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height); + return canvas; + }, + async analyse(image){ + var result = {}, + options = this.options, + canvas, ctx; + if(self.OffscreenCanvas && image instanceof OffscreenCanvas || self.HTMLCanvasElement && image instanceof HTMLCanvasElement) { + canvas = image; + ctx = canvas.getContext('2d'); + } + else { + canvas = this.canvas(image.width, image.height); + ctx = canvas.getContext('2d'); + ctx.drawImage(image, 0, 0); + } + var input = ctx.getImageData(0, 0, canvas.width, canvas.height), + output = ctx.getImageData(0, 0, canvas.width, canvas.height); + this.edgeDetect(input, output); + this.skinDetect(input, output); + this.saturationDetect(input, output); + + ctx.putImageData(output, 0, 0); + const scoreCanvas = await this.resample(canvas, ceil(image.width / options.scoreDownSample), ceil(image.height / options.scoreDownSample)), + scoreCtx = scoreCanvas.getContext('2d'); + + var scoreOutput = scoreCtx.getImageData(0, 0, scoreCanvas.width, scoreCanvas.height); + + var topScore = -Infinity, + topCrop = null, + crops = this.crops(image); + + for(var i = 0, i_len = crops.length; i < i_len; i++) { + var crop = crops[i]; + crop.score = this.score(scoreOutput, crop); + if(crop.score.total > topScore){ + topCrop = crop; + topScore = crop.score.total; + } + + } + + result.crops = crops; + result.topCrop = topCrop; + + if(options.debug && topCrop){ + ctx.fillStyle = 'rgba(255, 0, 0, 0.1)'; + ctx.fillRect(topCrop.x, topCrop.y, topCrop.width, topCrop.height); + for (var y = 0; y < output.height; y++) { + for (var x = 0; x < output.width; x++) { + var p = (y * output.width + x) * 4; + var importance = this.importance(topCrop, x, y); + if (importance > 0) { + output.data[p + 1] += importance * 32; + } + + if (importance < 0) { + output.data[p] += importance * -64; + } + output.data[p + 3] = 255; + } + } + ctx.putImageData(output, 0, 0); + ctx.strokeStyle = 'rgba(255, 0, 0, 0.8)'; + ctx.strokeRect(topCrop.x, topCrop.y, topCrop.width, topCrop.height); + result.debugCanvas = canvas; + } + return result; + } +}; + +// aliases and helpers +var min = Math.min, + max = Math.max, + abs = Math.abs, + ceil = Math.ceil, + sqrt = Math.sqrt; + +// gets value in the range of [0, 1] where 0 is the center of the pictures +// returns weight of rule of thirds [0, 1] +function thirds(x){ + x = ((x-(1/3)+1.0)%2.0*0.5-0.5)*16; + return Math.max(1.0-x*x, 0.0); +} + +function cie(r, g, b){ + return 0.5126*b + 0.7152*g + 0.0722*r; +} +function sample(id, p) { + return cie(id[p], id[p+1], id[p+2]); +} +function saturation(r, g, b){ + var maximum = max(r/255, g/255, b/255), minumum = min(r/255, g/255, b/255); + if(maximum === minumum){ + return 0; + } + var l = (maximum + minumum) / 2, + d = maximum-minumum; + return l > 0.5 ? d/(2-maximum-minumum) : d/(maximum+minumum); +} + +const warn = console.warn.bind(console, '[SmartCrop]'); + +if (typeof lazy === 'function') { + lazy(SmartCrop, 'dump', () => self.dump || warn); +} +else { + SmartCrop.dump = self.dump || warn; +} + +// amd +if (typeof define !== 'undefined' && define.amd) define(function(){return SmartCrop;}); +//common js +if (typeof exports !== 'undefined') exports.SmartCrop = SmartCrop; +// browser +else if (typeof navigator !== 'undefined') window.SmartCrop = SmartCrop; +// nodejs +if (typeof module !== 'undefined') { + module.exports = SmartCrop; +} +})(); + +(function( $ ){ + $.fn.qrcode = function(options) { + // if options is string, + if( typeof options === 'string' ){ + options = { text: options }; + } + + // set default values + // typeNumber < 1 for automatic calculation + options = $.extend( {}, { + render : "canvas", + width : 256, + height : 256, + typeNumber : -1, + correctLevel : QRErrorCorrectLevel.H, + background : "#ffffff", + foreground : "#000000" + }, options); + + var createCanvas = function(){ + // create the qrcode itself + var qrcode = new QRCode(options.typeNumber, options.correctLevel); + qrcode.addData(options.text); + qrcode.make(); + + // create canvas element + var canvas = document.createElement('canvas'); + canvas.width = options.width; + canvas.height = options.height; + var ctx = canvas.getContext('2d'); + + // compute tileW/tileH based on options.width/options.height + var tileW = options.width / qrcode.getModuleCount(); + var tileH = options.height / qrcode.getModuleCount(); + + // draw in the canvas + for( var row = 0; row < qrcode.getModuleCount(); row++ ){ + for( var col = 0; col < qrcode.getModuleCount(); col++ ){ + ctx.fillStyle = qrcode.isDark(row, col) ? options.foreground : options.background; + var w = (Math.ceil((col+1)*tileW) - Math.floor(col*tileW)); + var h = (Math.ceil((row+1)*tileH) - Math.floor(row*tileH)); + ctx.fillRect(Math.round(col*tileW),Math.round(row*tileH), w, h); + } + } + // return just built canvas + return canvas; + } + + // from Jon-Carlos Rivera (https://github.com/imbcmdth) + var createTable = function(){ + // create the qrcode itself + var qrcode = new QRCode(options.typeNumber, options.correctLevel); + qrcode.addData(options.text); + qrcode.make(); + + // create table element + var $table = $('
              ') + .css("width", options.width+"px") + .css("height", options.height+"px") + .css("border", "0px") + .css("border-collapse", "collapse") + .css('background-color', options.background); + + // compute tileS percentage + var tileW = options.width / qrcode.getModuleCount(); + var tileH = options.height / qrcode.getModuleCount(); + + // draw in the table + for(var row = 0; row < qrcode.getModuleCount(); row++ ){ + var $row = $('').css('height', tileH+"px").appendTo($table); + + for(var col = 0; col < qrcode.getModuleCount(); col++ ){ + $('') + .css('width', tileW+"px") + .css('background-color', qrcode.isDark(row, col) ? options.foreground : options.background) + .appendTo($row); + } + } + // return just built canvas + return $table; + } + + + return this.each(function(){ + var element = options.render == "canvas" ? createCanvas() : createTable(); + $(element).appendTo(this); + }); + }; +})( jQuery ); + +//--------------------------------------------------------------------- +// QRCode for JavaScript +// +// Copyright (c) 2009 Kazuhiko Arase +// +// URL: http://www.d-project.com/ +// +// Licensed under the MIT license: +// http://www.opensource.org/licenses/mit-license.php +// +// The word "QR Code" is registered trademark of +// DENSO WAVE INCORPORATED +// http://www.denso-wave.com/qrcode/faqpatent-e.html +// +//--------------------------------------------------------------------- + +//--------------------------------------------------------------------- +// QR8bitByte +//--------------------------------------------------------------------- + +function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; +} + +QR8bitByte.prototype = { + + getLength : function(buffer) { + return this.data.length; + }, + + write : function(buffer) { + for (var i = 0; i < this.data.length; i++) { + // not JIS ... + buffer.put(this.data.charCodeAt(i), 8); + } + } +}; + +//--------------------------------------------------------------------- +// QRCode +//--------------------------------------------------------------------- + +function QRCode(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = new Array(); +} + +QRCode.prototype = { + + addData : function(data) { + var newData = new QR8bitByte(data); + this.dataList.push(newData); + this.dataCache = null; + }, + + isDark : function(row, col) { + if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) { + throw new Error(row + "," + col); + } + return this.modules[row][col]; + }, + + getModuleCount : function() { + return this.moduleCount; + }, + + make : function() { + // Calculate automatically typeNumber if provided is < 1 + if (this.typeNumber < 1 ){ + var typeNumber = 1; + for (typeNumber = 1; typeNumber < 40; typeNumber++) { + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel); + + var buffer = new QRBitBuffer(); + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + for (var i = 0; i < this.dataList.length; i++) { + var data = this.dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) ); + data.write(buffer); + } + if (buffer.getLengthInBits() <= totalDataCount * 8) + break; + } + this.typeNumber = typeNumber; + } + this.makeImpl(false, this.getBestMaskPattern() ); + }, + + makeImpl : function(test, maskPattern) { + + this.moduleCount = this.typeNumber * 4 + 17; + this.modules = new Array(this.moduleCount); + + for (var row = 0; row < this.moduleCount; row++) { + + this.modules[row] = new Array(this.moduleCount); + + for (var col = 0; col < this.moduleCount; col++) { + this.modules[row][col] = null;//(col + row) % 3; + } + } + + this.setupPositionProbePattern(0, 0); + this.setupPositionProbePattern(this.moduleCount - 7, 0); + this.setupPositionProbePattern(0, this.moduleCount - 7); + this.setupPositionAdjustPattern(); + this.setupTimingPattern(); + this.setupTypeInfo(test, maskPattern); + + if (this.typeNumber >= 7) { + this.setupTypeNumber(test); + } + + if (this.dataCache == null) { + this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList); + } + + this.mapData(this.dataCache, maskPattern); + }, + + setupPositionProbePattern : function(row, col) { + + for (var r = -1; r <= 7; r++) { + + if (row + r <= -1 || this.moduleCount <= row + r) continue; + + for (var c = -1; c <= 7; c++) { + + if (col + c <= -1 || this.moduleCount <= col + c) continue; + + if ( (0 <= r && r <= 6 && (c == 0 || c == 6) ) + || (0 <= c && c <= 6 && (r == 0 || r == 6) ) + || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + }, + + getBestMaskPattern : function() { + + var minLostPoint = 0; + var pattern = 0; + + for (var i = 0; i < 8; i++) { + + this.makeImpl(true, i); + + var lostPoint = QRUtil.getLostPoint(this); + + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + } + } + + return pattern; + }, + + createMovieClip : function(target_mc, instance_name, depth) { + + var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth); + var cs = 1; + + this.make(); + + for (var row = 0; row < this.modules.length; row++) { + + var y = row * cs; + + for (var col = 0; col < this.modules[row].length; col++) { + + var x = col * cs; + var dark = this.modules[row][col]; + + if (dark) { + qr_mc.beginFill(0, 100); + qr_mc.moveTo(x, y); + qr_mc.lineTo(x + cs, y); + qr_mc.lineTo(x + cs, y + cs); + qr_mc.lineTo(x, y + cs); + qr_mc.endFill(); + } + } + } + + return qr_mc; + }, + + setupTimingPattern : function() { + + for (var r = 8; r < this.moduleCount - 8; r++) { + if (this.modules[r][6] != null) { + continue; + } + this.modules[r][6] = (r % 2 == 0); + } + + for (var c = 8; c < this.moduleCount - 8; c++) { + if (this.modules[6][c] != null) { + continue; + } + this.modules[6][c] = (c % 2 == 0); + } + }, + + setupPositionAdjustPattern : function() { + + var pos = QRUtil.getPatternPosition(this.typeNumber); + + for (var i = 0; i < pos.length; i++) { + + for (var j = 0; j < pos.length; j++) { + + var row = pos[i]; + var col = pos[j]; + + if (this.modules[row][col] != null) { + continue; + } + + for (var r = -2; r <= 2; r++) { + + for (var c = -2; c <= 2; c++) { + + if (r == -2 || r == 2 || c == -2 || c == 2 + || (r == 0 && c == 0) ) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + } + } + }, + + setupTypeNumber : function(test) { + + var bits = QRUtil.getBCHTypeNumber(this.typeNumber); + + for (var i = 0; i < 18; i++) { + var mod = (!test && ( (bits >> i) & 1) == 1); + this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod; + } + + for (var i = 0; i < 18; i++) { + var mod = (!test && ( (bits >> i) & 1) == 1); + this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + } + }, + + setupTypeInfo : function(test, maskPattern) { + + var data = (this.errorCorrectLevel << 3) | maskPattern; + var bits = QRUtil.getBCHTypeInfo(data); + + // vertical + for (var i = 0; i < 15; i++) { + + var mod = (!test && ( (bits >> i) & 1) == 1); + + if (i < 6) { + this.modules[i][8] = mod; + } else if (i < 8) { + this.modules[i + 1][8] = mod; + } else { + this.modules[this.moduleCount - 15 + i][8] = mod; + } + } + + // horizontal + for (var i = 0; i < 15; i++) { + + var mod = (!test && ( (bits >> i) & 1) == 1); + + if (i < 8) { + this.modules[8][this.moduleCount - i - 1] = mod; + } else if (i < 9) { + this.modules[8][15 - i - 1 + 1] = mod; + } else { + this.modules[8][15 - i - 1] = mod; + } + } + + // fixed module + this.modules[this.moduleCount - 8][8] = (!test); + + }, + + mapData : function(data, maskPattern) { + + var inc = -1; + var row = this.moduleCount - 1; + var bitIndex = 7; + var byteIndex = 0; + + for (var col = this.moduleCount - 1; col > 0; col -= 2) { + + if (col == 6) col--; + + while (true) { + + for (var c = 0; c < 2; c++) { + + if (this.modules[row][col - c] == null) { + + var dark = false; + + if (byteIndex < data.length) { + dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1); + } + + var mask = QRUtil.getMask(maskPattern, row, col - c); + + if (mask) { + dark = !dark; + } + + this.modules[row][col - c] = dark; + bitIndex--; + + if (bitIndex == -1) { + byteIndex++; + bitIndex = 7; + } + } + } + + row += inc; + + if (row < 0 || this.moduleCount <= row) { + row -= inc; + inc = -inc; + break; + } + } + } + + } + +}; + +QRCode.PAD0 = 0xEC; +QRCode.PAD1 = 0x11; + +QRCode.createData = function(typeNumber, errorCorrectLevel, dataList) { + + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); + + var buffer = new QRBitBuffer(); + + for (var i = 0; i < dataList.length; i++) { + var data = dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) ); + data.write(buffer); + } + + // calc num max data. + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + if (buffer.getLengthInBits() > totalDataCount * 8) { + throw new Error("code length overflow. (" + + buffer.getLengthInBits() + + ">" + + totalDataCount * 8 + + ")"); + } + + // end code + if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { + buffer.put(0, 4); + } + + // padding + while (buffer.getLengthInBits() % 8 != 0) { + buffer.putBit(false); + } + + // padding + while (true) { + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD0, 8); + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD1, 8); + } + + return QRCode.createBytes(buffer, rsBlocks); +} + +QRCode.createBytes = function(buffer, rsBlocks) { + + var offset = 0; + + var maxDcCount = 0; + var maxEcCount = 0; + + var dcdata = new Array(rsBlocks.length); + var ecdata = new Array(rsBlocks.length); + + for (var r = 0; r < rsBlocks.length; r++) { + + var dcCount = rsBlocks[r].dataCount; + var ecCount = rsBlocks[r].totalCount - dcCount; + + maxDcCount = Math.max(maxDcCount, dcCount); + maxEcCount = Math.max(maxEcCount, ecCount); + + dcdata[r] = new Array(dcCount); + + for (var i = 0; i < dcdata[r].length; i++) { + dcdata[r][i] = 0xff & buffer.buffer[i + offset]; + } + offset += dcCount; + + var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); + var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1); + + var modPoly = rawPoly.mod(rsPoly); + ecdata[r] = new Array(rsPoly.getLength() - 1); + for (var i = 0; i < ecdata[r].length; i++) { + var modIndex = i + modPoly.getLength() - ecdata[r].length; + ecdata[r][i] = (modIndex >= 0)? modPoly.get(modIndex) : 0; + } + + } + + var totalCodeCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalCodeCount += rsBlocks[i].totalCount; + } + + var data = new Array(totalCodeCount); + var index = 0; + + for (var i = 0; i < maxDcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < dcdata[r].length) { + data[index++] = dcdata[r][i]; + } + } + } + + for (var i = 0; i < maxEcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < ecdata[r].length) { + data[index++] = ecdata[r][i]; + } + } + } + + return data; + +} + +//--------------------------------------------------------------------- +// QRMode +//--------------------------------------------------------------------- + +var QRMode = { + MODE_NUMBER : 1 << 0, + MODE_ALPHA_NUM : 1 << 1, + MODE_8BIT_BYTE : 1 << 2, + MODE_KANJI : 1 << 3 +}; + +//--------------------------------------------------------------------- +// QRErrorCorrectLevel +//--------------------------------------------------------------------- + +var QRErrorCorrectLevel = { + L : 1, + M : 0, + Q : 3, + H : 2 +}; + +//--------------------------------------------------------------------- +// QRMaskPattern +//--------------------------------------------------------------------- + +var QRMaskPattern = { + PATTERN000 : 0, + PATTERN001 : 1, + PATTERN010 : 2, + PATTERN011 : 3, + PATTERN100 : 4, + PATTERN101 : 5, + PATTERN110 : 6, + PATTERN111 : 7 +}; + +//--------------------------------------------------------------------- +// QRUtil +//--------------------------------------------------------------------- + +var QRUtil = { + + PATTERN_POSITION_TABLE : [ + [], + [6, 18], + [6, 22], + [6, 26], + [6, 30], + [6, 34], + [6, 22, 38], + [6, 24, 42], + [6, 26, 46], + [6, 28, 50], + [6, 30, 54], + [6, 32, 58], + [6, 34, 62], + [6, 26, 46, 66], + [6, 26, 48, 70], + [6, 26, 50, 74], + [6, 30, 54, 78], + [6, 30, 56, 82], + [6, 30, 58, 86], + [6, 34, 62, 90], + [6, 28, 50, 72, 94], + [6, 26, 50, 74, 98], + [6, 30, 54, 78, 102], + [6, 28, 54, 80, 106], + [6, 32, 58, 84, 110], + [6, 30, 58, 86, 114], + [6, 34, 62, 90, 118], + [6, 26, 50, 74, 98, 122], + [6, 30, 54, 78, 102, 126], + [6, 26, 52, 78, 104, 130], + [6, 30, 56, 82, 108, 134], + [6, 34, 60, 86, 112, 138], + [6, 30, 58, 86, 114, 142], + [6, 34, 62, 90, 118, 146], + [6, 30, 54, 78, 102, 126, 150], + [6, 24, 50, 76, 102, 128, 154], + [6, 28, 54, 80, 106, 132, 158], + [6, 32, 58, 84, 110, 136, 162], + [6, 26, 54, 82, 110, 138, 166], + [6, 30, 58, 86, 114, 142, 170] + ], + + G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0), + G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0), + G15_MASK : (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1), + + getBCHTypeInfo : function(data) { + var d = data << 10; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) { + d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); + } + return ( (data << 10) | d) ^ QRUtil.G15_MASK; + }, + + getBCHTypeNumber : function(data) { + var d = data << 12; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) { + d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); + } + return (data << 12) | d; + }, + + getBCHDigit : function(data) { + + var digit = 0; + + while (data != 0) { + digit++; + data >>>= 1; + } + + return digit; + }, + + getPatternPosition : function(typeNumber) { + return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]; + }, + + getMask : function(maskPattern, i, j) { + + switch (maskPattern) { + + case QRMaskPattern.PATTERN000 : return (i + j) % 2 == 0; + case QRMaskPattern.PATTERN001 : return i % 2 == 0; + case QRMaskPattern.PATTERN010 : return j % 3 == 0; + case QRMaskPattern.PATTERN011 : return (i + j) % 3 == 0; + case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; + case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 == 0; + case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; + case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; + + default : + throw new Error("bad maskPattern:" + maskPattern); + } + }, + + getErrorCorrectPolynomial : function(errorCorrectLength) { + + var a = new QRPolynomial([1], 0); + + for (var i = 0; i < errorCorrectLength; i++) { + a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0) ); + } + + return a; + }, + + getLengthInBits : function(mode, type) { + + if (1 <= type && type < 10) { + + // 1 - 9 + + switch(mode) { + case QRMode.MODE_NUMBER : return 10; + case QRMode.MODE_ALPHA_NUM : return 9; + case QRMode.MODE_8BIT_BYTE : return 8; + case QRMode.MODE_KANJI : return 8; + default : + throw new Error("mode:" + mode); + } + + } else if (type < 27) { + + // 10 - 26 + + switch(mode) { + case QRMode.MODE_NUMBER : return 12; + case QRMode.MODE_ALPHA_NUM : return 11; + case QRMode.MODE_8BIT_BYTE : return 16; + case QRMode.MODE_KANJI : return 10; + default : + throw new Error("mode:" + mode); + } + + } else if (type < 41) { + + // 27 - 40 + + switch(mode) { + case QRMode.MODE_NUMBER : return 14; + case QRMode.MODE_ALPHA_NUM : return 13; + case QRMode.MODE_8BIT_BYTE : return 16; + case QRMode.MODE_KANJI : return 12; + default : + throw new Error("mode:" + mode); + } + + } else { + throw new Error("type:" + type); + } + }, + + getLostPoint : function(qrCode) { + + var moduleCount = qrCode.getModuleCount(); + + var lostPoint = 0; + + // LEVEL1 + + for (var row = 0; row < moduleCount; row++) { + + for (var col = 0; col < moduleCount; col++) { + + var sameCount = 0; + var dark = qrCode.isDark(row, col); + + for (var r = -1; r <= 1; r++) { + + if (row + r < 0 || moduleCount <= row + r) { + continue; + } + + for (var c = -1; c <= 1; c++) { + + if (col + c < 0 || moduleCount <= col + c) { + continue; + } + + if (r == 0 && c == 0) { + continue; + } + + if (dark == qrCode.isDark(row + r, col + c) ) { + sameCount++; + } + } + } + + if (sameCount > 5) { + lostPoint += (3 + sameCount - 5); + } + } + } + + // LEVEL2 + + for (var row = 0; row < moduleCount - 1; row++) { + for (var col = 0; col < moduleCount - 1; col++) { + var count = 0; + if (qrCode.isDark(row, col ) ) count++; + if (qrCode.isDark(row + 1, col ) ) count++; + if (qrCode.isDark(row, col + 1) ) count++; + if (qrCode.isDark(row + 1, col + 1) ) count++; + if (count == 0 || count == 4) { + lostPoint += 3; + } + } + } + + // LEVEL3 + + for (var row = 0; row < moduleCount; row++) { + for (var col = 0; col < moduleCount - 6; col++) { + if (qrCode.isDark(row, col) + && !qrCode.isDark(row, col + 1) + && qrCode.isDark(row, col + 2) + && qrCode.isDark(row, col + 3) + && qrCode.isDark(row, col + 4) + && !qrCode.isDark(row, col + 5) + && qrCode.isDark(row, col + 6) ) { + lostPoint += 40; + } + } + } + + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount - 6; row++) { + if (qrCode.isDark(row, col) + && !qrCode.isDark(row + 1, col) + && qrCode.isDark(row + 2, col) + && qrCode.isDark(row + 3, col) + && qrCode.isDark(row + 4, col) + && !qrCode.isDark(row + 5, col) + && qrCode.isDark(row + 6, col) ) { + lostPoint += 40; + } + } + } + + // LEVEL4 + + var darkCount = 0; + + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount; row++) { + if (qrCode.isDark(row, col) ) { + darkCount++; + } + } + } + + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; + + return lostPoint; + } + +}; + + +//--------------------------------------------------------------------- +// QRMath +//--------------------------------------------------------------------- + +var QRMath = { + + glog : function(n) { + + if (n < 1) { + throw new Error("glog(" + n + ")"); + } + + return QRMath.LOG_TABLE[n]; + }, + + gexp : function(n) { + + while (n < 0) { + n += 255; + } + + while (n >= 256) { + n -= 255; + } + + return QRMath.EXP_TABLE[n]; + }, + + EXP_TABLE : new Array(256), + + LOG_TABLE : new Array(256) + +}; + +for (var i = 0; i < 8; i++) { + QRMath.EXP_TABLE[i] = 1 << i; +} +for (var i = 8; i < 256; i++) { + QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] + ^ QRMath.EXP_TABLE[i - 5] + ^ QRMath.EXP_TABLE[i - 6] + ^ QRMath.EXP_TABLE[i - 8]; +} +for (var i = 0; i < 255; i++) { + QRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i; +} + +//--------------------------------------------------------------------- +// QRPolynomial +//--------------------------------------------------------------------- + +function QRPolynomial(num, shift) { + + if (num.length == undefined) { + throw new Error(num.length + "/" + shift); + } + + var offset = 0; + + while (offset < num.length && num[offset] == 0) { + offset++; + } + + this.num = new Array(num.length - offset + shift); + for (var i = 0; i < num.length - offset; i++) { + this.num[i] = num[i + offset]; + } +} + +QRPolynomial.prototype = { + + get : function(index) { + return this.num[index]; + }, + + getLength : function() { + return this.num.length; + }, + + multiply : function(e) { + + var num = new Array(this.getLength() + e.getLength() - 1); + + for (var i = 0; i < this.getLength(); i++) { + for (var j = 0; j < e.getLength(); j++) { + num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i) ) + QRMath.glog(e.get(j) ) ); + } + } + + return new QRPolynomial(num, 0); + }, + + mod : function(e) { + + if (this.getLength() - e.getLength() < 0) { + return this; + } + + var ratio = QRMath.glog(this.get(0) ) - QRMath.glog(e.get(0) ); + + var num = new Array(this.getLength() ); + + for (var i = 0; i < this.getLength(); i++) { + num[i] = this.get(i); + } + + for (var i = 0; i < e.getLength(); i++) { + num[i] ^= QRMath.gexp(QRMath.glog(e.get(i) ) + ratio); + } + + // recursive call + return new QRPolynomial(num, 0).mod(e); + } +}; + +//--------------------------------------------------------------------- +// QRRSBlock +//--------------------------------------------------------------------- + +function QRRSBlock(totalCount, dataCount) { + this.totalCount = totalCount; + this.dataCount = dataCount; +} + +QRRSBlock.RS_BLOCK_TABLE = [ + + // L + // M + // Q + // H + + // 1 + [1, 26, 19], + [1, 26, 16], + [1, 26, 13], + [1, 26, 9], + + // 2 + [1, 44, 34], + [1, 44, 28], + [1, 44, 22], + [1, 44, 16], + + // 3 + [1, 70, 55], + [1, 70, 44], + [2, 35, 17], + [2, 35, 13], + + // 4 + [1, 100, 80], + [2, 50, 32], + [2, 50, 24], + [4, 25, 9], + + // 5 + [1, 134, 108], + [2, 67, 43], + [2, 33, 15, 2, 34, 16], + [2, 33, 11, 2, 34, 12], + + // 6 + [2, 86, 68], + [4, 43, 27], + [4, 43, 19], + [4, 43, 15], + + // 7 + [2, 98, 78], + [4, 49, 31], + [2, 32, 14, 4, 33, 15], + [4, 39, 13, 1, 40, 14], + + // 8 + [2, 121, 97], + [2, 60, 38, 2, 61, 39], + [4, 40, 18, 2, 41, 19], + [4, 40, 14, 2, 41, 15], + + // 9 + [2, 146, 116], + [3, 58, 36, 2, 59, 37], + [4, 36, 16, 4, 37, 17], + [4, 36, 12, 4, 37, 13], + + // 10 + [2, 86, 68, 2, 87, 69], + [4, 69, 43, 1, 70, 44], + [6, 43, 19, 2, 44, 20], + [6, 43, 15, 2, 44, 16], + + // 11 + [4, 101, 81], + [1, 80, 50, 4, 81, 51], + [4, 50, 22, 4, 51, 23], + [3, 36, 12, 8, 37, 13], + + // 12 + [2, 116, 92, 2, 117, 93], + [6, 58, 36, 2, 59, 37], + [4, 46, 20, 6, 47, 21], + [7, 42, 14, 4, 43, 15], + + // 13 + [4, 133, 107], + [8, 59, 37, 1, 60, 38], + [8, 44, 20, 4, 45, 21], + [12, 33, 11, 4, 34, 12], + + // 14 + [3, 145, 115, 1, 146, 116], + [4, 64, 40, 5, 65, 41], + [11, 36, 16, 5, 37, 17], + [11, 36, 12, 5, 37, 13], + + // 15 + [5, 109, 87, 1, 110, 88], + [5, 65, 41, 5, 66, 42], + [5, 54, 24, 7, 55, 25], + [11, 36, 12], + + // 16 + [5, 122, 98, 1, 123, 99], + [7, 73, 45, 3, 74, 46], + [15, 43, 19, 2, 44, 20], + [3, 45, 15, 13, 46, 16], + + // 17 + [1, 135, 107, 5, 136, 108], + [10, 74, 46, 1, 75, 47], + [1, 50, 22, 15, 51, 23], + [2, 42, 14, 17, 43, 15], + + // 18 + [5, 150, 120, 1, 151, 121], + [9, 69, 43, 4, 70, 44], + [17, 50, 22, 1, 51, 23], + [2, 42, 14, 19, 43, 15], + + // 19 + [3, 141, 113, 4, 142, 114], + [3, 70, 44, 11, 71, 45], + [17, 47, 21, 4, 48, 22], + [9, 39, 13, 16, 40, 14], + + // 20 + [3, 135, 107, 5, 136, 108], + [3, 67, 41, 13, 68, 42], + [15, 54, 24, 5, 55, 25], + [15, 43, 15, 10, 44, 16], + + // 21 + [4, 144, 116, 4, 145, 117], + [17, 68, 42], + [17, 50, 22, 6, 51, 23], + [19, 46, 16, 6, 47, 17], + + // 22 + [2, 139, 111, 7, 140, 112], + [17, 74, 46], + [7, 54, 24, 16, 55, 25], + [34, 37, 13], + + // 23 + [4, 151, 121, 5, 152, 122], + [4, 75, 47, 14, 76, 48], + [11, 54, 24, 14, 55, 25], + [16, 45, 15, 14, 46, 16], + + // 24 + [6, 147, 117, 4, 148, 118], + [6, 73, 45, 14, 74, 46], + [11, 54, 24, 16, 55, 25], + [30, 46, 16, 2, 47, 17], + + // 25 + [8, 132, 106, 4, 133, 107], + [8, 75, 47, 13, 76, 48], + [7, 54, 24, 22, 55, 25], + [22, 45, 15, 13, 46, 16], + + // 26 + [10, 142, 114, 2, 143, 115], + [19, 74, 46, 4, 75, 47], + [28, 50, 22, 6, 51, 23], + [33, 46, 16, 4, 47, 17], + + // 27 + [8, 152, 122, 4, 153, 123], + [22, 73, 45, 3, 74, 46], + [8, 53, 23, 26, 54, 24], + [12, 45, 15, 28, 46, 16], + + // 28 + [3, 147, 117, 10, 148, 118], + [3, 73, 45, 23, 74, 46], + [4, 54, 24, 31, 55, 25], + [11, 45, 15, 31, 46, 16], + + // 29 + [7, 146, 116, 7, 147, 117], + [21, 73, 45, 7, 74, 46], + [1, 53, 23, 37, 54, 24], + [19, 45, 15, 26, 46, 16], + + // 30 + [5, 145, 115, 10, 146, 116], + [19, 75, 47, 10, 76, 48], + [15, 54, 24, 25, 55, 25], + [23, 45, 15, 25, 46, 16], + + // 31 + [13, 145, 115, 3, 146, 116], + [2, 74, 46, 29, 75, 47], + [42, 54, 24, 1, 55, 25], + [23, 45, 15, 28, 46, 16], + + // 32 + [17, 145, 115], + [10, 74, 46, 23, 75, 47], + [10, 54, 24, 35, 55, 25], + [19, 45, 15, 35, 46, 16], + + // 33 + [17, 145, 115, 1, 146, 116], + [14, 74, 46, 21, 75, 47], + [29, 54, 24, 19, 55, 25], + [11, 45, 15, 46, 46, 16], + + // 34 + [13, 145, 115, 6, 146, 116], + [14, 74, 46, 23, 75, 47], + [44, 54, 24, 7, 55, 25], + [59, 46, 16, 1, 47, 17], + + // 35 + [12, 151, 121, 7, 152, 122], + [12, 75, 47, 26, 76, 48], + [39, 54, 24, 14, 55, 25], + [22, 45, 15, 41, 46, 16], + + // 36 + [6, 151, 121, 14, 152, 122], + [6, 75, 47, 34, 76, 48], + [46, 54, 24, 10, 55, 25], + [2, 45, 15, 64, 46, 16], + + // 37 + [17, 152, 122, 4, 153, 123], + [29, 74, 46, 14, 75, 47], + [49, 54, 24, 10, 55, 25], + [24, 45, 15, 46, 46, 16], + + // 38 + [4, 152, 122, 18, 153, 123], + [13, 74, 46, 32, 75, 47], + [48, 54, 24, 14, 55, 25], + [42, 45, 15, 32, 46, 16], + + // 39 + [20, 147, 117, 4, 148, 118], + [40, 75, 47, 7, 76, 48], + [43, 54, 24, 22, 55, 25], + [10, 45, 15, 67, 46, 16], + + // 40 + [19, 148, 118, 6, 149, 119], + [18, 75, 47, 31, 76, 48], + [34, 54, 24, 34, 55, 25], + [20, 45, 15, 61, 46, 16] +]; + +QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) { + + var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel); + + if (rsBlock == undefined) { + throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel); + } + + var length = rsBlock.length / 3; + + var list = new Array(); + + for (var i = 0; i < length; i++) { + + var count = rsBlock[i * 3 + 0]; + var totalCount = rsBlock[i * 3 + 1]; + var dataCount = rsBlock[i * 3 + 2]; + + for (var j = 0; j < count; j++) { + list.push(new QRRSBlock(totalCount, dataCount) ); + } + } + + return list; +} + +QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) { + + switch(errorCorrectLevel) { + case QRErrorCorrectLevel.L : + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; + case QRErrorCorrectLevel.M : + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; + case QRErrorCorrectLevel.Q : + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; + case QRErrorCorrectLevel.H : + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; + default : + return undefined; + } +} + +//--------------------------------------------------------------------- +// QRBitBuffer +//--------------------------------------------------------------------- + +function QRBitBuffer() { + this.buffer = new Array(); + this.length = 0; +} + +QRBitBuffer.prototype = { + + get : function(index) { + var bufIndex = Math.floor(index / 8); + return ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1; + }, + + put : function(num, length) { + for (var i = 0; i < length; i++) { + this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1); + } + }, + + getLengthInBits : function() { + return this.length; + }, + + putBit : function(bit) { + + var bufIndex = Math.floor(this.length / 8); + if (this.buffer.length <= bufIndex) { + this.buffer.push(0); + } + + if (bit) { + this.buffer[bufIndex] |= (0x80 >>> (this.length % 8) ); + } + + this.length++; + } +}; + +/** + * Functionality for the password revert page. This is reached when a user changes their password + * and clicks a link in their email to revert the password back to their previous one. + */ +var passwordRevert = { + + /** The code that will be sent to the API to prove that they clicked the email link */ + revertPasswordCode: null, + + /** + * Initialise the password revert page's functionality + * @param {String} currentPage The current page e.g. #pwrevertmup1iayJmjRAHCxaKnBAmRaL + */ + init: function(currentPage) { + + 'use strict'; + + // Cache the code + this.revertPasswordCode = currentPage.replace('pwrevert', ''); + + // Init functionality + this.checkPasswordRevertCode(); + }, + + /** + * Validate the email code + */ + checkPasswordRevertCode: function() { + + 'use strict'; + + loadingDialog.show(); + + var self = this; + + // Make Revert Validation request + api_req({ a: 'erv', c: this.revertPasswordCode }, { + callback: function(result) { + + loadingDialog.hide(); + + // The API can't inform us if the code is expired as it deletes used codes after use. So this does a + // check to see if the code length is right, if it is then the code is expired, otherwise it's invalid + if (result === ENOENT || result === EEXPIRED) { + var failureMessage = l[20857] + ' ' + l[20858]; // Your link is invalid. Please contact support + + if (self.revertPasswordCode.length === 24) { + failureMessage = l[20856] + ' ' + l[20858]; // Your link has expired. Please contact support + } + + msgDialog('warningb', l[135], failureMessage, '', self.cancelRevertPassword); + } + else if (result < 0) { + + // Oops, something went wrong. Please contact support@mega.nz for assistance. + msgDialog('warningb', l[200], l[200] + ' ' + l[20858], '', self.cancelRevertPassword); + } + else { + // If the code is valid, get the email for the account to be reset + var email = result[1]; + var successMessage = l[20859].replace('%1', email); + + // Ask if they really want to revert the password + msgDialog('confirmation', l[870], successMessage, '', function(userConfirmed) { + + // If the user clicks to confirm + if (userConfirmed) { + self.proceedRevertingPassword(); + } + else { + self.cancelRevertPassword(); + } + }); + } + } + }); + }, + + /** + * A callback function to return to the start/cloud drive page if there was an error or the user cancelled + */ + cancelRevertPassword: function() { + + 'use strict'; + + loadSubPage(u_attr ? 'fm' : 'start'); + }, + + /** + * Proceed to revert the password to the previous one by sending the final API request + */ + proceedRevertingPassword: function() { + + 'use strict'; + + loadingDialog.show(); + + // Make Revert Password request + api_req({ a: 'erx', c: this.revertPasswordCode }, { + callback: function(result) { + + loadingDialog.hide(); + + // Show generic error + if (result < 0) { + msgDialog('warningb', l[200], l[200] + ' ' + l[20858], '', passwordRevert.cancelRevertPassword); + } + else { + // If it successfully reverted, show a success message and go back to the login page + msgDialog('info', l[18280], l[20860], '', function() { + + // If already logged in, log out + if (u_attr) { + u_logout(true); + } + + loadSubPage('login'); + }); + } + } + }); + } +}; + +/** + * This file handles the Public Service Announcements. One announcement will + * appear at the bottom of the page in an overlay at a time. The announcements + * come from a hard coded list initially. Once a user has seen an announcement + * they will mark it as read on the API server. If a user is not logged in + * then it will mark that announcement as seen in localStorage. + */ +var psa = { + + /** The id number of the last announcement that the user has seen */ + lastSeenPsaId: 0, + + /** + * The current announcement object from the API e.g. + * { + * id: integer psa id + * t: string psa title, already translated into user's known language if available + * d: string psa body/description, already translated if available + * img: string url to image on one of our static servers + * l: string link url for the positive flow button (this can be empty if not provided) + * b: string button label for positive flow button, can be empty if not provided + * } + */ + currentPsa: null, + + /** Whether the PSA has already been fetched this session */ + fetchedPsa: false, + + /** If the PSA is currently being shown */ + visible: false, + + /** + * Show the dialog if they have not seen the announcement yet + */ + async init() { + 'use strict'; + + // Already tried fetching the announcement this session + if (psa.fetchedPsa) { + return false; + } + psa.fetchedPsa = true; + + // Get the last announcement number they have seen from localStorage + const seen = await Promise.allSettled([ + M.getPersistentData('lastSeenPsaId'), + u_handle && u_handle !== 'AAAAAAAAAAA' && mega.attr.get(u_handle, 'lastPsa', -2, true) + ]); + psa.lastSeenPsaId = parseInt(seen[1].value || seen[0].value) | 0; + + // Make Get PSA (gpsa) API request + const result = await Promise.resolve(M.req({a: 'gpsa', n: psa.lastSeenPsaId})).catch(echo); + + // If there is an announcement to be shown + if (typeof result === 'object' && 'id' in result) { + + // Cache the current announcement + psa.currentPsa = result; + + // Show the announcement + psa.configureAndShowAnnouncement(); + } + else if (parseInt(result) !== ENOENT) { + throw new Error(`Unexpected GPSA result, ${result}`); + } + }, + + /** + * Wrapper function to configure the announcement details and show it + */ + configureAndShowAnnouncement: function() { + + 'use strict'; + + // Only show the announcement if they have not seen the current announcement. + // The localStorage.alwaysShowPsa is a test variable to force show the PSA + if ((psa.lastSeenPsaId < psa.currentPsa.id) || (localStorage.alwaysShowPsa === '1')) { + + psa.prefillAnnouncementDetails(); + psa.addCloseButtonHandler(); + psa.addMoreInfoButtonHandler(); + psa.showAnnouncement(); + } + else { + // If they viewed the site while not logged in, then logged in with + // an account that had already seen this PSA then this hides it + psa.hideAnnouncement(); + } + }, + + /** + * Update the details of the announcement depending on the current one + */ + prefillAnnouncementDetails: function() { + + 'use strict'; + + // Determine image path + var retina = (window.devicePixelRatio > 1) ? '@2x' : ''; + var imagePath = staticpath + 'images/mega/psa/' + psa.currentPsa.img + retina + '.png'; + + // Decode the text from Base64 (there were some issues with some languages) + var title = from8(base64urldecode(psa.currentPsa.t)); + var description = from8(base64urldecode(psa.currentPsa.d)); + var buttonLabel = from8(base64urldecode(psa.currentPsa.b)); + + // Populate the details + var $psa = $('.public-service-anouncement'); + $psa.find('.title').text(title); + $psa.find('.messageA').text(description); + if (psa.currentPsa.l) { + $('.view-more-info', $psa).attr('data-continue-link', psa.currentPsa.l); + } + $psa.find('.view-more-info .text').text(buttonLabel); + $psa.find('.display-icon').attr('src', imagePath).on('error', function() { + + // If the icon doesn't exist for new PSAs which is likely while in local development, use the one + // on the default static path as they are added directly to the static servers now for each new PSA + $(this).attr('src', psa.currentPsa.dsp + psa.currentPsa.img + retina + '.png'); + }); + }, + + /** + * Adds the close button functionality + */ + addCloseButtonHandler: function() { + + 'use strict'; + + // Use delegated event in case the HTML elements are not loaded yet + $('body').off('click', '.public-service-anouncement .fm-dialog-close'); + $('body').on('click', '.public-service-anouncement .fm-dialog-close', function() { + + // Hide the banner and store that they have seen this PSA + psa.hideAnnouncement(); + psa.saveLastPsaSeen(); + }); + }, + + /** + * Adds the functionality for the view more info button + */ + addMoreInfoButtonHandler: function() { + + 'use strict'; + + // Use delegated event in case the HTML elements are not loaded yet + $('body').rebind('click', '.public-service-anouncement button.view-more-info', function() { + + // Get the page link for this announcement + var pageLink = $(this).attr('data-continue-link'); + + // Hide the banner and save the PSA as seen + psa.hideAnnouncement(); + psa.saveLastPsaSeen(); + + if (!pageLink) { + return; + } + + // Open a new tab (and hopefully don't trigger popup blocker) + window.open(pageLink, '_blank', 'noopener,noreferrer'); + }); + }, + + /** + * Shows the announcement + */ + showAnnouncement: function() { + + 'use strict'; + + // Show the PSA + $('body').addClass('notification'); + + // Move the file manager up + psa.resizeFileManagerHeight(); + + // Add a handler to fix the layout if the window is resized + $(window).rebind('resize.bottomNotification', function() { + psa.resizeFileManagerHeight(); + psa.repositionAccountLoadingBar(); + }); + + // Currently being shown + psa.visible = true; + }, + + /** + * Hides the announcement + */ + hideAnnouncement: function() { + + 'use strict'; + + // If already hidden, don't do anything (specially a window.trigger('resize')). + if (!this.visible) { + return false; + } + + // Move the progress bar back to the 0 position + $('.loader-progressbar').css('bottom', 0); + + // Hide the announcement + $('body').removeClass('notification'); + + // Reset file manager height + $('.fmholder').css('height', ''); + $(window).off('resize.bottomNotification'); + + // Trigger resize so that full content in the file manager is visible after closing + $(window).trigger('resize'); + + // Save last seen announcement number for page changes + psa.lastSeenPsaId = psa.currentPsa.id; + + // Set to no longer visible + psa.visible = false; + }, + + /** + * Saves the current announcement number they have seen to a user attribute if logged in, otherwise to localStorage + */ + saveLastPsaSeen: function() { + + 'use strict'; + + // Always store that they have seen it in localStorage. This is useful if they + // then log out, then the PSA should still stay hidden and not re-show itself + M.setPersistentData('lastSeenPsaId', String(psa.currentPsa.id)).dump('psa'); + + // If logged in and completed registration + if (u_type === 3) { + + // Store that they have seen it on the API side + // (should be stored as ^!lastPsa for a private non encrypted, non historic attribute) + mega.attr.set('lastPsa', String(psa.currentPsa.id), -2, true); + } + }, + + /** + * When the user logs in, this updates the API with the last PSA they saw when they were logged out + * @param {String|undefined} apiLastPsaSeen The last PSA that the user has seen that the API knows about + */ + updateApiWithLastPsaSeen: function(apiLastPsaSeen) { + 'use strict'; + + // Make sure they have seen a PSA and that the API seen PSA is older than the one in localStorage + M.getPersistentData('lastSeenPsaId') + .then(res => { + if (apiLastPsaSeen < res) { + + // Store that they have seen it on the API side + // (should be stored as ^!lastPsa for a private non encrypted, non historic attribute) + mega.attr.set('lastPsa', res, -2, true); + } + }) + .catch(nop); + }, + + /** + * Resize the fmholder and startholder container heights + * because they depend on the bottom notification height + */ + resizeFileManagerHeight: function() { + + 'use strict'; + + // If the PSA announcement is currently shown + if (!is_mobile && $('body').hasClass('notification')) { + + var notificationSize = $('.bottom-info.body').outerHeight(); + var bodyHeight = $('body').outerHeight(); + + if (notificationSize > 120) { + $('.fmholder').height(bodyHeight - notificationSize); + } + } + }, + + /** + * Repositions the account loading bar so it is above the PSA if it is being shown + */ + repositionAccountLoadingBar: function() { + + 'use strict'; + + // If the PSA is visible + if (psa.visible) { + + // Move the progress bar up above the PSA otherwise it's not visible + var psaHeight = $('.public-service-anouncement').outerHeight(); + $('.loader-progressbar').css('bottom', psaHeight); + } + else { + // Reset to the bottom + $('.loader-progressbar').css('bottom', 0); + } + } +}; + +/** + * MegaInput Core + * + * MegaInput is designed to unify inputs across the website give developer to an input with flexiblilty, + * maintainability and easily control when they trying to create a new input. + * + * By doing this we can achieve, + * - Design unification across the website + * - Less hassle on maintenance for inputs + * - Standise coding practice. + * - Reduce amount of duplicate or similar code. + * + * MegaInput is planed to expand to cover all sorts of inputs on the Mega Webclient, such as text, textarea, radio, + * checkbox, dropdown, buttons, numbers, etc. + * + * Class and prototype is located under `mega.ui`. + * + * Every original event binding on the input will not be revoke by MegaInput initialization, + * it keeps original input element and just modify wrapper. + * Devs please aware above when you start new extension. + * So user do not need to worried about binding order, BUT need to be careful with parent selection in binded function, + * due to it can be modified structually by MegaInputs. + * + * How to use: + * + * - How to create a new input + * + * 1. Create an input on html, adding classname for the custom styles as you required + * + * e.g. `` + * + * 1.1 You can use extension for custom style by adding classname of the extension + * + * e.g. `` + * + * For Devs, when code extension, please leave a comment about what is class name for it, + * and an example html to help other people to get info for your extension. + * To see an example for the comment please refer megaInputs-underlinedText.js. + * + * 2. Select eletment with jquery and call as following: + * + * `var megaInput = new mega.ui.MegaInputs($input);` + * + * $input can be array of inputs as well. This will return array of megaInput objects. + * megaInput object is the actually object controller for the megaInput. + * + * 3. If you can see `megaInputs` class added on the input, it is ready. + * + * - How to control MegaInputs already setup. + * + * - First initialization returns the MegaInputs object. You can use it to control the item. + * + * OR + * + * - You can select dom element with jQuery selector and can call data attribute for it to get + * the MegaInput object for the element. + * + * `var megaInput = $(elem).data('MegaInputs')` + * + * With it you can modify/call function that is binded on it. + * But please do not forget about sanity check this to avoid exception. + * And vice versa is possible as well, with MegaInputs object you can find it's input and directly using it like: + * + * `megaInputs.$input.rebind('focus', function(){ -do you thing here- })` + * + * - By setup showMessage, hideMessage, showError, hideError, you can call it with MegaInputs object like: + * + * `$input.data('MegaInputs').showError('-YOUR-MASSAGE-'')` + * `$input.data('MegaInputs').hideError()` + * + * There is two way to setup these functions. + * + * 1. Pass it on options once MegaInput is inited by using options variable + * + * `var megaInput = new mega.ui.MegaInputs($input, { + * onShowError: function(msg) { + * ---do your thing--- + * } + * });` + * + * 2. Setup on extension code and override original (Please refer underlinedText as example) + * + * - Similar way as above, you can setup event binding on the input. + * + * 1. Pass it on options once MegaInput is inited by using options variable + * + * `var megaInput = new mega.ui.MegaInputs($input, { + * onFocus: function(e) { + * ---do your thing--- + * } + * });` + * + * 2. Setup on extension code and override original (Please refer underlinedText as example) + * + * - Mark input as required + * You can add `requried` class on input to mark it as required. Extension will handle required on it's own way. + * + * MegaInputs extensions: + * - TEXT: text input - megaInputs-underlinedText.js + * - CURRENCY: text/number input for localised currencies - megaInputs-currencyField.js + */ + +(function($, scope) { + + 'use strict'; + + /** + * MegaInputs + * @constructor + * @param {Object} $input - jQuery object of target input element. + * @param {Object} [options] addon options upon initialization. + * + * @return {Object} megaInput - Created MegaInput object + */ + var MegaInputs = function($input, options) { + if (!(this instanceof MegaInputs)) { + return new MegaInputs($input, options); + } + + if (!$input || !$input.length) { + if (d) { + console.debug('MegaInputs: nothing to apply here...', $input); + } + return; + } + + // Support if $input is multiple elements + if ($input.length > 1) { + var inputArray = []; + for (var i = $input.length - 1; i >= 0; i--) { + inputArray.push(new mega.ui.MegaInputs($($input[i]), options)); + } + + return inputArray; + } + + this.$input = $input; + this.type = $input.attr('type') || 'text'; + this.classes = this.$input.attr("class") ? this.$input.attr("class").split(/\s+/) : []; + this.options = options || {}; + this.required = $input.hasClass('required'); + + var self = this; + + // Bind class as a jQuery element's data attribute, so it can be called with the $ object + this.$input.data('MegaInputs', this); + + this._bindEvent(); + + // Class specified event bind + self.classes.forEach(function(c) { + if (typeof self[c] === 'function') { + self[c](); + } + }); + + // Add MegaInput class to show it is megaInput + this.$input.addClass('megaInputs'); + }; + + /* + * General MegaInput Features + */ + MegaInputs.prototype._bindEvent = function() { + + var self = this; + + // Bind option events + if (typeof self.options.onFocus === 'function') { + self.$input.rebind('focus.megaInputs', self.options.onFocus); + } + + if (typeof self.options.onBlur === 'function') { + self.$input.rebind('blur.megaInputs', self.options.onBlur); + } + + if (typeof self.options.onClick === 'function') { + self.$input.rebind('click.megaInputs', self.options.onClick); + } + }; + + // Red colored Message + MegaInputs.prototype.showError = function(msg) { + + if (typeof this.options.onShowError === 'function') { + this.options.onShowError(msg); + } + else { + if (d) { + console.warn('MegaInputs: There is no onShowError options given.'); + } + } + }; + + // Non-colored Message + MegaInputs.prototype.showMessage = function(msg) { + + if (typeof this.options.onShowMessage === 'function') { + this.options.onShowMessage(msg); + } + else { + if (d) { + console.warn('MegaInputs: There is no showMessage options given.'); + } + } + }; + + // Non-colored Message + MegaInputs.prototype.hideError = MegaInputs.prototype.hideMessage = function() { + + if (typeof this.options.onHideError === 'function') { + this.options.onHideError(); + } + else { + if (d) { + console.warn('MegaInputs: There is no onHideError options given.'); + } + } + }; + + /** + * Update value on all input elements and trigger change event + * + * @param {*} value New value to set on all affected input elements + * + * @returns {void} + */ + MegaInputs.prototype.setValue = function(value) { + if (!this.$input || !this.$input.length) { + return; + } + + this.$input.val(value).trigger('change'); + }; + + // Export + scope.mega = scope.mega || {}; + scope.mega.ui = scope.mega.ui || {}; + scope.mega.ui.MegaInputs = MegaInputs; + +})(jQuery, window); + +/* + * MegaInputs related functions with sanity check with original functions to prevent exception + */ + +/** + * MegaInputs show error with sanity check. + * + * @param {String} msg - Massage to show. + */ +$.fn.megaInputsShowError = function(msg) { + + 'use strict'; + + var megaInput = $(this).data('MegaInputs'); + + if (megaInput) { + megaInput.showError(msg); + } + else { + if (d) { + console.warn('MegaInputs: Sorry this is not MegaInput or the MegaInput is not initialized.', this); + } + } + + return this; +}; + +/** + * MegaInputs hide error with sanity check. + * + * @param {String} msg - Massage to show. + */ +$.fn.megaInputsShowMessage = function(msg) { + + 'use strict'; + + var megaInput = $(this).data('MegaInputs'); + + if (megaInput) { + megaInput.showMessage(msg); + } + else { + if (d) { + console.warn('MegaInputs: Sorry this is not MegaInput or the MegaInput is not initialized.', this); + } + } +}; + +/** + * MegaInputs Hide message and error with sanity check. + */ +$.fn.megaInputsHideError = $.fn.megaInputsHideMessage = function() { + + 'use strict'; + + var megaInput = $(this).data('MegaInputs'); + + if (megaInput) { + megaInput.hideError(); + } + else { + if (d) { + console.warn('MegaInputs: Sorry this is not MegaInput or the MegaInput is not initialized.', this); + } + } +}; + +/* + * Text input + * + * Optionally, animate title/placeholder to top of input when it is focused/has value + * + * Please refer Megainput Core instruction to learn basic usage. + * + * Class: `underlinedText` + * Example: `` + * + * Extension: + * - Password Strength Checker - Show bottom bar that show strength of entered password + * Class: `strengthChecker` + * Example: `` + * + * - Half size - Make title top half width and float positioning, may require manually place `clear
              `. + * Class: `halfSize-l` for float left, `halfSize-r` for float right + * Example: ` + * ` + */ +mega.ui.MegaInputs.prototype.underlinedText = function() { + + 'use strict'; + + if (!(this.type === 'text' || this.type === 'password' || + this.type === 'tel' || this.type === 'number' || this.type === 'email')) { + console.error('Class binding and input type mismatch! ' + + 'classname: mega-input, input type: ' + this.type + ', Required type: text.'); + return; + } + + var $input = this.$input; + + this.underlinedText._bindEvent.call(this); + this.underlinedText._init.call(this); + + // Dedicate functions + this.underlinedText._extendedFunctions.call(this); + + // Make sure title is always on top upon init when there is value. + $input.trigger('blur'); + + // And make sure password strength is cleared. + if ($input.hasClass('strengthChecker')) { + $input.trigger('input'); + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._init = function() { + + 'use strict'; + + var $input = this.$input; + + // Overwrite hide/show for Message/Error + this.underlinedText._updateShowHideErrorAndMessage.call(this); + + // If it is already a megaInput, html preparation does not required anymore. + if (!$input.hasClass('megaInputs')) { + + const hasTitle = $input.attr('title') || $input.attr('placeholder'); + const wrapperClass = hasTitle ? 'title-ontop' : ''; + + // Wrap it with another div for styling and animation + $input.wrap(`
              `); + + const $wrapper = this.$wrapper = $input.closest(`.mega-input`); + + // Hide wrapper if input has hidden class + if ($input.hasClass('hidden')) { + $wrapper.addClass('hidden'); + $input.removeClass('hidden'); + } + + if (hasTitle) { + // Insert animatied title + let title = escapeHTML($input.attr('title') || $input.attr('placeholder')); + + // Adding required sign + title += this.required ? ' *' : ''; + + const titleBlock = '
              ' + title + '
              '; + + // Insert title block + $wrapper.safePrepend(titleBlock); + + // Bind event for animation on title + const $titleBlock = $('.title', $input.parent()); + $titleBlock.rebind('click.underlinedText', function() { + + const $this = $(this); + + if (!$this.parent().hasClass('active')) { + $this.next('input').trigger('focus'); + } + }); + } + + // Insert error message block + $wrapper.safeAppend('
              '); + + // Half size + this.underlinedText._halfSize.call(this); + + // Insert password strength checker + this.underlinedText._strengthChecker.call(this); + + // With icon or prefix (e.g. currency) + this.underlinedText._withIconOrPrefix.call(this); + + // Add some class to wrapper + if ($input.data('wrapper-class')) { + $wrapper.addClass($input.data('wrapper-class')); + } + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._bindEvent = function() { + + 'use strict'; + + var $input = this.$input; + + $input.rebind('focus.underlinedText', function() { + $(this).parent().addClass('active'); + }); + + $input.rebind('blur.underlinedText change.underlinedText', function() { + + var $this = $(this); + + if ($this.val()) { + $this.parent().addClass('valued'); + } + else { + $this.parent().removeClass('valued'); + } + $this.parent().removeClass('active'); + }); + + // Hide error upon input changes + var self = this; + + if (!$input.hasClass('strengthChecker')) { + $input.rebind('input.underlinedText', function() { + self.hideError(); + }); + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._updateShowHideErrorAndMessage = function() { + + 'use strict'; + + /** + * Text input - show red colored error on bottom of the underline. + * + * @param {String} msg - Massage to show. + */ + this.showError = function(msg) { + + if (typeof this.options.onShowError === 'function') { + this.options.onShowError(msg); + } + else { + var $wrapper = this.$input.parent(); + + this.$input.addClass('errored'); + $wrapper.addClass('error'); + + this.showMessage(msg); + } + }; + + /** + * Text input - show gray colored message on bottom of the underline. + * + * @param {String} msg - Massage to show. + * @param {Boolean} fix - Fix message, the message will not disappear. + * @returns {Void} + */ + this.showMessage = function(msg, fix) { + + if (typeof this.options.onShowMessage === 'function') { + this.options.onShowMessage(msg); + } + else if (msg) { + var $wrapper = this.$input.parent(); + var $msgContainer = $wrapper.find('.message-container'); + var extraSpace = 9; + + if (fix) { + $wrapper.addClass('fix-msg'); + this.fixMessage = msg; + extraSpace = 4; + } + + $wrapper.addClass('msg'); + $msgContainer.safeHTML(msg); + if (this.origBotSpace === undefined) { + this.origBotSpace = this.origBotSpace || parseInt($wrapper.css('margin-bottom')); + } + + $wrapper.css('margin-bottom', this.origBotSpace + $msgContainer.outerHeight() + extraSpace); + } + }; + + /** + * Text input - hide error or message. + */ + this.hideError = this.hideMessage = function(force) { + + if (typeof this.options.onHideError === 'function') { + this.options.onHideError(); + } + else { + var $wrapper = this.$input.parent(); + + this.$input.removeClass('errored'); + $wrapper.removeClass('error'); + + if ($wrapper.hasClass('fix-msg') && !force) { + this.showMessage(this.fixMessage); + } + else { + $wrapper.removeClass('msg').removeClass('fix-msg'); + $wrapper.css('margin-bottom', ''); + } + } + }; + + // Hide all error upon reinitialize + this.hideError(); +}; + +mega.ui.MegaInputs.prototype.underlinedText._halfSize = function() { + + 'use strict'; + + var $input = this.$input; + var $wrapper = this.$wrapper; + + if ($input.hasClass('halfSize-l')) { + $wrapper.addClass('halfSize-l'); + } + + if ($input.hasClass('halfSize-r')) { + $wrapper.addClass('halfSize-r'); + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._withIconOrPrefix = function() { + + 'use strict'; + + var $input = this.$input; + var $wrapper = this.$wrapper; + + if (this.type === 'password') { + + $wrapper.safeAppend(''); + + $('.pass-visible', $wrapper).rebind('click.togglePassV', function() { + + if (this.classList.contains('icon-eye-reveal')) { + + $input.attr('type', 'text'); + this.classList.remove('icon-eye-reveal'); + this.classList.add('icon-eye-hidden'); + } + else { + $input.attr('type', 'password'); + this.classList.add('icon-eye-reveal'); + this.classList.remove('icon-eye-hidden'); + } + }); + } + + if ($input.data('icon')) { + $wrapper.addClass('with-icon'); + $wrapper.safePrepend(``); + } + else if ($input.data('prefix')) { + $wrapper.addClass('with-icon'); + $wrapper.safePrepend(`${$input.data('prefix')}`); + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._strengthChecker = function() { + + 'use strict'; + + var $input = this.$input; + var $wrapper = this.$wrapper; + var self = this; + + if (this.type === 'password' && $input.hasClass('strengthChecker')) { + + // Strength wording + $wrapper.safeAppend(''); + + // Strength Bar + $wrapper.safeAppend(''); + + // Loading icon for zxcvbn. + $wrapper.safeAppend('
              ' + + '' + + '
              '); + + var _bindStrengthChecker = function() { + + // Hide loading icon + $wrapper.removeClass('loading'); + + $input.rebind('keyup.strengthChecker input.strengthChecker change.strengthChecker', function(e) { + + if (e.keyCode === 13) { + return false; + } + + self.hideError(); + + var $passStatus = $wrapper.find('.password-status'); + var $passStatusBar = $wrapper.find('.account-pass-lines'); + + $passStatus.add($passStatusBar).removeClass('good1 good2 good3 good4 good5 checked'); + + var strength = classifyPassword($(this).val()); + + if (typeof strength === 'object') { + + $passStatus.addClass(strength.className + ' checked').text(strength.string1); + $input.data('MegaInputs').showMessage(strength.string2); + + $passStatusBar.addClass(strength.className); + } + else { + $input.data('MegaInputs').hideMessage(); + } + }); + + // Show strength upon zxcvbn loading is finished or Reset strength after re-rendering. + $input.trigger('input.strengthChecker'); + }; + + if (typeof zxcvbn === 'undefined') { + + // Show loading icon + $wrapper.addClass('loading'); + M.require('zxcvbn_js').done(_bindStrengthChecker); + } + else { + _bindStrengthChecker(); + } + + $wrapper.addClass('strengthChecker'); + } +}; + +mega.ui.MegaInputs.prototype.underlinedText._extendedFunctions = function() { + + 'use strict'; + + /** + * Update title after MegaInput is already inited, if a title exists. + * The title can be passed as parameter + * or simply update title or placeholder on the input and call this will update title. + * + * @param {String} [title] - New title. + */ + this.updateTitle = function(title) { + const $titleElem = $('.mega-input-title', this.$input.parent()); + + if ($titleElem) { + title = title || this.$input.attr('title') || this.$input.attr('placeholder'); + + // Note: This should remain as text() as some place use third party pulling text as title. + $titleElem.text(title); + } + }; + + /** + * Update value of the input, with or without titletop animation. + * + * @param {String} [value] - New value. + * @param {Boolean} [noAnimation] - Show animation or not. + */ + this.setValue = function(value, noAnimation) { + + var self = this; + + if (noAnimation) { + this.$input.prev().addClass('no-trans'); + } + + this.hideError(); + mega.ui.MegaInputs.prototype.setValue.call(this, value); + + onIdle(function() { + self.$input.prev().removeClass('no-trans'); + }); + }; +}; + +/* + * Currency input + * + * Please refer to Megainput Core instruction to learn basic usage. + * + * Class: `currencyField` + * Example: `` + */ +mega.ui.MegaInputs.prototype.currencyField = function() { + 'use strict'; + + if (!this.$input.hasClass('megaInputs')) { + + this.currencyField._init.call(this); + this.currencyField._bindEvent.call(this); + + // Dedicate functions + this.currencyField._extendedFunctions.call(this); + } +}; + +mega.ui.MegaInputs.prototype.currencyField._init = function() { + + 'use strict'; + + // Wrap it with another div for styling and animation + this.$input.wrap(`
              `); + + const $wrapper = this.$wrapper = this.$input.closest(`.mega-input`); + + // Hide wrapper if input has hidden class + if (this.$input.hasClass('hidden')) { + $wrapper.addClass('hidden'); + this.$input.removeClass('hidden'); + } + + // Insert error message block + $wrapper.safeAppend('
              '); + + // Add some class to wrapper + if (this.$input.data('wrapper-class')) { + $wrapper.addClass(this.$input.data('wrapper-class')); + } + + // With icon or prefix (e.g. currency) + this.currencyField._withIconOrPrefix.call(this); + + // Prepare the currency input + if (formatCurrency(1111.11, 'EUR', 'number').indexOf(',') >= 4) { + + this.type = 'text'; + this.$input.removeAttr('step'); + } + else { + this.type = 'number'; + this.$input.attr('step', 'any'); + } + + this.$input.attr('type', this.type); +}; + +mega.ui.MegaInputs.prototype.currencyField._bindEvent = function() { + + 'use strict'; + + this.$input.rebind('focus.currencyField', function() { + $(this).parent().addClass('active'); + }); + + this.$input.rebind('blur.currencyField change.currencyField', function() { + const $this = $(this); + + if ($this.val()) { + $this.parent().addClass('valued'); + } + else { + $this.parent().removeClass('valued'); + } + $this.parent().removeClass('active'); + }); + + this.$input.off('keydown.currencyField'); + + if (this.type === 'text') { + + this.$input.rebind('keydown.currencyField', e => { + + // Valid keys 0-9/keypad 0-9/,/./decimal point/space/left arrow/right arrow/delete/backspace/tab/shift + if (![8, 9, 16, 32, 37, 39, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110, 188, 190].includes(e.keyCode)) { + return false; + } + }); + } +}; + +mega.ui.MegaInputs.prototype.currencyField._withIconOrPrefix = function() { + + 'use strict'; + + var {$input, $wrapper} = this; + + if ($input.data('icon')) { + $wrapper.addClass('with-icon'); + $wrapper.safePrepend(``); + } + else if ($input.data('prefix')) { + $wrapper.addClass('with-icon'); + $wrapper.safePrepend(`${$input.data('prefix')}`); + } +}; + +mega.ui.MegaInputs.prototype.currencyField._extendedFunctions = function() { + + 'use strict'; + + this.getValue = function() { + + let val = this.$input.val(); + + if (this.type === 'text') { + + const matches = val.match(/([,.])\d*$/); + let cents = 0; + + if (matches) { + + cents = parseInt(matches[0].slice(1)); + + if (isNaN(cents)) { + cents = 0; + } + else { + let centLength = matches[0].slice(1).length; + + if (centLength === 1) { + + ++centLength; + cents *= 10; + } + + let decimal = centLength - 2; + + while (decimal > 0) { + cents *= 0.1; + decimal--; + } + + cents = Math.round(cents); + } + + val = val.slice(0, val.length - matches[0].length); + } + + val = parseInt(val.replace(/\D/g, '')); + + if (isNaN(val)) { + return 0; + } + + return val + cents * 0.01; + } + + return val; + }; +}; + +/** + * Developer Settings Page Logic. + */ +(function(scope) { + 'use strict'; + + scope.developerSettings = { + $page: null, + + /** Init Developer Settings Page. */ + init: function() { + this.$page = $('.bottom-page.developer-settings'); + this.initSettings(); + this.initApplyButton(); + }, + + /** Show Developer Setting Page. */ + show: function() { + parsepage(pages['developersettings']); + topmenuUI(); + this.init(); + }, + + /** Reload to apply changes. **/ + apply: function() { + window.location.reload(); + }, + + /** Init HTML defined setting controls **/ + initSettings: function() { + var $localStorageSettings = this.$page.find('.developer-setting.localstorage'); + + // Load in current settings. + $localStorageSettings.each(function() { + var $this = $(this); + $this.val(localStorage.getItem($this.attr('name')) || null); + }); + + // Change event save setting to local storage. + $localStorageSettings.rebind('change', function() { + var $this = $(this); + var itemKey = $this.attr('name'); + var val = $this.val(); + if (val) { + localStorage.setItem(itemKey, val); + } else { + localStorage.removeItem(itemKey); + } + }); + }, + + /** Init the page reload button **/ + initApplyButton: function() { + var self = this; + this.$page.find('.apply').rebind('click', function() { + self.apply(); + }); + } + }; + +})(mega); + +function RepayPage() { + "use strict"; + this.noOverduePaymentErrorCode = -1; + this.unknownErrorCode = -99; +} + +RepayPage.prototype.initPage = function() { + "use strict"; + + // if mobile we view the related header for top-mobile.html and hide navigation div of desktop + if (is_mobile) { + $('.mobile.bus-repay').removeClass('hidden'); + $('.mobile.fm-header').addClass('hidden'); + $('.mobile.fm-header.fm-hr').removeClass('hidden'); + } + + // If u_attr not set, or + // If Business account and (not the master Business account, or not expired or in grace period), or + // If Pro Flexi account and (not expired or in grace period) + if (!u_attr || + (u_attr.b && (!u_attr.b.m || !pro.isExpiredOrInGracePeriod(u_attr.b.s))) || + (u_attr.pf && !pro.isExpiredOrInGracePeriod(u_attr.pf.s))) { + + loadSubPage('start'); + return; + } + + if (!u_attr.email || isEphemeral()) { + return loadSubPage('registerb'); + } + + + var mySelf = this; + + loadingDialog.show(); + + // If necessary attributes are not loaded, load them then comeback. + if (!u_attr.pf && (!u_attr['%name'] || !u_attr['%email'])) { + + Promise.allSettled([ + u_attr['%name'] ? Promise.resolve({ v: u_attr['%name'] }) : mega.attr.get(u_attr.b.bu, '%name', -1), + u_attr['%email'] ? Promise.resolve({ v: u_attr['%email'] }) : mega.attr.get(u_attr.b.bu, '%email', -1) + ]).then((result) => { + // To reduce complexity of encapsulating all of below code inside the "then" handler. + if (result[0].status === 'fulfilled') { + u_attr['%name'] = result[0].value.v || from8(base64urldecode(result[0].value)); + } + if (result[1].status === 'fulfilled') { + u_attr['%email'] = result[1].value.v || from8(base64urldecode(result[1].value)); + } + mySelf.initPage(); + }); + return false; + } + + const $repaySection = $('.main-mid-pad.bus-repay'); + const $leftSection = $('.main-left-block', $repaySection); + const $rightSection = $('.main-right-block', $repaySection); + const $paymentBlock = $('.bus-reg-radio-block', $leftSection); + + const $repayBtn = $('.repay-btn', $repaySection).addClass('disabled'); + const $revertToFreeBtn = $('.revert-to-free-btn', $repaySection); + + $('.bus-reg-agreement.mega-terms .bus-reg-txt', $leftSection).safeHTML(l['208s']); + + // If Pro Flexi, show the icon and text + if (u_attr.pf) { + $('.plan-icon', $rightSection) + .removeClass('icon-crests-business-details') + .addClass('icon-crests-pro-flexi-details'); + $('.business-plan-title', $rightSection).text(l.pro_flexi_name); + $('.bus-reg-agreement.ok-to-auto .radio-txt', $leftSection).text(l.setup_monthly_payment_pro_flexi); + $('.dialog-subtitle', $repaySection).text(l.reactivate_pro_flexi_subscription); + + // Show the 'Revert to free account' button and add click handler for it + $revertToFreeBtn.removeClass('hidden'); + $revertToFreeBtn.rebind('click.revert', () => { + + const title = l.revert_to_free_confirmation_question; + const message = l.revert_to_free_confirmation_info; + + if (is_mobile) { + parsepage(pages.mobile); + } + + msgDialog('confirmation', '', title, message, (e) => { + if (e) { + loadingDialog.show(); + + // Downgrade the user to Free + M.req({ a: 'urpf', r: 1 }) + .catch(dump) + .finally(() => { + + // Reset account cache so all account data will be refetched + if (M.account) { + M.account.lastupdate = 0; + } + + loadSubPage('fm/account/plan'); + }); + } + else if (is_mobile) { + + // Close button for mobile we need to reload as loadSubPage on the same page doesn't work + location.reload(); + } + }); + }); + } + + // event handler for repay button + $repayBtn.rebind('click', function repayButtonHandler() { + if ($(this).hasClass('disabled')) { + return false; + } + + if (is_mobile) { + parsepage(pages.mobile); + } + + const $selectedProvider = $('.bus-reg-radio-option .bus-reg-radio.radioOn', $repaySection); + + mySelf.planInfo.usedGatewayId = $selectedProvider.attr('prov-id'); + mySelf.planInfo.usedGateName = $selectedProvider.attr('gate-n'); + + addressDialog.init(mySelf.planInfo, mySelf.userInfo, new BusinessRegister()); + return false; + }); + + // event handler for radio buttons + $('.bus-reg-radio-option', $paymentBlock) + .rebind('click.suba', function businessRepayCheckboxClick() { + var $me = $(this); + $me = $('.bus-reg-radio', $me); + if ($me.hasClass('radioOn')) { + return; + } + $('.bus-reg-radio', $paymentBlock).removeClass('radioOn').addClass('radioOff'); + $me.removeClass('radioOff').addClass('radioOn'); + }); + + + // event handler for clicking on terms anchor + $('.bus-reg-agreement.mega-terms .radio-txt a', $leftSection) + .rebind('click', function termsClickHandler() { + if (!is_mobile) { + bottomPageDialog(false, 'terms', false, true); + } + else { + var wentOut = false; + if (window.open) { + var cutPlace = location.href.indexOf('/registerb'); + var myHost = location.href.substr(0, cutPlace); + myHost += '/terms'; + wentOut = window.open(myHost, 'MEGA LIMITED TERMS OF SERVICE'); + } + if (!wentOut) { + loadSubPage('terms'); + } + } + return false; + }); + + $('.bus-reg-agreement.mega-terms .checkdiv', $leftSection) + .removeClass('checkboxOn').addClass('checkboxOff'); + + // event handler for check box + $('.bus-reg-agreement', $leftSection).rebind( + 'click.suba', + function businessRepayCheckboxClick() { + var $me = $('.checkdiv', $(this)); + if ($me.hasClass('checkboxOn')) { + $me.removeClass('checkboxOn').addClass('checkboxOff'); + $repayBtn.addClass('disabled'); + } + else { + $me.removeClass('checkboxOff').addClass('checkboxOn'); + if ($('.bus-reg-agreement .checkdiv.checkboxOn', $leftSection).length === 2) { + $repayBtn.removeClass('disabled'); + } + else { + $repayBtn.addClass('disabled'); + } + } + }); + + const fillPaymentGateways = function(status, list) { + + const failureExit = msg => { + loadingDialog.hide(); + msgDialog('warninga', '', msg || l[19342], '', loadSubPage.bind(null, 'start')); + }; + + if (!status) { // failed result from API + return failureExit(); + } + + // clear the payment block + const $paymentBlock = $('.bus-reg-radio-block', $repaySection).empty(); + + const icons = { + ecpVI: 'sprite-fm-uni icon-visa-border', + ecpMC: 'sprite-fm-uni icon-mastercard-border', + Stripe2: 'sprite-fm-theme icon-stripe', + stripeVI: 'sprite-fm-uni icon-visa-border', + stripeMC: 'sprite-fm-uni icon-mastercard-border', + stripeAE: 'sprite-fm-uni icon-amex', + stripeJC: 'sprite-fm-uni icon-jcb', + stripeUP: 'sprite-fm-uni icon-union-pay', + stripeDD: 'provider-icon stripeDD' + }; + + const radioHtml = '
              ' + + '
              '; + const textHtml = '
              [x]
              '; + const iconHtml = `
              + +
              `; + + if (!list.length) { + return failureExit(l[20431]); + } + + let paymentGatewayToAdd = ''; + for (let k = 0; k < list.length; k++) { + const payRadio = radioHtml.replace('[x]', list[k].gatewayName).replace('[Y]', list[k].gatewayId). + replace('[Z]', list[k].gatewayName); + const payText = textHtml.replace('[x]', list[k].displayName); + const payIcon = iconHtml.replace('[x]', icons[list[k].gatewayName]); + paymentGatewayToAdd += payRadio + payText + payIcon; + } + if (paymentGatewayToAdd) { + $paymentBlock.safeAppend(paymentGatewayToAdd); + } + + // setting the first payment provider as chosen + $('.bus-reg-radio-block .bus-reg-radio', $repaySection).first().removeClass('radioOff') + .addClass('radioOn'); + + // event handler for radio buttons + $('.bus-reg-radio-option', $paymentBlock) + .rebind('click.suba', function businessRegCheckboxClick() { + const $me = $('.bus-reg-radio', $(this)); + if ($me.hasClass('radioOn')) { + return; + } + $('.bus-reg-radio', $paymentBlock).removeClass('radioOn').addClass('radioOff'); + $me.removeClass('radioOff').addClass('radioOn'); + }); + + // view the page + loadingDialog.hide(); + $repaySection.removeClass('hidden'); + }; + + M.require('businessAcc_js').done(function() { + var business = new BusinessAccount(); + var overduePromise = business.getOverduePayments(); + + var failHandler = function(st, res) { + var msg = l[20671]; + var title = l[6859]; + if (res !== mySelf.noOverduePaymentErrorCode) { + msg = l[20672]; + title = l[1578]; + } + msgDialog('warninga', title, msg, '', function() { + loadingDialog.hide(); + loadSubPage(''); + }); + }; + + overduePromise.fail(failHandler); + + overduePromise.done(function(st, res) { + // validations of API response + if (st !== 1 || !res || !res.t || !res.inv || !res.inv.length) { + return failHandler(0, mySelf.unknownErrorCode); + } + + const mIntl = mega.intl; + const intl = mIntl.number; + const sep = mIntl.decimalSeparator; + + const applyFormat = (val) => { + if (sep !== res.l.sp[0]) { + const reg1 = new RegExp(`\\${sep}`, 'g'); + const reg2 = new RegExp(`\\${res.l.sp[1]}`, 'g'); + val = val.replace(reg1, '-') + .replace(reg2, res.l.sp[0]) + .replace(/-/g, res.l.sp[1]); + } + + val = res.l.pl ? `${res.l.cs}${val}` + : `${val}${res.l.cs}`; + + return val; + }; + + // Debug... + if (d && localStorage.debugNewPrice) { + res.nb = 7; // nb of users + res.nbdu = 3; // deactivated billed users + res.nbt = 2; // extra transfer blocks + res.nbs = 1; // extra storage blocks + res.lt = 104; // local price for total + res.let = 71.5; // local price of expired amount + res.t = 80; // total in euros + res.et = 55; + res.list = { 'u': [3, 15, 19.5], 's': [1, 2.5, 3.23], 't': [1, 2.5, 3.23] }; + res.inv[0].nb = 4; + res.inv[0].nbt = 1; // extra transfer blocks + res.inv[0].nbs = 1; // extra storage blocks + res.inv[0].nbdu = 1; // deactivated billed users + res.inv[0].v = 1; // version + res.inv[0].list = { 'u': [4, 20, 26.1], 's': [1, 2.5, 3.23], 't': [1, 2.5, 3.23] }; + res.inv[0].lp = 32.56; + res.inv[0].tot = 25; + res.inv[0].d = 'ABC Limited'; // company + + res.l = { // (NEW FIELD) + "cs": "$", // currency symbol + "n": "NZD", // currency name + "sp": [".", ","], // decimal and thousands separator + "pl": 1 // 1=currency symbol before number, 0=after + }; + } + // end of Debug + + let futureAmount = res.et && `${intl.format(res.et)} \u20ac`; + let totalAmount = res.t && `${intl.format(res.t)} \u20ac`; + let dueAmount = res.inv[0].tot && `${intl.format(res.inv[0].tot)} \u20ac`; + + const $rightBlock = $('.main-right-block', $repaySection); + + // check if we have V1 (new version) of bills + if (typeof res.nbdu !== 'undefined' && res.inv[0].v) { + let localPrice = false; + if (res.let) { + futureAmount = applyFormat(intl.format(res.let)); + localPrice = true; + } + if (res.lt) { + totalAmount = applyFormat(intl.format(res.lt)); + localPrice = true; + } + if (res.inv && res.inv[0] && res.inv[0].lp) { + dueAmount = applyFormat(intl.format(res.inv[0].lp)); + localPrice = true; + } + if (localPrice) { + $('.repay-breakdown-footer', $rightBlock).removeClass('hidden'); + } + } + + + if (!totalAmount || !dueAmount) { + console.error(`Fatal error in invoice, we dont have essential attributes ${JSON.stringify(res)}`); + return failHandler(0, mySelf.unknownErrorCode); + } + + const showDetails = function() { + const $me = $(this); + if ($me.hasClass('expand')) { + $me.removeClass('expand'); + $me.nextUntil('.repay-breakdown-tb-content, .repay-breakdown-tb-total', '.repay-extra-details') + .removeClass('expand'); + $('.content-desc-container', $me).removeClass('icon-arrow-up-after') + .addClass('icon-arrow-down-after'); + } + else { + $me.addClass('expand'); + $me.nextUntil('.repay-breakdown-tb-content, .repay-breakdown-tb-total', '.repay-extra-details') + .addClass('expand'); + $('.content-desc-container', $me).removeClass('icon-arrow-down-after') + .addClass('icon-arrow-up-after'); + } + }; + + var nbOfUsers = 3; // fallback to static value + + var $overduePaymentRow = $('.repay-breakdown-tb-content', $rightBlock); + var $overduePaymentHeader = $('.repay-breakdown-tb-header', $rightBlock); + + if ($overduePaymentRow.length > 1) { + var $rowBk = $($overduePaymentRow[0]).clone(); + $overduePaymentRow.remove(); + $rowBk.insertAfter($overduePaymentHeader); + $overduePaymentRow = $rowBk; + } + + var rowTemplate = $overduePaymentRow.clone(); + + var $overdueExtraRow = $('tr.repay-extra-details', $rightBlock); + const $extraRowTemplate = $overdueExtraRow.length > 1 ? $($overdueExtraRow[0]).clone() + : $overdueExtraRow.clone(); + $overdueExtraRow.remove(); + + // adding due invoice row + nbOfUsers = res.inv[0].nb; + + $('.content-desc', $overduePaymentRow).text(u_attr['%name'] || ' '); + $('.content-date', $overduePaymentRow).text(time2date(res.inv[0].ts, 1)); + $('.content-amou', $overduePaymentRow).text(dueAmount); + + const addDetailsRow = ($template, text, item, $parent) => { + if (item && item[0] && item[1] && text && $template && $parent) { + const $row = $template.clone(); + $('.repay-extra-desc', $row).text(mega.icu.isICUPlural(text) + ? mega.icu.format(text, item[0]) : text.replace('%1', item[0])); + $('.repay-extra-val', $row).text(item[2] ? applyFormat(intl.format(item[2])) + : `${intl.format(item[1])} \u20ac`); + $row.insertAfter($parent); + } + }; + + if (res.inv[0].list) { + addDetailsRow($extraRowTemplate, l.additional_transfer, res.inv[0].list.t, $overduePaymentRow); + addDetailsRow($extraRowTemplate, l.additional_storage, res.inv[0].list.s, $overduePaymentRow); + + // If Pro Flexi, expand any rows by default, hide arrows and don't make clickable + if (u_attr.pf) { + $overduePaymentRow.addClass('expand'); + $overduePaymentRow + .nextUntil('.repay-breakdown-tb-content, .repay-breakdown-tb-total', '.repay-extra-details') + .addClass('expand'); + $('.content-desc-container', $overduePaymentRow) + .removeClass('icon-arrow-down-after icon-arrow-up-after'); + } + else { + // For Business, add a users row and make the row clickable + addDetailsRow($extraRowTemplate, l.users_unit, res.inv[0].list.u, $overduePaymentRow); + $overduePaymentRow.rebind('click.repay', showDetails); + } + } + + if (res.nb && futureAmount) { + const $futurePaymentRow = rowTemplate.clone(); + nbOfUsers = res.nb; + + $('.content-desc', $futurePaymentRow).text(u_attr['%name'] || ' '); + $('.content-date', $futurePaymentRow).text(time2date(Date.now() / 1000, 1)); + $('.content-amou', $futurePaymentRow).text(futureAmount); + + $futurePaymentRow.insertAfter($overduePaymentHeader); + + addDetailsRow($extraRowTemplate, l.additional_transfer, res.list.t, $futurePaymentRow); + addDetailsRow($extraRowTemplate, l.additional_storage, res.list.s, $futurePaymentRow); + + // If Pro Flexi, expand any rows by default, hide arrows and don't make clickable + if (u_attr.pf) { + $futurePaymentRow.addClass('expand'); + $futurePaymentRow + .nextUntil('.repay-breakdown-tb-content, .repay-breakdown-tb-total', '.repay-extra-details') + .addClass('expand'); + $('.content-desc-container', $futurePaymentRow) + .removeClass('icon-arrow-down-after icon-arrow-up-after'); + } + else { + // For Business, add a users row and make the row clickable + addDetailsRow($extraRowTemplate, l.users_unit, res.list.u, $futurePaymentRow); + $futurePaymentRow.rebind('click.repay', showDetails); + } + } + + $('.repay-td-total', $rightBlock).text(totalAmount); + + // If Pro Flexi, don't show the Account information section, also hide billing description row header + if (u_attr.pf) { + $('.js-account-info-section', $leftSection).addClass('hidden'); + $('.js-repay-header-description', $overduePaymentHeader).text(''); + } + + $('#repay-business-cname', $leftSection).text(u_attr['%name']); + $('#repay-business-email', $leftSection).text(u_attr['%email']); + + let nbUsersText = mega.icu.format(l.users_unit, nbOfUsers); + if (res.nbdu) { + const activeUsers = nbOfUsers - res.nbdu; + const inactiveUsersString = mega.icu.format(l.inactive_users_detail, res.nbdu); + nbUsersText += ` ${mega.icu.format(l.users_detail, activeUsers).replace('[X]', inactiveUsersString)}`; + $('.repay-nb-users-info', $leftSection).removeClass('hidden'); + } + $('#repay-business-nb-users', $leftSection).text(nbUsersText); + + business.getListOfPaymentGateways(false).always(fillPaymentGateways); + + // Change to the getProFlexiPlanInfo function if we are Pro Flexi + if (u_attr && u_attr.pf) { + business.getProFlexiPlanInfo().then(function planInfoReceived(st, info) { + mySelf.planInfo = info; + mySelf.planInfo.pastInvoice = res.inv[0]; + mySelf.planInfo.currInvoice = { et: res.et || 0, t: res.t }; + mySelf.userInfo = { + fname: '', + lname: '', + nbOfUsers: res.nb || 0 + }; + }); + } + else { + business.getBusinessPlanInfo(false).done(function planInfoReceived(st, info) { + mySelf.planInfo = info; + mySelf.planInfo.pastInvoice = res.inv[0]; + mySelf.planInfo.currInvoice = { et: res.et || 0, t: res.t }; + mySelf.userInfo = { + fname: '', + lname: '', + nbOfUsers: res.nb || 0 + }; + }); + } + }); + }); +}; diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E61B8F7BC883AA689924CBBEE4D6DAA9FB66C2EA b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E61B8F7BC883AA689924CBBEE4D6DAA9FB66C2EA new file mode 100644 index 0000000..99be274 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E61B8F7BC883AA689924CBBEE4D6DAA9FB66C2EA differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E61B8F7BC883AA689924CBBEE4D6DAA9FB66C2EA-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E61B8F7BC883AA689924CBBEE4D6DAA9FB66C2EA-blob new file mode 100644 index 0000000..f023a6e --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E61B8F7BC883AA689924CBBEE4D6DAA9FB66C2EA-blob @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["github-elements"],{89912(a,b,c){c(62467),c(38257),c(14840),c(57260),c(13002),c(73921);var d=c(27034);c(51941),c(88309),c(40987),c(57852),c(88823),window.IncludeFragmentElement.prototype.fetch=a=>(a.headers.append("X-Requested-With","XMLHttpRequest"),window.fetch(a)),c(97895);var e=c(76006),f=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let g=class GitCloneHelpElement extends HTMLElement{updateURL(a){let b=a.currentTarget,c=b.getAttribute("data-url")||"";if(this.helpField.value=c,b.matches(".js-git-protocol-clone-url"))for(let d of this.helpTexts)d.textContent=c;for(let e of this.cloneURLButtons)e.classList.remove("selected");b.classList.add("selected")}};function h(a,b,c){if(!b.has(a))throw TypeError("attempted to "+c+" private field on non-instance");return b.get(a)}function i(a,b){var c,d,e=h(a,b,"get");return c=a,(d=e).get?d.get.call(c):d.value}function j(a,b,c){!function(a,b){if(b.has(a))throw TypeError("Cannot initialize the same private elements twice on an object")}(a,b),b.set(a,c)}function k(a,b,c){var d=h(a,b,"set");return!function(a,b,c){if(b.set)b.set.call(a,c);else{if(!b.writable)throw TypeError("attempted to set read only private field");b.value=c}}(a,d,c),c}function l(a,b){let c=[],d=0;for(let e=0;ethis.handleEvent()))}handleEvent(){i(this,p)&&cancelAnimationFrame(i(this,p)),k(this,p,requestAnimationFrame(()=>this.mark()))}disconnectedCallback(){this.ownerInput?.removeEventListener("input",this),i(this,o).disconnect()}mark(){let a=this.textContent||"",b=this.query;if(a===i(this,m)&&b===i(this,n))return;k(this,m,a),k(this,n,b),i(this,o).disconnect();let c=0,d=document.createDocumentFragment();for(let e of(this.positions||l)(b,a)){if(Number(e)!==e||ea.length)continue;let f=a.slice(c,e);""!==f&&d.appendChild(document.createTextNode(a.slice(c,e))),c=e+1;let g=document.createElement("mark");g.textContent=a[e],d.appendChild(g)}d.appendChild(document.createTextNode(a.slice(c))),this.replaceChildren(d),i(this,o).observe(this,{attributes:!0,childList:!0,subtree:!0})}constructor(...a){super(...a),j(this,m,{writable:!0,value:""}),j(this,n,{writable:!0,value:""}),j(this,o,{writable:!0,value:void 0}),j(this,p,{writable:!0,value:void 0})}};q.observedAttributes=["query","data-owner-input"],window.customElements.get("marked-text")||(window.MarkedTextElement=q,window.customElements.define("marked-text",q));var r=c(81775);let s=class PasswordStrengthElement extends HTMLElement{connectedCallback(){this.addEventListener("input",t)}disconnectedCallback(){this.removeEventListener("input",t)}};function t(a){let b=a.currentTarget;if(!(b instanceof s))return;let c=a.target;if(!(c instanceof HTMLInputElement))return;let d=c.form;if(!(d instanceof HTMLFormElement))return;let e=u(c.value,{minimumCharacterCount:Number(b.getAttribute("minimum-character-count")),passphraseLength:Number(b.getAttribute("passphrase-length"))});if(e.valid){c.setCustomValidity("");let f=b.querySelector("dl.form-group");f&&(f.classList.remove("errored"),f.classList.add("successed"))}else c.setCustomValidity(b.getAttribute("invalid-message")||"Invalid");v(b,e),(0,r.G)(d)}function u(a,b){let c={valid:!1,hasMinimumCharacterCount:a.length>=b.minimumCharacterCount,hasMinimumPassphraseLength:0!==b.passphraseLength&&a.length>=b.passphraseLength,hasLowerCase:/[a-z]/.test(a),hasNumber:/\d/.test(a)};return c.valid=c.hasMinimumPassphraseLength||c.hasMinimumCharacterCount&&c.hasLowerCase&&c.hasNumber,c}function v(a,b){let c=a.querySelector("[data-more-than-n-chars]"),d=a.querySelector("[data-min-chars]"),e=a.querySelector("[data-number-requirement]"),f=a.querySelector("[data-letter-requirement]"),g=a.getAttribute("error-class")?.split(" ").filter(a=>a.length>0)||[],h=a.getAttribute("pass-class")?.split(" ").filter(a=>a.length>0)||[];for(let i of[c,d,e,f])i?.classList.remove(...g,...h);if(b.hasMinimumPassphraseLength&&c)c.classList.add(...h);else if(b.valid)d.classList.add(...h),e.classList.add(...h),f.classList.add(...h);else{let j=b.hasMinimumCharacterCount?h:g,k=b.hasNumber?h:g,l=b.hasLowerCase?h:g;c?.classList.add(...g),d.classList.add(...j),e.classList.add(...k),f.classList.add(...l)}}window.customElements.get("password-strength")||(window.PasswordStrengthElement=s,window.customElements.define("password-strength",s)),c(87551);var w=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let x=class PollIncludeFragmentElement extends d.Z{async fetch(a,b=1e3){let c=await super.fetch(a);return 202===c.status?(await new Promise(a=>setTimeout(a,b)),this.fetch(a,1.5*b)):c}connectedCallback(){super.connectedCallback(),this.retryButton&&this.retryButton.addEventListener("click",()=>{this.refetch()})}};w([e.fA],x.prototype,"retryButton",void 0),x=w([e.Ih],x);var y=c(10160);let z=/\s|\(|\[/;function A(a,b,c){let d=a.lastIndexOf(b,c-1);if(-1===d)return;let e=a.lastIndexOf(" ",c-1);if(e>d)return;let f=a.lastIndexOf("\n",c-1);if(f>d)return;let g=a[d-1];if(g&&!z.test(g))return;let h=a.substring(d+b.length,c);return{word:h,position:d+b.length,beginningOfLine:B(g)}}let B=a=>void 0===a||/\n/.test(a),C=["position:absolute;","overflow:auto;","word-wrap:break-word;","top:0px;","left:-9999px;"],D=["box-sizing","font-family","font-size","font-style","font-variant","font-weight","height","letter-spacing","line-height","max-height","min-height","padding-bottom","padding-left","padding-right","padding-top","border-bottom","border-left","border-right","border-top","text-decoration","text-indent","text-transform","width","word-spacing"],E=new WeakMap,F=new WeakMap,G=class SlashCommandExpander{destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}activate(a,b){this.input===document.activeElement&&this.setMenu(a,b)}deactivate(){let a=this.menu,b=this.combobox;return!!a&&!!b&&(this.menu=null,this.combobox=null,a.removeEventListener("combobox-commit",this.oncommit),a.removeEventListener("mousedown",this.onmousedown),b.destroy(),a.remove(),!0)}setMenu(a,b){this.deactivate(),this.menu=b,b.id||(b.id=`text-expander-${Math.floor(1e5*Math.random()).toString()}`),this.expander.append(b);let c=b.querySelector(".js-command-list-container");c?this.combobox=new y.Z(this.input,c):this.combobox=new y.Z(this.input,b);let{top:d,left:e}=function(a,b=a.selectionEnd){let{mirror:c,marker:d}=function(a,b){let c=a.nodeName.toLowerCase();if("textarea"!==c&&"input"!==c)throw Error("expected textField to a textarea or input");let d=E.get(a);if(d&&d.parentElement===a.parentElement)d.textContent="";else{d=document.createElement("div"),E.set(a,d);let e=window.getComputedStyle(a),f=C.slice(0);"textarea"===c?f.push("white-space:pre-wrap;"):f.push("white-space:nowrap;");for(let g=0,h=D.length;g{c.remove()},5e3),{top:f.top-e.top,left:f.left-e.left}}(this.input,a.position),f=parseInt(window.getComputedStyle(this.input).fontSize);b.style.top=`${d+f}px`,b.style.left=`${e}px`,this.combobox.start(),b.addEventListener("combobox-commit",this.oncommit),b.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1)}setValue(a){if(null==a)return;let b=this.match;if(!b)return;let{cursor:c,value:d}=this.replaceCursorMark(a);d=d?.length===0?d:`${d} `;let e=b.position-b.key.length,f=b.position+b.text.length;this.input.focus();let g=!1;try{this.input.setSelectionRange(e,f),g=document.execCommand("insertText",!1,d)}catch(h){g=!1}if(!g){let i=this.input.value.substring(0,b.position-b.key.length),j=this.input.value.substring(b.position+b.text.length);this.input.value=i+d+j}this.deactivate(),c=e+(c||d.length),this.input.selectionStart=c,this.input.selectionEnd=c}replaceCursorMark(a){let b=/%cursor%/gm,c=b.exec(a);return c?{cursor:c.index,value:a.replace(b,"")}:{cursor:null,value:a}}async onCommit({target:a}){let b=a;if(!(b instanceof HTMLElement)||!this.combobox)return;let d=this.match;if(!d)return;let e={item:b,key:d.key,value:null},f=new CustomEvent("text-expander-value",{cancelable:!0,detail:e}),g=!this.expander.dispatchEvent(f),{onValue:h}=await c.e("app_assets_modules_github_slash-command-expander-element_slash-command-suggester_ts").then(c.bind(c,72564));await h(this.expander,d.key,b),!g&&e.value&&this.setValue(e.value)}onBlur(){if(this.interactingWithMenu){this.interactingWithMenu=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async delay(a){return new Promise(b=>setTimeout(b,a))}async onInput(){if(this.justPasted){this.justPasted=!1;return}let a=this.findMatch();if(a){if(this.match=a,await this.delay(this.appropriateDelay(this.match)),this.match!==a)return;let b=await this.notifyProviders(a);if(!this.match)return;b?this.activate(a,b):this.deactivate()}else this.match=null,this.deactivate()}appropriateDelay(a){return a.beginningOfLine?0:""!==a.text?0:250}findMatch(){let a=this.input.selectionEnd,b=this.input.value;for(let c of this.expander.keys){let d=A(b,c,a);if(d)return{text:d.word,key:c,position:d.position,beginningOfLine:d.beginningOfLine}}}async notifyProviders(a){let b=[],d=a=>b.push(a),e=new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:d,text:a.text,key:a.key}}),f=!this.expander.dispatchEvent(e);if(f)return;let{onChange:g}=await c.e("app_assets_modules_github_slash-command-expander-element_slash-command-suggester_ts").then(c.bind(c,72564));g(this.expander,a.key,d,a.text);let h=await Promise.all(b),i=h.filter(a=>a.matched).map(a=>a.fragment);return i[0]}onMousedown(){this.interactingWithMenu=!0}onKeydown(a){"Escape"===a.key&&this.deactivate()&&(a.stopImmediatePropagation(),a.preventDefault())}constructor(a,b){this.expander=a,this.input=b,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithMenu=!1,b.addEventListener("paste",this.onpaste),b.addEventListener("input",this.oninput),b.addEventListener("keydown",this.onkeydown),b.addEventListener("blur",this.onblur)}},H=class SlashCommandExpanderElement extends HTMLElement{get keys(){let a=this.getAttribute("keys");return a?a.split(" "):[]}connectedCallback(){let a=this.querySelector('input[type="text"], textarea');if(!(a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement))return;let b=new G(this,a);F.set(this,b)}disconnectedCallback(){let a=F.get(this);a&&(a.destroy(),F.delete(this))}setValue(a){let b=F.get(this);b&&b.setValue(a)}setMenu(a,b=!1){let c=F.get(this);c&&c.match&&(b&&(c.interactingWithMenu=!0),c.setMenu(c.match,a))}closeMenu(){let a=F.get(this);a&&a.setValue("")}isLoading(){let a=this.getElementsByClassName("js-slash-command-expander-loading")[0];if(a){let b=a.cloneNode(!0);b.classList.remove("d-none"),this.setMenu(b)}}showError(){let a=this.getElementsByClassName("js-slash-command-expander-error")[0];if(a){let b=a.cloneNode(!0);b.classList.remove("d-none"),this.setMenu(b)}}};window.customElements.get("slash-command-expander")||(window.SlashCommandExpanderElement=H,window.customElements.define("slash-command-expander",H));var I=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let J=class TextSuggesterElement extends HTMLElement{acceptSuggestion(){this.suggestion?.textContent&&(this.input.value=this.suggestion.textContent,this.input.dispatchEvent(new Event("input")),this.suggestionContainer&&(this.suggestionContainer.hidden=!0),this.input.focus())}};function K(a,b,c){if(!b.has(a))throw TypeError("attempted to "+c+" private field on non-instance");return b.get(a)}function L(a,b){var c,d,e=K(a,b,"get");return c=a,(d=e).get?d.get.call(c):d.value}function M(a,b,c){!function(a,b){if(b.has(a))throw TypeError("Cannot initialize the same private elements twice on an object")}(a,b),b.set(a,c)}function N(a,b,c){var d=K(a,b,"set");return!function(a,b,c){if(b.set)b.set.call(a,c);else{if(!b.writable)throw TypeError("attempted to set read only private field");b.value=c}}(a,d,c),c}I([e.fA],J.prototype,"input",void 0),I([e.fA],J.prototype,"suggestionContainer",void 0),I([e.fA],J.prototype,"suggestion",void 0),J=I([e.Ih],J);var O=new WeakMap,P=new WeakMap,Q=new WeakMap,R=new WeakMap,S=new WeakMap,T=new WeakMap;let U=class VirtualFilterInputElement extends HTMLElement{static get observedAttributes(){return["src","loading","data-property","aria-owns"]}get filtered(){if(L(this,T))return L(this,T);if(this.hasAttribute("aria-owns")){var a;let b=this.ownerDocument.getElementById(this.getAttribute("aria-owns")||"");b&&Boolean((a=b)instanceof Set||a&&"object"==typeof a&&"size"in a&&"add"in a&&"delete"in a&&"clear"in a)&&N(this,T,b)}return N(this,T,L(this,T)||new Set)}set filtered(a){N(this,T,a)}get input(){return this.querySelector("input, textarea")}get src(){return this.getAttribute("src")||""}set src(a){this.setAttribute("src",a)}get loading(){return"lazy"===this.getAttribute("loading")?"lazy":"eager"}set loading(a){this.setAttribute("loading",a)}get accept(){return this.getAttribute("accept")||""}set accept(a){this.setAttribute("accept",a)}get property(){return this.getAttribute("data-property")||""}set property(a){this.setAttribute("data-property",a)}reset(){this.filtered.clear(),N(this,S,new Set)}clear(){this.input&&(this.input.value="",this.input.dispatchEvent(new Event("input")))}attributeChangedCallback(a,b,c){let d=this.isConnected&&this.src,e="eager"===this.loading,f=b!==c;("src"===a||"data-property"===a)&&f&&(N(this,Q,null),L(this,R)&&clearTimeout(L(this,R))),d&&e&&("src"===a||"loading"===a||"accept"===a||"data-property"===a)&&f?(cancelAnimationFrame(L(this,P)),N(this,P,requestAnimationFrame(()=>this.load()))):"aria-owns"===a&&N(this,T,null)}connectedCallback(){this.src&&"eager"===this.loading&&(cancelAnimationFrame(L(this,P)),N(this,P,requestAnimationFrame(()=>this.load())));let a=this.input;if(!a)return;let b=this.getAttribute("aria-owns");null!==b&&this.attributeChangedCallback("aria-owns","",b),a.setAttribute("autocomplete","off"),a.setAttribute("spellcheck","false"),this.src&&"lazy"===this.loading&&(document.activeElement===a?this.load():a.addEventListener("focus",()=>{this.load()},{once:!0})),a.addEventListener("input",this)}disconnectedCallback(){this.input?.removeEventListener("input",this)}handleEvent(a){"input"===a.type&&(L(this,R)&&clearTimeout(L(this,R)),N(this,R,window.setTimeout(()=>this.filterItems(),(this.input?.value?.length,300))))}async load(){L(this,O)?.abort(),N(this,O,new AbortController);let{signal:a}=L(this,O);if(!this.src)throw Error("missing src");if(await new Promise(a=>setTimeout(a,0)),!a.aborted){this.dispatchEvent(new Event("loadstart"));try{let b=await this.fetch(this.request(),{signal:a,headers:{"X-Requested-With":"XMLHttpRequest"}});if(location.origin+this.src!==b.url)return;if(!b.ok)throw Error(`Failed to load resource: the server responded with a status of ${b.status}`);N(this,S,new Set((await b.json())[this.property])),N(this,Q,null),this.dispatchEvent(new Event("loadend"))}catch(c){if(a.aborted){this.dispatchEvent(new Event("loadend"));return}throw(async()=>{this.dispatchEvent(new Event("error")),this.dispatchEvent(new Event("loadend"))})(),c}this.filtered.clear(),this.filterItems()}}request(){return new Request(this.src,{method:"GET",credentials:"same-origin",headers:{Accept:this.accept||"application/json"}})}fetch(a,b){return fetch(a,b)}filterItems(){let a=this.input?.value.trim()??"",b=L(this,Q);if(N(this,Q,a),a===b)return;this.dispatchEvent(new CustomEvent("virtual-filter-input-filter"));let c;for(let d of(b&&a.includes(b)?c=this.filtered:(c=L(this,S),this.filtered.clear()),c))this.filter(d,a)?this.filtered.add(d):this.filtered.delete(d);this.dispatchEvent(new CustomEvent("virtual-filter-input-filtered"))}constructor(...a){super(...a),M(this,O,{writable:!0,value:void 0}),M(this,P,{writable:!0,value:0}),M(this,Q,{writable:!0,value:null}),M(this,R,{writable:!0,value:void 0}),M(this,S,{writable:!0,value:new Set}),M(this,T,{writable:!0,value:null}),this.filter=(a,b)=>String(a).includes(b)}};function V(a,b,c){if(!b.has(a))throw TypeError("attempted to "+c+" private field on non-instance");return b.get(a)}function W(a,b){var c,d,e=V(a,b,"get");return c=a,(d=e).get?d.get.call(c):d.value}function X(a,b,c){!function(a,b){if(b.has(a))throw TypeError("Cannot initialize the same private elements twice on an object")}(a,b),b.set(a,c)}function Y(a,b,c){var d=V(a,b,"set");return!function(a,b,c){if(b.set)b.set.call(a,c);else{if(!b.writable)throw TypeError("attempted to set read only private field");b.value=c}}(a,d,c),c}window.customElements.get("virtual-filter-input")||(window.VirtualFilterInputElement=U,window.customElements.define("virtual-filter-input",U));let Z=new IntersectionObserver(a=>{for(let b of a)b.isIntersecting&&b.target instanceof ag&&"eager"===b.target.updating&&b.target.update()});var $=new WeakMap,_=new WeakMap,aa=new WeakMap,ab=new WeakMap,ac=new WeakMap,ad=new WeakMap,ae=new WeakMap;let af=Symbol.iterator,ag=class VirtualListElement extends HTMLElement{static get observedAttributes(){return["data-updating","aria-activedescendant"]}get updating(){return"lazy"===this.getAttribute("data-updating")?"lazy":"eager"}set updating(a){this.setAttribute("data-updating",a)}get size(){return W(this,_).size}get range(){let a=this.getBoundingClientRect().height,{scrollTop:b}=this,c=`${b}-${a}`;if(W(this,ac).has(c))return W(this,ac).get(c);let d=0,e=0,f=0,g=0,h=W(this,aa);for(let i of W(this,_)){let j=h.get(i)||W(this,ab);if(f+j=a)break}return[d,e]}get list(){let a=this.querySelector("ul, ol, tbody");if(!a)throw Error("virtual-list must have a container element inside: any of
                ,
                  , ");return a}attributeChangedCallback(a,b,c){if(b===c||!this.isConnected)return;let d="data-updating"===a&&"eager"===c,e="data-sorted"===a&&this.hasAttribute("data-sorted");if((d||e)&&this.update(),"aria-activedescendant"===a){let f=this.getIndexByElementId(c);this.dispatchEvent(new ActiveDescendantChangedEvent(f,c)),"eager"===this.updating&&this.update()}}connectedCallback(){this.addEventListener("scroll",()=>this.update()),this.updateSync=this.updateSync.bind(this),Z.observe(this)}update(){W(this,ae)&&cancelAnimationFrame(W(this,ae)),!W(this,$)&&this.hasAttribute("data-sorted")?Y(this,ae,requestAnimationFrame(()=>{this.dispatchEvent(new CustomEvent("virtual-list-sort",{cancelable:!0}))&&this.sort()})):Y(this,ae,requestAnimationFrame(this.updateSync))}renderItem(a){let b={item:a,fragment:document.createDocumentFragment()};return this.dispatchEvent(new CustomEvent("virtual-list-render-item",{detail:b})),b.fragment.children[0]}recalculateHeights(a){let b=this.list;if(!b)return;let c=this.renderItem(a);if(!c)return;b.append(c);let d=b.children[0].getBoundingClientRect().height;b.replaceChildren(),d&&(Y(this,ab,d),W(this,aa).set(a,d))}getIndexByElementId(a){if(!a)return -1;let b=0;for(let[,c]of W(this,ad)){if(c.id===a||c.querySelector(`#${a}`))return b;b++}return -1}updateSync(){let a=this.list,[b,c]=this.range;if(cc){h=!1;break}let m=null;if(f.has(l))m=f.get(l);else{if(!(m=this.renderItem(l)))continue;m.querySelector("[aria-setsize]")?.setAttribute("aria-setsize",W(this,_).size.toString()),m.querySelector("[aria-posinset]")?.setAttribute("aria-posinset",(g+1).toString()),f.set(l,m)}m.querySelector("[tabindex]")?.setAttribute("data-scrolltop",j.toString()),j+=k,e.set(l,m)}a.replaceChildren(...e.values()),a.style.paddingTop=`${i}px`;let n=this.size*W(this,ab);a.style.height=`${n||0}px`;let o=!1,p=this.getBoundingClientRect().bottom;for(let[q,r]of e){let{height:s,bottom:t}=r.getBoundingClientRect();o=o||t>=p,W(this,aa).set(q,s)}let u=!h&&this.size>e.size;if(u&&!o)return W(this,ac).delete(`${this.scrollTop}-${this.getBoundingClientRect().height}`),this.update();this.dispatchEvent(new RenderedEvent(f)),this.dispatchEvent(new CustomEvent("virtual-list-updated"))}resetRenderCache(){Y(this,ad,new Map)}has(a){return W(this,_).has(a)}add(a){return W(this,_).add(a),Y(this,$,!1),Number.isFinite(W(this,ab))||this.recalculateHeights(a),this.resetRenderCache(),this.dispatchEvent(new Event("virtual-list-data-updated")),"eager"===this.updating&&this.update(),this}delete(a){let b=W(this,_).delete(a);return Y(this,$,!1),W(this,aa).delete(a),this.resetRenderCache(),this.dispatchEvent(new Event("virtual-list-data-updated")),"eager"===this.updating&&this.update(),b}clear(){W(this,_).clear(),W(this,aa).clear(),Y(this,ab,1/0),Y(this,$,!0),this.resetRenderCache(),this.dispatchEvent(new Event("virtual-list-data-updated")),"eager"===this.updating&&this.update()}forEach(a,b){for(let c of this)a.call(b,c,c,this)}entries(){return W(this,_).entries()}values(){return W(this,_).values()}keys(){return W(this,_).keys()}[af](){return W(this,_)[Symbol.iterator]()}sort(a){return Y(this,_,new Set(Array.from(this).sort(a))),Y(this,$,!0),this.dispatchEvent(new Event("virtual-list-data-updated")),"eager"===this.updating&&this.update(),this}constructor(...a){super(...a),X(this,$,{writable:!0,value:!1}),X(this,_,{writable:!0,value:new Set}),X(this,aa,{writable:!0,value:new Map}),X(this,ab,{writable:!0,value:1/0}),X(this,ac,{writable:!0,value:new Map}),X(this,ad,{writable:!0,value:new Map}),X(this,ae,{writable:!0,value:0})}};class ActiveDescendantChangedEvent extends Event{constructor(a,b){super("virtual-list-activedescendant-changed"),this.index=a,this.id=b}}class RenderedEvent extends Event{constructor(a){super("virtual-list-rendered"),this.rowsCache=a}}window.customElements.get("virtual-list")||(window.VirtualListElement=ag,window.customElements.define("virtual-list",ag));var ah=function(a,b,c,d){var e,f=arguments.length,g=f<3?b:null===d?d=Object.getOwnPropertyDescriptor(b,c):d;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)g=Reflect.decorate(a,b,c,d);else for(var h=a.length-1;h>=0;h--)(e=a[h])&&(g=(f<3?e(g):f>3?e(b,c,g):e(b,c))||g);return f>3&&g&&Object.defineProperty(b,c,g),g};let ai=class VisiblePasswordElement extends HTMLElement{show(){this.input.type="text",this.input.focus(),this.showButton.hidden=!0,this.hideButton.hidden=!1}hide(){this.input.type="password",this.input.focus(),this.hideButton.hidden=!0,this.showButton.hidden=!1}};ah([e.fA],ai.prototype,"input",void 0),ah([e.fA],ai.prototype,"showButton",void 0),ah([e.fA],ai.prototype,"hideButton",void 0),ai=ah([e.Ih],ai)},81775(a,b,c){c.d(b,{G:()=>i});var d=c(254),e=c(64463),f=c(59753);function g(a){let b=a.getAttribute("data-required-value"),c=a.getAttribute("data-required-value-prefix");if(a.value===b)a.setCustomValidity("");else{let d=b;c&&(d=c+d),a.setCustomValidity(d)}}(0,d.q6)("[data-required-value]",function(a){let b=a.currentTarget;g(b)}),(0,f.on)("change","[data-required-value]",function(a){let b=a.currentTarget;g(b),i(b.form)}),(0,d.q6)("[data-required-trimmed]",function(a){let b=a.currentTarget;""===b.value.trim()?b.setCustomValidity(b.getAttribute("data-required-trimmed")):b.setCustomValidity("")}),(0,f.on)("change","[data-required-trimmed]",function(a){let b=a.currentTarget;""===b.value.trim()?b.setCustomValidity(b.getAttribute("data-required-trimmed")):b.setCustomValidity(""),i(b.form)}),(0,d.ZG)("input[pattern],input[required],textarea[required],input[data-required-change],textarea[data-required-change],input[data-required-value],textarea[data-required-value]",a=>{let b=a.checkValidity();function c(){let c=a.checkValidity();c!==b&&a.form&&i(a.form),b=c}a.addEventListener("input",c),a.addEventListener("blur",function b(){a.removeEventListener("input",c),a.removeEventListener("blur",b)})});let h=new WeakMap;function i(a){let b=a.checkValidity();for(let c of a.querySelectorAll("button[data-disable-invalid]"))c.disabled=!b}(0,e.N7)("button[data-disable-invalid]",{constructor:HTMLButtonElement,initialize(a){let b=a.form;if(b){var c;c=b,h.get(c)||(c.addEventListener("change",()=>i(c)),h.set(c,!0)),a.disabled=!b.checkValidity()}}}),(0,e.N7)("input[data-required-change], textarea[data-required-change]",function(a){let b=a,c="radio"===b.type&&b.form?b.form.elements.namedItem(b.name).value:null;function d(a){let d=b.form;if(a&&"radio"===b.type&&d&&c)for(let e of d.elements.namedItem(b.name))e instanceof HTMLInputElement&&e.setCustomValidity(b.value===c?"unchanged":"");else b.setCustomValidity(b.value===(c||b.defaultValue)?"unchanged":"")}b.addEventListener("input",d),b.addEventListener("change",d),d(),b.form&&i(b.form)}),document.addEventListener("reset",function(a){if(a.target instanceof HTMLFormElement){let b=a.target;setTimeout(()=>i(b))}})},97895(a,b,c){c.d(b,{Z:()=>l});var d=c(47142);let e=(a,b,c)=>{if(!(0,d.CD)(a,b))return-1/0;let e=(0,d.Gs)(a,b);return e{a.textContent="";let e=0;for(let f of(0,d.m7)(b,c)){let g=c.slice(e,f);""!==g&&a.appendChild(document.createTextNode(c.slice(e,f))),e=f+1;let h=document.createElement("mark");h.textContent=c[f],a.appendChild(h)}a.appendChild(document.createTextNode(c.slice(e)))},g=new WeakMap,h=new WeakMap,i=new WeakMap,j=a=>{if(!i.has(a)&&a instanceof HTMLElement){let b=(a.getAttribute("data-value")||a.textContent||"").trim();return i.set(a,b),b}return i.get(a)||""},k=class FuzzyListElement extends HTMLElement{connectedCallback(){let a=this.querySelector("ul");if(!a)return;let b=new Set(a.querySelectorAll("li")),c=this.querySelector("input");c instanceof HTMLInputElement&&c.addEventListener("input",()=>{this.value=c.value});let e=new MutationObserver(a=>{let c=!1;for(let e of a)if("childList"===e.type&&e.addedNodes.length){for(let f of e.addedNodes)if(f instanceof HTMLLIElement&&!b.has(f)){let g=j(f);c=c||(0,d.CD)(this.value,g),b.add(f)}}c&&this.sort()});e.observe(a,{childList:!0});let f={handler:e,items:b,lazyItems:new Map,timer:null};h.set(this,f)}disconnectedCallback(){let a=h.get(this);a&&(a.handler.disconnect(),h.delete(this))}addLazyItems(a,b){let c=h.get(this);if(!c)return;let{lazyItems:e}=c,{value:f}=this,g=!1;for(let i of a)e.set(i,b),g=g||Boolean(f)&&(0,d.CD)(f,i);g&&this.sort()}sort(){let a=g.get(this);a&&(a.aborted=!0);let b={aborted:!1};g.set(this,b);let{minScore:c,markSelector:d,maxMatches:k,value:l}=this,m=h.get(this);if(!m||!this.dispatchEvent(new CustomEvent("fuzzy-list-will-sort",{cancelable:!0,detail:l})))return;let{items:n,lazyItems:o}=m,p=this.hasAttribute("mark-selector"),q=this.querySelector("ul");if(!q)return;let r=[];if(l){for(let s of n){let t=j(s),u=e(l,t,c);u!== -1/0&&r.push({item:s,score:u})}for(let[v,w]of o){let x=e(l,v,c);x!== -1/0&&r.push({text:v,render:w,score:x})}r.sort((a,b)=>b.score-a.score).splice(k)}else{let y=r.length;for(let z of n){if(y>=k)break;r.push({item:z,score:1}),y+=1}for(let[A,B]of o){if(y>=k)break;r.push({text:A,render:B,score:1}),y+=1}}requestAnimationFrame(()=>{if(b.aborted)return;let a=q.querySelector('input[type="radio"]:checked');q.textContent="";let c=0,e=()=>{if(b.aborted)return;let g=Math.min(r.length,c+100),h=document.createDocumentFragment();for(let k=c;k0),this.dispatchEvent(new CustomEvent("fuzzy-list-sorted",{detail:r.length}))}};e()})}get value(){return this.getAttribute("value")||""}set value(a){this.setAttribute("value",a)}get markSelector(){return this.getAttribute("mark-selector")||""}set markSelector(a){a?this.setAttribute("mark-selector",a):this.removeAttribute("mark-selector")}get minScore(){return Number(this.getAttribute("min-score")||0)}set minScore(a){Number.isNaN(a)||this.setAttribute("min-score",String(a))}get maxMatches(){return Number(this.getAttribute("max-matches")||1/0)}set maxMatches(a){Number.isNaN(a)||this.setAttribute("max-matches",String(a))}static get observedAttributes(){return["value","mark-selector","min-score","max-matches"]}attributeChangedCallback(a,b,c){if(b===c)return;let d=h.get(this);d&&(d.timer&&window.clearTimeout(d.timer),d.timer=window.setTimeout(()=>this.sort(),100))}},l=k;window.customElements.get("fuzzy-list")||(window.FuzzyListElement=k,window.customElements.define("fuzzy-list",k))},254(a,b,c){c.d(b,{ZG:()=>h,q6:()=>j,w4:()=>i});var d=c(8439);let e=!1,f=new d.Z;function g(a){let b=a.target;if(b instanceof HTMLElement&&b.nodeType!==Node.DOCUMENT_NODE)for(let c of f.matches(b))c.data.call(null,b)}function h(a,b){e||(e=!0,document.addEventListener("focus",g,!0)),f.add(a,b),document.activeElement instanceof HTMLElement&&document.activeElement.matches(a)&&b(document.activeElement)}function i(a,b,c){function d(b){let e=b.currentTarget;e&&(e.removeEventListener(a,c),e.removeEventListener("blur",d))}h(b,function(b){b.addEventListener(a,c),b.addEventListener("blur",d)})}function j(a,b){function c(a){let{currentTarget:d}=a;d&&(d.removeEventListener("input",b),d.removeEventListener("blur",c))}h(a,function(a){a.addEventListener("input",b),a.addEventListener("blur",c)})}},87551(a,b,c){c.d(b,{X:()=>e});var d=c(64463);function e(){return/Windows/.test(navigator.userAgent)?"windows":/Macintosh/.test(navigator.userAgent)?"mac":null}(0,d.N7)(".js-remove-unless-platform",function(a){!function(a){let b=(a.getAttribute("data-platforms")||"").split(","),c=e();return Boolean(c&&b.includes(c))}(a)&&a.remove()})}},a=>{var b=b=>a(a.s=b);a.O(0,["vendors-node_modules_selector-observer_dist_index_esm_js","vendors-node_modules_delegated-events_dist_index_js-node_modules_github_details-dialog-elemen-63debe","vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-6afc16","vendors-node_modules_github_clipboard-copy-element_dist_index_esm_js-node_modules_github_mark-f079ea","vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b4f804","vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_text-ex-3415a8","vendors-node_modules_primer_view-components_app_components_primer_primer_js-node_modules_gith-6a1af4"],()=>b(89912));var c=a.O()}]) +//# sourceMappingURL=github-elements-052e993717ec.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E7C0B73594FE8F4AA9FC3F93B42428EFD4E1CB12 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E7C0B73594FE8F4AA9FC3F93B42428EFD4E1CB12 new file mode 100644 index 0000000..4067eb6 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E7C0B73594FE8F4AA9FC3F93B42428EFD4E1CB12 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E7C0B73594FE8F4AA9FC3F93B42428EFD4E1CB12-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E7C0B73594FE8F4AA9FC3F93B42428EFD4E1CB12-blob new file mode 100644 index 0000000..7c8a677 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E7C0B73594FE8F4AA9FC3F93B42428EFD4E1CB12-blob @@ -0,0 +1,3 @@ +.before-after-toggle{width:60px;height:32px}.before-after-toggle-checkbox{-webkit-appearance:none;appearance:none;cursor:pointer;background-color:#24292f;border-radius:32px}.before-after-toggle-knob{bottom:5px;left:5px;width:22px;height:22px;background-color:#fff;border-radius:50%;transition:.4s transform cubic-bezier(0.16, 1, 0.3, 1)}.before-after-toggle-checkbox:checked+.before-after-toggle-knob{transform:translateX(28px)}.before-after-slider{width:10%;background:linear-gradient(90deg, transparent 80%, rgba(179, 146, 240, 0.3) 100%),linear-gradient(90deg, transparent 0%, rgba(9, 105, 218, 0.3) 100%);border-width:2px !important;opacity:0;transition:transform 1s ease,opacity 1s ease;transform:scaleX(-1)}[data-toggled] .before-after-slider{transform:translateX(900%)}[data-animating] .before-after-slider{opacity:1}.after-element{transition:-webkit-mask-size 1s ease;transition:mask-size 1s ease;transition:mask-size 1s ease, -webkit-mask-size 1s ease;-webkit-mask:linear-gradient(#000 0 0) left no-repeat;mask:linear-gradient(#000 0 0) left no-repeat;-webkit-mask-size:0% 100%;mask-size:0% 100%}[data-toggled] .after-element{-webkit-mask-size:100% 100%;mask-size:100% 100%}@media(min-width: 768px){.home-globe-container{height:auto}}.home-globe-container-video,.home-globe-container-webgl{position:relative;left:-100vw;width:300vw;height:150vw;max-height:900px;margin-left:-0.9rem}@media(min-width: 768px){.home-globe-container-video,.home-globe-container-webgl{margin-left:-2rem}}@media(min-width: 1012px){.home-globe-container-video,.home-globe-container-webgl{left:0;width:900px;height:900px;margin-left:-150px}}.home-hero-container{min-height:750px;max-height:926px;background-color:#040d21}@media(min-width: 544px){.home-hero-container{min-height:850px}}@media(min-width: 768px){.home-hero-container{height:94vh;min-height:860px}}.home-hero{padding:8rem 0 0}@media(min-width: 768px){.home-hero{padding:8rem 0}}.home-astro-mona{left:50%;max-width:480px;transform:translateX(-50%)}.home-globe::after{position:absolute;top:0;right:-2rem;bottom:0;left:-2rem;display:block;pointer-events:none;content:"";background:linear-gradient(to bottom, rgba(4, 13, 33, 0) 0%, #040d21 60%);opacity:.3}@media(min-width: 768px){.home-globe::after{background:linear-gradient(to bottom, rgba(4, 13, 33, 0) 0%, #040d21 40%)}}@media(min-width: 1012px){.home-globe::after{display:none}}.home-hero-glow{top:50%;left:50%;width:200%;transform:translate(-50%, -50%)}.home-git-log-light,.home-git-log-subtle,.home-git-log-dark{position:relative}.home-git-log-light::after,.home-git-log-subtle::after,.home-git-log-dark::after{position:absolute;top:0;bottom:0;left:-4px;display:block;width:2px;content:"";background:#dadfe9}@media(min-width: 544px){.home-git-log-light::after,.home-git-log-subtle::after,.home-git-log-dark::after{left:-24px}}.home-git-log-center{position:relative}.home-git-log-center::after{position:absolute;top:0;bottom:0;left:calc(50% - 2px);z-index:-1;display:none;width:2px;content:"";background:#dadfe9}@media(min-width: 1012px){.home-git-log-center::after{display:block}}.bg-home-dark{background-color:#040d21}.home-git-log-dark::after,.home-git-log-dark-icons::after{background:#42526d}.home-git-log-dark .home-git-icon,.home-git-log-dark-icons .home-git-icon{background:#040d21}.home-git-log-dark .home-git-icon>path,.home-git-log-dark-icons .home-git-icon>path{fill:#42526d}.home-git-log-dark .home-git-icon>circle,.home-git-log-dark-icons .home-git-icon>circle{fill:#040d21;stroke:#42526d}.home-git-log-dark .home-branch>path,.home-git-log-dark-icons .home-branch>path{stroke:#42526d}.home-git-log-light .home-git-icon{background:var(--color-canvas-default)}.home-git-log-light .home-git-icon>rect{fill:#fff}.home-git-log-light .home-git-icon>path{fill:#dadfe9}.home-git-log-light .home-git-icon>circle{fill:#fff;stroke:#dadfe9}.home-git-log-light .home-branch>path{stroke:#dadfe9}.home-git-log-subtle .home-git-icon{background:var(--color-canvas-subtle)}.home-git-log-subtle .home-git-icon>rect{fill:var(--color-canvas-subtle)}.home-git-log-subtle .home-git-icon>path{fill:var(--color-border-default)}.home-git-log-subtle .home-git-icon>circle{fill:var(--color-canvas-subtle);stroke:var(--color-border-default)}.home-git-log-subtle .home-branch>path{stroke:var(--color-border-default)}.home-branch{left:calc(8.33333% - 1.5rem);width:calc(8.33333% + .125rem);height:8.875rem}.home-branch-container{margin-left:calc(8.33333% - 14px)}@media(min-width: 544px){.home-branch-container{margin-left:calc(8.33333% - 33px)}}@media(min-width: 768px){.home-branch-container{margin-left:0}}.home-git-item{margin-left:-41px}@media(min-width: 544px){.home-git-item{margin-left:-61px}}.home-git-timeline-item{margin-left:-28px}@media(min-width: 544px){.home-git-timeline-item{margin-left:-48px}}.home-git-log-terminal{margin-left:0}@media(min-width: 768px){.home-git-log-terminal{margin-left:-35px}}.home-repo-comp::after{position:absolute;top:0;bottom:0;left:calc(8.33333% - 24px);display:block;width:2px;content:"";background:#42526d}@media(min-width: 544px){.home-repo-comp::after{left:calc(8.33333% - 44px)}}.home-repo-editor{min-height:330px;padding-top:68.108974359%;font-size:.8125rem;background-color:#0c162d;box-shadow:0 0 0 1px rgba(255,255,255,.1),0 34px 65px #040d21,0 2.75px 2.21px rgba(0,0,0,.07),0 6.65px 5.32px rgba(0,0,0,.043),0 12.5px 10px rgba(0,0,0,.03),0 22px 18px rgba(0,0,0,.03),0 42px 33.4px rgba(0,0,0,.02),0 100px 80px rgba(0,0,0,.017)}@media(min-width: 544px){.home-repo-editor{min-height:0}}@media(min-width: 768px){.home-repo-editor{padding-top:59.2948717949%}}.home-repo-editor.build-in-animate{animation:.7s ease home-repo-editor-fly-up forwards 4s}@media(min-width: 768px){.home-repo-editor.build-in-animate{animation:.7s ease home-repo-editor-fly-up-md forwards 4s}}@media(min-width: 1012px){.home-repo-editor.build-in-animate{animation:.7s ease home-repo-editor-fly-up-lg forwards 4s}}.home-repo-editor-filetree{background-color:#0c162d;border-right:1px solid #040d21}.home-repo-editor-tabs,.home-repo-editor-filetree{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";color:#b5bfd2}.home-repo-editor-tab,.home-repo-editor-tab--active{padding:.75rem 1rem;border-right:1px solid #040d21}.home-repo-editor-file{background-color:#19253c}.home-repo-editor-terminal{min-height:70%;background-color:#0c162d;border-top:1px solid #040d21}@media(min-width: 768px){.home-repo-editor-terminal{min-height:17.8125rem}}.home-pre{font-size:.8125rem;line-height:1.8}.home-repo-comp-browser{visibility:hidden}.home-repo-comp-browser.build-in-animate{visibility:visible;animation:.7s ease home-repo-browser-fly-in both 4s}.home-repo-editor-ui.build-in-animate{animation:.4s ease home-repo-editor-img forwards 4s}@keyframes home-repo-editor-img{0%{opacity:1}100%{opacity:.4}}@keyframes home-repo-editor-fly-up{to{min-height:0;transform:translateY(-17px) scale(0.95, 0.95, 1)}}@keyframes home-repo-editor-fly-up-md{to{transform:translateY(-34px) scale(0.95, 0.95, 1)}}@keyframes home-repo-editor-fly-up-lg{to{transform:translateY(-50px) scale(0.95, 0.95, 1)}}@keyframes home-repo-browser-fly-in{0%{opacity:0;transform:scale3d(1.05, 1.05, 1) translateY(4%)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(0)}}.package-registry{box-shadow:0 0 0 1px rgba(255,255,255,.1),0 34px 65px #040d21,0 2.75px 2.21px rgba(0,0,0,.07),0 6.65px 5.32px rgba(0,0,0,.043),0 12.5px 10px rgba(0,0,0,.03),0 22px 18px rgba(0,0,0,.03),0 42px 33.4px rgba(0,0,0,.02),0 100px 80px rgba(0,0,0,.017)}.home-pr-description,.home-pr-comment,.home-pr-merge{max-width:490px;font-size:0;background-color:var(--color-canvas-default);box-shadow:0 0 0 1px rgba(53,72,91,.05);transition:transform .6s cubic-bezier(0.16, 1, 0.3, 1);transform:translateX(35%)}.home-pr-description img,.home-pr-comment img,.home-pr-merge img{opacity:.25;transition:opacity .6s cubic-bezier(0.16, 1, 0.3, 1)}.home-pr-description.build-in-animate,.home-pr-comment.build-in-animate,.home-pr-merge.build-in-animate{box-shadow:0 0 0 1px rgba(53,72,91,.14),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09);opacity:1;transform:translateX(0)}.home-pr-description.build-in-animate img,.home-pr-comment.build-in-animate img,.home-pr-merge.build-in-animate img{opacity:1}.home-mobile-iphone{max-width:280px;min-height:568px;font-size:0;background-color:#040d21;border:1rem solid #040d21;border-radius:2.6875rem}.home-desktop-comp{max-width:490px;min-height:450px}@media(min-width: 1012px){.home-desktop-comp{min-height:569px}}.home-desktop{width:144.75%;font-size:0;border-radius:.625rem}.home-cli{bottom:2%;opacity:0;transition:transform .6s,opacity .6s;transform:translate(10%, 0)}@media(min-width: 544px){.home-cli{bottom:5%}}@media(min-width: 1012px){.home-cli{bottom:10%}}.home-cli.build-in-animate{opacity:1;transform:translate(0, 0)}.home-pr-screen{width:129.5%;margin-top:-10%;opacity:.25}.home-codespaces-copy-item{margin-bottom:69vh}.home-codespaces-copy-item-1{margin-top:20vh}.home-codespaces-copy-item-3{height:78vh;margin-bottom:0}@media(min-width: 768px){.home-codespaces-copy-item-3{height:70vh}}@media(min-width: 1012px){.home-codespaces-copy-item-3{height:58vh}}@media(min-width: 768px){.home-codespaces-container{padding-top:6.5rem}}.home-codespaces-img-container{min-height:100vh;pointer-events:none}@media(min-width: 1012px){.home-codespaces-img-container{height:100vh;padding-top:18vh;padding-bottom:8vh}}.home-codespaces-view{position:relative;bottom:-60vh;width:175%}@media(min-width: 544px){.home-codespaces-view{width:130%}}@media(min-width: 768px){.home-codespaces-view{width:125%}}@media(min-width: 1012px){.home-codespaces-view{bottom:auto;width:auto;height:100%;max-height:740px}}.home-codespaces-view-2,.home-codespaces-view-3{position:absolute;opacity:0}.home-codespaces-illo{padding:18.75rem 0 61.25rem}@media(min-width: 1012px){.home-codespaces-illo{padding:18.75rem 0 71.875rem}}@media(min-width: 1012px)and (max-height: 900px){.home-codespaces-illo{padding:18.75rem 0 78.125rem}}.home-codespaces-copy-item-2.build-in-animate~.home-codespaces-illo .home-codespaces-view-1{position:absolute;opacity:0}.home-codespaces-copy-item-2.build-in-animate~.home-codespaces-illo .home-codespaces-view-2{position:relative;opacity:1}.home-codespaces-copy-item-3.build-in-animate~.home-codespaces-illo .home-codespaces-view-1{position:absolute;opacity:0}.home-codespaces-copy-item-3.build-in-animate~.home-codespaces-illo .home-codespaces-view-3{position:relative;opacity:1}.home-codespaces-glow-container{right:0;left:-70%}.home-codespaces-glow{bottom:0;transform:translateY(50%)}@media(min-width: 1012px){.home-codespaces-glow{top:50%;bottom:auto;left:0;width:120%;height:100vh;transform:translateY(-50%)}}.home-workflow-comp{max-width:706px;font-size:0;opacity:0}.home-workflow-comp.build-in-animate{animation:.6s cubic-bezier(0.535, 0.15, 0.425, 1) home-enter both}.home-workflow-comp.build-in-animate .home-workflow-sidebar{animation:.6s ease-in-out home-worflow-sidebar both}.home-workflow-comp.build-in-animate .home-workflow-actions{animation:1.2s cubic-bezier(0.535, 0.15, 0.425, 1) home-worflow-actions both}@keyframes home-worflow-sidebar{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes home-worflow-actions{0%{transform:translateY(-45%)}100%{transform:translateY(0)}}.home-matrix-comp{width:100%}@media(min-width: 1012px){.home-matrix-comp{left:50%;width:140%;transform:translateX(-50%)}}.home-matrix-comp.build-in-animate .home-matrix-build{visibility:visible;animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-matrix-build forwards}.home-matrix-comp.build-in-animate .home-matrix-test{visibility:visible;box-shadow:0 0 0 1px rgba(53,72,91,.14),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09);animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-matrix-test forwards}.home-matrix-comp.build-in-animate .home-matrix-publish{visibility:visible;animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-matrix-publish forwards}.home-matrix-comp.build-in-animate .home-matrix-string::before{opacity:1;transition:opacity 1s;transition-delay:.4s}.home-matrix-spinner-1,.home-matrix-spinner-2,.home-matrix-spinner-3{opacity:0}.build-in-animate .home-matrix-spinner-1{transform-origin:center;animation:.4s linear spin 8 none}.build-in-animate .home-matrix-spinner-2{transform-origin:center;animation:.4s linear spin 9 none}.build-in-animate .home-matrix-spinner-3{transform-origin:center;animation:.4s linear spin 10 none}.home-matrix-success-1,.home-matrix-success-2,.home-matrix-success-3{visibility:hidden}.build-in-animate .home-matrix-success-1{visibility:visible;transition-delay:3.2s}.build-in-animate .home-matrix-success-2{visibility:visible;transition-delay:3.6s}.build-in-animate .home-matrix-success-3{visibility:visible;transition-delay:4s}@keyframes show-hide{0%{visibility:hidden}100%{visibility:visible}}@keyframes home-matrix-build{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateX(3.125rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateX(0)}}@keyframes home-matrix-test{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93)}100%{opacity:1;transform:scale3d(1, 1, 1)}}@keyframes home-matrix-publish{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateX(-3.125rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateX(0)}}.home-matrix-string::before{position:absolute;top:2.3125rem;right:20%;left:20%;display:block;height:2px;content:"";background:var(--color-border-default);opacity:0}.home-matrix-tab-container{bottom:100%;left:-1px;height:21px}.home-matrix-tab{height:21px}.home-matrix-tab::before{position:absolute;top:1px;right:1px;bottom:-1px;left:1px;display:block;content:"";background:var(--color-canvas-default);border-radius:.375rem .375rem 0 0;box-shadow:0 0 0 1px rgba(53,72,91,.14) !important}.home-matrix-connector{position:absolute;top:2rem;left:-6px;width:12px;height:12px}.home-matrix-build .home-matrix-connector{top:1rem}.home-matrix-connector::before{position:relative;z-index:1;display:block;width:6px;height:6px;margin:3px;content:"";background:var(--color-neutral-muted);border-radius:50%}.home-matrix-connector--right{right:-6px;left:auto}.home-matrix-connector--right .home-matrix-connector-bg{right:0}.home-matrix-connector--right .home-matrix-connector-bg::before{right:1px}.home-matrix-connector-bg{position:absolute;top:0;width:7px;height:12px;padding:1px;overflow:hidden}.home-matrix-connector-bg::before{position:absolute;display:block;width:11px;height:10px;content:"";background:var(--color-canvas-default);border-radius:50%;box-shadow:0 0 0 1px rgba(53,72,91,.14) !important}.home-matrix-build{max-width:260px;font-size:0;visibility:hidden;opacity:0}.home-matrix-test,.home-matrix-publish{max-width:292px;font-size:0;visibility:hidden}.build-in-animate .home-actions-spinner{animation:.4s linear spin infinite}.home-actions-success{box-shadow:inset 0 0 0 0 var(--color-success-emphasis);transition:transform .4s,opacity .4s}.home-actions-success .home-actions-success-check{width:50%;opacity:0;transition:transform .4s,opacity .4s;transform:translate(50%, 87%) scale(0.9)}.build-in-animate .home-actions-success{animation:.5s ease-in-out home-actions-success 3.5s forwards}.build-in-animate .home-actions-success .home-actions-success-check{animation:.2s ease-in-out home-actions-success-check 4s forwards}@keyframes spin{0%{opacity:1;transform:rotate(0deg)}100%{opacity:1;transform:rotate(360deg)}}@keyframes home-actions-success{from{box-shadow:inset 0 0 0 0 var(--color-success-emphasis)}to{box-shadow:inset 0 0 0 170px var(--color-success-emphasis)}}@keyframes home-actions-success-check{0%{opacity:0;transform:translate(50%, 87%) scale3d(0.9, 0.9, 0.9)}90%{transform:translate(50%, 87%) scale3d(1.2, 1.2, 1.2)}100%{opacity:1;transform:translate(50%, 87%) scale3d(1, 1, 1)}}.home-dependabot-comp{max-width:706px;margin-top:-2rem;font-size:0;visibility:hidden}.home-dependabot-comp.build-in-animate{visibility:visible;animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-enter forwards}.home-dependabot-comp.build-in-animate .home-dependabot-pr{animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-dependabot-pr forwards}.home-dependabot-comp.build-in-animate .home-dependabot-merge{animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-dependabot-merge forwards}@keyframes home-dependabot-pr{0%{transform:translateY(2rem)}100%{transform:translateY(0)}}@keyframes home-dependabot-merge{0%{transform:translateY(0)}100%{transform:translateY(14%)}}.home-codeql-step-1,.home-codeql-step-2,.home-codeql-step-3{font-size:0;visibility:hidden}.home-codeql-comp{max-width:490px}.home-codeql-comp.build-in-animate .home-codeql-step-2{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-codeql-step-2 forwards}.home-codeql-comp.build-in-animate .home-codeql-step-3{visibility:visible;animation:.2s cubic-bezier(0.16, 1, 0.3, 1) home-codeql-step-3 forwards}.home-codeql-comp.build-in-animate .home-codeql-description{opacity:1;transform:translateY(0)}.build-in-animate .home-codeql-step-1{visibility:visible;box-shadow:0 0 65px rgba(237,78,80,.4),0 0 0 1px rgba(255,255,255,.1),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09);animation:.6s cubic-bezier(0.16, 1, 0.3, 1) home-codeql-step-1 forwards}.home-codeql-step-2{left:50%;width:93%;margin-left:-46.5%;transform:translateY(-2.3rem)}.home-codeql-step-3{left:50%;width:87%;margin-left:-43.5%;transform:translateY(-4.4rem)}.home-codeql-description{opacity:0;transition:transform .6s,opacity .6s;transform:translateY(-45%)}@keyframes home-codeql-step-1{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateY(-3.0625rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(0)}}@keyframes home-codeql-step-2{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateY(-4.4rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(-2.3rem)}}@keyframes home-codeql-step-3{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateY(-6.7rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(-4.4rem)}}.home-secret-comp{max-width:490px;font-size:0}.home-secret-comp.build-in-animate .home-secret-alert{visibility:visible;box-shadow:0 0 65px rgba(237,78,80,.4),0 0 0 1px rgba(255,255,255,.1),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09);animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-secret-alert forwards}.home-secret-comp.build-in-animate .home-secret-list{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-secret-list forwards}.home-secret-alert{visibility:hidden;box-shadow:0 0 65px rgba(237,78,80,.4),0 0 0 1px rgba(255,255,255,.1),0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09)}.home-secret-list{visibility:hidden}.home-security-point-3::after{display:block}@media(min-width: 768px){.home-security-point-3::after{display:none}}.home-security-alert-fan{width:65.25rem;margin-left:-1.6875rem;transform:translateX(-50%)}@media(min-width: 544px){.home-security-alert-fan{margin-left:-2.9375rem}}@keyframes home-secret-alert{0%{opacity:0;transform:scale3d(0.93, 0.93, 0.93) translateY(2rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(0)}}@keyframes home-secret-list{0%{opacity:0;transform:translateY(2rem)}100%{opacity:1;transform:translateY(0)}}@keyframes home-enter{0%{opacity:0;transform:scale3d(0.93, 0.93, 1) translateY(3rem)}100%{opacity:1;transform:scale3d(1, 1, 1) translateY(0)}}.home-discussions-comp{max-width:492px;margin-top:40px;opacity:0;transition:opacity .4s}@media(min-width: 1012px){.home-discussions-comp{margin-top:-30%}}.home-discussions-comp.build-in-animate{opacity:1}.home-discussions-comp.build-in-animate .home-discussions-1{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-1 forwards}.home-discussions-comp.build-in-animate .home-discussions-2{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-2 forwards}.home-discussions-comp.build-in-animate .home-discussions-2 .home-discussions-check-0{animation-delay:1.5s}.home-discussions-comp.build-in-animate .home-discussions-answer{box-shadow:0 0 0 2px #28a745;transition-delay:1.5s;transition-duration:.2s;transition-property:box-shadow}.home-discussions-1,.home-discussions-2{width:78%;max-width:382px;margin:0;font-size:0}.home-discussions-2{margin:-20% 0 0}.home-discussions-check-0,.home-discussions-check-1,.home-discussions-check-2,.home-discussions-check-3{top:3.4%;right:10.5%;opacity:0}.home-discussions-check-0{width:7.25%;border:2px solid #fff;border-radius:30px}.home-discussions-check-0.build-in-animate{animation:.2s ease-in-out home-discussions-check-0 forwards}.home-discussions-check-1.build-in-animate{animation:2s ease-in-out .7s home-discussions-check-1 infinite}.home-discussions-check-2.build-in-animate{animation:3s ease-in-out 1.2s home-discussions-check-2 infinite}.home-discussions-check-3.build-in-animate{animation:4s ease-in-out 1.7s home-discussions-check-3 infinite}.home-discussions-answer{box-shadow:0 0 0 1px rgba(53,72,91,.14)}@keyframes home-discussions-check-0{0%{opacity:0;transform:scale3d(0.9, 0.9, 0.9)}90%{transform:scale3d(1.2, 1.2, 1.2)}100%{opacity:1;transform:scale3d(1, 1, 1)}}@keyframes home-discussions-check-1{0%{opacity:0;transform:scale3d(0.5, 0.5, 0.5) translate3d(0, 0, 0) rotate(0)}45%{opacity:0}50%{opacity:.25}100%{opacity:0;transform:scale3d(1.2, 1.2, 1.2) translate3d(-25%, -160%, 0) rotate(-25deg)}}@keyframes home-discussions-check-2{0%{opacity:0;transform:scale3d(0.5, 0.5, 0.5) translate3d(0, 0, 0) rotate(0)}45%{opacity:0}50%{opacity:.25}100%{opacity:0;transform:scale3d(1.4, 1.4, 1.4) translate3d(-125%, -100%, 0) rotate(-35deg)}}@keyframes home-discussions-check-3{0%{opacity:0;transform:scale3d(0.5, 0.5, 0.5) translate3d(0, 0, 0) rotate(0)}45%{opacity:0}50%{opacity:.25}100%{opacity:0;transform:scale3d(1.1, 1.1, 1.1) translate3d(150%, -120%, 0) rotate(35deg)}}.home-readme-comp{max-width:492px;opacity:0;transition:opacity .4s}.home-readme-comp.build-in-animate{opacity:1}.home-readme-comp.build-in-animate .home-readme-1{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-1 forwards}.home-readme-comp.build-in-animate .home-readme-2{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-2 forwards}.home-readme-1,.home-readme-2{width:78%;max-width:382px;margin:0 0 -40%;font-size:0}@media(min-width: 1012px){.home-readme-1,.home-readme-2{margin:-2.5rem 0 -45%}}.home-readme-2{margin:0}@media(min-width: 1012px){.home-readme-2{margin:0 0 -2.5rem}}.home-sponsors-comp{max-width:490px;opacity:0;transition:opacity .4s}.home-sponsors-comp.build-in-animate{opacity:1}.home-sponsors-comp.build-in-animate .home-sponsors-1{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-1 forwards}.home-sponsors-comp.build-in-animate .home-sponsors-1 .home-sponsors-heart-1,.home-sponsors-comp.build-in-animate .home-sponsors-1 .home-sponsors-heart-2,.home-sponsors-comp.build-in-animate .home-sponsors-1 .home-sponsors-heart-3{bottom:10%;left:8%;opacity:0;animation-delay:.5s}.home-sponsors-comp.build-in-animate .home-sponsors-2{visibility:visible;animation:.4s cubic-bezier(0.16, 1, 0.3, 1) home-community-cards-2 forwards}.home-sponsors-comp.build-in-animate .home-sponsors-2 .home-sponsors-heart-1,.home-sponsors-comp.build-in-animate .home-sponsors-2 .home-sponsors-heart-2,.home-sponsors-comp.build-in-animate .home-sponsors-2 .home-sponsors-heart-3{bottom:10%;left:0}.home-sponsors-1,.home-sponsors-2{width:78%;max-width:382px;margin-top:0;font-size:0;visibility:hidden}@media(min-width: 1012px){.home-sponsors-1,.home-sponsors-2{margin-top:-20%}}.home-sponsors-2{margin-top:-25%}.home-sponsors-heart-1.build-in-animate{animation:4s cubic-bezier(0.535, 0.15, 0.425, 1) home-sponsors-heart-1 infinite}.home-sponsors-heart-2.build-in-animate{animation:5s cubic-bezier(0.535, 0.15, 0.425, 1) -1s home-sponsors-heart-2 infinite}.home-sponsors-heart-3.build-in-animate{animation:6s cubic-bezier(0.535, 0.15, 0.425, 1) -2s home-sponsors-heart-3 infinite}@keyframes home-community-cards-1{0%{transform:translate3d(7%, 12%, 0)}100%{transform:translate3d(0, 0, 0)}}@keyframes home-community-cards-2{0%{transform:translate3d(-7%, -12%, 0)}100%{transform:translate3d(0, 0, 0)}}@keyframes home-sponsors-heart-1{0%{opacity:0;transform:scale3d(0.7, 0.7, 0.7) translate3d(0, 0, 0) rotate(0)}50%{opacity:1}100%{opacity:0;transform:scale3d(1, 1, 1) translate3d(-25%, -160%, 0) rotate(-25deg)}}@keyframes home-sponsors-heart-2{0%{opacity:0;transform:scale3d(0.5, 0.5, 0.5) translate3d(0, 0, 0) rotate(0)}50%{opacity:.75}100%{opacity:0;transform:scale3d(0.75, 0.75, 0.75) translate3d(-125%, -100%, 0) rotate(-35deg)}}@keyframes home-sponsors-heart-3{0%{opacity:0;transform:scale3d(0.35, 0.35, 0.35) translate3d(0, 0, 0) rotate(0)}50%{opacity:.5}100%{opacity:0;transform:scale3d(0.5, 0.5, 0.5) translate3d(150%, -120%, 0) rotate(35deg)}}.home-footer-illustration{left:50%;min-width:119%;max-width:1450px;margin-bottom:-28%;transform:translate(-50%, -50%)}@media(min-width: 1012px){.home-footer-illustration{min-width:calc(119% - 2rem)}}@media(min-width: 1248px){.home-footer-illustration{min-width:115.5%;margin-bottom:-33%}}.home-featured-repos{left:50%;width:1080px;transform:translateX(-50%)}@media(min-width: 1012px){.home-featured-repos{left:auto;width:1216px;transform:translateX(0)}}.home-repo-card{background-color:#0c162d;transition:background-color .4s}.home-repo-card:hover{background-color:#19253c}.rounded-pill{border-radius:500px}.password-validity-pill{display:inline-block;width:48px;height:4px;background-color:#627597}.password-validity-pill.password-validity-pill-fail{background-color:#ed4e50}.password-validity-pill.password-validity-pill-close{background-color:#ffd33d}.password-validity-pill.password-validity-pill-success{background-color:var(--color-success-emphasis)}.password-validity-summary.password-validity-summary-fail{color:#ed4e50}.password-validity-summary.password-validity-summary-close{color:#ffd33d}.password-validity-summary.password-validity-summary-success{color:var(--color-success-emphasis)}.code-editor-line-mktg{border-left:2px solid var(--color-canvas-default)}.code-editor-line-suggested-mktg{border-color:var(--color-accent-emphasis)}.code-editor-line-suggested-mktg:empty::after{content:" "}.copilot-marker{border-top-left-radius:0 !important;box-shadow:0 2px 2px rgba(0,0,0,.03),0 4px 4px rgba(0,0,0,.04),0 10px 8px rgba(0,0,0,.05),0 15px 15px rgba(0,0,0,.06),0 30px 30px rgba(0,0,0,.07),0 70px 65px rgba(0,0,0,.09)}.row-is-visible{animation:row-reveal 800ms ease-out}@keyframes row-reveal{0%,40%{opacity:0;transform:translateY(7px)}100%{opacity:1}}:root .home-copilot-editor{--color-canvas-subtle: #0c162d;--color-canvas-default: #19253c}.home-tagline-appendix{animation-name:home-tagline-in-out;animation-duration:1750ms;animation-fill-mode:both;animation-timing-function:cubic-bezier(0.48, 0.08, 0.19, 1)}.home-tagline-appendix:last-of-type{animation-name:home-tagline-in}@media screen and (prefers-reduced-motion: reduce){.home-tagline-appendix{animation:none}.home-tagline-appendix:not(:last-of-type){display:none}}@keyframes home-tagline-in{0%{opacity:0;transform:translateY(120%)}25%{opacity:1;transform:translateY(0)}}@keyframes home-tagline-in-out{0%{opacity:0;transform:translateY(120%)}25%,75%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-120%)}}@keyframes hero-circle-rotate{0%{transform:rotateZ(0)}100%{transform:rotateZ(-1turn)}}@keyframes hero-item-rotate{0%{transform:rotateZ(0)}100%{transform:rotateZ(1turn)}} + +/*# sourceMappingURL=home-991628a3b329.css.map*/ \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E823B2877FC79FB21CC71033507027BF552E00A7 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E823B2877FC79FB21CC71033507027BF552E00A7 new file mode 100644 index 0000000..0023d81 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E823B2877FC79FB21CC71033507027BF552E00A7 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E868A6E669DE709EBB40F63515BDF4A63F5D7D91 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E868A6E669DE709EBB40F63515BDF4A63F5D7D91 new file mode 100644 index 0000000..c82f908 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E868A6E669DE709EBB40F63515BDF4A63F5D7D91 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E8755AB26126DA378BB4629CE9142E211A31BC8F b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E8755AB26126DA378BB4629CE9142E211A31BC8F new file mode 100644 index 0000000..a1492ea Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E8755AB26126DA378BB4629CE9142E211A31BC8F differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E8755AB26126DA378BB4629CE9142E211A31BC8F-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E8755AB26126DA378BB4629CE9142E211A31BC8F-blob new file mode 100644 index 0000000..73383b4 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E8755AB26126DA378BB4629CE9142E211A31BC8F-blob @@ -0,0 +1 @@ +[{"uml":"Boulder","gm":{"lat":40.015,"lon":-105.2705},"uol":"Boulder","gop":{"lat":40.015,"lon":-105.2705},"l":"Python","nwo":"LinuxCNC/linuxcnc","pr":2248,"ma":"2023-01-07T15:53:34Z","oa":"2023-01-06T00:11:29Z"},{"uml":"Atlanta","gm":{"lat":33.7491,"lon":-84.3902},"uol":"Cairo","gop":{"lat":30.05611,"lon":31.23944},"l":"JavaScript","nwo":"BlueWallet/BlueWallet","pr":5260,"ma":"2023-01-07T17:49:21Z","oa":"2023-01-06T00:23:30Z"},{"uml":"Kansas City","gm":{"lat":39.0845,"lon":-94.563},"uol":"Kansas City","gop":{"lat":39.0845,"lon":-94.563},"l":"PHP","nwo":"phpactor/phpactor","pr":2033,"ma":"2023-01-07T16:52:33Z","oa":"2023-01-06T00:23:49Z"},{"uml":"Stuttgart","gm":{"lat":48.77611,"lon":9.1775},"uol":"Stuttgart","gop":{"lat":48.77611,"lon":9.1775},"l":"Nix","nwo":"NixOS/nixpkgs","pr":209254,"ma":"2023-01-07T18:13:31Z","oa":"2023-01-06T00:26:37Z"},{"uml":"Los Angeles","gm":{"lat":34.0544,"lon":-118.2439},"uol":"Los Angeles","gop":{"lat":34.0544,"lon":-118.2439},"l":"Python","nwo":"home-assistant/core","pr":85271,"ma":"2023-01-07T17:34:02Z","oa":"2023-01-06T00:55:12Z"},{"uml":"Guangzhou","gm":{"lat":23.1288,"lon":113.25898},"uol":"Baotou","gop":{"lat":40.65621,"lon":109.83454},"l":"Java","nwo":"huanghongxun/HMCL","pr":1979,"ma":"2023-01-07T13:38:37Z","oa":"2023-01-06T01:02:55Z"},{"uml":"Chattanooga","gm":{"lat":35.0456,"lon":-85.3097},"uol":"Chattanooga","gop":{"lat":35.0456,"lon":-85.3097},"l":"TypeScript","nwo":"reduxjs/redux-devtools","pr":1316,"ma":"2023-01-07T19:25:01Z","oa":"2023-01-06T02:01:12Z"},{"uml":"Portland","gm":{"lat":45.5202,"lon":-122.6742},"uol":"Portland","gop":{"lat":45.5202,"lon":-122.6742},"l":"Python","nwo":"bokeh/bokeh","pr":12717,"ma":"2023-01-07T19:06:36Z","oa":"2023-01-06T02:34:46Z"},{"uml":"Gainesville","gm":{"lat":29.6519,"lon":-82.3248},"uol":"Auckland","gop":{"lat":-36.85,"lon":174.78333},"l":"C++","nwo":"PX4/PX4-Autopilot","pr":20874,"ma":"2023-01-07T15:39:09Z","oa":"2023-01-06T02:50:44Z"},{"uml":"San Francisco","gm":{"lat":37.7648,"lon":-122.463},"uol":"San Francisco","gop":{"lat":37.7648,"lon":-122.463},"l":"TypeScript","nwo":"medplum/medplum","pr":1380,"ma":"2023-01-07T17:13:04Z","oa":"2023-01-06T04:24:06Z"},{"uml":"Porto Alegre","gm":{"lat":-30.033,"lon":-51.2305},"uol":"Porto Alegre","gop":{"lat":-30.033,"lon":-51.2305},"l":"Lua","nwo":"teal-language/tl","pr":609,"ma":"2023-01-07T17:37:08Z","oa":"2023-01-06T05:08:07Z"},{"uml":"Melbourne","gm":{"lat":-37.8142,"lon":144.9632},"uol":"Melbourne","gop":{"lat":-37.8142,"lon":144.9632},"l":"Kotlin","nwo":"detekt/detekt","pr":5674,"ma":"2023-01-07T11:45:04Z","oa":"2023-01-06T05:52:01Z"},{"uml":"Boston","gm":{"lat":42.3605,"lon":-71.0596},"uol":"Hangzhou","gop":{"lat":30.2741,"lon":120.15507},"l":"Rust","nwo":"apache/arrow-datafusion","pr":4829,"ma":"2023-01-07T15:04:49Z","oa":"2023-01-06T05:58:47Z"},{"uml":"Melbourne","gm":{"lat":-37.8142,"lon":144.9632},"uol":"Melbourne","gop":{"lat":-37.8142,"lon":144.9632},"l":"Kotlin","nwo":"detekt/detekt","pr":5675,"ma":"2023-01-07T11:44:25Z","oa":"2023-01-06T06:27:31Z"},{"uml":"Lincoln","gm":{"lat":40.8001,"lon":-96.6674},"uol":"Lincoln","gop":{"lat":40.8001,"lon":-96.6674},"l":"Java","nwo":"apache/shiro","pr":633,"ma":"2023-01-07T18:54:03Z","oa":"2023-01-06T07:37:17Z"},{"uml":"Xi'an","gm":{"lat":34.26667,"lon":108.9},"uol":"Beijing","gop":{"lat":39.905,"lon":116.39139},"l":"Java","nwo":"apache/doris","pr":15680,"ma":"2023-01-07T12:04:03Z","oa":"2023-01-06T08:07:29Z"},{"uml":"Melbourne","gm":{"lat":-37.8142,"lon":144.9632},"uol":"Melbourne","gop":{"lat":-37.8142,"lon":144.9632},"l":"Kotlin","nwo":"detekt/detekt","pr":5676,"ma":"2023-01-07T11:44:51Z","oa":"2023-01-06T09:15:36Z"},{"uml":"Wuppertal","gm":{"lat":51.26667,"lon":7.18333},"uol":"Wuppertal","gop":{"lat":51.26667,"lon":7.18333},"l":"PHP","nwo":"contao/contao","pr":5633,"ma":"2023-01-07T18:31:44Z","oa":"2023-01-06T09:23:05Z"},{"uml":"Stockholm","gm":{"lat":59.32944,"lon":18.06861},"uol":"Stockholm","gop":{"lat":59.32944,"lon":18.06861},"l":"JavaScript","nwo":"mozilla/pdf.js","pr":15897,"ma":"2023-01-07T15:55:42Z","oa":"2023-01-06T09:35:21Z"},{"uml":"Berlin","gm":{"lat":52.51667,"lon":13.38333},"uol":"Berlin","gop":{"lat":52.51667,"lon":13.38333},"l":"Kotlin","nwo":"Oztechan/CCC","pr":1615,"ma":"2023-01-07T13:04:30Z","oa":"2023-01-06T10:43:35Z"},{"uml":"Tokyo","gm":{"lat":35.68,"lon":139.77},"uol":"Gif-sur-Yvette","gop":{"lat":48.70139,"lon":2.13361},"l":"HTML","nwo":"gnu-octave/packages","pr":230,"ma":"2023-01-07T16:19:32Z","oa":"2023-01-06T11:08:44Z"},{"uml":"Dortmund","gm":{"lat":51.51389,"lon":7.46528},"uol":"Zug","gop":{"lat":47.16917,"lon":8.51639},"l":"JavaScript","nwo":"w3f/Grants-Program","pr":1417,"ma":"2023-01-07T16:17:44Z","oa":"2023-01-06T11:33:07Z"},{"uml":"Bangalore","gm":{"lat":12.96991,"lon":77.59796},"uol":"Bangalore","gop":{"lat":12.96991,"lon":77.59796},"l":"TypeScript","nwo":"vercel/hyper","pr":6964,"ma":"2023-01-07T11:28:52Z","oa":"2023-01-06T11:54:12Z"},{"uml":"Lisbon","gm":{"lat":38.7263,"lon":-9.1484},"uol":"Lisbon","gop":{"lat":38.7263,"lon":-9.1484},"l":"Python","nwo":"saltstack/salt","pr":63422,"ma":"2023-01-07T12:22:11Z","oa":"2023-01-06T12:03:00Z"},{"uml":"Bristol","gm":{"lat":51.4538022,"lon":-2.5972985},"uol":"Bristol","gop":{"lat":51.4538022,"lon":-2.5972985},"l":"Java","nwo":"apache/jena","pr":1707,"ma":"2023-01-07T14:09:31Z","oa":"2023-01-06T12:03:53Z"},{"uml":"Bristol","gm":{"lat":51.4538022,"lon":-2.5972985},"uol":"Bristol","gop":{"lat":51.4538022,"lon":-2.5972985},"l":"Java","nwo":"apache/jena","pr":1709,"ma":"2023-01-07T14:09:15Z","oa":"2023-01-06T12:13:46Z"},{"uml":"Frankfurt","gm":{"lat":50.110644,"lon":8.682092},"uol":"Frankfurt","gop":{"lat":50.110644,"lon":8.682092},"l":"Perl","nwo":"RFD-FHEM/RFFHEM","pr":1142,"ma":"2023-01-07T15:04:11Z","oa":"2023-01-06T12:20:25Z"},{"uml":"Guangzhou","gm":{"lat":23.1288,"lon":113.25898},"uol":"Baotou","gop":{"lat":40.65621,"lon":109.83454},"l":"Java","nwo":"huanghongxun/HMCL","pr":1982,"ma":"2023-01-07T13:34:02Z","oa":"2023-01-06T12:35:32Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"Ruby","nwo":"rubygems/rubygems","pr":6243,"ma":"2023-01-07T11:58:03Z","oa":"2023-01-06T12:37:20Z"},{"uml":"Berlin","gm":{"lat":52.51667,"lon":13.38333},"uol":"Berlin","gop":{"lat":52.51667,"lon":13.38333},"l":"Kotlin","nwo":"Oztechan/CCC","pr":1617,"ma":"2023-01-07T18:09:05Z","oa":"2023-01-06T12:37:40Z"},{"uml":"Philadelphia","gm":{"lat":40.0115,"lon":-75.1327},"uol":"Philadelphia","gop":{"lat":40.0115,"lon":-75.1327},"l":"Java","nwo":"primefaces/primefaces","pr":9596,"ma":"2023-01-07T19:13:04Z","oa":"2023-01-06T12:45:23Z"},{"uml":"Dubai","gm":{"lat":25.2684,"lon":55.2962},"uol":"Dubai","gop":{"lat":25.2684,"lon":55.2962},"l":"C++","nwo":"openvinotoolkit/openvino_contrib","pr":545,"ma":"2023-01-07T11:59:02Z","oa":"2023-01-06T12:51:56Z"},{"uml":"Paraná","gm":{"lat":-24.4313373,"lon":-51.6317605},"uol":"Cuiabá","gop":{"lat":-15.5987,"lon":-56.0991},"l":"Python","nwo":"TadaSoftware/PyNFe","pr":253,"ma":"2023-01-07T13:16:53Z","oa":"2023-01-06T12:53:00Z"},{"uml":"Bristol","gm":{"lat":51.4538022,"lon":-2.5972985},"uol":"Bristol","gop":{"lat":51.4538022,"lon":-2.5972985},"l":"Python","nwo":"pypa/setuptools","pr":3750,"ma":"2023-01-07T18:19:32Z","oa":"2023-01-06T13:25:35Z"},{"uml":"Kyiv","gm":{"lat":50.4501,"lon":30.5241},"uol":"Kyiv","gop":{"lat":50.4501,"lon":30.5241},"l":"Ruby","nwo":"bogdan/datagrid","pr":305,"ma":"2023-01-07T16:55:23Z","oa":"2023-01-06T13:42:53Z"},{"uml":"Beijing","gm":{"lat":39.905,"lon":116.39139},"uol":"Beijing","gop":{"lat":39.905,"lon":116.39139},"l":"C++","nwo":"ossrs/srs","pr":3365,"ma":"2023-01-07T12:36:59Z","oa":"2023-01-06T13:54:20Z"},{"uml":"St. Louis","gm":{"lat":38.63,"lon":-90.19},"uol":"St. Louis","gop":{"lat":38.63,"lon":-90.19},"l":"Julia","nwo":"timholy/SnoopCompile.jl","pr":333,"ma":"2023-01-07T14:19:06Z","oa":"2023-01-06T14:18:52Z"},{"uml":"Shenzhen","gm":{"lat":22.535383,"lon":114.05471},"uol":"Hefei","gop":{"lat":31.86361,"lon":117.27944},"l":"C++","nwo":"ZLMediaKit/ZLMediaKit","pr":2187,"ma":"2023-01-07T13:31:46Z","oa":"2023-01-06T14:39:23Z"},{"uml":"Beijing","gm":{"lat":39.905,"lon":116.39139},"uol":"Beijing","gop":{"lat":39.905,"lon":116.39139},"l":"Python","nwo":"sonic-net/sonic-mgmt","pr":7199,"ma":"2023-01-07T14:05:01Z","oa":"2023-01-06T14:58:02Z"},{"uml":"San Francisco","gm":{"lat":37.7648,"lon":-122.463},"uol":"San Francisco","gop":{"lat":37.7648,"lon":-122.463},"l":"Python","nwo":"pantsbuild/pex","pr":2029,"ma":"2023-01-07T12:28:48Z","oa":"2023-01-06T15:08:28Z"},{"uml":"Bad Reichenhall","gm":{"lat":47.72472,"lon":12.87694},"uol":"Timișoara","gop":{"lat":45.75972,"lon":21.23},"l":"Go","nwo":"cgrates/cgrates","pr":3834,"ma":"2023-01-07T16:49:42Z","oa":"2023-01-06T15:23:47Z"},{"uml":"Atlanta","gm":{"lat":33.7491,"lon":-84.3902},"uol":"Atlanta","gop":{"lat":33.7491,"lon":-84.3902},"l":"Python","nwo":"flyteorg/flytekit","pr":1405,"ma":"2023-01-07T16:01:00Z","oa":"2023-01-06T15:27:57Z"},{"uml":"Raleigh","gm":{"lat":35.7804,"lon":-78.6391},"uol":"Rome","gop":{"lat":41.89306,"lon":12.48278},"l":"Shell","nwo":"github/super-linter","pr":3791,"ma":"2023-01-07T14:15:34Z","oa":"2023-01-06T15:36:08Z"},{"uml":"Malmö","gm":{"lat":55.60556,"lon":13.0},"uol":"Malmö","gop":{"lat":55.60556,"lon":13.0},"l":"C++","nwo":"include-what-you-use/include-what-you-use","pr":1170,"ma":"2023-01-07T11:27:16Z","oa":"2023-01-06T15:46:50Z"},{"uml":"Seattle","gm":{"lat":47.6038,"lon":-122.3301},"uol":"Wilmington","gop":{"lat":34.2257,"lon":-77.9447},"l":"TypeScript","nwo":"microsoft/opensource-management-portal","pr":527,"ma":"2023-01-07T19:18:09Z","oa":"2023-01-06T15:49:46Z"},{"uml":"Norwich","gm":{"lat":52.628606,"lon":1.29227},"uol":"Norwich","gop":{"lat":52.628606,"lon":1.29227},"l":"C++","nwo":"SerenityOS/serenity","pr":16860,"ma":"2023-01-07T11:49:05Z","oa":"2023-01-06T15:57:16Z"},{"uml":"Palisade","gm":{"lat":39.1103,"lon":-108.3509},"uol":"Palisade","gop":{"lat":39.1103,"lon":-108.3509},"l":"Go","nwo":"drud/ddev","pr":4529,"ma":"2023-01-07T15:17:38Z","oa":"2023-01-06T15:58:10Z"},{"uml":"Denver","gm":{"lat":39.7348,"lon":-104.9653},"uol":"Denver","gop":{"lat":39.7348,"lon":-104.9653},"l":"Rust","nwo":"iqlusioninc/yubikey.rs","pr":466,"ma":"2023-01-07T16:35:37Z","oa":"2023-01-06T16:24:12Z"},{"uml":"Hefei","gm":{"lat":31.86361,"lon":117.27944},"uol":"Beijing","gop":{"lat":39.905,"lon":116.39139},"l":"Java","nwo":"apache/incubator-seatunnel","pr":3890,"ma":"2023-01-07T11:32:14Z","oa":"2023-01-06T16:26:08Z"},{"uml":"Pittsburgh","gm":{"lat":40.4417,"lon":-79.9901},"uol":"Pittsburgh","gop":{"lat":40.4417,"lon":-79.9901},"l":"C++","nwo":"flexflow/FlexFlow","pr":548,"ma":"2023-01-07T16:13:19Z","oa":"2023-01-06T16:44:03Z"},{"uml":"Kansas City","gm":{"lat":39.0845,"lon":-94.563},"uol":"Wrocław","gop":{"lat":51.10773,"lon":17.03533},"l":"Python","nwo":"posativ/isso","pr":943,"ma":"2023-01-07T13:59:16Z","oa":"2023-01-06T17:03:41Z"},{"uml":"Toulouse","gm":{"lat":43.60444,"lon":1.44194},"uol":"Toulouse","gop":{"lat":43.60444,"lon":1.44194},"l":"TypeScript","nwo":"sigle/sigle","pr":798,"ma":"2023-01-07T16:01:42Z","oa":"2023-01-06T17:08:08Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"Ruby","nwo":"rubygems/rubygems","pr":6247,"ma":"2023-01-07T11:57:31Z","oa":"2023-01-06T17:12:40Z"},{"uml":"Brno","gm":{"lat":49.19528,"lon":16.60833},"uol":"Brno","gop":{"lat":49.19528,"lon":16.60833},"l":"PHP","nwo":"efabrica-team/phpstan-latte","pr":204,"ma":"2023-01-07T13:25:54Z","oa":"2023-01-06T17:16:30Z"},{"uml":"San Jose","gm":{"lat":37.2751,"lon":-121.8261},"uol":"San Jose","gop":{"lat":37.2751,"lon":-121.8261},"l":"Nix","nwo":"NixOS/nixpkgs","pr":209343,"ma":"2023-01-07T17:12:26Z","oa":"2023-01-06T17:20:30Z"},{"uml":"Tel Aviv","gm":{"lat":32.088545,"lon":34.78254},"uol":"Folsom","gop":{"lat":38.678,"lon":-121.1761},"l":"Python","nwo":"apache/airflow","pr":28771,"ma":"2023-01-07T18:17:02Z","oa":"2023-01-06T17:49:08Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"TypeScript","nwo":"shuding/nextra","pr":1196,"ma":"2023-01-07T16:22:32Z","oa":"2023-01-06T17:59:03Z"},{"uml":"San Jose","gm":{"lat":37.2751,"lon":-121.8261},"uol":"San Jose","gop":{"lat":37.2751,"lon":-121.8261},"l":"Nix","nwo":"NixOS/nixpkgs","pr":209355,"ma":"2023-01-07T17:35:21Z","oa":"2023-01-06T18:32:19Z"},{"uml":"Lyon","gm":{"lat":45.75889,"lon":4.84139},"uol":"Lyon","gop":{"lat":45.75889,"lon":4.84139},"l":"C#","nwo":"sailro/EscapeFromTarkov-Trainer","pr":276,"ma":"2023-01-07T16:03:54Z","oa":"2023-01-06T18:35:42Z"},{"uml":"Ann Arbor","gm":{"lat":42.2682,"lon":-83.7312},"uol":"Kansas City","gop":{"lat":39.0845,"lon":-94.563},"l":"Go","nwo":"99designs/gqlgen","pr":2498,"ma":"2023-01-07T19:00:16Z","oa":"2023-01-06T18:36:29Z"},{"uml":"Las Vegas","gm":{"lat":36.167256,"lon":-115.148516},"uol":"Bangalore","gop":{"lat":12.96991,"lon":77.59796},"l":"Go","nwo":"kubernetes/publishing-bot","pr":309,"ma":"2023-01-07T16:37:28Z","oa":"2023-01-06T18:37:59Z"},{"uml":"Cologne","gm":{"lat":50.94222,"lon":6.95778},"uol":"Cologne","gop":{"lat":50.94222,"lon":6.95778},"l":"Python","nwo":"starlite-api/starlite","pr":1046,"ma":"2023-01-07T13:19:07Z","oa":"2023-01-06T19:10:17Z"},{"uml":"Guangzhou","gm":{"lat":23.1288,"lon":113.25898},"uol":"Baotou","gop":{"lat":40.65621,"lon":109.83454},"l":"Java","nwo":"huanghongxun/HMCL","pr":1983,"ma":"2023-01-07T13:26:01Z","oa":"2023-01-06T19:17:20Z"},{"uml":"Zurich","gm":{"lat":47.37861,"lon":8.54},"uol":"Zurich","gop":{"lat":47.37861,"lon":8.54},"l":"TypeScript","nwo":"ghostfolio/ghostfolio","pr":1577,"ma":"2023-01-07T17:21:10Z","oa":"2023-01-06T19:44:29Z"},{"uml":"Boston","gm":{"lat":42.3605,"lon":-71.0596},"uol":"Boston","gop":{"lat":42.3605,"lon":-71.0596},"l":"Julia","nwo":"SpeedyWeather/SpeedyWeather.jl","pr":216,"ma":"2023-01-07T18:21:29Z","oa":"2023-01-06T20:10:15Z"},{"uml":"Palisade","gm":{"lat":39.1103,"lon":-108.3509},"uol":"Bend","gop":{"lat":44.0582,"lon":-121.3153},"l":"Go","nwo":"drud/ddev","pr":4531,"ma":"2023-01-07T15:21:13Z","oa":"2023-01-06T20:16:26Z"},{"uml":"Ottawa","gm":{"lat":45.421143,"lon":-75.690057},"uol":"Houston","gop":{"lat":29.7589,"lon":-95.3677},"l":"Ruby","nwo":"ruby/uri","pr":52,"ma":"2023-01-07T19:22:31Z","oa":"2023-01-06T20:22:52Z"},{"uml":"Jacksonville","gm":{"lat":30.332184,"lon":-81.655651},"uol":"Jacksonville","gop":{"lat":30.332184,"lon":-81.655651},"l":"Shell","nwo":"unixorn/awesome-zsh-plugins","pr":1655,"ma":"2023-01-07T17:20:34Z","oa":"2023-01-06T20:25:45Z"},{"uml":"The Hague","gm":{"lat":52.079984,"lon":4.311346},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"JavaScript","nwo":"tree-sitter/tree-sitter-scala","pr":88,"ma":"2023-01-07T11:46:48Z","oa":"2023-01-06T20:32:28Z"},{"uml":"Oxford","gm":{"lat":51.75194,"lon":-1.25778},"uol":"Oxford","gop":{"lat":51.75194,"lon":-1.25778},"l":"Ruby","nwo":"discourse/discourse","pr":19776,"ma":"2023-01-07T11:32:01Z","oa":"2023-01-06T20:51:11Z"},{"uml":"Dallas","gm":{"lat":32.7763,"lon":-96.7969},"uol":"Dallas","gop":{"lat":32.7763,"lon":-96.7969},"l":"Svelte","nwo":"skeletonlabs/skeleton","pr":776,"ma":"2023-01-07T18:22:31Z","oa":"2023-01-06T20:53:57Z"},{"uml":"Redmond","gm":{"lat":47.6694,"lon":-122.1239},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"F#","nwo":"fsprojects/FSharp.Data","pr":1470,"ma":"2023-01-07T17:26:11Z","oa":"2023-01-06T21:13:23Z"},{"uml":"Ann Arbor","gm":{"lat":42.2682,"lon":-83.7312},"uol":"Fremont","gop":{"lat":37.5483,"lon":-121.9886},"l":"Python","nwo":"voxel51/fiftyone","pr":2496,"ma":"2023-01-07T17:05:11Z","oa":"2023-01-06T21:14:30Z"},{"uml":"Edinburgh","gm":{"lat":55.9533456,"lon":-3.1883749},"uol":"Edinburgh","gop":{"lat":55.9533456,"lon":-3.1883749},"l":"Go","nwo":"FyshOS/fynedesk","pr":237,"ma":"2023-01-07T15:16:35Z","oa":"2023-01-06T21:25:49Z"},{"uml":"Ukraine","gm":{"lat":49.3227938,"lon":31.320283},"uol":"Los Angeles","gop":{"lat":34.0544,"lon":-118.2439},"l":"HTML","nwo":"home-assistant/home-assistant.io","pr":25614,"ma":"2023-01-07T19:00:15Z","oa":"2023-01-06T21:34:56Z"},{"uml":"Oxford","gm":{"lat":51.75194,"lon":-1.25778},"uol":"Oxford","gop":{"lat":51.75194,"lon":-1.25778},"l":"Python","nwo":"pantsbuild/pants","pr":17940,"ma":"2023-01-07T15:26:06Z","oa":"2023-01-06T21:42:09Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"San Jose","gop":{"lat":37.2751,"lon":-121.8261},"l":"Rust","nwo":"rust-unofficial/awesome-rust","pr":1390,"ma":"2023-01-07T14:22:55Z","oa":"2023-01-06T21:45:06Z"},{"uml":"Épinal","gm":{"lat":48.17361,"lon":6.45167},"uol":"San Francisco","gop":{"lat":37.7648,"lon":-122.463},"l":"HTML","nwo":"vaga/hugo-theme-m10c","pr":102,"ma":"2023-01-07T15:33:18Z","oa":"2023-01-06T21:45:35Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"San Jose","gop":{"lat":37.2751,"lon":-121.8261},"l":"Rust","nwo":"rust-unofficial/awesome-rust","pr":1391,"ma":"2023-01-07T14:24:38Z","oa":"2023-01-06T21:51:25Z"},{"uml":"Tokyo","gm":{"lat":35.68,"lon":139.77},"uol":"Philadelphia","gop":{"lat":40.0115,"lon":-75.1327},"l":"Swift","nwo":"VergeGroup/swift-Verge","pr":330,"ma":"2023-01-07T11:13:14Z","oa":"2023-01-06T21:57:54Z"},{"uml":"Denver","gm":{"lat":39.7348,"lon":-104.9653},"uol":"Cary","gop":{"lat":35.7883,"lon":-78.7812},"l":"Python","nwo":"jointakahe/takahe","pr":367,"ma":"2023-01-07T17:36:36Z","oa":"2023-01-06T22:03:12Z"},{"uml":"Grand Rapids","gm":{"lat":42.9632,"lon":-85.6679},"uol":"Grand Rapids","gop":{"lat":42.9632,"lon":-85.6679},"l":"R","nwo":"pharmaR/riskassessment","pr":332,"ma":"2023-01-07T14:53:29Z","oa":"2023-01-06T22:10:08Z"},{"uml":"Tallinn","gm":{"lat":59.4372,"lon":24.7454},"uol":"Tallinn","gop":{"lat":59.4372,"lon":24.7454},"l":"Java","nwo":"selenide/selenide","pr":2114,"ma":"2023-01-07T13:21:27Z","oa":"2023-01-06T22:16:54Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"Lua","nwo":"koreader/koreader-base","pr":1571,"ma":"2023-01-07T17:34:58Z","oa":"2023-01-06T22:19:28Z"},{"uml":"Cambridge","gm":{"lat":42.3751,"lon":-71.1056},"uol":"San Francisco","gop":{"lat":37.7648,"lon":-122.463},"l":"C++","nwo":"envoyproxy/envoy","pr":24802,"ma":"2023-01-07T16:05:22Z","oa":"2023-01-06T22:22:20Z"},{"uml":"Amsterdam","gm":{"lat":52.378,"lon":4.9},"uol":"Amsterdam","gop":{"lat":52.378,"lon":4.9},"l":"C++","nwo":"duckdb/duckdb","pr":5844,"ma":"2023-01-07T13:06:25Z","oa":"2023-01-06T22:39:16Z"},{"uml":"Seattle","gm":{"lat":47.6038,"lon":-122.3301},"uol":"Seattle","gop":{"lat":47.6038,"lon":-122.3301},"l":"JavaScript","nwo":"visgl/deck.gl","pr":7567,"ma":"2023-01-07T19:07:02Z","oa":"2023-01-06T22:48:44Z"},{"uml":"Dublin","gm":{"lat":53.3425,"lon":-6.26583},"uol":"Dublin","gop":{"lat":53.3425,"lon":-6.26583},"l":"Jupyter Notebook","nwo":"LAION-AI/Open-Assistant","pr":464,"ma":"2023-01-07T13:43:59Z","oa":"2023-01-06T23:25:21Z"},{"uml":"Seattle","gm":{"lat":47.6038,"lon":-122.3301},"uol":"Seattle","gop":{"lat":47.6038,"lon":-122.3301},"l":"JavaScript","nwo":"visgl/deck.gl","pr":7568,"ma":"2023-01-07T19:07:18Z","oa":"2023-01-06T23:26:30Z"},{"uml":"Copenhagen","gm":{"lat":55.67611,"lon":12.56889},"uol":"Victoria","gop":{"lat":48.428318,"lon":-123.364953},"l":"C++","nwo":"godotengine/godot","pr":71011,"ma":"2023-01-07T12:22:09Z","oa":"2023-01-06T23:59:18Z"},{"uml":"Denver","gm":{"lat":39.7348,"lon":-104.9653},"uol":"Denver","gop":{"lat":39.7348,"lon":-104.9653},"l":"C++","nwo":"SFML/SFML","pr":2338,"ma":"2023-01-07T18:28:37Z","oa":"2023-01-07T00:22:35Z"},{"uml":"Dublin","gm":{"lat":53.3425,"lon":-6.26583},"uol":"Dublin","gop":{"lat":53.3425,"lon":-6.26583},"l":"Jupyter Notebook","nwo":"LAION-AI/Open-Assistant","pr":468,"ma":"2023-01-07T13:54:16Z","oa":"2023-01-07T00:30:25Z"},{"uml":"Geneva","gm":{"lat":46.2,"lon":6.15},"uol":"Groningen","gop":{"lat":53.2167,"lon":6.5667},"l":"C++","nwo":"citizenfx/fivem","pr":1786,"ma":"2023-01-07T13:20:05Z","oa":"2023-01-07T00:55:38Z"},{"uml":"Barcelona","gm":{"lat":41.3825,"lon":2.17694},"uol":"Barcelona","gop":{"lat":41.3825,"lon":2.17694},"l":"Java","nwo":"hibernate/hibernate-orm","pr":5917,"ma":"2023-01-07T14:02:42Z","oa":"2023-01-07T01:59:23Z"},{"uml":"Seattle","gm":{"lat":47.6038,"lon":-122.3301},"uol":"Seattle","gop":{"lat":47.6038,"lon":-122.3301},"l":"Java","nwo":"opensearch-project/OpenSearch","pr":5745,"ma":"2023-01-07T19:24:41Z","oa":"2023-01-07T02:02:43Z"},{"uml":"Beijing","gm":{"lat":39.905,"lon":116.39139},"uol":"Xi'an","gop":{"lat":34.26667,"lon":108.9},"l":"Go","nwo":"yunionio/cloudpods","pr":15729,"ma":"2023-01-07T12:56:17Z","oa":"2023-01-07T02:03:28Z"},{"uml":"Beijing","gm":{"lat":39.905,"lon":116.39139},"uol":"Xi'an","gop":{"lat":34.26667,"lon":108.9},"l":"Go","nwo":"yunionio/cloudpods","pr":15730,"ma":"2023-01-07T12:56:34Z","oa":"2023-01-07T02:05:16Z"},{"uml":"Beijing","gm":{"lat":39.905,"lon":116.39139},"uol":"Xi'an","gop":{"lat":34.26667,"lon":108.9},"l":"Go","nwo":"yunionio/cloudpods","pr":15731,"ma":"2023-01-07T12:56:24Z","oa":"2023-01-07T02:05:35Z"},{"uml":"Birmingham","gm":{"lat":52.4796992,"lon":-1.9026911},"uol":"Illinois","gop":{"lat":40.1492929,"lon":-89.2749461},"l":"JavaScript","nwo":"bitfocus/companion","pr":2267,"ma":"2023-01-07T12:18:36Z","oa":"2023-01-07T02:24:11Z"},{"uml":"Hangzhou","gm":{"lat":30.2741,"lon":120.15507},"uol":"Hangzhou","gop":{"lat":30.2741,"lon":120.15507},"l":"JavaScript","nwo":"cnpm/npminstall","pr":435,"ma":"2023-01-07T17:19:32Z","oa":"2023-01-07T03:07:03Z"},{"uml":"Cupertino","gm":{"lat":37.323,"lon":-122.0323},"uol":"Kanagawa","gop":{"lat":35.44751,"lon":139.64234},"l":"Haskell","nwo":"mihaimaruseac/hindent","pr":664,"ma":"2023-01-07T16:11:02Z","oa":"2023-01-07T03:24:19Z"},{"uml":"Oslo","gm":{"lat":59.855058,"lon":10.814466},"uol":"New York City","gop":{"lat":40.7306,"lon":-73.9866},"l":"TypeScript","nwo":"facebook/jest","pr":13740,"ma":"2023-01-07T12:52:51Z","oa":"2023-01-07T03:40:26Z"},{"uml":"São Paulo","gm":{"lat":-23.5507,"lon":-46.6334},"uol":"São Paulo","gop":{"lat":-23.5507,"lon":-46.6334},"l":"Nix","nwo":"NixOS/nixpkgs","pr":209411,"ma":"2023-01-07T13:34:32Z","oa":"2023-01-07T03:50:42Z"},{"uml":"Toronto","gm":{"lat":43.653482,"lon":-79.383935},"uol":"Toronto","gop":{"lat":43.653482,"lon":-79.383935},"l":"Python","nwo":"osuAkatsuki/bancho.py","pr":326,"ma":"2023-01-07T13:38:29Z","oa":"2023-01-07T05:26:57Z"},{"uml":"Toronto","gm":{"lat":43.653482,"lon":-79.383935},"uol":"Toronto","gop":{"lat":43.653482,"lon":-79.383935},"l":"Markdown","nwo":"tldr-pages/tldr","pr":9735,"ma":"2023-01-07T14:22:36Z","oa":"2023-01-07T06:24:25Z"},{"uml":"Toronto","gm":{"lat":43.653482,"lon":-79.383935},"uol":"Toronto","gop":{"lat":43.653482,"lon":-79.383935},"l":"Markdown","nwo":"tldr-pages/tldr","pr":9736,"ma":"2023-01-07T12:09:06Z","oa":"2023-01-07T06:32:38Z"},{"uml":"Inagua","gm":{"lat":21.07681,"lon":-73.28705},"uol":"Guangzhou","gop":{"lat":23.1288,"lon":113.25898},"l":"Rust","nwo":"datafuselabs/databend","pr":9500,"ma":"2023-01-07T11:57:28Z","oa":"2023-01-07T07:01:13Z"},{"uml":"Hamburg","gm":{"lat":53.55,"lon":10.0},"uol":"Hamburg","gop":{"lat":53.55,"lon":10.0},"l":"C++","nwo":"tenzir/vast","pr":2840,"ma":"2023-01-07T17:46:16Z","oa":"2023-01-07T07:35:24Z"},{"uml":"Seattle","gm":{"lat":47.6038,"lon":-122.3301},"uol":"Seattle","gop":{"lat":47.6038,"lon":-122.3301},"l":"C++","nwo":"dartsim/dart","pr":1731,"ma":"2023-01-07T16:54:11Z","oa":"2023-01-07T07:59:31Z"},{"uml":"New York City","gm":{"lat":40.7306,"lon":-73.9866},"uol":"Georgetown","gop":{"lat":30.6327,"lon":-97.6772},"l":"Ruby","nwo":"chromebrew/chromebrew","pr":7816,"ma":"2023-01-07T11:27:15Z","oa":"2023-01-07T08:05:09Z"},{"uml":"Brno","gm":{"lat":49.19528,"lon":16.60833},"uol":"Brno","gop":{"lat":49.19528,"lon":16.60833},"l":"Java","nwo":"apache/camel","pr":9011,"ma":"2023-01-07T11:30:08Z","oa":"2023-01-07T08:22:46Z"},{"uml":"Seattle","gm":{"lat":47.6038,"lon":-122.3301},"uol":"Seattle","gop":{"lat":47.6038,"lon":-122.3301},"l":"C++","nwo":"dartsim/dart","pr":1732,"ma":"2023-01-07T16:55:54Z","oa":"2023-01-07T08:29:43Z"},{"uml":"Seattle","gm":{"lat":47.6038,"lon":-122.3301},"uol":"Seattle","gop":{"lat":47.6038,"lon":-122.3301},"l":"C++","nwo":"dartsim/dart","pr":1733,"ma":"2023-01-07T16:56:42Z","oa":"2023-01-07T08:44:15Z"},{"uml":"Stockholm","gm":{"lat":59.32944,"lon":18.06861},"uol":"Stockholm","gop":{"lat":59.32944,"lon":18.06861},"l":"Rust","nwo":"kaj/rsass","pr":164,"ma":"2023-01-07T13:31:16Z","oa":"2023-01-07T08:44:34Z"},{"uml":"Las Vegas","gm":{"lat":36.167256,"lon":-115.148516},"uol":"Bangalore","gop":{"lat":12.96991,"lon":77.59796},"l":"Go","nwo":"kubernetes/kubernetes","pr":114892,"ma":"2023-01-07T12:31:27Z","oa":"2023-01-07T08:45:51Z"},{"uml":"Munich","gm":{"lat":48.13333,"lon":11.56667},"uol":"Munich","gop":{"lat":48.13333,"lon":11.56667},"l":"Rust","nwo":"swsnr/mdcat","pr":232,"ma":"2023-01-07T12:46:31Z","oa":"2023-01-07T08:51:13Z"},{"uml":"Berlin","gm":{"lat":52.51667,"lon":13.38333},"uol":"Milan","gop":{"lat":45.4668,"lon":9.1905},"l":"JavaScript","nwo":"emad-elsaid/xlog","pr":21,"ma":"2023-01-07T18:21:49Z","oa":"2023-01-07T09:11:19Z"},{"uml":"Monza","gm":{"lat":45.58472,"lon":9.27361},"uol":"Monza","gop":{"lat":45.58472,"lon":9.27361},"l":"Python","nwo":"kivy/kivy","pr":8099,"ma":"2023-01-07T12:53:57Z","oa":"2023-01-07T09:15:01Z"},{"uml":"Apex","gm":{"lat":35.7325,"lon":-78.8506},"uol":"San Jose","gop":{"lat":37.2751,"lon":-121.8261},"l":"C","nwo":"microsoft/msquic","pr":3333,"ma":"2023-01-07T13:13:23Z","oa":"2023-01-07T09:29:36Z"},{"uml":"Edinburgh","gm":{"lat":55.9533456,"lon":-3.1883749},"uol":"Edinburgh","gop":{"lat":55.9533456,"lon":-3.1883749},"l":"Python","nwo":"Textualize/textual","pr":1513,"ma":"2023-01-07T15:42:43Z","oa":"2023-01-07T09:30:47Z"},{"uml":"Oxford","gm":{"lat":51.752013,"lon":-1.25785},"uol":"Shanghai","gop":{"lat":31.16667,"lon":121.46667},"l":"Rust","nwo":"charliermarsh/ruff","pr":1712,"ma":"2023-01-07T12:33:25Z","oa":"2023-01-07T09:32:04Z"},{"uml":"Edinburgh","gm":{"lat":55.9533456,"lon":-3.1883749},"uol":"Edinburgh","gop":{"lat":55.9533456,"lon":-3.1883749},"l":"Python","nwo":"Textualize/textual","pr":1514,"ma":"2023-01-07T15:43:15Z","oa":"2023-01-07T09:33:34Z"},{"uml":"Zurich","gm":{"lat":47.37861,"lon":8.54},"uol":"Zurich","gop":{"lat":47.37861,"lon":8.54},"l":"Elixir","nwo":"coryodaniel/k8s","pr":205,"ma":"2023-01-07T12:00:34Z","oa":"2023-01-07T09:35:13Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"C#","nwo":"Ryujinx/Ryujinx","pr":4222,"ma":"2023-01-07T11:24:21Z","oa":"2023-01-07T10:11:46Z"},{"uml":"Iowa City","gm":{"lat":41.661256,"lon":-91.529911},"uol":"Iowa City","gop":{"lat":41.661256,"lon":-91.529911},"l":"Ruby","nwo":"karafka/karafka","pr":1256,"ma":"2023-01-07T15:29:53Z","oa":"2023-01-07T10:16:02Z"},{"uml":"Sunnyvale","gm":{"lat":37.3688,"lon":-122.0363},"uol":"Sunnyvale","gop":{"lat":37.3688,"lon":-122.0363},"l":"TypeScript","nwo":"deathandmayhem/jolly-roger","pr":1303,"ma":"2023-01-07T14:03:39Z","oa":"2023-01-07T10:25:16Z"},{"uml":"Perth","gm":{"lat":-31.9527,"lon":115.8605},"uol":"Perth","gop":{"lat":-31.9527,"lon":115.8605},"l":"JavaScript","nwo":"is-a-dev/register","pr":4443,"ma":"2023-01-07T11:11:24Z","oa":"2023-01-07T10:30:38Z"},{"uml":"Brugelette","gm":{"lat":50.5959261,"lon":3.8525914},"uol":"Brugelette","gop":{"lat":50.5959261,"lon":3.8525914},"l":"C++","nwo":"rizonesoft/Notepad3","pr":4468,"ma":"2023-01-07T11:55:24Z","oa":"2023-01-07T10:33:17Z"},{"uml":"Mannheim","gm":{"lat":49.48361,"lon":8.46306},"uol":"Lucerne","gop":{"lat":47.04972,"lon":8.3},"l":"Java","nwo":"buchen/portfolio","pr":3112,"ma":"2023-01-07T11:54:18Z","oa":"2023-01-07T10:33:59Z"},{"uml":"Bournemouth","gm":{"lat":50.72,"lon":-1.88},"uol":"Bournemouth","gop":{"lat":50.72,"lon":-1.88},"l":"TypeScript","nwo":"nocodb/nocodb","pr":4775,"ma":"2023-01-07T17:36:16Z","oa":"2023-01-07T10:36:56Z"},{"uml":"Brighton","gm":{"lat":50.82417,"lon":-0.13389},"uol":"Brighton","gop":{"lat":50.82417,"lon":-0.13389},"l":"HTML","nwo":"gnu-octave/packages","pr":231,"ma":"2023-01-07T12:42:45Z","oa":"2023-01-07T10:37:36Z"},{"uml":"Riga","gm":{"lat":56.9475,"lon":24.10694},"uol":"Riga","gop":{"lat":56.9475,"lon":24.10694},"l":"Markdown","nwo":"raspibolt/raspibolt","pr":1224,"ma":"2023-01-07T13:54:26Z","oa":"2023-01-07T10:42:11Z"},{"uml":"United States","gm":{"lat":39.3812661,"lon":-97.9222112},"uol":"United States","gop":{"lat":39.3812661,"lon":-97.9222112},"l":"Python","nwo":"piccolo-orm/piccolo","pr":746,"ma":"2023-01-07T15:39:17Z","oa":"2023-01-07T10:53:13Z"},{"uml":"Brno","gm":{"lat":49.192244,"lon":16.611338},"uol":"Brno","gop":{"lat":49.192244,"lon":16.611338},"l":"Dart","nwo":"ente-io/photos-app","pr":785,"ma":"2023-01-07T11:29:49Z","oa":"2023-01-07T11:03:56Z"},{"uml":"Buenos Aires","gm":{"lat":-34.59972,"lon":-58.38194},"uol":"Honolulu","gop":{"lat":21.3045,"lon":-157.8557},"l":"C","nwo":"GenericMappingTools/gmt","pr":7196,"ma":"2023-01-07T12:57:30Z","oa":"2023-01-07T11:09:21Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"C#","nwo":"Jackett/Jackett","pr":13858,"ma":"2023-01-07T11:23:39Z","oa":"2023-01-07T11:11:03Z"},{"uml":"Munich","gm":{"lat":48.13333,"lon":11.56667},"uol":"Munich","gop":{"lat":48.13333,"lon":11.56667},"l":"Rust","nwo":"paradigmxyz/reth","pr":761,"ma":"2023-01-07T12:36:14Z","oa":"2023-01-07T11:11:17Z"},{"uml":"Waterloo","gm":{"lat":42.497969,"lon":-92.332964},"uol":"Waterloo","gop":{"lat":42.497969,"lon":-92.332964},"l":"C++","nwo":"moneymanagerex/moneymanagerex","pr":5502,"ma":"2023-01-07T11:11:45Z","oa":"2023-01-07T11:11:41Z"},{"uml":"Gothenburg","gm":{"lat":57.70694,"lon":11.96667},"uol":"Gothenburg","gop":{"lat":57.70694,"lon":11.96667},"l":"Scala","nwo":"lichess-org/scalachess","pr":344,"ma":"2023-01-07T11:21:23Z","oa":"2023-01-07T11:16:48Z"},{"uml":"Seoul","gm":{"lat":37.58333,"lon":127.0},"uol":"Seoul","gop":{"lat":37.58333,"lon":127.0},"l":"Rust","nwo":"gluesql/gluesql","pr":1056,"ma":"2023-01-07T11:32:06Z","oa":"2023-01-07T11:17:18Z"},{"uml":"Chemnitz","gm":{"lat":50.83333,"lon":12.91667},"uol":"Chemnitz","gop":{"lat":50.83333,"lon":12.91667},"l":"Dart","nwo":"kubenav/kubenav","pr":433,"ma":"2023-01-07T14:23:39Z","oa":"2023-01-07T11:17:55Z"},{"uml":"Munich","gm":{"lat":48.13333,"lon":11.56667},"uol":"Munich","gop":{"lat":48.13333,"lon":11.56667},"l":"C++","nwo":"RPCS3/rpcs3","pr":13177,"ma":"2023-01-07T15:07:42Z","oa":"2023-01-07T11:19:18Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"C#","nwo":"Jackett/Jackett","pr":13859,"ma":"2023-01-07T11:35:44Z","oa":"2023-01-07T11:19:44Z"},{"uml":"Toronto","gm":{"lat":43.653482,"lon":-79.383935},"uol":"Toronto","gop":{"lat":43.653482,"lon":-79.383935},"l":"Python","nwo":"osuAkatsuki/bancho.py","pr":329,"ma":"2023-01-07T12:29:42Z","oa":"2023-01-07T11:20:26Z"},{"uml":"New York City","gm":{"lat":40.7306,"lon":-73.9866},"uol":"New York City","gop":{"lat":40.7306,"lon":-73.9866},"l":"JavaScript","nwo":"jsdom/jsdom","pr":3489,"ma":"2023-01-07T11:51:32Z","oa":"2023-01-07T11:20:47Z"},{"uml":"Waterloo","gm":{"lat":42.497969,"lon":-92.332964},"uol":"Waterloo","gop":{"lat":42.497969,"lon":-92.332964},"l":"C++","nwo":"moneymanagerex/moneymanagerex","pr":5503,"ma":"2023-01-07T11:21:48Z","oa":"2023-01-07T11:21:43Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"Go","nwo":"PaulSonOfLars/gotgbot","pr":72,"ma":"2023-01-07T11:26:56Z","oa":"2023-01-07T11:21:48Z"},{"uml":"Berlin","gm":{"lat":52.51667,"lon":13.38333},"uol":"Berlin","gop":{"lat":52.51667,"lon":13.38333},"l":"R","nwo":"IndrajeetPatil/statsExpressions","pr":219,"ma":"2023-01-07T11:52:49Z","oa":"2023-01-07T11:23:19Z"},{"uml":"Seoul","gm":{"lat":37.58333,"lon":127.0},"uol":"Seoul","gop":{"lat":37.58333,"lon":127.0},"l":"Rust","nwo":"gluesql/gluesql","pr":1057,"ma":"2023-01-07T11:38:05Z","oa":"2023-01-07T11:25:52Z"},{"uml":"New York City","gm":{"lat":40.7306,"lon":-73.9866},"uol":"New York City","gop":{"lat":40.7306,"lon":-73.9866},"l":"Python","nwo":"ibis-project/ibis","pr":5157,"ma":"2023-01-07T11:59:13Z","oa":"2023-01-07T11:27:59Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"Scala","nwo":"gnieh/fs2-data","pr":432,"ma":"2023-01-07T11:42:51Z","oa":"2023-01-07T11:39:53Z"},{"uml":"Hanover","gm":{"lat":52.374478,"lon":9.738553},"uol":"Hanover","gop":{"lat":52.374478,"lon":9.738553},"l":"PHP","nwo":"Traewelling/traewelling","pr":1286,"ma":"2023-01-07T11:46:59Z","oa":"2023-01-07T11:40:59Z"},{"uml":"Glasgow","gm":{"lat":55.8609825,"lon":-4.2488787},"uol":"Glasgow","gop":{"lat":55.8609825,"lon":-4.2488787},"l":"PHP","nwo":"duncanmcclean/simple-commerce","pr":777,"ma":"2023-01-07T11:55:42Z","oa":"2023-01-07T11:42:39Z"},{"uml":"Glasgow","gm":{"lat":55.8609825,"lon":-4.2488787},"uol":"Glasgow","gop":{"lat":55.8609825,"lon":-4.2488787},"l":"PHP","nwo":"duncanmcclean/simple-commerce","pr":778,"ma":"2023-01-07T11:43:22Z","oa":"2023-01-07T11:43:17Z"},{"uml":"Hesse","gm":{"lat":50.66611,"lon":8.59111},"uol":"British Columbia","gop":{"lat":55.1712153,"lon":-125.0227965},"l":"JavaScript","nwo":"2Abendsegler/GClh","pr":2270,"ma":"2023-01-07T17:28:06Z","oa":"2023-01-07T11:47:44Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"HCL","nwo":"ministryofjustice/cloud-platform-environments","pr":9708,"ma":"2023-01-07T11:51:44Z","oa":"2023-01-07T11:47:58Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"Svelte","nwo":"mxdvl/mxdvl","pr":161,"ma":"2023-01-07T13:03:04Z","oa":"2023-01-07T11:49:06Z"},{"uml":"New York City","gm":{"lat":40.7306,"lon":-73.9866},"uol":"New York City","gop":{"lat":40.7306,"lon":-73.9866},"l":"JavaScript","nwo":"jsdom/jsdom","pr":3490,"ma":"2023-01-07T13:28:20Z","oa":"2023-01-07T11:51:17Z"},{"uml":"New York City","gm":{"lat":40.7306,"lon":-73.9866},"uol":"New York City","gop":{"lat":40.7306,"lon":-73.9866},"l":"Nix","nwo":"nix-community/poetry2nix","pr":928,"ma":"2023-01-07T12:35:47Z","oa":"2023-01-07T11:56:29Z"},{"uml":"Trondheim","gm":{"lat":63.44,"lon":10.4},"uol":"Trondheim","gop":{"lat":63.44,"lon":10.4},"l":"Java","nwo":"vespa-engine/vespa","pr":25440,"ma":"2023-01-07T12:03:23Z","oa":"2023-01-07T12:01:02Z"},{"uml":"Perth","gm":{"lat":-31.9527,"lon":115.8605},"uol":"Perth","gop":{"lat":-31.9527,"lon":115.8605},"l":"JavaScript","nwo":"is-a-dev/register","pr":4445,"ma":"2023-01-07T12:46:30Z","oa":"2023-01-07T12:04:47Z"},{"uml":"Cambridge","gm":{"lat":52.2034823,"lon":0.1235817},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"HTML","nwo":"SeldonIO/seldon-core","pr":4559,"ma":"2023-01-07T14:06:23Z","oa":"2023-01-07T12:06:23Z"},{"uml":"Dubai","gm":{"lat":25.2684,"lon":55.2962},"uol":"Dubai","gop":{"lat":25.2684,"lon":55.2962},"l":"C++","nwo":"openvinotoolkit/openvino_contrib","pr":548,"ma":"2023-01-07T12:06:51Z","oa":"2023-01-07T12:06:44Z"},{"uml":"Brno","gm":{"lat":49.19528,"lon":16.60833},"uol":"Brno","gop":{"lat":49.19528,"lon":16.60833},"l":"Shell","nwo":"void-linux/void-packages","pr":41505,"ma":"2023-01-07T18:38:26Z","oa":"2023-01-07T12:11:41Z"},{"uml":"Lille","gm":{"lat":50.63194,"lon":3.0575},"uol":"Lyon","gop":{"lat":45.75889,"lon":4.84139},"l":"PHP","nwo":"symfony/symfony","pr":48904,"ma":"2023-01-07T16:59:49Z","oa":"2023-01-07T12:12:55Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"Ruby","nwo":"rubygems/rubygems","pr":6249,"ma":"2023-01-07T14:32:16Z","oa":"2023-01-07T12:15:25Z"},{"uml":"New York City","gm":{"lat":40.7306,"lon":-73.9866},"uol":"New York City","gop":{"lat":40.7306,"lon":-73.9866},"l":"Python","nwo":"ibis-project/ibis","pr":5159,"ma":"2023-01-07T13:53:14Z","oa":"2023-01-07T12:19:26Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"Python","nwo":"karlicoss/promnesia","pr":352,"ma":"2023-01-07T12:24:32Z","oa":"2023-01-07T12:24:26Z"},{"uml":"Glasgow","gm":{"lat":55.8609825,"lon":-4.2488787},"uol":"Glasgow","gop":{"lat":55.8609825,"lon":-4.2488787},"l":"PHP","nwo":"duncanmcclean/simple-commerce","pr":779,"ma":"2023-01-07T12:44:07Z","oa":"2023-01-07T12:26:42Z"},{"uml":"Nashville","gm":{"lat":36.1622,"lon":-86.7744},"uol":"Riga","gop":{"lat":56.9475,"lon":24.10694},"l":"Python","nwo":"blakeblackshear/frigate","pr":4946,"ma":"2023-01-07T13:21:18Z","oa":"2023-01-07T12:28:12Z"},{"uml":"Munich","gm":{"lat":48.13333,"lon":11.56667},"uol":"Munich","gop":{"lat":48.13333,"lon":11.56667},"l":"Rust","nwo":"foundry-rs/foundry","pr":4052,"ma":"2023-01-07T15:23:02Z","oa":"2023-01-07T12:31:02Z"},{"uml":"Ukraine","gm":{"lat":49.3227938,"lon":31.320283},"uol":"Dresden","gop":{"lat":51.049329,"lon":13.738144},"l":"HTML","nwo":"home-assistant/home-assistant.io","pr":25623,"ma":"2023-01-07T14:31:09Z","oa":"2023-01-07T12:33:26Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"Norwich","gop":{"lat":52.628606,"lon":1.29227},"l":"C++","nwo":"SerenityOS/serenity","pr":16883,"ma":"2023-01-07T13:39:30Z","oa":"2023-01-07T12:40:34Z"},{"uml":"Glasgow","gm":{"lat":55.8609825,"lon":-4.2488787},"uol":"Glasgow","gop":{"lat":55.8609825,"lon":-4.2488787},"l":"PHP","nwo":"duncanmcclean/simple-commerce","pr":781,"ma":"2023-01-07T12:43:54Z","oa":"2023-01-07T12:43:49Z"},{"uml":"Berlin","gm":{"lat":52.51667,"lon":13.38333},"uol":"Berlin","gop":{"lat":52.51667,"lon":13.38333},"l":"Scala","nwo":"apache/incubator-pekko","pr":90,"ma":"2023-01-07T13:48:21Z","oa":"2023-01-07T12:47:21Z"},{"uml":"New York City","gm":{"lat":40.7306,"lon":-73.9866},"uol":"New York City","gop":{"lat":40.7306,"lon":-73.9866},"l":"Python","nwo":"ibis-project/ibis","pr":5160,"ma":"2023-01-07T13:12:05Z","oa":"2023-01-07T12:47:55Z"},{"uml":"Saitama","gm":{"lat":35.86167,"lon":139.64528},"uol":"Saitama","gop":{"lat":35.86167,"lon":139.64528},"l":"Elm","nwo":"harehare/textusm","pr":2533,"ma":"2023-01-07T13:10:36Z","oa":"2023-01-07T12:50:47Z"},{"uml":"Copenhagen","gm":{"lat":55.686724,"lon":12.570072},"uol":"Bangalore","gop":{"lat":12.97912,"lon":77.5913},"l":"TypeScript","nwo":"SigNoz/signoz","pr":1996,"ma":"2023-01-07T15:26:09Z","oa":"2023-01-07T12:52:55Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"C#","nwo":"Jackett/Jackett","pr":13861,"ma":"2023-01-07T13:52:15Z","oa":"2023-01-07T12:52:56Z"},{"uml":"Barcelona","gm":{"lat":41.3825,"lon":2.17694},"uol":"Barcelona","gop":{"lat":41.3825,"lon":2.17694},"l":"PHP","nwo":"box-project/box","pr":759,"ma":"2023-01-07T13:29:42Z","oa":"2023-01-07T12:53:52Z"},{"uml":"Cambridge","gm":{"lat":42.3751,"lon":-71.1056},"uol":"Cambridge","gop":{"lat":42.3751,"lon":-71.1056},"l":"Jupyter Notebook","nwo":"JuliaClimate/Notebooks","pr":102,"ma":"2023-01-07T15:49:51Z","oa":"2023-01-07T12:56:34Z"},{"uml":"Tokyo","gm":{"lat":35.68,"lon":139.77},"uol":"Tokyo","gop":{"lat":35.68,"lon":139.77},"l":"Python","nwo":"enthought/comtypes","pr":461,"ma":"2023-01-07T14:31:13Z","oa":"2023-01-07T12:58:09Z"},{"uml":"Philadelphia","gm":{"lat":40.0115,"lon":-75.1327},"uol":"Philadelphia","gop":{"lat":40.0115,"lon":-75.1327},"l":"Java","nwo":"primefaces/primefaces","pr":9607,"ma":"2023-01-07T18:44:17Z","oa":"2023-01-07T12:58:47Z"},{"uml":"Loveland","gm":{"lat":40.3978,"lon":-105.075},"uol":"Loveland","gop":{"lat":40.3978,"lon":-105.075},"l":"PowerShell","nwo":"jenkinsci/bom","pr":1676,"ma":"2023-01-07T14:16:26Z","oa":"2023-01-07T13:11:33Z"},{"uml":"Shanghai","gm":{"lat":31.16667,"lon":121.46667},"uol":"Shanghai","gop":{"lat":31.16667,"lon":121.46667},"l":"Rust","nwo":"PyO3/maturin","pr":1394,"ma":"2023-01-07T14:02:49Z","oa":"2023-01-07T13:13:36Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"Haskell","nwo":"commercialhaskell/stack","pr":6019,"ma":"2023-01-07T14:14:37Z","oa":"2023-01-07T13:16:29Z"},{"uml":"Berlin","gm":{"lat":52.51667,"lon":13.38333},"uol":"Berlin","gop":{"lat":52.51667,"lon":13.38333},"l":"Kotlin","nwo":"Oztechan/CCC","pr":1627,"ma":"2023-01-07T14:56:23Z","oa":"2023-01-07T13:19:03Z"},{"uml":"Guangzhou","gm":{"lat":23.1288,"lon":113.25898},"uol":"Baotou","gop":{"lat":40.65621,"lon":109.83454},"l":"Java","nwo":"huanghongxun/HMCL","pr":1986,"ma":"2023-01-07T13:33:16Z","oa":"2023-01-07T13:20:54Z"},{"uml":"Philadelphia","gm":{"lat":40.0115,"lon":-75.1327},"uol":"Philadelphia","gop":{"lat":40.0115,"lon":-75.1327},"l":"CSS","nwo":"primefaces/primereact","pr":3931,"ma":"2023-01-07T13:21:42Z","oa":"2023-01-07T13:21:37Z"},{"uml":"Osaka-shi","gm":{"lat":34.69361,"lon":135.50194},"uol":"Osaka-shi","gop":{"lat":34.69361,"lon":135.50194},"l":"TypeScript","nwo":"bestofjs/javascript-risingstars","pr":112,"ma":"2023-01-07T13:26:15Z","oa":"2023-01-07T13:23:21Z"},{"uml":"Oak Park","gm":{"lat":41.885,"lon":-87.7845},"uol":"Urbana","gop":{"lat":40.1117,"lon":-88.2073},"l":"Python","nwo":"conda-forge/admin-requests","pr":541,"ma":"2023-01-07T13:36:11Z","oa":"2023-01-07T13:25:22Z"},{"uml":"Zurich","gm":{"lat":47.37861,"lon":8.54},"uol":"Zurich","gop":{"lat":47.37861,"lon":8.54},"l":"TypeScript","nwo":"ghostfolio/ghostfolio","pr":1578,"ma":"2023-01-07T16:06:43Z","oa":"2023-01-07T13:27:51Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"HCL","nwo":"ministryofjustice/cloud-platform-environments","pr":9709,"ma":"2023-01-07T13:31:59Z","oa":"2023-01-07T13:29:09Z"},{"uml":"Toulouse","gm":{"lat":43.60444,"lon":1.44194},"uol":"Toulouse","gop":{"lat":43.60444,"lon":1.44194},"l":"PHP","nwo":"Pixilib/GaelO","pr":599,"ma":"2023-01-07T13:33:46Z","oa":"2023-01-07T13:33:38Z"},{"uml":"Tokyo","gm":{"lat":35.68,"lon":139.77},"uol":"Tokyo","gop":{"lat":35.68,"lon":139.77},"l":"TypeScript","nwo":"TrainLCD/MobileApp","pr":1934,"ma":"2023-01-07T13:35:41Z","oa":"2023-01-07T13:35:10Z"},{"uml":"Tokyo","gm":{"lat":35.68,"lon":139.77},"uol":"Tokyo","gop":{"lat":35.68,"lon":139.77},"l":"Go","nwo":"hajimehoshi/ebiten","pr":2530,"ma":"2023-01-07T14:22:56Z","oa":"2023-01-07T13:35:53Z"},{"uml":"Shanghai","gm":{"lat":31.16667,"lon":121.46667},"uol":"Shanghai","gop":{"lat":31.16667,"lon":121.46667},"l":"Lua","nwo":"xmake-io/xmake","pr":3260,"ma":"2023-01-07T14:11:13Z","oa":"2023-01-07T13:36:38Z"},{"uml":"Buenos Aires","gm":{"lat":-34.59972,"lon":-58.38194},"uol":"Buenos Aires","gop":{"lat":-34.59972,"lon":-58.38194},"l":"Nix","nwo":"gvolpe/nix-config","pr":121,"ma":"2023-01-07T15:33:18Z","oa":"2023-01-07T13:37:30Z"},{"uml":"Saint Petersburg","gm":{"lat":59.95,"lon":30.31667},"uol":"Saint Petersburg","gop":{"lat":59.95,"lon":30.31667},"l":"Shell","nwo":"bakaut/glaber","pr":46,"ma":"2023-01-07T13:41:15Z","oa":"2023-01-07T13:40:58Z"},{"uml":"Berlin","gm":{"lat":52.51667,"lon":13.38333},"uol":"Berlin","gop":{"lat":52.51667,"lon":13.38333},"l":"Python","nwo":"common-workflow-language/cwltest","pr":157,"ma":"2023-01-07T13:49:18Z","oa":"2023-01-07T13:41:41Z"},{"uml":"Cork","gm":{"lat":51.9,"lon":-8.47306},"uol":"Cork","gop":{"lat":51.9,"lon":-8.47306},"l":"TypeScript","nwo":"hpcc-systems/hpcc-js-wasm","pr":144,"ma":"2023-01-07T13:49:01Z","oa":"2023-01-07T13:42:02Z"},{"uml":"Hangzhou","gm":{"lat":30.2741,"lon":120.15507},"uol":"Hangzhou","gop":{"lat":30.2741,"lon":120.15507},"l":"TypeScript","nwo":"youzan/vant","pr":11465,"ma":"2023-01-07T13:56:49Z","oa":"2023-01-07T13:53:06Z"},{"uml":"Berlin","gm":{"lat":52.51667,"lon":13.38333},"uol":"Berlin","gop":{"lat":52.51667,"lon":13.38333},"l":"Python","nwo":"tiangolo/fastapi","pr":5847,"ma":"2023-01-07T13:58:46Z","oa":"2023-01-07T13:53:25Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"C#","nwo":"Jackett/Jackett","pr":13862,"ma":"2023-01-07T14:23:30Z","oa":"2023-01-07T13:55:11Z"},{"uml":"Kansas City","gm":{"lat":39.0845,"lon":-94.563},"uol":"Kansas City","gop":{"lat":39.0845,"lon":-94.563},"l":"TypeScript","nwo":"denoland/dotland","pr":2648,"ma":"2023-01-07T14:04:35Z","oa":"2023-01-07T13:55:51Z"},{"uml":"Estonia","gm":{"lat":58.7783969,"lon":25.7615268},"uol":"Estonia","gop":{"lat":58.7783969,"lon":25.7615268},"l":"Dart","nwo":"matthiasn/lotti","pr":1305,"ma":"2023-01-07T14:29:46Z","oa":"2023-01-07T13:57:37Z"},{"uml":"Nashville","gm":{"lat":36.1622,"lon":-86.7744},"uol":"Nashville","gop":{"lat":36.1622,"lon":-86.7744},"l":"Python","nwo":"blakeblackshear/frigate","pr":4947,"ma":"2023-01-07T14:07:56Z","oa":"2023-01-07T13:58:07Z"},{"uml":"Kingston","gm":{"lat":44.230687,"lon":-76.481323},"uol":"Las Palmas de Gran Canaria","gop":{"lat":28.12722,"lon":-15.43139},"l":"C++","nwo":"Slicer/Slicer","pr":6767,"ma":"2023-01-07T14:05:02Z","oa":"2023-01-07T13:58:27Z"},{"uml":"Thessaloniki","gm":{"lat":40.63333,"lon":22.95},"uol":"Munich","gop":{"lat":48.13333,"lon":11.56667},"l":"Rust","nwo":"gakonst/ethers-rs","pr":2024,"ma":"2023-01-07T14:22:07Z","oa":"2023-01-07T13:58:30Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"C#","nwo":"App-vNext/Polly","pr":1004,"ma":"2023-01-07T14:04:43Z","oa":"2023-01-07T14:00:29Z"},{"uml":"Munich","gm":{"lat":48.13333,"lon":11.56667},"uol":"Munich","gop":{"lat":48.13333,"lon":11.56667},"l":"Rust","nwo":"foundry-rs/foundry","pr":4053,"ma":"2023-01-07T15:45:02Z","oa":"2023-01-07T14:03:27Z"},{"uml":"Ventimiglia","gm":{"lat":43.79028,"lon":7.60833},"uol":"Ventimiglia","gop":{"lat":43.79028,"lon":7.60833},"l":"Go","nwo":"ooni/probe-cli","pr":1021,"ma":"2023-01-07T14:09:07Z","oa":"2023-01-07T14:03:37Z"},{"uml":"Georgetown","gm":{"lat":30.6327,"lon":-97.6772},"uol":"New York City","gop":{"lat":40.7306,"lon":-73.9866},"l":"Ruby","nwo":"chromebrew/chromebrew","pr":7817,"ma":"2023-01-07T18:05:55Z","oa":"2023-01-07T14:08:08Z"},{"uml":"Waterloo","gm":{"lat":42.497969,"lon":-92.332964},"uol":"Waterloo","gop":{"lat":42.497969,"lon":-92.332964},"l":"C++","nwo":"moneymanagerex/moneymanagerex","pr":5505,"ma":"2023-01-07T14:08:30Z","oa":"2023-01-07T14:08:25Z"},{"uml":"Metz","gm":{"lat":49.11972,"lon":6.17694},"uol":"Metz","gop":{"lat":49.11972,"lon":6.17694},"l":"Lua","nwo":"VEAF/VEAF-Mission-Creation-Tools","pr":161,"ma":"2023-01-07T14:09:31Z","oa":"2023-01-07T14:09:10Z"},{"uml":"Berlin","gm":{"lat":52.51667,"lon":13.38333},"uol":"Berlin","gop":{"lat":52.51667,"lon":13.38333},"l":"Python","nwo":"tiangolo/fastapi","pr":5848,"ma":"2023-01-07T14:13:34Z","oa":"2023-01-07T14:09:29Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"TypeScript","nwo":"samueldobbie/markup","pr":49,"ma":"2023-01-07T14:11:43Z","oa":"2023-01-07T14:10:50Z"},{"uml":"Ferndale","gm":{"lat":48.8467,"lon":-122.5897},"uol":"Cambridge","gop":{"lat":42.3751,"lon":-71.1056},"l":"TypeScript","nwo":"DanielXMoore/Civet","pr":148,"ma":"2023-01-07T16:42:11Z","oa":"2023-01-07T14:16:19Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"C#","nwo":"App-vNext/Polly","pr":1005,"ma":"2023-01-07T14:28:07Z","oa":"2023-01-07T14:18:21Z"},{"uml":"Curitiba","gm":{"lat":-25.4296,"lon":-49.2712},"uol":"Adelaide","gop":{"lat":-34.9274,"lon":138.5999},"l":"JavaScript","nwo":"mrdoob/three.js","pr":25257,"ma":"2023-01-07T17:35:24Z","oa":"2023-01-07T14:19:39Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"C#","nwo":"Jackett/Jackett","pr":13863,"ma":"2023-01-07T14:55:03Z","oa":"2023-01-07T14:21:33Z"},{"uml":"Belgrade","gm":{"lat":44.81667,"lon":20.46667},"uol":"Belgrade","gop":{"lat":44.81667,"lon":20.46667},"l":"C++","nwo":"ROCm-Developer-Tools/HIPIFY","pr":740,"ma":"2023-01-07T14:26:45Z","oa":"2023-01-07T14:25:57Z"},{"uml":"Pittsburgh","gm":{"lat":40.4417,"lon":-79.9901},"uol":"Pittsburgh","gop":{"lat":40.4417,"lon":-79.9901},"l":"Go","nwo":"rqlite/rqlite","pr":1149,"ma":"2023-01-07T14:27:24Z","oa":"2023-01-07T14:25:58Z"},{"uml":"Provo","gm":{"lat":40.2338,"lon":-111.6585},"uol":"Provo","gop":{"lat":40.2338,"lon":-111.6585},"l":"Ruby","nwo":"SplitTime/OpenSplitTime","pr":919,"ma":"2023-01-07T14:28:10Z","oa":"2023-01-07T14:28:02Z"},{"uml":"Curitiba","gm":{"lat":-25.4296,"lon":-49.2712},"uol":"Adelaide","gop":{"lat":-34.9274,"lon":138.5999},"l":"JavaScript","nwo":"mrdoob/three.js","pr":25258,"ma":"2023-01-07T17:34:40Z","oa":"2023-01-07T14:28:13Z"},{"uml":"Bismarck","gm":{"lat":46.8083,"lon":-100.7837},"uol":"Bismarck","gop":{"lat":46.8083,"lon":-100.7837},"l":"Rust","nwo":"xmc-rs/xmc4700","pr":52,"ma":"2023-01-07T14:44:39Z","oa":"2023-01-07T14:35:59Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"Jupyter Notebook","nwo":"huggingface/deep-rl-class","pr":181,"ma":"2023-01-07T14:39:15Z","oa":"2023-01-07T14:39:07Z"},{"uml":"Poznań","gm":{"lat":52.412082,"lon":16.908015},"uol":"Poznań","gop":{"lat":52.412082,"lon":16.908015},"l":"Java","nwo":"apache/maven-enforcer","pr":221,"ma":"2023-01-07T15:32:06Z","oa":"2023-01-07T14:40:03Z"},{"uml":"Saint Petersburg","gm":{"lat":59.95,"lon":30.31667},"uol":"Saint Petersburg","gop":{"lat":59.95,"lon":30.31667},"l":"Shell","nwo":"bakaut/glaber","pr":47,"ma":"2023-01-07T14:40:51Z","oa":"2023-01-07T14:40:42Z"},{"uml":"Augsburg","gm":{"lat":48.37167,"lon":10.89833},"uol":"Augsburg","gop":{"lat":48.37167,"lon":10.89833},"l":"Scala","nwo":"scala-steward-org/scala-steward","pr":2895,"ma":"2023-01-07T19:06:00Z","oa":"2023-01-07T14:41:25Z"},{"uml":"Gifu","gm":{"lat":35.48333,"lon":136.9},"uol":"Gifu","gop":{"lat":35.48333,"lon":136.9},"l":"Shell","nwo":"KATO-Hiro/AtCoderClans","pr":5211,"ma":"2023-01-07T14:41:52Z","oa":"2023-01-07T14:41:27Z"},{"uml":"Ferndale","gm":{"lat":48.8467,"lon":-122.5897},"uol":"Cambridge","gop":{"lat":42.3751,"lon":-71.1056},"l":"TypeScript","nwo":"DanielXMoore/Civet","pr":149,"ma":"2023-01-07T16:05:33Z","oa":"2023-01-07T14:43:06Z"},{"uml":"Vitoria-Gasteiz","gm":{"lat":42.84667,"lon":-2.67306},"uol":"Lille","gop":{"lat":50.63194,"lon":3.0575},"l":"HTML","nwo":"symfony/symfony-docs","pr":17681,"ma":"2023-01-07T16:21:36Z","oa":"2023-01-07T14:44:24Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"Ruby","nwo":"rubygems/rubygems","pr":6250,"ma":"2023-01-07T17:40:43Z","oa":"2023-01-07T14:44:29Z"},{"uml":"Gifu","gm":{"lat":35.48333,"lon":136.9},"uol":"Gifu","gop":{"lat":35.48333,"lon":136.9},"l":"Shell","nwo":"KATO-Hiro/AtCoderClans","pr":5212,"ma":"2023-01-07T14:45:21Z","oa":"2023-01-07T14:44:50Z"},{"uml":"Waterloo","gm":{"lat":42.497969,"lon":-92.332964},"uol":"Waterloo","gop":{"lat":42.497969,"lon":-92.332964},"l":"C++","nwo":"moneymanagerex/moneymanagerex","pr":5506,"ma":"2023-01-07T14:56:34Z","oa":"2023-01-07T14:56:29Z"},{"uml":"Copenhagen","gm":{"lat":55.67611,"lon":12.56889},"uol":"Copenhagen","gop":{"lat":55.67611,"lon":12.56889},"l":"TypeScript","nwo":"bash-lsp/bash-language-server","pr":666,"ma":"2023-01-07T16:32:40Z","oa":"2023-01-07T14:56:35Z"},{"uml":"Chengdu","gm":{"lat":30.66361,"lon":104.06667},"uol":"Chengdu","gop":{"lat":30.66361,"lon":104.06667},"l":"JavaScript","nwo":"midoks/mdserver-web","pr":328,"ma":"2023-01-07T15:01:09Z","oa":"2023-01-07T15:00:48Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"Java","nwo":"marcwrobel/jbanking","pr":277,"ma":"2023-01-07T15:11:59Z","oa":"2023-01-07T15:05:54Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"C#","nwo":"Jackett/Jackett","pr":13865,"ma":"2023-01-07T15:34:34Z","oa":"2023-01-07T15:08:10Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"Haskell","nwo":"commercialhaskell/stack","pr":6020,"ma":"2023-01-07T16:42:24Z","oa":"2023-01-07T15:08:33Z"},{"uml":"Grenoble","gm":{"lat":45.18694,"lon":5.72639},"uol":"Grenoble","gop":{"lat":45.18694,"lon":5.72639},"l":"Python","nwo":"zigbeefordomoticz/Domoticz-Zigbee","pr":1431,"ma":"2023-01-07T15:20:36Z","oa":"2023-01-07T15:09:17Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"C#","nwo":"Jackett/Jackett","pr":13866,"ma":"2023-01-07T15:41:46Z","oa":"2023-01-07T15:10:54Z"},{"uml":"Boston","gm":{"lat":42.3605,"lon":-71.0596},"uol":"Boston","gop":{"lat":42.3605,"lon":-71.0596},"l":"TypeScript","nwo":"covid-projections/covid-projections","pr":7133,"ma":"2023-01-07T15:13:06Z","oa":"2023-01-07T15:13:00Z"},{"uml":"Toulouse","gm":{"lat":43.60444,"lon":1.44194},"uol":"Toulouse","gop":{"lat":43.60444,"lon":1.44194},"l":"TypeScript","nwo":"sigle/sigle","pr":799,"ma":"2023-01-07T17:36:29Z","oa":"2023-01-07T15:14:59Z"},{"uml":"Bristol","gm":{"lat":51.4538022,"lon":-2.5972985},"uol":"Bristol","gop":{"lat":51.4538022,"lon":-2.5972985},"l":"Python","nwo":"pypa/setuptools","pr":3756,"ma":"2023-01-07T15:49:29Z","oa":"2023-01-07T15:15:14Z"},{"uml":"Copenhagen","gm":{"lat":55.67611,"lon":12.56889},"uol":"Copenhagen","gop":{"lat":55.67611,"lon":12.56889},"l":"C#","nwo":"jrgfogh/whist","pr":90,"ma":"2023-01-07T15:38:04Z","oa":"2023-01-07T15:17:17Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"TypeScript","nwo":"p-m-p/slider","pr":195,"ma":"2023-01-07T15:20:58Z","oa":"2023-01-07T15:19:42Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"Haskell","nwo":"simplex-chat/simplex-chat","pr":1705,"ma":"2023-01-07T16:38:35Z","oa":"2023-01-07T15:21:20Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"C#","nwo":"Jackett/Jackett","pr":13867,"ma":"2023-01-07T16:18:25Z","oa":"2023-01-07T15:22:06Z"},{"uml":"Gainesville","gm":{"lat":29.6519,"lon":-82.3248},"uol":"Gainesville","gop":{"lat":29.6519,"lon":-82.3248},"l":"C++","nwo":"PX4/PX4-Autopilot","pr":20883,"ma":"2023-01-07T17:07:35Z","oa":"2023-01-07T15:27:54Z"},{"uml":"Stuttgart","gm":{"lat":48.77611,"lon":9.1775},"uol":"Stuttgart","gop":{"lat":48.77611,"lon":9.1775},"l":"Java","nwo":"eclipse-m2e/m2e-core","pr":1183,"ma":"2023-01-07T16:05:42Z","oa":"2023-01-07T15:29:39Z"},{"uml":"Chengdu","gm":{"lat":30.66361,"lon":104.06667},"uol":"Chengdu","gop":{"lat":30.66361,"lon":104.06667},"l":"JavaScript","nwo":"midoks/mdserver-web","pr":329,"ma":"2023-01-07T15:31:22Z","oa":"2023-01-07T15:30:24Z"},{"uml":"South Lake Tahoe","gm":{"lat":38.9332,"lon":-119.9843},"uol":"South Lake Tahoe","gop":{"lat":38.9332,"lon":-119.9843},"l":"Python","nwo":"pypa/bandersnatch","pr":1341,"ma":"2023-01-07T16:08:25Z","oa":"2023-01-07T15:32:38Z"},{"uml":"Waterloo","gm":{"lat":42.497969,"lon":-92.332964},"uol":"Waterloo","gop":{"lat":42.497969,"lon":-92.332964},"l":"C++","nwo":"moneymanagerex/moneymanagerex","pr":5507,"ma":"2023-01-07T15:34:29Z","oa":"2023-01-07T15:33:22Z"},{"uml":"Ferndale","gm":{"lat":48.8467,"lon":-122.5897},"uol":"Cambridge","gop":{"lat":42.3751,"lon":-71.1056},"l":"TypeScript","nwo":"DanielXMoore/Civet","pr":151,"ma":"2023-01-07T16:09:36Z","oa":"2023-01-07T15:34:27Z"},{"uml":"Gainesville","gm":{"lat":29.6519,"lon":-82.3248},"uol":"Gainesville","gop":{"lat":29.6519,"lon":-82.3248},"l":"C++","nwo":"PX4/PX4-Autopilot","pr":20884,"ma":"2023-01-07T17:10:52Z","oa":"2023-01-07T15:35:16Z"},{"uml":"Cluj-Napoca","gm":{"lat":46.78,"lon":23.55944},"uol":"Cluj-Napoca","gop":{"lat":46.78,"lon":23.55944},"l":"Scala","nwo":"firesim/firesim","pr":1373,"ma":"2023-01-07T18:51:51Z","oa":"2023-01-07T15:42:02Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"C#","nwo":"Jackett/Jackett","pr":13868,"ma":"2023-01-07T15:58:47Z","oa":"2023-01-07T15:42:26Z"},{"uml":"Belgrade","gm":{"lat":44.81667,"lon":20.46667},"uol":"Belgrade","gop":{"lat":44.81667,"lon":20.46667},"l":"C++","nwo":"ROCm-Developer-Tools/HIPIFY","pr":741,"ma":"2023-01-07T15:43:28Z","oa":"2023-01-07T15:42:30Z"},{"uml":"Somerset","gm":{"lat":40.497604,"lon":-74.488487},"uol":"Somerset","gop":{"lat":40.497604,"lon":-74.488487},"l":"PHP","nwo":"VATSIM-UK/uk-controller-api","pr":1175,"ma":"2023-01-07T17:24:31Z","oa":"2023-01-07T15:44:47Z"},{"uml":"United States","gm":{"lat":39.3812661,"lon":-97.9222112},"uol":"United States","gop":{"lat":39.3812661,"lon":-97.9222112},"l":"Python","nwo":"piccolo-orm/piccolo","pr":747,"ma":"2023-01-07T16:01:57Z","oa":"2023-01-07T15:51:47Z"},{"uml":"Oak Park","gm":{"lat":41.885,"lon":-87.7845},"uol":"Oak Park","gop":{"lat":41.885,"lon":-87.7845},"l":"Python","nwo":"conda-forge/conda-forge-webservices","pr":527,"ma":"2023-01-07T16:09:19Z","oa":"2023-01-07T15:52:53Z"},{"uml":"Kyiv","gm":{"lat":50.4501,"lon":30.5241},"uol":"Kyiv","gop":{"lat":50.4501,"lon":30.5241},"l":"JavaScript","nwo":"axios/axios","pr":5446,"ma":"2023-01-07T16:04:51Z","oa":"2023-01-07T15:54:08Z"},{"uml":"Madrid","gm":{"lat":40.41889,"lon":-3.69194},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"C#","nwo":"Jackett/Jackett","pr":13869,"ma":"2023-01-07T16:18:10Z","oa":"2023-01-07T15:59:40Z"},{"uml":"Kolkata","gm":{"lat":22.54111,"lon":88.33778},"uol":"Kolkata","gop":{"lat":22.54111,"lon":88.33778},"l":"HTML","nwo":"alshedivat/al-folio","pr":1084,"ma":"2023-01-07T16:07:55Z","oa":"2023-01-07T16:04:38Z"},{"uml":"Tokyo","gm":{"lat":35.68,"lon":139.77},"uol":"Tokyo","gop":{"lat":35.68,"lon":139.77},"l":"Lua","nwo":"yutkat/dotfiles","pr":3221,"ma":"2023-01-07T16:07:04Z","oa":"2023-01-07T16:07:01Z"},{"uml":"Barcelona","gm":{"lat":41.3825,"lon":2.17694},"uol":"Barcelona","gop":{"lat":41.3825,"lon":2.17694},"l":"TypeScript","nwo":"awslabs/aws-lambda-powertools-typescript","pr":1217,"ma":"2023-01-07T16:09:04Z","oa":"2023-01-07T16:08:52Z"},{"uml":"Shenzhen","gm":{"lat":22.535383,"lon":114.05471},"uol":"Shenzhen","gop":{"lat":22.535383,"lon":114.05471},"l":"Python","nwo":"pypa/hatch","pr":707,"ma":"2023-01-07T17:01:58Z","oa":"2023-01-07T16:12:31Z"},{"uml":"Kunming","gm":{"lat":25.04691,"lon":102.71043},"uol":"Kunming","gop":{"lat":25.04691,"lon":102.71043},"l":"Shell","nwo":"microcai/gentoo-zh","pr":2776,"ma":"2023-01-07T16:16:08Z","oa":"2023-01-07T16:13:26Z"},{"uml":"Minneapolis","gm":{"lat":44.9773,"lon":-93.2655},"uol":"Minneapolis","gop":{"lat":44.9773,"lon":-93.2655},"l":"Python","nwo":"skyportal/skyportal","pr":3824,"ma":"2023-01-07T17:59:41Z","oa":"2023-01-07T16:14:16Z"},{"uml":"Pittsburgh","gm":{"lat":40.4417,"lon":-79.9901},"uol":"Pittsburgh","gop":{"lat":40.4417,"lon":-79.9901},"l":"C++","nwo":"flexflow/FlexFlow","pr":550,"ma":"2023-01-07T16:18:35Z","oa":"2023-01-07T16:16:44Z"},{"uml":"Kunming","gm":{"lat":25.04691,"lon":102.71043},"uol":"Kunming","gop":{"lat":25.04691,"lon":102.71043},"l":"Shell","nwo":"microcai/gentoo-zh","pr":2778,"ma":"2023-01-07T16:21:46Z","oa":"2023-01-07T16:18:28Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14966,"ma":"2023-01-07T18:41:44Z","oa":"2023-01-07T16:22:37Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14967,"ma":"2023-01-07T18:42:12Z","oa":"2023-01-07T16:23:03Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14968,"ma":"2023-01-07T18:42:22Z","oa":"2023-01-07T16:23:21Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14969,"ma":"2023-01-07T19:16:50Z","oa":"2023-01-07T16:23:44Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14970,"ma":"2023-01-07T18:42:31Z","oa":"2023-01-07T16:24:05Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14971,"ma":"2023-01-07T18:42:40Z","oa":"2023-01-07T16:24:27Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14972,"ma":"2023-01-07T18:42:48Z","oa":"2023-01-07T16:24:46Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14973,"ma":"2023-01-07T18:42:57Z","oa":"2023-01-07T16:25:05Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14974,"ma":"2023-01-07T18:43:10Z","oa":"2023-01-07T16:26:37Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14975,"ma":"2023-01-07T19:17:01Z","oa":"2023-01-07T16:26:57Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14976,"ma":"2023-01-07T19:17:09Z","oa":"2023-01-07T16:27:13Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14977,"ma":"2023-01-07T18:43:20Z","oa":"2023-01-07T16:27:32Z"},{"uml":"Trondheim","gm":{"lat":63.44,"lon":10.4},"uol":"Madrid","gop":{"lat":40.41889,"lon":-3.69194},"l":"Kotlin","nwo":"javalin/javalin","pr":1786,"ma":"2023-01-07T16:45:20Z","oa":"2023-01-07T16:28:02Z"},{"uml":"Honolulu","gm":{"lat":21.3045,"lon":-157.8557},"uol":"Honolulu","gop":{"lat":21.3045,"lon":-157.8557},"l":"C","nwo":"GenericMappingTools/gmt","pr":7197,"ma":"2023-01-07T17:04:10Z","oa":"2023-01-07T16:35:17Z"},{"uml":"Iowa City","gm":{"lat":41.661256,"lon":-91.529911},"uol":"Iowa City","gop":{"lat":41.661256,"lon":-91.529911},"l":"C#","nwo":"Havret/dotnet-activemq-artemis-client","pr":418,"ma":"2023-01-07T16:53:58Z","oa":"2023-01-07T16:37:08Z"},{"uml":"Tokyo","gm":{"lat":35.68,"lon":139.77},"uol":"Tokyo","gop":{"lat":35.68,"lon":139.77},"l":"Lua","nwo":"yutkat/dotfiles","pr":3222,"ma":"2023-01-07T16:40:04Z","oa":"2023-01-07T16:40:01Z"},{"uml":"Hanover","gm":{"lat":52.374478,"lon":9.738553},"uol":"Hanover","gop":{"lat":52.374478,"lon":9.738553},"l":"Python","nwo":"EnricoMi/publish-unit-test-result-action","pr":394,"ma":"2023-01-07T17:18:47Z","oa":"2023-01-07T16:40:32Z"},{"uml":"Shenzhen","gm":{"lat":22.535383,"lon":114.05471},"uol":"Shenzhen","gop":{"lat":22.535383,"lon":114.05471},"l":"Python","nwo":"pypa/hatch","pr":708,"ma":"2023-01-07T16:50:22Z","oa":"2023-01-07T16:43:34Z"},{"uml":"Stockholm","gm":{"lat":59.32944,"lon":18.06861},"uol":"Stockholm","gop":{"lat":59.32944,"lon":18.06861},"l":"Rust","nwo":"kaj/rsass","pr":165,"ma":"2023-01-07T18:45:05Z","oa":"2023-01-07T16:47:30Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"TypeScript","nwo":"dotansimha/graphql-code-generator","pr":8797,"ma":"2023-01-07T16:57:18Z","oa":"2023-01-07T16:48:48Z"},{"uml":"Aachen","gm":{"lat":50.77417,"lon":6.0825},"uol":"Aachen","gop":{"lat":50.77417,"lon":6.0825},"l":"Rust","nwo":"rust-lang/crates.io","pr":5885,"ma":"2023-01-07T17:06:00Z","oa":"2023-01-07T16:49:47Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"Java","nwo":"marcwrobel/jbanking","pr":280,"ma":"2023-01-07T16:58:08Z","oa":"2023-01-07T16:49:49Z"},{"uml":"Poznań","gm":{"lat":52.412082,"lon":16.908015},"uol":"Poznań","gop":{"lat":52.412082,"lon":16.908015},"l":"Java","nwo":"apache/maven-enforcer","pr":222,"ma":"2023-01-07T17:31:39Z","oa":"2023-01-07T16:53:31Z"},{"uml":"Tokyo","gm":{"lat":35.68,"lon":139.77},"uol":"Tokyo","gop":{"lat":35.68,"lon":139.77},"l":"Lua","nwo":"yutkat/dotfiles","pr":3223,"ma":"2023-01-07T17:01:59Z","oa":"2023-01-07T17:01:56Z"},{"uml":"Malmö","gm":{"lat":55.60556,"lon":13.0},"uol":"Malmö","gop":{"lat":55.60556,"lon":13.0},"l":"C++","nwo":"include-what-you-use/include-what-you-use","pr":1176,"ma":"2023-01-07T17:12:44Z","oa":"2023-01-07T17:02:44Z"},{"uml":"Kyiv","gm":{"lat":50.4501,"lon":30.5241},"uol":"Kyiv","gop":{"lat":50.4501,"lon":30.5241},"l":"JavaScript","nwo":"axios/axios","pr":5447,"ma":"2023-01-07T17:15:55Z","oa":"2023-01-07T17:05:17Z"},{"uml":"San Francisco","gm":{"lat":37.7648,"lon":-122.463},"uol":"San Francisco","gop":{"lat":37.7648,"lon":-122.463},"l":"Java","nwo":"diffplug/spotless","pr":1459,"ma":"2023-01-07T17:21:19Z","oa":"2023-01-07T17:09:03Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"HTML","nwo":"metamath/set.mm","pr":2978,"ma":"2023-01-07T18:53:38Z","oa":"2023-01-07T17:09:32Z"},{"uml":"Cambridge","gm":{"lat":42.3751,"lon":-71.1056},"uol":"Cambridge","gop":{"lat":42.3751,"lon":-71.1056},"l":"C++","nwo":"BespokeSynth/BespokeSynth","pr":1041,"ma":"2023-01-07T18:12:39Z","oa":"2023-01-07T17:11:17Z"},{"uml":"Somerset","gm":{"lat":40.497604,"lon":-74.488487},"uol":"Somerset","gop":{"lat":40.497604,"lon":-74.488487},"l":"PHP","nwo":"VATSIM-UK/uk-controller-api","pr":1176,"ma":"2023-01-07T17:25:58Z","oa":"2023-01-07T17:11:48Z"},{"uml":"Hesse","gm":{"lat":50.66611,"lon":8.59111},"uol":"Hesse","gop":{"lat":50.66611,"lon":8.59111},"l":"JavaScript","nwo":"2Abendsegler/GClh","pr":2271,"ma":"2023-01-07T17:17:47Z","oa":"2023-01-07T17:14:05Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"Jupyter Notebook","nwo":"huggingface/deep-rl-class","pr":183,"ma":"2023-01-07T17:27:50Z","oa":"2023-01-07T17:16:32Z"},{"uml":"Toulouse","gm":{"lat":43.60444,"lon":1.44194},"uol":"Toulouse","gop":{"lat":43.60444,"lon":1.44194},"l":"JavaScript","nwo":"ocaml-sf/learn-ocaml","pr":509,"ma":"2023-01-07T17:18:13Z","oa":"2023-01-07T17:16:43Z"},{"uml":"Paris","gm":{"lat":48.85658,"lon":2.35183},"uol":"Paris","gop":{"lat":48.85658,"lon":2.35183},"l":"Java","nwo":"marcwrobel/jbanking","pr":283,"ma":"2023-01-07T17:18:10Z","oa":"2023-01-07T17:17:20Z"},{"uml":"Kansas City","gm":{"lat":39.0845,"lon":-94.563},"uol":"Kansas City","gop":{"lat":39.0845,"lon":-94.563},"l":"PHP","nwo":"phpactor/phpactor","pr":2040,"ma":"2023-01-07T17:25:35Z","oa":"2023-01-07T17:20:18Z"},{"uml":"Pretoria","gm":{"lat":-25.7484,"lon":28.154},"uol":"Pretoria","gop":{"lat":-25.7484,"lon":28.154},"l":"Java","nwo":"beanshell/beanshell","pr":690,"ma":"2023-01-07T17:47:01Z","oa":"2023-01-07T17:22:30Z"},{"uml":"Zurich","gm":{"lat":47.37861,"lon":8.54},"uol":"Zurich","gop":{"lat":47.37861,"lon":8.54},"l":"TypeScript","nwo":"ghostfolio/ghostfolio","pr":1580,"ma":"2023-01-07T17:26:38Z","oa":"2023-01-07T17:26:30Z"},{"uml":"Iowa City","gm":{"lat":41.661256,"lon":-91.529911},"uol":"Iowa City","gop":{"lat":41.661256,"lon":-91.529911},"l":"Ruby","nwo":"karafka/waterdrop","pr":298,"ma":"2023-01-07T17:32:57Z","oa":"2023-01-07T17:28:21Z"},{"uml":"Frankfurt","gm":{"lat":50.110644,"lon":8.682092},"uol":"Frankfurt","gop":{"lat":50.110644,"lon":8.682092},"l":"PHP","nwo":"yakamara/redaxo_yform","pr":1344,"ma":"2023-01-07T17:59:41Z","oa":"2023-01-07T17:33:33Z"},{"uml":"Kyiv","gm":{"lat":50.4501,"lon":30.5241},"uol":"Kyiv","gop":{"lat":50.4501,"lon":30.5241},"l":"JavaScript","nwo":"axios/axios","pr":5449,"ma":"2023-01-07T18:01:44Z","oa":"2023-01-07T17:52:55Z"},{"uml":"Houston","gm":{"lat":29.7589,"lon":-95.3677},"uol":"Houston","gop":{"lat":29.7589,"lon":-95.3677},"l":"Python","nwo":"automicus/PyISY","pr":345,"ma":"2023-01-07T17:55:39Z","oa":"2023-01-07T17:54:06Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14979,"ma":"2023-01-07T19:17:16Z","oa":"2023-01-07T17:56:16Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14980,"ma":"2023-01-07T18:43:28Z","oa":"2023-01-07T17:56:41Z"},{"uml":"Sétif","gm":{"lat":36.18333,"lon":5.4},"uol":"Sétif","gop":{"lat":36.18333,"lon":5.4},"l":"Shell","nwo":"msys2/MINGW-packages","pr":14981,"ma":"2023-01-07T18:43:36Z","oa":"2023-01-07T17:57:15Z"},{"uml":"Provo","gm":{"lat":40.2338,"lon":-111.6585},"uol":"Provo","gop":{"lat":40.2338,"lon":-111.6585},"l":"C","nwo":"inertialsense/inertial-sense-sdk","pr":346,"ma":"2023-01-07T18:08:50Z","oa":"2023-01-07T17:58:18Z"},{"uml":"Frankfurt","gm":{"lat":50.110644,"lon":8.682092},"uol":"Frankfurt","gop":{"lat":50.110644,"lon":8.682092},"l":"PHP","nwo":"yakamara/redaxo_yform","pr":1345,"ma":"2023-01-07T18:03:59Z","oa":"2023-01-07T18:03:42Z"},{"uml":"Saint Petersburg","gm":{"lat":59.95,"lon":30.31667},"uol":"Saint Petersburg","gop":{"lat":59.95,"lon":30.31667},"l":"Shell","nwo":"bakaut/glaber","pr":48,"ma":"2023-01-07T18:05:20Z","oa":"2023-01-07T18:05:13Z"},{"uml":"Caen","gm":{"lat":49.18222,"lon":-0.37056},"uol":"Caen","gop":{"lat":49.18222,"lon":-0.37056},"l":"Python","nwo":"spectrochempy/spectrochempy","pr":532,"ma":"2023-01-07T19:06:39Z","oa":"2023-01-07T18:13:08Z"},{"uml":"Seattle","gm":{"lat":47.6038,"lon":-122.3301},"uol":"Seattle","gop":{"lat":47.6038,"lon":-122.3301},"l":"Rust","nwo":"aurae-runtime/aurae","pr":242,"ma":"2023-01-07T18:26:44Z","oa":"2023-01-07T18:16:18Z"},{"uml":"Rovio","gm":{"lat":45.93333,"lon":8.98333},"uol":"Rovio","gop":{"lat":45.93333,"lon":8.98333},"l":"Java","nwo":"alfio-event/alf.io","pr":1167,"ma":"2023-01-07T18:32:43Z","oa":"2023-01-07T18:16:38Z"},{"uml":"Cambridge","gm":{"lat":42.3751,"lon":-71.1056},"uol":"Cambridge","gop":{"lat":42.3751,"lon":-71.1056},"l":"C++","nwo":"BespokeSynth/BespokeSynth","pr":1042,"ma":"2023-01-07T18:45:50Z","oa":"2023-01-07T18:17:05Z"},{"uml":"Tokyo","gm":{"lat":35.68,"lon":139.77},"uol":"Tokyo","gop":{"lat":35.68,"lon":139.77},"l":"Lua","nwo":"yutkat/dotfiles","pr":3224,"ma":"2023-01-07T18:26:59Z","oa":"2023-01-07T18:26:57Z"},{"uml":"London","gm":{"lat":51.5073219,"lon":-0.1276474},"uol":"London","gop":{"lat":51.5073219,"lon":-0.1276474},"l":"Python","nwo":"karlicoss/promnesia","pr":353,"ma":"2023-01-07T18:27:58Z","oa":"2023-01-07T18:27:53Z"},{"uml":"Houston","gm":{"lat":29.7589,"lon":-95.3677},"uol":"Houston","gop":{"lat":29.7589,"lon":-95.3677},"l":"Python","nwo":"automicus/PyISY","pr":346,"ma":"2023-01-07T18:29:59Z","oa":"2023-01-07T18:29:06Z"},{"uml":"Kansas City","gm":{"lat":39.0845,"lon":-94.563},"uol":"Timișoara","gop":{"lat":45.75972,"lon":21.23},"l":"PHP","nwo":"phpactor/phpactor","pr":2042,"ma":"2023-01-07T19:27:46Z","oa":"2023-01-07T18:40:01Z"},{"uml":"Copenhagen","gm":{"lat":55.67611,"lon":12.56889},"uol":"Copenhagen","gop":{"lat":55.67611,"lon":12.56889},"l":"C#","nwo":"jrgfogh/whist","pr":92,"ma":"2023-01-07T18:47:01Z","oa":"2023-01-07T18:42:34Z"},{"uml":"Kolkata","gm":{"lat":22.54111,"lon":88.33778},"uol":"Kolkata","gop":{"lat":22.54111,"lon":88.33778},"l":"HTML","nwo":"alshedivat/al-folio","pr":1087,"ma":"2023-01-07T18:46:45Z","oa":"2023-01-07T18:46:31Z"},{"uml":"Long Beach","gm":{"lat":33.7775,"lon":-118.1885},"uol":"Long Beach","gop":{"lat":33.7775,"lon":-118.1885},"l":"JavaScript","nwo":"breck7/pldb","pr":387,"ma":"2023-01-07T18:52:09Z","oa":"2023-01-07T18:52:03Z"},{"uml":"Sofia","gm":{"lat":42.7,"lon":23.33333},"uol":"Berlin","gop":{"lat":52.51667,"lon":13.38333},"l":"C","nwo":"ggerganov/whisper.cpp","pr":384,"ma":"2023-01-07T19:21:43Z","oa":"2023-01-07T19:00:40Z"},{"uml":"Carmel","gm":{"lat":39.9788,"lon":-86.1187},"uol":"Carmel","gop":{"lat":39.9788,"lon":-86.1187},"l":"Java","nwo":"mybatis/mybatis-dynamic-sql","pr":570,"ma":"2023-01-07T19:06:51Z","oa":"2023-01-07T19:01:38Z"},{"uml":"Seattle","gm":{"lat":47.6038,"lon":-122.3301},"uol":"Seattle","gop":{"lat":47.6038,"lon":-122.3301},"l":"TypeScript","nwo":"microsoft/opensource-management-portal","pr":529,"ma":"2023-01-07T19:08:48Z","oa":"2023-01-07T19:08:09Z"},{"uml":"College Park","gm":{"lat":33.6534,"lon":-84.4494},"uol":"College Park","gop":{"lat":33.6534,"lon":-84.4494},"l":"TeX","nwo":"trigaten/Learn_Prompting","pr":188,"ma":"2023-01-07T19:15:47Z","oa":"2023-01-07T19:15:38Z"},{"uml":"Caen","gm":{"lat":49.18222,"lon":-0.37056},"uol":"Caen","gop":{"lat":49.18222,"lon":-0.37056},"l":"Python","nwo":"spectrochempy/spectrochempy","pr":534,"ma":"2023-01-07T19:21:52Z","oa":"2023-01-07T19:21:40Z"}] \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E88F2ACEFCCC3E91697568067D761E9C82DD2BB6 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E88F2ACEFCCC3E91697568067D761E9C82DD2BB6 new file mode 100644 index 0000000..8de5b2a Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/E88F2ACEFCCC3E91697568067D761E9C82DD2BB6 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EAC50BC3F26C7CC64C44B7958F17C9052FEAC062 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EAC50BC3F26C7CC64C44B7958F17C9052FEAC062 new file mode 100644 index 0000000..d25d4e8 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EAC50BC3F26C7CC64C44B7958F17C9052FEAC062 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EB03F4F9CE654AB6F7E5792A8FBB0F5452B47DED b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EB03F4F9CE654AB6F7E5792A8FBB0F5452B47DED new file mode 100644 index 0000000..23ce483 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EB03F4F9CE654AB6F7E5792A8FBB0F5452B47DED differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EB03F4F9CE654AB6F7E5792A8FBB0F5452B47DED-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EB03F4F9CE654AB6F7E5792A8FBB0F5452B47DED-blob new file mode 100644 index 0000000..7fe66d2 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EB03F4F9CE654AB6F7E5792A8FBB0F5452B47DED-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF2B7BD45DC3E0AFADFDF6A16C86B5806B549B29 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF2B7BD45DC3E0AFADFDF6A16C86B5806B549B29 new file mode 100644 index 0000000..26b6bc5 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF2B7BD45DC3E0AFADFDF6A16C86B5806B549B29 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF2B7BD45DC3E0AFADFDF6A16C86B5806B549B29-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF2B7BD45DC3E0AFADFDF6A16C86B5806B549B29-blob new file mode 100644 index 0000000..829c7ff --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF2B7BD45DC3E0AFADFDF6A16C86B5806B549B29-blob @@ -0,0 +1,112 @@ + + + + + + + + Comentarios de Disqus + + + + + + + + + + + + + + +
                  +

                  No hemos podido cargar Disqus. Si eres un moderador por favor mira nuestra guía de solución de problemas.

                  +
                  + + + + + + + +
                  + + + + + + + + + + + + + diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF74C6F6E1EA375E5508D3EF0AC54D71C633E553 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF74C6F6E1EA375E5508D3EF0AC54D71C633E553 new file mode 100644 index 0000000..45d2e24 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF74C6F6E1EA375E5508D3EF0AC54D71C633E553 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF74C6F6E1EA375E5508D3EF0AC54D71C633E553-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF74C6F6E1EA375E5508D3EF0AC54D71C633E553-blob new file mode 100644 index 0000000..9a28b22 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EF74C6F6E1EA375E5508D3EF0AC54D71C633E553-blob differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EFE6D9789370466A4BA6400464EF763700C47994 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EFE6D9789370466A4BA6400464EF763700C47994 new file mode 100644 index 0000000..a0ed77d Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EFE6D9789370466A4BA6400464EF763700C47994 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EFE6D9789370466A4BA6400464EF763700C47994-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EFE6D9789370466A4BA6400464EF763700C47994-blob new file mode 100644 index 0000000..3cb808c --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/EFE6D9789370466A4BA6400464EF763700C47994-blob @@ -0,0 +1 @@ +unixporn at DuckDuckGo
                  \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/F02FB7E6F049AC3CE97DDA499A9F768BE4AD7EE9 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/F02FB7E6F049AC3CE97DDA499A9F768BE4AD7EE9 new file mode 100644 index 0000000..43c2d98 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/F02FB7E6F049AC3CE97DDA499A9F768BE4AD7EE9 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/F02FB7E6F049AC3CE97DDA499A9F768BE4AD7EE9-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/F02FB7E6F049AC3CE97DDA499A9F768BE4AD7EE9-blob new file mode 100644 index 0000000..9ceddeb --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/F02FB7E6F049AC3CE97DDA499A9F768BE4AD7EE9-blob @@ -0,0 +1 @@ +(()=>{"use strict";var e,t,a,n,r,l,i,o={9708:(e,t,a)=>{a.d(t,{Z:()=>m});var n=a(8328),r=a(714),l=a(8332),i=a(1478),o=a.n(i),c=a(4935);const s={button:"ffON2NH02oMAcqyoh2UU",fullWidth:"VVwKmb7llplcxyVXzHz9",customVariant:"GnLX_jUB3Jn3idluie7R",primary:"dkPsZgoVlwHrgASCd797",secondary:"q7VhSk71XgyB1xYfeChb",tertiary:"sz280YLkLemh3mLtestR",ghost:"CPXAhl7VTkj2dHDyAYAf",yellow:"YONrIxL5q5BzYkbeRFhq",customSize:"J6kopNnJfLRnTk4tGjvG",xsmall:"MQCbz04ET5EljRmK3YpQ",small:"vcOFkrrvuSYp7xsAur2Y",medium:"hUUdRtuaOUx7mcSwc56s",large:"eEHLqtMiqMsCAZCkwFaE"},d=["as","variant","size","fullWidth","className","children"],u=(0,l.Gp)((function(e,t){let{as:a="button",variant:l="primary",size:i="small",fullWidth:c=!1,className:u,children:m}=e,p=(0,r.Z)(e,d);return React.createElement(a,(0,n.Z)({ref:t,className:o()(u,s.button,s[i],s[l],{[s.fullWidth]:c})},p),m)}));u.proptypes={as:c.PropTypes.oneOf(["button","a"]),className:c.PropTypes.string,children:c.PropTypes.oneOfType([c.PropTypes.arrayOf(c.PropTypes.node),c.PropTypes.node]).isRequired,variant:c.PropTypes.oneOf(["primary","secondary","tertiary","ghost","customVariant"]),size:c.PropTypes.oneOf(["xsmall","small","medium","large","customSize"]),fullWidth:c.PropTypes.bool};const m=u},4005:(e,t,a)=>{a.d(t,{Z:()=>m});var n=a(8328),r=a(714),l=a(4935),i=a.n(l),o=a(1478),c=a.n(o);const s=["as","className","children"],d=["as","className","children"];function u(e){let{as:t="div",className:a,children:l}=e,i=(0,r.Z)(e,s);return React.createElement(t,(0,n.Z)({className:c()("O9Ipab51rBntYb0pwOQn",a)},i),l)}u.Header=function(e){let{as:t="header",className:a,children:l}=e,i=(0,r.Z)(e,d);return React.createElement(t,(0,n.Z)({className:c()("XstXTivL2FzVzau53UZr",a)},i),l)},u.Header.propTypes={as:i().oneOf(["div","header"]),className:i().string,children:i().any};const m=u},7628:(e,t,a)=>{a.d(t,{Z:()=>c});var n=a(8328),r=a(714),l=a(8332);const i=["children","tagName"];function o(e){let{children:t,tagName:a="div"}=e,o=(0,r.Z)(e,i);const c=(0,l.sO)(),s=(0,l.I4)((e=>{null!==e&&(c.current=t(e))}),[t]);return(0,l.d4)((()=>()=>{var e;"function"==typeof(null==c||null===(e=c.current)||void 0===e?void 0:e.destroy)&&c.current.destroy()}),[t]),React.createElement(a,(0,n.Z)({ref:s},o))}const c=(0,l.X$)(o)},7524:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(1478),r=a.n(n),l=a(1382);function i({expanded:e,onClick:t,lang:a,className:n}){return React.createElement("div",{className:r()("LvQyYDtEWRDVojZY8klT",n)},React.createElement("div",{className:"tV0DEo5a5LUrl8Piw6Ao",onClick:t},React.createElement(l.Z,{type:e?"up":"down","aria-hidden":"true"}),e?a.expanded:a.collapsed))}},4071:(e,t,a)=>{a.d(t,{Z:()=>h});var n=a(8328),r=a(8888),l=a(714),i=(a(6755),a(4935)),o=a.n(i),c=a(8332),s=a(8927),d=a(3502);const u=["backDataId","backData","onClick","href","target","rel","children"];function m(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function p(e,t){let{backDataId:a,backData:i={},onClick:o,href:p,target:h,rel:g="noopener",children:v}=e,f=(0,l.Z)(e,u);const b=(0,c.sO)(),y=(0,d.Z)("backData"),w=(0,d.Z)("searchExperiments"),k=(0,d.Z)("settings",["kd","kg"]),E=(0,d.Z)("device"),R=(0,d.Z)("deep");let x=p;const O=(0,s.Fo)(x),P=E.isIDevice&&"itunes.apple.com"===O||E.isAndroid&&"play.google.com"===O;return!k.useRedirect()||-1!==x.indexOf("/l/?")||(0,s.pM)(x)||P||(x=`${x.startsWith("https")||E.isOnion?"":"http://r.duckduckgo.com"}/l/?uddg=${encodeURIComponent(x)}¬rut=duckduck_in`),(0,c.aP)(t,(()=>({focus(){b.current.focus()},blur(){b.current.blur()},click(){b.current.click()},openInNewWindow({ctrlKey:e,shiftKey:t,metaKey:a,button:n}={}){const r={defaultPrevented:!1,preventDefault(){this.defaultPrevented=!0},stopPropagation(){},stopImmediatePropagation(){},composedPath(){},ctrlKey:e,shiftKey:t,metaKey:a,button:n};o&&o(r),r.defaultPrevented||(0,s.oL)(x,{isSafari:E.isSafari})}})),[E,x,o]),React.createElement("a",(0,n.Z)({ref:b,href:p,rel:g,target:h},f,{"data-handled-by-react":"true",onClick:e=>{if(o&&o(e),e.ctrlKey||!E.isIE&&e.metaKey||"_blank"===h&&!(0,s.pM)(x)||e.shiftKey||e.button&&(1===e.button||E.isIE&&4===e.button))return e.shiftKey&&!E.isIE&&!E.isSafari||x!==p?(e.preventDefault(),void(0,s.oL)(x,{isSafari:E.isSafari})):void 0;if(a&&y.set(a,function(e){for(var t=1;t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Search · surf browser · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  + + + +
                  + Skip to content + + + + + + + + + + + +
                  + +
                  + + + + + + + +
                  + + + + + + +
                  + + + + + + + + + + +
                  +
                  +
                  + + + + + + + + + + + + + + + + + + + + + +
                  + + + + + +
                  +
                  +
                  +
                  +
                  + + +
                  + +
                  + +
                  + + + + + + + + + +
                  + Advanced search +
                  + Cheat sheet + + +
                  + +

                  Search cheat sheet

                  +
                  + +
                  +

                  GitHub’s search supports a variety of different operations. Here’s a quick cheat sheet for some of the common searches.

                  +

                  For more information, visit our search help section.

                  + +

                  Basic search

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  This searchFinds repositories with…
                  cat stars:>100Find cat repositories with greater than 100 stars.
                  user:defunktGet all repositories from the user defunkt.
                  tom location:"San Francisco, CA"Find all tom users in "San Francisco, CA".
                  join extension:coffeeFind all instances of join in code with coffee extension.
                  NOT catExcludes all results containing cat.
                  + +
                  + +

                  Repository search + + + +

                  +

                  Repository search looks through the projects you have access to on GitHub. You can also filter the results:

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  This searchFinds repositories with…
                  cat stars:>100Find cat repositories with greater than 100 stars.
                  user:defunktGet all repositories from the user defunkt.
                  pugs pushed:>2013-01-28Pugs repositories pushed to since Jan 28, 2013.
                  node.js forks:<200Find all node.js repositories with less than 200 forks.
                  jquery size:1024..4089Find jquery repositories between the sizes 1024 and 4089 kB.
                  gitx fork:trueRepository search includes forks of gitx.
                  gitx fork:onlyRepository search returns only forks of gitx.
                  + +
                  + +

                  Code search + + + +

                  +

                  Code search looks through the files hosted on GitHub. You can also filter the results:

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  This searchFinds repositories with…
                  install repo:charles/privaterepoFind all instances of install in code from the repository charles/privaterepo.
                  shogun user:herokuFind references to shogun from all public heroku repositories.
                  join extension:coffeeFind all instances of join in code with coffee extension.
                  system size:>1000Find all instances of system in code of file size greater than 1000kbs.
                  examples path:/docs/Find all examples in the path /docs/.
                  replace fork:trueSearch replace in the source code of forks.
                  + +
                  + +

                  Issue search + + + +

                  +

                  Issue search looks through issues and pull requests on GitHub. You can also filter the results:

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  This searchFinds issues…
                  encoding user:herokuEncoding issues across the Heroku organization.
                  cat is:openFind cat issues that are open.
                  strange comments:>42Issues with more than 42 comments.
                  hard label:bugHard issues labeled as a bug.
                  author:mojomboAll issues authored by mojombo.
                  mentions:tpopeAll issues mentioning tpope.
                  assignee:rtomaykoAll issues assigned to rtomayko.
                  exception created:>2012-12-31Created since the beginning of 2013.
                  exception updated:<2013-01-01Last updated before 2013.
                  + +
                  + +

                  User search + + + +

                  +

                  User search finds users with an account on GitHub. You can also filter the results:

                  + + + + + + + + + + + + + + + + + + + + + + + + + +
                  This searchFinds repositories with…
                  fullname:"Linus Torvalds"Find users with the full name "Linus Torvalds".
                  tom location:"San Francisco, CA"Find all tom users in "San Francisco, CA".
                  chris followers:100..200Find all chris users with followers between 100 and 200.
                  ryan repos:>10Find all ryan users with more than 10 repositories.
                  +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  + + + + +
                  +

                  + 1 code result + + in void-linux/void-packages + + + or view all results on GitHub + +

                  + +
                  + + +
                  +
                  + +
                  + +
                  + + + +
                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  + 1 + # Template file for 'surf'
                  + 2 + pkgname=surf
                  + 3 + version=2.1 +
                  + 4 + revision=1 +
                  + 5 + build_style=gnu-makefile +
                  + 9 + short_desc="Simple web browser based on WebKit/GTK+"
                  + 10 + maintainer="Orphaned <orphan@voidlinux.org>" +
                  + 11 + license="MIT" +
                  +
                  + +
                  + + + Showing the top three matches + + + + Last indexed May 9, 2021 + +
                  + +
                  +
                  + +
                  + +
                  + +
                  +
                  + + +
                  + +
                  + + +
                  + +
                  + + +
                  +
                  + +
                  + + + + + + + + + + + + + + + + + + +
                  + +
                  + + + diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FC9B224A854CFD9919DB2988AC9B8EFE038F2857 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FC9B224A854CFD9919DB2988AC9B8EFE038F2857 new file mode 100644 index 0000000..eded25b Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FC9B224A854CFD9919DB2988AC9B8EFE038F2857 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FC9B224A854CFD9919DB2988AC9B8EFE038F2857-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FC9B224A854CFD9919DB2988AC9B8EFE038F2857-blob new file mode 100644 index 0000000..ba2f34d --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FC9B224A854CFD9919DB2988AC9B8EFE038F2857-blob @@ -0,0 +1,10148 @@ +/* Bundle Includes: + * css/share-dialog.css + * css/megadrop.css + * css/popups.css + * css/data-blocks-view.css + * css/perfect-scrollbar.css + * css/recovery.css + * css/settings.css + * css/media-print.css + * css/animations.css + * css/affiliate-program.css + * css/backup-center.css + * css/top-menu.css + * css/context-menu.css + * css/tables.css + * css/recents.css + * css/transfer-widget.css + * css/components/fm-left-pane.css + * css/chat-bundle.css + * css/topbar.css + */ + +.mega-dialog.share-dialog{ + border-radius:var(--border-radius); + height:auto; + min-height:10px; + overflow:hidden; + width:560px +} +.mega-dialog.share-dialog .share-dialog-bottom{ + -webkit-padding-end:0; + background:var(--surface-grey-1); + padding-inline-end:0 +} +.mega-dialog.share-dialog .share-dialog-top-body{ + padding-bottom:16px; + position:relative +} +.mega-dialog.share-dialog .share-dialog-bottom-body{ + margin-top:24px; + position:relative +} +.mega-dialog.share-dialog .share-dialog-permissions-menu{ + transition:opacity .2s +} +.share-dialog-top-body .share-dialog-shared-item{ + display:inline-block; + height:48px; + width:100% +} +.ru .share-dialog-top-body .share-dialog-shared-item{ + max-width:65% +} +.share-dialog-top-body .share-dialog-copy-link-wrapper{ + -webkit-padding-end:4px; + display:none; + float:right; + padding-inline-end:4px; + vertical-align:middle +} +.share-dialog-top-body .share-dialog-copy-link-msg{ + -webkit-padding-end:4px; + padding-inline-end:4px; + padding-top:12px; + text-align:right +} +.share-dialog-top-body .copy-link-icon{ + -webkit-padding-start:8px; + background-image:url(../imagery/mega-fm-main-sprite.7d3634e3f4c954e9.png); + background-position:-15px -4824px; + background-repeat:no-repeat; + height:16px; + padding-inline-start:8px; + width:16px +} +.share-dialog-top-body .copy-link-icon,.share-dialog-top-body .copy-link-txt,.share-dialog-top-body .item-type-icon{ + display:inline-block; + vertical-align:middle +} +.share-dialog-top-body .item-type-icon{ + -webkit-margin-end:12px; + margin-inline-end:12px +} +.share-dialog-top-body .share-dialog-folder-info-block{ + display:inline-block; + max-width:calc(100% - 60px); + vertical-align:middle +} +.share-dialog-top-body .share-dialog-folder-name{ + color:var(--text-color-high); + line-height:18px; + overflow:hidden; + padding-bottom:2px; + text-overflow:ellipsis; + white-space:nowrap +} +.share-dialog-top-body .share-dialog-folder-info{ + font:var(--text-body2); + letter-spacing:0; + width:300px +} +.share-dialog-bottom-body .share-dialog-access-title{ + -webkit-margin-end:12px; + color:var(--text-color-high); + font-family:var(--text-font-family-semibold); + letter-spacing:0; + margin-bottom:16px; + margin-inline-end:12px +} +.share-dialog-bottom-body .share-dialog-access-list{ + max-height:300px; + overflow:hidden; + padding:0; + position:relative +} +.share-dialog-bottom-body .share-dialog-access-add{ + margin-left:-9px; + margin-top:12px +} +.share-dialog-bottom-body .share-dialog-access-node{ + align-items:center; + display:flex; + height:32px; + justify-content:space-between; + overflow:hidden +} +.share-dialog-access-node .access-node-info-block{ + display:inline-block; + vertical-align:middle; + width:428px +} +.share-dialog-access-node .access-node-avatar{ + border-radius:4px; + display:inline-block; + height:24px; + line-height:24px; + vertical-align:middle; + width:24px +} +.share-dialog-access-node .access-node-username{ + color:var(--text-color-high); + display:inline-block; + font-size:14px; + letter-spacing:0; + line-height:20px; + max-width:80%; + overflow:hidden; + padding:0 8px; + text-overflow:ellipsis; + vertical-align:middle; + white-space:nowrap +} +.share-dialog-access-node .access-node-status{ + display:inline-block; + vertical-align:middle +} +.share-dialog-access-node .access-node-status .nw-contact-status{ + margin:0 +} +.share-dialog-access-node .access-node-permission-wrapper{ + cursor:pointer; + display:inline-block +} +.share-dialog-access-node.owner .access-node-permission-wrapper{ + cursor:default +} +.share-dialog-access-node.owner .access-node-permission:hover{ + background:none; + cursor:default +} +.share-dialog-access-node .access-node-permission i{ + --icon-size:24px; + --mask-color:var(--text-color-medium); + display:none; + transition:var(--transition-color) +} +.share-dialog-access-node .access-node-permission.active i,.share-dialog-access-node .access-node-permission:hover i{ + --mask-color:var(--text-color-high) +} +.share-dialog-access-node .access-node-permission.full-access .full-access,.share-dialog-access-node .access-node-permission.owner .owner,.share-dialog-access-node .access-node-permission.read-and-write .read-and-write,.share-dialog-access-node .access-node-permission.read-only .read-only{ + display:block +} +.share-dialog-access-node .access-node-remove{ + --icon-size:24px; + --mask-color:var(--text-color-medium); + -webkit-margin-end:20px; + -webkit-margin-start:3px; + cursor:pointer; + display:inline-block; + margin-inline-end:20px; + margin-inline-start:3px; + opacity:0 +} +.share-dialog-access-node .access-node-remove:hover{ + --mask-color:var(--text-color-high) +} +.share-dialog-access-node:not(.owner):hover .access-node-remove{ + cursor:pointer; + opacity:1 +} +.mega-dialog.share-dialog .mega-banner{ + align-items:center; + display:flex; + justify-content:center; + margin:6px 0 0; + padding:2px 8px; + text-align:center; + width:calc(100% - 48px) +} +.mega-dialog.share-dialog .warning-template span{ + --icon-size:24px; + --mask-color:var(--secondary-orange); + -webkit-margin-start:2px; + color:var(--secondary-orange); + display:inline-block; + margin-inline-start:2px; + vertical-align:middle +} +.share-add-dialog-bottom-body .cancel-add-share,.share-dialog-bottom-body .remove-share{ + -webkit-margin-end:12px; + margin-inline-end:12px +} +.share-dialog-bottom-body .remove-share.disabled{ + display:none +} +.mega-dialog.dialog-template-main.share-dialog>footer .footer-container{ + padding:16px 48px +} +.mega-dialog.share-dialog .share-dialog-bottom-msg{ + background:var(--surface-grey-1); + padding:8px 0 16px; + text-align:center +} +.mega-dialog.share-add-dialog{ + background:var(--surface-main); + border-radius:var(--border-radius); + height:auto; + overflow:hidden; + width:432px; + z-index:1100 +} +.mega-dialog.share-add-dialog .content-block{ + padding:0 +} +.mega-dialog.share-add-dialog .content-block.imported{ + background:var(--surface-grey-1); + padding:24px 48px +} +.mega-dialog.share-add-dialog .share-add-dialog-bottom{ + background:var(--surface-grey-1); + border-radius:0 0 var(--border-radius) var(--border-radius) +} +.mega-dialog.share-add-dialog header h2 .selected-num{ + -webkit-margin-start:10px; + background:var(--surface-grey-2); + border-radius:9px; + box-sizing:border-box; + display:inline-block; + height:18px; + line-height:18px; + margin-inline-start:10px; + margin-top:-3px; + min-width:18px; + padding:0 5px; + text-align:center; + vertical-align:middle +} +.mega-dialog.share-add-dialog header h2 .selected-num span{ + font-size:10px; + font-weight:600; + text-align:center; + vertical-align:top +} +.share-add-dialog-bottom .multiple-input-warning{ + font:var(--text-body2); + margin:6px 0; + text-align:center +} +.share-add-dialog-bottom .share-message{ + background:var(--surface-grey-1); + border-radius:4px; + box-sizing:border-box; + margin-top:11px +} +.share-add-dialog-bottom .share-message .textarea-clone,.share-add-dialog-bottom .share-message textarea{ + color:var(--text-color-high); + font-size:13px; + padding:0 12px +} +.share-add-dialog-bottom .share-message textarea::placeholder{ + color:var(--text-color-low) +} +.share-add-dialog-bottom .share-message textarea:focus::placeholder{ + color:transparent +} +.share-add-dialog-bottom .share-message .share-message-hidden{ + padding:0 9px; + z-index:-100 +} +.share-add-dialog-bottom .share-add-dialog-buttons-wrapper{ + display:flex; + height:38px; + justify-content:flex-end; + margin-top:14px +} +.share-add-dialog-bottom .add-share{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.share-add-dialog-bottom .multiple-input i{ + --icon-size:24px; + --mask-color:var(--text-color-medium); + margin:7px 0 0 10px; + opacity:.74; + position:absolute +} +.multiple-input .share-added-contact i{ + margin:-2px 0 0 10px +} +.mega-dialog.share-add-dialog .horizontal-contacts-list{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:8px; + box-sizing:border-box; + height:80px; + margin:0 48px 12px; + padding:0 +} +.mega-dialog.share-add-dialog .horizontal-contacts-list .selected-contact-card{ + height:60px; + width:62px +} +.mega-dialog.share-add-dialog .horizontal-contacts-list .selected-contact-card .remove-contact-bttn{ + cursor:pointer +} +.mega-dialog.share-add-dialog .horizontal-contacts-list .selected-contact-card .small-rounded-avatar img{ + height:36px; + width:36px +} +.mega-dialog.share-add-dialog .horizontal-contacts-list .selected-contact-card .user-card-name.light{ + max-width:calc(100% - 10px) +} +.mega-dialog.share-add-dialog .horizontal-contacts-list div.ps>.ps__scrollbar-x-rail>.ps__scrollbar-x{ + border-radius:2px; + bottom:2px; + height:4px +} +.mega-dialog.share-add-dialog .contacts-search-header{ + margin:0 35px 12px 48px +} +.mega-dialog.share-add-dialog .contacts-search-header input{ + background:var(--surface-grey-2); + color:var(--text-color-high) +} +.mega-dialog.share-add-dialog .contacts-search-header input::placeholder{ + color:var(--text-color-low) +} +.mega-dialog.share-add-dialog .contacts-search-header input:focus::placeholder{ + color:var(--color-text-white-medium) +} +.mega-dialog.share-add-dialog .contacts-search-scroll{ + height:240px !important; + min-height:240px +} +.mega-dialog.share-add-dialog .contacts-search-subsection{ + padding:0 48px +} +.mega-dialog.share-add-dialog .contacts-search-subsection .contacts-search-list{ + -webkit-padding-end:12px; + padding-inline-end:12px; + width:336px +} +.mega-dialog.share-add-dialog .contacts-search-list .contacts-info.body{ + border-bottom:none; + height:32px; + padding:4px 0 +} +.mega-dialog.share-add-dialog .contacts-list-header{ + margin:0 +} +.mega-dialog.share-add-dialog .contacts-search-list .small-rounded-avatar{ + height:24px; + line-height:24px; + width:24px +} +.mega-dialog.share-add-dialog .contacts-search-list .small-rounded-avatar img{ + height:24px; + width:24px +} +.mega-dialog.share-add-dialog .contacts-search-list .user-card-tick-wrap{ + height:16px; + right:0; + width:16px +} +.rtl .mega-dialog.share-add-dialog .contacts-search-list .user-card-tick-wrap{ + left:0; + right:auto +} +.mega-dialog.share-add-dialog .contacts-search-list .selected .user-card-tick-wrap{ + background:var(--checkbox-fill-active); + border:transparent +} +.mega-dialog.share-add-dialog .contacts-search-list .small-icon.mid-green-tick{ + background-position:-86px -623px +} +.mega-dialog.share-add-dialog .contacts-search-list .user-card-data{ + -webkit-padding-start:32px; + padding-inline-start:32px; + padding-top:4px +} +.mega-dialog.share-add-dialog .contacts-search-list .user-card-data .user-card-name{ + max-width:80% +} +.mega-dialog.share-add-dialog .contacts-search-list .user-card-data .user-card-name:hover,.mega-dialog.share-add-dialog .contacts-search-list .user-card-data .user-card-name strong{ + color:var(--text-color-high) +} +.mega-dialog.share-add-dialog .contacts-search-list .user-card-status{ + -webkit-margin-start:5px; + display:inline; + margin-inline-start:5px +} +.mega-dialog.share-add-dialog .contacts-search-list .user-card-status span{ + display:none +} +.mega-dialog.share-add-dialog .chat-contactspicker-no-contacts .fm-empty-contacts-bg{ + -webkit-margin-end:12px; + margin-inline-end:12px; + margin-top:63px +} +.mega-dialog.share-add-dialog .chat-contactspicker-no-contacts .fm-empty-cloud-txt.small{ + margin-top:16px +} +.mega-dialog.share-add-dialog .chat-contactspicker-no-contacts .fm-empty-description.small{ + padding:1px 0 38px +} +.mega-dialog.share-add-dialog .chat-contactspicker-no-contacts.searching{ + align-items:center; + display:flex; + flex-direction:column; + height:240px; + justify-items:center +} +.mega-dialog.share-add-dialog .chat-contactspicker-no-contacts.searching .fm-empty-contacts-bg{ + background-image:url(../imagery/mega-dialog-sprite.57a6bd1346996955.png); + background-position:0 -7103px; + background-repeat:no-repeat; + background-size:auto; + height:96px; + margin:43px auto 0; + width:96px +} +.mega-dialog.share-add-dialog .chat-contactspicker-no-contacts.searching .fm-empty-cloud-txt.small{ + margin-top:0; + padding:0 +} +@media only screen and (max-height:768px){ +.share-add-dialog-bottom .multiple-input{ + max-height:78px +} +.mega-dialog.share-add-dialog .contacts-search-scroll{ + height:176px !important; + min-height:176px +} +.mega-dialog.share-add-dialog .chat-contactspicker-no-contacts.searching{ + height:176px +} +.mega-dialog.share-add-dialog .chat-contactspicker-no-contacts.searching .fm-empty-contacts-bg{ + margin:16px auto 0 +} +} + +.widget-upload{ + background-color:#f8f9fa; + height:100vh; + min-height:650px; + overflow:hidden; + position:absolute; + width:100% +} +.widget-upload .wu-main,.widget-upload .wu-missing-main{ + background-color:#fff; + border-radius:0; + box-shadow:0 1px 2px 0 rgba(0, 0, 0, .15); + height:562px; + left:50%; + margin:-313px 0 0 -200px; + position:absolute; + top:50%; + width:400px +} +.wu-main .wu-data,.wu-missing-main .wu-data{ + background-color:#fff; + border-bottom:1px solid #eee; + display:block; + height:55px; + padding:40px 20px 32px; + text-align:center +} +.wu-data .wu-folder-name-text{ + color:#777e82; + float:left; + font-family:LatoWeb,sans-serif; + font-size:32px; + line-height:36px; + width:100% +} +.wu-data .wu-folder-name-text,.wu-data .wu-folder-name-text span,.wu-data .wu-name{ + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.wu-data .wu-name{ + color:#999; + float:left; + font-family:LatoWeb,sans-serif; + font-size:16px; + line-height:32px; + width:100% +} +.wu-logo{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-6px -383px; + background-repeat:no-repeat; + border-radius:100%; + cursor:pointer; + float:left; + height:24px; + margin:6px 0 6px 12px; + width:24px +} +.wu-data .wu-email{ + float:left; + margin-top:28px; + width:100% +} +.wu-email .wu-email-label{ + color:#82898d; + display:block; + font-size:14px; + font-weight:600; + line-height:18px; + padding-bottom:4px +} +.wu-email .wu-email-text{ + color:#aaa; + display:block; + font-size:14px; + line-height:18px +} +.wu-data .wu-msg{ + display:none; + float:left; + margin-top:24px; + width:100% +} +.wu-msg .wu-msg-label{ + color:#82898d; + font-family:LatoWebSemibold,sans-serif; + letter-spacing:.4px; + padding-bottom:4px +} +.wu-msg .wu-msg-label,.wu-msg .wu-msg-text{ + display:block; + font-size:14px; + line-height:18px +} +.wu-msg .wu-msg-text{ + color:#aaa +} +.wu-main .wu-items{ + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.wu-main .wu-items,.wu-missing-main .wu-missing{ + background-color:#fff; + border-bottom:1px solid #eee; + height:350px; + width:inherit +} +.wu-missing-main .wu-missing{ + cursor:default; + -webkit-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.wu-items .wu-empty-upload,.wu-missing .wu-empty-upload{ + height:308px; + position:absolute; + width:400px +} +.wu-empty-upload .wu-large-logo{ + background-image:url(../imagery/mega-wu_empty_upload.a2a965054c551ae9.png); + background-position:0 0; + background-repeat:no-repeat; + height:250px; + margin:20px 0 0; + width:400px +} +.wu-empty-upload .wu-large-logo.grey{ + -webkit-filter:grayscale(100%); + -moz-filter:grayscale(100%); + -o-filter:grayscale(100%); + -ms-filter:grayscale(100%); + filter:grayscale(100%) +} +.wu-empty-upload .wu-upload-text{ + color:#939da3; + display:block; + font-size:14px; + line-height:21px; + margin:10px auto; + text-align:center; + width:320px +} +.wu-items .wu-stat{ + background-color:#f5f7f9; + height:90px; + padding-left:20px; + padding-right:20px +} +.wu-stat .wu-total-curr,.wu-stat .wu-total-perc,.wu-stat .wu-total-speed{ + display:block; + margin-top:28px +} +.wu-stat .wu-total-curr{ + color:#888; + float:left; + font-size:16px; + overflow:hidden; + text-align:left; + text-overflow:ellipsis; + white-space:nowrap; + width:33% +} +.wu-stat .wu-total-perc{ + float:right; + text-align:right; + width:33% +} +.wu-stat .wu-total-speed{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + float:left; + overflow:hidden; + text-align:center; + text-overflow:ellipsis; + white-space:nowrap; + width:33% +} +.wu-total-curr .wu-curr-label{ + color:#959ba7; + display:block; + font-size:14px; + height:18px; + line-height:18px +} +.wu-total-curr .wu-curr-value,.wu-total-curr .wu-total-value{ + color:#222; + font-family:LatoWebSemibold,sans-serif; + font-size:15px; + height:20px; + line-height:28px; + margin-top:4px +} +.wu-total-curr .wu-total-value{ + color:#888; + font-size:15px +} +.wu-total-perc .wu-total-perc-label,.wu-total-speed .wu-total-speed-label{ + color:#959ba7; + display:block; + font-size:14px; + height:18px; + line-height:18px +} +.wu-total-perc .wu-total-perc-value,.wu-total-speed .wu-total-speed-value{ + color:#222; + font-family:LatoWebSemibold,sans-serif; + font-size:15px; + height:20px; + line-height:28px +} +.wu-items .wu-queue{ + background-color:#fff; + color:#555; + font-size:14px; + max-height:258px; + overflow:hidden; + width:inherit +} +.wu-queue .wu-queue-item{ + border-bottom:1px solid #ddd; + box-sizing:border-box; + display:block; + height:48px; + margin:0 16px; + width:inherit +} +.wu-queue-item .wu-queue-item-name,.wu-queue-item .wu-queue-item-stat,.wu-queue-item .wu-queue-item-status{ + background-color:#fff; + box-sizing:border-box; + display:block; + float:left; + height:calc(100% - 1px); + overflow:hidden; + padding-bottom:11px; + padding-top:17px; + text-overflow:ellipsis; + white-space:nowrap +} +.wu-queue-item .wu-queue-item-name{ + text-align:left; + width:260px +} +.wu-queue-item .wu-queue-item-stat{ + display:none; + padding-left:14px; + text-align:center +} +.wu-queue-item .wu-queue-item-status{ + float:right; + margin-right:20px; + text-align:right; + width:80px +} +.wu-main .wu-main-bottom,.wu-missing-main .wu-main-botton{ + background-color:#fff; + box-sizing:border-box; + display:block; + height:82px; + width:inherit +} +.wu-main-bottom .wu-lang{ + cursor:pointer; + float:left; + font-size:16px; + height:30px; + line-height:30px; + margin:24px 12px +} +.wu-main-bottom .wu-lang:hover .lang:before{ + opacity:1 +} +.wu-lang .glob-icon{ + box-sizing:border-box; + cursor:pointer; + float:right; + height:35px; + padding:6px 12px 0 13px +} +.wu-lang .glob-icon:before{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-repeat:no-repeat; + content:""; + display:block; + height:24px; + opacity:.8; + transition:all .2s ease-in-out; + width:24px +} +.wu-lang .glob-icon:after{ + background-color:rgba(0, 0, 0, .05); + content:""; + height:24px; + margin:0 0 0 -13px; + position:absolute; + top:6px; + width:1px +} +.wu-lang .glob-icon.active:before,.wu-lang .glob-icon:hover:before{ + opacity:1 +} +.wu-lang .glob-icon.lang:before{ + background-position:-7px -286px; + float:left +} +.wu-lang .glob-icon.lang:after{ + display:none +} +.wu-lang .glob-icon.lang{ + float:left +} +.dark-tooltip.widget{ + left:0; + margin:0; + top:34px; + transition:top .2s ease-in-out,opacity .2s ease-in-out,visibility .2s ease-in-out +} +.dark-tooltip.widget.hovered{ + left:auto; + top:630px +} +.wu-lang .wu-change-lang{ + color:#555; + cursor:pointer; + display:block; + float:left; + margin-top:3px; + opacity:.8; + text-transform:uppercase; + transition:all .2s ease-in-out; + white-space:nowrap +} +.wu-main-bottom .wu-btn{ + float:right; + margin-right:20px; + margin-top:22px +} +.widget-upload .wu-footer{ + background-color:#fff; + bottom:0; + clear:both; + color:#333; + display:block; + margin-top:-64px; + padding:13px 0; + position:absolute; + width:inherit +} +.wu-footer .wu-copyrights{ + background-position:-11px -729px; + background-repeat:no-repeat; + color:#333; + display:block; + font-size:14px; + line-height:18px; + margin-left:24px; + padding:9px 0 9px 26px +} +.wu-footer .wu-copyrights span{ + color:#666; + padding-left:5px +} +.wu-msg textarea{ + border:none; + box-shadow:none; + height:120px; + outline:none; + overflow:auto; + width:100% +} +.wu-main .wu-items:hover{ + background-color:#fff; + cursor:pointer; + transition:all .2s ease-in-out +} +.widget-upload .wu-wrapper{ + height:100%; + position:relative +} +.wu-wrapper .wu-push{ + height:64px +} +.footer-button.widget-dialog-buttons{ + border-top:1px solid #eee; + margin-top:20px +} +.widget-card .footer-button.widget-dialog-buttons{ + padding-top:16px +} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:1.5dppx){ +.wu-lang .glob-icon:before,.wu-logo{ + background-image:url(../imagery/mega-top-sprite-2x.7bd10334447ce203.png); + background-size:38px auto +} +.wu-empty-upload .wu-large-logo{ + background-image:url(../imagery/mega-wu_empty_upload-2x.9164c28e064529f1.png); + background-size:400px auto +} +} + +.dropdown.body.popup.contacts-search{ + border-radius:24px; + padding:0; + width:420px +} +.dropdown.body.popup.contacts-search.main-start-chat-dropdown{ + height:602px +} +body.br .dropdown.body.popup.contacts-search,body.fr .dropdown.body.popup.contacts-search,body.id .dropdown.body.popup.contacts-search,body.it .dropdown.body.popup.contacts-search{ + width:456px +} +body.tl .dropdown.body.popup.contacts-search{ + width:480px +} +.popup.add-participant-selector{ + left:auto !important; + right:12px +} +.popup.contact-picker-dialog{ + right:auto; + width:420px +} +.popup.add-participant-selector .dropdown-white-arrow{ + margin-left:50px; + top:-55px +} +.new-group-chat .description.chatlinks-intermediate-msg{ + margin:4px 0 0 +} +.contacts-search-header{ + border-radius:19px; + box-sizing:border-box; + margin:0 48px; + overflow:hidden; + position:relative; + z-index:10 +} +.contacts-search-header-separator{ + background:var(--divider-color); + content:""; + display:block; + height:1px; + margin:12px 0 0; + width:100% +} +.rtl .contacts-search-header{ + margin:auto; + width:80% +} +.new-group-chat .contacts-search-header{ + border-radius:unset; + padding:0 +} +.contacts-search-header input,.search-block.emoji input{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + color:var(--text-color-medium); + display:block; + font-size:13px; + line-height:24px; + font:var(--text-body1); + margin:12px 0 0 40px; + padding:0; + transition:all .2s ease-in-out; + vertical-align:top; + width:186px +} +.contacts-search-header input{ + background:var(--surface-grey-2); + border:0; + border-radius:18px; + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + line-height:24px; + margin:0; + padding:4px 30px 4px 38px; + width:100% +} +.contacts-search-header input::-webkit-input-placeholder{ + color:#555 +} +.contacts-search-header input:-moz-placeholder,.contacts-search-header input::-moz-placeholder{ + color:#555; + opacity:1 +} +.contacts-search-header input:-ms-input-placeholder{ + color:#555 +} +.contacts-search-header input:focus::-webkit-input-placeholder{ + color:#ccc +} +.contacts-search-header input:-moz-placeholder,.contacts-search-header input:focus::-moz-placeholder{ + color:#ccc; + opacity:1 +} +.contacts-search-header input:focus:-ms-input-placeholder{ + color:#ccc +} +.contacts-search-header>i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + left:8px; + position:absolute; + top:50%; + transform:translateY(-50%) +} +.search-block.emoji>i{ + --icon-size:24px; + --mask-color:var(--icon-inactive); + margin:11px 3px 1px 8px; + position:absolute; + vertical-align:top +} +.contacts-search-scroll{ + height:80%; + margin-top:8px; + max-height:426px; + min-height:288px; + overflow:hidden +} +.main-start-chat-dropdown .contacts-search-scroll{ + box-sizing:border-box; + margin:0; + max-height:366px; + min-height:366px; + padding:8px 0 0; + position:relative +} +.contacts-search-scroll .contacts-search-subsection{ + padding:0 48px +} +.contacts-search-scroll em{ + color:#666; + display:block; + font-style:normal; + height:48px; + line-height:48px; + text-align:center; + vertical-align:middle +} +.rtl .contacts-search-list .contacts-info.body.contacts-search{ + padding:4px 12px +} +.contacts-search-list .contacts-info .user-card-data{ + max-width:80%; + padding-inline-start:10px +} +.contacts-search-list .user-card-data .user-card-name{ + margin:0 5px 0 0 +} +.contacts-search-list .user-card-data .user-card-status{ + display:inline +} +.contacts-search-list .user-card-data .user-card-status span{ + display:none +} +.contacts-search-list .contacts-info.body.contacts-search{ + align-items:center; + box-sizing:border-box; + cursor:pointer; + display:flex; + padding:4px 0; + width:100% +} +.contacts-search-list .contacts-info.body.contacts-search:before{ + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.call-ui-new-contact{ + width:640px +} +.contacts-search-list .contacts-info.body.contacts-search .user-card-tick-wrap{ + right:1px +} +.contacts-search-list .contacts-info.body.contacts-search .avatar-wrapper{ + font:var(--text-body1); + height:24px; + width:24px +} +.rtl .contacts-search-list .contacts-info.body.contacts-search .avatar-wrapper{ + right:12px +} +.contacts-search-list .contacts-info.body.contacts-search img{ + height:24px; + width:24px +} +.contacts-search-list .contacts-info.body.contacts-search .emoji{ + height:17px; + width:17px +} +.contacts-search-list .contacts-info.body.contacts-search:last-child{ + margin-bottom:12px +} +.contacts-search .user-card-presence{ + margin:2px 4px 6px 8px +} +.contacts-search .user-card-data{ + padding:0 30px 0 79px +} +.contacts-search .user-card-email{ + font-size:13px; + line-height:18px +} +.contacts-search .user-card-name{ + display:inline-block; + font-size:14px; + line-height:19px; + max-width:-webkit-calc(100% - 24px); + max-width:-moz-calc(100% - 24px); + max-width:calc(100% - 24px) +} +.horizontal-contacts-list{ + height:78px; + padding:0 48px; + position:relative +} +.horizontal-contacts-list div.ps>.ps__scrollbar-x-rail>.ps__scrollbar-x{ + bottom:1px; + height:6px +} +.selected-contact-block{ + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + font-size:0; + line-height:0; + min-height:78px; + overflow:auto +} +.horizontal-contacts-list .horizontal-only{ + height:auto +} +.selected-contact-block .select-contact-centre{ + display:inline-block; + vertical-align:top +} +.horizontal-contacts-list .selected-contact-block .small-rounded-avatar{ + -moz-border-radius:8px; + -webkit-border-radius:8px; + border-radius:8px; + display:block; + float:none; + height:36px; + line-height:35px; + margin:0 auto; + width:36px +} +.horizontal-contacts-list .selected-contact-block .small-rounded-avatar img{ + height:100%; + width:100% +} +.horizontal-contacts-list .selected-contact-block .user-card-data{ + display:block; + float:none; + padding:2px 4px; + text-align:center +} +.selected-contact-block .selected-contact-card{ + float:left; + height:54px; + margin:14px 0 0; + position:relative; + width:54px +} +.selected-contact-block .selected-contact-card:last-of-type{ + margin-right:0 +} +.horizontal-contacts-list .selected-contact-block .user-card-name.light{ + font-size:12px; + max-width:-webkit-calc(100% - 2px); + max-width:-moz-calc(100% - 2px); + max-width:calc(100% - 2px) +} +.horizontal-contacts-list .selected-contact-block .user-card-name.light .emoji{ + height:14px; + width:14px +} +.selected-contact-block .remove-contact-bttn{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:100%; + cursor:pointer; + height:16px; + position:absolute; + right:6px; + text-align:center; + top:-6px; + width:16px; + z-index:10 +} +.selected-contact-block .remove-contact-icon{ + background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAAEhcmxxAAAAAXNSR0IArs4c6QAAANVJREFUKBVtkcENwkAMBHMIaACFGnjmmxLSBm3QVCIK4YPoIj/eHLO2L7oQLFlZr3dtn9LknFNTgiI7BozGBzU1gFY9vtd9gDmldEowM8RFpMnkIYp8Bo/WDIEIhQlsIMWiAJ/Jtxq3xeajO6tpPJUxrgMrDnXz5VyQP0pzituh0swHeRRB7U3Ah/SZ0aDu7SqAQkf4G2SNgNNBeqMGDEYDWlIGhRn5FqG4kVy2lWHaJmN5DTDfya1QDhr1RAlXG+uptXC1GtPmVDPSGMj/q327/lsv8RfGGzPdsYCikgAAAABJRU5ErkJggg==); + background-repeat:no-repeat; + background-size:6px; + display:block; + height:6px; + margin:3px auto; + width:6px +} +.contacts-search-header input~.search-result-clear{ + cursor:pointer; + position:absolute; + right:8px; + top:50%; + transform:translateY(-50%) +} +.contacts-search-header input~.search-result-clear i{ + --icon-size:24px; + --mask-color:var(--icon-rest) +} +.popup.contacts-search .search-result-clear:hover{ + opacity:1 +} +.popup.contacts-search .selected-contact-amount{ + color:#777e82; + font-size:13px; + line-height:32px; + margin-left:12px +} +.contacts-search-buttons{ + align-items:center; + display:flex; + justify-content:space-between; + padding:48px 48px 24px +} +.contacts-search-buttons .button-wrapper{ + text-align:center +} +.contacts-search-buttons .button-wrapper .new-meeting{ + background:var(--surface-error) +} +.contacts-search-buttons .button-wrapper .new-chatlink{ + background:linear-gradient(180deg, #56d2f1, #2ba6de) +} +.contacts-search-buttons .button-wrapper .new-chatlink i,.contacts-search-buttons .button-wrapper .new-meeting i{ + --mask-color:var(--secondary-white) +} +.contacts-search-buttons .button-title{ + color:var(--text-color-high); + display:block; + font:var(--text-body2); + padding:4px 0 0 +} +.contacts-search-bottom i,.contacts-search-buttons i{ + --icon-size:24px +} +.contacts-search-bottom i{ + --mask-color:var(--secondary-green) +} +.contacts-search-buttons .link-button.light{ + display:inline-block; + margin:2px 0; + width:100% +} +.contacts-search-bottom{ + border-top:1px solid var(--divider-color); + box-sizing:border-box; + padding:10px 0 20px 42px; + width:100% +} +.rtl .contacts-search-bottom{ + padding-right:38px +} +.contacts-list-header{ + background:var(--surface-grey-2); + border-radius:4px; + color:var(--text-color-high); + height:20px; + padding:0 8px; + text-align:left +} +.rtl .contacts-list-header{ + text-align:right +} +.new-group-chat .contacts-list-header{ + margin:0 +} +.rtl .new-group-chat .contacts-list-header{ + margin:0 12px +} +.contacts-list-empty-txt{ + color:var(--text-color-medium); + font:var(--text-body2); + padding:33px 0 0; + text-align:center +} +.contacts-search-scroll+.contacts-list-header{ + margin-top:11px +} +.contacts-search-header+.contacts-list-header{ + margin-top:12px +} +.contacts-search-list{ + padding:7px 0 0 +} +.add-participant-selector .contacts-search-header{ + margin:0 48px +} +.add-participant-selector .horizontal-contacts-list{ + padding-bottom:12px; + padding-top:24px +} +.contact-picker-dialog.add-participant-selector .horizontal-contacts-list{ + box-sizing:unset +} +.add-participant-selector footer{ + padding:24px +} +.contact-picker-dialog footer{ + display:flex; + justify-content:space-between; + padding:24px +} +.add-participant-selector footer .mega-button span{ + display:block; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.add-participant-selector footer .footer-spacing{ + flex:1 0 8px +} +.dropdown.body.popup.emoji{ + height:400px; + padding:0 +} +.popup-footer.emoji,.popup-header.emoji{ + border-bottom:1px solid var(--stroke-grey-2); + box-sizing:border-box; + height:48px; + margin:3px 12px 0; + position:relative; + z-index:10 +} +.popup-footer.emoji{ + border-bottom:0; + border-top:1px solid var(--stroke-grey-2) +} +.popup-header.emoji input{ + border:0; + border-radius:18px; + color:var(--text-color-high); + display:inline-block; + font:var(--text-body1); + margin:6px 0 0; + padding:7px 7px 7px 40px; + width:100% +} +.rtl .popup-header.emoji input{ + padding:7px 40px 7px 7px +} +.popup-scroll-area.emoji{ + max-height:302px; + overflow:hidden; + position:relative; + z-index:10 +} +.popup-scroll-area .emojis-not-found{ + color:#999; + margin-left:132px; + position:relative; + top:10px +} +.popup-scroll-content.emoji{ + min-height:312px; + padding:12px +} +.popup-scroll-area.gif-popup{ + max-height:520px; + overflow:hidden; + position:relative; + z-index:10 +} +.dark-direct-tooltip.simpletip-tooltip{ + display:block; + max-width:700px; + opacity:0; + position:absolute; + transition:opacity .2s ease-in-out 1s; + transition-delay:.5s; + white-space:normal; + z-index:3000 +} +.rtl .dark-direct-tooltip.simpletip-tooltip{ + direction:rtl +} +.dark-direct-tooltip.simpletip-tooltip span{ + position:relative; + z-index:1 +} +.dark-direct-tooltip.simpletip-tooltip.delay{ + transition-delay:1ms +} +.dark-direct-tooltip.simpletip-tooltip.visible{ + opacity:1 +} +.dark-direct-tooltip.simpletip-tooltip i{ + --mask-color:var(--stroke-grey-1-inverted); + --icon-size:24px; + height:16px; + overflow:hidden +} +.dark-direct-tooltip.simpletip-tooltip.inverted i{ + --mask-color:var(--stroke-grey-1) +} +.dark-direct-tooltip.simpletip-tooltip.center-align{ + text-align:center +} +.dark-direct-tooltip.simpletip-tooltip.medium-width{ + max-width:220px; + overflow-wrap:break-word +} +.dark-direct-tooltip.simpletip-tooltip.bluetip{ + background:var(--label-blue) +} +.dark-direct-tooltip.simpletip-tooltip.bluetip i{ + --mask-color:var(--label-blue) +} +.dark-direct-tooltip.simpletip-tooltip.large-width{ + max-width:320px +} +.dark-direct-tooltip.simpletip-tooltip.no-max-width{ + max-width:none +} + +.search .file-block-scrolling,.select .file-block-scrolling,.select .out-shared-blocks-scrolling,.select .shared-blocks-scrolling{ + height:100% +} +.files-grid-view,.fm-blocks-view,.fm-blocks-view.out-shares-view,.fm-blocks-view.public-links-view,.fm-blocks-view.shared-view,.out-shared-blocks-view,.shared-blocks-view,.shared-details-block{ + border-top:1px solid var(--surface-grey-2); + box-sizing:border-box; + flex-grow:1; + height:100%; + min-height:280px; + overflow:hidden; + padding:0; + position:relative +} +.fm-right-files-block.emptied .fm-blocks-view.out-shares-view,.fm-right-files-block.emptied .fm-blocks-view.public-links-view,.fm-right-files-block.emptied .fm-blocks-view.shared-view,.fm-right-files-block.emptied .fm-blocks-view:not(.shared-folder-content),.fm-right-files-block.emptied .out-shared-blocks-view,.fm-right-files-block.emptied .shared-blocks-view{ + display:none +} +.file-block-scrolling,.out-shared-blocks-scrolling,.shared-blocks-scrolling{ + box-sizing:border-box; + height:100%; + padding-right:14px +} +.file-block-scrolling .megaList-content{ + margin-bottom:24px +} +.rtl .file-block-scrolling .megaList-content{ + direction:rtl +} +.data-block-view{ + border-radius:10px; + box-sizing:border-box; + cursor:default; + display:inline-block; + line-height:0; + overflow:hidden; + padding:0; + position:relative; + text-align:center; + transition:background-color .1s ease-in-out,box-shadow .1s ease-in-out; + width:192px +} +.data-block-view.semi-big{ + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + padding:4px; + width:170px +} +.data-block-view.medium{ + width:128px +} +.fm-blocks-view .data-block-view,.out-shared-blocks-view .data-block-view,.shared-blocks-view .data-block-view{ + margin:24px 0 0 24px +} +.data-block-view:hover{ + box-shadow:0 0 0 4px var(--stroke-grey-2) +} +.data-block-view.dragover,.data-block-view.ui-selected,.data-block-view.ui-selecting{ + box-shadow:0 0 0 4px var(--secondary-blue) +} +.data-block-bg{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-4); + border-radius:10px; + box-sizing:border-box; + display:block; + height:192px; + overflow:hidden; + position:static; + text-align:center; + transition:background-color .1s ease-in-out,box-shadow .1s ease-in-out; + width:192px +} +.data-block-view.medium .data-block-bg{ + height:124px; + width:124px +} +.data-block-view .data-block-bg img{ + background:var(--image-background); + height:192px; + position:relative; + vertical-align:middle; + width:192px +} +.data-block-view.medium .data-block-bg img{ + height:124px; + vertical-align:top; + width:124px +} +.data-block-view .thumb.video img{ + height:auto +} +.data-block-view.active .data-block-bg,.data-block-view.dragover .data-block-bg,.data-block-view.ui-selected .data-block-bg,.data-block-view.ui-selecting .data-block-bg,.data-block-view:hover .data-block-bg{ + background-color:var(--stroke-grey-1); + border:1px solid var(--stroke-main) +} +.data-block-view.active .thumb .indicator{ + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity:1; + -khtml-opacity:1; + opacity:1; + transition:background-color .1s ease-in-out,box-shadow .1s ease-in-out +} +.data-block-view .tiny-button{ + bottom:8px; + float:none; + margin:0; + position:absolute; + right:8px; + z-index:100 +} +.data-block-view .user-card-presence.small{ + margin:0; + right:10px; + top:10px +} +.data-block-view .file-status-icon.icon-favourite-filled,.data-block-view .file-status-icon.icon-info,.data-block-view .file-status-icon.icon-takedown,.data-block-view .file-status-icon.icon-versions-previous,.data-block-view.linked .icon-link{ + --icon-size:16px; + background-image:none; + margin-bottom:4px; + margin-right:4px; + margin-top:4px +} +.data-block-view .file-status-icon.icon-favourite-filled,.data-block-view .file-status-icon.icon-versions-previous{ + --mask-color:var(--icon-rest) +} +.data-block-view .file-status-icon.icon-takedown{ + --mask-color:var(--secondary-red) +} +.data-block-view .file-status-icon.icon-info{ + --mask-color:var(--secondary-orange) +} +.data-block-view:not(.linked) .icon-link{ + display:none +} +.data-block-view.linked .icon-link{ + --mask-color:var(--icon-rest) +} +.data-block-view .file-status-icon.sprite-fm-mono:not(.icon-favourite-filled),.data-block-view .file-status-icon.sprite-fm-mono:not(.icon-info),.data-block-view .file-status-icon.sprite-fm-mono:not(.icon-takedown),.data-block-view .file-status-icon.sprite-fm-mono:not(.icon-versions-previous),.data-block-view.linked .sprite-fm-mono:not(.icon-link){ + height:0 +} +.data-block-view .file-status-icon.sprite-fm-mono.icon-favourite-filled,.data-block-view .file-status-icon.sprite-fm-mono.icon-info,.data-block-view .file-status-icon.sprite-fm-mono.icon-takedown,.data-block-view .file-status-icon.sprite-fm-mono.icon-versions-previous,.data-block-view.linked .sprite-fm-mono.icon-link{ + height:16px +} +.shared-folder-info-block{ + box-sizing:border-box; + display:block; + font:var(--text-body1); + padding:0 0 0 51px; + position:relative; + text-align:left +} +.out-shared-blocks-view .shared-folder-info-block,.shared-blocks-view .shared-folder-info-block{ + background:var(--surface-grey-2); + padding:8px 6px 6px 50px +} +.data-block-view .shared-folder-access{ + --mask-color:var(--icon-rest); + background-image:none; + float:left; + height:16px; + margin-right:4px; + margin-top:4px; + padding:0; + width:16px +} +.data-block-view .shared-folder-info{ + color:var(--text-color-medium); + display:block; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.data-block-view.ui-selected .file-settings-icon,.data-block-view:hover .file-settings-icon,.properties-name-block:hover .file-settings-icon{ + background:var(--surface-highlight-2); + border-radius:50%; + height:26px; + opacity:1; + width:26px +} +.megaList-content .data-block-view.ui-selected .file-settings-icon,.megaList-content .data-block-view:hover .file-settings-icon{ + background:var(--checkbox-fill-inactive) +} +.data-block-view.ui-selected .file-settings-icon i,.data-block-view:hover .file-settings-icon i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + height:24px; + opacity:1; + position:relative; + top:1px +} +.data-block-view .file-settings-icon i:before{ + line-height:24px; + transition:color .1s ease-in-out +} +.data-block-view .file-settings-icon:hover i,.data-block-view.ui-selected .file-settings-icon.active i{ + --mask-color:var(--icon-active) +} +.data-block-indicators{ + background:var(--surface-highlight-2); + border-radius:10px 10px 0 0; + display:inline-flex; + float:right; + height:auto; + justify-content:flex-end; + left:1px; + position:absolute; + right:1px; + top:1px; + z-index:2 +} +.data-block-bg.thumb .data-block-indicators{ + border-radius:8px 8px 0 0 +} +.data-block-bg.video .data-block-indicators{ + height:24px +} +.video-thumb-details{ + color:var(--stroke-main-inverted); + display:none; + font:var(--text-body2); + left:4px; + position:absolute; + text-align:left; + top:4px; + z-index:2 +} +.data-block-bg.video .video-thumb-details{ + display:block +} +.data-block-bg.video .video-thumb-details i{ + --mask-color:var(--icon-rest); + float:left; + margin-top:1px; + width:16px +} +.out-shared-blocks-view .data-block-view .data-block-bg,.shared-blocks-view .data-block-view .data-block-bg{ + border-radius:10px 10px 0 0 +} +.out-shared-blocks-view .data-block-view .file-settings-icon,.shared-blocks-view .data-block-view .file-settings-icon{ + bottom:64px; + right:8px +} +.block-view-file-type{ + background-image:url(../imagery/mega-files-icons.8f44fb1e74566206.png); + background-position:0 -3234px; + background-repeat:no-repeat; + display:block; + height:84px; + left:50%; + position:absolute; + top:45%; + transform:translate(-50%, -50%); + width:82px +} +.fm-recents .data-block-bg:not(.thumb) .block-view-file-type{ + top:50% +} +.block-view-file-type.thumb{ + background:none; + height:156px; + margin:-78px 0 0 -78px; + width:156px +} +.block-view-file-type.word{ + background-position:0 6px +} +.block-view-file-type.web-lang{ + background-position:0 -114px +} +.block-view-file-type.web-data{ + background-position:0 -234px +} +.block-view-file-type.video{ + background-position:0 -354px +} +.block-view-file-type.openoffice{ + background-position:0 -474px +} +.block-view-file-type.keynote{ + background-position:0 -594px +} +.block-view-file-type.numbers{ + background-position:0 -714px +} +.block-view-file-type.vcard{ + background-position:0 -834px +} +.block-view-file-type.torrent{ + background-position:0 -954px +} +.block-view-file-type.text{ + background-position:0 -1074px +} +.block-view-file-type.pages{ + background-position:0 -1194px +} +.block-view-file-type.spreadsheet{ + background-position:0 -1314px +} +.block-view-file-type.recovery{ + background-position:0 -1434px +} +.block-view-file-type.dmg{ + background-position:0 -1554px +} +.block-view-file-type.raw{ + background-position:0 -1674px +} +.block-view-file-type.premiere{ + background-position:0 -1794px +} +.block-view-file-type.powerpoint{ + background-position:0 -1914px +} +.block-view-file-type.megasync{ + background-position:0 -2034px +} +.block-view-file-type.megasync-mac{ + background-position:0 -2154px +} +.block-view-file-type.photoshop{ + background-position:0 -2274px +} +.block-view-file-type.pdf{ + background-position:0 -2394px +} +.block-view-file-type.experience{ + background-position:0 -2514px +} +.block-view-file-type.indesign{ + background-position:0 -2634px +} +.block-view-file-type.image{ + background-position:0 -2754px +} +.block-view-file-type.illustrator{ + background-position:0 -2874px +} +.block-view-file-type.sketch-alt{ + background-position:0 -2994px +} +.block-view-file-type.sketch{ + background-position:0 -3114px +} +.block-view-file-type.generic{ + background-position:0 -3234px +} +.block-view-file-type.font{ + background-position:0 -3354px +} +.block-view-file-type.executable{ + background-position:0 -3474px +} +.block-view-file-type.excel{ + background-position:0 -3594px +} +.block-view-file-type.compressed{ + background-position:0 -3714px +} +.block-view-file-type.cad{ + background-position:0 -3834px +} +.block-view-file-type.audio{ + background-position:0 -3954px +} +.block-view-file-type.aftereffects{ + background-position:0 -4074px +} +.block-view-file-type.threed{ + background-position:0 -4194px +} +.block-view-file-type.folder{ + background-position:0 -4314px +} +.block-view-file-type.rubbish-folder{ + background-position:0 -4434px +} +.block-view-file-type.folder.inbound-share,.fm-blocks-view.shared-view .block-view-file-type.folder,.shared-blocks-view .block-view-file-type.folder{ + background-position:0 -4794px +} +.block-view-file-type.folder-sync{ + background-position:0 -5874px +} +.block-view-file-type.rubbish-folder-sync{ + background-position:0 -5994px +} +.block-view-file-type.folder-backup{ + background-position:0 -6114px +} +.block-view-file-type.rubbish-folder-backup{ + background-position:0 -6234px +} +.block-view-file-type.folder-chat{ + background-position:0 -5634px +} +.block-view-file-type.rubbish-folder-chat{ + background-position:0 -5754px +} +.block-view-file-type.folder-camera{ + background-position:0 -4554px +} +.block-view-file-type.rubbish-folder-camera{ + background-position:0 -4674px +} +.block-view-file-type.backup{ + background-position:-5px -6354px +} +.block-view-file-type.pc{ + background-position:-5px -6474px +} +.block-view-file-type.pc-mac{ + background-position:-5px -6714px +} +.block-view-file-type.pc-win{ + background-position:-5px -6594px +} +.block-view-file-type.pc-linux{ + background-position:-5px -6834px +} +.block-view-file-type.mobile{ + background-position:-5px -6954px +} +.block-view-file-type.mobile-ios{ + background-position:-5px -7074px +} +.block-view-file-type.mobile-android{ + background-position:-5px -7194px +} +.block-view-file-type.ex-device{ + background-position:-5px -7314px +} +.block-view-file-type.folder-shared,.out-shared-blocks-view .block-view-file-type.folder{ + background-position:0 -5034px +} +.block-view-file-type.rubbish-folder-shared{ + background-position:0 -5154px +} +.block-view-file-type.puf-folder{ + background-position:0 -5274px +} +.block-view-file-type.rubbish-puf-folder{ + background-position:0 -5394px +} +.block-view-file-type.inbound-share{ + background-position:0 -4794px +} + +.ps{ + -ms-overflow-style:none; + max-width:100%; + min-width:100%; + overflow:hidden !important; + position:relative; + touch-action:auto +} +@supports (-ms-overflow-style:none){ +.ps{ + overflow:auto !important +} +} +@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){ +.ps{ + overflow:auto !important +} +} +.ps>.ps__scrollbar-x-rail,.ps>.ps__scrollbar-y-rail{ + border-radius:4px; + cursor:default; + display:none; + height:8px; + opacity:0; + position:absolute; + transition:var(--transition-bg-color), + var(--transition-opacity); + width:8px; + z-index:120 +} +.ps>.ps__scrollbar-x-rail{ + bottom:2px; + margin:0 2px +} +.ps>.ps__scrollbar-y-rail{ + margin:2px 0; + right:2px +} +.ps.ps--active-x>.ps__scrollbar-x-rail,.ps.ps--active-y>.ps__scrollbar-y-rail{ + background-color:var(--scroll-bar-background); + display:block +} +.ps.ps--in-scrolling.ps--x>.ps__scrollbar-x-rail,.ps.ps--in-scrolling.ps--y>.ps__scrollbar-y-rail,.ps:hover>.ps__scrollbar-x-rail,.ps:hover>.ps__scrollbar-y-rail{ + opacity:1 +} +.ps.ps--active-x.ps--active-y>.ps__scrollbar-x-rail{ + -webkit-margin-end:10px; + margin-inline-end:10px +} +.ps.ps--active-x.ps--active-y>.ps__scrollbar-y-rail{ + margin-bottom:10px +} +.ps>.ps__scrollbar-x-rail>.ps__scrollbar-x,.ps>.ps__scrollbar-y-rail>.ps__scrollbar-y{ + background-color:var(--scroll-bar-handle); + border-radius:8px; + cursor:pointer; + height:8px; + opacity:.5; + position:absolute; + transition:var(--transition-opacity); + width:8px +} +.ps>.ps__scrollbar-x-rail>.ps__scrollbar-x:before,.ps>.ps__scrollbar-y-rail>.ps__scrollbar-y:before{ + content:""; + display:block; + height:100%; + left:50%; + min-height:8px; + min-width:8px; + position:absolute; + top:50%; + transform:translate(-50%, -50%); + width:100% +} +.ps>.ps__scrollbar-x-rail:hover>.ps__scrollbar-x:hover,.ps>.ps__scrollbar-y-rail:hover>.ps__scrollbar-y:hover{ + opacity:.7 +} +.ps:hover.ps--in-scrolling>.ps__scrollbar-x-rail .ps__scrollbar-x,.ps:hover.ps--in-scrolling>.ps__scrollbar-y-rail .ps__scrollbar-y{ + opacity:.8 +} + +.backup-recover.withkey .block-wrapper,.improved-recovery-steps .block-wrapper{ + width:100% +} +.backup-recover.withkey .main-recovery-block,.improved-recovery-steps .main-recovery-block{ + display:block; + height:100%; + margin:0; + padding:0; + width:100% +} +.improved-recovery-steps h2,.improved-recovery-steps h3.main-italic-header{ + box-sizing:border-box; + overflow:hidden; + text-align:center; + -o-text-overflow:ellipsis; + text-overflow:ellipsis +} +.park-account-dialog .improved-recovery-steps h3.main-italic-header{ + margin:0 0 24px +} +.improved-recovery-steps.backup-recover.withkey ul,.improved-recovery-steps .container-information{ + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:13px; + line-height:21px; + text-align:left +} +.improved-recovery-steps.backup-recover.withkey ul,.improved-recovery-steps .container-information ul{ + list-style-type:0; + margin:12px 24px 0; + padding:0; + text-indent:0 +} +.improved-recovery-steps.backup-recover.withkey li{ + margin-bottom:8px +} +.improved-recovery-steps li a.red{ + color:var(--text-color-error) +} +.improved-recovery-steps a.red:hover{ + text-decoration:underline +} +.improved-recovery-steps h1{ + text-align:center +} +.improved-recovery-steps .recover-image-block{ + display:block; + margin:0 auto; + width:172px +} +.improved-recovery-steps h3{ + text-align:center +} +.backup-recover.withkey .register-st2-txt-block,.improved-recovery-steps .register-st2-txt-block{ + display:table; + height:100%; + width:100% +} +.backup-recover.withkey .vert-container-aligner,.improved-recovery-steps .vert-container-aligner{ + display:table-cell; + vertical-align:middle +} +.backup-recover.withkey .card-container,.improved-recovery-steps .card-container{ + background-color:#fff; + border:1px solid rgba(0, 40, 100, .12); + border-radius:4px; + height:auto; + margin:0 auto 80px; + width:680px +} +.backup-recover.withkey .card-container,.backup-recover.withoutkey .card-container{ + margin-top:54px +} +.backup-recover.withkey .content-wrapper,.improved-recovery-steps .content-wrapper{ + margin:0; + padding:0 30px 30px; + position:relative; + text-align:left +} +.improved-recovery-steps .content-wrapper .reset-input-container{ + display:block; + text-align:center +} +.improved-recovery-steps .content-wrapper p span{ + color:#f57223; + font-family:source_sans_probold +} +.improved-recovery-steps p{ + letter-spacing:0; + margin:0; + padding:8px 0 0; + text-align:center +} +.improved-recovery-steps p:first-child{ + padding:0 +} +.improved-recovery-steps p.top-pad{ + padding-top:30px +} +.improved-recovery-steps .check-sessions-text,.improved-recovery-steps .info-container h3.main-italic-header{ + color:#495057; + font-family:LatoWebBold,source_sans_proregular,Arial; + font-size:15px; + text-align:left +} +.improved-recovery-steps .check-sessions-text{ + margin-top:24px; + text-align:center +} +.improved-recovery-steps .app-instruction-block p,.improved-recovery-steps .info-container h3.main-italic-header{ + margin-bottom:16px; + text-align:left +} +.improved-recovery-steps .app-instruction-block .main-italic-header{ + color:#495057; + font-family:LatoWeb,source_sans_prosemibold,Arial; + font-weight:800; + text-align:left +} +.improve-recovery-steps .button-container{ + height:100px; + width:100% +} +.improved-recovery-steps .backup-input-button.mega-button.left{ + font-size:14px; + line-height:36px; + right:0; + text-align:center; + text-decoration:none +} +.improved-recovery-steps .recover-button.yes.mega-button,.improved-recovery-steps .restore-verify-button{ + float:none; + margin:0 auto +} +.improved-recovery-steps .button-container{ + display:flex; + flex-wrap:wrap; + justify-content:space-around; + margin-top:8px +} +.improved-recovery-steps .button-aligner{ + float:right; + margin-top:24px; + text-align:center; + width:100% +} +.improved-recovery-steps .progress-meter{ + -webkit-touch-callout:none; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + margin:0 auto; + max-width:400px; + opacity:.8; + padding-top:0; + -webkit-user-select:none; + -khtml-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none +} +.improved-recovery-steps .restore-verify-button{ + display:flex; + margin-top:64px +} +.improved-recovery-steps .login-register-input{ + margin-bottom:0 +} +.improved-recovery-steps .login-register-input:hover{ + border:1px solid #ddd +} +.improved-recovery-steps .login-register-input input{ + background-color:transparent; + color:#444; + line-height:25px +} +.improved-recovery-steps .login-register-input input::placeholder{ + color:#aaa; + opacity:1 +} +.improved-recovery-steps .login-register-input input:-ms-input-placeholder{ + color:#aaa +} +.improved-recovery-steps .login-register-input input::-ms-input-placeholder{ + color:#aaa +} +.improved-recovery-steps .app-button{ + border-radius:3px; + color:#555; + cursor:pointer; + display:inline-block; + line-height:24px; + margin:4px 2px; + padding:0 8px +} +.improved-recovery-steps .app-button:first-of-type{ + margin-left:0 +} +.improved-recovery-steps .app-button:last-of-type{ + margin-right:0 +} +.improved-recovery-steps .app-button:hover{ + background-color:#f2f2f2; + background-image:linear-gradient(-180deg, hsla(0, 0%, 100%, .5), hsla(0, 0%, 94.9%, .8)); + color:#111 +} +.improved-recovery-steps .app-button.active{ + background-color:#eb4444; + background-image:linear-gradient(-180deg, hsla(0, 0%, 100%, 0), hsla(0, 0%, 94.9%, 0)); + border:1px solid #d90007; + border-radius:3px; + box-shadow:0 1px 1px 0 rgba(0, 0, 0, .11),inset 0 1px 1px 0 hsla(0, 0%, 100%, .2); + color:#fff +} +.improved-recovery-steps .app-button.active:hover{ + color:#fff +} +.improved-recovery-steps .app-instruction-block{ + margin:0 0 8px +} +.improved-recovery-steps .app-instruction-block select{ + background:transparent; + border:none; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:14px; + height:32px; + padding:5px 5px 5px 12px; + width:260px +} +.improved-recovery-steps .app-instruction-block select::-ms-expand{ + display:none +} +.improved-recovery-steps .app-instruction-block select{ + -webkit-appearance:none; + appearance:none +} +.improved-recovery-steps ol.app-instructions-list{ + -webkit-margin-before:1em; + -webkit-margin-after:0; + -webkit-margin-start:0; + -webkit-margin-end:0; + -webkit-padding-start:0; + list-style-type:none; + padding:0 +} +.improved-recovery-steps li.list-point:before{ + -moz-background-clip:padding; + -webkit-background-clip:padding-box; + background-clip:padding-box; + -webkit-border-radius:2px; + -moz-border-radius:2px; + border-radius:12px; + color:#333; + content:counter(list); + display:inline-block; + font-size:13px; + font-weight:900; + height:23px; + line-height:22px; + margin-right:10px; + padding-left:0; + text-indent:8px; + vertical-align:top; + width:23px +} +.improved-recovery-steps .list-point{ + counter-increment:list; + font-family:LatoWeb,source_sans_proregular,Arial; + line-height:23px; + margin-bottom:12px; + margin-left:40px; + text-indent:-40px +} +.improved-recovery-steps .list-point b.megasync-logo{ + background-image:url(../imagery/mega-top-sprite.7ef2b23a163ae63a.png); + background-position:-6px -773px; + background-repeat:no-repeat; + height:24px; + margin:0 -39px 0 0; + padding-left:66px; + width:24px +} +.improved-recovery-steps .text-link{ + color:#eb4444 +} +.improved-recovery-steps .recovery-text-button{ + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:14px; + line-height:21px; + margin:12px auto 24px; + text-align:center +} +.improved-recovery-steps .text-link:hover{ + cursor:pointer; + text-decoration:underline +} +.es .improved-recovery-steps .list-point b.megasync-logo{ + margin:0 -29px 0 3px; + padding-left:68px +} +.br .improved-recovery-steps .list-point b.megasync-logo{ + margin:0 -12px 0 3px; + padding-left:68px +} +.de .improved-recovery-steps .list-point b.megasync-logo{ + margin:0 -33px 0 4px; + padding-left:68px +} +.fr .improved-recovery-steps .list-point b.megasync-logo,.it .improved-recovery-steps .list-point b.megasync-logo{ + margin:0 -31px 0 4px; + padding-left:68px +} +.tr .improved-recovery-steps .list-point b.megasync-logo{ + margin:0 -15px 0 4px; + padding-left:68px +} +.ru .improved-recovery-steps .list-point b.megasync-logo{ + margin:0 -15px 0 4px +} +.improved-recovery-steps strong{ + color:var(--text-color-high); + font-family:var(--text-font-family-semibold) +} +.improved-recovery-steps strong.warning-text{ + color:var(--text-color-error) +} +.improved-recovery-steps .instruction-block{ + color:#495057; + font-family:LatoWeb,source_sans_proregular,Arial; + font-size:13px; + margin-top:24px +} +.improved-recovery-steps .recover-state{ + color:#00a58f; + font-family:source_sans_probold,LatoWeb,Arial; + font-size:14px; + letter-spacing:0; + text-align:center +} +.improved-recovery-steps .recover-state.warning{ + color:var(--text-color-error) +} +.improved-recovery-steps .container-information .warning-text{ + color:var(--text-color-error); + font-family:var(--text-font-family-semibold) +} +.improved-recovery-steps .container-information li{ + color:#676d75; + margin-bottom:16px +} +.improved-recovery-steps .container-information li:last-of-type{ + margin-bottom:0 +} +.improved-recovery-steps .content-highlight{ + background-color:rgba(42, 175, 95, .04); + border:1px solid #d4efdf; + border-radius:2px; + color:#55bf7f; + cursor:pointer; + font-size:14px; + line-height:46px +} +.improved-recovery-steps .content-highlight-block{ + bottom:12px; + position:absolute; + width:100% +} +.improved-recovery-steps .content-highlight:hover{ + background-color:rgba(42, 175, 95, .04); + border:1px solid rgba(42, 175, 95, .2) +} +.improved-recovery-steps .content-highlight.warning{ + background:rgba(235, 68, 68, .03); + border:1px solid rgba(235, 68, 68, .1); + border-radius:2px; + color:#eb4444 +} +.improved-recovery-steps .feedback-logo{ + margin-left:12px; + margin-right:16px; + margin-top:7px +} +.improved-recovery-steps .warning-icon.warning{ + display:block +} +.improved-recovery-steps .nav-back-icon{ + background-image:url(../imagery/mega-icons-sprite.48528e60724d858e.png); + background-position:-204px -196px; + background-repeat:no-repeat; + background-size:262px auto; + display:inline-block; + height:16px; + margin:2px 12px 0 0; + opacity:.4; + -webkit-transform:scaleX(-1); + transform:scaleX(-1); + vertical-align:top; + width:18px +} +.improved-recovery-steps .right-header{ + display:block; + margin:0 auto; + opacity:1; + position:relative; + width:680px +} +.improved-recovery-steps .nav-header-block{ + line-height:24px; + opacity:1; + position:relative +} +.improved-recovery-steps .nav-header-block h2{ + color:#9a9fa2; + display:inline-block; + font-family:LatoWeb; + font-size:13px; + font-weight:400; + letter-spacing:0; + line-height:27px; + margin:0; + padding:0; + white-space:nowrap +} +.improved-recovery-steps .nav-back-subheading{ + display:none +} +.improved-recovery-steps .nav-header-block:hover{ + cursor:pointer +} +.improved-recovery-steps .nav-header-block:hover h2{ + text-decoration:underline +} +.improved-recovery-steps .recover-account-email-block{ + margin:64px auto 32px; + position:relative; + width:360px +} +.park-account-dialog .recover-account-email-block{ + margin:40px auto 24px +} +.backup-recover .recover-image,.improved-recovery-steps .recover-image,.improved-recovery-steps .session-image-block{ + background-image:url(../imagery/mega-recover-account-sprite.83dadcefcd96b88b.png); + background-repeat:no-repeat; + background-size:344px auto; + display:block; + height:95px; + width:100% +} +.improved-recovery-steps .recover-image.email{ + background-position:0 -372px +} +.improved-recovery-steps .recover-image.key{ + background-position:0 -11px +} +.improved-recovery-steps .recover-image.lock{ + background-position:-172px -13px +} +.improved-recovery-steps .recover-image.gray-device{ + background-position:0 -140px +} +.improved-recovery-steps .recover-image.device-password{ + background-position:-172px -138px +} +.improved-recovery-steps .recover-image.locked-key{ + background-position:-186px -251px +} +.improved-recovery-steps .recover-image.unlocked-key{ + background-position:-186px -372px +} +.improved-recovery-steps .recover-image.incoming-mail{ + background-position:0 -491px +} +.improved-recovery-steps .recover-image.park-account{ + background-position:-172px -491px +} +.improved-recovery-steps .recover-image.safe-vault{ + background-position:23px -823px +} +.improved-recovery-steps .recover-image.shiny-key{ + background-position:-172px -816px +} +.improved-recovery-steps .session-image-block{ + height:94px; + margin:0 auto 12px; + width:120px +} +.improved-recovery-steps .check-sessions{ + display:table; + margin:30px auto 0 +} +.improved-recovery-steps .backup-key-info{ + display:table; + margin:40px auto 0 +} +.improved-recovery-steps .backup-key-info-text,.improved-recovery-steps .check-sessions-text{ + display:block; + margin:0 +} +.improved-recovery-steps .col-3{ + cursor:pointer; + padding:0 12px 20px; + position:relative; + width:32.5% +} +.recovery-key-info.improved-recovery-steps .col-3{ + cursor:auto; + padding-bottom:0 +} +.improved-recovery-steps .check-sessions .col-3{ + border:2px solid hsla(0, 0%, 60%, .25); + border-radius:4px; + display:table-cell +} +.improved-recovery-steps .backup-key-info .col-3{ + display:table-cell +} +.improved-recovery-steps .check-sessions .col-3:hover{ + border-color:rgba(42, 175, 95, .55) +} +.improved-recovery-steps .check-sessions .col-3.active{ + border-color:#2aaf5f +} +.improved-recovery-steps .session-image-block.desktop{ + background-position:0 -611px +} +.improved-recovery-steps .session-image-block.browser{ + background-position:-233px -611px +} +.improved-recovery-steps .session-image-block.mobile{ + background-position:-123px -611px +} +.improved-recovery-steps .check-sessions .session-text{ + font:var(--text-body2); + text-align:center +} +.improved-recovery-steps .backup-key-info .backup-key-info-text{ + color:var(--text-color-high); + font:var(--text-body1); + text-align:center +} +.improved-recovery-steps .check-sessions .checkboxOff,.improved-recovery-steps .check-sessions .checkboxOn{ + border-radius:100%; + height:20px; + position:absolute; + right:0; + top:5px; + width:20px +} +.improved-recovery-steps .check-sessions .checkdiv{ + box-shadow:none; + -webkit-box-shadow:none +} +.improved-recovery-steps .check-sessions .checkdiv:before{ + display:none +} +.improved-recovery-steps .check-sessions .checkdiv:after{ + background-image:url(../imagery/mega-top-login-sprite.33cef2f0849ccdf5.png); + background-position:-25.5px -1850px; + background-repeat:no-repeat; + content:""; + display:block; + height:100%; + position:absolute; + top:0; + width:100% +} +.improved-recovery-steps .check-sessions .checkboxOn{ + background-color:#2aaf5f +} +.improved-recovery-steps .check-sessions .checkboxOff{ + background-color:hsla(0, 0%, 60%, .25) +} +.improved-recovery-steps .check-sessions .col-3:hover .checkboxOff{ + background-color:rgba(42, 175, 95, .55) +} +.improved-recovery-steps h5.main-italic-header{ + color:var(--text-color-high); + display:inline-block; + padding:0 +} +.improved-recovery-steps .recover-divider h5.main-italic-header{ + background:#fff; + display:block; + margin:auto; + position:relative +} +.improved-recovery-steps .recover-paste-block .left-section,.improved-recovery-steps .recover-paste-block .right-section{ + display:inline-block; + margin:0; + padding:0; + vertical-align:middle +} +.improved-recovery-steps .recover-paste-block .left-section{ + text-align:start; + width:50% +} +.improved-recovery-steps .recover-paste-block .right-section{ + text-align:end; + width:49% +} +.improved-recovery-steps .recover-paste-block .right-section>button:not(.hidden){ + margin:8px 4px; + min-width:95px +} +.securitypractice .improved-recovery-steps .recover-paste-block .right-section>button{ + margin-left:8px +} +.improved-recovery-steps .recover-paste-block .right-section>button.no-hover:hover{ + background-color:initial +} +.improved-recovery-steps .recover-paste-block .recovery-key.account.input-wrapper .icon{ + -webkit-margin-end:6px; + background-position:-172px -715px; + display:inline-block; + height:22px; + margin-inline-end:6px; + opacity:.7; + vertical-align:bottom; + width:24px +} +.improved-recovery-steps.withkey .recover-paste-block .recovery-key.account.input-wrapper .icon{ + margin-bottom:4px +} +.improved-recovery-steps .paste-key.mega-button.positive{ + position:absolute; + right:24px; + top:50%; + transform:translateY(-50%) +} +.improved-recovery-steps .account.input-wrapper{ + display:block; + margin:0 +} +.improved-recovery-steps .mega-input.title-ontop{ + display:inline-flex; + margin:0 +} +.improved-recovery-steps.withkey .mega-input.title-ontop,.improved-recovery-steps.withoutkey .mega-input.title-ontop{ + width:418px +} +.improved-recovery-steps .recover-block.success .mega-input.title-ontop{ + margin:20px auto 0 +} +.improved-recovery-steps .recovery-key.account.input-wrapper{ + border-bottom:0; + height:auto; + margin-top:8px; + padding:0; + width:260px +} +.improved-recovery-steps .recovery-key.account.input-wrapper input{ + margin-top:0 +} +.improved-recovery-steps .recovery-key.account.input-wrapper:after{ + height:0 +} +.improved-recovery-steps.withkey .recovery-key.account.input-wrapper{ + border-bottom:1px solid #ccc; + line-height:22px +} +.improved-recovery-steps b,.improved-recovery-steps strong{ + font-family:var(--text-font-family-semibold) +} +.improved-recovery-steps .checkbox-container,.improved-recovery-steps .info-container{ + min-height:44px; + overflow:auto +} +.improved-recovery-steps .app-instruction-block,.improved-recovery-steps .checkbox-container,.improved-recovery-steps .info-container,.improved-recovery-steps .recover-paste-block,.improved-recovery-steps .recover-upload-block{ + background:var(--surface-grey-1); + border:1px solid var(--stroke-grey-2); + border-radius:6px; + height:auto; + margin:24px auto 0; + padding:16px; + position:relative +} +.improved-recovery-steps .recover-upload-block{ + align-items:center; + display:flex; + justify-content:space-between; + margin-bottom:0 +} +.improved-recovery-steps .recover-upload-block .upload-key{ + margin-left:12px; + position:relative; + right:8px; + transform:unset +} +.improved-recovery-steps .recover-upload-block .upload-key span{ + white-space:nowrap +} +.improved-recovery-steps .recover-paste-block{ + margin-bottom:32px; + margin-top:0 +} +.park-account-dialog .fm-dialog-body{ + padding:0 30px +} +.improved-recovery-steps .app-button-block{ + align-items:center; + background:var(--surface-main); + border:var(--dropdown-border); + border-radius:4px; + cursor:pointer; + display:flex; + float:none; + margin:0 auto; + min-height:auto; + padding:0; + position:relative; + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out; + width:260px +} +.improved-recovery-steps .app-button-block i.icon-dropdown{ + --icon-size:24px; + cursor:default; + pointer-events:none; + position:absolute; + right:0 +} +.improved-recovery-steps .app-button-block:hover{ + box-shadow:0 0 0 4px rgba(0, 0, 0, .1); + -webkit-transition:all .2s ease-in-out; + -moz-transition:all .2s ease-in-out; + -o-transition:all .2s ease-in-out; + -ms-transition:all .2s ease-in-out; + transition:all .2s ease-in-out +} +.improved-recovery-steps .recover-divider{ + height:38px; + position:relative +} +.improved-recovery-steps .recover-divider hr{ + border-bottom-width:0; + border-color:rgba(38, 47, 59, .15); + display:inline-block; + float:right; + margin:0; + position:absolute; + right:0; + top:50%; + width:100% +} +.improved-recovery-steps .recover-divider .main-italic-header{ + line-height:38px; + text-align:center; + width:10% +} +.backup-recover.withoutkey p:last-of-type{ + margin-bottom:32px +} +.improved-recovery-steps .check-sessions{ + margin-top:16px +} +.improved-recovery-steps .check-sessions-text{ + margin-top:32px +} +.improved-recovery-steps .post-register,.improved-recovery-steps.post-register .pre-register{ + display:none !important +} +.improved-recovery-steps.post-register .post-register{ + display:block !important +} +.improved-recovery-steps.post-register .reset-account,.improved-recovery-steps.recovery-key-dialog .skip-button{ + display:none +} +.improved-recovery-steps.recovery-key-dialog.post-register .skip-button{ + cursor:pointer; + display:block +} +.improved-recovery-steps.post-register .skip-button:hover{ + text-decoration:underline +} +.mega-dialog.recovery-key-dialog.post-register{ + height:auto +} +.mega-dialog.recovery-key-dialog.post-register a.info{ + color:var(--text-color-info) +} +@media only screen and (max-width:1250px){ +.improved-recovery-steps .password-tooltip.tooltip-block{ + right:-200px; + top:45px +} +.improved-recovery-steps .password-tooltip.tooltip-block .triangle-pointer{ + left:170px; + top:-8px; + transform:rotate(135deg) +} +} + +.fm-right-account-block div.full-sized{ + flex:initial; + width:100% +} +.fm-right-account-block div.align-top{ + align-items:flex-start +} +.fm-right-account-block div.justify-end{ + justify-content:flex-end +} +.fm-account-main .green-label{ + background-color:initial; + color:var(--text-color-success) +} +.fm-account-main .red-label{ + background-color:initial; + color:var(--text-color-error) +} +.fm-right-account-block .data-table{ + margin-bottom:24px +} +.fm-right-account-block .data-table .label-with-icon{ + align-items:center; + display:flex +} +.fm-right-account-block .data-table .label-with-icon img{ + -webkit-margin-end:8px; + margin-inline-end:8px; + width:16px +} +.fm-right-account-block .data-table .label-with-icon i{ + --icon-size:16px; + -webkit-margin-end:8px; + margin-inline-end:8px +} +.fm-right-account-block .data-table span{ + display:block; + overflow:hidden; + text-overflow:ellipsis +} +.fm-right-account-block .data-table.sessions .mega-button span{ + white-space:nowrap +} +.fm-right-account-block .data-table span.break-word{ + word-break:break-word +} +.fm-right-account-block form{ + align-content:flex-start; + display:flex; + flex-wrap:wrap; + justify-content:space-between; + margin-bottom:-20px; + width:100% +} +.fm-right-account-block .mega-input.title-ontop{ + width:calc(50% - 16px) +} +.fm-right-account-block .mega-input+.mega-input.title-ontop:nth-child(2){ + margin:20px 0 0 +} +.fm-right-account-block .mega-input.title-ontop input.short-input{ + -webkit-margin-start:8px; + margin-inline-start:8px; + padding:2px 0 +} +.fm-right-account-block .label-wrap{ + -webkit-padding-end:15px; + align-items:center; + display:flex; + flex:1; + padding-inline-end:15px +} +.fm-right-account-block .label-wrap.full-sized,.fm-right-account-block .label-wrap:last-child{ + -webkit-padding-end:0; + padding-inline-end:0 +} +.fm-right-account-block .label-wrap.full-sized+.label-wrap{ + padding:14px 0 0 +} +.fm-right-account-block .label-wrap i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + margin:2px 4px; + transition:var(--transition-opacity) +} +.account-counter-number{ + align-content:center; + background:var(--surface-grey-2); + border-radius:4px; + display:flex; + margin:0 12px; + width:60px +} +.account-counter-number:last-child{ + -webkit-margin-end:0; + margin-inline-end:0 +} +.account-counter-number.short{ + width:38px +} +.account-counter-number input{ + background:transparent; + border:0; + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + line-height:36px; + margin:0; + outline:none; + padding:0 10px; + text-align:center; + width:100% +} +.account-counter-number.short input{ + padding:0 3px +} +.fm-account-sections .mega-switch{ + float:none +} +.fm-account-sections .switch-container{ + border-top:1px solid var(--stroke-grey-2); + padding:24px 0 0 +} +.fm-account-sections .mega-switch+.label-wrap{ + padding:12px 0 0 +} +.settings-sub-section .radio-buttons{ + display:flex; + flex-wrap:wrap; + padding:18px 0 0; + width:100% +} +.settings-sub-section .radio-txt{ + color:var(--text-color-medium); + cursor:pointer; + font:var(--text-body1); + transition:.3s; + vertical-align:top +} +.settings-sub-section .radio-txt,.settings-sub-section .radio-txt:last-child{ + -webkit-padding-end:0; + padding-inline-end:0 +} +.settings-sub-section .radio-txt.big{ + font:var(--text-h3) +} +.settings-sub-section .radio-txt.small{ + font:var(--text-body1) +} +.fm-right-account-block,.fm-right-block{ + height:calc(100% - 64px); + min-width:auto; + position:relative; + top:16px +} +.fm-right-block.full-size{ + height:calc(100% - 48px); + top:0 +} +.fm-account-sections{ + box-sizing:border-box; + color:var(--text-color-medium); + font:var(--text-h3); + margin:0 auto; + max-width:988px; + padding:0 24px 40px; + position:relative +} +.settings-left-block{ + padding:14px 0; + width:30% +} +.settings-left-block .title-txt{ + padding:18px 0 +} +.settings-left-block .content-txt:last-child{ + padding-bottom:18px +} +.settings-right-block{ + -webkit-padding-start:56px; + box-sizing:border-box; + padding:14px 0; + padding-inline-start:56px; + width:70% +} +.settings-right-block .content-txt{ + padding-top:18px; + width:100% +} +.settings-full-block{ + padding:10px 0; + width:100% +} +.account.data-block{ + border-bottom:1px solid var(--stroke-grey-2); + display:flex; + flex-wrap:wrap; + position:relative +} +.account.data-block:last-child{ + border:0 +} +.settings-sub-section{ + align-items:center; + box-sizing:border-box; + display:flex; + flex-wrap:wrap; + justify-content:space-between; + padding:24px 0; + position:relative +} +.settings-sub-section:not(.hidden)~.settings-sub-section{ + border-top:1px solid var(--stroke-grey-2) +} +.settings-sub-section.sub-container:not(.hidden){ + border:0; + max-height:100px; + padding-top:0 +} +.settings-sub-section.closed{ + padding:0 +} +.settings-sub-section button+button{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.content-panel .settings-button{ + cursor:pointer; + font:var(--text-body1); + margin:0 0 4px; + position:relative +} +.content-panel .settings-button .head-title,.content-panel .settings-button .sub-title{ + --mask-color:var(--icon-rest); + align-items:center; + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-medium); + display:flex; + min-height:32px; + padding:2px 4px; + transition:var(--transition-color), var(--transition-bg-color) +} +.content-panel .settings-button .head-title{ + margin:2px 0 +} +.content-panel .settings-button .sub-title{ + margin:1px 0 +} +.content-panel .settings-button.active .head-title,.content-panel .settings-button .head-title:hover,.content-panel .settings-button .sub-title:hover{ + background-color:var(--stroke-grey-1); + box-shadow:0 1px 4px 0 rgb(0 0 0 / .1); + color:var(--stroke-main-inverted); + cursor:pointer +} +.content-panel .settings-button .head-title i{ + --icon-size:24px; + transition:var(--transition-color) +} +.content-panel .settings-button .head-title i.expand{ + --icon-size:16px; + transform:rotate(90deg) +} +.content-panel .settings-button .head-title span{ + padding:0 4px +} +.content-panel .settings-button .sub-menu{ + box-sizing:border-box; + max-height:250px +} +.content-panel .settings-button .sub-title{ + -webkit-padding-start:50px; + color:var(--text-color-medium); + font:var(--text-body1); + padding-inline-start:50px +} +.content-panel .settings-button.active .head-title,.content-panel .settings-button .head-title:hover{ + --mask-color:var(--icon-active); + color:var(--text-color-high) +} +.content-panel .settings-button.closed .head-title i.expand{ + transform:rotate(0) +} +.rtl .content-panel .settings-button.closed .head-title i.expand{ + transform:rotate(180deg) +} +.settings-left-block .account.qr-block{ + margin:0 0 18px; + max-height:126px +} +.settings-left-block .account.qr-icon canvas{ + background-color:var(--secondary-white); + border-radius:10px; + padding:10px +} +.fm-right-account-block .fm-account-avatar{ + border-radius:0; + cursor:default; + flex:1; + height:auto; + margin:0 32px; + overflow:visible; + width:auto +} +.fm-right-account-block .avatar-wrapper{ + border-radius:100%; + cursor:pointer; + font-family:var(--text-font-family); + font-size:24px; + height:64px; + line-height:64px; + margin:0 auto; + padding:0; + width:64px +} +.fm-right-account-block .avatar-wrapper img{ + background-color:var(--text-color-white-higher); + border:1px solid rgba(0, 0, 0, .2); + box-shadow:inset 0 0 0 1px rgba(0, 0, 0, .05); + box-sizing:border-box; + height:64px; + padding:1px; + width:64px +} +.fm-right-account-block .avatar-bg.colorized:after{ + background:none +} +.mega-input.title-ontop.birth input::placeholder{ + opacity:1 +} +.fm-right-account-block .birth-arrow-container{ + -webkit-margin-end:3px; + cursor:pointer; + display:inline-block; + height:32px; + margin-inline-end:3px; + position:relative; + width:16px +} +.fm-right-account-block .birth-arrow-container i{ + --icon-size:16px; + --mask-color:var(--icon-inactive); + border-radius:0; + display:block; + float:none; + padding:0; + transform:rotate(90deg); + transition:var(--transition-color) +} +.fm-right-account-block .birth-arrow-container .up-control{ + transform:rotate(270deg) +} +.fm-right-account-block .birth-arrow-container i:hover{ + --mask-color:var(--icon-rest) +} +.account.plan-info{ + color:var(--text-color-high); + font:var(--text-body1) +} +.account.plan-info.accounttype{ + color:var(--text-color-error) +} +.free .account.plan-info.accounttype{ + color:var(--text-color-success) +} +.lite .account.plan-info.accounttype{ + color:var(--secondary-orange) +} +.business.account.plan-info.accounttype{ + color:var(--secondary-green) +} +.fm-right-account-block .bars-container{ + --settings-bar-color:var(--label-blue); + display:flex; + justify-content:flex-end; + width:100% +} +.fm-right-account-block .bars-container.bandwidth{ + --settings-bar-color:var(--label-green) +} +.fm-right-account-block .bars-content{ + display:inline-flex; + flex-wrap:wrap; + justify-content:space-between; + min-width:334px +} +.fm-right-account-block .settings-bar{ + background:var(--settings-bar-color); + border-radius:4px; + display:flex; + height:8px; + justify-content:flex-end; + margin:8px 0 0; + overflow:hidden; + width:100% +} +.fm-right-account-block .settings-sub-bar{ + background:var(--surface-black); + height:100%; + opacity:.2; + width:0 +} +.fm-right-account-block .quota-note{ + align-items:center; + color:var(--text-color-low); + display:inline-flex; + font:var(--text-body2); + margin:5px 0 0 +} +.fm-right-account-block .quota-note+.quota-note{ + -webkit-margin-start:15px; + margin-inline-start:15px +} +.fm-right-account-block .quota-note i{ + -webkit-margin-end:8px; + background-color:var(--settings-bar-color); + border-radius:100%; + content:""; + display:inline-block; + height:8px; + margin-inline-end:8px; + width:8px +} +.fm-right-account-block .achieve-quota-note i:before{ + background:var(--surface-black); + border-radius:100%; + content:""; + display:block; + height:100%; + opacity:.2 +} +.fm-right-account-block .data-table.purchases .label-with-icon{ + color:var(--text-color-high) +} +.fm-account-security .download-button .bouncing-loader,.fm-account-security .download-button.loading .loading-txt{ + display:none +} +.fm-account-security .download-button.loading .bouncing-loader{ + display:block +} +.fm-account-security .error-message{ + color:var(--stroke-error); + margin-top:18px +} +.data-table.sessions th:nth-child(3){ + width:140px +} +.data-table.sessions th:last-child{ + width:20px +} +.data-table.sessions .status-label{ + align-items:center; + background-color:var(--label-grey); + border-radius:12px; + box-sizing:border-box; + color:var(--text-color-white-higher); + display:inline-flex; + font:var(--text-body1); + margin:1px 0; + padding:2px 9px; + white-space:nowrap +} +.data-table.sessions .status-label.green{ + background-color:var(--label-green) +} +.data-table.sessions .status-label.blue{ + background-color:var(--label-blue) +} +.fm-right-account-block .rubsched-options{ + max-height:250px +} +.ui-slider.ui-widget-content{ + background:var(--surface-progress-background); + border:0; + border-radius:4px; + box-sizing:border-box; + direction:ltr; + height:8px; + margin:24px 0 0; + position:relative +} +.ui-menu.ui-widget{ + max-height:200px; + overflow-x:hidden; + overflow-y:auto; + padding:0; + position:relative +} +.ui-slider-handle{ + -webkit-margin-start:-16px; + background:var(--surface-grey-2); + border-radius:3px; + box-shadow:0 0 0 1px var(--switch-handle-border); + cursor:pointer; + display:block; + height:20px; + margin:0; + margin-inline-start:-16px; + position:absolute; + top:-6px; + width:32px; + z-index:10 +} +.ui-slider-handle:after,.ui-slider-handle:before{ + --mask-color:var(--icon-rest); + height:16px; + left:0; + margin:2px 0; + position:absolute; + width:16px +} +.ui-slider-handle:after{ + left:auto; + right:0 +} +.ui-slider .ui-slider-range{ + background:var(--surface-dark-grey); + border-radius:4px 4px 0; + height:8px; + margin:0; + position:absolute +} +.upload-settings .ui-slider-range{ + background:var(--secondary-blue) +} +.download-settings .ui-slider-range{ + background:var(--secondary-green) +} +.slider.numbers-wrap{ + direction:ltr; + display:flex; + justify-content:space-between +} +.slider.numbers{ + color:var(--text-color-medium); + font:var(--text-h3); + margin:4px 0 8px; + position:relative; + text-align:left; + white-space:nowrap +} +.slider.numbers span{ + margin:8px 4px 0; + position:absolute; + top:0 +} +.slider.numbers.swapped span{ + right:0 +} +.slider.numbers small{ + color:var(--text-color-low); + font:var(--text-body1) +} +.slider.numbers:before{ + background-color:var(--divider-color); + content:""; + display:block; + height:24px; + top:4px; + width:1px +} +.slider.numbers.active{ + color:var(--text-color-high) +} +.slider-percentage-bl{ + align-items:center; + display:flex; + padding:30px 0 0 +} +.slider-percentage{ + background:var(--surface-dark-grey); + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-high-inverted); + font:var(--text-body1); + min-width:160px; + padding:4px; + text-align:center +} +.slider-percentage span{ + font:var(--text-h3) +} +.slider-percentage span.warn{ + color:var(--secondary-orange-inverted) +} +.slider-tip{ + -webkit-margin-start:15px; + color:var(--text-color-medium); + font:var(--text-body2); + margin-inline-start:15px +} +.fm-right-account-block .settings-sync-icon{ + background:var(--avatar-blue); + border-radius:100%; + box-sizing:border-box; + display:block; + height:30px; + margin:10px 0; + padding:3px; + width:30px +} +.fm-right-account-block .settings-sync-icon i{ + --mask-color:var(--text-color-white-higher); + --icon-size:24px; + margin:auto +} +.data-table.megadrop{ + --mask-color:var(--icon-rest); + table-layout:fixed +} +.data-table.megadrop td{ + vertical-align:top +} +.data-table.megadrop th:first-child{ + width:30% +} +.data-table.megadrop th:nth-child(3){ + white-space:nowrap; + width:90px +} +.data-table.megadrop td>span{ + font:var(--text-body1); + padding:1px 0 +} +.data-table.megadrop .megadrop-icon{ + --icon-size:24px; + cursor:pointer; + display:inline-block; + margin:1px 2px; + opacity:0; + transition:var(--transition-opacity); + vertical-align:top +} +.data-table.megadrop tr:hover .megadrop-icon{ + opacity:1 +} +.data-table.megadrop .settings-breadcrumbs{ + align-items:center; + display:flex; + flex-wrap:wrap; + padding:1px 0; + white-space:normal +} +.data-table.megadrop .settings-breadcrumbs .item{ + align-items:center; + display:inline-flex; + max-width:100%; + min-height:24px; + white-space:nowrap +} +.data-table.megadrop .settings-breadcrumbs .item a{ + cursor:pointer; + font:var(--text-body1); + overflow:hidden; + position:relative; + text-overflow:ellipsis +} +.data-table.megadrop .settings-breadcrumbs .item i{ + --icon-size:16px; + margin:0 8px +} +.data-table.megadrop .settings-breadcrumbs .item i:first-child{ + --icon-size:24px; + -webkit-margin-start:0; + margin-inline-start:0 +} +.data-table.megadrop .tab-wrapper{ + border-bottom:1px solid var(--stroke-grey-2); + display:flex; + justify-content:flex-start; + padding:20px 0 0 +} +.data-table.megadrop .tab{ + -webkit-margin-end:24px; + align-items:center; + border-bottom:2px solid transparent; + color:var(--text-color-high); + cursor:pointer; + display:flex; + font:var(--text-body1); + margin-inline-end:24px; + opacity:.7; + padding:4px 0; + transition:var(--transition-opacity), var(--transition-border) +} +.data-table.megadrop .tab.active,.data-table.megadrop .tab:hover{ + border-color:var(--secondary-blue); + opacity:1 +} +.data-table.megadrop .tab i{ + --icon-size:24px; + --mask-color:var(--icon-active); + -webkit-margin-end:8px; + margin-inline-end:8px +} +.data-table.megadrop .fm-body-text{ + margin:20px 0 8px +} +.data-table.megadrop .settings-table-buttons{ + display:flex; + justify-content:flex-end; + padding:24px 0 18px +} +.data-table.megadrop .mega-button{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.fm-right-account-block .push-settings-status{ + padding:18px 0 0; + width:100% +} +.fm-right-account-block .push-settings-status span{ + -webkit-padding-start:4px; + color:var(--secondary-green); + padding-inline-start:4px +} +.fm-right-account-block .resellers-voucher-bl{ + align-items:center; + display:flex +} +.fm-right-account-block .content-txt.resellerbuy{ + padding:0; + width:auto +} +.add-phone-num-banner .account.verify-icon{ + background:var(--secondary-blue); + border-radius:100%; + display:inline-block; + height:100px; + overflow:hidden; + vertical-align:middle; + width:100px +} +.add-phone-num-banner .account.verify-icon i{ + --width:84px; + height:84px; + margin:16px auto 0; + width:84px +} +.add-phone-num-banner .mega-button+.mega-button{ + display:flex; + margin:12px auto 0 +} +.quota-banner{ + justify-content:space-between; + max-width:940px +} +.quota-banner .settings-banner-cell:nth-child(n){ + flex:initial; + text-align:center; + width:auto +} +.dashboard .settings-banner{ + background:var(--surface-grey-5); + max-width:100%; + width:100% +} +.low-width .quota-banner .settings-banner-cell:nth-child(n){ + width:50% +} +.low-width .quota-banner .settings-banner-cell:last-child{ + padding-top:0; + width:100% +} +.quota-banner .fm-account-blocks{ + display:inline-block; + text-align:start +} +.quota-banner .account.chart-block{ + padding:0; + white-space:nowrap +} +.quota-banner .tiny-chart .chart.icon{ + left:22px; + top:16px +} +.fm-right-account-block .icon.chart{ + height:32px; + opacity:1; + width:32px +} +.quota-banner .account.chart.overlay{ + background-color:initial +} +.quota-banner .account.chart.body:after{ + background:var(--surface-grey-5) +} +.quota-banner .chart.body .perc-txt{ + color:var(--text-color-high); + display:block; + font:var(--text-body1); + height:auto; + left:50%; + position:absolute; + top:50%; + transform:translateX(-50%) translateY(-50%); + z-index:11 +} +.quota-banner .going-out .tiny-chart .chart.data .size-txt{ + color:var(--text-color-warning) +} +.quota-banner .exceeded .tiny-chart .chart.data .size-txt{ + color:var(--text-color-error) +} +.quota-banner .chart.progressbars span:before{ + background:var(--stroke-dark-grey) +} +.quota-banner .fm-account-blocks:not(.no-percs) .chart.progressbars span:after{ + background:var(--stroke-dark-grey); + border-radius:5px; + bottom:0; + content:""; + height:6px; + left:calc(50% - 3px); + position:absolute; + width:6px; + z-index:12 +} +.quota-banner .fm-account-blocks:not(.no-percs).going-out .chart.progressbars span:after,.quota-banner .going-out .chart.progressbars span:before{ + background:var(--stroke-warning) +} +.quota-banner .exceeded .chart.progressbars span:before,.quota-banner .fm-account-blocks:not(.no-percs).exceeded .chart.progressbars span:after{ + background:var(--stroke-error) +} +.quota-banner .fm-account-blocks:not(.no-percs).exceeded .chart.progressbars span:after{ + display:none +} +.tiny-chart .account.chart.body{ + display:inline-block; + float:none; + height:64px; + transform:none; + vertical-align:middle; + width:64px +} +.tiny-chart .account.chart.overlay{ + height:68px; + margin:15px 0 0 40px; + width:68px +} +.tiny-chart .account.chart.overlay span{ + left:-3px; + top:53px +} +.tiny-chart .account.chart.overlay span:first-child{ + left:22px; + top:-6px; + -o-transform:rotate(48deg); + -ms-transform:rotate(48deg); + -webkit-transform:rotate(48deg); + transform:rotate(48deg) +} +.tiny-chart .chart.progressbars .right-chart{ + clip:rect(0, 64px, 64px, 32px) +} +.tiny-chart .chart.progressbars .right-chart.low-percent-clip{ + clip:rect(0, 32px, 64px, 0) +} +.tiny-chart .chart.progressbars .left-chart.low-percent-clip{ + clip:rect(0, 64px, 64px, 32px) +} +.tiny-chart .account.chart.body:after{ + height:52px; + margin:6px; + width:52px +} +.tiny-chart .chart.icon{ + left:22px; + top:35px +} +.tiny-chart .chart-warning{ + display:none; + font-size:12px +} +.exceeded .tiny-chart .chart-warning,.going-out .tiny-chart .chart-warning{ + display:block +} +.going-out .chart-warning a{ + color:#333 +} +.tiny-chart .fm-account-header{ + color:var(--text-color-high); + font:var(--text-body1-bold); + margin:0 0 8px +} +.tiny-chart .chart.data .size-txt{ + color:var(--text-color-success); + display:inline-block; + font:var(--text-h3); + vertical-align:bottom +} +.tiny-chart .chart.data .gb-txt,.tiny-chart .chart.data .of-txt,.tiny-chart .chart.data .pecents-txt{ + display:inline-block; + font:var(--text-body1); + padding-bottom:1px; + vertical-align:bottom +} +.tiny-chart .chart.data .of-txt{ + color:var(--text-color-low); + padding:0 4px 1px +} +.tiny-chart .account.chart.data{ + -webkit-margin-start:16px; + display:inline-block; + margin:6px 0 0 84px; + margin-inline-start:16px; + vertical-align:middle; + white-space:normal +} +.fm-account-main.low-width .settings-left-block{ + padding:14px 0 0; + width:100% +} +.fm-account-main.low-width .settings-right-block{ + padding:0 0 14px; + width:100% +} +.account.user-data-block{ + font-size:0; + line-height:0; + padding:60px 20px 16px; + position:relative; + text-align:center +} +.dashboard .account.user-data-block{ + padding:24px 12px +} +.content-panel button.backup-master-key{ + margin:12px 0 0 +} +.account.left-pane.info-block{ + padding:24px; + text-align:center +} +.account.left-pane.info-block.backup-button{ + padding:24px 12px +} +.account.left-pane.info-item{ + align-items:center; + display:flex; + justify-content:space-between +} +.small-left-panel .account.left-pane.info-item{ + flex-direction:column +} +.small-left-panel .account.left-pane.small-txt{ + margin:20px 0 8px +} +.small-left-panel .account.left-pane.big-txt{ + margin:0 0 12px +} +.account.left-pane.info-block.business-users{ + padding:0 +} +.account.left-pane.divider{ + background:var(--surface-main); + height:2px +} +.account.account-card-info .mega-data-header{ + height:68px +} +.account.account-card-info .card-info.payment-card{ + margin-bottom:24px +} +.account.account-card-info .payment-card-icon{ + display:inline-block +} +.account.account-card-info.visa .payment-card-icon i{ + background-image:url(../imagery/mega-icon-visa.612aa40b3bccca29.svg); + background-size:100%; + height:45px; + margin-top:17px; + width:46px +} +.account.account-card-info .payment-card-icon i{ + --icon-size:48px; + margin-left:24px; + margin-top:14px +} +.account.account-card-info:not(.mc):not(.visa) .payment-card-icon i{ + background-image:url(../imagery/mega-icon-payment-outline.d3ddfa591562fa70.svg); + background-size:100%; + height:45px; + margin-top:17px; + width:46px +} +.account.account-card-info .payment-card-top{ + background-color:#00bfa5; + background-image:url(../imagery/mega-Surface-card-green.f2df47a2e9378dfd.png); + border-radius:8px 8px 0 0; + direction:ltr; + height:171px; + width:364px +} +.account.account-card-info .payment-card-bottom{ + background-color:#03a892; + border-radius:0 0 8px 8px; + direction:ltr; + height:61px; + width:364px +} +.account.account-card-info.visa .payment-card-top{ + background-color:#4bb8f3; + background-image:url(../imagery/mega-Surface-card-blue.b531989c51e0541f.png) +} +.account.account-card-info.mc .payment-card-top{ + background-color:#f3a03f; + background-image:url(../imagery/mega-Surface-card-orange.d4fe644940bda7f4.png) +} +.account.account-card-info.visa .payment-card-bottom{ + background-color:#23a1e5 +} +.account.account-card-info.mc .payment-card-bottom{ + background-color:#e58d27 +} +.account.account-card-info .payment-card-nb{ + align-content:center; + display:flex; + height:34px; + margin:14px 37px 6px 26px +} +.account.account-card-info .payment-card-expiry{ + height:20px; + margin-left:26px +} +.account.account-card-info .payment-card-dots{ + color:var(--text-color-white-higher); + display:inline-block; + font-size:17px; + letter-spacing:1px; + margin-right:15px; + margin-top:6px; + width:62px +} +.account.account-card-info .payment-card-digits{ + color:var(--text-color-white-higher); + font:var(--text-h1); + font-family:var(--text-font-family-bold) +} +.account.account-card-info .payment-card-expiry-lbl,.account.account-card-info .payment-card-expiry-val{ + color:var(--text-color-white-higher); + display:inline-block; + font:var(--text-body1) +} +.account.account-card-info .payment-card-expiry-val{ + margin-left:1px +} +.account.account-card-info .payment-card-edit{ + color:var(--text-color-white-higher); + display:inline-block; + font:var(--text-body1); + margin-left:26px; + margin-top:26px; + text-decoration:underline +} +.chat-settings .show-hide-wrap{ + display:flex; + width:100% +} +.chat-settings .chat-show-wrapper{ + -webkit-padding-end:16px; + padding:16px 0 0; + padding-inline-end:16px; + width:100% +} +.chat-settings .chat-hide-wrapper{ + padding:16px 0 0; + width:100% +} +.chat-settings .account-chat-avatar{ + border-radius:2px; + box-sizing:border-box; + color:#fff; + display:inline; + font-family:var(--text-body1); + font-size:14px; + font-style:normal; + font-weight:400; + height:32px; + line-height:32px; + text-align:center; + width:32px +} +.chat-settings .chat-row{ + gap:8px; + align-items:center; + display:flex; + height:40px; + padding:8px +} +.chat-settings .chat-txt{ + color:var(--text-color-medium); + font:var(--text-body2); + font-size:12px +} +.chat-settings .checked.chat-selected{ + color:#00bfa5; + display:inline; + height:16px; + position:absolute; + right:5px; + top:5px; + width:16px +} +.rtl .chat-settings .checked.chat-selected{ + left:5px; + right:unset +} +.chat-settings .chat-selected{ + display:none +} + +@media print{ +*{ + -webkit-print-color-adjust:exact !important; + color-adjust:exact !important +} +.bottom-page .top-head{ + position:absolute !important +} +body,body *{ + max-width:100% !important +} +.data-block-view{ + left:auto !important; + position:relative !important; + top:auto !important +} +body.bottom-page,body.bottom-pages .fmholder{ + overflow:visible !important +} +#help2-main .sidebar-menu-container.fixed,#help2-main .support-section-header{ + position:absolute !important +} +.contact-us-revamp h1{ + margin-bottom:0 +} +.bottom-page.img.mobile-top{ + margin:0 0 0 38px +} +.bottom-page.img.megasync,.bottom-page.img.mobile-app{ + padding:0 +} +.bottom-page.full-block{ + overflow:hidden +} +.megasync .bottom-page img{ + width:60% +} +.bottom-page.img-wrap:before{ + display:none +} +.bottom-page .security-illustration{ + left:auto; + margin-left:auto; + position:static +} +.bottom-page.table{ + table-layout:auto +} +} +@page{ + -webkit-print-color-adjust:exact !important; + color-adjust:exact !important +} + +.slide-in-out .slide-item{ + overflow-y:hidden; + transition:max-height .3s ease-in-out,padding .3s ease-in-out; + -webkit-transition:max-height .3s ease-in-out,padding .3s ease-in-out; + -moz-transition:max-height .3s ease-in-out,padding .3s ease-in-out; + -o-transition:max-height .3s ease-in-out,padding .3s ease-in-out; + -ms-transition:max-height .3s ease-in-out,padding .3s ease-in-out +} +.slide-in-out.closed .slide-item{ + border-top:0; + max-height:0 !important; + padding-bottom:0; + padding-top:0 +} +.no-trans,.no-trans-init,.no-trans-init:after,.no-trans-init:before,.no-trans:after,.no-trans:before{ + -webkit-transition:none!important; + -moz-transition:none!important; + -o-transition:none!important; + -ms-transition:none!important; + transition:none!important +} +.ts-500{ + transition-duration:.5s; + -webkit-transition-duration:.5s; + -moz-transition-duration:.5s; + -o-transition-duration:.5s; + -ms-transition-duration:.5s +} + +.affiliate-program#fmholder{ + min-width:600px +} +.affiliate-program .fm-left-panel{ + display:none +} +.affiliate-program .nw-fm-left-icons-panel{ + border-right:2px solid var(--stroke-grey-1) +} +.fm-affiliate .breadcrumbs{ + --mask-color:var(--text-color-medium); + align-items:center; + background:var(--surface-main); + box-sizing:border-box; + display:flex; + min-height:48px; + padding:8px 24px +} +.fm-affiliate .breadcrumbs .item{ + color:var(--text-color-medium); + cursor:default; + display:inline-flex; + font:var(--text-body1) +} +.fm-affiliate .breadcrumbs .item.active{ + cursor:pointer +} +.fm-affiliate .breadcrumbs .item.active:hover{ + color:var(--text-color-high) +} +.fm-affiliate .breadcrumbs i{ + --icon-size:16px; + display:inline-flex; + margin:0 8px +} +.rtl .fm-affiliate .breadcrumbs{ + direction:rtl +} +.rtl .fm-affiliate .breadcrumbs i{ + transform:rotate(180deg) +} +.fm-affiliate.body{ + background-color:var(--stroke-grey-1); + display:none; + height:calc(100% - 48px); + overflow:hidden +} +.affiliate-program .fm-affiliate.body{ + display:block +} +.fm-affiliate.scroll-block{ + height:calc(100% - 48px); + overflow:hidden; + position:relative; + width:100% +} +.rtl .fm-affiliate.scroll-block{ + direction:rtl +} +.fm-affiliate.content{ + box-sizing:border-box; + font-size:0; + line-height:0; + margin:auto; + max-width:1008px; + padding:15px 24px 50px +} +.fm-affiliate.guide-block{ + display:flex; + justify-content:flex-end; + padding:0 0 18px +} +.fm-affiliate .mega-data-box{ + margin:0 0 28px +} +.fm-affiliate .columns-wrapper{ + display:flex; + overflow:hidden +} +.fm-affiliate .boxes-wrapper{ + display:flex; + flex-wrap:wrap; + justify-content:space-between +} +.fm-affiliate .boxes-wrapper .mega-data-box{ + min-height:450px; + width:calc(50% - 14px) +} +.fm-affiliate .refer-users-block{ + margin:0 0 36px +} +.fm-affiliate .refer-block{ + box-sizing:border-box; + cursor:pointer; + display:flex; + flex:1; + flex-direction:column; + padding:0 12px 12px; + position:relative; + text-align:center; + transition:var(--transition-shadow) +} +.fm-affiliate .refer-block:hover{ + box-shadow:1px 1px 10px 1px var(--button-hover) +} +.fm-affiliate .refer-block i{ + --icon-size:80px; + margin:16px auto 8px +} +.fm-affiliate .refer-block .info{ + color:var(--text-color-medium); + flex:1 1 auto; + font:var(--text-body1) +} +.fm-affiliate .refer-block .info strong{ + color:var(--text-color-high); + display:block; + font:var(--text-h3); + font-weight:400; + padding:0 0 4px +} +.fm-affiliate .refer-block a{ + color:var(--secondary-green); + display:block; + font:var(--text-body1); + padding:8px 0 10px +} +.fm-affiliate .commission-block{ + color:var(--text-color-high); + display:flex; + flex:1; + flex-direction:column; + font:var(--text-body1); + padding:16px; + text-align:center +} +.fm-affiliate .commission-block .title{ + flex:1 +} +.fm-affiliate .commission-block .price{ + flex:1; + font:var(--text-data); + margin:8px 0 -5px +} +.fm-affiliate .commission-block .euro-price{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.fm-affiliate .commission-block .currency{ + font:var(--text-h3); + line-height:inherit +} +.fm-affiliate .commission-block.active{ + background:var(--button-fill-positive); + color:var(--text-color-white-high) +} +.fm-affiliate .commission-block.active .euro-price{ + color:var(--text-color-white-medium) +} +.fm-affiliate .commission-block sup{ + font:var(--text-caption); + padding:0 0 0 4px; + position:relative; + vertical-align:top +} +.fm-affiliate .commission-block .price sup{ + line-height:inherit +} +.fm-affiliate .commission-body{ + border-top:1px solid var(--stroke-grey-2); + color:var(--text-color-medium); + font:var(--text-body2); + padding:16px 24px; + position:relative +} +.fm-affiliate .commission-body .note{ + font:var(--text-caption); + line-height:inherit +} +.fm-affiliate .commission-body a{ + color:var(--text-color-high); + text-decoration:underline +} +.fm-affiliate .commission-body a:hover{ + text-decoration:none +} +.fm-affiliate .mega-input-dropdown .option.label:after{ + background-color:var(--label-green); + border-radius:100%; + content:""; + display:block; + height:6px; + width:6px +} +.fm-affiliate .mega-input-dropdown .option.label.orange:after{ + background-color:var(--label-orange) +} +.fm-affiliate .mega-input-dropdown .option.label.red:after{ + background-color:var(--label-red) +} +.fm-affiliate.no-redemption{ + color:var(--text-color-medium); + font:var(--text-body2); + padding:12px 0; + text-align:center +} +.fm-affiliate.redeem-scroll{ + max-height:409px; + overflow:hidden; + position:relative +} +.fm-affiliate.redeem-scroll.expanded-item{ + max-height:590px +} +.fm-affiliate.redeem-summary{ + transition:var(--transition-bg-color) +} +.fm-affiliate.redeem-details{ + display:none +} +.fm-affiliate.redeem-details,.fm-affiliate.redeem-details:hover td:before{ + background:var(--surface-grey-1); + border-color:var(--stroke-grey-1) +} +.fm-affiliate.redeem-details td:last-child:after,.rtl .fm-affiliate.redeem-details td:last-child:after{ + left:22px; + right:auto; + width:calc(100% - 44px) +} +.fm-affiliate.redeem-details td{ + font-size:0 +} +.fm-affiliate.redeem-table .expanded+.fm-affiliate.redeem-details{ + display:table-row +} +.fm-affiliate.redeem-table .expanded .link.open,.fm-affiliate.redeem-table .redeem-summary .link.close{ + display:none +} +.fm-affiliate.redeem-table .expanded.redeem-summary .link.close{ + display:inline-block +} +.fm-affiliate.details-bottom{ + --mask-color:var(--text-color-high); + display:flex; + justify-content:center; + padding:1px 0 16px +} +.fm-affiliate.details-bottom i{ + --icon-size:24px +} +.fm-affiliate.details-bottom .link.close{ + align-items:center; + color:var(--text-color-high); + display:inline-flex; + font:var(--text-body1); + text-decoration:none +} +.fm-affiliate.redeem-cell{ + box-sizing:border-box; + display:inline-block; + padding:0 20px; + vertical-align:top; + width:50% +} +.fm-affiliate.redeem-data{ + align-items:baseline; + border-top:1px solid var(--stroke-grey-2); + display:flex; + flex-wrap:wrap; + padding:10px 0 +} +.fm-affiliate.redeem-data:first-child{ + border:0 +} +.fm-affiliate.redeem-data>span{ + -webkit-padding-end:12px; + box-sizing:border-box; + color:var(--text-color-high); + display:inline-block; + font:var(--text-body2); + overflow-wrap:break-word; + padding:6px 0; + padding-inline-end:12px; + vertical-align:top; + width:55% +} +.fm-affiliate.redeem-data span.strong{ + font:var(--text-body1-bold); + width:45% +} +.fm-affiliate.redeem-data span.grey{ + color:var(--text-color-medium); + font:var(--text-body1); + width:45% +} +.fm-affiliate.redeem-data span.full-size{ + width:100% +} +.fm-affiliate.redeem-data span.grey a{ + color:var(--text-color-medium); + text-decoration:underline +} +.fm-affiliate.redeem-data span .status{ + color:var(--text-color-success); + display:inline; + font:var(--text-body1); + padding:0 10px +} +.fm-affiliate.redeem-data span .status.red{ + color:var(--text-color-error) +} +.fm-affiliate.redeem-data span .status.orange{ + color:var(--text-color-warning) +} +.fm-affiliate.redeem-data span .euro{ + color:var(--text-color-low); + margin-right:8px; + padding:0 5px +} +.fm-affiliate.redeem-data span .local{ + padding:0 5px; + white-space:nowrap +} +.fm-affiliate.redeem-data span.bitcoin-address{ + display:block; + width:100% +} +.fm-affiliate.charts-head{ + align-items:center; + background-color:var(--stroke-grey-1); + display:flex; + margin:-1px 0 0; + padding:14px 22px; + position:relative +} +.fm-affiliate.charts-head .name{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.fm-affiliate.charts-head .number{ + color:var(--text-color-high); + font:var(--text-h1); + padding:0 16px +} +.fm-affiliate.charts-head .compare{ + --mask-color:var(--text-color-light-green); + align-items:center; + color:var(--text-color-low); + display:inline-flex; + font:var(--text-body2) +} +.fm-affiliate.charts-head .compare span{ + color:var(--text-color-light-green); + padding:0 4px +} +.fm-affiliate.charts-head .compare i{ + --icon-size:16px; + margin:0 -4px +} +.fm-affiliate.chart-body{ + padding:16px 24px 24px; + position:relative; + text-align:center +} +.fm-affiliate.chart-period{ + border-bottom:2px solid transparent; + color:var(--text-color-medium); + cursor:pointer; + display:inline-flex; + font:var(--text-body2); + margin:0 10px; + padding:0 0 2px; + transition:var(--transition-border), var(--transition-color) +} +.fm-affiliate.chart-period.active,.fm-affiliate.chart-period:hover{ + border-color:var(--secondary-blue); + color:var(--text-color-high) +} +.fm-affiliate.chart-period.active{ + font:var(--text-body1-bold) +} +.fm-affiliate.chart-dates{ + --mask-color:var(--text-color-medium); + align-items:center; + display:flex; + justify-content:space-between; + padding:10px 0 0 +} +.fm-affiliate.chart-dates i{ + --icon-size:16px; + cursor:pointer +} +.rtl .fm-affiliate.chart-dates .icon-arrow-left,.rtl .fm-affiliate.chart-dates .icon-arrow-right{ + transform:rotateY(180deg) +} +.fm-affiliate.chart-dates .dates{ + color:var(--text-color-medium); + display:inline-flex; + font:var(--text-body2); + padding:0 10px +} +.fm-affiliate.purchase-chart{ + height:100px; + margin:10px auto; + width:100px +} +.fm-affiliate.register-chart{ + margin:58px auto 0; + min-height:186px +} +.fm-affiliate.list{ + padding:0; + text-align:start +} +.fm-affiliate.list-item{ + align-items:center; + box-shadow:0 -1px 0 0 var(--stroke-grey-2); + display:flex; + font:var(--text-body2); + padding:7px 0 8px +} +.fm-affiliate.list-item:first-child{ + box-shadow:none +} +.fm-affiliate.list-item span{ + display:block +} +.fm-affiliate.list-item .name{ + color:var(--text-color-medium); + flex:1; + padding:0 10px +} +.fm-affiliate.list-item .label{ + border-radius:9px; + color:var(--text-color-white-high); + min-width:48px; + text-align:center +} +.fm-affiliate.list-item .label.yellow{ + background-color:var(--label-yellow) +} +.fm-affiliate.list-item .label.orange{ + background-color:var(--label-orange) +} +.fm-affiliate.list-item .label.red{ + background-color:var(--label-red) +} +.fm-affiliate.list-item .label.purple{ + background-color:var(--label-purple) +} +.fm-affiliate.list-item .label.blue{ + background-color:var(--label-blue) +} +.fm-affiliate.list-item.list-item .num{ + color:var(--text-color-high) +} +.fm-affiliate.distribution-head{ + align-items:center; + display:flex; + justify-content:center; + padding:16px 24px 10px +} +.fm-affiliate.tab-button{ + border-bottom:2px solid transparent; + color:var(--text-color-medium); + cursor:pointer; + display:inline-flex; + font:var(--text-body2); + margin:0 10px; + padding:0 0 2px; + transition:var(--transition-border), var(--transition-color) +} +.fm-affiliate.tab-button.active,.fm-affiliate.tab-button:hover{ + border-color:var(--secondary-blue); + color:var(--text-color-high) +} +.fm-affiliate.tab-button.active{ + font:var(--text-body1-bold) +} +.distribution .fm-affiliate.list-item .img-wrap{ + line-height:0 +} +.distribution .fm-affiliate.list-item img{ + border-radius:2px; + height:16px; + width:24px +} +@media only screen and (max-width:783px){ +.fm-affiliate .refer-block{ + width:50% +} +.fm-affiliate .boxes-wrapper .mega-data-box,.fm-affiliate.redeem-cell{ + width:100% +} +} + +.backup-center.empty-section{ + box-sizing:border-box; + display:flex; + flex-direction:column; + height:100%; + padding:24px +} +.rtl .backup-center.empty-section{ + direction:rtl +} +.backup-center .empty-wrap{ + color:var(--text-color-high); + display:flex; + flex:1; + flex-flow:column wrap; + font:var(--text-body1); + justify-content:center; + text-align:center +} +.backup-center .empty-wrap i{ + --icon-size:240px; + margin:0 auto +} +.backup-center .empty-wrap h2{ + font:var(--text-h0-bold); + margin:0 0 80px +} +.backup-center .new-backup-wrapper{ + display:flex; + justify-content:space-around; + margin:0 auto; + max-width:620px; + width:100% +} +.backup-center .new-backup{ + margin:0 auto; + max-width:240px +} +.backup-center .new-backup i{ + --icon-size:48px; + --mask-color:var(--secondary-blue); + margin:0 auto 25px +} +.backup-center .new-backup .title{ + font:var(--text-h3-bold) +} +.backup-center .new-backup .info{ + font:var(--text-body2); + padding:10px 0 0 +} +.backup-center .new-backup .info a,.backup-center .new-backup .info a:visited{ + color:var(--secondary-green); + cursor:pointer; + text-decoration:underline +} +.backup-center .new-backup .info a:hover{ + text-decoration:none +} +@media only screen and (max-height:640px){ +.backup-center .empty-wrap h2{ + margin:0 0 20px +} +} +.backup-center.content-block{ + display:flex; + flex-direction:column; + height:100% +} +.rtl .backup-center.content-block{ + direction:rtl +} +.backup-center .content-header{ + -webkit-margin-end:10px; + align-items:center; + display:flex; + flex:0 0 48px; + height:48px; + justify-content:flex-end; + margin-inline-end:10px +} +.backup-center .content-body{ + box-sizing:border-box; + flex:1 1 auto; + overflow:hidden; + padding:24px +} +.backup-center .content-wrap{ + margin:0 auto; + max-width:880px +} +.backup-center .backup-body{ + --mask-color:var(--icon-rest); + --icon-size:24px; + background:var(--surface-main); + border:1px solid var(--stroke-grey-2); + border-radius:8px; + box-sizing:border-box; + margin:0 0 15px; + min-height:40px; + overflow:hidden; + transition:var(--transition-border), var(--transition-shadow) +} +.backup-center .backup-body:hover{ + box-shadow:0 0 0 3px var(--stroke-grey-2) +} +.backup-center .backup-body.active{ + border-color:var(--secondary-blue); + box-shadow:0 0 0 3px var(--secondary-blue) +} +.backup-center .backup-body.expanded{ + border-color:var(--stroke-grey-2); + box-shadow:none +} +.backup-center .backup-body .success{ + --mask-color:var(--text-color-success); + color:var(--text-color-success) +} +.backup-center .backup-body .error{ + --mask-color:var(--text-color-error); + color:var(--text-color-error) +} +.backup-center .backup-body .warning{ + --mask-color:var(--text-color-warning); + color:var(--text-color-warning) +} +.backup-center .backup-body .in-progress{ + --mask-color:var(--secondary-blue); + color:var(--text-color-info) +} +.backup-center .backup-body .tip-icon{ + --mask-color:var(--icon-inactive); + transition:var(--transition-color) +} +.backup-center .backup-body .tip-icon:hover{ + --mask-color:var(--icon-rest) +} +.backup-center .backup-body .status{ + align-items:center; + display:flex; + font:var(--text-body1) +} +.backup-center .backup-body .status span{ + padding:0 8px +} +.backup-center .backup-body .percs{ + align-items:center; + background:var(--secondary-blue); + border-radius:12px; + color:var(--text-color-white-high); + display:inline-flex; + font:var(--text-body1); + padding:2px 4px +} +.backup-center .backup-body .percs span{ + color:var(--text-color-white-high); + padding:0 +} +.backup-center .backup-body .percs i{ + --icon-size:16px; + --mask-color:var(--text-color-white-high); + -webkit-margin-end:2px; + margin-inline-end:2px +} +.backup-center .backup-body .header{ + align-content:center; + display:flex; + height:72px; + white-space:nowrap +} +.backup-center .backup-body .header span{ + max-width:100%; + overflow:hidden; + text-overflow:inherit +} +.backup-center .backup-body .header .name{ + -webkit-padding-end:15px; + align-items:center; + background:var(--surface-grey-1); + box-sizing:border-box; + color:var(--text-color-high); + display:flex; + flex:0 0 30%; + font:var(--text-h3-bold); + overflow:hidden; + padding:0 5px; + padding-inline-end:15px; + text-overflow:ellipsis +} +.backup-center .backup-body .header .name i{ + --icon-size:48px; + margin:0 10px +} +.backup-center .backup-body .header .info{ + align-items:center; + color:var(--text-color-medium); + display:flex; + flex:1 1 auto; + justify-content:space-between; + overflow:hidden; + padding:0 15px +} +.backup-center .backup-body .header .high-color{ + color:var(--text-color-high) +} +.backup-center .backup-body .header .folders-info span{ + padding:0 2px +} +.backup-center .backup-body i.control{ + --mask-color:var(--icon-inactive); + -webkit-margin-start:8px; + cursor:pointer; + margin-inline-start:8px; + transition:var(--transition-opacity), var(--transition-color) +} +.backup-center .backup-body i.control:hover{ + --mask-color:var(--icon-rest) +} +.backup-center .backup-body i.js-context{ + opacity:0 +} +.backup-center .backup-body.active .info-cell i.js-context,.backup-center .backup-body:hover .info-cell i.js-context,.backup-center .backup-body tr.active i.js-context,.backup-center .backup-body tr:hover i.js-context{ + opacity:1 +} +.backup-center .backup-body .header .info-cell{ + align-items:center; + display:inline-flex; + overflow:hidden; + text-overflow:ellipsis +} +.backup-center .backup-body .header .status-info{ + flex:0 0 auto +} +.backup-center .backup-body .header .status{ + padding:0 8px +} +.backup-center .backup-body .header hr{ + background:var(--stroke-grey-2); + border:0; + height:14px; + margin:0 8px; + padding:0; + width:1px +} +.bc-item-list .data-table{ + overflow:visible; + table-layout:fixed +} +.bc-item-list .data-table th{ + color:var(--text-color-medium); + padding:6px 8px 4px +} +.bc-item-list .data-table td{ + padding:4px 8px 3px; + white-space:nowrap +} +.bc-item-list .data-table td span{ + display:block; + overflow:hidden; + text-overflow:ellipsis +} +.bc-item-list .data-table td:last-child,.bc-item-list .data-table th:last-child{ + text-align:end; + width:70px +} +.bc-item-list .data-table .item-name{ + align-items:center; + color:var(--text-color-high); + display:flex; + font:var(--text-body1) +} +.bc-item-list .data-table .arrow{ + height:auto +} +.bc-item-list .data-table .item-name i{ + --icon-size:24px; + -webkit-margin-end:9px; + flex:0 0 auto; + margin:0 1px; + margin-inline-end:9px; + position:static +} +.bc-item-list .data-table .folder .item-name i{ + -webkit-margin-end:8px; + margin:0 2px; + margin-inline-end:8px +} +.backup-center .data-table{ + display:none +} +.backup-center .data-table tr th:first-child{ + width:30% +} +.backup-center .data-table tr th:after{ + display:none +} +.backup-center .data-table tr td:first-child:after,.backup-center .data-table tr td:last-child:after{ + width:calc(100% - 15px) +} +.backup-center .data-table tr td:first-child:before{ + left:8px +} +.backup-center .data-table tr td:last-child:before{ + right:8px +} +.backup-center .backup-body .nav{ + align-items:center; + border-top:1px solid var(--stroke-grey-2); + display:none; + justify-content:flex-end; + margin:0 15px; + padding:4px 0 3px +} +.backup-center .backup-body .nav:empty{ + display:none +} +.backup-center .backup-body .nav span{ + -webkit-margin-start:13px; + border-bottom:2px solid transparent; + box-sizing:border-box; + color:var(--text-color-medium); + cursor:pointer; + display:inline-block; + font:var(--text-body1); + height:24px; + margin:2px 0 0; + margin-inline-start:13px; + transition:var(--transition-border), var(--transition-color); + vertical-align:top +} +.backup-center .backup-body .nav span.active,.backup-center .backup-body .nav span:hover{ + color:var(--text-color-high); + font:var(--text-body1-bold) +} +.backup-center .backup-body .nav span.active{ + border-color:var(--secondary-blue) +} +.backup-center .backup-body .nav i{ + --mask-color:var(--icon-rest); + --icon-size:16px; + -webkit-margin-start:13px; + cursor:pointer; + margin-inline-start:13px +} +.backup-center .backup-body .nav i.prev{ + transform:rotate(180deg) +} +.backup-center .backup-body .nav i:hover{ + --mask-color:var(--icon-active) +} +.backup-center .expanded .header{ + background:var(--surface-grey-1); + height:48px +} +.backup-center .expanded .header .info-cell:first-child,.backup-center .expanded .header .status{ + display:none +} +.backup-center .expanded .header .name{ + flex:initial; + flex:1 1 auto; + font:var(--text-h3) +} +.backup-center .expanded .header .info{ + flex:0 0 auto +} +.backup-center .expanded .js-expand{ + transform:rotate(180deg) +} +.backup-center .expanded .data-table{ + display:table +} +.backup-center .expanded .nav{ + display:flex +} +.backup-center .content-body .tip{ + --icon-size:24px; + align-items:center; + color:var(--text-color-low); + display:flex; + font:var(--text-body1); + justify-content:flex-end; + margin:0 auto; + max-width:880px +} +.backup-center .content-body .tip:before{ + height:28px; + left:-2px; + position:absolute; + top:-2px; + width:28px +} +.backup-center .content-body .tip span{ + padding:0 8px +} +.dark-direct-tooltip.backup-tip{ + max-width:276px; + text-align:center +} +.dark-direct-tooltip.backup-tip.short{ + max-width:210px +} +.dark-direct-tooltip.backup-tip a{ + color:var(--secondary-blue-inverted); + cursor:pointer; + text-decoration:underline +} +.dark-direct-tooltip.backup-tip a:hover{ + text-decoration:none +} + +.top-menu-popup{ + background-color:var(--stroke-main); + box-shadow:0 0 0 1px var(--stroke-grey-2); + box-sizing:border-box; + font-size:0; + height:100%; + line-height:0; + opacity:1; + position:fixed; + right:0; + top:0; + transition:right .2s ease-in-out,left .2s ease-in-out,width .2s ease-in-out,opacity .2s ease-in-out; + width:256px; + z-index:1120 +} +.top-menu-popup.o-hidden{ + right:-257px +} +.rtl.top-menu-popup{ + left:0; + right:auto +} +.rtl.top-menu-popup.hidden{ + left:-257px +} +.top-menu-scroll{ + height:calc(100% - 42px); + margin-top:42px; + position:relative +} +.top-menu-content{ + padding:0 20px 20px +} +.top-menu-item{ + align-items:center; + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-high); + cursor:pointer; + display:inline-flex; + margin:10px 0; + position:relative; + transition:var(--transition-color), var(--transition-bg-color); + width:100% +} +.top-menu-item span{ + flex-grow:1; + font:var(--text-h3-bold); + padding:4px 0 +} +.top-menu-item.small-font span{ + font:var(--text-body1-bold) +} +.top-menu-item.underlined{ + margin-bottom:0 +} +.top-menu-item.underlined span{ + font:var(--text-body1); + text-decoration:underline +} +.top-menu-popup i{ + --icon-size:24px; + --mask-color:var(--icon-active); + display:inline-block +} +.top-menu-item i{ + -webkit-margin-end:14px; + margin:4px; + margin-inline-end:14px +} +.top-menu-item span~i{ + --icon-size:16px; + --mask-color:var(--icon-active); + -webkit-margin-start:0; + margin:0 4px; + margin-inline-start:0 +} +.top-menu-item.underlined i{ + -webkit-margin-end:4px; + margin-inline-end:4px +} +.top-menu-item i.x32{ + --icon-size:32px; + -webkit-margin-end:8px; + margin:0 2px; + margin-inline-end:8px +} +.expanded.top-menu-item i.right-arrow,.top-menu-item i.right-arrow.down{ + transform:rotate(90deg) +} +.top-menu-popup i.close{ + cursor:pointer; + position:absolute; + right:12px; + top:12px; + z-index:1 +} +.rtl .top-menu-popup i.close{ + left:12px; + right:auto +} +.top-menu-divider{ + background-color:var(--stroke-grey-2); + display:inline-flex; + height:1px; + margin:10px 0; + width:100% +} +.top-menu-item.single{ + margin:2px 0 +} +.top-menu-item.single span{ + -webkit-padding-end:14px; + flex-grow:0; + padding-inline-end:14px +} +.top-submenu{ + margin:0; + max-height:0; + min-height:0; + opacity:0; + overflow:hidden; + transition:max-height .2s ease-in-out,opacity .2s ease-in-out,padding .2s ease-in-out +} +.submenu-item.expanded+.top-submenu{ + max-height:520px; + opacity:1 +} +.top-submenu .top-menu-item{ + -webkit-padding-start:42px; + color:var(--text-color-medium); + font:var(--text-body1); + margin:0; + padding:6px 10px; + padding-inline-start:42px +} +.top-submenu .top-menu-item.active{ + background-color:var(--button-hover); + color:var(--text-color-high) +} +.fm-products-nav .pages-menu.body{ + background-color:var(--stroke-main); + border-top:1px solid var(--stroke-grey-2); + margin-top:0; + min-width:100%; + z-index:140 +} +@media (hover:hover){ +.top-menu-item.small:hover span{ + text-decoration:none +} +.top-submenu .top-menu-item:hover{ + background-color:var(--button-hover); + color:var(--text-color-high) +} +} +.top-social-bl{ + display:flex; + flex-wrap:wrap; + justify-content:space-between; + padding:6px 6px 0 +} +.top-social-txt{ + color:var(--text-color-high); + font:var(--text-body1-bold); + padding-bottom:20px; + width:100% +} +.top-social-button{ + background-color:#f4f4f5; + border-radius:4px; + cursor:pointer; + display:inline-block; + display:block +} +.top-social-button i{ + height:24px; + width:24px +} +.top-menu-footer{ + align-items:center; + display:flex; + justify-content:space-between; + padding:24px 6px 6px +} +.top-menu-footer .logout{ + flex-shrink:0 +} +.block-null-spinner,.top-mega-version{ + color:var(--text-color-low); + cursor:pointer; + font:var(--text-body1-bold) +} +.block-null-spinner{ + -webkit-margin-end:6px; + flex:0 0 auto; + margin-inline-end:6px; + white-space:nowrap +} +.block-null-spinner.block-loading-spinner{ + -webkit-margin-end:12px; + margin:0 6px; + margin-inline-end:12px +} +.top-menu-account-info{ + align-items:center; + display:flex +} +.top-menu-logged .avatar-block{ + cursor:pointer; + flex-grow:0; + margin:0 6px; + position:relative +} +.top-menu-logged .activity-status-block{ + margin:0; + position:absolute; + right:-2px; + top:-2px +} +.top-menu-logged .hidden+.activity-status-block{ + display:none +} +.top-menu-logged .user-info{ + cursor:pointer; + line-height:18px; + overflow:hidden; + padding:0 6px; + white-space:nowrap +} +.top-menu-logged .user-info .name{ + color:var(--text-color-higher); + font:var(--text-h3); + font-family:var(--text-font-family-bold); + line-height:inherit; + overflow:hidden; + text-overflow:ellipsis +} +.top-menu-logged .user-info .email{ + color:var(--text-color-medium); + font:var(--text-body1); + line-height:inherit; + overflow:hidden; + text-overflow:ellipsis +} +.top-menu-logged .plan{ + color:var(--text-color-high); + font:var(--text-body1); + padding:24px 6px 2px +} +.top-menu-logged .storage{ + background:var(--progress-bar-background); + border-radius:3px; + height:6px; + margin:0 6px 6px; + position:relative +} +.top-menu-logged .loader.loading+.storage-txt{ + visibility:hidden +} +.top-menu-logged .storage-txt{ + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body2); + min-height:30px; + padding:0 6px 12px; + position:relative +} +.top-menu-logged .storage-txt span{ + color:var(--text-color-success); + font-family:var(--text-font-family-semibold) +} +.top-menu-logged .storage span{ + background:var(--stroke-success); + border-radius:inherit; + display:block; + height:6px; + max-width:100%; + position:absolute; + vertical-align:top +} +.top-menu-logged.going-out .storage span{ + background:var(--surface-warning) +} +.top-menu-logged.going-out .storage-txt span{ + color:var(--text-color-warning) +} +.top-menu-logged.exceeded .storage span{ + background:var(--surface-error) +} +.top-menu-logged.exceeded .storage-txt span{ + color:var(--text-color-error) +} +.top-menu-logged button{ + margin:0 6px 6px +} +.top-menu-logged .loader{ + height:16px; + margin:0 6px; + opacity:0; + position:absolute; + width:16px +} +.top-menu-logged .loader.loading{ + -webkit-animation:rotate 2.5s linear infinite; + animation:rotate 2.5s linear infinite; + opacity:1 +} +.pages-menu.body{ + background-color:var(--stroke-main); + box-sizing:border-box; + font-size:0; + line-height:0; + margin-top:48px; + position:absolute; + text-align:center; + -webkit-transition:top .6s ease-in-out; + transition:top .6s ease-in-out; + white-space:nowrap; + width:100%; + z-index:190 +} +.menu-shadow .pages-menu.body{ + box-shadow:0 14px 20px 0 rgba(0, 0, 0, .04) +} +.download .pages-menu.body{ + bottom:0 +} +.download .pages-menu.body,.pages-menu.body.floating{ + box-shadow:0 1px 0 0 rgba(0, 0, 0, .1) +} +.pages-menu.body.floating{ + bottom:auto; + position:fixed; + top:-126px; + z-index:190 +} +.pages-menu.body.floating.activated{ + top:0 +} +.pages-menu.content{ + padding:0 +} +.rtl .pages-menu.content{ + direction:rtl +} +.pages-menu.link:not(.hidden){ + align-items:center; + cursor:pointer; + display:inline-flex; + justify-content:center; + margin:12px 0; + padding:10px 24px +} +.pages-menu.link span{ + color:var(--text-color-high); + display:inline-block; + font-family:var(--text-font-family-semibold); + font-size:18px; + line-height:24px; + padding:0 30px; + transition:color .2s ease-in-out +} +.pages-menu.link i{ + -webkit-margin-start:-30px; + -webkit-margin-end:0; + --mask-color:var(--text-color-higher); + display:none; + margin-inline-end:0; + margin-inline-start:-30px; + margin-top:2px; + transition:transform .2s ease-in-out +} +.pages-menu.link.active i{ + transform:rotate(-180deg) +} +.pages-menu.submenu-item i{ + --icon-size:24px; + --mask-color:var(--icon-active); + display:inline-block +} +.pages-menu.submenu{ + background-color:var(--stroke-main); + border-radius:8px; + box-shadow:var(--dropdown-shadow); + height:0; + opacity:0; + overflow:hidden; + position:absolute; + transition:opacity .2s ease-in-out; + white-space:nowrap; + z-index:10 +} +.pages-menu.submenu.active{ + height:auto; + margin:10px; + opacity:1; + overflow:visible; + padding:5px 0 +} +.pages-menu.submenu .half-sized{ + display:inline-block; + float:none; + vertical-align:top; + width:auto +} +.pages-menu.submenu-link{ + display:block; + margin:22px 20px; + min-width:170px; + position:relative; + text-align:left +} +.pages-menu.submenu-link i{ + background-color:grey; + border-radius:100%; + height:32px; + left:0; + position:absolute; + top:0; + width:32px +} +.rtl .pages-menu.submenu-link i{ + left:auto; + right:0 +} +.pages-menu.submenu-link span{ + -webkit-padding-start:45px; + -webkit-padding-end:0; + color:var(--text-color-high); + display:block; + font-family:var(--text-font-family); + font-size:18px; + line-height:24px; + padding-bottom:3px; + padding-inline-end:0; + padding-inline-start:45px; + padding-top:4px; + text-align:start +} +.menus-sprite.rounded.sync{ + background-color:#00a8e1; + background-position:5px -97px +} +.menus-sprite.rounded.mobile{ + background-color:#00c1a5; + background-position:-45px -97px +} +.menus-sprite.rounded.uwp{ + background-color:#ed5564; + background-position:-95px -97px +} +.menus-sprite.rounded.cmd{ + background-color:#ab58f5; + background-position:-145px -98px +} +.menus-sprite.rounded.bird{ + background-color:#ab58f5; + background-position:-45px -148px +} +.menus-sprite.rounded.ext{ + background-color:#ffa700; + background-position:6px -149px +} +.menus-sprite.rounded.nas{ + background-color:#00a8e1; + background-position:-95px -148px +} +.menus-sprite.rounded.storage{ + background-color:#00c1a5; + background-position:-145px -148px +} +.menus-sprite.rounded.encryption{ + background-color:#7a8b9a; + background-position:-195px -148px +} +.menus-sprite.rounded.securechat{ + background-color:#ed5564; + background-position:6px -197px +} +.menus-sprite.rounded.backup{ + background-color:#1db07b; + background-position:-45px -199px +} +.menus-sprite.rounded.share{ + background-color:#ffa700; + background-position:-95px -198px +} +.menus-sprite.rounded.objectstorage{ + background-color:#4a90e2; + background-position:-191px -197px +} +.top-menu-logged.business-acc .storage{ + display:none +} +.menus-sprite,i.menus-sprite{ + background-image:url(../imagery/mega-menus-sprite.aaa9a4ae08139b96.png); + background-repeat:no-repeat +} +@media only screen and (max-width:1240px){ +.fr .pages-menu.link span{ + font-size:15px; + padding:0 25px +} +} +@media only screen and (max-width:970px){ +.pages-menu.link span{ + padding:0 15px +} +.pages-menu.link:not(.hidden){ + padding:10px 8px +} +.pages-menu.link i{ + margin-left:-15px +} +.fr .pages-menu.link span{ + padding:0 20px +} +} +@media only screen and (max-width:780px){ +.fr .pages-menu.link span{ + font-size:14px; + padding:0 5px +} +.fr .pages-menu.link.submenu-item span{ + padding:0 15px 0 5px +} +} +@media only screen and (max-width:702px){ +.pages-menu.link span{ + font-size:14px; + min-width:0 +} +} +@media only screen and (max-width:625px){ +.pages-menu.body{ + display:none +} +} +@media only screen and (-o-min-device-pixel-ratio:3/2),only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){ +.menus-sprite,i.menus-sprite{ + background-image:url(../imagery/mega-menus-sprite-2x.784a959dbd52b718.png); + background-size:223px auto +} +} + +.context-menu{ + background:var(--surface-main); + border:var(--context-menu-border); + border-radius:12px; + box-shadow:0 5px 10px 0 rgba(0, 0, 0, .3); + box-sizing:border-box; + display:none; + left:0; + opacity:0; + padding:8px 0; + position:absolute; + right:0; + top:0; + transition:opacity .15s,left .15s,right .15s,top .15s,margin .15s; + width:200px +} +.context-menu.file-menu{ + left:0 +} +.context-menu .context-menu{ + top:-8px +} +.context-menu .context-menu.open-right{ + left:80%; + right:auto +} +.context-menu .context-menu.open-left{ + left:auto; + right:80% +} +.context-menu .context-menu.open-left.open-above,.context-menu .context-menu.open-right.open-above{ + bottom:-8px; + top:auto +} +.context-menu.open-vertical{ + margin-top:-24px; + top:100% +} +.context-menu.open-vertical.visible{ + margin-top:0 +} +.context-menu.open-vertical.open-above{ + bottom:100%; + margin-bottom:-24px; + margin-top:auto; + top:auto +} +.context-menu.open-vertical.open-above.visible{ + margin-bottom:0; + margin-top:auto +} +.context-menu li.divider{ + padding:0 +} +.context-menu hr{ + background:var(--surface-grey-2); + border:none; + height:1px; + margin:8px 0; + width:100% +} +.context-menu ul{ + list-style:none; + margin:0; + padding:0 +} +.context-menu li{ + padding:0 8px; + position:relative +} +.context-menu li button{ + --mask-color:var(--icon-rest); + align-items:center; + background:var(--surface-main); + border:none; + border-radius:4px; + color:var(--text-color-medium); + cursor:pointer; + display:flex; + font:var(--text-body1); + min-height:32px; + outline:none; + text-align:start; + transition:var(--transition-bg-color), var(--transition-color); + width:100% +} +.context-menu li button:hover{ + --mask-color:var(--icon-active); + background:var(--button-hover); + color:var(--text-color-high) +} +.context-menu li i{ + --icon-size:24px; + -webkit-margin-end:8px; + flex-grow:0; + flex-shrink:0; + margin-inline-end:8px; + transition:var(--transition-color) +} +.context-menu li span~i{ + -webkit-margin-end:0; + -webkit-margin-start:8px; + margin-inline-end:0; + margin-inline-start:8px +} +.context-menu span{ + width:100% +} +.context-menu .shortcut{ + -webkit-margin-start:8px; + color:var(--text-color-low); + flex-shrink:0; + margin-inline-start:8px; + min-width:50px; + text-align:end +} +.context-menu[aria-expanded=true]{ + display:block +} +.context-menu.visible{ + opacity:1 +} +.context-menu .context-menu.open-right.visible{ + left:100%; + right:auto +} +.context-menu .context-menu.open-left.visible{ + left:auto; + right:100% +} +.context-menu.closing,.context-menu.opening{ + pointer-events:none +} + +.mega-data-header{ + align-items:center; + color:var(--text-color-high); + display:flex; + font:var(--text-h2); + justify-content:space-between +} +.mega-data-header>span{ + display:inline-flex; + margin:22px 0 16px +} +.mega-data-header .mega-input.text-style{ + margin-top:12px +} +.data-table{ + background:var(--surface-main); + border:2px solid var(--table-border); + border-collapse:initial; + border-radius:12px; + box-sizing:border-box; + font-family:var(--text-font-family); + margin:0 auto; + overflow:hidden; + padding:0 0 8px; + position:relative; + width:100% +} +.data-table.minimal{ + border:0; + padding:0 +} +.rtl .data-table{ + direction:rtl +} +.data-table th{ + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body2); + padding:12px 8px 4px; + position:relative; + text-align:start +} +.data-table tr th:first-child{ + -webkit-padding-start:22px; + border:0; + padding-inline-start:22px +} +.data-table tr th:last-child{ + -webkit-padding-end:22px; + padding-inline-end:22px +} +.data-table td{ + border-top:1px solid transparent; + box-sizing:border-box; + color:var(--text-color-medium); + font:var(--text-body2); + padding:7px 8px; + position:relative; + text-align:start; + text-overflow:ellipsis; + vertical-align:middle; + z-index:1 +} +.data-table td.data-table-empty{ + padding:12px 0 5px; + text-align:center +} +.data-table td.data-table-empty:last-child:before{ + display:none +} +.data-table tr td:first-child{ + -webkit-padding-start:22px; + padding-inline-start:22px +} +.data-table tr td:last-child{ + -webkit-padding-end:22px; + padding-inline-end:22px +} +.data-table-scroll{ + border-bottom-left-radius:inherit; + border-bottom-right-radius:inherit; + max-height:409px; + overflow:hidden +} +.data-table tr td:before{ + border-bottom:1px solid transparent; + border-top:1px solid transparent; + bottom:3px; + content:""; + left:0; + position:absolute; + right:0; + top:3px; + transition:var(--transition-border), var(--transition-bg-color); + z-index:-1 +} +.data-table tr td:first-child:before{ + border-left:1px solid transparent; + border-radius:4px 0 0 4px; + left:10px; + right:0 +} +.rtl .data-table tr td:first-child:before{ + border-left:initial; + border-radius:0 4px 4px 0; + border-right:1px solid transparent; + left:0; + right:10px +} +.data-table tr td:last-child:before{ + border-radius:0 4px 4px 0; + border-right:1px solid transparent; + right:12px +} +.rtl .data-table tr td:last-child:before{ + border-left:1px solid transparent; + border-radius:4px 0 0 4px; + border-right:initial; + left:12px; + right:0 +} +.data-table tr.active td:before,.data-table tr:hover td:before{ + background:var(--surface-grey-3); + border-color:var(--stroke-grey-2) +} +.dashboard .account.data-table tr:hover td:before{ + background:var(--surface-grey-1); + border-color:var(--stroke-grey-4) +} +.data-table tr.active td:before,.data-table tr.active td:first-child:before,.data-table tr.active td:last-child:before{ + background:var(--surface-grey-4); + border-color:var(--stroke-grey-4) +} +.data-table tr.active td:first-child:before{ + background-image:linear-gradient(var(--secondary-blue), var(--secondary-blue)); + background-position:3px; + background-repeat:no-repeat; + background-size:2px calc(100% - 8px) +} +.rtl .data-table tr.active td:first-child:before{ + background-position:calc(100% - 3px) +} +.data-table tr.expanded,.fm-affiliate.redeem-details{ + background:var(--surface-grey-1); + border-color:var(--stroke-grey-1) +} +.data-table tr.expanded td:before{ + display:none +} +.data-table tr+tr td:after,.data-table tr th:after{ + background:var(--surface-grey-2); + content:""; + height:1px; + left:0; + pointer-events:none; + position:absolute; + top:-1px; + width:100% +} +.data-table tr.template+tr td,.data-table tr:first-child td,.data-table tr:nth-child(2) td{ + border:0 +} +.data-table tr.template+tr td:after,.data-table tr:first-of-type td:after{ + display:none +} +.data-table tr th:after{ + bottom:0; + top:auto +} +.rtl .data-table tr td:after,.rtl .data-table tr th:after{ + left:auto; + right:0 +} +.data-table tr td:first-child:after{ + left:auto; + right:0; + width:calc(100% - 22px) +} +.rtl .data-table tr td:first-child:after{ + left:0; + right:auto +} +.data-table tr td:last-child:after{ + width:calc(100% - 22px) +} +.mega-data-box{ + background:var(--surface-main); + border-radius:12px; + box-shadow:var(--table-border) 0 0 0 2px; + position:relative +} +.mega-data-box table th{ + border:solid var(--stroke-grey-2); + border-width:0 0 0 1px; + font:var(--text-body1); + padding:2px 16px 3px +} +.rtl .mega-data-box table th{ + border-width:0 1px 0 0 +} +.mega-data-box table th span{ + max-width:100%; + overflow:hidden; + text-overflow:ellipsis +} +.mega-data-box table td{ + padding:8px 16px +} +.mega-data-box .mega-data-header{ + border-bottom:1px solid var(--stroke-grey-2); + padding:0 22px +} +.mega-data-box table{ + background:transparent; + border:0; + border-radius:0 +} +.mega-data-box table.main th{ + border:0; + height:0; + line-height:0; + overflow:hidden; + padding-bottom:0; + padding-top:0 +} +.mega-data-box table.clone,.mega-data-box table.clone tbody,.mega-data-box table.clone tr{ + display:flex; + overflow:hidden; + padding:0; + white-space:nowrap; + width:100% +} +.mega-data-box table.clone th{ + display:inline-flex; + flex:none; + width:17.5% +} +.mega-data-box table th.sortable{ + --mask-color:var(--text-color-high); + -webkit-padding-end:24px; + cursor:pointer; + padding-inline-end:24px +} +.mega-data-box table th.sortable i.icon-dropdown{ + -webkit-margin-end:-8px; + border-radius:0; + display:inline-block; + float:none; + margin:auto; + margin-inline-end:-8px; + padding:0 +} +.mega-data-box table th.sortable i.asc{ + transform:rotate(180deg) +} +.mega-data-box .colored-label{ + background-color:var(--label-green); + border-radius:9px; + color:var(--text-color-white-high); + display:inline-block; + padding:0 10px +} +.mega-data-box .colored-label.orange{ + background-color:var(--label-orange) +} +.mega-data-box .colored-label.red{ + background-color:var(--label-red) +} +.mega-data-box .link{ + color:var(--text-color-medium); + cursor:pointer; + display:inline-block; + font:var(--text-body2); + text-decoration:underline +} +.mega-data-box .link:hover{ + text-decoration:none +} +.data-table.medium-list{ + border:none; + border-radius:0; + padding:0 +} +.data-table.medium-list tr td:first-child:after{ + width:calc(100% - 8px) +} +.data-table.medium-list tr th:first-child:after{ + left:auto; + right:0; + width:calc(100% - 8px) +} +.rtl .data-table.medium-list tr th:first-child:after{ + left:0; + right:auto +} +.data-table.medium-list tr td:last-child:after{ + width:calc(100% - 8px) +} +.data-table.medium-list tr th:last-child:after{ + left:0; + right:auto; + width:calc(100% - 8px) +} +.rtl .data-table.medium-list tr th:last-child:after{ + left:auto; + right:0 +} +.data-table.medium-list tr th:last-child:after{ + left:0; + right:auto; + width:calc(100% - 8px) +} +.rtl .data-table.medium-list tr th:last-child:after{ + left:auto; + right:0 +} +.data-table.medium-list tr td:first-child:before{ + left:0 +} +.rtl .data-table.medium-list tr td:first-child:before{ + right:0 +} +.table-user-management .data-table.medium-list tr td:first-child:before{ + left:4px +} +.table-user-management .rtl .data-table.medium-list tr td:first-child:before{ + right:4px +} +.data-table.medium-list tr td:last-child:before{ + right:0 +} +.rtl .data-table.medium-list tr td:last-child:before{ + left:0 +} +.table-user-management .data-table.medium-list tr td:last-child:before{ + right:4px +} +.table-user-management .rtl .data-table.medium-list tr td:last-child:before{ + left:4px +} +.sticky-header-table-container{ + overflow:hidden +} +.sticky-header-table-container .data-table{ + border:none; + overflow:auto; + padding:0 0 2px +} +.sticky-header-table-container .data-table th{ + background:var(--surface-main); + position:sticky; + position:-webkit-sticky; + top:0; + z-index:1119 +} +.sticky-header-table-container.ps-container .ps-scrollbar-y-rail{ + margin:36px 0 2px +} + +.fm-recents.container{ + background-color:var(--stroke-main); + display:flex; + flex-direction:column; + height:calc(100% - 48px); + overflow:hidden; + position:relative +} +.fm-recents.header{ + border-bottom:1px solid var(--stroke-grey-2); + font:var(--text-body1); + padding:14px 0 14px 28px +} +.fm-recents.content{ + padding-bottom:100px +} +.rtl .fm-recents.content{ + direction:rtl +} +.fm-recents.scroll{ + height:100%; + overflow:hidden +} +.fm-recents.scroll:empty{ + height:auto +} +.fm-recents.content-row{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; + min-height:48px; + padding:5px 0; + position:relative; + width:100% +} +.fm-recents.content-row.group{ + margin-top:-1px +} +.fm-recents.content-row .content{ + -webkit-padding-start:20px; + border:1px solid transparent; + margin-left:48px; + margin-right:48px; + min-height:48px; + padding-inline-start:20px; + position:relative +} +.fm-recents.content-row.template{ + display:none +} +.fm-recents.date{ + -webkit-padding-start:24px; + color:var(--secondary-blue); + font:var(--text-body1-bold); + padding:23px 0 13px; + padding-inline-start:24px +} +.fm-recents.date.template{ + display:none +} +.fm-recents.date:first-child{ + padding-top:21px +} +.fm-recents .medium-file-icon{ + left:14px; + margin:0; + position:absolute; + top:8px +} +.rtl .fm-recents .medium-file-icon{ + left:auto; + right:14px +} +.fm-recents .medium-file-icon.thumb{ + background-image:none +} +.fm-recents .medium-file-icon.thumb img{ + height:100%; + width:100% +} +.fm-recents .medium-file-icon.thumb.video .video-thumb-details{ + align-items:center; + display:flex; + height:100%; + justify-content:center; + left:0; + padding:0; + top:0; + width:100% +} +.fm-recents .data-block-bg.video .video-thumb-details i{ + margin-top:-1px +} +.fm-recents .medium-file-icon.double{ + left:14px; + top:10px +} +.rtl .fm-recents .medium-file-icon.double{ + left:auto; + right:14px +} +.fm-recents.content-row.group .medium-file-icon{ + top:9px +} +.fm-recents .medium-file-icon .medium-file-icon{ + left:6px; + left:auto; + right:6px; + top:-6px +} +.fm-recents.file-info{ + -webkit-margin-end:130px; + -webkit-margin-start:48px; + margin:0; + margin-inline-end:130px; + margin-inline-start:48px; + padding:5px 0 0 +} +.fm-recents.file-name{ + color:var(--text-color-high); + font:var(--text-body2); + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.fm-recents.file-name span.first-node-name,.fm-recents.file-name span.number-of-files{ + font:var(--text-body1) +} +.fm-recents.file-name span.rest-nodes-counter{ + color:var(--text-color-medium) +} +.fm-recents.file-name .link{ + cursor:pointer +} +.fm-recents.file-name .link:hover{ + text-decoration:underline +} +.fm-recents.breadcrumbs{ + font-size:0; + margin-bottom:6px; + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap +} +.fm-recents.breadcrumbs span{ + color:var(--text-color-low); + display:inline-block; + font:var(--text-body2); + margin-top:3px; + vertical-align:middle +} +.fm-recents.breadcrumbs span.dot-separator{ + color:var(--text-color-high); + margin:0 4px +} +.fm-recents.breadcrumbs span.action-user-name{ + color:var(--text-color-high); + margin-top:0 +} +.fm-recents.breadcrumbs span.link:hover{ + cursor:pointer; + text-decoration:underline +} +.fm-recents.breadcrumbs i{ + -webkit-margin-end:5px; + -webkit-margin-start:-2px; + display:inline-block; + margin:0; + margin-inline-end:5px; + margin-inline-start:-2px; + vertical-align:middle +} +.fm-recents.file-action{ + position:absolute; + right:0; + top:16px +} +.rtl .fm-recents.file-action{ + left:0; + right:auto +} +.fm-recents.iteration{ + -webkit-margin-start:21px; + float:left; + font-size:0; + margin:4px 0 0; + margin-inline-start:21px; + white-space:nowrap +} +.rtl .fm-recents.iteration{ + float:right +} +.fm-recents.iteration:hover+.dark-direct-tooltip{ + display:block +} +.fm-recents i.iteration{ + display:inline-block; + margin:1px 0 0; + vertical-align:top +} +.fm-recents .sprite-fm-mono.icon-download-filled,.fm-recents .sprite-fm-mono.icon-link,.fm-recents .sprite-fm-mono.icon-options{ + float:left; + left:0; + opacity:0; + position:relative; + top:0 +} +.fm-recents .sprite-fm-mono.icon-options{ + margin-right:20px +} +.fm-recents .data-block-view .file-settings-icon{ + bottom:6px; + right:6px +} +.fm-recents .data-block-view .file-settings-icon i{ + --icon-size:22px; + left:2px +} +.fm-recents .data-block-view.linked .icon-link{ + opacity:1 +} +.fm-recents .data-block-indicators .sprite-fm-mono.icon-link{ + margin-right:1px +} +.fm-recents .sprite-fm-mono.icon-download-filled,.fm-recents .sprite-fm-mono.icon-link{ + margin-right:16px +} +.fm-recents.content-row.active .sprite-fm-mono.icon-options,.fm-recents.content-row.active.ui-selected .sprite-fm-mono.icon-options,.fm-recents.content-row.ui-selected .sprite-fm-mono.icon-options,.fm-recents.content-row:hover .sprite-fm-mono.icon-options{ + opacity:1 +} +.fm-recents .transfer-filetype-icon{ + float:left; + position:static +} +.fm-recents .transfer-filetype-icon.inbound-share{ + background-position:-336px -877px +} +.fm-recents.previews-wrapper{ + margin:3px 0 0 -22px +} +.fm-recents.previews-scroll{ + font-size:0; + line-height:0; + overflow:hidden; + white-space:nowrap +} +.fm-recents.previews-scroll.expanded{ + white-space:normal +} +.fm-recents.media.collapsed .previews-wrapper,.fm-recents.media.collapsed .toggle-expanded-state{ + display:none +} +.fm-recents .link-button.toggle-expanded-state{ + background-color:var(--surface-grey-2); + border-radius:24px; + box-sizing:border-box; + color:var(--text-color-high); + float:right; + font:var(--text-body2); + margin-right:8px; + max-width:calc(100% - 70px); + min-height:20px; + overflow:hidden; + padding:2px 6px +} +.fm-recents .link-button.toggle-expanded-state i{ + --icon-size:18px; + display:inline-block; + margin-bottom:1px; + vertical-align:middle +} +.fm-recents .link-button.toggle-expanded-state span{ + vertical-align:middle +} +.fm-recents .link-button.toggle-expanded-state:hover i{ + --mask-color:var(--text-color-high) +} +.fm-recents .link-button.toggle-expanded-state:hover span{ + color:var(--text-color-high) +} +.fm-recents.previews-body{ + -webkit-padding-start:18px; + display:inline-block; + padding-inline-start:18px; + vertical-align:top +} +.fm-recents .data-block-view:not(.hidden){ + display:inline-block; + margin:8px 5px; + padding:0; + vertical-align:top +} +.fm-recents .data-block-bg,.fm-recents .data-block-bg.thumb .block-view-file-type,.fm-recents .data-block-view,.fm-recents .data-block-view .data-block-bg.thumb img{ + height:120px; + width:120px +} +.fm-recents .link-button{ + float:left; + margin:5px 0 9px +} +.fm-recents .link-button:not(.hidden){ + display:inline-flex +} +.fm-recents .dark-direct-tooltip{ + bottom:28px; + right:8px +} +.fm-recents .dark-direct-tooltip i{ + left:auto; + right:58px +} +.fm-recents .dark-direct-tooltip.in-out-tooltip i{ + left:20px +} +.fm-recents .in-out-share-icon:hover+.in-out-tooltip,.fm-recents .in-out-tooltip:hover{ + display:block +} +.fm-recents .dark-direct-tooltip.in-out-tooltip{ + left:-12px; + right:unset +} +.fm-recents.content-row.link-row{ + min-height:0 +} +.fm-recents.link-row .link-button{ + margin:10px 0 9px +} +.fm-recents.group.expanded .rest-nodes-counter{ + display:none +} +.fm-recents .more-less-toggle{ + background-color:var(--stroke-grey-2); + border-radius:12px; + color:var(--text-color-high); + padding:2px 6px +} +.fm-recents.content-row.ui-selected .more-less-toggle{ + background-color:var(--stroke-main) +} +.simpletip-tooltip.recents-file-path span i{ + --icon-size:16px; + --mask-color:var(--stroke-main); + display:inline-block; + height:16px; + margin:0 4px 2px; + position:static; + vertical-align:middle; + width:16px +} +.fm-recents .expand-collapse-toggle{ + cursor:pointer; + display:none; + left:20px; + position:absolute; + top:22px +} +.rtl .fm-recents .expand-collapse-toggle{ + left:auto; + right:20px; + transform:rotate(180deg) +} +.fm-recents.group .expand-collapse-toggle,.fm-recents.media .expand-collapse-toggle{ + display:inline +} +.fm-recents.breadcrumbs .sprite-fm-mono,.fm-recents .expand-collapse-toggle .icon-arrow-right,.fm-recents.file-action .sprite-fm-mono{ + --icon-size:24px; + --mask-color:var(--text-color-medium) +} +.fm-recents.expanded .expand-collapse-toggle{ + transform:rotate(90deg) +} +.fm-recents.content-row.group.collapsed .content:after,.fm-recents.content-row.single .content:after{ + background:var(--surface-grey-2); + bottom:-6px; + content:""; + height:1px; + left:8px; + position:absolute; + right:8px +} +.fm-recents.content-row.single.child-note .content:after{ + display:none +} +.fm-recents.content-row.ui-selected .content,.fm-recents.content-row:hover .content{ + border:1px solid var(--stroke-grey-2); + border-radius:6px; + position:relative +} +.fm-recents.content-row.ui-selected .content{ + border-color:var(--stroke-grey-4) +} +.fm-recents.content-row:hover .content{ + background-color:var(--stroke-grey-3) +} +.fm-recents.content-row.ui-selected .content{ + background-color:var(--stroke-grey-4) +} +.fm-recents.content-row.ui-selected .content:before{ + background-color:var(--secondary-blue); + bottom:4px; + content:""; + left:4px; + position:absolute; + top:4px; + width:2px +} +.rtl .fm-recents.content-row.ui-selected .content:before{ + left:auto; + right:4px +} + +.float-widget.transfer-progress *{ + font-family:var(--text-font-family) +} +.float-widget.transfer-progress{ + height:auto; + margin-bottom:8px; + position:relative; + z-index:110 +} +.banner.transfer,.transfer-progress-widget{ + border-radius:16px; + box-shadow:var(--dialog-shadow); + overflow:hidden; + position:relative +} +.transfer-progress-widget.collapse{ + display:inline-block; + max-width:446px; + min-width:264px +} +.transfer-progress-widget.expand{ + background:var(--surface-main); + width:536px +} +.transfer-progress-txt{ + display:inline-block; + font:var(--text-body1-bold); + margin-left:8px; + overflow:hidden; + padding:5px 0 4px; + text-overflow:ellipsis; + vertical-align:top +} +.transfer-panel-title .transfer-progress-txt,.transfer-progress-txt{ + color:var(--text-color-high) +} +.transfer-progress-type.error .transfer-progress-txt,.transfer-progress-type.overquota .transfer-progress-txt{ + color:var(--secondary-red); + font-family:var(--text-font-family) +} +.transfer-progress-type.error.almost-overquota .transfer-progress-txt{ + color:var(--secondary-orange) +} +.transfer-progress-head{ + background:var(--surface-grey-1); + border-radius:16px 16px 0 0; + display:flex; + font-size:0; + max-width:inherit; + min-width:264px; + position:relative; + width:auto +} +.transfer-progress-widget.expand .transfer-progress-head{ + min-width:536px +} +.transfer-progress-widget.collapse .transfer-progress-head{ + border-radius:8px +} +.transfer-progress-type{ + align-self:flex-start; + display:flex; + margin:10px 0; + overflow:hidden; + white-space:nowrap +} +.transfer-progress-spacing{ + flex-grow:1 +} +.transfer-progress-widget.expand .transfer-progress-type.upload.hidden+.transfer-progress-type.download,.transfer-progress-widget.expand .transfer-progress-type.upload:not(.hidden){ + margin-left:24px +} +.transfer-progress-widget.collapse .transfer-progress-type.upload.hidden+.transfer-progress-type.download,.transfer-progress-widget.collapse .transfer-progress-type.upload:not(.hidden){ + margin-left:16px +} +.transfer-progress-type:first-child{ + margin-right:32px +} +.transfer-progress-type .progress-chart{ + background:var(--surface-progress-background); + border-radius:100%; + display:inline-block; + float:none; + height:28px; + position:relative; + transform:none; + vertical-align:middle; + width:28px +} +.transfer-progress-type .progress-chart .charts{ + border-radius:100%; + height:100%; + overflow:hidden; + position:absolute; + width:100% +} +.transfer-progress-type .progress-chart i{ + left:6px; + position:absolute; + top:6px; + z-index:11 +} +.transfer-progress-type.download .progress-chart i{ + --mask-color:var(--secondary-green) +} +.transfer-progress-type.upload .progress-chart i{ + --mask-color:var(--secondary-blue) +} +.transfer-progress-type.error .progress-chart i,.transfer-progress-type.overquota .progress-chart i{ + --mask-color:var(--stroke-error) +} +.transfer-progress-type .progress-chart:after{ + background:var(--surface-main); + border-radius:100%; + content:""; + display:block; + height:22px; + margin:3px; + padding:0; + position:absolute; + width:22px; + z-index:10 +} +.transfer-progress-head .transfer-progress-type .progress-chart:after{ + background:var(--surface-grey-1) +} +.transfer-progress-type .charts .left-chart,.transfer-progress-type .charts .right-chart{ + clip:rect(0, 50px, 100px, 0); + height:100%; + position:absolute; + width:100% +} +.transfer-progress-type .charts .right-chart.low-percent-clip{ + clip:rect(0, 14px, 28px, 0) +} +.transfer-progress-type .charts .left-chart.low-percent-clip{ + clip:rect(0, 28px, 28px, 14px) +} +.transfer-progress-type .charts span{ + display:block; + height:100%; + position:absolute; + transform:rotate(180deg); + width:100% +} +.transfer-progress-type .charts span:before{ + content:""; + height:100%; + left:0; + position:absolute; + top:0; + width:50% +} +.transfer-progress-type.upload .charts span:before{ + background:var(--secondary-blue) +} +.transfer-progress-type.download .charts span:before{ + background:var(--secondary-green) +} +.transfer-progress-type .charts .left-chart span:before{ + margin-left:50% +} +.transfer-progress-type.error .charts span:after,.transfer-progress-type.error .charts span:before,.transfer-progress-type.overquota .charts span:after,.transfer-progress-type.overquota .charts span:before{ + background:var(--stroke-error) +} +.transfer-panel-title .transfer-progress-type{ + margin:0 16px +} +.status-indicator{ + border-radius:12px; + box-sizing:border-box; + display:inline-block; + height:28px; + position:relative; + vertical-align:top; + width:auto +} +.transfer-progress-type.download .transfer-progress-pct:before,.transfer-progress-type.upload .transfer-progress-pct:before{ + --icon-size:16px; + --mask-color:var(--secondary-white); + display:block; + left:4px; + position:absolute; + top:4px; + z-index:11 +} +.transfer-progress-type .transfer-progress-icon{ + display:none +} +.transfer-progress-type.complete .transfer-progress-icon,.transfer-progress-type.error .transfer-progress-icon,.transfer-progress-type.overquota .transfer-progress-icon{ + display:inline-block; + vertical-align:top +} +.transfer-progress-pct{ + color:var(--text-color-white-high); + display:inline-block; + font:var(--text-body1); + height:auto; + line-height:16px; + padding:4px 8px 4px 20px; + position:relative; + width:auto +} +.transfer-progress-widget .transfer-control-panel{ + align-self:flex-end; + cursor:pointer; + display:flex +} +.transfer-progress-widget.expand .transfer-control-panel{ + margin-right:16px +} +.transfer-progress-widget.collapse .transfer-control-panel{ + margin-left:32px; + margin-right:8px +} +.transfer-control-panel .transfer-progress-icon i{ + --icon-size:24px; + --mask-color:var(--icon-rest) +} +.transfer-control-panel .transfer-progress-icon i:hover{ + --mask-color:var(--icon-active) +} +.transfer-control-panel .transfer-progress-icon{ + display:inline-block; + margin:12px 8px 12px 0; + transition:.2s +} +.transfer-progress-widget.collapse .transfer-progress-icon.collapse,.transfer-progress-widget.expand .transfer-progress-icon.expand{ + display:none +} +.transfer-control-panel .transfer-progress-icon:hover{ + opacity:1 +} +.transfer-progress-tabs-head{ + background:var(--surface-main); + border-bottom:1px solid var(--stroke-grey-2); + line-height:32px +} +.transfer-progress-tabs-head .transfer-tabs-panel{ + padding-left:24px +} +.transfer-progress-tabs-head .tab-lnk{ + background-color:initial; + border:0; + box-sizing:border-box; + color:var(--text-color-high); + cursor:pointer; + font:var(--text-body2-bold); + height:24px; + margin:8px 36px 6px 0; + outline:0; + padding:0; + position:relative +} +.transfer-progress-tabs-head .tab-lnk.active{ + color:var(--text-color-info); + font:var(--text-body1-bold) +} +.transfer-progress-tabs-head .tab-lnk.inactive{ + color:var(--text-color-low); + cursor:default; + font:var(--text-body2) +} +.transfer-progress-widget.collapse .transfer-progress-widget-body{ + display:none +} +.transfer-progress-widget-body{ + background:var(--surface-main); + border-radius:0 0 16px 16px; + overflow:hidden; + padding-bottom:8px; + position:relative; + z-index:40 +} +.transfer-progress.tpw .widget-body-container{ + max-height:248px +} +.transfer-progress.tpw .widget-body-container .y-rail-offset{ + margin-bottom:5px +} +.transfer-task-row{ + align-items:center; + box-sizing:border-box; + display:flex; + height:48px; + padding:12px 16px 12px 44px; + position:relative; + width:100% +} +.transfer-task-row:hover:after{ + background-color:var(--stroke-grey-3); + border:1px solid var(--stroke-grey-2); + border-radius:4px; + content:""; + height:40px; + left:16px; + position:absolute; + top:4px; + width:504px; + z-index:-1 +} +.transfer-task-row:before{ + content:""; + display:block; + height:16px; + left:27px; + position:absolute; + top:16px; + width:16px +} +.transfer-task-row .transfer-filetype-txt{ + color:var(--text-color-high); + display:inline-block; + font:var(--text-body1); + line-height:24px; + margin-left:50px; + margin-top:2px; + max-width:282px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.transfer-task-row.complete .transfer-filetype-txt{ + max-width:282px +} +.transfer-task-row .transfer-file-size{ + color:var(--text-color-low); + display:inline-block; + font:var(--text-body2); + line-height:24px; + margin:0 8px; + padding-left:12px; + padding-top:2px; + position:relative; + vertical-align:top; + white-space:nowrap +} +.transfer-task-row .transfer-file-size:before{ + background-color:var(--stroke-grey-2); + content:""; + display:block; + height:16px; + left:0; + position:absolute; + top:4px; + width:1px +} +.transfer-task-status{ + color:var(--text-color-high); + cursor:pointer; + flex-shrink:0; + font:var(--text-body1); + line-height:24px; + margin-left:auto; + margin-right:8px; + min-height:24px; + min-width:28px; + overflow:hidden; + position:relative; + text-overflow:ellipsis; + white-space:nowrap +} +.transfer-task-row.paused .transfer-task-status i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + display:inline-block; + margin-right:8px; + vertical-align:middle +} +.transfer-task-status span{ + box-sizing:border-box; + display:inline-block; + height:24px; + padding-top:1px; + vertical-align:middle +} +.transfer-task-actions{ + display:none; + z-index:25 +} +.transfer-task-row:hover .transfer-task-actions{ + display:inline-block; + position:absolute; + right:24px; + top:9px +} +.transfer-task-row:hover .transfer-task-status{ + display:none +} +.transfer-task-actions button{ + cursor:pointer; + display:inline-block; + outline:none; + position:relative +} +.transfer-task-actions i{ + --mask-color:var(--icon-rest) +} +.transfer-task-actions i:hover{ + --mask-color:var(--icon-active) +} +.transfer-progress-bar,.transfer-progress-bar-pct{ + background:var(--surface-progress-background); + border-radius:1.5px; + bottom:0; + display:block; + height:2px; + left:24px; + position:absolute; + width:488px; + z-index:8 +} +.transfer-task-row.upload .transfer-progress-bar-pct{ + background:var(--secondary-blue); + left:0; + width:200px; + z-index:9 +} +.transfer-task-row.download .transfer-progress-bar-pct{ + background:var(--secondary-green); + left:0; + width:200px; + z-index:9 +} +.transfer-task-row.complete .transfer-task-status{ + color:var(--stroke-success); + padding-top:2px +} +.transfer-complete-actions{ + display:none; + position:absolute; + right:48px; + z-index:25 +} +.transfer-task-row:hover .transfer-complete-actions{ + display:inline-block +} +.transfer-complete-actions button{ + cursor:pointer; + display:inline-block; + margin-right:8px; + outline:none; + position:relative +} +.transfer-complete-actions i{ + --mask-color:var(--icon-rest) +} +.transfer-complete-actions i:hover{ + --mask-color:var(--icon-active) +} +.transfer-task-row.complete .transfer-progress-bar{ + display:none +} +.transfer-task-row.error .transfer-progress-bar-pct,.transfer-task-row.overquota .transfer-progress-bar-pct{ + background-color:var(--secondary-red); + left:0; + width:200px; + z-index:9 +} +.transfer-task-row.error .transfer-task-status,.transfer-task-row.overquota .transfer-task-status{ + color:var(--secondary-red) +} +.transfer-task-row .transfer-task-status+i{ + display:none +} +.transfer-task-row.inqueue .transfer-task-status+i{ + --icon-size:22px; + animation:rotate 1s linear infinite; + animation-timing-function:steps(8); + display:block; + margin:4px 12px 0 0; + opacity:.6 +} +.transfer-task-row.paused .transfer-task-status:before{ + background-position:-2px -37px; + display:block +} +.transfer-progress-icon.collapse{ + height:auto +} +.transfer-progress-icon.wait{ + background-position:-195px -342px +} +.transfer-progress-icon.complete{ + background-position:-160px -1697px; + display:block +} +.btn-icon.transfer-progress-btn:hover:after{ + background:var(--button-hover); + border-radius:4px; + content:""; + height:24px; + left:0; + position:absolute; + right:0; + width:24px; + z-index:-1 +} +button.btn-icon .transfer-progress-icon{ + --icon-size:24px; + display:inline-block +} +.transfer-progress-type.upload .status-indicator:before{ + background-position:-8px -1804px +} +.transfer-task-row.download:before{ + --mask-color:var(--secondary-green); + margin-right:12px +} +.transfer-task-row.upload:before{ + --mask-color:var(--secondary-blue); + margin-right:15px +} +.transfer-task-row .transfer-filetype-icon{ + margin:0 12px +} +.transfer-task-row.complete .transfer-task-status:before{ + background-position:-160px -1696px; + display:block +} +.transfer-task-row.error .transfer-task-status:before,.transfer-task-row.overquota .transfer-task-status:before{ + background-position:-159px -1804px; + display:block +} +.transfer-widget-footer{ + background-color:var(--stroke-grey-2); + height:24px; + padding:6px 0; + width:100% +} +.transfer-widget-footer button{ + --height:24px; + height:24px +} +.transfer-widget-footer .transfer-clear-all-icon{ + margin-left:8px; + margin-right:18px +} +.transfer-widget-footer button i{ + --mask-color:var(--icon-rest) +} +.transfer-widget-footer button:hover i{ + --mask-color:var(--icon-active) +} +.transfer-progress-widget.collapse .transfer-section-button{ + display:none +} +.float-widget.transfer-progress .banner{ + background-color:var(--stroke-main); + box-sizing:border-box; + margin-bottom:4px; + max-width:536px; + min-width:148px; + overflow:hidden; + padding:24px; + width:100% +} +.float-widget.transfer-progress .banner .close-over{ + cursor:pointer; + height:24px; + position:absolute; + right:16px; + top:16px; + transition:.2s; + width:24px; + z-index:19 +} +.float-widget.transfer-progress .banner .close-over:hover{ + opacity:.8 +} +.float-widget.transfer-progress .banner .close-over .sprite-fm-mono{ + --mask-color:var(--icon-rest); + --icon-size:24px; + height:24px; + width:24px +} +.left-section.circle-dashboard{ + background:var(--surface-progress-background); + border-radius:100%; + box-sizing:border-box; + display:inline-block; + height:64px; + margin:12px 40px 0 16px; + position:relative; + text-align:center; + vertical-align:top; + width:64px +} +.quota-info-pct-txt{ + font:var(--text-h3-bold); + margin-top:20px; + position:relative; + z-index:11 +} +.float-widget.transfer-progress .banner.almost-overquota .quota-info-pct-txt,.float-widget.transfer-progress .banner.almost-overquota .quota-info-pr-txt .quota-info-pr-txt-used{ + color:var(--secondary-orange) +} +.float-widget.transfer-progress .banner.overquota .quota-info-pct-txt,.float-widget.transfer-progress .banner.overquota .quota-info-pr-txt .quota-info-pr-txt-used{ + color:var(--secondary-red) +} +.quota-info-pr-txt{ + color:var(--text-color-high); + font:var(--text-body2); + margin:-24px -16px 0; + position:relative +} +.quota-info-pr-txt .quota-info-pr-txt-used{ + font:var(--text-body1) +} +.quota-info-pr-txt.small-font{ + color:var(--text-color-medium) +} +.quota-info-pr-txt.small-font .quota-info-pr-txt-used{ + font:var(--text-body1) +} +.right-section.upgrade-block{ + display:inline-block; + width:calc(100% - 136px) +} +.right-section.upgrade-block .head-title{ + color:var(--text-color-high); + font:var(--text-h3-bold); + left:0; + padding:0; + top:0 +} +.right-section.upgrade-block .head-title span.pct-used{ + color:var(--text-color-error); + font:var(--text-h1-bold) +} +.almost-overquota .right-section.upgrade-block .head-title span.pct-used{ + color:var(--text-color-warning) +} +.right-section.upgrade-block .head-title:hover{ + background-color:initial +} +.right-section.upgrade-block .head-title:before{ + display:none +} +.right-section.upgrade-block .content-txt{ + color:var(--text-color-medium); + padding-top:4px +} +.right-section.upgrade-block button{ + display:inline-block; + margin-top:16px; + z-index:14 +} +.quota-info-pct-circle li,.quota-info-pct-circle p,.quota-info-pct-circle span,.quota-info-pct-circle ul{ + height:64px; + list-style-type:none; + margin:0; + padding:0; + width:64px +} +.quota-info-pct-circle .overlay{ + background-color:var(--stroke-main); + border-radius:100%; + display:block; + height:54px; + left:5px; + position:absolute; + top:5px; + width:54px; + z-index:10 +} +.affiliate .quota-info-pct-circle li,.blog-new-full .quota-info-pct-circle ul li,.pro .quota-info-pct-circle li:not(.no-red-dot),.quota-info-pct-circle ul li,.sync .quota-info-pct-circle li{ + background:none; + left:0; + padding:0; + position:absolute; + top:0 +} +.quota-info-pct-circle ul .right-c{ + clip:rect(0, 64px, 64px, 32px) +} +.quota-info-pct-circle ul .left-c{ + clip:rect(0, 32px, 64px, 0) +} +.quota-info-pct-circle ul .left-c p{ + transform:rotate(-180deg) +} +.quota-info-pct-circle ul .right-c p{ + transform:rotate(-30deg) +} +.quota-info-pct-circle ul li span{ + display:block; + height:64px; + width:32px +} +.quota-info-pct-circle ul li.right-c span{ + border-bottom-left-radius:32px; + border-top-left-radius:32px +} +.quota-info-pct-circle ul li.left-c span{ + border-bottom-right-radius:32px; + border-top-right-radius:32px; + margin-left:32px +} +.float-widget.transfer-progress .banner.almost-overquota .quota-info-pct-circle ul span{ + background-color:var(--secondary-orange) +} +.float-widget.transfer-progress .banner.overquota .quota-info-pct-circle ul span{ + background-color:var(--secondary-red) +} +.float-widget.transfer-progress .transfer-task-row hr{ + display:none +} +.float-widget.transfer-progress .transfer-task-row.complete hr{ + background:var(--surface-grey-2); + border:none; + bottom:-8px; + display:block; + height:1px; + position:absolute; + right:24px; + width:488px +} +.float-widget.transfer-progress .btn-icon{ + background:none; + border:none; + cursor:pointer; + outline:none; + padding:0 +} + +.lp-header{ + align-items:center; + display:flex; + padding:14px 20px 14px 12px +} +.lp-header span{ + color:var(--text-color-higher); + flex:1 1 auto; + font:var(--text-h2); + overflow:hidden; + padding:3px 0; + text-overflow:ellipsis +} +.lp-content-wrap{ + padding:0 8px +} +.lp-gallery,.lp-myfiles{ + background:var(--surface-grey-2); + display:flex; + flex-direction:column; + height:100%; + overflow:hidden +} +.fm-left-panel .content-area{ + border-top:2px solid transparent; + box-sizing:border-box; + flex-grow:1; + overflow:hidden; + position:relative; + transition:border-top .25s ease-in-out +} +.rtl .lp-myfiles .content-area{ + direction:ltr +} +.rtl .lp-myfiles .content-area .lp-content-wrap{ + direction:rtl +} +.lp-myfiles .content-area.ps--active-y:hover{ + border-top:2px solid var(--stroke-main) +} +.fm-other-tree-panel .section-title{ + display:none +} +.active-folder-link .section-title,.lp-gallery .section-title,.lp-myfiles .section-title{ + color:var(--text-color-medium); + display:inline-block; + font:var(--text-body2); + height:18px; + letter-spacing:0; + margin:0 4px 4px; + opacity:.7 +} +.lp-gallery .library-panel,.lp-myfiles .cloud-drive-panel{ + padding-top:4px +} +.active-folder-link .lp-content-wrap{ + padding-top:6px +} +.lp-myfiles .cloud-drive-panel{ + box-sizing:border-box; + display:inline-block; + min-width:100% +} +.lp-myfiles .ps--active-y .cloud-drive-panel{ + -webkit-padding-end:16px; + padding-inline-end:16px +} +.lp-myfiles .content-panel.cloud-drive.collapse{ + display:none +} +.lp-myfiles .btn-myfiles{ + -webkit-padding-start:24px; + padding-inline-start:24px +} +.lp-myfiles .btn-myfiles i.icon-dropdown{ + left:2px; + margin-top:4px; + position:absolute +} +.rtl .lp-myfiles .btn-myfiles i.icon-dropdown{ + left:auto; + right:2px +} +.lp-myfiles .btn-myfiles.collapse i.icon-dropdown{ + transform:rotate(270deg) +} +.rtl .lp-myfiles .btn-myfiles.collapse i.icon-dropdown{ + transform:rotate(90deg) +} +.lp-myfiles .shared-panel{ + padding-bottom:16px; + padding-top:8px +} +.lp-storage-usage .storage-usage-panel{ + border-top:2px solid var(--stroke-main); + display:flex; + flex-direction:column; + padding:12px +} +.lp-storage-usage .storage-usage-panel.hidden{ + display:none +} +.lp-storage-usage .storage-usage-panel .title-block{ + display:flex; + justify-content:space-between; + margin-bottom:6px +} +.lp-storage-usage .storage-usage-panel .title-block .plan{ + color:var(--stroke-main-inverted); + font:var(--text-body2); + line-height:18px; + margin-right:16px; + white-space:nowrap +} +.lp-storage-usage .storage-usage-panel .storage-graph{ + background-color:rgba(0, 0, 0, .2); + border-radius:8px; + height:6px; + margin-bottom:8px; + overflow:hidden; + position:relative +} +.lp-storage-usage .storage-usage-panel .storage-graph span{ + background:var(--surface-dark-grey); + border-radius:8px 0 0 8px; + height:6px; + position:absolute +} +.lp-storage-usage .storage-usage-panel.warning .storage-graph span{ + background:var(--secondary-orange) +} +.lp-storage-usage .storage-usage-panel.over .storage-graph span{ + background:var(--secondary-red) +} +.storage-usage-panel .info{ + font:var(--text-body2); + position:relative +} +.storage-usage-panel .loader.loading{ + animation:rotate 2.5s linear infinite; + opacity:1 +} +.storage-usage-panel .loader{ + background-position:-6px -350px; + height:12px; + opacity:0; + position:absolute; + width:12px +} +.storage-usage-panel .storage-txt{ + color:var(--stroke-main-inverted) +} +.storage-usage-panel .loader.loading+.storage-txt{ + visibility:hidden +} +.storage-usage-panel .storage-txt .lp-sq-used{ + color:var(--text-color-success) +} +.storage-usage-panel.warning .storage-txt .lp-sq-used{ + color:var(--text-color-warning) +} +.storage-usage-panel.over .storage-txt .lp-sq-used{ + color:var(--text-color-error) +} +.fm-tree-panel li{ + margin:1px 0 +} +.nw-fm-tree-item.selected{ + background-color:var(--stroke-grey-1); + border-radius:4px; + color:var(--stroke-main-inverted) +} +.nw-fm-tree-item.hovered,.nw-fm-tree-item:hover{ + background-color:var(--stroke-grey-1); + border-radius:4px; + cursor:pointer +} +.nw-fm-tree-item.dragover .nw-fm-tree-folder,.nw-fm-tree-item:hover .nw-fm-tree-folder{ + color:var(--stroke-link-inverted) +} +.nw-fm-tree-item.selected .nw-fm-tree-arrow,.nw-fm-tree-item.selected .nw-fm-tree-folder{ + --mask-color:var(--stroke-main-inverted); + color:var(--stroke-main-inverted) +} +.nw-fm-tree-item .sprite-fm-mono{ + --mask-color:var(--icon-rest) +} +.nw-fm-tree-item .nw-fm-tree-arrow{ + --mask-color:var(--icon-rest); + -webkit-margin-start:24px; + display:none; + margin-inline-start:24px; + position:absolute; + top:8px +} +.nw-fm-tree-item.contains-folders .nw-fm-tree-arrow{ + display:block +} +.nw-fm-tree-item.contains-folders.expanded .nw-fm-tree-arrow{ + background-image:none; + transform:rotate(90deg) +} +.rtl .nw-fm-tree-item.contains-folders.expanded .nw-fm-tree-arrow{ + transform:rotate(270deg) +} +.fontsize1 .nw-fm-tree-folder{ + font:var(--text-body1); + line-height:24px +} +.nw-fm-tree-item .file-status-ico{ + display:none +} +.tree-item-dragger{ + display:flex +} +.tree-item-dragger .nw-fm-tree-folder{ + margin:0; + width:auto +} +.tree-item-dragger span.sprite-fm-mono{ + background-color:var(--stroke-grey-2) +} +.tree-item-dragger span.item-name{ + -webkit-margin-start:5px; + line-height:24px; + margin-inline-start:5px; + max-width:160px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.nw-fm-tree-item.linked .file-status-ico{ + --mask-color:var(--icon-rest); + display:inline-block; + vertical-align:middle; + z-index:98 +} +.nw-fm-tree-item .gallery-status-icon{ + --mask-color:var(--secondary-blue); + --icon-size:24px; + display:none; + vertical-align:middle; + z-index:98 +} +.nw-fm-tree-item.on-gallery .gallery-status-icon{ + display:inline-block; + vertical-align:middle +} +.nw-fm-tree-item.linked.on-gallery .gallery-status-icon{ + right:43px +} +.rtl .nw-fm-tree-item.linked .file-status-ico,.rtl .nw-fm-tree-item.on-gallery .gallery-status-icon{ + left:21px; + right:auto +} +.rtl .nw-fm-tree-item.linked.on-gallery .gallery-status-icon{ + left:26px +} +.nw-fm-tree-item .sprite-fm-mono.icon-takedown{ + background-color:var(--secondary-red); + display:inline; + position:absolute; + right:21px; + z-index:98 +} +.rtl .nw-fm-tree-item .sprite-fm-mono.icon-takedown{ + left:21px; + right:auto +} +.nw-fm-tree-item .sprite-fm-mono.icon-info{ + background-color:var(--secondary-orange); + display:inline; + position:absolute; + right:21px; + top:4px; + z-index:98 +} +.nw-fm-tree-folder{ + width:100% +} +.active-folder-link .nw-fm-tree-iconwrap,.lp-myfiles .nw-fm-tree-iconwrap{ + background:var(--surface-tree-iconwrap); + display:inline-block; + padding:0 16px 0 4px; + position:sticky; + position:-webkit-sticky; + right:-1px; + vertical-align:middle +} +.active-folder-link .fm-other-tree-panel .nw-fm-tree-item.hovered .nw-fm-tree-iconwrap,.active-folder-link .fm-other-tree-panel .nw-fm-tree-item.selected .nw-fm-tree-iconwrap,.active-folder-link .fm-other-tree-panel .nw-fm-tree-item:hover .nw-fm-tree-iconwrap,.lp-myfiles .nw-fm-tree-item.hovered .nw-fm-tree-iconwrap,.lp-myfiles .nw-fm-tree-item.selected .nw-fm-tree-iconwrap,.lp-myfiles .nw-fm-tree-item:hover .nw-fm-tree-iconwrap{ + background:var(--surface-tree-iconwrap-active) +} +.active-folder-link .fm-other-tree-panel .cloud-drive .lp-header{ + background:var(--surface-grey-2); + position:sticky; + position:-webkit-sticky; + top:0; + z-index:100 +} +.active-folder-link .fm-other-tree-panel .cloud-drive .lp-header>span{ + flex-grow:0; + left:12px; + position:sticky; + position:-webkit-sticky +} +.rtl .active-folder-link .fm-other-tree-panel .cloud-drive .lp-header>span{ + left:auto; + right:12px +} +.active-folder-link .fm-other-tree-panel .content-panel.active.cloud-drive{ + display:inline-block; + min-width:100% +} +.file-status-ico:before,.nw-fm-tree-arrow:before,.nw-fm-tree-folder:before{ + -webkit-font-smoothing:antialiased; + -moz-osx-font-smoothing:grayscale; + --icon-size:24px; + color:var(--mask-color); + display:inline-block; + font-family:fm-mono !important; + font-size:24px; + font-style:normal; + font-variant:normal; + line-height:1; + text-rendering:auto; + vertical-align:top +} +.nw-fm-tree-folder:before{ + left:0; + position:absolute +} +.rtl .nw-fm-tree-folder:before{ + left:auto; + right:0 +} +.nw-fm-tree-arrow,.nw-fm-tree-arrow:before{ + height:16px; + width:16px +} +.nw-fm-tree-arrow:before{ + font-size:16px +} +.rtl .nw-fm-tree-arrow:before{ + transform:rotate(180deg) +} + +.meetings-call{ + height:100%; + left:0; + position:fixed; + top:0; + width:100%; + z-index:120 +} +.meetings-call.minimized{ + display:none +} +.meetings-call .stream{ + background:#222; + float:left; + height:100%; + position:relative; + width:calc(100% - 300px) +} +.meetings-call .stream-wrapper{ + display:grid; + height:calc(100% - 160px); + padding-bottom:96px; + padding-top:64px; + position:relative; + width:100% +} +.meetings-call .stream.full{ + width:100% +} +.meetings-call .stream.hovered .stream-controls{ + bottom:0 +} +.meetings-call .stream.hovered .sidebar-controls{ + right:24px +} +.meetings-call .stream.hovered .stream-head,.meetings-call .stream .stream-head.active{ + top:0 +} +.meetings-call .stream .stream-controls{ + align-items:center; + bottom:-250px; + display:flex; + justify-content:center; + padding:0 0 24px; + position:absolute; + text-align:center; + transition:opacity .5s ease-in-out,bottom .5s ease-in-out; + width:100%; + z-index:11 +} +.overlayed .meetings-call .stream .stream-controls{ + bottom:0 +} +.meetings-call .stream .stream-controls ul{ + display:block; + height:100%; + list-style:none; + margin:0; + padding:0 +} +.meetings-call .stream .stream-controls ul li{ + display:inline-block; + padding:0 11px; + position:relative +} +.meetings-call .stream .stream-controls ul li button{ + cursor:pointer +} +.meetings-call .stream .stream-controls ul li button.end-call{ + color:var(--text-color-high) +} +.meetings-call .stream .stream-controls ul li button.end-call i{ + --mask-color:var(--secondary-white) +} +.meetings-call .stream .stream-controls ul li button i{ + --icon-size:32px; + --mask-color:var(--icon-active); + display:block; + margin:0 auto +} +.meetings-call .stream .stream-controls ul li button span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.meetings-call .stream .stream-controls .stream-debug button{ + float:left; + margin:0 5px 0 0 +} +.meetings-call .stream .stream-controls .stream-debug button i{ + --icon-size:20px; + --mask-color:var(--secondary-white) +} +.meetings-call .stream .stream-controls .stream-debug button span{ + text-indent:-9999px +} +.meetings-call .stream .stream-controls .end-options{ + left:50%; + position:absolute; + transform:translate(-50%, -100%) +} +.meetings-call .stream .stream-controls .end-options-content{ + background:var(--surface-main); + border-radius:24px; + box-sizing:border-box; + margin:0 0 13px; + min-height:130px; + min-width:205px; + padding:24px +} +.meetings-call .stream .stream-controls .end-options-content button{ + display:block; + margin:0 auto 8px; + min-width:150px +} +.meetings-call .stream .stream-controls .end-options-content button:last-child{ + margin-bottom:0 +} +.meetings-call .stream .stream-controls .end-options-content button span{ + bottom:auto; + position:relative; + visibility:visible +} +.meetings-call .stream .sidebar-controls{ + bottom:182px; + height:120px; + position:absolute; + right:-250px; + transition:opacity .5s ease-in-out,right .5s ease-in-out; + width:50px; + z-index:11 +} +.meetings-call .stream .sidebar-controls ul{ + list-style:none; + margin:0; + padding:0 +} +.meetings-call .stream .sidebar-controls ul li{ + margin:0 0 20px; + position:relative +} +.meetings-call .stream .sidebar-controls ul li button{ + color:var(--text-color-high) +} +.meetings-call .stream .sidebar-controls ul li button.selected,.meetings-call .stream .sidebar-controls ul li button.selected:hover{ + background:#9be5f7; + background:linear-gradient(90deg, #9be5f7, #4fc0ee) +} +.meetings-call .stream .sidebar-controls ul li button i{ + --icon-size:32px; + --mask-color:var(--secondary-white); + margin:0 auto +} +.meetings-call .stream .sidebar-controls ul li button span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.meetings-call .stream .sidebar-controls ul span{ + border-radius:200px; + font:var(--text-body1); + height:19px; + position:absolute; + text-align:center; + width:19px +} +.meetings-call .stream .sidebar-controls ul span.notifications-count{ + background:var(--surface-error); + color:var(--secondary-white); + right:-1px; + top:-2px +} +.meetings-call .stream .sidebar-controls ul span.participants-count{ + background:var(--secondary-white); + bottom:-4px; + color:var(--text-color-black-high); + line-height:21px; + right:-3px +} +.meetings-call .stream .participants-notice{ + backdrop-filter:blur(10px); + margin:0 auto; + max-width:600px; + min-width:460px; + width:fit-content +} +.meetings-call .stream .participants-notice.user-alone{ + margin-top:-140px +} +.meetings-call .stream .participants-notice.user-alone .notice-footer{ + display:flex; + justify-content:flex-end; + margin-top:24px; + width:100% +} +.meetings-call .stream .participants-notice.user-alone .notice-footer button{ + -webkit-margin-start:10px; + margin-inline-start:10px +} +.meetings-call .stream .participants-notice-heading{ + background:var(--surface-highlight-1); + border-radius:34px; + padding:12px 48px; + text-align:center +} +.meetings-call .stream .participants-notice-heading h1,.meetings-call .stream .participants-notice-heading h3{ + color:var(--secondary-white); + margin:0 +} +.meetings-call .stream .participants-notice-heading.user-alone{ + box-sizing:border-box; + margin:0 auto; + width:478px +} +.meetings-call .stream .participants-notice-content{ + background:var(--surface-highlight-1); + border-radius:34px; + box-sizing:border-box; + margin:12px auto 0; + padding:22px 62px; + text-align:center; + width:460px +} +.meetings-call .stream .participants-notice-content h3{ + color:var(--secondary-white) +} +.meetings-call .stream .participants-notice-content .mega-input{ + margin:0 0 16px +} +.meetings-call .stream .participants-notice-content .peers-invite{ + margin:40px 0 0 +} +.meetings-call .stream .participants-notice-content .peers-invite hr{ + border:0; + border-top:1px solid #444 +} +.meetings-call .stream .participants-notice-content.user-alone{ + margin-top:32px; + padding:24px; + width:478px +} +.meetings-call .stream .participants-notice-content.user-alone h3{ + margin:0 0 12px +} +.meetings-call .stream .participants-notice-content.user-alone p{ + color:var(--text-color-medium); + text-align:start +} +.meetings-call .stream .participants-notice-content.user-alone div.stay-dlg-subtext{ + color:var(--text-color-low); + font:var(--text-body2); + margin-top:12px +} +.meetings-call .stream-container{ + margin:auto +} +.meetings-call .stream .with-notice{ + left:50%; + position:absolute; + top:50%; + transform:translate(-50%, -50%); + z-index:11 +} +.meetings-call .stream .alert{ + background:#07bfa5; + border-radius:4px; + bottom:10px; + color:#fff; + left:10px; + padding:10px; + position:absolute +} +.meetings-call .stream .alert-content{ + float:left +} +.meetings-call .stream .alert-content span{ + display:block; + float:left; + padding:0 4px 0 0 +} +.meetings-call .stream .alert-content span:first-child{ + font-weight:700 +} +.meetings-call .stream .alert-control{ + border-left:1px solid #fff; + float:left; + margin:0 0 0 20px; + padding:0 0 0 10px +} +.meetings-call .stream .alert button{ + background:#fff; + border:0; + border-radius:200px; + cursor:pointer; + height:15px; + padding:0; + text-indent:-9999px; + width:15px +} +.meetings-call .stream .stream-on-hold{ + color:var(--secondary-white); + cursor:pointer; + font:var(--text-h2); + left:50%; + position:absolute; + text-align:center; + top:50%; + transform:translate(-50%, -50%) +} +.meetings-call .stream .stream-on-hold i{ + --icon-size:80px; + --mask-color:var(--surface-grey-1); + display:block; + margin:0 auto +} +.meetings-call .stream .stream-on-hold span{ + color:var(--secondary-white); + font:var(--text-h3) +} +.meetings-call .stream .call-overlay{ + background:rgba(0, 0, 0, .32); + height:100%; + left:0; + position:absolute; + top:0; + width:100%; + z-index:10 +} +.meetings-call .stream .on-hold-overlay{ + background:rgba(0, 0, 0, .7); + height:100%; + left:0; + position:absolute; + top:0; + width:100%; + z-index:10 +} +.meetings-call .carousel{ + height:100%; + width:100% +} +.meetings-call .carousel-container{ + height:100%; + transform-style:preserve-3d; + width:100% +} +.meetings-call .carousel-container .carousel-page{ + display:none; + height:100%; + margin:auto; + position:absolute; + top:0; + transition:transform .5s,opacity .8s,z-index .5s; + width:100% +} +.meetings-call .carousel-container .carousel-page.active{ + display:block; + position:relative; + z-index:900 +} +.meetings-call .carousel-button-next,.meetings-call .carousel-button-prev{ + background:rgba(0, 0, 0, .4); + border:0; + border-radius:200px; + cursor:pointer; + height:96px; + opacity:.6; + position:absolute; + top:50%; + transform:translateY(-50%); + transition:opacity .5s ease-in-out; + width:96px; + z-index:1 +} +.meetings-call .carousel-button-next:hover,.meetings-call .carousel-button-prev:hover{ + opacity:1 +} +.meetings-call .carousel-button-next:hover div,.meetings-call .carousel-button-prev:hover div{ + display:block +} +@media only screen and (max-height:760px){ +.meetings-call .carousel-button-next,.meetings-call .carousel-button-prev{ + bottom:322px; + height:56px; + top:auto; + transform:none; + width:56px +} +} +.meetings-call .carousel-button-next i,.meetings-call .carousel-button-prev i{ + --icon-size:48px; + --mask-color:var(--icon-rest); + display:block; + margin:0 auto +} +@media only screen and (max-height:760px){ +.meetings-call .carousel-button-next i,.meetings-call .carousel-button-prev i{ + --icon-size:28px +} +} +.meetings-call .carousel-button-next span,.meetings-call .carousel-button-prev span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.meetings-call .carousel-button-next div,.meetings-call .carousel-button-prev div{ + background-color:rgba(0, 0, 0, .4); + border-radius:4px; + bottom:-30px; + color:var(--secondary-white); + display:none; + font:var(--text-body2); + left:50%; + padding:3px 6px; + position:absolute; + transform:translateX(-50%) +} +@media only screen and (max-height:760px){ +.meetings-call .carousel-button-next div,.meetings-call .carousel-button-prev div{ + bottom:auto; + top:-32px +} +} +.meetings-call .carousel-button-prev{ + left:8px +} +.meetings-call .carousel-button-next{ + right:8px +} +@media only screen and (max-height:760px){ +.meetings-call .carousel-button-next{ + right:21px +} +} +.meetings-call .sidebar{ + background:var(--surface-main); + box-sizing:border-box; + float:left; + height:100%; + position:relative; + width:300px; + z-index:12 +} +.meetings-call .sidebar .collapse{ + height:100% +} +.meetings-call .sidebar .collapse-head{ + border-bottom:1px solid var(--stroke-grey-2); + cursor:pointer; + margin:0 15px; + overflow:hidden +} +.meetings-call .sidebar .collapse-head i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + display:block; + float:left; + margin:-1px 3px 0 0 +} +.meetings-call .sidebar .collapse-head h5{ + color:var(--text-color-high); + display:block; + float:left; + font:var(--text-body1-bold); + margin:0 +} +.meetings-call .sidebar .collapse-head .participants-count{ + background:var(--secondary-blue); + border-radius:4px; + color:var(--secondary-white); + display:block; + float:left; + font:var(--text-body2); + height:15px; + line-height:16px; + margin:3px 0 0 10px; + text-align:center; + width:15px +} +.meetings-call .sidebar .collapse ul{ + list-style:none; + margin:0; + padding:0 +} +.meetings-call .sidebar .collapse ul li{ + border-bottom:1px solid var(--stroke-grey-2); + padding:8px 0 +} +.meetings-call .sidebar .participants{ + color:var(--text-color-high); + height:calc(100% - 70px) +} +.meetings-call .sidebar .participants-list{ + height:calc(100% - 30px) +} +.meetings-call .sidebar .participants-list.guest{ + height:calc(100% - 320px); + overflow:hidden +} +.meetings-call .sidebar .participants ul{ + display:block; + height:100% +} +.meetings-call .sidebar .participants ul li{ + margin:0 15px; + overflow:hidden +} +.meetings-call .sidebar .participants ul li .avatar-wrapper{ + border-radius:4px; + height:24px; + margin:7px 0 0; + width:24px +} +.meetings-call .sidebar .participants ul li .avatar-wrapper span{ + font:var(--text-body2); + left:50%; + position:absolute; + top:50%; + transform:translate(-50%, -50%) +} +.meetings-call .sidebar .participants ul li .avatar-wrapper img{ + height:24px; + width:24px +} +.meetings-call .sidebar .participants ul li .name{ + float:left; + overflow:hidden; + padding:9px 0 0 10px; + width:calc(100% - 100px) +} +.meetings-call .sidebar .participants ul li .name span{ + display:block; + float:left +} +.meetings-call .sidebar .participants ul li .name span:first-child{ + font:var(--text-body1); + max-width:120px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.meetings-call .sidebar .participants ul li .name span i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + display:block; + margin:-3px 0 0 +} +.meetings-call .sidebar .participants ul li .name span img.emoji.big{ + height:20px; + margin:0; + width:20px +} +.meetings-call .sidebar .participants ul li .status{ + float:right; + margin:5px 0 0 +} +.meetings-call .sidebar .participants ul li .status i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + display:inline-block; + margin:0 0 0 3px +} +.meetings-call .sidebar .participants ul li .status i.inactive{ + --mask-color:var(--secondary-red) +} +.meetings-call .sidebar .participants .add-participants{ + margin:20px 0 0; + text-align:center +} +.meetings-call .sidebar .participants .add-participants button{ + margin:0 auto +} +.meetings-call .sidebar .guest-register{ + background:#444; + bottom:0; + height:300px; + left:0; + position:absolute; + width:100% +} +.meetings-call .sidebar .guest-register-content{ + box-sizing:border-box; + color:var(--text-color-high); + font:var(--text-body1); + height:100%; + padding:20px; + text-align:center +} +.meetings-call .sidebar .guest-register-content i{ + margin:0 auto 10px +} +.meetings-call .sidebar .guest-register-content i.registration{ + height:60px; + width:190px +} +.meetings-call .sidebar .guest-register-content button.close-guest-register{ + background:transparent; + border:0; + cursor:pointer; + position:absolute; + right:0; + top:5px +} +.meetings-call .sidebar .guest-register-content button.close-guest-register span{ + display:none +} +.meetings-call .sidebar .guest-register-content button.close-guest-register i{ + --icon-size:24px; + --mask-color:var(--icon-rest) +} +.meetings-call .sidebar .guest-register-content button.register-button{ + margin:20px 0 0 +} +.meetings-call .sidebar.chat-opened{ + z-index:120 +} +.meetings-call .sidebar.chat-opened .sidebar-head{ + background:var(--surface-main); + left:0; + position:absolute; + top:0; + width:100%; + z-index:2 +} +.meetings-call .sidebar.chat-opened .in-call .message.body{ + padding:3px 15px 0 10px +} +.meetings-call .sidebar.chat-opened .in-call .shared-link.thumb{ + max-width:100% +} +.meetings-call .sidebar.chat-opened .in-call .message.richpreview.container{ + width:100% +} +.meetings-call .sidebar.chat-opened .in-call .message.richpreview.container .img-wrapper{ + display:block; + margin:0 auto +} +.meetings-call .sidebar.chat-opened .in-call .message.richpreview.container .img-wrapper .preview-confirmation{ + margin:0 +} +.meetings-call .sidebar.chat-opened .in-call .message.richpreview.container .img-wrapper .preview{ + margin:17px 0 9px +} +.meetings-call .sidebar.chat-opened .in-call .message.richpreview.container .inner-wrapper{ + display:block; + margin:6px 0 0; + padding:0; + width:100% +} +.meetings-call .sidebar.chat-opened .in-call .message.richpreview.container .buttons-block{ + float:left; + margin:8px 0; + padding:0 +} +.meetings-call .sidebar.chat-opened .in-call .message.richpreview.container .buttons-block button{ + float:left; + margin:8px 8px 0 0 +} +.meetings-call .sidebar.chat-opened .in-call .reactions-bar{ + flex-wrap:wrap +} +.meetings-call .sidebar.chat-opened .in-call .geolocation-container{ + padding:0 27px 0 0 +} +.meetings-call .sidebar.chat-opened .in-call .geolocation-container .geolocation{ + height:auto; + width:100% +} +.meetings-call .sidebar.chat-opened .in-call .geolocation-container .geolocation__details{ + padding:4px +} +.meetings-call .sidebar.chat-opened .in-call .geolocation-container .geolocation__details .geolocation__icon{ + margin:0; + width:100% +} +.meetings-call .sidebar.chat-opened .in-call .geolocation-container .geolocation__details ul.geolocation__data-list{ + display:block; + left:auto; + margin:5px 0 4px 5px; + padding:0; + position:relative; + top:auto; + transform:none +} +.meetings-call .sidebar.chat-opened .in-call .geolocation-container .geolocation__details ul.geolocation__data-list li{ + margin:0 +} +.meetings-call .sidebar.chat-opened .chat-textarea-block{ + bottom:10px; + min-height:48px +} +.meetings-call .sidebar.chat-opened .chat-textarea-block .gif-panel-wrapper{ + bottom:60px; + left:auto; + position:fixed; + right:-10px; + width:600px; + z-index:130 +} +.meetings-call .sidebar.chat-opened .chat-textarea-block .chat-textarea{ + margin:0 8px +} +.meetings-call .sidebar.chat-opened .giphy-block{ + height:100%; + max-width:100% +} +.meetings-call .sidebar-streams-container{ + height:calc(100% - 70px) +} +.meetings-call .sidebar-streams-container.guest{ + height:calc(100% - 365px) +} +.meetings-call .sidebar-streams{ + grid-gap:8px; + display:grid; + grid-template-columns:1fr 1fr; + overflow:hidden; + padding:8px 16px +} +.meetings-call .sidebar-streams .stream-node{ + background:#222; + border:0; + border-radius:8px; + box-sizing:border-box; + height:100%; + margin:0; + overflow:hidden; + width:100% +} +.meetings-call .sidebar-streams .stream-node.active{ + border:2px solid #6fd7ff +} +.meetings-call .sidebar-streams .stream-node.active .stream-node-content{ + border:2px solid #222; + border-radius:8px; + overflow:hidden +} +.meetings-call .sidebar-streams .stream-node-status{ + bottom:5px; + left:5px +} +.meetings-call .sidebar-streams .stream-node-status span{ + height:24px; + margin:0 2px 0 0; + width:24px +} +.meetings-call .sidebar-streams .stream-node-status span i{ + --icon-size:16px +} +.meetings-call .sidebar-streams .stream-node .call-role-icon{ + --icon-size:18px; + --mask-color:var(--secondary-white); + padding:5px +} +.meetings-call .sidebar-streams .stream-node .loading-icon{ + filter:invert(0); + height:64px; + margin-left:-32px; + margin-top:-32px; + width:64px +} +.meetings-call .sidebar-head{ + padding:16px +} +.meetings-call .sidebar-head h2{ + color:var(--text-color-high); + margin:0 0 0 5px +} +.meetings-call .sidebar-head button{ + margin:0 5px 0 0 +} +.meetings-call .sidebar-head button.add{ + position:absolute; + right:20px; + top:15px +} +.meetings-call .sidebar-head button.add i{ + --mask-color:var(--secondary-white) +} +.meetings-call .sidebar-head button i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + margin:0 auto +} +.meetings-call .sidebar-head button span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.local-stream-mirrored video{ + transform:scaleX(-1) +} +.mode{ + float:left +} +.mode button{ + background:transparent; + border:0; + color:var(--secondary-white); + cursor:pointer; + float:left; + font:var(--text-h3); + padding:0; + text-align:left +} +.mode button i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + float:left; + margin:0 8px 0 0 +} +.mode button div{ + color:var(--secondary-white); + display:block; + float:left; + height:auto; + width:auto +} +.mode-toggle{ + overflow:hidden +} +.mode-toggle i{ + --icon-size:16px; + --mask-color:var(--icon-rest); + display:block; + float:left; + margin:6px 0 0 10px +} +.mode-menu{ + background:var(--surface-main); + border:var(--context-menu-border); + border-radius:12px; + box-shadow:var(--dropdown-shadow); + display:none; + margin:8px 0 0; + padding:7px; + position:absolute; + top:100% +} +.mode-menu.expanded{ + display:block +} +.mode-menu .mode-option{ + opacity:.7; + overflow:hidden; + padding:8px +} +.mode-menu .mode-option:hover{ + opacity:1 +} +.mode-menu .mode-option.active{ + background:var(--surface-grey-1); + border-radius:4px; + opacity:1 +} +.stream-head{ + background:var(--surface-black-bar); + height:64px; + left:0; + position:absolute; + top:-250px; + transition:opacity .5s ease-in-out,top .5s ease-in-out; + width:100%; + z-index:11 +} +.stream-head-content{ + box-sizing:border-box; + padding:0 24px; + position:absolute; + top:50%; + transform:translateY(-50%); + width:100% +} +.stream-head-content .stream-head-info{ + color:var(--secondary-white); + float:left; + font:var(--text-h3) +} +.stream-head-content .stream-head-info .stream-duration,.stream-head-content .stream-head-info .stream-topic{ + float:left +} +.stream-head-content .stream-head-info .stream-duration{ + margin:0 30px 0 0 +} +.stream-head-content .stream-head-info .stream-topic.has-meeting-link{ + cursor:pointer +} +.stream-head-content .stream-head-info .stream-topic i{ + --icon-size:16px; + display:block; + float:right; + margin:6px 0 0 10px +} +.stream-head-content .stream-head-controls{ + float:right +} +.stream-head-content .stream-head-controls button.head-control{ + background:transparent; + border:0; + cursor:pointer; + display:block; + float:left; + margin:0 0 0 20px; + padding:0 +} +.stream-head-content .stream-head-controls button.head-control i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + margin:0 auto +} +.stream-head-content .stream-head-controls button.head-control span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.in-call-info{ + left:20px; + top:60px +} +.in-call-info .banner-copy-success{ + background:var(--banner-background-success); + border:1px solid var(--banner-border-success); + border-radius:4px; + color:var(--banner-text-success); + font:var(--text-body1-bold); + margin:4px auto; + padding:4px 30px; + position:relative; + text-align:center; + width:70% +} +.node-menu{ + display:none; + position:absolute; + right:8px; + text-align:right; + top:15px; + z-index:2 +} +.node-menu:hover .node-menu-content{ + display:block +} +.node-menu-toggle{ + background:var(--surface-black-bar); + border-radius:5px; + color:var(--text-color-high); + cursor:pointer; + display:inline-block; + font:var(--text-body1); + padding:5px 0 5px 10px +} +.node-menu-toggle i,.node-menu-toggle span{ + display:block; + float:left +} +.node-menu-toggle span{ + color:var(--text-color-medium); + font:var(--text-body1); + padding:2px 0 0 +} +.node-menu-toggle i{ + --icon-size:24px; + --mask-color:var(--icon-rest) +} +.node-menu-content{ + background:var(--surface-grey-2); + border:var(--context-menu-border); + border-radius:12px; + box-shadow:var(--dropdown-shadow); + display:none; + padding:7px 8px 1px; + text-align:left +} +.node-menu-content ul{ + list-style:none; + margin:0; + padding:0 +} +.node-menu-content ul li{ + border-radius:4px; + margin:0 0 4px +} +.node-menu-content ul li button{ + background:transparent; + border:0; + color:var(--text-color-high); + cursor:pointer; + font:var(--text-body1); + opacity:.7 +} +.node-menu-content ul li button:hover:not(.disabled){ + opacity:1 +} +.node-menu-content ul li button.disabled{ + opacity:.4 +} +.node-menu-content ul li button i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + display:block; + float:left +} +.node-menu-content ul li button span{ + display:block; + float:left; + padding:3px 0 0 6px; + vertical-align:middle +} +.stream-node{ + background:#333; + border-radius:4px; + box-sizing:initial; + float:left; + height:calc(100% - 4px); + margin:2px; + min-height:100%; + position:relative; + width:calc(100% - 4px) +} +.stream-node:after{ + content:""; + display:block; + padding-top:56.25% +} +.stream-node:hover .node-menu{ + display:block +} +.stream-node.full{ + width:100% +} +.stream-node.half{ + width:50% +} +.stream-node.third{ + width:33% +} +.stream-node.quarter{ + width:25% +} +.stream-node.clickable{ + cursor:pointer +} +.stream-node .loading-icon{ + --icon-size:64px; + filter:invert(1) +} +.stream-node-content{ + border-radius:4px; + bottom:0; + left:0; + overflow:hidden; + position:absolute; + right:0; + top:0 +} +.stream-node-content .loading-icon{ + -webkit-animation:rotate 1s linear infinite; + animation:rotate 1s linear infinite; + filter:invert(1); + height:128px; + left:50%; + margin-left:-64px; + margin-top:-64px; + opacity:.2; + position:absolute; + top:50%; + transform:translate(-50%, -50%); + width:128px +} +.stream-node-content .video-rtc-stats{ + color:#0f0; + font-size:6pt; + padding-left:4px; + padding-right:4px; + padding-top:0; + position:absolute; + text-shadow:0 0 4px #000; + z-index:20 +} +.stream-node-content .video-rtc-stats-ralign{ + right:0; + width:80% +} +.stream-node-content .stream-node-holder,.stream-node-content video{ + height:100%; + width:100% +} +.stream-node-content .avatar-wrapper{ + border-radius:50% +} +.stream-node-content .avatar-wrapper,.stream-node-content .avatar-wrapper span{ + left:50%; + position:absolute; + top:50%; + transform:translate(-50%, -50%) +} +.stream-node-content .avatar-wrapper img{ + height:100%; + width:100% +} +.stream-node-content .avatar-wrapper .user-card-verified{ + display:none +} +.stream-node-status{ + bottom:10px; + color:var(--secondary-white); + font-size:9px; + left:10px; + position:absolute +} +.stream-node-status span{ + align-items:center; + background:rgba(17, 17, 17, .8); + border-radius:200px; + display:flex; + float:left; + height:32px; + justify-content:center; + margin:0 5px 0 0; + width:32px +} +.stream-node-status span i{ + --icon-size:24px +} +.stream-node-status span i.icon-audio-off{ + --mask-color:var(--secondary-red) +} +.stream-node-status span i.icon-weak-signal{ + --mask-color:var(--icon-rest) +} +.stream-node-status span span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.stream .stream-node-content .avatar-wrapper{ + font:var(--text-h1); + height:96px; + width:96px +} +.local-stream .stream-node-content .avatar-wrapper{ + height:48px; + width:48px +} +.local-stream{ + background:var(--surface-black); + border-radius:24px; + bottom:24px; + cursor:pointer; + height:143px; + position:fixed; + right:24px; + width:245px; + z-index:11 +} +.local-stream.ratio-4-3{ + width:190px +} +.local-stream.ratio-16-9{ + width:254px +} +.local-stream.ratio-9-16{ + width:80px +} +.local-stream.ratio-8-5{ + height:150px; + width:240px +} +.local-stream.mini{ + height:240px; + width:320px +} +.local-stream.mini.ratio-16-9{ + height:188px; + width:334px +} +.local-stream.with-sidebar{ + right:324px +} +.local-stream.collapsed{ + background:var(--surface-black); + height:24px; + text-align:center; + width:160px; + z-index:1000 +} +.local-stream.collapsed i{ + --icon-size:24px; + --mask-color:var(--secondary-white) +} +.local-stream:hover .local-stream-self-overlay{ + background:linear-gradient(180deg, rgba(0, 0, 0, .6) 0, transparent); + border-radius:24px; + height:100%; + position:absolute; + width:100% +} +.local-stream .local-stream-options-control{ + background:transparent; + left:15px; + margin:0; + padding:0; + position:absolute; + top:15px; + z-index:1 +} +.local-stream .local-stream-options-control.active i{ + --mask-color:var(--secondary-blue) +} +.local-stream .local-stream-options-control i{ + --icon-size:24px; + --mask-color:var(--secondary-white) +} +.local-stream .local-stream-options{ + background:var(--surface-main); + border:var(--context-menu-border); + border-radius:12px; + box-shadow:var(--dropdown-shadow); + display:block; + left:0; + padding:9px 0 2px; + position:absolute; + top:50%; + transform:translate(-95%, -50%); + z-index:1 +} +.local-stream .local-stream-options.options-top{ + top:-50%; + transform:none +} +.local-stream .local-stream-options.options-bottom{ + left:10px; + top:30%; + transform:none +} +.local-stream .local-stream-options ul{ + list-style:none; + margin:0; + padding:0 +} +.local-stream .local-stream-options ul.has-separator{ + border-top:1px solid var(--stroke-grey-2); + padding:5px 0 0 +} +.local-stream .local-stream-options ul li{ + padding:0 0 3px +} +.local-stream .local-stream-options ul li button{ + background:transparent; + border:0; + color:var(--text-color-medium); + cursor:pointer; + font:var(--text-body1); + height:auto; + text-indent:0; + width:auto +} +.local-stream .local-stream-options ul li button:hover{ + color:var(--text-color-high) +} +.local-stream .local-stream-options ul li button:hover i{ + --mask-color:var(--icon-active) +} +.local-stream .local-stream-options ul li button.end-screen-share{ + color:var(--text-color-error) +} +.local-stream .local-stream-options ul li button.end-screen-share i{ + --mask-color:var(--secondary-red) +} +.local-stream .local-stream-options ul li button i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + float:left; + margin:0 auto +} +.local-stream .local-stream-options ul li button div{ + float:left; + padding:2px 0 0 7px +} +.local-stream.minimized{ + border:1px solid #212121; + bottom:80px; + height:240px; + width:320px; + z-index:1125 +} +.local-stream.minimized.ratio-16-9{ + height:188px; + width:334px +} +.local-stream.minimized.active .local-stream-overlay,.local-stream.minimized:hover .local-stream-overlay{ + display:block +} +.local-stream.minimized:hover .local-stream-notifications,.local-stream.minimized:hover .stream-node-status,.local-stream.minimized:hover button.chat-control{ + display:none +} +.local-stream.minimized .local-stream-overlay{ + background:linear-gradient(180deg, rgba(0, 0, 0, .6) 0, transparent); + border-radius:24px; + display:none; + height:100%; + left:0; + position:absolute; + top:0; + width:100% +} +.local-stream.minimized .local-stream-overlay .local-stream-controls{ + align-items:center; + bottom:20px; + display:flex; + justify-content:space-evenly; + left:50%; + position:absolute; + text-align:center; + transform:translate(-50%); + width:85% +} +.local-stream.minimized .local-stream-overlay .local-stream-controls button:last-child{ + margin-right:0 +} +.local-stream.minimized .local-stream-overlay .local-stream-controls button i{ + --icon-size:32px; + --mask-color:var(--icon-active) +} +.local-stream.minimized .local-stream-overlay .local-stream-controls button.end-call{ + background:#ff6863; + background:linear-gradient(0deg, #ff6863, #ff9c97) +} +.local-stream.minimized .local-stream-overlay .local-stream-controls .button-group .active-indicator{ + right:2px; + top:-1px +} +.local-stream.minimized .local-stream-overlay .local-stream-controls .meetings-signal-issue{ + right:-10px +} +.local-stream.minimized .local-stream-notifications{ + bottom:8px; + left:8px; + position:absolute +} +.local-stream.minimized .local-stream-notifications .chat-control{ + background:#9be5f7; + background:linear-gradient(90deg, #9be5f7, #4fc0ee) +} +.local-stream.minimized .local-stream-notifications .chat-control i{ + --icon-size:32px +} +.local-stream.minimized .local-stream-notifications span{ + background:var(--surface-error); + border-radius:200px; + color:var(--secondary-white); + font:var(--text-body2); + height:17px; + position:absolute; + right:0; + text-align:center; + top:-1px; + width:17px +} +.local-stream.minimized button.expand{ + background:transparent; + height:24px; + margin:0; + padding:0; + position:absolute; + right:16px; + top:16px; + width:24px; + z-index:21 +} +.local-stream.minimized button.expand i{ + --icon-size:24px +} +.local-stream.minimized button i{ + --mask-color:var(--secondary-white) +} +.local-stream.minimized button span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.local-stream .stream-node{ + background:transparent; + border:0; + border-radius:24px; + height:100%; + margin:0; + overflow:hidden; + width:100% +} +.local-stream-controls .button-group,.stream-controls .button-group{ + position:relative +} +.local-stream-controls .button-group-menu,.stream-controls .button-group-menu{ + display:none; + position:absolute; + transform:translateY(-100%) +} +.local-stream-controls .button-group-menu.expanded,.stream-controls .button-group-menu.expanded{ + display:block +} +.local-stream-controls .button-group-menu .button-group-item,.stream-controls .button-group-menu .button-group-item{ + margin:0 0 10px; + position:relative +} +.local-stream-controls .button-group .info-indicator,.stream-controls .button-group .info-indicator{ + border-radius:200px; + height:12px; + position:absolute; + right:2px; + top:-1px; + width:12px +} +.local-stream-controls .button-group .info-indicator.active,.stream-controls .button-group .info-indicator.active{ + background:#88ff5b +} +.local-stream-controls .button-group .info-indicator.warn,.stream-controls .button-group .info-indicator.warn{ + background:var(--surface-black) +} +.local-stream-controls .button-group .info-indicator.warn div,.stream-controls .button-group .info-indicator.warn div{ + --icon-size:24px; + --mask-color:var(--secondary-orange) +} +.meetings-signal-issue{ + border-radius:200px; + bottom:-4px; + cursor:pointer; + position:absolute; + right:1px +} +.button-group-item .meetings-signal-issue{ + bottom:3px; + right:-6px +} +.meetings-signal-issue i{ + --icon-size:24px; + --mask-color:var(--secondary-orange) +} +.meetings-signal-container{ + position:relative +} +.chat-toast-bar{ + position:absolute; + width:100% +} +.chat-toast-bar.toaster-root{ + width:calc(100% - 256px) +} +.chat-toast-bar .chat-toast{ + position:relative; + width:fit-content; + z-index:50 +} +.chat-toast-bar .chat-toast.chat-toast-wrapper{ + --surface-alpha:0.95; + background:var(--surface-main); + border:1px solid rgba(0, 0, 0, .1); + border-radius:16px; + box-sizing:border-box; + display:flex; + font:var(--text-h3-bold); + height:56px; + justify-content:space-between; + margin:80px auto 0; + padding:16px 32px +} +.chat-toast-bar .chat-toast.chat-toast-wrapper.root-toast{ + --surface-alpha:1; + border:unset; + box-shadow:var(--dialog-shadow); + height:64px; + left:50%; + margin:56px 0; + padding:20px; + transform:translateX(-50%); + -webkit-transform:translateX(-50%); + width:640px; + z-index:100 +} +.chat-toast-bar .chat-toast.chat-toast-wrapper.root-toast .chat-toast-close{ + height:36px; + position:relative; + top:4px; + width:36px +} +.chat-toast-bar .chat-toast.chat-toast-wrapper.root-toast .chat-toast-close div:hover{ + background:var(--surface-grey-2); + border-radius:4px +} +.chat-toast-bar .chat-toast.chat-toast-wrapper.root-toast .chat-toast-close i{ + margin:6px +} +.chat-toast-bar .chat-toast.chat-toast-wrapper .toast-value-wrapper{ + align-self:flex-start; + display:flex +} +.chat-toast-bar .chat-toast.chat-toast-wrapper i{ + --icon-size:24px; + -webkit-margin-start:12px; + margin-inline-end:12px +} +.chat-toast-bar .chat-toast.chat-toast-wrapper .toast-value{ + color:var(--text-color-high); + font:var(--text-body1); + margin:auto 0 +} +.chat-toast-bar .chat-toast.chat-toast-wrapper .chat-toast-close{ + align-self:flex-end +} +.chat-toast-bar .chat-toast.chat-persistent-toast{ + animation:toastfadeinout 4s linear infinite; + -webkit-animation:toastfadeinout 4s linear infinite; + color:#fff; + font:var(--text-h1-bold); + margin:168px auto 0 +} +.chat-toast-bar .chat-toast.chat-persistent-toast.dual-toast{ + margin-top:32px +} +@keyframes toastfadeinout{ +0%{ + opacity:0 +} +50%{ + opacity:1 +} +to{ + opacity:0 +} +} +@-webkit-keyframes toastfadeinout{ +0%{ + opacity:0 +} +50%{ + opacity:1 +} +to{ + opacity:0 +} +} +.start-meeting{ + border-radius:30px; + height:520px; + overflow:hidden; + text-align:center; + width:430px +} +.start-meeting-preview{ + height:323px; + width:430px +} +.start-meeting-title{ + display:flex; + height:30px; + justify-content:center; + overflow:hidden +} +.start-meeting-title input{ + background:transparent; + border:0; + border-bottom:1px solid var(--input-text-underline-hover); + color:var(--text-color-high); + display:block; + float:left; + font-size:20px; + line-height:24px; + width:190px +} +.start-meeting-title h2{ + cursor:pointer; + display:block; + float:left; + margin:0; + max-width:250px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.start-meeting-title h2 .emoji.big{ + height:24px; + width:24px +} +.start-meeting-title button{ + margin:3px 0 0 7px +} +.start-meeting-title button.editing{ + padding-top:5px +} +.start-meeting-title button i{ + --icon-size:24px; + --mask-color:var(--icon-inactive) +} +.start-meeting-title button span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.start-meeting-button{ + display:block; + margin:24px auto; + padding:0 60px +} +.start-meeting a{ + color:var(--text-color-info) +} +.join-meeting{ + background:var(--surface-grey-1); + height:100%; + position:fixed; + top:45px; + width:100%; + z-index:140 +} +.join-meeting a{ + color:var(--text-color-info) +} +.join-meeting-head{ + text-align:center +} +.join-meeting-head .join-meeting-logo i{ + --width:195px; + display:block; + height:65px; + margin:40px auto 0; + width:195px +} +.join-meeting-head h1{ + margin:24px 0 0 +} +@media only screen and (max-height:600px){ +.join-meeting-head h1{ + font:var(--text-h2); + margin-bottom:18px; + margin-top:14px +} +} +.join-meeting-head .ephemeral-info{ + align-items:center; + color:var(--label-orange); + display:flex; + justify-content:center +} +.join-meeting-head .ephemeral-info p{ + padding:0 0 0 10px +} +.join-meeting-content{ + margin:88px 0 0; + text-align:center +} +.join-meeting-content button{ + display:block; + font:var(--text-h3); + margin:0 auto 24px; + min-height:48px; + min-width:139px +} +.join-meeting-content p{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.join-meeting-content a{ + display:inline-block; + margin:0 0 0 5px +} +.join-meeting-chat{ + background:var(--surface-main); + border:1px solid rgba(0, 0, 0, .05); + border-radius:30px; + bottom:70px; + box-shadow:var(--dialog-shadow); + color:var(--text-color-medium); + font:var(--text-body1); + left:50%; + position:absolute; + transform:translateX(-50%); + width:720px +} +.join-meeting-chat.expanded{ + height:180px; + overflow:hidden; + padding:0 0 30px +} +.join-meeting-chat .chat-content{ + padding:15px +} +.join-meeting-chat .chat-content-head{ + cursor:pointer +} +.join-meeting-chat .chat-content button{ + background:transparent; + border:0; + position:absolute; + right:10px; + top:12px +} +.join-meeting-chat .chat-content button i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + cursor:pointer +} +.join-meeting-chat .chat-content button span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.join-meeting-chat .chat-body{ + margin:10px 0 0 +} +.join-meeting .card{ + background:var(--surface-main); + border-radius:30px; + box-shadow:0 1px 10px 0 rgba(0, 0, 0, .1); + box-sizing:border-box; + height:300px; + margin:88px auto 0; + overflow:hidden; + position:relative; + width:800px +} +@media only screen and (max-height:600px){ +.join-meeting .card{ + height:230px +} +} +.join-meeting .card-body{ + box-sizing:border-box; + overflow:hidden; + position:absolute; + text-align:center; + top:50%; + transform:translateY(-50%); + width:50% +} +@media only screen and (max-height:600px){ +.join-meeting .card-body h2{ + font:var(--text-h3) +} +} +.join-meeting .card-body h4{ + display:block +} +.join-meeting .card-body button{ + justify-content:center; + margin:0 0 26px +} +.join-meeting .card-preview{ + height:100%; + position:absolute; + right:0; + top:0; + width:50% +} +body.theme-dark .join-meeting .card-preview .preview{ + background:#111 +} +.join-meeting .card-fields{ + margin:40px 0 48px +} +@media only screen and (max-height:600px){ +.join-meeting .card-fields{ + margin:20px 0 +} +} +.join-meeting .card-fields .mega-input{ + margin:0 15px 0 0; + width:140px +} +.join-meeting .card-fields .mega-input .required-red{ + padding:0 0 0 4px +} +.join-meeting .unsupported-container{ + background:var(--surface-main); + border-radius:30px; + box-shadow:0 1px 10px 0 rgba(0, 0, 0, .1); + box-sizing:border-box; + margin:55px auto 0; + overflow:hidden; + position:relative; + width:605px +} +.join-meeting .unsupported-container i{ + --icon-size:52px; + float:left; + margin:30px 0 0 37px +} +.join-meeting .unsupported-container .unsupported-info{ + float:left; + margin:30px 0 25px 36px +} +.join-meeting .unsupported-container .unsupported-info h3{ + color:var(--text-color-high); + font:var(--text-h3-bold) +} +.join-meeting .unsupported-container .unsupported-info h3:first-child{ + color:var(--secondary-red); + margin:0 0 20px +} +.join-meeting .unsupported-container .unsupported-info h3:last-child{ + color:var(--text-color-high); + margin:0 0 10px +} +.join-meeting .unsupported-container .unsupported-info ul{ + color:var(--text-color-medium); + padding:0 0 0 18px +} +.join-meeting .messages.scroll-area>.js-messages-scroll-area{ + max-height:140px +} +.preview-meeting{ + background:#333; + height:100%; + overflow:hidden; + position:relative; + width:100% +} +body.theme-dark .preview-meeting{ + background:#000 +} +body.theme-dark .start-meeting-preview .preview-meeting{ + background:#222 +} +.preview-meeting video{ + display:none; + height:100%; + object-fit:cover; + width:100% +} +.preview-meeting video.streaming{ + display:block +} +.preview-meeting .preview-video-overlay{ + background:linear-gradient(180deg, rgba(0, 0, 0, .5), hsla(0, 0%, 100%, 0)); + content:""; + display:block; + height:100%; + left:0; + position:absolute; + top:0; + width:100%; + z-index:1 +} +.preview-meeting .avatar-wrapper{ + border-radius:50%; + height:120px; + margin:-30px 0 0; + width:120px +} +.preview-meeting .avatar-wrapper,.preview-meeting .avatar-wrapper span{ + left:50%; + position:absolute; + top:50%; + transform:translate(-50%, -50%) +} +.preview-meeting .avatar-wrapper span{ + font-size:32px +} +.preview-meeting .avatar-guest,.preview-meeting .avatar-wrapper img{ + height:100%; + width:100% +} +.preview-meeting .avatar-guest i{ + display:block; + height:120px; + left:50%; + position:absolute; + top:45%; + transform:translate(-50%, -65%); + width:120px +} +.preview-meeting-controls{ + bottom:24px; + left:50%; + position:absolute; + transform:translateX(-50%); + z-index:2 +} +.preview-meeting-controls .preview-control-wrapper{ + box-sizing:border-box; + display:inline-block; + padding:0 11px; + position:relative; + width:70px +} +.preview-meeting-controls button{ + display:inline +} +.preview-meeting-controls button:first-child{ + margin-right:32px +} +.preview-meeting-controls button i{ + --icon-size:32px; + --mask-color:var(--icon-active); + margin:0 auto +} +.preview-meeting-controls button span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.incoming-dialog{ + border-radius:30px; + text-align:center; + width:320px +} +.incoming-dialog-avatar{ + height:120px; + margin:48px auto 24px; + width:120px +} +.incoming-dialog-avatar .avatar-wrapper{ + border-radius:50%; + height:100%; + position:relative; + width:100% +} +.incoming-dialog-avatar .avatar-wrapper span{ + display:block; + font-size:40px; + left:50%; + position:absolute; + top:50%; + transform:translate(-50%, -50%) +} +.incoming-dialog-avatar .avatar-wrapper img{ + height:100%; + width:100% +} +.incoming-dialog-avatar .user-card-verified{ + display:none +} +.incoming-dialog-info h1,.incoming-dialog-info span{ + color:var(--text-color-high); + display:block; + margin:0 +} +.incoming-dialog-info h1{ + display:block; + font:var(--text-h1); + max-width:280px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.incoming-dialog-info span{ + color:var(--text-color-low); + font:var(--text-body1) +} +.incoming-dialog-controls{ + margin:24px 0 0 +} +.incoming-dialog-controls.call-in-progress{ + display:flex; + justify-content:space-between; + margin-left:15px; + margin-right:15px +} +.incoming-dialog-controls.call-in-progress .switch-button-container{ + height:70px; + margin:0 auto; + overflow:hidden; + position:relative; + width:70px +} +.incoming-dialog-controls.call-in-progress .switch-button-container .switch{ + left:0; + position:absolute +} +.incoming-dialog-controls.call-in-progress .switch-button-container .switch.negative.hovered{ + background:var(--red-hover) +} +.incoming-dialog-controls.call-in-progress .switch-button-container .switch.positive{ + left:20px; + top:20px +} +.incoming-dialog-controls.call-in-progress .switch-button-container .switch.positive.hovered{ + background:var(--green-hover) +} +.incoming-dialog-controls button{ + display:inline-flex; + justify-content:center; + margin:0 16px 0 0 +} +.incoming-dialog-controls button:last-child{ + margin:0 +} +.incoming-dialog-controls button.answer{ + border-radius:24px; + width:144px +} +.incoming-dialog-controls button.video.negative i{ + --mask-color:var(--secondary-white) +} +.incoming-dialog-controls button.video i{ + --mask-color:var(--icon-rest) +} +.incoming-dialog-controls button i{ + --icon-size:32px; + --mask-color:var(--secondary-white) +} +.incoming-dialog-controls button span{ + bottom:-9999px; + position:fixed; + visibility:hidden +} +.incoming-dialog-unsupported{ + background:var(--secondary-orange); + border-radius:20px; + margin:16px -16px -16px +} +.incoming-dialog-unsupported .unsupported-message{ + color:var(--secondary-white); + font:var(--text-body1); + padding:12px; + text-align:left +} +.invite-meeting{ + width:415px +} +.invite-meeting button{ + border:0; + display:inline-block +} +.invite-meeting-head{ + margin:20px 0 0; + padding:0 48px; + text-align:center +} +.invite-meeting-head h3{ + display:block; + margin:15px +} +.invite-meeting-head p{ + color:var(--text-color-medium); + font:var(--text-body1) +} +.invite-meeting-head i{ + --icon-size:24px; + float:left +} +.invite-meeting-head button{ + align-items:center; + display:flex; + justify-content:center; + margin:0 auto +} +.invite-meeting-head .link-input-container{ + margin:10px 0 +} +.invite-meeting-head .link-input-container .view-link-control{ + color:var(--text-color-info); + display:block; + font:var(--text-body2); + margin:10px auto +} +.invite-meeting-head .link-input-container .view-link-control i{ + --icon-size:18px; + --mask-color:var(--secondary-blue); + display:inline-block; + float:none +} +.invite-meeting .fm-dialog-body{ + padding:0 +} +.invite-meeting-contacts{ + border-bottom:1px solid var(--divider-color); + border-top:1px solid var(--divider-color); + height:270px; + overflow:hidden; + padding:8px 0 +} +.invite-meeting-contacts>.invite-meeting-loading,.invite-meeting-contacts>.invite-meeting-nil{ + left:50%; + position:absolute; + top:50%; + transform:translate(-50%, -50%) +} +.invite-meeting-contacts .contacts-search-subsection{ + padding:0 48px +} +.invite-meeting-contacts .contacts-search-subsection .contacts-list-header{ + margin:0 +} +.invite-meeting-contacts .contacts-search-subsection .contacts-info.body.contacts-search{ + width:100% +} +.invite-meeting-contacts .contacts-search-subsection .contacts-info.body.contacts-search .user-card-tick-wrap{ + right:0 +} +.invite-meeting-nil{ + text-align:center +} +.invite-meeting-field{ + margin:0 0 4px; + position:relative +} +.invite-meeting-field input{ + background:var(--surface-grey-1); + border:0; + border-radius:18px; + box-sizing:border-box; + color:var(--text-color-medium); + display:block; + font:var(--text-body1); + height:32px; + padding:2px 30px 3px 40px; + transition:all .2s ease-in-out; + width:100% +} +.invite-meeting-field i{ + --icon-size:24px; + --mask-color:var(--icon-rest); + display:block; + left:8px; + position:absolute; + top:50%; + transform:translateY(-50%) +} +.meetings-loading{ + background:#222; + height:100%; + left:0; + position:fixed; + top:0; + width:100%; + z-index:141 +} +.meetings-loading-debug{ + bottom:15px; + color:var(--secondary-white); + font:var(--text-h3); + left:15px; + opacity:.6; + position:absolute +} +.meetings-loading-content{ + font:var(--text-h3-bold); + left:50%; + position:absolute; + text-align:center; + top:50%; + transform:translate(-50%, -50%); + width:50% +} +.meetings-loading-content span{ + background:var(--surface-error); + border-radius:15px; + display:block; + height:64px; + margin:0 auto; + position:relative; + width:64px +} +.meetings-loading-content span i{ + --icon-size:48px; + --mask-color:#fff; + left:50%; + position:absolute; + top:50%; + transform:translate(-50%, -50%) +} +.meetings-loading-content h3{ + color:var(--secondary-white) +} +.meetings-loading-content .loading-container{ + border-radius:50%; + margin:0 auto; + overflow:hidden; + width:320px +} +.meetings-loading-content .loading-container .loading-indication{ + animation:loading-animation 2s infinite; + background:rgba(240, 55, 58, 0); + background:linear-gradient(90deg, rgba(240, 55, 58, 0), #f0373a); + height:2px; + left:-400px; + margin:0 auto; + position:relative; + width:250px +} +@keyframes loading-animation{ +0%{ + left:-400px +} +to{ + left:400px +} +} +.meetings-alert{ + background:var(--secondary-orange); + border-radius:12px; + left:8px; + position:absolute; + top:5px; + width:calc(100% - 22px); + z-index:15 +} +.meetings-alert-neutral{ + background:var(--secondary-grey) +} +.meetings-alert-medium{ + background:var(--secondary-orange) +} +.meetings-alert-high{ + background:var(--secondary-red) +} +.meetings-alert-content{ + color:var(--secondary-white); + padding:12px 40px 12px 12px +} +.meetings-alert-content a{ + color:var(--secondary-white); + text-decoration:underline +} +.meetings-alert-close{ + cursor:pointer; + position:absolute; + right:14px; + top:50%; + transform:translateY(-50%) +} +.meetings-alert-close i{ + --icon-size:24px; + --mask-color:var(--secondary-white); + display:block +} + +.top-head{ + background-color:var(--stroke-grey-2); + position:relative +} +.topbar{ + background-color:var(--stroke-main); + box-sizing:border-box; + font-size:0; + height:48px; + padding:0 16px +} +.topbar,.topbar .logo-wrapper{ + align-items:flex-end; + display:flex +} +.topbar .logo-wrapper button{ + margin:0 4px +} +.bottom-page .topbar .logo-wrapper button{ + -webkit-margin-start:20px; + margin:0; + margin-inline-start:20px +} +.topbar .logo{ + --icon-size:24px; + background:none; + height:auto; + margin:0; + padding:4px; + width:auto +} +.topbar .searcher-wrapper{ + -webkit-margin-start:62px; + align-items:flex-end; + display:flex; + flex-grow:1; + justify-content:center; + margin-inline-start:62px +} +.topbar-searcher{ + background:var(--surface-grey-6); + border-radius:50px; + max-width:480px; + min-height:32px; + position:relative; + width:100% +} +.topbar-searcher form{ + align-items:center; + display:flex; + justify-content:space-between +} +.topbar-searcher i{ + --icon-size:24px; + --mask-color:var(--icon-inactive) +} +.topbar-searcher i.search-icon{ + -webkit-margin-start:8px; + margin-inline-start:8px +} +.topbar-searcher input{ + background-color:initial; + border:0; + box-sizing:border-box; + color:var(--stroke-main-inverted); + font:var(--text-body1); + margin:0 16px; + padding:6px 0; + width:100% +} +.topbar-searcher button{ + -webkit-margin-end:4px; + background-color:initial; + border:none; + cursor:pointer; + margin-inline-end:4px; + outline:transparent +} +.topbar-searcher input::placeholder{ + color:var(--stroke-main-inverted); + opacity:.3 +} +.topbar-searcher button i{ + --icon-size:16px; + --mask-color:var(--stroke-main-inverted) +} +.topbar .mini-search{ + -webkit-margin-end:16px; + margin-inline-end:16px; + overflow:hidden; + position:relative +} +.topbar .mini-search button{ + cursor:pointer; + flex-shrink:0; + height:32px; + margin:0; + padding:4px; + width:32px +} +.topbar .mini-search .topbar-mini-search{ + padding:4px +} +.topbar .mini-search .topbar-mini-search-close{ + height:32px; + position:relative; + width:32px +} +.topbar .mini-search .topbar-searcher{ + background:transparent; + display:flex; + transition:background-color .35s,width .35s; + width:32px +} +.topbar .mini-search button i:before{ + --mask-color:var(--icon-rest); + transition:color .35s +} +.topbar .mini-search button:hover i:before{ + --mask-color:var(--icon-active) +} +.topbar .mini-search .topbar-searcher form{ + flex-shrink:0; + overflow:hidden; + width:168px +} +.topbar .mini-search .topbar-searcher input{ + margin:0 12px +} +.topbar .mini-search.highlighted .topbar-searcher{ + background:var(--surface-grey-6) +} +.topbar .mini-search.highlighted .topbar-mini-search i:before{ + --mask-color:var(--icon-inactive) +} +.topbar .mini-search.active .topbar-mini-search{ + pointer-events:none +} +.topbar .mini-search.active .topbar-searcher{ + width:200px +} +.topbar .mini-search form .invalid,.topbar .mini-search form .valid{ + backface-visibility:hidden; + display:block; + position:absolute; + right:8px; + top:8px; + transition:transform .35s,opacity .35s +} +.topbar .mini-search form .invalid,.topbar .mini-search form.valid .valid{ + opacity:1; + transform:rotate(0) +} +.topbar .mini-search form .valid{ + opacity:0; + transform:rotate(-180deg) +} +.topbar .mini-search form.valid .invalid{ + opacity:0; + transform:rotate(180deg) +} +.topbar .fmdb-loader{ + display:inline-block; + height:24px; + margin:4px 24px; + opacity:0; + transition:opacity .1s; + width:24px +} +.fmdb-working .topbar .fmdb-loader{ + animation:rotate 1.5s linear infinite; + animation-timing-function:steps(12); + opacity:1 +} +.fmdb-working .topbar .fmdb-loader:after{ + background:transparent; + border:2px solid var(--stroke-main); + bottom:-1px; + content:""; + display:block; + left:-1px; + position:absolute; + right:-1px; + top:-1px +} +.topbar-links{ + align-items:center; + display:flex; + height:32px; + position:relative +} +.topbar-links>.dropdown{ + align-items:center; + display:flex; + height:100% +} +.topbar .btn-icon{ + -webkit-margin-end:20px; + background-color:initial; + border:none; + cursor:pointer; + margin:0; + margin-inline-end:20px; + outline:transparent; + padding:4px; + transition:margin .2s ease-in-out +} +.topbar .btn-icon:last-child{ + -webkit-margin-end:0; + margin-inline-end:0 +} +.topbar .btn-icon.menu-open{ + -webkit-margin-start:220px; + margin-inline-start:220px +} +.topbar-links .btn-icon i,.topbar .btn-icon i{ + --icon-size:24px; + vertical-align:middle +} +.topbar-links .btn-icon i.sprite-fm-mono,.topbar .btn-icon i.sprite-fm-mono{ + --mask-color:var(--icon-active) +} +.topbar .top-change-language.hidden+hr,.topbar :not(.topbar-links) hr{ + display:none +} +.topbar hr{ + -webkit-margin-end:20px; + background-color:var(--divider-color); + border:0; + content:""; + height:calc(100% - 8px); + margin:0; + margin-inline-end:20px; + width:1px +} +.topbar :not(.topbar-links) :not(.hidden)~hr{ + display:block +} +.topbar-links .btn-icon .avatar-wrapper{ + float:none; + font-size:12px; + height:24px; + line-height:24px; + width:24px +} +.topbar-links .btn-icon .small-rounded-avatar img{ + height:24px; + width:24px +} +.topbar .btn-icon .activity-status-block{ + -webkit-margin-start:15px; + margin:0; + margin-inline-start:15px; + position:absolute; + top:1px; + z-index:1 +} +.icon-badge{ + background-color:var(--secondary-red); + border-radius:9px; + color:var(--text-color-white-higher); + display:inline; + font-size:12px; + left:17px; + line-height:14px; + padding:1px 4px 0; + position:absolute; + text-align:center; + top:0; + width:auto +} +.topbar .activity-status.top:after{ + content:""; + display:block; + height:12px; + left:-3px; + position:absolute; + top:-3px; + width:12px; + z-index:10 +} +.topbar .dropdown{ + line-height:0; + position:relative +} +.topbar .dropdown-content{ + display:none; + position:absolute +} +.topbar .dropdown.show .dropdown-content{ + display:block; + right:-10px +} +.topbar .dropdown-arrow{ + right:-30px; + top:40px; + width:auto +} +.topbar .dropdown-arrow:before{ + background:var(--arrow-color, var(--surface-main)); + border-bottom:1px solid var(--stroke-grey-2); + border-right:1px solid var(--stroke-grey-2); + content:""; + height:12px; + position:absolute; + right:38px; + top:-7px; + transform:rotate(-135deg); + width:12px; + z-index:123 +} +.topbar .top-login-popup.dropdown-arrow:before{ + right:80px +} +.topbar .account-dialog{ + width:auto +} +.topbar .dropdown.account .dropdown.popup{ + padding:0; + width:312px +} +.topbar .account-dialog .header{ + border-bottom:1px solid var(--divider-color); + display:flex; + margin-bottom:8px; + padding:16px +} +.topbar .account-dialog .body{ + top:10px +} +.account-avatar .small-rounded-avatar{ + border-radius:8px; + height:64px; + width:64px +} +.topbar .account-dialog .account-info{ + -webkit-margin-start:16px; + display:flex; + flex-direction:column; + flex-grow:1; + margin-inline-start:16px +} +.topbar .activity-status-wrapper{ + align-items:center; + display:flex; + margin-top:5px +} +.topbar .account-dialog .account-info .activity-status-block{ + left:0; + margin:0; + position:relative; + width:min-content +} +.topbar .account-dialog .account-info .name{ + color:var(--text-color-higher); + font:var(--text-h3); + letter-spacing:0; + line-height:24px +} +.topbar .account-dialog .account-info .email{ + color:var(--text-color-higher); + font:var(--text-body1); + letter-spacing:0; + line-height:20px; + opacity:.7 +} +.topbar .account-dialog .account-info .email,.topbar .account-dialog .account-info .name{ + max-width:160px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} +.topbar .account-dialog .account-info .activity-text{ + color:var(--text-color-higher); + font:var(--text-body1); + letter-spacing:0; + line-height:20px; + margin-left:5px; + opacity:.7 +} +.topbar .account-dialog ul.links{ + list-style:none; + margin:0 0 16px; + padding:0; + width:100% +} +.topbar .account-dialog ul.links li{ + font:var(--text-body1); + margin:0 8px; + position:relative +} +.topbar .account-dialog ul.links li button{ + --mask-color:var(--icon-rest); + align-items:center; + background-color:initial; + border:none; + border-radius:4px; + box-sizing:border-box; + color:var(--text-color-medium); + cursor:pointer; + display:flex; + float:none; + font:var(--text-body1); + margin:0; + outline:transparent; + padding:8px; + text-align:left; + transition:var(--transition-color), var(--transition-bg-color); + width:100% +} +.topbar .account-dialog ul.links li button.active,.topbar .account-dialog ul.links li button:hover{ + --mask-color:var(--icon-active); + background:var(--surface-grey-2); + color:var(--text-color-high); + opacity:1 +} +.topbar .account-dialog ul.links li button span{ + flex:1 +} +.rtl .topbar .account-dialog ul.links li button span{ + flex:unset +} +.topbar .account-dialog ul.links li button>i{ + --icon-size:16px; + -webkit-margin-end:8px; + margin-inline-end:8px; + transition:var(--transition-color) +} +.topbar .account-dialog ul.links li button>span+i{ + --icon-size:16px; + -webkit-margin-start:8px; + margin:0; + margin-inline-start:8px +} +.topbar .account-dialog ul.links li button.feedback{ + color:var(--secondary-blue) +} +.rtl .topbar .account-dialog ul.links li button>span+i{ + transform:rotate(180deg) +} +.topbar .account-dialog ul.links li .status-dropdown{ + display:block; + position:relative +} +.topbar .account-dialog ul.links li .status-dropdown .dropdown-content{ + background:var(--surface-main); + border:var(--dropdown-border); + border-radius:24px; + box-shadow:var(--dropdown-shadow); + box-sizing:border-box; + display:none; + left:-242px; + min-height:32px; + min-width:160px; + padding:19px; + position:absolute; + top:-24px; + width:242px; + z-index:1 +} +.topbar .account-dialog ul.links li .status-dropdown:hover .dropbtn{ + background-color:var(--stroke-grey-2); + color:var(--text-color-high) +} +.topbar .account-dialog ul.links li .status-dropdown:hover .dropdown-content{ + display:block +} +.topbar .account-dialog ul.links li.separator{ + background-color:var(--divider-color); + height:1px; + margin:8px 0 +} +.topbar .notification-popup .fm-notifications-bottom{ + border-top:1px solid var(--divider-color); + justify-content:flex-end; + padding:12px 20px 16px +} +.topbar .top-warning-popup .fm-notifications-bottom{ + border-top:none; + justify-content:flex-end; + padding:24px 0 0 +} +.topbar .notification-popup .notification-txt{ + background:none +} +.topbar .dropdown.top-login-popup{ + min-height:32px; + min-width:160px; + position:absolute; + right:10px; + top:62px +} +.topbar .dropdown.top-login-popup .dropdown-white-arrow{ + left:auto; + right:79px; + top:-11px +} +.topbar .top-icon.pass-reminder{ + -webkit-margin-end:14px; + -webkit-margin-start:6px; + height:24px; + margin-inline-end:14px; + margin-inline-start:6px; + padding:0; + position:relative; + top:-6px; + width:24px +} +.topbar .top-icon.pass-reminder i{ + height:100%; + width:100% +} +.topbar .top-icon.pass-reminder:before{ + content:none +} +.topbar .top-change-language{ + padding:4px 0 +} +.top-change-language-name{ + -webkit-padding-start:4px; + color:var(--text-color-high); + font:var(--text-body1-bold); + padding-inline-start:4px; + text-transform:uppercase; + vertical-align:middle +} +.top-buttons button{ + display:inline-block; + margin:0; + min-width:68px +} +.top-buttons button:not(.hidden)+button{ + -webkit-margin-start:12px; + margin-inline-start:12px +} +.top-head .top-buttons{ + -webkit-margin-end:16px; + display:flex; + margin-inline-end:16px +} +.top-head .top-buttons.business{ + display:none; + position:relative +} +.business .top-head .top-buttons{ + display:none +} +.business .top-head .top-buttons.business{ + display:block +} +.topbar .logo-full{ + --width:98px; + cursor:pointer; + display:none; + height:32px; + width:98px +} +.bottom-page.download .topbar .logo-full{ + display:inline-block +} +.bottom-page.download .topbar .logo,.bottom-page.download .topbar .logo-wrapper button{ + display:none +} +@media only screen and (max-width:625px){ +.topbar{ + align-items:center; + height:64px +} +} diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FD3B3BD25A0A85E4FC5BF488874B9E135DCA5335 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FD3B3BD25A0A85E4FC5BF488874B9E135DCA5335 new file mode 100644 index 0000000..160f4ff Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FD3B3BD25A0A85E4FC5BF488874B9E135DCA5335 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FD3B3BD25A0A85E4FC5BF488874B9E135DCA5335-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FD3B3BD25A0A85E4FC5BF488874B9E135DCA5335-blob new file mode 100644 index 0000000..fb5856d --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FD3B3BD25A0A85E4FC5BF488874B9E135DCA5335-blob @@ -0,0 +1,2 @@ +"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_selector-observer_dist_index_esm_js"],{64463(a,b,c){c.d(b,{N7:()=>K});var d=c(8439),e=null,f=null,g=[];function h(a,b){var c=[];function d(){var a=c;c=[],b(a)}return function(){for(var b=arguments.length,e=Array(b),f=0;fd});var e,f=window.document.documentElement,g=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector;d.prototype.matchesSelector=function(a,b){return g.call(a,b)},d.prototype.querySelectorAll=function(a,b){return b.querySelectorAll(a)},d.prototype.indexes=[];var h=/^#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"ID",selector:function(a){var b;if(b=a.match(h))return b[0].slice(1)},element:function(a){if(a.id)return[a.id]}});var i=/^\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"CLASS",selector:function(a){var b;if(b=a.match(i))return b[0].slice(1)},element:function(a){var b=a.className;if(b){if("string"==typeof b)return b.split(/\s/);if("object"==typeof b&&"baseVal"in b)return b.baseVal.split(/\s/)}}});var j=/^((?:[\w\u00c0-\uFFFF\-]|\\.)+)/g;d.prototype.indexes.push({name:"TAG",selector:function(a){var b;if(b=a.match(j))return b[0].toUpperCase()},element:function(a){return[a.nodeName.toUpperCase()]}}),d.prototype.indexes.default={name:"UNIVERSAL",selector:function(){return!0},element:function(){return[!0]}},e="function"==typeof window.Map?window.Map:function(){function a(){this.map={}}return a.prototype.get=function(a){return this.map[a+" "]},a.prototype.set=function(a,b){this.map[a+" "]=b},a}();var k=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;function l(a,b){var c,d,e,f,g,h,i=(a=a.slice(0).concat(a.default)).length,j=b,l=[];do if(k.exec(""),(e=k.exec(j))&&(j=e[3],e[2]||!j)){for(c=0;csurf browser linux at DuckDuckGo
                  \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FDE31B20F55ABEE3EB3F18EC522AAF202282831C b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FDE31B20F55ABEE3EB3F18EC522AAF202282831C new file mode 100644 index 0000000..4a7cabb Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FDE31B20F55ABEE3EB3F18EC522AAF202282831C differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FE0686C2911EA3FEF1602FB944EB68F48A1D7120 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FE0686C2911EA3FEF1602FB944EB68F48A1D7120 new file mode 100644 index 0000000..d4ac0bf Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FE0686C2911EA3FEF1602FB944EB68F48A1D7120 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FFE81E6A739D98CE8DACB4CDD54FF8E715AF18D3 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FFE81E6A739D98CE8DACB4CDD54FF8E715AF18D3 new file mode 100644 index 0000000..7af61ed Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FFE81E6A739D98CE8DACB4CDD54FF8E715AF18D3 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FFE81E6A739D98CE8DACB4CDD54FF8E715AF18D3-blob b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FFE81E6A739D98CE8DACB4CDD54FF8E715AF18D3-blob new file mode 100644 index 0000000..ee48f6a --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/Resource/FFE81E6A739D98CE8DACB4CDD54FF8E715AF18D3-blob @@ -0,0 +1,2 @@ +(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([["vendors-node_modules_smoothscroll-polyfill_dist_smoothscroll_js-node_modules_stacktrace-parse-297da6"],{30523(a){var b,c;b=window,c=document,a.exports={polyfill:function(){if(!("scrollBehavior"in c.documentElement.style)|| !0===b.__forceSmoothScrollPolyfill__){var a,d=b.HTMLElement||b.Element,e=468,f=(a=b.navigator.userAgent,RegExp("MSIE |Trident/|Edge/").test(a))?1:0,g={scroll:b.scroll||b.scrollTo,scrollBy:b.scrollBy,elementScroll:d.prototype.scroll||i,scrollIntoView:d.prototype.scrollIntoView},h=b.performance&&b.performance.now?b.performance.now.bind(b.performance):Date.now;b.scroll=b.scrollTo=function(){if(void 0!==arguments[0]){if(!0===j(arguments[0])){g.scroll.call(b,void 0!==arguments[0].left?arguments[0].left:"object"!=typeof arguments[0]?arguments[0]:b.scrollX||b.pageXOffset,void 0!==arguments[0].top?arguments[0].top:void 0!==arguments[1]?arguments[1]:b.scrollY||b.pageYOffset);return}o.call(b,c.body,void 0!==arguments[0].left?~~arguments[0].left:b.scrollX||b.pageXOffset,void 0!==arguments[0].top?~~arguments[0].top:b.scrollY||b.pageYOffset)}},b.scrollBy=function(){if(void 0!==arguments[0]){if(j(arguments[0])){g.scrollBy.call(b,void 0!==arguments[0].left?arguments[0].left:"object"!=typeof arguments[0]?arguments[0]:0,void 0!==arguments[0].top?arguments[0].top:void 0!==arguments[1]?arguments[1]:0);return}o.call(b,c.body,~~arguments[0].left+(b.scrollX||b.pageXOffset),~~arguments[0].top+(b.scrollY||b.pageYOffset))}},d.prototype.scroll=d.prototype.scrollTo=function(){if(void 0!==arguments[0]){if(!0===j(arguments[0])){if("number"==typeof arguments[0]&& void 0===arguments[1])throw SyntaxError("Value couldn't be converted");g.elementScroll.call(this,void 0!==arguments[0].left?~~arguments[0].left:"object"!=typeof arguments[0]?~~arguments[0]:this.scrollLeft,void 0!==arguments[0].top?~~arguments[0].top:void 0!==arguments[1]?~~arguments[1]:this.scrollTop);return}var a=arguments[0].left,b=arguments[0].top;o.call(this,this,void 0===a?this.scrollLeft:~~a,void 0===b?this.scrollTop:~~b)}},d.prototype.scrollBy=function(){if(void 0!==arguments[0]){if(!0===j(arguments[0])){g.elementScroll.call(this,void 0!==arguments[0].left?~~arguments[0].left+this.scrollLeft:~~arguments[0]+this.scrollLeft,void 0!==arguments[0].top?~~arguments[0].top+this.scrollTop:~~arguments[1]+this.scrollTop);return}this.scroll({left:~~arguments[0].left+this.scrollLeft,top:~~arguments[0].top+this.scrollTop,behavior:arguments[0].behavior})}},d.prototype.scrollIntoView=function(){if(!0===j(arguments[0])){g.scrollIntoView.call(this,void 0===arguments[0]||arguments[0]);return}var a=function(a){var b;do b=(a=a.parentNode)===c.body;while(!1===b&& !1===m(a))return b=null,a}(this),d=a.getBoundingClientRect(),e=this.getBoundingClientRect();a!==c.body?(o.call(this,a,a.scrollLeft+e.left-d.left,a.scrollTop+e.top-d.top),"fixed"!==b.getComputedStyle(a).position&&b.scrollBy({left:d.left,top:d.top,behavior:"smooth"})):b.scrollBy({left:e.left,top:e.top,behavior:"smooth"})}}function i(a,b){this.scrollLeft=a,this.scrollTop=b}function j(a){if(null===a||"object"!=typeof a|| void 0===a.behavior||"auto"===a.behavior||"instant"===a.behavior)return!0;if("object"==typeof a&&"smooth"===a.behavior)return!1;throw TypeError("behavior member of ScrollOptions "+a.behavior+" is not a valid value for enumeration ScrollBehavior.")}function k(a,b){return"Y"===b?a.clientHeight+f1?1:i))),d=a.startX+(a.x-a.startX)*c,f=a.startY+(a.y-a.startY)*c,a.method.call(a.scrollable,d,f),(d!==a.x||f!==a.y)&&b.requestAnimationFrame(n.bind(b,a))}function o(a,d,e){var f,j,k,l,m=h();a===c.body?(f=b,j=b.scrollX||b.pageXOffset,k=b.scrollY||b.pageYOffset,l=g.scroll):(f=a,j=a.scrollLeft,k=a.scrollTop,l=i),n({scrollable:f,method:l,startTime:m,startX:j,startY:k,x:d,y:e})}}}},28382(a,b,c){"use strict";c.d(b,{Q:()=>e});var d="";function e(a){return a.split("\n").reduce(function(a,b){var c=h(b)||j(b)||m(b)||q(b)||o(b);return c&&a.push(c),a},[])}var f=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,g=/\((\S*)(?::(\d+))(?::(\d+))\)/;function h(a){var b=f.exec(a);if(!b)return null;var c=b[2]&&0===b[2].indexOf("native"),e=b[2]&&0===b[2].indexOf("eval"),h=g.exec(b[2]);return e&&null!=h&&(b[2]=h[1],b[3]=h[2],b[4]=h[3]),{file:c?null:b[2],methodName:b[1]||d,arguments:c?[b[2]]:[],lineNumber:b[3]?+b[3]:null,column:b[4]?+b[4]:null}}var i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;function j(a){var b=i.exec(a);return b?{file:b[2],methodName:b[1]||d,arguments:[],lineNumber:+b[3],column:b[4]?+b[4]:null}:null}var k=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,l=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function m(a){var b=k.exec(a);if(!b)return null;var c=b[3]&&b[3].indexOf(" > eval")> -1,e=l.exec(b[3]);return c&&null!=e&&(b[3]=e[1],b[4]=e[2],b[5]=null),{file:b[3],methodName:b[1]||d,arguments:b[2]?b[2].split(","):[],lineNumber:b[4]?+b[4]:null,column:b[5]?+b[5]:null}}var n=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;function o(a){var b=n.exec(a);return b?{file:b[3],methodName:b[1]||d,arguments:[],lineNumber:+b[4],column:b[5]?+b[5]:null}:null}var p=/^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;function q(a){var b=p.exec(a);return b?{file:b[2],methodName:b[1]||d,arguments:[],lineNumber:+b[3],column:b[4]?+b[4]:null}:null}},45341(a,b,c){"use strict";c.d(b,{nn:()=>au,Gb:()=>at});var d={};c.r(d),c.d(d,{abortSignalAbort:()=>q,apply:()=>t,isPolyfilled:()=>s,isSupported:()=>r});var e={};c.r(e),c.d(e,{abortSignalTimeout:()=>u,apply:()=>x,isPolyfilled:()=>w,isSupported:()=>v});var f={};c.r(f),c.d(f,{AggregateError:()=>AggregateError,apply:()=>A,isPolyfilled:()=>z,isSupported:()=>y});var g={};c.r(g),c.d(g,{apply:()=>F,arrayLikeAt:()=>C,isPolyfilled:()=>E,isSupported:()=>D});var h={};c.r(h),c.d(h,{apply:()=>J,isPolyfilled:()=>I,isSupported:()=>H,randomUUID:()=>G});var i={};c.r(i),c.d(i,{apply:()=>N,isPolyfilled:()=>M,isSupported:()=>L,replaceChildren:()=>K});var j={};c.r(j),c.d(j,{addEventListenerWithAbortSignal:()=>P,apply:()=>S,isPolyfilled:()=>R,isSupported:()=>Q});var k={};c.r(k),c.d(k,{apply:()=>W,isPolyfilled:()=>V,isSupported:()=>U,requestSubmit:()=>T});var l={};c.r(l),c.d(l,{apply:()=>_,isPolyfilled:()=>$,isSupported:()=>Z,objectHasOwn:()=>Y});var m={};c.r(m),c.d(m,{apply:()=>ad,isPolyfilled:()=>ac,isSupported:()=>ab,promiseAllSettled:()=>aa});var n={};c.r(n),c.d(n,{apply:()=>ah,isPolyfilled:()=>ag,isSupported:()=>af,promiseAny:()=>ae});var o={};c.r(o),c.d(o,{apply:()=>am,cancelIdleCallback:()=>aj,isPolyfilled:()=>al,isSupported:()=>ak,requestIdleCallback:()=>ai});var p={};function q(a){let b=new AbortController;return b.abort(a),b.signal}function r(){return"abort"in AbortSignal&&"function"==typeof AbortSignal.abort}function s(){return AbortSignal.abort===q}function t(){r()||(AbortSignal.abort=q)}function u(a){let b=new AbortController;return setTimeout(()=>b.abort(new DOMException("TimeoutError")),a),b.signal}function v(){return"abort"in AbortSignal&&"function"==typeof AbortSignal.timeout}function w(){return AbortSignal.timeout===u}function x(){v()||(AbortSignal.timeout=u)}c.r(p),c.d(p,{apply:()=>aq,isPolyfilled:()=>ap,isSupported:()=>ao,stringReplaceAll:()=>an});class AggregateError extends Error{constructor(a,b,c={}){super(b),Object.defineProperty(this,"errors",{value:Array.from(a),configurable:!0,writable:!0}),c.cause&&Object.defineProperty(this,"cause",{value:c.cause,configurable:!0,writable:!0})}}function y(){return"function"==typeof globalThis.AggregateError}function z(){return globalThis.AggregateError===AggregateError}function A(){y()||(globalThis.AggregateError=AggregateError)}let B=Reflect.getPrototypeOf(Int8Array);function C(a){let b=this.length;return(a=Math.trunc(a)||0)<0&&(a+=b),a<0||a>=b?void 0:this[a]}function D(){return"at"in Array.prototype&&"function"==typeof Array.prototype.at&&"at"in String.prototype&&"function"==typeof String.prototype.at&&"function"==typeof B&&"at"in B.prototype&&"function"==typeof B.prototype.at}function E(){return Array.prototype.at===C&&String.prototype.at===C&&"function"==typeof B&&B.prototype.at===C}function F(){if(!D()){let a={value:C,writable:!0,configurable:!0};Object.defineProperty(Array.prototype,"at",a),Object.defineProperty(String.prototype,"at",a),Object.defineProperty(B,"at",a)}}function G(){let a=new Uint32Array(4);crypto.getRandomValues(a);let b=-1;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){b++;let d=a[b>>3]>>b%8*4&15;return("x"===c?d:3&d|8).toString(16)})}function H(){return"object"==typeof crypto&&"randomUUID"in crypto&&"function"==typeof crypto.randomUUID}function I(){return H()&&crypto.randomUUID===G}function J(){H()||(crypto.randomUUID=G)}function K(...a){for(;this.firstChild;)this.removeChild(this.firstChild);this.append(...a)}function L(){return"replaceChildren"in Element.prototype&&"function"==typeof Element.prototype.replaceChildren&&"replaceChildren"in Document.prototype&&"function"==typeof Document.prototype.replaceChildren&&"replaceChildren"in DocumentFragment.prototype&&"function"==typeof DocumentFragment.prototype.replaceChildren}function M(){return Element.prototype.replaceChildren===K&&Document.prototype.replaceChildren===K&&DocumentFragment.prototype.replaceChildren===K}function N(){L()||(Element.prototype.replaceChildren=Document.prototype.replaceChildren=DocumentFragment.prototype.replaceChildren=K)}let O=EventTarget.prototype.addEventListener;function P(a,b,c){if("object"==typeof c&&"signal"in c&&c.signal instanceof AbortSignal){if(c.signal.aborted)return;O.call(c.signal,"abort",()=>{this.removeEventListener(a,b,c)})}return O.call(this,a,b,c)}function Q(){let a=!1;function b(){}let c=Object.create({},{signal:{get:()=>a=!0}});try{let d=new EventTarget;return d.addEventListener("test",b,c),d.removeEventListener("test",b,c),a}catch{return a}}function R(){return EventTarget.prototype.addEventListener===P}function S(){"function"!=typeof AbortSignal||Q()||(EventTarget.prototype.addEventListener=P)}function T(a=null){let b=new SubmitEvent("submit",{bubbles:!0,cancelable:!0,submitter:a}),c;a&&a.name&&(c=Object.assign(document.createElement("input"),{type:"hidden",hidden:!0,name:a.name,value:a.value}),this.append(c)),this.checkValidity()&&!this.dispatchEvent(b)&&this.submit(),c?.remove()}function U(){return"requestSubmit"in HTMLFormElement.prototype&&"function"==typeof HTMLFormElement.prototype.requestSubmit}function V(){return HTMLFormElement.prototype.requestSubmit===T}function W(){U()||(HTMLFormElement.prototype.requestSubmit=T)}let X=Object.prototype.hasOwnProperty;function Y(a,b){if(null==a)throw TypeError("Cannot convert undefined or null to object");return X.call(Object(a),b)}function Z(){return"hasOwn"in Object&&"function"==typeof Object.hasOwn}function $(){return Object.hasOwn===Y}function _(){Z()||Object.defineProperty(Object,"hasOwn",{value:Y,configurable:!0,writable:!0})}function aa(a){return Promise.all(a.map(a=>Promise.resolve(a).then(a=>({status:"fulfilled",value:a}),a=>({status:"rejected",reason:a}))))}function ab(){return"allSettled"in Promise&&"function"==typeof Promise.allSettled}function ac(){return Promise.all===aa}function ad(){ab()||(Promise.allSettled=aa)}function ae(a){return new Promise((b,c)=>{let d=!1,e=Array.from(a),f=[];function g(a){d||(d=!0,b(a))}function h(a){f.push(a),f.length===e.length&&c(new globalThis.AggregateError(f,"All Promises rejected"))}for(let i of e)Promise.resolve(i).then(g,h)})}function af(){return"any"in Promise&&"function"==typeof Promise.any}function ag(){return Promise.all===ae}function ah(){af()||(Promise.any=ae)}function ai(a,b={}){let c=Date.now(),d=b.timeout||0,e=Object.defineProperty({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-c))},"didTimeout",{get:()=>Date.now()-c>d});return window.setTimeout(()=>{a(e)})}function aj(a){clearTimeout(a)}function ak(){return"function"==typeof globalThis.requestIdleCallback}function al(){return globalThis.requestIdleCallback===ai&&globalThis.cancelIdleCallback===aj}function am(){ak()||(globalThis.requestIdleCallback=ai,globalThis.cancelIdleCallback=aj)}function an(a,b){if(a instanceof RegExp)return this.replace(a,b);let c=-1,d=0,e="";if("function"==typeof b){let f=b;b=()=>f(a,c,this)}for(c=this.indexOf(a,c+1);-1!==c;)e+=this.substring(d,c),e+=a.replace(a,b),d=c+a.length,c=this.indexOf(a,c+1);return e+this.substring(d)}function ao(){return"replaceAll"in String.prototype&&"function"==typeof String.prototype.replaceAll}function ap(){return String.prototype.replaceAll===an}function aq(){ao()||(String.prototype.replaceAll=an)}let ar="function"==typeof Blob&&"function"==typeof PerformanceObserver&&"object"==typeof Intl&&"function"==typeof MutationObserver&&"function"==typeof URLSearchParams&&"function"==typeof WebSocket&&"function"==typeof IntersectionObserver&&"function"==typeof queueMicrotask&&"function"==typeof TextEncoder&&"function"==typeof TextDecoder&&"object"==typeof customElements&&"function"==typeof HTMLDetailsElement&&"function"==typeof AbortController&&"function"==typeof AbortSignal&&"object"==typeof globalThis&&"entries"in FormData.prototype&&"toggleAttribute"in Element.prototype&&"fromEntries"in Object&&"flatMap"in Array.prototype&&"trimEnd"in String.prototype&&"matchAll"in String.prototype,as={abortSignalAbort:d,abortSignalTimeout:e,aggregateError:f,arrayAt:g,cryptoRandomUUID:h,elementReplaceChildren:i,eventAbortSignal:j,formRequestSubmit:k,objectHasOwn:l,promiseAllSettled:m,promiseAny:n,requestIdleCallback:o,stringReplaceAll:p};function at(){return ar&&Object.values(as).every(a=>a.isSupported())}function au(){for(let a of Object.values(as))a.apply()}},82918(a,b,c){"use strict";c.d(b,{b:()=>f});let d;function e(){return`${Math.round(2147483647*Math.random())}.${Math.round(Date.now()/1e3)}`}function f(){try{let a=function(){let a,b=document.cookie,c=b.match(/_octo=([^;]+)/g);if(!c)return;let d=[0,0];for(let e of c){let[,f]=e.split("="),[,g,...h]=f.split("."),i=g.split("-").map(Number);i>d&&(d=i,a=h.join("."))}return a}();if(a)return a;let b=e();return!function(a){let b=`GH1.1.${a}`,c=Date.now(),d=new Date(c+31536e6).toUTCString(),{domain:e}=document;e.endsWith(".github.com")&&(e="github.com"),document.cookie=`_octo=${b}; expires=${d}; path=/; domain=${e}; secure; samesite=lax`}(b),b}catch(c){return d||(d=e()),d}}},15205(a,b,c){"use strict";function d(...a){return JSON.stringify(a,(a,b)=>"object"==typeof b?b:String(b))}function e(a,b={}){let{hash:c=d,cache:e=new Map}=b;return function(...b){let d=c.apply(this,b);if(e.has(d))return e.get(d);let f=a.apply(this,b);return f instanceof Promise&&(f=f.catch(a=>{throw e.delete(d),a})),e.set(d,f),f}}c.d(b,{Z:()=>e})}}]) +//# sourceMappingURL=vendors-node_modules_smoothscroll-polyfill_dist_smoothscroll_js-node_modules_stacktrace-parse-297da6-f6d37a07dfb7.js.map \ No newline at end of file diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/20FDF30BA7097A47BE45FD14CD237F8C67F784D9 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/20FDF30BA7097A47BE45FD14CD237F8C67F784D9 new file mode 100644 index 0000000..2edff4a Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/20FDF30BA7097A47BE45FD14CD237F8C67F784D9 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/21EE8A9E4C1599F1C8F35E5B26655732FD2449C6 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/21EE8A9E4C1599F1C8F35E5B26655732FD2449C6 new file mode 100644 index 0000000..d2b4682 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/21EE8A9E4C1599F1C8F35E5B26655732FD2449C6 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/2314462AD06BD45EFC451AC10EFAD096C66EE072 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/2314462AD06BD45EFC451AC10EFAD096C66EE072 new file mode 100644 index 0000000..f3ff8bd Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/2314462AD06BD45EFC451AC10EFAD096C66EE072 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/2EAB55525D01633A730DD901FB728CFD2093CAA9 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/2EAB55525D01633A730DD901FB728CFD2093CAA9 new file mode 100644 index 0000000..126277a Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/2EAB55525D01633A730DD901FB728CFD2093CAA9 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/3C7A866E088BFDACF5449BAE40288B000F7AAF74 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/3C7A866E088BFDACF5449BAE40288B000F7AAF74 new file mode 100644 index 0000000..d25aec0 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/3C7A866E088BFDACF5449BAE40288B000F7AAF74 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/5C4785B2BA55E42443417CE085C01D5CDED15B6D b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/5C4785B2BA55E42443417CE085C01D5CDED15B6D new file mode 100644 index 0000000..46013be Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/5C4785B2BA55E42443417CE085C01D5CDED15B6D differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/6AFD8889B968FB019F2BACBFF51B24A13B2B8E6B b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/6AFD8889B968FB019F2BACBFF51B24A13B2B8E6B new file mode 100644 index 0000000..1114ff1 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/6AFD8889B968FB019F2BACBFF51B24A13B2B8E6B differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/72C820B88B4158BF3522B26741DBE32FCEFDBE87 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/72C820B88B4158BF3522B26741DBE32FCEFDBE87 new file mode 100644 index 0000000..fe3f1be Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/72C820B88B4158BF3522B26741DBE32FCEFDBE87 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/85229B5B2B75DB082016E2219F3914CB907F7934 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/85229B5B2B75DB082016E2219F3914CB907F7934 new file mode 100644 index 0000000..602ab17 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/85229B5B2B75DB082016E2219F3914CB907F7934 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/88354F659329213843D29C56E9A69F41201A7349 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/88354F659329213843D29C56E9A69F41201A7349 new file mode 100644 index 0000000..bf74550 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/88354F659329213843D29C56E9A69F41201A7349 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/9B9329EFBB82579B90B8CA932C1FFD0ED64BB7BD b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/9B9329EFBB82579B90B8CA932C1FFD0ED64BB7BD new file mode 100644 index 0000000..860458f Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/9B9329EFBB82579B90B8CA932C1FFD0ED64BB7BD differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/B51CFB55D71AC87195DEC4D5315514E25DFF3518 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/B51CFB55D71AC87195DEC4D5315514E25DFF3518 new file mode 100644 index 0000000..3587a6b Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/B51CFB55D71AC87195DEC4D5315514E25DFF3518 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/BB97142FEE5DA08A2F9C7A70853AEEDC323E7A82 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/BB97142FEE5DA08A2F9C7A70853AEEDC323E7A82 new file mode 100644 index 0000000..1fa8b68 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/BB97142FEE5DA08A2F9C7A70853AEEDC323E7A82 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/BD236BE9B5DEF695C2E63258FDEFE5AC95B71DC4 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/BD236BE9B5DEF695C2E63258FDEFE5AC95B71DC4 new file mode 100644 index 0000000..2e97a08 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/BD236BE9B5DEF695C2E63258FDEFE5AC95B71DC4 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/D3A5358FB249EBD53C640FF999B2FF25B90F74EB b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/D3A5358FB249EBD53C640FF999B2FF25B90F74EB new file mode 100644 index 0000000..7777f9d Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/D3A5358FB249EBD53C640FF999B2FF25B90F74EB differ diff --git a/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/FA6DE684763D7F18E0F8F6F8B57F81D38A515014 b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/FA6DE684763D7F18E0F8F6F8B57F81D38A515014 new file mode 100644 index 0000000..6d20c88 Binary files /dev/null and b/home/.surf/cache/WebKitCache/Version 16/Records/424EF44B4C9DE80D4CF18E8D8DE9334196CE7CDF/SubResources/FA6DE684763D7F18E0F8F6F8B57F81D38A515014 differ diff --git a/home/.surf/cache/WebKitCache/Version 16/salt b/home/.surf/cache/WebKitCache/Version 16/salt new file mode 100644 index 0000000..a4a3066 --- /dev/null +++ b/home/.surf/cache/WebKitCache/Version 16/salt @@ -0,0 +1 @@ +sCl \ No newline at end of file diff --git a/home/.surf/cache/databases/indexeddb/v0 b/home/.surf/cache/databases/indexeddb/v0 new file mode 120000 index 0000000..10c6514 --- /dev/null +++ b/home/.surf/cache/databases/indexeddb/v0 @@ -0,0 +1 @@ +/home/diegofcs/.surf/cache/databases/indexeddb \ No newline at end of file diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/321134EDF3B89CAA195C5DFFE138A88FC60BCD9B62B8BA0B36FC071B1586FB6A/IndexedDB.sqlite3 b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/321134EDF3B89CAA195C5DFFE138A88FC60BCD9B62B8BA0B36FC071B1586FB6A/IndexedDB.sqlite3 new file mode 100644 index 0000000..3b5781a Binary files /dev/null and b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/321134EDF3B89CAA195C5DFFE138A88FC60BCD9B62B8BA0B36FC071B1586FB6A/IndexedDB.sqlite3 differ diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/321134EDF3B89CAA195C5DFFE138A88FC60BCD9B62B8BA0B36FC071B1586FB6A/IndexedDB.sqlite3-shm b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/321134EDF3B89CAA195C5DFFE138A88FC60BCD9B62B8BA0B36FC071B1586FB6A/IndexedDB.sqlite3-shm new file mode 100644 index 0000000..b0a026c Binary files /dev/null and b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/321134EDF3B89CAA195C5DFFE138A88FC60BCD9B62B8BA0B36FC071B1586FB6A/IndexedDB.sqlite3-shm differ diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/321134EDF3B89CAA195C5DFFE138A88FC60BCD9B62B8BA0B36FC071B1586FB6A/IndexedDB.sqlite3-wal b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/321134EDF3B89CAA195C5DFFE138A88FC60BCD9B62B8BA0B36FC071B1586FB6A/IndexedDB.sqlite3-wal new file mode 100644 index 0000000..486bb61 Binary files /dev/null and b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/321134EDF3B89CAA195C5DFFE138A88FC60BCD9B62B8BA0B36FC071B1586FB6A/IndexedDB.sqlite3-wal differ diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/4EBFBC0D10335D46D1A9CE5A5C467819B0AE032EF497373EA63311CB66E59351/IndexedDB.sqlite3 b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/4EBFBC0D10335D46D1A9CE5A5C467819B0AE032EF497373EA63311CB66E59351/IndexedDB.sqlite3 new file mode 100644 index 0000000..2214ae4 Binary files /dev/null and b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/4EBFBC0D10335D46D1A9CE5A5C467819B0AE032EF497373EA63311CB66E59351/IndexedDB.sqlite3 differ diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/4EBFBC0D10335D46D1A9CE5A5C467819B0AE032EF497373EA63311CB66E59351/IndexedDB.sqlite3-shm b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/4EBFBC0D10335D46D1A9CE5A5C467819B0AE032EF497373EA63311CB66E59351/IndexedDB.sqlite3-shm new file mode 100644 index 0000000..98bde83 Binary files /dev/null and b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/4EBFBC0D10335D46D1A9CE5A5C467819B0AE032EF497373EA63311CB66E59351/IndexedDB.sqlite3-shm differ diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/4EBFBC0D10335D46D1A9CE5A5C467819B0AE032EF497373EA63311CB66E59351/IndexedDB.sqlite3-wal b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/4EBFBC0D10335D46D1A9CE5A5C467819B0AE032EF497373EA63311CB66E59351/IndexedDB.sqlite3-wal new file mode 100644 index 0000000..e69de29 diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/8CCAAAF0CE227E7FC49FFF5F8B327F6F089B599B4E50D0BFE020534387F0A55E/IndexedDB.sqlite3 b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/8CCAAAF0CE227E7FC49FFF5F8B327F6F089B599B4E50D0BFE020534387F0A55E/IndexedDB.sqlite3 new file mode 100644 index 0000000..9a530ec Binary files /dev/null and b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/8CCAAAF0CE227E7FC49FFF5F8B327F6F089B599B4E50D0BFE020534387F0A55E/IndexedDB.sqlite3 differ diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/8CCAAAF0CE227E7FC49FFF5F8B327F6F089B599B4E50D0BFE020534387F0A55E/IndexedDB.sqlite3-shm b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/8CCAAAF0CE227E7FC49FFF5F8B327F6F089B599B4E50D0BFE020534387F0A55E/IndexedDB.sqlite3-shm new file mode 100644 index 0000000..be57a32 Binary files /dev/null and b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/8CCAAAF0CE227E7FC49FFF5F8B327F6F089B599B4E50D0BFE020534387F0A55E/IndexedDB.sqlite3-shm differ diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/8CCAAAF0CE227E7FC49FFF5F8B327F6F089B599B4E50D0BFE020534387F0A55E/IndexedDB.sqlite3-wal b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/8CCAAAF0CE227E7FC49FFF5F8B327F6F089B599B4E50D0BFE020534387F0A55E/IndexedDB.sqlite3-wal new file mode 100644 index 0000000..e69de29 diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/9A5C650E71B78742E3C24A4339872827B898B67671BC228E97F89BDE22407079/IndexedDB.sqlite3 b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/9A5C650E71B78742E3C24A4339872827B898B67671BC228E97F89BDE22407079/IndexedDB.sqlite3 new file mode 100644 index 0000000..2a70e30 Binary files /dev/null and b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/9A5C650E71B78742E3C24A4339872827B898B67671BC228E97F89BDE22407079/IndexedDB.sqlite3 differ diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/9A5C650E71B78742E3C24A4339872827B898B67671BC228E97F89BDE22407079/IndexedDB.sqlite3-shm b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/9A5C650E71B78742E3C24A4339872827B898B67671BC228E97F89BDE22407079/IndexedDB.sqlite3-shm new file mode 100644 index 0000000..67d81df Binary files /dev/null and b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/9A5C650E71B78742E3C24A4339872827B898B67671BC228E97F89BDE22407079/IndexedDB.sqlite3-shm differ diff --git a/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/9A5C650E71B78742E3C24A4339872827B898B67671BC228E97F89BDE22407079/IndexedDB.sqlite3-wal b/home/.surf/cache/databases/indexeddb/v1/https_mega.nz_0/9A5C650E71B78742E3C24A4339872827B898B67671BC228E97F89BDE22407079/IndexedDB.sqlite3-wal new file mode 100644 index 0000000..e69de29 diff --git a/home/.surf/cache/hsts-storage.sqlite b/home/.surf/cache/hsts-storage.sqlite new file mode 100644 index 0000000..cf7739a Binary files /dev/null and b/home/.surf/cache/hsts-storage.sqlite differ diff --git a/home/.surf/cache/localstorage/https_acort.animefull.top_0.localstorage b/home/.surf/cache/localstorage/https_acort.animefull.top_0.localstorage new file mode 100644 index 0000000..f71c189 Binary files /dev/null and b/home/.surf/cache/localstorage/https_acort.animefull.top_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_buencosplay.com_0.localstorage b/home/.surf/cache/localstorage/https_buencosplay.com_0.localstorage new file mode 100644 index 0000000..ca2e1dc Binary files /dev/null and b/home/.surf/cache/localstorage/https_buencosplay.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_buencosplay.com_0.localstorage-shm b/home/.surf/cache/localstorage/https_buencosplay.com_0.localstorage-shm new file mode 100644 index 0000000..c69648a Binary files /dev/null and b/home/.surf/cache/localstorage/https_buencosplay.com_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_buencosplay.com_0.localstorage-wal b/home/.surf/cache/localstorage/https_buencosplay.com_0.localstorage-wal new file mode 100644 index 0000000..9fefa4b Binary files /dev/null and b/home/.surf/cache/localstorage/https_buencosplay.com_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_concepto.de_0.localstorage b/home/.surf/cache/localstorage/https_concepto.de_0.localstorage new file mode 100644 index 0000000..ca2e1dc Binary files /dev/null and b/home/.surf/cache/localstorage/https_concepto.de_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_concepto.de_0.localstorage-shm b/home/.surf/cache/localstorage/https_concepto.de_0.localstorage-shm new file mode 100644 index 0000000..8e4c368 Binary files /dev/null and b/home/.surf/cache/localstorage/https_concepto.de_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_concepto.de_0.localstorage-wal b/home/.surf/cache/localstorage/https_concepto.de_0.localstorage-wal new file mode 100644 index 0000000..e0c9a0b Binary files /dev/null and b/home/.surf/cache/localstorage/https_concepto.de_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_docs.oracle.com_0.localstorage b/home/.surf/cache/localstorage/https_docs.oracle.com_0.localstorage new file mode 100644 index 0000000..7018670 Binary files /dev/null and b/home/.surf/cache/localstorage/https_docs.oracle.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_drive.google.com_0.localstorage b/home/.surf/cache/localstorage/https_drive.google.com_0.localstorage new file mode 100644 index 0000000..5c1a2cc Binary files /dev/null and b/home/.surf/cache/localstorage/https_drive.google.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_github.com_0.localstorage b/home/.surf/cache/localstorage/https_github.com_0.localstorage new file mode 100644 index 0000000..003aeb1 Binary files /dev/null and b/home/.surf/cache/localstorage/https_github.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_inmanga.com_0.localstorage b/home/.surf/cache/localstorage/https_inmanga.com_0.localstorage new file mode 100644 index 0000000..3f8b57b Binary files /dev/null and b/home/.surf/cache/localstorage/https_inmanga.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_inmanga.com_0.localstorage-shm b/home/.surf/cache/localstorage/https_inmanga.com_0.localstorage-shm new file mode 100644 index 0000000..df25c2d Binary files /dev/null and b/home/.surf/cache/localstorage/https_inmanga.com_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_inmanga.com_0.localstorage-wal b/home/.surf/cache/localstorage/https_inmanga.com_0.localstorage-wal new file mode 100644 index 0000000..53433c4 Binary files /dev/null and b/home/.surf/cache/localstorage/https_inmanga.com_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_leermanga.net_0.localstorage b/home/.surf/cache/localstorage/https_leermanga.net_0.localstorage new file mode 100644 index 0000000..9a44e68 Binary files /dev/null and b/home/.surf/cache/localstorage/https_leermanga.net_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_leermanga.net_0.localstorage-shm b/home/.surf/cache/localstorage/https_leermanga.net_0.localstorage-shm new file mode 100644 index 0000000..3bb67f4 Binary files /dev/null and b/home/.surf/cache/localstorage/https_leermanga.net_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_leermanga.net_0.localstorage-wal b/home/.surf/cache/localstorage/https_leermanga.net_0.localstorage-wal new file mode 100644 index 0000000..2834228 Binary files /dev/null and b/home/.surf/cache/localstorage/https_leermanga.net_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_mega.nz_0.localstorage b/home/.surf/cache/localstorage/https_mega.nz_0.localstorage new file mode 100644 index 0000000..15c9af4 Binary files /dev/null and b/home/.surf/cache/localstorage/https_mega.nz_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_mega.nz_0.localstorage-shm b/home/.surf/cache/localstorage/https_mega.nz_0.localstorage-shm new file mode 100644 index 0000000..5ffadae Binary files /dev/null and b/home/.surf/cache/localstorage/https_mega.nz_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_mega.nz_0.localstorage-wal b/home/.surf/cache/localstorage/https_mega.nz_0.localstorage-wal new file mode 100644 index 0000000..11e1a17 Binary files /dev/null and b/home/.surf/cache/localstorage/https_mega.nz_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_sourceforge.net_0.localstorage b/home/.surf/cache/localstorage/https_sourceforge.net_0.localstorage new file mode 100644 index 0000000..ca2e1dc Binary files /dev/null and b/home/.surf/cache/localstorage/https_sourceforge.net_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_sourceforge.net_0.localstorage-shm b/home/.surf/cache/localstorage/https_sourceforge.net_0.localstorage-shm new file mode 100644 index 0000000..5019823 Binary files /dev/null and b/home/.surf/cache/localstorage/https_sourceforge.net_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_sourceforge.net_0.localstorage-wal b/home/.surf/cache/localstorage/https_sourceforge.net_0.localstorage-wal new file mode 100644 index 0000000..47cf9e8 Binary files /dev/null and b/home/.surf/cache/localstorage/https_sourceforge.net_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_sysdfree.wordpress.com_0.localstorage b/home/.surf/cache/localstorage/https_sysdfree.wordpress.com_0.localstorage new file mode 100644 index 0000000..ca6c4ca Binary files /dev/null and b/home/.surf/cache/localstorage/https_sysdfree.wordpress.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_tedium.co_0.localstorage b/home/.surf/cache/localstorage/https_tedium.co_0.localstorage new file mode 100644 index 0000000..38a501a Binary files /dev/null and b/home/.surf/cache/localstorage/https_tedium.co_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_tioanime.com_0.localstorage b/home/.surf/cache/localstorage/https_tioanime.com_0.localstorage new file mode 100644 index 0000000..394dea5 Binary files /dev/null and b/home/.surf/cache/localstorage/https_tioanime.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_tioanime.com_0.localstorage-shm b/home/.surf/cache/localstorage/https_tioanime.com_0.localstorage-shm new file mode 100644 index 0000000..076fe3d Binary files /dev/null and b/home/.surf/cache/localstorage/https_tioanime.com_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_tioanime.com_0.localstorage-wal b/home/.surf/cache/localstorage/https_tioanime.com_0.localstorage-wal new file mode 100644 index 0000000..6becb22 Binary files /dev/null and b/home/.surf/cache/localstorage/https_tioanime.com_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_unrar.org_0.localstorage b/home/.surf/cache/localstorage/https_unrar.org_0.localstorage new file mode 100644 index 0000000..1054d9d Binary files /dev/null and b/home/.surf/cache/localstorage/https_unrar.org_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_web.telegram.org_0.localstorage b/home/.surf/cache/localstorage/https_web.telegram.org_0.localstorage new file mode 100644 index 0000000..7832d9b Binary files /dev/null and b/home/.surf/cache/localstorage/https_web.telegram.org_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_workspace.google.com_0.localstorage b/home/.surf/cache/localstorage/https_workspace.google.com_0.localstorage new file mode 100644 index 0000000..0b890cc Binary files /dev/null and b/home/.surf/cache/localstorage/https_workspace.google.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_www.1000chistes.com_0.localstorage b/home/.surf/cache/localstorage/https_www.1000chistes.com_0.localstorage new file mode 100644 index 0000000..43a67a4 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.1000chistes.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_www.google.com_0.localstorage b/home/.surf/cache/localstorage/https_www.google.com_0.localstorage new file mode 100644 index 0000000..2d5b7b1 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.google.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_www.google.com_0.localstorage-shm b/home/.surf/cache/localstorage/https_www.google.com_0.localstorage-shm new file mode 100644 index 0000000..d1e9a93 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.google.com_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_www.google.com_0.localstorage-wal b/home/.surf/cache/localstorage/https_www.google.com_0.localstorage-wal new file mode 100644 index 0000000..e69de29 diff --git a/home/.surf/cache/localstorage/https_www.linux.com_0.localstorage b/home/.surf/cache/localstorage/https_www.linux.com_0.localstorage new file mode 100644 index 0000000..fccd703 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.linux.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_www.linux.com_0.localstorage-shm b/home/.surf/cache/localstorage/https_www.linux.com_0.localstorage-shm new file mode 100644 index 0000000..5e15faf Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.linux.com_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_www.linux.com_0.localstorage-wal b/home/.surf/cache/localstorage/https_www.linux.com_0.localstorage-wal new file mode 100644 index 0000000..55b6023 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.linux.com_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_www.lrb.co.uk_0.localstorage b/home/.surf/cache/localstorage/https_www.lrb.co.uk_0.localstorage new file mode 100644 index 0000000..ca2e1dc Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.lrb.co.uk_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_www.lrb.co.uk_0.localstorage-shm b/home/.surf/cache/localstorage/https_www.lrb.co.uk_0.localstorage-shm new file mode 100644 index 0000000..1e3b6f0 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.lrb.co.uk_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_www.lrb.co.uk_0.localstorage-wal b/home/.surf/cache/localstorage/https_www.lrb.co.uk_0.localstorage-wal new file mode 100644 index 0000000..dcf8b74 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.lrb.co.uk_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_www.osnews.com_0.localstorage b/home/.surf/cache/localstorage/https_www.osnews.com_0.localstorage new file mode 100644 index 0000000..ca2e1dc Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.osnews.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_www.osnews.com_0.localstorage-shm b/home/.surf/cache/localstorage/https_www.osnews.com_0.localstorage-shm new file mode 100644 index 0000000..050b278 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.osnews.com_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_www.osnews.com_0.localstorage-wal b/home/.surf/cache/localstorage/https_www.osnews.com_0.localstorage-wal new file mode 100644 index 0000000..95fa0b2 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.osnews.com_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_www.phoronix.com_0.localstorage b/home/.surf/cache/localstorage/https_www.phoronix.com_0.localstorage new file mode 100644 index 0000000..0d764b8 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.phoronix.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_www.phoronix.com_0.localstorage-shm b/home/.surf/cache/localstorage/https_www.phoronix.com_0.localstorage-shm new file mode 100644 index 0000000..5172a4b Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.phoronix.com_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_www.phoronix.com_0.localstorage-wal b/home/.surf/cache/localstorage/https_www.phoronix.com_0.localstorage-wal new file mode 100644 index 0000000..3a45738 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.phoronix.com_0.localstorage-wal differ diff --git a/home/.surf/cache/localstorage/https_www.reddit.com_0.localstorage b/home/.surf/cache/localstorage/https_www.reddit.com_0.localstorage new file mode 100644 index 0000000..df5b173 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.reddit.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_www.tecmint.com_0.localstorage b/home/.surf/cache/localstorage/https_www.tecmint.com_0.localstorage new file mode 100644 index 0000000..35d7ce9 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www.tecmint.com_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_www3.animeflv.net_0.localstorage b/home/.surf/cache/localstorage/https_www3.animeflv.net_0.localstorage new file mode 100644 index 0000000..3a287b8 Binary files /dev/null and b/home/.surf/cache/localstorage/https_www3.animeflv.net_0.localstorage differ diff --git a/home/.surf/cache/localstorage/https_www3.animeflv.net_0.localstorage-shm b/home/.surf/cache/localstorage/https_www3.animeflv.net_0.localstorage-shm new file mode 100644 index 0000000..8c4c12c Binary files /dev/null and b/home/.surf/cache/localstorage/https_www3.animeflv.net_0.localstorage-shm differ diff --git a/home/.surf/cache/localstorage/https_www3.animeflv.net_0.localstorage-wal b/home/.surf/cache/localstorage/https_www3.animeflv.net_0.localstorage-wal new file mode 100644 index 0000000..d5109da Binary files /dev/null and b/home/.surf/cache/localstorage/https_www3.animeflv.net_0.localstorage-wal differ diff --git a/home/.surf/cache/serviceworkers/Scripts/V1/2tLzTJmTJ05seZlu6i8lz2BjYQLl2IXmjHaX79vXMv8/O9ADKiekCzhwm27PG2zZbo1Htfe3_9ZZZYMVlijbbFg/boPtc31q0zsw_prn4rXJ9NpWgdoUK8WeVt85KvC-Gpw b/home/.surf/cache/serviceworkers/Scripts/V1/2tLzTJmTJ05seZlu6i8lz2BjYQLl2IXmjHaX79vXMv8/O9ADKiekCzhwm27PG2zZbo1Htfe3_9ZZZYMVlijbbFg/boPtc31q0zsw_prn4rXJ9NpWgdoUK8WeVt85KvC-Gpw new file mode 100644 index 0000000..54603d5 --- /dev/null +++ b/home/.surf/cache/serviceworkers/Scripts/V1/2tLzTJmTJ05seZlu6i8lz2BjYQLl2IXmjHaX79vXMv8/O9ADKiekCzhwm27PG2zZbo1Htfe3_9ZZZYMVlijbbFg/boPtc31q0zsw_prn4rXJ9NpWgdoUK8WeVt85KvC-Gpw @@ -0,0 +1 @@ +var sw=function(t){"use strict";const e=self,n=/^\/(r|user)\/(\w+)\/(?:(?:comments\/)(\w+)\/(?:(?:\w+\/)(\w+)\/?)?)?/,i=/\/chat\/(?:r\/)?(\w*)?\/?(?:channel\/)(?:sendbird_group_channel_)?(\w+)\/?(?:message\/)?(\w+)?/,o=(t,e)=>n=>{n.filter(e=>e.data.message_type===t).slice(0,-e).forEach(t=>t.close())},a=o("broadcast_follower",3),r=o("broadcast_recommendation",3);e.addEventListener("install",t=>t.waitUntil(e.skipWaiting())),e.addEventListener("activate",t=>{t.waitUntil((async()=>{await e.clients.claim(),await l(t,"registerWithServiceWorker",{})})())});const s={},c=t=>{const n=t.source.id;s[n]={};const{data:{v2EventBoilerPlate:i}}=t;void 0!==i&&m.set("v2_event_boiler_plate",JSON.stringify(i)),t.waitUntil(u()),t.waitUntil((async()=>{const t=await e.clients.matchAll({includeUncontrolled:!0,type:"window"}),n=new Set(t.filter(t=>!!t).map(t=>t.id)),i=Object.keys(s);for(const t of i)n.has(t)||delete s[t]})())},d=t=>{const{badgeCounts:n}=t.data;t.waitUntil((async(t,n)=>{await e.clients.claim(),await l(t,"badgeCountSync",n)})(t,n))};e.addEventListener("message",t=>{const{data:{command:e}}=t;"registerClient"===e?c(t):"badgeCountSync"===e?d(t):"sendV2Event"===e?w([t.data.payload]):"sendV2Events"===e?w(t.data.payload):"sendV2EventsData"===e&&_(t.data.payload)});const l=async(t,n,i)=>{const o=await e.clients.matchAll({includeUncontrolled:!0,type:"window"});for(let t=0;t{if(0===f.length)return;const t=(await e.clients.matchAll({includeUncontrolled:!0,type:"window"})).find(t=>!!t&&t.id in s);if(t){for(const e of f)t.postMessage(e);f=[]}},h=t=>{const e={},{pathname:i}=new URL(t);if(!i)return e;const o=i.match(n);if(!o)return e;const[a,r,s,c]=o.slice(1);return r&&"r"===a&&(e.subreddit={name:r}),s&&(e.post={id:"t3_"+s}),c&&(e.comment={id:"t1_"+c}),e},p=async(t,e,n)=>{let i;const o=await m.get("v2_event_boiler_plate");if(void 0!==o&&(i=JSON.parse(o)),void 0===i)return;const a=(new Date).toISOString();i.action=e,void 0===i.notification&&(i.notification={}),i.notification.id=n.correlation_id,i.notification.type=n.message_type,i.correlationId=n.correlation_id,i.timestamp=a,void 0===i.platform&&(i.platform={}),i.platform.device_id=n.device_id,i={...i,...h(n.link)},"click"===e&&((t,e)=>{if(e){const n=e.post_id,i=e.subreddit_id;n&&(t.post||(t.post={}),t.post={...t.post,id:n}),i&&(t.subreddit||(t.subreddit={}),t.subreddit={...t.subreddit,id:i})}})(i,n.extra_payload_fields),await w([i])},w=async t=>{const e={headers:{"Content-Type":"application/json"},method:"POST",body:JSON.stringify({events:t})};try{await fetch("/",e)}catch(t){console.error(t)}},_=async({data:t,headers:e={}})=>{const n={headers:{...e,"Content-Type":"text/plain"},method:"POST",body:t};try{await fetch("/",n)}catch(t){console.error(t)}};e.addEventListener("push",t=>{const n=t.data.json(),o=n.title,s=n.options||{},c=n.data;Boolean(c&&c.extra_payload_fields)&&(s.data||(s.data={}),s.data.extra_payload_fields=c.extra_payload_fields),s.icon||(s.icon="https://www.redditstatic.com/desktop2x/img/favicon/android-icon-192x192.png"),t.waitUntil(p(0,"receive",s.data));const d=((t={})=>{if(t.group_id)return t.group_id;if(t.data&&t.data.link){const e=t.data.link.match(i);if(e&&e.length>2){return e[2]}}})(s);d&&(s.tag=d,s.renotify=!0);const l=s.data.auto_dismiss_options;void 0!==l?"device_default"!==l.behavior&&(s.requireInteraction=!0):s.requireInteraction=!1,t.waitUntil(e.registration.showNotification(o,s).then(()=>e.registration.getNotifications()).then(t=>{if(a(t),r(t),void 0===l||"timed"!==l.behavior)return;let e;for(let i=0;i{t.notification.close();const e=t.notification.data.link,n=e.match(i),o=Boolean(n),a=o?n[2]:"",r=new RegExp("/chat/(?:r/)?(w*)?/?(?:channel/)(?:sendbird_group_channel_)?"+a),c=t=>{try{const n=e.replace(/sendbird_group_channel_/,"");t.focus(),t.postMessage({type:"navigate.chat",data:{href:n}})}catch(t){console.error(t)}};t.waitUntil(clients.matchAll({type:"window"}).then(t=>{const n=t.filter(t=>"focus"in t),a=n.filter(t=>t.id in s),d=o?n.filter(t=>i.test(t.url)):[],l=o?d.filter(t=>r.test(t.url)):[],f=n.filter(t=>t.url===e),u=f.find(t=>t.focused);if(u)u.focus();else if(f.length>0)f[0].focus();else if(o&&l.length>0)c(l[0]);else if(o&&d.length>0)c(d[0]);else if(o&&a.length>0)c(a[0]);else try{clients.openWindow(e)}catch(t){console.error(t)}})),t.waitUntil(p(0,"click",t.notification.data))}),e.addEventListener("notificationclose",t=>{t.waitUntil(p(0,"close",t.notification.data))});var m=function(t){class e{constructor(t="keyval-store",e="keyval"){this.storeName=e,this._dbp=new Promise((n,i)=>{const o=indexedDB.open(t,1);o.onerror=()=>i(o.error),o.onsuccess=()=>n(o.result),o.onupgradeneeded=()=>{o.result.createObjectStore(e)}})}_withIDBStore(t,e){return this._dbp.then(n=>new Promise((i,o)=>{const a=n.transaction(this.storeName,t);a.oncomplete=()=>i(),a.onabort=a.onerror=()=>o(a.error),e(a.objectStore(this.storeName))}))}}let n;function i(){return n||(n=new e),n}return t.Store=e,t.get=function(t,e=i()){let n;return e._withIDBStore("readonly",e=>{n=e.get(t)}).then(()=>n.result)},t.set=function(t,e,n=i()){return n._withIDBStore("readwrite",n=>{n.put(e,t)})},t.del=function(t,e=i()){return e._withIDBStore("readwrite",e=>{e.delete(t)})},t.clear=function(t=i()){return t._withIDBStore("readwrite",t=>{t.clear()})},t.keys=function(t=i()){const e=[];return t._withIDBStore("readonly",t=>{(t.openKeyCursor||t.openCursor).call(t).onsuccess=function(){this.result&&(e.push(this.result.key),this.result.continue())}}).then(()=>e)},t}({});return e.addEventListener("fetch",()=>{}),t.sw=e,t}({}); diff --git a/home/.surf/cache/serviceworkers/Scripts/V1/salt b/home/.surf/cache/serviceworkers/Scripts/V1/salt new file mode 100644 index 0000000..1b6b9f2 --- /dev/null +++ b/home/.surf/cache/serviceworkers/Scripts/V1/salt @@ -0,0 +1 @@ +]fy \ No newline at end of file diff --git a/home/.surf/cache/serviceworkers/ServiceWorkerRegistrations-8.sqlite3 b/home/.surf/cache/serviceworkers/ServiceWorkerRegistrations-8.sqlite3 new file mode 100644 index 0000000..9cd6c8d Binary files /dev/null and b/home/.surf/cache/serviceworkers/ServiceWorkerRegistrations-8.sqlite3 differ diff --git a/home/.surf/cache/serviceworkers/ServiceWorkerRegistrations-8.sqlite3-shm b/home/.surf/cache/serviceworkers/ServiceWorkerRegistrations-8.sqlite3-shm new file mode 100644 index 0000000..c14a638 Binary files /dev/null and b/home/.surf/cache/serviceworkers/ServiceWorkerRegistrations-8.sqlite3-shm differ diff --git a/home/.surf/cache/serviceworkers/ServiceWorkerRegistrations-8.sqlite3-wal b/home/.surf/cache/serviceworkers/ServiceWorkerRegistrations-8.sqlite3-wal new file mode 100644 index 0000000..e69de29 diff --git a/home/.surf/cookies.txt b/home/.surf/cookies.txt new file mode 100644 index 0000000..dcc8209 --- /dev/null +++ b/home/.surf/cookies.txt @@ -0,0 +1,201 @@ +#HttpOnly_.google.com TRUE / TRUE 1688597665 AEC ARSKqsKR_190Gu2J0Ox46f4gZ0X9KnIT3_6QsYf6jAWQlkHXp9Drn9-rOwU Lax +#HttpOnly_.google.com TRUE / TRUE 1736117668 ANID AHWqTUkwoiG3ZwBEOeMa20RTw7942r3UOvZ5EAI2rdxO_Q8n2AjAJMmPNjG6aQ6R None +.concepto.de TRUE / FALSE 1736117752 _ga GA1.2.1718631787.1673045749 None +.concepto.de TRUE / FALSE 1673132152 _gid GA1.2.632816763.1673045749 None +concepto.de FALSE / FALSE 1704581752 _tfpvi ZTA1YTRkNjItMmZiYy00YTk3LTgwNWUtMDA2ZGYzNWEzZjAxIy03LTM%3D None +.concepto.de TRUE / FALSE 1706741757 __gads ID=0a18e46c5fe8596e:T=1673045754:RT=1673045754:S=ALNI_MZ7lCxF81dD307tRdhaiss2WGbJ7g None +.concepto.de TRUE / FALSE 1706741757 __gpi UID=000009de58b0ca91:T=1673045754:RT=1673045754:S=ALNI_MYw77rotSJj_GOzl10h5TjRvmBaBw None +.google.com TRUE / TRUE 1675638164 1P_JAR 2023-01-06-23 None +wallhaven.cc FALSE / FALSE 1707047616 _pk_id.1.01b8 c4194be139be6554.1673092413. Lax +.google.com TRUE /intl FALSE 1736164659 _ga GA1.2-2.685381266.1673092651 None +.google.com TRUE /intl FALSE 1673179059 _gid GA1.2-2.500657073.1673092651 None +.google.com TRUE /intl FALSE 1736164659 _ga_3WTQFP9ECQ GS1.1-2.1673092650.1.0.1673092656.0.0.0 None +accounts.google.com FALSE / TRUE 1675684662 OTZ 6846478_76_76__76_ None +#HttpOnly_accounts.google.com FALSE / TRUE 1736164674 __Host-GAPS 1:0tbVOZb08-dH9_-TvPXtevPwysXAZQ:nhZG1Anui5NqI-qe None +www3.animeflv.net FALSE / FALSE 1673707573 dom3ic8zudi28v8lr6fgphwffqoz0j6c b587d72c-7e51-4f36-91e7-857ce9521920%3A1%3A1 Lax +.github.com TRUE / TRUE 1704639314 _octo GH1.1.1967085541.1673103310 Lax +#HttpOnly_.github.com TRUE / TRUE 1704639314 logged_in no Lax +www.linux.com FALSE / FALSE 1673190943 ln_or eyIxMjQxMDUwIjoiZCJ9 None +.linux.com TRUE / FALSE 1706800544 __gads ID=d0c38e727b915c70-227646c48a7f0068:T=1673104540:RT=1673104540:S=ALNI_MbCqn-G6vJ6k04m9FOIejsl6rOrEQ None +.linux.com TRUE / FALSE 1706800544 __gpi UID=000009e1e4de8533:T=1673104540:RT=1673104540:S=ALNI_Marf4AA7TV8iktc5oLKolVPt8F2UQ None +www.linux.com FALSE / TRUE 1736262948 drift_aid e31c8047-d5fe-4109-9ff1-89186ae2d690 None +www.linux.com FALSE / TRUE 1736262948 driftt_aid e31c8047-d5fe-4109-9ff1-89186ae2d690 None +.google.com TRUE /chrome FALSE 1736177759 _ga GA1.2-2.1984557673.1673105757 None +.google.com TRUE /chrome FALSE 1673192159 _gid GA1.2-2.941686126.1673105757 None +.google.com TRUE /chrome/ FALSE 1736177759 _ga GA1.1-2.1984557673.1673105757 None +.google.com TRUE /chrome/ FALSE 1736177776 _ga_B7W0ZKZYDK GS1.1-2.1673105757.1.1.1673105774.0.0.0 None +.google.com TRUE /chrome/ FALSE 1736177776 _ga_EGC7PESK0Z GS1.1-2.1673105757.1.1.1673105774.0.0.0 None +.apprepo.de TRUE / FALSE 1736177783 _ga GA1.2.554766666.1673105781 None +.apprepo.de TRUE / FALSE 1673192183 _gid GA1.2.1607077992.1673105781 None +.google.com TRUE /drive FALSE 1736178202 _ga GA1.2-2.609545346.1673106196 None +.google.com TRUE /drive FALSE 1673192602 _gid GA1.2-2.282866516.1673106196 None +.google.com TRUE /drive FALSE 1736178202 _ga_3WTQFP9ECQ GS1.1-2.1673106196.1.0.1673106200.0.0.0 None +.workspace.google.com TRUE /essentials/ FALSE 1736178204 __utma 61317162.820306986.1673106203.1673106203.1673106203.1 None +.workspace.google.com TRUE /essentials/ FALSE 1688874204 __utmz 61317162.1673106203.1.1.utmcsr=driveforwork|utmccn=(not%20set)|utmcmd=et|utmcct=trydriveforyourteam None +.workspace.google.com TRUE / FALSE 1680882205 _gcl_au 1.1.1023127559.1673106204 None +.workspace.google.com TRUE / FALSE 1736178222 _ga GA1.3.820306986.1673106203 None +.workspace.google.com TRUE / FALSE 1673192622 _gid GA1.3.810059992.1673106204 None +.workspace.google.com TRUE / FALSE 1736178222 __utma 61317162.820306986.1673106203.1673106203.1673106203.1 None +.workspace.google.com TRUE / FALSE 1688874222 __utmz 61317162.1673106203.1.1.utmcsr=driveforwork|utmccn=(not%20set)|utmcmd=et|utmcct=trydriveforyourteam None +.workspace.google.com TRUE / FALSE 1736178233 _ga_FWCBRW1RY8 GS1.1.1673106204.1.1.1673106231.0.0.0 None +.tedium.co TRUE / FALSE 1673192741 _gid GA1.2.1339855361.1673106339 None +.tedium.co TRUE / FALSE 1736178341 _ga GA1.1.1283516882.1673106339 None +.tedium.co TRUE / FALSE 1736178369 _ga_XG4KF6EG57 GS1.1.1673106339.1.1.1673106367.0.0.0 None +.linux.com TRUE / FALSE 1736178375 _ga GA1.2.909593696.1673104539 None +.linux.com TRUE / FALSE 1673192775 _gid GA1.2.1407284491.1673104539 None +www.linux.com FALSE / TRUE 1673192775 WKJA-iTSOfnuMbH zRH2kjCdbD None +www.linux.com FALSE / TRUE 1673192775 NgeFLwscvCGrzBj oapke%5BQ0 None +www.linux.com FALSE / TRUE 1673192775 J_zXNCQi 0cKHlogFD3C.zXq4 None +www.linux.com FALSE / FALSE 1688658377 __hstc 229720963.ea91f22a8227db6effb34ca58aef46ac.1673104542664.1673104542664.1673106375469.2 Lax +www.linux.com FALSE / FALSE 1688658377 hubspotutk ea91f22a8227db6effb34ca58aef46ac Lax +.linux.com TRUE / FALSE 1680882378 _fbp fb.1.1673104543664.1284134914 None +.reddit.com TRUE / TRUE 1736265097 loid 0000000000vg8qpip5.2.1673106696000.Z0FBQUFBQmp1WlVJcXR0Nkk4WktURG1ZejJLN0s3X1ZUUVNsa0J5bnB0ZW1FLVMwdk1oNlQ0ajFqdEpkWFdPQ1JrcHYwVU5XMjYzNU11MjhFMWpXNkhHMU9zLTc3aGVOM3pHUnBnbHczTmRFcDRMS2R1QkNpWjVDdlVoTkN5cjh4cnBJNFh3WXc5Ymc None +#HttpOnly_.reddit.com TRUE / TRUE 1736265097 token_v2 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzMxOTI5NzYsInN1YiI6Ii12MGRsNjBfcFRrSHNNeHo5SXlxOHktNk80U2pQR3ciLCJsb2dnZWRJbiI6ZmFsc2UsInNjb3BlcyI6WyIqIiwiZW1haWwiLCJwaWkiXX0.5dl72yei9KPLLb3m0aujRcly7zTI8dyGEW_45rhnjtE None +.reddit.com TRUE / TRUE 1736178698 csv 2 None +.reddit.com TRUE / TRUE 1736178697 edgebucket qqNVG6E6DX3o2ha5b4 None +www.reddit.com FALSE / FALSE 1688658715 g_state {"i_p":1673113913192,"i_l":1} None +sourceforge.net FALSE / FALSE 1688874787 _pk_ref.39.0d7e %5B%22%22%2C%22%22%2C1673106786%2C%22https%3A%2F%2Fwww.linux.com%2F%22%5D None +sourceforge.net FALSE / FALSE 1673193187 ln_or eyI5NzA1NSI6ImQifQ%3D%3D None +.sourceforge.net TRUE / FALSE 1706802789 __gads ID=b9100abc61f3f740:T=1673106787:RT=1673106787:S=ALNI_Mb7uxu9uucbdDGgaa9kfBblOVTl1Q None +.sourceforge.net TRUE / FALSE 1706802789 __gpi UID=000009e1e5426ad0:T=1673106787:RT=1673106787:S=ALNI_MbWboJr-wrjwB0oZa6IkKA4ZjnIDw None +#HttpOnly_sourceforge.net FALSE / TRUE 1988466817 VISITOR e1ef7959-974c-45a3-ada5-58d98cf64cd9 None +#HttpOnly_sourceforge.net FALSE / TRUE 2147483649 sourceforge bb93ceae70adb17d322447b5c496a782bc434881gAJ9cQAoWAcAAABfZG9tYWlucQFOWAUAAABfcGF0aHECWAEAAAAvcQNYAwAAAF9pZHEEWCAAAABjN2VjMTE0MWFlMmI0OWYxOTA3ZTBlMjE1NGI1NTcxN3EFWAMAAABrZXlxBlgkAAAAZTFlZjc5NTktOTc0Yy00NWEzLWFkYTUtNThkOThjZjY0Y2Q5cQdYBQAAAHByZWZzcQh9cQlYBgAAAGRsaGlzdHEKXXELfXEMKFgHAAAAcHJvamVjdHENfXEOKFgJAAAAc2hvcnRuYW1lcQ9YDQAAAG90dGVyLWJyb3dzZXJxEFgEAAAAbmFtZXERWA0AAABPdHRlciBCcm93c2VycRJYBQAAAHNmX2lkcRNKi3gfAHVYBwAAAHJlbGVhc2VxFH1xFShYCgAAAHNmX2ZpbGVfaWRxFkr2RLYBWAgAAABmaWxlbmFtZXEXWD8AAAAvb3R0ZXItYnJvd3Nlci1yYzEyL290dGVyLWJyb3dzZXItMC45Ljk5LjMtcmMxMi14ODZfNjQuQXBwSW1hZ2VxGFgEAAAAZGF0ZXEZY2RhdGV0aW1lCmRhdGV0aW1lCnEaY19jb2RlY3MKZW5jb2RlCnEbWAsAAAAHw6IJAhE3JAAAAHEcWAYAAABsYXRpbjFxHYZxHlJxH4VxIFJxIXV1YVgYAAAAcGVyc2lzdGVudF9xcy40ZmQ0YTU2YzQzcSKIWA4AAABfY3JlYXRpb25fdGltZXEjR0HY7mVadd/eWA4AAABfYWNjZXNzZWRfdGltZXEkR0HY7mVf6vbRdS4= Lax +sourceforge.net FALSE / FALSE 1707061988 _pk_id.39.0d7e cd247e71227be223.1673106786.1.1673106816.1673106786. None +.sourceforge.net TRUE / FALSE 1736178818 _ga GA1.2.1773587495.1673106786 None +.sourceforge.net TRUE / FALSE 1673193218 _gid GA1.2.492900069.1673106786 None +sourceforge.net FALSE / FALSE 1704642818 OAID dabf9220e4b5f37d79a2e9edc44a4858 None +.oracle.com TRUE / FALSE 1736265352 s_fid 054575A55A69BDD2-0F31F5CD7373DBEC None +.oracle.com TRUE / FALSE 1675698952 s_nr 1673106950967-New None +.oracle.com TRUE / FALSE 1736220807 ORA_FPC id=264c6b21-a3b6-4140-9aa2-adb9573a0d34 None +.oracle.com TRUE / FALSE 1704642956 WTPERSIST None +#HttpOnly_.4chan.org TRUE / TRUE 1704644736 cf_clearance 8cU.jKR9VydTbMkE.oeRk0cYNoobLdrETLMrq4pNS7A-1673108734-0-160 None +.boards.4chan.org TRUE / FALSE 1736180777 _ga GA1.3.1905696999.1673108735 None +.boards.4chan.org TRUE / FALSE 1673195177 _gid GA1.3.1267208648.1673108735 None +www.4chan.org FALSE / FALSE 1704644781 4chan_disclaimer 1 None +.4chan.org TRUE / FALSE 1736180781 _ga GA1.2.1905696999.1673108735 None +.4chan.org TRUE / FALSE 1673195181 _gid GA1.2.1267208648.1673108735 None +www.phoronix.com FALSE / TRUE 3820593404 fs.session.id 5dd37f59-c97c-4f43-8bbb-0c54f3d93d41 None +.phoronix.com TRUE / FALSE 1704645760 _au_1d AU1D-0100-001673109758-8N3VD83R-PNVH None +.phoronix.com TRUE / FALSE 1704645760 _au_last_seen_pixels eyJhcG4iOjE2NzMxMDk3NTgsInR0ZCI6MTY3MzEwOTc1OCwicHViIjoxNjczMTA5NzU4LCJ0YXBhZCI6MTY3MzEwOTc1OCwiYWR4IjoxNjczMTA5NzU4LCJnb28iOjE2NzMxMDk3NTgsImltcHIiOjE2NzMxMDk3NTgsImJlZXMiOjE2NzMxMDk3NTgsIm1lZGlhbWF0aCI6MTY3MzEwOTc1OCwidW5ydWx5IjoxNjczMTA5NzU4fQ== None +.phoronix.com TRUE / FALSE 1680885763 _fbp fb.1.1673109760154.1908262063 None +.phoronix.com TRUE / FALSE 1706805796 __gads ID=b6ec8abf4a8429c1:T=1673109794:RT=1673109794:S=ALNI_MZixjaM8Fy7fkxFYBPfDxsYt7wjAw None +.phoronix.com TRUE / FALSE 1706805796 __gpi UID=000008f6c7df4629:T=1673109794:RT=1673109794:S=ALNI_Ma_txz3V4xExeKDgHgm2JC1T5NTeg None +#HttpOnly_consultaprocesos.ramajudicial.gov.co FALSE / FALSE 1704646188 cookiesession1 678B28AE068A567BC546B52B5A5BAD1A None +.procesos.ramajudicial.gov.co TRUE / FALSE 1736182192 __utma 103722945.1115762075.1673110188.1673110191.1673110191.1 None +.procesos.ramajudicial.gov.co TRUE / FALSE 1688878192 __utmz 103722945.1673110191.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) None +.ramajudicial.gov.co TRUE / FALSE 1736182201 _ga GA1.3.1115762075.1673110188 None +.ramajudicial.gov.co TRUE / FALSE 1673196601 _gid GA1.3.1173102123.1673110188 None +.wordpress.com TRUE / FALSE 1673196949 ccpa_applies false None +.wordpress.com TRUE / FALSE 1673196949 usprivacy 1--- None +.wordpress.com TRUE / FALSE 1736182562 __utma 11735858.1067935972.1673110548.1673110548.1673110548.1 None +.wordpress.com TRUE / FALSE 1688878562 __utmz 11735858.1673110548.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) None +sysdfree.wordpress.com FALSE / TRUE 1736182563 __ATA_tuuid b3e584e1-9556-4942-ac5f-1951b0e0376e None +sysdfree.wordpress.com FALSE / FALSE 1688662564 eucookielaw 1688662562987 None +sysdfree.wordpress.com FALSE / FALSE 1688662564 personalized-ads-consent 1688662562987 None +www.linuxtoday.com FALSE / FALSE 1704646773 advanced_ads_pro_visitor_referrer %7B%22expires%22%3A1704646771%2C%22data%22%3A%22https%3A//duckduckgo.com/%22%7D None +www.linuxtoday.com FALSE / FALSE 1988470773 advanced_ads_page_impressions %7B%22expires%22%3A1988470771%2C%22data%22%3A1%7D None +www.linuxtoday.com FALSE / FALSE 1675702773 advanced_ads_browser_width 746 None +.linuxtoday.com TRUE / FALSE 1673197174 _gid GA1.2.1271865058.1673110772 None +www.linuxtoday.com FALSE / TRUE 1704646774 _ntv_uid 10fb73da-7556-4e6b-a9bf-136125c7d7c8 None +.linuxtoday.com TRUE / FALSE 1736182774 _ga_VQMGV911GT GS1.1.1673110772.1.0.1673110772.0.0.0 None +.linuxtoday.com TRUE / FALSE 1736182774 _ga GA1.1.1409465867.1673110772 None +#HttpOnly_.www.osnews.com TRUE / FALSE 1673370045 PHPSESSID 6bd27e40c314ecabb5e96a822433825f None +.osnews.com TRUE / TRUE 1704646843 ezosuibasgeneris-1 4fce6546-c9df-4080-6597-a10d293b2192 None +.osnews.com TRUE / FALSE 1673283643 active_template::153346 pub_site.1673110841 None +.osnews.com TRUE / FALSE 1673197245 ezepvv 228 None +.osnews.com TRUE / FALSE 1673283645 ezovuuidtime_153346 1673110843 None +www.osnews.com FALSE / FALSE 1893862846 ezds ffid%3D1%2Cw%3D1366%2Ch%3D768 None +www.osnews.com FALSE / FALSE 1893862846 ezohw w%3D746%2Ch%3D743 None +.osnews.com TRUE / FALSE 1736182847 _ga GA1.2.1289792012.1673110846 None +.osnews.com TRUE / FALSE 1673197247 _gid GA1.2.112051459.1673110846 None +.osnews.com TRUE / FALSE 1706979648 __qca P0-660616776-1673110845785 None +www.osnews.com FALSE / TRUE 1704646848 ezux_lpl_153346 1673110846745|c0365c60-c143-4769-69ca-ebaf28f55a09|false Lax +.osnews.com TRUE / FALSE 1706806848 __gpi UID=000009e1e6ad4817:T=1673110846:RT=1673110846:S=ALNI_MbOPJ3XYyt4wrAMUblzmqDcC1RNHA None +www.osnews.com FALSE / FALSE 1675702852 cnx_userId 1042f97ae11348d6a160091bd9a58733 None +.osnews.com TRUE / FALSE 1704646855 _sharedid d26e64f0-dd68-4263-9218-0c7997126f3b Lax +.osnews.com TRUE / FALSE 1696438856 _cc_id 16b6d57bc2bea5f29853deae57bef781 Lax +.osnews.com TRUE / FALSE 1688662857 _pubcid e19cf2e9-310e-4db2-8637-18b851487d49 Lax +.osnews.com TRUE / FALSE 1706806848 __gads ID=17affddac56e6cf2-22f01475897f00a3:T=1673110846:RT=1673110857:S=ALNI_MYEqHSHumvMXOdSjycKVVD_TLfkVw None +.animeflv.net TRUE / FALSE 1736184382 _ga_WRD6JCRSM0 GS1.1.1673112346.2.1.1673112380.0.0.0 None +.animeflv.net TRUE / FALSE 1736184382 _ga GA1.1.1268138122.1673102770 None +www3.animeflv.net FALSE / FALSE 1707326783 __atuvc 11%7C1 None +animefull.top FALSE / FALSE 1673717741 dom3ic8zudi28v8lr6fgphwffqoz0j6c 63ff8c16-8252-49be-ba6a-384da07a838d%3A3%3A1 Lax +playpaste.com FALSE / FALSE 1673199436 viewedad true None +acort.animefull.top FALSE / FALSE 1673717908 dom3ic8zudi28v8lr6fgphwffqoz0j6c 87d48670-896c-4a0d-9d65-6eb8dea82037%3A2%3A1 Lax +#HttpOnly_acort.animefull.top FALSE / TRUE 1673199515 app_visitor Q2FrZQ%3D%3D.OWViOWI2Yzg4MjQ2ZGQ0Mzc4MmUzZDZmYzgzMThmN2I1MjYxZDYyN2ExOTAwYWQ5YzlkM2JmNjM5Mzk3Nzc4OTu73bZTe6Lmw7RlYthQKVekFB5IYv%2Fw1UmHwmsnOpsCN1r56OtIFjRiyNBHFJ5j8TdXcG2eE8cD85uW8ixbyiBhhmqoNMXyikr1F63RMkwP None +#HttpOnly_.google.com TRUE / FALSE 1688924335 NID 511=MbHfxxZyuyRmJtRR7myqnssRh8jwZZS7o2q958dYJVsfKcNNjAH8JUcICGkXyOuR-HBYZ_xWjQMQRPgQz5lo0WdKlLqG-E79QbIPjQm6HN240k_z8lVrcWUX7tt1l13jC-ciczqM-Yh0ymbmmC3gl7jwiqyu2VoKulAnA3llW6U None +contacts.google.com FALSE / TRUE 1675705139 OTZ 6846819_76_76__76_ None +.playpaste.com TRUE / FALSE 1736185264 _ga GA1.2.678150173.1673113023 None +.playpaste.com TRUE / FALSE 1673199664 _gid GA1.2.276084147.1673113023 None +.tecmint.com TRUE / FALSE 1707673507 _awl 2.1673113505.5-1f461a83523e1230ea203c0e8e05af51-6763652d75732d6561737431-0 None +www.tecmint.com FALSE / TRUE 3820597156 fs.session.id 515a5af4-a94d-43ad-b562-e92e2f77dac9 None +.tecmint.com TRUE / FALSE 1675532709 cookie fa0853e7-d8a0-4e91-a058-074f97f7f0de Lax +.tecmint.com TRUE / FALSE 1704649512 _au_1d AU1D-0100-001673113511-3SGLB82Q-18HW None +.tecmint.com TRUE / FALSE 1704649512 _au_last_seen_pixels eyJhcG4iOjE2NzMxMTM1MTEsInR0ZCI6MTY3MzExMzUxMSwicHViIjoxNjczMTEzNTExLCJ0YXBhZCI6MTY3MzExMzUxMSwiYWR4IjoxNjczMTEzNTExLCJnb28iOjE2NzMxMTM1MTEsInRhYm9vbGEiOjE2NzMxMTM1MTEsInJ1YiI6MTY3MzExMzUxMSwic21hcnQiOjE2NzMxMTM1MTEsInNvbiI6MTY3MzExMzUxMX0= None +.tecmint.com TRUE / FALSE 1736185512 _ga GA1.2.1550032602.1673113505 None +.tecmint.com TRUE / FALSE 1673199912 _gid GA1.2.502838765.1673113505 None +.tecmint.com TRUE / FALSE 1680889514 _fbp fb.1.1673113512677.293898154 None +.cloudconvert.com TRUE / FALSE 1736185559 _ga GA1.2.547364367.1673113559 None +.cloudconvert.com TRUE / FALSE 1673199959 _gid GA1.2.1518300835.1673113559 None +.unrar.org TRUE / FALSE 1736185654 _ga GA1.2.312953050.1673113654 None +.unrar.org TRUE / FALSE 1673200054 _gid GA1.2.1963178056.1673113654 None +.unrar.org TRUE / FALSE 1673200055 _uetsid 5db3ccb08eb311ed87fb4303e62fb1d9 None +.unrar.org TRUE / FALSE 1706809655 _uetvid 5db407408eb311edb389d524aacb212e None +unrar.org FALSE / TRUE 1673977655 trc_cb 35de8edad1 None +p.unrar.org FALSE / FALSE 1673977656 trc_cs %7B%22q%22%3A%2235de8edad1%22%2C%22s%22%3A%22%22%2C%22c%22%3A%22%22%7D None +.reddit.com TRUE / FALSE 1736272097 recent_srs t5_32rpq%2Ct5_2sx2i%2C None +.descargaranime.xyz TRUE / FALSE 1736188293 _ga GA1.1.1199250369.1673116292 None +.descargaranime.xyz TRUE / FALSE 1736188303 _ga_C7VKRNJ391 GS1.1.1673116291.1.1.1673116302.0.0.0 None +.animefull.top TRUE / FALSE 1736188343 _ga GA1.2.1902937938.1673112941 None +.animefull.top TRUE / FALSE 1673202743 _gid GA1.2.488631525.1673112941 None +inmanga.com FALSE / FALSE 1673123796 ppu_main_252275940ee12987a0cfcaed81850f0e 1 Lax +inmanga.com FALSE / FALSE 1673721396 dom3ic8zudi28v8lr6fgphwffqoz0j6c 5b1a9e90-e7ba-4587-bc1e-f791e306022d%3A2%3A1 Lax +inmanga.com FALSE / FALSE 1673721425 recentlyViewed [{"mangaIdentification":"3df8e479-ec8f-4a49-bcbd-0f3c706c1004","mangaName":"Goblin Slayer: Year One","chapterIdentification":"0e97ab22-670e-4c9a-81aa-15f2ce72bebf","chapterNumber":"74","pageIdentification":"56a66891-11b7-4bf9-8e8f-16fba1f8e856","pageNumber":"3","date":"2023-01-07T18:37:04.182Z","friendlyMangaName":"Goblin-Slayer-Year-One","friendlyChapterNumberUrl":"74"}] None +inmanga.com FALSE / FALSE 1673123894 ppu_sub_252275940ee12987a0cfcaed81850f0e 4 Lax +.buencosplay.com TRUE / FALSE 1706812738 __gads ID=de9a73d73e90db3a-22b938718b7f00be:T=1673116738:RT=1673116738:S=ALNI_MZdtyHrh80zlFaD7GiUH4XgwD21ng None +.buencosplay.com TRUE / FALSE 1706812738 __gpi UID=000009e1e8b0e916:T=1673116738:RT=1673116738:S=ALNI_MYb-Z2WT9wm2UQTxwHksKpVRwffaA None +.buencosplay.com TRUE / FALSE 1736188757 _ga GA1.2.352236065.1673116739 None +.buencosplay.com TRUE / FALSE 1673203157 _gid GA1.2.624012640.1673116739 None +leermanga.net FALSE / FALSE 1673123978 XSRF-TOKEN eyJpdiI6InozN2FHVHdZYm43SVhPVDJGeHZWNEE9PSIsInZhbHVlIjoiMG1PbXdJa1pZcm1hSDdwWWh6R3FLYnZ5bnVvREdjNlhiTzFvOUE5cHd5MklrQmpCSVM2S1pYUEZUMFV6UzdwS0xlUHppVW41OVR6QW15WDdCbFpnY2p0TFg5KzFKcTFvNnBuYzJJUDJLbmczV0JBT3dCOXpsTWZuNHd4ZklUR1AiLCJtYWMiOiJlNzY2ZTA0YjUxYTEyZmMzNGU5ODBkMmE4ZTg3M2VjYmMwNjcyYTc1Y2Y0ODE3MzM1ODIzYjIxOGVjNzJhMmEzIn0%3D Lax +#HttpOnly_leermanga.net FALSE / FALSE 1673123978 laravel_session eyJpdiI6IlFPMTVMZXJyVURtdUI1T1FJV0lsRVE9PSIsInZhbHVlIjoiT3JCOEVLeUkwUmVXUFRUWm54SVV3VENpTEZLc2NBK0t2emN4WWRqM0NObzcrRjVNR0FPSnVtbWRVbVYvN3hXRkF4dzRkVjBZMG9hbEtLRDhYakJ6NWZRUVpYNEdTaUJsS0g2WlRxUllUa1VGd1NZS1h4bVZrcVJFZGZJTWtKYlgiLCJtYWMiOiI3YTY4MjU5MzNkMjk1MWEwZGRlM2UxN2I0YmYxYTFkYWU3ZmFlODk2OTUwOTAxNWQ4NDc0ZmIwNTM0YmNhY2RhIn0%3D Lax +.leermanga.net TRUE / FALSE 1736188779 _ga GA1.2.1086710434.1673116543 None +.leermanga.net TRUE / FALSE 1673203179 _gid GA1.2.1192481244.1673116543 None +.buencosplay.com TRUE / FALSE 1736188801 _ga_3S370W869B GS1.1.1673116738.1.1.1673116801.0.0.0 None +.inmanga.com TRUE / FALSE 1736188803 _ga GA1.2.150799251.1673116593 None +.inmanga.com TRUE / FALSE 1673203203 _gid GA1.2.1971089980.1673116593 None +weechat.org FALSE / FALSE 1704568771 csrftoken fZdVYF1pmoJoTQdHBx69bRB7SYXTxgnJSW0CX6leHGSCQIjGNHNCbYRkbwRT4ZCj Lax +.tiohentai.com TRUE / FALSE 1736191520 _ga GA1.2.580373333.1673119520 None +.tiohentai.com TRUE / FALSE 1673205920 _gid GA1.2.37643684.1673119520 None +.lrb.co.uk TRUE / TRUE 1704655549 _hjSessionUser_344373 eyJpZCI6ImEzODhkNTlhLTFhY2UtNTFmNi05NGVhLThlMGIwYzM3ZmU3MCIsImNyZWF0ZWQiOjE2NzMxMTk1NDkyMzQsImV4aXN0aW5nIjpmYWxzZX0= Lax +.lrb.co.uk TRUE / TRUE 1707247549 _pctx %7Bu%7DN4IgrgzgpgThIC4B2YA2qA05owMoBcBDfSREQpAeyRCwgEt8oBJAEzIEYOBWABgE5B3AEwBmAOwAOcQDYZ3ACyTJIAL5A Lax +.lrb.co.uk TRUE / TRUE 1707247550 _pcid %7B%22browserId%22%3A%22lcmc6iyc2lorznvj%22%7D Lax +.lrb.co.uk TRUE / FALSE 1736191550 __tbc %7Bkpex%7DU3YYUPrMC-kEtq6kBMBQrzj8oGJ8CMt_MDBtCKlMa2J17jWV4JDuv1FZN_7HDXzC Lax +.lrb.co.uk TRUE / FALSE 1675711550 __pat 0 Lax +.lrb.co.uk TRUE / FALSE 1673205950 __pvi eyJpZCI6InYtbGNtYzZpenY3YnN3cWp5byIsImRvbWFpbiI6Ii5scmIuY28udWsiLCJ0aW1lIjoxNjczMTE5NTUwNDM3fQ%3D%3D Lax +.lrb.co.uk TRUE / FALSE 1736191550 xbc %7Bkpex%7DxP1hNlcVlHQ-cxcfHklxn-wQ7Kc0tp2OimdV6XihQrFpACIf8GLyTp4khjF4NksoudtmDS7xjMMr6FPNOHt92oIR7-FHIG7r7fbSs85sTclFYDAbpNMDAFBX9yFO7QGMC_NeyLveH_Eq7HCeMb2QQ_LcEu4MK5aYdTI4zq-4udnMxQDJYaxSCtH7sniyBdJjSmIgb05qMRaEZ5AeInhmrPaWkRR-n8FLqRpUhT8bRxxveM9ne_xwBg-m8oqnCEJbK2j2DaCgwsP3d4qU1Vo3iB56veJjo0zSGzRh03avxLSk70pBDhvvcC1RbWfg_QXlx2daShFJjm1pXEm821KiZWwRNz5GhKODvj4__ARFs3zoMzbVPIocHj4LjH1nw0Oiope-Nw9ff_o15o-CcjgmjoJbu5IUJ8KTLJ64kWPoAu_tYgLes0SUibKUHFzYcjhTTxaDWPorUxSzNe_e-VN_6dZH_Zv-dtyBoxfP0lfsDlM3gpnrsbR4S5l5dwJBv8ToHIHjJbZEmzMtwvZO3E29NtOYM2eEpuB9zs6YGrnp6iRX53MJEkTddQQDoltyvZuL Lax +.lrb.co.uk TRUE / TRUE 1707247550 cX_P lcmc6iyc2lorznvj None +.www.lrb.co.uk TRUE / FALSE 1704655559 OptanonAlertBoxClosed 2023-01-07T19:25:59.854Z Lax +.www.lrb.co.uk TRUE / FALSE 1704655559 OptanonConsent isGpcEnabled=0&datestamp=Sat+Jan+07+2023+14%3A25%3A59+GMT-0500+(hora+est%C3%A1ndar+de+Colombia)&version=202210.1.0&isIABGlobal=false&hosts=&consentId=2ed7d345-d43e-43b0-b1e1-2fbf812e072c&interactionCount=1&landingPath=NotLandingPage&groups=C0001%3A1%2CC0003%3A1%2CC0004%3A0%2CC0005%3A0 Lax +www.phoronix.com FALSE / FALSE 1673124787 _lr_retry_request true None +www.phoronix.com FALSE / FALSE 1675713187 _lr_env_src_ats false None +.phoronix.com TRUE / FALSE 1675540387 cookie cf17ca00-7d92-4d20-8941-0c1f9d9579db Lax +.phoronix.com TRUE / FALSE 1736193549 _ga GA1.2.1348482371.1673109753 None +.phoronix.com TRUE / FALSE 1673207949 _gid GA1.2.1269409926.1673109753 None +.phoronix.com TRUE / FALSE 1707681550 _awl 2.1673121550.5-67f1eafd6f81cd4880323d887fdf9e94-6763652d75732d6561737431-0 None +www.phoronix.com FALSE / FALSE 1675713551 _pbjs_userid_consent_data 3524755945110770 Lax +www.1000chistes.com FALSE / FALSE 1675796130 uePrivacyPolicy 1 None +.1000chistes.com TRUE / FALSE 1736193720 __utma 39651747.992274009.1673121720.1673121720.1673121720.1 None +.1000chistes.com TRUE / FALSE 1673123520 __utmb 39651747.1.10.1673121720 None +.1000chistes.com TRUE / FALSE 1688889720 __utmz 39651747.1673121720.1.1.utmcsr=duckduckgo.com|utmccn=(referral)|utmcmd=referral|utmcct=/ None +.1000chistes.com TRUE / FALSE 1706817720 __gads ID=f44a8f221fb285ad-2236688f41da00d5:T=1673121720:RT=1673121720:S=ALNI_MYWQKGsNMac7zQIPKJvTz3G7zTVyA None +.1000chistes.com TRUE / FALSE 1706817720 __gpi UID=000009e1e9d4e613:T=1673121720:RT=1673121720:S=ALNI_MbUMMJy3TuWY7T0C1gtls4lVY1dUg None +tioanime.com FALSE / FALSE 1673125426 zone-cap-4734030 2 None +.tioanime.com TRUE / FALSE 1736193858 _ga GA1.2.1219496086.1673116461 None +.tioanime.com TRUE / FALSE 1673208258 _gid GA1.2.974196906.1673116461 None +duckduckgo.com FALSE / TRUE 1736658000 ae d Lax +duckduckgo.com FALSE / TRUE 1736658000 7 101010 Lax +duckduckgo.com FALSE / TRUE 1736658000 9 999999 Lax +duckduckgo.com FALSE / TRUE 1736658000 aa 7c7c7c Lax +duckduckgo.com FALSE / TRUE 1736658000 a v Lax +.reddit.com TRUE / TRUE 1704659027 datadome 0NA50hEZ0atAqljK1OFJiSUm4PICcbt8LzRb7fb_iJDBzUZ3OS3zu20qAo1V4EX5fdmGAAzp4givzyX7uSWQmntcQ0RMrWw2VO5Z-SyIxPhTATk1bWXJHyCJs_M1e2mY Lax +#HttpOnly_git.disroot.org FALSE / TRUE 1673209537 _csrf w9tcRplDNRcuoIiTPYR2-ir8NOA6MTY3MzEyMzEzNzI2Mzg3MTMxNQ Lax diff --git a/home/.surf/dlstatus/2690_9_fCqS.mp4 b/home/.surf/dlstatus/2690_9_fCqS.mp4 new file mode 100644 index 0000000..30b84db --- /dev/null +++ b/home/.surf/dlstatus/2690_9_fCqS.mp4 @@ -0,0 +1 @@ +2690_9_fCqS.mp4: 100% (0.30s) -- COMPLETED diff --git a/home/.surf/script.js b/home/.surf/script.js new file mode 100644 index 0000000..e69de29 diff --git a/home/.surf/styles/default.css b/home/.surf/styles/default.css new file mode 100644 index 0000000..e69de29 diff --git a/.vim/.netrwhist b/home/.vim/.netrwhist similarity index 100% rename from .vim/.netrwhist rename to home/.vim/.netrwhist diff --git a/.vim/Gemfile b/home/.vim/Gemfile similarity index 100% rename from .vim/Gemfile rename to home/.vim/Gemfile diff --git a/.vim/autoload/plug.vim b/home/.vim/autoload/plug.vim similarity index 100% rename from .vim/autoload/plug.vim rename to home/.vim/autoload/plug.vim diff --git a/.vim/colors/base16-grayscale-dark.vim b/home/.vim/colors/base16-grayscale-dark.vim similarity index 100% rename from .vim/colors/base16-grayscale-dark.vim rename to home/.vim/colors/base16-grayscale-dark.vim diff --git a/.vim/compiler/tex.vim b/home/.vim/compiler/tex.vim similarity index 100% rename from .vim/compiler/tex.vim rename to home/.vim/compiler/tex.vim diff --git a/.vim/doc/Makefile b/home/.vim/doc/Makefile similarity index 100% rename from .vim/doc/Makefile rename to home/.vim/doc/Makefile diff --git a/.vim/doc/Makefile.in b/home/.vim/doc/Makefile.in similarity index 100% rename from .vim/doc/Makefile.in rename to home/.vim/doc/Makefile.in diff --git a/.vim/doc/README b/home/.vim/doc/README similarity index 100% rename from .vim/doc/README rename to home/.vim/doc/README diff --git a/.vim/doc/README.new b/home/.vim/doc/README.new similarity index 100% rename from .vim/doc/README.new rename to home/.vim/doc/README.new diff --git a/.vim/doc/catalog.xml b/home/.vim/doc/catalog.xml similarity index 100% rename from .vim/doc/catalog.xml rename to home/.vim/doc/catalog.xml diff --git a/.vim/doc/db2vim/db2vim b/home/.vim/doc/db2vim/db2vim similarity index 100% rename from .vim/doc/db2vim/db2vim rename to home/.vim/doc/db2vim/db2vim diff --git a/.vim/doc/db2vim/domutils.py b/home/.vim/doc/db2vim/domutils.py similarity index 100% rename from .vim/doc/db2vim/domutils.py rename to home/.vim/doc/db2vim/domutils.py diff --git a/.vim/doc/db2vim/textutils.py b/home/.vim/doc/db2vim/textutils.py similarity index 100% rename from .vim/doc/db2vim/textutils.py rename to home/.vim/doc/db2vim/textutils.py diff --git a/.vim/doc/imaps.txt b/home/.vim/doc/imaps.txt similarity index 100% rename from .vim/doc/imaps.txt rename to home/.vim/doc/imaps.txt diff --git a/.vim/doc/latex-suite-chunk.xsl b/home/.vim/doc/latex-suite-chunk.xsl similarity index 100% rename from .vim/doc/latex-suite-chunk.xsl rename to home/.vim/doc/latex-suite-chunk.xsl diff --git a/.vim/doc/latex-suite-common.xsl b/home/.vim/doc/latex-suite-common.xsl similarity index 100% rename from .vim/doc/latex-suite-common.xsl rename to home/.vim/doc/latex-suite-common.xsl diff --git a/.vim/doc/latex-suite-quickstart.css b/home/.vim/doc/latex-suite-quickstart.css similarity index 100% rename from .vim/doc/latex-suite-quickstart.css rename to home/.vim/doc/latex-suite-quickstart.css diff --git a/.vim/doc/latex-suite-quickstart.txt b/home/.vim/doc/latex-suite-quickstart.txt similarity index 100% rename from .vim/doc/latex-suite-quickstart.txt rename to home/.vim/doc/latex-suite-quickstart.txt diff --git a/.vim/doc/latex-suite-quickstart.xml b/home/.vim/doc/latex-suite-quickstart.xml similarity index 100% rename from .vim/doc/latex-suite-quickstart.xml rename to home/.vim/doc/latex-suite-quickstart.xml diff --git a/.vim/doc/latex-suite.css b/home/.vim/doc/latex-suite.css similarity index 100% rename from .vim/doc/latex-suite.css rename to home/.vim/doc/latex-suite.css diff --git a/.vim/doc/latex-suite.txt b/home/.vim/doc/latex-suite.txt similarity index 100% rename from .vim/doc/latex-suite.txt rename to home/.vim/doc/latex-suite.txt diff --git a/.vim/doc/latex-suite.xml b/home/.vim/doc/latex-suite.xml similarity index 100% rename from .vim/doc/latex-suite.xml rename to home/.vim/doc/latex-suite.xml diff --git a/.vim/doc/latex-suite.xsl b/home/.vim/doc/latex-suite.xsl similarity index 100% rename from .vim/doc/latex-suite.xsl rename to home/.vim/doc/latex-suite.xsl diff --git a/.vim/doc/tags b/home/.vim/doc/tags similarity index 100% rename from .vim/doc/tags rename to home/.vim/doc/tags diff --git a/.vim/ftplugin/bib_latexSuite.vim b/home/.vim/ftplugin/bib_latexSuite.vim similarity index 100% rename from .vim/ftplugin/bib_latexSuite.vim rename to home/.vim/ftplugin/bib_latexSuite.vim diff --git a/.vim/ftplugin/latex-suite/bibtex.vim b/home/.vim/ftplugin/latex-suite/bibtex.vim similarity index 100% rename from .vim/ftplugin/latex-suite/bibtex.vim rename to home/.vim/ftplugin/latex-suite/bibtex.vim diff --git a/.vim/ftplugin/latex-suite/bibtools.py b/home/.vim/ftplugin/latex-suite/bibtools.py similarity index 100% rename from .vim/ftplugin/latex-suite/bibtools.py rename to home/.vim/ftplugin/latex-suite/bibtools.py diff --git a/.vim/ftplugin/latex-suite/brackets.vim b/home/.vim/ftplugin/latex-suite/brackets.vim similarity index 100% rename from .vim/ftplugin/latex-suite/brackets.vim rename to home/.vim/ftplugin/latex-suite/brackets.vim diff --git a/.vim/ftplugin/latex-suite/compiler.vim b/home/.vim/ftplugin/latex-suite/compiler.vim similarity index 100% rename from .vim/ftplugin/latex-suite/compiler.vim rename to home/.vim/ftplugin/latex-suite/compiler.vim diff --git a/.vim/ftplugin/latex-suite/custommacros.vim b/home/.vim/ftplugin/latex-suite/custommacros.vim similarity index 100% rename from .vim/ftplugin/latex-suite/custommacros.vim rename to home/.vim/ftplugin/latex-suite/custommacros.vim diff --git a/.vim/ftplugin/latex-suite/diacritics.vim b/home/.vim/ftplugin/latex-suite/diacritics.vim similarity index 100% rename from .vim/ftplugin/latex-suite/diacritics.vim rename to home/.vim/ftplugin/latex-suite/diacritics.vim diff --git a/.vim/ftplugin/latex-suite/dictionaries/SIunits b/home/.vim/ftplugin/latex-suite/dictionaries/SIunits similarity index 100% rename from .vim/ftplugin/latex-suite/dictionaries/SIunits rename to home/.vim/ftplugin/latex-suite/dictionaries/SIunits diff --git a/.vim/ftplugin/latex-suite/dictionaries/dictionary b/home/.vim/ftplugin/latex-suite/dictionaries/dictionary similarity index 100% rename from .vim/ftplugin/latex-suite/dictionaries/dictionary rename to home/.vim/ftplugin/latex-suite/dictionaries/dictionary diff --git a/.vim/ftplugin/latex-suite/elementmacros.vim b/home/.vim/ftplugin/latex-suite/elementmacros.vim similarity index 100% rename from .vim/ftplugin/latex-suite/elementmacros.vim rename to home/.vim/ftplugin/latex-suite/elementmacros.vim diff --git a/.vim/ftplugin/latex-suite/envmacros.vim b/home/.vim/ftplugin/latex-suite/envmacros.vim similarity index 100% rename from .vim/ftplugin/latex-suite/envmacros.vim rename to home/.vim/ftplugin/latex-suite/envmacros.vim diff --git a/.vim/ftplugin/latex-suite/folding.vim b/home/.vim/ftplugin/latex-suite/folding.vim similarity index 100% rename from .vim/ftplugin/latex-suite/folding.vim rename to home/.vim/ftplugin/latex-suite/folding.vim diff --git a/.vim/ftplugin/latex-suite/macros/example b/home/.vim/ftplugin/latex-suite/macros/example similarity index 100% rename from .vim/ftplugin/latex-suite/macros/example rename to home/.vim/ftplugin/latex-suite/macros/example diff --git a/.vim/ftplugin/latex-suite/main.vim b/home/.vim/ftplugin/latex-suite/main.vim similarity index 100% rename from .vim/ftplugin/latex-suite/main.vim rename to home/.vim/ftplugin/latex-suite/main.vim diff --git a/.vim/ftplugin/latex-suite/mathmacros-utf.vim b/home/.vim/ftplugin/latex-suite/mathmacros-utf.vim similarity index 100% rename from .vim/ftplugin/latex-suite/mathmacros-utf.vim rename to home/.vim/ftplugin/latex-suite/mathmacros-utf.vim diff --git a/.vim/ftplugin/latex-suite/mathmacros.vim b/home/.vim/ftplugin/latex-suite/mathmacros.vim similarity index 100% rename from .vim/ftplugin/latex-suite/mathmacros.vim rename to home/.vim/ftplugin/latex-suite/mathmacros.vim diff --git a/.vim/ftplugin/latex-suite/multicompile.vim b/home/.vim/ftplugin/latex-suite/multicompile.vim similarity index 100% rename from .vim/ftplugin/latex-suite/multicompile.vim rename to home/.vim/ftplugin/latex-suite/multicompile.vim diff --git a/.vim/ftplugin/latex-suite/outline.py b/home/.vim/ftplugin/latex-suite/outline.py similarity index 100% rename from .vim/ftplugin/latex-suite/outline.py rename to home/.vim/ftplugin/latex-suite/outline.py diff --git a/.vim/ftplugin/latex-suite/packages.vim b/home/.vim/ftplugin/latex-suite/packages.vim similarity index 100% rename from .vim/ftplugin/latex-suite/packages.vim rename to home/.vim/ftplugin/latex-suite/packages.vim diff --git a/.vim/ftplugin/latex-suite/packages/SIunits b/home/.vim/ftplugin/latex-suite/packages/SIunits similarity index 100% rename from .vim/ftplugin/latex-suite/packages/SIunits rename to home/.vim/ftplugin/latex-suite/packages/SIunits diff --git a/.vim/ftplugin/latex-suite/packages/accents b/home/.vim/ftplugin/latex-suite/packages/accents similarity index 100% rename from .vim/ftplugin/latex-suite/packages/accents rename to home/.vim/ftplugin/latex-suite/packages/accents diff --git a/.vim/ftplugin/latex-suite/packages/acromake b/home/.vim/ftplugin/latex-suite/packages/acromake similarity index 100% rename from .vim/ftplugin/latex-suite/packages/acromake rename to home/.vim/ftplugin/latex-suite/packages/acromake diff --git a/.vim/ftplugin/latex-suite/packages/afterpage b/home/.vim/ftplugin/latex-suite/packages/afterpage similarity index 100% rename from .vim/ftplugin/latex-suite/packages/afterpage rename to home/.vim/ftplugin/latex-suite/packages/afterpage diff --git a/.vim/ftplugin/latex-suite/packages/alltt b/home/.vim/ftplugin/latex-suite/packages/alltt similarity index 100% rename from .vim/ftplugin/latex-suite/packages/alltt rename to home/.vim/ftplugin/latex-suite/packages/alltt diff --git a/.vim/ftplugin/latex-suite/packages/amsmath b/home/.vim/ftplugin/latex-suite/packages/amsmath similarity index 100% rename from .vim/ftplugin/latex-suite/packages/amsmath rename to home/.vim/ftplugin/latex-suite/packages/amsmath diff --git a/.vim/ftplugin/latex-suite/packages/amsthm b/home/.vim/ftplugin/latex-suite/packages/amsthm similarity index 100% rename from .vim/ftplugin/latex-suite/packages/amsthm rename to home/.vim/ftplugin/latex-suite/packages/amsthm diff --git a/.vim/ftplugin/latex-suite/packages/amsxtra b/home/.vim/ftplugin/latex-suite/packages/amsxtra similarity index 100% rename from .vim/ftplugin/latex-suite/packages/amsxtra rename to home/.vim/ftplugin/latex-suite/packages/amsxtra diff --git a/.vim/ftplugin/latex-suite/packages/arabic b/home/.vim/ftplugin/latex-suite/packages/arabic similarity index 100% rename from .vim/ftplugin/latex-suite/packages/arabic rename to home/.vim/ftplugin/latex-suite/packages/arabic diff --git a/.vim/ftplugin/latex-suite/packages/array b/home/.vim/ftplugin/latex-suite/packages/array similarity index 100% rename from .vim/ftplugin/latex-suite/packages/array rename to home/.vim/ftplugin/latex-suite/packages/array diff --git a/.vim/ftplugin/latex-suite/packages/babel b/home/.vim/ftplugin/latex-suite/packages/babel similarity index 100% rename from .vim/ftplugin/latex-suite/packages/babel rename to home/.vim/ftplugin/latex-suite/packages/babel diff --git a/.vim/ftplugin/latex-suite/packages/bar b/home/.vim/ftplugin/latex-suite/packages/bar similarity index 100% rename from .vim/ftplugin/latex-suite/packages/bar rename to home/.vim/ftplugin/latex-suite/packages/bar diff --git a/.vim/ftplugin/latex-suite/packages/biblatex b/home/.vim/ftplugin/latex-suite/packages/biblatex similarity index 100% rename from .vim/ftplugin/latex-suite/packages/biblatex rename to home/.vim/ftplugin/latex-suite/packages/biblatex diff --git a/.vim/ftplugin/latex-suite/packages/bm b/home/.vim/ftplugin/latex-suite/packages/bm similarity index 100% rename from .vim/ftplugin/latex-suite/packages/bm rename to home/.vim/ftplugin/latex-suite/packages/bm diff --git a/.vim/ftplugin/latex-suite/packages/bophook b/home/.vim/ftplugin/latex-suite/packages/bophook similarity index 100% rename from .vim/ftplugin/latex-suite/packages/bophook rename to home/.vim/ftplugin/latex-suite/packages/bophook diff --git a/.vim/ftplugin/latex-suite/packages/boxedminipage b/home/.vim/ftplugin/latex-suite/packages/boxedminipage similarity index 100% rename from .vim/ftplugin/latex-suite/packages/boxedminipage rename to home/.vim/ftplugin/latex-suite/packages/boxedminipage diff --git a/.vim/ftplugin/latex-suite/packages/caption2 b/home/.vim/ftplugin/latex-suite/packages/caption2 similarity index 100% rename from .vim/ftplugin/latex-suite/packages/caption2 rename to home/.vim/ftplugin/latex-suite/packages/caption2 diff --git a/.vim/ftplugin/latex-suite/packages/cases b/home/.vim/ftplugin/latex-suite/packages/cases similarity index 100% rename from .vim/ftplugin/latex-suite/packages/cases rename to home/.vim/ftplugin/latex-suite/packages/cases diff --git a/.vim/ftplugin/latex-suite/packages/ccaption b/home/.vim/ftplugin/latex-suite/packages/ccaption similarity index 100% rename from .vim/ftplugin/latex-suite/packages/ccaption rename to home/.vim/ftplugin/latex-suite/packages/ccaption diff --git a/.vim/ftplugin/latex-suite/packages/changebar b/home/.vim/ftplugin/latex-suite/packages/changebar similarity index 100% rename from .vim/ftplugin/latex-suite/packages/changebar rename to home/.vim/ftplugin/latex-suite/packages/changebar diff --git a/.vim/ftplugin/latex-suite/packages/chapterbib b/home/.vim/ftplugin/latex-suite/packages/chapterbib similarity index 100% rename from .vim/ftplugin/latex-suite/packages/chapterbib rename to home/.vim/ftplugin/latex-suite/packages/chapterbib diff --git a/.vim/ftplugin/latex-suite/packages/cite b/home/.vim/ftplugin/latex-suite/packages/cite similarity index 100% rename from .vim/ftplugin/latex-suite/packages/cite rename to home/.vim/ftplugin/latex-suite/packages/cite diff --git a/.vim/ftplugin/latex-suite/packages/color b/home/.vim/ftplugin/latex-suite/packages/color similarity index 100% rename from .vim/ftplugin/latex-suite/packages/color rename to home/.vim/ftplugin/latex-suite/packages/color diff --git a/.vim/ftplugin/latex-suite/packages/comma b/home/.vim/ftplugin/latex-suite/packages/comma similarity index 100% rename from .vim/ftplugin/latex-suite/packages/comma rename to home/.vim/ftplugin/latex-suite/packages/comma diff --git a/.vim/ftplugin/latex-suite/packages/csquotes b/home/.vim/ftplugin/latex-suite/packages/csquotes similarity index 100% rename from .vim/ftplugin/latex-suite/packages/csquotes rename to home/.vim/ftplugin/latex-suite/packages/csquotes diff --git a/.vim/ftplugin/latex-suite/packages/deleq b/home/.vim/ftplugin/latex-suite/packages/deleq similarity index 100% rename from .vim/ftplugin/latex-suite/packages/deleq rename to home/.vim/ftplugin/latex-suite/packages/deleq diff --git a/.vim/ftplugin/latex-suite/packages/drftcite b/home/.vim/ftplugin/latex-suite/packages/drftcite similarity index 100% rename from .vim/ftplugin/latex-suite/packages/drftcite rename to home/.vim/ftplugin/latex-suite/packages/drftcite diff --git a/.vim/ftplugin/latex-suite/packages/dropping b/home/.vim/ftplugin/latex-suite/packages/dropping similarity index 100% rename from .vim/ftplugin/latex-suite/packages/dropping rename to home/.vim/ftplugin/latex-suite/packages/dropping diff --git a/.vim/ftplugin/latex-suite/packages/enumerate b/home/.vim/ftplugin/latex-suite/packages/enumerate similarity index 100% rename from .vim/ftplugin/latex-suite/packages/enumerate rename to home/.vim/ftplugin/latex-suite/packages/enumerate diff --git a/.vim/ftplugin/latex-suite/packages/eqlist b/home/.vim/ftplugin/latex-suite/packages/eqlist similarity index 100% rename from .vim/ftplugin/latex-suite/packages/eqlist rename to home/.vim/ftplugin/latex-suite/packages/eqlist diff --git a/.vim/ftplugin/latex-suite/packages/eqparbox b/home/.vim/ftplugin/latex-suite/packages/eqparbox similarity index 100% rename from .vim/ftplugin/latex-suite/packages/eqparbox rename to home/.vim/ftplugin/latex-suite/packages/eqparbox diff --git a/.vim/ftplugin/latex-suite/packages/everyshi b/home/.vim/ftplugin/latex-suite/packages/everyshi similarity index 100% rename from .vim/ftplugin/latex-suite/packages/everyshi rename to home/.vim/ftplugin/latex-suite/packages/everyshi diff --git a/.vim/ftplugin/latex-suite/packages/exmpl b/home/.vim/ftplugin/latex-suite/packages/exmpl similarity index 100% rename from .vim/ftplugin/latex-suite/packages/exmpl rename to home/.vim/ftplugin/latex-suite/packages/exmpl diff --git a/.vim/ftplugin/latex-suite/packages/fixme b/home/.vim/ftplugin/latex-suite/packages/fixme similarity index 100% rename from .vim/ftplugin/latex-suite/packages/fixme rename to home/.vim/ftplugin/latex-suite/packages/fixme diff --git a/.vim/ftplugin/latex-suite/packages/flafter b/home/.vim/ftplugin/latex-suite/packages/flafter similarity index 100% rename from .vim/ftplugin/latex-suite/packages/flafter rename to home/.vim/ftplugin/latex-suite/packages/flafter diff --git a/.vim/ftplugin/latex-suite/packages/float b/home/.vim/ftplugin/latex-suite/packages/float similarity index 100% rename from .vim/ftplugin/latex-suite/packages/float rename to home/.vim/ftplugin/latex-suite/packages/float diff --git a/.vim/ftplugin/latex-suite/packages/floatflt b/home/.vim/ftplugin/latex-suite/packages/floatflt similarity index 100% rename from .vim/ftplugin/latex-suite/packages/floatflt rename to home/.vim/ftplugin/latex-suite/packages/floatflt diff --git a/.vim/ftplugin/latex-suite/packages/fn2end b/home/.vim/ftplugin/latex-suite/packages/fn2end similarity index 100% rename from .vim/ftplugin/latex-suite/packages/fn2end rename to home/.vim/ftplugin/latex-suite/packages/fn2end diff --git a/.vim/ftplugin/latex-suite/packages/footmisc b/home/.vim/ftplugin/latex-suite/packages/footmisc similarity index 100% rename from .vim/ftplugin/latex-suite/packages/footmisc rename to home/.vim/ftplugin/latex-suite/packages/footmisc diff --git a/.vim/ftplugin/latex-suite/packages/geometry b/home/.vim/ftplugin/latex-suite/packages/geometry similarity index 100% rename from .vim/ftplugin/latex-suite/packages/geometry rename to home/.vim/ftplugin/latex-suite/packages/geometry diff --git a/.vim/ftplugin/latex-suite/packages/german b/home/.vim/ftplugin/latex-suite/packages/german similarity index 100% rename from .vim/ftplugin/latex-suite/packages/german rename to home/.vim/ftplugin/latex-suite/packages/german diff --git a/.vim/ftplugin/latex-suite/packages/graphicx b/home/.vim/ftplugin/latex-suite/packages/graphicx similarity index 100% rename from .vim/ftplugin/latex-suite/packages/graphicx rename to home/.vim/ftplugin/latex-suite/packages/graphicx diff --git a/.vim/ftplugin/latex-suite/packages/graphpap b/home/.vim/ftplugin/latex-suite/packages/graphpap similarity index 100% rename from .vim/ftplugin/latex-suite/packages/graphpap rename to home/.vim/ftplugin/latex-suite/packages/graphpap diff --git a/.vim/ftplugin/latex-suite/packages/harpoon b/home/.vim/ftplugin/latex-suite/packages/harpoon similarity index 100% rename from .vim/ftplugin/latex-suite/packages/harpoon rename to home/.vim/ftplugin/latex-suite/packages/harpoon diff --git a/.vim/ftplugin/latex-suite/packages/hhline b/home/.vim/ftplugin/latex-suite/packages/hhline similarity index 100% rename from .vim/ftplugin/latex-suite/packages/hhline rename to home/.vim/ftplugin/latex-suite/packages/hhline diff --git a/.vim/ftplugin/latex-suite/packages/histogram b/home/.vim/ftplugin/latex-suite/packages/histogram similarity index 100% rename from .vim/ftplugin/latex-suite/packages/histogram rename to home/.vim/ftplugin/latex-suite/packages/histogram diff --git a/.vim/ftplugin/latex-suite/packages/hyperref b/home/.vim/ftplugin/latex-suite/packages/hyperref similarity index 100% rename from .vim/ftplugin/latex-suite/packages/hyperref rename to home/.vim/ftplugin/latex-suite/packages/hyperref diff --git a/.vim/ftplugin/latex-suite/packages/ifthen b/home/.vim/ftplugin/latex-suite/packages/ifthen similarity index 100% rename from .vim/ftplugin/latex-suite/packages/ifthen rename to home/.vim/ftplugin/latex-suite/packages/ifthen diff --git a/.vim/ftplugin/latex-suite/packages/inputenc b/home/.vim/ftplugin/latex-suite/packages/inputenc similarity index 100% rename from .vim/ftplugin/latex-suite/packages/inputenc rename to home/.vim/ftplugin/latex-suite/packages/inputenc diff --git a/.vim/ftplugin/latex-suite/packages/letterspace b/home/.vim/ftplugin/latex-suite/packages/letterspace similarity index 100% rename from .vim/ftplugin/latex-suite/packages/letterspace rename to home/.vim/ftplugin/latex-suite/packages/letterspace diff --git a/.vim/ftplugin/latex-suite/packages/lineno b/home/.vim/ftplugin/latex-suite/packages/lineno similarity index 100% rename from .vim/ftplugin/latex-suite/packages/lineno rename to home/.vim/ftplugin/latex-suite/packages/lineno diff --git a/.vim/ftplugin/latex-suite/packages/longtable b/home/.vim/ftplugin/latex-suite/packages/longtable similarity index 100% rename from .vim/ftplugin/latex-suite/packages/longtable rename to home/.vim/ftplugin/latex-suite/packages/longtable diff --git a/.vim/ftplugin/latex-suite/packages/lscape b/home/.vim/ftplugin/latex-suite/packages/lscape similarity index 100% rename from .vim/ftplugin/latex-suite/packages/lscape rename to home/.vim/ftplugin/latex-suite/packages/lscape diff --git a/.vim/ftplugin/latex-suite/packages/manyfoot b/home/.vim/ftplugin/latex-suite/packages/manyfoot similarity index 100% rename from .vim/ftplugin/latex-suite/packages/manyfoot rename to home/.vim/ftplugin/latex-suite/packages/manyfoot diff --git a/.vim/ftplugin/latex-suite/packages/moreverb b/home/.vim/ftplugin/latex-suite/packages/moreverb similarity index 100% rename from .vim/ftplugin/latex-suite/packages/moreverb rename to home/.vim/ftplugin/latex-suite/packages/moreverb diff --git a/.vim/ftplugin/latex-suite/packages/multibox b/home/.vim/ftplugin/latex-suite/packages/multibox similarity index 100% rename from .vim/ftplugin/latex-suite/packages/multibox rename to home/.vim/ftplugin/latex-suite/packages/multibox diff --git a/.vim/ftplugin/latex-suite/packages/multicol b/home/.vim/ftplugin/latex-suite/packages/multicol similarity index 100% rename from .vim/ftplugin/latex-suite/packages/multicol rename to home/.vim/ftplugin/latex-suite/packages/multicol diff --git a/.vim/ftplugin/latex-suite/packages/newalg b/home/.vim/ftplugin/latex-suite/packages/newalg similarity index 100% rename from .vim/ftplugin/latex-suite/packages/newalg rename to home/.vim/ftplugin/latex-suite/packages/newalg diff --git a/.vim/ftplugin/latex-suite/packages/ngerman b/home/.vim/ftplugin/latex-suite/packages/ngerman similarity index 100% rename from .vim/ftplugin/latex-suite/packages/ngerman rename to home/.vim/ftplugin/latex-suite/packages/ngerman diff --git a/.vim/ftplugin/latex-suite/packages/numprint b/home/.vim/ftplugin/latex-suite/packages/numprint similarity index 100% rename from .vim/ftplugin/latex-suite/packages/numprint rename to home/.vim/ftplugin/latex-suite/packages/numprint diff --git a/.vim/ftplugin/latex-suite/packages/oldstyle b/home/.vim/ftplugin/latex-suite/packages/oldstyle similarity index 100% rename from .vim/ftplugin/latex-suite/packages/oldstyle rename to home/.vim/ftplugin/latex-suite/packages/oldstyle diff --git a/.vim/ftplugin/latex-suite/packages/outliner b/home/.vim/ftplugin/latex-suite/packages/outliner similarity index 100% rename from .vim/ftplugin/latex-suite/packages/outliner rename to home/.vim/ftplugin/latex-suite/packages/outliner diff --git a/.vim/ftplugin/latex-suite/packages/overcite b/home/.vim/ftplugin/latex-suite/packages/overcite similarity index 100% rename from .vim/ftplugin/latex-suite/packages/overcite rename to home/.vim/ftplugin/latex-suite/packages/overcite diff --git a/.vim/ftplugin/latex-suite/packages/pagenote b/home/.vim/ftplugin/latex-suite/packages/pagenote similarity index 100% rename from .vim/ftplugin/latex-suite/packages/pagenote rename to home/.vim/ftplugin/latex-suite/packages/pagenote diff --git a/.vim/ftplugin/latex-suite/packages/parallel b/home/.vim/ftplugin/latex-suite/packages/parallel similarity index 100% rename from .vim/ftplugin/latex-suite/packages/parallel rename to home/.vim/ftplugin/latex-suite/packages/parallel diff --git a/.vim/ftplugin/latex-suite/packages/plain b/home/.vim/ftplugin/latex-suite/packages/plain similarity index 100% rename from .vim/ftplugin/latex-suite/packages/plain rename to home/.vim/ftplugin/latex-suite/packages/plain diff --git a/.vim/ftplugin/latex-suite/packages/plates b/home/.vim/ftplugin/latex-suite/packages/plates similarity index 100% rename from .vim/ftplugin/latex-suite/packages/plates rename to home/.vim/ftplugin/latex-suite/packages/plates diff --git a/.vim/ftplugin/latex-suite/packages/polski b/home/.vim/ftplugin/latex-suite/packages/polski similarity index 100% rename from .vim/ftplugin/latex-suite/packages/polski rename to home/.vim/ftplugin/latex-suite/packages/polski diff --git a/.vim/ftplugin/latex-suite/packages/psgo b/home/.vim/ftplugin/latex-suite/packages/psgo similarity index 100% rename from .vim/ftplugin/latex-suite/packages/psgo rename to home/.vim/ftplugin/latex-suite/packages/psgo diff --git a/.vim/ftplugin/latex-suite/packages/schedule b/home/.vim/ftplugin/latex-suite/packages/schedule similarity index 100% rename from .vim/ftplugin/latex-suite/packages/schedule rename to home/.vim/ftplugin/latex-suite/packages/schedule diff --git a/.vim/ftplugin/latex-suite/packages/textfit b/home/.vim/ftplugin/latex-suite/packages/textfit similarity index 100% rename from .vim/ftplugin/latex-suite/packages/textfit rename to home/.vim/ftplugin/latex-suite/packages/textfit diff --git a/.vim/ftplugin/latex-suite/packages/times b/home/.vim/ftplugin/latex-suite/packages/times similarity index 100% rename from .vim/ftplugin/latex-suite/packages/times rename to home/.vim/ftplugin/latex-suite/packages/times diff --git a/.vim/ftplugin/latex-suite/packages/tipa b/home/.vim/ftplugin/latex-suite/packages/tipa similarity index 100% rename from .vim/ftplugin/latex-suite/packages/tipa rename to home/.vim/ftplugin/latex-suite/packages/tipa diff --git a/.vim/ftplugin/latex-suite/packages/ulem b/home/.vim/ftplugin/latex-suite/packages/ulem similarity index 100% rename from .vim/ftplugin/latex-suite/packages/ulem rename to home/.vim/ftplugin/latex-suite/packages/ulem diff --git a/.vim/ftplugin/latex-suite/packages/url b/home/.vim/ftplugin/latex-suite/packages/url similarity index 100% rename from .vim/ftplugin/latex-suite/packages/url rename to home/.vim/ftplugin/latex-suite/packages/url diff --git a/.vim/ftplugin/latex-suite/packages/verbatim b/home/.vim/ftplugin/latex-suite/packages/verbatim similarity index 100% rename from .vim/ftplugin/latex-suite/packages/verbatim rename to home/.vim/ftplugin/latex-suite/packages/verbatim diff --git a/.vim/ftplugin/latex-suite/packages/version b/home/.vim/ftplugin/latex-suite/packages/version similarity index 100% rename from .vim/ftplugin/latex-suite/packages/version rename to home/.vim/ftplugin/latex-suite/packages/version diff --git a/.vim/ftplugin/latex-suite/projecttemplate.vim b/home/.vim/ftplugin/latex-suite/projecttemplate.vim similarity index 100% rename from .vim/ftplugin/latex-suite/projecttemplate.vim rename to home/.vim/ftplugin/latex-suite/projecttemplate.vim diff --git a/.vim/ftplugin/latex-suite/pytools.py b/home/.vim/ftplugin/latex-suite/pytools.py similarity index 100% rename from .vim/ftplugin/latex-suite/pytools.py rename to home/.vim/ftplugin/latex-suite/pytools.py diff --git a/.vim/ftplugin/latex-suite/smartspace.vim b/home/.vim/ftplugin/latex-suite/smartspace.vim similarity index 100% rename from .vim/ftplugin/latex-suite/smartspace.vim rename to home/.vim/ftplugin/latex-suite/smartspace.vim diff --git a/.vim/ftplugin/latex-suite/templates.vim b/home/.vim/ftplugin/latex-suite/templates.vim similarity index 100% rename from .vim/ftplugin/latex-suite/templates.vim rename to home/.vim/ftplugin/latex-suite/templates.vim diff --git a/.vim/ftplugin/latex-suite/templates/IEEEtran.tex b/home/.vim/ftplugin/latex-suite/templates/IEEEtran.tex similarity index 100% rename from .vim/ftplugin/latex-suite/templates/IEEEtran.tex rename to home/.vim/ftplugin/latex-suite/templates/IEEEtran.tex diff --git a/.vim/ftplugin/latex-suite/templates/article.tex b/home/.vim/ftplugin/latex-suite/templates/article.tex similarity index 100% rename from .vim/ftplugin/latex-suite/templates/article.tex rename to home/.vim/ftplugin/latex-suite/templates/article.tex diff --git a/.vim/ftplugin/latex-suite/templates/report.tex b/home/.vim/ftplugin/latex-suite/templates/report.tex similarity index 100% rename from .vim/ftplugin/latex-suite/templates/report.tex rename to home/.vim/ftplugin/latex-suite/templates/report.tex diff --git a/.vim/ftplugin/latex-suite/templates/report_two_column.tex b/home/.vim/ftplugin/latex-suite/templates/report_two_column.tex similarity index 100% rename from .vim/ftplugin/latex-suite/templates/report_two_column.tex rename to home/.vim/ftplugin/latex-suite/templates/report_two_column.tex diff --git a/.vim/ftplugin/latex-suite/texmenuconf.vim b/home/.vim/ftplugin/latex-suite/texmenuconf.vim similarity index 100% rename from .vim/ftplugin/latex-suite/texmenuconf.vim rename to home/.vim/ftplugin/latex-suite/texmenuconf.vim diff --git a/.vim/ftplugin/latex-suite/texproject.vim b/home/.vim/ftplugin/latex-suite/texproject.vim similarity index 100% rename from .vim/ftplugin/latex-suite/texproject.vim rename to home/.vim/ftplugin/latex-suite/texproject.vim diff --git a/.vim/ftplugin/latex-suite/texrc b/home/.vim/ftplugin/latex-suite/texrc similarity index 100% rename from .vim/ftplugin/latex-suite/texrc rename to home/.vim/ftplugin/latex-suite/texrc diff --git a/.vim/ftplugin/latex-suite/texviewer.vim b/home/.vim/ftplugin/latex-suite/texviewer.vim similarity index 100% rename from .vim/ftplugin/latex-suite/texviewer.vim rename to home/.vim/ftplugin/latex-suite/texviewer.vim diff --git a/.vim/ftplugin/latex-suite/version.vim b/home/.vim/ftplugin/latex-suite/version.vim similarity index 100% rename from .vim/ftplugin/latex-suite/version.vim rename to home/.vim/ftplugin/latex-suite/version.vim diff --git a/.vim/ftplugin/latex-suite/wizardfuncs.vim b/home/.vim/ftplugin/latex-suite/wizardfuncs.vim similarity index 100% rename from .vim/ftplugin/latex-suite/wizardfuncs.vim rename to home/.vim/ftplugin/latex-suite/wizardfuncs.vim diff --git a/.vim/ftplugin/tex.vim b/home/.vim/ftplugin/tex.vim similarity index 100% rename from .vim/ftplugin/tex.vim rename to home/.vim/ftplugin/tex.vim diff --git a/.vim/ftplugin/tex_latexSuite.vim b/home/.vim/ftplugin/tex_latexSuite.vim similarity index 100% rename from .vim/ftplugin/tex_latexSuite.vim rename to home/.vim/ftplugin/tex_latexSuite.vim diff --git a/.vim/indent/tex.vim b/home/.vim/indent/tex.vim similarity index 100% rename from .vim/indent/tex.vim rename to home/.vim/indent/tex.vim diff --git a/.vim/latextags b/home/.vim/latextags similarity index 100% rename from .vim/latextags rename to home/.vim/latextags diff --git a/.vim/ltags b/home/.vim/ltags similarity index 100% rename from .vim/ltags rename to home/.vim/ltags diff --git a/.vim/plugin/SyntaxFolds.vim b/home/.vim/plugin/SyntaxFolds.vim similarity index 100% rename from .vim/plugin/SyntaxFolds.vim rename to home/.vim/plugin/SyntaxFolds.vim diff --git a/.vim/plugin/filebrowser.vim b/home/.vim/plugin/filebrowser.vim similarity index 100% rename from .vim/plugin/filebrowser.vim rename to home/.vim/plugin/filebrowser.vim diff --git a/.vim/plugin/imaps.vim b/home/.vim/plugin/imaps.vim similarity index 100% rename from .vim/plugin/imaps.vim rename to home/.vim/plugin/imaps.vim diff --git a/.vim/plugin/remoteOpen.vim b/home/.vim/plugin/remoteOpen.vim similarity index 100% rename from .vim/plugin/remoteOpen.vim rename to home/.vim/plugin/remoteOpen.vim diff --git a/.vim/spell/es.utf-8.spl b/home/.vim/spell/es.utf-8.spl similarity index 100% rename from .vim/spell/es.utf-8.spl rename to home/.vim/spell/es.utf-8.spl diff --git a/.vim/spell/es.utf-8.sug b/home/.vim/spell/es.utf-8.sug similarity index 100% rename from .vim/spell/es.utf-8.sug rename to home/.vim/spell/es.utf-8.sug